Repository: walaj/svaba Branch: master Commit: 645fab67c906 Files: 399 Total size: 131.2 MB Directory structure: gitextract_ugvk6jc2/ ├── CLAUDE.md ├── CMakeLists.txt ├── Dockerfile ├── LICENSE ├── R/ │ └── archive_non_functional/ │ ├── create-databases.R │ ├── gen_quals.R │ ├── svaba-annotate.R │ ├── svaba-asqg2pdf.R │ ├── svaba-bam-qcplot.R │ ├── svaba-benchmark.R │ ├── svaba-bps-to-maflite.R │ ├── svaba-circos.R │ ├── svaba-create-pon.R │ ├── svaba-event-plot.R │ ├── svaba-histogram.R │ ├── svaba-nozzle.R │ ├── svaba-sig.R │ └── svaba-vcf-to-maflite.R ├── README.md ├── docs/ │ ├── README.md │ ├── alignments_viewer.html │ ├── app.js │ ├── bps_explorer.html │ ├── bps_viewer.html │ ├── comparison.html │ ├── index.html │ ├── learn_explorer.html │ ├── r2c_explorer.html │ ├── runtime_explorer.html │ └── styles.css ├── notes ├── opt/ │ ├── jemalloc_test.sh │ ├── memprof.sh │ ├── memprof_osx.sh │ ├── memusg.sh │ ├── profiler.sh │ └── runtime.R ├── scripts/ │ ├── combine_blacklists.sh │ ├── extract_by_qname.sh │ ├── extract_discordants.sh │ ├── extract_pairs_by_seq.sh │ ├── filter_contig_supporting_reads.sh │ ├── gcloud_teardown.sh │ ├── mosdepth_lowmapq_blacklist.sh │ ├── plot_learn.sh │ ├── r2c_for_contig.sh │ ├── search_sequence.sh │ ├── sort_and_dedupe_bps_old.sh │ ├── sort_bps.sh │ ├── svaba_cloud.sh │ ├── svaba_local_function.sh │ ├── svaba_postprocess.sh │ └── update_svaba_image.sh ├── src/ │ ├── SGA/ │ │ ├── Algorithm/ │ │ │ ├── ClusterProcess.cpp │ │ │ ├── ClusterProcess.h │ │ │ ├── ConnectProcess.cpp │ │ │ ├── ConnectProcess.h │ │ │ ├── DPAlignment.cpp │ │ │ ├── DPAlignment.h │ │ │ ├── ErrorCorrectProcess.cpp │ │ │ ├── ErrorCorrectProcess.h │ │ │ ├── ExtensionDP.cpp │ │ │ ├── ExtensionDP.h │ │ │ ├── FMMergeProcess.cpp │ │ │ ├── FMMergeProcess.h │ │ │ ├── GapFillProcess.cpp │ │ │ ├── GapFillProcess.h │ │ │ ├── HaplotypeBuilder.cpp │ │ │ ├── HaplotypeBuilder.h │ │ │ ├── KmerOverlaps.cpp │ │ │ ├── KmerOverlaps.h │ │ │ ├── LRAlignment.cpp │ │ │ ├── LRAlignment.h │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── OverlapAlgorithm.cpp │ │ │ ├── OverlapAlgorithm.h │ │ │ ├── OverlapBlock.cpp │ │ │ ├── OverlapBlock.h │ │ │ ├── OverlapTools.cpp │ │ │ ├── OverlapTools.h │ │ │ ├── QCProcess.cpp │ │ │ ├── QCProcess.h │ │ │ ├── ReadCluster.cpp │ │ │ ├── ReadCluster.h │ │ │ ├── SearchHistory.cpp │ │ │ ├── SearchHistory.h │ │ │ ├── SearchSeed.cpp │ │ │ ├── SearchSeed.h │ │ │ ├── StatsProcess.cpp │ │ │ ├── StatsProcess.h │ │ │ ├── StringGraphGenerator.cpp │ │ │ ├── StringGraphGenerator.h │ │ │ ├── StringThreader.cpp │ │ │ ├── StringThreader.h │ │ │ ├── VariationBuilderCommon.cpp │ │ │ └── VariationBuilderCommon.h │ │ ├── Bigraph/ │ │ │ ├── Bigraph.cpp │ │ │ ├── Bigraph.h │ │ │ ├── Edge.cpp │ │ │ ├── Edge.h │ │ │ ├── EdgeDesc.cpp │ │ │ ├── EdgeDesc.h │ │ │ ├── GraphCommon.h │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── Vertex.cpp │ │ │ └── Vertex.h │ │ ├── SGA/ │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── OverlapCommon.cpp │ │ │ ├── OverlapCommon.h │ │ │ ├── SGACommon.h │ │ │ ├── index.cpp │ │ │ ├── index.h │ │ │ ├── overlap.cpp │ │ │ └── overlap.h │ │ ├── SQG/ │ │ │ ├── ASQG.cpp │ │ │ ├── ASQG.h │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── SQG.cpp │ │ │ └── SQG.h │ │ ├── StringGraph/ │ │ │ ├── CompleteOverlapSet.cpp │ │ │ ├── CompleteOverlapSet.h │ │ │ ├── GraphSearchTree.h │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── RemovalAlgorithm.cpp │ │ │ ├── RemovalAlgorithm.h │ │ │ ├── SGAlgorithms.cpp │ │ │ ├── SGAlgorithms.h │ │ │ ├── SGSearch.cpp │ │ │ ├── SGSearch.h │ │ │ ├── SGUtil.cpp │ │ │ ├── SGUtil.h │ │ │ ├── SGVisitors.cpp │ │ │ ├── SGVisitors.h │ │ │ ├── SGWalk.cpp │ │ │ └── SGWalk.h │ │ ├── SuffixTools/ │ │ │ ├── BWT.h │ │ │ ├── BWTAlgorithms.cpp │ │ │ ├── BWTAlgorithms.h │ │ │ ├── BWTCABauerCoxRosone.cpp │ │ │ ├── BWTCABauerCoxRosone.h │ │ │ ├── BWTCARopebwt.cpp │ │ │ ├── BWTCARopebwt.h │ │ │ ├── BWTDiskConstruction.cpp │ │ │ ├── BWTDiskConstruction.h │ │ │ ├── BWTIndexSet.h │ │ │ ├── BWTInterval.h │ │ │ ├── BWTIntervalCache.cpp │ │ │ ├── BWTIntervalCache.h │ │ │ ├── BWTReader.cpp │ │ │ ├── BWTReader.h │ │ │ ├── BWTReaderAscii.cpp │ │ │ ├── BWTReaderAscii.h │ │ │ ├── BWTReaderBinary.cpp │ │ │ ├── BWTReaderBinary.h │ │ │ ├── BWTTraverse.cpp │ │ │ ├── BWTTraverse.h │ │ │ ├── BWTWriter.cpp │ │ │ ├── BWTWriter.h │ │ │ ├── BWTWriterAscii.cpp │ │ │ ├── BWTWriterAscii.h │ │ │ ├── BWTWriterBinary.cpp │ │ │ ├── BWTWriterBinary.h │ │ │ ├── FMMarkers.h │ │ │ ├── GapArray.cpp │ │ │ ├── GapArray.h │ │ │ ├── HitData.h │ │ │ ├── InverseSuffixArray.cpp │ │ │ ├── InverseSuffixArray.h │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── Occurrence.cpp │ │ │ ├── Occurrence.h │ │ │ ├── PopulationIndex.cpp │ │ │ ├── PopulationIndex.h │ │ │ ├── QuickBWT.cpp │ │ │ ├── QuickBWT.h │ │ │ ├── RLBWT.cpp │ │ │ ├── RLBWT.h │ │ │ ├── RLUnit.h │ │ │ ├── RankProcess.cpp │ │ │ ├── RankProcess.h │ │ │ ├── SACAInducedCopying.cpp │ │ │ ├── SACAInducedCopying.h │ │ │ ├── SAReader.cpp │ │ │ ├── SAReader.h │ │ │ ├── SAWriter.cpp │ │ │ ├── SAWriter.h │ │ │ ├── SBWT.cpp │ │ │ ├── SBWT.h │ │ │ ├── STCommon.cpp │ │ │ ├── STCommon.h │ │ │ ├── STGlobals.h │ │ │ ├── SampledSuffixArray.cpp │ │ │ ├── SampledSuffixArray.h │ │ │ ├── SparseGapArray.h │ │ │ ├── SuffixArray.cpp │ │ │ ├── SuffixArray.h │ │ │ ├── SuffixCompare.cpp │ │ │ └── SuffixCompare.h │ │ └── Util/ │ │ ├── Alphabet.cpp │ │ ├── Alphabet.h │ │ ├── BWT4Codec.h │ │ ├── BWTCodec.h │ │ ├── Bamreader.cpp │ │ ├── BitChar.cpp │ │ ├── BitChar.h │ │ ├── BitVector.cpp │ │ ├── BitVector.h │ │ ├── BloomFilter.cpp │ │ ├── BloomFilter.h │ │ ├── ClusterReader.cpp │ │ ├── ClusterReader.h │ │ ├── Contig.cpp │ │ ├── Contig.h │ │ ├── CorrectionThresholds.cpp │ │ ├── CorrectionThresholds.h │ │ ├── DNACodec.h │ │ ├── DNADouble.h │ │ ├── DNAString.cpp │ │ ├── DNAString.h │ │ ├── EncodedString.h │ │ ├── HashMap.h │ │ ├── Interval.cpp │ │ ├── Interval.h │ │ ├── IntervalTree.h │ │ ├── KmerDistribution.cpp │ │ ├── KmerDistribution.h │ │ ├── Makefile.am │ │ ├── Makefile.in │ │ ├── Match.cpp │ │ ├── Match.h │ │ ├── Metrics.h │ │ ├── MultiAlignment.cpp │ │ ├── MultiAlignment.h │ │ ├── MultiOverlap.cpp │ │ ├── MultiOverlap.h │ │ ├── NoCodec.h │ │ ├── Pileup.cpp │ │ ├── Pileup.h │ │ ├── PrimerScreen.cpp │ │ ├── PrimerScreen.h │ │ ├── Profiler.h │ │ ├── Quality.cpp │ │ ├── Quality.h │ │ ├── QualityCodec.h │ │ ├── QualityTable.cpp │ │ ├── QualityTable.h │ │ ├── QualityVector.cpp │ │ ├── QualityVector.h │ │ ├── Read2Contig.h │ │ ├── ReadInfoTable.cpp │ │ ├── ReadInfoTable.h │ │ ├── ReadTable.cpp │ │ ├── ReadTable.h │ │ ├── ReadTableNew.cpp │ │ ├── ReadTableNew.h │ │ ├── ReadTableS.h │ │ ├── SGAStats.cpp │ │ ├── SGAStats.h │ │ ├── SeqCoord.cpp │ │ ├── SeqCoord.h │ │ ├── SeqReader.cpp │ │ ├── SeqReader.h │ │ ├── SimpleAllocator.h │ │ ├── SimplePool.h │ │ ├── StdAlnTools.cpp │ │ ├── StdAlnTools.h │ │ ├── Timer.h │ │ ├── Util.cpp │ │ ├── Util.h │ │ ├── VCFUtil.cpp │ │ ├── VCFUtil.h │ │ ├── VariantIndex.cpp │ │ ├── VariantIndex.h │ │ ├── Verbosity.h │ │ ├── bamreader.h │ │ ├── bucketSort.cpp │ │ ├── bucketSort.h │ │ ├── gzstream.C │ │ ├── gzstream.h │ │ ├── mkqs.h │ │ ├── old.AlignedContig.h │ │ ├── stdaln.c │ │ └── stdaln.h │ ├── svaba/ │ │ ├── AlignedContig.cpp │ │ ├── AlignedContig.h │ │ ├── AlignmentFragment.cpp │ │ ├── AlignmentFragment.h │ │ ├── BamStats.cpp │ │ ├── BamStats.h │ │ ├── BreakPoint.cpp │ │ ├── BreakPoint.h │ │ ├── ContigAlignmentScore.cpp │ │ ├── ContigAlignmentScore.h │ │ ├── DBSnpFilter.cpp │ │ ├── DBSnpFilter.h │ │ ├── DiscordantCluster.cpp │ │ ├── DiscordantCluster.h │ │ ├── DiscordantRealigner.cpp │ │ ├── DiscordantRealigner.h │ │ ├── Histogram.cpp │ │ ├── Histogram.h │ │ ├── KmerFilter.cpp │ │ ├── KmerFilter.h │ │ ├── LearnBamParams.cpp │ │ ├── LearnBamParams.h │ │ ├── ReadToContigAligner.h │ │ ├── STCoverage.cpp │ │ ├── STCoverage.h │ │ ├── SvabaASQG.cpp │ │ ├── SvabaASQG.h │ │ ├── SvabaAssemble.cpp │ │ ├── SvabaAssemble.h │ │ ├── SvabaAssemblerConfig.h │ │ ├── SvabaAssemblerEngine.cpp │ │ ├── SvabaAssemblerEngine.h │ │ ├── SvabaBamWalker.cpp │ │ ├── SvabaBamWalker.h │ │ ├── SvabaDebug.h │ │ ├── SvabaFileLoader.cpp │ │ ├── SvabaFileLoader.h │ │ ├── SvabaLogger.cpp │ │ ├── SvabaLogger.h │ │ ├── SvabaModels.cpp │ │ ├── SvabaModels.h │ │ ├── SvabaOptions.cpp │ │ ├── SvabaOptions.h │ │ ├── SvabaOutputWriter.cpp │ │ ├── SvabaOutputWriter.h │ │ ├── SvabaOverlapAlgorithm.cpp │ │ ├── SvabaOverlapAlgorithm.h │ │ ├── SvabaPostprocess.cpp │ │ ├── SvabaPostprocess.h │ │ ├── SvabaRead.cpp │ │ ├── SvabaRead.h │ │ ├── SvabaRegionProcessor.cpp │ │ ├── SvabaRegionProcessor.h │ │ ├── SvabaSharedConfig.h │ │ ├── SvabaThreadUnit.cpp │ │ ├── SvabaThreadUnit.h │ │ ├── SvabaUtils.cpp │ │ ├── SvabaUtils.h │ │ ├── refilter.cpp │ │ ├── refilter.h │ │ ├── run_svaba.cpp │ │ ├── svaba.cpp │ │ ├── test_svaba.cpp │ │ ├── threadpool.h │ │ ├── tovcf.cpp │ │ ├── vcf.cpp │ │ └── vcf.h │ └── svabautils/ │ ├── AssemblyBamWalker.cpp │ ├── AssemblyBamWalker.h │ ├── BamSplitter.cpp │ ├── BamSplitter.h │ ├── Fractions.cpp │ ├── Fractions.h │ ├── Makefile.am │ ├── Makefile.in │ ├── PowerLawSim.cpp │ ├── PowerLawSim.h │ ├── ReadSim.cpp │ ├── ReadSim.h │ ├── SeqFrag.cpp │ ├── SeqFrag.h │ ├── SimGenome.cpp │ ├── SimGenome.h │ ├── SimTrainerWalker.cpp │ ├── SimTrainerWalker.h │ ├── assembly2vcf.cpp │ ├── assembly2vcf.h │ ├── benchmark.cpp │ ├── benchmark.h │ ├── configure │ ├── configure.ac │ ├── snowmanutils.cpp │ ├── snowtools.cpp │ ├── splitcounter.cpp │ └── splitcounter.h ├── svaba_jemalloc └── tracks/ ├── README.md ├── genome.hg38.sorted.bed ├── hg38.bed ├── hg38.blacklist.sorted.bed ├── hg38.combined_blacklist.bed ├── hg38.high_runtime.bed ├── hg38.manual.blacklist.bed ├── hg38.nonstd_chr.blacklist.bed ├── hg38.rmsk.simple_repeat.bed ├── hg38_arms_excl_centromeres.bed ├── lowmap30perc.bed ├── lowmap50perc.bed ├── lowmap70perc.bed └── region_generator.R ================================================ FILE CONTENTS ================================================ ================================================ FILE: CLAUDE.md ================================================ # CLAUDE.md — svaba working notes This file captures conventions, file landmarks, and open investigations for the svaba SV/indel caller project so future sessions can pick up quickly. Update it as understanding changes — it's the crash-safety net, not the README. ## Project at a glance svaba is a structural variant (SV) and indel caller that uses local assembly + read realignment to call variants from short-read BAMs. The canonical use case is tumor/normal somatic calling, but it also supports germline and multi-sample modes. Top-level layout: - `src/svaba/` — main C++ sources. Entry point is `run_svaba.cpp`; assembly, realignment, breakpoint scoring, VCF output, and postprocess all live here. File-naming convention is **PascalCase** — e.g. `SvabaOptions.cpp`, `SvabaOutputWriter.h`. A few intentional exceptions: `refilter.cpp/h`, `run_svaba.cpp`, `svaba.cpp`, `threadpool.h`, `tovcf.cpp`, `vcf.cpp/h`. - `src/SGA/` — String Graph Assembler sources (vendored). - `SeqLib/` — vendored htslib/bwa/fermi-lite wrapper used for BAM I/O, alignment, and assembly primitives. See "Build system" for how its flags get set. - `bin/`, `build/` — build artifacts; don't edit by hand. - `R/`, `viewer/`, `tracks/` — downstream analysis/visualization helpers. - `tests/`, `example_data/` — test fixtures. - `scripts/` — post-processing and utility shell helpers, all kept here (not at the repo root): `svaba_postprocess.sh`, `combine_blacklists.sh`, `extract_discordants.sh`, `filter_contig_supporting_reads.sh`, `r2c_for_contig.sh`, `sort_bps.sh`, `svaba_cloud.sh`. Profiling helpers (`memprof*.sh`) live under `opt/` (the user's ad-hoc tooling dir). - `somlod_maxlod_analysis.html` — deep-dive writeup of the somatic log-odds scoring model. See "Statistical model" below. Scripts that used to live here and are gone, in case you're looking for them: `sort_output.sh` and `sort_and_deduplicate_bps.sh` were subsumed into the unified `svaba_postprocess.sh`. ## Build system `cmake -B build && cmake --build build` defaults to `CMAKE_BUILD_TYPE = RelWithDebInfo`, which gives you **`-O2 -g -DNDEBUG -fno-omit-frame-pointer`** for the svaba/SeqLib/SGA C++ code. Not O0, not O3. Critical gotcha: **the `-O2` is hardcoded across all of the vendored submodules**, and CMake's build-type doesn't reach them: - `SeqLib/bwa/Makefile`: `CFLAGS = -g -Wall -Wno-unused-function -O2` (hardcoded; doesn't read the parent CMake). Makes `libbwa.a`, owner of ~38% of wall-time in real runs. - `SeqLib/fermi-lite/Makefile`: `CFLAGS = -g -Wall -O2 -Wno-unused-function` (same story). Makes `libfml.a`, ~27% of wall-time. - `SeqLib/CMakeLists.txt:10` does `set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")` — appends `-O2` to whatever you passed, and because later `-O` wins on gcc/clang, this silently defeats any top-level attempt to set `-O3` via `CMAKE_CXX_FLAGS` unless you pass it via `CMAKE_CXX_FLAGS_` (which is appended after, and therefore wins). - htslib is external; whoever built yours picked its flags. To push the submodules to `-O3 -mcpu=native` (the single biggest free-perf knob on Apple Silicon — 65% of compute is at -O2 generic right now): ```bash make -C SeqLib/bwa clean make -C SeqLib/fermi-lite clean make -C SeqLib/bwa -j CFLAGS="-g -O3 -mcpu=native -fno-omit-frame-pointer -Wall -Wno-unused-function" make -C SeqLib/fermi-lite -j CFLAGS="-g -O3 -mcpu=native -fno-omit-frame-pointer -Wall -Wno-unused-function" cd build && make -j ``` Sanity-check: `make VERBOSE=1 2>&1 | grep -oE -- "-O[0-9sg]" | sort | uniq -c`. ## Statistical model — the files that matter For anything related to how variants are scored (LOD, somatic vs germline, error model), the two files to read first are: - `src/svaba/SvabaModels.cpp` / `.h` — self-contained statistical primitives. - `LogLikelihood(d, a, f, e_fwd, e_rev)` (~lines 11-63) is the per-sample two-state error model: `p_ref = (1-f)(1-e_fwd) + f*e_rev` and `p_alt = f(1-e_rev) + (1-f)*e_fwd`. Returns log10 likelihood of observing `a` alt reads out of `d`. This is the primitive every higher-level score is built from. - `SomaticLOD(...)` (~lines 70-83) — public wrapper; forwards to the split-error implementation. - `SomaticLOD_withSplitErrors(...)` (~lines 86-189) — the active somatic model. Enumerates sub-hypotheses: `SOM_true`, `SOM_art`, `GERM_het`, `GERM_hom`, `GERM_art`, `GERM_shared`. Returns `log10( P(somatic) / P(any non-somatic) )`. - Line ~79: `const double eN_fwd = std::min(e_art_fwd, 0.005);` — hard cap on the normal-sample forward error rate. This cap is important: it means even in regions where the artifact model infers a high error rate, the normal sample is assumed to be clean. That's the knob you'd relax if you want somlod to be "artifact-aware" on the normal side. - Lines ~138-147: `GERM_shared` free-MLE branch. This is the sub-hypothesis that fits a single pooled allele fraction across tumor+normal. It exists to catch LOH (loss of heterozygosity) germline events where tumor VAF can be much higher than 0.5 while normal is still ~0.5. It is also the main reason `somlod` asymptotes slowly as tumor alt-support grows (see below). - `src/svaba/BreakPoint.cpp` / `.h` — per-breakpoint scoring glue. Points of interest: - `BreakPoint::score_somatic()` at ~line 975 is the entry point that sets `LO_s` (the somatic LOD). Calls `SvabaModels::SomaticLOD(scaled_alt_n, a_cov_n, scaled_alt_t, a_cov_t, error_fwd, error_rev)` around lines 1028-1031. - `SampleInfo::modelSelection()` (~lines 1562-1674) computes the per-sample `LO = ll_alt - ll_err` at line ~1610. These are unnormalized log10 likelihoods — absolute value is not meaningful, the difference is. - `max_lod` is computed at lines ~198-200 and ~1196-1198 as the max of `al.LO` across samples. This is the "is this artifact or not" score; it does grow with additional supporting reads because it compares a variant hypothesis to a pure-error hypothesis with no germline branch. - Lines ~1072-1073: the current INDEL somatic gate only tests `somlod` — it does not use `maxlod` as a co-gate. This is one of the levers in the proposed fixes. ## The somlod / maxlod investigation (still open) **Problem statement.** Users observe that `maxlod` grows with tumor alt support, but `somlod` barely moves once tumor alt-support gets high. For a clean normal (`aN=0` or `aN=1`) you'd naively expect `somlod` to also keep climbing as tumor evidence accumulates, but it asymptotes around ~9 for `dN ≈ 30`. **Diagnosis.** - There is a real statistical ceiling on somlod roughly equal to `dN · log10(1/(1-fT_hat))`. With 30 normal reads you can only ever rule out a shared germline hypothesis so hard — it's a finite amount of evidence. - The `GERM_shared` free-MLE branch makes `somlod` *approach* that ceiling slowly at sub-clonal tumor VAFs: when the MLE of a pooled AF lands in a germline-plausible band, it provides a strong non-somatic explanation that the somatic hypothesis has to beat. - You cannot simply delete `GERM_shared` because doing so makes LOH germline cases (e.g. `aN=15/dN=30, aT=285/dT=300`) return `somlod ≈ +36`, a false positive. Verified numerically while writing the analysis. - The `eN_fwd ≤ 0.005` cap means that in truly high-artifact regions, the model refuses to "forgive" 2-3 alt reads in the normal as artifacts, which is both good (prevents somatic false positives where normal is contaminated by real signal) and limiting (prevents somatic calls where the artifact model really does explain the normal reads). **Proposed fixes (see `somlod_maxlod_analysis.html` for the full writeup).** - Fix 1 — disjunction gate on `GERM_shared`: only let the free-MLE pooled branch influence somlod when `shared_is_germline_plausible || normal_evidence > 1.0`, where `normal_evidence = LL_N(dN, aN, f_n_mle) - LL_N(dN, aN, 0)`. This is error-rate aware and is the fix I'd land first. - Fix 2 — loosen `eN_fwd` cap in known high-artifact regions. - Fix 3 — BIC penalty on the free-MLE branch (1 free parameter costs ~`0.5 log10(dN+dT)` nats ≈ bits of evidence). - Fix 4 — joint `maxlod` + `somlod` gate for INDELs (require both above threshold), since `maxlod` moves freely with tumor depth. - Fix 5 — debug dump of sub-hypothesis LLs when `somlod` is within some epsilon of the gate, to make future failures diagnosable. **Related fix landed already (SvABA2.0 v3 split-coverage gate):** the old `both_split && homlen > 0` / `one_split && homlen == 0` branching in `BreakPoint::splitCoverage` was removed. A read is now credited as a split-supporter iff (a) its r2c alignment scores strictly higher than its native alignment (`r2c_score > native_score`, no percentage margin — see `src/svaba/SvabaOptions.h`), and (b) it spans at least one breakend on the contig. Long junction homology → r2c and native tie → read doesn't credit either sample, which is the correct conservative behavior (rather than the old "homology=0 one_split is fine, homology>0 you need both_split" which nuked normal support specifically when homology was long, biasing toward somatic calls). The repeat_seq-length padding on the buffers is also gone — same rationale, subsumed by the comparative score gate. See the user- facing bp-id (v3 schema) work for how to trace a specific read's current support attribution end-to-end. **v3.1 fix — remove T_R2C_MIN_MARGIN (set to 0):** the 10% `T_R2C_MIN_MARGIN` was killing all tumor alt-supporting reads for small indels. A 1bp deletion on a 150bp read gives r2c=150 vs native=143, a 4.9% improvement — mathematically impossible to clear the 10% threshold. Traced via the `SVABA_TRACE_CONTIG` system on contig `c_fermi_chr2_215869501_215894501_13C` (CIGAR `392M1D530M`): every tumor read hit TP8 with r2c=150 vs threshold=157.3 → SKIP → 0 split support → LOWLOD → hasMinimal fail → variant dropped. Fix: set `T_R2C_MIN_MARGIN` to 0.0 in `SvabaOptions.h` — same as normal, strict greater-than only. Any percentage margin is inherently read-length-dependent: a 1bp del gives 4.9% improvement on 150bp reads but only 2.9% on 250bp reads, so any fixed percentage either blocks long reads or is too loose for short reads. There's no percentage that works across all read lengths. The margin was belt-and-suspenders on top of the LOD model. In the junction-homology case it was designed for: if both tumor and normal credit borderline reads equally (r2c barely > native by 1-2 points), the downstream LOD model sees similar split support in both samples → low somlod → correctly not called somatic. Normal already used margin=0, so the asymmetry was the only thing preventing normal from crediting those reads — and it wasn't, because N_R2C_MIN_MARGIN was always 0. The somatic/germline distinction is the LOD model's job. **Important correctness notes (earned the hard way):** - Don't propose `aN >= 2` style hard count gates without an error-rate adjustment. In a high-artifact region, 2-3 normal alt reads can be genuine artifacts, and gating on raw counts overcalls the case away. Always reason about `normal_evidence` (LL delta against `f=0`) instead of raw `aN`. - A LL ratio reported by `LogLikelihood` is log10. Multiplying by ~3.32 gives bits. Per-read surprise is `(LL_alt - LL_ref) / d`. Absolute LL values have no meaning — always compare two hypotheses at the same data. - The ~9 ceiling at `dN=30` is a real statistical bound; no reformulation of the somatic test can push above it. `GERM_shared` changes the *slope* of approach, not the asymptote. ## Postprocess pipeline Everything post-`svaba run` is orchestrated by `scripts/svaba_postprocess.sh`. It's the unified replacement for the old `sort_output.sh` + `sort_and_deduplicate_bps.sh` pair, which no longer exist. Five steps per invocation, all idempotent (missing inputs log a one-liner and continue): 1. **Merge per-thread BAMs** — `${ID}.thread*.${suffix}.bam` → `${ID}.${suffix}.bam` for `discordant` / `weird` / `corrected`. Single-file inputs are moved; no-file inputs silently skipped. 2. **`svaba postprocess`** — the C++ subcommand in `src/svaba/SvabaPostprocess.cpp`. For each suffix (`weird`, `corrected`, `discordant`, `contigs`): - `samtools sort -@ per_job_threads -m MEM` (shell out — htslib doesn't expose its sort as a library call). **Auto-skipped** when the BAM already declares `@HD SO:coordinate` — `isCoordinateSorted()` inspects the header via `readHeaderOnly()` and logs "already coordinate-sorted; skipping sort" so reruns are a no-op. - Native streaming dedup (only for `weird`/`corrected`/`discordant`): reads BAM via SeqLib::BamReader, collapses exact (qname, flag) duplicates at each locus, and **unions their `bi:Z` / `bz:Z` comma-token lists** so alt-supporting-contig evidence isn't lost when the same read got emitted by two overlapping assembly windows. Key function: `mergeCommaTokens` — boundary-aware union, mirrors `SvabaOutputWriter::stamp_tag`. Both the reader and writer have the htslib BGZF thread pool enabled via a new `SeqLib::BamReader::SetThreads(int)` / `SeqLib::BamWriter::SetThreads(int)` API that calls `hts_set_threads(fp, n)`. `streamDedup` accepts a `threads` parameter (wired from the full postprocess budget, not the per-suffix slice — see two-phase note below) and applies it on both sides. Without this pool, BGZF decompress + compress is single-threaded and dominates wall time (40 GB BAM → ~2 hours). With `-t 4..8` this typically drops to 25–40 min, a 3–5× speedup. **Buckets-clear gotcha** (landed alongside the thread-pool fix): the per-locus `idx_by_key` is a `std::unordered_map`. `unordered_map::clear()` is **O(bucket_count)** — it memsets the entire bucket array even when size is 0, and `bucket_count` only grows, never shrinks. One pileup locus (centromere / simple repeat / HLA) inflates buckets to 100k+ for the rest of the BAM, and every subsequent locus transition (hundreds of millions of them) pays that memset. Pre-fix perf showed 95% of main-thread CPU going to `__memset_evex_unaligned_erms` called from `unordered_map::clear`. `flushLocus` now swaps with a fresh small map when `bucket_count() > 256`, paying the inflated-map destructor cost ONCE per pileup exit rather than once per locus. Lesson: never trust `unordered_map::clear()` in a transient reuse pattern where the map briefly inflates. **Two-phase driver.** `svaba postprocess` runs in two phases so the thread budget lands where it actually helps: Phase 1 (PARALLEL): samtools sort across all active suffixes concurrently, each worker with `o.threads / n_active` threads. Sort is disk+CPU bound and scales linearly across files. Phase 2 (SERIAL): dedup + reheader + index, one BAM at a time, each with the full `o.threads` as its BGZF pool. Serial here is deliberate — running dedup in parallel across suffixes would oversubscribe (each BAM needs its own read+write BGZF pool), and BGZF parallelism has diminishing returns so `4 workers × 2 threads` is worse wall-clock than `1 worker × 8 threads` iterated four times. **Idempotency.** Every phase has its own auto-skip so rerunning the pipeline on an already-finished BAM is essentially instant: - Phase 1 sort: `isCoordinateSorted()` inspects `@HD SO:coordinate` and bypasses the sort when already done. - Phase 2 dedup: `hasSvabaPostprocessPg()` scans the @PG chain for any `svaba_postprocess` (or uniquified `.1`, `.2` variants); if present, dedup AND the subsequent reheader step are both skipped (only the `.bai` is rebuilt, which is cheap and covers the missing-index case). The first successful `streamDedup` stamps the PG line, so a second `svaba_postprocess.sh` run on the same outputs no-ops almost entirely. - The shell-layer merge step (`scripts/svaba_postprocess.sh` step 1) is already a no-op when per-thread `.thread*.bam` files aren't present (nothing to merge), so all three steps compose naturally. - **@PG stamp**: writes an `@PG ID:svaba_postprocess PN:svaba VN: CL: PP:` line into the output header. For dedup-eligible suffixes this is free (done in the writer during dedup); for `contigs` (no dedup) it's done via `samtools reheader`. ID is auto-uniquified if `svaba postprocess` has been run before on the same BAM. - **BAI index** via `sam_index_build(fn, 0)` directly from htslib — one less subprocess. - Intermediate filenames use a `.postprocess.*.tmp.bam` suffix and are renamed over on success / unlinked on failure. End state per suffix is exactly `${ID}.${suffix}.bam(.bai)`; no `.sorted` / `.deduped` flotsam. 3. **Sort + dedup + PASS-filter `bps.txt.gz`** — external-memory sort via GNU sort (`gsort` on macOS from homebrew coreutils). Sort keys: `chr1(V), pos1(n), strand1, chr2(V), pos2(n), strand2, maxlod(gr)` — maxlod descending so the "best SV per junction" survives the dedup. Produces three files: `.bps.sorted.txt.gz`, `.bps.sorted.dedup.txt.gz` (one row per unique breakpoint pair), `.bps.sorted.dedup.pass.txt.gz` (col 32 == "PASS" only). - Column positions hard-coded: `col 30 = cname (contig_and_region)`, `col 32 = confidence`, `col 38 = maxlod`. These come from `BreakPoint::toFileString` — change there and the script breaks. 4. **Filter `r2c.txt.gz` to PASS contigs (+ PASS-somatic subset)** — resolves PASS cnames from `bps.txt.gz` (col 32 == "PASS") and the PASS-somatic subset (also col 37, `somlod`, >= 1) in one pass. Then one pass over `r2c.txt.gz` writes two outputs via awk pipe-to-command (gzip compressors run in parallel as child processes): - `${ID}.r2c.pass.txt.gz` (all PASS) - `${ID}.r2c.pass.somatic.txt.gz` (PASS ∩ somlod >= 1) Both are cname-keyed; contig and read rows survive together since they share col 2. Either is suitable for `bps_explorer.html`'s alignments sub-panel; the somatic subset is the lighter load when you only care about the tumor-specific calls. 5. **Optional split-by-source** — `--split-by-source` (or env `SPLIT_BY_SOURCE=1`) demuxes the deduped BAMs by the first 4 chars of each QNAME into `${ID}.${suffix}.${prefix}.bam`. CLI: `scripts/svaba_postprocess.sh -t THREADS -m MEM [other flags] `. Flags: `-t/--threads`, `-m/--mem`, `--sort-buffer`, `--split-by-source`, `--input-dir`, `--output-dir`, `--svaba`, `--keep-tmp`, `--skip-bam`, `--skip-dedup`, `--skip-bps`, `--skip-r2c`, `--skip-split`, `-h/--help`. `--skip-dedup` maps to `--sort-only` on the C++ CLI: keeps sort + @PG + index but skips the dedup pass. Combined with the C++'s auto-skip of sort when the BAM header already declares `@HD SO:coordinate` (`isCoordinateSorted()` in `SvabaPostprocess.cpp`), a rerun on already-postprocessed files is effectively instant — useful for refreshing just the index or PG stamp. Env fallbacks for backward compat: `THREADS`, `MEM`, `BUFFER_SIZE`, `SVABA`, `SAM`, `INPUT_DIR`, `OUTPUT_DIR`, `SPLIT_BY_SOURCE`, `KEEP_TMP`. Gotcha: `zcat` on macOS is BSD zcat (looks for `.Z`), not GNU. This script uses `gzip -dc` everywhere for portability — if you add a new decompression step, do the same or it'll fail on Mac. ## `svaba tovcf` subcommand Standalone converter: pre-deduplicated `bps.txt.gz` → two VCFv4.5 files (`${id}.sv.vcf.gz` + `${id}.indel.vcf.gz`). Lives in `src/svaba/tovcf.cpp`; dispatch wired into `src/svaba/svaba.cpp`. Runs the VCFFile parser with `skip_dedup=true` because the postprocess pipeline has already sorted and deduplicated the bps.txt.gz upstream — the internal interval-tree dedup would just be wasted work and can spuriously dup things via its SV-pileup blacklist. Design calls made (see `docs/vcf-design-decisions.md` if created; for now this is the reference): - **VCF spec:** declares `##fileformat=VCFv4.5` (latest formal spec, Oct 2024). Backwards-compatible at the record level with anything that accepts 4.2+. - **File structure:** one SV VCF + one indel VCF per sample-set. Every record (somatic + germline) goes into both files; somatic rows carry the `SOMATIC` flag INFO so `bcftools view -f .,PASS -i 'INFO/SOMATIC'` peels them off cleanly. Replaces the older 4-file split (sv.somatic / sv.germline / indel.somatic / indel.germline). - **SV representation:** intrachrom events with unambiguous orientation become single-record symbolic alleles — `+/+` or `-/-` → ``, `-/+` → ``, `+/-` → ``. Inter-chrom and anything else falls through to paired BND records with mate-bracket notation. Override with `--always-bnd` to force BND for every SV (useful if downstream tooling gets confused by symbolic alleles). Classification lives in `classify_symbolic_kind()` in `vcf.cpp`. - **EVENT grouping:** both BND records of a pair get `EVENT=` (taken from col 52 of bps.txt.gz, the v3 per-BP identifier). This uses the same namespace as `r2c.txt.gz`'s `split_bps`/`disc_bps` and the BAM `bi:Z` tag, so a user can follow a single variant across all svaba outputs with one key. - **QUAL column:** defaults to `.` (missing). QUAL was historically the Phred of `Σ per-sample LO`, which is strongly correlated with `INFO/MAXLOD` but can mislead users into filtering on QUAL when they should be filtering on SOMLOD / MAXLOD / FILTER. `.` is VCF-spec-valid missing and makes downstream tools fall through to the INFO fields where the canonical scores live. Override with `--qual maxlod` (writes `round(10 * maxlod)` capped at 99) or `--qual sum` (legacy). - **SVCLAIM:** per VCF 4.5. `J` for pure assembly-only SVs, `DJ` for ASDIS (both assembly + discordant evidence), `D` for discordant-only. svaba is junction-native so most calls end up `J` or `DJ`. Flag surface: ``` svaba tovcf -i BPS.txt.gz -b BAM -a ID [options] --sv-out FILE override SV path (default ${ID}.sv.vcf.gz) --indel-out FILE override indel path (default ${ID}.indel.vcf.gz) --plain write plain .vcf (no bgzip) --always-bnd force BND for every SV --qual MODE missing (default) | maxlod | sum --include-nonpass include FILTER != PASS records --dedup re-run legacy interval-tree dedup -v / --verbose -h / --help ``` Gotcha: the BAM is required only for the chromosome name/length table (used by contig `##contig` lines in the VCF header and by the BreakPoint parser to turn chrom-name strings into chr IDs). No reads are actually read from it — any BAM that shares the reference is fine. Not-yet-done on this subcommand: bgzip-proper (current `--plain=false` output is plain gzip, which bcftools accepts but tabix doesn't index correctly). For now, pipe through `bcftools sort -Oz` + `tabix -p vcf` after. If this becomes painful, revisit with htslib's `hts_open` + `vcf_write` path instead of ogzstream. ## BreakPoint IDs (v3 schema) Every BP gets a unique stable identifier of the form `bpTTTNNNNNNNN` where `TTT` is the 3-digit zero-padded worker thread ID and `NNNNNNNN` is an 8-digit zero-padded per-thread running counter. Generation is lock-free: the counter lives on `svabaThreadUnit` (see `next_bp_id()` in `src/svaba/SvabaThreadUnit.h`). Assignment happens exactly once per BP in `SvabaRegionProcessor::process()` right before the pointer is pushed into `unit.m_bps`. Because `AlignedContig` holds BPs via `shared_ptr`, the id mutation is immediately visible through every reference (global, multi-map, indel breaks). The id lands as the 52nd core column of `bps.txt.gz` (right after `flipped`, before per-sample blocks — this is the v3 schema; v2 had 51 cols, LEGACY had 41). It's also carried into `r2c.txt.gz` (see next section) so a read's support attribution is unambiguously linked to the exact BP row in bps.txt, eliminating the old "which BP on this contig did this read actually support?" puzzle. `svaba_bps_cols` (from `scripts/svaba_local_function.sh`) documents the full layout; column 52 is the bp_id field. **BAM aux tags `bi:Z` / `bz:Z` (v3).** The two aux tags svaba stamps on weird/discordant/corrected BAM outputs now live in *different* identifier namespaces — choose the right one for the join you want: - `bi:Z` — comma-joined list of **bp_ids** this read supports as ALT. Matches the per-BP resolution of `r2c.txt.gz`'s `split_bps` / `disc_bps` columns and `bps.txt.gz`'s col 52. Pre-v3 this carried cnames (contig-level), which couldn't disambiguate a contig that hosted multiple BPs (global + multi + indel). To pull every ALT-supporting read for a specific variant row: `samtools view corrected.bam | grep bi:Z:bp00100000042`. The tag is populated in `SvabaRegionProcessor::process` at the BP finalization loop (`tag_with_bp_id` lambda), mirrored into `svabaThreadUnit::alt_bp_ids_by_name` for the corrected-BAM restamp path in `SvabaOutputWriter::writeUnit`. - `bz:Z` — comma-joined list of **cnames** this read r2c-aligned to. Stays cname-keyed because "which contigs did this read align to" is a contig-level concept. Populated inside the r2c loop in `SvabaRegionProcessor` alongside `svabaRead::AddR2C(...)`, mirrored into `svabaThreadUnit::all_cnames_by_name`. Superset of `bi:Z` in the sense that every ALT-supporter r2c-aligned to its contig, but uses a different key namespace, so join back to bps.txt by col 30 (cname) here vs col 52 (bp_id) for `bi:Z`. `scripts/r2c_for_contig.sh` defaults to `bz:Z` to pull all r2c'd reads for a contig; set `TAG=bi` and pass a bp_id instead of a cname if you want the ALT-supporter subset for a specific variant. ## r2c TSV format (re-plot-able alignments) `${ID}.r2c.txt.gz` is the structured, re-plot-able alignment dump. It replaces the old pre-rendered `${ID}.alignments.txt.gz` ASCII output, which has been removed entirely — anything that lived implicitly in the ASCII art (fragment orientation, leading/trailing soft-clip bases, etc.) is now available as an explicit field in the TSV, and `viewer/r2c_explorer.html` re-plots it in-browser on demand. **Per-thread emission + postprocess merge.** Each svaba worker writes its own `${ID}.thread${N}.r2c.txt.gz` during the run (stream lives in `svabaThreadUnit::r2c_out_`; opened in the ctor, closed in the dtor, gated on `opts.dump_alignments`). The write happens in `SvabaOutputWriter::writeUnit` **before** `writeMutex_` is acquired — each thread's gzip stream is independent, so deflate runs in parallel across all workers. The first worker (threadId == 1; the worker pool in `threadpool.h` numbers threads 1..N, so there is no thread 0) writes the column-header line on open; other threads start with data. `scripts/svaba_postprocess.sh` step 1 merges the per-thread files via `cat`: gzip is concatenation-safe per RFC 1952, and the postprocess step numerically sorts `.threadN.r2c.txt.gz` so thread 1 is first in the cat, which means the merged file has exactly one header at the top. This is the same architectural pattern as the per-thread BAM writers; for the rationale, see "Perf notes" — in short, a mutex-shared gzip stream serializes `deflate()` across all threads, losing ~15/16 of compression parallelism at `-p 16`. Gotcha: the header-writing branch is keyed to `threadId == 1` in `SvabaThreadUnit::svabaThreadUnit`. Older revisions checked `threadId == 0`; that never fired because the pool hands out 1..N, which silently produced headerless `r2c.txt.gz` files. If you ever change the worker-numbering base, that line must change with it. Schema (documented by `AlignedContig::r2cTsvHeader()` in `src/svaba/AlignedContig.cpp`) — 21 tab-separated columns, record-type discriminated: ``` record_type contig_name contig_len contig_seq frags bps n_reads # contig-only fields above — NA on read rows read_id read_chrom read_pos read_flag r2c_cigar r2c_start r2c_rc r2c_nm support split_bps disc_bps r2c_score native_score read_seq # read-only fields — NA on the contig row ``` `split_bps` / `disc_bps` are comma-joined `bp_id` lists — the unambiguous per-BP attribution of each read. The categorical `support` field (`split` / `disc` / `both` / `none`) is derived from these (whichever is non-NA) and kept for grep-friendliness. The `bps` field on the contig row also carries each BP's id as the 2nd subfield so viewers can join back without a second file. On older r2c files without these columns (pre-v3 emitter) the viewer falls back to the categorical support only. One `contig` row per variant-bearing contig, followed by one `read` row per r2c-aligned read. `contig_name` is the shared join key (same value as bps.txt's col-30 `cname`), so grouping reads back to their contig is O(n). Format details: - `frags`: `|`-separated per fragment; within a frag, `:`-separated `chr:pos:strand:cigar:mapq:cpos_break1:cpos_break2:gpos_break1:gpos_break2:flipped`. - `bps`: `|`-separated; within a bp, `:`-separated `kind:chr1:pos1:strand1:chr2:pos2:strand2:span:insertion`. `kind ∈ {global, multi, indel}`. Insertion is `.` when absent so the field count stays fixed at 9. - All cell values are TSV-escaped (tab/CR/LF → space) via `r2cEscape`. - Per-sample support classification (`split`/`disc`/`both`/`none`) and the scores are computed **identically** to the ASCII emitter — same `r2c_score > native_score` gate, same `corrected_native_cig` precedence, same `split_supporters`/`disc_supporters` sets. The two emitters share enough code to prevent drift. ## Blacklist-aware region pruning `run_svaba.cpp` drops any queued region that is 100% covered by the blacklist BEFORE the region is sent to a worker thread. Lives right after `loader.countJobs(regionsToRun)`, before `sc.total_regions_to_process` is set. Rule: for each `r` in `regionsToRun`, if `sc.blacklist.FindOverlapWidth(r, true) >= r.Width()`, drop it. This was a measured win. Previously each fully-blacklisted chunk (e.g. a 25 kb window on a decoy/alt/random contig) paid the full pipeline cost: `QueryRegion` on the ref, `walker->SetRegion` + `readBam` (which decompresses every BGZF block overlapping the region, parses each bam1_t, allocates an `svabaRead`) — only to have `sc.blacklist.CountOverlaps` drop every read at `SvabaBamWalker.cpp:181-182`. Now those regions never hit a thread. Safe because `sc.blacklist` has had `MergeOverlappingIntervals()` + `CreateTreeMap()` called, so `FindOverlapWidth` can't double-count and wrongly drop a partially-callable region. The per-read and per-BP blacklist checks at `SvabaRegionProcessor.cpp:74, 818` still run for regions that **partially** overlap — this prune only short-circuits the 100%-covered case. Pruned regions don't get a `runtime.txt` row. That's intentional and actually makes the runtime file cleaner (only regions that did work). ## Options surface `src/svaba/SvabaOptions.h`: - `dump_weird_reads` is **compile-time-only** (`static constexpr bool`). Flip the literal in the header and rebuild to enable; there is deliberately no CLI path. Because it's `static constexpr false` by default, the compiler dead-code-eliminates every `if (sc.opts.dump_weird_reads) { ... }` branch at -O2+. - `dump_discordant_reads`, `dump_corrected_reads`, and `dump_alignments` default **false** and are all enabled together by the single `--dump-reads` runtime flag (switch-case 1800 in `SvabaOptions.cpp`). They control, respectively: - `${ID}.discordant.bam` - `${ID}.corrected.bam` - `${ID}.r2c.txt.gz` (per-thread; merged by the postprocess step) The fields are kept separate so individual callsites can key off their own concern (e.g. `svabaThreadUnit` gates `r2c_out_` opening on `dump_alignments` only), but there's no runtime path to toggle them individually — all three flip as a unit under `--dump-reads`. - Without `--dump-reads`, svaba produces the lean output set only: `bps.txt.gz`, VCFs, `contigs.bam`, `runtime.txt`, `discordant.txt.gz` (cluster-level, tiny). No per-thread `r2c.txt.gz`, no `corrected.bam`, no `discordant.bam`. This is the production default because the gated outputs can run to tens of gigabytes on deep samples. - **`alignments.txt.gz` is gone.** The pre-rendered ASCII viewer output was replaced in full by `r2c.txt.gz` (same information, not pre-formatted). `AlignedContig::printToAlignmentsFile` and `BreakPoint::printDeletionMarksForAlignmentsFile` were removed; the surviving `AlignmentFragment::printToAlignmentsFile` is kept only because one `std::cerr` debug print in `BreakPoint.cpp` still calls it. `viewer/alignments_viewer.html` still exists and still works on old `.alignments.txt.gz` files from previous runs, but new runs don't produce that file — use the r2c sub-panel in `viewer/bps_explorer.html` instead. ## Viewer suite (`viewer/`) Entry point is `viewer/index.html`, a card grid pointing at the sub-viewers. All client-side, no server required. - **`bps_explorer.html`** — primary viewer. Sortable table of bps rows, numeric filters (somlod/maxlod/qual/span/etc.), chip filters (counts are live — they reflect the current filter, not the full dataset), per-sample detail panel, small histograms for somlod/maxlod/span, IGV-navigation links in the IGV1/IGV2 columns (fires `fetch('http://localhost:60151/goto?locus=…', {mode:'no-cors'})`; requires IGV running with port 60151 enabled). r2c re-plot sub-panel was removed — that capability now lives in the standalone `r2c_explorer.html` below. - **`r2c_explorer.html`** — standalone re-plotter for the structured r2c TSV (emitted by `svaba run --dump-reads`, or filtered to PASS / PASS-somatic by `scripts/svaba_postprocess.sh`). Upload an `.r2c.txt.gz` / `.r2c.pass.txt.gz` / `.r2c.pass.somatic.txt.gz`, type or pick a contig name in the search box (browser `` autocomplete, capped at 5000 entries), and get the alignment plot rendered in-browser: 10bp ruler, contig sequence, per-BWA-fragment summaries with `>/<` orientation rendering, per-breakpoint summary rows, and per-read gap-expanded CIGAR rendering with lowercase leading/trailing soft-clip bases placed at `start - lead_clip_len` (exact mirror of the old `AlignedContig::printToAlignmentsFile`). Prev/Next/Random navigation, imperfect-only and per-support-kind toggles, click-to-hide source-prefix legend. Load-once, explore many contigs — no need to load a bps.txt.gz first. - **`alignments_viewer.html`** — legacy ASCII-plot viewer for `alignments.txt.gz` outputs produced by svaba runs *before* the r2c migration. New runs no longer produce `alignments.txt.gz`; `r2c_explorer.html` is the replacement. Kept in the tree so historical outputs still render. - **`runtime_explorer.html`** — explorer for `runtime.txt` (the per-region timing TSV produced by `svabaTimer::logRuntime`, schema in `SvabaUtils.cpp`). Sortable table, region-range filter, runtime/contigs/discordant filters, IGV-click on the region column, prominent runtime histogram (defaults to log10 because runtime distributions are always long-tailed — see "Perf notes"). 17-column schema hardcoded from `SvabaUtils.cpp::svabaTimer::header`. - **`comparison.html`** — side-by-side of two bps runs. - **`bps_viewer.html`** — legacy light-theme viewer, uses external `app.js` + `styles.css`. ## tracks/ and blacklists `tracks/hg38.combined_blacklist.bed` is the one to feed `svaba run --blacklist`. It's a **regeneratable artifact** — produced by `scripts/combine_blacklists.sh` from the component files in the same dir. Don't hand-edit it; edit a component file and re-run the script. Components (as of last pass): - `hg38.blacklist.sorted.bed` — ENCODE-style high-signal regions. - `hg38.high_runtime.bed` — regions empirically slow to assemble. - `hg38.manual.blacklist.bed` — ad-hoc bad-list, curated. - `hg38.nonstd_chr.blacklist.bed` — full-contig entries for every chrUn/*_decoy/*_alt/*_random/chrEBV/HLA-* contig in the reference, generated from `tracks/chr` (a GRCh38 fasta-header dump). - `hg38.rmsk.simple_repeat.bed` — UCSC RepeatMasker simple-repeat regions. `scripts/combine_blacklists.sh` has three modes: plain concat (default), `--merge` (sort + `bedtools merge` with distinct-label aggregation), and `--clip GENOME` (clip interval ends to real contig length, because some input BEDs use oversize-end sentinels like `end=250000000` that would otherwise inflate covered-bp totals into the trillions — ask me how I know). Preferred invocation for refreshing the combined blacklist: ```bash ./scripts/combine_blacklists.sh --merge --clip tracks/chr \ -o tracks/hg38.combined_blacklist.bed \ tracks/hg38.blacklist.sorted.bed \ tracks/hg38.high_runtime.bed \ tracks/hg38.manual.blacklist.bed \ tracks/hg38.nonstd_chr.blacklist.bed \ tracks/hg38.rmsk.simple_repeat.bed ``` ## Perf notes (empirical, from profiling the HLA region on M3 Ultra) From a `sample`-based CPU profile with `-p 16`: - **96% of worker time is inside `SvabaRegionProcessor::process`**. Four buckets soak it up: - BWA alignment: **~38%** (`mem_align1_core`, `mem_chain`, seed lookups `bwt_sa`/`bwt_occ*`, `ksw_extend2`) - Fermi-lite assembly: **~27%** (`fml_assemble`, `fml_fmi2mag*`, `rld_rank2a`, `unitig_unidir`) - BFC error correction: **~17%** (`SeqLib::BFC::ErrorCorrect/Train`, `kmer_correct`, `bfc_*`). User-controllable via the ec flags. - BAM walking: **~9%** (`svabaBamWalker::readBam`) - **IPC ≈ 3.0** on Apple Silicon P-cores (theoretical max ~8, typical real workloads 1.2–2.5). The code is already running near the silicon's sustained envelope; algorithmic rewrites have diminishing returns. - **Voluntary context switches ≈ 42 across a 56s run** — i.e. essentially zero. Which means **there is no allocator contention, no mutex contention, no I/O blocking** to fix. jemalloc/mimalloc on macOS **lost to libmalloc by 5-10×** in an A/B test (DYLD interposition overhead + Apple's nanomalloc fast path for small allocs). Save the allocator swap for the Linux production box — on Linux it's often a 10–20% win; on macOS don't bother. - **BWA and fermi-lite default to `n_threads = 1` internally** (`mem_opt_init` at `bwamem.c:100`, `fml_opt_init` at `bfc.c:21`) and svaba never mutates them. `kt_for` samples in the profile are the same worker thread running inline, not spawned threads. So svaba's `-p N` is 1:1 with worker threads; there's no multiplicative thread fan-out. Thread-count guidance on this 20 P-core + 8 E-core box: - `-p 20` is the default sweet spot. One worker per P-core; E-cores absorb macOS background work, jemalloc bg thread, etc. - `-p 26` or `-p 28` is possible but the extra threads land on E-cores and become tail latency (E-core is ~50% the speed of a P-core). Usually a wash or slight loss vs `-p 20`. - Load imbalance is the main remaining utilization gap. On a 3 Mb test region, utilization was ~63%; on a 10 Mb region it climbed to ~78%; on full chromosome / WGS expect 85–90%. Tail regions (HLA, centromere, high-coverage weird spots) dominate wall clock. Build flag recommendation for production runs (see "Build system"): `-O3 -mcpu=native` on bwa + fermi-lite + (via `CMAKE_CXX_FLAGS_RELWITHDEBINFO`) the svaba C++. Measured 5–15% wall-time gain expected on top of the default RelWithDebInfo build. ## Cloud scatter-gather (`scripts/svaba_cloud.sh`) `svaba_cloud.sh` parallelizes a WGS run across multiple GCP VMs — one per chromosome partition — sharing a single read-only persistent disk. Each VM runs `svaba run -k ` independently; outputs go to a GCS bucket; an optional `--merge` step concatenates the per-partition `bps.txt.gz` files and runs `svaba_postprocess.sh`. Architecture rationale: svaba's bottleneck is BWA FM-index random lookups, which are latency-bound and NUMA-hostile. Multi-socket servers waste half their threads on cross-socket access. Small single-socket VMs (e.g. `c3d-highcpu-30`, AMD Genoa, ~128 MB L3, no NUMA) give each worker full-speed local memory. Horizontal scaling across VMs beats vertical scaling to more threads on a big box. On dual-socket Xeon servers (measured on 2×20-core Xeon @ 2.8 GHz), jemalloc is the single biggest optimization — 37% wall-time reduction at 38 threads by eliminating glibc arena lock contention. NUMA pinning (`numactl --cpunodebind --membind`) is second-order at ≤40 threads on a 2-socket box but matters more on 4-socket or at higher thread counts. Disk I/O is ~9% of wall time (sequential BAM streaming). NVMe is unnecessary; standard persistent disk or even gcsfuse over a GCS bucket is fine. Interchromosomal SVs: both breakends get assembled independently by whichever partition contains the discordant read pileup. The merge + dedup step in `svaba_postprocess.sh` pairs them. No calls are lost. ## Conventions - **File naming**: `src/svaba/Svaba*.{cpp,h}` for the svaba-specific files (PascalCase, first letter capitalized). Intentional lowercase / snake_case exceptions live at the top of `src/svaba/` (`refilter`, `run_svaba`, `svaba`, `threadpool`, `tovcf`, `vcf`). Don't introduce new lowercase-first names; if you rename something on a case-insensitive filesystem (macOS), do it via `git rm --cached && git add ` or git's `core.ignorecase` will hide the rename from the index. - **C++ style**: snake_case methods inside ClassName, 2-space indent, header/impl split. Don't introduce new formatting unless asked. - **Statistical code lives in `SvabaModels.*`**; breakpoint glue lives in `BreakPoint.*`. Keep statistical primitives in the models file, not inlined into BreakPoint. - **LL/LOD values in this codebase are always log10**, not natural log. - **`aN, dN, aT, dT`** = alt count / depth in normal and tumor; **`f`** = allele fraction; **`e_fwd`/`e_rev`** = forward/reverse error rates from the artifact model. These names are used consistently in the analysis HTML too. - **Option codes** in `SvabaOptions.cpp::longOpts`: 1001-1099 = mode, 1100s = assembly, 1200s = EC, 1300s = discordant, 1400s = filter, 1500 = chunking, 1600s = bwa-mem tuning, 1700s = output/DBs, 1800 = dump-reads. Keep the ranges coherent when adding new options. ## Mate-region lookup pipeline When svaba encounters discordant reads (insert size too large or wrong orientation), it collects their mate loci and considers doing a secondary "mate-region" assembly to catch the other breakend of an SV. **Six gates** a mate candidate must pass (in order): 1. **Primary MAPQ** (`minMateMAPQ`, default -1 = no gate): the discordant read itself must have MAPQ ≥ this. Set to e.g. 10 to skip multi-mapped primaries. 2. **Chromosome ID** (`maxMateChrID`, default 23): mate must land on chr ≤ this ID (0-indexed: 0=chr1 .. 22=chrX, 23=chrY). Skips chrM/alt/decoy in human. Set to -1 (via `--non-human`) to disable entirely for non-human genomes. 3. **Blacklist**: mate locus checked against `sc.blacklist`. 4. **Min count** (`mateRegionMinCount`, default 2): merged region must have ≥ N supporting reads to survive the BamWalker filter. 5. **Somatic mateLookupMin** (default 3, `MATE_LOOKUP_MIN`): in `SvabaRegionProcessor`, only look up regions with ≥ this many somatic-only reads. 6. **Max regions** (6): cap at 6 mate regions per assembly window. All constants live in `SvabaOptions.h` as `inline constexpr` with runtime overrides in the `SvabaOptions` class: ``` --min-mate-mapq N (default -1, no gate) --max-mate-chr N (default 23, through chrY; set -1 for no limit) --mate-min-count N (default 2) --non-human (sets maxMateChrID = -1, removes human assumptions) ``` Code: `SvabaBamWalker.cpp::calculateMateRegions()`. ## Compile-time read & contig tracing Two zero-cost compile-time trace systems for debugging why a specific read was or wasn't credited / a contig was or wasn't called: **`SVABA_TRACE_READ`** — traces a single read (by QNAME) through the entire pipeline: BamWalker intake → BFC correction → r2c alignment → native realignment → splitCoverage scoring → output tagging. ```bash cmake .. -DCMAKE_CXX_FLAGS='-DSVABA_TRACE_READ="\"LH00306:129:227V5CLT4:6:1204:38807:7191\""' ``` Trace points (19 total across 3 files): - `SvabaBamWalker.cpp`: initial read filter decisions (existing) - `SvabaRegionProcessor.cpp`: BFC correction result, r2c alignment per-contig, native realignment reuse/done/miss, bi:Z tagging - `BreakPoint.cpp`: splitCoverage entry, TP8 r2c-vs-native comparison, TP9 del/ins near break, TP10 span check, TP11 del covers, CREDITED/NOT CREDITED final decision **`SVABA_TRACE_CONTIG`** — traces a single contig through assembly, alignment, and scoring: ```bash cmake .. -DCMAKE_CXX_FLAGS='-DSVABA_TRACE_CONTIG="\"c_fermi_chr2_215869501_215894501_13C\""' ``` Both can be combined. Both are `#ifdef`-guarded so they compile to nothing when not defined. See `src/svaba/SvabaDebug.h` for the macro definitions and `README.md` for full recipes. ## Useful jump points - Somatic LOD calc: `src/svaba/SvabaModels.cpp:86` - Per-sample LO: `src/svaba/BreakPoint.cpp:1610` - Somatic LOD entry: `src/svaba/BreakPoint.cpp:975` - INDEL somatic gate: `src/svaba/BreakPoint.cpp:1072` - Region-queue blacklist prune: `src/svaba/run_svaba.cpp` (right after `loader.countJobs(regionsToRun)`) - Per-read blacklist filter: `src/svaba/SvabaBamWalker.cpp:181-182` - r2c TSV emitter: `src/svaba/AlignedContig.cpp::printToR2CTsv` + `::r2cTsvHeader` - Postprocess (C++): `src/svaba/SvabaPostprocess.cpp` - Postprocess (shell orchestration): `scripts/svaba_postprocess.sh` - `svaba tovcf` driver: `src/svaba/tovcf.cpp::runToVCF` - VCF engine (parse + dedup + emit): `src/svaba/vcf.cpp` + `vcf.h` - Symbolic SV classifier: `vcf.cpp::classify_symbolic_kind` - Single-file VCF writers: `vcf.cpp::writeSvsSingleFile` + `writeIndelsSingleFile` - Blacklist combiner: `scripts/combine_blacklists.sh` - Runtime-file schema: `src/svaba/SvabaUtils.cpp::svabaTimer::header` - Options parsing: `src/svaba/SvabaOptions.cpp::SvabaOptions::parse` - Analysis writeup (somlod/maxlod): `somlod_maxlod_analysis.html` - Mate-region lookup: `src/svaba/SvabaBamWalker.cpp::calculateMateRegions` - Mate-region constants: `src/svaba/SvabaOptions.h` (lines 126-141) - Read trace macro: `src/svaba/SvabaDebug.h` - Read trace (BFC/r2c/native): `src/svaba/SvabaRegionProcessor.cpp` - Read trace (splitCoverage): `src/svaba/BreakPoint.cpp` - Debugging recipes: `README.md` (in svaba_opt root) ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.10) # Set the C++ standard required for the project project(svaba) # LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Default build type" FORCE) endif() add_compile_options(-fno-omit-frame-pointer) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/SeqLib) # Include directories for headers include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/SeqLib ${CMAKE_CURRENT_SOURCE_DIR}/SeqLib/bwa ${CMAKE_CURRENT_SOURCE_DIR}/SeqLib/fermi-lite ) # Look for htslib on the system find_package(htslib QUIET) # Find required system level type libraries find_package(Threads REQUIRED) find_package(ZLIB REQUIRED) ## LZMA find_path(LZMA_INCLUDE_DIR NAMES lzma.h) find_library(LZMA_LIBRARY NAMES lzma) if(NOT LZMA_INCLUDE_DIR OR NOT LZMA_LIBRARY) message(FATAL_ERROR "LZMA library or headers not found!") endif() ## BZip2 find_package(BZip2 REQUIRED) ## HTSLIB # # Detection order: # 1. find_package(htslib) — works only if htslib ships a # htslibConfig.cmake (rare outside conda/vcpkg installs). # 2. pkg-config — system-installed htslib typically provides a # htslib.pc, so `pkg-config --libs htslib` works. # 3. find_path/find_library for htslib/hts.h and libhts on the # default system paths (/usr/include, /usr/local/include, # /opt/homebrew/include, etc.). # 4. Explicit -DHTSLIB_DIR=/path/to/htslib for non-standard installs. # # The first three paths auto-detect a system install, so a vanilla # `cmake .. && make` works when htslib is installed system-wide. Only # fall back to HTSLIB_DIR when all auto-detections fail, matching the # pattern used here for ZLIB / BZip2 (also auto-detected). set(SVABA_HTSLIB_FOUND FALSE) set(SVABA_HTSLIB_LIBRARIES "") if (htslib_FOUND) message(STATUS "htslib: found via find_package()") set(SVABA_HTSLIB_FOUND TRUE) set(SVABA_HTSLIB_LIBRARIES hts) endif() if (NOT SVABA_HTSLIB_FOUND) find_package(PkgConfig QUIET) if (PkgConfig_FOUND) pkg_check_modules(HTSLIB_PC QUIET htslib) if (HTSLIB_PC_FOUND) message(STATUS "htslib: found via pkg-config (version ${HTSLIB_PC_VERSION})") include_directories(${HTSLIB_PC_INCLUDE_DIRS}) link_directories(${HTSLIB_PC_LIBRARY_DIRS}) set(SVABA_HTSLIB_FOUND TRUE) set(SVABA_HTSLIB_LIBRARIES ${HTSLIB_PC_LIBRARIES}) endif() endif() endif() if (NOT SVABA_HTSLIB_FOUND) find_path(HTSLIB_INCLUDE_DIR NAMES htslib/hts.h DOC "Directory containing htslib/hts.h") find_library(HTSLIB_LIBRARY NAMES hts DOC "Path to the hts library") if (HTSLIB_INCLUDE_DIR AND HTSLIB_LIBRARY) message(STATUS "htslib: found headers at ${HTSLIB_INCLUDE_DIR}, lib at ${HTSLIB_LIBRARY}") include_directories(${HTSLIB_INCLUDE_DIR}) set(SVABA_HTSLIB_FOUND TRUE) set(SVABA_HTSLIB_LIBRARIES ${HTSLIB_LIBRARY}) endif() endif() if (NOT SVABA_HTSLIB_FOUND) set(HTSLIB_DIR "" CACHE PATH "Path to HTSLib root directory") if (HTSLIB_DIR) message(STATUS "htslib: using explicit HTSLIB_DIR=${HTSLIB_DIR}") include_directories(${HTSLIB_DIR}/include) link_directories(${HTSLIB_DIR}/lib) set(SVABA_HTSLIB_FOUND TRUE) set(SVABA_HTSLIB_LIBRARIES hts) else() message(FATAL_ERROR "htslib not found. Install htslib system-wide (e.g. " "`brew install htslib` or `apt install libhts-dev`) so " "pkg-config / find_library locate it automatically, " "or pass -DHTSLIB_DIR=/path/to/htslib to point at a " "manual build.") endif() endif() # Find all source files set(SOURCES src/svaba/run_svaba.cpp src/svaba/SvabaOutputWriter.cpp src/svaba/BreakPoint.cpp src/svaba/ContigAlignmentScore.cpp src/svaba/AlignedContig.cpp src/svaba/AlignmentFragment.cpp src/svaba/DiscordantCluster.cpp src/svaba/DBSnpFilter.cpp src/svaba/SvabaUtils.cpp src/svaba/svaba.cpp src/svaba/SvabaAssemblerEngine.cpp src/svaba/tovcf.cpp src/svaba/test_svaba.cpp src/svaba/vcf.cpp src/svaba/DiscordantRealigner.cpp src/svaba/SvabaOverlapAlgorithm.cpp src/svaba/SvabaASQG.cpp src/svaba/SvabaAssemble.cpp src/svaba/KmerFilter.cpp src/svaba/SvabaThreadUnit.cpp src/svaba/SvabaRegionProcessor.cpp src/svaba/SvabaBamWalker.cpp src/svaba/refilter.cpp src/svaba/SvabaPostprocess.cpp src/svaba/LearnBamParams.cpp src/svaba/STCoverage.cpp src/svaba/SvabaModels.cpp ##src/svaba/Histogram.cpp ##src/svaba/BamStats.cpp src/svaba/SvabaRead.cpp src/svaba/SvabaOptions.cpp src/svaba/SvabaLogger.cpp src/svaba/SvabaFileLoader.cpp src/SGA/SuffixTools/STCommon.cpp src/SGA/SuffixTools/Occurrence.cpp src/SGA/SuffixTools/SuffixArray.cpp src/SGA/SuffixTools/SuffixCompare.cpp src/SGA/SuffixTools/InverseSuffixArray.cpp src/SGA/SuffixTools/SACAInducedCopying.cpp src/SGA/SuffixTools/BWTAlgorithms.cpp src/SGA/SuffixTools/BWTReader.cpp src/SGA/SuffixTools/BWTWriter.cpp src/SGA/SuffixTools/SAReader.cpp src/SGA/SuffixTools/SAWriter.cpp src/SGA/SuffixTools/SBWT.cpp src/SGA/SuffixTools/RLBWT.cpp src/SGA/SuffixTools/BWTWriterBinary.cpp src/SGA/SuffixTools/BWTReaderBinary.cpp src/SGA/SuffixTools/BWTWriterAscii.cpp src/SGA/SuffixTools/BWTReaderAscii.cpp src/SGA/SuffixTools/BWTIntervalCache.cpp src/SGA/SuffixTools/SampledSuffixArray.cpp src/SGA/Algorithm/OverlapAlgorithm.cpp src/SGA/Algorithm/DPAlignment.cpp src/SGA/Algorithm/SearchSeed.cpp src/SGA/Algorithm/OverlapBlock.cpp src/SGA/Algorithm/SearchHistory.cpp src/SGA/Algorithm/OverlapTools.cpp src/SGA/Bigraph/Bigraph.cpp src/SGA/Bigraph/Vertex.cpp src/SGA/Bigraph/Edge.cpp src/SGA/Bigraph/EdgeDesc.cpp src/SGA/SGA/OverlapCommon.cpp src/SGA/SQG/SQG.cpp src/SGA/SQG/ASQG.cpp src/SGA/StringGraph/SGUtil.cpp src/SGA/StringGraph/SGAlgorithms.cpp src/SGA/StringGraph/SGVisitors.cpp src/SGA/StringGraph/CompleteOverlapSet.cpp src/SGA/StringGraph/RemovalAlgorithm.cpp src/SGA/StringGraph/SGSearch.cpp src/SGA/StringGraph/SGWalk.cpp src/SGA/Util/Util.cpp src/SGA/Util/stdaln.c src/SGA/Util/Alphabet.cpp src/SGA/Util/Contig.cpp src/SGA/Util/ReadTable.cpp src/SGA/Util/ReadInfoTable.cpp src/SGA/Util/SeqReader.cpp src/SGA/Util/DNAString.cpp src/SGA/Util/Match.cpp src/SGA/Util/Pileup.cpp src/SGA/Util/Interval.cpp src/SGA/Util/SeqCoord.cpp src/SGA/Util/QualityVector.cpp src/SGA/Util/Quality.cpp src/SGA/Util/PrimerScreen.cpp src/SGA/Util/CorrectionThresholds.cpp src/SGA/Util/ClusterReader.cpp src/SGA/Util/QualityTable.cpp src/SGA/Util/gzstream.C src/SGA/Util/BitChar.cpp src/SGA/Util/MultiOverlap.cpp ) include_directories( ${CMAKE_CURRENT_BINARY_DIR} src/SGA/Algorithm src/SGA/StringGraph src/SGA/SGA src/SGA/SuffixTools src/SGA/Util src/SGA/SQG src/SGA/Bigraph src/svaba src/SGA ) # --------------------------------------------------------------------------- # Optional compile-time contig tracing (SvabaDebug.h). # # cmake .. -DSVABA_TRACE_CONTIG="c_fermi_chr2_215869501_215894501_11C" # # Prints detailed stderr trace for every decision point that contig # touches. Pass -DSVABA_TRACE_ALL=ON to trace ALL contigs (very noisy). # --------------------------------------------------------------------------- set(SVABA_TRACE_CONTIG "" CACHE STRING "Contig name to trace (empty=off)") option(SVABA_TRACE_ALL "Trace ALL contigs (very noisy)" OFF) set(SVABA_TRACE_READ "" CACHE STRING "Read QNAME to trace (empty=off)") option(SVABA_TRACE_ALL_READS "Trace ALL reads (extremely noisy)" OFF) # Generate the executable add_executable(svaba ${SOURCES}) if (NOT "${SVABA_TRACE_CONTIG}" STREQUAL "") message(STATUS "svaba: tracing contig '${SVABA_TRACE_CONTIG}'") target_compile_definitions(svaba PRIVATE SVABA_TRACE_CONTIG="${SVABA_TRACE_CONTIG}") endif() if (SVABA_TRACE_ALL) message(STATUS "svaba: tracing ALL contigs (noisy!)") target_compile_definitions(svaba PRIVATE SVABA_TRACE_ALL=1) endif() if (NOT "${SVABA_TRACE_READ}" STREQUAL "") message(STATUS "svaba: tracing read '${SVABA_TRACE_READ}'") target_compile_definitions(svaba PRIVATE SVABA_TRACE_READ="${SVABA_TRACE_READ}") endif() if (SVABA_TRACE_ALL_READS) message(STATUS "svaba: tracing ALL reads (extremely noisy!)") target_compile_definitions(svaba PRIVATE SVABA_TRACE_ALL_READS=1) endif() # If the submodules already have Makefiles, you can use custom commands to invoke make # in those directories. add_custom_target( COMMAND make WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) # --------------------------------------------------------------------------- # Optional jemalloc support. # # On Linux with high thread counts (-p 16+), jemalloc eliminates glibc # arena-lock contention that can cost 30-40% wall time. Link it at # compile time so no LD_PRELOAD is needed at runtime. # # cmake .. -DUSE_JEMALLOC=ON # link jemalloc (recommended on Linux) # cmake .. -DUSE_JEMALLOC=OFF # use system malloc (default) # # macOS users should NOT enable this — Apple's libmalloc with its # nanomalloc fast path outperforms jemalloc on this workload. # --------------------------------------------------------------------------- option(USE_JEMALLOC "Link against jemalloc for reduced allocator contention" OFF) set(JEMALLOC_LIBRARIES "") if (USE_JEMALLOC) find_library(JEMALLOC_LIB NAMES jemalloc PATHS /usr/lib/x86_64-linux-gnu /usr/lib /usr/local/lib DOC "Path to libjemalloc") if (JEMALLOC_LIB) message(STATUS "jemalloc: found at ${JEMALLOC_LIB}") set(JEMALLOC_LIBRARIES ${JEMALLOC_LIB}) else() message(FATAL_ERROR "USE_JEMALLOC=ON but libjemalloc not found. " "Install it (apt install libjemalloc-dev) or set " "-DJEMALLOC_LIB=/path/to/libjemalloc.so") endif() endif() # Linking target_link_libraries(svaba seqlib ${CMAKE_CURRENT_SOURCE_DIR}/SeqLib/bwa/libbwa.a ${CMAKE_CURRENT_SOURCE_DIR}/SeqLib/fermi-lite/libfml.a Threads::Threads ${SVABA_HTSLIB_LIBRARIES} ZLIB::ZLIB ${CURL_LIBRARY} ${LZMA_LIBRARY} BZip2::BZip2 ${JEMALLOC_LIBRARIES} ) # --------------------------------------------------------------------------- # Install support. # # `make install` (equivalent: `cmake --install build`) copies the svaba # binary to ${CMAKE_INSTALL_PREFIX}/bin. GNUInstallDirs sets the usual # distro-friendly defaults for BINDIR / LIBDIR / etc., so this follows # standard Unix conventions. # # Default CMAKE_INSTALL_PREFIX is /usr/local (may need sudo). To stage # into a non-system location, pass -DCMAKE_INSTALL_PREFIX=/some/path at # cmake time, or use `cmake --install build --prefix /some/path` at # install time. To drop the binary into this repo's `bin/` directory: # cmake --install build --prefix ${CMAKE_SOURCE_DIR} # --------------------------------------------------------------------------- include(GNUInstallDirs) install(TARGETS svaba RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(PROGRAMS ${CMAKE_SOURCE_DIR}/scripts/svaba_postprocess.sh DESTINATION ${CMAKE_INSTALL_BINDIR}) ================================================ FILE: Dockerfile ================================================ # Start with an Ubuntu image FROM ubuntu:20.04 # Avoid prompts with tzdata (timezones) ENV DEBIAN_FRONTEND=noninteractive # Install dependencies for htslib and svaba RUN apt update && apt install -y \ autoconf \ automake \ make \ gcc \ g++ \ git \ perl \ zlib1g-dev \ libbz2-dev \ liblzma-dev \ libcurl4-gnutls-dev \ libssl-dev \ cmake \ && rm -rf /var/lib/apt/lists/* # Clone and install htslib WORKDIR /opt RUN git clone --recursive https://github.com/samtools/htslib.git && \ cd htslib && \ autoheader && \ autoconf && \ ./configure && \ make && \ make install # Ensure shared libraries are noticed RUN ldconfig # Clone svaba WORKDIR /opt RUN git clone --recursive https://github.com/walaj/svaba.git && cd svaba && mkdir build # Compile svaba with htslib WORKDIR /opt/svaba/build RUN cmake .. \ -DHTSLIB_DIR=/usr/local && \ make # Add svaba to system PATH ENV PATH="/opt/svaba/build:${PATH}" ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: R/archive_non_functional/create-databases.R ================================================ #################### ## load CCDS and name table ccds <- fread("/xchip/gistic/Jeremiah/tracks/ccdsGene.hg19.txt") ## load and format name table (CCDS to gene name conversion) nm <- fread("/xchip/gistic/Jeremiah/tracks/name_conversion.tsv") setnames(nm, colnames(nm), gsub(" ","_",colnames(nm))) app_sym <- rep(nm$Approved_Symbol, times=nm[, length(strsplit(CCDS_IDs, ",")[[1]]), by=HGNC_ID]$V1) nmm <- data.table(ccds=gsub(" ", "", unlist(strsplit(nm$CCDS_IDs,","))), gene=app_sym) setkey(nmm, ccds) ## merge names with CCDS ccds[, ccds := gsub("(.*?)\\..*", "\\1", name)] setkey(ccds, ccds) ccds <- nmm[ccds] ## switch frames 1 and 2, so that 2 refers to 2/3 of codon, 1 to 1/3 ## eg. ++***+++***+++ starts with 2/3 of codon in its sense dir, so frame is 2 ccds$exonFrames <- gsub("1","A", ccds$exonFrames) ccds$exonFrames <- gsub("2","1", ccds$exonFrames) ccds$exonFrames <- gsub("A","2", ccds$exonFrames) ## dedupe on gene, taking the largest one ccds[, negc := -exonCount] setkey(ccds, gene, negc) ccds <- ccds[!duplicated(gene)] ccds[, negc := NULL] ## create exon intron track ccds[, exon_start := min(as.numeric(strsplit(exonStarts, ",")[[1]])), by=c("name", "chrom", "txStart")] ccds[, exon_end := max(as.numeric(strsplit(exonEnds, ",")[[1]])), by=c("name", "chrom", "txStart")] ccds[, intron_ends := { ll <- as.numeric(strsplit(exonStarts, ",")[[1]]); paste(ll[seq(2, length(ll), length.out=ifelse(length(ll) > 1, length(ll)-1, 0))], collapse=",")} , by=c("name", "chrom", "txStart")] ccds[, intron_starts := { ll <- as.numeric(strsplit(exonEnds, ",")[[1]]); paste(ll[seq(1, length(ll)-1, length.out=ifelse(length(ll) > 1, length(ll)-1, 0))], collapse=",")} , by=c("name", "chrom", "txStart")] ccds[, intron_frame := { ll <- as.numeric(strsplit(exonFrames, ",")[[1]]) if (length(ll) == 1) ## no exons "" else if (strand == '+') ## in sense dir, give frame to exon after paste(ll[seq(2, length(ll))], collapse=",") else ## exons ordered in + direction, so sense exon after intron is actually the one BEFORE intron for this ordering paste(ll[seq(1, length(ll)-1)], collapse=",") } , by=c("name", "chrom", "txStart")] intrEnds <- as.numeric(unlist(strsplit(ccds$intron_ends, ","))) intrStarts <- as.numeric(unlist(strsplit(ccds$intron_starts, ","))) intrFrame <- as.numeric(unlist(strsplit(ccds$intron_frame, ","))) intrName <- rep(ccds$name, times=as.numeric(ccds$exonCount)- 1) intrChr <- gsub("chr", "", rep(ccds$chrom, times=as.numeric(ccds$exonCount)-1)) intrNums <- as.numeric(ccds[, { s <- seq(length.out=ifelse(as.numeric(exonCount)==1, 0, as.numeric(exonCount)-1)); if (strand == '+') { s } else { rev(s) } }, by=c("name","chrom","txStart")]$V1) exonNums <- as.numeric(ccds[, { s <- seq(as.numeric(exonCount)); if (strand=='+') { s } else { rev(s) }}, by=c("name","chrom","txStart")]$V1) intrGene <- rep(ccds$gene, times=as.numeric(ccds$exonCount)-1) exonGene <- rep(ccds$gene, times=as.numeric(ccds$exonCount)) ccdsGene <- as.numeric(ccds[, seq(as.numeric(exonCount)), by=c("name","chrom","txStart")]$V1) ccds[, exon_end := max(as.numeric(strsplit(exonEnds, ",")[[1]])), by=c("name", "chrom", "txStart")] exonFrames <- as.numeric(unlist(strsplit(ccds$exonFrames, ","))) exonStarts <- as.numeric(unlist(strsplit(ccds$exonStarts, ","))) exonEnds <- as.numeric(unlist(strsplit(ccds$exonEnds, ","))) ccdsName <- rep(ccds$name, times=as.numeric(ccds$exonCount)) exonStrand <- rep(ccds$strand, times=as.numeric(ccds$exonCount)) #exonStarts[exonStrand == '+'] <- exonStarts[exonStrand == '+'] + 1 ## off by one? exonStarts <- exonStarts + 1 ## off by one? #exonEnds[exonStrand == '-'] <- exonEnds[exonStrand == '-'] + 1 ## off by one? intrStrand <- rep(ccds$strand, times=as.numeric(ccds$exonCount)-1) ccdschrom <- gsub("chr","",rep(ccds$chrom, times=as.numeric(ccds$exonCount))) gr.exons <- sort(gr.fix(GRanges(ccdschrom, IRanges(exonStarts, exonEnds), strand=exonStrand, name=ccdsName, num=exonNums, frame=exonFrames, gene=exonGene), si)) gr.introns <- sort(gr.fix(GRanges(intrChr, IRanges(intrStarts, intrEnds), strand=intrStrand, name=intrName, num=intrNums, frame=intrFrame, gene=intrGene), si)) #### genes gr.genes = sort(gr.fix(gr.nochr(with(fread("/xchip/gistic/Jeremiah/tracks/genes.hg19.ucsc.txt", sep="\t"), GRanges(chr, IRanges(beg, end), gene=symbol))), si)) gr.genes <- gr.genes[!grepl("^ULK|^NBPF|^MIR|^LOC|^OR|^SNO|^FAM|^ZNF|^SMN|^NF1P2|^POTEB|^RNF|^RGPD5|^RGPD2|^SNAR|^NBPF", gr.genes$gene) & width(gr.genes) < 3e6] gr.genes$gene <- as.character(gr.genes$gene) gg <- grbind(gr.exons, gr.introns) #gg <- gr.val(gg, gr.genes, 'gene', sep="_") #gg$gene[nchar(gg$gene) > 50] <- "MANYGENES" ## get complement gg <- gr.stripstrand(gr.fix(gg, si)) gg$gene <- as.character(gg$gene) gene.comp <- setdiff(gr.stripstrand(si2gr(si)), gg) + 1 fo <- gr2dt(gr.findoverlaps(gene.comp, gg)) fo <- fo[query.id %in% as.numeric(names(table(fo$query.id)[table(fo$query.id) == 2]))] ## now each intergenic region has front/back overlap fo[, right := gg$gene[subject.id[2]], by=query.id] fo[, left := gg$gene[subject.id[1]], by=query.id] gene.comp$left <- gene.comp$right <- "" gene.comp$left[fo$query.id] <- fo$left gene.comp$right[fo$query.id] <- fo$right gene.comp <- gene.comp - 1 ## tubio ff <- fread("/xchip/gistic/Jeremiah/tracks/master_db_29062016_ranges.txt") setnames(ff, c("V1","V2","V3","V4","V5","V6"), c("seqnames","start","end","dir","type","sample")) ff$strand <- ifelse(ff$dir == "plus","+","-") gr.tub <- dt2gr(ff) ================================================ FILE: R/archive_non_functional/gen_quals.R ================================================ require(data.table) f <- fread("grep -v ^# /broad/broadsv/NA12878/GCAT/gcat_illumina_150x/snowman/v115/v115.snowman.indel.vcf", sep='\t') hdr <- fread("grep ^# /broad/broadsv/NA12878/GCAT/gcat_illumina_150x/snowman/v115/v115.snowman.indel.vcf", sep="\t", header=FALSE) ## rescale the quality score f[, SL := gsub(".*?:.*?:.*?:.*?:.*?:.*?:.*?:.*?:.*?:(.*?)","\\1", V10)] f[, V6 := SL] p <- c(hdr$V1, f[, paste(V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,sep="\t")]) writeLines(p, "/broad/hptmp/jwala/test.vcf") ================================================ FILE: R/archive_non_functional/svaba-annotate.R ================================================ #!/usr/bin/env Rscript library(optparse) option_list = list( make_option(c("-i", "--input"), type = "character", default = NULL, help = "Input VCF file"), make_option(c("-s", "--style"), type = "character", default = "ncbi", help = "[nbci] for 1,2,...X, or [ucsc] for chr1, chr2, ...chrX"), make_option(c("-g", "--genome"), type = "character", default = NULL, help = "genome build (hg19 or hg38)"), make_option(c("-b", "--db"), type = "character", default = "refseq", help = "[refseq] gene database to use (must be refseq or gencode)"), make_option(c("-o", "--output"), type = "character", default = "no_id", help = "Output annotation name") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) if (!tolower(opt$style) %in% c("ncbi","ucsc")) stop("Must specify style as ncbi or ucsc") if (!tolower(opt$genome) %in% c("hg38","hg19")) stop("Must specify --genome as hg19 or hg38") write("...loading required packages\n", stderr()) library(roverlaps) ## can find at https://github.com/walaj/roverlaps ##library(plyr) library(RMySQL) library(data.table) ## setup the connect to UCSC write("...downloading annotation tracks from UCSC\n", stderr()) assembly <- opt$genome mychannel <- dbConnect(MySQL(), user="genome", host="genome-mysql.cse.ucsc.edu") query <- function(...) dbGetQuery(mychannel, ...) if (tolower(opt$db) == tolower("refseq")) { ## download the exons and their gene names from RefSeq (UCSC track) ## - reminder that refseq ids can be interpreted: ## https://www.ncbi.nlm.nih.gov/books/NBK50679/#RefSeqFAQ.what_is_the_difference_between ## - (from above): Accession numbers that begin with the prefix XM_ (mRNA), XR_ (non-coding RNA), and XP_ (protein) ## are model RefSeqs produced either by NCBIs genome annotation pipeline or copied from ## computationally annotated submissions to the INSDC.NCBI ## ...subsequently curated RefSeq records (with NM_, NR_, or NP_ accession prefixes) genes <- suppressWarnings(data.table::as.data.table(query(paste0("SELECT name, name2, chrom, txStart, txEnd, strand, exonStarts, exonEnds, exonCount, exonFrames FROM ", assembly, ".refGene")))) genes[, prefix := gsub("([A-Z]+)_.*","\\1", name)] genes[, longest := { a=rep(FALSE, .N); a[which.max(txEnd - txStart)] <- TRUE; a }, by=name2] genes[, numTranscriptAnnotations := .N, by=name2] genes <- genes[txEnd - txStart >= 100] ## only genes longer than 100 bp genes <- genes[genes$longest] ## just take the longest transcriopt write('...defaulting to annotating only the longest transcript') genes[, longest := NULL] setnames(genes, c("name2","name"), c("geneSymbol","id")) } else if (tolower(opt$db) == "gencode") { ## if want to use GENCODE instead, need to get table to convert GENCODE ids to gene names genes <- suppressWarnings(data.table::as.data.table(query(paste0("SELECT name, chrom, txStart, txEnd, strand, exonStarts, exonEnds, exonCount FROM ", assembly, ".knownGene")))) codes <- suppressWarnings(data.table::as.data.table(query(paste0("SELECT kgID, mRNA, geneSymbol, spID, refSeq FROM ", assembly, ".kgXref")))) ## merge the gene ids to gene names setnames(genes, c("name"), c("kgID")) setkey(genes, kgID) setkey(codes, kgID) genes <- codes[genes] stopifnot(!any(duplicated(genes$kgID))) genes[, geneSymbol := toupper(geneSymbol)] setnames(genes, "kgID", "id") } else { stop("db option must be either GENCODE or RefSeq") } write("...parsing downloaded annotation data\n", stderr()) ## convert to key'ed format setnames(genes, c("chrom", "txStart","txEnd"), c("seqnames","start","end")) if (tolower(opt$style) == "ncbi") genes[, seqnames := gsub("^chr", "", seqnames)] ## make the exons structure starts <- strsplit(genes[, exonStarts], ",") ends <- strsplit(genes[, exonEnds], ",") frames <- strsplit(genes[, exonFrames], ",") stopifnot(sum(sapply(starts, length)) == sum(sapply(ends, length))) stopifnot(sum(sapply(starts, length)) == sum(sapply(frames, length))) stopifnot(sum(sapply(starts, length)) == sum(genes$exonCount)) exons <- data.table(id = genes[, rep(id, exonCount)], geneSymbol = genes[, rep(geneSymbol, exonCount)], exonCount = genes[, rep(exonCount, exonCount)], seqnames = genes[, rep(seqnames, exonCount)], frames = as.numeric(unlist(frames)), start = as.numeric(unlist(starts)), end = as.numeric(unlist(ends)), strand = genes[, rep(strand, exonCount)]) exons[, exonNum := ifelse(strand=="+", seq(.N), rev(seq(.N))), by=id] ## make an introns track ## for the frames, define the intron from as the one of the previous exon, respecting strand ## EEEEiiiiiiiEEEEiiiiiiiiEEEEEiiiiiEEE <<< intron frame is frame of RIGHT exon (iiiiEEEE) ## EEEEiiiiiiiEEEEiiiiiiiiEEEEEiiiiiEEE >>> intron from is frame of LEFT exon (EEEEiii) ends <- exons[exonCount > 1, start[seq(2, .N)], by=id] starts <- exons[exonCount > 1, end[seq(1, .N-1)], by=id] if ("exonFrames" %in% colnames(genes)) { frames <- exons[exonCount > 1, { if (strand[1]=="+") frames[seq(1,.N-1)] else frames[seq(2,.N)] }, by=id] stopifnot(nrow(ends) == nrow(frames)) } stopifnot(nrow(ends) == nrow(starts)) stopifnot(all(ends$id == starts$id)) stopifnot(min(as.numeric(names(table(exons[exonCount>1, exonCount])))) > 1) if ("exonFrames" %in% colnames(genes)) { introns <- data.table(id=ends$id, start=starts$V1, end=ends$V1, frame=frames$V1) } else { introns <- data.table(id=ends$id, start=starts$V1, end=ends$V1) } short <- exons[!duplicated(id), .(id, geneSymbol, seqnames, strand, exonCount)] setkey(introns, id) setkey(short, id) introns <- short[introns] introns[, intronCount := exonCount - 1] introns[, exonCount := NULL] introns[, intronNum := ifelse(strand == "+", seq(.N), rev(seq(.N))), by=id] ## make the inter-genic trackk #ro <- roverlaps(genes, genes) #ro[,max(end), by=query.id]$V1 #setkey(genes, seqnames, start) #starts <- genes[,end[seq(2,.N)], by=seqnames]$V1 #ends <- genes[,start[seq(1,.N-1)], by=seqnames]$V1 ## read in file write("...reading VCF file\n", stderr()) if (grepl("gz$", opt$input)) { print(paste("gunzip -c", opt$input, "| grep -v ^#")) vcf <- data.table::fread(cmd=paste("gunzip -c", opt$input, "| grep -v ^#"), sep="\t") } else { vcf <- data.table::fread(cmd=paste("grep -v ^#", opt$input), sep="\t") } setnames(vcf, paste0("V", seq(9)), c("seqnames","start","id","ref","alt","qual","filter","info","geno")) ## bail early if nothing found if (nrow(vcf) == 0) { write("No rearrangements found\n", stderr()) quit(status=0) } else { write(paste("Found", nrow(vcf), "rearrangements\n"), stderr()) } ## grl.ix is unique ID for each rearrangement ## grl.iix is either 1 or 2 (for each side of the rearrangement) vcf[, grl.ix := gsub("([0-9]+):[0-9]","\\1",id)] vcf[, grl.iix := as.numeric(gsub("[0-9]+:([0-9])","\\1",id))] ## set the strand info for BND format vcf[grepl("SVTYPE=BND", info), strand := ifelse(grepl("^\\[", alt) | grepl("^\\]", alt), '-', '+')] vcf[, inv := strand[1] == strand[2], by=grl.ix] vcf[, altstrand := rev(strand), by=grl.ix] vcf[, altpos := as.integer(gsub(".*?:([0-9]+).*", "\\1", alt))] vcf[, altchr := gsub(".*?(\\[|\\])(.*?):([0-9]+).*", "\\2", alt)] vcf[, span := ifelse(seqnames==altchr, abs(start - altpos), -1)] ## annotate with gene overlaps ro <- roverlaps::roverlaps(vcf, genes) ro[, geneSymbol := genes$geneSymbol[subject.id]] ro[, geneSymbol := paste(unique(geneSymbol), collapse="_"), by=query.id] ro[, geneTranscriptCount := genes$numTranscriptAnnotations[subject.id]] ro[, geneStrand := genes$strand[subject.id]] vcf[ro$query.id, geneSymbol := ro$geneSymbol] vcf[ro$query.id, geneStrand := ro$geneStrand] vcf[, geneSymbolAlt := geneSymbol[rev(grl.iix)], by=grl.ix] vcf[, geneStrandAlt := geneStrand[rev(grl.iix)], by=grl.ix] vcf[ro$query.id, geneTranscriptCount := ro$geneTranscriptCount] ## annotate with genes within 20kb PAD <- 20e3 genes20 <- data.table::copy(genes) genes20[, start := start - PAD/2] genes20[, end := end + PAD/2] ro <- roverlaps::roverlaps(vcf, genes20) ro[, geneSymbol20kb := genes$geneSymbol[subject.id]] ro[, geneSymbol20kb := paste(unique(geneSymbol20kb), collapse="_"), by=query.id] vcf[ro$query.id, geneSymbol20kb := ro$geneSymbol20kb] vcf[, geneSymbol20kbAlt := geneSymbol20kb[rev(grl.iix)], by=grl.ix] ## overlap introns ro <- roverlaps::roverlaps(vcf, introns) ro[, intronNum := introns$intronNum[subject.id]] ro[, intronGene := introns$geneSymbol[subject.id]] ro[, intronStart := ifelse(introns$strand[subject.id] == "+", introns$start[subject.id], introns$end[subject.id])] ro[, intronGene := paste(unique(intronGene), collapse="_"), by=query.id] vcf[ro$query.id, intronGene := ro$intronGene] vcf[ro$query.id, intronNum := ro$intronNum] vcf[ro$query.id, intronStart := ro$intronStart] vcf[, intronGeneAlt := intronGene[rev(grl.iix)], by=grl.ix] vcf[, intronNumAlt := intronNum[rev(grl.iix)], by=grl.ix] vcf[, intronBpsIn := abs(intronStart - start)] if ("frame" %in% colnames(introns)) { ro[, cdsFrame := introns$frame[subject.id]] vcf[ro$query.id, cdsFrame := ro$cdsFrame] } vcf[!is.na(intronNum), bk_msg := paste(intronBpsIn, "bp_into_intron", intronNum, "of", intronGene, sep="_")] ## overlap exons ro <- roverlaps(vcf, exons) ro[, exonNum := exons$exonNum[subject.id]] ro[, exonGene := exons$geneSymbol[subject.id]] ro[, exonStart := ifelse(exons$strand[subject.id] == "+", exons$start[subject.id], exons$end[subject.id])] ro[, exonGene := paste(unique(exonGene), collapse="_"), by=query.id] vcf[ro$query.id, exonGene := ro$exonGene] vcf[ro$query.id, exonNum := ro$exonNum] vcf[ro$query.id, exonStart := ro$exonStart] vcf[, exonGeneAlt := exonGene[rev(grl.iix)], by=grl.ix] vcf[, exonNumAlt := exonNum[rev(grl.iix)], by=grl.ix] vcf[, exonBpsIn := abs(exonStart - start)] vcf[!is.na(exonNum), bk_msg := paste(exonBpsIn, "bp_into_exon", exonNum, "of", exonGene, sep="_")] ## annotate fusions vcf[, fusion := { f <- sum(grepl("intron|exon", bk_msg)) == 2 && (geneSymbol[1] != geneSymbol[2]); if (is.na(f)) { FALSE } else { f } } , by = grl.ix] vcf[, sense := all(geneStrand != "") && ((geneStrand[1] == geneStrand[2] && strand[1] != strand[2]) || (strand[1] != strand[2] && geneStrand[1] == geneStrand[2])), by = grl.ix] ## DECIDE WHICH PIECE IS "first" in the fusion gene (where Tx starts) ## RAR_STRAND GENE_STRAND ## ++ or -- must be +- or -+. Starts on + ## +- or -- msut be -- or ++. Starts on side where gstrand == rarstrand if (any(vcf$fusion)) { vcf[vcf$fusion, gorder := { mk <- c(NA,NA) ## inversion if (strand[1] == strand[2]) { if (geneStrand[1] == '+') mk <- c(2,1) else mk <- c(1,2) } ## non type if (geneStrand[1] == geneStrand[1]) mk <- c(1,2) else mk <- c(2,1) mk }, by=grl.ix] } else { vcf[, gorder := 1] ##dummy } ## decide if in frame if ("cdsFrame" %in% colnames(vcf)) { vcf[, in_frame := { f = (cdsFrame[gorder[2]] - cdsFrame[gorder[1]]); xbases <- 0; ##xbases <- nchar(INSERTION[1]) - nchar(HOMSEQ[1]); if (is.na(f[1])) FALSE else if (all(grepl('intron', bk_msg)) && sense[1]) ## intron to intron f == 0 else f + xbases %% 3 == 0 }, by=grl.ix] ## make the fusion messages vcf[, in_frame_fusion := in_frame && fusion && sense, by=grl.ix] vcf[vcf$in_frame_fusion, msg := paste("In-frame sense fusion from:", bk_msg[gorder[1]], "to", bk_msg[gorder[2]]), by=grl.ix] vcf[!vcf$in_frame_fusion & vcf$fusion & vcf$sense, msg := paste("Out-of-frame sense fusion between:", bk_msg[1], "and", bk_msg[2]), by=grl.ix] vcf[!vcf$sense, msg := paste("Anti-sense fusion between:", bk_msg[1], "and", bk_msg[2]), by=grl.ix] } vcf[, c("fusion","gorder") := NULL] ## writing to stdout write.table(vcf[,.(seqnames, start, start, altchr, altpos, altpos, strand, altstrand, id, ref, alt, qual, filter, info, grl.ix, grl.iix, span, geneSymbol, geneStrand, geneSymbol20kb, intronGene, intronNum, bk_msg, exonGene, exonNum, in_frame, in_frame_fusion, msg)], row.names=FALSE, col.names=TRUE, quote=FALSE, sep="\t", file=stdout()) ## ##llr$bk_msg[!grepl("intron|exon", llr$bk_msg)] <- "" ## write("...annotating intergenic") ## fo <- gr.findoverlaps(llr, gene.comp) ## if (nrow(fo)) { ## fo[, left := gene.comp$left[subject.id], by=query.id] ## fo[, right := gene.comp$right[subject.id], by=query.id] ## fo[, right_start := end(gene.comp)[subject.id], by=subject.id] ## fo[, left_end := start(gene.comp)[subject.id], by=subject.id] ## fo[, left_dist := start - left_end, by=query.id] ## fo[, right_dist := right_start - end, by=query.id] ## fo[, mmm := paste(left_dist, "bp to right of", left, "and", right_dist, "bp to left of", right)] ## llr$msg[!nchar(llr$msg)] <- "" ## llr$bk_msg[fo$query.id] <- ifelse(!nchar(llr$bk_msg[fo$query.id]), fo$mmm, llr$bk_msg[fo$query.id]) ## } ## ############## make the circos plot ## write("...making Circos plot") ## library(RCircos) ## data(UCSC.HG19.Human.CytoBandIdeogram); ## chr.exclude <- NULL; ## cyto.info <- UCSC.HG19.Human.CytoBandIdeogram; ## tracks.inside <- 10; ## tracks.outside <- 0; ## RCircos.Set.Core.Components(cyto.info, chr.exclude, tracks.inside, tracks.outside); ## ## get the gene label dat ## #genes <- genes[width(genes) < 2e6] ## #fo1 <- gr.findoverlaps(gr1+10e3, genes) ## #fo2 <- gr.findoverlaps(gr2+10e3, genes) ## ## annoying bug with seqinfo clash on 'c' ## #if (length(fo1) && length(fo2)) { ## # fo <- c(fo1,fo2) ## #} else if (length(fo1)) { ## # fo <- fo1 ## #} else { ## # fo <- fo2 ## #} ## write("...constructing Circos plot") ## ## set the gene labels ## gene.dat <- data.frame(Chromsome=c(dt.bks$chr1, dt.bks$chr2), chromStart=c(dt.bks$pos1, dt.bks$pos2), ## chromEnd=c(dt.bks$pos1,dt.bks$pos2), Gene=as.character(c(dt.bks$gene1, dt.bks$gene2)), ## stringsAsFactors=FALSE) ## if (nrow(gene.dat)) ## gene.dat <- gene.dat[nchar(gene.dat$Gene) > 0,] ## if (nrow(gene.dat)) ## gene.dat <- gene.dat[!duplicated(gene.dat$Gene),] ## links = data.frame() ## if (length(bks)) ## links = with(dt.bks, data.frame(Chromosome=chr1, chromStart=pos1, chromEnd=pos1, Chromsome.1=chr2, chromStart.1=pos2, chromEnd.1=pos2)) ## ## plot the PDF ## pdf(file=paste0(opt$output,".pdf"), height=opt$height, width=opt$width, compress=TRUE); ## RCircos.Set.Plot.Area(); ## RCircos.Chromosome.Ideogram.Plot(); ## if (opt$genes != 0 && nrow(gene.dat) > 0) { ## track.num <- 1 ## RCircos.Gene.Connector.Plot(gene.dat, track.num, "in"); ## track.num <- 2; ## name.col <- 4; ## RCircos.Gene.Name.Plot(gene.dat, name.col, track.num, "in"); ## } ## if (nrow(links) > 0) { ## track.num = 1 ## RCircos.Link.Plot(links, track.num, by.chromosome=TRUE) ## by.chromosome is for color ## } ## dev.off() ================================================ FILE: R/archive_non_functional/svaba-asqg2pdf.R ================================================ #!/usr/bin/env Rscript library(optparse) option_list = list( make_option(c("-i", "--input"), type = "character", default = NULL, help = "Input asqg file from snowman run --write-asqg or sga"), make_option(c("-c", "--inputcc"), type = "character", default = NULL, help = "Input cc file from snowman run --write-asqg or sga"), make_option(c("-o", "--output"), type = "character", default = "graph.pdf", help = "Output pdf to write the graph"), make_option(c("-d", "--height"), type = "numeric", default = 20, help = "Height"), make_option(c("-w", "--width"), type = "numeric", default = 20, help = "Width"), make_option(c("-m", "--mincount"), type = "numeric", default = 1, help = "Remove nodes with fewer than m components") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) require(igraph) require(data.table) #opt$input ="/xchip/gistic/Jeremiah/Projects/SnowmanPaper/Benchmark/150830/tmp.graph.after.asqg" vert.file = paste(opt$input, "vert", sep=".") ##reads.file = file.path(dir, 'plots', 'readsForR_som.txt') ##reads <- import.snowman.reads(reads.file) #cont = 'c_8:43487254-43492254_11' ##cont = 'c_8:43487254-43492254_0' ##this_reads <- reads$rname[as.character(seqnames(reads)) %in% cont] ## read the edges ln= readLines(opt$input, n = 1000) nskip = sum(grepl('^VT|^HT', ln)) tab.e <- read.delim(opt$input, skip=nskip, strings=FALSE, header=FALSE, sep=" ") tab.e$V1 <- substring(tab.e$V1, 4) colnames(tab.e) <- c('seq1', 'seq2', 'overlap_start1', 'overlap_end1', 'len1', 'overlap_start2', 'overlap_end2', 'len2', 'orientation', 'numdiff') edges <- data.frame(from=tab.e$seq1, to=tab.e$seq2) ## read the verts cmd = paste("grep", '"VT"', opt$input, ">", vert.file) system(cmd) tab <- read.delim(vert.file, skip=0, strings=FALSE, header=FALSE, sep="\t") if (ncol(tab) == 4) { colnames(tab) <- c("V", "rname", 'seq', 'ss') } else if (ncol(tab) == 3) { colnames(tab) <- c("V", "rname", 'seq') } verts <- data.frame(verts=unique(c(as.character(tab$rname), as.character(edges$to), as.character(edges$from)))) g <- graph.data.frame(edges, directed=FALSE, vertices=verts) ## vert lengths vert.lens <- structure(nchar(tab$seq), names=tab$rname) ## open the cc file if (file.info(opt$inputcc)$size > 0) { cc <- fread(opt$inputcc) cc$col <- sample(colors(), length(unique(cc$V2)))[match(cc$V2, unique(cc$V2))] setkey(cc, col) V(g)$color = "black" for (x in cc$col) { V(g)$color[verts$verts %in% cc[x]$V1] <- x } } ## format the verts V(g)$names = paste(as.character(verts$verts), "len:", vert.lens[as.character(verts$verts)]) ##V(g)$color[V(g)$names %in% this_reads] <- 'red' ## format the edges E(g)$lab <- tab.e$overlap_end2 - tab.e$overlap_start2 ## cluster V(g)$community <- membership(cl<-clusters(g)) good_communities <- which(cl$csize >= opt$mincount) g <- delete.vertices(g, V(g)[!community %in% good_communities]) pdf(opt$output, height=opt$height, width=opt$width) plot(g, vertex.color=V(g)$color, vertex.label=V(g)$names, edge.label=E(g)$lab, vertex.size=2) dev.off() ================================================ FILE: R/archive_non_functional/svaba-bam-qcplot.R ================================================ #!/usr/bin/env Rscript library(optparse) option_list = list( make_option(c("-i", "--input"), type = "character", default = "qcreport.txt", help = "Input txt file from a snowman preprocess qcreport.txt"), make_option(c("-o", "--output"), type = "character", default = "qcreport.pdf", help = "Output pdf to generate") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) if (!file.exists(opt$input)) { print(print_help(parseobj)) stop(paste("Input file does not exist", opt$input, ". Must supply path to valid qcreport.txt file (generated from snowman preprocess or snowman run")) } print(opt) require(ggplot2) require(reshape2) require(gridExtra) ## read the table con <- file(opt$input, open = "r") df.mapq <- df.nm <- df.isize <- df.as <- df.xp <- df.len <- df.phred <- df.clip <- data.frame() rg <- list() while (length(line <- readLines(con, n = 1, warn = FALSE)) > 0) { ## found a new one if (grepl("READGROUP", line)) { thisrg = gsub("READGROUP:BI:(.*)", "\\1", line) rg[[thisrg]] <- data.frame(readgroup = thisrg) } else if (grepl("total", line)) { rg[[thisrg]]$total = as.numeric(gsub("total,([0-9]+)", "\\1", line)) } else if (grepl("unmap", line)) { rg[[thisrg]]$unmap = as.numeric(gsub("unmap,([0-9]+)", "\\1", line)) } else if (grepl("qcfail", line)) { rg[[thisrg]]$qcfail = as.numeric(gsub("qcfail,([0-9]+)", "\\1", line)) } else if (grepl("duplicate", line)) { rg[[thisrg]]$duplicate = as.numeric(gsub("duplicate,([0-9]+)", "\\1", line)) } else if (grepl("supplementary", line)) { rg[[thisrg]]$supp = as.numeric(gsub("supplementary,([0-9]+)", "\\1", line)) } else if (grepl("mapq", line)) { df.mapq <- rbind(df.mapq, as.numeric(strsplit(gsub("mapq,([0-9]+)", "\\1", line), ",")[[1]])) } else if (grepl("nm", line)) { df.nm <- rbind(df.nm, as.numeric(strsplit(gsub("nm,([0-9]+)", "\\1", line), ",")[[1]])) } else if (grepl("isize", line)) { df.isize <- rbind(df.isize, as.numeric(strsplit(gsub("isize,([0-9]+)", "\\1", line), ",")[[1]])) } else if (grepl("as", line)) { df.as <- rbind(df.as, as.numeric(strsplit(gsub("as,([0-9]+)", "\\1", line), ",")[[1]])) } else if (grepl("xp", line)) { df.xp <- rbind(df.xp, as.numeric(strsplit(gsub("xp,([0-9]+)", "\\1", line), ",")[[1]])) } else if (grepl("clip", line)) { df.clip <- rbind(df.clip, as.numeric(strsplit(gsub("clip,([0-9]+)", "\\1", line), ",")[[1]])) } else if (grepl("len", line)) { df.len <- rbind(df.len, as.numeric(strsplit(gsub("len,([0-9]+)", "\\1", line), ",")[[1]])) } else if (grepl("phred", line)) { df.phred <- rbind(df.phred, as.numeric(strsplit(gsub("phred,([0-9]+)", "\\1", line), ",")[[1]])) } else { stop(paste("Failed to read file at line:", line)) } } close(con) colnames(df.mapq) <- seq(from=0,to=60) colnames(df.nm) <- seq(from=0,to=ncol(df.nm)-1) colnames(df.isize) <- seq(from=0,to=ncol(df.isize)-1) colnames(df.xp) <- seq(from=0, to=ncol(df.xp)-1) colnames(df.as) <- seq(from=0, to=ncol(df.as)-1) colnames(df.len) <- seq(from=0, to=ncol(df.len)-1) colnames(df.phred) <- seq(from=0, to=ncol(df.phred)-1) colnames(df.clip) <- seq(from=0, to=ncol(df.clip)-1) readg <- sapply(rg, function(x) x$readgroup) df.mapq$readgroup <- readg df.nm$readgroup <- readg df.isize$readgroup <- readg df.xp$readgroup <- readg df.as$readgroup <- readg df.phred$readgroup <- readg df.len$readgroup <- readg df.clip$readgroup <- readg g.mapq <- ggplot(df.mapq.m <- melt(df.mapq, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(30,61)) + ylab('Reads') + xlab('Mapping Quality') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) g.nm <- ggplot(df.nm.m <- melt(df.nm, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(0,50)) + ylab('Reads') + xlab('NM Tag') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) g.isize <- ggplot(df.isize.m <- melt(df.isize, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(10,2001)) + ylab('Reads') + xlab('InsertSize') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) g.xp <- ggplot(df.xp.m <- melt(df.xp, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(0,100)) + ylab('Reads') + xlab('XP Tag') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) g.as <- ggplot(df.as.m <- melt(df.as, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(0,100)) + ylab('Reads') + xlab('AS Tag') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) g.len <- ggplot(df.len.m <- melt(df.len, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(20,102)) + ylab('Reads') + xlab('Read Length') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) g.clip <- ggplot(df.clip.m <- melt(df.clip, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(0,85)) + ylab('Reads') + xlab('Clipped bases') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) g.phred <- ggplot(df.phred.m <- melt(df.phred, id='readgroup'), aes(x=as.numeric(variable), y=pmax(log(value,10),0), group=readgroup, color=readgroup)) + geom_line() + theme_bw() + scale_x_continuous(limits=c(0,43)) + ylab('Reads') + xlab('Mean read Phred quality') + scale_y_continuous(breaks=seq(0,8), labels=parse(text=paste('10', seq(0,8), sep='^'))) + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) df.isize.m$variable <- as.numeric(as.character(df.isize.m$variable)) df.disco <- df.isize.m[df.isize.m$variable > 0 & df.isize.m$variable < 800, ] g.isize <- ggplot(df.disco, aes(x=variable, y=value, color=readgroup)) + geom_line() + theme_bw() + ylab('Reads') + xlab('Insert Size') + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9)) ## get percentages # disc, proper df.disc.pie <- data.frame(rbind(rowSums(df.isize[, (800+1):(2000+1)]), rowSums(df.isize[, 1:800])), class=c("\"Discordant\" (I > 800)", "\"Proper\"(I < 800)")) colnames(df.disc.pie) <- c(as.character(levels(readg)), "Class") df.disc.pie.m <- melt(df.disc.pie, id='Class') g.disc.pie <- ggplot(df.disc.pie.m, aes(x=factor(1), y=value, fill=Class)) + geom_bar(stat='identity', position="fill") + facet_wrap( ~ variable) + coord_polar(theta="y") + xlab("") + ylab("") + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9), legend.position="bottom") df.clip.pie <- data.frame(rbind(rowSums(df.clip[, 6:102]), rowSums(df.clip[, 1:5])), class=c("\"Clipped\" (clip >= 5)", "\"Matched\"(clip < 5)")) colnames(df.clip.pie) <- c(as.character(levels(readg)), "Class") df.clip.pie.m <- melt(df.clip.pie, id='Class') g.clip.pie <- ggplot(df.clip.pie.m, aes(x=factor(1), y=value, fill=Class)) + geom_bar(stat='identity', position="fill") + facet_wrap( ~ variable) + coord_polar(theta="y") + xlab("") + ylab("") + theme(legend.text = element_text(size=6), legend.title = element_text(size=6), text = element_text(size=9), legend.position="bottom") pdf(opt$output, width=22, height=12) print(grid.arrange(g.mapq, g.nm, g.isize, g.len, g.clip, g.phred, g.disc.pie, g.clip.pie, ncol=3)) dev.off() ================================================ FILE: R/archive_non_functional/svaba-benchmark.R ================================================ #!/use/bin/env/ Rscript require(ggplot2) require(data.table) .libPaths = c("/xchip/gistic/Jeremiah/R", "/broad/software/free/Linux/redhat_6_x86_64/pkgs/r_3.1.1-bioconductor-3.0/lib64/R/library") library(optparse) AVAIL_MODES <- c("realign-test") option_list = list( make_option(c("-i", "--input"), type = "character", default = NULL, help = "Input SV VCF file"), make_option(c("-o", "--output"), type = "character", default = "no_id", help = "Output annotation name"), make_option(c("-m", "--mode"), type = "character", default = "realign-test", help = "Benchmarking mode to analyze") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) if (!opt$mode %in% AVAIL_MODES) stop(paste("Mode", opt$mode, "must be one of", paste(AVAIL_MODES, collapse=", "))) .format_flag_df <- function(dfh2) { dfh2 <- data.table(dfh[dfh$del_size == "0" & dfh$snv_rate == "0" & dfh$ins_size != "0", ]) dfh2$index = seq(nrow(dfh2)) dfh2[, total := sum(c(wrong_align, too_align, no_align, correct)), by=index] dfh2 = data.frame(dfh2) dfh2[, c("no_align", "wrong_align", "too_align","correct")] = sweep(dfh2[, c('no_align', 'wrong_align', 'too_align', 'correct')], 1, dfh2$total, "/") dfh2 <- melt(dfh2, id.vars=c("width","ins_size", "del_size", "snv_rate", "total", "index")) return (dfh2) } if (opt$mode == "realign-test") { ff <- fread(opt$input, header=TRUE) df <- data.frame(); dfh <- data.frame(); for (j in unique(ff$width)) { for (k in unique(ff$snv_rate)) { for (d in unique(ff$del_size)) { for (ii in unique(ff$ins_size)) { #ii = ifelse(d == 0, 0, ii) ## if del is zero, then make ins zero too, since just want to evaluate zeros #d = ifelse(ii == 0, 0, d) ## if ins is zero, then make del zero too, since we just want to evaulate zeros if (ii == 0 || d == 0) { ix <- ff$width == j & ff$snv_rate == k & ff$ins_size == d & ff$del_size == ii if (sum(ix)) { cf <- ecdf(ff$num_align[ix]) s <- seq(0,max(ff$num_align)) df <- rbind(df, data.frame(num_align=s, cdf=cf(s), width=as.character(j), snv_rate=as.character(k), del_size = as.character(d), ins_size=as.character(ii), one.x = 0, one.y = cf(1))) dfh <- rbind(dfh, data.frame(no_align=sum(ix & ff$num_align == 0), wrong_align=sum(ix & ff$correct_hit_num == -1 & ff$num_align == 1), too_align=sum(ix & ff$num_align > 1), correct=sum(ix & ff$correct_hit_num == 0), width=as.character(j), del_size = as.character(d), ins_size = as.character(ii), snv_rate = as.character(k))) } } } } } } ## SNV ONLY df2 <- df[df$ins_size == "0" & df$del_size == "0", ] g <- ggplot(data=df2) + geom_line(aes(x=num_align, y=cdf, color=width)) + geom_point(aes(x=one.x, y=one.y, color=width)) + theme_bw() + xlab("Number of alignments") + ylab("CDF") + facet_wrap(~ snv_rate, nrow=1) + scale_y_continuous(limits=c(min(df2$one.y)-0.1,1), breaks=seq(0,1,by=0.05)) + labs(color="Sequence Length") pdf("~/public_html/realign_test_snv_cigcheck.pdf", width=7, height=2) print(g) dev.off() ## DEL ONLY df2 <- df[df$ins_size == "0" & df$snv_rate == "0", ] g <- ggplot(data=df2) + geom_line(aes(x=num_align, y=cdf, color=width)) + geom_point(aes(x=one.x, y=one.y, color=width)) + theme_bw() + xlab("Number of alignments") + ylab("CDF") + facet_wrap(~ del_size, nrow=1) + scale_y_continuous(limits=c(min(df2$one.y)-0.1,1), breaks=seq(0,1,by=0.2)) + labs(color="Sequence Length") pdf("~/public_html/realign_test_del_cigcheck.pdf", width=7, height=2) print(g) dev.off() ## INS ONLY df2 <- df[df$del_size == "0" & df$snv_rate == "0" & df$ins_size != "0", ] g <- ggplot(data=df2) + geom_line(aes(x=num_align, y=cdf, color=width)) + geom_point(aes(x=one.x, y=one.y, color=width)) + theme_bw() + xlab("Number of alignments") + ylab("CDF") + facet_wrap(~ ins_size, nrow=1) + scale_y_continuous(limits=c(min(df2$one.y)-0.1,1), breaks=seq(0,1,by=0.2)) + labs(color="Sequence Length") pdf("~/public_html/realign_test_ins_cigcheck.pdf", width=7, height=2); print(g); dev.off() dfh2 <- .format_flag_df(df2) g2 <- ggplot(data=dfh2,aes(x=factor(width),y=value,fill=factor(variable))) + geom_bar(position="stack", stat='identity') + facet_wrap(~ ins_size, nrow=1) + scale_fill_manual(values=c("no_align"="black", "wrong_align"="red", "too_align"="purple","correct"="dark green"), labels=c("Unmapped", "Incorrect alignment", "> 1 alignment", "Accurate"), name="Alignment") + scale_y_continuous(breaks=seq(0,1,by=0.25), labels=c("0", "25", "50", "75", "100"), name="Percentage") + xlab("Sequence Length") pdf("~/public_html/realign_ins_flag.pdf", width=7, height=2); print(g2); dev.off() #g <- ggplot(data=ff) + geom_histogram(aes(x=num_aligns)) + scale_y_log10(limits=c(1, 10)) + theme_bw() pdf("~/public_html/realign_test.pdf", width=7, height=7) print(g) dev.off() } if (FALSE) { snow <- ra_breaks("/xchip/gistic/Jeremiah/Projects/SnowmanPaper/Benchmark/snow2/chr1.broad-snowman.DATECODE.somatic.sv.vcf") simd <- fread("/xchip/gistic/Jeremiah/Projects/SnowmanPaper/Benchmark/connections.tsv") gr.sim <- with(simd, GRanges(c(V1,V1)+1, IRanges(c(V2,V4), width=1), strand=ifelse(c(V3, V5)=='+', '+', '-'), id=rep(seq(nrow(simd)),each=2))) grl.sim <- split(gr.sim, gr.sim$id) ra.overlaps(snow, grl.sim, pad=10, ignore.strand=TRUE) ## read it dt <- fread("/xchip/gistic/Jeremiah/Projects/SnowmanPaper/150805benchmark.csv") dt [, mean_cc := mean(contig_coverage), by=c('kmer_corr', 'coverage', 'error_rate')] dt [, se_cc := sd(contig_coverage), by=c('kmer_corr', 'coverage', 'error_rate')] setkey(dt, kmer_corr, coverage, error_rate) dt <- unique(dt) dt <- readRDS("/xchip/gistic/Jeremiah/tracks/100map.dt.rds") ## relabel names en <- c("0"="Error Rate: 0", "0.001"="Error Rate: 1e-3", "0.005"="Error Rate 5e-3", "0.01"="Error Rate: 0.01", "0.03"="Error Rate: 0.03", "0.05"="Error Rate: 0.05", "0.1"="Error Rate: 0.1") .labeller <- function(variable,value){ return(en[value]) } ## plot it df = data.frame(dt) df$error_rate = as.character(df$error_rate) df$kmer_corr = factor(df$kmer_corr, levels=c(0,1)) g <- ggplot(df) + geom_line(aes(x=coverage, y=mean_cc, color=kmer_corr), size=1) + geom_errorbar(aes(x=coverage,ymin=mean_cc-se_cc, ymax=mean_cc+se_cc, color=kmer_corr), width=1) + theme_bw() + xlab("Coverage") + ylab("Percent Re-assembled") + scale_x_continuous(breaks=seq(0,40,by=5)) + facet_grid(error_rate ~ ., labeller=.labeller) + coord_cartesian(ylim=c(0,1.3)) + scale_y_continuous(breaks=seq(0,1,by=0.25)) pdf("~/public_html/plot.pdf", width=6, height=12); print(g); dev.off() } ================================================ FILE: R/archive_non_functional/svaba-bps-to-maflite.R ================================================ #!/usr/bin/env Rscript library(optparse) suppressMessages(suppressWarnings(require(VariantAnnotation, quietly=TRUE))) option_list = list( make_option(c("-i", "--input"), type = "character", default = NULL, help = "Input bps.txt.gz file"), make_option(c("-o", "--output"), type = "character", default = "graph.pdf", help = "Output MAFLITE") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) v <- readVcf(opt$input, "hg19") inf <- info(v) gr <- rowData(v) ## remove non indel lines gr <- gr[inf$EVDNC=="INDEL",] inf <- inf[inf$EVDNC=="INDEL",] ## remove unnecesry columns #tab <- data.frame(chr=as.character(seqnames(gr)), startr=start(gr), endr=end(gr), ref=gr$REF, alt=gr$ALT) tab <- data.frame(chr=as.character(seqnames(gr)), startr=start(gr), end=end(gr), ref=as.character(gr$REF), alt=as.character(gr$ALT), stringsAsFactors=FALSE) del = sapply(tab$ref, nchar) > sapply(tab$alt, nchar) ins = sapply(tab$ref, nchar) < sapply(tab$alt, nchar) tab$alt[ins] <- inf$INSERTION[ins] tab$ref[del] <- sapply(tab$ref[del], function(x) substr(x, 2, nchar(x))) tab$alt[del] = "-" tab$ref[ins] = "-" tab <- cbind(tab, inf[, c("SCTG", "SPAN", "MAPQ", "TSPLIT", "NSPLIT")]) writeLines(tab, opt$output) ================================================ FILE: R/archive_non_functional/svaba-circos.R ================================================ #!/usr/bin/env Rscript ## set the right library paths .libPaths = c("/xchip/gistic/Jeremiah/R", "/broad/software/free/Linux/redhat_6_x86_64/pkgs/r_3.1.1-bioconductor-3.0/lib64/R/library") require(data.table) ra_breaks <- function(rafile, keep.features = T, seqlengths = hg_seqlengths(), chr.convert = T, snowman = FALSE, breakpointer = FALSE, seqlevels = NULL, get.loose = FALSE ## if TRUE will return a list with fields $junctions and $loose.ends ) { if (is.character(rafile)) { if (grepl('(vcf$)|(vcf.gz$)', rafile)) { library(VariantAnnotation) vcf = readVcf(rafile, Seqinfo(seqnames = names(seqlengths), seqlengths = seqlengths)) if (!('SVTYPE' %in% names(info(vcf)))) { warning('Vcf not in proper format. Is this a rearrangement vcf?') return(GRangesList()); } vgr = rowData(vcf) ## parse BND format ## no events if (length(vgr) == 0) return (GRangesList()) ## fix mateids if not included if (!"MATEID"%in%colnames(mcols(vgr))) { nm <- vgr$MATEID <- names(vgr) ix <- grepl("1$",nm) vgr$MATEID[ix] = gsub("(.*?)(1)$", "\\12", nm[ix]) vgr$MATEID[!ix] = gsub("(.*?)(2)$", "\\11", nm[!ix]) vgr$SVTYPE="BND" } if (!any(c("MATEID", "SVTYPE") %in% colnames(mcols(vgr)))) stop("MATEID or SVTYPE not included. Required") vgr$mateid = info(vcf)$MATEID vgr$svtype = info(vcf)$SVTYPE if (!is.null(info(vcf)$SCTG)) vgr$SCTG = info(vcf)$SCTG if (sum(vgr$svtype == 'BND')==0) stop('Vcf not in proper format. Will only process rearrangements in BND format') if (!all(vgr$svtype == 'BND')) warning(sprintf('%s rows of vcf do not have svtype BND, ignoring these'), sum(vgr$svtype != 'BND')) bix = which(vgr$svtype == "BND") vgr = vgr[bix] vgr$first = !grepl('^(\\]|\\[)', vgr$ALT) ## ? is this row the "first breakend" in the ALT string (i.e. does the ALT string not begin with a bracket) vgr$right = grepl('\\[', vgr$ALT) ## ? are the (sharp ends) of the brackets facing right or left vgr$coord = as.character(paste(seqnames(vgr), ':', start(vgr), sep = '')) vgr$mcoord = as.character(gsub('.*(\\[|\\])(.*\\:.*)(\\[|\\]).*', '\\2', vgr$ALT)) vgr$mcoord = gsub('chr', '', vgr$mcoord) if (all(is.na(vgr$mateid))) if (!is.null(names(vgr)) & !any(duplicated(names(vgr)))) { warning('MATEID tag missing, guessing BND partner by parsing names of vgr') vgr$mateid = paste(gsub('::\\d$', '', names(vgr)), (sapply(strsplit(names(vgr), '\\:\\:'), function(x) as.numeric(x[length(x)])))%%2 + 1, sep = '::') } else if (!is.null(vgr$SCTG)) { warning('MATEID tag missing, guessing BND partner from coordinates and SCTG') require(igraph) ucoord = unique(c(vgr$coord, vgr$mcoord)) vgr$mateid = paste(vgr$SCTG, vgr$mcoord, sep = '_') if (any(duplicated(vgr$mateid))) { warning('DOUBLE WARNING! inferred mateids not unique, check VCF') bix = bix[!duplicated(vgr$mateid)] vgr = vgr[!duplicated(vgr$mateid)] } } else stop('MATEID tag missing') vgr$mix = as.numeric(match(vgr$mateid, names(vgr))) pix = which(!is.na(vgr$mix)) vgr.pair = vgr[pix] if (length(vgr.pair)==0) stop('No mates found despite nonzero number of BND rows in VCF') vgr.pair$mix = match(vgr.pair$mix, pix) vix = which(1:length(vgr.pair)0, '+', '-') if (is.numeric(rafile$str2)) rafile$str2 = ifelse(rafile$str2>0, '+', '-') rafile$rowid = 1:nrow(rafile) bad.ix = is.na(rafile$chr1) | is.na(rafile$chr2) | is.na(rafile$pos1) | is.na(rafile$pos2) | is.na(rafile$str1) | is.na(rafile$str2) | rafile$str1 == '*'| rafile$str2 == '*' | rafile$pos1<0 | rafile$pos2<0 rafile = rafile[which(!bad.ix), ] if (nrow(rafile)==0) return(GRanges()) seg = rbind(data.frame(chr = rafile$chr1, pos1 = rafile$pos1, pos2 = rafile$pos1, strand = rafile$str1, ra.index = rafile$rowid, ra.which = 1, stringsAsFactors = F), data.frame(chr = rafile$chr2, pos1 = rafile$pos2, pos2 = rafile$pos2, strand = rafile$str2, ra.index = rafile$rowid, ra.which = 2, stringsAsFactors = F)) if (chr.convert) seg$chr = gsub('25', 'M', gsub('24', 'Y', gsub('23', 'X', seg$chr))) out = seg2gr(seg, seqlengths = seqlengths)[, c('ra.index', 'ra.which')]; out = split(out, out$ra.index) } else if (!is.null(rafile$start1) & !is.null(rafile$start2) & !is.null(rafile$end1) & !is.null(rafile$end2)) { ra1 = gr.flip(GRanges(rafile$chr1, IRanges(rafile$start1, rafile$end1), strand = rafile$str1)) ra2 = gr.flip(GRanges(rafile$chr2, IRanges(rafile$start2, rafile$end2), strand = rafile$str2)) out = grl.pivot(GRangesList(ra1, ra2)) } if (keep.features) values(out) = rafile[, ] return(out) } grl.pivot <- function(x) { if (length(x) == 0) return(GRangesList(GRanges(seqlengths = seqlengths(x)), GRanges(seqlengths = seqlengths(x)))) return(split(unlist(x), rep(1:length(x[[1]]), length(x)))) } read_hg <- function(hg19 = T, fft = F) { if (fft) return(readRDS(REFGENE.FILE.HG19.FFT)) else { require(BSgenome) if (hg19) library(BSgenome.Hsapiens.UCSC.hg19) else library(BSgenome.Hsapiens.UCSC.hg18) } return(Hsapiens) } hg_seqlengths <- function(hg19 = T, chr = F, include.junk = F) { require(BSgenome) hg = read_hg(hg19) sl = seqlengths(hg) if (!include.junk) sl = sl[c(paste('chr', 1:22, sep = ''), 'chrX', 'chrY', 'chrM')] if (!chr) names(sl) = gsub('chr', '', names(sl)) return(sl) } grl.unlist <- function(grl) { if (length(grl) == 0) ## JEREMIAH return(GRanges()) # return(grl) names(grl) = NULL as.df = as.data.frame(grl) el = as.df$element if (is.null(el)) el = as.df$group out = unlist(grl) out$grl.ix = el tmp = rle(el) out$grl.iix = unlist(sapply(tmp$lengths, function(x) 1:x)) values(out) = cbind(values(grl)[out$grl.ix, , drop = FALSE], values(out)) return(out) } grdt <- function(x) { require(data.table) ## new approach just directly instantiating data table cmd = 'data.table('; if (is(x, 'GRanges')) { was.gr = TRUE f = c('seqnames', 'start', 'end', 'strand', 'width') f2 = c('as.character(seqnames', 'c(start', 'c(end', 'as.character(strand', 'as.numeric(width') cmd = paste(cmd, paste(f, '=', f2, '(x))', sep = '', collapse = ','), sep = '') value.f = names(values(x)) } else { was.gr = FALSE value.f = names(x) } if (length(value.f)>0) { if (was.gr) cmd = paste(cmd, ',', sep = '') class.f = sapply(value.f, function(f) eval(parse(text=sprintf("class(x$'%s')", f)))) .StringSetListAsList = function(x) ### why do I need to do this, bioconductor peeps?? { tmp1 = as.character(unlist(x)) tmp2 = rep(1:length(x), elementLengths(x)) return(split(tmp1, tmp2)) } ## take care of annoying S4 / DataFrame / data.frame (wish-they-were-non-)issues as.statement = ifelse(grepl('Integer', class.f), 'as.integer', ifelse(grepl('Character', class.f), 'as.character', ifelse(grepl('StringSetList', class.f), '.StringSetListAsList', ifelse(grepl('StringSet$', class.f), 'as.character', ifelse(grepl('List', class.f), 'as.list', ifelse(grepl('List', class.f), 'as.list', 'c')))))) cmd = paste(cmd, paste(value.f, '=', as.statement, "(x$'", value.f, "')", sep = '', collapse = ','), sep = '') } cmd = paste(cmd, ')', sep = '') return(eval(parse(text =cmd))) } gr.findoverlaps <- function(query, subject, ignore.strand = T, first = F, qcol = NULL, ## any query meta data columns to add to result scol = NULL, ## any subject meta data columns to add to resultx max.chunk = 1e13, foverlaps = ifelse(is.na(as.logical(Sys.getenv('GRFO_FOVERLAPS'))), TRUE, as.logical(Sys.getenv('GRFO_FOVERLAPS'))) & exists('foverlaps'), pintersect = NA, verbose = F, type = 'any', by = NULL, mc.cores = 1, return.type = 'same', ...) { if (type != 'any') { foverlaps = FALSE pintersect = FALSE } if (nchar(foverlaps)==0) foverlaps = TRUE if (is.na(foverlaps)) foverlaps = TRUE isdt <- any(class(query) == 'data.table' ) if (return.type == 'same') return.type <- ifelse(isdt, 'data.table', 'GRanges') if (!((inherits(subject, 'GRanges') | inherits(subject, 'data.table')) & (inherits(query, 'GRanges') | inherits(query, 'data.table')))) stop('both subject and query have to be GRanges or data.table') if (is.na(pintersect)) if (isdt) pintersect <- length(unique(query$seqnames)) > 50 & length(unique(subject$seqnames)) > 50 else pintersect <- seqlevels(query) > 50 && seqlevels(subject) > 50 if (is.na(pintersect)) pintersect <- FALSE if (!is.null(qcol)) if (!all(qcol %in% names(values(query)))) stop('Some qcol are not present in meta data of query') if (!is.null(scol)) if (!all(scol %in% names(values(subject)))) stop('Some scol are not present in meta data of subject') if (!is.null(by)) if (!(by %in% names(values(query)) & by %in% names(values(subject)))) stop('"by" field must be meta data column of both query and subject') if ((as.numeric(length(query)) * as.numeric(length(subject))) > max.chunk) { if (verbose) cat('Overflow .. computing overlaps in chunks. Adjust max.chunk parameter to gr.findoverlaps to avoid chunked computation\n') chunk.size = floor(sqrt(max.chunk)); ix1 = c(seq(1, length(query), chunk.size), length(query)+1) ix2 = c(seq(1, length(subject), chunk.size), length(subject)+1) ij = cbind(rep(1:(length(ix1)-1), length(ix2)-1), rep(1:(length(ix2)-1), each = length(ix1)-1)) if (verbose) print(paste('Number of chunks:', nrow(ij))) out = do.call('c', mclapply(1:nrow(ij), function(x) { if (verbose) cat(sprintf('chunk i = %s-%s (%s), j = %s-%s (%s)\n', ix1[ij[x,1]], ix1[ij[x,1]+1]-1, length(query), ix2[ij[x,2]], (ix2[ij[x,2]+1]-1), length(subject))) i.chunk = ix1[ij[x,1]]:(ix1[ij[x,1]+1]-1) j.chunk = ix2[ij[x,2]]:(ix2[ij[x,2]+1]-1) out = gr.findoverlaps(query[i.chunk], subject[j.chunk], ignore.strand = ignore.strand, first = first, pintersect=pintersect, by = by, qcol = qcol, verbose = verbose, foverlaps = foverlaps, scol = scol, type = type, ...) out$query.id = i.chunk[out$query.id] out$subject.id = j.chunk[out$subject.id] return(out) }, mc.cores=mc.cores)) convert = FALSE if ((return.type == 'same' & is(query, 'data.table')) | return.type == 'data.table') out = grdt(out) return(out) } if (foverlaps) { if (verbose) print('overlaps by data.table::foverlaps') if (ignore.strand) by = c(by, 'seqnames', 'start', 'end') else by = c(by, 'seqnames', 'strand', 'start', 'end') if (!is.data.table(query)) { names(query) = NULL querydt = grdt(query[, setdiff(by, c('seqnames', 'start', 'end', 'strand'))]) } else { if (!all(by %in% names(query))) stop(paste('the following columns are missing from query:', paste(by, collapse = ','))) querydt = query[, by, with = FALSE] } if (!is.data.table(subject)) { names(subject) = NULL subjectdt = grdt(subject[, setdiff(by, c('seqnames', 'start', 'end', 'strand'))]) } else { if (!all(by %in% names(subject))) stop(paste('the following columns are missing from subejct:', paste(by, collapse = ','))) subjectdt = subject[, by, with = FALSE] } ix1 = querydt$query.id = 1:nrow(querydt) ix2 = subjectdt$subject.id = 1:nrow(subjectdt) querydt = querydt[start<=end, ] subjectdt = subjectdt[start<=end, ] querydt = querydt[, c('query.id', by), with = F] subjectdt = subjectdt[, c('subject.id', by), with = F] setkeyv(querydt, by) setkeyv(subjectdt, by) h.df = foverlaps(querydt, subjectdt, by.x = by, by.y = by, mult = 'all', type = 'any', verbose = verbose) h.df = h.df[!is.na(subject.id) & !is.na(query.id), ] h.df[, start := pmax(start, i.start)] h.df[, end := pmin(end, i.end)] if (verbose) cat(sprintf('Generated %s overlaps\n', nrow(h.df))) } else { if (isdt) { sn1 <- query$seqnames sn2 <- subject$seqnames } else { sn1 = as.character(seqnames(query)) sn2 = as.character(seqnames(subject)) } if (is.null(by)) { ix1 = which(sn1 %in% sn2) ix2 = which(sn2 %in% sn1) } else { by1 = values(query)[, by] by2 = values(subject)[, by] ix1 = which(sn1 %in% sn2 & by1 %in% by2) ix2 = which(sn2 %in% sn1 & by2 %in% by1) by1 = by1[ix1] by2 = by2[ix2] } query.ix = query[ix1] subject.ix = subject[ix2] sn1 = sn1[ix1] sn2 = sn2[ix2] if (pintersect) { if (verbose) print('overlaps by pintersect') require(data.table) if (length(sn1)>0 & length(sn2)>0) { if (is.null(by)) { dt1 <- data.table(i=seq_along(sn1), sn=sn1, key="sn") dt2 <- data.table(j=seq_along(sn2), sn=sn2, key="sn") ij <- merge(dt1, dt2, by = 'sn', allow.cartesian=TRUE) } else { dt1 <- data.table(i=seq_along(sn1), sn=sn1, by = by1, key=c("sn", "by")) dt2 <- data.table(j=seq_along(sn2), sn=sn2, by = by2, key=c("sn", "by")) ij <- merge(dt1, dt2, by = c('sn', 'by'), allow.cartesian=TRUE) } if (ignore.strand && isdt) subject$strand <- '*' else if (ignore.strand) strand(subject) = '*' qr <- query.ix[ij$i] sb <- subject.ix[ij$j] if (!isdt) { seqlengths(qr) <- rep(NA, length(seqlengths(qr))) seqlengths(sb) <- rep(NA, length(seqlengths(sb))) } if (!isdt && any(as.character(seqnames(qr)) != as.character(seqnames(sb)))) warning('gr.findoverlaps: violated pintersect assumption') ## changed to ranges(qr) etc rather than just GRanges call. Major problem if too many seqlevels if (isdt) { rqr <- IRanges(start=qr$start, end=qr$end) rsb <- IRanges(start=sb$start, end=sb$end) } else { rqr <- ranges(qr) rsb <- ranges(sb) } tmp <- pintersect(rqr, rsb, resolve.empty = 'start.x', ...) names(tmp) = NULL non.empty = which(width(tmp)!=0) h.df = as.data.frame(tmp[non.empty]) if (isdt) h.df$seqnames <- qr$seqnames[non.empty] else h.df$seqnames <- as.character(seqnames(qr))[non.empty] h.df$query.id = ij$i[non.empty] h.df$subject.id = ij$j[non.empty] } else h.df = data.frame() } else { if (verbose) print('overlaps by findOverlaps') if (isdt) { rqr <- IRanges(start=query.ix$start, end=query.ix$end) rsb <- IRanges(start=subject.ix$start, end=subject.ix$end) } else { rqr <- ranges(query.ix) rsb <- ranges(subject.ix) } h <- findOverlaps(rqr, rsb, type = type) r <- ranges(h, rqr, rsb) h.df <- data.frame(start = start(r), end = end(r), query.id = queryHits(h), subject.id = subjectHits(h), stringsAsFactors = F); # sn.query = as.character(seqnames(query))[h.df$query.id] # sn.subject = as.character(seqnames(subject))[h.df$subject.id] sn.query <- sn1[h.df$query.id] sn.subject <- sn2[h.df$subject.id] if (is.null(by)) keep.ix <- sn.query == sn.subject else { by.query <- by1[h.df$query.id] by.subject <- by2[h.df$subject.id] keep.ix <- sn.query == sn.subject & by.query == by.subject } h.df <- h.df[keep.ix, ] h.df$seqnames <- sn.query[keep.ix]; } if (!ignore.strand) { h.df$strand <- str.query <- as.character(strand(query)[ix1[h.df$query.id]]) str.subject <- as.character(strand(subject)[ix2[h.df$subject.id]]) h.df <- h.df[which(str.query == str.subject | str.query == '*' | str.subject == '*'),] } else if (nrow(h.df)>0) h.df$strand = '*' } if (first) h.df = h.df[!duplicated(h.df$query.id), ] if (return.type=='GRanges') if (nrow(h.df)>0) { if (('strand' %in% names(h.df))) out.gr = GRanges(h.df$seqnames, IRanges(h.df$start, h.df$end), query.id = ix1[h.df$query.id], subject.id = ix2[h.df$subject.id], strand = h.df$strand, seqlengths = seqlengths(query)) else out.gr = GRanges(h.df$seqnames, IRanges(h.df$start, h.df$end), query.id = ix1[h.df$query.id], subject.id = ix2[h.df$subject.id], seqlengths = seqlengths(query)) if (!is.null(qcol)) values(out.gr) = cbind(values(out.gr), values(query)[out.gr$query.id, qcol, drop = FALSE]) if (!is.null(scol)) values(out.gr) = cbind(values(out.gr), values(subject)[out.gr$subject.id, scol, drop = FALSE]) return(out.gr) } else return(GRanges(seqlengths = seqlengths(query))) else if (nrow(h.df)>0) { if (!is.data.table(h.df)) h.df = as.data.table(h.df) h.df$query.id <- ix1[h.df$query.id] h.df$subject.id <- ix2[h.df$subject.id] if (!is.null(qcol)) h.df = cbind(h.df, as.data.table(as.data.frame(values(query))[h.df$query.id, qcol, drop = FALSE])) if (!is.null(scol)) h.df = cbind(h.df, as.data.table(as.data.frame(values(subject))[h.df$subject.id, scol, drop = FALSE])) if ('i.start' %in% colnames(h.df)) h.df[, i.start := NULL] if ('i.end' %in% colnames(h.df)) h.df[, i.end := NULL] return(h.df) } else { return(data.table()) } } library(optparse) option_list = list( make_option(c("-i", "--input"), type = "character", default = NULL, help = "Input SV VCF file"), make_option(c("-o", "--output"), type = "character", default = "circos", help = "Output basename of pdf to write the graph"), make_option(c("-g", "--genes"), type = "logical", default = TRUE, help = "Add genes to the plot?"), make_option(c("-H", "--height"), type = "numeric", default = 10, help = "Height"), make_option(c("-W", "--width"), type = "numeric", default = 10, help = "Width") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) bks <- ra_breaks(opt$input) ## filter out discorant only bks <- bks[-which(mcols(bks)$EVDNC == "DSCRD")] require(RCircos) data(UCSC.HG19.Human.CytoBandIdeogram); chr.exclude <- NULL; cyto.info <- UCSC.HG19.Human.CytoBandIdeogram; tracks.inside <- 10; tracks.outside <- 0; RCircos.Set.Core.Components(cyto.info, chr.exclude, tracks.inside, tracks.outside); b <- grl.unlist(bks) ## get the gene label dat basedir <- '/xchip/gistic/Jeremiah/tracks' genes <- readRDS(file.path(basedir, 'gr.allgenes.rds')) genes <- genes[width(genes) < 2e6] fo <- gr.findoverlaps(b+10e3, genes) fo <- fo[!duplicated(fo$subject.id)] gene.dat = data.frame(Chromosome = seqnames(genes[fo$subject.id]), chromStart=start(genes[fo$subject.id]), chromEnd=end(genes[fo$subject.id]), Gene=genes$gene[fo$subject.id]) print(gene.dat) gename.col <- 4; side <- "in"; track.num <- 1; x1 = b$grl.iix==1 x2 = b$grl.iix==2 links = data.frame(Chromosome=seqnames(b[x1]), chromStart=start(b[x1]), chromEnd=end(b[x1]), Chromosome.1=seqnames(b[x2]), chromStart.1=start(b[x2]), chromeEnd.1=end(b[x2])) ## plot the PDF pdf(file=paste0(opt$output,".pdf"), height=opt$height, width=opt$width, compress=TRUE); RCircos.Set.Plot.Area(); RCircos.Chromosome.Ideogram.Plot(); if (opt$genes && nrow(gene.dat) > 0) { RCircos.Gene.Connector.Plot(gene.dat, track.num, side); track.num <- 2; name.col <- 4; RCircos.Gene.Name.Plot(gene.dat, name.col,track.num, side); } if (nrow(links) > 0) RCircos.Link.Plot(links, track.num, by.chromosome=TRUE) ## by.chromosome is for color dev.off() ================================================ FILE: R/archive_non_functional/svaba-create-pon.R ================================================ #!/usr/bin/env Rscript library(optparse) option_list = list( make_option(c("-i", "--input"), type = "character", default = "qcreport.txt", help = "Input file containing paths to germline "), make_option(c("-o", "--output"), type = "character", default = "qcreport.pdf", help = "Output panel of normals file") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) if (!file.exists(opt$input)) { print(print_help(parseobj)) stop(paste("Input file does not exist", opt$input, ". Must supply path to valid qcreport.txt file (generated from snowman preprocess or snowman run")) } print(opt) ## default opt$input = '/home/unix/jwala/lung_wgs_pon_list.txt' opt$output = "/home/unix/jwala/lung_wgs_pon.txt" ## opt$vcf_files = read.delim(opt$input, stringsAsFactors=FALSE)[,1] dt.all <- mclapply(opt$vcf_files, function(x) { print(x) if (!file.exists(x)) { warning("File does not exist") return (-1) } ab <- read_vcf(x) ab$file = x return(gr2dt(ab)) }, mc.cores=15) dt <- rbindlist(dt.all) ## need to add indel tye, also svss ================================================ FILE: R/archive_non_functional/svaba-event-plot.R ================================================ #!/usr/bin/env Rscript ## source all the required packages source.all <- function() { githome <- Sys.getenv('GIT_HOME') if (!nchar(githome)) githome <- '/xchip/gistic/Jeremiah/GIT' suppressMessages(suppressWarnings(require(ff, quietly=TRUE))) suppressMessages(suppressWarnings(require(VariantAnnotation, quietly=TRUE))) suppressMessages(suppressWarnings(require(rtracklayer, quietly=TRUE))) suppressMessages(suppressWarnings(require(data.table, quietly=TRUE))) suppressMessages(suppressWarnings(require(plyr, quietly=TRUE))) print('...sourced 5 packages') suppressMessages(suppressWarnings(require(ggplot2, quietly=TRUE))) suppressMessages(suppressWarnings(require(reshape2, quietly=TRUE))) suppressMessages(suppressWarnings(require(GenomicRanges, quietly=TRUE))) suppressMessages(suppressWarnings(require(popbio, quietly=TRUE))) suppressMessages(suppressWarnings(require(BSgenome.Hsapiens.UCSC.hg19, quietly=TRUE))) print('...sourced 10 packages') suppressMessages(suppressWarnings(require(bitops, quietly=TRUE))) suppressMessages(suppressWarnings(require(seqinr, quietly=TRUE))) suppressMessages(suppressWarnings(require(Rsamtools, quietly=TRUE))) suppressMessages(suppressWarnings(require(ff, quietly=TRUE))) suppressMessages(suppressWarnings(require(multicore, quietly=TRUE))) print('...sourced 15 packages') suppressMessages(suppressWarnings(require(Biostrings, quietly=TRUE))) suppressMessages(suppressWarnings(require(rtracklayer, quietly=TRUE))) suppressMessages(suppressWarnings(require(lattice, quietly=TRUE))) suppressMessages(suppressWarnings(require(RColorBrewer, quietly=TRUE))) suppressMessages(suppressWarnings(require(Matrix, quietly=TRUE))) print('...sourced 20 packages') source(file.path(githome, "grUtils", "grUtils.R")) source(file.path(githome, "trackData", "trackData.R")) source(file.path(githome, "marcin", "R", "functions.R")) source(file.path(githome, "marcin", "R", "db.R")) source(file.path(githome, "isva", "TaigaSig", "sigUtils.R")) print('...sourced grUtils.R, trackData.R, marcin/functions.R, marcin/db.R, sigUtils.R') } source.all() ################## ## PARSE OPTIONS ################## library(optparse) option_list = list( make_option(c("-f", "--FHworkspace"), type = "character", default = NULL, help = "Firehose workspace to retrieve data from"), make_option(c("-o", "--outdir"), type = "character", default = getwd(), help = "Firehose workspace to retrieve data from"), make_option(c("-p", "--FHpairset"), type = "character", default = NULL, help = "Firehose pairset to retreive data from"), make_option(c("-a", "--FHannotation"), type = "character", default = NULL, help = "Firehose annoation to retreive data from"), make_option(c("-c", "--cores"), type = "numeric", default = 1, help = "Number of cores to use"), make_option(c("-v", "--VCFlist"), type = "character", default = "/home/unix/jwala/test.vcflist.txt", help = "File containing a list of VCFs")) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) ### test data opt$outdir = '/xchip/gistic/Jeremiah/tmp_sig' dir.create(opt$outdir, showWarnings=FALSE) opt$VCFlist = '/xchip/gistic/Jeremiah/Projects/Significance/Sanger578/list.txt' setwd(opt$outdir) ################### ################### ================================================ FILE: R/archive_non_functional/svaba-histogram.R ================================================ #!/usr/bin/env Rscript ## set the right library paths .libPaths = c("/xchip/gistic/Jeremiah/R", "/broad/software/free/Linux/redhat_6_x86_64/pkgs/r_3.1.1-bioconductor-3.0/lib64/R/library") file.dir <- function(paths) { return(gsub('(^|(.*\\/))?([^\\/]*)$', '\\2', paths)) } require(data.table) suppressMessages(suppressWarnings(require(GenomicRanges, quietly = TRUE))) suppressMessages(suppressWarnings(require(gplots, quietly = TRUE))) ra_breaks <- function(rafile, keep.features = T, seqlengths = hg_seqlengths(), chr.convert = T, snowman = FALSE, breakpointer = FALSE, seqlevels = NULL, get.loose = FALSE ## if TRUE will return a list with fields $junctions and $loose.ends ) { if (is.character(rafile)) { if (grepl('(vcf$)|(vcf.gz$)', rafile)) { library(VariantAnnotation) vcf = readVcf(rafile, Seqinfo(seqnames = names(seqlengths), seqlengths = seqlengths)) if (!('SVTYPE' %in% names(info(vcf)))) { warning('Vcf not in proper format. Is this a rearrangement vcf?') return(GRangesList()); } vgr = rowData(vcf) ## parse BND format ## no events if (length(vgr) == 0) return (GRangesList()) ## fix mateids if not included if (!"MATEID"%in%colnames(mcols(vgr))) { nm <- vgr$MATEID <- names(vgr) ix <- grepl("1$",nm) vgr$MATEID[ix] = gsub("(.*?)(1)$", "\\12", nm[ix]) vgr$MATEID[!ix] = gsub("(.*?)(2)$", "\\11", nm[!ix]) vgr$SVTYPE="BND" } if (!any(c("MATEID", "SVTYPE") %in% colnames(mcols(vgr)))) stop("MATEID or SVTYPE not included. Required") vgr$mateid = info(vcf)$MATEID vgr$svtype = info(vcf)$SVTYPE if (!is.null(info(vcf)$SCTG)) vgr$SCTG = info(vcf)$SCTG if (sum(vgr$svtype == 'BND')==0) stop('Vcf not in proper format. Will only process rearrangements in BND format') if (!all(vgr$svtype == 'BND')) warning(sprintf('%s rows of vcf do not have svtype BND, ignoring these'), sum(vgr$svtype != 'BND')) bix = which(vgr$svtype == "BND") vgr = vgr[bix] vgr$first = !grepl('^(\\]|\\[)', vgr$ALT) ## ? is this row the "first breakend" in the ALT string (i.e. does the ALT string not begin with a bracket) vgr$right = grepl('\\[', vgr$ALT) ## ? are the (sharp ends) of the brackets facing right or left vgr$coord = as.character(paste(seqnames(vgr), ':', start(vgr), sep = '')) vgr$mcoord = as.character(gsub('.*(\\[|\\])(.*\\:.*)(\\[|\\]).*', '\\2', vgr$ALT)) vgr$mcoord = gsub('chr', '', vgr$mcoord) if (all(is.na(vgr$mateid))) if (!is.null(names(vgr)) & !any(duplicated(names(vgr)))) { warning('MATEID tag missing, guessing BND partner by parsing names of vgr') vgr$mateid = paste(gsub('::\\d$', '', names(vgr)), (sapply(strsplit(names(vgr), '\\:\\:'), function(x) as.numeric(x[length(x)])))%%2 + 1, sep = '::') } else if (!is.null(vgr$SCTG)) { warning('MATEID tag missing, guessing BND partner from coordinates and SCTG') require(igraph) ucoord = unique(c(vgr$coord, vgr$mcoord)) vgr$mateid = paste(vgr$SCTG, vgr$mcoord, sep = '_') if (any(duplicated(vgr$mateid))) { warning('DOUBLE WARNING! inferred mateids not unique, check VCF') bix = bix[!duplicated(vgr$mateid)] vgr = vgr[!duplicated(vgr$mateid)] } } else stop('MATEID tag missing') vgr$mix = as.numeric(match(vgr$mateid, names(vgr))) pix = which(!is.na(vgr$mix)) vgr.pair = vgr[pix] if (length(vgr.pair)==0) stop('No mates found despite nonzero number of BND rows in VCF') vgr.pair$mix = match(vgr.pair$mix, pix) vix = which(1:length(vgr.pair)0, '+', '-') if (is.numeric(rafile$str2)) rafile$str2 = ifelse(rafile$str2>0, '+', '-') rafile$rowid = 1:nrow(rafile) bad.ix = is.na(rafile$chr1) | is.na(rafile$chr2) | is.na(rafile$pos1) | is.na(rafile$pos2) | is.na(rafile$str1) | is.na(rafile$str2) | rafile$str1 == '*'| rafile$str2 == '*' | rafile$pos1<0 | rafile$pos2<0 rafile = rafile[which(!bad.ix), ] if (nrow(rafile)==0) return(GRanges()) seg = rbind(data.frame(chr = rafile$chr1, pos1 = rafile$pos1, pos2 = rafile$pos1, strand = rafile$str1, ra.index = rafile$rowid, ra.which = 1, stringsAsFactors = F), data.frame(chr = rafile$chr2, pos1 = rafile$pos2, pos2 = rafile$pos2, strand = rafile$str2, ra.index = rafile$rowid, ra.which = 2, stringsAsFactors = F)) if (chr.convert) seg$chr = gsub('25', 'M', gsub('24', 'Y', gsub('23', 'X', seg$chr))) out = seg2gr(seg, seqlengths = seqlengths)[, c('ra.index', 'ra.which')]; out = split(out, out$ra.index) } else if (!is.null(rafile$start1) & !is.null(rafile$start2) & !is.null(rafile$end1) & !is.null(rafile$end2)) { ra1 = gr.flip(GRanges(rafile$chr1, IRanges(rafile$start1, rafile$end1), strand = rafile$str1)) ra2 = gr.flip(GRanges(rafile$chr2, IRanges(rafile$start2, rafile$end2), strand = rafile$str2)) out = grl.pivot(GRangesList(ra1, ra2)) } if (keep.features) values(out) = rafile[, ] return(out) } grl.pivot <- function(x) { if (length(x) == 0) return(GRangesList(GRanges(seqlengths = seqlengths(x)), GRanges(seqlengths = seqlengths(x)))) return(split(unlist(x), rep(1:length(x[[1]]), length(x)))) } read_hg <- function(hg19 = T, fft = F) { if (fft) return(readRDS(REFGENE.FILE.HG19.FFT)) else { require(BSgenome) if (hg19) library(BSgenome.Hsapiens.UCSC.hg19) else library(BSgenome.Hsapiens.UCSC.hg18) } return(Hsapiens) } hg_seqlengths <- function(hg19 = T, chr = F, include.junk = F) { require(BSgenome) hg = read_hg(hg19) sl = seqlengths(hg) if (!include.junk) sl = sl[c(paste('chr', 1:22, sep = ''), 'chrX', 'chrY', 'chrM')] if (!chr) names(sl) = gsub('chr', '', names(sl)) return(sl) } grl.unlist <- function(grl) { if (length(grl) == 0) ## JEREMIAH return(GRanges()) # return(grl) names(grl) = NULL as.df = as.data.frame(grl) el = as.df$element if (is.null(el)) el = as.df$group out = unlist(grl) out$grl.ix = el tmp = rle(el) out$grl.iix = unlist(sapply(tmp$lengths, function(x) 1:x)) values(out) = cbind(values(grl)[out$grl.ix, , drop = FALSE], values(out)) return(out) } grdt <- function(x) { require(data.table) ## new approach just directly instantiating data table cmd = 'data.table('; if (is(x, 'GRanges')) { was.gr = TRUE f = c('seqnames', 'start', 'end', 'strand', 'width') f2 = c('as.character(seqnames', 'c(start', 'c(end', 'as.character(strand', 'as.numeric(width') cmd = paste(cmd, paste(f, '=', f2, '(x))', sep = '', collapse = ','), sep = '') value.f = names(values(x)) } else { was.gr = FALSE value.f = names(x) } if (length(value.f)>0) { if (was.gr) cmd = paste(cmd, ',', sep = '') class.f = sapply(value.f, function(f) eval(parse(text=sprintf("class(x$'%s')", f)))) .StringSetListAsList = function(x) ### why do I need to do this, bioconductor peeps?? { tmp1 = as.character(unlist(x)) tmp2 = rep(1:length(x), elementLengths(x)) return(split(tmp1, tmp2)) } ## take care of annoying S4 / DataFrame / data.frame (wish-they-were-non-)issues as.statement = ifelse(grepl('Integer', class.f), 'as.integer', ifelse(grepl('Character', class.f), 'as.character', ifelse(grepl('StringSetList', class.f), '.StringSetListAsList', ifelse(grepl('StringSet$', class.f), 'as.character', ifelse(grepl('List', class.f), 'as.list', ifelse(grepl('List', class.f), 'as.list', 'c')))))) cmd = paste(cmd, paste(value.f, '=', as.statement, "(x$'", value.f, "')", sep = '', collapse = ','), sep = '') } cmd = paste(cmd, ')', sep = '') return(eval(parse(text =cmd))) } gr.findoverlaps <- function(query, subject, ignore.strand = T, first = F, qcol = NULL, ## any query meta data columns to add to result scol = NULL, ## any subject meta data columns to add to resultx max.chunk = 1e13, foverlaps = ifelse(is.na(as.logical(Sys.getenv('GRFO_FOVERLAPS'))), TRUE, as.logical(Sys.getenv('GRFO_FOVERLAPS'))) & exists('foverlaps'), pintersect = NA, verbose = F, type = 'any', by = NULL, mc.cores = 1, return.type = 'same', ...) { if (type != 'any') { foverlaps = FALSE pintersect = FALSE } if (nchar(foverlaps)==0) foverlaps = TRUE if (is.na(foverlaps)) foverlaps = TRUE isdt <- any(class(query) == 'data.table' ) if (return.type == 'same') return.type <- ifelse(isdt, 'data.table', 'GRanges') if (!((inherits(subject, 'GRanges') | inherits(subject, 'data.table')) & (inherits(query, 'GRanges') | inherits(query, 'data.table')))) stop('both subject and query have to be GRanges or data.table') if (is.na(pintersect)) if (isdt) pintersect <- length(unique(query$seqnames)) > 50 & length(unique(subject$seqnames)) > 50 else pintersect <- seqlevels(query) > 50 && seqlevels(subject) > 50 if (is.na(pintersect)) pintersect <- FALSE if (!is.null(qcol)) if (!all(qcol %in% names(values(query)))) stop('Some qcol are not present in meta data of query') if (!is.null(scol)) if (!all(scol %in% names(values(subject)))) stop('Some scol are not present in meta data of subject') if (!is.null(by)) if (!(by %in% names(values(query)) & by %in% names(values(subject)))) stop('"by" field must be meta data column of both query and subject') if ((as.numeric(length(query)) * as.numeric(length(subject))) > max.chunk) { if (verbose) cat('Overflow .. computing overlaps in chunks. Adjust max.chunk parameter to gr.findoverlaps to avoid chunked computation\n') chunk.size = floor(sqrt(max.chunk)); ix1 = c(seq(1, length(query), chunk.size), length(query)+1) ix2 = c(seq(1, length(subject), chunk.size), length(subject)+1) ij = cbind(rep(1:(length(ix1)-1), length(ix2)-1), rep(1:(length(ix2)-1), each = length(ix1)-1)) if (verbose) print(paste('Number of chunks:', nrow(ij))) out = do.call('c', mclapply(1:nrow(ij), function(x) { if (verbose) cat(sprintf('chunk i = %s-%s (%s), j = %s-%s (%s)\n', ix1[ij[x,1]], ix1[ij[x,1]+1]-1, length(query), ix2[ij[x,2]], (ix2[ij[x,2]+1]-1), length(subject))) i.chunk = ix1[ij[x,1]]:(ix1[ij[x,1]+1]-1) j.chunk = ix2[ij[x,2]]:(ix2[ij[x,2]+1]-1) out = gr.findoverlaps(query[i.chunk], subject[j.chunk], ignore.strand = ignore.strand, first = first, pintersect=pintersect, by = by, qcol = qcol, verbose = verbose, foverlaps = foverlaps, scol = scol, type = type, ...) out$query.id = i.chunk[out$query.id] out$subject.id = j.chunk[out$subject.id] return(out) }, mc.cores=mc.cores)) convert = FALSE if ((return.type == 'same' & is(query, 'data.table')) | return.type == 'data.table') out = grdt(out) return(out) } if (foverlaps) { if (verbose) print('overlaps by data.table::foverlaps') if (ignore.strand) by = c(by, 'seqnames', 'start', 'end') else by = c(by, 'seqnames', 'strand', 'start', 'end') if (!is.data.table(query)) { names(query) = NULL querydt = grdt(query[, setdiff(by, c('seqnames', 'start', 'end', 'strand'))]) } else { if (!all(by %in% names(query))) stop(paste('the following columns are missing from query:', paste(by, collapse = ','))) querydt = query[, by, with = FALSE] } if (!is.data.table(subject)) { names(subject) = NULL subjectdt = grdt(subject[, setdiff(by, c('seqnames', 'start', 'end', 'strand'))]) } else { if (!all(by %in% names(subject))) stop(paste('the following columns are missing from subejct:', paste(by, collapse = ','))) subjectdt = subject[, by, with = FALSE] } ix1 = querydt$query.id = 1:nrow(querydt) ix2 = subjectdt$subject.id = 1:nrow(subjectdt) querydt = querydt[start<=end, ] subjectdt = subjectdt[start<=end, ] querydt = querydt[, c('query.id', by), with = F] subjectdt = subjectdt[, c('subject.id', by), with = F] setkeyv(querydt, by) setkeyv(subjectdt, by) h.df = foverlaps(querydt, subjectdt, by.x = by, by.y = by, mult = 'all', type = 'any', verbose = verbose) h.df = h.df[!is.na(subject.id) & !is.na(query.id), ] h.df[, start := pmax(start, i.start)] h.df[, end := pmin(end, i.end)] if (verbose) cat(sprintf('Generated %s overlaps\n', nrow(h.df))) } else { if (isdt) { sn1 <- query$seqnames sn2 <- subject$seqnames } else { sn1 = as.character(seqnames(query)) sn2 = as.character(seqnames(subject)) } if (is.null(by)) { ix1 = which(sn1 %in% sn2) ix2 = which(sn2 %in% sn1) } else { by1 = values(query)[, by] by2 = values(subject)[, by] ix1 = which(sn1 %in% sn2 & by1 %in% by2) ix2 = which(sn2 %in% sn1 & by2 %in% by1) by1 = by1[ix1] by2 = by2[ix2] } query.ix = query[ix1] subject.ix = subject[ix2] sn1 = sn1[ix1] sn2 = sn2[ix2] if (pintersect) { if (verbose) print('overlaps by pintersect') require(data.table) if (length(sn1)>0 & length(sn2)>0) { if (is.null(by)) { dt1 <- data.table(i=seq_along(sn1), sn=sn1, key="sn") dt2 <- data.table(j=seq_along(sn2), sn=sn2, key="sn") ij <- merge(dt1, dt2, by = 'sn', allow.cartesian=TRUE) } else { dt1 <- data.table(i=seq_along(sn1), sn=sn1, by = by1, key=c("sn", "by")) dt2 <- data.table(j=seq_along(sn2), sn=sn2, by = by2, key=c("sn", "by")) ij <- merge(dt1, dt2, by = c('sn', 'by'), allow.cartesian=TRUE) } if (ignore.strand && isdt) subject$strand <- '*' else if (ignore.strand) strand(subject) = '*' qr <- query.ix[ij$i] sb <- subject.ix[ij$j] if (!isdt) { seqlengths(qr) <- rep(NA, length(seqlengths(qr))) seqlengths(sb) <- rep(NA, length(seqlengths(sb))) } if (!isdt && any(as.character(seqnames(qr)) != as.character(seqnames(sb)))) warning('gr.findoverlaps: violated pintersect assumption') ## changed to ranges(qr) etc rather than just GRanges call. Major problem if too many seqlevels if (isdt) { rqr <- IRanges(start=qr$start, end=qr$end) rsb <- IRanges(start=sb$start, end=sb$end) } else { rqr <- ranges(qr) rsb <- ranges(sb) } tmp <- pintersect(rqr, rsb, resolve.empty = 'start.x', ...) names(tmp) = NULL non.empty = which(width(tmp)!=0) h.df = as.data.frame(tmp[non.empty]) if (isdt) h.df$seqnames <- qr$seqnames[non.empty] else h.df$seqnames <- as.character(seqnames(qr))[non.empty] h.df$query.id = ij$i[non.empty] h.df$subject.id = ij$j[non.empty] } else h.df = data.frame() } else { if (verbose) print('overlaps by findOverlaps') if (isdt) { rqr <- IRanges(start=query.ix$start, end=query.ix$end) rsb <- IRanges(start=subject.ix$start, end=subject.ix$end) } else { rqr <- ranges(query.ix) rsb <- ranges(subject.ix) } h <- findOverlaps(rqr, rsb, type = type) r <- ranges(h, rqr, rsb) h.df <- data.frame(start = start(r), end = end(r), query.id = queryHits(h), subject.id = subjectHits(h), stringsAsFactors = F); # sn.query = as.character(seqnames(query))[h.df$query.id] # sn.subject = as.character(seqnames(subject))[h.df$subject.id] sn.query <- sn1[h.df$query.id] sn.subject <- sn2[h.df$subject.id] if (is.null(by)) keep.ix <- sn.query == sn.subject else { by.query <- by1[h.df$query.id] by.subject <- by2[h.df$subject.id] keep.ix <- sn.query == sn.subject & by.query == by.subject } h.df <- h.df[keep.ix, ] h.df$seqnames <- sn.query[keep.ix]; } if (!ignore.strand) { h.df$strand <- str.query <- as.character(strand(query)[ix1[h.df$query.id]]) str.subject <- as.character(strand(subject)[ix2[h.df$subject.id]]) h.df <- h.df[which(str.query == str.subject | str.query == '*' | str.subject == '*'),] } else if (nrow(h.df)>0) h.df$strand = '*' } if (first) h.df = h.df[!duplicated(h.df$query.id), ] if (return.type=='GRanges') if (nrow(h.df)>0) { if (('strand' %in% names(h.df))) out.gr = GRanges(h.df$seqnames, IRanges(h.df$start, h.df$end), query.id = ix1[h.df$query.id], subject.id = ix2[h.df$subject.id], strand = h.df$strand, seqlengths = seqlengths(query)) else out.gr = GRanges(h.df$seqnames, IRanges(h.df$start, h.df$end), query.id = ix1[h.df$query.id], subject.id = ix2[h.df$subject.id], seqlengths = seqlengths(query)) if (!is.null(qcol)) values(out.gr) = cbind(values(out.gr), values(query)[out.gr$query.id, qcol, drop = FALSE]) if (!is.null(scol)) values(out.gr) = cbind(values(out.gr), values(subject)[out.gr$subject.id, scol, drop = FALSE]) return(out.gr) } else return(GRanges(seqlengths = seqlengths(query))) else if (nrow(h.df)>0) { if (!is.data.table(h.df)) h.df = as.data.table(h.df) h.df$query.id <- ix1[h.df$query.id] h.df$subject.id <- ix2[h.df$subject.id] if (!is.null(qcol)) h.df = cbind(h.df, as.data.table(as.data.frame(values(query))[h.df$query.id, qcol, drop = FALSE])) if (!is.null(scol)) h.df = cbind(h.df, as.data.table(as.data.frame(values(subject))[h.df$subject.id, scol, drop = FALSE])) if ('i.start' %in% colnames(h.df)) h.df[, i.start := NULL] if ('i.end' %in% colnames(h.df)) h.df[, i.end := NULL] return(h.df) } else { return(data.table()) } } write.htab <- function(tab, file = NULL, title = NULL, # text to be written in bold above the table footer = NULL, # text to be writen in bold below the table highlight = NULL, #vector of row indices of the table to highlight row.names = TRUE, # includes row labels col.names = TRUE, # includes col labels high.color = 'yellow', # highlight color to use row.colors = c('lightgray', 'white'), # alternating colors to shade data rows header.colors = c('#4A4A4A', 'white'), # two element vector specifying background and text colors for header row, respectively, data.size = 15, # font size in px for data, title, and footer title.size = 15, footer.size = 20, header.size = round(1.1*data.size)) { require(hwriter) require(gplots) if (!is.data.frame(tab)) tab = as.data.frame(tab) if (is.null(rownames(tab))) row.names = F; if (!is.null(file)) { #if (!grepl('(^~)|(^\\/)', file)) # file = paste('~/public_html/', file, sep = '') } else file = DEFAULT.HTAB.FILE for (nm in names(tab)) tab[[nm]] = as.character(tab[[nm]]) tab[is.na(tab)] = ''; tab = tab[1:nrow(tab), , drop = FALSE]; #not sure why this is necessary, but deflects occasional weird R bug if (any(lix <<- sapply(names(tab), function(x) is.list(tab[, x])))) for (i in which(lix)) tab[, i] = sapply(tab[, i], function(x) paste(x, collapse = ',')) dir.create(dirname(normalizePath(file.dir(file))), recursive=T, showWarnings = F) p = openPage(file, link.css = 'hwriter.css') if (!is.null(title)) hwrite(title, p, style = sprintf('font-weight:bold; font-size:%spx; margin-top;50px', title.size), center = TRUE, div = TRUE, br = TRUE); row.bgcolor = as.list(as.character(col2hex(row.colors)[(1:nrow(tab))%%length(row.colors)+1])); names(row.bgcolor) = rownames(tab) if (!is.null(highlight)) row.bgcolor[rownames(tab[highlight,, drop = FALSE])] = list(col2hex(high.color)); row.bgcolor = c(col2hex(header.colors[1]), row.bgcolor) # if (row.names) col.bgcolor = col2hex(header.colors[1]) col.style = sprintf('font-weight:bold; font-size:%spx; color:%s; text-align:center', header.size, col2hex(header.colors[2])); row.style = rep(sprintf('font-size:%spx; text-align:center', data.size), nrow(tab)) names(row.style) = rownames(tab) row.style = c(list(sprintf('font-weight:bold; font-size:%spx; color:%s; text-align:center', header.size, col2hex(header.colors[2]))), row.style) hwrite(tab, p, row.style = row.style, col.style = col.style, col.bgcolor = col.bgcolor, row.names = row.names, col.names = col.names, row.bgcolor = row.bgcolor, table.frame = 'void', table.style = 'margin-left: 30px; margin-top: 30px', br = TRUE) if (!is.null(footer)) hwrite(footer, p, style = sprintf('font-weight:bold; text-align:center; font-size:%spx; margin-top;50px', footer.size), center = TRUE, div = TRUE); closePage(p) } gr2dt <- function(gr, basic=FALSE) { if (any(class(gr)=='data.table')) return(gr) out <- with(gr, data.table(seqnames=as.character(seqnames(gr)), start=start(gr), end=end(gr), strand=as.character(strand(gr)))) if (!basic && ncol(mcols(gr))) out <- cbind(out, as.data.frame(mcols(gr))) return(out) } library(optparse) option_list = list( make_option(c("-i", "--input"), type = "character", default = NULL, help = "Input SV VCF file"), make_option(c("-o", "--output"), type = "character", default = "no_id", help = "Output annotation name"), make_option(c("-t", "--splitsupport"), type = "numeric", default = 4, help = "Minimum number of tumor supporting reads for ASSMB"), make_option(c("-d", "--discsupport"), type = "numeric", default = 10, help = "Minimum number of tumor support discordant for DSCRD"), make_option(c("-g", "--genes"), type = "logical", default = TRUE, help = "Add genes to the plot?"), make_option(c("-H", "--height"), type = "numeric", default = 10, help = "Height"), make_option(c("-W", "--width"), type = "numeric", default = 10, help = "Width") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) require(GenomicRanges) args <- commandArgs(trailingOnly = TRUE) files <- args #files <- c(ind$snowman_somatic_vcf,ind$snowman_somatic_indel_vcf)[!grepl("DATECODE",c(ind$snowman_somatic_vcf,ind$snowman_somatic_indel_vcf))] files <- c(ind$snowman_somatic_vcf,ind$snowman_somatic_indel_vcf) ## load the SV files snow.sv <- lapply(files, function(x) { if (grepl("sv.vcf$",x)) { print(paste(basename(x), ":", match(x, files),"of",length(files))) if (file.exists(x)) { y=ra_breaks(x) mcols(y)$file = basename(x) return(y) } else { return (GRangesList()) } } return(GRangesList()) }) snow.sv <- do.call('c', snow.sv) mcols(snow.sv)$analysis_id = gsub("(.*?).snowman.somatic.sv.vcf",'\\1',mcols(snow.sv)$file) ## load the indel files snow.indel <- lapply(files, function(x) { if (grepl("indel.vcf$",x)) { print(paste(basename(x), ":", match(x, files),"of",length(files))) if (file.exists(x)) { browser() y=rowData(readVcf(x, "hg19")) mcols(y)$file = basename(x) return(y) } else { print(paste("File does not exist:",x)) return (GRanges()) } } return (GRanges()) }) events <- do.call('grbind',c(lapply(snow.sv, function(x) {y=unlist(x); y$span = mcols(x)$SPAN; return (y) }), snow.indel[sapply(snow.indel, length) > 0])) events$span[is.na(events$span)] = 0 events$span <- pmax(width(events), events$span) spans <- c(unlist(lapply(snow.sv, function(x) mcols(x)$SPAN)), unlist(lapply(snow.indel, function(x) if (length(x))width(x)))) spans <- events$span df <- data.frame(x=log10(spans[spans > 5])) ppdf(print(ggplot() + geom_histogram(data=df, aes(x=x), binwidth=0.1) + theme_bw() + xlab("Distance (bp)") + ylab("Num Events") + scale_x_continuous(breaks=1:8, label=parse(text=paste("10", 1:8,sep="^")))), width=10, height=6) ================================================ FILE: R/archive_non_functional/svaba-nozzle.R ================================================ #!/usr/bin/env Rscript #### # load the libraries ### .nozzleLibraries <- function() { print('...loading libraries') RLIBDIR = '/xchip/gistic/Jeremiah/R/x86_64-unknown-linux-gnu-library/3.1/' GIT.HOME = '/xchip/gistic/Jeremiah/GIT/' ISVA.HOME = paste(Sys.getenv('GIT_HOME'), '/isva/', sep = ""); .libPaths(c(.libPaths(), RLIBDIR)) suppressMessages(suppressWarnings(require(methods, quietly=TRUE))) suppressMessages(suppressWarnings(require(optparse, quietly=TRUE))) suppressMessages(suppressWarnings(require(data.table, quietly=TRUE))) suppressMessages(suppressWarnings(require(Rsamtools, quietly=TRUE))) suppressMessages(suppressWarnings(require(Matrix, quietly=TRUE))) suppressMessages(suppressWarnings(require(bitops, quietly=TRUE))) suppressMessages(suppressWarnings(require(GenomicAlignments, quietly=TRUE))) #source(file.path(GIT.HOME,"isva", "sigUtils.R")) #source(file.path(GIT.HOME,"isva", "sigUtils.R")) source(file.path(GIT.HOME,"dev/gChain/", "gChain.R")) ##source(file.path(GIT.HOME,"grUtilts", "grUtils.R")) source(file.path(GIT.HOME,"dev/gTrack/gTrack/R/", "gTrack.R")) suppressMessages(suppressWarnings(require(Rsamtools, quietly=TRUE))) suppressMessages(suppressWarnings(require(RColorBrewer, quietly=TRUE))) suppressMessages(suppressWarnings(require(Nozzle.R1, quietly=TRUE))) suppressMessages(suppressWarnings(require(BSgenome.Hsapiens.UCSC.hg19, quietly=TRUE))) #source('/home/unix/jwala/GIT/isva/grUtils.R') #source('/home/unix/jwala/GIT/isva/trackData.R') } ### # get the base filename ### file.name = function(paths) return(gsub('(^|(.*\\/))?([^\\/]*)', '\\3', paths)) ### # load the breakpoint files ### .loadBreakpoints <- function(opt) { ## test #fp <- file.path("/xchip/gistic/Jeremiah/Projects/SnowmanWithIndel_140218","bps.txt.gz") #tab = read.table(gzfile(fp), header=T, sep='\t', stringsAsFactors=FALSE) #tab$reads = "" gr <- GRanges(c(tab$chr1, tab$chr2), IRanges(c(tab$pos1,tab$pos2), width=1)) #, strand=ifelse(c(tab$strand1, tab$strand2)=='+', 1,-1)) strand(gr) = c(tab$strand1, tab$strand2) grl <- split(gr, tab$contig) ## debug tabr = table(tab$contig) grl = grl[names(grl) %in% names(tabr[tabr==1])] mcols(grl) = tab[tab$contig %in% names(tabr[tabr==1]), ] return(list(som=grl, ger=GRangesList())) ## load the breakpoints #breakpoints.somatic.file = file.path(opt$indir, 'breakpoints', 'breakpoints.somatic.txt') #print(paste('Loading the breakpoints:', breakpoints.somatic.file)) #grl.sno <- sig.load.snow(breakpoints.somatic.file)[[1]] #breakpoints.germline.file = file.path(opt$indir, 'breakpoints', 'breakpoints.germline.txt') #print(paste('Loading the breakpoints:', breakpoints.germline.file)) #grl.sno.g <- sig.load.snow(breakpoints.germline.file)[[1]] #return(list(som=grl.sno, ger=grl.sno.g)) } ### # ### .initializeReport <- function(r) { intro.str = "Somatic Analysis -- SnowmanSV (Somatic/germline structural variation detction by string graph assembly, Wala et al in prep) is a tool for detecting germline and somatic structural variations (SVs) using whole genome sequencing (WGS) data. The engine of Snowman is a modified version of String Graph Assembler (SGA) [Simpson & Durbin, Genome Research 2012]. Snowman peforms a rolling tiled assembly across the genome in slightly overlapping 5kb windows. For efficiency, only reads which are clipped, unmapped or discordant are used in the assembly. These assembled contigs are then aligned to the genome with BWA-MEM [Heng Li, 2013], and are scored based on their alignment properties and the number of supporting sequencing reads. The final result is a list of junctions and their read support." if (opt$germline) intro.str = "Germline Analysis -- SnowmanSV (Somatic/germline structural variation detction by string graph assembly, Wala et al in prep) is a tool for detecting germline and somatic structural variations (SVs) using whole genome sequencing (WGS) data. The engine of Snowman is a modified version of String Graph Assembler (SGA) [Simpson & Durbin, Genome Research 2012]. Snowman peforms a rolling tiled assembly across the genome in slightly overlapping 5kb windows. For efficiency, only reads which are clipped, unmapped or discordant are used in the assembly. These assembled contigs are then aligned to the genome with BWA-MEM [Heng Li, 2013], and are scored based on their alignment properties and the number of supporting sequencing reads. The final result is a list of junctions and their read support." files.str = "Snowman produces a series of output files, which are useful for visualizing and understanding the junctions. Two core bam files are produced at the end of 'snowman run' -- r2c_clean.bam and all_bwa.bam. r2c_clean.bam is a BAM containing only reads with mappings to assembled contigs. Reads which do not assemble into contigs are discarded. Each read is in its originally aligned position, and is given a CN tag (contig) and AL tag (alignment-on-contig). all_bwa.bam is an alignment of all of the contigs to the human reference genome. r2c_final.bam and contigs_final.bam are trimmed versions of these which contain only high-confidence read-to-contig mappings, and only contigs which support either a germline or somatic event. In the 'breakpoints' folder, there are VCFs and txt files providing the breakpoints, both somatic and germline. The 'alignments' folder contains ASCII plots of the contigs and their read support. The 'plots' folder is for internal use (required to make nozzle output)." r <- setReportSubTitle(r, "Jeremiah Wala") r <- addToIntroduction(r, newParagraph(intro.str)) r <- addToIntroduction(r, newParagraph(files.str)) #r <- addToSummary(r, newParagraph(intro.str)) return (r) } ### # ### .overviewFigure <- function(grl.sno, opt, r) { print('...making the overview trackData figure') grsno = grl.sno$som suffix = 'somatic' if (opt$germline) { grsno = grl.sno$ger suffix = 'germline' } td <- trackData() td$xaxis.newline=FALSE td$xaxis.chronly=TRUE td$xaxis.nticks = 0 overview.fig = file.path(opt$outdir, paste('breakpoint_overview_', suffix, '.png', sep='')); png(overview.fig, width=6000, height=800) display(td, links=grsno, windows=gr.all()) suppressMessages(dev.off()) fig = newFigure(file.name(overview.fig), fileHighRes = file.name(overview.fig), exportId = "FIGURE_1", "Track view of entire JaBbA graph, with unincorporated rearrangements removed. Segments are assigned a copy number and plotted on the y axis. Reference edges are shown in very light gray. Red edges represent aberrant junctions and their weight corresponds to their inferred copy number. Loose ends are shown as dangling dotted blue edges. The bottom track shows genome-wide normalized coverage") r = addToResults(r, fig) return (r) } ### # ### .makeCircos <- function(grl.sno, opt, r) { if (!opt$germline) { ## add the somatic circos figure circos.fig <- file.path(opt$outdir, 'circos_somatic.png') circos.conf <- file.path(opt$outdir, 'circos_somatic.conf') circos.svg <- file.path(opt$outdir, 'circos_somatic.svg') gr2circos(opt$outdir, ra=grl.sno$som) system(paste('cd', opt$outdir, '; /home/unix/marcin/Software/circos/circos-0.62-1/bin/circos')) system(paste('mv', file.path(opt$outdir, 'circos.png'), circos.fig)) system(paste('mv', file.path(opt$outdir, 'circos.svg'), circos.svg)) system(paste('mv', file.path(opt$outdir, 'circos.conf'), circos.conf)) fig = newFigure(file.name(circos.fig), fileHigRes=file.name(circos.fig), exportId = "FIGURE_2", "Somatic events") r = addToResults(r, fig) } else { ## add the germline circos figure circos.conf <- file.path(opt$outdir, 'circos_germline.conf') circos.svg <- file.path(opt$outdir, 'circos_germline.svg') circos.fig <- file.path(opt$outdir, 'circos_germline.png') gr2circos(opt$outdir, ra=grl.sno$ger) system(paste('cd', opt$outdir, '; /home/unix/marcin/Software/circos/circos-0.62-1/bin/circos')) system(paste('mv', file.path(opt$outdir, 'circos.png'), circos.fig)) system(paste('mv', file.path(opt$outdir, 'circos.svg'), circos.svg)) system(paste('mv', file.path(opt$outdir, 'circos.conf'), circos.conf)) fig = newFigure(file.name(circos.fig), fileHigRes=file.name(circos.fig), exportId = "FIGURE_2", "Germline events") r = addToResults(r, fig) } return(r) } ### # ### .getContigs <- function(opt) { ## read in the contigs snow.contigs <- file.path(opt$indir, 'contigs.bam') if (!file.exists(snow.contigs)) snow.contigs <- file.path(opt$indir, 'all_bwa.bam') if (!file.exists(snow.contigs)) stop('Cannot find contigs bam file') print(paste('...importing contigs from:', snow.contigs)) gr.contigs <- import.snowman.contigs(snow.contigs, paste(snow.contigs, "bai", sep='.')) uniq = unique(mcols(grl.sno$som)$contig) if (opt$germline) uniq = unique(mcols(grl.sno$ger)$cname) gr.contigs <- gr.contigs[gr.contigs$qname %in% uniq] ## keep only contigs in somatic breaks suppressWarnings(gr.contigs <- gr.contigs[order(nchar(gr.contigs$seq), decreasing=TRUE)]) ## put longest seqs in front, to deal with potential hard clipping ix <- !is.na(gr.contigs$cigar) gr.contigs <- gr.contigs[ix] return(gr.contigs) } ### # ### .getReads <- function(opt) { ## read in the reads #snow.reads <- file.path(opt$indir, 'plots/readsForR_som.txt') #if (opt$germline) # snow.reads <- file.path(opt$indir, 'plots/readsForR_ger.txt') #if (!file.exists(snow.reads)) # stop(paste('Cannot find', snow.reads)) #print(paste('`...importing reads from:', snow.reads)) #gr.reads <- import.snowman.reads(snow.reads) bam = file.path(opt$indir, "r2c_clean.bam") bami = file.path(opt$indir, "r2c_clean.bam.bai") gr.reads = read.bam(bam, bami=bami, tag=c("AL", "SW", "CN", "SR", "TS"), pairs.grl=FALSE) #gr.reads$tn = substring(gr.reads$rname, 1,1) #gr.reads$rqname = gsub("[a-z]+[0-9]+_?(.*)", "\\1", gr.reads$rname) #gr.reads$rheader = gsub("[^_]+($)", "\\1", gr.reads$rname) #gr.reads$rqname = substring(gr.reads$rname, nchar(gr.reads$rheader)+1, nchar(gr.reads$rname)) #gr.reads$flag = as.numeric(gsub("[a-z]+([0-9]+)_?(.*)", "\\1", gr.reads$rheader)) gr.reads <- gr.reads[!is.na(gr.reads$AL) & !is.na(gr.reads$CN) & !is.na(gr.reads$SR)] al <- unlist(strsplit(gr.reads$AL, "x")) cn <- unlist(strsplit(gr.reads$CN, "x")) len <- sapply(strsplit(gr.reads$AL, "x"), length) seq <- rep(gr.reads$TS, len) seq[is.na(seq)] = gr.reads$seq[is.na(seq)] #ix = !is.na(as.integer(al)) ##debug grr <- GRanges(seqnames=cn, IRanges(as.integer(al), width=nchar(seq)), seq=seq) grr$cigar = paste(nchar(seq), "M", sep="") grr$rname = rep(gr.reads$qname, len) return(grr) } ### # ### .getTrackData <- function(cgc, r2g, gr.contigs.this, gr.reads.this) { ## subet them cgc_t <- gSubset(cgc, xnames=unique(gr.contigs.this$qname)) r2g_t <- gSubset(r2g, xnames=gr.reads.this$rname) if (length(links(r2g_t)$x) == 0 || length(links(cgc_t)$x) == 0) return (trackData()) umap <- gr.reads.this$rname[bitAnd(gr.reads.this$flag, 4) != 0] ix = !duplicated(gr.contigs.this$qname) cseq.set <- DNAStringSet(gr.contigs.this$seq[ix]) names(cseq.set) <- gr.contigs.this$qname[ix] ix <- !duplicated(gr.reads.this$rname) rseq.set <- DNAStringSet(gr.reads.this$seq[ix]) names(rseq.set) <- gr.reads.this$rname[ix] grl.contig.seq <- seq2grl(cseq.set) ## max because of hard clipping issue grs.contig <- lift(cgc_t, grl.contig.seq) td.c2g <- do.call('trackData', c(list(data=grs.contig, track.name='Contig', labels.suppress=TRUE))) grs.reads <- seq2grl(rseq.set, sn=names(rseq.set)) reads2genome <- lift(r2g_t, grs.reads, pintersect=TRUE) r2g.umap <- reads2genome[ names(reads2genome) %in% umap] r2g.map <- reads2genome[!names(reads2genome) %in% umap] td.r2g.u <- do.call('trackData', c(list(data=r2g.umap, track.name='UMap', labels.suppress=TRUE))) td.r2g.m <- do.call('trackData', c(list(data=r2g.map, track.name='Map', labels.suppress=TRUE))) td.r2g <- c(td.r2g.u, td.r2g.m) ## lift the contig onto the genome gr.cdum <- GRanges(names(cseq.set),IRanges(1,width(cseq.set)),strand='+') suppressWarnings(rr <- lift(cgc_t, gr.cdum)) rr$mapq <- values(cgc)$mapq[rr$link.id] rr$col[!is.na(rr$mapq)] <- alpha('darkred', rr$mapq[!is.na(rr$mapq)]/60) rr$col[ is.na(rr$mapq)] <- 'yellow' rr$border <- 'black' rr.split <- split(rr, rr$query.id) names(rr.split) = names(cseq.set) ## make contig mapq track data td.c <- do.call('trackData', c(list(data=rr.split, labels.suppress=TRUE, draw.paths=TRUE))) td.r2g$height = 10 td.c2g$height = 1 td.c$height = 1 tds <- c(td.r2g, td.c2g, td.c) tds$xaxis.nticks=2 tds$xaxis.newline=FALSE tds$xaxis.cex = 2.0 tds$xaxis.unit = 1; tds$xaxis.suffix = "" return(tds) } .getN50 <- function(opt, r) { ## load the contigs print('...reading contig fasta') contigs.file = file.path(opt$indir, 'all_contigs_bootstrap.fa') if (!file.exists(contigs.file)) { print(paste("Contigs file for estimating N50 does not exist:", contigs.file)) return (r) } awk.cmd = paste("awk 'NR % 2 == 0 {print length}'", contigs.file) ab <- as.numeric(read.table(pipe(awk.cmd),header=FALSE)$V1) n50 <- Biostrings::N50(ab) ymax = max(table(cut(log(ab,10),breaks=seq(0,4,by=0.01)))) lab = seq(from=2, to=3.5, by=0.1) p <- ggplot() + geom_histogram(data=data.frame(len=ab), aes(x=log(len,10)), binwidth=0.01, color='black', fill=NA) + geom_line(data=data.frame(x=rep(log(n50,10),2), y=c(0, ymax)), aes(x=x, y=y), color='red') + geom_text(data=data.frame(x=0.1 + log(n50,10), y=ymax), aes(x=x, y=y, label=paste("N50: ", n50, 'bp', sep='')), color='red') + theme_bw() + xlab('Contig length') + ylab('Count') + scale_x_continuous(breaks=lab, labels=parse(text=paste('10', lab, sep='^'))) png(file.path(opt$outdir, 'N50hist.png'), width=800, height=400) print(p) dev.off() fig = newFigure('N50hist.png', fileHigRes='N50hist.png', exporId="FIGURE_1000", paste("Distribution of lengths of assembled contigs. The N50 is", n50)) r = addToResults(r, fig) return (r) } .getTrackDataAlign <- function(cgc, r2g, gr.contigs.this, gr.reads.this) { cgc_t <- gSubset(cgc, xnames=unique(gr.contigs.this$qname)) r2g_t <- gSubset(r2g, xnames=gr.reads.this$rname) if (length(links(r2g_t)$x) == 0 || length(links(cgc_t)$x) == 0) return (trackData()) gr.reads.this$col <- 'gray' gr.reads.this$border <- 'black' ## isolate discordant read pairs tab <- table(gr.reads.this$rname) gr.reads.this$col[gr.reads.this$rname %in% names(tab[tab==2])] <- 'blue' ## isolate the unmapped reads gr.reads.this$border[bitAnd(gr.reads.this$flag, 4) != 0] <- 'red' ## make the new reads struct grr <- GRanges(gr.reads.this$rname, IRanges(1, nchar(gr.reads.this$seq))) grr$col <- gr.reads.this$col grr$border <- gr.reads.this$border grr$rname <- gr.reads.this$rname grl.grr <- split(grr, grr$rname) reads2genome <- lift(r2g_t, grl.grr) tdo <- trackData(reads2genome, labels.suppress=TRUE) return(tdo) } ##################################### ########### RUN NOZZLE ############## ##################################### ## load the libraries .nozzleLibraries() option_list = list( make_option(c("-i", "--indir"), type = "character", default = './', help = "Path to breakpoints file breakpoints.somatic.text in Snowman output directory, or root Snowman output directory"), make_option(c("-g", "--germline"), type = "character", default = 'false', help = "Set this flag to true to output germline snowman results instead of somatic. Default: false"), make_option(c("-m", "--maxpngs"), type = "integer", default = 1e8, help = "Maximum PNGS to produce per report subheading"), make_option(c("-c", "--cores"), type = "integer", default = 1, help = "Number of cores to use"), make_option(c("-o", "--outdir"), type = "character", default = './', help = "Directory to dump output into") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) ## make the output directory if (!grepl("nozzle", opt$outdir)) opt$outdir = file.path(opt$outdir, 'nozzle') dir.create(opt$outdir, showWarnings=FALSE) opt$germline = grepl("t|T", opt$germline) ## load the breakpoints grl.sno = .loadBreakpoints(opt) ##debug grl.sno$ger = grl.sno$som # Phase 1: create report elements r <- newReport( "SnowmanSV -- Structural variation detection by genome-wide local assembly" ) r <- .initializeReport(r) ## add the overview figure r <- .overviewFigure(grl.sno, opt, r) ## add the contig N50 figure #r <- .getN50(opt, r) ## make the circos figures r <- .makeCircos(grl.sno, opt, r) ## grab the contigs and reads gr.contigs <- .getContigs(opt) gr.reads <- .getReads(opt) gr.reads <- gr.reads[as.logical(seqnames(gr.reads) %in% gr.contigs$qname)] gr.contigs <- gr.contigs[gr.contigs$qname %in% unique(as.character(seqnames(gr.reads)))] ## make the trackData suppressWarnings(cgc <- cgChain(gr.contigs, sn=gr.contigs$qname)) suppressWarnings(pac <- cgChain(gr.reads, sn=gr.reads$rname)) suppressWarnings(r2g <- gMultiply(cgc, pac, pintersect=TRUE)) suppressWarnings(tdr <- track.refgene()) ## loop through and run nams <- unique(gr.contigs$qname) suffix = 'somatic' sn <- as.character(seqnames(gr.reads)) if (opt$germline) suffix = 'germline' grl_this = grl.sno$som if (opt$germline) grl_this = grl.sno$ger out <- mclapply(seq_along(nams), function(x) { print(paste("Working on contig: ", x, "of", length(nams))) outfile.png = file.path(opt$outdir, paste("contig_", x, '_', suffix, '.png', sep='')) outfile.pdf = file.path(opt$outdir, paste("contig_", x, '_', suffix, '.pdf', sep='')) gr.contigs.this <- gr.contigs[gr.contigs$qname == nams[x]] gr.reads.this <- gr.reads[sn == nams[x]] ## get the sequences track data tds <- suppressWarnings(.getTrackData(cgc, r2g, gr.contigs.this, gr.reads.this)) tds <- c(tds, tdr) ## get the alignment track data tda <- suppressWarnings(.getTrackDataAlign(cgc, r2g, gr.contigs.this, gr.reads.this)) ## set the window win <- streduce(gr.contigs.this) ## make the sequences plot png(outfile.png, width=1500, height=600) display(c(tda, tds), windows=win, links=grl_this, cex.ylabel=1) dev.off() pdf(outfile.pdf, width=15, height=10) display(c(tda, tds), windows=win, links=grl_this, cex.ylabel=1) dev.off() ## make the alignment plot mc <- mcols(grl_this) mc <- mc[mc$cname == nams[x],] ## add the figure to the plot expid = sprintf("BREAKPOINT_FIGURE_%s", x) break1 = paste(mc$chr1, ":", mc$pos1, "(", mc$strand1, "){MAPQ: ", mc$mapq1, "}", sep="") break2 = paste(mc$chr2, ":", mc$pos2, "(", mc$strand2, "){MAPQ: ", mc$mapq2, "}", sep="") lead = sprintf("Breakpoint plot of junction %s. From the top down: The red arrows at the top give the orientation of the junction, with the arrowhead pointing towards the joined DNA (away from the junction). The contig is then shown below, colored with respect to MAPQ, with white = MAPQ 0 and dark red = MAPQ 60. The contig sequence is also shown. The individual reads supporting this contig are displayed as mapped to the genome *through* their mapping to the contig. The reads were identified as potentially supporting this contig within 'snowman run', and were more thouroughly Smith-Waterman realigned in 'snowman gather'. Reads with > 6 bases on both sides of the junction are 'split' reads.", x) caption = paste(lead, "Breakpoint plot of junction", x, "[ Name:", mc$cname, "] -- [ Somatic breakpoint junction:", x, "] -- [ Tumor Split Reads:", mc$tsplit, "] -- [ Normal Split Reads:", mc$nsplit, "] -- [ Break1:", break1, "] -- [ Break2:", break2, "] -- [ Span:", mc$span, "] -- [ Homology:", mc$homology, "] -- [ Insertion:", mc$insertion, "] -- [ Num Times Break Found:", mc$num.dups+1, "] -- [ Number of Alignments:", mc$num.parts, "]") fig = newFigure(file.name(outfile.png), fileHigRes=file.name(outfile.png), exportId = expid, caption) return(fig); }, mc.cores=opt$cores) for (i in seq_along(out)) r = addToResults(r, out[[i]]) # Phase 3: render report to file print('...done with report sending to file') outpath <- file.path(opt$outdir, paste("snowman_report", suffix, sep='_')) writeReport(r, filename=outpath); # w/o extension ## test if (FALSE) { gr.reads$tn = substring(gr.reads$rname, 1,1) gr.reads$rqname = gsub("[a-z]+[0-9]+_?(.*)", "\\1", gr.reads$rname) gr.reads$rheader = gsub("[^_]+($)", "\\1", gr.reads$rname) gr.reads$rqname = substring(gr.reads$rname, nchar(gr.reads$rheader)+1, nchar(gr.reads$rname)) gr.reads$flag = as.numeric(gsub("[a-z]+([0-9]+)_?(.*)", "\\1", gr.reads$rheader)) gr.reads.per <- split(gr.reads, seqnames(gr.reads)) ## grab the discordant reads gr.test = gr.reads.per[[1]] tab = table(gr.test$rqname) gr.test.disc = gr.test[gr.test$rqname %in% names(tab[tab==2])] grl.test.disc = GRangesList() if (length(gr.test.disc)) grl.test.disc = split(gr.test.disc, gr.test.disc$rqname) } ================================================ FILE: R/archive_non_functional/svaba-sig.R ================================================ #!/usr/bin/env Rscript library(optparse) require(VariantAnnotation) option_list = list( make_option(c("-i", "--input"), type = "character", default = "qcreport.txt", help = "Input txt file from a snowman preprocess qcreport.txt"), make_option(c("-o", "--output"), type = "character", default = "qcreport.pdf", help = "Output pdf to generate"), make_option(c("-f", "--FHworkspace"), type = "character", default = NULL, help = "Firehose workspace to retrieve data from"), make_option(c("-p", "--FHpairset"), type = "character", default = NULL, help = "Firehose pairset to retreive data from"), make_option(c("-a", "--FHannotation"), type = "character", default = NULL, help = "Firehose annoation to retreive data from") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) fhsum = sum(c(!is.null(opt$FHworkspace), !is.null(opt$FHpairset), !is.null(opt$FHannotation))) GETFH = fhsum == 3 if (fhsum %in% c(1,2)) print(print_help(parseobj)) stop("If importing from FH, must specify fully the FHworkspace, FHpairset and FHannotation") } if (is.null(opt$input)) stop(print_help(parseobj)) if (!file.exists(opt$input)) { print(print_help(parseobj)) stop(paste("Input file does not exist", opt$input, ". Must supply path to valid qcreport.txt file (generated from snowman preprocess or snowman run")) } source('/home/unix/jwala/GIT/isva/Taiga/R/sourceall.R') ######################## ## some functions ######################## source.all <- function() { suppressMessages(suppressWarnings(require(ff, quietly=TRUE))) suppressMessages(suppressWarnings(require(VariantAnnotation, quietly=TRUE))) suppressMessages(suppressWarnings(require(rtracklayer, quietly=TRUE))) suppressMessages(suppressWarnings(require(data.table, quietly=TRUE))) suppressMessages(suppressWarnings(require(plyr, quietly=TRUE))) suppressMessages(suppressWarnings(require(ggplot2, quietly=TRUE))) suppressMessages(suppressWarnings(require(reshape2, quietly=TRUE))) suppressMessages(suppressWarnings(require(GenomicRanges, quietly=TRUE))) suppressMessages(suppressWarnings(require(popbio, quietly=TRUE))) suppressMessages(suppressWarnings(require(BSgenome.Hsapiens.UCSC.hg19, quietly=TRUE))) suppressMessages(suppressWarnings(require(bitops, quietly=TRUE))) suppressMessages(suppressWarnings(require(seqinr, quietly=TRUE))) suppressMessages(suppressWarnings(require(Rsamtools, quietly=TRUE))) suppressMessages(suppressWarnings(require(ff, quietly=TRUE))) suppressMessages(suppressWarnings(require(multicore, quietly=TRUE))) suppressMessages(suppressWarnings(require(Biostrings, quietly=TRUE))) suppressMessages(suppressWarnings(require(rtracklayer, quietly=TRUE))) suppressMessages(suppressWarnings(require(lattice, quietly=TRUE))) suppressMessages(suppressWarnings(require(RColorBrewer, quietly=TRUE))) suppressMessages(suppressWarnings(require(Matrix, quietly=TRUE))) } round.n <- function(x, n) n * round(x / n) lm_eqn = function(m){ eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, list(a = format(coef(m)[1], digits = 2), b = format(coef(m)[2], digits = 2), r2 = format(summary(m)$r.squared, digits = 3))) as.character(as.expression(eq)); } ## power.law.plot power.law.plot <- function(pspan, plotname) { print(paste('...making power-law plot for', plotname)) ex <- ecdf(pspan[pspan > 0]) #grid <- c(seq(0,10000,5), seq(10000,10^7,100)) df = data.frame(pspan = pspan, cdf = ex(pspan), pspan.log = log(pspan,10), cdf.log = log(ex(pspan), 10)) df <- df[df$cdf.log > -1000,] ## get rid of -Inf lm.s <- lm(df$cdf.log ~ df$pspan.log) lm.eq = lm_eqn(lm.s) yb = c(0.01,0.02,0.03,0.04,0.05,0.10,0.2, 0.3, 0.4,0.5,0.75,1) pdf(file.path(opt$outdir, plotname), width=5,height=5) print(g <- ggplot() + geom_point(data=df, aes(x=pspan.log, y=cdf.log), size=1, color="blue") + geom_smooth(data=df, aes(x=pspan.log, y=cdf.log), method="lm",se=F) + geom_text(aes(x=4.5,y=log(0.01,10), label=lm.eq), label=lm.eq, parse=T) + theme_bw() + ylab("CDF") + xlab("Span (bp)") + scale_y_continuous(breaks=log(yb,10), labels=format(yb,digits=2), limits=c(log(yb[1],10), 0)) + scale_x_continuous(breaks=seq(0,7), labels=parse(text=paste('10', seq(0,7), sep='^')))) dev.off() } ################################## ################ load from data ## ################################## if (GETFH) { ind <- fiss_get(opt$FHpairset, wkspace=opt$FHworkspace, type='pair') vcf <- ind[, opt$FHannotation] } else { } print('...loading VCF files') toload = file.exists(vcf) cols = sample(colors(), sum(toload)) ra <- lapply(vcf[toload], function(x) { ab = ra_breaks(x) mcols(ab)$individual = basename(x) mcols(ab)$border = mcols(ab)$col = cols[match(x, vcf)] return (ab) }) ## place in data table form ra.bound = do.call('grlbind', ra) ra.ul <- grl.unlist(ra.bound) ra.dt <- gr2dt(ra.ul) ## get the spans span = ra.dt[, abs(end[1]-end[2]) * (seqnames[1] == seqnames[2]), by=grl.ix]$V1 mcols(ra.bound)$span = span mcols(ra.bound)$span[mcols(ra.bound)$span == 0] = NA ## set the logical for methods s = mcols(ra.bound)$CALLER == "S" d = mcols(ra.bound)$CALLER == "D" ds = mcols(ra.bound)$CALLER == "DS" ############################ ## make the overlap pie chart ############################ cols = c(ovlp.hue, dran.hue, snow.hue) levs = c("Both", "dRanger", "SnowmanSV") df <- data.frame(Caller=c("SnowmanSV", "dRanger", "Both"), counts=c(sum(s, na.rm=T), sum(d, na.rm=T), sum(ds, na.rm=T)), stringsAsFactors=FALSE) g <- ggplot(df, aes(x=factor(1), y=counts, fill=Caller)) + geom_bar(stat='identity', position="fill") + coord_polar(theta="y") + xlab("") + ylab("") + scale_fill_manual(values=cols, breaks=levs) pdf(file.path(opt$outdir, "caller_overlap_pie.pdf")); print(g); dev.off() ############################ ## make the 1/L distribution ############################ power.law.plot(span, "power_law_DS.pdf") power.law.plot(span[which(s)], "power_law_S.pdf") power.law.plot(span[which(d)], "power_law_D.pdf") ############################################### ## check if anything overlaps with cancer genes ############################################### cgc.genes <- track.load('cgc') fo <- gr.findoverlaps(ra.ul, gr.pad(cgc.genes, 5e4)) tab <- table(fo$subject.id) gene.nums = as.numeric(names(tab)) names(tab) <- cgc.genes$gene[gene.nums] tab.lenscale = tab / width(cgc.genes[gene.nums]) ## generate PDFs for all of these td.rg.cgc = track.refgene(genes = cgc.genes$gene, height=3) ord = order(tab.lenscale, decreasing=T) dir.create(file.path(opt$outdir, "CGCgenes"), showWarnings=FALSE) dum <- sapply(seq_along(ord), function(x) { gene = names(tab.lenscale[ord[x]]) ## find the partners gene.window = gr.pad(cgc.genes[cgc.genes$gene == gene], 5e4) rar.hits = ra.bound[ceiling(gr.findoverlaps(ra.ul, gene.window)$query.id/2)] windows <- streduce(grbind(gr.pad(streduce(rar.hits), 5e4), gene.window)) nindiv = length(unique(mcols(rar.hits)$individual)) print(paste("plotting CGC gene", gene)) pdf(file.path(opt$outdir, "CGCgenes", paste("rank_",sprintf("%04d",x),"_",names(tab.lenscale[ord[x]]), "_NIndiv_", nindiv, ".pdf", sep=""))) #pdf(file.path(opt$outdir, "ROS1_special.pdf")) td.rg.cgc$xaxis.newline = T td.rg.cgc$xaxis.cex = 0.5 td.rg.cgc$xaxis.cex.label = 0.5 td.rg.cgc$xaxis.nticks = 2 display(td.rg.cgc, links=rar.hits, window=windows) dev.off() }) ############################## ## matrix plot ############################## grt = gr.tile(gr.all(), w=10e6) mat <- sig.tri.matrix(ra.bound, grt, log=TRUE) td.mat <- do.call('trackData', c(allopts, list(grt, mdata=mat, triangle=TRUE, cmap.min=min(mat), cmap.max=max(mat)+0.1, track.name='Triangle', height=25, sep.lwd=0.5, m.bg.col='white', track.name='Breakpoint-pair Heatmap', islog=TRUE, xaxis.nticks=0, xaxis.prefix="", xaxis.chronly=TRUE))) pdf(file.path(opt$outdir, "overview_matrix.pdf"), width=12, height=12) display(td.mat, windows=streduce(gr.all())) dev.off() ## per chrom grt = gr.tile(gr.all(), w=10e6) mat <- sig.tri.matrix(ra.bound, grt, log=TRUE) td.mat <- do.call('trackData', c(allopts, list(grt, mdata=mat, triangle=TRUE, cmap.min=min(mat)+0.1, cmap.max=max(mat)+0.1, track.name='Triangle', height=25, sep.lwd=0.5, m.bg.col='white', track.name='Breakpoint-pair Heatmap', islog=TRUE, xaxis.nticks=0, xaxis.prefix="", xaxis.chronly=TRUE))) dum <- lapply(seq(23), function(x) { print(paste("plotting for chr", x)) pdf(file.path(opt$outdir, paste("chr",x,"_matrix.pdf",sep="")), width=12, height=12) display(td.mat, windows=streduce(gr.all()[x])) dev.off() }) ################################################ ## Start the significance testing ## ################################################ ## load data for 1e6 binned mapping dload <- sig.load.bins('1e6') grt <- dload$grt mat.background = sig.2d.map.background(dt2gr(grt), nomap=FALSE) fo <- sig.bin.counts(ra.bound, dt2gr(grt)) ## place events into bins fo[, sample.counts := nrow(.SD), by='sample'] ## get total number of binned-events per sample setkey(fo, sample) ## sort by sample count M <- structure(as.numeric(fo$sample.counts[!duplicated(fo)]), names=fo$sample[!duplicated(fo)]) ## M is number mutations per sample M <- M[order(names(M))] exclude <- names(M[M < 1]) ## drop really weak samples M <- M[!names(M) %in% exclude] ra.bound <- ra.bound[!mcols(ra.bound)$individual %in% exclude] ## normalize background probablity matrix by total intra/inter chrom rate empirical.background.prob <- sig.generate.normalized.matrices(ra.bound, dload$mat, M, single.mat=TRUE) ## get the total vector of background F-scores system.time(f.back <- sig.2d.permute(empirical.background.prob, M, num.permute = 1000, method='1d')) f.back2 <- f.back[f.back > 0] ## plot the distribution of f scores f.back2 <- f.back[f.back > 0] pdf(file.path(opt$outdir, "fscore_distribution.pdf"), height=3.5, width=10) hist(f.back2, col='black', breaks=300, xlab='F-score', ylab='Count', main='F-score distribution under NULL') dev.off() ## get a trackData for the bin probabilities #all.bin.probs <- colSums(do.call('rbind', lapply(all.mats, colSums))) / length(all.mats) all.bin.probs <- colSums(empirical.background.prob) grt$binprobs <- all.bin.probs grt$col <- grt$border <- chr_colors[as.character(seqnames(dt2gr(grt)))] grt$binprobs <- -log(grt$binprobs, 10) td.binprob <- trackData(dt2gr(grt), y.field='binprobs', xaxis.newline=FALSE, xaxis.chronly=TRUE, track.name='-Log(Bin Background Probability)', y0=3.3, y1=3.9, circles=TRUE, lwd.border=0.5, xaxis.nticks = 0, xaxis.prefix="") pdf(file.path(opt$outdir, "td_bin_background_probabiltiies.pdf"), width=10) display(td.binprob, windows=gr.all()) dev.off() ## get the actual f-score f.real <- sig.fscore(grl, dt2gr(grt), empirical.background.prob) ## get the p and q values pq = sig.fscore2pval(f.back, f.real) grt$pval <- pq$pval grt$qval <- pq$qval ## make the qq-plot pdf(file.path(opt$outdir, "qqplot.pdf"), width=5, height=5) qq_pval(grt$pval) dev.off() grt$n.log10.q <- -log(grt$qval, 10) grt$col <- grt$border <- chr_colors[as.character(seqnames(dt2gr(grt)))] td.sig <- trackData(dt2gr(grt), y.field='n.log10.q', circles=TRUE, track.name='-log10(Q-value)', lwd.border=0.5, xaxis.chronly=T, y0=0, xaxis.prefix="", xaxis.nticks=0) ppdf(display(td.sig, windows=gr.all())) td.refgenes <- track.refgene() dir.create(file.path(opt$outdir, "topsighits"), showWarnings=FALSE) ### plot all the hits above -log10(q) = 1 which.hits <- which(grt$n.log10.q) > 1 dum <- lapply(seq_along(which.hits), function(x) { y = which.hits[x] window = dt2gr(grt)[y] genes <- unique(gr.genes$gene[gr.findoverlaps(gr.genes, window)$query.id]) genes.string <- paste(genes, collapse = " ") print(paste("Plotting top significance bin", x, "of", sum(grt$n.log10.q > 1), "which is region", grt$seqnames[y],":", grt$start[y], "-", grt$end[y], "which contains genes", genes.string)) rar.hits <- ra.bound[ceiling(gr.findoverlaps(ra.ul, window)$query.id/2)] disp.window <- streduce(grbind(gr.pad(streduce(rar.hits),5e4),window)) pdf(file.path(opt$outdir, "topsighits", paste("hit_", x, "q_",sprintf("%04f",grt$n.log10.q[y]),".pdf", sep=""))) td.rg.cgc$xaxis.newline = T td.rg.cgc$xaxis.cex = 0.5 td.rg.cgc$xaxis.cex.label = 0.5 td.rg.cgc$xaxis.nticks = 2 td.rg.cgc$cex.tick = 0.5 td.rg.cgc$track.name = "Cancer Genes" td.refgenes$track.name = "All Genes" display(c(td.rg.cgc, td.refgenes), links=rar.hits, window=disp.window) dev.off() hitnum = hitnum + 1 }) ================================================ FILE: R/archive_non_functional/svaba-vcf-to-maflite.R ================================================ #!/usr/bin/env Rscript suppressMessages(suppressWarnings(require(optparse, quietly=TRUE))) option_list = list( make_option(c("-i", "--input"), type = "character", default = NULL, help = "Input bps.txt.gz file"), make_option(c("-o", "--output"), type = "character", default = "vars.lite.maf", help = "Output MAFLITE") ) parseobj = OptionParser(option_list=option_list) opt = parse_args(parseobj) if (is.null(opt$input)) stop(print_help(parseobj)) print('...loading VariantAnnotation package') suppressMessages(suppressWarnings(require(VariantAnnotation, quietly=TRUE))) print('...reading VCF') v <- readVcf(opt$input, "hg19") inf <- info(v) gr <- rowData(v) ## remove non indel lines gr <- gr[inf$EVDNC=="INDEL",] inf <- inf[inf$EVDNC=="INDEL",] ## remove unnecesry columns #tab <- data.frame(chr=as.character(seqnames(gr)), startr=start(gr), endr=end(gr), ref=gr$REF, alt=gr$ALT) tab <- data.frame(chr=as.character(seqnames(gr)), startr=start(gr), end=end(gr), ref=as.character(gr$REF), alt=as.character(gr$ALT), stringsAsFactors=FALSE) del = sapply(tab$ref, nchar) > sapply(tab$alt, nchar) ins = sapply(tab$ref, nchar) < sapply(tab$alt, nchar) tab$alt[ins] <- inf$INSERTION[ins] tab$ref[del] <- sapply(tab$ref[del], function(x) substr(x, 2, nchar(x))) tab$alt[del] = "-" tab$ref[ins] = "-" tab <- cbind(tab, inf[, c("SCTG", "SPAN", "MAPQ", "TSPLIT", "NSPLIT")]) write.table(tab, file=opt$output, quote=FALSE, sep="\t", row.names=FALSE, col.names = FALSE) ## oncotate it if (grepl("oncotator", Sys.getenv("PATH"))) { cmd = paste("oncotator", opt$output, "vars.maf", "hg19") print("Oncotate this MAF lite with the following command:") print(cmd) } ================================================ FILE: README.md ================================================ ## *SvABA* — Structural variation and indel analysis by assembly SvABA (formerly *Snowman*) is an SV and indel caller for short-read BAMs. It performs genome-wide local assembly with a vendored SGA, realigns contigs with BWA-MEM, and scores variants by reassembled read support. Tumor/normal, trios, and single-sample modes are supported; variants are emitted as VCF plus a verbose tab-delimited companion (`bps.txt.gz`) that carries the full per-sample evidence. **License:** [GNU GPLv3](./LICENSE). Uses the [SeqLib][seqlib] API for BAM I/O, BWA-MEM alignment, interval trees, and the assembly front-end. ## Install CMake is required; htslib is an external dependency (no bundled copy). If htslib is installed system-wide, svaba auto-detects it via pkg-config or the default include/lib search paths: ```bash git clone --recursive https://github.com/walaj/svaba cd svaba && mkdir build && cd build cmake .. && make -j ``` For a non-standard htslib install location, point at it explicitly: ```bash cmake .. -DHTSLIB_DIR=/path/to/htslib-1.xx make -j ``` To link jemalloc at compile time (recommended on Linux for `-p 16+` runs — eliminates allocator contention, no `LD_PRELOAD` needed): ```bash cmake .. -DUSE_JEMALLOC=ON make -j ``` The binary lands at `build/svaba`. To install it system-wide (or into this repo's `bin/`), use CMake's install target — the default prefix is `/usr/local` and needs sudo, or override it with `-DCMAKE_INSTALL_PREFIX`: ```bash make install # /usr/local/bin/svaba cmake --install build --prefix $(pwd)/.. # repo-local bin/svaba ``` Build type defaults to `RelWithDebInfo` (`-O2 -g -DNDEBUG`). The vendored `SeqLib/bwa` and `SeqLib/fermi-lite` hardcode `-O2` in their Makefiles; see `CLAUDE.md` for how to push them to `-O3 -mcpu=native` (typically a 5–15% wall-time win). ### Assembler selection By default svaba assembles contigs with **fermi-lite** (ropebwt2-based, the faster path). The vendored SGA (String Graph Assembler) is still fully supported but off by default — switch it on at compile time by passing `-DSVABA_ASSEMBLER_FERMI=0` to CMake: ```bash cmake .. -DSVABA_ASSEMBLER_FERMI=0 make -j ``` The choice is a single compile-time symbol in `src/svaba/SvabaAssemblerConfig.h`; you can also flip it by editing that file directly and rebuilding. Runtime logs report the active assembler under `svaba::kAssemblerName`, so you can always confirm which engine a build was compiled with. ### jemalloc (Linux, high thread count) On Linux, running svaba with **jemalloc** as the allocator typically wins 10–20 % wall-time at `-p 16+` (large WGS, tumor/normal). svaba's per-thread assembly loop generates heavy malloc/free traffic and glibc's default allocator serializes on its arena locks under that contention pattern; jemalloc's thread-local arenas sidestep the problem. The repo ships a drop-in wrapper at `./svaba_jemalloc` that `LD_PRELOAD`s the system `libjemalloc.so.2` and then exec's svaba: ```bash # one-liner replacement for `svaba run ...`: ./svaba_jemalloc run -t tumor.bam -n normal.bam -G ref.fa -a my_run -p 16 \ --blacklist tracks/hg38.combined_blacklist.bed ``` Install jemalloc first (`apt install libjemalloc2`, `yum install jemalloc`, `dnf install jemalloc`). The wrapper auto-detects the library under the standard distro paths; if yours is elsewhere, set `JEMALLOC_LIB=/path/to/libjemalloc.so.2`. If the svaba binary isn't on your `$PATH`, set `SVABA=/path/to/svaba`. For very high concurrency (`-p 24+`), also pass jemalloc's own tuning knobs via `MALLOC_CONF`: ```bash MALLOC_CONF=background_thread:true,narenas:24,dirty_decay_ms:10000 \ ./svaba_jemalloc run -p 24 ... ``` `narenas` should match or modestly exceed the thread count; `background_thread:true` asks jemalloc to reclaim dirty pages on a background thread instead of in the hot path. **macOS users should not use jemalloc.** Apple's native libmalloc (with its nanomalloc fast path for small allocations) and the DYLD_INSERT_LIBRARIES mechanism combine to run 5–10× slower than system malloc on this exact workload in our A/B tests. The wrapper refuses to run on Darwin for that reason. Stick with the system allocator on macOS. ## Quick start Three steps. Run the caller, merge + dedup + index the per-thread outputs, then convert the deduped `bps.txt.gz` to VCF. The bundled combined blacklist is strongly recommended — it keeps svaba out of well-known pileup / high-complexity regions that would otherwise dominate wall-clock time with no real calls to show for it. See `tracks/README.md` for customizing or extending the blacklist. ```bash # 1. Call: tumor/normal on chr22 with 4 threads, bundled blacklist svaba run -t tumor.bam -n normal.bam -G ref.fa -a my_run -p 4 \ -k chr22 \ --blacklist tracks/hg38.combined_blacklist.bed # 2. Post-process: merge per-thread BAMs, sort+dedup+index, # sort+dedup bps.txt.gz, filter r2c to PASS. scripts/svaba_postprocess.sh -t 8 -m 4G my_run # 3. Convert the deduped bps.txt.gz to VCFv4.5 (SV + indel) svaba tovcf -i my_run.bps.sorted.dedup.txt.gz -b tumor.bam -a my_run ``` A single-sample call drops `-n`. Any number of cases/controls can be jointly assembled; prefix on the sample ID drives case/control routing (`t*` = case, `n*` = control). ## Subcommands SvABA is a multi-tool binary. `svaba help` lists everything. The main ones: `svaba run` performs the whole assembly + variant-calling pipeline. Takes a BAM (or many) plus a reference, a blacklist, and an output ID. Emits `bps.txt.gz`, per-sample VCFs, `contigs.bam`, `runtime.txt`, and (with `--dump-reads`) per-thread `*.discordant.bam`, `*.corrected.bam`, `*.weird.bam`, and `*.r2c.txt.gz`. `svaba postprocess` sorts, deduplicates, @PG-stamps, and indexes the per-thread BAMs and the `bps.txt.gz` emitted by `svaba run`. Typically invoked via `scripts/svaba_postprocess.sh` which also merges per-thread files and builds the PASS / PASS-somatic r2c subsets. `svaba tovcf` converts a deduplicated `bps.txt.gz` into VCFv4.5 output (one SV VCF, one indel VCF; somatic distinguished by the `SOMATIC` INFO flag). Clean intrachrom events emit as symbolic ``/``/ ``; everything else stays paired BND. Input is assumed already sorted/deduped by `svaba_postprocess.sh` — use `--dedup` to opt back into the legacy internal dedup. The `SOMATIC` flag is stamped when a record's somatic LOD (`INFO/SOMLOD`) meets or exceeds a configurable cutoff; the default is **1.0**, which is a reasonable "confident somatic" gate and keeps marginal calls out of the somatic set. Tune it with `--somlod`: ```bash svaba tovcf -i deduped.bps.txt.gz -b tumor.bam -a my_run # default somlod >= 1 svaba tovcf ... --somlod 2.0 # stricter: only strong somatic calls svaba tovcf ... --somlod 0.0 # permissive: flag anything with LO_s >= 0 ``` The raw score is always written to `INFO/SOMLOD` regardless of the cutoff, so downstream `bcftools view -i 'INFO/SOMLOD >= 3'` still works if you want to re-threshold after the fact without regenerating the VCF. `svaba refilter` re-runs the LOD cutoffs / PASS logic on an existing `bps.txt.gz` with new thresholds, regenerating VCFs without rerunning assembly. Use it when you want to tune sensitivity/specificity after the fact. ## Output files `${ID}.bps.txt.gz` is the primary output — one row per breakpoint, with a v3 schema of 52 core columns + per-sample blocks (see `BreakPoint::header` for column names). The 52nd column is a unique `bp_id` of the form `bpTTTNNNNNNNN` that joins back to the BAM aux tags and the VCF `EVENT=` field. `${ID}.contigs.bam` holds every assembled contig, `${ID}.runtime.txt` holds per-region timing, and `${ID}.log` carries the run log. The VCF files (`${ID}.sv.vcf.gz`, `${ID}.indel.vcf.gz`) declare `VCFv4.5`, use symbolic alleles where unambiguous, and carry the canonical scoring in INFO: `MAXLOD` (variant-vs-error, per-sample max), `SOMLOD` (somatic LLR), `SOMATIC` (flag), and `SVCLAIM` (evidence class). VCF `QUAL` defaults to `.` — filter on `FILTER=PASS` or the two LOD fields, not QUAL. See `CLAUDE.md` for the full scoring model. Opt-in outputs (gated behind `--dump-reads`): `${ID}.r2c.txt.gz` is a structured, re-plottable dump of every contig + its r2c-aligned reads; `${ID}.corrected.bam` / `${ID}.weird.bam` / `${ID}.discordant.bam` carry per-read evidence streams. These can run to tens of GB on deep samples, so they're off by default. ## Post-processing pipeline `svaba run` emits per-thread, unsorted BAMs and a raw per-thread `r2c.txt.gz`. Merge + sort + dedup + filter them with one command: ```bash scripts/svaba_postprocess.sh -t 8 -m 4G my_run ``` Five idempotent steps: merge per-thread BAMs and r2c files, run `svaba postprocess` (sort + stream-dedup + @PG-stamp + index), sort and dedup `bps.txt.gz` with PASS filter, emit PASS / PASS-somatic subsets of `r2c.txt.gz`, and (optional) demux the BAMs by source prefix. See `CLAUDE.md` for the full flag surface. ## Viewers All-HTML, no server, drop files in from `file://`. Entry point: `viewer/index.html`. The primary viewer is `bps_explorer.html` — sortable `bps.txt.gz` table with chip filters, per-sample detail panel, log10 histograms for somlod/maxlod/span, and click-to-IGV navigation. `r2c_explorer.html` re-plots the structured r2c TSV in browser (contig ruler, fragment rows, indel `||` marker rows with labels, per-read gap-expanded CIGAR, bp_id filter dropdown). `runtime_explorer.html` visualizes `runtime.txt`; `comparison.html` does side-by-side diffs of two runs. `viewer/alignments_viewer.html` still renders the legacy `alignments.txt.gz` ASCII output, but new runs don't produce that file — `r2c_explorer.html` is the replacement. ## Blacklists `tracks/hg38.combined_blacklist.bed` is the ready-made blacklist; feed it to `svaba run --blacklist`. It is a regeneratable union of component BED files in `tracks/` (ENCODE, high-runtime regions, manual curations, simple repeats, non-standard contigs, and a low-mappability blacklist derived from paired mosdepth runs). See `tracks/README.md` for the recipe. ## Debugging recipes ### Trace a specific read through the entire pipeline Compile with `-DSVABA_TRACE_READ` to get per-decision-point stderr output for a single read (by QNAME) from BAM ingestion through to output tagging. Zero runtime cost when not compiled in (all trace macros compile to no-ops). ```bash cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_CXX_FLAGS='-DSVABA_TRACE_READ="\"LH00306:129:227V5CLT4:6:1204:38807:7191\""' cmake --build build -j$(nproc) # Run on just the region containing the read (faster iteration) svaba run -t tumor.bam -n normal.bam -G ref.fa -p 4 \ -k chr2:215000000-216000000 --dump-reads -a trace_run 2> read_trace.log grep READ_TRACE read_trace.log ``` The trace covers every gate the read hits: | Stage | Log prefix | What it tells you | |-------|-----------|-------------------| | BAM read & filter | (various, from SvabaBamWalker) | Dup/QC/blacklist gates, rule_pass, NM salvage, adapter filter, quality trim, buffer admission | | BFC error correction | `BFC corrected:` | Whether BFC changed the sequence and by how much | | R2C alignment | `R2C SKIP:` / `R2C HIT:` | Perfect-ref-match skip, or which contigs the read aligned to (AS score, CIGAR) | | Native realignment | `NATIVE_REALIGN:` | Whether the corrected seq was re-aligned to ref or reused the BAM CIGAR | | Split coverage scoring | `SPLIT_COV enter` | Entry into per-BP scoring with r2c coords and breakpoint positions | | R2C vs native gate | `SPLIT_COV TP8` | The critical score comparison: r2c_score, native_score, both CIGARs, NM values | | Indel-at-break check | `SPLIT_COV TP9` | Whether an r2c CIGAR indel lands at the breakpoint | | Span check | `SPLIT_COV TP10` | Whether the read spans the breakpoint(s), with exact coord bounds | | DEL-covers-break | `SPLIT_COV TP11` | Whether an r2c deletion masks the breakpoint | | Final verdict | `SPLIT_COV CREDITED` / `NOT CREDITED` / `SKIPPED` | Did this read count as a variant supporter? | | Output tagging | `OUTPUT TAG bi:Z` | BP id stamped on the read, confidence, somatic status | Example trace (abridged) for a read supporting a somatic 1bp deletion: ``` [READ_TRACE:SvabaBamWalker.cpp:203] read=LH00306:129:... flag=163 mapq=60 pos=chr2:215869800 ... [READ_TRACE:SvabaBamWalker.cpp:236] PASS mr.isValid rule_pass=1 [READ_TRACE:SvabaBamWalker.cpp:340] ADDED to read buffer (n=847) [READ_TRACE:SvabaRegionProcessor.cpp:377] BFC corrected: changed=NO ... [READ_TRACE:SvabaRegionProcessor.cpp:808] R2C HIT: contig=c_fermi_chr2_... AS=150 rc=0 CIGAR=75M1D74M [READ_TRACE:SvabaRegionProcessor.cpp:978] NATIVE_REALIGN: reusing BAM CIGAR (seq unchanged by BFC) [READ_TRACE:BreakPoint.cpp:379] SPLIT_COV enter contig=c_fermi_chr2_... r2c_start=340 r2c_end=489 ... [READ_TRACE:BreakPoint.cpp:476] SPLIT_COV TP8 PASS r2c>native r2c_score=150 native_score=143 ... [READ_TRACE:BreakPoint.cpp:601] SPLIT_COV TP10 span check issplit1=1 issplit2=1 one_split=1 [READ_TRACE:BreakPoint.cpp:697] SPLIT_COV CREDITED as variant supporter sample=t000 tumor=1 [READ_TRACE:SvabaRegionProcessor.cpp:1346] OUTPUT TAG bi:Z bp_id=bp00100000042 confidence=PASS somatic=1 ``` ### Trace a specific contig ```bash cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_CXX_FLAGS='-DSVABA_TRACE_CONTIG="\"c_fermi_chr2_215869501_215894501_13C\""' cmake --build build -j$(nproc) ``` Shows assembly filtering (TP1–TP5), variant identification (TP6), per-read split-coverage scoring (TP8–TP11), breakpoint confidence (TP13–TP16, TP23). ### Trace both a read AND a contig simultaneously ```bash cmake -B build \ -DCMAKE_CXX_FLAGS='-DSVABA_TRACE_READ="\"LH00306:129:227V5CLT4:6:1204:38807:7191\"" \ -DSVABA_TRACE_CONTIG="\"c_fermi_chr2_215869501_215894501_13C\""' cmake --build build -j$(nproc) ``` Independent prefixes (`[READ_TRACE:...]` vs `[TRACE:...]`) — grep for either. ### Trace ALL reads or ALL contigs (very noisy) ```bash cmake ... -DCMAKE_CXX_FLAGS='-DSVABA_TRACE_ALL_READS=1' # every read cmake ... -DCMAKE_CXX_FLAGS='-DSVABA_TRACE_ALL=1' # every contig ``` Best combined with a small `-k` region. ### Finding a read's QNAME to trace ```bash # From bps.txt.gz — get contig name (col 30) and bp_id (col 52) zcat results.bps.txt.gz | awk -F'\t' '$1=="chr2" && $2 > 215869000 && $2 < 215870000' # From the corrected BAM — reads tagged with a specific bp_id samtools view results.corrected.bam chr2:215869000-215870000 | grep "bi:Z:.*bp00100000042" # From the r2c TSV — all reads for a contig zcat results.r2c.txt.gz | awk -F'\t' '$2 == "c_fermi_chr2_215869501_215894501_13C" && $1 == "read"' | cut -f8 ``` ### Restrict assembly to reads containing a specific kmer ```bash cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_CXX_FLAGS='-DSVABA_KMER_RESTRICT="\"CCATGCAGAGTGTTGAAGAAAAGGC\""' cmake --build build -j$(nproc) ``` After BFC error correction, only reads whose corrected sequence contains the specified kmer (or its reverse complement) survive. All other reads get `to_assemble = false` — they won't enter fermi assembly, r2c alignment, corrected.bam, or scoring. The log prints kept/dropped counts per region. Use case: you see a suspicious contig and want to know whether assembly still produces it when restricted to reads from a particular locus. Pick a 25-mer unique to that locus, compile with `SVABA_KMER_RESTRICT`, and run on the same region: ```bash svaba run -t tumor.bam -n normal.bam -G ref.fa -k chr11:5000000-5100000 \ -a kmer_test --dump-reads -p 1 ``` If the chimeric contig still assembles, the kmer-carrying reads are sufficient to produce it. If it disappears, reads from elsewhere were required. Can be combined with read/contig tracing: ```bash cmake -B build \ -DCMAKE_CXX_FLAGS='-DSVABA_KMER_RESTRICT="\"CCATGCAGAGTGTTGAAGAAAAGGC\"" \ -DSVABA_TRACE_CONTIG="\"c_fermi_chr11_5000001_5100001_3C\""' ``` ### Disable the r2c-vs-native gate (for debugging only) ```bash cmake ... -DCMAKE_CXX_FLAGS='-DSVABA_R2C_NATIVE_GATE=0' ``` Restores old behavior where any r2c-spanning read credits as variant supporter. Will reintroduce false-positive somatic calls from homology-trap reads. --- ## Alt-contig demotion BWA-MEM sometimes places a contig fragment on an alt contig (e.g. `chr11_JH159136v1_alt`) when chr11 proper has an equally good alignment. If the alt later gets blacklisted, the real breakpoint is lost. svaba now requests secondary alignments for contigs and runs a post-alignment step (`preferStandardChromosomes`): for each primary/supplementary fragment on a non-standard chromosome (ChrID > `maxMateChrID`, default 23), it looks for a secondary alignment on a standard chromosome that: - Covers ≥ 80% of the same query range (reciprocal overlap) - Has AS ≥ 95% of the non-standard alignment's AS If found, the standard-chr alignment is promoted (gets the primary/supplementary flag) and the non-standard one is demoted to secondary. The contig trace (`SVABA_TRACE_CONTIG`) logs each swap with both chromosome IDs and alignment scores. This is controlled by `--max-mate-chr` (same constant used for mate-region lookup). `--non-human` sets it to -1, which disables alt-demotion entirely (no chromosome is "non-standard"). --- ## Recipes Germline-only. Raise the mate-lookup threshold so only larger discordant clusters trigger a cross-region lookup — more conservative and usually appropriate for a single-sample germline run where we don't have a built-in control to guard against mapping artifacts (a tumor would typically see smaller, subclonal clusters we want to chase down). Add `--single-end` to disable mate lookups entirely if you want to be even more conservative: ```bash svaba run -t germline.bam -p 8 --mate-min 6 -a germline_run \ -G ref.fa \ --blacklist tracks/hg38.combined_blacklist.bed ``` Targeted assembly over a list of regions (BED, chr, or IGV-style string): ```bash svaba run -t sample.bam -k targets.bed -a exome_cap -G ref.fa svaba run -t sample.bam -k chr17:7,541,145-7,621,399 -a TP53 -G ref.fa ``` Dump all per-read evidence (large output, only for debugging a specific call): ```bash svaba run -t sample.bam -G ref.fa -a debug_run --dump-reads scripts/svaba_postprocess.sh -t 8 -m 4G debug_run ``` Non-human genome (e.g. mouse, zebrafish, _C. elegans_). By default svaba assumes a human reference: mate-region lookups skip chromosomes past chrY (ChrID > 23), and insert-size learning samples only the primary assembly (chr1–chrY). `--non-human` removes these gates so every contig in the reference is treated equally: ```bash svaba run -t mouse.bam -G mm39.fa -a mouse_run --non-human -p 16 ``` The flag sets `maxMateChrID = -1` internally. You can also fine-tune individually: `--max-mate-chr 19` (mouse has 19 autosomes + X + Y = ChrIDs 0–20 in a typical reference), `--min-mate-mapq 10` (require MAPQ ≥ 10 on the primary read before chasing its mate). Snapshot where a long-running job currently is: ```bash tail my_run.log ``` ## Further reading `CLAUDE.md` at the repo root is the crash-safety-net doc — conventions, file landmarks, build-system quirks (the `-O2` hardcoding in submodules), the somatic LOD model, the postprocess pipeline details, performance notes, and open investigations. Always update `CLAUDE.md` when you change something non-obvious. `scripts/svaba_local_function.sh` is a sourceable bash helper library with `svaba_*` utilities for grepping contigs, following a bp_id through the output set, opening locations in IGV, etc. Source it from your shell rc file to use. ## Issues and contact Please file bug reports, feature requests, and questions on the GitHub issues tracker: https://github.com/walaj/svaba/issues. ## Attributions SvABA is developed by Jeremiah Wala in the Rameen Berkoukhim lab at Dana-Farber Cancer Institute, in collaboration with the Cancer Genome Analysis team at the Broad Institute. Particular thanks to Cheng-Zhong Zhang (HMS DBMI) and Marcin Imielinski (Weill Cornell / NYGC). Additional thanks to Jared Simpson for SGA, Heng Li for htslib and BWA, and the SeqLib contributors. The SvABA 2.0 release and its documentation were built with the assistance of OpenAI Codex and Anthropic Claude, with extensive human-in-the-loop review, testing, and decision-making throughout. [seqlib]: https://github.com/walaj/SeqLib ================================================ FILE: docs/README.md ================================================ # SvABA BPS Viewer This folder contains a standalone static viewer for SvABA `bps.txt` and `bps.txt.gz` files. ## Files - `index.html`: app shell - `styles.css`: layout and visual styling - `app.js`: parser, filters, table, and detail pane - `svaba/am.bps.txt.gz`: bundled example file already present in this repo ## Usage You can open `index.html` directly and use the file picker for local files. If you want the bundled example button to work, serve this folder over HTTP: ```bash cd /Users/jeremiahwala/git/svaba/viewer python3 -m http.server 8000 ``` Then open [http://localhost:8000](http://localhost:8000). ## Current filter set The UI supports: - free-text search across locus, contig, alleles, confidence, DBSNP, and sample fields - numeric filtering for `somlod`, `maxlod`, `qual`, split support, ALT support, and discordant support - button filters for derived event type, raw evidence (`type`), confidence (`conf`), and somatic state - export of the currently filtered rows as TSV ## Notes - The raw header contains duplicate `alt` names. In the viewer these are treated as `alt_allele` and `alt_count`. - The raw `type` column is evidence (`INDEL`, `ASDIS`, `DSCRD`, `ASSMB`). The viewer also derives a separate event class to make filtering more usable. ================================================ FILE: docs/alignments_viewer.html ================================================ svaba alignments viewer

svaba alignments viewer

bps (not set) aln (not set)
bps matches click a row to load its contig
No bps results yet. Set the bps file and enter a breakpoint (chr:pos or chr:pos1-pos2) or a contig name.
alignments support:
No alignments loaded. Pick a contig above or drop/paste a block.
================================================ FILE: docs/app.js ================================================ (function () { "use strict"; const BASE_COLUMNS = [ "chr1", "pos1", "strand1", "chr2", "pos2", "strand2", "ref", "alt_allele", "span", "split", "alt_count", "cov", "cigar", "cigar_near", "dmq1", "dmq2", "dcn", "dct", "mapq1", "mapq2", "nm1", "nm2", "as1", "as2", "sub1", "sub2", "homol", "insert", "repeat", "contig_and_region", "naln", "conf", "evidence", "qual", "secondary", "somatic", "somlod", "maxlod", "dbsnp" ]; const NUMERIC_FIELDS = new Set([ "pos1", "pos2", "span", "split", "alt_count", "cov", "cigar", "cigar_near", "dmq1", "dmq2", "dcn", "dct", "mapq1", "mapq2", "nm1", "nm2", "as1", "as2", "sub1", "sub2", "naln", "qual", "secondary", "somlod", "maxlod" ]); const SORT_DEFAULTS = { key: "maxlod", direction: "desc" }; const state = { fileName: "", originalHeader: [], sampleHeaders: [], rows: [], filteredRows: [], selectedId: null, page: 1, pageSize: 100, sort: { ...SORT_DEFAULTS }, filters: { search: "", somlodMin: null, somlodMax: null, maxlodMin: null, maxlodMax: null, qualMin: null, splitMin: null, altMin: null, discordantMin: null, dbsnp: "all", eventTypes: new Set(), evidence: new Set(), confidence: new Set(), somatic: new Set() } }; const els = { fileInput: document.getElementById("file-input"), loadExample: document.getElementById("load-example"), exportButton: document.getElementById("export-button"), resetFilters: document.getElementById("reset-filters"), searchInput: document.getElementById("search-input"), somlodMin: document.getElementById("somlod-min"), somlodMax: document.getElementById("somlod-max"), maxlodMin: document.getElementById("maxlod-min"), maxlodMax: document.getElementById("maxlod-max"), qualMin: document.getElementById("qual-min"), splitMin: document.getElementById("split-min"), altMin: document.getElementById("alt-min"), discordantMin: document.getElementById("discordant-min"), dbsnpFilter: document.getElementById("dbsnp-filter"), pageSize: document.getElementById("page-size"), tableBody: document.getElementById("table-body"), detailContent: document.getElementById("detail-content"), statusText: document.getElementById("status-text"), resultsTitle: document.getElementById("results-title"), resultsSummary: document.getElementById("results-summary"), prevPage: document.getElementById("prev-page"), nextPage: document.getElementById("next-page"), pageSummary: document.getElementById("page-summary"), statTotal: document.getElementById("stat-total"), statShown: document.getElementById("stat-shown"), statPass: document.getElementById("stat-pass"), statTopEvidence: document.getElementById("stat-top-evidence"), eventTypeChips: document.getElementById("event-type-chips"), evidenceChips: document.getElementById("evidence-chips"), confidenceChips: document.getElementById("confidence-chips"), somaticChips: document.getElementById("somatic-chips") }; document.querySelectorAll(".sort-button").forEach((button) => { button.addEventListener("click", () => { const key = button.dataset.sort; if (state.sort.key === key) { state.sort.direction = state.sort.direction === "asc" ? "desc" : "asc"; } else { state.sort.key = key; state.sort.direction = key === "locus" || key === "eventType" || key === "conf" || key === "evidence" || key === "contig_and_region" ? "asc" : "desc"; } render(); }); }); document.querySelectorAll(".preset-button").forEach((button) => { button.addEventListener("click", () => { const target = document.getElementById(button.dataset.target); target.value = button.dataset.value; syncFilterState(); render(); }); }); els.fileInput.addEventListener("change", async (event) => { const file = event.target.files && event.target.files[0]; if (!file) { return; } await loadFromBlob(file, file.name); }); els.loadExample.addEventListener("click", async () => { await loadBundledExample(); }); els.exportButton.addEventListener("click", () => { exportFilteredRows(); }); els.resetFilters.addEventListener("click", () => { resetFilters(); render(); }); els.prevPage.addEventListener("click", () => { if (state.page > 1) { state.page -= 1; renderTable(); } }); els.nextPage.addEventListener("click", () => { const totalPages = Math.max(1, Math.ceil(state.filteredRows.length / state.pageSize)); if (state.page < totalPages) { state.page += 1; renderTable(); } }); [ "searchInput", "somlodMin", "somlodMax", "maxlodMin", "maxlodMax", "qualMin", "splitMin", "altMin", "discordantMin", "dbsnpFilter", "pageSize" ].forEach((key) => { els[key].addEventListener("input", () => { syncFilterState(); render(); }); els[key].addEventListener("change", () => { syncFilterState(); render(); }); }); resetFilters(); render(); function resetFilters() { state.pageSize = 100; state.filters.search = ""; state.filters.somlodMin = null; state.filters.somlodMax = null; state.filters.maxlodMin = null; state.filters.maxlodMax = null; state.filters.qualMin = null; state.filters.splitMin = null; state.filters.altMin = null; state.filters.discordantMin = null; state.filters.dbsnp = "all"; state.filters.eventTypes = new Set(); state.filters.evidence = new Set(); state.filters.confidence = new Set(); state.filters.somatic = new Set(); state.page = 1; els.searchInput.value = ""; els.somlodMin.value = ""; els.somlodMax.value = ""; els.maxlodMin.value = ""; els.maxlodMax.value = ""; els.qualMin.value = ""; els.splitMin.value = ""; els.altMin.value = ""; els.discordantMin.value = ""; els.dbsnpFilter.value = "all"; els.pageSize.value = String(state.pageSize); } function syncFilterState() { state.filters.search = els.searchInput.value.trim().toLowerCase(); state.filters.somlodMin = parseNullableNumber(els.somlodMin.value); state.filters.somlodMax = parseNullableNumber(els.somlodMax.value); state.filters.maxlodMin = parseNullableNumber(els.maxlodMin.value); state.filters.maxlodMax = parseNullableNumber(els.maxlodMax.value); state.filters.qualMin = parseNullableNumber(els.qualMin.value); state.filters.splitMin = parseNullableNumber(els.splitMin.value); state.filters.altMin = parseNullableNumber(els.altMin.value); state.filters.discordantMin = parseNullableNumber(els.discordantMin.value); state.filters.dbsnp = els.dbsnpFilter.value; state.pageSize = Number(els.pageSize.value) || 100; state.page = 1; } async function loadBundledExample() { setStatus("Loading bundled example from ./svaba/am.bps.txt.gz ..."); try { const response = await fetch("./svaba/am.bps.txt.gz"); if (!response.ok) { throw new Error("Could not fetch ./svaba/am.bps.txt.gz"); } const text = await readResponseText(response, "am.bps.txt.gz"); ingestText(text, "svaba/am.bps.txt.gz"); } catch (error) { setStatus( "Bundled example load failed. If you opened index.html directly as a file, use the file picker or serve viewer/ over HTTP." ); console.error(error); } } async function loadFromBlob(blob, fileName) { setStatus("Reading " + fileName + " ..."); try { const text = await readBlobText(blob, fileName); ingestText(text, fileName); } catch (error) { setStatus("Could not read " + fileName + ". " + error.message); console.error(error); } finally { els.fileInput.value = ""; } } async function readBlobText(blob, fileName) { if (fileName.endsWith(".gz")) { if (typeof DecompressionStream === "undefined") { throw new Error("This browser does not support gzip decompression. Use a plain .txt file here."); } const stream = blob.stream().pipeThrough(new DecompressionStream("gzip")); return await new Response(stream).text(); } return await blob.text(); } async function readResponseText(response, fileName) { if (fileName.endsWith(".gz")) { if (typeof DecompressionStream === "undefined") { throw new Error("This browser does not support gzip decompression."); } const stream = response.body.pipeThrough(new DecompressionStream("gzip")); return await new Response(stream).text(); } return await response.text(); } function ingestText(text, fileName) { const lines = text.replace(/\r\n?/g, "\n").split("\n").filter((line) => line.length > 0); if (lines.length < 2) { throw new Error("Expected a header and at least one row."); } const originalHeader = lines[0].split("\t"); if (originalHeader.length < BASE_COLUMNS.length) { throw new Error("Unexpected header width: " + originalHeader.length); } const sampleHeaders = originalHeader.slice(BASE_COLUMNS.length); const rows = []; for (let index = 1; index < lines.length; index += 1) { const line = lines[index]; const cells = line.split("\t"); if (cells.length !== originalHeader.length) { continue; } rows.push(makeRow(index, cells, sampleHeaders)); } state.fileName = fileName; state.originalHeader = originalHeader; state.sampleHeaders = sampleHeaders; state.rows = rows; resetFilters(); state.selectedId = rows.length ? rows[0].id : null; state.page = 1; state.sort = { ...SORT_DEFAULTS }; render(); setStatus("Loaded " + rows.length.toLocaleString() + " calls from " + fileName + "."); } function makeRow(index, cells, sampleHeaders) { const row = { id: index, originalCells: cells }; BASE_COLUMNS.forEach((field, fieldIndex) => { const value = cells[fieldIndex]; row[field] = NUMERIC_FIELDS.has(field) ? parseMaybeNumber(value) : value; }); row.chr1 = stripLeadingHash(row.chr1); row.locus = row.chr1 + ":" + row.pos1 + " -> " + row.chr2 + ":" + row.pos2; row.sampleInfo = sampleHeaders.map((header, offset) => parseSampleField(header, cells[BASE_COLUMNS.length + offset], row.evidence)); row.eventType = deriveEventType(row); row.spanAbs = row.span === null || row.span === -1 ? Infinity : Math.abs(row.span); row.supportPeak = Math.max( zeroIfNull(row.split), zeroIfNull(row.alt_count), zeroIfNull(row.cigar), zeroIfNull(row.dcn), zeroIfNull(row.dct) ); row.hasDbsnp = Boolean(row.dbsnp && row.dbsnp !== "x"); row.searchText = [ row.locus, row.eventType, row.evidence, row.conf, row.ref, row.alt_allele, row.contig_and_region, row.insert, row.repeat, row.homol, row.dbsnp, row.somatic ] .concat(row.sampleInfo.map((sample) => sample.label + " " + sample.raw)) .join(" ") .toLowerCase(); return row; } function deriveEventType(row) { if (row.evidence === "INDEL") { const refLength = (row.ref || "").length; const altLength = (row.alt_allele || "").length; if (altLength > refLength) { return "Insertion"; } if (altLength < refLength) { return "Deletion"; } return "Substitution"; } if (row.chr1 !== row.chr2) { return "Translocation"; } if (row.strand1 === row.strand2) { return "Inversion"; } if (row.strand1 === "-" && row.strand2 === "+") { return "Duplication-like"; } if (row.strand1 === "+" && row.strand2 === "-") { return "Deletion-like"; } return "Rearrangement"; } function parseSampleField(header, raw, evidence) { const label = header.split("_")[0]; const parts = raw.split(":"); const isIndel = evidence === "INDEL"; return { label, header, raw, genotype: parts[0] || "", altSupport: parseMaybeNumber(parts[1]), depth: parseMaybeNumber(parts[2]), splitSupport: parseMaybeNumber(parts[3]), pairedSupport: parseMaybeNumber(parts[4]), supportLabel: isIndel ? "cigar" : "discordant", gq: parseMaybeNumber(parts[5]), pl: parts[6] || "", lod: parseMaybeNumber(parts[7]), lodNormal: parseMaybeNumber(parts[8]) }; } function rebuildChipGroups() { renderChipList(els.eventTypeChips, countBy(state.rows, "eventType"), "eventTypes"); renderChipList(els.evidenceChips, countBy(state.rows, "evidence"), "evidence"); renderChipList(els.confidenceChips, countBy(state.rows, "conf"), "confidence"); renderChipList(els.somaticChips, countBy(state.rows, "somatic"), "somatic"); } function renderChipList(container, counts, filterKey) { const entries = Array.from(counts.entries()).sort((left, right) => { if (right[1] !== left[1]) { return right[1] - left[1]; } return left[0].localeCompare(right[0]); }); if (!entries.length) { container.innerHTML = 'Load a file to populate this filter.'; return; } container.innerHTML = ""; entries.forEach(([value, count]) => { const button = document.createElement("button"); button.type = "button"; button.className = "chip"; button.textContent = value + " (" + count.toLocaleString() + ")"; if (state.filters[filterKey].has(value)) { button.classList.add("active"); } button.addEventListener("click", () => { toggleSetValue(state.filters[filterKey], value); state.page = 1; render(); }); container.appendChild(button); }); } function render() { state.filteredRows = applyFilters(state.rows); sortRows(state.filteredRows); reconcileSelection(); updateSummary(); renderTable(); renderDetail(); rebuildChipGroups(); } function applyFilters(rows) { return rows.filter((row) => { if (state.filters.search && !row.searchText.includes(state.filters.search)) { return false; } if (!passesNumericRange(row.somlod, state.filters.somlodMin, state.filters.somlodMax)) { return false; } if (!passesNumericRange(row.maxlod, state.filters.maxlodMin, state.filters.maxlodMax)) { return false; } if (!passesNumericMinimum(row.qual, state.filters.qualMin)) { return false; } if (!passesNumericMinimum(row.split, state.filters.splitMin)) { return false; } if (!passesNumericMinimum(row.alt_count, state.filters.altMin)) { return false; } if (!passesNumericMinimum(Math.max(zeroIfNull(row.dcn), zeroIfNull(row.dct)), state.filters.discordantMin)) { return false; } if (state.filters.dbsnp === "present" && !row.hasDbsnp) { return false; } if (state.filters.dbsnp === "absent" && row.hasDbsnp) { return false; } if (state.filters.eventTypes.size && !state.filters.eventTypes.has(row.eventType)) { return false; } if (state.filters.evidence.size && !state.filters.evidence.has(row.evidence)) { return false; } if (state.filters.confidence.size && !state.filters.confidence.has(row.conf)) { return false; } if (state.filters.somatic.size && !state.filters.somatic.has(row.somatic)) { return false; } return true; }); } function sortRows(rows) { const direction = state.sort.direction === "asc" ? 1 : -1; const key = state.sort.key; rows.sort((left, right) => { const leftValue = sortableValue(left, key); const rightValue = sortableValue(right, key); if (typeof leftValue === "number" || typeof rightValue === "number") { const leftNumber = normalizeSortNumber(leftValue); const rightNumber = normalizeSortNumber(rightValue); if (leftNumber !== rightNumber) { return (leftNumber - rightNumber) * direction; } } else { const compare = String(leftValue).localeCompare(String(rightValue)); if (compare !== 0) { return compare * direction; } } return left.id - right.id; }); } function sortableValue(row, key) { if (key === "locus") { return row.locus; } if (key === "spanAbs") { return row.spanAbs; } return row[key]; } function updateSummary() { const totalRows = state.rows.length; const shownRows = state.filteredRows.length; const passCount = state.filteredRows.filter((row) => row.conf === "PASS").length; const topEvidence = topCountValue(state.filteredRows, "evidence"); const selected = findSelectedRow(); els.statTotal.textContent = totalRows.toLocaleString(); els.statShown.textContent = shownRows.toLocaleString(); els.statPass.textContent = passCount.toLocaleString(); els.statTopEvidence.textContent = topEvidence || "-"; els.resultsTitle.textContent = totalRows ? state.fileName + " (" + totalRows.toLocaleString() + " calls)" : "No variants loaded"; els.resultsSummary.textContent = totalRows ? shownRows.toLocaleString() + " rows after filters. Sorted by " + state.sort.key + " (" + state.sort.direction + ")." : "Load a file to start browsing calls."; els.exportButton.disabled = shownRows === 0; if (selected && !state.filteredRows.length) { state.selectedId = null; } } function renderTable() { const totalPages = Math.max(1, Math.ceil(state.filteredRows.length / state.pageSize)); if (state.page > totalPages) { state.page = totalPages; } const start = (state.page - 1) * state.pageSize; const end = start + state.pageSize; const rows = state.filteredRows.slice(start, end); if (!rows.length) { els.tableBody.innerHTML = 'No rows match the current filter set.'; } else { const html = rows .map((row) => { const isSelected = row.id === state.selectedId ? " selected" : ""; const spanLabel = row.span === -1 ? "interchrom" : formatNumber(row.span); const support = [ "split " + formatNumber(row.split), "alt " + formatNumber(row.alt_count), "disc " + formatNumber(Math.max(zeroIfNull(row.dcn), zeroIfNull(row.dct))) ].join(" / "); return ( '' + '
' + escapeHtml(row.locus) + '' + escapeHtml(row.ref + " -> " + row.alt_allele) + "
" + "" + escapeHtml(row.eventType) + "" + "" + escapeHtml(row.evidence) + "" + "" + escapeHtml(row.conf) + "" + "" + formatNumber(row.qual) + "" + "" + formatNumber(row.somlod) + "" + "" + formatNumber(row.maxlod) + "" + "" + escapeHtml(support) + "" + "" + escapeHtml(spanLabel) + "" + "" + escapeHtml(row.contig_and_region) + "" + "" ); }) .join(""); els.tableBody.innerHTML = html; els.tableBody.querySelectorAll("tr[data-row-id]").forEach((rowElement) => { rowElement.addEventListener("click", () => { state.selectedId = Number(rowElement.dataset.rowId); renderTable(); renderDetail(); }); }); } els.prevPage.disabled = state.page <= 1 || !state.filteredRows.length; els.nextPage.disabled = state.page >= totalPages || !state.filteredRows.length; els.pageSummary.textContent = "Page " + state.page + " of " + totalPages; } function renderDetail() { const row = findSelectedRow(); if (!row) { els.detailContent.className = "detail-content detail-empty"; els.detailContent.textContent = "Select a row to inspect the raw breakpoint call, support metrics, and sample-level values."; return; } const confidenceClass = row.conf === "PASS" ? "pass" : row.conf === "LOWLOD" || row.conf === "LOWMAPQ" ? "warn" : "low"; const sampleCards = row.sampleInfo .map((sample) => { return ( '
' + "" + escapeHtml(sample.label) + "" + '
' + escapeHtml(sample.header) + "
" + "
" + detailPair("GT", sample.genotype) + detailPair("AD", formatNumber(sample.altSupport)) + detailPair("DP", formatNumber(sample.depth)) + detailPair("SR", formatNumber(sample.splitSupport)) + detailPair(sample.supportLabel, formatNumber(sample.pairedSupport)) + detailPair("GQ", formatNumber(sample.gq)) + detailPair("LO", formatNumber(sample.lod)) + detailPair("LO_n", formatNumber(sample.lodNormal)) + "
" + "
" ); }) .join(""); els.detailContent.className = "detail-content"; els.detailContent.innerHTML = '
' + "

" + escapeHtml(row.locus) + "

" + '

' + escapeHtml(row.eventType + " / " + row.evidence + " / " + row.conf) + "

" + '
' + '' + escapeHtml("conf " + row.conf) + "" + '' + escapeHtml("somatic " + row.somatic) + "" + '' + escapeHtml("somlod " + formatNumber(row.somlod)) + "" + '' + escapeHtml("maxlod " + formatNumber(row.maxlod)) + "" + "
" + "
" + '
' + detailCard("Reference", row.ref) + detailCard("Alternate", row.alt_allele) + detailCard("Breakends", row.chr1 + ":" + row.pos1 + " " + row.strand1 + " -> " + row.chr2 + ":" + row.pos2 + " " + row.strand2) + detailCard("Support", "split " + formatNumber(row.split) + ", alt " + formatNumber(row.alt_count) + ", cigar " + formatNumber(row.cigar) + ", dcn " + formatNumber(row.dcn) + ", dct " + formatNumber(row.dct)) + detailCard("Mapping and alignment", "mapq " + formatNumber(row.mapq1) + "/" + formatNumber(row.mapq2) + ", AS " + formatNumber(row.as1) + "/" + formatNumber(row.as2) + ", NM " + formatNumber(row.nm1) + "/" + formatNumber(row.nm2)) + detailCard("Context", "homol " + presentOrX(row.homol) + ", insert " + presentOrX(row.insert) + ", repeat " + presentOrX(row.repeat)) + detailCard("Contig", row.contig_and_region) + detailCard("Flags", "qual " + formatNumber(row.qual) + ", secondary " + formatNumber(row.secondary) + ", span " + (row.span === -1 ? "interchrom" : formatNumber(row.span)) + ", dbsnp " + presentOrX(row.dbsnp)) + "
" + '

Per-sample fields

' + '
' + sampleCards + "
" + '

Raw row

' + '
' +
      escapeHtml(state.originalHeader.join("\t")) +
      "\n" +
      escapeHtml(row.originalCells.join("\t")) +
      "
"; } function detailCard(label, value) { return "
" + escapeHtml(label) + "
" + escapeHtml(value) + "
"; } function detailPair(label, value) { return "
" + escapeHtml(label) + "
" + escapeHtml(value) + "
"; } function reconcileSelection() { const selectedStillVisible = state.filteredRows.some((row) => row.id === state.selectedId); if (!selectedStillVisible) { state.selectedId = state.filteredRows.length ? state.filteredRows[0].id : null; } } function findSelectedRow() { return state.filteredRows.find((row) => row.id === state.selectedId) || state.rows.find((row) => row.id === state.selectedId) || null; } function exportFilteredRows() { if (!state.filteredRows.length) { return; } const lines = [state.originalHeader.join("\t")].concat(state.filteredRows.map((row) => row.originalCells.join("\t"))); const blob = new Blob([lines.join("\n")], { type: "text/tab-separated-values;charset=utf-8" }); const url = URL.createObjectURL(blob); const anchor = document.createElement("a"); const baseName = state.fileName.replace(/\.gz$/i, "").replace(/\.txt$/i, ""); anchor.href = url; anchor.download = baseName + ".filtered.tsv"; anchor.click(); URL.revokeObjectURL(url); } function countBy(rows, key) { const map = new Map(); rows.forEach((row) => { const value = row[key]; map.set(value, (map.get(value) || 0) + 1); }); return map; } function topCountValue(rows, key) { const counts = countBy(rows, key); let bestValue = ""; let bestCount = -1; counts.forEach((count, value) => { if (count > bestCount) { bestCount = count; bestValue = value; } }); return bestValue; } function toggleSetValue(set, value) { if (set.has(value)) { set.delete(value); } else { set.add(value); } } function setStatus(message) { els.statusText.textContent = message; } function passesNumericRange(value, min, max) { if (min === null && max === null) { return true; } if (value === null || !Number.isFinite(value)) { return false; } if (min !== null && value < min) { return false; } if (max !== null && value > max) { return false; } return true; } function passesNumericMinimum(value, min) { if (min === null) { return true; } if (value === null || !Number.isFinite(value)) { return false; } return value >= min; } function parseNullableNumber(raw) { if (raw === "" || raw === null || raw === undefined) { return null; } const value = Number(raw); return Number.isFinite(value) ? value : null; } function parseMaybeNumber(raw) { if (raw === "" || raw === "NA" || raw === "x" || raw === "NOTSET") { return null; } const value = Number(raw); return Number.isFinite(value) ? value : null; } function formatNumber(value) { if (value === null || value === undefined || value === Infinity) { return "-"; } if (!Number.isFinite(value)) { return String(value); } return Math.abs(value) >= 100 || Number.isInteger(value) ? value.toLocaleString() : value.toFixed(3).replace(/\.?0+$/, ""); } function presentOrX(value) { return value && value !== "x" ? value : "x"; } function normalizeSortNumber(value) { if (value === Infinity) { return Number.MAX_SAFE_INTEGER; } if (value === null || value === undefined || Number.isNaN(value)) { return -Number.MAX_SAFE_INTEGER; } return Number(value); } function zeroIfNull(value) { return value === null || value === undefined ? 0 : value; } function stripLeadingHash(value) { return typeof value === "string" ? value.replace(/^#/, "") : value; } function escapeHtml(value) { return String(value) .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } })(); ================================================ FILE: docs/bps_explorer.html ================================================ SvABA BPS Explorer

SvABA BPS Explorer

No file loaded
Drop or click — .bps.txt / .bps.txt.gz
Drop or click — .bed / .bed.gz / .gtf / .gtf.gz (optional, gene annotation)
================================================ FILE: docs/bps_viewer.html ================================================ SvABA BPS Viewer

SvABA raw call explorer

Inspect bps.txt and bps.txt.gz calls in the browser.

Load a breakpoint table, filter it by LOD, confidence, event type, and evidence, then drill into per-sample support without leaving the file.

No file loaded yet. Use the file picker or the bundled example in viewer/svaba/am.bps.txt.gz.

Rows 0
Shown 0
PASS 0
Evidence -

Filters

Slice by score, event class, and support

somlod presets
maxlod presets
Variant type Derived event class
Evidence Raw type field
Confidence Raw conf field
Somatic state Raw somatic field

Calls

No variants loaded

Load a file to start browsing calls.
No data yet. Load a bps.txt or bps.txt.gz file.
================================================ FILE: docs/comparison.html ================================================ SvABA BPS Comparison

SvABA BPS Comparison

📄
Drop or click to load
📄
Drop or click to load
0
-50
0
-50
10
Load two bps files (any format), then click Compare
================================================ FILE: docs/index.html ================================================ SvABA Viewers

SvABA Viewers

Browser-based tools for exploring svaba output. All run client-side — no server required.
BPS Explorer bps.txt.gz
Dark, compact table-first viewer for bps.txt.gz files. Sortable columns, numeric filters (somlod, maxlod, qual, span range), genomic region search, chip filters for type/evidence/conf/somatic, summary histograms, per-sample detail panel. Handles both legacy 41-col and SvABA2.0 51-col formats. Drag-and-drop or file picker.
R2C Explorer r2c.txt.gz
Browser-side re-plotter for the structured r2c TSV emitted by svaba run --dump-reads (or the PASS / PASS-somatic subsets from svaba_postprocess.sh). Load the file, type/search for a contig name (autocomplete from the file's own list of cnames), and get the alignments-style plot generated fresh from the TSV: ruler, contig sequence, per-fragment summaries, breakpoint rows, and per-read gap-expanded CIGAR renderings with support-kind color-coding. Prev/Next/Random navigation plus imperfect-only and support-kind filters. Successor to the old alignments.txt.gz ASCII dump.
Alignments Viewer (legacy) alignments.txt.gz
Original ASCII-plot viewer for *.alignments.txt.gz from svaba runs before the r2c migration. New runs no longer produce alignments.txt.gz — prefer the R2C Explorer above. Kept for rendering historical outputs.
Learn Explorer learn.tsv.gz
Interactive viewer for BAM learning data — per-read-group insert-size distributions emitted by svaba run as ${ID}.*.learn.tsv.gz. Overlaid + faceted histograms, sortable summary table (n, mean, median, SD, percentiles), RG chip filters, click-to-solo. Drag-and-drop the gzipped TSV to explore.
Runtime Explorer runtime.txt
Explore per-region timing from ${ID}.runtime.txt. Sort regions by runtime, contigs, or breakpoint count; filter by chromosome, region, runtime threshold, or contig / discordant-read minimums. Prominent runtime-distribution histogram plus auxiliary contig / discordant histograms with independent log10 toggles. Click a region's locus to jump IGV to it (requires IGV on port 60151). Standard-chr filter drops decoy / alt / random / HLA contigs.
Run Comparison 2× bps.txt.gz
Side-by-side comparison of two svaba runs (e.g. before/after a parameter change, or tumor vs matched). Load two bps.txt.gz files, match calls by locus, and see which are shared vs unique to each run. Charts for agreement rates and score distributions.
BPS Viewer (original) legacy
The original light-theme BPS viewer. Filter by LOD, confidence, event type, and evidence. Per-sample support drill-down. Requires app.js and styles.css alongside it.
Files: bps_viewer.html + app.js + styles.css
================================================ FILE: docs/learn_explorer.html ================================================ SvABA Learn Explorer

SvABA Learn Explorer

No file loaded
Drop or click — *.learn.tsv.gz (columns: bam, rg, isize)
Insert size distribution (all selected RGs overlaid)
================================================ FILE: docs/r2c_explorer.html ================================================ SvABA R2C Explorer

SvABA R2C Explorer

No file loaded
Drop or click — .r2c.txt.gz / .r2c.pass.txt.gz / .r2c.pass.somatic.txt.gz
================================================ FILE: docs/runtime_explorer.html ================================================ SvABA Runtime Explorer

SvABA Runtime Explorer

No file loaded — drop a runtime log to begin
Drop or click — SvABA runtime log (TSV, 17 cols: chromosome start end … runtime_seconds …)
================================================ FILE: docs/styles.css ================================================ :root { --bg: #f3ece1; --bg-deep: #d7e2df; --panel: rgba(255, 251, 246, 0.85); --panel-strong: rgba(255, 253, 250, 0.94); --text: #162430; --muted: #5d6a72; --line: rgba(22, 36, 48, 0.12); --shadow: 0 24px 60px rgba(41, 54, 61, 0.14); --accent: #c65a31; --accent-ink: #7c2d12; --accent-soft: rgba(198, 90, 49, 0.12); --teal: #235b60; --teal-soft: rgba(35, 91, 96, 0.12); --green-soft: rgba(74, 122, 76, 0.14); --danger-soft: rgba(164, 65, 65, 0.12); --mono: "SFMono-Regular", "Menlo", "Monaco", "Liberation Mono", monospace; --sans: "Avenir Next", "Segoe UI", "Helvetica Neue", sans-serif; --serif: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif; } * { box-sizing: border-box; } html { font-size: 16px; } body { margin: 0; min-height: 100vh; color: var(--text); font-family: var(--sans); background: radial-gradient(circle at top left, rgba(217, 153, 96, 0.25), transparent 32%), linear-gradient(160deg, var(--bg) 0%, #f8f4ee 45%, var(--bg-deep) 100%); } code, pre, th, td, .stat-value, .chip, .status, .field input, .field select, .detail-grid dd { font-family: var(--mono); } .background-glow { position: fixed; inset: auto; width: 32rem; height: 32rem; border-radius: 50%; filter: blur(48px); opacity: 0.45; pointer-events: none; z-index: 0; } .background-glow-a { top: -10rem; right: -8rem; background: rgba(198, 90, 49, 0.2); } .background-glow-b { bottom: -12rem; left: -10rem; background: rgba(35, 91, 96, 0.18); } .page { position: relative; z-index: 1; width: min(1500px, calc(100vw - 2rem)); margin: 0 auto; padding: 1rem 0 2rem; } .panel { background: var(--panel); border: 1px solid rgba(255, 255, 255, 0.45); box-shadow: var(--shadow); border-radius: 1.5rem; backdrop-filter: blur(14px); } .hero, .filters, .table-panel, .detail-panel { padding: 1.4rem; } .hero { display: grid; gap: 1.2rem; grid-template-columns: minmax(0, 1.5fr) minmax(280px, 0.8fr); align-items: start; } .hero-copy h1, .panel-heading h2 { margin: 0; font-family: var(--serif); font-weight: 700; line-height: 1.04; } .hero-copy h1 { font-size: clamp(2rem, 4vw, 3.6rem); max-width: 12ch; } .hero-text { margin: 1rem 0 0; max-width: 62ch; color: var(--muted); font-size: 1.02rem; line-height: 1.6; } .eyebrow { margin: 0 0 0.45rem; text-transform: uppercase; letter-spacing: 0.18em; font-size: 0.72rem; font-weight: 700; color: var(--teal); } .hero-actions, .pagination, .panel-heading, .chip-heading, .preset-group, .table-meta { display: flex; align-items: center; gap: 0.75rem; } .hero-actions { margin-top: 1.2rem; flex-wrap: wrap; } .button { appearance: none; border: 0; border-radius: 999px; padding: 0.82rem 1.1rem; font: inherit; cursor: pointer; transition: transform 140ms ease, box-shadow 140ms ease, background 140ms ease; } .button:hover:not(:disabled), .button:focus-visible:not(:disabled) { transform: translateY(-1px); } .button:disabled { cursor: not-allowed; opacity: 0.45; } .button-primary { background: linear-gradient(135deg, #12222f, #264053); color: #fdf7f1; box-shadow: 0 16px 32px rgba(18, 34, 47, 0.22); } .button-secondary { background: rgba(255, 255, 255, 0.8); color: var(--text); border: 1px solid var(--line); } .button-ghost { background: transparent; color: var(--text); border: 1px solid var(--line); } .button-small { padding: 0.55rem 0.85rem; } .file-picker input { display: none; } .status { margin: 1rem 0 0; color: var(--muted); line-height: 1.5; } .hero-stats { display: grid; gap: 0.75rem; } .stat-card { padding: 1rem 1.1rem; border-radius: 1.15rem; background: linear-gradient(160deg, var(--panel-strong), rgba(255, 248, 240, 0.8)); border: 1px solid rgba(255, 255, 255, 0.55); } .stat-label { display: block; font-size: 0.8rem; color: var(--muted); } .stat-value { display: block; margin-top: 0.45rem; font-size: clamp(1.4rem, 3vw, 2.2rem); } .filters { margin-top: 1rem; } .filter-grid { display: grid; grid-template-columns: repeat(11, minmax(0, 1fr)); gap: 0.9rem; margin-top: 1rem; } .field { display: flex; flex-direction: column; gap: 0.45rem; min-width: 0; } .field:first-child { grid-column: span 3; } .field-label { font-size: 0.78rem; font-weight: 700; color: var(--muted); } .field input, .field select { width: 100%; border: 1px solid rgba(22, 36, 48, 0.14); background: rgba(255, 255, 255, 0.8); border-radius: 0.95rem; padding: 0.82rem 0.92rem; color: var(--text); } .field input:focus-visible, .field select:focus-visible { outline: 2px solid rgba(198, 90, 49, 0.24); outline-offset: 1px; } .preset-row { display: flex; flex-wrap: wrap; gap: 1rem; margin-top: 1rem; } .preset-group { flex-wrap: wrap; } .preset-label { font-size: 0.78rem; color: var(--muted); font-weight: 700; } .chip-section { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin-top: 1.2rem; } .chip-block { padding: 1rem; border-radius: 1.2rem; background: rgba(255, 255, 255, 0.58); border: 1px solid rgba(255, 255, 255, 0.45); } .chip-heading { justify-content: space-between; margin-bottom: 0.8rem; } .chip-heading .eyebrow { margin: 0; } .chip-list { display: flex; flex-wrap: wrap; gap: 0.55rem; } .chip { padding: 0.55rem 0.75rem; border-radius: 999px; border: 1px solid var(--line); background: rgba(255, 255, 255, 0.78); color: var(--text); font-size: 0.82rem; cursor: pointer; transition: background 120ms ease, border-color 120ms ease, transform 120ms ease; } .chip:hover, .chip:focus-visible { transform: translateY(-1px); } .chip.active { background: linear-gradient(135deg, rgba(198, 90, 49, 0.18), rgba(35, 91, 96, 0.12)); border-color: rgba(198, 90, 49, 0.4); color: var(--accent-ink); } .workspace { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(320px, 0.8fr); gap: 1rem; margin-top: 1rem; } .panel-heading { justify-content: space-between; align-items: end; } .panel-heading h2 { font-size: 1.55rem; } .table-meta, .detail-content, .detail-grid dd, .detail-grid dt, .table-shell td, .table-shell th { font-size: 0.9rem; } .table-shell { margin-top: 1rem; overflow: auto; max-height: 72vh; border-radius: 1rem; border: 1px solid var(--line); background: rgba(255, 255, 255, 0.55); } table { width: 100%; border-collapse: collapse; } thead th { position: sticky; top: 0; background: rgba(246, 241, 234, 0.94); z-index: 1; } th, td { padding: 0.82rem 0.88rem; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; } tbody tr { cursor: pointer; transition: background 120ms ease; } tbody tr:hover { background: rgba(198, 90, 49, 0.06); } tbody tr.selected { background: linear-gradient(90deg, rgba(198, 90, 49, 0.12), rgba(35, 91, 96, 0.08)); } .sort-button { border: 0; background: transparent; padding: 0; font: inherit; font-weight: 700; cursor: pointer; color: inherit; } .empty-table, .detail-empty { padding: 1.4rem; color: var(--muted); } .pagination { justify-content: flex-end; margin-top: 1rem; } .detail-content { margin-top: 1rem; } .detail-header h3 { margin: 0; font-family: var(--serif); font-size: 1.5rem; } .detail-subtitle { margin: 0.5rem 0 0; color: var(--muted); } .detail-tags { display: flex; flex-wrap: wrap; gap: 0.45rem; margin-top: 0.9rem; } .tag { padding: 0.38rem 0.62rem; border-radius: 999px; background: rgba(255, 255, 255, 0.78); border: 1px solid var(--line); font-size: 0.78rem; } .tag.pass { background: var(--green-soft); } .tag.warn { background: var(--accent-soft); } .tag.low { background: var(--danger-soft); } .detail-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.85rem 1rem; margin-top: 1.15rem; } .detail-grid div, .sample-card { padding: 0.9rem; border-radius: 1rem; background: rgba(255, 255, 255, 0.62); border: 1px solid var(--line); } .detail-grid dt, .sample-card dt { color: var(--muted); margin-bottom: 0.3rem; } .detail-grid dd, .sample-card dd { margin: 0; word-break: break-word; } .section-title { margin: 1.2rem 0 0.7rem; font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.14em; color: var(--teal); } .sample-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0.8rem; } .sample-card dl { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.45rem 0.75rem; margin: 0.6rem 0 0; } .raw-block { margin-top: 1rem; padding: 0.95rem; border-radius: 1rem; background: #162430; color: #eff4f3; overflow: auto; line-height: 1.55; font-size: 0.82rem; } .locus-cell strong { display: block; } .locus-cell span, .mini-note { color: var(--muted); } .badge { display: inline-flex; align-items: center; padding: 0.2rem 0.45rem; border-radius: 999px; font-size: 0.75rem; background: rgba(35, 91, 96, 0.1); color: var(--teal); } .reveal { animation: rise-in 360ms ease both; } @keyframes rise-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 1100px) { .hero, .workspace, .chip-section { grid-template-columns: 1fr; } .filter-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .field:first-child { grid-column: span 2; } } @media (max-width: 700px) { .page { width: min(100vw - 1rem, 1500px); padding-top: 0.5rem; } .hero, .filters, .table-panel, .detail-panel { padding: 1rem; } .filter-grid, .detail-grid { grid-template-columns: 1fr; } .field:first-child { grid-column: span 1; } .panel-heading, .pagination { align-items: flex-start; flex-direction: column; } } ================================================ FILE: notes ================================================ AlignedContig constructor from BamRecordPtrVector --- Makes the alignment fragments ------ Makes the indel bps from each AlignmentFragment --- Make the SV BreakPoints ------- Makes each BreakEnd -- this will take BamRecordPtr data from AlignmentFragment into the BreakEnd (e.g. nm) ------- Makes the "local" breakpoints and "secondaries" breakpoints ------- Sets the "global" breakpoint ----------- Calls BreakPoint "set_homologies_insertions" for all global and local bps ----------- Calls BreakPoint "order" for all ----------- Sets the BreakPoint SVType ----------- Instantiates a new Prefix : SampleInfo map Directly from BreakPoints --- scoreBreakpoints ------- "set_evidence" that sets DSCRD, INDEL, ASDIS, etc ------- calls SampleInfo -> modelSelection --------------- sets the alt cov and total cov --------------- calls the __log_likelihood for alt or err --------------- calls the __log_likelihood for ref or alt --------------- calls the __genotype_likelihoods for 0/0, 0/1 or 1/1 --------------- calls "score_somatic" that sets somatic_lod ================================================ FILE: opt/jemalloc_test.sh ================================================ REGION=chr12:10,000,000-12,000,000 T=/Users/jeremiahwala/Desktop/svaba_compare/SG.wgs.UCLA.2025.01.tumor_cleaned.recal.bam N=/Users/jeremiahwala/Desktop/svaba_compare/blood.recal.bam # prime the page cache so cold-I/O doesn't dominate REF=${HOME}/ref_genome/Homo_sapiens_assembly38.fasta for f in $REF ${REF}.bwt ${REF}.sa ${REF}.pac do cat "$f" > /dev/null; done # baseline (system malloc) 3 trials for t in 1 2 3; do /usr/bin/time -l ~/git/svaba/build/svaba run \ -t $T -n $N -G $REF \ -k $REGION -p 16 -a base_$t 2>&1 \ | tail -15 | grep -E "real|user|sys|maximum resident" done # jemalloc 3 trials for t in 1 2 3; do /usr/bin/time -l env \ DYLD_INSERT_LIBRARIES=$(brew --prefix jemalloc)/lib/libjemalloc.dylib \ DYLD_FORCE_FLAT_NAMESPACE=1 \ MALLOC_CONF=background_thread:true,narenas:24,dirty_decay_ms:10000 \ ~/git/svaba/build/svaba run \ -t $T -n $N -G $REF \ -k $REGION -p 16 -a jem_$t 2>&1 \ | tail -15 | grep -E "real|user|sys|maximum resident" done ================================================ FILE: opt/memprof.sh ================================================ #!/usr/bin/env bash set -euo pipefail if (( $# < 1 )); then echo "Usage: $0 [args]" exit 1 fi OUT_LOG="memlog.txt" PLOT="memory.png" # Clean slate : > "$OUT_LOG" rm -f "$PLOT" # Start the users command "$@" & PID=$! echo "[$(date)] Started PID $PID: $*" >&2 START=$(date +%s) LAST_PLOT=$START # Monitor until the process exits while kill -0 "$PID" 2>/dev/null; do NOW=$(date +%s) ELAPSED=$(( NOW - START )) # Get PSS in KB PSS=$(awk '/^Pss:/ { print $2 }' /proc/"$PID"/smaps_rollup 2>/dev/null || echo 0) echo "$ELAPSED $PSS" >> "$OUT_LOG" # RSS=$(ps -o rss= -p "$PID" | awk '{print $1}') #echo "$ELAPSED $RSS" >> "$OUT_LOG" # every 30s replot if (( ELAPSED - (LAST_PLOT - START) >= 30 )); then LAST_PLOT=$NOW Rscript --vanilla - <&2 fi sleep 1 done # One final log entry (in case it just exited) NOW=$(date +%s) ELAPSED=$(( NOW - START )) PSS=$(awk '/^Pss:/ { print $2 }' /proc/"$PID"/smaps_rollup 2>/dev/null || echo 0) echo "$ELAPSED $PSS" >> "$OUT_LOG" # Final plot Rscript --vanilla - <&2 wait "$PID" exit $? ================================================ FILE: opt/memprof_osx.sh ================================================ #!/usr/bin/env bash set -euo pipefail if (( $# < 1 )); then echo "Usage: $0 [args]" exit 1 fi OUT_LOG="memlog.txt" PLOT="memory.png" : > "$OUT_LOG" rm -f "$PLOT" "$@" & PID=$! echo "[$(date)] Started PID $PID: $*" >&2 START=$(date +%s) LAST_PLOT=$START while kill -0 "$PID" 2>/dev/null; do NOW=$(date +%s) ELAPSED=$(( NOW - START )) # macOS: footprint reports physical memory in bytes (matches Activity Monitor) MEM_MB=$(footprint -p "$PID" 2>/dev/null \ | awk '/^[[:space:]]*phys_footprint:/ { val=$2; unit=$3; if (unit == "B") val=val/1024/1024; else if (unit == "KB") val=val/1024; else if (unit == "GB") val=val*1024; # MB stays as-is printf "%d\n", val; exit }') MEM_MB=${MEM_MB:-0} # Convert to KB to match the original log format (R script divides by 1024/1024 for GB) MEM=$(( MEM_MB * 1024 )) echo "$ELAPSED $MEM" >> "$OUT_LOG" if (( NOW - LAST_PLOT >= 30 )); then LAST_PLOT=$NOW if (( $(wc -l < "$OUT_LOG") >= 2 )); then Rscript --vanilla - <&2 fi fi sleep 1 done wait "$PID" || true ================================================ FILE: opt/memusg.sh ================================================ #!/usr/bin/env bash # memusg -- Measure memory usage of processes # Usage: memusg COMMAND [ARGS]... # # Author: Jaeho Shin # Created: 2010-08-16 set -um # check input [ $# -gt 0 ] || { sed -n '2,/^#$/ s/^# //p' <"$0"; exit 1; } # TODO support more options: peak, footprint, sampling rate, etc. pgid=`ps -o pgid= $$` # make sure we're in a separate process group if [ $pgid = $(ps -o pgid= $(ps -o ppid= $$)) ]; then cmd= set -- "$0" "$@" for a; do cmd+="'${a//"'"/"'\\''"}' "; done exec bash -i -c "$cmd" fi # detect operating system and prepare measurement case `uname` in Darwin|*BSD) sizes() { /bin/ps -o rss= -g $1; } ;; Linux) sizes() { /bin/ps -o rss= -$1; } ;; *) echo "`uname`: unsupported operating system" >&2; exit 2 ;; esac # monitor the memory usage in the background. ( peak=0 while sizes=`sizes $pgid` do set -- $sizes sample=$((${@/#/+})) let peak="sample > peak ? sample : peak" sleep 0.1 done echo "memusg: peak=$peak" >&2 ) & monpid=$! # run the given command exec "$@" ================================================ FILE: opt/profiler.sh ================================================ #!/usr/bin/env bash "$@" & # Run the given command line in the background. pid=$! peak=0 rm mem.log ## make the Rscript rm -f memplot.R echo "require(ggplot2); df = read.table('mem.log', header=FALSE); df\$time = seq(from=10,to=10*nrow(df), by=10);" >> memplot.R; echo "pdf('memgraph.pdf'); g <- ggplot(df, aes(x=time, y=V1/1024)) + geom_line() + xlab('Time (s)') + ylab('Memory (Mb)') + theme_bw(); print(g); dev.off();" >> memplot.R; chmod +x memplot.R; while true; do sleep 0.1 sample="$(ps -o rss= $pid 2> /dev/null)" || break let peak='sample > peak ? sample : peak' echo "$sample" >> mem.log done echo "Peak: $peak" 1>&2 Rscript memplot.R ================================================ FILE: opt/runtime.R ================================================ #!/usr/bin/env Rscript suppressPackageStartupMessages({ library(data.table) library(ggplot2) library(ggrepel) }) # Parse arguments args <- commandArgs(trailingOnly = TRUE) if (length(args) < 2) { stop("Usage: ./runtime_plot.R input.tsv output.pdf") } input_file <- args[1] output_file <- args[2] # Read data dt <- fread(input_file) # Only keep chromosomes 1-22 and X allowed_chr <- paste0("chr", c(1:22, "X")) dt <- dt[chromosome %in% allowed_chr] # Convert start to Mb dt[, start_mb := start / 1e6] # Region label for top runtime labels dt[, region_label := paste0(chromosome, ":", start, "-", end)] # For each chromosome, find top 10 regions by runtime top10 <- dt[, .SD[order(-runtime_seconds)][1:10], by = chromosome] # Plot with facet by chromosome p <- ggplot(dt, aes(x = start_mb, y = runtime_seconds)) + geom_point(size = 0.7) + geom_line(aes(group = 1), alpha = 0.7) + # explicitly group the line geom_text_repel( data = top10, aes(label = region_label), size = 2, max.overlaps = Inf, box.padding = 0.5 ) + facet_wrap(~chromosome, scales = "free_x", ncol = 5) + labs( title = "Runtime per Genomic Region by Chromosome", x = "Genomic Start Position (Mb)", y = "Wall Time (seconds)" ) + scale_y_continuous(limits=c(0,200)) + theme_minimal(base_size = 9) + theme(strip.text = element_text(face = "bold")) + scale_x_continuous(expand = expansion(add = c(0.01, 0.01))) # avoid zero-width panels # Save a large PDF ggsave(output_file, plot = p, width = 20, height = 16, dpi = 300) ================================================ FILE: scripts/combine_blacklists.sh ================================================ #!/usr/bin/env bash # # combine_blacklists.sh — combine multiple BED blacklists into one file. # # "Combining" blacklists means a UNION over intervals: a region ends up in the # output if ANY of the input files covered it. This is what you almost always # want when you're assembling a single --blacklist argument for svaba run out # of several sources (high-signal regions, low-mappability, simple repeats, # non-standard contigs, high-runtime regions, ad-hoc bad list, etc.). # # (If you actually need the set intersection — regions blacklisted by ALL # sources simultaneously — this is not that script. For that, use # `bedtools multiinter -i FILES | awk '$4==NFILES'` or iterated # `bedtools intersect`. Intersect-of-blacklists is almost never the right # semantics; you'd end up with a tiny output.) # # What this script does: # 1. cat every input BED to stdout with a 5th-column source tag = basename. # Any existing 4th-column label is preserved. # 2. Filter out obvious non-BED noise: empty lines, `#` comments, # `track`/`browser` UCSC header lines. # 3. By default: sort by (chrom, start) and emit as a 5-column BED. # 4. With --merge: run `bedtools merge` to collapse overlapping/adjacent # intervals into one, and collapse the set of contributing source tags # into a comma-separated list in column 4. # # Usage: # ./combine_blacklists.sh -o OUT.bed [--merge [--slop N]] FILE1.bed FILE2.bed ... # # Flags: # -o, --output OUT output path (required) # -m, --merge sort + bedtools merge the concatenation (union of # overlapping intervals, with label-distinct column). # Requires `bedtools` on PATH. # -d, --merge-dist N pass to bedtools merge -d (intervals within N bp # are merged). Default 0 (touching/overlapping only). # --slop N grow each interval by N bp on both sides before # merging (expands the blacklist). Default 0. # Requires `bedtools` and --merge. # -c, --clip GENOME clip every interval's end to the real contig length # in GENOME, and drop intervals whose start is past the # contig. GENOME may be a .fai, a two-column tsv # (chromlength), or svaba's tracks/chr fasta- # header dump (>chrN AC:... LN:... ...). Unknown # contigs are passed through unchanged (with a # warning). This is what saves you from a 250,000,000- # end sentinel in one of the input BEDs blowing the # reported covered-bp up to absurd levels. # --no-label drop the label column(s); emit 3-col BED only # -q, --quiet suppress progress to stderr # -h, --help this message # # Typical invocation (regenerate the project's combined blacklist): # # ./combine_blacklists.sh --merge \ # -o tracks/hg38.combined_blacklist.bed \ # tracks/hg38.blacklist.bed \ # tracks/hg38.high_runtime.bed \ # tracks/hg38.extra_badlist.bed \ # tracks/hg38.nonstd_chr.blacklist.bed \ # tracks/hg38.rmsk.simple_repeat.bed # # The script is idempotent — re-running it always rebuilds OUT from current # inputs. Change `high_runtime.bed`, rerun, and the combined file updates. set -euo pipefail OUT="" MERGE=0 MERGE_DIST=0 SLOP=0 CLIP="" NO_LABEL=0 QUIET=0 INPUTS=() log() { [[ $QUIET -eq 1 ]] || echo "$@" >&2; } usage() { sed -n '2,60p' "$0" | sed 's/^# \{0,1\}//'; exit "${1:-0}"; } # ---- arg parsing ---- while (( $# )); do case "$1" in -o|--output) OUT="$2"; shift 2 ;; -m|--merge) MERGE=1; shift ;; -d|--merge-dist) MERGE_DIST="$2"; shift 2 ;; --slop) SLOP="$2"; shift 2 ;; -c|--clip) CLIP="$2"; shift 2 ;; --no-label) NO_LABEL=1; shift ;; -q|--quiet) QUIET=1; shift ;; -h|--help) usage 0 ;; --) shift; while (( $# )); do INPUTS+=("$1"); shift; done ;; -*) echo "Unknown flag: $1" >&2; usage 2 ;; *) INPUTS+=("$1"); shift ;; esac done [[ -z "$OUT" ]] && { echo "ERROR: -o OUTPUT is required" >&2; usage 2; } [[ ${#INPUTS[@]} -lt 1 ]] && { echo "ERROR: no input BED files given" >&2; usage 2; } # ---- sanity on inputs ---- for f in "${INPUTS[@]}"; do [[ -f "$f" ]] || { echo "ERROR: input not found: $f" >&2; exit 1; } done if [[ $MERGE -eq 1 || $SLOP -gt 0 ]]; then command -v bedtools >/dev/null 2>&1 \ || { echo "ERROR: --merge/--slop require 'bedtools' on PATH" >&2; exit 1; } fi if [[ $SLOP -gt 0 && $MERGE -ne 1 ]]; then echo "ERROR: --slop requires --merge (expanded intervals need to be merged to stay collapsed)" >&2 exit 2 fi # ---- work in a tempdir ---- TMPDIR_LOCAL="$(mktemp -d)" trap 'rm -rf "$TMPDIR_LOCAL"' EXIT CAT="$TMPDIR_LOCAL/cat.bed" SORTED="$TMPDIR_LOCAL/sorted.bed" GENOME_TSV="$TMPDIR_LOCAL/genome.tsv" # ---- optional: parse clip-genome file into a flat chromlength TSV ---- # # Accepts three input shapes; we auto-detect: # .fai : namelenoffsetlinebaseslinewidth # genome tsv : namelen (optional extra cols ignored) # tracks/chr : >chrN AC:... LN:NNNN ... (fasta-header dump) if [[ -n "$CLIP" ]]; then [[ -f "$CLIP" ]] || { echo "ERROR: --clip file not found: $CLIP" >&2; exit 1; } awk -v OFS='\t' ' /^>/ { name=$1; sub(/^>/, "", name) ln="" for (i=2;i<=NF;i++) if ($i ~ /^LN:/) { ln=substr($i,4); break } if (ln!="" && ln+0>0) print name, ln next } /^[[:space:]]*$/ {next} /^[[:space:]]*#/ {next} { # .fai or 2-col genome. col1=name, col2=length. if ($2 ~ /^[0-9]+$/ && $2+0 > 0) print $1, $2 } ' "$CLIP" > "$GENOME_TSV" CLIP_N="$(wc -l < "$GENOME_TSV" | awk '{print $1}')" [[ "$CLIP_N" -gt 0 ]] || { echo "ERROR: --clip file $CLIP has no usable (name, length) entries" >&2; exit 1; } log "combine_blacklists.sh: clip genome loaded from $CLIP ($CLIP_N contigs)" fi log "combine_blacklists.sh: building $OUT from ${#INPUTS[@]} source(s)" # ---- step 1: concatenate with a 5th-column source tag ---- : > "$CAT" for f in "${INPUTS[@]}"; do src="$(basename "$f")" # Drop blank / comment / UCSC-header lines. For each record, collapse leading # whitespace and ensure we end up tab-separated. Keep cols 1-3, promote any # existing col 4 to the label, and append src as col 5. awk -v src="$src" ' BEGIN{OFS="\t"} /^[[:space:]]*$/ {next} /^[[:space:]]*#/ {next} /^[[:space:]]*(track|browser)[[:space:]]/ {next} { # Normalize: the input may already be tab-separated (BED spec) or # whitespace-separated. Use awk default FS (runs of whitespace) but # write tabs on output. chr=$1; start=$2; end=$3 if (start !~ /^[0-9]+$/ || end !~ /^[0-9]+$/) next label="" if (NF >= 4) { label=$4 for (i=5;i<=NF;i++) label=label" "$i } if (label=="") print chr, start, end, "-", src else print chr, start, end, label, src } ' "$f" >> "$CAT" log " + $(printf "%-45s" "$src") $(wc -l < "$f" | awk '{print $1}') lines" done RAW_LINES="$(wc -l < "$CAT" | awk '{print $1}')" log " = $RAW_LINES raw intervals before sort/merge" # ---- step 2: sort ---- # LC_ALL=C to keep sort output stable across locales and compatible with # bedtools' lexicographic chrom ordering. LC_ALL=C sort -k1,1 -k2,2n "$CAT" > "$SORTED" # ---- step 2b: optional clip-to-genome ---- # # Applied BEFORE merge and slop so downstream steps see real coordinates. # Intervals on unknown contigs are passed through unchanged (with a single # warning). Intervals whose start is beyond the contig length are dropped; # intervals whose end overshoots are clipped to the contig length. if [[ -n "$CLIP" ]]; then CLIPPED="$TMPDIR_LOCAL/clipped.bed" awk -v OFS='\t' -v genomefile="$GENOME_TSV" ' BEGIN { while ((getline < genomefile) > 0) { len[$1] = $2 } close(genomefile) dropped=0; clipped=0; passthrough=0; unknown_n=0 } { chr=$1; s=$2; e=$3 if (!(chr in len)) { if (!(chr in unknown_seen)) { unknown_seen[chr]=1; unknown_n++ } passthrough++ print next } L = len[chr] if (s+0 >= L) { dropped++; next } if (e+0 > L) { e = L; clipped++ } $2=s; $3=e print } END { fmt=" · clip: %d clipped to contig length, %d dropped past contig end, %d intervals on %d unknown contig(s) passed through\n" printf fmt, clipped, dropped, passthrough, unknown_n > "/dev/stderr" if (unknown_n > 0) { n=0 for (c in unknown_seen) { if (n < 5) printf " · unknown contig example: %s\n", c > "/dev/stderr" n++ } if (unknown_n > 5) printf " · ... (%d unknown contigs total)\n", unknown_n > "/dev/stderr" } } ' "$SORTED" > "$CLIPPED" SORTED="$CLIPPED" fi # ---- step 3: emit ---- if [[ $MERGE -eq 1 ]]; then # bedtools merge collapses overlapping / touching intervals. We carry the # source tag (col 5) into the collapsed output as a comma-separated set # of contributing sources via -c 5 -o distinct; and also collapse the # original labels via col 4 so downstream tools still see a human-readable # label column. # # Layout of the intermediate we feed to bedtools: # chr start end label src # After merge with -c 4,5 -o distinct,distinct we get: # chr start end label_set src_set if [[ $SLOP -gt 0 ]]; then GEN="$TMPDIR_LOCAL/genome.tsv" # Try to derive a genome file from the first input's chroms as max(end). # This is a permissive fallback; if you have a real .fai / .genome file # available, you can swap this with `bedtools slop -g your.genome`. awk 'BEGIN{OFS="\t"} {if($3>m[$1]) m[$1]=$3} END{for (k in m) print k, m[k]}' \ "$SORTED" > "$GEN" SLOPPED="$TMPDIR_LOCAL/slopped.bed" bedtools slop -i "$SORTED" -g "$GEN" -b "$SLOP" > "$SLOPPED" LC_ALL=C sort -k1,1 -k2,2n "$SLOPPED" > "$SORTED" log " · slopped +/-${SLOP}bp (genome inferred from max end per chrom)" fi MERGED="$TMPDIR_LOCAL/merged.bed" bedtools merge -i "$SORTED" -d "$MERGE_DIST" -c 4,5 -o distinct,distinct \ > "$MERGED" MERGED_LINES="$(wc -l < "$MERGED" | awk '{print $1}')" log " · bedtools merge (d=$MERGE_DIST) : $RAW_LINES -> $MERGED_LINES intervals" if [[ $NO_LABEL -eq 1 ]]; then cut -f1-3 "$MERGED" > "$OUT" else # 5 cols: chr start end label-set source-set cp "$MERGED" "$OUT" fi else if [[ $NO_LABEL -eq 1 ]]; then cut -f1-3 "$SORTED" > "$OUT" else # 5 cols: chr start end label src (pre-merge, duplicates preserved) cp "$SORTED" "$OUT" fi fi FINAL_LINES="$(wc -l < "$OUT" | awk '{print $1}')" FINAL_BP="$(awk 'BEGIN{s=0} {s+=$3-$2} END{print s+0}' "$OUT")" log "combine_blacklists.sh: wrote $OUT ($FINAL_LINES intervals, $(printf "%'d" "$FINAL_BP") bp covered)" # Sanity check: the human genome is ~3.1 Gbp (~3.2 Gbp incl. alts). If the # reported coverage is larger than a loose 10 Gbp threshold, the input almost # certainly contains synthetic "end-of-contig" sentinels (e.g. end=250000000 # on short alt contigs) and the user should rerun with --clip GENOME to get # a meaningful number. if [[ $FINAL_BP -gt 10000000000 ]]; then log "" log "WARNING: $(printf "%'d" $FINAL_BP) bp is larger than any reasonable reference." if [[ -z "$CLIP" ]]; then log " Likely cause: an input BED uses oversized end coordinates as a 'whole" log " contig' shorthand (e.g. end=250000000 on short alt contigs). Rerun" log " with --clip tracks/chr (or a .fai / genome tsv) to clip each" log " interval to its real contig length before the bp tally." else log " --clip was used; the oversize is probably legitimate (very large" log " genome) or caused by intervals on contigs missing from your clip" log " genome file — check the 'unknown contig' lines above." fi fi ================================================ FILE: scripts/extract_by_qname.sh ================================================ #!/bin/bash # ============================================================ # Extract all reads from a target BAM whose QNAMEs appear in # a query BAM. # # Both inputs can be coordinate-sorted. We extract QNAMEs from # the query BAM into a hash set, then stream the target BAM and # keep any record whose QNAME is in the set. No requirement that # the BAMs are sorted the same way, or at all. # # Usage: # ./extract_by_qname.sh # # Example: # ./extract_by_qname.sh matches.bam /mnt/ssd/tumor.recal.bam out.bam # ============================================================ set -euo pipefail if [ $# -ne 3 ]; then echo "Usage: $0 " >&2 echo " Extracts from target.bam all reads whose QNAME appears" >&2 echo " in query.bam. Writes sorted, indexed BAM to output.bam." >&2 exit 1 fi QUERY_BAM="$1" TARGET_BAM="$2" OUT_BAM="$3" THREADS=${THREADS:-8} # ---- Sanity checks ---- for f in "$QUERY_BAM" "$TARGET_BAM"; do if [ ! -f "$f" ]; then echo "ERROR: BAM not found: $f" >&2 exit 1 fi done if ! command -v samtools >/dev/null 2>&1; then echo "ERROR: samtools not found in PATH" >&2 exit 1 fi # ---- Use a scratch dir for intermediate files ---- TMPDIR=$(mktemp -d -t extract_qname.XXXXXX) trap "rm -rf $TMPDIR" EXIT QNAME_LIST="$TMPDIR/qnames.txt" echo "Temp dir: $TMPDIR" >&2 # ---- Step 1: extract unique QNAMEs from query BAM ---- echo "[1/3] Extracting QNAMEs from $QUERY_BAM..." >&2 samtools view -@ "$THREADS" "$QUERY_BAM" \ | awk '{print $1}' \ | sort -u \ > "$QNAME_LIST" N_QNAMES=$(wc -l < "$QNAME_LIST") echo " Found $N_QNAMES unique QNAMEs" >&2 if [ "$N_QNAMES" -eq 0 ]; then echo "ERROR: No QNAMEs found in query BAM" >&2 exit 1 fi # ---- Step 2: stream target BAM, filter by QNAME ---- echo "[2/3] Filtering $TARGET_BAM..." >&2 # Use awk with a hash lookup - O(1) per read, linear in target BAM size samtools view -@ "$THREADS" -h "$TARGET_BAM" \ | awk -v list="$QNAME_LIST" ' BEGIN { while ((getline line < list) > 0) { qnames[line] = 1 } close(list) } /^@/ { print; next } ($1 in qnames) { print } ' \ | samtools view -@ "$THREADS" -b -o "$TMPDIR/unsorted.bam" - # ---- Step 3: sort and index ---- echo "[3/3] Sorting and indexing output..." >&2 samtools sort -@ "$THREADS" -o "$OUT_BAM" "$TMPDIR/unsorted.bam" samtools index -@ "$THREADS" "$OUT_BAM" # ---- Report ---- N_OUT=$(samtools view -c "$OUT_BAM") echo "" >&2 echo "Done." >&2 echo " Query QNAMEs: $N_QNAMES" >&2 echo " Output reads: $N_OUT" >&2 echo " (Output includes all alignments per QNAME - primary, secondary," >&2 echo " supplementary, and both mates of pairs.)" >&2 echo " Output: $OUT_BAM + ${OUT_BAM%.bam}.bam.bai" >&2 ================================================ FILE: scripts/extract_discordants.sh ================================================ #!/bin/bash prefix=$1 ##prefix="${1%%.*}" /usr/bin/samtools view -h ${prefix}.weird.bam | grep -E '^@|DC:Z' | /usr/bin/samtools view -b -o tmp.filtered.bam /usr/bin/samtools sort -o ${prefix}.dc.bam tmp.filtered.bam /usr/bin/samtools index ${prefix}.dc.bam rm tmp.filtered.bam TARGET=$2 if [[ -n "$TARGET" ]]; then /usr/bin/samtools view -h ${prefix}.dc.bam | \ awk -v pat="${TARGET}" 'BEGIN{OFS="\t"} /^@/ {print; next} $0 ~ pat {print}' | \ /usr/bin/samtools view -b -o dc.${TARGET}.bam /usr/bin/samtools index dc.${TARGET}.bam fi ================================================ FILE: scripts/extract_pairs_by_seq.sh ================================================ #!/bin/bash # ============================================================ # Extract read pairs from a BAM where either mate contains any # of the given sequences (or their reverse complements). # # Two-pass approach on the target BAM: # Pass 1: stream through BAM, collect QNAMEs of reads whose # SEQ matches any query sequence or its reverse complement # Pass 2: stream through BAM again, extract ALL reads (both mates, # plus supplementary/secondary) whose QNAME was collected # # Usage: # ./extract_pairs_by_seq.sh [seq2 ...] # # Example: # ./extract_pairs_by_seq.sh tumor.bam fusion_reads.bam \ # ACGTACGTACGT TTACGATCGATC # ============================================================ set -euo pipefail # ---- Args ---- if [ $# -lt 3 ]; then echo "Usage: $0 [seq2 ...]" >&2 echo " Extracts read pairs where either mate matches any sequence" >&2 echo " (or its reverse complement)." >&2 echo " Output: sorted, indexed BAM + BAI." >&2 exit 1 fi TARGET_BAM="$1" OUT_BAM="$2" shift 2 SEQS=("$@") THREADS=${THREADS:-8} AWK_BIN=$(command -v mawk || command -v awk) # ---- Sanity checks ---- if [ ! -f "$TARGET_BAM" ]; then echo "ERROR: Target BAM not found: $TARGET_BAM" >&2 exit 1 fi if ! command -v samtools >/dev/null 2>&1; then echo "ERROR: samtools not found in PATH" >&2 exit 1 fi # ---- Scratch dir ---- TMPDIR=$(mktemp -d -t extract_pairs.XXXXXX) trap "rm -rf $TMPDIR" EXIT QNAME_LIST="$TMPDIR/qnames.txt" echo "Target: $TARGET_BAM" >&2 echo "Output: $OUT_BAM" >&2 echo "Temp: $TMPDIR" >&2 echo "Awk: $AWK_BIN" >&2 echo "Threads: $THREADS" >&2 echo "" >&2 # ---- Build combined regex: seq1|revcomp1|seq2|revcomp2|... ---- revcomp() { echo "$1" | tr 'acgtnACGTN' 'tgcanTGCAN' | rev } PATTERNS=() echo "Query sequences (with reverse complements):" >&2 for seq in "${SEQS[@]}"; do seq_up=$(echo "$seq" | tr 'a-z' 'A-Z' | tr -d '[:space:]') rc=$(revcomp "$seq_up") PATTERNS+=("$seq_up" "$rc") echo " $seq_up (rc: $rc)" >&2 done PATTERN=$(IFS='|'; echo "${PATTERNS[*]}") echo "" >&2 # ---- PASS 1: find QNAMEs whose SEQ matches ---- echo "[Pass 1/2] Scanning $TARGET_BAM for matching sequences..." >&2 samtools view -@ "$THREADS" "$TARGET_BAM" \ | "$AWK_BIN" -v pat="$PATTERN" '$10 ~ pat {print $1}' \ | sort -u \ > "$QNAME_LIST" N_QNAMES=$(wc -l < "$QNAME_LIST") echo " Matching QNAMEs: $N_QNAMES" >&2 if [ "$N_QNAMES" -eq 0 ]; then echo "No matches found. Exiting without creating output." >&2 exit 0 fi # ---- PASS 2: extract all alignments for those QNAMEs (both mates) ---- echo "[Pass 2/2] Extracting all alignments for matching QNAMEs..." >&2 samtools view -@ "$THREADS" -h "$TARGET_BAM" \ | "$AWK_BIN" -v list="$QNAME_LIST" ' BEGIN { while ((getline line < list) > 0) { qnames[line] = 1 } close(list) } /^@/ { print; next } ($1 in qnames) { print } ' \ | samtools view -@ "$THREADS" -b -o "$TMPDIR/unsorted.bam" - # ---- Sort and index ---- echo "Sorting and indexing..." >&2 samtools sort -@ "$THREADS" -o "$OUT_BAM" "$TMPDIR/unsorted.bam" samtools index -@ "$THREADS" "$OUT_BAM" # ---- Report ---- N_OUT=$(samtools view -c "$OUT_BAM") N_PRIMARY=$(samtools view -c -F 2304 "$OUT_BAM") # exclude secondary + supplementary echo "" >&2 echo "Done." >&2 echo " Matching QNAMEs (read pairs): $N_QNAMES" >&2 echo " Total alignments in output: $N_OUT" >&2 echo " Primary alignments (both mates): $N_PRIMARY" >&2 echo " Output: $OUT_BAM + ${OUT_BAM%.bam}.bam.bai" >&2 ================================================ FILE: scripts/filter_contig_supporting_reads.sh ================================================ #!/usr/bin/env bash # # filter_contig_supporting_reads.sh # # Filter a svaba *.corrected.bam down to just the reads whose r2c (read-to- # contig) BWA alignment landed on a single named contig. The contig name is # matched against the `bi` aux tag that svaba writes onto each corrected # read (one tag value per r2c hit, comma-separated). Output is a coordinate- # sorted+indexed BAM for easy IGV inspection. set -euo pipefail PROG="$(basename "$0")" usage() { cat <&2; usage >&2; exit 2 ;; *) POS+=("$1"); shift ;; esac done # Positional fallback: ID CONTIG if [[ -z "$ID" && ${#POS[@]} -ge 1 ]]; then ID="${POS[0]}"; fi if [[ -z "$CONTIG" && ${#POS[@]} -ge 2 ]]; then CONTIG="${POS[1]}"; fi if [[ -z "$ID" || -z "$CONTIG" ]]; then echo "${PROG}: missing required argument(s)" >&2 usage >&2 exit 2 fi # --- resolve input/output paths -------------------------------------------- if [[ "$ID" == *.bam ]]; then IN_BAM="$ID" ID_BASE="${ID%.corrected.bam}" ID_BASE="${ID_BASE%.bam}" else IN_BAM="${ID}.corrected.bam" ID_BASE="$ID" fi if [[ ! -f "$IN_BAM" ]]; then echo "${PROG}: input BAM not found: ${IN_BAM}" >&2 exit 1 fi if [[ -z "$OUT" ]]; then OUT="${ID_BASE}.${CONTIG}.bam" fi # --- check tools ------------------------------------------------------------ command -v samtools >/dev/null 2>&1 || { echo "${PROG}: samtools not found on PATH" >&2; exit 127; } # --- filter ----------------------------------------------------------------- echo "${PROG}: ID = ${ID_BASE}" >&2 echo "${PROG}: input = ${IN_BAM}" >&2 echo "${PROG}: contig = ${CONTIG}" >&2 echo "${PROG}: output = ${OUT}" >&2 echo "${PROG}: threads = ${THREADS}" >&2 samtools view -h -e "[bi]=~\"${CONTIG}\"" "${IN_BAM}" \ | samtools sort -@"${THREADS}" -o "${OUT}" - samtools index "${OUT}" echo "${PROG}: wrote ${OUT} (+ ${OUT}.bai)" >&2 ================================================ FILE: scripts/gcloud_teardown.sh ================================================ #!/usr/bin/env bash # # gcloud_teardown.sh — kill svaba cloud workers and clean up the bucket. # # Usage: # gcloud_teardown.sh [options] # # --id STR analysis ID (default: my_run) # --partitions N number of workers (default: 5) # --zone ZONE GCP zone (default: us-central1-a) # --bucket gs://... GCS bucket to clean (default: gs://osteosarc-private/svaba-run) # --keep-bucket don't delete bucket contents # -h, --help this message # set -euo pipefail ID="my_run" PARTITIONS=5 ZONE="us-central1-a" BUCKET="gs://osteosarc-private/svaba-run" CLEAN_BUCKET=1 while [[ $# -gt 0 ]]; do case "$1" in --id) ID="$2"; shift 2 ;; --partitions) PARTITIONS="$2"; shift 2 ;; --zone) ZONE="$2"; shift 2 ;; --bucket) BUCKET="$2"; shift 2 ;; --keep-bucket) CLEAN_BUCKET=0; shift ;; -h|--help) sed -n '2,14p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; *) echo "unknown option: $1" >&2; exit 2 ;; esac done GCP_ID=$(echo "$ID" | tr '[:upper:]' '[:lower:]' | tr '_' '-' | sed 's/[^a-z0-9-]//g') # 1. Delete worker VMs echo "deleting $PARTITIONS workers (${GCP_ID})..." for i in $(seq 1 "$PARTITIONS"); do vm="svaba-${GCP_ID}-worker-${i}" if gcloud compute instances describe "$vm" --zone="$ZONE" &>/dev/null; then echo " deleting $vm" gcloud compute instances delete "$vm" --zone="$ZONE" --quiet & else echo " $vm not found, skipping" fi done wait # 2. Clean up the bucket if [[ $CLEAN_BUCKET -eq 1 ]]; then echo "cleaning bucket ${BUCKET}/..." gsutil -m rm "${BUCKET}/**" 2>/dev/null || true echo "bucket cleaned" else echo "keeping bucket contents (--keep-bucket)" fi echo "teardown complete" ================================================ FILE: scripts/mosdepth_lowmapq_blacklist.sh ================================================ #!/usr/bin/env bash # # mosdepth_lowmapq_blacklist.sh — flag regions dominated by multi-mappers. # # Given paired mosdepth regions.bed.gz outputs, one unfiltered by MAPQ and # one MAPQ-filtered, emit a BED of genomic windows where the fraction of # reads passing the MAPQ filter is low enough that the locus is effectively # "unmapped" for any caller that only trusts unique placements. These are # prime candidate blacklist intervals for svaba. # # The input pair must come from the SAME BAM with the SAME --by, differing # only in --mapq. Typical generation: # # mosdepth --by 1000 --fast-mode --mapq 0 --threads 4 unf SAMPLE.bam # mosdepth --by 1000 --fast-mode --mapq 30 --threads 4 filt SAMPLE.bam # # mosdepth writes half-open 0-based BED with 4 columns: # chrom start end mean_depth # # This script joins the two files row-by-row (they are bin-aligned), computes # ratio = filt_mean_depth / unf_mean_depth # and flags windows that pass BOTH of: # unf_mean_depth >= --min-cov (skip near-empty bins where 0/0 dominates) # ratio < --max-ratio (most reads are multi-mappers) # # Flagged per-bin rows are then bedtools-merged with --merge-gap into # contiguous intervals, carrying the worst ratio and peak coverage forward # so the merged output has useful label columns. # # The merged BED plugs straight into `combine_blacklists.sh` alongside your # other component BEDs (tracks/hg38.blacklist.sorted.bed, high_runtime.bed, # rmsk.simple_repeat.bed, etc.). # # Usage: # mosdepth_lowmapq_blacklist.sh [OPTIONS] UNF.regions.bed.gz FILT.regions.bed.gz # # Options: # --min-cov N minimum unfiltered mean depth for a bin to be # considered (default 10). Bins below this get skipped # entirely — you do not want a 0/1 accidental flag on # an empty region. # --max-ratio R flag if filt/unf < R (default 0.5). Lower = stricter. # Typical blacklist tuning range is 0.3 – 0.7. # --merge-gap N bedtools merge -d value (default 1000). Flagged bins # within N bp of each other get coalesced into one # interval. # --out PREFIX output prefix (default ./lowmapq). # --dump-per-region also emit ${PREFIX}.per_region.tsv.gz with every # considered bin (chr start end unf filt ratio). Off # by default — on a WGS BAM this file is ~coverage- # file-sized. # -h | --help show this help # # Outputs (always): # ${PREFIX}.flagged.bed one row per flagged bin, cols: # chr start end ratio unf_cov_rounded # ${PREFIX}.flagged.merged.bed bedtools-merged intervals, cols: # chr start end min_ratio max_cov # (min_ratio = worst ratio inside the merged # block; max_cov = peak unfiltered coverage) # ${PREFIX}.summary.txt coverage + flag tallies # # Outputs (optional): # ${PREFIX}.per_region.tsv.gz with --dump-per-region # # Requires: gzip, awk, sort, bedtools on PATH. set -euo pipefail MIN_COV=10 MAX_RATIO=0.5 MERGE_GAP=1000 OUT_PREFIX=lowmapq DUMP_PER=0 usage() { cat <<'EOF' mosdepth_lowmapq_blacklist.sh — flag regions dominated by multi-mappers. Usage: mosdepth_lowmapq_blacklist.sh [OPTIONS] UNF.regions.bed.gz FILT.regions.bed.gz The two inputs must come from the SAME BAM with the SAME --by on mosdepth, differing only in --mapq. Example generation: mosdepth --by 1000 --fast-mode --mapq 0 --threads 4 unf sample.bam mosdepth --by 1000 --fast-mode --mapq 30 --threads 4 filt sample.bam Options: --min-cov N minimum unf mean-depth for a bin to be considered (default 10) --max-ratio R flag if filt/unf < R (default 0.5); 0.3 stricter, 0.7 looser --merge-gap N bedtools merge -d value (default 1000 bp) --out PREFIX output prefix (default lowmapq) --dump-per-region also write ${PREFIX}.per_region.tsv.gz -h, --help show this message Outputs: ${PREFIX}.flagged.bed flagged bins: chr start end ratio unf_cov ${PREFIX}.flagged.merged.bed merged: chr start end min_ratio max_cov ${PREFIX}.summary.txt coverage + flag tallies See the header comment in this script for the full rationale / column docs. EOF exit 0 } while [[ $# -gt 0 ]]; do case "$1" in --min-cov) MIN_COV=$2; shift 2 ;; --max-ratio) MAX_RATIO=$2; shift 2 ;; --merge-gap) MERGE_GAP=$2; shift 2 ;; --out) OUT_PREFIX=$2; shift 2 ;; --dump-per-region) DUMP_PER=1; shift ;; -h|--help) usage ;; --) shift; break ;; -*) echo "unknown option: $1" >&2; exit 2 ;; *) break ;; esac done if [[ $# -ne 2 ]]; then echo "usage: $0 [opts] UNF.regions.bed.gz FILT.regions.bed.gz" >&2 echo " (try -h for full docs)" >&2 exit 2 fi UNF=$1 FILT=$2 for t in gzip awk sort bedtools; do command -v "$t" >/dev/null || { echo "ERROR: $t not on PATH" >&2; exit 1; } done for f in "$UNF" "$FILT"; do [[ -f $f ]] || { echo "ERROR: file not found: $f" >&2; exit 1; } done # Make sure the output directory exists if the user passed a pathy prefix. OUT_DIR=$(dirname -- "$OUT_PREFIX") [[ -d "$OUT_DIR" ]] || mkdir -p "$OUT_DIR" echo "mosdepth_lowmapq_blacklist:" echo " unf=$UNF" echo " filt=$FILT" echo " min_cov=$MIN_COV max_ratio=$MAX_RATIO merge_gap=$MERGE_GAP" echo " out_prefix=$OUT_PREFIX dump_per_region=$DUMP_PER" # ---- 1. Join and filter ----------------------------------------------------- # Both mosdepth files were emitted from the same --by on the same reference, # so their row-1..row-N bins are identical. We paste them and sanity-check # the coords on every row — a mismatch usually means the user accidentally # paired files from different BAMs or different --by values, which makes the # ratio meaningless. flagged="${OUT_PREFIX}.flagged.bed" tmp_flag=$(mktemp) tmp_per=$(mktemp) trap 'rm -f "$tmp_flag" "$tmp_per" "${tmp_per}.gz"' EXIT paste <(gzip -dc -- "$UNF") <(gzip -dc -- "$FILT") \ | awk -F'\t' -v OFS='\t' \ -v mc="$MIN_COV" -v mr="$MAX_RATIO" \ -v flag="$tmp_flag" -v per="$tmp_per" -v dump="$DUMP_PER" ' BEGIN { total = 0 considered = 0 flagged_cnt = 0 } { # cols 1-4: unf (chrom start end meanDepth) # cols 5-8: filt (chrom start end meanDepth) if ($1 != $5 || $2 != $6 || $3 != $7) { printf "ERROR: row %d coordinate mismatch: %s:%s-%s vs %s:%s-%s\n" \ " likely --by mismatch or different BAMs.\n", NR, $1, $2, $3, $5, $6, $7 > "/dev/stderr" exit 1 } total++ u = $4 + 0 f = $8 + 0 if (u < mc) next considered++ r = (u > 0 ? f / u : 0) if (dump == 1) { printf "%s\t%s\t%s\t%.3f\t%.3f\t%.4f\n", $1, $2, $3, u, f, r > per } if (r < mr) { # Col 4 = ratio (merge-friendly numeric), col 5 = rounded unf cov # so a `bedtools merge -c 4,5 -o min,max` gives "worst ratio in # block / peak coverage in block" — both useful for downstream # inspection / QC. printf "%s\t%s\t%s\t%.4f\t%d\n", $1, $2, $3, r, int(u + 0.5) > flag flagged_cnt++ } } END { printf "scan: rows_total=%d rows_considered=%d rows_flagged=%d\n", total, considered, flagged_cnt > "/dev/stderr" } ' # ---- 2. Sort + write per-bin flagged BED ------------------------------------ # bedtools merge requires a sorted BED. mosdepth output is usually already in # BAM-SQ order (which is often `chr1,chr2,...,chrX,chrY,chrM`), but we don't # rely on that — re-sort with LC_ALL=C for deterministic output. LC_ALL=C sort -k1,1 -k2,2n "$tmp_flag" > "$flagged" n_flag=$(wc -l < "$flagged" | tr -d ' ') echo "[1/3] wrote $flagged ($n_flag flagged bins)" # ---- 3. Merge --------------------------------------------------------------- merged="${OUT_PREFIX}.flagged.merged.bed" if [[ $n_flag -gt 0 ]]; then bedtools merge -i "$flagged" -d "$MERGE_GAP" \ -c 4,5 -o min,max > "$merged" else : > "$merged" fi n_merged=$(wc -l < "$merged" | tr -d ' ') echo "[2/3] wrote $merged ($n_merged merged intervals)" # ---- 4. Summary ------------------------------------------------------------- summary="${OUT_PREFIX}.summary.txt" flag_bp=$(awk '{s+=$3-$2} END {print s+0}' "$flagged") merged_bp=$(awk '{s+=$3-$2} END {print s+0}' "$merged") { echo "mosdepth_lowmapq_blacklist ($(date -u +%Y-%m-%dT%H:%M:%SZ))" echo "inputs:" echo " unf: $UNF" echo " filt: $FILT" echo "parameters:" echo " min_cov: $MIN_COV" echo " max_ratio: $MAX_RATIO" echo " merge_gap: $MERGE_GAP" echo "" printf "flagged bins: %8d (%12d bp, %7.1f Mb)\n" \ "$n_flag" "$flag_bp" "$(awk -v x="$flag_bp" 'BEGIN{printf "%.1f", x/1e6}')" printf "merged intervals: %8d (%12d bp, %7.1f Mb)\n" \ "$n_merged" "$merged_bp" "$(awk -v x="$merged_bp" 'BEGIN{printf "%.1f", x/1e6}')" echo "" echo "Top 20 widest merged intervals:" sort -k1,1 -k2,2n "$merged" \ | awk 'BEGIN{OFS="\t"} {print $1, $2, $3, $3-$2, $4, $5}' \ | sort -k4,4nr \ | head -20 \ | awk 'BEGIN{OFS="\t"; print "#chrom","start","end","width","min_ratio","max_cov"} {print}' } > "$summary" echo "[3/3] wrote $summary" # ---- 5. Optional per-region dump ------------------------------------------- if [[ $DUMP_PER -eq 1 ]]; then out="${OUT_PREFIX}.per_region.tsv.gz" # Prepend header, then gzip. Keep it streaming so we don't materialize the # full file uncompressed. { printf "#chrom\tstart\tend\tunf_cov\tfilt_cov\tratio\n"; cat "$tmp_per"; } \ | gzip -c > "$out" echo " wrote $out" fi echo cat "$summary" ================================================ FILE: scripts/plot_learn.sh ================================================ #!/usr/bin/env bash # plot_learn.sh — plot per-RG insert-size distributions from svaba learn data # # Usage: # plot_learn.sh [output.pdf] # # If the argument ends in .tsv or .tsv.gz, treat it as the learn file directly. # Otherwise treat it as a run ID and glob for ${ID}.*.learn.tsv.gz in the # current directory. # # Output PDF defaults to ${ID}.learn.pdf or ${stem}.learn.pdf. # # Requires: Rscript, R packages ggplot2 + data.table (both on CRAN). set -euo pipefail usage() { cat < [output.pdf] ID_or_file Either a svaba run ID (will find *.learn.tsv.gz files) or a path to a .tsv / .tsv.gz learn file directly. output.pdf Optional output path. Defaults to .learn.pdf Examples: $(basename "$0") my_run $(basename "$0") my_run.tumor.learn.tsv.gz $(basename "$0") my_run custom_output.pdf EOF exit 1 } [[ $# -lt 1 ]] && usage INPUT="$1" OUTPDF="${2:-}" # Determine the list of learn files FILES=() ID="" if [[ "$INPUT" == *.tsv.gz || "$INPUT" == *.tsv ]]; then # Direct file path [[ -f "$INPUT" ]] || { echo "ERROR: file not found: $INPUT" >&2; exit 1; } FILES=("$INPUT") # derive stem for default output name stem=$(basename "$INPUT") stem="${stem%.gz}" stem="${stem%.tsv}" stem="${stem%.learn}" ID="$stem" else # Treat as run ID — glob for learn files ID="$INPUT" shopt -s nullglob FILES=( ${ID}.*.learn.tsv.gz ${ID}.learn.tsv.gz ) shopt -u nullglob if [[ ${#FILES[@]} -eq 0 ]]; then echo "ERROR: no learn files found for ID '$ID'" >&2 echo " looked for: ${ID}.*.learn.tsv.gz, ${ID}.learn.tsv.gz" >&2 exit 1 fi fi [[ -z "$OUTPDF" ]] && OUTPDF="${ID}.learn.pdf" echo "Input files: ${FILES[*]}" echo "Output PDF: $OUTPDF" # Build a comma-separated list of files for R (no quoting — paths with # commas would break, but that's exotic enough to not worry about) FILE_LIST=$(IFS=,; echo "${FILES[*]}") LEARN_FILES="$FILE_LIST" Rscript --vanilla - "$OUTPDF" <<'REOF' suppressPackageStartupMessages({ library(data.table) library(ggplot2) }) args <- commandArgs(trailingOnly = TRUE) outpdf <- args[1] # The file list is passed via environment variable file_list <- strsplit(Sys.getenv("LEARN_FILES"), ",")[[1]] # Read and combine all files dt <- rbindlist(lapply(file_list, function(f) { d <- fread(f, sep = "\t") # add a source column from the filename stem <- basename(f) stem <- sub("\\.learn\\.tsv\\.gz$", "", stem) stem <- sub("\\.learn\\.tsv$", "", stem) d[, source := stem] d })) cat(sprintf("Loaded %s isize observations across %d RGs from %d files\n", format(nrow(dt), big.mark = ","), uniqueN(dt$rg), length(file_list))) # Summary stats per RG per source stats <- dt[, .( n = .N, mean = mean(isize), median = as.double(median(isize)), sd = sd(isize), p01 = quantile(isize, 0.01), p99 = quantile(isize, 0.99) ), by = .(source, rg)] cat("\nPer-RG summary:\n") print(stats[order(source, rg)]) # Trim extreme tails for plotting (1st-99th percentile per RG) dt_trim <- dt[, .SD[isize >= quantile(isize, 0.01) & isize <= quantile(isize, 0.99)], by = .(source, rg)] # Create label with n for facets dt_trim[, facet_label := paste0(rg, " (n=", format(.N, big.mark = ","), ")"), by = .(source, rg)] # Determine a reasonable number of columns for facet_wrap n_facets <- uniqueN(dt_trim[, paste(source, rg)]) ncol_facet <- min(4, ceiling(sqrt(n_facets))) # Plot p <- ggplot(dt_trim, aes(x = isize, fill = source)) + geom_histogram(bins = 80, alpha = 0.7, color = "grey30", linewidth = 0.2) + facet_wrap(~ facet_label, scales = "free_y", ncol = ncol_facet) + labs( title = "Insert size distribution per read group", subtitle = paste("Sources:", paste(unique(dt_trim$source), collapse = ", ")), x = "Insert size (bp)", y = "Count", fill = "BAM" ) + theme_minimal(base_size = 10) + theme( strip.text = element_text(size = 7), legend.position = if (uniqueN(dt_trim$source) > 1) "bottom" else "none" ) # Size the PDF to fit the facets n_rows <- ceiling(n_facets / ncol_facet) pdf_h <- max(4, 1.5 + n_rows * 2.5) pdf_w <- max(6, ncol_facet * 3) ggsave(outpdf, p, width = pdf_w, height = pdf_h, limitsize = FALSE) cat(sprintf("\nWrote %s (%d x %d inches)\n", outpdf, as.integer(pdf_w), as.integer(pdf_h))) REOF ================================================ FILE: scripts/r2c_for_contig.sh ================================================ #!/usr/bin/env bash # r2c_for_contig.sh # # Given a svaba contig name, reconstruct the per-contig read-to-contig # (r2c) alignment BAM for IGV. Uses the `bz:Z` aux tag that svaba writes # on every r2c-aligned read (cname-keyed) to pick the right reads out # of corrected.bam. # # Usage: # r2c_for_contig.sh CNAME CONTIGS_BAM CORRECTED_BAM [OUT_DIR] # # Example: # r2c_for_contig.sh c_chr12_10180001_10181001_0C \ # T2_fermi.contigs.bam T2_fermi.corrected.bam \ # r2c_debug/ # # Output (in OUT_DIR): # contig.fa single-contig reference FASTA (+ BWA & faidx indices) # reads.fq corrected reads tagged bz:Z: # r2c.bam(.bai) sorted+indexed read-to-contig BAM — load this in IGV # alongside contig.fa # # Tag semantics (v3): # bz:Z = cname list — every contig this read r2c-aligned to. This is # the right key for a per-contig read pull. # bi:Z = bp_id list — the specific variant rows this read supports # as ALT (matches r2c.txt.gz split_bps/disc_bps and bps.txt.gz # col 52). Pre-v3 this carried cnames; it no longer does. # If you want the ALT-supporter subset, set TAG=bi and pass # a bp_id as the first argument instead of a cname. set -euo pipefail if [[ $# -lt 3 ]]; then echo "usage: $0 CNAME CONTIGS_BAM CORRECTED_BAM [OUT_DIR]" >&2 exit 2 fi CNAME=$1 CONTIGS_BAM=$2 CORRECTED_BAM=$3 OUT_DIR=${4:-r2c_${CNAME}} for t in samtools bwa awk; do command -v "$t" >/dev/null || { echo "ERROR: $t not on PATH" >&2; exit 1; } done mkdir -p "$OUT_DIR" cd "$OUT_DIR" # ---- 1. Pull the contig sequence out of contigs.bam ----------------------- # svaba writes each contig as a single BAM record whose QNAME == cname. Take # SEQ as the reference. If the contig is reverse-complemented in the BAM # (FLAG & 16), revcomp it back so the coordinate system matches cname. # NB: use arithmetic bit extraction (int(flag/16)%2) instead of gawk's # `and(flag,16)` so this works with BSD awk on macOS as well as gawk. samtools view "../$CONTIGS_BAM" 2>/dev/null \ | awk -v c="$CNAME" ' BEGIN { found=0 } $1==c && !found { flag=$2+0; seq=$10 if (int(flag/16) % 2 == 1) { # revcomp n=length(seq); out="" for (i=n;i>=1;i--) { b=substr(seq,i,1) if (b=="A") out=out"T" else if (b=="T") out=out"A" else if (b=="C") out=out"G" else if (b=="G") out=out"C" else if (b=="a") out=out"t" else if (b=="t") out=out"a" else if (b=="c") out=out"g" else if (b=="g") out=out"c" else out=out"N" } seq=out } print ">"c; print seq found=1 } END { if (!found) exit 1 } ' > contig.fa || { echo "ERROR: contig $CNAME not found in $CONTIGS_BAM" >&2 exit 1 } echo "contig length: $(awk 'NR==2{print length($0)}' contig.fa) bp" # ---- 2. Build mini BWA index + faidx -------------------------------------- bwa index contig.fa 2> bwa_index.log samtools faidx contig.fa # ---- 3. Pull corrected reads tagged for this contig (boundary-aware) ------ # Default TAG=bz selects by cname (all r2c'd reads). TAG=bi selects by bp_id # (ALT-supporter subset only) — in that mode, the CNAME positional arg is # treated as a bp_id instead. See the v3 tag-semantics note in the header. TAG=${TAG:-bz} samtools view -h "../$CORRECTED_BAM" \ | awk -v c="$CNAME" -v tag="$TAG" 'BEGIN{OFS="\t"; pfx="^"tag":Z:"} /^@/ { print; next } { for (i=12;i<=NF;i++) if ($i ~ pfx) { v=substr($i,6); n=split(v,a,",") for (j=1;j<=n;j++) if (a[j]==c) { print; next } } }' \ | samtools fastq -@2 -n - > reads.fq 2> /dev/null n_reads=$(( $(wc -l < reads.fq) / 4 )) echo "reads tagged ${TAG}:Z:${CNAME}: $n_reads" if [[ "$n_reads" -eq 0 ]]; then echo "ERROR: no reads tagged for $CNAME in $CORRECTED_BAM" >&2 exit 1 fi # ---- 4. Re-align reads to the single-contig reference --------------------- # -k 15 lowers the minimum seed to pick up more partial matches on a small # reference; -a outputs secondary hits so you can spot reads that map to # multiple places on the contig (e.g. tandem repeats). Drop both if you # want svaba-equivalent alignments. bwa mem -t 4 -k 15 -a contig.fa reads.fq 2> bwa_mem.log \ | samtools sort -@4 -o r2c.bam - samtools index r2c.bam echo echo "Done. IGV: load contig.fa as Genome, then r2c.bam as track." echo "Files in $PWD:" ls -la r2c.bam r2c.bam.bai contig.fa contig.fa.fai reads.fq ================================================ FILE: scripts/search_sequence.sh ================================================ #!/bin/bash # ============================================================ # Search a BAM for reads matching any of the given sequences # (or their reverse complements) and write matches to a new BAM. # # Usage: # ./bam_grep.sh [seq2 ...] # # Example: # ./bam_grep.sh tumor.bam egfr_vIII ACTGACTGACTG TGCATGCATGCA # -> produces egfr_vIII.bam + egfr_vIII.bam.bai # ============================================================ set -euo pipefail # ---- Args ---- if [ $# -lt 3 ]; then echo "Usage: $0 [seq2 ...]" >&2 echo " Searches for each sequence and its reverse complement." >&2 echo " Output: .bam + .bam.bai" >&2 exit 1 fi INPUT_BAM="$1" OUT_PREFIX="$2" shift 2 SEQS=("$@") OUT_BAM="${OUT_PREFIX}.bam" THREADS=${THREADS:-4} # ---- Sanity checks ---- if [ ! -f "$INPUT_BAM" ]; then echo "ERROR: Input BAM not found: $INPUT_BAM" >&2 exit 1 fi if ! command -v samtools >/dev/null 2>&1; then echo "ERROR: samtools not found in PATH" >&2 exit 1 fi # ---- Build the combined regex: seq1|revcomp1|seq2|revcomp2|... ---- revcomp() { # Uppercase, complement, reverse echo "$1" | tr 'acgtnACGTN' 'tgcanTGCAN' | rev } PATTERNS=() echo "Searching for sequences (and reverse complements):" >&2 for seq in "${SEQS[@]}"; do # Uppercase and strip whitespace seq_up=$(echo "$seq" | tr 'a-z' 'A-Z' | tr -d '[:space:]') rc=$(revcomp "$seq_up") PATTERNS+=("$seq_up" "$rc") echo " $seq_up (rc: $rc)" >&2 done # Join patterns with | for egrep PATTERN=$(IFS='|'; echo "${PATTERNS[*]}") echo "" >&2 echo "Input: $INPUT_BAM" >&2 echo "Output: $OUT_BAM" >&2 echo "Threads: $THREADS" >&2 echo "" >&2 # ---- Filter ---- # samtools view streams SAM (header + reads), awk keeps headers and any read # whose sequence column (field 10) matches the pattern, samtools view -b # re-encodes BAM. samtools view -@ "$THREADS" -h "$INPUT_BAM" \ | awk -v pat="$PATTERN" ' /^@/ { print; next } $10 ~ pat { print } ' \ | samtools view -@ "$THREADS" -b -o "$OUT_BAM" - # ---- Sort (safer - preserves coordinate order for indexing) ---- # If input was already sorted, output is too (we only filter), but re-sort # defensively in case the original had unsorted regions. samtools sort -@ "$THREADS" -o "${OUT_BAM}.sorted" "$OUT_BAM" mv "${OUT_BAM}.sorted" "$OUT_BAM" # ---- Index ---- samtools index -@ "$THREADS" "$OUT_BAM" # ---- Report ---- N_READS=$(samtools view -c "$OUT_BAM") echo "Done. Matched reads: $N_READS" >&2 echo "Output: $OUT_BAM + ${OUT_BAM}.bai" >&2 ================================================ FILE: scripts/sort_and_dedupe_bps_old.sh ================================================ #!/usr/bin/env bash # # sort_and_dedupe_bps_old.sh — sort + dedup + PASS-filter for legacy # (pre-2.0) svaba bps.txt.gz files. # # Same logic as the v3 postprocess step but with auto-detected column # positions from the header row. Works on any bps.txt.gz schema as # long as the header has #chr1, confidence, and either maxlod or tlod. # # Usage: # sort_and_dedupe_bps_old.sh [options] # # -o DIR output directory (default: same as input) # -t THREADS parallel sort threads (default: 4) # -S SIZE sort buffer size (default: 4G) # -h, --help this message # # Outputs: # .sorted.txt.gz # .sorted.dedup.txt.gz # .sorted.dedup.pass.txt.gz # set -exo pipefail THREADS=4 SORT_BUFFER="4G" OUT_DIR="" print_usage() { sed -n '2,20p' "$0" | sed 's/^# \{0,1\}//'; } while [[ $# -gt 0 ]]; do case "$1" in -o) OUT_DIR="$2"; shift 2 ;; -t) THREADS="$2"; shift 2 ;; -S) SORT_BUFFER="$2"; shift 2 ;; -h|--help) print_usage; exit 0 ;; -*) echo "unknown option: $1" >&2; exit 2 ;; *) break ;; esac done if [[ $# -lt 1 ]]; then echo "usage: sort_and_dedupe_bps_old.sh [options] " >&2 exit 2 fi INPUT="$1" if [[ ! -r "$INPUT" ]]; then echo "cannot read: $INPUT" >&2 exit 1 fi # Determine reader case "$INPUT" in *.gz) READER="gzip -dc" ;; *) READER="cat" ;; esac # Derive output names BASENAME=$(basename "$INPUT" .txt.gz) BASENAME=$(basename "$BASENAME" .txt) [[ -z "$OUT_DIR" ]] && OUT_DIR=$(dirname "$INPUT") OUT_SORTED="${OUT_DIR}/${BASENAME}.sorted.txt.gz" OUT_DEDUP="${OUT_DIR}/${BASENAME}.sorted.dedup.txt.gz" OUT_PASS="${OUT_DIR}/${BASENAME}.sorted.dedup.pass.txt.gz" # Pick GNU sort if command -v gsort >/dev/null 2>&1; then SORT_BIN=gsort elif sort --version 2>&1 | grep -qi 'gnu' 2>/dev/null; then SORT_BIN=sort else echo "GNU sort not found (macOS: 'brew install coreutils' for gsort)" >&2 exit 1 fi # --- Auto-detect column positions from header --- HEADER=$($READER "$INPUT" | head -n 1 || true) if [[ "${HEADER:0:1}" != "#" ]]; then echo "ERROR: first line doesn't start with '#' — not a bps.txt.gz header?" >&2 echo " got: ${HEADER:0:80}..." >&2 exit 1 fi # Split header into array, find columns by name find_col() { local name="$1" local col col=$(echo "$HEADER" | awk -F'\t' -v name="$name" '{ for (i=1; i<=NF; i++) if ($i == name) { print i; exit } }') if [[ -z "$col" ]]; then return 1 fi echo "$col" } CONF_COL=$(find_col "confidence") || { echo "ERROR: 'confidence' column not found in header" >&2; exit 1; } # Try maxlod first (v3), then tlod (legacy) if LOD_COL=$(find_col "maxlod" 2>/dev/null); then LOD_NAME="maxlod" elif LOD_COL=$(find_col "tlod" 2>/dev/null); then LOD_NAME="tlod" else echo "ERROR: neither 'maxlod' nor 'tlod' column found in header" >&2 exit 1 fi echo "=== sort_and_dedupe_bps_old.sh ===" echo " input: $INPUT" echo " confidence: col $CONF_COL" echo " ${LOD_NAME}: col $LOD_COL" echo " sort: $SORT_BIN buffer=$SORT_BUFFER parallel=$THREADS" echo "" TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/svaba_sort_bps.XXXXXXXX") trap 'rm -rf "$TMP_DIR"' EXIT INT TERM # --- 1) sort --- echo "[1/3] sorting..." { # Emit header first, then sort the data rows printf '%s\n' "$HEADER" $READER "$INPUT" | tail -n +2 | \ LC_ALL=C "$SORT_BIN" \ -t $'\t' \ -k1,1V \ -k2,2n \ -k3,3 \ -k4,4V \ -k5,5n \ -k6,6 \ -k${LOD_COL},${LOD_COL}gr \ -S "$SORT_BUFFER" \ --parallel="$THREADS" \ -T "$TMP_DIR" } | gzip -c > "$OUT_SORTED" echo " wrote $OUT_SORTED" # --- 2) dedup by breakpoint pair (first row per key wins = highest lod) --- echo "[2/3] deduplicating..." gzip -dc "$OUT_SORTED" | awk -F'\t' -v OFS='\t' ' NR == 1 && $0 ~ /^#/ { print; next } { key = $1 FS $2 FS $3 FS $4 FS $5 FS $6 if (!(key in seen)) { seen[key] = 1; print } } ' | gzip -c > "$OUT_DEDUP" echo " wrote $OUT_DEDUP" # --- 3) PASS-filter --- echo "[3/3] PASS-filtering..." gzip -dc "$OUT_DEDUP" | awk -F'\t' -v OFS='\t' -v CCOL="$CONF_COL" ' NR == 1 && $0 ~ /^#/ { print; next } $CCOL == "PASS" { print } ' | gzip -c > "$OUT_PASS" echo " wrote $OUT_PASS" # Summary N_SORTED=$(gzip -dc "$OUT_SORTED" | tail -n +2 | wc -l) N_DEDUP=$(gzip -dc "$OUT_DEDUP" | tail -n +2 | wc -l) N_PASS=$(gzip -dc "$OUT_PASS" | tail -n +2 | wc -l) echo "" echo " sorted: $N_SORTED dedup: $N_DEDUP PASS: $N_PASS" echo "=== done ===" ================================================ FILE: scripts/sort_bps.sh ================================================ #!/usr/bin/env bash # # sort_bps.sh — sort a svaba bps.txt.gz file by (chr1, pos1, chr2, pos2, -somlod) # # Reads: ${ID}.bps.txt.gz # Writes: ${ID}.bps.sorted.txt.gz # # Preserves the leading "#chr1 ..." header row, then sorts the body by: # 1) chr1 (natural/version order) ascending # 2) pos1 (numeric) ascending # 3) chr2 (natural/version order) ascending # 4) pos2 (numeric) ascending # 5) somlod (general numeric) DESCENDING (higher first) # # The sort is external — GNU sort spills sorted chunks to a scratch directory # and merges them, so memory stays bounded even on 10+ GB inputs. The scratch # directory is auto-created with mktemp and cleaned up on exit. Works on both # Linux and macOS; on macOS you'll want GNU coreutils installed (`brew install # coreutils`) so `gsort` is available — BSD sort does not support -V / --parallel. # # Usage: # ./sort_bps.sh # ./sort_bps.sh -h | --help # # Options via environment variables (all optional): # BUFFER_SIZE per-chunk memory for sort (default: 2G) # PARALLEL threads used by the sort phase (default: 4) # INPUT_DIR where to look for the input (default: .) # OUTPUT_DIR where to write the output (default: $INPUT_DIR) # KEEP_TMP 1 = don't delete the scratch dir on exit (for debugging) # # Examples: # ./sort_bps.sh tumor_vs_normal # BUFFER_SIZE=8G PARALLEL=8 ./sort_bps.sh tumor_vs_normal # INPUT_DIR=/data/run42 OUTPUT_DIR=/tmp ./sort_bps.sh run42 # set -euo pipefail # ------------------------------------------------------------------ usage --- print_usage() { cat <<'EOF' sort_bps.sh — sort a svaba bps.txt.gz file Usage: sort_bps.sh sort_bps.sh -h | --help Reads /.bps.txt.gz Writes /.bps.sorted.txt.gz Sort keys (in order): 1. chr1 ascending (natural / version order — chr1, chr2, ..., chrX) 2. pos1 ascending 3. chr2 ascending 4. pos2 ascending 5. somlod DESCENDING (higher somatic LOD first; "NA" sorts last) Options (environment variables): BUFFER_SIZE per-chunk memory for sort (default: 2G) PARALLEL threads used by the sort phase (default: 4) INPUT_DIR where to look for the input (default: .) OUTPUT_DIR where to write the output (default: $INPUT_DIR) KEEP_TMP 1 = keep the scratch dir for debugging (default: unset) Examples: sort_bps.sh tumor_vs_normal BUFFER_SIZE=8G PARALLEL=8 sort_bps.sh tumor_vs_normal INPUT_DIR=/data/run42 OUTPUT_DIR=/tmp sort_bps.sh run42 Notes: * Uses GNU sort. On macOS install it via `brew install coreutils` — the script will pick up `gsort` automatically. BSD sort does not support -V or --parallel and will not work. * Memory is bounded by BUFFER_SIZE; scratch disk usage is roughly the uncompressed size of the input (often 6-10x the .gz size). EOF } # ---------------------------------------------------------------- args ----- if [[ $# -eq 0 ]]; then print_usage exit 1 fi case "${1:-}" in -h|--help) print_usage exit 0 ;; -*) echo "sort_bps.sh: unknown option '$1'" >&2 echo "Run 'sort_bps.sh --help' for usage." >&2 exit 2 ;; esac ID=$1 if [[ -z "$ID" ]]; then echo "sort_bps.sh: is required" >&2 print_usage exit 2 fi INPUT_DIR=${INPUT_DIR:-.} OUTPUT_DIR=${OUTPUT_DIR:-$INPUT_DIR} BUFFER_SIZE=${BUFFER_SIZE:-2G} PARALLEL=${PARALLEL:-4} IN="${INPUT_DIR%/}/${ID}.bps.txt.gz" OUT="${OUTPUT_DIR%/}/${ID}.bps.sorted.txt.gz" if [[ ! -r "$IN" ]]; then echo "sort_bps.sh: cannot read input '$IN'" >&2 exit 3 fi mkdir -p "$(dirname "$OUT")" # ----------------------------------------------------------- tool lookup --- # Prefer `gsort` (GNU coreutils on macOS via homebrew); fall back to `sort` # if it reports itself as GNU. Bail out if neither works. pick_sort() { if command -v gsort >/dev/null 2>&1; then echo gsort return 0 fi if sort --version 2>/dev/null | head -n 1 | grep -qi 'gnu'; then echo sort return 0 fi return 1 } if ! SORT_BIN=$(pick_sort); then echo "sort_bps.sh: GNU sort not found." >&2 echo " On macOS: brew install coreutils (provides 'gsort')" >&2 echo " On Linux: install the 'coreutils' package" >&2 exit 4 fi # zcat on macOS appends .Z instead of reading .gz — use `gzip -dc` to stay # portable. ZCAT="gzip -dc" # ---------------------------------------------------------- scratch dir --- # mktemp -d is portable across Linux and macOS. The template form with a # trailing XXXXXX works on both. TMP=$(mktemp -d "${TMPDIR:-/tmp}/svaba_bps_sort.XXXXXXXX") cleanup() { if [[ "${KEEP_TMP:-0}" == "1" ]]; then echo "sort_bps.sh: leaving scratch dir at $TMP" >&2 else rm -rf "$TMP" fi } trap cleanup EXIT INT TERM # ------------------------------------------------------------- the sort --- echo "sort_bps.sh: sorting $IN -> $OUT" >&2 echo "sort_bps.sh: sort=$SORT_BIN buffer=$BUFFER_SIZE parallel=$PARALLEL tmp=$TMP" >&2 # Extract the header once (if present) so we don't have to zcat twice. HEADER_FILE="$TMP/header.txt" BODY_PIPE=0 # Peek at the first line. If it starts with '#', save it; otherwise there is # no header and we just sort the whole file. FIRST_LINE=$($ZCAT "$IN" | head -n 1 || true) if [[ "${FIRST_LINE:0:1}" == "#" ]]; then printf '%s\n' "$FIRST_LINE" > "$HEADER_FILE" BODY_PIPE=1 fi { if [[ $BODY_PIPE -eq 1 ]]; then cat "$HEADER_FILE" $ZCAT "$IN" | tail -n +2 else $ZCAT "$IN" fi | { # The header (if any) is the first line; pass it through untouched, # then pipe the rest into sort. Using `read` here keeps everything # streaming — no intermediate uncompressed file on disk. if [[ $BODY_PIPE -eq 1 ]]; then IFS= read -r hdr printf '%s\n' "$hdr" fi LC_ALL=C "$SORT_BIN" \ -t $'\t' \ -k1,1V -k2,2n -k4,4V -k5,5n -k37,37gr \ -S "$BUFFER_SIZE" \ --parallel="$PARALLEL" \ -T "$TMP" } } | gzip -c > "$OUT" echo "sort_bps.sh: done -> $OUT" >&2 ================================================ FILE: scripts/svaba_cloud.sh ================================================ #!/usr/bin/env bash # # svaba_cloud.sh — scatter svaba across GCP VMs, one partition per VM. # # Takes the svaba run command you'd normally run locally and distributes # it across N worker VMs, each handling a chromosome partition. The # script manages -k (regions) and -a (analysis ID) per worker — you # provide everything else exactly as you would on the command line. # # Workers boot from a pre-built image (--image) that has svaba, htslib, # jemalloc, and the reference genome baked in. A shared read-only data # disk provides the BAM files. # # Usage: # svaba_cloud.sh [cloud options] -- # # Cloud options (before the --): # --id STR analysis ID prefix (required) # --data-disk NAME GCP persistent disk name for BAMs (required) # --bucket gs://... GCS bucket for outputs (required) # --partitions N number of VMs / partitions (default: 6) # --machine TYPE GCP machine type (default: n2-highcpu-16) # --zone ZONE GCP zone (default: us-central1-a) # --image NAME GCP image for workers (default: svaba-worker-image) # --mount-point DIR where data disk mounts (default: /mnt/data) # --boot-disk-size STR boot disk size (default: 50GB) # --regions-file FILE custom partition file (one comma-sep line per partition) # --merge merge + postprocess after all workers finish # --keep-vms don't delete worker VMs on completion # --dry-run print commands without executing # -h, --help this message # # Everything after -- is passed verbatim to `svaba run` on each worker, # with -k and -a injected by the script. Do NOT include -k or -a in # your svaba args. # # Examples: # # 5-way scatter, n2-highcpu-16, merge at the end # svaba_cloud.sh \ # --id my_run --data-disk svaba-data \ # --bucket gs://my-bucket/svaba-run \ # --partitions 5 --machine n2-highcpu-16 --merge \ # -- \ # svaba run \ # -t /mnt/data/tumor.bam -n /mnt/data/normal.bam \ # -G /home/user/ref/hg38.fa -p 14 \ # --blacklist /home/user/tracks/blacklist.bed # # # Dry run # svaba_cloud.sh --id test --data-disk d1 \ # --bucket gs://b/r --dry-run \ # -- svaba run -t /mnt/data/t.bam -G /ref/hg38.fa -p 8 # set -euo pipefail # ----------------------------------------------------------- defaults --- MACHINE="n2-highcpu-16" ZONE="us-central1-a" PARTITIONS=6 MOUNT="/mnt/data" BOOT_DISK_SIZE="50GB" IMAGE="svaba-worker-image" DO_MERGE=0 KEEP_VMS=0 DRY_RUN=0 REGIONS_FILE="" # Required DATA_DISK="" BUCKET="" ID="" # ---------------------------------------------------------------- help --- print_usage() { sed -n '2,50p' "$0" | sed 's/^# \{0,1\}//' } # -------------------------------------------------------------- parse --- # Everything before -- is cloud options; everything after is svaba args. SVABA_ARGS=() while [[ $# -gt 0 ]]; do case "$1" in --id) ID="$2"; shift 2 ;; --data-disk) DATA_DISK="$2"; shift 2 ;; --bucket) BUCKET="$2"; shift 2 ;; --partitions) PARTITIONS="$2"; shift 2 ;; --machine) MACHINE="$2"; shift 2 ;; --zone) ZONE="$2"; shift 2 ;; --image) IMAGE="$2"; shift 2 ;; --mount-point) MOUNT="$2"; shift 2 ;; --boot-disk-size) BOOT_DISK_SIZE="$2"; shift 2 ;; --regions-file) REGIONS_FILE="$2"; shift 2 ;; --merge) DO_MERGE=1; shift ;; --keep-vms) KEEP_VMS=1; shift ;; --dry-run) DRY_RUN=1; shift ;; -h|--help) print_usage; exit 0 ;; --) shift; SVABA_ARGS=("$@"); break ;; -*) echo "svaba_cloud.sh: unknown option '$1'" >&2 echo "run 'svaba_cloud.sh --help' for usage" >&2 exit 2 ;; *) # No -- separator; assume everything from here on is svaba args SVABA_ARGS=("$@"); break ;; esac done # ------------------------------------------------------- validate args --- missing=() [[ -z "$ID" ]] && missing+=("--id") [[ -z "$DATA_DISK" ]] && missing+=("--data-disk") [[ -z "$BUCKET" ]] && missing+=("--bucket") [[ ${#SVABA_ARGS[@]} -eq 0 ]] && missing+=("svaba run args (after --)") if [[ ${#missing[@]} -gt 0 ]]; then echo "svaba_cloud.sh: missing required: ${missing[*]}" >&2 exit 2 fi BUCKET=${BUCKET%/} # Sanitize ID for GCP resource names GCP_ID=$(echo "$ID" | tr '[:upper:]' '[:lower:]' | tr '_' '-' | sed 's/[^a-z0-9-]//g') if [[ "$GCP_ID" != "$ID" ]]; then echo "note: sanitized ID for GCP names: '$ID' -> '$GCP_ID'" fi # Strip "svaba run" prefix if present (we add it back ourselves) if [[ "${SVABA_ARGS[0]:-}" == "svaba" ]]; then SVABA_ARGS=("${SVABA_ARGS[@]:1}") fi if [[ "${SVABA_ARGS[0]:-}" == "run" ]]; then SVABA_ARGS=("${SVABA_ARGS[@]:1}") fi # Build the svaba args string for embedding in the startup script SVABA_ARGS_STR="" for arg in "${SVABA_ARGS[@]}"; do # Quote args that contain spaces if [[ "$arg" == *" "* ]]; then SVABA_ARGS_STR+="\"${arg}\" " else SVABA_ARGS_STR+="${arg} " fi done # Extract -p value from svaba args for the merge step (default 8) THREADS=8 for i in "${!SVABA_ARGS[@]}"; do if [[ "${SVABA_ARGS[$i]}" == "-p" ]]; then THREADS="${SVABA_ARGS[$((i+1))]}" break fi done # ---------------------------------------- default hg38 6-way partition --- default_regions() { local n=$1 case $n in 1) echo "chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX" ;; 2) echo "chr1,chr2,chr3,chr4,chr5,chr6,chr7" echo "chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX" ;; 3) echo "chr1,chr2,chr3" echo "chr4,chr5,chr6,chr7,chr8" echo "chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX" ;; 4) echo "chr1,chr2" echo "chr3,chr4,chr5" echo "chr6,chr7,chr8,chr9,chr10" echo "chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX" ;; 5) echo "chr1,chr2" echo "chr3,chr4,chr5" echo "chr6,chr7,chr8,chr9" echo "chr10,chr11,chr12,chr13,chr14" echo "chr15,chr16,chr17,chr18,chr19,chr20,chr21,chr22,chrX" ;; 6) echo "chr1,chr2" echo "chr3,chr4,chr5" echo "chr6,chr7,chr8,chr9" echo "chr10,chr11,chr12,chr13" echo "chr14,chr15,chr16,chr17,chr18" echo "chr19,chr20,chr21,chr22,chrX" ;; *) for c in chr{1..22} chrX; do echo "$c"; done | head -n "$n" ;; esac } declare -a REGIONS if [[ -n "$REGIONS_FILE" ]]; then while IFS= read -r line; do REGIONS+=("$line"); done < "$REGIONS_FILE" PARTITIONS=${#REGIONS[@]} else while IFS= read -r line; do REGIONS+=("$line"); done < <(default_regions "$PARTITIONS") fi if [[ ${#REGIONS[@]} -ne $PARTITIONS ]]; then echo "svaba_cloud.sh: got ${#REGIONS[@]} region lines but expected $PARTITIONS" >&2 exit 2 fi # ----------------------------------------------------------- run/exec --- run_cmd() { if [[ $DRY_RUN -eq 1 ]]; then echo "[dry-run] $*" else "$@" fi } # ================================================================ # STEP 1: Create worker VMs # ================================================================ echo "============================================================" echo "svaba_cloud.sh: launching $PARTITIONS workers" echo " machine=$MACHINE zone=$ZONE image=$IMAGE" echo " data_disk=$DATA_DISK bucket=$BUCKET id=$ID" echo " svaba args: ${SVABA_ARGS_STR}" echo "============================================================" SCRIPT_TMPDIR=$(mktemp -d) trap 'rm -rf "$SCRIPT_TMPDIR"' EXIT VM_NAMES=() for i in $(seq 1 "$PARTITIONS"); do vm="svaba-${GCP_ID}-worker-${i}" VM_NAMES+=("$vm") SCRIPT_FILE="${SCRIPT_TMPDIR}/startup_${i}.sh" cat > "$SCRIPT_FILE" < /var/log/svaba_startup.log 2>&1 set -euxo pipefail echo "=== svaba worker ${i} starting at \$(date) ===" # --- mount data disk --- mkdir -p ${MOUNT} /mnt/output echo "waiting for data disk..." for attempt in \$(seq 1 30); do [[ -b /dev/sdb ]] && break echo " attempt \${attempt}: /dev/sdb not yet available" sleep 2 done if [[ ! -b /dev/sdb ]]; then echo "FATAL: /dev/sdb not found after 60s" echo "available block devices:" lsblk exit 1 fi MOUNT_DEV=/dev/sdb [[ -b /dev/sdb1 ]] && MOUNT_DEV=/dev/sdb1 echo "mounting \${MOUNT_DEV} -> ${MOUNT}" mount -o ro,noload \${MOUNT_DEV} ${MOUNT} || mount -o ro \${MOUNT_DEV} ${MOUNT} echo "data disk mounted, contents:" ls ${MOUNT}/ # --- run svaba --- PART_ID="${ID}_part${i}" cd /mnt/output echo "=== starting svaba at \$(date) ===" svaba run \\ ${SVABA_ARGS_STR} \\ -k ${REGIONS[$((i-1))]} \\ -a \${PART_ID} \\ 2>&1 | tee \${PART_ID}.startup.log echo "=== svaba finished at \$(date) ===" echo "output files:" ls -lh /mnt/output/ # --- upload results --- echo "uploading to ${BUCKET}/" gsutil -m cp \\ \${PART_ID}.bps.txt.gz \\ \${PART_ID}.log \\ \${PART_ID}.startup.log \\ \${PART_ID}.contigs.bam \\ \${PART_ID}.runtime.txt \\ ${BUCKET}/ # Upload optional outputs if they exist (--dump-reads) for f in \${PART_ID}.discordant.bam \${PART_ID}.corrected.bam \${PART_ID}.r2c.txt.gz; do [[ -f "\$f" ]] && gsutil cp "\$f" ${BUCKET}/ || true done # Signal completion echo "=== uploading done marker at \$(date) ===" echo "DONE" | gsutil cp - ${BUCKET}/.done_part${i} echo "=== worker ${i} complete ===" STARTUP_EOF echo "[${i}/${PARTITIONS}] creating $vm regions=${REGIONS[$((i-1))]}" run_cmd gcloud compute instances create "$vm" \ --zone="$ZONE" \ --machine-type="$MACHINE" \ --image="$IMAGE" \ --disk="name=${DATA_DISK},mode=ro,device-name=svaba-data" \ --boot-disk-size="$BOOT_DISK_SIZE" \ --scopes=storage-rw \ --metadata-from-file=startup-script="$SCRIPT_FILE" # Stagger VM creation to avoid disk-attach races [[ $i -lt $PARTITIONS ]] && sleep 5 done echo "all $PARTITIONS VMs created" # ================================================================ # STEP 2: Wait for all workers to finish # ================================================================ echo "waiting for workers to complete..." echo "(checking ${BUCKET}/.done_part* every 60s)" poll_done() { local expected=$1 while true; do local count count=$(gsutil ls "${BUCKET}/.done_part*" 2>/dev/null | grep -c '\.done_part' || true) if [[ $count -ge $expected ]]; then echo "all $expected partitions complete" return 0 fi echo " $(date +%H:%M:%S) $count / $expected done" sleep 60 done } if [[ $DRY_RUN -eq 0 ]]; then poll_done "$PARTITIONS" fi # ================================================================ # STEP 3: Tear down workers (unless --keep-vms) # ================================================================ if [[ $KEEP_VMS -eq 0 ]]; then echo "deleting worker VMs..." for vm in "${VM_NAMES[@]}"; do run_cmd gcloud compute instances delete "$vm" \ --zone="$ZONE" --quiet & done wait echo "all workers deleted" else echo "keeping VMs (--keep-vms): ${VM_NAMES[*]}" fi # Clean up done markers if [[ $DRY_RUN -eq 0 ]]; then gsutil -m rm "${BUCKET}/.done_part*" 2>/dev/null || true fi # ================================================================ # STEP 4: Merge + postprocess (optional, --merge) # ================================================================ if [[ $DO_MERGE -eq 1 ]]; then if [[ $DRY_RUN -eq 1 ]]; then echo "[dry-run] would merge ${PARTITIONS} partitions from ${BUCKET}/" echo "svaba_cloud.sh: finished" exit 0 fi echo "============================================================" echo "MERGE: downloading and postprocessing" echo "============================================================" MERGE_DIR="${ID}_cloud_merge" mkdir -p "$MERGE_DIR" cd "$MERGE_DIR" # Download all bps.txt.gz files for i in $(seq 1 "$PARTITIONS"); do gsutil cp "${BUCKET}/${ID}_part${i}.bps.txt.gz" . done # Concatenate (gzip is concat-safe per RFC 1952) echo "concatenating ${PARTITIONS} bps.txt.gz files..." cat ${ID}_part*.bps.txt.gz > "${ID}.bps.txt.gz" # Merge contigs BAMs echo "downloading and merging contigs BAMs..." CONTIG_BAMS=() for i in $(seq 1 "$PARTITIONS"); do gsutil cp "${BUCKET}/${ID}_part${i}.contigs.bam" . CONTIG_BAMS+=("${ID}_part${i}.contigs.bam") done samtools merge -f "${ID}.contigs.bam" "${CONTIG_BAMS[@]}" rm -f "${CONTIG_BAMS[@]}" # Merge runtime.txt (just cat, first file has the header) echo "merging runtime.txt..." gsutil cp "${BUCKET}/${ID}_part1.runtime.txt" "${ID}.runtime.txt" for i in $(seq 2 "$PARTITIONS"); do gsutil cp "${BUCKET}/${ID}_part${i}.runtime.txt" tmp_rt.txt tail -n +2 tmp_rt.txt >> "${ID}.runtime.txt" rm -f tmp_rt.txt done # Merge optional r2c.txt.gz if present R2C_FILES=() for i in $(seq 1 "$PARTITIONS"); do if gsutil -q stat "${BUCKET}/${ID}_part${i}.r2c.txt.gz" 2>/dev/null; then gsutil cp "${BUCKET}/${ID}_part${i}.r2c.txt.gz" . R2C_FILES+=("${ID}_part${i}.r2c.txt.gz") fi done if [[ ${#R2C_FILES[@]} -gt 0 ]]; then echo "merging ${#R2C_FILES[@]} r2c.txt.gz files..." cat "${R2C_FILES[@]}" > "${ID}.r2c.txt.gz" rm -f "${R2C_FILES[@]}" fi # Postprocess SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" if [[ -x "${SCRIPT_DIR}/svaba_postprocess.sh" ]]; then echo "running svaba_postprocess.sh..." "${SCRIPT_DIR}/svaba_postprocess.sh" -t "$THREADS" -m 4G "$ID" else echo "svaba_postprocess.sh not found at ${SCRIPT_DIR}; skipping" echo "run manually: scripts/svaba_postprocess.sh -t 8 -m 4G ${ID}" fi echo "============================================================" echo "DONE. Merged outputs in: $(pwd)" echo " ${ID}.bps.sorted.dedup.txt.gz" echo " ${ID}.contigs.bam" echo " ${ID}.runtime.txt" echo "============================================================" fi echo "svaba_cloud.sh: finished" ================================================ FILE: scripts/svaba_local_function.sh ================================================ # svaba_local_function.sh — sourceable bash helpers for common svaba tasks. # # Designed to be dot-sourced into an interactive shell (bash/zsh), NOT # executed as a script. Usage: # # # in your ~/.bashrc or ~/.zshrc (or run once per shell session): # source ~/git/svaba/scripts/svaba_local_function.sh # # # then use any of the svaba_* helpers: # svaba_help # svaba_grep_contig fermi4.r2c.pass.txt.gz c_fermi_chr19_48755001_48780001_13C # # Every function is prefixed `svaba_` to stay out of the way of anything # else on your PATH. Every function responds to `-h` / `--help` with its # own usage block, so you don't need to remember signatures — just type # the name and `-h`. # # Set `SVABA_FUNCTIONS_QUIET=1` before sourcing to suppress the banner. # --------------------------------------------------------------------- # svaba_help — list all svaba_* functions defined here with one-liners. # --------------------------------------------------------------------- svaba_help() { cat <<'EOF' svaba_* helper functions (from scripts/svaba_local_function.sh). Call any function with -h / --help for detailed usage. svaba_help this message svaba_grep_contig FILE CNAME [OUTFILE] pull one contig's rows out of an r2c TSV, preserving the header so the result loads in viewer/r2c_explorer.html svaba_pass_cnames FILE print cnames of all PASS variants in a bps.txt[.gz] svaba_pass_somatic_cnames FILE same, restricted to PASS with somlod >= 1 svaba_bps_cols print the bps.txt.gz column-index reference svaba_igv LOCUS [PORT] tell a running IGV (default port 60151) to jump to LOCUS svaba_swap_bps IN.bps.txt.gz OUT.bps.txt.gz sanity-check helper: randomly (50%/row) swap bp1<->bp2 fields across all paired columns, so downstream compare code can be tested for orientation-invariance svaba_bam_grep IN.bam SEQUENCE OUT.bam [REGION] pull reads whose SEQ contains SEQUENCE (or its reverse complement) into a sub-BAM. Optional REGION restricts the scan to a samtools-style locus first (requires indexed IN.bam) EOF } # --------------------------------------------------------------------- # svaba_grep_contig — the most frequent ask: pull one contig's rows out # of an r2c TSV, preserving the header row so the sliced file loads in # viewer/r2c_explorer.html without falling back to the canonical schema. # --------------------------------------------------------------------- svaba_grep_contig() { if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -lt 2 ]]; then cat <<'EOF' svaba_grep_contig FILE CNAME [OUTFILE] Extract the "contig" row plus all "read" rows for a given cname from an r2c TSV produced by svaba run --dump-reads (or the PASS / PASS- somatic subsets from svaba_postprocess.sh). The header line is always preserved so the output loads directly in viewer/r2c_explorer.html. FILE input r2c TSV — .txt.gz (auto-decompressed) or plain .txt CNAME contig name (awk regex; a prefix or unique substring works) OUTFILE output path (default: CNAME.txt — note: plain text, not .gz) Examples: svaba_grep_contig fermi4_full.r2c.pass.txt.gz c_fermi_chr19_48755001_48780001_13C svaba_grep_contig fermi4.r2c.pass.txt.gz c_fermi_chr7 /tmp/chr7_contigs.txt EOF return 1 fi local file="$1" cname="$2" out="${3:-${2}.txt}" if [[ ! -r "$file" ]]; then echo "svaba_grep_contig: cannot read $file" >&2 return 2 fi # Decompress if .gz, cat otherwise. `gzip -dc` works on macOS where # plain `zcat` expects a .Z suffix rather than .gz. local reader case "$file" in *.gz) reader="gzip -dc" ;; *) reader="cat" ;; esac $reader "$file" | awk -v cname="$cname" 'NR==1 || $0 ~ cname' > "$out" local n n=$(wc -l < "$out" | awk '{print $1}') echo "svaba_grep_contig: wrote $out ($n lines incl. header)" >&2 } # --------------------------------------------------------------------- # svaba_pass_cnames — one-liner for pulling the cnames of PASS variants # out of bps.txt[.gz]. Useful for feeding into svaba_grep_contig in a # loop, or for sanity-checking counts. # --------------------------------------------------------------------- svaba_pass_cnames() { if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -lt 1 ]]; then cat <<'EOF' svaba_pass_cnames FILE Print cnames (bps.txt col 30 = contig_and_region) for every PASS row (col 32 == "PASS") in FILE. Output is sorted + unique. FILE ${ID}.bps.txt.gz (or plain .txt) Example: svaba_pass_cnames tumor_normal.bps.txt.gz | wc -l EOF return 1 fi local file="$1" reader case "$file" in *.gz) reader="gzip -dc" ;; *) reader="cat" ;; esac $reader "$file" | awk -F'\t' 'NR>1 && $32=="PASS" {print $30}' | LC_ALL=C sort -u } # --------------------------------------------------------------------- # svaba_pass_somatic_cnames — same as above but restricted to the # PASS + somlod >= 1 subset (i.e. what ends up in r2c.pass.somatic). # --------------------------------------------------------------------- svaba_pass_somatic_cnames() { if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -lt 1 ]]; then cat <<'EOF' svaba_pass_somatic_cnames FILE Print cnames for every PASS + somatic variant (col 32 == "PASS" AND col 37 somlod >= 1) in FILE. Non-numeric somlod values ("NA", missing) coerce to 0 and are excluded. Output is sorted + unique. FILE ${ID}.bps.txt.gz (or plain .txt) EOF return 1 fi local file="$1" reader case "$file" in *.gz) reader="gzip -dc" ;; *) reader="cat" ;; esac $reader "$file" | awk -F'\t' 'NR>1 && $32=="PASS" && $37+0 >= 1 {print $30}' | LC_ALL=C sort -u } # --------------------------------------------------------------------- # svaba_bps_cols — quick printable reference for the bps.txt column # layout. Useful when you're writing one-off awks and need to remember # "which column is somlod again?" # --------------------------------------------------------------------- svaba_bps_cols() { cat <<'EOF' svaba bps.txt column layout (from BreakPoint::toFileString). Column numbers are 1-indexed (awk $1 == chr1). col name notes --- --------------------- ----------------------------------------- 1 chr1 2 pos1 3 strand1 4 chr2 5 pos2 6 strand2 7 ref 8 alt 9 span 10 split 11 alt_count 12 cov 13 cigar 14 cigar_near 15 dmq1 discordant-MAPQ, side 1 16 dmq2 discordant-MAPQ, side 2 17 dcn discordant count, normal 18 dct discordant count, tumor 19 mapq1 contig-alignment MAPQ, side 1 20 mapq2 21 nm1 22 nm2 23 as1 24 as2 25 sub1 26 sub2 27 homol 28 insert 29 repeat 30 contig_and_region <- cname, used as r2c join key 31 naln 32 conf <- "PASS" / "LOWLOD" / etc. 33 type (older files: named "evidence") 34 qual 35 2ndary (older files: named "secondary") 36 somatic 37 somlod <- "somatic LOD" 38 maxlod <- max over per-sample LO 39 dbsnp 40 contig_conf1 41 contig_conf2 42 cpos1 v2 only (post-SvABA2.0 refilter round-trip) 43 cpos2 v2 only 44 lmatch v2 only 45 rmatch v2 only 46 scov1 v2 only 47 scov2 v2 only 48 local1 v2 only 49 local2 v2 only 50 ctglen v2 only 51 flipped v2 only 52 bp_id v3 only — unique per-BP identifier, format "bpTTTNNNNNNNN" (thread TTT, counter NNNNNNNN). Cross-references to r2c.txt.gz's split_bps / disc_bps columns so you can tell which BP on a contig a given read actually supports. ("." on very old v2 files rewritten through a v3 emitter that left id unset.) 53+ per-sample blocks FORMAT: GT:AD:DP:SR:DR:GQ:PL:LO:LO_n (one block per BAM, order from the header row) EOF } # --------------------------------------------------------------------- # svaba_igv — nudge a running IGV to a locus via its HTTP command port. # Requires IGV's "Enable port" preference to be on (default port 60151). # Useful in loops while eyeballing variants. # --------------------------------------------------------------------- svaba_igv() { if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -lt 1 ]]; then cat <<'EOF' svaba_igv LOCUS [PORT] POST a goto request to a running IGV instance so it navigates to LOCUS. IGV must have the "Enable port" preference turned on. LOCUS anything IGV understands: chr:pos, chr:start-end, gene name, ... PORT IGV command port (default 60151) Examples: svaba_igv chr7:55249071 svaba_igv chr17:7675000-7687000 EOF return 1 fi local locus="$1" port="${2:-60151}" # Use curl (widely available on macOS + linux). encodeURIComponent-style # minimal escaping: swap spaces for %20 so gene/locus queries work. local enc enc=$(printf '%s' "$locus" | sed 's/ /%20/g') if ! curl -sS --max-time 3 "http://localhost:${port}/goto?locus=${enc}" >/dev/null; then echo "svaba_igv: IGV not reachable at localhost:${port} (is IGV running with 'Enable port' on?)" >&2 return 3 fi echo "svaba_igv: IGV -> $locus" } # --------------------------------------------------------------------- # svaba_swap_bps — sanity-check helper. Randomly (50% per row) swap all # bp1-side <-> bp2-side paired columns in a bps.txt[.gz], producing an # orientation-randomized file. Downstream compare code that's supposed # to be orientation-invariant should treat in.bps.txt.gz and its # swapped version as equivalent. # --------------------------------------------------------------------- svaba_swap_bps() { if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -lt 2 ]]; then cat <<'EOF' svaba_swap_bps IN.bps.txt[.gz] OUT.bps.txt.gz Read IN, preserve the header, then for each data row independently flip a fair coin: with prob 1/2, swap every bp1-side column with its bp2-side partner. Output is gzip-compressed regardless of the input form. Paired columns swapped together (so rows stay internally consistent): 1/4 chr1 <-> chr2 2/5 pos1 <-> pos2 3/6 strand1 <-> strand2 15/16 dmq1 <-> dmq2 19/20 mapq1 <-> mapq2 21/22 nm1 <-> nm2 23/24 as1 <-> as2 25/26 sub1 <-> sub2 40/41 contig_conf1 <-> contig_conf2 42/43 cpos1 <-> cpos2 (v2 only — auto-skipped on v1 files) 44/45 lmatch <-> rmatch (v2 only) 46/47 scov1 <-> scov2 (v2 only) 48/49 local1 <-> local2 (v2 only) Non-paired side-agnostic columns (ref, alt, span, somlod, ...) are left alone. Example: svaba_swap_bps fermi4_full.bps.txt.gz fermi4_full.bp_swapped.bps.txt.gz EOF return 1 fi local in="$1" out="$2" reader case "$in" in *.gz) reader="gzip -dc" ;; *) reader="cat" ;; esac $reader "$in" | awk 'BEGIN{ FS=OFS="\t"; srand() split("1,4 2,5 3,6 15,16 19,20 21,22 23,24 25,26 40,41 42,43 44,45 46,47 48,49", P, " ") } /^#/ { print; next } { if (rand() < 0.5) { for (k in P) { split(P[k], q, ",") a = q[1] + 0; b = q[2] + 0 if (a <= NF && b <= NF) { t = $a; $a = $b; $b = t } } } print }' | gzip -c > "$out" echo "svaba_swap_bps: wrote $out" >&2 } # --------------------------------------------------------------------- # svaba_bam_grep — pull reads whose SEQ contains a target sequence (or # its reverse complement) into a sub-BAM. Useful for fishing for reads # carrying a specific motif, breakpoint junction, inserted sequence, # etc. Decodes BAM -> SAM, filters col 10 (SEQ) via awk's index(), then # re-encodes to BAM. # --------------------------------------------------------------------- svaba_bam_grep() { if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -lt 3 ]]; then cat <<'EOF' svaba_bam_grep IN.bam SEQUENCE OUT.bam [REGION] Filter IN.bam to reads whose SEQ field contains SEQUENCE or its reverse complement. Writes OUT.bam (with the original header). Match is case-insensitive (SEQUENCE is uppercased, reverse-complemented using the standard A<->T / C<->G / N<->N mapping); both strands are checked in one pass so you don't need to submit both orientations. IN.bam input BAM (reads will be decompressed + re-encoded; coordinate-sorted input yields coordinate-sorted output) SEQUENCE DNA motif to grep for. ACGTN only. OUT.bam output path. REGION optional samtools-style region (e.g. "chr7:55000000-56000000") to restrict the scan. Requires IN.bam to be indexed (.bai). Depends on `samtools` being on PATH. Scanning is linear in the number of reads in the region (full-BAM scan of a 30x WGS takes ~15-30 min on a single core; use REGION to localize when you can). Short sequences (< ~8 bp) will match nearly every read — a warning is printed if you pass one. Examples: # Find reads carrying a specific junction/insert sequence anywhere svaba_bam_grep tumor.bam TTAGGGTTAGGGTTAGGG telomere_reads.bam # Same, but only scan chr17 to speed things up svaba_bam_grep tumor.bam CATCGATCGATC chr17_hits.bam chr17 # Short sequence — will match lots; use a longer motif if you can svaba_bam_grep tumor.bam ACGT lots.bam EOF return 1 fi local in="$1" seq="$2" out="$3" region="${4:-}" if [[ ! -r "$in" ]]; then echo "svaba_bam_grep: cannot read $in" >&2 return 2 fi if ! command -v samtools >/dev/null 2>&1; then echo "svaba_bam_grep: samtools not on PATH" >&2 return 3 fi if [[ -z "$seq" ]]; then echo "svaba_bam_grep: empty SEQUENCE" >&2 return 4 fi # Validate: ACGTN only, any case. if ! printf '%s' "$seq" | grep -qE '^[ACGTNacgtn]+$'; then echo "svaba_bam_grep: SEQUENCE must contain only ACGTN (got: $seq)" >&2 return 5 fi # Uppercase via tr (works on bash 3.2, unlike ${seq^^}). local upper_seq rc_seq upper_seq=$(printf '%s' "$seq" | tr '[:lower:]' '[:upper:]') # Reverse-complement: complement via tr, then reverse. rc_seq=$(printf '%s' "$upper_seq" | tr 'ACGTN' 'TGCAN' | rev) if [[ ${#upper_seq} -lt 8 ]]; then echo "svaba_bam_grep: warning — sequence length ${#upper_seq} is short; expect many incidental matches" >&2 fi echo "svaba_bam_grep: matching '$upper_seq' (or rc '$rc_seq') in $in${region:+ region=$region}" >&2 # samtools view -h emits header (@) + records; awk keeps header as-is # and data rows only if SEQ (col 10) contains either orientation. # index() is a substring search — fast, no regex compile per row. # Re-encode via `samtools view -b -o OUT -` so output is a valid BAM. # If the user passed a REGION, include it after the input path; that's # samtools' native locus-restriction syntax and it only works if the # input has a .bai (or .csi) alongside. if [[ -n "$region" ]]; then samtools view -h "$in" "$region" else samtools view -h "$in" fi | awk -v fwd="$upper_seq" -v rc="$rc_seq" ' /^@/ { print; next } index($10, fwd) || index($10, rc) { print } ' | samtools view -b -o "$out" - # Report count. Try to build a .bai if the output ended up coord-sorted; # silently skip if it didn't (e.g. name-sorted input BAM). local n n=$(samtools view -c "$out" 2>/dev/null) if samtools index "$out" 2>/dev/null; then echo "svaba_bam_grep: wrote $out ($n matching reads, indexed)" >&2 else echo "svaba_bam_grep: wrote $out ($n matching reads; not coord-sorted, no .bai built)" >&2 fi } # --------------------------------------------------------------------- # Banner — suppressible with SVABA_FUNCTIONS_QUIET=1. Sent to stderr so # a non-interactive shell piping output isn't polluted. # --------------------------------------------------------------------- if [[ "${SVABA_FUNCTIONS_QUIET:-0}" != "1" ]]; then echo "svaba_local_function.sh sourced. Try 'svaba_help' for the list." >&2 fi ================================================ FILE: scripts/svaba_postprocess.sh ================================================ #!/usr/bin/env bash # # svaba_postprocess.sh — one-stop post-processing of a svaba run. # # Replaces (and subsumes) the older sort_output.sh and # sort_and_deduplicate_bps.sh. Given a svaba analysis ID, this script: # # 1. Merges per-thread output BAMs into one BAM per suffix. # ${ID}.thread*.${suffix}.bam -> ${ID}.${suffix}.bam # # 2. Runs `svaba postprocess` (the C++ subcommand) to coord-sort, stream- # dedup on exact (qname,flag) duplicates, stamp a @PG "svaba_postprocess" # line onto every final BAM header, and build a .bai index. Suffixes: # weird, corrected, discordant, contigs. # Final state per suffix is ${ID}.${suffix}.bam(.bai); no # .sorted / .deduped intermediate files remain on the user path. # # 3. Sorts, deduplicates, and PASS-filters ${ID}.bps.txt.gz. Emits: # ${ID}.bps.sorted.txt.gz — full sorted list # ${ID}.bps.sorted.dedup.txt.gz — best SV (max maxlod) per # (chr1,pos1,strand1,chr2,pos2,strand2) # ${ID}.bps.sorted.dedup.pass.txt.gz — dedup restricted to PASS rows # ${ID}.bps.sorted.dedup.pass.somatic.txt.gz — PASS rows that are also # somatic (somlod >= 0 for v3 # format, somatic_state == 1 for # legacy format) # # 4. Filters ${ID}.r2c.txt.gz down to PASS breakpoints — writes both # ${ID}.r2c.pass.txt.gz (all PASS calls) and # ${ID}.r2c.pass.somatic.txt.gz (PASS calls with somlod >= 1, # i.e. the somatic subset) for interactive use in bps_explorer.html # (the full r2c.txt.gz is typically too heavy to load). # # 5. Optionally (--split-by-source) demultiplexes the deduped BAMs by the # first 4 chars of each read's QNAME into per-source BAMs. # # Every step is idempotent — missing inputs cause that step to log a short # note and continue, so rerunning this after regenerating one of the inputs # Just Works. The --skip-* flags let you skip a stage explicitly when you # only want to refresh one phase. # # Usage: # svaba_postprocess.sh [options] # # Options (flags take precedence over equivalent env vars): # -t, --threads N total threads budget (default: 4) # -m, --mem STR per-samtools-sort-thread memory (default: 2G) # --sort-buffer STR per-chunk memory for the bps sorter (default: 2G) # --split-by-source also split BAMs by QNAME source prefix # --input-dir DIR look for inputs in DIR (default: .) # --output-dir DIR write outputs to DIR (default: INPUT_DIR) # --svaba PATH path to svaba binary (default: ~/git/svaba/build/svaba) # --keep-tmp keep scratch dirs for debugging # --skip-bam skip BAM merge/sort/dedup/index (steps 1 & 2) # --skip-dedup keep step 2 but tell svaba postprocess to skip the # dedup substep (passes --sort-only through). Useful # for quick reruns of sort + @PG stamp + index # without redoing the expensive dedup pass. Sort is # also auto-skipped when the BAM's header already # declares @HD SO:coordinate, so a repeat rerun is # effectively a no-op except for index rebuild. # --skip-bps skip bps sort/dedup/PASS (step 3) # --skip-r2c skip r2c PASS filter (step 4) # --skip-split force-disable split-by-source # -h, --help this message # # Environment variable fallbacks (used only if the matching flag is absent): # THREADS, MEM, BUFFER_SIZE (→ --sort-buffer), SVABA, SAM, INPUT_DIR, # OUTPUT_DIR, SPLIT_BY_SOURCE, KEEP_TMP # # Examples: # svaba_postprocess.sh tumor_vs_normal # svaba_postprocess.sh -t 16 -m 4G tumor_vs_normal # svaba_postprocess.sh --split-by-source --output-dir /tmp/run42 run42 # svaba_postprocess.sh --skip-bam --skip-bps tumor_vs_normal # only r2c refresh # # Notes: # * Step 3 needs GNU sort (or `gsort` on macOS via `brew install coreutils`). # * Steps 1+2 need samtools on PATH; step 2 needs a working svaba binary. set -euo pipefail # ----------------------------------------------------------- defaults --- THREADS=${THREADS:-4} MEM=${MEM:-2G} SORT_BUFFER=${BUFFER_SIZE:-${SORT_BUFFER:-2G}} SVABA=${SVABA:-~/git/svaba/build/svaba} SAM=${SAM:-samtools} SPLIT_BY_SOURCE=${SPLIT_BY_SOURCE:-0} INPUT_DIR=${INPUT_DIR:-.} OUTPUT_DIR=${OUTPUT_DIR:-} KEEP_TMP=${KEEP_TMP:-0} SKIP_BAM=0 SKIP_DEDUP=0 SKIP_BPS=0 SKIP_R2C=0 print_usage() { sed -n '2,65p' "$0" | sed 's/^# \{0,1\}//' } # ---------------------------------------------------------- arg parse --- while [[ $# -gt 0 ]]; do case "$1" in -t|--threads) THREADS="$2"; shift 2 ;; -m|--mem) MEM="$2"; shift 2 ;; --sort-buffer) SORT_BUFFER="$2"; shift 2 ;; --split-by-source) SPLIT_BY_SOURCE=1; shift ;; --skip-split) SPLIT_BY_SOURCE=0; shift ;; --input-dir) INPUT_DIR="$2"; shift 2 ;; --output-dir) OUTPUT_DIR="$2"; shift 2 ;; --svaba) SVABA="$2"; shift 2 ;; --keep-tmp) KEEP_TMP=1; shift ;; --skip-bam) SKIP_BAM=1; shift ;; --skip-dedup) SKIP_DEDUP=1; shift ;; --skip-bps) SKIP_BPS=1; shift ;; --skip-r2c) SKIP_R2C=1; shift ;; -h|--help) print_usage; exit 0 ;; --) shift; break ;; -*) echo "svaba_postprocess.sh: unknown option '$1'" >&2 echo "run 'svaba_postprocess.sh --help' for usage" >&2 exit 2 ;; *) break ;; esac done if [[ $# -lt 1 ]]; then print_usage exit 2 fi ID=$1 shift OUTPUT_DIR=${OUTPUT_DIR:-$INPUT_DIR} if [[ ! -d "$INPUT_DIR" ]]; then echo "svaba_postprocess.sh: INPUT_DIR does not exist: $INPUT_DIR" >&2 exit 3 fi mkdir -p "$OUTPUT_DIR" # Human-readable echo of the plan so logs tell you what was about to run. echo "svaba_postprocess.sh: id=$ID threads=$THREADS mem=$MEM sort_buffer=$SORT_BUFFER" echo " : input_dir=$INPUT_DIR output_dir=$OUTPUT_DIR" echo " : split_by_source=$SPLIT_BY_SOURCE skip_bam=$SKIP_BAM skip_dedup=$SKIP_DEDUP skip_bps=$SKIP_BPS skip_r2c=$SKIP_R2C" # Useful for absolute-path filenames in the steps below. Use trailing-slash- # free form so we always concatenate `${DIR}/${name}`. INPUT_DIR=${INPUT_DIR%/} OUTPUT_DIR=${OUTPUT_DIR%/} # ======================================================================== # STEP 1: Merge per-thread BAMs and per-thread r2c.txt.gz. # # svaba run with multiple threads produces ${ID}.thread*.${suffix}.bam for # suffix in {discordant,weird,corrected}, and (with --dump-reads) # ${ID}.thread*.r2c.txt.gz. This step coalesces each family into a single # ${ID}.${suffix}.bam / ${ID}.r2c.txt.gz. # # Per-thread BAMs are merged with `samtools merge` — standard BAM merge # with header reconciliation. # # Per-thread r2c.txt.gz files are merged with plain `cat`: gzip is a # concatenation-safe format (RFC 1952), so concatenating multiple .gz # streams produces a valid .gz whose decompressed output is the # concatenation of each member's decompressed output. svaba guarantees # only the first worker (threadId == 1; the worker pool numbers # threads 1..N) emits the TSV column-header line, and the awk|sort # below places that file first in the merge, so the merged file has # exactly one header at the top regardless of thread count. # # Single-file inputs (only one thread) are renamed. No-file inputs are # silently skipped — this happens when the svaba run was single-threaded, # or when --dump-reads wasn't set (no r2c files to merge). # ======================================================================== if [[ $SKIP_BAM -eq 0 ]]; then echo "[1/5] merging per-thread BAMs" for suffix in discordant weird corrected; do target="${INPUT_DIR}/${ID}.${suffix}.bam" shopt -s nullglob bam_files=("${INPUT_DIR}/${ID}".thread*."${suffix}".bam) shopt -u nullglob if [[ ${#bam_files[@]} -gt 1 ]]; then echo " merge ${#bam_files[@]} thread BAMs for '$suffix' -> $target" "$SAM" merge -f -@ "$THREADS" "$target" "${bam_files[@]}" rm -f "${bam_files[@]}" elif [[ ${#bam_files[@]} -eq 1 ]]; then echo " mv ${bam_files[0]} -> $target" mv "${bam_files[0]}" "$target" fi done # Merge per-thread r2c.txt.gz → ${ID}.r2c.txt.gz. gzip is concat-safe, # so `cat a.gz b.gz > c.gz` is valid. Thread 1's file is first in the # numeric sort order (worker pool numbers threads 1..N; see # threadpool.h), and thread 1 is the one that emits the TSV header, # so its header line ends up at the top of the merged file. target="${INPUT_DIR}/${ID}.r2c.txt.gz" shopt -s nullglob r2c_files=("${INPUT_DIR}/${ID}".thread*.r2c.txt.gz) shopt -u nullglob if [[ ${#r2c_files[@]} -gt 1 ]]; then echo " merge ${#r2c_files[@]} thread r2c files -> $target" # Sort by thread index so thread 1 (with the header) is first. # Filenames are ${ID}.threadN.r2c.txt.gz — awk pulls the numeric # thread index out, sort -k1,1n orders it numerically, cut drops # the index so we get just the filenames back in sorted order. # # NB: avoid `mapfile` / `readarray` — they're bash 4+, and macOS # ships bash 3.2 as /bin/bash, which `#!/usr/bin/env bash` often # resolves to. The `while read` loop below is fully portable. r2c_sorted=() while IFS= read -r f; do r2c_sorted+=("$f") done < <( printf '%s\n' "${r2c_files[@]}" \ | awk -F'.thread|.r2c.txt.gz' '{print $(NF-1)"\t"$0}' \ | sort -k1,1n \ | cut -f2- ) cat "${r2c_sorted[@]}" > "$target" rm -f "${r2c_sorted[@]}" elif [[ ${#r2c_files[@]} -eq 1 ]]; then echo " mv ${r2c_files[0]} -> $target" mv "${r2c_files[0]}" "$target" fi else echo "[1/5] skipping BAM + r2c merge (--skip-bam)" fi # ======================================================================== # STEP 2: svaba postprocess — sort, stream-dedup, stamp @PG, build .bai. # # Heavy lifting lives in the C++ subcommand. We just pass it the thread / # memory budget; svaba postprocess splits THREADS across suffixes and passes # -m to samtools sort per-thread. # # --skip-dedup at this layer maps to `--sort-only` on the C++ CLI, which # still runs the sort + @PG-stamp + index phases but skips the # stream-dedup pass. Combined with the C++'s auto-skip-sort-when-already- # sorted check (via @HD SO:coordinate), a rerun with --skip-dedup on # already-postprocessed files is effectively a no-op other than # re-stamping PG + rebuilding the .bai. # ======================================================================== if [[ $SKIP_BAM -eq 0 ]]; then pp_args=(-i "$ID" -t "$THREADS" -m "$MEM") if [[ $SKIP_DEDUP -eq 1 ]]; then pp_args+=(--sort-only) dedup_banner="(dedup skipped via --skip-dedup)" else dedup_banner="" fi echo "[2/5] svaba postprocess: sort + dedup + @PG + BAI index (threads=$THREADS, mem=$MEM) $dedup_banner" # Indent all sub-output and suppress the harmless htslib "idx_find_and_load" # warnings (index files don't exist yet when the reader opens the BAM — # they're built as the final step of each suffix's pipeline). Also strip # the NOTE line about those warnings since we're filtering them here. # Use awk instead of grep -v so a zero-match case doesn't trigger pipefail. (cd "$INPUT_DIR" && "$SVABA" postprocess "${pp_args[@]}" 2>&1) \ | awk '!/idx_find_and_load/ && !/Could not retrieve index file.*expected and can be ignored/' \ | sed 's/^/ /' else echo "[2/5] skipping svaba postprocess (--skip-bam)" fi # ======================================================================== # STEP 3: Sort, dedup, and PASS-filter the bps.txt. # # Three outputs: sorted, sorted+dedup (one row per unique breakpoint pair, # keeping the row with highest maxlod), sorted+dedup+PASS. Preserves the # leading "#chr1..." header row in every output. Uses GNU sort (or gsort # on macOS) for external-memory sort; --parallel=THREADS, -S SORT_BUFFER. # # Column positions in bps.txt (hard-coded from BreakPoint::toFileString): # col 32 = confidence (PASS / LOWMAPQ / BLACKLIST / ...) # col 38 = maxlod (numeric; "NA" sorts last with -g) # # Sort keys in order: chr1(V), pos1(n), strand1, chr2(V), pos2(n), strand2, # maxlod(gr, descending). # ======================================================================== BPS_GZ="${INPUT_DIR}/${ID}.bps.txt.gz" BPS_TXT="${INPUT_DIR}/${ID}.bps.txt" OUT_SORTED="${OUTPUT_DIR}/${ID}.bps.sorted.txt.gz" OUT_DEDUP="${OUTPUT_DIR}/${ID}.bps.sorted.dedup.txt.gz" OUT_PASS="${OUTPUT_DIR}/${ID}.bps.sorted.dedup.pass.txt.gz" OUT_PASS_SOM="${OUTPUT_DIR}/${ID}.bps.sorted.dedup.pass.somatic.txt.gz" # Column positions — auto-detected from the header when available (see # detect_columns below). These are the v3 defaults; the old format has # different positions (e.g. confidence at col 26 instead of 32). CONF_COL=32 SOMATIC_COL=36 SOMLOD_COL=37 MAXLOD_COL=38 CNAME_COL=30 pick_sort() { if command -v gsort >/dev/null 2>&1; then echo gsort; return 0 fi if sort --version 2>/dev/null | head -n 1 | grep -qi 'gnu'; then echo sort; return 0 fi return 1 } # Auto-detect column positions from the header line. Looks for known # column names and sets CONF_COL, SOMATIC_COL, SOMLOD_COL, MAXLOD_COL. # Falls back to v3 defaults if the header is missing or unrecognised. detect_columns() { local header_line="$1" # strip leading # if present local clean="${header_line#\#}" # Use awk to find column indices by name. Tries both old and new # column names (e.g. "somatic_score" vs the unnamed v3 col, # "contig" vs "cname"). eval "$(echo "$clean" | awk -F'\t' '{ for (i = 1; i <= NF; i++) { col = $i # strip whitespace gsub(/^[ \t]+|[ \t]+$/, "", col) # normalise to lowercase for matching lcol = tolower(col) if (lcol == "confidence") printf "CONF_COL=%d\n", i if (lcol == "somatic_score") printf "SOMATIC_COL=%d\n", i if (lcol == "somatic_lod") printf "SOMLOD_COL=%d\n", i if (lcol == "tlod" || lcol == "maxlod" || lcol == "max_lod") printf "MAXLOD_COL=%d\n", i if (lcol == "contig" || lcol == "cname") printf "CNAME_COL=%d\n", i } }')" } if [[ $SKIP_BPS -eq 0 ]]; then if [[ -r "$BPS_GZ" ]]; then IN_BPS="$BPS_GZ"; READER="gzip -dc" elif [[ -r "$BPS_TXT" ]]; then IN_BPS="$BPS_TXT"; READER="cat" else IN_BPS=""; fi if [[ -z "$IN_BPS" ]]; then echo "[3/5] skipping bps sort/dedup/PASS: $BPS_GZ (or .bps.txt) not found" elif ! SORT_BIN=$(pick_sort); then echo "[3/5] skipping bps sort/dedup/PASS: GNU sort not on PATH" >&2 echo " (macOS: 'brew install coreutils' for gsort)" >&2 else echo "[3/5] sort + dedup + PASS-filter $IN_BPS" echo " sort=$SORT_BIN buffer=$SORT_BUFFER parallel=$THREADS" TMP_BPS=$(mktemp -d "${TMPDIR:-/tmp}/svaba_pp_bps.XXXXXXXX") # Single cleanup trap for the whole script; registered the first time # we need a tempdir. Registered here because step 3 creates the first # tempdir used. trap 'if [[ "${KEEP_TMP:-0}" == "1" ]]; then echo "svaba_postprocess.sh: leaving scratch at: $TMP_BPS${TMP_SPLIT:+ $TMP_SPLIT}" >&2 else rm -rf "$TMP_BPS" "${TMP_SPLIT:-}" fi' EXIT INT TERM # Peek at the first line to decide whether to split off a header. FIRST_LINE=$($READER "$IN_BPS" | head -n 1 || true) HAS_HEADER=0 [[ "${FIRST_LINE:0:1}" == "#" ]] && HAS_HEADER=1 # Auto-detect column positions from the header. if [[ $HAS_HEADER -eq 1 ]]; then detect_columns "$FIRST_LINE" fi echo " columns: confidence=$CONF_COL cname=$CNAME_COL somatic=$SOMATIC_COL somlod=$SOMLOD_COL maxlod=$MAXLOD_COL" # --- 3a) sort --- { if [[ $HAS_HEADER -eq 1 ]]; then printf '%s\n' "$FIRST_LINE" $READER "$IN_BPS" | tail -n +2 else $READER "$IN_BPS" fi | { if [[ $HAS_HEADER -eq 1 ]]; then IFS= read -r hdr printf '%s\n' "$hdr" fi LC_ALL=C "$SORT_BIN" \ -t $'\t' \ -k1,1V \ -k2,2n \ -k3,3 \ -k4,4V \ -k5,5n \ -k6,6 \ -k${MAXLOD_COL},${MAXLOD_COL}gr \ -S "$SORT_BUFFER" \ --parallel="$THREADS" \ -T "$TMP_BPS" } } | gzip -c > "$OUT_SORTED" echo " wrote $OUT_SORTED" # --- 3b) dedup by breakpoint pair (first row per key wins = highest maxlod) --- gzip -dc "$OUT_SORTED" | awk -F'\t' -v OFS='\t' ' NR == 1 && $0 ~ /^#/ { print; next } { key = $1 FS $2 FS $3 FS $4 FS $5 FS $6 if (!(key in seen)) { seen[key] = 1; print } } ' | gzip -c > "$OUT_DEDUP" echo " wrote $OUT_DEDUP" # --- 3c) PASS-filter the dedup --- gzip -dc "$OUT_DEDUP" | awk -F'\t' -v OFS='\t' -v CCOL="$CONF_COL" ' NR == 1 && $0 ~ /^#/ { print; next } $CCOL == "PASS" { print } ' | gzip -c > "$OUT_PASS" echo " wrote $OUT_PASS" # --- 3d) PASS + somatic filter --- # Use somatic_score == "1" as the sole somatic gate. The old format's # "somatic_lod" column is actually n.LO_n (normal variant LO) — high # values mean strong normal evidence, which argues AGAINST somatic. # The v3 "somlod" is a proper somatic log-odds, but somatic_score is # set correctly in both formats, so we use it uniformly. gzip -dc "$OUT_PASS" | awk -F'\t' -v OFS='\t' \ -v SCOL="$SOMATIC_COL" ' NR == 1 && $0 ~ /^#/ { print; next } $SCOL == "1" { print } ' | gzip -c > "$OUT_PASS_SOM" echo " wrote $OUT_PASS_SOM" fi else echo "[3/5] skipping bps sort/dedup/PASS (--skip-bps)" fi # ======================================================================== # STEP 4: Filter r2c.txt.gz to PASS contigs (+ PASS-somatic subset). # # The structured r2c TSV emitted by `svaba run` contains one row per # assembled contig + one row per r2c-aligned read, for every variant- # bearing contig. At full genome scale this can be tens of millions of # rows — too heavy for the interactive viewer. Here we produce TWO # filtered outputs from a single pass over r2c.txt.gz: # # ${ID}.r2c.pass.txt.gz - rows for all PASS variants # ${ID}.r2c.pass.somatic.txt.gz - rows for PASS variants that are also # somatic (somlod >= 1 for v3 format, # somatic_score == 1 for legacy) # # Both are keyed on cname (col 30 in bps.txt.gz, col 2 in r2c.txt.gz); # contig and read rows survive together since they share col 2. # # The somatic subset is a strict subset of the pass set, and both are # written by the same awk invocation over r2c.txt.gz via awk's pipe-to- # command output — one decompress+iterate pass, two gzip compressors # running in parallel as child processes. Avoids reading the multi-GB # r2c file twice. # ======================================================================== R2C_GZ="${INPUT_DIR}/${ID}.r2c.txt.gz" R2C_OUT="${OUTPUT_DIR}/${ID}.r2c.pass.txt.gz" R2C_OUT_SOM="${OUTPUT_DIR}/${ID}.r2c.pass.somatic.txt.gz" if [[ $SKIP_R2C -eq 0 ]]; then if [[ ! -f "$BPS_GZ" ]]; then echo "[4/5] skipping r2c PASS filter: $BPS_GZ not found" elif [[ ! -f "$R2C_GZ" ]]; then echo "[4/5] skipping r2c PASS filter: $R2C_GZ not found" echo " (svaba run must be invoked with --dump-reads to produce it;" echo " or this is an older svaba run from before r2c.txt.gz existed.)" else echo "[4/5] filter r2c to PASS contigs (+ PASS-somatic subset)" pass_list="$(mktemp -t "svaba.${ID}.pass_cnames.XXXXXX")" som_list="$(mktemp -t "svaba.${ID}.som_cnames.XXXXXX")" # Column positions are auto-detected from the header in step 3 above # (CONF_COL, CNAME_COL, SOMLOD_COL, SOMATIC_COL). If step 3 was # skipped, re-detect from bps.txt.gz's own header here. if [[ $SKIP_BPS -eq 1 ]]; then BPS_HEADER=$(gzip -dc "$BPS_GZ" | head -n 1 || true) [[ "${BPS_HEADER:0:1}" == "#" ]] && detect_columns "$BPS_HEADER" echo " columns: confidence=$CONF_COL cname=$CNAME_COL somatic=$SOMATIC_COL somlod=$SOMLOD_COL" fi # One awk pass builds both cname sets so we only decompress bps.txt.gz # once. NB: use `gzip -dc` (not `zcat`) so this works on macOS — BSD # zcat hunts for a .Z suffix rather than .gz. # Somatic criterion: somatic_score == "1" (reliable in both old and v3 formats). gzip -dc "$BPS_GZ" \ | awk -F'\t' -v pass_f="$pass_list" -v som_f="$som_list" \ -v CCOL="$CONF_COL" -v NCOL="$CNAME_COL" \ -v SCOL="$SOMATIC_COL" ' NR>1 && $CCOL=="PASS" { print $NCOL >> pass_f if ($SCOL == "1") { print $NCOL >> som_f } } ' LC_ALL=C sort -u "$pass_list" -o "$pass_list" LC_ALL=C sort -u "$som_list" -o "$som_list" n_pass=$(wc -l < "$pass_list" | awk '{print $1}') n_som=$(wc -l < "$som_list" | awk '{print $1}') if [[ "$n_pass" -eq 0 ]]; then echo " no PASS breakpoints — skipping both r2c.pass and r2c.pass.somatic." rm -f "$pass_list" "$som_list" else # Single-pass r2c filter writing both outputs via awk's pipe-to- # command feature. The two `gzip -c > file` child processes run in # parallel, so compression of the two outputs happens concurrently # on separate cores. Each output gets the same header row and then # whichever filtered rows match its cname set. gzip -dc "$R2C_GZ" \ | awk -F'\t' -v pass_f="$pass_list" -v som_f="$som_list" \ -v pass_out="$R2C_OUT" -v som_out="$R2C_OUT_SOM" ' BEGIN { while ((getline line < pass_f) > 0) keep_pass[line] = 1 close(pass_f) while ((getline line < som_f) > 0) keep_som[line] = 1 close(som_f) pass_cmd = "gzip -c > " pass_out som_cmd = "gzip -c > " som_out } NR == 1 { print | pass_cmd print | som_cmd next } ($1 == "contig" || $1 == "read") { if ($2 in keep_pass) print | pass_cmd if ($2 in keep_som) print | som_cmd } END { close(pass_cmd) close(som_cmd) } ' n_pass_rows=$(gzip -dc "$R2C_OUT" | wc -l | awk '{print $1}') n_som_rows=$(gzip -dc "$R2C_OUT_SOM" | wc -l | awk '{print $1}') echo " wrote $R2C_OUT ($n_pass PASS contigs, $n_pass_rows rows incl. header)" echo " wrote $R2C_OUT_SOM ($n_som PASS+somatic [somlod>=1] contigs, $n_som_rows rows incl. header)" rm -f "$pass_list" "$som_list" fi fi else echo "[4/5] skipping r2c PASS filter (--skip-r2c)" fi # ======================================================================== # STEP 5 (optional): Split deduped BAMs by QNAME source prefix. # # Enabled by --split-by-source (or SPLIT_BY_SOURCE=1). Routes each record # into ${ID}.${suffix}.${prefix}.bam based on the first 4 chars of QNAME # (the "source tag" like t001/n001), then sorts+indexes each output. # Runs for discordant/weird/corrected only (not contigs). # ======================================================================== if [[ "$SPLIT_BY_SOURCE" == "1" ]]; then echo "[5/5] splitting BAMs by QNAME source prefix" for suffix in discordant weird corrected; do bam="${INPUT_DIR}/${ID}.${suffix}.bam" if [[ ! -f "$bam" ]]; then echo " skip: $bam not found" continue fi echo " splitting $bam" TMP_SPLIT=$(mktemp -d "${TMPDIR:-/tmp}/svaba_pp_split.XXXXXXXX") header="${TMP_SPLIT}/header.sam" "$SAM" view -H "$bam" > "$header" # Single-pass route by first 4 chars of QNAME into per-prefix SAM files. "$SAM" view "$bam" | awk -v tmpdir="$TMP_SPLIT" '{ prefix = substr($1, 1, 4) out = tmpdir "/body." prefix ".sam" print >> out }' shopt -s nullglob bodies=("${TMP_SPLIT}"/body.*.sam) shopt -u nullglob n_bodies=${#bodies[@]} if [[ $n_bodies -gt 0 ]]; then per_job_threads=$(( THREADS / n_bodies )) [[ $per_job_threads -lt 1 ]] && per_job_threads=1 max_parallel=$(( THREADS < n_bodies ? THREADS : n_bodies )) echo " reassembling $n_bodies per-prefix BAMs (max_parallel=$max_parallel, threads/job=$per_job_threads)" pids=() for body in "${bodies[@]}"; do while [[ ${#pids[@]} -ge $max_parallel ]]; do new_pids=() for pid in "${pids[@]}"; do kill -0 "$pid" 2>/dev/null && new_pids+=("$pid") done pids=("${new_pids[@]}") [[ ${#pids[@]} -ge $max_parallel ]] && sleep 0.1 done base=$(basename "$body" .sam) prefix="${base#body.}" out="${OUTPUT_DIR}/${ID}.${suffix}.${prefix}.bam" echo " writing $out" ( cat "$header" "$body" \ | "$SAM" view -@ "$per_job_threads" -u -bS - \ | "$SAM" sort -@ "$per_job_threads" -m "$MEM" -o "$out" - \ && "$SAM" index -@ "$per_job_threads" "$out" ) & pids+=("$!") done wait fi if [[ "${KEEP_TMP:-0}" != "1" ]]; then rm -rf "$TMP_SPLIT" TMP_SPLIT="" fi done else echo "[5/5] skipping split-by-source (pass --split-by-source to enable)" fi echo "svaba_postprocess.sh: done." ================================================ FILE: scripts/update_svaba_image.sh ================================================ #!/usr/bin/env bash # # update_svaba_image.sh — rebuild the svaba worker image from the builder VM. # # Stops the builder, deletes the old image, creates a new one, restarts # the builder. Takes ~2-3 minutes. # # Usage: # update_svaba_image.sh [options] # # --builder NAME builder VM name (default: svaba-image-builder) # --image NAME image name (default: svaba-worker-image) # --zone ZONE GCP zone (default: us-central1-a) # -h, --help this message # set -euo pipefail BUILDER="svaba-image-builder" IMAGE="svaba-worker-image" ZONE="us-central1-a" while [[ $# -gt 0 ]]; do case "$1" in --builder) BUILDER="$2"; shift 2 ;; --image) IMAGE="$2"; shift 2 ;; --zone) ZONE="$2"; shift 2 ;; -h|--help) sed -n '2,14p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; *) echo "unknown option: $1" >&2; exit 2 ;; esac done echo "=== updating image '${IMAGE}' from '${BUILDER}' ===" echo "1. stopping ${BUILDER}..." gcloud compute instances stop "$BUILDER" --zone="$ZONE" echo "2. deleting old image '${IMAGE}'..." gcloud compute images delete "$IMAGE" --quiet 2>/dev/null || echo " (no existing image to delete)" echo "3. creating new image..." gcloud compute images create "$IMAGE" \ --source-disk="$BUILDER" \ --source-disk-zone="$ZONE" echo "4. restarting ${BUILDER}..." gcloud compute instances start "$BUILDER" --zone="$ZONE" echo "=== done. image '${IMAGE}' is ready ===" ================================================ FILE: src/SGA/Algorithm/ClusterProcess.cpp ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ClusterProcess - Merge unambiguously overlapping sequences // #include "ClusterProcess.h" #include "SGAlgorithms.h" #include "SGVisitors.h" // ClusterProcess::ClusterProcess(ClusterParameters params) : m_parameters(params) { // Check parameters are set assert(m_parameters.pOverlapper != NULL); assert(m_parameters.pMarkedReads != NULL); assert(m_parameters.minOverlap >= 12); } // ClusterProcess::~ClusterProcess() { } // ClusterResult ClusterProcess::process(const SequenceWorkItem& item) { ReadCluster cluster(m_parameters.pOverlapper, m_parameters.minOverlap); ClusterNode node = cluster.addSeed(item.read.seq.toString(), true); assert(node.interval.isValid()); // Check if this read is already part of a cluster. If so, return an empty result for(int64_t i = node.interval.lower; i <= node.interval.upper; ++i) { if(m_parameters.pMarkedReads->test(i)) { ClusterResult result; return result; // already part of a cluster, return nothing } } // Add sequences to be used to stop extension, if requested if(m_parameters.pLimitKmers != NULL) cluster.setLimitKmers(m_parameters.pLimitKmers, m_parameters.limitK); // Run the clustering process cluster.run(m_parameters.maxClusterSize, 0); // If some work was performed, update the bitvector so other threads do not try to merge the same set of reads. // As a given set of reads should all be merged together, we only need to make sure we atomically update // the bit for the read with the lowest index in the set. ClusterResult result; result.clusterNodes = cluster.getOutput(); // Check if the bit in the vector has already been set for the lowest read index // If it has some other thread has already output this set so we do nothing int64_t lowestIndex = result.clusterNodes.front().interval.lower; bool currentValue = m_parameters.pMarkedReads->test(lowestIndex); bool updateSuccess = false; if(currentValue == false) { // Attempt to update the bit vector with an atomic CAS. If this returns false // the bit was set by some other thread updateSuccess = m_parameters.pMarkedReads->updateCAS(lowestIndex, currentValue, true); } if(updateSuccess) { // We successfully atomically set the bit for the first read in this set // to true. We can safely update the rest of the bits and keep the merged sequences // for output. std::vector::const_iterator iter = result.clusterNodes.begin(); for(; iter != result.clusterNodes.end(); ++iter) { for(int64_t i = iter->interval.lower; i <= iter->interval.upper; ++i) { if(i == lowestIndex) //already set continue; currentValue = m_parameters.pMarkedReads->test(i); if(currentValue) { // This value should not be true, emit a warning std::cout << "Warning: Bit " << i << " was unexpectedly set by a different thread\n"; } else { m_parameters.pMarkedReads->updateCAS(i, currentValue, true); } } } } else { // Some other thread merged these reads already, discard the intermediate // data and set the result to false result.clusterNodes.clear(); } return result; } // Generate a new cluster from a previously build cluster ClusterResult ClusterProcess::process(const ClusterVector& inSequences) { ReadCluster cluster(m_parameters.pOverlapper, m_parameters.minOverlap); // Add seeds to the cluster generator for(size_t i = 0; i < inSequences.size(); ++i) cluster.addSeed(inSequences[i].sequence, false); // Add sequences to be used to stop extension, if requested if(m_parameters.pLimitKmers != NULL) cluster.setLimitKmers(m_parameters.pLimitKmers, m_parameters.limitK); cluster.run(m_parameters.maxClusterSize, m_parameters.maxIterations); ClusterResult result; result.clusterNodes = cluster.getOutput(); return result; } // ClusterPostProcess::ClusterPostProcess(std::ostream* pWriter, size_t minClusterSize, BitVector* pMarkedReads) : m_minClusterSize(minClusterSize), m_numClusters(0), m_numTotalReads(0), m_numTotalReadsClustered(0), m_pWriter(pWriter), m_pMarkedReads(pMarkedReads) { } // ClusterPostProcess::~ClusterPostProcess() { printf("[sga cluster] Clustered %zu reads into %zu clusters (%zu total reads input)\n", m_numTotalReadsClustered, m_numClusters, m_numTotalReads); } // This just dispatches to main post-process function void ClusterPostProcess::process(const SequenceWorkItem& /*item*/, const ClusterResult& result) { process(result); } // void ClusterPostProcess::process(const ClusterVector& /*in*/, const ClusterResult& result) { process(result); } void ClusterPostProcess::process(const ClusterResult& result) { m_numTotalReads += 1; if(result.clusterNodes.size() > 0) { // Compute the cluster size size_t clusterSize = 0; for(size_t i = 0; i < result.clusterNodes.size(); ++i) { if(result.clusterNodes[i].interval.isValid()) clusterSize += result.clusterNodes[i].interval.size(); else clusterSize += 1; } if(clusterSize >= m_minClusterSize) { for(size_t i = 0; i < result.clusterNodes.size(); ++i) *m_pWriter << "cluster-" << m_numClusters << "\t" << clusterSize << "\t" << result.clusterNodes[i].sequence << "\t" << result.clusterNodes[i].interval << "\n"; m_numClusters += 1; m_numTotalReadsClustered += clusterSize; } } } ================================================ FILE: src/SGA/Algorithm/ClusterProcess.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ClusterProcess - Compute clusters of overlapping reads // #ifndef CLUSTERPROCESS_H #define CLUSTERPROCESS_H #include "Util.h" #include "OverlapAlgorithm.h" #include "SequenceProcessFramework.h" #include "BitVector.h" #include "Bigraph.h" #include "SGUtil.h" #include "ReadCluster.h" #include "ClusterReader.h" struct ClusterParameters { const OverlapAlgorithm* pOverlapper; int minOverlap; size_t maxClusterSize; int maxIterations; BitVector* pMarkedReads; // shared between threads const std::set* pLimitKmers; size_t limitK; }; struct ClusterResult { std::vector clusterNodes; }; // Compute the overlap blocks for reads class ClusterProcess { public: ClusterProcess(ClusterParameters params); ~ClusterProcess(); // Generate a cluster from a single sequence ClusterResult process(const SequenceWorkItem& item); // Generate a new cluster from a previously build cluster ClusterResult process(const ClusterVector& inSequences); private: ClusterParameters m_parameters; }; // Write the cluster results to a temporary output file class ClusterPostProcess { public: ClusterPostProcess(std::ostream* pWriter, size_t minClusterSize, BitVector* pMarkedReads); ~ClusterPostProcess(); void process(const SequenceWorkItem& item, const ClusterResult& result); void process(const ClusterVector& inSequences /*in*/, const ClusterResult& result); void process(const ClusterResult& result); private: size_t m_minClusterSize; size_t m_numClusters; size_t m_numTotalReads; size_t m_numTotalReadsClustered; std::ostream* m_pWriter; BitVector* m_pMarkedReads; }; #endif ================================================ FILE: src/SGA/Algorithm/ConnectProcess.cpp ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ConnectProcess - Algorithm to resolve the sequence // connecting two ends of a paired end read // #include "ConnectProcess.h" #include "StringGraphGenerator.h" // // // ConnectProcess::ConnectProcess(const OverlapAlgorithm* pOverlapper, int minOverlap, int maxDistance) : m_pOverlapper(pOverlapper), m_minOverlap(minOverlap), m_maxDistance(maxDistance) { } // ConnectProcess::~ConnectProcess() { } // ConnectResult ConnectProcess::process(const SequenceWorkItemPair& workItemPair) { assert(getPairID(workItemPair.first.read.id) == workItemPair.second.read.id); ConnectResult result; StringGraphGenerator localGraph(m_pOverlapper, workItemPair.first.read, workItemPair.second.read, m_minOverlap, ED_SENSE, m_maxDistance); SGWalkVector walks = localGraph.searchWalks(); //std::cout << "Found " << walks.size() << " walk between " << workItemPair.first.read.id << " and " << workItemPair.second.read.id << "\n"; if(walks.size() == 1) { SGWalk& solution = walks.front(); result.resolvedSequence = solution.getString(SGWT_START_TO_END); //std::cout << "Solution has length " << solution.getStartToEndDistance() << "\n"; } return result; } // // // ConnectPostProcess::ConnectPostProcess(std::ostream* pWriter, std::ostream* pUnconnectedWriter) : m_pWriter(pWriter), m_pUnconnectedWriter(pUnconnectedWriter), m_numPairsTotal(0), m_numPairsResolved(0) { } // ConnectPostProcess::~ConnectPostProcess() { printf("connect: Resolved %d out of %d pairs (%lf)\n", m_numPairsResolved, m_numPairsTotal, (double)m_numPairsResolved / m_numPairsTotal); } // void ConnectPostProcess::process(const SequenceWorkItemPair& workItemPair, const ConnectResult& result) { ++m_numPairsTotal; if(result.resolvedSequence.length() > 0) { ++m_numPairsResolved; SeqRecord record; record.id = getPairBasename(workItemPair.first.read.id); record.seq = result.resolvedSequence; record.write(*m_pWriter); } else { workItemPair.first.read.write(*m_pUnconnectedWriter); workItemPair.second.read.write(*m_pUnconnectedWriter); } } ================================================ FILE: src/SGA/Algorithm/ConnectProcess.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ConnectProcess - Wrapper to resolve the sequence // connecting two ends of a paired end read // #ifndef CONNECTROCESS_H #define CONNECTPROCESS_H #include "Util.h" #include "OverlapAlgorithm.h" #include "SequenceProcessFramework.h" #include "SequenceWorkItem.h" #include "MultiOverlap.h" #include "Metrics.h" class ConnectResult { public: DNAString resolvedSequence; }; // class ConnectProcess { public: ConnectProcess(const OverlapAlgorithm* pOverlapper, int minOverlap, int maxDistance); ~ConnectProcess(); ConnectResult process(const SequenceWorkItemPair& workPair); private: const OverlapAlgorithm* m_pOverlapper; const int m_minOverlap; const int m_maxDistance; }; // Write the results from the overlap step to an ASQG file class ConnectPostProcess { public: ConnectPostProcess(std::ostream* pWriter, std::ostream* pUnconnectedWriter); ~ConnectPostProcess(); void process(const SequenceWorkItemPair& workPair, const ConnectResult& result); private: std::ostream* m_pWriter; std::ostream* m_pUnconnectedWriter; int m_numPairsTotal; int m_numPairsResolved; }; #endif ================================================ FILE: src/SGA/Algorithm/DPAlignment.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // DPAlignment - Generic class for dynamic programming alignments // #include "DPAlignment.h" DPAlignment::DPAlignment(const std::string& s1, const std::string& s2, DPAlignMode mode, DPScoringScheme scoring) : m_mode(mode), m_scoring(scoring) { if(s1.empty() || s2.empty()) return; m_dimM = s1.size() + 1; // = num rows m_dimN = s2.size() + 1; // = num columns initializeDPMatrix(); fillMatrix(s1, s2); //printMatrix(s1, s2); } // int DPAlignment::getNumRows() const { return m_dimM; } // int DPAlignment::getNumColumns() const { return m_dimN; } // int DPAlignment::getScore(int i, int j) const { assert(i < m_dimM && j < m_dimN); return m_matrix[i][j]; } // DPScoringScheme DPAlignment::getScoringScheme() const { return m_scoring; } // Setup the dynamic programming matrix for overlap computation void DPAlignment::initializeDPMatrix() { m_matrix.resize(m_dimM); // rows for(int i = 0; i < m_dimM; ++i) m_matrix[i].resize(m_dimN); // columns // Set score[i][0] (first column) to be zero for all i if in overlap mode. // This is so we don't penalize the portion of S1 that // S2 does not overlap for(int i = 0; i < m_dimM; ++i) m_matrix[i][0] = (m_mode == DPM_OVERLAP) ? 0 : i * gap_penalty(); // Set score [0][j] (first row) to be j for all j // This represents not matching the first j bases of S1 for(int j = 0; j < m_dimN; ++j) m_matrix[0][j] = gap_penalty() * j; } // Fill in the DP matrix void DPAlignment::fillMatrix(const std::string& s1, const std::string& s2) { // Update the value of each cell for all i and j greater than zero for(int i = 1; i < m_dimM; ++i) { for(int j = 1; j < m_dimN; ++j) { int up = m_matrix[i - 1][j] + gap_penalty(); // skip a base of S1 int left = m_matrix[i][j - 1] + gap_penalty(); // skip a base of S2 int idx1 = i - 1; int idx2 = j - 1; int diag = m_matrix[i - 1][j - 1] + match_score(s1[idx1], s2[idx2]); m_matrix[i][j] = compare3(up, left, diag); } } } // Print the best alignment starting from the given cell void DPAlignment::printAlignment(const std::string& s1, const std::string& s2, int startI, int startJ) const { if(m_matrix.empty()) return; if(startI == -1 || startJ == -1) { startI = m_dimM - 1; startJ = m_dimN - 1; } int score = m_matrix[startI][startJ]; DPPath backtrack = calculatePath(s1, s2, startI, startJ); // Print the match strings std::string m1; std::string m2; std::string os; for(DPPath::iterator iter = backtrack.begin(); iter != backtrack.end(); ++iter) { int i = iter->i; int j = iter->j; //printf("(%d %d)\n", i, j); switch(iter->op) { case DPO_MATCH: case DPO_SUB: assert(i >= 0 && i < (int)s1.size() && j >= 0 && j < (int)s2.size()); m1.push_back(s1[i]); m2.push_back(s2[j]); os.push_back(iter->op == DPO_MATCH ? '.' : 'S'); break; case DPO_INSERT: assert(j >= 0 && j < (int)s2.size()); m1.push_back('-'); m2.push_back(s2[j]); os.push_back('I'); break; case DPO_DELETE: assert(i >= 0 && i < (int)s1.size()); m1.push_back(s1[i]); m2.push_back('-'); os.push_back('D'); break; case DPO_NOOP: assert(false); break; } } std::cout << "M1: " << m1 << "\n"; std::cout << "M2: " << m2 << "\n"; std::cout << "OS: " << os << "\n"; std::cout << "Score: " << score << "\n"; } // Get the operation that was performed to arrive at cell i,j // If there are multiple possible paths, the // precedence is diagonal, above, left DPOperation DPAlignment::getPathOperationToCell(const std::string& s1, const std::string& s2, int i, int j) const { assert((i > 0 || j > 0) && i < m_dimM && j < m_dimN); // Get the score of cell i,j int currScore = getScore(i,j); // Check diagonal first int a = i - 1; int b = j - 1; if(a >= 0 && b >= 0) { if(currScore == m_matrix[a][b] + match_score(s1[a],s2[b])) return (s1[a] == s2[b]) ? DPO_MATCH : DPO_SUB; } // Check above element a = i - 1; b = j; if(a >= 0 && b >= 0) { // If this is overlap mode, there is no deletion // penalty in the first column int above_score = (m_mode == DPM_OVERLAP && b == 0) ? 0 : gap_penalty(); if(currScore == m_matrix[a][b] + above_score) return DPO_DELETE; } // Check left element a = i; b = j - 1; if(a >= 0 && b >= 0) { if(currScore == m_matrix[a][b] + gap_penalty()) return DPO_INSERT; } assert(false); return DPO_NOOP; } // Calculate an optimal path through the alignment starting from the given cell DPPath DPAlignment::calculatePath(const std::string& s1, const std::string& s2, int startI, int startJ) const { assert((int)s1.size() == m_dimM - 1 && (int)s2.size() == m_dimN - 1); DPPath out; DPPathNode currNode; currNode.i = startI; currNode.j = startJ; currNode.op = DPO_NOOP; while(currNode.i != 0 || currNode.j != 0) { // Set the node to be the cell that preceded the current one DPPathNode nextNode; // The path node op is the operation leading away from the cell nextNode.op = getPathOperationToCell(s1, s2, currNode.i, currNode.j); // Set the cell coordinates based on the op switch(nextNode.op) { case DPO_MATCH: case DPO_SUB: nextNode.i = currNode.i - 1; nextNode.j = currNode.j - 1; break; case DPO_DELETE: nextNode.i = currNode.i - 1; nextNode.j = currNode.j; break; case DPO_INSERT: nextNode.i = currNode.i; nextNode.j = currNode.j - 1; break; case DPO_NOOP: assert(false); } out.push_back(nextNode); currNode = nextNode; } out.reverse(); return out; } // void DPAlignment::printMatrix(const std::string& s1, const std::string& s2) const { // Print the DP matrix std::cout << " \t-\t"; for(int j = 1; j < m_dimN; ++j) { std::cout << s2[j - 1] << "\t"; } std::cout << "\n"; for(int i = 0; i < m_dimM; ++i) { if(i == 0) std::cout << "-\t"; else std::cout << s1[i - 1] << "\t"; for(int j = 0; j < m_dimN; ++j) { std::cout << m_matrix[i][j] << "\t"; } std::cout << "\n"; } } ================================================ FILE: src/SGA/Algorithm/DPAlignment.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // DPAlignment - Generic class for dynamic programming alignments // #ifndef DPALIGNMENT_H #define DPALIGNMENT_H #include "Match.h" #include inline int min3(int a, int b, int c) { return std::min(std::min(a,b), c); } inline int max3(int a, int b, int c) { return std::max(std::max(a,b), c); } // Scoring scheme used to calculate the minimum edit distance // between two strings class EditDistanceScoring { public: static int match_score(char a, char b) { return (a == b) ? 0 : 1; }; static int compare3(int a, int b, int c) { return min3(a,b,c); } static int gap_penalty() { return 1; } }; // Scoring scheme used to calculate the similarity of two strings class SimilarityScoring { public: static int match_score(char a, char b) { return (a == b) ? 2 : -1; }; static int compare3(int a, int b, int c) { return max3(a,b,c); } static int gap_penalty() { return -1; } }; // Path data structures enum DPOperation { DPO_MATCH, DPO_SUB, DPO_INSERT, DPO_DELETE, DPO_NOOP }; // struct DPPathNode { DPPathNode() : i(0), j(0), op(DPO_MATCH) {} int i; int j; // The operation leading to the next cell, not to this one DPOperation op; }; typedef std::list DPPath; // enum DPAlignMode { DPM_OVERLAP, DPM_ALIGNMENT }; // enum DPScoringScheme { DPSS_EDIT, DPSS_SIMILARITY }; class DPAlignment { public: // DPAlignment(const std::string& s1, const std::string& s2, DPAlignMode mode, DPScoringScheme scoring); // void printMatrix(const std::string& s1, const std::string& s2) const; void printAlignment(const std::string& s1, const std::string& s2, int startI = -1, int startJ = -1) const; DPPath calculatePath(const std::string& s1, const std::string& s2, int startI, int startJ) const; // int getNumRows() const; int getNumColumns() const; int getScore(int i, int j) const; DPOperation getPathOperationToCell(const std::string& s1, const std::string& s2, int i, int j) const; // DPScoringScheme getScoringScheme() const; private: // inline int match_score(char a, char b) const { switch(m_scoring) { case DPSS_SIMILARITY: return (a == b) ? 7 : -3; case DPSS_EDIT: return (a == b) ? 0 : 1; default: assert(false); } return 0; } // inline int gap_penalty() const { switch(m_scoring) { case DPSS_SIMILARITY: return -10; case DPSS_EDIT: return 1; default: assert(false); } return 0; } // GCC 4.7 warns on this #pragma GCC diagnostic ignored "-Wuninitialized" inline int compare3(int a, int b, int c) const { switch(m_scoring) { case DPSS_SIMILARITY: return max3(a,b,c); case DPSS_EDIT: return min3(a,b,c); default: assert(false); return a; } return a; } void initializeDPMatrix(); void fillMatrix(const std::string& s1, const std::string& s2); typedef std::vector IntVector; typedef std::vector IntMatrix; IntMatrix m_matrix; int m_dimM; int m_dimN; DPAlignMode m_mode; DPScoringScheme m_scoring; }; #endif ================================================ FILE: src/SGA/Algorithm/ErrorCorrectProcess.cpp ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ErrorCorrectProcess - Wrapper to perform error correction // for a sequence work item // #include "ErrorCorrectProcess.h" #include "CorrectionThresholds.h" #include "HashMap.h" #include "multiple_alignment.h" #include "KmerOverlaps.h" #include "StringThreader.h" //#define KMER_TESTING 1 // // // ErrorCorrectProcess::ErrorCorrectProcess(const ErrorCorrectParameters params) : m_params(params) { m_params.depthFilter = 10000; } // ErrorCorrectProcess::~ErrorCorrectProcess() { } // ErrorCorrectResult ErrorCorrectProcess::process(const SequenceWorkItem& workItem) { ErrorCorrectResult result = correct(workItem); if(!result.kmerQC && !result.overlapQC && m_params.printOverlaps) std::cout << workItem.read.id << " failed error correction QC\n"; return result; } ErrorCorrectResult ErrorCorrectProcess::correct(const SequenceWorkItem& workItem) { switch(m_params.algorithm) { case ECA_HYBRID: { ErrorCorrectResult result = kmerCorrection(workItem); if(!result.kmerQC) return overlapCorrectionNew(workItem); else return result; break; } case ECA_KMER: { return kmerCorrection(workItem); break; } case ECA_OVERLAP: { return overlapCorrectionNew(workItem); break; } case ECA_THREAD: { return threadingCorrection(workItem); break; } default: { assert(false); } } ErrorCorrectResult result; return result; } ErrorCorrectResult ErrorCorrectProcess::overlapCorrection(const SequenceWorkItem& workItem) { // Overlap based correction static const double p_error = 0.01f; bool done = false; int rounds = 0; ErrorCorrectResult result; SeqRecord currRead = workItem.read; std::string originalRead = workItem.read.seq.toString(); bool bQCPass = false; while(!done) { // Compute the set of overlap blocks for the read m_blockList.clear(); m_params.pOverlapper->overlapRead(currRead, m_params.minOverlap, &m_blockList); int sumOverlaps = 0; // Sum the spans of the overlap blocks to calculate the total number of overlaps this read has for(OverlapBlockList::iterator iter = m_blockList.begin(); iter != m_blockList.end(); ++iter) { assert(iter->ranges.interval[0].size() == iter->ranges.interval[1].size()); sumOverlaps += iter->ranges.interval[0].size(); } if(m_params.depthFilter > 0 && sumOverlaps > m_params.depthFilter) { result.num_prefix_overlaps = sumOverlaps; result.num_suffix_overlaps = sumOverlaps; result.correctSequence = currRead.seq; result.overlapQC = true; break; } // Convert the overlap block list into a multi-overlap MultiOverlap mo = blockListToMultiOverlap(currRead, m_blockList); if(m_params.printOverlaps) mo.printMasked(); result.num_prefix_overlaps = 0; result.num_suffix_overlaps = 0; mo.countOverlaps(result.num_prefix_overlaps, result.num_suffix_overlaps); // Perform conflict-aware consensus correction on the read result.correctSequence = mo.consensusConflict(p_error, m_params.conflictCutoff); ++rounds; if(rounds == m_params.numOverlapRounds || result.correctSequence == currRead.seq) { // Correction has converged or the number of rounds was exceeded. // Check if the sequence of the read passes QC in the multioverlap mo.updateRootSeq(result.correctSequence.toString()); bQCPass = mo.qcCheck(); done = true; } else { currRead.seq = result.correctSequence; } } result.overlapQC = bQCPass; if(m_params.printOverlaps) { std::string corrected_seq = result.correctSequence.toString(); std::cout << "OS: " << originalRead << "\n"; std::cout << "CS: " << corrected_seq << "\n"; std::cout << "DS: " << getDiffString(originalRead, corrected_seq) << "\n"; std::cout << "QS: " << currRead.qual << "\n"; std::cout << "QC: " << (result.overlapQC ? "pass" : "fail") << "\n"; std::cout << "\n"; } return result; } // ErrorCorrectResult ErrorCorrectProcess::overlapCorrectionNew(const SequenceWorkItem& workItem) { assert(m_params.indices.pBWT != NULL); assert(m_params.indices.pSSA != NULL); ErrorCorrectResult result; SeqRecord currRead = workItem.read; std::string current_sequence = workItem.read.seq.toString(); std::string consensus; int num_rounds = m_params.numOverlapRounds; for(int round = 0; round < num_rounds; ++round) { // Construct the multiple alignment MultipleAlignment multiple_alignment = KmerOverlaps::buildMultipleAlignment(current_sequence, m_params.kmerLength, m_params.minOverlap, m_params.minIdentity, 20, m_params.indices); multiple_alignment.filterByCount(m_params.conflictCutoff); bool last_round = (round == num_rounds - 1); if(last_round) consensus = multiple_alignment.calculateBaseConsensus(10000, 0); else current_sequence = multiple_alignment.calculateBaseConsensus(10000, 0); if(m_params.printOverlaps) multiple_alignment.print(200); } if(!consensus.empty()) { result.correctSequence = consensus; result.overlapQC = true; } else { // Return the unmodified query sequence result.correctSequence = workItem.read.seq.toString(); result.overlapQC = false; } return result; } // Correct a read with a k-mer based corrector ErrorCorrectResult ErrorCorrectProcess::kmerCorrection(const SequenceWorkItem& workItem) { assert(m_params.indices.pBWT != NULL); assert(m_params.indices.pCache != NULL); ErrorCorrectResult result; typedef std::map KmerCountMap; KmerCountMap kmerCache; SeqRecord currRead = workItem.read; std::string readSequence = workItem.read.seq.toString(); #ifdef KMER_TESTING std::cout << "Kmer correcting read " << workItem.read.id << "\n"; #endif if((int)readSequence.size() < m_params.kmerLength) { // The read is shorter than the kmer length, nothing can be done result.correctSequence = readSequence; result.kmerQC = false; return result; } int n = readSequence.size(); int nk = n - m_params.kmerLength + 1; // Are all kmers in the read well-represented? bool allSolid = false; bool done = false; int rounds = 0; int maxAttempts = m_params.numKmerRounds; // For each kmer, calculate the minimum phred score seen in the bases // of the kmer std::vector minPhredVector(nk, 0); for(int i = 0; i < nk; ++i) { int end = i + m_params.kmerLength - 1; int minPhred = std::numeric_limits::max(); for(int j = i; j <= end; ++j) { int ps = workItem.read.getPhredScore(j); if(ps < minPhred) minPhred = ps; } minPhredVector[i] = minPhred; } while(!done && nk > 0) { // Compute the kmer counts across the read // and determine the positions in the read that are not covered by any solid kmers // These are the candidate incorrect bases std::vector countVector(nk, 0); std::vector solidVector(n, 0); for(int i = 0; i < nk; ++i) { std::string kmer = readSequence.substr(i, m_params.kmerLength); // First check if this kmer is in the cache // If its not, find its count from the fm-index and cache it int count = 0; KmerCountMap::iterator iter = kmerCache.find(kmer); if(iter != kmerCache.end()) { count = iter->second; } else { count = BWTAlgorithms::countSequenceOccurrences(kmer, m_params.indices); kmerCache.insert(std::make_pair(kmer, count)); } // Get the phred score for the last base of the kmer int phred = minPhredVector[i]; countVector[i] = count; // std::cout << i << "\t" << phred << "\t" << count << "\n"; // Determine whether the base is solid or not based on phred scores int threshold = CorrectionThresholds::Instance().getRequiredSupport(phred); if(count >= threshold) { for(int j = i; j < i + m_params.kmerLength; ++j) solidVector[j] = 1; } } allSolid = true; for(int i = 0; i < n; ++i) { #ifdef KMER_TESTING std::cout << "Position[" << i << "] = " << solidVector[i] << "\n"; #endif if(solidVector[i] != 1) allSolid = false; } #ifdef KMER_TESTING std::cout << "Read " << workItem.read.id << (allSolid ? " is solid\n" : " has potential errors\n"); #endif // Stop if all kmers are well represented or we have exceeded the number of correction rounds if(allSolid || rounds++ > maxAttempts) break; // Attempt to correct the leftmost potentially incorrect base bool corrected = false; for(int i = 0; i < n; ++i) { if(solidVector[i] != 1) { // Attempt to correct the base using the leftmost covering kmer int phred = workItem.read.getPhredScore(i); int threshold = CorrectionThresholds::Instance().getRequiredSupport(phred); int left_k_idx = (i + 1 >= m_params.kmerLength ? i + 1 - m_params.kmerLength : 0); corrected = attemptKmerCorrection(i, left_k_idx, std::max(countVector[left_k_idx], threshold), readSequence); if(corrected) break; // base was not corrected, try using the rightmost covering kmer size_t right_k_idx = std::min(i, n - m_params.kmerLength); corrected = attemptKmerCorrection(i, right_k_idx, std::max(countVector[right_k_idx], threshold), readSequence); if(corrected) break; } } // If no base in the read was corrected, stop the correction process if(!corrected) { assert(!allSolid); done = true; } } if(allSolid) { result.correctSequence = readSequence; result.kmerQC = true; } else { result.correctSequence = workItem.read.seq.toString(); result.kmerQC = false; } return result; } // Attempt to correct the base at position idx in readSequence. Returns true if a correction was made // The correction is made only if the count of the corrected kmer is at least minCount bool ErrorCorrectProcess::attemptKmerCorrection(size_t i, size_t k_idx, size_t minCount, std::string& readSequence) { assert(i >= k_idx && i < k_idx + m_params.kmerLength); size_t base_idx = i - k_idx; char originalBase = readSequence[i]; std::string kmer = readSequence.substr(k_idx, m_params.kmerLength); size_t bestCount = 0; char bestBase = '$'; #if KMER_TESTING std::cout << "i: " << i << " k-idx: " << k_idx << " " << kmer << " " << reverseComplement(kmer) << "\n"; #endif for(int j = 0; j < DNA_ALPHABET::size; ++j) { char currBase = ALPHABET[j]; if(currBase == originalBase) continue; kmer[base_idx] = currBase; size_t count = BWTAlgorithms::countSequenceOccurrences(kmer, m_params.indices); #if KMER_TESTING printf("%c %zu\n", currBase, count); #endif if(count > bestCount && count >= minCount) { // Multiple corrections exist, do not correct if(bestBase != '$') return false; bestCount = count; bestBase = currBase; } } if(bestCount >= minCount) { assert(bestBase != '$'); readSequence[i] = bestBase; return true; } return false; } // // // ErrorCorrectResult ErrorCorrectProcess::threadingCorrection(const SequenceWorkItem& workItem) { ErrorCorrectResult result; // Find the initial seed to start the threading from // This is the prefix of the read containing right-most kmer that is present at least x times SeqRecord currRead = workItem.read; std::string query = workItem.read.seq.toString(); int k = m_params.kmerLength; int nk = query.size() - m_params.kmerLength + 1; int right_index = -1; size_t x = 3; for(int i = 0; i < nk; ++i) { std::string kmer = query.substr(i, k); size_t count = BWTAlgorithms::countSequenceOccurrences(kmer, m_params.indices); if(count >= x) right_index = i; else break; } if(right_index == -1) { // No way to correct this read result.correctSequence = ""; result.kmerQC = false; return result; } if(right_index == nk - 1) { printf("Read does not need correction\n"); // This read does not need correction result.correctSequence = query; result.kmerQC = true; return result; } // Correct the read with the threader int seed_endpoint = k + right_index; printf("Correcting %s [%d %d]\n", query.c_str(), right_index, seed_endpoint); StringThreaderResultVector thread_results; StringThreader threader(query.substr(0, seed_endpoint), &query, seed_endpoint, k, m_params.indices.pBWT); threader.run(thread_results); printf("Found %zu correction threads\n", thread_results.size()); int best_score = 0; int best_index = -1; for(size_t i = 0; i < thread_results.size(); ++i) { int score = StdAlnTools::globalAlignment(query, thread_results[i].thread, false); if(score > best_score) { best_score = score; best_index = i; } } if(best_score > 0) { result.correctSequence = thread_results[best_index].thread; result.kmerQC = true; } return result; } // // // ErrorCorrectPostProcess::ErrorCorrectPostProcess(std::ostream* pCorrectedWriter, std::ostream* pDiscardWriter, bool bCollectMetrics) : m_pCorrectedWriter(pCorrectedWriter), m_pDiscardWriter(pDiscardWriter), m_bCollectMetrics(bCollectMetrics), m_totalBases(0), m_totalErrors(0), m_readsKept(0), m_readsDiscarded(0), m_kmerQCPassed(0), m_overlapQCPassed(0), m_qcFail(0) { } // ErrorCorrectPostProcess::~ErrorCorrectPostProcess() { std::cout << "Reads passed kmer QC check: " << m_kmerQCPassed << "\n"; std::cout << "Reads passed overlap QC check: " << m_overlapQCPassed << "\n"; std::cout << "Reads failed QC: " << m_qcFail << "\n"; } // void ErrorCorrectPostProcess::writeMetrics(std::ostream* pWriter) { m_positionMetrics.write(pWriter, "Bases corrected by position\n", "pos"); m_originalBaseMetrics.write(pWriter, "\nOriginal base that was corrected\n", "base"); m_precedingSeqMetrics.write(pWriter, "\nkmer preceding the corrected base\n", "kmer"); m_qualityMetrics.write(pWriter, "\nBases corrected by quality value\n\n", "quality"); std::cout << "ErrorCorrect -- Corrected " << m_totalErrors << " out of " << m_totalBases << " bases (" << (double)m_totalErrors / m_totalBases << ")\n"; std::cout << "Kept " << m_readsKept << " reads. Discarded " << m_readsDiscarded << " reads (" << (double)m_readsDiscarded / (m_readsKept + m_readsDiscarded)<< ")\n"; } // void ErrorCorrectPostProcess::process(const SequenceWorkItem& item, const ErrorCorrectResult& result) { // Determine if the read should be discarded bool readQCPass = true; if(result.kmerQC) { m_kmerQCPassed += 1; } else if(result.overlapQC) { m_overlapQCPassed += 1; } else { readQCPass = false; m_qcFail += 1; } // Collect metrics for the reads that were actually corrected if(m_bCollectMetrics && readQCPass) { collectMetrics(item.read.seq.toString(), result.correctSequence.toString(), item.read.qual); } SeqRecord record = item.read; record.seq = result.correctSequence; if(readQCPass || m_pDiscardWriter == NULL) { record.write(*m_pCorrectedWriter); ++m_readsKept; } else { record.write(*m_pDiscardWriter); ++m_readsDiscarded; } } void ErrorCorrectPostProcess::collectMetrics(const std::string& originalSeq, const std::string& correctedSeq, const std::string& qualityStr) { size_t precedingLen = 2; for(size_t i = 0; i < originalSeq.length(); ++i) { char qc = !qualityStr.empty() ? qualityStr[i] : '\0'; char ob = originalSeq[i]; ++m_totalBases; m_positionMetrics.incrementSample(i); if(!qualityStr.empty()) m_qualityMetrics.incrementSample(qc); m_originalBaseMetrics.incrementSample(ob); std::string precedingMer; if(i > precedingLen) { precedingMer = originalSeq.substr(i - precedingLen, precedingLen); m_precedingSeqMetrics.incrementSample(precedingMer); } if(originalSeq[i] != correctedSeq[i]) { m_positionMetrics.incrementError(i); if(!qualityStr.empty()) m_qualityMetrics.incrementError(qc); m_originalBaseMetrics.incrementError(ob); if(!precedingMer.empty()) { m_precedingSeqMetrics.incrementError(precedingMer); } ++m_totalErrors; } } } ================================================ FILE: src/SGA/Algorithm/ErrorCorrectProcess.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ErrorCorrectProcess - Wrapper to perform error correction // for a sequence work item // #ifndef CORRECTPROCESS_H #define CORRECTPROCESS_H #include "Util.h" #include "OverlapAlgorithm.h" #include "SequenceProcessFramework.h" #include "SequenceWorkItem.h" #include "MultiOverlap.h" #include "Metrics.h" #include "BWTIndexSet.h" #include "SampledSuffixArray.h" #include "multiple_alignment.h" enum ErrorCorrectAlgorithm { ECA_HYBRID, // hybrid kmer/overlap correction ECA_KMER, // kmer correction ECA_OVERLAP, // overlap correction ECA_THREAD // thread the read through a de Bruijn graph }; enum ECFlag { ECF_NOTCORRECTED, ECF_CORRECTED, ECF_AMBIGIOUS, ECF_DUPLICATE }; // Parameter object for the error corrector struct ErrorCorrectParameters { ErrorCorrectAlgorithm algorithm; // const OverlapAlgorithm* pOverlapper; BWTIndexSet indices; // Overlap-based corrector params int minOverlap; int numOverlapRounds; double minIdentity; int conflictCutoff; int depthFilter; // k-mer based corrector params int numKmerRounds; int kmerLength; // output options bool printOverlaps; }; class ErrorCorrectResult { public: ErrorCorrectResult() : num_prefix_overlaps(0), num_suffix_overlaps(0), kmerQC(false), overlapQC(false) {} DNAString correctSequence; ECFlag flag; // Metrics size_t num_prefix_overlaps; size_t num_suffix_overlaps; bool kmerQC; bool overlapQC; }; // class ErrorCorrectProcess { public: ErrorCorrectProcess(const ErrorCorrectParameters params); ~ErrorCorrectProcess(); ErrorCorrectResult process(const SequenceWorkItem& item); ErrorCorrectResult correct(const SequenceWorkItem& item); ErrorCorrectResult kmerCorrection(const SequenceWorkItem& item); ErrorCorrectResult overlapCorrection(const SequenceWorkItem& workItem); ErrorCorrectResult overlapCorrectionNew(const SequenceWorkItem& workItem); ErrorCorrectResult threadingCorrection(const SequenceWorkItem& workItem); private: bool attemptKmerCorrection(size_t i, size_t k_idx, size_t minCount, std::string& readSequence); OverlapBlockList m_blockList; ErrorCorrectParameters m_params; }; // Write the results from the overlap step to an ASQG file class ErrorCorrectPostProcess { public: ErrorCorrectPostProcess(std::ostream* pCorrectedWriter, std::ostream* pDiscardWriter, bool bCollectMetrics); ~ErrorCorrectPostProcess(); void process(const SequenceWorkItem& item, const ErrorCorrectResult& result); void writeMetrics(std::ostream* pWriter); private: void collectMetrics(const std::string& originalSeq, const std::string& correctedSeq, const std::string& qualityStr); std::ostream* m_pCorrectedWriter; std::ostream* m_pDiscardWriter; bool m_bCollectMetrics; ErrorCountMap m_qualityMetrics; ErrorCountMap m_positionMetrics; ErrorCountMap m_originalBaseMetrics; ErrorCountMap m_precedingSeqMetrics; size_t m_totalBases; size_t m_totalErrors; size_t m_readsKept; size_t m_readsDiscarded; size_t m_kmerQCPassed; size_t m_overlapQCPassed; size_t m_qcFail; }; #endif ================================================ FILE: src/SGA/Algorithm/ExtensionDP.cpp ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // // ExtensionDP - Class implementing an iterative // dynamic programming alignment. The alignment // starts by globally constructing an alignment // between two strings in a seed region. This initial // alignment can then be extended row-by-row as one of the // strings is extended. This is the core data structure for the // StringThreader class // #include "ExtensionDP.h" #include #include #include #include static const int MINUS_INF = -1073741823; static const int POSITIVE_INF = 1073741823; // Return the largest of the 3 values inline int max3(int a, int b, int c) { return std::max(std::max(a,b), c); } // Return the smalleset of the 3 values inline int min3(int a, int b, int c) { return std::min(std::min(a,b), c); } // Constructor BandedDPColumn::BandedDPColumn(int ci, int maxRows, int bandwidth, const BandedDPColumn* prevColumn) { // Calculate the lower and upper band indices m_bandwidth = bandwidth; // the requested bandwidth, may be greater than actual m_colIdx = ci; m_rowStartIdx = std::max(0, m_colIdx - (bandwidth / 2) - 1); m_rowEndIdx = std::min(maxRows - 1, m_colIdx + (bandwidth / 2)); m_maxRows = maxRows; assert(m_rowStartIdx <= m_rowEndIdx); int numRows = m_rowEndIdx - m_rowStartIdx + 1; m_cells.resize(numRows); m_pPrevColumn = prevColumn; } // Get the score for row int BandedDPColumn::getRowScore(int row) const { int vec_idx = getVectorIndex(row); if(vec_idx == -1) return POSITIVE_INF; else return m_cells[vec_idx].score; } // Get the type of the row char BandedDPColumn::getRowType(int row) const { int vec_idx = getVectorIndex(row); if(vec_idx == -1) return FROM_M; else return m_cells[vec_idx].ctype; } // Return the index of the best-scoring row int BandedDPColumn::getBestRowIndex() const { int bestScore = POSITIVE_INF; int bestIdx = -1; for(int i = m_rowStartIdx; i <= m_rowEndIdx; ++i) { int s = getRowScore(i); if(s < bestScore) { bestScore = s; bestIdx = i; } } return bestIdx; } // Return the pointer to the previous column const BandedDPColumn* BandedDPColumn::getPreviousColumn() const { return m_pPrevColumn; } // Set the score and type for row void BandedDPColumn::setRowScore(int row, int score, char ctype) { int vec_idx = getVectorIndex(row); if(vec_idx != -1) { m_cells[vec_idx].score = score; m_cells[vec_idx].ctype = ctype; } } // Return the score for the requested cell int BandedDPColumn::getCellScore(int colIdx, int rowIdx) const { // If accessing the col/row with negative index, return // the initial gap penalties. For now, we allow free gaps // for the first row if(colIdx == -1 || rowIdx == -1) return 0; const BandedDPColumn* pColumn; if(colIdx < m_colIdx) pColumn = m_pPrevColumn; else pColumn = this; assert(pColumn != NULL); return pColumn->getRowScore(rowIdx); } // Calculate the score for the given row in the column using an edit distance scheme void BandedDPColumn::fillRowEditDistance(int rowIdx, int matchScore) { int vec_idx = getVectorIndex(rowIdx); if(vec_idx == -1) return; // out of band, ignore // Get the scores for the cell above, to the left and diagonal int above = getCellScore(m_colIdx, rowIdx - 1) + 1; int diag = getCellScore(m_colIdx - 1, rowIdx - 1) + matchScore; // Give free insertions if the last row // JS Apr/12 do not give free insertions in the last row //int insert_score = rowIdx < (m_maxRows - 1) ? 1 : 0; int insert_score = 1; int left = getCellScore(m_colIdx - 1, rowIdx) + insert_score; int score = min3(above, left, diag); char ctype; if(score == diag) ctype = FROM_M; else if(score == above) ctype = FROM_D; else ctype = FROM_I; // printf("Cell(%d, %d) a: %d d: %d l: %d s: %d t: %d\n", m_colIdx, rowIdx, above, diag, left, score, ctype); setRowScore(rowIdx, score, ctype); } // Transform a row index into an index in the scores vector int BandedDPColumn::getVectorIndex(int rowIdx) const { if(rowIdx < m_rowStartIdx || rowIdx > m_rowEndIdx) return -1; else return rowIdx - m_rowStartIdx; } // Initialize the extension DP by computing a global alignment between extendable and fixed // This function allocates memory and stores the created pointers in outPtrVec, which // should initially be empty void ExtensionDP::createInitialAlignment(const std::string& extendable, const std::string& fixed, int bandwidth, BandedDPColumnPtrVector& outPtrVec) { assert(outPtrVec.empty()); // Initialize the zero-th column size_t numRows = fixed.size() + 1; size_t numCols = extendable.size() + 1; // Set the score of column zero BandedDPColumn* pZeroCol = new BandedDPColumn(0, numRows, bandwidth, NULL); pZeroCol->setRowScore(0, 0, FROM_M); for(size_t i = 1; i < numRows; ++i) pZeroCol->setRowScore(i, i, FROM_I); outPtrVec.push_back(pZeroCol); BandedDPColumn* pPrevCol = outPtrVec.back(); for(size_t colIdx = 1; colIdx < numCols; ++colIdx) { BandedDPColumn* pCurrCol = createNewColumn(extendable[colIdx - 1], fixed, pPrevCol); outPtrVec.push_back(pCurrCol); pPrevCol = pCurrCol; } } // Create a new column, representing the extension of the alignment to char b BandedDPColumn* ExtensionDP::createNewColumn(char b, const std::string& fixed, const BandedDPColumn* pPrevColumn) { int numRows = fixed.size() + 1; int colIdx = pPrevColumn->getColIdx() + 1; BandedDPColumn* pCurrCol = new BandedDPColumn(colIdx, numRows, pPrevColumn->getBandwidth(), pPrevColumn); // Set the first row score pCurrCol->setRowScore(0, colIdx, FROM_D); // Fill in the rest of the rows int startRow = std::max(1, pCurrCol->getMinRow()); for(int rowIdx = startRow; rowIdx <= pCurrCol->getMaxRow(); ++rowIdx) { int match_score = b == fixed[rowIdx - 1] ? 0 : 1; pCurrCol->fillRowEditDistance(rowIdx, match_score); } return pCurrCol; } // Calculate the edit percentage over the last numBases bases double ExtensionDP::calculateLocalEditPercentage(const BandedDPColumn* pColumn, int numBases) { // Get the row with in the start column with the best score int rowIdx = pColumn->getBestRowIndex(); assert(rowIdx != -1); int colIdx = pColumn->getColIdx(); int startScore = pColumn->getRowScore(rowIdx); int alignLength = 1; while(alignLength < numBases) { char ctype = pColumn->getRowType(rowIdx); switch(ctype) { case FROM_M: pColumn = pColumn->getPreviousColumn(); --colIdx; --rowIdx; break; case FROM_D: --rowIdx; break; case FROM_I: pColumn = pColumn->getPreviousColumn(); --colIdx; break; } alignLength += 1; } int endScore = pColumn->getRowScore(rowIdx); assert(startScore >= endScore); int numDiffs = startScore - endScore; return static_cast(numDiffs) / alignLength; } // Returns the error percentage over the entire alignment double ExtensionDP::calculateGlobalEditPercentage(const BandedDPColumn* pStartColumn) { int edits, alignLength; countEditsAndAlignLength(pStartColumn, edits, alignLength); return (double)edits / alignLength; } // Returns the number of edits and the total alignment length for the submatrix starting at pColumn void ExtensionDP::countEditsAndAlignLength(const BandedDPColumn* pColumn, int& edits, int& alignLength) { // Get the row with in the start column with the best score int rowIdx = pColumn->getBestRowIndex(); assert(rowIdx != -1); int colIdx = pColumn->getColIdx(); edits = pColumn->getRowScore(rowIdx); alignLength = 1; while(rowIdx != 0 && colIdx != 0) { char ctype = pColumn->getRowType(rowIdx); switch(ctype) { case FROM_M: pColumn = pColumn->getPreviousColumn(); --colIdx; --rowIdx; break; case FROM_D: --rowIdx; break; case FROM_I: pColumn = pColumn->getPreviousColumn(); --colIdx; break; } alignLength += 1; } } // Calculate the best alignment through the matrix. Assumes that // path_t* is pre-allocated with max_path entries. void ExtensionDP::backtrack(const BandedDPColumn* pLastColumn, path_t* path, int* path_len, const int maxPathLength) { const BandedDPColumn* pCurrColumn = pLastColumn; // Calculate the starting row and column int colIdx = pLastColumn->getColIdx(); int rowIdx = pLastColumn->getBestRowIndex(); int pathLength = 0; path_t* p = &path[pathLength]; char ctype = pLastColumn->getRowType(rowIdx); p->ctype = ctype; p->i = rowIdx; p->j = colIdx; pathLength += 1; do { assert(pathLength < maxPathLength); assert(pCurrColumn != NULL); p = &path[pathLength]; // Update indices switch (ctype) { case FROM_M: pCurrColumn = pCurrColumn->getPreviousColumn(); --colIdx; --rowIdx; break; case FROM_D: --rowIdx; break; case FROM_I: pCurrColumn = pCurrColumn->getPreviousColumn(); --colIdx; break; } ctype = pCurrColumn->getRowType(rowIdx); p->ctype = ctype; p->i = rowIdx; p->j = colIdx; pathLength += 1; } while (rowIdx || colIdx); // We ignore the path character from the first column/row, like stdaln *path_len = pathLength - 1; } // Return true if the extension can proceed no further. // This is based on two conditions: // 1) There are n insertions at the end of the sequence // 2) The bandwidth in this column is one bool ExtensionDP::isExtensionTerminated(const BandedDPColumn* pLastColumn, int insertionThreshold) { if(pLastColumn->getMinRow() == pLastColumn->getMaxRow()) return true; // Backtrack up to n steps checking for insertions const BandedDPColumn* pCurrColumn = pLastColumn; int rowIdx = pLastColumn->getBestRowIndex(); int colIdx = pLastColumn->getColIdx(); char ctype = pCurrColumn->getRowType(rowIdx); do { assert(pCurrColumn != NULL); switch (ctype) { case FROM_M: case FROM_D: return false; case FROM_I: pCurrColumn = pCurrColumn->getPreviousColumn(); --colIdx; insertionThreshold -= 1; if(insertionThreshold == 0) return true; } ctype = pCurrColumn->getRowType(rowIdx); } while (rowIdx || colIdx); return false; } // Parse the score matrix and return a trimmed alignment between the query and target strings. // The trimming condition requires the last minMatches bases of the two sequences to be perfectly aligned ExtensionDPAlignment ExtensionDP::findTrimmedAlignment(const BandedDPColumn* pLastColumn, int minMatches) { const BandedDPColumn* pBestColumn = pLastColumn; bool columnFound = false; // Iterate backwards over the columns searching for one that // has minMatches matches to the query at the end while(!columnFound) { // Check if the best alignment starting from this column // ends with n matches. int matches = 0; int mismatches = 0; const BandedDPColumn* pCurrColumn = pBestColumn; int rowIdx = pCurrColumn->getBestRowIndex(); int colIdx = pCurrColumn->getColIdx(); int startScore = pCurrColumn->getRowScore(rowIdx); char ctype = pCurrColumn->getRowType(rowIdx); do { if(matches == minMatches) { // Ensure the edit distance is the same columnFound = true; break; } switch (ctype) { case FROM_M: pCurrColumn = pCurrColumn->getPreviousColumn(); --colIdx; --rowIdx; matches += 1; break; case FROM_D: case FROM_I: mismatches += 1; columnFound = false; break; } ctype = pCurrColumn->getRowType(rowIdx); // Update mismatches if(pCurrColumn->getRowScore(rowIdx) != startScore) ++mismatches; } while ((rowIdx || colIdx) && pCurrColumn != NULL && mismatches == 0); if(!columnFound) pBestColumn = pBestColumn->getPreviousColumn(); } // set the result output ExtensionDPAlignment result; if(pBestColumn != NULL) { result.target_align_length = pBestColumn->getColIdx(); result.query_align_length = pBestColumn->getBestRowIndex(); } else { result.target_align_length = 0; result.query_align_length = 0; } return result; } // Parse the score matrix and return a the best alignment that includes the entire query string. ExtensionDPAlignment ExtensionDP::findGlocalAlignment(const BandedDPColumn* pLastColumn) { const BandedDPColumn* pCurrColumn = pLastColumn; int lastRowIdx = pLastColumn->getQueryRows() - 1; const BandedDPColumn* pBestColumn = NULL; int best_score = std::numeric_limits::max(); // Iterate backwards over the columns searching for one that // has minMatches matches to the query at the end while(pCurrColumn != NULL && pCurrColumn->getMaxRow() >= lastRowIdx) { // Get the score for the last row of the matrix int score = pCurrColumn->getRowScore(lastRowIdx); if(score < best_score) { best_score = score; pBestColumn = pCurrColumn; } pCurrColumn = pCurrColumn->getPreviousColumn(); } // set the result output ExtensionDPAlignment result; if(pBestColumn != NULL) { result.target_align_length = pBestColumn->getColIdx(); result.query_align_length = lastRowIdx; } else { result.target_align_length = 0; result.query_align_length = 0; } return result; } // Print the alignment starting from the given column void ExtensionDP::printAlignment(const std::string& extendable, const std::string& fixed, const BandedDPColumn* pLastColumn) { // allocate space for the path int maxPathLength = extendable.size() + fixed.size(); path_t* path = new path_t[maxPathLength]; int path_len; // Perform the backtrack backtrack(pLastColumn, path, &path_len, maxPathLength); // Print the strings std::string paddedF, paddedE, paddedMatch; StdAlnTools::makePaddedStringsFromPath(fixed, extendable, path, path_len, paddedF, paddedE, paddedMatch); StdAlnTools::printPaddedStrings(paddedF, paddedE, paddedMatch); std::cout << "CIGAR: " << StdAlnTools::makeCigar(path, path_len) << "\n"; delete [] path; } // Print the full scoring matrix void ExtensionDP::printMatrix(const BandedDPColumnPtrVector& columnPtrVec) { int numCols = columnPtrVec.size(); int numRows = columnPtrVec[numCols - 1]->getMaxRow() + 1; printf("c:\t"); for(int j = 0; j < numCols; ++j) { printf("%d\t", j); } printf("\n"); for(int i = 0; i < numRows; ++i) { printf("%d:\t", i); for(int j = 0; j < numCols; ++j) { int score = columnPtrVec[j]->getRowScore(i); printf("%d\t", score); } printf("\n"); } } ================================================ FILE: src/SGA/Algorithm/ExtensionDP.h ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // // ExtensionDP - Class implementing an iterative // dynamic programming alignment. The alignment // starts by globally constructing an alignment // between two strings in a seed region. This initial // alignment can then be extended row-by-row as one of the // strings is extended. This is the core data structure for the // StringThreader class // #ifndef EXTENSION_DP_H #define EXTENSION_DP_H #include #include "StdAlnTools.h" // Structure holding the score for a single cell // of the DP matrix struct DPCell { DPCell() : score(0), ctype('\0') {} int score; char ctype; }; typedef std::vector CellVector; // Result object providing the coordinates // of the endpoints of the alignment struct ExtensionDPAlignment { int query_align_length; int target_align_length; }; // Core class providing a single column of the dynamic // programming matrix class BandedDPColumn { public: // // Functions // BandedDPColumn(int ci, int maxRows, int bandwidth, const BandedDPColumn* prevColumn); // Simple getters int getColIdx() const { return m_colIdx; } int getBandwidth() const { return m_bandwidth; } int getRowScore(int row) const; char getRowType(int row) const; int getCellScore(int colIdx, int rowIdx) const; int getMinRow() const { return m_rowStartIdx; } int getMaxRow() const { return m_rowEndIdx; } int getQueryRows() const { return m_maxRows; } const BandedDPColumn* getPreviousColumn() const; // Set the cell information for a given row in the column void setRowScore(int row, int score, char ctype); // Returns the row index of the best scoring cell int getBestRowIndex() const; // Calculate and set the score for the row void fillRowEditDistance(int rowIdx, int matchScore); private: // // Functions // int getVectorIndex(int rowIdx) const; // // Data // int m_colIdx; int m_maxRows; int m_rowStartIdx; int m_rowEndIdx; int m_bandwidth; CellVector m_cells; const BandedDPColumn* m_pPrevColumn; }; typedef std::vector BandedDPColumnPtrVector; // Algorithms to use/extend the extensionDP functionality namespace ExtensionDP { // Initialize the extension DP by computing a global alignment between extendable and fixed // This function allocates memory and stores the created pointers in outPtrVec void createInitialAlignment(const std::string& extendable, const std::string& fixed, int bandwidth, BandedDPColumnPtrVector& outPtrVec); // Create a new column, representing the extended alignment from pPrevColumn to char b BandedDPColumn* createNewColumn(char b, const std::string& fixed, const BandedDPColumn* pPrevColumn); // Calculate the best alignment through the matrix. Assumes that // path_t* is pre-allocated with maxPathLength entries. void backtrack(const BandedDPColumn* pLastColumn, path_t* path, int* pPathLen, const int maxPathLength); // Check if the extension has terminated. This is true if there are more // than insertionThreshold insertions at the end of the alignment. bool isExtensionTerminated(const BandedDPColumn* pLastColumn, int insertionThreshold); // Return the best trimmed alignment of the extensionDP object requiring minMatches matches // at the end of the alignment ExtensionDPAlignment findTrimmedAlignment(const BandedDPColumn* pLastColumn, int minMatches); // Return the best alignment that contains the entire fixed string ExtensionDPAlignment findGlocalAlignment(const BandedDPColumn* pLastColumn); // Calculate mismatch/error rates between the query and the string up to pStartColumn double calculateLocalEditPercentage(const BandedDPColumn* pStartColumn, int numBases); double calculateGlobalEditPercentage(const BandedDPColumn* pStartColumn); void countEditsAndAlignLength(const BandedDPColumn* pStartColumn, int& edits, int& alignLength); // Print the alignment starting from the given column void printAlignment(const std::string& s1, const std::string& s2, const BandedDPColumn* pLastColumn); // Print the full scoring matrix void printMatrix(const BandedDPColumnPtrVector& columnPtrVec); }; #endif ================================================ FILE: src/SGA/Algorithm/FMMergeProcess.cpp ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // FMMergeProcess - Merge unambiguously overlapping sequences // #include "FMMergeProcess.h" #include "SGAlgorithms.h" #include "SGVisitors.h" // FMMergeProcess::FMMergeProcess(const OverlapAlgorithm* pOverlapper, int minOverlap, BitVector* pMarkedReads) : m_pOverlapper(pOverlapper), m_minOverlap(minOverlap), m_pMarkedReads(pMarkedReads) { } // FMMergeProcess::~FMMergeProcess() { } // FMMergeResult FMMergeProcess::process(const SequenceWorkItem& item) { // Calculate the intervals in the forward FM-index for this read const BWT* pBWT = m_pOverlapper->getBWT(); // Find the interval in the fm-index containing the read std::string readString = item.read.seq.toString(); BWTInterval readInterval = BWTAlgorithms::findInterval(pBWT, readString); // Update the interval by looking for the $ to map the interval into indices in the bit array BWTAlgorithms::updateInterval(readInterval, '$', pBWT); // The read must be present in the index assert(readInterval.isValid()); // Check if this read has been used yet bool used = false; for(int64_t i = readInterval.lower; i <= readInterval.upper; ++i) { if(m_pMarkedReads->test(i)) { used = true; break; } } FMMergeResult result; if(!used) { // Construct a new local graph around this read StringGraph* pGraph = new StringGraph; std::stringstream ssID; ssID << "IDX-" << readInterval.lower; std::string rootID = ssID.str(); Vertex* pVertex = new(pGraph->getVertexAllocator()) Vertex(rootID, readString); pGraph->addVertex(pVertex); // Add the root vertex to the result structure result.usedIntervals.push_back(readInterval); // Enqueue the read for overlap detection in both directions FMMergeQueue queue; // Construct the overlap block list for this node SeqRecord record; record.id = pVertex->getID(); record.seq = pVertex->getSeq().toString(); OverlapBlockList blockList; m_pOverlapper->overlapRead(record, m_minOverlap, &blockList); removeContainmentBlocks(pVertex->getSeqLen(), &blockList); // Construct the initial list of candidates from the block list addCandidates(pGraph, pVertex, NULL, &blockList, queue); while(!queue.empty()) { FMMergeCandidate currCandidate = queue.front(); queue.pop(); // Determine whether this is a valid vertex to merge or not. // It is valid if it has a single edge in the direction of the vertex // that added it to the candidate list SeqRecord record; record.id = currCandidate.pVertex->getID(); record.seq = currCandidate.pVertex->getSeq().toString(); OverlapBlockList candidateBlockList; m_pOverlapper->overlapRead(record, m_minOverlap, &candidateBlockList); removeContainmentBlocks(currCandidate.pVertex->getSeqLen(), &candidateBlockList); bool validMergeNode = checkCandidate(currCandidate, &candidateBlockList); if(validMergeNode) { addCandidates(pGraph, currCandidate.pVertex, currCandidate.pEdge, &candidateBlockList, queue); result.usedIntervals.push_back(currCandidate.interval); } else { // Mark this vertex for later removal currCandidate.pVertex->setColor(GC_RED); } } // The graph has now been constructed. Remove all the nodes that are marked invalid for merging pGraph->sweepVertices(GC_RED); SGDuplicateVisitor dupVisit(true); pGraph->visit(dupVisit); // Merge nodes pGraph->simplify(); // If there was a cycle in the graph, it is possible that more than 1 vertex // remains in the graph. Copy the vertex sequences into the result object. pGraph->getVertexSequences(result.mergedSequences); result.isMerged = true; delete pGraph; } else { result.isMerged = false; } if(result.isMerged) { // If some work was performed, update the bitvector so other threads do not try to merge the same set of reads. // This uses compare-and-swap instructions to ensure the uppdate is atomic. // If some other thread has merged this set (and updated // the bitvector), we discard all the merged data. // As a given set of reads should all be merged together, we only need to make sure we atomically update // the bit for the read with the lowest index in the set. // Sort the intervals into ascending order and remove any duplicate intervals (which can occur // if the subgraph has a simple cycle) std::sort(result.usedIntervals.begin(), result.usedIntervals.end(), BWTInterval::compare); std::vector::iterator newEnd = std::unique(result.usedIntervals.begin(), result.usedIntervals.end(), BWTInterval::equal); result.usedIntervals.erase(newEnd, result.usedIntervals.end()); // Check if the bit in the vector has already been set for the lowest read index // If it has some other thread has already output this set so we do nothing int64_t lowestIndex = result.usedIntervals.front().lower; bool currentValue = m_pMarkedReads->test(lowestIndex); bool updateSuccess = false; if(currentValue == false) { // Attempt to update the bit vector with an atomic CAS. If this returns false // the bit was set by some other thread updateSuccess = m_pMarkedReads->updateCAS(lowestIndex, currentValue, true); } if(updateSuccess) { // We successfully atomically set the bit for the first read in this set // to true. We can safely update the rest of the bits and keep the merged sequences // for output. std::vector::const_iterator iter = result.usedIntervals.begin(); for(; iter != result.usedIntervals.end(); ++iter) { for(int64_t i = iter->lower; i <= iter->upper; ++i) { if(i == lowestIndex) //already set continue; currentValue = m_pMarkedReads->test(i); if(currentValue) { // This value should not be true, emit a warning std::cout << "Warning: Bit " << i << " was set outside of critical section\n"; } else { m_pMarkedReads->updateCAS(i, currentValue, true); } } } } else { // Some other thread merged these reads already, discard the intermediate // data and set the result to false result.mergedSequences.clear(); result.usedIntervals.clear(); result.isMerged = false; } } return result; } // Check if the candidate node can be merged with the node it is linked to. Returns true if so bool FMMergeProcess::checkCandidate(const FMMergeCandidate& candidate, const OverlapBlockList* pBlockList) const { // Get the direction of the edge back to the node that generated this candidate // pEdge is the edge TO the candidate vertex so the twin direction is the direction away // from the candidate vertex EdgeDir mergeDir = candidate.pEdge->getTwinDir(); size_t mergeDirCount = 0; for(OverlapBlockList::const_iterator iter = pBlockList->begin(); iter != pBlockList->end(); ++iter) { if(iter->getEdgeDir() == mergeDir) mergeDirCount += 1; } assert(mergeDirCount > 0); return mergeDirCount == 1; } // Add the edges starting from pX as candidate vertices // using the blockList. // Precondition: pX is a valid vertex in the merge graph. In other words, there is a // unique assembly that includes pX and the root vertex. void FMMergeProcess::addCandidates(StringGraph* pGraph, const Vertex* pX, const Edge* pEdgeToX, const OverlapBlockList* pBlockList, FMMergeQueue& candidateQueue) { // Count the number of edges in each direction. size_t numAnti = 0; size_t numSense = 0; for(OverlapBlockList::const_iterator iter = pBlockList->begin(); iter != pBlockList->end(); ++iter) { if(iter->getEdgeDir() == ED_SENSE) ++numSense; if(iter->getEdgeDir() == ED_ANTISENSE) ++numAnti; } // For each edge block, if it is unique for the direction add the vertex it describes as a candidate for(OverlapBlockList::const_iterator iter = pBlockList->begin(); iter != pBlockList->end(); ++iter) { EdgeDir currDir = iter->getEdgeDir(); if((currDir == ED_SENSE && numSense == 1) || (currDir == ED_ANTISENSE && numAnti == 1)) { // Skip edges in the direction to X if(pEdgeToX != NULL && pEdgeToX->getTwinDir() == currDir) continue; // Construct new candidate vertices and add them to the graph std::string vertexID = iter->toCanonicalID(); assert(vertexID != pX->getID()); std::string vertexSeq = iter->getFullString(pX->getSeq().toString()); Overlap ovrXY = iter->toOverlap(pX->getID(), vertexID, pX->getSeqLen(), vertexSeq.length()); // The vertex may already exist in the graph if the graph contains a loop Vertex* pY = pGraph->getVertex(vertexID); // Generate the new vertex if(pY == NULL) { pY = new(pGraph->getVertexAllocator()) Vertex(vertexID, vertexSeq); pGraph->addVertex(pY); } // Construct a description of the edge based on the overlap EdgeDesc ed = SGAlgorithms::overlapToEdgeDesc(pY, ovrXY); // If an edge with the same description as XY exists for X do not add a new edge or candidate if(!pX->hasEdge(ed)) { // Construct the found edge and add it to the graph Edge* pXY = SGAlgorithms::createEdgesFromOverlap(pGraph, ovrXY, false); // Add the new vertex as a candidate FMMergeCandidate candidate; candidate.pVertex = pY; candidate.pEdge = pXY; candidate.interval = iter->getCanonicalInterval(); candidateQueue.push(candidate); } } } } // FMMergePostProcess::FMMergePostProcess(std::ostream* pWriter, BitVector* pMarkedReads) : m_numMerged(0), m_numTotal(0), m_totalLength(0), m_pWriter(pWriter), m_pMarkedReads(pMarkedReads) { } // FMMergePostProcess::~FMMergePostProcess() { printf("[sga fm-merge] Merged %zu reads into %zu sequences\n", m_numTotal, m_numMerged); printf("[sga fm-merge] Reduction factor: %lf\n", (double)m_numTotal / m_numMerged); printf("[sga fm-merge] Mean merged size: %lf\n", (double)m_totalLength / m_numMerged); } // void FMMergePostProcess::process(const SequenceWorkItem& item, const FMMergeResult& result) { (void)item; m_numTotal += 1; if(result.isMerged) { // Write out the merged sequences for(std::vector::const_iterator iter = result.mergedSequences.begin(); iter != result.mergedSequences.end(); ++iter) { std::stringstream nameSS; nameSS << "merged-" << m_numMerged++; SeqRecord record; record.id = nameSS.str(); record.seq = *iter; record.write(*m_pWriter); m_totalLength += iter->size(); } } } ================================================ FILE: src/SGA/Algorithm/FMMergeProcess.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // FMMergeProcess - Merge unambiguously overlapping sequences // #ifndef FMMERGEPROCESS_H #define FMMERGEPROCESS_H #include "Util.h" #include "OverlapAlgorithm.h" #include "SequenceProcessFramework.h" #include "BitVector.h" #include "Bigraph.h" #include "SGUtil.h" struct FMMergeResult { std::vector mergedSequences; std::vector usedIntervals; bool isMerged; }; // A merge candidate is a read that is a unique extension // from an existing read. If it has a single edge // in the direction pointing back to the existing read // it can be merged with that read. if it has multiple // edges back to the read it cannot and will be marked as // invalid. // struct FMMergeCandidate { Vertex* pVertex; Edge* pEdge; // Edge from the existing vertex to pVertex BWTInterval interval; // interval containing this candidate }; typedef std::queue FMMergeQueue; // Compute the overlap blocks for reads class FMMergeProcess { public: FMMergeProcess(const OverlapAlgorithm* pOverlapper, int minOverlap, BitVector* pMarkedReads); ~FMMergeProcess(); FMMergeResult process(const SequenceWorkItem& item); private: // Add the edges of X as candidates to the graph void addCandidates(StringGraph* pGraph, const Vertex* pX, const Edge* pEdgeToX, const OverlapBlockList* pBlockList, FMMergeQueue& candidateQueue); // Check whether the candidate can be merged into the current graph bool checkCandidate(const FMMergeCandidate& candidate, const OverlapBlockList* pBlockList) const; // std::string makeVertexID(BWTInterval interval); const OverlapAlgorithm* m_pOverlapper; const int m_minOverlap; BitVector* m_pMarkedReads; }; // Write the results from the overlap step to an ASQG file class FMMergePostProcess { public: FMMergePostProcess(std::ostream* pWriter, BitVector* pMarkedReads); ~FMMergePostProcess(); void process(const SequenceWorkItem& item, const FMMergeResult& result); private: size_t m_numMerged; size_t m_numTotal; size_t m_totalLength; std::ostream* m_pWriter; BitVector* m_pMarkedReads; }; #endif ================================================ FILE: src/SGA/Algorithm/GapFillProcess.cpp ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // GapFillProcess - Fill in gaps in a scaffold // #include #include "GapFillProcess.h" #include "BWTAlgorithms.h" #include "SGAlgorithms.h" #include "SGSearch.h" #include "StdAlnTools.h" #include "HaplotypeBuilder.h" #include "MultiAlignment.h" // GapFillStats::GapFillStats() { numGapsAttempted = numGapsFilled = 0; for(size_t i = 0; i < GFRC_NUM_CODES; ++i) numFails[i] = 0; } // void GapFillStats::print() const { printf("Num gaps attempted: %zu\n", numGapsAttempted); printf("Num gaps filled: %zu\n", numGapsFilled); printf(" Failed -- no anchor: %zu\n", numFails[GFRC_NO_ANCHOR]); printf(" Failed -- no haplotype path: %zu\n", numFails[GFRC_NO_HAPLOTYPE_PATH]); printf(" Failed -- no haplotype, search aborted: %zu\n", numFails[GFRC_NO_HAPLOTYPE_ABORTED]); printf(" Failed -- no haplotype, walk failed: %zu\n", numFails[GFRC_NO_HAPLOTYPE_WALK_FAIL]); printf(" Failed -- ambiguous solution: %zu\n", numFails[GFRC_AMBIGUOUS]); printf(" Failed -- assembled size differs from estimate: %zu\n", numFails[GFRC_BAD_SIZE]); printf(" Failed -- anchor sequence mismatch: %zu\n", numFails[GFRC_BAD_TRIM]); } // // // GapFillProcess::GapFillProcess(const GapFillParameters& params) : m_parameters(params) { } // GapFillProcess::~GapFillProcess() { m_stats.print(); } // Process the given scaffold, filling in any gaps found GapFillResult GapFillProcess::processScaffold(const std::string& scaffold) const { if(m_parameters.verbose > 0) std::cout << "Processing scaffold of length " << scaffold.length() << "\n"; GapFillResult result; size_t len = scaffold.length(); size_t currIdx = 0; while(currIdx < len) { char b = scaffold[currIdx]; if(b != 'N') { // Append this non-gap character into the output scaffold result.scaffold.append(1,b); currIdx += 1; } else { // Found the start of a gap size_t gapLength = 0; while(scaffold[currIdx + gapLength] == 'N') gapLength += 1; if(m_parameters.verbose >= 1) printf("Constructing gap at position %zu GapLength: %zu\n", currIdx, gapLength); GapFillReturnCode code = GFRC_UNKNOWN; // Attempt to fill this gap starting with a long kmer, then relaxing the process for(size_t k = m_parameters.startKmer; k >= m_parameters.endKmer; k -= m_parameters.stride) { // Calculate the left-anchor using the sequence of the scaffold already appended AnchorSequence leftAnchor = findAnchor(k, result.scaffold, result.scaffold.length() - k, true); // Calculate the right anchor using the sequence of the input scaffold AnchorSequence rightAnchor = findAnchor(k, scaffold, currIdx + gapLength, false); // Estimate the size of the assembled sequence, including the flanking anchors int leftFlanking = result.scaffold.length() - leftAnchor.position; int rightFlankingPlusGap = rightAnchor.position + k - currIdx; int estimatedSize = leftFlanking + rightFlankingPlusGap; // Attempt to build the gap sequence std::string gapSequence; code = processGap(k, estimatedSize, leftAnchor, rightAnchor, gapSequence); if(code == GFRC_OK) { // Successfully resolved the gap. Calculate the amount of the anchor sequence // that is already present in the scaffold and must be removed. We remove this amount // of sequence from the current scaffold, not the gapSequence, to account // for the case that the gap sequence is significantly different than the sequence // after the left anchor. size_t trimLength = result.scaffold.length() - leftAnchor.position; result.scaffold.replace(leftAnchor.position, trimLength, gapSequence); // We need to update currIdx to point to the next base in the // input scaffold that is not already assembled. This is given // by the position of the rightAnchor, plus a kmer currIdx = rightAnchor.position + k; m_stats.numGapsFilled += 1; break; } } if(code != GFRC_OK) { // Failed to resolve the gap. Append the gap into the growing scaffold m_stats.numFails[code] += 1; while(scaffold[currIdx] == 'N') { result.scaffold.append(1, 'N'); currIdx += 1; } } m_stats.numGapsAttempted += 1; } } if(m_parameters.verbose >= 2) StdAlnTools::globalAlignment(scaffold, result.scaffold, true); return result; } // Fill in the specified gap GapFillReturnCode GapFillProcess::processGap(size_t k, int estimatedSize, const AnchorSequence& startAnchor, const AnchorSequence& endAnchor, std::string& outSequence) const { if(m_parameters.verbose > 0) { std::cout << "\tSTART: " << startAnchor << "\n"; std::cout << "\tEND: " << endAnchor << "\n"; } if(startAnchor.sequence.empty() || endAnchor.sequence.empty() || startAnchor.sequence == endAnchor.sequence) return GFRC_NO_ANCHOR; HaplotypeBuilder builder; builder.setTerminals(startAnchor, endAnchor); builder.setIndex(m_parameters.pBWT, m_parameters.pRevBWT); builder.setKmerParameters(k, m_parameters.kmerThreshold); HaplotypeBuilderReturnCode code = builder.run(); HaplotypeBuilderResult result; // The search was successfull, build strings from the walks if(code == HBRC_OK) code = builder.parseWalks(result); if(code == HBRC_OK) { assert(!result.haplotypes.empty()); // Calculate the estimated size of the sequence, including the anchors return selectGapSequence(estimatedSize, result.haplotypes, outSequence); } else { // Map the haplotype builder code to a gap fill code assert(code != HBRC_OK); if(code == HBRC_NO_PATH) return GFRC_NO_HAPLOTYPE_PATH; else if(code == HBRC_TOO_MANY_VERTICES) return GFRC_NO_HAPLOTYPE_ABORTED; else if(code == HBRC_WALK_FAILED) return GFRC_NO_HAPLOTYPE_WALK_FAIL; } // should not reach here return GFRC_UNKNOWN; } // Find an anchor sequence to start the process of building the gap sequence AnchorSequence GapFillProcess::findAnchor(size_t k, const std::string& scaffold, int64_t position, bool upstream) const { AnchorSequence anchor; int64_t stride = upstream ? -1 : 1; int MAX_DISTANCE = 50; int64_t stop = upstream ? position - MAX_DISTANCE : position + MAX_DISTANCE; // Cap the travel distance to avoid out of bounds if(stop < 0) stop = 0; if(stop > (int64_t)(scaffold.length() - k)) stop = scaffold.length() - k; for(; position != stop; position += stride) { assert(position >= 0); std::string testSeq = scaffold.substr(position, k); std::transform(testSeq.begin(), testSeq.end(), testSeq.begin(), ::toupper); if(testSeq.find_first_not_of("ACGT") != std::string::npos) continue; size_t count = BWTAlgorithms::countSequenceOccurrencesWithCache(testSeq, m_parameters.pBWT, m_parameters.pBWTCache); if(count > m_parameters.kmerThreshold) { anchor.sequence = testSeq; anchor.count = count; anchor.position = position; return anchor; } } anchor.sequence = ""; anchor.count = -1; return anchor; } // Attempt to select one of the passed in strings as the gap sequence. If none fit the constraints, // this sets gapSequence to the empty string and returns an error code GapFillReturnCode GapFillProcess::selectGapSequence(int estimatedSize, const StringVector& sequences, std::string& gapSequence) const { assert(!sequences.empty()); int selectedIdx = -1; int selectedSizeDiff = std::numeric_limits::max(); for(size_t i = 0; i < sequences.size(); ++i) { int diff = abs(sequences[i].size() - estimatedSize); //printf("ES: %d S: %zu D: %d\n", estimatedSize, sequences[i].size(), diff); if(diff < selectedSizeDiff) { selectedSizeDiff = diff; selectedIdx = i; } } // Perform checks on the quality of the gap sequences int MAX_SIZE_DIFF = 100; if(selectedSizeDiff > MAX_SIZE_DIFF) { gapSequence = ""; return GFRC_BAD_SIZE; } gapSequence = sequences[selectedIdx]; return GFRC_OK; } ================================================ FILE: src/SGA/Algorithm/GapFillProcess.h ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // GapFillProcess - Fill in gaps in a scaffold // #ifndef GAPFILL_PROCESS_H #define GAPFILL_PROCESS_H #include #include #include #include "BWT.h" #include "BWTInterval.h" #include "SGUtil.h" #include "SGWalk.h" #include "BitVector.h" #include "HaplotypeBuilder.h" #include "SequenceProcessFramework.h" #include "BWTIntervalCache.h" #include "SampledSuffixArray.h" // Structures and typedefs // Parameters structure struct GapFillParameters { // BWTS const BWT* pBWT; const BWT* pRevBWT; const BWTIntervalCache* pBWTCache; const BWTIntervalCache* pRevBWTCache; size_t startKmer; size_t endKmer; size_t stride; size_t kmerThreshold; int verbose; }; // struct GapFillResult { std::string scaffold; }; enum GapFillReturnCode { GFRC_UNKNOWN, GFRC_OK, GFRC_NO_HAPLOTYPE_PATH, GFRC_NO_HAPLOTYPE_ABORTED, GFRC_NO_HAPLOTYPE_WALK_FAIL, GFRC_NO_ANCHOR, GFRC_AMBIGUOUS, GFRC_BAD_SIZE, GFRC_BAD_TRIM, GFRC_NUM_CODES }; // Statistics tracking object struct GapFillStats { GapFillStats(); size_t numGapsAttempted; size_t numGapsFilled; // Failure stats size_t numFails[GFRC_NUM_CODES]; void print() const; }; // // // class GapFillProcess { public: // // Functions // GapFillProcess(const GapFillParameters& params); ~GapFillProcess(); // Generate haplotypes from chromosome refName, position [start, end] GapFillResult processScaffold(const std::string& scaffold) const; private: // // Functions // // Attempt to fill in the sequence between the two anchors GapFillReturnCode processGap(size_t k, int estimatedSize, const AnchorSequence& leftAnchor, const AnchorSequence& rightAnchor, std::string& outSequence) const; // Find an anchor sequence to start the process of building the gap sequence AnchorSequence findAnchor(size_t k, const std::string& scaffold, int64_t position, bool upstream) const; // Attempt to select one of the passed in strings as the gap sequence. If none fit the constraints, // this sets gapSequence to the empty string and returns an error code GapFillReturnCode selectGapSequence(int estiamtedSize, const StringVector& sequences, std::string& gapSequence) const; // // Data // GapFillParameters m_parameters; mutable GapFillStats m_stats; }; #if 0 // class GapFillPostProcess { public: GapFillPostProcess(const std::string& filename); ~GapFillPostProcess(); //void process(const SequenceWorkItem& item, const GraphCompareResult& result); private: std::ostream* m_pWriter; }; #endif #endif ================================================ FILE: src/SGA/Algorithm/HaplotypeBuilder.cpp ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // HaplotypeBuilder - Construct candidate // haplotypes from a pair of k-mer seeds. // #include "HaplotypeBuilder.h" #include "BWTAlgorithms.h" #include "SGSearch.h" #include "SGAlgorithms.h" #include "Profiler.h" // // // HaplotypeBuilder::HaplotypeBuilder() : m_pStartVertex(NULL), m_pJoinVertex(NULL), m_kmerThreshold(1), m_kmerSize(51) { m_pGraph = new StringGraph; } // HaplotypeBuilder::~HaplotypeBuilder() { delete m_pGraph; } // void HaplotypeBuilder::setKmerParameters(size_t k, size_t t) { m_kmerSize = k; m_kmerThreshold = t; } // The source string is the string the bubble starts from void HaplotypeBuilder::setTerminals(const AnchorSequence& leftAnchor, const AnchorSequence& rightAnchor) { // Create a new vertex for the source sequence // As we are creating a de Bruijn graph, we use the sequence // of the vertex as its ID assert(leftAnchor.sequence != rightAnchor.sequence); Vertex* pLeftVertex = new(m_pGraph->getVertexAllocator()) Vertex(leftAnchor.sequence, leftAnchor.sequence); addVertex(pLeftVertex, leftAnchor.count); Vertex* pRightVertex = new(m_pGraph->getVertexAllocator()) Vertex(rightAnchor.sequence, rightAnchor.sequence); addVertex(pRightVertex, rightAnchor.count); // Add the vertex to the extension queue m_queue.push(BuilderExtensionNode(pLeftVertex, ED_SENSE)); m_pStartVertex = pLeftVertex; m_pJoinVertex = pRightVertex; } // The source index is the index that the contains the source string void HaplotypeBuilder::setIndex(const BWT* pBWT, const BWT* pRBWT) { m_pBWT = pBWT; m_pRevBWT = pRBWT; } // Run the bubble construction process HaplotypeBuilderReturnCode HaplotypeBuilder::run() { PROFILE_FUNC("HaplotypeBuilder::run") assert(m_queue.size() == 1); assert(m_pJoinVertex != NULL); assert(m_pBWT != NULL); size_t MAX_ITERATIONS = 2000; size_t MAX_SIMULTANEOUS_BRANCHES = 20; size_t MAX_TOTAL_BRANCHES = 50; // Tracking stats size_t total_branches = 0; size_t iterations = 0; while(!m_queue.empty()) { if(iterations > MAX_ITERATIONS || m_queue.size() > MAX_SIMULTANEOUS_BRANCHES || total_branches > MAX_TOTAL_BRANCHES) return HBRC_TOO_MANY_VERTICES; iterations += 1; BuilderExtensionNode curr = m_queue.front(); m_queue.pop(); // Calculate de Bruijn extensions for this node std::string vertStr = curr.pVertex->getSeq().toString(); AlphaCount64 extensionCounts; if(m_pRevBWT != NULL) extensionCounts = BWTAlgorithms::calculateDeBruijnExtensions(vertStr, m_pBWT, m_pRevBWT, curr.direction); else extensionCounts = BWTAlgorithms::calculateDeBruijnExtensionsSingleIndex(vertStr, m_pBWT, curr.direction); size_t num_added = 0; for(size_t i = 0; i < DNA_ALPHABET::size; ++i) { char b = DNA_ALPHABET::getBase(i); size_t count = extensionCounts.get(b); if(count < m_kmerThreshold) continue; std::string newStr = makeDeBruijnVertex(vertStr, b, curr.direction); Vertex* pVertex = m_pGraph->getVertex(newStr); // Check if we have found the vertex we are assembling to bool joinFound = pVertex != NULL && pVertex == m_pJoinVertex; if(!joinFound && pVertex == NULL) { pVertex = new(m_pGraph->getVertexAllocator()) Vertex(newStr, newStr); addVertex(pVertex, count); m_queue.push(BuilderExtensionNode(pVertex, curr.direction)); num_added += 1; } // Create the new edge in the graph addDeBruijnEdges(curr.pVertex, pVertex, curr.direction); // If we've found the join vertex, we have completed the target half of the bubble if(joinFound) return HBRC_OK; } if(num_added > 0) total_branches += (num_added - 1); } // no path between the nodes found return HBRC_NO_PATH; } // After the bubble has been built into the graph, this function // finds and compares the two sequences HaplotypeBuilderReturnCode HaplotypeBuilder::parseWalks(HaplotypeBuilderResult& results) const { // Parse walks from the graph that go through the bubbles SGWalkVector outWalks; bool success = SGSearch::findWalks(m_pStartVertex, m_pJoinVertex, ED_SENSE, 10000, // max distance to search 10000, // max nodes to search true, // exhaustive search outWalks); if(!success) return HBRC_WALK_FAILED; // Convert the walks into strings for(size_t i = 0; i < outWalks.size(); ++i) { std::string walkStr = outWalks[i].getString(SGWT_START_TO_END); results.haplotypes.push_back(walkStr); } return HBRC_OK; } // Add a vertex to the graph void HaplotypeBuilder::addVertex(Vertex* pVertex, int coverage) { m_pGraph->addVertex(pVertex); m_vertexCoverageMap[pVertex->getSeq().toString()] = coverage; } // Add a new edge to the graph denoting the relationship between pX and pY. // Assumes pX and pY are already present in the m_pGraph void HaplotypeBuilder::addDeBruijnEdges(const Vertex* pX, const Vertex* pY, EdgeDir direction) { assert(pX->getSeq().length() == pY->getSeq().length()); // overlap length for a de bruijn edge size_t p = pX->getSeq().length() - 1; // Construct an overlap object for this relationship Overlap o; o.id[0] = pX->getID(); o.id[1] = pY->getID(); o.match.isReverse = false; o.match.numDiff = 0; if(direction == ED_SENSE) { // pX -> pY o.match.coord[0].interval.start = 1; o.match.coord[1].interval.start = 0; } else { // pY -> pX o.match.coord[0].interval.start = 0; o.match.coord[1].interval.start = 1; } o.match.coord[0].interval.end = o.match.coord[0].interval.start + p - 1; // inclusive coordinate o.match.coord[1].interval.end = o.match.coord[1].interval.start + p - 1; o.match.coord[0].seqlen = p + 1; o.match.coord[1].seqlen = p + 1; Edge* e = SGAlgorithms::createEdgesFromOverlap(m_pGraph, o, false); assert(e != NULL); } // Make the sequence of a new deBruijn vertex using the edge details std::string HaplotypeBuilder::makeDeBruijnVertex(const std::string& v, char edgeBase, EdgeDir direction) { std::string w; size_t p = v.size() - 1; if(direction == ED_SENSE) { w = v.substr(1, p); w.append(1, edgeBase); } else { w.append(1, edgeBase); w.append(v.substr(0, p)); } return w; } // Count the number of extensions of a de Bruijn node that are above // the required k-mer coverage size_t HaplotypeBuilder::countValidExtensions(const AlphaCount64& ac) const { size_t n = 0; for(size_t i = 0; i < DNA_ALPHABET::size; ++i) { char b = DNA_ALPHABET::getBase(i); size_t count = ac.get(b); if(count >= m_kmerThreshold) n += 1; } return n; } ================================================ FILE: src/SGA/Algorithm/HaplotypeBuilder.h ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // HaplotypeBuilder - Construct candidate // haplotypes from a pair of k-mer seeds. // #ifndef HAPLOTYPE_BUILDER_H #define HAPLOTYPE_BUILDER_H #include "BWT.h" #include "BWTInterval.h" #include "SGUtil.h" #include "SGWalk.h" #include "VariationBuilderCommon.h" #include // Structs struct AnchorSequence { std::string sequence; int position; int count; friend std::ostream& operator<<(std::ostream& out, const AnchorSequence& a) { out << a.position << " " << a.sequence << " " << a.count; return out; } }; typedef std::vector AnchorVector; // The result, a set of haplotypes struct HaplotypeBuilderResult { StringVector haplotypes; }; // Return codes to indicate why the process may have failed enum HaplotypeBuilderReturnCode { HBRC_OK, HBRC_TOO_MANY_VERTICES, HBRC_NO_PATH, HBRC_WALK_FAILED, }; // // Class to build a variant bubble starting at a particular sequence // class HaplotypeBuilder { public: HaplotypeBuilder(); ~HaplotypeBuilder(); void setTerminals(const AnchorSequence& leftAnchor, const AnchorSequence& rightAnchor); void setIndex(const BWT* pBWT, const BWT* pRBWT); // Set the threshold of kmer occurrences to use it as an edge void setKmerParameters(size_t k, size_t t); // Run the bubble construction process // Returns true if the graph was successfully built between the two sequences HaplotypeBuilderReturnCode run(); // Parse walks from the constructed graph HaplotypeBuilderReturnCode parseWalks(HaplotypeBuilderResult& results) const; private: // Add a vertex to the graph and record the sequence coverage value void addVertex(Vertex* pVertex, int coverage); // Make the sequence of a new deBruijn vertex using the edge details std::string makeDeBruijnVertex(const std::string& v, char edgeBase, EdgeDir direction); void addDeBruijnEdges(const Vertex* pX, const Vertex* pY, EdgeDir direction); // Count the number of extensions of a de Bruijn node that are above // the required k-mer coverage size_t countValidExtensions(const AlphaCount64& ac) const; // // Data // const BWT* m_pBWT; const BWT* m_pRevBWT; StringGraph* m_pGraph; StrIntMap m_vertexCoverageMap; BuilderExtensionQueue m_queue; Vertex* m_pStartVertex; Vertex* m_pJoinVertex; // size_t m_kmerThreshold; size_t m_kmerSize; }; #endif ================================================ FILE: src/SGA/Algorithm/KmerOverlaps.cpp ================================================ ///----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // KmerOverlaps - Overlap computation functions // seeded by exact kmer matches // #include "KmerOverlaps.h" #include "HashMap.h" #include "BWTAlgorithms.h" #include "Profiler.h" #include "Timer.h" #include "Verbosity.h" // MultipleAlignment KmerOverlaps::buildMultipleAlignment(const std::string& query, size_t k, int min_overlap, double min_identity, int bandwidth, const BWTIndexSet& indices) { SequenceOverlapPairVector overlap_vector = retrieveMatches(query, k, min_overlap, min_identity, bandwidth, indices); MultipleAlignment multiple_alignment; multiple_alignment.addBaseSequence("query", query, ""); for(size_t i = 0; i < overlap_vector.size(); ++i) multiple_alignment.addOverlap("null", overlap_vector[i].sequence[1], "", overlap_vector[i].overlap); return multiple_alignment; } // Struct to hold a partial match in the FM-index // The position field is the location in the query sequence of this kmer. // The index field is an index into the BWT. // The is_reverse flag indicates the strand of the partial match struct KmerMatch { size_t position:16; size_t index:47; size_t is_reverse:1; friend bool operator<(const KmerMatch& a, const KmerMatch& b) { if(a.index == b.index) return a.is_reverse < b.is_reverse; else return a.index < b.index; } friend bool operator==(const KmerMatch& a, const KmerMatch& b) { return a.index == b.index && a.is_reverse == b.is_reverse; } }; // Return a hash key for a KmerMatch struct KmerMatchKey { size_t operator()(const KmerMatch& a) const { return a.index; } }; typedef std::set KmerMatchSet; typedef HashMap KmerMatchMap; // SequenceOverlapPairVector KmerOverlaps::retrieveMatches(const std::string& query, size_t k, int min_overlap, double min_identity, int bandwidth, const BWTIndexSet& indices) { PROFILE_FUNC("OverlapHaplotypeBuilder::retrieveMatches") assert(indices.pBWT != NULL); assert(indices.pSSA != NULL); static size_t n_calls = 0; static size_t n_candidates = 0; static size_t n_output = 0; static double t_time = 0; Timer timer("test", true); n_calls++; int64_t max_interval_size = 200; SequenceOverlapPairVector overlap_vector; // Use the FM-index to look up intervals for each kmer of the read. Each index // in the interval is stored individually in the KmerMatchMap. We then // backtrack to map these kmer indices to read IDs. As reads can share // multiple kmers, we use the map to avoid redundant lookups. // There is likely a faster algorithm which performs direct decompression // of the read sequences without having to expand the intervals to individual // indices. The current algorithm suffices for now. KmerMatchMap prematchMap; size_t num_kmers = query.size() - k + 1; for(size_t i = 0; i < num_kmers; ++i) { std::string kmer = query.substr(i, k); BWTInterval interval = BWTAlgorithms::findInterval(indices, kmer); if(interval.isValid() && interval.size() < max_interval_size) { for(int64_t j = interval.lower; j <= interval.upper; ++j) { KmerMatch match = { i, static_cast(j), false }; prematchMap.insert(std::make_pair(match, false)); } } kmer = reverseComplement(kmer); interval = BWTAlgorithms::findInterval(indices, kmer); if(interval.isValid() && interval.size() < max_interval_size) { for(int64_t j = interval.lower; j <= interval.upper; ++j) { KmerMatch match = { i, static_cast(j), true }; prematchMap.insert(std::make_pair(match, false)); } } } // Backtrack through the kmer indices to turn them into read indices. // This mirrors the calcSA function in SampledSuffixArray except we mark each entry // as visited once it is processed. KmerMatchSet matches; for(KmerMatchMap::iterator iter = prematchMap.begin(); iter != prematchMap.end(); ++iter) { // This index has been visited if(iter->second) continue; // Mark this as visited iter->second = true; // Backtrack the index until we hit the starting symbol KmerMatch out_match = iter->first; while(1) { char b = indices.pBWT->getChar(out_match.index); out_match.index = indices.pBWT->getPC(b) + indices.pBWT->getOcc(b, out_match.index - 1); // Check if the hash indicates we have visited this index. If so, stop the backtrack KmerMatchMap::iterator find_iter = prematchMap.find(out_match); if(find_iter != prematchMap.end()) { // We have processed this index already if(find_iter->second) break; else find_iter->second = true; } if(b == '$') { // We've found the lexicographic index for this read. Turn it into a proper ID out_match.index = indices.pSSA->lookupLexoRank(out_match.index); matches.insert(out_match); break; } } } // Refine the matches by computing proper overlaps between the sequences // Use the overlaps that meet the thresholds to build a multiple alignment for(KmerMatchSet::iterator iter = matches.begin(); iter != matches.end(); ++iter) { std::string match_sequence = BWTAlgorithms::extractString(indices.pBWT, iter->index); if(iter->is_reverse) match_sequence = reverseComplement(match_sequence); // Ignore identical matches if(match_sequence == query) continue; // Compute the overlap. If the kmer match occurs a single time in each sequence we use // the banded extension overlap strategy. Otherwise we use the slow O(M*N) overlapper. SequenceOverlap overlap; std::string match_kmer = query.substr(iter->position, k); size_t pos_0 = query.find(match_kmer); size_t pos_1 = match_sequence.find(match_kmer); assert(pos_0 != std::string::npos && pos_1 != std::string::npos); // Check for secondary occurrences if(query.find(match_kmer, pos_0 + 1) != std::string::npos || match_sequence.find(match_kmer, pos_1 + 1) != std::string::npos) { // One of the reads has a second occurrence of the kmer. Use // the slow overlapper. overlap = Overlapper::computeOverlap(query, match_sequence); } else { overlap = Overlapper::extendMatch(query, match_sequence, pos_0, pos_1, bandwidth); } n_candidates += 1; bool bPassedOverlap = overlap.getOverlapLength() >= min_overlap; bool bPassedIdentity = overlap.getPercentIdentity() / 100 >= min_identity; if(bPassedOverlap && bPassedIdentity) { SequenceOverlapPair op; op.sequence[0] = query; op.sequence[1] = match_sequence; op.overlap = overlap; op.is_reversed = iter->is_reverse; overlap_vector.push_back(op); n_output += 1; } } t_time += timer.getElapsedCPUTime(); if(Verbosity::Instance().getPrintLevel() > 6 && n_calls % 100 == 0) printf("[kmer overlaps] n: %zu candidates: %zu valid: %zu (%.2lf) time: %.2lfs\n", n_calls, n_candidates, n_output, (double)n_output / n_candidates, t_time); return overlap_vector; } struct SeedEdit { SeedEdit(int i, char b) : index(i), base(b) {} int index; char base; }; typedef std::vector SeedEditVector; struct ApproxSeed { int query_index; // the index of the last query base included in the interval BWTInterval interval; int length; SeedEditVector edits; friend std::ostream& operator<<(std::ostream& o, ApproxSeed& a) { o << "QI: " << a.query_index << " IV: " << a.interval; o << " Edits: "; for(size_t i = 0; i < a.edits.size(); i++) o << a.edits[i].index << ":" << a.edits[i].base << ","; return o; } }; void _approximateSeededMatch(const std::string& in_query, int min_overlap, double min_identity, int bandwidth, int max_interval, bool do_reverse, const BWTIndexSet& indices, SequenceOverlapPairVector& out_vector) { Timer timer("test", true); assert(indices.pBWT != NULL); assert(indices.pSSA != NULL); assert(indices.pCache != NULL); static size_t n_calls = 0; static size_t n_candidates = 0; static size_t n_output = 0; static double t_time = 0; n_calls++; int target_seed_length = 41; int seed_stride = target_seed_length / 2; size_t d = 1; SequenceOverlapPairVector overlap_vector; std::string strand_query = do_reverse ? reverseComplement(in_query) : in_query; // Initialize seeds int seed_end = strand_query.size(); int q = indices.pCache->getCachedLength(); std::queue seeds; while(seed_end > target_seed_length) { // For the last q bases of the seed, create all strings within edit distance d std::string qmer = strand_query.substr(seed_end - q, q); assert((int)qmer.size() == q); // 0-distance seed ApproxSeed seed; seed.query_index = seed_end - q; seed.interval = indices.pCache->lookup(qmer.c_str()); seed.length = q; seeds.push(seed); for(int i = 0; i < q; ++i) { // Switch base to other 3 symbols char o = qmer[i]; for(size_t j = 0; j < 4; ++j) { char b = "ACGT"[j]; if(b != o) { qmer[i] = b; ApproxSeed seed; seed.query_index = seed_end - q; seed.interval = indices.pCache->lookup(qmer.c_str()); seed.length = q; seed.edits.push_back(SeedEdit(i + seed.query_index, b)); seeds.push(seed); } } qmer[i] = o; } seed_end -= seed_stride; } // Extend seeds std::vector finished_seeds; while(!seeds.empty()) { ApproxSeed& seed = seeds.front(); // query_index is the index of the last base // in the seed. get the next base char qb = strand_query[seed.query_index - 1]; // Branch to inexact match if(seed.edits.size() < d) { for(size_t j = 0; j < 4; ++j) { char b = "ACGT"[j]; if(b != qb) { ApproxSeed new_seed; new_seed.query_index = seed.query_index - 1; new_seed.interval = seed.interval; BWTAlgorithms::updateInterval(new_seed.interval, b, indices.pBWT); if(new_seed.interval.isValid()) { new_seed.length = seed.length + 1; new_seed.edits = seed.edits; new_seed.edits.push_back(SeedEdit(new_seed.query_index, b)); if(new_seed.length < target_seed_length && new_seed.query_index > 0) seeds.push(new_seed); else finished_seeds.push_back(new_seed); } } } } // Extend with the actual query base without branching seed.query_index = seed.query_index - 1; seed.length += 1; BWTAlgorithms::updateInterval(seed.interval, qb, indices.pBWT); if(!seed.interval.isValid() || seed.length >= target_seed_length || seed.query_index == 0) { if(seed.interval.isValid()) finished_seeds.push_back(seed); seeds.pop(); } } std::set rank_set; for(size_t i = 0; i < finished_seeds.size(); ++i) { if(finished_seeds[i].interval.size() > max_interval) continue; //std::cout << finished_seeds[i] << "\n"; std::string query_seed = strand_query.substr(finished_seeds[i].query_index, target_seed_length); std::string match_seed = query_seed; // Apply edits to the new sequence for(size_t j = 0; j < finished_seeds[i].edits.size(); ++j) match_seed[finished_seeds[i].edits[j].index - finished_seeds[i].query_index] = finished_seeds[i].edits[j].base; // Flip the seeds to match the strand of the query if(do_reverse) { query_seed = reverseComplement(query_seed); match_seed = reverseComplement(match_seed); } // Extract the prefix of every occurrence of this seed RankedPrefixVector extensions = BWTAlgorithms::extractRankedPrefixes(indices.pBWT, finished_seeds[i].interval); // Extend the seeds to the full-length string for(size_t j = 0; j < extensions.size(); ++j) { size_t rank = extensions[j].rank; // The second element of the returned pair is // false if the set already contains this rank if(!rank_set.insert(rank).second) continue; // Extract the reminder of the read std::string& prefix = extensions[j].prefix; int64_t start_index_of_read = indices.pSSA->lookupLexoRank(rank); std::string suffix = BWTAlgorithms::extractUntilInterval(indices.pBWT, start_index_of_read, finished_seeds[i].interval); std::string match_sequence = prefix + suffix; // Ignore identical matches if(match_sequence == strand_query) continue; // Change strands if(do_reverse) match_sequence = reverseComplement(match_sequence); // Compute the overlap SequenceOverlap overlap; size_t pos_0 = in_query.find(query_seed); size_t pos_1 = match_sequence.find(match_seed); assert(pos_0 != std::string::npos); assert(pos_1 != std::string::npos); if(in_query.find(query_seed, pos_0 + 1) != std::string::npos || match_sequence.find(match_seed, pos_1 + 1) != std::string::npos) { // One of the reads has a second occurrence of the kmer. Use // the slow overlapper. overlap = Overlapper::computeOverlap(in_query, match_sequence); } else { overlap = Overlapper::extendMatch(in_query, match_sequence, pos_0, pos_1, bandwidth); } n_candidates += 1; bool bPassedOverlap = overlap.getOverlapLength() >= min_overlap; bool bPassedIdentity = overlap.getPercentIdentity() / 100 >= min_identity; if(bPassedOverlap && bPassedIdentity) { //printf("Rank\t%zu\t%zu\t%s\t%.2lf\t%d\n", n_calls, // rank, match_sequence.c_str(), overlap.getPercentIdentity(), overlap.getOverlapLength()); SequenceOverlapPair op; op.sequence[0] = in_query; op.sequence[1] = match_sequence; op.overlap = overlap; op.is_reversed = do_reverse; out_vector.push_back(op); n_output += 1; } } } t_time += timer.getElapsedCPUTime(); if(Verbosity::Instance().getPrintLevel() > 6 && n_calls % 100 == 0) printf("[approx seeds] n: %zu candidates: %zu valid: %zu (%.2lf) time: %.2lfs\n", n_calls, n_candidates, n_output, (double)n_output / n_candidates, t_time); } // SequenceOverlapPairVector KmerOverlaps::approximateMatch(const std::string& query, int min_overlap, double min_identity, int bandwidth, int max_interval, const BWTIndexSet& indices) { SequenceOverlapPairVector opv; _approximateSeededMatch(query, min_overlap, min_identity, bandwidth, max_interval, false, indices, opv); _approximateSeededMatch(query, min_overlap, min_identity, bandwidth, max_interval, true, indices, opv); return opv; } ================================================ FILE: src/SGA/Algorithm/KmerOverlaps.h ================================================ ///----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // KmerOverlaps - Overlap computation functions // seeded by exact kmer matches // #ifndef KMER_OVERLAPS_H #define KMER_OVERLAPS_H #include "multiple_alignment.h" #include "BWTIndexSet.h" #include "SampledSuffixArray.h" // A pair of sequences and an overlap matching them struct SequenceOverlapPair { std::string sequence[2]; bool is_reversed; SequenceOverlap overlap; static bool sortByOverlapLengthDesc(const SequenceOverlapPair& a, const SequenceOverlapPair& b) { return a.overlap.getOverlapLength() > b.overlap.getOverlapLength(); } }; typedef std::vector SequenceOverlapPairVector; namespace KmerOverlaps { // Build a multiple alignment for the query, based on initial exact k-matches MultipleAlignment buildMultipleAlignment(const std::string& query, size_t k, int min_overlap, double min_identity, int bandwidth, const BWTIndexSet& indices); // Retrieve matches to the query sequence SequenceOverlapPairVector retrieveMatches(const std::string& query, size_t k, int min_overlap, double min_identity, int bandwidth, const BWTIndexSet& indices); SequenceOverlapPairVector approximateMatch(const std::string& query, int min_overlap, double min_identity, int bandwidth, int max_interval, const BWTIndexSet& indices); }; #endif ================================================ FILE: src/SGA/Algorithm/LRAlignment.cpp ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // LRAlignment - Collection of algorithms for performing // long read matches against an FM-index // #include "LRAlignment.h" #include "QuickBWT.h" #include "MultiAlignment.h" #include "StdAlnTools.h" //#define BWA_COMPAT_DEBUG 1 //#define BWA_COMPAT_DEBUG_RESOLVE 1 namespace LRAlignment { static const int MINUS_INF = -0x3fffffff; #define MASK_LEVEL 0.90f // Initialize the LRCell with default values void LRCell::initializeDefault() { interval.lower = 0; interval.upper = 0; I = MINUS_INF; D = MINUS_INF; G = MINUS_INF; parent_cidx = 0; q_len = 0; t_len = 0; parent_idx = -1; u_idx = -1; clearChildren(); } // Reset the child indices for the cell void LRCell::clearChildren() { children_idx[0] = -1; children_idx[1] = -1; children_idx[2] = -1; children_idx[3] = -1; } // Returns true if any child of the cell is uninitialized bool LRCell::hasUninitializedChild() const { return children_idx[0] == -1 || children_idx[1] == -1 || children_idx[2] == -1 || children_idx[3] == -1; } // Implementation of bwa-sw algorithm. // Roughly follows Heng Li's implementation void bwaswAlignment(const std::string& query, const BWT* pTargetBWT, const SampledSuffixArray* pTargetSSA, const LRParams& params, LRHitVector& outHits) { // Construct an FM-index of the query sequence BWT* pQueryBWT = NULL; SuffixArray* pQuerySA = NULL; createQuickBWT(query, pQueryBWT, pQuerySA); // Interval hash table used to mark cells as being duplicate LRHash dupHash; // Initialize the hash table of DAWG nodes LRHash dawgHash; initializeDAWGHash(pQueryBWT, dawgHash); // Initialize a stack of elements with a single entry for the root node // of the query DAWG LRStack stack; // High scoring alignments are stored as LRHits in these vectors // positionHitsVector stores up to 2 hits starting at every base of the query sequence // terminalHitsVector stores hits to sequence prefixes LRHitVector positionHitsVector(2*query.size()); LRHitVector terminalHitsVector; // Each dawg node is added to the pendingVector initially // Once all predecessors of the node have been visited, // the node is moved to the stack LRPendingVector pendingVector; size_t num_pending = 0; // Initialize a stack entry for the root node with an empty scoring cell LRStackEntry* pInitial = new LRStackEntry; pInitial->interval.lower = 0; pInitial->interval.upper = pQueryBWT->getBWLen() - 1; // LRCell x; x.initializeDefault(); x.G = 0; x.interval.lower = 0; x.interval.upper = pTargetBWT->getBWLen() - 1; pInitial->cells.push_back(x); stack.push(pInitial); // The main loop of the algorithm - traverse the DAWG while(!stack.empty()) { LRStackEntry* v = stack.top(); stack.pop(); size_t old_n = v->cells.size(); // TODO: bandwidth test and max depth ? // Descend into the children of the current dawg node // If the interval update succeeds, calculate scores between // the child node and all the LRCells of the current node for(int qci = 0; qci < DNA_ALPHABET::size; ++qci) { char query_child_base = DNA_ALPHABET::getBase(qci); BWTInterval child_interval = v->interval; BWTAlgorithms::updateInterval(child_interval, query_child_base, pQueryBWT); if(!child_interval.isValid()) continue; // Create an new array of cells for the scores between the child node // and all the nodes in the prefix tree LRStackEntry* u = new LRStackEntry; u->interval = child_interval; // Loop over the nodes in v for(size_t i = 0; i < v->cells.size(); ++i) { LRCell* p = &v->cells[i]; if(p->interval.upper == -1) continue; // duplicate that has been deleted LRCell x; // the cell being calculated LRCell* c[4]; // pointers to cells required to calculate x c[0] = &x; x.G = MINUS_INF; x.u_idx = p->u_idx = -1; bool add_x_to_u = false; if(p->parent_idx >= 0) { int upos = v->cells[p->parent_idx].u_idx; // Set pointers to the cell c[1] = upos >= 0 ? &u->cells[upos] : NULL; c[2] = p; c[3] = &v->cells[p->parent_idx]; int match_score = qci == p->parent_cidx ? params.alnParams.match : -params.alnParams.mismatch; int score = fillCells(params, match_score, c); if(score > 0) { // this cell has a positive score // set the x's parent position in u and set the // parent's child position to x x.parent_idx = upos; p->u_idx = u->cells.size(); // x will be added to u in this position if(x.parent_idx >= 0) u->cells[upos].children_idx[p->parent_cidx] = p->u_idx; add_x_to_u = true; } } else { if(p->D > p->G - params.alnParams.gap_open) x.D = p->D - params.alnParams.gap_ext; // extend gap else x.D = p->G - params.alnParams.gap_open_extend; // open a new gap if(x.D > 0) { x.G = x.D; x.I = MINUS_INF; x.parent_idx = -1; p->u_idx = u->cells.size(); add_x_to_u = true; } } if(add_x_to_u) { // set the remaining fields in the current cell x.clearChildren(); x.parent_cidx = p->parent_cidx; x.interval = p->interval; x.q_len = p->q_len + 1; x.t_len = p->t_len; u->cells.push_back(x); // TODO: heap heuristics from bwa-sw? } // Check if we should descend into another node of the prefix trie of the target if( (x.G > params.alnParams.gap_open_extend /* && heap test */) || i < old_n) { if(p->hasUninitializedChild()) { for(int tci = 0; tci < DNA_ALPHABET::size; ++tci) { if(p->children_idx[tci] != -1) continue; // already added char target_child_base = DNA_ALPHABET::getBase(tci); BWTInterval target_child_interval = p->interval; BWTAlgorithms::updateInterval(target_child_interval, target_child_base, pTargetBWT); if(!target_child_interval.isValid()) // child with this extension base does not exist { p->children_idx[tci] = -2; continue; } // Create new entry on array v LRCell y; y.G = y.I = y.D = MINUS_INF; y.interval = target_child_interval; y.parent_cidx = tci; y.q_len = p->q_len; y.t_len = p->t_len + 1; y.parent_idx = i; y.clearChildren(); p->children_idx[tci] = v->cells.size(); v->cells.push_back(y); p = &v->cells[i]; // p may have been invalidated in the push, update } // for tcl } // if has uninitialized } // if X.h } // for all v // Save high-scoring cells as hits if(!u->cells.empty()) { saveBestPositionHits(pQuerySA, u, params.alnParams.threshold, positionHitsVector); //saveAllHits(pQuerySA, pTargetSSA, pTargetBWT, u, params.threshold, terminalHitsVector); //saveTerminalHits(pQuerySA, pTargetSSA, pTargetBWT, u, params.threshold, terminalHitsVector); } // Update the stack by adding u or pushing it to the pending vector num_pending += updateStack(&stack, u, &pendingVector, &dawgHash, params); } // for qci // done with v delete v; } // for all stack assert(num_pending == 0); // Append the two hits vectors together positionHitsVector.insert(positionHitsVector.end(), terminalHitsVector.begin(), terminalHitsVector.end()); terminalHitsVector.clear(); resolveDuplicateHits(pTargetBWT, pTargetSSA, positionHitsVector, 2); // set the output hits outHits.insert(outHits.end(), positionHitsVector.begin(), positionHitsVector.end()); delete pQueryBWT; delete pQuerySA; } // Update the stack to contain entry u, after considering any possible merges // with StackEntries from the pending vector int updateStack(LRStack* pStack, LRStackEntry* u, LRPendingVector* pPendingVector, LRHash* pDawgHash, const LRParams& params) { // Find the iterator for u in the dawgHash LRHash dupHash; uint64_t key = u->interval.lower << 32 | u->interval.upper; LRHash::iterator hashIter = pDawgHash->find(key); assert(hashIter != pDawgHash->end() && (uint32_t)hashIter->second > 0); --hashIter->second; uint32_t count = (uint32_t)hashIter->second; uint32_t position = hashIter->second >> 32; // Check if an entry in the pending array exists for this DAWG node int change = 0; if(position > 0) { LRStackEntry* w = (*pPendingVector)[position - 1]; // An entry in the pending array has been created for this query substing // Merge u into the interval if(!u->cells.empty()) { // Swap so w is the StackEntry wth more cells if(w->cells.size() < u->cells.size()) { w = u; u = (*pPendingVector)[position - 1]; (*pPendingVector)[position - 1] = w; } mergeStackEntries(w, u); } if(count == 0) { // this node in the dawg will not be visited again // move the stack entry from the pending list to the stack removeDuplicateCells(w, dupHash); cutTail(w, params); pStack->push(w); (*pPendingVector)[position - 1] = 0; change -= 1; } // u is empty or merged, it is no longer needed delete u; } else if(count > 0) { // Create an entry in the pending queue for the current node of the DAWG if(!u->cells.empty()) { pPendingVector->push_back(u); change += 1; // Save the position of u in the pending vector into the hash // all subsequent traversals that visit this node of the dawg // will get merged into this position. index + 1 is stored // so that position == 0 indicates the empty case hashIter->second = (uint64_t)pPendingVector->size() << 32 | count; } else { // u has no cells to calculate, discard it delete u; } } else // count == 0, pos == 0 { // This substring is unique, push u straight onto the stack cutTail(u, params); pStack->push(u); } return change; } // Process a list of cells and save a best hit for each position void saveBestPositionHits(const SuffixArray* pQuerySA, LRStackEntry* u, int threshold, LRHitVector& hits) { for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; if(p->G < threshold) continue; for(int64_t k = u->interval.lower; k <= u->interval.upper; ++k) { // Calculate the beginning of the alignment using the suffix array // of the query SAElem e = pQuerySA->get(k); int beg = e.getPos(); int end = beg + p->q_len; // Save the best hit for alignments starting at beg in positions hits[2*beg] // and the second best hit in hits[2*beg+1] LRHit* q = NULL; if(p->G > hits[beg*2].G) { // move the previous best to the second best slot hits[beg*2+1] = hits[beg*2]; q = &hits[2*beg]; } else if(p->G > hits[beg*2+1].G) { // the current hit is the second best at this position q = &hits[2*beg+1]; } if(q) { q->interval = p->interval; q->length = p->t_len; q->G = p->G; q->q_start = beg; q->q_end = end; q->flag = 0; q->num_seeds = 0; } } } } // Process a list of cells and save alignment hits meeting the threshold void saveAllHits(const SuffixArray* pQuerySA, const SampledSuffixArray* /*pTargetSSA*/, const BWT* /*pTargetBWT*/, LRStackEntry* u, int threshold, LRHitVector& hits) { for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; if(p->G < threshold) continue; for(int64_t k = u->interval.lower; k <= u->interval.upper; ++k) { // Calculate the beginning of the alignment using the suffix array // of the query SAElem e = pQuerySA->get(k); int beg = e.getPos(); int end = beg + p->q_len; // Save the best hit for alignments starting at beg in positions hits[2*beg] // and the second best hit in hits[2*beg+1] LRHit q; q.interval = p->interval; q.length = p->t_len; q.G = p->G; q.q_start = beg; q.q_end = end; q.flag = 0; q.num_seeds = 0; hits.push_back(q); } } } // Process all the cells in the stack entry and save hits to cells that represent // terminal intervals (those intervals containing the start of some reads) void saveTerminalHits(const SuffixArray* pQuerySA, const SampledSuffixArray* /*pTargetSSA*/, const BWT* pTargetBWT, LRStackEntry* u, int threshold, LRHitVector& hits) { for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; if(p->G < threshold) continue; // If the target bwt interval contains a '$' symbol, push the hit AlphaCount64 extCount = BWTAlgorithms::getExtCount(p->interval, pTargetBWT); if(extCount.get('$') > 0) { // Create a hit for every beginning position in the query for(int64_t k = u->interval.lower; k <= u->interval.upper; ++k) { // Calculate the beginning of the alignment using the suffix array // of the query SAElem e = pQuerySA->get(k); int beg = e.getPos(); int end = beg + p->q_len; LRHit q; q.interval = p->interval; q.length = p->t_len; q.G = p->G; q.q_start = beg; q.q_end = end; q.flag = 0; q.num_seeds = 0; hits.push_back(q); } } } } // Initialize the hash table of DAWG nodes by inserting an element // into the hash table for each distinct substring of the query void initializeDAWGHash(BWT* pQueryBWT, LRHash& hashTable) { std::stack stack; stack.push(pQueryBWT->getBWLen() - 1); while(!stack.empty()) { uint64_t x = stack.top(); stack.pop(); BWTInterval interval(x >> 32, (uint32_t)x); AlphaCount64 lower = pQueryBWT->getFullOcc(interval.lower - 1); AlphaCount64 upper = pQueryBWT->getFullOcc(interval.upper); for(int ci = 0; ci < DNA_ALPHABET::size; ++ci) { char b = DNA_ALPHABET::getBase(ci); size_t pb = pQueryBWT->getPC(b); interval.lower = pb + lower.get(b); interval.upper = pb + upper.get(b) - 1; if(!interval.isValid()) continue; x = (uint64_t)interval.lower << 32 | interval.upper; // insert (or update) this key in the hash LRHash::iterator iter = hashTable.find(x); if(iter == hashTable.end()) { hashTable.insert(std::make_pair(x,1)); stack.push(x); } else { iter->second++; } } } } // Merge two stack entries which represent the same node in the DAWG void mergeStackEntries(LRStackEntry* u, LRStackEntry* v) { // Update parent index and child entries for v cell's to reflect // their new positions at the end of array of u size_t num_u = u->cells.size(); for (size_t i = 0; i != v->cells.size(); ++i) { LRCell* p = &v->cells[i]; if(p->parent_idx >= 0) p->parent_idx += num_u; for(size_t j = 0; j < 4; ++j) if (p->children_idx[j] >= 0) p->children_idx[j] += num_u; } u->cells.insert(u->cells.end(), v->cells.begin(), v->cells.end()); } // Remove duplicated cells from the stack entry void removeDuplicateCells(LRStackEntry* u, LRHash& hash) { hash.clear(); int n = 0; for(size_t i = 0; i < u->cells.size(); ++i) { int j = -1; // element to be deleted LRCell* p = &u->cells[i]; if(p->interval.upper == -1) continue; // already deleted uint64_t key = p->interval.lower << 32 | p->interval.upper; LRHash::iterator iter = hash.find(key); if(iter != hash.end()) { // Check if the score of p is greater than the stored cell // with the same key. Set j to be the index of u with the lower // score. uint32_t currScore = iter->second; if((int)currScore >= p->G) { j = i; } else { j = iter->second >> 32; iter->second = i << 32 | p->G; } } else { // initialize hash for cell i hash[key] = i << 32 | p->G; } if(j >= 0) { #ifdef BWA_COMPAT_DEBUG printf("marking p [%zu %zu] as deleted cidx: %d [DUP]\n", p->interval.lower, p->interval.upper, p->parent_cidx); #endif p = &u->cells[j]; p->interval.lower = -1; p->interval.upper = -1; p->G = 0; if(p->parent_idx >= 0) u->cells[p->parent_idx].children_idx[p->parent_cidx] = -3; n += 1; } } #ifdef BWA_COMPAT_DEBUG printf("removed %d duplicate entries\n", n); #endif } // Fill the values of C[0] depending on the values in the other 3 cells int fillCells(const LRParams& params, int match_score, LRCell* c[4]) { int G = c[3] ? c[3]->G + match_score : MINUS_INF; if(c[1]) { if(c[1]->I > c[1]->G - params.alnParams.gap_open) c[0]->I = c[1]->I - params.alnParams.gap_ext; // extend gap else c[0]->I = c[1]->G - params.alnParams.gap_open_extend; // open new gap if (c[0]->I > G) G = c[0]->I; // new best score } else { c[0]->I = MINUS_INF; } if(c[2]) { if(c[2]->D > c[2]->G - params.alnParams.gap_open) c[0]->D = c[2]->D - params.alnParams.gap_ext; // extend gap else c[0]->D = c[2]->G - params.alnParams.gap_open_extend; // open new gap if (c[0]->D > G) G = c[0]->D; // new best score } else { c[0]->D = MINUS_INF; } return(c[0]->G = G); } // Remove duplicate hits to the same target sequence from the hits vector int resolveDuplicateHitsByID(const BWT* pTargetBWT, const SampledSuffixArray* pTargetSSA, LRHitVector& hits, int /*IS*/) { if(hits.empty()) return 0; assert(pTargetBWT != NULL); assert(pTargetSSA != NULL); // Convert each hit interval to target coordinates LRHitVector newHits; for(size_t i = 0; i < hits.size(); ++i) { LRHit* p = &hits[i]; #ifdef BWA_COMPAT_DEBUG_RESOLVE printf("Total hits: %zu\n", hits.size()); printf("Reallocating hits array to size: %d\n", n); #endif if(!p->interval.isValid() || p->G <= 0) continue; for(int64_t k = p->interval.lower; k <= p->interval.upper; ++k) { LRHit tmp = *p; SAElem elem = pTargetSSA->calcSA(k, pTargetBWT); tmp.targetID = elem.getID(); tmp.t_start = elem.getPos(); tmp.interval.lower = 0; tmp.interval.upper = -1; #ifdef BWA_COMPAT_DEBUG_RESOLVE printf("Created new hit at position (%d, %d)\n", tmp.targetID, tmp.position); #endif newHits.push_back(tmp); } } // Swap the new hits structure with the old hits hits.swap(newHits); // sort hits by targetID, then score std::sort(hits.begin(), hits.end(), LRHit::compareIDandG); // Loop over the hits, zeroing all but the highest scoring hit for each target uint64_t prevID = std::numeric_limits::max(); size_t new_n = 0; for(size_t i = 0; i < hits.size(); ++i) { // std::cout << "ID: " << hits[i].targetID << " score: " << hits[i].G << "\n"; if(prevID == hits[i].targetID) hits[i].G = 0; else new_n += 1; prevID = hits[i].targetID; } std::sort(hits.begin(), hits.end(), LRHit::compareG); hits.resize(new_n); std::cout << "FINAL HITS: " << new_n << "\n"; #ifdef BWA_COMPAT_DEBUG_RESOLVE printf("Final number of hits after duplicate removal: %zu\n", hits.size()); #endif return hits.size(); } // Remove duplicated hits from the hits vector int resolveDuplicateHits(const BWT* pTargetBWT, const SampledSuffixArray* pTargetSSA, LRHitVector& hits, int IS) { if(hits.empty()) return 0; assert(pTargetBWT != NULL); if(pTargetBWT != NULL && pTargetSSA != NULL) { // Convert each hit to target coordinates int old_n = hits.size(); int n = 0; // Count the number of valid hits LRHitVector newHits; for(size_t i = 0; i < hits.size(); ++i) { LRHit* p = &hits[i]; if(p->interval.isValid() && p->interval.size() <= IS) n += p->interval.size(); else if(!p->interval.isValid()) // bwa compatibility hack n += 1; else if(p->G > 0) n += 1; } #ifdef BWA_COMPAT_DEBUG_RESOLVE printf("Total hits: %zu\n", hits.size()); printf("Reallocating hits array to size: %d\n", n); #endif newHits.resize(n); // Populate the newHits vector with the hits to keep int j = 0; for(int i = 0; i < old_n; ++i) { LRHit* p = &hits[i]; if(p->interval.isValid() && p->interval.size() <= IS) { for(int64_t k = p->interval.lower; k <= p->interval.upper; ++k) { newHits[j] = *p; SAElem elem = pTargetSSA->calcSA(k, pTargetBWT); newHits[j].targetID = elem.getID(); newHits[j].t_start = elem.getPos(); newHits[j].interval.lower = 0; newHits[j].interval.upper = -1; #ifdef BWA_COMPAT_DEBUG_RESOLVE printf("Created new hit at position (%d, %d)\n", newHits[j].targetID, newHits[j].position); #endif ++j; } } else if(p->G > 0) { newHits[j] = *p; SAElem elem = pTargetSSA->calcSA(p->interval.lower, pTargetBWT); newHits[j].targetID = elem.getID(); newHits[j].t_start = elem.getPos(); newHits[j].interval.lower = 0; newHits[j].interval.upper = -1; newHits[j].flag |= 1; #ifdef BWA_COMPAT_DEBUG_RESOLVE printf("Created new hit at position (%d, %d)\n", newHits[j].targetID, newHits[j].position); #endif ++j; } } // Swap the new hits structure with the old hits hits.swap(newHits); } // sort hits by score std::sort(hits.begin(), hits.end(), LRHit::compareG); int i,j; // Remove hits with significant overlaps on the query or target sequences for(i = 1; i < (int)hits.size(); ++i) { LRHit* p = &hits[i]; if(p->G == 0) break; for(j = 0; j < i; ++j) { LRHit* q = &hits[j]; bool compatible = true; // hit q has already been removed if(q->G == 0) continue; // if the hits are to different targets they can't overlap if(p->targetID != q->targetID) continue; if(p->interval.upper == -1 && q->interval.upper == -1) { // Calculate the overlap length on the query int qol = (p->q_end < q->q_end? p->q_end : q->q_end) - (p->q_start > q->q_start? p->q_start : q->q_start); if(qol < 0) qol = 0; if((float)qol / (p->q_end - p->q_start) > MASK_LEVEL || (float)qol / (q->q_end - q->q_start) > MASK_LEVEL) { int64_t tol = 0; if(p->t_start + p->length < q->t_start + q->length) tol = p->t_start + p->length; else tol = q->t_start + q->length; if(p->t_start > q->t_start) tol -= p->t_start; else tol -= q->t_start; if((double)tol / p->length > MASK_LEVEL || (double)tol / q->length > MASK_LEVEL) compatible = false; #ifdef BWA_COMPAT_DEBUG_RESOLVE printf(" idx = (%d,%d) id=(%d,%d) G=(%d,%d) qol: %d tol: %zu compat: %d\n", i,j, (int)p->targetID, (int)q->targetID, p->G, q->G, qol, tol, compatible); #endif if(!compatible) { p->G = 0; break; } } } } } int new_n = i; for(i = j = 0; i < new_n; ++i) { if(hits[i].G == 0) continue; if(i != j) hits[j++] = hits[i]; else ++j; } hits.resize(j); #ifdef BWA_COMPAT_DEBUG_RESOLVE printf("Final number of hits after duplicate removal: %zu\n", hits.size()); #endif return hits.size(); } // Remove cells from a stack entry based on some criteria void cutTail(LRStackEntry* u, const LRParams& params) { switch(params.cutTailAlgorithm) { case LRCA_Z_BEST: cutTailByZBest(u, params); break; case LRCA_Z_BEST_STRATA: cutTailByStratifiedZBest(u, params); break; case LRCA_SCORE_FRAC: cutTailByScorePercent(u, params); break; case LRCA_NONE: return; default: assert(false); } } // Remove cells from a stack entry (query dawg node) by their score // as expressed as a fraction of the maximum possible score for the // query void cutTailByScorePercent(LRStackEntry* u, const LRParams& params) { //printf("cutTail starting split score: %2.lf\n", split); for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; double cellScore = (double)p->G * 100.0f / (p->q_len * 1); if(cellScore < params.percentCutoff) { #ifdef BWA_COMPAT_DEBUG if(p->interval.upper > -1) printf("marking p [%d %d] as deleted [CT]\n", (int)p->interval.lower, (int)p->interval.upper); #endif //printf("cutTail cutting cell with qlen: %d %d %2.1lf\n", p->q_len, p->G, cellScore); p->interval.lower = 0; p->interval.upper = -1; p->G = 0; if(p->parent_idx >= 0) u->cells[p->parent_idx].children_idx[p->parent_cidx] = -1; } // else // printf("cutTail keeping cell with qlen: %d %d %2.1lf\n", p->q_len, p->G, cellScore); } } // Remove cells from a stack entry, only keeping the top zBest scoring nodes void cutTailByZBest(LRStackEntry* u, const LRParams& params) { assert(params.zBest > 0); // Save an int vector of scores IntVector scores; for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; if(p->interval.upper != -1 && p->G > 0) scores.push_back(-p->G); } if((int)scores.size() <= params.zBest) return; // Partially sort the scores to select the T-th best score std::nth_element(scores.begin(), scores.begin() + params.zBest, scores.end()); double split = -scores[params.zBest]; #ifdef BWA_COMPAT_DEBUG printf("[CT] split score: %2.lf\n", split); #endif int n = 0; //printf("cutTail starting split score: %2.lf\n", split); for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; if(p->G == split) ++n; if(p->G < split || (p->G == split && n >= params.zBest)) { #ifdef BWA_COMPAT_DEBUG if(p->interval.upper > -1) printf("marking p [%d %d] as deleted [CT]\n", (int)p->interval.lower, (int)p->interval.upper); #endif //printf("cutTail cutting cell with qlen: %d %d %2.1lf\n", p->q_len, p->G, cellScore); p->interval.lower = 0; p->interval.upper = -1; p->G = 0; if(p->parent_idx >= 0) u->cells[p->parent_idx].children_idx[p->parent_cidx] = -1; } /*else printf("cutTail keeping cell with qlen: %d %d %2.1lf\n", p->q_len, p->G, cellScore); */ } } // Remove cells from a stack entry, only keeping the top zBest scoring nodes for each query length void cutTailByStratifiedZBest(LRStackEntry* u, const LRParams& params) { assert(params.zBest > 0); if(u->cells.empty()) return; // Calculate the range of query lengths int minQ = std::numeric_limits::max(); int maxQ = 0; for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; if(p->q_len < minQ) minQ = p->q_len; if(p->q_len > maxQ) maxQ = p->q_len; } // Calculate cut points for each strata int span = maxQ - minQ + 1; assert(span > 0); // std::vector scores(span); IntVector cutoffs(span); IntVector counts(span); for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; int strata = p->q_len - minQ; assert(strata >= 0 && strata < (int)scores.size()); if(p->interval.upper != -1 && p->G > 0) scores[strata].push_back(-p->G); } // Perform a partial sort of each strata and determine cutoff points for(int i = 0; i < span; ++i) { if((int)scores[i].size() <= params.zBest) { cutoffs[i] = 0; // keep all positively-scored nodes continue; } // Partially sort the scores to select the T-th best score std::sort(scores[i].begin(), scores[i].end()); cutoffs[i] = -scores[i][params.zBest]; } #ifdef BWA_COMPAT_DEBUG printf("[CT] split score: %2.lf\n", split); #endif //printf("cutTail starting split score: %2.lf\n", split); for(size_t i = 0; i < u->cells.size(); ++i) { LRCell* p = &u->cells[i]; int strata = p->q_len - minQ; int c = cutoffs[strata]; if(p->G == c) ++counts[strata]; if(p->G < c || (p->G == c && counts[strata] >= params.zBest)) { #ifdef BWA_COMPAT_DEBUG if(p->interval.upper > -1) printf("marking p [%d %d] as deleted [CT]\n", (int)p->interval.lower, (int)p->interval.upper); #endif //printf("cutTail cutting cell with qlen: %d %d %2.1lf\n", p->q_len, p->G, cellScore); p->interval.lower = 0; p->interval.upper = -1; p->G = 0; if(p->parent_idx >= 0) u->cells[p->parent_idx].children_idx[p->parent_cidx] = -1; } /*else printf("cutTail keeping cell with qlen: %d %d %2.1lf\n", p->q_len, p->G, cellScore); */ } } // Construct a multiple alignment from a vector of hits MultiAlignment convertHitsToMultiAlignment(const std::string& query, const BWT* pTargetBWT, const SampledSuffixArray* /*pTargetSSA*/, const LRParams& params, const LRHitVector& hits) { // Set up stdaln data structures size_t max_target = StdAlnTools::calculateMaxTargetLength(query.size(), params.alnParams); path_t* path = (path_t*)calloc(max_target + query.size(), sizeof(path_t)); AlnParam par; int matrix[25]; StdAlnTools::setAlnParam(par, matrix, params.alnParams); MAlignDataVector mAlignVec; uint8_t* pQueryT = StdAlnTools::createPacked(query); for(size_t i = 0; i < hits.size(); ++i) { LRHit tempHit = hits[i]; assert(tempHit.targetID != (uint64_t)-1); std::string target = BWTAlgorithms::extractString(pTargetBWT, tempHit.targetID); uint8_t* pTargetT = StdAlnTools::createPacked(target); //extendHitFullLength(tempHit, pQueryT, pTargetT, query.size(), target.size(), &par); int q_start_pos, q_end_pos, t_start_pos, t_end_pos; q_start_pos = tempHit.q_start; q_end_pos = tempHit.q_end; // exclusive t_start_pos = tempHit.t_start; t_end_pos = t_start_pos + tempHit.length; // exclusive // Get pointers to the substrings of interest int ql = q_end_pos - q_start_pos; uint8_t* pQuerySub = pQueryT + q_start_pos; int tl = t_end_pos - t_start_pos; uint8_t* pTargetSub = pTargetT + t_start_pos; int path_len = 0; /*int score =*/ aln_global_core(pTargetSub, tl, pQuerySub, ql, &par, path, &path_len); int cigarLen = 0; uint32_t* pCigar = aln_path2cigar32(path, path_len, &cigarLen); // MAlignData maData; maData.str = target.substr(t_start_pos, t_end_pos - t_start_pos); maData.position = q_start_pos; // Add initial padding to cigar maData.expandedCigar.append(maData.position, 'S'); // Add alignment symbols for (int j = 0; j != cigarLen; ++j) maData.expandedCigar.append(pCigar[j]>>4, "MID"[pCigar[j]&0xf]); /* printf("AlignmentDP (%zu)\n", hits[i].targetID); printf("Coords: q[%d, %d] t[%d, %d]\n", q_start_pos, q_end_pos, t_start_pos, t_end_pos); printf("C: %s\n", maData.expandedCigar.c_str()); */ mAlignVec.push_back(maData); // Cleanup delete [] pTargetT; free(pCigar); } // Cleanup free(path); delete [] pQueryT; return MultiAlignment(query, mAlignVec); } // Attempt to extend a hit to the left and right using aln_extend_core // from stdaln void extendHitFullLength(LRHit& hit, uint8_t* pQueryPacked, uint8_t* pTargetPacked, int q_length, int t_length, AlnParam* pStdAlnPar) { int q_start = hit.q_start; int q_end = hit.q_end; // exclusive int t_start = hit.t_start; int t_end = t_start + hit.length; // exclusive // Attempt left-extension if(t_start != 0 && q_start != 0) { int q_diff = q_start; int t_diff = t_start; int d = std::min(q_diff, t_diff); q_start -= d; t_start -= d; } // Attempt right-extension if(q_end < q_length && t_end < t_length) { // extension match lengths int tel = t_length - t_start; int qel = q_length - q_start; uint8_t* pTargetPackedSub = pTargetPacked + t_start; uint8_t* pQueryPackedSub = pQueryPacked + q_start; path_t path; int score = aln_extend_core(pTargetPackedSub, tel, pQueryPackedSub, qel, pStdAlnPar, &path, 0, hit.G, NULL); if(score > hit.G) { hit.G = score; hit.length = path.i; hit.q_end = path.j + hit.q_start; } } } }; ================================================ FILE: src/SGA/Algorithm/LRAlignment.h ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // LRAlignment - Collection of algorithms for performing // long read matches against an FM-index // #ifndef LRALIGNMENT_H #define LRALIGNMENT_H #include "BWT.h" #include "SampledSuffixArray.h" #include "BWTAlgorithms.h" #include "HashMap.h" #include "MultiAlignment.h" #include "StdAlnTools.h" #include "stdaln.h" #include namespace LRAlignment { // Enum of identifiers for cell-filtering heuristics enum CutAlgorithm { LRCA_DEFAULT, LRCA_Z_BEST, LRCA_Z_BEST_STRATA, LRCA_SCORE_FRAC, LRCA_NONE }; // Parameters object struct LRParams { LRParams() { setDefaults(); } void setDefaults() { alnParams.setDefaults(); zBest = 20; percentCutoff = 0.90f; cutTailAlgorithm = LRCA_Z_BEST; } // void setPacBio() { setDefaults(); alnParams.setPacBio(); } GlobalAlnParams alnParams; // Cell filtering heuristics int zBest; double percentCutoff; CutAlgorithm cutTailAlgorithm; }; // Structure holding an alignment between a query sequence and a BWT of a collection of sequences struct LRHit { LRHit() : interval(0,-1), flag(0), num_seeds(0), targetID(-1), t_start(-1), length(0), G(0), q_start(0), q_end(0) {} BWTInterval interval; uint32_t flag; uint32_t num_seeds; uint64_t targetID; // ID of target sequence int t_start; // alignment start position on target int length; // length of the target alignment int G; int q_start; // alignment start on query int q_end; // alignment end (exclusive) on query static bool compareG(const LRHit& a, const LRHit& b) { return a.G > b.G; } static bool compareIDandG(const LRHit& a, const LRHit& b) { if(a.targetID == b.targetID) return a.G > b.G; else return a.targetID < b.targetID; } }; typedef std::vector LRHitVector; // Structure holding the score between a node of the prefix DAWG of the query // and the prefix trie of the target struct LRCell { // Functions void initializeDefault(); void clearChildren(); bool hasUninitializedChild() const; // Data Members // interval on the target bwt BWTInterval interval; // scores int I; int D; int G; // Character code from parent uint8_t parent_cidx; // Query and target lengths int q_len; int t_len; // Index of the parent in cell array of the stack entry int parent_idx; // Index of this cell in the cell array int u_idx; // Indices of the children in the cell array int children_idx[4]; }; typedef std::vector LRCellVector; // typedef HashMap LRHash; // A stack entry holds the an interval into the query BWT // and an array of cells with the scores for that interval struct LRStackEntry { BWTInterval interval; LRCellVector cells; }; // typedef std::stack LRStack; typedef std::vector LRPendingVector; // Core alignment function - align the sequence query // against all sequences in pTargetBWT void bwaswAlignment(const std::string& query, const BWT* pTargetBWT, const SampledSuffixArray* pTargetSSA, const LRParams& params, LRHitVector& outHits); // MultiAlignment convertHitsToMultiAlignment(const std::string& query, const BWT* pTargetBWT, const SampledSuffixArray* pTargetSSA, const LRParams& params, const LRHitVector& hits); // // Helper functions // // Initialize a hash table of BWT intervals representing // the nodes in a DAWG void initializeDAWGHash(BWT* pQueryBWT, LRHash& dawgHash); // Merge the cells of the two stack entries void mergeStackEntries(LRStackEntry* u, LRStackEntry* v); // Update the given LRStack to contain the new StackEntry after // performing any necessary merges with pending Stacks int updateStack(LRStack* pStack, LRStackEntry* u, LRPendingVector* pPendingVector, LRHash* pDawgHash, const LRParams& params); // Cull duplicated cells in the given stack entry void removeDuplicateCells(LRStackEntry* u, LRHash& hash); // Filter duplicated hits from hitsVector using their position on the query sequence int resolveDuplicateHits(const BWT* pTargetBWT, const SampledSuffixArray* pTargetSSA, LRHitVector& hits, int IS); // Filter hits out of the hits vector using their ID // At most 1 hit per target sequence is kept int resolveDuplicateHitsByID(const BWT* pTargetBWT, const SampledSuffixArray* pTargetSSA, LRHitVector& hits, int IS); // Save the best hits at each position void saveBestPositionHits(const SuffixArray* pQuerySA, LRStackEntry* u, int threshold, LRHitVector& hits); // add hits to the vector for cells that score above threshold void saveAllHits(const SuffixArray* pQuerySA, const SampledSuffixArray* pTargetSSA, const BWT* pTargetBWT, LRStackEntry* u, int threshold, LRHitVector& hits); // save hits to cells that contain intervals that represent prefixes of reads void saveTerminalHits(const SuffixArray* pQuerySA, const SampledSuffixArray* pTargetSSA, const BWT* pTargetBWT, LRStackEntry* u, int threshold, LRHitVector& hits); // Using the cell points in c, calculate scores for cell c[0] int fillCells(const LRParams& params, int match_score, LRCell* c[4]); // Functions to heuristically remove low-scoring cells void cutTail(LRStackEntry* u, const LRParams& params); void cutTailByScorePercent(LRStackEntry* u, const LRParams& params); void cutTailByZBest(LRStackEntry* u, const LRParams& params); void cutTailByStratifiedZBest(LRStackEntry* u, const LRParams& params); // Attempt to extend a hit coordinate to a full-length match void extendHitFullLength(LRHit& hit, uint8_t* pQueryPacked, uint8_t* pTargetPacked, int query_length, int target_length, AlnParam* pStdAlnPar); }; #endif ================================================ FILE: src/SGA/Algorithm/Makefile.am ================================================ noinst_LIBRARIES = libalgorithm.a libalgorithm_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/StringGraph \ -I$(top_srcdir)/src/SGA/SQG \ -I$(top_srcdir)/src/SGA/SuffixTools \ -I$(top_srcdir)/SeqLib libalgorithm_a_SOURCES = \ OverlapAlgorithm.h OverlapAlgorithm.cpp \ SearchSeed.h SearchSeed.cpp \ OverlapBlock.h OverlapBlock.cpp \ SearchHistory.h SearchHistory.cpp \ ## ErrorCorrectProcess.h ErrorCorrectProcess.cpp \ ## QCProcess.h QCProcess.cpp \ OverlapTools.h OverlapTools.cpp ## DPAlignment.h DPAlignment.cpp \ ## ConnectProcess.h ConnectProcess.cpp \ ## StringGraphGenerator.h StringGraphGenerator.cpp \ ## FMMergeProcess.h FMMergeProcess.cpp \ ## StatsProcess.h StatsProcess.cpp \ ## ClusterProcess.h ClusterProcess.cpp \ ## ReadCluster.h ReadCluster.cpp \ ## LRAlignment.h LRAlignment.cpp \ ## StringThreader.h StringThreader.cpp \ ## ExtensionDP.h ExtensionDP.cpp \ ## HaplotypeBuilder.h HaplotypeBuilder.cpp \ ## GapFillProcess.h GapFillProcess.cpp \ ## VariationBuilderCommon.h VariationBuilderCommon.cpp \ ## KmerOverlaps.h KmerOverlaps.cpp ================================================ FILE: src/SGA/Algorithm/Makefile.in ================================================ # Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/SGA/Algorithm ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libalgorithm_a_AR = $(AR) $(ARFLAGS) libalgorithm_a_LIBADD = am_libalgorithm_a_OBJECTS = libalgorithm_a-OverlapAlgorithm.$(OBJEXT) \ libalgorithm_a-SearchSeed.$(OBJEXT) \ libalgorithm_a-OverlapBlock.$(OBJEXT) \ libalgorithm_a-SearchHistory.$(OBJEXT) \ libalgorithm_a-OverlapTools.$(OBJEXT) libalgorithm_a_OBJECTS = $(am_libalgorithm_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Po \ ./$(DEPDIR)/libalgorithm_a-OverlapBlock.Po \ ./$(DEPDIR)/libalgorithm_a-OverlapTools.Po \ ./$(DEPDIR)/libalgorithm_a-SearchHistory.Po \ ./$(DEPDIR)/libalgorithm_a-SearchSeed.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libalgorithm_a_SOURCES) DIST_SOURCES = $(libalgorithm_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libalgorithm.a libalgorithm_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/StringGraph \ -I$(top_srcdir)/src/SGA/SQG \ -I$(top_srcdir)/src/SGA/SuffixTools \ -I$(top_srcdir)/SeqLib libalgorithm_a_SOURCES = \ OverlapAlgorithm.h OverlapAlgorithm.cpp \ SearchSeed.h SearchSeed.cpp \ OverlapBlock.h OverlapBlock.cpp \ SearchHistory.h SearchHistory.cpp \ OverlapTools.h OverlapTools.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/SGA/Algorithm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/SGA/Algorithm/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libalgorithm.a: $(libalgorithm_a_OBJECTS) $(libalgorithm_a_DEPENDENCIES) $(EXTRA_libalgorithm_a_DEPENDENCIES) $(AM_V_at)-rm -f libalgorithm.a $(AM_V_AR)$(libalgorithm_a_AR) libalgorithm.a $(libalgorithm_a_OBJECTS) $(libalgorithm_a_LIBADD) $(AM_V_at)$(RANLIB) libalgorithm.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libalgorithm_a-OverlapBlock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libalgorithm_a-OverlapTools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libalgorithm_a-SearchHistory.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libalgorithm_a-SearchSeed.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libalgorithm_a-OverlapAlgorithm.o: OverlapAlgorithm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-OverlapAlgorithm.o -MD -MP -MF $(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Tpo -c -o libalgorithm_a-OverlapAlgorithm.o `test -f 'OverlapAlgorithm.cpp' || echo '$(srcdir)/'`OverlapAlgorithm.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Tpo $(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapAlgorithm.cpp' object='libalgorithm_a-OverlapAlgorithm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-OverlapAlgorithm.o `test -f 'OverlapAlgorithm.cpp' || echo '$(srcdir)/'`OverlapAlgorithm.cpp libalgorithm_a-OverlapAlgorithm.obj: OverlapAlgorithm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-OverlapAlgorithm.obj -MD -MP -MF $(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Tpo -c -o libalgorithm_a-OverlapAlgorithm.obj `if test -f 'OverlapAlgorithm.cpp'; then $(CYGPATH_W) 'OverlapAlgorithm.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapAlgorithm.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Tpo $(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapAlgorithm.cpp' object='libalgorithm_a-OverlapAlgorithm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-OverlapAlgorithm.obj `if test -f 'OverlapAlgorithm.cpp'; then $(CYGPATH_W) 'OverlapAlgorithm.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapAlgorithm.cpp'; fi` libalgorithm_a-SearchSeed.o: SearchSeed.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-SearchSeed.o -MD -MP -MF $(DEPDIR)/libalgorithm_a-SearchSeed.Tpo -c -o libalgorithm_a-SearchSeed.o `test -f 'SearchSeed.cpp' || echo '$(srcdir)/'`SearchSeed.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-SearchSeed.Tpo $(DEPDIR)/libalgorithm_a-SearchSeed.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchSeed.cpp' object='libalgorithm_a-SearchSeed.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-SearchSeed.o `test -f 'SearchSeed.cpp' || echo '$(srcdir)/'`SearchSeed.cpp libalgorithm_a-SearchSeed.obj: SearchSeed.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-SearchSeed.obj -MD -MP -MF $(DEPDIR)/libalgorithm_a-SearchSeed.Tpo -c -o libalgorithm_a-SearchSeed.obj `if test -f 'SearchSeed.cpp'; then $(CYGPATH_W) 'SearchSeed.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchSeed.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-SearchSeed.Tpo $(DEPDIR)/libalgorithm_a-SearchSeed.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchSeed.cpp' object='libalgorithm_a-SearchSeed.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-SearchSeed.obj `if test -f 'SearchSeed.cpp'; then $(CYGPATH_W) 'SearchSeed.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchSeed.cpp'; fi` libalgorithm_a-OverlapBlock.o: OverlapBlock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-OverlapBlock.o -MD -MP -MF $(DEPDIR)/libalgorithm_a-OverlapBlock.Tpo -c -o libalgorithm_a-OverlapBlock.o `test -f 'OverlapBlock.cpp' || echo '$(srcdir)/'`OverlapBlock.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-OverlapBlock.Tpo $(DEPDIR)/libalgorithm_a-OverlapBlock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapBlock.cpp' object='libalgorithm_a-OverlapBlock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-OverlapBlock.o `test -f 'OverlapBlock.cpp' || echo '$(srcdir)/'`OverlapBlock.cpp libalgorithm_a-OverlapBlock.obj: OverlapBlock.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-OverlapBlock.obj -MD -MP -MF $(DEPDIR)/libalgorithm_a-OverlapBlock.Tpo -c -o libalgorithm_a-OverlapBlock.obj `if test -f 'OverlapBlock.cpp'; then $(CYGPATH_W) 'OverlapBlock.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapBlock.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-OverlapBlock.Tpo $(DEPDIR)/libalgorithm_a-OverlapBlock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapBlock.cpp' object='libalgorithm_a-OverlapBlock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-OverlapBlock.obj `if test -f 'OverlapBlock.cpp'; then $(CYGPATH_W) 'OverlapBlock.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapBlock.cpp'; fi` libalgorithm_a-SearchHistory.o: SearchHistory.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-SearchHistory.o -MD -MP -MF $(DEPDIR)/libalgorithm_a-SearchHistory.Tpo -c -o libalgorithm_a-SearchHistory.o `test -f 'SearchHistory.cpp' || echo '$(srcdir)/'`SearchHistory.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-SearchHistory.Tpo $(DEPDIR)/libalgorithm_a-SearchHistory.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchHistory.cpp' object='libalgorithm_a-SearchHistory.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-SearchHistory.o `test -f 'SearchHistory.cpp' || echo '$(srcdir)/'`SearchHistory.cpp libalgorithm_a-SearchHistory.obj: SearchHistory.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-SearchHistory.obj -MD -MP -MF $(DEPDIR)/libalgorithm_a-SearchHistory.Tpo -c -o libalgorithm_a-SearchHistory.obj `if test -f 'SearchHistory.cpp'; then $(CYGPATH_W) 'SearchHistory.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchHistory.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-SearchHistory.Tpo $(DEPDIR)/libalgorithm_a-SearchHistory.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SearchHistory.cpp' object='libalgorithm_a-SearchHistory.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-SearchHistory.obj `if test -f 'SearchHistory.cpp'; then $(CYGPATH_W) 'SearchHistory.cpp'; else $(CYGPATH_W) '$(srcdir)/SearchHistory.cpp'; fi` libalgorithm_a-OverlapTools.o: OverlapTools.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-OverlapTools.o -MD -MP -MF $(DEPDIR)/libalgorithm_a-OverlapTools.Tpo -c -o libalgorithm_a-OverlapTools.o `test -f 'OverlapTools.cpp' || echo '$(srcdir)/'`OverlapTools.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-OverlapTools.Tpo $(DEPDIR)/libalgorithm_a-OverlapTools.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapTools.cpp' object='libalgorithm_a-OverlapTools.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-OverlapTools.o `test -f 'OverlapTools.cpp' || echo '$(srcdir)/'`OverlapTools.cpp libalgorithm_a-OverlapTools.obj: OverlapTools.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libalgorithm_a-OverlapTools.obj -MD -MP -MF $(DEPDIR)/libalgorithm_a-OverlapTools.Tpo -c -o libalgorithm_a-OverlapTools.obj `if test -f 'OverlapTools.cpp'; then $(CYGPATH_W) 'OverlapTools.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapTools.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libalgorithm_a-OverlapTools.Tpo $(DEPDIR)/libalgorithm_a-OverlapTools.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapTools.cpp' object='libalgorithm_a-OverlapTools.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libalgorithm_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libalgorithm_a-OverlapTools.obj `if test -f 'OverlapTools.cpp'; then $(CYGPATH_W) 'OverlapTools.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapTools.cpp'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Po -rm -f ./$(DEPDIR)/libalgorithm_a-OverlapBlock.Po -rm -f ./$(DEPDIR)/libalgorithm_a-OverlapTools.Po -rm -f ./$(DEPDIR)/libalgorithm_a-SearchHistory.Po -rm -f ./$(DEPDIR)/libalgorithm_a-SearchSeed.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libalgorithm_a-OverlapAlgorithm.Po -rm -f ./$(DEPDIR)/libalgorithm_a-OverlapBlock.Po -rm -f ./$(DEPDIR)/libalgorithm_a-OverlapTools.Po -rm -f ./$(DEPDIR)/libalgorithm_a-SearchHistory.Po -rm -f ./$(DEPDIR)/libalgorithm_a-SearchSeed.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/SGA/Algorithm/OverlapAlgorithm.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- #include "OverlapAlgorithm.h" #include "ASQG.h" #include // Collect the complete set of overlaps in pOBOut static const AlignFlags sufPreAF(false, false, false); static const AlignFlags prePreAF(false, true, true); static const AlignFlags sufSufAF(true, false, true); static const AlignFlags preSufAF(true, true, false); //#define DEBUGOVERLAP 2 // Perform the overlap OverlapResult OverlapAlgorithm::overlapRead(const SeqRecord& read, int minOverlap, OverlapBlockList* pOutList) const { OverlapResult r; if(static_cast(read.seq.length()) < minOverlap) return r; if(!m_exactModeOverlap) r = overlapReadInexact(read, minOverlap, pOutList); else r = overlapReadExact(read, minOverlap, pOutList); return r; } // OverlapResult OverlapAlgorithm::overlapReadInexact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const { OverlapResult result; OverlapBlockList obWorkingList; std::string seq = read.seq.toString(); #ifdef DEBUGOVERLAP std::cout << "\n\n***Overlapping read " << read.id << " suffix\n"; std::cout << "***Overlapping seq " << read.seq.toString() << " suffix\n"; #endif // Match the suffix of seq to prefixes // findInexact returns false is the maximum search time was exceeded. In this // case we dont run any of the subsequent commands and return no overlaps. bool valid = true; valid = findOverlapBlocksInexact(seq, m_pBWT, m_pRevBWT, sufPreAF, minOverlap, &obWorkingList, pOBOut, result); if(valid) valid = findOverlapBlocksInexact(complement(seq), m_pRevBWT, m_pBWT, prePreAF, minOverlap, &obWorkingList, pOBOut, result); #ifdef DEBUGOVERLAP std::cout << "WORKING OverlapBlockList Length SUFFIX: " << obWorkingList.size() << std::endl; #endif if(valid) { if(m_bIrreducible) { computeIrreducibleBlocks(m_pBWT, m_pRevBWT, &obWorkingList, pOBOut); obWorkingList.clear(); } else { pOBOut->splice(pOBOut->end(), obWorkingList); assert(obWorkingList.empty()); } } #ifdef DEBUGOVERLAP std::cout << "\n\n***Overlapping read " << read.id << " prefix\n"; #endif // Match the prefix of seq to suffixes if(valid) valid = findOverlapBlocksInexact(reverseComplement(seq), m_pBWT, m_pRevBWT, sufSufAF, minOverlap, &obWorkingList, pOBOut, result); if(valid) valid = findOverlapBlocksInexact(reverse(seq), m_pRevBWT, m_pBWT, preSufAF, minOverlap, &obWorkingList, pOBOut, result); #ifdef DEBUGOVERLAP std::cout << "WORKING OverlapBlockList Length PREFIX: " << obWorkingList.size() << std::endl; #endif if(valid) { if(m_bIrreducible) { computeIrreducibleBlocks(m_pBWT, m_pRevBWT, &obWorkingList, pOBOut); obWorkingList.clear(); } else { pOBOut->splice(pOBOut->end(), obWorkingList); assert(obWorkingList.empty()); } } if(!valid) { pOBOut->clear(); result.isSubstring = false; result.searchAborted = true; return result; } #ifdef DEBUGOVERLAP unsigned N = 1; if (pOBOut->size() > N) { std::cout << read.id << " OverlapBlockList Length: " << pOBOut->size() << std::endl; std::list::iterator it = pOBOut->begin(); std::advance(it, N); //std::cout << "Olen: " << it->overlapLen << " numDiff: " << it->numDiff << std::endl; std::cout << " BWT1L: " << it->ranges.interval[0].lower; std::cout << " BWT1U: " << it->ranges.interval[0].upper; std::cout << " BWT2L: " << it->ranges.interval[1].lower; std::cout << " BWT2U: " << it->ranges.interval[1].upper; std::cout << " RBWT1L: " << it->rawRanges.interval[0].lower; std::cout << " RBWT1U: " << it->rawRanges.interval[0].upper; std::cout << " RBWT2L: " << it->rawRanges.interval[1].lower; std::cout << " RBWT2U: " << it->rawRanges.interval[1].upper << std::endl; } #endif return result; } // OverlapResult OverlapAlgorithm::alignReadDuplicate(const SeqRecord& read, OverlapBlockList* pOBOut) const { OverlapResult result; OverlapBlockList obWorkingList; std::string seq = read.seq.toString(); int readLength = seq.length(); findOverlapBlocksInexact(seq, m_pBWT, m_pRevBWT, sufPreAF, readLength, &obWorkingList, pOBOut, result); findOverlapBlocksInexact(complement(seq), m_pRevBWT, m_pBWT, prePreAF, readLength, &obWorkingList, pOBOut, result); return result; } // Construct the set of blocks describing irreducible overlaps with READ // and write the blocks to pOBOut OverlapResult OverlapAlgorithm::overlapReadExact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const { OverlapResult result; // The complete set of overlap blocks are collected in obWorkingList // The filtered set (containing only irreducible overlaps) are placed into pOBOut // by calculateIrreducibleHits OverlapBlockList obWorkingList; std::string seq = read.seq.toString(); // We store the various overlap blocks using a number of lists, one for the containments // in the forward and reverse index and one for each set of overlap blocks OverlapBlockList oblFwdContain; OverlapBlockList oblRevContain; OverlapBlockList oblSuffixFwd; OverlapBlockList oblSuffixRev; OverlapBlockList oblPrefixFwd; OverlapBlockList oblPrefixRev; // Match the suffix of seq to prefixes findOverlapBlocksExact(seq, m_pBWT, m_pRevBWT, sufPreAF, minOverlap, &oblSuffixFwd, &oblFwdContain, result); findOverlapBlocksExact(complement(seq), m_pRevBWT, m_pBWT, prePreAF, minOverlap, &oblSuffixRev, &oblRevContain, result); // Match the prefix of seq to suffixes findOverlapBlocksExact(reverseComplement(seq), m_pBWT, m_pRevBWT, sufSufAF, minOverlap, &oblPrefixFwd, &oblFwdContain, result); findOverlapBlocksExact(reverse(seq), m_pRevBWT, m_pBWT, preSufAF, minOverlap, &oblPrefixRev, &oblRevContain, result); // Remove submaximal blocks for each block list including fully contained blocks // Copy the containment blocks into the prefix/suffix lists oblSuffixFwd.insert(oblSuffixFwd.end(), oblFwdContain.begin(), oblFwdContain.end()); oblPrefixFwd.insert(oblPrefixFwd.end(), oblFwdContain.begin(), oblFwdContain.end()); oblSuffixRev.insert(oblSuffixRev.end(), oblRevContain.begin(), oblRevContain.end()); oblPrefixRev.insert(oblPrefixRev.end(), oblRevContain.begin(), oblRevContain.end()); // Perform the submaximal filter removeSubMaximalBlocks(&oblSuffixFwd, m_pBWT, m_pRevBWT); removeSubMaximalBlocks(&oblPrefixFwd, m_pBWT, m_pRevBWT); removeSubMaximalBlocks(&oblSuffixRev, m_pRevBWT, m_pBWT); removeSubMaximalBlocks(&oblPrefixRev, m_pRevBWT, m_pBWT); // Remove the contain blocks from the suffix/prefix lists removeContainmentBlocks(seq.length(), &oblSuffixFwd); removeContainmentBlocks(seq.length(), &oblPrefixFwd); removeContainmentBlocks(seq.length(), &oblSuffixRev); removeContainmentBlocks(seq.length(), &oblPrefixRev); // Join the suffix and prefix lists oblSuffixFwd.splice(oblSuffixFwd.end(), oblSuffixRev); oblPrefixFwd.splice(oblPrefixFwd.end(), oblPrefixRev); // Move the containments to the output list pOBOut->splice(pOBOut->end(), oblFwdContain); pOBOut->splice(pOBOut->end(), oblRevContain); // Filter out transitive overlap blocks if requested if(m_bIrreducible) { computeIrreducibleBlocks(m_pBWT, m_pRevBWT, &oblSuffixFwd, pOBOut); computeIrreducibleBlocks(m_pBWT, m_pRevBWT, &oblPrefixFwd, pOBOut); } else { pOBOut->splice(pOBOut->end(), oblSuffixFwd); pOBOut->splice(pOBOut->end(), oblPrefixFwd); } return result; } // Write overlap results to an ASQG file void OverlapAlgorithm::writeResultASQG(std::ostream& writer, const SeqRecord& read, const OverlapResult& result) const { ASQG::VertexRecord record(read.id, read.seq.toString()); record.setSubstringTag(result.isSubstring); record.write(writer); } // Write overlap blocks out to a file void OverlapAlgorithm::writeOverlapBlocks(std::ostream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const { // Write the header info size_t numBlocks = pList->size(); writer << readIdx << " " << isSubstring << " " << numBlocks << " "; //std::cout << readIdx << " " << isSubstring << " " << numBlocks << " "; //std::cout << " idx: " << count << " count: " << numBlocks << "\n"; for(OverlapBlockList::const_iterator iter = pList->begin(); iter != pList->end(); ++iter) { writer << *iter << " "; //std::cout << *iter << " "; } writer << "\n"; //std::cout << "\n"; } //JEREMIAH void OverlapAlgorithm::writeOverlapBlocks(std::stringstream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const { // Write the header info size_t numBlocks = pList->size(); writer << readIdx << " " << isSubstring << " " << numBlocks << " "; //std::cout << readIdx << " " << isSubstring << " " << numBlocks << " "; for(OverlapBlockList::const_iterator iter = pList->begin(); iter != pList->end(); ++iter) { writer << *iter << " "; //std::cout << *iter << " "; } writer << "\n"; //std::cout << "\n"; } // Calculate the ranges in pBWT that contain a prefix of at least minOverlap basepairs that // overlaps with a suffix of w. The ranges are added to the pOBList void OverlapAlgorithm::findOverlapBlocksExact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, int minOverlap, OverlapBlockList* pOverlapList, OverlapBlockList* pContainList, OverlapResult& result) const { // The algorithm is as follows: // We perform a backwards search using the FM-index for the string w. // As we perform the search we collect the intervals // of the significant prefixes (len >= minOverlap) that overlap w. BWTIntervalPair ranges; size_t l = w.length(); int start = l - 1; BWTAlgorithms::initIntervalPair(ranges, w[start], pBWT, pRevBWT); // Collect the OverlapBlocks for(size_t i = start - 1; i >= 1; --i) { // Compute the range of the suffix w[i, l] BWTAlgorithms::updateBothL(ranges, w[i], pBWT); int overlapLen = l - i; if(overlapLen >= minOverlap) { // Calculate which of the prefixes that match w[i, l] are terminal // These are the proper prefixes (they are the start of a read) BWTIntervalPair probe = ranges; BWTAlgorithms::updateBothL(probe, '$', pBWT); // The probe interval contains the range of proper prefixes if(probe.interval[1].isValid()) { assert(probe.interval[1].lower > 0); pOverlapList->push_back(OverlapBlock(probe, ranges, overlapLen, 0, af)); } } } // Determine if this sequence is contained and should not be processed further BWTAlgorithms::updateBothL(ranges, w[0], pBWT); // Ranges now holds the interval for the full-length read // To handle containments, we output the overlapBlock to the final overlap block list // and it will be processed later // Two possible containment cases: // 1) This read is a substring of some other read // 2) This read is identical to some other read // Case 1 is indicated by the existance of a non-$ left or right hand extension // In this case we return no alignments for the string AlphaCount64 left_ext = BWTAlgorithms::getExtCount(ranges.interval[0], pBWT); AlphaCount64 right_ext = BWTAlgorithms::getExtCount(ranges.interval[1], pRevBWT); if(left_ext.hasDNAChar() || right_ext.hasDNAChar()) { result.isSubstring = true; } else { BWTIntervalPair probe = ranges; BWTAlgorithms::updateBothL(probe, '$', pBWT); if(probe.isValid()) { // terminate the contained block and add it to the contained list BWTAlgorithms::updateBothR(probe, '$', pRevBWT); assert(probe.isValid()); pContainList->push_back(OverlapBlock(probe, ranges, w.length(), 0, af)); } } //OverlapBlockList containedWorkingList; //partitionBlockList(w.length(), &workingList, pOverlapList, &containedWorkingList); // Terminate the contained blocks //terminateContainedBlocks(containedWorkingList); // Move the contained blocks to the final contained list //pContainList->splice(pContainList->end(), containedWorkingList); return; } // Seeded blockwise BWT alignment of prefix-suffix for reads // Each alignment is given a seed region and a block region // The seed region is the terminal portion of w where maxDiff + 1 seeds are created // at least 1 of these seeds must align exactly for there to be an alignment with // at most maxDiff differences between the prefix/suffix. Only alignments within the // range [block_start, block_end] are output. The block_end coordinate is inclusive. bool OverlapAlgorithm::findOverlapBlocksInexact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, int minOverlap, OverlapBlockList* pOverlapList, OverlapBlockList* pContainList, OverlapResult& result) const { int len = w.length(); int overlap_region_left = len - minOverlap; SearchSeedVector* pCurrVector = new SearchSeedVector; SearchSeedVector* pNextVector = new SearchSeedVector; OverlapBlockList workingList; SearchSeedVector::iterator iter; // Create and extend the initial seeds int actual_seed_length = m_seedLength; int actual_seed_stride = m_seedStride; #ifdef DEBUGOVERLAP std::cout << "SeedLen: " << m_seedLength << " SeedStride: " << m_seedStride << std::endl; #endif if(actual_seed_length == 0) { // Calculate a seed length and stride that will guarantee all overlaps // with error rate m_errorRate will be found calculateSeedParameters(w, minOverlap, actual_seed_length, actual_seed_stride); } assert(actual_seed_stride != 0); createSearchSeeds(w, pBWT, pRevBWT, actual_seed_length, actual_seed_stride, pCurrVector); extendSeedsExactRight(w, pBWT, pRevBWT, ED_RIGHT, pCurrVector, pNextVector); pCurrVector->clear(); pCurrVector->swap(*pNextVector); assert(pNextVector->empty()); int num_steps = 0; // Perform the inexact extensions bool fail = false; while(!pCurrVector->empty()) { if(m_maxSeeds != -1 && (int)pCurrVector->size() > m_maxSeeds) { fail = true; break; } iter = pCurrVector->begin(); while(iter != pCurrVector->end()) { SearchSeed& align = *iter; // If the current aligned region is right-terminal // and the overlap is greater than minOverlap, try to find overlaps // or containments if(align.right_index == len - 1) { double align_error = align.calcErrorRate(); // Check for overlaps if(align.left_index <= overlap_region_left && isErrorRateAcceptable(align_error, m_errorRate)) { int overlapLen = len - align.left_index; BWTIntervalPair probe = align.ranges; BWTAlgorithms::updateBothL(probe, '$', pBWT); // The probe interval contains the range of proper prefixes if(probe.interval[1].isValid()) { assert(probe.interval[1].lower > 0); OverlapBlock nBlock(probe, align.ranges, overlapLen, align.z, af, align.historyLink->getHistoryVector()); workingList.push_back(nBlock); } } // Check for containments // If the seed is left-terminal and there are [ACGT] left/right extensions of the sequence // this read must be a substring of another read if(align.left_index == 0) { AlphaCount64 left_ext = BWTAlgorithms::getExtCount(align.ranges.interval[0], pBWT); AlphaCount64 right_ext = BWTAlgorithms::getExtCount(align.ranges.interval[1], pRevBWT); if(left_ext.hasDNAChar() || right_ext.hasDNAChar()) result.isSubstring = true; } } // Extend the seed to the right/left if(align.dir == ED_RIGHT) extendSeedInexactRight(align, w, pBWT, pRevBWT, pNextVector); else extendSeedInexactLeft(align, w, pBWT, pRevBWT, pNextVector); ++iter; //pCurrVector->erase(iter++); } pCurrVector->clear(); assert(pCurrVector->empty()); pCurrVector->swap(*pNextVector); // Remove identical seeds after we have performed seed_len steps // as there now might be redundant seeds if(num_steps % actual_seed_stride == 0) { std::sort(pCurrVector->begin(), pCurrVector->end(), SearchSeed::compareLeftRange); SearchSeedVector::iterator end_iter = std::unique(pCurrVector->begin(), pCurrVector->end(), SearchSeed::equalLeftRange); pCurrVector->resize(end_iter - pCurrVector->begin()); } ++num_steps; } if(!fail) { // parse the working list to remove any submaximal overlap blocks // these blocks correspond to reads that have multiple valid overlaps. // we only keep the longest removeSubMaximalBlocks(&workingList, pBWT, pRevBWT); OverlapBlockList containedWorkingList; partitionBlockList(len, &workingList, pOverlapList, &containedWorkingList); // Terminate the contained blocks terminateContainedBlocks(containedWorkingList); // Move the contained blocks to the final contained list pContainList->splice(pContainList->end(), containedWorkingList); } delete pCurrVector; delete pNextVector; return !fail; } // Build forward history for the blocks void OverlapAlgorithm::buildForwardHistory(OverlapBlockList* pList) const { OverlapBlockList terminalList; OverlapBlockList potentialContainedList; while(!pList->empty()) { // The terminalBlock list contains all the blocks that became right-terminal // in the current extension round. // Perform a single round of extension, any terminal blocks // are moved to the terminated list extendActiveBlocksRight(m_pBWT, m_pRevBWT, *pList, terminalList, potentialContainedList); } *pList = terminalList; pList->splice(pList->end(), potentialContainedList); } // Calculate the single right extension to the '$' for each the contained blocks // so that the interval ranges are consistent void OverlapAlgorithm::terminateContainedBlocks(OverlapBlockList& containedBlocks) const { for(OverlapBlockList::iterator iter = containedBlocks.begin(); iter != containedBlocks.end(); ++iter) BWTAlgorithms::updateBothR(iter->ranges, '$', iter->getExtensionBWT(m_pBWT, m_pRevBWT)); } // Calculate the seed length and stride to ensure that we will find all // all overlaps with error rate at most m_errorRate. // To overlap two reads allowing for d errors, we create d+1 seeds so that at least one seed will match // exactly. d is a function of the overlap length so we define the seed length using the minimum overlap // parameter. We then tile seeds across the read starting from the end such that for every overlap length // x, there are at least floor(x * error_rate) + 1 seeds. void OverlapAlgorithm::calculateSeedParameters(const std::string& w, const int minOverlap, int& seed_length, int& seed_stride) const { int read_len = w.length(); seed_length = 0; // The maximum possible number of differences occurs for a fully-aligned read int max_diff_high = static_cast(m_errorRate * read_len); // Calculate the seed length to use // If the error rate is so low that no differences are possible just seed // over the entire minOverlap region if(max_diff_high > 0) { // Calculate the maximum number of differences between two sequences that overlap // by minOverlap int max_diff_low = static_cast(m_errorRate * minOverlap); if(max_diff_low == 0) max_diff_low = 1; int seed_region_length = static_cast(ceil(max_diff_low / m_errorRate)); int num_seeds_low = max_diff_low + 1; seed_length = static_cast(seed_region_length / num_seeds_low); if(seed_length > static_cast(minOverlap)) seed_length = minOverlap; } else { seed_length = minOverlap; } seed_stride = seed_length; } // Create and intialize the search seeds int OverlapAlgorithm::createSearchSeeds(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, int seed_length, int seed_stride, SearchSeedVector* pOutVector) const { // Start a new chain of history links SearchHistoryLink rootLink = SearchHistoryNode::createRoot(); // The maximum possible number of differences occurs for a fully-aligned read int read_len = w.length(); int max_diff_high = static_cast(m_errorRate * read_len); // Start the seeds at the end of the read int seed_start = read_len - seed_length; while(seed_start >= 0) { SearchSeed seed; seed.left_index = seed_start; seed.right_index = seed_start; seed.dir = ED_RIGHT; seed.seed_len = seed_length; seed.z = 0; seed.maxDiff = max_diff_high; seed.historyLink = rootLink; // Initialize the left and right suffix array intervals char b = w[seed.left_index]; BWTAlgorithms::initIntervalPair(seed.ranges, b, pBWT, pRevBWT); pOutVector->push_back(seed); seed_start -= seed_stride; // Only create one seed in the exact case if(max_diff_high == 0) break; } return seed_length; } // Extend all the seeds in pInVector to the right over the entire seed range void OverlapAlgorithm::extendSeedsExactRightQueue(const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT, ExtendDirection /*dir*/, const SearchSeedVector* pInVector, SearchSeedQueue* pOutQueue) const { for(SearchSeedVector::const_iterator iter = pInVector->begin(); iter != pInVector->end(); ++iter) { SearchSeed align = *iter; bool valid = true; while(align.isSeed()) { ++align.right_index; char b = w[align.right_index]; BWTAlgorithms::updateBothR(align.ranges, b, pRevBWT); if(!align.isIntervalValid(RIGHT_INT_IDX)) { valid = false; break; } } if(valid) pOutQueue->push(align); } } // Extend all the seeds in pInVector to the right over the entire seed range void OverlapAlgorithm::extendSeedsExactRight(const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT, ExtendDirection /*dir*/, const SearchSeedVector* pInVector, SearchSeedVector* pOutVector) const { for(SearchSeedVector::const_iterator iter = pInVector->begin(); iter != pInVector->end(); ++iter) { SearchSeed align = *iter; bool valid = true; while(align.isSeed()) { ++align.right_index; char b = w[align.right_index]; BWTAlgorithms::updateBothR(align.ranges, b, pRevBWT); if(!align.isIntervalValid(RIGHT_INT_IDX)) { valid = false; break; } } //std::cout << "Initial seed: "; //align.print(w); if(valid) pOutVector->push_back(align); } } // void OverlapAlgorithm::extendSeedInexactRight(SearchSeed& seed, const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT, SearchSeedVector* pOutVector) const { // If this alignment has run all the way to the end of the sequence // switch it to be a left extension sequence if(seed.right_index == int(w.length() - 1)) { seed.dir = ED_LEFT; pOutVector->push_back(seed); return; } ++seed.right_index; if(!seed.allowMismatches()) { char b = w[seed.right_index]; BWTAlgorithms::updateBothR(seed.ranges, b, pRevBWT); if(seed.isIntervalValid(RIGHT_INT_IDX)) pOutVector->push_back(seed); } else { // Calculating the AlphaCounts is the heavy part of the computation so we cache // the value outside the loop, it is the same for all bases AlphaCount64 lower = pRevBWT->getFullOcc(seed.ranges.interval[1].lower - 1); AlphaCount64 upper = pRevBWT->getFullOcc(seed.ranges.interval[1].upper); for(int i = 0; i < 4; ++i) { char b = ALPHABET[i]; BWTIntervalPair probe = seed.ranges; BWTAlgorithms::updateBothR(probe, b, pRevBWT, lower, upper); if(probe.interval[RIGHT_INT_IDX].isValid()) { SearchSeed branched = seed; branched.ranges = probe; if(b != w[seed.right_index]) { ++branched.z; branched.historyLink = seed.historyLink->createChild(w.length() - seed.right_index, b); } pOutVector->push_back(branched); } } } } // void OverlapAlgorithm::extendSeedInexactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* /*pRevBWT*/, SearchSeedVector* pOutVector) const { //printf("ProcessingLEFT: "); align.print(w); --seed.left_index; if(seed.left_index >= 0) { if(!seed.allowMismatches()) { // Extend exact char b = w[seed.left_index]; BWTAlgorithms::updateBothL(seed.ranges, b, pBWT); if(seed.isIntervalValid(LEFT_INT_IDX)) pOutVector->push_back(seed); } else { // Calculating the AlphaCounts is the heavy part of the computation so we cache // the value outside the loop, it is the same for all bases AlphaCount64 lower = pBWT->getFullOcc(seed.ranges.interval[0].lower - 1); AlphaCount64 upper = pBWT->getFullOcc(seed.ranges.interval[0].upper); for(int i = 0; i < 4; ++i) { char b = ALPHABET[i]; BWTIntervalPair probe = seed.ranges; BWTAlgorithms::updateBothL(probe, b, pBWT, lower, upper); if(probe.interval[LEFT_INT_IDX].isValid()) { SearchSeed branched = seed; branched.ranges = probe; if(b != w[seed.left_index]) { ++branched.z; // The history coordinates are wrt the right end of the read // so that each position corresponds to the length of the overlap // including that position branched.historyLink = seed.historyLink->createChild(w.length() - seed.left_index, b); //branched.history.add(w.length() - seed.left_index, b); } pOutVector->push_back(branched); } } } } } // Extend the seed to the right, return true if the seed is still a valid range bool OverlapAlgorithm::extendSeedExactRight(SearchSeed& seed, const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT) const { // If this alignment has run all the way to the end of the sequence // switch it to be a left extension sequence if(seed.right_index == int(w.length() - 1)) { seed.dir = ED_LEFT; return true; } ++seed.right_index; char b = w[seed.right_index]; BWTAlgorithms::updateBothR(seed.ranges, b, pRevBWT); if(seed.isIntervalValid(RIGHT_INT_IDX)) return true; else return false; } // bool OverlapAlgorithm::extendSeedExactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* /*pRevBWT*/) const { --seed.left_index; if(seed.left_index >= 0) { char b = w[seed.left_index]; BWTAlgorithms::updateBothL(seed.ranges, b, pBWT); if(seed.isIntervalValid(LEFT_INT_IDX)) return true; else return false; } else { return false; } } // Calculate the irreducible blocks from the vector of OverlapBlocks void OverlapAlgorithm::computeIrreducibleBlocks(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList* pOBList, OverlapBlockList* pOBFinal) const { // processIrreducibleBlocks requires the pOBList to be sorted in descending order pOBList->sort(OverlapBlock::sortSizeDescending); #ifdef DEBUGOVERLAP std::cout << " m_exactModeIrreducible " << m_exactModeIrreducible << "\n"; #endif if(m_exactModeIrreducible) _processIrreducibleBlocksExactIterative(pBWT, pRevBWT, *pOBList, pOBFinal); else _processIrreducibleBlocksInexact(pBWT, pRevBWT, *pOBList, pOBFinal); pOBList->clear(); } // iterate through obList and determine the overlaps that are irreducible. This function is recursive. // The final overlap blocks corresponding to irreducible overlaps are written to pOBFinal. // Invariant: the blocks are ordered in descending order of the overlap size so that the longest overlap is first. // Invariant: each block corresponds to the same extension of the root sequence w. void OverlapAlgorithm::_processIrreducibleBlocksExactIterative(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& inList, OverlapBlockList* pOBFinal) const { if(inList.empty()) return; // We store the overlap blocks in groups of blocks that have the same right-extension. // When a branch is found, the groups are split based on the extension typedef std::list BlockGroups; BlockGroups blockGroups; blockGroups.push_back(inList); int numExtensions = 0; int numBranches = 0; while(!blockGroups.empty()) { // Perform one extenion round for each group. // If the top-level block has ended, push the result // to the final list and remove the group from processing BlockGroups::iterator groupIter = blockGroups.begin(); BlockGroups incomingGroups; // Branched blocks are placed here while(groupIter != blockGroups.end()) { OverlapBlockList& currList = *groupIter; bool bEraseGroup = false; // Count the extensions in the top level (longest) blocks first int topLen = currList.front().overlapLen; AlphaCount64 ext_count; OBLIter blockIter = currList.begin(); while(blockIter != currList.end() && blockIter->overlapLen == topLen) { ext_count += blockIter->getCanonicalExtCount(pBWT, pRevBWT); ++blockIter; } // Three cases: // 1) The top level block has ended as it contains the extension $. Output TLB and end. // 2) There is a singular unique extension base for all the blocks. Update the blocks and continue. // 3) There are multiple extension bases, split the block group and continue. // If some block other than the TLB ended, it must be contained within the TLB and it is not output // or considered further. // Likewise if multiple distinct strings in the TLB ended, we only output the top one. The rest // must have the same sequence as the top one and are hence considered to be contained with the top element. #ifdef DEBUGOVERLAP std::cout << "ext_gcount.get($) " << ext_count.get('$') << "\n"; #endif if(ext_count.get('$') > 0) { // An irreducible overlap has been found. It is possible that there are two top level blocks // (one in the forward and reverse direction). Since we can't decide which one // contains the other at this point, we output hits to both. Under a fixed // length string assumption one will be contained within the other and removed later. OBLIter tlbIter = currList.begin(); while(tlbIter != currList.end() && tlbIter->overlapLen == topLen) { // Ensure the tlb is actually terminal and not a substring block AlphaCount64 test_count = tlbIter->getCanonicalExtCount(pBWT, pRevBWT); if(test_count.get('$') == 0) { std::cerr << "Error: substring read found during overlap computation.\n"; std::cerr << "Please run sga rmdup before sga overlap\n"; exit(EXIT_FAILURE); } // Perform the final right-update to make the block terminal OverlapBlock branched = *tlbIter; BWTAlgorithms::updateBothR(branched.ranges, '$', branched.getExtensionBWT(pBWT, pRevBWT)); pOBFinal->push_back(branched); #ifdef DEBUGOVERLAP std::cout << "[IE] TLB of length " << branched.overlapLen << " has ended\n"; std::cout << "[IE]\tBlock data: " << branched << "\n"; #endif ++tlbIter; } // Set the flag to erase this group, it is finished bEraseGroup = true; } else { // Count the extension for the rest of the blocks while(blockIter != currList.end()) { ext_count += blockIter->getCanonicalExtCount(pBWT, pRevBWT); ++blockIter; } if(ext_count.hasUniqueDNAChar()) { // Update all the blocks using the unique extension character // This character is in the canonical representation wrt to the query char b = ext_count.getUniqueDNAChar(); updateOverlapBlockRangesRight(pBWT, pRevBWT, currList, b); numExtensions++; bEraseGroup = false; } else { for(size_t idx = 0; idx < DNA_ALPHABET_SIZE; ++idx) { char b = ALPHABET[idx]; if(ext_count.get(b) > 0) { numBranches++; OverlapBlockList branched = currList; updateOverlapBlockRangesRight(pBWT, pRevBWT, branched, b); incomingGroups.push_back(branched); bEraseGroup = true; } } } } if(bEraseGroup) groupIter = blockGroups.erase(groupIter); else ++groupIter; } // Splice in the newly branched blocks, if any blockGroups.splice(blockGroups.end(), incomingGroups); } } // Classify the blocks in obList as irreducible, transitive or substrings. The irreducible blocks are // put into pOBFinal. The remaining are discarded. // Invariant: the blocks are ordered in descending order of the overlap size so that the longest overlap is first. void OverlapAlgorithm::_processIrreducibleBlocksInexact(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& activeList, OverlapBlockList* pOBFinal) const { if(activeList.empty()) return; #ifdef DEBUGOVERLAP std::cout << " activeList.size() " << activeList.size() << "\n"; #endif // The activeList contains all the blocks that are not yet right terminal // Count the extensions in the top level (longest) blocks first bool all_eliminated = false; while(!activeList.empty() && !all_eliminated) { // The terminalBlock list contains all the blocks that became right-terminal // in the current extension round. OverlapBlockList terminalList; OverlapBlockList potentialContainedList; // Perform a single round of extension, any terminal blocks // are moved to the terminated list extendActiveBlocksRight(pBWT, pRevBWT, activeList, terminalList, potentialContainedList); // Compare the blocks in the contained list against the other terminal and active blocks // If they are a substring match to any of these, discard them OverlapBlockList::iterator containedIter = potentialContainedList.begin(); for(; containedIter != potentialContainedList.end(); ++containedIter) { if(!isBlockSubstring(*containedIter, terminalList, m_errorRate) && !isBlockSubstring(*containedIter, activeList, m_errorRate)) { // Not a substring, move to terminal list terminalList.push_back(*containedIter); //std::cout << "Contained block kept: " << containedIter->overlapLen << "\n"; } else { //std::cout << "Contained block found and removed: " << containedIter->overlapLen << "\n"; } } // Using the terminated blocks, mark as eliminated any active blocks // that form a valid overlap to the terminal block. These are transitive edges // We do not compare two terminal blocks, we don't consider these overlaps to be // transitive #ifdef DEBUGOVERLAP std::cout << " terminalList.sizee() " << terminalList.size() << "\n"; #endif OverlapBlockList::iterator terminalIter = terminalList.begin(); for(; terminalIter != terminalList.end(); ++terminalIter) { #ifdef DEBUGOVERLAP std::cout << "[II] ***TLB of length " << terminalIter->overlapLen << " has ended\n"; #endif all_eliminated = true; OverlapBlockList::iterator activeIter = activeList.begin(); for(; activeIter != activeList.end(); ++activeIter) { if(activeIter->isEliminated) continue; // skip previously marked blocks // Two conditions must be met for a block to be transitive wrt terminal: // 1) It must have a strictly shorter overlap than the terminal block // 2) The error rate between the block and terminal must be less than the threshold double inferredErrorRate = calculateBlockErrorRate(*terminalIter, *activeIter); if(activeIter->overlapLen < terminalIter->overlapLen && isErrorRateAcceptable(inferredErrorRate, m_errorRate)) { #ifdef DEBUGOVERLAP_2 std::cout << "Marking block of length " << activeIter->overlapLen << " as eliminated\n"; #endif activeIter->isEliminated = true; } else { all_eliminated = false; } } // Move this block to the final list if it has not been previously marked eliminated if(!terminalIter->isEliminated) { #ifdef DEBUGOVERLAP std::cout << "[II] Adding block " << *terminalIter << " to final list\n"; //std::cout << " extension: " << terminalIter->forwardHistory << "\n"; #endif pOBFinal->push_back(*terminalIter); } } } activeList.clear(); } // Extend all the blocks in activeList by one base to the right // Move all right-terminal blocks to the termainl list. If a block // is terminal and potentially contained by another block, add it to // containedList void OverlapAlgorithm::extendActiveBlocksRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& activeList, OverlapBlockList& terminalList, OverlapBlockList& /*containedList*/) const { OverlapBlockList::iterator iter = activeList.begin(); OverlapBlockList::iterator next; while(iter != activeList.end()) { next = iter; ++next; // Check if block is terminal AlphaCount64 ext_count = iter->getCanonicalExtCount(pBWT, pRevBWT); if(ext_count.get('$') > 0) { // Only consider this block to be terminal irreducible if it has at least one extension // or else it is a substring block if(iter->forwardHistory.size() > 0) { OverlapBlock branched = *iter; BWTAlgorithms::updateBothR(branched.ranges, '$', branched.getExtensionBWT(pBWT, pRevBWT)); terminalList.push_back(branched); #ifdef DEBUGOVERLAP_2 std::cout << "Block of length " << iter->overlapLen << " moved to terminal\n"; #endif } } int curr_extension = iter->forwardHistory.size(); // Perform the right extensions // Best case, there is only a single extension character // Handle this case specially so we don't need to copy the potentially // large OverlapBlock structure and its full history if(ext_count.hasUniqueDNAChar()) { // Get the extension character with respect to the queried sequence char canonical_base = ext_count.getUniqueDNAChar(); // Flip the base into the frame of reference for the block char block_base = iter->flags.isQueryComp() ? complement(canonical_base) : canonical_base; // Update the block using the base in its frame of reference BWTAlgorithms::updateBothR(iter->ranges, block_base, iter->getExtensionBWT(pBWT, pRevBWT)); // Add the base to the history in the frame of reference of the query read // This is so the history is consistent when comparing between blocks from different strands iter->forwardHistory.add(curr_extension, canonical_base); } else { for(size_t idx = 0; idx < DNA_ALPHABET_SIZE; ++idx) { char canonical_base = ALPHABET[idx]; char block_base = iter->flags.isQueryComp() ? complement(canonical_base) : canonical_base; if(ext_count.get(canonical_base) == 0) continue; // Branch the sequence. This involves copying the entire history which can be large // if the input sequences are very long. This could be avoided by using the SearchHistoyNode/Link // structure but branches are infrequent enough to not have a large impact OverlapBlock branched = *iter; BWTAlgorithms::updateBothR(branched.ranges, block_base, branched.getExtensionBWT(pBWT, pRevBWT)); assert(branched.ranges.isValid()); // Add the base in the canonical frame branched.forwardHistory.add(curr_extension, canonical_base); // Insert the new block after the iterator activeList.insert(iter, branched); } // Remove the original block, which has been superceded by the branches activeList.erase(iter); } iter = next; // this skips the newly-inserted blocks } } // Return true if the terminalBlock is a substring of any member of blockList bool OverlapAlgorithm::isBlockSubstring(OverlapBlock& terminalBlock, const OverlapBlockList& blockList, double maxER) const { OverlapBlockList::const_iterator iter = blockList.begin(); size_t right_extension_length = terminalBlock.forwardHistory.size(); for(; iter != blockList.end(); ++iter) { if(terminalBlock.overlapLen == iter->overlapLen && right_extension_length == iter->forwardHistory.size()) { continue; // same length, cannot be a substring } // Calculate error rate between blocks double er = calculateBlockErrorRate(terminalBlock, *iter); if(isErrorRateAcceptable(er, maxER)) return true; } return false; } // Calculate the error rate between two overlap blocks using their history double OverlapAlgorithm::calculateBlockErrorRate(const OverlapBlock& terminalBlock, const OverlapBlock& otherBlock) const { int back_max = std::min(terminalBlock.overlapLen, otherBlock.overlapLen); int backwards_diff = SearchHistoryVector::countDifferences(terminalBlock.backHistory, otherBlock.backHistory, back_max); // We compare the forward (right) extension only up to the last position of the terminated block's extension int forward_len = terminalBlock.forwardHistory.size(); int forward_max = forward_len - 1; int forward_diff = SearchHistoryVector::countDifferences(terminalBlock.forwardHistory, otherBlock.forwardHistory, forward_max); // Calculate the length of the inferred overlap int trans_overlap_length = back_max + forward_len; double er = static_cast(backwards_diff + forward_diff) / trans_overlap_length; #ifdef DEBUGOVERLAP_2 std::cout << "OL: " << terminalBlock.overlapLen << "\n"; std::cout << "TLB BH: " << terminalBlock.backHistory << "\n"; std::cout << "TB BH: " << otherBlock.backHistory << "\n"; std::cout << "TLB FH: " << terminalBlock.forwardHistory << "\n"; std::cout << "TB FH: " << otherBlock.forwardHistory << "\n"; std::cout << "BM: " << back_max << " FM: " << forward_max << "\n"; std::cout << "IOL: " << trans_overlap_length << " TD: " << (backwards_diff + forward_diff) << "\n"; std::cout << "Block of length " << otherBlock.overlapLen << " has ier: " << er << "\n"; #endif return er; } // Update the overlap block list with a righthand extension to b, removing ranges that become invalid void OverlapAlgorithm::updateOverlapBlockRangesRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, char canonical_base) const { OverlapBlockList::iterator iter = obList.begin(); while(iter != obList.end()) { char relative_base = iter->flags.isQueryComp() ? complement(canonical_base) : canonical_base; BWTAlgorithms::updateBothR(iter->ranges, relative_base, iter->getExtensionBWT(pBWT, pRevBWT)); // remove the block from the list if its no longer valid if(!iter->ranges.isValid()) { iter = obList.erase(iter); } else { // Add the base to the extension history int currExtension = iter->forwardHistory.size(); iter->forwardHistory.add(currExtension, canonical_base); ++iter; } } } ================================================ FILE: src/SGA/Algorithm/OverlapAlgorithm.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // OverlapAlgorithm - This class implements all the logic // for finding and outputting overlaps for sequence reads // #ifndef OVERLAPALGORITHM_H #define OVERLAPALGORITHM_H // be explicit because there are two bwt.h (in bwa) and BWT.h (in SGA) #include "SuffixTools/BWT.h" #include "OverlapBlock.h" #include "SearchSeed.h" #include "BWTAlgorithms.h" #include "Util.h" enum OverlapMode { OM_OVERLAP, OM_FULLREAD }; struct OverlapResult { OverlapResult() : isSubstring(false), searchAborted(false) {} bool isSubstring; bool searchAborted; }; class OverlapAlgorithm { public: OverlapAlgorithm(const BWT* pBWT, const BWT* pRevBWT, double er, int seedLen, int seedStride, bool irrOnly, int maxSeeds = -1) : m_pBWT(pBWT), m_pRevBWT(pRevBWT), m_errorRate(er), m_seedLength(seedLen), m_seedStride(seedStride), m_bIrreducible(irrOnly), m_exactModeOverlap(false), m_exactModeIrreducible(false), m_maxSeeds(maxSeeds) {} // Perform the overlap // This function is threaded so everything must be const OverlapResult overlapRead(const SeqRecord& read, int minOverlap, OverlapBlockList* pOutList) const; // Perform an irreducible overlap OverlapResult overlapReadExact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const; // Find duplicate blocks for this read OverlapResult alignReadDuplicate(const SeqRecord& read, OverlapBlockList* pOBOut) const; // Perform an inexact overlap OverlapResult overlapReadInexact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const; // Write the result of an overlap to an ASQG file void writeResultASQG(std::ostream& writer, const SeqRecord& read, const OverlapResult& result) const; // Write all the overlap blocks pList to the filehandle void writeOverlapBlocks(std::ostream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const; void writeOverlapBlocks(std::stringstream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const; //JEREMIAH // Build the forward history structures for the blocks void buildForwardHistory(OverlapBlockList* pList) const; // Set flag to use exact-match algorithms only void setExactModeOverlap(bool b) { m_exactModeOverlap = b; } void setExactModeIrreducible(bool b) { m_exactModeIrreducible = b; } // const BWT* getBWT() const { return m_pBWT; } const BWT* getRBWT() const { return m_pRevBWT; } private: // Calculate the ranges in pBWT that contain a prefix of at least minOverlap basepairs that // overlaps with a suffix of w. void findOverlapBlocksExact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, const int minOverlap, OverlapBlockList* pOBTemp, OverlapBlockList* pOBFinal, OverlapResult& result) const; // Same as above while allowing mismatches bool findOverlapBlocksInexact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, const int minOverlap, OverlapBlockList* pOBList, OverlapBlockList* pOBFinal, OverlapResult& result) const; // inline bool extendSeedExactRight(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT) const; inline bool extendSeedExactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT) const; inline void branchSeedRight(const SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedQueue* pQueue) const; inline void branchSeedLeft(const SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedQueue* pQueue) const; // inline void extendSeedInexactRight(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedVector* pOutVector) const; // inline void extendSeedInexactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedVector* pOutVector) const; // inline void calculateSeedParameters(const std::string& w, const int minOverlap, int& seed_length, int& seed_stride) const; // inline int createSearchSeeds(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, int seed_length, int seed_stride, SearchSeedVector* pOutVector) const; // inline void extendSeedsExactRightQueue(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, ExtendDirection dir, const SearchSeedVector* pInVector, SearchSeedQueue* pOutQueue) const; // inline void extendSeedsExactRight(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, ExtendDirection dir, const SearchSeedVector* pInVector, SearchSeedVector* pOutVector) const; // Calculate the terminal extension for the contained blocks to make the intervals consistent void terminateContainedBlocks(OverlapBlockList& containedBlocks) const; // // Irreducible-only processing algorithms // // Reduce the block list pOBList by removing blocks that correspond to transitive edges void computeIrreducibleBlocks(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList* pOBList, OverlapBlockList* pOBFinal) const; // these recursive functions do the actual work of computing the irreducible blocks void _processIrreducibleBlocksExact(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, OverlapBlockList* pOBFinal) const; void _processIrreducibleBlocksExactIterative(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& inList, OverlapBlockList* pOBFinal) const; // void _processIrreducibleBlocksInexact(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, OverlapBlockList* pOBFinal) const; // Update the overlap block list with a righthand extension to b, removing ranges that become invalid void updateOverlapBlockRangesRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, char b) const; // void extendActiveBlocksRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& activeList, OverlapBlockList& terminalList, OverlapBlockList& containedList) const; double calculateBlockErrorRate(const OverlapBlock& terminalBlock, const OverlapBlock& otherBlock) const; bool isBlockSubstring(OverlapBlock& terminalBlock, const OverlapBlockList& blockList, double maxER) const; // Data const BWT* m_pBWT; const BWT* m_pRevBWT; double m_errorRate; int m_seedLength; int m_seedStride; bool m_bIrreducible; bool m_exactModeOverlap; bool m_exactModeIrreducible; // Optional parameter to limit the amount of branching that is performed int m_maxSeeds; }; #endif ================================================ FILE: src/SGA/Algorithm/OverlapBlock.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // OverlapBlock - Data structures holding // the result of the alignment of a sequence read // to a BWT // #include "OverlapBlock.h" #include "BWTAlgorithms.h" //#define DEBUG_RESOLVE 1 // OverlapBlock::OverlapBlock(BWTIntervalPair r, BWTIntervalPair rawI, int ol, int nd, const AlignFlags& af, const SearchHistoryVector& backHist) : ranges(r), rawRanges(rawI), overlapLen(ol), numDiff(nd), flags(af), isEliminated(false), backHistory(backHist) { backHistory.normalize(af.isQueryComp()); } // Return a pointer to the BWT that should be used to extend the block // this is the opposite BWT that was used in the backwards search const BWT* OverlapBlock::getExtensionBWT(const BWT* pBWT, const BWT* pRevBWT) const { if(!flags.isTargetRev()) return pRevBWT; else return pBWT; } // AlphaCount64 OverlapBlock::getCanonicalExtCount(const BWT* pBWT, const BWT* pRevBWT) const { AlphaCount64 out = BWTAlgorithms::getExtCount(ranges.interval[1], getExtensionBWT(pBWT, pRevBWT)); if(flags.isQueryComp()) out.complement(); return out; } // Returns 0 if the BWT used for the overlap step was the forward BWT int OverlapBlock::getCanonicalIntervalIndex() const { if(!flags.isTargetRev()) return 0; else return 1; } // BWTInterval OverlapBlock::getCanonicalInterval() const { return ranges.interval[getCanonicalIntervalIndex()]; } // Get the string corresponding to the overlap block. This is the string found // during the backwards search std::string OverlapBlock::getOverlapString(const std::string& original) const { std::string transformed = backHistory.transform(original, flags.isQueryRev()); // If the query was reversed, we take the first overlapLen (the search // was from the front of the sequence) otherwise we take the last overlapLen if(flags.isQueryRev()) return transformed.substr(0, overlapLen); else return transformed.substr(transformed.length() - overlapLen); } // Get the full string corresponding to this overlapblock using the forward history std::string OverlapBlock::getFullString(const std::string& original) const { std::string str = getOverlapString(original); std::string history = forwardHistory.getBaseString(); if(history.empty() && overlapLen != (int)original.size()) { WARN_ONCE("getFullString() called on block with no history") } /* std::cout << "OVERLAP: " << str << "\n"; std::cout << "HIST: " << history << "\n"; std::cout << "QREV: " << flags.isQueryRev() << "\n"; std::cout << "RC: " << flags.isReverseComplement() << "\n"; std::cout << "QC: " << flags.isQueryComp() << "\n"; */ if(!flags.isQueryRev()) { str.append(history); } else { history = reverse(history); history.append(str); str.swap(history); } if(flags.isReverseComplement()) str = reverseComplement(str); return str; } EdgeDir OverlapBlock::getEdgeDir() const { if(flags.isQueryRev()) return ED_ANTISENSE; else return ED_SENSE; } // Overlap OverlapBlock::toOverlap(const std::string queryID, const std::string targetID, int queryLen, int targetLen) const { // Compute the sequence coordinates int s1 = queryLen - overlapLen; int e1 = s1 + overlapLen - 1; SeqCoord sc1(s1, e1, queryLen); int s2 = 0; // The start of the second hit must be zero by definition of a prefix/suffix match int e2 = s2 + overlapLen - 1; SeqCoord sc2(s2, e2, targetLen); // The coordinates are always with respect to the read, so flip them if // we aligned to/from the reverse of the read if(flags.isQueryRev()) { sc1.flip(); } if(flags.isTargetRev()) { sc2.flip(); } bool isRC = flags.isReverseComplement(); Overlap o(queryID, sc1, targetID, sc2, isRC, numDiff); return o; } // std::string OverlapBlock::toCanonicalID() const { std::stringstream ss; int ci = getCanonicalIntervalIndex(); ss << "IDX-" << ranges.interval[ci].lower; return ss.str(); } // void printBlockList(const OverlapBlockList* pList) { for(OverlapBlockList::const_iterator i = pList->begin(); i != pList->end(); ++i) { std::cout << "Block: " << *i << "\n"; } } // void removeSubMaximalBlocks(OverlapBlockList* pList, const BWT* pBWT, const BWT* pRevBWT) { // This algorithm removes any sub-maximal OverlapBlocks from pList // The list is sorted by the left coordinate and iterated through // if two adjacent blocks overlap they are split into maximal contiguous regions // with resolveOverlap. The resulting list is merged back into pList. This process // is repeated until each block in pList is a unique range // The bookkeeping in the intersecting case could be more efficient // but the vast vast majority of the cases will not have overlapping // blocks. pList->sort(OverlapBlock::sortIntervalLeft); OverlapBlockList::iterator iter = pList->begin(); OverlapBlockList::iterator last = pList->end(); --last; while(iter != pList->end()) { OverlapBlockList::iterator next = iter; ++next; if(next == pList->end()) break; // Check if iter and next overlap if(Interval::isIntersecting(iter->ranges.interval[0].lower, iter->ranges.interval[0].upper, next->ranges.interval[0].lower, next->ranges.interval[0].upper)) { OverlapBlockList resolvedList = resolveOverlap(*iter, *next, pBWT, pRevBWT); // Merge the new elements in and start back from the beginning of the list pList->erase(iter); pList->erase(next); pList->merge(resolvedList, OverlapBlock::sortIntervalLeft); iter = pList->begin(); //std::cout << "After splice: \n"; //printList(pList); } else { ++iter; } } } // A tracing interval maps an interval of an overlap block representing // a smaller overlap to an overlap block with a larger overlap. This is // used to determine which intervals are redundant and can be removed. struct TracingInterval { int64_t foundPosForward; int64_t sourcePosReverse; BWTInterval tracing; BWTIntervalPair updateRanges; }; typedef std::list TracingIntervalList; // In rare cases, the overlap blocks may represent sub-maximal overlaps between reads // we need to distinguish these cases and remove the sub-optimal hits. This // function splits two overlapping OverlapBlocks into up to three distinct // blocks, keeping the maximal (longest) overlap at each stage. OverlapBlockList resolveOverlap(const OverlapBlock& A, const OverlapBlock& B, const BWT* pBWT, const BWT* pRevBWT) { OverlapBlockList outList; // Check if A and B have the same overlap length, if so they must be // identical blocks (resulting from different seeds) and we can remove one if(A.overlapLen == B.overlapLen) { if(A.ranges.interval[0].lower == B.ranges.interval[0].lower && A.ranges.interval[0].upper == B.ranges.interval[0].upper) { outList.push_back(A); return outList; } else { std::cerr << "Error in resolveOverlap: Overlap blocks with same length do not " "the have same coordinates\n"; assert(false); } } // A and B must have different overlap lengths assert(A.overlapLen != B.overlapLen); // Determine which of A and B have a higher overlap const OverlapBlock* pHigher; const OverlapBlock* pLower; if(A.overlapLen > B.overlapLen) { pHigher = &A; pLower = &B; } else { pHigher = &B; pLower = &A; } // Complicated logic follows // We always want the entirity of the block with the longer // overlap so it is added to outList unmodified outList.push_back(*pHigher); // The lower block can be split into up to two pieces: // Case 1: // Lower ------ // Higher ------ // Result --- // // Case 2: // Lower ----------- // Higher ------ // Result --- -- // // Case 3: // Lower ------ // Higher ------ // Result (empty set) // It is unclear whether case 2 can happen in reality but we handle it // here anyway. Further complicating matters is that the BWTIntervalPair // keeps track of both the BWT coordinates for the backwards search // and forward search and we must take care to ensure that both intervals // are updated and the mapping between them is correct. We do this // by calculating the new forward interval using interval intersections // and directly recalculating the coordinate of the reverse interval // OverlapBlock split = *pLower; // Left-hand split if( (pLower->ranges.interval[0].lower < pHigher->ranges.interval[0].lower) || (pLower->ranges.interval[0].upper > pHigher->ranges.interval[0].upper) ) { // The intervals do not perfectly overlap and must be recalculated. // We start from the raw intervals in the lower block (the intervals representing // overlaps that are not capped by '$' symbols) and search backwards through the // bwt until the start of the sequence has been found. This maps the source reverse // index position to the forward index position. We can then decide which intervals // are redundant and can be removed. // // If the index has duplicates, it is possible that a given source reverse position // will map to multiple forward positions. To handle this case, we record the used // forward positions in a std::map so we can lookup the next lowest index that is available. // // A better algorithm (that doesn't required so many interval calculations) probably exists // but this case is very rare so simplicity wins here. // #ifdef DEBUG_RESOLVE std::cout << "LOWER -- capped: " << pLower->ranges << "\n"; std::cout << "LOWER -- raw: " << pLower->rawRanges << "\n"; std::cout << "HIGHER -- capped: " << pHigher->ranges << "\n"; std::cout << "HIGHER -- raw: " << pHigher->rawRanges << "\n"; #endif std::map usedMap; // Remap every reverse position to a forward position TracingIntervalList tracingList; int64_t j = pLower->ranges.interval[1].lower; while(j <= pLower->ranges.interval[1].upper) { TracingInterval ti; ti.sourcePosReverse = j; ti.tracing.lower = j; ti.tracing.upper = j; ti.updateRanges = pLower->rawRanges; bool done = false; while(!done) { char trace_base = pRevBWT->getChar(ti.tracing.lower); if(trace_base == '$') { BWTAlgorithms::updateBothL(ti.updateRanges, '$', pBWT); done = true; } BWTAlgorithms::updateInterval(ti.tracing, trace_base, pRevBWT); BWTAlgorithms::updateBothR(ti.updateRanges, trace_base, pRevBWT); } if(ti.updateRanges.interval[0].lower == ti.updateRanges.interval[0].upper) { // This read is not duplicated ti.foundPosForward = ti.updateRanges.interval[0].lower; } else { // This read is duplicated, look up its value in the map int64_t basePos = ti.updateRanges.interval[0].lower; if(usedMap.find(basePos) != usedMap.end()) { // Use the value in the map and update it ti.foundPosForward = usedMap[basePos]; assert(ti.foundPosForward > ti.updateRanges.interval[0].lower && ti.foundPosForward <= ti.updateRanges.interval[0].upper); usedMap[basePos]++; } else { // Use the base value and initialize the map ti.foundPosForward = basePos; usedMap[basePos] = basePos + 1; } } ++j; tracingList.push_back(ti); } // Reset the mapping between blocks std::list retainedIntervals; TracingIntervalList::iterator tracingIter = tracingList.begin(); while(tracingIter != tracingList.end()) { // Check if the forward position intersects the higher block, if so this block // is redundant and can be removed. if(!Interval::isIntersecting(tracingIter->foundPosForward, tracingIter->foundPosForward, pHigher->ranges.interval[0].lower, pHigher->ranges.interval[0].upper)) { BWTIntervalPair retained; retained.interval[0].lower = tracingIter->foundPosForward; retained.interval[0].upper = tracingIter->foundPosForward; retained.interval[1].lower = tracingIter->sourcePosReverse; retained.interval[1].upper = tracingIter->sourcePosReverse; #ifdef DEBUG_RESOLVE std::cout << "Retained coords: " << retained << "\n"; #endif retainedIntervals.push_back(retained); } ++tracingIter; } // Write out the final blocks std::list::iterator iter = retainedIntervals.begin(); while(iter != retainedIntervals.end()) { #ifdef DEBUG_RESOLVE std::cout << "OUTPUT: " << *iter << "\n"; #endif split.ranges = *iter; // Sanity check assert(split.ranges.interval[0].size() == split.ranges.interval[1].size()); assert(split.ranges.interval[0].isValid()); assert(split.ranges.interval[1].isValid()); outList.push_back(split); ++iter; } } // Sort the outlist by left coordinate outList.sort(OverlapBlock::sortIntervalLeft); return outList; } // Partition the overlap block list into two lists, // one for the containment overlaps and one for the proper overlaps void partitionBlockList(int readLen, OverlapBlockList* pCompleteList, OverlapBlockList* pOverlapList, OverlapBlockList* pContainList) { OverlapBlockList::iterator iter = pCompleteList->begin(); while(iter != pCompleteList->end()) { if(iter->overlapLen == readLen) pContainList->splice(pContainList->end(), *pCompleteList, iter++); else pOverlapList->splice(pOverlapList->end(), *pCompleteList, iter++); } } // Filter out full-length (containment) overlaps from the block list void removeContainmentBlocks(int readLen, OverlapBlockList* pList) { OverlapBlockList::iterator iter = pList->begin(); while(iter != pList->end()) { if(iter->overlapLen == readLen) iter = pList->erase(iter); else ++iter; } } // MultiOverlap blockListToMultiOverlap(const SeqRecord& record, OverlapBlockList& blockList) { std::string read_idx = record.id; std::string read_seq = record.seq.toString(); std::string qual = record.qual; MultiOverlap out(read_idx, read_seq, qual); for(OverlapBlockList::iterator iter = blockList.begin(); iter != blockList.end(); ++iter) { std::string overlap_string = iter->getOverlapString(read_seq); // Compute the endpoints of the overlap int s1 = read_seq.length() - iter->overlapLen; int e1 = s1 + iter->overlapLen - 1; SeqCoord sc1(s1, e1, read_seq.length()); int s2 = 0; // The start of the second hit must be zero by definition of a prefix/suffix match int e2 = s2 + iter->overlapLen - 1; SeqCoord sc2(s2, e2, overlap_string.length()); // The coordinates are always with respect to the read, so flip them if // we aligned to/from the reverse of the read if(iter->flags.isQueryRev()) sc1.flip(); if(iter->flags.isTargetRev()) sc2.flip(); bool isRC = false; // since we transformed the original sequence, they are never RC if(sc1.isContained()) continue; // skip containments // Add an overlap for each member of the block for(int64_t i = iter->ranges.interval[0].lower; i <= iter->ranges.interval[0].upper; ++i) { Overlap o(read_idx, sc1, makeIdxString(i), sc2, isRC, -1); out.add(overlap_string, o); } } return out; } // make an id string from a read index std::string makeIdxString(int64_t idx) { std::stringstream ss; ss << idx; return ss.str(); } ================================================ FILE: src/SGA/Algorithm/OverlapBlock.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // OverlapBlock - Data structures holding // the result of the alignment of a sequence read // to a BWT // #ifndef OVERLAPBLOCK_H #define OVERLAPBLOCK_H #include "BWTInterval.h" #include "SearchHistory.h" #include "BitChar.h" #include "SuffixTools/BWT.h" #include "SearchHistory.h" #include "GraphCommon.h" #include "MultiOverlap.h" // Flags indicating how a given read was aligned to the FM-index // Used for internal bookkeeping struct AlignFlags { public: AlignFlags() {} AlignFlags(bool qr, bool tr, bool qc) { setQueryRev(qr); setTargetRev(tr); setQueryComp(qc); } bool isQueryRev() const { return data.test(QUERYREV_BIT); } bool isTargetRev() const { return data.test(TARGETREV_BIT); } bool isQueryComp() const { return data.test(QUERYCOMP_BIT); } // Returns true if the relationship between the query and target is reverse complement bool isReverseComplement() const { return isTargetRev() != isQueryRev(); } friend std::ostream& operator<<(std::ostream& out, const AlignFlags& af) { out << af.data; return out; } friend std::istream& operator>>(std::istream& in, AlignFlags& af) { in >> af.data; return in; } void write(std::ostream& out) { data.write(out); } void read(std::istream& in) { data.read(in); } private: void setQueryRev(bool b) { data.set(QUERYREV_BIT, b); } void setTargetRev(bool b) { data.set(TARGETREV_BIT, b); } void setQueryComp(bool b) { data.set(QUERYCOMP_BIT, b); } static const uint8_t QUERYREV_BIT = 0; static const uint8_t TARGETREV_BIT = 1; static const uint8_t QUERYCOMP_BIT = 2; BitChar data; }; // A BWTInterval pair and associated alignment data struct OverlapBlock { OverlapBlock() {} OverlapBlock(BWTIntervalPair r, BWTIntervalPair rawI, int ol, int nd, const AlignFlags& af) : ranges(r), rawRanges(rawI), overlapLen(ol), numDiff(nd), flags(af), isEliminated(false) {} OverlapBlock(BWTIntervalPair r, BWTIntervalPair rawI, int ol, int nd, const AlignFlags& af, const SearchHistoryVector& backHist); // Returns the string that corresponds to this overlap block. // This is constructed by transforming the original string using the back // history while correcting for the reverse-complement searches std::string getOverlapString(const std::string& original) const; // Get the full string that is indicated by this overlap // The overlap cannot be a containment and it must have a // forward extension history. The returned string is the string // of the actual read that forms the overlap with original. In other words // it might not be the same strand as the original read. std::string getFullString(const std::string& original) const; // Return a pointer to the BWT that should be used to extend the block // this is the opposite BWT that was used in the backwards search const BWT* getExtensionBWT(const BWT* pBWT, const BWT* pRevBWT) const; // Return the spectrum of extensions given by the interval in ranges // The counts are given in the canonical frame, which means that // if the query string was reversed, we flip the counts AlphaCount64 getCanonicalExtCount(const BWT* pBWT, const BWT* pRevBWT) const; // Return the index of the interval corresponding to the frame of // reference for the original read int getCanonicalIntervalIndex() const; // Return the canonical interval. BWTInterval getCanonicalInterval() const; // Return the direction of the edge that this overlap block describes EdgeDir getEdgeDir() const; // Construct an overlap record from this overlap block Overlap toOverlap(const std::string queryID, const std::string targetID, int queryLen, int targetLen) const; // Construct an ID string describing this overlap block std::string toCanonicalID() const; // Comparison operator, compare by lower coordinate of 0 friend bool operator<(const OverlapBlock& a, const OverlapBlock& b) { return a.ranges.interval[0].lower < b.ranges.interval[0].lower; } static bool sortSizeDescending(const OverlapBlock& ob1, const OverlapBlock& ob2) { return ob1.overlapLen > ob2.overlapLen; } static bool sortIntervalLeft(const OverlapBlock& ob1, const OverlapBlock& ob2) { return ob1.ranges.interval[0].lower < ob2.ranges.interval[0].lower; } // I/O friend std::ostream& operator<<(std::ostream& out, const OverlapBlock& obl) { out << obl.ranges << " " << obl.rawRanges << " " << obl.overlapLen << " " << obl.numDiff << " " << obl.flags; return out; } friend std::istream& operator>>(std::istream& in, OverlapBlock& obl) { in >> obl.ranges >> obl.rawRanges >> obl.overlapLen >> obl.numDiff >> obl.flags; return in; } // Data // The ranges member holds the suffix array interval of the overlapping // string + the terminating $ symbol. This allows us to either find the extension // of the overlap (using the reverse interval) or lookup the index of the read. BWTIntervalPair ranges; // The raw interval of the overlap, not capped with '$' symbols is required // to recompute the forward/reverse intervals if two overlap blocks intersect. // This can happen when two reads/sequences have multiple possible overlaps BWTIntervalPair rawRanges; int overlapLen; int numDiff; AlignFlags flags; bool isEliminated; // The sequence of divergent bases during the backward and forward search steps SearchHistoryVector backHistory; SearchHistoryVector forwardHistory; }; // Collections typedef std::list OverlapBlockList; typedef OverlapBlockList::iterator OBLIter; // Global Functions void printBlockList(const OverlapBlockList* pList); // Ensure all the overlap blocks in the list are distinct void removeSubMaximalBlocks(OverlapBlockList* pList, const BWT* pBWT, const BWT* pRevBWT); // Given the overlapping blocks A and B, construct a list of blocks where the index ranges do not intersect OverlapBlockList resolveOverlap(const OverlapBlock& A, const OverlapBlock& B, const BWT* pBWT, const BWT* pRevBWT); // Partition the overlap block list into two lists, // one for the containment overlaps and one for the proper overlaps void partitionBlockList(int readLen, OverlapBlockList* pCompleteList, OverlapBlockList* pOverlapList, OverlapBlockList* pContainList); // Remove containment blocks from the list void removeContainmentBlocks(int readLen, OverlapBlockList* pList); // Convert an overlap block list into a multiple overlap MultiOverlap blockListToMultiOverlap(const SeqRecord& record, OverlapBlockList& blockList); // std::string makeIdxString(int64_t idx); #endif ================================================ FILE: src/SGA/Algorithm/OverlapTools.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // OverlapTools - Wrapper for the overlap machinery // to perform an overlap computation for two strings // #include "OverlapTools.h" #include "SuffixArray.h" //#define DPOVERLAPPRINT 1 // Find a suffix of s1 that matches a prefix of s2 with minimal edit distance bool OverlapTools::boundedOverlapDP(const std::string& s1, const std::string& s2, int minOverlap, int maxOverlap, double maxErrorRate, Match& outMatch) { const size_t MAX_REGION_LENGTH = 500; // do not try to align strings that are longer than this number if(s1.empty() || s2.empty()) return false; if(maxOverlap > (int)MAX_REGION_LENGTH) { std::cerr << "Maximum requested overlap " << maxOverlap << " is larger than search limit (" << MAX_REGION_LENGTH << "), not aligning\n"; return false; } // The dynamic programming is too heavy to compute matches for very large strings // so we only try to align the ends of s1 and s2 up to MAX_REGION_LENGTH bases. size_t sublen = min3(maxOverlap, s1.size(), s2.size()); if(sublen > MAX_REGION_LENGTH) return false; std::string sub1 = s1.substr(s1.size() - sublen); std::string sub2 = s2.substr(0, sublen); DPAlignment dpAlign(sub1, sub2, DPM_OVERLAP, DPSS_SIMILARITY); Match match; bool validMatch = findBestOverlapByScore(sub1, sub2, minOverlap, maxErrorRate, dpAlign, match); if(validMatch) { // If we are matching a substring of both s1 and s2, and the match // is a containment (one string was completely matched) we call the // match invalid. if(match.isContainment() && sublen < s1.size() && sublen < s2.size()) { return false; } else { // A valid match has been found which is maximal // Expand the matches to the coordinates of s1 and s2 and return int s1_add = s1.size() - sublen; match.coord[0].interval.start += s1_add; match.coord[0].interval.end += s1_add; match.coord[0].seqlen = s1.size(); match.coord[1].seqlen = s2.size(); #ifdef DPOVERLAPPRINT match.printMatch(s1, s2); #endif outMatch = match; return true; } } else { return false; } } // bool OverlapTools::findBestOverlapByScore(const std::string& s1, const std::string& s2, int minOverlap, double maxErrorRate, const DPAlignment& dpAlign, Match& outMatch) { assert(dpAlign.getScoringScheme() == DPSS_SIMILARITY); // The last row of the table holds the edit distance for the prefix-suffix overlaps of S1 // Iterate over this row and calculate the length and edit % of each overlap int overlapRowIdx = dpAlign.getNumRows() - 1; int numCols = dpAlign.getNumColumns(); int bestOverlapLen = -1; int bestScore = 0; for(int j = minOverlap; j < numCols; ++j) { int overlapLen = j; // Do not allow overlaps to end with insertions // For example, this case is a valid alignment but would be disallowed: // S1 AGTACATTTACA-- // S2 ACATTTACATA // This is an overlap of length 11 but the "true" overlap is only 9 bases // Under a reasonable scoring system this should not happen DPOperation lastOp = dpAlign.getPathOperationToCell(s1, s2, overlapRowIdx, j); if(lastOp != DPO_INSERT) { int score = dpAlign.getScore(overlapRowIdx,j); if(score > bestScore) { // A higher scoring overlap has been found. Make sure that it is valid // by checking that the error rate and overlap length are within the expected // counts and that the coordinates are extreme w.r.t both sequences int i_match = 0; int num_edits = 0; DPPath overlapPath = dpAlign.calculatePath(s1, s2, overlapRowIdx, overlapLen); for(DPPath::iterator iter = overlapPath.begin(); iter != overlapPath.end(); ++iter) { if(iter->j == 0 && iter->i > i_match) i_match = iter->i; // Count the mismatches but don't count deletions in the first column which are "free" if(iter->op != DPO_MATCH && !(iter->j == 0 && iter->op == DPO_DELETE)) ++num_edits; } Match currMatch; currMatch.isReverse = false; currMatch.coord[0].interval.start = i_match; currMatch.coord[0].interval.end = overlapRowIdx - 1; // match coords are inclusive currMatch.coord[0].seqlen = s1.size(); currMatch.coord[1].interval.start = 0; currMatch.coord[1].interval.end = overlapLen - 1; currMatch.coord[1].seqlen = s2.size(); currMatch.setNumDiffs(num_edits); double errorRate = (double)num_edits / currMatch.getMinOverlapLength(); bool isValid = errorRate < maxErrorRate && currMatch.getMinOverlapLength() >= minOverlap && currMatch.coord[0].isExtreme() && currMatch.coord[1].isExtreme(); if(isValid) { bestOverlapLen = overlapLen; bestScore = score; outMatch = currMatch; } } /* std::cout << "\n"; dpAlign.printAlignment(s1, s2, overlapRowIdx, j); std::cout << "OL: " << overlapLen << "\n"; std::cout << "LO: " << (int)lastOp << " ED: " << score << "\n"; */ } } if(bestOverlapLen > 0) { #ifdef DPOVERLAPPRINT std::cout << "\nBest overlap: " << bestOverlapLen << "\n"; dpAlign.printAlignment(s1, s2, overlapRowIdx, bestOverlapLen); outMatch.printMatch(s1, s2); #endif return true; } else { return false; } } ================================================ FILE: src/SGA/Algorithm/OverlapTools.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // OverlapTools - Wrapper for the overlap machinery // to perform an overlap computation for two strings // #ifndef OVERLAPTOOLS_H #define OVERLAPTOOLS_H #include "Match.h" #include "DPAlignment.h" #include namespace OverlapTools { // Datatypes typedef std::vector IntVector; typedef std::vector DPMatrix; //typedef EditDistanceScoring DPScoring; typedef SimilarityScoring DPScoring; // Find a match between s1 and s2 using a dynamic programming alignment // This is something of a heavy function and the longest possible match must be provided // If there is a match between minOverlap and maxOverlap with edit distance less than maxErrorRate, it will be returned. // If there are multiple valid matches like this, the highest scoring match will be returned under the DPSS_SIMILARITY // scoring scheme. If true is returned, a valid match has been found and outMatch is filled in appropriately. // This function should not be used to find overlaps greater than 500bp bool boundedOverlapDP(const std::string& s1, const std::string& s2, int minOverlap, int maxOverlap, double maxErrorRate, Match& outMatch); // Find the best overlap using the dpAlign structure. Returns true // if a valid overlap has been found and fills in the match structure bool findBestOverlapByScore(const std::string& s1, const std::string& s2, int minOverlap, double maxErrorRate, const DPAlignment& dpAlign, Match& outMatch); }; #endif ================================================ FILE: src/SGA/Algorithm/QCProcess.cpp ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // QCProcess - Process to perform quality checks // for a sequence work item // #include "QCProcess.h" #include "BWTAlgorithms.h" // struct KmerWindow { int64_t getCount(bool bothStrand) const { int64_t fwdCount = (fwdIntervals.interval[0].isValid()) ? fwdIntervals.interval[0].size() : 0; int64_t rcCount = (rcIntervals.interval[0].isValid()) ? rcIntervals.interval[0].size() : 0; if (bothStrand) return std::min(fwdCount,rcCount); else return fwdCount + rcCount; } int start; int end; BWTIntervalPair fwdIntervals; BWTIntervalPair rcIntervals; bool isInitialized; }; // // // QCProcess::QCProcess(QCParameters params) : m_params(params) { } // QCProcess::~QCProcess() { } // QCResult QCProcess::process(const SequenceWorkItem& workItem) { QCResult result; if(m_params.checkDuplicates) { DuplicateCheckResult dupCheckResult = performDuplicateCheck(workItem); if(!m_params.substringOnly) result.dupPassed = dupCheckResult == DCR_UNIQUE; else result.dupPassed = dupCheckResult != DCR_SUBSTRING; } else { result.dupPassed = true; } // Only perform the more expensive k-mer test if the dup check succeeded if(m_params.checkKmer && result.dupPassed) result.kmerPassed = performKmerCheck(workItem); else result.kmerPassed = true; if(result.kmerPassed && result.dupPassed && m_params.checkHPRuns) result.hpPassed = performHomopolymerCheck(workItem); else result.hpPassed = true; if(m_params.checkDegenerate && result.dupPassed && result.kmerPassed && result.hpPassed) result.degenPassed = performDegenerateCheck(workItem); else result.degenPassed = true; return result; } bool QCProcess::performKmerCheck(const SequenceWorkItem& workItem) { // Perform a k-mer filter on the read // Each k-mer must be seen at least m times for the read to be kept // Naively, this would required k*(l - k + 1) calls to the BWT // if each k-mer was computed independently. We improve this by performing // a two-stage test. If the kmer k_i is seen at least m times, we extend // it by one base. If this k+1-mer is also seen at least m times, it implies // that the kmer k_(i+1) is also seen at least m times so it does not need // to be recomputed. If the (k+1)-mer is seen less than m times, we recompute // kmer k_(i+1) as a final check. Using this optimistic algorithm (checking // longer kmers than is required) is significantly faster. QCResult result; std::string w = workItem.read.seq.toString(); // Ensure the read is longer than the k-mer length if((int)w.size() < m_params.kmerLength) return false; int k = m_params.kmerLength; int n = w.size(); int nk = n - k + 1; int threshold = m_params.kmerThreshold; // Are all kmers in the read well-represented? bool allSolid = true; int i = 0; KmerWindow window; window.start = 0; window.end = 0; window.isInitialized = false; while(i < nk) { // Determine whether the kmer at position i // has been seen more than m times. if(window.isInitialized) { // Extend the current window by 1 base // to see if the spanning larger // kmer is seen more than m times. // If so, we don't need to check this kmer // individually int next = window.end + k; assert(next < (int)w.size()); char b = w[next]; char cb = complement(b); if(window.fwdIntervals.interval[0].isValid()) BWTAlgorithms::updateBothR(window.fwdIntervals, b, m_params.pRevBWT); if(window.rcIntervals.interval[1].isValid()) BWTAlgorithms::updateBothR(window.rcIntervals, cb, m_params.pBWT); int64_t count = window.getCount(m_params.kmerBothStrand); if(count <= threshold) { // The extended kmer didn't meet the threshold // recompute the interval for this kmer window.isInitialized = false; } else { window.end += 1; } } if(!window.isInitialized) { // initialize the window by computing the // BWTIntervals for the kmer starting at // i and its reverse complement char b = w[i]; char cb = complement(b); BWTAlgorithms::initIntervalPair(window.fwdIntervals, b, m_params.pBWT, m_params.pRevBWT); BWTAlgorithms::initIntervalPair(window.rcIntervals, cb, m_params.pRevBWT, m_params.pBWT); for(int j = i + 1; j < i + k; ++j) { // Update intervals rightwards b = w[j]; cb = complement(b); if(window.fwdIntervals.interval[0].isValid()) BWTAlgorithms::updateBothR(window.fwdIntervals, b, m_params.pRevBWT); if(window.rcIntervals.interval[1].isValid()) BWTAlgorithms::updateBothR(window.rcIntervals, cb, m_params.pBWT); } // record the start/end indices of the kmers spanned by this position window.start = i; window.end = i; window.isInitialized = true; } // Check the count of this interval int64_t count = window.getCount(m_params.kmerBothStrand); if(count <= threshold) { allSolid = false; break; } else { i += 1; } } return allSolid; } // Perform duplicate check // Look up the interval of the read in the BWT. If the index of the read DuplicateCheckResult QCProcess::performDuplicateCheck(const SequenceWorkItem& workItem) { assert(m_params.pSharedBV != NULL); std::string w = workItem.read.seq.toString(); std::string rc_w = reverseComplement(w); // Look up the interval of the sequence and its reverse complement BWTIntervalPair fwdIntervals = BWTAlgorithms::findIntervalPair(m_params.pBWT, m_params.pRevBWT, w); BWTIntervalPair rcIntervals = BWTAlgorithms::findIntervalPair(m_params.pBWT, m_params.pRevBWT, rc_w); // Check if this read is a substring of any other // This is indicated by the presence of a non-$ extension in the left or right direction AlphaCount64 fwdECL = BWTAlgorithms::getExtCount(fwdIntervals.interval[0], m_params.pBWT); AlphaCount64 fwdECR = BWTAlgorithms::getExtCount(fwdIntervals.interval[1], m_params.pRevBWT); AlphaCount64 rcECL = BWTAlgorithms::getExtCount(rcIntervals.interval[0], m_params.pBWT); AlphaCount64 rcECR = BWTAlgorithms::getExtCount(rcIntervals.interval[1], m_params.pRevBWT); if(fwdECL.hasDNAChar() || fwdECR.hasDNAChar() || rcECL.hasDNAChar() || rcECR.hasDNAChar()) { // Substring reads are always removed so no need to update the bit vector return DCR_SUBSTRING; } // Calculate the lexicographic intervals for the fwd and reverse intervals BWTAlgorithms::updateBothL(fwdIntervals, '$', m_params.pBWT); BWTAlgorithms::updateBothL(rcIntervals, '$', m_params.pBWT); // Calculate the canonical index for this string - the lowest // value in the two lexicographic index assert(fwdIntervals.interval[0].isValid() || rcIntervals.interval[0].isValid()); int64_t fi = fwdIntervals.interval[0].isValid() ? fwdIntervals.interval[0].lower : std::numeric_limits::max(); int64_t ri = rcIntervals.interval[0].isValid() ? rcIntervals.interval[0].lower : std::numeric_limits::max(); int64_t canonicalIdx = std::min(fi, ri); // Check if the bit reprsenting the canonical index is set in the shared bit vector if(!m_params.pSharedBV->test(canonicalIdx)) { // This read is not a duplicate // Attempt to atomically set the bit from false to true if(m_params.pSharedBV->updateCAS(canonicalIdx, false, true)) { // Call succeed, return that this read is not a duplicate return DCR_UNIQUE; } else { // Call failed, some other thread set the bit before // this thread. Return that the reead is a duplicate return DCR_FULL_LENGTH_DUPLICATE; } } else { // this read is duplicate return DCR_FULL_LENGTH_DUPLICATE; } } // Perform homopolymer filter bool QCProcess::performHomopolymerCheck(const SequenceWorkItem& item) { std::string w = item.read.seq.toString(); size_t k = m_params.hpKmerLength; // Skip if the read length is less than the kmer size // used for this test if(w.size() < k) return true; size_t maxRunLength = 0; size_t maxRunStart = 0; // Count the longest homopolymer run in the read size_t currRunStart = 0; size_t currRunLength = 1; char prev = w[0]; char runChar = prev; for(size_t i = 1; i < w.size(); ++i) { if(w[i] == prev) currRunLength += 1; if(w[i] != prev || i == w.size() - 1) { if(currRunLength > maxRunLength) { maxRunLength = currRunLength; maxRunStart = currRunStart; runChar = prev; } currRunLength = 1; prev = w[i]; currRunStart = i; } } // If the run length is above the threshold, find // the frequency of the covering k-mer and k-mers with // different lengths of the homopolymer if(maxRunLength >= m_params.hpMinLength && maxRunLength < k / 2) { // Extract the kmer covering this run int hprMiddle = maxRunStart + (maxRunLength / 2); int estimatedKmerStart = hprMiddle - (k / 2); int trueKmerStart = estimatedKmerStart; // If the calculated start position of the covering k-mer //is before the start of the read, or past the end, shift it if(estimatedKmerStart < 0) trueKmerStart = 0; if(estimatedKmerStart + k > w.size()) trueKmerStart = w.size() - k; std::string prefix = w.substr(trueKmerStart, maxRunStart - trueKmerStart); std::string suffix = w.substr(maxRunStart + maxRunLength, trueKmerStart + k - (maxRunStart + maxRunLength)); // Do not attempt this check if we do not have enough context preceding or following the HPR if(prefix.size() < m_params.hpMinContext || suffix.size() < m_params.hpMinContext) return true; size_t highestCountLength = 0; size_t highestCount = 0; size_t actualCount = 0; for(size_t l = maxRunLength - 2; l <= maxRunLength + 2; ++l) { std::string composite = prefix + std::string(l, runChar) + suffix; size_t count = BWTAlgorithms::countSequenceOccurrences(composite, m_params.pBWT); if(l == maxRunLength) actualCount = count; if(count > highestCount) { highestCount = count; highestCountLength = l; } } double proportion = (double)actualCount / (double)highestCount; if(highestCountLength == maxRunLength || actualCount >= m_params.hpHardAcceptCount || proportion >= m_params.hpMinProportion) { return true; } else { if(m_params.verbose > 0) { printf("Read failed homopolymer filter %s\n", w.c_str()); printf("Filtered read with poly-%c run. DL: %zu DC: %zu. AL: %zu AC: %zu P: %lf\n", runChar, highestCountLength, highestCount, maxRunLength, actualCount, proportion); } return false; } } return true; } // Check if sequence is composed of predominantely a single base // Returns true if the sequence is not degenrate bool QCProcess::performDegenerateCheck(const SequenceWorkItem& item) { std::string w = item.read.seq.toString(); AlphaCount64 bc; for(size_t i = 0; i < w.size(); ++i) { bc.increment(w[i]); } size_t maxCount = bc.getMaxCount(); double prop = (double)maxCount / w.size(); if(prop > m_params.degenProportion) { if(m_params.verbose > 0) std::cout << "Read " << w << " failed degenerate filter\n"; return false; } return true; } // // // QCPostProcess::QCPostProcess(std::ostream* pCorrectedWriter, std::ostream* pDiscardWriter) : m_pCorrectedWriter(pCorrectedWriter), m_pDiscardWriter(pDiscardWriter), m_readsKept(0), m_readsDiscarded(0), m_readsFailedKmer(0), m_readsFailedDup(0), m_readsFailedHP(0), m_readsFailedDegen(0) { } // QCPostProcess::~QCPostProcess() { std::cout << "Reads kept: " << m_readsKept << "\n"; std::cout << "Reads discarded: " << m_readsDiscarded << "\n"; std::cout << "Reads failed kmer check: " << m_readsFailedKmer << "\n"; std::cout << "Reads failed duplicate check: " << m_readsFailedDup << "\n"; std::cout << "Reads failed homopolymer check: " << m_readsFailedHP << "\n"; std::cout << "Reads failed degenerate check: " << m_readsFailedDegen << "\n"; } // void QCPostProcess::process(const SequenceWorkItem& item, const QCResult& result) { SeqRecord record = item.read; if(result.kmerPassed && result.dupPassed && result.hpPassed && result.degenPassed) { record.write(*m_pCorrectedWriter); ++m_readsKept; } else { // To be able to rebuild the index after discarding the read, we need to write // the rank of the string (its position in the original read file into the read name) std::stringstream newID; newID << item.read.id << ",seqrank=" << item.idx; record.id = newID.str(); record.write(*m_pDiscardWriter); ++m_readsDiscarded; if(!result.kmerPassed) m_readsFailedKmer += 1; else if(!result.dupPassed) m_readsFailedDup += 1; else if(!result.hpPassed) m_readsFailedHP += 1; else if(!result.degenPassed) m_readsFailedDegen += 1; } } ================================================ FILE: src/SGA/Algorithm/QCProcess.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // QCProcess - Process to perform quality checks // for a sequence work item // #ifndef QCPROCESS_H #define QCPROCESS_H #include "Util.h" #include "BWT.h" #include "SequenceProcessFramework.h" #include "SequenceWorkItem.h" #include "BitVector.h" // Parameters struct QCParameters { QCParameters() { setDefaults(); } // Set reasonable default values for the qc filters void setDefaults() { checkDuplicates = true; checkKmer = true; kmerBothStrand = false; checkHPRuns = true; checkDegenerate = true; verbose = 0; pBWT = NULL; pRevBWT = NULL; pSharedBV = NULL; kmerLength = 27; kmerThreshold = 2; hpHardAcceptCount = 10; hpMinProportion = 0.1f; hpKmerLength = 51; hpMinLength = 6; hpMinContext = 5; degenProportion = 0.90; } const BWT* pBWT; const BWT* pRevBWT; BitVector* pSharedBV; // Control parameters bool checkDuplicates; bool checkKmer; bool kmerBothStrand; bool checkHPRuns; bool checkDegenerate; bool substringOnly; int verbose; // // Kmer frequency filtering parameters // int kmerLength; int kmerThreshold; // // Homopolymer filter parameters // // The length a run must be to trigger filtering size_t hpMinLength; // If the k-mer covering the HP run is seen // at least this many times, it is accepted size_t hpHardAcceptCount; // The hp run length in the read must be // at least this fraction of the dominant // run length to be kept double hpMinProportion; // The context k-mer length for the homopolymer // filter. size_t hpKmerLength; // The minimum amount of sequence around the homopolymer // to trigger filtering size_t hpMinContext; // // Degenerate filter parameters // // If the most frequent base in the read // makes up more than this proportion, the read // is discarded double degenProportion; }; // Results object class QCResult { public: QCResult() : kmerPassed(false), dupPassed(false), hpPassed(false), degenPassed(false) {} bool kmerPassed; bool dupPassed; bool hpPassed; bool degenPassed; }; enum DuplicateCheckResult { DCR_UNIQUE, DCR_SUBSTRING, DCR_FULL_LENGTH_DUPLICATE }; // Perform quality checks on the input stream of reads class QCProcess { public: QCProcess(QCParameters params); ~QCProcess(); QCResult process(const SequenceWorkItem& item); // Discard reads with low-frequency kmers bool performKmerCheck(const SequenceWorkItem& item); // Discard reads that are identical to, or a substring of, some other read DuplicateCheckResult performDuplicateCheck(const SequenceWorkItem& item); // Check whether the sequence has a homopolymer sequencing error. This // check finds a kmer covering a homopolymer run then modifies it to check // for a shorter/longer run of higher frequency bool performHomopolymerCheck(const SequenceWorkItem& item); // Check if the sequence read is degenerate // A degenerate read is define to be reads consisting almost // entirely of a single nucleotide bool performDegenerateCheck(const SequenceWorkItem& item); private: const QCParameters m_params; }; // Write the results from the overlap step to an ASQG file class QCPostProcess { public: QCPostProcess(std::ostream* pCorrectedWriter, std::ostream* pDiscardWriter); ~QCPostProcess(); void process(const SequenceWorkItem& item, const QCResult& result); private: std::ostream* m_pCorrectedWriter; std::ostream* m_pDiscardWriter; size_t m_readsKept; size_t m_readsDiscarded; size_t m_readsFailedKmer; size_t m_readsFailedDup; size_t m_readsFailedHP; size_t m_readsFailedDegen; }; #endif ================================================ FILE: src/SGA/Algorithm/ReadCluster.cpp ================================================ ///----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ReadCluster - Generate a cluster of overlapping // reads using the FM-index // #include "ReadCluster.h" // ReadCluster::ReadCluster(const OverlapAlgorithm* pOverlapper, int minOverlap) : m_pOverlapper(pOverlapper), m_minOverlap(minOverlap), m_pLimitKmers(NULL), m_limitK(0) { } // void ReadCluster::setLimitKmers(const std::set* pLimitKmers, size_t limitK) { m_pLimitKmers = pLimitKmers; m_limitK = limitK; } // Add a seed read to the cluster. Overlaps will be found for // each seed read to grow the cluster ClusterNode ReadCluster::addSeed(const std::string& sequence, bool bCheckInIndex) { // Check if this read is a substring SeqRecord tempRecord; tempRecord.id = "cluster-seed"; tempRecord.seq = sequence; OverlapBlockList tempBlockList; OverlapResult overlapResult = m_pOverlapper->alignReadDuplicate(tempRecord, &tempBlockList); if(overlapResult.isSubstring) { // If bCheckInIndex is true, then we are extending clusters from reads that are in the FM-index // In this case, seeding a substring read is an error and we abort. If the seed is NOT in the index // we just emit a warning and ignore the seed if(bCheckInIndex) { std::cerr << "Error: The seed used for sga-cluster-extend is a substring of some read.\n"; std::cerr << "Please run sga rmdup before cluster\n"; std::cerr << "Sequence: " << sequence << "\n"; exit(1); } else { std::cerr << "Warning: The cluster sequence to extend is a substring of some read. This seed is being skipped\n"; std::cerr << "Sequence: " << sequence << "\n"; ClusterNode emptyNode; // Set an invalid interval emptyNode.interval.lower = 0; emptyNode.interval.upper = -1; return emptyNode; } } // Find the interval in the fm-index containing the read const BWT* pBWT = m_pOverlapper->getBWT(); BWTInterval readInterval = BWTAlgorithms::findInterval(pBWT, sequence); BWTAlgorithms::updateInterval(readInterval, '$', pBWT); // When building primary clusters, we require each read to be in the index. if(bCheckInIndex) { if(!readInterval.isValid()) { std::cerr << "sga cluster error: The seed read is not part of the FM-index.\n"; exit(EXIT_FAILURE); } } ClusterNode node; node.sequence = sequence; node.interval = readInterval; node.isReverseInterval = false; m_usedIndex.insert(readInterval.lower); m_queue.push(node); return node; } // Run the cluster process. If the number of total nodes // exceeds max, abort the search. void ReadCluster::run(size_t max_size, int max_iterations) { int iteration = 0; do { // Perform one iteration of extending each sequence in the queue ClusterNodeQueue next_queue; bool aborted = false; // Have we performed enough iterations? if(max_iterations > 0 && iteration++ > max_iterations) aborted = true; while(!aborted && !m_queue.empty()) { if(m_queue.size() + m_outCluster.size() > max_size) { // Abort the search m_outCluster.clear(); aborted = true; break; } ClusterNode node = m_queue.front(); m_queue.pop(); // Add this node to the output m_outCluster.push_back(node); // If we are using limit kmers, only try to extend this sequence if it does not contain a limit kmer bool extend_read = canExtendRead(node); if(!extend_read) continue; // Find overlaps for the current node SeqRecord tempRecord; tempRecord.id = "cluster"; tempRecord.seq = node.sequence; OverlapBlockList blockList; m_pOverlapper->overlapRead(tempRecord, m_minOverlap, &blockList); // Parse each member of the block list and potentially expand the cluster for(OverlapBlockList::const_iterator iter = blockList.begin(); iter != blockList.end(); ++iter) { // Check if the reads in this block are part of the cluster already BWTInterval canonicalInterval = iter->getCanonicalInterval(); int64_t canonicalIndex = canonicalInterval.lower; if(m_usedIndex.count(canonicalIndex) == 0) { // This is a new node that isn't in the cluster. Add it. m_usedIndex.insert(canonicalIndex); ClusterNode newNode; newNode.sequence = iter->getFullString(node.sequence); newNode.interval = canonicalInterval; newNode.isReverseInterval = iter->flags.isTargetRev(); next_queue.push(newNode); } } } // Clear the queue if(aborted) { while(!m_queue.empty()) m_queue.pop(); } else { // Swap the reads to extend in the next iteration m_queue = next_queue; } } while(!m_queue.empty()); } // Check if the given node contains a kmer that we stop extension at. // Returns true if we can extend the cluster using the given node bool ReadCluster::canExtendRead(const ClusterNode& node) const { // No limiting kmers if(m_pLimitKmers == NULL) return true; // Node too short if(node.sequence.size() < m_limitK) return false; size_t nk = node.sequence.size() - m_limitK + 1; for(size_t i = 0; i < nk; ++i) { std::string kmer = node.sequence.substr(i, m_limitK); if(m_pLimitKmers->find(kmer) != m_pLimitKmers->end()) return false; // this read contains a limiting kmer // check reverse complement too kmer = reverseComplement(kmer); if(m_pLimitKmers->find(kmer) != m_pLimitKmers->end()) return false; // this read contains a limiting kmer } return true; } // ClusterNodeVector ReadCluster::getOutput() const { // Sort the intervals into ascending order and remove any duplicate intervals (which can occur // if the subgraph has a simple cycle) ClusterNodeVector retVector = m_outCluster; std::sort(retVector.begin(), retVector.end(), ClusterNode::compare); std::vector::iterator newEnd = std::unique(retVector.begin(), retVector.end(), ClusterNode::equal); retVector.erase(newEnd, retVector.end()); return retVector; } ================================================ FILE: src/SGA/Algorithm/ReadCluster.h ================================================ ///----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ReadCluster - Generate a cluster of overlapping // reads using the FM-index // #ifndef READCLUSTER_H #define READCLUSTER_H #include "Util.h" #include "OverlapAlgorithm.h" // A node in the queue of reads to use to expand the cluster struct ClusterNode { std::string sequence; int64_t fwdCanonicalID; BWTInterval interval; bool isReverseInterval; static inline bool compare(const ClusterNode& a, const ClusterNode& b) { return BWTInterval::compare(a.interval, b.interval); } static inline bool equal(const ClusterNode& a, const ClusterNode& b) { return BWTInterval::equal(a.interval, b.interval); } }; typedef std::queue ClusterNodeQueue; typedef std::vector ClusterNodeVector; typedef std::set ClusterIntervalSet; // class ReadCluster { public: // ReadCluster(const OverlapAlgorithm* pOverlapper, int minOverlap); // To avoid extending the cluster through repetitive sequence, the extension // process can optionally take in kmers that we use to block extension. If a // read contains a kmer in this set, we do not extend the cluster using the read. void setLimitKmers(const std::set* pLimitKmers, size_t limitK); // Add a new sequence to extend the cluster from ClusterNode addSeed(const std::string& sequence, bool bCheckInIndex); // Run the cluster process. If the number of total nodes // exceeds max, abort the search. void run(size_t max_size, int max_iterations); // ClusterNodeVector getOutput() const; private: // Check if the sequence of the given node contains a limit kmer, which blocks extension bool canExtendRead(const ClusterNode& node) const; ClusterNodeQueue m_queue; const OverlapAlgorithm* m_pOverlapper; int m_minOverlap; const std::set* m_pLimitKmers; size_t m_limitK; ClusterNodeVector m_outCluster; ClusterIntervalSet m_usedIndex; }; #endif ================================================ FILE: src/SGA/Algorithm/SearchHistory.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL // // SearchHistory - data structures to track // the history of a FM-index search // //----------------------------------------------- #include "SearchHistory.h" #include #include // // Link // SearchHistoryLink::SearchHistoryLink() : pNode(NULL) { } // SearchHistoryLink::SearchHistoryLink(SearchHistoryNode* ptr) : pNode(ptr) { if(pNode != NULL) pNode->increment(); } // We need to handle the copy constructor and the assignment operator // for the reference counting to be correct SearchHistoryLink::SearchHistoryLink(const SearchHistoryLink& link) : pNode(link.pNode) { if(pNode != NULL) pNode->increment(); } // SearchHistoryLink& SearchHistoryLink::operator=(SearchHistoryLink const& link) { SearchHistoryNode* pOld = pNode; pNode = link.pNode; if(pNode != NULL) pNode->increment(); if(pOld != NULL) { pOld->decrement(); if(pOld->getCount() == 0) delete pOld; } return *this; } // SearchHistoryLink::~SearchHistoryLink() { if(pNode != NULL) { pNode->decrement(); if(pNode->getCount() == 0) delete pNode; } } // // Node // // adding a child of the node automatically increments the refCount of this node // through the child's Link to this node. Once all the children of this node // have been removed it will automatically be deleted SearchHistoryLink SearchHistoryNode::createChild(int var_pos, char var_base) { return SearchHistoryLink(new SearchHistoryNode(this, var_pos, var_base)); } // The root has NULL as a parent SearchHistoryLink SearchHistoryNode::createRoot() { return SearchHistoryLink(new SearchHistoryNode(NULL, -1, ROOT_CHAR)); } // Return the search history up to the root node SearchHistoryVector SearchHistoryNode::getHistoryVector() { SearchHistoryVector out; SearchHistoryLink pCurr(this); bool done = false; while(!done) { if(pCurr->m_variant.base == ROOT_CHAR) { // root found, terminate the search done = true; } else { out.add(pCurr->m_variant); pCurr = pCurr->m_parentLink; } } return out; } // // SearchHistoryVector // // Normalize the search history so that the positions are in ascending (left to right) // order and the bases are wrt. the original strand of the forward sequence // This is required to compare two SearchHistories that represent alignments to different // strands void SearchHistoryVector::normalize(bool doComplement) { std::sort(m_history.begin(), m_history.end(), SearchHistoryItem::sortPos); if(doComplement) { for(size_t i = 0; i < m_history.size(); ++i) { m_history[i].base = complement(m_history[i].base); } } } // void SearchHistoryVector::add(int pos, char base) { SearchHistoryItem item(pos, base); m_history.push_back(item); } // void SearchHistoryVector::add(SearchHistoryItem& item) { m_history.push_back(item); } // int SearchHistoryVector::countDifferences(const SearchHistoryVector& a, const SearchHistoryVector& b, int maxPos) { size_t na = a.m_history.size(); size_t nb = b.m_history.size(); size_t i = 0; size_t j = 0; int count = 0; while(i < na && j < nb) { const SearchHistoryItem& itemA = a.m_history[i]; const SearchHistoryItem& itemB = b.m_history[j]; if(itemA.pos > maxPos || itemB.pos > maxPos) break; if(itemA.pos == itemB.pos) { if(itemA.base != itemB.base) ++count; ++i; ++j; } else if(itemA.pos < itemB.pos) { ++count; ++i; } else if(itemB.pos < itemA.pos) { ++count; ++j; } else { assert(false); } } // Count the remaining elements in A and B that are less than maxpos while(i < na && a.m_history[i].pos <= maxPos) { ++count; ++i; } // Count the remaining elements in A and B that are less than maxpos while(j < nb && b.m_history[j].pos <= maxPos) { ++count; ++j; } return count; } // Transform the original string using the history std::string SearchHistoryVector::transform(const std::string& original, bool queryReversed) const { std::string transformed = original; int l = transformed.size(); for(size_t i = 0; i < m_history.size(); ++i) { const SearchHistoryItem& item = m_history[i]; // Transform the position onto the read - if the queryReversed flag // is set, the numbering starts from the left at one int t_pos = (queryReversed) ? item.pos - 1 : l - item.pos; assert(t_pos >= 0 && t_pos < l); assert(transformed[t_pos] != item.base); // pos is 1-based starting from the right side of original transformed[t_pos] = item.base; } return transformed; } // Return the string of bases that make up the history std::string SearchHistoryVector::getBaseString() const { std::string out; out.reserve(m_history.size()); for(size_t i = 0; i < m_history.size(); ++i) out.push_back(m_history[i].base); return out; } // std::ostream& operator<<(std::ostream& out, const SearchHistoryVector& hist) { std::copy(hist.m_history.begin(), hist.m_history.end(), std::ostream_iterator(out, "\t")); return out; } ================================================ FILE: src/SGA/Algorithm/SearchHistory.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL // // SearchHistory - data structures to track // the history of a FM-index search //----------------------------------------------- #ifndef SEARCHHISTORY_H #define SEARCHHISTORY_H #include "Util.h" // Base, Position pair indicating a divergence during the search struct SearchHistoryItem { SearchHistoryItem(int p, char b) : pos(p), base(b) {} int pos; char base; static bool sortPos(const SearchHistoryItem& a, const SearchHistoryItem& b) { return a.pos < b.pos; } friend std::ostream& operator<<(std::ostream& out, const SearchHistoryItem& hi) { out << hi.pos << "," << hi.base; return out; } }; typedef std::vector HistoryItemVector; // A vector of history items that can be compared with other histories class SearchHistoryVector { public: // SearchHistoryVector() {} // void add(int pos, char base); void add(SearchHistoryItem& item); void normalize(bool doComplement); size_t size() const { return m_history.size(); } std::string getBaseString() const; // Transform the original string using the history into a string representing // the sequence of bases searched to create the history std::string transform(const std::string& original, bool queryReversed) const; // static int countDifferences(const SearchHistoryVector& a, const SearchHistoryVector& b, int maxPos); // friend std::ostream& operator<<(std::ostream& out, const SearchHistoryVector& hist); private: HistoryItemVector m_history; }; class SearchHistoryNode; // A SearchHistoryLink is a reference-counted wrapper of a // search node. This is the external interface to the SearchHistoryNodes // This allows the SearchHistoryNodes to be automatically cleaned up when // they are no longer referred to class SearchHistoryLink { public: // SearchHistoryLink(); SearchHistoryLink(SearchHistoryNode* ptr); // We need to handle the copy constructor and the assignment operator // for the reference counting to be correct SearchHistoryLink(const SearchHistoryLink& link); SearchHistoryLink& operator=(SearchHistoryLink const& link); ~SearchHistoryLink(); SearchHistoryNode* operator->() const { assert(pNode != NULL); return pNode; } SearchHistoryNode& operator*() const { assert(pNode != NULL); return *pNode; } private: SearchHistoryNode* pNode; }; // A search history node is one link in a chain of history items. createChild makes a // new element in the chain, indicating a divergence from the parent history class SearchHistoryNode { public: SearchHistoryLink createChild(int var_pos, char var_base); static SearchHistoryLink createRoot(); // Create the root node of the history tree SearchHistoryVector getHistoryVector(); private: friend class SearchHistoryLink; friend class SearchTree; // The nodes should only be constructed/destructed through the links SearchHistoryNode(SearchHistoryNode* pParent, int var_pos, char var_base) : m_parentLink(pParent), m_variant(var_pos, var_base), m_refCount(0) {} ~SearchHistoryNode() { assert(m_refCount == 0); } inline void increment() { ++m_refCount; } inline void decrement() { --m_refCount; } inline int getCount() const { return m_refCount; } SearchHistoryLink m_parentLink; SearchHistoryItem m_variant; int m_refCount; static const char ROOT_CHAR = '0'; }; #endif ================================================ FILE: src/SGA/Algorithm/SearchSeed.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SearchSeed.h - Data structure holding a partial // alignment to a FM-index. // #include #include "SearchSeed.h" // void SearchSeed::print() const { printf("li: %d ri: %d sl: %d dir: %d z: %d lrl: %d lru: %d rlr: %d rlu: %d\n", left_index, right_index, seed_len, dir, z, (int)ranges.interval[0].lower, (int)ranges.interval[0].upper, (int)ranges.interval[1].lower, (int)ranges.interval[1].upper); } // void SearchSeed::print(const std::string& w) const { int range = (int)ranges.interval[0].upper - (int)ranges.interval[0].lower; printf("sub: %s li: %d ri: %d sl: %d dir: %d z: %d lrl: %d lru: %d range: %d rlr: %d rlu: %d\n", w.substr(left_index, length()).c_str(), left_index, right_index, seed_len, dir, z, (int)ranges.interval[0].lower, (int)ranges.interval[0].upper, range, (int)ranges.interval[1].lower, (int)ranges.interval[1].upper); } ================================================ FILE: src/SGA/Algorithm/SearchSeed.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SearchSeed.h - Data structure holding a partial // alignment to a FM-index. // #ifndef SEARCHSEED_H #define SEARCHSEED_H #include #include #include "BWTInterval.h" #include "SearchHistory.h" // types enum ExtendDirection { ED_LEFT, ED_RIGHT }; // A search seed describes a partial alignment to a BWT struct SearchSeed { // // Functions // inline int length() const { return right_index - left_index + 1; } inline bool isSeed() const { return length() < seed_len; } inline bool isIntervalValid(int idx) { return ranges.interval[idx].isValid(); } inline bool allowMismatches() const { return z < maxDiff; } inline double calcErrorRate() const { return static_cast(z) / static_cast(length()); } // Sort the alignments based on their r_lower/r_upper static inline bool compareLeftRange(const SearchSeed& a, const SearchSeed& b) { return BWTInterval::compare(a.ranges.interval[0], b.ranges.interval[0]); } // Compare for equality based on the left range // If the length of the alignment is equal, then if the left ranges // are a match, the two alignment objects are redundant and one can be removed static inline bool equalLeftRange(const SearchSeed& a, const SearchSeed& b) { #ifdef VALIDATE if(BWTInterval::equal(a.ranges.inteval[0], b.ranges.interval[0])) assert(a.length() == b.length() && a.z == b.z); #endif return BWTInterval::equal(a.ranges.interval[0], b.ranges.interval[0]); } friend bool operator==(const SearchSeed& a, const SearchSeed& b) { return a.ranges == b.ranges && a.left_index == b.left_index && a.right_index == b.right_index && a.z == b.z && a.dir == b.dir; } // void print() const; void print(const std::string& w) const; // // Data // // BWT interval coordinates, the first element of the pair is the left range BWTIntervalPair ranges; SearchHistoryLink historyLink; // Index range is inclusive on both ends int left_index; int right_index; int seed_len; // The direction the alignment is currently being extended ExtendDirection dir; // The current number of mismatches in the block int z; // The total number of allowed mismatches int maxDiff; }; // Collections typedef std::vector SearchSeedVector; typedef std::queue SearchSeedQueue; #endif ================================================ FILE: src/SGA/Algorithm/StatsProcess.cpp ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StatsProcess - Compute statistics about the reads // #include "StatsProcess.h" #include "BWTAlgorithms.h" #include "MultiOverlap.h" // // // StatsProcess::StatsProcess(const BWT* pBWT, const BWT* pRBWT, int kmerLength, int minOverlap, int branchCutoff, bool bNoOverlap) : m_pBWT(pBWT), m_pRBWT(pRBWT), m_kmerLength(kmerLength), m_minOverlap(minOverlap), m_branchCutoff(branchCutoff), m_bNoOverlap(bNoOverlap), m_pAllOverlapper(NULL) { if (!m_bNoOverlap) { assert(m_pRBWT); m_pAllOverlapper = new OverlapAlgorithm(m_pBWT, m_pRBWT, 0.05, 16, 16, false, m_branchCutoff); } } // StatsProcess::~StatsProcess() { if(m_pAllOverlapper) { delete m_pAllOverlapper; m_pAllOverlapper = NULL; } } // StatsResult StatsProcess::process(const SequenceWorkItem& workItem) { StatsResult result; std::string readSequence = workItem.read.seq.toString(); // // Compute the kmer distribution // int k = m_kmerLength; int n = readSequence.size(); int nk = n - m_kmerLength + 1; for(int i = 0; i < nk; ++i) { std::string kmer = readSequence.substr(i, k); int count = BWTAlgorithms::countSequenceOccurrences(kmer, m_pBWT); result.kmerCoverage.push_back(count); } // // Compute the number of implied errors in the read // if(!m_bNoOverlap) { SeqRecord currRead = workItem.read; OverlapBlockList blockList; OverlapResult overlap_result = m_pAllOverlapper->overlapRead(currRead, m_minOverlap, &blockList); // Convert the overlap block list into a multi-overlap if(!overlap_result.searchAborted) { MultiOverlap mo = blockListToMultiOverlap(currRead, blockList); int covered = mo.countBasesCovered(); int wrong = mo.countPotentialIncorrect(m_errorThreshold); result.mean_depth = mo.getMeanDepth(); result.bases_counted += covered; result.bases_wrong += wrong; } } return result; } // // // StatsPostProcess::StatsPostProcess(bool bPrintKmer) : m_bPrintKmer(bPrintKmer), m_basesCounted(0), m_basesWrong(0), m_depthSum(0.0f), m_numReads(0), m_numPerfect(0) { } // StatsPostProcess::~StatsPostProcess() { std::cout << "\n*** Stats: \n"; if(m_bPrintKmer) { int max = 100; m_kmerDist.print(max); } printf("%d out of %d bases are potentially incorrect (%lf)\n", m_basesWrong, m_basesCounted, (double)m_basesWrong/m_basesCounted); printf("%d reads out of %d are perfect (%lf)\n", m_numPerfect, m_numReads, (double)m_numPerfect/m_numReads); printf("Mean overlap depth: %.2lf\n", m_depthSum / m_numReads); } // void StatsPostProcess::process(const SequenceWorkItem& /*item*/, const StatsResult& result) { for(size_t i = 0; i < result.kmerCoverage.size(); ++i) m_kmerDist.add(result.kmerCoverage[i]); m_basesCounted += result.bases_counted; m_basesWrong += result.bases_wrong; m_depthSum += result.mean_depth; m_numReads += 1; m_numPerfect += (result.bases_wrong == 0 ? 1 : 0); } ================================================ FILE: src/SGA/Algorithm/StatsProcess.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StatsProcess - Compute statistics about the reads // #ifndef STATSPROCESS_H #define STATSPROCESS_H #include "Util.h" #include "BWT.h" #include "SequenceProcessFramework.h" #include "SequenceWorkItem.h" #include "OverlapAlgorithm.h" #include "KmerDistribution.h" class StatsResult { public: StatsResult() : bases_counted(0), bases_wrong(0), mean_depth(0.0f) {} std::vector kmerCoverage; int bases_counted; int bases_wrong; double mean_depth; }; // class StatsProcess { public: StatsProcess(const BWT* pBWT, const BWT* pRBWT, int kmerLength, int minOverlap, int branchCutoff, bool bNoOverlap); ~StatsProcess(); StatsResult process(const SequenceWorkItem& item); private: const BWT* m_pBWT; const BWT* m_pRBWT; const int m_kmerLength; const int m_minOverlap; const int m_branchCutoff; const bool m_bNoOverlap; static const int m_errorThreshold = 3; const OverlapAlgorithm* m_pAllOverlapper; }; // Write the results from the overlap step to an ASQG file class StatsPostProcess { public: StatsPostProcess(bool bPrintKmer); ~StatsPostProcess(); void process(const SequenceWorkItem& item, const StatsResult& result); private: KmerDistribution m_kmerDist; bool m_bPrintKmer; int m_basesCounted; int m_basesWrong; double m_depthSum; int m_numReads; int m_numPerfect; }; #endif ================================================ FILE: src/SGA/Algorithm/StringGraphGenerator.cpp ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StringGraphGenerator - Iteratively construct // a local String Graph using the FM-index // #include "StringGraphGenerator.h" #include "SGAlgorithms.h" #include "SGVisitors.h" //#define DEBUGGENERATE 1 StringGraphGenerator::StringGraphGenerator(const OverlapAlgorithm* pOverlapper, const SeqRecord& startRead, const SeqRecord& endRead, int minOverlap, EdgeDir startDir, int maxDistance) : m_pOverlapper(pOverlapper), m_minOverlap(minOverlap), m_pGraph(NULL), m_startDir(startDir), m_maxDistance(maxDistance) { m_pGraph = new StringGraph; // Add the start and end vertices to the graph m_pStartVertex = addTerminalVertex(startRead); m_pEndVertex = addTerminalVertex(endRead); // Set the color of the starting node to be UNEXPLORED // and the color of the end node to be EXPLORED. // This indicates to the subsequent search which vertices // should be expanded m_pStartVertex->setColor(UNEXPLORED_COLOR); m_pEndVertex->setColor(EXPLORED_COLOR); // Set up the expansion frontier FrontierQueue queue; GraphFrontier node; node.pVertex = m_pStartVertex; node.dir = m_startDir; node.distance = m_pStartVertex->getSeqLen(); queue.push(node); buildGraph(queue); //m_pGraph->writeDot("local.dot"); SGDuplicateVisitor dupVisit(true); m_pGraph->visit(dupVisit); // If the terminal vertices are marked as contained, reset the containment flags so they will not be removed resetContainmentFlags(m_pStartVertex); resetContainmentFlags(m_pEndVertex); SGContainRemoveVisitor containVisit; m_pGraph->visit(containVisit); //m_pGraph->writeDot("local-final.dot"); } // StringGraphGenerator::~StringGraphGenerator() { delete m_pGraph; m_pGraph = NULL; // m_pStartVertex and m_pEndVertex are deleted by the graph destructor // so they do not need to be explicitly freed here. } // Build the graph by expanding nodes on the frontier void StringGraphGenerator::buildGraph(FrontierQueue& queue) { while(!queue.empty()) { if(queue.size() > 200) break; GraphFrontier node = queue.front(); queue.pop(); if(node.pVertex->getColor() == EXPLORED_COLOR) continue; // node has been visited already // Search the FM-index for the current vertex SeqRecord record; record.id = node.pVertex->getID(); record.seq = node.pVertex->getSeq().toString(); OverlapBlockList blockList; assert(blockList.empty()); m_pOverlapper->overlapRead(record, m_minOverlap, &blockList); // Update the graph and the frontier queue with newly found vertices updateGraphAndQueue(node, queue, blockList); node.pVertex->setColor(EXPLORED_COLOR); } m_pGraph->setColors(GC_WHITE); } // Search for walks between the start and end vertex SGWalkVector StringGraphGenerator::searchWalks() { SGWalkVector walks; SGSearch::findWalks(m_pStartVertex, m_pEndVertex, m_startDir, m_maxDistance, true, 10000, walks); return walks; } // void StringGraphGenerator::updateGraphAndQueue(GraphFrontier& currNode, FrontierQueue& queue, OverlapBlockList& blockList) { // Partition the block list into containment blocks and extension (valid) blocks // We do not add containment edges to the graph so the containments are discarded OverlapBlockList containList; OverlapBlockList overlapList; Vertex* pX = currNode.pVertex; //partitionBlockList(pX->getSeqLen(), &blockList, &overlapList, &containList); // Process the overlap blocks, adding new vertices and edges where necessary for(OverlapBlockList::iterator iter = blockList.begin(); iter != blockList.end(); ++iter) { if(iter->getEdgeDir() != currNode.dir) continue; std::string vertexID = iter->toCanonicalID(); if(vertexID == pX->getID()) continue; // skip self-edges std::string vertexSeq = iter->getFullString(pX->getSeq().toString()); Overlap o = iter->toOverlap(pX->getID(), vertexID, pX->getSeqLen(), vertexSeq.length()); /* #if DEBUGGENERATE std::cout << "has overlap to: " << vertexID << " len: " << iter->overlapLen << " flags: " << iter->flags << "\n"; std::cout << "Overlap string: " << iter->getOverlapString(pX->getSeq().toString()) << "\n"; #endif */ // Check if a vertex with endVertexID exists in the graph Vertex* pVertex = m_pGraph->getVertex(vertexID); if(pVertex == NULL) { #if DEBUGGENERATE std::cout << "Vertex with ID: " << vertexID << " does not exist, creating\n"; std::cout << "Vertex sequence: " << vertexSeq << "\n"; #endif // Generate the new vertex vertexSeq = iter->getFullString(pX->getSeq().toString()); //pVertex = new(m_pGraph->getVertexAllocator()) Vertex(vertexID, vertexSeq); pVertex = new Vertex(vertexID, vertexSeq); pVertex->setColor(UNEXPLORED_COLOR); m_pGraph->addVertex(pVertex); } // Construct the found edge Edge* pXY = SGAlgorithms::createEdgesFromOverlap(m_pGraph, o, true); // If the endpoint vertex is unexplored, queue it if(pVertex->getColor() == UNEXPLORED_COLOR) { GraphFrontier node; node.pVertex = pVertex; node.dir = !pXY->getTwin()->getDir(); // continuation direction node.distance = currNode.distance + pXY->getSeqLen(); if(node.distance <= m_maxDistance) queue.push(node); } } } // Vertex* StringGraphGenerator::addTerminalVertex(const SeqRecord& record) { assert(m_pGraph != NULL); // Build the vertex by performing a full-length search for the // sequence in the FM-index. We set the ID of the vertex to be the // lowest index in the returned block list. OverlapBlockList endBlockList; m_pOverlapper->alignReadDuplicate(record, &endBlockList); // Search the block list for the exact match to the end read. This must exist OverlapBlockList::iterator matchIter = endBlockList.begin(); while(matchIter != endBlockList.end()) { if(matchIter->numDiff == 0 && !matchIter->flags.isQueryRev()) break; // this block corresponds to the actual sequence of endRead } assert(matchIter != endBlockList.end()); // Construct the canonical ID from the matching interval std::string endID = matchIter->toCanonicalID(); Vertex* pVertex = m_pGraph->getVertex(endID); if(pVertex == NULL) { //pVertex = new(m_pGraph->getVertexAllocator()) Vertex(endID, record.seq.toString()); pVertex = new Vertex(endID, record.seq.toString()); m_pGraph->addVertex(pVertex); } return pVertex; } // void StringGraphGenerator::resetContainmentFlags(Vertex* pVertex) { if(!pVertex->isContained()) return; pVertex->setContained(false); // Set the containment flag for all the vertices that have containment edges with this vertex EdgePtrVec edges = pVertex->getEdges(); for(size_t i = 0; i < edges.size(); ++i) { Edge* pEdge = edges[i]; if(pEdge->getOverlap().isContainment()) pEdge->getEnd()->setContained(true); } } ================================================ FILE: src/SGA/Algorithm/StringGraphGenerator.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StringGraphGenerator - Iteratively construct // a local String Graph using the FM-index // #ifndef STRINGGRAPHGENERATOR_H #define STRINGGRAPHGENERATOR_H #include #include "OverlapAlgorithm.h" #include "SGUtil.h" #include "GraphCommon.h" #include "SGSearch.h" // The GraphFrontier is a node that is on the edge // of the graph - it can be used to search the FM-index // to expand the graph outwards. struct GraphFrontier { Vertex* pVertex; EdgeDir dir; int distance; // The distance from the starting node }; typedef std::queue FrontierQueue; class StringGraphGenerator { public: StringGraphGenerator(const OverlapAlgorithm* pOverlapper, const SeqRecord& startRead, const SeqRecord& endRead, int minOverlap, EdgeDir startDir, int maxDistance); ~StringGraphGenerator(); // Find walks between the start vertex and the end vertex SGWalkVector searchWalks(); private: // void buildGraph(FrontierQueue& queue); void updateGraphAndQueue(GraphFrontier& currNode, FrontierQueue& queue, OverlapBlockList& blockList); Vertex* addTerminalVertex(const SeqRecord& record); void resetContainmentFlags(Vertex* pVertex); // Data const OverlapAlgorithm* m_pOverlapper; int m_minOverlap; StringGraph* m_pGraph; Vertex* m_pStartVertex; Vertex* m_pEndVertex; EdgeDir m_startDir; int m_maxDistance; static const GraphColor UNEXPLORED_COLOR = GC_WHITE; static const GraphColor EXPLORED_COLOR = GC_BLACK; }; #endif ================================================ FILE: src/SGA/Algorithm/StringThreader.cpp ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StringThreader - Iteratively construct a // string representing a walk through an assembly graph // matching a query sequence. // // The assembly graph is abstractly represented as // an FM-index. // #include "StringThreader.h" #include "BWTAlgorithms.h" #include "LRAlignment.h" #include "StdAlnTools.h" // // StringThreaderNode // StringThreaderNode::StringThreaderNode(const std::string* pQuery, StringThreaderNode* parent) : m_pQuery(pQuery), m_pParent(parent) { } // Destructor, recurisvely delete the children of the node StringThreaderNode::~StringThreaderNode() { // Delete children for(STNodePtrList::iterator iter = m_children.begin(); iter != m_children.end(); ++iter) delete *iter; // Delete alignment columns for(size_t i = 0; i < m_alignmentColumns.size(); ++i) delete m_alignmentColumns[i]; } // Return a suffix of length l of the path from the root to this node std::string StringThreaderNode::getSuffix(size_t l) const { size_t n = m_label.size(); if(l <= n) { return m_label.substr(n - l, l); } else { assert(m_pParent != NULL); return m_pParent->getSuffix(l - n) + m_label; } } // Return the full string of the path from the root to this node std::string StringThreaderNode::getFullString() const { if(m_pParent == NULL) return m_label; else return m_pParent->getFullString() + m_label; } // Create a new child node with the given label. Returns a pointer to the new node. StringThreaderNode* StringThreaderNode::createChild(const std::string& label) { StringThreaderNode* pAdded = new StringThreaderNode(m_pQuery, this); m_children.push_back(pAdded); assert(!m_alignmentColumns.empty()); pAdded->computeExtendedAlignment(label, m_alignmentColumns.back()); return pAdded; } // Extend the label of this node void StringThreaderNode::extend(const std::string& ext) { assert(!ext.empty()); assert(!m_alignmentColumns.empty()); computeExtendedAlignment(ext, m_alignmentColumns.back()); } // Update the alignment columns for this node. void StringThreaderNode::computeExtendedAlignment(const std::string& ext, const BandedDPColumn* pPrevColumn) { // Calculate a new alignment column for each base of the label for(size_t i = 0; i < ext.size(); ++i) { BandedDPColumn* pNewColumn = ExtensionDP::createNewColumn(ext[i], *m_pQuery, pPrevColumn); m_alignmentColumns.push_back(pNewColumn); pPrevColumn = pNewColumn; } m_label.append(ext); } // Initialize the alignment columns. void StringThreaderNode::computeInitialAlignment(const std::string& initialLabel, int queryAlignmentEnd, int bandwidth) { // Create the initial alignment columnds between label and query m_label = initialLabel; assert(!m_label.empty()); ExtensionDP::createInitialAlignment(m_label, m_pQuery->substr(0, queryAlignmentEnd), bandwidth, m_alignmentColumns); } // Calculate error rate over last context bases of the alignment double StringThreaderNode::getLocalErrorRate(int context) const { return ExtensionDP::calculateLocalEditPercentage(m_alignmentColumns.back(), context); } // Calculate error rate over the entire alignment double StringThreaderNode::getGlobalErrorRate() const { return ExtensionDP::calculateGlobalEditPercentage(m_alignmentColumns.back()); } // Calculate the edit distance between the thread and query int StringThreaderNode::getEditDistance() const { int edits, alignLength; ExtensionDP::countEditsAndAlignLength(m_alignmentColumns.back(), edits, alignLength); return edits; } // Returns true if the extension has terminated bool StringThreaderNode::hasExtensionTerminated() const { return ExtensionDP::isExtensionTerminated(m_alignmentColumns.back(), 2); } // Return the best alignment between the string represented by this node and the query StringThreaderResult StringThreaderNode::getAlignment() const { ExtensionDPAlignment alignment = ExtensionDP::findGlocalAlignment(m_alignmentColumns.back()); StringThreaderResult result; result.query_align_length = alignment.query_align_length; result.thread = getFullString().substr(0, alignment.target_align_length); return result; } // Print the alignment void StringThreaderNode::printFullAlignment() const { std::string fullString = getFullString(); ExtensionDP::printAlignment(fullString, *m_pQuery, m_alignmentColumns.back()); } // Print the string(s) represented by this node and its children void StringThreaderNode::printAllStrings(const std::string& parent) const { if(m_children.empty()) { std::cout << "S: " << parent + m_label << "\n"; } else { for(STNodePtrList::const_iterator iter = m_children.begin(); iter != m_children.end(); ++iter) (*iter)->printAllStrings(parent + m_label); } } // // StringTheader // StringThreader::StringThreader(const std::string& seed, const std::string* pQuery, int queryAlignmentEnd, int kmer, const BWT* pBWT) : m_pBWT(pBWT), m_kmer(kmer), m_pQuery(pQuery) { // Create the root node containing the seed string m_pRootNode = new StringThreaderNode(pQuery, NULL); m_pRootNode->computeInitialAlignment(seed, queryAlignmentEnd, 50); m_leaves.push_back(m_pRootNode); } // StringThreader::~StringThreader() { // Recursively destroy the tree delete m_pRootNode; } // Run the threading algorithm void StringThreader::run(StringThreaderResultVector& results) { // Extend the leaf nodes while(!m_leaves.empty()) { extendLeaves(); cullLeavesByEdits(); checkTerminated(results); } } // Print the string represented by every node void StringThreader::printAll() { std::cout << "Print all: \n"; m_pRootNode->printAllStrings(""); } // Extend each leaf node void StringThreader::extendLeaves() { STNodePtrList newLeaves; for(STNodePtrList::iterator iter = m_leaves.begin(); iter != m_leaves.end(); ++iter) { StringVector extensions = getDeBruijnExtensions(*iter); // Either extend the current node or branch it // If no extension, do nothing and this node // is no longer considered a leaf if(extensions.size() == 1) { // Single extension, do not branch (*iter)->extend(extensions.front()); newLeaves.push_back(*iter); } else if(extensions.size() > 1) { // Branch for(size_t i = 0; i < extensions.size(); ++i) { StringThreaderNode* pAdded = (*iter)->createChild(extensions[i]); newLeaves.push_back(pAdded); } } } m_leaves.clear(); m_leaves = newLeaves; } // Remove leaves that are have a high local error rate // These leaves probably represent branches that are not // the query sequence. void StringThreader::cullLeavesByLocalError() { STNodePtrList newLeaves; int context = 20; double threshold = 0.3f; // Calculate the local error rate of the alignments to each new leaf // If it is less than threshold, add the leaf to the node for(STNodePtrList::iterator iter = m_leaves.begin(); iter != m_leaves.end(); ++iter) { double ler = (*iter)->getLocalErrorRate(context); if(ler < threshold) newLeaves.push_back(*iter); } m_leaves = newLeaves; } // Remove leaves that have an edit distance much higher than // the best leaf void StringThreader::cullLeavesByEdits() { STNodePtrList newLeaves; // Calculate the local error rate of the alignments to each new leaf // If it is less than threshold, add the leaf to the node int bestEdits = std::numeric_limits::max(); IntVector editsVector; for(STNodePtrList::iterator iter = m_leaves.begin(); iter != m_leaves.end(); ++iter) { int edits = (*iter)->getEditDistance(); if(edits < bestEdits) bestEdits = edits; editsVector.push_back(edits); } int leafID = 0; int threshold = 1; for(STNodePtrList::iterator iter = m_leaves.begin(); iter != m_leaves.end(); ++iter) { if(editsVector[leafID] <= bestEdits + threshold) newLeaves.push_back(*iter); leafID += 1; } m_leaves = newLeaves; } // Check for leaves whose extension has terminated. If the leaf has // terminated, its alignment result is pushed to the result vector void StringThreader::checkTerminated(StringThreaderResultVector& results) { STNodePtrList newLeaves; for(STNodePtrList::iterator iter = m_leaves.begin(); iter != m_leaves.end(); ++iter) { if((*iter)->hasExtensionTerminated()) results.push_back((*iter)->getAlignment()); else newLeaves.push_back(*iter); } m_leaves = newLeaves; } // Calculate the successors of this node in the implicit deBruijn graph StringVector StringThreader::getDeBruijnExtensions(StringThreaderNode* pNode) { // Get the last k-1 bases of the node std::string pmer = pNode->getSuffix(m_kmer - 1); AlphaCount64 extensions = BWTAlgorithms::calculateDeBruijnExtensionsSingleIndex(pmer, m_pBWT, ED_SENSE, NULL); // Loop over the DNA symbols, if there is are more than two characters create a branch // otherwise just perform an extension. bool hasExtension = extensions.hasDNAChar(); StringVector out; if(hasExtension) { for(int i = 0; i < DNA_ALPHABET::size; ++i) { char b = DNA_ALPHABET::getBase(i); if(extensions.get(b) >= 3) { // extend to b std::string tmp; tmp.append(1,b); out.push_back(tmp); } } } return out; } ================================================ FILE: src/SGA/Algorithm/StringThreader.h ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StringThreader - Iteratively construct a // string representing a walk through an assembly graph // matching a query sequence. // // The assembly graph is abstractly represented as // an FM-index. // #ifndef STRING_THREADER_H #define STRING_THREADER_H #include #include "BWT.h" #include "ExtensionDP.h" // Typedefs class StringThreaderNode; typedef std::list STNodePtrList; // Object to hold the result of the threading process struct StringThreaderResult { std::string thread; int query_align_length; }; typedef std::vector StringThreaderResultVector; // A node in the threading tree class StringThreaderNode { public: // // Functions // StringThreaderNode(const std::string* pQuery, StringThreaderNode* parent); ~StringThreaderNode(); // Add a child node to this node with the given label // Returns a pointer to the created node StringThreaderNode* createChild(const std::string& label); // Extend the label of this node by l void extend(const std::string& ext); // Return a suffix of length l of the string represented by this node std::string getSuffix(size_t l) const; // Return the complete sequence of the string represented by the branch std::string getFullString() const; // Get alignment mismatch/error rate metrics double getLocalErrorRate(int context) const; double getGlobalErrorRate() const; int getEditDistance() const; // Initialize or update the alignment data void computeInitialAlignment(const std::string& initialLabel, int queryAlignmentEnd, int bandwidth); void computeExtendedAlignment(const std::string& ext, const BandedDPColumn* pPrevColumn); // Return the best alignment for the string this node represents StringThreaderResult getAlignment() const; // Check if this node can be extended any further bool hasExtensionTerminated() const; // Print the alignment between the string represented by the // path from the root of the tree to this node void printFullAlignment() const; // Recursive function to print all the strings represented // by this node and all its children. void printAllStrings(const std::string& parent) const; private: // // Data // // The extension string from the parent std::string m_label; // The query string being threaded through the graph const std::string* m_pQuery; // The parent node, can be NULL StringThreaderNode* m_pParent; STNodePtrList m_children; // Alignment information between the label of this node and the query sequence // One column per label base BandedDPColumnPtrVector m_alignmentColumns; }; class StringThreader { public: // // Functions // StringThreader(const std::string& seed, const std::string* pQuery, int queryAlignmentEnd, int kmer, const BWT* pBWT); ~StringThreader(); // Run the threading process. Valid alignments are pushed to the results // vector void run(StringThreaderResultVector& results); // Print all the strings represented by the tree void printAll(); private: // // Functions // void extendLeaves(); // Leaf removal heuristics void cullLeavesByLocalError(); void cullLeavesByEdits(); // Check if the leaves can be extended no further // If so, the best alignment is pushed to results void checkTerminated(StringThreaderResultVector& results); // Calculate the successors of this node in the implicit deBruijn graph StringVector getDeBruijnExtensions(StringThreaderNode* pNode); // // Data // const BWT* m_pBWT; int m_kmer; const std::string* m_pQuery; StringThreaderNode* m_pRootNode; STNodePtrList m_leaves; }; #endif ================================================ FILE: src/SGA/Algorithm/VariationBuilderCommon.cpp ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // VariantionVariationBuilderCommon -- Common functions and data // structures for the abstract graph builders // #include "VariationBuilderCommon.h" #include "SGAlgorithms.h" // Count the number of extensions above the given threshold size_t VariationBuilderCommon::countValidExtensions(const AlphaCount64& ac, size_t threshold) { size_t n = 0; for(size_t i = 0; i < DNA_ALPHABET::size; ++i) { char b = DNA_ALPHABET::getBase(i); size_t count = ac.get(b); if(count >= threshold) n += 1; } return n; } // Filter out low counts in AlphaCount using a coverage threshold // relative to the most frequent count. Returns the number of // surviving counts size_t VariationBuilderCommon::filterLowFrequency(AlphaCount64& ac, double alpha) { size_t n = 0; size_t max = ac.getMaxCount(); if(max == 0) return 0; for(size_t i = 0; i < DNA_ALPHABET::size; ++i) { char b = DNA_ALPHABET::getBase(i); size_t count = ac.get(b); double ratio = (double)count / max; if(ratio >= alpha) n += 1; else ac.set(b,0); } return n; } // Make a de Bruijn graph string std::string VariationBuilderCommon::makeDeBruijnVertex(const std::string& v, char edgeBase, EdgeDir direction) { std::string w; size_t p = v.size() - 1; if(direction == ED_SENSE) { w = v.substr(1, p); w.append(1, edgeBase); } else { w.append(1, edgeBase); w.append(v.substr(0, p)); } return w; } // Add a de Bruijn graph edge to the given graph betwee pX and pY. // Assumes the sequences are from the same strand (not reverse complements) void VariationBuilderCommon::addSameStrandDeBruijnEdges(StringGraph* pGraph, const Vertex* pX, const Vertex* pY, EdgeDir direction) { assert(pX->getSeq().length() == pY->getSeq().length()); // overlap length for a de bruijn edge size_t p = pX->getSeq().length() - 1; // Construct an overlap object for this relationship Overlap o; o.id[0] = pX->getID(); o.id[1] = pY->getID(); o.match.isReverse = false; o.match.numDiff = 0; if(direction == ED_SENSE) { // pX -> pY o.match.coord[0].interval.start = 1; o.match.coord[1].interval.start = 0; } else { // pY -> pX o.match.coord[0].interval.start = 0; o.match.coord[1].interval.start = 1; } o.match.coord[0].interval.end = o.match.coord[0].interval.start + p - 1; // inclusive coordinate o.match.coord[1].interval.end = o.match.coord[1].interval.start + p - 1; o.match.coord[0].seqlen = p + 1; o.match.coord[1].seqlen = p + 1; Edge* e = SGAlgorithms::createEdgesFromOverlap(pGraph, o, false); assert(e != NULL); } ================================================ FILE: src/SGA/Algorithm/VariationBuilderCommon.h ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // VariationBuilderCommon - Data structures // commons to various algorithms for assembling // variation haplotypes // #ifndef VARIATION_BUILDER_COMMON_H #define VARIATION_BUILDER_COMMON_H #include "BWT.h" #include "BWTInterval.h" #include "SGUtil.h" #include "SGWalk.h" #include // Result of the bubble construction // Used to track statistics enum BubbleResultCode { BRC_UNKNOWN, BRC_OK, BRC_SOURCE_BROKEN, BRC_SOURCE_BRANCH, BRC_TARGET_BROKEN, BRC_TARGET_BRANCH, BRC_WALK_FAILED, BRC_HB_FAILED, BRC_NO_SOLUTION }; // The actual result structure struct BubbleResult { std::string targetString; std::string sourceString; double targetCoverage; double sourceCoverage; BubbleResultCode returnCode; }; // A directed node in a graph that // has not had it's neighbors visited struct BuilderExtensionNode { BuilderExtensionNode(Vertex* pX, EdgeDir d) : pVertex(pX), direction(d), distance(0) {} BuilderExtensionNode(Vertex* pX, EdgeDir dir, int dist) : pVertex(pX), direction(dir), distance(dist) {} Vertex* pVertex; // the vertex to extend EdgeDir direction; // the direction to extend to int distance; // the total number of nodes from the start to this node. }; typedef std::queue BuilderExtensionQueue; typedef std::map StrIntMap; // Common functions namespace VariationBuilderCommon { // Count the number of extensions above the given threshold size_t countValidExtensions(const AlphaCount64& ac, size_t threshold); // Returns true if there are multiple characters above the threshold bool hasMultipleBranch(const AlphaCount64& ac, size_t threshold); // Filter out low counts in AlphaCount using a coverage threshold // relative to the most frequent count. Returns the number of // surviving counts size_t filterLowFrequency(AlphaCount64& ac, double alpha); // Make a de Bruijn graph string std::string makeDeBruijnVertex(const std::string& v, char edgeBase, EdgeDir direction); // Add a de Bruijn graph edge to the given graph betwee pX and pY. void addSameStrandDeBruijnEdges(StringGraph* pGraph, const Vertex* pX, const Vertex* pY, EdgeDir direction); }; #endif ================================================ FILE: src/SGA/Bigraph/Bigraph.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Bidirectional graph // #include #include #include #include #include "Bigraph.h" #include "Timer.h" #include "ASQG.h" // // // Bigraph::Bigraph() : m_hasContainment(false), m_hasTransitive(false), m_isExactMode(false), m_minOverlap(0), m_errorRate(0.0f) { //JEREMIAH // Set up the memory pools for the graph //m_pEdgeAllocator = new SimpleAllocator(); //m_pVertexAllocator = new SimpleAllocator(); //m_vertices.set_deleted_key(""); // JEREMIAH //WARN_ONCE("HARDCODED HASH TABLE MAX SIZE"); //m_vertices.resize(600000000); } // // // Bigraph::~Bigraph() { VertexPtrMap::iterator iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { delete iter->second; iter->second = NULL; } //JEREMIAH // Clean up the memory pools //delete m_pEdgeAllocator; //delete m_pVertexAllocator; } // // Add a vertex // void Bigraph::addVertex(Vertex* pVert) { // std::pair result = // m_vertices_tokeep.insert(std::make_pair(pVert->getID(), pVert));//JEREMIAH std::pair result = m_vertices.insert(std::make_pair(pVert->getID(), pVert)); if(!result.second) { std::cerr << "Error: Attempted to insert vertex into graph with a duplicate id: " << pVert->getID() << "\n"; std::cerr << "All reads must have a unique identifier\n"; exit(1); } } // // Remove a vertex that is not connected to any other // void Bigraph::removeIslandVertex(Vertex* pVertex) { assert(pVertex->countEdges() == 0); // Remove the vertex from the collection VertexID id = pVertex->getID(); delete pVertex; m_vertices.erase(id); //m_vertices_tokeep.erase(id); //JEREMIAH } // // Remove a vertex that is not connected to any other // void Bigraph::removeIslandVertexNoErase(Vertex* pVertex) { assert(pVertex->countEdges() == 0); // Remove the vertex from the collection VertexID id = pVertex->getID(); delete pVertex; m_vertices.erase(id); } // // Remove a vertex // void Bigraph::removeConnectedVertex(Vertex* pVertex) { // Remove the edges pointing to this Vertex pVertex->deleteEdges(); // Remove the vertex from the collection VertexID id = pVertex->getID(); delete pVertex; m_vertices.erase(id); } // // Check for the existance of a vertex // bool Bigraph::hasVertex(VertexID id) { VertexPtrMapIter iter = m_vertices.find(id); return iter != m_vertices.end(); } // // Get a vertex // Vertex* Bigraph::getVertex(VertexID id) const { VertexPtrMapConstIter iter = m_vertices.find(id); if(iter == m_vertices.end()) return NULL; return iter->second; } // // Add an edge // void Bigraph::addEdge(Vertex* pVertex, Edge* pEdge) { assert(pEdge->getStart() == pVertex); pVertex->addEdge(pEdge); } // // Remove an edge // void Bigraph::removeEdge(const EdgeDesc& ed) { ed.pVertex->removeEdge(ed); } // // High level merge function that does not specify an edge // void Bigraph::mergeVertices(VertexID id1, VertexID id2) { Vertex* pVert1 = getVertex(id1); // Get the edges from vertex1 to vertex2 EdgePtrVec edgesTo = pVert1->findEdgesTo(id2); if(edgesTo.empty()) { std::cerr << "mergeVertices: vertices are not connected\n"; return; } if(edgesTo.size() > 1) { std::cerr << "mergeVertces: cannot merge because of ambigious edges\n"; return; } // There is a single unique edge between the vertices Edge* mergeEdge = *edgesTo.begin(); // Call the real merging function merge(pVert1, mergeEdge); } // // Merge two vertices along the specified edge // void Bigraph::merge(Vertex* pV1, Edge* pEdge) { Vertex* pV2 = pEdge->getEnd(); //std::cout << "Merging " << pV1->getID() << " with " << pV2->getID() << "\n"; // jeremiah connected component tracking if (m_get_components) { int lab1 = m_connected_components[pV1->getID()]; int lab2 = m_connected_components[pV2->getID()]; ++m_label; m_connected_components[pV1->getID()] = m_label; m_connected_components[pV2->getID()] = m_label; for (auto& i : m_connected_components) if (i.second == lab1 || i.second == lab2) i.second = m_label; } //JEREMIAH //pV1->addParent(pV2->getID()); //std::cerr << "LEN: " << pV1->getParentID().size() << std::endl; // Merge the data pV1->merge(pEdge); // Get the twin edge (the edge in v2 that points to v1) Edge* pTwin = pEdge->getTwin(); // Ensure v2 has the twin edge assert(pV2->hasEdge(pTwin)); // Get the edge set opposite of the twin edge (which will be the new edges in this direction for V1) EdgePtrVec transEdges = pV2->getEdges(!pTwin->getDir()); // Move the edges from pV2 to pV1 for(EdgePtrVecIter iter = transEdges.begin(); iter != transEdges.end(); ++iter) { Edge* pTransEdge = *iter; // Remove the edge from V2, this does not destroy the edge pV2->removeEdge(pTransEdge); // Join pEdge to the start of transEdge // This updates the starting point of pTransEdge to be V1 // This calls Edge::extend on the twin edge pTransEdge->join(pEdge); assert(pTransEdge->getDir() == pEdge->getDir()); pV1->addEdge(pTransEdge); // add to V1 // Notify the edges they have been updated pTransEdge->update(); pTransEdge->getTwin()->update(); } // Remove the edge from pV1 to pV2 pV1->removeEdge(pEdge); delete pEdge; pEdge = 0; // Remove the edge from pV2 to pV1 pV2->removeEdge(pTwin); delete pTwin; pEdge = 0; // Remove V2 // It is guarenteed to not be connected removeIslandVertexNoErase(pV2); //validate(); } // int Bigraph::sweepVertices(GraphColor c) { int numRemoved = 0; VertexPtrMapIter iter = m_vertices.begin(); while(iter != m_vertices.end()) { VertexPtrMapIter next = iter; ++next; if(iter->second->getColor() == c) { removeConnectedVertex(iter->second); ++numRemoved; } iter = next; } return numRemoved; } // int Bigraph::sweepEdges(GraphColor c) { int numRemoved = 0; for(VertexPtrMapIter iter = m_vertices.begin(); iter != m_vertices.end(); ++iter) numRemoved += iter->second->sweepEdges(c); return numRemoved; } // Simplify the graph by compacting singular edges void Bigraph::simplify() { assert(!hasContainment()); simplify(ED_SENSE); simplify(ED_ANTISENSE); } // Simplify the graph by compacting edges in the given direction void Bigraph::simplify(EdgeDir dir) { bool graph_changed = true; while(graph_changed) { graph_changed = false; VertexPtrMapIter iter = m_vertices.begin(); while(iter != m_vertices.end()) { // Get the edges for this direction EdgePtrVec edges = iter->second->getEdges(dir); //std::cout << "--VERTEX: dir " << dir << " " << iter->first << " seq len " << iter->second->getSeqLen() << " eges size " << edges.size() << std::endl; // for (auto& i : edges) // std::cerr << " EDGE: " << i->getStartID() << " " << i->getEndID()<< std::endl; // If there is a single edge in this direction, merge the vertices // Don't merge singular self edges though if(edges.size() == 1 && !edges.front()->isSelf()) { // Check that the edge back is singular as well Edge* pSingle = edges.front(); Edge* pTwin = pSingle->getTwin(); Vertex* pV2 = pSingle->getEnd(); //std::cerr << "...edge back edge counts " << pV2->countEdges(pTwin->getDir()) << std::endl; if(pV2->countEdges(pTwin->getDir()) == 1) { //std::cerr << "merging " << std::endl; merge(iter->second, pSingle); graph_changed = true; } } ++iter; } } } // // Rename the vertices to have a sequential idx // starting with prefix. This requires extra memory // as we need to keep a vector of vertex pointers to reconstruct // the graph after the vertices are renamed. This should // only be done after the string graph has been simplified or // else it could require a lot of memory. // void Bigraph::renameVertices(const std::string& prefix) { size_t currIdx = 0; size_t numVertices = m_vertices.size(); std::vector vertexPtrVec(numVertices, 0); VertexPtrMapIter iter = m_vertices.begin(); while(iter != m_vertices.end()) { std::stringstream ss; ss << prefix << currIdx; std::string newlab = ss.str(); // jeremiah if (m_get_components) { int label = m_connected_components[iter->second->getID()]; if (label) { // is a connected component for (auto& i : m_connected_components) { if (i.second == label) m_reads_on_contigs[newlab].push_back(i.first); // i.first is read name of merged read } } } iter->second->setID(ss.str()); vertexPtrVec[currIdx] = iter->second; ++iter; ++currIdx; } // Clear the old graph m_vertices.clear(); // Re-add the vertices for(size_t i = 0; i < numVertices; ++i) addVertex(vertexPtrVec[i]); } // // Sort the adjacency list for each vertex by length // void Bigraph::sortVertexAdjListsByLen() { VertexPtrMapIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) iter->second->sortAdjListByLen(); } // // Sort the adjacency list for each vertex by ID // void Bigraph::sortVertexAdjListsByID() { VertexPtrMapIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) iter->second->sortAdjListByID(); } // // Validate that the graph is sane // void Bigraph::validate() { VertexPtrMapIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { iter->second->validate(); } } // // Flip a vertex // void Bigraph::flip(VertexID /*id*/) { assert(false); #if 0 // TODO: update this code Vertex* pVertex = getVertex(id); EdgePtrVec edges = pVertex->getEdges(); for(EdgePtrVecIter iter = edges.begin(); iter != edges.end(); ++iter) { // Get the old twin GraphEdgeType twin = iter->getTwin(); GraphEdgeType flipped = *iter; flipped.flip(); // Remove the edge from the source ver pVertex->removeEdge(*iter); pVertex->addEdge(flipped); // Update the partner by deleting the old twin and Vertex* pV2 = getVertex(twin.getStart()); pV2->removeEdge(twin); pV2->addEdge(flipped.getTwin()); } #endif } // // Get the IDs of the vertices that do not branch (both sense/antisense degree <= 1) // VertexIDVec Bigraph::getNonBranchingVertices() const { VertexIDVec out; VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { int senseEdges = iter->second->countEdges(ED_SENSE); int antisenseEdges = iter->second->countEdges(ED_ANTISENSE); if(antisenseEdges <= 1 && senseEdges <= 1) { out.push_back(iter->second->getID()); } } return out; } // // Get all the paths corresponding to the linear components of the graph // Precondition: all vertices have in/out degree at most 1 (no branching) // PathVector Bigraph::getLinearComponents() { PathVector outPaths; setColors(GC_WHITE); VertexPtrMapIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { // Output the linear path containing this vertex if it hasnt been visited already if(iter->second->getColor() != GC_BLACK) { outPaths.push_back(constructLinearPath(iter->second->getID())); } } assert(checkColors(GC_BLACK)); return outPaths; } // // Return all the path of nodes that can be linearally reached from this node // The path expands in both directions so the first node in the path is not necessarily the source // Path Bigraph::constructLinearPath(VertexID id) { Path sensePath; Path antisensePath; followLinear(id, ED_SENSE, sensePath); followLinear(id, ED_ANTISENSE, antisensePath); // Construct the final path Path final = reversePath(antisensePath); final.insert(final.end(), sensePath.begin(), sensePath.end()); return final; } // // Recursively follow the graph in the specified direction without branching // outPath is an out-parameter of the edges that were followed // void Bigraph::followLinear(VertexID id, EdgeDir dir, Path& outPath) { Vertex* pVertex = getVertex(id); EdgePtrVec edges = pVertex->getEdges(dir); // Color the vertex pVertex->setColor(GC_BLACK); if(edges.size() == 1) { Edge* pSingle = edges.front(); outPath.push_back(pSingle); // Correct the direction for the comp assert(pSingle->getDir() == dir); EdgeDir corrected_dir = correctDir(pSingle->getDir(), pSingle->getComp()); // Recurse followLinear(pSingle->getEndID(), corrected_dir, outPath); } } // Path Bigraph::reversePath(const Path& path) { Path out; for(Path::const_reverse_iterator iter = path.rbegin(); iter != path.rend(); ++iter) out.push_back((*iter)->getTwin()); return out; } // Vertex* Bigraph::getFirstVertex() const { if(m_vertices.empty()) return NULL; else return m_vertices.begin()->second; } // Returns a vector of pointers to the vertices VertexPtrVec Bigraph::getAllVertices() const { VertexPtrVec out; VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) out.push_back(iter->second); return out; } // Returns a vector of pointers to the vertices /*VertexPtrVec Bigraph::getAllKeepVertices() const { VertexPtrVec out; VertexPtrMapConstIter iter = m_vertices_tokeep.begin(); for(; iter != m_vertices_tokeep.end(); ++iter) out.push_back(iter->second); return out; }*/ // // Append vertex sequences to the vector void Bigraph::getVertexSequences(std::vector& outSequences) const { VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) outSequences.push_back(iter->second->getSeq().toString()); } // // Visit each vertex and call the function pointer // The function returns TRUE if it modifies the graph // bool Bigraph::visit(VertexVisitFunction f) { bool modified = false; VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { modified = f(this, iter->second) || modified; } return modified; } // // Set all the vertices and edges in the graph to the given color // void Bigraph::setColors(GraphColor c) { VertexPtrMapIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { iter->second->setColor(c); iter->second->setEdgeColors(c); } } // // Get/Set the containment flag // void Bigraph::setContainmentFlag(bool b) { m_hasContainment = b; } // bool Bigraph::hasContainment() const { return m_hasContainment; } // // Get/Set the exact mode flag // void Bigraph::setExactMode(bool b) { m_isExactMode = b; } // bool Bigraph::isExactMode() const { return m_isExactMode; } // // Get/Set the transitive flag // void Bigraph::setTransitiveFlag(bool b) { m_hasTransitive = b; } // bool Bigraph::hasTransitive() const { return m_hasTransitive; } // // // void Bigraph::setMinOverlap(int mo) { m_minOverlap = mo; } // int Bigraph::getMinOverlap() const { return m_minOverlap; } // // // void Bigraph::setErrorRate(double er) { m_errorRate = er; } // double Bigraph::getErrorRate() const { return m_errorRate; } // // Check if all the vertices in the graph are the given color // bool Bigraph::checkColors(GraphColor c) { VertexPtrMapIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { if(iter->second->getColor() != c) { std::cerr << "Warning vertex " << iter->second->getID() << " is color " << iter->second->getColor() << " expected " << c << "\n"; return false; } } return true; } // // Output simple stats // void Bigraph::stats() const { int numVerts = 0; int numEdges = 0; VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { numEdges += iter->second->countEdges(); ++numVerts; } std::cout << "Graph has " << numVerts << " vertices and " << numEdges << " edges\n"; } // // // size_t Bigraph::getNumVertices() const { return m_vertices.size(); } // // Output mem stats // void Bigraph::printMemSize() const { size_t numVerts = 0; size_t vertMem = 0; size_t numEdges = 0; size_t edgeMem = 0; VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { ++numVerts; vertMem += iter->second->getMemSize(); EdgePtrVec edges = iter->second->getEdges(); for(EdgePtrVecIter edgeIter = edges.begin(); edgeIter != edges.end(); ++edgeIter) { ++numEdges; edgeMem += (*edgeIter)->getMemSize(); } } //printf("num verts: %zu using %zu bytes (%.2lf per vert)\n", numVerts, vertMem, double(vertMem) / numVerts); //printf("num edges: %zu using %zu bytes (%.2lf per edge)\n", numEdges, edgeMem, double(edgeMem) / numEdges); //printf("total: %zu\n", edgeMem + vertMem); } // // Write the graph to a dot file // void Bigraph::writeDot(const std::string& filename, int dotFlags) const { std::ofstream out(filename.c_str()); std::string graphType = (dotFlags & DF_UNDIRECTED) ? "graph" : "digraph"; out << graphType << " G\n{\n"; VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { VertexID id = iter->second->getID(); std::string label = (dotFlags & DF_NOID) ? "" : id; out << "\"" << id << "\" [ label=\"" << label << "\" "; if(dotFlags & DF_COLORED) out << " style=\"filled\" fillcolor=\"" << getColorString(iter->second->getColor()) << "\" "; out << "];\n"; iter->second->writeEdges(out, dotFlags); } out << "}\n"; out.close(); } // // Write the graph to an ASQG file // void Bigraph::writeASQG(const std::string& filename) const { std::ostream* pWriter = createWriter(filename); // Header ASQG::HeaderRecord headerRecord; headerRecord.setOverlapTag(m_minOverlap); headerRecord.setErrorRateTag(m_errorRate); headerRecord.setTransitiveTag(m_hasTransitive); headerRecord.setContainmentTag(m_hasContainment); headerRecord.write(*pWriter); VertexPtrMapConstIter iter; // Vertices for(iter = m_vertices.begin(); iter != m_vertices.end(); ++iter) { ASQG::VertexRecord vertexRecord(iter->second->getID(), iter->second->getSeq().toString()); vertexRecord.write(*pWriter); } // Edges for(iter = m_vertices.begin(); iter != m_vertices.end(); ++iter) { EdgePtrVec edges = iter->second->getEdges(); for(EdgePtrVecIter edgeIter = edges.begin(); edgeIter != edges.end(); ++edgeIter) { // We write one record for every bidirectional edge so only write edges // that are in canonical form (where id1 < id2) Overlap ovr = (*edgeIter)->getOverlap(); if(ovr.id[0] <= ovr.id[1]) { // Containment edges are in both directions so only output one // record if it is a containment if(!ovr.isContainment() || ((*edgeIter)->getDir() == ED_SENSE)) { ASQG::EdgeRecord edgeRecord(ovr); edgeRecord.write(*pWriter); } } } } delete pWriter; } // std::string Bigraph::getColorString(GraphColor c) { switch(c) { case GC_WHITE: return "white"; case GC_GRAY: return "gray"; case GC_BLACK: return "black"; case GC_BLUE: return "blue"; case GC_RED: return "red"; default: return "black"; } } ================================================ FILE: src/SGA/Bigraph/Bigraph.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Bidirectional graph // #ifndef BIGRAPH_H #define BIGRAPH_H #include #include #include #include #include "GraphCommon.h" #include "Vertex.h" #include "Edge.h" #include "HashMap.h" #include // // Typedefs // //typedef std::map VertexPtrMap; //typedef __gnu_cxx::hash_map VertexPtrMap; //typedef std::tr1::unordered_map VertexPtrMap; // JEREMIAH commented to switch to normal unordered typedef std::unordered_map VertexPtrMap; //typedef SparseHashMap VertexPtrMap;// JEREMIAH typedef VertexPtrMap::iterator VertexPtrMapIter; typedef VertexPtrMap::const_iterator VertexPtrMapConstIter; class Bigraph; typedef bool(*VertexVisitFunction)(Bigraph*, Vertex*); typedef EdgePtrVec Path; // alias typedef std::vector PathVector; typedef std::vector VertexIDVec; typedef std::vector VertexPtrVec; class Bigraph { public: Bigraph(); ~Bigraph(); // Add a vertex void addVertex(Vertex* pVert); // Remove a vertex // removeIslandVertex removes a vertex that is guarenteed to not have edges // removeConnectedVertex removes a (possibly) connected vertex and all the edges to/from it void removeIslandVertex(Vertex* pVertex); void removeIslandVertexNoErase(Vertex* pVertex); void removeConnectedVertex(Vertex* pVertex); // Check if a vertex exists bool hasVertex(VertexID id); // Get a vertex Vertex* getVertex(VertexID id) const; // Add an edge void addEdge(Vertex* pVertex, Edge* pEdge); // Remove an edge void removeEdge(const EdgeDesc& ed); // Remove all edges marked by color c int sweepVertices(GraphColor c); int sweepEdges(GraphColor c); // Merge vertices void mergeVertices(VertexID id1, VertexID id2); // Merge vertices that are joined by the specified edge void merge(Vertex* pV1, Edge* pEdge); // Rename all the vertices in the graph void renameVertices(const std::string& prefix = ""); // Simplify the graph by removing transitive edges void simplify(); // Validate that the graph is sane void validate(); // Flip a given vertex void flip(VertexID id); // Sort all the vertex adjacency lists void sortVertexAdjListsByLen(); void sortVertexAdjListsByID(); // Get the IDs of the vertices that do not branch (both sense/antisense degree <= 1) VertexIDVec getNonBranchingVertices() const; // Get the linear components of a non-branching graph PathVector getLinearComponents(); // Return all the path of nodes that can be linearally reached from this node // The path expands in both directions so the first node in the path is not necessarily the source Path constructLinearPath(VertexID id); // Reverse a path static Path reversePath(const Path& path); // Returns an iterator to the first vertex in the graph. // If the graph is empty, a null pointer is returned Vertex* getFirstVertex() const; // Print simple summary statistics to stdout void stats() const; void printMemSize() const; size_t getNumVertices() const; // Visit each vertex in the graph and perform the visit function bool visit(VertexVisitFunction f); bool visit(VertexVisitFunction f, std::stringstream &stream); // VertexPtrVec getAllVertices() const; VertexPtrVec getAllKeepVertices() const; // Append each vertex sequence to the vector of strings void getVertexSequences(std::vector& outSequences) const; // Visit each vertex in the graph and call the visit functor object template bool visit(VF& vf) { bool modified = false; vf.previsit(this); VertexPtrMapConstIter iter = m_vertices.begin(); for(; iter != m_vertices.end(); ++iter) { modified = vf.visit(this, iter->second) || modified; } vf.postvisit(this); return modified; } // Set the colors for the entire graph void setColors(GraphColor c); // Check the colors for the entire graph bool checkColors(GraphColor c); // Get/Set the containment flag void setContainmentFlag(bool b); bool hasContainment() const; // void setTransitiveFlag(bool b); bool hasTransitive() const; // void setMinOverlap(int mo); int getMinOverlap() const; // void setErrorRate(double er); double getErrorRate() const; void setExactMode(bool b); bool isExactMode() const; // Write the graph to a file void writeDot(const std::string& filename, int dotFlags = 0) const; void writeASQG(const std::string& filename) const; // Returns an allocator for the edges of the graph SimpleAllocator* getEdgeAllocator() { return m_pEdgeAllocator; } // Returns an allocator for the vertices of the graph SimpleAllocator* getVertexAllocator() { return m_pVertexAllocator; } // Return a string for a color code static std::string getColorString(GraphColor c); // return the vertex map JEREMIAH //VertexPtrMap getVertexMap() { return m_vertices; } //JEREMIAH bool m_get_components = false; std::unordered_map m_connected_components; int m_label = 0; std::unordered_map> m_reads_on_contigs; private: // Simplify the graph by compacting edges in the given direction void simplify(EdgeDir dir); void followLinear(VertexID id, EdgeDir dir, Path& outPath); // // data // VertexPtrMap m_vertices; //VertexPtrMap m_vertices_tokeep; //JEREMIAH // Graph parameters bool m_hasContainment; bool m_hasTransitive; bool m_isExactMode; int m_minOverlap; double m_errorRate; // Memory management SimpleAllocator* m_pVertexAllocator; SimpleAllocator* m_pEdgeAllocator; }; #endif ================================================ FILE: src/SGA/Bigraph/Edge.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Base bidirectional edge class // #include "Edge.h" #include "Vertex.h" // EdgeDesc Edge::getTwinDesc() const { return EdgeDesc(getStart(), getTwinDir(), getComp()); } // Get the edge's label std::string Edge::getLabel() const { const Edge* pTwin = getTwin(); const Vertex* pEndpoint = m_pEnd; // get the unmatched coordinates in V2 SeqCoord unmatched = pTwin->getMatchCoord().complement(); std::string seq = unmatched.getSubstring(pEndpoint->getStr()); if(getComp() == EC_REVERSE) seq = reverseComplement(seq); return seq; } // Join the edge pEdge into this edge, adding to the start void Edge::join(const Edge* pEdge) { // Update the match coordinate Match m12 = pEdge->getMatch(); Match m23 = getMatch(); m_matchCoord = m12.inverseTranslate(m23.coord[0]); if(pEdge->getComp() == EC_REVERSE) flip(); // Now, update the twin of this edge to extend to the twin of pEdge m_pTwin->extend(pEdge->getTwin()); } // Extend this edge by adding pEdge to the end void Edge::extend(const Edge* pEdge) { if(pEdge->getComp() == EC_REVERSE) flipComp(); m_pEnd = pEdge->getEnd(); } // return the mapping from V1 to V2 via this edge // If necessary, flip the SC of V2 so that it is // in the same coordinate system as V1 Match Edge::getMatch() const { const SeqCoord& sc = getMatchCoord(); const SeqCoord& tsc = m_pTwin->getMatchCoord(); return Match(sc, tsc, getComp() == EC_REVERSE, -1); } // The overlap structure implied by this edge Overlap Edge::getOverlap() const { return Overlap(getStartID(), getEndID(), getMatch()); } // Get the matching portion of V1 described by this edge std::string Edge::getMatchStr() const { return m_matchCoord.getSubstring(getStart()->getStr()); } // Return the length of the sequence size_t Edge::getSeqLen() const { SeqCoord unmatched = m_pTwin->getMatchCoord().complement(); return unmatched.length(); } void Edge::offsetMatch(int offset) { m_matchCoord.interval.start += offset; m_matchCoord.interval.end += offset; } void Edge::extendMatch(int ext_len) { m_matchCoord.interval.end += ext_len; } // Bump the edges of the match outwards so it covers the entire // sequence void Edge::extendMatchFullLength() { if(m_matchCoord.isLeftExtreme()) m_matchCoord.interval.end = m_matchCoord.seqlen - 1; else m_matchCoord.interval.start = 0; } void Edge::updateSeqLen(int newLen) { m_matchCoord.seqlen = newLen; } // Validate that the edge members are sane void Edge::validate() const { const Edge* pTwin = getTwin(); std::string m_v1 = getMatchStr(); std::string m_v2 = pTwin->getMatchStr(); if(getComp() == EC_REVERSE) m_v2 = reverseComplement(m_v2); bool error = false; if(m_v1.length() != m_v2.length()) { std::cerr << "Error, matching strings are not the same length\n"; error = true; } if(error) { std::cerr << "V1M: " << m_v1 << "\n"; std::cerr << "V2M: " << m_v2 << "\n"; std::cerr << "V1MC: " << getMatchCoord() << "\n"; std::cerr << "V2MC: " << pTwin->getMatchCoord() << "\n"; std::cerr << "V1: " << getStart()->getSeq() << "\n"; std::cerr << "Validation failed for edge " << *this << "\n"; assert(false); } } // Output std::ostream& operator<<(std::ostream& out, const Edge& obj) { out << obj.m_pEnd->getID() << "," << obj.getDir() << "," << obj.getComp(); return out; } ================================================ FILE: src/SGA/Bigraph/Edge.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Base bidirectional edge class // #ifndef EDGE_H #define EDGE_H #include #include "Match.h" #include "Util.h" #include "GraphCommon.h" #include "EdgeDesc.h" #include "Vertex.h" #include "BitChar.h" #include "SimpleAllocator.h" // Packed structure holding the direction and comp of an edge // The EdgeDir/EdgeComp enums (which only have values 0/1) are used // as the interface for this class so the set flags are cast to/from // these types. struct EdgeData { public: EdgeData() {} // Setters void setDir(EdgeDir dir) { if(dir == ED_ANTISENSE) m_data.set(DIR_BIT, true); else m_data.set(DIR_BIT, false); } void setComp(EdgeComp comp) { if(comp == EC_REVERSE) m_data.set(COMP_BIT, true); else m_data.set(COMP_BIT, false); } void flipDir() { m_data.flip(DIR_BIT); } void flipComp() { m_data.flip(COMP_BIT); } // Getters inline EdgeDir getDir() const { return m_data.test(DIR_BIT) ? ED_ANTISENSE : ED_SENSE; } inline EdgeComp getComp() const { return m_data.test(COMP_BIT) ? EC_REVERSE : EC_SAME; } private: static const size_t DIR_BIT = 0; static const size_t COMP_BIT = 1; BitChar m_data; }; class Edge { public: Edge(Vertex* end, EdgeDir dir, EdgeComp comp, SeqCoord m) : m_pEnd(end), m_pTwin(NULL), m_matchCoord(m), m_color(GC_WHITE), isTrusted(false) { m_edgeData.setDir(dir); m_edgeData.setComp(comp); } ~Edge() { } // High level modification functions // Join merges pEdge into this edge, with pEdge describing the starting point void join(const Edge* pEdge); // Extend merged pEdge into this edge, with pEdge describing the endpoint void extend(const Edge* pEdge); // Post merge update function void update() {} // Sequence Coordinate functions // update functions void extendMatchFullLength(); void extendMatch(int ext_len); void offsetMatch(int offset); void updateSeqLen(int newLen); // access functions size_t getSeqLen() const; size_t getMatchLength() const { return m_matchCoord.length(); } const SeqCoord& getMatchCoord() const { return m_matchCoord; } std::string getMatchStr() const; Match getMatch() const; Overlap getOverlap() const; // setters void setTwin(Edge* pEdge) { m_pTwin = pEdge; } void setColor(GraphColor c) { m_color = c; } // getters VertexID getStartID() const { return getStart()->getID(); } VertexID getEndID() const { return m_pEnd->getID(); } inline Vertex* getStart() const { assert(m_pTwin != NULL); return m_pTwin->getEnd(); } inline Vertex* getEnd() const { return m_pEnd; } inline EdgeDir getDir() const { return m_edgeData.getDir(); } inline EdgeComp getComp() const { return m_edgeData.getComp(); } inline Edge* getTwin() const { assert(m_pTwin != NULL); return m_pTwin; } EdgeDesc getTwinDesc() const; std::string getLabel() const; bool isSelf() const { return getStart() == getEnd(); } inline GraphColor getColor() const { return m_color; } size_t getMemSize() const { return sizeof(*this); } // Returns the direction of an edge that continues in the same direction // as this edge, corrected for complementary inline EdgeDir getTransitiveDir() const { return (getComp() == EC_SAME) ? getDir() : !getDir(); } // Make the direction of the edge that its twin should point along inline EdgeDir getTwinDir() const { return (getComp() == EC_SAME) ? !getDir() : getDir(); } inline EdgeDesc getDesc() const { return EdgeDesc(getEnd(), getDir(), getComp()); } // Flip the edge inline void flipComp() { m_edgeData.flipComp(); } inline void flipDir() { m_edgeData.flipDir(); } void flip() { flipComp(); flipDir(); } // Memory management //void* operator new(size_t /*size*/, SimpleAllocator* pAllocator) //{ // return pAllocator->alloc(); //} //void operator delete(void* /*target*/, size_t /*size*/) //{ // Deletions are handled at the graph/pool level. The lifetime of an edge // is as long as the graph it belongs to, even if it is deleted before // the graph. //} // Validate that the edge is sane void validate() const; // Output friend std::ostream& operator<<(std::ostream& out, const Edge& obj); protected: // Global new is not allowed, allocation must go through the memory pool // belonging to the graph. //void* operator new(size_t size) { return malloc(size); } Edge() {}; // Default constructor is not allowed Vertex* m_pEnd; Edge* m_pTwin; SeqCoord m_matchCoord; GraphColor m_color; EdgeData m_edgeData; // dir/comp member public: bool isTrusted; }; #endif ================================================ FILE: src/SGA/Bigraph/EdgeDesc.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // EdgeDesc - A unique description of an edge // #include "EdgeDesc.h" #include "Vertex.h" // Operators bool EdgeDesc::operator<(const EdgeDesc& obj) const { assert(pVertex != NULL && obj.pVertex != NULL); if(pVertex->getID() < obj.pVertex->getID()) return true; else if(pVertex->getID() > obj.pVertex->getID()) return false; else if(dir < obj.dir) return true; else if(dir > obj.dir) return false; else if(comp < obj.comp) return true; else if(comp > obj.comp) return false; return false; } bool EdgeDesc::operator==(const EdgeDesc& obj) const { assert(pVertex != NULL && obj.pVertex != NULL); return pVertex->getID() == obj.pVertex->getID() && dir == obj.dir && comp == obj.comp; } std::ostream& operator<<(std::ostream& out, const EdgeDesc& ed) { assert(ed.pVertex != NULL); out << ed.pVertex->getID() << "," << ed.dir << "," << ed.comp; return out; } ================================================ FILE: src/SGA/Bigraph/EdgeDesc.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // EdgeDesc - A unique description of an edge // #ifndef EDGEDESC_H #define EDGEDESC_H #include "GraphCommon.h" class Vertex; struct EdgeDesc { EdgeDesc() : pVertex(NULL) {} EdgeDesc(Vertex* pV, EdgeDir d, EdgeComp c) : pVertex(pV), dir(d), comp(c) {} Vertex* pVertex; EdgeDir dir; EdgeComp comp; // inline EdgeDir getTransitiveDir() const { return (comp == EC_SAME) ? dir : !dir; } inline EdgeDir getTwinDir() const { return (comp == EC_SAME) ? !dir : dir; } // Operators bool operator<(const EdgeDesc& obj) const; bool operator==(const EdgeDesc& obj) const; friend std::ostream& operator<<(std::ostream& out, const EdgeDesc& ed); }; #endif ================================================ FILE: src/SGA/Bigraph/GraphCommon.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // GraphCommon - Definitions and functions common // to the grpah implementation // #ifndef GRAPHCOMMON_H #define GRAPHCOMMON_H #include #include "Util.h" // The directions an edge can take. // Do not change the values enum EdgeDir { ED_SENSE = 0, ED_ANTISENSE = 1, ED_COUNT = 2 }; // Flag indicating whether the sequences linked by an edge // are from the same strand or not. // Do not change the values enum EdgeComp { EC_SAME = 0, EC_REVERSE = 1 }; // Array holding the directions, for iteration const EdgeDir EDGE_DIRECTIONS[ED_COUNT] = { ED_SENSE, ED_ANTISENSE }; // Flags specifying how the dot file should be drawn enum DotFlags { DF_UNDIRECTED = 0x01, DF_ANNOTATIONS = 0x02, DF_COLORED = 0x04, DF_NOID = 0x08 }; // GraphColors are generic flags that can be used to indicate state typedef uint8_t GraphColor; const GraphColor GC_WHITE = 0; const GraphColor GC_GRAY = 1; const GraphColor GC_BLACK = 2; const GraphColor GC_BLUE = 3; const GraphColor GC_RED = 4; // Typedefs typedef std::string VertexID; typedef std::vector VertexIDVec; // // Edge Operations // inline EdgeDir operator!(const EdgeDir& dir) { return (dir == ED_SENSE) ? ED_ANTISENSE : ED_SENSE; } inline EdgeComp operator!(const EdgeComp& comp) { return (comp == EC_SAME) ? EC_REVERSE : EC_SAME; } // Correct an edges direction, given the relationship between the nodes inline EdgeDir correctDir(EdgeDir dir, EdgeComp comp) { return (comp == EC_SAME) ? dir : !dir; } #endif ================================================ FILE: src/SGA/Bigraph/Makefile.am ================================================ noinst_LIBRARIES = libbigraph.a libbigraph_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Thirdparty \ -I$(top_srcdir)/src/SGA/SQG libbigraph_a_SOURCES = \ Bigraph.h Bigraph.cpp \ Vertex.h Vertex.cpp \ Edge.h Edge.cpp \ EdgeDesc.h EdgeDesc.cpp \ GraphCommon.h ================================================ FILE: src/SGA/Bigraph/Makefile.in ================================================ # Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/SGA/Bigraph ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libbigraph_a_AR = $(AR) $(ARFLAGS) libbigraph_a_LIBADD = am_libbigraph_a_OBJECTS = libbigraph_a-Bigraph.$(OBJEXT) \ libbigraph_a-Vertex.$(OBJEXT) libbigraph_a-Edge.$(OBJEXT) \ libbigraph_a-EdgeDesc.$(OBJEXT) libbigraph_a_OBJECTS = $(am_libbigraph_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libbigraph_a-Bigraph.Po \ ./$(DEPDIR)/libbigraph_a-Edge.Po \ ./$(DEPDIR)/libbigraph_a-EdgeDesc.Po \ ./$(DEPDIR)/libbigraph_a-Vertex.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libbigraph_a_SOURCES) DIST_SOURCES = $(libbigraph_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libbigraph.a libbigraph_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Thirdparty \ -I$(top_srcdir)/src/SGA/SQG libbigraph_a_SOURCES = \ Bigraph.h Bigraph.cpp \ Vertex.h Vertex.cpp \ Edge.h Edge.cpp \ EdgeDesc.h EdgeDesc.cpp \ GraphCommon.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/SGA/Bigraph/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/SGA/Bigraph/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libbigraph.a: $(libbigraph_a_OBJECTS) $(libbigraph_a_DEPENDENCIES) $(EXTRA_libbigraph_a_DEPENDENCIES) $(AM_V_at)-rm -f libbigraph.a $(AM_V_AR)$(libbigraph_a_AR) libbigraph.a $(libbigraph_a_OBJECTS) $(libbigraph_a_LIBADD) $(AM_V_at)$(RANLIB) libbigraph.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbigraph_a-Bigraph.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbigraph_a-Edge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbigraph_a-EdgeDesc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbigraph_a-Vertex.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libbigraph_a-Bigraph.o: Bigraph.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-Bigraph.o -MD -MP -MF $(DEPDIR)/libbigraph_a-Bigraph.Tpo -c -o libbigraph_a-Bigraph.o `test -f 'Bigraph.cpp' || echo '$(srcdir)/'`Bigraph.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-Bigraph.Tpo $(DEPDIR)/libbigraph_a-Bigraph.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Bigraph.cpp' object='libbigraph_a-Bigraph.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-Bigraph.o `test -f 'Bigraph.cpp' || echo '$(srcdir)/'`Bigraph.cpp libbigraph_a-Bigraph.obj: Bigraph.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-Bigraph.obj -MD -MP -MF $(DEPDIR)/libbigraph_a-Bigraph.Tpo -c -o libbigraph_a-Bigraph.obj `if test -f 'Bigraph.cpp'; then $(CYGPATH_W) 'Bigraph.cpp'; else $(CYGPATH_W) '$(srcdir)/Bigraph.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-Bigraph.Tpo $(DEPDIR)/libbigraph_a-Bigraph.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Bigraph.cpp' object='libbigraph_a-Bigraph.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-Bigraph.obj `if test -f 'Bigraph.cpp'; then $(CYGPATH_W) 'Bigraph.cpp'; else $(CYGPATH_W) '$(srcdir)/Bigraph.cpp'; fi` libbigraph_a-Vertex.o: Vertex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-Vertex.o -MD -MP -MF $(DEPDIR)/libbigraph_a-Vertex.Tpo -c -o libbigraph_a-Vertex.o `test -f 'Vertex.cpp' || echo '$(srcdir)/'`Vertex.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-Vertex.Tpo $(DEPDIR)/libbigraph_a-Vertex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Vertex.cpp' object='libbigraph_a-Vertex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-Vertex.o `test -f 'Vertex.cpp' || echo '$(srcdir)/'`Vertex.cpp libbigraph_a-Vertex.obj: Vertex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-Vertex.obj -MD -MP -MF $(DEPDIR)/libbigraph_a-Vertex.Tpo -c -o libbigraph_a-Vertex.obj `if test -f 'Vertex.cpp'; then $(CYGPATH_W) 'Vertex.cpp'; else $(CYGPATH_W) '$(srcdir)/Vertex.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-Vertex.Tpo $(DEPDIR)/libbigraph_a-Vertex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Vertex.cpp' object='libbigraph_a-Vertex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-Vertex.obj `if test -f 'Vertex.cpp'; then $(CYGPATH_W) 'Vertex.cpp'; else $(CYGPATH_W) '$(srcdir)/Vertex.cpp'; fi` libbigraph_a-Edge.o: Edge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-Edge.o -MD -MP -MF $(DEPDIR)/libbigraph_a-Edge.Tpo -c -o libbigraph_a-Edge.o `test -f 'Edge.cpp' || echo '$(srcdir)/'`Edge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-Edge.Tpo $(DEPDIR)/libbigraph_a-Edge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Edge.cpp' object='libbigraph_a-Edge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-Edge.o `test -f 'Edge.cpp' || echo '$(srcdir)/'`Edge.cpp libbigraph_a-Edge.obj: Edge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-Edge.obj -MD -MP -MF $(DEPDIR)/libbigraph_a-Edge.Tpo -c -o libbigraph_a-Edge.obj `if test -f 'Edge.cpp'; then $(CYGPATH_W) 'Edge.cpp'; else $(CYGPATH_W) '$(srcdir)/Edge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-Edge.Tpo $(DEPDIR)/libbigraph_a-Edge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Edge.cpp' object='libbigraph_a-Edge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-Edge.obj `if test -f 'Edge.cpp'; then $(CYGPATH_W) 'Edge.cpp'; else $(CYGPATH_W) '$(srcdir)/Edge.cpp'; fi` libbigraph_a-EdgeDesc.o: EdgeDesc.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-EdgeDesc.o -MD -MP -MF $(DEPDIR)/libbigraph_a-EdgeDesc.Tpo -c -o libbigraph_a-EdgeDesc.o `test -f 'EdgeDesc.cpp' || echo '$(srcdir)/'`EdgeDesc.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-EdgeDesc.Tpo $(DEPDIR)/libbigraph_a-EdgeDesc.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EdgeDesc.cpp' object='libbigraph_a-EdgeDesc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-EdgeDesc.o `test -f 'EdgeDesc.cpp' || echo '$(srcdir)/'`EdgeDesc.cpp libbigraph_a-EdgeDesc.obj: EdgeDesc.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libbigraph_a-EdgeDesc.obj -MD -MP -MF $(DEPDIR)/libbigraph_a-EdgeDesc.Tpo -c -o libbigraph_a-EdgeDesc.obj `if test -f 'EdgeDesc.cpp'; then $(CYGPATH_W) 'EdgeDesc.cpp'; else $(CYGPATH_W) '$(srcdir)/EdgeDesc.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libbigraph_a-EdgeDesc.Tpo $(DEPDIR)/libbigraph_a-EdgeDesc.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EdgeDesc.cpp' object='libbigraph_a-EdgeDesc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libbigraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libbigraph_a-EdgeDesc.obj `if test -f 'EdgeDesc.cpp'; then $(CYGPATH_W) 'EdgeDesc.cpp'; else $(CYGPATH_W) '$(srcdir)/EdgeDesc.cpp'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libbigraph_a-Bigraph.Po -rm -f ./$(DEPDIR)/libbigraph_a-Edge.Po -rm -f ./$(DEPDIR)/libbigraph_a-EdgeDesc.Po -rm -f ./$(DEPDIR)/libbigraph_a-Vertex.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libbigraph_a-Bigraph.Po -rm -f ./$(DEPDIR)/libbigraph_a-Edge.Po -rm -f ./$(DEPDIR)/libbigraph_a-EdgeDesc.Po -rm -f ./$(DEPDIR)/libbigraph_a-Vertex.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/SGA/Bigraph/Vertex.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Vertex - Generic vertex class for bigraph // #include "Vertex.h" #include "Edge.h" #include Vertex::~Vertex() { EdgePtrVecIter iter = m_edges.begin(); for(; iter != m_edges.end(); ++iter) { delete *iter; *iter = NULL; } } // Merging two string vertices has two parts // First, the sequence of the vertex is extended // by the the content of the edge label // Then, all the edges that are pointing to this node // must be updated to contain the extension of the vertex void Vertex::merge(Edge* pEdge) { Edge* pTwin = pEdge->getTwin(); //std::cout << "Adding label to " << getID() << " str: " << pSE->getLabel() << "\n"; // Merge the sequence DNAEncodedString label = pEdge->getLabel(); size_t label_len = label.length(); pEdge->updateSeqLen(m_seq.length() + label_len); bool prepend = false; if(pEdge->getDir() == ED_SENSE) { m_seq.append(label); } else { label.append(m_seq); std::swap(m_seq, label); prepend = true; } // Update the coverage value of the vertex m_coverage += pEdge->getEnd()->getCoverage(); pEdge->extendMatch(label_len); pTwin->extendMatchFullLength(); // All the SeqCoords for the edges must have their seqlen field updated // Also, if we prepended sequence to this edge, all the matches in the // SENSE direction must have their coordinates offset size_t newLen = m_seq.length(); for(EdgePtrVecIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) { Edge* pUpdateEdge = *iter; pUpdateEdge->updateSeqLen(newLen); if(prepend && pUpdateEdge->getDir() == ED_SENSE && pEdge != pUpdateEdge) pUpdateEdge->offsetMatch(label_len); } #ifdef VALIDATE VALIDATION_WARNING("Vertex::merge") validate(); #endif } void Vertex::validate() const { for(EdgePtrVecConstIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) { (*iter)->validate(); /* std::string label = pSE->getLabel(); StringVertex* pEnd = SV_CAST(pSE->getEnd()); std::string vertSeq = pEnd->getSeq(); EdgeDir suffixDir = (pSE->getComp() == EC_SAME) ? pSE->getDir() : !pSE->getDir(); std::string vertSuffix = (suffixDir == ED_SENSE) ? vertSeq.substr(vertSeq.length() - label.length()) : vertSeq.substr(0, label.length()); if(pSE->getComp() == EC_REVERSE) vertSuffix = reverseComplement(vertSuffix); if(vertSuffix != label) { std::cerr << "Warning edge label " << label << " does not match vertex suffix " << vertSuffix << "\n"; } */ } } // void Vertex::sortAdjListByID() { EdgeIDComp comp; std::sort(m_edges.begin(), m_edges.end(), comp); } void Vertex::sortAdjListByLen() { EdgeLenComp comp; std::sort(m_edges.begin(), m_edges.end(), comp); } // Mark duplicate edges with dupColor // Returns true if a duplicate has been marked bool Vertex::markDuplicateEdges(GraphColor dupColor) { // Sort the edge lists by length sortAdjListByLen(); bool hasDup = false; hasDup = markDuplicateEdges(ED_SENSE, dupColor) || hasDup; hasDup = markDuplicateEdges(ED_ANTISENSE, dupColor) || hasDup; return hasDup; } // Mark duplicate edges in the specified direction bool Vertex::markDuplicateEdges(EdgeDir dir, GraphColor dupColor) { for(EdgePtrVecIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) { Edge* pEdge = *iter; if(pEdge->getDir() == dir) { Vertex* pY = pEdge->getEnd(); if(pY->getColor() == GC_BLACK) { //std::cerr << getID() << " has a duplicate edge to " << pEdge->getEndID() << " in direction " << dir << "\n"; // This vertex is the endpoint of some other (potentially longer) edge // Delete the edge Edge* pTwin = pEdge->getTwin(); pTwin->setColor(dupColor); pEdge->setColor(dupColor); } else { assert(pY->getColor() == GC_WHITE); pY->setColor(GC_BLACK); } } } // Reset vertex colors for(EdgePtrVecIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) (*iter)->getEnd()->setColor(GC_WHITE); return true; } // Get a multioverlap object representing the overlaps for this vertex MultiOverlap Vertex::getMultiOverlap() const { MultiOverlap mo(getID(), getSeq().toString()); for(size_t i = 0; i < m_edges.size(); ++i) { Edge* pEdge = m_edges[i]; mo.add(pEdge->getEnd()->getSeq().toString(), pEdge->getOverlap()); } return mo; } // Add an edge void Vertex::addEdge(Edge* ep) { assert(ep->getStart() == this); #ifdef VALIDATE for(EdgePtrVecConstIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) { if((*iter)->getEndID() == ep->getEndID()) { std::cout << "Attempted to add duplicate edge with ID: " << ep->getEndID() << " to vertex: " << ep->getStartID() << "\n"; std::cout << "Added in desc: " << ep->getDesc() << " curr desc: " << (*iter)->getDesc() << "\n"; //assert(false); } } #endif m_edges.push_back(ep); } // Remove an edge from the edge list of the vertex // and free the storage. This does not remove the twin void Vertex::deleteEdge(Edge* pEdge) { removeEdge(pEdge); delete pEdge; pEdge = NULL; } // Remove an edge but do not destroy it void Vertex::removeEdge(Edge* pEdge) { EdgePtrVecIter iter = m_edges.begin(); while(iter != m_edges.end()) { if(*iter == pEdge) break; ++iter; } assert(iter != m_edges.end()); m_edges.erase(iter); } // void Vertex::removeEdge(const EdgeDesc& ed) { EdgePtrVecIter iter = findEdge(ed); if(iter == m_edges.end()) { std::cout << "EDGE NOT FOUND: " << ed << "\n"; } assert(iter != m_edges.end()); m_edges.erase(iter); } // Delete all the edges, and their twins, from this vertex void Vertex::deleteEdges() { EdgePtrVecIter iter = m_edges.begin(); for(; iter != m_edges.end(); ++iter) { Edge* pEdge = *iter; Edge* pTwin = pEdge->getTwin(); Vertex* pPartner = pEdge->getEnd(); pPartner->removeEdge(pTwin); delete pEdge; pEdge = NULL; delete pTwin; pTwin = NULL; *iter = NULL; } m_edges.clear(); } // Delete edges that are marked // This only deletes the edge and not its twin int Vertex::sweepEdges(GraphColor c) { int numRemoved = 0; EdgePtrVecIter iter = m_edges.begin(); while(iter != m_edges.end()) { Edge* pEdge = *iter; if(pEdge->getColor() == c) { delete pEdge; pEdge = NULL; iter = m_edges.erase(iter); ++numRemoved; } else ++iter; } return numRemoved; } // Return the iterator to the edge matching edgedesc EdgePtrVecIter Vertex::findEdge(const EdgeDesc& ed) { for(EdgePtrVecIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) { if((*iter)->getDesc() == ed) return iter; } return m_edges.end(); } // EdgePtrVecConstIter Vertex::findEdge(const EdgeDesc& ed) const { for(EdgePtrVecConstIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) { if((*iter)->getDesc() == ed) return iter; } return m_edges.end(); } // Check for the presence of an edge bool Vertex::hasEdge(Edge* pEdge) const { return hasEdge(pEdge->getDesc()); } // bool Vertex::hasEdge(const EdgeDesc& ed) const { return findEdge(ed) != m_edges.end(); } // bool Vertex::hasEdgeTo(const Vertex* pY) const { assert(pY != NULL); EdgePtrVecConstIter iter = m_edges.begin(); for(; iter != m_edges.end(); ++iter) if((*iter)->getEnd() == pY) return true; return false; } // Return the edge matching the descriptions Edge* Vertex::getEdge(const EdgeDesc& ed) { EdgePtrVecIter i = findEdge(ed); assert(i != m_edges.end()); return *i; } // Find edges to the specified vertex EdgePtrVec Vertex::findEdgesTo(VertexID id) { EdgePtrVecConstIter iter = m_edges.begin(); EdgePtrVec outEdges; for(; iter != m_edges.end(); ++iter) { if((*iter)->getEndID() == id) outEdges.push_back(*iter); } return outEdges; } // Returns the edge with the longest overlap length // in direction dir // Returns NULL if the vertex has no edges Edge* Vertex::getLongestOverlapEdge(EdgeDir dir) const { Edge* pOut = NULL; int maxOL = 0; EdgePtrVecConstIter iter = m_edges.begin(); for(; iter != m_edges.end(); ++iter) { if((*iter)->getDir() != dir) continue; int currOL = (*iter)->getMatchLength(); if(currOL > maxOL) { pOut = *iter; maxOL = currOL; } } return pOut; } // // Get the edges in a particular direction // This preserves the ordering of the edges // EdgePtrVec Vertex::getEdges(EdgeDir dir) const { EdgePtrVecConstIter iter = m_edges.begin(); EdgePtrVec outEdges; for(; iter != m_edges.end(); ++iter) { if((*iter)->getDir() == dir) outEdges.push_back(*iter); } return outEdges; } // Get the edges EdgePtrVec Vertex::getEdges() const { EdgePtrVec outEdges(m_edges.begin(), m_edges.end()); return outEdges; } void Vertex::setEdgeColors(GraphColor c) { for(EdgePtrVecIter iter = m_edges.begin(); iter != m_edges.end(); ++iter) (*iter)->setColor(c); } // Count the edges // This function is not necessarily constant time size_t Vertex::countEdges() const { return m_edges.size(); } // size_t Vertex::countEdges(EdgeDir dir) { EdgePtrVec ev = getEdges(dir); return ev.size(); } // Calculate the difference in overlap lengths between // the longest and second longest edge int Vertex::getOverlapLengthDiff(EdgeDir dir) const { int longest_len = 0; int second_longest_len = 0; EdgePtrVecConstIter iter = m_edges.begin(); for(; iter != m_edges.end(); ++iter) { if((*iter)->getDir() != dir) continue; int currOL = (*iter)->getMatchLength(); if(currOL > longest_len) { second_longest_len = longest_len; longest_len = currOL; } else if(currOL > second_longest_len) { second_longest_len = currOL; } } return longest_len - second_longest_len; } // Return the amount of memory this vertex is using, in bytes size_t Vertex::getMemSize() const { return sizeof(*this) + (m_edges.size() * sizeof(Edge*)) + m_seq.getMemSize(); } // Output edges in graphviz format void Vertex::writeEdges(std::ostream& out, int dotFlags) const { EdgePtrVecConstIter iter = m_edges.begin(); for(; iter != m_edges.end(); ++iter) { if(dotFlags & DF_UNDIRECTED) { if((*iter)->getStartID() < (*iter)->getEndID()) { out << "\"" << (*iter)->getStartID() << "\" -- \"" << (*iter)->getEndID() << "\""; } } else { out << "\"" << (*iter)->getStartID() << "\" -> \"" << (*iter)->getEndID(); std::string color = ((*iter)->getDir() == ED_SENSE) ? "black" : "red"; std::string label = ((*iter)->getComp() == EC_SAME) ? "S" : "F"; out << "\" [color=\"" << color << "\" "; out << "label=\"" << (*iter)->getMatchLength() << "\""; out << "];"; } out << "\n"; } } bool EdgeIDComp::operator()(const Edge* pA, const Edge* pB) { return pA->getEndID() < pB->getEndID(); } // Compare string edge points by length bool EdgeLenComp::operator()(const Edge* pA, const Edge* pB) { return pA->getSeqLen() < pB->getSeqLen(); } ================================================ FILE: src/SGA/Bigraph/Vertex.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Vertex - Generic vertex class for bigraph // #ifndef VERTEX_H #define VERTEX_H // Includes #include #include #include #include #include #include #include #include #include "GraphCommon.h" #include "QualityVector.h" #include "EncodedString.h" #include "SimpleAllocator.h" #include "EdgeDesc.h" #include "MultiOverlap.h" // Forward declare class Edge; // Default edge sorting function, by ID struct EdgeIDComp { bool operator()(const Edge* pA, const Edge* pB); }; // Edge sorting function, by length struct EdgeLenComp { bool operator()(const Edge* pA, const Edge* pB); }; // Typedefs typedef std::map EdgePtrMap; typedef std::vector EdgePtrVec; typedef std::set EdgeDescSet; typedef std::list EdgePtrList; typedef EdgePtrMap::iterator EdgePtrMapIter; typedef EdgePtrMap::const_iterator EdgePtrMapConstIter; typedef EdgePtrVec::iterator EdgePtrVecIter; typedef EdgePtrVec::const_iterator EdgePtrVecConstIter; typedef EdgePtrList::iterator EdgePtrListIter; typedef EdgePtrList::const_iterator EdgePtrListConstIter; class Vertex { public: Vertex(VertexID id, const std::string& s) : m_id(id), m_seq(s), m_color(GC_WHITE), m_coverage(1), m_isContained(false), m_isSuperRepeat(false) { //m_parent_id.push_back(id); //JEREMIAH /*std::cerr << "ID: " << id << "Seq: " << s << std::endl;*/ } ~Vertex(); // High-level modification functions // Merge another vertex into this vertex, as specified by pEdge void merge(Edge* pEdge); // sort the edges by the ID of the vertex they point to void sortAdjListByID(); // sort the edges by the length of the label of the edge void sortAdjListByLen(); // Ensure that all the edges are unique bool markDuplicateEdges(GraphColor dupColor); //JEREMIAH //void addParent(VertexID mid) { m_parent_id.push_back(mid);} ; //std::vector getParentID() { return m_parent_id; } ; // Get a multioverlap object representing the overlaps for this vertex MultiOverlap getMultiOverlap() const; // Edge list operations void addEdge(Edge* ep); void removeEdge(Edge* pEdge); void removeEdge(const EdgeDesc& ed); void deleteEdge(Edge* pEdge); void deleteEdges(); int sweepEdges(GraphColor c); bool hasEdge(Edge* pEdge) const; bool hasEdge(const EdgeDesc& ed) const; bool hasEdgeTo(const Vertex* pY) const; Edge* getEdge(const EdgeDesc& ed); EdgePtrVec findEdgesTo(VertexID id); EdgePtrVec getEdges(EdgeDir dir) const; EdgePtrVec getEdges() const; EdgePtrVecIter findEdge(const EdgeDesc& ed); EdgePtrVecConstIter findEdge(const EdgeDesc& ed) const; Edge* getLongestOverlapEdge(EdgeDir dir) const; size_t countEdges() const; size_t countEdges(EdgeDir dir); // Calculate the difference in overlap lengths between // the longest and second longest edge int getOverlapLengthDiff(EdgeDir dir) const; // Ensure the vertex data is sane void validate() const; // setters void setID(VertexID id) { m_id = id; } void setEdgeColors(GraphColor c); void setSeq(const std::string& s) { m_seq = s; } void setColor(GraphColor c) { m_color = c; } void setContained(bool c) { m_isContained = c; } void setSuperRepeat(bool b) { m_isSuperRepeat = b; } // getters VertexID getID() const { return m_id; } GraphColor getColor() const { return m_color; } const DNAEncodedString& getSeq() const { return m_seq; } std::string getStr() const { return m_seq.toString(); } size_t getSeqLen() const { return m_seq.length(); } size_t getMemSize() const; bool isContained() const { return m_isContained; } bool isSuperRepeat() const { return m_isSuperRepeat; } uint16_t getCoverage() const { return m_coverage; } // Memory management //void* operator new(size_t /*size*/, SimpleAllocator* pAllocator) //{ // return pAllocator->alloc(); //} //void operator delete(void* /*target*/, size_t /*size*/) //{ // delete does nothing since all allocations go through the memory pool // belonging to the graph. The memory allocated for the vertex will be // cleaned up when the graph is destroyed. //} // Output edges in graphviz format void writeEdges(std::ostream& out, int dotFlags) const; private: // Global new is disallowed, all allocations must go through the pool /*void* operator new(size_t size) { return malloc(size); }*/ // Ensure all the edges in DIR are unique bool markDuplicateEdges(EdgeDir dir, GraphColor dupColor); VertexID m_id; //std::vector m_parent_id; //JEREMIAH EdgePtrVec m_edges; DNAEncodedString m_seq; GraphColor m_color; // Counter of the number of vertices that have been merged into this one uint16_t m_coverage; bool m_isContained; bool m_isSuperRepeat; }; #endif ================================================ FILE: src/SGA/SGA/Makefile.am ================================================ noinst_LIBRARIES = libsga.a libsga_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/SuffixTools \ -I$(top_srcdir)/src/SGA/StringGraph \ -I$(top_srcdir)/SeqLib \ -I$(top_srcdir)/src/SGA/Algorithm \ -I$(top_srcdir)/src/SGA/SQG libsga_a_SOURCES = \ ##index.cpp index.h \ ##overlap.cpp overlap.h \ ## assemble.cpp assemble.h \ ## correct.cpp correct.h \ ## oview.cpp oview.h \ ## preprocess.cpp preprocess.h \ ## rmdup.cpp rmdup.h \ ## merge.cpp merge.h \ ## subgraph.cpp subgraph.h \ ## scaffold.cpp scaffold.h \ ## scaffold2fasta.cpp scaffold2fasta.h \ ## connect.cpp connect.h \ ## walk.cpp walk.h \ ## filter.cpp filter.h \ ## kmer-count.cpp kmer-count.h \ ## stats.cpp stats.h \ ## fm-merge.cpp fm-merge.h \ ## gmap.h gmap.cpp \ ## filterBAM.h filterBAM.cpp \ ## cluster.h cluster.cpp \ ## gen-ssa.h gen-ssa.cpp \ ## bwt2fa.h bwt2fa.cpp \ ## graph-diff.h graph-diff.cpp \ ## graph-concordance.h graph-concordance.cpp \ ## gapfill.h gapfill.cpp \ ## preqc.h preqc.cpp \ ## variant-detectability.h variant-detectability.cpp \ ## rewrite-evidence-bam.h rewrite-evidence-bam.cpp \ ## somatic-variant-filters-bam.h somatic-variant-filters.cpp \ ## haplotype-filter.h haplotype-filter.cpp \ OverlapCommon.h OverlapCommon.cpp \ SGACommon.h # LocalWords: srcdir ================================================ FILE: src/SGA/SGA/Makefile.in ================================================ # Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/SGA/SGA ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libsga_a_AR = $(AR) $(ARFLAGS) libsga_a_LIBADD = am_libsga_a_OBJECTS = libsga_a-OverlapCommon.$(OBJEXT) libsga_a_OBJECTS = $(am_libsga_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libsga_a-OverlapCommon.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsga_a_SOURCES) DIST_SOURCES = $(libsga_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libsga.a libsga_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/SuffixTools \ -I$(top_srcdir)/src/SGA/StringGraph \ -I$(top_srcdir)/SeqLib \ -I$(top_srcdir)/src/SGA/Algorithm \ -I$(top_srcdir)/src/SGA/SQG libsga_a_SOURCES = \ OverlapCommon.h OverlapCommon.cpp \ SGACommon.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/SGA/SGA/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/SGA/SGA/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libsga.a: $(libsga_a_OBJECTS) $(libsga_a_DEPENDENCIES) $(EXTRA_libsga_a_DEPENDENCIES) $(AM_V_at)-rm -f libsga.a $(AM_V_AR)$(libsga_a_AR) libsga.a $(libsga_a_OBJECTS) $(libsga_a_LIBADD) $(AM_V_at)$(RANLIB) libsga.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsga_a-OverlapCommon.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libsga_a-OverlapCommon.o: OverlapCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsga_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsga_a-OverlapCommon.o -MD -MP -MF $(DEPDIR)/libsga_a-OverlapCommon.Tpo -c -o libsga_a-OverlapCommon.o `test -f 'OverlapCommon.cpp' || echo '$(srcdir)/'`OverlapCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsga_a-OverlapCommon.Tpo $(DEPDIR)/libsga_a-OverlapCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapCommon.cpp' object='libsga_a-OverlapCommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsga_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsga_a-OverlapCommon.o `test -f 'OverlapCommon.cpp' || echo '$(srcdir)/'`OverlapCommon.cpp libsga_a-OverlapCommon.obj: OverlapCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsga_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsga_a-OverlapCommon.obj -MD -MP -MF $(DEPDIR)/libsga_a-OverlapCommon.Tpo -c -o libsga_a-OverlapCommon.obj `if test -f 'OverlapCommon.cpp'; then $(CYGPATH_W) 'OverlapCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapCommon.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsga_a-OverlapCommon.Tpo $(DEPDIR)/libsga_a-OverlapCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='OverlapCommon.cpp' object='libsga_a-OverlapCommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsga_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsga_a-OverlapCommon.obj `if test -f 'OverlapCommon.cpp'; then $(CYGPATH_W) 'OverlapCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/OverlapCommon.cpp'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libsga_a-OverlapCommon.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libsga_a-OverlapCommon.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # LocalWords: srcdir # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/SGA/SGA/OverlapCommon.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // OverlapCommon - Common wrapper used for finding overlaps // for a set of reads // #include "OverlapCommon.h" // Convert a line from a hits file into a vector of overlaps and sets the flag // indicating whether the read was found to be a substring of other reads // Only the forward read table is used since we only care about the IDs and length // of the read, not the sequence, so that we don't need an explicit reverse read table void OverlapCommon::parseHitsString(const std::string& hitString, const ReadInfoTable* pQueryRIT, const ReadInfoTable* pTargetRIT, const SuffixArray* pFwdSAI, const SuffixArray* pRevSAI, bool bCheckIDs, size_t& readIdx, size_t& sumBlockSize, OverlapVector& outVector, bool& isSubstring) { OverlapVector outvec; std::istringstream convertor(hitString); sumBlockSize = 0; // Read the overlap blocks for a read size_t numBlocks; convertor >> readIdx >> isSubstring >> numBlocks; for(size_t i = 0; i < numBlocks; ++i) { // Read the block OverlapBlock record; convertor >> record; //std::cout << "\t" << record << "\n"; // Iterate through the range and write the overlaps for(int64_t j = record.ranges.interval[0].lower; j <= record.ranges.interval[0].upper; ++j) { sumBlockSize += 1; const SuffixArray* pCurrSAI = (record.flags.isTargetRev()) ? pRevSAI : pFwdSAI; const ReadInfo& queryInfo = pQueryRIT->getReadInfo(readIdx); int64_t saIdx = j; // The index of the second read is given as the position in the SuffixArray index const ReadInfo& targetInfo = pTargetRIT->getReadInfo(pCurrSAI->get(saIdx).getID()); //std::cout << " HERE RER " << queryInfo.id << " " << targetInfo.id << " " << queryInfo.length << " " << targetInfo.length << "\n"; // Skip self alignments and non-canonical (where the query read has a lexo. higher name) if(queryInfo.id != targetInfo.id) { Overlap o = record.toOverlap(queryInfo.id, targetInfo.id, queryInfo.length, targetInfo.length); //std::cout << queryInfo.id << " " << targetInfo.id << " " << queryInfo.length << " " << targetInfo.length << "\n"; // The alignment logic above has the potential to produce duplicate alignments // To avoid this, we skip overlaps where the id of the first coord is lexo. lower than // the second or the match is a containment and the query is reversed (containments can be // output up to 4 times total). if(bCheckIDs && (o.id[0] < o.id[1] || (o.match.isContainment() && record.flags.isQueryRev()))) continue; outVector.push_back(o); } } } } ================================================ FILE: src/SGA/SGA/OverlapCommon.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // OverlapCommon - Common functions used in overlap methods // #ifndef OVERLAPCOMMON_H #define OVERLAPCOMMON_H #include "Util.h" #include "overlap.h" #include "SuffixArray.h" #include "SGACommon.h" #include "Timer.h" #include "ReadInfoTable.h" namespace OverlapCommon { // Parse a line from a .hits file into a variety of overlap-related data void parseHitsString(const std::string& hitString, const ReadInfoTable* pQueryRIT, const ReadInfoTable* pTargetRIT, const SuffixArray* pFwdSAI, const SuffixArray* pRevSAI, bool bCheckIDs, size_t& readIdx, size_t& sumBlockSize, OverlapVector& outVector, bool& isSubstring); }; #endif ================================================ FILE: src/SGA/SGA/SGACommon.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // SGACommon.h - Common definitions used in the // SGA programs // #ifndef SGACOMMON_H #define SGACOMMON_H // File extensions #define OVR_EXT ".ovr" #define HITS_EXT ".hits" #define RMDUPHITS_EXT ".rmhits" #define GMAPHITS_EXT ".gmhits" #define CTN_EXT ".ctn" #define ASQG_EXT ".asqg" #define SA_EXT ".sa" #define RSA_EXT ".rsa" #define BWT_EXT ".bwt" #define RBWT_EXT ".rbwt" #define SAI_EXT ".sai" #define RSAI_EXT ".rsai" #define SSA_EXT ".ssa" #define POPIDX_EXT ".popidx" // Default values #define DEFAULT_MIN_OVERLAP 45 #define DEFAULT_EXTRACT_LEN 100 #endif ================================================ FILE: src/SGA/SGA/index.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // index - Build a BWT/FM-index for a set of reads // #include #include #include #include "SGACommon.h" #include "Util.h" #include "index.h" #include "SuffixArray.h" #include "SeqReader.h" #include "SACAInducedCopying.h" #include "BWTDiskConstruction.h" #include "BWT.h" #include "Timer.h" #include "BWTCABauerCoxRosone.h" #include "BWTCARopebwt.h" #include "SampledSuffixArray.h" // // Getopt // #define SUBPROGRAM "index" static const char *INDEX_VERSION_MESSAGE = SUBPROGRAM " Version " PACKAGE_VERSION "\n" "Written by Jared Simpson.\n" "\n" "Copyright 2009 Wellcome Trust Sanger Institute\n"; static const char *INDEX_USAGE_MESSAGE = "Usage: " PACKAGE_NAME " " SUBPROGRAM " [OPTION] ... READSFILE\n" "Index the reads in READSFILE using a suffixarray/bwt\n" "\n" " -v, --verbose display verbose output\n" " --help display this help and exit\n" " -a, --algorithm=STR BWT construction algorithm. STR can be:\n" " sais - induced sort algorithm, slower but works for very long sequences (default)\n" " ropebwt - very fast and memory efficient. use this for short (<200bp) reads\n" " -d, --disk=NUM use disk-based BWT construction algorithm. The suffix array/BWT will be constructed\n" " for batchs of NUM reads at a time. To construct the suffix array of 200 megabases of sequence\n" " requires ~2GB of memory, set this parameter accordingly.\n" " -t, --threads=NUM use NUM threads to construct the index (default: 1)\n" " -c, --check validate that the suffix array/bwt is correct\n" " -p, --prefix=PREFIX write index to file using PREFIX instead of prefix of READSFILE\n" " --no-reverse suppress construction of the reverse BWT. Use this option when building the index\n" " for reads that will be error corrected using the k-mer corrector, which only needs the forward index\n" " --no-forward suppress construction of the forward BWT. Use this option when building the forward and reverse index separately\n" " --no-sai suppress construction of the SAI file. This option only applies to -a ropebwt\n" " -g, --gap-array=N use N bits of storage for each element of the gap array. Acceptable values are 4,8,16 or 32. Lower\n" " values can substantially reduce the amount of memory required at the cost of less predictable memory usage.\n" " When this value is set to 32, the memory requirement is essentially deterministic and requires ~5N bytes where\n" " N is the size of the FM-index of READS2.\n" " The default value is 8.\n" "\nReport bugs to " PACKAGE_BUGREPORT "\n\n"; namespace opt { static unsigned int verbose; static std::string readsFile; static std::string prefix; static std::string algorithm = "sais"; static int numReadsPerBatch = 2000000; static int numThreads = 1; static bool bDiskAlgo = false; static bool bBuildReverse = true; static bool bBuildForward = true; static bool bBuildSAI = true; static bool validate; static int gapArrayStorage = 4; } static const char* shortopts = "p:a:m:t:d:g:cv"; enum { OPT_HELP = 1, OPT_VERSION, OPT_NO_REVERSE, OPT_NO_FWD, OPT_NO_SAI }; static const struct option longopts[] = { { "verbose", no_argument, NULL, 'v' }, { "check", no_argument, NULL, 'c' }, { "prefix", required_argument, NULL, 'p' }, { "threads", required_argument, NULL, 't' }, { "disk", required_argument, NULL, 'd' }, { "gap-array", required_argument, NULL, 'g' }, { "algorithm", required_argument, NULL, 'a' }, { "no-reverse", no_argument, NULL, OPT_NO_REVERSE }, { "no-forward", no_argument, NULL, OPT_NO_FWD }, { "no-sai", no_argument, NULL, OPT_NO_SAI }, { "help", no_argument, NULL, OPT_HELP }, { "version", no_argument, NULL, OPT_VERSION }, { NULL, 0, NULL, 0 } }; int indexMain(int argc, char** argv) { Timer t("sga index"); parseIndexOptions(argc, argv); if(!opt::bDiskAlgo) { if(opt::algorithm == "sais") indexInMemorySAIS(); else if(opt::algorithm == "bcr") indexInMemoryBCR(); else if(opt::algorithm == "ropebwt") indexInMemoryRopebwt(); } else { indexOnDisk(); } return 0; } // void indexInMemoryBCR() { std::cout << "Building index for " << opt::readsFile << " in memory using BCR\n"; if(opt::bBuildForward || opt::bBuildReverse) { // Parse the initial read table std::vector readSequences; SeqReader reader(opt::readsFile); SeqRecord sr; while(reader.get(sr)) readSequences.push_back(sr.seq.toString()); if(opt::bBuildForward) { BWTCA::runBauerCoxRosone(&readSequences, opt::prefix + BWT_EXT, opt::prefix + SAI_EXT); } if(opt::bBuildReverse) { // Reverse all the reads for(size_t i = 0; i < readSequences.size(); ++i) readSequences[i] = reverse(readSequences[i].toString()); BWTCA::runBauerCoxRosone(&readSequences, opt::prefix + RBWT_EXT, opt::prefix + RSAI_EXT); } } } // void indexInMemoryRopebwt() { std::cout << "Building index for " << opt::readsFile << " in memory using ropebwt\n"; bool use_threads = opt::numThreads >= 4; if(opt::bBuildForward) { std::string bwt_filename = opt::prefix + BWT_EXT; std::string sai_filename = opt::prefix + SAI_EXT; BWTCA::runRopebwt(opt::readsFile, bwt_filename, use_threads, false); if(opt::bBuildSAI) { std::cout << "\t done bwt construction, generating .sai file\n"; BWT* pBWT = new BWT(bwt_filename); SampledSuffixArray ssa; ssa.buildLexicoIndex(pBWT, opt::numThreads); ssa.writeLexicoIndex(sai_filename); delete pBWT; } } if(opt::bBuildReverse) { std::string rbwt_filename = opt::prefix + RBWT_EXT; std::string rsai_filename = opt::prefix + RSAI_EXT; BWTCA::runRopebwt(opt::readsFile, rbwt_filename, use_threads, true); if(opt::bBuildSAI) { std::cout << "\t done rbwt construction, generating .rsai file\n"; BWT* pRBWT = new BWT(rbwt_filename); SampledSuffixArray ssa; ssa.buildLexicoIndex(pRBWT, opt::numThreads); ssa.writeLexicoIndex(rsai_filename); delete pRBWT; } } } // void indexInMemorySAIS() { std::cout << "Building index for " << opt::readsFile << " in memory using SAIS\n"; if(opt::bBuildForward || opt::bBuildReverse) { // Parse the initial read table ReadTable* pRT = new ReadTable(opt::readsFile); // Create and write the suffix array for the forward reads if(opt::bBuildForward) { buildIndexForTable(opt::prefix, pRT, false); } if(opt::bBuildReverse) { // Reverse all the reads pRT->reverseAll(); // Build the reverse suffix array buildIndexForTable(opt::prefix, pRT, true); } delete pRT; } } // void indexOnDisk() { std::cout << "Building index for " << opt::readsFile << " on disk\n"; BWTDiskParameters parameters; parameters.inFile = opt::readsFile; parameters.outPrefix = opt::prefix; parameters.bwtExtension = BWT_EXT; parameters.saiExtension = SAI_EXT; parameters.numReadsPerBatch = opt::numReadsPerBatch; parameters.numThreads = opt::numThreads; parameters.storageLevel = opt::gapArrayStorage; parameters.bBuildReverse = false; parameters.bUseBCR = (opt::algorithm == "bcr"); if(opt::bBuildForward) { buildBWTDisk(parameters); } if(opt::bBuildReverse) { parameters.bwtExtension = RBWT_EXT; parameters.saiExtension = RSAI_EXT; parameters.bBuildReverse = true; buildBWTDisk(parameters); } } // void buildIndexForTable(std::string prefix, const ReadTable* pRT, bool isReverse) { // Create suffix array from read table SuffixArray* pSA = new SuffixArray(pRT, opt::numThreads); if(opt::validate) { std::cout << "Validating suffix array\n"; pSA->validate(pRT); } std::string bwt_filename = prefix + (!isReverse ? BWT_EXT : RBWT_EXT); pSA->writeBWT(bwt_filename, pRT); std::string sufidx_filename = prefix + (!isReverse ? SAI_EXT : RSAI_EXT); pSA->writeIndex(sufidx_filename); delete pSA; pSA = NULL; } // // Handle command line arguments // void parseIndexOptions(int argc, char** argv) { bool die = false; for (char c; (c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1;) { std::istringstream arg(optarg != NULL ? optarg : ""); switch (c) { case 'p': arg >> opt::prefix; break; case '?': die = true; break; case 'c': opt::validate = true; break; case 'd': opt::bDiskAlgo = true; arg >> opt::numReadsPerBatch; break; case 't': arg >> opt::numThreads; break; case 'g': arg >> opt::gapArrayStorage; break; case 'a': arg >> opt::algorithm; break; case 'v': opt::verbose++; break; case OPT_NO_REVERSE: opt::bBuildReverse = false; break; case OPT_NO_FWD: opt::bBuildForward = false; break; case OPT_NO_SAI: opt::bBuildSAI = false; break; case OPT_HELP: std::cout << INDEX_USAGE_MESSAGE; exit(EXIT_SUCCESS); case OPT_VERSION: std::cout << INDEX_VERSION_MESSAGE; exit(EXIT_SUCCESS); } } // Transform algorithm parameter to lower case std::transform(opt::algorithm.begin(), opt::algorithm.end(), opt::algorithm.begin(), ::tolower); if (argc - optind < 1) { std::cerr << SUBPROGRAM ": missing arguments\n"; die = true; } else if (argc - optind > 1) { std::cerr << SUBPROGRAM ": too many arguments\n"; die = true; } if(opt::gapArrayStorage != 4 && opt::gapArrayStorage != 8 && opt::gapArrayStorage != 16 && opt::gapArrayStorage != 32) { std::cerr << SUBPROGRAM ": invalid argument, --gap-array,-g must be one of 4,8,16,32 (found: " << opt::gapArrayStorage << ")\n"; die = true; } if(opt::numThreads <= 0) { std::cerr << SUBPROGRAM ": invalid number of threads: " << opt::numThreads << "\n"; die = true; } if(opt::algorithm != "sais" && opt::algorithm != "bcr" && opt::algorithm != "ropebwt") { std::cerr << SUBPROGRAM ": unrecognized algorithm string " << opt::algorithm << ". --algorithm must be sais, bcr or ropebwt\n"; die = true; } if(opt::algorithm == "ropebwt" && opt::bDiskAlgo) { std::cerr << SUBPROGRAM ": the options -a ropebwt and -d are not compatible, please only use one.\n"; die = true; } if (die) { std::cout << "\n" << INDEX_USAGE_MESSAGE; exit(EXIT_FAILURE); } // Parse the input filenames opt::readsFile = argv[optind++]; if(opt::prefix.empty()) opt::prefix = stripFilename(opt::readsFile); // Check if input file is empty size_t filesize = getFilesize(opt::readsFile); if(filesize == 0) { std::cerr << SUBPROGRAM ": input file is empty\n"; exit(EXIT_FAILURE); } } ================================================ FILE: src/SGA/SGA/index.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // index - Build a BWT/FM-index for a set of reads // #ifndef INDEX_H #define INDEX_H #include #include "config.h" #include "SuffixArray.h" int indexMain(int argc, char** argv); void indexInMemorySAIS(); void indexInMemoryBCR(); void indexInMemoryRopebwt(); void indexOnDisk(); void buildIndexForTable(std::string outfile, const ReadTable* pRT, bool isReverse); void parseIndexOptions(int argc, char** argv); #endif ================================================ FILE: src/SGA/SGA/overlap.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // overlap - compute pairwise overlaps between reads // #include #include #include #include #include "Util.h" #include "overlap.h" #include "SuffixArray.h" #include "BWT.h" #include "SGACommon.h" #include "OverlapCommon.h" #include "Timer.h" #include "BWTAlgorithms.h" #include "ASQG.h" #include "gzstream.h" #include "SequenceProcessFramework.h" #include "OverlapProcess.h" #include "ReadInfoTable.h" // enum OutputType { OT_ASQG, OT_RAW }; // Functions size_t computeHitsSerial(const std::string& prefix, const std::string& readsFile, const OverlapAlgorithm* pOverlapper, int minOverlap, StringVector& filenameVec, std::ostream* pASQGWriter); size_t computeHitsParallel(int numThreads, const std::string& prefix, const std::string& readsFile, const OverlapAlgorithm* pOverlapper, int minOverlap, StringVector& filenameVec, std::ostream* pASQGWriter); // void convertHitsToASQG(const std::string& indexPrefix, const StringVector& hitsFilenames, std::ostream* pASQGWriter); // // Getopt // #define SUBPROGRAM "overlap" static const char *OVERLAP_VERSION_MESSAGE = SUBPROGRAM " Version " PACKAGE_VERSION "\n" "Written by Jared Simpson.\n" "\n" "Copyright 2009 Wellcome Trust Sanger Institute\n"; static const char *OVERLAP_USAGE_MESSAGE = "Usage: " PACKAGE_NAME " " SUBPROGRAM " [OPTION] ... READSFILE\n" "Compute pairwise overlap between all the sequences in READS\n" "\n" " --help display this help and exit\n" " -v, --verbose display verbose output\n" " -t, --threads=NUM use NUM worker threads to compute the overlaps (default: no threading)\n" " -e, --error-rate the maximum error rate allowed to consider two sequences aligned (default: exact matches only)\n" " -m, --min-overlap=LEN minimum overlap required between two reads (default: 45)\n" " -p, --prefix=PREFIX use PREFIX for the names of the index files (default: prefix of the input file)\n" " -f, --target-file=FILE perform the overlap queries against the reads in FILE\n" " -x, --exhaustive output all overlaps, including transitive edges\n" " --exact force the use of the exact-mode irreducible block algorithm. This is faster\n" " but requires that no substrings are present in the input set.\n" " -l, --seed-length=LEN force the seed length to be LEN. By default, the seed length in the overlap step\n" " is calculated to guarantee all overlaps with --error-rate differences are found.\n" " This option removes the guarantee but will be (much) faster. As SGA can tolerate some\n" " missing edges, this option may be preferable for some data sets.\n" " -s, --seed-stride=LEN force the seed stride to be LEN. This parameter will be ignored unless --seed-length\n" " is specified (see above). This parameter defaults to the same value as --seed-length\n" " -d, --sample-rate=N sample the symbol counts every N symbols in the FM-index. Higher values use significantly\n" " less memory at the cost of higher runtime. This value must be a power of 2 (default: 128)\n" "\nReport bugs to " PACKAGE_BUGREPORT "\n\n"; static const char* PROGRAM_IDENT = PACKAGE_NAME "::" SUBPROGRAM; namespace opt { static unsigned int verbose; static int numThreads = 1; static OutputType outputType = OT_ASQG; static std::string readsFile; static std::string targetFile; static std::string outFile; static std::string prefix; static double errorRate = 0.0f; static unsigned int minOverlap = DEFAULT_MIN_OVERLAP; static int seedLength = 0; static int seedStride = 0; static int sampleRate = BWT::DEFAULT_SAMPLE_RATE_SMALL; static bool bIrreducibleOnly = true; static bool bExactIrreducible = false; } static const char* shortopts = "m:d:e:t:l:s:o:f:p:vix"; enum { OPT_HELP = 1, OPT_VERSION, OPT_EXACT }; static const struct option longopts[] = { { "verbose", no_argument, NULL, 'v' }, { "threads", required_argument, NULL, 't' }, { "min-overlap", required_argument, NULL, 'm' }, { "sample-rate", required_argument, NULL, 'd' }, { "outfile", required_argument, NULL, 'o' }, { "target-file", required_argument, NULL, 'f' }, { "prefix", required_argument, NULL, 'p' }, { "error-rate", required_argument, NULL, 'e' }, { "seed-length", required_argument, NULL, 'l' }, { "seed-stride", required_argument, NULL, 's' }, { "exhaustive", no_argument, NULL, 'x' }, { "exact", no_argument, NULL, OPT_EXACT }, { "help", no_argument, NULL, OPT_HELP }, { "version", no_argument, NULL, OPT_VERSION }, { NULL, 0, NULL, 0 } }; // // Main // int overlapMain(int argc, char** argv) { parseOverlapOptions(argc, argv); // Prepare the output ASQG file assert(opt::outputType == OT_ASQG); // Open output file std::ostream* pASQGWriter = createWriter(opt::outFile); // Build and write the ASQG header ASQG::HeaderRecord headerRecord; headerRecord.setOverlapTag(opt::minOverlap); headerRecord.setErrorRateTag(opt::errorRate); headerRecord.setInputFileTag(opt::readsFile); headerRecord.setContainmentTag(true); // containments are always present headerRecord.setTransitiveTag(!opt::bIrreducibleOnly); headerRecord.write(*pASQGWriter); // Compute the overlap hits StringVector hitsFilenames; // Determine which index files to use. If a target file was provided, // use the index of the target reads std::string indexPrefix; if(!opt::prefix.empty()) indexPrefix = opt::prefix; else { if(!opt::targetFile.empty()) indexPrefix = stripFilename(opt::targetFile); else indexPrefix = stripFilename(opt::readsFile); } BWT* pBWT = new BWT(indexPrefix + BWT_EXT, opt::sampleRate); BWT* pRBWT = new BWT(indexPrefix + RBWT_EXT, opt::sampleRate); OverlapAlgorithm* pOverlapper = new OverlapAlgorithm(pBWT, pRBWT, opt::errorRate, opt::seedLength, opt::seedStride, opt::bIrreducibleOnly); pOverlapper->setExactModeOverlap(opt::errorRate <= 0.0001); pOverlapper->setExactModeIrreducible(opt::errorRate <= 0.0001); Timer* pTimer = new Timer(PROGRAM_IDENT); pBWT->printInfo(); // Make a prefix for the temporary hits files std::string outPrefix; outPrefix = stripFilename(opt::readsFile); if(!opt::targetFile.empty()) { outPrefix.append(1, '.'); outPrefix.append(stripFilename(opt::targetFile)); } if(opt::numThreads <= 1) { printf("[%s] starting serial-mode overlap computation\n", PROGRAM_IDENT); computeHitsSerial(outPrefix, opt::readsFile, pOverlapper, opt::minOverlap, hitsFilenames, pASQGWriter); } else { printf("[%s] starting parallel-mode overlap computation with %d threads\n", PROGRAM_IDENT, opt::numThreads); computeHitsParallel(opt::numThreads, outPrefix, opt::readsFile, pOverlapper, opt::minOverlap, hitsFilenames, pASQGWriter); } // Get the number of strings in the BWT, this is used to pre-allocated the read table delete pOverlapper; delete pBWT; delete pRBWT; // Parse the hits files and write the overlaps to the ASQG file convertHitsToASQG(indexPrefix, hitsFilenames, pASQGWriter); // Cleanup delete pASQGWriter; delete pTimer; if(opt::numThreads > 1) pthread_exit(NULL); return 0; } // Compute the hits for each read in the input file without threading // Return the number of reads processed size_t computeHitsSerial(const std::string& prefix, const std::string& readsFile, const OverlapAlgorithm* pOverlapper, int minOverlap, StringVector& filenameVec, std::ostream* pASQGWriter) { std::string filename = prefix + HITS_EXT + GZIP_EXT; filenameVec.push_back(filename); OverlapProcess processor(filename, pOverlapper, minOverlap); OverlapPostProcess postProcessor(pASQGWriter, pOverlapper); size_t numProcessed = SequenceProcessFramework::processSequencesSerial(readsFile, &processor, &postProcessor); return numProcessed; } // Compute the hits for each read in the SeqReader file with threading // The way this works is we create a vector of numThreads OverlapProcess pointers and // pass this to the SequenceProcessFramework which wraps the processes // in threads and distributes the reads to each thread. // The number of reads processsed is returned size_t computeHitsParallel(int numThreads, const std::string& prefix, const std::string& readsFile, const OverlapAlgorithm* pOverlapper, int minOverlap, StringVector& filenameVec, std::ostream* pASQGWriter) { std::string filename = prefix + HITS_EXT + GZIP_EXT; std::vector processorVector; for(int i = 0; i < numThreads; ++i) { std::stringstream ss; ss << prefix << "-thread" << i << HITS_EXT << GZIP_EXT; std::string outfile = ss.str(); filenameVec.push_back(outfile); OverlapProcess* pProcessor = new OverlapProcess(outfile, pOverlapper, minOverlap); processorVector.push_back(pProcessor); } // The post processing is performed serially so only one post processor is created OverlapPostProcess postProcessor(pASQGWriter, pOverlapper); size_t numProcessed = SequenceProcessFramework::processSequencesParallel(readsFile, processorVector, &postProcessor); for(int i = 0; i < numThreads; ++i) delete processorVector[i]; return numProcessed; } // void convertHitsToASQG(const std::string& indexPrefix, const StringVector& hitsFilenames, std::ostream* pASQGWriter) { // Load the suffix array index and the reverse suffix array index // Note these are not the full suffix arrays SuffixArray* pFwdSAI = new SuffixArray(indexPrefix + SAI_EXT); SuffixArray* pRevSAI = new SuffixArray(indexPrefix + RSAI_EXT); // Load the ReadInfoTable for the queries to look up the ID and lengths of the hits ReadInfoTable* pQueryRIT = new ReadInfoTable(opt::readsFile); // If the target file is not the query file, load its ReadInfoTable ReadInfoTable* pTargetRIT; if(!opt::targetFile.empty() && opt::targetFile != opt::readsFile) pTargetRIT = new ReadInfoTable(opt::targetFile); else pTargetRIT = pQueryRIT; bool bIsSelfCompare = pTargetRIT == pQueryRIT; // Convert the hits to overlaps and write them to the asqg file as initial edges for(StringVector::const_iterator iter = hitsFilenames.begin(); iter != hitsFilenames.end(); ++iter) { printf("[%s] parsing file %s\n", PROGRAM_IDENT, iter->c_str()); std::istream* pReader = createReader(*iter); // Read each hit sequentially, converting it to an overlap std::string line; while(getline(*pReader, line)) { size_t readIdx; size_t totalEntries; bool isSubstring; OverlapVector ov; OverlapCommon::parseHitsString(line, pQueryRIT, pTargetRIT, pFwdSAI, pRevSAI, bIsSelfCompare, readIdx, totalEntries, ov, isSubstring); std::cout << line << " " << bIsSelfCompare << " " << readIdx << " " << totalEntries << " " << isSubstring << "\n"; for(OverlapVector::iterator iter = ov.begin(); iter != ov.end(); ++iter) { ASQG::EdgeRecord edgeRecord(*iter); edgeRecord.write(*pASQGWriter); } } delete pReader; // delete the hits file //unlink(iter->c_str()); } // Deallocate data if(pTargetRIT != pQueryRIT) delete pTargetRIT; delete pFwdSAI; delete pRevSAI; delete pQueryRIT; } // // Handle command line arguments // void parseOverlapOptions(int argc, char** argv) { bool die = false; for (char c; (c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1;) { std::istringstream arg(optarg != NULL ? optarg : ""); switch (c) { case 'm': arg >> opt::minOverlap; break; case 'o': arg >> opt::outFile; break; case 'p': arg >> opt::prefix; break; case 'e': arg >> opt::errorRate; break; case 't': arg >> opt::numThreads; break; case 'l': arg >> opt::seedLength; break; case 's': arg >> opt::seedStride; break; case 'd': arg >> opt::sampleRate; break; case 'f': arg >> opt::targetFile; break; case OPT_EXACT: opt::bExactIrreducible = true; break; case 'x': opt::bIrreducibleOnly = false; break; case '?': die = true; break; case 'v': opt::verbose++; break; case OPT_HELP: std::cout << OVERLAP_USAGE_MESSAGE; exit(EXIT_SUCCESS); case OPT_VERSION: std::cout << OVERLAP_VERSION_MESSAGE; exit(EXIT_SUCCESS); } } if (argc - optind < 1) { std::cerr << SUBPROGRAM ": missing arguments\n"; die = true; } else if (argc - optind > 1) { std::cerr << SUBPROGRAM ": too many arguments\n"; die = true; } if(opt::numThreads <= 0) { std::cerr << SUBPROGRAM ": invalid number of threads: " << opt::numThreads << "\n"; die = true; } if(!IS_POWER_OF_2(opt::sampleRate)) { std::cerr << SUBPROGRAM ": invalid parameter to -d/--sample-rate, must be power of 2. got: " << opt::sampleRate << "\n"; die = true; } if (die) { std::cout << "\n" << OVERLAP_USAGE_MESSAGE; exit(EXIT_FAILURE); } // Validate parameters if(opt::errorRate <= 0) opt::errorRate = 0.0f; if(opt::seedLength < 0) opt::seedLength = 0; if(opt::seedLength > 0 && opt::seedStride <= 0) opt::seedStride = opt::seedLength; // Parse the input filenames opt::readsFile = argv[optind++]; if(opt::outFile.empty()) { std::string prefix = stripFilename(opt::readsFile); if(!opt::targetFile.empty()) { prefix.append(1,'.'); prefix.append(stripFilename(opt::targetFile)); } opt::outFile = prefix + ASQG_EXT + GZIP_EXT; } } ================================================ FILE: src/SGA/SGA/overlap.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // overlap - Overlap reads using a bwt // #ifndef OVERLAP_H #define OVERLAP_H #include //#include "config.h" #include "SuffixTools/BWT.h" #include "Match.h" #include "BWTAlgorithms.h" #include "OverlapAlgorithm.h" #include // functions // int overlapMain(int argc, char** argv); // options void parseOverlapOptions(int argc, char** argv); #endif ================================================ FILE: src/SGA/SQG/ASQG.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ASQG - Definitions and functions // for handling ASGQ files // #include "ASQG.h" #include namespace ASQG { const int HEADER_VERSION = 1; // Record ID tags static constexpr int RECORD_TAG_SIZE = 2; // do not include null terminator static char HEADER_TAG[] = "HT"; static char VERTEX_TAG[] = "VT"; static char EDGE_TAG[] = "ED"; // Header tags const int FIELD_TAG_SIZE = 2; static char VERSION_TAG[] = "VN"; static char OVERLAP_TAG[] = "OL"; static char INPUT_FILE_TAG[] = "IN"; static char ERROR_RATE_TAG[] = "ER"; static char CONTAINMENT_TAG[] = "CN"; // 1 if the graph has containment edges/vertices static char TRANSITIVE_TAG[] = "TE"; // 1 if the graph has transitive edges // Vertex tags static char SUBSTRING_TAG[] = "SS"; // // Header Record // HeaderRecord::HeaderRecord() { setVersionTag(HEADER_VERSION); } // HeaderRecord::HeaderRecord(const std::string& recordLine) { parse(recordLine); } // void HeaderRecord::setVersionTag(int version) { m_versionTag.set(version); } // void HeaderRecord::setOverlapTag(int overlapLen) { m_overlapTag.set(overlapLen); } // void HeaderRecord::setInputFileTag(const std::string& name) { m_infileTag.set(name); } // void HeaderRecord::setErrorRateTag(float errorRate) { m_errorRateTag.set(errorRate); } // void HeaderRecord::setContainmentTag(int v) { m_containmentTag.set(v); } // void HeaderRecord::setTransitiveTag(int v) { m_transitiveTag.set(v); } // void HeaderRecord::write(std::ostream& out) { StringVector fields; fields.push_back(HEADER_TAG); // Check for mandatory tags if(!m_versionTag.isInitialized()) { std::cerr << "Error: Header version tag not set, aborting." << std::endl; exit(EXIT_FAILURE); } else { fields.push_back(m_versionTag.toTagString(VERSION_TAG)); } if(m_errorRateTag.isInitialized()) fields.push_back(m_errorRateTag.toTagString(ERROR_RATE_TAG)); if(m_overlapTag.isInitialized()) fields.push_back(m_overlapTag.toTagString(OVERLAP_TAG)); if(m_infileTag.isInitialized()) fields.push_back(m_infileTag.toTagString(INPUT_FILE_TAG)); if(m_containmentTag.isInitialized()) fields.push_back(m_containmentTag.toTagString(CONTAINMENT_TAG)); if(m_transitiveTag.isInitialized()) fields.push_back(m_transitiveTag.toTagString(TRANSITIVE_TAG)); writeFields(out, fields); } //JEREMIAH void HeaderRecord::write(std::stringstream& out) { StringVector fields; fields.push_back(HEADER_TAG); // Check for mandatory tags if(!m_versionTag.isInitialized()) { std::cerr << "Error: Header version tag not set, aborting." << std::endl; exit(EXIT_FAILURE); } else { fields.push_back(m_versionTag.toTagString(VERSION_TAG)); } if(m_errorRateTag.isInitialized()) fields.push_back(m_errorRateTag.toTagString(ERROR_RATE_TAG)); if(m_overlapTag.isInitialized()) fields.push_back(m_overlapTag.toTagString(OVERLAP_TAG)); if(m_infileTag.isInitialized()) fields.push_back(m_infileTag.toTagString(INPUT_FILE_TAG)); if(m_containmentTag.isInitialized()) fields.push_back(m_containmentTag.toTagString(CONTAINMENT_TAG)); if(m_transitiveTag.isInitialized()) fields.push_back(m_transitiveTag.toTagString(TRANSITIVE_TAG)); writeFields(out, fields); } // void HeaderRecord::parse(const std::string& record) { if(record.size() < 2) { std::cerr << "Error: Record is not valid\n"; exit(EXIT_FAILURE); } // Tokenize record StringVector tokens = SQG::tokenizeRecord(record); // Ensure the first token indicates this is a valid header record if(tokens[0].compare(0, RECORD_TAG_SIZE, HEADER_TAG) != 0) { std::cerr << "Error: Record does not have a header tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } for(size_t i = 1; i < tokens.size(); ++i) { static char VERSION_TAG[] = "VN"; static char OVERLAP_TAG[] = "OL"; static char INPUT_FILE_TAG[] = "IN"; static char ERROR_RATE_TAG[] = "ER"; if(tokens[i].compare(0, FIELD_TAG_SIZE, VERSION_TAG) == 0) m_versionTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, OVERLAP_TAG) == 0) m_overlapTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, INPUT_FILE_TAG) == 0) m_infileTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, ERROR_RATE_TAG) == 0) m_errorRateTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, CONTAINMENT_TAG) == 0) m_containmentTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, TRANSITIVE_TAG) == 0) m_transitiveTag.fromString(tokens[i]); } } // // Vertex Record // // VertexRecord::VertexRecord(const std::string& recordLine) { parse(recordLine); } // void VertexRecord::setSubstringTag(bool b) { m_substringTag.set(b); } // void VertexRecord::write(std::ostream& out) { StringVector fields; fields.push_back(VERTEX_TAG); fields.push_back(m_id); fields.push_back(m_seq); if(m_substringTag.isInitialized()) fields.push_back(m_substringTag.toTagString(SUBSTRING_TAG)); writeFields(out, fields); } //JEREMIAH void VertexRecord::write(std::stringstream& out) { StringVector fields; fields.push_back(VERTEX_TAG); fields.push_back(m_id); fields.push_back(m_seq); if(m_substringTag.isInitialized()) fields.push_back(m_substringTag.toTagString(SUBSTRING_TAG)); writeFields(out, fields); } // void VertexRecord::parse(const std::string& record) { if(record.size() < 2) { std::cerr << "Error: Record is not valid\n"; exit(EXIT_FAILURE); } // Tokenize record StringVector tokens = SQG::tokenizeRecord(record); if(tokens.size() < 3) { std::cerr << "Error: Vertex record is incomplete.\n"; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } // Ensure the first token indicates this is a valid vertex record if(tokens[0].compare(0, RECORD_TAG_SIZE, VERTEX_TAG) != 0) { std::cerr << "Error: Record does not have a vertex tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } m_id = tokens[1]; m_seq = tokens[2]; for(size_t i = 3; i < tokens.size(); ++i) { if(tokens[i].compare(0, FIELD_TAG_SIZE, SUBSTRING_TAG) == 0) m_substringTag.fromString(tokens[i]); } } // // EdgeRecord // EdgeRecord::EdgeRecord(const std::string& recordLine) { parse(recordLine); } // void EdgeRecord::write(std::ostream& out) { StringVector fields; fields.push_back(EDGE_TAG); std::stringstream ss; ss << m_overlap; fields.push_back(ss.str()); writeFields(out, fields); } // void EdgeRecord::parse(const std::string& record) { if(record.size() < 2) { std::cerr << "Error: Record is not valid\n"; exit(EXIT_FAILURE); } // Tokenize record StringVector tokens = SQG::tokenizeRecord(record); if(tokens.size() < 2) { std::cerr << "Error: Edge record is incomplete.\n"; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } // Ensure the first token indicates this is a valid edge record if(tokens[0].compare(EDGE_TAG) != 0) { std::cerr << "Error: Record does not have an edge tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } // Parse the overlap std::stringstream ssparser(tokens[1]); ssparser >> m_overlap; } // // // RecordType getRecordType(const std::string& record) { // the record type is the first two characters of the record if(record.size() < 2) { std::cerr << "Error: record does not have a valid record-type tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } char recordTag[RECORD_TAG_SIZE]; record.copy(recordTag, RECORD_TAG_SIZE); if(strncmp(recordTag, HEADER_TAG, RECORD_TAG_SIZE) == 0) { return RT_HEADER; } if(strncmp(recordTag, VERTEX_TAG, RECORD_TAG_SIZE) == 0) { return RT_VERTEX; } if(strncmp(recordTag, EDGE_TAG, RECORD_TAG_SIZE) == 0) { return RT_EDGE; } // Unknown tag std::cerr << "Error: Unknown ASQG file record tag: " << recordTag << std::endl; exit(EXIT_FAILURE); } void writeFields(std::ostream& out, const StringVector& fields) { for(size_t i = 0; i < fields.size(); ++i) { out << fields[i]; if(i != fields.size() - 1) out << SQG::FIELD_SEP; } out << "\n"; } } ================================================ FILE: src/SGA/SQG/ASQG.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ASQG - Definitions and functions // for handling ASGQ files // #ifndef ASQG_H #define ASQG_H #include "SQG.h" #include "Match.h" namespace ASQG { enum RecordType { RT_HEADER = 0, RT_VERTEX, RT_EDGE }; // A header record is just a tag:value pairs struct HeaderRecord { public: HeaderRecord(); HeaderRecord(const std::string& recordLine); void setOverlapTag(int overlapLen); void setInputFileTag(const std::string& name); void setErrorRateTag(float errorRate); void setContainmentTag(int v); void setTransitiveTag(int v); const SQG::IntTag& getVersionTag() const { return m_versionTag; } const SQG::FloatTag& getErrorRateTag() const { return m_errorRateTag; } const SQG::StringTag& getInfileTag() const { return m_infileTag; } const SQG::IntTag& getOverlapTag() const { return m_overlapTag; } const SQG::IntTag& getContainmentTag() const { return m_containmentTag; }; const SQG::IntTag& getTransitiveTag() const { return m_transitiveTag; }; void write(std::ostream& out); void write(std::stringstream& out); // JEREMIAH void parse(const std::string& record); private: void setVersionTag(int version); SQG::IntTag m_versionTag; SQG::FloatTag m_errorRateTag; SQG::StringTag m_infileTag; SQG::IntTag m_overlapTag; SQG::IntTag m_containmentTag; SQG::IntTag m_transitiveTag; }; // A vertex record is an id, sequence and an array of // tag:value struct VertexRecord { public: VertexRecord() {} VertexRecord(const std::string& recordLine); VertexRecord(const std::string& i, const std::string& s) : m_id(i), m_seq(s) {} void setSubstringTag(bool b); const std::string& getID() const { return m_id; } const std::string& getSeq() const { return m_seq; } const SQG::IntTag& getSubstringTag() const { return m_substringTag; } void write(std::ostream& out); void write(std::stringstream& out); void parse(const std::string& record); private: std::string m_id; std::string m_seq; SQG::IntTag m_substringTag; }; // An edge record is just an overlap object and tag:values struct EdgeRecord { public: EdgeRecord() {} EdgeRecord(const std::string& recordLine); EdgeRecord(const Overlap& o) : m_overlap(o) {} const Overlap& getOverlap() const { return m_overlap; } void write(std::ostream& out); void parse(const std::string& record); private: Overlap m_overlap; }; // Parsing functions RecordType getRecordType(const std::string& record); HeaderRecord parseHeaderRecord(const std::string& record); VertexRecord parseVertexRecord(const std::string& record); EdgeRecord parseEdgeRecord(const std::string& record); // Writing functions void writeFields(std::ostream& out, const StringVector& fields); }; #endif ================================================ FILE: src/SGA/SQG/Makefile.am ================================================ noinst_LIBRARIES = libsqg.a libsqg_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/Thirdparty \ -I$(top_srcdir)/src/SGA/Util libsqg_a_SOURCES = \ SQG.h SQG.cpp \ ASQG.h ASQG.cpp ================================================ FILE: src/SGA/SQG/Makefile.in ================================================ # Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/SGA/SQG ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libsqg_a_AR = $(AR) $(ARFLAGS) libsqg_a_LIBADD = am_libsqg_a_OBJECTS = libsqg_a-SQG.$(OBJEXT) libsqg_a-ASQG.$(OBJEXT) libsqg_a_OBJECTS = $(am_libsqg_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libsqg_a-ASQG.Po \ ./$(DEPDIR)/libsqg_a-SQG.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsqg_a_SOURCES) DIST_SOURCES = $(libsqg_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libsqg.a libsqg_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/Thirdparty \ -I$(top_srcdir)/src/SGA/Util libsqg_a_SOURCES = \ SQG.h SQG.cpp \ ASQG.h ASQG.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/SGA/SQG/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/SGA/SQG/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libsqg.a: $(libsqg_a_OBJECTS) $(libsqg_a_DEPENDENCIES) $(EXTRA_libsqg_a_DEPENDENCIES) $(AM_V_at)-rm -f libsqg.a $(AM_V_AR)$(libsqg_a_AR) libsqg.a $(libsqg_a_OBJECTS) $(libsqg_a_LIBADD) $(AM_V_at)$(RANLIB) libsqg.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsqg_a-ASQG.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsqg_a-SQG.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libsqg_a-SQG.o: SQG.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsqg_a-SQG.o -MD -MP -MF $(DEPDIR)/libsqg_a-SQG.Tpo -c -o libsqg_a-SQG.o `test -f 'SQG.cpp' || echo '$(srcdir)/'`SQG.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsqg_a-SQG.Tpo $(DEPDIR)/libsqg_a-SQG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SQG.cpp' object='libsqg_a-SQG.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsqg_a-SQG.o `test -f 'SQG.cpp' || echo '$(srcdir)/'`SQG.cpp libsqg_a-SQG.obj: SQG.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsqg_a-SQG.obj -MD -MP -MF $(DEPDIR)/libsqg_a-SQG.Tpo -c -o libsqg_a-SQG.obj `if test -f 'SQG.cpp'; then $(CYGPATH_W) 'SQG.cpp'; else $(CYGPATH_W) '$(srcdir)/SQG.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsqg_a-SQG.Tpo $(DEPDIR)/libsqg_a-SQG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SQG.cpp' object='libsqg_a-SQG.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsqg_a-SQG.obj `if test -f 'SQG.cpp'; then $(CYGPATH_W) 'SQG.cpp'; else $(CYGPATH_W) '$(srcdir)/SQG.cpp'; fi` libsqg_a-ASQG.o: ASQG.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsqg_a-ASQG.o -MD -MP -MF $(DEPDIR)/libsqg_a-ASQG.Tpo -c -o libsqg_a-ASQG.o `test -f 'ASQG.cpp' || echo '$(srcdir)/'`ASQG.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsqg_a-ASQG.Tpo $(DEPDIR)/libsqg_a-ASQG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ASQG.cpp' object='libsqg_a-ASQG.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsqg_a-ASQG.o `test -f 'ASQG.cpp' || echo '$(srcdir)/'`ASQG.cpp libsqg_a-ASQG.obj: ASQG.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsqg_a-ASQG.obj -MD -MP -MF $(DEPDIR)/libsqg_a-ASQG.Tpo -c -o libsqg_a-ASQG.obj `if test -f 'ASQG.cpp'; then $(CYGPATH_W) 'ASQG.cpp'; else $(CYGPATH_W) '$(srcdir)/ASQG.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsqg_a-ASQG.Tpo $(DEPDIR)/libsqg_a-ASQG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ASQG.cpp' object='libsqg_a-ASQG.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsqg_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsqg_a-ASQG.obj `if test -f 'ASQG.cpp'; then $(CYGPATH_W) 'ASQG.cpp'; else $(CYGPATH_W) '$(srcdir)/ASQG.cpp'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libsqg_a-ASQG.Po -rm -f ./$(DEPDIR)/libsqg_a-SQG.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libsqg_a-ASQG.Po -rm -f ./$(DEPDIR)/libsqg_a-SQG.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/SGA/SQG/SQG.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SQG - Common functions for parsing // assembly and sequence graph files // #include "SQG.h" namespace SQG { // StringVector tokenizeRecord(const std::string& record) { return split(record, FIELD_SEP); } // StringVector tokenizeTagValue(const std::string& tagValue) { return split(tagValue, TAG_SEP); } } ================================================ FILE: src/SGA/SQG/SQG.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SQG - Common definitions and functions for parsing // assembly and sequence graph files // #ifndef SQG_H #define SQG_H #include #include #include "Util.h" namespace SQG { // const char FIELD_SEP = '\t'; const char TAG_SEP = ':'; // getTypeCode must be defined for every type that TagValue can take static inline char getTypeCode(int) { return 'i'; } static inline char getTypeCode(char) { return 'A'; } static inline char getTypeCode(const std::string&) { return 'Z'; } static inline char getTypeCode(float) { return 'f'; } // Tokenize functions StringVector tokenizeRecord(const std::string& record); StringVector tokenizeTagValue(const std::string& tagValue); // Two-state TagValue that allows the data value to be not set template class TagValue { public: TagValue() : m_isInitialized(false) {} TagValue(const T& v) : m_isInitialized(true), m_value(v) {} T get() const { assert(m_isInitialized); return m_value; } void set(T v) { m_isInitialized = true; m_value = v; } bool isInitialized() const { return m_isInitialized; } std::string toTagString(const char* tag) { std::stringstream ss; char type_code = getTypeCode(m_value); ss << tag << TAG_SEP << type_code << TAG_SEP << m_value; return ss.str(); } void fromString(const std::string& str) { StringVector tokens = tokenizeTagValue(str); if(tokens.size() != 3) { std::cerr << "Incorrect format for tagged value\n"; std::cerr << "Field: " << str << "\n"; exit(EXIT_FAILURE); } if(tokens[1].size() != 1 && tokens[1][0] != getTypeCode(m_value)) { std::cerr << "Unexpected type in tagged value. Expected: " << getTypeCode(m_value); std::cerr << " Found: " << tokens[1] << "\n"; exit(EXIT_FAILURE); } std::stringstream ss(tokens[2]); ss >> m_value; m_isInitialized = true; } private: T m_value; bool m_isInitialized; }; // These are the valid tags that can be used typedef TagValue CharTag; typedef TagValue IntTag; typedef TagValue FloatTag; typedef TagValue StringTag; }; #endif ================================================ FILE: src/SGA/StringGraph/CompleteOverlapSet.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // CompleteOverlapSet - A collection of all // valid overlaps for a given vertex. This is // inferred from the structure of a transitive reduced // graph // #include "CompleteOverlapSet.h" // CompleteOverlapSet::CompleteOverlapSet(const Vertex* pVertex, double maxER, int minLength) : m_pX(pVertex), m_maxER(maxER), m_minLength(minLength) { m_cost = 0; //iterativeConstruct(); constructBFS(); //constructMap(); } // Perform a breadth-first search of the graph, accumulating all the valid // overlaps of reads to m_pX. // Precondition: All vertices in the graph are colored GC_WHTE void CompleteOverlapSet::constructBFS() { EdgeDescList markedList; ExploreQueue queue; EdgePtrVec edges = m_pX->getEdges(); for(size_t i = 0; i < edges.size(); ++i) { Edge* pEdge = edges[i]; EdgeDesc ed = pEdge->getDesc(); Overlap ovr = pEdge->getOverlap(); ed.pVertex->setColor(GC_GRAY); queue.push(ExploreElement(ed, ovr)); } while(!queue.empty()) { ExploreElement ee = queue.front(); queue.pop(); // EdgeDesc& edXY = ee.ed; Vertex* pY = edXY.pVertex; Overlap& ovrXY = ee.ovr; int overlapLen = ovrXY.getOverlapLength(0); markedList.push_back(edXY); // Check if the overlap between this node and m_pX is valid if(overlapLen >= m_minLength) { double error_rate = SGAlgorithms::calcErrorRate(m_pX, pY, ovrXY); if(isErrorRateAcceptable(error_rate, m_maxER)) { // Mark the vertex as valid pY->setColor(GC_BLACK); m_overlapMap.insert(std::make_pair(edXY, ovrXY)); } else { pY->setColor(GC_RED); } } else { pY->setColor(GC_RED); } // Enqueue neighbors EdgePtrVec neighborEdges = pY->getEdges(); for(size_t i = 0; i < neighborEdges.size(); ++i) { Edge* pEdgeYZ = neighborEdges[i]; Vertex* pZ = pEdgeYZ->getEnd(); if(pZ == m_pX || pZ->getColor() != GC_WHITE) continue; Overlap ovrYZ = pEdgeYZ->getOverlap(); // Check that this vertex actually overlaps pX if(SGAlgorithms::hasTransitiveOverlap(ovrXY, ovrYZ)) { Overlap ovrXZ = SGAlgorithms::inferTransitiveOverlap(ovrXY, ovrYZ); EdgeDesc edXZ = SGAlgorithms::overlapToEdgeDesc(pZ, ovrXZ); if(ovrXZ.getOverlapLength(0) >= m_minLength) { pZ->setColor(GC_GRAY); queue.push(ExploreElement(edXZ, ovrXZ)); } } } } // reset colors for(EdgeDescList::iterator iter = markedList.begin(); iter != markedList.end(); ++iter) iter->pVertex->setColor(GC_WHITE); } // Perform a breadth-first search of the graph, accumulating all the valid // overlaps of reads to m_pX void CompleteOverlapSet::iterativeConstruct() { m_cost = 0; ExplorePriorityQueue queue; // We store the overlaps that do not meet the overlap parameters // in this map. The neighbors of these vertices might have valid // overlaps to m_pX so they must still be explored. SGAlgorithms::EdgeDescOverlapMap exclusionMap; // Add first-order overlaps EdgePtrVec edges = m_pX->getEdges(); for(size_t i = 0; i < edges.size(); ++i) { Edge* pEdge = edges[i]; EdgeDesc ed = pEdge->getDesc(); Overlap ovr = pEdge->getOverlap(); double error_rate = SGAlgorithms::calcErrorRate(m_pX, pEdge->getEnd(), ovr); int overlapLen = ovr.getOverlapLength(0); if(isErrorRateAcceptable(error_rate, m_maxER) && overlapLen >= m_minLength) { m_overlapMap.insert(std::make_pair(ed, ovr)); queue.push(ExploreElement(ed, ovr)); } else { exclusionMap.insert(std::make_pair(ed, ovr)); queue.push(ExploreElement(ed, ovr)); } } while(!queue.empty()) { ExploreElement ee = queue.top(); queue.pop(); EdgeDesc& edXY = ee.ed; Overlap& ovrXY = ee.ovr; // Add the overlaps of Y Vertex* pY = edXY.pVertex; EdgePtrVec neighborEdges = pY->getEdges(); for(size_t i = 0; i < neighborEdges.size(); ++i) { Edge* pEdgeYZ = neighborEdges[i]; Vertex* pZ = pEdgeYZ->getEnd(); if(pZ == m_pX) continue; Overlap ovrYZ = pEdgeYZ->getOverlap(); // Check that this vertex actually overlaps pX if(SGAlgorithms::hasTransitiveOverlap(ovrXY, ovrYZ)) { ++m_cost; Overlap ovrXZ = SGAlgorithms::inferTransitiveOverlap(ovrXY, ovrYZ); EdgeDesc edXZ = SGAlgorithms::overlapToEdgeDesc(pZ, ovrXZ); double error_rate = SGAlgorithms::calcErrorRate(m_pX, pZ, ovrXZ); int overlapLen = ovrXZ.getOverlapLength(0); if(isErrorRateAcceptable(error_rate, m_maxER) && overlapLen >= m_minLength) { // Overlap is valid SGAlgorithms::EdgeDescOverlapMap::iterator findIter = m_overlapMap.find(edXZ); if(findIter == m_overlapMap.end()) { m_overlapMap.insert(std::make_pair(edXZ, ovrXZ)); queue.push(ExploreElement(edXZ, ovrXZ)); } else if(ovrXZ.getOverlapLength(0) > findIter->second.getOverlapLength(0)) { findIter->second = ovrXZ; queue.push(ExploreElement(edXZ, ovrXZ)); } } else { // Overlap is invalid SGAlgorithms::EdgeDescOverlapMap::iterator findIter = exclusionMap.find(edXZ); if(findIter == exclusionMap.end()) { exclusionMap.insert(std::make_pair(edXZ, ovrXZ)); queue.push(ExploreElement(edXZ, ovrXZ)); } else if(overlapLen > findIter->second.getOverlapLength(0)) { findIter->second = ovrXZ; queue.push(ExploreElement(edXZ, ovrXZ)); } } } } } } // void CompleteOverlapSet::constructMap() { EdgePtrVec edges = m_pX->getEdges(); // Add the primary overlaps to the map, and all the nodes reachable from the primaries for(size_t i = 0; i < edges.size(); ++i) { Edge* pEdge = edges[i]; EdgeDesc ed = pEdge->getDesc(); Overlap ovr = pEdge->getOverlap(); if(ovr.isContainment()) continue; m_overlapMap.insert(std::make_pair(ed, ovr)); // Recursively add neighbors recursiveConstruct(ed, ovr, 1, ovr.getOverlapLength(0)); } } // Recursively add overlaps to pX inferred from the edges of pY to outMap void CompleteOverlapSet::recursiveConstruct(const EdgeDesc& edXY, const Overlap& ovrXY, int depth, int) { //std::cout << "depth: " << depth << " " << distance << " " << ovrXY << "\n"; Vertex* pY = edXY.pVertex; EdgePtrVec neighborEdges = pY->getEdges(); for(size_t i = 0; i < neighborEdges.size(); ++i) { Edge* pEdgeYZ = neighborEdges[i]; Vertex* pZ = pEdgeYZ->getEnd(); if(pZ != m_pX) { Overlap ovrYZ = pEdgeYZ->getOverlap(); if(ovrYZ.isContainment()) continue; // Check that this vertex actually overlaps pX if(SGAlgorithms::hasTransitiveOverlap(ovrXY, ovrYZ)) { Overlap ovrXZ = SGAlgorithms::inferTransitiveOverlap(ovrXY, ovrYZ); EdgeDesc edXZ = SGAlgorithms::overlapToEdgeDesc(pZ, ovrXZ); if(edXZ.dir != edXY.dir || ovrXZ.isContainment()) continue; double error_rate = SGAlgorithms::calcErrorRate(m_pX, pZ, ovrXZ); int overlapLen = ovrXZ.getOverlapLength(0); //std::cout << "ovrXY " << ovrXY << "\n"; //std::cout << "ovrYZ " << ovrYZ << "\n"; //std::cout << "ovrXZ " << ovrXZ << "\n"; if(isErrorRateAcceptable(error_rate, m_maxER) && overlapLen >= m_minLength) { SGAlgorithms::EdgeDescOverlapMap::iterator findIter = m_overlapMap.find(edXZ); if(findIter == m_overlapMap.end()) { m_overlapMap.insert(std::make_pair(edXZ, ovrXZ)); recursiveConstruct(edXZ, ovrXZ, depth + 1, ovrXZ.getOverlapLength(0)); } else if(ovrXZ.getOverlapLength(0) > findIter->second.getOverlapLength(0)) { findIter->second = ovrXZ; recursiveConstruct(edXZ, ovrXZ, depth + 1, ovrXZ.getOverlapLength(0)); } } } } } } // Compare the actual edges of m_pX with the edges in the overlap map void CompleteOverlapSet::getDiffMap(SGAlgorithms::EdgeDescOverlapMap& missingMap, SGAlgorithms::EdgeDescOverlapMap& extraMap) { missingMap = m_overlapMap; EdgePtrVec edges = m_pX->getEdges(); for(size_t i = 0; i < edges.size(); ++i) { EdgeDesc ed = edges[i]->getDesc(); SGAlgorithms::EdgeDescOverlapMap::iterator iter = missingMap.find(edges[i]->getDesc()); if(iter != missingMap.end()) { missingMap.erase(iter); } else { Overlap ovr = edges[i]->getOverlap(); extraMap.insert(std::make_pair(ed, ovr)); } } } // Reset the overlap parameters and filter edges void CompleteOverlapSet::resetParameters(double maxER, int minLength) { m_maxER = maxER; m_minLength = minLength; // Filter out overlaps no longer meeting the criteria SGAlgorithms::EdgeDescOverlapMap::iterator iter = m_overlapMap.begin(); while(iter != m_overlapMap.end()) { double er = SGAlgorithms::calcErrorRate(m_pX, iter->first.pVertex, iter->second); bool acceptER = isErrorRateAcceptable(er, m_maxER); bool acceptLen = iter->second.getOverlapLength(0) >= m_minLength; if(!acceptER || !acceptLen) { //std::cout << "Filtering " << iter->second << " flags: " << acceptER << acceptLen << "\n"; //std::cout << "er: " << er << " len: " << iter->second.getOverlapLength(0) << "\n"; m_overlapMap.erase(iter++); } else ++iter; } } // Remove all overlaps to a particular vertex void CompleteOverlapSet::removeOverlapsTo(Vertex* pRemove) { EdgeDesc ed; ed.pVertex = pRemove; for(int i = 0; i != ED_COUNT; ++i) { ed.dir = (EdgeDir)i; ed.comp = EC_SAME; m_overlapMap.erase(ed); ed.comp = EC_REVERSE; m_overlapMap.erase(ed); } } // Remove all the transitive and containment relationships, leaving only the irreducible void CompleteOverlapSet::computeIrreducible(SGAlgorithms::EdgeDescOverlapMap* pTransitive, SGAlgorithms::EdgeDescOverlapMap* pContainments) { SGAlgorithms::EdgeDescOverlapMap temp; partitionOverlaps(&temp, pTransitive, pContainments); m_overlapMap = temp; } // Partition the OverlapMap into edges that are containments, irreducible and transitive // If the pointer for an output map is NULL, simply discard the edges void CompleteOverlapSet::partitionOverlaps(SGAlgorithms::EdgeDescOverlapMap* pIrreducible, SGAlgorithms::EdgeDescOverlapMap* pTransitive, SGAlgorithms::EdgeDescOverlapMap* pContainment) const { if(pIrreducible == NULL && pTransitive == NULL && pContainment == NULL) return; // Nothing to do m_cost = 0; SGAlgorithms::EdgeDescOverlapMap workingMap; // Stage 1, remove containments for(SGAlgorithms::EdgeDescOverlapMap::const_iterator iter = m_overlapMap.begin(); iter != m_overlapMap.end(); ++iter) { if(iter->second.isContainment()) { if(pContainment != NULL) pContainment->insert(*iter); } else { workingMap.insert(*iter); } } // Stage 2, remove transitive edges SGAlgorithms::partitionTransitiveOverlaps(&workingMap, pTransitive, m_maxER, m_minLength); *pIrreducible = workingMap; } ================================================ FILE: src/SGA/StringGraph/CompleteOverlapSet.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // CompleteOverlapSet - A collection of all // valid overlaps for a given vertex. This is // inferred from the structure of a transitive reduced // graph // #ifndef COMPLETEOVERLAPSET_H #define COMPLETEOVERLAPSET_H #include "Bigraph.h" #include "SGAlgorithms.h" // Structure used for iterative exploration of the graph // The exploration starts at some vertex X, each element // holds a possible overlap between X and another vertex Y struct ExploreElement { ExploreElement(const EdgeDesc& e, const Overlap& o) : ed(e), ovr(o) {} EdgeDesc ed; Overlap ovr; }; // Comparison operator used to compare ExploreElements // by the length of the overlap on vertex X struct CompareExploreElemOverlapLength { bool operator()(const ExploreElement& elemXY, const ExploreElement& elemXZ) { return elemXY.ovr.match.coord[0].length() < elemXZ.ovr.match.coord[0].length(); } }; // typedef std::priority_queue, CompareExploreElemOverlapLength> ExplorePriorityQueue; typedef std::list EdgeDescList; typedef std::queue ExploreQueue; class CompleteOverlapSet { public: CompleteOverlapSet(const Vertex* pVertex, double maxER, int minLength); void getDiffMap(SGAlgorithms::EdgeDescOverlapMap& missingMap, SGAlgorithms::EdgeDescOverlapMap& extraMap); void removeOverlapsTo(Vertex* pRemove); // Remove all the transitive and containment relationships, leaving only the irreducible // If the input pointers are not NULL, the transitive and containment overlaps will be placed // in the appropriate map void computeIrreducible(SGAlgorithms::EdgeDescOverlapMap* pTransitive, SGAlgorithms::EdgeDescOverlapMap* pContainments); void constructMap(); void recursiveConstruct(const EdgeDesc& edXY, const Overlap& ovrXY, int depth, int distance); // Partition the OverlapMap into edges that are containments, irreducible and transitive // If the pointer for an output map is NULL, simply discard the edges void partitionOverlaps(SGAlgorithms::EdgeDescOverlapMap* pIrreducible, SGAlgorithms::EdgeDescOverlapMap* pTransitive, SGAlgorithms::EdgeDescOverlapMap* pContainment) const; void resetParameters(double maxER, int minLength); SGAlgorithms::EdgeDescOverlapMap getOverlapMap() const { return m_overlapMap; } size_t size() const { return m_overlapMap.size(); } size_t getCost() const { return m_cost; } private: // functions void iterativeConstruct(); void constructBFS(); // data SGAlgorithms::EdgeDescOverlapMap m_overlapMap; // the vertex this set is centered on const Vertex* m_pX; double m_maxER; int m_minLength; mutable size_t m_cost; }; #endif ================================================ FILE: src/SGA/StringGraph/GraphSearchTree.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // GraphSearchTree - Generic data structure used for implementing // a breadth-first search of a bidirectional graph. It is designed // to return all possible walks between the given start // and end vertices, up to a given distance. Used to search a // string graph or scaffold graph. // #ifndef GRAPHSEARCHTREE_H #define GRAPHSEARCHTREE_H #include "Bigraph.h" #include "SGWalk.h" #include #include template class GraphSearchNode { // Typedefs public: typedef std::deque* > GraphSearchNodePtrDeque; typedef std::vector _EDGEPtrVector; public: GraphSearchNode(VERTEX* pVertex, EdgeDir expandDir, GraphSearchNode* pParent, EDGE* pEdgeFromParent, int distance); ~GraphSearchNode(); // Reduce the child count by 1 void decrementChildren(); // Create the children of this node and place pointers to their nodes // on the queue. Returns the number of children created; int createChildren(GraphSearchNodePtrDeque& outQueue, const DISTANCE& distanceFunc); GraphSearchNode* getParent() const { return m_pParent; } VERTEX* getVertex() const { return m_pVertex; } int64_t getDistance() const { return m_distance; } EDGE* getEdgeFromParent() const { return m_pEdgeFromParent; } int getNumChildren() const { return m_numChildren; } private: // data VERTEX* m_pVertex; EdgeDir m_expandDir; GraphSearchNode* m_pParent; EDGE* m_pEdgeFromParent; int m_numChildren; int64_t m_distance; }; template class GraphSearchTree { // typedefs typedef GraphSearchNode _SearchNode; typedef typename _SearchNode::GraphSearchNodePtrDeque _SearchNodePtrDeque; typedef typename std::set<_SearchNode*> _SearchNodePtrSet; typedef std::vector WALK; // list of edges defines a walk through the graph typedef std::vector WALKVector; // vector of walks typedef std::vector VertexPtrVector; typedef std::vector VertexPtrVectorVector; public: GraphSearchTree(VERTEX* pStartVertex, VERTEX* pEndVertex, EdgeDir searchDir, int64_t distanceLimit, size_t nodeLimit); ~GraphSearchTree(); // Find connected components in the graph // Takes in a vector of all the vertices in the graph static void connectedComponents(VertexPtrVector allVertices, VertexPtrVectorVector& connectedComponents); // Returns true if the search has converged on a single vertex. In // other words, all walks from the start node share a common vertex, // which is represented by one of the nodes waiting expansion. // This function is the key to finding collapsed walks that represent // complex variation bubbles. It is a heavy operation however, as the // entire tree is search for each node in the expand queue. It should // only be used on small trees. // Returns true if the search converged and the pointer to the vertex // is return in pConvergedVertex. bool hasSearchConverged(VERTEX*& pConvergedVertex); // build walks to a given vertex template void buildWalksContainingVertex(VERTEX* pTarget, BUILDER& walkBuilder); // Construct walks representing every path from the start node template void buildWalksToAllLeaves(BUILDER& walkBuilder); // Construct walks representing every path from the start vertex to the goal vertex template void buildWalksToGoal(BUILDER& walkBuilder); // Expand all nodes in the queue a single time // Returns false if the search has stopped bool stepOnce(); // Check whether the search was aborted or not bool wasSearchAborted() const { return m_searchAborted; } private: // Search the branch from pNode to the root for pX. bool searchBranchForVertex(_SearchNode* pNode, VERTEX* pX, _SearchNode*& pFoundNode) const; // Build the walks from the root to the leaves in the queue template void _buildWalksToLeaves(const _SearchNodePtrDeque& queue, BUILDER& walkBuilder); // void addEdgesFromBranch(_SearchNode* pNode, WALK& outEdges); // Build a queue with all the leaves in it void _makeFullLeafQueue(_SearchNodePtrDeque& completeQueue) const; // print the branch sequence void printBranch(_SearchNode* pNode) const; // We keep the pointers to the search nodes // in one of three queues. // The goal queue contains the nodes representing the vertex we are searching for. // The expand queue contains nodes that have not yet been explored. // The done queue contains non-goal nodes that will not be expanded further. // Together, they represent all leaves of the tree _SearchNodePtrDeque m_goalQueue; _SearchNodePtrDeque m_expandQueue; _SearchNodePtrDeque m_doneQueue; size_t m_totalNodes; // The total number of nodes in the search tree _SearchNode* m_pRootNode; VERTEX* m_pGoalVertex; EdgeDir m_initialDir; int64_t m_distanceLimit; size_t m_nodeLimit; // Flag indicating the search was aborted bool m_searchAborted; // Distance functor DISTANCE m_distanceFunc; }; // template GraphSearchNode::GraphSearchNode(VERTEX* pVertex, EdgeDir expandDir, GraphSearchNode* pParent, EDGE* pEdgeFromParent, int distance) : m_pVertex(pVertex), m_expandDir(expandDir), m_pParent(pParent), m_pEdgeFromParent(pEdgeFromParent), m_numChildren(0) { // Set the extension distance if(m_pParent == NULL) { // this is the root node with distance 0 m_distance = 0; } else { assert(m_pEdgeFromParent != NULL); m_distance = m_pParent->m_distance + distance; } } // Delete this node and decrement the number of children // in the parent node. All children of a node must // be deleted before the parent template GraphSearchNode::~GraphSearchNode() { assert(m_numChildren == 0); if(m_pParent != NULL) m_pParent->decrementChildren(); } // template void GraphSearchNode::decrementChildren() { assert(m_numChildren != 0); m_numChildren -= 1; } // creates nodes for the children of this node // and place pointers to them in the queue. // Returns the number of nodes created template int GraphSearchNode::createChildren(GraphSearchNodePtrDeque& outDeque, const DISTANCE& distanceFunc) { assert(m_numChildren == 0); _EDGEPtrVector edges = m_pVertex->getEdges(m_expandDir); for(size_t i = 0; i < edges.size(); ++i) { EdgeDir childExpandDir = !edges[i]->getTwin()->getDir(); GraphSearchNode* pNode = new GraphSearchNode(edges[i]->getEnd(), childExpandDir, this, edges[i], distanceFunc(edges[i])); outDeque.push_back(pNode); m_numChildren += 1; } return edges.size(); } // // GraphSearchTree // template GraphSearchTree::GraphSearchTree(VERTEX* pStartVertex, VERTEX* pEndVertex, EdgeDir searchDir, int64_t distanceLimit, size_t nodeLimit) : m_pGoalVertex(pEndVertex), m_distanceLimit(distanceLimit), m_nodeLimit(nodeLimit), m_searchAborted(false) { // Create the root node of the search tree m_pRootNode = new GraphSearchNode(pStartVertex, searchDir, NULL, NULL, 0); // add the root to the expand queue m_expandQueue.push_back(m_pRootNode); m_totalNodes = 1; } template GraphSearchTree::~GraphSearchTree() { // Delete the tree // We delete each leaf and recurse up the tree iteratively deleting // parents with a single child node. This ensure that each parent is // deleted after all its children _SearchNodePtrDeque completeLeafNodes; _makeFullLeafQueue(completeLeafNodes); size_t totalDeleted = 0; for(typename _SearchNodePtrDeque::iterator iter = completeLeafNodes.begin(); iter != completeLeafNodes.end(); ++iter) { _SearchNode* pCurr = *iter; // loop invariant: pCurr is a deletable node // the loop stops when the parent is NULL or has // a child other than pCurr do { assert(pCurr->getNumChildren() == 0); _SearchNode* pNext = pCurr->getParent(); delete pCurr; // decrements pNext's child count totalDeleted += 1; pCurr = pNext; } while(pCurr && pCurr->getNumChildren() == 0); } assert(totalDeleted == m_totalNodes); } // Perform one step of the BFS template bool GraphSearchTree::stepOnce() { if(m_expandQueue.empty()) return false; if(m_totalNodes > m_nodeLimit) { // Move all nodes in the expand queue to the done queue m_doneQueue.insert(m_doneQueue.end(), m_expandQueue.begin(), m_expandQueue.end()); m_expandQueue.clear(); // Set a flag indicating the search was aborted m_searchAborted = true; return false; } // Iterate over the expand queue. If the path to the node // is outside the depth limit, move that node to the done queue. It cannot // yield a valid path to the goal. Otherwise, add the children of the node // to the incoming queue _SearchNodePtrDeque incomingQueue; while(!m_expandQueue.empty()) { _SearchNode* pNode = m_expandQueue.front(); m_expandQueue.pop_front(); if(pNode->getVertex() == m_pGoalVertex) { // This node represents the goal, add it to the goal queue m_goalQueue.push_back(pNode); continue; } if(pNode->getDistance() > m_distanceLimit) { // Path to this node is too long, expand it no further m_doneQueue.push_back(pNode); } else { // Add the children of this node to the queue int numCreated = pNode->createChildren(incomingQueue, m_distanceFunc); m_totalNodes += numCreated; if(numCreated == 0) { // No children created, add this node to the done queue m_doneQueue.push_back(pNode); } } } m_expandQueue = incomingQueue; return true; } // Return true if all the walks from the root converge // to one vertex (ie if the search from pX converged // to pY, then ALL paths from pX must go through pY). template bool GraphSearchTree::hasSearchConverged(VERTEX*& pConvergedVertex) { // Construct a set of all the leaf nodes _SearchNodePtrDeque completeLeafNodes; _makeFullLeafQueue(completeLeafNodes); // Search all the tree for all the nodes in the expand queue for(typename _SearchNodePtrDeque::iterator iter = m_expandQueue.begin(); iter != m_expandQueue.end(); ++iter) { _SearchNode* pNode = *iter; // If this node has the same vertex as the root skip it // We do not want to collapse at the root if(pNode->getVertex() == m_pRootNode->getVertex()) continue; bool isInAllBranches = true; for(typename _SearchNodePtrDeque::iterator leafIter = completeLeafNodes.begin(); leafIter != completeLeafNodes.end(); ++leafIter) { // Search the current branch from this leaf node to the root _SearchNode* pFoundNode = NULL; bool isInBranch = searchBranchForVertex(*leafIter, pNode->getVertex(), pFoundNode); if(!isInBranch) { isInAllBranches = false; break; } } // search has converted if(isInAllBranches) { pConvergedVertex = pNode->getVertex(); return true; } } // search has not converted pConvergedVertex = NULL; return false; } // Construct walks representing every path from the start node template template void GraphSearchTree::buildWalksToAllLeaves(BUILDER& walkBuilder) { // Construct a queue with all leaf nodes in it _SearchNodePtrDeque completeLeafNodes; _makeFullLeafQueue(completeLeafNodes); _buildWalksToLeaves(completeLeafNodes, walkBuilder); } // Construct walks representing every path from the start vertex to the goal vertex template template void GraphSearchTree::buildWalksToGoal(BUILDER& walkBuilder) { _buildWalksToLeaves(m_goalQueue, walkBuilder); } // Build all the walks that contain pTarget. template template void GraphSearchTree::buildWalksContainingVertex(VERTEX* pTarget, BUILDER& walkBuilder) { _SearchNodePtrDeque completeLeafNodes; _makeFullLeafQueue(completeLeafNodes); // Search upwards from each leaf until pTarget is found. // When it is found, insert the pointer to the search node // in the set _SearchNodePtrSet leafSet; // Find pTarget in each branch of the graph for(typename _SearchNodePtrDeque::const_iterator iter = completeLeafNodes.begin(); iter != completeLeafNodes.end(); ++iter) { _SearchNode* pFoundNode = NULL; searchBranchForVertex(*iter, pTarget, pFoundNode); assert(pFoundNode != NULL); leafSet.insert(pFoundNode); } // Construct all the walks to the found leaves completeLeafNodes.clear(); completeLeafNodes.insert(completeLeafNodes.end(), leafSet.begin(), leafSet.end()); _buildWalksToLeaves(completeLeafNodes, walkBuilder); } // Main function for constructing a vector of walks from a set of leaves template template void GraphSearchTree::_buildWalksToLeaves(const _SearchNodePtrDeque& queue, BUILDER& walkBuilder) { for(typename _SearchNodePtrDeque::const_iterator iter = queue.begin(); iter != queue.end(); ++iter) { // Recursively travel the tree from the leaf to the root collecting the edges in the vector WALK currWalk; addEdgesFromBranch(*iter, currWalk); // Reverse the walk and write it to the output structure walkBuilder.startNewWalk(m_pRootNode->getVertex()); for(typename WALK::reverse_iterator iter = currWalk.rbegin(); iter != currWalk.rend(); ++iter) walkBuilder.addEdge(*iter); walkBuilder.finishCurrentWalk(); } } // Return true if the vertex pX is found somewhere in the branch // from pNode to the root. If it is found, pFoundNode is set // to the furtherest instance of pX from the root. template bool GraphSearchTree::searchBranchForVertex(_SearchNode* pNode, VERTEX* pX, _SearchNode*& pFoundNode) const { if(pNode == NULL) { pFoundNode = NULL; return false; } if(pNode->getVertex() == pX && pNode != m_pRootNode) { pFoundNode = pNode; return true; } return searchBranchForVertex(pNode->getParent(), pX, pFoundNode); } // template void GraphSearchTree::addEdgesFromBranch(_SearchNode* pNode, WALK& outEdges) { // Terminate the recursion at the root node and dont add an edge if(pNode->getParent() != NULL) { outEdges.push_back(pNode->getEdgeFromParent()); return addEdgesFromBranch(pNode->getParent(), outEdges); } } // template void GraphSearchTree::_makeFullLeafQueue(_SearchNodePtrDeque& completeQueue) const { completeQueue.insert(completeQueue.end(), m_expandQueue.begin(), m_expandQueue.end()); completeQueue.insert(completeQueue.end(), m_goalQueue.begin(), m_goalQueue.end()); completeQueue.insert(completeQueue.end(), m_doneQueue.begin(), m_doneQueue.end()); } // template void GraphSearchTree::printBranch(_SearchNode* pNode) const { if(pNode != NULL) { std::cout << pNode->getVertex()->getID() << ","; printBranch(pNode->getParent()); } } template void GraphSearchTree::connectedComponents(VertexPtrVector allVertices, VertexPtrVectorVector& connectedComponents) { // Set the color of each vertex to be white signalling its not visited typename VertexPtrVector::iterator iter = allVertices.begin(); for(; iter != allVertices.end(); ++iter) { assert((*iter)->getColor() == GC_WHITE); (*iter)->setColor(GC_WHITE); } // iter = allVertices.begin(); for(; iter != allVertices.end(); ++iter) { // Do nothing if this vertex is already part of a CC if((*iter)->getColor() == GC_BLACK) continue; // Start a new CC VertexPtrVector currComponent; std::queue exploreQueue; (*iter)->setColor(GC_GRAY); // queued color exploreQueue.push(*iter); while(!exploreQueue.empty()) { VERTEX* pCurr = exploreQueue.front(); exploreQueue.pop(); assert(pCurr->getColor() != GC_BLACK); currComponent.push_back(pCurr); pCurr->setColor(GC_BLACK); //done with this vertex // Enqueue edges if they havent been visited already std::vector edges = pCurr->getEdges(); for(size_t i = 0; i < edges.size(); ++i) { EDGE* pEdge = edges[i]; VERTEX* pNext = pEdge->getEnd(); if(pNext->getColor() == GC_WHITE) { pNext->setColor(GC_GRAY); // queued exploreQueue.push(pNext); } } } connectedComponents.push_back(currComponent); } iter = allVertices.begin(); for(; iter != allVertices.end(); ++iter) { (*iter)->setColor(GC_WHITE); } // Sanity check size_t totalVertices = allVertices.size(); size_t totalInComponents = 0; for(size_t i = 0; i < connectedComponents.size(); ++i) { totalInComponents += connectedComponents[i].size(); } assert(totalVertices == totalInComponents); //std::cout << "[CC] total: " << totalVertices << " num components: " << connectedComponents.size() << "\n"; //std::cout << "[CC] total vertices in components: " << totalInComponents << "\n"; } #endif ================================================ FILE: src/SGA/StringGraph/Makefile.am ================================================ noinst_LIBRARIES = libstringgraph.a libstringgraph_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Thirdparty \ -I$(top_srcdir)/src/SGA/Algorithm \ -I$(top_srcdir)/src/SGA/SQG \ -I$(top_srcdir)/SeqLib libstringgraph_a_SOURCES = \ SGUtil.cpp SGUtil.h \ SGAlgorithms.cpp SGAlgorithms.h \ SGVisitors.h SGVisitors.cpp \ CompleteOverlapSet.h CompleteOverlapSet.cpp \ RemovalAlgorithm.h RemovalAlgorithm.cpp \ SGSearch.h SGSearch.cpp \ GraphSearchTree.h \ SGWalk.h SGWalk.cpp ================================================ FILE: src/SGA/StringGraph/Makefile.in ================================================ # Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/SGA/StringGraph ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libstringgraph_a_AR = $(AR) $(ARFLAGS) libstringgraph_a_LIBADD = am_libstringgraph_a_OBJECTS = libstringgraph_a-SGUtil.$(OBJEXT) \ libstringgraph_a-SGAlgorithms.$(OBJEXT) \ libstringgraph_a-SGVisitors.$(OBJEXT) \ libstringgraph_a-CompleteOverlapSet.$(OBJEXT) \ libstringgraph_a-RemovalAlgorithm.$(OBJEXT) \ libstringgraph_a-SGSearch.$(OBJEXT) \ libstringgraph_a-SGWalk.$(OBJEXT) libstringgraph_a_OBJECTS = $(am_libstringgraph_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = \ ./$(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Po \ ./$(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Po \ ./$(DEPDIR)/libstringgraph_a-SGAlgorithms.Po \ ./$(DEPDIR)/libstringgraph_a-SGSearch.Po \ ./$(DEPDIR)/libstringgraph_a-SGUtil.Po \ ./$(DEPDIR)/libstringgraph_a-SGVisitors.Po \ ./$(DEPDIR)/libstringgraph_a-SGWalk.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libstringgraph_a_SOURCES) DIST_SOURCES = $(libstringgraph_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libstringgraph.a libstringgraph_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Thirdparty \ -I$(top_srcdir)/src/SGA/Algorithm \ -I$(top_srcdir)/src/SGA/SQG \ -I$(top_srcdir)/SeqLib libstringgraph_a_SOURCES = \ SGUtil.cpp SGUtil.h \ SGAlgorithms.cpp SGAlgorithms.h \ SGVisitors.h SGVisitors.cpp \ CompleteOverlapSet.h CompleteOverlapSet.cpp \ RemovalAlgorithm.h RemovalAlgorithm.cpp \ SGSearch.h SGSearch.cpp \ GraphSearchTree.h \ SGWalk.h SGWalk.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/SGA/StringGraph/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/SGA/StringGraph/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libstringgraph.a: $(libstringgraph_a_OBJECTS) $(libstringgraph_a_DEPENDENCIES) $(EXTRA_libstringgraph_a_DEPENDENCIES) $(AM_V_at)-rm -f libstringgraph.a $(AM_V_AR)$(libstringgraph_a_AR) libstringgraph.a $(libstringgraph_a_OBJECTS) $(libstringgraph_a_LIBADD) $(AM_V_at)$(RANLIB) libstringgraph.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstringgraph_a-SGAlgorithms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstringgraph_a-SGSearch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstringgraph_a-SGUtil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstringgraph_a-SGVisitors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstringgraph_a-SGWalk.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libstringgraph_a-SGUtil.o: SGUtil.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGUtil.o -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGUtil.Tpo -c -o libstringgraph_a-SGUtil.o `test -f 'SGUtil.cpp' || echo '$(srcdir)/'`SGUtil.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGUtil.Tpo $(DEPDIR)/libstringgraph_a-SGUtil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGUtil.cpp' object='libstringgraph_a-SGUtil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGUtil.o `test -f 'SGUtil.cpp' || echo '$(srcdir)/'`SGUtil.cpp libstringgraph_a-SGUtil.obj: SGUtil.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGUtil.obj -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGUtil.Tpo -c -o libstringgraph_a-SGUtil.obj `if test -f 'SGUtil.cpp'; then $(CYGPATH_W) 'SGUtil.cpp'; else $(CYGPATH_W) '$(srcdir)/SGUtil.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGUtil.Tpo $(DEPDIR)/libstringgraph_a-SGUtil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGUtil.cpp' object='libstringgraph_a-SGUtil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGUtil.obj `if test -f 'SGUtil.cpp'; then $(CYGPATH_W) 'SGUtil.cpp'; else $(CYGPATH_W) '$(srcdir)/SGUtil.cpp'; fi` libstringgraph_a-SGAlgorithms.o: SGAlgorithms.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGAlgorithms.o -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGAlgorithms.Tpo -c -o libstringgraph_a-SGAlgorithms.o `test -f 'SGAlgorithms.cpp' || echo '$(srcdir)/'`SGAlgorithms.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGAlgorithms.Tpo $(DEPDIR)/libstringgraph_a-SGAlgorithms.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGAlgorithms.cpp' object='libstringgraph_a-SGAlgorithms.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGAlgorithms.o `test -f 'SGAlgorithms.cpp' || echo '$(srcdir)/'`SGAlgorithms.cpp libstringgraph_a-SGAlgorithms.obj: SGAlgorithms.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGAlgorithms.obj -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGAlgorithms.Tpo -c -o libstringgraph_a-SGAlgorithms.obj `if test -f 'SGAlgorithms.cpp'; then $(CYGPATH_W) 'SGAlgorithms.cpp'; else $(CYGPATH_W) '$(srcdir)/SGAlgorithms.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGAlgorithms.Tpo $(DEPDIR)/libstringgraph_a-SGAlgorithms.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGAlgorithms.cpp' object='libstringgraph_a-SGAlgorithms.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGAlgorithms.obj `if test -f 'SGAlgorithms.cpp'; then $(CYGPATH_W) 'SGAlgorithms.cpp'; else $(CYGPATH_W) '$(srcdir)/SGAlgorithms.cpp'; fi` libstringgraph_a-SGVisitors.o: SGVisitors.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGVisitors.o -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGVisitors.Tpo -c -o libstringgraph_a-SGVisitors.o `test -f 'SGVisitors.cpp' || echo '$(srcdir)/'`SGVisitors.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGVisitors.Tpo $(DEPDIR)/libstringgraph_a-SGVisitors.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGVisitors.cpp' object='libstringgraph_a-SGVisitors.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGVisitors.o `test -f 'SGVisitors.cpp' || echo '$(srcdir)/'`SGVisitors.cpp libstringgraph_a-SGVisitors.obj: SGVisitors.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGVisitors.obj -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGVisitors.Tpo -c -o libstringgraph_a-SGVisitors.obj `if test -f 'SGVisitors.cpp'; then $(CYGPATH_W) 'SGVisitors.cpp'; else $(CYGPATH_W) '$(srcdir)/SGVisitors.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGVisitors.Tpo $(DEPDIR)/libstringgraph_a-SGVisitors.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGVisitors.cpp' object='libstringgraph_a-SGVisitors.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGVisitors.obj `if test -f 'SGVisitors.cpp'; then $(CYGPATH_W) 'SGVisitors.cpp'; else $(CYGPATH_W) '$(srcdir)/SGVisitors.cpp'; fi` libstringgraph_a-CompleteOverlapSet.o: CompleteOverlapSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-CompleteOverlapSet.o -MD -MP -MF $(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Tpo -c -o libstringgraph_a-CompleteOverlapSet.o `test -f 'CompleteOverlapSet.cpp' || echo '$(srcdir)/'`CompleteOverlapSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Tpo $(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CompleteOverlapSet.cpp' object='libstringgraph_a-CompleteOverlapSet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-CompleteOverlapSet.o `test -f 'CompleteOverlapSet.cpp' || echo '$(srcdir)/'`CompleteOverlapSet.cpp libstringgraph_a-CompleteOverlapSet.obj: CompleteOverlapSet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-CompleteOverlapSet.obj -MD -MP -MF $(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Tpo -c -o libstringgraph_a-CompleteOverlapSet.obj `if test -f 'CompleteOverlapSet.cpp'; then $(CYGPATH_W) 'CompleteOverlapSet.cpp'; else $(CYGPATH_W) '$(srcdir)/CompleteOverlapSet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Tpo $(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CompleteOverlapSet.cpp' object='libstringgraph_a-CompleteOverlapSet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-CompleteOverlapSet.obj `if test -f 'CompleteOverlapSet.cpp'; then $(CYGPATH_W) 'CompleteOverlapSet.cpp'; else $(CYGPATH_W) '$(srcdir)/CompleteOverlapSet.cpp'; fi` libstringgraph_a-RemovalAlgorithm.o: RemovalAlgorithm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-RemovalAlgorithm.o -MD -MP -MF $(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Tpo -c -o libstringgraph_a-RemovalAlgorithm.o `test -f 'RemovalAlgorithm.cpp' || echo '$(srcdir)/'`RemovalAlgorithm.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Tpo $(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RemovalAlgorithm.cpp' object='libstringgraph_a-RemovalAlgorithm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-RemovalAlgorithm.o `test -f 'RemovalAlgorithm.cpp' || echo '$(srcdir)/'`RemovalAlgorithm.cpp libstringgraph_a-RemovalAlgorithm.obj: RemovalAlgorithm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-RemovalAlgorithm.obj -MD -MP -MF $(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Tpo -c -o libstringgraph_a-RemovalAlgorithm.obj `if test -f 'RemovalAlgorithm.cpp'; then $(CYGPATH_W) 'RemovalAlgorithm.cpp'; else $(CYGPATH_W) '$(srcdir)/RemovalAlgorithm.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Tpo $(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RemovalAlgorithm.cpp' object='libstringgraph_a-RemovalAlgorithm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-RemovalAlgorithm.obj `if test -f 'RemovalAlgorithm.cpp'; then $(CYGPATH_W) 'RemovalAlgorithm.cpp'; else $(CYGPATH_W) '$(srcdir)/RemovalAlgorithm.cpp'; fi` libstringgraph_a-SGSearch.o: SGSearch.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGSearch.o -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGSearch.Tpo -c -o libstringgraph_a-SGSearch.o `test -f 'SGSearch.cpp' || echo '$(srcdir)/'`SGSearch.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGSearch.Tpo $(DEPDIR)/libstringgraph_a-SGSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGSearch.cpp' object='libstringgraph_a-SGSearch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGSearch.o `test -f 'SGSearch.cpp' || echo '$(srcdir)/'`SGSearch.cpp libstringgraph_a-SGSearch.obj: SGSearch.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGSearch.obj -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGSearch.Tpo -c -o libstringgraph_a-SGSearch.obj `if test -f 'SGSearch.cpp'; then $(CYGPATH_W) 'SGSearch.cpp'; else $(CYGPATH_W) '$(srcdir)/SGSearch.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGSearch.Tpo $(DEPDIR)/libstringgraph_a-SGSearch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGSearch.cpp' object='libstringgraph_a-SGSearch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGSearch.obj `if test -f 'SGSearch.cpp'; then $(CYGPATH_W) 'SGSearch.cpp'; else $(CYGPATH_W) '$(srcdir)/SGSearch.cpp'; fi` libstringgraph_a-SGWalk.o: SGWalk.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGWalk.o -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGWalk.Tpo -c -o libstringgraph_a-SGWalk.o `test -f 'SGWalk.cpp' || echo '$(srcdir)/'`SGWalk.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGWalk.Tpo $(DEPDIR)/libstringgraph_a-SGWalk.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGWalk.cpp' object='libstringgraph_a-SGWalk.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGWalk.o `test -f 'SGWalk.cpp' || echo '$(srcdir)/'`SGWalk.cpp libstringgraph_a-SGWalk.obj: SGWalk.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libstringgraph_a-SGWalk.obj -MD -MP -MF $(DEPDIR)/libstringgraph_a-SGWalk.Tpo -c -o libstringgraph_a-SGWalk.obj `if test -f 'SGWalk.cpp'; then $(CYGPATH_W) 'SGWalk.cpp'; else $(CYGPATH_W) '$(srcdir)/SGWalk.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstringgraph_a-SGWalk.Tpo $(DEPDIR)/libstringgraph_a-SGWalk.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SGWalk.cpp' object='libstringgraph_a-SGWalk.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstringgraph_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libstringgraph_a-SGWalk.obj `if test -f 'SGWalk.cpp'; then $(CYGPATH_W) 'SGWalk.cpp'; else $(CYGPATH_W) '$(srcdir)/SGWalk.cpp'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Po -rm -f ./$(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGAlgorithms.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGSearch.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGUtil.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGVisitors.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGWalk.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libstringgraph_a-CompleteOverlapSet.Po -rm -f ./$(DEPDIR)/libstringgraph_a-RemovalAlgorithm.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGAlgorithms.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGSearch.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGUtil.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGVisitors.Po -rm -f ./$(DEPDIR)/libstringgraph_a-SGWalk.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/SGA/StringGraph/RemovalAlgorithm.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RemovalAlgorithm - Determine the set of edges that // must be added to a given vertex to keep the structure of the // graph intact when a vertex that it shares an edge with // is going to be removed from the graph. // This is similar to the CompleteOverlapSet but does // not perform an exhaustive exploration of the edges // #include "RemovalAlgorithm.h" // SGAlgorithms::EdgeDescOverlapMap RemovalAlgorithm::computeRequiredOverlaps(const Vertex* pVertex, const Edge* pRemovalEdge, double maxER, int minLength) { // this procedure is only valid for proper overlaps, the edge cannot be a containment assert(!pRemovalEdge->getOverlap().isContainment()); SGAlgorithms::EdgeDescOverlapMap outMap; findPotentialOverlaps(pVertex, pRemovalEdge, maxER, minLength, outMap); eliminateReachableEdges(pVertex, pRemovalEdge, maxER, minLength, outMap); return outMap; } // Find edges of pRemovalEdge->getEnd() that are potentially irreducible edges of pX once pRemovalEdge // has been eliminated from the graph void RemovalAlgorithm::findPotentialOverlaps(const Vertex* pX, const Edge* pRemovalEdge, double maxER, int minLength, SGAlgorithms::EdgeDescOverlapMap& outMap) { ExploreQueue queue; Vertex* pY = pRemovalEdge->getEnd(); Overlap ovrXY = pRemovalEdge->getOverlap(); EdgeDesc edXY = pRemovalEdge->getDesc(); // Get the edges of pY that face in the opposite direction of edge X <-- Y // New edges of pX must be in this direction. Edges in the direction of X // must have a longer overlap with X than Y does and therefore cannot be transitive // wrt to Y. EdgeDescSet visitedSet; EdgeDir dirY = !pRemovalEdge->getTwin()->getDir(); enqueueEdges(pY, dirY, ovrXY, edXY, minLength, queue, &visitedSet); int extra_extension = 0; while(!queue.empty()) { ExploreElement ee = queue.front(); queue.pop(); // If the overlap between this element and X is valid, add it to the output map // and proceed no further. If the overlap is above minLength but the error rate // with X is higher than the threshold, do not add it to the map but add its neighbors // as they may be valid overlaps to X EdgeDesc& edXZ = ee.ed; Vertex* pZ = edXZ.pVertex; Overlap& ovrXZ = ee.ovr; int overlapLen = ovrXZ.getOverlapLength(0); if(pZ == pX) continue; if(overlapLen >= minLength) { double error_rate = SGAlgorithms::calcErrorRate(pX, pZ, ovrXZ); if(isErrorRateAcceptable(error_rate, maxER)) { outMap.insert(std::make_pair(edXZ, ovrXZ)); } else { // Enqueue neighbors of pZ EdgeDir dirZ = edXZ.getTransitiveDir(); enqueueEdges(pZ, dirZ, ovrXZ, edXZ, minLength, queue, &visitedSet); ++extra_extension; } } } // Remove non-maximal overlaps from the collection SGAlgorithms::removeSubmaximalOverlaps(&outMap); } // Using the edges of pVertex, eliminate edges from outMap if they are transitive void RemovalAlgorithm::eliminateReachableEdges(const Vertex* pVertex, const Edge* pRemovalEdge, double maxER, int minLength, SGAlgorithms::EdgeDescOverlapMap& outMap) { // During the enqueue process, edges may have been added to outMap that are transitive to another // edge in outMap. We get rid of these first. SGAlgorithms::partitionTransitiveOverlaps(&outMap, NULL, maxER, minLength); // Now, eliminate any edges in outMap that are transitive wrt some edge reachable from pVertex // We control the depth of search using the shortest overlap in outMap // Get the length of the shortest overlap on pX in outMap int shortestOverlap = -1; for(SGAlgorithms::EdgeDescOverlapMap::iterator iter = outMap.begin(); iter != outMap.end(); ++iter) { int currOverlap = iter->second.getOverlapLength(0); if(shortestOverlap == -1 || currOverlap < shortestOverlap) { shortestOverlap = currOverlap; // std::cout << "SHORT: " << iter->second << "\n"; } } // Avoid loops by only enqueuing vertices that have not been visited before EdgeDescSet visitedSet; ExploreQueue queue; // Enqueue the initial overlaps of pX to the queue if they are longer than the shortest overlap EdgeDir dirX = pRemovalEdge->getDir(); EdgePtrVec edges = pVertex->getEdges(dirX); for(size_t i = 0; i < edges.size(); ++i) { Edge* pEdge = edges[i]; // Skip the edge that is being removed if(pEdge == pRemovalEdge) continue; EdgeDesc ed = pEdge->getDesc(); Overlap ovr = pEdge->getOverlap(); if(ovr.getOverlapLength(0) >= shortestOverlap && !ovr.isContainment()) { queue.push(ExploreElement(ed, ovr)); visitedSet.insert(ed); } } // The elements in the queue represent the irreducible overlaps of pX and any overlaps // that are transitive wrt the irreducible edges. If the edges in outMap are transitive // wrt to this edge set, remove them from the map. Any remaining edges are new irreducible edges. int num_ext = 0; while(!queue.empty()) { if(outMap.empty()) return; ExploreElement ee = queue.front(); queue.pop(); // If the overlap between this element and X is valid, add it to the output map // and proceed no further. If the overlap is above minLength but the error rate // with X is higher than the threshold, do not add it to the map but add its neighbors // as they may be valid overlaps to X EdgeDesc& edXY = ee.ed; Vertex* pY = edXY.pVertex; Overlap& ovrXY = ee.ovr; //std::cout << "OVRXY: " << ovrXY << "\n"; int overlapLen = ovrXY.getOverlapLength(0); assert(overlapLen >= shortestOverlap); (void)overlapLen; // Check all the overlaps in the map to see if they are transitive wrt pY SGAlgorithms::EdgeDescOverlapMap::iterator iter = outMap.begin(); while(iter != outMap.end()) { bool eliminate = false; const EdgeDesc& edXZ = iter->first; const Overlap& ovrXZ = iter->second; if(ovrXY.getOverlapLength(0) >= ovrXZ.getOverlapLength(0)) { if(edXY.pVertex == edXZ.pVertex) eliminate = true; else eliminate = SGAlgorithms::isOverlapTransitive(edXY.pVertex, edXZ.pVertex, ovrXY, ovrXZ, maxER, minLength); } if(eliminate) { outMap.erase(iter++); } else ++iter; } // If any overlaps remain in the map, enqueue the neighbors of this vertex // that have an overlap with X that is at least as long as shortest overlap if(!outMap.empty()) { num_ext++; enqueueEdges(pY, edXY.getTransitiveDir(), ovrXY, edXY, shortestOverlap, queue, &visitedSet); } } } // Add the edges of pY in direction dirY to the explore queue if they have a valid overlap with X void RemovalAlgorithm::enqueueEdges(const Vertex* pY, EdgeDir dirY, const Overlap& ovrXY, const EdgeDesc& /*edXY*/, int minOverlap, ExploreQueue& outQueue, EdgeDescSet* pSeenSet) { EdgePtrVec edges = pY->getEdges(dirY); for(size_t i = 0; i < edges.size(); ++i) { Edge* pEdge = edges[i]; Vertex* pZ = pEdge->getEnd(); // Compute the edgeDesc and overlap on pX for this edge Overlap ovrYZ = pEdge->getOverlap(); if(!ovrYZ.isContainment() && SGAlgorithms::hasTransitiveOverlap(ovrXY, ovrYZ)) { Overlap ovrXZ = SGAlgorithms::inferTransitiveOverlap(ovrXY, ovrYZ); EdgeDesc edXZ = SGAlgorithms::overlapToEdgeDesc(pZ, ovrXZ); if((pSeenSet == NULL || pSeenSet->count(edXZ) == 0) && ovrXZ.getOverlapLength(0) >= minOverlap) { outQueue.push(ExploreElement(edXZ, ovrXZ)); if(pSeenSet != NULL) pSeenSet->insert(edXZ); } } } } ================================================ FILE: src/SGA/StringGraph/RemovalAlgorithm.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RemovalAlgorithm - Determine the set of edges that // must be added to a given vertex to keep the structure of the // graph intact when a vertex that it shares an edge with // is going to be removed from the graph. // This is similar to the CompleteOverlapSet but does // not perform an exhaustive exploration of the edges // #ifndef REMOVALALGORITHM_H #define REMOVALALGORITHM_H #include "Bigraph.h" #include "SGAlgorithms.h" #include "CompleteOverlapSet.h" namespace RemovalAlgorithm { // Returns the set of overlaps that must be added to the graph // if the vertex at the end of pRemovalEdge is going to be deleted SGAlgorithms::EdgeDescOverlapMap computeRequiredOverlaps(const Vertex* pVertex, const Edge* pRemovalEdge, double maxER, int minLength); void findPotentialOverlaps(const Vertex* pX, const Edge* pRemovalEdge, double maxER, int minLength, SGAlgorithms::EdgeDescOverlapMap& outMap); void eliminateReachableEdges(const Vertex* pVertex, const Edge* pRemovalEdge, double maxER, int minLength, SGAlgorithms::EdgeDescOverlapMap& outMap); void enqueueEdges(const Vertex* pY, EdgeDir dirY, const Overlap& ovrXY, const EdgeDesc& edXY, int minOverlap, ExploreQueue& outQueue, EdgeDescSet* pSeenSet); }; #endif ================================================ FILE: src/SGA/StringGraph/SGAlgorithms.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGAlgorithms - Collection of algorithms for operating on string graphs // #include "SGAlgorithms.h" #include "SGUtil.h" #include "CompleteOverlapSet.h" #include "RemovalAlgorithm.h" #include // add edges to the graph for the given overlap Edge* SGAlgorithms::createEdgesFromOverlap(StringGraph* pGraph, const Overlap& o, bool allowContained, size_t maxEdges) { // Initialize data and perform checks Vertex* pVerts[2]; //Vertex* pVerts = new Vertex[2]; //JEREMIAH PUT ON HEAP EdgeComp comp = (o.match.isRC()) ? EC_REVERSE : EC_SAME; bool isContainment = o.match.isContainment(); assert(allowContained || !isContainment); (void)allowContained; for(size_t idx = 0; idx < 2; ++idx) { pVerts[idx] = pGraph->getVertex(o.id[idx]); // If one of the vertices is not in the graph, skip this edge // This can occur if one of the verts is a strict substring of some other vertex so it will // never be added to the graph if(pVerts[idx] == NULL) return NULL; } // Check if this is a substring containment, if so mark the contained read // but do not create edges for(size_t idx = 0; idx < 2; ++idx) { if(!o.match.coord[idx].isExtreme()) { std::cerr << "contained "; //JEREMIAH size_t containedIdx = 1 - idx; assert(o.match.coord[containedIdx].isExtreme()); pVerts[containedIdx]->setColor(GC_RED); pGraph->setContainmentFlag(true); return NULL; } } // If either vertex has the maximum number of edges, // do not add any more. This is to protect against ultra-dense // regions of the graph inflating memory usage. The nodes that reach // this limit, and nodes connected to them are marked as super repeats. // After loading the graph, all edges to super repeats are cut to prevent // misassembly. size_t num_edges_0 = pVerts[0]->countEdges(); size_t num_edges_1 = pVerts[1]->countEdges(); if(num_edges_0 > maxEdges || num_edges_1 > maxEdges) { //WARN_ONCE("Edge limit reached for vertex when loading graph"); pVerts[0]->setSuperRepeat(true); pVerts[1]->setSuperRepeat(true); return NULL; } if(!isContainment) { Edge* pEdges[2]; for(size_t idx = 0; idx < 2; ++idx) { EdgeDir dir = o.match.coord[idx].isLeftExtreme() ? ED_ANTISENSE : ED_SENSE; const SeqCoord& coord = o.match.coord[idx]; //pEdges[idx] = new(pGraph->getEdgeAllocator()) Edge(pVerts[1 - idx], dir, comp, coord); // JEREMIAH pEdges[idx] = new Edge(pVerts[1 - idx], dir, comp, coord); // JEREMIAH } pEdges[0]->setTwin(pEdges[1]); pEdges[1]->setTwin(pEdges[0]); pGraph->addEdge(pVerts[0], pEdges[0]); pGraph->addEdge(pVerts[1], pEdges[1]); return pEdges[0]; } else { // Contained edges don't have a direction, they can be travelled from // one vertex to the other in either direction. Hence, we // add two edges per vertex. Later during the contain removal // algorithm this is important to determine transitivity Edge* pEdges[4]; for(size_t idx = 0; idx < 2; ++idx) { const SeqCoord& coord = o.match.coord[idx]; // pEdges[idx] = new(pGraph->getEdgeAllocator()) Edge(pVerts[1 - idx], ED_SENSE, comp, coord); // pEdges[idx + 2] = new(pGraph->getEdgeAllocator()) Edge(pVerts[1 - idx], ED_ANTISENSE, comp, coord); pEdges[idx] = new Edge(pVerts[1 - idx], ED_SENSE, comp, coord); pEdges[idx + 2] = new Edge(pVerts[1 - idx], ED_ANTISENSE, comp, coord); } // Twin the edges and add them to the graph pEdges[0]->setTwin(pEdges[1]); pEdges[1]->setTwin(pEdges[0]); pEdges[2]->setTwin(pEdges[3]); pEdges[3]->setTwin(pEdges[2]); pGraph->addEdge(pVerts[0], pEdges[0]); pGraph->addEdge(pVerts[0], pEdges[2]); pGraph->addEdge(pVerts[1], pEdges[1]); pGraph->addEdge(pVerts[1], pEdges[3]); // Set containment flags updateContainFlags(pGraph, pVerts[0], pEdges[0]->getDesc(), o); return pEdges[0]; } } // Find new edges for pVertex that are required if pDeleteEdge is removed from the graph void SGAlgorithms::remodelVertexForExcision(StringGraph* pGraph, Vertex* pVertex, Edge* pDeleteEdge) { assert(pVertex == pDeleteEdge->getStart()); // If the edge is a containment edge, nothing needs to be done. No edges can be transitive // through containments if(pDeleteEdge->getOverlap().isContainment()) return; double maxER = pGraph->getErrorRate(); int minLength = pGraph->getMinOverlap(); EdgeDescOverlapMap addMap = RemovalAlgorithm::computeRequiredOverlaps(pVertex, pDeleteEdge, maxER, minLength); for(EdgeDescOverlapMap::iterator iter = addMap.begin(); iter != addMap.end(); ++iter) { //std::cout << "Adding edge " << iter->second << " during removal of " << pDeleteEdge->getEndID() << "\n"; createEdgesFromOverlap(pGraph, iter->second, false); } /* // Set the contain flags based on newly discovered edges updateContainFlags(pGraph, pVertex, containMap); */ } // Set containment flags in the graph based on the overlap map void SGAlgorithms::updateContainFlags(StringGraph* pGraph, Vertex* pVertex, EdgeDescOverlapMap& containMap) { for(EdgeDescOverlapMap::iterator iter = containMap.begin(); iter != containMap.end(); ++iter) { updateContainFlags(pGraph, pVertex, iter->first, iter->second); } } // void SGAlgorithms::updateContainFlags(StringGraph* pGraph, Vertex* pVertex, const EdgeDesc& ed, const Overlap& ovr) { assert(ovr.isContainment()); // Determine which of the two vertices is contained Vertex* pOther = ed.pVertex; if(ovr.getContainedIdx() == 0) pVertex->setContained(true); else pOther->setContained(true); pGraph->setContainmentFlag(true); } // Calculate the error rate between the two vertices double SGAlgorithms::calcErrorRate(const Vertex* pX, const Vertex* pY, const Overlap& ovrXY) { int num_diffs = ovrXY.match.countDifferences(pX->getSeq().toString(), pY->getSeq().toString()); return static_cast(num_diffs) / static_cast(ovrXY.match.getMinOverlapLength()); } // Infer an overlap from two edges // The input edges are between X->Y Y->Z // and the returned overlap is X->Z Overlap SGAlgorithms::inferTransitiveOverlap(const Overlap& ovrXY, const Overlap& ovrYZ) { // Construct the match Match match_yx = ovrXY.match; match_yx.swap(); Match match_yz = ovrYZ.match; // Infer the match_ij based match_i and match_j Match match_xz = Match::infer(match_yx, match_yz); match_xz.expand(); // Convert the match to an overlap Overlap ovr(ovrXY.id[0], ovrYZ.id[1], match_xz); return ovr; } // Returns true if, given overlaps X->Y, X->Z, the overlap X->Z is transitive bool SGAlgorithms::isOverlapTransitive(const Vertex* pY, const Vertex* pZ, const Overlap& ovrXY, const Overlap& ovrXZ, const double maxER, const int minOverlap) { // Ensure the overlaps are in the correct order, the overlap with Y should be at least // as large as the overlap with Z assert(ovrXY.getOverlapLength(0) >= ovrXZ.getOverlapLength(0)); assert(pY != pZ); // Compute the overlap YZ Overlap ovrYX = ovrXY; ovrYX.swap(); Overlap ovrYZ = SGAlgorithms::inferTransitiveOverlap(ovrYX, ovrXZ); // If ovrYZ is a containment, then Z is not transitive wrt Y if(ovrYZ.match.isContainment()) return false; // If the overlap between Y and Z is not long enough then Z is not transitive if(ovrYZ.getOverlapLength(0) < minOverlap) return false; // Finally, check that the error rate is below the threshold double error_rate = SGAlgorithms::calcErrorRate(pY, pZ, ovrYZ); if(isErrorRateAcceptable(error_rate, maxER)) return true; else return false; } // The following algorithms use these local types // defining an edge/overlap pair. typedef std::pair EdgeDescOverlapPair; // Compare two edges by their overlap length struct EDOPairCompare { bool operator()(const EdgeDescOverlapPair& edpXY, const EdgeDescOverlapPair& edpXZ) { return edpXY.second.match.coord[0].length() < edpXZ.second.match.coord[0].length(); } }; // typedefs typedef std::priority_queue, EDOPairCompare> EDOPairQueue; // Move the transitive edges from pOverlapMap to pTransitive void SGAlgorithms::partitionTransitiveOverlaps(EdgeDescOverlapMap* pOverlapMap, EdgeDescOverlapMap* pTransitive, double maxER, int minLength) { EDOPairQueue overlapQueue; for(SGAlgorithms::EdgeDescOverlapMap::iterator iter = pOverlapMap->begin(); iter != pOverlapMap->end(); ++iter) { overlapQueue.push(*iter); } // Traverse the list of overlaps in order of length and move elements from // the irreducible map to the transitive map while(!overlapQueue.empty()) { EdgeDescOverlapPair edoPair = overlapQueue.top(); overlapQueue.pop(); EdgeDesc& edXY = edoPair.first; Overlap& ovrXY = edoPair.second; assert(!ovrXY.match.isContainment()); SGAlgorithms::EdgeDescOverlapMap::iterator iter = pOverlapMap->begin(); while(iter != pOverlapMap->end()) { bool move = false; const EdgeDesc& edXZ = iter->first; const Overlap& ovrXZ = iter->second; // Four conditions must be met to mark an edge X->Z transitive through X->Y // 1) The overlaps must be in the same direction // 2) The overlap X->Y must be strictly longer than X->Z // 3) The overlap between Y->Z must not be a containment // 4) The overlap between Y->Z must be within the error and length thresholds if(!(edXZ == edXY) && edXY.dir == edXZ.dir && ovrXY.getOverlapLength(0) > ovrXZ.getOverlapLength(0)) { move = SGAlgorithms::isOverlapTransitive(edXY.pVertex, edXZ.pVertex, ovrXY, ovrXZ, maxER, minLength); } if(move) { //std::cout << "Marking overlap: " << iter->second << " as trans via " << ovrXY << "\n"; if(pTransitive != NULL) pTransitive->insert(*iter); pOverlapMap->erase(iter++); } else { ++iter; } } } } void SGAlgorithms::removeSubmaximalOverlaps(EdgeDescOverlapMap* pOverlapMap) { EDOPairQueue overlapQueue; for(SGAlgorithms::EdgeDescOverlapMap::iterator iter = pOverlapMap->begin(); iter != pOverlapMap->end(); ++iter) { overlapQueue.push(*iter); } // Traverse the list of overlaps in order of length // Only add the first seen overlap for each vertex pOverlapMap->clear(); VertexIDSet seenVerts; // the irreducible map to the transitive map while(!overlapQueue.empty()) { EdgeDescOverlapPair edoPair = overlapQueue.top(); overlapQueue.pop(); EdgeDesc& edXY = edoPair.first; if(seenVerts.count(edXY.pVertex->getID()) == 0) { seenVerts.insert(edXY.pVertex->getID()); pOverlapMap->insert(edoPair); } } } // Return a descriptor of the edge describing ovrXY EdgeDesc SGAlgorithms::overlapToEdgeDesc(Vertex* pY, const Overlap& ovrXY) { EdgeDesc edXY; edXY.pVertex = pY; edXY.comp = (ovrXY.match.isRC()) ? EC_REVERSE : EC_SAME; edXY.dir = ovrXY.match.coord[0].isLeftExtreme() ? ED_ANTISENSE : ED_SENSE; // X -> Y return edXY; } // Return true if XZ has an overlap bool SGAlgorithms::hasTransitiveOverlap(const Overlap& ovrXY, const Overlap& ovrYZ) { Match match_yx = ovrXY.match; match_yx.swap(); Match match_yz = ovrYZ.match; return Match::doMatchesIntersect(match_yx, match_yz); } // EdgeDesc SGAlgorithms::getEdgeDescFromEdge(Edge* pEdge) { return pEdge->getDesc(); } void SGAlgorithms::printOverlapMap(const EdgeDescOverlapMap& overlapMap) { for(EdgeDescOverlapMap::const_iterator iter = overlapMap.begin(); iter != overlapMap.end(); ++iter) { std::cout << " Overlap:" << iter->second << "\n"; } } ================================================ FILE: src/SGA/StringGraph/SGAlgorithms.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGAlgorithms - Algorithms for manipulating // the string graph // #ifndef SGALGORITHMS_H #define SGALGORITHMS_H #include "Bigraph.h" #include "SGUtil.h" #include namespace SGAlgorithms { // // Helper data structures // typedef std::set VertexIDSet; typedef std::set EdgeDescSet; typedef std::map EdgeDescOverlapMap; // Remodel the graph by finding new edges for the given vertex to avoid // causing a disconnection when removing pDeleteEdge void remodelVertexForExcision(StringGraph* pGraph, Vertex* pVertex, Edge* pDeleteEdge); // Create the edges in pGraph described by the overlap // A pointer to the first edge of the edge/edge twin is returned or NULL // if the edges cannot be added Edge* createEdgesFromOverlap(StringGraph* pGraph, const Overlap& o, bool allowContained, size_t maxEdges = -1); // Calculate the error rate between the two vertex sequences double calcErrorRate(const Vertex* pX, const Vertex* pY, const Overlap& ovrXY); // Update the containment flags in the graph using the described overlaps void updateContainFlags(StringGraph* pGraph, Vertex* pVertex, EdgeDescOverlapMap& containMap); void updateContainFlags(StringGraph* pGraph, Vertex* pVertex, const EdgeDesc& ed, const Overlap& ovr); // // Overlap inference algorithms // // Infer an overlap from two edges // The input overlaps are between X->Y Y->Z // and the returned overlap is X->Z Overlap inferTransitiveOverlap(const Overlap& ovrXY, const Overlap& ovrYZ); EdgeDesc overlapToEdgeDesc(Vertex* pY, const Overlap& ovrXY); // Returns true if given overlaps X->Y, X->Z, the overlap X->Z is transitive bool isOverlapTransitive(const Vertex* pY, const Vertex* pZ, const Overlap& ovrXY, const Overlap& ovrXZ, const double maxER, const int minOverlap); // Returns true if XZ has a non-zero length overlap bool hasTransitiveOverlap(const Overlap& ovrXY, const Overlap& ovrYZ); // Partition a set of overlaps into transitive and irreducible edges void partitionTransitiveOverlaps(EdgeDescOverlapMap* pOverlapMap, EdgeDescOverlapMap* pTransitive, double maxER, int minLength); // Each read can have at most one edge to any other read in a given direction // This function removes any duplicates void removeSubmaximalOverlaps(EdgeDescOverlapMap* pOverlapMap); // Simple getters for std::transform EdgeDesc getEdgeDescFromEdge(Edge* pEdge); void printOverlapMap(const EdgeDescOverlapMap& overlapMap); }; #endif ================================================ FILE: src/SGA/StringGraph/SGSearch.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGSearch - Algorithms and data structures // for searching a string graph // #include "SGSearch.h" #include // SGWalkBuilder::SGWalkBuilder(SGWalkVector& outWalks, bool bIndexWalk) : m_outWalks(outWalks), m_pCurrWalk(NULL), m_bIndexWalk(bIndexWalk) { } // SGWalkBuilder::~SGWalkBuilder() { // The pointer to the current walk should be NULL // or else finishCurrentWalk() was not called for the last // walk and the graph search algorithm has a bug assert(m_pCurrWalk == NULL); } // void SGWalkBuilder::startNewWalk(Vertex* pStartVertex) { m_pCurrWalk = new SGWalk(pStartVertex, m_bIndexWalk); } // void SGWalkBuilder::addEdge(Edge* pEdge) { m_pCurrWalk->addEdge(pEdge); } // void SGWalkBuilder::finishCurrentWalk() { m_outWalks.push_back(*m_pCurrWalk); delete m_pCurrWalk; m_pCurrWalk = NULL; } // Find all the walks between pX and pY that are within maxDistance // If the exhaustive flag is set, only return walks if all the possible // solutions have been found. If exhaustive is false, any walks found will be // returned in outWalks even if the search is aborted. // Returns true if all the possible walks were found. bool SGSearch::findWalks(Vertex* pX, Vertex* pY, EdgeDir initialDir, int maxDistance, size_t maxNodes, bool exhaustive, SGWalkVector& outWalks) { SGSearchTree searchTree(pX, pY, initialDir, maxDistance, maxNodes); // Iteravively perform the BFS using the search tree. while(searchTree.stepOnce()) { } // If the search was aborted, do not return any walks // because we do not know if there are more valid paths from pX // to pY that we could not find because the search space was too large if(!searchTree.wasSearchAborted() || !exhaustive) { // Extract the walks from the graph as a vector of edges SGWalkBuilder builder(outWalks, false); searchTree.buildWalksToGoal(builder); } return !searchTree.wasSearchAborted(); } // Search the graph for a set of walks that represent alternate // versions of the same sequence. These walks are found by searching // the graph for a set of walks that start/end at a common vertex and cover // every vertex inbetween the start/end points. Additionally, the internal // vertices cannot have an edge to any vertex that is not in the set of vertices // indicated by the walks. Finally, all walks must have the same orientation for the // end vertex. // If these conditions are met, we can retain one of the walks and cleanly remove // the others. void SGSearch::findVariantWalks(Vertex* pX, EdgeDir initialDir, int maxDistance, size_t maxWalks, SGWalkVector& outWalks) { findCollapsedWalks(pX, initialDir, maxDistance, 500, outWalks); if(outWalks.size() <= 1 || outWalks.size() > maxWalks) { outWalks.clear(); return; } Edge* pLastEdge = outWalks.front().getLastEdge(); Vertex* pLastVertex = pLastEdge->getEnd(); EdgeDir lastDir = pLastEdge->getTwinDir(); // Validate that any of the returned walks can be removed cleanly. // This means that for all the internal vertices on each walk (between // the common endpoints) the only links are to other vertices in the set, // and that the last vertex has the same orientation for all walks. // Construct the set of vertex IDs std::set completeVertexSet; bool sameOrientation = true; for(size_t i = 0; i < outWalks.size(); ++i) { if (outWalks[i].getLastEdge()->getTwinDir() != lastDir) { sameOrientation = false; break; } VertexPtrVec verts = outWalks[i].getVertices(); for(size_t j = 0; j < verts.size(); ++j) { completeVertexSet.insert(verts[j]); } } // Return if the walks do not have the same orientation for the last vertex if(!sameOrientation) { outWalks.clear(); return; } // Check that each vertex in the internal nodes only has // edges to the vertices in the set bool cleanlyRemovable = true; // Ensure that all the vertices linked to the start vertex // in the specified dir are present in the set. EdgePtrVec epv = pX->getEdges(initialDir); cleanlyRemovable = checkEndpointsInSet(epv, completeVertexSet); // Ensure that all the vertex linked to the last vertex // in the incoming direction are preset epv = pLastVertex->getEdges(lastDir); cleanlyRemovable = cleanlyRemovable && checkEndpointsInSet(epv, completeVertexSet); // Check that each vertex connected to an interval vertex is also present for(std::set::iterator iter = completeVertexSet.begin(); iter != completeVertexSet.end(); ++iter) { Vertex* pY = *iter; if(pY == pX || pY == pLastVertex) continue; epv = pY->getEdges(); cleanlyRemovable = cleanlyRemovable && checkEndpointsInSet(epv, completeVertexSet); } if(!cleanlyRemovable) { outWalks.clear(); } return; } // Check that all the endpoints of the edges in the edge pointer vector // are members of the set bool SGSearch::checkEndpointsInSet(EdgePtrVec& epv, std::set& vertexSet) { for(size_t i = 0; i < epv.size(); ++i) { if(vertexSet.find(epv[i]->getEnd()) == vertexSet.end()) return false; } return true; } // Return a set of walks that all start from pX and join together at some later vertex // If no such walk exists, an empty set is returned void SGSearch::findCollapsedWalks(Vertex* pX, EdgeDir initialDir, int maxDistance, size_t maxNodes, SGWalkVector& outWalks) { SGSearchTree searchTree(pX, NULL, initialDir, maxDistance, maxNodes); // Iteravively perform the BFS using the search tree. After each step // we check if the search has collapsed to a single vertex. bool done = false; while(!done) { done = !searchTree.stepOnce(); if(searchTree.wasSearchAborted()) break; Vertex* pCollapsedVertex; bool isCollapsed = searchTree.hasSearchConverged(pCollapsedVertex); if(isCollapsed) { assert(pCollapsedVertex != NULL); // pCollapsedVertex is common between all walks. // Check that the extension distance for any walk is no longer than maxDistance. // If this is the case, we truncate all walks so they end at pCollapsedVertex and return // all the non-redundant walks in outWalks SGWalkBuilder builder(outWalks, true); searchTree.buildWalksContainingVertex(pCollapsedVertex, builder); return; } } // no collapsed walk found, return empty set outWalks.clear(); } // Count the number of reads that span the junction described by edge XY // X -------------- // Y ------------ // Z ----------- // W ---------- // In this case Z spans the junction but W does not. int SGSearch::countSpanningCoverage(Edge* pXY, size_t maxQueue) { (void)pXY; (void)maxQueue; assert(false && "deprecated"); return 0; } ================================================ FILE: src/SGA/StringGraph/SGSearch.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGSearch - Algorithms and data structures // for searching a string graph // #ifndef SGSEARCH_H #define SGSEARCH_H #include "Bigraph.h" #include "SGWalk.h" #include "GraphSearchTree.h" #include // Returns the extension distance indicated // by the given edge struct SGDistanceFunction { int operator()(const Edge* pEdge) const { return pEdge->getSeqLen(); } }; // typedef GraphSearchTree SGSearchTree; // struct SGWalkBuilder { public: SGWalkBuilder(SGWalkVector& outWalks, bool bIndexWalk); ~SGWalkBuilder(); // These three functions must be provided by the builder object // the generic graph code calls these to describe the walks through // the graph void startNewWalk(Vertex* pStartVertex); void addEdge(Edge* pEdge); void finishCurrentWalk(); private: SGWalkVector& m_outWalks; SGWalk* m_pCurrWalk; bool m_bIndexWalk; }; // String Graph searching algorithms namespace SGSearch { // bool findWalks(Vertex* pX, Vertex* pY, EdgeDir initialDir, int maxDistance, size_t maxNodes, bool exhaustive, SGWalkVector& outWalks); void findVariantWalks(Vertex* pX, EdgeDir initialDir, int maxDistance, size_t maxWalks, SGWalkVector& outWalks); void findCollapsedWalks(Vertex* pX, EdgeDir initialDir, int maxDistance, size_t maxNodes, SGWalkVector& outWalks); // Count the number of vertices that span the sequence junction // described by edge XY. Returns -1 if the search was not completed int countSpanningCoverage(Edge* pXY, size_t maxQueue); // Returns true if all the endpoints of the edges in epv are in vertexSet bool checkEndpointsInSet(EdgePtrVec& epv, std::set& vertexSet); }; #endif ================================================ FILE: src/SGA/StringGraph/SGUtil.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGUtils - Data structures/Functions related // to building and manipulating string graphs // #include "SGUtil.h" #include "SeqReader.h" #include "SGAlgorithms.h" #include "SGVisitors.h" StringGraph* SGUtil::loadASQG(const std::string& filename, const unsigned int minOverlap, bool allowContainments, size_t maxEdges) { // Initialize graph StringGraph* pGraph = new StringGraph; std::istream* pReader = createReader(filename); int stage = 0; int line = 0; std::string recordLine; while(getline(*pReader, recordLine)) { ASQG::RecordType rt = ASQG::getRecordType(recordLine); switch(rt) { case ASQG::RT_HEADER: { if(stage != 0) { std::cerr << "Error: Unexpected header record found at line " << line << "\n"; exit(EXIT_FAILURE); } ASQG::HeaderRecord headerRecord(recordLine); const SQG::IntTag& overlapTag = headerRecord.getOverlapTag(); if(overlapTag.isInitialized()) pGraph->setMinOverlap(overlapTag.get()); else pGraph->setMinOverlap(0); const SQG::FloatTag& errorRateTag = headerRecord.getErrorRateTag(); if(errorRateTag.isInitialized()) pGraph->setErrorRate(errorRateTag.get()); const SQG::IntTag& containmentTag = headerRecord.getContainmentTag(); if(containmentTag.isInitialized()) pGraph->setContainmentFlag(containmentTag.get()); else pGraph->setContainmentFlag(true); // conservatively assume containments are present const SQG::IntTag& transitiveTag = headerRecord.getTransitiveTag(); if(!transitiveTag.isInitialized()) { std::cerr << "Warning: ASQG does not have transitive tag\n"; pGraph->setTransitiveFlag(true); } else { pGraph->setTransitiveFlag(transitiveTag.get()); } break; } case ASQG::RT_VERTEX: { // progress the stage if we are done the header if(stage == 0) stage = 1; if(stage != 1) { std::cerr << "Error: Unexpected vertex record found at line " << line << "\n"; exit(EXIT_FAILURE); } ASQG::VertexRecord vertexRecord(recordLine); const SQG::IntTag& ssTag = vertexRecord.getSubstringTag(); // Vertex* pVertex = new(pGraph->getVertexAllocator()) Vertex(vertexRecord.getID(), vertexRecord.getSeq()); Vertex* pVertex = new Vertex(vertexRecord.getID(), vertexRecord.getSeq()); if(ssTag.isInitialized() && ssTag.get() == 1) { // Vertex is a substring of some other vertex, mark it as contained pVertex->setContained(true); pGraph->setContainmentFlag(true); } pGraph->addVertex(pVertex); break; } case ASQG::RT_EDGE: { if(stage == 1) stage = 2; if(stage != 2) { std::cerr << "Error: Unexpected edge record found at line " << line << "\n"; exit(EXIT_FAILURE); } ASQG::EdgeRecord edgeRecord(recordLine); const Overlap& ovr = edgeRecord.getOverlap(); // Add the edge to the graph if(ovr.match.getMinOverlapLength() >= (int)minOverlap) SGAlgorithms::createEdgesFromOverlap(pGraph, ovr, allowContainments, maxEdges); break; } } ++line; } // Completely delete the edges for all nodes that were marked as super-repetitive in the graph SGSuperRepeatVisitor superRepeatVisitor; pGraph->visit(superRepeatVisitor); // Remove any duplicate edges SGDuplicateVisitor dupVisit; pGraph->visit(dupVisit); SGGraphStatsVisitor statsVisit; pGraph->visit(statsVisit); // Remove identical vertices // This is much cheaper to do than remove via // SGContainRemove as no remodelling needs to occur /* SGIdenticalRemoveVisitor irv; pGraph->visit(irv); // Remove substring vertices while(pGraph->hasContainment()) { SGContainRemoveVisitor crv; pGraph->visit(crv); } */ delete pReader; return pGraph; } //JEREMIAH StringGraph* SGUtil::loadASQG(std::stringstream& pReader, const unsigned int minOverlap, bool allowContainments, size_t maxEdges) { // Initialize graph StringGraph* pGraph = new StringGraph; //std::istream* pReader = createReader(filename); int stage = 0; int line = 0; std::string recordLine; while(getline(pReader, recordLine)) { ASQG::RecordType rt = ASQG::getRecordType(recordLine); switch(rt) { case ASQG::RT_HEADER: { if(stage != 0) { std::cerr << "Error: Unexpected header record found at line " << line << "\n"; exit(EXIT_FAILURE); } ASQG::HeaderRecord headerRecord(recordLine); const SQG::IntTag& overlapTag = headerRecord.getOverlapTag(); if(overlapTag.isInitialized()) pGraph->setMinOverlap(overlapTag.get()); else pGraph->setMinOverlap(0); const SQG::FloatTag& errorRateTag = headerRecord.getErrorRateTag(); if(errorRateTag.isInitialized()) pGraph->setErrorRate(errorRateTag.get()); const SQG::IntTag& containmentTag = headerRecord.getContainmentTag(); if(containmentTag.isInitialized()) pGraph->setContainmentFlag(containmentTag.get()); else pGraph->setContainmentFlag(true); // conservatively assume containments are present const SQG::IntTag& transitiveTag = headerRecord.getTransitiveTag(); if(!transitiveTag.isInitialized()) { std::cerr << "Warning: ASQG does not have transitive tag\n"; pGraph->setTransitiveFlag(true); } else { pGraph->setTransitiveFlag(transitiveTag.get()); } break; } case ASQG::RT_VERTEX: { // progress the stage if we are done the header if(stage == 0) stage = 1; if(stage != 1) { std::cerr << "Error: Unexpected vertex record found at line " << line << "\n"; exit(EXIT_FAILURE); } ASQG::VertexRecord vertexRecord(recordLine); const SQG::IntTag& ssTag = vertexRecord.getSubstringTag(); // Vertex* pVertex = new(pGraph->getVertexAllocator()) Vertex(vertexRecord.getID(), vertexRecord.getSeq()); Vertex* pVertex = new Vertex(vertexRecord.getID(), vertexRecord.getSeq()); if(ssTag.isInitialized() && ssTag.get() == 1) { // Vertex is a substring of some other vertex, mark it as contained pVertex->setContained(true); pGraph->setContainmentFlag(true); } pGraph->addVertex(pVertex); break; } case ASQG::RT_EDGE: { if(stage == 1) stage = 2; if(stage != 2) { std::cerr << "Error: Unexpected edge record found at line " << line << "\n"; exit(EXIT_FAILURE); } ASQG::EdgeRecord edgeRecord(recordLine); const Overlap& ovr = edgeRecord.getOverlap(); // Add the edge to the graph if(ovr.match.getMinOverlapLength() >= (int)minOverlap) SGAlgorithms::createEdgesFromOverlap(pGraph, ovr, allowContainments, maxEdges); break; } } ++line; } // Completely delete the edges for all nodes that were marked as super-repetitive in the graph SGSuperRepeatVisitor superRepeatVisitor; pGraph->visit(superRepeatVisitor); // Remove any duplicate edges SGDuplicateVisitor dupVisit; pGraph->visit(dupVisit); //SGGraphStatsVisitor statsVisit; //pGraph->visit(statsVisit); // Remove identical vertices // This is much cheaper to do than remove via // SGContainRemove as no remodelling needs to occur /* SGIdenticalRemoveVisitor irv; pGraph->visit(irv); // Remove substring vertices while(pGraph->hasContainment()) { SGContainRemoveVisitor crv; pGraph->visit(crv); } */ //delete pReader; return pGraph; } // Load a graph (with no edges) from a fasta file StringGraph* SGUtil::loadFASTA(const std::string& filename) { StringGraph* pGraph = new StringGraph; SeqReader reader(filename); SeqRecord record; while(reader.get(record)) { //Vertex* pVertex = new(pGraph->getVertexAllocator()) Vertex(record.id, record.seq.toString()); Vertex* pVertex = new Vertex(record.id, record.seq.toString()); pGraph->addVertex(pVertex); } return pGraph; } ================================================ FILE: src/SGA/StringGraph/SGUtil.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // SGUtils - Data structures/Functions related // to building and manipulating string graphs // #ifndef SGUTIL_H #define SGUTIL_H #include "Bigraph.h" #include "ASQG.h" // typedefs typedef Bigraph StringGraph; namespace SGUtil { // Main string graph loading function // The allowContainments flag forces the string graph to retain identical vertices // Vertices that are substrings of other vertices (SS flag = 1) are never kept StringGraph* loadASQG(const std::string& filename, const unsigned int minOverlap, bool allowContainments = false, size_t maxEdges = -1); StringGraph* loadASQG(std::stringstream& pReader, const unsigned int minOverlap, bool allowContainments = false, size_t maxEdges = -1); // Load a string graph from a fasta file. // Returns a graph where each sequence in the fasta is a vertex but there are no edges in the graph. StringGraph* loadFASTA(const std::string& filename); }; #endif ================================================ FILE: src/SGA/StringGraph/SGVisitors.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGVisitors - Algorithms that visit // each vertex in the graph and perform some // operation // #include "SGVisitors.h" #include "CompleteOverlapSet.h" #include "SGSearch.h" #include "stdaln.h" // // SGFastaVisitor - output the vertices in the graph in // fasta format // bool SGFastaVisitor::visit(StringGraph* /*pGraph*/, Vertex* pVertex) { m_fileHandle << ">" << pVertex->getID() << " " << pVertex->getSeq().length() << " " << 0 << "\n"; m_fileHandle << pVertex->getSeq() << "\n"; return false; } // jwala added bool SGVisitorContig::visit(StringGraph* /*pGraph*/, Vertex* pVertex) { m_ct.push_back(SeqLib::UnalignedSequence(pVertex->getID(), pVertex->getSeq().toString(),std::string())); return false; } // // SGTransRedVisitor - Perform a transitive reduction about this vertex // This uses Myers' algorithm (2005, The fragment assembly string graph) // Precondition: the edge list is sorted by length (ascending) void SGTransitiveReductionVisitor::previsit(StringGraph* pGraph) { // The graph must not have containments assert(!pGraph->hasContainment()); // Set all the vertices in the graph to "vacant" pGraph->setColors(GC_WHITE); pGraph->sortVertexAdjListsByLen(); marked_verts = 0; marked_edges = 0; } // bool SGTransitiveReductionVisitor::visit(StringGraph* /*pGraph*/, Vertex* pVertex) { size_t trans_count = 0; static const size_t FUZZ = 10; // see myers for(size_t idx = 0; idx < ED_COUNT; idx++) { EdgeDir dir = EDGE_DIRECTIONS[idx]; EdgePtrVec edges = pVertex->getEdges(dir); // These edges are already sorted if(edges.size() == 0) continue; for(size_t i = 0; i < edges.size(); ++i) (edges[i])->getEnd()->setColor(GC_GRAY); Edge* pLongestEdge = edges.back(); size_t longestLen = pLongestEdge->getSeqLen() + FUZZ; // Stage 1 for(size_t i = 0; i < edges.size(); ++i) { Edge* pVWEdge = edges[i]; Vertex* pWVert = pVWEdge->getEnd(); EdgeDir transDir = !pVWEdge->getTwinDir(); if(pWVert->getColor() == GC_GRAY) { EdgePtrVec w_edges = pWVert->getEdges(transDir); for(size_t j = 0; j < w_edges.size(); ++j) { Edge* pWXEdge = w_edges[j]; size_t trans_len = pVWEdge->getSeqLen() + pWXEdge->getSeqLen(); if(trans_len <= longestLen) { if(pWXEdge->getEnd()->getColor() == GC_GRAY) { // X is the endpoint of an edge of V, therefore it is transitive pWXEdge->getEnd()->setColor(GC_BLACK); } } else break; } } } // Stage 2 for(size_t i = 0; i < edges.size(); ++i) { Edge* pVWEdge = edges[i]; Vertex* pWVert = pVWEdge->getEnd(); EdgeDir transDir = !pVWEdge->getTwinDir(); EdgePtrVec w_edges = pWVert->getEdges(transDir); for(size_t j = 0; j < w_edges.size(); ++j) { Edge* pWXEdge = w_edges[j]; size_t len = pWXEdge->getSeqLen(); if(len < FUZZ || j == 0) { if(pWXEdge->getEnd()->getColor() == GC_GRAY) { // X is the endpoint of an edge of V, therefore it is transitive pWXEdge->getEnd()->setColor(GC_BLACK); } } else { break; } } } for(size_t i = 0; i < edges.size(); ++i) { if(edges[i]->getEnd()->getColor() == GC_BLACK) { // Mark the edge and its twin for removal if(edges[i]->getColor() != GC_BLACK || edges[i]->getTwin()->getColor() != GC_BLACK) { edges[i]->setColor(GC_BLACK); edges[i]->getTwin()->setColor(GC_BLACK); marked_edges += 2; trans_count++; } } edges[i]->getEnd()->setColor(GC_WHITE); } } if(trans_count > 0) ++marked_verts; return false; } // Remove all the marked edges void SGTransitiveReductionVisitor::postvisit(StringGraph* pGraph) { //printf("TR marked %d verts and %d edges\n", marked_verts, marked_edges); pGraph->sweepEdges(GC_BLACK); pGraph->setTransitiveFlag(false); assert(pGraph->checkColors(GC_WHITE)); } // // SGIdenticalRemoveVisitor - Removes identical vertices // from the graph. This algorithm is less complex // than SGContainRemoveVisitor because we do not have to // remodel the graph in this case because no irreducible // edges need to be moved. // void SGIdenticalRemoveVisitor::previsit(StringGraph* pGraph) { pGraph->setColors(GC_WHITE); count = 0; } // bool SGIdenticalRemoveVisitor::visit(StringGraph* /*pGraph*/, Vertex* pVertex) { if(!pVertex->isContained()) return false; // Check if this vertex is identical to any other vertex EdgePtrVec neighborEdges = pVertex->getEdges(); for(size_t i = 0; i < neighborEdges.size(); ++i) { Edge* pEdge = neighborEdges[i]; Vertex* pOther = pEdge->getEnd(); if(pVertex->getSeqLen() != pOther->getSeqLen()) continue; Overlap ovr = pEdge->getOverlap(); if(!ovr.isContainment() || ovr.getContainedIdx() != 0) continue; if(pVertex->getSeq() == pOther->getSeq()) { pVertex->setColor(GC_BLACK); ++count; break; } } return false; } void SGIdenticalRemoveVisitor::postvisit(StringGraph* pGraph) { pGraph->sweepVertices(GC_BLACK); } // // SGContainRemoveVisitor - Removes contained // vertices from the graph // void SGContainRemoveVisitor::previsit(StringGraph* pGraph) { pGraph->setColors(GC_WHITE); // Clear the containment flag, if any containments are added // during this algorithm the flag will be reset and another // round must be re-run pGraph->setContainmentFlag(false); } // bool SGContainRemoveVisitor::visit(StringGraph* pGraph, Vertex* pVertex) { if(!pVertex->isContained()) return false; //cout << pVertex->getID() << endl; // debug // Add any new irreducible edges that exist when pToRemove is deleted // from the graph EdgePtrVec neighborEdges = pVertex->getEdges(); // If the graph has been transitively reduced, we have to check all // the neighbors to see if any new edges need to be added. If the graph is a // complete overlap graph we can just remove the edges to the deletion vertex if(!pGraph->hasTransitive() && !pGraph->isExactMode()) { // This must be done in order of edge length or some transitive edges // may be created EdgeLenComp comp; std::sort(neighborEdges.begin(), neighborEdges.end(), comp); for(size_t j = 0; j < neighborEdges.size(); ++j) { Vertex* pRemodelVert = neighborEdges[j]->getEnd(); Edge* pRemodelEdge = neighborEdges[j]->getTwin(); SGAlgorithms::remodelVertexForExcision(pGraph, pRemodelVert, pRemodelEdge); } } // Delete the edges from the graph for(size_t j = 0; j < neighborEdges.size(); ++j) { Vertex* pRemodelVert = neighborEdges[j]->getEnd(); Edge* pRemodelEdge = neighborEdges[j]->getTwin(); pRemodelVert->deleteEdge(pRemodelEdge); pVertex->deleteEdge(neighborEdges[j]); } pVertex->setColor(GC_BLACK); return false; } void SGContainRemoveVisitor::postvisit(StringGraph* pGraph) { pGraph->sweepVertices(GC_BLACK); } // // Validate the structure of the graph by detecting missing // or erroneous edges // // bool SGValidateStructureVisitor::visit(StringGraph* pGraph, Vertex* pVertex) { SGAlgorithms::EdgeDescOverlapMap irreducibleMap; SGAlgorithms::EdgeDescOverlapMap transitiveMap; // Construct the set of overlaps reachable within the current parameters CompleteOverlapSet vertexOverlapSet(pVertex, pGraph->getErrorRate(), pGraph->getMinOverlap()); vertexOverlapSet.computeIrreducible(NULL, NULL); SGAlgorithms::EdgeDescOverlapMap missingMap; SGAlgorithms::EdgeDescOverlapMap extraMap; vertexOverlapSet.getDiffMap(missingMap, extraMap); if(!missingMap.empty()) { std::cout << "Missing irreducible for " << pVertex->getID() << ":\n"; SGAlgorithms::printOverlapMap(missingMap); } if(!extraMap.empty()) { std::cout << "Extra irreducible for " << pVertex->getID() << ":\n"; SGAlgorithms::printOverlapMap(extraMap); } return false; } // // SGTrimVisitor - Remove "dead-end" vertices from the graph // void SGTrimVisitor::previsit(StringGraph* pGraph) { num_island = 0; num_terminal = 0; pGraph->setColors(GC_WHITE); } // Mark any nodes that either dont have edges or edges in only one direction for removal bool SGTrimVisitor::visit(StringGraph* /*pGraph*/, Vertex* pVertex) { if(pVertex->countEdges() == 0) { // Is an island, remove if the sequence length is less than the threshold if(pVertex->getSeqLen() < m_minLength) { pVertex->setColor(GC_BLACK); ++num_island; } } else { // Check if this node is a dead-end for(size_t idx = 0; idx < ED_COUNT; idx++) { EdgeDir dir = EDGE_DIRECTIONS[idx]; if(pVertex->countEdges(dir) == 0 && pVertex->getSeqLen() < m_minLength) { pVertex->setColor(GC_BLACK); ++num_terminal; } } } return false; } // Remove all the marked edges void SGTrimVisitor::postvisit(StringGraph* pGraph) { pGraph->sweepVertices(GC_BLACK); //printf("StringGraphTrim: Removed %d island and %d dead-end short vertices\n", num_island, num_terminal); } // // SGDuplicateVisitor - Detect and remove duplicate edges // void SGDuplicateVisitor::previsit(StringGraph* pGraph) { assert(pGraph->checkColors(GC_WHITE)); (void)pGraph; m_hasDuplicate = false; } bool SGDuplicateVisitor::visit(StringGraph* /*pGraph*/, Vertex* pVertex) { m_hasDuplicate = pVertex->markDuplicateEdges(GC_RED) || m_hasDuplicate; return false; } void SGDuplicateVisitor::postvisit(StringGraph* pGraph) { assert(pGraph->checkColors(GC_WHITE)); //if(m_hasDuplicate) // { //int numRemoved = pGraph->sweepEdges(GC_RED); //if(!m_bSilent) // std::cerr << "Warning: removed " << numRemoved << " duplicate edges\n"; //} } // // Small repeat resolver - Remove edges induced from small (sub-read length) // repeats // void SGSmallRepeatResolveVisitor::previsit(StringGraph*) { } // bool SGSmallRepeatResolveVisitor::visit(StringGraph* /*pGraph*/, Vertex* pX) { bool changed = false; // If the vertex has more than MAX_EDGES, do not // attempt to resolve size_t MAX_EDGES = 10; for(size_t idx = 0; idx < ED_COUNT; idx++) { EdgeDir dir = EDGE_DIRECTIONS[idx]; EdgePtrVec x_edges = pX->getEdges(dir); // These edges are already sorted if(x_edges.size() < 2 || x_edges.size() > MAX_EDGES) continue; // Try to eliminate the shortest edge from this vertex (let this be X->Y) // If Y has a longer edge than Y->X in the same direction, we remove X->Y // Edges are sorted by length so the last edge is the shortest Edge* pXY = x_edges.back(); size_t xy_len = pXY->getOverlap().getOverlapLength(0); size_t x_longest_len = x_edges.front()->getOverlap().getOverlapLength(0); if(xy_len == x_longest_len) continue; Edge* pYX = pXY->getTwin(); Vertex* pY = pXY->getEnd(); EdgePtrVec y_edges = pY->getEdges(pYX->getDir()); if(y_edges.size() > MAX_EDGES) continue; size_t yx_len = pYX->getOverlap().getOverlapLength(0); size_t y_longest_len = 0; for(size_t i = 0; i < y_edges.size(); ++i) { Edge* pYZ = y_edges[i]; if(pYZ == pYX) continue; // skip Y->X size_t yz_len = pYZ->getOverlap().getOverlapLength(0); if(yz_len > y_longest_len) y_longest_len = yz_len; } if(y_longest_len > yx_len) { // Delete the edge if the difference between the shortest and longest is greater than minDiff int x_diff = x_longest_len - xy_len; int y_diff = y_longest_len - yx_len; if(x_diff > m_minDiff && y_diff > m_minDiff) { pX->deleteEdge(pXY); pY->deleteEdge(pYX); changed = true; } } } return changed; } // void SGSmallRepeatResolveVisitor::postvisit(StringGraph* pGraph) { pGraph->sweepEdges(GC_RED); } // // OverlapRatio Visitor - Only keep edges in the graph when the ratio // between their length and the length of the longest overlap meets a minimum cutoff // void SGOverlapRatioVisitor::previsit(StringGraph*) { } // bool SGOverlapRatioVisitor::visit(StringGraph* /*pGraph*/, Vertex* pX) { bool changed = false; for(size_t idx = 0; idx < ED_COUNT; idx++) { EdgeDir dir = EDGE_DIRECTIONS[idx]; EdgePtrVec x_edges = pX->getEdges(dir); // These edges are already sorted if(x_edges.size() < 2) continue; size_t x_longest_len = x_edges.front()->getOverlap().getOverlapLength(0); for(size_t i = 1; i < x_edges.size(); ++i) { size_t curr_len = x_edges[i]->getOverlap().getOverlapLength(0); double ratio = (double)curr_len / x_longest_len; if(ratio < m_minRatio) { x_edges[i]->setColor(GC_RED); x_edges[i]->getTwin()->setColor(GC_RED); changed = true; } } } return changed; } // void SGOverlapRatioVisitor::postvisit(StringGraph* pGraph) { pGraph->sweepEdges(GC_RED); } // // SGSuperRepeatVisitor // // Remove all edges of nodes that have been marked as super repeats void SGSuperRepeatVisitor::previsit(StringGraph*) { m_num_superrepeats = 0; } // bool SGSuperRepeatVisitor::visit(StringGraph*, Vertex* pVertex) { if(pVertex->isSuperRepeat()) { pVertex->deleteEdges(); m_num_superrepeats += 1; return true; } return false; } // void SGSuperRepeatVisitor::postvisit(StringGraph*) { //printf("Deleted edges for %zu super repetitive vertices\n", m_num_superrepeats); } // // SGSmoothingVisitor - Find branches in the graph // which arise from variation and remove them // void SGSmoothingVisitor::previsit(StringGraph* pGraph) { pGraph->setColors(GC_WHITE); m_simpleBubblesRemoved = 0; m_complexBubblesRemoved = 0; } // bool SGSmoothingVisitor::visit(StringGraph* pGraph, Vertex* pVertex) { (void)pGraph; if(pVertex->getColor() == GC_RED) return false; bool found = false; for(size_t idx = 0; idx < ED_COUNT; idx++) { EdgeDir dir = EDGE_DIRECTIONS[idx]; EdgePtrVec edges = pVertex->getEdges(dir); if(edges.size() <= 1) continue; for(size_t i = 0; i < edges.size(); ++i) { if(edges[i]->getEnd()->getColor() == GC_RED) return false; } //std::cout << "Smoothing " << pVertex->getID() << "\n"; const int MAX_WALKS = 10; const int MAX_DISTANCE = 5000; bool bIsDegenerate = false; bool bFailGapCheck = false; bool bFailDivergenceCheck = false; bool bFailIndelSizeCheck = false; SGWalkVector variantWalks; SGSearch::findVariantWalks(pVertex, dir, MAX_DISTANCE, MAX_WALKS, variantWalks); if(variantWalks.size() > 0) { found = true; size_t selectedIdx = -1; size_t selectedCoverage = 0; // Calculate the minimum amount overlapped on the start/end vertex. // This is used to properly extract the sequences from walks that represent the variation. int minOverlapX = std::numeric_limits::max(); int minOverlapY = std::numeric_limits::max(); for(size_t i = 0; i < variantWalks.size(); ++i) { if(variantWalks[i].getNumEdges() <= 1) bIsDegenerate = true; // Calculate the walk coverage using the internal vertices of the walk. // The walk with the highest coverage will be retained size_t walkCoverage = 0; for(size_t j = 1; j < variantWalks[i].getNumVertices() - 1; ++j) walkCoverage += variantWalks[i].getVertex(j)->getCoverage(); if(walkCoverage > selectedCoverage || selectedCoverage == 0) { selectedIdx = i; selectedCoverage = walkCoverage; } Edge* pFirstEdge = variantWalks[i].getFirstEdge(); Edge* pLastEdge = variantWalks[i].getLastEdge(); if((int)pFirstEdge->getMatchLength() < minOverlapX) minOverlapX = pFirstEdge->getMatchLength(); if((int)pLastEdge->getTwin()->getMatchLength() < minOverlapY) minOverlapY = pLastEdge->getTwin()->getMatchLength(); } // Calculate the strings for each walk that represent the region of variation StringVector walkStrings; for(size_t i = 0; i < variantWalks.size(); ++i) { Vertex* pStartVertex = variantWalks[i].getStartVertex(); Vertex* pLastVertex = variantWalks[i].getLastVertex(); assert(pStartVertex != NULL && pLastVertex != NULL); std::string full = variantWalks[i].getString(SGWT_START_TO_END); int posStart = 0; int posEnd = 0; if(dir == ED_ANTISENSE) { // pLast ----------- // pStart ------------ // full -------------------- // out ---- posStart = pLastVertex->getSeqLen() - minOverlapY; posEnd = full.size() - (pStartVertex->getSeqLen() - minOverlapX); } else { // pStart -------------- // pLast ----------- // full --------------------- // out ---- posStart = pStartVertex->getSeqLen() - minOverlapX; // match start position posEnd = full.size() - (pLastVertex->getSeqLen() - minOverlapY); // match end position } std::string out; if(posEnd > posStart) out = full.substr(posStart, posEnd - posStart); walkStrings.push_back(out); } assert(selectedIdx != (size_t)-1); SGWalk& selectedWalk = variantWalks[selectedIdx]; assert(selectedWalk.isIndexed()); // Check the divergence of the other walks to this walk StringVector cigarStrings; std::vector maxIndel; std::vector gapPercent; // percentage of matching that is gaps std::vector totalPercent; // percent of total alignment that is mismatch or gap cigarStrings.resize(variantWalks.size()); gapPercent.resize(variantWalks.size()); totalPercent.resize(variantWalks.size()); maxIndel.resize(variantWalks.size()); for(size_t i = 0; i < variantWalks.size(); ++i) { if(i == selectedIdx) continue; // We want to compute the total gap length, total mismatches and percent // divergence between the two paths. int matchLen = 0; int totalDiff = 0; int gapLength = 0; int maxGapLength = 0; // We have to handle the degenerate case where one internal string has zero length // this can happen when there is an isolated insertion/deletion and the walks are like: // x -> y -> z // x -> z if(walkStrings[selectedIdx].empty() || walkStrings[i].empty()) { matchLen = std::max(walkStrings[selectedIdx].size(), walkStrings[i].size()); totalDiff = matchLen; gapLength = matchLen; } else { AlnAln *aln_global; aln_global = aln_stdaln(walkStrings[selectedIdx].c_str(), walkStrings[i].c_str(), &aln_param_blast, 1, 1); // Calculate the alignment parameters while(aln_global->outm[matchLen] != '\0') { if(aln_global->outm[matchLen] == ' ') totalDiff += 1; matchLen += 1; } std::stringstream cigarSS; for (int j = 0; j != aln_global->n_cigar; ++j) { char cigarOp = "MID"[aln_global->cigar32[j]&0xf]; int cigarLen = aln_global->cigar32[j]>>4; if(cigarOp == 'I' || cigarOp == 'D') { gapLength += cigarLen; if(gapLength > maxGapLength) maxGapLength = gapLength; } cigarSS << cigarLen; cigarSS << cigarOp; } cigarStrings[i] = cigarSS.str(); aln_free_AlnAln(aln_global); } double percentDiff = (double)totalDiff / matchLen; double percentGap = (double)gapLength / matchLen; if(percentDiff > m_maxTotalDivergence) bFailDivergenceCheck = true; if(percentGap > m_maxGapDivergence) bFailGapCheck = true; if(maxGapLength > m_maxIndelLength) bFailIndelSizeCheck = true; gapPercent[i] = percentGap; totalPercent[i] = percentDiff; maxIndel[i] = maxGapLength; } if(bIsDegenerate || bFailGapCheck || bFailDivergenceCheck || bFailIndelSizeCheck) continue; // Write the selected path to the variants file as variant 0 int variantIdx = 0; std::string selectedSequence = selectedWalk.getString(SGWT_START_TO_END); std::stringstream ss; ss << "variant-" << m_numRemovedTotal << "/" << variantIdx++; writeFastaRecord(&m_outFile, ss.str(), selectedSequence); // The vertex set for each walk is not necessarily disjoint, // the selected walk may contain vertices that are part // of other paths. We handle this be initially marking all // vertices of the for(size_t i = 0; i < variantWalks.size(); ++i) { if(i == selectedIdx) continue; SGWalk& currWalk = variantWalks[i]; for(size_t j = 0; j < currWalk.getNumEdges() - 1; ++j) { Edge* currEdge = currWalk.getEdge(j); // If the vertex is also on the selected path, do not mark it Vertex* currVertex = currEdge->getEnd(); if(!selectedWalk.containsVertex(currVertex->getID())) { currEdge->getEnd()->setColor(GC_RED); } } // Write the variant to a file std::string variantSequence = currWalk.getString(SGWT_START_TO_END); std::stringstream variantID; std::stringstream ss; ss << "variant-" << m_numRemovedTotal << "/" << variantIdx++; ss << " IGD:" << (double)gapPercent[i] << " ITD:" << totalPercent[i] << " MID: " << maxIndel[i] << " InternalCigar:" << cigarStrings[i]; writeFastaRecord(&m_outFile, ss.str(), variantSequence); } if(variantWalks.size() == 2) m_simpleBubblesRemoved += 1; else m_complexBubblesRemoved += 1; ++m_numRemovedTotal; } } return found; } // Remove all the marked edges void SGSmoothingVisitor::postvisit(StringGraph* pGraph) { pGraph->sweepVertices(GC_RED); assert(pGraph->checkColors(GC_WHITE)); //printf("VariationSmoother: Removed %d simple and %d complex bubbles\n", m_simpleBubblesRemoved, m_complexBubblesRemoved); } // // SGGraphStatsVisitor - Collect summary stasitics // about the graph // void SGGraphStatsVisitor::previsit(StringGraph* /*pGraph*/) { num_terminal = 0; num_island = 0; num_monobranch = 0; num_dibranch = 0; num_simple = 0; num_edges = 0; num_vertex = 0; sum_edgeLen = 0; } // Find bubbles (nodes where there is a split and then immediate rejoin) and mark them for removal bool SGGraphStatsVisitor::visit(StringGraph* /*pGraph*/, Vertex* pVertex) { int s_count = pVertex->countEdges(ED_SENSE); int as_count = pVertex->countEdges(ED_ANTISENSE); if(s_count == 0 && as_count == 0) { ++num_island; } else if(s_count == 0 || as_count == 0) { ++num_terminal; } if(s_count > 1 && as_count > 1) ++num_dibranch; else if(s_count > 1 || as_count > 1) ++num_monobranch; if(s_count == 1 || as_count == 1) ++num_simple; num_edges += (s_count + as_count); ++num_vertex; EdgePtrVec edges = pVertex->getEdges(); for(size_t i = 0; i < edges.size(); ++i) sum_edgeLen += edges[i]->getSeqLen(); return false; } // void SGGraphStatsVisitor::postvisit(StringGraph* /*pGraph*/) { printf("Vertices: %d Edges: %d Islands: %d Tips: %d Monobranch: %d Dibranch: %d Simple: %d\n", num_vertex, num_edges, num_island, num_terminal, num_monobranch, num_dibranch, num_simple); } ================================================ FILE: src/SGA/StringGraph/SGVisitors.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGVisitors - Algorithms that visit // each vertex in the graph and perform some // operation // #include "SGAlgorithms.h" #include "SGUtil.h" #include "Util.h" //#include "contigs.h" #include "SeqLib/UnalignedSequence.h" #ifndef SGVISITORS_H #define SGVISITORS_H // Visit each node, writing it to a file as a fasta record struct SGFastaVisitor { // constructor SGFastaVisitor(std::string filename) : m_fileHandle(filename.c_str()) {} ~SGFastaVisitor() { m_fileHandle.close(); } // functions void previsit(StringGraph* /*pGraph*/) {} bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph* /*pGraph*/) {} // data std::ofstream m_fileHandle; }; // Visit each node, writing it to a file as a fasta record // jwala modified struct SGVisitorContig { // constructor SGVisitorContig() {} ~SGVisitorContig() {} // functions void previsit(StringGraph* /*pGraph*/) {} bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph* /*pGraph*/) {} // data SeqLib::UnalignedSequenceVector m_ct; }; // Visit each node, writing it to a file as a fasta record // Run the Myers transitive reduction algorithm on each node struct SGTransitiveReductionVisitor { SGTransitiveReductionVisitor() {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); int marked_verts; int marked_edges; }; // Remove identical vertices from the graph struct SGIdenticalRemoveVisitor { SGIdenticalRemoveVisitor() {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph* pGraph); int count; }; // Remove contained vertices from the graph struct SGContainRemoveVisitor { SGContainRemoveVisitor() {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph* pGraph); }; // Validate that the graph does not contain // any extra edges or missing irreducible edges struct SGValidateStructureVisitor { SGValidateStructureVisitor() {} void previsit(StringGraph*) {} bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*) {} }; // Remodel the graph to infer missing edges or remove erroneous edges struct SGSmallRepeatResolveVisitor { SGSmallRepeatResolveVisitor(int minDiff) : m_minDiff(minDiff) {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); int m_minDiff; }; // Remove edges from the graph when the ratio between an edge's overlap length // and the longest overlap for the vertex is less than the given parameter struct SGOverlapRatioVisitor { SGOverlapRatioVisitor(double minRatio) : m_minRatio(minRatio) {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); double m_minRatio; }; // Detects and removes small "tip" vertices from the graph // when they are less than minLength in size struct SGTrimVisitor { SGTrimVisitor(size_t minLength) : m_minLength(minLength) {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); size_t m_minLength; int num_island; int num_terminal; }; // Detect and remove duplicate edges struct SGDuplicateVisitor { SGDuplicateVisitor(bool silent = false) : m_bSilent(silent) {} void previsit(StringGraph*); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); bool m_hasDuplicate; bool m_bSilent; }; // Remove the edges of super-repetitive vertices in the graph struct SGSuperRepeatVisitor { SGSuperRepeatVisitor() {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); size_t m_num_superrepeats; }; // Smooth out variation in the graph struct SGSmoothingVisitor { SGSmoothingVisitor(std::string filename, double maxGapDiv, double maxTotalDiv, int maxIndelLength) : m_numRemovedTotal(0), m_maxGapDivergence(maxGapDiv), m_maxTotalDivergence(maxTotalDiv), m_maxIndelLength(maxIndelLength), m_outFile(filename.c_str()) {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); int m_simpleBubblesRemoved; int m_complexBubblesRemoved; int m_numRemovedTotal; double m_maxGapDivergence; double m_maxTotalDivergence; int m_maxIndelLength; std::ofstream m_outFile; }; // Compile summary statistics for the graph struct SGGraphStatsVisitor { SGGraphStatsVisitor() {} void previsit(StringGraph* pGraph); bool visit(StringGraph* pGraph, Vertex* pVertex); void postvisit(StringGraph*); int num_terminal; int num_island; int num_monobranch; int num_dibranch; int num_simple; int num_edges; int num_vertex; size_t sum_edgeLen; }; #endif ================================================ FILE: src/SGA/StringGraph/SGWalk.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGWalk - Data structure holding a walk through // the graph // #include "SGWalk.h" // SGWalk::SGWalk(Vertex* pStartVertex, bool bIndexWalk) : m_pStartVertex(pStartVertex), m_extensionDistance(0), m_extensionFinished(false) { if(bIndexWalk) m_pWalkIndex = new WalkIndex; else m_pWalkIndex = NULL; } // SGWalk::~SGWalk() { if(m_pWalkIndex != NULL) { delete m_pWalkIndex; m_pWalkIndex = NULL; } } // SGWalk::SGWalk(const SGWalk& other) { m_pStartVertex = other.m_pStartVertex; m_edges = other.m_edges; m_extensionDistance = other.m_extensionDistance; m_extensionFinished = other.m_extensionFinished; m_pWalkIndex = NULL; if(other.m_pWalkIndex != NULL) m_pWalkIndex = new WalkIndex(*other.m_pWalkIndex); } // Construct the walk structure from a vector of edges SGWalk::SGWalk(const EdgePtrVec& edgeVec, bool bIndexWalk) : m_extensionDistance(0), m_extensionFinished(false) { assert(!edgeVec.empty()); if(bIndexWalk) m_pWalkIndex = new WalkIndex; else m_pWalkIndex = NULL; // The start vector is the start vertex of the first edge Edge* first = edgeVec.front(); m_pStartVertex = first->getStart(); for(EdgePtrVec::const_iterator iter = edgeVec.begin(); iter != edgeVec.end(); ++iter) { addEdge(*iter); } } // SGWalk& SGWalk::operator=(const SGWalk& other) { if(&other == this) return *this; // self-assign m_pStartVertex = other.m_pStartVertex; m_edges = other.m_edges; m_extensionDistance = other.m_extensionDistance; if(m_pWalkIndex != NULL) delete m_pWalkIndex; if(other.m_pWalkIndex != NULL) m_pWalkIndex = new WalkIndex(*other.m_pWalkIndex); return *this; } // void SGWalk::addEdge(Edge* pEdge) { m_edges.push_back(pEdge); m_extensionDistance += pEdge->getSeqLen(); // Add the vertex ID to the index if necessary if(m_pWalkIndex != NULL) m_pWalkIndex->insert(m_edges.back()->getEndID()); } // void SGWalk::setFinished(bool b) { m_extensionFinished = b; } bool SGWalk::isFinished() const { return m_extensionFinished; } // void SGWalk::popLast() { m_edges.pop_back(); } // Vertex* SGWalk::getStartVertex() const { return m_pStartVertex; } // size_t SGWalk::getNumVertices() const { return getNumEdges() + 1; } // size_t SGWalk::getNumEdges() const { return m_edges.size(); } bool SGWalk::isIndexed() const { return m_pWalkIndex != NULL; } // bool SGWalk::containsVertex(const VertexID& id) const { if(m_pWalkIndex == NULL) assert(false); return m_pWalkIndex->count(id) > 0; } // void SGWalk::truncate(const VertexID& id) { EdgePtrVec::iterator iter = m_edges.begin(); while(iter != m_edges.end()) { if((*iter)->getEndID() == id) break; ++iter; } assert(iter != m_edges.end()); m_edges.erase(iter + 1, m_edges.end()); } // Construct the extension string corresponding to the path std::string SGWalk::getString(SGWalkType type, SGWalkVertexPlacementVector* pPlacementVector) const { std::string out; // Append the full length of the starting vertex to the walk if(type == SGWT_START_TO_END || type == SGWT_INTERNAL) { out.append(m_pStartVertex->getSeq().toString()); // Add the first record to the placement vector if required if(pPlacementVector != NULL) { SGWalkVertexPlacement firstPlace; firstPlace.pVertex = m_pStartVertex; firstPlace.position = 0; // 0-based coordinates firstPlace.isRC = false; pPlacementVector->push_back(firstPlace); } } // Determine if the string should go to the end of the last vertex // in the path size_t stop = m_edges.size(); // The first edge is always in correct frame of reference // so the comp is EC_SAME. This variable tracks where the // string that is being added is different from the starting sequence // and needs to be flipped EdgeComp currComp = EC_SAME; // If the walk direction is antisense, we reverse every component and then // reverse the entire string to generate the final string bool reverseAll = !m_edges.empty() && m_edges[0]->getDir() == ED_ANTISENSE; if(reverseAll) out = reverse(out); for(size_t i = 0; i < stop; ++i) { Edge* pYZ = m_edges[i]; // Append in the extension string std::string edge_str = pYZ->getLabel(); assert(edge_str.size() != 0); // Determine whether this node is reverse complement wrt the string // we are building if(currComp == EC_REVERSE) edge_str = reverseComplement(edge_str); if(reverseAll) edge_str = reverse(edge_str); // Calculate the next comp, between X and Z EdgeComp ecYZ = pYZ->getComp(); EdgeComp ecXZ; if(ecYZ == EC_SAME) ecXZ = currComp; else ecXZ = !currComp; out.append(edge_str); // Add this record into the placement vector if(pPlacementVector != NULL) { SGWalkVertexPlacement placement; placement.pVertex = pYZ->getEnd(); placement.isRC = ecXZ == EC_REVERSE; placement.position = out.size() - pYZ->getEnd()->getSeqLen(); pPlacementVector->push_back(placement); } currComp = ecXZ; } // If we want the internal portion of the string (which does not contain the endpoints // perform the truncation now. This needs to be done before the reversal. if(type == SGWT_INTERNAL) { if(pPlacementVector != NULL) { std::cerr << "Error: Vertex placement not supported for SGWT_INTERNAL walk types\n"; exit(EXIT_FAILURE); } Edge* pFirstEdge = getFirstEdge(); Edge* pLastEdge = getLastEdge(); if(pFirstEdge == NULL || pLastEdge == NULL) { out.clear(); } else { Vertex* pStart = m_pStartVertex; Vertex* pLast = getLastVertex(); int start = pStart->getSeqLen() - pFirstEdge->getMatchLength(); int end = out.size() - (pLast->getSeqLen() - pLastEdge->getMatchLength()); if(end <= start) out.clear(); else { std::string ss = out.substr(start, end - start); out = ss; } } } if(out.empty()) std::cout << "No output for walk: " << pathSignature() << "\n"; if(reverseAll) { out = reverse(out); // Reverse the placement vector too, including flipping the alignment coordinates if(pPlacementVector != NULL) { std::reverse(pPlacementVector->begin(), pPlacementVector->end()); for(size_t i = 0; i < pPlacementVector->size(); ++i) { SGWalkVertexPlacement& item = pPlacementVector->at(i); item.position = out.size() - item.position - item.pVertex->getSeqLen(); } } } return out; } // Returns a vector of EdgeComps of the orientation of each // vertex in the path with respect to the start of the walk std::vector SGWalk::getOrientationsToStart() const { std::vector out; if(m_edges.empty()) return out; // Tracking variable of the orientation between X (the start) // and the next vertex in the walk EdgeComp compXY = m_edges[0]->getComp(); out.push_back(compXY); for(size_t i = 1; i < m_edges.size(); ++i) { // Calculate the orientation of XZ using YZ EdgeComp compYZ = m_edges[i]->getComp(); // The direction flips if the XY/YZ are different EdgeComp compXZ = (compXY == compYZ) ? EC_SAME : EC_REVERSE; out.push_back(compXZ); compXY = compXZ; } return out; } // Get the substring of the full path string starting from position fromX // to position toY on the first and last vertices, respectively. // dirX is the direction along contig X towards vertex Y, vis-versa for dirY std::string SGWalk::getFragmentString(const Vertex* pX, const Vertex* pY, int fromX, int toY, EdgeDir dirX, EdgeDir dirY) const { std::string out; // Calculate the portion of X that we should include in the string // If dirX is SENSE, we take the everything after position fromX // otherwise we take everything up to and including fromX SeqCoord xCoord(0,0,pX->getSeqLen()); if(dirX == ED_SENSE) { xCoord.interval.start = fromX; xCoord.interval.end = pX->getSeqLen() - 1; } else { xCoord.interval.start = 0; xCoord.interval.end = fromX; } // Handle the trivial case where pX == pY and the walk is found immediately if(m_edges.empty() && pX == pY) { if(dirY == ED_SENSE) { xCoord.interval.start = toY; } else { xCoord.interval.end = toY; } } if(!xCoord.isValid()) return ""; // out.append(m_pStartVertex->getSeq().substr(xCoord.interval.start, xCoord.length())); // Determine if the string should go to the end of the last vertex // in the path size_t stop = m_edges.size(); // The first edge is always in correct frame of reference // so the comp is EC_SAME. This variable tracks where the // string that is being added is different from the starting sequence // and needs to be flipped EdgeComp currComp = EC_SAME; // If the walk direction is antisense, we reverse every component and then // reverse the entire string to generate the final string bool reverseAll = !m_edges.empty() && m_edges[0]->getDir() == ED_ANTISENSE; if(reverseAll) out = reverse(out); for(size_t i = 0; i < stop; ++i) { Edge* pYZ = m_edges[i]; bool isLast = i == (stop - 1); if(!isLast) { // Append the extension string without modification std::string edge_str = pYZ->getLabel(); assert(edge_str.size() != 0); if(currComp == EC_REVERSE) edge_str = reverseComplement(edge_str); if(reverseAll) edge_str = reverse(edge_str); out.append(edge_str); } else { // const Edge* pZY = pYZ->getTwin(); // get the unmatched coordinates on pY SeqCoord unmatched = pZY->getMatchCoord().complement(); // Now, we have to shrink the unmatched interval on Y to // only incude up to toY if(dirY == ED_SENSE) unmatched.interval.start = toY; else unmatched.interval.end = toY; if(!unmatched.isValid()) return ""; std::string seq = unmatched.getSubstring(pY->getStr()); if(pYZ->getComp() != currComp) seq = reverseComplement(seq); if(reverseAll) seq = reverse(seq); out.append(seq); } // Calculate the next comp, between X and Z EdgeComp ecYZ = pYZ->getComp(); EdgeComp ecXZ; if(ecYZ == EC_SAME) ecXZ = currComp; else ecXZ = !currComp; currComp = ecXZ; } if(reverseAll) out = reverse(out); return out; } // int SGWalk::getExtensionDistance() const { return m_extensionDistance; } // This is equivalent to the extension distance int SGWalk::getEndToEndDistance() const { return m_extensionDistance; } // int SGWalk::getStartToEndDistance() const { return m_pStartVertex->getSeqLen() + getEndToEndDistance(); } // Returns the distance from the end of pStart to the beginning of the last vertex in the path // This can be negative if they overlap int SGWalk::getEndToStartDistance() const { if(m_edges.empty()) return 0; int len_x = m_pStartVertex->getSeqLen(); int len_y = getLastEdge()->getEnd()->getSeqLen(); return getStartToEndDistance() - (len_x + len_y); } // Edge* SGWalk::getFirstEdge() const { if(m_edges.empty()) return NULL; else return m_edges.front(); } // Edge* SGWalk::getLastEdge() const { if(m_edges.empty()) return NULL; else return m_edges.back(); } // Vertex* SGWalk::getLastVertex() const { if(m_edges.empty()) return NULL; else return getLastEdge()->getEnd(); } // Edge* SGWalk::getEdge(size_t idx) const { return m_edges[idx]; } // Vertex* SGWalk::getVertex(size_t idx) const { assert(idx < getNumVertices()); if(idx == 0) return m_pStartVertex; else return m_edges[idx - 1]->getEnd(); } // VertexPtrVec SGWalk::getVertices() const { VertexPtrVec out; out.push_back(m_pStartVertex); for(EdgePtrVec::const_iterator iter = m_edges.begin(); iter != m_edges.end(); ++iter) out.push_back((*iter)->getEnd()); return out; } // Return a string describing this path std::string SGWalk::pathSignature() const { std::stringstream ss; ss << m_pStartVertex->getID() << ","; for(EdgePtrVec::const_iterator iter = m_edges.begin(); iter != m_edges.end(); ++iter) ss << (*iter)->getEndID() << ", "; return ss.str(); } // void SGWalk::print() const { std::cout << "Walk start: " << m_pStartVertex->getID() << "\nWalk: "; const Vertex* pLast = m_pStartVertex; for(EdgePtrVec::const_iterator iter = m_edges.begin(); iter != m_edges.end(); ++iter) { //std::cout << *(*iter) << " "; std::cout << (*iter)->getStartID() << " -- " << (*iter)->getEndID() << "," << (*iter)->getDir() << "," << (*iter)->getComp() << "\t"; assert((*iter)->getStart() == pLast); pLast = (*iter)->getEnd(); } std::cout << "\n"; } // void SGWalk::printSimple() const { std::cout << pathSignature() << "\n"; } // bool SGWalk::compareByTotalLength(const SGWalk& a, const SGWalk& b) { return a.getStartToEndDistance() > b.getStartToEndDistance(); } ================================================ FILE: src/SGA/StringGraph/SGWalk.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGWalk - Data structure holding a walk through // the graph // #ifndef SGWALK_H #define SGWALK_H #include "Bigraph.h" #include // A walk on the string graph is given by the starting vertex // then a vector of edges used in the walk enum SGWalkType { SGWT_START_TO_END, // include every vertex of the walk SGWT_EXTENSION, // do not include the start vertex SGWT_INTERNAL // do not include the start and end vertex }; // Placement data for the position of a vertex sequence in a walk struct SGWalkVertexPlacement { Vertex* pVertex; int position; // 0-based bool isRC; }; typedef std::vector SGWalkVertexPlacementVector; class SGWalk { public: SGWalk(Vertex* pStartVertex, bool bIndexWalk = false); SGWalk(const SGWalk& other); SGWalk(const EdgePtrVec& edgeVec, bool bIndexWalk = false); ~SGWalk(); SGWalk& operator=(const SGWalk& other); void addEdge(Edge* pEdge); void popLast(); void setFinished(bool b); bool isFinished() const; VertexPtrVec getVertices() const; Vertex* getStartVertex() const; Vertex* getLastVertex() const; // Returns a vector of EdgeComps of the orientation of each // vertex in the path with respect to the start of the walk std::vector getOrientationsToStart() const; Edge* getFirstEdge() const; Edge* getLastEdge() const; Edge* getEdge(size_t idx) const; Vertex* getVertex(size_t idx) const; size_t getNumVertices() const; size_t getNumEdges() const; // Returns true if the walk contains the specified vertex // If the walk is not indexed, this will assert bool isIndexed() const; bool containsVertex(const VertexID& id) const; // Truncate the walk after the first instance of id void truncate(const VertexID& id); // Get the string this walk represents. This function supports multiple different walk types // (see the enum description). If the pointer to the VertexPlacementVector is not NULL, // the position of the vertices within the walk are written there. std::string getString(SGWalkType type, SGWalkVertexPlacementVector* pPlacementVector = NULL) const; // Get the substring of the full path string starting from position fromX // to position toY on the first and last vertices, respectively std::string getFragmentString(const Vertex* pX, const Vertex* pY, int fromX, int toY, EdgeDir dirX, EdgeDir dirY) const; // Return a string identifying the path through the graph this walk represents std::string pathSignature() const; // distance calculations int getExtensionDistance() const; int getEndToEndDistance() const; int getStartToEndDistance() const; int getEndToStartDistance() const; // Compare a pair of walks by the total string length // Returns true if the walk of a is longer than the walk of b static bool compareByTotalLength(const SGWalk& a, const SGWalk& b); void print() const; void printSimple() const; private: Vertex* m_pStartVertex; EdgePtrVec m_edges; typedef std::set WalkIndex; WalkIndex* m_pWalkIndex; // The distance from the end of pStart to the last vertex in the walk // This equals the length of the extension string // x ----------- // y ------------ // z ---------- // distance ************ int m_extensionDistance; bool m_extensionFinished; }; typedef std::vector SGWalkVector; typedef std::deque WalkQueue; #endif ================================================ FILE: src/SGA/SuffixTools/BWT.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWT - All functions that use a BWT include this file // it simple typedefs the BWT name to the implementation // of the BWT that we want, either the uncompressed version // (SBWT) or the run-length encoded version (RLBWT). This could // be done using inheritence but the BWT is so used so much that // overhead of calling virtual functions is unwanted // // #ifndef BWT_H #define BWT_H #include "RLBWT.h" #include "SBWT.h" typedef RLBWT BWT; #endif ================================================ FILE: src/SGA/SuffixTools/BWTAlgorithms.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // bwt_algorithms.cpp - Algorithms for aligning to a bwt structure // #include "BWTAlgorithms.h" // Find the interval in pBWT corresponding to w // If w does not exist in the BWT, the interval // coordinates [l, u] will be such that l > u BWTInterval BWTAlgorithms::findInterval(const BWT* pBWT, const std::string& w) { int len = w.size(); int j = len - 1; char curr = w[j]; BWTInterval interval; initInterval(interval, curr, pBWT); --j; for(;j >= 0; --j) { curr = w[j]; updateInterval(interval, curr, pBWT); if(!interval.isValid()) return interval; } return interval; } // Find the interval in pBWT corresponding to w // using a cache of short k-mer intervals to avoid // some of the iterations BWTInterval BWTAlgorithms::findIntervalWithCache(const BWT* pBWT, const BWTIntervalCache* pIntervalCache, const std::string& w) { size_t cacheLen = pIntervalCache->getCachedLength(); if(w.size() < cacheLen) return findInterval(pBWT, w); // Compute the interval using the cache for the last k bases int len = w.size(); int j = len - cacheLen; // Check whether the input string has a '$' in it. // We don't cache these strings so if it does // we have to do a direct lookup if(index(w.c_str() + j, '$') != NULL) return findInterval(pBWT, w); BWTInterval interval = pIntervalCache->lookup(w.c_str() + j); j -= 1; for(;j >= 0; --j) { char curr = w[j]; updateInterval(interval, curr, pBWT); if(!interval.isValid()) return interval; } return interval; } // Delegate the findInterval call based on what indices are loaded BWTInterval BWTAlgorithms::findInterval(const BWTIndexSet& indices, const std::string& w) { if(indices.pCache != NULL) return findIntervalWithCache(indices.pBWT, indices.pCache, w); else return findInterval(indices.pBWT, w); } // Find the intervals in pBWT/pRevBWT corresponding to w // If w does not exist in the BWT, the interval // coordinates [l, u] will be such that l > u BWTIntervalPair BWTAlgorithms::findIntervalPair(const BWT* pBWT, const BWT* pRevBWT, const std::string& w) { BWTIntervalPair intervals; int len = w.size(); int j = len - 1; char curr = w[j]; initIntervalPair(intervals, curr, pBWT, pRevBWT); --j; for(;j >= 0; --j) { curr = w[j]; updateBothL(intervals, curr, pBWT); if(!intervals.isValid()) return intervals; } return intervals; } // Find the interval pair corresponding to w using a cached intervals for short substrings BWTIntervalPair BWTAlgorithms::findIntervalPairWithCache(const BWT* pBWT, const BWT* pRevBWT, const BWTIntervalCache* pFwdCache, const BWTIntervalCache* pRevCache, const std::string& w) { size_t cacheLen = pFwdCache->getCachedLength(); if(w.size() < cacheLen) return findIntervalPair(pBWT, pRevBWT, w); // Compute the fwd and reverse interval using the cache for the last k bases BWTIntervalPair ip; int len = w.size(); int j = len - cacheLen; std::string ss = w.substr(j); std::string r_ss = reverse(ss); assert(ss.size() == cacheLen); ip.interval[0] = pFwdCache->lookup(ss.c_str()); ip.interval[1] = pRevCache->lookup(r_ss.c_str()); // Extend the interval to the full length of w as normal j -= 1; for(;j >= 0; --j) { updateBothL(ip, w[j], pBWT); if(!ip.isValid()) return ip; } return ip; } // Count the number of occurrences of string w, including the reverse complement size_t BWTAlgorithms::countSequenceOccurrences(const std::string& w, const BWT* pBWT) { BWTInterval fwd_interval = findInterval(pBWT, w); BWTInterval rc_interval = findInterval(pBWT, reverseComplement(w)); size_t count = 0; if(fwd_interval.isValid()) count += fwd_interval.size(); if(rc_interval.isValid()) count += rc_interval.size(); return count; } // Count the number of occurrences of string w, including the reverse complement using a BWTInterval cache size_t BWTAlgorithms::countSequenceOccurrencesWithCache(const std::string& w, const BWT* pBWT, const BWTIntervalCache* pIntervalCache) { BWTInterval fwd_interval = findIntervalWithCache(pBWT, pIntervalCache, w); BWTInterval rc_interval = findIntervalWithCache(pBWT, pIntervalCache, reverseComplement(w)); size_t count = 0; if(fwd_interval.isValid()) count += fwd_interval.size(); if(rc_interval.isValid()) count += rc_interval.size(); return count; } // size_t BWTAlgorithms::countSequenceOccurrences(const std::string& w, const BWTIndexSet& indices) { assert(indices.pBWT != NULL); if(indices.pCache != NULL) return countSequenceOccurrencesWithCache(w, indices.pBWT, indices.pCache); else return countSequenceOccurrences(w, indices.pBWT); } size_t BWTAlgorithms::countSequenceOccurrencesSingleStrand(const std::string& w, const BWTIndexSet& indices) { assert(indices.pBWT != NULL); assert(indices.pCache != NULL); BWTInterval interval = findIntervalWithCache(indices.pBWT, indices.pCache, w); return interval.isValid() ? interval.size() : 0; } // Return the count of all the possible one base extensions of the string w. // This returns the number of times the suffix w[i, l]A, w[i, l]C, etc // appears in the FM-index for all i s.t. length(w[i, l]) == overlapLen. AlphaCount64 BWTAlgorithms::calculateExactExtensions(const unsigned int overlapLen, const std::string& w, const BWT* pBWT, const BWT* pRevBWT) { // The algorithm is as follows: // We perform a backward search on the FM-index of w. // For each signficant suffix (length w[i,l] >= minOverlap) // we determine the proper prefixes that match w[i,l]. For each proper prefix matching, // we compute the number of extensions of A,C,G,T for those prefix. AlphaCount64 ext_counts; BWTIntervalPair ranges; size_t l = w.length(); int start = l - 1; BWTAlgorithms::initIntervalPair(ranges, w[start], pBWT, pRevBWT); for(int i = start - 1; i >= 0; --i) { // Compute the range of the suffix w[i, l] BWTAlgorithms::updateBothL(ranges, w[i], pBWT); // Break if the suffix is no longer found if(!(ranges.interval[0].isValid() && ranges.interval[1].isValid())) break; if((l - i) == overlapLen) { if(ranges.interval[1].isValid()) { assert(ranges.interval[1].lower > 0); // The count for each extension is the difference between rank(B, upper) and rank(B, lower - 1) AlphaCount64 ac = pRevBWT->getOccDiff(ranges.interval[1].lower - 1, ranges.interval[1].upper); ext_counts += ac; } } } return ext_counts; } // Calculate the 1-base de Bruijn graph extensions of str // The includes the reverse complement AlphaCount64 BWTAlgorithms::calculateDeBruijnExtensions(const std::string str, const BWT* pBWT, const BWT* pRevBWT, EdgeDir direction, const BWTIntervalCache* pFwdCache, const BWTIntervalCache* pRevCache) { size_t k = str.size(); size_t p = k - 1; std::string pmer; // In the sense direction, we extend from the 3' end if(direction == ED_SENSE) pmer = str.substr(1, p); else pmer = str.substr(0, p); assert(pmer.length() == p); std::string rc_pmer = reverseComplement(pmer); // Get the interval for the p-mer and its reverse complement BWTIntervalPair ip; BWTIntervalPair rc_ip; // If pointers to interval caches are available, use them // to speed up the initial calculation if(pFwdCache != NULL && pRevCache != NULL) { ip = BWTAlgorithms::findIntervalPairWithCache(pBWT, pRevBWT, pFwdCache, pRevCache, pmer); rc_ip = BWTAlgorithms::findIntervalPairWithCache(pBWT, pRevBWT, pFwdCache, pRevCache, rc_pmer); } else { ip = BWTAlgorithms::findIntervalPair(pBWT, pRevBWT, pmer); rc_ip = BWTAlgorithms::findIntervalPair(pBWT, pRevBWT, rc_pmer); } assert(ip.isValid() || rc_ip.isValid()); // Get the extension bases AlphaCount64 extensions; AlphaCount64 rc_extensions; // Calculate the interval to use to find the extensions. If extending in the sense // direction this is the reverse interval/reverse bwt for the forward bwt and the forward // interval for the reverse BWT. Vice-versa for anti-sense size_t fwdIdx; if(direction == ED_SENSE) fwdIdx = 1; else fwdIdx = 0; size_t revIdx = 1 - fwdIdx; const BWT* bwts[2]; bwts[0] = pBWT; bwts[1] = pRevBWT; if(ip.interval[fwdIdx].isValid()) extensions += BWTAlgorithms::getExtCount(ip.interval[fwdIdx], bwts[fwdIdx]); if(rc_ip.interval[revIdx].isValid()) rc_extensions = BWTAlgorithms::getExtCount(rc_ip.interval[revIdx], bwts[revIdx]); // Switch the reverse-complement extensions to the same strand as the str rc_extensions.complement(); extensions += rc_extensions; return extensions; } // AlphaCount64 BWTAlgorithms::calculateDeBruijnExtensionsSingleIndex(const std::string str, const BWT* pBWT, EdgeDir direction, const BWTIntervalCache* pFwdCache) { size_t k = str.size(); size_t p = k - 1; std::string pmer; // In the sense direction, we extend from the 3' end if(direction == ED_SENSE) pmer = str.substr(1, p); else pmer = str.substr(0, p); assert(pmer.length() == p); std::string rc_pmer = reverseComplement(pmer); // As we only have a single index, we can only directly look up // the extensions for either the pmer or its reverse complement // In the SENSE extension direction, we directly look up for // the reverse complement. In ANTISENSE we directly look up for // the pmer. // Get the extension bases AlphaCount64 extensions; AlphaCount64 rc_extensions; // Set up pointers to the data to fill in/query // depending on the direction of the extension AlphaCount64* pDirectEC; AlphaCount64* pIndirectEC; std::string* pDirectStr; std::string* pIndirectStr; if(direction == ED_SENSE) { pDirectEC = &rc_extensions; pDirectStr = &rc_pmer; pIndirectEC = &extensions; pIndirectStr = &pmer; } else { pDirectEC = &extensions; pDirectStr = &pmer; pIndirectEC = &rc_extensions; pIndirectStr = &rc_pmer; } // Get the interval for the direct query string BWTInterval interval; // Use interval cache if available if(pFwdCache) interval = BWTAlgorithms::findIntervalWithCache(pBWT, pFwdCache, *pDirectStr); else interval = BWTAlgorithms::findInterval(pBWT, *pDirectStr); // Fill in the direct count if(interval.isValid()) *pDirectEC = BWTAlgorithms::getExtCount(interval, pBWT); // Now, for the non-direct index, query the 4 possible k-mers that are adjacent to the pmer // Setup the query sequence std::string query(k, 'A'); int varIdx = query.size() - 1; query.replace(0, p, *pIndirectStr); for(int i = 0; i < BWT_ALPHABET::size; ++i) { // Transform the query char b = BWT_ALPHABET::getChar(i); query[varIdx] = b; // Perform lookup if(pFwdCache) interval = BWTAlgorithms::findIntervalWithCache(pBWT, pFwdCache, query); else interval = BWTAlgorithms::findInterval(pBWT, query); // Update the extension count if(interval.isValid()) pIndirectEC->add(b, interval.size()); } // Switch the reverse-complement extensions to the same strand as the str rc_extensions.complement(); extensions += rc_extensions; return extensions; } // Return a random string from the BWT std::string BWTAlgorithms::sampleRandomString(const BWT* pBWT) { assert(RAND_MAX > 0x7FFF); size_t n = pBWT->getNumStrings(); size_t idx = rand() % n; return extractString(pBWT, idx); } // Return a random string from the BWT std::string BWTAlgorithms::sampleRandomSubstring(const BWT* pBWT, size_t len) { assert(RAND_MAX > 0x7FFF); size_t tries = 1000; while(1 && tries-- > 0) { size_t n = pBWT->getBWLen(); size_t idx = rand() % n; std::string s = extractString(pBWT, idx, len); if(s.size() == len) return s; } return ""; } // Return the string from the BWT at idx std::string BWTAlgorithms::extractString(const BWT* pBWT, size_t idx) { assert(idx < pBWT->getNumStrings()); // The range [0,n) in the BWT contains all the terminal // symbols for the reads. Search backwards from one of them // until the '$' is found gives a full string. std::string out; BWTInterval interval(idx, idx); while(1) { assert(interval.isValid()); char b = pBWT->getChar(interval.lower); if(b == '$') break; else out.push_back(b); updateInterval(interval, b, pBWT); } return reverse(out); } // Extract the substring from start, start+length of the sequence starting at position idx std::string BWTAlgorithms::extractSubstring(const BWT* pBWT, uint64_t idx, size_t start, size_t length) { std::string s = extractString(pBWT, idx); return s.substr(start, length); } // Return the next len bases of the string starting at index idx of the BWT std::string BWTAlgorithms::extractString(const BWT* pBWT, size_t idx, size_t len) { std::string out; BWTInterval interval(idx, idx); while(out.length() < len) { assert(interval.isValid()); char b = pBWT->getChar(interval.lower); if(b == '$') break; else out.push_back(b); updateInterval(interval, b, pBWT); } return reverse(out); } // Recursive traversal to extract all the strings needed for the above function void _extractRankedPrefixes(const BWT* pBWT, BWTInterval interval, const std::string& curr, RankedPrefixVector* pOutput) { AlphaCount64 extensions = BWTAlgorithms::getExtCount(interval, pBWT); for(size_t i = 0; i < 4; ++i) { char b = "ACGT"[i]; if(extensions.get(b) > 0) { BWTInterval ni = interval; BWTAlgorithms::updateInterval(ni, b, pBWT); _extractRankedPrefixes(pBWT, ni, curr + b, pOutput); } } // If we have extended the prefix as far as possible, stop BWTAlgorithms::updateInterval(interval, '$', pBWT); for(int64_t i = interval.lower; i <= interval.upper; ++i) { // backwards search gives a reversed prefix, fix it RankedPrefix rp = { (size_t)i, reverse(curr) }; pOutput->push_back(rp); } } // Extract all strings found from a backwards search starting at the given interval RankedPrefixVector BWTAlgorithms::extractRankedPrefixes(const BWT* pBWT, BWTInterval interval) { std::string curr; RankedPrefixVector output; output.reserve(interval.size()); _extractRankedPrefixes(pBWT, interval, curr, &output); return output; } std::string BWTAlgorithms::extractUntilInterval(const BWT* pBWT, int64_t start, const BWTInterval& check) { std::string out; BWTInterval interval(start, start); while(interval.lower < check.lower || interval.lower > check.upper) { assert(interval.isValid()); char b = pBWT->getChar(interval.lower); if(b == '$') return ""; else out.push_back(b); updateInterval(interval, b, pBWT); } return reverse(out); } ================================================ FILE: src/SGA/SuffixTools/BWTAlgorithms.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTAlgorithms.h - Algorithms for aligning to a bwt structure // #ifndef BWT_ALGORITHMS_H #define BWT_ALGORITHMS_H #include "STCommon.h" #include "BWTIndexSet.h" #include "BWTInterval.h" #include "GraphCommon.h" #include #include #define LEFT_INT_IDX 0 #define RIGHT_INT_IDX 1 // structures // A (partial) prefix of a string contained in the BWT // and its lexicographic rank struct RankedPrefix { size_t rank; std::string prefix; }; typedef std::vector RankedPrefixVector; // functions namespace BWTAlgorithms { // get the interval(s) in pBWT/pRevBWT that corresponds to the string w using a backward search algorithm BWTInterval findInterval(const BWT* pBWT, const std::string& w); BWTInterval findIntervalWithCache(const BWT* pBWT, const BWTIntervalCache* pIntervalCache, const std::string& w); BWTInterval findInterval(const BWTIndexSet& indices, const std::string& w); BWTIntervalPair findIntervalPair(const BWT* pBWT, const BWT* pRevBWT, const std::string& w); BWTIntervalPair findIntervalPairWithCache(const BWT* pBWT, const BWT* pRevBWT, const BWTIntervalCache* pFwdCache, const BWTIntervalCache* pRevCache, const std::string& w); // Count the number of times the sequence w appears in the collection, including // its reverse complement size_t countSequenceOccurrences(const std::string& w, const BWT* pBWT); size_t countSequenceOccurrencesWithCache(const std::string& w, const BWT* pBWT, const BWTIntervalCache* pIntervalCache); size_t countSequenceOccurrences(const std::string& w, const BWTIndexSet& indices); // Count the occurrences of w, not including the reverse complement size_t countSequenceOccurrencesSingleStrand(const std::string& w, const BWTIndexSet& indices); // Update the given interval using backwards search // If the interval corrsponds to string S, it will be updated // for string bS inline void updateInterval(BWTInterval& interval, char b, const BWT* pBWT) { size_t pb = pBWT->getPC(b); interval.lower = pb + pBWT->getOcc(b, interval.lower - 1); interval.upper = pb + pBWT->getOcc(b, interval.upper) - 1; } // Update the interval pair for the right extension to symbol b. // In this version the AlphaCounts for the upper and lower intervals // have been calculated inline void updateBothR(BWTIntervalPair& pair, char b, const BWT* pRevBWT, AlphaCount64& l, AlphaCount64& u) { AlphaCount64 diff = u - l; pair.interval[0].lower = pair.interval[0].lower + diff.getLessThan(b); pair.interval[0].upper = pair.interval[0].lower + diff.get(b) - 1; // Update the right index directly size_t pb = pRevBWT->getPC(b); pair.interval[1].lower = pb + l.get(b); pair.interval[1].upper = pb + u.get(b) - 1; } // // Update the interval pair for the right extension to symbol b. // inline void updateBothR(BWTIntervalPair& pair, char b, const BWT* pRevBWT) { // Update the left index using the difference between the AlphaCounts in the reverse table AlphaCount64 l = pRevBWT->getFullOcc(pair.interval[1].lower - 1); AlphaCount64 u = pRevBWT->getFullOcc(pair.interval[1].upper); updateBothR(pair, b, pRevBWT, l, u); } // Update the interval pair for the left extension to symbol b. // In this version the AlphaCounts for the upper and lower intervals // have been calculated. inline void updateBothL(BWTIntervalPair& pair, char b, const BWT* pBWT, AlphaCount64& l, AlphaCount64& u) { AlphaCount64 diff = u - l; // Update the left index using the difference between the AlphaCounts in the reverse table pair.interval[1].lower = pair.interval[1].lower + diff.getLessThan(b); pair.interval[1].upper = pair.interval[1].lower + diff.get(b) - 1; // Update the left index directly size_t pb = pBWT->getPC(b); pair.interval[0].lower = pb + l.get(b); pair.interval[0].upper = pb + u.get(b) - 1; } // // Update the interval pair for the left extension to symbol b. // inline void updateBothL(BWTIntervalPair& pair, char b, const BWT* pBWT) { // Update the left index using the difference between the AlphaCounts in the reverse table AlphaCount64 l = pBWT->getFullOcc(pair.interval[0].lower - 1); AlphaCount64 u = pBWT->getFullOcc(pair.interval[0].upper); updateBothL(pair, b, pBWT, l, u); } // Initialize the interval of index idx to be the range containining all the b suffixes inline void initInterval(BWTInterval& interval, char b, const BWT* pB) { interval.lower = pB->getPC(b); interval.upper = interval.lower + pB->getOcc(b, pB->getBWLen() - 1) - 1; } // Initialize the interval of index idx to be the range containining all the b suffixes inline void initIntervalPair(BWTIntervalPair& pair, char b, const BWT* pBWT, const BWT* pRevBWT) { initInterval(pair.interval[LEFT_INT_IDX], b, pBWT); initInterval(pair.interval[RIGHT_INT_IDX], b, pRevBWT); } // Return the counts of the bases between the lower and upper interval in pBWT inline AlphaCount64 getExtCount(const BWTInterval& interval, const BWT* pBWT) { return pBWT->getOccDiff(interval.lower - 1, interval.upper); } // Return the count of all the possible one base extensions of the string w. // This returns the number of times the suffix w[i, l]A, w[i, l]C, etc // appears in the FM-index for all i s.t. length(w[i, l]) >= minOverlap. AlphaCount64 calculateExactExtensions(const unsigned int overlapLen, const std::string& w, const BWT* pBWT, const BWT* pRevBWT); // Calculate de Bruijn graph extensions of the given sequence using an index pair // Returns an AlphaCount64 with the count of each extension base // This function optionally takes in an interval cache to speed up the computation AlphaCount64 calculateDeBruijnExtensions(const std::string str, const BWT* pBWT, const BWT* pRevBWT, EdgeDir direction, const BWTIntervalCache* pFwdCache = NULL, const BWTIntervalCache* pRevCache = NULL); // Calculate de Bruijn graph extensions of the given sequence using a single index // This version is more computationally expensive than above but allows // only one index to be held in memory. // Returns an AlphaCount64 with the count of each extension base // This function optionally takes in an interval cache to speed up the computation AlphaCount64 calculateDeBruijnExtensionsSingleIndex(const std::string str, const BWT* pBWT, EdgeDir direction, const BWTIntervalCache* pFwdCache = NULL); // Extract the complete string starting at idx in the BWT std::string extractString(const BWT* pBWT, size_t idx); // Extract the next len bases of the string starting at idx std::string extractString(const BWT* pBWT, size_t idx, size_t len); // Extract the substring from start, start+length of the sequence starting at position idx std::string extractSubstring(const BWT* pBWT, uint64_t idx, size_t start, size_t length = std::string::npos); // Extract all prefixes of the suffixes for the given interval, along // with their lexicographic rank. RankedPrefixVector extractRankedPrefixes(const BWT* pBWT, BWTInterval interval); // Extract symbols from the starting index of the BWT until the index lies // within the given interval. If the extraction hits the start of a string // without finding a prefix, the empty string is returned. std::string extractUntilInterval(const BWT* pBWT, int64_t start, const BWTInterval& interval); // Returns a randomly chosen string from the BWT std::string sampleRandomString(const BWT* pBWT); // Returns a randomly chosen substring from the BWT std::string sampleRandomSubstring(const BWT* pBWT, size_t len); }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTCABauerCoxRosone.cpp ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // BWTCABauerCoxRosone - In-memory version of Illumina's // BWT construction algorithm #include "BWTCABauerCoxRosone.h" #include "Timer.h" #include "BWTWriterBinary.h" #include #include void BWTCA::runBauerCoxRosone(const DNAEncodedStringVector* pReadSequences, const std::string& bwt_out_name, const std::string& sai_out_name) { size_t num_reads = pReadSequences->size(); size_t num_symbols = 0; for(size_t i = 0; i < num_reads; ++i) num_symbols += pReadSequences->at(i).length(); num_symbols += num_reads; // include 1 sentinal per read printf("Running BCR on %zu symbols, %zu reads\n", num_symbols, num_reads); // Allocate two working BWTs DNAEncodedString read_bwt; DNAEncodedString write_bwt; read_bwt.resize(num_symbols); write_bwt.resize(num_symbols); // Allocate the bcr vector, which tracks the state of the algorithm BCRVector bcrVector(num_reads); // Track the number of suffixes that start with a given symbol AlphaCount64 suffixStartCounts; // Iteration 1: // Output a BWT with the last symbol of every read, in the order they appear in the read table. // This is the ordering of all suffixes that start with the sentinel character outputInitialCycle(pReadSequences, bcrVector, write_bwt, suffixStartCounts); write_bwt.swap(read_bwt); // Iteration 2...n, create new bwts from the bwt of the previous cycle size_t partial_bwt_length = num_reads; Timer timer("cycles", false); size_t maxCycles = pReadSequences->at(0).length(); for(size_t cycle = 2; cycle <= maxCycles; ++cycle) { //std::cout << "Starting cycle " << cycle << "\n"; // Convert relative positions to absolute positions calculateAbsolutePositions(bcrVector, suffixStartCounts); // Sort nvector by the absolute position to insert the symbol std::sort(bcrVector.begin(), bcrVector.end()); //std::cout << " done sorting..." << timer.getElapsedWallTime() << "\n"; // Output the BWT for this cycle and update the vector and suffix start count partial_bwt_length = outputPartialCycle(cycle, pReadSequences, bcrVector, read_bwt, partial_bwt_length, write_bwt, suffixStartCounts); //std::cout << " done writing..." << timer.getElapsedWallTime() << "\n"; // Swap the in/out bwt read_bwt.swap(write_bwt); } // Write the resulting bwt and suffix array index BWTWriterBinary bwtWriter(bwt_out_name); bwtWriter.writeHeader(num_reads, num_symbols, BWF_NOFMI); SAWriter saWriter(sai_out_name); saWriter.writeHeader(num_reads, num_reads); // Calculate the positions of the final insertion symbols and write them directly to the file calculateAbsolutePositions(bcrVector, suffixStartCounts); std::sort(bcrVector.begin(), bcrVector.end()); size_t num_wrote = outputFinalBWT(bcrVector, read_bwt, partial_bwt_length, &bwtWriter, &saWriter); assert(num_wrote == num_symbols); } // Update N and the output BWT for the initial cycle, corresponding to the sentinel suffixes // the symbolCounts vector is updated to hold the number of times each symbol has been inserted // into the bwt void BWTCA::outputInitialCycle(const DNAEncodedStringVector* pReadSequences, BCRVector& bcrVector, DNAEncodedString& bwt, AlphaCount64& suffixSymbolCounts) { AlphaCount64 incomingSymbolCounts; size_t n = pReadSequences->size(); size_t first_read_len = pReadSequences->at(0).length(); for(size_t i = 0; i < n; ++i) { size_t rl = pReadSequences->at(i).length(); // Check that all reads are the same length if(rl != first_read_len) { std::cout << "Error: This implementation of BCR requires all reads to be the same length\n"; exit(EXIT_FAILURE); } char c = pReadSequences->at(i).get(rl - 1); bwt.set(i, c); assert(rl > 1); // Load the elements of the N vector with the next symbol bcrVector[i].sym = c; bcrVector[i].index = i; // Set the relative position of the symbol that is being inserted bcrVector[i].position = incomingSymbolCounts.get(c); // Increment the count of the first base of the suffix of the // incoming strings. This is $ for the initial cycle suffixSymbolCounts.increment('$'); // Update the inserted symbols incomingSymbolCounts.increment(c); } suffixSymbolCounts += incomingSymbolCounts; } // Write out the next BWT for the next cycle. This updates BCRVector // and suffixSymbolCounts. Returns the number of symbols written to writeBWT size_t BWTCA::outputPartialCycle(int cycle, const DNAEncodedStringVector* pReadSequences, BCRVector& bcrVector, const DNAEncodedString& readBWT, size_t total_read_symbols, DNAEncodedString& writeBWT, AlphaCount64& suffixStartCounts) { // We track the rank of each symbol as it is copied/inserted // into the new bwt AlphaCount64 rank; // Counters size_t num_copied = 0; size_t num_inserted = 0; size_t num_wrote = 0; for(size_t i = 0; i < bcrVector.size(); ++i) { BCRElem& ne = bcrVector[i]; // Copy elements from the read bwt until we reach the target position while(num_copied + num_inserted < ne.position) { char c = readBWT.get(num_copied++); writeBWT.set(num_wrote++, c); rank.increment(c); } // Now insert the incoming symbol int rl = pReadSequences->at(ne.index).length(); char c = '$'; // If the cycle number is greater than the read length, we are // on the final iteration and we just add in the '$' characters if(cycle <= rl) c = pReadSequences->at(ne.index).get(rl - cycle); //std::cout << "Inserting " << c << " at position " << num_copied + num_inserted << "\n"; writeBWT.set(num_wrote++, c); num_inserted += 1; // Update the nvector element ne.sym = c; // Record the rank of the inserted symbol ne.position = rank.get(c); // Update the rank and the number of suffixes that start with c rank.increment(c); suffixStartCounts.increment(c); } // Copy any remaining symbols in the bwt while(num_copied < total_read_symbols) writeBWT.set(num_wrote++, readBWT.get(num_copied++)); return num_wrote; } // Write the final BWT to a file. size_t BWTCA::outputFinalBWT(BCRVector& bcrVector, const DNAEncodedString& readBWT, size_t partial_bwt_symbols, BWTWriterBinary* pBWTWriter, SAWriter* pSAWriter) { // Counters size_t num_copied = 0; size_t num_inserted = 0; for(size_t i = 0; i < bcrVector.size(); ++i) { BCRElem& ne = bcrVector[i]; // Copy elements from the read bwt until we reach the target position while(num_copied + num_inserted < ne.position) pBWTWriter->writeBWChar(readBWT.get(num_copied++)); // Write a single $, terminating this string pBWTWriter->writeBWChar('$'); pSAWriter->writeElem(SAElem(ne.index, 0)); num_inserted += 1; } // Copy any remaining symbols in the bwt while(num_copied < partial_bwt_symbols) pBWTWriter->writeBWChar(readBWT.get(num_copied++)); pBWTWriter->finalize(); return num_copied + num_inserted; } void BWTCA::calculateAbsolutePositions(BCRVector& bcrVector, const AlphaCount64& suffixSymbolCounts) { // Calculate a predecessor array from the suffix symbol counts AlphaCount64 predCounts; for(int i = 0; i < BWT_ALPHABET::size; ++i) { char b = RANK_ALPHABET[i]; int64_t pc = suffixSymbolCounts.getLessThan(b); predCounts.set(b, pc); } for(size_t i = 0; i < bcrVector.size(); ++i) bcrVector[i].position += predCounts.get(bcrVector[i].sym); } ================================================ FILE: src/SGA/SuffixTools/BWTCABauerCoxRosone.h ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // BWTCABauerCoxRosone - In-memory version of Illumina's // BWT construction algorithm #ifndef BWTCA_COX_BAUER_ROSONE_H #define BWTCA_COX_BAUER_ROSONE_H #include "SAWriter.h" #include "ReadTable.h" #include "Alphabet.h" #include "EncodedString.h" #include "BWTWriterBinary.h" namespace BWTCA { // This structure tracks the state of each read // It contains a position field, which stores the relative/absolute // position to insert the next symbol of a read into the partial BWT. // It also stores the read index and the symbol to insert struct BCRElem { BCRElem() : index(0), sym('\0') {} // Comparator. Sort first on the symbol, then break ties using the index friend bool operator<(const BCRElem& a, const BCRElem& b) { return a.position < b.position; } friend std::ostream& operator<<(std::ostream& out, const BCRElem& elem) { out << "I: " << elem.index << " S: " << elem.sym << " P: " << elem.position; return out; } // Data uint64_t position; // the relative or absolute position into the next partial bwt to insert a symbol uint32_t index; // the read index this entry represents char sym; // a symbol to be inserted }; typedef std::vector BCRVector; // Construct the burrows-wheeler transform of the set of reads void runBauerCoxRosone(const DNAEncodedStringVector* pReadSequences, const std::string& bwt_out_name, const std::string& sai_out_name); // Run the initial special first iteration of the algorithm void outputInitialCycle(const DNAEncodedStringVector* pReadSequences, BCRVector& bcrVector, DNAEncodedString& bwt, AlphaCount64& suffixSymbolCounts); // Write the final bwt to a file size_t outputFinalBWT(BCRVector& bcrVector, const DNAEncodedString& readBWT, size_t partial_bwt_symbols, BWTWriterBinary* pBWTWriter, SAWriter* pSAWriter); // Output an intermediate bwt size_t outputPartialCycle(int cycle, const DNAEncodedStringVector* pReadSequences, BCRVector& bcrVector, const DNAEncodedString& readBWT, size_t partial_bwt_symbols, DNAEncodedString& writeBWT, AlphaCount64& suffixStartCounts); // Calculate absolute position for each element of the nvector void calculateAbsolutePositions(BCRVector& bcrVector, const AlphaCount64& suffixSymbolCounts); }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTCARopebwt.cpp ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTCARopebwt - Construct the BWT for a set of reads // using Heng Li's ropebwt implementation // #include "BWTCARopebwt.h" #include "bcr.h" #include "SeqReader.h" #include "StdAlnTools.h" #include "BWTWriterBinary.h" #include "BWTWriterAscii.h" #include "SAWriter.h" static unsigned char seq_nt6_table[128] = { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 5, 2, 5, 5, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 5, 2, 5, 5, 5, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; void BWTCA::runRopebwt(const std::string& input_filename, const std::string& bwt_out_name, bool use_threads, bool do_reverse) { // Initialize ropebwt std::string tmp_name = bwt_out_name + ".tmp"; bcr_t* bcr = bcr_init(use_threads, tmp_name.c_str()); size_t num_sequences = 0; size_t num_bases = 0; SeqReader reader(input_filename); SeqRecord record; while(reader.get(record)) { if(do_reverse) record.seq.reverse(); size_t l = record.seq.length(); // Convert the string into the alphabet encoding expected by ropebwt uint8_t* s = new uint8_t[l]; for(size_t i = 0; i < l; ++i) { char c = record.seq.get(i); s[i] = seq_nt6_table[(int)c]; } // Send the sequence to ropebwt bcr_append(bcr, l, s); num_sequences += 1; num_bases += l; delete [] s; } // Build the BWT bcr_build(bcr); // write the BWT and SAI bcritr_t* itr = bcr_itr_init(bcr); const uint8_t* s; int l; BWTWriterBinary* out_bwt = new BWTWriterBinary(bwt_out_name); size_t num_symbols = num_bases + num_sequences; out_bwt->writeHeader(num_sequences, num_symbols, BWF_NOFMI); // Write each run while( (s = bcr_itr_next(itr, &l)) != 0 ) { for (int i = 0; i < l; ++i) { char c = "$ACGTN"[s[i]&7]; int rl = s[i]>>3; for(int j = 0; j < rl; ++j) out_bwt->writeBWChar(c); } } free(itr); out_bwt->finalize(); delete out_bwt; // Cleanup bcr_destroy(bcr); } ================================================ FILE: src/SGA/SuffixTools/BWTCARopebwt.h ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTCARopebwt - Construct the BWT for a set of reads // using Heng Li's ropebwt implementation // #ifndef BWTCA_ROPEBWT_H #define BWTCA_ROPEBWT_H #include namespace BWTCA { void runRopebwt(const std::string& input_filename, const std::string& bwt_out_name, bool use_threads, bool do_reverse); }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTDiskConstruction.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTDiskConstruction - Implementation of the // BWT disk construction algorithm of Ferragina, // Gagie, Manzini. See Lightweight Data Indexing // and Compression in External Memory // #include "BWTDiskConstruction.h" #include "Util.h" #include "BWTWriter.h" #include "BWTReader.h" #include "SAWriter.h" #include "SAReader.h" #include "GapArray.h" #include "RankProcess.h" #include "SequenceProcessFramework.h" #include "BWTCABauerCoxRosone.h" #include // Definitions and structures static const bool USE_GZ = false; static const int BWT_SAMPLE_RATE = 512; struct MergeItem { int64_t start_index; int64_t end_index; std::string reads_filename; std::string bwt_filename; std::string sai_filename; friend std::ostream& operator<<(std::ostream& out, const MergeItem& item) { out << "[" << item.start_index << "," << item.end_index << "] " << item.bwt_filename; out << " " << item.sai_filename << " " << item.reads_filename; return out; } }; typedef std::vector MergeVector; // Function declarations int64_t merge(SeqReader* pReader, const MergeItem& item1, const MergeItem& item2, const std::string& bwt_outname, const std::string& sai_outname, bool doReverse, int numThreads, int storageLevel); // Initial BWT construction algorithms MergeVector computeInitialSAIS(const BWTDiskParameters& parameters); MergeVector computeInitialBCR(const BWTDiskParameters& parameters); // void writeMergedIndex(const BWT* pBWTInternal, const MergeItem& externalItem, const MergeItem& internalItem, const std::string& bwt_outname, const std::string& sai_outname, const GapArray* pGapArray); void writeRemovalIndex(const BWT* pBWTInternal, const std::string& sai_inname, const std::string& bwt_outname, const std::string& sai_outname, size_t num_strings_remove, size_t num_symbols_remove, const GapArray* pGapArray); void computeGapArray(SeqReader* pReader, size_t n, const BWT* pBWT, bool doReverse, int numThreads, GapArray* pGapArray, bool removeMode, size_t& num_strings_read, size_t& num_symbols_read); // std::string makeTempName(const std::string& prefix, int id, const std::string& extension); std::string makeFilename(const std::string& prefix, const std::string& extension); // The algorithm is as follows. We create M BWTs for subsets of // the input reads. These are created independently and written // to disk. They are then merged either sequentially or pairwise // to create the final BWT void buildBWTDisk(const BWTDiskParameters& parameters) { // Build the initial bwts for subsets of the data MergeVector mergeVector; if(parameters.bUseBCR) mergeVector = computeInitialBCR(parameters); else mergeVector = computeInitialSAIS(parameters); // Phase 2: Pairwise merge the BWTs int groupID = mergeVector.size(); // Initial the name of the next intermediate bwt int round = 1; MergeVector nextMergeRound; while(mergeVector.size() > 1) { std::cout << "Starting round " << round << "\n"; SeqReader* pReader = new SeqReader(parameters.inFile); SeqRecord record; for(size_t i = 0; i < mergeVector.size(); i+=2) { if(i + 1 != mergeVector.size()) { std::string bwt_merged_name = makeTempName(parameters.outPrefix, groupID, parameters.bwtExtension); std::string sai_merged_name = makeTempName(parameters.outPrefix, groupID, parameters.saiExtension); MergeItem item1 = mergeVector[i]; MergeItem item2 = mergeVector[i+1]; // Perform the actual merge int64_t curr_idx = merge(pReader, item1, item2, bwt_merged_name, sai_merged_name, parameters.bBuildReverse, parameters.numThreads, parameters.storageLevel); // pReader now points to the end of item1's block of // reads. Skip item2's reads assert(curr_idx == item2.start_index); while(curr_idx <= item2.end_index) { bool eof = !pReader->get(record); assert(!eof); (void)eof; ++curr_idx; } // Create the merged mergeItem to use in the next round MergeItem merged; merged.start_index = item1.start_index; merged.end_index = item2.end_index; merged.bwt_filename = bwt_merged_name; merged.sai_filename = sai_merged_name; nextMergeRound.push_back(merged); // Done with the temp files, remove them unlink(item1.bwt_filename.c_str()); unlink(item2.bwt_filename.c_str()); unlink(item1.sai_filename.c_str()); unlink(item2.sai_filename.c_str()); ++groupID; } else { // Singleton, pass through to the next round nextMergeRound.push_back(mergeVector[i]); } } delete pReader; mergeVector.clear(); mergeVector.swap(nextMergeRound); ++round; } assert(mergeVector.size() == 1); // Done, rename the files to their final name std::stringstream bwt_ss; bwt_ss << parameters.outPrefix << parameters.bwtExtension << (USE_GZ ? ".gz" : ""); std::string bwt_final_filename = bwt_ss.str(); rename(mergeVector.front().bwt_filename.c_str(), bwt_final_filename.c_str()); std::stringstream sai_ss; sai_ss << parameters.outPrefix << parameters.saiExtension << (USE_GZ ? ".gz" : ""); std::string sai_final_filename = sai_ss.str(); rename(mergeVector.front().sai_filename.c_str(), sai_final_filename.c_str()); } // Compute the initial BWTs for the input file split into blocks of records using the SAIS algorithm MergeVector computeInitialSAIS(const BWTDiskParameters& parameters) { SeqReader* pReader = new SeqReader(parameters.inFile); SeqRecord record; int groupID = 0; size_t numReadTotal = 0; MergeVector mergeVector; MergeItem mergeItem; mergeItem.start_index = 0; // Phase 1: Compute the initial BWTs ReadTable* pCurrRT = new ReadTable; bool done = false; while(!done) { done = !pReader->get(record); if(!done) { // the read is valid SeqItem item = record.toSeqItem(); if(parameters.bBuildReverse) item.seq.reverse(); pCurrRT->addRead(item); ++numReadTotal; } if(pCurrRT->getCount() >= parameters.numReadsPerBatch || (done && pCurrRT->getCount() > 0)) { // Compute the SA and BWT for this group SuffixArray* pSA = new SuffixArray(pCurrRT, 1); // Write the BWT to disk std::string bwt_temp_filename = makeTempName(parameters.outPrefix, groupID, parameters.bwtExtension); pSA->writeBWT(bwt_temp_filename, pCurrRT); std::string sai_temp_filename = makeTempName(parameters.outPrefix, groupID, parameters.saiExtension); pSA->writeIndex(sai_temp_filename); // Push the merge info mergeItem.end_index = numReadTotal - 1; // inclusive mergeItem.reads_filename = parameters.inFile; mergeItem.bwt_filename = bwt_temp_filename; mergeItem.sai_filename = sai_temp_filename; mergeVector.push_back(mergeItem); // Cleanup delete pSA; // Start the new group mergeItem.start_index = numReadTotal; ++groupID; pCurrRT->clear(); } } delete pCurrRT; delete pReader; return mergeVector; } // Compute the initial BWTs for the input file split into blocks of records using the BCR algorithm MergeVector computeInitialBCR(const BWTDiskParameters& parameters) { SeqReader* pReader = new SeqReader(parameters.inFile); SeqRecord record; int groupID = 0; size_t numReadTotal = 0; MergeVector mergeVector; MergeItem mergeItem; mergeItem.start_index = 0; // Phase 1: Compute the initial BWTs DNAEncodedStringVector readSequences; bool done = false; while(!done) { done = !pReader->get(record); if(!done) { // the read is valid SeqItem item = record.toSeqItem(); if(parameters.bBuildReverse) item.seq.reverse(); readSequences.push_back(item.seq.toString()); ++numReadTotal; } if(readSequences.size() >= parameters.numReadsPerBatch || (done && readSequences.size() > 0)) { std::string bwt_temp_filename = makeTempName(parameters.outPrefix, groupID, parameters.bwtExtension); std::string sai_temp_filename = makeTempName(parameters.outPrefix, groupID, parameters.saiExtension); BWTCA::runBauerCoxRosone(&readSequences, bwt_temp_filename, sai_temp_filename); // Push the merge info mergeItem.end_index = numReadTotal - 1; // inclusive mergeItem.reads_filename = parameters.inFile; mergeItem.bwt_filename = bwt_temp_filename; mergeItem.sai_filename = sai_temp_filename; mergeVector.push_back(mergeItem); // Start the new group mergeItem.start_index = numReadTotal; ++groupID; readSequences.clear(); } } delete pReader; return mergeVector; } // Merge the indices for the two independent sets of reads in readsFile1 and readsFile2 void mergeIndependentIndices(const std::string& readsFile1, const std::string& readsFile2, const std::string& outPrefix, const std::string& bwt_extension, const std::string& sai_extension, bool doReverse, int numThreads, int storageLevel) { MergeItem item1; std::string prefix1 = stripGzippedExtension(readsFile1); item1.reads_filename = readsFile1; item1.bwt_filename = makeFilename(prefix1, bwt_extension); item1.sai_filename = makeFilename(prefix1, sai_extension); item1.start_index = 0; item1.end_index = -1; // this tells merge to read the entire file MergeItem item2; std::string prefix2 = stripGzippedExtension(readsFile2); item2.reads_filename = readsFile2; item2.bwt_filename = makeFilename(prefix2, bwt_extension); item2.sai_filename = makeFilename(prefix2, sai_extension); item2.start_index = 0; item2.end_index = -1; // Prepare the input filehandle SeqReader* pReader = new SeqReader(item1.reads_filename); // Build the outnames std::string bwt_merged_name = makeFilename(outPrefix, bwt_extension); std::string sai_merged_name = makeFilename(outPrefix, sai_extension); // Perform the actual merge merge(pReader, item1, item2, bwt_merged_name, sai_merged_name, doReverse, numThreads, storageLevel); delete pReader; } // Construct new indices without the reads in readsToRemove void removeReadsFromIndices(const std::string& allReadsPrefix, const std::string& readsToRemove, const std::string& outPrefix, const std::string& bwt_extension, const std::string& sai_extension, bool doReverse, int numThreads) { std::string bwt_filename = makeFilename(allReadsPrefix, bwt_extension); std::string sai_filename = makeFilename(allReadsPrefix, sai_extension); // Prepare the input filehandle SeqReader* pReader = new SeqReader(readsToRemove); // Build the outnames std::string bwt_out_name = makeFilename(outPrefix, bwt_extension); std::string sai_out_name = makeFilename(outPrefix, sai_extension); // Compute the gap array BWT* pBWT = new BWT(bwt_filename, BWT_SAMPLE_RATE); // Boolean gap array GapArray* pGapArray = createGapArray(1); size_t num_strings_remove; size_t num_symbols_remove; computeGapArray(pReader, (size_t)-1, pBWT, doReverse, numThreads, pGapArray, true, num_strings_remove, num_symbols_remove); //writeRemovalIndex(); writeRemovalIndex(pBWT, sai_filename, bwt_out_name, sai_out_name, num_strings_remove, num_symbols_remove, pGapArray); // Perform the actual merge //merge(pReader, item1, item2, bwt_merged_name, sai_merged_name, doReverse, numThreads); delete pGapArray; delete pReader; delete pBWT; } // Merge two readsFiles together void mergeReadFiles(const std::string& readsFile1, const std::string& readsFile2, const std::string& outPrefix) { // If the outfile is the empty string, append the reads in readsFile2 into readsFile1 // otherwise cat the files together std::ostream* pWriter; if(outPrefix.empty()) { pWriter = createWriter(readsFile1, std::ios_base::out | std::ios_base::app); } else { bool both_fastq = isFastq(readsFile1) && isFastq(readsFile2); bool both_gzip = isGzip(readsFile1) && isGzip(readsFile2); std::string extension = both_fastq ? ".fastq" : ".fa"; if(both_gzip) extension.append(".gz"); std::string out_filename = outPrefix + extension; pWriter = createWriter(out_filename); // Copy reads1 to the outfile SeqReader reader(readsFile1); SeqRecord record; while(reader.get(record)) record.write(*pWriter); } // Copy reads2 to writer SeqReader reader(readsFile2); SeqRecord record; while(reader.get(record)) record.write(*pWriter); delete pWriter; } // Compute the gap array for the first n items in pReader void computeGapArray(SeqReader* pReader, size_t n, const BWT* pBWT, bool doReverse, int numThreads, GapArray* pGapArray, bool removeMode, size_t& num_strings_read, size_t& num_symbols_read) { // Create the gap array size_t gap_array_size = pBWT->getBWLen() + 1; pGapArray->resize(gap_array_size); // The rank processor calculates the rank of every suffix of a given sequence // and returns a vector of ranks. The postprocessor takes in the vector // and updates the gap array RankPostProcess postProcessor(pGapArray); size_t numProcessed = 0; if(numThreads <= 1) { RankProcess processor(pBWT, pGapArray, doReverse, removeMode); numProcessed = SequenceProcessFramework::processSequencesSerial(*pReader, &processor, &postProcessor, n); } else { typedef std::vector RankProcessVector; RankProcessVector rankProcVec; for(int i = 0; i < numThreads; ++i) { RankProcess* pProcess = new RankProcess(pBWT, pGapArray, doReverse, removeMode); rankProcVec.push_back(pProcess); } numProcessed = SequenceProcessFramework::processSequencesParallel(*pReader, rankProcVec, &postProcessor, n); for(int i = 0; i < numThreads; ++i) delete rankProcVec[i]; } num_strings_read = postProcessor.getNumStringsProcessed(); num_symbols_read = postProcessor.getNumSymbolsProcessed(); assert(n == (size_t)-1 || (numProcessed == n)); } // Merge a pair of BWTs using disk storage // Precondition: pReader is positioned at the start of the read block for item1 int64_t merge(SeqReader* pReader, const MergeItem& item1, const MergeItem& item2, const std::string& bwt_outname, const std::string& sai_outname, bool doReverse, int numThreads, int storageLevel) { std::cout << "Merge1: " << item1 << "\n"; std::cout << "Merge2: " << item2 << "\n"; // Load the bwt of item2 into memory as the internal bwt BWT* pBWTInternal = new BWT(item2.bwt_filename, BWT_SAMPLE_RATE); // If end_index is -1, calculate the ranks for every sequence in the file // otherwise only calculate the rank for the next (end_index - start_index + 1) sequences size_t n = (item1.end_index == -1) ? -1 : item1.end_index - item1.start_index + 1; // Calculate the rank of every read from item1.start_index to item1.end_index // and increment the gap counts int64_t curr_idx = item1.start_index; // Compute the gap/rank array GapArray* pGapArray = createGapArray(storageLevel); size_t num_strings_read = 0; size_t num_symbols_read = 0; computeGapArray(pReader, n, pBWTInternal, doReverse, numThreads, pGapArray, false, num_strings_read, num_symbols_read); assert(n == (size_t)-1 || (num_strings_read == n)); // At this point, the gap array has been calculated for all the sequences curr_idx += num_strings_read; assert(item1.end_index == -1 || (curr_idx == item1.end_index + 1 && curr_idx == item2.start_index)); // Write the merged BWT/SAI to disk writeMergedIndex(pBWTInternal, item1, item2, bwt_outname, sai_outname, pGapArray); delete pBWTInternal; delete pGapArray; return curr_idx; } // Merge the internal and external BWTs and the SAIs void writeMergedIndex(const BWT* pBWTInternal, const MergeItem& externalItem, const MergeItem& internalItem, const std::string& bwt_outname, const std::string& sai_outname, const GapArray* pGapArray) { IBWTWriter* pBWTWriter = BWTWriter::createWriter(bwt_outname); IBWTReader* pBWTExtReader = BWTReader::createReader(externalItem.bwt_filename); SAWriter saiWriter(sai_outname); SAReader saiExtReader(externalItem.sai_filename); SAReader saiIntReader(internalItem.sai_filename); // Calculate and write header values size_t disk_strings; size_t disk_symbols; BWFlag flag; pBWTExtReader->readHeader(disk_strings, disk_symbols, flag); size_t total_strings = disk_strings + pBWTInternal->getNumStrings(); size_t total_symbols = disk_symbols + pBWTInternal->getBWLen(); pBWTWriter->writeHeader(total_strings, total_symbols, BWF_NOFMI); // Discard the first header each sai size_t discard1, discard2; saiExtReader.readHeader(discard1, discard2); saiIntReader.readHeader(discard1, discard2); // Write the header of the SAI which is just the number of strings and elements in the SAI saiWriter.writeHeader(total_strings, total_strings); // Calculate and write the actual string // The semantics of the gap array are that we need to write gap_array[i] // symbols to the stream before writing bwtInternal[i] // Each time a '$' symbol is read, it signals the end of some read. We // output one element of the sai from corresponding internal or external // sai file. size_t num_bwt_wrote = 0; size_t num_sai_wrote = 0; for(size_t i = 0; i < pGapArray->size(); ++i) { size_t v = pGapArray->get(i); for(size_t j = 0; j < v; ++j) { char b = pBWTExtReader->readBWChar(); assert(b != '\n'); pBWTWriter->writeBWChar(b); ++num_bwt_wrote; if(b == '$') { // The external indices only need to be copied SAElem e = saiExtReader.readElem(); saiWriter.writeElem(e); ++num_sai_wrote; } } // If this is the last entry in the gap array, do not output a symbol from // the internal BWT if(i != pBWTInternal->getBWLen()) { char b = pBWTInternal->getChar(i); pBWTWriter->writeBWChar(b); ++num_bwt_wrote; if(b == '$') { // The internal indices need to be offset // by the number of strings in the external collection SAElem e = saiIntReader.readElem(); uint64_t id = e.getID(); id += disk_strings; e.setID(id); saiWriter.writeElem(e); ++num_sai_wrote; } } } if(num_bwt_wrote != total_symbols) { printf("Error expected to write %zu symbols, actually wrote %zu\n", total_symbols, num_bwt_wrote); assert(num_bwt_wrote == total_symbols); } assert(num_sai_wrote == total_strings); // Ensure we read the entire bw string from disk char last = pBWTExtReader->readBWChar(); assert(last == '\n'); (void)last; // Finalize the BWT disk file pBWTWriter->finalize(); delete pBWTExtReader; delete pBWTWriter; } // Write a new BWT and SAI that skips the elements marked // by the gap array. This is used to remove entire strings from the // index void writeRemovalIndex(const BWT* pBWTInternal, const std::string& sai_inname, const std::string& bwt_outname, const std::string& sai_outname, size_t num_strings_remove, size_t num_symbols_remove, const GapArray* pGapArray) { IBWTWriter* pBWTWriter = BWTWriter::createWriter(bwt_outname); SAWriter* pSAIWriter = new SAWriter(sai_outname); SAReader* pSAIReader = new SAReader(sai_inname); // Calculate and write header values assert(num_strings_remove <= pBWTInternal->getNumStrings()); assert(num_symbols_remove <= pBWTInternal->getBWLen()); size_t input_strings = pBWTInternal->getNumStrings(); size_t input_symbols = pBWTInternal->getBWLen(); size_t output_strings = input_strings - num_strings_remove; size_t output_symbols = input_symbols - num_symbols_remove; pBWTWriter->writeHeader(output_strings, output_symbols, BWF_NOFMI); // Discard the header of the sai size_t discard1, discard2; pSAIReader->readHeader(discard1, discard2); // Write the header of the SAI which is just the number of strings and elements in the SAI pSAIWriter->writeHeader(output_strings, output_strings); // We need to fix the IDs in the SAI. We do this by tracking // the number of IDs that are removed that are lower than a given // id. std::vector id_vector(pBWTInternal->getNumStrings(), 0); // Calculate and write the actual string // The gap array marks the symbols that should be removed. We // iterate over the gap array, if the value is zero, we output // the BWT symbol. Otherwise we skip the number of elements // indicated by the gap. size_t num_bwt_wrote = 0; size_t num_sai_wrote = 0; size_t i = 0; while(i < input_symbols) { size_t v = pGapArray->get(i); // If v is zero we output a single symbol, otherwise // we skip v elements. size_t num_to_read = (v == 0) ? 1 : v; for(size_t j = 0; j < num_to_read; ++j) { char b = pBWTInternal->getChar(i); if(b == '$') { SAElem e = pSAIReader->readElem(); // This element of the SAI will be removed, // increment the id vector so we can correct // the indices later if(v > 0) { id_vector[e.getID()]++; } } // output if(v == 0) { pBWTWriter->writeBWChar(b); assert(b != '\n'); ++num_bwt_wrote; } } i += num_to_read; } if(num_bwt_wrote != output_symbols) { printf("Error expected to write %zu symbols, actually wrote %zu\n", output_symbols, num_bwt_wrote); assert(num_bwt_wrote == output_symbols); } // Finalize the BWT disk file pBWTWriter->finalize(); // Accumulate the counts for each id int prev = 0; for(size_t i = 0; i < id_vector.size(); ++i) { id_vector[i] += prev; prev = id_vector[i]; } // Read the SAI file again, writing out the // corrected IDs that are not marked for removal delete pSAIReader; pSAIReader = new SAReader(sai_inname); pSAIReader->readHeader(discard1, discard2); for(size_t i = 0; i < input_strings; ++i) { SAElem e = pSAIReader->readElem(); uint64_t id = e.getID(); int prev_count = (id > 0) ? id_vector[id - 1] : 0; int count = id_vector[id]; if(count == prev_count) { // the current element should be output, it wasn't marked for removal id -= count; e.setID(id); pSAIWriter->writeElem(e); ++num_sai_wrote; } } assert(num_sai_wrote == output_strings); delete pSAIReader; delete pSAIWriter; delete pBWTWriter; } // std::string makeTempName(const std::string& prefix, int id, const std::string& extension) { std::stringstream ss; ss << prefix << ".temp-" << id << extension << (USE_GZ ? ".gz" : ""); return ss.str(); } // std::string makeFilename(const std::string& prefix, const std::string& extension) { std::stringstream ss; ss << prefix << extension << (USE_GZ ? ".gz" : ""); return ss.str(); } ================================================ FILE: src/SGA/SuffixTools/BWTDiskConstruction.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTDiskConstruction - Implementation of the // BWT disk construction algorithm of Ferragina, // Gagie, Manzini. See Lightweight Data Indexing // and Compression in External Memory // // This implementation does not strictly follow // their method but is modified to handle // large numbers of short strings #ifndef BWTDISKCONSTRUCTION_H #define BWTDISKCONSTRUCTION_H #include "SuffixArray.h" #include "BWT.h" struct BWTDiskParameters { std::string inFile; std::string outPrefix; std::string bwtExtension; std::string saiExtension; size_t numReadsPerBatch; int numThreads; int storageLevel; bool bBuildReverse; bool bUseBCR; }; // Construct the burrows-wheeler transform of reads in in_filename // using the disk storage algorithm void buildBWTDisk(const BWTDiskParameters& parameters); // Merge the indices for the readsFile1 and readsFile2 void mergeIndependentIndices(const std::string& readsFile1, const std::string& readsFile2, const std::string& outPrefix, const std::string& bwt_extension, const std::string& sai_extension, bool doReverse, int numThreads, int storageLevel); // Compute new indices from allReadsFile without the reads in readsToRemove void removeReadsFromIndices(const std::string& allReadsFile, const std::string& readsToRemove, const std::string& outPrefix, const std::string& bwt_extension, const std::string& sai_extension, bool doReverse, int numThreads); // void mergeReadFiles(const std::string& readsFile1, const std::string& readsFile2, const std::string& outPrefix); #endif ================================================ FILE: src/SGA/SuffixTools/BWTIndexSet.h ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTIndexSet.h - Struct holding the different // types of index for a set of sequences. Used // to simplify the interface to some functions. // #ifndef BWTINDEXSET_H #define BWTINDEXSET_H #include "BWT.h" #include "BWTIntervalCache.h" #include "SampledSuffixArray.h" #include "PopulationIndex.h" #include "QualityTable.h" // A collection of indices. For some algorithms // all indices are not necessary so some of these // can be NULL. The algorithms will check as preconditions // which indices they need. struct BWTIndexSet { // Constructor BWTIndexSet() : pBWT(NULL), pRBWT(NULL), pCache(NULL), pSSA(NULL), pPopIdx(NULL), pQualityTable(NULL) {} // Data const BWT* pBWT; const BWT* pRBWT; const BWTIntervalCache* pCache; const SampledSuffixArray* pSSA; const PopulationIndex* pPopIdx; const QualityTable* pQualityTable; }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTInterval.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // BWTInterval - Data structures for holding and manipulating // the coordinates in a BWT/FM-index // #ifndef BWTINTERVAL_H #define BWTINTERVAL_H #include #include #include // A BWTInterval holds a pair of integers which delineate an alignment of some string // to a BWT/Suffix Array struct BWTInterval { // Functions BWTInterval() : lower(0), upper(0) {} BWTInterval(int64_t l, int64_t u) : lower(l), upper(u) {} inline bool isValid() const { return lower <= upper; } inline int64_t size() const { return upper - lower + 1; } static inline bool compare(const BWTInterval& a, const BWTInterval& b) { if(a.lower == b.lower) return a.upper < b.upper; else return a.lower < b.lower; } static inline bool equal(const BWTInterval& a, const BWTInterval& b) { return a.lower == b.lower && a.upper == b.upper; } friend std::ostream& operator<<(std::ostream& out, const BWTInterval& a) { out << a.lower << " " << a.upper; return out; } friend std::istream& operator>>(std::istream& in, BWTInterval& a) { in >> a.lower >> a.upper; return in; } void write(std::ostream& out) { out.write((char*)&lower, sizeof(lower)); out.write((char*)&upper, sizeof(upper)); } void read(std::istream& in) { in.read((char*)&lower, sizeof(lower)); in.read((char*)&upper, sizeof(upper)); } // Data int64_t lower; int64_t upper; }; // A pair of intervals, used for bidirectional searching a bwt/revbwt in lockstep struct BWTIntervalPair { // Functions BWTInterval& get(unsigned int idx) { return interval[idx]; } bool isValid() const { return interval[0].isValid() && interval[1].isValid(); } friend bool operator==(const BWTIntervalPair& a, const BWTIntervalPair& b) { return BWTInterval::equal(a.interval[0], b.interval[0]) && BWTInterval::equal(a.interval[1], b.interval[1]); } // Sort an itnerval pair by interval[0]'s lower coordinate static bool sortFirstLower(const BWTIntervalPair& a, const BWTIntervalPair& b) { return a.interval[0].lower < b.interval[0].lower; } // Sort an itnerval pair by interval[1]'s lower coordinate static bool sortSecondLower(const BWTIntervalPair& a, const BWTIntervalPair& b) { return a.interval[1].lower < b.interval[1].lower; } // I/O friend std::ostream& operator<<(std::ostream& out, const BWTIntervalPair& a) { out << a.interval[0] << " " << a.interval[1]; return out; } friend std::istream& operator>>(std::istream& in, BWTIntervalPair& a) { in >> a.interval[0] >> a.interval[1]; return in; } // Data BWTInterval interval[2]; }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTIntervalCache.cpp ================================================ ///----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTIntervalCache - Array of cached bwt intervals for all // substrings of a fixed length // #include "BWTIntervalCache.h" #include "BWTAlgorithms.h" BWTIntervalCache::BWTIntervalCache(size_t k, const BWT* pBWT) : m_kmer(k) { build(pBWT); } // Build the table for the given bwt void BWTIntervalCache::build(const BWT* pBWT) { // Restrict the kmer parameter to something reasonable // so we don't try to allocate an absurdly large array assert(m_kmer <= 12); size_t num_entries = 1 << 2*m_kmer; m_table.resize(num_entries); //debug //std::cerr << "num entries " << num_entries << " m_kmer " << m_kmer << std::endl; // Construct the table for(size_t i = 0; i < num_entries; ++i) { std::string w = int2string(i); //debug //std::cerr << w << std::endl; //printf("i: %zu w: %s o: %zu\n", i, w.c_str(), string2int(w)); BWTInterval interval = BWTAlgorithms::findInterval(pBWT, w); m_table[i] = interval; } //debug //std::cerr << "m_table.size() " << m_table.size() << std::endl; } // Construct the corresponding string for integer i std::string BWTIntervalCache::int2string(size_t i) const { std::string out(m_kmer, 'A'); for(size_t k = 0; k < m_kmer; ++k) { // Get the character as position k (0 = left-most position) size_t code = (i >> 2*(m_kmer - k - 1)) & 3; char b = DNA_ALPHABET::getBase(code); out[k] = b; } return out; } // Return the length of the cached strings size_t BWTIntervalCache::getCachedLength() const { return m_kmer; } ================================================ FILE: src/SGA/SuffixTools/BWTIntervalCache.h ================================================ ///----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTIntervalCache - Array of cached bwt intervals for all // substrings of a fixed length // #ifndef BWTINTERVAL_CACHE_H #define BWTINTERVAL_CACHE_H #include "BWT.h" #include "BWTInterval.h" class BWTIntervalCache { public: // BWTIntervalCache(size_t k, const BWT* pBWT); // Look up the bwt interval for the given string inline BWTInterval lookup(const char* w) const { // Convert the string to an integer index in the lookup table size_t idx = str2int(w); return m_table[idx]; } // size_t getCachedLength() const; private: // Build the array for the given BWt void build(const BWT* pBWT); // Map a string to an integer // Precondition: w must be at least m_kmer symbols long inline size_t str2int(const char* w) const { size_t out = 0; for(size_t k = 0; k < m_kmer; ++k) { assert(w[k] != '$'); out |= DNA_ALPHABET::getBaseRank(w[k]) << 2*(m_kmer - k - 1); } return out; } // Map an integer to a string std::string int2string(size_t i) const; size_t m_kmer; std::vector m_table; }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTReader.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTReader - Abstract class for reading a BWT file // #include "BWTReader.h" #include "BWTReaderBinary.h" #include "BWTReaderAscii.h" // IBWTReader* BWTReader::createReader(const std::string& filename) { return new BWTReaderBinary(filename); } ================================================ FILE: src/SGA/SuffixTools/BWTReader.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTReader - Abstract class for reading a BWT file // #ifndef BWTREADER_H #define BWTREADER_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" #include "EncodedString.h" enum BWIOStage { IOS_NONE, IOS_HEADER, IOS_BWSTR, IOS_PC, IOS_OCC, IOS_DONE }; enum BWFlag { BWF_NOFMI = 0, BWF_HASFMI }; const uint16_t RLBWT_FILE_MAGIC = 0xCACA; const uint16_t BWT_FILE_MAGIC = 0xEFEF; class RLBWT; class IBWTReader { public: IBWTReader() {} IBWTReader(const std::string& /*filename*/) {} virtual ~IBWTReader() {} // virtual void read(RLBWT* pRLBWT) = 0; virtual void readHeader(size_t& num_strings, size_t& num_symbols, BWFlag& flag) = 0; virtual char readBWChar() = 0; }; namespace BWTReader { IBWTReader* createReader(const std::string& filename); }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTReaderAscii.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTReaderAsciiAscii - Read a BWT file from disk // #include "BWTReaderAscii.h" #include "SBWT.h" #include "RLBWT.h" // BWTReaderAscii::BWTReaderAscii(const std::string& filename) : m_stage(IOS_NONE) { m_pReader = createReader(filename); m_stage = IOS_HEADER; } // BWTReaderAscii::~BWTReaderAscii() { delete m_pReader; } void BWTReaderAscii::read(SBWT* pBWT) { size_t n; BWFlag flag; readHeader(pBWT->m_numStrings, n, flag); pBWT->m_bwStr.resize(n); readBWStr(pBWT->m_bwStr); // Reading the occurrence array from disk is deprecated // we ignore it if it is present } void BWTReaderAscii::read(RLBWT* pRLBWT) { size_t n; BWFlag flag; readHeader(pRLBWT->m_numStrings, n, flag); bool done = false; while(!done) { char b = readBWChar(); if(b != '\n') { pRLBWT->append(b); } else { done = false; break; } } } // void BWTReaderAscii::readHeader(size_t& num_strings, size_t& num_symbols, BWFlag& flag) { assert(m_stage == IOS_HEADER); uint16_t magic_number; // Ensure the file format is sane *m_pReader >> magic_number; if(magic_number != BWT_FILE_MAGIC) { std::cerr << "BWT file is not properly formatted, aborting\n"; exit(EXIT_FAILURE); } *m_pReader >> num_strings; *m_pReader >> num_symbols; int temp; *m_pReader >> temp; flag = static_cast(temp); // We must explicitly set the stream // to the start of the BWStr portion of // the file. The above extraction // does not discard the trailing newline // so we do it here m_pReader->get(); m_stage = IOS_BWSTR; } // void BWTReaderAscii::readBWStr(BWTString& out_str) { assert(m_stage == IOS_BWSTR); char b; size_t idx = 0; while(1) { m_pReader->get(b); if(b != '\n') out_str.set(idx++, b); else break; } assert(idx == out_str.length()); m_stage = IOS_PC; } // Read a single base from the BWStr char BWTReaderAscii::readBWChar() { assert(m_stage == IOS_BWSTR); char b; m_pReader->get(b); if(b == '\n') m_stage = IOS_PC; return b; } // void BWTReaderAscii::readPred(AlphaCount64& out_pc) { assert(m_stage == IOS_PC); *m_pReader >> out_pc; m_stage = IOS_OCC; } // void BWTReaderAscii::readOccurrence(Occurrence& out_occ) { assert(m_stage == IOS_OCC); *m_pReader >> out_occ; m_stage = IOS_DONE; } ================================================ FILE: src/SGA/SuffixTools/BWTReaderAscii.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTReaderAsciiAscii.h - Read a plain-text BWT file from disk // #ifndef BWTREADERASCII_H #define BWTREADERASCII_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" #include "EncodedString.h" #include "BWTReader.h" class SBWT; class RLBWT; class BWTReaderAscii : public IBWTReader { public: BWTReaderAscii(const std::string& filename); ~BWTReaderAscii(); // void read(SBWT* pBWT); void read(RLBWT* pRLBWT); void readHeader(size_t& num_strings, size_t& num_symbols, BWFlag& flag); void readBWStr(BWTString& out_str); char readBWChar(); void readPred(AlphaCount64& out_pc); void readOccurrence(Occurrence& out_icc); private: std::istream* m_pReader; BWIOStage m_stage; }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTReaderBinary.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RLBWTReaderBinary - Read a run length encoded BWT file from disk // #include "BWTReaderBinary.h" #include "SBWT.h" #include "RLBWT.h" // BWTReaderBinary::BWTReaderBinary(const std::string& filename) : m_stage(IOS_NONE), m_numRunsOnDisk(0), m_numRunsRead(0) { m_pReader = createReader(filename, std::ios::binary); m_stage = IOS_HEADER; } // BWTReaderBinary::~BWTReaderBinary() { delete m_pReader; } void BWTReaderBinary::read(RLBWT* pRLBWT) { BWFlag flag; readHeader(pRLBWT->m_numStrings, pRLBWT->m_numSymbols, flag); assert(m_numRunsOnDisk > 0); readRuns(pRLBWT->m_rlString, m_numRunsOnDisk); //pRLBWT->printInfo(); //pRLBWT->print(); } void BWTReaderBinary::read(SBWT* pSBWT) { BWFlag flag; size_t numSymbols; readHeader(pSBWT->m_numStrings, numSymbols, flag); size_t numRead = 0; pSBWT->m_bwStr.resize(numSymbols); while(numRead < numSymbols) { char b = readBWChar(); pSBWT->m_bwStr.set(numRead++, b); } assert(m_numRunsOnDisk > 0); } // void BWTReaderBinary::readHeader(size_t& num_strings, size_t& num_symbols, BWFlag& flag) { assert(m_stage == IOS_HEADER); uint16_t magic_number; m_pReader->read(reinterpret_cast(&magic_number), sizeof(magic_number)); if(magic_number != RLBWT_FILE_MAGIC) { std::cerr << "BWT file is not properly formatted, aborting\n"; exit(EXIT_FAILURE); } m_pReader->read(reinterpret_cast(&num_strings), sizeof(num_strings)); m_pReader->read(reinterpret_cast(&num_symbols), sizeof(num_symbols)); m_pReader->read(reinterpret_cast(&m_numRunsOnDisk), sizeof(m_numRunsOnDisk)); m_pReader->read(reinterpret_cast(&flag), sizeof(flag)); //std::cout << "Read magic: " << magic_number << "\n"; //std::cout << "strings:" << num_strings << "\n"; //std::cout << "symbols: " << num_symbols << "\n"; //std::cout << "runs: " << m_numRunsOnDisk << "\n"; m_stage = IOS_BWSTR; } void BWTReaderBinary::readRuns(RLVector& out, size_t numRuns) { out.resize(numRuns); m_pReader->read(reinterpret_cast(&out[0]), numRuns*sizeof(RLUnit)); m_numRunsRead = numRuns; } // Read a single base from the BWStr // The BWT is stored as runs on disk, so this class keeps // an internal buffer of a single run and emits characters from this buffer // and performs reads as necessary. If all the runs have been read, emit // a newline character to signal the end of the BWT char BWTReaderBinary::readBWChar() { assert(m_stage == IOS_BWSTR); if(m_currRun.isEmpty()) { // All runs have been read and emitted, return the end marker if(m_numRunsRead == m_numRunsOnDisk) return '\n'; // Read one run from disk m_pReader->read(reinterpret_cast(&m_currRun), sizeof(RLUnit)); ++m_numRunsRead; } // Decrement the current run and emit its symbol m_currRun.decrementCount(); return m_currRun.getChar(); } ================================================ FILE: src/SGA/SuffixTools/BWTReaderBinary.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTWriterBinary - Read a run length encoded binary BWT file from disk // #ifndef BWTREADERBINARY_H #define BWTREADERBINARY_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" #include "EncodedString.h" #include "BWTReader.h" #include "RLBWT.h" class SBWT; class RLBWT; class BWTReaderBinary : public IBWTReader { public: BWTReaderBinary(const std::string& filename); virtual ~BWTReaderBinary(); // virtual void read(RLBWT* pRLBWT); virtual void read(SBWT* pSBWT); virtual void readHeader(size_t& num_strings, size_t& num_symbols, BWFlag& flag); virtual char readBWChar(); virtual void readRuns(RLVector& out, size_t numRuns); private: std::istream* m_pReader; BWIOStage m_stage; RLUnit m_currRun; size_t m_numRunsOnDisk; size_t m_numRunsRead; }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTTraverse.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTTraverse - traverse a bwt, outputting all // strings that are length greater than some threshold // #include "BWTTraverse.h" void BWTTraverse::extract(const BWT* pBWT, unsigned int len) { // Keep a stack of the elements to visit and // a string which is the reverse string corresponding // to the current stack elements TraverseStack stack; std::string rev_str; size_t iter_count = 0; size_t output_count = 0; for(size_t i = 0; i < DNA_ALPHABET_SIZE; ++i) { char base_char = ALPHABET[i]; // Initialize the stack and rev_str BWTInterval range; BWTAlgorithms::initInterval(range, base_char, pBWT); AlphaCount ext = BWTAlgorithms::getExtCount(range, pBWT); stack.push(TraverseElem(range, ext)); rev_str.append(1, base_char); while(!stack.empty()) { ++iter_count; TraverseElem& curr = stack.top(); curr.goNext(); bool doPop = !curr.isValid(); // If rev_str is long enough output it and stop the traversal at this depth if(rev_str.length() == len) { if(output_count % 1000000 == 0) std::cerr << "output: " << output_count << "\n"; doPop = true; size_t multiplicity = curr.getRange().size(); printf(">%zu %u %zu\n%s\n", output_count, len, multiplicity, reverse(rev_str).c_str()); ++output_count; } if(doPop) { // Remove one char from the end of the string // and one element from the stack rev_str.erase(rev_str.length() - 1, 1); stack.pop(); } else { // Traverse one level deeper char b = curr.getCurrChar(); BWTInterval subrange = curr.getRange(); BWTAlgorithms::updateInterval(subrange, b, pBWT); AlphaCount subext = BWTAlgorithms::getExtCount(subrange, pBWT); stack.push(TraverseElem(subrange, subext)); rev_str.append(1, b); } } } std::cerr << "Num output: " << output_count << " num iterations: " << iter_count << " count/len: " << (double)iter_count / len << "\n"; } void BWTTraverse::extractSG(const BWT* pBWT, const BWT* pRevBWT, const unsigned int len) { WARN_ONCE("Skipping bwt[0]"); // Keep a bool vector marking which entries in pBWT have been visited size_t n_elems = pBWT->getBWLen(); bool_vec visited(n_elems, false); size_t count = 0; size_t currIdx = 1; while(currIdx < n_elems) { // Invariant: currIdx is the index into pBWT that is the lowest index that has not been visited // Left-extend the entry at currIdx into a string of length len std::string str; str.reserve(len); // Get the first character of the suffix starting at this position char first = pBWT->getF(currIdx); str += first; BWTInterval range(currIdx, currIdx); while(str.length() < len) { char b = pBWT->getChar(range.lower); if(b == '$') break; str += b; BWTAlgorithms::updateInterval(range, b, pBWT); } // The string was built backwards, reverse it str = reverse(str); if(str.length() < len) { visited[currIdx] = true; } else if(!visited[range.lower]) { markVisited(str, visited, pBWT); //std::cout << currIdx << " interval: " << range << " string: " << str << "\n"; extendLeft(len, str, visited, pBWT, pRevBWT); extendRight(len, str, visited, pBWT, pRevBWT, false); printf(">%zu %zu 0\n%s\n", count++, str.length(), str.c_str()); } currIdx++; } } // Extend the sequence by finding a consensus right-ward extension base void BWTTraverse::extendRight(const unsigned int len, std::string& str, bool_vec& visited, const BWT* pBWT, const BWT* pRevBWT, bool isReverse) { // Extract the last len characters unsigned int overlapLen = len - 1; // Initialize the range for str BWTIntervalPair ranges = BWTAlgorithms::findIntervalPair(pBWT, pRevBWT, str); bool done = false; while(!done) { AlphaCount ext_counts = BWTAlgorithms::getExtCount(ranges.interval[1], pRevBWT); if(ext_counts.hasUniqueDNAChar()) { char b = ext_counts.getUniqueDNAChar(); // There is a unique extension from the seed sequence to B // Ensure that the reverse is true and that the sequence we are extending to, extends to this one std::string joined = str + b; std::string back_search = suffix(joined, len); // Get the count of bases back to the ending sequence of seed // We do this in the opposite direction of extension AlphaCount back_count = BWTAlgorithms::calculateExactExtensions(overlapLen, reverse(back_search), pRevBWT, pBWT); if(back_count.hasUniqueDNAChar()) { // Assert back is the character we are expecting assert(back_count.getUniqueDNAChar() == str[str.length() - len]); str = joined; // mark the newly visited l-mers if(!isReverse) { markVisited(back_search, visited, pBWT); } else { markVisited(reverse(back_search), visited, pRevBWT); } BWTAlgorithms::updateBothR(ranges, b, pRevBWT); } else { done = true; } } else { done = true; } } } // Extend the string to the left by reversing it and calling extendRight void BWTTraverse::extendLeft(const unsigned int len, std::string& str, bool_vec& visited, const BWT* pBWT, const BWT* pRevBWT) { str = reverse(str); extendRight(len, str, visited, pRevBWT, pBWT, true); str = reverse(str); } void BWTTraverse::markVisited(const std::string& str, bool_vec& visited, const BWT* pBWT) { BWTInterval range = BWTAlgorithms::findInterval(pBWT, str); for(int64_t i = range.lower; i <= range.upper; ++i) { assert(i >= 0 && i < (int64_t)visited.size()); visited[i] = true; } } ================================================ FILE: src/SGA/SuffixTools/BWTTraverse.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // BWTTraverse - bwt traversal algorithms // #ifndef BWTTRAVERSE_H #define BWTTRAVERSE_H #include "BWT.h" #include "BWTAlgorithms.h" #include struct TraverseElem { // The current index is set to 0 and we iterate forward until we find the first valid (non-zero) entry // This skips elem 0 which is the $ TraverseElem(const BWTInterval& i, AlphaCount ac) : base_range(i), desc(ac), currIdx(0) { } // Return true if the current position is valid bool isValid() const { return currIdx < ALPHABET_SIZE; } // Return the current char char getCurrChar() const { assert(isValid()); return desc.getBase(currIdx); } // Return the range const BWTInterval& getRange() const { return base_range; } // go to the next character with a non-zero count // this automatically skips index 0, which we want since its the '$' character void goNext() { do { ++currIdx; } while(currIdx < ALPHABET_SIZE && desc.getByIdx(currIdx) == 0); } // The ranges in the BWT that correspond to the string leading up to this element BWTInterval base_range; // The counts of each base {A,C,G,T} that are left-extensions of this range AlphaCount desc; // The index of the current base being processed int currIdx; }; typedef std::stack TraverseStack; typedef std::vector bool_vec; namespace BWTTraverse { // Extract all strings of length len from the BWT void extract(const BWT* pBWT, unsigned int len); // Extract the string graph which minimum component length len from the BWT void extractSG(const BWT* pBWT, const BWT* pRevBWT, const unsigned int len); void extendLeft(const unsigned int len, std::string& str, bool_vec& visited, const BWT* pBWT, const BWT* pRevBWT); void extendRight(const unsigned int len, std::string& str, bool_vec& visited, const BWT* pBWT, const BWT* pRevBWT, bool isReverse); void markVisited(const std::string& str, bool_vec& visited, const BWT* pBWT); }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTWriter.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTWriter - Abstract class for writing a BWT file to disk // #include "BWTWriter.h" #include "BWTWriterBinary.h" #include "BWTWriterAscii.h" // void IBWTWriter::write(const SuffixArray* pSA, const ReadTable* pRT) { size_t num_symbols = pSA->getSize(); size_t num_strings = pSA->getNumStrings(); writeHeader(num_strings, num_symbols, BWF_NOFMI); for(size_t i = 0; i < num_symbols; ++i) { SAElem saElem = pSA->get(i); const SeqItem& si = pRT->getRead(saElem.getID()); // Get the position of the start of the suffix uint64_t f_pos = saElem.getPos(); uint64_t l_pos = (f_pos == 0) ? si.seq.length() : f_pos - 1; char b = (l_pos == si.seq.length()) ? '$' : si.seq.get(l_pos); writeBWChar(b); } finalize(); } // IBWTWriter* BWTWriter::createWriter(const std::string& filename) { return new BWTWriterBinary(filename); } ================================================ FILE: src/SGA/SuffixTools/BWTWriter.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTWriter - Abstract class for writing a BWT file to disk // #ifndef BWTWRITER_H #define BWTWRITER_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" #include "BWTReader.h" #include "EncodedString.h" #include "SuffixArray.h" class IBWTWriter { public: IBWTWriter() {} IBWTWriter(const std::string& /*filename*/) {} virtual ~IBWTWriter() {} // void write(const SuffixArray* pSA, const ReadTable* pRT); virtual void writeHeader(const size_t& num_strings, const size_t& num_symbols, const BWFlag& flag) = 0; virtual void writeBWChar(char b) = 0; virtual void finalize() = 0; }; namespace BWTWriter { IBWTWriter* createWriter(const std::string& filename); } #endif ================================================ FILE: src/SGA/SuffixTools/BWTWriterAscii.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTWriterAscii - Write a BWT file to disk // #include "BWTWriterAscii.h" #include "SBWT.h" #include "RLBWT.h" // BWTWriterAscii::BWTWriterAscii(const std::string& filename) : m_stage(IOS_NONE) { m_pWriter = createWriter(filename); m_stage = IOS_HEADER; } // BWTWriterAscii::~BWTWriterAscii() { delete m_pWriter; } void BWTWriterAscii::write(const SBWT* pBWT) { writeHeader(pBWT->m_numStrings, pBWT->m_bwStr.length(), BWF_HASFMI); writeBWStr(pBWT->m_bwStr); writePred(pBWT->m_predCount); writeOccurrence(pBWT->m_occurrence); } void BWTWriterAscii::write(const RLBWT* pRLBWT) { writeHeader(pRLBWT->m_numStrings, pRLBWT->m_numSymbols, BWF_NOFMI); size_t numRuns = pRLBWT->getNumRuns(); for(size_t i = 0; i < numRuns; ++i) { const RLUnit& unit = pRLBWT->m_rlString[i]; char symbol = unit.getChar(); size_t length = unit.getCount(); for(size_t j = 0; j < length; ++j) writeBWChar(symbol); } // Finalize the string writeBWChar('\n'); } // void BWTWriterAscii::writeHeader(const size_t& num_strings, const size_t& num_symbols, const BWFlag& flag) { assert(m_stage == IOS_HEADER); *m_pWriter << BWT_FILE_MAGIC << "\n"; *m_pWriter << num_strings << "\n"; *m_pWriter << num_symbols << "\n"; int temp = flag; *m_pWriter << temp << "\n"; m_stage = IOS_BWSTR; } // void BWTWriterAscii::writeBWStr(const BWTString& str) { assert(m_stage == IOS_BWSTR); size_t n = str.length(); for(size_t i = 0; i < n; ++i) *m_pWriter << str.get(i); finalize(); } // Write a single character of the BWStr // If the char is '\n' we are finished void BWTWriterAscii::writeBWChar(char b) { m_pWriter->put(b); } void BWTWriterAscii::finalize() { m_pWriter->put('\n'); m_stage = IOS_PC; } // void BWTWriterAscii::writePred(const AlphaCount64& pc) { assert(m_stage == IOS_PC); *m_pWriter << pc << "\n"; m_stage = IOS_OCC; } // void BWTWriterAscii::writeOccurrence(const Occurrence& occ) { assert(m_stage == IOS_OCC); *m_pWriter << occ; // delibrately no newline m_stage = IOS_DONE; } ================================================ FILE: src/SGA/SuffixTools/BWTWriterAscii.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTWriterAsciiAscii - Write a BWT to a plain text file // #ifndef BWTWRITERASCII_H #define BWTWRITERASCII_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" #include "BWTWriter.h" #include "EncodedString.h" #include "SuffixArray.h" class SBWT; class RLBWT; class BWTWriterAscii : public IBWTWriter { public: BWTWriterAscii(const std::string& filename); virtual ~BWTWriterAscii(); // virtual void write(const RLBWT* pRLBWT); virtual void writeHeader(const size_t& num_strings, const size_t& num_symbols, const BWFlag& flag); virtual void writeBWChar(char b); virtual void finalize(); void write(const SBWT* pBWT); void writeBWStr(const BWTString& str); void writePred(const AlphaCount64& pc); void writeOccurrence(const Occurrence& icc); private: std::ostream* m_pWriter; BWIOStage m_stage; }; #endif ================================================ FILE: src/SGA/SuffixTools/BWTWriterBinary.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTWriterBinary - Write a run-length encoded BWT to a binary file // #include "BWTWriterBinary.h" #include "SBWT.h" #include "RLBWT.h" // BWTWriterBinary::BWTWriterBinary(const std::string& filename) : m_numRuns(0), m_runFileOffset(0), m_stage(IOS_NONE) { m_pWriter = createWriter(filename, std::ios::out | std::ios::binary); m_stage = IOS_HEADER; } // BWTWriterBinary::~BWTWriterBinary() { assert(m_stage == IOS_DONE); delete m_pWriter; } // void BWTWriterBinary::writeHeader(const size_t& num_strings, const size_t& num_symbols, const BWFlag& flag) { assert(m_stage == IOS_HEADER); m_pWriter->write(reinterpret_cast(&RLBWT_FILE_MAGIC), sizeof(RLBWT_FILE_MAGIC)); m_pWriter->write(reinterpret_cast(&num_strings), sizeof(num_strings)); m_pWriter->write(reinterpret_cast(&num_symbols), sizeof(num_symbols)); // Here we do not know the number of runs that are going to be written to the file // so we save the offset in the file and write a dummy value. After the bwt string // has been written, we return here and fill in the correct value m_runFileOffset = m_pWriter->tellp(); m_numRuns = 0; m_pWriter->write(reinterpret_cast(&m_numRuns), sizeof(m_numRuns)); assert(flag == BWF_NOFMI); m_pWriter->write(reinterpret_cast(&flag), sizeof(flag)); m_stage = IOS_BWSTR; } // Write a single character of the BWStr // If the char is '\n' we are finished void BWTWriterBinary::writeBWChar(char b) { if(m_currRun.isInitialized()) { if(m_currRun.getChar() == b && !m_currRun.isFull()) { m_currRun.incrementCount(); } else { // Write out the old run and start a new one assert(m_currRun.isInitialized()); writeRun(m_currRun); m_currRun = RLUnit(b); } } else { // Start a new run m_currRun = RLUnit(b); } } // void BWTWriterBinary::writeRun(RLUnit& unit) { //std::cout << "Writing " << unit.getChar() << "," << (int)unit.getCount() << "\n"; m_pWriter->write(reinterpret_cast(&unit.data), sizeof(unit.data)); ++m_numRuns; } // write the final run to the stream and fill in the number of runs void BWTWriterBinary::finalize() { // JS Bugfix 24/05/12 // Allow empty BWTs to be written out if(m_currRun.isInitialized()) writeRun(m_currRun); m_pWriter->seekp(m_runFileOffset); m_pWriter->write(reinterpret_cast(&m_numRuns), sizeof(m_numRuns)); m_pWriter->seekp(std::ios_base::end); m_stage = IOS_DONE; } ================================================ FILE: src/SGA/SuffixTools/BWTWriterBinary.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTWriterBinary - Write a run-length encoded BWT to a binary file // #ifndef BWTWRITERBINARY_H #define BWTWRITERBINARY_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" #include "BWTWriter.h" #include "BWTReaderBinary.h" #include "EncodedString.h" #include "RLBWT.h" class SBWT; class RLBWT; class BWTWriterBinary : public IBWTWriter { public: BWTWriterBinary(const std::string& filename); virtual ~BWTWriterBinary(); // Write an RLBWT file directly from a suffix array and read table virtual void writeHeader(const size_t& num_strings, const size_t& num_symbols, const BWFlag& flag); virtual void writeBWChar(char b); virtual void finalize(); // this method must be called after writing the BW string private: void writeRun(RLUnit& unit); std::ostream* m_pWriter; size_t m_numRuns; std::streampos m_runFileOffset; RLUnit m_currRun; BWIOStage m_stage; }; #endif ================================================ FILE: src/SGA/SuffixTools/FMMarkers.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // FMMarkers - Marker classes used in the FM-index // implementation // #ifndef FMMARKERS_H #define FMMARKERS_H // LargeMarker - To allow random access to the // BWT symbols and implement the occurrence array // we keep a vector of symbol counts every D1 symbols. // These counts are the absolute number of times each // symbol has been seen up to that point. // struct LargeMarker { LargeMarker() : unitIndex(0) {} // Calculate the actual position in the uncompressed BWT of this marker // This is the number of symbols preceding this marker inline size_t getActualPosition() const { return counts.getSum(); } void print() const { std::cout << "Large marker actual pos: " << getActualPosition() << "\n"; std::cout << "Marker unit index: " << unitIndex << "\n"; std::cout << "Marker counts: "; for(int i = 0; i < ALPHABET_SIZE; ++i) { std::cout << (int)counts.getByIdx(i) << " "; } std::cout << "\n"; } // Returns true if the data in the markers is identical bool operator==(const LargeMarker& rhs) { for(size_t i = 0; i < ALPHABET_SIZE; ++i) { if(counts.getByIdx(i) != rhs.counts.getByIdx(i)) return false; } return unitIndex == rhs.unitIndex; } // The number of times each symbol has been seen up to this marker AlphaCount64 counts; // The index in the RLVector of the run that starts after // this marker. That is, if C = getActualPosition(), then // the run containing the B[C] is at unitIndex. This is not necessary // a valid index if there is a marker after the last symbol in the BWT size_t unitIndex; }; typedef std::vector LargeMarkerVector; // SmallMarker - Small markers contain the counts // within an individual block of the BWT. In other words // the small marker contains the count for the last D2 symbols // struct SmallMarker { SmallMarker() : unitCount(0) {} // Calculate the actual position in the uncompressed BWT of this marker // This is the number of symbols preceding this marker inline size_t getCountSum() const { return counts.getSum(); } void print() const { for(int i = 0; i < ALPHABET_SIZE; ++i) { std::cout << (int)counts.getByIdx(i) << " "; } std::cout << "\n"; } // The number of times each symbol has been seen up to this marker AlphaCount16 counts; // The number of RL units in this block uint16_t unitCount; }; typedef std::vector SmallMarkerVector; #endif ================================================ FILE: src/SGA/SuffixTools/GapArray.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // GapArray - Data structure and functions used to count // the number of times a suffix of a given rank occurs in a data set // #include "GapArray.h" #include "SparseGapArray.h" #if 0 // SimpleGapArray SimpleGapArray::SimpleGapArray() { } // void SimpleGapArray::resize(size_t n) { m_data.resize(n); } // void SimpleGapArray::increment(size_t i) { static size_t max_gap_count = std::numeric_limits::max(); assert(i < m_data.size()); assert(m_data[i] < max_gap_count); ++m_data[i]; } // size_t SimpleGapArray::get(size_t i) const { return m_data[i]; } // size_t SimpleGapArray::size() const { return m_data.size(); } #endif // Construct a gap array for the given underlying storage storage GapArray* createGapArray(int storage) { switch(storage) { case 1: return new SparseGapArray1; case 4: return new SparseGapArray4; case 8: return new SparseGapArray8; case 16: return new SparseGapArray16; case 32: return new SparseGapArray32; default: { std::cerr << "Invalid gap array storage parameter: " << storage << "\n"; exit(1); } } } // Increment the gap array for each suffix of seq. Not thread safe. void updateGapArray(const DNAString& w, const BWT* pBWTInternal, GapArray* pGapArray) { (void)w; (void)pBWTInternal; (void)pGapArray; assert(false); #if 0 size_t l = w.length(); int i = l - 1; // Compute the rank of the last character of seq. We consider $ to be implicitly // terminated by a $ character. The first rank calculated is for this and it is given // by the C(a) array in BWTInternal int64_t rank = pBWTInternal->getPC('$'); // always zero pGapArray->incrementSerial(rank); // Compute the starting rank for the last symbol of w char c = w.get(i); rank = pBWTInternal->getPC(c); pGapArray->incrementSerial(rank); --i; // Iteratively compute the remaining ranks while(i >= 0) { char c = w.get(i); rank = pBWTInternal->getPC(c) + pBWTInternal->getOcc(c, rank - 1); pGapArray->incrementSerial(rank); --i; } #endif } // void analyzeGapArray(GapArray* pGapArray) { size_t thresh_8 = 255; size_t thresh_16 = 65535; size_t count_8 = 0; size_t count_16 = 0; size_t count_0 = 0; size_t count_1 = 0; size_t count_2 = 0; size_t count_4 = 0; for(size_t i = 0; i < pGapArray->size(); ++i) { size_t c = pGapArray->get(i); printf("GA\t%zu\t%zu\n", i, c); if(c >= thresh_8) ++count_8; if(c >= thresh_16) ++count_16; if(c == 0) ++count_0; if(c == 1) ++count_1; if(c == 2) ++count_2; if(c >= 16) ++count_4; } printf("Num >= %zu: %zu\n", thresh_8, count_8); printf("Num >= %zu: %zu\n", thresh_16, count_16); printf("Num >= 16: %zu\n", count_4); printf("Num == 0: %zu\n", count_0); printf("Num == 1: %zu\n", count_1); printf("Num == 2: %zu\n", count_2); } ================================================ FILE: src/SGA/SuffixTools/GapArray.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // GapArray - Data structure and functions used to count // the number of times a suffix of a given rank occurs in a data set // #ifndef GAPARRAY_H #define GAPARRAY_H #include #include "BWT.h" #include "DNAString.h" // Abstract class for GapArrays class GapArray { public: GapArray() {} virtual ~GapArray() {} virtual void resize(size_t n) = 0; // Attempt to increment the value in the gap array // Call can fail in which case the updates must be serialized // through the call to incrementOverflowSerial virtual bool attemptBaseIncrement(size_t i) = 0; // Update the overflow array of the gap array. This call // is not threadsafe. virtual void incrementOverflowSerial(size_t i) = 0; virtual size_t get(size_t i) const = 0; virtual size_t size() const = 0; }; #if 0 // The simplest representation of a gap array is a vector // of integers. This has a deterministic size // and O(1) increment/get but in most cases will // use (much) more storage than the SparseGapArray since most gap // counts will be very low (<< INT_MAX). See also SparseGapArray.h class SimpleGapArray : public GapArray { public: SimpleGapArray(); void resize(size_t n); void increment(size_t i); size_t get(size_t i) const; size_t size() const; private: typedef uint32_t GAP_TYPE; typedef std::vector GapStorage; GapStorage m_data; }; #endif //typedef uint32_t GAP_TYPE; //typedef std::vector GapArray; GapArray* createGapArray(int storage); void updateGapArray(const DNAString& w, const BWT* pBWTInternal, GapArray* pGapArray); void analyzeGapArray(GapArray* pGapArray); #endif ================================================ FILE: src/SGA/SuffixTools/HitData.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // HitData - Data structure holding all positions of // alignment hits of a read // #ifndef HITDATA_H #define HITDATA_H #include "STCommon.h" #include "BitChar.h" #include // Deprecated struct Hit { Hit() {} Hit(size_t ri, size_t si, uint32_t qs, uint32_t l, bool tr, bool qr, int nd) : readIdx(ri), saIdx(si), qstart(qs), len(l), targetRev(tr), queryRev(qr), numDiff(nd) {} size_t readIdx; // The index in the read table size_t saIdx; // The index into the suffix array uint32_t qstart; // The query start position uint32_t len; // The overlap length bool targetRev; // Whether the target was reversed bool queryRev; // Whether the query was reversed int numDiff; // the number of differences in the match void setRev(bool tr, bool qr) { targetRev = tr; queryRev = qr; } // Sort hits by saIdx and then by overlap length friend bool operator<(const Hit& h1, const Hit& h2) { if(h1.saIdx != h2.saIdx) return h1.saIdx < h2.saIdx; else return h1.len > h2.len; } friend std::ostream& operator<<(std::ostream& out, const Hit& hit) { out << hit.readIdx << " " << hit.saIdx << " " << hit.qstart << " " << hit.len << " " << hit.targetRev << " " << hit.queryRev << " " << hit.numDiff; return out; } friend std::istream& operator>>(std::istream& in, Hit& hit) { in >> hit.readIdx >> hit.saIdx >> hit.qstart >> hit.len >> hit.targetRev >> hit.queryRev >> hit.numDiff; return in; } }; typedef std::vector HitVector; #endif ================================================ FILE: src/SGA/SuffixTools/InverseSuffixArray.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // InverseSuffixArray - The inverse of a generalized suffix array // Implemented as a Vector of Vectors // #include "InverseSuffixArray.h" // Constructor which knows the number of strings that will be in the ISA InverseSuffixArray::InverseSuffixArray(const SuffixArray& sa) { // Make a temporary vector to count the number of ranks for each string RankCountMap rcm; // Fill in the max ranks size_t n_sa = sa.getSize(); for(size_t i = 0; i < n_sa; ++i) { size_t id = sa.get(i).getID(); rcm[id]++; } for(RankCountMap::iterator iter = rcm.begin(); iter != rcm.end(); ++iter) { m_data[iter->first].resize(iter->second); } // Fill in the data for(size_t i = 0; i < n_sa; ++i) { size_t id = sa.get(i).getID(); size_t pos = sa.get(i).getPos(); m_data[id][pos] = i; } } // get the rank uint64_t InverseSuffixArray::getRank(size_t id, size_t pos) const { return m_data.find(id)->second[pos]; //return m_data[id][pos]; } // validate void InverseSuffixArray::validate() const { RankVector allRanks; for(RankVectorMap::const_iterator iter = m_data.begin(); iter != m_data.end(); ++iter) { const RankVector& rv = iter->second; for(size_t j = 0; j < rv.size(); ++j) { allRanks.push_back(rv[j]); } } std::sort(allRanks.begin(), allRanks.end()); for(size_t i = 0; i < allRanks.size(); ++i) { assert(i == allRanks[i]); } } // Print the ISA void InverseSuffixArray::print() const { for(RankVectorMap::const_iterator iter = m_data.begin(); iter != m_data.end(); ++iter) { const RankVector& rv = iter->second; for(size_t j = 0; j < rv.size(); ++j) { printf("ISA(%zu, %zu): %zu\n", (size_t)iter->first, j, (size_t)getRank(iter->first, j)); } } } ================================================ FILE: src/SGA/SuffixTools/InverseSuffixArray.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // InverseSuffixArray - The inverse of a generalized suffix array // Implemented as a Vector of Vectors // #ifndef INVERSESUFFIXARRAY_H #define INVERSESUFFIXARRAY_H #include "STCommon.h" #include "SuffixArray.h" typedef std::vector RankVector; typedef std::map RankCountMap; typedef std::map RankVectorMap; class InverseSuffixArray { public: InverseSuffixArray(const SuffixArray& sa); // uint64_t getRank(size_t id, size_t pos) const; void validate() const; void print() const; private: RankVectorMap m_data; }; #endif ================================================ FILE: src/SGA/SuffixTools/Makefile.am ================================================ noinst_LIBRARIES = libsuffixtools.a libsuffixtools_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/SeqLib libsuffixtools_a_SOURCES = STCommon.cpp STCommon.h \ STGlobals.h \ Occurrence.cpp Occurrence.h \ SuffixArray.cpp SuffixArray.h \ SuffixCompare.cpp SuffixCompare.h \ InverseSuffixArray.cpp InverseSuffixArray.h \ SACAInducedCopying.h SACAInducedCopying.cpp \ BWTAlgorithms.h BWTAlgorithms.cpp \ ## BWTDiskConstruction.h BWTDiskConstruction.cpp \ BWTReader.h BWTReader.cpp \ BWTWriter.h BWTWriter.cpp \ SAReader.h SAReader.cpp \ SAWriter.h SAWriter.cpp \ ## GapArray.h GapArray.cpp \ ## RankProcess.h RankProcess.cpp \ SBWT.h SBWT.cpp \ RLBWT.h RLBWT.cpp \ BWTReader.h BWTReader.cpp \ BWTWriter.h BWTWriter.cpp \ BWTWriterBinary.h BWTWriterBinary.cpp \ BWTReaderBinary.h BWTReaderBinary.cpp \ BWTWriterAscii.h BWTWriterAscii.cpp \ BWTReaderAscii.h BWTReaderAscii.cpp \ BWTIntervalCache.h BWTIntervalCache.cpp \ ## QuickBWT.h QuickBWT.cpp \ SampledSuffixArray.h SampledSuffixArray.cpp \ ## BWTCABauerCoxRosone.h BWTCABauerCoxRosone.cpp \ ## BWTCARopebwt.h BWTCARopebwt.cpp \ ## PopulationIndex.h PopulationIndex.cpp \ BWT.h \ BWTInterval.h \ BWTIndexSet.h \ HitData.h \ SparseGapArray.h \ FMMarkers.h \ RLUnit.h ================================================ FILE: src/SGA/SuffixTools/Makefile.in ================================================ # Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/SGA/SuffixTools ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libsuffixtools_a_AR = $(AR) $(ARFLAGS) libsuffixtools_a_LIBADD = am_libsuffixtools_a_OBJECTS = libsuffixtools_a-STCommon.$(OBJEXT) \ libsuffixtools_a-Occurrence.$(OBJEXT) \ libsuffixtools_a-SuffixArray.$(OBJEXT) \ libsuffixtools_a-SuffixCompare.$(OBJEXT) \ libsuffixtools_a-InverseSuffixArray.$(OBJEXT) \ libsuffixtools_a-SACAInducedCopying.$(OBJEXT) \ libsuffixtools_a-BWTAlgorithms.$(OBJEXT) \ libsuffixtools_a-BWTReader.$(OBJEXT) \ libsuffixtools_a-BWTWriter.$(OBJEXT) \ libsuffixtools_a-SAReader.$(OBJEXT) \ libsuffixtools_a-SAWriter.$(OBJEXT) \ libsuffixtools_a-SBWT.$(OBJEXT) \ libsuffixtools_a-RLBWT.$(OBJEXT) \ libsuffixtools_a-BWTReader.$(OBJEXT) \ libsuffixtools_a-BWTWriter.$(OBJEXT) \ libsuffixtools_a-BWTWriterBinary.$(OBJEXT) \ libsuffixtools_a-BWTReaderBinary.$(OBJEXT) \ libsuffixtools_a-BWTWriterAscii.$(OBJEXT) \ libsuffixtools_a-BWTReaderAscii.$(OBJEXT) \ libsuffixtools_a-BWTIntervalCache.$(OBJEXT) \ libsuffixtools_a-SampledSuffixArray.$(OBJEXT) libsuffixtools_a_OBJECTS = $(am_libsuffixtools_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Po \ ./$(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Po \ ./$(DEPDIR)/libsuffixtools_a-BWTReader.Po \ ./$(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Po \ ./$(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Po \ ./$(DEPDIR)/libsuffixtools_a-BWTWriter.Po \ ./$(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Po \ ./$(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Po \ ./$(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Po \ ./$(DEPDIR)/libsuffixtools_a-Occurrence.Po \ ./$(DEPDIR)/libsuffixtools_a-RLBWT.Po \ ./$(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Po \ ./$(DEPDIR)/libsuffixtools_a-SAReader.Po \ ./$(DEPDIR)/libsuffixtools_a-SAWriter.Po \ ./$(DEPDIR)/libsuffixtools_a-SBWT.Po \ ./$(DEPDIR)/libsuffixtools_a-STCommon.Po \ ./$(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Po \ ./$(DEPDIR)/libsuffixtools_a-SuffixArray.Po \ ./$(DEPDIR)/libsuffixtools_a-SuffixCompare.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsuffixtools_a_SOURCES) DIST_SOURCES = $(libsuffixtools_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libsuffixtools.a libsuffixtools_a_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/SeqLib libsuffixtools_a_SOURCES = STCommon.cpp STCommon.h \ STGlobals.h \ Occurrence.cpp Occurrence.h \ SuffixArray.cpp SuffixArray.h \ SuffixCompare.cpp SuffixCompare.h \ InverseSuffixArray.cpp InverseSuffixArray.h \ SACAInducedCopying.h SACAInducedCopying.cpp \ BWTAlgorithms.h BWTAlgorithms.cpp \ BWTReader.h BWTReader.cpp \ BWTWriter.h BWTWriter.cpp \ SAReader.h SAReader.cpp \ SAWriter.h SAWriter.cpp \ SBWT.h SBWT.cpp \ RLBWT.h RLBWT.cpp \ BWTReader.h BWTReader.cpp \ BWTWriter.h BWTWriter.cpp \ BWTWriterBinary.h BWTWriterBinary.cpp \ BWTReaderBinary.h BWTReaderBinary.cpp \ BWTWriterAscii.h BWTWriterAscii.cpp \ BWTReaderAscii.h BWTReaderAscii.cpp \ BWTIntervalCache.h BWTIntervalCache.cpp \ SampledSuffixArray.h SampledSuffixArray.cpp \ BWT.h \ BWTInterval.h \ BWTIndexSet.h \ HitData.h \ SparseGapArray.h \ FMMarkers.h \ RLUnit.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/SGA/SuffixTools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/SGA/SuffixTools/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libsuffixtools.a: $(libsuffixtools_a_OBJECTS) $(libsuffixtools_a_DEPENDENCIES) $(EXTRA_libsuffixtools_a_DEPENDENCIES) $(AM_V_at)-rm -f libsuffixtools.a $(AM_V_AR)$(libsuffixtools_a_AR) libsuffixtools.a $(libsuffixtools_a_OBJECTS) $(libsuffixtools_a_LIBADD) $(AM_V_at)$(RANLIB) libsuffixtools.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTReader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTWriter.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-Occurrence.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-RLBWT.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-SAReader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-SAWriter.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-SBWT.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-STCommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-SuffixArray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsuffixtools_a-SuffixCompare.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libsuffixtools_a-STCommon.o: STCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-STCommon.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-STCommon.Tpo -c -o libsuffixtools_a-STCommon.o `test -f 'STCommon.cpp' || echo '$(srcdir)/'`STCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-STCommon.Tpo $(DEPDIR)/libsuffixtools_a-STCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='STCommon.cpp' object='libsuffixtools_a-STCommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-STCommon.o `test -f 'STCommon.cpp' || echo '$(srcdir)/'`STCommon.cpp libsuffixtools_a-STCommon.obj: STCommon.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-STCommon.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-STCommon.Tpo -c -o libsuffixtools_a-STCommon.obj `if test -f 'STCommon.cpp'; then $(CYGPATH_W) 'STCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/STCommon.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-STCommon.Tpo $(DEPDIR)/libsuffixtools_a-STCommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='STCommon.cpp' object='libsuffixtools_a-STCommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-STCommon.obj `if test -f 'STCommon.cpp'; then $(CYGPATH_W) 'STCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/STCommon.cpp'; fi` libsuffixtools_a-Occurrence.o: Occurrence.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-Occurrence.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-Occurrence.Tpo -c -o libsuffixtools_a-Occurrence.o `test -f 'Occurrence.cpp' || echo '$(srcdir)/'`Occurrence.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-Occurrence.Tpo $(DEPDIR)/libsuffixtools_a-Occurrence.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Occurrence.cpp' object='libsuffixtools_a-Occurrence.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-Occurrence.o `test -f 'Occurrence.cpp' || echo '$(srcdir)/'`Occurrence.cpp libsuffixtools_a-Occurrence.obj: Occurrence.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-Occurrence.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-Occurrence.Tpo -c -o libsuffixtools_a-Occurrence.obj `if test -f 'Occurrence.cpp'; then $(CYGPATH_W) 'Occurrence.cpp'; else $(CYGPATH_W) '$(srcdir)/Occurrence.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-Occurrence.Tpo $(DEPDIR)/libsuffixtools_a-Occurrence.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Occurrence.cpp' object='libsuffixtools_a-Occurrence.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-Occurrence.obj `if test -f 'Occurrence.cpp'; then $(CYGPATH_W) 'Occurrence.cpp'; else $(CYGPATH_W) '$(srcdir)/Occurrence.cpp'; fi` libsuffixtools_a-SuffixArray.o: SuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SuffixArray.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SuffixArray.Tpo -c -o libsuffixtools_a-SuffixArray.o `test -f 'SuffixArray.cpp' || echo '$(srcdir)/'`SuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SuffixArray.Tpo $(DEPDIR)/libsuffixtools_a-SuffixArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SuffixArray.cpp' object='libsuffixtools_a-SuffixArray.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SuffixArray.o `test -f 'SuffixArray.cpp' || echo '$(srcdir)/'`SuffixArray.cpp libsuffixtools_a-SuffixArray.obj: SuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SuffixArray.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SuffixArray.Tpo -c -o libsuffixtools_a-SuffixArray.obj `if test -f 'SuffixArray.cpp'; then $(CYGPATH_W) 'SuffixArray.cpp'; else $(CYGPATH_W) '$(srcdir)/SuffixArray.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SuffixArray.Tpo $(DEPDIR)/libsuffixtools_a-SuffixArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SuffixArray.cpp' object='libsuffixtools_a-SuffixArray.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SuffixArray.obj `if test -f 'SuffixArray.cpp'; then $(CYGPATH_W) 'SuffixArray.cpp'; else $(CYGPATH_W) '$(srcdir)/SuffixArray.cpp'; fi` libsuffixtools_a-SuffixCompare.o: SuffixCompare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SuffixCompare.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SuffixCompare.Tpo -c -o libsuffixtools_a-SuffixCompare.o `test -f 'SuffixCompare.cpp' || echo '$(srcdir)/'`SuffixCompare.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SuffixCompare.Tpo $(DEPDIR)/libsuffixtools_a-SuffixCompare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SuffixCompare.cpp' object='libsuffixtools_a-SuffixCompare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SuffixCompare.o `test -f 'SuffixCompare.cpp' || echo '$(srcdir)/'`SuffixCompare.cpp libsuffixtools_a-SuffixCompare.obj: SuffixCompare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SuffixCompare.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SuffixCompare.Tpo -c -o libsuffixtools_a-SuffixCompare.obj `if test -f 'SuffixCompare.cpp'; then $(CYGPATH_W) 'SuffixCompare.cpp'; else $(CYGPATH_W) '$(srcdir)/SuffixCompare.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SuffixCompare.Tpo $(DEPDIR)/libsuffixtools_a-SuffixCompare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SuffixCompare.cpp' object='libsuffixtools_a-SuffixCompare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SuffixCompare.obj `if test -f 'SuffixCompare.cpp'; then $(CYGPATH_W) 'SuffixCompare.cpp'; else $(CYGPATH_W) '$(srcdir)/SuffixCompare.cpp'; fi` libsuffixtools_a-InverseSuffixArray.o: InverseSuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-InverseSuffixArray.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Tpo -c -o libsuffixtools_a-InverseSuffixArray.o `test -f 'InverseSuffixArray.cpp' || echo '$(srcdir)/'`InverseSuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Tpo $(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='InverseSuffixArray.cpp' object='libsuffixtools_a-InverseSuffixArray.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-InverseSuffixArray.o `test -f 'InverseSuffixArray.cpp' || echo '$(srcdir)/'`InverseSuffixArray.cpp libsuffixtools_a-InverseSuffixArray.obj: InverseSuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-InverseSuffixArray.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Tpo -c -o libsuffixtools_a-InverseSuffixArray.obj `if test -f 'InverseSuffixArray.cpp'; then $(CYGPATH_W) 'InverseSuffixArray.cpp'; else $(CYGPATH_W) '$(srcdir)/InverseSuffixArray.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Tpo $(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='InverseSuffixArray.cpp' object='libsuffixtools_a-InverseSuffixArray.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-InverseSuffixArray.obj `if test -f 'InverseSuffixArray.cpp'; then $(CYGPATH_W) 'InverseSuffixArray.cpp'; else $(CYGPATH_W) '$(srcdir)/InverseSuffixArray.cpp'; fi` libsuffixtools_a-SACAInducedCopying.o: SACAInducedCopying.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SACAInducedCopying.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Tpo -c -o libsuffixtools_a-SACAInducedCopying.o `test -f 'SACAInducedCopying.cpp' || echo '$(srcdir)/'`SACAInducedCopying.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Tpo $(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SACAInducedCopying.cpp' object='libsuffixtools_a-SACAInducedCopying.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SACAInducedCopying.o `test -f 'SACAInducedCopying.cpp' || echo '$(srcdir)/'`SACAInducedCopying.cpp libsuffixtools_a-SACAInducedCopying.obj: SACAInducedCopying.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SACAInducedCopying.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Tpo -c -o libsuffixtools_a-SACAInducedCopying.obj `if test -f 'SACAInducedCopying.cpp'; then $(CYGPATH_W) 'SACAInducedCopying.cpp'; else $(CYGPATH_W) '$(srcdir)/SACAInducedCopying.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Tpo $(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SACAInducedCopying.cpp' object='libsuffixtools_a-SACAInducedCopying.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SACAInducedCopying.obj `if test -f 'SACAInducedCopying.cpp'; then $(CYGPATH_W) 'SACAInducedCopying.cpp'; else $(CYGPATH_W) '$(srcdir)/SACAInducedCopying.cpp'; fi` libsuffixtools_a-BWTAlgorithms.o: BWTAlgorithms.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTAlgorithms.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Tpo -c -o libsuffixtools_a-BWTAlgorithms.o `test -f 'BWTAlgorithms.cpp' || echo '$(srcdir)/'`BWTAlgorithms.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Tpo $(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTAlgorithms.cpp' object='libsuffixtools_a-BWTAlgorithms.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTAlgorithms.o `test -f 'BWTAlgorithms.cpp' || echo '$(srcdir)/'`BWTAlgorithms.cpp libsuffixtools_a-BWTAlgorithms.obj: BWTAlgorithms.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTAlgorithms.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Tpo -c -o libsuffixtools_a-BWTAlgorithms.obj `if test -f 'BWTAlgorithms.cpp'; then $(CYGPATH_W) 'BWTAlgorithms.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTAlgorithms.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Tpo $(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTAlgorithms.cpp' object='libsuffixtools_a-BWTAlgorithms.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTAlgorithms.obj `if test -f 'BWTAlgorithms.cpp'; then $(CYGPATH_W) 'BWTAlgorithms.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTAlgorithms.cpp'; fi` libsuffixtools_a-BWTReader.o: BWTReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTReader.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTReader.Tpo -c -o libsuffixtools_a-BWTReader.o `test -f 'BWTReader.cpp' || echo '$(srcdir)/'`BWTReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTReader.Tpo $(DEPDIR)/libsuffixtools_a-BWTReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTReader.cpp' object='libsuffixtools_a-BWTReader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTReader.o `test -f 'BWTReader.cpp' || echo '$(srcdir)/'`BWTReader.cpp libsuffixtools_a-BWTReader.obj: BWTReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTReader.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTReader.Tpo -c -o libsuffixtools_a-BWTReader.obj `if test -f 'BWTReader.cpp'; then $(CYGPATH_W) 'BWTReader.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTReader.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTReader.Tpo $(DEPDIR)/libsuffixtools_a-BWTReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTReader.cpp' object='libsuffixtools_a-BWTReader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTReader.obj `if test -f 'BWTReader.cpp'; then $(CYGPATH_W) 'BWTReader.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTReader.cpp'; fi` libsuffixtools_a-BWTWriter.o: BWTWriter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTWriter.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTWriter.Tpo -c -o libsuffixtools_a-BWTWriter.o `test -f 'BWTWriter.cpp' || echo '$(srcdir)/'`BWTWriter.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTWriter.Tpo $(DEPDIR)/libsuffixtools_a-BWTWriter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTWriter.cpp' object='libsuffixtools_a-BWTWriter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTWriter.o `test -f 'BWTWriter.cpp' || echo '$(srcdir)/'`BWTWriter.cpp libsuffixtools_a-BWTWriter.obj: BWTWriter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTWriter.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTWriter.Tpo -c -o libsuffixtools_a-BWTWriter.obj `if test -f 'BWTWriter.cpp'; then $(CYGPATH_W) 'BWTWriter.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTWriter.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTWriter.Tpo $(DEPDIR)/libsuffixtools_a-BWTWriter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTWriter.cpp' object='libsuffixtools_a-BWTWriter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTWriter.obj `if test -f 'BWTWriter.cpp'; then $(CYGPATH_W) 'BWTWriter.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTWriter.cpp'; fi` libsuffixtools_a-SAReader.o: SAReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SAReader.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SAReader.Tpo -c -o libsuffixtools_a-SAReader.o `test -f 'SAReader.cpp' || echo '$(srcdir)/'`SAReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SAReader.Tpo $(DEPDIR)/libsuffixtools_a-SAReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SAReader.cpp' object='libsuffixtools_a-SAReader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SAReader.o `test -f 'SAReader.cpp' || echo '$(srcdir)/'`SAReader.cpp libsuffixtools_a-SAReader.obj: SAReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SAReader.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SAReader.Tpo -c -o libsuffixtools_a-SAReader.obj `if test -f 'SAReader.cpp'; then $(CYGPATH_W) 'SAReader.cpp'; else $(CYGPATH_W) '$(srcdir)/SAReader.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SAReader.Tpo $(DEPDIR)/libsuffixtools_a-SAReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SAReader.cpp' object='libsuffixtools_a-SAReader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SAReader.obj `if test -f 'SAReader.cpp'; then $(CYGPATH_W) 'SAReader.cpp'; else $(CYGPATH_W) '$(srcdir)/SAReader.cpp'; fi` libsuffixtools_a-SAWriter.o: SAWriter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SAWriter.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SAWriter.Tpo -c -o libsuffixtools_a-SAWriter.o `test -f 'SAWriter.cpp' || echo '$(srcdir)/'`SAWriter.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SAWriter.Tpo $(DEPDIR)/libsuffixtools_a-SAWriter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SAWriter.cpp' object='libsuffixtools_a-SAWriter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SAWriter.o `test -f 'SAWriter.cpp' || echo '$(srcdir)/'`SAWriter.cpp libsuffixtools_a-SAWriter.obj: SAWriter.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SAWriter.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SAWriter.Tpo -c -o libsuffixtools_a-SAWriter.obj `if test -f 'SAWriter.cpp'; then $(CYGPATH_W) 'SAWriter.cpp'; else $(CYGPATH_W) '$(srcdir)/SAWriter.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SAWriter.Tpo $(DEPDIR)/libsuffixtools_a-SAWriter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SAWriter.cpp' object='libsuffixtools_a-SAWriter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SAWriter.obj `if test -f 'SAWriter.cpp'; then $(CYGPATH_W) 'SAWriter.cpp'; else $(CYGPATH_W) '$(srcdir)/SAWriter.cpp'; fi` libsuffixtools_a-SBWT.o: SBWT.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SBWT.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SBWT.Tpo -c -o libsuffixtools_a-SBWT.o `test -f 'SBWT.cpp' || echo '$(srcdir)/'`SBWT.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SBWT.Tpo $(DEPDIR)/libsuffixtools_a-SBWT.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SBWT.cpp' object='libsuffixtools_a-SBWT.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SBWT.o `test -f 'SBWT.cpp' || echo '$(srcdir)/'`SBWT.cpp libsuffixtools_a-SBWT.obj: SBWT.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SBWT.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SBWT.Tpo -c -o libsuffixtools_a-SBWT.obj `if test -f 'SBWT.cpp'; then $(CYGPATH_W) 'SBWT.cpp'; else $(CYGPATH_W) '$(srcdir)/SBWT.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SBWT.Tpo $(DEPDIR)/libsuffixtools_a-SBWT.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SBWT.cpp' object='libsuffixtools_a-SBWT.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SBWT.obj `if test -f 'SBWT.cpp'; then $(CYGPATH_W) 'SBWT.cpp'; else $(CYGPATH_W) '$(srcdir)/SBWT.cpp'; fi` libsuffixtools_a-RLBWT.o: RLBWT.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-RLBWT.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-RLBWT.Tpo -c -o libsuffixtools_a-RLBWT.o `test -f 'RLBWT.cpp' || echo '$(srcdir)/'`RLBWT.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-RLBWT.Tpo $(DEPDIR)/libsuffixtools_a-RLBWT.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RLBWT.cpp' object='libsuffixtools_a-RLBWT.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-RLBWT.o `test -f 'RLBWT.cpp' || echo '$(srcdir)/'`RLBWT.cpp libsuffixtools_a-RLBWT.obj: RLBWT.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-RLBWT.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-RLBWT.Tpo -c -o libsuffixtools_a-RLBWT.obj `if test -f 'RLBWT.cpp'; then $(CYGPATH_W) 'RLBWT.cpp'; else $(CYGPATH_W) '$(srcdir)/RLBWT.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-RLBWT.Tpo $(DEPDIR)/libsuffixtools_a-RLBWT.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RLBWT.cpp' object='libsuffixtools_a-RLBWT.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-RLBWT.obj `if test -f 'RLBWT.cpp'; then $(CYGPATH_W) 'RLBWT.cpp'; else $(CYGPATH_W) '$(srcdir)/RLBWT.cpp'; fi` libsuffixtools_a-BWTWriterBinary.o: BWTWriterBinary.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTWriterBinary.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Tpo -c -o libsuffixtools_a-BWTWriterBinary.o `test -f 'BWTWriterBinary.cpp' || echo '$(srcdir)/'`BWTWriterBinary.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Tpo $(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTWriterBinary.cpp' object='libsuffixtools_a-BWTWriterBinary.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTWriterBinary.o `test -f 'BWTWriterBinary.cpp' || echo '$(srcdir)/'`BWTWriterBinary.cpp libsuffixtools_a-BWTWriterBinary.obj: BWTWriterBinary.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTWriterBinary.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Tpo -c -o libsuffixtools_a-BWTWriterBinary.obj `if test -f 'BWTWriterBinary.cpp'; then $(CYGPATH_W) 'BWTWriterBinary.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTWriterBinary.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Tpo $(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTWriterBinary.cpp' object='libsuffixtools_a-BWTWriterBinary.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTWriterBinary.obj `if test -f 'BWTWriterBinary.cpp'; then $(CYGPATH_W) 'BWTWriterBinary.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTWriterBinary.cpp'; fi` libsuffixtools_a-BWTReaderBinary.o: BWTReaderBinary.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTReaderBinary.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Tpo -c -o libsuffixtools_a-BWTReaderBinary.o `test -f 'BWTReaderBinary.cpp' || echo '$(srcdir)/'`BWTReaderBinary.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Tpo $(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTReaderBinary.cpp' object='libsuffixtools_a-BWTReaderBinary.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTReaderBinary.o `test -f 'BWTReaderBinary.cpp' || echo '$(srcdir)/'`BWTReaderBinary.cpp libsuffixtools_a-BWTReaderBinary.obj: BWTReaderBinary.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTReaderBinary.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Tpo -c -o libsuffixtools_a-BWTReaderBinary.obj `if test -f 'BWTReaderBinary.cpp'; then $(CYGPATH_W) 'BWTReaderBinary.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTReaderBinary.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Tpo $(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTReaderBinary.cpp' object='libsuffixtools_a-BWTReaderBinary.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTReaderBinary.obj `if test -f 'BWTReaderBinary.cpp'; then $(CYGPATH_W) 'BWTReaderBinary.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTReaderBinary.cpp'; fi` libsuffixtools_a-BWTWriterAscii.o: BWTWriterAscii.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTWriterAscii.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Tpo -c -o libsuffixtools_a-BWTWriterAscii.o `test -f 'BWTWriterAscii.cpp' || echo '$(srcdir)/'`BWTWriterAscii.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Tpo $(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTWriterAscii.cpp' object='libsuffixtools_a-BWTWriterAscii.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTWriterAscii.o `test -f 'BWTWriterAscii.cpp' || echo '$(srcdir)/'`BWTWriterAscii.cpp libsuffixtools_a-BWTWriterAscii.obj: BWTWriterAscii.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTWriterAscii.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Tpo -c -o libsuffixtools_a-BWTWriterAscii.obj `if test -f 'BWTWriterAscii.cpp'; then $(CYGPATH_W) 'BWTWriterAscii.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTWriterAscii.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Tpo $(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTWriterAscii.cpp' object='libsuffixtools_a-BWTWriterAscii.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTWriterAscii.obj `if test -f 'BWTWriterAscii.cpp'; then $(CYGPATH_W) 'BWTWriterAscii.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTWriterAscii.cpp'; fi` libsuffixtools_a-BWTReaderAscii.o: BWTReaderAscii.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTReaderAscii.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Tpo -c -o libsuffixtools_a-BWTReaderAscii.o `test -f 'BWTReaderAscii.cpp' || echo '$(srcdir)/'`BWTReaderAscii.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Tpo $(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTReaderAscii.cpp' object='libsuffixtools_a-BWTReaderAscii.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTReaderAscii.o `test -f 'BWTReaderAscii.cpp' || echo '$(srcdir)/'`BWTReaderAscii.cpp libsuffixtools_a-BWTReaderAscii.obj: BWTReaderAscii.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTReaderAscii.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Tpo -c -o libsuffixtools_a-BWTReaderAscii.obj `if test -f 'BWTReaderAscii.cpp'; then $(CYGPATH_W) 'BWTReaderAscii.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTReaderAscii.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Tpo $(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTReaderAscii.cpp' object='libsuffixtools_a-BWTReaderAscii.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTReaderAscii.obj `if test -f 'BWTReaderAscii.cpp'; then $(CYGPATH_W) 'BWTReaderAscii.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTReaderAscii.cpp'; fi` libsuffixtools_a-BWTIntervalCache.o: BWTIntervalCache.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTIntervalCache.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Tpo -c -o libsuffixtools_a-BWTIntervalCache.o `test -f 'BWTIntervalCache.cpp' || echo '$(srcdir)/'`BWTIntervalCache.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Tpo $(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTIntervalCache.cpp' object='libsuffixtools_a-BWTIntervalCache.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTIntervalCache.o `test -f 'BWTIntervalCache.cpp' || echo '$(srcdir)/'`BWTIntervalCache.cpp libsuffixtools_a-BWTIntervalCache.obj: BWTIntervalCache.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-BWTIntervalCache.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Tpo -c -o libsuffixtools_a-BWTIntervalCache.obj `if test -f 'BWTIntervalCache.cpp'; then $(CYGPATH_W) 'BWTIntervalCache.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTIntervalCache.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Tpo $(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BWTIntervalCache.cpp' object='libsuffixtools_a-BWTIntervalCache.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-BWTIntervalCache.obj `if test -f 'BWTIntervalCache.cpp'; then $(CYGPATH_W) 'BWTIntervalCache.cpp'; else $(CYGPATH_W) '$(srcdir)/BWTIntervalCache.cpp'; fi` libsuffixtools_a-SampledSuffixArray.o: SampledSuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SampledSuffixArray.o -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Tpo -c -o libsuffixtools_a-SampledSuffixArray.o `test -f 'SampledSuffixArray.cpp' || echo '$(srcdir)/'`SampledSuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Tpo $(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SampledSuffixArray.cpp' object='libsuffixtools_a-SampledSuffixArray.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SampledSuffixArray.o `test -f 'SampledSuffixArray.cpp' || echo '$(srcdir)/'`SampledSuffixArray.cpp libsuffixtools_a-SampledSuffixArray.obj: SampledSuffixArray.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libsuffixtools_a-SampledSuffixArray.obj -MD -MP -MF $(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Tpo -c -o libsuffixtools_a-SampledSuffixArray.obj `if test -f 'SampledSuffixArray.cpp'; then $(CYGPATH_W) 'SampledSuffixArray.cpp'; else $(CYGPATH_W) '$(srcdir)/SampledSuffixArray.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Tpo $(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SampledSuffixArray.cpp' object='libsuffixtools_a-SampledSuffixArray.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsuffixtools_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libsuffixtools_a-SampledSuffixArray.obj `if test -f 'SampledSuffixArray.cpp'; then $(CYGPATH_W) 'SampledSuffixArray.cpp'; else $(CYGPATH_W) '$(srcdir)/SampledSuffixArray.cpp'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTReader.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTWriter.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-Occurrence.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-RLBWT.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SAReader.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SAWriter.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SBWT.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-STCommon.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SuffixArray.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SuffixCompare.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTAlgorithms.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTIntervalCache.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTReader.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTReaderAscii.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTReaderBinary.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTWriter.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTWriterAscii.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-BWTWriterBinary.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-InverseSuffixArray.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-Occurrence.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-RLBWT.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SACAInducedCopying.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SAReader.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SAWriter.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SBWT.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-STCommon.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SampledSuffixArray.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SuffixArray.Po -rm -f ./$(DEPDIR)/libsuffixtools_a-SuffixCompare.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/SGA/SuffixTools/Occurrence.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Occurrence.cpp - Data structure holding the number of times // the letter b appears in the string S from S[0..i] (inclusive) // #include "Occurrence.h" #include "SBWT.h" // Initialize the counts from the bwt string b void Occurrence::initialize(const BWTString& bwStr, int sampleRate) { m_sampleRate = sampleRate; m_shift = calculateShiftValue(m_sampleRate); size_t l = bwStr.length(); int num_samples = (l % m_sampleRate == 0) ? (l / m_sampleRate) : (l / m_sampleRate + 1); m_values.resize(num_samples); AlphaCount64 sum; for(size_t i = 0; i < l; ++i) { char currB = bwStr.get(i); sum.increment(currB); if(i % m_sampleRate == 0) m_values[i / m_sampleRate] = sum; } } // int Occurrence::calculateShiftValue(int divisor) { assert(divisor > 0); assert(IS_POWER_OF_2(divisor)); // m_sampleRate is a power of 2, count what bit is set unsigned int v = divisor; unsigned int c = 0; // c accumulates the total bits set in v while(v != 1) { v >>= 1; ++c; } assert(1 << c == divisor); return c; } // void Occurrence::set(char a, size_t i, BaseCount s) { m_values[i].set(a, s); } // size_t Occurrence::getByteSize() const { return m_values.size() * sizeof(AlphaCount64); } // Validate that the sampled occurrence array is correct void Occurrence::validate(const BWTString& bwStr) const { size_t l = bwStr.length(); AlphaCount64 sum; for(size_t i = 0; i < l; ++i) { char currB = bwStr.get(i); sum.increment(currB); AlphaCount64 calculated = get(bwStr, i); for(int i = 0; i < ALPHABET_SIZE; ++i) assert(calculated.get(ALPHABET[i]) == sum.get(ALPHABET[i])); } } std::ostream& operator<<(std::ostream& out, const Occurrence& o) { out << o.m_sampleRate << "\n"; out << o.m_values.size() << "\n"; for(size_t i = 0; i < o.m_values.size(); ++i) out << o.m_values[i] << "\n"; return out; } std::istream& operator>>(std::istream& in, Occurrence& o) { in >> o.m_sampleRate; size_t n; in >> n; o.m_values.resize(n); for(size_t i = 0; i < n; ++i) in >> o.m_values[i]; o.m_shift = Occurrence::calculateShiftValue(o.m_sampleRate); return in; } // void Occurrence::print() const { for(size_t i = 0; i < m_values.size(); i++) { std::cout << m_values[i]; } } ================================================ FILE: src/SGA/SuffixTools/Occurrence.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Occurrence.h - Data structure holding the number of times // the letter b appears in the string S before position i // #ifndef OCCURRENCE_H #define OCCURRENCE_H #include "STCommon.h" #include "EncodedString.h" // Power of 2 macros // return true if x is a power of 2 #define IS_POWER_OF_2(x) ((x) & ((x) - 1)) == 0 // return the x % y given that y is a power of 2 #define MOD_POWER_2(x, y) (x) & ((y) - 1) class SBWT; class Occurrence { public: // Constructors Occurrence() : m_sampleRate(1) {} // Initialize the counts from the bwt string b void initialize(const BWTString& bwStr, int sampleRate); // inline const AlphaCount64 get(const BWTString& bwStr, size_t idx) const { // Quick path if((MOD_POWER_2(idx,m_sampleRate)) == 0) return m_values[idx >> m_shift]; // Calculate the nearest sample to this index size_t lower_idx = idx >> m_shift; size_t upper_idx = lower_idx + 1; size_t lower_start = lower_idx << m_shift; size_t upper_start = upper_idx << m_shift; AlphaCount64 sum; // Choose the closest index or force the choice to lower_idx is the upper_idx is invalid if((idx - lower_start < upper_start - idx) || upper_idx == m_values.size()) { for(size_t j = lower_start + 1; j <= idx; ++j) sum.increment(bwStr.get(j)); return m_values[lower_idx] + sum; } else { for(size_t j = idx + 1; j <= upper_start; ++j) sum.increment(bwStr.get(j)); return m_values[upper_idx] - sum; } } // Get the alphacount difference between idx1 and idx0 inline AlphaCount64 getDiff(const BWTString& bwStr, size_t idx0, size_t idx1) const { return get(bwStr, idx1) - get(bwStr, idx0); } inline BaseCount get(const BWTString& bwStr, char a, size_t idx) const { // Quick path if((MOD_POWER_2(idx,m_sampleRate)) == 0) return m_values[idx >> m_shift].get(a); // Calculate the nearest sample to this index size_t lower_idx = idx >> m_shift; size_t upper_idx = lower_idx + 1; size_t lower_start = lower_idx << m_shift; size_t upper_start = upper_idx << m_shift; BaseCount sum = 0; // Choose the closest index or force the choice to lower_idx is the upper_idx is invalid if((idx - lower_start < upper_start - idx) || upper_idx == m_values.size()) { for(size_t j = lower_start + 1; j <= idx; ++j) { if(bwStr.get(j) == a) ++sum; } return m_values[lower_idx].get(a) + sum; } else { for(size_t j = idx + 1; j <= upper_start; ++j) { if(bwStr.get(j) == a) ++sum; } return m_values[upper_idx].get(a) - sum; } //return get(bwStr, idx).get(a); } void set(char a, size_t i, BaseCount s); void print() const; size_t getByteSize() const; size_t size() const { return m_values.size(); } size_t getSampleRate() const { return m_sampleRate; } // Calculate the amount a value should be shifted to perform a division // by divisor. The divisor must be a power of 2 static int calculateShiftValue(int divisor); void validate(const BWTString& bwStr) const; friend std::ostream& operator<<(std::ostream& out, const Occurrence& o); friend std::istream& operator>>(std::istream& in, Occurrence& o); private: int m_shift; int m_sampleRate; std::vector m_values; }; #endif ================================================ FILE: src/SGA/SuffixTools/PopulationIndex.cpp ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // PopulationIndex - A structure mapping a read // index to a member of a population // #include "PopulationIndex.h" #include "Util.h" #include PopulationIndex::PopulationIndex(const std::string& filename) { std::istream* reader = createReader(filename); std::string line; while(getline(*reader, line)) { PopulationMember member = str2member(line); m_population.push_back(member); } delete reader; reader = NULL; // Make sure the index is properly formatted assert(m_population.size() != 0); assert(m_population[0].start == 0); for(size_t i = 1; i < m_population.size(); ++i) { assert(m_population[i].start > m_population[i-1].start); assert(m_population[i].start == m_population[i-1].end + 1); } /* Test the index size_t start = 0; size_t end = m_population.back().end + 2; for(size_t i = start; i <= end; ++i) { std::string name = getName(i); printf("%zu = %s\n", i, name.c_str()); } */ } // std::string PopulationIndex::getName(size_t read_index) const { std::vector::const_iterator iter = getIterByReadIndex(read_index); return iter->name; } // size_t PopulationIndex::getSampleIndex(size_t read_index) const { std::vector::const_iterator iter = getIterByReadIndex(read_index); return iter - m_population.begin(); } // std::vector::const_iterator PopulationIndex::getIterByReadIndex(size_t read_index) const { assert(read_index <= m_population.back().end); // Perform a binary search to identify the first element of the population // that is strictly greater than the index. This returns an iterator that is // guarenteed to be one past the individual that index belongs to. PopulationMember search = { read_index, read_index, "" }; std::vector::const_iterator iter = std::upper_bound(m_population.begin(), m_population.end(), search, PopulationMember::compareByStart); assert(iter != m_population.begin()); iter--; assert(read_index >= iter->start && read_index <= iter->end); return iter; } // StringVector PopulationIndex::getSamples() const { StringVector out; for(size_t i = 0; i < m_population.size(); ++i) out.push_back(m_population[i].name); return out; } // void PopulationIndex::mergeIndexFiles(const std::string& file1, const std::string& file2, const std::string& outfile) { std::ostream* writer = createWriter(outfile); // Copy the first index to the output unmodified but track the number of elements read size_t num_file_1 = 0; std::istream* reader = createReader(file1); std::string line; while(getline(*reader, line)) { // Copy *writer << line << "\n"; // Parse PopulationMember member = str2member(line); num_file_1 += (member.end - member.start + 1); } delete reader; // Copy the second index, offsetting by the number of reads in file1 reader = createReader(file2); while(getline(*reader, line)) { PopulationMember member = str2member(line); member.start += num_file_1; member.end += num_file_1; // Copy *writer << member.start << "\t" << member.end << "\t" << member.name << "\n"; } delete reader; delete writer; } // PopulationMember PopulationIndex::str2member(const std::string& line) { std::stringstream parser(line); PopulationMember member; parser >> member.start; parser >> member.end; parser >> member.name; return member; } ================================================ FILE: src/SGA/SuffixTools/PopulationIndex.h ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // PopulationIndex - A structure mapping a read // index to a member of a population // #ifndef POPULATION_INDEX_H #define POPULATION_INDEX_H #include #include typedef std::vector StringVector; struct PopulationMember { size_t start; size_t end; std::string name; // static bool compareByStart(const PopulationMember& a, const PopulationMember& b) { return a.start < b.start; } }; class PopulationIndex { public: PopulationIndex(const std::string& filename); // Return the name of the individual for the read at index std::string getName(size_t read_index) const; // Return the index of the sample containing the given read index size_t getSampleIndex(size_t read_index) const; // Get the names of all samples in the collection StringVector getSamples() const; // Returns the number of samples in the population size_t getNumSamples() const { return m_population.size(); } // Merge two population index files into a new one static void mergeIndexFiles(const std::string& file1, const std::string& file2, const std::string& outfile); private: // Returns an iterator pointing to the sample that the contains the given index std::vector::const_iterator getIterByReadIndex(size_t index) const; // Parse a string from a .popidx file into a population member static PopulationMember str2member(const std::string& line); // Data std::vector m_population; }; #endif ================================================ FILE: src/SGA/SuffixTools/QuickBWT.cpp ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // QuickBWT - Construct a simple BWT for a short input string // #include "QuickBWT.h" // Construct a BWT for a small string. // Calling function is responsible for freeing the memory void createQuickBWT(const std::string& str, BWT*& pBWT, SuffixArray*& pSA) { ReadTable rt; SeqItem si = { "a", str }; rt.addRead(si); pSA = new SuffixArray(&rt, 1, true); pBWT = new BWT(pSA, &rt); /* std::cout << "QBWT -- str len: " << str.length() << "\n"; std::cout << "QBWT -- bwt len: " << pBWT->getBWLen() << "\n"; pBWT->printInfo(); */ } ================================================ FILE: src/SGA/SuffixTools/QuickBWT.h ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // QuickBWT - Construct a simple BWT for a short input string // #include "BWT.h" // Construct a BWT/suffix array of the given string // Calling code is responsible for freeing the BWT/SA void createQuickBWT(const std::string& str, BWT*& pBWT, SuffixArray*& pSA); ================================================ FILE: src/SGA/SuffixTools/RLBWT.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RLBWT - Run-length encoded Burrows Wheeler transform // #include "RLBWT.h" #include "Timer.h" #include "BWTReader.h" #include "BWTWriter.h" #include "BWTReader.h" #include #include #include // macros #define OCC(c,i) m_occurrence.get(m_bwStr, (c), (i)) #define PRED(c) m_predCount.get((c)) // Parse a BWT from a file RLBWT::RLBWT(const std::string& filename, int sampleRate) : m_numStrings(0), m_numSymbols(0), m_largeSampleRate(DEFAULT_SAMPLE_RATE_LARGE), m_smallSampleRate(sampleRate) { IBWTReader* pReader = BWTReader::createReader(filename); pReader->read(this); initializeFMIndex(); delete pReader; } // Construct the BWT from a suffix array RLBWT::RLBWT(const SuffixArray* pSA, const ReadTable* pRT) { // Set up BWT state size_t n = pSA->getSize(); m_smallSampleRate = DEFAULT_SAMPLE_RATE_SMALL; m_largeSampleRate = DEFAULT_SAMPLE_RATE_LARGE; m_numStrings = pSA->getNumStrings(); m_numSymbols = n; RLUnit currRun; // Set up the bwt string and suffix array from the cycled strings for(size_t i = 0; i < n; ++i) { SAElem saElem = pSA->get(i); const SeqItem& si = pRT->getRead(saElem.getID()); // Get the position of the start of the suffix uint64_t f_pos = saElem.getPos(); uint64_t l_pos = (f_pos == 0) ? si.seq.length() : f_pos - 1; char b = (l_pos == si.seq.length()) ? '$' : si.seq.get(l_pos); // Add to the current run or append in the new char if(currRun.isInitialized()) { if(currRun.getChar() == b && !currRun.isFull()) { currRun.incrementCount(); } else { // Write out the old run and start a new one assert(currRun.isInitialized()); m_rlString.push_back(currRun); currRun = RLUnit(b); } } else { // Start a new run currRun = RLUnit(b); } } assert(currRun.isInitialized()); if(currRun.isInitialized()) m_rlString.push_back(currRun); initializeFMIndex(); } // void RLBWT::append(char b) { bool increment = false; if(!m_rlString.empty()) { RLUnit& lastUnit = m_rlString.back(); if(lastUnit.getChar() == b && !lastUnit.isFull()) { lastUnit.incrementCount(); increment = true; } } if(!increment) { // Must add a new unit to the string RLUnit unit(b); m_rlString.push_back(unit); } ++m_numSymbols; } // Fill in the FM-index data structures void RLBWT::initializeFMIndex() { m_smallShiftValue = Occurrence::calculateShiftValue(m_smallSampleRate); m_largeShiftValue = Occurrence::calculateShiftValue(m_largeSampleRate); // initialize the marker vectors, // LargeMarkers are placed every 2048 bases (by default) containing the absolute count // of symbols seen up to that point. SmallMarkers are placed every 128 bases with the // count over the last 128 symbols. From these relative counts the absolute count // every 128 symbols can be interpolated. size_t num_large_markers = getNumRequiredMarkers(m_numSymbols, m_largeSampleRate); size_t num_small_markers = getNumRequiredMarkers(m_numSymbols, m_smallSampleRate); m_largeMarkers.resize(num_large_markers); m_smallMarkers.resize(num_small_markers); // Fill in the marker values // We wish to place markers every sampleRate symbols however since a run may // not end exactly on sampleRate boundaries, we place the markers AFTER // the run crossing the boundary ends // Place a blank markers at the start of the data m_largeMarkers[0].unitIndex = 0; m_smallMarkers[0].unitCount = 0; // State variables for the number of markers placed, // the next marker to place, etc size_t curr_large_marker_index = 1; size_t curr_small_marker_index = 1; size_t next_small_marker = m_smallSampleRate; size_t next_large_marker = m_largeSampleRate; size_t prev_small_marker_unit_index = 0; size_t running_total = 0; AlphaCount64 running_ac; for(size_t i = 0; i < m_rlString.size(); ++i) { // Update the count and advance the running total RLUnit& unit = m_rlString[i]; char symbol = unit.getChar(); uint8_t run_len = unit.getCount(); running_ac.add(symbol, run_len); running_total += run_len; size_t curr_unit_index = i + 1; bool last_symbol = i == m_rlString.size() - 1; // Check whether to place a new large marker bool place_last_large_marker = last_symbol && curr_large_marker_index < num_large_markers; while(running_total >= next_large_marker || place_last_large_marker) { size_t expected_marker_pos = curr_large_marker_index * m_largeSampleRate; // Sanity checks // The marker position should always be less than the running total unless // the number of symbols is smaller than the sample rate assert(expected_marker_pos <= running_total || place_last_large_marker); assert((running_total - expected_marker_pos) <= RL_FULL_COUNT || place_last_large_marker); assert(curr_large_marker_index < num_large_markers); assert(running_ac.getSum() == running_total); LargeMarker& marker = m_largeMarkers[curr_large_marker_index]; marker.unitIndex = i + 1; marker.counts = running_ac; next_large_marker += m_largeSampleRate; curr_large_marker_index += 1; place_last_large_marker = last_symbol && curr_large_marker_index < num_large_markers; } // Check whether to place a new small marker bool place_last_small_marker = last_symbol && curr_small_marker_index < num_small_markers; while(running_total >= next_small_marker || place_last_small_marker) { // Place markers size_t expected_marker_pos = curr_small_marker_index * m_smallSampleRate; // Sanity checks // The marker position should always be less than the running total unless // the number of symbols is smaller than the sample rate assert(expected_marker_pos <= running_total || place_last_small_marker); assert((running_total - expected_marker_pos) <= RL_FULL_COUNT || place_last_small_marker); assert(curr_small_marker_index < num_small_markers); assert(running_ac.getSum() == running_total); // Calculate the number of rl units that are contained in this block if(curr_unit_index - prev_small_marker_unit_index > std::numeric_limits::max()) { std::cerr << "Error: Number of units in occurrence array block " << curr_small_marker_index << " exceeds the maximum value.\n"; exit(EXIT_FAILURE); } // Calculate the large marker to set the relative count from // This is generally the most previously placed large block except it might // be the second-previous in the case that we placed the last large marker. size_t large_marker_index = expected_marker_pos >> m_largeShiftValue; assert(large_marker_index < curr_large_marker_index); // ensure the last has ben placed LargeMarker& prev_large_marker = m_largeMarkers[large_marker_index]; // Set the 8bit AlphaCounts as the sum since the last large (superblock) marker AlphaCount16 smallAC; for(size_t j = 0; j < ALPHABET_SIZE; ++j) { size_t v = running_ac.getByIdx(j) - prev_large_marker.counts.getByIdx(j); if(v > smallAC.getMaxValue()) { std::cerr << "Error: Number of symbols in occurrence array block " << curr_small_marker_index << " exceeds the maximum value (" << v << " > " << smallAC.getMaxValue() << ")\n"; exit(EXIT_FAILURE); } smallAC.setByIdx(j, v); } // Set the small marker SmallMarker& small_marker = m_smallMarkers[curr_small_marker_index]; small_marker.unitCount = curr_unit_index - prev_large_marker.unitIndex; small_marker.counts = smallAC; // Update state variables next_small_marker += m_smallSampleRate; curr_small_marker_index += 1; prev_small_marker_unit_index = curr_unit_index; place_last_small_marker = last_symbol && curr_small_marker_index < num_small_markers; } } assert(curr_small_marker_index == num_small_markers); assert(curr_large_marker_index == num_large_markers); // Initialize C(a) m_predCount.set('$', 0); m_predCount.set('A', running_ac.get('$')); m_predCount.set('C', m_predCount.get('A') + running_ac.get('A')); m_predCount.set('G', m_predCount.get('C') + running_ac.get('C')); m_predCount.set('T', m_predCount.get('G') + running_ac.get('G')); } // get the number of markers required to cover the n symbols at sample rate of d size_t RLBWT::getNumRequiredMarkers(size_t n, size_t d) const { // we place a marker at the beginning (with no accumulated counts), every m_sampleRate // bases and one at the very end (with the total counts) size_t num_markers = (n % d == 0) ? (n / d) + 1 : (n / d) + 2; return num_markers; } // Print the BWT void RLBWT::print() const { size_t numRuns = getNumRuns(); std::string bwt; for(size_t i = 0; i < numRuns; ++i) { const RLUnit& unit = m_rlString[i]; char symbol = unit.getChar(); size_t length = unit.getCount(); for(size_t j = 0; j < length; ++j) std::cout << symbol; std::cout << " : " << symbol << "," << length << "\n"; bwt.append(length, symbol); } std::cout << "B: " << bwt << "\n"; } // Print information about the BWT void RLBWT::printInfo() const { size_t small_m_size = m_smallMarkers.capacity() * sizeof(SmallMarker); size_t large_m_size = m_largeMarkers.capacity() * sizeof(LargeMarker); size_t total_marker_size = small_m_size + large_m_size; size_t bwStr_size = m_rlString.capacity() * sizeof(RLUnit); size_t other_size = sizeof(*this); size_t total_size = total_marker_size + bwStr_size + other_size; double mb = (double)(1024 * 1024); double total_mb = total_size / mb; printf("\nRLBWT info:\n"); printf("Large Sample rate: %zu\n", m_largeSampleRate); printf("Small Sample rate: %zu\n", m_smallSampleRate); printf("Contains %zu symbols in %zu runs (%1.4lf symbols per run)\n", m_numSymbols, m_rlString.size(), (double)m_numSymbols / m_rlString.size()); printf("Marker Memory -- Small Markers: %zu (%.1lf MB) Large Markers: %zu (%.1lf MB)\n", small_m_size, small_m_size / mb, large_m_size, large_m_size / mb); printf("Total Memory -- Markers: %zu (%.1lf MB) Str: %zu (%.1lf MB) Misc: %zu Total: %zu (%lf MB)\n", total_marker_size, total_marker_size / mb, bwStr_size, bwStr_size / mb, other_size, total_size, total_mb); printf("N: %zu Bytes per symbol: %lf\n\n", m_numSymbols, (double)total_size / m_numSymbols); } // Print the run length distribution of the BWT void RLBWT::printRunLengths() const { typedef std::map DistMap; DistMap rlDist; char prevSym = '\0'; size_t prevRunLen = 0; size_t currLen = 0; size_t adjacentSingletons = 0; size_t numRuns = getNumRuns(); size_t totalRuns = 0; for(size_t i = 0; i < numRuns; ++i) { const RLUnit& unit = m_rlString[i]; size_t length = unit.getCount(); if(unit.getChar() == prevSym) { currLen += unit.getCount(); } else { if(prevSym != '\0') { if(currLen >= 200) rlDist[200]++; else rlDist[currLen]++; totalRuns++; } currLen = length; prevSym = unit.getChar(); } if(length == 1 && prevRunLen == 1) { adjacentSingletons += 1; prevRunLen = 0; } prevRunLen = length; } printf("Run length distrubtion\n"); printf("rl\tcount\tfrac\n"); double cumulative_mb = 0.0f; for(DistMap::iterator iter = rlDist.begin(); iter != rlDist.end(); ++iter) { cumulative_mb += ((double)iter->second / (1024 * 1024)); printf("%zu\t%zu\t%lf\t%lf\n", iter->first, iter->second, double(iter->second) / totalRuns, cumulative_mb); } printf("Total runs: %zu\n", totalRuns); printf("Number of adjacent singleton runs: %zu\n", adjacentSingletons); printf("Minimal runs: %zu\n", totalRuns - adjacentSingletons / 2); } ================================================ FILE: src/SGA/SuffixTools/RLBWT.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RLBWT - Run-length encoded Burrows Wheeler transform // #ifndef RLBWT_H #define RLBWT_H #include "STCommon.h" #include "Occurrence.h" #include "SuffixArray.h" #include "ReadTable.h" #include "HitData.h" #include "BWTReader.h" #include "EncodedString.h" #include "FMMarkers.h" #include "RLUnit.h" // Defines //#define RLBWT_VALIDATE 1 // // RLBWT // class RLBWT { public: // Constructors RLBWT(const std::string& filename, int sampleRate = DEFAULT_SAMPLE_RATE_SMALL); RLBWT(const SuffixArray* pSA, const ReadTable* pRT); // void initializeFMIndex(); // Append a symbol to the bw string void append(char b); inline char getChar(size_t idx) const { // Calculate the Marker who's position is not less than idx const LargeMarker& upper = getUpperMarker(idx); size_t current_position = upper.getActualPosition(); assert(current_position >= idx); size_t symbol_index = upper.unitIndex; // Search backwards (towards 0) until idx is found while(current_position > idx) { assert(symbol_index != 0); symbol_index -= 1; current_position -= m_rlString[symbol_index].getCount(); } // symbol_index is now the index of the run containing the idx symbol const RLUnit& unit = m_rlString[symbol_index]; assert(current_position <= idx && current_position + unit.getCount() >= idx); return unit.getChar(); } // Get the index of the marker nearest to position in the bwt inline size_t getNearestMarkerIdx(size_t position, size_t sampleRate, size_t shiftValue) const { size_t offset = MOD_POWER_2(position, sampleRate); // equivalent to position % sampleRate size_t baseIdx = position >> shiftValue; if(offset < (sampleRate >> 1)) { return baseIdx; } else { return baseIdx + 1; } } // Get the interpolated marker with position closest to position inline LargeMarker getNearestMarker(size_t position) const { size_t nearest_small_idx = getNearestMarkerIdx(position, m_smallSampleRate, m_smallShiftValue); return getInterpolatedMarker(nearest_small_idx); } // Get the greatest interpolated marker whose position is less than or equal to position inline LargeMarker getLowerMarker(size_t position) const { size_t target_small_idx = position >> m_smallShiftValue; return getInterpolatedMarker(target_small_idx); } // Get the lowest interpolated marker whose position is strictly greater than position inline LargeMarker getUpperMarker(size_t position) const { size_t target_small_idx = (position >> m_smallShiftValue) + 1; return getInterpolatedMarker(target_small_idx); } // Return a LargeMarker with values that are interpolated by adding // the relative count nearest to the requested position to the last // LargeMarker inline LargeMarker getInterpolatedMarker(size_t target_small_idx) const { // Calculate the position of the LargeMarker closest to the target SmallMarker size_t target_position = target_small_idx << m_smallShiftValue; size_t curr_large_idx = target_position >> m_largeShiftValue; LargeMarker absoluteMarker = m_largeMarkers[curr_large_idx]; const SmallMarker& relative = m_smallMarkers[target_small_idx]; alphacount_add16(absoluteMarker.counts, relative.counts); absoluteMarker.unitIndex += relative.unitCount; return absoluteMarker; } inline BaseCount getPC(char b) const { return m_predCount.get(b); } // Return the number of times char b appears in bwt[0, idx] inline BaseCount getOcc(char b, size_t idx) const { // The counts in the marker are not inclusive (unlike the Occurrence class) // so we increment the index by 1. ++idx; const LargeMarker& marker = getNearestMarker(idx); size_t current_position = marker.getActualPosition(); bool forwards = current_position < idx; //printf("cp: %zu idx: %zu f: %d dist: %d\n", current_position, idx, forwards, (int)idx - (int)current_position); size_t running_count = marker.counts.get(b); size_t symbol_index = marker.unitIndex; if(forwards) accumulateForwards(b, running_count, symbol_index, current_position, idx); else accumulateBackwards(b, running_count, symbol_index, current_position, idx); return running_count; } // Return the number of times each symbol in the alphabet appears in bwt[0, idx] inline AlphaCount64 getFullOcc(size_t idx) const { // The counts in the marker are not inclusive (unlike the Occurrence class) // so we increment the index by 1. ++idx; const LargeMarker& marker = getNearestMarker(idx); size_t current_position = marker.getActualPosition(); bool forwards = current_position < idx; AlphaCount64 running_count = marker.counts; size_t symbol_index = marker.unitIndex; if(forwards) accumulateForwards(running_count, symbol_index, current_position, idx); else accumulateBackwards(running_count, symbol_index, current_position, idx); return running_count; } // Adds to the count of symbol b in the range [targetPosition, currentPosition) // Precondition: currentPosition <= targetPosition inline void accumulateBackwards(AlphaCount64& running_count, size_t currentUnitIndex, size_t currentPosition, const size_t targetPosition) const { // Search backwards (towards 0) until idx is found while(currentPosition != targetPosition) { size_t diff = currentPosition - targetPosition; #ifdef RLBWT_VALIDATE assert(currentUnitIndex != 0); #endif --currentUnitIndex; const RLUnit& curr_unit = m_rlString[currentUnitIndex]; currentPosition -= curr_unit.subtractAlphaCount(running_count, diff); } } // Adds to the count of symbol b in the range [currentPosition, targetPosition) // Precondition: currentPosition <= targetPosition inline void accumulateForwards(AlphaCount64& running_count, size_t currentUnitIndex, size_t currentPosition, const size_t targetPosition) const { // Search backwards (towards 0) until idx is found while(currentPosition != targetPosition) { size_t diff = targetPosition - currentPosition; #ifdef RLBWT_VALIDATE assert(currentUnitIndex != m_rlString.size()); #endif const RLUnit& curr_unit = m_rlString[currentUnitIndex]; currentPosition += curr_unit.addAlphaCount(running_count, diff); ++currentUnitIndex; } } // Adds to the count of symbol b in the range [targetPosition, currentPosition) // Precondition: currentPosition <= targetPosition inline void accumulateBackwards(char b, size_t& running_count, size_t currentUnitIndex, size_t currentPosition, const size_t targetPosition) const { // Search backwards (towards 0) until idx is found while(currentPosition != targetPosition) { size_t diff = currentPosition - targetPosition; #ifdef RLBWT_VALIDATE assert(currentUnitIndex != 0); #endif --currentUnitIndex; const RLUnit& curr_unit = m_rlString[currentUnitIndex]; currentPosition -= curr_unit.subtractCount(b, running_count, diff); } } // Adds to the count of symbol b in the range [currentPosition, targetPosition) // Precondition: currentPosition <= targetPosition inline void accumulateForwards(char b, size_t& running_count, size_t currentUnitIndex, size_t currentPosition, const size_t targetPosition) const { // Search backwards (towards 0) until idx is found while(currentPosition != targetPosition) { size_t diff = targetPosition - currentPosition; #ifdef RLBWT_VALIDATE assert(currentUnitIndex != m_rlString.size()); #endif const RLUnit& curr_unit = m_rlString[currentUnitIndex]; currentPosition += curr_unit.addCount(b, running_count, diff); ++currentUnitIndex; } } // Return the number of times each symbol in the alphabet appears ins bwt[idx0, idx1] inline AlphaCount64 getOccDiff(size_t idx0, size_t idx1) const { return getFullOcc(idx1) - getFullOcc(idx0); } inline size_t getNumStrings() const { return m_numStrings; } inline size_t getBWLen() const { return m_numSymbols; } inline size_t getNumRuns() const { return m_rlString.size(); } // Return the first letter of the suffix starting at idx inline char getF(size_t idx) const { size_t ci = 0; while(ci < ALPHABET_SIZE && m_predCount.getByIdx(ci) <= idx) ci++; assert(ci != 0); return RANK_ALPHABET[ci - 1]; } // Print the size of the BWT void printInfo() const; void print() const; void printRunLengths() const; // IO friend class BWTReaderBinary; friend class BWTWriterBinary; friend class BWTReaderAscii; friend class BWTWriterAscii; // Default sample rates for the large (64-bit) and small (8-bit) occurrence markers static const int DEFAULT_SAMPLE_RATE_LARGE = 2; //8192; static const int DEFAULT_SAMPLE_RATE_SMALL = 2; private: // Default constructor is not allowed RLBWT() {} // Calculate the number of markers to place size_t getNumRequiredMarkers(size_t n, size_t d) const; // The C(a) array AlphaCount64 m_predCount; // The run-length encoded string RLVector m_rlString; // The marker vector LargeMarkerVector m_largeMarkers; SmallMarkerVector m_smallMarkers; // The number of strings in the collection size_t m_numStrings; // The total length of the bw string size_t m_numSymbols; // The sample rate used for the markers size_t m_largeSampleRate; size_t m_smallSampleRate; // The amount to shift values by to divide by m_sampleRate int m_smallShiftValue; int m_largeShiftValue; }; #endif ================================================ FILE: src/SGA/SuffixTools/RLUnit.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RLUnit - A run-length encoded unit of the FM-index // #ifndef RLUNIT_H #define RLUNIT_H // #define RL_COUNT_MASK 0x1F //00011111 #define RL_SYMBOL_MASK 0xE0 //11100000 #define RL_FULL_COUNT 31 #define RL_SYMBOL_SHIFT 5 #define RLE_VALIDATE // A unit of the RLBWT is a pair of a symbol and its count // The high 3 bits encodes the symbol to store // The low 5 bits encodes the length of the run struct RLUnit { RLUnit() : data(0) {} RLUnit(char b) : data(1) { setChar(b); } // Returns true if the count cannot be incremented inline bool isFull() const { return (data & RL_COUNT_MASK) == RL_FULL_COUNT; } inline bool isEmpty() const { return (data & RL_COUNT_MASK) == 0; } inline bool isInitialized() const { return data > 0; } // Add this run to the AlphaCount // Only add up to maxCount symbols. Returns the number // of symbols added inline size_t addAlphaCount(AlphaCount64& ac, size_t max) const { size_t count = getCount(); if(count > max) count = max; char symbol = getChar(); ac.add(symbol, count); return count; } // Add this run to the count of base b if it matches // Only add up to maxCount symbols. Returns the number // of symbols in the current run, up to max inline size_t addCount(char b, size_t& base_count, size_t max) const { size_t run_len = getCount(); if(run_len > max) run_len = max; char symbol = getChar(); if(symbol == b) base_count += run_len; return run_len; } // Subtract this run from the AlphaCount // Only subtract up to maxCount symbols. Returns the number // of symbols added inline size_t subtractAlphaCount(AlphaCount64& ac, size_t max) const { size_t count = getCount(); if(count > max) count = max; char symbol = getChar(); ac.subtract(symbol, count); return count; } // Subtract this run from the count of base b if it matches // Only add up to maxCount symbols. Returns the number // of symbols in the current run, up to max inline size_t subtractCount(char b, size_t& base_count, size_t max) const { size_t run_len = getCount(); if(run_len > max) run_len = max; char symbol = getChar(); if(symbol == b) base_count -= run_len; return run_len; } // inline void incrementCount() { #ifdef RLE_VALIDATE assert(!isFull()); #endif ++data; } // inline void decrementCount() { #ifdef RLE_VALIDATE assert(!isEmpty()); #endif --data; } inline uint8_t getCount() const { #ifdef RLE_VALIDATE assert((data & RL_COUNT_MASK) != 0); #endif return data & RL_COUNT_MASK; } // Set the symbol inline void setChar(char symbol) { // Clear the current symbol data &= RL_COUNT_MASK; uint8_t code = BWT_ALPHABET::getRank(symbol); code <<= RL_SYMBOL_SHIFT; data |= code; } // Get the symbol inline char getChar() const { uint8_t code = data & RL_SYMBOL_MASK; code >>= RL_SYMBOL_SHIFT; return BWT_ALPHABET::getChar(code); } // uint8_t data; friend class RLBWTReader; friend class RLBWTWriter; }; typedef std::vector RLVector; #endif ================================================ FILE: src/SGA/SuffixTools/RankProcess.cpp ================================================ ///----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RankProcess - Compute a vector of BWT ranks for // SequenceWorkItems // #include "RankProcess.h" // // // RankProcess::RankProcess(const BWT* pBWT, GapArray* pSharedGapArray, bool doReverse, bool removeMode) : m_pBWT(pBWT), m_pSharedGapArray(pSharedGapArray), m_doReverse(doReverse), m_removeMode(removeMode) { } // RankProcess::~RankProcess() { } // Calculate the ranks of the given sequence. // We attempt to update the count of the rank in the gap array // using an atomic compare and swap. The update will fail if the // small-storage maximum count is exceeded. In this case // we push the value to the overflow array for a serial // update in the post-processing step. RankResult RankProcess::process(const SequenceWorkItem& workItem) { RankResult out; DNAString w = workItem.read.seq; if(m_doReverse) w.reverse(); size_t l = w.length(); int i = l - 1; // In add mode, the initial rank is zero and we calculate the rank // for the last base of the sequence using just C(a). In remove // mode we use the index of the read (in the original read table) as // the rank so that ranks calculate correspond to the correct // entries in the BWT for the read to remove. int64_t rank = 0; // add mode if(m_removeMode) { // Parse the read index from the read id rank = parseRankFromID(workItem.read.id); } out.numRanksProcessed += 1; if(!m_pSharedGapArray->attemptBaseIncrement(rank)) out.overflowVec.push_back(rank); // Compute the starting rank for the last symbol of w char c = w.get(i); // In the case that the starting rank is zero (default // in add mode, or if we are removing the first read) // there can no occurrence of any characters before this // suffix so we just calculate the rank from C(a) if(rank == 0) rank = m_pBWT->getPC(c); else rank = m_pBWT->getPC(c) + m_pBWT->getOcc(c, rank - 1); out.numRanksProcessed += 1; if(!m_pSharedGapArray->attemptBaseIncrement(rank)) out.overflowVec.push_back(rank); --i; // Iteratively compute the remaining ranks while(i >= 0) { char c = w.get(i); rank = m_pBWT->getPC(c) + m_pBWT->getOcc(c, rank - 1); //std::cout << "c: " << c << " rank: " << rank << "\n"; out.numRanksProcessed += 1; if(!m_pSharedGapArray->attemptBaseIncrement(rank)) out.overflowVec.push_back(rank); --i; } return out; } // Parse the rank of a read from its ID. This must be set by the process // which discards the read. int64_t RankProcess::parseRankFromID(const std::string& id) { static const std::string rank_str = "seqrank="; // Find the position of the rank expression in the string size_t rank_pos = id.rfind(rank_str); if(rank_pos == std::string::npos) { std::cout << "Error: rank token not found in the discarded read with id: " << id << "\n"; exit(EXIT_FAILURE); } assert(rank_pos + rank_str.length() < id.length()); std::stringstream rp(id.substr(rank_pos + rank_str.length())); int64_t rank; rp >> rank; return rank; } // // // RankPostProcess::RankPostProcess(GapArray* pGapArray) : m_pGapArray(pGapArray), num_strings(0), num_symbols(0), num_serial_updates(0) { } RankPostProcess::~RankPostProcess() { //printf("Debug: num serial updates: %zu\n", num_serial_updates); } // void RankPostProcess::process(const SequenceWorkItem& /*item*/, const RankResult& result) { ++num_strings; num_symbols += result.numRanksProcessed; // We update any overflowed ranks here. This call is serial and only updates // the Overflow table in the gap array. for(RankVector::const_iterator iter = result.overflowVec.begin(); iter != result.overflowVec.end(); ++iter) m_pGapArray->incrementOverflowSerial(*iter); num_serial_updates += result.overflowVec.size(); } ================================================ FILE: src/SGA/SuffixTools/RankProcess.h ================================================ ///----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // RankProcess - Compute a vector of BWT ranks for // SequenceWorkItems // #ifndef RANKPROCESS_H #define RANKPROCESS_H #include "Util.h" #include "BWT.h" #include "SequenceWorkItem.h" #include "GapArray.h" typedef std::vector RankVector; struct RankResult { RankResult() : numRanksProcessed(0) {} RankVector overflowVec; size_t numRanksProcessed; }; // Compute the overlap blocks for reads class RankProcess { public: RankProcess(const BWT* pBWT, GapArray* pSharedGapArray, bool doReverse, bool removeMode); ~RankProcess(); RankResult process(const SequenceWorkItem& item); private: int64_t parseRankFromID(const std::string& id); const BWT* m_pBWT; GapArray* m_pSharedGapArray; bool m_doReverse; bool m_removeMode; }; // Update the gap array with class RankPostProcess { public: RankPostProcess(GapArray* pGapArray); ~RankPostProcess(); void process(const SequenceWorkItem& item, const RankResult& result); size_t getNumStringsProcessed() const { return num_strings; } size_t getNumSymbolsProcessed() const { return num_symbols; } private: GapArray* m_pGapArray; size_t num_strings; size_t num_symbols; size_t num_serial_updates; }; #endif ================================================ FILE: src/SGA/SuffixTools/SACAInducedCopying.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SACAInducedCopying algorithm // #include "SACAInducedCopying.h" #include "SuffixCompare.h" #include "mkqs.h" #include "bucketSort.h" #include "Util.h" unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; #define GET_CHAR(i, j) pRT->getChar((i),(j)) #define isLMS(i, j) ((j) > 0 && getBit(type_array, (i), (j)) && !getBit(type_array, (i), (j-1))) #define GET_BKT(c) getBaseRank((c)) // Implementation of induced copying algorithm by // Nong, Zhang, Chan // Follows implementation given as an appendix to their 2008 paper // '\0' is the sentinenl in this algorithm void saca_induced_copying(SuffixArray* pSA, const ReadTable* pRT, int numThreads, bool silent) { // In the multiple strings case, we need a 2D bit array // to hold the L/S types for the suffixes size_t num_strings = pRT->getCount(); char** type_array = new char*[num_strings]; for(size_t i = 0; i < num_strings; ++i) { size_t s_len = pRT->getReadLength(i) + 1; size_t num_bytes = (s_len / 8) + 1; type_array[i] = new char[num_bytes]; assert(type_array[i] != 0); memset(type_array[i], 0, num_bytes); } // Classify each suffix as being L or S type for(size_t i = 0; i < num_strings; ++i) { size_t s_len = pRT->getReadLength(i) + 1; // The empty suffix ($) for each string is defined to be S type // and hence the next suffix must be L type setBit(type_array, i, s_len - 1, 1); setBit(type_array, i, s_len - 2, 0); for(int64_t j = s_len - 3; j >= 0; --j) { char curr_c = GET_CHAR(i, j); char next_c = GET_CHAR(i, j + 1); bool s_type = (curr_c < next_c || (curr_c == next_c && getBit(type_array, i, j + 1) == 1)); setBit(type_array, i, j, s_type); } } // setup buckets const int ALPHABET_SIZE = 5; int64_t bucket_counts[ALPHABET_SIZE]; int64_t buckets[ALPHABET_SIZE]; // find the ends of the buckets countBuckets(pRT, bucket_counts, ALPHABET_SIZE); getBuckets(bucket_counts, buckets, ALPHABET_SIZE, true); // Initialize the suffix array size_t num_suffixes = buckets[ALPHABET_SIZE - 1]; pSA->initialize(num_suffixes, pRT->getCount()); // Copy all the LMS substrings into the first n1 places in the SA size_t n1 = 0; for(size_t i = 0; i < num_strings; ++i) { size_t s_len = pRT->getReadLength(i) + 1; for(size_t j = 0; j < s_len; ++j) { if(isLMS(i,j)) pSA->set(n1++, SAElem(i, j)); } } /* //induceSAl(pRT, pSA, type_array, bucket_counts, buckets, num_suffixes, ALPHABET_SIZE, false); //induceSAs(pRT, pSA, type_array, bucket_counts, buckets, num_suffixes, ALPHABET_SIZE, true); // Compact all the sorted substrings into the first portion of the SA size_t n1 = 0; for(size_t i = 0; i < num_suffixes; ++i) { SAElem elem = pSA->get(i); if(!elem.isEmpty() && isLMS(elem.getID(), elem.getPos())) { pSA->set(n1++, elem); } } */ // Call MKQS, first on the sequence and then on the index in the read table SuffixCompareRadix radix_compare(pRT, 6); SuffixCompareIndex index_compare; //SuffixCompareID id_compare(pRT); if(numThreads <= 1) mkqs2(&pSA->m_data[0], n1, 0, radix_compare, index_compare); //else // parallel_mkqs(&pSA->m_data[0], n1, numThreads, radix_compare, index_compare); //if(!silent) // std::cout << "[saca] mkqs finished\n"; // Induction sort the remaining suffixes for(size_t i = n1; i < num_suffixes; ++i) pSA->set(i, SAElem()); // Find the ends of the buckets getBuckets(bucket_counts, buckets, ALPHABET_SIZE, true); for(int64_t i = n1 - 1; i >= 0; --i) { SAElem elem_i = pSA->get(i); pSA->set(i, SAElem()); // empty char c = GET_CHAR(elem_i.getID(), elem_i.getPos()); pSA->set(--buckets[GET_BKT(c)], elem_i); } induceSAl(pRT, pSA, type_array, bucket_counts, buckets, num_suffixes, ALPHABET_SIZE, false); induceSAs(pRT, pSA, type_array, bucket_counts, buckets, num_suffixes, ALPHABET_SIZE, true); // deallocate t array for(size_t i = 0; i < num_strings; ++i) { delete [] type_array[i]; } delete [] type_array; } void induceSAl(const ReadTable* pRT, SuffixArray* pSA, char** p_array, int64_t* counts, int64_t* buckets, size_t n, int K, bool end) { getBuckets(counts, buckets, K, end); for(size_t i = 0; i < n; ++i) { const SAElem& elem_i = pSA->get(i); if(!elem_i.isEmpty() && elem_i.getPos() > 0) { //std::cout << "Curr: " << elem_i << "\n"; SAElem elem_j(elem_i.getID(), elem_i.getPos() - 1); if(!getBit(p_array, elem_j.getID(), elem_j.getPos())) { char c = GET_CHAR(elem_j.getID(),elem_j.getPos()); //std::cout << "Placing " << elem_j << " at position " << buckets[GET_BKT(c)] << "\n"; pSA->set(buckets[GET_BKT(c)]++, elem_j); } } } } void induceSAs(const ReadTable* pRT, SuffixArray* pSA, char** p_array, int64_t* counts, int64_t* buckets, size_t n, int K, bool end) { getBuckets(counts, buckets, K, end); for(int64_t i = n - 1; i >= 0; --i) { const SAElem& elem_i = pSA->get(i); if(!elem_i.isEmpty() && elem_i.getPos() > 0) { //std::cout << "Curr: " << elem_i << "\n"; SAElem elem_j(elem_i.getID(), elem_i.getPos() - 1); if(getBit(p_array, elem_j.getID(), elem_j.getPos())) { char c = GET_CHAR(elem_j.getID(),elem_j.getPos()); //std::cout << "Placing " << elem_j << " at position " << buckets[GET_BKT(c)] - 1 << "\n"; pSA->set(--buckets[GET_BKT(c)], elem_j); } } } } // Calculate the number of items that should be in each bucket void countBuckets(const ReadTable* pRT, int64_t* counts, int K) { for(int i = 0; i < K; ++i) counts[i] = 0; for(size_t i = 0; i < pRT->getCount(); ++i) { size_t s_len = pRT->getReadLength(i); for(size_t j = 0; j < s_len; ++j) counts[getBaseRank(GET_CHAR(i,j))]++; counts[getBaseRank('\0')]++; } } // If end is true, calculate the end of the buckets, otherwise // calculate the starts void getBuckets(int64_t* counts, int64_t* buckets, int K, bool end) { for(int i = 0; i < K; ++i) buckets[i] = 0; size_t sum = 0; for(int i = 0; i < K; ++i) { sum += counts[i]; buckets[i] = end ? sum : sum - counts[i]; } } // set the element to b void setBit(char** p_array, size_t str_idx, size_t bit_idx, bool b) { char* ba = p_array[str_idx]; ba[bit_idx / 8] = b ? mask[bit_idx % 8] | ba[bit_idx / 8] : ~mask[bit_idx % 8] & ba[bit_idx / 8]; } bool getBit(char** p_array, size_t str_idx, size_t bit_idx) { return p_array[str_idx][bit_idx / 8] & mask[bit_idx % 8] ? 1 : 0; } void printType(const ReadTable* pRT, char** p_array, size_t str_idx) { std::string suf_string = pRT->getRead(str_idx).seq.getSuffixString(0); std::cout << suf_string << "\n"; for(size_t i = 0; i < suf_string.length(); ++i) { std::cout << (getBit(p_array, str_idx, i) == 1 ? "S" : "L"); } std::cout << "\n"; } ================================================ FILE: src/SGA/SuffixTools/SACAInducedCopying.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // SACAInducedCopying - Implementation of the // induced copying algorithm as described // by Nong, Zhang, Chan (2008) // Modified by JTS to handle multiple strings #ifndef SACA_INDUCED_COPYING_H #include "SuffixArray.h" #include "ReadTable.h" void saca_induced_copying(SuffixArray* pSA, const ReadTable* pRT, int numThreads, bool silent = false); void induceSAl(const ReadTable* pRT, SuffixArray* pSA, char** p_array, int64_t* counts, int64_t* buckets, size_t n, int K, bool end); void induceSAs(const ReadTable* pRT, SuffixArray* pSA, char** p_array, int64_t* counts, int64_t* buckets, size_t n, int K, bool end); void countBuckets(const ReadTable* pRT, int64_t* buckets, int K); void getBuckets(int64_t* counts, int64_t* buckets, int K, bool end); inline void setBit(char** p_array, size_t str_idx, size_t bit_idx, bool b); inline bool getBit(char** p_array, size_t str_idx, size_t bit_idx); void printType(const ReadTable* pRT, char** p_array, size_t str_idx); #endif ================================================ FILE: src/SGA/SuffixTools/SAReader.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SAReader.h - Read a suffix array file from disk // #include "SAReader.h" #include "SuffixArray.h" // SAReader::SAReader(const std::string& filename) : m_stage(SAIOS_NONE) { m_pReader = createReader(filename); m_stage = SAIOS_HEADER; } // SAReader::~SAReader() { delete m_pReader; } void SAReader::read(SuffixArray* pSA) { size_t num_elems; readHeader(pSA->m_numStrings, num_elems); pSA->m_data.reserve(num_elems); readElems(pSA->m_data); } // void SAReader::readHeader(size_t& num_strings, size_t& num_elems) { assert(m_stage == SAIOS_HEADER); uint16_t magic_number; // Ensure the file format is sane *m_pReader >> magic_number; if(magic_number != SA_FILE_MAGIC) { std::cerr << "Suffix array file is not properly formatted, aborting\n"; exit(EXIT_FAILURE); } *m_pReader >> num_strings; *m_pReader >> num_elems; // Explicitly set the stream // to the start of the elements m_pReader->get(); m_stage = SAIOS_ELEM; } // void SAReader::readElems(SAElemVector& elemVector) { assert(m_stage == SAIOS_ELEM); size_t cap = elemVector.capacity(); size_t num_read = 0; SAElem e; while(*m_pReader >> e) { elemVector.push_back(e); ++num_read; } assert(cap >= num_read); (void)cap; m_stage = SAIOS_DONE; } // void SAReader::readElems(std::vector& outVector) { assert(m_stage == SAIOS_ELEM); size_t cap = outVector.capacity(); size_t num_read = 0; size_t MAX_ELEMS = std::numeric_limits::max(); SAElem e; while(*m_pReader >> e) { size_t index = e.getID(); size_t pos = e.getPos(); assert(pos == 0); // Ensure this index is representable by the collection if(index > MAX_ELEMS) { std::cerr << "Error: Only " << MAX_ELEMS << " reads are allowed in this program\n"; std::cerr << "Found read with index " << index << "\n"; std::cerr << "Contact sga-users@googlegroups.com for help\n"; exit(EXIT_FAILURE); } outVector.push_back(index); ++num_read; } assert(cap >= num_read); (void)cap; m_stage = SAIOS_DONE; } SAElem SAReader::readElem() { assert(m_stage == SAIOS_ELEM); SAElem e; if(*m_pReader >> e) { return e; } else { std::cerr << "Error: Read past end-of-file in SAReader::readElem()\n"; exit(EXIT_FAILURE); } } ================================================ FILE: src/SGA/SuffixTools/SAReader.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SAReader.h - Read a suffix array file from disk // #ifndef SAREADER_H #define SAREADER_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" const uint16_t SA_FILE_MAGIC = 0xCACA; enum SAIOStage { SAIOS_NONE, SAIOS_HEADER, SAIOS_ELEM, SAIOS_DONE }; class SuffixArray; class SAReader { public: SAReader(const std::string& filename); ~SAReader(); // void read(SuffixArray* pSA); // Read the header of the file void readHeader(size_t& num_strings, size_t& num_elems); // Read the file into a vector of SAElems void readElems(SAElemVector& elemVector); // Read the file into a vector of unsigned ints storing // the read indices. This is a more compact representation // than storing the full SAElems but only works up to 2**32 values void readElems(std::vector& outVector); // Read a single element SAElem readElem(); private: std::istream* m_pReader; SAIOStage m_stage; }; #endif ================================================ FILE: src/SGA/SuffixTools/SAWriter.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SAWriter.h - Read a suffix array file from disk // #include "SAWriter.h" #include "SuffixArray.h" // SAWriter::SAWriter(const std::string& filename) : m_stage(SAIOS_NONE) { m_pWriter = createWriter(filename); m_stage = SAIOS_HEADER; } // SAWriter::~SAWriter() { delete m_pWriter; } void SAWriter::write(const SuffixArray* pSA) { writeHeader(pSA->m_numStrings, pSA->m_data.size()); writeElems(pSA->m_data); } // void SAWriter::writeHeader(const size_t& num_strings, const size_t& num_elems) { assert(m_stage == SAIOS_HEADER); *m_pWriter << SA_FILE_MAGIC << "\n"; *m_pWriter << num_strings << "\n"; *m_pWriter << num_elems << "\n"; m_stage = SAIOS_ELEM; } // void SAWriter::writeElems(const SAElemVector& elemVector) { assert(m_stage == SAIOS_ELEM); for(size_t i = 0; i < elemVector.size(); ++i) writeElem(elemVector[i]); m_stage = SAIOS_DONE; } // void SAWriter::writeElem(const SAElem& elem) { *m_pWriter << elem << "\n"; } ================================================ FILE: src/SGA/SuffixTools/SAWriter.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SAWriter.h - Read a suffix array file from disk // #ifndef SAWRITER_H #define SAWRITER_H #include "Util.h" #include "STCommon.h" #include "Occurrence.h" #include "SAReader.h" class SuffixArray; class SAWriter { public: SAWriter(const std::string& filename); ~SAWriter(); // void write(const SuffixArray* pSA); void writeHeader(const size_t& num_strings, const size_t& num_elems); void writeElems(const SAElemVector& elemVector); void writeElem(const SAElem& elem); private: std::ostream* m_pWriter; SAIOStage m_stage; }; #endif ================================================ FILE: src/SGA/SuffixTools/SBWT.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SBWT.cpp - Burrows Wheeler transform of a generalized suffix array // #include "SBWT.h" #include "Timer.h" #include "BWTReaderAscii.h" #include "BWTReaderBinary.h" #include "BWTWriterAscii.h" #include #include #include // macros #define OCC(c,i) m_occurrence.get(m_bwStr, (c), (i)) #define PRED(c) m_predCount.get((c)) // Parse a BWT from a file SBWT::SBWT(const std::string& filename, int sampleRate) { BWTReaderBinary reader(filename); reader.read(this); initializeFMIndex(sampleRate); } // Construct the BWT from a suffix array SBWT::SBWT(const SuffixArray* pSA, const ReadTable* pRT) { size_t n = pSA->getSize(); m_numStrings = pSA->getNumStrings(); m_bwStr.resize(n); // Set up the bwt string and suffix array from the cycled strings for(size_t i = 0; i < n; ++i) { SAElem saElem = pSA->get(i); const SeqItem& si = pRT->getRead(saElem.getID()); // Get the position of the start of the suffix uint64_t f_pos = saElem.getPos(); uint64_t l_pos = (f_pos == 0) ? si.seq.length() : f_pos - 1; char b = (l_pos == si.seq.length()) ? '$' : si.seq.get(l_pos); m_bwStr.set(i, b); } initializeFMIndex(DEFAULT_SAMPLE_RATE); } // Fill in the FM-index data structures void SBWT::initializeFMIndex(int sampleRate) { // initialize the occurance table m_occurrence.initialize(m_bwStr, sampleRate); // Calculate the C(a) array // Calculate the total number of occurances of each character in the BW str AlphaCount64 tmp; for(size_t i = 0; i < m_bwStr.length(); ++i) { tmp.increment(m_bwStr.get(i)); } m_predCount.set('$', 0); m_predCount.set('A', tmp.get('$')); m_predCount.set('C', m_predCount.get('A') + tmp.get('A')); m_predCount.set('G', m_predCount.get('C') + tmp.get('C')); m_predCount.set('T', m_predCount.get('G') + tmp.get('G')); } // Compute the last to first mapping size_t SBWT::LF(size_t idx) const { return m_bwStr.get(idx) != '$' ? PRED(m_bwStr.get(idx)) + OCC(m_bwStr.get(idx), idx) : 0; } // Perform a exact search for the string w using the backwards algorithm void SBWT::backwardSearch(std::string w) const { std::cout << "Searching for " << w << "\n"; int len = w.size(); int j = len - 1; char curr = w[j]; int r_lower = PRED(curr); int r_upper = r_lower + OCC(curr, m_bwStr.length() - 1) - 1; --j; std::cout << "Starting point: " << r_lower << "," << r_upper << "\n"; for(;j >= 0; --j) { curr = w[j]; printf("RL = C(%c) + O(%c,%d) + %zu\n", curr, curr, r_lower - 1, m_numStrings); printf("RU = C(%c) + O(%c,%d)\n", curr, curr, r_upper); printf("RL = %zu + %zu + %zu\n", (size_t)PRED(curr), (size_t)OCC(curr, r_lower - 1), m_numStrings); printf("RU = %zu + %zu\n", (size_t)PRED(curr), (size_t)OCC(curr, r_upper)); r_lower = PRED(curr) + OCC(curr, r_lower - 1); r_upper = PRED(curr) + OCC(curr, r_upper) - 1; printf("Curr: %c, Interval now: %d,%d\n", curr, r_lower, r_upper); } std::cout << "Interval found: " << r_lower << "," << r_upper << "\n"; } // void SBWT::validate() const { std::cerr << "Warning BWT validation is turned on\n"; m_occurrence.validate(m_bwStr); } // Print the BWT void SBWT::print(const ReadTable* pRT, const SuffixArray* pSA) const { std::cout << "i\tL(i)\tF(i)\tO(-,i)\tSUFF\n"; for(size_t i = 0; i < m_bwStr.length(); ++i) { assert(getF(i) == pSA->getSuffix(i, pRT)[0]); std::cout << i << "\t" << m_bwStr.get(i) << "\t" << getF(i) << "\t" << m_occurrence.get(m_bwStr, i) << pSA->getSuffix(i, pRT) << "\n"; } } // Print information about the BWT void SBWT::printInfo() const { size_t o_size = m_occurrence.getByteSize(); size_t p_size = sizeof(m_predCount); size_t bwStr_size = m_bwStr.getMemSize(); size_t offset_size = sizeof(m_numStrings); size_t total_size = o_size + p_size + bwStr_size + offset_size; double total_mb = ((double)total_size / (double)(1024 * 1024)); printf("\nSBWT info\n"); printf("Sample rate: %zu\n", m_occurrence.getSampleRate()); printf("Memory -- OCC: %zu C: %zu Str: %zu Misc: %zu TOTAL: %zu (%lf MB)\n", o_size, p_size, bwStr_size, offset_size, total_size, total_mb); printf("N: %zu Bytes per symbol: %lf\n", m_bwStr.length(), (double)total_size / m_bwStr.length()); } ================================================ FILE: src/SGA/SuffixTools/SBWT.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SBWT - Uncompressed burrows Wheeler transform // of a set of sequence reads // // #ifndef SBWT_H #define SBWT_H #include "STCommon.h" #include "Occurrence.h" #include "SuffixArray.h" #include "ReadTable.h" #include "HitData.h" #include "BWTReader.h" #include "EncodedString.h" // // BWT // class SBWT { public: // Constructors SBWT(const std::string& filename, int sampleRate = DEFAULT_SAMPLE_RATE); SBWT(const SuffixArray* pSA, const ReadTable* pRT); // void initializeFMIndex(int sampleRate); // Exact match void backwardSearch(std::string w) const; // L[i] -> F mapping size_t LF(size_t idx) const; inline char getChar(size_t idx) const { return m_bwStr.get(idx); } inline BaseCount getPC(char b) const { return m_predCount.get(b); } // Return the number of times char b appears in bwt[0, idx] inline BaseCount getOcc(char b, size_t idx) const { return m_occurrence.get(m_bwStr, b, idx); } // Return the number of times each symbol in the alphabet appears in bwt[0, idx] inline AlphaCount64 getFullOcc(size_t idx) const { return m_occurrence.get(m_bwStr, idx); } // Return the number of times each symbol in the alphabet appears ins bwt[idx0, idx1] inline AlphaCount64 getOccDiff(size_t idx0, size_t idx1) const { return m_occurrence.getDiff(m_bwStr, idx0, idx1); } inline size_t getNumStrings() const { return m_numStrings; } inline size_t getBWLen() const { return m_bwStr.length(); } // Return the first letter of the suffix starting at idx inline char getF(size_t idx) const { size_t ci = 0; while(ci < ALPHABET_SIZE && m_predCount.getByIdx(ci) <= idx) ci++; assert(ci != 0); return RANK_ALPHABET[ci - 1]; } // Print the size of the BWT void printInfo() const; void print(const ReadTable* pRT, const SuffixArray* pSA) const; void printRunLengths() const { std::cout << "Using SimpleBWT - No run lengths\n"; } void validate() const; // IO friend class BWTReaderBinary; friend class BWTWriterBinary; friend class BWTReaderAscii; friend class BWTWriterAscii; static const int DEFAULT_SAMPLE_RATE = 128; static const int DEFAULT_SAMPLE_RATE_SMALL = DEFAULT_SAMPLE_RATE; private: // Default constructor is not allowed SBWT() {} // The O(a,i) array Occurrence m_occurrence; // The C(a) array AlphaCount64 m_predCount; // The bw string BWTString m_bwStr; // The number of strings in the collection size_t m_numStrings; }; #endif ================================================ FILE: src/SGA/SuffixTools/STCommon.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // STCommon.cpp - Implementation of basic data structures // #include "STCommon.h" #include // // SAId // // Constructors SAElem::SAElem(uint64_t i) { setID(i); } // SAElem::SAElem(uint64_t i, uint64_t p) { setID(i); setPos(p); } // Input std::istream& operator>>(std::istream& in, SAElem& s) { uint64_t i; uint64_t p; in >> i >> p; s.setID(i); s.setPos(p); return in; } // Output std::ostream& operator<<(std::ostream& out, const SAElem& s) { if(!s.isEmpty()) out << s.getID() << " " << s.getPos(); else out << -1; return out; } // // Global functions // // Print a map template void printMap(const std::map& m) { for(typename std::map::const_iterator iter = m.begin(); iter != m.end(); ++iter) { std::cout << iter->first << "\t" << iter->second << "\n"; } } // Print a vector template void printVector(const std::vector& v) { std::copy(v.begin(), v.end(), std::ostream_iterator(std::cout, "\n")); } ================================================ FILE: src/SGA/SuffixTools/STCommon.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // STCommon.h - Base classes and data structures // #ifndef STCOMMON_H #define STCOMMON_H #include "STGlobals.h" #include "Util.h" // // Functions // // Print out a map using cout template void printMap(const std::map& m); // Print a vector template void printVector(const std::vector& v); // // Classes // // // A Generalized SuffixArray ID (SAElem) is a single number where the high n bits represents the // identifier of the string (as the index into a StringDictionary) and the low (64 - n) bits // represents the position in that string // struct SAElem { public: SAElem() : m_val(std::numeric_limits::max()) { } SAElem(uint64_t i); SAElem(uint64_t i, uint64_t p); // inline bool isEmpty() const { return m_val == std::numeric_limits::max(); } // set the id inline void setID(uint64_t i) { // Clear the HIGH bits by ANDing with the low mask m_val &= LOW_MASK; // Shift the new position into place and set the new value i <<= POS_BITS; m_val |= i; } // set the position void setPos(uint64_t i) { // Clear the LOW bits by anding with the high mask m_val &= HIGH_MASK; // Set the new value m_val |= i; } inline uint64_t getID() const { return (m_val & HIGH_MASK) >> POS_BITS; } inline uint64_t getPos() const { return (m_val & LOW_MASK); } // Returns true if the suffix is the full length of the string inline bool isFull() const { return getPos() == 0; } // Input/Output friend std::istream& operator>>(std::istream& in, SAElem& s); friend std::ostream& operator<<(std::ostream& out, const SAElem& s); private: // uint64_t m_val; // Masks static const uint8_t ID_BITS = 36; // Allows up to 68 billion IDs static const uint8_t POS_BITS = 64 - ID_BITS; static const uint64_t HIGH_MASK = (~((uint64_t)(0))) << POS_BITS; static const uint64_t LOW_MASK = ~HIGH_MASK; }; // Typedefs of STL collections of the above classes typedef std::vector SAElemVector; typedef std::pair SAElemPair; typedef std::vector SAElemPairVec; typedef std::set NumericIDSet; #endif ================================================ FILE: src/SGA/SuffixTools/STGlobals.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // STGlobals.h - Common definitions and declarations for suffix tree, // suffix array and BWT data types // #ifndef STGLOBALS_H #define STGLOBALS_H #include #include #include #include #include #include #include #include "Alphabet.h" // // Basic typedefs // typedef std::string BWStr; typedef uint32_t Label; typedef uint8_t AIdx; typedef std::vector IntVector; typedef std::vector StringVector; #endif ================================================ FILE: src/SGA/SuffixTools/SampledSuffixArray.cpp ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SampledSuffixArray - Data structure holding // a subset of suffix array positions. From the // sampled positions, the other entries of the // suffix array can be calculated. // #include "SampledSuffixArray.h" #include "SAReader.h" #include "SAWriter.h" //#include "config.h" #if HAVE_OPENMP #include #endif static const uint32_t SSA_MAGIC_NUMBER = 12412; #define SSA_READ(x) pReader->read(reinterpret_cast(&(x)), sizeof((x))); #define SSA_READ_N(x,n) pReader->read(reinterpret_cast(&(x)), (n)); #define SSA_WRITE(x) pWriter->write(reinterpret_cast(&(x)), sizeof((x))); #define SSA_WRITE_N(x,n) pWriter->write(reinterpret_cast(&(x)), (n)); // SampledSuffixArray::SampledSuffixArray() { } SampledSuffixArray::SampledSuffixArray(const std::string& filename, SSAFileType filetype) { // Read the sampled suffix array from a file - either from a .ssa or .sai file if(filetype == SSA_FT_SSA) readSSA(filename); else readSAI(filename); } // SAElem SampledSuffixArray::calcSA(int64_t idx, const BWT* pBWT) const { size_t offset = 0; SAElem elem; while(1) { // Check if this position is sampled. If the sample rate is zero we are using the lexo. index only if(m_sampleRate > 0 && idx % m_sampleRate == 0 && !m_saSamples[idx / m_sampleRate].isEmpty()) { // A valid sample is stored for this idx elem = m_saSamples[idx / m_sampleRate]; break; } // A sample does not exist for this position, perform a backtracking step char b = pBWT->getChar(idx); idx = pBWT->getPC(b) + pBWT->getOcc(b, idx - 1); if(b == '$') { // idx (before the update) corresponds to the start of a read. // We can directly look up the saElem for idx from the lexicographic index assert(idx < (int64_t)m_saLexoIndex.size()); elem.setID(m_saLexoIndex[idx]); elem.setPos(0); break; } else { // A backtracking step is performed, increment offset offset += 1; } } elem.setPos(elem.getPos() + offset); return elem; } // Returns the ID of the read with lexicographic rank r size_t SampledSuffixArray::lookupLexoRank(size_t r) const { return m_saLexoIndex[r]; } // void SampledSuffixArray::build(const BWT* pBWT, const ReadInfoTable* pRIT, int sampleRate) { m_sampleRate = sampleRate; size_t numStrings = pRIT->getCount(); m_saLexoIndex.resize(numStrings); size_t MAX_ELEMS = std::numeric_limits::max(); if(numStrings > MAX_ELEMS) { std::cerr << "Error: Only " << MAX_ELEMS << " reads are allowed in the sampled suffix array\n"; std::cerr << "Number of reads in your index: " << numStrings << "\n"; std::cerr << "Contact sga-users@googlegroups.com for help\n"; exit(EXIT_FAILURE); } // Set the size of the sampled vector size_t numElems = (pBWT->getBWLen() / m_sampleRate) + 1; m_saSamples.resize(numElems); // For each read, start from the end of the read and backtrack through the suffix array/BWT. // For every idx that is divisible by the sample rate, store the calculate SAElem for(size_t i = 0; i < numStrings; ++i) { // The suffix array positions for the ends of reads are ordered // by their position in the read information table, therefore // the starting suffix array index is i size_t idx = i; // The ID of the read is i. The position coordinate is inclusive but // since the read information table does not store the '$' symbol // the starting position equals the read length SAElem elem(i, pRIT->getReadLength(i)); while(1) { if(idx % m_sampleRate == 0) { // store this SAElem m_saSamples[idx / m_sampleRate] = elem; } char b = pBWT->getChar(idx); idx = pBWT->getPC(b) + pBWT->getOcc(b, idx - 1); if(b == '$') { // we have hit the beginning of this string // store the SAElem for the beginning of the read // in the lexicographic index if(elem.getPos() != 0) std::cout << "elem: " << elem << " i: " << i << "\n"; assert(elem.getPos() == 0); size_t id = elem.getID(); assert(id < MAX_ELEMS); m_saLexoIndex[idx] = id; break; // done; } else { // Decrease the position of the elem elem.setPos(elem.getPos() - 1); } } } } // A streamlined version of the above function void SampledSuffixArray::buildLexicoIndex(const BWT* pBWT, int num_threads) { int64_t numStrings = pBWT->getNumStrings(); m_saLexoIndex.resize(numStrings); int64_t MAX_ELEMS = std::numeric_limits::max(); assert(numStrings < MAX_ELEMS); (void)num_threads; // Parallelize this computaiton using openmp, if the compiler supports it #if HAVE_OPENMP omp_set_num_threads(num_threads); #pragma omp parallel for #endif for(int64_t read_idx = 0; read_idx < numStrings; ++read_idx) { // For each read, start from the end of the read and backtrack through the suffix array/BWT // to calculate its lexicographic rank in the collection size_t idx = read_idx; while(1) { char b = pBWT->getChar(idx); idx = pBWT->getPC(b) + pBWT->getOcc(b, idx - 1); if(b == '$') { // There is a one-to-one mapping between read_index and the element // of the array that is set - therefore we can perform this operation // without a lock. m_saLexoIndex[idx] = read_idx; break; // done; } } } } // Validate the sampled suffix array values are correct /*void SampledSuffixArray::validate(const std::string filename, const BWT* pBWT) { ReadTable* pRT = new ReadTable(filename); SuffixArray* pSA = new SuffixArray(pRT, 1); std::cout << "Validating sampled suffix array entries\n"; for(size_t i = 0; i < pSA->getSize(); ++i) { SAElem calc = calcSA(i, pBWT); SAElem real = pSA->get(i); if(calc.getID() != real.getID() || calc.getPos() != real.getPos()) { std::cout << "Error SA elements do not match for " << i << "\n"; std::cout << "Calc: " << calc << "\n"; std::cout << "Real: " << real << "\n"; exit(1); } } std::cout << "All calculate SA values are correct\n"; delete pRT; delete pSA; } */ // Save the SA to disc void SampledSuffixArray::writeSSA(std::string filename) { std::ostream* pWriter = createWriter(filename, std::ios::out | std::ios::binary); // Write a magic number SSA_WRITE(SSA_MAGIC_NUMBER) // Write sample rate SSA_WRITE(m_sampleRate) // Write number of lexicographic index entries size_t n = m_saLexoIndex.size(); SSA_WRITE(n) // Write lexo index SSA_WRITE_N(m_saLexoIndex.front(), sizeof(SSA_INT_TYPE) * n) // Write number of samples n = m_saSamples.size(); SSA_WRITE(n) // Write samples SSA_WRITE_N(m_saSamples.front(), sizeof(SAElem) * n) delete pWriter; } // Save just the lexicographic index portion of the SSA to disk as plaintext void SampledSuffixArray::writeLexicoIndex(const std::string& filename) { SAWriter writer(filename); size_t num_strings = m_saLexoIndex.size(); writer.writeHeader(num_strings, num_strings); for(size_t i = 0; i < m_saLexoIndex.size(); ++i) { SAElem elem(m_saLexoIndex[i], 0); writer.writeElem(elem); } } void SampledSuffixArray::readSSA(std::string filename) { std::istream* pReader = createReader(filename, std::ios::binary); // Write a magic number uint32_t magic = 0; SSA_READ(magic) assert(magic == SSA_MAGIC_NUMBER); // Read sample rate SSA_READ(m_sampleRate) // Read number of lexicographic index entries size_t n = 0; SSA_READ(n) m_saLexoIndex.resize(n); // Read lexo index SSA_READ_N(m_saLexoIndex.front(), sizeof(SSA_INT_TYPE) * n) // Read number of samples n = 0; SSA_READ(n) m_saSamples.resize(n); // Read samples SSA_READ_N(m_saSamples.front(), sizeof(SAElem) * n) delete pReader; } void SampledSuffixArray::readSAI(std::string filename) { SAReader reader(filename); size_t num_strings, num_elems; reader.readHeader(num_strings, num_elems); assert(num_strings == num_elems); m_saLexoIndex.reserve(num_strings); reader.readElems(m_saLexoIndex); // Set the sample rate to zero to signify there are no samples m_sampleRate = 0; } // Print memory usage information void SampledSuffixArray::printInfo() const { double mb = (double)(1024*1024); double lexoSize = (double)(sizeof(SSA_INT_TYPE) * m_saLexoIndex.capacity()) / mb; double sampleSize = (double)(sizeof(SAElem) * m_saSamples.capacity()) / mb; printf("SampledSuffixArray info:\n"); printf("Sample rate: %d\n", m_sampleRate); printf("Contains %zu entries in lexicographic array (%.1lf MB)\n", m_saLexoIndex.size(), lexoSize); printf("Contains %zu entries in sample array (%.1lf MB)\n", m_saSamples.size(), sampleSize); printf("Total size: %.1lf\n", lexoSize + sampleSize); } ================================================ FILE: src/SGA/SuffixTools/SampledSuffixArray.h ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SampledSuffixArray - Data structure holding // a subset of suffix array positions. From the // sampled positions, the other entries of the // suffix array can be calculated. // #ifndef SAMPLED_SUFFIX_ARRAY #define SAMPLED_SUFFIX_ARRAY #include "SuffixArray.h" #include "BWT.h" #include "ReadInfoTable.h" typedef uint32_t SSA_INT_TYPE; enum SSAFileType { SSA_FT_SSA, SSA_FT_SAI }; class SampledSuffixArray { public: SampledSuffixArray(); SampledSuffixArray(const std::string& filename, SSAFileType filetype = SSA_FT_SSA); // Calculate the suffix array element for the given index SAElem calcSA(int64_t idx, const BWT* pBWT) const; // Returns the ID of the read with lexicographic rank r size_t lookupLexoRank(size_t r) const; // Construct the sampled SA using the bwt of a set of reads and their lengths void build(const BWT* pBWT, const ReadInfoTable* pRIT, int sampleRate = DEFAULT_SA_SAMPLE_RATE); // Construct the lexicographic index (.sai) from the BWT void buildLexicoIndex(const BWT* pBWT, int num_threads); // Validate using the full suffix array for the given set of reads. Very slow. void validate(std::string readsFile, const BWT* pBWT); void printInfo() const; // I/O void writeLexicoIndex(const std::string& filename); void writeSSA(std::string filename); void readSSA(std::string filename); void readSAI(std::string filename); private: // Unsigned integers indicating the start of every read in the // sequence collection. These elements are in lexicographic order // based on the whole read sequence. Tracing a read backwards through // the suffix array necessarily ends at one of these positions. These // are nominally SAElems representing the full length suffix but // we store them here as unsigned integers to save 4 bytes per entry. // This limits the SampledSuffixArray to represent at most 2**32 strings. // To improve this we could use a polymorphic vector with a runtime-determined // size. std::vector m_saLexoIndex; static const int DEFAULT_SA_SAMPLE_RATE = 64; int m_sampleRate; SAElemVector m_saSamples; }; #endif ================================================ FILE: src/SGA/SuffixTools/SparseGapArray.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SparseGapArray // // The sparse gap array uses a small integer type to // keep the count for each element. A small number // of positions will have a count that is larger // than the maximum value the integer can represent. // These values are automatically overflowed into a // hash map with a larger integer type. In the typical // case this will require far less memory than the // SimpleGapArray. The storage unit is templated // to allow a dynamic tradeoff between the amount // of memory required to store the simple cases // and the overflow rate. // #ifndef SPARSEGAPARRAY_H #define SPARSEGAPARRAY_H #include "HashMap.h" #include "GapArray.h" #include "BitVector.h" // Template base storage for the sparse gap array template class SparseBaseStorage { public: // void resize(size_t n) { m_data.resize(n); } // inline void set(size_t i, IntType c) { m_data[i] = c; } // Attempt to set the value using an atomic update // Returns false if the update fails inline bool setCAS(size_t i, IntType oldV, IntType newV) { assert(oldV != getMax() && newV <= getMax() && oldV != newV); bool success = __sync_bool_compare_and_swap(&m_data[i], oldV, newV); return success; } // inline IntType get(size_t i) const { return m_data[i]; } inline static size_t getMax() { static size_t max = std::numeric_limits::max(); return max; } // size_t size() const { return m_data.size(); } private: // typedef std::vector BaseStorageVector; BaseStorageVector m_data; }; static const uint8_t storage4_offset_mask[]={0xF0,0x0F}; // 11110000, 00001111 static const uint8_t storage4_shift[]={4, 0}; // specialized 4-bit per value base storage for the sparse gap array class SparseBaseStorage4 { public: SparseBaseStorage4() : m_numElems(0) {} // void resize(size_t n) { // With 4 bits per entry, we need n / 2 bytes of storage size_t numBytes = ((n & 1) == 0) ? n / 2 : (n / 2) + 1; m_data.resize(numBytes); m_numElems = n; } // inline void set(size_t i, uint8_t c) { assert(i < m_numElems); assert(c <= getMax()); size_t idx = i >> 1; // equivalent to i / 2 size_t offset = i & 1; // 0 if even, 1 if odd uint8_t mask = storage4_offset_mask[offset]; uint8_t& elem = m_data[idx]; // Clear current value elem &= ~mask; // Set new value elem |= c << storage4_shift[offset]; } // Attempt to set the value using an atomic update // Returns false if the update fails inline bool setCAS(size_t i, uint8_t oldV, uint8_t newV) { assert(i < m_numElems); assert(oldV < getMax() && newV <= getMax()); assert(oldV != newV); size_t idx = i >> 1; // equivalent to i / 2 size_t offset = i & 1; // 0 if even, 1 if odd uint8_t mask = storage4_offset_mask[offset]; uint8_t oldElem = m_data[idx]; // If the count in the stored element has changed since this // function was called, return false uint8_t currV = (oldElem & mask) >> storage4_shift[offset]; if(currV != oldV) return false; // Calculate the new element to swap in uint8_t newElem = oldElem; newElem &= ~mask; newElem |= newV << storage4_shift[offset]; // Perform the update bool success = __sync_bool_compare_and_swap(&m_data[idx], oldElem, newElem); return success; } // inline uint8_t get(size_t i) const { assert(i < m_numElems); size_t idx = i >> 1; // equivalent to i / 2 size_t offset = i & 1; // 0 if even, 1 if odd uint8_t mask = storage4_offset_mask[offset]; uint8_t elem = m_data[idx]; elem &= mask; elem >>= storage4_shift[offset]; assert(elem <= getMax()); return elem; } inline static size_t getMax() { return 15; } // size_t size() const { return m_numElems; } private: // typedef std::vector BaseStorageVector; BaseStorageVector m_data; size_t m_numElems; }; // specialized 1-bit per value base storage for the sparse gap array // used for removing entries from an fm-index when the count // will not exceed 1. class SparseBaseStorage1 { public: SparseBaseStorage1() : m_numElems(0) {} // void resize(size_t n) { m_numElems = n; m_bitVector.resize(n); } // Set bit i from oldV to newV using a compare and swap // Returns false if the update fails inline bool setCAS(size_t i, uint8_t oldV, uint8_t newV) { assert(i < m_numElems); assert(oldV == 0); assert(newV == 1); return m_bitVector.updateCAS(i, oldV, newV); } // inline void set(size_t i, uint8_t c) { assert(i < m_numElems); assert(c <= getMax()); m_bitVector.set(i, true); } // inline uint8_t get(size_t i) const { assert(i < m_numElems); return m_bitVector.test(i) ? 1 : 0; } inline static size_t getMax() { return 1; } // size_t size() const { return m_numElems; } private: // BitVector m_bitVector; size_t m_numElems; }; // The SparseGapArray has two levels of storage. // The first level uses x bits to store counts // up to 2**x for n elements in the array. // If the count for a particular element exceeds 2**x // then an entry in the overflow hash table is created // allowing arbitrary values to be stored. This // class is optimized to allow the base storage to be updated // concurrently with compare and swap operations. Any overflowed // updates must be serialized though incrementOverflowSerial // template class SparseGapArray : public GapArray { public: SparseGapArray() : m_rankZeroCount(0) {} ~SparseGapArray() { //printf("SparseGapArray -- n: %zu overflow: %zu (%lf)\n", m_baseStorage.size(), m_overflow.size(), (double)m_overflow.size() / m_baseStorage.size()); } // void resize(size_t n) { m_baseStorage.resize(n); } // Attempt to increment a value in the GapArray using a compare and swap function // This call can fail to perform the update and return false. In this case // the calling code is responsible for serializing access to this data structure // and calling incrementSerial bool attemptBaseIncrement(size_t i) { assert(i < m_baseStorage.size()); bool success = false; // Rank zero optimization // When merging two indices, all reads // start at rank 0. This would cause many serial // updates to the overflow array so we optimize // for this case by doing a compare and swap update // of a large integer value if the rank is zero. if(i == 0) { do { size_t count = m_rankZeroCount; success = __sync_bool_compare_and_swap(&m_rankZeroCount, count, count+1); } while(!success); return true; } success = false; do { size_t count = m_baseStorage.get(i); if(count == getBaseMax()) return false; success = m_baseStorage.setCAS(i, count, count + 1); } while(!success); return success; } // Increment the value for rank i in the overflow array. This call must be serialized // between any threads. void incrementOverflowSerial(size_t i) { assert(i != 0); assert(i < m_baseStorage.size()); size_t count = m_baseStorage.get(i); assert(count == getBaseMax()); // Check if the overflow map has a value for this index already // if not, enter one if(m_overflow.count(i) == 0) initOverflow(i, count); incrementOverflow(i); } // void initOverflow(size_t i, OverflowStorage c) { m_overflow.insert(std::make_pair(i, c)); } // void incrementOverflow(size_t i) { // precondition: there must be an entry in the hash for this key assert(m_overflow.count(i) != 0); ++m_overflow[i]; } // size_t get(size_t i) const { // rank zero optimization if(i == 0) return m_rankZeroCount; size_t count = m_baseStorage.get(i); if(count == getBaseMax()) { typename OverflowHash::const_iterator iter = m_overflow.find(i); // If there is no entry in the overflow table yet // the count is exactly the maximum value representable // in the base storage if(iter == m_overflow.end()) return count; else return iter->second; } else { return count; } } // size_t getBaseMax() const { return BaseStorage::getMax(); } // size_t size() const { return m_baseStorage.size(); } private: typedef SparseHashMap OverflowHash; OverflowHash m_overflow; BaseStorage m_baseStorage; size_t m_rankZeroCount; }; typedef SparseGapArray SparseGapArray1; typedef SparseGapArray SparseGapArray4; typedef SparseGapArray, size_t> SparseGapArray8; typedef SparseGapArray, size_t> SparseGapArray16; typedef SparseGapArray, size_t> SparseGapArray32; #endif ================================================ FILE: src/SGA/SuffixTools/SuffixArray.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SuffixArray - Generalized suffix array // #include "SuffixArray.h" #include "InverseSuffixArray.h" #include "bucketSort.h" #include "SuffixCompare.h" #include "mkqs.h" #include "SACAInducedCopying.h" #include "Timer.h" #include "SAReader.h" #include "SAWriter.h" #include "BWTWriter.h" // Read a suffix array from a file SuffixArray::SuffixArray(const std::string& filename) { SAReader reader(filename); reader.read(this); } // Construct the suffix array for a table of reads SuffixArray::SuffixArray(const ReadTable* pRT, int numThreads, bool silent) { //Timer timer("SuffixArray Construction", silent); saca_induced_copying(this, pRT, numThreads, silent); } // Initialize a suffix array for the strings in RT void SuffixArray::initialize(const ReadTable& rt) { size_t n = rt.countSumLengths() + rt.getCount(); initialize(n, rt.getCount()); // Fill the data table with the linear ordering of the suffixes size_t count = 0; for(size_t i = 0; i < rt.getCount(); ++i) { // + 1 below is for the empty suffix (is it actually needed?) for(size_t j = 0; j < rt.getRead(i).seq.length() + 1; ++j) { m_data[count++] = SAElem(i, j); } } } void SuffixArray::initialize(size_t num_suffixes, size_t num_strings) { m_data.resize(num_suffixes); m_numStrings = num_strings; } // Validate the suffix array using the read table void SuffixArray::validate(const ReadTable* pRT) const { size_t maxIdx = pRT->getCount(); size_t n = m_data.size(); // Exit if there is nothing to do if(n == 0) return; // Compute the ISA InverseSuffixArray isa(*this); // Validate the ISA is a permutation of 1..n, this implies that the id,pos pairs of the SA are valid isa.validate(); size_t empty_count = 0; // Ensure that the suffix at pos i is lexographically lower than the suffix at i + 1 using the full string for(size_t i = 0; i < n - 1; ++i) { SAElem id1 = m_data[i]; SAElem id2 = m_data[i+1]; assert(id1.getID() < maxIdx); std::string suffix1 = pRT->getRead(id1.getID()).seq.getSuffixString(id1.getPos()); std::string suffix2 = pRT->getRead(id2.getID()).seq.getSuffixString(id2.getPos()); if(suffix1.length() == 1) ++empty_count; bool suffixValidated = true; if(suffix1 == suffix2) { suffixValidated = id1.getID() < id2.getID(); } else { suffixValidated = suffix1 < suffix2; } if(!suffixValidated) { std::cerr << "Validation failure: " << suffix1 << " is not less than " << suffix2 << " ids: " << id1.getID() << "," << id2.getID() << "\n"; assert(suffix1 < suffix2); } } assert(m_numStrings == empty_count); } // void SuffixArray::removeReads(const NumericIDSet& idSet) { // Early exit if the idset is empty if(idSet.empty()) return; SAElemVector newData; newData.reserve(m_data.size()); for(size_t idx = 0; idx < m_data.size(); ++idx) { SAElem id = m_data[idx]; if(idSet.find(id.getID()) == idSet.end()) { // not on the delete list newData.push_back(id); } } m_data.swap(newData); m_numStrings -= idSet.size(); } // Get the suffix cooresponding to idx using the read table std::string SuffixArray::getSuffix(size_t idx, const ReadTable* pRT) const { SAElem id = m_data[idx]; return pRT->getRead(id.getID()).seq.getSuffixString(id.getPos()); } // Return the length of the suffix corresponding to elem size_t SuffixArray::getSuffixLength(const ReadTable* pRT, const SAElem elem) const { size_t readLength = pRT->getReadLength(elem.getID()); return readLength - elem.getPos(); } // Print the suffix array void SuffixArray::print(const ReadTable* pRT) const { std::cout << "i\tSA(i)\n"; for(size_t i = 0; i < m_data.size(); ++i) { SAElem id1 = m_data[i]; std::string suffix = !id1.isEmpty() ? getSuffix(i, pRT) : ""; int pos = id1.getPos(); char b; if(pos == 0) b = '$'; else b = pRT->getRead(id1.getID()).seq.get(pos - 1); std::cout << i << "\t" << id1 << "\t" << b << "\t" << suffix << "\n"; } } // Print the suffix array void SuffixArray::print() const { std::cout << "i\tSA(i)\n"; for(size_t i = 0; i < m_data.size(); ++i) { std::cout << i << "\t" << m_data[i] << "\n"; } } // write the suffix array to a file void SuffixArray::write(const std::string& filename) { SAWriter writer(filename); writer.write(this); } // write the suffix array to a file void SuffixArray::writeBWT(const std::string& filename, const ReadTable* pRT) { //RLBWTWriter writer(filename); IBWTWriter* pWriter = BWTWriter::createWriter(filename); pWriter->write(this, pRT); delete pWriter; } // write the index of the suffix array to a file void SuffixArray::writeIndex(std::string& filename) { SAWriter writer(filename); writer.writeHeader(m_numStrings, m_numStrings); for(size_t i = 0; i < m_data.size(); ++i) { if(m_data[i].isFull()) writer.writeElem(m_data[i]); } } /*template inline std::vector erase_indices(const std::vector& data, std::vector& indicesToDelete) { if(indicesToDelete.empty()) return data; std::vector ret; ret.reserve(data.size() - indicesToDelete.size()); std::sort(indicesToDelete.begin(), indicesToDelete.end()); // new we can assume there is at least 1 element to delete. copy blocks at a time. std::vector::const_iterator itBlockBegin = data.begin(); for(std::vector::const_iterator it = indicesToDelete.begin(); it != indicesToDelete.end(); ++ it) { std::vector::const_iterator itBlockEnd = data.begin() + *it; if(itBlockBegin != itBlockEnd) { std::copy(itBlockBegin, itBlockEnd, std::back_inserter(ret)); } itBlockBegin = itBlockEnd + 1; } // copy last block. if(itBlockBegin != data.end()) { std::copy(itBlockBegin, data.end(), std::back_inserter(ret)); } return ret; }*/ //JEREMIAH void SuffixArray::writeIndex() { SAElemVector sae; for(int i = 1; i < m_data.size(); ++i) { if(m_data[i].isFull()) sae.push_back(m_data[i]); } m_data = sae; } // Output operator std::ostream& operator<<(std::ostream& out, const SuffixArray& sa) { // Write the size and number of strings out << sa.m_data.size() << "\n"; out << sa.m_numStrings << "\n"; for(size_t i = 0; i < sa.m_data.size(); ++i) { out << sa.m_data[i] << "\n"; } return out; } // Input operator std::istream& operator>>(std::istream& in, SuffixArray& sa) { // Read the size and number of strings size_t n; in >> n; in >> sa.m_numStrings; sa.m_data.resize(n); size_t i = 0; SAElem id; while(in >> id) sa.m_data[i++] = id; assert(i == n); return in; } ================================================ FILE: src/SGA/SuffixTools/SuffixArray.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // SuffixArray - Generalized suffix array // #ifndef SUFFIXARRAY_H #define SUFFIXARRAY_H #include "STCommon.h" #include "ReadTable.h" #include "Match.h" class LCPArray; class SuffixArray { public: // SuffixArray() {} SuffixArray(const std::string& filename); SuffixArray(const ReadTable* pRT, int numThreads, bool silent = false); // Construction/Validation functions void initialize(const ReadTable& rt); void initialize(size_t num_suffixes, size_t num_strings); void validate(const ReadTable* pRT) const; void sort(const ReadTable* pRT); // Remove all the suffixes from the SA that have an id in idSet void removeReads(const NumericIDSet& idSet); // Simple accessors inline const SAElem& get(size_t idx) const { assert(idx < m_data.size()); return m_data[idx]; } inline void set(size_t idx, SAElem e) { m_data[idx] = e; } size_t getSize() const { return m_data.size(); } size_t getNumStrings() const { return m_numStrings; } std::string getSuffix(size_t idx, const ReadTable* pRT) const; size_t getSuffixLength(const ReadTable* pRT, const SAElem elem) const; // Operators friend std::ostream& operator<<(std::ostream& out, const SuffixArray& sa); friend std::istream& operator>>(std::istream& in, SuffixArray& sa); // Output the entire suffix array void write(const std::string& filename); // Write the BWT directly to disk void writeBWT(const std::string& filename, const ReadTable* pRT); // Output the suffix array index // The suffix array index are the full-length suffixes (the entire string) // of the suffix array, sorted into lexographical order // The file format is the same as the suffix array // This is used during the BWT indexing and is the only part of the // suffix array that we need void writeIndex(std::string& filename); void writeIndex(); //JEREMIAH // Print funcs void print() const; void print(const ReadTable* pRT) const; // friends friend void saca_induced_copying(SuffixArray* pSA, const ReadTable* pRT, int numThreads, bool silent); friend class SAReader; friend class SAWriter; private: // Data members SAElemVector m_data; size_t m_numStrings; }; #endif ================================================ FILE: src/SGA/SuffixTools/SuffixCompare.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SuffixCompareRadix // #include "SuffixCompare.h" // SuffixCompareRadix::SuffixCompareRadix(const ReadTable* pRT) : m_pRT(pRT), m_pNumSuffixLUT(0) { m_bucketOffset = 0; m_bucketLen = 6; initializeNumSuffixLUT(); } // SuffixCompareRadix::SuffixCompareRadix(const ReadTable* pRT, int bucket_len) : m_pRT(pRT), m_bucketOffset(0), m_bucketLen(bucket_len), m_pNumSuffixLUT(0) { if(m_bucketOffset % m_bucketLen != 0) { std::cerr << "Error, bucket offset must be a multiple of bucket length\n"; assert(false); } initializeNumSuffixLUT(); } // SuffixCompareRadix::~SuffixCompareRadix() { delete [] m_pNumSuffixLUT; } void SuffixCompareRadix::initializeNumSuffixLUT() { m_pNumSuffixLUT = new int[m_bucketLen]; for(int i = 0; i < (int)m_bucketLen; ++i) { m_pNumSuffixLUT[i] = calcNumSuffixes(i); } } // Get the bucket for a particular SAElem int SuffixCompareRadix::getBucket(SAElem x) const { //std::cout << "Finding bucket for " << x << "\n"; const DNAString& read = m_pRT->getRead(x.getID()).seq; size_t suffix_start = x.getPos() + m_bucketOffset; const char* suffix = read.getSuffix(suffix_start); size_t suffix_len = read.getSuffixLength(suffix_start); size_t stop = std::min(m_bucketLen, suffix_len); int rank = 0; for(size_t i = 0; i < stop; ++i) { char b = suffix[i]; rank += numPredSuffixes(b, m_bucketLen - i); } return rank; } // void SuffixCompareRadix::printElem(SAElem& x) const { const DNAString& read = m_pRT->getRead(x.getID()).seq; std::cout << x << " = " << read.getSuffixString(x.getPos()) << "\n"; } // void SuffixCompareRadix::setBucketDepth(int depth) { m_bucketOffset = m_bucketLen * depth; } // int SuffixCompareRadix::calcNumSuffixes(int maxLen) const { int r = 0; for(int i = 0; i <= maxLen; ++i) r += (1 << 2*i); return r; } bool SuffixCompareRadix::isBucketDegenerate(int index) const { if(index == 0) return true; else { for(int i = m_bucketLen; i >= 2; --i) { --index; int block_size = calcNumSuffixes(i - 1); if(index % block_size == 0) return true; else { int block = index / block_size; index -= block * block_size; } } } return false; } // int SuffixCompareRadix::getNumBuckets() const { return calcNumSuffixes(m_bucketLen); } // Compare two suffixes by ID // Precondition: the suffixes are sorted by sequence already bool SuffixCompareID::operator()(SAElem x, SAElem y) const { const SeqItem& rx = m_pRT->getRead(x.getID()); const SeqItem& ry = m_pRT->getRead(y.getID()); return rx.id < ry.id; } ================================================ FILE: src/SGA/SuffixTools/SuffixCompare.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // SuffixCompare - Suffix Comparator classes // Used for histogram/bucket sort, mkqs and std::sort // #ifndef SUFFIXCOMPARE_H #define SUFFIXCOMPARE_H #include "STCommon.h" #include "ReadTable.h" // Suffix comparator object for radix-like sorts (bucket/histogram and MKQS) class SuffixCompareRadix { public: SuffixCompareRadix(const ReadTable* pRT); SuffixCompareRadix(const ReadTable* pRT, int bucket_len); ~SuffixCompareRadix(); // void initializeNumSuffixLUT(); // Bucket function int getBucket(SAElem x) const; // Get the character at position d for the SAElem inline char getChar(SAElem& x, int d) const { return m_pRT->getChar(x.getID(), x.getPos() + d); } // Calculate the number of possible suffixes int calcNumSuffixes(int maxLen) const; // Get the number of possible suffixes of length maxLen using the lookup table inline int getNumSuffixes(int maxLen) const { return m_pNumSuffixLUT[maxLen]; } // Get the suffix character string corresponding to this element inline const char* getChrPtr(SAElem& x) const { return m_pRT->getRead(x.getID()).seq.getSuffix(x.getPos()); } // Calculate the number of suffixes that precede the first instance of b for a // given maximum suffix length inline int numPredSuffixes(char b, int maxLen) const { // base case int rb = getBaseRank(b); if(rb == 0) return 0; int block_size = getNumSuffixes(maxLen - 1); return block_size * (rb - 1) + 1; } // Return the number of buckets needed for bucket sort int getNumBuckets() const; // Return the bucket offset size_t getBucketOffset() const { return m_bucketOffset; } // Get the bucket length size_t getBucketLen() const { return m_bucketLen; } // Set the offset void setBucketDepth(int depth); // Return true if a bucket is degenerate ie it cannot be subdivided any further bool isBucketDegenerate(int index) const; // Print the element void printElem(SAElem& x) const; private: // Disallow default and copy constructor SuffixCompareRadix() {} SuffixCompareRadix(const SuffixCompareRadix& /*other*/) { assert(false); } const ReadTable* m_pRT; size_t m_bucketOffset; size_t m_bucketLen; int* m_pNumSuffixLUT; }; // Compare two suffixes by their ID // This is used for the final pass, after suffixes has been compared by sequence class SuffixCompareID { public: SuffixCompareID(const ReadTable* pRT) : m_pRT(pRT) {} // Comparator function bool operator()(SAElem x, SAElem y) const; private: // default is not accessible SuffixCompareID() : m_pRT(0) {} const ReadTable* m_pRT; }; // Compare two suffixes by their index in the read table // This is used for the final pass, after suffixes has been compared by sequence class SuffixCompareIndex { public: SuffixCompareIndex() {} // Comparator function inline bool operator()(SAElem x, SAElem y) const { return x.getID() < y.getID(); } private: }; #endif ================================================ FILE: src/SGA/Util/Alphabet.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Alphabet.h - Abstraction of the alphabet // that is used in the suffix array, fm-index, // etc data structures // #include "Alphabet.h" #include #include // IUPAC alphabet bool IUPAC::isUnambiguous(char c) { switch(c) { case 'A': case 'C': case 'G': case 'T': return true; default: return false; } } // Returns true if c is a valid ambiguity code bool IUPAC::isAmbiguous(char c) { switch(c) { case 'M': case 'R': case 'W': case 'S': case 'Y': case 'K': case 'V': case 'H': case 'D': case 'B': case 'N': return true; default: return false; } } // Returns true if c is a valid symbol in this alphabet bool IUPAC::isValid(char c) { return isUnambiguous(c) || isAmbiguous(c); } // std::string IUPAC::getPossibleSymbols(char c) { switch(c) { case 'A': return "A"; case 'C': return "C"; case 'G': return "G"; case 'T': return "T"; case 'M': return "AC"; case 'R': return "AG"; case 'W': return "AT"; case 'S': return "CG"; case 'Y': return "CT"; case 'K': return "GT"; case 'V': return "ACG"; case 'H': return "ACT"; case 'D': return "AGT"; case 'B': return "CGT"; case 'N': return "ACGT"; default: return ""; } } // AlphaCount template<> const size_t AlphaCount8::maxValue = std::numeric_limits::max(); template<> const size_t AlphaCount16::maxValue = std::numeric_limits::max(); template<> const size_t AlphaCount64::maxValue = std::numeric_limits::max(); ================================================ FILE: src/SGA/Util/Alphabet.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Alphabet.h - Abstraction of the alphabet // that is used in the suffix array, fm-index, // etc data structures // #ifndef ALPHABET_H #define ALPHABET_H //#define USE_SSE 1 //#define ALPHACOUNT_VALIDATE 1 #include #include #include #include #if USE_SSE #include #include #endif #include #include #include #include "Util.h" // // Constants // // TODO: Refactor these into a namespaced alphabet like DNA_ALPHABET below const uint8_t ALPHABET_SIZE = 5; const char ALPHABET[ALPHABET_SIZE] = {'A', 'C', 'G', 'T', '$'}; const char RANK_ALPHABET[ALPHABET_SIZE] = {'$', 'A', 'C', 'G', 'T'}; const uint8_t DNA_ALPHABET_SIZE = 4; typedef uint64_t BaseCount; namespace DNA_ALPHABET { static const uint8_t s_dnaLexoRankLUT[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,0, 0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; inline static uint8_t getBaseRank(char b) { return s_dnaLexoRankLUT[static_cast(b)]; } inline char getBase(size_t idx) { assert(idx < DNA_ALPHABET_SIZE); return ALPHABET[idx]; } static const uint8_t size = 4; }; namespace BWT_ALPHABET { static const uint8_t s_bwtLexoRankLUT[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,2,0,0,0,3,0,0,0,0,0,0,0,0, 0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; static const uint8_t size = 5; inline static uint8_t getRank(char b) { return s_bwtLexoRankLUT[static_cast(b)]; } inline char getChar(size_t idx) { return RANK_ALPHABET[idx]; } }; // IUPAC ambiguity alphabet namespace IUPAC { // Returns true if c is [ACGT] bool isUnambiguous(char c); // Returns true if c is a valid ambiguity code bool isAmbiguous(char c); // Returns true if c is a valid symbol in this alphabet bool isValid(char c); // Returns a string defining the possible unambiguous bases for each symbol // in the alphabet std::string getPossibleSymbols(char c); }; // // A simple class holding the count for each base of a DNA string (plus the terminator) // Note that this uses RANK_ALPHABET template class AlphaCount { public: // inline AlphaCount() { clear(); } inline void clear() { memset(m_counts, 0, ALPHABET_SIZE * sizeof(Storage)); } // inline void set(char b, Storage v) { m_counts[getBaseRank(b)] = v; } // inline void setByIdx(size_t i, Storage v) { m_counts[i] = v; } // inline void increment(char b) { int br = getBaseRank(b); #ifdef ALPHACOUNT_VALIDATE assert(m_counts[br] != maxValue); #endif m_counts[br]++; } // inline void add(char b, Storage v) { int br = getBaseRank(b); #ifdef ALPHACOUNT_VALIDATE assert(m_counts[br] + v <= maxValue); #endif m_counts[br] += v; } // inline void subtract(char b, Storage v) { int br = getBaseRank(b); #ifdef ALPHACOUNT_VALIDATE assert(m_counts[br] > v); #endif m_counts[br] -= v; } // inline Storage get(char b) const { return m_counts[getBaseRank(b)]; } // inline Storage getByIdx(const int i) const { return m_counts[i]; } // Return the base for index i static char getBase(size_t i) { return RANK_ALPHABET[i]; } // Return the maximum possible count for a symbol static size_t getMaxValue() { return maxValue; } // Swap the (A,T) and (C,G) entries, which turns the AlphaCount // into the AlphaCount for the complemented sequence inline void complement() { Storage tmp; // A,T tmp = m_counts[4]; m_counts[4] = m_counts[1]; m_counts[1] = tmp; // C,G tmp = m_counts[3]; m_counts[3] = m_counts[2]; m_counts[2] = tmp; } // Return the sum of the basecounts for characters lexo. lower than b inline size_t getLessThan(char b) const { size_t out = 0; int stop = getBaseRank(b); for(int i = 0; i < stop; ++i) out += m_counts[i]; return out; } // Returns the number of non-zero counts uint8_t getNumNonZero() const { uint8_t count = 0; for(int i = 0; i < ALPHABET_SIZE; ++i) { if(m_counts[i] > 0) count += 1; } return count; } // Returns true if only one of the DNA characters // has a non-zero count inline bool hasUniqueDNAChar() { // index 0 is the '$' character, which we skip bool nonzero = false; for(int i = 1; i < ALPHABET_SIZE; ++i) { if(m_counts[i] > 0) { // if nonzero is set, there is some other nonzero character, return false if(nonzero) return false; else nonzero = true; } } return nonzero; } // Returns true if any DNA char // has a non-zero count inline bool hasDNAChar() { // index 0 is the '$' character, which we skip for(int i = 1; i < ALPHABET_SIZE; ++i) { if(m_counts[i] > 0) return true; } return false; } // inline char getMaxBase() const { char base; Storage val; getMax(base, val); return base; } // inline char getMaxDNABase() const { Storage max = 0; int maxIdx = 0; for(int i = 1; i < ALPHABET_SIZE; ++i) { if(m_counts[i] > max) { max = m_counts[i]; maxIdx = i; } } assert(max > 0); return RANK_ALPHABET[maxIdx]; } // inline Storage getMaxCount() const { char base; Storage val; getMax(base, val); return val; } // inline void getMax(char& base, Storage& val) const { Storage max = 0; int maxIdx = 0; for(int i = 0; i < ALPHABET_SIZE; ++i) { if(m_counts[i] > max) { max = m_counts[i]; maxIdx = i; } } base = RANK_ALPHABET[maxIdx]; val = max; } // inline size_t getSum() const { size_t sum = m_counts[0]; sum += m_counts[1]; sum += m_counts[2]; sum += m_counts[3]; sum += m_counts[4]; return sum; } // Sort the DNA bases into count order and // write them to pOut. This does not include the '$' symbol inline void getSorted(char* pOut, size_t len) const { assert(len >= ALPHABET_SIZE); (void)len; for(size_t i = 0; i < ALPHABET_SIZE; ++i) pOut[i] = RANK_ALPHABET[i]; std::sort(pOut, pOut+ALPHABET_SIZE, AlphaCountCompareDesc(this)); } // Return the unique DNA character described by the alphacount // Returns '$' if no such character exists // Asserts if more than one character is described by the alphacount inline char getUniqueDNAChar() { char r = '$'; for(int i = 1; i < ALPHABET_SIZE; ++i) { if(m_counts[i] > 0) { assert(r == '$'); // lookup the character in the ranked alphabet, since the elements // are stored in lexographic order r = RANK_ALPHABET[i]; } } return r; } // Operators friend std::ostream& operator<<(std::ostream& out, const AlphaCount& ac) { std::copy(ac.m_counts, ac.m_counts+ALPHABET_SIZE, std::ostream_iterator(out, " ")); return out; } friend std::istream& operator>>(std::istream& in, AlphaCount& ac) { for(size_t i = 0; i < ALPHABET_SIZE; ++i) in >> ac.m_counts[i]; return in; } inline friend AlphaCount operator+(const AlphaCount& left, const AlphaCount& right) { AlphaCount out; out.m_counts[0] = left.m_counts[0] + right.m_counts[0]; out.m_counts[1] = left.m_counts[1] + right.m_counts[1]; out.m_counts[2] = left.m_counts[2] + right.m_counts[2]; out.m_counts[3] = left.m_counts[3] + right.m_counts[3]; out.m_counts[4] = left.m_counts[4] + right.m_counts[4]; return out; } inline AlphaCount& operator+=(const AlphaCount& other) { m_counts[0] += other.m_counts[0]; m_counts[1] += other.m_counts[1]; m_counts[2] += other.m_counts[2]; m_counts[3] += other.m_counts[3]; m_counts[4] += other.m_counts[4]; return *this; } // Specialization for add/subtracing a small AlphaCount to/from a large alphacount inline friend void alphacount_add(AlphaCount& lhs, const AlphaCount& rhs); inline friend void alphacount_subtract(AlphaCount& lhs, const AlphaCount& rhs); inline friend void alphacount_add16(AlphaCount& lhs, const AlphaCount& rhs); inline friend void alphacount_subtract16(AlphaCount& lhs, const AlphaCount& rhs); // As the counts are unsigned integers, each value in left // must be larger or equal to value in right. The calling function // must guarentee this. friend AlphaCount operator-(const AlphaCount& left, const AlphaCount& right) { AlphaCount out; out.m_counts[0] = left.m_counts[0] - right.m_counts[0]; out.m_counts[1] = left.m_counts[1] - right.m_counts[1]; out.m_counts[2] = left.m_counts[2] - right.m_counts[2]; out.m_counts[3] = left.m_counts[3] - right.m_counts[3]; out.m_counts[4] = left.m_counts[4] - right.m_counts[4]; return out; } inline friend bool operator==(const AlphaCount& left, const AlphaCount& right) { return left.m_counts[0] == right.m_counts[0] && left.m_counts[1] == right.m_counts[1] && left.m_counts[2] == right.m_counts[2] && left.m_counts[3] == right.m_counts[3] && left.m_counts[4] == right.m_counts[4]; } inline friend bool operator!=(const AlphaCount& left, const AlphaCount& right) { return !(left == right); } private: Storage m_counts[ALPHABET_SIZE]; const static size_t maxValue; struct AlphaCountCompareDesc { AlphaCountCompareDesc(const AlphaCount* p) : pAC(p) {} bool operator()(char a, char b) { return pAC->get(a) > pAC->get(b); } const AlphaCount* pAC; }; }; // Typedef commonly used AlphaCounts typedef AlphaCount AlphaCount64; typedef AlphaCount AlphaCount16; typedef AlphaCount AlphaCount8; // inline void alphacount_add16(AlphaCount64& lhs, const AlphaCount16& rhs) { lhs.m_counts[0] += rhs.m_counts[0]; lhs.m_counts[1] += rhs.m_counts[1]; lhs.m_counts[2] += rhs.m_counts[2]; lhs.m_counts[3] += rhs.m_counts[3]; lhs.m_counts[4] += rhs.m_counts[4]; } inline void alphacount_subtract16(AlphaCount64& lhs, const AlphaCount16& rhs) { // This function should only be used when lhs is larger the rhs // the calling function must guarentee this lhs.m_counts[0] -= rhs.m_counts[0]; lhs.m_counts[1] -= rhs.m_counts[1]; lhs.m_counts[2] -= rhs.m_counts[2]; lhs.m_counts[3] -= rhs.m_counts[3]; lhs.m_counts[4] -= rhs.m_counts[4]; } // inline void alphacount_add(AlphaCount64& lhs, const AlphaCount8& rhs) { lhs.m_counts[0] += rhs.m_counts[0]; lhs.m_counts[1] += rhs.m_counts[1]; lhs.m_counts[2] += rhs.m_counts[2]; lhs.m_counts[3] += rhs.m_counts[3]; lhs.m_counts[4] += rhs.m_counts[4]; } inline void alphacount_subtract(AlphaCount64& lhs, const AlphaCount8& rhs) { // This function should only be used when lhs is larger the rhs // the calling function must guarentee this lhs.m_counts[0] -= rhs.m_counts[0]; lhs.m_counts[1] -= rhs.m_counts[1]; lhs.m_counts[2] -= rhs.m_counts[2]; lhs.m_counts[3] -= rhs.m_counts[3]; lhs.m_counts[4] -= rhs.m_counts[4]; } #endif ================================================ FILE: src/SGA/Util/BWT4Codec.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWT4Codec - Encoder/decoder for a BWT // string over the alphabet $ACGT using 4 // bits per symbol // #ifndef BWT4CODEC_H #define BWT4CODEC_H #include "Alphabet.h" static const uint8_t bwt4_offset_mask[]={0xF0,0x0F}; static const uint8_t bwt4_offset_shift[]={4, 0}; class BWT4Codec { public: // The data is stored 2 characters per byte // The data pattern is: // 11110000 first symbol // 00001111 second symbol typedef uint8_t UNIT_TYPE; static const int SYMBOLS_PER_UNIT = 2; // Encoded the character b into a value inline uint8_t encode(char b) const { return BWT_ALPHABET::getRank(b); } // Decode the value c into a character inline char decode(uint8_t c) const { return BWT_ALPHABET::getChar(c); } // Returns the number of units required to encode // a string of length n inline size_t getRequiredUnits(size_t n) const { return (n + SYMBOLS_PER_UNIT - 1) / SYMBOLS_PER_UNIT; } // Returns the number of symbols that can be stored // in n units inline size_t getCapacity(size_t n) const { return n * SYMBOLS_PER_UNIT; } // Returns the index of the unit to store the // i-th symbol of the string inline size_t getUnitIndex(const size_t& i) const { return i >> 1; // equivalent to i / 2 } // Returns the position within a unit that the i-th symbol // should be stored in inline size_t getUnitOffset(const size_t& i) const { // this position is the k-th symbol of the unit return i & 1; // equivalent to i % 2 } // Return the amount that a value must be shifted to // store a code at a given offset inline uint8_t getOffsetShift(size_t offset) const { return 4*(1 - offset); } // Store the value v at the i-th encoded position in the data array inline void store(UNIT_TYPE* pData, size_t i, char b) const { UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); uint8_t shift = bwt4_offset_shift[offset]; // Clear the currrent position uint16_t mask = bwt4_offset_mask[offset]; unit &= ~mask; // Set position UNIT_TYPE code = encode(b); code <<= shift; unit |= code; } // get the character stored at position i inline char get(const UNIT_TYPE* pData, const size_t& i) const { const UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); uint16_t mask = bwt4_offset_mask[offset]; UNIT_TYPE code = unit & mask; uint8_t shift = bwt4_offset_shift[offset]; code >>= shift; return decode(code); } }; #endif ================================================ FILE: src/SGA/Util/BWTCodec.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BWTCodec - Encoder/decoder for a BWT // string over the alphabet $ACGT using // 3 bits per symbol // #ifndef BWTCODEC_H #define BWTCODEC_H #include "Alphabet.h" static const uint16_t bwt_offset_mask[]={0xE000,0x1C00,0x0380,0x0070,0x000E}; static const uint8_t bwt_offset_shift[]={13, 10, 7, 4, 1}; class BWTCodec { public: // The data is stored 5 characters per uint16_t // The data pattern is: // 11100000 00000000 first symbol // 00011100 00000000 second symbol, etc typedef uint16_t UNIT_TYPE; static const int SYMBOLS_PER_UNIT = 5; // Encoded the character b into a value inline uint8_t encode(char b) const { return BWT_ALPHABET::getRank(b); } // Decode the value c into a character inline char decode(uint8_t c) const { return BWT_ALPHABET::getChar(c); } // Returns the number of units required to encode // a string of length n inline size_t getRequiredUnits(size_t n) const { return (n + SYMBOLS_PER_UNIT - 1) / SYMBOLS_PER_UNIT; } // Returns the number of symbols that can be stored // in n units inline size_t getCapacity(size_t n) const { return n * SYMBOLS_PER_UNIT; } // Returns the index of the unit to store the // i-th symbol of the string inline size_t getUnitIndex(size_t i) const { return i / SYMBOLS_PER_UNIT; } // Returns the position within a unit that the i-th symbol // should be stored in inline size_t getUnitOffset(size_t i) const { // this position is the k-th symbol of the unit return i % SYMBOLS_PER_UNIT; } // Return the amount that a value must be shifted to // store a code at a given offset inline uint8_t getOffsetShift(size_t offset) const { return 1 + 3*(4 - offset); } // Store the value v at the i-th encoded position in the data array inline void store(UNIT_TYPE* pData, size_t i, char b) const { UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); uint8_t shift = getOffsetShift(offset); // Clear the currrent position uint16_t mask = bwt_offset_mask[offset]; unit &= ~mask; // Set position UNIT_TYPE code = encode(b); code <<= shift; unit |= code; } // get the character stored at position i inline char get(const UNIT_TYPE* pData, size_t i) const { const UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); uint16_t mask = bwt_offset_mask[offset]; UNIT_TYPE code = unit & mask; uint8_t shift = bwt_offset_shift[offset]; code >>= shift; return decode(code); } }; #endif ================================================ FILE: src/SGA/Util/Bamreader.cpp ================================================ #include "bamreader.h" bool Bamreader::bamToSeqRecordVector(SeqRecordVector &srv) { if (!m_reader.Open(m_bam) || !reader.SetRegion(m_region)) return false; BamTools::BamAlignment a; while (m_reader.GetNextAlignment()) } bool Bamreader::findBamIndex() { m_bai = m_bam.substr(0, m_bam.size()-3.append("bai")); return m_reader.OpenIndex(m_bai); } bool Bamreader::setBamRegion(int refid1, int refid2, int pos1, int pos2); ================================================ FILE: src/SGA/Util/BitChar.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BitChar - Fixed-size bitset of 8 bits // #include #include #include "BitChar.h" static unsigned char bc_mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; // void BitChar::set(unsigned char idx, bool v) { if(v) m_data = m_data | bc_mask[idx]; else m_data = m_data & ~bc_mask[idx]; } // bool BitChar::test(unsigned char idx) const { return m_data & bc_mask[idx]; } // void BitChar::flip(unsigned idx) { m_data = m_data ^ bc_mask[idx]; } // void printBinary(std::ostream& out, const BitChar& bc) { for(int i = 7; i >= 0; i--) { if(bc.test(i)) out << "1"; else out << "0"; } } // Update the value of bit idx from oldValue to newValue using an atomic compare and swap operation // Returns true if the update was successfully performed. bool BitChar::updateCAS(unsigned char idx, bool oldValue, bool newValue) { assert(oldValue != newValue); // Iterate attempts of the CAS operation until the desired bit has the correct value. while(1) { // Get the current value of the data. // If any thread updates d after this call the CAS will fail. unsigned char oldData = m_data; // Check if the bit is already set to newValue in our copy of the data. If so, // some other thread must have updated the value already so we return false. bool currValue = (oldData & bc_mask[idx]); if(currValue == newValue) return false; // Calculate the value of the data with the bit set to the correct value unsigned char newData; if(newValue) newData = oldData | bc_mask[idx]; //set the bit else newData = oldData & ~bc_mask[idx]; //clear the bit // perform the atomic CAS. this returns false if the real value of d does not match oldData bool success = __sync_bool_compare_and_swap(&m_data, oldData, newData); // If the update was successfully performed, return true. // Otherwise, some other thread must have updated a bit in this char so we iterate again. if(success) return true; } } // std::ostream& operator<<(std::ostream& out, const BitChar& bc) { int temp = bc.m_data; out << temp; return out; } // std::istream& operator>>(std::istream& in, BitChar& bc) { int temp; in >> temp; bc.m_data = (unsigned char)temp; return in; } // void BitChar::write(std::ostream& out) { out.write((char*)&m_data, sizeof(m_data)); } // void BitChar::read(std::istream& in) { in.read((char*)&m_data, sizeof(m_data)); } ================================================ FILE: src/SGA/Util/BitChar.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // BitChar - Fixed-size bitset of 8 bits // #ifndef BITCHAR_H #define BITCHAR_H #include struct BitChar { public: BitChar() : m_data(0) {} // Update the value of bit idx from oldValue to newValue using an atomic compare and swap operation // Returns true if the update was successfully performed. This is the only thread-safe way to update the BitChar bool updateCAS(unsigned char idx, bool oldValue, bool newValue); // set the bit at idx to the value u void set(unsigned char idx, bool v); // returns true if bit at idx is set bool test(unsigned char idx) const; // flips the bit at idx void flip(unsigned idx); // I/O friend std::ostream& operator<<(std::ostream& out, const BitChar& bc); friend std::istream& operator>>(std::istream& in, BitChar& bc); void write(std::ostream& out); void read(std::istream& in); private: volatile unsigned char m_data; }; #endif ================================================ FILE: src/SGA/Util/BitVector.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // BitVector - Vector of bits // #include "BitVector.h" #include #include // BitVector::BitVector() { initializeMutex(); } // BitVector::BitVector(size_t n) { initializeMutex(); resize(n); } void BitVector::initializeMutex() { int ret = pthread_mutex_init(&m_mutex, NULL); if(ret != 0) { std::cerr << "Mutex initialization in BitVector failed with error " << ret << ", aborting" << std::endl; exit(EXIT_FAILURE); } } // BitVector::~BitVector() { int ret = pthread_mutex_destroy(&m_mutex); if(ret != 0) { std::cerr << "Mutex destruction in BitVector failed with error " << ret << ", aborting" << std::endl; exit(EXIT_FAILURE); } } // void BitVector::resize(size_t n) { size_t num_bytes = (n % 8 == 0) ? n / 8 : (n / 8) + 1; m_data.resize(num_bytes); } // void BitVector::lock() { pthread_mutex_lock(&m_mutex); } // void BitVector::unlock() { pthread_mutex_unlock(&m_mutex); } // bool BitVector::updateCAS(size_t i, bool oldValue, bool newValue) { size_t byte = i / 8; assert(byte < m_data.size()); size_t offset = i - byte * 8; return m_data[byte].updateCAS(offset, oldValue, newValue); } // Set bit at position i to value v void BitVector::set(size_t i, bool v) { size_t byte = i / 8; assert(byte < m_data.size()); size_t offset = i - byte * 8; m_data[byte].set(offset, v); } // Test bit i bool BitVector::test(size_t i) const { size_t byte = i / 8; size_t offset = i - byte * 8; return m_data[byte].test(offset); } ================================================ FILE: src/SGA/Util/BitVector.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // BitVector - Vector of bits. The structure // can be locked by a mutex to guarentee atomic access. // #ifndef BITVECTOR_H #define BITVECTOR_H #include "BitChar.h" #include class BitVector { public: BitVector(); BitVector(size_t n); ~BitVector(); // Functions to acquire/release the mutex // The client code is responsible for acquiring // the lock before calling set(). Reading a bit with // test() is ok however. void lock(); void unlock(); // Update the bit at position i from oldValue to newValue using a // compare and swap operation. Returns true if the update is successful. bool updateCAS(size_t i, bool oldValue, bool newValue); void resize(size_t n); void set(size_t i, bool v); bool test(size_t i) const; size_t capacity() const { return m_data.size() * 8; } private: void initializeMutex(); std::vector m_data; pthread_mutex_t m_mutex; }; #endif ================================================ FILE: src/SGA/Util/BloomFilter.cpp ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- #include "BloomFilter.h" #include #include #include #include "MurmurHash3.h" // BloomFilter::BloomFilter() : m_occupancy(0) { #if TRACK_OCCUPANCY m_test_counter = 0; #endif } // void BloomFilter::initialize(size_t width, size_t num_hashes) { m_width = width; m_bitvector.resize(width); m_occupancy = 0; // Create seeds for murmer hash // TODO: Check how independent this method of selecting // hash function is... m_hashes.resize(num_hashes); for(size_t i = 0; i < m_hashes.size(); ++i) m_hashes[i] = rand(); } // void BloomFilter::add(const void* key, int num_bytes) { // Set h bits for(size_t i = 0; i < m_hashes.size(); ++i) { int64_t h[2]; MurmurHash3_x64_128(key, num_bytes, m_hashes[i], &h); size_t idx = h[0] % m_width; bool was_set = m_bitvector.updateCAS(idx, false, true); #if TRACK_OCCUPANCY // This call uses an atomic update and returns true if the // bit was sucessfully set if(was_set) { // A bit was set, update the occupancy bool set = false; do { size_t old_occ = m_occupancy; size_t new_occ = old_occ + 1; set = __sync_bool_compare_and_swap(&m_occupancy, old_occ, new_occ); } while(!set); } #else (void)was_set; #endif } } // bool BloomFilter::test(const void* key, int num_bytes) const { for(size_t i = 0; i < m_hashes.size(); ++i) { int64_t h[2]; MurmurHash3_x64_128(key, num_bytes, m_hashes[i], &h); size_t idx = h[0] % m_width; if(!m_bitvector.test(idx)) return false; } #if TRACK_OCCUPANCY m_test_counter++; if(m_test_counter % 500000 == 0) { double p = (double)m_occupancy / m_width; printf("WIDTH: %zu OCC: %zu\n", m_width, m_occupancy); printf("Access: %zu Occupancy: %zu P: %1.4lf\n", m_test_counter, m_occupancy, p); } #endif return true; } // void BloomFilter::printOccupancy() const { size_t set_count = 0; for(size_t i = 0; i < m_width; ++i) set_count += m_bitvector.test(i); printf("%zu out of %zu bits are set\n", set_count, m_width); } // void BloomFilter::printMemory() const { size_t bytes = m_bitvector.capacity(); double mb = (double)bytes / (1 << 20); printf("BloomFilter using %.1lf MB\n", mb); } ================================================ FILE: src/SGA/Util/BloomFilter.h ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- #ifndef BLOOM_FILTER_H #define BLOOM_FILTER_H #include #include #include #include #include "BitVector.h" //#define TRACK_OCCUPANCY 1 class BloomFilter { public: /** * @brief Default constructor. */ BloomFilter(); BloomFilter(size_t width, size_t num_hashes) { initialize(width, num_hashes); } /** * @brief Initialize the bloom filter. * * @param width The number of bits to use * @param num_hashes The number of hashes to use */ void initialize(size_t width, size_t num_hashes); /** * @brief Add an object to the collection * * @param key A pointer to the key data * @param num_bytes The number of bytes to read from the key */ void add(const void* key, int num_bytes); /** * @brief Test whether an object is in the collection * * @param key A pointer to the key data * @param num_bytes The number of bytes to read from the key * * @return true if the object is in the bloom filter */ bool test(const void* key, int num_bytes) const; /** * @brief Print the amount of memory used to stdout */ void printMemory() const; /** * @brief Count how many bits are set and print to stdout */ void printOccupancy() const; private: BitVector m_bitvector; std::vector m_hashes; size_t m_width; size_t m_occupancy; #if TRACK_OCCUPANCY mutable size_t m_test_counter; #endif }; #endif ================================================ FILE: src/SGA/Util/ClusterReader.cpp ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ClusterReader - Read in a file of read clusters. // This class conforms to the interface needed // for the SequenceProcessFramework concurrency lib // #include "ClusterReader.h" #include "Util.h" // ClusterReader::ClusterReader(const std::string& filename) : m_numConsumedLast(0), m_numConsumedTotal(0) { m_pReader = createReader(filename); } ClusterReader::~ClusterReader() { delete m_pReader; } // Read a cluster from the file and write its members // to out. Returns false if the read failed bool ClusterReader::generate(ClusterVector& out) { out.clear(); // Read a single cluster from the file. ClusterRecord record; bool good = readCluster(record); // Read failed, return false if(!good) return false; out.push_back(record); // Read the remaining records for this cluster int remaining = record.numElements - 1; for(int i = 0; i < remaining; ++i) { bool good = readCluster(record); if(!good) { std::cerr << "Error: expected " << remaining + 1 << " elements in the cluster but only read " << i+1 << "\n"; exit(1); } if(record.clusterID != out.front().clusterID) { std::cerr << "Error: cluster names do not match! " << record.clusterID << " != " << out.front().clusterID << "\n"; exit(1); } out.push_back(record); } m_numConsumedLast = 1; m_numConsumedTotal += 1; return true; } // bool ClusterReader::readCluster(ClusterRecord& record) { std::string line; bool good = getline(*m_pReader, line).good(); if(!good || line.empty()) return false; std::stringstream parser(line); parser >> record.clusterID; parser >> record.numElements; parser >> record.readID; parser >> record.sequence; if(record.clusterID.empty() || record.numElements == 0 || record.readID.empty() || record.sequence.empty()) { std::cerr << "Could not parse cluster record from line: " << line << "\n"; exit(1); } return true; } ================================================ FILE: src/SGA/Util/ClusterReader.h ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ClusterReader - Read in a file of read clusters. // This class conforms to the interface needed // for the SequenceProcessFramework concurrency lib // #ifndef CLUSTER_READER_H #define CLUSTER_READER_H #include #include #include struct ClusterRecord { std::string clusterID; int numElements; std::string readID; std::string sequence; }; typedef std::vector ClusterVector; class ClusterReader { public: ClusterReader(const std::string& filename); ~ClusterReader(); // Read in a cluster from the file and write the records // to out. Returns true if a cluster was successfully read. bool generate(ClusterVector& out); bool readCluster(ClusterRecord& record); // Functions to determine the progress of the read inline size_t getConsumedLast() const { return m_numConsumedLast; } inline size_t getNumConsumed() const { return m_numConsumedTotal; } private: std::istream* m_pReader; size_t m_numConsumedLast; size_t m_numConsumedTotal; }; #endif ================================================ FILE: src/SGA/Util/Contig.cpp ================================================ #include "Contig.h" // // Statics // static const char* IDFIELD = "ID"; static const char* LENFIELD = "LN"; static const char* COVFIELD = "CV"; static const char* SEQFIELD = "SQ"; static const char* UNQFIELD = "UN"; static const char* ANTFIELD = "AN"; Contig::Contig() : m_length(0), m_coverage(0.0f), m_uniqueFlag(UF_UNKNOWN) {} // // // std::istream& readFasta(std::istream& in, Contig& c) { in.ignore(1); // skip ">" in >> c.m_id >> c.m_length >> c.m_coverage; // read header in.ignore(1); // skip newline in >> c.m_seq; // read seq in.ignore(1); // place the ifstream at the next line return in; } std::istream& readCAF(std::istream& in, Contig& c) { std::string line; getline(in, line); std::stringstream tokenizer(line); std::string token; while(tokenizer >> token) { std::string key; std::string value; splitKeyValue(token, key, value); c.setFromKeyValue(key, value); } assert(c.getSequence().size() == c.getLength()); return in; } // // // SequenceVector Contig::getVariants() const { SequenceVector out; out.push_back(getSequence()); out.insert(out.end(), m_variants.begin(), m_variants.end()); return out; } // // // void Contig::addVariants(const SequenceVector& seqs) { m_variants.insert(m_variants.end(), seqs.begin(), seqs.end()); } // // // std::ostream& writeCAF(std::ostream& out, Contig& c) { std::vector fields; // ID fields.push_back(makeKeyValue(IDFIELD, c.m_id)); fields.push_back(makeKeyValue(LENFIELD, c.m_length)); fields.push_back(makeKeyValue(COVFIELD, c.m_coverage)); fields.push_back(makeKeyValue(SEQFIELD, c.m_seq)); fields.push_back(makeKeyValue(UNQFIELD, c.m_uniqueFlag)); std::copy(fields.begin(), fields.end(), std::ostream_iterator(out, "\t")); return out; } // // Set a field based on a key/value pair // void Contig::setFromKeyValue(std::string& key, std::string& value) { std::stringstream parser(value); if(key == IDFIELD) parser >> m_id; else if(key == LENFIELD) parser >> m_length; else if(key == COVFIELD) parser >> m_coverage; else if(key == SEQFIELD) parser >> m_seq; else if(key == ANTFIELD) parser >> m_annotation; else if(key == UNQFIELD) { int v; parser >> v; m_uniqueFlag = (UniqueFlag)v; } else assert(false && "Unknown token found while parsing contig"); } ================================================ FILE: src/SGA/Util/Contig.h ================================================ #ifndef CONTIG_H #define CONTIG_H #include "Util.h" #include #include #include #include // // Enumerations // enum UniqueFlag { UF_UNKNOWN = 0, UF_UNIQUE, UF_REPEAT, UF_NOCALL }; class Contig { public: // // Constructors // Contig(); // // Getters // ContigID getID() const { return m_id; } double getCoverage() const { return m_coverage; } UniqueFlag getUniqueFlag() const { return m_uniqueFlag; } size_t getLength() const { return m_length; } Sequence getSequence() const { return m_seq; } double getNormalizedCoverage() const { return m_coverage / m_length; } bool isUnique() const { return m_uniqueFlag == UF_UNIQUE; } unsigned int getAnnotation() { return m_annotation; } SequenceVector getVariants() const; // // Setters // void setUniqueFlag(UniqueFlag uf) { m_uniqueFlag = uf; } void setFromKeyValue(std::string& key, std::string& value); void addVariants(const SequenceVector& seqs); // // Operators // bool operator()(Contig& c1, Contig& c2) const { return c1.m_seq < c2.m_seq; } // // Readers // friend std::istream& readFasta(std::istream& in, Contig& c); friend std::istream& readCAF(std::istream& in, Contig& c); // // Writers // friend std::ostream& writeCAF(std::ostream& out, Contig& c); private: ContigID m_id; size_t m_length; double m_coverage; UniqueFlag m_uniqueFlag; Sequence m_seq; unsigned int m_annotation; SequenceVector m_variants; }; #endif ================================================ FILE: src/SGA/Util/CorrectionThresholds.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // CorrectionThresholds - Cutoff values for determining // whether a particular base should be corrected or not // #include "CorrectionThresholds.h" CorrectionThresholds::CorrectionThresholds() { // Set defaults m_minSupportLowQuality = 4; m_minSupportHighQuality = 3; m_highQualityCutoff = 20; } CorrectionThresholds& CorrectionThresholds::Instance() { static CorrectionThresholds instance; return instance; } void CorrectionThresholds::setBaseMinSupport(int ms) { m_minSupportHighQuality = ms; m_minSupportLowQuality = ms + 1; } // int CorrectionThresholds::getRequiredSupport(int phred) { int threshold = m_minSupportLowQuality; if(phred >= m_highQualityCutoff) threshold = m_minSupportHighQuality; return threshold; } ================================================ FILE: src/SGA/Util/CorrectionThresholds.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // CorrectionThresholds.h - Singeleton class containing // cutoff values for determining whether a // base should be corrected or not // #ifndef CORRECTION_THRESHOLDS_H #define CORRECTION_THRESHOLDS_H class CorrectionThresholds { public: CorrectionThresholds(); static CorrectionThresholds& Instance(); // Set the base minimum support level (for high-quality reads) void setBaseMinSupport(int ms); int getMinSupportHighQuality() { return m_minSupportHighQuality; } int getMinSupportLowQuality() { return m_minSupportLowQuality; } int getHighQualityCutoff() { return m_highQualityCutoff; } // Returns the support required for a base with phred score phred int getRequiredSupport(int phred); private: int m_highQualityCutoff; int m_minSupportLowQuality; int m_minSupportHighQuality; }; #endif ================================================ FILE: src/SGA/Util/DNACodec.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // DNACodec - Encoder/decoder for a DNA alphabet // of A,C,G,T using 2 bits per symbol // #ifndef DNACODEC_H #define DNACODEC_H #include "Alphabet.h" static const unsigned char dna_offset_mask[]={0xC0,0x30,0x0C,0x03}; class DNACodec { public: typedef uint8_t UNIT_TYPE; static const int SYMBOLS_PER_UNIT = 4; // Encoded the character b into a value inline uint8_t encode(char b) { return DNA_ALPHABET::getBaseRank(b); } // Decode the value c into a character inline char decode(uint8_t c) { return DNA_ALPHABET::getBase(c); } // Returns the number of units required to encode // a string of length n inline size_t getRequiredUnits(size_t n) { return (n + SYMBOLS_PER_UNIT - 1) / SYMBOLS_PER_UNIT; } // Returns the number of symbols that can be stored // in n units inline size_t getCapacity(size_t n) { return n * SYMBOLS_PER_UNIT; } // Returns the index of the unit to store the // i-th symbol of the string inline size_t getUnitIndex(size_t i) { return i / SYMBOLS_PER_UNIT; } // Returns the position within a unit that the i-th symbol // should be stored in inline size_t getUnitOffset(size_t i) { // this position is the k-th symbol of the unit return i % SYMBOLS_PER_UNIT; } // Return the amount that a value must be shifted to // store a code at a given offset inline uint8_t getOffsetShift(size_t offset) { return 2*(3 - offset); } // Store the value v at the i-th encoded position in the data array inline void store(UNIT_TYPE* pData, size_t i, char b) { UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); uint8_t shift = getOffsetShift(offset); // Clear the unsigned char mask = dna_offset_mask[offset]; // Clear position unit &= ~mask; // Set position uint8_t code = encode(b); code <<= shift; unit |= code; } // get the character stored at position i inline char get(const UNIT_TYPE* pData, size_t i) { const UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); unsigned char mask = dna_offset_mask[offset]; UNIT_TYPE code = unit & mask; uint8_t shift = getOffsetShift(offset); code >>= shift; return decode(code); } }; #endif ================================================ FILE: src/SGA/Util/DNADouble.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // DNADouble.h - Simple map from the DNA // alphabet {A,C,G,T} to a double value // #ifndef ALPHADOUBLE_H #define ALPHADOUBLE_H #include "Alphabet.h" class DNADouble { public: // inline DNADouble() { memset(m_vals, 0, DNA_ALPHABET::size * sizeof(double)); } // inline size_t getAlphabetSize() const { return DNA_ALPHABET::size; } // inline void set(char b, double lp) { m_vals[DNA_ALPHABET::getBaseRank(b)] = lp; } // inline double get(char b) const { return m_vals[DNA_ALPHABET::getBaseRank(b)]; } // inline char getMaxBase() const { char base; double val; getMax(base, val); return base; } // inline double getMaxVal() const { char base; double val; getMax(base, val); return val; } // inline void getMax(char& base, double& val) const { double max = -std::numeric_limits::max(); int maxIdx = 0; for(int i = 0; i < DNA_ALPHABET::size; ++i) { if(m_vals[i] > max) { max = m_vals[i]; maxIdx = i; } } base = DNA_ALPHABET::getBase(maxIdx); val = max; } // inline double getByIdx(const int i) const { return m_vals[i]; } // Return the base for index i static char getBase(size_t i) { assert(i < DNA_ALPHABET::size); return DNA_ALPHABET::getBase(i); } // Swap the (A,T) and (C,G) entries inline void complement() { double tmp; // A,T tmp = m_vals[3]; m_vals[3] = m_vals[0]; m_vals[0] = tmp; // C,G tmp = m_vals[2]; m_vals[2] = m_vals[1]; m_vals[1] = tmp; } // Interpret the DNADouble as a log-probabilty vector of some // event occurring and marginalize using a flat prior double marginalize(double prior) const { double direct = 0.0f; for(int i = 0; i < DNA_ALPHABET::size; ++i) { direct += exp(m_vals[i]); } double ld = log(direct) + log(prior); /* double max = -std::numeric_limits::max(); int max_idx = 0; for(int i = 0; i < DNA_ALPHABET::size; ++i) { if(m_vals[i] > max) { max = m_vals[i]; max_idx = i; } } double sum = prior; for(int i = 0; i < DNA_ALPHABET::size; ++i) { if(i != max_idx) sum += exp(m_vals[i] - max) * prior; } double ld = max + log(sum);*/ return ld; } // Add VAL to each element inline void add(double val) { m_vals[0] += val; m_vals[1] += val; m_vals[2] += val; m_vals[3] += val; } // Subtract VAL from each element inline void subtract(double val) { m_vals[0] -= val; m_vals[1] -= val; m_vals[2] -= val; m_vals[3] -= val; } inline DNADouble& operator+=(const DNADouble& other) { assert(DNA_ALPHABET::size == 4); // Manually unrolled m_vals[0] += other.m_vals[0]; m_vals[1] += other.m_vals[1]; m_vals[2] += other.m_vals[2]; m_vals[3] += other.m_vals[3]; return *this; } inline DNADouble& operator-=(const DNADouble& other) { assert(DNA_ALPHABET::size == 4); // Manually unrolled m_vals[0] -= other.m_vals[0]; m_vals[1] -= other.m_vals[1]; m_vals[2] -= other.m_vals[2]; m_vals[3] -= other.m_vals[3]; return *this; } // void printVerbose() const { std::cout << "AP "; for(int i = 0; i < DNA_ALPHABET::size; ++i) { char b = DNA_ALPHABET::getBase(i); std::cout << b << ": " << m_vals[i] << " "; } std::cout << "\n"; } private: double m_vals[DNA_ALPHABET::size]; }; #endif ================================================ FILE: src/SGA/Util/DNAString.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // DNAString // #include #include "DNAString.h" #include "Util.h" DNAString::DNAString() : m_len(0), m_data(0) {} // DNAString::DNAString(std::string seq) { _alloc(seq.c_str(), seq.length()); } // DNAString::DNAString(const DNAString& other) { // Deep copy _alloc(other.m_data, other.m_len); } // DNAString& DNAString::operator=(const DNAString& dna) { if(&dna == this) return *this; // self-assign _dealloc(); _alloc(dna.m_data, dna.m_len); return *this; } // DNAString& DNAString::operator=(const std::string& str) { _dealloc(); _alloc(str.c_str(), str.length()); return *this; } // bool DNAString::operator==(const DNAString& other) { if(m_len != other.m_len) return false; return strncmp(m_data, other.m_data, m_len) == 0; } // void DNAString::_alloc(const char* pData, size_t l) { m_len = l; size_t alloc_len = m_len + 1; m_data = new char[alloc_len]; strncpy(m_data, pData, m_len); m_data[m_len] = '\0'; } // void DNAString::_dealloc() { if(m_data != NULL) delete [] m_data; m_data = 0; m_len = 0; } // DNAString::~DNAString() { _dealloc(); } // Reverse the sequence void DNAString::reverse() { size_t half = m_len >> 1; for(size_t idx = 0; idx < half; ++idx) { size_t opp = m_len - idx - 1; char tmp = m_data[opp]; m_data[opp] = m_data[idx]; m_data[idx] = tmp; } } void DNAString::reverseComplement() { this->reverse(); for(size_t idx = 0; idx < m_len; ++idx) m_data[idx] = complement(m_data[idx]); } void DNAString::disambiguate() { if(m_len == 0) return; for(size_t idx = 0; idx < m_len; ++idx) { if(m_data[idx] == 'N') { m_data[idx] = randomBase(); } } } // std::string DNAString::getSuffixString(size_t idx) const { std::string str; str.reserve(getSuffixLength(idx) + 1); str += getSuffix(idx); str += "$"; return str; } // std::string DNAString::toString() const { return std::string(m_data, m_len); } ================================================ FILE: src/SGA/Util/DNAString.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // DNAString - Wrapper for c-string for DNA sequences // It is tailored for fast suffix operations // #ifndef DNASTRING_H #define DNASTRING_H #include #include #include class DNAString { public: // Constructors/Destructors DNAString(); DNAString(const DNAString& other); DNAString(std::string seq); ~DNAString(); // Operators DNAString& operator=(const DNAString& dna); DNAString& operator=(const std::string& str); bool operator==(const DNAString& other); size_t length() const { return m_len; } bool empty() const { return m_len == 0 || m_data[0] == '\0'; } inline const char* getSuffix(size_t idx) const { assert(m_len > 0); // Force the suffix to point to the empty string if out of bounds if(idx <= m_len) return m_data + idx; else return m_data + m_len; } // Return the length of the suffix (not including $) starting at idx size_t getSuffixLength(size_t idx) const { assert(m_len > 0); if(idx <= m_len) return m_len - idx; else return 0; } // Get the character at the given position inline char get(size_t idx) const { assert(idx < m_len + 1); return m_data[idx]; } // Set the character at the given position inline void set(size_t idx, char b) const { assert(idx < m_len + 1); m_data[idx] = b; } // Get the substring of length n starting at position pos std::string substr(size_t pos, size_t n) const { assert(m_data != NULL && pos < m_len && pos + n <= m_len); return std::string(m_data + pos, n); } // randomly change the 'N' bases to one of ACGT so that the string is not ambiguous void disambiguate(); void reverse(); void reverseComplement(); std::string getSuffixString(size_t idx) const; std::string toString() const; private: // functions void _alloc(const char* pData, size_t l); void _dealloc(); // data size_t m_len; char* m_data; }; #endif ================================================ FILE: src/SGA/Util/EncodedString.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // EncodedString - Templated class to store // a string from a reduced alphabet. The actual // encoding is done outside this class by the Codec // template parameter. // // Here the storage is in terms of "units" which is // defined by the codec. For a simple 2-bit encoded // DNA string this would be a byte but for more complicated // encodings like the 3-bit BWT this could be a larger // structure like uint16_t // #ifndef ENCODEDSTRING_H #define ENCODEDSTRING_H #include #include #include #include "DNACodec.h" #include "BWTCodec.h" #include "BWT4Codec.h" #include "NoCodec.h" template class EncodedString { typedef typename Codec::UNIT_TYPE StorageUnit; public: // Constructors/Destructors EncodedString() : m_len(0), m_capacity(0), m_data(0) {} // EncodedString(const EncodedString& other) { // deep copy _alloc(other.m_len); _copy(other); } // EncodedString(const std::string& seq) { size_t n = seq.length(); _alloc(n); _copy(seq.c_str(), n); } // ~EncodedString() { _dealloc(); } // Assignment op EncodedString& operator=(const EncodedString& other) { if(&other == this) return *this; // self-assign _dealloc(); _alloc(other.m_len); _copy(other); return *this; } // EncodedString& operator=(const std::string& str) { size_t n = str.length(); _dealloc(); _alloc(n); _copy(str.c_str(), n); return *this; } // Resize this string to n symbols, setting the // new entries to the default value void resize(size_t n) { if(n > m_capacity) _realloc(n); m_len = n; } // Append a std::string void append(const std::string& str) { size_t n = str.length(); size_t num_total = m_len + n; if(num_total > m_capacity) _realloc(num_total); _append(str.c_str(), n); } // Append some other EncodedString void append(const EncodedString& other) { size_t n = other.length(); size_t num_total = m_len + n; if(num_total > m_capacity) _realloc(num_total); _append(other); } // Swap the contents with another encoded string void swap(EncodedString& other) { size_t tmp; tmp = other.m_len; other.m_len = m_len; m_len = tmp; tmp = other.m_capacity; other.m_capacity = m_capacity; m_capacity = tmp; StorageUnit* pTmp = other.m_data; other.m_data = m_data; m_data = pTmp; } // size_t length() const { return m_len; } // size_t capacity() const { return m_capacity; } // bool empty() const { return m_len == 0; } // Get the character at idx inline char get(size_t idx) const { assert(idx < m_len); return s_codec.get(m_data, idx); } // Set the character at idx inline void set(size_t idx, char b) { assert(idx < m_len); s_codec.store(m_data, idx, b); } // std::string toString() const { std::string out(m_len, 'A'); for(size_t i = 0; i < m_len; ++i) out[i] = s_codec.get(m_data, i); return out; } // std::string substr(size_t start) const { assert(start < m_len); std::string out(m_len - start, 'A'); for(size_t i = start; i < m_len; ++i) out[i - start] = s_codec.get(m_data, i); return out; } // std::string substr(size_t start, size_t len) const { assert(start < m_len); assert(start + len <= m_len); std::string out(len, 'C'); for(size_t i = 0; i < len; ++i) out[i] = s_codec.get(m_data, i + start); return out; } // friend bool operator==(const EncodedString& a, const EncodedString& b) { if(a.m_len != b.m_len) return false; // Would be faster to compare entire units at a time size_t n = a.m_len; for(size_t i = 0; i < n; ++i) { if(a.get(i) != b.get(i)) return false; } return true; } // friend std::ostream& operator<<(std::ostream& out, const EncodedString& a) { out << a.toString(); return out; } // Return the amount of space this string is using size_t getMemSize() const { return sizeof(*this) + sizeof(StorageUnit) * s_codec.getRequiredUnits(m_capacity); } private: // functions void _copy(const char* pData, size_t n) { // this assumes that storage for n characters has been // allocated assert(m_capacity >= n); for(size_t i = 0; i < n; ++i) s_codec.store(m_data, i, pData[i]); m_len = n; } // void _copy(const EncodedString& other) { // storage should have been allocated already assert(m_capacity = other.m_capacity); size_t num_units = s_codec.getRequiredUnits(other.m_capacity); _copyUnitData(other.m_data, num_units); m_len = other.m_len; } // Copy num_units from pData into the internal storage void _copyUnitData(StorageUnit* pData, size_t num_units) { assert(s_codec.getRequiredUnits(m_capacity) >= num_units); for(size_t i = 0; i < num_units; ++i) m_data[i] = pData[i]; } // append n symbols from pData into the buffer void _append(const char* pData, size_t n) { assert(m_len + n <= m_capacity); for(size_t i = 0; i < n; ++i) s_codec.store(m_data, m_len + i, pData[i]); m_len += n; } // append void _append(const EncodedString& other) { size_t n = other.m_len; assert(m_len + n <= m_capacity); for(size_t i = 0; i < n; ++i) s_codec.store(m_data, m_len + i, other.get(i)); m_len += n; } // allocate storage for n symbols void _alloc(size_t n) { // Get the number of units that need to be allocated from the codec size_t n_units = s_codec.getRequiredUnits(n); m_data = new StorageUnit[n_units](); // This zeros the memory m_capacity = s_codec.getCapacity(n_units); } // reallocate the storage so that the capacity is at least n symbols // m_len is not changed void _realloc(size_t n) { StorageUnit* oldData = m_data; size_t old_units = s_codec.getRequiredUnits(m_len); _alloc(n); assert(m_capacity >= n); _copyUnitData(oldData, old_units); delete [] oldData; } // deallocate storage void _dealloc() { if(m_data != NULL) delete [] m_data; m_data = 0; m_len = 0; m_capacity = 0; } // data static Codec s_codec; size_t m_len; // the length of the string size_t m_capacity; // the maximum length of the string that can be stored StorageUnit* m_data; }; // Initialize the static member template Codec EncodedString::s_codec; typedef EncodedString DNAEncodedString; typedef EncodedString BWTString; typedef EncodedString NoEncodingString; typedef std::vector DNAEncodedStringVector; #endif ================================================ FILE: src/SGA/Util/HashMap.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // HashMap compability defines. Similar to Shaun Jackman's // compatability code in abyss (see Common/HashMap) // // #ifndef HASHMAP_H #define HASHMAP_H //#include "config.h" #define HAVE_UNORDERED_MAP 1 #if HAVE_UNORDERED_MAP # include # include #define HashMap std::unordered_map #define HashSet std::unordered_set typedef std::hash StringHasher; #elif HAVE_TR1_UNORDERED_MAP #include #include #define HashMap std::tr1::unordered_map #define HashSet std::tr1::unordered_set typedef std::tr1::hash StringHasher; #elif HAVE_EXT_HASH_MAP #define USING_EXT_HASH_MAP 1 # undef __DEPRECATED #include #include #define HashMap __gnu_cxx::hash_map #define HashSet __gnu_cxx::hash_set #else # error No hash map implementation found #endif # if USING_EXT_HASH_MAP # include # include struct StringHasher { size_t operator()( const std::string& x) const { return __gnu_cxx::hash()( x.c_str()); } }; #endif // Ensure the sparse hash is available #if HAVE_GOOGLE_SPARSE_HASH_MAP #include //#define SparseHashMap google::sparse_hash_map // JEREMIAH #else #define SparseHashMap std::tr1::unordered_map //#error The google sparse hash is required #endif #endif ================================================ FILE: src/SGA/Util/Interval.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Interval - A pair of integers denoting a range // #include "Interval.h" #if 0 Interval Interval::intersect(const Interval& r1, const Interval& r2) { Interval result; result.start = std::max(r1.start, r2.start); result.end = std::min(r1.end, r2.end); // Check for non-overlap if(result.end <= result.start) { result.start = 0; result.end = 0; } return result; } #endif std::ostream& operator<<(std::ostream& out, const Interval& r) { out << r.start << " " << r.end; return out; } std::istream& operator>>(std::istream& in, Interval& r) { in >> r.start >> r.end; return in; } ================================================ FILE: src/SGA/Util/Interval.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Interval - A pair of integers denoting a closed interval // #ifndef INTERVAL_H #define INTERVAL_H #include "Util.h" struct Interval { // constructors Interval() : start(0), end(0) {} Interval(int s, int e) : start(s), end(e) {} // Find the intersection between [s1, e1] [s2, e2] // The intersection is placed in [s3, e3], if the two input // intervals do not intersect then e3 will be strictly less than s3 template static void intersect(const T s1, const T e1, const T s2, const T e2, T& s3, T& e3) { assert(s1 <= e1 && s2 <= e2); s3 = std::max(s1, s2); e3 = std::min(e1, e2); } // Precondition: s1 >= e1 and s2 >= e2 // Return true if the coordinates intersect template static bool isIntersecting(const T s1, const T e1, const T s2, const T e2) { assert(s1 <= e1 && s2 <= e2); if(s2 > e1 || s1 > e2) return false; else return true; } // functions friend std::ostream& operator<<(std::ostream& out, const Interval& i); friend std::istream& operator>>(std::istream& in, Interval& i); // data members int start; int end; }; #endif ================================================ FILE: src/SGA/Util/IntervalTree.h ================================================ #ifndef __INTERVAL_TREE_H #define __INTERVAL_TREE_H #include #include #include #include using namespace std; template class IntervalT { public: K start; K stop; T value; IntervalT() : start(0) , stop(INT_MAX) , value("") { } IntervalT(K s, K e, const T& v) : start(s) , stop(e) , value(v) { } }; template int intervalStart(const IntervalT& i) { return i.start; } template int intervalStop(const IntervalT& i) { return i.stop; } template ostream& operator<<(ostream& out, IntervalT& i) { out << "Interval(" << i.start << ", " << i.stop << "): " << i.value; return out; } template class IntervalStartSorter { public: bool operator() (const IntervalT& a, const IntervalT& b) { return a.start < b.start; } }; template class IntervalTTree { public: typedef IntervalT interval; typedef vector intervalVector; typedef IntervalTTree intervalTree; intervalVector intervals; intervalTree* left; intervalTree* right; int center; IntervalTTree(void) : left(NULL) , right(NULL) , center(0) { } IntervalTTree(const intervalTree& other) { center = other.center; intervals = other.intervals; if (other.left) { left = (intervalTree*) malloc(sizeof(intervalTree)); *left = *other.left; } else { left = NULL; } if (other.right) { right = new intervalTree(); *right = *other.right; } else { right = NULL; } } IntervalTTree& operator=(const intervalTree& other) { center = other.center; intervals = other.intervals; if (other.left) { left = new intervalTree(); *left = *other.left; } else { left = NULL; } if (other.right) { right = new intervalTree(); *right = *other.right; } else { right = NULL; } return *this; } IntervalTTree( intervalVector& ivals, unsigned int depth = 16, unsigned int minbucket = 64, int leftextent = 0, int rightextent = 0, unsigned int maxbucket = 512 ) : left(NULL) , right(NULL) { --depth; if (depth == 0 || (ivals.size() < minbucket && ivals.size() < maxbucket)) { intervals = ivals; } else { if (leftextent == 0 && rightextent == 0) { // sort intervals by start IntervalStartSorter intervalStartSorter; sort(ivals.begin(), ivals.end(), intervalStartSorter); } int leftp = 0; int rightp = 0; int centerp = 0; if (leftextent || rightextent) { leftp = leftextent; rightp = rightextent; } else { leftp = ivals.front().start; vector stops; stops.resize(ivals.size()); transform(ivals.begin(), ivals.end(), stops.begin(), intervalStop); rightp = *max_element(stops.begin(), stops.end()); } //centerp = ( leftp + rightp ) / 2; centerp = ivals.at(ivals.size() / 2).start; center = centerp; intervalVector lefts; intervalVector rights; for (typename intervalVector::iterator i = ivals.begin(); i != ivals.end(); ++i) { interval& interval = *i; if (interval.stop < center) { lefts.push_back(interval); } else if (interval.start > center) { rights.push_back(interval); } else { intervals.push_back(interval); } } if (!lefts.empty()) { left = new intervalTree(lefts, depth, minbucket, leftp, centerp); } if (!rights.empty()) { right = new intervalTree(rights, depth, minbucket, centerp, rightp); } } } void findOverlapping(K start, K stop, intervalVector& overlapping) { if (!intervals.empty() && ! (stop < intervals.front().start)) { for (typename intervalVector::iterator i = intervals.begin(); i != intervals.end(); ++i) { interval& interval = *i; if (interval.stop >= start && interval.start <= stop) { overlapping.push_back(interval); } } } if (left && start <= center) { left->findOverlapping(start, stop, overlapping); } if (right && stop >= center) { right->findOverlapping(start, stop, overlapping); } } void findContained(K start, K stop, intervalVector& contained) { if (!intervals.empty() && ! (stop < intervals.front().start)) { for (typename intervalVector::iterator i = intervals.begin(); i != intervals.end(); ++i) { interval& interval = *i; if (interval.start >= start && interval.stop <= stop) { contained.push_back(interval); } } } if (left && start <= center) { left->findContained(start, stop, contained); } if (right && stop >= center) { right->findContained(start, stop, contained); } } ~IntervalTTree(void) { // traverse the left and right // delete them all the way down if (left) { delete left; } if (right) { delete right; } } }; #endif ================================================ FILE: src/SGA/Util/KmerDistribution.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // KmerDistribution - Histogram of kmer frequencies // #include "KmerDistribution.h" #include #include #include #include #include KmerDistribution::KmerDistribution() { } void KmerDistribution::add(int kcount) { m_data[kcount]++; } double KmerDistribution::getCumulativeProportionLEQ(int n) const { std::vector countVector = toCountVector(1000); int64_t sum = 0; for(size_t i = 0; i < countVector.size(); ++i) { sum += countVector[i]; } std::vector cumulativeVector(countVector.size()); int64_t runningSum = 0; for(size_t i = 0; i < cumulativeVector.size(); ++i) { runningSum += countVector[i]; cumulativeVector[i] = (double)runningSum / sum; //std::cout << "CUMUL " << i << " " << cumulativeVector[i] << "\n"; } assert(n < (int)cumulativeVector.size()); return cumulativeVector[n]; } size_t KmerDistribution::getCutoffForProportion(double p) const { int MAX_COUNT = 1000; std::vector countVector = toCountVector(MAX_COUNT); int64_t sum = 0; for(size_t i = 0; i < countVector.size(); ++i) sum += countVector[i]; double c = 0.0f; for(size_t i = 0; i < countVector.size(); ++i) { c += (double)countVector[i] / sum; if(c > p) return i; } return MAX_COUNT; } // int KmerDistribution::findFirstLocalMinimum() const { std::vector countVector = toCountVector(1000); if(countVector.empty()) return -1; std::cout << "CV: " << countVector.size() << "\n"; int prevCount = countVector[1]; double threshold = 0.75; for(size_t i = 2; i < countVector.size(); ++i) { int currCount = countVector[i]; double ratio = (double)currCount / prevCount; std::cout << i << " " << currCount << " " << ratio << "\n"; if(ratio > threshold) return i; prevCount = currCount; } return -1; } int KmerDistribution::getCensoredMode(size_t n) const { std::vector countVector = toCountVector(1000); if(countVector.size() < n) return -1; int modeIdx = -1; int modeCount = -1; for(; n < countVector.size(); ++n) { if(countVector[n] > modeCount) { modeCount = countVector[n]; modeIdx = n; } } return modeIdx; } // Find the boundary of the kmers that are likely erroneous // We do this by finding the value between 1 and the trusted mode // that contributes the fewest int KmerDistribution::findErrorBoundary() const { int mode = getCensoredMode(5); if(mode == -1) return -1; std::cerr << "Trusted kmer mode: " << mode << "\n"; std::vector countVector = toCountVector(1000); if(countVector.empty()) return -1; int runningSum = 0; double minContrib = std::numeric_limits::max(); int idx = -1; for(int i = 1; i < mode; ++i) { runningSum += countVector[i]; double v = (double)countVector[i] / runningSum; if(v < minContrib) { minContrib = v; idx = i; } } return idx; } // Find the boundary of the kmers that are likely erroneous // We do this by finding the value between 1 and the trusted mode // that contributes the fewest int KmerDistribution::findErrorBoundaryByRatio(double ratio) const { int mode = getCensoredMode(5); if(mode == -1) return -1; std::cerr << "Trusted kmer mode: " << mode << "\n"; std::vector countVector = toCountVector(1000); if(countVector.empty()) return -1; for(int i = 1; i < mode - 1; ++i) { int currCount = countVector[i]; int nextCount = countVector[i+1]; double cr = (double)currCount / nextCount; if(cr < ratio) return i; } return -1; } // std::vector KmerDistribution::toCountVector(int max) const { std::vector out; if(m_data.empty()) return out; int min = 0; for(int i = min; i <= max; ++i) { std::map::const_iterator iter = m_data.find(i); int v = (iter != m_data.end()) ? iter->second : 0; out.push_back(v); } return out; } size_t KmerDistribution::getTotalKmers() const { size_t sum = 0; std::map::const_iterator iter = m_data.begin(); for(; iter != m_data.end(); ++iter) sum += iter->second; return sum; } size_t KmerDistribution::getNumberWithCount(size_t c) const { std::map::const_iterator iter = m_data.find(c); if(iter != m_data.end()) return iter->second; else return 0; } // for compatibility with old code void KmerDistribution::print(int max) const { print(stdout, max); } void KmerDistribution::print(FILE* fp, int max) const { fprintf(fp, "Kmer coverage histogram\n"); fprintf(fp, "cov\tcount\n"); int maxCount = 0; std::map::const_iterator iter = m_data.begin(); for(; iter != m_data.end(); ++iter) { if(iter->first <= max) fprintf(fp, "%d\t%d\n", iter->first, iter->second); else maxCount += iter->second; } fprintf(fp, ">%d\t%d\n", max, maxCount); } ================================================ FILE: src/SGA/Util/KmerDistribution.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // KmerDistribution - Histogram of kmer frequencies // #ifndef KMERDISTRIBUTION_H #define KMERDISTRIBUTION_H #include #include #include #include class KmerDistribution { public: KmerDistribution(); ~KmerDistribution() {} // Returns the proportion of the distribution less than or equal to n double getCumulativeProportionLEQ(int n) const; // Returns the smallest value n such that the proportion of the data less // than n is p. This is the inverse of getCumulativeProportionLEQ. size_t getCutoffForProportion(double p) const; // Returns the predicted boundary of the left tail which holds erroneous kmers int findErrorBoundary() const; int findErrorBoundaryByRatio(double ratio) const; // Get the mode of the distribution if the first n values are ignored int getCensoredMode(size_t n) const; size_t getTotalKmers() const; size_t getNumberWithCount(size_t c) const; // std::vector toCountVector(int max) const; // int findFirstLocalMinimum() const; void add(int count); void print(int max) const; void print(FILE* file, int max) const; private: // int -> int map of the number of times a kmer with multiplicty N has been seen std::map m_data; }; #endif ================================================ FILE: src/SGA/Util/Makefile.am ================================================ noinst_LIBRARIES = libutil.a libutil_a_CPPFLAGS = -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/SeqLib libutil_a_SOURCES = Util.cpp stdaln.c Alphabet.cpp Contig.cpp \ ReadTable.cpp ReadInfoTable.cpp SeqReader.cpp DNAString.cpp Match.cpp \ Pileup.cpp Interval.cpp SeqCoord.cpp QualityVector.cpp Quality.cpp \ PrimerScreen.cpp CorrectionThresholds.cpp ClusterReader.cpp QualityTable.cpp \ gzstream.C BitChar.cpp MultiOverlap.cpp ================================================ FILE: src/SGA/Util/Makefile.in ================================================ # Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/SGA/Util ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libutil_a_AR = $(AR) $(ARFLAGS) libutil_a_LIBADD = am_libutil_a_OBJECTS = libutil_a-Util.$(OBJEXT) \ libutil_a-stdaln.$(OBJEXT) libutil_a-Alphabet.$(OBJEXT) \ libutil_a-Contig.$(OBJEXT) libutil_a-ReadTable.$(OBJEXT) \ libutil_a-ReadInfoTable.$(OBJEXT) \ libutil_a-SeqReader.$(OBJEXT) libutil_a-DNAString.$(OBJEXT) \ libutil_a-Match.$(OBJEXT) libutil_a-Pileup.$(OBJEXT) \ libutil_a-Interval.$(OBJEXT) libutil_a-SeqCoord.$(OBJEXT) \ libutil_a-QualityVector.$(OBJEXT) libutil_a-Quality.$(OBJEXT) \ libutil_a-PrimerScreen.$(OBJEXT) \ libutil_a-CorrectionThresholds.$(OBJEXT) \ libutil_a-ClusterReader.$(OBJEXT) \ libutil_a-QualityTable.$(OBJEXT) libutil_a-gzstream.$(OBJEXT) \ libutil_a-BitChar.$(OBJEXT) libutil_a-MultiOverlap.$(OBJEXT) libutil_a_OBJECTS = $(am_libutil_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libutil_a-Alphabet.Po \ ./$(DEPDIR)/libutil_a-BitChar.Po \ ./$(DEPDIR)/libutil_a-ClusterReader.Po \ ./$(DEPDIR)/libutil_a-Contig.Po \ ./$(DEPDIR)/libutil_a-CorrectionThresholds.Po \ ./$(DEPDIR)/libutil_a-DNAString.Po \ ./$(DEPDIR)/libutil_a-Interval.Po \ ./$(DEPDIR)/libutil_a-Match.Po \ ./$(DEPDIR)/libutil_a-MultiOverlap.Po \ ./$(DEPDIR)/libutil_a-Pileup.Po \ ./$(DEPDIR)/libutil_a-PrimerScreen.Po \ ./$(DEPDIR)/libutil_a-Quality.Po \ ./$(DEPDIR)/libutil_a-QualityTable.Po \ ./$(DEPDIR)/libutil_a-QualityVector.Po \ ./$(DEPDIR)/libutil_a-ReadInfoTable.Po \ ./$(DEPDIR)/libutil_a-ReadTable.Po \ ./$(DEPDIR)/libutil_a-SeqCoord.Po \ ./$(DEPDIR)/libutil_a-SeqReader.Po \ ./$(DEPDIR)/libutil_a-Util.Po \ ./$(DEPDIR)/libutil_a-gzstream.Po \ ./$(DEPDIR)/libutil_a-stdaln.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libutil_a_SOURCES) DIST_SOURCES = $(libutil_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libutil.a libutil_a_CPPFLAGS = -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/SeqLib libutil_a_SOURCES = Util.cpp stdaln.c Alphabet.cpp Contig.cpp \ ReadTable.cpp ReadInfoTable.cpp SeqReader.cpp DNAString.cpp Match.cpp \ Pileup.cpp Interval.cpp SeqCoord.cpp QualityVector.cpp Quality.cpp \ PrimerScreen.cpp CorrectionThresholds.cpp ClusterReader.cpp QualityTable.cpp \ gzstream.C BitChar.cpp MultiOverlap.cpp all: all-am .SUFFIXES: .SUFFIXES: .C .c .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/SGA/Util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/SGA/Util/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libutil.a: $(libutil_a_OBJECTS) $(libutil_a_DEPENDENCIES) $(EXTRA_libutil_a_DEPENDENCIES) $(AM_V_at)-rm -f libutil.a $(AM_V_AR)$(libutil_a_AR) libutil.a $(libutil_a_OBJECTS) $(libutil_a_LIBADD) $(AM_V_at)$(RANLIB) libutil.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-Alphabet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-BitChar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-ClusterReader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-Contig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-CorrectionThresholds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-DNAString.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-Interval.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-Match.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-MultiOverlap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-Pileup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-PrimerScreen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-Quality.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-QualityTable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-QualityVector.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-ReadInfoTable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-ReadTable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-SeqCoord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-SeqReader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-Util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-gzstream.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutil_a-stdaln.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .C.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .C.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libutil_a-Util.o: Util.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Util.o -MD -MP -MF $(DEPDIR)/libutil_a-Util.Tpo -c -o libutil_a-Util.o `test -f 'Util.cpp' || echo '$(srcdir)/'`Util.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Util.Tpo $(DEPDIR)/libutil_a-Util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Util.cpp' object='libutil_a-Util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Util.o `test -f 'Util.cpp' || echo '$(srcdir)/'`Util.cpp libutil_a-Util.obj: Util.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Util.obj -MD -MP -MF $(DEPDIR)/libutil_a-Util.Tpo -c -o libutil_a-Util.obj `if test -f 'Util.cpp'; then $(CYGPATH_W) 'Util.cpp'; else $(CYGPATH_W) '$(srcdir)/Util.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Util.Tpo $(DEPDIR)/libutil_a-Util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Util.cpp' object='libutil_a-Util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Util.obj `if test -f 'Util.cpp'; then $(CYGPATH_W) 'Util.cpp'; else $(CYGPATH_W) '$(srcdir)/Util.cpp'; fi` libutil_a-Alphabet.o: Alphabet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Alphabet.o -MD -MP -MF $(DEPDIR)/libutil_a-Alphabet.Tpo -c -o libutil_a-Alphabet.o `test -f 'Alphabet.cpp' || echo '$(srcdir)/'`Alphabet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Alphabet.Tpo $(DEPDIR)/libutil_a-Alphabet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Alphabet.cpp' object='libutil_a-Alphabet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Alphabet.o `test -f 'Alphabet.cpp' || echo '$(srcdir)/'`Alphabet.cpp libutil_a-Alphabet.obj: Alphabet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Alphabet.obj -MD -MP -MF $(DEPDIR)/libutil_a-Alphabet.Tpo -c -o libutil_a-Alphabet.obj `if test -f 'Alphabet.cpp'; then $(CYGPATH_W) 'Alphabet.cpp'; else $(CYGPATH_W) '$(srcdir)/Alphabet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Alphabet.Tpo $(DEPDIR)/libutil_a-Alphabet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Alphabet.cpp' object='libutil_a-Alphabet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Alphabet.obj `if test -f 'Alphabet.cpp'; then $(CYGPATH_W) 'Alphabet.cpp'; else $(CYGPATH_W) '$(srcdir)/Alphabet.cpp'; fi` libutil_a-Contig.o: Contig.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Contig.o -MD -MP -MF $(DEPDIR)/libutil_a-Contig.Tpo -c -o libutil_a-Contig.o `test -f 'Contig.cpp' || echo '$(srcdir)/'`Contig.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Contig.Tpo $(DEPDIR)/libutil_a-Contig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Contig.cpp' object='libutil_a-Contig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Contig.o `test -f 'Contig.cpp' || echo '$(srcdir)/'`Contig.cpp libutil_a-Contig.obj: Contig.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Contig.obj -MD -MP -MF $(DEPDIR)/libutil_a-Contig.Tpo -c -o libutil_a-Contig.obj `if test -f 'Contig.cpp'; then $(CYGPATH_W) 'Contig.cpp'; else $(CYGPATH_W) '$(srcdir)/Contig.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Contig.Tpo $(DEPDIR)/libutil_a-Contig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Contig.cpp' object='libutil_a-Contig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Contig.obj `if test -f 'Contig.cpp'; then $(CYGPATH_W) 'Contig.cpp'; else $(CYGPATH_W) '$(srcdir)/Contig.cpp'; fi` libutil_a-ReadTable.o: ReadTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-ReadTable.o -MD -MP -MF $(DEPDIR)/libutil_a-ReadTable.Tpo -c -o libutil_a-ReadTable.o `test -f 'ReadTable.cpp' || echo '$(srcdir)/'`ReadTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-ReadTable.Tpo $(DEPDIR)/libutil_a-ReadTable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ReadTable.cpp' object='libutil_a-ReadTable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-ReadTable.o `test -f 'ReadTable.cpp' || echo '$(srcdir)/'`ReadTable.cpp libutil_a-ReadTable.obj: ReadTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-ReadTable.obj -MD -MP -MF $(DEPDIR)/libutil_a-ReadTable.Tpo -c -o libutil_a-ReadTable.obj `if test -f 'ReadTable.cpp'; then $(CYGPATH_W) 'ReadTable.cpp'; else $(CYGPATH_W) '$(srcdir)/ReadTable.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-ReadTable.Tpo $(DEPDIR)/libutil_a-ReadTable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ReadTable.cpp' object='libutil_a-ReadTable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-ReadTable.obj `if test -f 'ReadTable.cpp'; then $(CYGPATH_W) 'ReadTable.cpp'; else $(CYGPATH_W) '$(srcdir)/ReadTable.cpp'; fi` libutil_a-ReadInfoTable.o: ReadInfoTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-ReadInfoTable.o -MD -MP -MF $(DEPDIR)/libutil_a-ReadInfoTable.Tpo -c -o libutil_a-ReadInfoTable.o `test -f 'ReadInfoTable.cpp' || echo '$(srcdir)/'`ReadInfoTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-ReadInfoTable.Tpo $(DEPDIR)/libutil_a-ReadInfoTable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ReadInfoTable.cpp' object='libutil_a-ReadInfoTable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-ReadInfoTable.o `test -f 'ReadInfoTable.cpp' || echo '$(srcdir)/'`ReadInfoTable.cpp libutil_a-ReadInfoTable.obj: ReadInfoTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-ReadInfoTable.obj -MD -MP -MF $(DEPDIR)/libutil_a-ReadInfoTable.Tpo -c -o libutil_a-ReadInfoTable.obj `if test -f 'ReadInfoTable.cpp'; then $(CYGPATH_W) 'ReadInfoTable.cpp'; else $(CYGPATH_W) '$(srcdir)/ReadInfoTable.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-ReadInfoTable.Tpo $(DEPDIR)/libutil_a-ReadInfoTable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ReadInfoTable.cpp' object='libutil_a-ReadInfoTable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-ReadInfoTable.obj `if test -f 'ReadInfoTable.cpp'; then $(CYGPATH_W) 'ReadInfoTable.cpp'; else $(CYGPATH_W) '$(srcdir)/ReadInfoTable.cpp'; fi` libutil_a-SeqReader.o: SeqReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-SeqReader.o -MD -MP -MF $(DEPDIR)/libutil_a-SeqReader.Tpo -c -o libutil_a-SeqReader.o `test -f 'SeqReader.cpp' || echo '$(srcdir)/'`SeqReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-SeqReader.Tpo $(DEPDIR)/libutil_a-SeqReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SeqReader.cpp' object='libutil_a-SeqReader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-SeqReader.o `test -f 'SeqReader.cpp' || echo '$(srcdir)/'`SeqReader.cpp libutil_a-SeqReader.obj: SeqReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-SeqReader.obj -MD -MP -MF $(DEPDIR)/libutil_a-SeqReader.Tpo -c -o libutil_a-SeqReader.obj `if test -f 'SeqReader.cpp'; then $(CYGPATH_W) 'SeqReader.cpp'; else $(CYGPATH_W) '$(srcdir)/SeqReader.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-SeqReader.Tpo $(DEPDIR)/libutil_a-SeqReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SeqReader.cpp' object='libutil_a-SeqReader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-SeqReader.obj `if test -f 'SeqReader.cpp'; then $(CYGPATH_W) 'SeqReader.cpp'; else $(CYGPATH_W) '$(srcdir)/SeqReader.cpp'; fi` libutil_a-DNAString.o: DNAString.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-DNAString.o -MD -MP -MF $(DEPDIR)/libutil_a-DNAString.Tpo -c -o libutil_a-DNAString.o `test -f 'DNAString.cpp' || echo '$(srcdir)/'`DNAString.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-DNAString.Tpo $(DEPDIR)/libutil_a-DNAString.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DNAString.cpp' object='libutil_a-DNAString.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-DNAString.o `test -f 'DNAString.cpp' || echo '$(srcdir)/'`DNAString.cpp libutil_a-DNAString.obj: DNAString.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-DNAString.obj -MD -MP -MF $(DEPDIR)/libutil_a-DNAString.Tpo -c -o libutil_a-DNAString.obj `if test -f 'DNAString.cpp'; then $(CYGPATH_W) 'DNAString.cpp'; else $(CYGPATH_W) '$(srcdir)/DNAString.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-DNAString.Tpo $(DEPDIR)/libutil_a-DNAString.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DNAString.cpp' object='libutil_a-DNAString.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-DNAString.obj `if test -f 'DNAString.cpp'; then $(CYGPATH_W) 'DNAString.cpp'; else $(CYGPATH_W) '$(srcdir)/DNAString.cpp'; fi` libutil_a-Match.o: Match.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Match.o -MD -MP -MF $(DEPDIR)/libutil_a-Match.Tpo -c -o libutil_a-Match.o `test -f 'Match.cpp' || echo '$(srcdir)/'`Match.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Match.Tpo $(DEPDIR)/libutil_a-Match.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Match.cpp' object='libutil_a-Match.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Match.o `test -f 'Match.cpp' || echo '$(srcdir)/'`Match.cpp libutil_a-Match.obj: Match.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Match.obj -MD -MP -MF $(DEPDIR)/libutil_a-Match.Tpo -c -o libutil_a-Match.obj `if test -f 'Match.cpp'; then $(CYGPATH_W) 'Match.cpp'; else $(CYGPATH_W) '$(srcdir)/Match.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Match.Tpo $(DEPDIR)/libutil_a-Match.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Match.cpp' object='libutil_a-Match.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Match.obj `if test -f 'Match.cpp'; then $(CYGPATH_W) 'Match.cpp'; else $(CYGPATH_W) '$(srcdir)/Match.cpp'; fi` libutil_a-Pileup.o: Pileup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Pileup.o -MD -MP -MF $(DEPDIR)/libutil_a-Pileup.Tpo -c -o libutil_a-Pileup.o `test -f 'Pileup.cpp' || echo '$(srcdir)/'`Pileup.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Pileup.Tpo $(DEPDIR)/libutil_a-Pileup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Pileup.cpp' object='libutil_a-Pileup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Pileup.o `test -f 'Pileup.cpp' || echo '$(srcdir)/'`Pileup.cpp libutil_a-Pileup.obj: Pileup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Pileup.obj -MD -MP -MF $(DEPDIR)/libutil_a-Pileup.Tpo -c -o libutil_a-Pileup.obj `if test -f 'Pileup.cpp'; then $(CYGPATH_W) 'Pileup.cpp'; else $(CYGPATH_W) '$(srcdir)/Pileup.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Pileup.Tpo $(DEPDIR)/libutil_a-Pileup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Pileup.cpp' object='libutil_a-Pileup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Pileup.obj `if test -f 'Pileup.cpp'; then $(CYGPATH_W) 'Pileup.cpp'; else $(CYGPATH_W) '$(srcdir)/Pileup.cpp'; fi` libutil_a-Interval.o: Interval.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Interval.o -MD -MP -MF $(DEPDIR)/libutil_a-Interval.Tpo -c -o libutil_a-Interval.o `test -f 'Interval.cpp' || echo '$(srcdir)/'`Interval.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Interval.Tpo $(DEPDIR)/libutil_a-Interval.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Interval.cpp' object='libutil_a-Interval.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Interval.o `test -f 'Interval.cpp' || echo '$(srcdir)/'`Interval.cpp libutil_a-Interval.obj: Interval.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Interval.obj -MD -MP -MF $(DEPDIR)/libutil_a-Interval.Tpo -c -o libutil_a-Interval.obj `if test -f 'Interval.cpp'; then $(CYGPATH_W) 'Interval.cpp'; else $(CYGPATH_W) '$(srcdir)/Interval.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Interval.Tpo $(DEPDIR)/libutil_a-Interval.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Interval.cpp' object='libutil_a-Interval.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Interval.obj `if test -f 'Interval.cpp'; then $(CYGPATH_W) 'Interval.cpp'; else $(CYGPATH_W) '$(srcdir)/Interval.cpp'; fi` libutil_a-SeqCoord.o: SeqCoord.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-SeqCoord.o -MD -MP -MF $(DEPDIR)/libutil_a-SeqCoord.Tpo -c -o libutil_a-SeqCoord.o `test -f 'SeqCoord.cpp' || echo '$(srcdir)/'`SeqCoord.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-SeqCoord.Tpo $(DEPDIR)/libutil_a-SeqCoord.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SeqCoord.cpp' object='libutil_a-SeqCoord.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-SeqCoord.o `test -f 'SeqCoord.cpp' || echo '$(srcdir)/'`SeqCoord.cpp libutil_a-SeqCoord.obj: SeqCoord.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-SeqCoord.obj -MD -MP -MF $(DEPDIR)/libutil_a-SeqCoord.Tpo -c -o libutil_a-SeqCoord.obj `if test -f 'SeqCoord.cpp'; then $(CYGPATH_W) 'SeqCoord.cpp'; else $(CYGPATH_W) '$(srcdir)/SeqCoord.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-SeqCoord.Tpo $(DEPDIR)/libutil_a-SeqCoord.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SeqCoord.cpp' object='libutil_a-SeqCoord.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-SeqCoord.obj `if test -f 'SeqCoord.cpp'; then $(CYGPATH_W) 'SeqCoord.cpp'; else $(CYGPATH_W) '$(srcdir)/SeqCoord.cpp'; fi` libutil_a-QualityVector.o: QualityVector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-QualityVector.o -MD -MP -MF $(DEPDIR)/libutil_a-QualityVector.Tpo -c -o libutil_a-QualityVector.o `test -f 'QualityVector.cpp' || echo '$(srcdir)/'`QualityVector.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-QualityVector.Tpo $(DEPDIR)/libutil_a-QualityVector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='QualityVector.cpp' object='libutil_a-QualityVector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-QualityVector.o `test -f 'QualityVector.cpp' || echo '$(srcdir)/'`QualityVector.cpp libutil_a-QualityVector.obj: QualityVector.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-QualityVector.obj -MD -MP -MF $(DEPDIR)/libutil_a-QualityVector.Tpo -c -o libutil_a-QualityVector.obj `if test -f 'QualityVector.cpp'; then $(CYGPATH_W) 'QualityVector.cpp'; else $(CYGPATH_W) '$(srcdir)/QualityVector.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-QualityVector.Tpo $(DEPDIR)/libutil_a-QualityVector.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='QualityVector.cpp' object='libutil_a-QualityVector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-QualityVector.obj `if test -f 'QualityVector.cpp'; then $(CYGPATH_W) 'QualityVector.cpp'; else $(CYGPATH_W) '$(srcdir)/QualityVector.cpp'; fi` libutil_a-Quality.o: Quality.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Quality.o -MD -MP -MF $(DEPDIR)/libutil_a-Quality.Tpo -c -o libutil_a-Quality.o `test -f 'Quality.cpp' || echo '$(srcdir)/'`Quality.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Quality.Tpo $(DEPDIR)/libutil_a-Quality.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Quality.cpp' object='libutil_a-Quality.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Quality.o `test -f 'Quality.cpp' || echo '$(srcdir)/'`Quality.cpp libutil_a-Quality.obj: Quality.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-Quality.obj -MD -MP -MF $(DEPDIR)/libutil_a-Quality.Tpo -c -o libutil_a-Quality.obj `if test -f 'Quality.cpp'; then $(CYGPATH_W) 'Quality.cpp'; else $(CYGPATH_W) '$(srcdir)/Quality.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-Quality.Tpo $(DEPDIR)/libutil_a-Quality.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Quality.cpp' object='libutil_a-Quality.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-Quality.obj `if test -f 'Quality.cpp'; then $(CYGPATH_W) 'Quality.cpp'; else $(CYGPATH_W) '$(srcdir)/Quality.cpp'; fi` libutil_a-PrimerScreen.o: PrimerScreen.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-PrimerScreen.o -MD -MP -MF $(DEPDIR)/libutil_a-PrimerScreen.Tpo -c -o libutil_a-PrimerScreen.o `test -f 'PrimerScreen.cpp' || echo '$(srcdir)/'`PrimerScreen.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-PrimerScreen.Tpo $(DEPDIR)/libutil_a-PrimerScreen.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PrimerScreen.cpp' object='libutil_a-PrimerScreen.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-PrimerScreen.o `test -f 'PrimerScreen.cpp' || echo '$(srcdir)/'`PrimerScreen.cpp libutil_a-PrimerScreen.obj: PrimerScreen.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-PrimerScreen.obj -MD -MP -MF $(DEPDIR)/libutil_a-PrimerScreen.Tpo -c -o libutil_a-PrimerScreen.obj `if test -f 'PrimerScreen.cpp'; then $(CYGPATH_W) 'PrimerScreen.cpp'; else $(CYGPATH_W) '$(srcdir)/PrimerScreen.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-PrimerScreen.Tpo $(DEPDIR)/libutil_a-PrimerScreen.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PrimerScreen.cpp' object='libutil_a-PrimerScreen.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-PrimerScreen.obj `if test -f 'PrimerScreen.cpp'; then $(CYGPATH_W) 'PrimerScreen.cpp'; else $(CYGPATH_W) '$(srcdir)/PrimerScreen.cpp'; fi` libutil_a-CorrectionThresholds.o: CorrectionThresholds.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-CorrectionThresholds.o -MD -MP -MF $(DEPDIR)/libutil_a-CorrectionThresholds.Tpo -c -o libutil_a-CorrectionThresholds.o `test -f 'CorrectionThresholds.cpp' || echo '$(srcdir)/'`CorrectionThresholds.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-CorrectionThresholds.Tpo $(DEPDIR)/libutil_a-CorrectionThresholds.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CorrectionThresholds.cpp' object='libutil_a-CorrectionThresholds.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-CorrectionThresholds.o `test -f 'CorrectionThresholds.cpp' || echo '$(srcdir)/'`CorrectionThresholds.cpp libutil_a-CorrectionThresholds.obj: CorrectionThresholds.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-CorrectionThresholds.obj -MD -MP -MF $(DEPDIR)/libutil_a-CorrectionThresholds.Tpo -c -o libutil_a-CorrectionThresholds.obj `if test -f 'CorrectionThresholds.cpp'; then $(CYGPATH_W) 'CorrectionThresholds.cpp'; else $(CYGPATH_W) '$(srcdir)/CorrectionThresholds.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-CorrectionThresholds.Tpo $(DEPDIR)/libutil_a-CorrectionThresholds.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CorrectionThresholds.cpp' object='libutil_a-CorrectionThresholds.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-CorrectionThresholds.obj `if test -f 'CorrectionThresholds.cpp'; then $(CYGPATH_W) 'CorrectionThresholds.cpp'; else $(CYGPATH_W) '$(srcdir)/CorrectionThresholds.cpp'; fi` libutil_a-ClusterReader.o: ClusterReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-ClusterReader.o -MD -MP -MF $(DEPDIR)/libutil_a-ClusterReader.Tpo -c -o libutil_a-ClusterReader.o `test -f 'ClusterReader.cpp' || echo '$(srcdir)/'`ClusterReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-ClusterReader.Tpo $(DEPDIR)/libutil_a-ClusterReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClusterReader.cpp' object='libutil_a-ClusterReader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-ClusterReader.o `test -f 'ClusterReader.cpp' || echo '$(srcdir)/'`ClusterReader.cpp libutil_a-ClusterReader.obj: ClusterReader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-ClusterReader.obj -MD -MP -MF $(DEPDIR)/libutil_a-ClusterReader.Tpo -c -o libutil_a-ClusterReader.obj `if test -f 'ClusterReader.cpp'; then $(CYGPATH_W) 'ClusterReader.cpp'; else $(CYGPATH_W) '$(srcdir)/ClusterReader.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-ClusterReader.Tpo $(DEPDIR)/libutil_a-ClusterReader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClusterReader.cpp' object='libutil_a-ClusterReader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-ClusterReader.obj `if test -f 'ClusterReader.cpp'; then $(CYGPATH_W) 'ClusterReader.cpp'; else $(CYGPATH_W) '$(srcdir)/ClusterReader.cpp'; fi` libutil_a-QualityTable.o: QualityTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-QualityTable.o -MD -MP -MF $(DEPDIR)/libutil_a-QualityTable.Tpo -c -o libutil_a-QualityTable.o `test -f 'QualityTable.cpp' || echo '$(srcdir)/'`QualityTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-QualityTable.Tpo $(DEPDIR)/libutil_a-QualityTable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='QualityTable.cpp' object='libutil_a-QualityTable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-QualityTable.o `test -f 'QualityTable.cpp' || echo '$(srcdir)/'`QualityTable.cpp libutil_a-QualityTable.obj: QualityTable.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-QualityTable.obj -MD -MP -MF $(DEPDIR)/libutil_a-QualityTable.Tpo -c -o libutil_a-QualityTable.obj `if test -f 'QualityTable.cpp'; then $(CYGPATH_W) 'QualityTable.cpp'; else $(CYGPATH_W) '$(srcdir)/QualityTable.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-QualityTable.Tpo $(DEPDIR)/libutil_a-QualityTable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='QualityTable.cpp' object='libutil_a-QualityTable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-QualityTable.obj `if test -f 'QualityTable.cpp'; then $(CYGPATH_W) 'QualityTable.cpp'; else $(CYGPATH_W) '$(srcdir)/QualityTable.cpp'; fi` libutil_a-gzstream.o: gzstream.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-gzstream.o -MD -MP -MF $(DEPDIR)/libutil_a-gzstream.Tpo -c -o libutil_a-gzstream.o `test -f 'gzstream.C' || echo '$(srcdir)/'`gzstream.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-gzstream.Tpo $(DEPDIR)/libutil_a-gzstream.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gzstream.C' object='libutil_a-gzstream.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-gzstream.o `test -f 'gzstream.C' || echo '$(srcdir)/'`gzstream.C libutil_a-gzstream.obj: gzstream.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-gzstream.obj -MD -MP -MF $(DEPDIR)/libutil_a-gzstream.Tpo -c -o libutil_a-gzstream.obj `if test -f 'gzstream.C'; then $(CYGPATH_W) 'gzstream.C'; else $(CYGPATH_W) '$(srcdir)/gzstream.C'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-gzstream.Tpo $(DEPDIR)/libutil_a-gzstream.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gzstream.C' object='libutil_a-gzstream.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-gzstream.obj `if test -f 'gzstream.C'; then $(CYGPATH_W) 'gzstream.C'; else $(CYGPATH_W) '$(srcdir)/gzstream.C'; fi` libutil_a-BitChar.o: BitChar.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-BitChar.o -MD -MP -MF $(DEPDIR)/libutil_a-BitChar.Tpo -c -o libutil_a-BitChar.o `test -f 'BitChar.cpp' || echo '$(srcdir)/'`BitChar.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-BitChar.Tpo $(DEPDIR)/libutil_a-BitChar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BitChar.cpp' object='libutil_a-BitChar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-BitChar.o `test -f 'BitChar.cpp' || echo '$(srcdir)/'`BitChar.cpp libutil_a-BitChar.obj: BitChar.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-BitChar.obj -MD -MP -MF $(DEPDIR)/libutil_a-BitChar.Tpo -c -o libutil_a-BitChar.obj `if test -f 'BitChar.cpp'; then $(CYGPATH_W) 'BitChar.cpp'; else $(CYGPATH_W) '$(srcdir)/BitChar.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-BitChar.Tpo $(DEPDIR)/libutil_a-BitChar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BitChar.cpp' object='libutil_a-BitChar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-BitChar.obj `if test -f 'BitChar.cpp'; then $(CYGPATH_W) 'BitChar.cpp'; else $(CYGPATH_W) '$(srcdir)/BitChar.cpp'; fi` libutil_a-MultiOverlap.o: MultiOverlap.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-MultiOverlap.o -MD -MP -MF $(DEPDIR)/libutil_a-MultiOverlap.Tpo -c -o libutil_a-MultiOverlap.o `test -f 'MultiOverlap.cpp' || echo '$(srcdir)/'`MultiOverlap.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-MultiOverlap.Tpo $(DEPDIR)/libutil_a-MultiOverlap.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MultiOverlap.cpp' object='libutil_a-MultiOverlap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-MultiOverlap.o `test -f 'MultiOverlap.cpp' || echo '$(srcdir)/'`MultiOverlap.cpp libutil_a-MultiOverlap.obj: MultiOverlap.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libutil_a-MultiOverlap.obj -MD -MP -MF $(DEPDIR)/libutil_a-MultiOverlap.Tpo -c -o libutil_a-MultiOverlap.obj `if test -f 'MultiOverlap.cpp'; then $(CYGPATH_W) 'MultiOverlap.cpp'; else $(CYGPATH_W) '$(srcdir)/MultiOverlap.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-MultiOverlap.Tpo $(DEPDIR)/libutil_a-MultiOverlap.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='MultiOverlap.cpp' object='libutil_a-MultiOverlap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libutil_a-MultiOverlap.obj `if test -f 'MultiOverlap.cpp'; then $(CYGPATH_W) 'MultiOverlap.cpp'; else $(CYGPATH_W) '$(srcdir)/MultiOverlap.cpp'; fi` .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` libutil_a-stdaln.o: stdaln.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libutil_a-stdaln.o -MD -MP -MF $(DEPDIR)/libutil_a-stdaln.Tpo -c -o libutil_a-stdaln.o `test -f 'stdaln.c' || echo '$(srcdir)/'`stdaln.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-stdaln.Tpo $(DEPDIR)/libutil_a-stdaln.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdaln.c' object='libutil_a-stdaln.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libutil_a-stdaln.o `test -f 'stdaln.c' || echo '$(srcdir)/'`stdaln.c libutil_a-stdaln.obj: stdaln.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libutil_a-stdaln.obj -MD -MP -MF $(DEPDIR)/libutil_a-stdaln.Tpo -c -o libutil_a-stdaln.obj `if test -f 'stdaln.c'; then $(CYGPATH_W) 'stdaln.c'; else $(CYGPATH_W) '$(srcdir)/stdaln.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libutil_a-stdaln.Tpo $(DEPDIR)/libutil_a-stdaln.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdaln.c' object='libutil_a-stdaln.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libutil_a-stdaln.obj `if test -f 'stdaln.c'; then $(CYGPATH_W) 'stdaln.c'; else $(CYGPATH_W) '$(srcdir)/stdaln.c'; fi` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libutil_a-Alphabet.Po -rm -f ./$(DEPDIR)/libutil_a-BitChar.Po -rm -f ./$(DEPDIR)/libutil_a-ClusterReader.Po -rm -f ./$(DEPDIR)/libutil_a-Contig.Po -rm -f ./$(DEPDIR)/libutil_a-CorrectionThresholds.Po -rm -f ./$(DEPDIR)/libutil_a-DNAString.Po -rm -f ./$(DEPDIR)/libutil_a-Interval.Po -rm -f ./$(DEPDIR)/libutil_a-Match.Po -rm -f ./$(DEPDIR)/libutil_a-MultiOverlap.Po -rm -f ./$(DEPDIR)/libutil_a-Pileup.Po -rm -f ./$(DEPDIR)/libutil_a-PrimerScreen.Po -rm -f ./$(DEPDIR)/libutil_a-Quality.Po -rm -f ./$(DEPDIR)/libutil_a-QualityTable.Po -rm -f ./$(DEPDIR)/libutil_a-QualityVector.Po -rm -f ./$(DEPDIR)/libutil_a-ReadInfoTable.Po -rm -f ./$(DEPDIR)/libutil_a-ReadTable.Po -rm -f ./$(DEPDIR)/libutil_a-SeqCoord.Po -rm -f ./$(DEPDIR)/libutil_a-SeqReader.Po -rm -f ./$(DEPDIR)/libutil_a-Util.Po -rm -f ./$(DEPDIR)/libutil_a-gzstream.Po -rm -f ./$(DEPDIR)/libutil_a-stdaln.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libutil_a-Alphabet.Po -rm -f ./$(DEPDIR)/libutil_a-BitChar.Po -rm -f ./$(DEPDIR)/libutil_a-ClusterReader.Po -rm -f ./$(DEPDIR)/libutil_a-Contig.Po -rm -f ./$(DEPDIR)/libutil_a-CorrectionThresholds.Po -rm -f ./$(DEPDIR)/libutil_a-DNAString.Po -rm -f ./$(DEPDIR)/libutil_a-Interval.Po -rm -f ./$(DEPDIR)/libutil_a-Match.Po -rm -f ./$(DEPDIR)/libutil_a-MultiOverlap.Po -rm -f ./$(DEPDIR)/libutil_a-Pileup.Po -rm -f ./$(DEPDIR)/libutil_a-PrimerScreen.Po -rm -f ./$(DEPDIR)/libutil_a-Quality.Po -rm -f ./$(DEPDIR)/libutil_a-QualityTable.Po -rm -f ./$(DEPDIR)/libutil_a-QualityVector.Po -rm -f ./$(DEPDIR)/libutil_a-ReadInfoTable.Po -rm -f ./$(DEPDIR)/libutil_a-ReadTable.Po -rm -f ./$(DEPDIR)/libutil_a-SeqCoord.Po -rm -f ./$(DEPDIR)/libutil_a-SeqReader.Po -rm -f ./$(DEPDIR)/libutil_a-Util.Po -rm -f ./$(DEPDIR)/libutil_a-gzstream.Po -rm -f ./$(DEPDIR)/libutil_a-stdaln.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-noinstLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/SGA/Util/Match.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Match - A pair of coordinates representing the overlapping // regions of two sequences // #include "Match.h" #include // Constructor Match::Match(const SeqCoord& sc1, const SeqCoord& sc2, bool isRC, int nd) { coord[0] = sc1; coord[1] = sc2; isReverse = isRC; numDiff = nd; } // Constructor Match::Match(int s1, int e1, int l1, int s2, int e2, int l2, bool isRC, int nd) { coord[0] = SeqCoord(s1, e1, l1); coord[1] = SeqCoord(s2, e2, l2); isReverse = isRC; numDiff = nd; } // Swap the order of the elements void Match::swap() { SeqCoord tmp = coord[0]; coord[0] = coord[1]; coord[1] = tmp; } // Flip coord2 so that it is in the same frame as coord1 void Match::canonize() { if(isRC()) coord[1].flip(); isReverse = false; } // Flip coord2 so it is out of frame of coord1 void Match::decanonize() { if(!isRC()) coord[1].flip(); isReverse = true; } // Calculation the translation offset to shift // a coord[0] position to a coord[1]. This must be calculated // using canonical coordinates int Match::calculateTranslation() const { if(!isRC()) return coord[1].interval.start - coord[0].interval.start; else { SeqCoord f = coord[1]; f.flip(); return f.interval.start - coord[0].interval.start; } } // Calculation the translation offset to shift // a coord[1] position to a coord[0]. This must be calculated // using canonical coordinates int Match::calculateInverseTranslation() const { if(!isRC()) return coord[0].interval.start - coord[1].interval.start; else { SeqCoord f = coord[0]; f.flip(); return f.interval.start - coord[1].interval.start; } } // Translate the SeqCoord c from the frame of coord[0] to coord[1] SeqCoord Match::translate(const SeqCoord& c) const { assert(coord[0].length() == coord[1].length()); // ensure translation is valid int t = calculateTranslation(); SeqCoord out; out.seqlen = coord[1].seqlen; out.interval.start = c.interval.start + t; out.interval.end = c.interval.end + t; if(isRC()) out.flip(); return out; } // Translate the SeqCoord c from the frame of coord[1] to coord[0] SeqCoord Match::inverseTranslate(const SeqCoord& c) const { assert(coord[0].length() == coord[1].length()); // ensure translation is valid int t = calculateInverseTranslation(); SeqCoord out; out.seqlen = coord[0].seqlen; out.interval.start = c.interval.start + t; out.interval.end = c.interval.end + t; if(isRC()) out.flip(); return out; } // Translate a single position from c[0] frame to c[1] int Match::translate(int c) const { assert(!isRC()); assert(coord[0].length() == coord[1].length()); // ensure translation is valid int t = calculateTranslation(); return c + t; } // Translate a single position from c[1] frame to c[0] int Match::inverseTranslate(int c) const { assert(!isRC()); assert(coord[0].length() == coord[1].length()); int t = calculateInverseTranslation(); return c + t; } // Given two matches, match_xy and match_xz infer the // match between yz. This requies coord[0] of the input // matches to be referring to the same sequence // This returns the minimal matching region, it could possibly be extended Match Match::infer(const Match& match_xy, const Match& match_xz) { assert(match_xy.coord[0].seqlen == match_xz.coord[0].seqlen); // Calculate the max/min start/end coordinates of coord[0] int s = std::max(match_xy.coord[0].interval.start, match_xz.coord[0].interval.start); int e = std::min(match_xy.coord[0].interval.end, match_xz.coord[0].interval.end); // These are the coordinates in frame X SeqCoord r_y(s, e, match_xy.coord[0].seqlen); SeqCoord r_z(s, e, match_xz.coord[0].seqlen); // Translate into the desired frame SeqCoord t_y = match_xy.translate(r_y); SeqCoord t_z = match_xz.translate(r_z); // Set the new lengths of the seqcoords t_y.seqlen = match_xy.coord[1].seqlen; t_z.seqlen = match_xz.coord[1].seqlen; return Match(t_y, t_z, match_xy.isRC() != match_xz.isRC(), -1); } // Given two matches, match_xy and match_xz, return // true if the match coordinates intersect. Assumes // that the matches have a common basis which is coord[0] bool Match::doMatchesIntersect(const Match& match_xy, const Match& match_xz) { int s = std::max(match_xy.coord[0].interval.start, match_xz.coord[0].interval.start); int e = std::min(match_xy.coord[0].interval.end, match_xz.coord[0].interval.end); if(s > e) return false; else return true; } // Expand the match outwards so one sequence is left terminal and one sequence // is right terminal. This makes it a "proper" overlap // This function assumes the coordinates are valid (see SeqCoord) void Match::expand() { assert(coord[0].isValid() && coord[1].isValid()); // This is simpler if the coordinates are in canonical form, so here were canonize // them and decanonize after bool flipped = false; if(isRC()) { flipped = true; canonize(); } // left expansion if(!coord[0].isLeftExtreme() || !coord[1].isLeftExtreme()) { int dist = std::min(coord[0].getLeftDist(), coord[1].getLeftDist()); coord[0].interval.start -= dist; coord[1].interval.start -= dist; } // right expansion if(!coord[0].isRightExtreme() || !coord[1].isRightExtreme()) { int dist = std::min(coord[0].getRightDist(), coord[1].getRightDist()); coord[0].interval.end += dist; coord[1].interval.end += dist; } if(flipped) decanonize(); assert(coord[0].isValid() && coord[1].isValid()); } // Count the number of differences between the two strings based on the match int Match::countDifferences(const std::string& s1, const std::string& s2) const { std::string matched1 = coord[0].getSubstring(s1); std::string matched2 = coord[1].getSubstring(s2); if(isReverse) matched2 = reverseComplement(matched2); return ::countDifferences(matched1, matched2, matched1.length()); } bool Match::isSubstringContainment() const { return isContainment() && (!coord[0].isContained() || !coord[1].isContained()); } // Print the matched strings void Match::printMatch(const std::string& s1, const std::string& s2) const { std::string matched1 = coord[0].getSubstring(s1); std::string matched2 = coord[1].getSubstring(s2); if(isReverse) matched2 = reverseComplement(matched2); std::cout << "M1: " << matched1 << "\n"; std::cout << "M2: " << matched2 << "\n"; } // Output std::ostream& operator<<(std::ostream& out, const Match& m) { out << m.coord[0] << " " << m.coord[1] << " " << m.isReverse << " " << m.numDiff; return out; } // Input std::istream& operator>>(std::istream& in, Match& m) { in >> m.coord[0] >> m.coord[1] >> m.isReverse >> m.numDiff; return in; } // // Overlap // Overlap::Overlap(const std::string& i1, const std::string& i2, const Match& m) : match(m) { id[0] = i1; id[1] = i2; } Overlap::Overlap(const std::string& i1, const SeqCoord& sc1, const std::string& i2, const SeqCoord& sc2, bool isRC, int nd) { id[0] = i1; id[1] = i2; match = Match(sc1, sc2, isRC, nd); } Overlap::Overlap(const std::string& i1, int s1, int e1, int l1, const std::string& i2, int s2, int e2, int l2, bool isRC, int nd) { id[0] = i1; id[1] = i2; match = Match(s1, e1, l1, s2, e2, l2, isRC, nd); } // Return the index of the contained vertex // Precondition: the overlap is a containment size_t Overlap::getContainedIdx() const { // The verts are mutually contained, return the lexographically lower id if(match.coord[0].isContained() && match.coord[1].isContained()) { if(id[0] < id[1]) return 1; else return 0; } else if(match.coord[0].isContained()) { return 0; } else { assert(match.coord[1].isContained()); return 1; } } // Return the ID of the contained vertex // Precondition: The overlap is a containment std::string Overlap::getContainedID() const { return id[getContainedIdx()]; } // Swap the elements void Overlap::swap() { id[0].swap(id[1]); match.swap(); } // int Overlap::getOverlapLength(size_t idx) const { assert(idx <= 1); return match.coord[idx].length(); } // Output std::ostream& operator<<(std::ostream& out, const Overlap& o) { out << o.id[0] << " " << o.id[1] << " " << o.match; return out; } // Input std::istream& operator>>(std::istream& in, Overlap& o) { in >> o.id[0] >> o.id[1] >> o.match; return in; } ================================================ FILE: src/SGA/Util/Match.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Match - A pair of coordinates representing the overlapping // regions of two sequences // #ifndef MATCH_H #define MATCH_H #include "Util.h" #include "SeqCoord.h" struct Match { // functions Match() {} Match(const SeqCoord& sc1, const SeqCoord& sc2, bool isRC, int nd); Match(int s1, int e1, int l1, int s2, int e2, int l2, bool isRC, int nd); // Accessors inline bool isRC() const { return isReverse; } inline int getNumDiffs() const { return numDiff; } inline int getMinOverlapLength() const { return std::min(coord[0].length(), coord[1].length()); } inline int getMaxOverlapLength() const { return std::max(coord[0].length(), coord[1].length()); } void setNumDiffs(int n) { numDiff = n; } // Calculate the translation offset from coord[0] to coord[1] int calculateTranslation() const; int calculateInverseTranslation() const; // Translate the SeqCoord c from the frame of coord[0] to coord[1] SeqCoord translate(const SeqCoord& c) const; // Translate the SeqCoord c from the frame of coord[1] to coord[0] SeqCoord inverseTranslate(const SeqCoord& c) const; // Translate a single position from c[0] frame to c[1] int translate(int c) const; // Translate a single position from c[1] frame to c[0] int inverseTranslate(int c) const; // Swap the coords of this element void swap(); // Infer an overlap between yz given matches xy and xz static Match infer(const Match& match_xy, const Match& match_xz); static bool doMatchesIntersect(const Match& match_xy, const Match& match_xz); // Expand a match outwards so each end is terminal for both coordinates void expand(); // Count the number of differences between the strings assuming no indels int countDifferences(const std::string& s1, const std::string& s2) const; // Print the matched strings void printMatch(const std::string& s1, const std::string& s2) const; // Flip coord[1] if isReverse is true, effectively // bringing the matching strings into the same coordinate system void canonize(); void decanonize(); // Returns true if one overlap is contained within the other, ie they are not equal bool isSubstringContainment() const; bool isContainment() const { return coord[0].isContained() || coord[1].isContained(); } // IO friend std::ostream& operator<<(std::ostream& out, const Match& m); friend std::istream& operator>>(std::istream& in, Match& m); // data SeqCoord coord[2]; bool isReverse; int numDiff; }; // Overlap struct Overlap { // constructors Overlap() {} Overlap(const std::string& i1, const std::string& i2, const Match& m); Overlap(const std::string& i1, const SeqCoord& sc1, const std::string& i2, const SeqCoord& sc2, bool isRC, int nd); Overlap(const std::string& i1, int s1, int e1, int l1, const std::string& i2, int s2, int e2, int l2, bool isRC, int nd); // functions // Swap the order of the elements void swap(); // bool isContainment() const { return match.isContainment(); } bool isSubstringContainment() const { return match.isSubstringContainment(); } // Return the index (0 or 1) of the CONTAINED vertex (the discarded vertex of a containment) size_t getContainedIdx() const; std::string getContainedID() const; // int getOverlapLength(size_t idx) const; friend std::ostream& operator<<(std::ostream& out, const Overlap& o); friend std::istream& operator>>(std::istream& in, Overlap& o); // data std::string id[2]; Match match; }; // Collections typedef std::vector OverlapVector; #endif ================================================ FILE: src/SGA/Util/Metrics.h ================================================ ///----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Metrics - Data structures to record data metrics // error rates, error distributions, etc // #ifndef METRICS_H #define METRICS_H #include struct ErrorCount { int64_t num_samples; int64_t num_errors; }; template class ErrorCountMap { typedef std::map DataMap; public: ErrorCountMap() {} // void incrementSample(const Key& key) { ++m_data[key].num_samples; } // void incrementError(const Key& key) { ++m_data[key].num_errors; } // void write(std::ostream* pWriter, const std::string& leader, const std::string& header) { *pWriter << leader; *pWriter << header << "\tsamples\terrors\tfraction\n"; for(typename DataMap::iterator iter = m_data.begin(); iter != m_data.end(); ++iter) { *pWriter << iter->first << "\t" << iter->second.num_samples << "\t" << iter->second.num_errors << "\t" << (double)iter->second.num_errors / iter->second.num_samples << "\n"; } } private: DataMap m_data; }; #endif ================================================ FILE: src/SGA/Util/MultiAlignment.cpp ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // MultiAlignment - Class constructing a multiple // alignment between a root sequence and a set of sequences // #include #include #include #include #include "MultiAlignment.h" #include "StdAlnTools.h" struct CigarIter { const MAlignData* pData; int symIdx; // the index of the cigar string we are parsing int baseIdx; // the index of the current base char updateAndEmit(char updateMode) { char cigSym = getCigarSymbol(); char outBase; if(updateMode == 'I') { if(cigSym == 'I') { symIdx += 1; outBase = '-'; } else if(cigSym == 'D') { assert(false); } else { symIdx += 1; outBase = getOutputBase(cigSym); if(outBase != '.' && outBase != '-') baseIdx += 1; } } else if(updateMode == 'D') { if(cigSym == 'D') { symIdx += 1; outBase = getOutputBase(cigSym); if(outBase != '.') baseIdx += 1; } else if(cigSym == 'I') { outBase = '-'; } else if(cigSym == 'S') { outBase = '.'; } else { outBase = '-'; //symIdx += 1; } } else { symIdx += 1; outBase = getOutputBase(cigSym); if(outBase != '.') baseIdx += 1; } return outBase; } char getCigarSymbol() { if(symIdx >= (int)pData->expandedCigar.size()) return 'S'; return pData->expandedCigar[symIdx]; } char getOutputBase(char cigSym) { if(cigSym == 'S' || cigSym == 'N') return '.'; else return pData->str[baseIdx]; } static bool sortPosition(const CigarIter& a, const CigarIter& b) { return a.pData->position < b.pData->position; } }; typedef std::vector CigarIterVector; MultiAlignment::MultiAlignment(std::string rootStr, const MAlignDataVector& inData, std::string rootName) { m_verbose = 1; // Build a padded multiple alignment from the pairwise alignments to the root CigarIterVector iterVec; // Create entry for the root MAlignData rootData; rootData.str = rootStr; rootData.expandedCigar = std::string(rootStr.size(), 'M'); rootData.position = 0; rootData.name = rootName; m_alignData.push_back(rootData); m_alignData.insert(m_alignData.end(), inData.begin(), inData.end()); CigarIter tmp = {&rootData, 0, 0}; iterVec.push_back(tmp); if(m_verbose > 1) printf("%d\t%s\n", 0, tmp.pData->expandedCigar.c_str()); for(size_t i = 0; i < inData.size(); ++i) { CigarIter iter = {&inData[i], 0, 0}; iterVec.push_back(iter); if(m_verbose > 1) printf("%zu\t%s\n", i+1, iter.pData->expandedCigar.c_str()); } // Build the padded strings by inserting '-' as necessary bool done = false; while(!done) { // Check if any strings have a deletion or insertion at this base bool hasDel = false; bool hasInsert = false; bool hasMatch = false; for(size_t i = 0; i < iterVec.size(); ++i) { char sym = iterVec[i].getCigarSymbol(); if(sym == 'D') hasDel = true; else if(sym == 'I') hasInsert = true; else if(sym == 'M') hasMatch = true; } done = !hasDel && !hasInsert && !hasMatch; if(done) break; char updateMode = hasDel ? 'D' : (hasInsert ? 'I' : 'M'); for(size_t i = 0; i < iterVec.size(); ++i) { char outSym = iterVec[i].updateAndEmit(updateMode); m_alignData[i].padded.append(1,outSym); } } } // size_t MultiAlignment::getIdxByName(const std::string& name) const { size_t max = std::numeric_limits::max(); size_t idx = max; for(size_t i = 0; i < m_alignData.size(); ++i) { if(m_alignData[i].name == name) { if(idx == max) { idx = i; } else { std::cerr << "Error in MultiAlignment::getIdxByName: duplicate rows found for " << name << "\n"; exit(EXIT_FAILURE); } } } if(idx == max) { std::cerr << "Error in MultiAlignment::getIdxByName: row not found for " << name << "\n"; exit(EXIT_FAILURE); } return idx; } // size_t MultiAlignment::getNumColumns() const { assert(!m_alignData.empty()); return m_alignData.front().padded.size(); } std::string MultiAlignment::getCigar(size_t rowIdx) const { assert(rowIdx < m_alignData.size()); std::cout << "MA has " << m_alignData.size() << " elements\n"; return StdAlnTools::compactCigar(m_alignData[rowIdx].expandedCigar); } // char MultiAlignment::getSymbol(size_t rowIdx, size_t colIdx) const { assert(rowIdx < m_alignData.size()); assert(colIdx < m_alignData[rowIdx].padded.size()); return m_alignData[rowIdx].padded[colIdx]; } size_t MultiAlignment::getBaseIdx(size_t rowIdx, size_t colIdx) const { assert(rowIdx < m_alignData.size()); assert(colIdx < m_alignData[rowIdx].padded.size()); // Convert the column index to the baseIndex in the sequence at // Ensure this is a real base on the target string. assert(getSymbol(rowIdx, colIdx) != '-'); // Substract the number of padding charcters from the column index to get the // base index size_t padSyms = 0; for(size_t i = 0; i < colIdx; ++i) { if(getSymbol(rowIdx, i) == '-') padSyms += 1; } assert(padSyms <= colIdx); return colIdx - padSyms; } // std::string MultiAlignment::getPaddedSubstr(size_t rowIdx, size_t start, size_t length) const { assert(rowIdx < m_alignData.size()); assert(start < m_alignData[rowIdx].padded.size()); assert(start + length <= m_alignData[rowIdx].padded.size()); return m_alignData[rowIdx].padded.substr(start, length); } // Count the length of the homopolymer starting at from size_t MultiAlignment::countHomopolymer(size_t rowIdx, int from, int to) const { assert(rowIdx < m_alignData.size()); assert(from < (int)m_alignData[rowIdx].padded.size()); // if(to == -1) to = m_alignData[rowIdx].padded.size() - 1; // inclusive // Determine iteration direction int step = from <= to ? 1 : -1; // The first or last column of the multiple alignment was requested // This can only be a homopolymer of length 1 if(from == (int)m_alignData[rowIdx].padded.size() - 1 || (from == 0 && step < 0)) return 1; // Get the base of the homopolymer // If it is a padding symbol we use the next non-padded base in the sequence char b = '\0'; int max_position = (int)m_alignData[rowIdx].padded.size() - 1; while(from >= 0 && from <= max_position) { b = getSymbol(rowIdx, from); if(b == '-') from += step; else break; } size_t length = 1; do { from += step; if(from < 0 || from > max_position) return length; char s = getSymbol(rowIdx, from); if(s == '-') continue; if(s == b) length += 1; else break; } while(from != to); return length; } // Generate simple consensus string from the multiple alignment std::string MultiAlignment::generateConsensus() { assert(!m_alignData.empty() && !m_alignData.front().padded.empty()); std::string consensus; std::string paddedConsensus; std::map baseMap; size_t num_rows = m_alignData.size() - 1; // do not include root size_t num_cols = m_alignData.front().padded.size(); for(size_t i = 0; i < num_cols; ++i) { baseMap.clear(); for(size_t j = 1; j < num_rows; ++j) { char b = m_alignData[j].padded[i]; if(b != '.') baseMap[b]++; } int max = 0; char maxBase = '.'; for(std::map::iterator iter = baseMap.begin(); iter != baseMap.end(); ++iter) { if(iter->second > max) { max = iter->second; maxBase = iter->first; } } paddedConsensus.append(1,maxBase); if(maxBase == '.' && consensus.empty()) continue; // skip no-call at beginning else if(maxBase == '.') break; // non-called position in middle of read, stop consensus generation else if(maxBase != '-') // consensus.append(1, maxBase); } if(m_verbose > 0) print(80, &paddedConsensus); return consensus; } // Generate a string representing the columns that differ between the strings std::string MultiAlignment::generateMatchString() const { assert(!m_alignData.empty() && !m_alignData.front().padded.empty()); std::string matchString; size_t num_rows = m_alignData.size(); size_t num_cols = m_alignData.front().padded.size(); for(size_t i = 0; i < num_cols; ++i) { char rootChar = m_alignData[0].padded[i]; bool allMatch = true; for(size_t j = 1; j < num_rows; ++j) { char b = m_alignData[j].padded[i]; if(b != rootChar) allMatch = false; } matchString.append(1, allMatch ? '*' : ' '); } return matchString; } // void MultiAlignment::filterByEditDistance(int max_edit_distance) { size_t num_rows = m_alignData.size(); assert(num_rows > 0); size_t num_cols = m_alignData.front().padded.size(); std::vector keep_vector(num_rows, true); for(size_t i = 1; i < num_rows; ++i) { int current_edit_distance = 0; for(size_t j = 0; j < num_cols; ++j) { char root_symbol = getSymbol(0, j); char seq_symbol = getSymbol(i, j); if(root_symbol != '.' && seq_symbol != '.' && seq_symbol != '-' && root_symbol != seq_symbol) current_edit_distance++; } if(current_edit_distance > max_edit_distance) keep_vector[i] = false; } MAlignDataVector tmp_ma; for(size_t i = 0; i < num_rows; ++i) { if(keep_vector[i]) tmp_ma.push_back(m_alignData[i]); } printf("Removed %zu\n", m_alignData.size() - tmp_ma.size()); m_alignData.swap(tmp_ma); } // void MultiAlignment::print(int col_size, const std::string* pConsensus, bool sorted, bool masked) const { assert(!m_alignData.empty() && !m_alignData.front().padded.empty()); std::string matchString = generateMatchString(); // Create a copy of the m_alignData and sort it by position MAlignDataVector sortedAlignments = m_alignData; if(sorted) std::stable_sort(sortedAlignments.begin(), sortedAlignments.end(), MAlignData::sortPosition); col_size = 100000; size_t len = sortedAlignments[0].padded.size(); for(size_t l = 0; l < len; l += col_size) { // Print the consensus if requested if(pConsensus != NULL) { int diff = pConsensus->size() - l; int stop = diff < col_size ? diff : col_size; if(stop > 0) printf("C\t%s\n", pConsensus->substr(l,stop).c_str()); else printf("C\n"); } // Print each row for(size_t i = 0; i < sortedAlignments.size(); ++i) { const MAlignData& mad = sortedAlignments[i]; int diff = mad.padded.size() - l; int stop = diff < col_size ? diff : col_size; std::string s = mad.padded.substr(l, stop).c_str(); if(masked) { for(size_t j = 0; j < s.size(); ++j) { // get base row symbol char rb = getSymbol(0, l + j); if(s[j] == rb && s[j] != '-') s[j] = '='; } } printf("%zu\t%s\t%s\n", i, s.c_str(), mad.name.c_str()); } // Print the matched columns int diff = matchString.size() - l; int stop = diff < col_size ? diff : col_size; printf("M\t%s\n", matchString.substr(l, stop).c_str()); std::cout << "\n"; } } // Construct a multiple alignment of the input strings from global alignments // to the first element in the vector MultiAlignment MultiAlignmentTools::alignSequencesGlobal(const SeqItemVector& sequences) { assert(!sequences.empty()); const std::string& base = sequences[0].seq.toString(); MAlignDataVector madVector; for(size_t i = 1; i < sequences.size(); ++i) { std::string seq = sequences[i].seq.toString(); std::string cigar = StdAlnTools::globalAlignmentCigar(seq, base); // Initialize the multiple alignment data MAlignData maData; maData.position = 0; maData.str = seq; maData.expandedCigar = StdAlnTools::expandCigar(cigar); maData.name = sequences[i].id; madVector.push_back(maData); } return MultiAlignment(base, madVector, sequences[0].id); } // Construct a multiple alignment of the input strings from local alignments // to the first element of the vector MultiAlignment MultiAlignmentTools::alignSequencesLocal(const SeqItemVector& sequences) { assert(!sequences.empty()); const std::string& base = sequences[0].seq.toString(); MAlignDataVector madVector; for(size_t i = 1; i < sequences.size(); ++i) { // The alignment is (slightly counterintuitively) with respect to the // base string as the query so that all the cigar strings used // are based on edit operations to the base. std::string seq = sequences[i].seq.toString(); LocalAlignmentResult result = StdAlnTools::localAlignment(seq,base); // Initialize the multiple alignment data MAlignData maData; maData.position = result.queryStartIndex; // If the non-base sequence overhangs the base, clip it if(result.targetStartIndex > 0) maData.str = seq.substr(result.targetStartIndex); else maData.str = seq; // Pad out the cigar with reference skip characters maData.expandedCigar = StdAlnTools::expandCigar(result.cigar); maData.name = sequences[i].id; madVector.push_back(maData); } return MultiAlignment(base, madVector, sequences[0].id); } ================================================ FILE: src/SGA/Util/MultiAlignment.h ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // MultiAlignment - Class constructing a multiple // alignment between a root sequence and a set of sequences // #ifndef MULTIALIGNMENT_H #define MULTIALIGNMENT_H #include #include #include "Util.h" struct MAlignData { public: std::string str; std::string expandedCigar; // cigar string with symbol counts expanded int position; // start position of the alignment to the root std::string name; // named identifier for this sequence in the MA private: friend class MultiAlignment; std::string padded; // Comparator static bool sortPosition(const MAlignData& a, const MAlignData& b) { return a.position < b.position; } }; typedef std::vector MAlignDataVector; class MultiAlignment { public: MultiAlignment(std::string rootStr, const MAlignDataVector& inData, std::string rootName = "root"); // Experimental function to generate a consensus sequence from the MA std::string generateConsensus(); // Get the index into the m_alignData vector for a named row size_t getIdxByName(const std::string& name) const; size_t getRootIdx() const { return 0; } // Get the symbol at a particular column and row char getSymbol(size_t rowIdx, size_t colIdx) const; // Get the index of the base corresponding to colIdx for sequence at rowIdx size_t getBaseIdx(size_t rowIdx, size_t colIdx) const; // Get a substring of the padded string for the given row std::string getPaddedSubstr(size_t rowIdx, size_t start, size_t length) const; // Count the length of the homopolymer run in the substring [from, to] inclusive // If to is npos, then it is assumed to be until the end of the string // if to < from, then the count proceeds backwards (towards the beginning of the string. size_t countHomopolymer(size_t rowIdx, int from, int to = -1) const; // Return the total number of columns in the MA size_t getNumColumns() const; // Return the cigar string for one of the alignments std::string getCigar(size_t rowIdx) const; // Filter the multiple alignment by removing sequences that are more than max_edit_distance from the root sequence void filterByEditDistance(int max_edit_distance); // Print the multiple alignment, optionally with a consensus sequence void print(int col_size = 80, const std::string* pConsensus = NULL, bool sorted = true, bool masked = false) const; private: // Generate a string representing the columns that differ between the strings std::string generateMatchString() const; // data MAlignDataVector m_alignData; int m_verbose; }; namespace MultiAlignmentTools { // Construct a multiple alignment of the input strings MultiAlignment alignSequencesGlobal(const SeqItemVector& sequences); MultiAlignment alignSequencesLocal(const SeqItemVector& sequences); } #endif ================================================ FILE: src/SGA/Util/MultiOverlap.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // MultiOverlap.h - Data structure containing a set // of overlaps for a given read // #include #include #include "CorrectionThresholds.h" #include "MultiOverlap.h" #include "Alphabet.h" MultiOverlap::MultiOverlap(const std::string& rootID, const std::string& rootSeq, const std::string rootQual) : m_rootID(rootID), m_rootSeq(rootSeq), m_rootQual(rootQual) { } // void MultiOverlap::add(const std::string& seq, const Overlap& ovr) { MOData mod(seq, ovr); // Swap root read into first position if necessary if(mod.ovr.id[0] != m_rootID) mod.ovr.swap(); assert(mod.ovr.id[0] == m_rootID); // RC the sequence if it is different orientation than the root if(mod.ovr.match.isRC()) { mod.seq = reverseComplement(mod.seq); mod.ovr.match.canonize(); } // Initialize the offset value, the amount that a coordinate // for the non-root sequence must be shifted so that // the sequences are aligned mod.offset = mod.ovr.match.inverseTranslate(0); m_overlaps.push_back(mod); } // void MultiOverlap::add(const MOData& mod) { assert(mod.ovr.id[0] == m_rootID); m_overlaps.push_back(mod); } // void MultiOverlap::updateRootSeq(const std::string& newSeq) { m_rootSeq = newSeq; } // Overlap MultiOverlap::getOverlap(size_t idx) const { assert(idx < m_overlaps.size()); return m_overlaps[idx].ovr; } // std::string MultiOverlap::simpleConsensus() const { std::string out; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p = getPileup(i); AlphaCount64 ac = p.getAlphaCount(); char maxBase; BaseCount maxCount; ac.getMax(maxBase, maxCount); BaseCount rootCount = ac.get(m_rootSeq[i]); if(rootCount == maxCount) out.push_back(m_rootSeq[i]); else out.push_back(maxBase); } return out; } // int MultiOverlap::countPotentialIncorrect(size_t cutoff) const { int count = 0; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p = getPileup(i); AlphaCount64 ac = p.getAlphaCount(); char maxBase; BaseCount maxCount; ac.getMax(maxBase, maxCount); BaseCount rootCount = ac.get(m_rootSeq[i]); if(maxBase != m_rootSeq[i] && rootCount < cutoff) ++count; } return count; } // int MultiOverlap::countBasesCovered() const { int count = 0; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p = getPileup(i); if(p.getDepth() > 1) ++count; } return count; } // Determine if this multi-overlap has a conflicted position, // which is a position in the multioverlap where the second-most // prevalent base has a frequency greater than cutoff bool MultiOverlap::isConflicted(size_t cutoff) const { for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p = getPileup(i); AlphaCount64 ac = p.getAlphaCount(); char order[5]; ac.getSorted(order, 5); // If the second-most prevalent base is greater than the cutoff // we consider the MO to be conflicted if(ac.get(order[1]) > cutoff) return true; } return false; } // Returns true if the overlap at idx has the include flag set int MultiOverlap::getPartition(size_t idx) const { assert(idx < m_overlaps.size()); return m_overlaps[idx].partitionID; } // Returns true if the overlap at idx has the include flag set void MultiOverlap::setPartition(size_t idx, int p) { assert(idx < m_overlaps.size()); m_overlaps[idx].partitionID = p; } // Return the total number of bases in the multioverlap size_t MultiOverlap::getNumBases() const { size_t count = 0; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p = getPileup(i); count += p.getDepth(); } return count; } // Conflict-aware consensus algorithm // For each position of the read, it calculates whether that position is conflicted (there is // sufficient support for an alternative base at that position). All reads that differ from the // root read at a conflicted position are filtered out. The remaining set of reads match the root read // at all the conflicted positions and the consensus is called from this set. Bases that are not conflicted // are called from the entire set of overlaps. std::string MultiOverlap::consensusConflict(double /*p_error*/, int conflictCutoff) { // Calculate the frequency vector for each base of the read std::vector acVec; for(size_t i = 0; i < m_rootSeq.size(); ++i) { AlphaCount64 ac = getAlphaCount(i); acVec.push_back(ac); } // Sort the alphacounts by frequency StringVector sortedVec; sortedVec.reserve(acVec.size()); for(size_t i = 0; i < acVec.size(); ++i) { char sorted[ALPHABET_SIZE]; acVec[i].getSorted(sorted, ALPHABET_SIZE); sortedVec.push_back(std::string(sorted, ALPHABET_SIZE)); } // Filter out overlaps that do not match the reference // at conflicted positions for(size_t j = 0; j < m_overlaps.size(); ++j) { int numMatch = 0; int numMismatch = 0; int numConflicted = 0; for(size_t i = 0; i < acVec.size(); ++i) { char rootBase = m_rootSeq[i]; std::string& sorted = sortedVec[i]; int second = acVec[i].get(sorted[1]); // If the second-most prevelent base is above the conflict cutoff, // call this position conflicted bool isConflict = second > conflictCutoff; // Get the basecall for read j at position i char b = getMODBase(m_overlaps[j], i); if(isConflict) { // Check if the read matches the root if: // a) the read contains a basecall at this position (it overlaps // the read at this position) // b) the root read base is one of the two most frequent bases // (to filter out sequencing errors at this position in the root). int rootCount = acVec[i].get(rootBase); if(b != '\0' && rootCount > conflictCutoff) { if(b == rootBase) ++numMatch; else ++numMismatch; ++numConflicted; } } } // Set the overlap score to be the fraction of conflict bases that this read // matches the root read at. double frac; if(numConflicted == 0) frac = 1.0f; else frac = (double)numMatch/(double)numConflicted; m_overlaps[j].score = frac; // Filter out the read if there are any conflicted bases // that this read does not match the root read at if(numConflicted > 0 && numMismatch > 0) m_overlaps[j].partitionID = 1; else m_overlaps[j].partitionID = 0; } // Calculate the consensus sequence using all the reads // in partition 1 std::string consensus; std::vector supportVector; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p0; Pileup p1; getPartitionedPileup(i, p0, p1); AlphaCount64 ac = p0.getAlphaCount(); size_t minSupport = CorrectionThresholds::Instance().getMinSupportLowQuality(); if(!m_rootQual.empty()) { int phredScore = Quality::char2phred(m_rootQual[i]); minSupport = CorrectionThresholds::Instance().getRequiredSupport(phredScore); } size_t callSupport = ac.get(m_rootSeq[i]); if(callSupport >= minSupport) { // This base does not require correction consensus.push_back(m_rootSeq[i]); } else { // Attempt to correct the base with the most frequent base // in the partitioned pileup if it has been seen more often // than the root base char sorted[ALPHABET_SIZE]; ac.getSorted(sorted, ALPHABET_SIZE); size_t bestSupport = ac.get(sorted[0]); bool corrected = false; if(bestSupport > callSupport) { consensus.push_back(sorted[0]); callSupport = bestSupport; corrected = true; } else { // A correction could not be made with the // partitioned pileup, try to use the full pileup // if this base is not conflicted acVec[i].getSorted(sorted, ALPHABET_SIZE); int second = acVec[i].get(sorted[1]); bool isConflict = second > conflictCutoff; if(!isConflict) { bestSupport = acVec[i].get(sorted[0]); if(bestSupport > callSupport) { consensus.push_back(sorted[0]); corrected = true; } } } if(!corrected) { consensus.push_back(m_rootSeq[i]); } } } return consensus; } // bool MultiOverlap::qcCheck() const { for(size_t i = 0; i < m_rootSeq.size(); ++i) { AlphaCount64 ac = getAlphaCount(i); size_t callSupport = ac.get(m_rootSeq[i]); if(callSupport < 2) return false; } return true; } // void MultiOverlap::countOverlaps(size_t& prefix_count, size_t& suffix_count) const { prefix_count = 0; suffix_count = 0; for(size_t i = 0; i < m_overlaps.size(); ++i) { if(!m_overlaps[i].ovr.match.coord[0].isContained()) { if(m_overlaps[i].ovr.match.coord[0].isLeftExtreme()) ++prefix_count; if(m_overlaps[i].ovr.match.coord[0].isRightExtreme()) ++suffix_count; } } } // double MultiOverlap::getMeanDepth() const { double depth = 0.0f; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p = getPileup(i); depth += p.getDepth(); } return depth / m_rootSeq.size(); } // int MultiOverlap::calculateCoverageOverlap() { int rightmost_prefix = -1; int leftmost_suffix = m_rootSeq.length(); for(size_t i = 0; i < m_overlaps.size(); ++i) { if(!m_overlaps[i].ovr.match.coord[0].isContained()) { if(m_overlaps[i].ovr.match.coord[0].isLeftExtreme()) { // Prefix overlap int end = m_overlaps[i].ovr.match.coord[0].interval.end; if(end > rightmost_prefix) rightmost_prefix = end; } else { // Suffix overlap int start = m_overlaps[i].ovr.match.coord[0].interval.start; if(start < leftmost_suffix) leftmost_suffix = start; } } } if(leftmost_suffix > rightmost_prefix) return 0; else return rightmost_prefix - leftmost_suffix + 1; } std::string MultiOverlap::calculateConsensusFromPartition(double p_error) { std::string out; out.reserve(m_rootSeq.size()); // require the best base call to be above this above to correct it double epsilon = 0.01; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p0; Pileup p1; getPartitionedPileup(i, p0, p1); DNADouble ap = p0.calculateLikelihoodNoQuality(p_error); char best_c; char curr_c = m_rootSeq[i]; double max; ap.getMax(best_c, max); //printf("%zu best: %c curr: %c max: %lf curr_l: %lf\n", i, best_c, curr_c, max, ap.get(curr_c)); // Require the called value to be substantially better than the // current base if(best_c == curr_c || (best_c != curr_c && max - ap.get(curr_c) < epsilon)) { //std::cout << "using current\n"; out.push_back(curr_c); } else { //std::cout << "corrected\n"; out.push_back(best_c); } } return out; } // Return the base in mod that matches the base at // idx in the root seq. If mod does not overlap // the root at this position, returns '\0' char MultiOverlap::getMODBase(const MOData& mod, int idx) const { int trans_idx = idx - mod.offset; if(trans_idx >= 0 && size_t(trans_idx) < mod.seq.size()) return mod.seq[trans_idx]; else return '\0'; } // Get an AlphaCount64 representing the nucleotides // observed at the given column AlphaCount64 MultiOverlap::getAlphaCount(int idx) const { AlphaCount64 ac; ac.increment(m_rootSeq[idx]); for(size_t i = 0; i < m_overlaps.size(); ++i) { const MOData& curr = m_overlaps[i]; // translate idx into the frame of the current sequence int trans_idx = idx - curr.offset; if(trans_idx >= 0 && size_t(trans_idx) < curr.seq.size()) { ac.increment(curr.seq[trans_idx]); } } return ac; } // Get the "stack" of bases that aligns to // a single position of the root seq, including // the root base Pileup MultiOverlap::getPileup(int idx) const { size_t max_depth = m_overlaps.size() + 1; Pileup p(max_depth); p.add(m_rootSeq[idx]); for(size_t i = 0; i < m_overlaps.size(); ++i) { const MOData& curr = m_overlaps[i]; // translate idx into the frame of the current sequence int trans_idx = idx - curr.offset; if(trans_idx >= 0 && size_t(trans_idx) < curr.seq.size()) { p.add(curr.seq[trans_idx]); } } return p; } // Get the "stack" of bases that aligns to // a single position of the root seq, including // the root base only including the first numElems items Pileup MultiOverlap::getPileup(int idx, int numElems) const { assert((size_t)numElems < m_overlaps.size()); Pileup p; p.add(m_rootSeq[idx]); for(int i = 0; i < numElems; ++i) { const MOData& curr = m_overlaps[i]; // translate idx into the frame of the current sequence int trans_idx = idx - curr.offset; if(trans_idx >= 0 && (size_t)trans_idx < curr.seq.size()) { p.add(curr.seq[trans_idx]); } } return p; } // Get the pileup between the root sequence and one of the sequences in the MO Pileup MultiOverlap::getSingletonPileup(int base_idx, int ovr_idx) const { assert(ovr_idx < (int)m_overlaps.size()); Pileup p; p.add(m_rootSeq[base_idx]); const MOData& curr = m_overlaps[ovr_idx]; // translate idx into the frame of the current sequence int trans_idx = base_idx - curr.offset; if(trans_idx >= 0 && size_t(trans_idx) < curr.seq.size()) { p.add(curr.seq[trans_idx]); } return p; } // Fill in the pileup groups g0 and g1 void MultiOverlap::getPartitionedPileup(int idx, Pileup& g0, Pileup& g1) const { g0.add(m_rootSeq[idx]); for(size_t i = 0; i < m_overlaps.size(); ++i) { const MOData& curr = m_overlaps[i]; // translate idx into the frame of the current sequence int trans_idx = idx - curr.offset; if(trans_idx >= 0 && size_t(trans_idx) < curr.seq.size()) { if(curr.partitionID == 0) g0.add(curr.seq[trans_idx]); else g1.add(curr.seq[trans_idx]); } } } // Fill in the pileup groups g0 and g1 PileupVector MultiOverlap::getPartitionedPileup(int idx, int num_parts) const { assert(false && "untested"); PileupVector pv(num_parts); pv.push_back(Pileup()); // the root always goes in partition 0 pv.back().add(m_rootSeq[idx]); for(size_t i = 0; i < m_overlaps.size(); ++i) { const MOData& curr = m_overlaps[i]; // translate idx into the frame of the current sequence int trans_idx = idx - curr.offset; if(trans_idx >= 0 && size_t(trans_idx) < curr.seq.size()) { assert(curr.partitionID < num_parts); pv[curr.partitionID].add(curr.seq[trans_idx]); } } return pv; } // Print the MultiOverlap groups specified by the IntVec to stdout void MultiOverlap::printGroups() { for(int i = 0; i <= 1; ++i) { MultiOverlap mo_group(m_rootID, m_rootSeq); for(size_t j = 0; j < m_overlaps.size(); ++j) { const MOData& curr = m_overlaps[j]; if(curr.partitionID == i) mo_group.add(curr); } std::cout << "MO GROUP " << i << "\n"; mo_group.print(); } } // Print the MultiOverlap to stdout void MultiOverlap::print(int default_padding, int max_overhang) { std::sort(m_overlaps.begin(), m_overlaps.end(), MOData::sortOffset); std::cout << "\nDrawing overlaps for read " << m_rootID << "\n"; int root_len = int(m_rootSeq.size()); // Print the root row at the bottom printRow(default_padding, max_overhang, root_len, 0, root_len, 0, 0.0f, m_rootSeq, m_rootID); for(size_t i = 0; i < m_overlaps.size(); ++i) { const MOData& curr = m_overlaps[i]; int overlap_len = curr.ovr.match.getMaxOverlapLength(); int nd = curr.ovr.match.countDifferences(m_rootSeq, curr.seq); double score = static_cast(nd) / overlap_len; printRow(default_padding, max_overhang, root_len, curr.offset, overlap_len, nd, score, curr.seq, curr.ovr.id[1].c_str()); } } // Print a single row of a multi-overlap to stdout void MultiOverlap::printRow(int default_padding, int max_overhang, int root_len, int offset, int overlap_len, int pid, double score, const std::string& seq, const std::string& id) { int c_len = seq.length(); // This string runs from c_offset to c_offset + len // Clip the string at -max_overhang to root_len + max_overhang int left_clip = std::max(offset, -max_overhang); int right_clip = std::min(offset + c_len, root_len + max_overhang); // translate the clipping coordinates to the string coords int t_left_clip = left_clip - offset; int t_right_clip = right_clip - offset; // Calculate the length of the left padding int padding = default_padding + left_clip; std::string leader = (t_left_clip > 0) ? "..." : ""; std::string trailer = (t_right_clip < c_len) ? "..." : ""; std::string clipped = seq.substr(t_left_clip, t_right_clip - t_left_clip); padding -= leader.size(); assert(padding >= 0); std::string padding_str(padding, ' '); std::string outstr = padding_str + leader + clipped + trailer; printf("%s\t%d\t%d\t%lf\tID:%s\n", outstr.c_str(), overlap_len, pid, score, id.c_str()); } void MultiOverlap::printMasked() { printf("ROOT\t%s\t%s\n", m_rootSeq.c_str(), m_rootID.c_str()); for(size_t j = 0; j < m_overlaps.size(); ++j) { std::string out; for(size_t i = 0; i < m_rootSeq.length(); ++i) { char b = getMODBase(m_overlaps[j], i); if(b == '\0') out.push_back('.'); else if(b == m_rootSeq[i]) out.push_back('='); else out.push_back(b); } printf("OVRL\t%s\t%s\n", out.c_str(), m_overlaps[j].ovr.id[1].c_str()); } } // Print the MultiOverlap horizontally, in a pileup format void MultiOverlap::printPileup() { std::cout << "\nDrawing overlap pileup for read " << m_rootID << "\n"; for(size_t i = 0; i < m_rootSeq.size(); ++i) { Pileup p = getPileup(i); printf("%zu\t%s\n", i, p.toStr().c_str()); } } // bool MultiOverlap::MOData::sortOffset(const MOData& a, const MOData& b) { return a.offset < b.offset; } // Sort by the ID of the non-root sequence, which is // guarenteed to bethe second id in the overlap structure bool MultiOverlap::MOData::sortID(const MOData& a, const MOData& b) { assert(a.ovr.id[0] == b.ovr.id[0]); return a.ovr.id[1] < b.ovr.id[1]; } ================================================ FILE: src/SGA/Util/MultiOverlap.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // MultiOverlap.h - Data structure containing a set // of overlaps for a given read // #ifndef MULTIOVERLAP_H #define MULTIOVERLAP_H #include "Match.h" #include "Pileup.h" #include "DNADouble.h" class MultiOverlap { public: struct MOData { MOData(const std::string& s, const Overlap& o) : seq(s), ovr(o), offset(0), partitionID(0), score(0.0f) {} static bool sortOffset(const MOData& a, const MOData& b); static bool sortID(const MOData& a, const MOData& b); // data std::string seq; Overlap ovr; int offset; int partitionID; double score; static bool compareScore(const MOData& a, const MOData& b) { return a.score > b.score; } }; typedef std::vector MODVector; public: MultiOverlap(const std::string& rootID, const std::string& rootSeq, const std::string rootQual = ""); /// void add(const std::string& seq, const Overlap& ovr); void add(const MOData& mod); void updateRootSeq(const std::string& newSeq); // Overlap getOverlap(size_t idx) const; size_t getNumBases() const; // bool isConflicted(size_t cutoff) const; std::string simpleConsensus() const; // Count the number of bases that are potentially incorrect // A base is considered to be incorrect if it is not the majority in the column // and it has been seen less than cutoff times int countPotentialIncorrect(size_t cutoff) const; // Count the number of bases in the read that are covered by an overlap int countBasesCovered() const; // Partition the multioverlap into groups int getPartition(size_t idx) const; void setPartition(size_t idx, int p); std::string consensusConflict(double p_error, int conflictCutoff); // Returns true if each base of the root sequence has enough support from // other reads in the multioverlap. The level of support is determined by // the quality score. bool qcCheck() const; // Count the number of prefix and suffix overlaps void countOverlaps(size_t& prefix_count, size_t& suffix_count) const; double getMeanDepth() const; // Calculate the amount of the sequence that is covered // by both prefix and suffix overlaps. For instance: // Read --------------- // OvrP -------------- // OvrX ----------- // xx // In this case the function would return 2. // If there is no overlap, zero is returned // Read --------------- // OvrP --------- // OvrX ------------- int calculateCoverageOverlap(); std::string calculateConsensusFromPartition(double p_error); char getMODBase(const MOData& mod, int idx) const; // IO void print(int default_padding = DEFAULT_PADDING, int max_overhang = DEFAULT_MAX_OVERHANG); void printMasked(); void printPileup(); void printGroups(); private: AlphaCount64 getAlphaCount(int idx) const; Pileup getPileup(int idx) const; Pileup getPileup(int idx, int numElems) const; Pileup getSingletonPileup(int base_idx, int ovr_idx) const; void getPartitionedPileup(int idx, Pileup& g0, Pileup& g1) const; PileupVector getPartitionedPileup(int idx, int num_parts) const; void printRow(int default_padding, int max_overhang, int root_len, int offset, int overlap_len, int pid, double score, const std::string& seq, const std::string& id); // data static const int DEFAULT_PADDING = 20; static const int DEFAULT_MAX_OVERHANG = 3; std::string m_rootID; std::string m_rootSeq; std::string m_rootQual; MODVector m_overlaps; }; #endif ================================================ FILE: src/SGA/Util/NoCodec.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // NoCodec - Testing codec for EncodedString // that does not encode anything - it just returns // the numerical value of the char // #ifndef NOCODEC_H #define NOCODEC_H class NoCodec { public: typedef char UNIT_TYPE; static const int SYMBOLS_PER_UNIT = 1; // Encoded the character b into a value inline uint8_t encode(char b) const { return (uint8_t)b; } // Decode the value c into a character inline char decode(uint8_t c) const { return (char)c; } // Returns the number of units required to encode // a string of length n inline size_t getRequiredUnits(size_t n) const { return (n + SYMBOLS_PER_UNIT - 1) / SYMBOLS_PER_UNIT; } // Returns the number of symbols that can be stored // in n units inline size_t getCapacity(size_t n) const { return n * SYMBOLS_PER_UNIT; } // Returns the index of the unit to store the // i-th symbol of the string inline size_t getUnitIndex(size_t i) const { return i / SYMBOLS_PER_UNIT; } // Returns the position within a unit that the i-th symbol // should be stored in inline size_t getUnitOffset(size_t i) const { // this position is the k-th symbol of the unit return i % SYMBOLS_PER_UNIT; } // Return the amount that a value must be shifted to // store a code at a given offset inline uint8_t getOffsetShift(size_t /*offset*/) const { return 0; } // Store the value v at the i-th encoded position in the data array inline void store(UNIT_TYPE* pData, size_t i, char b) const { UNIT_TYPE& unit = pData[getUnitIndex(i)]; unit = encode(b); size_t offset = getUnitOffset(i); uint8_t shift = getOffsetShift(offset); // Clear the currrent position uint8_t mask = 0xFF; unit &= ~mask; // Set position UNIT_TYPE code = encode(b); code <<= shift; unit |= code; } // get the character stored at position i inline char get(const UNIT_TYPE* pData, size_t i) const { const UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); (void)offset; uint8_t mask = 0xFF; UNIT_TYPE code = unit & mask; uint8_t shift = 0; code >>= shift; return decode(code); } }; #endif ================================================ FILE: src/SGA/Util/Pileup.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Pileup - An array of strings containing all the seen // bases for a given region/read // #include "Pileup.h" #include "Alphabet.h" #include #include // Calculate the consensus base at this position // using a simple model where all bases are treated equally char Pileup::calculateSimpleConsensus() const { assert(!m_data.empty()); AlphaCount64 ac; for(size_t i = 0; i < m_data.size(); ++i) { ac.increment(m_data[i].base); } return ac.getMaxBase(); } // Returns the number of times each base appears in the // pileup string AlphaCount64 Pileup::getAlphaCount() const { AlphaCount64 ac; for(size_t i = 0; i < m_data.size(); ++i) { ac.increment(m_data[i].base); } return ac; } // Calculate the consensus base at this position // using a simple model where all bases are treated equally DNADouble Pileup::calculateSimpleAlphaProb() const { DNADouble ap; assert(!m_data.empty()); WARN_ONCE("Fix Pileup::calculateSimpleDNADouble numerical stability"); assert(false); for(size_t i = 0; i < ap.getAlphabetSize(); ++i) { // Calculate the posterior probability of the data given that // b is the true base char b = ALPHABET[i]; double posterior = 0.0f; for(size_t i = 0; i < m_data.size(); ++i) { if(m_data[i].base == b) posterior += log(1 - exp(m_data[1].lp)); else posterior += m_data[1].lp; } ap.set(b, posterior); } // Calculate the marginal probabilty of the data double marginal = 0.0f; for(size_t i = 0; i < DNA_ALPHABET_SIZE; ++i) { char b = ALPHABET[i]; marginal += exp(ap.get(b)); } // Scale the posterior probabilites by the marginal marginal = log(marginal); for(size_t i = 0; i < ap.getAlphabetSize(); ++i) { char b = DNA_ALPHABET::getBase(i); double lp = ap.get(b); //std::cout << "Marginal: " << marginal << " lp: " << lp << " scaled: " << lp - marginal << "\n"; ap.set(b, lp - marginal); } return ap; } // Calculate the likelihood of the data given the base call is // {A,C,G,T}. DNADouble Pileup::calculateLikelihoodNoQuality(double p_error) const { DNADouble ap; assert(!m_data.empty()); double p_correct = 1.0 - p_error; double log_error = log(p_error); double log_correct = log(p_correct); for(size_t i = 0; i < ap.getAlphabetSize(); ++i) { // Calculate the likelihood of the data given b is the true base char b = ap.getBase(i); double likelihood = 0.0f; for(size_t i = 0; i < m_data.size(); ++i) { if(m_data[i].base == b) likelihood += log_correct; else likelihood += log_error; } ap.set(b, likelihood); } return ap; } // char Pileup::getCount(char base) const { AlphaCount64 ac; for(size_t i = 0; i < m_data.size(); ++i) { ac.increment(m_data[i].base); } return ac.get(base); } // char Pileup::getBase(size_t idx) const { assert(idx < m_data.size()); return m_data[idx].base; } // size_t Pileup::getDepth() const { return m_data.size(); } // std::string Pileup::toStr() const { std::string out; out.reserve(m_data.size()); for(size_t i = 0; i < m_data.size(); ++i) out.append(1, m_data[i].base); return out; } ================================================ FILE: src/SGA/Util/Pileup.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Pileup - An array of strings containing all the seen // bases for a given region/read // #ifndef PILEUP_H #define PILEUP_H #include "Util.h" #include "Alphabet.h" #include "DNADouble.h" #define DEFAULT_PROB 0.01 #define DEFAULT_LOG_PROB -4.605170186f struct PUElem { PUElem() : base('A'), lp(0) {} PUElem(char b, double l) : base(b), lp(l) {} char base; // log probability this base is correct double lp; }; typedef std::vector PUElemVector; class Pileup { public: Pileup() {} Pileup(size_t n) { m_data.reserve(n); } char calculateSimpleConsensus() const; AlphaCount64 getAlphaCount() const; DNADouble calculateSimpleAlphaProb() const; DNADouble calculateLikelihoodNoQuality(double p_error) const; inline void add(char b) { m_data.push_back(PUElem(b, DEFAULT_LOG_PROB)); } inline void add(char b, double lp) { m_data.push_back(PUElem(b, lp)); } char getBase(size_t idx) const; char getCount(char base) const; size_t getDepth() const; std::string toStr() const; private: PUElemVector m_data; }; typedef std::vector PileupVector; #endif ================================================ FILE: src/SGA/Util/PrimerScreen.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // PrimerScreen - Singleton class to filter sequences // that match a database of primer sequences // #include "PrimerScreen.h" // Hardcoded primer sequences that we wish to filter against // Primers used in the Sanger's pcr-free library prep // See Kozarewa et al. (http://www.nature.com/nmeth/journal/v6/n4/full/nmeth.1311.html) // supplemental info. We do not use the whole primer sequences. #define ILLUMINA_SANGER_PCR_FREE_A "AATGATACGGCGACCACCGAGATCTACA" #define ILLUMINA_SANGER_PCR_FREE_B "GATCGGAAGAGCGGTTCAGCAGGAATGC" PrimerScreen::PrimerScreen() { m_db.push_back(ILLUMINA_SANGER_PCR_FREE_A); m_db.push_back(ILLUMINA_SANGER_PCR_FREE_B); } // Check seq against the primer database bool PrimerScreen::containsPrimer(const std::string& seq) { static PrimerScreen screener; // initializes singleton object if necessary // For now we only check if the first 14 // bases of seq is a perfect match to any sequence in the db // This is sufficient to get rid of the vast majority of the primer // contamination const size_t check_size = 14; std::string check = seq.substr(0, check_size); for(size_t i = 0; i < screener.m_db.size(); ++i) { if(screener.m_db[i].find(check) != std::string::npos) return true; } return false; } ================================================ FILE: src/SGA/Util/PrimerScreen.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // PrimerScreen - Singleton class to filter sequences // that match a database of primer sequences // #ifndef PRIMERSCREEN_H #define PRIMERSCREEN_H #include "Util.h" class PrimerScreen { public: // Return true if the sequence fails the primer check static bool containsPrimer(const std::string& seq); private: PrimerScreen(); StringVector m_db; }; #endif ================================================ FILE: src/SGA/Util/Profiler.h ================================================ ///---------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Profiler.h -- Lightweight macro-based function profiler. // #ifndef PROFILER_H #define PROFILER_H #include #include #include "config.h" //#define USE_PROFILER 1 #if defined(HAVE_CLOCK_GETTIME) && defined(USE_PROFILER) // Change this to determine how often the profile should print #define PROFILE_TICKS_BEFORE_PRINT 1000 // This class writes the lifespan of the object // to the output variable, in nanoseconds class TimeTracker { public: TimeTracker(size_t & output) : m_output(output) { timespec start; clock_gettime(CLOCK_REALTIME, &start); m_start_ns = start.tv_sec * 1000000000 + start.tv_nsec; } ~TimeTracker() { timespec end; clock_gettime(CLOCK_REALTIME, &end); size_t end_ns = end.tv_sec * 1000000000 + end.tv_nsec; // Update the result using an atomic compare and swap size_t diff = end_ns - m_start_ns; while(!__sync_bool_compare_and_swap(&m_output, m_output, m_output + diff)) {} } private: size_t m_start_ns; size_t& m_output; }; // Place this macros at the start of the function you wish the profile // The static variable updates are done via atomic compare and swaps so // the profiling should be threadsafe #define PROFILE_FUNC(x) static std::string __profile_name = x; \ static size_t __profile_iterations = 0; \ static size_t __profile_total_nanoseconds = 0; \ double milli_seconds = (double)__profile_total_nanoseconds / 1000000.0f; \ double avg_per_iteration = milli_seconds / __profile_iterations; \ while(!__sync_bool_compare_and_swap(&__profile_iterations, __profile_iterations, __profile_iterations + 1)) { } \ if(__profile_iterations % PROFILE_TICKS_BEFORE_PRINT == 0) \ printf("[Profile] count: %zu time: %.0lf ms avg: %.0lf ms func: %s\n", __profile_iterations, milli_seconds, avg_per_iteration, __profile_name.c_str()); \ TimeTracker __profile_timer(__profile_total_nanoseconds); #else // Eliminate the macro #define PROFILE_FUNC(x) #endif // #ifdef HAVE_CLOCK_GETTIME #endif // #ifndef PROFILER_H ================================================ FILE: src/SGA/Util/Quality.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Quality - functions for manipulating quality values // #include "Quality.h" // Return a uniform log-scaled quality vector of the given size DoubleVector Quality::uniformLogProbVector(double p_error, size_t n) { double lp = log(p_error); DoubleVector dv; dv.reserve(n); for(size_t i = 0; i < n; ++i) dv.push_back(lp); return dv; } // Return a string which encodes the log-scaled double vector as characters std::string Quality::encodeLogProbVector(const DoubleVector& dv) { std::string out; out.reserve(dv.size()); for(size_t i = 0; i < dv.size(); ++i) out.push_back(phred2char(lnprob2phred(dv[i]))); return out; } ================================================ FILE: src/SGA/Util/Quality.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Quality - functions for manipulating quality values // #ifndef QUALITY_H #define QUALITY_H #include #include #include #include #include #include static const int DEFAULT_QUAL_SCORE = 15; static const int PHRED64_DIFF = 31; typedef std::vector DoubleVector; namespace Quality { // Convert the quality character from phred64 to phred33 encoding inline char phred64toPhred33(char c) { return (int)c - PHRED64_DIFF; } // Returns true if the character c is a valid phred 33 encoding // of a quality value in the range [0, 60] inline bool isValidPhred33(char c) { int p = (int)c - 33; return p >= 0 && p <= 60; } // Phred score transformations inline int char2phred(char b) { uint8_t v = b; assert(v >= 33); return v - 33; } inline char phred2char(int p) { uint8_t v = (p <= 93) ? p : 93; char c = v + 33; return c; } inline int prob2phred(double p) { return static_cast(round(-10.0f * log10(p))); } inline int lnprob2phred(double lp) { // change base static double transform = log(10); lp /= transform; return static_cast(round(-10.0f * lp)); } // Return a uniform log-scaled quality vector of the given size DoubleVector uniformLogProbVector(double p_error, size_t n); // Return a string which encodes the log-scaled double vector as characters std::string encodeLogProbVector(const DoubleVector& dv); }; #endif ================================================ FILE: src/SGA/Util/QualityCodec.h ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // QualityCodec - Encoder/decoder for a quality // symbols. Supports downsampling to a small range. // #ifndef QUALITYCODEC_H #define QUALITYCODEC_H #include #include typedef uint8_t QualityStorageUnit; template class QualityCodec { public: typedef QualityStorageUnit UNIT_TYPE; static const int SYMBOLS_PER_UNIT = 8 / BITS; // These values are the lowest and highest quality // values that are stored. The other values are interpolated // between these range static const int PHRED_MIN = 0; static const int PHRED_MAX = 40; static const int QUALITY_RANGE = PHRED_MAX - PHRED_MIN; static const int QUALITY_BINS = 1 << BITS; static const int BIN_SIZE = (QUALITY_RANGE + QUALITY_BINS - 1) / QUALITY_BINS; // ceiling // Encode the character b into a value inline uint8_t encode(char b) const { // Compute the quality bin to place this value in int phred = Quality::char2phred(b); // Clamp values if(phred < 0) phred = 0; UNIT_TYPE bin_idx = (phred - PHRED_MIN) / BIN_SIZE; if(bin_idx >= QUALITY_BINS) bin_idx = QUALITY_BINS - 1; //std::cout << "Q: " << b << " phred: " << phred << " c: " << (int)bin_idx << "\n"; //decode(bin_idx); return bin_idx; } // Decode the value c into a character inline char decode(uint8_t c) const { // Return the midpoint value of the bin int phred = (2 * c + 1) * BIN_SIZE / 2; char b = Quality::phred2char(phred); //std::cout << "c: " << (int)c << " phred: " << phred << " Q: " << b << "\n"; return b; } // Returns the number of units required to encode // a string of length n inline size_t getRequiredUnits(size_t n) const { return (n + SYMBOLS_PER_UNIT - 1) / SYMBOLS_PER_UNIT; } // Returns the number of symbols that can be stored // in n units inline size_t getCapacity(size_t n) const { return n * SYMBOLS_PER_UNIT; } // Returns the index of the unit to store the // i-th symbol of the string inline size_t getUnitIndex(size_t i) const { return i / SYMBOLS_PER_UNIT; } // Returns the position within a unit that the i-th symbol // should be stored in inline size_t getUnitOffset(size_t i) const { // this position is the k-th symbol of the unit return i % SYMBOLS_PER_UNIT; } // Return the amount that a value must be shifted to // store a code at a given offset inline uint8_t getOffsetShift(size_t offset) const { return BITS*(SYMBOLS_PER_UNIT - 1 - offset); } // Return a mask that can be used to select a single value by ANDing a storage unit inline uint8_t getOffsetMask(size_t offset) const { return ((1 << BITS) - 1) << getOffsetShift(offset); } // Store the value v at the i-th encoded position in the data array inline void store(UNIT_TYPE* pData, size_t i, char b) const { UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); uint8_t shift = getOffsetShift(offset); // Clear the unsigned char mask = getOffsetMask(offset); // Clear position unit &= ~mask; // Set position uint8_t code = encode(b); code <<= shift; unit |= code; /* std::cout << "E Unit: " << getUnitIndex(i) << "\n"; std::cout << "E Offset: " << offset << "\n"; std::cout << "E Shift: " << (int)shift << "\n"; std::cout << "E Mask: " << (int)mask << "\n"; std::cout << "E UnitV: " << (int)unit << "\n"; */ } // get the character stored at position i inline char get(const UNIT_TYPE* pData, size_t i) const { const UNIT_TYPE& unit = pData[getUnitIndex(i)]; size_t offset = getUnitOffset(i); unsigned char mask = getOffsetMask(offset); UNIT_TYPE code = unit & mask; uint8_t shift = getOffsetShift(offset); code >>= shift; /* std::cout << "D Unit: " << getUnitIndex(i) << "\n"; std::cout << "D Offset: " << offset << "\n"; std::cout << "D Shift: " << (int)shift << "\n"; std::cout << "D Mask: " << (int)mask << "\n"; std::cout << "D UnitV: " << (int)unit << "\n"; */ return decode(code); } }; #endif ================================================ FILE: src/SGA/Util/QualityTable.cpp ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // QualityTable - A 0-indexed table of quality strings // #include #include #include "QualityTable.h" #include "QualityCodec.h" #include "SeqReader.h" // Read the sequences from a file QualityTable::QualityTable() : m_bytes_used(0) { int missing_phred = 20; m_missingQualityChar = Quality::phred2char(missing_phred); } QualityTable::~QualityTable() { for(size_t i = 0; i < m_table.size(); ++i) delete m_table[i].encoded_data; } // void QualityTable::loadQualities(const std::string& filename) { SeqReader reader(filename); SeqRecord sr; while(reader.get(sr)) addQualityString(sr.qual); } // void QualityTable::addQualityString(const std::string& qual) { size_t num_bytes_required = m_codec.getRequiredUnits(qual.size()); QualityString incoming; incoming.encoded_data = new QualityStorageUnit[num_bytes_required]; incoming.num_encoded_symbols = qual.size(); for(size_t i = 0; i < qual.size(); ++i) m_codec.store(incoming.encoded_data, i, qual[i]); m_table.push_back(incoming); //std::cout << "Stored: " << qual << "\n"; //std::cout << "Decoded: " << getQualityString(m_table.size() - 1, qual.size()) << "\n"; m_bytes_used += (sizeof(incoming) + num_bytes_required); } // std::string QualityTable::getQualityString(size_t idx, size_t n) const { // If there is no quality string for this index, return default qualities if(idx >= m_table.size()) return std::string(n, m_missingQualityChar); QualityString encoded = m_table[idx]; std::string out; out.reserve(encoded.num_encoded_symbols); for(size_t i = 0; i < encoded.num_encoded_symbols; ++i) out.push_back(m_codec.get(encoded.encoded_data, i)); assert(out.length() == n); return out; } // size_t QualityTable::getCount() const { return m_table.size(); } // void QualityTable::printSize() const { printf("QualityTable: %.2lfGB\n", (double)m_bytes_used / (1000 * 1000 * 1000)); } ================================================ FILE: src/SGA/Util/QualityTable.h ================================================ //----------------------------------------------- // Copyright 2012 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // QualityTable - A 0-indexed table of quality scores // #ifndef QUALITYTABLE_H #define QUALITYTABLE_H #include "Util.h" #include "SeqReader.h" #include "QualityCodec.h" #include struct QualityString { uint8_t num_encoded_symbols; QualityStorageUnit* encoded_data; }; typedef std::vector QualityStringVector; class QualityTable { public: // QualityTable(); ~QualityTable(); // void loadQualities(const std::string& filename); void addQualityString(const std::string& qual); std::string getQualityString(size_t idx, size_t n) const; size_t getCount() const; void clear(); // void printSize() const; private: QualityCodec<4> m_codec; QualityStringVector m_table; size_t m_bytes_used; char m_missingQualityChar; }; #endif ================================================ FILE: src/SGA/Util/QualityVector.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // QualityVector - Vector of doubles representing // log-transformed quality values for a sequence // #include #include #include #include "QualityVector.h" // QualityVector::QualityVector() { } // QualityVector::QualityVector(const QualityVector& vec, int start, int size) { assert(!vec.empty()); assert(size >= 0); assert(size + start <= (int)vec.size()); m_data.insert(m_data.end(), vec.m_data.begin() + start, vec.m_data.begin() + start + size); } // void QualityVector::add(DNADouble v) { m_data.push_back(v); } // void QualityVector::set(size_t idx, DNADouble v) { if(m_data.size() < idx) m_data.resize(idx + 1); m_data[idx] = v; } // DNADouble QualityVector::get(size_t idx) const { assert(idx < m_data.size()); return m_data[idx]; } // size_t QualityVector::size() const { return m_data.size(); } // bool QualityVector::empty() const { return m_data.empty(); } // void QualityVector::reverseComplement() { std::reverse(m_data.begin(), m_data.end()); for(size_t i = 0; i < m_data.size(); ++i) m_data[i].complement(); } ================================================ FILE: src/SGA/Util/QualityVector.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // QualityVector - Vector of doubles representing // log-transformed quality values for a sequence // #ifndef QUALITYVECTOR_H #define QUALITYVECTOR_H #include #include "Alphabet.h" #include "DNADouble.h" typedef std::vector APVec; class QualityVector { public: // Constructors QualityVector(); QualityVector(const QualityVector& vec, int start, int size); // void add(DNADouble v); void set(size_t idx, DNADouble v); DNADouble get(size_t idx) const; size_t size() const; bool empty() const; // void reverseComplement(); private: APVec m_data; }; #endif ================================================ FILE: src/SGA/Util/Read2Contig.h ================================================ #ifndef READ2CONTIG_H #define READ2CONTIG_H #include #include #include "api/BamReader.h" #include "api/BamWriter.h" #include struct Read2Contig { // Constructors Read2Contig(std::string tcname, std::string trname, unsigned tpos, std::string tseq) : cname(tcname), rname(trname), pos(tpos), seq(tseq) {} Read2Contig(std::string tcname, std::string trname, unsigned tpos, BamTools::BamAlignment ta, std::string tseq) : cname(tcname), rname(trname), pos(tpos), a(ta), seq(tseq) {} Read2Contig() {} ~Read2Contig() {} //data std::string cname; std::string rname; int pos; BamTools::BamAlignment a; std::string seq; bool valid = true; double sw_score = -1; // set the sort order bool operator < (const Read2Contig& str) const { return (pos < str.pos); } // print it out std::string toString() const { std::stringstream ss; std::string sep = ","; ss << cname << sep << rname << sep << pos << sep << seq << sep << sw_score; return ss.str(); } }; typedef std::vector R2CVec; #endif ================================================ FILE: src/SGA/Util/ReadInfoTable.cpp ================================================ // //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ReadInfoTable - A 0-indexed table of ID, length pairs // Used to convert suffix array hits to overlaps // #include #include #include "ReadInfoTable.h" #include "SeqReader.h" //JEREMIAH ReadInfoTable::ReadInfoTable(ReadTable *pRT) : m_numericIDs(false) { for (size_t i = 0; i < pRT->getCount(); i++) { m_lengths.push_back(pRT->getReadLength(i)); m_ids.push_back(pRT->getReadID(i)); } } // Read the sequences from a file ReadInfoTable::ReadInfoTable(std::string filename, size_t num_expected, ReadInfoOption option) : m_numericIDs(false) { // Do not store actual ids, use a numeric id equal to the table index if(option == RIO_NUMERICID) m_numericIDs = true; if(num_expected > 0) { m_lengths.reserve(num_expected); if(!m_numericIDs) m_ids.reserve(num_expected); } SeqReader reader(filename); SeqRecord sr; // Load the lengths and ids while(reader.get(sr)) { m_lengths.push_back(sr.seq.length()); if(!m_numericIDs) { m_ids.push_back(sr.id); } } } // ReadInfoTable::~ReadInfoTable() { } // size_t ReadInfoTable::getReadLength(size_t idx) const { assert(idx < m_lengths.size()); return m_lengths[idx]; } // std::string ReadInfoTable::getReadID(size_t idx) const { if(!m_numericIDs) { assert(idx < m_ids.size()); return m_ids[idx]; } else { // Build an identified from the idx std::stringstream idss; idss << idx; return idss.str(); } } // const ReadInfo ReadInfoTable::getReadInfo(size_t idx) const { ReadInfo ri(getReadID(idx), getReadLength(idx)); return ri; } // size_t ReadInfoTable::getCount() const { return m_lengths.size(); } // size_t ReadInfoTable::countSumLengths() const { size_t sum = 0; for(size_t i = 0; i < m_lengths.size(); ++i) sum += m_lengths[i]; return sum; } // void ReadInfoTable::clear() { m_lengths.clear(); m_ids.clear(); } ================================================ FILE: src/SGA/Util/ReadInfoTable.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ReadInfoTable - A 0-indexed table of ID, length pairs // Used to convert suffix array hits to overlaps // #ifndef READINFOTABLE_H #define READINFOTABLE_H #include "Util.h" #include "SeqReader.h" #include "ReadTable.h" #include enum ReadInfoOption { RIO_NONE, RIO_NUMERICID }; struct ReadInfo { ReadInfo() : length(0) {} ReadInfo(const std::string& i, const uint32_t& l) : id(i), length(l) {} std::string id; uint32_t length; }; typedef std::vector InfoVector; class ReadInfoTable { public: // ReadInfoTable() {} ReadInfoTable(ReadTable *pRT); // Load the table using the read in filename // If num_expected > 0, reserve room in the table for num_expected reads ReadInfoTable(std::string filename, size_t num_expected = 0, ReadInfoOption options = RIO_NONE); ~ReadInfoTable(); // const ReadInfo getReadInfo(size_t idx) const; std::string getReadID(size_t idx) const; size_t getReadLength(size_t idx) const; size_t getCount() const; size_t countSumLengths() const; void clear(); private: std::vector m_lengths; std::vector m_ids; bool m_numericIDs; }; #endif ================================================ FILE: src/SGA/Util/ReadTable.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ReadTable - A 0-indexed table of reads // #include #include #include "ReadTable.h" //JEREMIAH void ReadTable::setReadSequence(const std::string& seqr) { assert(m_table[idx-1].seq.length() == seqr.length()); m_table[idx-1].seq = seqr; } // JEREMIAH ReadTable::ReadTable(SeqRecordVector &srv) { idx = 0; m_pIndex = NULL; // not built by default for(std::vector::size_type i = 0; i != srv.size(); i++) { m_table.push_back(srv[i].toSeqItem()); } } // JEREMIAH ReadTable::ReadTable(const SeqLib::UnalignedSequenceVector &contigs) { idx = 0; m_pIndex = NULL; // not built by default for (SeqLib::UnalignedSequenceVector::const_iterator it = contigs.begin(); it != contigs.end(); it++) { SeqItem si; si.seq = it->Seq; si.id = it->Name; m_table.push_back(si); } } // std::string ReadTable::getReadID(size_t idx) const { return m_table[idx].id; } //JEREMIAH void ReadTable::setZero() { idx = 0; } // Jeremiah bool ReadTable::getRead(SeqItem &si) { if (idx >= m_table.size()) return false; si = m_table[idx]; idx++; return true; } // ReadTable::~ReadTable() { if(m_pIndex != NULL) delete m_pIndex; } // Populate this read table with the reverse reads from pRT void ReadTable::initializeReverse(const ReadTable* pRT) { size_t numReads = pRT->getCount(); m_table.reserve(numReads); for(size_t i = 0; i < numReads; ++i) { SeqItem read = pRT->getRead(i); read.seq.reverse(); addRead(read); } } // void ReadTable::reverseAll() { for(size_t i = 0; i < getCount(); ++i) m_table[i].seq.reverse(); } // void ReadTable::addRead(const SeqItem& r) { m_table.push_back(r); } // size_t ReadTable::getReadLength(size_t idx) const { return m_table[idx].seq.length(); } // const SeqItem& ReadTable::getRead(size_t idx) const { if (idx >= m_table.size()) { std::cerr << "idx " << idx << " m_table.size() " << m_table.size() << std::endl; assert(idx <= m_table.size()); } assert(idx < m_table.size()); return m_table[idx]; } // indexReadsByID must be called before this function can be used const SeqItem& ReadTable::getRead(const std::string& id) const { assert(m_pIndex != NULL); if(m_pIndex == NULL) { std::cerr << "Error: read table is not indexed (did you forget to call ReadTable::buildIndex?)\n"; assert(false); } ReadIndex::const_iterator i = m_pIndex->find(id); if(i == m_pIndex->end()) { std::cerr << "Read with id " << id << " not found in table\n"; assert(false); } return *i->second; } // build a read id -> *seqitem index void ReadTable::indexReadsByID() { m_pIndex = new ReadIndex; for(size_t i = 0; i < m_table.size(); ++i) { std::pair result = m_pIndex->insert(std::make_pair(m_table[i].id, &m_table[i])); if(!result.second) { std::cerr << "Error: Attempted to insert vertex into table with a duplicate id: " << m_table[i].id << "\n"; std::cerr << "All reads must have a unique identifier\n"; exit(1); } } } // size_t ReadTable::getCount() const { return m_table.size(); } // size_t ReadTable::countSumLengths() const { size_t sum = 0; for(size_t i = 0; i < m_table.size(); ++i) sum += m_table[i].seq.length(); return sum; } // void ReadTable::clear() { m_table.clear(); if(m_pIndex != NULL) { delete m_pIndex; m_pIndex = NULL; } } // std::ostream& operator<<(std::ostream& out, const ReadTable& rt) { size_t numReads = rt.getCount(); for(size_t i = 0; i < numReads; ++i) { const SeqItem& read = rt.getRead(i); out << read.id << "\t" << read.seq.toString() << "\n"; } return out; } ================================================ FILE: src/SGA/Util/ReadTable.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // ReadTable - A 0-indexed table of reads // #ifndef SNOWS_READTABLE_H #define SNOWS_READTABLE_H #include "Util.h" #include "SeqReader.h" #include "SeqLib/UnalignedSequence.h" #include typedef std::vector ReadVector; typedef std::map ReadIndex; class ReadTable { public: // ReadTable() : idx(0), m_pIndex(NULL) {} //ReadTable(std::string* seq, std::string * id, int length); ReadTable(SeqRecordVector &srv); ReadTable(const SeqLib::UnalignedSequenceVector &contigs); ReadTable(std::string filename, uint32_t reader_flags = 0); ~ReadTable(); // Initialize this read table as the reverse of the passed in read table void initializeReverse(const ReadTable* pRT); // Reverse all the reads in this table void reverseAll(); // Build a readid -> read index void indexReadsByID(); // void addRead(const SeqItem& r); const SeqItem& getRead(size_t idx) const; const SeqItem& getRead(const std::string& id) const; bool getRead(SeqItem &si); // JEREMIAH size_t getReadLength(size_t idx) const; size_t getCount() const; size_t countSumLengths() const; std::string getReadID(size_t idx) const; void setZero(); void clear(); // Get a particular character for a particular read inline char getChar(size_t str_idx, size_t char_idx) const { assert(str_idx < m_table.size()); return m_table[str_idx].seq.get(char_idx); } // I/O friend std::ostream& operator<<(std::ostream& out, const ReadTable& rt); //Jeremiah void setReadSequence(const std::string& seqr); private: ReadVector m_table; unsigned int idx = 0; // Index of readid -> SeqItem // It is not build be default to save memory ReadIndex* m_pIndex; }; #endif ================================================ FILE: src/SGA/Util/ReadTableNew.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ReadTable - A 0-indexed table of reads // #include #include #include "ReadTable.h" #include "SeqReader.h" //#include "contigs.h" // Read the sequences from a file ReadTable::ReadTable(std::string filename, uint32_t reader_flags) { idx = 0; m_pIndex = NULL; // not built by default SeqReader reader(filename, reader_flags); SeqRecord sr; while(reader.get(sr)) { addRead(sr.toSeqItem()); } } // ReadTable::~ReadTable() { if(m_pIndex != NULL) delete m_pIndex; } // Populate this read table with the reverse reads from pRT void ReadTable::initializeReverse(const ReadTable* pRT) { size_t numReads = pRT->getCount(); m_table.reserve(numReads); for(size_t i = 0; i < numReads; ++i) { SeqItem read = pRT->getRead(i); read.seq.reverse(); addRead(read); } } // void ReadTable::reverseAll() { for(size_t i = 0; i < getCount(); ++i) m_table[i].seq.reverse(); } // void ReadTable::addRead(const SeqItem& r) { m_table.push_back(r); } // size_t ReadTable::getReadLength(size_t idx) const { return m_table[idx].seq.length(); } // std::string ReadTable::getReadID(size_t idx) const { return m_table[idx].id; } // const SeqItem& ReadTable::getRead(size_t idx) const { assert(idx < m_table.size()); return m_table[idx]; } // JEREMIAH bool ReadTable::getRead(SeqItem &si) { if (idx >= m_table.size()) return false; si = m_table[idx]; idx++; return true; } //JEREMIAH void ReadTable::setZero() { idx = 0; } // indexReadsByID must be called before this function can be used const SeqItem& ReadTable::getRead(const std::string& id) const { assert(m_pIndex != NULL); if(m_pIndex == NULL) { std::cerr << "Error: read table is not indexed (did you forget to call ReadTable::buildIndex?)\n"; assert(false); } ReadIndex::const_iterator i = m_pIndex->find(id); if(i == m_pIndex->end()) { std::cerr << "Read with id " << id << " not found in table\n"; assert(false); } return *i->second; } // build a read id -> *seqitem index void ReadTable::indexReadsByID() { m_pIndex = new ReadIndex; for(size_t i = 0; i < m_table.size(); ++i) { std::pair result = m_pIndex->insert(std::make_pair(m_table[i].id, &m_table[i])); if(!result.second) { std::cerr << "Error: Attempted to insert vertex into table with a duplicate id: " << m_table[i].id << "\n"; std::cerr << "All reads must have a unique identifier\n"; exit(1); } } } // size_t ReadTable::getCount() const { return m_table.size(); } // size_t ReadTable::countSumLengths() const { size_t sum = 0; for(size_t i = 0; i < m_table.size(); ++i) { sum += m_table[i].seq.length(); } return sum; } // void ReadTable::clear() { m_table.clear(); if(m_pIndex != NULL) { delete m_pIndex; m_pIndex = NULL; } } // std::ostream& operator<<(std::ostream& out, const ReadTable& rt) { size_t numReads = rt.getCount(); for(size_t i = 0; i < numReads; ++i) { const SeqItem& read = rt.getRead(i); out << read.id << "\t" << read.seq.toString() << "\n"; } return out; } ================================================ FILE: src/SGA/Util/ReadTableNew.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // ReadTable - A 0-indexed table of reads // #ifndef READTABLE_H #define READTABLE_H #include "Util.h" #include "SeqReader.h" #include typedef std::vector ReadVector; typedef std::map ReadIndex; class ReadTable { public: //JEREMIAH (added idx(0)) ReadTable() : idx(0), m_pIndex(NULL) {} ReadTable(std::string filename, uint32_t reader_flags = 0); ~ReadTable(); // Initialize this read table as the reverse of the passed in read table void initializeReverse(const ReadTable* pRT); // Reverse all the reads in this table void reverseAll(); // Build a readid -> read index void indexReadsByID(); // void addRead(const SeqItem& r); const SeqItem& getRead(size_t idx) const; const SeqItem& getRead(const std::string& id) const; bool getRead(SeqItem &si); // JEREMIAH size_t getReadLength(size_t idx) const; size_t getCount() const; size_t countSumLengths() const; std::string getReadID(size_t idx) const; void setZero(); void clear(); // Get a particular character for a particular read inline char getChar(size_t str_idx, size_t char_idx) const { assert(str_idx < m_table.size()); return m_table[str_idx].seq.get(char_idx); } // I/O friend std::ostream& operator<<(std::ostream& out, const ReadTable& rt); private: ReadVector m_table; unsigned int idx; // Index of readid -> SeqItem // It is not build be default to save memory ReadIndex* m_pIndex; }; #endif ================================================ FILE: src/SGA/Util/ReadTableS.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // ReadTable - A 0-indexed table of reads // #ifndef READTABLES_H #define READTABLES_H #include "Util.h" #include "SeqReader.h" #include "contigs.h" #include #include "api/BamReader.h" typedef std::vector ReadVector; typedef std::map ReadIndex; typedef std::vector BamAlignmentVector; class ReadTable { public: // ReadTable() : m_pIndex(NULL) {} //ReadTable(std::string* seq, std::string * id, int length); ReadTable(SeqRecordVector srv); ReadTable(const BamAlignmentVector &bav); ReadTable(const vector &contigs); ReadTable(std::string filename, uint32_t reader_flags = 0); ~ReadTable(); // Initialize this read table as the reverse of the passed in read table void initializeReverse(const ReadTable* pRT); // Reverse all the reads in this table void reverseAll(); // Build a readid -> read index void indexReadsByID(); // void addRead(const SeqItem& r); const SeqItem& getRead(size_t idx) const; const SeqItem& getRead(const std::string& id) const; bool getRead(SeqItem &si); // JEREMIAH size_t getReadLength(size_t idx) const; size_t getCount() const; size_t countSumLengths() const; std::string getReadID(size_t idx) const; void setZero(); void clear(); // Get a particular character for a particular read inline char getChar(size_t str_idx, size_t char_idx) const { assert(str_idx < m_table.size()); return m_table[str_idx].seq.get(char_idx); } // I/O friend std::ostream& operator<<(std::ostream& out, const ReadTable& rt); private: ReadVector m_table; unsigned int idx; // Index of readid -> SeqItem // It is not build be default to save memory ReadIndex* m_pIndex; }; #endif ================================================ FILE: src/SGA/Util/SGAStats.cpp ================================================ //----------------------------------------------- // Copyright 2009-2013 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGAStats - Common statistics functions used // throughout the program // #include "SGAStats.h" #include #include #include // // Poisson in log space // double SGAStats::logPoisson(unsigned int k, double m) { double f_k = logFactorial(k); double p = (double)k * log(m) - m - f_k; //std::cout << "k: " << k << " f: " << f_k << " m: " << m << " p: " << p << std::endl; return p; } // // Factorial in log space // double SGAStats::logFactorial(unsigned int k) { double result = 0; while(k > 0) result += log(k--); //slow return result; } // // Log binomial pmf // double SGAStats::logBinomial(unsigned int k, unsigned int n, double p) { assert(k <= n); double b_coeff = logFactorial(n) - logFactorial(k) - logFactorial(n - k); double lp = k * log(p) + (n - k) * log(1 - p); return b_coeff + lp; } // // // double SGAStats::logIntegerBetaDistribution(double x, unsigned int a, unsigned int b) { assert(x >= 0.0f && x <= 1.0f); assert(a > 0 && b > 0); double log_beta_f = logIntegerBetaFunction(a, b); double n = pow(x, a - 1) * pow(1 - x, b - 1); double log_p = log(n) - log_beta_f; return log_p; } // // // double SGAStats::logIntegerBetaFunction(unsigned int a, unsigned int b) { assert(a > 0 && b > 0); return logFactorial(a - 1) + logFactorial(b - 1) - logFactorial(a + b - 1); } // // // double SGAStats::logIntegerBetaBinomialDistribution(unsigned int k, unsigned int n, unsigned int a, unsigned int b) { assert(a > 0 && b > 0 && k <= n); double b_coeff = logFactorial(n) - logFactorial(k) - logFactorial(n - k); return b_coeff + logIntegerBetaFunction(k + a, n - k + b) - logIntegerBetaFunction(a, b); } ================================================ FILE: src/SGA/Util/SGAStats.h ================================================ //----------------------------------------------- // Copyright 2009-2013 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SGAStats - Common statistics functions used // throughout the program // #ifndef SGASTATS_H #define SGASTATS_H namespace SGAStats { // // Probability // double logPoisson(unsigned int k, double m); double logFactorial(unsigned int k); double logBinomial(unsigned int k, unsigned int n, double p); // The logarithm of the Beta distribution pdf for the special case // that the shape parameters are positive integers double logIntegerBetaDistribution(double x, unsigned int a, unsigned int b); // The logarithm of the integer beta function double logIntegerBetaFunction(unsigned int a, unsigned int b); // The logarithm of the integer beta binomail PMF double logIntegerBetaBinomialDistribution(unsigned int k, unsigned int n, unsigned int a, unsigned int b); } #endif ================================================ FILE: src/SGA/Util/SeqCoord.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SeqCoord - A data structure holding the coordinate // of a substring of a sequence which consists of an interval and // the length of the string. Used to build matches and overlaps. // #include "SeqCoord.h" // Return a seqcoord representing the complement of the interval // For example if the seqcoord represents the matched portion of a string, // this returns a seqcoord of the unmatched portion SeqCoord SeqCoord::complement() const { SeqCoord out; out.seqlen = seqlen; if(isFull()) { out.setEmpty(); } else if(isEmpty()) { out.setFull(); } else if(isLeftExtreme()) { out.interval.start = std::max(interval.start, interval.end) + 1; out.interval.end = out.seqlen - 1; } else { assert(isRightExtreme()); out.interval.start = 0; out.interval.end = std::min(interval.start, interval.end) - 1; } assert(out.isValid()); return out; } // Returns the substring of STR described by this seqcoord std::string SeqCoord::getSubstring(const std::string& str) const { assert(isValid()); if(isEmpty()) return std::string(""); else return str.substr(interval.start, length()); } // Returns the subvector described by the seqcoord QualityVector SeqCoord::getSubvector(const QualityVector& vec) const { assert(isValid()); if(isEmpty()) return QualityVector(); else return QualityVector(vec, interval.start, length()); } // std::string SeqCoord::getComplementString(const std::string& str) const { SeqCoord comp = complement(); return comp.getSubstring(str); } // Output std::ostream& operator<<(std::ostream& out, const SeqCoord& sc) { out << sc.interval << " " << sc.seqlen; return out; } // Input std::istream& operator>>(std::istream& in, SeqCoord& sc) { in >> sc.interval >> sc.seqlen; return in; } ================================================ FILE: src/SGA/Util/SeqCoord.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SeqCoord - A data structure holding the coordinate // of a substring of a sequence which consists of an interval and // the length of the string. Used to build matches and overlaps. // #ifndef SEQCOORD_H #define SEQCOORD_H #include "Util.h" #include "Interval.h" #include "QualityVector.h" struct SeqCoord { // constructor SeqCoord() : seqlen(0) { setEmpty(); } SeqCoord(int s, int e, int l) : interval(s, e), seqlen(l) { assert(isValid()); } // functions inline bool isLeftExtreme() const { return (interval.start == 0); } inline bool isRightExtreme() const { return (interval.end + 1 == seqlen); } inline bool isExtreme() const { return (isLeftExtreme() || isRightExtreme()); } inline bool isContained() const { return (isLeftExtreme() && isRightExtreme()); } inline bool isFull() const { return length() == seqlen; } inline bool isEmpty() const { return interval.start == 0 && interval.end == -1; } inline bool isValid() const { return isEmpty() || (interval.start <= interval.end && interval.start >= 0 && interval.end < seqlen); } // Special coordinate denoting the interval is empty // length() will return 0 inline void setEmpty() { interval.start = 0; interval.end = -1; } // Set the seqcoord to be a full-length match inline void setFull() { interval.start = 0; interval.end = seqlen - 1; } // Return the length of the interval, which is inclusive inline int length() const { return interval.end - interval.start + 1; } // Return the distance from the start to the left end inline int getLeftDist() const { return interval.start; } // Return the distance to the right end inline int getRightDist() const { return seqlen - interval.end - 1; } // Flip mirrors the coordinates so they are on the other strand inline void flip() { int tmp = seqlen - interval.start - 1; interval.start = seqlen - interval.end - 1; interval.end = tmp; assert(interval.start <= interval.end); } // Flip a single position p to the reverse strand for a sequence of length l static inline int flip(int p, int l) { return l - p - 1; } SeqCoord complement() const; // Get the substring described by the interval std::string getSubstring(const std::string& str) const; QualityVector getSubvector(const QualityVector& vec) const; // Get the substring described by the complement of the interval std::string getComplementString(const std::string& str) const; friend std::ostream& operator<<(std::ostream& out, const SeqCoord& sc); friend std::istream& operator>>(std::istream& in, SeqCoord& sc); // data Interval interval; int seqlen; }; #endif ================================================ FILE: src/SGA/Util/SeqReader.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SeqReader - Reads fasta or fastq sequence files // #include #include #include "SeqReader.h" #include "Util.h" SeqReader::SeqReader(std::string filename, uint32_t flags) : m_flags(flags) { if(filename == "-") m_pHandle = &std::cin; else m_pHandle = createReader(filename); } SeqReader::~SeqReader() { if(m_pHandle != &std::cin) delete m_pHandle; } // Extract an element from the file // Return true if successful bool SeqReader::get(SeqRecord& sr) { static int warn_count = 0; const int MAX_WARN = 10; RecordType rt = RT_UNKNOWN; std::string header; while(m_pHandle->good()) { getline(*m_pHandle, header); if(header.empty()) continue; if(header[0] == '>') { rt = RT_FASTA; break; } else if(header[0] == '@') { rt = RT_FASTQ; break; } } if(rt == RT_UNKNOWN) { // No valid start found return false; } // Parse the rest of the record bool validRecord = false; std::string seq; std::string qual; if(rt == RT_FASTA) { std::string temp; while(m_pHandle->good() && m_pHandle->peek() != '>' && m_pHandle->peek() != '@') { getline(*m_pHandle, temp); if(m_pHandle->good() && temp.size() > 0) seq.append(temp); } // The record is valid if we extracted at least 1 bp for the sequence // at this point the eof may have been hit but we still want the data validRecord = seq.size() > 0; } else if(rt == RT_FASTQ) { std::string temp; getline(*m_pHandle, seq); getline(*m_pHandle, temp); //discard getline(*m_pHandle, qual); // FASTQ is required to have 4 fields, we must not have hit the EOF by this point if(seq.size() != qual.size() && warn_count++ < MAX_WARN) { std::cerr << "Warning, FASTQ quality string is not the same length as the sequence string for read " << header << "\n"; } // Fix [Issue GH-3]: Handle FASTQ records that have no sequence or quality value. We only // emit a warning here as long as the record is properly formed. if(seq.empty() || qual.empty()) { std::cerr << "Warning, read " << header << " has no sequence or quality values\n"; } validRecord = !m_pHandle->eof(); } if(validRecord) { // Parse the id size_t endPos = std::min(header.find_first_of(' '), header.find_first_of('\t')); if(endPos != std::string::npos) { assert(endPos > 0); sr.id = header.substr(1, endPos - 1); } else { sr.id = header.substr(1); } // Convert the sequence string to upper case if( !(m_flags & SRF_KEEP_CASE) ) std::transform(seq.begin(), seq.end(), seq.begin(), ::toupper); // If the validation flag is set, ensure that there aren't any non-ACGT bases if( !(m_flags & SRF_NO_VALIDATION) ) { if(seq.find_first_not_of("ACGT") != std::string::npos) { std::cerr << "Error: read " << sr.id << " contains non-ACGT characters.\n"; std::cerr << "Please run sga preprocess on the data first.\n"; exit(EXIT_FAILURE); } } sr.seq = seq; sr.qual = qual; } return validRecord; } ================================================ FILE: src/SGA/Util/SeqReader.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // SeqReader - Reads fasta or fastq sequence files // #ifndef SEQREADER_H #define SEQREADER_H #include #include "Util.h" enum RecordType { RT_FASTA, RT_FASTQ, RT_UNKNOWN }; static const uint32_t SRF_NO_VALIDATION = 1; static const uint32_t SRF_KEEP_CASE = 2; // class SeqReader { public: SeqReader(std::string filename, uint32_t flags = 0); ~SeqReader(); bool get(SeqRecord& sr); private: std::istream* m_pHandle; uint32_t m_flags; }; #endif ================================================ FILE: src/SGA/Util/SimpleAllocator.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // SimpleAllocator - High-level manager of SimplePool // memory pools. See SimplePool.h for description of allocation // strategy // #ifndef SIMPLEALLOCATOR_H #define SIMPLEALLOCATOR_H #include #include "SimplePool.h" template class SimpleAllocator { typedef SimplePool StorageType; typedef std::list StorageList; public: SimpleAllocator() {} ~SimpleAllocator() { for(typename StorageList::iterator iter = m_pPoolList.begin(); iter != m_pPoolList.end(); ++iter) { delete *iter; } m_pPoolList.clear(); } void* alloc() { if(m_pPoolList.empty() || m_pPoolList.back()->isFull()) { // new storage must be allocated m_pPoolList.push_back(new StorageType); } // allocate from the last pool return m_pPoolList.back()->alloc(); } void dealloc(void* /*ptr*/) { // deallocation not tracked in this strategy } private: StorageList m_pPoolList; }; #endif ================================================ FILE: src/SGA/Util/SimplePool.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // SimplePool - Zero-overhead templated memory pool // The design is based on the premise that the allocation // of the objects have a lifetime the length of the program's // execution so they are never freed. Should only be used when // the number of objects is bounded so the pool does not constantly grow. // // Not thread-safe. // #ifndef SIMPLEPOOL_H #define SIMPLEPOOL_H template class SimplePool { public: SimplePool() { size_t bytes_per_object = sizeof(T); size_t total_bytes = NUM_OBJECTS * bytes_per_object; m_pPool = malloc(total_bytes); if(m_pPool == NULL) { std::cerr << "SimpleStorage failed to allocate " << total_bytes << " bytes for memory pool, exiting\n"; abort(); } m_capacity = total_bytes; m_used = 0; } ~SimplePool() { free(m_pPool); } // Return a pointer to the next unused block of memory void* alloc() { assert(m_used < m_capacity); void* pNext = (char*)m_pPool + m_used; m_used += sizeof(T); return pNext; } // Do not track deallocations void dealloc(void* /*ptr*/) { // does nothing } bool isFull() { return m_used >= m_capacity; } private: void* m_pPool; size_t m_capacity; size_t m_used; static const size_t NUM_OBJECTS = 50*1024; }; #endif ================================================ FILE: src/SGA/Util/StdAlnTools.cpp ================================================ ///----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StdAlnTools - Collection of wrappers around the // stdaln dynamic programming alignment functions #include #include "StdAlnTools.h" #include "stdaln.h" #include "Alphabet.h" // Perform a global alignment between the given strings int StdAlnTools::globalAlignment(const std::string& target, const std::string& query, bool bPrint) { path_t* path; int path_len = 0; int score = 0; createGlobalAlignmentPath(target, query, &path, &path_len, &score); if(bPrint) { std::string paddedTarget, paddedQuery, paddedMatch; makePaddedStringsFromPath(target, query, path, path_len, paddedTarget, paddedQuery, paddedMatch); printPaddedStrings(paddedTarget, paddedQuery, paddedMatch); std::cout << "CIGAR: " << makeCigar(path, path_len) << "\n"; std::cout << "Global alignment score: " << score << "\n"; } free(path); return score; } // Perform a global alignment between the given strings and return the CIGAR string std::string StdAlnTools::globalAlignmentCigar(const std::string& target, const std::string& query) { std::string cigar; int score = 0; globalAlignment(target, query, cigar, score); return cigar; } // Perform a global alignment between the given strings and return the CIGAR string and score void StdAlnTools::globalAlignment(const std::string& target, const std::string& query, std::string& cigar, int& score) { path_t* path; int path_len = 0; createGlobalAlignmentPath(target, query, &path, &path_len, &score); cigar = makeCigar(path, path_len); free(path); } // Perform a local alignment LocalAlignmentResult StdAlnTools::localAlignment(const std::string& target, const std::string& query) { // Set up global alignment parameters and data structures GlobalAlnParams params; int max_path_length = target.size() + query.size(); path_t *path = (path_t*)calloc(max_path_length, sizeof(path_t)); int path_len; AlnParam par; int matrix[25]; StdAlnTools::setAlnParam(par, matrix, params); // Make a packed version of the query and target uint8_t* pQueryT = createPacked(query); uint8_t* pTargetT = createPacked(target); LocalAlignmentResult result; result.score = aln_local_core(pTargetT, target.size(), pQueryT, query.size(), &par, path, &path_len, 1, 0); assert(path_len <= max_path_length); result.cigar = makeCigar(path, path_len); // Calculate the aligned coordinates // This returns inclusive coordinates of the substrings aligned path_t* p = path + path_len - 1; result.targetStartIndex = (p->i ? p->i : 1) - 1; result.targetEndIndex = path->i - 1; result.queryStartIndex = (p->j ? p->j : 1) - 1; result.queryEndIndex = path->j - 1; // Update cigar if(result.queryStartIndex > 0) { std::stringstream csa; csa << result.queryStartIndex << "S"; result.cigar.insert(0, csa.str()); } int query_left_overhang = query.length() - (result.queryEndIndex + 1); if(query_left_overhang > 0) { std::stringstream csa; csa << query_left_overhang << "S"; result.cigar.append(csa.str()); } // Clean up delete [] pQueryT; delete [] pTargetT; free(path); return result; } // Expand a CIGAR string into a character code for each symbol of the alignment std::string StdAlnTools::expandCigar(const std::string& cigar) { std::string expanded; std::stringstream parser(cigar); int length; char code; while(parser >> length) { bool success = parser >> code; expanded.append(length, code); assert(success); (void)success; } return expanded; } // Compact an expanded CIGAR string into a regular cigar string std::string StdAlnTools::compactCigar(const std::string& expanded_cigar) { if(expanded_cigar.empty()) return ""; std::stringstream parser(expanded_cigar); std::stringstream writer; char prev_code = '\0'; char curr_code; int curr_length = 0; while(parser >> curr_code) { if(curr_code == prev_code) { curr_length += 1; } else { // write the previous cigar character if(prev_code != '\0') writer << curr_length << prev_code; prev_code = curr_code; curr_length = 1; } } // Write the last symbol writer << curr_length << prev_code; return writer.str(); } // Remove padding characters from str std::string StdAlnTools::unpad(const std::string& str) { std::string out; for(size_t i = 0; i < str.size(); ++i) { if(str[i] != '-') out.push_back(str[i]); } return out; } // Create a path array representing the global alignment between target and query // Caller must free the path void StdAlnTools::createGlobalAlignmentPath(const std::string& target, const std::string& query, path_t** path, int* path_len, int* score) { // Set up global alignment parameters and data structures GlobalAlnParams params; int max_path_length = target.size() + query.size(); *path = (path_t*)calloc(max_path_length, sizeof(path_t)); AlnParam par; int matrix[25]; StdAlnTools::setAlnParam(par, matrix, params); // Make a packed version of the query and target uint8_t* pQueryT = createPacked(query); uint8_t* pTargetT = createPacked(target); *score = aln_global_core(pTargetT, target.size(), pQueryT, query.size(), &par, *path, path_len); assert(*path_len <= max_path_length); // Clean up delete [] pQueryT; delete [] pTargetT; } // Convert a std::string into the stdaln required packed format. // This function allocates memory which the caller must free uint8_t* StdAlnTools::createPacked(const std::string& s, size_t start, size_t length) { if(length == std::string::npos) length = s.size(); assert(length <= s.size()); uint8_t* pBuffer = new uint8_t[length]; for(size_t j = 0; j < length; ++j) pBuffer[j] = DNA_ALPHABET::getBaseRank(s[start + j]); return pBuffer; } // Calculate the maximum target length for a query of length ql size_t StdAlnTools::calculateMaxTargetLength(int ql, const GlobalAlnParams& params) { size_t mt = ((ql + 1) / 2 * params.match + params.gap_ext) / params.gap_ext + ql; return mt; } // Fill in the stdaln AlnParam data, using GlobalAlnParams void StdAlnTools::setAlnParam(AlnParam& par, int matrix[25], const GlobalAlnParams& params) { par.matrix = matrix; // Set matrix for (size_t i = 0; i < 25; ++i) par.matrix[i] = -params.mismatch; for (size_t i = 0; i < 4; ++i) par.matrix[i*5+i] = params.match; par.gap_open = params.gap_open; par.gap_ext = params.gap_ext; par.gap_end = params.gap_ext; par.row = 5; par.band_width = params.bandwidth; } // Convert a path to a CIGAR string std::string StdAlnTools::makeCigar(path_t* path, int path_len) { int cigarLen = 0; uint32_t* pCigar = aln_path2cigar32(path, path_len, &cigarLen); std::stringstream cigarSS; for (int j = 0; j != cigarLen; ++j) { cigarSS << (pCigar[j]>>4); cigarSS << "MID"[pCigar[j]&0xf]; } free(pCigar); return cigarSS.str(); } // Make a pair of padded alignment strings from the pair of sequences void StdAlnTools::makePaddedStrings(const std::string& s1, const std::string& s2, std::string& out1, std::string& out2) { path_t* path; int path_len = 0; int score = 0; createGlobalAlignmentPath(s1, s2, &path, &path_len, &score); std::string outm; makePaddedStringsFromPath(s1, s2, path, path_len, out1, out2, outm); free(path); } // Convert a dynamic programming path to a set of padded strings // Algorithm ported from stdaln.c:aln_stdaln_aux void StdAlnTools::makePaddedStringsFromPath(const std::string& s1, const std::string& s2, path_t* path, int path_len, std::string& out1, std::string& out2, std::string& outm) { out1.resize(path_len, 'A'); out2.resize(path_len, 'A'); outm.resize(path_len, 'A'); path_t* p = path + path_len - 1; for (int l = 0; p >= path; --p, ++l) { assert(l < (int)out1.size()); int idx_i = p->i - 1; int idx_j = p->j - 1; switch (p->ctype) { // p->i and p->j are indices into the DP matrix, which is // the string coordinate - 1 case FROM_M: out1[l] = s1[idx_i]; out2[l] = s2[idx_j]; outm[l] = (s1[idx_i] == s2[idx_j] /*&& s1[p->i] != ap->row*/)? '|' : ' '; break; case FROM_I: out1[l] = '-'; out2[l] = s2[idx_j]; outm[l] = ' '; break; case FROM_D: out1[l] = s1[idx_i]; out2[l] = '-'; outm[l] = ' '; break; } } } // void StdAlnTools::printPaddedStrings(const std::string& s1, const std::string& s2, const std::string& m, int colSize) { assert(s1.size() == s2.size() && s1.size() == m.size()); size_t len = s1.size(); for(size_t l = 0; l < len; l += colSize) { int diff = len - l; int stop = diff < colSize ? diff : colSize; printf("1\t%s\n", s1.substr(l, stop).c_str()); printf("2\t%s\n", s2.substr(l, stop).c_str()); printf("m\t%s\n\n", m.substr(l, stop).c_str()); } } ================================================ FILE: src/SGA/Util/StdAlnTools.h ================================================ ///----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // StdAlnTools - Collection of wrappers around the // stdaln dynamic programming alignment functions #ifndef STDALNTOOLS_H #define STDALNTOOLS_H #include #include #include #include #include "stdaln.h" // Parameters object struct GlobalAlnParams { GlobalAlnParams() { setDefaults(); } void setDefaults() { gap_open = 5; gap_ext = 2; mismatch = 3; match = 1; gap_open_extend = gap_open + gap_ext; threshold = 30; bandwidth = 50; } // PacBio specific parameters void setPacBio() { setDefaults(); gap_open = 2; gap_ext = 1; mismatch = 5; gap_open_extend = gap_open + gap_ext; } int gap_open; int gap_ext; int mismatch; int match; int gap_open_extend; int threshold; int bandwidth; }; struct LocalAlignmentResult { // Indices of the start/end base in the aligning // substrings. INCLUSIVE coordinates. int64_t targetStartIndex; int64_t targetEndIndex; int64_t queryStartIndex; int64_t queryEndIndex; std::string cigar; int score; friend std::ostream& operator<<(std::ostream& out, const LocalAlignmentResult& a) { out << "S:" << a.score << " [" << a.targetStartIndex << " " << a.targetEndIndex << "] C:" << a.cigar; return out; } }; typedef std::vector LocalAlignmentResultVector; namespace StdAlnTools { // Perform a global alignment between target and query using stdaln // If bPrint is true, the padded alignment is printed // to stdout. // The alignment score is returned. int globalAlignment(const std::string& target, const std::string& query, bool bPrint = false); // Perform a global alignment between the two strings and return a CIGAR string std::string globalAlignmentCigar(const std::string& target, const std::string& query); // Perform global alignment and return the cigar and score as out parameters void globalAlignment(const std::string& target, const std::string& query, std::string& cigar, int& score); // Perform a local alignment LocalAlignmentResult localAlignment(const std::string& target, const std::string& query); // Expand a Cigar string so there is one symbol per code std::string expandCigar(const std::string& cigar); // Compact an expanded cigar string std::string compactCigar(const std::string& cigar); // Convert a std::string into the stdAln required packed format. // This function allocates memory which the caller must free. uint8_t* createPacked(const std::string& s, size_t start = 0, size_t length = std::string::npos); // Create a path array representing the global alignment between target and query // Caller must free the path void createGlobalAlignmentPath(const std::string& target, const std::string& query, path_t** path, int* path_len, int* score); // Calculate the maximum aligned target length possible for a query of length ql // under the scoring scheme given by params size_t calculateMaxTargetLength(int ql, const GlobalAlnParams& params); // Fill in the stdaln AlnParam data, using GlobalAlnParams void setAlnParam(AlnParam& par, int matrix[25], const GlobalAlnParams& params); // Make a padded strings from a global alignment between the pair of sequences void makePaddedStrings(const std::string& s1, const std::string& s2, std::string& out1, std::string& out2); // Convert a stdaln path to a pair of padded strings representing the alignment void makePaddedStringsFromPath(const std::string& s1, const std::string& s2, path_t* path, int path_len, std::string& out1, std::string& out2, std::string& outm); // Returns a new copy of str with padding characters removed std::string unpad(const std::string& str); // Make a cigar string from a path std::string makeCigar(path_t* path, int path_len); // Print the padded aligned strings void printPaddedStrings(const std::string& s1, const std::string& s2, const std::string& m, int colSize = 120); }; #endif ================================================ FILE: src/SGA/Util/Timer.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Timer - Simple object to that prints the wallclock // length of its lifetime // #ifndef TIMER_H #define TIMER_H #include #include class Timer { public: Timer(std::string s, bool silent = false) : m_desc(s), m_silent(silent) { reset(); } ~Timer() { if(!m_silent) fprintf(stderr, "[timer - %s] wall clock: %.2lfs CPU: %.2lfs\n", m_desc.c_str(), getElapsedWallTime(), getElapsedCPUTime()); } double getElapsedWallTime() const { timeval now; gettimeofday(&now, NULL); return (now.tv_sec - m_wallStart.tv_sec) + (double(now.tv_usec - m_wallStart.tv_usec) / 1000000); } double getElapsedCPUTime() const { double now = clock(); return (now - m_cpuStart) / CLOCKS_PER_SEC; } void reset() { gettimeofday(&m_wallStart, NULL); m_cpuStart = clock(); } private: std::string m_desc; // Track the wall-clock and CPU times // CPU time includes all threads timeval m_wallStart; double m_cpuStart; bool m_silent; }; #endif ================================================ FILE: src/SGA/Util/Util.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Util - Common data structures and functions // #include #include #include #include "Util.h" // // Sequence operations // // Reverse complement a sequence std::string reverseComplement(const std::string& seq) { std::string out(seq.length(), 'A'); size_t last_pos = seq.length() - 1; for(int i = last_pos; i >= 0; --i) { out[last_pos - i] = complement(seq[i]); } return out; } // Reverse complement a sequence using the full iupac alphabet std::string reverseComplementIUPAC(const std::string& seq) { std::string out(seq.length(), 'A'); size_t last_pos = seq.length() - 1; for(int i = last_pos; i >= 0; --i) { out[last_pos - i] = complementIUPAC(seq[i]); } return out; } // Reverse a sequence std::string reverse(const std::string& seq) { return std::string(seq.rbegin(), seq.rend()); } // Complement a sequence std::string complement(const std::string& seq) { std::string out(seq.length(), 'A'); size_t l = seq.length(); for(size_t i = 0; i < l; ++i) out[i] = complement(seq[i]); return out; } // Complement a sequence over the IUPAC alphabet std::string complementIUPAC(const std::string& seq) { std::string out(seq.length(), 'A'); size_t l = seq.length(); for(size_t i = 0; i < l; ++i) out[i] = complementIUPAC(seq[i]); return out; } // std::string prefix(const std::string& seq, const unsigned int len) { assert(seq.length() >= len); return seq.substr(0, len); } // std::string suffix(const std::string& seq, const unsigned int len) { assert(seq.length() >= len); return seq.substr(seq.length() - len); } // // Dust scoring scheme as given by: // Morgulis A. "A fast and symmetric DUST implementation to Mask // Low-Complexity DNA Sequences". J Comp Bio. double calculateDustScore(const std::string& seq) { std::map scoreMap; // Cannot calculate dust scores on very short reads if(seq.size() < 3) return 0.0f; // Slide a 3-mer window over the sequence and insert the sequences into the map for(size_t i = 0; i < seq.size() - 3; ++i) { std::string triMer = seq.substr(i, 3); scoreMap[triMer]++; } // Calculate the score by summing the square of every element in the map double sum = 0; std::map::iterator iter = scoreMap.begin(); for(; iter != scoreMap.end(); ++iter) { int tc = iter->second; double score = (double)(tc * (tc - 1)) / 2.0f; sum += score; } return sum / (seq.size() - 2); } // Returns the window over seq with the highest dust score double maxDustWindow(const std::string& seq, size_t windowSize, size_t minWindow) { double maxScore = 0.0f; for(size_t i = 0; i < seq.size(); i += 1) { size_t r = seq.size() - i; size_t w = r < windowSize ? r : windowSize; if(w >= minWindow) // don't calculate score for small windows { double s = calculateDustScore(seq.substr(i, w)); if(s > maxScore) maxScore = s; } } return maxScore; } // count the differences between s1 and s2 over the first n bases int countDifferences(const std::string& s1, const std::string& s2, size_t n) { int numDiff = 0; for(size_t i = 0; i < n; ++i) { if(s1[i] != s2[i]) numDiff++; } return numDiff; } // count the differences between s1 and s2 over the first n bases std::string getDiffString(const std::string& s1, const std::string& s2) { std::string out; size_t stop = std::min(s1.size(), s2.size()); for(size_t i = 0; i < stop; ++i) out.push_back(s1[i] == s2[i] ? '.' : s1[i]); return out; } // char randomBase() { int i = rand() % 4; switch(i) { case 0: return 'A'; case 1: return 'C'; case 2: return 'G'; case 3: return 'T'; default: assert(false); } return 'A'; } // Strip the leading directories and // the last trailling suffix from a filename std::string stripFilename(const std::string& filename) { std::string out = stripDirectories(filename); // Remove the gzip extension if necessary if(isGzip(out)) out = stripExtension(out); return stripExtension(out); } // Remove a single file extension from the filename std::string stripExtension(const std::string& filename) { size_t suffixPos = filename.find_last_of('.'); if(suffixPos == std::string::npos) return filename; // no suffix else return filename.substr(0, suffixPos); } // Remove an extension from a filename, including the .gz extension // file.fastq will return file // file.fastq.gz will return file std::string stripGzippedExtension(const std::string& filename) { if(isGzip(filename)) return stripExtension(stripExtension(filename)); else return stripExtension(filename); } // Strip the leadering directories from a filename std::string stripDirectories(const std::string& filename) { size_t lastDirPos = filename.find_last_of('/'); if(lastDirPos == std::string::npos) return filename; // no directories else return filename.substr(lastDirPos + 1); } // Return the file extension std::string getFileExtension(const std::string& filename) { size_t suffixPos = filename.find_last_of('.'); if(suffixPos == std::string::npos) return ""; else return filename.substr(suffixPos + 1); } // Write out a fasta record void writeFastaRecord(std::ostream* pWriter, const std::string& id, const std::string& seq, size_t maxLineLength) { *pWriter << ">" << id << " " << seq.length() << "\n"; for(size_t i = 0; i < seq.size(); i += maxLineLength) { size_t span = std::min(seq.size() - i, maxLineLength); *pWriter << seq.substr(i, span) << "\n"; } } // Returns true if the filename has an extension indicating it is compressed bool isGzip(const std::string& filename) { size_t suffix_length = sizeof(GZIP_EXT) - 1; // Assume files without an extension are not compressed if(filename.length() < suffix_length) return false; std::string extension = suffix(filename, suffix_length); return extension == GZIP_EXT; } // Returns true if the filename has an extension indicating it is fastq bool isFastq(const std::string& filename) { return filename.find(".fastq") != std::string::npos || filename.find(".fq") != std::string::npos; } // Returns the size of the file. Code from stackoverflow. std::ifstream::pos_type getFilesize(const std::string& filename) { std::ifstream in(filename.c_str(), std::ifstream::in | std::ifstream::binary); in.seekg(0, std::ifstream::end); return in.tellg(); } // Open a file that may or may not be gzipped for reading // The caller is responsible for freeing the handle std::istream* createReader(const std::string& filename, std::ios_base::openmode mode) { if(isGzip(filename)) { igzstream* pGZ = new igzstream(filename.c_str(), mode); assertGZOpen(*pGZ, filename); return pGZ; } else { std::ifstream* pReader = new std::ifstream(filename.c_str(), mode); assertFileOpen(*pReader, filename); return pReader; } } // Open a file that may or may not be gzipped for writing // The caller is responsible for freeing the handle std::ostream* createWriter(const std::string& filename, std::ios_base::openmode mode) { if(isGzip(filename)) { ogzstream* pGZ = new ogzstream(filename.c_str(), mode); assertGZOpen(*pGZ, filename); return pGZ; } else { std::ofstream* pWriter = new std::ofstream(filename.c_str(), mode); assertFileOpen(*pWriter, filename); return pWriter; } } // Ensure a filehandle is open void assertFileOpen(std::ifstream& fh, const std::string& fn) { if(!fh.is_open()) { std::cerr << "Error: could not open " << fn << " for read\n"; exit(EXIT_FAILURE); } } // Ensure a filehandle is open void assertFileOpen(std::ofstream& fh, const std::string& fn) { if(!fh.is_open()) { std::cerr << "Error: could not open " << fn << " for write\n"; exit(EXIT_FAILURE); } } // void assertGZOpen(gzstreambase& gh, const std::string& fn) { if(!gh.good()) { std::cerr << "Error: could not open " << fn << std::endl; exit(EXIT_FAILURE); } } // Split a string into parts based on the delimiter StringVector split(std::string in, char delimiter) { StringVector out; size_t lastPos = 0; size_t pos = in.find_first_of(delimiter); while(pos != std::string::npos) { out.push_back(in.substr(lastPos, pos - lastPos)); lastPos = pos + 1; pos = in.find_first_of(delimiter, lastPos); } out.push_back(in.substr(lastPos)); return out; } // Split a key-value pair void splitKeyValue(std::string in, std::string& key, std::string& value) { StringVector parts = split(in, CAF_SEP); if(parts.size() != 2) { std::cerr << "Invalid key-value pair " << in << std::endl; assert(false); } key = parts[0]; value = parts[1]; assert(key.size() > 0 && value.size() > 0 && "Invalid key-value pair"); } // Get the shared component of a read pair name // This is the part of the name preceding the "/" std::string getPairBasename(const std::string& id) { assert(!id.empty()); size_t pos = id.find_last_of('/'); if(pos == std::string::npos) return id; else return id.substr(0, pos); } // Get the ID of the pair of a given read std::string getPairID(const std::string& id) { assert(!id.empty()); std::string pid(id); size_t li = id.length() - 1; char last = id[li]; if(last == 'A') pid[li] = 'B'; else if(last == 'B') pid[li] = 'A'; else if(last == '1') pid[li] = '2'; else if(last == '2') pid[li] = '1'; else if(last == 'f') pid[li] = 'r'; else if(last == 'r') pid[li] = 'f'; else pid = ""; return pid; } // Return 0 if the id indicates the first read of a pair, 1 otherwise int getPairIndex(const std::string& id) { size_t li = id.length() - 1; char last = id[li]; if(last == 'A' || last == '1' || last == 'f') return 0; else if(last == 'B' || last == '2' || last == 'r') return 1; else { std::cerr << "Unrecognized pair format: " << id << "\n"; exit(EXIT_FAILURE); } } // Debug function to parse the distance between two reads // based on their names // This assumes is that the read names are just the positions the reads // were sampled from size_t debug_getReadDistFromNames(const std::string& name1, const std::string& name2) { std::string id; std::string pos; StringVector parts = split(name1, ':'); if(parts.size() != 2) return 0; int p1 = atoi(parts[1].c_str()); parts = split(name2, ':'); if(parts.size() != 2) return 0; int p2 = atoi(parts[1].c_str()); int dist = int(abs(p1 - p2)); return dist; } ================================================ FILE: src/SGA/Util/Util.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // Util - Common data structures and functions // #ifndef UTIL_H #define UTIL_H #include #include #include #include #include #include #include #include #include #include #include #include "DNAString.h" #include "gzstream.h" #include "Quality.h" #define CAF_SEP ':' #define FUNCTION_TIMER Timer functionTimer(__PRETTY_FUNCTION__); #define VALIDATION_WARNING(x) static bool validation_warn = true; if(validation_warn) \ printf("[%s] Warning validation is on\n", (x)); validation_warn = false; #define WARN_ONCE(x) static bool _warn_once = true; if(_warn_once) \ printf("WARNING: [%s]\n", (x)); _warn_once = false; #define GZIP_EXT ".gz" // // Typedef // typedef std::string Sequence; typedef std::string ContigID; typedef std::vector IntVec; typedef std::vector DoubleVec; typedef std::vector StringVector; typedef std::list StringList; typedef std::vector SequenceVector; // SeqItem is just an id, sequence pair struct SeqItem { // data std::string id; DNAString seq; void write(std::ostream& out, const std::string& meta = "") const { out << ">" << id << (meta.empty() ? "" : " ") << meta << "\n"; out << seq.toString() << "\n"; } }; typedef std::vector SeqItemVector; // SeqRecord is a id,sequence pair with an associated quality value struct SeqRecord { SeqItem toSeqItem() const { SeqItem r; r.id = id; r.seq = seq; return r; } // Write the sequence to the file handle. If the void write(std::ostream& out, const std::string& meta = "") const { // If there is a quality string write the record as fastq, otherwise fasta if(!qual.empty()) { out << "@" << id << (meta.empty() ? "" : " ") << meta << "\n"; out << seq.toString() << "\n"; out << "+" << "\n"; out << qual << "\n"; } else { toSeqItem().write(out, meta); } } bool hasQuality() const { return !qual.empty(); } // Get the phred score for base i. If there are no quality string, returns DEFAULT_QUAL_SCORE int getPhredScore(size_t i) const { if(!qual.empty()) { assert(i < qual.size()); return Quality::char2phred(qual[i]); } else { return DEFAULT_QUAL_SCORE; } } // data std::string id; DNAString seq; std::string qual; }; typedef std::vector SeqRecordVector; // // Functions // std::string stripFilename(const std::string& filename); std::string stripExtension(const std::string& filename); std::string stripGzippedExtension(const std::string& filename); std::string stripDirectories(const std::string& filename); std::string getFileExtension(const std::string& filename); bool isGzip(const std::string& filename); bool isFastq(const std::string& filename); std::ifstream::pos_type getFilesize(const std::string& filename); // Write out a fasta record void writeFastaRecord(std::ostream* pWriter, const std::string& id, const std::string& seq, size_t maxLength = 80); // Wrapper function for opening a reader of compressed or uncompressed file std::istream* createReader(const std::string& filename, std::ios_base::openmode mode = std::ios_base::in); std::ostream* createWriter(const std::string& filename, std::ios_base::openmode mode = std::ios_base::out); void assertFileOpen(std::ifstream& fh, const std::string& fn); void assertFileOpen(std::ofstream& fh, const std::string& fn); void assertGZOpen(gzstreambase& gh, const std::string& fn); char randomBase(); // Key-value operations template std::string makeKeyValue(std::string key, C value) { std::stringstream ss; ss << key << CAF_SEP << value; return ss.str(); } StringVector split(std::string in, char delimiter); void splitKeyValue(std::string in, std::string& key, std::string& value); std::string getPairBasename(const std::string& id); std::string getPairID(const std::string& id); // Returns 0 if the id indicates the first read in a pair, 1 otherwise int getPairIndex(const std::string& id); // Debug function to get the distance between two reads based on their names, which // encodes the positions size_t debug_getReadDistFromNames(const std::string& name1, const std::string& name2); // // Return the lexographic value for the given base // static const uint8_t s_lexoRankLUT[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,2,0,0,0,3,0,0,0,0,0,0,0,0, 0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; inline static uint8_t getBaseRank(char b) { return s_lexoRankLUT[static_cast(b)]; } // // Sequence operations // std::string reverseComplement(const std::string& seq); std::string complement(const std::string& seq); std::string reverse(const std::string& seq); // Reverse/complement functions, allowing a full IUPAC alphabet std::string reverseComplementIUPAC(const std::string& seq); std::string complementIUPAC(const std::string& seq); // Return the prefix/suffix of seq of length len std::string prefix(const std::string& seq, const unsigned int len); std::string suffix(const std::string& seq, const unsigned int len); // Calculate the dust score for the given sequence double maxDustWindow(const std::string& seq, size_t windowSize = 64, size_t minWindow = 64); double calculateDustScore(const std::string& seq); // Count the number of differences between s1 and s2 over the first n chars int countDifferences(const std::string& s1, const std::string& s2, size_t n); // Construct a string encoding the differences between s1 and s2 std::string getDiffString(const std::string& s1, const std::string& s2); // Complement a base inline char complement(char base) { switch(base) { case 'A': return 'T'; case 'C': return 'G'; case 'G': return 'C'; case 'T': return 'A'; case 'N': return 'N'; default: assert(false && "Unknown base!"); return 'N'; } } // Complement a base using the full IUPAC alphabet // Also allows for lowercase bases inline char complementIUPAC(char c) { char cmp = '\0'; bool is_lc = std::islower(c); switch(std::toupper(c)) { case 'A': cmp = 'T'; break; case 'C': cmp = 'G'; break; case 'G': cmp = 'C'; break; case 'T': cmp = 'A'; break; case 'M': cmp = 'K'; break; case 'R': cmp = 'Y'; break; case 'W': cmp = 'W'; break; case 'S': cmp = 'S'; break; case 'Y': cmp = 'R'; break; case 'K': cmp = 'M'; break; case 'V': cmp = 'B'; break; case 'H': cmp = 'D'; break; case 'D': cmp = 'H'; break; case 'B': cmp = 'V'; break; case 'N': cmp = 'N'; break; default: assert(false); } if(is_lc) cmp = std::tolower(cmp); return cmp; } // Wrapper function to determine whether a calculated error rate is within tolerance of a // threshold. A fixed tolerance is used as this does not need to be super precise, it only // needs to account for small differences in fp calculations inline bool isErrorRateAcceptable(double er, double threshold) { static double tolerance = 0.000001f; if(er - tolerance <= threshold) return true; else return false; } #endif ================================================ FILE: src/SGA/Util/VCFUtil.cpp ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // VCFUtil - collection of utility functions // for producing VCF records. // #include #include #include #include #include "VCFUtil.h" #include "StdAlnTools.h" #include "MultiAlignment.h" // // VCFRecord // VCFRecord::VCFRecord() { passStr = "PASS"; quality = 20.0f; } // parse from a line VCFRecord::VCFRecord(const std::string& line) { std::stringstream parser(line); parser >> refName; parser >> refPosition; parser >> id; parser >> refStr; parser >> varStr; // Non-conformant VCF might represent unknown qualities with '.' std::string quality_str; parser >> quality_str; if(quality_str == ".") { quality = 255; } else { std::stringstream qparser(quality_str); qparser >> quality; } parser >> passStr; std::string tmp; parser >> tmp; // Split the comments on the semicolon delimiter comments = split(tmp, ';'); parser >> formatStr; if(!formatStr.empty()) { // parse genotypes while(parser >> tmp) sampleStr.push_back(tmp); } } void VCFRecord::addComment(const std::string& key, const std::string& value) { std::string out = key; out.append(1, '='); out.append(value); comments.push_back(out); } void VCFRecord::addComment(const std::string& key, const int& value) { std::stringstream v_str; v_str << value; addComment(key, v_str.str()); } void VCFRecord::addComment(const std::string& key, const double& value) { std::stringstream v_str; v_str.precision(5); v_str.setf(std::ios::fixed,std::ios::floatfield); v_str << value; addComment(key, v_str.str()); } void VCFRecord::setPassStr(const std::string str) { passStr = str; } void VCFRecord::setQuality(const double q) { quality = q; } void VCFRecord::printVerbose() const { std::cout << "RefName: " << refName << "\n"; std::cout << "Position: " << refPosition << "\n"; std::cout << "RefStr: " << refStr << "\n"; std::cout << "VarStr: " << varStr << "\n"; } // Write the VCF record to the stream std::ostream& operator<<(std::ostream& o, const VCFRecord& record) { o.precision(5); o.setf(std::ios::fixed,std::ios::floatfield); o << record.refName << "\t"; o << record.refPosition << "\t", o << (record.id.empty() ? "." : record.id) << "\t"; o << record.refStr << "\t"; o << record.varStr << "\t"; o << (int)record.quality << "\t"; o << record.passStr << "\t"; for(size_t i = 0; i < record.comments.size(); ++i) { if(i > 0) o << ";"; o << record.comments[i]; } if(record.sampleStr.size()) { o << "\t" << record.formatStr; for(size_t i = 0; i < record.sampleStr.size(); ++i) o << "\t" << record.sampleStr[i]; } return o; } // VCFClassification VCFRecord::classify() const { if(refStr.size() == varStr.size()) return VCF_SUB; if(refStr.size() > varStr.size()) { // If a deletion, varStr should be a prefix of refStr if(refStr.find(varStr) == 0) return VCF_DEL; else return VCF_COMPLEX; } if(refStr.size() < varStr.size()) { // If an insertion, refStr should be a prefix of refStr if(varStr.find(refStr) == 0) return VCF_INS; else return VCF_COMPLEX; } return VCF_COMPLEX; } // // VCFUtil // // See header for description VCFReturnCode VCFUtil::generateVCFFromCancerVariant(const std::string& ref, const std::string& base, const std::string& variant, const std::string& refName, size_t refPosition, const std::string& varName, int minExactMatch, double dustThreshold, int verbose, VCFVector& outRecords) { VCFVector tempRecords; // Construct a multiple alignment from pairwise alignments // of the base and variant strings to the reference // We start by constructing a global alignment between the sequences // and representing the alignment as a Cigar string std::string cigarRefBase = StdAlnTools::globalAlignmentCigar(base, ref); std::string cigarRefVariant = StdAlnTools::globalAlignmentCigar(variant, ref); // Initialize the multiple alignment data MAlignData baseMA; baseMA.position = 0; baseMA.str = base; baseMA.expandedCigar = StdAlnTools::expandCigar(cigarRefBase); baseMA.name = "base"; MAlignData varMA; varMA.position = 0; varMA.str = variant; varMA.expandedCigar = StdAlnTools::expandCigar(cigarRefVariant); varMA.name = "variant"; MAlignDataVector maVector; maVector.push_back(baseMA); maVector.push_back(varMA); MultiAlignment ma(ref, maVector); /* std::cout << "\nMultipleAlignment:\n"; ma.print(); */ // Get the row index of the variant and base strings size_t baseRow = ma.getIdxByName("base"); size_t varRow = ma.getIdxByName("variant"); size_t refRow = ma.getRootIdx(); size_t numCols = ma.getNumColumns(); // Iterate over every column of the multiple alignment and detect variants int leftExactMatch = 0; int rightExactMatch = 0; int eventStart = -1; int eventEnd = -1; bool isIndel = false; bool inLeftExact = true; for(size_t i = 0; i < numCols; ++i) { char baseSymbol = ma.getSymbol(baseRow, i); char varSymbol = ma.getSymbol(varRow, i); bool isVariant = (varSymbol != baseSymbol); // Update the counter of the number of exact matches for the leftmost and rightmost bases if(isVariant) { inLeftExact = false; // stop the count of leftmost exact matches rightExactMatch = 0; // reset the rightmost count } else // this is a good match { rightExactMatch += 1; if(inLeftExact) leftExactMatch += 1; } // Process variants indicated by this portion of the alignment if(isVariant) { if(eventStart == -1) { // Not currently in a variant event, start a new one eventStart = i; eventEnd = i; } else { // Extend the event assert(eventEnd != -1); eventEnd += 1; } isIndel = isIndel || varSymbol == '-' || baseSymbol == '-'; } else { // Check if this is the end of a variant if(eventStart != -1) { if(verbose > 0) { std::cout << "\n\nProcessing variant\n"; ma.print(); } // Extract the substrings of the three sequences describing // this event. // If the event is an indel, we move the start point // of the event backwards until all 3 columns are not padding characters. // This is to avoid the following situation: // AATATTT--CGT ref // AATATTTT-CGT base // AATATTTTTCGT var // or // TTAGGTTTTTTT ref // TTAGG-TTTTTT base // TTAGG--TTTTT var // // In the first case, it is a 1 base insertion wrt base but a 2 base insertion wrt to the ref. // So we need to move the event to the first column with all Ts to properly capture what is happening. // In the second case it is a 1 base deletion wrt base and a 2 base deletion wrt to the ref. // Again, we need to move back to the last full column. if(isIndel) { // It is impossible to extract a reference string if the indel is at the beginning // or end of th multiple alignment so we just fail out here if(eventStart == 0 || eventEnd == (int)numCols - 1) return VCF_INVALID_MULTIALIGNMENT; while(eventStart >= 0) { char rc = ma.getSymbol(refRow, eventStart); char bc = ma.getSymbol(baseRow, eventStart); char vc = ma.getSymbol(varRow, eventStart); if(rc == '-' || bc == '-' || vc == '-') eventStart -= 1; else break; } assert(eventStart >= 0); } size_t eventLength = eventEnd - eventStart + 1; std::string refString = StdAlnTools::unpad(ma.getPaddedSubstr(refRow, eventStart, eventLength)); std::string baseString = StdAlnTools::unpad(ma.getPaddedSubstr(baseRow, eventStart, eventLength)); std::string varString = StdAlnTools::unpad(ma.getPaddedSubstr(varRow, eventStart, eventLength)); if(verbose > 0) { printf("Ref start: %d col: %d eventStart: %d eventEnd: %d\n", (int)refPosition, (int)i, eventStart, eventEnd); std::cout << "RefString " << refString << "\n"; std::cout << "baseString " << baseString << "\n"; std::cout << "varString " << varString << "\n"; } assert(!refString.empty()); //assert(!baseString.empty()); assert(!varString.empty()); if(baseString.empty()) std::cerr << "Warning: Empty base string\n"; // Get the base position in the reference string. This is not necessarily the // same as the eventStart column as the reference may be padded int refBaseOffset = ma.getBaseIdx(refRow, eventStart); // Generate VCF Record VCFRecord record; record.refName = refName; record.refPosition = refPosition + refBaseOffset + 1; // VCF uses 1-based coordinates record.refStr = refString; record.varStr = varString; // Add a comment with the variant name record.addComment("id", varName); // If the base string is not the same as the reference string, not it in the comment // This can happen when a het SNP is mutated or we have some other weird site if(refString != baseString) record.addComment("NS", baseString); // Check if the reference context is a homopolymer int preHP = ma.countHomopolymer(refRow, eventStart, 0); int sufHP = ma.countHomopolymer(refRow, eventEnd); int maxHP = std::max(preHP, sufHP); if(maxHP >= HOMOPOLYMER_ANNOTATE_THRESHOLD) { std::stringstream hps; hps << maxHP; record.addComment("HP", hps.str()); } // Calculate the highest dust score on the reference sequence // using 64-base windows. double globalDustScore = maxDustWindow(ref); if(globalDustScore > dustThreshold) { std::stringstream dts; dts.precision(2); dts << globalDustScore; record.addComment("DT", dts.str()); } if(verbose > 0) std::cout << record << "\n"; tempRecords.push_back(record); // Reset state eventStart = -1; eventEnd = -1; isIndel = false; } } } // Perform the start/end exact match sanity check if(leftExactMatch >= minExactMatch && rightExactMatch >= minExactMatch) { outRecords.insert(outRecords.end(), tempRecords.begin(), tempRecords.end()); return VCF_OK; } else { return VCF_EXACT_MATCH_FAILED; } } // Write a VCF header to the given file handle void VCFUtil::writeHeader(std::ostream* pWriter, const std::string& program, const std::string& inputBAM, const std::string& reference) { // Get and format the current date time_t rawtime; struct tm * timeinfo; static int MAX_DATE_CHARS = 80; char dateBuffer [MAX_DATE_CHARS]; time ( &rawtime ); timeinfo = localtime ( &rawtime ); int copied = strftime(dateBuffer,MAX_DATE_CHARS,"%Y%m%d",timeinfo); assert(copied < MAX_DATE_CHARS); *pWriter << "##fileformat=VCFv4.0\n"; *pWriter << "##fileDate=" << dateBuffer << "\n"; *pWriter << "##command=" << program << "\n"; *pWriter << "##inputBAM=" << inputBAM << "\n"; *pWriter << "##reference=" << reference << "\n"; *pWriter << "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n"; } ================================================ FILE: src/SGA/Util/VCFUtil.h ================================================ //----------------------------------------------- // Copyright 2011 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // VCFUtil - collection of utility functions // for producing VCF records. // #ifndef VCFUTIL_H #define VCFUTIL_H #include #include // Enums enum VCFClassification { VCF_SUB, VCF_DEL, VCF_INS, VCF_COMPLEX, VCF_NUM_CLASSIFICATIONS }; // enum VCFReturnCode { VCF_EXACT_MATCH_FAILED, // failed the flanking-base match test VCF_MAP_QUALITY_FAILED, // mapping quality check failed VCF_BASE_MULTIMAP_FAILED, // mapping quality check failed VCF_BASE_PARTIALMAP_FAILED, // the base sequence did not fully align to the reference VCF_INVALID_MULTIALIGNMENT, // failed because the multiple alignment was not valid VCF_OK, // VCF generation succeeded VCF_NUM_RETURN_CODES }; // Structs struct VCFRecord { // functions // initialize an empty record VCFRecord(); // parse a record from a tab-delimited string VCFRecord(const std::string& line); void addComment(const std::string& key, const std::string& value); void addComment(const std::string& key, const int& value); void addComment(const std::string& key, const double& value); void setPassStr(const std::string str); void setQuality(const double q); void printVerbose() const; VCFClassification classify() const; friend std::ostream& operator<<(std::ostream& o, const VCFRecord& record); static bool sort(const VCFRecord& a, const VCFRecord& b) { if(a.refName != b.refName) return a.refName < b.refName; else return a.refPosition < b.refPosition; } bool isMultiAllelic() const { return varStr.find(",") != std::string::npos; } // data std::string refName; size_t refPosition; std::string id; std::string refStr; std::string varStr; double quality; std::string passStr; std::string formatStr; std::vector comments; std::vector sampleStr; }; // Typedefs typedef std::vector VCFVector; typedef std::vector StringVector; // A set of VCF records, with sample names in a predefined order struct VCFCollection { StringVector samples; VCFVector records; }; namespace VCFUtil { // Generate a VCF record from a cancer mutation // Base is the sequence in the individuals normal genome // Variant is the mutated copy of base // Ref is the sequence of the reference that base represents. // Ref will typically be very close to base, but may have some // differences due to SNPs or indels, which we do not want // to call as variants. // The minExactMatch parameter constrains base and variant to have // at least a perfect alignment of minExactMatch at the start // and end of the sequences. This is used as a sanity check for the alignments // If the variants were produced by graph-diff, base and variant // should share exactly k bases at the ends. VCFReturnCode generateVCFFromCancerVariant(const std::string& ref, const std::string& base, const std::string& variant, const std::string& refName, size_t refPosition, const std::string& varName, int minExactMatch, double dustThreshold, int verbose, VCFVector& outRecords); // Write a VCF header to the given file handle void writeHeader(std::ostream* pWriter, const std::string& program, const std::string& bamFile, const std::string& reference); // constants static const int HOMOPOLYMER_ANNOTATE_THRESHOLD = 5; }; #endif ================================================ FILE: src/SGA/Util/VariantIndex.cpp ================================================ //----------------------------------------------------- // Copyright 2014 Ontario Institute for Cancer Research // Written by Jared Simpson (jared.simpson@oicr.on.ca) // Released under the GPL //----------------------------------------------------- // // Data structure for performing proximity queries // against a set of variants // #include #include #include #include "VariantIndex.h" VariantIndex::VariantIndex(const std::string& filename, const ReadTable& refTable) { std::ifstream input(filename.c_str()); std::string line; // Parse the VCF file while(getline(input, line)) { if(line.empty()) continue; if(line[0] == '#') continue; VCFRecord record(line); // Do not allow multi-allelic records if(record.isMultiAllelic()) { std::cerr << "Error: multi-allelic Variant found, please run vcfbreakmulti\n"; exit(EXIT_FAILURE); } // Convert to a minimal representation of the change VariantRecord mvf = { record.refName, record.refStr, record.varStr, record.refPosition }; m_records.push_back(mvf); } buildIndex(refTable); } void VariantIndex::buildIndex(const ReadTable& refTable) { for(size_t i = 0; i < refTable.getCount(); ++i) { const SeqItem& seq_record = refTable.getRead(i); std::string chromosome = seq_record.id; size_t length = seq_record.seq.length(); int buckets = (length / BUCKET_SIZE) + 1; m_map[chromosome].resize(buckets); } for(size_t i = 0; i < m_records.size(); ++i) { VariantIndexMap::iterator iter = m_map.find(m_records[i].reference); assert(iter != m_map.end()); int bucket_id = m_records[i].position / BUCKET_SIZE; assert(bucket_id < (int)iter->second.size()); IntVector& bucket = iter->second[bucket_id]; bucket.push_back(i); } } VariantRecordVector VariantIndex::getNearVariants(const std::string& reference, int position, int distance) const { VariantRecordVector out; VariantIndexMap::const_iterator iter = m_map.find(reference); assert(iter != m_map.end()); const IntVectorVector& chr_buckets = iter->second; int lower_index = std::max(position - distance, 0) / BUCKET_SIZE; int upper_index = std::min((position + distance) / BUCKET_SIZE, (int)chr_buckets.size() - 1); for(int bi = lower_index; bi <= upper_index; ++bi) { const IntVector& bucket = chr_buckets[bi]; for(size_t vi = 0; vi < bucket.size(); ++vi) { const VariantRecord& record = m_records[bucket[vi]]; if(abs(record.position - position) < distance) out.push_back(record); } } return out; } ================================================ FILE: src/SGA/Util/VariantIndex.h ================================================ //----------------------------------------------------- // Copyright 2014 Ontario Institute for Cancer Research // Written by Jared Simpson (jared.simpson@oicr.on.ca) // Released under the GPL //----------------------------------------------------- // // Data structure for performing proximity queries // against a set of variants // #ifndef VARIANTINDEX_H #define VARIANTINDEX_H #include "Util.h" #include "SeqReader.h" #include "VCFUtil.h" #include "ReadTable.h" #include // To save space we store a vcf-like record // with only the required fields struct VariantRecord { std::string reference; std::string ref_sequence; std::string alt_sequence; size_t position; }; typedef std::vector VariantRecordVector; typedef std::vector IntVector; typedef std::vector IntVectorVector; // map from chromosome to a vector of buckets, one every 10kbp typedef std::map VariantIndexMap; class VariantIndex { public: // VariantIndex(const std::string& filename, const ReadTable& refTable); // Return a vector of the variants that are close to the input variant VariantRecordVector getNearVariants(const std::string& reference, int position, int distance = 30) const; private: // void buildIndex(const ReadTable& refTable); // VariantRecordVector m_records; VariantIndexMap m_map; // static const int BUCKET_SIZE = 10000; }; #endif ================================================ FILE: src/SGA/Util/Verbosity.h ================================================ ///---------------------------------------------- // Copyright 2013 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // Verbosity - Singleton object to only // hold the verbosity level for the entire // program // #ifndef VERBOSITY_H #define VERBOSITY_H class Verbosity { public: Verbosity() : m_maxPrintLevel(0) {} // Get singleton object static Verbosity& Instance() { static Verbosity instance; return instance; } // Get/set the print level int getPrintLevel() const { return m_maxPrintLevel; } void setPrintLevel(int l) { m_maxPrintLevel = l; } private: int m_maxPrintLevel; }; #endif ================================================ FILE: src/SGA/Util/bamreader.h ================================================ #ifndef BAMREADER_H #define BAMREADER_h #include "api/BamReader.h" #include "api/BamWriter.h" #include "Util.h" class SVBamReader { public: Bamreader(const std::string filename, const std::string prefix, const int isize = 2000) : m_bam(filename), m_prefix(prefix), m_isize(isize) {} ~Bamreader() { } void bamToSeqRecordVector(SeqRecordVector &srv); bool setBamRegion(int refid1, int refid2, int pos1, int pos2); bool findBamIndex(); private: std::string m_bam; std::string m_prefix; int m_isize; std::string m_index; BamTools::BamReader m_reader; BamTools::BamRegion m_region; } #endif ================================================ FILE: src/SGA/Util/bucketSort.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // bucketSort - perform a bucket sort over a range of values // ================================================ FILE: src/SGA/Util/bucketSort.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // bucketSort - perform a bucket sort over a range of values // #ifndef BUCKETSORT_H #define BUCKETSORT_H #include template void bucketSort(IterType start, IterType end, BucketFunctor func) { // Typedef the base value of the iterator typedef typename std::iterator_traits::value_type base_value; typedef std::list base_list; typedef typename base_list::iterator list_iterator; // Get the number of buckets needed int numBuckets = func.getNumBuckets(); // Allocate an array of lists base_list* buckets = new base_list[numBuckets]; // Place the items into buckets for(IterType iter = start; iter != end; ++iter) { int bucket_id = func(*iter); assert(bucket_id < numBuckets); buckets[bucket_id].push_back(*iter); } // Place the elements back into the array IterType curr = start; for(int i = 0; i < numBuckets; ++i) { IterType bucket_start = curr; size_t count = 0; for(list_iterator bucket_iter = buckets[i].begin(); bucket_iter != buckets[i].end(); ++bucket_iter) { ++count; *curr++ = *bucket_iter; } std::sort(bucket_start, curr, func); } assert(curr == end); // delete lists delete [] buckets; } template void histogramSort(T* x, size_t n, int depth, PrimarySorter& primarySorter, const FinalSorter& finalSorter) { // Get the number of buckets needed int numBuckets = primarySorter.getNumBuckets(); // Set the functor's offset primarySorter.setBucketDepth(depth); // Allocate an array for the bucket start points and the bucket end points // TODO: Could remove at least one of these arrays size_t* bucket_starts = new size_t[numBuckets]; size_t* bucket_ends = new size_t[numBuckets]; size_t* bucket_counts = new size_t[numBuckets]; for(int i = 0; i < numBuckets; ++i) { bucket_starts[i] = 0; bucket_ends[i] = 0; bucket_counts[i] = 0; } // Place the items into buckets for(size_t i = 0; i < n; ++i) { int bucket_id = primarySorter.getBucket(x[i]); assert(bucket_id < numBuckets); bucket_counts[bucket_id]++; } // Set up the start/end points size_t sum = 0; for(int i = 0; i < numBuckets; ++i) { size_t val = bucket_counts[i]; bucket_starts[i] = sum; sum += val; bucket_ends[i] = sum; //std::cout << "Bucket count: " << bucket_counts[i] << " start: " << bucket_starts[i] << " end: " << bucket_ends[i] << "\n"; } // Now, consider the bucket_starts positions to be the next (potentially) unsorted position // for each bucket. Iterate through these values cycles the elements into place int curr_bucket = 0; // Start on the first bucket that has element while(bucket_starts[curr_bucket] == bucket_ends[curr_bucket]) ++curr_bucket; while(curr_bucket != numBuckets) { //std::cout << "Curr Bucket: " << curr_bucket << "\n"; //std::cout << "CurrIDX: " << bucket_starts[curr_bucket] << "\n"; int elem_offset = bucket_starts[curr_bucket]; // Get the bucket for this element int bucket_id = primarySorter.getBucket(x[elem_offset]); // if the element is in the correct bucket, just advance the pointer if(bucket_id == curr_bucket) bucket_starts[curr_bucket]++; else { // Cycle the elements until we land back in this bucket, at which point // we have sorted one position further in the current bucket // Hold the info for the element that has been displaced T displaced = x[elem_offset]; bool stop = false; while(!stop) { // Get the offset of the position this element should be in int displaced_bucket = primarySorter.getBucket(displaced); if(displaced_bucket == curr_bucket) { // The displaced element belongs back in the original bucket, place it there x[elem_offset] = displaced; bucket_starts[curr_bucket]++; stop = true; } else { int cycle_offset = bucket_starts[displaced_bucket]; // Make space for the incoming element T swap = x[cycle_offset]; x[cycle_offset] = displaced; displaced = swap; bucket_starts[displaced_bucket]++; } } } // At this point, the bucket_start for current bucket // has moved 1 element // Other buckets may have advanced as well // while(curr_bucket < numBuckets && bucket_starts[curr_bucket] == bucket_ends[curr_bucket]) ++curr_bucket; } // Recompute the start/end points sum = 0; for(int i = 0; i < numBuckets; ++i) { size_t val = bucket_counts[i]; bucket_starts[i] = sum; sum += val; bucket_ends[i] = sum; } // Finally, sort each bucket for(int i = 0; i < numBuckets; ++i) { T* curr_bucket = x + bucket_starts[i]; size_t curr_count = bucket_counts[i]; if(curr_count < 2) continue; assert(curr_count == (bucket_ends[i] - bucket_starts[i])); //std::cout << "Sorting bucket " << i << "\n"; const int max_depth = 100; const size_t min_elements = 1000; // terminate the bucket sort under 3 conditions: // 1) the bucket is degenerate (no more histogram sorting can be done) - this comes from the functor // 2) the number of elements in the bucket is low // 3) the max depth has been hit if(primarySorter.isBucketDegenerate(i)) { std::sort(curr_bucket, curr_bucket + curr_count, finalSorter); } else if(bucket_counts[i] < min_elements || depth >= max_depth) { int next_char = (depth + 1) * primarySorter.getBucketLen(); mkqs2(curr_bucket, curr_count, next_char, primarySorter, finalSorter); //std::sort(curr_bucket, curr_bucket + bucket_counts[i], finalSorter); } else { histogramSort(curr_bucket, curr_count, depth + 1, primarySorter, finalSorter); } } // delete arrays delete [] bucket_counts; delete [] bucket_starts; delete [] bucket_ends; } #endif ================================================ FILE: src/SGA/Util/gzstream.C ================================================ // ============================================================================ // gzstream, C++ iostream classes wrapping the zlib compression library. // Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public // License as published by the Free Software Foundation; either // version 3 of the License, or (at your option) any later version. // // This library 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 for more details. // // // See src/COPYING for the full terms of the license. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // ============================================================================ // // File : gzstream.C // Revision : $Revision: 1.7 $ // Revision_date : $Date: 2003/01/08 14:41:27 $ // Author(s) : Deepak Bandyopadhyay, Lutz Kettner // Modified : Jared Simpson 2010/04/16. Converted license notification to // GPLv3 to be compatible with the rest of the code base as // allowed by LGPLv2.1. No other changes were made. // // Standard streambuf implementation following Nicolai Josuttis, "The // Standard C++ Library". // ============================================================================ #include "gzstream.h" #include #include // for memcpy #ifdef GZSTREAM_NAMESPACE namespace GZSTREAM_NAMESPACE { #endif // ---------------------------------------------------------------------------- // Internal classes to implement gzstream. See header file for user classes. // ---------------------------------------------------------------------------- // -------------------------------------- // class gzstreambuf: // -------------------------------------- gzstreambuf* gzstreambuf::open( const char* name, int open_mode) { if ( is_open()) return (gzstreambuf*)0; mode = open_mode; // no append nor read/write mode if ((mode & std::ios::ate) || (mode & std::ios::app) || ((mode & std::ios::in) && (mode & std::ios::out))) return (gzstreambuf*)0; char fmode[10]; char* fmodeptr = fmode; if ( mode & std::ios::in) *fmodeptr++ = 'r'; else if ( mode & std::ios::out) *fmodeptr++ = 'w'; *fmodeptr++ = 'b'; *fmodeptr = '\0'; file = gzopen( name, fmode); if (file == 0) return (gzstreambuf*)0; opened = 1; return this; } gzstreambuf * gzstreambuf::close() { if ( is_open()) { sync(); opened = 0; if ( gzclose( file) == Z_OK) return this; } return (gzstreambuf*)0; } int gzstreambuf::underflow() { // used for input buffer only if ( gptr() && ( gptr() < egptr())) return * reinterpret_cast( gptr()); if ( ! (mode & std::ios::in) || ! opened) return EOF; // Josuttis' implementation of inbuf int n_putback = gptr() - eback(); if ( n_putback > 4) n_putback = 4; memcpy( buffer + (4 - n_putback), gptr() - n_putback, n_putback); int num = gzread( file, buffer+4, bufferSize-4); if (num <= 0) // ERROR or EOF return EOF; // reset buffer pointers setg( buffer + (4 - n_putback), // beginning of putback area buffer + 4, // read position buffer + 4 + num); // end of buffer // return next character return * reinterpret_cast( gptr()); } int gzstreambuf::flush_buffer() { // Separate the writing of the buffer from overflow() and // sync() operation. int w = pptr() - pbase(); if ( gzwrite( file, pbase(), w) != w) return EOF; pbump( -w); return w; } int gzstreambuf::overflow( int c) { // used for output buffer only if ( ! ( mode & std::ios::out) || ! opened) return EOF; if (c != EOF) { *pptr() = c; pbump(1); } if ( flush_buffer() == EOF) return EOF; return c; } int gzstreambuf::sync() { // Changed to use flush_buffer() instead of overflow( EOF) // which caused improper behavior with std::endl and flush(), // bug reported by Vincent Ricard. if ( pptr() && pptr() > pbase()) { if ( flush_buffer() == EOF) return -1; } return 0; } // -------------------------------------- // class gzstreambase: // -------------------------------------- gzstreambase::gzstreambase( const char* name, int mode) { init( &buf); open( name, mode); } gzstreambase::~gzstreambase() { buf.close(); } void gzstreambase::open( const char* name, int open_mode) { if ( ! buf.open( name, open_mode)) clear( rdstate() | std::ios::badbit); } void gzstreambase::close() { if ( buf.is_open()) if ( ! buf.close()) clear( rdstate() | std::ios::badbit); } #ifdef GZSTREAM_NAMESPACE } // namespace GZSTREAM_NAMESPACE #endif // ============================================================================ // EOF // ================================================ FILE: src/SGA/Util/gzstream.h ================================================ // ============================================================================ // gzstream, C++ iostream classes wrapping the zlib compression library. // Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public // License as published by the Free Software Foundation; either // version 3 of the License, or (at your option) any later version. // // This library 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 for more details. // // // See src/COPYING for the full terms of the license. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // ============================================================================ // // File : gzstream.h // Revision : $Revision: 1.5 $ // Revision_date : $Date: 2002/04/26 23:30:15 $ // Author(s) : Deepak Bandyopadhyay, Lutz Kettner // Modified : Jared Simpson 2010/04/16. Converted license notification to // GPLv3 to be compatible with the rest of the code base as // allowed by LGPLv2.1. No other changes were made. // // // Standard streambuf implementation following Nicolai Josuttis, "The // Standard C++ Library". // ============================================================================ #ifndef GZSTREAM_H #define GZSTREAM_H 1 // standard C++ with new header file names and std:: namespace #include #include #include #ifdef GZSTREAM_NAMESPACE namespace GZSTREAM_NAMESPACE { #endif // ---------------------------------------------------------------------------- // Internal classes to implement gzstream. See below for user classes. // ---------------------------------------------------------------------------- class gzstreambuf : public std::streambuf { private: static const int bufferSize = 47+256; // size of data buff // totals 512 bytes under g++ for igzstream at the end. gzFile file; // file handle for compressed file char buffer[bufferSize]; // data buffer char opened; // open/close state of stream int mode; // I/O mode int flush_buffer(); public: gzstreambuf() : opened(0) { setp( buffer, buffer + (bufferSize-1)); setg( buffer + 4, // beginning of putback area buffer + 4, // read position buffer + 4); // end position // ASSERT: both input & output capabilities will not be used together } int is_open() { return opened; } gzstreambuf* open( const char* name, int open_mode); gzstreambuf* close(); ~gzstreambuf() { close(); } virtual int overflow( int c = EOF); virtual int underflow(); virtual int sync(); }; class gzstreambase : virtual public std::ios { protected: gzstreambuf buf; public: gzstreambase() { init(&buf); } gzstreambase( const char* name, int open_mode); ~gzstreambase(); void open( const char* name, int open_mode); void close(); gzstreambuf* rdbuf() { return &buf; } }; // ---------------------------------------------------------------------------- // User classes. Use igzstream and ogzstream analogously to ifstream and // ofstream respectively. They read and write files based on the gz* // function interface of the zlib. Files are compatible with gzip compression. // ---------------------------------------------------------------------------- class igzstream : public gzstreambase, public std::istream { public: igzstream() : std::istream( &buf) {} igzstream( const char* name, int open_mode = std::ios::in) : gzstreambase( name, open_mode), std::istream( &buf) {} gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } void open( const char* name, int open_mode = std::ios::in) { gzstreambase::open( name, open_mode); } }; class ogzstream : public gzstreambase, public std::ostream { public: ogzstream() : std::ostream( &buf) {} ogzstream( const char* name, int mode = std::ios::out) : gzstreambase( name, mode), std::ostream( &buf) {} gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } void open( const char* name, int open_mode = std::ios::out) { gzstreambase::open( name, open_mode); } }; #ifdef GZSTREAM_NAMESPACE } // namespace GZSTREAM_NAMESPACE #endif #endif // GZSTREAM_H // ============================================================================ // EOF // ================================================ FILE: src/SGA/Util/mkqs.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // mkqs - multikey quicksort // // Perform a ternary quicksort of strings as described in // Bentley and Sedgewick, 1997 // // Example code was downloaded from http://www.cs.princeton.edu/~rs/strings/demo.c // Modified by JTS to take in a comparator and use a generic type // #ifndef MKQS_H #define MKQS_H #include #include #include #include #include //#include "MkqsThread.h" #define mkqs_swap(a, b) { T tmp = x[a]; x[a] = x[b]; x[b] = tmp; } // Swap [i..i+n] and [j..j+n] in x template inline void vecswap(int i, int j, int n, T* x) { while (n-- > 0) { mkqs_swap(i, j); i++; j++; } } #define mkqs_swap2(a, b) { T t = *(a); *(a) = *(b); *(b) = t; } #define ptr2char(p) (primarySorter.getChar(*(p), depth)) #define elem2char(e, d) (primarySorter.getChar((e), (d))) template inline void vecswap2(T* a, T* b, int n) { while (n-- > 0) { T t = *a; *a++ = *b; *b++ = t; } } template T* med3func(T* a, T* b, T* c, int depth, const PrimarySorter& primarySorter) { int va, vb, vc; if ((va=ptr2char(a)) == (vb=ptr2char(b))) return a; if ((vc=ptr2char(c)) == va || vc == vb) return c; return va < vb ? (vb < vc ? b : (va < vc ? c : a ) ) : (vb > vc ? b : (va < vc ? a : c ) ); } #define med3(a, b, c) med3func(a, b, c, depth, primarySorter) template inline void inssort(T* a, int n, int d, const PrimarySorter& primarySorter, const FinalSorter& finalSorter) { T *pi, *pj, s, t; for (pi = a + 1; --n > 0; pi++) { for (pj = pi; pj > a; pj--) { // Inline strcmp: break if *(pj-1) <= *pj T elem_s = *(pj - 1); T elem_t = *pj; const char* s = primarySorter.getChrPtr(elem_s); const char* t = primarySorter.getChrPtr(elem_t); for (s=s+d, t=t+d; *s==*t && *s!=0; s++, t++) ; if (*s < *t || (*s == *t && finalSorter(elem_s, elem_t))) break; mkqs_swap2(pj, pj-1); } } } // template void mkqs2(T* a, int n, int depth, const PrimarySorter& primarySorter, const FinalSorter& finalSorter) { int r, partval; T *pa, *pb, *pc, *pd, *pm, *pn, t; if (n < 10) { inssort(a, n, depth, primarySorter, finalSorter); return; } // chatGPT determinisic method pm = med3(a, a + n/2, a + n - 1); // med3 is already defined above // old rand determined, has hidden mutex lock /* pm = a + (n/2); pn = a + (n-1); int mid_idx = rand() % n; pm = &a[mid_idx];*/ mkqs_swap2(a, pm); partval = ptr2char(a); pa = pb = a + 1; pc = pd = a + n-1; for (;;) { while (pb <= pc && (r = ptr2char(pb)-partval) <= 0) { if (r == 0) { mkqs_swap2(pa, pb); pa++; } pb++; } while (pb <= pc && (r = ptr2char(pc)-partval) >= 0) { if (r == 0) { mkqs_swap2(pc, pd); pd--; } pc--; } if (pb > pc) break; mkqs_swap2(pb, pc); pb++; pc--; } pn = a + n; r = std::min(pa-a, pb-pa); vecswap2(a, pb-r, r); r = std::min(pd-pc, pn-pd-1); vecswap2(pb, pn-r, r); if ((r = pb-pa) > 1) mkqs2(a, r, depth, primarySorter, finalSorter); if (ptr2char(a + r) != 0) mkqs2(a + r, pa-a + pn-pd-1, depth+1, primarySorter, finalSorter); else { int n2 = pa - a + pn - pd - 1; std::sort(a + r, a + r + n2, finalSorter); } if ((r = pd-pc) > 1) mkqs2(a + n-r, r, depth, primarySorter, finalSorter); } // Parallel multikey quicksort. It performs mkqs but will // subdivide the array to sort into sub jobs which can be sorted using threads. /*template void parallel_mkqs(T* pData, int n, int numThreads, const PrimarySorter& primarySorter, const FinalSorter& finalSorter) { typedef MkqsJob Job; typedef std::queue JobQueue; Job initialJob(pData, n, 0); JobQueue queue; queue.push(initialJob); // Create the mutex that guards the queue pthread_mutex_t queue_mutex; int ret = pthread_mutex_init(&queue_mutex, NULL); if(ret != 0) { std::cerr << "Mutex initialization failed with error " << ret << ", aborting" << std::endl; exit(EXIT_FAILURE); } // Calculate the threshold size for performing serial continuation of the sort. Once the chunks // are below this size, it is better to not subdivide the problem into smaller chunks // to avoid the overhead of locking, adding to the queue, etc. int threshold_size = n / numThreads; // Create the semaphore used to signal that data is ready to be processed // Initial value is 1 as there is one item on the queue to start sem_t queue_sem; ret = sem_init( &queue_sem, PTHREAD_PROCESS_PRIVATE, 1 ); if(ret != 0) { std::cerr << "Semaphore initialization failed with error " << ret << "\n"; std::cerr << "You are probably running on OSX which does not provide unnamed semaphores\n"; exit(EXIT_FAILURE); } // Create the semaphore indicating a thread is finished working. // This semaphore is incremented by the threads in their run loop // before waiting for queue items. If the thread takes an item, // this semaphore is decremented. The main thread checks // this semaphore after confirming the queue is empty. If this // semaphore value equals the total number of threads, // no more work can remain the the threads are cleaned up sem_t done_sem; ret = sem_init( &done_sem, PTHREAD_PROCESS_PRIVATE, 0 ); if(ret != 0) { std::cerr << "Semaphore initialization failed with error " << ret << "\n"; std::cerr << "You are probably running on OSX which does not provide unnamed semaphores\n"; exit(EXIT_FAILURE); } // Create and start the threads MkqsThread* threads[numThreads]; for(int i = 0; i < numThreads; ++i) { threads[i] = new MkqsThread(i, &queue, &queue_mutex, &queue_sem, &done_sem, threshold_size, &primarySorter, &finalSorter); threads[i]->start(); } // Check for the end condition bool done = false; while(!done) { // sleep(1); // Check if the queue is empty // If it is and all threads are finished working (all have posted to // the done semaphore), then the threads can be cleaned up. pthread_mutex_lock(&queue_mutex); if(queue.empty()) { int semval; sem_getvalue(&done_sem, &semval); if(semval == numThreads) done = true; } pthread_mutex_unlock(&queue_mutex); } // Signal all the threads to stop, then post to the semaphore they are waiting on // All threads will pick up the stop request after the posts and call pthread exit for(int i = 0; i < numThreads; ++i) { threads[i]->stop(); } for(int i = 0; i < numThreads; ++i) { sem_post(&queue_sem); } // Join and destroy the threads for(int i = 0; i < numThreads; ++i) { threads[i]->join(); delete threads[i]; } // Destroy the semaphore sem_destroy(&queue_sem); sem_destroy(&done_sem); // Destroy the queue mutex ret = pthread_mutex_destroy(&queue_mutex); if(ret != 0) { std::cerr << "Mutex destruction failed with error " << ret << ", aborting" << std::endl; exit(EXIT_FAILURE); } } */ // // Perform a partial sort of the data using the mkqs algorithm // Iterative sort jobs are created and added to pQueue which is // protected by pQueueMutex. After addition, pQueueSem is updated. // /* template void parallel_mkqs_process(MkqsJob& job, std::queue >* pQueue, pthread_mutex_t* pQueueMutex, sem_t* pQueueSem, const PrimarySorter& primarySorter, const FinalSorter& finalSorter) { T* a = job.pData; int n = job.n; int depth = job.depth; int r, partval; T *pa, *pb, *pc, *pd, *pm, *pn, t; if(n < 10) { inssort(a, n, depth, primarySorter, finalSorter); return; } pm = a + (n/2); pn = a + (n-1); int mid_idx = rand() % n; pm = &a[mid_idx]; mkqs_swap2(a, pm); partval = ptr2char(a); pa = pb = a + 1; pc = pd = a + n-1; for (;;) { while (pb <= pc && (r = ptr2char(pb)-partval) <= 0) { if (r == 0) { mkqs_swap2(pa, pb); pa++; } pb++; } while (pb <= pc && (r = ptr2char(pc)-partval) >= 0) { if (r == 0) { mkqs_swap2(pc, pd); pd--; } pc--; } if (pb > pc) break; mkqs_swap2(pb, pc); pb++; pc--; } pn = a + n; r = std::min(pa-a, pb-pa); vecswap2(a, pb-r, r); r = std::min(pd-pc, pn-pd-1); vecswap2(pb, pn-r, r); // Lock the queue and push new items if necessary // If new items are added to the queue, the semaphore is posted to pthread_mutex_lock(pQueueMutex); if ((r = pb-pa) > 1) { MkqsJob job(a, r, depth); pQueue->push(job); sem_post(pQueueSem); } if (ptr2char(a + r) != 0) { MkqsJob job(a + r, pa-a + pn-pd-1, depth + 1); pQueue->push(job); sem_post(pQueueSem); } else { // Finalize the sort int n2 = pa - a + pn - pd - 1; std::sort(a + r, a + r + n2, finalSorter); } if ((r = pd-pc) > 1) { MkqsJob job(a + n-r, r, depth); pQueue->push(job); sem_post(pQueueSem); } // Unlock the mutex pthread_mutex_unlock(pQueueMutex); } */ #endif ================================================ FILE: src/SGA/Util/old.AlignedContig.h ================================================ #include "Util.h" #include "api/BamReader.h" #include "api/BamWriter.h" #include class AlignedContig { public: AlignedContig(const BamTools::BamAlignment align) { m_align.push_back(align); } ~AlignedContig() {} void addAlignement(const BamTools::BamAlignment align) { m_align.push_back(align); m_num++; } void addRead(const SeqRecord sr) { m_sr.push_back(sr); } private: std::vector m_align; std::vector m_sr; unsigned m_num; } ================================================ FILE: src/SGA/Util/stdaln.c ================================================ /* The MIT License Copyright (c) 2003-2006, 2008, 2009, by Heng Li Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include "stdaln.h" /* char -> 17 (=16+1) nucleotides */ unsigned char aln_nt16_table[256] = { 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,16 /*'-'*/,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15, 1,14, 4, 11,15,15, 2, 13,15,15,10, 15, 5,15,15, 15,15, 3, 6, 8,15, 7, 9, 0,12,15,15, 15,15,15,15, 15, 1,14, 4, 11,15,15, 2, 13,15,15,10, 15, 5,15,15, 15,15, 3, 6, 8,15, 7, 9, 0,12,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15 }; char *aln_nt16_rev_table = "XAGRCMSVTWKDYHBN-"; /* char -> 5 (=4+1) nucleotides */ unsigned char aln_nt4_table[256] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5 /*'-'*/, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 2, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 2, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; char *aln_nt4_rev_table = "AGCTN-"; /* char -> 22 (=20+1+1) amino acids */ unsigned char aln_aa_table[256] = { 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,20,21, 21,22 /*'-'*/,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21, 0,21, 4, 3, 6,13, 7, 8, 9,21,11, 10,12, 2,21, 14, 5, 1,15, 16,21,19,17, 21,18,21,21, 21,21,21,21, 21, 0,21, 4, 3, 6,13, 7, 8, 9,21,11, 10,12, 2,21, 14, 5, 1,15, 16,21,19,17, 21,18,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21, 21,21,21,21 }; char *aln_aa_rev_table = "ARNDCQEGHILKMFPSTWYV*X-"; /* 01234567890123456789012 */ /* translation table. They are useless in stdaln.c, but when you realize you need it, you need not write the table again. */ unsigned char aln_trans_table_eu[66] = { 11,11, 2, 2, 1, 1,15,15, 16,16,16,16, 9,12, 9, 9, 6, 6, 3, 3, 7, 7, 7, 7, 0, 0, 0, 0, 19,19,19,19, 5, 5, 8, 8, 1, 1, 1, 1, 14,14,14,14, 10,10,10,10, 20,20,18,18, 20,17, 4, 4, 15,15,15,15, 10,10,13,13, 21, 22 }; char *aln_trans_table_eu_char = "KKNNRRSSTTTTIMIIEEDDGGGGAAAAVVVVQQHHRRRRPPPPLLLL**YY*WCCSSSSLLFFX"; /* 01234567890123456789012345678901234567890123456789012345678901234 */ int aln_sm_blosum62[] = { /* A R N D C Q E G H I L K M F P S T W Y V * X */ 4,-1,-2,-2, 0,-1,-1, 0,-2,-1,-1,-1,-1,-2,-1, 1, 0,-3,-2, 0,-4, 0, -1, 5, 0,-2,-3, 1, 0,-2, 0,-3,-2, 2,-1,-3,-2,-1,-1,-3,-2,-3,-4,-1, -2, 0, 6, 1,-3, 0, 0, 0, 1,-3,-3, 0,-2,-3,-2, 1, 0,-4,-2,-3,-4,-1, -2,-2, 1, 6,-3, 0, 2,-1,-1,-3,-4,-1,-3,-3,-1, 0,-1,-4,-3,-3,-4,-1, 0,-3,-3,-3, 9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-4,-2, -1, 1, 0, 0,-3, 5, 2,-2, 0,-3,-2, 1, 0,-3,-1, 0,-1,-2,-1,-2,-4,-1, -1, 0, 0, 2,-4, 2, 5,-2, 0,-3,-3, 1,-2,-3,-1, 0,-1,-3,-2,-2,-4,-1, 0,-2, 0,-1,-3,-2,-2, 6,-2,-4,-4,-2,-3,-3,-2, 0,-2,-2,-3,-3,-4,-1, -2, 0, 1,-1,-3, 0, 0,-2, 8,-3,-3,-1,-2,-1,-2,-1,-2,-2, 2,-3,-4,-1, -1,-3,-3,-3,-1,-3,-3,-4,-3, 4, 2,-3, 1, 0,-3,-2,-1,-3,-1, 3,-4,-1, -1,-2,-3,-4,-1,-2,-3,-4,-3, 2, 4,-2, 2, 0,-3,-2,-1,-2,-1, 1,-4,-1, -1, 2, 0,-1,-3, 1, 1,-2,-1,-3,-2, 5,-1,-3,-1, 0,-1,-3,-2,-2,-4,-1, -1,-1,-2,-3,-1, 0,-2,-3,-2, 1, 2,-1, 5, 0,-2,-1,-1,-1,-1, 1,-4,-1, -2,-3,-3,-3,-2,-3,-3,-3,-1, 0, 0,-3, 0, 6,-4,-2,-2, 1, 3,-1,-4,-1, -1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4, 7,-1,-1,-4,-3,-2,-4,-2, 1,-1, 1, 0,-1, 0, 0, 0,-1,-2,-2, 0,-1,-2,-1, 4, 1,-3,-2,-2,-4, 0, 0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1, 1, 5,-2,-2, 0,-4, 0, -3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1, 1,-4,-3,-2,11, 2,-3,-4,-2, -2,-2,-2,-3,-2,-1,-2,-3, 2,-1,-1,-2,-1, 3,-3,-2,-2, 2, 7,-1,-4,-1, 0,-3,-3,-3,-1,-2,-2,-3,-3, 3, 1,-2, 1,-1,-2,-2, 0,-3,-1, 4,-4,-1, -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4, 1,-4, 0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2, 0, 0,-2,-1,-1,-4,-1 }; int aln_sm_blosum45[] = { /* A R N D C Q E G H I L K M F P S T W Y V * X */ 5,-2,-1,-2,-1,-1,-1, 0,-2,-1,-1,-1,-1,-2,-1, 1, 0,-2,-2, 0,-5, 0, -2, 7, 0,-1,-3, 1, 0,-2, 0,-3,-2, 3,-1,-2,-2,-1,-1,-2,-1,-2,-5,-1, -1, 0, 6, 2,-2, 0, 0, 0, 1,-2,-3, 0,-2,-2,-2, 1, 0,-4,-2,-3,-5,-1, -2,-1, 2, 7,-3, 0, 2,-1, 0,-4,-3, 0,-3,-4,-1, 0,-1,-4,-2,-3,-5,-1, -1,-3,-2,-3,12,-3,-3,-3,-3,-3,-2,-3,-2,-2,-4,-1,-1,-5,-3,-1,-5,-2, -1, 1, 0, 0,-3, 6, 2,-2, 1,-2,-2, 1, 0,-4,-1, 0,-1,-2,-1,-3,-5,-1, -1, 0, 0, 2,-3, 2, 6,-2, 0,-3,-2, 1,-2,-3, 0, 0,-1,-3,-2,-3,-5,-1, 0,-2, 0,-1,-3,-2,-2, 7,-2,-4,-3,-2,-2,-3,-2, 0,-2,-2,-3,-3,-5,-1, -2, 0, 1, 0,-3, 1, 0,-2,10,-3,-2,-1, 0,-2,-2,-1,-2,-3, 2,-3,-5,-1, -1,-3,-2,-4,-3,-2,-3,-4,-3, 5, 2,-3, 2, 0,-2,-2,-1,-2, 0, 3,-5,-1, -1,-2,-3,-3,-2,-2,-2,-3,-2, 2, 5,-3, 2, 1,-3,-3,-1,-2, 0, 1,-5,-1, -1, 3, 0, 0,-3, 1, 1,-2,-1,-3,-3, 5,-1,-3,-1,-1,-1,-2,-1,-2,-5,-1, -1,-1,-2,-3,-2, 0,-2,-2, 0, 2, 2,-1, 6, 0,-2,-2,-1,-2, 0, 1,-5,-1, -2,-2,-2,-4,-2,-4,-3,-3,-2, 0, 1,-3, 0, 8,-3,-2,-1, 1, 3, 0,-5,-1, -1,-2,-2,-1,-4,-1, 0,-2,-2,-2,-3,-1,-2,-3, 9,-1,-1,-3,-3,-3,-5,-1, 1,-1, 1, 0,-1, 0, 0, 0,-1,-2,-3,-1,-2,-2,-1, 4, 2,-4,-2,-1,-5, 0, 0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-1,-1, 2, 5,-3,-1, 0,-5, 0, -2,-2,-4,-4,-5,-2,-3,-2,-3,-2,-2,-2,-2, 1,-3,-4,-3,15, 3,-3,-5,-2, -2,-1,-2,-2,-3,-1,-2,-3, 2, 0, 0,-1, 0, 3,-3,-2,-1, 3, 8,-1,-5,-1, 0,-2,-3,-3,-1,-3,-3,-3,-3, 3, 1,-2, 1, 0,-3,-1, 0,-3,-1, 5,-5,-1, -5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5, 1,-5, 0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0,-2,-1,-1,-5,-1 }; int aln_sm_nt[] = { /* X A G R C M S V T W K D Y H B N */ -2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2, -2, 2,-1, 1,-2, 1,-2, 0,-2, 1,-2, 0,-2, 0,-2, 0, -2,-1, 2, 1,-2,-2, 1, 0,-2,-2, 1, 0,-2,-2, 0, 0, -2, 1, 1, 1,-2,-1,-1, 0,-2,-1,-1, 0,-2, 0, 0, 0, -2,-2,-2,-2, 2, 1, 1, 0,-1,-2,-2,-2, 1, 0, 0, 0, -2, 1,-2,-1, 1, 1,-1, 0,-2,-1,-2, 0,-1, 0, 0, 0, -2,-2, 1,-1, 1,-1, 1, 0,-2,-2,-1, 0,-1, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0,-2, 0, 0, 0, 0, 0, 0, 0, -2,-2,-2,-2,-1,-2,-2,-2, 2, 1, 1, 0, 1, 0, 0, 0, -2, 1,-2,-1,-2,-1,-2, 0, 1, 1,-1, 0,-1, 0, 0, 0, -2,-2, 1,-1,-2,-2,-1, 0, 1,-1, 1, 0,-1, 0, 0, 0, -2, 0, 0, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2,-2,-2,-2, 1,-1,-1, 0, 1,-1,-1, 0, 1, 0, 0, 0, -2, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int aln_sm_read[] = { /* X A G R C M S V T W K D Y H B N */ -17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17, -17, 2,-17, 1,-17, 1,-17, 0,-17, 1,-17, 0,-17, 0,-17, 0, -17,-17, 2, 1,-17,-17, 1, 0,-17,-17, 1, 0,-17,-17, 0, 0, -17, 1, 1, 1,-17,-17,-17, 0,-17,-17,-17, 0,-17, 0, 0, 0, -17,-17,-17,-17, 2, 1, 1, 0,-17,-17,-17,-17, 1, 0, 0, 0, -17, 1,-17,-17, 1, 1,-17, 0,-17,-17,-17, 0,-17, 0, 0, 0, -17,-17, 1,-17, 1,-17, 1, 0,-17,-17,-17, 0,-17, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0,-17, 0, 0, 0, 0, 0, 0, 0, -17,-17,-17,-17,-17,-17,-17,-17, 2, 1, 1, 0, 1, 0, 0, 0, -17, 1,-17,-17,-17,-17,-17, 0, 1, 1,-17, 0,-17, 0, 0, 0, -17,-17, 1,-17,-17,-17,-17, 0, 1,-17, 1, 0,-17, 0, 0, 0, -17, 0, 0, 0,-17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17,-17,-17,-17, 1,-17,-17, 0, 1,-17,-17, 0, 1, 0, 0, 0, -17, 0,-17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17,-17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int aln_sm_hs[] = { /* A G C T N */ 91, -31,-114,-123, -44, -31, 100,-125,-114, -42, -123,-125, 100, -31, -42, -114,-114, -31, 91, -42, -44, -42, -42, -42, -43 }; int aln_sm_maq[] = { 11, -19, -19, -19, -13, -19, 11, -19, -19, -13, -19, -19, 11, -19, -13, -19, -19, -19, 11, -13, -13, -13, -13, -13, -13 }; int aln_sm_blast[] = { 1, -3, -3, -3, -2, -3, 1, -3, -3, -2, -3, -3, 1, -3, -2, -3, -3, -3, 1, -2, -2, -2, -2, -2, -2 }; /********************/ /* START OF align.c */ /********************/ AlnParam aln_param_blast = { 5, 2, 2, aln_sm_blast, 5, 50 }; AlnParam aln_param_bwa = { 26, 9, 5, aln_sm_maq, 5, 50 }; AlnParam aln_param_nt2nt = { 8, 2, 2, aln_sm_nt, 16, 75 }; AlnParam aln_param_rd2rd = { 1, 19, 19, aln_sm_read, 16, 75 }; AlnParam aln_param_aa2aa = { 10, 2, 2, aln_sm_blosum62, 22, 50 }; AlnAln *aln_init_AlnAln() { AlnAln *aa; aa = (AlnAln*)malloc(sizeof(AlnAln)); aa->path = 0; aa->out1 = aa->out2 = aa->outm = 0; aa->path_len = 0; return aa; } void aln_free_AlnAln(AlnAln *aa) { free(aa->path); free(aa->cigar32); free(aa->out1); free(aa->out2); free(aa->outm); free(aa); } /***************************/ /* START OF common_align.c */ /***************************/ #define LOCAL_OVERFLOW_THRESHOLD 32000 #define LOCAL_OVERFLOW_REDUCE 16000 #define NT_LOCAL_SCORE int #define NT_LOCAL_SHIFT 16 #define NT_LOCAL_MASK 0xffff #define SET_INF(s) (s).M = (s).I = (s).D = MINOR_INF; #define set_M(MM, cur, p, sc) \ { \ if ((p)->M >= (p)->I) { \ if ((p)->M >= (p)->D) { \ (MM) = (p)->M + (sc); (cur)->Mt = FROM_M; \ } else { \ (MM) = (p)->D + (sc); (cur)->Mt = FROM_D; \ } \ } else { \ if ((p)->I > (p)->D) { \ (MM) = (p)->I + (sc); (cur)->Mt = FROM_I; \ } else { \ (MM) = (p)->D + (sc); (cur)->Mt = FROM_D; \ } \ } \ } #define set_I(II, cur, p) \ { \ if ((p)->M - gap_open > (p)->I) { \ (cur)->It = FROM_M; \ (II) = (p)->M - gap_open - gap_ext; \ } else { \ (cur)->It = FROM_I; \ (II) = (p)->I - gap_ext; \ } \ } #define set_end_I(II, cur, p) \ { \ if (gap_end >= 0) { \ if ((p)->M - gap_open > (p)->I) { \ (cur)->It = FROM_M; \ (II) = (p)->M - gap_open - gap_end; \ } else { \ (cur)->It = FROM_I; \ (II) = (p)->I - gap_end; \ } \ } else set_I(II, cur, p); \ } #define set_D(DD, cur, p) \ { \ if ((p)->M - gap_open > (p)->D) { \ (cur)->Dt = FROM_M; \ (DD) = (p)->M - gap_open - gap_ext; \ } else { \ (cur)->Dt = FROM_D; \ (DD) = (p)->D - gap_ext; \ } \ } #define set_end_D(DD, cur, p) \ { \ if (gap_end >= 0) { \ if ((p)->M - gap_open > (p)->D) { \ (cur)->Dt = FROM_M; \ (DD) = (p)->M - gap_open - gap_end; \ } else { \ (cur)->Dt = FROM_D; \ (DD) = (p)->D - gap_end; \ } \ } else set_D(DD, cur, p); \ } typedef struct { unsigned char Mt:3, It:2, Dt:2; } dpcell_t; typedef struct { int M, I, D; } dpscore_t; /* build score profile for accelerating alignment, in theory */ void aln_init_score_array(unsigned char *seq, int len, int row, int *score_matrix, int **s_array) { int *tmp, *tmp2, i, k; for (i = 0; i != row; ++i) { tmp = score_matrix + i * row; tmp2 = s_array[i]; for (k = 0; k != len; ++k) tmp2[k] = tmp[seq[k]]; } } /*************************** * banded global alignment * ***************************/ int aln_global_core(unsigned char *seq1, int len1, unsigned char *seq2, int len2, const AlnParam *ap, path_t *path, int *path_len) { register int i, j; dpcell_t **dpcell, *q; dpscore_t *curr, *last, *s; path_t *p; int b1, b2, tmp_end; int *mat, end, max; unsigned char type, ctype; int gap_open, gap_ext, gap_end, b; int *score_matrix, N_MATRIX_ROW; /* initialize some align-related parameters. just for compatibility */ gap_open = ap->gap_open; gap_ext = ap->gap_ext; gap_end = ap->gap_end; b = ap->band_width; score_matrix = ap->matrix; N_MATRIX_ROW = ap->row; if (len1 == 0 || len2 == 0) { *path_len = 0; return 0; } /* calculate b1 and b2 */ if (len1 > len2) { b1 = len1 - len2 + b; b2 = b; } else { b1 = b; b2 = len2 - len1 + b; } if (b1 > len1) b1 = len1; if (b2 > len2) b2 = len2; --seq1; --seq2; /* allocate memory */ end = (b1 + b2 <= len1)? (b1 + b2 + 1) : (len1 + 1); dpcell = (dpcell_t**)malloc(sizeof(dpcell_t*) * (len2 + 1)); for (j = 0; j <= len2; ++j) dpcell[j] = (dpcell_t*)malloc(sizeof(dpcell_t) * end); for (j = b2 + 1; j <= len2; ++j) dpcell[j] -= j - b2; curr = (dpscore_t*)malloc(sizeof(dpscore_t) * (len1 + 1)); last = (dpscore_t*)malloc(sizeof(dpscore_t) * (len1 + 1)); /* set first row */ SET_INF(*curr); curr->M = 0; for (i = 1, s = curr + 1; i < b1; ++i, ++s) { SET_INF(*s); set_end_D(s->D, dpcell[0] + i, s - 1); } s = curr; curr = last; last = s; /* core dynamic programming, part 1 */ tmp_end = (b2 < len2)? b2 : len2 - 1; for (j = 1; j <= tmp_end; ++j) { q = dpcell[j]; s = curr; SET_INF(*s); set_end_I(s->I, q, last); end = (j + b1 <= len1 + 1)? (j + b1 - 1) : len1; mat = score_matrix + seq2[j] * N_MATRIX_ROW; ++s; ++q; for (i = 1; i != end; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); /* this will change s->M ! */ set_I(s->I, q, last + i); set_D(s->D, q, s - 1); } set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_D(s->D, q, s - 1); if (j + b1 - 1 > len1) { /* bug fixed, 040227 */ set_end_I(s->I, q, last + i); } else s->I = MINOR_INF; s = curr; curr = last; last = s; } /* last row for part 1, use set_end_D() instead of set_D() */ if (j == len2 && b2 != len2 - 1) { q = dpcell[j]; s = curr; SET_INF(*s); set_end_I(s->I, q, last); end = (j + b1 <= len1 + 1)? (j + b1 - 1) : len1; mat = score_matrix + seq2[j] * N_MATRIX_ROW; ++s; ++q; for (i = 1; i != end; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); /* this will change s->M ! */ set_I(s->I, q, last + i); set_end_D(s->D, q, s - 1); } set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_end_D(s->D, q, s - 1); if (j + b1 - 1 > len1) { /* bug fixed, 040227 */ set_end_I(s->I, q, last + i); } else s->I = MINOR_INF; s = curr; curr = last; last = s; ++j; } /* core dynamic programming, part 2 */ for (; j <= len2 - b2 + 1; ++j) { SET_INF(curr[j - b2]); mat = score_matrix + seq2[j] * N_MATRIX_ROW; end = j + b1 - 1; for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i != end; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_I(s->I, q, last + i); set_D(s->D, q, s - 1); } set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_D(s->D, q, s - 1); s->I = MINOR_INF; s = curr; curr = last; last = s; } /* core dynamic programming, part 3 */ for (; j < len2; ++j) { SET_INF(curr[j - b2]); mat = score_matrix + seq2[j] * N_MATRIX_ROW; for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i < len1; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_I(s->I, q, last + i); set_D(s->D, q, s - 1); } set_M(s->M, q, last + len1 - 1, mat[seq1[i]]); set_end_I(s->I, q, last + i); set_D(s->D, q, s - 1); s = curr; curr = last; last = s; } /* last row */ if (j == len2) { SET_INF(curr[j - b2]); mat = score_matrix + seq2[j] * N_MATRIX_ROW; for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i < len1; ++i, ++s, ++q) { set_M(s->M, q, last + i - 1, mat[seq1[i]]); set_I(s->I, q, last + i); set_end_D(s->D, q, s - 1); } set_M(s->M, q, last + len1 - 1, mat[seq1[i]]); set_end_I(s->I, q, last + i); set_end_D(s->D, q, s - 1); s = curr; curr = last; last = s; } /* backtrace */ i = len1; j = len2; q = dpcell[j] + i; s = last + len1; max = s->M; type = q->Mt; ctype = FROM_M; if (s->I > max) { max = s->I; type = q->It; ctype = FROM_I; } if (s->D > max) { max = s->D; type = q->Dt; ctype = FROM_D; } p = path; p->ctype = ctype; p->i = i; p->j = j; /* bug fixed 040408 */ ++p; do { switch (ctype) { case FROM_M: --i; --j; break; case FROM_I: --j; break; case FROM_D: --i; break; } q = dpcell[j] + i; ctype = type; switch (type) { case FROM_M: type = q->Mt; break; case FROM_I: type = q->It; break; case FROM_D: type = q->Dt; break; } p->ctype = ctype; p->i = i; p->j = j; ++p; } while (i || j); *path_len = p - path - 1; /* free memory */ for (j = b2 + 1; j <= len2; ++j) dpcell[j] += j - b2; for (j = 0; j <= len2; ++j) free(dpcell[j]); free(dpcell); free(curr); free(last); return max; } /************************************************* * local alignment combined with banded strategy * *************************************************/ int aln_local_core(unsigned char *seq1, int len1, unsigned char *seq2, int len2, const AlnParam *ap, path_t *path, int *path_len, int _thres, int *_subo) { register NT_LOCAL_SCORE *s; register int i; int q, r, qr, tmp_len, qr_shift; int **s_array, *score_array; int e, f; int is_overflow, of_base; NT_LOCAL_SCORE *eh, curr_h, last_h, curr_last_h; int j, start_i, start_j, end_i, end_j; path_t *p; int score_f, score_r, score_g; int start, end, max_score; int thres, *suba, *ss; int gap_open, gap_ext, b; int *score_matrix, N_MATRIX_ROW; /* initialize some align-related parameters. just for compatibility */ gap_open = ap->gap_open; gap_ext = ap->gap_ext; b = ap->band_width; score_matrix = ap->matrix; N_MATRIX_ROW = ap->row; thres = _thres > 0? _thres : -_thres; if (len1 == 0 || len2 == 0) return -1; /* allocate memory */ suba = (int*)malloc(sizeof(int) * (len2 + 1)); eh = (NT_LOCAL_SCORE*)malloc(sizeof(NT_LOCAL_SCORE) * (len1 + 1)); s_array = (int**)malloc(sizeof(int*) * N_MATRIX_ROW); for (i = 0; i != N_MATRIX_ROW; ++i) s_array[i] = (int*)malloc(sizeof(int) * len1); /* initialization */ aln_init_score_array(seq1, len1, N_MATRIX_ROW, score_matrix, s_array); q = gap_open; r = gap_ext; qr = q + r; qr_shift = (qr+1) << NT_LOCAL_SHIFT; tmp_len = len1 + 1; start_i = start_j = end_i = end_j = 0; for (i = 0, max_score = 0; i != N_MATRIX_ROW * N_MATRIX_ROW; ++i) if (max_score < score_matrix[i]) max_score = score_matrix[i]; /* convert the coordinate */ --seq1; --seq2; for (i = 0; i != N_MATRIX_ROW; ++i) --s_array[i]; /* forward dynamic programming */ for (i = 0, s = eh; i != tmp_len; ++i, ++s) *s = 0; score_f = 0; is_overflow = of_base = 0; suba[0] = 0; for (j = 1, ss = suba + 1; j <= len2; ++j, ++ss) { int subo = 0; last_h = f = 0; score_array = s_array[seq2[j]]; if (is_overflow) { /* adjust eh[] array if overflow occurs. */ /* If LOCAL_OVERFLOW_REDUCE is too small, optimal alignment might be missed. * If it is too large, this block will be excuted frequently and therefore * slow down the whole program. * Acually, smaller LOCAL_OVERFLOW_REDUCE might also help to reduce the * number of assignments because it sets some cells to zero when overflow * happens. */ int tmp, tmp2; score_f -= LOCAL_OVERFLOW_REDUCE; of_base += LOCAL_OVERFLOW_REDUCE; is_overflow = 0; for (i = 1, s = eh; i <= tmp_len; ++i, ++s) { tmp = *s >> NT_LOCAL_SHIFT; tmp2 = *s & NT_LOCAL_MASK; if (tmp2 < LOCAL_OVERFLOW_REDUCE) tmp2 = 0; else tmp2 -= LOCAL_OVERFLOW_REDUCE; if (tmp < LOCAL_OVERFLOW_REDUCE) tmp = 0; else tmp -= LOCAL_OVERFLOW_REDUCE; *s = (tmp << NT_LOCAL_SHIFT) | tmp2; } } for (i = 1, s = eh; i != tmp_len; ++i, ++s) { /* prepare for calculate current h */ curr_h = (*s >> NT_LOCAL_SHIFT) + score_array[i]; if (curr_h < 0) curr_h = 0; if (last_h > 0) { /* initialize f */ f = (f > last_h - q)? f - r : last_h - qr; if (curr_h < f) curr_h = f; } if (*(s+1) >= qr_shift) { /* initialize e */ curr_last_h = *(s+1) >> NT_LOCAL_SHIFT; e = ((*s & NT_LOCAL_MASK) > curr_last_h - q)? (*s & NT_LOCAL_MASK) - r : curr_last_h - qr; if (curr_h < e) curr_h = e; *s = (last_h << NT_LOCAL_SHIFT) | e; } else *s = last_h << NT_LOCAL_SHIFT; /* e = 0 */ last_h = curr_h; if (subo < curr_h) subo = curr_h; if (score_f < curr_h) { score_f = curr_h; end_i = i; end_j = j; if (score_f > LOCAL_OVERFLOW_THRESHOLD) is_overflow = 1; } } *s = last_h << NT_LOCAL_SHIFT; *ss = subo + of_base; } score_f += of_base; if (score_f < thres) { /* no matching residue at all, 090218 */ *path_len = 0; goto end_func; } if (path == 0) goto end_func; /* skip path-filling */ /* reverse dynamic programming */ for (i = end_i, s = eh + end_i; i >= 0; --i, --s) *s = 0; if (end_i == 0 || end_j == 0) goto end_func; /* no local match */ score_r = score_matrix[seq1[end_i] * N_MATRIX_ROW + seq2[end_j]]; is_overflow = of_base = 0; start_i = end_i; start_j = end_j; eh[end_i] = ((NT_LOCAL_SCORE)(qr + score_r)) << NT_LOCAL_SHIFT; /* in order to initialize f and e, 040408 */ start = end_i - 1; end = end_i - 3; if (end <= 0) end = 0; /* second pass DP can be done in a band, speed will thus be enhanced */ for (j = end_j - 1; j != 0; --j) { last_h = f = 0; score_array = s_array[seq2[j]]; if (is_overflow) { /* adjust eh[] array if overflow occurs. */ int tmp, tmp2; score_r -= LOCAL_OVERFLOW_REDUCE; of_base += LOCAL_OVERFLOW_REDUCE; is_overflow = 0; for (i = start, s = eh + start + 1; i >= end; --i, --s) { tmp = *s >> NT_LOCAL_SHIFT; tmp2 = *s & NT_LOCAL_MASK; if (tmp2 < LOCAL_OVERFLOW_REDUCE) tmp2 = 0; else tmp2 -= LOCAL_OVERFLOW_REDUCE; if (tmp < LOCAL_OVERFLOW_REDUCE) tmp = 0; else tmp -= LOCAL_OVERFLOW_REDUCE; *s = (tmp << NT_LOCAL_SHIFT) | tmp2; } } for (i = start, s = eh + start + 1; i != end; --i, --s) { /* prepare for calculate current h */ curr_h = (*s >> NT_LOCAL_SHIFT) + score_array[i]; if (curr_h < 0) curr_h = 0; if (last_h > 0) { /* initialize f */ f = (f > last_h - q)? f - r : last_h - qr; if (curr_h < f) curr_h = f; } curr_last_h = *(s-1) >> NT_LOCAL_SHIFT; e = ((*s & NT_LOCAL_MASK) > curr_last_h - q)? (*s & NT_LOCAL_MASK) - r : curr_last_h - qr; if (e < 0) e = 0; if (curr_h < e) curr_h = e; *s = (last_h << NT_LOCAL_SHIFT) | e; last_h = curr_h; if (score_r < curr_h) { score_r = curr_h; start_i = i; start_j = j; if (score_r + of_base - qr == score_f) { j = 1; break; } if (score_r > LOCAL_OVERFLOW_THRESHOLD) is_overflow = 1; } } *s = last_h << NT_LOCAL_SHIFT; /* recalculate start and end, the boundaries of the band */ if ((eh[start] >> NT_LOCAL_SHIFT) <= qr) --start; if (start <= 0) start = 0; end = start_i - (start_j - j) - (score_r + of_base + (start_j - j) * max_score) / r - 1; if (end <= 0) end = 0; } if (_subo) { int tmp2 = 0, tmp = (int)(start_j - .33 * (end_j - start_j) + .499); for (j = 1; j <= tmp; ++j) if (tmp2 < suba[j]) tmp2 = suba[j]; tmp = (int)(end_j + .33 * (end_j - start_j) + .499); for (j = tmp; j <= len2; ++j) if (tmp2 < suba[j]) tmp2 = suba[j]; *_subo = tmp2; } if (path_len == 0) { path[0].i = start_i; path[0].j = start_j; path[1].i = end_i; path[1].j = end_j; goto end_func; } score_r += of_base; score_r -= qr; #ifdef DEBUG /* this seems not a bug */ if (score_f != score_r) fprintf(stderr, "[aln_local_core] unknown flaw occurs: score_f(%d) != score_r(%d)\n", score_f, score_r); #endif if (_thres > 0) { /* call global alignment to fill the path */ score_g = 0; j = (end_i - start_i > end_j - start_j)? end_i - start_i : end_j - start_j; ++j; /* j is the maximum band_width */ for (i = ap->band_width;; i <<= 1) { AlnParam ap_real = *ap; ap_real.gap_end = -1; ap_real.band_width = i; score_g = aln_global_core(seq1 + start_i, end_i - start_i + 1, seq2 + start_j, end_j - start_j + 1, &ap_real, path, path_len); if (score_g == score_r || score_f == score_g) break; if (i > j) break; } if (score_r > score_g && score_f > score_g) { fprintf(stderr, "[aln_local_core] Potential bug: (%d,%d) > %d\n", score_f, score_r, score_g); score_f = score_r = -1; } else score_f = score_g; /* convert coordinate */ for (p = path + *path_len - 1; p >= path; --p) { p->i += start_i - 1; p->j += start_j - 1; } } else { /* just store the start and end */ *path_len = 2; path[1].i = start_i; path[1].j = start_j; path->i = end_i; path->j = end_j; } end_func: /* free */ free(eh); free(suba); /* Suppress -Wfree-nonheap-object locally: the ++s_array[i] below * UNDOES the earlier --s_array[i] at line ~575 (done so the DP * code could use 1-based indexing), so after the increment * s_array[i] points at the original malloc() return. GCC 13+ sees * the explicit pointer arithmetic next to free() and warns even * though the math is a round-trip; the runtime behavior is * correct. Refactoring to avoid the offset trick would touch the * entire aln_local_core DP body, which isn't worth it for a * vendored legacy file. */ #if defined(__GNUC__) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wfree-nonheap-object" #endif for (i = 0; i != N_MATRIX_ROW; ++i) { ++s_array[i]; free(s_array[i]); } #if defined(__GNUC__) # pragma GCC diagnostic pop #endif free(s_array); return score_f; } AlnAln *aln_stdaln_aux(const char *seq1, const char *seq2, const AlnParam *ap, int type, int thres, int len1, int len2) { unsigned char *seq11, *seq22; int score; int i, j, l; path_t *p; char *out1, *out2, *outm; AlnAln *aa; if (len1 < 0) len1 = strlen(seq1); if (len2 < 0) len2 = strlen(seq2); aa = aln_init_AlnAln(); seq11 = (unsigned char*)malloc(sizeof(unsigned char) * len1); seq22 = (unsigned char*)malloc(sizeof(unsigned char) * len2); aa->path = (path_t*)malloc(sizeof(path_t) * (len1 + len2 + 1)); if (ap->row < 10) { /* 4-nucleotide alignment */ for (i = 0; i < len1; ++i) seq11[i] = aln_nt4_table[(int)seq1[i]]; for (j = 0; j < len2; ++j) seq22[j] = aln_nt4_table[(int)seq2[j]]; } else if (ap->row < 20) { /* 16-nucleotide alignment */ for (i = 0; i < len1; ++i) seq11[i] = aln_nt16_table[(int)seq1[i]]; for (j = 0; j < len2; ++j) seq22[j] = aln_nt16_table[(int)seq2[j]]; } else { /* amino acids */ for (i = 0; i < len1; ++i) seq11[i] = aln_aa_table[(int)seq1[i]]; for (j = 0; j < len2; ++j) seq22[j] = aln_aa_table[(int)seq2[j]]; } if (type == ALN_TYPE_GLOBAL) score = aln_global_core(seq11, len1, seq22, len2, ap, aa->path, &aa->path_len); else if (type == ALN_TYPE_LOCAL) score = aln_local_core(seq11, len1, seq22, len2, ap, aa->path, &aa->path_len, thres, &aa->subo); else if (type == ALN_TYPE_EXTEND) score = aln_extend_core(seq11, len1, seq22, len2, ap, aa->path, &aa->path_len, 1, 0); else { free(seq11); free(seq22); free(aa->path); aln_free_AlnAln(aa); return 0; } aa->score = score; if (thres > 0) { out1 = aa->out1 = (char*)malloc(sizeof(char) * (aa->path_len + 1)); out2 = aa->out2 = (char*)malloc(sizeof(char) * (aa->path_len + 1)); outm = aa->outm = (char*)malloc(sizeof(char) * (aa->path_len + 1)); --seq1; --seq2; --seq11; --seq22; p = aa->path + aa->path_len - 1; for (l = 0; p >= aa->path; --p, ++l) { switch (p->ctype) { case FROM_M: out1[l] = seq1[p->i]; out2[l] = seq2[p->j]; outm[l] = (seq11[p->i] == seq22[p->j] && seq11[p->i] != ap->row)? '|' : ' '; break; case FROM_I: out1[l] = '-'; out2[l] = seq2[p->j]; outm[l] = ' '; break; case FROM_D: out1[l] = seq1[p->i]; out2[l] = '-'; outm[l] = ' '; break; } } out1[l] = out2[l] = outm[l] = '\0'; ++seq11; ++seq22; } free(seq11); free(seq22); p = aa->path + aa->path_len - 1; aa->start1 = p->i? p->i : 1; aa->end1 = aa->path->i; aa->start2 = p->j? p->j : 1; aa->end2 = aa->path->j; aa->cigar32 = aln_path2cigar32(aa->path, aa->path_len, &aa->n_cigar); return aa; } AlnAln *aln_stdaln(const char *seq1, const char *seq2, const AlnParam *ap, int type, int thres) { return aln_stdaln_aux(seq1, seq2, ap, type, thres, -1, -1); } /* for backward compatibility */ uint16_t *aln_path2cigar(const path_t *path, int path_len, int *n_cigar) { uint32_t *cigar32; uint16_t *cigar; int i; cigar32 = aln_path2cigar32(path, path_len, n_cigar); cigar = (uint16_t*)cigar32; for (i = 0; i < *n_cigar; ++i) cigar[i] = (cigar32[i]&0xf)<<14 | (cigar32[i]>>4&0x3fff); return cigar; } /* newly added functions (2009-07-21) */ int aln_extend_core(unsigned char *seq1, int len1, unsigned char *seq2, int len2, const AlnParam *ap, path_t *path, int *path_len, int G0, uint8_t *_mem) { int q, r, qr, tmp_len; int32_t **s_array, *score_array; int is_overflow, of_base; uint32_t *eh; int i, j, end_i, end_j; int score, start, end; int *score_matrix, N_MATRIX_ROW; uint8_t *mem, *_p; /* initialize some align-related parameters. just for compatibility */ q = ap->gap_open; r = ap->gap_ext; qr = q + r; score_matrix = ap->matrix; N_MATRIX_ROW = ap->row; if (len1 == 0 || len2 == 0) return -1; /* allocate memory */ mem = _mem? _mem : calloc((len1 + 2) * (N_MATRIX_ROW + 1), 4); _p = mem; eh = (uint32_t*)_p, _p += 4 * (len1 + 2); s_array = calloc(N_MATRIX_ROW, sizeof(void*)); for (i = 0; i != N_MATRIX_ROW; ++i) s_array[i] = (int32_t*)_p, _p += 4 * len1; /* initialization */ aln_init_score_array(seq1, len1, N_MATRIX_ROW, score_matrix, s_array); tmp_len = len1 + 1; start = 1; end = 2; end_i = end_j = 0; score = 0; is_overflow = of_base = 0; /* convert the coordinate */ --seq1; --seq2; for (i = 0; i != N_MATRIX_ROW; ++i) --s_array[i]; /* dynamic programming */ memset(eh, 0, 4 * (len1 + 2)); eh[1] = (uint32_t)G0<<16; for (j = 1; j <= len2; ++j) { int _start, _end; int h1 = 0, f = 0; score_array = s_array[seq2[j]]; /* set start and end */ _start = j - ap->band_width; if (_start < 1) _start = 1; if (_start > start) start = _start; _end = j + ap->band_width; if (_end > len1 + 1) _end = len1 + 1; if (_end < end) end = _end; if (start == end) break; /* adjust eh[] array if overflow occurs. */ if (is_overflow) { int tmp, tmp2; score -= LOCAL_OVERFLOW_REDUCE; of_base += LOCAL_OVERFLOW_REDUCE; is_overflow = 0; for (i = start; i <= end; ++i) { uint32_t *s = &eh[i]; tmp = *s >> 16; tmp2 = *s & 0xffff; if (tmp2 < LOCAL_OVERFLOW_REDUCE) tmp2 = 0; else tmp2 -= LOCAL_OVERFLOW_REDUCE; if (tmp < LOCAL_OVERFLOW_REDUCE) tmp = 0; else tmp -= LOCAL_OVERFLOW_REDUCE; *s = (tmp << 16) | tmp2; } } _start = _end = 0; /* the inner loop */ for (i = start; i < end; ++i) { /* At the beginning of each cycle: eh[i] -> h[j-1,i-1]<<16 | e[j,i] f -> f[j,i] h1 -> h[j,i-1] */ uint32_t *s = &eh[i]; int h = (int)(*s >> 16); int e = *s & 0xffff; /* this is e[j,i] */ *s = (uint32_t)h1 << 16; /* eh[i] now stores h[j,i-1]<<16 */ h += h? score_array[i] : 0; /* this is left_core() specific */ /* calculate h[j,i]; don't need to test 0, as {e,f}>=0 */ h = h > e? h : e; h = h > f? h : f; /* h now is h[j,i] */ h1 = h; if (h > 0) { if (_start == 0) _start = i; _end = i; if (score < h) { score = h; end_i = i; end_j = j; if (score > LOCAL_OVERFLOW_THRESHOLD) is_overflow = 1; } } /* calculate e[j+1,i] and f[j,i+1] */ h -= qr; h = h > 0? h : 0; e -= r; e = e > h? e : h; f -= r; f = f > h? f : h; *s |= e; } eh[end] = h1 << 16; /* recalculate start and end, the boundaries of the band */ if (_end <= 0) break; /* no cell in this row has a positive score */ start = _start; end = _end + 3; } score += of_base - 1; if (score <= 0) { if (path_len) *path_len = 0; goto end_left_func; } if (path == 0) goto end_left_func; if (path_len == 0) { path[0].i = end_i; path[0].j = end_j; goto end_left_func; } { /* call global alignment to fill the path */ int score_g = 0; j = (end_i - 1 > end_j - 1)? end_i - 1 : end_j - 1; ++j; /* j is the maximum band_width */ for (i = ap->band_width;; i <<= 1) { AlnParam ap_real = *ap; ap_real.gap_end = -1; ap_real.band_width = i; score_g = aln_global_core(seq1 + 1, end_i, seq2 + 1, end_j, &ap_real, path, path_len); if (score == score_g) break; if (i > j) break; } if (score > score_g) fprintf(stderr, "[aln_left_core] no suitable bandwidth: %d < %d\n", score_g, score); score = score_g; } end_left_func: /* free */ free(s_array); if (!_mem) free(mem); return score; } uint32_t *aln_path2cigar32(const path_t *path, int path_len, int *n_cigar) { int i, n; uint32_t *cigar; unsigned char last_type; if (path_len == 0 || path == 0) { *n_cigar = 0; return 0; } last_type = path->ctype; for (i = n = 1; i < path_len; ++i) { if (last_type != path[i].ctype) ++n; last_type = path[i].ctype; } *n_cigar = n; cigar = (uint32_t*)malloc(*n_cigar * 4); cigar[0] = 1u << 4 | path[path_len-1].ctype; last_type = path[path_len-1].ctype; for (i = path_len - 2, n = 0; i >= 0; --i) { if (path[i].ctype == last_type) cigar[n] += 1u << 4; else { cigar[++n] = 1u << 4 | path[i].ctype; last_type = path[i].ctype; } } return cigar; } #ifdef STDALN_MAIN int main() { AlnAln *aln_local, *aln_global, *aln_left; int i; aln_local = aln_stdaln("CGTGCGATGCactgCATACGGCTCGCCTAGATCA", "AAGGGATGCTCTGCATCgCTCGGCTAGCTGT", &aln_param_blast, 0, 1); aln_global = aln_stdaln("CGTGCGATGCactgCATACGGCTCGCCTAGATCA", "AAGGGATGCTCTGCATCGgCTCGGCTAGCTGT", &aln_param_blast, 1, 1); // aln_left = aln_stdaln( "GATGCACTGCATACGGCTCGCCTAGATCA", "GATGCTCTGCATCGgCTCGGCTAGCTGT", &aln_param_blast, 2, 1); aln_left = aln_stdaln("CACCTTCGACTCACGTCTCATTCTCGGAGTCGAGTGGACGGTCCCTCATACACGAACAGGTTC", "CACCTTCGACTTTCACCTCTCATTCTCGGACTCGAGTGGACGGTCCCTCATCCAAGAACAGGGTCTGTGAAA", &aln_param_blast, 2, 1); printf(">%d,%d\t%d,%d\n", aln_local->start1, aln_local->end1, aln_local->start2, aln_local->end2); printf("%s\n%s\n%s\n", aln_local->out1, aln_local->outm, aln_local->out2); printf(">%d,%d\t%d,%d\t", aln_global->start1, aln_global->end1, aln_global->start2, aln_global->end2); for (i = 0; i != aln_global->n_cigar; ++i) printf("%d%c", aln_global->cigar32[i]>>4, "MID"[aln_global->cigar32[i]&0xf]); printf("\n%s\n%s\n%s\n", aln_global->out1, aln_global->outm, aln_global->out2); printf(">%d\t%d,%d\t%d,%d\t", aln_left->score, aln_left->start1, aln_left->end1, aln_left->start2, aln_left->end2); for (i = 0; i != aln_left->n_cigar; ++i) printf("%d%c", aln_left->cigar32[i]>>4, "MID"[aln_left->cigar32[i]&0xf]); printf("\n%s\n%s\n%s\n", aln_left->out1, aln_left->outm, aln_left->out2); aln_free_AlnAln(aln_local); aln_free_AlnAln(aln_global); aln_free_AlnAln(aln_left); return 0; } #endif ================================================ FILE: src/SGA/Util/stdaln.h ================================================ /* The MIT License Copyright (c) 2003-2006, 2008, by Heng Li Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* 2009-07-23, 0.10.0 - Use 32-bit to store CIGAR - Report suboptimal aligments - Implemented half-fixed-half-open DP 2009-04-26, 0.9.10 - Allow to set a threshold for local alignment 2009-02-18, 0.9.9 - Fixed a bug when no residue matches 2008-08-04, 0.9.8 - Fixed the wrong declaration of aln_stdaln_aux() - Avoid 0 coordinate for global alignment 2008-08-01, 0.9.7 - Change gap_end penalty to 5 in aln_param_bwa - Add function to convert path_t to the CIGAR format 2008-08-01, 0.9.6 - The first gap now costs (gap_open+gap_ext), instead of gap_open. Scoring systems are modified accordingly. - Gap end is now correctly handled. Previously it is not correct. - Change license to MIT. */ #ifndef LH3_STDALN_H_ #define LH3_STDALN_H_ #define STDALN_VERSION 0.11.0 #include #define FROM_M 0 #define FROM_I 1 #define FROM_D 2 #define FROM_S 3 #define ALN_TYPE_LOCAL 0 #define ALN_TYPE_GLOBAL 1 #define ALN_TYPE_EXTEND 2 /* This is the smallest integer. It might be CPU-dependent in very RARE cases. */ #define MINOR_INF -1073741823 typedef struct { int gap_open; int gap_ext; int gap_end; int *matrix; int row; int band_width; } AlnParam; typedef struct { int i, j; unsigned char ctype; } path_t; typedef struct { path_t *path; /* for advanced users... :-) */ int path_len; /* for advanced users... :-) */ int start1, end1; /* start and end of the first sequence, coordinations are 1-based */ int start2, end2; /* start and end of the second sequence, coordinations are 1-based */ int score, subo; /* score */ char *out1, *out2; /* print them, and then you will know */ char *outm; int n_cigar; uint32_t *cigar32; } AlnAln; #ifdef __cplusplus extern "C" { #endif AlnAln *aln_stdaln_aux(const char *seq1, const char *seq2, const AlnParam *ap, int type, int do_align, int len1, int len2); AlnAln *aln_stdaln(const char *seq1, const char *seq2, const AlnParam *ap, int type, int do_align); void aln_free_AlnAln(AlnAln *aa); int aln_global_core(unsigned char *seq1, int len1, unsigned char *seq2, int len2, const AlnParam *ap, path_t *path, int *path_len); int aln_local_core(unsigned char *seq1, int len1, unsigned char *seq2, int len2, const AlnParam *ap, path_t *path, int *path_len, int _thres, int *_subo); int aln_extend_core(unsigned char *seq1, int len1, unsigned char *seq2, int len2, const AlnParam *ap, path_t *path, int *path_len, int G0, uint8_t *_mem); uint16_t *aln_path2cigar(const path_t *path, int path_len, int *n_cigar); uint32_t *aln_path2cigar32(const path_t *path, int path_len, int *n_cigar); #ifdef __cplusplus } #endif /******************** * global variables * ********************/ extern AlnParam aln_param_bwa; /* = { 37, 9, 0, aln_sm_maq, 5, 50 }; */ extern AlnParam aln_param_blast; /* = { 5, 2, 2, aln_sm_blast, 5, 50 }; */ extern AlnParam aln_param_nt2nt; /* = { 10, 2, 2, aln_sm_nt, 16, 75 }; */ extern AlnParam aln_param_aa2aa; /* = { 20, 19, 19, aln_sm_read, 16, 75 }; */ extern AlnParam aln_param_rd2rd; /* = { 12, 2, 2, aln_sm_blosum62, 22, 50 }; */ /* common nucleotide score matrix for 16 bases */ extern int aln_sm_nt[], aln_sm_bwa[]; /* BLOSUM62 and BLOSUM45 */ extern int aln_sm_blosum62[], aln_sm_blosum45[]; /* common read for 16 bases. note that read alignment is quite different from common nucleotide alignment */ extern int aln_sm_read[]; /* human-mouse score matrix for 4 bases */ extern int aln_sm_hs[]; #endif ================================================ FILE: src/svaba/AlignedContig.cpp ================================================ #include "AlignedContig.h" #include "SvabaUtils.h" #include "ContigAlignmentScore.h" #include #include #include #include // SvABA2.0: the old ASCII emitter (printToAlignmentsFile → alignments.txt.gz) // and its support header PlottedRead.h have been removed. All alignment-dump // data now goes through the structured r2c TSV (printToR2CTsv / // r2cTsvHeader), which viewers parse and re-plot on demand. // bav is all of the alignments of the contig to the reference AlignedContig::AlignedContig(BamRecordPtrVector& bav, const GenomicRegion& region, const SvabaSharedConfig* sc_) : sc(sc_) { if (!bav.size()) return; // find the longest sequence, taking the first one. // make sure sequence dir is set to same as first alignment for (const auto& i : bav) { if (i->Sequence().length() > m_seq.length()) { if (i->ReverseFlag() == bav.front()->ReverseFlag()) { m_seq = i->Sequence(); } else { m_seq = i->Sequence(); SeqLib::rcomplement(m_seq); } } } // set the sequence. Convention is store as it came off // the assembler for first alignment if (bav.front()->ReverseFlag()) SeqLib::rcomplement(m_seq); // instantiate coverage of reads on the contig aligned_coverage = std::vector(m_seq.length(), 0); // find the number of primary alignments size_t num_align = 0; for (const auto& i : bav) if (!i->SecondaryFlag()) ++num_align; // make the individual alignments and add for (auto& i : bav) { bool flip = (m_seq != i->Sequence()); // if the seq was flipped, need to flip the AlignmentFragment if (!i->SecondaryFlag()) { m_frag_v.emplace_back(AlignmentFragment(i, flip, region, sc)); m_frag_v.back().num_align = num_align; } else if (m_frag_v.size()) { m_frag_v.back().secondaries.emplace_back(AlignmentFragment(i, flip, region, sc)); } else { throw std::runtime_error("Secondary alignment encountered with no primary."); } // set the sequence for the aligned contig in the flipped (or not) orientation //m_frag_v.back().m_seq = m_seq; // set the aligned coverage SeqLib::Cigar cig = i->GetCigar(); size_t p = 0; if (!i->SecondaryFlag()) for (auto& c : cig) { for (size_t j = 0; j < c.Length(); ++j) { if (c.Type() == 'M' || c.Type() == 'I') // consumes contig and not clip ++aligned_coverage[p]; if (c.ConsumesQuery() || c.Type() == 'H') // consumes contig, move iterator ++p; } } } if (!m_frag_v.size()) throw std::runtime_error("AlignedContig - no AlignmentFragments made"); // extract the indels on primary alignments for (auto& f : m_frag_v) f.SetIndels(); // sort fragments by order on fwd-strand contig // underneath this calls AlignmentFragment::operator< // which is defined based on the "flip-convention" // alignment position on the contig, NOT on the genome std::sort(m_frag_v.begin(), m_frag_v.end()); // get rearrangement breaks out of it setMultiMapBreakPairs(); // filter indels that land too close to a multi-map break //filterIndelsAtMultiMapSites(5); } // void AlignedContig::filterIndelsAtMultiMapSites(size_t buff) { // if (m_frag_v.size() < 2) // return; // // make the ranges ON CONIG for the multimaps // SeqLib::GRC grc; // if (m_global_bp->b1.cpos > m_global_bp->b2.cpos) { // grc.add(SeqLib::GenomicRegion(0, m_global_bp->b2.cpos-buff, m_global_bp->b1.cpos+buff)); // homology // } // else { // grc.add(SeqLib::GenomicRegion(0, m_global_bp->b1.cpos-buff, m_global_bp->b2.cpos+buff)); // insertion // } // for (auto& i : m_local_breaks) { // if (i.b1.cpos > i.b2.cpos) { // grc.add(SeqLib::GenomicRegion(0, i.b2.cpos-buff, i.b1.cpos+buff)); // homology // } // else { // grc.add(SeqLib::GenomicRegion(0, i.b1.cpos-buff, i.b2.cpos+buff)); // insertion // } // } // grc.CreateTreeMap(); // // check if // for (auto& i : m_frag_v) { // BPVec new_indel_vec; // for (auto& b : i.m_indel_breaks) { // if (!grc.CountOverlaps(SeqLib::GenomicRegion(0, b.b1.cpos, b.b2.cpos))) // new_indel_vec.push_back(b); // } // i.m_indel_breaks = new_indel_vec; // } // } SeqLib::GenomicRegionVector AlignedContig::getAsGenomicRegionVector() const { SeqLib::GenomicRegionVector g; for (auto& i : m_frag_v) g.push_back(i.m_align->AsGenomicRegion()); return g; } // void AlignedContig::printContigFasta(std::ofstream& os) const { // os << ">" << getContigName() << std::endl; // os << getSequence() << std::endl; // } void AlignedContig::blacklist(SeqLib::GRC &grv) { // loop through the indel breaks and blacklist for (auto& i : m_frag_v) for (auto& j : i.m_indel_breaks) j->checkBlacklist(grv); } void AlignedContig::splitCoverage() { // for (auto& i : m_local_breaks_secondaries) // i.splitCoverage(m_bamreads); // for (auto& i : m_global_bp_secondaries) // i->splitCoverage(m_bamreads); for (auto& i : m_frag_v) for (auto& j : i.m_indel_breaks) j->splitCoverage(m_bamreads); for (auto& i : m_local_breaks) i->splitCoverage(m_bamreads); if (m_global_bp) m_global_bp->splitCoverage(m_bamreads); } // --------------------------------------------------------------------------- // SvABA2.0: structured re-plot format. // // printToR2CTsv emits this contig's info in a tab-separated form that // downstream tools (e.g. viewer/bps_explorer.html) parse and re-plot on // demand. It's the successor to the old printToAlignmentsFile() / // alignments.txt.gz pre-rendered ASCII output, which has been removed. // // The schema is record-type discriminated: one "contig" row per contig, // then one "read" row per r2c-aligned read, all sharing a `contig_name` // key. Contig-only fields (sequence, fragments, BPs, read count) are // populated on the contig row and "NA" on read rows; read-only fields // are populated on read rows and "NA" on the contig row. // // Anything that was encoded only implicitly in the old ASCII art (e.g. // fragment orientation via '>' vs '<', or leading/trailing soft-clip // bases via lowercase letters) is here available as an explicit field // so viewers don't have to reverse-engineer it. // --------------------------------------------------------------------------- namespace { // TSV-escape: replace tab/CR/LF with spaces so a single column value can't // break row parsing. Used everywhere we emit free-form text into a cell. std::string r2cEscape(const std::string& s) { std::string out; out.reserve(s.size()); for (char c : s) { if (c == '\t' || c == '\n' || c == '\r') out.push_back(' '); else out.push_back(c); } return out; } // Serialize a SeqLib::Cigar to the standard string form (e.g. "30M1D15M") // without relying on the overload of operator<< (which is fine but writes // through a stream; we want a plain std::string for cell composition). std::string r2cCigarString(const SeqLib::Cigar& c) { std::ostringstream oss; for (auto it = c.begin(); it != c.end(); ++it) oss << it->Length() << static_cast(it->Type()); return oss.str(); } } // namespace // Header line for the r2c TSV. Callers should write this once before any // rows. Not a row itself — do not prefix with a comment char. std::string AlignedContig::r2cTsvHeader() { static const char* const kCols[] = { "record_type", // "contig" or "read" "contig_name", // shared key: group reads back to their contig "contig_len", // set on both row types for convenience "contig_seq", // assembled sequence [contig only; NA on read] "frags", // BWA hits of contig vs. ref [contig only] "bps", // breakpoints on this contig [contig only] "n_reads", // # read rows that follow this contig [contig only] // read-only: "read_id", // svabaRead UniqueName (sample-prefixed qname) "read_chrom", // chromosome the read originally mapped to (BAM) "read_pos", // BAM alignment position "read_flag", // 0 if r2c forward, 16 if reverse-complemented "r2c_cigar", // read-to-contig CIGAR (e.g. "24M1D15M7I1M7D103M") "r2c_start", // start_on_contig (0-based) "r2c_rc", // 0/1: was r2c alignment reverse-complemented? "r2c_nm", // NM (mismatch count) from r2c alignment "support", // "split" | "disc" | "both" | "none" (categorical) // SvABA2.0: unambiguous per-BP support lists. The categorical // `support` above is the OR over these — use these columns when // you need to know *which* BP(s) a read supports on this contig. // Both are comma-joined lists of bp_id; "NA" if no match. "split_bps", // bp_ids where this read is a split-supporter "disc_bps", // bp_ids where this read (or its mate) is in a // discordant cluster associated with the BP "r2c_score", // alignment score under r2c CIGAR "native_score", // alignment score under BAM CIGAR (or corrected) "read_seq" // raw read sequence (pre-rc, pre-gap-expand) }; std::ostringstream oss; for (size_t i = 0; i < sizeof(kCols) / sizeof(kCols[0]); ++i) { if (i) oss << '\t'; oss << kCols[i]; } return oss.str(); } std::string AlignedContig::printToR2CTsv(const SeqLib::BamHeader& h) const { std::ostringstream out; const std::string cname = this->getContigName(); const std::string NA = "NA"; // --- per-contig fields ------------------------------------------------ // frags: "|"-separated; within a frag, ":"-separated: // chr:pos:strand:cigar:mapq:cpos_break1:cpos_break2:gpos_break1:gpos_break2:flipped std::string frags; for (size_t i = 0; i < m_frag_v.size(); ++i) { const auto& frag = m_frag_v[i]; const auto& a = frag.m_align; if (!a) continue; if (!frags.empty()) frags.push_back('|'); frags += r2cEscape(a->ChrName(sc->header)); frags += ':'; frags += std::to_string(a->Position()); frags += ':'; frags += (a->ReverseFlag() ? '-' : '+'); frags += ':'; frags += r2cEscape(a->CigarString()); frags += ':'; frags += std::to_string(a->MapQuality()); frags += ':'; frags += std::to_string(frag.break1); frags += ':'; frags += std::to_string(frag.break2); frags += ':'; frags += std::to_string(frag.gbreak1); frags += ':'; frags += std::to_string(frag.gbreak2); frags += ':'; frags += (frag.flipped ? '1' : '0'); } if (frags.empty()) frags = NA; // bps: "|"-separated; within a bp, ":"-separated (10 fields): // kind:bp_id:chr1:pos1:strand1:chr2:pos2:strand2:span:insertion // kind ∈ {global, multi, indel}. bp_id is the unique BP identifier // assigned by svabaThreadUnit::next_bp_id() ("." if unset — should // not happen in normal runs). insertion is "." if none. All fields // fixed-position so the field count stays at 10 regardless of row. auto bpCell = [&](const char* kind, const BreakPoint& bp) -> std::string { std::ostringstream os; os << kind << ':' << (bp.id.empty() ? std::string(".") : r2cEscape(bp.id)) << ':' << r2cEscape(bp.b1.gr.ChrName(h)) << ':' << bp.b1.gr.pos1 << ':' << (bp.b1.gr.strand ? bp.b1.gr.strand : '.') << ':' << r2cEscape(bp.b2.gr.ChrName(h)) << ':' << bp.b2.gr.pos1 << ':' << (bp.b2.gr.strand ? bp.b2.gr.strand : '.') << ':' << bp.getSpan() << ':' << (bp.insertion.empty() ? std::string(".") : r2cEscape(bp.insertion)); return os.str(); }; std::string bps; auto appendBp = [&](const std::string& cell) { if (!bps.empty()) bps.push_back('|'); bps += cell; }; if (m_global_bp) appendBp(bpCell("global", *m_global_bp)); for (const auto& b : m_local_breaks) if (b) appendBp(bpCell("multi", *b)); for (const auto& frag : m_frag_v) for (const auto& b : frag.m_indel_breaks) if (b) appendBp(bpCell("indel", *b)); if (bps.empty()) bps = NA; const size_t n_reads = m_bamreads.size(); // --- contig row ------------------------------------------------------- // // Fields in order (21 total, mirroring r2cTsvHeader): // record_type contig_name contig_len contig_seq frags bps n_reads // read_id read_chrom read_pos read_flag r2c_cigar r2c_start r2c_rc // r2c_nm support split_bps disc_bps r2c_score native_score read_seq // On the contig row, all read-specific fields are NA. out << "contig\t" << r2cEscape(cname) << '\t' << m_seq.length() << '\t' << r2cEscape(m_seq) << '\t' << frags << '\t' << bps << '\t' << n_reads << '\t' // read-only columns, 14 of them: << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\t' << NA << '\n'; // --- per-BP support tracking ----------------------------------------- // // Replaces the older flat split_supporters / disc_supporters sets. // For each BP on this contig we collect: // - bp_id: the unique identifier (may be "." if unset — shouldn't // happen in a normal svaba run, but we don't block emission on it) // - split_reads: UniqueNames credited as split-supporters for this // specific BP by BreakPoint::splitCoverage // - disc_reads: UniqueNames (of reads or mates) appearing in this // BP's own DiscordantCluster (populated by // CombineWithDiscordantClusterMap). Note the scope is per-BP, not // per-contig — a contig can have multiple BPs, and a discordant // cluster may be attributed to only some of them. // // Per-read output then walks this vector and concatenates the bp_ids // this read shows up under into `split_bps` / `disc_bps`. A read // supporting two different BPs on the same contig (e.g. a multi-map // contig with a global + a local BP) will show both ids, comma- // joined, instead of the previous unambiguous "split" tag that hid // which BP it actually supported. struct BpSupportEntry { std::string bp_id; std::unordered_set split_reads; std::unordered_set disc_reads; }; std::vector per_bp_support; per_bp_support.reserve(8); for (const auto& bp : getAllBreakPoints()) { if (!bp) continue; BpSupportEntry e; e.bp_id = bp->id.empty() ? std::string(".") : bp->id; for (const auto& un : bp->getAllSupportingReads()) e.split_reads.insert(un); for (const auto& kv : bp->dc.reads) e.disc_reads.insert(kv.first); for (const auto& kv : bp->dc.mates) e.disc_reads.insert(kv.first); per_bp_support.push_back(std::move(e)); } auto fmt_score = [](double s) { std::ostringstream os; os << std::fixed << std::setprecision(1) << s; return os.str(); }; // --- read rows -------------------------------------------------------- for (const auto& i : m_bamreads) { const std::string sr = i->UniqueName(); const r2c this_r2c = i->GetR2C(getContigName()); // r2c CIGAR: empty if no r2c alignment (shouldn't happen for reads // listed here, but guard anyway). std::string r2c_cig_str = r2cCigarString(this_r2c.cig); if (r2c_cig_str.empty()) r2c_cig_str = NA; // Scores: same source-of-truth precedence BreakPoint::splitCoverage // uses for its "r2c better than native" gate — we reproduce it here // so the TSV lets you diagnose split-coverage decisions by field // inspection alone. std::string r2c_score_str = NA; if (this_r2c.cig.size() > 0) { r2c_score_str = fmt_score( svaba::readAlignmentScore(this_r2c.cig, this_r2c.nm)); } std::string native_score_str = NA; { SeqLib::Cigar native_cig; int32_t native_nm = -1; if (i->corrected_native_cig.size() > 0) { native_cig = i->corrected_native_cig; native_nm = i->corrected_native_nm; } else { native_cig = i->GetCigar(); i->GetIntTag("NM", native_nm); } if (native_cig.size() > 0) { native_score_str = fmt_score( svaba::readAlignmentScore(native_cig, native_nm)); } } // Build the per-BP support lists for this specific read. Comma- // joined bp_ids, "NA" if this read doesn't support any BP in that // category on this contig. The categorical `support` is derived // from whether either list is non-empty, so the new columns are // a strict superset of the old info — downstream code keying on // `support == "split"` still works. std::string split_bps_str; std::string disc_bps_str; bool any_split = false, any_disc = false; for (const auto& e : per_bp_support) { if (e.split_reads.count(sr)) { if (!split_bps_str.empty()) split_bps_str.push_back(','); split_bps_str += e.bp_id; any_split = true; } if (e.disc_reads.count(sr)) { if (!disc_bps_str.empty()) disc_bps_str.push_back(','); disc_bps_str += e.bp_id; any_disc = true; } } if (split_bps_str.empty()) split_bps_str = NA; if (disc_bps_str.empty()) disc_bps_str = NA; const char* support_kind = any_split && any_disc ? "both" : any_split ? "split" : any_disc ? "disc" : "none"; // read_chrom: BAM-native chromosome; may be empty for unmapped mates. std::string read_chrom = (i->ChrID() >= 0) ? i->ChrName(h) : std::string("*"); out << "read\t" << r2cEscape(cname) << '\t' << m_seq.length() << '\t' << NA << '\t' // contig_seq << NA << '\t' // frags << NA << '\t' // bps << NA << '\t' // n_reads // read fields: << r2cEscape(sr) << '\t' << r2cEscape(read_chrom) << '\t' << i->Position() << '\t' << (this_r2c.rc ? 16 : 0) << '\t' << r2c_cig_str << '\t' << this_r2c.start_on_contig << '\t' << (this_r2c.rc ? 1 : 0) << '\t' << this_r2c.nm << '\t' << support_kind << '\t' << split_bps_str << '\t' << disc_bps_str << '\t' << r2c_score_str << '\t' << native_score_str << '\t' << r2cEscape(i->Sequence()) << '\n'; } return out.str(); } void AlignedContig::setMultiMapBreakPairs() { // if single mapped contig, nothing to do here if (m_frag_v.size() == 1) return; // walk along the ordered contig list and make the breakpoint pairs // these are the so called "local" breakpoints, meaning they are // AB rearrangemnts without an intervening sequence // so this loop will do AB, BC, CD, etc for (AlignmentFragmentVector::const_iterator it = m_frag_v.begin(); it != m_frag_v.end() - 1; it++) { AlignmentFragmentVector bwa_hits_1, bwa_hits_2; // first add the primary alignments bwa_hits_1.push_back(*it); bwa_hits_2.push_back(*(it+1)); // then the secondaries // bwa_hits_1.insert(bwa_hits_1.end(), // it->secondaries.begin(), // it->secondaries.end()); // bwa_hits_2.insert(bwa_hits_2.end(), // (it+1)->secondaries.begin(), // (it+1)->secondaries.end()); // make all of the local breakpoints // OK so if we turn off secondary alignments, this will // just be one iteration through each loop (A and B) // but that's OK for (auto& a : bwa_hits_1) { for (auto& b : bwa_hits_2) { // initialize the breakpoint BreakPointPtr bp = std::make_shared(sc, &a, &b, this); // add the the vector of breakpoints m_local_breaks.push_back(bp); } } } // end frag iterator loop // if this is a double mapping, we are done if (m_frag_v.size() == 2) { return; } ////////////// // 3+ mappings ////////////// // go through alignments and find start and end that reach mapq // bstart and bend are indices of local alignments // that should contribute to a global // e.g. bstart = 0 = A int bstart = -1; //MAX_CONTIG_SIZE; // dummy value to be overwritten int bend = -1; // loop and find contigs with strong support for (size_t i = 0; i < m_frag_v.size(); i++) { if (m_frag_v[i].m_align->MapQuality() >= 50) { // first good alignment fragment, that's the start if (bstart < 0) bstart = i; bend = i; } } // if nothing good found, then just pick first and last (A-C or whatever) if (bstart == bend || bstart < 0) { bstart = 0; bend = m_frag_v.size() -1; } assert(bend <= m_frag_v.size() && bend > 0); assert(bstart <= m_frag_v.size()); assert(bstart >= 0); // if we had ABC but only AB or BC is good connection // then don't treat as complex if (bend - bstart == 1) { return; } ///// // there are 3+ quality mappings. Set a global break ///// // set some values in the breakpoint for this contig m_global_bp = std::make_shared(sc, &m_frag_v[bstart], &m_frag_v[bend ], this); m_global_bp->svtype = SVType::TSI_GLOBAL; // complex=true; // now, each local breakpoint is a TSI local not a simple rearrangement for (auto& i : m_local_breaks) { i->svtype = SVType::TSI_LOCAL; } } std::string AlignedContig::printDiscordantClusters(const SeqLib::BamHeader& h) const { std::stringstream out; if (m_dc.size() == 0) return "none"; for (const auto& d : m_dc) { out << d.print(h) << " "; } return out.str(); } // bool AlignedContig::checkLocal(const SeqLib::GenomicRegion& window) // { // bool has_loc = false; // for (auto& i : m_frag_v) // if (i.checkLocal(window)) // has_loc = true; // // check for all of the breakpoints of non-indels (already handling indels) // for (auto& i : m_local_breaks) // i.checkLocal(window); // // for (auto& i : m_global_bp_secondaries) // // i.checkLocal(window); // m_global_bp->checkLocal(window); // return has_loc; // } BreakPointPtrVector AlignedContig::getAllBreakPoints() const { BreakPointPtrVector out; // get the indel BreakPoints for (auto& i : m_frag_v) { out.insert(out.end(), i.m_indel_breaks.begin(), i.m_indel_breaks.end()); } // get the global breakpoint if (m_global_bp) //->isEmpty()) out.push_back(m_global_bp); // get the local breakpoints out.insert(out.end(), m_local_breaks.begin(), m_local_breaks.end()); return out; } // std::vector AlignedContig::getAllBreakPointsSecondary() const { // std::vector out; // for (auto& i : m_global_bp_secondaries) // if (!i.isEmpty()) // out.push_back(i); // return out; // } bool AlignedContig::hasVariant() const { if (m_global_bp) //!m_global_bp->isEmpty()) return true; if (m_local_breaks.size()) return true; // if (m_global_bp_secondaries.size()) // return true; // if (m_local_breaks_secondaries.size()) // return true; for (const auto& i : m_frag_v) for (const auto& j : i.m_indel_breaks) if (j->hasMinimal()) return true; return false; } // void AlignedContig::addDiscordantCluster(DiscordantClusterMap& dmap) // { // // loop through the breaks and compare with the map // for (auto& i : m_local_breaks) // i.__combine_with_discordant_cluster(dmap); // if (!m_global_bp->isEmpty()) // m_global_bp->__combine_with_discordant_cluster(dmap); // if (m_global_bp->hasDiscordant()) // m_dc.push_back(m_global_bp->dc); // for (auto& i : m_global_bp_secondaries) // i.__combine_with_discordant_cluster(dmap); // } // void AlignedContig::assessRepeats() { // for (auto& a : m_frag_v) // for (auto& i : a.m_indel_breaks) // i.repeatFilter(); // for (auto& b : m_local_breaks) // b.repeatFilter(); // for (auto& b : m_local_breaks_secondaries) // b.repeatFilter(); // for (auto& b : m_global_bp_secondaries) // b.repeatFilter(); // } // void AlignedContig::refilterComplex() { // if (m_global_bp && m_global_bp->num_align <= 2) // return; // // initialize split counts vec // std::vector scounts(m_local_breaks.size(), 0); // for (size_t i = 0; i < scounts.size() ; ++i) { // for (auto& j : m_local_breaks[i]->allele) // scounts[i] += j.second.split; // } // // every local BP needs to have 4+ split reads // // to be a quality TSI event // // if not, then forget the global / TSI altogether // for (auto& i : scounts) { // if (i < 4) { // m_global_bp = nullptr; // for (auto& i : m_local_breaks) // i->svtype = SVType::ASSMB; // return; // } // } // } std::string AlignedContig::getContigName() const { if (!m_frag_v.size()) return ""; return m_frag_v[0].m_align->Qname(); } int AlignedContig::getMaxMapq() const { int m = -1; for (auto& i : m_frag_v) if (i.m_align->MapQuality() > m) m = i.m_align->MapQuality(); return m; } int AlignedContig::getMinMapq() const { int m = 1000; for (auto& i : m_frag_v) if (i.m_align->MapQuality() < m) m = i.m_align->MapQuality(); return m; } // bool AlignedContig::hasLocal() const { // for (auto& i : m_frag_v) // if (i.local) // return true; // return false; // } // void AlignedContig::writeAlignedReadsToBAM(SeqLib::BamWriter& bw) { // for (const auto& i : m_bamreads) // bw.WriteRecord(*i); // } // void AlignedContig::writeToBAM(SeqLib::BamWriter& bw) const { // for (auto& i : m_frag_v) { // i.writeToBAM(bw); // } // } // std::string AlignedContig::getSequence() const { // assert(m_seq.length()); // return m_seq; // } void AlignedContig::AddAlignedRead(svabaReadPtr& br) { m_bamreads.push_back(br); } ================================================ FILE: src/svaba/AlignedContig.h ================================================ #pragma once #include #include "SeqLib/BWAAligner.h" #include "SeqLib/BamReader.h" #include "SeqLib/BamRecord.h" #include "SeqLib/BamWriter.h" #include "BreakPoint.h" #include "DiscordantCluster.h" #include "AlignmentFragment.h" #include "SvabaRead.h" /*! Contains the mapping of an aligned contig to the reference genome, * along with pointer to all of the reads aligned to this contig, and a * store of all of the breakpoints associated with this contig */ class AlignedContig { friend class AlignmentFragment; friend class BreakPoint; public: AlignedContig() = delete; // prevent default construction // make an AlignedContig from a set of contig alignments AlignedContig(BamRecordPtrVector& bav, const GenomicRegion& region, const SvabaSharedConfig* sc_); // Return as a genomic region vector SeqLib::GenomicRegionVector getAsGenomicRegionVector() const; bool checkLocal(const SeqLib::GenomicRegion& window); // apply repeat filter to each indel break //void assessRepeats(); // Loop through the vector of DiscordantCluster objects // associated with this contig and print std::string printDiscordantClusters(const BamHeader& h) const; // return the name of the contig std::string getContigName() const; // Debug accessors for compile-time trace (SvabaDebug.h) size_t getFragCount() const { return m_frag_v.size(); } bool hasGlobalBP() const { return m_global_bp != nullptr; } size_t getLocalBreakCount() const { return m_local_breaks.size(); } size_t getIndelBreakCount() const { size_t n = 0; for (const auto& f : m_frag_v) n += f.m_indel_breaks.size(); return n; } // Return the max mapping quality from all alignments int getMaxMapq() const; // Return the min mapping quality from all alignments int getMinMapq() const; // Loop through all of the breakpoints and // calculate the split read support for each. Requires // alignedReads to have been run first (will error if not run). void splitCoverage(); // Checks if any of the indel breaks are in a blacklist. If so, mark the // breakpoints of the indels for skipping. That is, hasMinmal() will return false; void blacklist(SeqLib::GRC& grv); // Dump the contigs to a fasta //void printContigFasta(std::ofstream &os) const; // Set the breakpoints on the reference by combining multi-mapped contigs void setMultiMapBreakPairs(); //! return the contig sequence as it came off the assembler //std::string getSequence() const; // SvABA2.0: emit this contig's info as a structured TSV that can be // re-plotted later, rather than pre-rendered into ASCII. One "contig" // row followed by one "read" row per r2c-aligned read. The companion // viewer is bps_explorer.html's r2c re-plot sub-panel. Rows share a // `contig_name` key so reads can be grouped back to their parent contig // without a sorted file. // // Replaced the old printToAlignmentsFile() / alignments.txt.gz output // entirely — same information content, just not pre-formatted. The // header line is emitted once per file by r2cTsvHeader(); for per-thread // streams, only the first worker (threadId == 1; workers are numbered // 1..N by threadpool.h) writes it — see svabaThreadUnit ctor. std::string printToR2CTsv(const SeqLib::BamHeader& h) const; // Column header for the r2c TSV; call once per file, before any rows. static std::string r2cTsvHeader(); // Return if this contig contains a potential variant (indel or multi-map) bool hasVariant() const; // Write all of the contig alignment records to a BAM file //void writeToBAM(SeqLib::BamWriter& bw) const; // Write all of the sequencing reads as aligned to contig to a BAM file //void writeAlignedReadsToBAM(SeqLib::BamWriter& bw); // Remove indels that map extremely close to rearrangement break points //void filterIndelsAtMultiMapSites(size_t buff); // returns whether any of the alignments are local to m_window //bool hasLocal() const; // Retrieves all of the breakpoints by combining indels with global mutli-map break BreakPointPtrVector getAllBreakPoints() const; //std::vector getAllBreakPointsSecondary() const; // void refilterComplex(); std::vector getAllBreakPointPointers() const ; void addDiscordantCluster(DiscordantClusterMap& dmap); std::pair getCoverageAtPosition(int pos) const; // add a new read aligned to this contig // this is a svabaRead (read to genome), but with an r2c in it void AddAlignedRead(svabaReadPtr& br); // return number of bam reads size_t NumBamReads() const { return m_bamreads.size(); } private: // int insertion_against_contig_read_count = 0; // int deletion_against_contig_read_count = 0; // store all of the reads aligned to contig // these are the same alignments as the BAM, but have an r2c as well svabaReadPtrVector m_bamreads; // coverage of each base in contig, whether it has alignment std::vector aligned_coverage; AlignmentFragmentVector m_frag_v; // store all of the individual alignment fragments std::vector m_local_breaks; // store all of the multi-map BreakPoints for this contigs //std::vector m_local_breaks_secondaries; // store all of the multi-map BreakPoints for this contigs BreakPointPtr m_global_bp; // store the single spanning BreakPoing for this contig e //size_t m_index_of_stored_seq = 0; // which alignment did mseq come from? //std::vector m_global_bp_secondaries; // store the single spanning BreakPoing for this contig e std::string m_seq; // sequence of contig as it came off of assembler std::vector m_dc; // collection of all discordant clusters that map to same location as this contig const SvabaSharedConfig* sc; }; typedef std::unordered_map ContigMap; typedef std::vector AlignedContigVec; ================================================ FILE: src/svaba/AlignmentFragment.cpp ================================================ #include "AlignmentFragment.h" #include "AlignedContig.h" #include "SvabaDebug.h" #define MIN_INDEL_MATCH_BRACKET 0 #define MAX_INDELS 10000 #define MAX_INDEL_PER_CONTIG 6 // write the alignment record to a BAM file // void AlignmentFragment::writeToBAM(SeqLib::BamWriter& bw) const { // bw.WriteRecord(*m_align); // } using SeqLib::CigarField; bool AlignmentFragment::operator<(const AlignmentFragment& str) const { return (start < str.start); } // bool AlignmentFragment::checkLocal() const { // assert(region_.pos1 >= 0); // // make a region for this frag // SeqLib::GenomicRegion gfrag(m_align->ChrID(), // m_align->Position(), // m_align->PositionEnd()); // if (region_.GetOverlap(gfrag)) { // return true; // } // return false; // } AlignmentFragment::AlignmentFragment(BamRecordPtr &talign, bool flip, const GenomicRegion& local_region, const SvabaSharedConfig* sc_) : region_(local_region), m_align(talign), sc(sc_) { // orient cigar so it is on the contig orientation. // need to do this to get the right ordering of the contig fragments below // We only flip if we flipped the sequence, and that was determined // by the convention set in AlignedContig::AlignedContig, so we need // to pass that information explicitly // if (flip/*m_align->ReverseFlag()*/) { // m_cigar = m_align->GetReverseCigar(); // } else { // m_cigar = m_align->GetCigar(); // } flipped = flip; // set the left-right breaks unsigned currlen = 0; // NB: CPOS is zero based // NB: for break1 and break2, we use these later in the // for either printing to alignments file, or for // getting the *contig* coordinate breakpoints // So this to account for "flip" convention across // AlignmentFragments const auto& cig = flipped ? m_align->GetReverseCigar() : m_align->GetCigar(); for (auto& i : cig) { // SET THE CONTIG BREAK (treats deletions and leading S differently) // the first M gets the break1, pos on the left if (i.Type() == 'M' && break1 == -1) break1 = currlen; if (i.Type() != 'D') // m_skip deletions but not leading S, but otherwise update currlen += i.Length(); if (i.Type() == 'M') // keeps triggering every M, with pos at the right break2 = currlen; } // assign the genomic coordinates of the break if (m_align->ReverseFlag()) { gbreak2 = m_align->Position() + 1; gbreak1 = m_align->PositionEnd(); } else { gbreak1 = m_align->Position() + 1; gbreak2 = m_align->PositionEnd(); } // shouldn't hit either of the next two conditions // if (break1 >= MAX_CONTIG_SIZE || break2 >= MAX_CONTIG_SIZE || break1 < 0 || break2 < 0) { // throw std::runtime_error( // "Invalid breakpoints: break1 = " + std::to_string(break1) + // ", break2 = " + std::to_string(break2) + // ", context = " + this->print() // ); // } if (break1 < 0 || break2 < 0) { throw std::runtime_error("Negative breakpoint detected in AlignmentFragment "); // + printToAlignmentsFile()); } // find the start position of alignment ON CONTIG start = 0; for (auto& i : cig) { //m_align->GetCigar()) { //m_cigar) { if (i.Type() != 'M') start += i.Length(); else break; } } void AlignmentFragment::SetIndels() { if (m_align->SecondaryFlag()) return; // ignore these const auto& cig = m_align->GetCigar(); const std::string _cname = m_align->Qname(); // Build CIGAR string for trace #ifdef SVABA_TRACING { std::string cig_str; for (const auto& cf : cig) cig_str += std::to_string(cf.Length()) + std::string(1, cf.Type()); SVABA_TRACE(_cname, "TP4 SetIndels: cigar=" << cig_str << " cigar_ops=" << cig.size() << " secondary=" << m_align->SecondaryFlag()); } #endif // loops the alignment fragment to extract indels // start at 1 and end at len-1 because we don't consider indels if they // start the cigar string e.g. 1D5M, not reliable for (size_t i = 1; i < cig.size() - 1; ++i) { const CigarField& c = cig[i]; const CigarField& pre = cig[i-1]; const CigarField& post = cig[i+1]; if ( (c.Type() == 'D' || c.Type() == 'I')) { bool prev_match = pre.Type() == 'M'; bool post_match = post.Type() == 'M'; SVABA_TRACE(_cname, "TP4 indel at cigar[" << i << "]: " << c.Length() << c.Type() << " prev=" << pre.Length() << pre.Type() << " post=" << post.Length() << post.Type() << " prev_match=" << prev_match << " post_match=" << post_match); // only consider indels if if (prev_match && post_match) { // convention is that cpos and gpos for deletions refer to flanking REF sequence. // eg a deletion of 1 bp of base 66 will have gpos1 = 65 and gpos2 = 67 BreakPointPtr bp = std::make_shared(this, i, sc); assert(bp); // add the indel m_indel_breaks.push_back(bp); SVABA_TRACE(_cname, "TP4 -> INDEL BP created"); } } } } std::string AlignmentFragment::printToAlignmentsFile() const { std::stringstream out; // sets the direction to print char jsign = '>'; if (m_align->ReverseFlag()) jsign = '<'; // NB: for printing, this should actually finally // consider if this fragment is "flipped" relative // to the BWA alignment, since we want to sync // orientations across all of the fragments. const auto& cig = flipped ? m_align->GetReverseCigar() : m_align->GetCigar(); // print the cigar value per base for (auto& j : cig) { if (j.Type() == 'M') out << std::string(j.Length(), jsign); else if (j.Type() == 'I') out << std::string(j.Length(), 'I'); else if (j.Type() == 'S' || j.Type() == 'H') out << std::string(j.Length(), '.'); } // print contig and genome breaks out << "\tC[" << break1 << "," << break2 << "] G[" << gbreak1 << "," << gbreak2 << "]"; // print it std::string chr_name = m_align->ChrName(sc->header); assert(chr_name.length()); out << "\tAligned to: " << chr_name << ":" << m_align->Position() << "(" << (m_align->ReverseFlag() ? "-" : "+") << ") CIG: " << m_align->CigarString() << " MAPQ: " << m_align->MapQuality(); // << " SUBN " << sub_n; return out.str(); } // void AlignmentFragment::fillRearrangementBreakEnd(bool left, // BreakEnd& b) { // b.transferContigAlignmentData(m_align); // if (left) { // b.gr = SeqLib::GenomicRegion(m_align->ChrID(), gbreak2, gbreak2); // b.gr.strand = m_align->ReverseFlag() ? '-' : '+'; // b.cpos = break2; // take the right-most breakpoint of the left as the first // } else { // b.gr = SeqLib::GenomicRegion(m_align->ChrID(), gbreak1, gbreak1); // b.gr.strand = m_align->ReverseFlag() ? '+' : '-'; // b.cpos = break1; // take the left-most of the next one // } // assert(b.cpos < MAX_CONTIG_SIZE); // } // assert(i.getSpan() > 0); // // get the hash string in same formate as cigar map (eg. pos_3D) // std::string st = i.getHashString(); // for (auto& c : cmap) { // SeqLib::CigarMap::const_iterator ff = c.second.find(st); // // if it is, add it // if (ff != c.second.end()) { // i.allele[c.first].cigar = ff->second; // } // } // } // } ================================================ FILE: src/svaba/AlignmentFragment.h ================================================ #pragma once #include #include #include #include "SeqLib/BamRecord.h" #include "BreakPoint.h" using SeqLib::BamRecordPtr; using SeqLib::Cigar; using SeqLib::CigarMap; using SeqLib::GenomicRegion; using SeqLib::BamHeader; // forward declare class AlignedContig; /*! This class contains a single alignment fragment from a contig to * the reference. For a multi-part mapping of a contig to the reference, * an object of this class represents just a single fragment from that alignment. */ class AlignmentFragment { friend class BreakPoint; friend class AlignedContig; public: AlignmentFragment() = delete; // prevent default construction /*! Construct an AlignmentFragment from a BWA alignment * @param flip If the contig sequence was flipped (rev of BAM record), need to track this. This flipping occurs in AlignedContig::AlignedContig */ // talign is an alignment of the contig to reference AlignmentFragment(BamRecordPtr &talign, bool flip, const GenomicRegion& local_region, const SvabaSharedConfig* sc_); // sort AlignmentFragment objects by start position bool operator < (const AlignmentFragment& str) const; // print the AlignmentFragment std::string printToAlignmentsFile() const; void fillRearrangementBreakEnd(bool left, BreakEnd& b); // check whether the alignment fragement overlaps with the given windows bool checkLocal() const; //const std::vector& getIndelBreaks() const { return m_indel_breaks; } // write the alignment record to a BAM file //void writeToBAM(SeqLib::BamWriter& bw) const; void SetIndels(); BamRecordPtr m_align; // BWA alignment of contig to reference std::vector secondaries; BreakPointPtrVector m_indel_breaks; // indel variants on this alignment //Cigar m_cigar; //cigar oriented to assembled orientation //std::string m_seq; // seequence, orientated to assembled orientation int break1 = -1; // 0-based breakpoint 1 on contig int break2 = -1; // 0-based breakpoint 2 on contig int gbreak1 = -1; // 0-based breakpoint 1 on reference chr int gbreak2 = -1; // 0-based breakpoint 1 on reference chr const SvabaSharedConfig* sc; //pointer to allow sort later GenomicRegion region_; int start = -1; // where on the contig does this alignment fragment start int num_align = -1; bool flipped = false; }; typedef std::vector AlignmentFragmentVector; ================================================ FILE: src/svaba/BamStats.cpp ================================================ #include "BamStats.h" #include using namespace SeqLib; ================================================ FILE: src/svaba/BamStats.h ================================================ // #pragma once // #include // #include // #include // #include "Histogram.h" // #include "SeqLib/BamRecord.h" // /** Store information pertaining to a given read group * // * // * This class will collect statistics on number of: read, supplementary reads, unmapped reads, qcfail reads, duplicate reads. // * It will also create Histogram objects to store counts of: mapq, nm, isize, clip, mean phred score, length // */ // class BamReadGroup { // friend class BamStats; // public: // /** Construct an empty BamReadGroup */ // BamReadGroup() {} // /** Construct an empty BamReadGroup for the specified read group // * @param name Name of the read group // */ // BamReadGroup(const std::string& name); // /** Display basic information about this read group // */ // friend std::ostream& operator<<(std::ostream& out, const BamReadGroup& rg); // /** Add a BamRecord to this read group */ // void addRead(SeqLib::BamRecord &r); // private: // // count number of reads // size_t reads; // size_t supp; // size_t unmap; // size_t qcfail; // size_t duplicate; // size_t mate_unmap; // int mapq_max = 0; // int realen_max = 0; // std::vector isize_vec; // std::string m_name; // }; // /** Class to store statistics on a BAM file. // * // * BamStats currently stores a map of BamReadGroup objects. Bam statistics // * are collected then on a read-group basis, but can be output in aggregate. See // * BamReadGroup for description of relevant BAM statistics. // */ // class BamStats // { // public: // /** Loop through the BamReadGroup objections and print them */ // friend std::ostream& operator<<(std::ostream& out, const BamStats& qc); // /** Add a read by finding which read group it belongs to and calling the // * addRead function for that BamReadGroup. // */ // void addRead(SeqLib::BamRecord &r); // private: // std::unordered_map m_group_map; // }; ================================================ FILE: src/svaba/BreakPoint.cpp ================================================ #include "BreakPoint.h" #include "SvabaDebug.h" #include #include #include #include #include #include #include #include #include #include #include "gzstream.h" #include "SvabaUtils.h" #include "STCoverage.h" #include "SvabaOptions.h" #include "SeqLib/GenomicRegionCollection.h" #include "SeqLib/GenomicRegion.h" #include "SeqLib/BamHeader.h" #include "AlignmentFragment.h" #include "AlignedContig.h" #include "SvabaModels.h" #include "ContigAlignmentScore.h" // n is the max integer given the int size (e.g. 255). x is string with int #define INTNSTOI(x,n) std::min((int)n, std::stoi(x)); static inline std::string to_string(SVType t) { switch(t) { case SVType::NOTSET: return "NOTSET"; case SVType::TSI_LOCAL: return "TSI_LOCAL"; case SVType::TSI_GLOBAL: return "TSI_GLOBAL"; case SVType::ASSMB: return "ASSMB"; case SVType::ASDIS: return "ASDIS"; case SVType::DSCRD: return "DSCRD"; case SVType::INDEL: return "INDEL"; } return "UNKNOWN_SVTYPE"; } static inline std::string to_string(SomaticState s) { switch(s) { case SomaticState::NOTSET: return "NOTSET"; case SomaticState::NORMAL_LOD: return "0"; case SomaticState::SOMATIC_LOD: return "1"; case SomaticState::FAILED: return "0"; } return "UNKNOWN_SOMATICSTATE"; } std::ostream& operator<<(std::ostream& out, const BreakPoint::SampleInfo& a) { out << " split: " << a.split << " cigar " << a.cigar << " alt " << a.alt << " cov " << a.cov << " disc " << a.disc; return out; } GenomicRegion BreakPoint::BreakEndAsGenomicRegionLeft() const { return b1.gr; } GenomicRegion BreakPoint::BreakEndAsGenomicRegionRight() const { return b2.gr; } bool BreakPoint::isIndel() const { if (svtype == SVType::NOTSET) throw std::runtime_error("BreakPoint without an svtype"); return svtype == SVType::INDEL; } // SvABA2.0: printDeletionMarksForAlignmentsFile() was removed along with // AlignedContig::printToAlignmentsFile / alignments.txt.gz. The deletion- // mark info is available in the r2c TSV via the bps field (per-breakpoint // span + kind), so downstream viewers can reconstruct the marker // positions from structured fields rather than parsing ASCII. HashVector BreakPoint::getBreakEndHashes() { HashVector vec; assert(!confidence.empty()); assert(svtype != SVType::NOTSET); if (svtype != SVType::INDEL) return vec; if (b1.gr.pos1 > 0) { { vec.push_back(b1.hash(0)); vec.push_back(b1.hash(1)); vec.push_back(b1.hash(-1)); } } return vec; } BreakPoint::SampleInfo operator+(const BreakPoint::SampleInfo& a1, const BreakPoint::SampleInfo& a2) { BreakPoint::SampleInfo a; a.disc = a1.disc + a2.disc; a.split = a1.split + a2.split; a.cigar = a1.cigar + a2.cigar; a.cigar_near = a1.cigar_near + a2.cigar_near; a.cov = a1.cov + a2.cov; // add the reads for (auto& i : a1.supporting_reads) a.supporting_reads.insert(i); for (auto& i : a2.supporting_reads) a.supporting_reads.insert(i); //a.alt = std::max((int)a.supporting_reads.size(), a.cigar); if (a.supporting_reads.size()) // we have the read names, so do that (non-refilter run) a.UpdateAltCounts(); else // no read names stored, so just get directly a.alt = a1.alt + a2.alt; return a; } static constexpr double scale_factor = 10.0; static std::unordered_map ERROR_RATES = {{0, scale_factor * 1e-4}, {1, scale_factor * 1e-4}, {2, scale_factor * 1e-4}, {3, scale_factor * 1e-4}, {4, scale_factor * 1e-4}, {5, scale_factor * 2e-4}, {6, scale_factor * 5e-4}, {7, scale_factor * 1e-3}, {8, scale_factor * 2e-3}, {9, scale_factor * 3e-3}, {10, scale_factor * 1e-2}, {11, scale_factor * 2e-2}, {12, scale_factor * 3e-2}}; double __myround(double x) { return std:: floor(x * 10) / 10; } BreakPoint::BreakPoint(const SvabaSharedConfig* _sc, const AlignmentFragment* left, const AlignmentFragment* right, const AlignedContig* alc ) : sc(_sc) { // this is at least of type ASSMB (can upgrade later to ASDIS or TSI) svtype = SVType::ASSMB; // instantiate the SampleInfo objects for each BAM for (auto const& p : sc->prefixes) { // if p isn't already present, constructs SampleInfo(this) in-place allele.try_emplace(p); } assert(alc); // transfer AlignedContig level information seq = alc->m_seq; num_align = alc->m_frag_v.size(); cname = alc->getContigName(); // SvABA2.0: record the contig length so splitCoverage can reject r2c // reads that soft-clip in the middle of the contig (as opposed to at // the contig edge, which is a legitimate geometry). m_seq is already // in assembly-native orientation. We don't set flipped_on_contig here // because SV breakpoints are composed of two AlignmentFragments with // independent flip conventions; splitCoverage's m_seq cpos handling // for SVs uses the per-fragment cpos set by transferContigAlignmentData. contig_len = static_cast(seq.length()); // set the local alignment // int la = 0; // alc->m_frag_v[0].m_align->GetIntTag("LA", la); // if (la > 0) // local = LocalAlignment::NONVAR_LOCAL_REALIGNMENT; // set the break coordinates bool isleft = true; b1.transferContigAlignmentData(left, isleft); b2.transferContigAlignmentData(right, !isleft); // set the insertion / homology set_homologies_insertions(); // set seconary flag secondary = left->m_align->SecondaryFlag() || right->m_align->SecondaryFlag(); } // make the file string std::string BreakPoint::toFileString(const BamHeader& header) const { // make sure we already ran scoring assert(confidence.length()); assert(svtype != SVType::NOTSET); std::string sep = "\t"; std::stringstream ss; double max_lod = 0; for (const auto& [_,al] : allele) max_lod = std::max(max_lod, al.LO); std::string evidence = to_string(svtype); std::string somatic_string = "NA"; std::string somatic_lod_string = "NA"; for (const auto& [pref,_] : allele) { if (pref.at(0) == 'n') { // need to have one normal to call somatic somatic_string = to_string(somatic); somatic_lod_string = std::to_string(std::min((double)99,LO_s)); } } //NB: we are adding +1 to the positions here to be consistent // with SAM/VCF which is 1-indexed, while we are using 0-indexed // positions internally to be consistent with htslib ss << b1.gr.ChrName(header) << sep << (b1.gr.pos1 +1) << sep << b1.gr.strand << sep //1-3 << b2.gr.ChrName(header) << sep << (b2.gr.pos1 +1) << sep << b2.gr.strand << sep //4-6 << ref << sep << alt << sep //7-8 << getSpan() << sep //9 << a.split << sep << a.alt << sep << a.cov << sep << a.cigar << sep << a.cigar_near << sep << dc.mapq1 << sep << dc.mapq2 << sep << dc.ncount << sep << dc.tcount << sep << b1.mapq << sep << b2.mapq << sep << b1.nm << sep << b2.nm << sep << b1.as << sep << b2.as << sep << b1.sub << sep << b2.sub << sep << (homology.length() ? homology : "x") << sep << (insertion.length() ? insertion : "x") << sep << (repeat_seq.length() ? repeat_seq : "x") << sep << cname << sep << num_align << sep << confidence << sep << evidence << sep << quality << sep << secondary << sep << somatic_string << sep << somatic_lod_string << sep << max_lod << sep //<< pon << sep // << (repeat_seq.length() ? repeat_seq : "x") << sep << (rs.length() ? rs : "x") << sep << b1.contig_conf << sep << b2.contig_conf << sep // --- SvABA2.0 additions for refilter round-trip ------------------------ // Contig-relative breakend positions. -1 sentinel means "not set" (e.g. // DSCRD-only breakpoints with no backing contig alignment). << b1.cpos << sep << b2.cpos << sep // Flanking match lengths at each end (drives SHORTALIGNMENT/LOWMATCHLEN). << left_match << sep << right_match << sep // Extent of split-read coverage on the contig (drives DUPREADS/LOWSUPPORT). << split_cov_bounds.first << sep << split_cov_bounds.second << sep // Per-end LocalAlignment enum, serialized as int to keep the parser // identity-simple. See BreakPoint.h for enum values (0..3). << static_cast(b1.local) << sep << static_cast(b2.local) << sep // Contig orientation metadata for cpos_on_m_seq() reconstruction. << contig_len << sep << (flipped_on_contig ? 1 : 0) << sep // SvABA2.0: unique BP identifier. Unset (shouldn't happen if // SvabaRegionProcessor hooked next_bp_id() properly) emits "." // so the column count stays fixed and awk scripts don't skew. << (id.empty() ? "." : id); for (const auto& [_,al] : allele) ss << sep << al.toFileString(svtype); return ss.str(); } // make the file string std::string BreakPoint::printSimple(const SeqLib::BamHeader& h) const { std::stringstream out; // make sure we set everything forthis assert(svtype != SVType::NOTSET); assert(!cname.empty()); assert(b1.gr.chr >= 0); assert(svtype == SVType::DSCRD || b1.nm >= 0); assert(svtype == SVType::DSCRD || b2.nm >= 0); assert(svtype == SVType::DSCRD || b1.as >= 0); assert(svtype == SVType::DSCRD || b2.as >= 0); if (svtype == SVType::INDEL) { out << ">" << (insertion.size() ? "INS: " : "DEL: ") << getSpan() << " " << b1.gr.ToString(h) << " " << cname; for (const auto& [pref, al] : allele) out << " " << pref << ":" << al.split; } else { out << ": " << b1.gr.PointString(h) << " to " << b2.gr.PointString(h) << " SPAN " << getSpan() << " " << cname; for (const auto& [pref, al] : allele) out << " " << pref << ":" << al.split; } return out.str(); } /*std::ostream& operator<<(std::ostream& out, const BreakPoint& b) { if (b.isindel) { out << ">" << (b.insertion.size() ? "INS: " : "DEL: ") << b.getSpan() << " " << b.b1.gr << " " << b.cname << " " << b.evidence; //<< " T/N split: " << b.t.split << "/" << b.n.split << " T/N cigar: " // << b.t.cigar << "/" << b.n.cigar << " T/N Cov " << b.t.cov << "/" << b.n.cov << " DBSNP: " << rs_t; for (auto& i : b.allele) out << " " << i.first << ":" << i.second.split; } else { out << ": " << b.b1.gr.PointString() << " to " << b.b2.gr.PointString() << " SPAN " << b.getSpan() << " " << b.cname << " " << b.evidence; //<< " T/N split: " << b.t.split << "/" << b.n.split << " T/N disc: " // << b.dc.tcount << "/" << b.dc.ncount << " " << b.evidence; for (auto& i : b.allele) out << " " << i.first << ":" << i.second.split; } return out; }*/ void BreakPoint::splitCoverage(svabaReadPtrVector& bav) { // dummy left-most and right-most positions that have an // overlapping read2contig alignment split_cov_bounds = {std::numeric_limits::max(), -1}; // track if first and second mate covers same split. fishy and remove them both std::unordered_map qname_and_num; // keep track of which reads already added std::unordered_set qnames; // keep track of reads to reject std::set reject_qnames; // keep track of which SR tags are valid splits std::unordered_set valid_reads; // SvABA2.0: b1.cpos/b2.cpos are in BAM/genome-forward coordinates, but // the r2c CIGARs and this_r2c.start_on_contig/end_on_contig that we // compare against below are in assembly-native / m_seq coordinates. // For reverse-aligned contigs these are mirror images and the old code // counted reads at the mirror position as "supporting". Use the m_seq // cpos pair everywhere we compare against r2c in this function. const auto [m_b1_cpos, m_b2_cpos] = cpos_on_m_seq(); // SvABA2.0 (v3): homlen is no longer used as a gate input. The old // logic required both_split when homlen > 0 and one_split only when // homlen == 0. That wiped out legitimate spanning reads when the // junction sat inside a long homology region (a common failure mode // for repeat-junction LOH events — tumor looked clean because all // its split reads fell inside the homology and got rejected). // The comparative r2c-vs-native score gate (with per-sample margin) // replaces it: in a long-homology junction, neither alignment wins // decisively, so such reads fail the gate on their own without // special-casing — no "both_split" complication needed. // loop all of the read to contig alignments for this contig for (const auto& j : bav) { r2c this_r2c = j->GetR2C(cname); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV enter contig=" << cname << " r2c_start=" << this_r2c.start_on_contig << " r2c_end=" << this_r2c.end_on_contig << " r2c_rc=" << this_r2c.rc << " r2c_cigar=" << this_r2c.cig << " r2c_nm=" << this_r2c.nm << " b1_cpos=" << m_b1_cpos << " b2_cpos=" << m_b2_cpos << " num_align=" << num_align); bool read_should_be_skipped = false; // SvABA2.0: principled "r2c better than native" gate. // // The fundamental requirement for a read to support a variant is that // the read-to-contig (r2c) alignment must be a *better* explanation // of the read than the read-to-reference alignment that BWA-MEM gave // it in the input BAM. If both alignments are equally clean (the // classic "duplicated reference" trap, where a repeat lets BWA align // the read to a paralogous copy with no clips and no NM, while the // r2c is also clean because the contig was assembled from the same // sequence), then the contig provides no extra explanatory power and // the read should *not* count as a variant supporter. // // svaba::readAlignmentScore() (defined in ContigAlignmentScore.h) is // an SV-focused score that heavily penalizes soft-clips and counts // edit distance, so e.g. // // 80M70S NM=0 -> aligned_bp 80, clip_bp 70 -> score 10 // 150M NM=0 -> aligned_bp 150 -> score 150 // 90M60S NM=0 -> -> score 30 // 75M5I70M NM=5 -> aligned_bp 150, NM 5 -> score 140 // // and the gate is a strict r2c > native comparison. // // This replaces an earlier hard cap on non-edge soft-clip length: // the score-based comparison is more principled (it lets big edge // clips be fine when the native alignment is also bad, and rejects // small interior indels in r2c when the native alignment is actually // clean) and works for both interior and edge clip cases without // needing separate tumor/normal thresholds. // // Guard only on the r2c CIGAR being populated; if it isn't, there's // nothing to score and we let the downstream checks decide. // // Compile-time kill-switch: `SVABA_R2C_NATIVE_GATE` (SvabaOptions.h). // When set to 0, this entire block is elided — reads are no longer // compared r2c-vs-native and the old "any r2c-spanning read credits" // behavior returns. Reintroduces the homology-trap false-positive // somatic bug; flip only to measure the gate's CPU cost. See the // macro's doc comment in SvabaOptions.h. #if SVABA_R2C_NATIVE_GATE if (this_r2c.cig.size() > 0) { // r2c side: use the cached NM on this_r2c (filled in r2c::AddAlignment). // The r2c is computed against the *corrected* read sequence. const double r2c_score = svaba::readAlignmentScore(this_r2c.cig, this_r2c.nm); // Native side: STRONGLY prefer the corrected-read realignment that // SvabaRegionProcessor stashed on the svabaRead. That comparison is // apples-to-apples: same corrected sequence and same svaba-internal // BWA-MEM parameters as the r2c step. Falling back to the original // input-BAM CIGAR/NM is a last resort (e.g. for reads with // to_assemble == false that never went through correction) and is // expected to be biased: pre-correction NM includes sequencing // errors that BFC would have fixed, which inflates native edit // distance and lets r2c look artificially "better". SeqLib::Cigar native_cig; int32_t native_nm = -1; if (j->corrected_native_cig.size() > 0) { native_cig = j->corrected_native_cig; native_nm = j->corrected_native_nm; } else { native_cig = j->GetCigar(); j->GetIntTag("NM", native_nm); } // If neither path produced a usable native CIGAR, fall back to the // read length as a conservative perfect-native upper bound. This // prevents a read with no recoverable native alignment from // auto-passing the gate just because native_score defaulted to 0. double native_score = svaba::readAlignmentScore(native_cig, native_nm); if (native_cig.size() == 0) { native_score = static_cast(j->Length()); } // SvABA2.0 (v3.1): strict greater-than gate, no percentage margin. // r2c must beat native — ties don't credit the read. Both tumor // and normal use margin=0. // // v3 originally had a 10% margin for tumor reads to filter // junction-homology borderline cases, but this was read-length- // dependent and killed real small indels (1bp del on 150bp read = // only 4.9% improvement, impossible to clear 10%; on 250bp read // only 2.9%, can't even clear 3%). Junction-homology cases where // both samples credit borderline reads equally are handled // correctly by the downstream LOD model (similar split support // in both → low somlod → not somatic). const double margin = j->Tumor() ? T_R2C_MIN_MARGIN : N_R2C_MIN_MARGIN; const double threshold = native_score * (1.0 + margin); if (r2c_score <= threshold) { read_should_be_skipped = true; SVABA_TRACE(cname, "TP8 r2c<=native SKIP read=" << j->UniqueName() << " r2c=" << r2c_score << " native=" << native_score << " threshold=" << threshold << " margin=" << margin << " tumor=" << j->Tumor()); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV TP8 SKIP r2c<=native" << " contig=" << cname << " r2c_score=" << r2c_score << " native_score=" << native_score << " threshold=" << threshold << " margin=" << margin << " tumor=" << j->Tumor() << " r2c_cigar=" << this_r2c.cig << " native_cigar=" << native_cig << " r2c_nm=" << this_r2c.nm << " native_nm=" << native_nm); } else { SVABA_TRACE(cname, "TP8 r2c>native PASS read=" << j->UniqueName() << " r2c=" << r2c_score << " native=" << native_score << " threshold=" << threshold); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV TP8 PASS r2c>native" << " contig=" << cname << " r2c_score=" << r2c_score << " native_score=" << native_score << " r2c_cigar=" << this_r2c.cig << " native_cigar=" << native_cig << " r2c_nm=" << this_r2c.nm << " native_nm=" << native_nm); } } #endif // SVABA_R2C_NATIVE_GATE if (num_align == 1) { std::vector del_breaks; std::vector ins_breaks; // SvABA2.0: pos must be in *absolute contig* (m_seq / r2c) coordinates // because we compare it below against m_b1_cpos / m_b2_cpos, which are // also absolute contig coordinates (cpos_on_m_seq() handles the flip). // The previous code initialized pos = 0, which made it relative to the // start of this read's CIGAR, so for any read that didn't start at // contig position 0 the indel-at-variant-location check could never // fire. That allowed the "mirror indel" failure mode through: // a REF-supporting read whose r2c CIGAR has an inserted/deleted base // exactly at the variant locus (because the contig itself carries the // mirror indel) was being credited as variant-supporting. int pos = this_r2c.start_on_contig; // if this is a nasty repeat, don't trust non-perfect alignmentx on r2c alignment // if (checkHomopolymer(j->Sequence())) // read_should_be_skipped = true; // loop through r2c cigar and see positions for(auto& i : this_r2c.cig) { if (i.Type() == 'D') del_breaks.push_back(pos); else if (i.Type() == 'I') ins_breaks.push_back(pos); // update position on contig if (i.ConsumesReference()) pos += i.Length(); // update position on contig } size_t buff = std::max((size_t)3, repeat_seq.length() + 3); // SvABA2.0: the old test was `i > X-buff || i < X+buff`, which is a // tautology (for any i, one side is always true), so it would // reject every read with any D or I in its r2c CIGAR. The intent // is: reject the read if one of its r2c indels lands *at* the // breakpoint position +/- buff (indicating its r2c alignment is // fishy right at the junction we care about). Use AND. We also // check both b1 and b2 so deletions/insertions landing on either // side of the (potentially homologous) junction window are caught. // // NB: copy the structured-binding values (m_b1_cpos, m_b2_cpos) into // plain ints before the lambda. Capturing structured bindings is a // C++20 extension; svaba builds at C++17 so we'd otherwise warn on // -Wc++20-extensions. const int b1c = m_b1_cpos; const int b2c = m_b2_cpos; const int ibuff = static_cast(buff); auto near_break = [b1c, b2c, ibuff](int p) { return (p >= b1c - ibuff && p <= b1c + ibuff) || (p >= b2c - ibuff && p <= b2c + ibuff); }; for (auto& i : del_breaks) if (near_break(i)) { read_should_be_skipped = true; SVABA_TRACE(cname, "TP9 r2c DEL near break SKIP read=" << j->UniqueName() << " del_pos=" << i << " b1c=" << b1c << " b2c=" << b2c << " buff=" << ibuff); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV TP9 SKIP r2c DEL near break" << " contig=" << cname << " del_pos=" << i << " b1_cpos=" << b1c << " b2_cpos=" << b2c << " buff=" << ibuff); } for (auto& i : ins_breaks) if (near_break(i)) { read_should_be_skipped = true; SVABA_TRACE(cname, "TP9 r2c INS near break SKIP read=" << j->UniqueName() << " ins_pos=" << i << " b1c=" << b1c << " b2c=" << b2c << " buff=" << ibuff); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV TP9 SKIP r2c INS near break" << " contig=" << cname << " ins_pos=" << i << " b1_cpos=" << b1c << " b2_cpos=" << b2c << " buff=" << ibuff); } } if (read_should_be_skipped) { // default is r2c does not support var, so don't amend this_r2c SVABA_READ_TRACE(j->Qname(), "SPLIT_COV SKIPPED (gate failed) contig=" << cname); continue; } // get read ID std::string sample_id = j->Prefix(); //substr(0,4); // maybe just make this prefix std::string sr = j->UniqueName(); // SvABA2.0 (v3): small fixed buffer past each breakend on the // contig. The repeat_seq.length() padding on the older code was // part of the homology-era logic and is dropped — the comparative // r2c-vs-native score gate (with per-sample margin) now handles // tandem-repeat ambiguity on its own: when a short indel at the // junction can equally well live anywhere in a tandem repeat, // r2c and native both fit equivalently and neither wins. int this_tbuff = T_SPLIT_BUFF; int this_nbuff = N_SPLIT_BUFF; int rightbreak1 = m_b1_cpos + (j->Tumor() ? this_tbuff : this_nbuff); // read must extend this far right of break1 int leftbreak1 = m_b1_cpos - (j->Tumor() ? this_tbuff : this_nbuff); // read must extend this far left of break1 int rightbreak2 = m_b2_cpos + (j->Tumor() ? this_tbuff : this_nbuff); int leftbreak2 = m_b2_cpos - (j->Tumor() ? this_tbuff : this_nbuff); std::string contig_qname; // for sanity checking // get the alignment position on contig int pos = this_r2c.start_on_contig; int te = this_r2c.end_on_contig; int rightend = te; int leftend = pos; bool issplit1 = (leftend <= leftbreak1) && (rightend >= rightbreak1); bool issplit2 = (leftend <= leftbreak2) && (rightend >= rightbreak2); bool one_split = issplit1 || issplit2; SVABA_TRACE(cname, "TP10 span check read=" << j->UniqueName() << " leftend=" << leftend << " rightend=" << rightend << " b1_cpos=" << m_b1_cpos << " b2_cpos=" << m_b2_cpos << " issplit1=" << issplit1 << " issplit2=" << issplit2 << " one_split=" << one_split); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV TP10 span check" << " contig=" << cname << " leftend=" << leftend << " rightend=" << rightend << " b1_cpos=" << m_b1_cpos << " b2_cpos=" << m_b2_cpos << " lbreak1=" << leftbreak1 << " rbreak1=" << rightbreak1 << " lbreak2=" << leftbreak2 << " rbreak2=" << rightbreak2 << " issplit1=" << issplit1 << " issplit2=" << issplit2 << " one_split=" << one_split << " tumor=" << j->Tumor()); // SvABA2.0 (v3): previously we required both_split when homlen > 0 // (tumor *or* normal) and one_split only when homlen == 0. That // gate threw out legitimate split-supporters inside long junction // homology regions (a common LOH false-somatic pattern). The // principled replacement is the per-sample-prefix r2c > native // score gate (applied above, before this read ever reaches the // valid check). If a read makes it here, its r2c alignment is // strictly better than its native alignment (by the tumor margin // for t*** reads, strictly greater for n*** reads). So we only // need to confirm the read actually spans at least one breakend // on the contig — i.e. it's a "split" in the physical sense of // crossing a junction — and then credit it. // // Note: the giant insertion case is subsumed by this rule too — a // large insertion usually means one_split on at least one side. bool valid = one_split; // check that deletion (in read to contig coords) doesn't cover break point size_t p = pos; // move along on contig, starting at first non-clipped base for (SeqLib::Cigar::const_iterator c = this_r2c.cig.begin(); c != this_r2c.cig.end(); ++c) { if (c->Type() == 'D') { if ( (p >= leftbreak1 && p <= rightbreak1) || (p >= leftbreak2 && p <= rightbreak2) ) { read_should_be_skipped = true; SVABA_TRACE(cname, "TP11 r2c DEL covers break SKIP read=" << j->UniqueName() << " del_pos=" << p << " lb1=" << leftbreak1 << " rb1=" << rightbreak1 << " lb2=" << leftbreak2 << " rb2=" << rightbreak2); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV TP11 SKIP r2c DEL covers break" << " contig=" << cname << " del_pos=" << p); } } if (c->ConsumesReference()) // if it moves it along the contig p += c->Length(); } // add the split reads for each end of the break // a read is split if it is spans both break ends for tumor, one break end for normal (to // be more sensitive to germline) and if it spans both ends for deletion (should be next to // each other), or one end for insertions larger than 10, or this is a complex breakpoint if (!valid) { SVABA_READ_TRACE(j->Qname(), "SPLIT_COV NOT CREDITED (failed span check)" << " contig=" << cname << " one_split=" << one_split << " read_should_be_skipped=" << read_should_be_skipped); } if (valid) { std::string qn = j->Qname(); // if read seen and other read was other mate, then reject if (num_align > 1 && qname_and_num.count(qn) && qname_and_num[qn] != j->FirstFlag()) { // need to reject all reads of this qname // because we saw both first and second in pair hit same split // 2023 - turning this off -- why? Beacuse for very short // insert size distributions, this can still be possible //reject_qnames.insert(qn); } else { // if haven't seen this read, add here. If have, then dont because want to avoid re-setting first/second convention // e.g. if we see a split read with first designation, we want to reject all reads with same qname if at any time // we see one with second mate designation. If we don't have this conditional, we can get fooled if the order is // 1, 2, 1 if (!qname_and_num.count(qn)) qname_and_num[qn] = j->FirstFlag(); // this is a valid read this_r2c.supports_var = true; valid_reads.insert(sr); SVABA_TRACE(cname, "TP10+ CREDITED read=" << sr << " sample=" << sample_id << " tumor=" << j->Tumor()); SVABA_READ_TRACE(j->Qname(), "SPLIT_COV CREDITED as variant supporter" << " contig=" << cname << " sample=" << sample_id << " tumor=" << j->Tumor() << " issplit1=" << issplit1 << " issplit2=" << issplit2); // how much of the contig do these span // for a given read QNAME, get the coverage that split_cov_bounds.first = std::min(split_cov_bounds.first, pos); split_cov_bounds.second = std::max(split_cov_bounds.second, te); } } // update the counters for each break end if (issplit1 && valid) ++b1.split[sample_id]; if (issplit2 && valid) ++b2.split[sample_id]; // add r2c back, but as amended //j.AddR2C(cname, this_r2c); } // end read loop // process valid reads for (auto& i : bav) { r2c this_r2c = i->GetR2C(cname); if (valid_reads.count(i->UniqueName())) { std::string qn = i->Qname(); if (qnames.count(qn)) continue; // don't count support if already added and not a short event // check that it's not a bad 1, 2 split if (reject_qnames.count(qn)) { this_r2c.supports_var = false; i->AddR2C(cname, this_r2c); // update that this actually does not support continue; } reads.push_back(i); // keep track of qnames of split reads qnames.insert(qn); auto prefix = i->Prefix(); if (auto it = allele.find(prefix); it != allele.end()) { auto& sample = it->second; sample.supporting_reads.insert(i->UniqueName()); ++sample.split; } else { throw std::runtime_error("SampleInfo not instantiated with this bam prefix: " + prefix); } } } // adjust the alt count for (auto& [_,al] : allele) { al.UpdateAltCounts(); } #ifdef SVABA_TRACING { int total_split = 0; for (const auto& [pref,al] : allele) total_split += al.split; SVABA_TRACE(cname, "TP_SPLIT_SUMMARY total_split=" << total_split << " reads.size=" << reads.size() << " valid_reads=" << valid_reads.size() << " per_sample:"); for (const auto& [pref,al] : allele) { SVABA_TRACE(cname, " " << pref << ": split=" << al.split << " alt=" << al.alt << " cov=" << al.cov); } } #endif } void BreakPoint::checkBlacklist(GRC &grv) { if (grv.CountOverlaps(b1.gr) || grv.CountOverlaps(b2.gr)) { confidence = "BLACKLIST"; SVABA_TRACE(cname, "TP14 BLACKLIST hit"); } } void BreakPoint::set_homologies_insertions() { try { if (b1.cpos > b2.cpos) homology = seq.substr(b2.cpos, b1.cpos-b2.cpos); else if (b2.cpos > b1.cpos) insertion = seq.substr(b1.cpos, b2.cpos-b1.cpos); //if (insertion.length() == 0) // ;//insertion = "x"; //if (homology.length() == 0) //;//homology = "x"; } catch (...) { std::cerr << "cname: " << cname << " b1.cpos " << b1.cpos << " b2.cpos " << b2.cpos << " seq.length " << seq.length() << std::endl; std::cerr << "Caught error with contig on global-getBreakPairs: " << cname << std::endl; std::cerr << b1.cpos << " " << b2.cpos << " seq.length() " << seq.length() << " num_align " << num_align << std::endl; } } // isleft - this is the left-sided AlignmentFragment, so take the right break // as the breakpoint (and vice versa) void BreakEnd::transferContigAlignmentData(const AlignmentFragment* f, bool isleft) { const BamRecordPtr &r = f->m_align; // get number of suboptimal alignments r->GetIntTag("XS", sub); // sub could be 0 // get number of !SNV! mismatches // this is a svaba internal trick, since we are interested in // indels, so just track number of point mutation differences r->GetIntTag("NM", nm); assert(nm >= 0); nm = std::max(nm - static_cast(r->MaxInsertionBases()) - static_cast(r->MaxDeletionBases()), 0); // get alignment score r->GetIntTag("AS", as); assert(as >= 0); // SvABA2.0: pull the contig-alignment confidence tag. If `zc` wasn't // written recompute // from the record directly so behavior is consistent either way. double cc = svaba::readContigConfTag(*r); if (cc < 0.0) cc = svaba::scoreContigAlignment(*r).confidence; contig_conf = cc; // transfer mapq and match length mapq = r->MapQuality(); matchlen = r->NumMatchBases(); // set the coordinates as right-most (for an isleft=true fragment) // or left-most (for an isleft = false fragment) if (isleft) { gr = GenomicRegion(r->ChrID(), f->gbreak2, f->gbreak2); gr.strand = r->ReverseFlag() ? '-' : '+'; cpos = f->break2; } else { gr = GenomicRegion(r->ChrID(), f->gbreak1, f->gbreak1); gr.strand = r->ReverseFlag() ? '+' : '-'; cpos = f->break1; } } // construct an indel BreakPoint BreakPoint::BreakPoint(const AlignmentFragment* f, const int idx, const SvabaSharedConfig* _sc) : sc(_sc) { svtype = SVType::INDEL; // instantiate the SampleInfo objects for each BAM for (auto const& p : sc->prefixes) { allele.try_emplace(p); } b1.transferContigAlignmentData(f, true); b2.transferContigAlignmentData(f, true); // re-zero the positions, not set yet b1.gr.pos1 = b1.gr.pos2 = -1; b2.gr.pos1 = b2.gr.pos2 = -1; // this alignment fragemnt underlying alignment const BamRecordPtr &r = f->m_align; // SvABA2.0: record the flip-convention of this fragment so that // b1.cpos/b2.cpos (which are computed from the un-flipped BAM CIGAR below, // i.e. in BAM / genome-forward orientation) can be converted to m_seq / // r2c (assembly-native) orientation via BreakPoint::cpos_on_m_seq() at // the sites that need it (split-coverage counting and alignments.txt // rendering). This does NOT change the arithmetic done against // r->Sequence() in this constructor (insertion, homology, repeat_seq), // which legitimately lives in BAM/genome-forward coordinates. flipped_on_contig = f->flipped; contig_len = static_cast(r->Sequence().length()); // assign the contig-wide properties cname = r->Qname(); seq = r->Sequence(); assert(cname.length()); assert(seq.length()); num_align = 1; b1.gr.strand = '+'; // always the case for indels b2.gr.strand = '-'; // set seconary flag secondary = r->SecondaryFlag(); int curr = 0; // current position on the contig (starting at zero) int gcurrlen = 0; // current position on the genome (starting at zero) //debugprint // if (cname == "c_1_49001_74001_14C") // std::cerr << "...constructing... " << idx << // " m_align " << *r << " flipped " << f->flipped << std::endl; //NB: curr is the counter for number of based traversed on the contig // this is actually 1-based in how we use it, since e.g. if we have // a cigar like 1M... then right away curr is 1 and we are looking at the // first based of the contig. A bit confusing since C is 0-based, but // this is effectively how this is used below. 1-based is good since // this is what we want the output to be for VCF / SAM spec // NB: contig position and genome position internally are 0-based // similar to HTSlib size_t count = 0; // count to make sure we are reporting the right indel // NB: don't worry about "flip"" stuff from AlignedContig, // that's only important for comparing across different alignments/ // Since we are parsing indels from a single alignment, which is always // referenced to the forward strand, just go with the raw BamRecord data for (auto& i : f->m_align->GetCigar()) { // update the left match side if (i.Type() == 'M' && count < idx) left_match += i.Length(); // update the right match side if (i.Type() == 'M' && count > idx) right_match += i.Length(); // std::cerr << "LM " << left_match << " RM " << right_match << " count " << // count << " idx " << idx << std::endl; //debug ////// // set the breakpoint positions on the contig ////// // for either insertion or deletion, first base is the one before the // actual variant // NB: recall that curr is the number of bases thus far // that have consumed the contig/query e.g. for 140M5D, curr will be 140 since // the 5D does not consume the query/contig. So in a 0-based system like // we use here internally to be consistent with htslib and C-rules, // we add a -1 so that we count the last base of the contig before the deletion // (e.g. the 140th base, or position 139 in 0-based system) as the first // base on the contig for the deletion (or insertion). if (count == idx && (i.Type() == 'D' || i.Type() == 'I')) { b1.cpos = curr - 1; // 0-based position of first base before the deletion/insertion } // if deletion if (i.Type() == 'D' && count == idx) { b2.cpos = curr; // 0-based position of first base after the deletion } // if insertion if (i.Type() == 'I' && count == idx) { b2.cpos = b1.cpos + i.Length(); // here, we add the +1 to start so that the actual insertion sequence is // at the first base of the insertion. For VCF reporting in the ALT // column, I'll add the leading reference base later // e.g. for a 2 bp insertion, insertion becomes e.g. AG while // in the ALT column of the VCF/bps it is GAG (if G is last reference match) insertion = f->m_align->Sequence().substr(b1.cpos + 1, i.Length()); } // update the contig position traversal -- consumes query // M,I,S if (i.ConsumesQuery()) curr += i.Length(); ////// // set the breakpoint positions on the genome ////// // set the genome breakpoint if (b1.cpos >= 0 && count == idx) { if (i.Type() != 'I' && i.Type() != 'D') throw std::runtime_error("BreakPoint indel parsing - unexpected to get non del/ins CIGAR field"); // here again the -1 is to get htslib position 0-based to SAM format (1-based), since e.g. for // 140M5D, we want the genome position of the start based to be the first // matching base before the deletion, so again have to -1 b1.gr.pos1 = r->Position() + gcurrlen - 1; // for deletions, it's the opposite to contig, so deletion consumes the genome if (i.Type() == 'D') b2.gr.pos1 = b1.gr.pos1 + i.Length(); if (i.Type() == 'I') b2.gr.pos1 = b1.gr.pos1 + 1; } // update the position on the genome // D,M if (i.ConsumesReference()) { gcurrlen += i.Length(); } // if (cname == "c_1_122501_141530_11C") { // std::cerr << " count " << count << " curr " << curr << " gcurr " << gcurrlen << // " C " << i << " insertion " << insertion << " cname " << cname << std::endl; // std::cerr << f->m_seq << std::endl; // std::cerr << "FIPPED " << f->flipped << std::endl; // std::cerr << " b1.gr " << b1.gr << " b2.gr " << b2.gr << std::endl; // } ++count; } // end cigar loop // set the dummy other end b1.gr.pos2 = b1.gr.pos1; b2.gr.pos2 = b2.gr.pos1; // should have been explicitly ordered in the creation above if (!(b1.gr < b2.gr)) { std::cerr << "B1 " << b1.gr << " - " << b2.gr << " " << cname << " b1.cpos " << b1.cpos << " b2.cpos " << b2.cpos << std::endl; std::cerr << f->printToAlignmentsFile() << std::endl; throw std::runtime_error("invalid BreakPoint creation in indels in AlignmentFragment"); } //// add the repeat sequence const std::string& seq = f->m_align->Sequence(); const int REPBUFF = 3; for (const auto& [start, end, rep] : svabaUtils::find_long_homopolymers(seq)) { bool crosses_breakpoint = start < (b1.cpos + REPBUFF) && (b2.cpos - REPBUFF) < end; if (rep.length() > repeat_seq.length() && crosses_breakpoint) repeat_seq = rep; } for (const auto& [start, end, rep] : svabaUtils::find_long_dinuc_repeats(seq)) { bool crosses_breakpoint = start < (b1.cpos + REPBUFF) && (b2.cpos - REPBUFF) < end; if (rep.length() > repeat_seq.length() && crosses_breakpoint) repeat_seq = rep; } /////////// } void BreakPoint::CombineWithDiscordantClusterMap(DiscordantClusterMap& dmap) { // don't operate on indels if (svtype == SVType::INDEL) return; // since discordant clusters are ordered with the // m_reg1 being more left on the genome, we want to // match that convention for the breakpoint. However, // we can't actually change the bp1 and bp2 ordering // since this is set by the alignment orderings on the contig // not on the genome. So can make a dummy swap just for purposes of // finding the matching discorantcluster // on the GENOME const int PAD = 100; GenomicRegion bp1 = (b1.gr < b2.gr) ? b1.gr : b2.gr; GenomicRegion bp2 = (b1.gr < b2.gr) ? b2.gr : b1.gr; bp1.Pad(PAD); bp2.Pad(PAD); assert(! (bp1 > bp2) ); for (auto& [_,d] : dmap) { // checks basic things about discordant cluster if (!d.valid()) continue; assert(d.m_reg1 < d.m_reg2); // do either breakends overlap bool bp1reg1 = bp1.GetOverlap(d.m_reg1) > 0; bool bp2reg2 = bp2.GetOverlap(d.m_reg2) > 0; bool s1 = bp1.strand == d.m_reg1.strand; bool s2 = bp2.strand == d.m_reg2.strand; // get the edge of the cluster // if its a forward alignment discordant read, then get "right" most // if its a reverse alignment discordant read, then get "left" most int pos1 = d.m_reg1.strand == '+' ? d.m_reg1.pos2 : d.m_reg1.pos1; int pos2 = d.m_reg2.strand == '+' ? d.m_reg2.pos2 : d.m_reg2.pos1; // both sides overlap and both orientions agree bool pass = bp1reg1 && bp2reg2 && s1 && s2; // check that the ends are not way off // if (std::abs(pos1 - b1.gr.pos1) > PAD || // std::abs(pos2 - b2.gr.pos1) > PAD) // pass = false; // std::cerr << b1.gr << " - " << b2.gr << std::endl; // std::cerr << " cname " << cname << " pad " << PAD << " pass " << pass << " DC pos1 " << pos1 << " DC pos2 " << pos2 << // " s1 " << s1 << " s2 " << s2 << " bp1reg1 " << bp1reg1 << " bp2reg2 " << bp2reg2 << " diff1 " << std::abs(pos1 - b1.gr.pos1) << // " diff2 " << std::abs(pos2 - b2.gr.pos1) << " bp pos1 " << b1.gr.pos1 << " bp pos2 " << b2.gr.pos1 << " " << // d.toFileString(sc->header, false) << std::endl; if (!pass) continue; // check that we haven't already added a cluster to this breakpoint // if so, chose the one with more normal support first, then more // tumor support second if (dc.isEmpty() || (dc.ncount < d.ncount) || (dc.ncount==d.ncount && dc.tcount < d.tcount)) { dc = d; d.m_contig = cname; // add the read counts from DiscordantCluster to this BreakPoint // the DiscordantCluster "counts" are created at DiscordantCluster constructor assert(!d.counts.empty()); for (auto& c : d.counts) { allele.at(c.first).disc = c.second; } // add the discordant reads names to supporting reads for each sampleinfo // reads for (auto& [_, read] : d.reads) { allele.at(read->Prefix()) .supporting_reads .insert(read->UniqueName()); } // mates (and fix the typo in your assert) for (auto& [_, mate] : d.mates) { allele.at(mate->Prefix()) .supporting_reads .insert(mate->UniqueName()); } // update the variant support read counts per bam // (i.e. per SampleInfo object in our BreakPoint "alleles" structure) for (auto& [_,al] : allele) al.UpdateAltCounts(); } } // make sure not claiming discordant + assembly for small spans if ( (getSpan() < 2 * sc->insertsize && getSpan() >= 0) && b1.gr.strand == '+' && b2.gr.strand == '-') svtype = SVType::ASSMB; else svtype = SVType::ASDIS; } // void BreakPoint::set_evidence() { // // if we are in refilter, then this is already set // if (!evidence.empty()) // return; // bool isdisc = (dc.tcount + dc.ncount) != 0; // if (num_align == 1) // evidence = "INDEL"; // else if ( isdisc && svtype == SVType::REARRANGEMENT) //!complex && num_align > 0) // evidence = "ASDIS"; // else if ( isdisc && num_align < 3) // evidence = "DSCRD"; // else if (svtype == SVType::REARRANGEMENT) // evidence = "ASSMB"; // else if (svtype == SVType::TSI_GLOBAL) ///complex && !complex_local) // is A-C of an ABC // evidence = "TSI_G"; // else if (svtype == SVType::TSI_LOCAL) // //else if (complex && complex_local) // is AB or BC of an ABC // evidence = "TSI_L"; // assert(evidence.length()); // } void BreakPoint::score_assembly_only() { assert(local != LocalAlignment::NOTSET); assert(secondary != -1); int span = getSpan(); int num_split = t.split + n.split; int cov_span = split_cov_bounds.second - split_cov_bounds.first ; // check for high repeats // bool hi_rep = false; // for (auto& rr : hirepr) // if (seq.find(rr) != std::string::npos) // hi_rep = true; float as_frac1 = static_cast(b1.as) / static_cast(b1.matchlen); float sub_frac1 = static_cast(b1.sub) / static_cast(b1.matchlen); float as_frac2 = static_cast(b2.as) / static_cast(b2.matchlen); float sub_frac2 = static_cast(b2.sub) / static_cast(b2.matchlen); const double min_cc = std::min(b1.contig_conf, b2.contig_conf); if (local == LocalAlignment::FROM_DISTANT_REGION && svtype != SVType::TSI_LOCAL) // added this back in v71 // issue is that if a read is secondary aligned, it could be // aligned to way off region. Saw cases where this happend in tumor // and not normal, so false-called germline event as somatic. confidence = "NOLOCAL"; else if (local == LocalAlignment::NONVAR_LOCAL_REALIGNMENT) confidence = "LOCALMATCH"; else if ( num_split > 1 && ( (cov_span <= (sc->readlen + 5 ) && cov_span > 0) || cov_span < 0) ) confidence = "DUPREADS"; // the same sequences keep covering the split else if (homology.length() >= 20 && (span > 1500 || span == -1) && std::max(b1.mapq, b2.mapq) < 60) confidence = "NODISC"; else if ((int)seq.length() < sc->readlen + 30) confidence = "TOOSHORT"; else if (a.split < 7 && (span > 1500 || span == -1)) // large and inter chrom need 7+ confidence = "NODISC"; else if (std::max(b1.mapq, b2.mapq) <= 40 || std::min(b1.mapq, b2.mapq) <= 10) confidence = "LOWMAPQ"; else if ( std::min(b1.mapq, b2.mapq) <= 30 && a.split <= 8 ) confidence = "LOWMAPQ"; else if (std::max(b1.nm, b2.nm) >= 10 || std::min(as_frac1, as_frac2) < 0.8) confidence = "LOWAS"; else if ( (std::max(b1.nm, b2.nm) >= 3 || std::min(as_frac1, as_frac2) < 0.85) && getSpan() < 0 ) confidence = "LOWAS"; //else if ((double)aligned_covered / (double)seq.length() < 0.80) // less than 80% of read is covered by some alignment // confidence = "LOWAS"; else if ( (b1.matchlen < 50 && b1.mapq < 60) || (b2.matchlen < 50 && b2.mapq < 60) ) confidence = "LOWMAPQ"; else if ( std::min(b1.nm, b2.nm) >= 10) confidence = "LOWMAPQ"; else if (a.split <= 3 && span <= 1500 && span != -1) // small with little split confidence = "LOWSPLITSMALL"; else if (b1.gr.chr != b2.gr.chr && std::min(b1.matchlen, b2.matchlen) < 60) // inter-chr, but no disc reads, weird alignment confidence = "LOWICSUPPORT"; else if (b1.gr.chr != b2.gr.chr && std::max(b1.nm, b2.nm) >= 3 && std::min(b1.matchlen, b2.matchlen) < 150) // inter-chr, but no disc reads, and too many nm confidence = "LOWICSUPPORT"; else if (std::min(b1.matchlen, b2.matchlen) < 0.6 * sc->readlen) confidence = "LOWICSUPPORT"; else if (std::min(b1.mapq, b2.mapq) < 50 && b1.gr.chr != b2.gr.chr) // interchr need good mapq for assembly only confidence = "LOWMAPQ"; else if (std::min(b1.matchlen, b2.matchlen) < 40 || (svtype == SVType::TSI_LOCAL && std::min(b1.matchlen, b2.matchlen) < 100)) // not enough evidence confidence = "LOWMATCHLEN"; else if (std::min(b1.matchlen - homology.length(), b2.matchlen - homology.length()) < 40) confidence = "LOWMATCHLEN"; else if ((/*b1.sub_n && */b1.mapq < 30) || (/*b2.sub_n && */b2.mapq < 30)) confidence = "LOWMAPQ"; else if (secondary && std::min(b1.mapq, b2.mapq) < 30) confidence = "SECONDARY"; // else if ((repeat_seq.length() >= 10 && std::max(t.split, n.split) < 7) || hi_rep) // confidence = "WEAKSUPPORTHIREP"; else if (num_split < 6 && getSpan() < 300 && b1.gr.strand==b2.gr.strand) confidence = "LOWQINVERSION"; // else if ( (b1.matchlen - b1.simple < 15 || b2.matchlen - b2.simple < 15) ) // confidence = "SIMPLESEQUENCE"; else if ((int)homology.length() * HOMOLOGY_FACTOR > sc->readlen) // if homology is too high, tough to tell from mis-assemly confidence = "HIGHHOMOLOGY"; else if (min_cc < svaba::kContigConfPassThreshold) confidence = "WEAKCONTIG"; else confidence = "PASS"; assert(confidence.length()); } void BreakPoint::score_somatic(double error_fwd) { // this is LOD of normal being REF vs AF = 0.5+ // We want this to be high for a somatic call // NB: this is almost the flip of LOD alt vs ref. // where high log-odds is more likely there is // a variant. It makes sense, you always think of // log-odds as "higher-is-better", but are asking // two different things: // LO - is this variant versus ref // LO_n - is this ref *in the normal* = somatic // this is a fully Bayesian approach -- if all normals strongly support ref, the sum is huge. // Cons: one bad normal (low or negative LO_n) can be overwhelmed by many good normals. // Commented out since favor conservative approach // double somatic_lod = 0.0; // for (const auto& [pref, al] : allele) { // if (pref[0] == 'n') { // somatic_lod += al.LO_n; // } //} // this is a more conservative approach - if any normal BAM shows evidence for // variant, then get the somatic score from that int thiscov_n = n.cov; if (n.alt >= n.cov) thiscov_n = n.alt; int thiscov_t = t.cov; if (t.alt >= t.cov) thiscov_t = t.alt; // now to be conservative, also count normal near-cigar matches // as alt reads int normal_cigar = n.cigar + n.cigar_near; // adjust the alt count if (n.alt < normal_cigar) n.alt = normal_cigar; if (t.alt < t.split) t.alt = t.split; if (t.alt < t.cigar) t.alt = t.cigar; if (t.alt < t.split) t.alt = t.split; double a_cov_n = (double)thiscov_n * (double)(sc->readlen - 2 * T_SPLIT_BUFF)/sc->readlen; double a_cov_t = (double)thiscov_t * (double)(sc->readlen - 2 * T_SPLIT_BUFF)/sc->readlen; double scaled_alt_n = std::min((double)n.alt, a_cov_n); double scaled_ref_n = a_cov_n- scaled_alt_n; double scaled_alt_t = std::min((double)t.alt, a_cov_t); double scaled_ref_t = a_cov_t- scaled_alt_t; double error_rev = 1e-6; LO_s = SvabaModels::SomaticLOD(scaled_alt_n, a_cov_n, scaled_alt_t, a_cov_t, error_fwd, error_rev); if (false) std::cerr << std::fixed << std::setprecision(6) << "[DEBUG] somatic_lod=" << LO_s << " | n.cov=" << n.cov << " | n.alt=" << n.alt << " | n.cigar=" << n.cigar << " | t.cov=" << t.cov << " | t.alt=" << t.alt << " | t.cigar=" << t.cigar << " | t.split=" << t.split << " | thiscov_n=" << thiscov_n << " | thiscov_t=" << thiscov_t << " | readlen=" << sc->readlen << " | T_SPLIT_BUFF=" << T_SPLIT_BUFF << " | a_cov_n=" << a_cov_n << " | a_cov_t=" << a_cov_t << " | scaled_alt_n=" << scaled_alt_n << " | scaled_ref_n=" << scaled_ref_n << " | scaled_alt_t=" << scaled_alt_t << " | scaled_ref_t=" << scaled_ref_t << " | error_fwd=" << error_fwd << " | error_rev=" << error_rev << " | somatic_LOD=" << LO_s << std::endl; /*for (const auto& [pref, al] : allele) { if (pref[0] == 'n') { LO_s = std::min(somatic_lod, al.LO_n); } }*/ // find the somatic to normal ratio double ratio = n.alt > 0 ? (double)t.alt / (double)n.alt : 100; if (svtype == SVType::INDEL) { // somatic score is just true or false for now // use the specified cutoff for indels, taking into account whether at dbsnp site double cutoff = (rs.empty() || rs=="x") ? sc->opts.lodSomatic : sc->opts.lodSomaticDb; somatic = LO_s > cutoff ? SomaticState::SOMATIC_LOD : SomaticState::NORMAL_LOD; // can't call somatic with 5+ normal reads or <5x more tum than norm ALT //if ((ratio <= 12 && n.cov > 10) || n.alt > 5) //if (n.alt > 5) // for SVs, use LOD and then also a hard cutoff // for gauging somatic vs germline } else { // passes somatic = (LO_s > sc->opts.lodSomatic) ? SomaticState::SOMATIC_LOD : SomaticState::NORMAL_LOD; // require no reads in normal or MAX 1 read and tons of tumor reads if (ratio < MIN_SOMATIC_RATIO || n.split > 2 && dc.ncount > 1) somatic = SomaticState::FAILED; } // set germline if single normal read in discordant clsuter if (svtype == SVType::DSCRD && n.alt > 0 && somatic == SomaticState::SOMATIC_LOD) somatic = SomaticState::FAILED; } void BreakPoint::score_assembly_dscrd() { int this_mapq1 = b1.mapq; int this_mapq2 = b2.mapq; int span = getSpan(); bool germ = dc.ncount > 0 || n.split > 0; int max_a_mapq = std::max(this_mapq1, dc.mapq1); int max_b_mapq = std::max(this_mapq2, dc.mapq2); const double min_cc = std::min(b1.contig_conf, b2.contig_conf); // how much of contig is covered by split reads int cov_span = split_cov_bounds.second - split_cov_bounds.first ; // set the total number of supporting reads for tumor / normal // these alt counts should already be one qname per alt (ie no dupes) int t_reads = 0; int n_reads = 0; for (auto& [pref,al] : allele) { if (pref.at(0) == 't') t_reads += al.alt; else n_reads += al.alt; } int total_count = t_reads + n_reads; //n.split + t.split + dc.ncount + dc.tcount; int disc_count = dc.tcount + dc.ncount; //int hq = dc.tcount_hq + dc.ncount_hq; if ( (max_a_mapq < 30 && b1.local == LocalAlignment::FROM_DISTANT_REGION) || (max_b_mapq < 30 && b2.local == LocalAlignment::FROM_DISTANT_REGION) || (/*b1.sub_n > 7 && */b1.mapq < 10 && b1.local == LocalAlignment::FROM_DISTANT_REGION) || (/*b2.sub_n > 7 && */b2.mapq < 10 && b2.local == LocalAlignment::FROM_DISTANT_REGION) ) confidence = "LOWMAPQ"; else if ( std::min(b1.nm, b2.nm) >= 10) confidence = "LOWMAPQ"; else if ( std::min(b1.mapq, b2.mapq) < 10/* && std::min(dc.mapq1, dc.mapq2) < 10 */) confidence = "LOWMAPQ"; else if ( total_count < 4 || (std::max(t.split, n.split) <= 5 && cov_span < (sc->readlen + 5) && disc_count < 7) ) confidence = "LOWSUPPORT"; else if ( total_count < 15 && germ && span == -1) // be super strict about germline interchrom confidence = "LOWSUPPORT"; else if ( std::min(b1.matchlen, b2.matchlen) < 50 && b1.gr.chr != b2.gr.chr ) confidence = "LOWICSUPPORT"; else if (secondary && getSpan() < 1000) // local alignments are more likely to be false for alignemnts with secondary mappings confidence = "SECONDARY"; /*else if (dc.tcount_hq + dc.ncount_hq < 3) { // multimathces are bad if we don't have good disc support too if ( ((b1.sub_n && dc.mapq1 < 1) || (b2.sub_n && dc.mapq2 < 1)) ) confidence = "MULTIMATCH"; else if ( ( (secondary || b1.sub_n > 1) && !b1.local) && ( std::min(max_a_mapq, max_b_mapq) < 30 || std::max(dc.tcount, dc.ncount) < 10)) confidence = "SECONDARY"; else confidence = "PASS"; }*/ else if (min_cc < svaba::kContigConfPassThreshold) confidence = "WEAKCONTIG"; else confidence = "PASS"; } void BreakPoint::score_dscrd() { t.alt = dc.tcount; n.alt = dc.ncount; int nm_count = std::max(dc.nm1, dc.nm2); int disc_count = dc.ncount + dc.tcount; //int hq_disc_count = dc.ncount_hq + dc.tcount_hq; int disc_cutoff = 8; //int hq_disc_cutoff = disc_count >= 10 ? 3 : 5; // reads with both pair-mates have high MAPQ const int min_dscrd_size = 2000; if (getSpan() > 0 && (getSpan() < min_dscrd_size && b1.gr.strand == '+' && b2.gr.strand == '-')) // restrict span for del (FR) type confidence = "LOWSPANDSCRD"; else if ((disc_count < disc_cutoff || std::min(dc.mapq1, dc.mapq2) < 15)) confidence = "LOWMAPQDISC"; else if (nm_count >= 4) confidence = "HIGHNM"; else if (!dc.m_id_competing.empty()) confidence = "COMPETEDISC"; else if ( disc_count < disc_cutoff) confidence = "WEAKDISC"; else confidence = "PASS"; assert(confidence.length()); } void BreakPoint::score_indel() { assert(b1.mapq == b2.mapq); bool is_refilter = !confidence.empty(); // act differently if this is refilter run // for refilter, only consider ones that were low lod or PASS // ie ones that with a different lod threshold may be changed // if confidence is empty, this is original run so keep going if (confidence != "LOWLOD" && confidence != "PASS" && is_refilter) return; double max_lod = 0; for (const auto& [_,al] : allele) max_lod = std::max(max_lod, al.LO); const double min_cc = std::min(b1.contig_conf, b2.contig_conf); // check if homozygous reference is most likely GT // bool homozygous_ref = true; // for (auto& [_,al] : allele) { // if (al.genotype_likelihoods[0] > al.genotype_likelihoods[1] || // al.genotype_likelihoods[0] > al.genotype_likelihoods[2]) // homozygous_ref = false; // } // get the allelic ractions, just for VLOWAF filter double af_t = t.cov > 0 ? (double)t.alt / (double)t.cov : 0; double af_n = n.cov > 0 ? (double)n.alt / (double)n.cov : 0; double af = std::max(af_t, af_n); assert(b1.local != LocalAlignment::NOTSET); if (b1.local != LocalAlignment::FROM_LOCAL_REGION) confidence="NOLOCAL"; if (b1.mapq < 10) confidence="LOWMAPQ"; //else if (!is_refilter && (double)aligned_covered / (double)seq.length() < 0.80) // less than 80% of read is covered by some alignment // confidence = "LOWAS"; else if ((/*b1.sub_n && */b1.mapq < 30) || (/*b2.sub_n && */b2.mapq < 30)) confidence = "LOWMAPQ"; else if (max_lod < sc->opts.lod && rs.empty()) // non db snp site confidence = "LOWLOD"; else if (max_lod < sc->opts.lodDb && !rs.empty()) // be more permissive for dbsnp site confidence = "LOWLOD"; else if (!is_refilter && std::min(left_match, right_match) < 20) confidence = "SHORTALIGNMENT"; // no conf in indel if match on either side is too small else if (min_cc < svaba::kContigConfPassThreshold) confidence = "WEAKCONTIG"; else confidence="PASS"; SVABA_TRACE(cname, "TP16 score_indel: confidence=" << confidence << " mapq=" << b1.mapq << " max_lod=" << max_lod << " left_match=" << left_match << " right_match=" << right_match << " min_cc=" << min_cc << " af_t=" << af_t << " af_n=" << af_n << " t.split=" << t.split << " n.split=" << n.split << " t.alt=" << t.alt << " t.cov=" << t.cov << " n.alt=" << n.alt << " n.cov=" << n.cov); for (const auto& [pref,al] : allele) { SVABA_TRACE(cname, " " << pref << ": LO=" << al.LO << " split=" << al.split << " alt=" << al.alt << " cov=" << al.cov); } //debugprint // std::cerr <<" MAPQ " << b1.mapq << " b1.sub_n " << b1.sub_n << // " b2.sub_n " << b2.sub_n << " max_lod " << max_lod << " af " << af << " is_refilter " << is_refilter << // std::endl; // for (const auto& [pref,al] : allele) { // std::cerr << " LOD SCORES " << pref << " - " << al.LO << std::endl; // std::cerr << " PL likelihood 0/0 " << al.phred_likelihoods[0] << // " PL likelihood 0/1 " << al.phred_likelihoods[1] << // " PL likelihood 1/1 " << al.phred_likelihoods[2] << std::endl; // } // std::cerr << "AF T " << af_t << " AF N " << af_n << " AF " << af << std::endl; // std::cerr << " confidene " << confidence << std::endl; } // LOD cutoff is just whether this is ref / alt // LOD cutoff dbsnp is same, but at DBSNP site (should be lower threshold since we have prior) // LOD SOM cutoff is cutoff for whether NORMAL BAM(s) are AF = 0 // LOD SOM DBSNP cutoff same as above, but at DBSNP site (should be HIGHER threshold, // since we have prior that it's NOT somatic void BreakPoint::scoreBreakpoint() { // some sanity checking assert(svtype != SVType::NOTSET); if (!confidence.empty() && confidence != "BLACKLIST") throw std::runtime_error("BreakPoint confidence already set (unexpected)"); // set the error rate // depends on teh repeat context double error_rate = (repeat_seq.length() > 10) ? MAX_ERROR : ERROR_RATES[repeat_seq.length()]; // first calculate log-odds and genotype likelihoods for each individual bam std::vector lods; for (auto& [pref,al] : allele) { al.modelSelection(error_rate, sc->readlen); lods.push_back(al.LO); } ///// // Calculate a site-level quality score ///// // Sum the LODs across all your BAMs (assuming independence) to get a combined log-odds double lod_site = std::accumulate(lods.begin(), lods.end(), 0.0); // Convert that back to an error probability double p_err = 1.0 / (1.0 + std::pow(10.0, lod_site)); // Phred-scale (-log10) to get a QUAL score int qual_calc = static_cast(std::lround(-10.0 * std::log10(p_err))); // Cap at 99 quality = std::min({qual_calc, 99}); // combine the all tumor bam support and normal bam support for (auto& [pref, al] : allele) { if (pref.at(0) == 't') { t = t + al; } else { n = n + al; } } // combine all read support regardless of tumor / normal a = t + n; // std::cerr << " T MODEL " << error_rate << std::endl; // t.modelSelection(error_rate, sc->readlen); // std::cerr << " N MODEL " << error_rate << std::endl; // n.modelSelection(error_rate, sc->readlen); // kludge. make sure we have included the DC counts (should have done this arleady...) if (svtype == SVType::DSCRD || svtype == SVType::ASDIS) { t.disc = dc.tcount; n.disc = dc.ncount; } // provide a scaled LOD that accounts for MAPQ. Heuristic, not really used //int mapqr1 = b1.local ? std::max(30, b1.mapq) : b1.mapq; // if local, don't drop below 30 //int mapqr2 = b2.local ? std::max(30, b2.mapq) : b2.mapq; // if local (aligns to within window), don't drop below 30 //double scale = (double)( std::min(mapqr1, mapqr2) - 2 * b1.nm) / (double)60; //for (auto& i : allele) // i.second.SLO = i.second.LO * scale; //t.SLO = t.LO * scale; //n.SLO = n.LO * scale; //a.SLO = a.LO * scale; // // sanity check // int split =0; // for (auto& i : allele) // split += i.second.split; // assert( (split == 0 && t.split == 0 && n.split==0) || // (split > 0 && (t.split + n.split > 0))); SVABA_TRACE(cname, "TP13 scoreBreakpoint: svtype=" << (int)svtype << " confidence=" << confidence << " t.split=" << t.split << " n.split=" << n.split << " dc.t=" << dc.tcount << " dc.n=" << dc.ncount << " quality=" << quality); // if already overlapping blacklist, then we're done if (confidence == "BLACKLIST") return; // do the scoring bool iscomplex = svtype == SVType::TSI_LOCAL || svtype == SVType::TSI_GLOBAL; // score rearrangements of various kinds if (svtype == SVType::ASSMB || (iscomplex && (dc.ncount + dc.tcount)==0)) score_assembly_only(); else if (svtype == SVType::ASDIS || (iscomplex && (dc.ncount + dc.tcount))) score_assembly_dscrd(); else if (svtype == SVType::DSCRD) score_dscrd(); // it failed assembly filters, but might pass discordant filters // if (evidence == "ASDIS" && confidence != "PASS") { // evidence = "DSCRD"; // score_dscrd(min_dscrd_size); // } else if (svtype == SVType::INDEL) score_indel(); else throw std::runtime_error("no scoring method called in BreakPoint::score_breakpoints"); // set the somatic_score field to true or false score_somatic(error_rate); // quality score is odds that read is // non-homozygous reference (max 99) // quality = 0; // for (auto& a : allele) // quality = std::max(a.second.NH_GQ, (double)quality); } void BreakPoint::setRefAlt(const RefGenome* main_rg, const BamHeader& header) { assert(!main_rg->IsEmpty()); assert(ref.empty()); assert(alt.empty()); assert(svtype != SVType::NOTSET); if (svtype != SVType::INDEL) { try { // get the reference for BP1 ref = main_rg->QueryRegion(b1.gr.ChrName(header), b1.gr.pos1, b1.gr.pos1); } catch (const std::invalid_argument& ia) {} try { alt = main_rg->QueryRegion(b2.gr.ChrName(header), b2.gr.pos1, b2.gr.pos1); } catch (const std::invalid_argument& ia) {} } else { // insertion if (!insertion.empty()) { try { // we store b1.gr internally as zero-indexed, // to be consistent with htslib, so since this passed // to htslib query, keep as zero-indexed ref = main_rg->QueryRegion(b1.gr.ChrName(header), b1.gr.pos1, b1.gr.pos1); } catch (const std::invalid_argument& ia) { ref = "N"; std::cerr << "Caught exception in BreakPoint:setRefAlt for indel ref: " << ia.what() << std::endl; } // alt alt = ref + insertion; // deletion } else { // reference assert(b2.gr.pos1 - b1.gr.pos1 - 1 >= 0); try { // again, 0-based, see above comment ref = main_rg->QueryRegion(b1.gr.ChrName(header), b1.gr.pos1, b2.gr.pos2); // if (cname == "c_1_49001_74001_14C") // std::cerr << " REF : " << ref << " b1 " << b1.gr << // " b2 " << b2.gr << " cname " << cname << std::endl; } catch (const std::invalid_argument& ia) { ref = std::string(std::abs(b1.gr.pos1 - b2.gr.pos1), 'N'); std::cerr << "Caught exception in BreakPoint:setRefAlt for indel ref: " << ia.what() << std::endl; } alt = ref.substr(0,1); } } if (ref.empty()) { ref = "N"; } if (alt.empty()) { alt = "N"; } } int BreakPoint::getSpan() const { assert(svtype != SVType::NOTSET); if (svtype == SVType::INDEL && insertion.empty()) return b2.gr.pos1 - b1.gr.pos1; if (svtype == SVType::INDEL && !insertion.empty()) return insertion.length(); if (b1.gr.chr == b2.gr.chr) return abs(b2.gr.pos1-b1.gr.pos1); // interchromosomal else return -1; } // ReducedBreakPoint::ReducedBreakPoint(const std::string &line, const SeqLib::BamHeader& h) { // if (h.isEmpty()) { // std::cerr << "ReducedBreakPoint::ReducedBreakPoint - Must supply non-empty header" << std::endl; // exit(EXIT_FAILURE); // } // std::istringstream iss(line); // std::string val; // size_t count = 0; // ref = nullptr; // alt = nullptr; // cname = nullptr; // evidence = nullptr; // confidence = nullptr; // insertion = nullptr; // homology = nullptr; // //float afn, aft; // std::string ref_s, alt_s, cname_s, insertion_s, homology_s, evidence_s, confidence_s, read_names_s, bxtable_s; // std::string chr1, pos1, chr2, pos2, repeat_s; // char strand1 = '*', strand2 = '*'; // while (std::getline(iss, val, '\t')) { // try{ // switch(++count) { // case 1: chr1 = val; break; // case 2: pos1 = val; break; // case 3: assert(val.length()); strand1 = val.at(0); break; // case 4: chr2 = val; break; // case 5: pos2 = val; break; // case 6: assert(val.length()); strand2 = val.at(0); break; // case 7: // ref_s = val; // break; // case 8: // alt_s = val; // break; // case 9: break; //span = stoi(val); break; // automatically calculated // case 10: //mapq1 // b1 = ReducedBreakEnd(GenomicRegion(chr1, pos1, pos1, h), std::stoi(val)); b1.gr.strand = strand1; break; // case 11: //mapq2 // b2 = ReducedBreakEnd(GenomicRegion(chr2, pos2, pos2, h), std::stoi(val)); b2.gr.strand = strand2; break; // case 12: b1.nm = INTNSTOI(val,255); break; // case 13: b2.nm = INTNSTOI(val,255); break; // case 14: dc.mapq1 = INTNSTOI(val, 255); break; // case 15: dc.mapq2 = INTNSTOI(val, 255); break; // case 16: break; //split (not needed, since in genotype) // case 17: break; //cigar (not needed, since in genotype) // case 18: break; //alt (not needed, since in genotype) // case 19: cov = INTNSTOI(val,65535); break; // case 20: b1.sub_n = INTNSTOI(val,255); break; // case 21: b2.sub_n = INTNSTOI(val,255); break; // case 22: // homology_s = val; // break; // case 23: // insertion_s = val; // break; // case 24: cname_s = val; break; // case 25: num_align = std::min((int)31, std::stoi(val)); break; // case 26: // pass = val == "PASS"; // confidence_s = val; // break; // case 27: // evidence_s = val; // indel = val == "INDEL"; // imprecise = val == "DSCRD"; // break; // case 28: quality = std::stod(val); break; //std::min((int)255,std::stoi(val)); break; // case 29: secondary = val == "1" ? 1 : 0; // case 30: somatic_score = std::stod(val); break; // case 31: LO_s = std::stod(val); break; // case 32: true_lod = std::stod(val); break; // case 33: pon = std::min(255,std::stoi(val)); break; // case 34: repeat_s = val; break; // repeat_seq // case 35: blacklist = (val=="1" ? 1 : 0); break; // case 36: dbsnp = val != "x"; break; // case 37: read_names_s = val; break; //reads // case 38: bxtable_s = val; break; //bx tags // default: // format_s.push_back(val); // } // } catch(...) { // std::cerr << "caught stoi/stod/stof error on: " << val << " for count " << count << std::endl; // std::cerr << line << std::endl; // exit(1); // } // } // confidence = __string_alloc2char(confidence_s, confidence); // evidence = __string_alloc2char(evidence_s, evidence); // insertion = __string_alloc2char(insertion_s, insertion); // homology = __string_alloc2char(homology_s, homology); // cname = __string_alloc2char(cname_s, cname); // ref = __string_alloc2char(ref_s, ref); // alt = __string_alloc2char(alt_s, alt); // repeat = repeat_s.empty() ? nullptr : __string_alloc2char(repeat_s, repeat); // if (somatic_score && confidence_s == "PASS") // read_names = read_names_s; // == "x" ? nullptr : __string_alloc2char(read_names_s, read_names); // bxtable = bxtable_s; // } void BreakPoint::SampleInfo::modelSelection(double er, int readlen) { // can't have more alt reads than total reads // well you can for SVs... // adjust the coverage to be more in line with restrictions on ALT. // namely that ALT reads must overlap the variant site by more than T_SPLIT_BUFF // bases, but the raw cov calc does not take this into account. Therefore, adjust here // if (readlen) { double a_cov = (double)cov * (double)(readlen - 2 * T_SPLIT_BUFF)/readlen; a_cov = a_cov < 0 ? 0 : a_cov; // } else { // a_cov = thiscov; // } af = a_cov > 0 ? (double)alt / (double)a_cov : 1; af = af > 1 ? 1 : af; // mutect log liklihood against error // how likely to see these ALT counts if true AF is af // vs how likely to see these ALT counts if true AF is 0 // and all the ALTs are just errors. // The higher the error rate, the more negative ll_alt will go, // which will drive LO lower and decrease our confidence. // A high er will also drive ll_err up (or less negative), since // it will be more likely to see ALT reads generated by errors // As ALT and COV go higher, we should see LO go higher because // the indiviual calcs will have more confidence. Ultimately, // LO will represent the log likeihood that the variant is AF = af // vs AF = 0 double scaled_alt = std::min((double)alt, a_cov); double scaled_ref = a_cov - scaled_alt; // assume indels don't back-mutate as a sequencing error back to ref // but it's good to have this non-zero, so that with the scaling // tricks above, if we do get a non-zero ref count but var af = 1 // (which technically isn't mathematically allowed), then having some // non-zero chance that the ref is a back-mutate makes the LO not // become uncomputable (which would revert to -1e12 which is not really what we want) double er_back = 0.000001; double ll_alt = SvabaModels::LogLikelihood(scaled_ref, scaled_alt, af, er, er_back); double ll_err = SvabaModels::LogLikelihood(scaled_ref, scaled_alt, 0 , er, er_back); // likelihood that variant is actually true REF //std::cerr << "scaled_ref " << scaled_ref << " scaled_alt " << scaled_alt << " af " << af << " er " << er << " er back " << er_back << " ll_alt " << ll_alt << " ll_err " << ll_err << std::endl; // std::cerr << "SCALD REF " << scaled_ref << " scaled alt " << // scaled_alt << " af " << af << " ll_ALT " << ll_alt << // " ll_err " << ll_err << " scaled af " << scaled_af << std::endl; LO = ll_alt - ll_err; // mutetct log likelihood normal // er = 0.0005; // make this low, so that ALT in REF is rare and NORM in TUM gives low somatic prob // actually, dont' worry about it too much. 3+ alt in ref excludes somatic anyways. // so a high LO_n for the normal means that we are very confident that site is REF only in // normal sample. This is why LO_n from the normal can be used as a discriminant for // germline vs somatic. eg if somatic_lod = normal.LO_n is above a threshold X // or above a larger threshold XX if at DBSNP site, then we accept as somatic // LO_n should not be used for setting the confidence that something is real, just the // confidence that it is somatic // NB: the likelihood that the variant is actually a ref, and any alt reads are explained by errors, is ll_err. // so ll_err = ll_ref_norm // NB: so it's a bit confusing here, but even though we are calculating the LO_n for // any sample (tumor, normal, combined) that is passed, we are only interested in (and will use) // normal.LO_n. This becomes the somatic score, as higher LO_n means it is more likely that the // variant, specifically in the normal, is explained by sequencing errors with a ground-truth of not-present // than by a germline indel. For the tumor, LO_n is not really meaningful, so we look at LO in general for // whether the mutation is around AT ALL. double ll_alt_norm = SvabaModels::LogLikelihood(scaled_ref, scaled_alt, std::max(af, 0.5), er, er_back); // likelihood that variant is at AF >= 0.5 (as expected for germline) LO_n = ll_err - ll_alt_norm; // higher number means more likely to be AF = 0 (ref) than AF = 0.5 (alt). // genotype calculation as provided in // http://bioinformatics.oxfordjournals.org/content/early/2011/09/08/bioinformatics.btr509.full.pdf+html //int scaled_cov = std::floor((double)cov * 0.90); //int this_alt = std::min(alt, scaled_cov); genotype_likelihoods[0] = SvabaModels::GenotypeLikelihoods(2, er, scaled_alt, a_cov); // 0/0 genotype_likelihoods[1] = SvabaModels::GenotypeLikelihoods(1, er, scaled_alt, a_cov); // 0/1 genotype_likelihoods[2] = SvabaModels::GenotypeLikelihoods(0, er, scaled_alt, a_cov); // 1/1 //debugprint //std::cerr << " ALT " << alt << " scaled alt " << scaled_alt << " ER " << er << " A_COV " << a_cov << // " 0/0 " << genotype_likelihoods[0] << " 0/1 " << genotype_likelihoods[1] << // " 1/1 " << genotype_likelihoods[2] << " LOD " << LO << " LO_n " << LO_n << // " af " << af << std::endl; double max_likelihood = *std::max_element(genotype_likelihoods.begin(), genotype_likelihoods.end()); if (max_likelihood == genotype_likelihoods[0]) genotype = "0/0"; else if (max_likelihood == genotype_likelihoods[1]) genotype = "0/1"; else genotype = "1/1"; // compute PLs (phred-scaled likelihoods) for(int i = 0; i < 3; ++i) { // PL = 10 * (GL_i maxGL), rounded to nearest integer phred_likelihoods[i] = int(std::round( -10.0 * (genotype_likelihoods[i] - max_likelihood) )); } //debugprint // std::cerr << " thiscov " << thiscov << " alt " << alt << " cigar " << cigar << " split " << split << // " a_cov " << a_cov << " af " << af << " scaled_alt " << scaled_alt << " ll_alt " << ll_alt << // " ll_err " << ll_err << " LO " << LO << " ll_alt_norm " << // ll_alt_norm << " LO_n " << LO_n << " GT 0/0 " << // genotype_likelihoods[0] << " GT 0/1 " << genotype_likelihoods[1] << // " GT 1/1 " << genotype_likelihoods[2] << std::endl; // get the genotype quality GQ = SvabaModels::GenotypeQuality(phred_likelihoods); // get the genotype quality that it is not hom ref NH_GQ = std::min(phred_likelihoods[0], 99); } void BreakPoint::addCovs(const std::unordered_map& covs) { for (auto& [pref,i] : covs) { int c = 0; for (int j = -COVERAGE_AVG_BUFF; j <= COVERAGE_AVG_BUFF; ++j) { c += i->getCoverageAtPosition(b1.gr.chr, b1.gr.pos1 + j); c += i->getCoverageAtPosition(b2.gr.chr, b2.gr.pos1 + j); } allele.at(pref).cov = c / 2 / (COVERAGE_AVG_BUFF*2 + 1); } } // std::string BreakEnd::print(const SeqLib::BamHeader& h) const { // return gr.ToString(h) + " - " + id + " mapq " + std::to_string(mapq) + " subn " + std::to_string(sub_n); // } /* std::ostream& operator<<(std::ostream& out, const BreakEnd& b) { out << b.gr << " - " << b.id << " mapq " << b.mapq << " subn " << b.sub_n << std::endl; return out; }*/ std::string BreakPoint::SampleInfo::toFileString(SVType svtype) const { std::stringstream pl; pl << phred_likelihoods[0] << ',' << phred_likelihoods[1] << ',' << phred_likelihoods[2]; // std::stringstream gt; // gt << genotype_likelihoods[0] << ',' // << genotype_likelihoods[1] << ',' // << genotype_likelihoods[2]; std::stringstream ss; //GT:AD:DP:SR:DR:GQ:PL:LO:LO_n if (svtype == SVType::INDEL) ss << std::setprecision(4) << genotype << ":" << std::max(alt, cigar) << ":" << cov << ":" << split << ":" << cigar << ":" << GQ << ":" << pl.str() << ":" << LO << ":" << LO_n; else ss << std::setprecision(4) << genotype << ":" << alt << ":" << cov << ":" << split << ":" << disc << ":" << GQ << ":" << pl.str() << ":" << LO << ":" << LO_n; return ss.str(); } void BreakPoint::SampleInfo::FillFromString(const std::string& s, SVType svtype) { std::string val; int count = 0; std::istringstream input(s); while (std::getline(input, val, ':')) { // tmp fix if (val.find("nan") != std::string::npos) val = "0"; switch(++count) { case 1: genotype = val; break; case 2: alt = std::stoi(val); break; case 3: cov = std::stoi(val); break; case 4: split = std::stoi(val); break; case 5: if (svtype == SVType::INDEL) cigar = std::stoi(val); else disc = std::stoi(val); break; case 6: GQ = std::stod(val); break; case 7: phred_likelihoods = svabaUtils::parsePLString(val); break; case 8: LO = std::stod(val); break; case 9: LO_n = std::stod(val); break; } } } // void BreakPoint::__rep(int rep_num, std::string& rseq, bool fwd) { // // move left and right from breakend 1 // //int replen = 0; // //int curr_replen = 1; // rseq = ""; // // return if we are too close to the edge for some reason // if (b1.cpos > (int)seq.length() - 5) // return; // const int REP_BUFF = 50; // std::string sss = seq; // if (!fwd) // std::reverse(sss.begin(), sss.end()); // int cpos = b1.cpos + 1; // if (!fwd) // cpos = seq.length() - b1.cpos; // int i = cpos; //b1.cpos + 1; // int stop = std::min((int)seq.length() - 1, cpos + REP_BUFF); //fwd ? std::min((int)seq.length() - 1, b1.cpos + REP_BUFF) : std::max(0, b1.cpos - REP_BUFF); // int end = -1; // bool no_rep = true; // assert(stop - i < 80); // std::string c = sss.substr(cpos, std::min(rep_num, (int)seq.length() - cpos)); // i += rep_num; //*fr; // for (; i < stop; i+= rep_num) { // if (i >= (int)seq.length() - 1 || i + rep_num > (int)seq.length()) // shouldn't happen, but ensures no substr errors // break; // // terminating // if (c != sss.substr(i,rep_num)) { // || i >= (stop - rep_num)) { // end = i; // break; // } else { // no_rep = false; // //curr_replen += rep_num; // } // } // if (end == -1) // end = stop; // if (!no_rep) // rseq = sss.substr(cpos, std::min(end - cpos, (int)seq.length() - cpos)); // } std::string BreakEnd::hash(int offset) const { return (std::to_string(gr.chr) + ":" + std::to_string(gr.pos1 + offset)); } bool BreakPoint::hasMinimal() const { int count; count = dc.tcount + dc.ncount + t.split + n.split; if (local == LocalAlignment::FROM_DISTANT_REGION) return false; if (count >= 2) return true; return false; } std::string BreakPoint::getHashString() const { if (!isIndel()) return ""; bool isdel = insertion.length() == 0; std::string st = std::to_string(b1.gr.chr) + "_" + std::to_string(b1.gr.pos1) + "_" + std::to_string(this->getSpan()) + (isdel ? "D" : "I"); return st; } void BreakPoint::setLocal(const GenomicRegion& window) { b1.setLocal(window); b2.setLocal(window); assert(b1.local != LocalAlignment::NOTSET); assert(b2.local != LocalAlignment::NOTSET); // if this was already set as a non-variant local re-alignment // during alignedContig construction, then that has precedent if (local == LocalAlignment::NONVAR_LOCAL_REALIGNMENT) return; // set the BreakPoint level local flag if (b1.local == LocalAlignment::FROM_LOCAL_REGION || b2.local == LocalAlignment::FROM_LOCAL_REGION) local = LocalAlignment::FROM_LOCAL_REGION; else local = LocalAlignment::FROM_DISTANT_REGION; } void BreakEnd::setLocal(const GenomicRegion& window) { assert(local == LocalAlignment::NOTSET); if (gr.GetOverlap(window)) local = LocalAlignment::FROM_LOCAL_REGION; else local = LocalAlignment::FROM_DISTANT_REGION; } void BreakPoint::SampleInfo::UpdateAltCounts() { // get unique qnames std::unordered_set qn; for (auto& r : supporting_reads) { size_t posr = r.find("_", 5) + 1; // extract the qname from tXXX_XXX_QNAME qn.insert(r.substr(posr, r.length() - posr)); } // alt count is max of cigar or unique qnames (includes split and discordant) alt = std::max((int)qn.size(), cigar); } // bool ReducedBreakPoint::operator<(const ReducedBreakPoint& bp) const { // //ASDIS > ASSMB > COMP > DSCRD // if (std::strcmp(evidence,bp.evidence) < 0) // < // return true; // else if (std::strcmp(evidence, bp.evidence) > 0) // > // return false; // if (cov > bp.cov) // return true; // else if (cov < bp.cov) // return false; // //if (nsplit > bp.nsplit) // // return true; // //else if (nsplit < bp.nsplit) // // return false; // //if (tsplit > bp.tsplit) // // return true; // //else if (tsplit < bp.tsplit) // // return false; // //if (dc.ncount > bp.dc.ncount) // // return true; // //else if (dc.ncount < bp.dc.ncount) // // return false; // //if (dc.tcount > bp.dc.tcount) // // return true; // //else if (dc.tcount < bp.dc.tcount) // // return false; // // break the tie somehow // if (cname > bp.cname) // return true; // else if (cname < bp.cname) // return false; // return false; // } // std::ostream& operator<<(std::ostream& os, const ReducedBreakEnd& rbe) { // // Example format: [Chr Name: genomic_region (MapQ, SubN, NM)] // // Adjust formatting as needed // os << rbe.gr << " (" // << "MapQ: " << static_cast(rbe.mapq) << ", " // << "SubN: " << static_cast(rbe.sub_n) << ", " // << "NM: " << static_cast(rbe.nm) << ")]"; // return os; // } // make a breakpoint from a discordant cluster BreakPoint::BreakPoint(DiscordantCluster& tdc, DiscordantClusterMap& dmap, const GenomicRegion& region, const SvabaSharedConfig* sc_) : sc(sc_) { svtype = SVType::DSCRD; // instantiate the SampleInfo objects for each BAM for (auto const& p : sc->prefixes) { allele.try_emplace(p); } num_align = 0; dc = tdc; std::string chr_name1, chr_name2; // not based on aligmnent of contig, so set as NA (-1) secondary = -1; try { // if this throw error, it means that there are more chr in // reads than in reference chr_name1 = sc->header.IDtoName(dc.m_reg1.chr); chr_name2 = sc->header.IDtoName(dc.m_reg2.chr); // chr_name1 = bwa->ChrIDToName(dc.m_reg1.chr); //bwa->ChrIDToName(tdc.reads.begin()->second.ChrID()); // chr_name2 = bwa->ChrIDToName(dc.m_reg2.chr); //bwa->ChrIDToName(tdc.reads.begin()->second.ChrID()); } catch (...) { std::cerr << "Warning: Found mismatch between reference genome and BAM genome for discordant cluster " << dc.print(sc->header) << std::endl; chr_name1 = "Unknown"; chr_name2 = "Unknown"; } assert(chr_name1.length()); assert(chr_name2.length()); int pos1 = (dc.m_reg1.strand == '+') ? dc.m_reg1.pos2 : dc.m_reg1.pos1; int pos2 = (dc.m_reg2.strand == '+') ? dc.m_reg2.pos2 : dc.m_reg2.pos1; b1.gr = GenomicRegion(dc.m_reg1.chr, pos1, pos1); b2.gr = GenomicRegion(dc.m_reg2.chr, pos2, pos2); b1.mapq = dc.mapq1; b2.mapq = dc.mapq2; b1.gr.strand = dc.m_reg1.strand; b2.gr.strand = dc.m_reg2.strand; // set the alt counts, counting only unique qnames std::unordered_map> alt_counts; for (auto const& p : sc->prefixes) { alt_counts.try_emplace(p); } // add the supporting read info to alleles auto process = [this, &alt_counts](auto& container){ for (auto& [_, rec] : container) { const auto& prefix = rec->Prefix(); auto ait = allele.find(prefix); ait->second.supporting_reads.insert(rec->UniqueName()); auto act = alt_counts.find(prefix); act->second.insert(rec->Qname()); } }; process(dc.reads); process(dc.mates); // add the alt counts for (auto& [pref,al] : allele) { al.disc = alt_counts[pref].size(); //allele[i.first].supporting_reads.size(); al.UpdateAltCounts(); //i.second.alt = i.second.disc; } // give a unique id (OK to give an empty header here, since used internally) cname = dc.toRegionString(sc->header) + "__" + std::to_string(region.chr+1) + "_" + std::to_string(region.pos1) + "_" + std::to_string(region.pos2) + "D"; // check if another cluster overlaps, but different strands if (getSpan() > 800 || getSpan() == -1) { // only check for large events. for (auto& [_,d] : dmap) { // don't overlap if on different chr, or same event if (dc.m_reg1.chr != d.m_reg1.chr || dc.m_reg2.chr != d.m_reg2.chr || d.ID() == dc.ID()) continue; // isolate and pad GenomicRegion gr1 = d.m_reg1; GenomicRegion gr2 = d.m_reg2; gr1.Pad(100); gr2.Pad(100); if (dc.m_reg1.GetOverlap(gr1) && dc.m_reg2.GetOverlap(gr2)) if (dc.m_reg1.strand != d.m_reg1.strand || dc.m_reg2.strand != d.m_reg2.strand) { dc.m_id_competing = d.ID(); tdc.m_id_competing = d.ID(); d.m_id_competing = dc.ID(); } } } } void BreakPoint::indelCigarCheck(const CigarMapMap& cmap) { if (!isIndel()) return; // get the hash count for this std::string hash = getHashString(); // tally the number of reads that have cigar that support this // NB: the totalling for tumor, normal occur late in scoreBreakpoints for (auto& [sample,si] : allele) { size_t val = cmap.at(sample).count(hash) ? cmap.at(sample).at(hash) : 0; //std::cerr << " OG HASH VAL " << val << " hash " << hash << " sample " << sample << std::endl; si.cigar += val; } int span = getSpan(); // for somatic, be extra careful and score "nearby" cigars // so e.g. if the normal has // this is really weird and inefficient way to do this, but should be so fast it's inconsequential char in_del[2] = {'D', 'I'}; const int CIGAR_NEAR_BUFFER = 4; std::string thischr = std::to_string(b1.gr.chr) + "_"; for (int i = -CIGAR_NEAR_BUFFER; i <= CIGAR_NEAR_BUFFER; i++) { for (int len = 1; len < (span + 5); len++) { std::string lenst = std::to_string(len); for (int ii = 0; ii < 2; ii++) { // loop I or D char c = in_del[ii]; std::string st = thischr + std::to_string(b1.gr.pos1 + i) + "_" + lenst + c; //std::cerr << " cname " << cname << " st " << st << " hash " << hash << " i " << i << " len " << len << " ii " << ii << " span " << span << std::endl; if (hash == st) continue; // don't redo this for (auto& [sample, si] : allele) { size_t val = cmap.at(sample).count(st) ? cmap.at(sample).at(st) : 0; si.cigar_near += val; // std::cerr << " sample " << sample << " cname " << cname << " st " << st << " hash " << hash << " val " << val << std::endl; } } } } } namespace { // split a tab-delimited line (keeps empty fields) inline std::vector split_tabs(const std::string& s) { std::vector out; out.reserve(48); std::string cur; cur.reserve(64); for (char c : s) { if (c == '\t') { out.push_back(cur); cur.clear(); } else if (c != '\r' && c != '\n') { cur.push_back(c); } } out.push_back(cur); return out; } inline long to_long(const std::string& s) { if (s.empty()) return 0; return std::stol(s); } inline int to_int(const std::string& s) { if (s.empty()) return 0; return std::stoi(s); } inline double to_double(const std::string& s) { if (s.empty()) return 0.0; return std::stod(s); } inline char parse_strand(const std::string& s) { return s.empty() ? '.' : s[0]; // expect '+' or '-' } inline std::string upper(std::string v){ std::transform(v.begin(), v.end(), v.begin(), [](unsigned char c){ return std::toupper(c); }); return v; } // Map type string to SVType enum; adjust cases to match your enum names. inline SVType parse_svtype(const std::string& s_in) { const std::string s = upper(s_in); if (s == "NOTSET") return SVType::NOTSET; if (s == "TSI_LOCAL") return SVType::TSI_LOCAL; if (s == "TSI_GLOBAL") return SVType::TSI_GLOBAL; if (s == "ASSMB") return SVType::ASSMB; if (s == "ASDIS") return SVType::ASDIS; if (s == "DSCRD") return SVType::DSCRD; if (s == "INDEL") return SVType::INDEL; return SVType::NOTSET; } // Map somatic field to SomaticState enum; tweak to match your enum. inline SomaticState parse_somatic(const std::string& s_in) { const std::string s = upper(s_in); if (s_in == "1") return SomaticState::SOMATIC_LOD; return SomaticState::NORMAL_LOD; } // stod that tolerates "NA", ".", "". inline double stod_safe(const std::string& s) { if (s.empty()) return 0.0; std::string u; u.reserve(s.size()); for (char c: s) u.push_back(std::toupper(static_cast(c))); if (u == "NA" || u == ".") return 0.0; return std::stod(s); } } // namespace BreakPoint::BreakPoint(const std::string& line, const SvabaSharedConfig* _sc) : sc(_sc) { if (!line.empty() && line[0] == '#') { throw std::invalid_argument("BreakPoint: header/comment line cannot be parsed as data"); } const auto tok = split_tabs(line); // Minimum supported = 41 (legacy pre-SvABA2.0 dumps: core columns through // contig_conf2, no refilter-roundtrip additions). When we see >= 51 we // know the file carries the SvABA2.0 cpos/match/cov/local/flip columns // and we parse them in. This keeps the parser backward-compatible with // bps.txt.gz files produced by older svaba builds. if (tok.size() < 41) { throw std::runtime_error("BreakPoint parse error: expected at least 41 columns, got " + std::to_string(tok.size())); } int i = 0; // Lambda to safely parse an int from a token, tolerating empty / "x" / non- // numeric values that older dumps sometimes emit for unset sentinels. auto to_int_safe = [](const std::string& s, int def) -> int { if (s.empty() || s == "x" || s == "NA" || s == "nan") return def; try { return std::stoi(s); } catch (...) { return def; } }; auto to_double_safe = [](const std::string& s, double def) -> double { if (s.empty() || s == "x" || s == "NA" || s == "nan") return def; try { return std::stod(s); } catch (...) { return def; } }; // ---- fixed columns (1..39) ---- const std::string chr1 = tok[i++]; const long pos1_1idx = to_long(tok[i++]); const char s1 = tok[i++].empty() ? '.' : tok[i-1][0]; const std::string chr2 = tok[i++]; const long pos2_1idx = to_long(tok[i++]); const char s2 = tok[i++].empty() ? '.' : tok[i-1][0]; ref = tok[i++]; // 7 alt = tok[i++]; // 8 /* span */ (void)to_int(tok[i++]); // 9 a.split = to_int(tok[i++]); // 10 a.alt = to_int(tok[i++]); // 11 a.cov = to_int(tok[i++]); // 12 a.cigar = to_int(tok[i++]); // 13 a.cigar_near = to_int(tok[i++]); // 14 dc.mapq1 = to_int(tok[i++]); // 15 dc.mapq2 = to_int(tok[i++]); // 16 dc.ncount = to_int(tok[i++]); // 17 dc.tcount = to_int(tok[i++]); // 18 b1.mapq = to_int(tok[i++]); // 19 b2.mapq = to_int(tok[i++]); // 20 b1.nm = to_int(tok[i++]); // 21 b2.nm = to_int(tok[i++]); // 22 b1.as = to_int(tok[i++]); // 23 b2.as = to_int(tok[i++]); // 24 b1.sub = to_int(tok[i++]); // 25 b2.sub = to_int(tok[i++]); // 26 homology = tok[i++]; if (homology == "x") homology.clear(); // 27 insertion = tok[i++]; if (insertion == "x") insertion.clear(); // 28 repeat_seq = tok[i++]; if (repeat_seq == "x") repeat_seq.clear(); // 29 cname = tok[i++]; // 30 num_align = to_int(tok[i++]); // 31 confidence = tok[i++]; // 32 svtype = parse_svtype(tok[i++]); // 33 quality = to_int(tok[i++]); // 34 secondary = to_int(tok[i++]); // 35 somatic = parse_somatic(tok[i++]); // 36 LO_s = stod_safe(tok[i++]); // 37 max_lod = stod_safe(tok[i++]); // 38 rs = tok[i++]; if (rs == "x") rs.clear(); // 39 // ---- contig-confidence columns (40..41) -- previously skipped by this // ---- parser, which caused the first two trailing tokens to be misread // ---- as sample blocks. Now round-tripped correctly. b1.contig_conf = to_double_safe(tok[i++], 1.0); // 40 b2.contig_conf = to_double_safe(tok[i++], 1.0); // 41 // ---- SvABA2.0 refilter-roundtrip columns (42..51). Optional: only // ---- parse if present, so we remain backward-compatible with older // ---- bps.txt.gz files (which stop at 41 + per-sample blocks). // ---- // ---- Detection heuristic: per-sample blocks are colon-delimited // ---- (GT:AD:DP:SR:...). Core columns 42..51 are plain scalars with // ---- no colons. So we use: "if tok[41] contains no ':' AND there are // ---- at least 10 more tokens, it's the new format". This is robust // ---- against unusual sample counts and doesn't need to know n_bams // ---- at parse time. const bool has_new_core_cols = (tok.size() >= static_cast(i) + 10) && (tok[static_cast(i)].find(':') == std::string::npos); if (has_new_core_cols) { b1.cpos = to_int_safe(tok[i++], -1); // 42 b2.cpos = to_int_safe(tok[i++], -1); // 43 left_match = to_int_safe(tok[i++], -1); // 44 right_match = to_int_safe(tok[i++], -1); // 45 split_cov_bounds.first = to_int_safe(tok[i++], 0); // 46 split_cov_bounds.second = to_int_safe(tok[i++], 0); // 47 const int l1 = to_int_safe(tok[i++], 0); // 48 const int l2 = to_int_safe(tok[i++], 0); // 49 auto to_local = [](int v) -> LocalAlignment { switch (v) { case 1: return LocalAlignment::NONVAR_LOCAL_REALIGNMENT; case 2: return LocalAlignment::FROM_LOCAL_REGION; case 3: return LocalAlignment::FROM_DISTANT_REGION; default: return LocalAlignment::NOTSET; } }; b1.local = to_local(l1); b2.local = to_local(l2); contig_len = to_int_safe(tok[i++], 0); // 50 flipped_on_contig = (to_int_safe(tok[i++], 0) != 0); // 51 // SvABA2.0 v3: optional col 52 = bp_id. Same "no colons" test used // above for cols 42..51: per-sample blocks are colon-delimited // (GT:AD:DP:SR:...), while bp_id is a plain `bpTTTNNNNNNNN` string. // If the next token is non-colon AND there are >= n_samples_expected // tokens left after it, we treat it as the bp_id column. Older dumps // (pre-v3, 51 core cols) skip this and leave bp->id empty; the VCF // emitter falls back to its legacy hash-based id in that case. if (static_cast(i) < tok.size() && tok[static_cast(i)].find(':') == std::string::npos) { const std::string& maybe_bp_id = tok[static_cast(i)]; // bp_id always starts with "bp" or is "." (unset sentinel). Guard // against a malformed input that happens to have a non-colon // token here that isn't actually a bp_id. if (maybe_bp_id == "." || (maybe_bp_id.size() >= 2 && maybe_bp_id[0] == 'b' && maybe_bp_id[1] == 'p')) { id = (maybe_bp_id == "." ? std::string() : maybe_bp_id); // 52 ++i; } } } else { // Legacy dump: leave the new fields at their defaults. The PASS / // assembly-only filters that depend on these will degrade gracefully // (e.g. local=NOTSET, cpos=-1, split_cov_bounds={0,0}), and the // refilter flow should prefer the dumped `confidence` string in that // case rather than recomputing. b1.cpos = -1; b2.cpos = -1; left_match = -1; right_match = -1; split_cov_bounds = {0, 0}; b1.local = LocalAlignment::NOTSET; b2.local = LocalAlignment::NOTSET; contig_len = 0; flipped_on_contig = false; } // Genomic regions (file is 1-based; internal is 0-based) b1.gr.chr = sc->header.Name2ID(chr1); b1.gr.pos1 = static_cast(pos1_1idx - 1); b1.gr.pos2 = b1.gr.pos1; b1.gr.strand = s1; b2.gr.chr = sc->header.Name2ID(chr2); b2.gr.pos1 = static_cast(pos2_1idx - 1); b2.gr.pos2 = b2.gr.pos1; b2.gr.strand = s2; // Top-level `local` is a summary derived from (b1.local, b2.local). The // original scorer sets it as: FROM_LOCAL_REGION if either end is local, // else FROM_DISTANT_REGION (see ~line 2045 in scoreBreakpoint path). // We only set it here if we read a valid per-end local from the dump; // otherwise leave NOTSET so the caller can rescore. if (b1.local != LocalAlignment::NOTSET || b2.local != LocalAlignment::NOTSET) { if (b1.local == LocalAlignment::FROM_LOCAL_REGION || b2.local == LocalAlignment::FROM_LOCAL_REGION) local = LocalAlignment::FROM_LOCAL_REGION; else local = LocalAlignment::FROM_DISTANT_REGION; } else { local = LocalAlignment::NOTSET; } imprecise = 0; pass = 0; // unreliable — downstream code should gate on confidence // ---- trailing per-sample fields (map by order to sc->opts.bams) ---- const size_t rem = tok.size() - static_cast(i); std::vector bam_list; for (const auto& [pref,_] : sc->opts.bams) bam_list.push_back(pref); const size_t nsamples_expected = bam_list.size(); if (rem < nsamples_expected) { std::cerr << "Warning: BreakPoint parse: trailing sample fields fewer than expected (" << rem << " < " << nsamples_expected << ").\n"; } const size_t nsamples = std::min(rem, nsamples_expected); for (size_t j = 0; j < nsamples; ++j) { // sample key = first 4 chars of sc->opts.bams[j] const std::string& bam = bam_list[j]; const size_t key_len = std::min(4, bam.size()); const std::string key = bam.substr(0, key_len); SampleInfo si; si.FillFromString(tok[i + static_cast(j)], svtype); allele[key] = std::move(si); } // Optionally warn if there are extra tokens beyond expected samples if (rem > nsamples_expected) { std::cerr << "Warning: BreakPoint parse: " << (rem - nsamples_expected) << " extra trailing token(s) ignored.\n"; } } ================================================ FILE: src/svaba/BreakPoint.h ================================================ #pragma once #include #include #include #include #include #include #include "DiscordantCluster.h" #include "SeqLib/BamRecord.h" #include "SvabaRead.h" using CigarMapMap = std::unordered_map; enum class LocalAlignment { NOTSET, NONVAR_LOCAL_REALIGNMENT, // contig aligns to local region without variant FROM_LOCAL_REGION, // at least one end of contig bp maps to assembled region, this is good FROM_DISTANT_REGION // neither end maps to local assembly region, this is bad }; enum class SVType { NOTSET, TSI_LOCAL, // TSI_LOCAL TSI_GLOBAL, // TSI_GLOBAL ASSMB, // SIMPLE ASSEMBLY ASDIS, DSCRD, // DISCORDANT ONLY INDEL // INDEL }; enum class SomaticState { NOTSET, SOMATIC_LOD, // somatic by LOD cutoff NORMAL_LOD, // normal by LOD cutoff FAILED, // normal - failed hard filter }; // forward declares class STCoverage; namespace SeqLib { class RefGenome; class BamHeader; } class AlignmentFragment; class AlignedContig; using SeqLib::BamHeader; using SeqLib::BamRecord; using SeqLib::RefGenome; using SeqLib::BamRecordPtr; using SeqLib::GenomicRegion; using SeqLib::GRC; struct BreakPoint; struct BreakEnd; typedef std::vector HashVector; typedef std::vector BPVec; typedef std::shared_ptr BreakPointPtr; typedef std::vector BreakPointPtrVector; typedef std::unordered_set ReadNameSet; struct BreakEnd { BreakEnd() = default; void transferContigAlignmentData(const AlignmentFragment* f, bool isleft); void setLocal(const GenomicRegion& window); std::string printSimple(const BamHeader& h) const; std::string hash(int offset) const; std::string id; GenomicRegion gr; // contig level informaiton set by AlignmentFragment int mapq = -1; ///< mapping quality of alignment int cpos = -1; ///< breakpoint position on the contig (0-based) int nm = -1; ///< number of mismatching bases/indels bases int matchlen = -1; /// number of matching bases in the alignment int as = -1; ///< primary alignment score int sub = -1; ///< best secondary alignment score // Svaba2.0: composite reliability of the contig-alignment fragment backing // this breakend, in [0, 1]. For an SV BreakPoint the two ends can come // from different BWA fragments of the same split-aligned contig, so // each side stores its own score. Default 1.0 so legacy code paths // that never set it don't accidentally demote calls. double contig_conf = 1.0; LocalAlignment local = LocalAlignment::NOTSET; // for high-confidence reads std::unordered_map split; // friend std::ostream& operator<<(std::ostream& out, const BreakEnd& b); }; class BreakPoint { public: // for discordant clusters BreakPoint(DiscordantCluster& tdc, DiscordantClusterMap& dmap, const GenomicRegion& region, const SvabaSharedConfig* _sc); // for rearrangements (including complex) BreakPoint(const SvabaSharedConfig* _sc, const AlignmentFragment* left, const AlignmentFragment* right, const AlignedContig* alc); // for indels BreakPoint(const AlignmentFragment* f, const int idx, // index for which indel on this f alignment we are making const SvabaSharedConfig* _sc); // for readback from file BreakPoint(const std::string &line, const SvabaSharedConfig* _sc); // enforce one of above modalities BreakPoint() = delete; // Disable copy BreakPoint(const BreakPoint&) = delete; BreakPoint& operator=(const BreakPoint&) = delete; // Disable move BreakPoint(BreakPoint&&) = delete; BreakPoint& operator=(BreakPoint&&) = delete; static std::string header() { // Columns 1-41 are historical core fields; 42-51 are SvABA2.0 additions // for refilter round-tripping (contig coords, match lengths, split-cov // bounds, per-end LocalAlignment, contig orientation); 52 is bp_id // (unique thread-stable BreakPoint identifier — see BreakPoint::id). // Per-sample blocks follow. All downstream consumers that index by // NAME (viewer, HTML modules) are header-robust; sort scripts that // hardcode -k37,-k38 still work because somlod/maxlod positions // are unchanged. return std::string( "#chr1\tpos1\tstrand1\tchr2\tpos2\tstrand2\tref\talt\t" "span\tsplit\talt\tcov\tcigar\tcigar_near\t" "dmq1\tdmq2\tdcn\tdct\t" "mapq1\tmapq2\tnm1\tnm2\tas1\tas2\tsub1\tsub2\t" "homol\tinsert\trepeat\t" "contig_and_region\tnaln\tconf\ttype\tqual\t2ndary\t" "somatic\tsomlod\tmaxlod\tdbsnp\tcontig_conf1\tcontig_conf2\t" "cpos1\tcpos2\tlmatch\trmatch\tscov1\tscov2\t" "local1\tlocal2\tctglen\tflipped\t" "bp_id" ); } SomaticState somatic = SomaticState::NOTSET; std::string seq, cname, rs, insertion, homology, repeat_seq, confidence, ref, alt; // SvABA2.0: unique stable identifier for this BreakPoint, assigned // exactly once per BP in SvabaRegionProcessor::process() via // svabaThreadUnit::next_bp_id() right before the pointer is pushed // into unit.m_bps. Format: "bpTTTNNNNNNNN" where TTT is the 3-digit // zero-padded thread ID and NNNNNNNN is an 8-digit zero-padded // per-thread running counter. Because AlignedContig holds its BPs // via shared_ptr, setting id through any reference is visible // everywhere — r2c emission later reads it back through // getAllBreakPoints(). Emitted as the final core column of // bps.txt so downstream tools can cross-reference which BP a read // supports (see r2c's split_bps/disc_bps columns). std::string id; // the evidence per break-end BreakEnd b1, b2; int imprecise = -1; //false; // number of matched bases to left and right // dont want indel matches where there is not confidence alignment // because indel is too close to end int left_match = -1, right_match = -1; // reads spanning this breakpoint (these are read-to-genome, but have an r2c) svabaReadPtrVector reads; // discordant reads supporting this aseembly bp DiscordantCluster dc; int quality = -1; // QUAL score int secondary = -1; // is this a secondary int pass = -1; //false; int num_align = 0; // number of alignments for contigs that generated this // SvABA2.0: for indels only, track whether the underlying AlignmentFragment // had its contig sequence flipped (i.e. the primary contig alignment is on // the reverse strand of the genome). b1.cpos / b2.cpos are computed from // the un-flipped BAM CIGAR (so they are BAM/genome-forward coordinates), // but m_seq in the AlignedContig and the read-to-contig positions from the // r2c BWA index are both in assembly-native orientation. When flipped is // true, these two coordinate systems are mirror images and we must convert // cpos to m_seq coordinates before comparing with r2c positions or // rendering onto m_seq. Use cpos_on_m_seq() below to get the converted // (b1, b2) pair. int contig_len = 0; bool flipped_on_contig = false; // Return (b1.cpos, b2.cpos) converted to m_seq / r2c (assembly-native) // orientation. When flipped_on_contig is false this is the identity. // When flipped, the coordinate system reverses and the "before" / "after" // sense of an indel swaps, so we mirror AND swap. std::pair cpos_on_m_seq() const { if (!flipped_on_contig || contig_len <= 0) return {b1.cpos, b2.cpos}; const int L = contig_len; return {L - 1 - b2.cpos, L - 1 - b1.cpos}; } double LO_s = 0; // log odds of variant being somatic (see svabaModels.cpp - SomaticLOD) double max_lod = 0; // the highest LOD across all samples SVType svtype = SVType::NOTSET; LocalAlignment local = LocalAlignment::NOTSET; const SvabaSharedConfig* sc; // keep track of how much of contig is covered by split // first is left-most position on contig that has a read aligned to it // second is right-most std::pair split_cov_bounds; GenomicRegion BreakEndAsGenomicRegionLeft() const; GenomicRegion BreakEndAsGenomicRegionRight() const; // SvABA2.0: union of UniqueNames of split-supporting reads across all // samples. Used by AlignedContig::printToR2CTsv to tag each read row // with its variant-support kind. SampleInfo is a private nested type, // so we expose this method instead of forcing callers to iterate // `allele` and reach into SampleInfo directly. std::unordered_set getAllSupportingReads() const { std::unordered_set out; for (const auto& kv : allele) for (const auto& un : kv.second.supporting_reads) out.insert(un); return out; } bool isIndel() const; HashVector getBreakEndHashes(); void __combine_alleles(); void __rep(int rep_num, std::string& rseq, bool fwd = true); void setLocal(const GenomicRegion& window); void score_somatic(double error_fwd); void indelCigarCheck(const CigarMapMap& cmap); void addCovs(const std::unordered_map& covs); /** Retrieve the reference sequence at a breakpoint and determine if * it lands on a repeat */ void repeatFilter(); std::string printSimple(const BamHeader& h) const; void CombineWithDiscordantClusterMap(DiscordantClusterMap& dmap); /*! @function determine if the breakpoint has split read support * @param reference to a vector of read smart pointers that have been aligned to a contig * @discussion Note: will cause an error if the AL tag not filled in for the reads. * The AL tag is filled in by AlignedContig::alignReadsToContigs. */ void splitCoverage(svabaReadPtrVector& bav); /*! Determines if the BreakPoint overlays a blacklisted region. If * and overlap is found, sets the blacklist bool to true. * * Note that currently this only is set for the pos1 of indels. * If the BreakPoint object is not an indel, no action is taken. * @param grm An interval tree map created from a BED file containing blacklist regions */ void checkBlacklist(GRC &grv); /*! Score a breakpoint with a QUAL score, and as somatic or germline */ void scoreBreakpoint(); /*! Compute the allelic fraction (tumor and normal) for this BreakPoint. * * The allelic fraction is computed by taking the base-pair level coverage * as the denominator, and the max of number of split reads and number of * cigar supporting reads as the numerator. Note that because, theoretically * but rarely, the number of split reads could be > 0 while the bp-level coverage * at a variant could be exactly zero. This is because unmapped reads could be called split * reads but are not counted in the coverage calculation. In such a case, the allelic fraction is * set to -1. By the same argument, the allelic fraction could rarely be > 1. * @param t_cov Base-pair level Coverage object, with coverage for all reads from Tumor bam(s). * @param n_cov Base-pair level Coverage object, with coverage for all reads from Normal bam(s). */ //void addAllelicFraction(STCoverage * t_cov, STCoverage * n_cov); /*! @function get the span of the breakpoints (in bp). -1 for interchrom * @return int distance between breakpoints */ int getSpan() const; /*! @function get a unique string representation of this breakpoint. * Format for indel is chr_breakpos_type (eg. 0_134134_I) * @return string with breakpoint info */ std::string getHashString() const; bool hasMinimal() const; bool sameBreak(BreakPoint &bp) const; bool isEmpty() const { return (b1.gr.pos1 == 0 && b2.gr.pos1 == 0); } std::string toFileString(const BamHeader& header) const; bool hasDiscordant() const; //bool operator==(const BreakPoint& bp) const; // define how to sort these bool operator<(const BreakPoint& o) const { return std::tie( b1.gr, // first key b2.gr, // then n.split, t.split, dc.ncount, dc.tcount, cname // last key ) < std::tie( o.b1.gr, o.b2.gr, o.n.split, o.t.split, o.dc.ncount, o.dc.tcount, o.cname ); } void score_dscrd(); void score_assembly_only(); void score_assembly_dscrd(); void score_indel(); void set_homologies_insertions(); bool valid() const; void setRefAlt(const RefGenome* main_rg, const BamHeader& header); private: struct SampleInfo { // no default construction: SampleInfo() = default; int split = 0; int cigar = 0; int cigar_near = 0; // cigar matches close (but not same) int alt = 0; int cov = 0; int disc = 0; // genotype info //NB: PL (the Phred-scaled -10*log_10(GL - max(GL)) // rounded to int by convention double GQ = 0; // GQ take, max 99, quality of the genotype tag double NH_GQ = 0; // GQ of 0/0. Higher is more likely to be not hom ref std::string genotype; // GT tag std::vector genotype_likelihoods = {0,0,0}; // GL tag std::vector phred_likelihoods = {0,0,0}; // PL tag double af = 0; // log odds double LO = 0; // log odds of variant vs error double SLO = 0; // MAPQ scaled log odds of variant vs error double LO_n = 0; // log odds of variant at af=0.5 vs ref (af=0) with errors // UniqueName set of supporting reads // not for read tracking but actually needed for breakpoint scoring ReadNameSet supporting_reads; void modelSelection(double err, int readlen); std::string toFileString(SVType svtype) const; void FillFromString(const std::string& s, SVType svtype); void UpdateAltCounts(); }; // Friend declarations so these free functions can see the private nested type friend std::ostream& operator<<( std::ostream& out, const BreakPoint::SampleInfo& a ); friend BreakPoint::SampleInfo operator+( const BreakPoint::SampleInfo& a1, const BreakPoint::SampleInfo& a2 ); public: //tumor allele, normal allele, all allele SampleInfo t, n, a; // ordered to keep in alphabetical order by prefix (e.g. n001) std::map allele; }; // struct ReducedDiscordantCluster { // uint32_t mapq1:8, mapq2:8, tcount:8, ncount:8; // }; // struct ReducedBreakPoint { // // some helper functions // char* __string_alloc2char(const std::string& str, char * p) { // if (!str.empty() && str != "x") { // p = (char*)malloc(str.length() + 1); // strcpy(p, str.c_str()); // return p; // } else { // return nullptr; // } // } // inline void smart_check_free(char * p) { // if (p) // free(p); // } // int getSpan() const { // if (indel && !insertion) // deletion // return (abs((int)b1.gr.pos1 - (int)b2.gr.pos1) - 1); // if (indel) // insertion // return (strlen(insertion)); // insertion // if (b1.gr.chr == b2.gr.chr) // return abs((int)b1.gr.pos1-(int)b2.gr.pos1); // else // return -1; // } // // define how to sort these // bool operator<(const ReducedBreakPoint& bp) const; // // print it with the correct chromsome string // std::string print(const BreakPoint& b, const SeqLib::BamHeader& h) const; // ReducedBreakPoint() {} // ~ReducedBreakPoint() { // smart_check_free(ref); // smart_check_free(alt); // smart_check_free(cname); // smart_check_free(homology); // smart_check_free(insertion); // smart_check_free(evidence); // smart_check_free(confidence); // smart_check_free(repeat); // } // ReducedBreakPoint(const std::string &line, const SeqLib::BamHeader& h); // char * ref; // char * alt; // char * cname; // char * evidence; // char * confidence; // char * insertion; // char * homology; // char * repeat; // std::string read_names, bxtable; // std::vector format_s; // ReducedBreakEnd b1, b2; // double somatic_score = 0; // double somatic_lod = 0; // LogOdds that variant not in normal // double true_lod = 0; // //uint32_t nsplit:8, tsplit:8, // //uint32_t tcov_support:8, ncov_support:8, tcov:8, ncov:8; // uint32_t cov:16, af_n:7, num_align:5, secondary:1, dbsnp:1, pass:1, blacklist:1, indel:1, imprecise:1; // uint32_t tcigar:8, ncigar:8, dummy:8, af_t:8; // float quality; // uint8_t pon; // ReducedDiscordantCluster dc; // }; ================================================ FILE: src/svaba/ContigAlignmentScore.cpp ================================================ // ContigAlignmentScore.cpp // // See header for what this does and where it plugs into svaba. The scoring // rules below map directly to the filter analysis: // // Rule A: n_indel_ops >= 3 is almost certainly mis-alignment in a repeat. // Each additional indel beyond 1 adds a 0.20 penalty. // Rule B: 2+ indels with no single big event (<=20 bp) and noisy flanks // (mm_rate > 0.02) is scattered-small-indel pattern. Flat 0.25 // penalty. A single large indel exempts the contig from this // rule, so real big SVs/indels pass. // Rule C: non-indel mismatch rate. Threshold 1% (well above per-base // sequencing error ~0.1-0.5%), slope 10 so 3% mm = 0.20, // 5% = 0.40, 10% = 0.90. Extra quadratic kicker above 5% so // very noisy alignments crash to zero. // Rule D: as_per_bp < 0.70 means BWA paid a lot of penalties for this // placement. Smooth penalty scaled 2x. // // confidence = clamp(1 - sum(penalties), 0, 1). #include "ContigAlignmentScore.h" #include #include #include #include namespace svaba { namespace { template inline T clip_range(T v, T lo, T hi) { return std::max(lo, std::min(hi, v)); } } // anon ContigAlignScore scoreContigAlignment(const SeqLib::BamRecord& r) { ContigAlignScore s; if (!r.MappedFlag()) return s; // --- parse CIGAR -------------------------------------------------------- const SeqLib::Cigar cig = r.GetCigar(); for (const auto& c : cig) { const int len = static_cast(c.Length()); const char op = c.Type(); switch (op) { case 'M': case '=': case 'X': s.aligned_bp += len; s.ref_span += len; break; case 'I': s.n_indel_ops++; s.total_indel_bp += len; if (len > s.max_indel_bp) s.max_indel_bp = len; s.aligned_bp += len; break; case 'D': s.n_indel_ops++; s.total_indel_bp += len; if (len > s.max_indel_bp) s.max_indel_bp = len; s.ref_span += len; break; case 'N': s.ref_span += len; break; case 'S': s.clip_bp += len; break; // 'H' and 'P' contribute nothing default: break; } } // --- pull NM / AS / XS -------------------------------------------------- int32_t v = 0; if (r.GetIntTag("NM", v)) s.NM = v; if (r.GetIntTag("AS", v)) s.AS = v; if (r.GetIntTag("XS", v)) s.XS = v; if (s.NM >= 0) { // NM in BWA includes mismatches + inserted + deleted bp s.mm = std::max(0, s.NM - s.total_indel_bp); } if (s.aligned_bp > 0 && s.NM >= 0) { s.mm_rate = static_cast(s.mm) / s.aligned_bp; } if (s.AS >= 0) { const int denom = std::max(s.aligned_bp, s.ref_span); if (denom > 0) s.as_per_bp = static_cast(s.AS) / denom; } if (s.AS >= 0 && s.XS >= 0) { s.as_xs_gap = s.AS - s.XS; } // --- composite penalty -------------------------------------------------- double pen = 0.0; // Rule A: multi-indel if (s.n_indel_ops >= 2) { pen += 0.20 * (s.n_indel_ops - 1); if (s.reason.empty()) s.reason = "multi_indel(" + std::to_string(s.n_indel_ops) + ")"; } // Rule B: scattered small indels with noisy flanks. Threshold lowered to // 0.02 to match the new mm-rate sensitivity in Rule C. if (s.n_indel_ops >= 2 && s.max_indel_bp <= 20 && s.mm_rate > 0.02) { pen += 0.25; if (s.reason.empty()) s.reason = "small_indel_cluster_noisy"; } // Rule C: non-indel mismatch rate. A clean sequencing + assembly pipeline // should have ~0.1-0.5% per-base error; 1% is already suspicious, 3% is // almost always mis-assembly or mis-alignment into a repeat/paralog. // // linear slope 10 above 0.01: 1% -> 0, 2% -> 0.10, 3% -> 0.20, // 5% -> 0.40, 10% -> 0.90 // plus quadratic above 0.05: 5% -> +0, 10% -> +0.075, 15% -> +0.30, // 20% -> +0.675 // // Real indels and soft clips are excluded from mm (NM minus indel bp), so // this rule only fires on genuine base mismatches. if (s.mm_rate > 0.01) { pen += 10.0 * (s.mm_rate - 0.01); if (s.mm_rate > 0.05) { pen += 30.0 * (s.mm_rate - 0.05) * (s.mm_rate - 0.05); } if (s.reason.empty() && s.mm_rate > 0.02) s.reason = "high_mm_rate"; } // Rule D: low AS-density (only if AS was actually present) if (s.AS >= 0 && s.as_per_bp < 0.70) { pen += 2.0 * (0.70 - s.as_per_bp); if (s.reason.empty() && s.as_per_bp < 0.60) s.reason = "low_AS_density"; } s.confidence = clip_range(1.0 - pen, 0.0, 1.0); return s; } void tagContigAlignment(SeqLib::BamRecord& r, const ContigAlignScore& s) { // zc:i = round(1000 * confidence), clamped to [0, 1000] // zi:i = n_indel_ops // zm:i = max single-indel length // zr:i = round(1000 * mm_rate), clamped to [0, 1000] if (!r.MappedFlag()) return; // don't touch aux on unmapped/empty records const int32_t zc_val = clip_range(static_cast(std::lround(1000.0 * s.confidence)), int32_t{0}, int32_t{1000}); const int32_t zr_val = clip_range(static_cast(std::lround(1000.0 * s.mm_rate)), int32_t{0}, int32_t{1000}); r.AddIntTag("zc", zc_val); r.AddIntTag("zi", s.n_indel_ops); r.AddIntTag("zm", s.max_indel_bp); r.AddIntTag("zr", zr_val); } double readContigConfTag(const SeqLib::BamRecord& r) { int32_t zc = -1; if (!r.GetIntTag("zc", zc)) return -1.0; // tag truly absent return std::clamp(zc / 1000.0, 0.0, 1.0); } } // namespace svaba ================================================ FILE: src/svaba/ContigAlignmentScore.h ================================================ // ContigAlignmentScore.h // // Composite quantitative reliability score for a single contig-to-genome // alignment. The idea is: once a contig has been aligned back to the // reference (via BWAWrapper in SvabaRegionProcessor), we want a single // float in [0, 1] that summarizes "is this a clean alignment I should // trust" vs "is this a wonky multi-indel pile that BWA forced into a // repeat region". // // The score flows through svaba in three places: // 1. Written to the contig BAM record as tag `zc:i` (milli-confidence, // integer in [0, 1000] so it fits SeqLib's AddIntTag API). // 2. Mirrored onto the BreakEnd struct (field `contig_conf`) inside // BreakEnd::transferContigAlignmentData so every BreakPoint carries // both sides' scores forward. // 3. Emitted as the `contig_conf` column in bps.txt.gz and used as a // co-gate in the PASS/filter logic. #pragma once #include "SeqLib/BamRecord.h" #include namespace svaba { // Raw components + the final composite confidence. struct ContigAlignScore { // CIGAR-derived int n_indel_ops = 0; // count of I + D ops int max_indel_bp = 0; // largest single I or D length int total_indel_bp = 0; // sum of I + D bp int clip_bp = 0; // total soft-clip bp (S ops) int aligned_bp = 0; // query bp in M/I/=/X (excl. clips) int ref_span = 0; // reference bp in M/D/=/X/N // Tag-derived (may be missing; -1 = not present) int NM = -1; int AS = -1; int XS = -1; // Derived metrics int mm = 0; // ~ NM - total_indel_bp (BWA convention) double mm_rate = 0.0; // mm / aligned_bp double as_per_bp = 0.0; // AS / max(aligned_bp, ref_span) int as_xs_gap = 0; // AS - XS (0 if XS absent) // Composite confidence in [0, 1]. 1.0 = pristine single-event alignment. double confidence = 1.0; // First rule that pushed the score down; empty means nothing tripped. // Purely for logging/debug; not used by downstream filters. std::string reason; }; // Pure function: compute the score from a contig alignment record. // Does not mutate the record. ContigAlignScore scoreContigAlignment(const SeqLib::BamRecord& r); // Write the score back onto the record as integer tag `zc` in // milli-confidence units (round(1000 * confidence), clamped to [0, 1000]). // Integer tag keeps us within SeqLib's existing AddIntTag API. // Also writes `zi` (n_indel_ops), `zm` (max_indel_bp), `zr` (mm_rate*1000) // for diagnostic visibility in IGV / samtools view. void tagContigAlignment(SeqLib::BamRecord& r, const ContigAlignScore& s); // Inverse of tagContigAlignment's zc: pull the milli-confidence off a // record and return it as a double in [0, 1]. Returns 1.0 if tag absent // (so legacy records default to "trusted"). double readContigConfTag(const SeqLib::BamRecord& r); // Default PASS threshold. Anything with contig_conf below this is // demoted from PASS. 0.50 is a reasonable default; tune via opts later. inline constexpr double kContigConfPassThreshold = 0.50; // --------------------------------------------------------------------------- // Per-read SV-focused alignment score // --------------------------------------------------------------------------- // // Used by BreakPoint::splitCoverage to decide whether a read's r2c // (read-to-contig) alignment is genuinely "better than" the read's // corrected-native (read-to-reference) alignment. Only when r2c is // strictly better do we credit the read as variant-supporting. Both sides // must use the SAME corrected read sequence and the SAME BWA parameters // (svaba's internal aligner) — see svabaRead::corrected_native_cig. // // Scoring philosophy: an indel-bearing alignment should NOT be allowed to // approach the same score as a clean ungapped one. We therefore use a // BWA-MEM-style gap penalty (gap-open dominant, modest gap-extend) that // is much heavier than the per-bp mismatch cost, so a single indel op // definitively pushes the score below a clean alignment of the same // length. Mismatches are penalized at a smaller per-bp rate. Soft-clips // are penalized 1:1 with matched bp (a clipped base contributes nothing // AND costs as much as it would have earned, mirroring the intuition that // a clip is "wasted" query sequence). // // Penalty schedule (units = "effective matched bp"; loosely modeled on // BWA-MEM defaults match=+1 / mm=-4 / gapO=-6 / gapE=-1): // // score = aligned_bp (M / I / = / X query bp) // - kReadClipPenaltyPerBp * clip_bp (S query bp) // - kReadGapOpenPenalty * indel_ops (count of I + D ops) // - kReadGapExtendPenaltyPerBp * indel_bp (sum of I + D bp) // - kReadMismatchPenaltyPerBp * mismatches (NM - indel_bp; >=0) // // Worked examples (k_clip=1, k_gapO=6, k_gapE=1, k_mm=4): // 150M NM=0 -> 150 clean baseline // 80M70S NM=0 -> 80 - 70 = 10 big clip // 90M60S NM=0 -> 90 - 60 = 30 // 38M3I109M NM=3 -> 150 - 6 - 3 = 141 one 3bp indel, // no mismatches // 75M5I70M NM=5 -> 150 - 6 - 5 = 139 // 75M5D75M NM=5 -> 150 - 6 - 5 = 139 D doesn't consume // query but NM counts // 150M NM=4 -> 150 - 4*4 = 134 4 mismatches, no // indels (still well // above an indel- // bearing alignment // of equal length — // that's the point) // // Decision rule in splitCoverage: accept iff // r2cScore > correctedNativeScore (apples-to-apples comparison). // Strict ">" so ties don't credit the read. // // `nm` may be -1 (tag absent); the mismatch term is dropped in that case // but the CIGAR-derived gap-open / gap-extend / clip terms still apply. inline constexpr double kReadClipPenaltyPerBp = 1.0; inline constexpr double kReadGapOpenPenalty = 6.0; inline constexpr double kReadGapExtendPenaltyPerBp = 1.0; inline constexpr double kReadMismatchPenaltyPerBp = 4.0; inline double readAlignmentScore(const SeqLib::Cigar& cig, int nm) { int aligned_bp = 0; // M / I / = / X (consumes query) int clip_bp = 0; // S int indel_ops = 0; // count of I + D ops int indel_bp = 0; // sum of I + D bp for (const auto& c : cig) { const int len = static_cast(c.Length()); switch (c.Type()) { case 'M': case '=': case 'X': aligned_bp += len; break; case 'I': aligned_bp += len; // I consumes query indel_ops += 1; indel_bp += len; break; case 'D': indel_ops += 1; indel_bp += len; // D doesn't consume query break; case 'S': clip_bp += len; break; // 'N', 'H', 'P' contribute nothing. default: break; } } double score = static_cast(aligned_bp) - kReadClipPenaltyPerBp * clip_bp - kReadGapOpenPenalty * indel_ops - kReadGapExtendPenaltyPerBp * indel_bp; if (nm >= 0) { // BWA convention: NM = mismatches + inserted_bp + deleted_bp. Subtract // out indel_bp to recover the pure mismatch count; clamp at 0 in case // CIGAR and NM disagree (e.g. NM tag absent / stale). const int mm = std::max(0, nm - indel_bp); score -= kReadMismatchPenaltyPerBp * mm; } return score; } } // namespace svaba ================================================ FILE: src/svaba/DBSnpFilter.cpp ================================================ #include "DBSnpFilter.h" #include "gzstream.h" #include "SvabaLogger.h" #include "BreakPoint.h" #include "SeqLib/BamHeader.h" #include "SeqLib/GenomicRegion.h" using SeqLib::BamHeader; using SeqLib::AddCommas; using SeqLib::GenomicRegion; using SeqLib::GRC; DBSnpSite::DBSnpSite(const std::string& tchr, const std::string& pos, const std::string& rs, const std::string& ref, const std::string& alt, const BamHeader& h) { // make the genomic region try { GenomicRegion gr(tchr, pos, pos, h); chr = gr.chr; pos1 = std::stoi(pos); } catch (...) { //std::cerr << "DBSnpSite: Error trying to convert " << tchr << ":" << pos << " to number" << std::endl; } //m_rs = rs; //m_ref = ref; //m_alt = alt; if (ref.length() == 0 || alt.length() == 0) // || m_rs.length() == 0) std::cerr << "DBSnpSite: Is the VCF formated correctly for this entry? Ref " << ref << " ALT " << alt << " rs " << rs << std::endl; // insertion if (ref.length() == 1) pos2 = pos1 + 1; // deletion else pos2 = pos1 + ref.length() + 1; } DBSnpFilter::DBSnpFilter(const std::string& db, const SeqLib::BamHeader& header, SvabaLogger& logger) { logger.log(true, true, "...loading the DBsnp database ", db); // First, try opening the file (gzipped or not) igzstream in(db.c_str()); if (!in) { logger.log(true,true, //toerr, tolog "ERROR: Cannot open DBSNP database file '", db, "' for reading." ); throw std::runtime_error("Cannot open DBSnp database: " + db); } std::string line; std::ostringstream cig; while (std::getline(in, line)) { if (line.empty() || line[0] == '#') continue; std::istringstream iss(line); std::string chr, pos, rs, ref, alt; if (!(iss >> chr >> pos >> rs >> ref >> alt)) { logger.log( true, true, "WARNING: malformed VCF line in ", db, ": '", line, "'. Skipping." ); continue; } // we only care about indels (ref+alt length > 2) if (ref.size() + alt.size() <= 2) continue; DBSnpSite site(chr, pos, rs, ref, alt, header); m_sites.add(site); // build a simple chr_pos hash cig.str(""); cig << chr << "_" << site.pos1; m_int_hash.insert(hasher(cig.str())); } // finalize our index m_sites.CreateTreeMap(); logger.log(true,true, "Loaded ", m_sites.size(), " indel sites from DBSNP file '", db, "'."); } std::ostream& operator<<(std::ostream& out, const DBSnpFilter& d) { out << "DBSnpFilter with a total of " << AddCommas(d.m_sites.size()); return out; } std::ostream& operator<<(std::ostream& out, const DBSnpSite& d) { //out << d.chr << ":" << d.pos1 << "-" << d.pos2 << "\t" << d.m_rs << " REF " << d.m_ref << " ALT " << d.m_alt; out << d.chr << ":" << d.pos1 << "-" << d.pos2;; return out; } bool DBSnpFilter::queryHash(const std::string& h) const { //return m_hash.count(h); return m_int_hash.count(hasher(h)); } bool DBSnpFilter::queryBreakpoint(BreakPoint& bp) { std::vector sub, que; GenomicRegion gr = bp.b1.gr; gr.Pad(2); GRC subject(gr); GRC out = subject.FindOverlaps(m_sites, sub, que, true); // true = ignore_strand if (que.size()) { //bp.rs = m_sites[sub[0]].m_rs; bp.rs = "D"; //for (auto& j : que) { //bp.rs += m_sites[j].m_rs + "_"; //} //bp.rs.pop_back(); // just drop the last comma return true; } return false; } ================================================ FILE: src/svaba/DBSnpFilter.h ================================================ #pragma once #include #include #include #include #include //for std::hash #include "SeqLib/GenomicRegionCollection.h" class BreakPoint; class SvabaLogger; namespace SeqLib { class BamHeader; } class DBSnpSite: public SeqLib::GenomicRegion { public: DBSnpSite(const std::string& tchr, const std::string& pos, const std::string& rs, const std::string& ref, const std::string& alt, const SeqLib::BamHeader& h); //std::string m_rs; //std::string m_ref; //std::string m_alt; friend std::ostream& operator<<(std::ostream& out, const DBSnpSite& d); }; typedef SeqLib::GenomicRegionCollection DBC; class DBSnpFilter { public: DBSnpFilter() {} DBSnpFilter(const std::string& db, const SeqLib::BamHeader& h, SvabaLogger& logger); /** Test whether the variant overlaps a DBSnp site * If it does, fill the BreakPoint rs field */ bool queryBreakpoint(BreakPoint& bp); bool queryRead(const SeqLib::BamRecord& r) const; bool queryHash(const std::string& r) const; friend std::ostream& operator<<(std::ostream& out, const DBSnpFilter& d); private: std::hash hasher; // initialize here once std::stringstream cig; DBC m_sites; std::unordered_set m_hash; std::unordered_set m_int_hash; }; ================================================ FILE: src/svaba/DiscordantCluster.cpp ================================================ #include "DiscordantCluster.h" #include #include #include #include #include "SeqLib/BamWalker.h" #include "SvabaUtils.h" #define DISC_PAD 150 #define MIN_PER_CLUST 2 #define MAX_CLUSTER_WIDTH 3000 #define MAX_REGION_WIDTH 5000 #define DEFAULT_ISIZE_THRESHOLD 2000 // shouldn't be hit if isize was learned //#define DEBUG_CLUSTER 1 namespace SeqLib { class BamHeader; class GenomicRegion; } using SeqLib::GenomicRegion; DiscordantClusterMap DiscordantCluster::clusterReads(svabaReadPtrVector& bav, const SeqLib::GenomicRegion& interval, const SeqLib::BamHeader& header) { // sort by position std::sort(bav.begin(), bav.end(), SeqLib::BamRecordSort::ByReadPositionSharedPtr()); svabaReadClusterVector fwd, rev, fwdfwd, revrev, fwdrev, revfwd; //debug // for (const auto& b : bav) { // if (b->Qname() == "LH00306:129:227V5CLT4:6:2114:6074:25724") // std::cerr << " CLUSTER " << *b << std::endl; // } // make the fwd and reverse READ clusters. dont consider mate yet __cluster_reads(bav, fwd, rev, SeqLib::Orientation::FR); __cluster_reads(bav, fwd, rev, SeqLib::Orientation::FF); __cluster_reads(bav, fwd, rev, SeqLib::Orientation::RF); __cluster_reads(bav, fwd, rev, SeqLib::Orientation::RR); #ifdef DEBUG_CLUSTER for (auto& i : fwd) { std::cerr << "fwd cluster " << std::endl; for (auto& j : i) std::cerr << "fwd " << *j << std::endl; } for (auto& i : rev) { std::cerr << "rev cluster " << std::endl; for (auto& j : i) std::cerr << "rev " << *j << std::endl; } #endif // within the forward read clusters, cluster mates on fwd and rev __cluster_mate_reads(fwd, fwdfwd, fwdrev); // within the reverse read clusters, cluster mates on fwd and rev __cluster_mate_reads(rev, revfwd, revrev); // we have the reads in their clusters. Just convert to discordant reads clusters DiscordantClusterMap dcm; __convertToDiscordantCluster(dcm, fwdfwd, bav, header); __convertToDiscordantCluster(dcm, fwdrev, bav, header); __convertToDiscordantCluster(dcm, revfwd, bav, header); __convertToDiscordantCluster(dcm, revrev, bav, header); #ifdef DEBUG_CLUSTER std::cerr << "----fwd cluster count: " << fwd.size() << std::endl; std::cerr << "----rev cluster count: " << rev.size() << std::endl; std::cerr << "----fwdfwd cluster count: " << fwdfwd.size() << std::endl; std::cerr << "----fwdrev cluster count: " << fwdrev.size() << std::endl; std::cerr << "----revfwd cluster count: " << revfwd.size() << std::endl; std::cerr << "----revrev cluster count: " << revrev.size() << std::endl; for (auto& ii : fwdrev) { std::cerr << " ____________ CLUSTER ______________" << std::endl; for (auto& jj : ii) std::cerr << "FWDREV _____ " << *jj << std::endl; } for (auto& ii : revfwd) { std::cerr << " ____________ CLUSTER ______________" << std::endl; for (auto& jj : ii) std::cerr << "FWDREV _____ " << *jj << std::endl; } #endif // // score by number of maps // for (auto d : dd_clean) { // for (auto& r : d.second.reads) { // double rr = r.second.GetDD(); // d.second.read_score += (rr > 0) ? 1/rr : 1; // } // for (auto& r : d.second.mates) { // double rr = r.second.GetDD(); // d.second.mate_score += (rr > 0) ? 1/rr : 1; // } // } return dcm; } // this reads is reads in the cluster. all_reads is big pile where all the clusters came from DiscordantCluster::DiscordantCluster(const svabaReadPtrVector& this_reads, const svabaReadPtrVector& all_reads, const SeqLib::BamHeader& header) { assert(this_reads.size()); assert(all_reads.size()); // check the orientations, fill the reads auto first_read = this_reads.at(0); auto last_read = this_reads.back(); bool rev = first_read->ReverseFlag(); bool mrev = first_read->MateReverseFlag(); // loop the reads in this cluster for (auto& i : this_reads) { // double check that we did the clustering correctly. All read orientations should be same assert(rev == i->ReverseFlag() && mrev == i->MateReverseFlag()); // add the read to the read map std::string tmp = i->UniqueName(); // this name like t001_165_qname assert(tmp.length()); reads[tmp] = i; // count number of reads per BAM ++counts[i->Prefix()]; if (tmp.at(0) == 't') { ++tcount; } else { ++ncount; } } // loop through the big stack of reads and find the mates addMateReads(all_reads); assert(reads.size()); // set the regions m_reg1 = GenomicRegion(-1, -1, -1); m_reg1.pos1 = INT_MAX; m_reg2 = GenomicRegion(-1, -1, -1); // mate region m_reg2.pos1 = INT_MAX; SeqLib::Orientation por; for (const auto& [_, read] : reads) { por = read->PairOrientation(); m_reg1.strand = read->ReverseFlag() ? '-' : '+'; m_reg2.strand = read->MateReverseFlag() ? '-' : '+'; m_reg1.chr = read->ChrID(); m_reg2.chr = read->MateChrID(); // get left side if (read->Position() < m_reg1.pos1) m_reg1.pos1 = read->Position(); if (read->MatePosition() < m_reg2.pos1) m_reg2.pos1 = read->MatePosition(); // get right side if (read->PositionEnd() > m_reg1.pos2) m_reg1.pos2 = read->PositionEnd(); if (read->MatePosition() > m_reg2.pos2) m_reg2.pos2 = read->MatePosition() + read->Length(); // since don't have mate end // Check region width constraints after building regions if (m_reg1.Width() >= MAX_REGION_WIDTH) { std::cerr << "Warning: Region 1 width (" << m_reg1.Width() << "bp) exceeds " << MAX_REGION_WIDTH << "bp limit. Cluster is too large." << std::endl; } if (m_reg2.Width() >= MAX_REGION_WIDTH) { std::cerr << "Warning: Region 2 width (" << m_reg2.Width() << "bp) exceeds " << MAX_REGION_WIDTH << "bp limit. Cluster is too large." << std::endl; } } mapq1 = __getMeanMapq(reads); mapq2 = __getMeanMapq(mates); nm1 = __getMeanNM(reads); nm2 = __getMeanNM(mates); assert(mapq1 >= 0); assert(mapq2 >= -1); // can have -1 as placeholder if no mate reads (bc didnt do lookup) // orient them correctly so that left end is first if (m_reg2 < m_reg1) { std::swap(m_reg1, m_reg2); std::swap(reads, mates); std::swap(mapq1, mapq2); } // set the ID std::string ortid; switch (por) { case SeqLib::Orientation::FR: ortid = "FR"; break; case SeqLib::Orientation::FF: ortid = "FF"; break; case SeqLib::Orientation::RF: ortid = "RF"; break; case SeqLib::Orientation::RR: ortid = "RR"; break; default: ortid = "UD"; break; // fallback for UD or anything unexpected } int pos1 = m_reg1.strand == '+' ? m_reg1.pos2 : m_reg1.pos1; int pos2 = m_reg2.strand == '+' ? m_reg2.pos2 : m_reg2.pos1; m_id = ortid + "_" + m_reg1.ChrName(header) + "_" + std::to_string(pos1) + "___" + m_reg2.ChrName(header) + "_" + std::to_string(pos2); } void DiscordantCluster::addMateReads(const svabaReadPtrVector& bav) { if (!reads.size()) return; // log the qnames // so qnames is just the same map as reads except: // -- qnames: qname : svabaRead // -- reads: uniquesame : svabaRead // the qnames structure is useful here because when we search the pile // of reads for the mate, the read and mate should have same qname // but then it's good to have the read when we are looking at the mate // to check some things (e.g. read and mate are different members of pair) std::unordered_map qnames; for (auto& [_,read] : reads) qnames.insert({read->Qname(), read}); // OK, so this is necessary because... // we are looping through and trying to fill mate reads by comparing // against qname of reads. BUT this can be problematic if there are secondary // or supplementarty alignments. So use this region to check that mate ALSO agrees // with mate regions auto& first_read = reads.begin()->second; GenomicRegion g(first_read->MateChrID(), first_read->MatePosition(), first_read->MatePosition()); g.Pad(DISC_PAD + 1000); // loop all of the reads and find the mates, // if we have them (don't have to) for (const auto& i : bav) { // first check if this read has same name as one already stored in reads auto it_read = qnames.find(i->Qname()); if (it_read == qnames.end()) // qname not found, so this read can't be a matching mate continue; // now, check if this is the same read as we already now about (in reads) // or if it is not (the its the mate) std::string tmp = i->UniqueName(); auto it = reads.find(tmp); if (it != reads.end()) // shoot, this it just the read as "read", so we're done continue; // now check that the read and this one (i = candidate mate) are opposite in pair if (i->FirstFlag() == it_read->second->FirstFlag()) continue; // check that the orientation if (i->PairOrientation() != it_read->second->PairOrientation()) continue; // don't want to deal with these if (i->SecondaryFlag() || it_read->second->SecondaryFlag()) continue; // agrees with intiial mate orientation and position if (g.GetOverlap(i->AsGenomicRegion()) > 0) mates[tmp] = i; } } double DiscordantCluster::__getMeanMapq(const DiscordantReadMap& m) const { if (m.empty()) return -1.0; // sum them up double total = 0.0; for (auto const& kv : m) { total += kv.second->MapQuality(); } return total / m.size(); } double DiscordantCluster::__getMeanNM(const DiscordantReadMap& m) const { if (m.empty()) return -1.0; // sum them up double total = 0.0; for (auto const& kv : m) { int nm = 0; kv.second->GetIntTag("NM", nm); total += nm; } return total / m.size(); } void DiscordantCluster::labelReads() { for (auto& [_, r] : reads) { std::string dcstring; r->GetZTag("DC", dcstring); if (!dcstring.empty()) dcstring.append("d"); dcstring.append(m_id); r->AddZTag("DC", dcstring); } for (auto& [_, r] : mates) { std::string dcstring; r->GetZTag("DC", dcstring); if (!dcstring.empty()) dcstring.append("d"); dcstring.append(m_id); r->AddZTag("DC", dcstring); } } std::string DiscordantCluster::toRegionString(const SeqLib::BamHeader& h) const { int pos1 = (m_reg1.strand == '+') ? m_reg1.pos2 : m_reg1.pos1; int pos2 = (m_reg2.strand == '+') ? m_reg2.pos2 : m_reg2.pos1; std::stringstream ss; ss << h.IDtoName(m_reg1.chr) << ":" << pos1 << "(" << m_reg1.strand << ")" << "-" << h.IDtoName(m_reg2.chr) << ":" << pos2 << "(" << m_reg2.strand << ")"; return ss.str(); } // define how to print this std::string DiscordantCluster::print(const SeqLib::BamHeader& h) const { std::stringstream ss; ss << toRegionString(h) << " Tcount: " << tcount << " Ncount: " << ncount << " Mean MAPQ: " << mapq1 << " Mean Mate MAPQ: " << mapq2 << " Valid: " << (valid() ? "TRUE" : "FALSE"); return ss.str(); } bool DiscordantCluster::valid() const { // it's OK if the clusters are inter-chromosomal if (m_reg1.chr != m_reg2.chr) return true; // if its RF orientation (<----->) then bc bps are on outside, regions can overlaps if (m_reg1.strand == '-' && m_reg2.strand == '+') return true; // the clusters overlap, doesn't make sense for del and inversion type if (m_reg1.pos2 > m_reg2.pos1) return false; return true; } // define how to print to file std::string DiscordantCluster::toFileString(const SeqLib::BamHeader& h, bool with_read_names) const { std::string sep = "\t"; // get the edge of the cluster int pos1 = m_reg1.strand == '+' ? m_reg1.pos2 : m_reg1.pos1; int pos2 = m_reg2.strand == '+' ? m_reg2.pos2 : m_reg2.pos1; std::string chr1 = isEmpty() ? "NOTSET" : h.IDtoName(m_reg1.chr); std::string chr2 = isEmpty() ? "NOTSET" : h.IDtoName(m_reg2.chr); std::stringstream out; out << chr1 << sep << pos1 << sep << m_reg1.strand << sep << chr2 << sep << pos2 << sep << m_reg2.strand << sep << tcount << sep << ncount << sep << mapq1 << sep << mapq2 << sep << nm1 << sep << nm2 << sep << (m_contig.length() ? m_contig : "x") << sep << m_id; return (out.str()); } // define how to sort theses bool DiscordantCluster::operator<(const DiscordantCluster &b) const { if (m_reg1.chr < b.m_reg1.chr) return true; if (m_reg1.pos1 < b.m_reg1.pos1) return true; return false; } /** * Cluster reads by alignment position * * Checks whether a read belongs to a cluster. If so, adds it. If not, ends * and stores cluster, adds a new one. * * @param cvec Stores the vector of clusters, which grows here * @param clust The current cluster that is being added to * @param a Read to add to cluster * @param mate Flag to specify if we should cluster on mate position instead of read position * @return Description of the return value */ bool DiscordantCluster::__add_read_to_cluster(svabaReadClusterVector& cvec, svabaReadPtrVector& clust, svabaReadPtr& a, bool ismate) { // when ismate is false - just look at this read, ignore the mate // when ismate is true - just consider the mate of this read, ignore this pairmate // last info stores the latest position of the "end" of this cluster std::pair last_info; if (clust.empty()) { last_info = {-1, -1}; } else if (ismate) { last_info = {clust.back()->MateChrID(), clust.back()->MatePosition()}; } else { last_info = {clust.back()->ChrID(), clust.back()->Position()}; } // what is the position of the input read std::pair this_info; if (ismate) this_info = {a->MateChrID(), a->MatePosition()}; else this_info = {a->ChrID(), a->Position()}; // check if the cluster is getting too wide bool too_wide = !__valid_cluster(clust, ismate); // if cluster not too wide, and read is on the same chromosome // and the difference in position is less than the discordant "coupling" // parameter, then add it to this cluster if (!too_wide && this_info.first == last_info.first && (this_info.second - last_info.second) <= DISC_PAD) { clust.push_back(a); return true; // if not, then we're done with the cluster. The key is that the // input reads are position sorted, so that if this didn't make it, then // the rest won't, and we whould start the next cluster with the given read } else { if (clust.size() >= MIN_PER_CLUST) cvec.push_back(clust); clust.clear(); clust.push_back(a); return false; } } void DiscordantCluster::__cluster_mate_reads(svabaReadClusterVector& brcv, svabaReadClusterVector& fwd, svabaReadClusterVector& rev) { // loop the nascent "clustesr" which are just clustered based on // left read, not on the right read yet for (auto& cluster : brcv) { svabaReadPtrVector this_fwd, this_rev; // sort the reads in the cluster std::sort(cluster.begin(), cluster.end(), [](const svabaReadPtr& a, const svabaReadPtr& b) { return (a->MateChrID() < b->MateChrID()) || (a->MateChrID() == b->MateChrID() && a->MatePosition() < b->MatePosition()); }); // loop the reads in the nascent cluster for (svabaReadPtr& r : cluster) { assert(r->dd > 0); // see __cluster_reads for logic. Exactly the same, just now for mates if ( !r->MateReverseFlag()) __add_read_to_cluster(fwd, this_fwd, r, true); else __add_read_to_cluster(rev, this_rev, r, true); } // finish the last clusters if (__valid_cluster(this_fwd, true) && this_fwd.size() >= MIN_PER_CLUST) fwd.push_back(this_fwd); if (__valid_cluster(this_rev, true) && this_rev.size() >= MIN_PER_CLUST) rev.push_back(this_rev); } } void DiscordantCluster::__cluster_reads(svabaReadPtrVector& brv, svabaReadClusterVector& fwd, svabaReadClusterVector& rev, SeqLib::Orientation orientation) { // hold the current cluster svabaReadPtrVector this_fwd, this_rev; std::unordered_set tmp_set; // int pair_orientation = 0; // if (brv.size()) // pair_orientation = brv.front()->PairOrientation(); // cluster in the READ direction, separately for fwd and rev for (svabaReadPtr& i : brv) { // don't want to deal with secondary alignments (multiple mappings, but not split) if (i->SecondaryFlag()) continue; // if (pair_orientation != i->PairOrientation()) { // std::cerr << *i << std::endl; // std::cerr << i->PairOrientation() << std::endl; // std::cerr << pair_orientation << std::endl; // } // not a discordant read, ignore it if (i->dd <= 0) continue; // only cluster FR reads together, RF reads together, FF together and RR together // PairOrientation is invariant to if you are looking at read or mate // - that is, if you are FR from read, then the mate is not read as RF. // - it ensures that the left most read (lowest chr and pos) is the index read if (i->PairOrientation() != orientation) { continue; } // only cluster if not seen before (e.g. left-most is READ, right most is MATE) if (i->PairMappedFlag() && tmp_set.count(i->Qname()) == 0) { //20250911 // right most read acts like the "mate". // the reason to do this is that if I have both the read and it's mate, I dont // want to arbitrarily add one of the two to either fwd or reverse if (!i->IsLeftMostAlignment()) continue; tmp_set.insert(i->Qname()); // forward clustering -- this_fwd is just the most current cluster and // fwd (or rev) is the collection of clusters that grows here // convention here is that the left-most read acts like the "index read" and the if ( !i->ReverseFlag()) __add_read_to_cluster(fwd, this_fwd, i, false); // reverse clustering else __add_read_to_cluster(rev, this_rev, i, false); } } // finish the last clusters if (__valid_cluster(this_fwd, false) && this_fwd.size() >= MIN_PER_CLUST) fwd.push_back(this_fwd); if (__valid_cluster(this_rev, false) && this_rev.size() >= MIN_PER_CLUST) rev.push_back(this_rev); } bool DiscordantCluster::__valid_cluster(svabaReadPtrVector& clust, bool ismate) { if (clust.size() < 2) return true; // check if getting too wide bool too_wide; if (ismate) too_wide = (clust.size() > 1 && (clust.back()->Position() - clust[0]->Position()) > MAX_CLUSTER_WIDTH); else too_wide = (clust.size() > 1 && (clust.back()->Position() - clust[0]->Position()) > MAX_CLUSTER_WIDTH); return !too_wide; } void DiscordantCluster::__convertToDiscordantCluster(DiscordantClusterMap &dd, const svabaReadClusterVector& cvec, const svabaReadPtrVector& bav, const SeqLib::BamHeader& header) { // nothign to do if no clusters if (cvec.size() == 0) return; // always have to be more input reads than clusters assert(bav.size() > cvec.size()); // no reads, nothign to do if (!bav.size()) return; // loop through the clusters for (auto& v : cvec) { DiscordantCluster d(v, bav, header); dd[d.m_id] = d; } } GenomicRegion DiscordantCluster::GetMateRegionOfOverlap(const GenomicRegion& gr) const { if (gr.GetOverlap(m_reg1)) return m_reg2; if (gr.GetOverlap(m_reg2)) return m_reg1; return GenomicRegion(); } bool DiscordantCluster::isEmpty() const { return m_reg1.IsEmpty() || m_reg2.IsEmpty() || m_reg1.chr == -1 || m_reg2.chr == -1; } ================================================ FILE: src/svaba/DiscordantCluster.h ================================================ #pragma once #include #include #include #include #include #include "SvabaRead.h" #include "SvabaSharedConfig.h" class DiscordantCluster; typedef std::unordered_map DiscordantReadMap; typedef std::vector svabaReadClusterVector; typedef std::vector DiscordantClusterVector; typedef std::unordered_map DiscordantClusterMap; /** Class to hold clusters of discordant reads */ class DiscordantCluster { friend struct BreakPoint; public: /** Create an empty cluster */ DiscordantCluster() { m_reg1 = SeqLib::GenomicRegion(); m_reg2 = SeqLib::GenomicRegion(); assert(m_reg1.IsEmpty()); ncount = 0; tcount = 0; mapq1 = -1; mapq2 = -1; } /** Make a cluster from a set of reads (pre-clustered) and look up a larger set to find * their mates * @param this_reads Pre-clustered set of discordant reads (but not their mates) * @param all_reads A pile of reads to search for mates */ DiscordantCluster(const svabaReadPtrVector& this_reads, const svabaReadPtrVector& all_reads, const SeqLib::BamHeader& header); /** Is this discordant cluster empty? */ bool isEmpty() const; /** Return a string representing the output file header */ static std::string header() { return "chr1\tpos1\tstrand1\tchr2\tpos2\tstrand2\ttcount\tncount\t\tmapq1\tmapq2\tnm1\tnm2\tcname\tid"; } bool hasAssociatedAssemblyContig() const { return m_contig.length(); } void addMateReads(const svabaReadPtrVector& bav); /** Return the discordant cluster as a string with just coordinates */ std::string toRegionString(const SeqLib::BamHeader& h) const; /** Return the ID associated with this cluster */ std::string ID() const { return m_id; } /** Print this with region string and read counts and mapq */ //friend std::ostream& operator<<(std::ostream& out, const DiscordantCluster& dc); /** Print this with region string and read counts and mapq */ std::string print(const SeqLib::BamHeader& h) const; /** Return as a string for writing to a file */ std::string toFileString(const SeqLib::BamHeader& h, bool with_read_names) const; /** Sort by coordinate */ bool operator < (const DiscordantCluster& b) const; /** Is this a valid cluster? */ bool valid() const; static std::unordered_map clusterReads(svabaReadPtrVector& bav, const SeqLib::GenomicRegion& interval, const SeqLib::BamHeader& header); void labelReads(); static bool __add_read_to_cluster(svabaReadClusterVector &cvec, svabaReadPtrVector &clust, svabaReadPtr&, bool ismate); static void __cluster_reads(svabaReadPtrVector& brv, svabaReadClusterVector& fwd, svabaReadClusterVector& rev, SeqLib::Orientation orientation); static void __cluster_mate_reads(svabaReadClusterVector& brcv, svabaReadClusterVector& fwd, svabaReadClusterVector& rev); static void __convertToDiscordantCluster(DiscordantClusterMap& dd, const svabaReadClusterVector& cvec, const svabaReadPtrVector& bav, const SeqLib::BamHeader& header); static bool __valid_cluster(svabaReadPtrVector& clust, bool ismate); /** Query an interval against the two regions of the cluster. If the region overlaps * with one region, return the other region. This is useful for finding the partner * region give a query region */ SeqLib::GenomicRegion GetMateRegionOfOverlap(const SeqLib::GenomicRegion& gr) const; int tcount = 0; int ncount = 0; // supporting read counts per sample (e.g. t001 - 4, n001 - 6) std::unordered_map counts; DiscordantReadMap reads, mates; std::string m_contig = ""; double read_score = 0; double mate_score = 0; //int rp_orientation = -1; // FR, FF, RR, RF SeqLib::GenomicRegion m_reg1; SeqLib::GenomicRegion m_reg2; int mapq1; int mapq2; float nm1; float nm2; std::string m_id_competing; // id of discordant cluster with same span, different strands private: std::string m_id; // return the mean mapping quality for this cluster double __getMeanMapq(const DiscordantReadMap& m) const; // return the mean mismatch score for this cluster double __getMeanNM(const DiscordantReadMap& m) const; }; //! vector of AlignmentFragment objects typedef std::vector DiscordantClusterVector; //! Store a set of DiscordantCluster objects, indexed by the "id" field typedef std::unordered_map DiscordantClusterMap; ================================================ FILE: src/svaba/DiscordantRealigner.cpp ================================================ #include "DiscordantRealigner.h" #include "SvabaUtils.h" #include "SeqLib/BWAAligner.h" #ifdef QNAME #define DEBUG(msg, read) \ if (read.Qname() == QNAME && (read.AlignmentFlag() == QFLAG || QFLAG == -1)) { std::cerr << (msg) << " read " << r << std::endl; } #else #define DEBUG(msg, read) #endif //bool DiscordantRealigner::ShouldRealign(const SeqLib::BamRecord& r) const { bool DiscordantRealigner::ShouldRealign(const svabaReadPtr& r) const { //if (r.SR() == "t000_147_H01PEALXX140819:3:1219:25827:26572") // std::cerr << " DD " << r.GetDD() << " fi " << r.FullInsertSize() << " lim " << min_isize_for_discordant_realignment << std::endl; // read was already realigned if (r->GetDD() != 0) return false; // read can't be discordant anyway, since not both mapped if (!r->MappedFlag() || !r->MateMappedFlag()) return false; if (r->Interchromosomal()) return true; // get the insert size int fi = r->FullInsertSize(); // if too small, don't realign if (fi < min_isize_for_discordant_realignment && !r->Interchromosomal()) return false; return true; } //bool DiscordantRealigner::RealignRead(SeqLib::BamRecord& r, const SeqLib::BWAWrapper* bwa) const { bool DiscordantRealigner::RealignRead(svabaReadPtr& r, const std::shared_ptr bwa) const { DEBUG("Realigning original read", r); BamRecordPtrVector als; bwa->alignSequence(r->CorrectedSeq(), r->Qname(), als, false, 0.60, secondary_cap); // no alignments, so label as bad if (!als.size()) { r->SetDD(MAPS_NOWHERE); return false; } // discordant alignments SeqLib::GenomicRegion gr = r->AsGenomicRegion(); SeqLib::GenomicRegion grm = r->AsGenomicRegionMate(); grm.Pad(discordant_realign_mate_pad); bool has_orig = false; bool maps_near_mate = false; for (const auto& i : als) { DEBUG(" Realigned hit (one of) " + std::to_string(als.size()), *i); // if there is another alignment that overlaps with the original // but has a lower MAPQ, take the new mapq if (gr.GetOverlap(i->AsGenomicRegion())) { has_orig = true; r->SetMapQuality(std::min(i->MapQuality(), r->MapQuality())); } DEBUG(" Realigned hit has overlap with mate of N bases: " + std::to_string(r->OverlappingCoverage), i); // if mate is mapped, and read maps to near mate region wo clips, it's not disc if (grm.GetOverlap(i->AsGenomicRegion())) { // if not clipped or overlaps same covered region as original, // then it has a secondary mapping if (r->NumClip() < 20 || r->OverlappingCoverage(*i) >= 20) maps_near_mate = true; DEBUG(" Found realignment hit near mate", i); } } // end als loop // add tags if (!has_orig) r->SetDD(MAPS_NOT_NEAR_ORIG); else if (maps_near_mate) r->SetDD(MAPS_NEAR_MATE); else r->SetDD(als.size()); return r->GetDD() < 0; // was it realigned? } /*void DiscordantRealigner::ReassignRead(svabaRead& r, const svabaRead& s) const { r.Reassign(s); r.SetDD(REASSIGNED_READ); return; }*/ ================================================ FILE: src/svaba/DiscordantRealigner.h ================================================ #pragma once namespace SeqLib { class BWAAligner; } #include "SvabaRead.h" // object that holds functions for re-aligning a discordant read // and checking if it is a true discordant read class DiscordantRealigner { public: DiscordantRealigner() {} ~DiscordantRealigner() {} // check if a read should be realigned //bool ShouldRealign(const SeqLib::BamRecord& r) const; bool ShouldRealign(const svabaReadPtr& r) const; // realign read bool RealignRead(svabaReadPtr& r, const std::shared_ptr bwa) const; // reassign a read if it has a better mapping // r is the read to be reassigned, s source alignment is the new alignment //void ReassignRead(SeqLib::BamRecord& r, const SeqLib::BamRecord& s) const; //void ReassignRead(svabaRead& r, const svabaRead& s) const; static const int MAPS_NOT_NEAR_ORIG = -1; static const int MAPS_NEAR_MATE = -2; static const int MAPS_NOWHERE = -3; static const int MATE_BAD_DISC = -4; static const int REASSIGNED_READ = -5; private: // max number of secondary reads to consider int secondary_cap = 20; // minimum size to check int min_isize_for_discordant_realignment = 1000; // how much to search aroudn mate region for read alignent int discordant_realign_mate_pad = 100; }; ================================================ FILE: src/svaba/Histogram.cpp ================================================ #include "Histogram.h" #include "SeqLib/SeqLibUtils.h" #include #include #include #include #define BINARY_SEARCH 1 #define DEBUG_HISTOGRAM using namespace SeqLib; Histogram::Histogram(const int32_t& start, const int32_t& end, const uint32_t& width) { if (end >= start) throw std::invalid_argument("Histogram end must be > start"); Bin bin; bin.bounds.first = start; int32_t next_end = start + width - 1; // -1 because width=1 is bound.first = bounds.second while (next_end < end) { // finish this bin bin.bounds.second = next_end; m_bins.push_back(bin); m_ind.push_back(bin.bounds.first); // make the index for the lower bound // start a new one bin.bounds.first = next_end+1; next_end += width; } // finish the last bin bin.bounds.second = end; m_bins.push_back(bin); m_ind.push_back(bin.bounds.first); // add a final bin //bin.bounds.first = end+1; //bin.bounds.second = INT_MAX; //m_bins.push_back(bin); //m_ind.push_back(bin.bounds.first); } void Histogram::toCSV(std::ofstream &fs) { for (auto& i : m_bins) fs << i << std::endl; } void Histogram::removeElem(const int32_t& elem) { --m_bins[retrieveBinID(elem)]; } void Histogram::addElem(const int32_t& elem) { ++m_bins[retrieveBinID(elem)]; } std::string Histogram::toFileString() const { std::stringstream ss; for (auto& i : m_bins) if (i.m_count) ss << i.bounds.first << "_" << i.bounds.second << "_" << i.m_count << ","; std::string out = ss.str(); out.pop_back(); // trim off last comma return(out); } size_t Histogram::retrieveBinID(const int32_t& elem) const { if (elem < m_bins[0].bounds.first) { #ifdef DEBUG_HISTOGRAM std::cerr << "removeElem: elem of value " << elem << " is below min bin " << m_bins[0] << std::endl; exit(1); #endif return 0; } if (elem > m_bins.back().bounds.second) { #ifdef DEBUG_HISTOGRAM std::cerr << "removeElem: elem of value " << elem << " is above max bin " << m_bins.back() << std::endl; exit(1); #endif return m_bins.size(); } if (m_bins[0].contains(elem)) return 0; if (m_bins.back().contains(elem)) return m_bins.size(); #ifdef BINARY_SEARCH // binary search std::vector::const_iterator it = std::upper_bound(m_ind.begin(), m_ind.end(), elem); size_t i = it - m_ind.begin()-1; assert(i < m_ind.size()); return i; #else for (size_t i = 0; i < m_bins.size(); i++) { if (m_bins[i].contains(elem)) { return i; } } #endif std::cerr << "bin not found for element " << elem << std::endl; return 0; } /*void Histogram::initialize(size_t num_bins, std::vector* pspanv, size_t min_bin_width) { // ensure that they spans are sorted std::sort(pspanv->begin(), pspanv->end()); // fill the histogram bins with matrix pairs (pre-sorted by distance) Bin bin; // get number of inter-chr events size_t intra = 0; for (auto& i : *pspanv) if (i != INTERCHR) intra++; int bin_cut = 0; try { bin_cut = floor((double)intra / (double)num_bins); if (bin_cut == 0) throw 1; } catch(...) { std::cerr << "Error in determining bin cut. Not enought events or too many bins?" << std::endl; std::cerr << "Events: " << pspanv->size() << " Num Bins " << num_bins << " quantile count (hist height) " << bin_cut << std::endl; } std::cout << "...Events per bin: " << bin_cut << " num bins " << num_bins << std::endl; S last_span = 0; size_t tcount = 0; // count events put into bins // iterate over spans for (auto& span : *pspanv) { if (span != INTERCHR) { ++tcount; // moved into a new bin? (or done?) if (bin.getCount() > bin_cut && span != last_span && (last_span - bin.bounds.first) >= min_bin_width) { // finalize, save old bin bin.bounds.second = last_span; m_bins.push_back(bin); // new bin bin.bounds.first = last_span+1; bin.m_count = 0; } ++bin; if (bin.getCount() >= bin_cut) { last_span = span; } //update the size of current bin bin.bounds.second = span; } } // add the last bin bin.bounds.second = INTERCHR-1; m_bins.push_back(bin); // add a bin for interchr events bin.bounds = {INTERCHR, INTERCHR}; bin.m_count = pspanv->size() - intra; m_bins.push_back(bin); // make the indices of lower bound for (auto& i : m_bins) m_ind.push_back(i.bounds.first); if (m_bins.size() != (num_bins+1)) { //std::cout << " bin cut " << bin_cut << std::endl; //std::cout << " num bins " << num_bins << " bins.size() " << m_bins.size() << std::endl; //assert(bins.size() == (num_bins+1)); } }*/ bool Bin::operator < (const Bin& b) const { return (bounds.first < b.bounds.first || (bounds.first==b.bounds.first && bounds.second < b.bounds.second)); } bool Bin::contains(const int32_t& elem) const { return (elem >= bounds.first && elem <= bounds.second); } Bin& Bin::operator++() { ++m_count; return *this; } Bin& Bin::operator--() { assert(m_count > 0); --m_count; return *this; } ================================================ FILE: src/svaba/Histogram.h ================================================ #ifndef SEQLIB_HISTOGRAM_H__ #define SEQLIB_HISTOGRAM_H__ #include #include #include #include #include #include #include #include "SeqLib/IntervalTree.h" class Bin; typedef SeqLib::TInterval BinInterval; typedef SeqLib::TIntervalTree BinIntervalTree; typedef std::vector BinIntervalVector; #define INTERCHR 250000000 class Histogram; /** Stores one bin in a Histogram */ class Bin { friend class Histogram; public: /** Construct a new object with 0 count and range [0,1] */ Bin() : m_count(0) { bounds = {0,1}; } /** Output the bin in format "start range, end range, count" */ friend std::ostream& operator<<(std::ostream &out, const Bin &b) { out << b.bounds.first << "," << b.bounds.second << "," << b.m_count; return out; } /** Return the number of counts in this histogram bin */ int32_t getCount() const { return m_count; } /** Check if a value fits within the range of this bin * @param dist Distance value to check if its in this range * @return true if the value is within the range */ /** Check if this bin contains a value * @param elem Value to check if its in this range * @return true if the value is within the range */ bool contains(const int32_t& elem) const; /** Define bin comparison operator by location of left bound, then right */ bool operator < (const Bin& b) const; /** Decrement the histogram bin by one. * Note that this is the prefix version only */ Bin& operator--(); /** Increment the histogram bin by one. * Note that this is the prefix version only */ Bin& operator++(); private: int32_t m_count; std::pair bounds; //@! was"bin"; }; /** Class to store histogram of numeric values. * * The bins of the Histogram are not uniformly spaced, and their ranges determined * by partitioning the spans it tablulates into uniform quantiles when initialized * by Histogram::initialSpans(). As elements are added and removed this initial bin * definition remains constant. */ class Histogram { private: std::vector m_ind; public: std::vector m_bins; /** Construct an empty histogram */ Histogram() {} /** Construct a new histogram with bins spaced evenly * @param start Min value covered * @param end Max value covered * @param width Fixed bin width * @exception Throws an invalid_argument if end <= start */ Histogram(const int32_t& start, const int32_t& end, const uint32_t& width); std::string toFileString() const; friend std::ostream& operator<<(std::ostream &out, const Histogram &h) { for (auto& i : h.m_bins) out << i << std::endl; return out; } /** Return iterator to the fist bin */ std::vector::iterator begin() { return m_ind.begin(); } /** Return iterator to the last bin */ std::vector::iterator end() { return m_ind.end(); } /** Initialize histogram from a vector of numeric values */ void Initialize(size_t num_bins, std::vector* pspanv, size_t min_bin_width = 0); /** Add an element to the histogram * @param elem Length of event to add */ void addElem(const int32_t &elem); /** Remove a span from the histogram * @param span Length of event to remove */ void removeElem(const int32_t &elem); /** Output to CSV file like: bin_start,bin_end,count */ void toCSV(std::ofstream &fs); /** Return the total number of elements in the Histogram */ int totalCount() const { int tot = 0; for (auto& i : m_bins) tot += i.getCount(); return tot; } /** Get count for a histogram bin * @param i Bin index * @return number of events in histogram bin */ int32_t binCount(size_t i) { return m_bins[i].getCount(); } /** Get number of bins in histogram * @return Number of bins in histogram */ size_t numBins() { return m_bins.size(); } /** Find bin corresponding to a span * @param elem Event length * @return Bin containing event length */ size_t retrieveBinID(const int32_t& elem) const; }; #endif ================================================ FILE: src/svaba/KmerFilter.cpp ================================================ #include "KmerFilter.h" #include "ReadTable.h" // int KmerFilter::correctReads(svabaReadVector& vec) { // if (!vec.size()) // return 0; // if (!pBWT) // return 0; // cant correct if didnt learn how // int corrected_reads = 0; // //int intervalCacheLength = 10; // SGA defaul // //int intervalCacheLength = 1; //vec[0].Length(); // BWTIntervalCache* pIntervalCache = nullptr; //new BWTIntervalCache(intervalCacheLength, pBWT); // BWTIndexSet indices; //(pBWT, pRBWT, nullptr, pIntervalCache); // indices.pBWT = pBWT; // indices.pCache = pIntervalCache; // KmerCountMap kmerCache; // for (auto& r : vec) { // // non-clipped mapped reads with no mismatches are OK (nothing to correct) // //if (r.GetIntTag("NM") == 0 && r.NumClip() == 0 && r.MappedFlag()) // // continue; // std::string readSequence = r.CorrectedSeq(); //QualityTrimmedSequence(4, dum); // std::string origSequence = readSequence; // int n = readSequence.length(); // if (n < m_kmer_len) // can't correct, too short // continue; // int nk = n - m_kmer_len + 1; // std::vector minPhredVector(nk, 25); // 25 is a dummy value // // Are all kmers in the read well-represented? // bool allSolid = false; // bool done = false; // int rounds = 0; // int maxAttempts = 3; //m_params.numKmerRounds; // while (!done && nk > 0) { // // Compute the kmer counts across the read // // and determine the positions in the read that are not covered by any solid kmers // // These are the candidate incorrect bases // std::vector countVector(nk, 0); // std::vector solidVector(n, 0); // for(int i = 0; i < nk; ++i) // { // std::string kmer; // try { // kmer = readSequence.substr(i, 31); // } catch (...) { // std::cerr << "KmerFilter substr out of bounds. seqlen " << readSequence.length() << // " stat " << i << " length " << 31 << std::endl; // } // int count = 0; // KmerCountMap::iterator iter = kmerCache.find(kmer); // if (iter != kmerCache.end()) { // count = iter->second; // } else { // count = BWTAlgorithms::countSequenceOccurrences(kmer, indices); // kmerCache.insert(std::make_pair(kmer, count)); // } // // Get the phred score for the last base of the kmer // int phred = minPhredVector[i]; // countVector[i] = count; // // Determine whether the base is solid or not based on phred scores // int threshold = CorrectionThresholds::Instance().getRequiredSupport(phred); // if(count >= threshold) // { // for(int j = i; j < i + 31; ++j) // solidVector[j] = 1; // } // } // allSolid = true; // for(int i = 0; i < n; ++i) { // if(solidVector[i] != 1) // allSolid = false; // } // // Stop if all kmers are well represented or we have exceeded the number of correction rounds // if(allSolid || rounds++ > maxAttempts) // break; // // Attempt to correct the leftmost potentially incorrect base // bool corrected = false; // for(int i = 0; i < n; ++i) // { // if(solidVector[i] != 1) // { // // Attempt to correct the base using the leftmost covering kmer // int phred = 25; //workItem.read.getPhredScore(i); // int threshold = CorrectionThresholds::Instance().getRequiredSupport(phred); // int left_k_idx = (i + 1 >= 31 ? i + 1 - 31 : 0); // corrected = attemptKmerCorrection(i, left_k_idx, std::max(countVector[left_k_idx], threshold), readSequence, indices); // if(corrected) // break; // // base was not corrected, try using the rightmost covering kmer // size_t right_k_idx = std::min(i, n - 31); // corrected = attemptKmerCorrection(i, right_k_idx, std::max(countVector[right_k_idx], threshold), readSequence, indices); // if(corrected) // break; // } // } // // If no base in the read was corrected, stop the correction process // if(!corrected) // { // assert(!allSolid); // done = true; // } // } // end while // // if allsolid // if( readSequence != origSequence) // { // ++corrected_reads; // assert(readSequence.length()); // r.AddZTag("KC", readSequence); // //std::cerr << ssi.id << std::endl; // //std::cerr << "**************Read corrected from\to " << std::endl << "\t" << ssi.seq.toString() << std::endl << "\t" << readSequence << std::endl; // //result.correctSequence = readSequence; // //result.kmerQC = true; // } // else // { // //std::cerr << "Read NOT corrected from\to " << std::endl << "\t" << ssi.seq.toString() << std::endl << "\t" << readSequence << std::endl; // //result.correctSequence = workItem.read.seq.toString(); // //result.kmerQC = false; // } // } // delete pIntervalCache; // return corrected_reads; // return 0; // } int KmerFilter::correctReads(svabaReadVector& vec) { if (!vec.size()) return 0; if (!pBWT) return 0; // cant correct if didnt learn how int corrected_reads = 0; //int intervalCacheLength = 10; // SGA defaul //int intervalCacheLength = 1; //vec[0].Length(); BWTIntervalCache* pIntervalCache = nullptr; //new BWTIntervalCache(intervalCacheLength, pBWT); BWTIndexSet indices; //(pBWT, pRBWT, nullptr, pIntervalCache); indices.pBWT = pBWT; indices.pCache = pIntervalCache; KmerCountMap kmerCache; for (auto& r : vec) { // non-clipped mapped reads with no mismatches are OK (nothing to correct) //if (r.GetIntTag("NM") == 0 && r.NumClip() == 0 && r.MappedFlag()) // continue; std::string readSequence = r.CorrectedSeq(); std::string origSequence = readSequence; int n = readSequence.length(); if (n < m_kmer_len) // can't correct, too short continue; int nk = n - m_kmer_len + 1; std::vector minPhredVector(nk, 25); // 25 is a dummy value // Are all kmers in the read well-represented? bool allSolid = false; bool done = false; int rounds = 0; int maxAttempts = 3; //m_params.numKmerRounds; while (!done && nk > 0) { // Compute the kmer counts across the read // and determine the positions in the read that are not covered by any solid kmers // These are the candidate incorrect bases std::vector countVector(nk, 0); std::vector solidVector(n, 0); for(int i = 0; i < nk; ++i) { std::string kmer; try { kmer = readSequence.substr(i, 31); } catch (...) { std::cerr << "KmerFilter substr out of bounds. seqlen " << readSequence.length() << " stat " << i << " length " << 31 << std::endl; } int count = 0; KmerCountMap::iterator iter = kmerCache.find(kmer); if (iter != kmerCache.end()) { count = iter->second; } else { count = BWTAlgorithms::countSequenceOccurrences(kmer, indices); kmerCache.insert(std::make_pair(kmer, count)); } // Get the phred score for the last base of the kmer int phred = minPhredVector[i]; countVector[i] = count; // Determine whether the base is solid or not based on phred scores int threshold = CorrectionThresholds::Instance().getRequiredSupport(phred); if(count >= threshold) { for(int j = i; j < i + 31; ++j) solidVector[j] = 1; } } allSolid = true; for(int i = 0; i < n; ++i) { if(solidVector[i] != 1) allSolid = false; } // Stop if all kmers are well represented or we have exceeded the number of correction rounds if(allSolid || rounds++ > maxAttempts) break; // Attempt to correct the leftmost potentially incorrect base bool corrected = false; for(int i = 0; i < n; ++i) { if(solidVector[i] != 1) { // Attempt to correct the base using the leftmost covering kmer int phred = 25; //workItem.read.getPhredScore(i); int threshold = CorrectionThresholds::Instance().getRequiredSupport(phred); int left_k_idx = (i + 1 >= 31 ? i + 1 - 31 : 0); corrected = attemptKmerCorrection(i, left_k_idx, std::max(countVector[left_k_idx], threshold), readSequence, indices); if(corrected) break; // base was not corrected, try using the rightmost covering kmer size_t right_k_idx = std::min(i, n - 31); corrected = attemptKmerCorrection(i, right_k_idx, std::max(countVector[right_k_idx], threshold), readSequence, indices); if(corrected) break; } } // If no base in the read was corrected, stop the correction process if(!corrected) { assert(!allSolid); done = true; } } // end while // if allsolid if( readSequence != origSequence) { ++corrected_reads; assert(readSequence.length()); //r.AddZTag("KC", readSequence); r.SetCorrectedSeq(readSequence); //std::cerr << ssi.id << std::endl; //std::cerr << "**************Read corrected from\to " << std::endl << "\t" << ssi.seq.toString() << std::endl << "\t" << readSequence << std::endl; //result.correctSequence = readSequence; //result.kmerQC = true; } else { //std::cerr << "Read NOT corrected from\to " << std::endl << "\t" << ssi.seq.toString() << std::endl << "\t" << readSequence << std::endl; //result.correctSequence = workItem.read.seq.toString(); //result.kmerQC = false; } } delete pIntervalCache; return corrected_reads; return 0; } // directly from SGA, Jared Simpson bool KmerFilter::attemptKmerCorrection(size_t i, size_t k_idx, size_t minCount, std::string& readSequence, BWTIndexSet& inds) { assert(i >= k_idx && i < k_idx + m_kmer_len); size_t base_idx = i - k_idx; char originalBase = readSequence[i]; std::string kmer; try { kmer = readSequence.substr(k_idx, m_kmer_len); } catch(...) { std::cerr << "KmerFilter::attemptKmerCorrection substr out of bounds. seqlen " << readSequence.length() << " start " << k_idx << " length " << m_kmer_len << std::endl; } size_t bestCount = 0; char bestBase = '$'; #if KMER_TESTING std::cout << "i: " << i << " k-idx: " << k_idx << " " << kmer << " " << reverseComplement(kmer) << "\n"; #endif for(int j = 0; j < DNA_ALPHABET::size; ++j) { char currBase = ALPHABET[j]; if(currBase == originalBase) continue; kmer[base_idx] = currBase; size_t count = BWTAlgorithms::countSequenceOccurrences(kmer, inds); #if KMER_TESTING printf("%c %zu\n", currBase, count); #endif if(count >= minCount) { // Multiple corrections exist, do not correct if(bestBase != '$') return false; bestCount = count; bestBase = currBase; } } if(bestCount >= minCount) { assert(bestBase != '$'); readSequence[i] = bestBase; return true; } return false; } void KmerFilter::makeIndex(const std::vector& v) { ReadTable pRT; pRT.setZero(); int dd = 0; // make the reads tables for (auto& i : v) { SeqItem si; std::string seq(i); // if the read is good, add it to the table so we can use for kmer index if (seq.length() >= 40 && seq.find("N") == std::string::npos) { si.id = std::to_string(dd); si.seq = seq; pRT.addRead(si); ++dd; } } if (pRT.getCount() == 0) return; // make suffix array pSAf = new SuffixArray(&pRT, 1, false); // make BWT pBWT = new RLBWT(pSAf, &pRT); return; } // /*void KmerFilter::makeIndex(SeqLib::BamRecordVector& vec) { ReadTable pRT; pRT.setZero(); int dd = 0; // make the reads tables for (auto& i : vec) { SeqItem si; std::string sr, seq = ""; seq = i.QualitySequence(); //i.QualityTrimmedSequence(4, dum); // if the read is good, add it to the table so we can use for kmer index if (seq.length() >= 40 && seq.find("N") == std::string::npos) { si.id = std::to_string(dd); si.seq = seq; std::cerr << " seq " << seq << std::endl; pRT.addRead(si); ++dd; } } if (pRT.getCount() == 0) return; // make suffix array pSAf = new SuffixArray(&pRT, 1, false); // make BWT pBWT= new RLBWT(pSAf, &pRT); } // void KmerFilter::makeIndex(svabaReadVector& vec) { ReadTable pRT; pRT.setZero(); int dd = 0; // make the reads tables for (auto& i : vec) { SeqItem si; std::string sr; std::string seq = i.Seq(); // if the read is good, add it to the table so we can use for kmer index if (seq.length() >= 40 && seq.find("N") == std::string::npos) { si.id = std::to_string(dd); si.seq = seq; pRT.addRead(si); ++dd; } } if (pRT.getCount() == 0) return; // make suffix array pSAf = new SuffixArray(&pRT, 1, false); // make BWT pBWT= new RLBWT(pSAf, &pRT); } */ ================================================ FILE: src/svaba/KmerFilter.h ================================================ #pragma once #include #include #include "SeqLib/BamRecord.h" #include "CorrectionThresholds.h" #include "OverlapCommon.h" #include "SvabaRead.h" typedef std::map KmerCountMap; class KmerFilter { public: KmerFilter() : pBWT(nullptr), pSAf(nullptr) {} ~KmerFilter() { delete pBWT; delete pSAf; } int correctReads(SeqLib::BamRecordVector& vec); int correctReads(svabaReadVector& vec); void makeIndex(const std::vector& v); //void makeIndex(SeqLib::BamRecordVector& vec); private: RLBWT* pBWT; SuffixArray* pSAf; int m_kmer_len = 31; bool attemptKmerCorrection(size_t i, size_t k_idx, size_t minCount, std::string& readSequence, BWTIndexSet& inds); }; ================================================ FILE: src/svaba/LearnBamParams.cpp ================================================ // LearnBamParams.cpp #include "LearnBamParams.h" #include "SeqLib/BamRecord.h" #include "SeqLib/BamReader.h" #include "SeqLib/GenomicRegion.h" #include "SvabaSharedConfig.h" #include "SvabaOptions.h" #include "SvabaLogger.h" #include "gzstream.h" #include #include #include #include #include #include #include #include namespace { // helper to extract read group ids from the header std::vector extractReadGroups(const SeqLib::BamHeader& hdr) { std::vector groups; std::istringstream lines(hdr.AsString()); std::string line; while (std::getline(lines, line)) { if (line.rfind("@RG", 0) != 0) continue; std::istringstream fields(line); std::string field; while (std::getline(fields, field, '\t')) { if (field.rfind("ID:", 0) == 0) { groups.push_back(field.substr(3)); break; } } } return groups; } } // anonymous namespace #include std::ostream& operator<<(std::ostream& os, const BamReadGroup& bg) { os << "r=" << bg.reads << " s=" << bg.supp << " u=" << bg.unmap << " qc=" << bg.qcfail << " d=" << bg.duplicate << " mu=" << bg.mate_unmap << " MQ=" << bg.mapq_max << " RL=" << bg.readlen_max << " mIS=" << bg.isize_median << " sdIS=" << bg.sd_isize << " n_isize=" << bg.isize_vec.size(); return os; } LearnBamParams::LearnBamParams(SvabaSharedConfig& sc_, const std::string& bamPath) : sc(sc_), bam_(bamPath) { // make the new BamReader reader_ = std::make_shared(); // open the BAM for learning if (!reader_->Open(bam_)) { throw std::runtime_error("Could not open bam file " + bam_ + " in LearnBamParams"); } } size_t LearnBamParams::consumeReads( size_t max_reads, std::unordered_map& rg_count, std::unordered_set& satisfied_rgs, const std::vector& groups) { size_t consumed = 0; while (auto r = reader_->Next()) { if (consumed >= max_reads) break; // get read group tag std::string rg; if (!r->GetZTag("RG", rg)) rg = "NA"; ++consumed; // already saturated this RG — skip if (satisfied_rgs.count(rg)) continue; // check if this read pushes the RG over the limit size_t& cnt = rg_count[rg]; if (cnt >= static_cast(sc.opts.perRgLearnLimit)) { satisfied_rgs.insert(rg); // check if all header-declared RGs are satisfied if (satisfied_rgs.size() >= groups.size()) break; continue; } // refer to existing BamReadGroup or make new auto& bstats = bam_read_groups[rg]; bstats.addRead(*r); ++cnt; } return consumed; } void LearnBamParams::learnParams() { // gather read group ids from the header auto hdr = reader_->Header(); auto groups = extractReadGroups(hdr); int n_contigs = hdr.NumSequences(); sc.logger.log(true, true, "......header declares ", groups.size(), " read groups across ", n_contigs, " contigs"); // per-RG counts and satisfaction tracking std::unordered_map rg_count; std::unordered_set satisfied_rgs; size_t total_reads = 0; // --- Phase 1: multi-region sampling --- // Build sampling windows at the midpoint of each reference contig. // This ensures we see reads from every part of the genome, catching // read groups that only appear on later chromosomes. // // For standard contigs (chr1-chrY, ~24 contigs), the 1M-read-per-window // budget means we sample ~24M reads total in the worst case. For BAMs // with many small contigs (alt/decoy/random), we skip contigs shorter // than 1 Mb to avoid wasting time on regions with few reads. // // In human mode (default), we also skip non-standard chromosomes // (chrID > MAX_MATE_CHR_ID, i.e. chrM/alt/decoy/random) to focus // sampling on the primary assembly where isize/coverage stats are // representative. --non-human disables this gate. constexpr int32_t MIN_CONTIG_LEN = 1'000'000; // skip tiny contigs constexpr size_t READS_PER_WINDOW = 1'000'000; // reads per sampling window constexpr int32_t WINDOW_HALF = 500'000; // +/- 500kb around midpoint const int max_sample_chr = sc.opts.maxMateChrID; // 23 (through chrY) or -1 if --non-human for (int c = 0; c < n_contigs; ++c) { // early exit if all RGs are satisfied if (satisfied_rgs.size() >= groups.size()) break; // skip non-standard chromosomes in human mode if (max_sample_chr >= 0 && c > max_sample_chr) continue; int32_t clen = hdr.GetSequenceLength(c); if (clen < MIN_CONTIG_LEN) continue; // sample from the midpoint of the contig int32_t mid = clen / 2; int32_t start = std::max(0, mid - WINDOW_HALF); int32_t end = std::min(clen, mid + WINDOW_HALF); SeqLib::GenomicRegion region(c, start, end); if (!reader_->SetRegion(region)) continue; // skip if region query fails (no index?) size_t consumed = consumeReads(READS_PER_WINDOW, rg_count, satisfied_rgs, groups); total_reads += consumed; // log progress every 5 contigs if (c % 5 == 0 || c == n_contigs - 1) { sc.logger.log(sc.opts.verbose > 0, true, "......sampling ", hdr.IDtoName(c), " - ", SeqLib::AddCommas(total_reads), " reads, ", satisfied_rgs.size(), "/", groups.size(), " RGs satisfied"); } } // If some header-declared RGs weren't seen during multi-region // sampling, they're likely absent from the BAM entirely (phantom // header entries from upstream merges, etc.). Don't waste time on // a sequential scan — the multi-region pass already covered every // standard chromosome. if (satisfied_rgs.size() < groups.size()) { sc.logger.log(true, true, "......", satisfied_rgs.size(), "/", groups.size(), " RGs satisfied after multi-region sampling (", SeqLib::AddCommas(total_reads), " reads); ", "skipping sequential fallback — missing RGs likely absent from BAM"); } sc.logger.log(true, true, "......learning complete: ", SeqLib::AddCommas(total_reads), " reads scanned, ", bam_read_groups.size(), " read groups found, ", satisfied_rgs.size(), "/", groups.size(), " header RGs satisfied"); // log any RGs from the header that we never found reads for for (const auto& g : groups) { if (bam_read_groups.find(g) == bam_read_groups.end()) { sc.logger.log(true, true, "......WARNING: read group '", g, "' declared in header but no reads found"); } } // dump raw isize data for R plotting BEFORE computeStats clears the vectors. // Use the BAM filename stem in the output name so multiple BAMs don't clobber. if (!sc.opts.analysisId.empty()) { // extract basename: /path/to/foo.bam -> foo std::string stem = bam_; auto slash = stem.rfind('/'); if (slash != std::string::npos) stem = stem.substr(slash + 1); auto dot = stem.rfind('.'); if (dot != std::string::npos) stem = stem.substr(0, dot); dumpLearnData(sc.opts.analysisId + "." + stem); } // compute isize stats // store the max readlen and mapq for this entire bam across RGs for (auto& br : bam_read_groups) { br.second.computeStats(); readlen_max = std::max(readlen_max, br.second.readlen_max); mapq_max = std::max(mapq_max, br.second.mapq_max); isize_max = std::max(isize_max, br.second.isize_median); } // Log per-RG insert size stats and the derived discordant cutoff. // // Method: // 1. Sample up to perRgLearnLimit (default 1000) FR read pairs per // read group from the midpoint of each standard chromosome. // 2. Discard the top 2% of |isize| values as outliers. // 3. Compute median and population SD on the remaining 98%. // 4. Discordant cutoff = median + SD * sdDiscCutoff // (sdDiscCutoff defaults to 3.92 for tumor, 3.60 for normal). // 5. A read pair with |isize| > cutoff is classified as discordant. // // The cutoff is applied per-RG in svabaBamWalker::getIsizeCutoff(), // used by both readBam (read extraction) and TagDiscordant (read // tagging). Normal uses a lower multiplier (sdDiscCutoffNormal) // so it's more sensitive to marginal discordant reads, preventing // germline events from being mis-called as somatic. sc.logger.log(true, true, "......insert size learning summary (per read group):"); sc.logger.log(true, true, "...... method: median + SD * sdDiscCutoff on bottom 98% of FR pairs"); sc.logger.log(true, true, "...... sdDiscCutoff=", sc.opts.sdDiscCutoff, " (tumor), sdDiscCutoffNormal=", sc.opts.sdDiscCutoffNormal, " (normal); up to ", sc.opts.perRgLearnLimit, " pairs/RG"); for (const auto& [rg, bp] : bam_read_groups) { double cutoff = bp.isize_median + bp.sd_isize * sc.opts.sdDiscCutoff; sc.logger.log(true, true, "...... RG='", rg, "' n_pairs=", bp.n_isize_pairs, " median=", static_cast(bp.isize_median), " sd=", static_cast(bp.sd_isize), " disc_cutoff(tumor)=", static_cast(cutoff), " readlen=", bp.readlen_max); } } void LearnBamParams::dumpLearnData(const std::string& prefix) const { std::string fn = prefix + ".learn.tsv.gz"; ogzstream out(fn.c_str()); if (!out.good()) { sc.logger.log(true, true, "WARNING: could not open ", fn, " for writing learn data"); return; } // header out << "bam\trg\tisize\n"; // one row per isize observation, per RG for (const auto& [rg, brg] : bam_read_groups) { for (uint32_t is : brg.isize_vec) { out << bam_ << '\t' << rg << '\t' << is << '\n'; } } out.close(); sc.logger.log(true, true, "......wrote learning data to ", fn); } void BamReadGroup::addRead(const SeqLib::BamRecord &r) { // track the flags ++reads; if (r.SecondaryFlag()) ++supp; if (r.QCFailFlag()) ++qcfail; if (r.DuplicateFlag()) ++duplicate; if (!r.MappedFlag()) ++unmap; if (!r.MateMappedFlag()) ++mate_unmap; // track the mapq mapq_max = std::max(mapq_max, r.MapQuality()); // track the insert size if (!r.PairMappedFlag() || r.Interchromosomal() || r.PairOrientation() != SeqLib::Orientation::FR) ; else if (!r.Interchromosomal()) isize_vec.push_back(std::abs(r.InsertSize())); // track the read length readlen_max = std::max(readlen_max, r.Length()); } void BamReadGroup::computeStats() { if (isize_vec.empty()) { isize_median = 0.0; sd_isize = 0.0; return; } // Remove the top 2% of values to filter out extreme outliers std::sort(isize_vec.begin(), isize_vec.end()); size_t n = isize_vec.size(); size_t keep = static_cast(std::floor(n * 0.98)); if (keep == 0) { // If 98% rounds down to 0, keep at least one element keep = 1; } isize_vec.resize(keep); n_isize_pairs = keep; // Calculate median (vector is already sorted) if (keep % 2 == 1) { isize_median = isize_vec[keep / 2]; } else { isize_median = (isize_vec[keep / 2 - 1] + isize_vec[keep / 2]) / 2.0; } // Calculate population standard deviation around the median double sq_sum = 0.0; for (uint32_t val : isize_vec) { double diff = val - isize_median; sq_sum += diff * diff; } sd_isize = std::sqrt(sq_sum / keep); // Clean up memory isize_vec.clear(); } ================================================ FILE: src/svaba/LearnBamParams.h ================================================ // LearnBamParams.h #pragma once #include #include #include #include #include #include #include class SvabaSharedConfig; namespace SeqLib { class BamRecord; class BamReader; } /** Store information pertaining to a given read group * * * This class will collect statistics on number of: read, supplementary reads, unmapped reads, qcfail reads, duplicate reads. * It will also create Histogram objects to store counts of: mapq, nm, isize, clip, mean phred score, length */ class BamReadGroup { public: /** Construct an empty BamReadGroup */ BamReadGroup() {} /** Add a BamRecord to this read group */ void addRead(const SeqLib::BamRecord &r); void computeStats(); friend std::ostream& operator<<(std::ostream& os, const BamReadGroup& bg); // count number of reads size_t reads = 0; size_t supp = 0; size_t unmap = 0; size_t qcfail = 0; size_t duplicate = 0; size_t mate_unmap = 0; int mapq_max = 0; int readlen_max = 0; std::vector isize_vec; // statistics (set by computeStats) size_t n_isize_pairs = 0; // number of FR pairs used (after 98% trim) double isize_median = 0; double sd_isize = 0; // SD computed around the median }; /** * LearnBamParams encapsulates logic to learn insert-size and related statistics * from a single BAM file or across multiple BAM files. It: * - Opens and iterates through each read in the BAM (via SeqLib::BamReader) * - Groups reads by read-group and collects metrics (read length, MAPQ, insert-size distribution) * - Computes per-read-group statistics (mean, median, SD of insert size, coverage, clip fraction, etc.) * - Provides a static helper to run this process on a set of BAM files and * produce both per-file (per RG) and global summary statistics (max read length, * max mapQ, and a discordant read size cutoff). * * Sampling strategy (SvABA2.0): coordinate-sorted BAMs cluster read groups * by genomic position, so scanning from the start only sees RGs present in * early chromosomes. To ensure all RGs are represented: * 1. Build sampling windows at the midpoint of each reference contig * 2. For each window, read up to `reads_per_window` reads (100k default) * 3. Track per-RG counts; skip reads from already-saturated RGs * 4. Stop early once all header-declared RGs are satisfied * This replaces the old sequential-from-start scan that missed 20/21 RGs. */ class LearnBamParams { public: /// Learn parameters from a single BAM file LearnBamParams(SvabaSharedConfig& sc_, const std::string& bamPath); // opens the BAM // map of RG : params, for a single bam void learnParams(); // learn the RGs // this is map of RG-name : BamReadGroup std::unordered_map bam_read_groups; // per BAM readlen / mapq max int readlen_max = 0; int mapq_max = 0; double isize_max = 0; /// Write per-RG isize distributions to a TSV for R plotting. /// Called after learnParams() and before computeStats() clears the vectors. /// Output: ${prefix}.learn.tsv.gz with columns: bam, rg, isize void dumpLearnData(const std::string& prefix) const; private: /// Process reads from the current reader position, updating rg_count /// and bam_read_groups. Returns number of reads consumed. size_t consumeReads(size_t max_reads, std::unordered_map& rg_count, std::unordered_set& satisfied_rgs, const std::vector& groups); std::string bam_; // file path of the BAM SvabaSharedConfig& sc; std::shared_ptr reader_; }; ================================================ FILE: src/svaba/ReadToContigAligner.h ================================================ #ifndef SNOWMAN_READ_TO_CONTIG_ALIGNER_H__ #define SNOWMAN_READ_TO_CONTIG_ALIGNER_H__ #include "SnowTools/AlignedContig.h" #include "SnowTools/BamRead.h" #include "SnowTools/BWAWrapper.h" class ReadToContigAligner { public: ReadToContigAligner() {} ReadToContigAligner(const SnowTools::USeqVector& usv, BamReadVector& bav_this, std::vector& this_alc) { private: BamReadVector m_reads; SnowTools::USeqVector m_usv; SnowTools::BWAWrapper& m_bw; std::vector m_alc; }; #endif ================================================ FILE: src/svaba/STCoverage.cpp ================================================ #include "STCoverage.h" #include "SeqLib/SeqLibCommon.h" #include "SeqLib/BamRecord.h" #include #include using SeqLib::BamRecord; using SeqLib::GenomicRegion; using SeqLib::Cigar; void STCoverage::clear() { m_map.clear(); } void STCoverage::addRead(const BamRecord &r, int buff) { //, bool full_length) { int p = -1; int e = -1; // old code to also cover soft clips, not needed /* if (full_length) { Cigar c = r.GetCigar(); // get beginning if (c.size() && c[0].RawType() == BAM_CSOFT_CLIP) p = std::max((int32_t)0, r.Position() - (int32_t)c[0].Length()); // get prefixing S else p = r.Position(); // get end if (c.size() && c.back().RawType() == BAM_CSOFT_CLIP) e = r.PositionEnd() + c.back().Length(); else e = r.PositionEnd(); } else { */ p = r.Position() + buff; e = r.PositionEnd() - buff; // } if (p < 0 || e < 0) return; assert(e - p < 1e6); // limit on read length assert(r.ChrID() >= 0); try { while (p <= e) { ++m_map[r.ChrID()][p]; // add one to this position ++p; } } catch (std::out_of_range &oor) { std::cerr << "Position " << p << " on tid " << r.ChrID() << " is greater than expected max -- skipping" << std::endl; } } uint32_t STCoverage::getCoverageAtPosition(int chr, int pos) const { auto chr_it = m_map.find(chr); if (chr_it == m_map.end()) { return 0; } auto pos_it = chr_it->second.find(pos); if (pos_it == chr_it->second.end()) { return 0; } return pos_it->second; } ================================================ FILE: src/svaba/STCoverage.h ================================================ #pragma once #include #include #include #include #include #include #include #include #include "htslib/hts.h" #include "htslib/sam.h" #include "htslib/bgzf.h" #include "htslib/kstring.h" #include "SeqLib/GenomicRegion.h" #include "SeqLib/GenomicRegionCollection.h" namespace SeqLib { class BamRecord; } typedef std::unordered_map CovMap; /** Hold base-pair or binned coverage across an interval or genome * * Currently stores coverage as an unordered_map. */ class STCoverage { private: std::unordered_map m_map; //[chr [pos,cov] ] public: STCoverage() = default; /** Clear the coverage map */ void clear(); /** Add a read to this coverage track * @param reserve_size Upper bound estimate for size of map. Not a hard * cutoff but improves performance if total number of positions is less than this, * as it will not rehash. */ void addRead(const SeqLib::BamRecord &r, int buff); //, bool full_length); /** Print the entire data */ friend std::ostream& operator<<(std::ostream &out, const STCoverage &c); /** Return the coverage count at a position */ uint32_t getCoverageAtPosition(int chr, int pos) const; }; ================================================ FILE: src/svaba/SvabaASQG.cpp ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ASQG - Definitions and functions // for handling ASGQ files // #include "SvabaASQG.h" #include namespace svabaASQG { const int HEADER_VERSION = 1; // Record ID tags static constexpr int RECORD_TAG_SIZE = 2; // do not include null terminator static char HEADER_TAG[] = "HT"; static char VERTEX_TAG[] = "VT"; static char EDGE_TAG[] = "ED"; // Header tags const int FIELD_TAG_SIZE = 2; static char VERSION_TAG[] = "VN"; static char OVERLAP_TAG[] = "OL"; static char INPUT_FILE_TAG[] = "IN"; static char ERROR_RATE_TAG[] = "ER"; static char CONTAINMENT_TAG[] = "CN"; // 1 if the graph has containment edges/vertices static char TRANSITIVE_TAG[] = "TE"; // 1 if the graph has transitive edges // Vertex tags static char SUBSTRING_TAG[] = "SS"; // // Header Record // HeaderRecord::HeaderRecord() { setVersionTag(HEADER_VERSION); } // HeaderRecord::HeaderRecord(const std::string& recordLine) { parse(recordLine); } // void HeaderRecord::setVersionTag(int version) { m_versionTag.set(version); } // void HeaderRecord::setOverlapTag(int overlapLen) { m_overlapTag.set(overlapLen); } // void HeaderRecord::setInputFileTag(const std::string& name) { m_infileTag.set(name); } // void HeaderRecord::setErrorRateTag(float errorRate) { m_errorRateTag.set(errorRate); } // void HeaderRecord::setContainmentTag(int v) { m_containmentTag.set(v); } // void HeaderRecord::setTransitiveTag(int v) { m_transitiveTag.set(v); } // void HeaderRecord::write(std::ostream& out) { StringVector fields; fields.push_back(HEADER_TAG); // Check for mandatory tags if(!m_versionTag.isInitialized()) { std::cerr << "Error: Header version tag not set, aborting." << std::endl; exit(EXIT_FAILURE); } else { fields.push_back(m_versionTag.toTagString(VERSION_TAG)); } if(m_errorRateTag.isInitialized()) fields.push_back(m_errorRateTag.toTagString(ERROR_RATE_TAG)); if(m_overlapTag.isInitialized()) fields.push_back(m_overlapTag.toTagString(OVERLAP_TAG)); if(m_infileTag.isInitialized()) fields.push_back(m_infileTag.toTagString(INPUT_FILE_TAG)); if(m_containmentTag.isInitialized()) fields.push_back(m_containmentTag.toTagString(CONTAINMENT_TAG)); if(m_transitiveTag.isInitialized()) fields.push_back(m_transitiveTag.toTagString(TRANSITIVE_TAG)); writeFields(out, fields); } //JEREMIAH void HeaderRecord::write(std::stringstream& out) { StringVector fields; fields.push_back(HEADER_TAG); // Check for mandatory tags if(!m_versionTag.isInitialized()) { std::cerr << "Error: Header version tag not set, aborting." << std::endl; exit(EXIT_FAILURE); } else { fields.push_back(m_versionTag.toTagString(VERSION_TAG)); } if(m_errorRateTag.isInitialized()) fields.push_back(m_errorRateTag.toTagString(ERROR_RATE_TAG)); if(m_overlapTag.isInitialized()) fields.push_back(m_overlapTag.toTagString(OVERLAP_TAG)); if(m_infileTag.isInitialized()) fields.push_back(m_infileTag.toTagString(INPUT_FILE_TAG)); if(m_containmentTag.isInitialized()) fields.push_back(m_containmentTag.toTagString(CONTAINMENT_TAG)); if(m_transitiveTag.isInitialized()) fields.push_back(m_transitiveTag.toTagString(TRANSITIVE_TAG)); writeFields(out, fields); } // void HeaderRecord::parse(const std::string& record) { if(record.size() < 2) { std::cerr << "Error: Record is not valid\n"; exit(EXIT_FAILURE); } // Tokenize record StringVector tokens = SQG::tokenizeRecord(record); // Ensure the first token indicates this is a valid header record if(tokens[0].compare(0, RECORD_TAG_SIZE, HEADER_TAG) != 0) { std::cerr << "Error: Record does not have a header tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } for(size_t i = 1; i < tokens.size(); ++i) { static char VERSION_TAG[] = "VN"; static char OVERLAP_TAG[] = "OL"; static char INPUT_FILE_TAG[] = "IN"; static char ERROR_RATE_TAG[] = "ER"; if(tokens[i].compare(0, FIELD_TAG_SIZE, VERSION_TAG) == 0) m_versionTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, OVERLAP_TAG) == 0) m_overlapTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, INPUT_FILE_TAG) == 0) m_infileTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, ERROR_RATE_TAG) == 0) m_errorRateTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, CONTAINMENT_TAG) == 0) m_containmentTag.fromString(tokens[i]); if(tokens[i].compare(0, FIELD_TAG_SIZE, TRANSITIVE_TAG) == 0) m_transitiveTag.fromString(tokens[i]); } } // // Vertex Record // // VertexRecord::VertexRecord(const std::string& recordLine) { parse(recordLine); } // void VertexRecord::setSubstringTag(bool b) { m_substringTag.set(b); } // void VertexRecord::write(std::ostream& out) { StringVector fields; fields.push_back(VERTEX_TAG); fields.push_back(m_id); fields.push_back(m_seq); if(m_substringTag.isInitialized()) fields.push_back(m_substringTag.toTagString(SUBSTRING_TAG)); writeFields(out, fields); } //JEREMIAH void VertexRecord::write(std::stringstream& out) { StringVector fields; fields.push_back(VERTEX_TAG); fields.push_back(m_id); fields.push_back(m_seq); if(m_substringTag.isInitialized()) fields.push_back(m_substringTag.toTagString(SUBSTRING_TAG)); writeFields(out, fields); } // void VertexRecord::parse(const std::string& record) { if(record.size() < 2) { std::cerr << "Error: Record is not valid\n"; exit(EXIT_FAILURE); } // Tokenize record StringVector tokens = SQG::tokenizeRecord(record); if(tokens.size() < 3) { std::cerr << "Error: Vertex record is incomplete.\n"; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } // Ensure the first token indicates this is a valid vertex record if(tokens[0].compare(0, RECORD_TAG_SIZE, VERTEX_TAG) != 0) { std::cerr << "Error: Record does not have a vertex tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } m_id = tokens[1]; m_seq = tokens[2]; for(size_t i = 3; i < tokens.size(); ++i) { if(tokens[i].compare(0, FIELD_TAG_SIZE, SUBSTRING_TAG) == 0) m_substringTag.fromString(tokens[i]); } } // // EdgeRecord // EdgeRecord::EdgeRecord(const std::string& recordLine) { parse(recordLine); } // void EdgeRecord::write(std::ostream& out) { StringVector fields; fields.push_back(EDGE_TAG); std::stringstream ss; ss << m_overlap; fields.push_back(ss.str()); writeFields(out, fields); } // void EdgeRecord::parse(const std::string& record) { if(record.size() < 2) { std::cerr << "Error: Record is not valid\n"; exit(EXIT_FAILURE); } // Tokenize record StringVector tokens = SQG::tokenizeRecord(record); if(tokens.size() < 2) { std::cerr << "Error: Edge record is incomplete.\n"; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } // Ensure the first token indicates this is a valid edge record if(tokens[0].compare(EDGE_TAG) != 0) { std::cerr << "Error: Record does not have an edge tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } // Parse the overlap std::stringstream ssparser(tokens[1]); ssparser >> m_overlap; } // // // RecordType getRecordType(const std::string& record) { // the record type is the first two characters of the record if(record.size() < 2) { std::cerr << "Error: record does not have a valid record-type tag" << std::endl; std::cerr << "Record: " << record << std::endl; exit(EXIT_FAILURE); } char recordTag[RECORD_TAG_SIZE]; record.copy(recordTag, RECORD_TAG_SIZE); if(strncmp(recordTag, HEADER_TAG, RECORD_TAG_SIZE) == 0) { return RT_HEADER; } if(strncmp(recordTag, VERTEX_TAG, RECORD_TAG_SIZE) == 0) { return RT_VERTEX; } if(strncmp(recordTag, EDGE_TAG, RECORD_TAG_SIZE) == 0) { return RT_EDGE; } // Unknown tag std::cerr << "Error: Unknown ASQG file record tag: " << recordTag << std::endl; exit(EXIT_FAILURE); } void writeFields(std::ostream& out, const StringVector& fields) { for(size_t i = 0; i < fields.size(); ++i) { out << fields[i]; if(i != fields.size() - 1) out << SQG::FIELD_SEP; } out << "\n"; } } ================================================ FILE: src/svaba/SvabaASQG.h ================================================ //----------------------------------------------- // Copyright 2010 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // ASQG - Definitions and functions // for handling ASGQ files // #ifndef SVABA_ASQG_H #define SVABA_ASQG_H #include "SQG.h" #include "Match.h" namespace svabaASQG { enum RecordType { RT_HEADER = 0, RT_VERTEX, RT_EDGE }; // A header record is just a tag:value pairs struct HeaderRecord { public: HeaderRecord(); HeaderRecord(const std::string& recordLine); void setOverlapTag(int overlapLen); void setInputFileTag(const std::string& name); void setErrorRateTag(float errorRate); void setContainmentTag(int v); void setTransitiveTag(int v); const SQG::IntTag& getVersionTag() const { return m_versionTag; } const SQG::FloatTag& getErrorRateTag() const { return m_errorRateTag; } const SQG::StringTag& getInfileTag() const { return m_infileTag; } const SQG::IntTag& getOverlapTag() const { return m_overlapTag; } const SQG::IntTag& getContainmentTag() const { return m_containmentTag; }; const SQG::IntTag& getTransitiveTag() const { return m_transitiveTag; }; void write(std::ostream& out); void write(std::stringstream& out); // JEREMIAH void parse(const std::string& record); private: void setVersionTag(int version); SQG::IntTag m_versionTag; SQG::FloatTag m_errorRateTag; SQG::StringTag m_infileTag; SQG::IntTag m_overlapTag; SQG::IntTag m_containmentTag; SQG::IntTag m_transitiveTag; }; // A vertex record is an id, sequence and an array of // tag:value struct VertexRecord { public: VertexRecord() {} VertexRecord(const std::string& recordLine); VertexRecord(const std::string& i, const std::string& s) : m_id(i), m_seq(s) {} void setSubstringTag(bool b); const std::string& getID() const { return m_id; } const std::string& getSeq() const { return m_seq; } const SQG::IntTag& getSubstringTag() const { return m_substringTag; } void write(std::ostream& out); void write(std::stringstream& out); void parse(const std::string& record); private: std::string m_id; std::string m_seq; SQG::IntTag m_substringTag; }; // An edge record is just an overlap object and tag:values struct EdgeRecord { public: EdgeRecord() {} EdgeRecord(const std::string& recordLine); EdgeRecord(const Overlap& o) : m_overlap(o) {} const Overlap& getOverlap() const { return m_overlap; } void write(std::ostream& out); void parse(const std::string& record); private: Overlap m_overlap; }; // Parsing functions RecordType getRecordType(const std::string& record); HeaderRecord parseHeaderRecord(const std::string& record); VertexRecord parseVertexRecord(const std::string& record); EdgeRecord parseEdgeRecord(const std::string& record); // Writing functions void writeFields(std::ostream& out, const StringVector& fields); }; #endif ================================================ FILE: src/svaba/SvabaAssemble.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // assemble - convert read overlaps into contigs // #include #include #include "Util.h" #include "SvabaAssemble.h" #include "SGUtil.h" #include "SGAlgorithms.h" #include "SGVisitors.h" #include "EncodedString.h" #include #include #include "SGSearch.h" //#define DEBUG_ASSEMBLY 1 void walkExtra(StringGraph * pGraph, SGWalkVector& outWalks); StringGraph* assemble(std::stringstream& asqg_stream, int minOverlap, int maxEdges, bool bExact, int trimLengthThreshold, bool bPerformTR, bool bValidate, int numTrimRounds, int resolveSmallRepeatLen, int numBubbleRounds, double maxBubbleGapDivergence, double maxBubbleDivergence, int maxIndelLength, int cutoff, std::string prefix, SeqLib::UnalignedSequenceVector &contigs, bool get_components) { AssemblyOptions ao; StringGraph * pGraph = SGUtil::loadASQG(asqg_stream, minOverlap, true, maxEdges); pGraph->m_get_components = get_components; if(bExact) pGraph->setExactMode(true); // Visitor functors SGTransitiveReductionVisitor trVisit; SGGraphStatsVisitor statsVisit; SGTrimVisitor trimVisit(trimLengthThreshold); SGContainRemoveVisitor containVisit; SGValidateStructureVisitor validationVisit; while(pGraph->hasContainment()) pGraph->visit(containVisit); // Remove any extraneous transitive edges that may remain in the graph if(bPerformTR) { std::cout << "Removing transitive edges\n"; pGraph->visit(trVisit); } // Compact together unbranched chains of vertices pGraph->simplify(); if(bValidate) { pGraph->visit(validationVisit); } // Remove dead-end branches from the graph if(numTrimRounds > 0) { int numTrims = numTrimRounds; while(numTrims-- > 0) pGraph->visit(trimVisit); } // Resolve small repeats if(resolveSmallRepeatLen > 0 && false) { SGSmallRepeatResolveVisitor smallRepeatVisit(resolveSmallRepeatLen); } if(numBubbleRounds > 0) { SGSmoothingVisitor smoothingVisit(ao.outVariantsFile, maxBubbleGapDivergence, maxBubbleDivergence, maxIndelLength); int numSmooth = numBubbleRounds; while(numSmooth-- > 0) pGraph->visit(smoothingVisit); pGraph->simplify(); } pGraph->renameVertices(prefix); SGVisitorContig av; pGraph->visit(av); SeqLib::UnalignedSequenceVector tmp = av.m_ct; for (SeqLib::UnalignedSequenceVector::const_iterator it = tmp.begin(); it != tmp.end(); it++) { if ((int)(it->Seq.length()) >= cutoff) { contigs.push_back({it->Name + "C", it->Seq, std::string()}); //postpend with character to distribugish _2 from _22 } } /* if (walk_all) { SGWalkVector outWalks; walkExtra(pGraph, outWalks); for (auto& i : outWalks) { std::string seqr = i.getString(SGWT_START_TO_END); if ((int)seqr.length() >= cutoff) contigs.push_back(Contig(i.pathSignature(), seqr)); } }*/ return pGraph; // delete pGraph; } void walkExtra(StringGraph * pGraph, SGWalkVector& outWalks) { typedef std::vector ComponentVector; VertexPtrVec allVertices = pGraph->getAllVertices(); ComponentVector components; #ifdef DEBUG_ASSEMBLY std::cerr << "selecting connected componsnet" << std::endl; #endif SGSearchTree::connectedComponents(allVertices, components); // Select the largest component int selectedIdx = -1; size_t largestSize = 0; for(size_t i = 0; i < components.size(); ++i) { if(components[i].size() > largestSize) { selectedIdx = i; largestSize = components[i].size(); } } #ifdef DEBUG_ASSEMBLY std::cerr << "looping vertices" << std::endl; #endif assert(selectedIdx != -1); VertexPtrVec selectedComponent = components[selectedIdx]; // Build a vector of the terminal vertices VertexPtrVec terminals; for(size_t i = 0; i < selectedComponent.size(); ++i) { Vertex* pVertex = selectedComponent[i]; size_t asCount = pVertex->getEdges(ED_ANTISENSE).size(); size_t sCount = pVertex->getEdges(ED_SENSE).size(); if(asCount == 0 || sCount == 0) terminals.push_back(pVertex); } #ifdef DEBUG_ASSEMBLY std::cerr << "getting walks on " << terminals.size() << " vertices " << std::endl; #endif // Find walks between all-pairs of terminal vertices SGWalkVector tempWalks; if (terminals.size() > 2 && terminals.size() < 10) { for(size_t i = 0; i < terminals.size(); ++i) { for(size_t j = i + 1; j < terminals.size(); j++) { Vertex* pX = terminals[i]; Vertex* pY = terminals[j]; int maxDistance = 2; SGSearch::findWalks(pX, pY, ED_SENSE, maxDistance, 1000000, false, tempWalks); SGSearch::findWalks(pX, pY, ED_ANTISENSE, maxDistance, 1000000, false, tempWalks); } } } #ifdef DEBUG_ASSEMBLY std::cerr << "deduping walks on " << terminals.size() << " vertices " << std::endl; #endif // Remove duplicate walks std::map walkMap; for(size_t i = 0; i < tempWalks.size(); ++i) { std::string walkString = tempWalks[i].getString(SGWT_START_TO_END); walkMap.insert(std::make_pair(walkString, tempWalks[i])); } // Copy unique walks to the output for(std::map::iterator mapIter = walkMap.begin(); mapIter != walkMap.end(); ++mapIter) outWalks.push_back(mapIter->second); // Sort the walks by string length std::sort(outWalks.begin(), outWalks.end(), SGWalk::compareByTotalLength); int numOutputWalks = 10; if(numOutputWalks > 0 && numOutputWalks < (int)outWalks.size()) { assert(outWalks.begin() + numOutputWalks < outWalks.end()); outWalks.erase(outWalks.begin() + numOutputWalks, outWalks.end()); } } ================================================ FILE: src/svaba/SvabaAssemble.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL license //----------------------------------------------- // // assemble - Assemble reads into contigs // #ifndef SVABA_ASSEMBLE_H #define SVABA_ASSEMBLE_H #include //#include "config.h" #include #include #include #include "Util.h" #include "SGUtil.h" #include "SeqLib/UnalignedSequence.h" struct AssemblyOptions { unsigned int verbose = 1; std::string asqgFile; std::string outContigsFile; std::string outVariantsFile; std::string outGraphFile; unsigned int minOverlap; bool bEdgeStats = false; bool bSmoothGraph = false; int resolveSmallRepeatLen = -1; size_t maxEdges = 128; // Trim parameters int numTrimRounds = 10; size_t trimLengthThreshold = 300; // Bubble parameters int numBubbleRounds = 3; double maxBubbleDivergence = 0.05f; double maxBubbleGapDivergence = 0.01f; int maxIndelLength = 20; // bool bValidate; bool bExact = true; bool bPerformTR = false; }; StringGraph* assemble(std::stringstream& asqg_stream, int minOverlap, int maxEdges, bool bExact, int trimLengthThreshold, bool bPerformTR, bool bValidate, int numTrimRounds, int resolveSmallRepeatLen, int numBubbleRounds, double maxBubbleGapDivergence, double maxBubbleDivergence, int maxIndelLength, int cutoff, std::string prefix, SeqLib::UnalignedSequenceVector &contigs, bool get_components); #endif ================================================ FILE: src/svaba/SvabaAssemblerConfig.h ================================================ #pragma once // --------------------------------------------------------------------------- // svabaAssemblerConfig.h // // Compile-time selection of the local-assembly engine used by svaba. // // SVABA_ASSEMBLER_FERMI (1) -> use fermi2 (ropebwt2-based) assembler // SVABA_ASSEMBLER_FERMI (0) -> use the vendored SGA String Graph Assembler // // This used to live as a bare `#define FERMI 1` at the top of // SvabaRegionProcessor.cpp, which meant nothing else in the build could see // it (so e.g. run_svaba.cpp could not report which assembler was compiled // in). Centralizing it here lets any TU `#include "SvabaAssemblerConfig.h"` // and branch on the same symbol. // // To switch assemblers at build time without editing this header, pass // -DSVABA_ASSEMBLER_FERMI=0 // (or =1) via CMake / CXXFLAGS. // --------------------------------------------------------------------------- #ifndef SVABA_ASSEMBLER_FERMI #define SVABA_ASSEMBLER_FERMI 1 #endif // Back-compat alias: existing code uses `#ifndef FERMI` / `#ifdef FERMI`. #if SVABA_ASSEMBLER_FERMI #ifndef FERMI #define FERMI 1 #endif #else #ifdef FERMI #undef FERMI #endif #endif // Human-readable name of the active assembler, for logging. namespace svaba { #if SVABA_ASSEMBLER_FERMI inline constexpr const char* kAssemblerName = "fermi2"; inline constexpr const char* kAssemblerTag = "fermi"; #else inline constexpr const char* kAssemblerName = "SGA"; inline constexpr const char* kAssemblerTag = "sga"; #endif } ================================================ FILE: src/svaba/SvabaAssemblerEngine.cpp ================================================ #include "SvabaAssemblerEngine.h" #include "SvabaUtils.h" #include #include #include "SGACommon.h" #include "SvabaASQG.h" #include "SvabaAssemble.h" #include "SvabaOverlapAlgorithm.h" #include "SvabaOptions.h" #include "OverlapCommon.h" #include "CorrectionThresholds.h" //#define DEBUG_ENGINE 1 static std::string repeat(char base, int count) { return std::string(count, base); } static const std::string POLYA = repeat('A', 30); static const std::string POLYT = repeat('T', 30); static const std::string POLYC = repeat('C', 30); static const std::string POLYG = repeat('G', 30); static const std::string POLYAT = "ATATATATATATATATATATATATATATATATATATATAT"; static const std::string POLYTC = "TCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTC"; static const std::string POLYAG = "AGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAG"; static const std::string POLYCG = "CGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCG"; static const std::string POLYTG = "TGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTG"; static const std::string POLYCA = "CACACACACACACACACACACACACACACACACACACACA"; void svabaAssemblerEngine::fillReadTable(const svabaReadPtrVector& reads) { // make the reads tables for (const auto& i : reads) { // skip if not for assembly if (!i->to_assemble) continue; // get the sequence and unique ID std::string sr = std::to_string(++count); std::string seq = i->CorrectedSeq(); assert(sr.length()); assert(seq.length()); if (hasRepeat(seq) || seq.length() < m_min_overlap) continue; // put onto the foward strand if not if (!i->MappedFlag() && !i->MateReverseFlag()) SeqLib::rcomplement(seq); SeqItem si; si.id = sr; si.seq = seq; m_pRT.addRead(si); } } bool svabaAssemblerEngine::hasRepeat(const std::string& seq) { if (seq.length() < 40) return false; static const std::vector repeatMotifs = { "N", POLYT, POLYA, POLYC, POLYG, POLYCG, POLYAT, POLYTC, POLYAG, POLYCA, POLYTG }; return std::any_of(repeatMotifs.begin(), repeatMotifs.end(), [&seq](const std::string& motif) { return seq.find(motif) != std::string::npos; }); } bool svabaAssemblerEngine::performAssembly(int num_assembly_rounds) { if (m_pRT.getCount() < 2) return false; #ifdef DEBUG_ENGINE std::cout << "Doing assembly on: " << m_id << " with " << m_pRT.getCount() << " reads" << std::endl; #endif SeqLib::UnalignedSequenceVector contigs0; //ContigVector contigs0; #ifdef DEBUG_ENGINE std::cout << "...round 1" << std::endl; #endif // do the first round (on raw reads) doAssembly(&m_pRT, m_contigs, 0); for (int yy = 1; yy != num_assembly_rounds; yy++) { if (m_contigs.size() < 2) continue; // break because too few contigs to assemle #ifdef DEBUG_ENGINE std::cout << "...round " << (yy+1) << std::endl; #endif // do the second round (on assembled contigs) SeqLib::UnalignedSequenceVector tmpc; for (auto& j : m_contigs) if (j.Seq.length() > m_readlen) tmpc.push_back(j); ReadTable pRTc0(tmpc); m_contigs.clear(); doAssembly(&pRTc0, m_contigs, yy); } return true; } // call the assembler void svabaAssemblerEngine::doAssembly(ReadTable *pRT, SeqLib::UnalignedSequenceVector &contigs, int pass) { if (pRT->getCount() == 0) return; // clear the hits stream std::stringstream hits_stream, asqg_stream; double errorRate = m_error_rate; int min_overlap = m_min_overlap; int cutoff = 0; if (pass > 1) { //errorRate = 0.015f; // up to one bp mismatch errorRate = 0; m_error_rate = errorRate; min_overlap = m_min_overlap * 2; } bool exact = errorRate < 0.001f; // remove duplicates if running in exact mode ReadTable * pRT_nd = exact ? removeDuplicates(pRT) : pRT; // forward SuffixArray* pSAf_nd = new SuffixArray(pRT_nd, 1, false); //1 is num threads. false is silent/no RLBWT *pBWT_nd = new RLBWT(pSAf_nd, pRT_nd); // reverse pRT_nd->reverseAll(); SuffixArray * pSAr_nd = new SuffixArray(pRT_nd, 1, false); RLBWT *pRBWT_nd = new RLBWT(pSAr_nd, pRT_nd); pRT_nd->reverseAll(); pSAf_nd->writeIndex(); pSAr_nd->writeIndex(); bool bIrreducibleOnly = true; // default int seedLength = 0; int seedStride = 0; if (!exact) calculateSeedParameters(m_readlen, min_overlap, seedLength, seedStride); svabaOverlapAlgorithm* pOverlapper = new svabaOverlapAlgorithm(pBWT_nd, pRBWT_nd, errorRate, seedLength, seedStride, bIrreducibleOnly); pOverlapper->setExactModeOverlap(exact); pOverlapper->setExactModeIrreducible(exact); svabaASQG::HeaderRecord headerRecord; headerRecord.setOverlapTag(min_overlap); headerRecord.setErrorRateTag(errorRate); headerRecord.setInputFileTag(""); headerRecord.setContainmentTag(true); // containments are always present headerRecord.setTransitiveTag(!bIrreducibleOnly); headerRecord.write(asqg_stream); pRT_nd->setZero(); size_t workid = 0; SeqItem si; size_t ocount = 0; while (pRT_nd->getRead(si) && (++ocount < MAX_OVERLAPS_PER_ASSEMBLY)) { SeqRecord read; read.id = si.id; read.seq = si.seq; OverlapBlockList obl; OverlapResult rr = pOverlapper->overlapRead(read, min_overlap, &obl); pOverlapper->writeOverlapBlocks(hits_stream, workid, rr.isSubstring, &obl); svabaASQG::VertexRecord record(read.id, read.seq.toString()); record.setSubstringTag(rr.isSubstring); record.write(asqg_stream); ++workid; } std::string line; bool bIsSelfCompare = true; ReadInfoTable* pQueryRIT = new ReadInfoTable(pRT_nd); while(std::getline(hits_stream, line)) { size_t readIdx; size_t totalEntries; bool isSubstring; OverlapVector ov; OverlapCommon::parseHitsString(line, pQueryRIT, pQueryRIT, pSAf_nd, pSAr_nd, bIsSelfCompare, readIdx, totalEntries, ov, isSubstring); for(OverlapVector::iterator iter = ov.begin(); iter != ov.end(); ++iter) { svabaASQG::EdgeRecord edgeRecord(*iter); edgeRecord.write(asqg_stream); } } // Get the number of strings in the BWT, this is used to pre-allocated the read table delete pOverlapper; delete pBWT_nd; delete pRBWT_nd; delete pSAf_nd; delete pSAr_nd; if (exact) // only in exact mode did we actually allocate for pRT_nd, otherwise just pRT which we want to keep delete pRT_nd; //#ifdef CLOCK_COUNTER //clock_t ctA_before = clock(); //#endif // PERFORM THE ASSMEBLY trimLengthThreshold = 100; numTrimRounds = 1; StringGraph * oGraph = assemble(asqg_stream, min_overlap, maxEdges, bExact, trimLengthThreshold, bPerformTR, bValidate, numTrimRounds, resolveSmallRepeatLen, numBubbleRounds, gap_divergence, divergence, maxIndelLength, cutoff, m_id + "_", contigs, m_write_asqg); // optionally output the graph structure //if (m_write_asqg) //debug // write_asqg(oGraph, asqg_stream, hits_stream, pass); // this was allocated in assemble delete oGraph; delete pQueryRIT; // remove exact dups remove_exact_dups(contigs); // print out some results #ifdef DEBUG_ENGINE std::cerr << " PASS " << pass << std::endl; print_results(contigs); #endif return; } // not totally sure this works... ReadTable* svabaAssemblerEngine::removeDuplicates(ReadTable* pRT) { // forward SuffixArray* pSAf = new SuffixArray(pRT, 1, false); //1 is num threads. false is silent/no RLBWT *pBWT= new RLBWT(pSAf, pRT); // reverse pRT->reverseAll(); SuffixArray * pSAr = new SuffixArray(pRT, 1, false); RLBWT *pRBWT = new RLBWT(pSAr, pRT); pRT->reverseAll(); svabaOverlapAlgorithm* pRmDupOverlapper = new svabaOverlapAlgorithm(pBWT, pRBWT, 0, 0, 0, false); pRT->setZero(); ReadTable * pRT_nd = new ReadTable(); SeqItem sir; while (pRT->getRead(sir)) { OverlapBlockList OBout; SeqRecord read; read.id = sir.id; read.seq = sir.seq; OverlapBlockList obl; OverlapResult rr = pRmDupOverlapper->alignReadDuplicate(read, &OBout); if (!rr.isSubstring) pRT_nd->addRead(sir); } delete pRmDupOverlapper; delete pBWT; delete pRBWT; delete pSAf; delete pSAr; return pRT_nd; } void svabaAssemblerEngine::write_asqg(const StringGraph* oGraph, std::stringstream& asqg_stream, std::stringstream& hits_stream, int pass) const { // write ASQG to file for visualization std::ofstream ofile(m_id + "pass_" + std::to_string(pass) + ".asqg", std::ios::out); ofile << asqg_stream.str(); ofile.close(); // write the hits stream file std::ofstream ofile_hits(m_id + "pass_" + std::to_string(pass) + ".hits", std::ios::out); ofile_hits << hits_stream.str(); ofile_hits.close(); // write the connected components file std::ofstream ofile_cc(m_id + "pass_" + std::to_string(pass) + ".cc", std::ios::out); for (auto& i : oGraph->m_connected_components) ofile_cc << i.first << "\t" << i.second << std::endl; ofile_cc.close(); // write the labels std::ofstream ofile_lb(m_id + "pass_" + std::to_string(pass) + ".lb", std::ios::out); for (auto& i : oGraph->m_reads_on_contigs) for (auto& r : i.second) ofile_lb << i.first << "\t" << r << std::endl; ofile_lb.close(); } void svabaAssemblerEngine::remove_exact_dups(SeqLib::UnalignedSequenceVector& cc) const { std::set ContigDeDup; SeqLib::UnalignedSequenceVector cvec; for (auto& i : cc) { if (!ContigDeDup.count(i.Seq)) { ContigDeDup.insert(i.Seq); cvec.push_back(i); } else { //std::cerr << "Filtered out a contig for having exact duplicate with another contig" << std::endl; } } cc = cvec; } void svabaAssemblerEngine::print_results(const SeqLib::UnalignedSequenceVector& cc) const { if (cc.size() >= 1) { std::cout << "Contig Count: " << cc.size() << " at " << m_id << std::endl; for (auto& i : cc) std::cout << " " << i.Name << " " << i.Seq.length() << " " << i.Seq << std::endl; } } // lifted from OverlapAlgorithm void svabaAssemblerEngine::calculateSeedParameters(int read_len, int minOverlap, int& seed_length, int& seed_stride) const { seed_length = 0; // The maximum possible number of differences occurs for a fully-aligned read int max_diff_high = static_cast(m_error_rate * read_len); // Calculate the seed length to use // If the error rate is so low that no differences are possible just seed // over the entire minOverlap region if(max_diff_high > 0) { // Calculate the maximum number of differences between two sequences that overlap // by minOverlap int max_diff_low = static_cast(m_error_rate * minOverlap); if(max_diff_low == 0) max_diff_low = 1; int seed_region_length = static_cast(ceil(max_diff_low / m_error_rate)); int num_seeds_low = max_diff_low + 1; seed_length = static_cast(seed_region_length / num_seeds_low); if(seed_length > static_cast(minOverlap)) seed_length = minOverlap; } else { seed_length = minOverlap; } seed_stride = seed_length; } ================================================ FILE: src/svaba/SvabaAssemblerEngine.h ================================================ #ifndef SVABA_ASSEMBLER_ENGINE_H__ #define SVABA_ASSEMBLER_ENGINE_H__ #include "Util.h" //#include "contigs.h" #include "SGUtil.h" #include "ReadTable.h" #include "SeqLib/BamRecord.h" #include "SeqLib/UnalignedSequence.h" #include "SvabaRead.h" class svabaAssemblerEngine { public: svabaAssemblerEngine() {} svabaAssemblerEngine(const std::string& id, double er, size_t mo, size_t rl) : m_id(id), m_error_rate(er), m_min_overlap(mo), m_readlen(rl) {} bool hasRepeat(const std::string& seq); void fillReadTable(const svabaReadPtrVector& reads); //void fillReadTable(const std::vector& r); bool performAssembly(int num_assembly_rounds); //void doAssembly(ReadTable *pRT, ContigVector &contigs, int pass); void doAssembly(ReadTable *pRT, SeqLib::UnalignedSequenceVector &contigs, int pass); void setToWriteASQG() { m_write_asqg = true; } SeqLib::UnalignedSequenceVector getContigs() const { return m_contigs; } //ContigVector getContigs() const { return m_contigs; } void clearContigs() { m_contigs.clear(); } ReadTable* removeDuplicates(ReadTable* pRT); void calculateSeedParameters(int read_len, const int minOverlap, int& seed_length, int& seed_stride) const; private: void print_results(const SeqLib::UnalignedSequenceVector& cc) const; // void remove_exact_dups(ContigVector& cc) const; void remove_exact_dups(SeqLib::UnalignedSequenceVector& cc) const; void write_asqg(const StringGraph * oGraph, std::stringstream& asqg_stream, std::stringstream& hits_stream, int pass) const; std::string m_id; double m_error_rate; size_t m_min_overlap; size_t m_readlen; size_t count = 0; // num sequencecs added size_t numBubbleRounds = 3; float divergence = 0.00; //0.05 float gap_divergence = 0.00; int maxEdges = 128; int numTrimRounds = 0; // int trimLengthThreshold = -1; // doesn't matter bool bPerformTR = false; // transitivie edge reducetion bool bValidate = false; int resolveSmallRepeatLen = -1; int maxIndelLength = 100; bool bExact = true; std::string outVariantsFile = ""; // dummy bool m_write_asqg = false; ReadTable m_pRT; //ContigVector m_contigs; SeqLib::UnalignedSequenceVector m_contigs; }; #endif ================================================ FILE: src/svaba/SvabaBamWalker.cpp ================================================ #include "SvabaBamWalker.h" #include "SvabaRead.h" #include "SvabaSharedConfig.h" #include "SvabaOptions.h" #include "SvabaLogger.h" #include "SvabaThreadUnit.h" #include "SvabaDebug.h" #include #define QNAME "LH00306:129:227V5CLT4:6:1268:41599:27601" #define QFLAG 147 using SeqLib::AddCommas; using SeqLib::UnalignedSequenceVector; using SeqLib::UnalignedSequence; inline void debug_read(std::string_view msg, const svabaReadPtr read, std::string_view qname_filter = {}, int qflag_filter = -1) { if (!read) return; if (!qname_filter.empty() && read->Qname() != qname_filter) return; if (qflag_filter != -1 && read->AlignmentFlag() != qflag_filter) return; std::cerr << "DEBUG: " << msg << " read " << read << '\n'; } static const std::string ILLUMINA_PE_PRIMER_2p0 = "CAAGCAGAAGACGGCAT"; // Detect adapter read-through: the fragment is shorter than the read // length, so the tail of the read sequences into the adapter. Returns // true if the read looks like adapter contamination and should be // skipped. Reads with indels or unmapped mates are exempted — those // might genuinely support an SV even if the geometry looks adapter-ish. static bool hasAdapter(const svabaRead& r) { // keep reads with indels or unmapped mate — could be real SV signal if (r.MaxDeletionBases() || r.MaxInsertionBases() || !r.InsertSize()) return false; // toss if insert size ≈ read length (completely overlapping pair) if (std::abs(r.FullInsertSize() - r.Length()) < 5) return true; // from here, only consider reads that have soft-clips if (!r.NumClip()) return false; // toss if insert size explains the clip length (adapter read-through) int exp_ins_size = r.Length() - r.NumClip(); if (std::abs(exp_ins_size - std::abs(r.InsertSize())) <= 6) return true; // toss if literal Illumina adapter sequence is present if (r.Sequence().find(ILLUMINA_PE_PRIMER_2p0) != std::string::npos) return true; return false; } //static const std::string REV_ADAPTER = "GCTCTTCCGATCT"; svabaBamWalker::svabaBamWalker(SvabaSharedConfig& sc_) : sc(sc_) {} void svabaBamWalker::addCigar(const svabaReadPtr& r) { if (r->CigarSize() == 1) return; // NB: the -1 is NOT a 0- vs 1-based thing. // It's that VCF (and BP) store location of an indel as the base PRIOR to the event. // but accumulating positions here has "pos" starting at the first base of the next // position - which would be the first base of the indel, so we minus 1 to keep // convention c/w BPs file. It's all 0-based as usual int pos = r->Position() - 1; // position ON REFERENCE for (const auto& i : r->GetCigar()) { if (i.Type() == 'D' || i.Type() == 'I') { std::string key = std::to_string(r->ChrID()) + "_" + std::to_string(pos) + "_" + std::to_string(i.Length()) + i.Type(); ++cigmap[key]; // //debug // if (pos > 79347219 & pos < 79347403) // std::cerr << r->Qname() << " pos " << r->Position() << " pos " << pos << // " " << i.Length() << i.Type() << std::endl; } // advance along the reference for alignment types that consume reference if (i.Type() != 'I' && i.Type() != 'S' && i.Type() != 'H') pos += i.Length(); } } /*bool svabaBamWalker::isDuplicate(const SeqLib::BamRecord &r) { // deduplicate by query-bases / position std::string key = r.Sequence() + std::to_string(r.Position()) + "_" + std::to_string(r.MatePosition()); // its not already add, insert if (!seq_set.count(key)) { seq_set.insert(key); return false; } return true; }*/ SeqLib::GRC svabaBamWalker::readBam(svabaThreadUnit& unit) { // keep track of regions where we hit the weird-read limit SeqLib::GRC bad_regions; // buffer to store reads from a region // if we don't hit the limit, then add them to be assembled svabaReadPtrVector read_buffer; UnalignedSequenceVector train_buffer; train_reads.clear(); // member — cleared per readBam call // if we have a LOT of reads (aka whole genome run), keep track for printing size_t countr = 0; size_t seen = 0; // keep track of which region we are in int current_region = this->region_idx_; // should just skip regions that have excessive coverage // cov = readlength + reads / region_width. So 150 * X / 25000 = 10000 to set max coverage to 10000 // so 25'000 * 10'000 / 150 = 1'666'667 for max cov 10'000 const size_t max_coverage_before_ignore_region = 10'000; size_t seen_cutoff = regions_.at(current_region).Width() * max_coverage_before_ignore_region / std::max(1, sc.readlen); sc.logger.log(sc.opts.verbose > 4, false, "...seen cutoff ", SeqLib::AddCommas(seen_cutoff), " region width ", regions_.at(current_region), " read len ", sc.readlen); // loop the reads while ( auto bamrec = this->Next()) { // makes a deep copy. So when bamrec goes out at end of this iteration, s is still safe svabaReadPtr s = std::make_shared(*bamrec, prefix_); ++seen; if (seen % 100'000 == 0) sc.logger.log(sc.opts.verbose > 3, false, "...bamwlker reading read ", s->Brief(), " - ", SeqLib::AddCommas(seen)); // when we move regions, clear the buffer if (this->region_idx_ != current_region) { seen = 0; sc.logger.log(sc.opts.verbose > 3, false, "...svabaBamWalker switched region from ", regions_.at(current_region), " to ", regions_.at(region_idx_)); current_region = region_idx_; // recalculate seen limit for this region if (current_region < regions_.size()) { seen_cutoff = regions_.at(current_region).Width() * max_coverage_before_ignore_region / std::max(1, sc.readlen); sc.logger.log(sc.opts.verbose > 4, false, "...seen cutoff ", SeqLib::AddCommas(seen_cutoff)); } else { // shouldn't really get here seen_cutoff = 0; } // cache the reads from the last region into BamWalker cache reads.insert(reads.end(), read_buffer.begin(), read_buffer.end()); read_buffer.clear(); } // if hit the limit of reads, log it and try next region if ( (read_buffer.size() > m_limit && m_limit > 0) || seen > seen_cutoff) { // don't train on these train_buffer.clear(); // clear the buffer for this region seen = 0; std::string regstr = (regions_.size() ? regions_[region_idx_].ToString(this->Header()) : " whole BAM"); sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, "\tstopping read lookup at ", s->Brief(), " in window ", regstr, "with ", AddCommas(read_buffer.size()), " weird reads. Limit: ", AddCommas(m_limit)); // add this region to the bad regions list if (regions_.size()) bad_regions.add(regions_[region_idx_]); // clear these reads out, not a good region read_buffer.clear(); // force it to try the next region, or return if none left ++region_idx_; // increment to next region if (region_idx_ >= regions_.size()) {/// no more regions left and last one was bad return bad_regions; // totally done } } SVABA_READ_TRACE(s->Qname(), "SEEN flag=" << s->AlignmentFlag() << " mapq=" << s->MapQuality() << " pos=" << s->ChrName(sc.header) << ":" << s->Position() << " isize=" << s->InsertSize() << " cigar=" << s->CigarString() << " len=" << s->Length()); // check if this read passes the rules for potential SV reads if (s->DuplicateFlag() || s->QCFailFlag() || s->NumHardClip() || sc.blacklist.CountOverlaps(s->AsGenomicRegionMate()) || sc.blacklist.CountOverlaps(s->AsGenomicRegion())) { SVABA_READ_TRACE(s->Qname(), "SKIP dup=" << s->DuplicateFlag() << " qcfail=" << s->QCFailFlag() << " hardclip=" << s->NumHardClip() << " blacklist_mate=" << sc.blacklist.CountOverlaps(s->AsGenomicRegionMate()) << " blacklist_self=" << sc.blacklist.CountOverlaps(s->AsGenomicRegion())); continue; } // quality score trim read s->QualityTrimRead(); // copies sequence into svabaRead.seq_corrected SVABA_READ_TRACE(s->Qname(), "AFTER_TRIM corrected_len=" << s->CorrectedSeqLength()); // this is the main rule check (clips, orientation, unmapped mate, etc.) bool rule_pass = sc.mr.isValid(*s); // FR reads with large isize: per-RG discordant cutoff check. // This replaces the old ReadFilterCollection FR isize rule and uses // the same cutoff as TagDiscordant, so the two are always consistent. if (!rule_pass && s->PairMappedFlag() && s->PairOrientation() == SeqLib::Orientation::FR) { std::string rg; if (!s->GetZTag("RG", rg)) rg = "NA"; int cutoff = getIsizeCutoff(rg); if (std::abs(s->FullInsertSize()) >= cutoff) rule_pass = true; } SVABA_READ_TRACE(s->Qname(), "RULE_CHECK rule_pass=" << rule_pass); // special case to also check against high mismatch // --no-nm disables this path entirely for maximum efficiency if (!rule_pass && !sc.opts.noNmSalvage) { int32_t nm_tag = 0; s->GetIntTag("NM", nm_tag); float nm_frac = static_cast(nm_tag) / static_cast(s->Length()); bool is_adapter = hasAdapter(*s); SVABA_READ_TRACE(s->Qname(), "NM_SALVAGE nm=" << nm_tag << " nm_frac=" << nm_frac << " adapter=" << is_adapter << " pass=" << (nm_frac > 0.02 && !is_adapter)); if (nm_frac > 0.02 && !is_adapter) { s->to_assemble = false; read_buffer.push_back(s); SVABA_READ_TRACE(s->Qname(), "ADDED via NM salvage (to_assemble=false)"); } } // if its less than 40, dont even mess with it if (s->CorrectedSeqLength() < 40) { SVABA_READ_TRACE_IF(rule_pass, s->Qname(), "REJECT corrected_len=" << s->CorrectedSeqLength() << " < 40"); rule_pass = false; } // special rule to filter "RF" "discordants" that are just overlaps if (s->PairOrientation() == SeqLib::Orientation::RF && std::abs(s->InsertSize()) < std::max(200, sc.readlen * 2)) { SVABA_READ_TRACE_IF(rule_pass, s->Qname(), "REJECT RF overlap isize=" << s->InsertSize() << " threshold=" << std::max(200, sc.readlen * 2)); rule_pass = false; } // for mate regions, be more strict if (!get_mate_regions && s->MapQuality() == 0) { SVABA_READ_TRACE_IF(rule_pass, s->Qname(), "REJECT mapq=0 in non-mate region"); rule_pass = false; } // add to all reads pile for kmer correction if (get_coverage) { cov.addRead(*s, 0); } // add to weird coverage if (rule_pass && get_coverage) weird_cov.addRead(*s, 0); // add to the cigar map for all non-duplicate reads if (get_mate_regions) // only add cigar for non-mate regions addCigar(s); // add all the reads for kmer correction // TODO this will add reads to training even if this entire buffer is rejected, so need to make a training buffer as well before adding them if (!sc.opts.ecCorrectType.empty() && sc.opts.ecCorrectType != "0") { // if its not a weird read, include for training purposes // but can subsample for speed if (!rule_pass) { uint32_t hashed = __ac_Wang_hash(__ac_X31_hash_string(s->Qname().c_str())); if ((double)(hashed&0xffffff) / 0x1000000 <= kmer_subsample) train_buffer.push_back(UnalignedSequence(s->UniqueName(), s->CorrectedSeq())); } } // if not a weird read, move on if (!rule_pass) { SVABA_READ_TRACE(s->Qname(), "SKIP not weird (rule_pass=false after all gates)"); continue; } // skip adapter read-through (fragment shorter than read length) // unless the read has an indel that could indicate real SV signal if (hasAdapter(*s)) { SVABA_READ_TRACE(s->Qname(), "SKIP adapter isize=" << s->InsertSize() << " len=" << s->Length() << " nclip=" << s->NumClip()); continue; } // label as discordant or not // modifies r in place TagDiscordant(s); // message logging ++countr; if (countr % 25000 == 0) { sc.logger.log(sc.opts.verbose > 1, false, "...read in ", AddCommas(countr), " weird reads for whole genome read-in. At pos ", s->Brief()); } // adding first to a temp buffer, in case hit limit and then // just don't add any reads read_buffer.push_back(s); SVABA_READ_TRACE(s->Qname(), "ADDED as weird read (to_assemble=true) buffer_size=" << read_buffer.size()); } // end the read loop // "reads" is total cache for this walker. // "read_buffer" was temporary cache in readBam for last region /*reads.insert(reads.end(), std::make_move_iterator(read_buffer.begin()), std::make_move_iterator(read_buffer.end())); read_buffer.clear(); */ // shouldn't need to, but avoid "lingering state" reads.insert(reads.end(), read_buffer.begin(), read_buffer.end()); read_buffer.clear(); // stash training reads as member for the pooled BFC in SvabaRegionProcessor train_reads.insert(train_reads.end(), train_buffer.begin(), train_buffer.end()); train_buffer.clear(); // subsamples reads if too high of coverage // if (get_coverage) // subSampleToWeirdCoverage(max_cov); // calculate the mate region if (get_mate_regions && regions_.size() /* don't get mate regions if reading whole bam */) calculateMateRegions(); return bad_regions; } void svabaBamWalker::AddBackReadsToCorrect() { for (const auto& r : reads) { if (!r->to_assemble) continue; // same filter as Train() side bfc.AddSequence(r->CorrectedSeq(), "", r->UniqueName()); } } void svabaBamWalker::ClearTraining() { bfc.ClearReads(); } void svabaBamWalker::Train() { bfc.Train(); } void svabaBamWalker::ErrorCorrect() { bfc.ErrorCorrect(); } void svabaBamWalker::subSampleToWeirdCoverage(double max_coverage) { auto keep = [&](const std::shared_ptr& r) { double cov1 = weird_cov.getCoverageAtPosition(r->ChrID(), r->Position()); double cov2 = weird_cov.getCoverageAtPosition(r->ChrID(), r->PositionEnd()); double this_cov = std::max(cov1, cov2); if (this_cov <= max_coverage) return true; double sample_rate = 1 - (this_cov - max_coverage) / this_cov; uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(r->Qname().c_str()) ^ m_seed); return ((double)(k & 0xffffff) / 0x1000000) <= sample_rate; }; reads.erase(std::remove_if(reads.begin(), reads.end(), [&](const std::shared_ptr& r) { return !keep(r); }), reads.end()); } void svabaBamWalker::calculateMateRegions() { assert(regions_.size()); SeqLib::GenomicRegion main_region = regions_.at(0); // hold candidate regions. Later trim based on count MateRegionVector tmp_mate_regions; // loop the reads and add mate reads to MateRegionVector for (const auto& r : reads) { int dd = r->GetDD(); // throw away reads that have too many different discordant mappings // or are otherwise bad (dd < 0). // // maxMateChrID gate: skip mates on decoy/alt/mito chroms in // human (default 23 = through chrY). Set to -1 via --non-human // or --max-mate-chr to allow all chromosomes. // // minMateMAPQ gate: skip reads below this MAPQ (default -1 = no // gate). Set via --min-mate-mapq to e.g. 1 to exclude MAPQ=0 // multi-mappers from triggering mate lookups. const int maxChr = sc.opts.maxMateChrID; const int minMQ = sc.opts.minMateMAPQ; if (!r->PairedFlag() || (maxChr >= 0 && r->MateChrID() > maxChr) || (minMQ >= 0 && r->MapQuality() < minMQ) || (maxChr >= 0 && r->ChrID() > maxChr) || !r->MappedFlag() || !r->MateMappedFlag() || dd < 0 || dd > MAX_SECONDARY_HIT_DISC) continue; // get the mate region position, will check next if different // from current main region MateRegion mate(r->MateChrID(), r->MatePosition(), r->MatePosition()); mate.Pad(MATE_REGION_PAD); mate.partner = main_region; // if mate not in main interval, add a padded version if (!main_region.GetOverlap(mate) && !local_blacklist.CountOverlaps(mate) && !sc.blacklist.CountOverlaps(mate)) { tmp_mate_regions.add(mate); } } // merge it down to get the mate regions tmp_mate_regions.MergeOverlappingIntervals(); // get the counts by overlapping mate-reads with the newly defined // mate regions. Same MAPQ gate as above so the count is consistent // with the candidate set. const int minMQ_count = sc.opts.minMateMAPQ; for (const auto& r : reads) { SeqLib::GenomicRegion mate(r->MateChrID(), r->MatePosition(), r->MatePosition()); // if mate not in main interval, check which mate regions it's in if (!main_region.GetOverlap(mate) && (minMQ_count < 0 || r->MapQuality() >= minMQ_count)) { for (auto& k : tmp_mate_regions) if (k.GetOverlap(mate)) { ++k.count; continue; } } } #ifdef DEBUG_SVABA_BAMWALKER std::cerr << "SBW: Mate regions are" << std::endl; for (auto& i : tmp_mate_regions) std::cerr << " " << i << " count " << i.count << std::endl; #endif // keep only ones with enough supporting reads const int minCount = sc.opts.mateRegionMinCount; for (auto& i : tmp_mate_regions) { if (i.count >= minCount) mate_regions.add(i); } #ifdef DEBUG_SVABA_BAMWALKER std::cerr << "SBW: Final mate regions are:" << std::endl; for (auto& i : mate_regions) std::cerr << " " << i << " read count " << i.count << std::endl; #endif // hard cutoff on mate regions TODO make more elegant if (mate_regions.size() > 6) { sc.logger.log(sc.opts.verbose > 2, true, "...cutting off mate lookups for region ", regions_.at(0), " with too many mate regions of: ", mate_regions.size()); mate_regions.clear(); } } // bool svabaBamWalker::hasAdapter(const SeqLib::BamRecord& r) const { // // keep it if it has indel or unmapped read // if (r.MaxDeletionBases() || r.MaxInsertionBases() || !r.InsertSize()) // || !r.NumClip()) // return false; // // toss if isize is basically read length (completely overlaping) // if (std::abs(r.FullInsertSize() - r.Length()) < 5) // return true; // // now only consider reads where clip can be explained by isize // if (!r.NumClip()) // return false; // // toss it then if isize explans clip // int exp_ins_size = r.Length() - r.NumClip(); // expected isize if has adapter // if ((exp_ins_size - 6) < std::abs(r.InsertSize()) && (exp_ins_size + 6) > std::abs(r.InsertSize())) // return true; // std::string seq = r.Sequence(); // if (seq.find(ILLUMINA_PE_PRIMER_2p0) != std::string::npos) // return true; // return false; // } void svabaBamWalker::RealignDiscordants(svabaThreadUnit& unit) { size_t realigned_count = 0; size_t realign_attempted = 0; std::unordered_set bad_discordant; for (auto& r : reads) { if (!discordantRealigner.ShouldRealign(r)) continue; ++realign_attempted; if (realign_attempted % 10000 == 0) sc.logger.log(sc.opts.verbose > 3, false, "Realigning read ", r->Brief(), " - ", SeqLib::AddCommas(realign_attempted), " - ", realigned_count); // modifies the read in place if(discordantRealigner.RealignRead(r, unit.bwa_aligner)) { ++realigned_count; bad_discordant.insert(r->Qname()); } } // loop through and set DD < 0 for all read-pairs that have a bad discordant for (auto& r : reads) if (r->GetDD() >= 0 && bad_discordant.count(r->Qname())) r->SetDD(DiscordantRealigner::MATE_BAD_DISC); } int svabaBamWalker::getIsizeCutoff(const std::string& RG) { auto cc = isize_cutoff_per_rg.find(RG); if (cc != isize_cutoff_per_rg.end()) return cc->second; // not cached yet — look up from learned params const auto it = sc.bamStats.find(this->prefix_); if (it == sc.bamStats.end()) { if (!sc.warned.count(this->prefix_)) { sc.logger.log(true, true, "SBW: Can't find LearnBamParams for ", this->prefix_); sc.warned.insert(this->prefix_); } isize_cutoff_per_rg[RG] = DEFAULT_ISIZE_THRESHOLD; return DEFAULT_ISIZE_THRESHOLD; } const auto rgg = it->second.bam_read_groups.find(RG); if (rgg == it->second.bam_read_groups.end()) { if (!sc.warned.count(RG)) sc.warned.insert(RG); isize_cutoff_per_rg[RG] = DEFAULT_ISIZE_THRESHOLD; return DEFAULT_ISIZE_THRESHOLD; } bool is_normal = (!prefix_.empty() && prefix_[0] == 'n'); double sd_mult = is_normal ? sc.opts.sdDiscCutoffNormal : sc.opts.sdDiscCutoff; int cutoff = static_cast( rgg->second.isize_median + rgg->second.sd_isize * sd_mult); isize_cutoff_per_rg[RG] = cutoff; return cutoff; } void svabaBamWalker::TagDiscordant(svabaReadPtr& r) { std::string RG; if (!r->GetZTag("RG", RG)) RG = "NA"; int cutoff = getIsizeCutoff(RG); // accept as discordant if not FR, has large enough isize, or is inter-chromosomal bool weird_orientation = r->PairOrientation() != SeqLib::Orientation::FR; if ( weird_orientation || abs(r->FullInsertSize()) >= cutoff || r->Interchromosomal() ) r->dd = 1; // set as discordant // not discordant if read or mate in blacklist if (sc.blacklist.CountOverlaps(r->AsGenomicRegion()) || sc.blacklist.CountOverlaps(r->AsGenomicRegionMate()) || local_blacklist.CountOverlaps(r->AsGenomicRegion()) || local_blacklist.CountOverlaps(r->AsGenomicRegionMate())) r->dd = 0; //debug // if (r->Qname() == "LH00306:129:227V5CLT4:6:2114:6074:25724") { // std::cerr << " TAG " << r->dd << " -- " << *r << " weird orientation " << // weird_orientation << " cutoff " << cc->second << " INS " << // abs(r->FullInsertSize()) << std::endl; // } return; } ================================================ FILE: src/svaba/SvabaBamWalker.h ================================================ #pragma once #include #include #include #include //#include "malloc.h" //debug #include "SeqLib/BamReader.h" #include "SeqLib/ReadFilter.h" #include "STCoverage.h" #include "SeqLib/BWAAligner.h" #include "DiscordantRealigner.h" #include "SeqLib/BFC.h" class svabaThreadUnit; class SvabaSharedConfig; // storage container for mate lookup-regions class MateRegion: public SeqLib::GenomicRegion { public: MateRegion() {} MateRegion (int32_t c, uint32_t p1, uint32_t p2, char s = '*') : SeqLib::GenomicRegion(c, p1, p2, s) {} size_t count = 0;// read count SeqLib::GenomicRegion partner; }; typedef SeqLib::GenomicRegionCollection MateRegionVector; class svabaBamWalker: public SeqLib::BamReader { public: svabaBamWalker(SvabaSharedConfig& sc_); // read in the reads SeqLib::GRC readBam(svabaThreadUnit& unit); // clear it out void clear() { cov.clear(); weird_cov.clear(); bfc.ClearReads(); cigmap.clear(); mate_regions.clear(); reads.clear(); get_coverage = true; get_mate_regions = true; local_blacklist.clear(); train_reads.clear(); //malloc_trim(0);//debug } void AddBackReadsToCorrect(); // void Train(); void ErrorCorrect(); void ClearTraining(); // set the id for this bam e.g. t001 void SetPrefix(std::string_view pref) { prefix_ = pref; } void RealignDiscordants(svabaThreadUnit& unit); ///bool hasAdapter(const SeqLib::BamRecord& r) const; void addCigar(const svabaReadPtr& r); //bool isDuplicate(const SeqLib::BamRecord &r); void subSampleToWeirdCoverage(double max_coverage); void calculateMateRegions(); void TagDiscordant(svabaReadPtr& r); /// Return the per-RG isize discordant cutoff, lazily cached. int getIsizeCutoff(const std::string& RG); // should we store the mate regions? bool get_mate_regions = true; // place to store reads when we get them svabaReadPtrVector reads; //c // cov is the all-read coverage tracker // weird-cov just tracks coverage of accepted (clip, disc, etc reads) // buffered cov is coverage minus first 8 and last 8 bp. Why? // because when looking for variant-supporting reads, we require // alignment of a read to the variant to overlap it by 8 bp // to reduce false-positive alt reads. So we use the buffered // coverage to compare against this buffered alt cov. STCoverage cov, weird_cov; //c // hash of cigars for indels SeqLib::CigarMap cigmap; //c // mate regions to lookup MateRegionVector mate_regions; //c // object for realigning discordant reads DiscordantRealigner discordantRealigner; //c // maximum coverage of accepted reads, before subsampling size_t max_cov = 100; // should we keep reads for learning correction double kmer_subsample = 0.5; // should we subsample the learning reads? bool do_kmer_filtering = true; // should we get the read coverage bool get_coverage = true; // set a hard limit on how many reads to accept size_t m_limit = 0; // an extra learned region-specific blacklist SeqLib::GRC local_blacklist; SeqLib::BFC bfc; // subsampled non-weird reads kept for BFC training. Populated during // readBam, consumed by the pooled BFC in SvabaRegionProcessor. SeqLib::UnalignedSequenceVector train_reads; private: // for setting the SR tag std::string prefix_; // eg. tumor, normal // might want these in case we are looking for duplicates //std::unordered_set seq_set; //c // seed for the kmer-learning subsampling uint32_t m_seed = 1337; // for logging to console, options etc SvabaSharedConfig& sc; // cache RG cutoffs so don't have to recalculate std::unordered_map isize_cutoff_per_rg; }; ================================================ FILE: src/svaba/SvabaDebug.h ================================================ // SvabaDebug.h — compile-time contig and read tracing. // // Contig tracing: // cmake .. -DSVABA_TRACE_CONTIG='"c_fermi_chr2_215869501_215894501_11C"' // make -j // // This compiles svaba with verbose stderr tracing for every decision // point that contig touches: assembly filtering, BP identification, // r2c scoring, split coverage, confidence assignment, and output gating. // // To disable (default): just don't pass -DSVABA_TRACE_CONTIG. // To trace ALL contigs (very noisy): -DSVABA_TRACE_ALL=1 // // Read tracing: // cmake .. -DSVABA_TRACE_READ='"LH00306:235:22NHGWLT4:6:1329:45742:15246"' // make -j // // Traces a specific read (by QNAME) through the BamWalker read-filter // pipeline: duplicate/QC/blacklist gates, rule_pass, high-NM salvage, // adapter filter, quality trim, and final buffer admission. // // To trace ALL reads (extremely noisy): -DSVABA_TRACE_ALL_READS=1 // #pragma once #include #include // ── Contig tracing ────────────────────────────────────────────────── #ifdef SVABA_TRACE_CONTIG // Match by contig name (cname) inline bool _svaba_trace_match(const std::string& cname) { return cname == SVABA_TRACE_CONTIG; } #define SVABA_TRACE(cname, msg) \ do { if (_svaba_trace_match(cname)) { \ std::cerr << "[TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << msg << std::endl; \ } } while(0) #define SVABA_TRACE_IF(cond, cname, msg) \ do { if ((cond) && _svaba_trace_match(cname)) { \ std::cerr << "[TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << msg << std::endl; \ } } while(0) #define SVABA_TRACING 1 #elif defined(SVABA_TRACE_ALL) #define SVABA_TRACE(cname, msg) \ do { std::cerr << "[TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << "[" << (cname) << "] " << msg << std::endl; \ } while(0) #define SVABA_TRACE_IF(cond, cname, msg) \ do { if (cond) { std::cerr << "[TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << "[" << (cname) << "] " << msg << std::endl; } \ } while(0) #define SVABA_TRACING 1 #else #define SVABA_TRACE(cname, msg) do {} while(0) #define SVABA_TRACE_IF(cond, cname, msg) do {} while(0) // SVABA_TRACING intentionally not defined #endif // ── Read tracing ──────────────────────────────────────────────────── #ifdef SVABA_TRACE_READ inline bool _svaba_read_trace_match(const std::string& qname) { return qname == SVABA_TRACE_READ; } #define SVABA_READ_TRACE(qname, msg) \ do { if (_svaba_read_trace_match(qname)) { \ std::cerr << "[READ_TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << msg << std::endl; \ } } while(0) #define SVABA_READ_TRACE_IF(cond, qname, msg) \ do { if ((cond) && _svaba_read_trace_match(qname)) { \ std::cerr << "[READ_TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << msg << std::endl; \ } } while(0) #define SVABA_READ_TRACING 1 #elif defined(SVABA_TRACE_ALL_READS) #define SVABA_READ_TRACE(qname, msg) \ do { std::cerr << "[READ_TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << "[" << (qname) << "] " << msg << std::endl; \ } while(0) #define SVABA_READ_TRACE_IF(cond, qname, msg) \ do { if (cond) { std::cerr << "[READ_TRACE:" << __FILE__ << ":" << __LINE__ << "] " \ << "[" << (qname) << "] " << msg << std::endl; } \ } while(0) #define SVABA_READ_TRACING 1 #else #define SVABA_READ_TRACE(qname, msg) do {} while(0) #define SVABA_READ_TRACE_IF(cond, qname, msg) do {} while(0) // SVABA_READ_TRACING intentionally not defined #endif // ── Kmer restriction ──────────────────────────────────────────────── // // Compile-time read filter: after BFC error correction, only reads // whose corrected sequence contains the specified kmer survive into // assembly/r2c/corrected.bam. All others get to_assemble = false. // // Usage: // cmake .. -DCMAKE_CXX_FLAGS='-DSVABA_KMER_RESTRICT="\"CCATGCAGAGTGTTGAAGAAAAGGC\""' // // Also checks the reverse complement so orientation doesn't matter. // Zero cost when not compiled in. #ifdef SVABA_KMER_RESTRICT inline std::string _svaba_revcomp(const std::string& s) { std::string rc(s.size(), 'N'); for (size_t i = 0; i < s.size(); ++i) { switch (s[s.size() - 1 - i]) { case 'A': case 'a': rc[i] = 'T'; break; case 'T': case 't': rc[i] = 'A'; break; case 'C': case 'c': rc[i] = 'G'; break; case 'G': case 'g': rc[i] = 'C'; break; default: rc[i] = 'N'; break; } } return rc; } inline bool _svaba_kmer_match(const std::string& seq) { static const std::string kmer_fwd(SVABA_KMER_RESTRICT); static const std::string kmer_rc = _svaba_revcomp(kmer_fwd); return seq.find(kmer_fwd) != std::string::npos || seq.find(kmer_rc) != std::string::npos; } #define SVABA_KMER_RESTRICTING 1 #endif ================================================ FILE: src/svaba/SvabaFileLoader.cpp ================================================ // SvabaFileLoader.cpp #include #include // for std::unique_ptr #include // for std::istringstream #include // for std::string #include // if you use any std::vector in this file #include "SvabaFileLoader.h" // your own header #include "SvabaSharedConfig.h" #include "SvabaLogger.h" #include "SvabaOptions.h" #include "SeqLib/RefGenome.h" // defines SeqLib::RefGenome #include "SeqLib/GenomicRegionCollection.h" // defines SeqLib::GRC #include "SeqLib/BamHeader.h" // if you use SeqLib::BamHeader anywhere #include "SeqLib/BamReader.h" // if you invoke any BamReader methods namespace fs = std::filesystem; using std::string; SvabaFileLoader::SvabaFileLoader(SvabaSharedConfig& sc_) : sc(sc_) {} std::unique_ptr SvabaFileLoader::loadReference() { auto rg = std::make_unique(); try { rg->LoadIndex(sc.opts.refGenome); } catch (const std::exception& e) { sc.logger.log(true, true, "ERROR: Unable to load reference genome '", sc.opts.refGenome, "': ", e.what()); throw; } sc.logger.log(false, true, "Loaded reference genome: ", sc.opts.refGenome); return rg; } void SvabaFileLoader::loadBedRegions(const std::string& path, SeqLib::GRC& gr) { if (path.empty()) return; try { gr = SeqLib::GRC(path, sc.header); gr.CreateTreeMap(); sc.logger.log(true, true, "...loaded BED file '", path, "' (", gr.size(), " regions)"); } catch (const std::exception& e) { sc.logger.log(true, true, "ERROR: cannot read BED file '", path, "': ", e.what()); throw; } } void SvabaFileLoader::countJobs( SeqLib::GRC& runRegions) { SeqLib::GRC fileRegions; const auto& rf = sc.opts.regionFile; // 1) If its a real BED/region file on disk if (!rf.empty() && fs::exists(rf)) { try { fileRegions = SeqLib::GRC(rf, sc.header); } catch (const std::exception& ex) { sc.logger.log( /*toErr=*/true, /*toLog=*/true, "Could not parse region file '", rf, "': ", ex.what(), ". Skipping region file."); } // 2) If it looks like chr:start-end } else if (rf.find(':') != string::npos && rf.find('-') != string::npos) { fileRegions.add(SeqLib::GenomicRegion(rf, sc.header)); // 3) Bare chromosome name(s), possibly comma-separated (e.g. "chr1,chr2,chr3") } else if (!rf.empty()) { // Split on commas to support -k chr1,chr2,chr3 std::istringstream ss(rf); std::string token; while (std::getline(ss, token, ',')) { if (token.empty()) continue; // Each token could be "chr1" or "chr1:100-200" if (token.find(':') != string::npos && token.find('-') != string::npos) { fileRegions.add(SeqLib::GenomicRegion(token, sc.header)); } else { SeqLib::GenomicRegion gr(token, "1", "1", sc.header); if (gr.chr < 0 || gr.chr >= sc.header.NumSequences()) { throw std::runtime_error("Region '" + token + "' failed to match any chromosome in BAM header"); } gr.pos2 = sc.header.GetSequenceLength(gr.chr); fileRegions.add(gr); } } // 4) else: whole genome } else { for (int i = 0; i < sc.header.NumSequences(); ++i) { fileRegions.add( SeqLib::GenomicRegion(i, 1, sc.header.GetSequenceLength(i)) ); } } if (fileRegions.size() == 0) { throw std::runtime_error("No regions found" + (rf.empty() ? string("") : " in '" + rf + "'")); } // 5) Chunk them up if (sc.opts.chunkSize > 0) { for (auto& r : fileRegions) { // this SeqLib constructor splits a region into windows of size chunkSize with pad SeqLib::GRC pieces(sc.opts.chunkSize, sc.opts.windowpad, r); runRegions.Concat(pieces); } } else { // if chunkSize <= 0, we just do one big pass: runRegions = fileRegions; } // if no explicit regionFile, clear fileRegions to signal whole genome if (rf.empty()) { fileRegions.clear(); } return; } ================================================ FILE: src/svaba/SvabaFileLoader.h ================================================ // SvabaFileLoader.h #pragma once #include #include #include "SeqLib/GenomicRegionCollection.h" class SvabaLogger; class SvabaOptions; class SvabaSharedConfig; namespace SeqLib { class RefGenome; } /// A small helper for all the open this file, bail out if it fails logic. /// Carries around references to your single SvabaLogger and SvabaOptions. class SvabaFileLoader { public: /// You must give it your one-and-only logger and options. SvabaFileLoader(SvabaSharedConfig& sc_); /// Loads a BED style file into a GenomicRegionCollection, or returns empty if no path. void loadBedRegions(const std::string& path, SeqLib::GRC& gr); std::unique_ptr loadReference(); /// load the regions to run file and parese out jobs void countJobs(SeqLib::GRC& runRegions); private: SvabaSharedConfig& sc; }; ================================================ FILE: src/svaba/SvabaLogger.cpp ================================================ #include "SvabaLogger.h" #include "SvabaOptions.h" SvabaLogger::~SvabaLogger() { if (logFile_.is_open()) logFile_.close(); } void SvabaLogger::init(const std::string& filename) { logFile_.open(filename, std::ios::out | std::ios::app); if (!logFile_) { std::cerr << "ERROR: Unable to open log file: " << filename << std::endl; } } void SvabaLogger::welcome(SvabaOptions& opts) { // write to log this->log(true, true, "-----------------------------------------------------------\n", "--- Running svaba SV and indel detection on ", " threads ---", (opts.numThreads >= 10 ? "\n" : "-\n"), "--- Version: ", SVABA_VERSION, " - ", SVABA_DATE, " ---\n", "--- (inspect *.log for real-time progress updates) ---\n", "-----------------------------------------------------------"); // print the options to console if verbose (handled insize SvabaOptions) //opts.printToLogger(*this); } ================================================ FILE: src/svaba/SvabaLogger.h ================================================ #pragma once #include #include #include #include #include class SvabaOptions; /// A simple thread safe logger that writes to a file and (optionally) stderr. class SvabaLogger { public: SvabaLogger() = default; ~SvabaLogger(); /// Must be called once at program startup, before any log() calls. /// Opens (and appends to) the given filename. void init(const std::string& filename); /// Log a message. /// @param toErr if true, also write to std::cerr /// @param toLog if true, write to the log file /// @param args one or more things you can stream into an ostringstream template void log(bool toErr, bool toLog, Args&&... args) { // it no printing at all, just leave if (!toErr && !toLog) return; std::lock_guard lock(mtx_); std::ostringstream oss; // fold expression to stream all args (oss << ... << std::forward(args)); auto msg = oss.str(); if (toLog && logFile_.is_open()) logFile_ << msg << "\n"; if (toErr) std::cerr << msg << "\n"; } void welcome(SvabaOptions& opts); private: std::ofstream logFile_; std::mutex mtx_; }; ================================================ FILE: src/svaba/SvabaModels.cpp ================================================ #include "SvabaModels.h" #include #include #include #include namespace SvabaModels { double LogLikelihood(double ref, double alt, double f, double e_fwd, double e_back) { // less negative log-likelihoods means more likely // eg for low error rate, odds that you see 5 ALT and 5 REF // if you are testing for AF = 0 is going to be very low (eg -40) // To test if something is true, we want to test the log-likelihood that // it's AF is != 0, so we test LL(ref, alt, AF=0, er). If this is // a large negative number, it means that AF = 0 is very unlikely. // If we use a larger error rate, then it is more likely that we will // see ALT reads even if true AF = 0, so as ER goes up, then // LL(ref, alt, AF=0, er) becomes less negative. // Unnormalized log10-likelihood of seeing 'ref' ref-reads and 'alt' alt-reads // under a simple two-state error/mutation model. double ll = 0.0; // Clamp negative counts to zero ref = std::max(0.0, ref); alt = std::max(0.0, alt); // P(read = REF): // (1-f)*(1-e_fwd) true-ref, no forward error // + f*e_back true-alt, mis-read back to ref double p_ref = (1.0 - f) * (1.0 - e_fwd) // prior arg1 + f * e_back; // std::cerr << " pref " << p_ref << " ref " << ref << std::endl; if (p_ref > 0.0) { ll += ref * std::log10(p_ref); } else if (ref > 0) { return -1e12; // zero probability but nonzero observations -> -Inf } // P(read = ALT): // f*(1-e_back) true-alt, no back mutation // + (1-f)*e_fwd true-ref, forward error to alt double p_alt = f * (1.0 - e_back) + (1.0 - f) * e_fwd; // std::cerr << " palt " << p_alt << " alt " << alt << std::endl; if (p_alt > 0.0) { ll += alt * std::log10(p_alt); } else if (alt > 0) { return -1e12; } return ll; } // Forward: keep your public signature e_fwd is the high artifact rate. static inline double SomaticLOD_withSplitErrors(double aN, double dN, double aT, double dT, double e_art_fwd, double e_rev, double eN_fwd, double eT_fwd); double SomaticLOD(double aN, double dN, double aT, double dT, double e_fwd, double e_rev) { // Map old params to split errors: // - e_fwd (caller) is your high artifact rate -> e_art_fwd // - Choose conservative, lower empirical forward error caps for normal/tumor const double e_art_fwd = e_fwd; // You can tune these caps globally if you like const double eN_fwd = std::min(e_art_fwd, 0.005); // 0.5% in NORMAL const double eT_fwd = std::min(std::max(e_art_fwd, 1e-4), 0.02); // 2% in TUMOR return SomaticLOD_withSplitErrors(aN, dN, aT, dT, e_art_fwd, e_rev, eN_fwd, eT_fwd); } // Implementation with split errors static inline double SomaticLOD_withSplitErrors(double aN, double dN, double aT, double dT, double e_art_fwd, double e_rev, double eN_fwd, double eT_fwd) { const double epsilon = 1e-6; const double dN_safe = std::max(1.0, dN); const double dT_safe = std::max(1.0, dT); // MLE tumor AF under H1 double fT_hat_raw = aT / dT_safe; double fT_hat = std::clamp(fT_hat_raw, epsilon, 1.0 - epsilon); // Likelihood helpers (use *different* forward error by sample) auto LL_N = [&](double d, double a, double f) { return LogLikelihood(d - a, a, f, eN_fwd, e_rev); // log10 }; auto LL_T = [&](double d, double a, double f) { return LogLikelihood(d - a, a, f, eT_fwd, e_rev); // log10 }; // Artifact-branch helper: use the generous artifact forward rate auto LL_art = [&](double d, double a, double f) { return LogLikelihood(d - a, a, f, e_art_fwd, e_rev); // log10 }; // ========================= // Artifact allele fraction // ========================= // Keep artifact AF small; rate of errors (e_art_fwd) can be high, but true AF under artifact is low. const double f_art = std::clamp(e_art_fwd, 1e-5, 1e-2); // ========================= // SOMATIC (H1): max of // (A) True somatic: N~0, T~fT_hat // (B) Artifact in both: N~f_art, T~f_art // ========================= double llN_som_true = LL_N(dN_safe, aN, 0.0); double llT_som_true = LL_T(dT_safe, aT, fT_hat); double ll_som_true = llN_som_true + llT_som_true; double llN_som_art = LL_art(dN_safe, aN, f_art); double llT_som_art = LL_art(dT_safe, aT, f_art); double ll_som_art = llN_som_art + llT_som_art; double ll_som = std::max(ll_som_true, ll_som_art); // ========================= // GERMLINE (H0): max of // Het (0.5), Hom-alt (1-eps), Shared MLE f, Artifact (low f) // ========================= const double f_het = std::clamp(0.5, epsilon, 1.0 - epsilon); const double f_hom = std::clamp(1.0, epsilon, 1.0 - epsilon); // Upper edge of "looks like a low-level artifact" VAF band. Anything // above this is either heterozygous (~0.5), homozygous (~1.0), or // an LOH-shifted germline event -- not a low-VAF shared artifact. const double germ_plausible_floor = 0.15; // ========================================================================= // GERM_shared: pooled-MLE allele fraction across N+T. // // Design goals: // - aN = 0 (clean normal) -> GERM_shared must be held back so that a // low-VAF tumor signal can win as somatic. // - aN = 1-2 in a clean normal -> GERM_shared should compete strongly, // because a shared low-VAF artifact is // exactly what that data looks like. // - aN >= ~3 -> GERM_shared dominates normally; shared artifact or // real (possibly LOH) germline event explains the data. // // We use TWO shaping knobs on top of the raw pooled-MLE log-likelihood: // // (1) "Cleanliness" penalty: a decaying function of aN relative to // expected errors in the normal (dN * eN_fwd). Near-maximum penalty // when the normal looks clean (aN at or below the error floor), // drops off steeply as excess normal alt reads accumulate. // // (2) VAF similarity bonus: when the normal does have real alt // evidence, *matching* VAFs between normal and tumor are a strong // "shared" fingerprint. Gated by (1 - cleanliness) so this bonus // only fires once the normal actually has signal -- this prevents // accidentally penalizing low-VAF-tumor somatic calls where the // VAF-ratio would be noisy and meaningless. // // f_shared_hat floats to the true pooled MLE (no 0.15 floor). The old // clamp turned the "free-MLE" branch into a "germline-only-MLE" branch, // which is exactly what we don't want when explaining low-VAF shared // signal. // ========================================================================= // Pooled MLE across both samples, free to land anywhere in (0,1). const double f_shared_hat_raw = (aN + aT) / (dN_safe + dT_safe); const double f_shared_hat = std::clamp(f_shared_hat_raw, epsilon, 1.0 - epsilon); // Start with the raw pooled-MLE log-likelihood -- never -inf, always let // GERM_shared compete; shaping below decides how strongly. double ll_germ_shared = LL_N(dN_safe, aN, f_shared_hat) + LL_T(dT_safe, aT, f_shared_hat); // ----- (1) cleanliness penalty on GERM_shared ----------------------------- // Expected normal alt count under pure forward error at the (capped) // normal error rate. Anything at or below this is indistinguishable from // a clean normal. const double expected_errors_N = dN_safe * eN_fwd; const double excess_alt_N = std::max(0.0, aN - expected_errors_N); // Steep exponential decay: coefficient=3 means a single excess alt read // already drops cleanliness by ~20x. At dN=79, eN_fwd=0.005: // aN=0 -> cleanliness=1.00 (full hold-back, clean somatic wins) // aN=1 -> cleanliness~0.16 (penalty already mostly gone) // aN=2 -> cleanliness~0.008 (essentially no hold-back) // This is the "even 1-2 normal alt reads should steeply consider shared" // behavior from the design discussion. const double kCleanDecay = 3.0; const double cleanliness = std::exp(-kCleanDecay * excess_alt_N); // Max hold-back magnitude at aN=0. const double kCleanPenalty = 2.0; ll_germ_shared -= kCleanPenalty * cleanliness; // ----- (2) VAF similarity bonus -------------------------------------------- // Matching tumor/normal VAFs are the fingerprint of a shared artifact or // a shared (possibly LOH-shifted) germline event. Gated by (1-cleanliness) // so this bonus only really fires once the normal has alt evidence -- // otherwise the ratio is dominated by numerical epsilons. const double f_n_hat = std::clamp(aN / dN_safe, epsilon, 1.0 - epsilon); const double f_t_hat = fT_hat; const double ratio = (std::max(f_n_hat, f_t_hat) > 0.0) ? std::min(f_n_hat, f_t_hat) / std::max(f_n_hat, f_t_hat) : 0.0; const double sim_weight = 1.0 - cleanliness; // ~0 at aN=0, ~1 at aN>=2 const double kSimBonus = 3.0; // log10 ll_germ_shared += sim_weight * ratio * kSimBonus; // ----- (3) "both samples low VAF" shared-artifact bonus -------------------- // If both normal and tumor carry nonzero alt evidence AND both VAFs sit // below the germline-plausible band, that is the canonical signature of a // low-level shared artifact (repeat tract, low-complexity region, etc). // We add a bonus proportional to how similar the two VAFs are. This is // independent of (2) -- (2) rewards *matching*, (3) rewards *both-low*. const double low_vaf_cutoff = germ_plausible_floor; // 0.15 const bool both_nonzero_alt = (aN > 0.0) && (aT > 0.0); const bool both_low_vaf = (f_n_hat < low_vaf_cutoff) && (f_t_hat < low_vaf_cutoff); if (both_nonzero_alt && both_low_vaf) { const double kSharedLowVafBonus = 2.0; // log10 ll_germ_shared += kSharedLowVafBonus * ratio; } // other model options (germline het, germline homozygous, germline artifact) double ll_germ_het = LL_N(dN_safe, aN, f_het) + LL_T(dT_safe, aT, f_het); double ll_germ_hom = LL_N(dN_safe, aN, f_hom) + LL_T(dT_safe, aT, f_hom); double ll_germ_art = LL_art(dN_safe, aN, f_art) + LL_art(dT_safe, aT, f_art); // ========================================================================= // GERM_free: f_N and f_T MLEd independently (NOT tied like GERM_shared). // // Fills the gap where normal has low-but-real variant evidence while the // tumor is near-clonal: LOH, clonal hematopoiesis, tumor-in-normal // contamination, mosaic germline, etc. GERM_shared forces f_N = f_T, so // e.g. (aN=6/dN=33, aT=84/dT=90) -- normal VAF ~0.18, tumor VAF ~0.93 -- // fits NEITHER sample under GERM_shared (pooled f≈0.73 is wrong for // both), GERM_het is also wrong for both, and SOM_true wins despite // clear alt evidence in the normal. // // Parameter count: // SOM_true has 1 free parameter (f_T). // GERM_free has 2 free parameters (f_N, f_T). // Charge a BIC penalty of 0.5·log10(dN+dT) for the 1 net extra parameter. // // Activation gate: aN > expected_errors_N + 1 // Rationale: when aN is at or near the expected number of error-driven // alt reads in the normal (dN·eN_fwd), there is no real variant signal // and the MLE f_N pegs at the error floor. Unconditionally enabling // GERM_free in that regime makes it degenerate to "SOM_true minus BIC" // on every clean-normal event, artificially capping somlod at ~1 bit // regardless of how strong the tumor signal is. The +1 buffer above the // error floor is Poisson-tail slack so a single stray error read in a // clean normal doesn't trip the gate. // ========================================================================= double ll_germ_free = -std::numeric_limits::infinity(); double ll_germ_free_LL_N = 0.0, ll_germ_free_LL_T = 0.0; // for debug dump double kGermFreeBIC = 0.0; double f_n_free_dbg = 0.0, f_t_free_dbg = 0.0; bool germ_free_active = false; if (aN > expected_errors_N + 1.0) { germ_free_active = true; f_n_free_dbg = std::clamp(aN / dN_safe, epsilon, 1.0 - epsilon); f_t_free_dbg = std::clamp(aT / dT_safe, epsilon, 1.0 - epsilon); kGermFreeBIC = 0.5 * std::log10(dN_safe + dT_safe); ll_germ_free_LL_N = LL_N(dN_safe, aN, f_n_free_dbg); ll_germ_free_LL_T = LL_T(dT_safe, aT, f_t_free_dbg); ll_germ_free = ll_germ_free_LL_N + ll_germ_free_LL_T - kGermFreeBIC; } double ll_germ = std::max({ ll_germ_shared, ll_germ_het, ll_germ_hom, ll_germ_art, ll_germ_free }); double lod_somatic_vs_germ = ll_som - ll_germ; // --------- DEBUG DUMP ---------- if (false) { // SOM/H0 winners (for readability) const bool som_true_better = (ll_som_true >= ll_som_art); const char* som_branch = som_true_better ? "SOM:true" : "SOM:art"; double ll_germ_best = ll_germ_het; const char* germ_branch = "GERM:het"; if (ll_germ_hom > ll_germ_best) { ll_germ_best = ll_germ_hom; germ_branch = "GERM:hom"; } if (ll_germ_art > ll_germ_best) { ll_germ_best = ll_germ_art; germ_branch = "GERM:art"; } if (ll_germ_shared > ll_germ_best) { ll_germ_best = ll_germ_shared; germ_branch = "GERM:shared"; } if (ll_germ_free > ll_germ_best) { ll_germ_best = ll_germ_free; germ_branch = "GERM:free"; } std::cerr << "SomaticLOD" << " | aN=" << aN << " dN=" << dN << " aT=" << aT << " dT=" << dT << " e_art_fwd=" << e_art_fwd << " eN_fwd=" << eN_fwd << " eT_fwd=" << eT_fwd << " e_rev=" << e_rev << " eps=" << epsilon << " fT_hat_raw=" << fT_hat_raw << " fT_hat=" << fT_hat << " f_art=" << f_art << " f_shared_raw=" << f_shared_hat_raw << " f_shared=" << f_shared_hat << " expN_err=" << expected_errors_N << " excessN=" << excess_alt_N << " cleanliness=" << cleanliness << " clean_penalty=" << (kCleanPenalty * cleanliness) << " f_n_hat=" << f_n_hat << " f_t_hat=" << f_t_hat << " ratio=" << ratio << " sim_weight=" << sim_weight << " sim_bonus=" << (sim_weight * ratio * kSimBonus) << " both_low=" << (both_nonzero_alt && both_low_vaf ? 1 : 0) << " low_vaf_bonus=" << ((both_nonzero_alt && both_low_vaf) ? (2.0 * ratio) : 0.0) << " || SOM_TRUE(N,T,sum)=(" << llN_som_true << "," << llT_som_true << "," << ll_som_true << ")" << " SOM_ART(N,T,sum)=(" << llN_som_art << "," << llT_som_art << "," << ll_som_art << ")" << " SOM=" << ll_som << " [" << som_branch << "]" << " || GERM_HET(N,T,sum)=(" << (LL_N(dN_safe,aN,f_het)) << "," << (LL_T(dT_safe,aT,f_het)) << "," << ll_germ_het << ")" << " GERM_HOM(N,T,sum)=(" << (LL_N(dN_safe,aN,f_hom)) << "," << (LL_T(dT_safe,aT,f_hom)) << "," << ll_germ_hom << ")" << " GERM_ART(N,T,sum)=(" << (LL_art(dN_safe,aN,f_art)) << "," << (LL_art(dT_safe,aT,f_art)) << "," << ll_germ_art << ")" << " GERM_SHARED(N,T,sum)=(" << (LL_N(dN_safe,aN,f_shared_hat)) << "," << (LL_T(dT_safe,aT,f_shared_hat)) << "," << ll_germ_shared << ")" << " GERM_FREE(active=" << (germ_free_active ? 1 : 0) << ",fN=" << f_n_free_dbg << ",fT=" << f_t_free_dbg << ",N=" << ll_germ_free_LL_N << ",T=" << ll_germ_free_LL_T << ",BIC=" << kGermFreeBIC << ",sum=" << ll_germ_free << ")" << " GERM=" << ll_germ << " [" << germ_branch << "]" << " || LOD10=" << lod_somatic_vs_germ << std::endl; } // ------------------------------- return lod_somatic_vs_germ; // log10 } int GenotypeQuality(const std::vector& PLs) { int best = std::numeric_limits::max(); int second = std::numeric_limits::max(); for (int p : PLs) { if (p < best) { second = best; best = p; } else if (p < second) { second = p; } } return std::min(second, 99); } // g is the number of reference alleles (e.g. g = 2 is homozygous reference) // assumes biallelic model // http://bioinformatics.oxfordjournals.org/content/early/2011/09/08/bioinformatics.btr509.full.pdf+html double GenotypeLikelihoods(int g, double er, int alt, int cov) { // g = number of reference alleles: 2 = hom_ref, 1 = het, 0 = hom_alt // er = per-read error rate (0 <= er <= 1) // alt = count of alt reads // cov = total read depth // Returns log10-likelihood under a biallelic model. // Clamp inputs g = std::min(2, std::max(0, g)); alt = std::max(0, alt); cov = std::max(0, cov); er = std::clamp(er, 0.0, 1.0); if (alt > cov) return -1e12; int ref = cov - alt; double norm = -cov * std::log10(2.0); // accounts for dividing by 2 // Compute numerators (before /2) double num_ref = (2 - g) * er + g * (1.0 - er); double num_alt = (2 - g) * (1.0 - er) + g * er; // True probabilities (divide by 2) double p_ref = num_ref / 2.0; double p_alt = num_alt / 2.0; double ll = norm; // Add ref-read contribution if (p_ref > 0.0) { ll += ref * std::log10(p_ref); } else if (ref > 0) { return -1e12; } // Add alt-read contribution if (p_alt > 0.0) { ll += alt * std::log10(p_alt); } else if (alt > 0) { return -1e12; } return ll; } } ================================================ FILE: src/svaba/SvabaModels.h ================================================ #pragma once #include namespace SvabaModels { double LogLikelihood(double ref, double alt, double f, double e_fwd, double e_back); double SomaticLOD(double aN, double dN, double aT, double dT, double e_fwd, double e_rev); double GenotypeLikelihoods(int g, double er, int alt, int cov); int GenotypeQuality(const std::vector& PLs); } ================================================ FILE: src/svaba/SvabaOptions.cpp ================================================ #include "SvabaOptions.h" #include // for std::ostringstream #include // for std::setw and std::setfill #include #include #include #include "SvabaLogger.h" #include "SvabaAssemblerConfig.h" // SVABA_ASSEMBLER_FERMI for SGA guards void SvabaOptions::printUsage() { std::cout << R"( Usage: svaba run [OPTIONS] General: -h, --help Show this message -v, --verbose Verbosity level (0-4), default 0 -p, --threads Number of threads, default 1 -a, --analysis-id Identifier for this run Input: -t, --case-bam Tumor BAM; may repeat -n, --control-bam Normal BAM; may repeat -G, --reference-genome Indexed reference FASTA -k, --region-file BED or samtools-style regions Mode: --single-end Single-end mode (no mate lookup) --all-contigs Output all assembled contigs --discordant-only Skip assembly, only discordants --override-ref-check Skip BAM vs REF compatibility check )" #if !SVABA_ASSEMBLER_FERMI // SGA-specific knobs. Only surface them to --help when svaba was // compiled with SGA as the active assembler (see // SvabaAssemblerConfig.h). The option codes themselves still parse // under fermi — they just get ignored. << R"( Assembly (SGA): --min-overlap Minimum read overlap for SGA --error-rate SGA fractional error rate --rounds Number of assembly rounds )" #endif << R"( Error-correction: --ec-type s=SGA k-mer; f=Fermi BFC; 0=off --ec-subsample Fraction to sample for EC learning Discordant clustering: --disc-sd SD cutoff, default 3.92 Filtering: --max-cov Max coverage to assemble, default 100 --mate-min Min reads to trigger somatic mate lookup, default 3 --mate-min-count Min reads to form a candidate mate region, default 2 --mate-lim Max reads in mate lookup, default 400 --min-mate-mapq Min MAPQ on primary read for mate-region candidate, default -1 (no gate). Set to e.g. 1 to exclude MAPQ=0 multi-mappers from mate lookup. --max-mate-chr Exclude mate regions on chromosomes with ChrID > N, default 23 (through chrY; skips chrM/alt/decoy). Set to -1 for no limit (see --non-human). --non-human Remove hardcoded human genome assumptions. Currently sets --max-mate-chr -1 (allow all chroms) and samples all contigs during insert-size learning. --no-nm Skip high-NM read salvage (NM/len > 0.02). Faster: fewer reads enter r2c and correction. Trades away rare NM-only SV sensitivity. BWA-MEM tuning: --bw-op Gap-open pen, default 32 --bw-ep Gap-ext pen, default 1 --bw-mm Mismatch pen, default 18 --bw-ms Match score, default 2 --bw-zd Z-drop, default 100 --bw-bw Bandwidth, default 1000 --bw-rt Reseed trigger, default 1.5 --bw-c3 3' clip pen, default 5 --bw-c5 5' clip pen, default 5 Output & DBs: --blacklist BED of blacklisted regions --germline-sv BED of known germline SVs --dbsnp DBSNP VCF of known variants --dump-reads Emit per-read debug/visualization outputs (off by default; large output on deep samples). Four files are produced by this flag together: ${ID}.corrected.bam ${ID}.discordant.bam ${ID}.alignments.txt.gz ${ID}.r2c.txt.gz Without this flag, svaba writes the bps.txt.gz / VCF / contigs.bam / runtime.txt summaries but none of the per-read detail. Weird-reads BAM is compile-time only; see SvabaOptions.h::dump_weird_reads. --always-realign-corrected Force re-alignment of every corrected read to the reference, even if BFC didn't modify it. By default, reads whose sequence is unchanged reuse the input BAM's CIGAR/NM (valid when the BAM was aligned with BWA). Use this flag when the input was aligned with a non-BWA aligner. )" << "\n"; } SvabaOptions SvabaOptions::parse(int argc, char** argv) { static const char* shortOpts = "hv:p:a:t:n:G:k:"; static struct option longOpts[] = { {"help", no_argument, nullptr, 'h'}, {"verbose", required_argument, nullptr, 'v'}, {"threads", required_argument, nullptr, 'p'}, {"analysis-id", required_argument, nullptr, 'a'}, {"case-bam", required_argument, nullptr, 't'}, {"control-bam", required_argument, nullptr, 'n'}, {"reference-genome", required_argument, nullptr, 'G'}, {"region-file", required_argument, nullptr, 'k'}, {"single-end", no_argument, nullptr, 1001}, {"all-contigs", no_argument, nullptr, 1002}, {"discordant-only", no_argument, nullptr, 1003}, {"override-ref-check",no_argument, nullptr, 1004}, {"min-overlap", required_argument, nullptr, 1100}, {"error-rate", required_argument, nullptr, 1101}, {"rounds", required_argument, nullptr, 1102}, {"ec-type", required_argument, nullptr, 1200}, {"ec-subsample",required_argument, nullptr, 1201}, {"disc-sd", required_argument, nullptr, 1300}, {"max-cov", required_argument, nullptr, 1400}, {"mate-min", required_argument, nullptr, 1401}, {"mate-lim", required_argument, nullptr, 1402}, {"no-nm", no_argument, nullptr, 1403}, {"min-mate-mapq", required_argument, nullptr, 1404}, {"max-mate-chr", required_argument, nullptr, 1405}, {"non-human", no_argument, nullptr, 1406}, {"mate-min-count", required_argument, nullptr, 1407}, {"chunk-size", required_argument, nullptr, 1500}, {"bw-op", required_argument, nullptr, 1600}, {"bw-ep", required_argument, nullptr, 1601}, {"bw-mm", required_argument, nullptr, 1602}, {"bw-ms", required_argument, nullptr, 1603}, {"bw-zd", required_argument, nullptr, 1604}, {"bw-bw", required_argument, nullptr, 1605}, {"bw-rt", required_argument, nullptr, 1606}, {"bw-c3", required_argument, nullptr, 1607}, {"bw-c5", required_argument, nullptr, 1608}, {"blacklist", required_argument, nullptr, 1700}, {"germline-sv",required_argument, nullptr, 1701}, {"dbsnp", required_argument, nullptr, 1702}, // --dump-reads: runtime opt-in for corrected + discordant-reads BAMs. // Single flag, both side effects — see comment in SvabaOptions.h. // Weird-reads BAM is deliberately not on this flag (compile-time only). {"dump-reads", no_argument, nullptr, 1800}, {"always-realign-corrected", no_argument, nullptr, 1801}, {nullptr,0,nullptr,0} }; SvabaOptions o; int idx, c; while ((c = getopt_long(argc, argv, shortOpts, longOpts, &idx)) != -1) { switch (c) { case 'h': o.help = true; return o; case 'v': o.verbose = std::stoi(optarg); break; case 'p': o.numThreads = std::stoi(optarg); break; case 'a': o.analysisId = optarg; break; case 't': o.caseBams .push_back(optarg); break; case 'n': o.controlBams.push_back(optarg); break; case 'G': o.refGenome = optarg; break; case 'k': o.regionFile = optarg; break; case 1001: o.singleEnd = true; break; case 1002: o.allContigs = true; break; case 1003: o.discClusterOnly = true; break; case 1004: o.overrideRefCheck = true; break; case 1100: o.sgaMinOverlap = std::stoi(optarg); break; case 1101: o.sgaErrorRate = std::stof(optarg); break; case 1102: o.sgaNumRounds = std::stoi(optarg); break; case 1200: o.ecCorrectType = optarg; break; case 1201: o.ecSubsample = std::stod(optarg); break; case 1300: o.sdDiscCutoff = std::stod(optarg); break; case 1400: o.maxCov = std::stoi(optarg); break; case 1401: o.mateLookupMin = std::stoul(optarg);break; case 1402: o.mateRegionLookupLim = std::stoul(optarg); break; case 1403: o.noNmSalvage = true; break; case 1404: o.minMateMAPQ = std::stoi(optarg); break; case 1405: o.maxMateChrID = std::stoi(optarg); break; case 1406: o.nonHuman = true; break; case 1407: o.mateRegionMinCount = std::stoi(optarg); break; case 1500: o.chunkSize = std::stoi(optarg); break; case 1600: o.bwaGapOpen = std::stoi(optarg); break; case 1601: o.bwaGapExt = std::stoi(optarg); break; case 1602: o.bwaMismatch = std::stoi(optarg); break; case 1603: o.bwaMatchScore = std::stoi(optarg); break; case 1604: o.bwaZdrop = std::stoi(optarg); break; case 1605: o.bwaBandwidth = std::stoi(optarg); break; case 1606: o.bwaReseedTrigger = std::stof(optarg); break; case 1607: o.bwaClip3 = std::stoi(optarg); break; case 1608: o.bwaClip5 = std::stoi(optarg); break; case 1700: o.blacklistFile.push_back(optarg); break; case 1701: o.germlineSvFile = optarg; break; case 1702: o.dbsnpVcf = optarg; break; // --dump-reads is the single runtime knob for all per-read detail // outputs. Flip all three flags together here; any call-site // reading these fields after parse() sees a consistent state. // See SvabaOptions.h for the comment on why these are separate // fields instead of a single bool. case 1800: o.dump_discordant_reads = true; o.dump_corrected_reads = true; o.dump_alignments = true; break; case 1801: o.alwaysRealignCorrected = true; break; case '?': default: throw std::runtime_error("Unknown or malformed option; see --help"); } } // --non-human: remove human-specific assumptions if (o.nonHuman) { o.maxMateChrID = -1; // allow all chromosomes for mate lookup } // post validation if (argc == 1) { o.help = true; } else if (!o.help) { if (o.caseBams.empty()) throw std::runtime_error("Need at least one --case-bam"); if (o.refGenome.empty()) throw std::runtime_error("Must supply --reference-genome"); if (o.analysisId.empty()) o.analysisId = "no_id"; if (o.chunkSize <= 0) o.chunkSize = 25000; } // make the bam map from the file names int tumorIdx = 1; for (const auto& path : o.caseBams) { std::ostringstream ss; ss << 't' << std::setw(3) << std::setfill('0') << tumorIdx++; o.bams[ ss.str() ] = path; } int normalIdx = 1; for (const auto& path : o.controlBams) { std::ostringstream ss; ss << 'n' << std::setw(3) << std::setfill('0') << normalIdx++; o.bams[ ss.str() ] = path; } // set the rules to skip read learning if doing stdin // if (o.bams["t001"] == "-" && !o.rulesJson.empty()) o.rulesJson = R"json( { "global": { "duplicate": false, "qcfail": false }, "": { "rules": [ { "rr": true }, { "ff": true }, { "rf": true }, { "ic": true }, { "clip": 5, "length": 30 }, { "ins": true }, { "del": true }, { "mapped": true, "mate_mapped": false }, { "mate_mapped": true, "mapped": false } ] } } )json"; // if read stream, treat as single-end if (o.bams["t001"] == "-") o.singleEnd = true; // set the "main bam" o.main_bam = o.bams["t001"]; return o; } void SvabaOptions::printLogger(SvabaLogger& logger) const { logger.log(verbose > 1, true, "***************************** PARAMS ****************************"); logger.log(verbose > 1, true, " DBSNP Database file: ", dbsnpVcf); logger.log(verbose > 1, true, " Max cov to assemble: ", maxCov); logger.log(verbose > 1, true, " Error correction mode: ", ecCorrectType); logger.log(verbose > 1, true, " Subsample-rate for correction learning: ", ecSubsample); logger.log(verbose > 1, true, " Assembler: ", svaba::kAssemblerName); #if !SVABA_ASSEMBLER_FERMI // SGA-only parameters; don't confuse fermi-build operators with // values they can't tune without recompiling. logger.log(verbose > 1, true, " ErrorRate (SGA): ", (sgaErrorRate < 0.001f ? std::string("EXACT (0)") : std::to_string(sgaErrorRate))); logger.log(verbose > 1, true, " Num assembly rounds (SGA): ", sgaNumRounds); #endif logger.log(verbose > 1, true, " Discordant SD cutoff (tumor): ", sdDiscCutoff); logger.log(verbose > 1, true, " Discordant SD cutoff (normal): ", sdDiscCutoffNormal); logger.log(verbose > 1, true, " Minimum number of reads for mate lookup: ", mateLookupMin); logger.log(verbose > 1, true, " Min reads to form candidate mate region: ", mateRegionMinCount); logger.log(verbose > 1, true, " Min MAPQ for mate region candidate: ", minMateMAPQ, (minMateMAPQ < 0 ? " (no gate)" : "")); logger.log(verbose > 1, true, " Max ChrID for mate region: ", maxMateChrID, (maxMateChrID < 0 ? " (no limit)" : "")); if (nonHuman) logger.log(true, true, " Non-human genome mode: chromosome gates disabled"); logger.log(verbose > 1, true, " LOD cutoff (non-REF): ", lod); logger.log(verbose > 1, true, " LOD cutoff (non-REF, at DBSNP): ", lodDb); logger.log(verbose > 1, true, " LOD somatic cutoff: ", lodSomatic); logger.log(verbose > 1, true, " LOD somatic cutoff (at DBSNP): ", lodSomaticDb); logger.log(verbose > 1, true, " BWA-MEM params:"); logger.log(verbose > 1, true, " Gap open penalty: ", bwaGapOpen); logger.log(verbose > 1, true, " Gap extension penalty: ", bwaGapExt); logger.log(verbose > 1, true, " Mismatch penalty: ", bwaMismatch); logger.log(verbose > 1, true, " Sequence match score: ", bwaMatchScore); logger.log(verbose > 1, true, " Z-dropoff: ", bwaZdrop); logger.log(verbose > 1, true, " Alignment bandwidth: ", bwaBandwidth); logger.log(verbose > 1, true, " Clip 3 penalty: ", bwaClip3); logger.log(verbose > 1, true, " Clip 5 penalty: ", bwaClip5); logger.log(verbose > 1, true, " Reseed trigger: ", bwaReseedTrigger); if (discClusterOnly) { logger.log(true, true, " ######## ONLY DISCORDANT READ CLUSTERING. NO ASSEMBLY ##############"); } } ================================================ FILE: src/svaba/SvabaOptions.h ================================================ #pragma once #include #include #include #include // version & date // // Bumped to 2.0.0 to mark the SvABA2.0 overhaul: v3 bps.txt schema with // per-BP bp_id (col 52), r2c.txt.gz structured r2c emission replacing the // old alignments.txt.gz, comparative split-coverage gate, standalone // `svaba tovcf` + `svaba postprocess` subcommands, VCFv4.5 output, and // fermi-lite as the default local-assembly engine. See CLAUDE.md for the // full set of changes. inline constexpr char SVABA_VERSION[] = "2.0.0"; inline constexpr char SVABA_DATE[] = "04/2026"; // from AlignmentFragment.h inline constexpr std::size_t MAX_CONTIG_SIZE = 5'000'000; // from run_svaba.cpp inline constexpr int MIN_CLIP_FOR_LOCAL = 40; inline constexpr int MAX_NM_FOR_LOCAL = 10; // from BreakPoint inline constexpr double MAX_ERROR = 0.08; // for very repetitive regions, what is the maximum expected error rate for an indel inline constexpr double MIN_ERROR = 0.0005; inline constexpr int T_SPLIT_BUFF = 5; inline constexpr int N_SPLIT_BUFF = 5; inline constexpr int INSERT_SIZE_TOO_BIG_SPAN_READS = 16; // (Removed in SvABA2.0) R2C_MAX_NONEDGE_SOFTCLIP_{TUMOR,NORMAL} — // replaced by the principled per-read score comparison gate in // BreakPoint::splitCoverage(). See svaba::readAlignmentScore() in // ContigAlignmentScore.h: a read is now credited as a variant supporter // only when its r2c alignment scores strictly higher than its native // read-to-reference alignment, which subsumes both the interior-clip // rejection and the duplicated-reference equally-clean case. // SvABA2.0 (v3): r2c-better-than-native gate. A read is credited as a // split-supporter iff r2c_score > native_score (strict greater-than). // Ties don't credit the read — if the contig provides no better // explanation than the native alignment, the read is not evidence for // the variant. // // v3 originally used a per-sample percentage margin (10% for tumor, // 0% for normal) to filter junction-homology borderline cases on the // tumor side. v3.1 removed the margin entirely: // // - The 10% margin was read-length-dependent and mathematically // impossible to clear for small indels (a 1bp del on a 150bp read // gives only 4.9% improvement; on a 250bp read only 2.9%). // - Junction-homology cases where r2c barely beats native by 1-2 // points: normal already credits these reads (margin was always 0 // for normal). If both samples credit borderline reads equally, // the downstream LOD model sees similar split support in both → // low somlod → correctly not called somatic. The somatic/germline // distinction is the LOD model's job, not the split-coverage gate's. // - The margin was belt-and-suspenders with a worse failure mode // (killing real small indels) than the problem it prevented. // // This replaces the older both_split / one_split / homlen branching // gate — when junction homology is on the order of the read length, // r2c and native tie and such reads fall out naturally via the strict > // comparison, which is the correct conservative behavior. inline constexpr double T_R2C_MIN_MARGIN = 0.0; inline constexpr double N_R2C_MIN_MARGIN = 0.0; // --------------------------------------------------------------------------- // SVABA_R2C_NATIVE_GATE — compile-time kill-switch for the r2c-vs-native // alignment-score split-coverage gate in BreakPoint::splitCoverage. // // 1 (default) — gate enabled. Correct, recommended. Each candidate // split-supporting read is scored against both its r2c // alignment and its native (read→reference) alignment, // and must win by the per-sample-prefix margin above // (T_R2C_MIN_MARGIN / N_R2C_MIN_MARGIN). Fixes the // long-homology false-positive somatic bug. // // 0 (opt-in) — gate disabled. Falls back to counting any r2c-spanning // read as a split supporter regardless of how it // compares to the native alignment. Reintroduces the // homology-trap bug (long junction homology + clean // normal-side reads → spurious somatic calls), so do // NOT use for real calling. Provided solely to isolate // the CPU cost of native_score computation on dense // contigs — flip to 0, rebuild, time a reference // region. Delta vs default-build tells you what the // gate costs. // // Build with: // cmake .. -DCMAKE_CXX_FLAGS='-DSVABA_R2C_NATIVE_GATE=0' // --------------------------------------------------------------------------- #ifndef SVABA_R2C_NATIVE_GATE #define SVABA_R2C_NATIVE_GATE 1 #endif inline constexpr int HOMOLOGY_FACTOR = 4; inline constexpr int MIN_SOMATIC_RATIO = 15; inline constexpr int COVERAGE_AVG_BUFF = 10; // from DiscordantCluster inline constexpr int DISC_PAD = 150; inline constexpr int MIN_PER_CLUST = 3; inline constexpr int DEFAULT_ISIZE_THRESHOLD = 2000; // from run_svaba inline constexpr std::size_t THREAD_READ_LIMIT = 20'000; inline constexpr int THREAD_CONTIG_LIMIT = 5'000; // from svabaAssemblerEngine inline constexpr std::size_t MAX_OVERLAPS_PER_ASSEMBLY = 20'000; inline constexpr int MIN_CONTIG_MATCH = 35; inline constexpr int MATE_LOOKUP_MIN = 3; inline constexpr int SECONDARY_CAP = 10; inline constexpr int MAX_MATE_ROUNDS = 1; inline constexpr std::size_t MAX_NUM_MATE_WINDOWS = 50'000'000; inline constexpr int GERMLINE_CNV_PAD = 10; inline constexpr int GET_MATES = 1; inline constexpr int LARGE_INTRA_LOOKUP_LIMIT = 50'000; inline constexpr double SECONDARY_FRAC = 0.90; // from svabaBamWalker — mate-region lookup // // A discordant read contributes its mate locus as a candidate mate region // iff its own MAPQ >= MIN_MATE_MAPQ AND the mate locus is on a chromosome // with ChrID <= MAX_MATE_CHR_ID (set to -1 to disable the chromosome // gate, e.g. for non-human genomes; default 23 = through chrY). After // candidate regions are merged, // a region must have >= MATE_REGION_MIN_COUNT supporting reads to survive // the initial BamWalker filter, and then >= mateLookupMin (runtime option, // default MATE_LOOKUP_MIN=3) to trigger the actual somatic mate lookup // in SvabaRegionProcessor. // // Defaults: // MIN_MATE_MAPQ = -1 (no MAPQ gate; any mapped read qualifies) // MAX_MATE_CHR_ID = 23 (skip chrM/alt/decoy in human; -1 = no limit) // 0-indexed: 0=chr1 .. 21=chr22, 22=chrX, 23=chrY // MATE_REGION_MIN_COUNT = 2 (at least 2 reads to form a candidate) // MATE_REGION_PAD = 250 (bp padding on each side of mate locus) inline constexpr int MIN_MATE_MAPQ = -1; inline constexpr int MAX_MATE_CHR_ID = 23; inline constexpr int MATE_REGION_MIN_COUNT = 2; inline constexpr int MATE_REGION_PAD = 250; // from svabaBamWalker — other inline constexpr int MIN_DSCRD_READS_DSCRD_ONLY = 6; inline constexpr int MIN_ISIZE_FOR_DISCORDANT_REALIGNMENT = 1'000; inline constexpr int DISC_REALIGN_MATE_PAD = 100; inline constexpr int MAX_SECONDARY_HIT_DISC = 10; // coverage buffer inline constexpr int INFORMATIVE_COVERAGE_BUFFER = 0; // from vcf inline constexpr int VCF_SECONDARY_CAP = 200; inline constexpr int SOMATIC_LOD = 1; inline constexpr int DEDUPEPAD = 200; class SvabaLogger; class SvabaOptions { public: // high-level flags bool help = false; int verbose = 0; int numThreads = 1; std::string analysisId; bool hp = false; int perRgLearnLimit = 1'000; size_t weird_read_limit = 15'000; size_t mate_region_lookup_limit = 5'000; // dumping // // weird reads: compile-time-only toggle. Flip this to `true` here and // rebuild if you really want the weird-reads BAM. Deliberately NOT // exposed on the CLI — it's a large, niche output mostly used for // debugging the read-collection phase, not for routine runs. static constexpr bool dump_weird_reads = false; // All three below are opt-in at runtime via a single --dump-reads flag. // Default off so routine runs don't pay the (substantial) I/O and disk // cost of emitting this per-read detail on deep samples: // // dump_discordant_reads -> ${ID}.discordant.bam // dump_corrected_reads -> ${ID}.corrected.bam // dump_alignments -> ${ID}.alignments.txt.gz // -> ${ID}.r2c.txt.gz // // All three flip together under --dump-reads. The fields are kept // separate so an individual callsite can still key off its own narrow // concern (e.g. SvabaOutputWriter gates the alignments file streams on // dump_alignments only), but there is intentionally no way to toggle // them individually at runtime — that would bloat the CLI surface // without serving a real workflow. bool dump_discordant_reads = false; bool dump_corrected_reads = false; bool dump_alignments = false; // inputs std::vector caseBams; std::vector controlBams; std::string refGenome; std::string regionFile; // make the log verbose, but will invoke a lot of mutex locks bool verbose_log = false; int windowpad = 500; std::string main_bam; // mode flags bool singleEnd = false; bool allContigs = false; bool discClusterOnly = false; bool overrideRefCheck = false; // numeric thresholds double sdDiscCutoff = 3.92; // SD multiplier for tumor discordant cutoff double sdDiscCutoffNormal = 3.60; // SD multiplier for normal (lower = more sensitive) int chunkSize = 25000; int32_t maxReadsPerAssem = -1; // this is site-level Log-odds cutoff for PASS that is variant double lod = 1.0; //8.0; // this is site-level Log-odds cuttof for PASS that is variant, if also has supporting DBSNP site double lodDb = 1.0; //6.0; // this is log-odds that this is REF in the "worst" normal (the one with the most potential alt reads) double lodSomatic = 0.0; //6.0; // same, but be more strict if this somatic variant overlaps a dbsnp site double lodSomaticDb = 2.0; // 10.0; int maxCov = 100; // SGA / assembly int sgaMinOverlap = 0; float sgaErrorRate = 0.0f; int sgaNumRounds = 3; // error correction std::string ecCorrectType = "f"; //s, f, or 0 double ecSubsample = 0.50; // BWA-MEM tuning int bwaGapOpen = 32; int bwaGapExt = 1; int bwaMismatch = 18; int bwaMatchScore = 2; int bwaZdrop = 100; int bwaBandwidth = 1000; float bwaReseedTrigger = 1.5f; int bwaClip3 = 5; int bwaClip5 = 5; // filtering std::string rulesJson; size_t mateLookupMin = MATE_LOOKUP_MIN; size_t mateRegionLookupLim = 400; bool noBadAvoid = true; // Mate-region lookup tuning (runtime overrides for compile-time defaults) int minMateMAPQ = MIN_MATE_MAPQ; // --min-mate-mapq int maxMateChrID = MAX_MATE_CHR_ID; // --max-mate-chr (or -1 via --non-human) int mateRegionMinCount = MATE_REGION_MIN_COUNT; // --mate-min-count // Non-human genome mode: removes all hardcoded human chromosome // assumptions (currently just the mate-lookup ChrID > 23 gate and // the LearnBamParams chr1-chrY sampling preference). // Sets maxMateChrID = -1 (no limit) and logs a banner. bool nonHuman = false; // When true, skip the high-NM salvage path that pulls in reads with // NM/len > 0.02 even when they don't pass the normal weird-read rules. // Those reads are useful for catching NM-only SVs (no clips/discordance) // but substantially increase read count and r2c cost. --no-nm disables // the path entirely for maximum efficiency. bool noNmSalvage = false; // When false (default), reads whose corrected sequence matches the // original BAM sequence reuse the input BAM's CIGAR/NM for the // native-vs-r2c gate in splitCoverage, skipping the expensive // full-reference BWA re-alignment. This is correct when the input // BAM was aligned with BWA-MEM (same scoring model as svaba's // internal aligner). When the input BAM was aligned with a // different aligner (e.g. bowtie2, STAR, minimap2), the native // CIGAR/NM may not be comparable — set this to true to force // re-alignment of every corrected read against the reference. bool alwaysRealignCorrected = false; // external DBs std::vector blacklistFile; std::string germlineSvFile; std::string dbsnpVcf; // BAM map (idpath) // e.g. t001, /path/to/ std::map bams; // ---------------------------------------------------- // Print help/usage static void printUsage(); void printLogger(SvabaLogger& logger) const; // Parse argc/argv into an SvabaOptions; throws on error static SvabaOptions parse(int argc, char** argv); }; ================================================ FILE: src/svaba/SvabaOutputWriter.cpp ================================================ // svabaOutputWriter.cpp #include "SvabaOutputWriter.h" #include "SvabaThreadUnit.h" #include "SvabaUtils.h" #include "BreakPoint.h" #include "DiscordantCluster.h" #include "SvabaSharedConfig.h" #include #include using namespace std; namespace { // one mutex to serialize ALL threads writes static mutex writeMutex_; } // Build a new BamHeader that prepends an @HD line (with the given sort order) // to the @SQ block of `src`. Avoids SeqLib::BamHeader::AsString(), which // blindly dereferences h->text; in modern htslib that field is lazy and is // often NULL until sam_hdr_str() materializes it, causing a segfault. static SeqLib::BamHeader make_header_with_hd(const SeqLib::BamHeader& src, const std::string& so) { std::string txt = "@HD\tVN:1.6\tSO:" + so + "\n"; const bam_hdr_t* h = src.get(); if (h) { // sam_hdr_str forces htslib to regenerate the textual form from its // internal representation and caches it in h->text. const char* cur = sam_hdr_str(const_cast(h)); if (cur) txt += cur; } return SeqLib::BamHeader(txt); } SvabaOutputWriter::SvabaOutputWriter(SvabaLogger& logger_, SvabaOptions& opts_) : logger(logger_), opts(opts_) { } // init(): call once, from run_svaba.cpp immediately after you've parsed // your opts and before you shoot off any threads. void SvabaOutputWriter::init(const string& analysis_id, const SeqLib::BamHeader& b_header) { // keep a local reference to the header bam_header_ = b_header; // open our gzipped text outputs // // Per-thread r2c.txt.gz streams are opened by svabaThreadUnit itself // (see its ctor) — nothing to open here for that output. What's left // on this shared-writer path is only the small coordination outputs // where mutex contention is a non-issue. svabaUtils::fopen(analysis_id + ".bps.txt.gz", os_allbps_); svabaUtils::fopen(analysis_id + ".discordant.txt.gz", os_discordant_); svabaUtils::fopen(analysis_id + ".runtime.txt", os_runtime_); // write the header line for breakpoints file: os_allbps_ << BreakPoint::header(); for (auto &p : opts.bams) os_allbps_ << "\t" << p.first << "_" << p.second; os_allbps_ << "\n"; // write the header line for runtime file os_runtime_ << svabaUtils::svabaTimer::header << "\n"; // write the header line for discordant clusters: os_discordant_ << DiscordantCluster::header() << "\n"; // BAM output for aligned contigs std::string aligned_contigs_bam_path = analysis_id; aligned_contigs_bam_path.append(".contigs.bam"); b_contig_writer_ = SeqLib::BamWriter(SeqLib::BAM); auto hdr_unsorted = make_header_with_hd(b_header, "unsorted"); b_contig_writer_.SetHeader(hdr_unsorted); if (!b_contig_writer_.Open(aligned_contigs_bam_path)) { std::cerr << "ERROR: could not open aligned contig writer " << aligned_contigs_bam_path << std::endl; exit(EXIT_FAILURE); } b_contig_writer_.WriteHeader(); } void SvabaOutputWriter::writeUnit(svabaThreadUnit& unit, SvabaSharedConfig& sc) { // SvABA2.0: stamp a comma-joined aux tag on any record whose // UniqueName (svabaRead) or Qname (bwa-aligned corrected record) // appears in one of the thread-unit maps. The svabaRead pointer // path already tagged weird/discordant records during the r2c and // BP-finalization passes, but the corrected records are newly- // aligned by bwa and need tagging here. We apply uniformly so the // tag is present in every tagged BAM. // // bi:Z — bp_ids of variants this read supports as ALT (subset, // v3 — pre-v3 this was cnames; switched to bp_ids so the // tag matches the per-BP resolution of r2c.txt.gz's // split_bps / disc_bps columns and bps.txt.gz's col 52 // bp_id. `samtools view | grep bi:Z:` pulls the // ALT-supporters for exactly that variant row.) // bz:Z — cnames of contigs this read r2c'd to (superset; the // contig-level grouping key. A read may r2c to a contig // yet not support any of its BPs.) // // A read can appear in both maps at the same time (every // ALT-supporter has an r2c alignment to its contig). The two // tags use different identifier namespaces now: bp_id for bi:Z, // cname for bz:Z. Join back to bps.txt.gz via col 30 (cname) or // col 52 (bp_id) as appropriate. auto stamp_tag = [&](auto& rec, const char* tag, const std::unordered_map& m, const std::string& key) { auto it = m.find(key); if (it == m.end() || it->second.empty()) return; std::string cur; rec.GetZTag(tag, cur); const std::string& to_add = it->second; if (cur.empty()) { rec.AddZTag(tag, to_add); return; } // boundary-aware merge/dedupe std::string merged = cur; size_t s = 0; while (s <= to_add.size()) { size_t e = to_add.find(',', s); if (e == std::string::npos) e = to_add.size(); std::string tok = to_add.substr(s, e - s); if (!tok.empty()) { bool present = false; size_t pos = 0; while ((pos = merged.find(tok, pos)) != std::string::npos) { const bool left_ok = (pos == 0) || merged[pos-1] == ','; const bool right_ok = (pos + tok.size() == merged.size()) || merged[pos + tok.size()] == ','; if (left_ok && right_ok) { present = true; break; } pos += tok.size(); } if (!present) merged += "," + tok; } if (e == to_add.size()) break; s = e + 1; } if (merged != cur) { rec.RemoveTag(tag); rec.AddZTag(tag, merged); } }; auto stamp_bi = [&](auto& rec, const std::string& key) { stamp_tag(rec, "bi", unit.alt_bp_ids_by_name, key); }; auto stamp_bz = [&](auto& rec, const std::string& key) { stamp_tag(rec, "bz", unit.all_cnames_by_name, key); }; // write the weird reads if (sc.opts.dump_weird_reads) { auto it = unit.writers.find("w"); if (it == unit.writers.end()) { std::cerr << " BAM writer for weird reads not found" << std::endl; exit(EXIT_FAILURE); } for (const auto& r : unit.all_weird_reads) { // stamp bi:Z / bz:Z BEFORE SetQname, while UniqueName is still // the map key we indexed under stamp_bi(*r, r->UniqueName()); stamp_bz(*r, r->UniqueName()); // switch out the qname so it indicates also which BAM it was from r->SetQname(r->UniqueName()); r->RemoveTag("RG"); r->RemoveTag("PG"); bool ok = it->second->WriteRecord(*r); if (!ok) std::cerr << "...unable to write weird read record" << std::endl; } } // write the discordant reads if (sc.opts.dump_discordant_reads) { auto it = unit.writers.find("d"); if (it == unit.writers.end()) { std::cerr << " BAM writer for discordant reads not found" << std::endl; } for (const auto& r : unit.all_weird_reads) { if (r->dd > 0) { // stamp bi:Z / bz:Z before qname mangling stamp_bi(*r, r->UniqueName()); stamp_bz(*r, r->UniqueName()); // switch out the qname so it indicates also which BAM it was from r->SetQname(r->UniqueName()); // write it r->RemoveTag("RG"); r->RemoveTag("PG"); bool ok = it->second->WriteRecord(*r); if (!ok) std::cerr << "...unable to write discordant read record" << std::endl; } } } // write the corrected reads if (sc.opts.dump_corrected_reads) { auto it = unit.writers.find("c"); if (it == unit.writers.end()) { std::cerr << " read found with prefix " << " c " << " that is not in the weird read writers\n"; exit(EXIT_FAILURE); } for (const auto& r : unit.all_corrected_reads) { // corrected records are bwa-aligned BamRecords whose Qname was // set to the original svabaRead UniqueName at alignSequence() // time. That's the key both maps are indexed by. stamp_bi(*r, r->Qname()); stamp_bz(*r, r->Qname()); r->RemoveTag("RG"); r->RemoveTag("PG"); bool ok = it->second->WriteRecord(*r); if (!ok) std::cerr << "...unable to write corrected read record" << std::endl; } } // SvABA2.0: per-thread r2c.txt.gz write path. // // Happens BEFORE writeMutex_ is acquired because unit.r2c_out_ is a // thread-local gzip stream (not shared across threads) — no coordination // needed, and keeping the gzip deflate out from under the shared mutex // lets all 16 threads compress in parallel, which is the whole point of // the per-thread split (see CLAUDE.md for the full rationale). Mirrors // the per-thread BAM writes above, which also run outside the lock. // // Gated on opts.dump_alignments (--dump-reads) — without it no stream // was opened and we skip both the serialization and the write. if (opts.dump_alignments) { for (const auto& alc : unit.master_alc) { if (alc.hasVariant()) { // printToR2CTsv emits a contig row followed by one row per // r2c-aligned read (already newline-terminated internally), // so no trailing newline here. // r2c_out_ is unique_ptr, so dereference. It's non-null // here because opts.dump_alignments implies ctor already allocated. *unit.r2c_out_ << alc.printToR2CTsv(bam_header_); } } } lock_guard guard(writeMutex_); // lock the shared writers sc.total_regions_done += unit.processed_since_memory_dump; unit.processed_since_memory_dump = 0; // discordant clusters // hardcoding "false" for readtracking for simplicity for (const auto& kv : unit.m_disc) { const auto& dc = kv.second; if (dc.valid()) os_discordant_ << dc.toFileString(bam_header_, false) << "\n"; } // write contig alignments to BAM for (auto& i : unit.master_contigs) { bool ok = b_contig_writer_.WriteRecord(*i); assert(ok); } // breakpoints for (auto& bp : unit.m_bps) { if ( bp->hasMinimal() ) // && (bp.confidence != "NOLOCAL" || bp.complex_local) ) { os_allbps_ << bp->toFileString(sc.header) << "\n"; } } // discordant reads //std::cerr << " DC " << unit.all_discordant_reads.size() << std::endl; // if (opts.dump_discordant_reads) { // for (const auto& r : unit.all_discordant_reads) { // bool ok = b_discordant_read_writer_.WriteRecord(*r); // assert(ok); // } // } // weird reads // if (opts.dump_weird_reads) { // for (const auto& r : unit.all_weird_reads) { // bool ok = b_weird_read_writer_.WriteRecord(*r); // assert(ok); // } // } // // corrected reads // if (opts.dump_corrected_reads) { // for (const auto& r : unit.all_corrected_reads) { // bool ok = b_corrected_read_writer_.WriteRecord(*r); // assert(ok); // } // } // runtime os_runtime_ << unit.ss.str(); } void SvabaOutputWriter::close() { // SvABA2.0: alignments.txt.gz is gone entirely; r2c.txt.gz is per-thread // (closed in svabaThreadUnit's destructor). Nothing to close here for // those outputs. os_allbps_.close(); os_discordant_.close(); // if (opts.dump_discordant_reads) { // if (!b_discordant_read_writer_.Close()) { // std::cerr << "Unable to close discordant read writer" << std::endl; // } // } // if (opts.dump_weird_reads) { // if (!b_weird_read_writer_.Close()) { // std::cerr << "Unable to close weird read writer" << std::endl; // } // } // if (opts.dump_corrected_reads) { // if (!b_corrected_read_writer_.Close()) { // std::cerr << "Unable to close corrected read writer" << std::endl; // } // } if (!b_contig_writer_.Close()) { std::cerr << "Unable to close contigs bam writer" << std::endl; } } ================================================ FILE: src/svaba/SvabaOutputWriter.h ================================================ // svabaOutputWriter.h #pragma once #include #include #include #include "SvabaThreadUnit.h" #include "SeqLib/BamWriter.h" #include "gzstream.h" #include "SvabaLogger.h" #include "SvabaOptions.h" using std::ofstream; struct SvabaSharedConfig; struct SvabaOutputWriter { public: SvabaOutputWriter(SvabaLogger& logger_, SvabaOptions& opts_); // call this once at startup: void init(const std::string& analysis_id, const SeqLib::BamHeader& b_header); // call this from any thread under a lock: void writeUnit(svabaThreadUnit& unit, SvabaSharedConfig& sc); void close(); private: SvabaLogger& logger; SvabaOptions& opts; // SvABA2.0: alignments.txt.gz (pre-rendered ASCII) and the shared // r2c.txt.gz stream used to live here. Both are gone: // - alignments.txt.gz is removed entirely; its re-plot-able successor // is r2c.txt.gz (AlignedContig::printToR2CTsv + r2cTsvHeader). // - r2c.txt.gz is now emitted per-thread by svabaThreadUnit::r2c_out_ // and merged at postprocess time (gzip is concatenation-safe). // The remaining shared streams below are small enough that mutex // contention isn't measurable (bps + cluster-level discordant + // runtime are KB-MB per run). ogzstream os_allbps_; ogzstream os_discordant_; ofstream os_runtime_; SeqLib::BamWriter b_contig_writer_; SeqLib::BamWriter b_weird_read_writer_; SeqLib::BamWriter b_discordant_read_writer_; SeqLib::BamWriter b_corrected_read_writer_; SeqLib::BamHeader bam_header_; bool disc_cluster_only_ = false; }; ================================================ FILE: src/svaba/SvabaOverlapAlgorithm.cpp ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // This has been modified (slightly) for svaba #include "SvabaOverlapAlgorithm.h" #include "ASQG.h" #include // Collect the complete set of overlaps in pOBOut static const AlignFlags sufPreAF(false, false, false); static const AlignFlags prePreAF(false, true, true); static const AlignFlags sufSufAF(true, false, true); static const AlignFlags preSufAF(true, true, false); //#define DEBUGOVERLAP 2 // Perform the overlap OverlapResult svabaOverlapAlgorithm::overlapRead(const SeqRecord& read, int minOverlap, OverlapBlockList* pOutList) const { OverlapResult r; if(static_cast(read.seq.length()) < minOverlap) return r; if(!m_exactModeOverlap) r = overlapReadInexact(read, minOverlap, pOutList); else r = overlapReadExact(read, minOverlap, pOutList); return r; } // OverlapResult svabaOverlapAlgorithm::overlapReadInexact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const { OverlapResult result; OverlapBlockList obWorkingList; std::string seq = read.seq.toString(); #ifdef DEBUGOVERLAP std::cout << "\n\n***Overlapping read " << read.id << " suffix\n"; std::cout << "***Overlapping seq " << read.seq.toString() << " suffix\n"; #endif // Match the suffix of seq to prefixes // findInexact returns false is the maximum search time was exceeded. In this // case we dont run any of the subsequent commands and return no overlaps. bool valid = true; valid = findOverlapBlocksInexact(seq, m_pBWT, m_pRevBWT, sufPreAF, minOverlap, &obWorkingList, pOBOut, result); #ifdef DEBUGOR size_t block_size = pOBOut->size(); if (block_size != pOBOut->size()) { align1 = true; std::cout << "1";//<< std::endl; block_size = pOBOut->size(); } #endif if(valid) valid = findOverlapBlocksInexact(complement(seq), m_pRevBWT, m_pBWT, prePreAF, minOverlap, &obWorkingList, pOBOut, result); #ifdef DEBUGOR if (block_size != pOBOut->size()) { std::cout << "2";// << std::endl; block_size = pOBOut->size(); } #endif #ifdef DEBUGOVERLAP std::cout << "WORKING OverlapBlockList Length SUFFIX: " << obWorkingList.size() << " VALID " << valid << std::endl; #endif if(valid) { if(m_bIrreducible) { computeIrreducibleBlocks(m_pBWT, m_pRevBWT, &obWorkingList, pOBOut); obWorkingList.clear(); } else { pOBOut->splice(pOBOut->end(), obWorkingList); assert(obWorkingList.empty()); } } #ifdef DEBUGOVERLAP std::cout << "\n\n***Overlapping read " << read.id << " prefix\n"; #endif // Match the prefix of seq to suffixes if(valid) valid = findOverlapBlocksInexact(reverseComplement(seq), m_pBWT, m_pRevBWT, sufSufAF, minOverlap, &obWorkingList, pOBOut, result); #ifdef DEBUGOR if (block_size != pOBOut->size()) { std::cout << "3";// << std::endl; block_size = pOBOut->size(); } #endif if(valid) valid = findOverlapBlocksInexact(reverse(seq), m_pRevBWT, m_pBWT, preSufAF, minOverlap, &obWorkingList, pOBOut, result); #ifdef DEBUGOR if (block_size != pOBOut->size()) { std::cout << "4";// << std::endl; block_size = pOBOut->size(); } std::cout<splice(pOBOut->end(), obWorkingList); assert(obWorkingList.empty()); } } if(!valid) { pOBOut->clear(); result.isSubstring = false; result.searchAborted = true; return result; } #ifdef DEBUGOVERLAP unsigned N = 1; if (pOBOut->size() > N) { std::cout << read.id << " OverlapBlockList Length: " << pOBOut->size() << std::endl; std::list::iterator it = pOBOut->begin(); std::advance(it, N); //std::cout << "Olen: " << it->overlapLen << " numDiff: " << it->numDiff << std::endl; std::cout << " BWT1L: " << it->ranges.interval[0].lower; std::cout << " BWT1U: " << it->ranges.interval[0].upper; std::cout << " BWT2L: " << it->ranges.interval[1].lower; std::cout << " BWT2U: " << it->ranges.interval[1].upper; std::cout << " RBWT1L: " << it->rawRanges.interval[0].lower; std::cout << " RBWT1U: " << it->rawRanges.interval[0].upper; std::cout << " RBWT2L: " << it->rawRanges.interval[1].lower; std::cout << " RBWT2U: " << it->rawRanges.interval[1].upper << std::endl; } #endif return result; } // OverlapResult svabaOverlapAlgorithm::alignReadDuplicate(const SeqRecord& read, OverlapBlockList* pOBOut) const { OverlapResult result; OverlapBlockList obWorkingList; std::string seq = read.seq.toString(); int readLength = seq.length(); findOverlapBlocksInexact(seq, m_pBWT, m_pRevBWT, sufPreAF, readLength, &obWorkingList, pOBOut, result); findOverlapBlocksInexact(complement(seq), m_pRevBWT, m_pBWT, prePreAF, readLength, &obWorkingList, pOBOut, result); return result; } // Construct the set of blocks describing irreducible overlaps with READ // and write the blocks to pOBOut OverlapResult svabaOverlapAlgorithm::overlapReadExact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const { OverlapResult result; // The complete set of overlap blocks are collected in obWorkingList // The filtered set (containing only irreducible overlaps) are placed into pOBOut // by calculateIrreducibleHits OverlapBlockList obWorkingList; std::string seq = read.seq.toString(); // We store the various overlap blocks using a number of lists, one for the containments // in the forward and reverse index and one for each set of overlap blocks OverlapBlockList oblFwdContain; OverlapBlockList oblRevContain; OverlapBlockList oblSuffixFwd; OverlapBlockList oblSuffixRev; OverlapBlockList oblPrefixFwd; OverlapBlockList oblPrefixRev; // Match the suffix of seq to prefixes findOverlapBlocksExact(seq, m_pBWT, m_pRevBWT, sufPreAF, minOverlap, &oblSuffixFwd, &oblFwdContain, result); findOverlapBlocksExact(complement(seq), m_pRevBWT, m_pBWT, prePreAF, minOverlap, &oblSuffixRev, &oblRevContain, result); // Match the prefix of seq to suffixes findOverlapBlocksExact(reverseComplement(seq), m_pBWT, m_pRevBWT, sufSufAF, minOverlap, &oblPrefixFwd, &oblFwdContain, result); findOverlapBlocksExact(reverse(seq), m_pRevBWT, m_pBWT, preSufAF, minOverlap, &oblPrefixRev, &oblRevContain, result); // Remove submaximal blocks for each block list including fully contained blocks // Copy the containment blocks into the prefix/suffix lists oblSuffixFwd.insert(oblSuffixFwd.end(), oblFwdContain.begin(), oblFwdContain.end()); oblPrefixFwd.insert(oblPrefixFwd.end(), oblFwdContain.begin(), oblFwdContain.end()); oblSuffixRev.insert(oblSuffixRev.end(), oblRevContain.begin(), oblRevContain.end()); oblPrefixRev.insert(oblPrefixRev.end(), oblRevContain.begin(), oblRevContain.end()); // Perform the submaximal filter removeSubMaximalBlocks(&oblSuffixFwd, m_pBWT, m_pRevBWT); removeSubMaximalBlocks(&oblPrefixFwd, m_pBWT, m_pRevBWT); removeSubMaximalBlocks(&oblSuffixRev, m_pRevBWT, m_pBWT); removeSubMaximalBlocks(&oblPrefixRev, m_pRevBWT, m_pBWT); // Remove the contain blocks from the suffix/prefix lists removeContainmentBlocks(seq.length(), &oblSuffixFwd); removeContainmentBlocks(seq.length(), &oblPrefixFwd); removeContainmentBlocks(seq.length(), &oblSuffixRev); removeContainmentBlocks(seq.length(), &oblPrefixRev); // Join the suffix and prefix lists oblSuffixFwd.splice(oblSuffixFwd.end(), oblSuffixRev); oblPrefixFwd.splice(oblPrefixFwd.end(), oblPrefixRev); // Move the containments to the output list pOBOut->splice(pOBOut->end(), oblFwdContain); pOBOut->splice(pOBOut->end(), oblRevContain); // Filter out transitive overlap blocks if requested if(m_bIrreducible) { computeIrreducibleBlocks(m_pBWT, m_pRevBWT, &oblSuffixFwd, pOBOut); computeIrreducibleBlocks(m_pBWT, m_pRevBWT, &oblPrefixFwd, pOBOut); } else { pOBOut->splice(pOBOut->end(), oblSuffixFwd); pOBOut->splice(pOBOut->end(), oblPrefixFwd); } return result; } // Write overlap results to an ASQG file void svabaOverlapAlgorithm::writeResultASQG(std::ostream& writer, const SeqRecord& read, const OverlapResult& result) const { ASQG::VertexRecord record(read.id, read.seq.toString()); record.setSubstringTag(result.isSubstring); record.write(writer); } // Write overlap blocks out to a file void svabaOverlapAlgorithm::writeOverlapBlocks(std::ostream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const { // Write the header info size_t numBlocks = pList->size(); writer << readIdx << " " << isSubstring << " " << numBlocks << " "; //std::cout << readIdx << " " << isSubstring << " " << numBlocks << " "; //std::cout << " idx: " << count << " count: " << numBlocks << "\n"; for(OverlapBlockList::const_iterator iter = pList->begin(); iter != pList->end(); ++iter) { writer << *iter << " "; //std::cout << *iter << " "; } writer << "\n"; //std::cout << "\n"; } //JEREMIAH void svabaOverlapAlgorithm::writeOverlapBlocks(std::stringstream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const { // Write the header info size_t numBlocks = pList->size(); writer << readIdx << " " << isSubstring << " " << numBlocks << " "; //std::cout << readIdx << " " << isSubstring << " " << numBlocks << " "; for(OverlapBlockList::const_iterator iter = pList->begin(); iter != pList->end(); ++iter) { writer << *iter << " "; //std::cout << *iter << " "; } writer << "\n"; //std::cout << "\n"; } // Calculate the ranges in pBWT that contain a prefix of at least minOverlap basepairs that // overlaps with a suffix of w. The ranges are added to the pOBList void svabaOverlapAlgorithm::findOverlapBlocksExact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, int minOverlap, OverlapBlockList* pOverlapList, OverlapBlockList* pContainList, OverlapResult& result) const { // The algorithm is as follows: // We perform a backwards search using the FM-index for the string w. // As we perform the search we collect the intervals // of the significant prefixes (len >= minOverlap) that overlap w. BWTIntervalPair ranges; size_t l = w.length(); int start = l - 1; BWTAlgorithms::initIntervalPair(ranges, w[start], pBWT, pRevBWT); // Collect the OverlapBlocks for(size_t i = start - 1; i >= 1; --i) { // Compute the range of the suffix w[i, l] BWTAlgorithms::updateBothL(ranges, w[i], pBWT); int overlapLen = l - i; if(overlapLen >= minOverlap) { // Calculate which of the prefixes that match w[i, l] are terminal // These are the proper prefixes (they are the start of a read) BWTIntervalPair probe = ranges; BWTAlgorithms::updateBothL(probe, '$', pBWT); // The probe interval contains the range of proper prefixes if(probe.interval[1].isValid()) { assert(probe.interval[1].lower > 0); pOverlapList->push_back(OverlapBlock(probe, ranges, overlapLen, 0, af)); } } } // Determine if this sequence is contained and should not be processed further BWTAlgorithms::updateBothL(ranges, w[0], pBWT); // Ranges now holds the interval for the full-length read // To handle containments, we output the overlapBlock to the final overlap block list // and it will be processed later // Two possible containment cases: // 1) This read is a substring of some other read // 2) This read is identical to some other read // Case 1 is indicated by the existance of a non-$ left or right hand extension // In this case we return no alignments for the string AlphaCount64 left_ext = BWTAlgorithms::getExtCount(ranges.interval[0], pBWT); AlphaCount64 right_ext = BWTAlgorithms::getExtCount(ranges.interval[1], pRevBWT); if(left_ext.hasDNAChar() || right_ext.hasDNAChar()) { result.isSubstring = true; } else { BWTIntervalPair probe = ranges; BWTAlgorithms::updateBothL(probe, '$', pBWT); if(probe.isValid()) { // terminate the contained block and add it to the contained list BWTAlgorithms::updateBothR(probe, '$', pRevBWT); assert(probe.isValid()); pContainList->push_back(OverlapBlock(probe, ranges, w.length(), 0, af)); } } //OverlapBlockList containedWorkingList; //partitionBlockList(w.length(), &workingList, pOverlapList, &containedWorkingList); // Terminate the contained blocks //terminateContainedBlocks(containedWorkingList); // Move the contained blocks to the final contained list //pContainList->splice(pContainList->end(), containedWorkingList); return; } // Seeded blockwise BWT alignment of prefix-suffix for reads // Each alignment is given a seed region and a block region // The seed region is the terminal portion of w where maxDiff + 1 seeds are created // at least 1 of these seeds must align exactly for there to be an alignment with // at most maxDiff differences between the prefix/suffix. Only alignments within the // range [block_start, block_end] are output. The block_end coordinate is inclusive. bool svabaOverlapAlgorithm::findOverlapBlocksInexact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, int minOverlap, OverlapBlockList* pOverlapList, OverlapBlockList* pContainList, OverlapResult& result) const { int len = w.length(); int overlap_region_left = len - minOverlap; SearchSeedVector* pCurrVector = new SearchSeedVector; SearchSeedVector* pNextVector = new SearchSeedVector; OverlapBlockList workingList; SearchSeedVector::iterator iter; // Create and extend the initial seeds int actual_seed_length = m_seedLength; int actual_seed_stride = m_seedStride; #ifdef DEBUGOVERLAP std::cout << "SeedLen: " << m_seedLength << " SeedStride: " << m_seedStride << std::endl; #endif if(actual_seed_length == 0) { // Calculate a seed length and stride that will guarantee all overlaps // with error rate m_errorRate will be found calculateSeedParameters(w, minOverlap, actual_seed_length, actual_seed_stride); } assert(actual_seed_stride != 0); createSearchSeeds(w, pBWT, pRevBWT, actual_seed_length, actual_seed_stride, pCurrVector); #ifdef DEBUGOVERLAP std::cout << "SeedVectorLen: " << pCurrVector->size() << std::endl; #endif extendSeedsExactRight(w, pBWT, pRevBWT, ED_RIGHT, pCurrVector, pNextVector); pCurrVector->clear(); pCurrVector->swap(*pNextVector); assert(pNextVector->empty()); int num_steps = 0; // Perform the inexact extensions bool fail = false; while(!pCurrVector->empty()) { if(m_maxSeeds != -1 && (int)pCurrVector->size() > m_maxSeeds) { fail = true; break; } iter = pCurrVector->begin(); while(iter != pCurrVector->end()) { SearchSeed& align = *iter; // If the current aligned region is right-terminal // and the overlap is greater than minOverlap, try to find overlaps // or containments if(align.right_index == len - 1) { double align_error = align.calcErrorRate(); // Check for overlaps if(align.left_index <= overlap_region_left && isErrorRateAcceptable(align_error, m_errorRate)) { int overlapLen = len - align.left_index; BWTIntervalPair probe = align.ranges; BWTAlgorithms::updateBothL(probe, '$', pBWT); // The probe interval contains the range of proper prefixes if(probe.interval[1].isValid()) { assert(probe.interval[1].lower > 0); OverlapBlock nBlock(probe, align.ranges, overlapLen, align.z, af, align.historyLink->getHistoryVector()); workingList.push_back(nBlock); } } // Check for containments // If the seed is left-terminal and there are [ACGT] left/right extensions of the sequence // this read must be a substring of another read if(align.left_index == 0) { AlphaCount64 left_ext = BWTAlgorithms::getExtCount(align.ranges.interval[0], pBWT); AlphaCount64 right_ext = BWTAlgorithms::getExtCount(align.ranges.interval[1], pRevBWT); if(left_ext.hasDNAChar() || right_ext.hasDNAChar()) result.isSubstring = true; } } // Extend the seed to the right/left if(align.dir == ED_RIGHT) extendSeedInexactRight(align, w, pBWT, pRevBWT, pNextVector); else extendSeedInexactLeft(align, w, pBWT, pRevBWT, pNextVector); ++iter; //pCurrVector->erase(iter++); } pCurrVector->clear(); assert(pCurrVector->empty()); pCurrVector->swap(*pNextVector); // Remove identical seeds after we have performed seed_len steps // as there now might be redundant seeds if(num_steps % actual_seed_stride == 0) { std::sort(pCurrVector->begin(), pCurrVector->end(), SearchSeed::compareLeftRange); SearchSeedVector::iterator end_iter = std::unique(pCurrVector->begin(), pCurrVector->end(), SearchSeed::equalLeftRange); pCurrVector->resize(end_iter - pCurrVector->begin()); } ++num_steps; } if(!fail) { // parse the working list to remove any submaximal overlap blocks // these blocks correspond to reads that have multiple valid overlaps. // we only keep the longest removeSubMaximalBlocks(&workingList, pBWT, pRevBWT); OverlapBlockList containedWorkingList; partitionBlockList(len, &workingList, pOverlapList, &containedWorkingList); // Terminate the contained blocks terminateContainedBlocks(containedWorkingList); // Move the contained blocks to the final contained list pContainList->splice(pContainList->end(), containedWorkingList); } delete pCurrVector; delete pNextVector; return !fail; } // Build forward history for the blocks void svabaOverlapAlgorithm::buildForwardHistory(OverlapBlockList* pList) const { OverlapBlockList terminalList; OverlapBlockList potentialContainedList; while(!pList->empty()) { // The terminalBlock list contains all the blocks that became right-terminal // in the current extension round. // Perform a single round of extension, any terminal blocks // are moved to the terminated list extendActiveBlocksRight(m_pBWT, m_pRevBWT, *pList, terminalList, potentialContainedList); } *pList = terminalList; pList->splice(pList->end(), potentialContainedList); } // Calculate the single right extension to the '$' for each the contained blocks // so that the interval ranges are consistent void svabaOverlapAlgorithm::terminateContainedBlocks(OverlapBlockList& containedBlocks) const { for(OverlapBlockList::iterator iter = containedBlocks.begin(); iter != containedBlocks.end(); ++iter) BWTAlgorithms::updateBothR(iter->ranges, '$', iter->getExtensionBWT(m_pBWT, m_pRevBWT)); } // Calculate the seed length and stride to ensure that we will find all // all overlaps with error rate at most m_errorRate. // To overlap two reads allowing for d errors, we create d+1 seeds so that at least one seed will match // exactly. d is a function of the overlap length so we define the seed length using the minimum overlap // parameter. We then tile seeds across the read starting from the end such that for every overlap length // x, there are at least floor(x * error_rate) + 1 seeds. void svabaOverlapAlgorithm::calculateSeedParameters(const std::string& w, const int minOverlap, int& seed_length, int& seed_stride) const { int read_len = w.length(); seed_length = 0; // The maximum possible number of differences occurs for a fully-aligned read int max_diff_high = static_cast(m_errorRate * read_len); // Calculate the seed length to use // If the error rate is so low that no differences are possible just seed // over the entire minOverlap region if(max_diff_high > 0) { // Calculate the maximum number of differences between two sequences that overlap // by minOverlap int max_diff_low = static_cast(m_errorRate * minOverlap); if(max_diff_low == 0) max_diff_low = 1; int seed_region_length = static_cast(ceil(max_diff_low / m_errorRate)); int num_seeds_low = max_diff_low + 1; seed_length = static_cast(seed_region_length / num_seeds_low); if(seed_length > static_cast(minOverlap)) seed_length = minOverlap; } else { seed_length = minOverlap; } seed_stride = seed_length; } // Create and intialize the search seeds int svabaOverlapAlgorithm::createSearchSeeds(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, int seed_length, int seed_stride, SearchSeedVector* pOutVector) const { // Start a new chain of history links SearchHistoryLink rootLink = SearchHistoryNode::createRoot(); // The maximum possible number of differences occurs for a fully-aligned read int read_len = w.length(); int max_diff_high = static_cast(m_errorRate * read_len); // Start the seeds at the end of the read int seed_start = read_len - seed_length; while(seed_start >= 0) { SearchSeed seed; seed.left_index = seed_start; seed.right_index = seed_start; seed.dir = ED_RIGHT; seed.seed_len = seed_length; seed.z = 0; seed.maxDiff = max_diff_high; seed.historyLink = rootLink; // Initialize the left and right suffix array intervals char b = w[seed.left_index]; BWTAlgorithms::initIntervalPair(seed.ranges, b, pBWT, pRevBWT); pOutVector->push_back(seed); seed_start -= seed_stride; // Only create one seed in the exact case if(max_diff_high == 0) break; } return seed_length; } // Extend all the seeds in pInVector to the right over the entire seed range void svabaOverlapAlgorithm::extendSeedsExactRightQueue(const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT, ExtendDirection /*dir*/, const SearchSeedVector* pInVector, SearchSeedQueue* pOutQueue) const { for(SearchSeedVector::const_iterator iter = pInVector->begin(); iter != pInVector->end(); ++iter) { SearchSeed align = *iter; bool valid = true; while(align.isSeed()) { ++align.right_index; char b = w[align.right_index]; BWTAlgorithms::updateBothR(align.ranges, b, pRevBWT); if(!align.isIntervalValid(RIGHT_INT_IDX)) { valid = false; break; } } if(valid) pOutQueue->push(align); } } // Extend all the seeds in pInVector to the right over the entire seed range void svabaOverlapAlgorithm::extendSeedsExactRight(const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT, ExtendDirection /*dir*/, const SearchSeedVector* pInVector, SearchSeedVector* pOutVector) const { for(SearchSeedVector::const_iterator iter = pInVector->begin(); iter != pInVector->end(); ++iter) { SearchSeed align = *iter; bool valid = true; while(align.isSeed()) { ++align.right_index; char b = w[align.right_index]; BWTAlgorithms::updateBothR(align.ranges, b, pRevBWT); if(!align.isIntervalValid(RIGHT_INT_IDX)) { valid = false; break; } } //std::cout << "Initial seed: "; //align.print(w); if(valid) pOutVector->push_back(align); } } // void svabaOverlapAlgorithm::extendSeedInexactRight(SearchSeed& seed, const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT, SearchSeedVector* pOutVector) const { // If this alignment has run all the way to the end of the sequence // switch it to be a left extension sequence if(seed.right_index == int(w.length() - 1)) { seed.dir = ED_LEFT; pOutVector->push_back(seed); return; } ++seed.right_index; if(!seed.allowMismatches()) { char b = w[seed.right_index]; BWTAlgorithms::updateBothR(seed.ranges, b, pRevBWT); if(seed.isIntervalValid(RIGHT_INT_IDX)) pOutVector->push_back(seed); } else { // Calculating the AlphaCounts is the heavy part of the computation so we cache // the value outside the loop, it is the same for all bases AlphaCount64 lower = pRevBWT->getFullOcc(seed.ranges.interval[1].lower - 1); AlphaCount64 upper = pRevBWT->getFullOcc(seed.ranges.interval[1].upper); for(int i = 0; i < 4; ++i) { char b = ALPHABET[i]; BWTIntervalPair probe = seed.ranges; BWTAlgorithms::updateBothR(probe, b, pRevBWT, lower, upper); if(probe.interval[RIGHT_INT_IDX].isValid()) { SearchSeed branched = seed; branched.ranges = probe; if(b != w[seed.right_index]) { ++branched.z; branched.historyLink = seed.historyLink->createChild(w.length() - seed.right_index, b); } pOutVector->push_back(branched); } } } } // void svabaOverlapAlgorithm::extendSeedInexactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* /*pRevBWT*/, SearchSeedVector* pOutVector) const { //printf("ProcessingLEFT: "); align.print(w); --seed.left_index; if(seed.left_index >= 0) { if(!seed.allowMismatches()) { // Extend exact char b = w[seed.left_index]; BWTAlgorithms::updateBothL(seed.ranges, b, pBWT); if(seed.isIntervalValid(LEFT_INT_IDX)) pOutVector->push_back(seed); } else { // Calculating the AlphaCounts is the heavy part of the computation so we cache // the value outside the loop, it is the same for all bases AlphaCount64 lower = pBWT->getFullOcc(seed.ranges.interval[0].lower - 1); AlphaCount64 upper = pBWT->getFullOcc(seed.ranges.interval[0].upper); for(int i = 0; i < 4; ++i) { char b = ALPHABET[i]; BWTIntervalPair probe = seed.ranges; BWTAlgorithms::updateBothL(probe, b, pBWT, lower, upper); if(probe.interval[LEFT_INT_IDX].isValid()) { SearchSeed branched = seed; branched.ranges = probe; if(b != w[seed.left_index]) { ++branched.z; // The history coordinates are wrt the right end of the read // so that each position corresponds to the length of the overlap // including that position branched.historyLink = seed.historyLink->createChild(w.length() - seed.left_index, b); //branched.history.add(w.length() - seed.left_index, b); } pOutVector->push_back(branched); } } } } } // Extend the seed to the right, return true if the seed is still a valid range bool svabaOverlapAlgorithm::extendSeedExactRight(SearchSeed& seed, const std::string& w, const BWT* /*pBWT*/, const BWT* pRevBWT) const { // If this alignment has run all the way to the end of the sequence // switch it to be a left extension sequence if(seed.right_index == int(w.length() - 1)) { seed.dir = ED_LEFT; return true; } ++seed.right_index; char b = w[seed.right_index]; BWTAlgorithms::updateBothR(seed.ranges, b, pRevBWT); if(seed.isIntervalValid(RIGHT_INT_IDX)) return true; else return false; } // bool svabaOverlapAlgorithm::extendSeedExactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* /*pRevBWT*/) const { --seed.left_index; if(seed.left_index >= 0) { char b = w[seed.left_index]; BWTAlgorithms::updateBothL(seed.ranges, b, pBWT); if(seed.isIntervalValid(LEFT_INT_IDX)) return true; else return false; } else { return false; } } // Calculate the irreducible blocks from the vector of OverlapBlocks void svabaOverlapAlgorithm::computeIrreducibleBlocks(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList* pOBList, OverlapBlockList* pOBFinal) const { // processIrreducibleBlocks requires the pOBList to be sorted in descending order pOBList->sort(OverlapBlock::sortSizeDescending); #ifdef DEBUGOVERLAP std::cout << " m_exactModeIrreducible " << m_exactModeIrreducible << "\n"; #endif if(m_exactModeIrreducible) _processIrreducibleBlocksExactIterative(pBWT, pRevBWT, *pOBList, pOBFinal); else _processIrreducibleBlocksInexact(pBWT, pRevBWT, *pOBList, pOBFinal); pOBList->clear(); } // iterate through obList and determine the overlaps that are irreducible. This function is recursive. // The final overlap blocks corresponding to irreducible overlaps are written to pOBFinal. // Invariant: the blocks are ordered in descending order of the overlap size so that the longest overlap is first. // Invariant: each block corresponds to the same extension of the root sequence w. void svabaOverlapAlgorithm::_processIrreducibleBlocksExactIterative(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& inList, OverlapBlockList* pOBFinal) const { if(inList.empty()) return; // We store the overlap blocks in groups of blocks that have the same right-extension. // When a branch is found, the groups are split based on the extension typedef std::list BlockGroups; BlockGroups blockGroups; blockGroups.push_back(inList); int numExtensions = 0; int numBranches = 0; while(!blockGroups.empty()) { // Perform one extenion round for each group. // If the top-level block has ended, push the result // to the final list and remove the group from processing BlockGroups::iterator groupIter = blockGroups.begin(); BlockGroups incomingGroups; // Branched blocks are placed here while(groupIter != blockGroups.end()) { OverlapBlockList& currList = *groupIter; bool bEraseGroup = false; // Count the extensions in the top level (longest) blocks first int topLen = currList.front().overlapLen; AlphaCount64 ext_count; OBLIter blockIter = currList.begin(); while(blockIter != currList.end() && blockIter->overlapLen == topLen) { ext_count += blockIter->getCanonicalExtCount(pBWT, pRevBWT); ++blockIter; } // Three cases: // 1) The top level block has ended as it contains the extension $. Output TLB and end. // 2) There is a singular unique extension base for all the blocks. Update the blocks and continue. // 3) There are multiple extension bases, split the block group and continue. // If some block other than the TLB ended, it must be contained within the TLB and it is not output // or considered further. // Likewise if multiple distinct strings in the TLB ended, we only output the top one. The rest // must have the same sequence as the top one and are hence considered to be contained with the top element. #ifdef DEBUGOVERLAP std::cout << "ext_gcount.get($) " << ext_count.get('$') << "\n"; #endif if(ext_count.get('$') > 0) { // An irreducible overlap has been found. It is possible that there are two top level blocks // (one in the forward and reverse direction). Since we can't decide which one // contains the other at this point, we output hits to both. Under a fixed // length string assumption one will be contained within the other and removed later. OBLIter tlbIter = currList.begin(); while(tlbIter != currList.end() && tlbIter->overlapLen == topLen) { // Ensure the tlb is actually terminal and not a substring block AlphaCount64 test_count = tlbIter->getCanonicalExtCount(pBWT, pRevBWT); if(test_count.get('$') == 0) { std::cerr << "Error: substring read found during overlap computation.\n"; std::cerr << "Please run sga rmdup before sga overlap\n"; exit(EXIT_FAILURE); } // Perform the final right-update to make the block terminal OverlapBlock branched = *tlbIter; BWTAlgorithms::updateBothR(branched.ranges, '$', branched.getExtensionBWT(pBWT, pRevBWT)); pOBFinal->push_back(branched); #ifdef DEBUGOVERLAP std::cout << "[IE] TLB of length " << branched.overlapLen << " has ended\n"; std::cout << "[IE]\tBlock data: " << branched << "\n"; #endif ++tlbIter; } // Set the flag to erase this group, it is finished bEraseGroup = true; } else { // Count the extension for the rest of the blocks while(blockIter != currList.end()) { ext_count += blockIter->getCanonicalExtCount(pBWT, pRevBWT); ++blockIter; } if(ext_count.hasUniqueDNAChar()) { // Update all the blocks using the unique extension character // This character is in the canonical representation wrt to the query char b = ext_count.getUniqueDNAChar(); updateOverlapBlockRangesRight(pBWT, pRevBWT, currList, b); numExtensions++; bEraseGroup = false; } else { for(size_t idx = 0; idx < DNA_ALPHABET_SIZE; ++idx) { char b = ALPHABET[idx]; if(ext_count.get(b) > 0) { numBranches++; OverlapBlockList branched = currList; updateOverlapBlockRangesRight(pBWT, pRevBWT, branched, b); incomingGroups.push_back(branched); bEraseGroup = true; } } } } if(bEraseGroup) groupIter = blockGroups.erase(groupIter); else ++groupIter; } // Splice in the newly branched blocks, if any blockGroups.splice(blockGroups.end(), incomingGroups); } } // Classify the blocks in obList as irreducible, transitive or substrings. The irreducible blocks are // put into pOBFinal. The remaining are discarded. // Invariant: the blocks are ordered in descending order of the overlap size so that the longest overlap is first. void svabaOverlapAlgorithm::_processIrreducibleBlocksInexact(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& activeList, OverlapBlockList* pOBFinal) const { if(activeList.empty()) return; #ifdef DEBUGOVERLAP std::cout << " activeList.size() " << activeList.size() << "\n"; #endif // The activeList contains all the blocks that are not yet right terminal // Count the extensions in the top level (longest) blocks first bool all_eliminated = false; while(!activeList.empty() && !all_eliminated) { // The terminalBlock list contains all the blocks that became right-terminal // in the current extension round. OverlapBlockList terminalList; OverlapBlockList potentialContainedList; // Perform a single round of extension, any terminal blocks // are moved to the terminated list extendActiveBlocksRight(pBWT, pRevBWT, activeList, terminalList, potentialContainedList); // Compare the blocks in the contained list against the other terminal and active blocks // If they are a substring match to any of these, discard them OverlapBlockList::iterator containedIter = potentialContainedList.begin(); for(; containedIter != potentialContainedList.end(); ++containedIter) { if(!isBlockSubstring(*containedIter, terminalList, m_errorRate) && !isBlockSubstring(*containedIter, activeList, m_errorRate)) { // Not a substring, move to terminal list terminalList.push_back(*containedIter); //std::cout << "Contained block kept: " << containedIter->overlapLen << "\n"; } else { //std::cout << "Contained block found and removed: " << containedIter->overlapLen << "\n"; } } // Using the terminated blocks, mark as eliminated any active blocks // that form a valid overlap to the terminal block. These are transitive edges // We do not compare two terminal blocks, we don't consider these overlaps to be // transitive #ifdef DEBUGOVERLAP std::cout << " terminalList.sizee() " << terminalList.size() << "\n"; #endif OverlapBlockList::iterator terminalIter = terminalList.begin(); for(; terminalIter != terminalList.end(); ++terminalIter) { #ifdef DEBUGOVERLAP std::cout << "[II] ***TLB of length " << terminalIter->overlapLen << " has ended\n"; #endif all_eliminated = true; OverlapBlockList::iterator activeIter = activeList.begin(); for(; activeIter != activeList.end(); ++activeIter) { if(activeIter->isEliminated) continue; // skip previously marked blocks // Two conditions must be met for a block to be transitive wrt terminal: // 1) It must have a strictly shorter overlap than the terminal block // 2) The error rate between the block and terminal must be less than the threshold double inferredErrorRate = calculateBlockErrorRate(*terminalIter, *activeIter); if(activeIter->overlapLen < terminalIter->overlapLen && isErrorRateAcceptable(inferredErrorRate, m_errorRate)) { #ifdef DEBUGOVERLAP_2 std::cout << "Marking block of length " << activeIter->overlapLen << " as eliminated\n"; #endif activeIter->isEliminated = true; } else { all_eliminated = false; } } // Move this block to the final list if it has not been previously marked eliminated if(!terminalIter->isEliminated) { #ifdef DEBUGOVERLAP std::cout << "[II] Adding block " << *terminalIter << " to final list\n"; //std::cout << " extension: " << terminalIter->forwardHistory << "\n"; #endif pOBFinal->push_back(*terminalIter); } } } activeList.clear(); } // Extend all the blocks in activeList by one base to the right // Move all right-terminal blocks to the termainl list. If a block // is terminal and potentially contained by another block, add it to // containedList void svabaOverlapAlgorithm::extendActiveBlocksRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& activeList, OverlapBlockList& terminalList, OverlapBlockList& /*containedList*/) const { OverlapBlockList::iterator iter = activeList.begin(); OverlapBlockList::iterator next; while(iter != activeList.end()) { next = iter; ++next; // Check if block is terminal AlphaCount64 ext_count = iter->getCanonicalExtCount(pBWT, pRevBWT); if(ext_count.get('$') > 0) { // Only consider this block to be terminal irreducible if it has at least one extension // or else it is a substring block if(iter->forwardHistory.size() > 0) { OverlapBlock branched = *iter; BWTAlgorithms::updateBothR(branched.ranges, '$', branched.getExtensionBWT(pBWT, pRevBWT)); terminalList.push_back(branched); #ifdef DEBUGOVERLAP_2 std::cout << "Block of length " << iter->overlapLen << " moved to terminal\n"; #endif } } int curr_extension = iter->forwardHistory.size(); // Perform the right extensions // Best case, there is only a single extension character // Handle this case specially so we don't need to copy the potentially // large OverlapBlock structure and its full history if(ext_count.hasUniqueDNAChar()) { // Get the extension character with respect to the queried sequence char canonical_base = ext_count.getUniqueDNAChar(); // Flip the base into the frame of reference for the block char block_base = iter->flags.isQueryComp() ? complement(canonical_base) : canonical_base; // Update the block using the base in its frame of reference BWTAlgorithms::updateBothR(iter->ranges, block_base, iter->getExtensionBWT(pBWT, pRevBWT)); // Add the base to the history in the frame of reference of the query read // This is so the history is consistent when comparing between blocks from different strands iter->forwardHistory.add(curr_extension, canonical_base); } else { for(size_t idx = 0; idx < DNA_ALPHABET_SIZE; ++idx) { char canonical_base = ALPHABET[idx]; char block_base = iter->flags.isQueryComp() ? complement(canonical_base) : canonical_base; if(ext_count.get(canonical_base) == 0) continue; // Branch the sequence. This involves copying the entire history which can be large // if the input sequences are very long. This could be avoided by using the SearchHistoyNode/Link // structure but branches are infrequent enough to not have a large impact OverlapBlock branched = *iter; BWTAlgorithms::updateBothR(branched.ranges, block_base, branched.getExtensionBWT(pBWT, pRevBWT)); assert(branched.ranges.isValid()); // Add the base in the canonical frame branched.forwardHistory.add(curr_extension, canonical_base); // Insert the new block after the iterator activeList.insert(iter, branched); } // Remove the original block, which has been superceded by the branches activeList.erase(iter); } iter = next; // this skips the newly-inserted blocks } } // Return true if the terminalBlock is a substring of any member of blockList bool svabaOverlapAlgorithm::isBlockSubstring(OverlapBlock& terminalBlock, const OverlapBlockList& blockList, double maxER) const { OverlapBlockList::const_iterator iter = blockList.begin(); size_t right_extension_length = terminalBlock.forwardHistory.size(); for(; iter != blockList.end(); ++iter) { if(terminalBlock.overlapLen == iter->overlapLen && right_extension_length == iter->forwardHistory.size()) { continue; // same length, cannot be a substring } // Calculate error rate between blocks double er = calculateBlockErrorRate(terminalBlock, *iter); if(isErrorRateAcceptable(er, maxER)) return true; } return false; } // Calculate the error rate between two overlap blocks using their history double svabaOverlapAlgorithm::calculateBlockErrorRate(const OverlapBlock& terminalBlock, const OverlapBlock& otherBlock) const { int back_max = std::min(terminalBlock.overlapLen, otherBlock.overlapLen); int backwards_diff = SearchHistoryVector::countDifferences(terminalBlock.backHistory, otherBlock.backHistory, back_max); // We compare the forward (right) extension only up to the last position of the terminated block's extension int forward_len = terminalBlock.forwardHistory.size(); int forward_max = forward_len - 1; int forward_diff = SearchHistoryVector::countDifferences(terminalBlock.forwardHistory, otherBlock.forwardHistory, forward_max); // Calculate the length of the inferred overlap int trans_overlap_length = back_max + forward_len; double er = static_cast(backwards_diff + forward_diff) / trans_overlap_length; #ifdef DEBUGOVERLAP_2 std::cout << "OL: " << terminalBlock.overlapLen << "\n"; std::cout << "TLB BH: " << terminalBlock.backHistory << "\n"; std::cout << "TB BH: " << otherBlock.backHistory << "\n"; std::cout << "TLB FH: " << terminalBlock.forwardHistory << "\n"; std::cout << "TB FH: " << otherBlock.forwardHistory << "\n"; std::cout << "BM: " << back_max << " FM: " << forward_max << "\n"; std::cout << "IOL: " << trans_overlap_length << " TD: " << (backwards_diff + forward_diff) << "\n"; std::cout << "Block of length " << otherBlock.overlapLen << " has ier: " << er << "\n"; #endif return er; } // Update the overlap block list with a righthand extension to b, removing ranges that become invalid void svabaOverlapAlgorithm::updateOverlapBlockRangesRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, char canonical_base) const { OverlapBlockList::iterator iter = obList.begin(); while(iter != obList.end()) { char relative_base = iter->flags.isQueryComp() ? complement(canonical_base) : canonical_base; BWTAlgorithms::updateBothR(iter->ranges, relative_base, iter->getExtensionBWT(pBWT, pRevBWT)); // remove the block from the list if its no longer valid if(!iter->ranges.isValid()) { iter = obList.erase(iter); } else { // Add the base to the extension history int currExtension = iter->forwardHistory.size(); iter->forwardHistory.add(currExtension, canonical_base); ++iter; } } } ================================================ FILE: src/svaba/SvabaOverlapAlgorithm.h ================================================ //----------------------------------------------- // Copyright 2009 Wellcome Trust Sanger Institute // Written by Jared Simpson (js18@sanger.ac.uk) // Released under the GPL //----------------------------------------------- // // svabaOverlapAlgorithm - This class implements all the logic // for finding and outputting overlaps for sequence reads // #ifndef SVABA_OVERLAPALGORITHM_H #define SVABA_OVERLAPALGORITHM_H #include "SuffixTools/BWT.h" #include "OverlapBlock.h" #include "OverlapAlgorithm.h" #include "SearchSeed.h" #include "BWTAlgorithms.h" #include "Util.h" /*enum OverlapMode { OM_OVERLAP, OM_FULLREAD }; struct OverlapResult { OverlapResult() : isSubstring(false), searchAborted(false) {} bool isSubstring; bool searchAborted; };*/ class svabaOverlapAlgorithm { public: svabaOverlapAlgorithm(const BWT* pBWT, const BWT* pRevBWT, double er, int seedLen, int seedStride, bool irrOnly, int maxSeeds = -1) : m_pBWT(pBWT), m_pRevBWT(pRevBWT), m_errorRate(er), m_seedLength(seedLen), m_seedStride(seedStride), m_bIrreducible(irrOnly), m_exactModeOverlap(false), m_exactModeIrreducible(false), m_maxSeeds(maxSeeds) {} // Perform the overlap // This function is threaded so everything must be const OverlapResult overlapRead(const SeqRecord& read, int minOverlap, OverlapBlockList* pOutList) const; // Perform an irreducible overlap OverlapResult overlapReadExact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const; // Find duplicate blocks for this read OverlapResult alignReadDuplicate(const SeqRecord& read, OverlapBlockList* pOBOut) const; // Perform an inexact overlap OverlapResult overlapReadInexact(const SeqRecord& read, int minOverlap, OverlapBlockList* pOBOut) const; // Write the result of an overlap to an ASQG file void writeResultASQG(std::ostream& writer, const SeqRecord& read, const OverlapResult& result) const; // Write all the overlap blocks pList to the filehandle void writeOverlapBlocks(std::ostream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const; void writeOverlapBlocks(std::stringstream& writer, size_t readIdx, bool isSubstring, const OverlapBlockList* pList) const; //JEREMIAH // Build the forward history structures for the blocks void buildForwardHistory(OverlapBlockList* pList) const; // Set flag to use exact-match algorithms only void setExactModeOverlap(bool b) { m_exactModeOverlap = b; } void setExactModeIrreducible(bool b) { m_exactModeIrreducible = b; } // const BWT* getBWT() const { return m_pBWT; } const BWT* getRBWT() const { return m_pRevBWT; } private: // Calculate the ranges in pBWT that contain a prefix of at least minOverlap basepairs that // overlaps with a suffix of w. void findOverlapBlocksExact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, const int minOverlap, OverlapBlockList* pOBTemp, OverlapBlockList* pOBFinal, OverlapResult& result) const; // Same as above while allowing mismatches bool findOverlapBlocksInexact(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, const AlignFlags& af, const int minOverlap, OverlapBlockList* pOBList, OverlapBlockList* pOBFinal, OverlapResult& result) const; // inline bool extendSeedExactRight(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT) const; inline bool extendSeedExactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT) const; inline void branchSeedRight(const SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedQueue* pQueue) const; inline void branchSeedLeft(const SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedQueue* pQueue) const; // inline void extendSeedInexactRight(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedVector* pOutVector) const; // inline void extendSeedInexactLeft(SearchSeed& seed, const std::string& w, const BWT* pBWT, const BWT* pRevBWT, SearchSeedVector* pOutVector) const; // inline void calculateSeedParameters(const std::string& w, const int minOverlap, int& seed_length, int& seed_stride) const; // inline int createSearchSeeds(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, int seed_length, int seed_stride, SearchSeedVector* pOutVector) const; // inline void extendSeedsExactRightQueue(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, ExtendDirection dir, const SearchSeedVector* pInVector, SearchSeedQueue* pOutQueue) const; // inline void extendSeedsExactRight(const std::string& w, const BWT* pBWT, const BWT* pRevBWT, ExtendDirection dir, const SearchSeedVector* pInVector, SearchSeedVector* pOutVector) const; // Calculate the terminal extension for the contained blocks to make the intervals consistent void terminateContainedBlocks(OverlapBlockList& containedBlocks) const; // // Irreducible-only processing algorithms // // Reduce the block list pOBList by removing blocks that correspond to transitive edges void computeIrreducibleBlocks(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList* pOBList, OverlapBlockList* pOBFinal) const; // these recursive functions do the actual work of computing the irreducible blocks void _processIrreducibleBlocksExact(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, OverlapBlockList* pOBFinal) const; void _processIrreducibleBlocksExactIterative(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& inList, OverlapBlockList* pOBFinal) const; // void _processIrreducibleBlocksInexact(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, OverlapBlockList* pOBFinal) const; // Update the overlap block list with a righthand extension to b, removing ranges that become invalid void updateOverlapBlockRangesRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& obList, char b) const; // void extendActiveBlocksRight(const BWT* pBWT, const BWT* pRevBWT, OverlapBlockList& activeList, OverlapBlockList& terminalList, OverlapBlockList& containedList) const; double calculateBlockErrorRate(const OverlapBlock& terminalBlock, const OverlapBlock& otherBlock) const; bool isBlockSubstring(OverlapBlock& terminalBlock, const OverlapBlockList& blockList, double maxER) const; // Data const BWT* m_pBWT; const BWT* m_pRevBWT; double m_errorRate; int m_seedLength; int m_seedStride; bool m_bIrreducible; bool m_exactModeOverlap; bool m_exactModeIrreducible; // Optional parameter to limit the amount of branching that is performed int m_maxSeeds; }; #endif ================================================ FILE: src/svaba/SvabaPostprocess.cpp ================================================ // SvabaPostprocess.cpp — see SvabaPostprocess.h for the design rationale. // // The flow for each suffix runs in its own std::thread: // // [${ID}.${suffix}.bam] // | // | (unless --dedup-only) // v // samtools sort -@ jthreads -m MEM -o *.sort.tmp.bam ${bam} # shell out // rename *.sort.tmp.bam -> ${bam} // | // | (if suffix in DEDUP set, unless --sort-only) // v // native streaming dedup+merge -> *.dedup.tmp.bam # htslib // (writer uses a header with our @PG line appended) // rename *.dedup.tmp.bam -> ${bam} # PG stamped // | // | (only if dedup didn't run for this suffix) // v // samtools reheader ${bam} > *.reheader.tmp.bam # shell out // rename *.reheader.tmp.bam -> ${bam} # PG stamped // | // v // sam_index_build(${bam}, 0) # htslib // → ${bam}.bai // // Every final ${ID}.${suffix}.bam therefore ends up sorted, deduped (where // applicable), carrying an @PG "svaba_postprocess" line chained onto the // existing PG chain, and accompanied by a .bai index. The user never has to // know the intermediate .postprocess.*.tmp.bam files existed. // // The dedup step is NOT a straight drop of duplicate (qname, flag) records // at a locus: overlapping assembly windows can emit the same read twice // with different bi:Z / bz:Z tags naming different supporting contigs. // Dropping one would lose that support evidence. Instead we buffer per // locus and union the comma-token bi/bz lists into the first record, using // the same boundary-aware merge that SvabaOutputWriter.cpp::stamp_tag() // performs during `svaba run`. // // Progress is reported per 1M processed reads, per suffix, serialized through // a shared stderr mutex so lines don't interleave. We avoid any per-record // system call — stat() is only used for file-existence checks and size-based // ETA estimation. #include "SvabaPostprocess.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "htslib/sam.h" #include "SeqLib/BamHeader.h" #include "SeqLib/BamReader.h" #include "SeqLib/BamRecord.h" #include "SeqLib/BamWriter.h" #include "SvabaOptions.h" // SVABA_VERSION namespace { // Serialize progress/log output across the per-suffix threads. We intentionally // keep the critical section tiny — just the single ostringstream flush — so // workers don't serialize on their own progress prints. std::mutex g_stderr_mu; // Suffixes eligible for dedup. `contigs` is sorted but never deduped because // each contig is emitted exactly once by a single window and there is no // overlap-induced duplication to clean up. const std::vector kDedupSuffixes = { "weird", "corrected", "discordant" }; // Full suffix list to consider, in the same order as sort_output.sh. The // contigs suffix goes last so that any shared stderr verbosity from it doesn't // bury the (more interesting) dedup stats. const std::vector kAllSuffixes = { "weird", "corrected", "discordant", "contigs" }; // ---------- options ---------- struct Opts { std::string id; int threads = 4; std::string mem = "2G"; // per samtools sort thread; matches -m flag int verbose = 1; bool sort_only = false; // skip dedup bool dedup_only = false; // skip sort (assume sorted) }; enum { OPT_SORT_ONLY = 1000, OPT_DEDUP_ONLY, OPT_MEM }; const char* kShortOpts = "hi:t:m:v:"; const struct option kLongOpts[] = { { "help", no_argument, nullptr, 'h' }, { "id", required_argument, nullptr, 'i' }, { "threads", required_argument, nullptr, 't' }, { "mem", required_argument, nullptr, 'm' }, { "verbose", required_argument, nullptr, 'v' }, { "sort-only", no_argument, nullptr, OPT_SORT_ONLY }, { "dedup-only", no_argument, nullptr, OPT_DEDUP_ONLY }, { nullptr, 0, nullptr, 0 } }; void printUsage() { std::cerr << "Usage: svaba postprocess -i [options]\n" "\n" " Coord-sort (via samtools sort) and natively streaming-dedup\n" " svaba's per-suffix output BAMs. Much faster than the legacy\n" " samtools-view | awk | samtools-view pipeline.\n" "\n" " Expects files at ${ID}.${suffix}.bam for suffix in:\n" " weird corrected discordant contigs\n" "\n" " -i, --id Analysis ID (required).\n" " -t, --threads Total threads budget, split across concurrent\n" " per-suffix jobs. [4]\n" " -m, --mem Memory per samtools-sort thread (e.g. 2G). [2G]\n" " --sort-only Only sort; skip dedup.\n" " --dedup-only Only dedup; skip sort. Assumes input is already\n" " coord-sorted; output is undefined otherwise.\n" " -v, --verbose <0-3> Verbosity. [1]\n" " -h, --help This message.\n"; } Opts parseOpts(int argc, char** argv) { Opts o; if (argc <= 2) { printUsage(); std::exit(EXIT_FAILURE); } for (int c; (c = getopt_long(argc, argv, kShortOpts, kLongOpts, nullptr)) != -1;) { std::istringstream arg(optarg ? optarg : ""); switch (c) { case 'h': printUsage(); std::exit(EXIT_SUCCESS); case 'i': arg >> o.id; break; case 't': arg >> o.threads; break; case 'm': arg >> o.mem; break; case 'v': arg >> o.verbose; break; case OPT_SORT_ONLY: o.sort_only = true; break; case OPT_DEDUP_ONLY: o.dedup_only = true; break; default: printUsage(); std::exit(EXIT_FAILURE); } } if (o.id.empty()) { std::cerr << "ERROR: --id is required\n"; printUsage(); std::exit(EXIT_FAILURE); } if (o.sort_only && o.dedup_only) { std::cerr << "ERROR: --sort-only and --dedup-only are mutually exclusive\n"; std::exit(EXIT_FAILURE); } if (o.threads < 1) o.threads = 1; return o; } // ---------- small utilities ---------- bool fileExists(const std::string& p) { struct stat st{}; return ::stat(p.c_str(), &st) == 0 && S_ISREG(st.st_mode); } off_t fileSize(const std::string& p) { struct stat st{}; if (::stat(p.c_str(), &st) != 0) return 0; return st.st_size; } // Thread-safe stderr log. Accepts anything streamable into an ostringstream. template void logLine(Args&&... args) { std::ostringstream oss; (oss << ... << std::forward(args)); std::lock_guard lg(g_stderr_mu); std::cerr << oss.str() << std::endl; } // Quote a path for use inside a /bin/sh command string. Wraps in single // quotes and escapes embedded single quotes as '\''. This is safe against // arbitrary IDs containing spaces or shell metacharacters. std::string shQuote(const std::string& s) { std::string out; out.reserve(s.size() + 2); out.push_back('\''); for (char c : s) { if (c == '\'') out += "'\\''"; else out.push_back(c); } out.push_back('\''); return out; } // Forward decl: defined further down in the "per-suffix pipeline" section. // Declared here so the reheader helper below can use std::rename via the same // diagnostics-rich wrapper the dedup path uses. void renameOrThrow(const std::string& from, const std::string& to); // ---------- @PG stamping ---------- // // Every final BAM produced by `svaba postprocess` gets a new @PG line stamped // onto its header so downstream tools (and humans) can tell at a glance that // postprocess ran and with what arguments. The line chains onto the existing // @PG chain via PP: so samtools' `--pg` resolution keeps working. // // Conventions: // ID: "svaba_postprocess" (or ".1", ".2", ... if already present — IDs must // be unique within a header) // PN: "svaba" // VN: SVABA_VERSION // CL: the original argv reassembled, with "svaba " prepended so the CL // matches what the user actually typed // PP: the tail of the existing PG chain (the ID that is nobody's PP pointer) struct PgChainInfo { std::vector ids; // all @PG IDs, in file order std::string tail; // ID that is nobody else's PP (or "" if none) }; PgChainInfo scanPgChain(const std::string& hdr_text) { PgChainInfo info; std::set is_pp_target; std::istringstream iss(hdr_text); std::string line; while (std::getline(iss, line)) { if (line.rfind("@PG\t", 0) != 0) continue; std::string id, pp; std::istringstream ls(line); std::string field; while (std::getline(ls, field, '\t')) { if (field.rfind("ID:", 0) == 0) id = field.substr(3); else if (field.rfind("PP:", 0) == 0) pp = field.substr(3); } if (!id.empty()) info.ids.push_back(id); if (!pp.empty()) is_pp_target.insert(pp); } // Tail = an ID that no one else's PP points at. If multiple, take the last // one in file order — matches what samtools reheader/markdup do in practice. for (const auto& id : info.ids) { if (is_pp_target.find(id) == is_pp_target.end()) info.tail = id; } return info; } // Idempotency check: has *any* svaba_postprocess @PG line (including // uniquified variants svaba_postprocess.1, .2, ...) already been stamped // onto this header? Used to auto-skip the dedup/reheader phase on // re-runs so `scripts/svaba_postprocess.sh` is safely rerunnable. // // Matches both the bare "svaba_postprocess" ID emitted on the first run // and the "svaba_postprocess." variants uniquifyId() would produce if // the user deliberately runs postprocess twice in a row. Either form // means "dedup+PG-stamp has already happened at least once." bool hasSvabaPostprocessPg(const std::string& hdr_text) { const PgChainInfo info = scanPgChain(hdr_text); for (const auto& id : info.ids) { if (id == "svaba_postprocess") return true; if (id.rfind("svaba_postprocess.", 0) == 0) return true; } return false; } std::string uniquifyId(const std::string& base, const std::vector& existing) { auto has = [&](const std::string& s) { return std::find(existing.begin(), existing.end(), s) != existing.end(); }; if (!has(base)) return base; for (int i = 1; i < 10000; ++i) { std::string cand = base + "." + std::to_string(i); if (!has(cand)) return cand; } return base + ".new"; // extremely unreachable fallback } // Strip tab/newline/CR from a value so it can't break @PG line structure. std::string sanitizeHeaderValue(const std::string& s) { std::string out; out.reserve(s.size()); for (char c : s) { if (c == '\t') out.push_back(' '); else if (c == '\n' || c == '\r') continue; else out.push_back(c); } return out; } // Append a single @PG line to hdr_text. Does not otherwise touch the header. std::string appendSvabaPostprocessPg(const std::string& hdr_text, const std::string& cl) { const PgChainInfo info = scanPgChain(hdr_text); const std::string id = uniquifyId("svaba_postprocess", info.ids); const std::string vn = SVABA_VERSION; const std::string cl_s = sanitizeHeaderValue(cl); std::string line = "@PG\tID:" + id + "\tPN:svaba\tVN:" + vn + "\tCL:" + cl_s; if (!info.tail.empty()) line += "\tPP:" + info.tail; line.push_back('\n'); std::string out = hdr_text; if (!out.empty() && out.back() != '\n') out.push_back('\n'); out += line; return out; } // Build a new SeqLib::BamHeader with our @PG line appended onto `src`. SeqLib::BamHeader stampedHeader(const SeqLib::BamHeader& src, const std::string& cl) { return SeqLib::BamHeader(appendSvabaPostprocessPg(src.AsString(), cl)); } // Read the header of `bam` (without walking records) and return it as a // SeqLib::BamHeader. The BamReader is closed on scope exit. SeqLib::BamHeader readHeaderOnly(const std::string& bam) { SeqLib::BamReader r; if (!r.Open(bam)) throw std::runtime_error("reheader: cannot open " + bam); return r.Header(); } // Return true iff the BAM's header declares it coordinate-sorted via an // @HD line with SO:coordinate. Samtools, SeqLib, and bwa all emit that // form when producing a sorted BAM, so a simple substring check on the // first @HD line is sufficient. // // Used by processSuffix() to short-circuit the sort step when it would be // a no-op — lets the user rerun postprocess on already-sorted inputs // without paying the sort cost again (e.g. after a --skip-dedup rerun). // // Errors (can't open, no @HD at all, @HD without SO:) conservatively // return false so we fall through to running sort, which will produce a // correct result regardless. bool isCoordinateSorted(const std::string& bam) { try { const SeqLib::BamHeader h = readHeaderOnly(bam); const std::string text = h.AsString(); std::istringstream iss(text); std::string line; while (std::getline(iss, line)) { if (line.rfind("@HD\t", 0) == 0) { // @HD line found; check for the SO:coordinate tag. Tags are // tab-separated, any order — a plain substring search on the // line is accurate enough because "SO:coordinate" can't appear // as a substring of any other valid @HD tag value. return line.find("SO:coordinate") != std::string::npos; } // @HD, if present, is required to be the first header line. If // the first non-empty line isn't @HD we can stop looking. if (!line.empty() && line[0] == '@') break; } } catch (...) { // header unreadable — let the sort step run and produce its own // error with better context. } return false; } // Use `samtools reheader` to swap in a new header on an existing BAM. Fast // because samtools reheader streams the BGZF body as opaque blocks. We use // this for the suffixes whose pipeline doesn't already rewrite the file // (i.e. `contigs`, or any suffix when --sort-only is passed). int reheaderBamWithPg(const std::string& bam, const std::string& cl, const std::string& tag, int verbose) { const std::string tmp_hdr = bam + ".postprocess.hdr.tmp.sam"; const std::string tmp_bam = bam + ".postprocess.reheader.tmp.bam"; try { const SeqLib::BamHeader src = readHeaderOnly(bam); const std::string new_text = appendSvabaPostprocessPg(src.AsString(), cl); { std::ofstream ofs(tmp_hdr, std::ios::binary); if (!ofs) throw std::runtime_error("cannot write temp header " + tmp_hdr); ofs << new_text; if (!ofs) throw std::runtime_error("short write on " + tmp_hdr); } const std::string cmd = "samtools reheader " + shQuote(tmp_hdr) + " " + shQuote(bam) + " > " + shQuote(tmp_bam); if (verbose >= 2) logLine("[", tag, "] exec: ", cmd); const auto t0 = std::chrono::steady_clock::now(); const int rc = std::system(cmd.c_str()); const double elapsed = std::chrono::duration(std::chrono::steady_clock::now() - t0).count(); ::unlink(tmp_hdr.c_str()); if (rc != 0) { ::unlink(tmp_bam.c_str()); logLine("[", tag, "] samtools reheader FAILED (exit ", rc, ") after ", std::fixed, std::setprecision(1), elapsed, "s"); return rc; } renameOrThrow(tmp_bam, bam); if (verbose >= 1) logLine("[", tag, "] PG stamped via reheader in ", std::fixed, std::setprecision(1), elapsed, "s"); return 0; } catch (const std::exception& e) { ::unlink(tmp_hdr.c_str()); ::unlink(tmp_bam.c_str()); logLine("[", tag, "] reheader error: ", e.what()); return -1; } } // ---------- BAI indexing ---------- // Build a .bai alongside `bam`. Uses htslib directly rather than shelling out // to `samtools index` — one less fork, and we're already linked against // htslib through SeqLib. `sam_index_build(fn, 0)` emits BAI; min_shift > 0 // would emit CSI (which svaba's consumers don't expect). int indexBam(const std::string& bam, const std::string& tag, int verbose) { const auto t0 = std::chrono::steady_clock::now(); const int rc = sam_index_build(bam.c_str(), 0); const double elapsed = std::chrono::duration(std::chrono::steady_clock::now() - t0).count(); if (rc < 0) { logLine("[", tag, "] indexing FAILED (sam_index_build rc=", rc, ") after ", std::fixed, std::setprecision(2), elapsed, "s"); return rc; } if (verbose >= 1) logLine("[", tag, "] indexed (.bai) in ", std::fixed, std::setprecision(2), elapsed, "s"); return 0; } // ---------- sort step ---------- // Run samtools sort on in_bam producing out_bam. Returns process exit code. // We don't parse samtools' progress output; samtools -v isn't universally // respected and its stderr format changes. Caller emits start/end log lines // with timing. int runSort(const std::string& in_bam, const std::string& out_bam, int sort_threads, const std::string& mem, const std::string& tag, int verbose) { std::string cmd = "samtools sort -@ " + std::to_string(std::max(1, sort_threads)) + " -m " + shQuote(mem) + " -o " + shQuote(out_bam) + " " + shQuote(in_bam); if (verbose >= 2) logLine("[", tag, "] exec: ", cmd); const auto t0 = std::chrono::steady_clock::now(); const int rc = std::system(cmd.c_str()); const double elapsed = std::chrono::duration(std::chrono::steady_clock::now() - t0).count(); if (rc != 0) { logLine("[", tag, "] samtools sort FAILED (exit ", rc, ") after ", std::fixed, std::setprecision(1), elapsed, "s"); return rc; } if (verbose >= 1) logLine("[", tag, "] sort done in ", std::fixed, std::setprecision(1), elapsed, "s"); return 0; } // ---------- dedup step ---------- struct DedupStats { std::size_t in_records = 0; // records read std::size_t kept = 0; // unique (qname, flag) per locus, written out std::size_t merged = 0; // duplicates folded into an earlier record's tags std::size_t tag_edits = 0; // number of bi/bz merges that actually changed tag double seconds = 0; }; // Boundary-aware comma-token union: adds any tokens in `incoming` that aren't // already in `cur` as comma-separated atoms. Mirrors stamp_tag() in // SvabaOutputWriter.cpp so the postprocess dedup produces exactly the same // bi:Z / bz:Z strings svaba run would have written if the two contributing // windows had been merged in-memory. // // Returns true iff cur was modified. bool mergeCommaTokens(std::string& cur, std::string_view incoming) { if (incoming.empty()) return false; if (cur.empty()) { cur.assign(incoming); return true; } bool changed = false; std::size_t s = 0; while (s <= incoming.size()) { std::size_t e = incoming.find(',', s); if (e == std::string_view::npos) e = incoming.size(); std::string_view tok = incoming.substr(s, e - s); if (!tok.empty()) { bool present = false; std::size_t pos = 0; while ((pos = cur.find(tok, pos)) != std::string::npos) { const bool left_ok = (pos == 0) || cur[pos - 1] == ','; const bool right_ok = (pos + tok.size() == cur.size()) || cur[pos + tok.size()] == ','; if (left_ok && right_ok) { present = true; break; } pos += tok.size(); } if (!present) { cur.push_back(','); cur.append(tok); changed = true; } } if (e == incoming.size()) break; s = e + 1; } return changed; } // Pull `tag` off `incoming` and union it into `existing`'s `tag`. Returns // true iff the existing record's tag string actually changed. bool mergeZTagInto(SeqLib::BamRecord& existing, const SeqLib::BamRecord& incoming, const char* tag) { std::string incoming_val; if (!incoming.GetZTag(tag, incoming_val) || incoming_val.empty()) return false; std::string cur; existing.GetZTag(tag, cur); if (!mergeCommaTokens(cur, incoming_val)) return false; existing.RemoveTag(tag); existing.AddZTag(tag, cur); return true; } // Streaming dedup + tag-merge. Reads in_bam, writes out_bam, collapses exact // (qname, flag) duplicates at the same (chr, pos). Duplicates are not simply // discarded: their bi:Z and bz:Z tags (the comma-joined alt-supporting and // all-supporting contig lists) are unioned into the first record's tags // using the same boundary-aware merge that stamp_tag() in // SvabaOutputWriter.cpp uses during `svaba run`. Since a duplicate record // typically comes from an overlapping assembly window, its bi/bz may name // a different contig than the first record — dropping it would lose that // support evidence. Requires input to be coord-sorted. // // Memory: O(reads at a single locus). The per-locus index and record buffer // are cleared whenever (chr, pos) advances, so even pathological pileups // only blow up transiently. DedupStats streamDedup(const std::string& in_bam, const std::string& out_bam, const SeqLib::BamHeader& out_hdr, const std::string& tag, int threads, int verbose) { using clock = std::chrono::steady_clock; DedupStats st; const auto t0 = clock::now(); auto last = t0; const off_t in_size = fileSize(in_bam); SeqLib::BamReader r; if (!r.Open(in_bam)) throw std::runtime_error("dedup: cannot open input " + in_bam); // Enable BGZF decompression thread pool on the reader. Must happen // after Open() (where fp_ is populated) and before the first Next(). // Typical 3–5x end-to-end speedup at threads=4..8 on dense BAMs, // because without it the main thread does every BGZF block inflate // sequentially. const int io_threads = std::max(1, threads); r.SetThreads(io_threads); SeqLib::BamWriter w; if (!w.Open(out_bam)) throw std::runtime_error("dedup: cannot open output " + out_bam); // Matching BGZF compression thread pool on the write side. The // output is the expensive half of this function — every kept record // goes through deflate — so pooling here matters most. w.SetThreads(io_threads); // Use the caller-supplied header (which already carries our @PG stamp) // rather than blindly mirroring the reader's — that's how postprocess // marks its output without a separate reheader pass for dedup suffixes. w.SetHeader(out_hdr); if (!w.WriteHeader()) throw std::runtime_error("dedup: cannot write header " + out_bam); // Per-locus buffer. We must hold records in insertion order so flush // preserves the original coord-sort: same (chr, pos) records keep whatever // secondary ordering samtools sort produced (qname-stable tiebreak). // // keep_buf[i] holds the record we're emitting for the i'th unique key. // idx_by_key[key] is that buffer index, used to fold duplicate tags into // the already-buffered record. std::vector keep_buf; std::unordered_map idx_by_key; keep_buf.reserve(64); idx_by_key.reserve(64); int32_t cur_chr = -2; // -2 is a sentinel that won't match any valid ChrID int32_t cur_pos = -2; // Cached display name for cur_chr. ChrName() hits the header every call, so // we resolve it only on (rare) chromosome change, not per record. std::string cur_chr_name = "*"; // When bucket_count() drifts beyond this threshold (after a pileup locus // inflates the map), flushLocus() swaps in a fresh small map instead of // calling clear(). See comment below for why this matters. constexpr std::size_t kBucketResetThreshold = 256; // Flush buffered records for the current locus in insertion order. // // Perf note: std::unordered_map::clear() is O(bucket_count), NOT O(size) // — it walks the entire bucket array to zero out each slot, even when // the map currently has 0 elements. The bucket array grows with the // max number of entries ever held and NEVER shrinks. So after one // pileup locus (centromere, simple repeat, HLA, etc.) bloats buckets // to ~130k, every subsequent locus transition — hundreds of millions // of them — pays a full memset of that inflated array. A perf profile // showed 95% of main-thread CPU going to this single memset before // this fix landed, explaining why the BGZF thread pools were starving. // // Fix: when the bucket count has grown past kBucketResetThreshold, // swap the inflated map with a fresh small one. The inflated map's // destructor pays the O(bucket_count) cost ONCE (on pileup exit) // instead of once per locus transition. Subsequent small loci see a // small bucket array and their clear() is fast. auto flushLocus = [&]() { for (auto& kept : keep_buf) { if (!w.WriteRecord(kept)) throw std::runtime_error("dedup: WriteRecord failed on " + out_bam); } keep_buf.clear(); if (idx_by_key.bucket_count() > kBucketResetThreshold) { std::unordered_map fresh; fresh.reserve(64); idx_by_key.swap(fresh); // `fresh` (now holding the inflated map) destructs at end of this // lambda — that's where we pay the one-time big memset. } else { idx_by_key.clear(); } }; while (auto opt = r.Next()) { SeqLib::BamRecord& rec = *opt; const int32_t chr = rec.ChrID(); const int32_t pos = rec.Position(); if (chr != cur_chr || pos != cur_pos) { flushLocus(); if (chr != cur_chr) { // Resolve name once per chromosome. Unmapped (chr == -1) stays "*". cur_chr_name = (chr >= 0) ? rec.ChrName(r.Header()) : std::string("*"); } cur_chr = chr; cur_pos = pos; } // Build the dedup key: qname + '\t' + decimal flag. Decimal keeps keys // ASCII / comparable across platforms; '\t' as the separator can never // appear inside a BAM qname. std::string key = rec.Qname(); key.push_back('\t'); { char buf[16]; const int n = std::snprintf(buf, sizeof(buf), "%u", rec.AlignmentFlag()); key.append(buf, n); } auto [it, inserted] = idx_by_key.try_emplace(std::move(key), keep_buf.size()); if (inserted) { // BamRecord is move-only (shared_ptr under the hood); move // it into the buffer so we transfer the htslib pointer without // ref-bumping. keep_buf.emplace_back(std::move(rec)); ++st.kept; } else { // Duplicate at same (chr, pos). Fold its bi/bz tags into the kept copy // so we don't drop alt/contig support from the overlapping window. We // read from rec here (still alive — only moved in the other branch). SeqLib::BamRecord& existing = keep_buf[it->second]; if (mergeZTagInto(existing, rec, "bi")) ++st.tag_edits; if (mergeZTagInto(existing, rec, "bz")) ++st.tag_edits; ++st.merged; } ++st.in_records; // Progress print every 25M reads. Was 1M originally, then 5M; post // BGZF-threading + bucket-clear fix the dedup runs fast enough that // 5M was firing too often on deep BAMs. 25M gives ~a screenful of // lines for a typical 100–500M-read WGS BAM. constexpr std::size_t PROGRESS_EVERY = 25'000'000ULL; if (verbose >= 1 && (st.in_records % PROGRESS_EVERY) == 0) { const auto now = clock::now(); const double elapsed = std::chrono::duration(now - t0).count(); const double dt = std::chrono::duration(now - last).count(); const double inst_rps = dt > 0 ? static_cast(PROGRESS_EVERY) / dt : 0.0; const double avg_rps = elapsed > 0 ? st.in_records / elapsed : 0.0; last = now; // Column widths chosen so the line never shifts as counters grow: // chr: 5 chars right-padded ("chr22" max) // : // pos: left-justified, with thousands separators // (flush against colon; human chr1 max "248,956,422" = 11 chars) // locus total padded to 17 so subsequent columns stay anchored. // counts: 11 chars right-aligned with thousands separators // (fits "999,999,999" = 9 figures + 2 commas) // rps: 6 chars "%6.2f" (up to 999.99 M/s) // elapsed 8 chars "%8.1f" (up to 99999.9 s ≈ 27 hr) // MiB: 7 chars (up to 9,999,999 MiB ≈ 10 TB) auto fmtN = [](std::size_t n) { std::ostringstream oss; oss << std::setw(11) << std::right << SeqLib::AddCommas(n); return oss.str(); }; // Locus = right-padded chr + ':' + left-justified comma'd pos. // Flush to 17 chars total so " | " lands at a fixed column regardless // of chr length or position magnitude. std::ostringstream locus_oss; locus_oss << std::setw(5) << std::right << cur_chr_name << ":" << SeqLib::AddCommas(cur_pos >= 0 ? cur_pos + 1 : 0); std::string locus_str = locus_oss.str(); if (locus_str.size() < 17) locus_str.append(17 - locus_str.size(), ' '); // Input-size hint for a coarse "how far into the job" feel. A true // ETA would need bytes-read from htslib, which SeqLib doesn't expose. std::string size_hint; if (in_size > 0) { std::ostringstream oss; oss << " (input " << std::setw(7) << std::right << (in_size / (1024 * 1024)) << " MiB)"; size_hint = oss.str(); } logLine("[", tag, "] dedup: at ", locus_str, " | ", fmtN(st.in_records), " reads | ", fmtN(st.kept), " kept, ", fmtN(st.merged), " merged (", fmtN(st.tag_edits), " tag-edits) | ", std::fixed, std::setprecision(2), std::setw(6), inst_rps / 1e6, "M/s last-25M, ", std::setw(6), avg_rps / 1e6, "M/s avg, ", std::setprecision(1), std::setw(8), elapsed, "s elapsed", size_hint); } } // Final locus flush. flushLocus(); if (!w.Close()) throw std::runtime_error("dedup: writer Close failed on " + out_bam); st.seconds = std::chrono::duration(clock::now() - t0).count(); return st; } // ---------- per-suffix pipeline ---------- // Move one file to another atomically within the same filesystem, via // std::rename. Throws on failure so the caller can decide what to do. void renameOrThrow(const std::string& from, const std::string& to) { if (std::rename(from.c_str(), to.c_str()) != 0) { throw std::runtime_error("rename " + from + " -> " + to + " failed: " + std::strerror(errno)); } } bool isDedupSuffix(const std::string& s) { for (const auto& d : kDedupSuffixes) if (d == s) return true; return false; } // Run the full sort + dedup + reheader + index pipeline for a single suffix. // Safe to invoke from its own thread. Never throws out — caller joins; any // failure is logged and the pipeline aborts for this suffix only. // // End state on success: the file at ${id}.${suffix}.bam is the final output, // coord-sorted, dedup-collapsed (for dedup-eligible suffixes), @PG-stamped, // and accompanied by a ${id}.${suffix}.bam.bai index. All intermediate // filenames use a .postprocess.*.tmp.bam suffix so anything left behind on // failure is obviously transient and trivially cleanable. // do_finalize controls whether the dedup + reheader + index phase runs. // Phase-splitting the driver lets sort run in parallel across suffixes // (narrow thread budget each) and dedup run serially with the full thread // budget, which is what the user wants since htslib BGZF pools are // per-file — sharing them across concurrent workers oversubscribes. void processSuffix(const std::string& id, const std::string& suffix, int per_job_threads, const std::string& mem, bool do_sort, bool do_dedup, bool do_finalize, const std::string& cl, int verbose) { const std::string bam = id + "." + suffix + ".bam"; // Intermediate temp files. Named so there's no ambiguity about the step // that produced them — anything matching .postprocess.*.tmp.bam is safe // to remove after the run is done. const std::string sort_tmp = id + "." + suffix + ".postprocess.sort.tmp.bam"; const std::string dedup_tmp = id + "." + suffix + ".postprocess.dedup.tmp.bam"; auto cleanup_tmps = [&]() { ::unlink(sort_tmp.c_str()); ::unlink(dedup_tmp.c_str()); }; if (!fileExists(bam)) { logLine("[", suffix, "] skipping: ", bam, " not found"); return; } bool pg_stamped = false; try { // --- Sort ----------------------------------------------------------- // Skip the sort step if the BAM already declares itself coordinate- // sorted. Cheap O(header) check; turns a repeat postprocess run on // an already-postprocessed BAM into an effectively instant no-op // for this suffix. Lets users pass --skip-dedup at the shell layer // (or --sort-only from the C++ CLI) and rerun without paying 30+s // per suffix for a redundant sort. if (do_sort && isCoordinateSorted(bam)) { logLine("[", suffix, "] already coordinate-sorted (per @HD SO:coordinate); " "skipping sort"); } else if (do_sort) { const int rc = runSort(bam, sort_tmp, per_job_threads, mem, suffix, verbose); if (rc != 0) throw std::runtime_error("samtools sort exited " + std::to_string(rc)); renameOrThrow(sort_tmp, bam); } if (!do_finalize) { // Caller wants sort-only (the parallel Phase 1 of the driver); leave // dedup + reheader + index to the caller's Phase 2 invocation. This // split exists so Phase 2 can run serially with the full thread // budget dedicated to BGZF read/write pooling per BAM, instead of // fragmenting threads across concurrent workers. return; } // Read the current header ONCE and reuse it for both the PG-idempotency // check and (if we do run dedup) the stamped output header. Avoids a // second BAM open just to look up PG state. const SeqLib::BamHeader existing_hdr = readHeaderOnly(bam); const std::string existing_txt = existing_hdr.AsString(); const bool already_postprocessed = hasSvabaPostprocessPg(existing_txt); // --- Dedup (also stamps PG on the way) ------------------------------ if (do_dedup && isDedupSuffix(suffix) && !already_postprocessed) { if (verbose >= 1) logLine("[", suffix, "] starting dedup on ", bam); // Append our @PG line to the existing header text, then hand the // stamped header to the writer. This is free — dedup is already // rewriting the file, so we avoid a separate reheader pass. const SeqLib::BamHeader stamped = SeqLib::BamHeader(appendSvabaPostprocessPg(existing_txt, cl)); const DedupStats ds = streamDedup(bam, dedup_tmp, stamped, suffix, per_job_threads, // BGZF read/write pool size verbose); renameOrThrow(dedup_tmp, bam); pg_stamped = true; logLine("[", suffix, "] dedup complete: ", ds.in_records, " in, ", ds.kept, " kept, ", ds.merged, " merged (", (ds.in_records ? 100.0 * ds.merged / static_cast(ds.in_records) : 0.0), "% dup, ", ds.tag_edits, " bi/bz tag-edits) in ", std::fixed, std::setprecision(1), ds.seconds, "s"); } else if (do_dedup && isDedupSuffix(suffix) && already_postprocessed) { // BAM has already been through svaba_postprocess. Skip the expensive // dedup rewrite AND the reheader below — PG is already stamped. logLine("[", suffix, "] already has svaba_postprocess @PG in header; " "skipping dedup (rerun-safe no-op)"); pg_stamped = true; } else if (do_dedup && !isDedupSuffix(suffix)) { if (verbose >= 2) logLine("[", suffix, "] dedup skipped (not a dedup suffix)"); } // --- Reheader to stamp @PG for any suffix that didn't go through ----- // --- dedup (e.g. `contigs`, or anything under --sort-only). Also ----- // --- skipped when `already_postprocessed` set `pg_stamped` above ----- // --- (nothing to add to an already-PG-stamped header). ----- if (!pg_stamped && !already_postprocessed) { const int rc = reheaderBamWithPg(bam, cl, suffix, verbose); if (rc != 0) throw std::runtime_error("reheader failed with rc " + std::to_string(rc)); } // --- Index ---------------------------------------------------------- // Index last so the .bai matches the BGZF offsets of the final file. // Any earlier index would be invalidated by the dedup/reheader rewrite. // Always runs — even on a rerun, the .bai may be missing or stale // (e.g. if the user renamed the BAM after a previous run). Cheap op. (void) indexBam(bam, suffix, verbose); } catch (const std::exception& e) { logLine("[", suffix, "] ERROR: ", e.what()); cleanup_tmps(); } } } // namespace void runPostprocess(int argc, char** argv) { // Reconstruct the invocation string for the @PG CL: tag BEFORE parseOpts // consumes argv via getopt_long. We prepend "svaba" so the CL in the // final BAM headers reads as the user actually typed it (the dispatch in // svaba.cpp strips the "svaba" token before calling us). std::string cl = "svaba"; for (int i = 0; i < argc; ++i) { cl.push_back(' '); cl += argv[i]; } const Opts o = parseOpts(argc, argv); // Pick active suffixes — only the ones whose BAM actually exists. No point // reserving a thread budget slice for a missing file. std::vector active; for (const auto& s : kAllSuffixes) { const std::string bam = o.id + "." + s + ".bam"; if (fileExists(bam)) active.push_back(s); } if (active.empty()) { std::cerr << "No BAMs found for ID '" << o.id << "' (checked suffixes: "; for (size_t i = 0; i < kAllSuffixes.size(); ++i) { if (i) std::cerr << ", "; std::cerr << kAllSuffixes[i]; } std::cerr << ")" << std::endl; return; } // Split the thread budget across concurrent suffix jobs, matching the // shell script's behavior: floor(THREADS / n_active), min 1. If threads < // n_active, cap concurrency to threads so we don't oversubscribe. const int n_active = static_cast(active.size()); const int max_parallel = std::min(o.threads, n_active); const int per_job_sort_t = std::max(1, o.threads / n_active); if (o.verbose >= 1) { std::ostringstream act; for (size_t i = 0; i < active.size(); ++i) { if (i) act << " "; act << active[i]; } std::cerr << "svaba postprocess: id=" << o.id << " threads=" << o.threads << " mem=" << o.mem << " parallel=" << max_parallel << " per-job-sort-threads=" << per_job_sort_t << " sort=" << (o.dedup_only ? "off" : "on") << " dedup=" << (o.sort_only ? "off" : "on") << "\n active: " << act.str() << std::endl; } // One-shot note so users don't chase the htslib "[E::idx_find_and_load]" // lines that will appear below. Those come from SeqLib::BamReader::Open // (called by streamDedup and by readHeaderOnly inside reheaderBamWithPg) // eagerly trying to load a .bai that doesn't exist yet — we sort first, // then rewrite (dedup or reheader), then build the .bai at the very end. // Every read path here is sequential, so the missing index is irrelevant // to correctness. We print this once, before spawning workers, and leave // htslib's own logging alone so genuine warnings (corrupt records, // permission errors, out-of-space, etc.) still surface visibly. std::cerr << "svaba postprocess: NOTE — the following " "\"[E::idx_find_and_load] Could not retrieve index file ...\" " "lines from htslib are expected and can be ignored. " ".bai files are built as the final step of each suffix's " "pipeline, not before the read passes that produce them." << std::endl; // Two-phase execution: // // Phase 1 (PARALLEL): run samtools sort across all active suffixes // concurrently. Sort is disk+CPU bound and perfectly parallelizable // across files, so each worker gets `per_job_sort_t = o.threads / // n_active` threads — total thread usage ≈ o.threads. // // Phase 2 (SERIAL): dedup + reheader + index, one suffix at a time, // each with the FULL `o.threads` budget for its BGZF read/write // pool. Running the dedup phase in parallel would fragment the // thread budget (4 suffixes × 2 threads/pool = 2× oversubscription // once you count read+write pools per suffix), yielding worse wall // time than serial-with-wide-pools because BGZF parallelism has // diminishing returns — 8 threads get ~5x vs single-thread, but 4 // parallel workers with 2 threads each get only 4 × 1.8x / 4 ≈ 1.8x // effective per-BAM. // // Each phase is itself idempotent: Phase 1 skips sort when the BAM is // already @HD SO:coordinate; Phase 2 skips dedup when the header // already carries a `svaba_postprocess` @PG line. Rerunning a // completed postprocess is essentially instant. // --- Phase 1: parallel sort ---------------------------------------- if (!o.dedup_only) { if (o.verbose >= 1) std::cerr << "svaba postprocess: phase 1/2 — parallel sort across " << active.size() << " suffixes (" << per_job_sort_t << " threads each)" << std::endl; std::vector workers; workers.reserve(active.size()); for (const auto& suffix : active) { workers.emplace_back( processSuffix, o.id, suffix, per_job_sort_t, o.mem, /*do_sort=*/ true, /*do_dedup=*/ false, // deferred to phase 2 /*do_finalize=*/false, // phase 1 exits right after sort cl, o.verbose); } for (auto& t : workers) t.join(); } // --- Phase 2: serial dedup + reheader + index ---------------------- // `o.threads` per invocation — one BAM at a time gets the whole budget. if (o.verbose >= 1) std::cerr << "svaba postprocess: phase 2/2 — serial dedup+reheader+index" << " (" << o.threads << " threads per BAM)" << std::endl; for (const auto& suffix : active) { processSuffix( o.id, suffix, o.threads, // full BGZF pool budget o.mem, /*do_sort=*/ false, // already sorted in phase 1 (or skipped by --dedup-only) /*do_dedup=*/ !o.sort_only, /*do_finalize=*/true, cl, o.verbose); } if (o.verbose >= 1) std::cerr << "svaba postprocess: all suffixes done (sorted" << (o.sort_only ? "" : ", deduped where applicable") << ", PG-stamped, indexed)" << std::endl; } ================================================ FILE: src/svaba/SvabaPostprocess.h ================================================ #pragma once // Post-process svaba output BAMs: coordinate-sort via samtools, then run a // native streaming dedup on the suffixes that can accumulate exact duplicate // records from overlapping assembly windows (weird, corrected, discordant). // // Replaces the slow path of sort_output.sh, which went through // `samtools view | awk | samtools view` — that pipeline decompresses every // record to SAM text, maintains a large awk hash, and recompresses on the // way out. This module keeps everything in native htslib / SeqLib records // and resets the dedup set at every locus boundary, so memory is O(reads // per locus) and throughput is close to what the disk+decoder can sustain. // // Scope: // - Sort → shell out to `samtools sort` (already highly tuned; htslib // doesn't expose its sort as a library call). // - Dedup → native streaming, (qname, flag) keyed, per-locus reset. // Stamps an @PG line onto the output header as a free // side-effect of rewriting the file. // - Reheader → for suffixes that don't go through dedup (e.g. `contigs`, // or anything under --sort-only), shell out to // `samtools reheader` to stamp the same @PG line. Streams the // BGZF body as opaque blocks — cheap. // - Index → native `sam_index_build` (htslib) producing a .bai // alongside every final BAM. // - Per-suffix parallelism via std::thread; suffixes run independently. // // End state: ${ID}.${suffix}.bam is the single authoritative output per // suffix — sorted, deduped (where applicable), @PG-stamped, and indexed. // Intermediate files use a .postprocess.*.tmp.bam suffix and are cleaned up // on both success (rename-over) and failure (best-effort unlink). // // Explicitly NOT in scope here (still in sort_output.sh): // - thread-BAM merging (pre-svaba-postprocess step) // - SPLIT_BY_SOURCE qname-prefix demultiplexing // // CLI: svaba postprocess -i [-t THREADS] [-m MEM] [-v V] // [--sort-only | --dedup-only] void runPostprocess(int argc, char** argv); ================================================ FILE: src/svaba/SvabaRead.cpp ================================================ #include "SvabaRead.h" #include // bam_get_seq, bam_seqi svabaRead::svabaRead() = default; void svabaRead::AddR2C(const std::string& contig_name, const r2c& r) { auto it = m_r2c.find(contig_name); if(it != m_r2c.end()) it->second = r; else m_r2c.insert({contig_name, r}); // add as a tag to the read //TODO } r2c svabaRead::GetR2C(const std::string& contig_name) const { //assert(m_r2c); R2CMap::const_iterator ff = m_r2c.find(contig_name); assert(ff != m_r2c.end()); return m_r2c.find(contig_name)->second; } int svabaRead::CorrectedSeqLength() const { if (seq_corrected.length()) return seq_corrected.length(); else return Length(); } std::ostream& operator<<(std::ostream& out, const r2c& a) { out << "[" << a.start_on_contig << "," << a.end_on_contig << "] -- " << "[" << a.start_on_read << "]" << a.cig; return out; } void svabaRead::QualityTrimRead() { int32_t startpoint = 0, endpoint = 0; QualityTrimmedSequence(3, startpoint, endpoint); int32_t new_len = endpoint - startpoint; if (endpoint != -1 && new_len < Length() && new_len > 0 && new_len - startpoint >= 0 && startpoint + new_len <= Length()) { try { SetCorrectedSeq(Sequence().substr(startpoint, new_len)); } catch (...) { std::cerr << "Subsequence failure with sequence of length " << Sequence().length() << " and startpoint " << startpoint << " endpoint " << endpoint << " newlen " << new_len << std::endl; } } else { SetCorrectedSeq(Sequence()); // copies the sequence into private "seq" char } // remove the HTSlib version of qual and sequence // since we store the trimmed sequence in svabaRead //SetSequence(std::string()); } svabaRead::svabaRead(const SeqLib::BamRecord& r, std::string_view prefix) : SeqLib::BamRecord() // base class ctor will init `b` to nullptr { // bam_dup1 will allocate-and-copy a new bam1_t for us: bam1_t* dup = bam_dup1(r.raw()); if (!dup) throw std::runtime_error("svabaRead: failed to duplicate BamRecord"); // wrap it in your shared-ptr with the proper deleter b = SeqPointer(dup, SeqLib::Bam1Deleter()); // now copy over your svabaRead-specific prefix assert(prefix.size() >= 4); p.assign(prefix); } std::string svabaRead::Prefix() const { assert(p.c_str()[0]=='t' || p.c_str()[0] == 'n'); return p; //std::string(p, 4); } std::string svabaRead::CorrectedSeq() const { if (!seq_corrected.length()) return Sequence(); else return seq_corrected; } bool svabaRead::CorrectedSeqChanged() const { // If seq_corrected was never set, it's empty → CorrectedSeq() would // return Sequence(), so by definition nothing changed. if (seq_corrected.empty()) return false; // Fast path: length mismatch means quality trimming shortened the read. const int32_t bam_len = Length(); // b->core.l_qseq if (static_cast(seq_corrected.size()) != bam_len) return true; // Same length: compare seq_corrected against the BAM's 4-bit encoding // character by character, without allocating a Sequence() string. const uint8_t* seq_enc = bam_get_seq(raw()); for (int32_t i = 0; i < bam_len; ++i) { if (seq_corrected[i] != BASES[bam_seqi(seq_enc, i)]) return true; } return false; } void svabaRead::SetCorrectedSeq(std::string_view nseq) { seq_corrected = nseq; } std::string svabaRead::UniqueName() const { return(p + "_" + std::to_string(AlignmentFlag()) + "_" + Qname()); } ================================================ FILE: src/svaba/SvabaRead.h ================================================ #pragma once #include "SeqLib/BamRecord.h" #include #include #include using SeqLib::BamRecordPtr; using SeqLib::BamRecordPtrVector; /** Store information about a read to contig alignment */ struct r2c { int32_t start_on_contig = 0; // start pos on contig (from r.Position()) int32_t end_on_contig = 0; // end pos on contig (from r.PositionEnd()) int32_t start_on_read = 0; // start pos on read (from r.AlignmentPosition()) int32_t end_on_read = 0; // end pos on read (from r.AlignmentPosition()) bool rc = false; // reverse complement wrt contig? SeqLib::Cigar cig; // cigar of read to contig bool supports_var = false; // does this support a variant? bool is_split = false; // is this a split read? int left_or_right = 0; //-1 read aligns on left of contig, 1 on right bool supports_discordant = false; // true if this is part of a discordant pair that supports the break // SvABA2.0: NM tag on the r2c alignment (edit distance to contig). // -1 sentinel means "not set" (legacy paths that filled r2c without // going through AddAlignment). Surfaced in alignments.txt.gz so the // human-readable dump shows per-read edit distance to the contig. int32_t nm = -1; void AddAlignment (const BamRecordPtr& b) { start_on_contig = b->Position(); end_on_contig = b->PositionEnd(); start_on_read = b->AlignmentPosition(); cig = b->GetCigar(); int _nm = 0; if (b->GetIntTag("NM", _nm)) nm = _nm; } friend std::ostream& operator<<(std::ostream& out, const r2c& a); }; typedef std::unordered_map R2CMap; class svabaRead; typedef std::shared_ptr svabaReadPtr; typedef std::vector svabaReadPtrVector; class svabaRead : public SeqLib::BamRecord { public: svabaRead(); svabaRead(const SeqLib::BamRecord& r, std::string_view prefix); // Delete the copy constructor svabaRead(const svabaRead&) = delete; // Optionally also delete copy assignment svabaRead& operator=(const svabaRead&) = delete; // Still allow move operations: svabaRead(svabaRead&&) = default; svabaRead& operator=(svabaRead&&) = default; std::string CorrectedSeq() const; /// True if BFC correction or quality trimming changed the read sequence /// relative to the original BAM record. When false, the original BAM's /// CIGAR/NM is a valid native alignment (assuming the same aligner). /// Compares the stored seq_corrected against the BAM 4-bit encoding /// without constructing a second string for the original. bool CorrectedSeqChanged() const; std::string Prefix() const; void SetPrefix(const std::string_view pref) { p = pref; } void SetCorrectedSeq(const std::string_view nseq); std::string UniqueName() const; int GetDD() const { return dd; } void SetDD(int d) { dd = d; } bool Tumor() const { return p[0] == 't'; } int SeqLength() const; void AddR2C(const std::string& contig_name, const r2c& r); r2c GetR2C(const std::string& contig_name) const; /// Does this read have any r2c alignments? bool HasR2C() const { return !m_r2c.empty(); } /// Trim the read based on quality score and store seq in char void QualityTrimRead(); int CorrectedSeqLength() const; // discordant read status // < 0 is bad discordant read (see DiscordantRealigner.h) // == 0 not discordant // 1 = good int dd = 0; // SvABA2.0: post-BFC re-alignment of the *corrected* read sequence to the // reference, populated by SvabaRegionProcessor before assembly. The point // is to give BreakPoint::splitCoverage's "r2c better than native" gate // an apples-to-apples comparison: both sides use the corrected read // sequence and the same BWA-MEM parameters that svaba uses internally, // rather than mixing svaba-corrected r2c against the input BAM's // pre-correction CIGAR/NM (which was the source of an asymmetric gate // letting reads with mirror r2c indels through as variant supporters). // // Sentinel: corrected_native_nm == -1 means "not populated" (e.g. read // with to_assemble == false, or empty corrected sequence). In that case // splitCoverage falls back to GetCigar()/GetIntTag("NM",...) on the // original BAM record. SeqLib::Cigar corrected_native_cig; int32_t corrected_native_nm = -1; friend class svabaBamWalker; bool to_assemble = true; private: std::string p; // prefix for file ID (e.g. t001) bool train = false; std::string seq_corrected; // quality trimmed and/or error corrected // store the r2c alignment information. key is contig name R2CMap m_r2c; }; typedef std::vector svabaReadVector; ================================================ FILE: src/svaba/SvabaRegionProcessor.cpp ================================================ #include "SvabaRegionProcessor.h" extern "C" { #include "fml.h" } #include // For std::setw and std::right #include // For std::ostringstream #include #include // For memset #include "SvabaDebug.h" #include "SvabaUtils.h" #include "SvabaOutputWriter.h" #include "ContigAlignmentScore.h" #include "SeqLib/BWAAligner.h" #include "SeqLib/GenomicRegion.h" #include "SeqLib/GenomicRegionCollection.h" #include "SeqLib/BFC.h" #include "SeqLib/BamRecord.h" #include "SvabaRead.h" #include "SvabaAssemblerEngine.h" using SeqLib::GenomicRegion; using SeqLib::GRC; using SeqLib::AddCommas; using SeqLib::BFC; using SeqLib::BamRecordVector; using SeqLib::CigarMap; using SeqLib::UnalignedSequenceVector; using SeqLib::BWAIndexPtr; using SeqLib::BWAAligner; using SeqLib::BWAIndex; using SeqLib::BamRecordPtr; using SeqLib::BamRecordPtrVector; using std::vector; using std::unordered_map; using std::unordered_set; using std::string; #include "SvabaAssemblerConfig.h" // --------------------------------------------------------------------------- // Alt-contig demotion: after BWA aligns a contig, prefer standard-chromosome // placements over alt/decoy when the alignment quality is comparable. // // BWA-MEM sometimes places a contig fragment on an alt contig (e.g. // chr11_JH159136v1_alt) when chr11 proper has an equally good alignment. // If the alt later gets blacklisted, the real breakpoint is lost. Fix: for // each primary/supplementary fragment on a non-standard chr, check if a // secondary on a standard chr covers the same query range with comparable // AS. If so, swap their SAM flags so the standard-chr placement becomes // the active fragment and the alt-chr one becomes a secondary. // --------------------------------------------------------------------------- namespace { // Query interval [start, end) consumed by an alignment, in contig // coordinates. Uses the CIGAR to find leading/trailing soft-clip // (hardclip=false so all clips are soft). inline std::pair queryInterval(const SeqLib::BamRecord& r) { const auto cig = r.GetCigar(); int lead_clip = 0, trail_clip = 0, qlen = r.Length(); if (cig.size() > 0) { if (cig.front().Type() == 'S') lead_clip = cig.front().Length(); if (cig.size() > 1 && cig.back().Type() == 'S') trail_clip = cig.back().Length(); } return {lead_clip, qlen - trail_clip}; } // Reciprocal overlap fraction between two intervals. inline double reciprocalOverlap(std::pair a, std::pair b) { int ov = std::max(0, std::min(a.second, b.second) - std::max(a.first, b.first)); int la = a.second - a.first, lb = b.second - b.first; if (la <= 0 || lb <= 0) return 0.0; return std::min(static_cast(ov) / la, static_cast(ov) / lb); } // Number of swaps performed (for logging). size_t preferStandardChromosomes(BamRecordPtrVector& alns, int maxStdChr) { if (maxStdChr < 0) return 0; // --non-human: no preference size_t n_swaps = 0; for (size_t i = 0; i < alns.size(); ++i) { auto& aln = alns[i]; if (!aln || !aln->MappedFlag()) continue; if (aln->SecondaryFlag()) continue; // only consider primary/supp if (aln->ChrID() <= maxStdChr) continue; // already on a standard chr int32_t orig_as = 0; aln->GetIntTag("AS", orig_as); auto orig_qi = queryInterval(*aln); size_t best_j = SIZE_MAX; int32_t best_as = -1; for (size_t j = 0; j < alns.size(); ++j) { auto& sec = alns[j]; if (!sec || !sec->MappedFlag()) continue; if (!sec->SecondaryFlag()) continue; // must be a secondary if (sec->ChrID() > maxStdChr) continue; // also non-standard int32_t sec_as = 0; sec->GetIntTag("AS", sec_as); // Must be within 5% of the non-standard alignment's AS if (orig_as > 0 && sec_as < static_cast(orig_as * 0.95)) continue; // Must cover similar query range (>= 80% reciprocal overlap) if (reciprocalOverlap(orig_qi, queryInterval(*sec)) < 0.80) continue; if (sec_as > best_as) { best_as = sec_as; best_j = j; } } if (best_j != SIZE_MAX) { auto& promoted = alns[best_j]; SVABA_TRACE(aln->Qname(), "ALT_DEMOTION: chr" << aln->ChrID() << " AS=" << orig_as << " -> chr" << promoted->ChrID() << " AS=" << best_as << (aln->SupplementaryFlag() ? " (supp)" : " (pri)")); // Swap SAM flags: demote non-standard to secondary, // promote standard to the role the non-standard held. bool was_supp = aln->SupplementaryFlag(); // Demote: secondary=1, supplementary=0 aln->raw()->core.flag |= BAM_FSECONDARY; aln->raw()->core.flag &= ~BAM_FSUPPLEMENTARY; // Promote: secondary=0, supplementary=was_supp promoted->raw()->core.flag &= ~BAM_FSECONDARY; if (was_supp) promoted->raw()->core.flag |= BAM_FSUPPLEMENTARY; else promoted->raw()->core.flag &= ~BAM_FSUPPLEMENTARY; ++n_swaps; } } return n_swaps; } } // anon namespace SvabaRegionProcessor::SvabaRegionProcessor(SvabaSharedConfig& sh_cf) : sc(sh_cf) { } GRC SvabaRegionProcessor::runMateCollectionLoop(const GenomicRegion& region, svabaThreadUnit& stu) { // store the newly found bad mate regions GRC this_bad_mate_regions; MateRegionVector all_somatic_mate_regions; // add the origional, don't want to double back all_somatic_mate_regions.add(MateRegion(region.chr, region.pos1, region.pos2)); // collect together mate regions from control MateRegionVector normal_mate_regions; for (const auto& [key, walker] : stu.walkers) { if (!key.empty() && key[0] == 'n') { normal_mate_regions.Concat(walker->mate_regions); } } normal_mate_regions.MergeOverlappingIntervals(); normal_mate_regions.CreateTreeMap(); // get the mates from somatic 3+ mate regions // that don't overlap with normal mate region MateRegionVector somatic_mate_regions; for (const auto& [key, walker] : stu.walkers) { if (!key.empty() && key[0] == 't') { for (const auto& i : walker->mate_regions) { if (i.count >= sc.opts.mateLookupMin && !normal_mate_regions.CountOverlaps(i) && //!stu.badd.CountOverlaps(i) && //TODO - don't use this anymore (sc.blacklist.empty() || !sc.blacklist.CountOverlaps(i))) { somatic_mate_regions.add(i); } } } } somatic_mate_regions.MergeOverlappingIntervals(); // if none, then we're done if (somatic_mate_regions.size() == 0) return GRC(); // print out to log for (auto& i : somatic_mate_regions) sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, "......mate region ", i.ToString(sc.header) , " case read count that triggered lookup: ", i.count); // convert MateRegionVector to GRC GRC somatic_mate_region_collection; for (const auto& s : somatic_mate_regions) somatic_mate_region_collection.add( GenomicRegion(s.chr, s.pos1, s.pos2, s.strand)); somatic_mate_region_collection.MergeOverlappingIntervals(); somatic_mate_region_collection.CreateTreeMap(); // convert MateRegionVector to GRC GRC gg; for (auto& s : somatic_mate_regions) gg.add(GenomicRegion(s.chr, s.pos1, s.pos2, s.strand)); // collect the reads for this round for (auto& [key, walker] : stu.walkers) { const int before = walker->reads.size(); walker->m_limit = sc.opts.mate_region_lookup_limit; if (!walker->SetRegions(gg)) continue; walker->get_coverage = false; walker->get_mate_regions = false; walker->mate_regions.clear(); auto prior_end = walker->reads.end(); GRC bad = walker->readBam(stu); // reset walker->m_limit = sc.opts.weird_read_limit; walker->get_coverage = true; walker->get_mate_regions = true; //stu.badd.Concat(bad); //stu.badd.MergeOverlappingIntervals(); //stu.badd.CreateTreeMap(); assert(!key.empty()); auto& count = (key[0] == 't') ? stu.st.mate_read_count.first : stu.st.mate_read_count.second; count += walker->reads.size() - before; } sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, "......Mate region reads: : <", stu.st.mate_read_count.first, ",", stu.st.mate_read_count.second, ">"); return somatic_mate_region_collection; } bool SvabaRegionProcessor::process(const SeqLib::GenomicRegion& region, svabaThreadUnit& unit, size_t threadId) { // SvABA2.0: are any dump-reads BAMs going to be written? Used to skip // bi:Z and bz:Z tag bookkeeping on the read hot path when no dump // output is requested — the tags feed only the weird/discordant/ // corrected BAM writers in SvabaOutputWriter, so under the default // production command line (no --dump-reads) the tag work is pure // waste. Declared at function scope so both the r2c-alignment // (bz:Z) and BP-finalization (bi:Z) blocks see it. const bool need_read_tags = sc.opts.dump_weird_reads || // compile-time constexpr sc.opts.dump_discordant_reads || // both flip together under sc.opts.dump_corrected_reads; // --dump-reads // count for this unit unit.processed_count++; sc.total_regions_done++; if (sc.total_regions_done % 250 == 0) { std::ostringstream msg; msg << "...processing " << std::right << std::setw(5) << SeqLib::AddCommas(sc.total_regions_done) << " of " << std::right << std::setw(6) << SeqLib::AddCommas(sc.total_regions_to_process) << " for thread " << std::right << std::setw(2) << unit.threadId << " for region " << region; sc.logger.log(true, true, msg.str()); } sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, "===Running region ", region.ToString(sc.header), " on thread ", unit.threadId); // start a new timer unit.st = svabaUtils::svabaTimer(); unit.st.gr = region; unit.st.start(); // get the reference sequence of the local region string lregion; try { lregion = unit.ref_genome->QueryRegion(sc.header.IDtoName(region.chr), region.pos1, region.pos2); } catch (...) { std::cerr << " Caught exception for lregion with reg " << region.ToString(sc.header); lregion = ""; } std::vector> repeats_to_avoid = svabaUtils::find_repeats(lregion, 20,10); SeqLib::GRC local_blacklist; for (auto& [key, walker] : unit.walkers) { for (const auto& [st, sp] : repeats_to_avoid) { walker->local_blacklist.add(GenomicRegion(region.chr, region.pos1 + st, region.pos1 + sp)); } walker->local_blacklist.MergeOverlappingIntervals(); walker->local_blacklist.CreateTreeMap(); } if (repeats_to_avoid.size()) sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, " found ref repeats at"); //debug for (const auto& [st,sp] : repeats_to_avoid) { sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, " ",region.ChrName(sc.header), ":",region.pos1 + st, "-",region.pos1+sp); } // holder for Bam: (read : cigar) unordered_map cigmap; // loop all of the BAMs (walkers) CountPair read_counts = {0,0}; //tumor, normal for (auto& [key, walker] : unit.walkers) { // Set regions based on command-line region or file-defined intervals if (!region.IsEmpty()) walker->SetRegion(region); else if (!sc.file_regions.empty()) walker->SetRegions(sc.file_regions); // else: walk entire BAM (default) sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, "---running svabaBamWalker", *walker); // reset the walker params walker->m_limit = sc.opts.weird_read_limit; walker->get_coverage = true; walker->get_mate_regions = true; SeqLib::GRC bad = walker->readBam(unit); //unit.badd.Concat(bad); sc.logger.log(sc.opts.verbose > 3, false, "...finished reading, found ", bad.size(), " bad regions"); // TODO - right now we don't do anything with these bad regions //unit.badd.MergeOverlappingIntervals(); //unit.badd.CreateTreeMap(); // Update read count based on sample type auto& count = (key[0] == 't') ? unit.st.weird_read_count.first : unit.st.weird_read_count.second; count += walker->reads.size(); // Store CIGARs cigmap[key] = walker->cigmap; //debug // for (const auto& [walker_name,cm] : cigmap) { // for (const auto& [key, ccount] : cm) { // std::cerr << "Walker: " << walker_name << " key: " << // key << " count " << ccount << std::endl; // } // } } //end BAM loop sc.logger.log(sc.opts.verbose > 1, sc.opts.verbose_log, "...main region reads ", "<", unit.st.weird_read_count.first, ",", unit.st.weird_read_count.second, ">"); // adjust counts and timer unit.st.stop("r"); // get the mate reads, if this is local assembly and has insert-size distro GRC mate_regions_for_native; if (!region.IsEmpty()) { mate_regions_for_native = runMateCollectionLoop(region, unit); unit.st.stop("m"); } // do the discordant read clustering sc.logger.log(sc.opts.verbose > 1, false, "...discordant read clustering"); // tag the reads by discordant status svabaReadPtrVector all_discordant_reads; for (auto& [_, walker] : unit.walkers) { //walker->RealignDiscordants(unit); for (auto& r : walker->reads) { if (r->dd > 0) all_discordant_reads.push_back(r); } } unit.st.dc_read_count = all_discordant_reads.size(); // do the discordant read clustering across BAMs DiscordantClusterMap dmap = DiscordantCluster::clusterReads(all_discordant_reads, region, sc.header); all_discordant_reads.clear(); unit.st.dc_cluster_count = dmap.size(); // add the discordant clusters to the svabathreadunit for writing later unit.m_disc.insert(dmap.begin(), dmap.end()); // for dumping all reads (weird BAM and/or discordant BAM) if (sc.opts.dump_weird_reads || sc.opts.dump_discordant_reads) { for (auto& [_, dc] : dmap) { dc.labelReads(); // add the discordantcluster label to the read } for (const auto& [_, walker] : unit.walkers) { unit.all_weird_reads.insert(unit.all_weird_reads.end(), walker->reads.begin(), walker->reads.end()); } } // do the discordant read clustering sc.logger.log(sc.opts.verbose > 1, false, "...error correcting"); // do kmer correction — pooled across all walkers (tumor + normal) // so BFC sees the combined k-mer spectrum for better error/signal // discrimination. Matches old svaba behavior. Single Train + single // ErrorCorrect instead of per-walker, halving the BFC cost. // // The BFC object lives on the thread unit (unit.pooled_bfc) so its // k-mer hash table (1M sub-tables at l_pre=20) persists across // regions. On the first Train(), fml_count allocates all 1M tables; // on subsequent calls, fml_count_into clears and reuses them via // kh_clear (memset of flags), eliminating ~2M malloc/free calls // per region — measured at 47% of worker time before this fix. if (sc.opts.ecCorrectType == "f") { // Lazy-init the per-thread BFC on first use if (!unit.pooled_bfc) unit.pooled_bfc = std::make_unique(); BFC& bfc = *unit.pooled_bfc; // Phase 1: pool all training reads + weird reads for (auto& [_, walker] : unit.walkers) { for (const auto& u : walker->train_reads) bfc.AddSequence(u.Seq, "", u.Name); for (const auto& r : walker->reads) { if (!r->to_assemble) continue; bfc.AddSequence(r->CorrectedSeq(), "", r->UniqueName()); } } // Phase 2: train (reuses hash on 2nd+ call), then re-add // only correctable reads and run error correction bfc.Train(); bfc.ClearReads(); for (auto& [_, walker] : unit.walkers) { for (const auto& r : walker->reads) { if (!r->to_assemble) continue; bfc.AddSequence(r->CorrectedSeq(), "", r->UniqueName()); } } bfc.ErrorCorrect(); // Phase 3: drain corrected sequences and distribute back std::unordered_map corrected_by_name; std::string s, nm; while (bfc.GetSequence(s, nm)) corrected_by_name.emplace(std::move(nm), std::move(s)); // Clear reads from the BFC (hash stays alive for next region) bfc.ClearReads(); size_t num_reads_corrected = 0; for (auto& [_, walker] : unit.walkers) { for (auto& r : walker->reads) { if (!r->to_assemble) continue; auto it = corrected_by_name.find(r->UniqueName()); if (it != corrected_by_name.end()) { SVABA_READ_TRACE(r->Qname(), "BFC corrected: changed=" << (r->CorrectedSeq() != it->second ? "YES" : "NO") << " orig_len=" << r->CorrectedSeq().size() << " corr_len=" << it->second.size()); r->SetCorrectedSeq(it->second); ++num_reads_corrected; } else { SVABA_READ_TRACE(r->Qname(), "BFC: not in corrected output (lost in hash?)"); } } } sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...BFC corrected ", SeqLib::AddCommas(num_reads_corrected)); #ifdef SVABA_KMER_RESTRICT // Post-correction kmer filter: drop any read whose corrected // sequence doesn't contain the target kmer (or its revcomp). // Dropped reads get to_assemble=false so they won't enter // fermi assembly, r2c alignment, corrected.bam, or scoring. size_t kmer_kept = 0, kmer_dropped = 0; for (auto& [_, walker] : unit.walkers) { for (auto& r : walker->reads) { if (!r->to_assemble) continue; if (_svaba_kmer_match(r->CorrectedSeq())) { ++kmer_kept; } else { r->to_assemble = false; ++kmer_dropped; } } } sc.logger.log(true, true, "...KMER_RESTRICT: kept ", kmer_kept, " dropped ", kmer_dropped, " kmer=", SVABA_KMER_RESTRICT); #endif unit.st.stop("k"); } // SvABA2.0: realign corrected read sequences to the reference so // BreakPoint::splitCoverage's "r2c better than native" gate has an // apples-to-apples comparison: same corrected sequence, same // svaba-internal BWA-MEM parameters, same scoring on both sides. // // Performance optimization: in production mode (no --dump-reads), we // DEFER this to after the r2c alignment loop and only realign reads // that actually hit a contig (HasR2C()). The full-reference BWA call // is the single most expensive operation (~39% of wall time) due to // cache misses on the ~3 GB FM-index, and most reads don't end up // supporting any variant. Reads without r2c hits never enter // splitCoverage, so their native alignment is never consulted. // // In --dump-reads mode we realign ALL reads here (before assembly) // so the corrected.bam output has full reference alignments for IGV. // // Reads that didn't go through correction (to_assemble == false) // keep their default sentinel (corrected_native_nm == -1) and the // gate falls back to the original BAM record for those. if (sc.opts.dump_corrected_reads) { for (const auto& [_, walker] : unit.walkers) { for (const auto& r : walker->reads) { if (!r->to_assemble) continue; BamRecordPtrVector aln; unit.bwa_aligner->alignSequence(r->CorrectedSeq(), r->UniqueName(), aln, false, 0.6, SECONDARY_CAP); // Alt-contig demotion: if BWA placed the primary on a non- // standard chr but a secondary on a standard chr is comparable, // swap them so the corrected.bam shows standard-chr placements. preferStandardChromosomes(aln, sc.opts.maxMateChrID); // Pick the primary (non-supplementary, non-secondary, mapped) // record. If no usable record came back, leave the sentinel. for (const auto& a : aln) { if (!a->MappedFlag()) continue; if ( a->SecondaryFlag()) continue; if ( a->SupplementaryFlag()) continue; int32_t nm = -1; a->GetIntTag("NM", nm); r->corrected_native_cig = a->GetCigar(); r->corrected_native_nm = nm; break; } // Only push non-secondary alignments into the corrected BAM // output — secondaries were requested solely for alt-demotion. for (auto& a : aln) { if (!a->SecondaryFlag()) unit.all_corrected_reads.push_back(a); } } } sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...realigned corrected reads to genome (dump mode, all reads)"); } sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...running assemblies for region ", region); // set the contig prefix // Include the active assembler tag (fermi / sga) so that contig names // carry a record of which engine produced them, e.g. // c_fermi_chr12_18000000_20000000_0 // c_sga_chr12_18000000_20000000_0 string ctg_prefix = string("c_") + svaba::kAssemblerTag + "_" + region.ChrName(sc.header) + "_" + std::to_string(region.pos1) + "_" + std::to_string(region.pos2); // where to store the AlignedContigs for this region std::unordered_map all_AlignedContigs_this_region; // setup the engine and peform assembly UnalignedSequenceVector all_unaligned_contigs_this_region; #ifndef FERMI { // std::cerr << " SGA" << std::endl; svabaAssemblerEngine engine(ctg_prefix, sc.opts.sgaErrorRate, sc.opts.sgaMinOverlap, sc.readlen); size_t dbg = 0; for (const auto& [_, walker] : unit.walkers) { //debug // if (region.pos1 == 4287501) { // for (const auto& r : walker->reads) // std::cout << " RSEQ " << r->CorrectedSeq() << std::endl; // } engine.fillReadTable(walker->reads); dbg += walker->reads.size(); } sc.logger.log(sc.opts.verbose > 1, false, "...assembling reads with SGA"); // do the actual assembly engine.performAssembly(1/*sc.opts.num_assembly_rounds*/); // retrieve contigs all_unaligned_contigs_this_region = engine.getContigs(); // if (region.pos1 == 4287501) // std::cerr << " contigs " << // all_unaligned_contigs_this_region.size() << std::endl; } #else { // std::cerr << "FERMI" << std::endl; // build the reads structure size_t n_reads = 0; for (const auto& [_, walker] : unit.walkers) { for (const auto& r : walker->reads) n_reads += static_cast(r->to_assemble); } fseq1_t *fseq = (fseq1_t*)calloc(n_reads, sizeof(fseq1_t)); size_t i = 0; for (const auto& [_, walker] : unit.walkers) { for (const auto& r : walker->reads) { // skip reads that we want to track but not assemble if (!r->to_assemble) continue; const std::string& cseq = r->CorrectedSeq(); fseq[i].seq = strdup(cseq.c_str()); fseq[i].l_seq = cseq.length(); // fermi's fml_fltuniq reads qual even when ec_k=-1. // Avoid constructing a std::string just to strdup it — // malloc + memset directly. fseq[i].qual = (char*)malloc(fseq[i].l_seq + 1); memset(fseq[i].qual, 'I', fseq[i].l_seq); fseq[i].qual[fseq[i].l_seq] = '\0'; ++i; } } fml_opt_t opt; fml_opt_init(&opt); // SvABA2.0: loosen fermi-lite defaults for variant-supporting contigs. // Rationale (see fermi-lite/misc.c): // - We already hand fermi CorrectedSeq(); a second EC pass with // min_cnt=4 is prone to "correcting" low-VAF alt k-mers back to // reference. Disable EC entirely (ec_k = -1 skips fml_correct). // - fml_assemble clamps min_ensr/min_insr to [min_cnt, max_cnt]. // Lowering min_cnt lets tips/branches with 2 supporting reads // survive graph cleaning. // - MAG_F_POPOPEN enables aggressive trimming of "open" tips // (dead-end branches). A heterozygous indel whose alt bubble // is shorter than ~2.5x read length reads exactly like an // open tip and gets trimmed. Clear the flag. // - fml_opt_adjust sets min_elen = 2.5 * avg_read_len (~375bp for // 150bp reads). We can't override that through fml_assemble // because it re-runs adjust internally, but disabling POPOPEN // and lowering min_cnt already do most of the work. opt.ec_k = -1; // skip fermi's EC (svaba pre-corrects) opt.min_cnt = 2; // tolerate rare k-mers opt.max_cnt = 8; // keep headroom for high-cov regions opt.mag_opt.flag &= ~MAG_F_POPOPEN; // don't aggressively trim variant tips // optional, very aggressive: opt.mag_opt.flag |= MAG_F_AGGRESSIVE is the // OPPOSITE of what we want (it POPS variant bubbles). Leave it cleared. sc.logger.log(sc.opts.verbose > 1, false, "...assembling reads with Fermi-lite"); // 3) Run the assembler int n_utgs = 0; fml_utg_t *utgs = nullptr; if (n_reads > 0) utgs = fml_assemble(&opt,n_reads,fseq,&n_utgs); // 4) Copy out contig names/sequences into a C++ vector all_unaligned_contigs_this_region.reserve(n_utgs); for (int i = 0; i < n_utgs; i++) { std::string name = ctg_prefix + "_" + std::to_string(i+1) + "C"; std::string seq = utgs[i].seq; SeqLib::UnalignedSequence us(name, seq); all_unaligned_contigs_this_region.push_back(std::move(us)); } // 5) Clean up fml_utg_destroy(n_utgs, utgs); for (int i = 0; i < n_reads; i++) { free(fseq[i].seq); free(fseq[i].qual); } free(fseq); } #endif unit.st.contig_count = all_unaligned_contigs_this_region.size(); sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...assembled ", all_unaligned_contigs_this_region.size(), " contigs for ", ctg_prefix); ///////// // SETUP FOR LOCAL ALIGNMENT // get the reference sequence of the local region /* string lregion; try { lregion = unit.ref_genome->QueryRegion(sc.header.IDtoName(region.chr), region.pos1, region.pos2); } catch (...) { std::cerr << " Caught exception for lregion with reg " << region.ToString(sc.header); lregion = ""; } // make a BWA index from the locally retrieved sequence UnalignedSequenceVector local_usv = {{"local", lregion, string()}}; BWAIndexPtr local_bwa_index = std::make_shared(); local_bwa_index->ConstructIndex(local_usv); BWAAligner local_bwa_aligner(local_bwa_index); */ ////////////// // loop and process unaligned contigs //vector alc; // where to put the contigs BamRecordPtrVector all_aligned_contigs_this_region; // contig-to-genome alignments size_t count_contigs_of_size = 0; for (auto& i : all_unaligned_contigs_this_region) { // if too short, skip if ((int)i.Seq.length() < (sc.readlen * 1.2)) { SVABA_TRACE(i.Name, "TP1 SKIP contig too short: len=" << i.Seq.length() << " threshold=" << (int)(sc.readlen * 1.2)); continue; } ++count_contigs_of_size; //// LOCAL REALIGNMENT // align to the local region /* BamRecordVector local_ct_alignments; local_bwa_aligner.alignSequence(i.Seq, i.Name, local_ct_alignments, false, SECONDARY_FRAC, SECONDARY_CAP); // check if it has a non-local alignment bool valid_sv = true; for (auto& aa : local_ct_alignments) { if (aa.NumClip() < MIN_CLIP_FOR_LOCAL) valid_sv = false; // has a non-clipped local alignment. can't be SV. Indel only }*/ // do the main realignment of unaligned contigs to the reference genome BamRecordPtrVector human_alignments; unit.bwa_aligner->alignSequence(i.Seq, i.Name, human_alignments, false, SECONDARY_FRAC, SECONDARY_CAP); SVABA_TRACE(i.Name, "TP2 BWA aligned: " << human_alignments.size() << " alignments, contig_len=" << i.Seq.length()); // Alt-contig demotion: if BWA placed a fragment on a non-standard // chromosome (alt/decoy) but a secondary on a standard chromosome // has a comparable score, swap them so the standard placement wins. // This prevents real breakpoints from being lost when one fragment // of a split-mapped contig lands on e.g. chr11_JH159136v1_alt // instead of chr11 proper. size_t n_demoted = preferStandardChromosomes(human_alignments, sc.opts.maxMateChrID); SVABA_TRACE_IF(n_demoted > 0, i.Name, "TP2b alt-demotion: swapped " << n_demoted << " fragment(s) from non-standard to standard chr"); // Strip secondaries — they were only needed for alt-demotion above. // AlignedContig's constructor assumes non-secondaries come first; // a stray secondary before the first primary/supp causes a throw. human_alignments.erase( std::remove_if(human_alignments.begin(), human_alignments.end(), [](const BamRecordPtr& r) { return r && r->SecondaryFlag(); }), human_alignments.end()); // provide a svaba-specific continuous "alignment score" for (auto& ba : human_alignments) { if (!ba) continue; if (!ba->MappedFlag()) continue; const auto s = svaba::scoreContigAlignment(*ba); svaba::tagContigAlignment(*ba, s); } // sort the alignments by position std::sort(human_alignments.begin(), human_alignments.end(), SeqLib::BamRecordSort::ByReadPositionSharedPtr()); // store all contig alignment all_aligned_contigs_this_region.insert(all_aligned_contigs_this_region.end(), human_alignments.begin(), human_alignments.end()); // add contig alignments to svabaThreadUnit for writing later unit.master_contigs.insert(unit.master_contigs.end(), human_alignments.begin(), human_alignments.end()); // make the AlignedContig object for this contig AlignedContig ac(human_alignments, region, &sc); SVABA_TRACE(ac.getContigName(), "TP5 AlignedContig: frags=" << ac.getFragCount() << " global_bp=" << (ac.hasGlobalBP() ? "YES" : "NO") << " local_breaks=" << ac.getLocalBreakCount() << " hasVariant=" << (ac.hasVariant() ? "YES" : "NO")); // add this all_AlignedContigs_this_region.insert_or_assign(ac.getContigName(), std::move(ac)); } unit.st.aligned_contig_count = all_aligned_contigs_this_region.size(); sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...contigs that meet size criteria: ", count_contigs_of_size); // if (region.pos1 == 4287501) { // std::cerr <<" ALIGNED CONTIGS " << // all_aligned_contigs_this_region.size() << std::endl; // for (const auto& r : all_unaligned_contigs_this_region) // std::cout << "PASSED CONTIG " << r.Name << "\t" << // r.Seq << std::endl; // } // didnt get any contigs that made it all the way through if (!all_AlignedContigs_this_region.size()) { unit.flush(); return true; } // Make a BWA mapper of the contigs themselves BWAIndexPtr contig_bwa_index = std::make_shared(); contig_bwa_index->ConstructIndex(all_unaligned_contigs_this_region); BWAAligner contig_bwa_aligner(contig_bwa_index); sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...aligning reads to contigs"); // align the reads to the contigs BamRecordPtrVector all_read2contigs; size_t seen = 0; size_t n_ref_match_skipped = 0; for (auto& [_, walker] : unit.walkers) { for (auto& i : walker->reads) { ++seen; if (seen % 1000 == 0) sc.logger.log(sc.opts.verbose > 4, sc.opts.verbose_log, "- r2c ", SeqLib::AddCommas(seen)); // get the sequence const std::string& seq = i->CorrectedSeq(); // Fast pre-filter: if the BFC-corrected sequence is an exact // substring of the local reference, this read is a perfect // reference match and cannot support any variant. Skip the // expensive BWA-MEM r2c alignment entirely. This catches the // common case where high-NM reads (salvaged via the NM/len > // 0.02 path) had their sequencing errors corrected by BFC and // now match the reference perfectly. All reads align to the // forward strand so no RC check is needed. if (!seq.empty() && lregion.find(seq) != std::string::npos) { SVABA_READ_TRACE(i->Qname(), "R2C SKIP: perfect ref match after BFC (seq_len=" << seq.size() << ")"); ++n_ref_match_skipped; continue; } // do the read to contig alignment for a single read BamRecordPtrVector read2contigs; contig_bwa_aligner.alignSequence(seq, i->Qname(), read2contigs, false, 0.60, 1000); // make sure we have only one alignment per contig. // Use a small vector + linear scan instead of unordered_set — // typical read hits 1-3 contigs, so hashing overhead dominates. // Store ChrID (int) instead of contig name strings. std::vector seen_chrids; seen_chrids.reserve(4); // check which ones pass auto keep = [&](const BamRecordPtr& r) { int thisas = 0; r->GetIntTag("AS", thisas); // Inline match-base count from CIGAR to avoid GetCigar() // vector allocation inside NumMatchBases(). uint32_t match_bases = 0; const uint32_t* cig_raw = bam_get_cigar(r->raw()); for (uint32_t ci = 0; ci < r->raw()->core.n_cigar; ++ci) { if (bam_cigar_op(cig_raw[ci]) == BAM_CMATCH) match_bases += bam_cigar_oplen(cig_raw[ci]); } if ((double)match_bases * 0.5 > thisas) return false; int chrid = r->ChrID(); for (int id : seen_chrids) if (id == chrid) return false; seen_chrids.push_back(chrid); return true; }; read2contigs.erase( std::remove_if(read2contigs.begin(), read2contigs.end(), [&](const BamRecordPtr& r) { return !keep(r); }), read2contigs.end()); if (read2contigs.empty()) { SVABA_READ_TRACE(i->Qname(), "R2C: no contig hits (0 alignments passed filters)"); } else { for (const auto& rc : read2contigs) { int as = 0; rc->GetIntTag("AS", as); SVABA_READ_TRACE(i->Qname(), "R2C HIT: contig=" << all_unaligned_contigs_this_region[rc->ChrID()].Name << " AS=" << as << " rc=" << rc->ReverseFlag() << " CIGAR=" << rc->CigarString()); } } // SvABA2.0: boundary-aware comma-append helper (matches the // dedupe semantics used for the bi:Z tag at BP finalization). // `need_read_tags` is declared at function scope above and // gates both this block (bz:Z) and the BP-finalization block // (bi:Z) further down. auto append_unique = [](std::string& cur, const std::string& id) { if (id.empty()) return false; if (cur.empty()) { cur = id; return true; } size_t pos = 0; while ((pos = cur.find(id, pos)) != std::string::npos) { const bool left_ok = (pos == 0) || cur[pos-1] == ','; const bool right_ok = (pos + id.size() == cur.size()) || cur[pos + id.size()] == ','; if (left_ok && right_ok) return false; pos += id.size(); } cur += "," + id; return true; }; // annotate the original read for (auto& r : read2contigs) { all_read2contigs.push_back(r); // add to total r2c this_r2c; // alignment of this read to this contig if (r->ReverseFlag()) this_r2c.rc = true; this_r2c.AddAlignment(r); // doesn't copy any memory const std::string& contig_name = all_unaligned_contigs_this_region[r->ChrID()].Name; i->AddR2C(contig_name, this_r2c); // SvABA2.0: stamp the bz:Z aux tag on the svabaRead pointer // (covers the weird/discordant BAMs, pointer-identity path) and // register for later stamping onto the corrected BAM via the // qname-keyed map. bz:Z is the "aligned to this contig" // superset; bi:Z (set later at BP finalization) is the // "supports a variant on this contig" subset. // // Gated on need_read_tags — the tags and the per-read map are // consumed only by the dump-reads BAM writers. Skipping this // under the default (--dump-reads off) is measurable on // high-coverage contigs; with --dump-reads on, nothing changes. if (need_read_tags) { std::string cur; i->GetZTag("bz", cur); if (append_unique(cur, contig_name)) { i->RemoveTag("bz"); i->AddZTag("bz", cur); } std::string& entry = unit.all_cnames_by_name[i->UniqueName()]; append_unique(entry, contig_name); } // if (region.pos1 == 4287501) { // std::cout << "R2C " << r->Qname() << " - " << // r->Sequence() << " contig " << r->ChrName(sc.header) << // std::endl; // } // add the read to the right contig auto it = all_AlignedContigs_this_region.find(contig_name); if (it != all_AlignedContigs_this_region.end()) { it->second.AddAlignedRead(i); // we are adding the svabaBamRead!! not the cread } } // read2contig alignment loop (per read) } // short read realignment loop (all reads) } // short read realignment loop (all bam walkers) sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...done aligning reads to contigs for ", SeqLib::AddCommas(all_read2contigs.size()), " r2c hits from ", SeqLib::AddCommas(seen), " reads (", SeqLib::AddCommas(n_ref_match_skipped), " skipped as perfect ref matches). Processing variants"); // Deferred native realignment (production mode only): now that r2c is // done, realign only the reads that actually hit a contig. This avoids // the expensive full-reference BWA call for reads that will never enter // splitCoverage. In --dump-reads mode this was already done above for // ALL reads (before assembly). // // Additional optimization: when --always-realign-corrected is NOT set // (default), reads whose corrected sequence matches the original BAM // sequence skip BWA entirely — the input BAM's CIGAR/NM is directly // comparable because svaba uses the same BWA-MEM scoring internally. // Only reads that BFC actually modified (or that quality trimming // shortened) need re-alignment. The sentinel corrected_native_nm == -1 // signals splitCoverage to fall back to the original BAM record, which // is exactly what we want for unchanged reads. if (!sc.opts.dump_corrected_reads) { // Build a local-reference BWA index for native realignment of // BFC-modified reads. The full genome FM-index is ~3 GB and every // bwt_sa/bwt_occ call hits main memory (~L3 miss). A local index // covering just this region's reference + all mate regions fits // in L1/L2 cache, making every BWA operation 10-50× cheaper per call. // // Pad each region by readlen on each side so reads near the // boundaries still find their full native alignment. // --always-realign-corrected forces the full genome index for // all reads (for non-BWA-aligned input BAMs). const int pad = std::max(sc.readlen, 200); // Collect reference sequences for the main region + all mate regions. // Each region becomes a separate "chromosome" in the local index so // reads from any source region can map back to their origin. UnalignedSequenceVector local_usv; bool local_build_ok = false; if (!sc.opts.alwaysRealignCorrected) { // Main region { const int32_t local_start = std::max(0, region.pos1 - pad); const int32_t local_end = region.pos2 + pad; try { std::string seq = unit.ref_genome->QueryRegion( sc.header.IDtoName(region.chr), local_start, local_end); if (!seq.empty()) { // Name encodes chr:start-end so alignment coords can be // interpreted if needed, but for NM/CIGAR purposes we // only care about the edit distance, not the absolute // position on the genome. local_usv.push_back({ sc.header.IDtoName(region.chr) + ":" + std::to_string(local_start) + "-" + std::to_string(local_end), std::move(seq), std::string() }); } } catch (...) { /* skip this region */ } } // Mate regions — reads from here are in the walkers too and // need their own reference to align against. for (size_t i = 0; i < mate_regions_for_native.size(); ++i) { const auto& mr = mate_regions_for_native[i]; const int32_t mr_start = std::max(0, mr.pos1 - pad); const int32_t mr_end = mr.pos2 + pad; try { std::string seq = unit.ref_genome->QueryRegion( sc.header.IDtoName(mr.chr), mr_start, mr_end); if (!seq.empty()) { local_usv.push_back({ sc.header.IDtoName(mr.chr) + ":" + std::to_string(mr_start) + "-" + std::to_string(mr_end), std::move(seq), std::string() }); } } catch (...) { /* skip this mate region */ } } } // Build the local index. If it fails (e.g. empty ref), fall back // to the full genome aligner. BWAIndexPtr local_native_idx; std::unique_ptr local_native_aligner; if (!local_usv.empty()) { try { local_native_idx = std::make_shared(); local_native_idx->ConstructIndex(local_usv); local_native_aligner = std::make_unique(local_native_idx); local_build_ok = true; } catch (...) { local_native_aligner.reset(); } } // Choose which aligner to use: local (fast, cache-friendly) or // full genome (--always-realign-corrected, or local index failed). BWAAligner* native_aligner = local_native_aligner ? local_native_aligner.get() : unit.bwa_aligner.get(); size_t n_realigned = 0; size_t n_reused = 0; size_t n_skipped = 0; for (const auto& [_, walker] : unit.walkers) { for (const auto& r : walker->reads) { if (!r->to_assemble) continue; if (!r->HasR2C()) { ++n_skipped; continue; } // If --always-realign-corrected is NOT set and the corrected // sequence is identical to the original BAM sequence, the input // BAM's CIGAR/NM is already a valid native alignment (assuming // BWA was used for the input). Leave the sentinel // (corrected_native_nm == -1) so splitCoverage falls back to // GetCigar()/GetIntTag("NM",...) on the original BAM record. // CorrectedSeqChanged() compares against the BAM's 4-bit // encoding without allocating a Sequence() string. if (!sc.opts.alwaysRealignCorrected && !r->CorrectedSeqChanged()) { SVABA_READ_TRACE(r->Qname(), "NATIVE_REALIGN: reusing BAM CIGAR (seq unchanged by BFC)"); ++n_reused; continue; } BamRecordPtrVector aln; native_aligner->alignSequence(r->CorrectedSeq(), r->UniqueName(), aln, false, 0.6, 0); bool found_native = false; for (const auto& a : aln) { if (!a->MappedFlag()) continue; if ( a->SecondaryFlag()) continue; if ( a->SupplementaryFlag()) continue; int32_t nm = -1; a->GetIntTag("NM", nm); r->corrected_native_cig = a->GetCigar(); r->corrected_native_nm = nm; SVABA_READ_TRACE(r->Qname(), "NATIVE_REALIGN: corrected seq realigned to ref" << " NM=" << nm << " CIGAR=" << a->CigarString()); found_native = true; break; } if (!found_native) { SVABA_READ_TRACE(r->Qname(), "NATIVE_REALIGN: no mapped primary alignment (unmapped after correction?)"); } ++n_realigned; } } sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...native realignment: ", SeqLib::AddCommas(n_realigned), " re-aligned", (local_build_ok ? std::string(" (local ref, ") + std::to_string(local_usv.size()) + " seqs)" : std::string(" (full genome)")), ", ", SeqLib::AddCommas(n_reused), " reused BAM, ", SeqLib::AddCommas(n_skipped), " no r2c hit"); } // BPS need a repeat filter // BPS can have addDiscordantFilter(dmap) applied directly // Get contig coverage, discordant matching to contigs, etc for (auto& [_, a] : all_AlignedContigs_this_region) { // right now all break points are stored in an AlignedContig // this routine calls all internally stored BreakPoint and // checks split read coverage, since all read2contig alignments // for this AlignedContig are stored in this AlignedContig a.splitCoverage(); // now that we have all the break support, // check that the complex breaks are OK //a.refilterComplex(); // add to the final structure //alc.push_back(std::move(a)); } // if (region.pos1 == 4287501) { // for (const auto& [_, bbb] : all_AlignedContigs_this_region) { // std::cout << " ALC " << bbb.printToAlignmentsFile(sc.header) << std::endl; // } // } unit.st.stop("as"); // get the breakpoints BreakPointPtrVector bp_glob; for (auto& [_, i] : all_AlignedContigs_this_region) { BreakPointPtrVector tmp_allbreaks = i.getAllBreakPoints(); bp_glob.insert(bp_glob.end(), tmp_allbreaks.begin(), tmp_allbreaks.end()); //debig for (const auto& bp : bp_glob) assert(bp); } // set each interal BreakEnd as to whether it overlaps with the // "local" assembly window for (auto& i : bp_glob) i->setLocal(region); //if (dbsnp_filter && opt::dbsnp.length()) { // WRITELOG("...DBSNP filtering", opt::verbose > 1, false); // for (auto & i : bp_glob) // dbsnp_filter->queryBreakpoint(i); //} // filter against blacklist for (auto& i : bp_glob) { i->checkBlacklist(sc.blacklist); // remove anything in a high-repeat blacklist for (const auto& [_, walker] : unit.walkers) { if (walker->local_blacklist.CountOverlaps(i->b1.gr) || walker->local_blacklist.CountOverlaps(i->b2.gr)) i->confidence = "BLACKLIST"; } } // add discordant reads for (auto& i : bp_glob) { i->CombineWithDiscordantClusterMap(dmap); } // if (region.pos1 == 4287501) { // for (const auto& bbb : bp_glob) { // std::cout << " BPGLOB " << bbb->printSimple(sc.header) << std::endl; // } // } // add in the discordant clusters as breakpoints for (auto& [_, d] : dmap) { // dont send DSCRD if FR and below size /*bool below_size = i.second.m_reg1.strand == '+' && i.second.m_reg2.strand == '-' && (i.second.m_reg2.pos1 - i.second.m_reg1.pos2) < min_dscrd_size_for_variant && i.second.m_reg1.chr == i.second.m_reg2.chr; */ // already associated with an assembly, so don't make a new variant // this information should be added to the DiscordantCluster // during "BreakPoint::CombineWithDiscordantClusterMap()" if (d.hasAssociatedAssemblyContig()) continue; // too little read support, skip if ( (d.tcount + d.ncount) < MIN_DSCRD_READS_DSCRD_ONLY) continue; if (!d.valid()) continue; // make the Discordant cluster BreakPointPtr tmpbp = std::make_shared(d, dmap, region, &sc); assert(tmpbp); bp_glob.push_back(tmpbp); } // de duplicate the breakpoints std::sort(bp_glob.begin(), bp_glob.end(), [](auto const& a, auto const& b){ return *a < *b; }); auto new_end = std::unique( bp_glob.begin(), bp_glob.end(), [](auto const& a, auto const& b){ // return true if *a and *b are "equal" in the sense of your operator< return !(*a < *b) && !(*b < *a); }); bp_glob.erase(new_end, bp_glob.end()); // remove the duplicates after they are sorted to the back // if (region.pos1 == 4287501) { // for (const auto& bbb : bp_glob) { // std::cout << " AFTER BPGLOB " << bbb->printSimple(sc.header) << std::endl; // } // } // add the coverage data to breaks for allelic fraction computation unordered_map covs; for (auto& [key, walker] : unit.walkers) { covs[key] = &walker->cov; } for (auto& i : bp_glob) { assert(i); i->addCovs(covs); } // check the cigar matches for (auto& i : bp_glob) { i->indelCigarCheck(cigmap); } // score the breakpoints for (auto& i : bp_glob) { i->scoreBreakpoint(); } // label somatic breakpoints that intersect directly with normal as NOT somatic unordered_set norm_hash; for (auto& i : bp_glob) { // hash the normals if (i->somatic != SomaticState::SOMATIC_LOD && i->confidence == "PASS") { for (const auto& h : i->getBreakEndHashes()) norm_hash.insert(h); } } // find somatic that intersect with norm. Set somatic = 0; for (auto& i : bp_glob) { // don't need to check normal against normal if (i->somatic != SomaticState::SOMATIC_LOD) continue; // if overlaps then turn off somatic for (const auto& h : i->getBreakEndHashes()) if (norm_hash.count(h)) i->somatic = SomaticState::FAILED; // not somatic } // remove indels at repeats that have multiple variants // unordered_map ccc; // for (auto& i : bp_glob) { // if (i->svtype == SVType::INDEL && i->repeat_seq.length() > 6) { // ++ccc[i->b1.hash()]; // } // } // for (auto& i : bp_glob) { // if (i->svtype == SVType::INDEL && ccc[i->b1.hash()] > 1) // i->confidence = "REPVAR"; // } // remove somatic calls if they have a germline normal SV in // them or indels with // 2+ germline normal in same contig // unordered_set bp_hash; // for (auto& i : bp_glob) { // hash the normals // if (!i->somatic_score && i->svtype != SVType::INDEL && i->confidence == "PASS") { // bp_hash.insert(i->cname); // } // } // for (auto& i : bp_glob) // find somatic that intersect with norm. Set somatic = 0; // if (i->somatic_score && i->num_align > 1 && bp_hash.count(i->cname)) { // i->somatic_score = -2; // } // remove somatic SVs that overlap with germline svs if (sc.germline_svs.size()) { for (auto& i : bp_glob) { // don't filter normals or indels if (i->somatic != SomaticState::SOMATIC_LOD || i->isIndel()) continue; GenomicRegion gr1 = i->BreakEndAsGenomicRegionLeft(); GenomicRegion gr2 = i->BreakEndAsGenomicRegionRight(); gr1.Pad(GERMLINE_CNV_PAD); gr2.Pad(GERMLINE_CNV_PAD); if (sc.germline_svs.OverlapSameInterval(gr1, gr2)) { i->somatic = SomaticState::FAILED; } } } // add the ref and alt tags for (auto& i : bp_glob) i->setRefAlt(unit.ref_genome.get(), sc.header); // transfer local versions to thread store for (const auto& [_, a] : all_AlignedContigs_this_region) { if (a.hasVariant()) { SVABA_TRACE(a.getContigName(), "TP6 hasVariant=YES, pushing to master_alc"); unit.master_alc.push_back(a); //std::move(a)); } else { SVABA_TRACE(a.getContigName(), "TP6 hasVariant=NO — contig dropped from output" << " frags=" << a.getFragCount() << " indel_breaks=" << a.getIndelBreakCount()); } } all_AlignedContigs_this_region.clear(); //for (const auto& d : dmap) // unit.m_disc_reads += d.second.reads.size(); //for (const auto& a : alc) // unit.m_bamreads_count += a.NumBamReads(); for (auto& i : bp_glob) { SVABA_TRACE(i->cname, "TP23 hasMinimal check: dc.t=" << i->dc.tcount << " dc.n=" << i->dc.ncount << " t.split=" << i->t.split << " n.split=" << i->n.split << " local=" << (int)i->local << " confidence=" << i->confidence << " result=" << (i->hasMinimal() ? "PASS" : "FAIL")); if ( i->hasMinimal() ) { // SvABA2.0 (v3): assign this BP a unique, thread-stable ID // exactly once in its lifetime. Must happen BEFORE the bi:Z // stamping below, since the tag payload is now the bp_id (not // the cname). The `id.empty()` guard lets this loop be safely // reentered (e.g. across regions) without re-numbering BPs // that were finalized in a prior region. Because i is a // shared_ptr also referenced by the parent AlignedContig's // m_global_bp / m_local_breaks / fragment indel_breaks, // setting id here is immediately visible to printToR2CTsv // when it walks getAllBreakPoints() during writeUnit. if (i->id.empty()) i->id = unit.next_bp_id(); // SvABA2.0 (v3): tag every alt-supporting read with this // breakpoint's bp_id on the `bi:Z` aux tag. bp_id is a // thread-stable per-BP identifier (see SvabaThreadUnit:: // next_bp_id) and is the same string emitted as col 52 of // bps.txt.gz and in the r2c.txt.gz `split_bps` / `disc_bps` // columns — so `samtools view | grep bi:Z:` returns // exactly the ALT-supporters for that specific variant row. // Pre-v3 the tag carried cnames (contig-level); a single // contig with multiple BPs (global + multi + indel) couldn't // be disambiguated. bz:Z still carries cnames (contig-level // "which contigs did this read r2c to") — see the r2c loop // above where that map is populated. // // Two parallel paths for bi:Z: // (a) stamp the `bi:Z` aux tag on the original svabaRead // shared_ptr. This covers weird/discordant BAM outputs, // which share pointer identity with those records. // (b) record UniqueName -> bp_ids in // `unit.alt_bp_ids_by_name` so `writeUnit` can stamp // the tag on all_corrected_reads (newly-aligned // BamRecords from bwa that don't share pointer // identity). // A read can support multiple BPs (split reads crossing // nearby calls; indel + flanking SV on one contig) so the tag // value is a comma-joined list, dedup'd on exact-match // boundaries. auto append_unique = [](std::string& cur, const std::string& id) { if (id.empty()) return false; if (cur.empty()) { cur = id; return true; } size_t pos = 0; while ((pos = cur.find(id, pos)) != std::string::npos) { const bool left_ok = (pos == 0) || cur[pos-1] == ','; const bool right_ok = (pos + id.size() == cur.size()) || cur[pos + id.size()] == ','; if (left_ok && right_ok) return false; pos += id.size(); } cur += "," + id; return true; }; const std::string& this_bp_id = i->id; auto tag_with_bp_id = [&](auto& r) { if (!r || this_bp_id.empty()) return; SVABA_READ_TRACE(r->Qname(), "OUTPUT TAG bi:Z with bp_id=" << this_bp_id << " contig=" << i->cname << " confidence=" << i->confidence << " somatic=" << (int)i->somatic); // (a) stamp the shared_ptr std::string cur; r->GetZTag("bi", cur); if (append_unique(cur, this_bp_id)) { r->RemoveTag("bi"); r->AddZTag("bi", cur); } // (b) register in name->bp_ids map so the corrected BAM can // be tagged at write time std::string& entry = unit.alt_bp_ids_by_name[r->UniqueName()]; append_unique(entry, this_bp_id); }; // Same need_read_tags gate as the bz:Z stamping in the r2c loop // above — the bi:Z tag is consumed only by the dump-reads BAM // emitters in SvabaOutputWriter, so skipping the per-alt-read // GetZTag/RemoveTag/AddZTag triplets under the default (no // --dump-reads) path is a measurable CPU win on SVs with many // alt supporters. Under --dump-reads nothing changes. if (need_read_tags) { for (auto& r : i->reads) tag_with_bp_id(r); for (auto& [_, r] : i->dc.reads) tag_with_bp_id(r); for (auto& [_, r] : i->dc.mates) tag_with_bp_id(r); } unit.m_bps.push_back(i); } } // end for bp_glob unit.st.bps_count = bp_glob.size(); // if (region.pos1 == 4287501) { // for (const auto& bbb : unit.m_bps/*bp_glob*/) { // std::cout << " FINAL BPGLOB " << bbb->printSimple(sc.header) << std::endl; // } // } // dump if getting to much memory unit.st.stop("pp"); unit.ss << unit.st.logRuntime(sc.header) << "\n"; unit.flush(); // display the run time if (sc.total_regions_done % 1000 == 0) { sc.logger.log(sc.opts.verbose > 0, true, svabaUtils::runTimeString(read_counts.first, read_counts.second, all_AlignedContigs_this_region.size(), region, sc.header, unit.st, sc.start)); } sc.logger.log(sc.opts.verbose > 0, sc.opts.verbose_log, "...done with this region"); return true; } ================================================ FILE: src/svaba/SvabaRegionProcessor.h ================================================ #pragma once #include // for size_t #include "SvabaThreadUnit.h" // for svabaThreadUnit #include "SvabaUtils.h" #include "SeqLib/GenomicRegionCollection.h" // for GRC return type class SvabaLogger; class SvabaOptions; class SvabaOutputWriter; /// Encapsulates everything needed to process one genomic region: /// - shared logger /// - shared run-time options /// - shared output writer /// Its `process()` method is exactly where your old runWorkItem logic goes. namespace SeqLib { class BamHeader; } using svabaUtils::svabaTimer; class SvabaRegionProcessor { public: SvabaRegionProcessor(SvabaSharedConfig& sh_cf); /// Run the SVABA pipeline on `region` using per-thread state in `unit`. /// Returns true on success, false on error. bool process(const SeqLib::GenomicRegion& region, svabaThreadUnit& unit, size_t threadId); /// Run mate-region collection. Returns the merged somatic mate regions /// (as a GRC) so the caller can include their reference in a local BWA /// index for native realignment. SeqLib::GRC runMateCollectionLoop(const SeqLib::GenomicRegion& region, svabaThreadUnit& stu); private: SvabaSharedConfig& sc; }; ================================================ FILE: src/svaba/SvabaSharedConfig.h ================================================ #pragma once #include //#include #include "SeqLib/BWAIndex.h" #include "SeqLib/BamHeader.h" #include "SeqLib/GenomicRegionCollection.h" #include "SeqLib/ReadFilter.h" #include "LearnBamParams.h" #include class SvabaOutputWriter; class SvabaLogger; class SvabaOptions; class SvabaOutputWriter; class DBSnpFilter; class SvabaSharedConfig { public: SvabaSharedConfig(SvabaLogger& _logger, SvabaOptions& _opts, SvabaOutputWriter& _writer) : logger(_logger), opts(_opts), writer(_writer) {} // Delete copy constructor and copy assignment SvabaSharedConfig(const SvabaSharedConfig&) = delete; SvabaSharedConfig& operator=(const SvabaSharedConfig&) = delete; // Delete move constructor and move assignment SvabaSharedConfig(SvabaSharedConfig&&) = delete; SvabaSharedConfig& operator=(SvabaSharedConfig&&) = delete; size_t total_regions_to_process = 0; size_t total_regions_done = 0; struct timespec start; // store which readgroups we already warned about std::unordered_set warned; SvabaLogger& logger; SvabaOptions& opts; SvabaOutputWriter& writer; SeqLib::BWAIndexPtr bwa_idx; SeqLib::BamHeader header; SeqLib::GRC blacklist; SeqLib::GRC file_regions; SeqLib::GRC germline_svs; int readlen = -1; double insertsize = -1; std::shared_ptr dbsnp_filter; SeqLib::Filter::ReadFilterCollection mr; std::unordered_map bamStats; // needed for aligned contig std::set prefixes; std::string args = "svaba"; }; ================================================ FILE: src/svaba/SvabaThreadUnit.cpp ================================================ #include "SvabaThreadUnit.h" #include "SvabaOutputWriter.h" #if defined(__GLIBC__) #include #endif // Build a new BamHeader that prepends an @HD line (with the given sort order) // to the @SQ block of `src`. Avoids SeqLib::BamHeader::AsString(), which // blindly dereferences h->text; in modern htslib that field is lazy and is // often NULL until sam_hdr_str() materializes it, causing a segfault. static SeqLib::BamHeader make_header_with_hd(const SeqLib::BamHeader& src, const std::string& so) { std::string txt = "@HD\tVN:1.6\tSO:" + so + "\n"; const bam_hdr_t* h = src.get(); if (h) { // sam_hdr_str forces htslib to regenerate the textual form from its // internal representation and caches it in h->text. const char* cur = sam_hdr_str(const_cast(h)); if (cur) txt += cur; } return SeqLib::BamHeader(txt); } svabaThreadUnit::svabaThreadUnit(SvabaSharedConfig& sc_, int thread) : sc(sc_), threadId(thread) { // load the samtools faidx ref_genome = std::make_unique(); ref_genome->LoadIndex(sc.opts.refGenome); // set the *shared* memory BWAIndex bwa_aligner = std::make_shared(sc.bwa_idx); //bwa_aligner->allocBuffer(4096); // longest contig // load the .bai files for each bam and set parameters for(const auto& [pref, path] : sc.opts.bams) { // instantiate a new BAM walker auto [it, inserted] = walkers.try_emplace(pref, std::make_shared(sc)); it->second->Open(path); it->second->SetPrefix(pref); } // make the header in case dumping reads for debugging auto hdr_unsorted = make_header_with_hd(sc.header, "unsorted"); // setup the weird read writers if (sc.opts.dump_weird_reads) { // instantiate a new BAM writer std::string bamname =sc.opts.analysisId + ".thread" + std::to_string(threadId) + ".weird.bam"; auto [it, inserted] = writers.try_emplace("w", std::make_shared(SeqLib::BAM)); it->second->SetHeader(hdr_unsorted); if (!it->second->Open(bamname)) { std::cerr << "ERROR: could not open weird read writer for thread " << threadId << " at path " << bamname << "/n"; exit(EXIT_FAILURE); } it->second->WriteHeader(); } // setup the corrected read writers if (sc.opts.dump_corrected_reads) { // instantiate a new BAM writer std::string bamname =sc.opts.analysisId + ".thread" + std::to_string(threadId) + ".corrected.bam"; auto [it, inserted] = writers.try_emplace("c", std::make_shared(SeqLib::BAM)); it->second->SetHeader(hdr_unsorted); if (!it->second->Open(bamname)) { std::cerr << "ERROR: could not open corrected read writer for thread " << threadId << " at path " << bamname << "/n"; exit(EXIT_FAILURE); } it->second->WriteHeader(); } // setup the discordant read writers if (sc.opts.dump_discordant_reads) { // instantiate a new BAM writer std::string bamname =sc.opts.analysisId + ".thread" + std::to_string(threadId) + ".discordant.bam"; auto [it, inserted] = writers.try_emplace("d", std::make_shared(SeqLib::BAM)); it->second->SetHeader(hdr_unsorted); if (!it->second->Open(bamname)) { std::cerr << "ERROR: could not open discordant read writer for thread " << threadId << " at path " << bamname << "/n"; exit(EXIT_FAILURE); } it->second->WriteHeader(); } // SvABA2.0: setup the per-thread r2c.txt.gz stream. Same pattern as the // per-thread BAM writers — each thread writes its own file with no // coordination, postprocess merges them via cat. Exactly one thread // owns the column-header row so the merged file has one header at // the top. r2c_out_ is unique_ptr (see header for why); // heap-allocate only when the flag is on, keep null otherwise. // // We key the header-writing thread to threadId == 1 (NOT 0) because // the worker pool in `threadpool.h` constructs units with `i + 1` // where `i` is the 0-based worker index — so the first worker's // threadId is 1, and there is no thread 0. This also matches the // lexicographic / numeric sort order postprocess step-1 imposes via // `awk | sort -k1,1n`, which places `${ID}.thread1.r2c.txt.gz` // first in the cat merge. If the worker numbering convention ever // changes, this line must change with it (there is no reader unit // test that catches a missing header — empirically, ad-hoc runs do). if (sc.opts.dump_alignments) { std::string r2cname = sc.opts.analysisId + ".thread" + std::to_string(threadId) + ".r2c.txt.gz"; r2c_out_ = std::make_unique(); svabaUtils::fopen(r2cname, *r2c_out_); if (threadId == 1) { *r2c_out_ << AlignedContig::r2cTsvHeader() << "\n"; } } } void svabaThreadUnit::clear() { master_alc.clear(); master_contigs.clear(); m_bps.clear(); m_disc.clear(); //m_bamreads_count = 0; // m_disc_reads = 0; //badd.clear(); all_weird_reads.clear(); all_corrected_reads.clear(); // SvABA2.0: drop the bi:Z / bz:Z lookup tables so the next window // doesn't stamp tags derived from the previous window onto reads. // (bi now stores bp_ids, bz still stores cnames — see // SvabaThreadUnit.h for the rationale.) alt_bp_ids_by_name.clear(); all_cnames_by_name.clear(); ss.str(""); // Clear the string content ss.clear(); #if defined(__GLIBC__) malloc_trim(0); #endif } void svabaThreadUnit::flush() { if (MemoryLimit(THREAD_READ_LIMIT, THREAD_CONTIG_LIMIT)) { sc.writer.writeUnit(*this, sc); // mutex and flush are inside this call clear(); } // clear out the reads and reset the walkers for (auto& [_, walker] : walkers) { walker->clear(); } #if defined(__GLIBC__) malloc_trim(0); #endif } bool svabaThreadUnit::MemoryLimit(size_t readLimit, size_t contLimit) const { size_t stored_reads = all_weird_reads.size() + all_corrected_reads.size(); bool mem_exceeded = stored_reads > readLimit || master_contigs.size() > contLimit; if (mem_exceeded) { sc.logger.log(sc.opts.verbose > 1, false, "...writing files on thread ", threadId, " with limit hit of ", stored_reads, " reads and ", master_contigs.size(), " contigs========================================================="); size_t all_walker_reads = 0; for (const auto& [_, walker] : walkers) { all_walker_reads += walker->reads.size(); } // more memory mapping /* sc.logger.log(true, true, " bad regions: ", badd.size(), " master_alc.size() ", master_alc.size(), " m_disc.size() ", m_disc.size(), " walkers.reads.size() ", all_walker_reads); */ } return mem_exceeded; } svabaThreadUnit::~svabaThreadUnit() { // if (sc.opts.dump_weird_reads) { auto it = writers.find("w"); it->second->Close(); } // if (sc.opts.dump_corrected_reads) { auto it = writers.find("c"); it->second->Close(); } // if (sc.opts.dump_discordant_reads) { auto it = writers.find("d"); it->second->Close(); } // SvABA2.0: close the per-thread r2c stream if it was opened. The // unique_ptr is null when dump_alignments was off, so guard on it // rather than only on the flag (belt-and-braces in case the flag's // value ever gets out of sync with what the ctor actually did). if (r2c_out_) { r2c_out_->close(); } } ================================================ FILE: src/svaba/SvabaThreadUnit.h ================================================ #pragma once #include #include #include #include #include #include #include // std::snprintf in next_bp_id() #include #include "SvabaBamWalker.h" #include "SvabaLogger.h" #include "SvabaOptions.h" #include "AlignedContig.h" #include "DiscordantCluster.h" #include "BreakPoint.h" #include "SvabaUtils.h" #include "gzstream.h" // ogzstream for the per-thread r2c.txt.gz #include "SeqLib/RefGenome.h" #include "SeqLib/BFC.h" #include "SvabaSharedConfig.h" #include "SeqLib/BWAAligner.h" using SeqLib::BamRecordPtrVector; class svabaBamWalker; namespace SeqLib { class BamWriter; } using WalkerMap = std::map>; using WriterMap = std::map>; class svabaThreadUnit { public: //svabaThreadUnit() = default; ~svabaThreadUnit(); svabaThreadUnit(SvabaSharedConfig& sc_, int thread); void flush(); // local version of aligner class, but will hold shared memory index std::shared_ptr bwa_aligner; //(sc.bwa_idx); size_t processed_count = 0; size_t total_count = 0; // total to process size_t processed_since_memory_dump = 0; // results std::vector master_alc; BamRecordPtrVector master_contigs; BreakPointPtrVector m_bps; DiscordantClusterMap m_disc; //size_t m_bamreads_count = 0; //size_t m_disc_reads = 0; //SeqLib::GRC badd; // bad regions int threadId; // SvABA2.0 (v3): map from read UniqueName -> comma-separated list // of bp_ids this read supports as ALT. Populated at BP // finalization so `SvabaOutputWriter::writeUnit` can stamp the // `bi:Z:` BAM aux tag on records in // `all_corrected_reads` (which are *newly aligned* BamRecords // produced by bwa, so they don't share identity with the original // svabaRead pointers and couldn't have been tagged via pointer). // The same map is used to (re)tag weird and discordant records at // write time for consistency. // // Prior to v3 this carried cnames (deterministic contig-window // identifiers). Switched to bp_ids so the tag matches the // granularity of the r2c.txt.gz `split_bps` / `disc_bps` columns: // a single contig can carry several BPs (global + multi + indel), // and a read may support one, some, or all of them. Keying off the // BP, not the contig, removes the "which variant on this contig // does this read support?" ambiguity and makes // `samtools view | grep bi:Z:bp00100000042` return exactly the // ALT-supporting reads for that specific variant row in // bps.txt.gz. cname-level grouping is still available on the // companion `bz:Z` tag (below). std::unordered_map alt_bp_ids_by_name; // SvABA2.0: map from read UniqueName -> comma-separated list of // contig cnames this read aligned to (r2c), regardless of whether // the alignment ended up supporting a variant. Populated inside the // r2c alignment loop in SvabaRegionProcessor right alongside // `svabaRead::AddR2C(...)`, and consumed at write time by // `SvabaOutputWriter::writeUnit` to stamp the `bz:Z:` aux // tag. This stays as cnames because "which contigs did this read // align to" is a contig-level concept — unlike `bi:Z` which is the // per-variant ALT-supporter attribution. The set of reads with a // `bz:Z` tag is a superset of the set with `bi:Z` (every // ALT-supporter aligned to the contig; not every r2c alignment // yields ALT support). std::unordered_map all_cnames_by_name; // very verbose outpout svabaReadPtrVector all_weird_reads; BamRecordPtrVector all_corrected_reads; // time and temp log dump until goes to file svabaUtils::svabaTimer st; std::stringstream ss; // store the BAM .bai indicies for for this thread WalkerMap walkers; WriterMap writers; // SvABA2.0: per-thread counter for generating unique BreakPoint IDs // without cross-thread coordination. Format emitted by next_bp_id() // is "bpTTTNNNNNNNN" (3-digit thread + 8-digit counter). Up to // 1000 threads and ~1e8 BPs per thread, far beyond any realistic // svaba run. If either ever overflows, the resulting ID is still a // unique string — just one digit wider — so downstream tools that // treat it opaquely are unaffected. size_t bp_id_counter = 0; std::string next_bp_id() { char buf[32]; // %03d pads thread ID; %08zu pads the counter. post-increment so // the first BP for thread 1 is bp00100000000 (the worker pool // numbers threads 1..N — see threadpool.h). std::snprintf(buf, sizeof(buf), "bp%03d%08zu", threadId, bp_id_counter++); return std::string(buf); } // SvABA2.0: per-thread r2c TSV stream. Mirrors the per-thread BAM // writers above — when --dump-reads is set (opts.dump_alignments), // each thread writes its variant-bearing contigs + r2c-aligned reads // into ${ID}.thread${N}.r2c.txt.gz directly, no shared handle, no // mutex. Postprocess merges the per-thread files via // cat ${ID}.thread*.r2c.txt.gz > ${ID}.r2c.txt.gz // which produces a valid gzip (gzip is concatenation-safe per // RFC 1952). The first worker (threadId == 1; the pool numbers // workers 1..N) writes the column-header line once at open time // so the merged file has exactly one header at the top. // // Held via unique_ptr because ogzstream inherits from std::ios (which // has deleted copy/move). Embedding it by value would implicitly // delete svabaThreadUnit's move constructor and produce // -Wdefaulted-function-deleted. unique_ptr is trivially movable, so // the `svabaThreadUnit(svabaThreadUnit&&) noexcept = default;` // below stays valid. Same reason the BAM writers live in // shared_ptr inside the `writers` map above. std::unique_ptr r2c_out_; // non-copyable, movable svabaThreadUnit(const svabaThreadUnit&) = delete; svabaThreadUnit& operator=(const svabaThreadUnit&) = delete; svabaThreadUnit(svabaThreadUnit&&) noexcept = default; svabaThreadUnit& operator=(svabaThreadUnit&&) noexcept = delete; void clear(); bool MemoryLimit(size_t readLimit, size_t contLimit) const; // Per-thread BFC object, reused across regions. The k-mer hash // (1M sub-tables at l_pre=20) is allocated once on first Train() // and cleared+reused on subsequent calls via fml_count_into(), // avoiding 2M malloc/free calls per region. unique_ptr because // BFC has raw-pointer members — implicit move would double-free. std::unique_ptr pooled_bfc; // store the faidx index for this thread std::unique_ptr ref_genome; SvabaSharedConfig& sc; private: }; ================================================ FILE: src/svaba/SvabaUtils.cpp ================================================ #include "SvabaUtils.h" #include #include // C++17 namespace fs = std::filesystem; namespace svabaUtils { static std::string POLYA = "AAAAAAAAAAAAAAAAAAA"; static std::string POLYT = "TTTTTTTTTTTTTTTTTTT"; static std::string POLYC = "CCCCCCCCCCCCCCCCCCC"; static std::string POLYG = "GGGGGGGGGGGGGGGGGGG"; static std::string POLYAT = "ATATATATATATATATATATATAT"; static std::string POLYCG = "CGCGCGCGCGCGCGCGCGCGCGCG"; static std::string POLYTG = "TGTGTGTGTGTGTGTGTGTGTGTG"; static std::string POLYCA = "CACACACACACACACACACACACA"; static std::string POLYAG = "AGAGAGAGAGAGAGAGAGAGAGAG"; static std::string POLYTC = "TCTCTCTCTCTCTCTCTCTCTCTC"; const std::string svabaTimer::header = "chromosome\tstart\tend\t" "tumor_weird_reads\tnormal_weird_reads\t" "tumor_mate_reads\tnormal_mate_reads\t" "discordant_reads\tdiscordant_clusters\t" "contigs\tcontigs_pass\tbps\truntime_seconds\t" "pct_r\tpct_m\tpct_k\tpct_as"; std::string svabaTimer::logRuntime(const SeqLib::BamHeader& h) { double total_time = 0; for (const auto& i : times) total_time += i.second; if (total_time == 0) total_time = 1.0; // Avoid division by zero auto get_pct = [&](const std::string& key) -> int { auto it = times.find(key); return (it != times.end()) ? SeqLib::percentCalc(it->second, total_time) : 0; }; // Store percentages pct_r = get_pct("r"); pct_m = get_pct("m"); pct_k = get_pct("k"); pct_as = get_pct("as"); //pct_pp = get_pct("pp"); std::ostringstream oss; oss << gr.ChrName(h) << "\t" << gr.pos1 << "\t" << gr.pos2 << "\t" << weird_read_count.first << "\t" << weird_read_count.second << "\t" << mate_read_count.first << "\t" << mate_read_count.second << "\t" << dc_read_count << "\t" << dc_cluster_count << "\t" << contig_count << "\t" << aligned_contig_count << "\t" << bps_count << "\t" << total_time << "\t" << pct_r << "\t" << pct_m << "\t" << pct_k << "\t" << pct_as; return oss.str(); } std::string fileDateString() { // set the time string time_t t = time(0); // get time now struct tm * now = localtime( & t ); std::stringstream mdate; mdate << (now->tm_year + 1900) << (now->tm_mon + 1 < 10 ? "0": "") << (now->tm_mon + 1) << (now->tm_mday < 10 ? "0" : "") << now->tm_mday; return mdate.str(); } svabaTimer::svabaTimer() { s = {"r", "m", "as", "bw", "pp", "k"}; for (auto& i : s) times[i] = 0; } void svabaTimer::stop(const std::string& part) { auto wall_end = std::chrono::steady_clock::now(); double elapsed = std::chrono::duration(wall_end - wall_start).count(); times[part] += elapsed; wall_elapsed += elapsed; //times[part] += static_cast(clock() - curr_clock) / CLOCKS_PER_SEC; //curr_clock = clock(); } void svabaTimer::start() { wall_start = std::chrono::steady_clock::now(); //curr_clock = clock(); } std::ostream& operator<<(std::ostream &out, const svabaTimer st) { double total_time = 0; for (auto& i : st.times) total_time += i.second; if (total_time == 0) return out; char buffer[140]; auto itr = st.times.find("r"); auto itm = st.times.find("m"); auto ita = st.times.find("as"); auto itk = st.times.find("k"); auto itt = st.times.find("t"); auto itp = st.times.find("pp"); if (total_time) snprintf (buffer, 140, "R: %2d%% M: %2d%% T: %2d%% C: %2d%% A: %2d%% P: %2d%%", SeqLib::percentCalc(itr->second, total_time), SeqLib::percentCalc(itm->second, total_time), SeqLib::percentCalc(itt->second, total_time), SeqLib::percentCalc(itk->second, total_time), SeqLib::percentCalc(ita->second, total_time), SeqLib::percentCalc(itp->second, total_time)); else snprintf (buffer, 140, "NO TIME"); out << std::string(buffer); return out; } // useful replace function std::string myreplace(std::string &s, std::string toReplace, std::string replaceWith) { return(s.replace(s.find(toReplace), toReplace.length(), replaceWith)); } bool hasRepeat(const std::string& seq) { if ((seq.find(POLYT) == std::string::npos) && (seq.find(POLYA) == std::string::npos) && (seq.find(POLYC) == std::string::npos) && (seq.find(POLYG) == std::string::npos) && (seq.find(POLYCG) == std::string::npos) && (seq.find(POLYAT) == std::string::npos) && (seq.find(POLYTC) == std::string::npos) && (seq.find(POLYAG) == std::string::npos) && (seq.find(POLYCA) == std::string::npos) && (seq.find(POLYTG) == std::string::npos)) return false; return true; } int overlapSize(const SeqLib::BamRecord& query, const SeqLib::BamRecordVector& subject) { // get the amount covered by subjet sequences typedef std::pair AP; typedef std::pair AP_wseq; std::vector align_pos; std::string convention_seq = ""; if (subject.size()) { convention_seq = subject[0].Sequence(); // set the orientation convention for(auto& j : subject) { if (j.Sequence() == convention_seq) align_pos.push_back(AP_wseq(AP(j.AlignmentPosition(),j.AlignmentEndPosition()), j.Sequence())); else align_pos.push_back(AP_wseq(AP(j.AlignmentPositionReverse(),j.AlignmentEndPositionReverse()), j.Sequence())); } } bool same_orientation = query.Sequence() == convention_seq; int al1 = same_orientation ? query.AlignmentPosition() : query.AlignmentPositionReverse(); int al2 = same_orientation ? query.AlignmentEndPosition() : query.AlignmentEndPositionReverse(); int max_overlap = 0; for (auto& k : align_pos) { // check each subject alignment to see if it overlaps query AP kk = k.first; max_overlap = std::max(max_overlap, std::max(0, std::min(kk.second, al2) - std::max(kk.first,al1))); // out = true; //if (al1 >= kk.first && al2 <= kk.second) // query_contained = true; } return max_overlap; } void print(std::stringstream& s, std::ofstream& log, bool cerr) { log << s.str(); if (cerr) std::cerr << s.str(); s.str(std::string()); } std::string runTimeString(int num_t_reads, int num_n_reads, int contig_counter, const SeqLib::GenomicRegion& region, const SeqLib::BamHeader& h, const svabaTimer& st, const timespec& start) { std::stringstream ss; if ( (num_t_reads + num_n_reads) > 0 && !region.IsEmpty()) { std::string print1 = SeqLib::AddCommas(region.pos1); std::string print2 = SeqLib::AddCommas(region.pos2); char buffer[180]; snprintf (buffer, 180, "***Ran %2s:%11s-%11s | T: %5d N: %5d C: %5d | ", h.IDtoName(region.chr).c_str(), print1.c_str(),print2.c_str(), (int)num_t_reads, (int)num_n_reads, (int)contig_counter); ss << std::string(buffer) << st << " | "; ss << SeqLib::displayRuntime(start); } else if (num_t_reads + num_n_reads > 0) { char buffer[180]; snprintf (buffer, 180, "Ran Whole Genome | T: %5d N: %5d C: %5d | ", (int)num_t_reads, (int)num_n_reads, (int)contig_counter); ss << std::string(buffer) << st << " | "; ss << SeqLib::displayRuntime(start); } return ss.str(); } // just get a count of how many jobs to run. Useful for limiting threads. Also set the regions int countJobs(const std::string& regionFile, SeqLib::GRC &file_regions, SeqLib::GRC &run_regions, const SeqLib::BamHeader& h, int chunk, int window_pad) { // open the region file if it exists if (!regionFile.empty() && fs::exists(regionFile)) { try { file_regions = SeqLib::GRC(regionFile, h); } catch (const std::exception &exc) { std::cerr << "Found chromosome in region file " << regionFile << " not in reference genome. Skipping.\n" << " Caught error: " << exc.what() << "\n"; } } // parse as a samtools string eg 1:1,000,000-2,000,000 else if (regionFile.find(":") != std::string::npos && regionFile.find("-") != std::string::npos) { file_regions.add(SeqLib::GenomicRegion(regionFile, h)); } // it's a single chromosome else if (!regionFile.empty()) { SeqLib::GenomicRegion gr(regionFile, "1", "1", h); if (gr.chr == -1 || gr.chr >= h.NumSequences()) { std::cerr << "ERROR: Trying to match chromosome " << regionFile << " to one in header, but no match found" << std::endl; exit(EXIT_FAILURE); } else { gr.pos2 = h.GetSequenceLength(gr.chr); //get_()->target_len[gr.chr]; file_regions.add(gr); } } // its empty, so cover whole genome else { // add all chromosomes for (int i = 0; i < h.NumSequences(); i++) { file_regions.add(SeqLib::GenomicRegion(i, 1, h.GetSequenceLength(i))); //h.get()_->target_len[i])); } } // check if the mask was successful if (file_regions.size() == 0) { std::cerr << "ERROR: Cannot read region file: " << regionFile << " or something wrong with bam header ('chr' prefix mismatch?)" << std::endl; exit(EXIT_FAILURE); } // divide it up if (chunk > 0) { // if <= 0, whole genome at once for (auto& r : file_regions) { SeqLib::GRC test(chunk, window_pad, r); run_regions.Concat(test); } } // now clear file regions, to signal that it was empty if (regionFile.empty()) file_regions.clear(); return run_regions.size(); } std::string __bamOptParse(std::map& obam, std::istringstream& arg, int sample_number, const std::string& prefix) { std::stringstream ss; std::string bam; arg >> bam; ss.str(std::string()); ss << prefix << std::setw(3) << std::setfill('0') << sample_number; obam[ss.str()] = bam; return bam; } bool __openWriterBam(const SeqLib::BamHeader& h, const std::string& name, SeqLib::BamWriter& wbam) { if (!wbam.Open(name)) return false; wbam.SetHeader(h);; if (!wbam.WriteHeader()) return false; return true; } /* bool __header_has_chr_prefix(bam_hdr_t * h) { for (int i = 0; i < h.NumSequences()) //->n_targets; ++i) if (h->target_name[i] && std::string(h->target_name[i]).find("chr") != std::string::npos) return true; return false; } */ //http://stackoverflow.com/questions/2114797/compute-median-of-values-stored-in-vector-c double CalcMHWScore(std::vector& scores) { double median; size_t size = scores.size(); std::sort(scores.begin(), scores.end()); if (size % 2 == 0) { median = (scores[size / 2 - 1] + scores[size / 2]) / 2; } else { median = scores[size / 2]; } return median; } int weightedRandom(const std::vector& cs) { // get a weighted random number size_t al = 0; double rand_val = rand() % 1000; while (al < cs.size()) { if (rand_val <= cs[al] * 1000) return al; ++al; } return al; } std::vector tokenize_delimited(const std::string& str, char delim) { std::vector tokens; size_t start = 0; size_t end = str.find(delim); while (end != std::string::npos) { tokens.push_back(str.substr(start, end - start)); start = end + 1; end = str.find(delim, start); } // Add the last token tokens.push_back(str.substr(start)); return tokens; } /// Check that the BAM header and BWA reference header line up. void checkHeaderCompatibility(const SeqLib::BamHeader& bamHeader, const SeqLib::BamHeader& refHeader, SvabaLogger& logger) { bool triggerExplain = false; if (bamHeader.NumSequences() != refHeader.NumSequences()) { triggerExplain = true; logger.log( true, true, //toerr, tolog "!!!!!!!!!!! WARNING !!!!!!!!!!!\n", "!!!!!! Number of sequences in BAM header mismatches reference\n", "!!!!!! BAM: ", bamHeader.NumSequences(), " -- Ref: ", refHeader.NumSequences() ); } if (bamHeader.NumSequences() != refHeader.NumSequences()) { triggerExplain = true; logger.log(true, true, //toerr, tolog "!!!!!!!!!!! WARNING !!!!!!!!!!!\n", "!!!!!! Number of sequences in BAM header mismatches reference\n" "!!!!!! BAM: ", bamHeader.NumSequences(), " -- Ref: ", refHeader.NumSequences()); } const int n = std::min(bamHeader.NumSequences(), refHeader.NumSequences()); for (int i = 0; i < n; ++i) { auto bamName = bamHeader.IDtoName(i); auto refName = refHeader.IDtoName(i); if (bamName != refName) { triggerExplain = true; logger.log(true, true, "!!!!!! BAM sequence id ", i, ": \"", bamName, "\"", " -- Ref sequence id ", i, ": \"", refName, "\""); } } if (triggerExplain) { logger.log(true, true, std::string(100, '!'), "\n", "!!! SvABA is being run with different reference genome than the reads were mapped to.\n", "!!! This can cause a massive failure in variant detection!\n", "!!! If you are *sure* that the two references are functionally equivalent (e.g. chr1 vs 1)\n", "!!! and that the order of the chromosomes is equivalent between the two,\n", "!!! you can override this error with option \"--override-reference-check\"\n", std::string(100, '!')); std::exit(EXIT_FAILURE); } } std::vector> find_repeats(std::string_view seq, size_t single_repeat_count = 0, size_t dinuc_repeat_count = 0) { std::vector> result; size_t n = seq.size(); // Check for single-base repeats (e.g., "AAAA") if (single_repeat_count > 0 && n >= single_repeat_count) { for (size_t i = 0; i <= n - single_repeat_count; ++i) { char base = seq[i]; size_t j = i + 1; while (j < n && seq[j] == base) ++j; size_t len = j - i; if (len >= single_repeat_count) { result.emplace_back(i, j - 1); i = j - 1; // advance to end of this repeat block } } } // Check for dinucleotide repeats (e.g., "AGAGAG") if (dinuc_repeat_count > 0 && n >= 2 * dinuc_repeat_count) { for (size_t i = 0; i <= n - 2 * dinuc_repeat_count; ++i) { std::string_view unit = seq.substr(i, 2); size_t j = i + 2; size_t count = 1; while (j + 1 < n && seq.substr(j, 2) == unit) { ++count; j += 2; } if (count >= dinuc_repeat_count) { result.emplace_back(i, j - 1); i = j - 2; // advance to end of this repeat block } } } return result; } std::vector parsePLString(const std::string& pl_str) { std::vector out; out.reserve(3); std::stringstream ss(pl_str); std::string tok; while (std::getline(ss, tok, ',')) { try { out.push_back(std::stoi(tok)); } catch (const std::exception& e) { throw std::runtime_error("Invalid integer in PL string: " + tok); } } if (out.size() != 3) { throw std::runtime_error("PL string must have exactly 3 comma-separated values"); } return out; } // thresholds constexpr size_t HOMOPOLYMER_MIN = 3; // e.g. 16 the same base constexpr size_t DINUC_REPEAT_MIN = 2; // e.g. 8 a nt motif SubstringList find_long_homopolymers(const std::string& s) { SubstringList results; if (s.size() < HOMOPOLYMER_MIN) return results; size_t run = 1; for (size_t i = 1; i < s.size(); ++i) { if (s[i] == s[i - 1]) { ++run; } else { if (run >= HOMOPOLYMER_MIN) { size_t end = i - 1; size_t start = end - run + 1; results.emplace_back(start, end, std::string(run, s[i - 1])); } run = 1; } } // Catch repeat at end of string if (run >= HOMOPOLYMER_MIN) { size_t end = s.size() - 1; size_t start = end - run + 1; results.emplace_back(start, end, std::string(run, s.back())); } return results; } SubstringList find_long_dinuc_repeats(const std::string& s) { SubstringList results; if (s.size() < 2 * DINUC_REPEAT_MIN) return results; for (size_t i = 0; i + 2 * DINUC_REPEAT_MIN <= s.size(); ++i) { std::string unit = s.substr(i, 2); size_t reps = 1; while (i + 2 * (reps + 1) <= s.size() && s.substr(i + 2 * reps, 2) == unit) { ++reps; } if (reps >= DINUC_REPEAT_MIN) { size_t start = i; size_t end = i + 2 * reps - 1; std::string repeated_seq; for (size_t r = 0; r < reps; ++r) repeated_seq += unit; results.emplace_back(start, end, repeated_seq); i = end - 1; // Skip ahead past this repeat } } return results; } } // end namespace svabaUtils ================================================ FILE: src/svaba/SvabaUtils.h ================================================ #pragma once #include #include #include #include #include #include #include "SvabaLogger.h" #include "SeqLib/BamReader.h" #include "SeqLib/BamWriter.h" #include "SeqLib/RefGenome.h" #include "SeqLib/GenomicRegion.h" typedef std::pair CountPair; typedef std::tuple Substring; typedef std::vector SubstringList; #define SRTAG(r) ((r).GetZTag("SR") + "_" + std::to_string((r).AlignmentFlag()) + "_" + (r).Qname()) namespace svabaUtils { // make a structure to store timing opt struct svabaTimer { static const std::string header; svabaTimer(); std::vector s; //clock_t curr_clock; std::chrono::time_point wall_start; double wall_elapsed = 0; void stop(const std::string& part); void start(); // print it friend std::ostream& operator<<(std::ostream &out, const svabaTimer st); CountPair weird_read_count = {0,0}; // tumor/normal weird reads CountPair mate_read_count = {0,0}; // tumor/normal weird reads size_t dc_read_count = 0; size_t dc_cluster_count = 0; size_t contig_count = 0; size_t aligned_contig_count; size_t bps_count; std::string logRuntime(const SeqLib::BamHeader& h); // run time std::unordered_map times; int pct_r = 0, pct_m = 0, pct_k = 0, pct_as = 0; // pct_pp = 0; SeqLib::GenomicRegion gr; }; std::string myreplace(std::string &s, std::string toReplace, std::string replaceWith); double CalcMHWScore(std::vector& scores); int overlapSize(const SeqLib::BamRecord& query, const SeqLib::BamRecordVector& subject); bool hasRepeat(const std::string& seq); std::string runTimeString(int num_t_reads, int num_n_reads, int contig_counter, const SeqLib::GenomicRegion& region, const SeqLib::BamHeader& h, const svabaTimer& st, const timespec& start); int countJobs(const std::string& regionFile, SeqLib::GRC &file_regions, SeqLib::GRC &run_regions, const SeqLib::BamHeader& h, int chunk, int window_pad); template void fopen(const std::string& s, T& o) { o.open(s.c_str(), std::ios::out); if (!o) { std::cerr << "Failed to open file: " << s << std::endl; exit(EXIT_FAILURE); } } std::string fileDateString(); bool __header_has_chr_prefix(bam_hdr_t * h); /** Generate a weighed random integer * @param cs Weighting for each integer (values must sum to one) * @return Random integer bounded on [0,cs.size()) */ int weightedRandom(const std::vector& cs); std::vector tokenize_delimited(const std::string& str, char delim); void checkHeaderCompatibility(const SeqLib::BamHeader& bamHeader, const SeqLib::BamHeader& refHeader, SvabaLogger& logger); std::vector> find_repeats(std::string_view seq, size_t single_repeat_count, size_t dinuc_repeat_count); std::vector parsePLString(const std::string& pl_str); SubstringList find_long_dinuc_repeats(const std::string& s); SubstringList find_long_homopolymers(const std::string& s); } ================================================ FILE: src/svaba/refilter.cpp ================================================ // refilter.cpp — re-apply LOD / PASS filtering to an existing bps.txt.gz // // The goal here is to avoid re-running assembly when the user only wants to // tweak filtering thresholds. We read bps.txt.gz line-by-line, reconstruct // BreakPoint objects via BreakPoint(line, sc*), rescore, redump, and // regenerate the VCFs. The `dbsnp` column is round-tripped verbatim from // the dump; DBSnp re-querying has been sunset. // // Requirements on the input file: // - Header line present (tab-delimited). Per-sample columns are expected to // begin with 't' (tumor) or 'n' (normal). Core column count is either 41 // (legacy pre-SvABA2.0) or 51 (SvABA2.0 refilter-aware dump). Both are // accepted. // - Column formatting matches BreakPoint::toFileString(). The BreakPoint // parse constructor tolerates sentinel values ("x", "NA", "nan", empty) // for ints/doubles. // // Caveats: // - Without contigs/reads, assembly-derived gates that re-examine sequence // cannot run. We rely on the dumped split/read counts and the scoring // primitives in svabaModels. // - Older dumps may leave per-end LocalAlignment, cpos, match, split_cov // bounds, and contig_len at defaults; those filters will degrade // gracefully rather than erroring out. #include "refilter.h" #include #include #include #include #include "gzstream.h" #include "SeqLib/BamReader.h" #include "vcf.h" #include "BreakPoint.h" #include "SvabaUtils.h" #include "SvabaLogger.h" #include "SvabaOptions.h" #include "SvabaOutputWriter.h" #include "SvabaSharedConfig.h" namespace opt { static std::string input_file; static std::string analysis_id = "refilter"; static std::string bam; // any BAM; used only for the sequence header static int verbose = 1; // Indel probability cutoffs (will be pushed into SvabaOptions before // scoring). Defaults mirror the in-tree SvabaOptions defaults so refilter // is non-destructive when no --lod* flags are passed. static double lod = 1.0; static double lod_db = 1.0; static double lod_somatic = 0.0; static double lod_somatic_db = 2.0; // Assumed mean read length when the dump lacks it. modelSelection uses this // for per-read error scaling; in practice most short-read BAMs are 101-151. static int readlen = 150; } enum { OPT_LOD, OPT_LOD_DB, OPT_LOD_SOMATIC, OPT_LOD_SOMATIC_DB, OPT_READLEN }; static const char* shortopts = "hi:a:v:G:b:"; static const struct option longopts[] = { { "help", no_argument, NULL, 'h' }, { "input-bps", required_argument, NULL, 'i' }, { "bam", required_argument, NULL, 'b' }, { "analysis-id", required_argument, NULL, 'a' }, { "verbose", required_argument, NULL, 'v' }, { "lod", required_argument, NULL, OPT_LOD }, { "lod-dbsnp", required_argument, NULL, OPT_LOD_DB }, { "lod-somatic", required_argument, NULL, OPT_LOD_SOMATIC }, { "lod-somatic-dbsnp", required_argument, NULL, OPT_LOD_SOMATIC_DB }, { "readlen", required_argument, NULL, OPT_READLEN }, { NULL, 0, NULL, 0 } }; static const char *BP_USAGE_MESSAGE = "Usage: svaba refilter [OPTION] -i bps.txt.gz -b \n\n" " Description: re-run LOD/PASS filtering against an existing bps.txt.gz\n" " without re-doing assembly. Samples, coverage, split counts, contig\n" " coordinates, and local-alignment flags are read back from the dump.\n" "\n" " General options\n" " -v, --verbose Verbosity level (0-4). Default: 1\n" " -h, --help Display this help and exit\n" " -a, --analysis-id Analysis ID for output filenames. [refilter]\n" " Required input\n" " -i, --input-bps bps.txt.gz produced by `svaba run`.\n" " -b, --bam Any svaba-input BAM (used for sequence header only).\n" " Optional\n" " --lod LOD for non-REF PASS. [1.0]\n" " --lod-dbsnp LOD for non-REF PASS at DBSnp sites. [1.0]\n" " --lod-somatic LOD for SOMATIC. [0.0]\n" " --lod-somatic-dbsnp LOD for SOMATIC at DBSnp sites. [2.0]\n" " --readlen Assumed read length when dump lacks it. [150]\n" "\n"; // parse the command line options static void parseBreakOptions(int argc, char** argv) { bool die = false; if (argc <= 2) die = true; for (char c; (c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1;) { std::istringstream arg(optarg != NULL ? optarg : ""); switch (c) { case 'h': die = true; break; case 'i': arg >> opt::input_file; break; case 'v': arg >> opt::verbose; break; case 'a': arg >> opt::analysis_id; break; case 'b': arg >> opt::bam; break; case OPT_LOD: arg >> opt::lod; break; case OPT_LOD_DB: arg >> opt::lod_db; break; case OPT_LOD_SOMATIC: arg >> opt::lod_somatic; break; case OPT_LOD_SOMATIC_DB: arg >> opt::lod_somatic_db; break; case OPT_READLEN: arg >> opt::readlen; break; } } if (opt::input_file.empty()) { std::cerr << "ERROR: --input-bps is required\n"; die = true; } if (opt::bam.empty()) { std::cerr << "ERROR: --bam is required (for the sequence header)\n"; die = true; } if (die) { std::cerr << "\n" << BP_USAGE_MESSAGE; exit(EXIT_FAILURE); } } // Parse a bps.txt sample-column header token like "t001_/path/to.bam" into // (prefix, path). If there is no underscore, the whole token is treated as // the prefix. static std::pair splitSampleHeader(const std::string& tok) { const auto us = tok.find('_'); if (us == std::string::npos) return { tok, "" }; return { tok.substr(0, us), tok.substr(us + 1) }; } void runRefilterBreakpoints(int argc, char** argv) { parseBreakOptions(argc, argv); if (opt::verbose > 0) { std::cerr << "Input bps file: " << opt::input_file << std::endl << "Output analysis id: " << opt::analysis_id << std::endl << " LOD cutoff (non-REF): " << opt::lod << std::endl << " LOD cutoff (non-REF, at DBSNP): " << opt::lod_db << std::endl << " LOD somatic cutoff: " << opt::lod_somatic << std::endl << " LOD somatic cutoff (at DBSNP): " << opt::lod_somatic_db << std::endl; } if (!SeqLib::read_access_test(opt::input_file)) { std::cerr << "ERROR: Cannot read " << opt::input_file << std::endl; exit(EXIT_FAILURE); } // Open the BAM only to grab its header; refilter does not read any reads. SeqLib::BamReader bwalker; if (!bwalker.Open(opt::bam)) { std::cerr << "ERROR: could not open BAM " << opt::bam << std::endl; exit(EXIT_FAILURE); } const SeqLib::BamHeader hdr = bwalker.Header(); // ------------------------------------------------------------------ // Read the bps.txt.gz header and recover sample prefixes. // // Layouts supported: // legacy (41 core cols): ..., contig_conf1, contig_conf2, // svaba2 (51 core cols): ..., contig_conf1, contig_conf2, // cpos1, cpos2, lmatch, rmatch, scov1, scov2, // local1, local2, ctglen, flipped, // // // Sample header tokens are of the form "{prefix}_{bampath}" where prefix // begins with 't' or 'n'. We locate the sample block by scanning for the // first column whose name starts with 't' or 'n' past the fixed-width // prefix (col 34+ is safe: no core column from there starts t/n). // ------------------------------------------------------------------ igzstream infile(opt::input_file.c_str(), std::ios::in); std::string headerLine; if (!std::getline(infile, headerLine)) { std::cerr << "ERROR: bps.txt file is empty or unreadable" << std::endl; exit(EXIT_FAILURE); } const std::vector headerv = svabaUtils::tokenize_delimited(headerLine, '\t'); if (headerv.size() < 41) { std::cerr << "ERROR: bps.txt header has only " << headerv.size() << " columns; expected at least 41 (legacy) or 51 (svaba2)." << " File may be truncated or from an unsupported svaba version." << std::endl; exit(EXIT_FAILURE); } size_t sample_start = 0; for (size_t i = 34; i < headerv.size(); ++i) { if (!headerv[i].empty() && (headerv[i].at(0) == 't' || headerv[i].at(0) == 'n')) { sample_start = i; break; } } if (sample_start == 0) { std::cerr << "ERROR: could not locate sample-name columns in bps.txt header." << " No column starting with 't' or 'n' found after the core block." << std::endl; exit(EXIT_FAILURE); } // Build a minimal SvabaSharedConfig sufficient to drive BreakPoint parsing // and rescoring. SvabaOutputWriter is constructed but not `init`-ed; no // files are opened by it. We open our own bps output stream below. SvabaLogger logger; SvabaOptions opts; SvabaOutputWriter writer(logger, opts); // Push CLI-provided cutoffs into opts; score_indel() reads these. opts.lod = opt::lod; opts.lodDb = opt::lod_db; opts.lodSomatic = opt::lod_somatic; opts.lodSomaticDb = opt::lod_somatic_db; // Populate opts.bams from the header. The BreakPoint parse constructor // iterates sc->opts.bams (a std::map) in sorted key order, so as long as // the dump also iterated opts.bams in sorted order (which it does), the // per-sample token order is round-trip-safe. Key is the sample prefix // (e.g. "t001"); the value (bam path from the header token) is only used // here for the reconstructed header line. std::vector allele_names; // raw header tokens, for info/debug std::vector sample_prefixes; for (size_t i = sample_start; i < headerv.size(); ++i) { allele_names.push_back(headerv[i]); auto [pref, path] = splitSampleHeader(headerv[i]); if (pref.empty() || (pref.at(0) != 't' && pref.at(0) != 'n')) { std::cerr << "ERROR: unexpected sample header token '" << headerv[i] << "' (col " << i << "); " << "expected to start with 't' or 'n'." << std::endl; exit(EXIT_FAILURE); } // Preserve the original bam path from the header (may be empty if the // header token was just a bare prefix). Used only for the re-emitted // header line and (incidentally) as the value in the map iterated by // the BreakPoint parse constructor. opts.bams[pref] = path; sample_prefixes.push_back(pref); } if (opt::verbose > 0) { std::cerr << "...bps.txt has " << headerv.size() << " columns; " << sample_start << " core, " << (headerv.size() - sample_start) << " sample(s): "; for (const auto& p : sample_prefixes) std::cerr << p << " "; std::cerr << std::endl; } // Build the SvabaSharedConfig SvabaSharedConfig sc(logger, opts, writer); sc.header = hdr; sc.readlen = opt::readlen; // (DBSnp filtering has been sunset — refilter no longer supports it. The // `dbsnp` column in bps.txt.gz is round-tripped verbatim from the dump.) // VCF header (minimal) VCFHeader vheader; vheader.filedate = svabaUtils::fileDateString(); vheader.source = "svaba refilter"; vheader.reference = ""; // Open the rewritten bps file and write its header. We re-emit the current // BreakPoint::header() layout so downstream tooling always sees the // newest column set (the reader above was backward-compatible with the // older 41-col dumps, but we prefer to always emit the modern format). const std::string new_bps_file = opt::analysis_id + ".bps.txt.gz"; ogzstream os_bps; svabaUtils::fopen(new_bps_file, os_bps); os_bps << BreakPoint::header(); for (auto& p : opts.bams) os_bps << "\t" << p.first << "_" << p.second; os_bps << "\n"; // --------------------------- main loop --------------------------- size_t line_count = 0; size_t parse_errors = 0; std::string line; while (std::getline(infile, line)) { if (line.empty()) continue; if (line[0] == '#') continue; // defensive if (opt::verbose > 0 && line_count && (line_count % 100000) == 0) std::cerr << "...read " << opt::input_file << " at line " << SeqLib::AddCommas(line_count) << std::endl; std::unique_ptr bp; try { bp.reset(new BreakPoint(line, &sc)); } catch (const std::exception& e) { ++parse_errors; if (parse_errors <= 5) { std::cerr << "WARN: parse error at line " << (line_count + 1) << ": " << e.what() << std::endl; } ++line_count; continue; } // Roll discordant counts from per-sample disc into dc.{tcount,ncount}. // The original scorer sets these during assembly; they may not be // present in the dump's dc fields, so derive from per-sample `disc`. bp->dc.tcount = 0; bp->dc.ncount = 0; for (auto& [pref, si] : bp->allele) { if (!pref.empty() && pref.at(0) == 't') bp->dc.tcount += si.disc; else bp->dc.ncount += si.disc; } // Clear derived fields so scoreBreakpoint() can repopulate from scratch. // The parse sets `confidence` from the dump; scoreBreakpoint() asserts // it's empty (except for BLACKLIST), so blank it here unless already // BLACKLIST (which is a terminal state we want to preserve). if (bp->confidence != "BLACKLIST") bp->confidence.clear(); // Re-score try { bp->scoreBreakpoint(); } catch (const std::exception& e) { std::cerr << "WARN: scoreBreakpoint failed at line " << (line_count + 1) << ": " << e.what() << std::endl; ++line_count; continue; } // toFileString() needs the BAM header to render chromosome names; // read-tracking is no longer a per-call toggle (supporting-read qnames // are stored or stripped elsewhere in the write path). os_bps << bp->toFileString(hdr) << "\n"; ++line_count; } os_bps.close(); if (opt::verbose > 0) { std::cerr << "...refilter read " << line_count << " lines" << " (" << parse_errors << " parse error" << (parse_errors == 1 ? "" : "s") << ")" << std::endl; } // ---- regenerate VCFs from the refiltered bps ---- if (SeqLib::read_access_test(new_bps_file)) { if (opt::verbose > 0) std::cerr << "...making the primary VCFs (unfiltered and filtered) from file " << new_bps_file << std::endl; VCFFile snowvcf(new_bps_file, opt::analysis_id, sc, vheader, true, opt::verbose > 0); const bool onefile = (allele_names.size() == 1); std::string basename = opt::analysis_id + ".svaba.unfiltered."; snowvcf.include_nonpass = true; snowvcf.writeIndels(basename, false, onefile, hdr); snowvcf.writeSVs (basename, false, onefile, hdr); basename = opt::analysis_id + ".svaba."; snowvcf.include_nonpass = false; snowvcf.writeIndels(basename, false, onefile, hdr); snowvcf.writeSVs (basename, false, onefile, hdr); } else { std::cerr << "Failed to make VCF. Could not find rewritten bps file " << new_bps_file << std::endl; } } ================================================ FILE: src/svaba/refilter.h ================================================ #pragma once // Re-run LOD / PASS filtering against an existing bps.txt.gz. See refilter.cpp // for option parsing and the supported input layouts (41-col legacy and // 51-col SvABA2.0). Invoked from svaba.cpp as `svaba refilter ...`. void runRefilterBreakpoints(int argc, char** argv); ================================================ FILE: src/svaba/run_svaba.cpp ================================================ //run_svaba.cpp #include #include #include "threadpool.h" #include #include #include #include #include #include #include #include #include #include "SeqLib/GenomicRegion.h" #include "SeqLib/UnalignedSequence.h" #include "SeqLib/ReadFilter.h" #include "SeqLib/BamHeader.h" #include "SeqLib/BWAAligner.h" #include "SeqLib/ReadFilter.h" #include "SvabaRegionProcessor.h" #include "SvabaLogger.h" #include "KmerFilter.h" #include "vcf.h" #include "DBSnpFilter.h" #include "SvabaUtils.h" #include "SeqLib/BFC.h" #include "SvabaFileLoader.h" #include "SvabaOutputWriter.h" #include "SvabaAssemblerEngine.h" #include "SvabaAssemblerConfig.h" using SeqLib::BWAIndex; using SeqLib::BWAAligner; using SeqLib::BamHeader; using SeqLib::Filter::ReadFilterCollection; using SeqLib::GenomicRegion; using SeqLib::GRC; using SeqLib::BWAIndexPtr; using std::string; using std::cerr; using std::endl; using std::make_shared; // 1 is normal logging // 2 is heavy constexpr inline int log_level = 1; // forward declaration, need non-static and not in // anonymous namespace to keep external linkage void runsvaba (int argc, char** argv); struct SvabaBatchWorkItem { // batch of region + unique region ID pairs std::vector> items; SvabaRegionProcessor& processor; // constructor takes a reference to the shared processor SvabaBatchWorkItem(const std::vector>& items_, SvabaRegionProcessor& proc) : items(items_), processor(proc) {} // call operator matching SvabaWorkItem signature bool operator()(svabaThreadUnit& unit, size_t threadId) const { for (auto& [region, id] : items) { processor.process(region, unit, threadId); } return true; } }; // Modified sendThreads() to submit batches of regions instead of one-by-one jobs void sendThreads(const SeqLib::GRC& regionsToRun, SvabaSharedConfig& sc) { // shared processor instance SvabaRegionProcessor proc(sc); // thread pool now handles SvabaBatchWorkItem jobs ThreadPool pool(sc); size_t batch_size = 1; if (sc.opts.numThreads > 0) { size_t per_thread = sc.total_regions_to_process / sc.opts.numThreads; if (per_thread < batch_size) { batch_size = std::max(1, per_thread); // prevent batch_size = 0 } } std::vector> batch; batch.reserve(batch_size); int count = 0; for (auto& region : regionsToRun) { batch.emplace_back(region, ++count); if (batch.size() == batch_size) { pool.submit(std::make_unique(batch, proc)); batch.clear(); } } // submit any leftover regions as one final batch if (!batch.empty()) { pool.submit(std::make_unique(batch, proc)); } pool.shutdown(); } void makeVCFs(SvabaSharedConfig& sc) { // // make the VCF file string file = sc.opts.analysisId + ".bps.txt.gz"; sc.logger.log(true, true, "...loading the bps file ", file," for conversion to VCF"); // // make the header VCFHeader header; header.filedate = svabaUtils::fileDateString(); header.source = sc.args; header.reference = sc.opts.refGenome; for (int i = 0; i < sc.header.NumSequences(); ++i) header.addContigField(sc.header.IDtoName(i),sc.header.GetSequenceLength(i)); for (auto& b : sc.opts.bams) { string fname = b.second; //bpf.filename(); header.addSampleField(fname); header.colnames += "\t" + fname; } // check if it has a matched control. If so, output "somatic / germline" vcfs bool case_control_run = false; for (auto& b : sc.opts.bams) if (b.first.at(0) == 'n') case_control_run = true; // primary VCFs sc.logger.log(true, true, "...making the primary VCFs (unfiltered and filtered) from file ",file); VCFFile snowvcf(file, sc.opts.analysisId, sc, header, false, sc.opts.verbose > 0); string basename = sc.opts.analysisId + ".svaba.unfiltered."; snowvcf.include_nonpass = true; sc.logger.log(true, true, "...writing unfiltered VCFs"); snowvcf.writeIndels(basename, false, !case_control_run, sc.header); snowvcf.writeSVs(basename, false, !case_control_run, sc.header); sc.logger.log(true, true, "...writing filtered VCFs"); basename = sc.opts.analysisId + ".svaba."; snowvcf.include_nonpass = false; snowvcf.writeIndels(basename, false, !case_control_run, sc.header); snowvcf.writeSVs(basename, false, !case_control_run, sc.header); } void runsvaba(int argc, char** argv) { // parse command line SvabaOptions opts; try { opts = SvabaOptions::parse(argc, argv); if (opts.help) { SvabaOptions::printUsage(); return; } } catch (const std::exception& e) { std::cerr << "ERROR: " << e.what() << "\n"; return; } // instantiate logger, options, writer here. // its just easier then to store refernce in SvabaSharedConfig // to avoid header dependencies SvabaLogger logger; logger.init(opts.analysisId + ".log"); //logger.welcome(opts); // initial message // open the reference genome logger.log(true, true, "...loading the reference sequence for BWA"); BWAIndexPtr bwa_idx = make_shared(); bwa_idx->LoadIndex(opts.refGenome); // get the dictionary from reference BamHeader bwa_header = bwa_idx->HeaderFromIndex(); // open the writer SvabaOutputWriter writer(logger, opts); writer.init(opts.analysisId, bwa_header); // shared information to be passed around thread units SvabaSharedConfig sc(logger, opts, writer); sc.bwa_idx = bwa_idx; sc.header = bwa_header; // start the timer clock_gettime(CLOCK_MONOTONIC, &sc.start); // report which local-assembly engine was compiled in std::cerr << "...local-assembly engine: " << svaba::kAssemblerName #if SVABA_ASSEMBLER_FERMI << " (FERMI assembly enabled)" #else << " (SGA assembly enabled)" #endif << std::endl; // check that the two headers are equivalant // open the main bam to get header info SeqLib::BamReader first_tumor_bam_reader; if (!first_tumor_bam_reader.Open(opts.main_bam)) { cerr << "ERROR: Cannot open main bam file: " << opts.main_bam << endl; exit(EXIT_FAILURE); } SeqLib::BamHeader first_header = first_tumor_bam_reader.Header(); svabaUtils::checkHeaderCompatibility(first_header, bwa_header, logger); // Check input BAM @PG tags for BWA. When --always-realign-corrected is // NOT set, svaba reuses the input BAM's native CIGAR/NM for unchanged // reads in the r2c-vs-native gate. That comparison is only valid if the // input was aligned with BWA (same scoring model as svaba's internal // aligner). If the PG chain doesn't mention "bwa", warn loudly. if (!opts.alwaysRealignCorrected) { std::string hdr_text = first_header.AsString(); // case-insensitive search: look for "bwa" anywhere in @PG lines bool found_bwa = false; std::istringstream hdr_stream(hdr_text); std::string line; while (std::getline(hdr_stream, line)) { if (line.substr(0, 3) != "@PG") continue; // case-insensitive: lowercase the line for matching std::string lower_line = line; std::transform(lower_line.begin(), lower_line.end(), lower_line.begin(), ::tolower); if (lower_line.find("bwa") != std::string::npos) { found_bwa = true; break; } } if (!found_bwa) { logger.log(true, true, ""); logger.log(true, true, "************************************************************"); logger.log(true, true, "* WARNING: No BWA @PG tag found in input BAM header. *"); logger.log(true, true, "* svaba reuses the input BAM's CIGAR/NM for reads that *"); logger.log(true, true, "* BFC did not modify. This is only valid when the input *"); logger.log(true, true, "* was aligned with BWA-MEM (same scoring model as svaba's *"); logger.log(true, true, "* internal aligner). *"); logger.log(true, true, "* *"); logger.log(true, true, "* If this BAM was NOT aligned with BWA, re-run with: *"); logger.log(true, true, "* --always-realign-corrected *"); logger.log(true, true, "* to force re-alignment of every read to the reference. *"); logger.log(true, true, "************************************************************"); logger.log(true, true, ""); } } // open file loader SvabaFileLoader loader(sc); // open the blacklist, load into sc.blacklist for (const auto& path : sc.opts.blacklistFile) { SeqLib::GRC this_blacklist; loader.loadBedRegions(path, this_blacklist); sc.blacklist.Concat(this_blacklist); } sc.blacklist.MergeOverlappingIntervals(); sc.blacklist.CreateTreeMap(); logger.log(true, true, "...loaded ", SeqLib::AddCommas(sc.blacklist.size()), " blacklist regions across ", SeqLib::AddCommas(sc.opts.blacklistFile.size()), " files"); // open the germline sv database loader.loadBedRegions(sc.opts.germlineSvFile, sc.germline_svs); // open the DBSnpFilter if (sc.opts.dbsnpVcf.length()) { sc.dbsnp_filter = std::make_shared(opts.dbsnpVcf, bwa_header, logger); } // needed for aligned contig for (auto& b : opts.bams) sc.prefixes.insert(b.first); // parse the region file, count number of jobs SeqLib::GRC regionsToRun; loader.countJobs(regionsToRun); // SvABA2.0: drop any queued region that is 100% covered by the blacklist. // svaba already filters reads by blacklist *inside* each region (see // SvabaRegionProcessor.cpp:74), so a chunk that sits entirely in a // blacklisted contig (e.g. the chrUn / *_decoy / *_alt contigs in the // nonstd_chr blacklist) would otherwise still get its full region // pipeline run — open the BAM walker, learn params, attempt local // assembly on a stream of reads that all get dropped — just to produce // zero callable bases. Net behavior is unchanged; this is pure // optimization of the queue. // // The blacklist has had MergeOverlappingIntervals() + CreateTreeMap() // called already (a few lines above), so FindOverlapWidth is an O(k log n) // tree walk over the blacklist intervals that touch each region. Runs // once, pre-queue, so it's off the critical path. if (!sc.blacklist.empty() && regionsToRun.size() > 0) { SeqLib::GRC kept; size_t dropped_n = 0; size_t dropped_bp = 0; for (const auto& r : regionsToRun) { const int w = r.Width(); if (w > 0 && static_cast(sc.blacklist.FindOverlapWidth(r, /*ignore_strand=*/true)) >= w) { ++dropped_n; dropped_bp += static_cast(w); continue; } kept.add(r); } if (dropped_n > 0) { logger.log(true, true, "...pruned ", SeqLib::AddCommas(dropped_n), " of ", SeqLib::AddCommas(regionsToRun.size()), " queued regions (", SeqLib::AddCommas(dropped_bp), " bp) that were 100% covered by the blacklist"); regionsToRun = std::move(kept); // No runtime.txt line will be emitted for a pruned region; the // accounting in sc.total_regions_to_process below reflects what // actually gets queued. } } sc.total_regions_to_process = regionsToRun.size(); if (sc.total_regions_to_process < opts.numThreads) { opts.numThreads = sc.total_regions_to_process; } // debug /* regionsToRun.clear(); for (int i = 0; i < 10; i++) regionsToRun.add(GenomicRegion(2,89000000,91500000)); */ // --- learn the insert-sizes --- logger.log(true, true,"...learning insert size distribution across all BAMs; this may take a while"); // learn from the BAM files for (const auto& b : opts.bams) { auto [it, inserted] = sc.bamStats.emplace(b.first, LearnBamParams(sc, b.second)); logger.log(true,true,"......learning BAM: ", b.second); it->second.learnParams(); } // --- report what we learned --- for (const auto& bs : sc.bamStats) { logger.log(opts.verbose > 1, true, "=====", bs.first); for (const auto& brg : bs.second.bam_read_groups) logger.log(opts.verbose > 1, true, brg.first, " - ", brg.second); } int globalReadLen = 0; int globalMaxMapQ = 0; double globalInsertSize = 0; for (const auto& [_, learn_bam_param] : sc.bamStats) { globalReadLen = std::max(globalReadLen, learn_bam_param.readlen_max); globalMaxMapQ = std::max(globalMaxMapQ, learn_bam_param.mapq_max); globalInsertSize = std::max(globalInsertSize, learn_bam_param.isize_max); } sc.readlen = globalReadLen; sc.insertsize = globalInsertSize; // --- set the SGA min overlap if user didn't --- if (opts.sgaMinOverlap == 0) { opts.sgaMinOverlap = std::max(30, int(0.6 * globalReadLen)); } logger.log(true, true, "... found max read length = ", globalReadLen, "; SGA minOverlap = ", opts.sgaMinOverlap, "; max MAPQ = ", globalMaxMapQ ); // --- compute seed parameters --- int seedLength, seedStride; { svabaAssemblerEngine tester( "test", opts.sgaErrorRate, opts.sgaMinOverlap, globalReadLen ); tester.calculateSeedParameters( globalReadLen, opts.sgaMinOverlap, seedLength, seedStride ); } logger.log(opts.verbose > 0, true, "...seedLength = ", seedLength,", readlen=", globalReadLen, ")" ); // FR isize discordant cutoff is now applied per-RG directly in // svabaBamWalker::readBam (via getIsizeCutoff), using the same // formula as TagDiscordant: median + SD * sdDiscCutoff. // No more per-RG FR rules in ReadFilterCollection. // set the ReadFilterCollection to be applied to each region logger.log(opts.verbose > 1, true, opts.rulesJson); sc.mr = ReadFilterCollection(opts.rulesJson, sc.header); logger.log(opts.verbose > 0, true, sc.mr); // put args into string for VCF later sc.args += "(v" + string(SVABA_VERSION) + ") "; for (int i = 0; i < argc; ++i) sc.args += string(argv[i]) + " "; if (regionsToRun.size()) { logger.log(true, true, "...running on ", SeqLib::AddCommas(regionsToRun.size()), " chunks"); } else { logger.log(true, true, "Chunk was <= 0: Reading in whole-genome at once"); } // send the jobs to the queue logger.log(true, true, "Starting detection pipeline"); sendThreads(regionsToRun, sc); // close the writer writer.close(); // make the VCF file //makeVCFs(sc); cerr << SeqLib::displayRuntime(sc.start) << endl; // suggest postprocess command std::string stars(72, '*'); logger.log(true, true, ""); logger.log(true, true, stars); logger.log(true, true, " svaba run complete for: ", opts.analysisId); logger.log(true, true, ""); logger.log(true, true, " Next step — sort, dedup, and filter outputs:"); logger.log(true, true, ""); logger.log(true, true, " svaba_postprocess.sh -t 8 -m 4G ", opts.analysisId); logger.log(true, true, ""); logger.log(true, true, " Then convert to VCF:"); logger.log(true, true, ""); logger.log(true, true, " svaba tovcf -i ", opts.analysisId, ".bps.sorted.dedup.txt.gz -b ", opts.main_bam, " -a ", opts.analysisId); logger.log(true, true, stars); logger.log(true, true, ""); } ================================================ FILE: src/svaba/svaba.cpp ================================================ /* SvABA - Somatic Structural Variation Dectection * Copyright 2014 Broad Institute * Written by Jeremiah Wala (jeremiah.wala@gmail.com) * Released under the included license detailed below. * * SvABA incorportes the core of String Graph Assembler, * -- String Graph Assembler -- Copyright 2009 Wellcome Trust Sanger Institute * -- Written by Jared Simpson * -- Released under the GPL */ // svaba.cpp #include #include #include "SvabaOptions.h" void runToVCF(int argc, char** argv); void runsvaba(int argc, char** argv); void runRefilterBreakpoints(int argc, char** argv); void runPostprocess(int argc, char** argv); // "Secret" benchmark subcommand: deliberately NOT listed in printUsage() // below so it doesn't show up in the user-facing --help. Invoke with // `svaba test -h` to see its own usage. Used to isolate the per-phase // CPU cost of the main hot paths (walk / correct / assemble / align) // independently of the real pipeline's bookkeeping and scoring. void runTest(int argc, char** argv); static void printUsage() { constexpr std::string_view header = "------------------------------------------------------------\n" "-------- SvABA - SV and indel detection by assembly --------\n" "------------------------------------------------------------\n"; std::cout << header << "Program: SvABA\n" << "Version: " << SVABA_VERSION << " - " << SVABA_DATE << "\n\n" << "Usage: svaba [options]\n\n" << "Commands:\n" << " run Run SV and indel detection on BAM(s)\n" << " refilter Re-run LOD/PASS filtering on an existing bps.txt.gz\n" << " postprocess Sort + streaming-dedup per-suffix output BAMs\n" << " tovcf Convert a deduped bps.txt.gz into VCFv4.5 output\n\n" << "Report issues at https://github.com/walaj/svaba/issues\n"; } int main(int argc, char* argv[]) { if (argc < 2) { printUsage(); return EXIT_SUCCESS; } std::string_view cmd = argv[1]; if (cmd == "help" || cmd == "--help") { printUsage(); return EXIT_SUCCESS; } else if (cmd == "run") { // strip off the run before passing to parser return (runsvaba(argc - 1, argv + 1), EXIT_SUCCESS); } else if (cmd == "refilter") { return (runRefilterBreakpoints(argc - 1, argv + 1), EXIT_SUCCESS); } else if (cmd == "postprocess") { return (runPostprocess(argc - 1, argv + 1), EXIT_SUCCESS); } else if (cmd == "tovcf") { return (runToVCF(argc - 1, argv + 1), EXIT_SUCCESS); } // Secret benchmark subcommand — intentionally not in the user-facing // command list. Entry point: `svaba test -h` for its own usage. else if (cmd == "test") { return (runTest(argc - 1, argv + 1), EXIT_SUCCESS); } else { std::cerr << "Unknown command: " << cmd << "\n\n"; printUsage(); return EXIT_FAILURE; } std::cerr << "Done with SvABA" << std::endl; return 0; } ================================================ FILE: src/svaba/test_svaba.cpp ================================================ // test_svaba.cpp // // `svaba test` — a "secret" subcommand (not listed in the top-level help) // that runs a minimal microbenchmark of svaba's five main hot paths: // // 1. walk — read N reads from a BAM // 2. correct — BFC error-correct those reads // 3. realign — BWA-MEM align each *corrected* read back to the reference. // This mirrors the per-read native alignment that // BreakPoint::splitCoverage needs for its r2c-vs-native // comparative gate (SVABA_R2C_NATIVE_GATE). On a real // svaba run this is currently an underrated cost: N // BWA-MEM calls PER WINDOW, where N is a few thousand // on a typical WGS, times ~120k windows for a full run. // 4. assemble — fermi-lite assemble the reads // 5. align — BWA-MEM align the resulting contigs back to a reference // // Each phase is timed independently across a sweep of N values (default // 100, 500, 1 000, 5 000, 10 000, 50 000) so you can eyeball how each // phase scales. Results are not checked — the point is wall-clock per- // phase, not correctness. Repeat each trial -r times; the median is // reported (first-trial cold-cache effects wash out). // // Designed to isolate the bottleneck profile independently of the real // svaba pipeline's bookkeeping, scoring, and BAM writing — so when // someone says "svaba is slow" we can point at a phase. // // Usage: // svaba test -i BAM -G REF [-n N ...] [-k REGION] [-r REPEATS] [--skip-*] // // -i FILE input BAM (any BAM with reads; aligned status is irrelevant) // -G FILE BWA-indexed reference FASTA (needs .bwt / .pac / etc) // -n N reads-per-trial; may repeat. Default sweep is // 100 / 500 / 1000 / 5000 / 10000 / 50000. // -k REGION samtools-style region (chr:start-end) to restrict the BAM // read. Defaults to the beginning of the file. // -r N repetitions per trial (default 3). Reports median. // --skip-walk (benchmark still does the read-gathering; // just doesn't include it in the phase table) // --skip-ec skip BFC error correction // --skip-assemble skip fermi-lite assembly // --skip-align skip BWA-MEM alignment // -v, --verbose // -h, --help #include #include #include #include #include #include #include #include #include #include #include #include "SeqLib/BamReader.h" #include "SeqLib/BamRecord.h" #include "SeqLib/BFC.h" #include "SeqLib/BWAAligner.h" #include "SeqLib/BWAIndex.h" #include "SeqLib/FermiAssembler.h" #include "SeqLib/UnalignedSequence.h" namespace { struct TestOpts { std::string bam; std::string ref; std::string region; std::vector n_sweep; int repeats = 3; bool skip_walk = false; bool skip_ec = false; bool skip_realign = false; bool skip_assemble = false; bool skip_align = false; int verbose = 0; }; constexpr const char* kUsage = "svaba test — microbenchmark the four main svaba hot paths.\n\n" "Usage:\n" " svaba test -i BAM -G REF [-n N ...] [-k REGION] [-r REPEATS] [options]\n\n" " -i, --bam FILE input BAM (reads source)\n" " -G, --reference FILE BWA-indexed reference (for alignment phase)\n" " -n, --num-reads N trial size; may be passed multiple times.\n" " Default sweep: 500, 1000, 2000, 3000, 5000, 10000 —\n" " the 2k-3k range spans typical svaba 25kb-window loads.\n" " -k, --region REGION samtools-style region to restrict BAM reading\n" " -r, --repeats N per-trial repetitions (median reported, default 3)\n" " --skip-walk exclude walk phase from the table (reads are still fetched)\n" " --skip-ec skip BFC error correction\n" " --skip-realign skip BWA-MEM realignment of corrected reads\n" " --skip-assemble skip fermi-lite assembly\n" " --skip-align skip BWA-MEM alignment of the produced contigs\n" " -v, --verbose chatty diagnostics\n" " -h, --help this message\n"; constexpr int OPT_SKIP_WALK = 3001; constexpr int OPT_SKIP_EC = 3002; constexpr int OPT_SKIP_REALIGN = 3003; constexpr int OPT_SKIP_ASSEMBLE = 3004; constexpr int OPT_SKIP_ALIGN = 3005; const struct option LONGOPTS[] = { { "bam", required_argument, nullptr, 'i' }, { "reference", required_argument, nullptr, 'G' }, { "num-reads", required_argument, nullptr, 'n' }, { "region", required_argument, nullptr, 'k' }, { "repeats", required_argument, nullptr, 'r' }, { "skip-walk", no_argument, nullptr, OPT_SKIP_WALK }, { "skip-ec", no_argument, nullptr, OPT_SKIP_EC }, { "skip-realign", no_argument, nullptr, OPT_SKIP_REALIGN }, { "skip-assemble", no_argument, nullptr, OPT_SKIP_ASSEMBLE }, { "skip-align", no_argument, nullptr, OPT_SKIP_ALIGN }, { "verbose", no_argument, nullptr, 'v' }, { "help", no_argument, nullptr, 'h' }, { nullptr, 0, nullptr, 0 } }; TestOpts parseCli(int argc, char** argv) { TestOpts o; bool die = (argc <= 2); optind = 1; for (int c; (c = getopt_long(argc, argv, "hvi:G:n:k:r:", LONGOPTS, nullptr)) != -1;) { switch (c) { case 'h': die = true; break; case 'v': o.verbose = 1; break; case 'i': o.bam = optarg ? optarg : ""; break; case 'G': o.ref = optarg ? optarg : ""; break; case 'k': o.region = optarg ? optarg : ""; break; case 'r': o.repeats = std::max(1, std::atoi(optarg ? optarg : "3")); break; case 'n': { try { o.n_sweep.push_back(std::stoull(optarg ? optarg : "")); } catch (...) { std::cerr << "ERROR: -n expects a positive integer\n"; std::exit(EXIT_FAILURE); } break; } case OPT_SKIP_WALK: o.skip_walk = true; break; case OPT_SKIP_EC: o.skip_ec = true; break; case OPT_SKIP_REALIGN: o.skip_realign = true; break; case OPT_SKIP_ASSEMBLE: o.skip_assemble = true; break; case OPT_SKIP_ALIGN: o.skip_align = true; break; default: die = true; break; } } if (!die) { if (o.bam.empty()) { std::cerr << "ERROR: -i BAM required\n"; die = true; } // Reference is needed for both the contig-align AND the corrected-read // realign phase. Require it unless BOTH are skipped. if ((!o.skip_align || !o.skip_realign) && o.ref.empty()) { std::cerr << "ERROR: -G REF required unless --skip-align AND --skip-realign\n"; die = true; } } if (die) { std::cerr << "\n" << kUsage; std::exit(1); } if (o.n_sweep.empty()) // Default sweep targets the real per-window range (~2k-3k reads/window // on typical WGS) with brackets below and above to show scaling. o.n_sweep = { 500, 1000, 2000, 3000, 5000, 10000 }; return o; } // Read up to N BamRecord from the BAM, optionally restricted to `region`. // Anything shorter than `min_read_len` (e.g. unmapped stubs) is skipped so // the benchmark doesn't get polluted by degenerate records. SeqLib::BamRecordVector readNReads(const std::string& bam, const std::string& region, size_t N, int min_read_len = 30) { SeqLib::BamReader r; if (!r.Open(bam)) { std::cerr << "ERROR: cannot open " << bam << "\n"; std::exit(EXIT_FAILURE); } if (!region.empty()) { SeqLib::GenomicRegion gr(region, r.Header()); if (!r.SetRegion(gr)) { std::cerr << "ERROR: SetRegion failed for '" << region << "'\n"; std::exit(EXIT_FAILURE); } } SeqLib::BamRecordVector out; out.reserve(N); while (auto opt = r.Next()) { SeqLib::BamRecord& rec = *opt; if (rec.Length() < min_read_len) continue; // BamRecord is move-only (holds a shared_ptr); transfer rather // than copy. r.Next() just handed us ownership via the optional, so // we move out of it and drop it before the next loop iteration. out.push_back(std::move(rec)); if (out.size() >= N) break; } return out; } // Per-trial timing result. Fields are wall-clock seconds; 0.0 means the // phase was skipped. struct Phase { double walk = 0.0; double ec = 0.0; double realign = 0.0; // BWA-MEM of corrected reads -> reference double assem = 0.0; // "asm" is GCC-reserved (inline assembly) double align = 0.0; // BWA-MEM of contigs -> reference double total() const { return walk + ec + realign + assem + align; } }; double since(std::chrono::steady_clock::time_point t0) { return std::chrono::duration(std::chrono::steady_clock::now() - t0).count(); } Phase oneTrial(const TestOpts& opts, size_t N, SeqLib::BWAIndexPtr& bwa_idx) { Phase p; using clock = std::chrono::steady_clock; // ---- Phase 1: walk (always runs; --skip-walk just hides it in the table). auto t0 = clock::now(); SeqLib::BamRecordVector reads = readNReads(opts.bam, opts.region, N); p.walk = since(t0); if (reads.empty()) { std::cerr << "WARNING: no reads fetched for N=" << N << "\n"; return p; } // ---- Phase 2: BFC error correction --------------------------------------- // Mirrors what SvabaRegionProcessor does: add sequences, train, correct. // Kept alive across phases so we can drain the corrected sequences for // the realign phase below. SeqLib::BFC bfc; if (!opts.skip_ec) { auto t1 = clock::now(); for (const auto& rec : reads) { bfc.AddSequence(rec.Sequence(), rec.Qualities(0), rec.Qname()); } bfc.Train(); bfc.ErrorCorrect(); p.ec = since(t1); } // ---- Phase 3: realign corrected reads -> reference ----------------------- // Feeds BreakPoint::splitCoverage's r2c-vs-native comparative gate. Real // svaba runs ONE BWA-MEM call per corrected read per window, which on a // typical WGS is a few thousand calls per window × ~120k windows. This // is the phase the user was curious about — the "additional alignment" // that the comparative split-coverage gate introduced. // // We drain the corrected sequences from BFC via GetSequence() rather // than re-reading the original BAM sequence, so timing reflects the // same payload svaba's gate operates on. if (!opts.skip_realign && !opts.skip_ec) { auto t_r = clock::now(); SeqLib::BWAAligner aligner(bwa_idx); aligner.allocBuffer(4096); bfc.ResetGetSequence(); std::string s, name; size_t nr = 0; while (bfc.GetSequence(s, name)) { SeqLib::BamRecordPtrVector hits; // Only need the best hit for a native-score comparison, so keep // maxSecondary low and keepSecFrac at 0. Matches the intent of // the SvabaRegionProcessor corrected_native_cig realign. aligner.alignSequence(s, name.empty() ? std::to_string(nr) : name, hits, /*hardclip=*/false, /*keepSecFrac=*/0.0, /*maxSecondary=*/0); ++nr; } p.realign = since(t_r); if (opts.verbose) { std::cerr << " [N=" << N << "] realigned " << nr << " corrected reads\n"; } } else if (!opts.skip_realign && opts.skip_ec) { // --skip-ec pre-empts realign (no corrected sequences to align). if (opts.verbose) { std::cerr << " [N=" << N << "] realign skipped (requires --skip-ec unset)\n"; } } // ---- Phase 4: fermi-lite assembly ---------------------------------------- // Feed raw BamRecords; the SeqLib wrapper extracts sequences. std::vector contigs; if (!opts.skip_assemble) { auto t2 = clock::now(); SeqLib::FermiAssembler fml; fml.AddReads(reads); fml.PerformAssembly(); contigs = fml.GetContigs(); p.assem = since(t2); if (opts.verbose) { std::cerr << " [N=" << N << "] assembled " << contigs.size() << " contigs\n"; } } // ---- Phase 4: BWA-MEM align the contigs back to the reference ------------ // If no contigs were produced (either --skip-assemble was set or fermi // produced nothing), fall back to aligning the raw read sequences so the // phase still exercises BWA. This is deliberately a coarse measure — // svaba's real align phase has a bunch of contig-sanity logic on top. if (!opts.skip_align) { auto t3 = clock::now(); SeqLib::BWAAligner aligner(bwa_idx); aligner.allocBuffer(4096); std::vector* targets = &contigs; std::vector raw_seqs; if (targets->empty()) { raw_seqs.reserve(reads.size()); for (const auto& rec : reads) raw_seqs.push_back(rec.Sequence()); targets = &raw_seqs; } for (size_t i = 0; i < targets->size(); ++i) { SeqLib::BamRecordPtrVector hits; aligner.alignSequence((*targets)[i], "t" + std::to_string(i), hits, /*hardclip=*/false, /*keepSecFrac=*/0.9, /*maxSecondary=*/10); } p.align = since(t3); } return p; } double median(std::vector v) { if (v.empty()) return 0.0; std::sort(v.begin(), v.end()); const size_t m = v.size() / 2; return (v.size() % 2) ? v[m] : 0.5 * (v[m-1] + v[m]); } // Compact fixed-width table printer. Each row = one (N, phase) cell with // the median timing and a per-read microseconds column so you can eyeball // scaling linearity. Scaling column is the ratio vs the smallest N. void printTable(const TestOpts& opts, const std::vector>>& results) { std::cout << "\n"; std::cout << std::left << std::setw(10) << "phase" << std::right << std::setw(10) << "N" << std::setw(12) << "median(s)" << std::setw(14) << "per-read(us)" << std::setw(10) << "scale" << "\n"; std::cout << std::string(56, '-') << "\n"; struct PhaseInfo { const char* label; double Phase::*field; bool skipped; }; const PhaseInfo phases[] = { { "walk", &Phase::walk, opts.skip_walk }, { "correct", &Phase::ec, opts.skip_ec }, { "realign", &Phase::realign, opts.skip_realign || opts.skip_ec }, { "assemble", &Phase::assem, opts.skip_assemble }, { "align", &Phase::align, opts.skip_align }, }; for (const auto& ph : phases) { if (ph.skipped) continue; double base_per_read = -1.0; // baseline for the scaling column (smallest N) for (const auto& [N, trials] : results) { std::vector v; v.reserve(trials.size()); for (const auto& t : trials) v.push_back(t.*ph.field); const double med = median(v); const double us_per_read = (N > 0) ? 1e6 * med / static_cast(N) : 0.0; if (base_per_read < 0) base_per_read = us_per_read; const double scale = (base_per_read > 0) ? us_per_read / base_per_read : 1.0; std::cout << std::left << std::setw(10) << ph.label << std::right << std::setw(10) << N << std::setw(12) << std::fixed << std::setprecision(4) << med << std::setw(14) << std::fixed << std::setprecision(1) << us_per_read << std::setw(10) << std::fixed << std::setprecision(2) << scale << "\n"; } std::cout << "\n"; } // Totals row: sum of non-skipped phases, median across trials. std::cout << std::left << std::setw(10) << "TOTAL" << std::right << std::setw(10) << " " << std::setw(12) << "median(s)" << std::setw(14) << "per-read(us)" << "\n"; std::cout << std::string(46, '-') << "\n"; for (const auto& [N, trials] : results) { std::vector v; for (const auto& t : trials) v.push_back(t.total()); const double med = median(v); const double us_per_read = (N > 0) ? 1e6 * med / static_cast(N) : 0.0; std::cout << std::left << std::setw(10) << "" << std::right << std::setw(10) << N << std::setw(12) << std::fixed << std::setprecision(4) << med << std::setw(14) << std::fixed << std::setprecision(1) << us_per_read << "\n"; } std::cout << "\nScaling column is (per-read us at this N) / (per-read us at smallest N).\n" << "Near 1.00 = linear scaling. >1 means per-read cost grows with N\n" << "(= superlinear algorithm or cache effects). <1 means setup cost\n" << "amortizes as N grows.\n"; } } // namespace // Forward-declared in svaba.cpp dispatch. void runTest(int argc, char** argv) { const TestOpts opts = parseCli(argc, argv); std::cerr << "svaba test:\n" << " bam: " << opts.bam << "\n" << " ref: " << opts.ref << "\n" << " region: " << (opts.region.empty() ? "(all)" : opts.region) << "\n" << " repeats: " << opts.repeats << "\n" << " N sweep:"; for (auto n : opts.n_sweep) std::cerr << " " << n; std::cerr << "\n"; // Load BWA index once up front; it's large and expensive to load // repeatedly. Reuse across every trial and every N. SeqLib::BWAIndexPtr bwa_idx; if (!opts.skip_align) { std::cerr << "loading BWA index from " << opts.ref << " ...\n"; auto t0 = std::chrono::steady_clock::now(); bwa_idx = std::make_shared(); bwa_idx->LoadIndex(opts.ref); std::cerr << " loaded in " << std::fixed << std::setprecision(1) << since(t0) << "s\n"; } std::vector>> results; results.reserve(opts.n_sweep.size()); for (size_t N : opts.n_sweep) { std::vector trials; trials.reserve(opts.repeats); for (int r = 0; r < opts.repeats; ++r) { if (opts.verbose) std::cerr << " [N=" << N << " trial " << (r+1) << "/" << opts.repeats << "]\n"; trials.push_back(oneTrial(opts, N, bwa_idx)); } results.emplace_back(N, std::move(trials)); } printTable(opts, results); } ================================================ FILE: src/svaba/threadpool.h ================================================ // threadpool.h #pragma once #include #include #include #include #include #include #include #include "SvabaSharedConfig.h" #include "SvabaOutputWriter.h" #include "SvabaOptions.h" #include "SvabaThreadUnit.h" // A simple thread safe queue for unique_ptr jobs template class WorkQueue { public: void push(std::unique_ptr job) { { std::lock_guard lk(mtx_); queue_.push_back(std::move(job)); } cv_.notify_one(); } // pop one job; blocks until one is available or a nullptr sentinel is received std::unique_ptr pop() { std::unique_lock lk(mtx_); cv_.wait(lk, [&]{ return !queue_.empty(); }); auto job = std::move(queue_.front()); queue_.pop_front(); return job; } // send one nullptr for each worker so they can exit void shutdown(size_t numThreads) { for(size_t i=0;i> queue_; }; // A fixed-size thread pool that takes Job functors template class ThreadPool { public: ThreadPool(SvabaSharedConfig& sc) : queue_(), workers_(), flushMutex_(), sc_(sc) { workers_.reserve(sc.opts.numThreads); for(size_t i=0;iflushMutex_, &sc = sc_]() mutable { //[=, &flushMutex = this->flushMutex_, &sc_ref = sc_]() mutable { // per-thread setup - each thread gets its own FASTA read and BAM readers // these should not be shared across threads, even if using const functions only // this also opens the BAMs too in the svabaThreadUnit constructor svabaThreadUnit unit(sc, i + 1); // give it the shared_ptr to the master index unit.total_count = sc.total_regions_to_process; // consume jobs while(auto job = queue_.pop()){ (*job)(unit, std::hash{}(std::this_thread::get_id())); } // final flush std::cerr << "...final flush for thread " << unit.threadId << std::endl; sc_.writer.writeUnit(unit, sc_); // this does the flush and mutex in it unit.clear(); }); } } // submit a new work item void submit(std::unique_ptr job){ queue_.push(std::move(job)); } // tell threads no more work, then join void shutdown(){ queue_.shutdown(workers_.size()); for(auto &t : workers_) t.join(); } private: WorkQueue queue_; std::vector workers_; std::mutex flushMutex_; SvabaSharedConfig& sc_; }; ================================================ FILE: src/svaba/tovcf.cpp ================================================ // tovcf.cpp // // `svaba tovcf` — convert a deduplicated bps.txt.gz into a pair of VCF // files (one for SVs, one for indels). Target spec: VCFv4.5. // // This is the standalone format-conversion entry point. It assumes the // input bps.txt.gz has already been sorted and deduplicated by // scripts/svaba_postprocess.sh — so the VCFFile internal dedup pass is // skipped. All calls (somatic + germline) land in one SV file and one // indel file, with the SOMATIC INFO flag distinguishing somatic rows // for downstream `bcftools filter` / grep workflows. // // Knobs (with defaults chosen for the new pipeline): // --sv-out PATH output SV VCF (default ${id}.sv.vcf.gz) // --indel-out PATH output indel VCF (default ${id}.indel.vcf.gz) // --always-bnd force paired BND records for every SV // (otherwise intrachrom events collapse into // // symbolic records). // --qual MODE missing | maxlod | sum (default: missing). // Controls the VCF QUAL column. "missing" ('.') // pushes users toward INFO/MAXLOD / INFO/SOMLOD // for filtering; "maxlod" puts 10*MAXLOD there; // "sum" is the legacy behavior. // --include-nonpass also emit records with FILTER != PASS. // --dedup opt back in to the legacy interval-tree dedup // (off by default; the postprocess pipeline // already dedupes upstream). // --plain write plain .vcf instead of bgzip'd .vcf.gz. // (Appends .vcf; by default outputs .vcf.gz.) // -v / --verbose chatty diagnostics. // -h / --help show help. // // Required: // -i, --input-bps deduped bps.txt.gz (from svaba_postprocess) // -b, --bam BAM used to recover the chromosome name/length // table; no reads are actually read. // -a, --id-string analysis id for output names. #include #include #include #include #include #include #include "gzstream.h" #include "SeqLib/BamReader.h" #include "BreakPoint.h" #include "SvabaLogger.h" #include "SvabaOptions.h" #include "SvabaOutputWriter.h" #include "SvabaSharedConfig.h" #include "SvabaUtils.h" #include "vcf.h" namespace { struct ToVcfOpts { std::string input_file; std::string bam; std::string analysis_id; std::string sv_out; // explicit path; filled from analysis_id if empty std::string indel_out; bool always_bnd = false; bool include_nonpass = false; bool dedup = false; bool gzip = true; int verbose = 0; QualMode qual_mode = QualMode::MISSING; // Minimum somlod (INFO/SOMLOD) to mark a record with the SOMATIC // INFO flag. 1.0 is the recommended default — strong enough that // `bcftools view -i 'INFO/SOMATIC'` picks out confident somatic // calls without dragging in marginal ones. double somlod_cutoff = 1.0; }; constexpr const char* TOVCF_USAGE = "Usage: svaba tovcf -i BPS.txt.gz -b BAM -a ID [options]\n" "\n" " Convert a deduplicated bps.txt.gz into VCFv4.5 output. Emits a SV\n" " VCF and an indel VCF; all calls (somatic+germline) go into one file\n" " each, with the SOMATIC INFO flag distinguishing somatic rows.\n" "\n" " Required:\n" " -i, --input-bps FILE deduplicated bps.txt.gz\n" " -b, --bam FILE BAM used to source the chrom name/length table\n" " -a, --id-string STR analysis id for default output names\n" "\n" " Output:\n" " --sv-out FILE override SV output path\n" " --indel-out FILE override indel output path\n" " --plain write plain .vcf instead of .vcf.gz\n" "\n" " Format knobs:\n" " --always-bnd force paired BND for every SV\n" " --qual MODE missing | maxlod | sum (default: missing)\n" " --somlod N min INFO/SOMLOD to stamp SOMATIC flag (default 1.0)\n" " --include-nonpass include records with FILTER != PASS\n" " --dedup re-run legacy interval-tree dedup on input\n" "\n" " Misc:\n" " -v, --verbose\n" " -h, --help\n"; constexpr const char* SHORTOPTS = "hi:b:va:"; // Long-only flags are dispatched via the `val` column of longopts; keep // these unique across the option surface. constexpr int OPT_SV_OUT = 2001; constexpr int OPT_INDEL_OUT = 2002; constexpr int OPT_ALWAYS_BND = 2003; constexpr int OPT_QUAL = 2004; constexpr int OPT_INCLUDE_NONPASS = 2005; constexpr int OPT_DEDUP = 2006; constexpr int OPT_PLAIN = 2007; constexpr int OPT_SOMLOD = 2008; const struct option LONGOPTS[] = { { "help", no_argument, nullptr, 'h' }, { "input-bps", required_argument, nullptr, 'i' }, { "bam", required_argument, nullptr, 'b' }, { "id-string", required_argument, nullptr, 'a' }, { "verbose", no_argument, nullptr, 'v' }, { "sv-out", required_argument, nullptr, OPT_SV_OUT }, { "indel-out", required_argument, nullptr, OPT_INDEL_OUT }, { "always-bnd", no_argument, nullptr, OPT_ALWAYS_BND }, { "qual", required_argument, nullptr, OPT_QUAL }, { "include-nonpass", no_argument, nullptr, OPT_INCLUDE_NONPASS }, { "dedup", no_argument, nullptr, OPT_DEDUP }, { "plain", no_argument, nullptr, OPT_PLAIN }, { "somlod", required_argument, nullptr, OPT_SOMLOD }, { nullptr, 0, nullptr, 0 } }; // Parse --qual {missing|maxlod|sum}. Case-insensitive prefixes accepted. QualMode parse_qual_mode(const std::string& s) { if (s == "missing" || s == "." || s == "none" ) return QualMode::MISSING; if (s == "maxlod" || s == "max" || s == "mlod") return QualMode::MAXLOD_PHRED; if (s == "sum" || s == "legacy") return QualMode::SUM_LO_PHRED; std::cerr << "ERROR: --qual must be one of: missing | maxlod | sum (got '" << s << "')\n"; std::exit(EXIT_FAILURE); } ToVcfOpts parse_cli(int argc, char** argv) { ToVcfOpts o; bool die = (argc <= 2); optind = 1; // reset getopt state (svaba.cpp consumes argv[1] before dispatch) for (int c; (c = getopt_long(argc, argv, SHORTOPTS, LONGOPTS, nullptr)) != -1;) { switch (c) { case 'h': die = true; break; case 'i': o.input_file = optarg ? optarg : ""; break; case 'b': o.bam = optarg ? optarg : ""; break; case 'a': o.analysis_id = optarg ? optarg : ""; break; case 'v': o.verbose = 1; break; case OPT_SV_OUT: o.sv_out = optarg ? optarg : ""; break; case OPT_INDEL_OUT: o.indel_out = optarg ? optarg : ""; break; case OPT_ALWAYS_BND: o.always_bnd = true; break; case OPT_QUAL: o.qual_mode = parse_qual_mode(optarg ? optarg : ""); break; case OPT_INCLUDE_NONPASS: o.include_nonpass = true; break; case OPT_DEDUP: o.dedup = true; break; case OPT_PLAIN: o.gzip = false; break; case OPT_SOMLOD: { try { o.somlod_cutoff = std::stod(optarg ? optarg : ""); } catch (const std::exception&) { std::cerr << "ERROR: --somlod expects a floating-point cutoff (got '" << (optarg ? optarg : "") << "')\n"; std::exit(EXIT_FAILURE); } break; } default: die = true; break; } } if (!die) { if (o.input_file.empty()) { std::cerr << "ERROR: -i / --input-bps is required\n"; die = true; } if (o.bam.empty()) { std::cerr << "ERROR: -b / --bam is required (for chrom name/length table)\n"; die = true; } if (o.analysis_id.empty()) { std::cerr << "ERROR: -a / --id-string is required\n"; die = true; } } if (die) { std::cerr << "\n" << TOVCF_USAGE; std::exit(1); } const std::string ext = o.gzip ? ".vcf.gz" : ".vcf"; if (o.sv_out.empty()) o.sv_out = o.analysis_id + ".sv" + ext; if (o.indel_out.empty()) o.indel_out = o.analysis_id + ".indel" + ext; return o; } // Copy of the refilter.cpp helper — splits "prefix_/path/to.bam" header // tokens into (prefix, path). std::pair splitSampleHeader(const std::string& tok) { const auto us = tok.find('_'); if (us == std::string::npos) return { tok, "" }; return { tok.substr(0, us), tok.substr(us + 1) }; } } // namespace // Forward declared in svaba.cpp dispatch. void runToVCF(int argc, char** argv) { const ToVcfOpts o = parse_cli(argc, argv); if (o.verbose > 0) { std::cerr << "svaba tovcf:\n" << " input: " << o.input_file << "\n" << " bam: " << o.bam << "\n" << " sv-out: " << o.sv_out << "\n" << " indel-out: " << o.indel_out << "\n" << " qual: " << (o.qual_mode == QualMode::MISSING ? "missing" : o.qual_mode == QualMode::MAXLOD_PHRED ? "maxlod" : "sum") << "\n" << " sv-format: " << (o.always_bnd ? "BND_ALWAYS" : "SYMBOLIC_WHEN_OBVIOUS") << "\n" << " somlod: " << o.somlod_cutoff << "\n" << " dedup: " << (o.dedup ? "yes" : "no (input assumed pre-deduped)") << "\n" << " nonpass: " << (o.include_nonpass ? "yes" : "no") << "\n"; } if (!SeqLib::read_access_test(o.input_file)) { std::cerr << "ERROR: cannot read " << o.input_file << "\n"; std::exit(EXIT_FAILURE); } // ---- 1. Open BAM only to grab the reference chromosome header ---------- SeqLib::BamReader bwalker; if (!bwalker.Open(o.bam)) { std::cerr << "ERROR: cannot open BAM " << o.bam << "\n"; std::exit(EXIT_FAILURE); } const SeqLib::BamHeader hdr = bwalker.Header(); // ---- 2. Read bps.txt.gz header and discover sample prefixes ---------- // // Matches the logic in refilter.cpp:runRefilterBreakpoints. The sample // block starts at the first header token whose first char is 't' or 'n' // past the fixed-width prefix (scan from col 34 to be safe on all v1-v3 // schemas). Once we know the prefixes, we stuff them into opts.bams so // BreakPoint's line-parser iterates sample tokens in the right order. igzstream infile(o.input_file.c_str(), std::ios::in); std::string headerLine; if (!std::getline(infile, headerLine)) { std::cerr << "ERROR: " << o.input_file << " is empty or unreadable\n"; std::exit(EXIT_FAILURE); } const auto headerv = svabaUtils::tokenize_delimited(headerLine, '\t'); if (headerv.size() < 41) { std::cerr << "ERROR: bps.txt header has " << headerv.size() << " columns; expected >=41 (legacy) or >=52 (v3).\n"; std::exit(EXIT_FAILURE); } size_t sample_start = 0; for (size_t i = 34; i < headerv.size(); ++i) { if (!headerv[i].empty() && (headerv[i].at(0) == 't' || headerv[i].at(0) == 'n')) { sample_start = i; break; } } if (sample_start == 0) { std::cerr << "ERROR: could not locate sample columns in bps.txt header.\n"; std::exit(EXIT_FAILURE); } // ---- 3. Build a minimal SvabaSharedConfig ------------------------------ // // Same pattern refilter.cpp uses: logger/opts/writer on the stack (they // wrap a no-op output writer; we never init it or open any BAMs through // it). sc.header carries the BamHeader so BreakPoint parsing can turn // chrom names into IDs. SvabaLogger logger; SvabaOptions opts; SvabaOutputWriter writer(logger, opts); SvabaSharedConfig sc(logger, opts, writer); sc.header = hdr; // Populate opts.bams (std::map) and the VCFHeader's // sample + colname state in lockstep, so the per-sample VCF column // order matches the sample block order in bps.txt. VCFHeader base_header; base_header.filedate = svabaUtils::fileDateString(); base_header.source = "svaba tovcf " + o.input_file; base_header.reference = ""; // contig lines: chrom + length from the BAM for (int i = 0; i < hdr.NumSequences(); ++i) { base_header.addContigField(hdr.IDtoName(i), hdr.GetSequenceLength(i)); } for (size_t i = sample_start; i < headerv.size(); ++i) { auto [pref, path] = splitSampleHeader(headerv[i]); if (pref.empty() || (pref.at(0) != 't' && pref.at(0) != 'n')) { std::cerr << "ERROR: unexpected sample header token '" << headerv[i] << "' (col " << i << "); expected t***/n***.\n"; std::exit(EXIT_FAILURE); } opts.bams[pref] = path; base_header.addSampleField(pref); base_header.colnames += "\t" + pref; } if (o.verbose > 0) { std::cerr << "...bps.txt has " << headerv.size() << " columns; " << sample_start << " core, " << (headerv.size() - sample_start) << " sample(s)\n"; } // ---- 4. Construct VCFFile --------------------------------------------- // // `nopass=true` in the ctor tells VCFFile to RETAIN non-PASS rows while // parsing; whether they're emitted is a separate decision controlled by // `include_nonpass`. We always ingest everything from disk so the knob // surface below can choose later. // // `skip_dedup_in_ctor` is set from the --dedup flag (default on): the // ctor runs deduplicate() internally, and we need skip_dedup=true to // be in effect BEFORE that call fires. Passing it through the ctor // param gets that ordering right in one place. const bool skip_internal_dedup = !o.dedup; VCFFile vcf(o.input_file, o.analysis_id, sc, base_header, /*nopass=*/true, /*verbose=*/o.verbose > 0, /*skip_dedup_in_ctor=*/skip_internal_dedup); vcf.qual_mode = o.qual_mode; vcf.sv_format = o.always_bnd ? SvFormat::BND_ALWAYS : SvFormat::SYMBOLIC_WHEN_OBVIOUS; vcf.include_nonpass = o.include_nonpass; vcf.somatic_threshold = o.somlod_cutoff; // vcf.skip_dedup is already set from the ctor param above. // ---- 5. Emit -------------------------------------------------------- if (o.verbose > 0) { std::cerr << "...writing SV VCF -> " << o.sv_out << "\n" << "...writing indel VCF -> " << o.indel_out << "\n"; } vcf.writeSvsSingleFile (o.sv_out, o.gzip, hdr); vcf.writeIndelsSingleFile(o.indel_out, o.gzip, hdr); if (o.verbose > 0) { std::cerr << "svaba tovcf: done.\n"; } } ================================================ FILE: src/svaba/vcf.cpp ================================================ // vcf.cpp // // Read svaba breakpoints back from `bps.txt.gz`, deduplicate them, and emit // VCFs. See vcf.h for the external API. Only ~three things change vs the // pre-overhaul vcf.cpp: // // 1. BreakPoint is non-copyable/non-movable, so everything flows through // std::shared_ptr. // 2. BreakPoint::SampleInfo is private; we iterate `bp->allele` via // structured bindings (auto) and only use its public data members. // 3. The `BreakPoint(line, &sc)` ctor now takes a SvabaSharedConfig*, and // the parsed bps row schema (39 fixed cols + per-sample tail) is // described in BreakPoint.cpp at the parse loop. #include "vcf.h" #include #include #include // std::lround (QUAL phred-rescaling) #include #include #include #include #include #include #include #include #include #include #include #include #include "gzstream.h" #include "SeqLib/GenomicRegion.h" #include "SeqLib/GenomicRegionCollection.h" #include "BreakPoint.h" #include "SvabaOptions.h" // --------------------------------------------------------------------------- // File-local constants and helpers. // --------------------------------------------------------------------------- namespace { // Maximum overlaps one breakend can have before we blacklist the whole // region as an SV-pileup and drop it from the output. constexpr int HIGH_OVERLAP_LIMIT = 500; // How many bp of padding to apply when we blacklist a high-overlap region. constexpr int BAD_REGION_PAD = 200; // FORMAT column strings — must stay in sync with BreakPoint::SampleInfo:: // toFileString (see BreakPoint.cpp ~line 1710) and with the ##FORMAT lines // we emit below. const std::string kSvFormat = "GT:AD:DP:SR:DR:GQ:PL:LO:LO_n"; const std::string kIndelFormat = "GT:AD:DP:SR:CR:GQ:PL:LO:LO_n"; // INFO fields that were declared `Type=Flag` in the header — flags are // printed without an `=value` tail. std::unordered_set g_flag_fields; // Track hashed VCFEntryPair ids we've already handed out so we can retry on // collision. File-scope because the constructor consumes it across all pairs. std::unordered_set g_hash_avoid; // Stable 32-bit string hash helper; we avoid pulling in htslib/khash.h just // for this and use std::hash truncated to 32 bits. inline uint32_t hash_string32(const std::string& s) { const size_t h = std::hash{}(s); return static_cast(h ^ (h >> 32)); } // Sort INFO key/value pairs so that READ_ID (if present) always comes last, // and everything else is sorted alphabetically. This matches legacy output. bool compareInfoFields(const std::pair& lhs, const std::pair& rhs) { const bool lhs_rid = (lhs.first == "READ_ID"); const bool rhs_rid = (rhs.first == "READ_ID"); if (rhs_rid && !lhs_rid) return true; if (lhs_rid && !rhs_rid) return false; return lhs.first < rhs.first; } // For the contig-by-length sort in the header emitter. bool pairCompareDesc( const std::pair>& a, const std::pair>& b) { return a.first > b.first; } // SVType → short string used in the EVDNC INFO field. std::string svtype_to_string(SVType t) { switch (t) { case SVType::NOTSET: return "NOTSET"; case SVType::TSI_LOCAL: return "TSI_LOCAL"; case SVType::TSI_GLOBAL: return "TSI_GLOBAL"; case SVType::ASSMB: return "ASSMB"; case SVType::ASDIS: return "ASDIS"; case SVType::DSCRD: return "DSCRD"; case SVType::INDEL: return "INDEL"; } return "UNKNOWN_SVTYPE"; } // Return the maximum per-sample LO across all alleles on a BreakPoint. // Used as the legacy "LOD" INFO field for indels. double max_allele_lo(const BreakPoint& bp) { double m = 0.0; for (const auto& [_, al] : bp.allele) m = std::max(m, al.LO); return m; } } // namespace // =========================================================================== // VCFHeader // =========================================================================== std::ostream& operator<<(std::ostream& out, const VCFHeader& v) { out << "##fileformat=" << v.fileformat << '\n'; out << "##fileDate=" << v.filedate << '\n'; out << "##source=" << v.source << '\n'; out << "##reference=" << v.reference << '\n'; // Emit contigs sorted by length, largest first (matches legacy output). using CC = std::pair; using CI = std::pair; std::vector contig_vec; contig_vec.reserve(v.contigfieldmap.size()); for (const auto& kv : v.contigfieldmap) contig_vec.emplace_back(std::stoi(kv.second), CC(kv.first, kv.second)); std::sort(contig_vec.begin(), contig_vec.end(), pairCompareDesc); for (const auto& c : contig_vec) out << "##contig=\n"; for (const auto& kv : v.infomap) out << "##INFO=\n"; for (const auto& kv : v.filtermap) out << "##FILTER=\n"; for (const auto& kv : v.formatmap) out << "##FORMAT=\n"; for (const auto& kv : v.samplemap) out << "##SAMPLE=\n"; out << v.colnames; return out; } void VCFHeader::addInfoField(std::string field, std::string number, std::string type, std::string description) { if (infomap.find(field) != infomap.end()) { std::cerr << "Warning: Info field already exists: " << field << '\n'; return; } if (type == "Flag") g_flag_fields.insert(field); infomap[field] = "Number=" + number + ",Type=" + type + ",Description=\"" + description + "\""; } void VCFHeader::addFilterField(std::string field, std::string description) { if (filtermap.find(field) != filtermap.end()) { std::cerr << "Warning: Filter field already exists: " << field << '\n'; return; } filtermap[field] = "Description=\"" + description + "\""; } void VCFHeader::addFormatField(std::string field, std::string number, std::string type, std::string description) { if (formatmap.find(field) != formatmap.end()) { std::cerr << "Warning: Format field already exists: " << field << '\n'; return; } formatmap[field] = "Number=" + number + ",Type=" + type + ",Description=\"" + description + "\""; } void VCFHeader::addSampleField(std::string field) { if (samplemap.find(field) != samplemap.end()) { std::cerr << "Warning: Sample field already exists: " << field << '\n'; return; } samplemap[field] = field; } void VCFHeader::addContigField(std::string id, int len) { contigfieldmap[id] = std::to_string(len); } // =========================================================================== // VCFEntry // =========================================================================== std::string VCFEntry::getRefString() const { std::string p = (bp->svtype == SVType::INDEL || id_num == 1) ? bp->ref : bp->alt; if (p.empty()) { std::cerr << "WARNING: Empty ref/alt field for bp\n"; return "N"; } return p; } std::string VCFEntry::getAltString(const SeqLib::BamHeader& header) const { // Indels just use bp->alt as-is (VCF-style insert/delete REF/ALT). if (bp->svtype == SVType::INDEL) { if (bp->alt.empty()) { std::cerr << "WARNING: Empty alt field for indel bp\n"; return "N"; } return bp->alt; } // SvABA2.0: symbolic SV emission for SvFormat::SYMBOLIC_WHEN_OBVIOUS. // The writer classifies each pair before calling; when symbolic_rep // is set we emit `` / `` / `` as the single-record ALT // and rely on END / SVLEN / SVTYPE INFO to describe the event. if (symbolic_rep) return "<" + symbolic_kind + ">"; // SV breakends get the BND-style `N]chr:pos]` mate notation. const std::string ref = getRefString(); std::stringstream ptag; if (id_num == 1) { ptag << bp->b2.gr.ChrName(header) << ':' << bp->b2.gr.pos1; } else { ptag << bp->b1.gr.ChrName(header) << ':' << bp->b1.gr.pos1; } std::stringstream alt; const char s1 = bp->b1.gr.strand; const char s2 = bp->b2.gr.strand; if (s1 == '+' && s2 == '+') { alt << ref << ']' << ptag.str() << ']'; } else if (s1 == '+' && s2 == '-') { if (id_num == 1) alt << ref << '[' << ptag.str() << '['; else alt << ']' << ptag.str() << ']' << ref; } else if (s1 == '-' && s2 == '+') { if (id_num == 1) alt << ']' << ptag.str() << ']' << ref; else alt << ref << '[' << ptag.str() << '['; } else { alt << '[' << ptag.str() << '[' << ref; } return alt.str(); } std::string VCFEntry::getIdString() const { if (bp->svtype != SVType::INDEL) return std::to_string(id) + ':' + std::to_string(id_num); return std::to_string(id); } std::unordered_map VCFEntry::fillInfoFields() const { std::unordered_map info; info["SPAN"] = std::to_string(bp->getSpan()); info["SCTG"] = bp->cname; // SvABA2.0: common per-record metadata, populated for both SVs and // indels so downstream filters don't need to condition on shape. // // SOMATIC flag: gated on the somlod threshold carried per-entry // (`somatic_threshold`, defaulted 1.0, overridable via `svaba tovcf // --somlod N`). The svaba-run-time SomaticState::FAILED state is // honored as a hard veto — something earlier in the pipeline // explicitly said "not somatic", so we don't mark it regardless // of what LO_s looks like. if (bp->LO_s >= somatic_threshold && bp->somatic != SomaticState::FAILED) info["SOMATIC"] = ""; // flag if (!bp->id.empty()) info["EVENT"] = bp->id; // v3 bp_id (col 52 of bps.txt) { std::stringstream ss; ss << std::setprecision(4) << bp->max_lod; info["MAXLOD"] = ss.str(); } { std::stringstream ss; ss << std::setprecision(4) << bp->LO_s; info["SOMLOD"] = ss.str(); } if (bp->svtype != SVType::INDEL) { info["EVDNC"] = svtype_to_string(bp->svtype); // SvABA2.0: SVTYPE is either BND (paired-breakend notation) or a // symbolic type (DEL/DUP/INV) when the writer has opted into // symbolic alleles and this record qualifies. symbolic_rep / // symbolic_kind are set by writeSvsSingleFile before toFileString // runs; when they're unset we fall back to legacy BND. if (symbolic_rep) { info["SVTYPE"] = symbolic_kind; // "DEL" / "DUP" / "INV" // For symbolic alleles we must set END (SV end position) and // SVLEN (positive for INS/DUP, negative for DEL; absolute length // for INV because the inverted segment length is what matters). const int pos1_1idx = bp->b1.gr.pos1 + 1; const int pos2_1idx = bp->b2.gr.pos1 + 1; const int end_pos = std::max(pos1_1idx, pos2_1idx); const int length = std::abs(pos2_1idx - pos1_1idx); info["END"] = std::to_string(end_pos); if (symbolic_kind == "DEL") info["SVLEN"] = std::to_string(-length); else info["SVLEN"] = std::to_string(length); // svaba uses primarily junction evidence (+ optional depth via // discordant pairs). "J" is the honest claim for assembly-only, // "DJ" for ASDIS (assembly+discordant). DSCRD-only is rare for // symbolic-eligible intrachrom events but we'd emit "D" there. if (bp->svtype == SVType::ASSMB) info["SVCLAIM"] = "J"; else if (bp->svtype == SVType::ASDIS) info["SVCLAIM"] = "DJ"; else if (bp->svtype == SVType::DSCRD) info["SVCLAIM"] = "D"; else info["SVCLAIM"] = "J"; } else { info["SVTYPE"] = "BND"; info["SVCLAIM"] = "J"; } } if (!bp->repeat_seq.empty()) info["REPSEQ"] = bp->repeat_seq; // NM / MATENM / MATEID: only for multi-alignment (BND-style) breakpoints. if (bp->num_align != 1) { info["MATEID"] = std::to_string(id) + ':' + std::to_string(id_num == 1 ? 2 : 1); if (id_num == 1) { info["NM"] = std::to_string(bp->b1.nm); info["MATENM"] = std::to_string(bp->b2.nm); } else { info["NM"] = std::to_string(bp->b2.nm); info["MATENM"] = std::to_string(bp->b1.nm); } } else { info["NM"] = std::to_string(bp->b1.nm); } // MAPQ of the breakend this entry represents. info["MAPQ"] = std::to_string(id_num == 1 ? bp->b1.mapq : bp->b2.mapq); if (bp->num_align != 1) { // --- SV-only fields --- if (id_num == 1) { if (bp->b1.sub) info["SUBN"] = std::to_string(bp->b1.sub); else if (bp->b2.sub) info["SUBN"] = std::to_string(bp->b2.sub); } if (!bp->homology.empty()) info["HOMSEQ"] = bp->homology; if (!bp->insertion.empty()) info["INSERTION"] = bp->insertion; info["NUMPARTS"] = std::to_string(bp->num_align); if (bp->imprecise > 0) info["IMPRECISE"] = ""; if (bp->secondary > 0) info["SECONDARY"] = ""; if (info["EVDNC"] != "ASSMB") { info["DISC_MAPQ"] = std::to_string( id_num == 1 ? bp->dc.mapq1 : bp->dc.mapq2); } } else { // --- indel-only fields --- std::stringstream lod_ss; lod_ss << std::setprecision(4) << max_allele_lo(*bp); info["LOD"] = lod_ss.str(); if (!bp->rs.empty()) info["DBSNP"] = bp->rs; } return info; } std::string VCFEntry::toFileString(const SeqLib::BamHeader& header, QualMode qual_mode) const { std::stringstream out; // Sort INFO fields for stable, legacy-compatible output. auto info_map = fillInfoFields(); std::vector> info_vec( info_map.begin(), info_map.end()); std::sort(info_vec.begin(), info_vec.end(), compareInfoFields); std::string info; for (const auto& kv : info_vec) { // Don't emit HOMSEQ/HOMLEN/INSERTION when imprecise (legacy behavior). if (bp->imprecise && (kv.first == "HOMSEQ" || kv.first == "HOMLEN" || kv.first == "INSERTION")) continue; const bool is_flag = (g_flag_fields.count(kv.first) > 0); info += kv.first + (is_flag ? "" : "=") + kv.second + ';'; } if (!info.empty()) info.pop_back(); // trim trailing ';' // SvABA2.0: pick QUAL representation. Legacy (SUM_LO_PHRED) keeps // exactly the pre-2.0 behavior by passing bp->quality through; the // two new modes are for the `svaba tovcf` path, where the canonical // confidence lives in INFO/MAXLOD / INFO/SOMLOD and writing the sum- // of-LOs Phred into QUAL just invites confused downstream filters. std::string qual_str; switch (qual_mode) { case QualMode::MISSING: qual_str = "."; break; case QualMode::MAXLOD_PHRED: { // maxlod is already log10 — scale by 10 for Phred and cap at 99 // to stay inside the conventional VCF QUAL range. const double v = std::max(0.0, bp->max_lod); const long p = std::lround(10.0 * v); qual_str = std::to_string(std::min(p, 99)); break; } case QualMode::SUM_LO_PHRED: default: qual_str = std::to_string(bp->quality); break; } // For symbolic SV records, POS is the lower of the two breakend // positions (the event's 5' anchor); the INFO/END field carries the // other boundary. For BND records, POS is just the breakend this // entry represents (legacy behavior). int pos; std::string chr_name; if (symbolic_rep) { const int p1 = bp->b1.gr.pos1; const int p2 = bp->b2.gr.pos1; pos = std::min(p1, p2); // Both breakends live on the same chrom when symbolic; use b1's. chr_name = bp->b1.gr.ChrName(header); } else { const BreakEnd* be = (id_num == 1) ? &bp->b1 : &bp->b2; pos = be->gr.pos1; chr_name = be->gr.ChrName(header); } const char sep = '\t'; out << chr_name << sep << pos << sep << getIdString() << sep << getRefString() << sep << getAltString(header) << sep << qual_str << sep << bp->confidence << sep << info << sep << (bp->svtype == SVType::INDEL ? kIndelFormat : kSvFormat); // SvABA2.0: per-sample columns (VCF column 10+). Iterating bp->allele // in-order is deterministic because SampleInfo is stored in a // std::map keyed by the 4-char bam prefix (n001, t001, ...). The // header's `colnames` must list samples in the same order for the // VCF to be well-formed — callers that build the header from the // bps.txt.gz row-0 sample list implicitly match this ordering. for (const auto& [_, al] : bp->allele) { out << sep << al.toFileString(bp->svtype); } return out.str(); } bool VCFEntry::operator<(const VCFEntry& v) const { const BreakEnd* a = (id_num == 1) ? &bp->b1 : &bp->b2; const BreakEnd* b = (v.id_num == 1) ? &v.bp->b1 : &v.bp->b2; return a->gr < b->gr; } bool VCFEntry::operator==(const VCFEntry& v) const { const BreakEnd* a = (id_num == 1) ? &bp->b1 : &bp->b2; const BreakEnd* b = (v.id_num == 1) ? &v.bp->b1 : &v.bp->b2; return a->gr == b->gr; } // =========================================================================== // VCFEntryPair // =========================================================================== VCFEntryPair::VCFEntryPair(std::shared_ptr& b) { bp = b; e1.bp = bp; e2.bp = bp; e1.id_num = 1; e2.id_num = 2; // Compose a stable string describing this pair and hash it. Retry on // collision by salting with an increment counter, so ids remain unique // even if two genuinely-distinct pairs happen to collide. uint32_t hashed = 0; int salt = 0; do { const std::string s = std::to_string(bp->b1.gr.pos1) + '-' + std::to_string(bp->b2.gr.pos1) + '-' + std::to_string(bp->b1.gr.chr) + '_' + std::to_string(bp->b2.gr.chr) + bp->cname + std::to_string(salt); hashed = hash_string32(s); ++salt; } while (g_hash_avoid.find(hashed) != g_hash_avoid.end()); g_hash_avoid.insert(hashed); e1.id = hashed; e2.id = hashed; } std::string VCFEntryPair::toFileString(const SeqLib::BamHeader& header, QualMode qual_mode) const { std::stringstream out; // If e1 is marked symbolic_rep, only emit it (single-record SV event). // Otherwise emit both breakends as a paired BND event. out << e1.toFileString(header, qual_mode) << '\n'; if (!e1.symbolic_rep) out << e2.toFileString(header, qual_mode) << '\n'; return out.str(); } // =========================================================================== // VCFFile::VCFFile — read bps.txt.gz, build entries, deduplicate. // =========================================================================== namespace { // All of the boilerplate ##INFO/##FILTER/##FORMAT lines for SV and indel // headers. Kept here rather than inline in the ctor so the ctor stays // readable. void populate_sv_header(VCFHeader& h) { // FILTERs h.addFilterField("NOLOCAL", "Contig realigned to region outside of local assembly region, and no disc support."); h.addFilterField("LOCALMATCH", "Contig realigned to assembly region without clipping"); h.addFilterField("HIGHHOMOLOGY", "Contig realigns with > 25% of readlength of homology. High probaility of assembly/mapping artifact"); h.addFilterField("DUPREADS", "Contig built from what appear to be duplicate reads (split reads all same contig cov))"); h.addFilterField("NODISC", "Rearrangement was not detected independently by assembly"); h.addFilterField("LOWSUPPORT", "Fewer than 2 split reads or < 4 total alt reads for ASDISC"); h.addFilterField("COMPETEDISC", "Discordant cluster found with nearly same breakpoints, but different strands for DSCRD event"); h.addFilterField("LOWSPAN", "Discordant read cluster (no split read support), and less than 10kb span and < 12 reads"); h.addFilterField("LOWMAPQ", "Assembly contig has non 60/60 mapq and no discordant support"); h.addFilterField("LOWMATCHLEN", "Assembly contig has fewer than 40 bases mapping uniquely to a reference locus (<100 if complex mapping or )"); h.addFilterField("SINGLEBX", "Variant is supported by only a single BX tag (if run with 10X Genomics data)"); h.addFilterField("LOWQINVERSION", "Assembly-only inversion of span < 300 and < 6 split reads. Common artifact in Illumina data"); h.addFilterField("LOWMAPQDISC", "Both clusters of reads failed to achieve mean mapq of > 30 for DSCRD"); h.addFilterField("LOWSPLITSMALL", "Fewer than 4 split reads for small events ( < 1500 bp)"); h.addFilterField("LOWICSUPPORT", "Less than 60bp of contig match on one end of an inter-chromosomal break"); h.addFilterField("LOWAS", "Alignment score of one end is less than 80% of contig length, or number of mismatch bases (NM) on one end is >= 10"); h.addFilterField("WEAKSUPPORTHIREP","Fewer then 7 split reads for variant with >= 10 bases of repeat sequence (need to be more strict)"); h.addFilterField("WEAKDISC", "Fewer than 7 supporting discordant reads and no assembly support"); h.addFilterField("TOOSHORT", "Contig alignment for part of this rearrangement has <= 25bp match to reference"); h.addFilterField("PASS", "Strong assembly support, strong discordant support, or combined support. Strong MAPQ"); h.addFilterField("MULTIMATCH", "Low MAPQ and this contig fragment maps well to multiple locations"); h.addFilterField("LOWSPANDSCRD", "Discordant-only cluster is too small given isize distribution to call confidently"); h.addFilterField("SIMPLESEQUENCE", "Major portion of one contig mapping falls in a simple sequence, as given by -R flag. Assembly-only filter"); // INFOs h.addInfoField("REPSEQ", "1", "String", "Repeat sequence near the event"); h.addInfoField("NM", "1", "Integer", "Number of mismatches of this alignment fragment to reference"); h.addInfoField("MATENM", "1", "Integer", "Number of mismatches of partner alignment fragment to reference"); h.addInfoField("SVTYPE", "1", "String", "Type of structural variant"); h.addInfoField("HOMSEQ", "1", "String", "Sequence of base pair identical micro-homology at event breakpoints. Plus strand sequence displayed."); h.addInfoField("IMPRECISE", "0", "Flag", "Imprecise structural variation"); h.addInfoField("SECONDARY", "0", "Flag", "SV calls comes from a secondary alignment"); h.addInfoField("HOMLEN", "1", "Integer", "Length of base pair identical micro-homology at event breakpoints"); h.addInfoField("MAPQ", "1", "Integer", "Mapping quality (BWA-MEM) of this fragement of the contig (-1 if discordant only)"); h.addInfoField("MATEMAPQ", "1", "Integer", "Mapping quality of the partner fragment of the contig"); h.addInfoField("MATEID", "1", "String", "ID of mate breakends"); h.addInfoField("SUBN", "1", "Integer", "Number of secondary alignments associated with this contig fragment"); h.addInfoField("NUMPARTS", "1", "Integer", "If detected with assembly, number of parts the contig maps to. Otherwise 0"); h.addInfoField("EVDNC", "1", "String", "Evidence for variant. ASSMB assembly only, ASDIS assembly+discordant. DSCRD discordant only, TSI_L templated-sequence insertion (local, e.g. AB or BC of an ABC), TSI_G global (e.g. AC of ABC)"); h.addInfoField("SCTG", "1", "String", "Identifier for the contig assembled by svaba to make the SV call"); h.addInfoField("INSERTION", "1", "String", "Sequence insertion at the breakpoint."); h.addInfoField("SPAN", "1", "Integer", "Distance between the breakpoints. -1 for interchromosomal"); h.addInfoField("DISC_MAPQ", "1", "Integer", "Mean mapping quality of discordant reads mapped here"); // SvABA2.0 (v3): VCF 4.5-aligned SV INFO fields. h.addInfoField("SOMATIC", "0", "Flag", "Somatic call per svaba's somatic LOD model (see BreakPoint::score_somatic)"); h.addInfoField("EVENT", "1", "String", "ID of the SV event this breakend belongs to. Paired BND records share the same EVENT; a symbolic SV is its own event. Populated from BreakPoint::id (col 52 of bps.txt) when available."); h.addInfoField("END", "1", "Integer", "End position for symbolic alleles (//). Not set for BND."); h.addInfoField("SVLEN", "1", "Integer", "Length of the SV in bp. Negative for deletions. Only set on symbolic alleles."); h.addInfoField("SVCLAIM", "1", "String", "Evidence type supporting the SV call, per VCFv4.5: J=junction-level (split/assembly), D=depth, DJ=both."); h.addInfoField("MAXLOD", "1", "Float", "Maximum per-sample log-odds (variant vs error) across all samples (see BreakPoint::max_lod)"); h.addInfoField("SOMLOD", "1", "Float", "Somatic log-odds (LLR of somatic vs non-somatic; see SvabaModels::SomaticLOD)"); // FORMATs (SV) h.addFormatField("GT", "1", "String", "Most likely genotype"); h.addFormatField("AD", "1", "Integer", "Allele depth: Number of reads supporting the variant"); h.addFormatField("DP", "1", "Integer", "Depth of coverage: Number of reads covering site."); h.addFormatField("GQ", "1", "String", "Genotype quality (currently not supported. Always 0)"); h.addFormatField("PL", ".", "Float", "Normalized likelihood of the current genotype"); h.addFormatField("SR", "1", "Integer", "Number of spanning reads for this variant"); h.addFormatField("DR", "1", "Integer", "Number of discordant-supported reads for this variant"); h.addFormatField("LO", "1", "Float", "Log-odds that this variant is real vs artifact"); h.addFormatField("LO_n", "1", "Float", "Log-odds that this variant is AF=0 vs AF>=0.5"); } void populate_indel_header(VCFHeader& h) { // FILTERs h.addFilterField("LOWMAPQ", "Assembly contig has less than MAPQ 10"); h.addFilterField("SHORTALIGNMENT", "Matched (M) contig frag to left or right of indel < 20 bp"); h.addFilterField("LOWLOD", "LOD score is less than the cutoff"); h.addFilterField("MULTIMATCH", "Low MAPQ and this contig fragment maps well to multiple locations"); h.addFilterField("LOWAS", "Less than 80% of contig length is covered by a supporting read"); h.addFilterField("NONVAR", "0/0 is the most likely genotype"); h.addFilterField("PASS", "LOD score pass"); h.addFilterField("VLOWAF", "allelic fraction < 0.05"); h.addFilterField("REPVAR", "Multiple conflicting variants at a highly repetitive region"); // INFOs h.addInfoField("SCTG", "1", "String", "Identifier for the contig assembled by svaba to make the indel call"); h.addInfoField("MAPQ", "1", "Integer", "Mapping quality (BWA-MEM) of the assembled contig"); h.addInfoField("SPAN", "1", "Integer", "Size of the indel"); h.addInfoField("REPSEQ", "1", "String", "Repeat sequence near the variant"); h.addInfoField("NM", "1", "Integer", "Number of mismatches of this alignment fragment to reference"); h.addInfoField("READNAMES",".", "String", "IDs of ALT reads"); h.addInfoField("BX", ".", "String", "Table of BX tag counts for supporting reads"); h.addInfoField("DBSNP", "0", "Flag", "Variant found in dbSNP"); h.addInfoField("LOD", "1", "Float", "Log of the odds that variant is real vs artifact"); // SvABA2.0 (v3): VCF 4.5-aligned indel INFO fields. h.addInfoField("SOMATIC", "0", "Flag", "Somatic indel per svaba's somatic LOD model"); h.addInfoField("EVENT", "1", "String", "Stable indel identifier (populated from BreakPoint::id when available)"); h.addInfoField("SVTYPE", "1", "String", "INS / DEL for indels emitted with explicit SVTYPE"); h.addInfoField("SVLEN", "1", "Integer", "Length of the indel (negative for deletions)"); h.addInfoField("MAXLOD", "1", "Float", "Maximum per-sample log-odds (variant vs error) across samples"); h.addInfoField("SOMLOD", "1", "Float", "Somatic log-odds (LLR of somatic vs non-somatic)"); // FORMATs (indel) h.addFormatField("GT", "1", "String", "Most likely genotype"); h.addFormatField("AD", "1", "Integer", "Allele depth: Number of reads supporting the variant"); h.addFormatField("DP", "1", "Integer", "Depth of coverage: Number of reads covering site."); h.addFormatField("GQ", "1", "String", "Genotype quality (currently not supported. Always 0)"); h.addFormatField("PL", ".", "Float", "Normalized likelihood of the current genotype"); h.addFormatField("SR", "1", "Integer", "Number of spanning reads for this variant"); h.addFormatField("CR", "1", "Integer", "Number of cigar-supported reads for this variant"); h.addFormatField("LO", "1", "Float", "Log-odds that this variant is real vs artifact"); h.addFormatField("LO_n", "1", "Float", "Log-odds that this variant is AF=0 vs AF>=0.5"); } } // namespace VCFFile::VCFFile(std::string file, std::string id, const SvabaSharedConfig& sc, const VCFHeader& vheader, bool nopass, bool m_verbose, bool skip_dedup_in_ctor) { filename = file; analysis_id = id; verbose = m_verbose; include_nonpass = nopass; skip_dedup = skip_dedup_in_ctor; // captured before ctor's deduplicate() runs // Seed both headers from the caller-provided base (which carries contig // and sample field lines), then layer on the SV- and indel-specific // INFO/FILTER/FORMAT blocks. sv_header = vheader; indel_header = vheader; populate_sv_header(sv_header); populate_indel_header(indel_header); // Open the gzipped bps file stream. igzstream infile(file.c_str(), std::ios::in); if (!infile) { std::cerr << "Can't read file " << file << " for parsing VCF\n"; std::exit(EXIT_FAILURE); } std::cerr << "...vcf - reading breakpoints: " << file << '\n'; // Per-contig cap: if more than VCF_SECONDARY_CAP pairs share the same // cname, drop additional ones to avoid runaway output at pileups. std::unordered_map cname_count; std::string line; // Skip the first row — it's the column header emitted by BreakPoint::header(). std::getline(infile, line, '\n'); int line_count = 0; while (std::getline(infile, line, '\n')) { if (line.empty() || line[0] == '#') continue; // BreakPoint parser will fail if any chr is unknown. Skip defensively. if (line.find("Unknown") != std::string::npos) continue; // Parse one bps.txt.gz row into a heap BreakPoint. Must be shared_ptr // because BreakPoint is non-copyable/non-movable. std::shared_ptr bp; try { bp = std::make_shared(line, &sc); } catch (const std::exception& e) { std::cerr << "Warning: failed to parse bps line: " << e.what() << '\n'; continue; } // Honor the unfiltered/filtered flag from the caller. Gate on // `confidence` (the FILTER column string) rather than bp->pass — // the parser doesn't repopulate the `pass` bool from the dump, // and the scorer only updates `confidence`, so `confidence` is // the single source of truth for "did this record PASS". if (!include_nonpass && bp->confidence != "PASS") continue; // Per-contig cap: cap the number of entries per contig name. if (++cname_count[bp->cname] >= VCF_SECONDARY_CAP) continue; auto vpair = std::make_shared(bp); if (bp->svtype == SVType::INDEL) indels.emplace(line_count, vpair); else entry_pairs.emplace(line_count, vpair); ++line_count; } std::cerr << "...vcf - read in " << SeqLib::AddCommas(indels.size()) << " indels and " << SeqLib::AddCommas(entry_pairs.size()) << " SVs\n"; std::cerr << "...vcf - SV deduplicating " << SeqLib::AddCommas(entry_pairs.size()) << " events\n"; deduplicate(sc.header); std::cerr << "...vcf - SV deduplicated down to " << SeqLib::AddCommas(entry_pairs.size() - dups.size()) << " break pairs\n"; } // =========================================================================== // Dedupe — SVs via paired-breakend interval-tree matching, indels via hash. // =========================================================================== namespace { // Extension of GenomicRegion carrying the entry_pairs key and a pass flag. class GenomicRegionWithID : public SeqLib::GenomicRegion { public: GenomicRegionWithID(int32_t c, uint32_t p1, uint32_t p2, int i, int p) : SeqLib::GenomicRegion(c, p1, p2), id(i), pass(p) {} uint32_t id : 30; uint32_t pass : 2; }; } // namespace void VCFFile::deduplicate(const SeqLib::BamHeader& header) { // SvABA2.0: `svaba tovcf` receives a bps.txt.gz that has already been // sorted + deduped by scripts/svaba_postprocess.sh (step 3). Rerunning // the internal paired-interval-tree dedup on that input is wasted work // and can introduce its own collisions via the high-overlap blacklist // logic below. Short-circuit when the caller opts in. if (skip_dedup) { if (verbose) std::cerr << "...vcf - skip_dedup set, bypassing internal dedupe\n"; return; } // Build separate interval trees for left (b1) and right (b2) breakends. SeqLib::GenomicRegionCollection grv1; SeqLib::GenomicRegionCollection grv2; for (const auto& kv : entry_pairs) { const auto& bpp = kv.second->bp; // Use the confidence string (not the stale bp->pass bool) to // decide PASS status for the dedup grouping — see BreakPoint.cpp // parser note: pass never gets repopulated from the dumped // confidence column, so it's 0 across all parsed records. const int bp_pass_int = (bpp->confidence == "PASS") ? 1 : 0; grv1.add(GenomicRegionWithID(bpp->b1.gr.chr, bpp->b1.gr.pos1, bpp->b1.gr.pos2, kv.first, bp_pass_int)); grv2.add(GenomicRegionWithID(bpp->b2.gr.chr, bpp->b2.gr.pos1, bpp->b2.gr.pos2, kv.first, bp_pass_int)); } grv1.CreateTreeMap(); grv2.CreateTreeMap(); assert(grv1.size() == grv2.size()); // Regions blacklisted mid-pass because they turned out to be SV pileups. SeqLib::GenomicRegionCollection high_overlap_blacklist; size_t count = 0; for (const auto& kv : entry_pairs) { const int current_key = kv.first; const auto& pair = kv.second; const auto& bpp = pair->bp; // Tighter pad for small intrachrom events, looser for interchrom / large. const int pad = (bpp->b1.gr.chr != bpp->b2.gr.chr || std::abs(bpp->b1.gr.pos1 - bpp->b2.gr.pos1) > DEDUPEPAD * 2) ? DEDUPEPAD : 10; if (verbose && (count % 20000 == 0)) std::cerr << "...deduping at " << SeqLib::AddCommas(count) << '\n'; ++count; // Blacklist check for either breakend. SeqLib::GenomicIntervalVector bad1, bad2; auto fb1 = high_overlap_blacklist.GetTree()->find(bpp->b1.gr.chr); auto fb2 = high_overlap_blacklist.GetTree()->find(bpp->b2.gr.chr); if (fb1 != high_overlap_blacklist.GetTree()->end()) { fb1->second.findOverlapping(bpp->b1.gr.pos1 - pad, bpp->b1.gr.pos1 + pad, bad1); if (!bad1.empty()) { dups.insert(current_key); continue; } } if (fb2 != high_overlap_blacklist.GetTree()->end()) { fb2->second.findOverlapping(bpp->b2.gr.pos1 - pad, bpp->b2.gr.pos1 + pad, bad2); if (!bad2.empty()) { dups.insert(current_key); continue; } } // Find all entries whose b1/b2 fall within pad of this one's b1/b2. SeqLib::GenomicIntervalVector giv1, giv2; auto ff1 = grv1.GetTree()->find(bpp->b1.gr.chr); auto ff2 = grv2.GetTree()->find(bpp->b2.gr.chr); assert(ff1 != grv1.GetTree()->end()); assert(ff2 != grv2.GetTree()->end()); ff1->second.findContained(bpp->b1.gr.pos1 - pad, bpp->b1.gr.pos1 + pad, giv1); ff2->second.findContained(bpp->b2.gr.pos1 - pad, bpp->b2.gr.pos1 + pad, giv2); // If this breakend is in a region hit by more than HIGH_OVERLAP_LIMIT // other breakends, treat it as an SV pileup: blacklist the region and // drop the current entry. if (giv1.size() > HIGH_OVERLAP_LIMIT) { SeqLib::GenomicRegion gr_bad = bpp->b1.gr; std::cerr << "...added " << gr_bad << " with " << giv1.size() << " overlaps to SV-pileup blacklist at dedupe\n" << "NB: Any SV with one breakend occuring more than " << HIGH_OVERLAP_LIMIT << " times will be removed. To change this behavior, " << "adjust HIGH_OVERLAP_LIMIT in vcf.cpp and recompile/run\n"; gr_bad.Pad(BAD_REGION_PAD); high_overlap_blacklist.add(gr_bad); high_overlap_blacklist.CreateTreeMap(); dups.insert(current_key); continue; } if (giv2.size() > HIGH_OVERLAP_LIMIT) { SeqLib::GenomicRegion gr_bad = bpp->b2.gr; std::cerr << "...added " << gr_bad << " with " << giv2.size() << " overlaps to SV-pileup blacklist at dedupe\n"; gr_bad.Pad(BAD_REGION_PAD); high_overlap_blacklist.add(gr_bad); high_overlap_blacklist.CreateTreeMap(); dups.insert(current_key); continue; } assert(giv1.size() <= HIGH_OVERLAP_LIMIT); assert(giv2.size() <= HIGH_OVERLAP_LIMIT); // A hit is a dup if the same entry_pairs key appears on BOTH sides, with // matching strands and matching pass status. Source of truth for // PASS is confidence == "PASS" (see note at top of deduplicate()). const bool is_pass = (pair->e1.bp->confidence == "PASS"); const char s1_here = bpp->b1.gr.strand; const char s2_here = bpp->b2.gr.strand; std::unordered_map> key_count; for (const auto& j : giv1) { const auto& hit = grv1.at(j.value); if (hit.id == current_key) continue; if ((is_pass == static_cast(hit.pass)) && entry_pairs[hit.id]->bp->b1.gr.strand == s1_here) ++key_count[hit.id].first; } for (const auto& j : giv2) { const auto& hit = grv2.at(j.value); if (hit.id == current_key) continue; if ((is_pass == static_cast(hit.pass)) && entry_pairs[hit.id]->bp->b2.gr.strand == s2_here) ++key_count[hit.id].second; } // If this entry has a "twin" with a worse (lower) score than ours, mark // the twin — not ours — as a dup. Ties break by `operator<` on BreakPoint. // Exception: TSI_LOCAL/TSI_GLOBAL annotate the same underlying event in // two ways and should NOT dup each other. for (const auto& kc : key_count) { if (kc.second.first == 0 || kc.second.second == 0) continue; const auto& other = entry_pairs[kc.first]; if (*bpp < *other->bp) { const bool local_global_pair = (bpp->svtype == SVType::TSI_LOCAL && other->bp->svtype == SVType::TSI_GLOBAL) || (bpp->svtype == SVType::TSI_GLOBAL && other->bp->svtype == SVType::TSI_LOCAL); if (local_global_pair) { // don't dup: intentional double-annotation } else { dups.insert(kc.first); } } } } // --- Indel dedupe: cheap hash on (chr, pos, REF, ALT). --- if (verbose) std::cerr << "...vcf - hashing " << SeqLib::AddCommas(indels.size()) << " indels for dedupe\n"; std::unordered_set seen; VCFEntryPairMap deduped_indels; deduped_indels.reserve(indels.size()); for (const auto& kv : indels) { std::string key; try { const auto& b1 = kv.second->e1.bp->b1; key = std::to_string(b1.gr.chr) + ':' + std::to_string(b1.gr.pos1) + '_' + kv.second->e1.getRefString() + '_' + kv.second->e1.getAltString(header); } catch (...) { std::cerr << "indel dedupe: error building hash key for entry " << kv.first << '\n'; continue; } if (seen.insert(key).second) deduped_indels.emplace(kv.first, kv.second); } indels = std::move(deduped_indels); } // =========================================================================== // Writers // =========================================================================== void VCFFile::writeIndels(std::string basename, bool /*zip*/, bool /*onefile*/, const SeqLib::BamHeader& header) const { // The legacy writer emitted a single combined indel VCF regardless of // zip/onefile flags; we preserve that behavior to avoid surprising // downstream consumers. const std::string out_name = basename + "germline.indel.vcf"; std::ofstream out(out_name); if (!out) { std::cerr << "vcf: failed to open " << out_name << " for writing\n"; return; } out << indel_header << '\n'; // Collect e1 of every indel pair into a vector, sort by genomic position. VCFEntryVec rows; rows.reserve(indels.size()); for (const auto& kv : indels) rows.push_back(kv.second->e1); std::sort(rows.begin(), rows.end()); for (const auto& r : rows) { // PASS/FILTER gate: use the confidence string as source of truth // (bp->pass is a stale bool; see parser note in BreakPoint.cpp). if (r.bp->confidence != "PASS" && !include_nonpass) continue; out << r.toFileString(header) << '\n'; } } void VCFFile::writeSVs(std::string basename, bool /*zip*/, bool /*onefile*/, const SeqLib::BamHeader& header) const { const std::string out_name = basename + "germline.sv.vcf"; std::ofstream out(out_name); if (!out) { std::cerr << "vcf: failed to open " << out_name << " for writing\n"; return; } out << sv_header << '\n'; // Pull both breakends of each surviving pair into a flat vector, sort, // then emit. Skip entries marked as dups during dedupe. VCFEntryVec rows; rows.reserve(entry_pairs.size() * 2); for (const auto& kv : entry_pairs) { if (dups.count(kv.first)) continue; rows.push_back(kv.second->e1); rows.push_back(kv.second->e2); } std::sort(rows.begin(), rows.end()); for (const auto& r : rows) { // PASS/FILTER gate: use the confidence string as source of truth // (bp->pass is a stale bool; see parser note in BreakPoint.cpp). if (r.bp->confidence != "PASS" && !include_nonpass) continue; out << r.toFileString(header) << '\n'; } } // =========================================================================== // SvABA2.0: symbolic-allele classifier + single-file writers (tovcf path). // =========================================================================== namespace { // Classify a BreakPoint pair to decide whether it can be emitted as a // single symbolic-allele record (//) instead of two paired // BND records. Conservative: // - both breakends must live on the same chromosome // - INDEL records keep their existing REF/ALT shape (not this path) // - strand pattern determines the symbolic kind: // +/+ or -/- -> // -/+ -> // +/- -> // - anything ambiguous / inter-chrom falls through to BND. // Returns empty string when the pair should stay as paired BND. std::string classify_symbolic_kind(const BreakPoint& bp) { if (bp.svtype == SVType::INDEL) return ""; if (bp.b1.gr.chr != bp.b2.gr.chr) return ""; const char s1 = bp.b1.gr.strand; const char s2 = bp.b2.gr.strand; if (s1 == '+' && s2 == '+') return "DEL"; if (s1 == '-' && s2 == '-') return "DEL"; if (s1 == '-' && s2 == '+') return "DUP"; if (s1 == '+' && s2 == '-') return "INV"; return ""; } // Sort key used by the single-file writers: for a BND entry use its // represented breakend; for a symbolic entry use the lower of the two // endpoints (matching VCF convention for the POS of a symbolic SV). bool entry_lt_for_output(const VCFEntry& a, const VCFEntry& b) { const BreakEnd* ba = a.symbolic_rep ? (a.bp->b1.gr.pos1 < a.bp->b2.gr.pos1 ? &a.bp->b1 : &a.bp->b2) : (a.id_num == 1 ? &a.bp->b1 : &a.bp->b2); const BreakEnd* bb = b.symbolic_rep ? (b.bp->b1.gr.pos1 < b.bp->b2.gr.pos1 ? &b.bp->b1 : &b.bp->b2) : (b.id_num == 1 ? &b.bp->b1 : &b.bp->b2); return ba->gr < bb->gr; } // Open path for writing (gzipped or plain). Returns empty unique_ptr on // failure, with the error already logged to stderr. std::unique_ptr open_vcf_out(const std::string& path, bool gzip) { if (gzip) { auto g = std::make_unique(path.c_str(), std::ios::out); if (!g->good()) { std::cerr << "vcf: failed to open " << path << " for writing\n"; return {}; } return g; } auto f = std::make_unique(path); if (!f->good()) { std::cerr << "vcf: failed to open " << path << " for writing\n"; return {}; } return f; } } // namespace void VCFFile::writeSvsSingleFile(const std::string& path, bool gzip, const SeqLib::BamHeader& header) const { auto out_owner = open_vcf_out(path, gzip); if (!out_owner) return; std::ostream& out = *out_owner; out << sv_header << '\n'; // Build the emit list. For each pair: // - skip dups (if dedup ran) // - classify symbolic eligibility when sv_format == SYMBOLIC_WHEN_OBVIOUS // - emit one e1 (symbolic) or two (BND) entries into rows VCFEntryVec rows; rows.reserve(entry_pairs.size() * 2); for (const auto& kv : entry_pairs) { if (dups.count(kv.first)) continue; VCFEntryPair pair_copy = *kv.second; // shallow copy to stamp symbolic_rep if (sv_format == SvFormat::SYMBOLIC_WHEN_OBVIOUS) { const std::string kind = classify_symbolic_kind(*pair_copy.bp); if (!kind.empty()) { pair_copy.e1.symbolic_rep = true; pair_copy.e1.symbolic_kind = kind; rows.push_back(pair_copy.e1); continue; } } rows.push_back(pair_copy.e1); rows.push_back(pair_copy.e2); } std::sort(rows.begin(), rows.end(), entry_lt_for_output); for (auto& r : rows) { // PASS/FILTER gate: use the confidence string as source of truth // (bp->pass is a stale bool; see parser note in BreakPoint.cpp). if (r.bp->confidence != "PASS" && !include_nonpass) continue; // Stamp the per-entry somlod threshold so fillInfoFields applies // the right cutoff to the SOMATIC flag. r.somatic_threshold = somatic_threshold; out << r.toFileString(header, qual_mode) << '\n'; } } void VCFFile::writeIndelsSingleFile(const std::string& path, bool gzip, const SeqLib::BamHeader& header) const { auto out_owner = open_vcf_out(path, gzip); if (!out_owner) return; std::ostream& out = *out_owner; out << indel_header << '\n'; // Indels are always a single REF/ALT record per event (no BND pair), // so this is simpler than the SV path: collect e1 of every indel, // sort, emit. VCFEntryVec rows; rows.reserve(indels.size()); for (const auto& kv : indels) rows.push_back(kv.second->e1); std::sort(rows.begin(), rows.end()); for (auto& r : rows) { // PASS/FILTER gate: use the confidence string as source of truth // (bp->pass is a stale bool; see parser note in BreakPoint.cpp). if (r.bp->confidence != "PASS" && !include_nonpass) continue; r.somatic_threshold = somatic_threshold; out << r.toFileString(header, qual_mode) << '\n'; } } ================================================ FILE: src/svaba/vcf.h ================================================ #pragma once // vcf.h // // Read a svaba `bps.txt.gz` file back in, dedupe the breakpoint pairs, // and write out somatic/germline SV and indel VCFs. // // Design notes: // * `BreakPoint` is non-copyable and non-movable (see BreakPoint.h), so we // store every breakpoint as a `std::shared_ptr` — both the // `VCFEntry` views and the `VCFEntryPair` aggregate share ownership of // the same underlying object. // * `BreakPoint::SampleInfo` is a private nested type. vcf.cpp therefore // iterates `bp->allele` with `auto` and never names the type directly. // * The bps.txt.gz file is read one line at a time (memory-efficient); only // parsed records that survive the per-contig secondary cap are retained // in memory. // * The external API exposed to `run_svaba.cpp` is preserved verbatim: // `VCFFile(file, id, sc, header, nopass, verbose)` + // `writeIndels / writeSVs(basename, zip, onefile, bam_header)` + // `include_nonpass`. #include #include #include #include #include #include #include #include "SeqLib/BamHeader.h" #include "SeqLib/GenomicRegion.h" #include "BreakPoint.h" #include "SvabaSharedConfig.h" // --------------------------------------------------------------------------- // Header-field dictionaries. // --------------------------------------------------------------------------- using InfoMap = std::unordered_map; using FilterMap = std::unordered_map; using FormatMap = std::unordered_map; using SampleMap = std::unordered_map; using ContigFieldMap = std::unordered_map; // --------------------------------------------------------------------------- // Knobs for the `svaba tovcf` subcommand. // --------------------------------------------------------------------------- // // QualMode — what to put in the VCF QUAL column. // SUM_LO_PHRED (legacy): -10 log10 P(all alt reads are errors), taken from // BreakPoint::quality (col 34 of bps.txt). Keeps // behavior compatible with `svaba run` / refilter. // MAXLOD_PHRED: round(10 * bp->max_lod), cap 99. One-to-one with // INFO/MAXLOD, meaningful as a VCF QUAL field. // MISSING: emit '.' (VCF spec-valid missing value). Forces // users to look at FILTER / INFO for confidence, // which is usually what you want when somlod and // maxlod are the canonical scores. enum class QualMode { SUM_LO_PHRED, MAXLOD_PHRED, MISSING }; // SvFormat — how to serialize an SV call. // BND_ALWAYS (legacy): every SV emits as two paired BND records // with mate-bracket ALT notation. Matches // the current `svaba run` output exactly. // SYMBOLIC_WHEN_OBVIOUS: intrachromosomal events with unambiguous // orientation emit as a single symbolic // record ( / / ). Inter- // chromosomal and complex events stay BND. // Nicer for IGV / samplot / bcftools // pipelines that render symbolic alleles // natively. enum class SvFormat { BND_ALWAYS, SYMBOLIC_WHEN_OBVIOUS }; // --------------------------------------------------------------------------- // VCFHeader — the ##-lines that precede a VCF body. // --------------------------------------------------------------------------- struct VCFHeader { VCFHeader() = default; ~VCFHeader() = default; // VCF spec version this header declares. Defaulted to 4.5 (the most // recent formal spec as of 2024) — backwards-compatible at the record // level with anything accepting 4.2+, and enables the clean symbolic- // SV / EVENT / SVCLAIM idioms the tovcf path uses. std::string fileformat = "VCFv4.5"; std::string filedate; std::string source; std::string reference = "hg19"; std::string colnames = "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT"; InfoMap infomap; FilterMap filtermap; FormatMap formatmap; SampleMap samplemap; ContigFieldMap contigfieldmap; friend std::ostream& operator<<(std::ostream& out, const VCFHeader& v); void addInfoField (std::string field, std::string number, std::string type, std::string description); void addFilterField(std::string field, std::string description); void addFormatField(std::string field, std::string number, std::string type, std::string description); void addSampleField(std::string field); void addContigField(std::string id, int len); }; // --------------------------------------------------------------------------- // VCFEntry — a single breakend row (one side of a BreakPoint, or an indel). // --------------------------------------------------------------------------- struct VCFEntry { VCFEntry() = default; ~VCFEntry() = default; // Shared ownership with the owning VCFEntryPair. std::shared_ptr bp; // Unique id across all VCFEntryPairs in a VCFFile. `id_num` is 1 for // the left breakend (b1) and 2 for the right (b2); indels always use 1. uint32_t id = 0; uint8_t id_num = 0; // Set by VCFFile::writeSvsSingleFile when the SvFormat:: // SYMBOLIC_WHEN_OBVIOUS mode decides this pair should be emitted as // a single ``/``/`` record instead of two paired BND // records. When true, only the e1 entry of the pair gets serialized // (the caller skips e2 for that pair). Kind is stashed here so // getAltString / fillInfoFields can key off it without reclassifying. bool symbolic_rep = false; std::string symbolic_kind; // "DEL" / "DUP" / "INV" when symbolic_rep is true // Somlod cutoff for stamping the INFO/SOMATIC flag. A record gets the // flag iff bp->LO_s >= somatic_threshold AND bp->somatic != FAILED. // Writers set this per-entry from VCFFile::somatic_threshold before // calling toFileString(); default 1.0 matches the tovcf default. double somatic_threshold = 1.0; std::string getRefString() const; std::string getAltString(const SeqLib::BamHeader& header) const; std::string getIdString () const; // Build the full INFO map (keys → values) for this entry. // `somatic_flag` = true adds `SOMATIC` (a flag INFO field). std::unordered_map fillInfoFields() const; // Serialize the entry as one VCF body line (no trailing newline). // qual_mode — what goes in the QUAL column (see QualMode). // NB: the symbolic/BND choice is read off this->symbolic_rep, // which the writer sets before calling. std::string toFileString(const SeqLib::BamHeader& header, QualMode qual_mode = QualMode::SUM_LO_PHRED) const; // Sort primarily by genomic position of the represented breakend. bool operator< (const VCFEntry& v) const; bool operator==(const VCFEntry& v) const; }; using VCFEntryVec = std::vector; // --------------------------------------------------------------------------- // VCFEntryPair — holds both sides (e1, e2) of a rearrangement, plus the // shared BreakPoint they are built from. Indels still use a pair but only // populate e1 as a real record. // --------------------------------------------------------------------------- struct VCFEntryPair { VCFEntryPair() = default; ~VCFEntryPair() = default; // Build both sides from a shared BreakPoint. Assigns a collision-avoided // hash id to e1.id / e2.id. explicit VCFEntryPair(std::shared_ptr& b); VCFEntry e1, e2; std::shared_ptr bp; std::string toFileString(const SeqLib::BamHeader& header, QualMode qual_mode = QualMode::SUM_LO_PHRED) const; }; using VCFEntryPairMap = std::unordered_map>; // --------------------------------------------------------------------------- // VCFFile — the top-level object, owning all entry pairs and the two headers. // --------------------------------------------------------------------------- struct VCFFile { VCFFile() = default; ~VCFFile() = default; // Read a svaba bps.txt.gz file, parse line-by-line into BreakPoints, // build VCFEntryPairs, and deduplicate. `nopass` controls whether // initially non-PASS records are retained (they can still be filtered // later by writeIndels/writeSVs via `include_nonpass`). // // `skip_dedup_in_ctor` = true has the ctor set `this->skip_dedup` // BEFORE the internal `deduplicate()` call fires, so no dedup runs // on input that was already deduped upstream (the `svaba tovcf` path). // Default false keeps backward-compat with run_svaba and refilter. VCFFile(std::string file, std::string id, const SvabaSharedConfig& sc, const VCFHeader& vheader, bool nopass, bool verbose, bool skip_dedup_in_ctor = false); std::string filename; std::string analysis_id; bool verbose = false; bool include_nonpass = false; // SvABA2.0 tovcf-path knobs. All default to legacy-compatible values so // run_svaba.cpp and refilter.cpp pick up no behavior change. The `svaba // tovcf` entry point flips them to the new defaults (MISSING qual, // SYMBOLIC_WHEN_OBVIOUS sv format, skip_dedup=true). bool skip_dedup = false; // deduplicate() returns immediately when set QualMode qual_mode = QualMode::SUM_LO_PHRED; SvFormat sv_format = SvFormat::BND_ALWAYS; // Minimum somlod (LO_s) to mark a record with the INFO/SOMATIC flag. // Writers stamp this onto each VCFEntry before emission. Default 1.0 // is the recommended somatic-call gate; lower it to be permissive, // raise it to be stricter. double somatic_threshold = 1.0; VCFHeader indel_header; VCFHeader sv_header; VCFEntryPairMap entry_pairs; // SVs VCFEntryPairMap indels; // indels std::unordered_set dups; // keys in entry_pairs marked as duplicates // Dedupe SVs via paired breakend interval-tree matching; dedupe indels // via (chr,pos,ref,alt) hash set. void deduplicate(const SeqLib::BamHeader& header); // Write the body VCFs to disk. `zip` is currently ignored (always writes // plain .vcf); `onefile` merges somatic/germline into one emission. void writeIndels(std::string basename, bool zip, bool onefile, const SeqLib::BamHeader& header) const; void writeSVs(std::string basename, bool zip, bool onefile, const SeqLib::BamHeader& header) const; // SvABA2.0: single-file writers used by `svaba tovcf`. Unlike // writeSVs / writeIndels above, these write EVERY record (somatic and // germline together) to one path, with the SOMATIC INFO flag set on // somatic rows for downstream filtering. Honors sv_format, qual_mode, // and include_nonpass set on the VCFFile. `gzip=true` uses ogzstream; // otherwise a plain ofstream is used. void writeSvsSingleFile (const std::string& path, bool gzip, const SeqLib::BamHeader& header) const; void writeIndelsSingleFile(const std::string& path, bool gzip, const SeqLib::BamHeader& header) const; }; ================================================ FILE: src/svabautils/AssemblyBamWalker.cpp ================================================ #include "AssemblyBamWalker.h" #include "SeqLib/UnalignedSequence.h" #include "SeqLib/ReadFilter.h" #include #include #include "SnowmanUtils.h" #include "run_snowman.h" #include //#define QNAME "5427150" #define MIN_ISIZE_FOR_DISC 700 //static std::vector contig_elems; static int num_to_run; static pthread_mutex_t snow_lock; static ogzstream all_align, os_allbps; //static std::ofstream all_align, os_allbps; static std::string tt, nn; // so hacky static std::shared_ptr ttindex, nnindex; static faidx_t* f; static std::set prefixes; static SeqLib::Filter::ReadFilterCollection * mr; //static ofstream os_allbps; static struct timespec start; static SeqLib::RefGenome * ref_genomeAW, * ref_genome_viral_dummy; bool __good_contig(const SeqLib::BamRecordVector& brv, const SeqLib::GenomicRegionVector& regions, int max_len, int max_mapq) { // NO INDELS /* return (brv.size() && regions.size() && brv.size() < 20 && (brv.size() > 1) && brv[0].Length() < 20000 && brv[0].CigarSize() < 50 && max_len > 250 && max_mapq >= 0); */ // all hard clip? size_t hc = 0; for (auto& i : brv) if (i.NumHardClip()) ++hc; return (brv.size() && hc != brv.size() && regions.size() && brv.size() < 20 && (brv.size() > 1 || brv[0].CigarSize() > 1) && brv[0].Length() < 20000 && brv[0].CigarSize() < 20 && max_len > 101 && max_mapq >= 0); } //bool runAC(SeqLib::BamRecordVector& brv, faidx_t * f, std::shared_ptr pt, std::shared_ptr pn, // const std::string& t, const std::string& n, const SeqLib::GenomicRegionVector& regions) { bool runAC(const ContigElement * c) { SeqLib::GRC trimmed_regions; for (auto& r : c->regions) if (r.chr < 24) trimmed_regions.add(r); if (!trimmed_regions.size()) return true; SnowmanBamWalker twalk, nwalk; if (!tt.empty()) { twalk = SnowmanBamWalker(tt); twalk.prefix = "t000"; twalk.max_cov = 200; twalk.get_mate_regions = false; twalk.SetPreloadedIndex(ttindex); twalk.SetMultipleRegions(trimmed_regions); twalk.readBam(); } if (!nn.empty()) { nwalk = SnowmanBamWalker(nn); nwalk.prefix = "n000"; nwalk.max_cov = 200; nwalk.get_mate_regions = false; nwalk.SetPreloadedIndex(nnindex); nwalk.SetMultipleRegions(trimmed_regions); nwalk.readBam(); } SeqLib::BamRecordVector bav_this; for (auto& q : twalk.reads) bav_this.push_back(q); for (auto& q : nwalk.reads) bav_this.push_back(q); // cluster the reads // set region to empty, just won't double-check that cluster overlaps regino. No big deal DiscordantClusterMap dmap = DiscordantCluster::clusterReads(bav_this, SeqLib::GenomicRegion(), 37, nullptr); std::vector this_alc; // contruct the index SeqLib::UnalignedSequenceVector usv; assert(c->brv[0].Qname().length()); assert(c->brv[0].Sequence().find("N") == std::string::npos); // here we have to flip if it has (-) alignment to reference. // this is because the pipeline assumes it came from a // de novo assembly, which is PRE alignment. Thus, we don't want // to take the i.Sequeunce directly, as this has been reverse-complemented // BY THE ALIGNER. std::string sss = c->brv[0].Sequence(); if (c->brv[0].ReverseFlag()) SeqLib::rcomplement(sss); usv.push_back({c->brv[0].Qname(), sss, std::string()}); SeqLib::BWAWrapper bw; bw.constructIndex(usv); if (!prefixes.size()) { prefixes.insert("t000"); prefixes.insert("n000"); } this_alc.push_back(AlignedContig(c->brv, prefixes)); AlignedContig * ac = &this_alc.back(); for (auto& kk : ac->m_frag_v) kk.m_max_indel = 20; // align the reads alignReadsToContigs(bw, usv, bav_this, this_alc, ref_genomeAW); ac->assignSupportCoverage(); // dummies ac->splitCoverage(); ac->addDiscordantCluster(dmap); // get teh coverages std::unordered_map covs; std::unordered_map clip_covs; covs["t000"] = &twalk.cov; covs["n000"] = &nwalk.cov; clip_covs["t000"] = &twalk.cov; clip_covs["n000"] = &nwalk.cov; std::vector allbreaks = ac->getAllBreakPoints(false); // false says dont worry about "local" for (auto& i : allbreaks) i.repeatFilter(); for (auto& i : allbreaks) i.addCovs(covs, clip_covs); for (auto& i : allbreaks) i.scoreBreakpoint(8, 2.5, 7, 3, 0); for (auto& i : allbreaks) i.setRefAlt(ref_genomeAW, ref_genome_viral_dummy); double region_width = 0; for (auto& i : trimmed_regions) region_width += i.width(); double cov = (double)bav_this.size() / region_width * 250; // print message if (cov > 100 || num_to_run % 1000 == 0) { std::stringstream ss; #ifndef __APPLE__ ss << SeqLib::displayRuntime(start); #endif std::cerr << "..read " << SeqLib::AddCommas(bav_this.size()) << " reads from " << trimmed_regions.size() << " region starting at " << trimmed_regions.at(0) << " Queue-left " << SeqLib::AddCommas(num_to_run) << " " << ss.str() << std::endl; } std::stringstream outr; bool no_reads = true; for (auto& i : allbreaks) outr << i.toFileString(no_reads) << std::endl; // MUTEX LOCKED //////////////////////////////////// pthread_mutex_lock(&snow_lock); --num_to_run; //all_align << (*ac) << std::endl; os_allbps << outr.str(); //////////////////////////////////// // MUTEX UNLOCKED //////////////////////////////////// pthread_mutex_unlock(&snow_lock); return true; } void AssemblyBamWalker::walkDiscovar() { //std::string rules = "global@!hardclip;!duplicate;!qcfail;phred[4,100];length[25,1000]%region@WG%!isize[0,1200];mapq[0,1000]%clip[5,1000]%ins[1,1000];mapq[0,100]%del[1,1000];mapq[1,1000]%mapped;!mate_mapped;mapq[1,1000]%mate_mapped;!mapped"; std::string rules = "{\"global\" : {\"duplicate\" : false, \"qcfail\" : false}, \"\" : { \"rules\" : [{\"isize\" : [MINS,0]},{\"rr\" : true},{\"ff\" : true}, {\"rf\" : true}, {\"ic\" : true}, {\"clip\" : 5, \"phred\" : 4}, {\"ins\" : true}, {\"del\" : true}, {\"mapped\": true , \"mate_mapped\" : false}, {\"mate_mapped\" : true, \"mapped\" : false}]}}"; rules.replace(rules.find("MINS"), 4, std::to_string(MIN_ISIZE_FOR_DISC)); mr = new SeqLib::Filter::ReadFilterCollection(rules, SeqLib::BamHeader()); f = findex; tt = tbam; nn = nbam; nnindex = nindex; ttindex = tindex; SnowmanUtils::fopen(id + ".alignments.txt.gz", all_align); SnowmanUtils::fopen(id + ".bps.txt.gz", os_allbps); os_allbps << BreakPoint::header() << std::endl; SeqLib::BamRecord r; std::cerr << "...starting to walk assembly BAM" << std::endl; std::vector ac_vec; std::unordered_map map; SeqLib::BamRecordVector brv; SeqLib::GenomicRegionVector regions; // start the timer #ifndef __APPLE__ clock_gettime(CLOCK_MONOTONIC, &start); #endif // open the mutex if (pthread_mutex_init(&snow_lock, NULL) != 0) { printf("\n mutex init failed\n"); return; } // Create the queue and consumer (worker) threads wqueue queue; std::vector*> threadqueue; for (int i = 0; i < numThreads; i++) { ConsumerThread* threadr = new ConsumerThread(queue, true); threadr->start(); threadqueue.push_back(threadr); } int count = 0, acc_count = 0; std::string curr_name; std::vector tmp_queue; // open ref genome for extracting sequences ref_genomeAW = new SeqLib::RefGenome(refGenome); int max_mapq = 0, max_len = 0; while(GetNextRecord(r)) { if (++count % 200000 == 0) std::cerr << "...checking contig " << SeqLib::AddCommas(count) << " to see if we should parse" << std::endl; // give each contig a unique prefix //r.SetQname("contig_" + r.Qname()); // first one if (curr_name.empty()) curr_name = r.Qname(); // add the MC tag if (r.ChrID() < br->n_targets && r.ChrID() >= 0) { r.AddZTag("MC", std::string(br->target_name[r.ChrID()])); } else continue; // add to existing if (curr_name == r.Qname()) { SeqLib::GenomicRegion gr = r.asGenomicRegion(); gr.Pad(100); regions.push_back(gr); brv.push_back(r); max_mapq = std::max(r.MapQuality(), max_mapq); max_len = std::max(r.Length(), max_len); } else { #ifdef QNAME if (brv.size()) if (brv[0].Qname() == QNAME || true) { std::cerr << " found it here -- checking " << std::endl; std::cerr << " brv.size() " << brv.size() << " regions.size() " << regions.size() << " brv.CigarSize() " << brv[0].CigarSize() << " brv.Length() " << brv[0].Length() << " max_len " << max_len << " max_mapq " << max_mapq << std::endl; } #endif if (true || __good_contig(brv, regions, max_len, max_mapq)) { ++acc_count; //AssemblyWalkerWorkItem * item = new AssemblyWalkerWorkItem(brv, findex, tindex, nindex, regions, tbam, nbam); AssemblyWalkerWorkItem * item = new AssemblyWalkerWorkItem(new ContigElement(brv, regions)); #ifdef QNAME if (brv[0].Qname() == QNAME) std::cerr << " found it here -- adding " << std::endl; #endif tmp_queue.push_back(item); regions.clear(); } // prepare the next one brv.clear(); brv.push_back(r); curr_name = r.Qname(); regions.clear(); SeqLib::GenomicRegion gr = r.asGenomicRegion(); gr.Pad(1000); regions.push_back(gr); max_mapq = r.MapQuality(); max_len = r.Length(); } } // add the last one if (__good_contig(brv, regions, max_len, max_mapq)) { AssemblyWalkerWorkItem * item = new AssemblyWalkerWorkItem(new ContigElement(brv, regions)); tmp_queue.push_back(item); } std::cerr << "...done adding " << SeqLib::AddCommas(tmp_queue.size()) << " contigs. Firing up " << numThreads << " re-alignment threads" << std::endl; num_to_run = tmp_queue.size(); if (!num_to_run) return; for (auto& i : tmp_queue) queue.add(i); // wait for the threads to finish for (int i = 0; i < numThreads; i++) threadqueue[i]->join(); all_align.close(); os_allbps.close(); } ================================================ FILE: src/svabautils/AssemblyBamWalker.h ================================================ #ifndef SNOWMAN_ASSEMBLY_BAM_WALKER_H__ #define SNOWMAN_ASSEMBLY_BAM_WALKER_H__ #include "SeqLib/BamReader.h" #include "AlignedContig2.h" #include "SnowmanBamWalker.h" /** Walk along a BAM file generated from a de novo assembly, * realigned to the genome (preferably by BWA-MEM). */ class AssemblyBamWalker: public SeqLib::BamReader { public: /** Construct a new read-only walker to move along the assembly bam * @param in File path of the assembly BAM */ AssemblyBamWalker() {} /** Move along a BAM file generated from Discovar and make the AlignedContigs */ void walkDiscovar(); void sendThread(); int numThreads = 1; faidx_t * findex = nullptr; }; struct ContigElement { SeqLib::BamRecordVector brv; SeqLib::GenomicRegionVector regions; ContigElement(const SeqLib::BamRecordVector& b, const SeqLib::GenomicRegionVector& r) : brv(b), regions(r) {} }; //bool runAC(SnowTools::BamReadVector& brv, faidx_t * f, std::shared_ptr pt, std::shared_ptr pn, // const std::string& t, const std::string& n, const SnowTools::GenomicRegionVector& regions); bool runAC(const ContigElement * c); class AssemblyWalkerWorkItem { private: //SnowTools::BamReadVector m_brv; //faidx_t * m_findex; //std::shared_ptr m_tindex, m_nindex; //SnowTools::GenomicRegionVector m_regions; //std::string m_t, m_n; ContigElement * m_contig; public: //AssemblyWalkerWorkItem(SnowTools::BamReadVector& brv, faidx_t *f, std::shared_ptr pt, std::shared_ptr pn, // SnowTools::GenomicRegionVector r, // const std::string& t, const std::string& n) //: m_brv(brv), m_findex(f), m_tindex(pt), m_nindex(pn), m_regions(r), m_t(t), m_n(n) {} AssemblyWalkerWorkItem(ContigElement* c) : m_contig(c) {} //bool run() { return runAC(m_brv, m_findex, m_tindex, m_nindex, m_t, m_n, m_regions); } bool run() { return runAC(m_contig); } ~AssemblyWalkerWorkItem() { delete m_contig; } }; #endif ================================================ FILE: src/svabautils/BamSplitter.cpp ================================================ #include "BamSplitter.h" #include "htslib/khash.h" #define PRINT_MOD 200000 void BamSplitter::splitBam() { assert(m_writers.size() == m_frac.size()); std::vector csum; double cs = 0; for (auto& i : m_frac) { cs += i; csum.push_back(cs); } SeqLib::BamRecord r; std::cerr << "**Starting to split BAM " << __startMessage(); size_t countr = 0; std::vector all_counts(m_writers.size(), 0); while (GetNextRecord(r)) { // print a message ++countr; if (countr % PRINT_MOD == 0) std::cerr << "...splitting BAM at position " << r.Brief() << " with sample rate " << csum[0] << " on " << m_writers.size() << " writers " << std::endl; // put in one BAM or another uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(r.Qname().c_str()) ^ m_seed); double hash_val = (double)(k&0xffffff) / 0x1000000; for (size_t i = 0; i < m_writers.size(); ++i) { // decide whether to keep if (hash_val <= csum[i]/*sample_rate*/) { //r.RemoveAllTags(); m_writers[i].WriteRecord(r); ++all_counts[i]; break; } } } } void BamSplitter::fractionateBam(const std::string& outbam, Fractions& f) { std::cerr << "...setting up output fractionated BAM " << outbam << std::endl; SeqLib::BamWriter w; assert(w.Open(outbam)); w.SetHeader(Header()); w.WriteHeader(); //bam_hdr_t * h = bam_hdr_dup(br.get()); //w.SetWriteHeader(h); //w.OpenWriteBam(outbam); f.m_frc.CreateTreeMap(); SeqLib::BamRecord r; std::cerr << "**Starting to fractionate BAM " << __startMessage(); size_t countr = 0; std::vector all_counts(m_writers.size(), 0); while (GetNextRecord(r)) { // print a message ++countr; if (countr % PRINT_MOD == 0) std::cerr << "...fractionating BAM at position " << r.Brief(); SeqLib::GenomicRegion gr(r.ChrID(), r.Position(), r.Position(), '*'); std::vector qid, sid; SeqLib::GRC grc(gr); grc.FindOverlaps(f.m_frc, sid, qid, true); //f.m_frc.findOverlaps(grc, qid, sid, true); /* std::cerr << gr << " qid.size() " << qid.size() << " sid.size() " << sid.size() << std::endl; for (auto& i : qid) std::cerr << " Q: " << i << std::endl; for (auto& i : sid) std::cerr << " S: " << i << std::endl; */ if (!qid.size()) { if (countr % PRINT_MOD == 0) std::cerr << " -- Not in fraction region. Skipping read " << std::endl; continue; } double sample_rate = f.m_frc.at(qid[0]).frac; if (countr % PRINT_MOD == 0) std::cerr << " -- found frac region " << f.m_frc.at(qid[0]) << " w/rate " << sample_rate << std::endl; // put in one BAM or another uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(r.Qname().c_str()) ^ m_seed); double hash_val = (double)(k&0xffffff) / 0x1000000; // keep sampling the read (if sample_rate < 1, just does this once) size_t num_sampled = 0; // how many times has read been sampled std::string qn; while(sample_rate > 0) { // decide whether to keep if (hash_val <= sample_rate) { //r.RemoveAllTags(); // if super-sampling, give unique qname if (num_sampled) { if (qn.empty()) qn = r.Qname(); r.SetQname("S" + std::to_string(num_sampled) + "_" + qn); } // add tag and remove another, if first time seen read if (!num_sampled) { r.RemoveTag("OQ"); // just for compactedness r.AddZTag("RT", std::to_string(sample_rate)); } w.WriteRecord(r); ++num_sampled; } sample_rate = sample_rate - 1; } } } void BamSplitter::setWriters(const std::vector& writers, const std::vector& fracs) { assert(fracs.size() == writers.size()); for (auto& i : writers) { std::cerr << "...setting up BAM: " << i << std::endl; SeqLib::BamWriter w; assert(w.Open(i)); w.SetHeader(Header()); w.WriteHeader(); // bam_hdr_t * h = bam_hdr_dup(br.get()/*header()*/); //w.SetWriteHeader(h); //w.OpenWriteBam(i); m_writers.push_back(w); } m_frac = fracs; } std::string BamSplitter::__startMessage() const { std::stringstream ss; if (m_region.size() == 1) ss << " on region " << m_region[0] << std::endl; else if (m_region.size() == 0) ss << " on WHOLE GENOME" << std::endl; else ss << " on " << m_region.size() << " regions " << std::endl; return ss.str(); } ================================================ FILE: src/svabautils/BamSplitter.h ================================================ #ifndef SNOWMAN_BAM_SPLITTER_H__ #define SNOWMAN_BAM_SPLITTER_H__ #include "SeqLib/BamReader.h" #include "SeqLib/BamWriter.h" #include "Fractions.h" class BamSplitter: public SeqLib::BamReader { public: BamSplitter() {} BamSplitter(uint32_t seed) : m_seed(seed) {} void setWriters(const std::vector& writers, const std::vector& fracs); void splitBam(); void fractionateBam(const std::string& outbam, Fractions& f); private: std::string __startMessage() const; uint32_t m_seed = 0; std::vector m_frac; std::vector m_writers; }; #endif ================================================ FILE: src/svabautils/Fractions.cpp ================================================ #include "Fractions.h" using namespace SeqLib; FracRegion::FracRegion(const std::string& c, const std::string& p1, const std::string& p2, const SeqLib::BamHeader& h, const std::string& f) : SeqLib::GenomicRegion(c, p1, p2, h) { // convert frac to double try { frac = std::stod(f); } catch (...) { std::cerr << "FracRegion::FracRegion - Error converting fraction " << f << " to double " << std::endl; exit(EXIT_FAILURE); } } size_t Fractions::size() const { return m_frc.size(); } std::ostream& operator<<(std::ostream& out, const FracRegion& f) { out << f.chr << ":" << SeqLib::AddCommas(f.pos1) << "-" << SeqLib::AddCommas(f.pos2) << " Frac: " << f.frac; return out; } void Fractions::readFromBed(const std::string& file, const SeqLib::BamHeader& h) { std::ifstream iss(file.c_str()); if (!iss || file.length() == 0) { std::cerr << "BED file does not exist: " << file << std::endl; exit(EXIT_FAILURE); } std::string line; std::string curr_chr = "-1"; while (std::getline(iss, line, '\n')) { size_t counter = 0; std::string chr, pos1, pos2, f; std::istringstream iss_line(line); std::string val; if (line.find("#") == std::string::npos) { while(std::getline(iss_line, val, '\t')) { switch (counter) { case 0 : chr = val; break; case 1 : pos1 = val; break; case 2 : pos2 = val; break; case 3 : f = val; break; } if (counter >= 3) break; ++counter; if (chr != curr_chr) { //std::cerr << "...reading from BED - chr" << chr << std::endl; curr_chr = chr; } } // construct the GenomicRegion FracRegion ff(chr, pos1, pos2, h, f); //if (ff.valid()) { //gr.pad(pad); //m_grv.push_back(gr); m_frc.add(ff); //} //} } // end "keep" conditional } // end main while } ================================================ FILE: src/svabautils/Fractions.h ================================================ #ifndef SNOWMAN_FRACTIONS_H__ #define SNOWMAN_FRACTIONS_H__ #include "SeqLib/GenomicRegionCollection.h" #include "SeqLib/BamHeader.h" #include /** @brief Extension of GenomicRegion with a fraction of reads to keep on an interval * * Used in conjunction with Fractions and used for selectively sub-sampling BAM files. */ class FracRegion : public SeqLib::GenomicRegion { public: FracRegion() {} FracRegion(const std::string& c, const std::string& p1, const std::string& p2, const SeqLib::BamHeader& h, const std::string& f); friend std::ostream& operator<<(std::ostream& out, const FracRegion& f); double frac; }; /** @brief Genomic intervals and associated sampling fractions */ class Fractions { public: Fractions() {} size_t size() const; void readFromBed(const std::string& file, const SeqLib::BamHeader& h) ; SeqLib::GenomicRegionCollection m_frc; private: }; #endif ================================================ FILE: src/svabautils/Makefile.am ================================================ bin_PROGRAMS = svabautils svabautils_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/SuffixTools \ -I$(top_srcdir)/src/SGA/StringGraph \ -I$(top_srcdir)/src/SGA/Algorithm \ -I$(top_srcdir)/src/SGA/SQG \ -I$(top_srcdir)/src/SGA/SGA \ -I$(top_srcdir)/src/Svaba \ -I$(top_srcdir)/SeqLib \ -I$(top_srcdir)/SeqLib/htslib svabautils_LDADD = \ $(top_builddir)/src/SGA/SGA/libsga.a \ $(top_builddir)/src/SGA/StringGraph/libstringgraph.a \ $(top_builddir)/src/SGA/Algorithm/libalgorithm.a \ $(top_builddir)/src/SGA/SuffixTools/libsuffixtools.a \ $(top_builddir)/src/SGA/Bigraph/libbigraph.a \ $(top_builddir)/src/SGA/Util/libutil.a \ $(top_builddir)/src/SGA/SQG/libsqg.a \ $(top_builddir)/SeqLib/src/libseqlib.a \ $(top_builddir)/SeqLib/bwa/libbwa.a \ $(top_builddir)/SeqLib/htslib/libhts.a \ $(top_builddir)/SeqLib/fermi-lite/libfml.a svabautils_LDFLAGS = -pthread -std=c++11 svabautils_SOURCES = snowutils.cpp splitcounter.cpp ../Snowman/BreakPoint2.cpp ../Snowman/AlignedContig2.cpp \ ../Snowman/DiscordantCluster.cpp ../Snowman/DBSnpFilter.cpp ../Snowman/PONFilter.cpp \ ../Snowman/SnowmanUtils.cpp ../Snowman/SnowmanAssemblerEngine.cpp ../Snowman/vcf.cpp ../Snowman/DiscordantRealigner.cpp \ ../Snowman/SnowmanOverlapAlgorithm.cpp ../Snowman/SnowmanASQG.cpp \ ../Snowman/SnowmanAssemble.cpp \ ../Snowman/KmerFilter.cpp ../Snowman/SnowmanBamWalker.cpp \ SeqFrag.cpp SimGenome.cpp BamSplitter.cpp SimTrainerWalker.cpp \ Fractions.cpp ../Snowman/STCoverage.cpp ../Snowman/Histogram.cpp ../Snowman/BamStats.cpp \ PowerLawSim.cpp AssemblyBamWalker.cpp assembly2vcf.cpp ================================================ FILE: src/svabautils/Makefile.in ================================================ # Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = snowmanutils$(EXEEXT) subdir = . DIST_COMMON = $(am__configure_deps) $(srcdir)/../../depcomp \ $(srcdir)/../../install-sh $(srcdir)/../../missing \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/configure ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_snowmanutils_OBJECTS = snowmanutils-snowutils.$(OBJEXT) \ snowmanutils-splitcounter.$(OBJEXT) \ snowmanutils-BreakPoint2.$(OBJEXT) \ snowmanutils-AlignedContig2.$(OBJEXT) \ snowmanutils-DiscordantCluster.$(OBJEXT) \ snowmanutils-DBSnpFilter.$(OBJEXT) \ snowmanutils-PONFilter.$(OBJEXT) \ snowmanutils-SnowmanUtils.$(OBJEXT) \ snowmanutils-SnowmanAssemblerEngine.$(OBJEXT) \ snowmanutils-vcf.$(OBJEXT) \ snowmanutils-DiscordantRealigner.$(OBJEXT) \ snowmanutils-SnowmanOverlapAlgorithm.$(OBJEXT) \ snowmanutils-SnowmanASQG.$(OBJEXT) \ snowmanutils-SnowmanAssemble.$(OBJEXT) \ snowmanutils-KmerFilter.$(OBJEXT) \ snowmanutils-SnowmanBamWalker.$(OBJEXT) \ snowmanutils-SeqFrag.$(OBJEXT) \ snowmanutils-SimGenome.$(OBJEXT) \ snowmanutils-BamSplitter.$(OBJEXT) \ snowmanutils-SimTrainerWalker.$(OBJEXT) \ snowmanutils-Fractions.$(OBJEXT) \ snowmanutils-STCoverage.$(OBJEXT) \ snowmanutils-Histogram.$(OBJEXT) \ snowmanutils-BamStats.$(OBJEXT) \ snowmanutils-PowerLawSim.$(OBJEXT) \ snowmanutils-AssemblyBamWalker.$(OBJEXT) \ snowmanutils-assembly2vcf.$(OBJEXT) snowmanutils_OBJECTS = $(am_snowmanutils_OBJECTS) snowmanutils_DEPENDENCIES = $(top_builddir)/src/SGA/SGA/libsga.a \ $(top_builddir)/src/SGA/StringGraph/libstringgraph.a \ $(top_builddir)/src/SGA/Algorithm/libalgorithm.a \ $(top_builddir)/src/SGA/SuffixTools/libsuffixtools.a \ $(top_builddir)/src/SGA/Bigraph/libbigraph.a \ $(top_builddir)/src/SGA/Util/libutil.a \ $(top_builddir)/src/SGA/SQG/libsqg.a \ $(top_builddir)/SeqLib/src/libseqlib.a \ $(top_builddir)/SeqLib/bwa/libbwa.a \ $(top_builddir)/SeqLib/htslib/libhts.a \ $(top_builddir)/SeqLib/fermi-lite/libfml.a snowmanutils_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(snowmanutils_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/../../depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(snowmanutils_SOURCES) DIST_SOURCES = $(snowmanutils_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CXXFLAGS = @AM_CXXFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ snowmanutils_CPPFLAGS = \ -I$(top_srcdir)/src/SGA/Util \ -I$(top_srcdir)/src/SGA/Bigraph \ -I$(top_srcdir)/src/SGA/SuffixTools \ -I$(top_srcdir)/src/SGA/StringGraph \ -I$(top_srcdir)/src/SGA/Algorithm \ -I$(top_srcdir)/src/SGA/SQG \ -I$(top_srcdir)/src/SGA/SGA \ -I$(top_srcdir)/src/Snowman \ -I$(top_srcdir)/SeqLib \ -I$(top_srcdir)/SeqLib/htslib snowmanutils_LDADD = \ $(top_builddir)/src/SGA/SGA/libsga.a \ $(top_builddir)/src/SGA/StringGraph/libstringgraph.a \ $(top_builddir)/src/SGA/Algorithm/libalgorithm.a \ $(top_builddir)/src/SGA/SuffixTools/libsuffixtools.a \ $(top_builddir)/src/SGA/Bigraph/libbigraph.a \ $(top_builddir)/src/SGA/Util/libutil.a \ $(top_builddir)/src/SGA/SQG/libsqg.a \ $(top_builddir)/SeqLib/src/libseqlib.a \ $(top_builddir)/SeqLib/bwa/libbwa.a \ $(top_builddir)/SeqLib/htslib/libhts.a \ $(top_builddir)/SeqLib/fermi-lite/libfml.a snowmanutils_LDFLAGS = -pthread -std=c++11 snowmanutils_SOURCES = snowutils.cpp splitcounter.cpp ../Snowman/BreakPoint2.cpp ../Snowman/AlignedContig2.cpp \ ../Snowman/DiscordantCluster.cpp ../Snowman/DBSnpFilter.cpp ../Snowman/PONFilter.cpp \ ../Snowman/SnowmanUtils.cpp ../Snowman/SnowmanAssemblerEngine.cpp ../Snowman/vcf.cpp ../Snowman/DiscordantRealigner.cpp \ ../Snowman/SnowmanOverlapAlgorithm.cpp ../Snowman/SnowmanASQG.cpp \ ../Snowman/SnowmanAssemble.cpp \ ../Snowman/KmerFilter.cpp ../Snowman/SnowmanBamWalker.cpp \ SeqFrag.cpp SimGenome.cpp BamSplitter.cpp SimTrainerWalker.cpp \ Fractions.cpp ../Snowman/STCoverage.cpp ../Snowman/Histogram.cpp ../Snowman/BamStats.cpp \ PowerLawSim.cpp AssemblyBamWalker.cpp assembly2vcf.cpp all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) snowmanutils$(EXEEXT): $(snowmanutils_OBJECTS) $(snowmanutils_DEPENDENCIES) @rm -f snowmanutils$(EXEEXT) $(snowmanutils_LINK) $(snowmanutils_OBJECTS) $(snowmanutils_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-AlignedContig2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-AssemblyBamWalker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-BamSplitter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-BamStats.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-BreakPoint2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-DBSnpFilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-DiscordantCluster.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-DiscordantRealigner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-Fractions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-Histogram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-KmerFilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-PONFilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-PowerLawSim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-STCoverage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SeqFrag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SimGenome.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SimTrainerWalker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SnowmanASQG.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SnowmanAssemble.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SnowmanAssemblerEngine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SnowmanBamWalker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SnowmanOverlapAlgorithm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-SnowmanUtils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-assembly2vcf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-snowutils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-splitcounter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snowmanutils-vcf.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` snowmanutils-snowutils.o: snowutils.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-snowutils.o -MD -MP -MF $(DEPDIR)/snowmanutils-snowutils.Tpo -c -o snowmanutils-snowutils.o `test -f 'snowutils.cpp' || echo '$(srcdir)/'`snowutils.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-snowutils.Tpo $(DEPDIR)/snowmanutils-snowutils.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snowutils.cpp' object='snowmanutils-snowutils.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-snowutils.o `test -f 'snowutils.cpp' || echo '$(srcdir)/'`snowutils.cpp snowmanutils-snowutils.obj: snowutils.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-snowutils.obj -MD -MP -MF $(DEPDIR)/snowmanutils-snowutils.Tpo -c -o snowmanutils-snowutils.obj `if test -f 'snowutils.cpp'; then $(CYGPATH_W) 'snowutils.cpp'; else $(CYGPATH_W) '$(srcdir)/snowutils.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-snowutils.Tpo $(DEPDIR)/snowmanutils-snowutils.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snowutils.cpp' object='snowmanutils-snowutils.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-snowutils.obj `if test -f 'snowutils.cpp'; then $(CYGPATH_W) 'snowutils.cpp'; else $(CYGPATH_W) '$(srcdir)/snowutils.cpp'; fi` snowmanutils-splitcounter.o: splitcounter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-splitcounter.o -MD -MP -MF $(DEPDIR)/snowmanutils-splitcounter.Tpo -c -o snowmanutils-splitcounter.o `test -f 'splitcounter.cpp' || echo '$(srcdir)/'`splitcounter.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-splitcounter.Tpo $(DEPDIR)/snowmanutils-splitcounter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='splitcounter.cpp' object='snowmanutils-splitcounter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-splitcounter.o `test -f 'splitcounter.cpp' || echo '$(srcdir)/'`splitcounter.cpp snowmanutils-splitcounter.obj: splitcounter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-splitcounter.obj -MD -MP -MF $(DEPDIR)/snowmanutils-splitcounter.Tpo -c -o snowmanutils-splitcounter.obj `if test -f 'splitcounter.cpp'; then $(CYGPATH_W) 'splitcounter.cpp'; else $(CYGPATH_W) '$(srcdir)/splitcounter.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-splitcounter.Tpo $(DEPDIR)/snowmanutils-splitcounter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='splitcounter.cpp' object='snowmanutils-splitcounter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-splitcounter.obj `if test -f 'splitcounter.cpp'; then $(CYGPATH_W) 'splitcounter.cpp'; else $(CYGPATH_W) '$(srcdir)/splitcounter.cpp'; fi` snowmanutils-BreakPoint2.o: ../Snowman/BreakPoint2.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-BreakPoint2.o -MD -MP -MF $(DEPDIR)/snowmanutils-BreakPoint2.Tpo -c -o snowmanutils-BreakPoint2.o `test -f '../Snowman/BreakPoint2.cpp' || echo '$(srcdir)/'`../Snowman/BreakPoint2.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-BreakPoint2.Tpo $(DEPDIR)/snowmanutils-BreakPoint2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/BreakPoint2.cpp' object='snowmanutils-BreakPoint2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-BreakPoint2.o `test -f '../Snowman/BreakPoint2.cpp' || echo '$(srcdir)/'`../Snowman/BreakPoint2.cpp snowmanutils-BreakPoint2.obj: ../Snowman/BreakPoint2.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-BreakPoint2.obj -MD -MP -MF $(DEPDIR)/snowmanutils-BreakPoint2.Tpo -c -o snowmanutils-BreakPoint2.obj `if test -f '../Snowman/BreakPoint2.cpp'; then $(CYGPATH_W) '../Snowman/BreakPoint2.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/BreakPoint2.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-BreakPoint2.Tpo $(DEPDIR)/snowmanutils-BreakPoint2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/BreakPoint2.cpp' object='snowmanutils-BreakPoint2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-BreakPoint2.obj `if test -f '../Snowman/BreakPoint2.cpp'; then $(CYGPATH_W) '../Snowman/BreakPoint2.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/BreakPoint2.cpp'; fi` snowmanutils-AlignedContig2.o: ../Snowman/AlignedContig2.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-AlignedContig2.o -MD -MP -MF $(DEPDIR)/snowmanutils-AlignedContig2.Tpo -c -o snowmanutils-AlignedContig2.o `test -f '../Snowman/AlignedContig2.cpp' || echo '$(srcdir)/'`../Snowman/AlignedContig2.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-AlignedContig2.Tpo $(DEPDIR)/snowmanutils-AlignedContig2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/AlignedContig2.cpp' object='snowmanutils-AlignedContig2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-AlignedContig2.o `test -f '../Snowman/AlignedContig2.cpp' || echo '$(srcdir)/'`../Snowman/AlignedContig2.cpp snowmanutils-AlignedContig2.obj: ../Snowman/AlignedContig2.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-AlignedContig2.obj -MD -MP -MF $(DEPDIR)/snowmanutils-AlignedContig2.Tpo -c -o snowmanutils-AlignedContig2.obj `if test -f '../Snowman/AlignedContig2.cpp'; then $(CYGPATH_W) '../Snowman/AlignedContig2.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/AlignedContig2.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-AlignedContig2.Tpo $(DEPDIR)/snowmanutils-AlignedContig2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/AlignedContig2.cpp' object='snowmanutils-AlignedContig2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-AlignedContig2.obj `if test -f '../Snowman/AlignedContig2.cpp'; then $(CYGPATH_W) '../Snowman/AlignedContig2.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/AlignedContig2.cpp'; fi` snowmanutils-DiscordantCluster.o: ../Snowman/DiscordantCluster.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-DiscordantCluster.o -MD -MP -MF $(DEPDIR)/snowmanutils-DiscordantCluster.Tpo -c -o snowmanutils-DiscordantCluster.o `test -f '../Snowman/DiscordantCluster.cpp' || echo '$(srcdir)/'`../Snowman/DiscordantCluster.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-DiscordantCluster.Tpo $(DEPDIR)/snowmanutils-DiscordantCluster.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/DiscordantCluster.cpp' object='snowmanutils-DiscordantCluster.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-DiscordantCluster.o `test -f '../Snowman/DiscordantCluster.cpp' || echo '$(srcdir)/'`../Snowman/DiscordantCluster.cpp snowmanutils-DiscordantCluster.obj: ../Snowman/DiscordantCluster.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-DiscordantCluster.obj -MD -MP -MF $(DEPDIR)/snowmanutils-DiscordantCluster.Tpo -c -o snowmanutils-DiscordantCluster.obj `if test -f '../Snowman/DiscordantCluster.cpp'; then $(CYGPATH_W) '../Snowman/DiscordantCluster.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/DiscordantCluster.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-DiscordantCluster.Tpo $(DEPDIR)/snowmanutils-DiscordantCluster.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/DiscordantCluster.cpp' object='snowmanutils-DiscordantCluster.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-DiscordantCluster.obj `if test -f '../Snowman/DiscordantCluster.cpp'; then $(CYGPATH_W) '../Snowman/DiscordantCluster.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/DiscordantCluster.cpp'; fi` snowmanutils-DBSnpFilter.o: ../Snowman/DBSnpFilter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-DBSnpFilter.o -MD -MP -MF $(DEPDIR)/snowmanutils-DBSnpFilter.Tpo -c -o snowmanutils-DBSnpFilter.o `test -f '../Snowman/DBSnpFilter.cpp' || echo '$(srcdir)/'`../Snowman/DBSnpFilter.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-DBSnpFilter.Tpo $(DEPDIR)/snowmanutils-DBSnpFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/DBSnpFilter.cpp' object='snowmanutils-DBSnpFilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-DBSnpFilter.o `test -f '../Snowman/DBSnpFilter.cpp' || echo '$(srcdir)/'`../Snowman/DBSnpFilter.cpp snowmanutils-DBSnpFilter.obj: ../Snowman/DBSnpFilter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-DBSnpFilter.obj -MD -MP -MF $(DEPDIR)/snowmanutils-DBSnpFilter.Tpo -c -o snowmanutils-DBSnpFilter.obj `if test -f '../Snowman/DBSnpFilter.cpp'; then $(CYGPATH_W) '../Snowman/DBSnpFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/DBSnpFilter.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-DBSnpFilter.Tpo $(DEPDIR)/snowmanutils-DBSnpFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/DBSnpFilter.cpp' object='snowmanutils-DBSnpFilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-DBSnpFilter.obj `if test -f '../Snowman/DBSnpFilter.cpp'; then $(CYGPATH_W) '../Snowman/DBSnpFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/DBSnpFilter.cpp'; fi` snowmanutils-PONFilter.o: ../Snowman/PONFilter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-PONFilter.o -MD -MP -MF $(DEPDIR)/snowmanutils-PONFilter.Tpo -c -o snowmanutils-PONFilter.o `test -f '../Snowman/PONFilter.cpp' || echo '$(srcdir)/'`../Snowman/PONFilter.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-PONFilter.Tpo $(DEPDIR)/snowmanutils-PONFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/PONFilter.cpp' object='snowmanutils-PONFilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-PONFilter.o `test -f '../Snowman/PONFilter.cpp' || echo '$(srcdir)/'`../Snowman/PONFilter.cpp snowmanutils-PONFilter.obj: ../Snowman/PONFilter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-PONFilter.obj -MD -MP -MF $(DEPDIR)/snowmanutils-PONFilter.Tpo -c -o snowmanutils-PONFilter.obj `if test -f '../Snowman/PONFilter.cpp'; then $(CYGPATH_W) '../Snowman/PONFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/PONFilter.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-PONFilter.Tpo $(DEPDIR)/snowmanutils-PONFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/PONFilter.cpp' object='snowmanutils-PONFilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-PONFilter.obj `if test -f '../Snowman/PONFilter.cpp'; then $(CYGPATH_W) '../Snowman/PONFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/PONFilter.cpp'; fi` snowmanutils-SnowmanUtils.o: ../Snowman/SnowmanUtils.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanUtils.o -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanUtils.Tpo -c -o snowmanutils-SnowmanUtils.o `test -f '../Snowman/SnowmanUtils.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanUtils.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanUtils.Tpo $(DEPDIR)/snowmanutils-SnowmanUtils.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanUtils.cpp' object='snowmanutils-SnowmanUtils.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanUtils.o `test -f '../Snowman/SnowmanUtils.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanUtils.cpp snowmanutils-SnowmanUtils.obj: ../Snowman/SnowmanUtils.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanUtils.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanUtils.Tpo -c -o snowmanutils-SnowmanUtils.obj `if test -f '../Snowman/SnowmanUtils.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanUtils.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanUtils.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanUtils.Tpo $(DEPDIR)/snowmanutils-SnowmanUtils.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanUtils.cpp' object='snowmanutils-SnowmanUtils.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanUtils.obj `if test -f '../Snowman/SnowmanUtils.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanUtils.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanUtils.cpp'; fi` snowmanutils-SnowmanAssemblerEngine.o: ../Snowman/SnowmanAssemblerEngine.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanAssemblerEngine.o -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanAssemblerEngine.Tpo -c -o snowmanutils-SnowmanAssemblerEngine.o `test -f '../Snowman/SnowmanAssemblerEngine.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanAssemblerEngine.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanAssemblerEngine.Tpo $(DEPDIR)/snowmanutils-SnowmanAssemblerEngine.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanAssemblerEngine.cpp' object='snowmanutils-SnowmanAssemblerEngine.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanAssemblerEngine.o `test -f '../Snowman/SnowmanAssemblerEngine.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanAssemblerEngine.cpp snowmanutils-SnowmanAssemblerEngine.obj: ../Snowman/SnowmanAssemblerEngine.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanAssemblerEngine.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanAssemblerEngine.Tpo -c -o snowmanutils-SnowmanAssemblerEngine.obj `if test -f '../Snowman/SnowmanAssemblerEngine.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanAssemblerEngine.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanAssemblerEngine.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanAssemblerEngine.Tpo $(DEPDIR)/snowmanutils-SnowmanAssemblerEngine.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanAssemblerEngine.cpp' object='snowmanutils-SnowmanAssemblerEngine.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanAssemblerEngine.obj `if test -f '../Snowman/SnowmanAssemblerEngine.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanAssemblerEngine.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanAssemblerEngine.cpp'; fi` snowmanutils-vcf.o: ../Snowman/vcf.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-vcf.o -MD -MP -MF $(DEPDIR)/snowmanutils-vcf.Tpo -c -o snowmanutils-vcf.o `test -f '../Snowman/vcf.cpp' || echo '$(srcdir)/'`../Snowman/vcf.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-vcf.Tpo $(DEPDIR)/snowmanutils-vcf.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/vcf.cpp' object='snowmanutils-vcf.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-vcf.o `test -f '../Snowman/vcf.cpp' || echo '$(srcdir)/'`../Snowman/vcf.cpp snowmanutils-vcf.obj: ../Snowman/vcf.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-vcf.obj -MD -MP -MF $(DEPDIR)/snowmanutils-vcf.Tpo -c -o snowmanutils-vcf.obj `if test -f '../Snowman/vcf.cpp'; then $(CYGPATH_W) '../Snowman/vcf.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/vcf.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-vcf.Tpo $(DEPDIR)/snowmanutils-vcf.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/vcf.cpp' object='snowmanutils-vcf.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-vcf.obj `if test -f '../Snowman/vcf.cpp'; then $(CYGPATH_W) '../Snowman/vcf.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/vcf.cpp'; fi` snowmanutils-DiscordantRealigner.o: ../Snowman/DiscordantRealigner.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-DiscordantRealigner.o -MD -MP -MF $(DEPDIR)/snowmanutils-DiscordantRealigner.Tpo -c -o snowmanutils-DiscordantRealigner.o `test -f '../Snowman/DiscordantRealigner.cpp' || echo '$(srcdir)/'`../Snowman/DiscordantRealigner.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-DiscordantRealigner.Tpo $(DEPDIR)/snowmanutils-DiscordantRealigner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/DiscordantRealigner.cpp' object='snowmanutils-DiscordantRealigner.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-DiscordantRealigner.o `test -f '../Snowman/DiscordantRealigner.cpp' || echo '$(srcdir)/'`../Snowman/DiscordantRealigner.cpp snowmanutils-DiscordantRealigner.obj: ../Snowman/DiscordantRealigner.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-DiscordantRealigner.obj -MD -MP -MF $(DEPDIR)/snowmanutils-DiscordantRealigner.Tpo -c -o snowmanutils-DiscordantRealigner.obj `if test -f '../Snowman/DiscordantRealigner.cpp'; then $(CYGPATH_W) '../Snowman/DiscordantRealigner.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/DiscordantRealigner.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-DiscordantRealigner.Tpo $(DEPDIR)/snowmanutils-DiscordantRealigner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/DiscordantRealigner.cpp' object='snowmanutils-DiscordantRealigner.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-DiscordantRealigner.obj `if test -f '../Snowman/DiscordantRealigner.cpp'; then $(CYGPATH_W) '../Snowman/DiscordantRealigner.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/DiscordantRealigner.cpp'; fi` snowmanutils-SnowmanOverlapAlgorithm.o: ../Snowman/SnowmanOverlapAlgorithm.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanOverlapAlgorithm.o -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanOverlapAlgorithm.Tpo -c -o snowmanutils-SnowmanOverlapAlgorithm.o `test -f '../Snowman/SnowmanOverlapAlgorithm.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanOverlapAlgorithm.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanOverlapAlgorithm.Tpo $(DEPDIR)/snowmanutils-SnowmanOverlapAlgorithm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanOverlapAlgorithm.cpp' object='snowmanutils-SnowmanOverlapAlgorithm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanOverlapAlgorithm.o `test -f '../Snowman/SnowmanOverlapAlgorithm.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanOverlapAlgorithm.cpp snowmanutils-SnowmanOverlapAlgorithm.obj: ../Snowman/SnowmanOverlapAlgorithm.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanOverlapAlgorithm.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanOverlapAlgorithm.Tpo -c -o snowmanutils-SnowmanOverlapAlgorithm.obj `if test -f '../Snowman/SnowmanOverlapAlgorithm.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanOverlapAlgorithm.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanOverlapAlgorithm.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanOverlapAlgorithm.Tpo $(DEPDIR)/snowmanutils-SnowmanOverlapAlgorithm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanOverlapAlgorithm.cpp' object='snowmanutils-SnowmanOverlapAlgorithm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanOverlapAlgorithm.obj `if test -f '../Snowman/SnowmanOverlapAlgorithm.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanOverlapAlgorithm.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanOverlapAlgorithm.cpp'; fi` snowmanutils-SnowmanASQG.o: ../Snowman/SnowmanASQG.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanASQG.o -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanASQG.Tpo -c -o snowmanutils-SnowmanASQG.o `test -f '../Snowman/SnowmanASQG.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanASQG.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanASQG.Tpo $(DEPDIR)/snowmanutils-SnowmanASQG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanASQG.cpp' object='snowmanutils-SnowmanASQG.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanASQG.o `test -f '../Snowman/SnowmanASQG.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanASQG.cpp snowmanutils-SnowmanASQG.obj: ../Snowman/SnowmanASQG.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanASQG.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanASQG.Tpo -c -o snowmanutils-SnowmanASQG.obj `if test -f '../Snowman/SnowmanASQG.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanASQG.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanASQG.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanASQG.Tpo $(DEPDIR)/snowmanutils-SnowmanASQG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanASQG.cpp' object='snowmanutils-SnowmanASQG.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanASQG.obj `if test -f '../Snowman/SnowmanASQG.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanASQG.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanASQG.cpp'; fi` snowmanutils-SnowmanAssemble.o: ../Snowman/SnowmanAssemble.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanAssemble.o -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanAssemble.Tpo -c -o snowmanutils-SnowmanAssemble.o `test -f '../Snowman/SnowmanAssemble.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanAssemble.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanAssemble.Tpo $(DEPDIR)/snowmanutils-SnowmanAssemble.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanAssemble.cpp' object='snowmanutils-SnowmanAssemble.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanAssemble.o `test -f '../Snowman/SnowmanAssemble.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanAssemble.cpp snowmanutils-SnowmanAssemble.obj: ../Snowman/SnowmanAssemble.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanAssemble.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanAssemble.Tpo -c -o snowmanutils-SnowmanAssemble.obj `if test -f '../Snowman/SnowmanAssemble.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanAssemble.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanAssemble.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanAssemble.Tpo $(DEPDIR)/snowmanutils-SnowmanAssemble.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanAssemble.cpp' object='snowmanutils-SnowmanAssemble.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanAssemble.obj `if test -f '../Snowman/SnowmanAssemble.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanAssemble.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanAssemble.cpp'; fi` snowmanutils-KmerFilter.o: ../Snowman/KmerFilter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-KmerFilter.o -MD -MP -MF $(DEPDIR)/snowmanutils-KmerFilter.Tpo -c -o snowmanutils-KmerFilter.o `test -f '../Snowman/KmerFilter.cpp' || echo '$(srcdir)/'`../Snowman/KmerFilter.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-KmerFilter.Tpo $(DEPDIR)/snowmanutils-KmerFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/KmerFilter.cpp' object='snowmanutils-KmerFilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-KmerFilter.o `test -f '../Snowman/KmerFilter.cpp' || echo '$(srcdir)/'`../Snowman/KmerFilter.cpp snowmanutils-KmerFilter.obj: ../Snowman/KmerFilter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-KmerFilter.obj -MD -MP -MF $(DEPDIR)/snowmanutils-KmerFilter.Tpo -c -o snowmanutils-KmerFilter.obj `if test -f '../Snowman/KmerFilter.cpp'; then $(CYGPATH_W) '../Snowman/KmerFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/KmerFilter.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-KmerFilter.Tpo $(DEPDIR)/snowmanutils-KmerFilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/KmerFilter.cpp' object='snowmanutils-KmerFilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-KmerFilter.obj `if test -f '../Snowman/KmerFilter.cpp'; then $(CYGPATH_W) '../Snowman/KmerFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/KmerFilter.cpp'; fi` snowmanutils-SnowmanBamWalker.o: ../Snowman/SnowmanBamWalker.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanBamWalker.o -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanBamWalker.Tpo -c -o snowmanutils-SnowmanBamWalker.o `test -f '../Snowman/SnowmanBamWalker.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanBamWalker.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanBamWalker.Tpo $(DEPDIR)/snowmanutils-SnowmanBamWalker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanBamWalker.cpp' object='snowmanutils-SnowmanBamWalker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanBamWalker.o `test -f '../Snowman/SnowmanBamWalker.cpp' || echo '$(srcdir)/'`../Snowman/SnowmanBamWalker.cpp snowmanutils-SnowmanBamWalker.obj: ../Snowman/SnowmanBamWalker.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SnowmanBamWalker.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SnowmanBamWalker.Tpo -c -o snowmanutils-SnowmanBamWalker.obj `if test -f '../Snowman/SnowmanBamWalker.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanBamWalker.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanBamWalker.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SnowmanBamWalker.Tpo $(DEPDIR)/snowmanutils-SnowmanBamWalker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/SnowmanBamWalker.cpp' object='snowmanutils-SnowmanBamWalker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SnowmanBamWalker.obj `if test -f '../Snowman/SnowmanBamWalker.cpp'; then $(CYGPATH_W) '../Snowman/SnowmanBamWalker.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/SnowmanBamWalker.cpp'; fi` snowmanutils-SeqFrag.o: SeqFrag.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SeqFrag.o -MD -MP -MF $(DEPDIR)/snowmanutils-SeqFrag.Tpo -c -o snowmanutils-SeqFrag.o `test -f 'SeqFrag.cpp' || echo '$(srcdir)/'`SeqFrag.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SeqFrag.Tpo $(DEPDIR)/snowmanutils-SeqFrag.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SeqFrag.cpp' object='snowmanutils-SeqFrag.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SeqFrag.o `test -f 'SeqFrag.cpp' || echo '$(srcdir)/'`SeqFrag.cpp snowmanutils-SeqFrag.obj: SeqFrag.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SeqFrag.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SeqFrag.Tpo -c -o snowmanutils-SeqFrag.obj `if test -f 'SeqFrag.cpp'; then $(CYGPATH_W) 'SeqFrag.cpp'; else $(CYGPATH_W) '$(srcdir)/SeqFrag.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SeqFrag.Tpo $(DEPDIR)/snowmanutils-SeqFrag.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SeqFrag.cpp' object='snowmanutils-SeqFrag.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SeqFrag.obj `if test -f 'SeqFrag.cpp'; then $(CYGPATH_W) 'SeqFrag.cpp'; else $(CYGPATH_W) '$(srcdir)/SeqFrag.cpp'; fi` snowmanutils-SimGenome.o: SimGenome.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SimGenome.o -MD -MP -MF $(DEPDIR)/snowmanutils-SimGenome.Tpo -c -o snowmanutils-SimGenome.o `test -f 'SimGenome.cpp' || echo '$(srcdir)/'`SimGenome.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SimGenome.Tpo $(DEPDIR)/snowmanutils-SimGenome.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SimGenome.cpp' object='snowmanutils-SimGenome.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SimGenome.o `test -f 'SimGenome.cpp' || echo '$(srcdir)/'`SimGenome.cpp snowmanutils-SimGenome.obj: SimGenome.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SimGenome.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SimGenome.Tpo -c -o snowmanutils-SimGenome.obj `if test -f 'SimGenome.cpp'; then $(CYGPATH_W) 'SimGenome.cpp'; else $(CYGPATH_W) '$(srcdir)/SimGenome.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SimGenome.Tpo $(DEPDIR)/snowmanutils-SimGenome.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SimGenome.cpp' object='snowmanutils-SimGenome.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SimGenome.obj `if test -f 'SimGenome.cpp'; then $(CYGPATH_W) 'SimGenome.cpp'; else $(CYGPATH_W) '$(srcdir)/SimGenome.cpp'; fi` snowmanutils-BamSplitter.o: BamSplitter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-BamSplitter.o -MD -MP -MF $(DEPDIR)/snowmanutils-BamSplitter.Tpo -c -o snowmanutils-BamSplitter.o `test -f 'BamSplitter.cpp' || echo '$(srcdir)/'`BamSplitter.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-BamSplitter.Tpo $(DEPDIR)/snowmanutils-BamSplitter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='BamSplitter.cpp' object='snowmanutils-BamSplitter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-BamSplitter.o `test -f 'BamSplitter.cpp' || echo '$(srcdir)/'`BamSplitter.cpp snowmanutils-BamSplitter.obj: BamSplitter.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-BamSplitter.obj -MD -MP -MF $(DEPDIR)/snowmanutils-BamSplitter.Tpo -c -o snowmanutils-BamSplitter.obj `if test -f 'BamSplitter.cpp'; then $(CYGPATH_W) 'BamSplitter.cpp'; else $(CYGPATH_W) '$(srcdir)/BamSplitter.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-BamSplitter.Tpo $(DEPDIR)/snowmanutils-BamSplitter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='BamSplitter.cpp' object='snowmanutils-BamSplitter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-BamSplitter.obj `if test -f 'BamSplitter.cpp'; then $(CYGPATH_W) 'BamSplitter.cpp'; else $(CYGPATH_W) '$(srcdir)/BamSplitter.cpp'; fi` snowmanutils-SimTrainerWalker.o: SimTrainerWalker.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SimTrainerWalker.o -MD -MP -MF $(DEPDIR)/snowmanutils-SimTrainerWalker.Tpo -c -o snowmanutils-SimTrainerWalker.o `test -f 'SimTrainerWalker.cpp' || echo '$(srcdir)/'`SimTrainerWalker.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SimTrainerWalker.Tpo $(DEPDIR)/snowmanutils-SimTrainerWalker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SimTrainerWalker.cpp' object='snowmanutils-SimTrainerWalker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SimTrainerWalker.o `test -f 'SimTrainerWalker.cpp' || echo '$(srcdir)/'`SimTrainerWalker.cpp snowmanutils-SimTrainerWalker.obj: SimTrainerWalker.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-SimTrainerWalker.obj -MD -MP -MF $(DEPDIR)/snowmanutils-SimTrainerWalker.Tpo -c -o snowmanutils-SimTrainerWalker.obj `if test -f 'SimTrainerWalker.cpp'; then $(CYGPATH_W) 'SimTrainerWalker.cpp'; else $(CYGPATH_W) '$(srcdir)/SimTrainerWalker.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-SimTrainerWalker.Tpo $(DEPDIR)/snowmanutils-SimTrainerWalker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SimTrainerWalker.cpp' object='snowmanutils-SimTrainerWalker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-SimTrainerWalker.obj `if test -f 'SimTrainerWalker.cpp'; then $(CYGPATH_W) 'SimTrainerWalker.cpp'; else $(CYGPATH_W) '$(srcdir)/SimTrainerWalker.cpp'; fi` snowmanutils-Fractions.o: Fractions.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-Fractions.o -MD -MP -MF $(DEPDIR)/snowmanutils-Fractions.Tpo -c -o snowmanutils-Fractions.o `test -f 'Fractions.cpp' || echo '$(srcdir)/'`Fractions.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-Fractions.Tpo $(DEPDIR)/snowmanutils-Fractions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Fractions.cpp' object='snowmanutils-Fractions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-Fractions.o `test -f 'Fractions.cpp' || echo '$(srcdir)/'`Fractions.cpp snowmanutils-Fractions.obj: Fractions.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-Fractions.obj -MD -MP -MF $(DEPDIR)/snowmanutils-Fractions.Tpo -c -o snowmanutils-Fractions.obj `if test -f 'Fractions.cpp'; then $(CYGPATH_W) 'Fractions.cpp'; else $(CYGPATH_W) '$(srcdir)/Fractions.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-Fractions.Tpo $(DEPDIR)/snowmanutils-Fractions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='Fractions.cpp' object='snowmanutils-Fractions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-Fractions.obj `if test -f 'Fractions.cpp'; then $(CYGPATH_W) 'Fractions.cpp'; else $(CYGPATH_W) '$(srcdir)/Fractions.cpp'; fi` snowmanutils-STCoverage.o: ../Snowman/STCoverage.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-STCoverage.o -MD -MP -MF $(DEPDIR)/snowmanutils-STCoverage.Tpo -c -o snowmanutils-STCoverage.o `test -f '../Snowman/STCoverage.cpp' || echo '$(srcdir)/'`../Snowman/STCoverage.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-STCoverage.Tpo $(DEPDIR)/snowmanutils-STCoverage.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/STCoverage.cpp' object='snowmanutils-STCoverage.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-STCoverage.o `test -f '../Snowman/STCoverage.cpp' || echo '$(srcdir)/'`../Snowman/STCoverage.cpp snowmanutils-STCoverage.obj: ../Snowman/STCoverage.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-STCoverage.obj -MD -MP -MF $(DEPDIR)/snowmanutils-STCoverage.Tpo -c -o snowmanutils-STCoverage.obj `if test -f '../Snowman/STCoverage.cpp'; then $(CYGPATH_W) '../Snowman/STCoverage.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/STCoverage.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-STCoverage.Tpo $(DEPDIR)/snowmanutils-STCoverage.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/STCoverage.cpp' object='snowmanutils-STCoverage.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-STCoverage.obj `if test -f '../Snowman/STCoverage.cpp'; then $(CYGPATH_W) '../Snowman/STCoverage.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/STCoverage.cpp'; fi` snowmanutils-Histogram.o: ../Snowman/Histogram.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-Histogram.o -MD -MP -MF $(DEPDIR)/snowmanutils-Histogram.Tpo -c -o snowmanutils-Histogram.o `test -f '../Snowman/Histogram.cpp' || echo '$(srcdir)/'`../Snowman/Histogram.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-Histogram.Tpo $(DEPDIR)/snowmanutils-Histogram.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/Histogram.cpp' object='snowmanutils-Histogram.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-Histogram.o `test -f '../Snowman/Histogram.cpp' || echo '$(srcdir)/'`../Snowman/Histogram.cpp snowmanutils-Histogram.obj: ../Snowman/Histogram.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-Histogram.obj -MD -MP -MF $(DEPDIR)/snowmanutils-Histogram.Tpo -c -o snowmanutils-Histogram.obj `if test -f '../Snowman/Histogram.cpp'; then $(CYGPATH_W) '../Snowman/Histogram.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/Histogram.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-Histogram.Tpo $(DEPDIR)/snowmanutils-Histogram.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/Histogram.cpp' object='snowmanutils-Histogram.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-Histogram.obj `if test -f '../Snowman/Histogram.cpp'; then $(CYGPATH_W) '../Snowman/Histogram.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/Histogram.cpp'; fi` snowmanutils-BamStats.o: ../Snowman/BamStats.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-BamStats.o -MD -MP -MF $(DEPDIR)/snowmanutils-BamStats.Tpo -c -o snowmanutils-BamStats.o `test -f '../Snowman/BamStats.cpp' || echo '$(srcdir)/'`../Snowman/BamStats.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-BamStats.Tpo $(DEPDIR)/snowmanutils-BamStats.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/BamStats.cpp' object='snowmanutils-BamStats.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-BamStats.o `test -f '../Snowman/BamStats.cpp' || echo '$(srcdir)/'`../Snowman/BamStats.cpp snowmanutils-BamStats.obj: ../Snowman/BamStats.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-BamStats.obj -MD -MP -MF $(DEPDIR)/snowmanutils-BamStats.Tpo -c -o snowmanutils-BamStats.obj `if test -f '../Snowman/BamStats.cpp'; then $(CYGPATH_W) '../Snowman/BamStats.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/BamStats.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-BamStats.Tpo $(DEPDIR)/snowmanutils-BamStats.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../Snowman/BamStats.cpp' object='snowmanutils-BamStats.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-BamStats.obj `if test -f '../Snowman/BamStats.cpp'; then $(CYGPATH_W) '../Snowman/BamStats.cpp'; else $(CYGPATH_W) '$(srcdir)/../Snowman/BamStats.cpp'; fi` snowmanutils-PowerLawSim.o: PowerLawSim.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-PowerLawSim.o -MD -MP -MF $(DEPDIR)/snowmanutils-PowerLawSim.Tpo -c -o snowmanutils-PowerLawSim.o `test -f 'PowerLawSim.cpp' || echo '$(srcdir)/'`PowerLawSim.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-PowerLawSim.Tpo $(DEPDIR)/snowmanutils-PowerLawSim.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='PowerLawSim.cpp' object='snowmanutils-PowerLawSim.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-PowerLawSim.o `test -f 'PowerLawSim.cpp' || echo '$(srcdir)/'`PowerLawSim.cpp snowmanutils-PowerLawSim.obj: PowerLawSim.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-PowerLawSim.obj -MD -MP -MF $(DEPDIR)/snowmanutils-PowerLawSim.Tpo -c -o snowmanutils-PowerLawSim.obj `if test -f 'PowerLawSim.cpp'; then $(CYGPATH_W) 'PowerLawSim.cpp'; else $(CYGPATH_W) '$(srcdir)/PowerLawSim.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-PowerLawSim.Tpo $(DEPDIR)/snowmanutils-PowerLawSim.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='PowerLawSim.cpp' object='snowmanutils-PowerLawSim.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-PowerLawSim.obj `if test -f 'PowerLawSim.cpp'; then $(CYGPATH_W) 'PowerLawSim.cpp'; else $(CYGPATH_W) '$(srcdir)/PowerLawSim.cpp'; fi` snowmanutils-AssemblyBamWalker.o: AssemblyBamWalker.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-AssemblyBamWalker.o -MD -MP -MF $(DEPDIR)/snowmanutils-AssemblyBamWalker.Tpo -c -o snowmanutils-AssemblyBamWalker.o `test -f 'AssemblyBamWalker.cpp' || echo '$(srcdir)/'`AssemblyBamWalker.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-AssemblyBamWalker.Tpo $(DEPDIR)/snowmanutils-AssemblyBamWalker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='AssemblyBamWalker.cpp' object='snowmanutils-AssemblyBamWalker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-AssemblyBamWalker.o `test -f 'AssemblyBamWalker.cpp' || echo '$(srcdir)/'`AssemblyBamWalker.cpp snowmanutils-AssemblyBamWalker.obj: AssemblyBamWalker.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-AssemblyBamWalker.obj -MD -MP -MF $(DEPDIR)/snowmanutils-AssemblyBamWalker.Tpo -c -o snowmanutils-AssemblyBamWalker.obj `if test -f 'AssemblyBamWalker.cpp'; then $(CYGPATH_W) 'AssemblyBamWalker.cpp'; else $(CYGPATH_W) '$(srcdir)/AssemblyBamWalker.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-AssemblyBamWalker.Tpo $(DEPDIR)/snowmanutils-AssemblyBamWalker.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='AssemblyBamWalker.cpp' object='snowmanutils-AssemblyBamWalker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-AssemblyBamWalker.obj `if test -f 'AssemblyBamWalker.cpp'; then $(CYGPATH_W) 'AssemblyBamWalker.cpp'; else $(CYGPATH_W) '$(srcdir)/AssemblyBamWalker.cpp'; fi` snowmanutils-assembly2vcf.o: assembly2vcf.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-assembly2vcf.o -MD -MP -MF $(DEPDIR)/snowmanutils-assembly2vcf.Tpo -c -o snowmanutils-assembly2vcf.o `test -f 'assembly2vcf.cpp' || echo '$(srcdir)/'`assembly2vcf.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-assembly2vcf.Tpo $(DEPDIR)/snowmanutils-assembly2vcf.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='assembly2vcf.cpp' object='snowmanutils-assembly2vcf.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-assembly2vcf.o `test -f 'assembly2vcf.cpp' || echo '$(srcdir)/'`assembly2vcf.cpp snowmanutils-assembly2vcf.obj: assembly2vcf.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT snowmanutils-assembly2vcf.obj -MD -MP -MF $(DEPDIR)/snowmanutils-assembly2vcf.Tpo -c -o snowmanutils-assembly2vcf.obj `if test -f 'assembly2vcf.cpp'; then $(CYGPATH_W) 'assembly2vcf.cpp'; else $(CYGPATH_W) '$(srcdir)/assembly2vcf.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/snowmanutils-assembly2vcf.Tpo $(DEPDIR)/snowmanutils-assembly2vcf.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='assembly2vcf.cpp' object='snowmanutils-assembly2vcf.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(snowmanutils_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o snowmanutils-assembly2vcf.obj `if test -f 'assembly2vcf.cpp'; then $(CYGPATH_W) 'assembly2vcf.cpp'; else $(CYGPATH_W) '$(srcdir)/assembly2vcf.cpp'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ================================================ FILE: src/svabautils/PowerLawSim.cpp ================================================ #include "PowerLawSim.h" #include "SnowmanUtils.h" #include #include #include #include #include #define MAX_DUP_DEL_INV_SIZE 2000 #define MAX_RAR_SIZE 35e6 #define EVENT_BUFFER 4000 void PowerLawSim(faidx_t* findex, int num_breaks, double power_law, SeqLib::GRC& grc, std::ofstream& outfasta, std::ofstream& events) { double frac_inter = 0.05; bool verbose = false; // generate the random numbers std::vector rpower = drawFromPower(1, MAX_RAR_SIZE, power_law, num_breaks); // generate again, but for small indels std::vector small_indels2 = drawFromPower(1, 10, -3, num_breaks / 4); // generate inter-chr size_t num_intra = rpower.size() + small_indels2.size(); std::vector inter_chr((double)num_intra / (1-frac_inter) - num_intra, -1); rpower.insert(rpower.end(), small_indels2.begin(), small_indels2.end()); rpower.insert(rpower.end(), inter_chr.begin(), inter_chr.end()); std::random_shuffle(rpower.begin(), rpower.end()); // check for (auto& i : rpower) assert(i <= MAX_RAR_SIZE); const char TCGA[5] = "TCGA"; // get random inserts std::vector inserts; std::vector rsize = drawFromPower(1, 20, -2, num_breaks); for (int i = 0; i < num_breaks; ++i) { if (rand() % 2 == 0) { inserts.push_back(std::string()); continue; } std::string is(rsize[i], 'N'); for (size_t j = 0; j < is.length(); ++j) is[j] = TCGA[rand() % 3]; inserts.push_back(is); } SVEvent e; std::string ename, etype; for (int i = 0; i < num_breaks; ++i) { e.number = i; if (i % 500 == 0) std::cerr << "working on " << i << " of " << num_breaks << std::endl; int rval = rand() % 3; std::string frag, outstring; if (rpower[i] == -1) { etype = "INT"; ename = "tumor-" + std::to_string(i) + "-" + etype; if (verbose) std::cerr << "...generating inter-chr " << std::endl; genRandomSequence(frag, e.reg1, EVENT_BUFFER, findex, grc); std::string frag_ic; do { genRandomSequence(frag_ic, e.reg2, EVENT_BUFFER, findex, grc); } while (e.reg1.chr == e.reg2.chr); outstring = frag + inserts[i] + frag_ic; events << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << e.reg1.pos2 << "\t" << SeqLib::CHR_NAME[e.reg2.chr] << "\t" << e.reg2.pos1 << "\t+\t-\t" << "N\t-1\tINT\t" << (inserts[i].empty() ? "N" : inserts[i]) << "\t" << ename << std::endl; // deletion } else if (rpower[i] <= 50 && rand() % 2) { etype = "del"; ename = "tumor-" + std::to_string(i) + "-" + etype; if (verbose) std::cerr << "...generating deletion of length " << rpower[i] << std::endl; genRandomSequence(frag, e.reg1, EVENT_BUFFER * 2 + rpower[i], findex, grc); try {outstring = frag.substr(0, EVENT_BUFFER) + frag.substr(EVENT_BUFFER + rpower[i], frag.length() - rpower[i] - EVENT_BUFFER);} catch (...) { std::cerr << " len " << (frag.length() - rpower[i] - EVENT_BUFFER) << std::endl; } assert(outstring.length() < EVENT_BUFFER * 10); events << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1+EVENT_BUFFER) << "\t" << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1 + EVENT_BUFFER + rpower[i]) << "\t+\t-\tN\t" << rpower[i] << "\tdel\tN\t" << ename << std::endl; // insertion } else if (rpower[i] <= 50) { etype = "ins"; ename = "tumor-" + std::to_string(i) + "-" + etype; if (verbose) std::cerr << "...generating insertion of length " << rpower[i] << std::endl; genRandomSequence(frag, e.reg1, EVENT_BUFFER * 2, findex, grc); std::string ins(rpower[i], 'N'); for (int y = 0; y < rpower[i]; ++y) ins[y] = TCGA[rand() % 3]; outstring = frag.substr(0, EVENT_BUFFER) + ins + frag.substr(EVENT_BUFFER, frag.length() - EVENT_BUFFER); assert(outstring.length() < EVENT_BUFFER * 10); events << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1+EVENT_BUFFER) << "\t" << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1 + EVENT_BUFFER + 1) << "\t+\t-\t" << ins << "\t" << rpower[i] << "\tins\tN\t" << ename << std::endl; // TANDEM DUPLICATION } else if (rpower[i] < MAX_DUP_DEL_INV_SIZE && rval == 0) { etype = "DUP"; ename = "tumor-" + std::to_string(i) + "-" + etype; if (verbose) std::cerr << "...generating DUP of length " << rpower[i] << std::endl; genRandomSequence(frag, e.reg1, EVENT_BUFFER * 2 + rpower[i], findex, grc); outstring = frag.substr(0, EVENT_BUFFER + rpower[i]) + inserts[i] + frag.substr(EVENT_BUFFER, frag.length() - EVENT_BUFFER); //rpower[i]) + frag.substr(EVENT_BUFFER, frag.length() - EVENT_BUFFER); assert(outstring.length() < EVENT_BUFFER * 10); events << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1+EVENT_BUFFER+rpower[i]) << "\t" << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1 + EVENT_BUFFER) << "\t+\t-\t" << "N" << "\t" << rpower[i] << "\tDUP\t" << (inserts[i].empty() ? "N" : inserts[i]) << "\t" << ename << std::endl; // DELETION } else if (rpower[i] < MAX_DUP_DEL_INV_SIZE && rval == 1) { etype = "DEL"; ename = "tumor-" + std::to_string(i) + "-" + etype; if (verbose) std::cerr << "...generating DEL of length " << rpower[i] << std::endl; genRandomSequence(frag, e.reg1, rpower[i] + EVENT_BUFFER * 2, findex, grc); outstring = frag.substr(0, EVENT_BUFFER) + inserts[i] + frag.substr(EVENT_BUFFER + rpower[i], frag.length() - EVENT_BUFFER - rpower[i]); assert(outstring.length() < EVENT_BUFFER * 10); events << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1+EVENT_BUFFER) << "\t" << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1 + EVENT_BUFFER + rpower[i]) << "\t+\t-\tN\t" << rpower[i] << "\tDEL\t" << (inserts[i].empty() ? "N" : inserts[i]) << "\t" << ename << std::endl; // INV } else if (rpower[i] < MAX_DUP_DEL_INV_SIZE && rval == 2 && false) { etype = "INV"; ename = "tumor-" + std::to_string(i) + "-" + etype; if (verbose) std::cerr << "...generating INV of length " << rpower[i] << std::endl; genRandomSequence(frag, e.reg1, rpower[i] + EVENT_BUFFER * 2, findex, grc); std::string inv_frag = frag.substr(EVENT_BUFFER, rpower[i]); std::reverse(inv_frag.begin(), inv_frag.end()); outstring = frag.substr(0, EVENT_BUFFER) + inv_frag + frag.substr(EVENT_BUFFER, frag.length() - EVENT_BUFFER - rpower[i]); assert(outstring.length() < EVENT_BUFFER * 10); events << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1+EVENT_BUFFER) << "\t" << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << (e.reg1.pos1 + EVENT_BUFFER + rpower[i]) << "\t+\t-\tN\t" << rpower[i] << "\tINV\t" << (inserts[i].empty() ? "N" : inserts[i]) << "\t" << ename << std::endl; } else { etype = "RAR"; ename = "tumor-" + std::to_string(i) + "-" + etype; if (verbose) std::cerr << "...generating RAR of length " << rpower[i] << std::endl; genRandomSequence(frag, e.reg1, EVENT_BUFFER, findex, grc); bool leftfit = e.reg1.pos1 - rpower[i] > 1e6; bool rightfit = e.reg1.pos2 + rpower[i] < SeqLib::CHR_LEN[e.reg1.chr]; int rrr = -1; if (leftfit && rightfit) rrr = rand() % 2; else if (leftfit) rrr = 0; else if (rightfit) rrr = 1; // rearrange to left std::string seq2; if (rrr == 0) { if (verbose) std::cerr << "...generating LEFT RAR of length " << rpower[i] << std::endl; SeqLib::GenomicRegion gr(e.reg1.chr, e.reg1.pos1 - rpower[i] - EVENT_BUFFER, e.reg1.pos1 - rpower[i]); std::string chrstring = SeqLib::CHR_NAME[e.reg1.chr]; int len; char * seq = faidx_fetch_seq(findex, const_cast(chrstring.c_str()), gr.pos1, gr.pos2 - 1, &len); if (!seq) break; else seq2 = std::string(seq); outstring = seq2 + inserts[i] + frag; assert(outstring.length() < EVENT_BUFFER * 10); events << SeqLib::CHR_NAME[gr.chr] << "\t" << gr.pos2 << "\t" << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << e.reg1.pos1 << "\t+\t-\tN\t" << rpower[i] << "\tRAR\t" << (inserts[i].empty() ? "N" : inserts[i]) << "\t" << ename << std::endl; //std::cerr << rpower[i] << " span " << (std::abs(gr.pos2 - e.reg1.pos1) - rpower[i]) << std::endl; assert(rpower[i] == (e.reg1.pos1 - gr.pos2)); // rearrange to right } else if (rrr == 1) { if (verbose) std::cerr << "...generating RIGHT RAR of length " << rpower[i] << std::endl; SeqLib::GenomicRegion gr(e.reg1.chr, e.reg1.pos2 + rpower[i], e.reg1.pos2 + rpower[i] + EVENT_BUFFER); std::string chrstring = SeqLib::CHR_NAME[gr.chr]; int len; char * seq = faidx_fetch_seq(findex, const_cast(chrstring.c_str()), gr.pos1, gr.pos2 - 1, &len); if (!seq) break; else seq2 = std::string(seq); events << SeqLib::CHR_NAME[e.reg1.chr] << "\t" << e.reg1.pos2 << "\t" << SeqLib::CHR_NAME[gr.chr] << "\t" << gr.pos1 << "\t+\t-\tN\t" << rpower[i] << "\tRAR\t" << (inserts[i].empty() ? "N" : inserts[i]) << "\t" << ename << std::endl; outstring = frag + inserts[i] + seq2; assert(outstring.length() < EVENT_BUFFER * 10); //std::cerr << rpower[i] << " span " << (std::abs(gr.pos1 - e.reg1.pos2) - rpower[i]) << std::endl; assert(rpower[i] == gr.pos1 - e.reg1.pos2); // rearrangement doesn't fit } else { if (verbose) std::cerr << "FAILED TO FIT RAR of length " << rpower[i] << " on break " << e.reg1 << std::endl; } } assert(outstring.length() < 50000); if (!outstring.empty()) outfasta << ">" << ename << std::endl << outstring << std::endl; else std::cerr << "...empty string on rar " << i << std::endl; } } std::vector drawFromPower(double x0, double x1, double power, int n_draws) { assert(power != -1); const int PRECISION = 1e6; std::vector rpower(n_draws, 0); for (int i = 0; i < n_draws; ++i) { double r = (double)(rand() % PRECISION)/(double)PRECISION; double t1 = std::pow(x1, power+1); double t2 = std::pow(x0, power+1); double tsum = (t1-t2) * r + t2; rpower[i] = std::floor(std::pow(tsum, 1 / (power + 1))); } return rpower; } void genRandomSequence(std::string& s, SeqLib::GenomicRegion& gr, int width, faidx_t * findex, SeqLib::GRC& grc) { gr.chr = SnowmanUtils::weightedRandom(SeqLib::CHR_CUMSUM_WEIGHT_X); std::string chrstring = SeqLib::CHR_NAME[gr.chr]; char * seq = nullptr; int len; // get the first sequence do { if (seq) free(seq); seq = nullptr; s = std::string(); gr.pos1 = 1e6 + rand() % (int)(SeqLib::CHR_LEN_VEC[gr.chr] - 2e6); gr.pos2 = gr.pos1 + width; seq = faidx_fetch_seq(findex, const_cast(chrstring.c_str()), gr.pos1, gr.pos2 - 1, &len); if (seq) s = std::string(seq); } while (!seq || s.find("N") != std::string::npos || grc.CountOverlaps(gr)); } ================================================ FILE: src/svabautils/PowerLawSim.h ================================================ #ifndef SNOWMAN_POWER_LAW_SIM_HH #define SNOWMAN_POWER_LAW_SIM_HH #include #include "SeqLib/GenomicRegionCollection.h" #include "SeqLib/BWAWrapper.h" void PowerLawSim(faidx_t* findex, int num_breaks, double power_law, SeqLib::GRC& grc, std::ofstream& outfasta, std::ofstream& events); std::vector drawFromPower(double x0, double x1, double power, int n_draws); void genRandomSequence(std::string& s, SeqLib::GenomicRegion& gr, int width, faidx_t * findex, SeqLib::GRC& grc); struct SVEvent { SeqLib::GenomicRegion reg1; SeqLib::GenomicRegion reg2; int break1; int break2; std::string ins; std::string r_ins; std::string etype; int number; }; #endif ================================================ FILE: src/svabautils/ReadSim.cpp ================================================ #include "ReadSim.h" #include #include #include void ReadSim::addAllele(const std::string& s, double af) { if (m_seq.size() && m_seq.back().length() != s.length()) { std::cerr << "ReadSim::addAllele error. Expecting sequences to be same size" << std::endl; exit(EXIT_FAILURE); } if (af <= 0 || af > 1) { std::cerr << "ReadSim::addAllele error. Expecting allelic fraction > 0 and <= 1. value is " << af << std::endl; exit(EXIT_FAILURE); } m_seq.push_back(s); m_frac.push_back(af); } int ReadSim::__random_allele(std::vector& cs) const { // get a random allele size_t al = 0; uint32_t rval = rand() % 100000; double rand_allele = rval % 100000; while (al < cs.size()) { if (rand_allele <= cs[al] * 100000) break; ++al; } return al; } double ReadSim::__get_cumsum(std::vector& cs) const { double csum = 0; for (size_t i = 0; i < m_frac.size(); ++i) { csum += m_frac[i]; cs.push_back(csum); } if (csum < 0.999 || csum > 1.001) { std::cerr << "ReadSim::addSequence: Expecting sum of allelic fractions = 1. Sum is " << csum << std::endl; return csum; } return csum; } void ReadSim::sampleReadsToCoverage(std::vector& reads, int cov, double error_rate, double ins_error_rate, double del_error_rate, int readlen) { // check validity if (m_seq.size() == 0) { std::cerr << "ReadSim::sampleReadsToCoverage: No sequences. Add with ReadSim::addSequence" << std::endl; return; } // how many smaples to get desired coverage? size_t seqlen = m_seq[0].length(); int ns = cov * seqlen / readlen; uint32_t maxstart = seqlen - readlen; // get cumulative sum for sampling std::vector m_frac_cumsum; __get_cumsum(m_frac_cumsum); // loop through num samples and start sampling for (int i = 0; i < ns; ++i) { // random allele int al = __random_allele(m_frac_cumsum); // get a random subsequence //uint32_t rstart; uint32_t rstart = rand() % maxstart; std::string s = m_seq[al].substr(rstart, readlen); // add the errors makeSNVErrors(s, error_rate); // add the insertion errors if (rand() % 100000 > ins_error_rate*100000) makeInsErrors(s); // only make sometimes if (rand() % 100000 > del_error_rate*100000) makeDelErrors(s, rstart, m_seq[al]); reads.push_back(s); } } void ReadSim::samplePairedEndReadsToCoverage(std::vector& reads1, std::vector& reads2, std::vector& qual1, std::vector& qual2, int cov, double error_rate, double ins_error_rate, double del_error_rate, int readlen, double mean_isize, double sd_isize, const std::vector& qual_dist) { // check validity if (m_seq.size() == 0) { std::cerr << "ReadSim::samplePairedEndReadsToCoverage: No sequences. Add with ReadSim::addSequence" << std::endl; return; } // how many samples to get desired coverage? size_t seqlen = m_seq[0].length(); int ns = cov * seqlen / readlen / 2; // get cumulative sum for sampling std::vector m_frac_cumsum; __get_cumsum(m_frac_cumsum); // setup random number generator for isize std::default_random_engine generator(rand()); std::normal_distribution distribution(mean_isize, sd_isize); // loop through num samples and start sampling for (int i = 0; i < ns; ++i) { if (i % 100000 == 0) std::cerr << "...sampling read " << i << " of " << ns << std::endl; // get a random isize int isize = distribution(generator); uint32_t maxstart = seqlen - readlen*2 - isize; // random allele int al = __random_allele(m_frac_cumsum); // get random subsequences uint32_t rstart = rand() % maxstart; std::string s1 = m_seq[al].substr(rstart, readlen); std::string s2 = m_seq[al].substr(rstart + readlen + isize, readlen); std::string q1, q2; size_t rep_spot = std::min(s1.find("AAAAAAAAAA"), s1.find("TTTTTTTTTT")); // homopolymer scrambling if (rep_spot != std::string::npos) { q1 = qual_dist[rand() % qual_dist.size()]; for (size_t i = rep_spot; i < q1.length(); ++i) q1[i] = '#'; } else { q1 = qual_dist[rand() % qual_dist.size()]; } rep_spot = std::min(s2.find("AAAAAAAAAA"), s2.find("TTTTTTTTTT")); // homopolymer scrambling if (rep_spot != std::string::npos) { q2 = qual_dist[rand() % qual_dist.size()]; for (size_t i = rep_spot; i < q2.length(); ++i) q2[i] = '#'; } else { q2 = qual_dist[rand() % qual_dist.size()]; } // dont keep reads with N if (s1.find("N") != std::string::npos || s2.find("N") != std::string::npos) continue; SeqLib::rcomplement(s2); std::reverse(q2.begin(), q2.end()); // add the errors //std::cerr << " " << s1 << " " << rstart << " rlen " << readlen << " ms " << m_seq[al].length() << std::endl; if (error_rate > 0) { makeSNVErrors(s1, error_rate); makeSNVErrors(s2, error_rate); } if (ins_error_rate) { if (rand() % 100000 < ins_error_rate*100000) makeInsErrors(s1); if (rand() % 100000 < ins_error_rate*100000) makeInsErrors(s2); } if (del_error_rate) { if (rand() % 100000 < del_error_rate*100000) makeDelErrors(s1, rstart, m_seq[al]); if (rand() % 100000 < del_error_rate*100000) makeDelErrors(s2, rstart + readlen + isize, m_seq[al]); } reads1.push_back(s1); reads2.push_back(s2); qual1.push_back(q1); qual2.push_back(q2); } } std::ostream& operator<<(std::ostream& out, const Indel& i) { out << i.len << "\t" << i.type << "\t" << i.gr.chr << "\t" << i.gr.pos1 << "\t" << i.gr.pos2 << "\t" << i.frag_id << "\t" << (i.lead_base + i.ref_seq) << "\t" << (i.lead_base + i.alt_seq); return out; } Indel ReadSim::makeDelErrors(std::string& s, int del_size) { std::vector sizer = {del_size}; if (del_size <= 0) sizer = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,6,6, 7,8,9,10,11,12,13,14,15,16,17,18,20,22,24,26}; uint32_t rpos = s.length() + 1; // get a random size //int ds = getRandomIndelSize(); int ds = del_size; size_t failsafe = 0; while (rpos + ds > s.length() && failsafe < 1000) { ++failsafe; // get a random position in read rpos = rand() % (s.length() - 5 - ds); rpos += 5; } // get the replacement sequence //std::cerr << del_size << " rpos " << rpos << " s.length() " << s.length() << std::endl; s = s.substr(0, rpos) + s.substr(rpos + ds, s.length() - rpos - ds); // + refseq.substr(rpos + s.length(), ds); return Indel(); //{ds, 'D', rpos}; } Indel ReadSim::makeDelErrors(std::string& s, int sstart, const std::string& refseq) { const std::vector sizer = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,6,6, 7,8,9,10,11,12,13,14,15,16,17,18,20,22,24,26}; int ds = getRandomIndelSize(); // get a random position in read uint32_t rpos = rand() % (s.length() - 5 - ds); rpos += 5; // make sure we aren't at end if (sstart + s.length() + ds >= refseq.length()) return Indel(); // empty // get the replacement sequence s = s.substr(0, rpos) + s.substr(rpos + ds, s.length() - rpos - ds) + refseq.substr(sstart + s.length(), ds); //return Indel(ds, 'D', ); return Indel(); } int ReadSim::getRandomIndelSize() const { const std::vector s = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,6,6, 2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,6,6, 7,7,8,8,9,9,10,10,11,11,12,12,13,13, 14,15,16,17,18,19,20,21,22,23,24,25,26, 27,28,29,30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49,50, 60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000, 1010,1020,1030,1040,1050,100,1070,1080,1090,1100,1110,1120,1130,1140,1150,1160,1170,1180,1190,1200,1210,1220,1230,1240,1250,1260,1270,1280,1290,1300,1320,1340,1360,1380,1400,1420,1440,1460,1480,1500,1520,1540,1560,1580,1600,1620,1640,1660,1680,1700,1720,1740,1760,1780,1800,1820,1840,1860,1880,1900,1920,1940,1960,1980,2000}; size_t rr = rand() % s.size(); return s[rr]; } Indel ReadSim::makeInsErrors(std::string& s, bool keep_size, int indel_size) { std::vector sizer = {indel_size}; if (indel_size <= 0) sizer = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,6,6, 7,8,9,10,11,12,13,14,15,16,17,18,20,22,24,26}; const char TCGA[5] = "TCGA"; // get a random size //int is = getRandomIndelSize(); int is = indel_size; // generate the random insertion piece std::string ins(is, 'N'); for (int i = 0; i < is; ++i) ins[i] = TCGA[rand() % 3]; // get a random position in read uint32_t rpos = rand() % (s.length() - 10); assert(s.length() - 10 > 0); rpos += 10; if (keep_size) { if (rpos < s.length() / 2) { // trim off back end s = s.substr(0, rpos) + ins + s.substr(rpos, s.length() - rpos - is); } else { // trim off front end s = s.substr(is, rpos - is) + ins + s.substr(rpos, s.length() - rpos + is); } } else { s = s.substr(0, rpos) + ins + s.substr(rpos, s.length() - rpos); } return Indel(); //Indel(is, 'I', rpos); } void ReadSim::makeSNVErrors(std::string& s, double er) { const char T[4] = "ACG"; const char C[4] = "ATG"; const char G[4] = "ACT"; const char A[4] = "TCG"; std::default_random_engine generator(rand()); std::binomial_distribution distribution(s.length(), er); size_t num_errors = distribution(generator); for (size_t i = 0; i < num_errors; ++i) { uint32_t pos = rand() % s.length(); size_t w = rand() % 3; if (s.at(pos) == 'A') s[pos] = A[w]; else if (s.at(pos) == 'T') s[pos] = T[w]; else if (s.at(pos) == 'C') s[pos] = C[w]; else if (s.at(pos) == 'G') s[pos] = G[w]; else if (s.at(pos) == 'N') ; else std::cerr << "ReadSim::makeSNVErrors: Unexpected character in string. Char: " << s.at(pos) << " main seq " << s << std::endl; } } void ReadSim::baseQualityRelevantErrors(std::string& s, const std::string& bq) { char TCGA[5] = "TCGA"; assert(s.length() == bq.length()); for (size_t i = 0; i < s.length(); ++i) { if (bq.at(i) <= 37) { // low quality-ish s[i] = TCGA[rand() % 4]; } } } ================================================ FILE: src/svabautils/ReadSim.h ================================================ #ifndef SNOWMAN_READSIM_H__ #define SNOWMAN_READSIM_H__ #include #include #include #include "SeqLib/GenomicRegion.h" struct Indel { Indel() : len(0), type('N') {} Indel(size_t l, char t, const std::string& rseq, const std::string& aseq, const std::string& lseq) : len(l), type(t) { ref_seq = rseq; alt_seq = aseq; lead_base = lseq; assert(lseq.length() == 1); assert(t == 'D' || alt_seq.length() == l); assert(t == 'I' || ref_seq.length() == l); } size_t len; char type; std::string ref_seq, alt_seq, lead_base; SeqLib::GenomicRegion gr; int frag_id; friend std::ostream& operator<<(std::ostream& out, const Indel& i); }; class ReadSim { public: ReadSim() : m_error(0), m_imean(350), m_isd(50) {} /** Give the sequene string SNP errors at rate of er */ void makeSNVErrors(std::string& s, double er); Indel placeDel(std::string& s, uint32_t rpos, uint32_t ds, const std::string& refseq); void sampleReadsToCoverage(std::vector& reads, int cov, double error_rate, double ins_error_rate, double del_error_rate, int readlen); void samplePairedEndReadsToCoverage(std::vector& reads1, std::vector& reads2, std::vector& qual1, std::vector& qual2, int cov, double error_rate, double ins_error_rate, double del_error_rate, int readlen, double mean_isize, double sd_isize, const std::vector& qual_dist); int getRandomIndelSize() const; void addAllele(const std::string& s, double af); Indel makeInsErrors(std::string& s, bool keep_size = true, int ins_size = -1); Indel makeDelErrors(std::string& s, int sstart, const std::string& refseq); Indel makeDelErrors(std::string& s, int ins_size = -1); void makeClipErrors(std::string& s, double er, int min_clip_len, int max_clip_len); void baseQualityRelevantErrors(std::string& s, const std::string& bq); private: // get the cumulative sum double __get_cumsum(std::vector& cs) const; int __random_allele(std::vector& cs) const; // sequences to simulate from std::vector m_seq; // allelic fractions for each std::vector m_frac; // read SNP error rate double m_error; // insert size distribution double m_imean; double m_isd; }; #endif ================================================ FILE: src/svabautils/SeqFrag.cpp ================================================ #include "SeqFrag.h" #include void SeqFrag::addScrambledEnds(size_t left_len, size_t right_len) { std::vector TCGA = {"T","C","G","A"}; std::string left, right; for (size_t i = 0; i < left_len; ++i) left += TCGA[rand() % 4]; for (size_t i = 0; i < right_len; ++i) right += TCGA[rand() % 4]; left_scramble = left; right_scramble = right; m_seq = left + m_seq + right; } void SeqFrag::spikeMicrobe() { const char* PSUEDO = "CAAAAAGACATTTTTTTTGGGATATTAAGATTTCCTAGGATAGAAATCAAATTATTAGATAATTTTTGTATATATTTTAA" "ATATGTCTTAAAAAAATGTCTTTTTGTCTAAATATATTAAGCTTTTCATTTTTACATCGACAAATTTAGATATTTTTAGA" "CATTTTGGGTATTTTTTTAGACATTTTTAAAATATTTTAGACAGAATTGTATTATGATCCTATTTTTAGACCTAAATATA" "TGCAAAATTATCATATCGTCGTGGAGTGTTACCAAGTAATTCACTATATTGATACAAATCATTACCTCTATAATCTGGTT" "TAAAGGGAAGTTCTTTAATTGGTTCTTTCTTATCCTCTTTTTTATCCTCATCATTACCTTTATGAGCATTGTTTCTACAC" "ATGTATTTGACTAGAAAGAAAAATAATATAAACAATATTATAAGTACTATAAAAGTAAATATACATATTTTGATCATCAT" "TTTGTTACCAATTTCATTACCAACTTCCTTGCCTATAACGCTGAACGCATTATATGCAATGGGATCCATCGCGAAAGGAT" "TTTCCATTACTATCTATTATATCATTACATAATTGTTTATTGTTCTATAAATAATAAACAAATATACACTATTAGATAGT" "TTTTACCATCCAAATTCTTTCATAAACTCATTAATATCTTCTATTGACTTGCATTCTTCTAGTTCAATCCAATATATTGG" "TGTTTCTGGATCAATTTCTTCGTTTTCCTCTTCTTGTTTATCAAGATATTCTATTAGATCATTCTCTGCTCTGTTTCTCA" "ATGATTCAAGTTTTTTCTGTTCTTTTTTCAAGAGTTTTTTACTCACACTAAATTTACCATACATTAATATATAATACTAT" "AAAATACTATATATTAATTATCTTTATATCATTTTATATTAATTTATATTATTTTGATAAATTTTCCACGTATTTATAAT" "AATCATTAAATGTTCCTGATCTTACCGATTGATATTTGTTACGAACAGATTGTTGTTGTTCTTCAGTAGTTTTATCCCAT" "TCATCAACCATAATATTTCTAAAATTGGTTTTTGGTGCGACTATTTCTAATTTTTTTTTGTATGAATTAGCTTCTCTTTT" "GAATTTAGCAATATCACTCAACATAAGATTTTTAAGATCCTTTTCTATGAGTAGTTGTTCTTCCAATTCTGTAACGGTTA" "ATATTTTTTCCCTAGTCGTTATAAAAGCTTTTTCAAGAGCCATCGCTAATTGATCATATGATACAAAATTTTCATCATCT" "ATATTTTCTAATACTTCTTCAGCATTTCTTTTAATTTTTTTAGCTTTACTTGCCATTATATATACTATATTTACATATAA" "TTATTTATCATTATCATTAATAAAAAAATCAACCATTTCTTTTAGATTATTCTTTTTTTTTAGAGTAGATATTAAGTTAT" "AATTTTGTATAATTTAGGTTGTTTATGGGATTTTTTAGGTTTATTTTCTGTAACAGACATGAACATTGATCCACCATGTT" "GATCATTATCATCATCAAGAAGATCATCAACATTATCATTATAATTATCGGCCTCATTTAATTCATTTTCATCAGTATTA" "TAATTTCCAGATGATTGATTATCATCATCACTTTCATTATCACTTTCATCACTGACGTCAAAGATAACTTCTTTTTTTGA" "TTTAACAATCTTTGGTGTTTTTTTAACCATTTTTTTGCCTCTTTTTGACTTAGATTTGACTGGTTCTATCTCAGTTTCTG" "ATTCAACTTCCTCATCGGATTCATTATCAGATTCATTATCAGATTCTTCTGATTCACTTGATTCATCTCTAGATTTTGAT" "ATTTTTTTGGTTGTTCTATTCAATTCCTCTTTCATCATTTTTCTGGTTTTATAAAAAATTGGTTTACTGATTCCAGCTTT" "CTTACAAGCTTGAACCACTGTCAAACCACCTTTCAAATAATATGATTCGGCTTTTTCATATAATATTTTATTTCGTCGGT" "ATCTTAGGTTTTCTAGAACAGACATGTCCTTTATTATACCTAAATAATATTATTTTTATACCAAAACAGATCCTTTATCA" "TATACACATAATTCGGATCCAATCCGATTTTTTACTTTGATAAAAAGGCGAAAAATAATCAAAGTAAAAAGTAAGAAATA" "TTAAATATATGCATAATATAATATTATAATGTCGCATAATTGTCAAAATAGTAATGAACCTGATACAGTGTATTATGATA" "TAGTTATCCCATATAATCCCAATGATTCTGGTTTAAGCCCAGCAACATTCCAAGCACAGTTAACACAACCATTGCTTTAT" "AATCCTGACAAATATTACCTGAGTGTAGTGAGGTTCAGTATTCCGACCCAATATGTACCCTTAATGATACCTGAAATACA" "ACCTTTTCCAAATACTAATGTTAATAATACCATATATTCAGTTACACTAGAGTATAATGGTGTATTTTCATCTCAAACAT" "TTGTACAATATGATGTATCTTTAACTAATCCTAATGATACTCCTCCACCTCCTCCAACAATCAATAATAGGACAGTAGAA" "CCAACAGCCTATTATTATGTTTATAATTTCTCGCCATTTTTACAAATGATCAACAAAGCACTTTCTGATGCTTTTACTGA" "AATTACTATGCCAGTTGGCGCAGTTGCTCCATATTTTGTATACAGTCCGGTCACACAAAGGATTAGTTTAGTAGCACAGA" "GGCAATTTTATGATAGAAATTTAGCGCAACCTATTAGAATATATTGTAATGAGGCATTATTCCCATTTTTAGATGGAATA" "CCATTTGGAGGACTTGATTTTAATAGTGTTGATGGGCGTGATATATTATTCAATGTGGAAAATTTAGGTAATAATTTGGT" "TCAAAATCAGCTAACGGCTCCAGCATATCCTCCTGAATTTATCCAAATGGAACAAGAATATGCTACACTTTCTAACTGGA" "ATGCTATAAAAACTATCCAATTAGTATCCAATCTTTTACCTATTAATAGAGAATTTATCCCATCATTTAGAAATACTAAT" "GTAGGTGTAGTTAATTCACAAGGTATTTTAGCAGACTTTGTACCATTGGTAACACTTGGGCCAGAATCTAGAACCAGTAT" "AGATTATGTTGCAAATGGTCCTTGGAGATTAATAGATATGTTTGGAGGAGTACCTATAACAATGGTTGATTTATCAGTAT" "ATTGGACAGATCAAATAGGAAGACGATTTGTGTTAGATGTACCCAGAGGTAGAATAGCAACCTGTAAATTAATATTCATT" "AAGAAGGATCTGGCAGGTCACACTCTATCTCGGAAATAATAGATAGTTAATGTTTCATCAAAATATAATATAATAATATA" "GTATATTAAGAATATGTCAAATAGTGCTGTACCTTTAAATGTTGTAGCAATTCAAGAACCCCGTCTTGAACTTAATAATG" "AAAGAACTTGGGTAGTGGTTAAAGGTGGTCAACAAGTCACCTATTATCCTTTCCCTTCAACTTCTTTCAGCTCTAATCAA" "TTTAATTTCATTTGTAATCCTCCTTCAGCACAAACTGTATTGGATCGATTAGCATTCATTCAAGTTCCTTATGATATCAC" "TTTCAATGTTAATCCTGCTCATGCTGGTGTAACTGACAATCTTTTACAACCTGGTCGTGATGCTTTCCGTGCTTTCCCTA" "TTAGTTCTATTACTAATACTTTAACTGCAACCATTAATGGTTTCCCTGTGAATATTGAATTAGGACAAATTATTCACGCT" "CTTAGCAGATATCATACTCCTCTTAAACTTAAAAATGGATGGATGTCTATGCAACCTTCTTTTGAAGATAATTATCAATC" "ATATCGTGATGCTGATGCCACTAATAACAATCCTTTAGGTGATTTTACAAGCGCATCTGGTCTTTCTGAGCTTCCAAGAG" "GATCATATTCCATGAATGTTGTGTCAAATACTCCTACTACTGCTAGAATTACTGGTGTACTTTATGAACAAGTATTCCTT" "CCTCCATTTATTTGGGATGAACATCAAGCTGGTGGTCTTGCAAATCTAACCAGTTTAACCTTCAATTGGGTACTAAATAA" "TAATCTTGCTAGAATATGGTCTCATTCAGATATTACTAATGATGTTTCTGGAAACAGTACTATTGGTTCAATGAATGTCA" "GCTTCCAACAACCCTCAATGTATCTTGGATTTGTTACTCCTCGATTAAATATTCCTATTCCTCCCAGAATAACTTATCCT" "TATTTCAAACTTTCAAGATACACTACACAATTCCAAAATACTCTTGCTCCCAATGCAACCAGTACTTACAAATCTAATAT" "TGTTCAACTTGATTCTATTCCAAGGAAACTTTATGTATTCATGAAACAATCTGATTCAGTGATTTATCAAAATCTCAATA" "ATCAAATTACCACTCCTGATGTATTCCTACAAATCAATTCTCTCAATTTAACTTGGAACAATCAACAGGGTGTTCTTTCT" "GGAGCATCTGCACAAAATTTATATGACTTCAGTGTTCAAAATGGTTACAACAAGACTTGGACTGAATTTAATGGTCTTAC" "ACAACAATTATCAGGAGTCTCTGGATCACCTACCAAAGTAATTGGTCTTGAAGGAGGAATAGTTTGTCTCGAATTAGGTA" "AAGATGTAGGATTACGTGACGATGAAGCTGAAGGTGTGCTTGGTAATTTCAATTTACAAGTACAAATGACTTGCACTAAT" "ACTAATCAATATCTCACAATCGTACCTGATATGTATATTATTGCAGTATATGATGGTACTCTTGTTATCTCTAATACTAG" "TGCTATGGCATCAATTGGTGTTGCCTCTAAAGAAGAAGTATTAAATGCTCCCATTAATCATAGCATGTCATATCACGAAT" "TACAAACTGTATATGGAGGAGATTTCTTTAGCACATTTAAGAATTTCCTTGGAAAAGCCGCTAATGTAGCCGGAAAGGTA" "AATAATTTTCTCAAAGATTCAAAAGTAGCTAGTTCTGTGCTAGGAGCTATTCCTCATCCTTATGCTCAAGTTCCTGGACA" "AATTTTAAGGAATATTGGTTATGGTGAAGGTGGAGTATCTGCTGGTGGTGTTGTTGCTGGATCTGGAAGAAGAAAGAAAG" "GTGGAGTATTAGTAGGAGGCAGTGAATGTGAAGGTGGAAGATATATGTCCAAAGCTGAATTAAAGAAAGCTTTACGAATG" "TAAACACTATTAAATATAATATTGGTTAATAATATATTTAATATGAACATCAGAATAAAAGATTATTTCGATCATCCTTT" "TATTAAATTTGATCCAAGGGAAGTTAAACCAATTGAATCATATACTCAAGAACAAATCAGTAATATCAAATTATTATCTG" "TTACTTCTGATCCTACACAAATGGCAAGACCTTTTGGATCTGCTACATATCGTATTCAAAAATATCCTGGAGATTTAGAT" "TTACAAGAGGAATTCATTGATTGTTGTTCCATAAATGAGGTTGTTAAAACATTTGCTAAGAGATTACAAAAAATAGTCAC" "CAATATCAAAAAAAATAAGTTACATTATTTTTCAGAGGTAAAAGCTGGGATTGATATTAGATACGATATTGATATTGGCA" "TAATAACTAGTGGAGTGTATATTCCCAGTTTTAATTTGATCCAAAAAATACAATCAATGTATCGAAAAGGATTATTAGAT" "GATGAAGAATACAATACTTTATCTACAGCATTATCAAAACCTAATTTAGATGGTGATGTATATGACGTCGTTCATCATAT" "TTTGAGAGAACGTAAAATATTGAGATGGTCACAAGAAGAGGTGTTATTGGGTACAAAAAGTCTTCCTTTAGGGAAAAAAA" "TAAAGCTATCTGAAGCATTGAAGGCAAAATCACATGTAAAAATAGACATGATATCACTCATTAATAATCAGTTTGTTGAG" "GTAACTAATTTCTATATTTTGATTTATGTCGATTTGAAGAAAAATACTTTGGAGACTGTTAATTTTAATTTCGATTATCT" "TGATAACAACATACTTACCAAACAATATGATATGCAAATCAAAGAGGAAGTACAAAAATTGTATTACTCTGATATGTATT" "ACAGTGCTTTCAAGATGGTCAAAAGAATGTGGGCATATTCAAGAGCTTTTAGAAATATGGAAGATGTCAATATATTATTA" "CCTATTGTAAGTGGAAATATATCATTATTGTATCAGATTGTGAGTGAATTATCCACTATTGTGAGACTTTATGAAGTCAG" "TAAATCAACTCCCGAAACAACAATAGATAAAAGATTAGATTCATTAGCCTATAAATTAGCTGATGTAACAGAAATAGATA" "AAGAATCATTGATACATATCACAGATATAATTGATAGTTTGAAGAATTATAAAGGAATCAACAAAGCAATCCAAATAAAT" "CAGTTTGTAATTAAACCATTGAAAAGATATATCAATGCTTTAACTATAGATGAATTGGAAGAAATAGGTTTTAATCCTCC" "TCCTCCTAGATTTTTACCATATCCTTTGAAATATGCTCCTATTGTTAGATATCCTTTTGAGGATGTTGAAAACCCTTTGA" "AGCAATACTAGAAGTGTTTATTTGTAAAAAAGCCAAAAAACAAATTAAAACAGATCAAAAGACTATTTGTCTAAAATATT" "TTAAAAATGTCTAAAAAATGTCTAAATTTGTCGATGTAAAAATGAAAAGCTTCATATATTTAGACAAAAAGACATTTTTT" "AGACATTTTTAAGATATATACAAAAATTATCTAATATTTTGATTTCTATCCTGGAAAATCTTAATATCCCAAAAAAAATG" "TCTTTTTGTCTAAATTATTAAGCTTTTCATTTTTTACGCCGATATTTTTGACATTTTAGACAAATAATCATCAAAATAAT" "ATGTGATCAATATGCTAATTTATAATATTTCTTTCTAAGCTTTCTATATTTTGCCTTTAAATGCTCATATTTATTCTCTA" "ATTTATCCATTGCTTCATTGTGTTTCTTTGATTTCTTGTGATTAGAAGAATTACTTTTGGCATAAACTGCTCCACAAATA" "GTACATTTCACTTTTTCCTTGTAATATTCCCTTTGTTTTTCCTTATTTGCTTCATAATATTTTTTATGATACTCATTTTT" "TGATATGTCCATTATATTATAATATATTATTTTATATTAATATAATATTATTTTATATTATTTAGTATTATAGAGTAAAT" "AATATAAAAAATAATTTACTCTATTAAAATGATGAAACAATAATATAGCTAATCTACCTCAATATCTGCTAGTATATCTA" "TTTTTTTAATACCCTTCCAGAACCTAAAAGTGGATCTACCTTCCACTAATTTTAGTTCATCGCGGAGTATATCATTGAAT" "CTGTTTAATGATATATCCTTAAATTCTTTGTGTGAATTTTTAAATTTTTTCATATCAGACACTGGTACTTTATCATTATC" "TTTACCAGTGATTTCATAGTGCTCTTTAATGGTTTCAATAACAATATCATTTTGTTTTGTTTCAGCAGTCCATTTTTCTT" "TGACTTCAGGATCAAATTCAGGCATACCATTTTTCAAATAATCTTGGTATGCATCAAGGAAAAGATGTATAAATCCTTTC" "ATGAAATCTTTGGTCTCAAATTTTGATTCAATATTATTATCTTTGAGTTTGTAATAAGGTTTTTTATCGACATCTTCTTC" "ATCAACAAAAACATAAGGAAATTCATTATATACTAATCTATTCATTACAGCTTGATCAAAAGGTTCAATATTAGGAACAT" "CATTGAACATACAAAAAACAGTAAAATTAGGTTTGAAACTTTCTTCTGATTCTTGATGTTCTCTACCTACAATATTATCT" "CCACCAGATGCAAGTCTTTTTATCATAATACCATCAAGAACAGAACCTTTCATTGGCATTTCATTTGACATTAATATTCT" "AGTATGTGCAAGTTTATATGCCCATCTAAATTTTGCTGCTTCATCTCTTGAGTCATTCTTTTGATATAATAAATTTGCAC" "CATTAAAATCACCAATATAACCTCCAAAACAATATTGTAACATCATAATTAAATATGATTTGCCAGCATTTGATCTCCCA" "GGACAAAAATACATTTTTTTGAGTTTAATATCGCCAGCTAATGCACAAGCTAATGCTGTTATCATAGGTTTTGGATTATC" "AAACAATTTCTTGAATGATAATCGATATGCTTTTTTGACCAAATCTTTGTCATATTTAGGGAATTTGTACGGCACACCAC" "ATTTGAAAACTATTTTTGGATCAAATCCCTCAGTAAATGTTCCAGTCTTGAAATTATATATACCATCTTTAAATAAAAGA" "TATCCTAATGACGATTTTGCAGTTCTTTTTAACCAATTATTATCCTCTGATACGTCTTTAACAAAACCTACAACCTTTTC" "TCTTAATGTATGATCTGTACCATAATTTTTGGTTTTATGAACACCATTTTTATCAGTGGAAATAATAACATTGAGATACA" "TTTGATGTTTTCTCAAATAGCGGAAAAGTATATGATTATTATCATCAAACATACCAGTATTTTCATCAAATATGTATAAC" "TTTTTGTTACAGAATTTGAATTTTTCTGCTCCTTCTAATTCGAACAATTTTTCCTGACAATCACAATCACTGCTAACATA" "AATACTATGATCTGGTACTTCAAAATCCAATTCATAGTTCATTGGTTTTTCTTCTAGATTAATCTTGTATTCTGTCTTAT" "CATAGACATATTTTTCACAACCTTTCAATAAAACCTTAATATCCTCATCAAAGGAGTTAATCAACATACCATCAAAGCAT" "AATGTACTCACTTTAATTTTTTTGCTAGTGAAATAATCATACATTGCCATTAAACACTTATGTTCTAATCGTTGTGCTAA" "TATGGATAATACTACTGCTAATTTATTCTTACAATCATTATTATCCTTGATTTTCTCATAAAGACTTGTTTCTTTTTTAG" "CTACTTTTTCAGCTATGTATTCTGCTTCTTCCTTAAATTTTGTGAGGAATTTTAATTTTTTGGTTGGTGTGTAGCTTTCA" "CCATTATCATTAGTCAATTTATATGAACCAAGATAACATAATTTCAAGATCAGTTCTTTTGCCTTGTCTCTTGATATTTT" "ATGGAAACTACTTATGTCTTCGAGTATCTTTTCTCTTCTATTGACATAATCAACTAAATATGGACACAATATGTCTTTTT" "TTTTACAATATTGTGTAATCAATGTAGGATGTGAGTTTTTCATATCAATATCAGTATTAATTCCATTATTGATAAACCCT" "CTAATACTCTTTTTGAAGGACTGAAGACTTTGTCCCTTCTCAGCATATACCCTACCAGTATCTTCTAATTTATCTGAATA" "GTAATATTTCACCTTGACATATCCTATTTCATCTCCCTCTTCACGTTTTGTCTTGAACACTTTCTTGTAGTATGCACTTA" "ATTGTCTCTGAATGTCTTCATCTAAATCTTCTGCTGATAACAATCTCTTCAAGTTTTTCATACTAATTGTTTCTGTCAGT" "TTAATCACTGGCTTAACCACTTTCTTTTCAATTTTCTTAGTCACTTTCTTCTGTGTCTTACTCATTGTTTACTAGTATAT" "ATGGTACTAGATATATTATTTTTATATCATTTTATATTATTATATAGTGAAAAAATATTCAATATTATTTCTATAGTTTG" "AGCGTAATCTTTCGGCCTTACAATCCAACTTATACCCCCTTTTCTACGCTGTCTCAAAAATTTTGTGATGCGAATATATC" "CGTATCATAAAATTGTCACATGCTCGTTAATGAGCATGTCATGTAAAAATGTCATCAGCTGATTAATAAGCCGCTGAAAA" "ATACCAATATAATGGGAACTGAACAGCCGAAACTTCGGAAATATGACTGATATTTCCGAACCCTCTCCCTGTTCAGTTCC" "TACTACAAATCAACTATATCACGTCCTTATCCATATATCATCATACTCTTTCTTATGACCAAATACCATCATATACACAT" "AATTAAACATACTTATTATATTTGACACTAAATACTCAATCGGATTCATCTTCTTCATCTTCACTAACTAACACTTGATT" "TTTTTTTACAAAGAATGTCGGATATTCATTCTCTAAATATTTGTATTGTTTTTCGGTGATATTACTTATTTTCTTTAATT" "CTGACATTTGGTTTTGTAAATCAAGCATTTGTTTGTACATCTCATTCATATTATGTAATTCATAGATTTTTCTCATATAT" "ATTTGTGTTTGTGATTCATTTTCTTTTTTCAGTTTCTCATTTTCTTTACTGACCTCATTTAATTCCCTTTTCAAATCATT" "ATTTTCTGATTTAATCTCATTCAATTGTCTATGAAACATAATATTATTATCATTCATACTCGTTTGAAGTGATACTCTTA" "GATCATTTTTGTTCTTATTGGTTTGATCAATCTCTTGATACAATGTATTAATACAAGATTGTAATTTTTGTTTACAATCT" "TCGGGTAGCTTTACCAATATTTGTGAGATAATATTATTGATTTCCTCTTTATTTGACATCATATTGATAAGGTTATATTT" "TATATTATTTTTTCAATCAACGGAATATCTCGTAAATGGTACAAACATTCGGCCTTATAAAAATAATATTATGTAATAAT" "ATTACAATGGCTAAATTATATAAACTAGAGCTTGATGATTTGTTAAATGAGGACTTAAATGAGGCTGTCAAAATCAAAAA" "AGGATTTGACAGGAATATTAATTTTATGAAGATTAAGAAAAAATTACTTCGATCATTAAAGGTGAATTGTGCTATTGTCA" "ATGACAAAGAGGAGAGTGATTATAATAAAAGAATATCAACTACTAGAATAATATACATCATCATTGCACTTTTACAACTC" "AGAAATTGTTCCAGAATATCAGAAGCTGTTGCTGCTATCAAGAAATTCTCTGTCAAAAAAAATCTAAATGAAAGGGTGTT" "AGTAAAGATAGCTAAATCTGAAAAAAGAATAGTGGATAGGAAAACAAAGGAAGTATATGAAACTAAGCCAAGATATCGTG" "AAATGATTTTCCCTCTAGCATGGGTTGATAAGAAACTATTCAAAAAAATCATAAAAGATGATCAATGGGCCAAATTCAAT" "AACAATAAAGAACCCAGAAAACGTGTGCTTGACTACCTTTTAAATAATTTTGATTGTAATACTCATTCATTAAGATATGC" "TGGAATTAATTTTATGTTGAATGAAAAAAAGGTTCCTATGAACATTATCGCTAAATTTGTTGGTCATGTTAATACAGAAC" "AACTTGTTACATATACTCAACATCAAGCATTGGATGATGTTTTTGCTATGGATGTGTAAAAAGGCACCTCGATTATCCGG" "GGTATGTAGACATTGTCTTATCTTTTTTTATCTTTTTTTATCTTTGTAATTCTGTTGTACAATGTAGGTGTTTTTGCAAA" "GATAAACATTTTAAATGGTCATCATAGTGATTATCTCGTCTGGCTTGGCTTTATAATATTTACACATCTGATCAATGAAA" "TTTTTGAACTCATATATACTTAAATGCCTCAAAAGTATCCTAATCACACACCATCTACCACACGTTTTAATATCATTTGC" "TCTCTTTTGGAATTTAAATTCGTTGTAATGTAATTCATACGGACACTCTAACAGGAGTAATGATAGATATGGATAATATT" "GGTTTGATATTTTTCTGAAATGTAGAGGAATAAATTTGAGGCTATTATCGGGATATCCTCCATAGCTATTGAAAAATTCT" "ATGGTATTTTCATCTCTCTTGAATAAGCAACACCAGTGACCAAAGTTCTTTTTAGCTTCAAACAATAATATACATGCACC" "ATATGGACCTAATACCTCATCAATAGAATTGTAGTTAATCAAATCTGGATACAAAACTATTTGTGCTTTATTATCTAACA" "TACCTAAAATATCGGTATTTGAAAGGGCTACATTTTCATAATGTTTGATAGTTTTCATTTTATTATAATTATATGATAAT" "AAAATAAAATACTTCATACAGTTAGACCATATATGTTATGCTAAATGGATTGAATCCAGAACCTCCAATACCAGTAGTAA" "ATTGACCAAGATTATTGTCTTTGTAAACAACTATTTGACCATTTGATAATAGTGTTATTAATCCAGGATTAACTGGCCTA" "TTTCCATCATCAATCACAAATATTTCAAAATCTACTTGAATATTGGTGGTTGGTCTTAAATCAGCTGGTAATGCTCCAAT" "AGCTGAATTTATTACAGCTGATGATGTTGCATTTGCTTGGAAAGGAGGAAATGTTAGATTGACAAGATTATTTATTTTAG" "TGTATGCAACATTTTGTACTAATGGTGATGCCCATGGACCTGAAAGAGATAGGGAAAATGATCCAGTTGTCAAAGAAATA" "TTGCTAACTGCTTGAGTAATATCAGAAGCACCATACATTAAATGAGGAGGAGTAAAATTACTATTACTCCAGACTGTATT" "AGTATTTCCTGTTGGATTTGCTGGAACATTTGTCAGAGTATTAGATTTATTATTAATGTTGTACAGATTTGGTTGTAGTA" "ATGATGATATTGACATATATTATTATAATTAGATTCTAAATATATTTAGTGTAAATCCGCTTGCATTGGGTTGTATTTCC" "CCTCCTGAATTTGCAAAAGCGATAAAAATATTGTCTGATGGTGTCATATCAATAATACCATTTAGAGATGCACTCATTTG" "AATTCCAGCTCCTGAATAAATTACTGCCGTATTATAGACAGCTGTTCCACCATTTTTGAATATAGATATGATTAATGATC" "CATCTAATGTACCGATTGAGGTACCAATATATGTTACAGCAACATAAAATGGAGCAGTTTCCGTGGTGGTGAACACACCG" "TCGACATAGGAACAATTACCACCTAATGTTTTTGTGGTAAAAGCAACAGTACCAGTTGATACTTCTGGAATTGATGCTTG" "CGTGCCACCACTTGTTTCATATGTCGGTAAATCTCCAGAAAAATAAGTTCCTGAACCAACTGTTCCACCTGTATTACCTT" "TTGGACCCATTTCACCCTTAATTCCAACCCCAATATCACCTTTATCACCCTTTAACCCGTTAGTTCCGGGATCACCTTTG" "TCACCTTTTGGACCTGATGAACCAGTACCACTATTCAAATCAGCTGAACCAAACATTAAATGAGGCGGATTAAAAGCATT" "ATTACTCCATAAAGTATTGGATGCTGATGTTGGATTGGTGGGTAAATTTGTGAGAGAATGTGATTTAGAATTAATATTAT" "ATGTATTTGGTTGCAATAATATTGATACAGACATAATTATATTATCAAGATGATATAATTATTTCTCATAACTAACCAGG" "AGGAATAAAATATTGTCCTGTTATGTAAATTAAGACTGTTATTGATGTTGATGCTTGTATTTTCATACTTAACACAATCT" "CTGGTGTAGCTGCTGTAGCTGTTACAATACCATATTGTACAACACCTGTAGATGCACCTGTTATTGAAGCTGTTCCAATC" "ACATTATTACCATTAAAATCACCACTAGCAACTGGAATAGAAAAATATATTATTCCTTGTGCCATATTAGCAGGAATTGT" "TGCGTTTGTACAAATACTAAATGTTACAATATTACCTATTCTCGAATAAATAGATGTTGTTGGTGAAACACTTGTAAATA" "TTTGTGTGAATGAAACTGTTGGTGTCCAAATTCCTGATGATAATACTACTGCTGAACCTACATCACCTTTTAATCCCTTA" "TCACCCAAATTACCTTTTAATCCATTTGTACCAGTATCTCCTTTTAAACCTTTATCTCCACTTCCTGTTTCCCCTTTTAA" "ACCATTTATACCTGCATCACCTTTTAATCCTTTATCTCCACTCCCAGGATCTCCCTTTAATCCATTTGATCCAATATCTC" "CTTTGAGACCATCTAAACCTGCATCACCTTTTAATCCTTTATCGCCACTTCCAGGATCTCCTTTTAATCCATTTGATCCA" "ATATCTCCTTTTAATCCATTTGATCCAATATCTCCTTTTAATCCATTTGTTCCAGCTTCTCCTTTATCACCCTTTTCCCC" "TTTGTCTCCACCACCACCACCGCCGTTGGATAAATCTGTGGAACCAAACATTAAATGAGGTGGATTATGAGCATTATTAC" "TCCATATTGTATTACTCAAATTAGTGGGATTTGATGGTAAATTATTAAGAGTATGTGATTTAGAATTAATATTGTATGTA" "TTAGGTGAAAATAATGTGGATAACGACATATATTAATATTATATTATTAAATATGATATTAATTATTCTATTTACTTCTT" "ACTTTTGCATTTTTAATACTTTAAGTATTATTTTTTACCCTTATGATTTTTTCTACTCTGAACAGGTTTTTGCTTAGGTT" "GTTCCTCTTCTTCTTCATCACTTTCTTGTTCAGTCATAATTTTCAATCGGTGTTTTTGGTTCTCTAATTCTTGTCGGTAT" "GCTTTAAATTCTCTATTCATTCTTGATTTAATTTTACTTGTTCGATGTGCTCTGAATTCTCTAAGTTTTTTCTCATCATT" "AATATCTTCAATCAAATCATCTAATTGTTCTGTTGTCATATTGTCAAATAAATTATATAACGCATCCATATCAAATGGTT" "TTTCTACTCGTGGCATACCTCCACTATTGATCACTATCTCATTATTTTCATTATTGAATGGTGTGTAATTCATTATTATA" "TTATATATACATATATTTTTATCCTATTTTGACACATAATAGATACTTAATCTATCCATAAATCATAATATCACGAAGTT" "TTTTATTCATTTTTTGATAGACTTGACATACTTCTGTTTTTCTATGTTTAGGTCTATTGGATCTTGTGTATGTTTTTCCA" "CAAAATTCACAAATCAATACATCATTTGGATGTGCTTTAACTTTTTCTTCACCATATGTTCTCCCATTGTACGAATCTTT" "GTACACATTTTGACCATTTTTTTTCCCAATTGGACCTGGTCTTTGATTGAATCTTAATACACAAGTTGGTTGTCCAGCAT" "CCTCATTACGAATAACTTTATTTTTATATACTGCTTTTGGTACTGGTGTTTGTATATATTTCAATTCTTTTCTATTCATT" "CGAGTTAATTCTTTTTCTTCTGCGAAATCATATGGTATATCTCTTTTTAGCATTTAATATTACCTATAATATTTTTTTAC" "TAGTTACTGACGGAATAGAATTAGTATTAGAATTACTCTCAAATAATAAATATATACATAGGAATTTAATTTATCAACTT" "TTTATATAAAATAAATGTTATCCTACATAAAATATGATAAATTTAGCAAGCCTTTTGCCAAAATCAGTGGAGGGAAATAC" "AAGGGAAAAATGGCATATGTGAATGAAGAAAATGATAAAGGACGTAATGAATTAAAGCTACCCGAGGGTAAATTTGTACC" "ATATCCTAATCCTTTAACTAGAGAAGTAGTTTATGTAGCCGGACAAAGTGGTAGTGGTAAATCTACCTACGCAGCACAAT" "ATATCTACAACTACAAGAAATTATTTCCAGCTAACAAGGTGTTTGTGTTTTCAAGGTTAGAAATGGATCAAATATTAGCA" "TCACTTGGATGTATTCAAATACCTATTGATGAAGAACTATCAGAAATGGACGCAATTAGGGATATAAAGAATGCATTATG" "TTTGTTTGACGATATTGATACAATCAAAGACAAGAATCTAAAGAATTGTGTTTATGATATTCAAAATGATATTCTTGAAA" "CTGGACGTCATAAAAATATATATATTCTTGTCACATCCCATTTGATTAATGGTAATGATAAAAAAAATTCTAGAACTATC" "CTCAATGAAGCCCATAAAGTGACATTCTTTCCAAAGAGTGGTTCGTATGCCATAAATTATTTCCTCAAAAACTACATTGG" "AATACCTAAAAAAGACATAGATGAGATCTTAAAGATAAAATCAAGGTGGATCACTATCAATAAAGGTTATCCTTTGTACA" "TATTTTATGAAACGGGGGCAAAAACTATATAAATTTTATCTTATTATTTACCCCCAACAATCTTGGGGTCGAACAATCTT" "CGGGTATTTAATTGTCTAAAAAAAGGAATTTCGCGCCATTTAACTGATAAACAATCATAATTGATGATATTTTTACTATT" "TACTTTGATGAAATTTCCACTAATAGTAGTAAAAATTTATATTGGACAGAAATCTAGCCAACCCTTTTCTTCTTGGTAGG" "TTTCTTTTTGGATTTCTTCTTGGCCTTTTCTATCTCTTTCTCAGCCTTTTCTGCTTCATTCTCTAGCTTGGTAACAATTT" "TCTTTTGAGCAAGCATTTTCTTAACTAGTTTGTCTTTTTTAACCAATAATGCCTTTAATTTTACCTGTGATGCTTTGATC" "AATGATTTTTTCATAGTATCATCATCGACAATTAATTTAAGGTTTTTATATTGTTTAATCAATATTTTAGCATCATCCTG" "TAATTTCTTATATTTGAGTATTTCTTTGGTCAAATCGAGTTTCTTTTTACCAGCATTCTCCAATAATTTTGGATCAACAC" "TATATCTACCATACATCCTGACTTGATTTGCCTTAAGACACTGCTCTGGAGTACCAGCTTTTTTACCTTTCGGTATCTTT" "CCTATACCACAATACATTTTTAAGATATAATTAGATCATAAAAATGTATAAAGATTACATATTCATTAATTCTTCCAAAA" "TTCTTTGATCATTATTGGACATTTTGGGTGATCGTTTAGTTCTTTTGGATCCTCCTTTCAAAGATTTCTTGACAGGTTTT" "TTCTTAGTAATTTTCTTGGTTTTACTACCAGAACTCTTTTTCTTGGTTGTTTTACCAGATTTCTTTTTCAAAGCTTCATA" "TTGTTTCTTGGCTTTGGGACTTTGCATAGCTTCACCATATTTCATACCATGTTCTTTAGCAAATTTCTGTAAAAATGCTA" "CCCATGGTGATTTCTTAGCACCAGCTTTTGTACCAATACCACCTTTCTTAACCCTACGTTTGACCGTTCTACCACCTGAT" "AATACACCTGCTAAAACACCTCCTACTTCAGTGCCACAATTGGGACAAAAACATCCTCCTCTTGGAGCAGTTCCAGATAA" "TAATACTTTCTTAGACATAATAATATTATATGATATTATTAATAATCACGCATTTACATAATTATGATCATAATTATTGT"; std::string phage(PSUEDO); int start = rand() % (phage.length() - 1000) + 500; int width = 300; std::string to_insert = phage.substr(start, width); // get the center point int center = m_gr.Width() / 2; phage_site = center; phage_string = to_insert; m_seq = m_seq.substr(0, center + left_scramble.length()) + to_insert + m_seq.substr(center + left_scramble.length(), m_seq.length() - center - left_scramble.length()); } void SeqFrag::addIndels(size_t n) { if (n == 0 || m_seq.length() < 5000) return; size_t spacing = m_seq.length() / (n+1); spacing = std::max((size_t)5000, spacing); std::vector breaks; for (size_t i = spacing; i < m_seq.length() - 5000; i += spacing) { breaks.push_back(i); } breaks.push_back(m_seq.length() - 1); if (spacing <= 30) { std::cerr << "Simulated indel spacing < 30. Should be > 30, reduce number of indels" << std::endl; exit(EXIT_FAILURE); } if (breaks.size() < 2) return; if (m_gr.strand == '-') // flip it back to process, then flip at end SeqLib::rcomplement(m_seq); std::vector TCGA = {"T","C","G","A"}; // make a read sim to get random sized del ReadSim rs; // set up for the loop int del_cumsum = 0; int ins_cumsum = 0; std::vector frags; frags.push_back(m_seq.substr(0, spacing)); for (size_t i = 0; i < breaks.size() - 1; ++i) { // random size for events int ds = rs.getRandomIndelSize(); char etype = (rand() % 2 ? 'D' : 'I'); //etype = ds >= 50 ? 'D' ? 'I'; // events above 50 are always dels //char etype = 'D'; // get the bounds int start = etype == 'D' ? breaks[i] + ds : breaks[i]; int end = breaks[i+1]; std::string ins_string = ""; if (etype == 'I') { if (ds < 50) { // random sequences for small insertions for (int i = 0; i < ds; ++i) ins_string += TCGA[rand() % 4]; } else { // tandem duplications for large int len; std::string chrstring = m_gr.ChrName(SeqLib::BamHeader()); char * seq = faidx_fetch_seq(m_index, const_cast(chrstring.c_str()), m_gr.pos1 + breaks[i], m_gr.pos1 + breaks[i] + ds -1, &len); ins_string = std::string(seq); //std::cerr << ins_string.length() << " " << ds << std::endl; } } std::string lead_base = m_seq.substr(breaks[i]-1,1); std::string ref_seq = (etype == 'D' ? m_seq.substr(breaks[i], ds) : ""); std::string alt_seq = (etype == 'D' ? "" : ins_string); // make the indel object Indel ind(ds, etype, ref_seq, alt_seq, lead_base); if (etype == 'D') ind.gr = SeqLib::GenomicRegion(m_gr.chr, m_gr.pos1 + breaks[i]-1, m_gr.pos1 + breaks[i] + ds-1); else ind.gr = SeqLib::GenomicRegion(m_gr.chr, m_gr.pos1 + breaks[i], m_gr.pos1 + breaks[i] + 1); ind.frag_id = frag_id; // check that it's not on a blank region if (breaks[i] < 101 || m_seq.substr(breaks[i] - 100, 200).find("N") != std::string::npos) { start = breaks[i]; // don't put in the del or insert etype = 'D'; } else { // store the indel and update reference counter m_indels.push_back(ind); if (etype == 'D') del_cumsum += ds; else ins_cumsum += ds; } // cut the sequence out if (etype == 'D') { frags.push_back(m_seq.substr(start, end - start)); } else { // make the random insertion frags.push_back(ins_string + m_seq.substr(start, end - start)); } } std::string new_seq; for (auto& i : frags) { new_seq += i; } if (m_gr.strand == '-') // flip back if need be SeqLib::rcomplement(new_seq); m_seq = new_seq; } void SeqFrag::getSeqFromRef(faidx_t * findex) { int len; std::string chrstring = m_gr.ChrName(SeqLib::BamHeader()); char * seq = faidx_fetch_seq(findex, const_cast(chrstring.c_str()), m_gr.pos1-1, m_gr.pos2/*-1*/, &len); if (!seq) { std::cerr << "Failed to get reference sequence at " << m_gr << std::endl; return; } m_seq = std::string(seq); // reverse complement if need if (m_gr.strand == '-') { SeqLib::rcomplement(m_seq); } } int SeqFrag::getLeftSide() const { if (m_gr.strand == '-') return m_gr.pos2; return m_gr.pos1; } int SeqFrag::getRightSide() const { if (m_gr.strand == '-') return m_gr.pos1; return m_gr.pos2; } std::ostream& operator<<(std::ostream& out, const SeqFrag& s) { out << s.m_gr << "\t" << s.m_seq.length() << "\t" << (s.right_scramble.length() ? s.right_scramble : "N"); return out; } ================================================ FILE: src/svabautils/SeqFrag.h ================================================ #ifndef SNOWMAN_SEQFRAG_H__ #define SNOWMAN_SEQFRAG_H__ #include #include "SeqLib/BWAWrapper.h" #include "ReadSim.h" using SeqLib::GenomicRegion; class SeqFrag { public: SeqFrag(const GenomicRegion& gr, faidx_t * findex) : m_gr(gr), m_index(findex) {} void getSeqFromRef(faidx_t * findex); int getLeftSide() const; int getRightSide() const; friend std::ostream& operator<<(std::ostream& out, const SeqFrag& s); std::string m_seq; void addScrambledEnds(size_t left_len, size_t right_len); char getStrand() const { return m_gr.strand; } void addIndels(size_t n); void addIns(); void spikeMicrobe(); std::vector m_indels; int frag_id; std::string left_scramble = ""; std::string right_scramble = ""; GenomicRegion m_gr; int32_t phage_site = -1; std::string phage_string = ""; private: faidx_t * m_index; }; #endif ================================================ FILE: src/svabautils/SimGenome.cpp ================================================ #include "SimGenome.h" #include "SeqLib/GenomicRegionCollection.h" SimGenome::SimGenome(const SeqLib::GenomicRegion& gr, int nbreaks, int ndels, faidx_t * findex, bool scramble, int viral_count) : m_gr(gr) { std::vector index = {0}; size_t ii = 1; double viral_prob = viral_count ? (double)viral_count/((double)(nbreaks+1)) * 2 * 1000: 0; // int size_t avg_width = std::max((size_t)(m_gr.Width() / nbreaks ), (size_t)1000); size_t max_breaks = std::min((size_t)(m_gr.Width() / avg_width), (size_t)nbreaks); std::cerr << "avg width: " << avg_width << " max breaks: " << max_breaks << std::endl; size_t real_vcount = 0; // choose a set of random break points SeqLib::GRC grc; grc.add(SeqLib::GenomicRegion(m_gr.chr, m_gr.pos1, m_gr.pos1, '+')); size_t exp_break = 0; while(grc.size() < (size_t)(nbreaks)) { exp_break += avg_width; uint32_t r = exp_break + (rand() % 400) - 200; //m_gr.Width(); r += m_gr.pos1; char strand = (rand() % 2) ? '+' : '-'; grc.add(SeqLib::GenomicRegion(0, r, r, strand)); index.push_back(ii++); } // setup the scramble probability distribution std::vector scramble_size; for (size_t i = 1; i <= 200; ++i) { if (i <= 100) scramble_size.push_back(0); else scramble_size.push_back(i - 100); } grc.SortAndStretchRight(m_gr.pos2); //grc.sendToBED("segments.bed"); // shuffle the indices if (index.size() > 2) std::random_shuffle(index.begin() + 1, index.end() - 1); // seeded by srand //debug //for (auto& i : index) // std::cerr << i << "\t"; //std::cerr << std::endl; // get the sequence and add insertions / deletions double grcwidth = grc.TotalWidth(); size_t id = 0; for (auto& i : index) { SeqFrag sf(grc.at(i), findex); sf.frag_id = id; ++id; sf.getSeqFromRef(findex); if (rand() % 1000 < viral_prob && grc.at(i).strand == '+') { sf.spikeMicrobe(); ++real_vcount; } else { int nd = ceil((double)sf.m_seq.length() / grcwidth * (double)ndels); sf.addIndels(nd); } // scramble the ends if (scramble) { size_t right = 0; //if (i != 0 && sf.m_gr.strand != '+') // don't scramble left side of + //left = scramble_size[rand() % 200]; //else if (i != index.size() && sf.m_gr.strand != '-') // dont' scramble right side - if (i != index.size()) right = scramble_size[rand() % 200]; sf.addScrambledEnds(0, right); } m_sfv.push_back(sf); m_indels.insert(m_indels.end(), sf.m_indels.begin(), sf.m_indels.end()); } //debug std::ofstream sg; sg.open("segments.tsv", std::ios::out); for (auto& i : m_sfv) { sg << i << std::endl; } sg.close(); //debug size_t mmm = 0; for (auto& i : m_sfv) mmm += i.m_indels.size(); std::cerr << "TOTAL NUMBER OF INDELS IS " << mmm << " AND VIRAL INTEGRATION IS " << real_vcount << std::endl; } std::string SimGenome::printBreaks() const { std::stringstream ss; // MARCIN strand convention here. Left side strand for revComp frag is "-". // right side strand for non-revcomp is "-" for (size_t i = 1; i < m_sfv.size(); ++i) { //ss << m_sfv[i-1].m_gr.chr << "\t" << // m_sfv[i-1].getRightSide() << "\t" << (m_sfv[i-1].getStrand() == '+' ? '-' : '+') << "\t" << m_sfv[i-1].left_scramble << "\t" << //m_sfv[i].getLeftSide() << "\t" << (m_sfv[i].getStrand()) << "\t" << m_sfv[i].right_scramble << std::endl; ss << m_sfv[i-1].m_gr.chr << "\t" << m_sfv[i-1].getRightSide() << "\t" << (m_sfv[i-1].getStrand() == '+' ? '-' : '+') << "\t" << m_sfv[i].getLeftSide() << "\t" << (m_sfv[i].getStrand()) << "\t" << m_sfv[i-1].right_scramble << std::endl; } // loop through the tandem duplications and indels for (auto& i : m_indels) { //if (i.len >= 50 && i.type == 'D') // ss << i.gr.chr << "\t" << i.gr.pos1 << "\t-" << i.gr.pos2 << "\t+" << std::endl; if (i.len >= 50 && i.type == 'I') // tandem dup ss << i.gr.chr << "\t" << i.gr.pos2 << "\t-\t" << i.gr.pos1 << "\t+" << std::endl; } return ss.str(); } std::string SimGenome::printMicrobeSpikes() const { std::stringstream ss; for (auto& i : m_sfv) { if (i.phage_string.length()) { ss << i.m_gr.chr << "\t" << (i.m_gr.pos1 + i.phage_site) << "\t" << i.phage_string << std::endl; } } return ss.str(); } std::string SimGenome::getSequence() const { std::string s; for (auto& i : m_sfv) s += i.m_seq; return s; } std::ostream& operator<<(std::ostream& out, const SimGenome& s) { //for (auto& i : s.m_sfv) { // out << i << std::endl; //} return out; } ================================================ FILE: src/svabautils/SimGenome.h ================================================ #ifndef SNOWMAN_SIMGENOME_H__ #define SNOWMAN_SIMGENOME_H__ #include "SeqFrag.h" #include "ReadSim.h" class SimGenome { public: SimGenome(const SeqLib::GenomicRegion& gr, int nbreaks, int nindels, faidx_t * findex, bool scramble, int viral_count); void addBreak(int b); friend std::ostream& operator<<(std::ostream& out, const SimGenome& s); std::string getSequence() const; std::string printBreaks() const; std::vector m_indels; std::string printMicrobeSpikes() const; private: SeqLib::GenomicRegion m_gr; std::vector m_sfv; }; #endif ================================================ FILE: src/svabautils/SimTrainerWalker.cpp ================================================ #include "SimTrainerWalker.h" void SimTrainerWalker::train() { SeqLib::BamRecord r; size_t count = 0; while (GetNextRecord(r)) { ++count; // check occasionally that we still have read groups if (count % 10000 == 0) assert(r.GetZTag("RG").length()); if (count % 1000000 == 0) std::cerr << "...training on read " << SeqLib::AddCommas(count) << " at read at " << r.Brief() << std::endl; m_bam_stats.addRead(r); } } std::string SimTrainerWalker::printBamStats() const { std::stringstream ss; ss << m_bam_stats; return ss.str(); } ================================================ FILE: src/svabautils/SimTrainerWalker.h ================================================ #ifndef SNOWMAN_SIMTRAINER_WALKER_H__ #define SNOWMAN_SIMTRAINER_WALKER_H__ #include "SeqLib/BamReader.h" #include "BamStats.h" class SimTrainerWalker : public SeqLib::BamReader { public: SimTrainerWalker() {} void train(); std::string printBamStats() const; private: BamStats m_bam_stats; }; #endif ================================================ FILE: src/svabautils/assembly2vcf.cpp ================================================ #include "assembly2vcf.h" #include #include #include #include #include "vcf.h" #include "AssemblyBamWalker.h" #include "SnowmanBamWalker.h" #include "SnowmanUtils.h" #define MIN_ISIZE_FOR_DISC 700 faidx_t * findex; enum { OPT_NO_READS }; struct bidx_delete { void operator()(void* x) { hts_idx_destroy((hts_idx_t*)x); } }; static const char* shortopts = "hi:m:q:p:v:k:z:x:a:r:t:n:G:"; static const struct option longopts[] = { { "help", no_argument, NULL, 'h' }, { "assembly-bam", required_argument, NULL, 'i' }, { "tumor-reads-bam", required_argument, NULL, 't' }, { "normal-reads-bam", required_argument, NULL, 'n' }, { "indel-mask", required_argument, NULL, 'm' }, { "panel-of-normals", required_argument, NULL, 'q' }, { "id-string", required_argument, NULL, 'a' }, { "normal-bam", required_argument, NULL, 'n' }, { "threads", required_argument, NULL, 'p' }, { "region-file", required_argument, NULL, 'k' }, { "rules", required_argument, NULL, 'r' }, { "no-zip", no_argument, NULL, 'z' }, { "no-read-tracking", no_argument, NULL, OPT_NO_READS }, { "no-r2c-bam", no_argument, NULL, 'x' }, { "threads", required_argument, NULL, 'p' }, { "verbose", required_argument, NULL, 'v' }, { "reference-genome", required_argument, NULL, 'G' }, { NULL, 0, NULL, 0 } }; static const char *ASSEMBLY2VCF_USAGE_MESSAGE = "Usage: snowman assembly2vcf -i -r \n\n" " Description: Take a BAM (from de novo assembly) and aligned reads --> Call variants\n" "\n" " General options\n" " -v, --verbose Select verbosity level (0-4). Default: 1 \n" " -h, --help Display this help and exit\n" " -p, --threads Use NUM threads to run snowman. Default: 1\n" " Required input\n" " -i, --assembly-bam BAM from aligned de-novo assembly\n" " -t, --tumor-reads-bam BAM from tumor reads\n" " -n, --normal-reads-bam BAM from normal reads\n" " -G, --reference-genome Path to indexed reference genome to be used by BWA-MEM. Default is Broad hg19 (/seq/reference/...)\n" " Optional input\n" " -a, --id-string String specifying the analysis ID to be used as part of ID common.\n" " -r, --rules VariantBam style rules string to determine which reads to do assembly on. See documentation for default.\n" " -k, --region-file Set a region txt file. Format: one region per line, Ex: 1,10000000,11000000\n" " -q, --panel-of-normals Panel of normals gzipped txt file generated from snowman pon\n" " -m, --indel-mask BED-file with blacklisted regions for indel calling. Default /xchip/gistic/Jeremiah/Projects/HengLiMask/um75-hs37d5.bed.gz\n" " --no-read-tracking Don't track supporting reads. Reduces file size.\n" " --no-zip Don't tabix and gzip the output vcf files.\n" "\n"; namespace opt { static std::string args = "snowman "; static std::string assembly_bam; static std::string tumor_reads_bam; static std::string normal_reads_bam; static std::string analysis_id = "assembly2vcf_noid"; static size_t verbose = 1; static std::string rules = "{\"global\" : {\"duplicate\" : false, \"qcfail\" : false}, \"\" : { \"rules\" : [{\"isize\" : [MINS,0]},{\"rr\" : true},{\"ff\" : true}, {\"rf\" : true}, {\"ic\" : true}, {\"clip\" : 5, \"phred\" : 4}, {\"ins\" : true}, {\"del\" : true}, {\"mapped\": true , \"mate_mapped\" : false}, {\"mate_mapped\" : true, \"mapped\" : false}]}}"; static std::string indel_mask = ""; static std::string pon = ""; static bool no_reads = false; static bool zip = true; static size_t numThreads = 1; static bool no_r2c = false; static std::string regionFile = ""; static std::string refgenome = SnowTools::REFHG19; } void runAssembly2VCF(int argc, char** argv) { // parse the options parseAssembly2VCFOptions(argc, argv); // load the reference findex = fai_load(opt::refgenome.c_str()); // load the reference // set the min isize for FR discordants opt::rules.replace(opt::rules.find("MINS"), 4, std::to_string(MIN_ISIZE_FOR_DISC)); SnowmanBamWalker twalk, nwalk; SnowTools::MiniRulesCollection * mr; if (SnowTools::read_access_test(opt::tumor_reads_bam)) { twalk = SnowmanBamWalker(opt::tumor_reads_bam); twalk.prefix= "t000"; twalk.max_cov = 500; mr = new SnowTools::MiniRulesCollection(opt::rules, twalk.header()); twalk.SetMiniRulesCollection(*mr); } if (SnowTools::read_access_test(opt::normal_reads_bam)) { nwalk = SnowmanBamWalker(opt::normal_reads_bam); nwalk.prefix= "n000"; nwalk.max_cov = 500; mr = new SnowTools::MiniRulesCollection(opt::rules, twalk.header()); nwalk.SetMiniRulesCollection(*mr); } // read in the assembly bam file AssemblyBamWalker awalk(opt::assembly_bam); awalk.twalk = twalk; awalk.nwalk = nwalk; awalk.findex = findex; awalk.id = opt::analysis_id; if (SnowTools::read_access_test(opt::tumor_reads_bam)) awalk.tindex = std::shared_ptr(hts_idx_load(opt::tumor_reads_bam.c_str(), HTS_FMT_BAI), bidx_delete()); if (SnowTools::read_access_test(opt::normal_reads_bam)) awalk.nindex = std::shared_ptr(hts_idx_load(opt::normal_reads_bam.c_str(), HTS_FMT_BAI), bidx_delete()); else opt::normal_reads_bam = std::string(); std::cerr << awalk << std::endl; awalk.tbam = opt::tumor_reads_bam; awalk.nbam = opt::normal_reads_bam; awalk.numThreads = opt::numThreads; awalk.refGenome = opt::refgenome; awalk.walkDiscovar(); // make the VCFs std::cerr << "...loading the bps files for conversion to VCF" << std::endl; std::string file = opt::analysis_id + ".bps.txt.gz"; if (!SnowTools::read_access_test(file)) file = opt::analysis_id + ".bps.txt"; // put args into string for VCF later for (int i = 0; i < argc; ++i) opt::args += std::string(argv[i]) + " "; // make the header VCFHeader header; header.filedate = SnowmanUtils::fileDateString(); header.source = opt::args; header.reference = opt::refgenome; //boost::filesystem::path tfp(opt::tumor_reads_bam); //boost::filesystem::path nfp(opt::normal_reads_bam); // TODO fix this header.addSampleField(opt::tumor_reads_bam); header.colnames += "\t" + opt::tumor_reads_bam; header.addSampleField(opt::normal_reads_bam); header.colnames += "\t" + opt::normal_reads_bam; //header.addSampleField(nfp.filename().string()); //header.colnames += "\t" + nfp.filename().string(); //header.addSampleField(tfp.filename().string()); //header.colnames += "\t" + tfp.filename().string(); bool zip = false; VCFFile snowvcf(file, opt::analysis_id, twalk.header(), header); std::string basename = opt::analysis_id + ".unfiltered."; snowvcf.include_nonpass = true; snowvcf.writeIndels(basename, zip, false); snowvcf.writeSVs(basename, zip, false); basename = opt::analysis_id + ".assembly."; //"assembly."; snowvcf.include_nonpass = false; snowvcf.writeIndels(basename, zip, false); snowvcf.writeSVs(basename, zip, false); } // parse the command line options void parseAssembly2VCFOptions(int argc, char** argv) { bool die = false; if (argc <= 2) die = true; for (char c; (c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1;) { std::istringstream arg(optarg != NULL ? optarg : ""); switch (c) { case 'p': arg >> opt::numThreads; break; case 'a': arg >> opt::analysis_id; break; case 'm': arg >> opt::indel_mask; break; case 'q': arg >> opt::pon; break; case 'z': opt::zip = false; break; case 'h': die = true; break; case 'x': opt::no_r2c = true; break; case OPT_NO_READS: opt::no_reads = true; break; case 'i': arg >> opt::assembly_bam; break; case 't': arg >> opt::tumor_reads_bam; break; case 'n': arg >> opt::normal_reads_bam; break; case 'k': arg >> opt::regionFile; break; case 'r': arg >> opt::rules; break; case 'v': arg >> opt::verbose; break; case 'G': arg >> opt::refgenome; break; default: die= true; } } if (die) { std::cout << "\n" << ASSEMBLY2VCF_USAGE_MESSAGE; exit(EXIT_FAILURE); } } ================================================ FILE: src/svabautils/assembly2vcf.h ================================================ #ifndef SNOWMAN_ASSEMBLY2VCF_H__ #define SNOWMAN_ASSEMBLY2VCF_H__ void parseAssembly2VCFOptions(int argc, char** argv); void runAssembly2VCF(int argc, char** argv); #endif ================================================ FILE: src/svabautils/benchmark.cpp ================================================ #include "benchmark.h" #include #include #include #include #include #include #include #include "vcf.h" #include "Fractions.h" #include "SeqLib/BWAWrapper.h" #include "SeqLib/SeqLibCommon.h" #include "SeqLib/GenomicRegion.h" #include "ReadSim.h" #include "SeqFrag.h" #include "SimGenome.h" #include "KmerFilter.h" #include "PowerLawSim.h" #include "BamSplitter.h" #include "SnowmanUtils.h" #include "AlignedContig2.h" #include "SimTrainerWalker.h" #include "SnowmanAssemblerEngine.h" static std::vector snv_error_rates; static std::vector del_error_rates; static std::vector ins_error_rates; static std::vector coverages; static std::vector fractions; static SeqLib::GRC regions; static Fractions fractions_bed; static SeqLib::BamReader bwalker; static faidx_t * findex; #define DEFAULT_SNV_RATE 0.01 #define DEFAULT_DEL_RATE 0.05 #define DEFAULT_INS_RATE 0.05 #define DEFAULT_COV 10 namespace opt { static std::string refgenome = "/seq/references/Homo_sapiens_assembly19/v1/Homo_sapiens_assembly19.fasta"; static int mode = -1; static size_t readlen = 101; static int num_runs = 100; static uint32_t seed = 0; static std::string regionFile = ""; static std::string bam = ""; static int isize_mean = 250; static int isize_sd = 50; static int nbreaks = 10; static int nindels = 10; static std::string string_id = "noid"; static std::string frac_bed_file; static bool scramble = false; static int viral_count = 0; static std::string blacklist; static std::set prefixes; } enum { OPT_ASSEMBLY, OPT_SIMBREAKS, OPT_ISIZE_MEAN, OPT_ISIZE_SD, OPT_SPLITBAM, OPT_SCRAMBLE, OPT_POWERSIM, OPT_REALIGN, OPT_BLACKLIST, OPT_REALIGN_SV }; static const char *BENCHMARK_USAGE_MESSAGE = "Usage: snowman benchmark\n\n" " Description: Various benchmarking tests for Snowman\n" "\n" " General options\n" " -v, --verbose Select verbosity level (0-4). Default: 1 \n" " -G, --reference-genome Indexed ref genome for BWA-MEM. Default (Broad): /seq/reference/...)\n" " -s, --seed Seed for the random number generator\n" " -A, --string-id String to name output files with (e.g. _0_01.bam\n" " Choose one of the following:\n" " --test-assembly Generate single-end reads from small contigs to test assembly/remapping\n" " --sim-breaks-power Simulate rearrangements and indels and output paired-end reads\n" " --split-bam Divide up a BAM file into smaller sub-sampled files, with no read overlaps between files. Preserves read-pairs\n" " --realign-test Randomly sample the reference genome and test ability of BWA-MEM to realign to reference for different sizes / error rates\n" " --realign-sv-test Make an SV (rearrangment) and simulate contigs from it. Test size of contigs vs alignment accuracy for SVs\n" " Shared Options for Test and Simulate:\n" " -c, --read-covearge Desired coverage. Input as comma-separated to test multiple (test assembly)\n" " -b, --bam BAM file to train the simulation with\n" " -k, --regions Regions to simulate breaks or test assembly\n" " -E, --snv-error-rate The random SNV error rate per base. Input as comma-separated to test multiple (test assembly)\n" " -I, --ins-error-rate The random insertion error rate per read. Input as comma-separated to test multiple (test assembly)\n" " -D, --del-error-rate The random deletion error rate per read. Input as comma-separated to test multiple (test assembly)\n" " Test Assembly (--test-assembly) Options:\n" " -n, --num-runs Number of random trials to run\n" // " Simulate Breaks (--sim-breaks) Options:\n" //" --isize-mean Desired mean insert size for the simulated reads\n" //" --isize-sd Desired std. dev. forinsert size for the simulated reads\n" //" -M, --viral-integration Number of segments to integrate viruses into. (Reduces amount of space for indels)\n" //" --add-scrambled-inserts Add scrambled inserts at junctions, randomly between 0 and 100 bp with p(0) = 50% and p(1-100) = 50%;\n" " Simulate Breaks with Power Law(--sim-breaks-power) Options:\n" " --blacklist BED file specifying blacklist regions not to put breaks in\n" " -R, --num-rearrangements Number of rearrangements to simulate\n" " -X, --num-indels Number of indels to simulate\n" " Split Bam (--split-bam) Options:\n" " -f, --fractions Fractions to split the bam into\n" "\n"; static const char* shortopts = "haG:c:n:s:k:b:E:I:D:R:X:A:f:M:"; static const struct option longopts[] = { { "help", no_argument, NULL, 'h' }, { "reference-genome", required_argument, NULL, 'G' }, { "string-id", required_argument, NULL, 'A' }, { "seed", required_argument, NULL, 's' }, { "num-runs", required_argument, NULL, 'n' }, { "regions", required_argument, NULL, 'k' }, { "bam", required_argument, NULL, 'b' }, { "read-coverage", required_argument, NULL, 'c' }, { "snv-error-rate", required_argument, NULL, 'E' }, { "del-error-rate", required_argument, NULL, 'D' }, { "ins-error-rate", required_argument, NULL, 'I' }, { "num-rearrangements", required_argument, NULL, 'R' }, { "fractions", required_argument, NULL, 'f' }, { "num-indels", required_argument, NULL, 'X' }, { "viral-integration", required_argument, NULL, 'M' }, { "isize-mean", required_argument, NULL, OPT_ISIZE_MEAN}, { "isize-sd", required_argument, NULL, OPT_ISIZE_SD}, { "test-assembly", no_argument, NULL, OPT_ASSEMBLY}, { "blacklist", required_argument, NULL, OPT_BLACKLIST}, { "sim-breaks-power", no_argument, NULL, OPT_POWERSIM}, { "sim-breaks", no_argument, NULL, OPT_SIMBREAKS}, { "split-bam", no_argument, NULL, OPT_SPLITBAM}, { "realign-sv-test", no_argument, NULL, OPT_REALIGN_SV}, { "add-scrambled-inserts",no_argument, NULL, OPT_SCRAMBLE}, { "realign-test",no_argument, NULL, OPT_REALIGN}, { NULL, 0, NULL, 0 } }; void runBenchmark(int argc, char** argv) { parseBenchmarkOptions(argc, argv); opt::prefixes.insert(opt::bam); std::cerr << "-----------------------------------------" << std::endl << "--- Running Snowman Benchmarking Test ---" << std::endl << "-----------------------------------------" << std::endl; if (opt::mode == OPT_ASSEMBLY) std::cerr << "********* RUNNING ASSEMBLY TEST ***********" << std::endl; else if (opt::mode == OPT_SIMBREAKS) std::cerr << "********* RUNNING SIMULATE BREAKS ***********" << std::endl; else if (opt::mode == OPT_SPLITBAM) std::cerr << "********* RUNNING SPLIT BAM ***********" << std::endl; else if (opt::mode == OPT_REALIGN) std::cerr << "********* RUNNING REALIGN TEST ***********" << std::endl; else if (opt::mode == OPT_REALIGN_SV) std::cerr << "********* RUNNING REALIGN SV TEST ***********" << std::endl; if (opt::mode == OPT_ASSEMBLY || opt::mode == OPT_SIMBREAKS) { std::cerr << " Error rates:" << std::endl; std::cerr << errorRateString(snv_error_rates, "SNV") << std::endl; std::cerr << errorRateString(ins_error_rates, "Del") << std::endl; std::cerr << errorRateString(del_error_rates, "Ins") << std::endl; std::cerr << errorRateString(coverages, "Coverages") << std::endl; std::cerr << " Insert size: " << opt::isize_mean << "(" << opt::isize_sd << ")" << std::endl; } else if (opt::mode == OPT_SPLITBAM) { std::cerr << errorRateString(fractions, "Fractions") << std::endl; } // open the BAM if (opt::bam.length() && SeqLib::read_access_test(opt::bam)) { assert(bwalker.Open(opt::bam)); } else if (opt::mode == OPT_REALIGN || opt::mode == OPT_SPLITBAM || opt::mode == OPT_REALIGN_SV) { std::cerr << "NEED TO INPUT VALID BAM (perhaps just to get header info)" << std::endl; exit(EXIT_FAILURE); } // parse the region file if (opt::regionFile.length()) { if (SeqLib::read_access_test(opt::regionFile)) { regions = SeqLib::GRC(opt::regionFile, bwalker.Header()); regions.MergeOverlappingIntervals(); } // samtools format else if (opt::regionFile.find(":") != std::string::npos && opt::regionFile.find("-") != std::string::npos) { if (bwalker.Header().isEmpty()) { std::cerr << "Error: To parse a samtools style string, need a BAM header. Input bam with -b" << std::endl; exit(EXIT_FAILURE); } regions.add(SeqLib::GenomicRegion(opt::regionFile, bwalker.Header())); } else { std::cerr << "Can't parse the regions. Input as BED file or Samtools style string (requires BAM with -b to for header info)" << std::endl; exit(EXIT_FAILURE); } if (!regions.size()) { std::cerr << "ERROR: Must input a region to run on " << std::endl; exit(EXIT_FAILURE); } } // seed the RNG if (opt::mode != OPT_SPLITBAM) { if (opt::seed == 0) opt::seed = (unsigned)time(NULL); srand(opt::seed); std::cerr << " Seed: " << opt::seed << std::endl; } // read the fractions file if (opt::frac_bed_file.length() && opt::mode == OPT_SPLITBAM) { fractions_bed.readFromBed(opt::frac_bed_file, bwalker.Header()); // fractions_bed.readBEDfile(opt::frac_bed_file.length(), 0, bwalker.header()); } findex = fai_load(opt::refgenome.c_str()); // load the reference SeqLib::GRC blacklist; if (opt::mode == OPT_POWERSIM && !opt::blacklist.empty()) { std::cerr << "...reading blacklist file " << opt::blacklist << std::endl; blacklist = SeqLib::GRC(opt::blacklist, bwalker.Header()); blacklist.CreateTreeMap(); std::cerr << "...read in " << blacklist.size() << " blacklist regions " << std::endl; } // if (opt::mode == OPT_ASSEMBLY) assemblyTest(); else if (opt::mode == OPT_SIMBREAKS) genBreaks(); else if (opt::mode == OPT_SPLITBAM) splitBam(); else if (opt::mode == OPT_REALIGN) realignRandomSegments(); else if (opt::mode == OPT_REALIGN_SV) realignBreaks(); else if (opt::mode == OPT_POWERSIM) { std::cerr << "...opening output" << std::endl; std::ofstream outfasta; SnowmanUtils::fopen("tumor_seq.fa", outfasta); std::ofstream events; SnowmanUtils::fopen("events.txt", events); PowerLawSim(findex, opt::nbreaks, -1.0001, blacklist, outfasta, events); outfasta.close(); events.close(); } else std::cerr << "Mode not recognized. Chose from: --test-assembly, --sim-breaks, --split-bam" << std::endl; } std::string genBreaks() { // train on the input BAM std::vector quality_scores; SeqLib::GenomicRegion v(0, 1000000,2000000); /* std::vector v = { SeqLib::GenomicRegion(0, 1000000, 2000000) SeqLib::GenomicRegion(0, 60000000,70000000), SeqLib::GenomicRegion(1, 1000000, 10000000), SeqLib::GenomicRegion(1, 60000000,70000000), SeqLib::GenomicRegion(2, 1000000, 10000000), SeqLib::GenomicRegion(3, 60000000,70000000), SeqLib::GenomicRegion(16, 1000000,1110000), SeqLib::GenomicRegion(17, 1000000,1110000), SeqLib::GenomicRegion(21, 1000000,1110000) };*/ /* SimTrainerWalker stw(opt::bam); stw.setBamWalkerRegions(v); stw.train(); std::ofstream bamstats("bam_stats.txt"); bamstats << stw.printBamStats() << std::endl; bamstats.close(); */ bwalker.SetRegion(v); SeqLib::BamRecord r; std::cerr << "...sampling reads to learn quality scores" << std::endl; while (bwalker.GetNextRecord(r)) { std::string ss = r.Sequence(); if (ss.find("AAAAAAAA") == std::string::npos && ss.find("TTTTTTTT") == std::string::npos) // already handle homopolymers quality_scores.push_back(r.Qualities()); } std::cerr << "...loading the reference genome" << std::endl; SeqLib::GenomicRegion gg = regions[0]; std::cerr << "--Generating breaks on: " << gg << std::endl; std::cerr << "--Total number of rearrangement breaks: " << opt::nbreaks << std::endl; std::cerr << "--Total (approx) number of indels: " << opt::nindels << std::endl; SimGenome sg(gg, opt::nbreaks, opt::nindels, findex, opt::scramble, opt::viral_count); std::string final_seq = sg.getSequence(); // write the final seq to a file std::ofstream fseq; fseq.open("tumor_seq.fa", std::ios::out); fseq << ">tumor\n" << final_seq << std::endl; fseq.close(); //exit(1); ReadSim rs; std::ofstream ind; ind.open("indels.tsv", std::ios::out); for (auto& i : sg.m_indels) ind << i << std::endl; ind.close(); std::ofstream con; con.open("connections.tsv", std::ios::out); con << sg.printBreaks(); con.close(); std::ofstream mic; mic.open("microbe_spikes.tsv", std::ios::out); mic << sg.printMicrobeSpikes(); mic.close(); exit(0); rs.addAllele(final_seq, 1); // sample paired reads std::vector reads1; std::vector reads2; std::vector qual1; std::vector qual2; std::cerr << "Simulating reads at coverage of " << coverages[0] << " del rate " << del_error_rates[0] << " ins rate " << ins_error_rates[0] << " snv-rate " << snv_error_rates[0] << " isize " << opt::isize_mean << "(" << opt::isize_sd << ")" << std::endl; rs.samplePairedEndReadsToCoverage(reads1, reads2, qual1, qual2, coverages[0], snv_error_rates[0], ins_error_rates[0], del_error_rates[0], opt::readlen, opt::isize_mean, opt::isize_sd, quality_scores); assert(reads1.size() == reads2.size()); // write the paired end fastq. Give random errors std::cerr << "...writing/errorring reads 1" << std::endl; std::ofstream pe1; pe1.open("paired_end1.fastq", std::ios::out); size_t ccc= 0; for (size_t i = 0; i < reads1.size(); ++i) { rs.baseQualityRelevantErrors(reads1[i], qual1[i]); pe1 << "@r" << ccc++ << std::endl << reads1[i] << std::endl << "+\n" << qual1[i] << std::endl; } pe1.close(); std::cerr << "...writing/erroring reads 2" << std::endl; std::ofstream pe2; pe2.open("paired_end2.fastq", std::ios::out); ccc= 0; for (size_t i = 0; i < reads2.size(); ++i) { //std::string qs = quality_scores[rand() % quality_scores.size()]; rs.baseQualityRelevantErrors(reads2[i], qual2[i]); pe2 << "@r" << ccc++ << std::endl << reads2[i] << std::endl << "+\n" << qual2[i] << std::endl; } pe2.close(); std::cerr << "********************************" << std::endl; std::cerr << "Suggest running: " << std::endl; std::cerr << "bwa mem -t 10 $REFHG19 paired_end1.fastq paired_end2.fastq | samtools sort -O bam -T /tmp -l 9 -m 16G > sim.bam && samtools index sim.bam" << std::endl; std::cerr << "snowman benchmark --split-bam -f 0.3,0.6 -b $n11 -k -A norm" << std::endl; std::cerr << "samtools merge sim_wnormal.bam sim.bam norm_0.30_subsampled.bam" << std::endl; std::cerr << "samtools index norm_0.60_subsampled.bam && samtools index sim_wnormal.bam" << std::endl; //std::cerr << "bwa mem $REFHG19 paired_end1.fastq paired_end2.fastq | samtools sort -O bam -T /tmp -l 9 -m 16G > sim.bam && samtools sort sim.bam" << std::endl; //std::cerr << "bwa mem $REFHG19 paired_end1.fastq paired_end2.fastq > sim.sam && samtools view sim.sam -Sb > tmp.bam && " << // "samtools sort -m 4G tmp.bam sim && rm sim.sam tmp.bam && samtools index sim.bam" << std::endl; std::cerr << "********************************" << std::endl; return ""; } void splitBam() { BamSplitter bs(opt::seed); assert(bs.Open(opt::bam)); // set the regions to split on if (regions.size()) bs.SetMultipleRegions(regions); std::cerr << "...set " << regions.size() << " walker regions " << std::endl; if (fractions_bed.size()) { bs.fractionateBam(opt::string_id + ".fractioned.bam", fractions_bed); } else { // set the output bams std::vector fnames; for (auto& i : fractions) { std::stringstream ss; ss.precision(2); ss << opt::string_id << "_" << i << "_subsampled.bam"; fnames.push_back(ss.str()); } bs.setWriters(fnames, fractions); bs.splitBam(); } } void assemblyTest() { SeqLib::GenomicRegion gr(16, 7565720, 7575000); //"chr17:7,569,720-7,592,868"); std::cerr << "...loading the reference genome" << std::endl; findex = fai_load(opt::refgenome.c_str()); // load the reference std::string local_ref = ""; // debug // getRefSequence("16", gr, findex); size_t seqlen = local_ref.length(); if (seqlen * 2 <= opt::readlen) { std::cerr << "**** Read length must be > 2 * sequence length" << std::endl; exit(EXIT_FAILURE); } // make the BWA Wrapper std::cerr << "...constructing local_seq index" << std::endl; SeqLib::BWAWrapper local_bwa; local_bwa.ConstructIndex({{"local_ref", local_ref, std::string()}}); // align local_seq to itself SeqLib::BamRecordVector self_align; local_bwa.AlignSequence(local_ref, "local_ref", self_align, false, false, 0); // write out the index local_bwa.WriteIndex("local_ref.fa"); std::ofstream fa; fa.open("local_ref.fa"); fa << ">local_ref" << std::endl << local_ref << std::endl; fa.close(); std::cout << "coverage\tnumreads\tnumcontigs\tnumfinal\tcontig_coverage\tkmer_corr\terror_rate" << std::endl; for (int rep = 0; rep < opt::num_runs; ++rep) { std::cerr << "...assembly test. Working on iteration " << rep << " of " << opt::num_runs << std::endl; for (int k = 1; k <= 1; ++k) { for (auto& c : coverages) { for (auto& E : snv_error_rates) { for (auto& D : del_error_rates) { for (auto& I : ins_error_rates) { // make the read vector ReadSim rs; rs.addAllele(local_ref, 1); // sample reads randomly //std::cerr << "...making read vector" << std::endl; std::vector reads; rs.sampleReadsToCoverage(reads, c, E, I, D, opt::readlen); // sample paired reads //std::cerr << "...making paired-end read vector" << std::endl; std::vector reads1; std::vector reads2; std::vector qual1; std::vector qual2; std::vector qual = {std::string('I',opt::readlen)}; rs.samplePairedEndReadsToCoverage(qual1, qual2, reads1, reads2, c, E, I, D, opt::readlen, 350, 50, qual); assert(reads1.size() == reads2.size()); // align these reads to the local_seq //std::cerr << "...realigned to local_seq" << std::endl; SeqLib::BamRecordVector reads_to_local; int count = 0; for (auto& i : reads) { if (i.find("N") == std::string::npos) { SeqLib::BamRecordVector read_hits; local_bwa.AlignSequence(i, "read_" + std::to_string(++count), read_hits, false,false, 0); if (read_hits.size()) reads_to_local.push_back(read_hits[0]); } } // kmer filter the reads KmerFilter kmer; if (k == 1) kmer.correctReads(reads_to_local, reads_to_local); //std::cerr << " Attempted align of " << reads.size() << " to local_seq. Got hits on " << reads_to_local.size() << std::endl; // make plot of reads to contig //AlignedContig sa(self_align); //sa.alignReads(reads_to_local); // assemble them //std::cerr << "...assembling" << std::endl; double error_rate = 0; if (k == 0) error_rate = 0.05; int min_overlap = 35; SnowmanAssemblerEngine engine("test", error_rate, min_overlap, opt::readlen); engine.fillReadTable(reads_to_local); engine.performAssembly(2); // align them back SeqLib::BamRecordVector contigs_to_local; for (auto& i : engine.getContigs()) { SeqLib::BamRecordVector ct_alignments; local_bwa.AlignSequence(i.Seq, i.Name, ct_alignments, false, false, 0); AlignedContig ac(ct_alignments, opt::prefixes); //ac.alignReads(reads_to_local); //std::cout << ac; contigs_to_local.insert(contigs_to_local.begin(), ct_alignments.begin(), ct_alignments.end()); } // write the results SeqLib::GRC grc(contigs_to_local); grc.MergeOverlappingIntervals(); double width = 0; for (auto& i : grc) width = std::max(width, (double)i.Width()); width = width / local_ref.length(); std::cout << c << "\t" << reads_to_local.size() << "\t" << engine.getContigs().size() << "\t" << grc.size() << "\t" << width << "\t" << k << "\t" << E << std::endl; if (k == 1 && c == 20 && E == 0.01) { // write out the contig to local ref bam SeqLib::BamWriter bw2; bw2.Open("contigs_to_ref.bam"); bw2.SetHeader(local_bwa.HeaderFromIndex()); bw2.WriteHeader(); for (auto& i : contigs_to_local) bw2.WriteRecord(i); // write the paired end fasta std::ofstream pe1; pe1.open("paired_end1.fa", std::ios::out); size_t ccc= 0; for (auto& i : reads1) pe1 << ">r" << ccc++ << std::endl << i << std::endl; pe1.close(); std::ofstream pe2; pe2.open("paired_end2.fa", std::ios::out); ccc= 0; for (auto& i : reads2) pe2 << ">r" << ccc++ << std::endl << i << std::endl; pe2.close(); // write out the read to local ref aligned bam SeqLib::BamWriter bw; bw.Open("reads_to_ref_" + std::to_string(c) + ".bam"); bw.SetHeader(local_bwa.HeaderFromIndex()); bw.WriteHeader(); for (auto& i : reads_to_local) bw.WriteRecord(i); SeqLib::BamWriter bwk; bwk.Open("k.bam"); bwk.SetHeader(local_bwa.HeaderFromIndex()); bwk.WriteHeader(); for (auto& i : reads_to_local) { std::string kc = i.GetZTag("KC"); if (kc.length()) i.SetSequence(kc); bwk.WriteRecord(i); } } } // end kmer loop } // end error loop } // end coverage } } } } void parseBenchmarkOptions(int argc, char** argv) { bool die = false; if (argc < 2) die = true; std::string del_er; std::string snv_er; std::string ins_er; std::string covs; std::string frac; std::string t; for (char c; (c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1;) { std::istringstream arg(optarg != NULL ? optarg : ""); switch (c) { case 'h': die = true; break; case OPT_ASSEMBLY: opt::mode = OPT_ASSEMBLY; break; case OPT_REALIGN: opt::mode = OPT_REALIGN; break; case OPT_REALIGN_SV: opt::mode = OPT_REALIGN_SV; break; case OPT_POWERSIM: opt::mode = OPT_POWERSIM; break; case OPT_BLACKLIST: arg >> opt::blacklist; break; case 'G': arg >> opt::refgenome; break; case 'n': arg >> opt::num_runs; break; case 's': arg >> opt::seed; break; case 'c': arg >> covs; break; case 'k': arg >> opt::regionFile; break; case 'b': arg >> opt::bam; break; case 'E': arg >> snv_er; break; case 'R': arg >> opt::nbreaks; break; case 'X': arg >> opt::nindels; break; case 'D': arg >> del_er; break; case 'I': arg >> ins_er; break; case 'A': arg >> opt::string_id; break; case 'f': arg >> frac; break; case 'M': arg >> opt::viral_count; break; case OPT_SIMBREAKS: opt::mode = OPT_SIMBREAKS; break; case OPT_SPLITBAM: opt::mode = OPT_SPLITBAM; break; case OPT_ISIZE_MEAN: arg >> opt::isize_mean; break; case OPT_ISIZE_SD: arg >> opt::isize_sd; break; case OPT_SCRAMBLE: opt::scramble = true; break; default: die= true; } } if (die) { std::cerr << "\n" << BENCHMARK_USAGE_MESSAGE; exit(EXIT_FAILURE); } // parse the error rates snv_error_rates = parseErrorRates(snv_er); del_error_rates = parseErrorRates(del_er); ins_error_rates = parseErrorRates(ins_er); coverages = parseErrorRates(covs); // parse the fractions string or read file if (!SeqLib::read_access_test(frac)) fractions = parseErrorRates(frac); else opt::frac_bed_file = frac; // check that the bam is valid if (opt::mode == OPT_SIMBREAKS && !SeqLib::read_access_test(opt::bam)) { std::cerr << "ERROR: Input BAM required for --sim-breaks" << std::endl; exit(EXIT_FAILURE); } // set the default error rates if (!snv_error_rates.size()) snv_error_rates.push_back(DEFAULT_SNV_RATE); if (!del_error_rates.size()) del_error_rates.push_back(DEFAULT_DEL_RATE); if (!ins_error_rates.size()) ins_error_rates.push_back(DEFAULT_INS_RATE); if (!coverages.size()) coverages.push_back(DEFAULT_COV); if ((!fractions.size() && !opt::frac_bed_file.length()) && opt::mode == OPT_SPLITBAM) { std::cerr << "Error: Must specify fractions to split into with -f (e.g. -f 0.1,0.8), or as BED file" << std::endl; exit(EXIT_FAILURE); } } // parse the error rates string from the options std::vector parseErrorRates(const std::string& s) { std::vector out; std::istringstream is(s); std::string val; while(std::getline(is, val, ',')) { try { out.push_back(std::stod(val)); } catch (...) { std::cerr << "Could not convert " << val << " to number. If you're inputting a file not CSV, then check file exists" << std::endl; exit(EXIT_FAILURE); } } return out; } std::string errorRateString(const std::vector& v, const std::string& name) { std::stringstream ss; ss << " " << name << ":"; for (auto& i : v) ss << " " << i << ","; std::string out = ss.str(); out.pop_back(); return out; } void realignBreaks() { ReadSim rs; std::cerr << "...loading reference genome" << std::endl; SeqLib::BWAWrapper bwa; bwa.LoadIndex(opt::refgenome); std::ofstream results; SnowmanUtils::fopen("realign.sv.results.csv", results); results << "id\tsize\tAlign1\tAlign2\tAlignBoth" << std::endl; const int RUN_NUM = 1000; //size_t count = 0; std::string chrstring1, chrstring2; for (int k = 0; k < RUN_NUM; ++k) { for (int i = 30; i < 500; i += 10) { SeqLib::GenomicRegion gr1, gr2; gr1.Random(); gr2.Random(); gr1.pos2 = gr1.pos1 + i/2; ; //+ k - 1 + (ins == 0 ? iii : 0); // add sequence to deletion ones, because it gets removed later gr2.pos2 = gr2.pos2 + i/2; chrstring1 = bwalker.Header().IDtoName(gr1.chr); //std::to_string(gr.chr+1); chrstring2 = bwalker.Header().IDtoName(gr2.chr); //std::to_string(gr.chr+1); int len; char * seq1 = faidx_fetch_seq(findex, const_cast(chrstring1.c_str()), gr1.pos1, gr1.pos2 - 1, &len); char * seq2 = faidx_fetch_seq(findex, const_cast(chrstring2.c_str()), gr2.pos1, gr2.pos2 - 1, &len); std::string s1, s2; if (seq1) s1 = std::string(seq1); else continue; if (s1.find("N") != std::string::npos) continue; if (seq2) s2 = std::string(seq2); else continue; if (s2.find("N") != std::string::npos) continue; if (rand() % 2) SeqLib::rcomplement(s2); std::string ss = s1 + s2; SeqLib::BamRecordVector aligns; bwa.AlignSequence(ss, std::to_string(i), aligns, false, 0.90, 2); bool a1 = false; bool a2 = false; for (auto& jj : aligns) { if (gr1.GetOverlap(jj.asGenomicRegion())) a1 = true; if (gr2.GetOverlap(jj.asGenomicRegion())) a2 = true; } results << k << "\t" << i << "\t" << a1 << "\t" << a2 << "\t" << (a1 && a2) << std::endl; } } } void realignRandomSegments() { ReadSim rs; std::cerr << "...loading reference genome" << std::endl; SeqLib::BWAWrapper bwa; bwa.LoadIndex(opt::refgenome); std::ofstream results; SnowmanUtils::fopen("realign.results.csv", results); results << "ID" << "\t" << "chr" << "\t" << "pos1" << "\t" << "pos2" << "\t" << "width" << "\t" << "num_aligns" << "\t" << "correct_hit_num" << "\t" << "snv_rate" << "\t" << "del_size" << "\t" << "ins_size" << std::endl; const int RUN_NUM = 1000; size_t tcount = 0; std::string chrstring; std::vector widths = {70, 101, 250}; std::vector snv_rate = {0, 0.01, 0.05}; std::vector indel_size = {0, 1, 5, 20, 50}; for (size_t ins = 0; ins < 2; ++ins) { //insertion or del for (auto& iii : indel_size) { for (auto& snv : snv_rate) { for (auto& k : widths) { ++tcount; for (size_t i = 0; i < RUN_NUM; ++i) { if (i == 0) std::cerr << "...working on width " << k << " and SNV rate " << snv << "\t" << (ins == 1 ? "INS" : "DEL") << "\t" << iii << ". " << tcount << " of " << (2 * widths.size() * snv_rate.size() * indel_size.size()) << std::endl; SeqLib::GenomicRegion gr; gr.Random(); gr.pos2 = gr.pos1 + k - 1 + (ins == 0 ? iii : 0); // add sequence to deletion ones, because it gets removed later chrstring = bwalker.Header().IDtoName(gr.chr); //bwalker.header()->target_name[gr.chr]; //std::to_string(gr.chr+1); int len; char * seq = faidx_fetch_seq(findex, const_cast(chrstring.c_str()), gr.pos1, gr.pos2 - 1, &len); std::string s; if (seq) s = std::string(seq); else continue; if (s.find("N") != std::string::npos) continue; rs.makeSNVErrors(s, snv); if (gr.Width() < iii + 10) continue; if (ins == 1 && iii > 0) rs.makeInsErrors(s, true, iii); else if (iii > 0) rs.makeDelErrors(s, iii); SeqLib::BamRecordVector aligns; bwa.AlignSequence(s, std::to_string(i), aligns, false, 0.90, 50); int align_num = -1; for (size_t j = 0; j < aligns.size(); ++j) { SeqLib::GenomicRegion gr_this = aligns[j].asGenomicRegion(); gr_this.Pad(100); if (gr.GetOverlap(gr_this)) { if (iii == 0) { align_num = j; break; } else { if (ins == 1) { int g = aligns[j].MaxInsertionBases(); if (g && g - 2 < iii && g + 2 > iii) { align_num = j; break; } } else { int d = aligns[j].MaxDeletionBases(); if (d && d - 2 < iii && d + 2 > iii) { align_num = j; break; } } } } } results << i << "\t" << chrstring << "\t" << gr.pos1 << "\t" << gr.pos2 << "\t" << k << "\t" << aligns.size() << "\t" << align_num << "\t" << snv << "\t" << (ins == 0 ? iii : 0) << "\t" << (ins == 1 ? iii : 0) << std::endl; } } } } } results.close(); } ================================================ FILE: src/svabautils/benchmark.h ================================================ #ifndef SNOWMAN_BENCHMARK_H__ #define SNOWMAN_BENCHMARK_H__ #include #include void parseBenchmarkOptions(int argc, char** argv); void runBenchmark(int argc, char** argv); void assemblyTest(); void sampleReads(const std::string& seq, std::vector& reads, int cov, double error_rate); void realignRandomSegments(); void realignBreaks(); std::string genBreaks(); std::vector parseErrorRates(const std::string& s); std::string errorRateString(const std::vector& v, const std::string& name); void splitBam(); #endif ================================================ FILE: src/svabautils/configure ================================================ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.63 for snowman 1.0. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='snowman' PACKAGE_TARNAME='snowman' PACKAGE_VERSION='1.0' PACKAGE_STRING='snowman 1.0' PACKAGE_BUGREPORT='jwala@broadinstitute.org' ac_unique_file="snowmanutils.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS AM_CXXFLAGS EGREP GREP CXXCPP RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode enable_dependency_tracking enable_development ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures snowman 1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/snowman] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of snowman 1.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-development Turn on development options, like failing compilation on warnings Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF snowman configure 1.0 generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by snowman $as_me 1.0, which was generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 $as_echo "$as_me: error: unsafe absolute working directory name" >&2;} { (exit 1); exit 1; }; };; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 $as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} { (exit 1); exit 1; }; };; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 $as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 $as_echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:$LINENO: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 $as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='snowman' VERSION='1.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" { $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:$LINENO: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C++ compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C++ compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:$LINENO: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ## test for cpp compiler ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ## test for C compiler if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi ## required if libraries are built in package # Check for headers ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "${ac_cv_header_zlib_h+set}" = set; then { $as_echo "$as_me:$LINENO: checking for zlib.h" >&5 $as_echo_n "checking for zlib.h... " >&6; } if test "${ac_cv_header_zlib_h+set}" = set; then $as_echo_n "(cached) " >&6 fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 $as_echo "$ac_cv_header_zlib_h" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking zlib.h usability" >&5 $as_echo_n "checking zlib.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking zlib.h presence" >&5 $as_echo_n "checking zlib.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: zlib.h: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: zlib.h: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to jwala@broadinstitute.org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for zlib.h" >&5 $as_echo_n "checking for zlib.h... " >&6; } if test "${ac_cv_header_zlib_h+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_header_zlib_h=$ac_header_preproc fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 $as_echo "$ac_cv_header_zlib_h" >&6; } fi # Check for libraries { $as_echo "$as_me:$LINENO: checking for library containing gzopen" >&5 $as_echo_n "checking for library containing gzopen... " >&6; } if test "${ac_cv_search_gzopen+set}" = set; then $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gzopen (); int main () { return gzopen (); ; return 0; } _ACEOF for ac_lib in '' z; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_search_gzopen=$ac_res else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_gzopen+set}" = set; then break fi done if test "${ac_cv_search_gzopen+set}" = set; then : else ac_cv_search_gzopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_search_gzopen" >&5 $as_echo "$ac_cv_search_gzopen" >&6; } ac_res=$ac_cv_search_gzopen if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else { { $as_echo "$as_me:$LINENO: error: libz not found, please install zlib (http://www.zlib.net/)" >&5 $as_echo "$as_me: error: libz not found, please install zlib (http://www.zlib.net/)" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if test "${ac_cv_search_clock_gettime+set}" = set; then $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then ac_cv_search_clock_gettime=$ac_res else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext if test "${ac_cv_search_clock_gettime+set}" = set; then break fi done if test "${ac_cv_search_clock_gettime+set}" = set; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" cat >>confdefs.h <<\_ACEOF #define HAVE_CLOCK_GETTIME 1 _ACEOF fi # Check whether --enable-development was given. if test "${enable_development+set}" = set; then enableval=$enable_development; fi if test "$enable_development"; then fail_on_warning="-Werror" fi # Set compiler flags. AM_CXXFLAGS="-g -Wall -Wextra $fail_on_warning -Wno-unknown-pragmas -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0" # Check for hash table headers for ac_header in \ google/sparse_hash_set google/sparse_hash_map \ unordered_map tr1/unordered_map ext/hash_map \ unordered_set tr1/unordered_set ext/hash_set \ do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## --------------------------------------- ## ## Report this to jwala@broadinstitute.org ## ## --------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 $as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by snowman $as_me 1.0, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ snowman config.status 1.0 configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ================================================ FILE: src/svabautils/configure.ac ================================================ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) ## specificy version of autoconf AC_INIT(snowman, 1.0, jwala@broadinstitute.org) AM_INIT_AUTOMAKE(foreign) AC_CONFIG_SRCDIR([snowmanutils.cpp]) AC_CONFIG_HEADER([config.h]) AM_MAINTAINER_MODE([disable]) # Checks for programs. AC_PROG_CXX ## test for cpp compiler AC_PROG_CC ## test for C compiler AC_PROG_RANLIB ## required if libraries are built in package # Check for headers AC_LANG([C++]) AC_CHECK_HEADER([zlib.h]) # Check for libraries AC_SEARCH_LIBS([gzopen],[z],,[AC_MSG_ERROR([libz not found, please install zlib (http://www.zlib.net/)])]) AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [clock_getttime found])], ) AC_ARG_ENABLE(development, AS_HELP_STRING([--enable-development], [Turn on development options, like failing compilation on warnings])) if test "$enable_development"; then fail_on_warning="-Werror" fi # Set compiler flags. AC_SUBST(AM_CXXFLAGS, "-g -Wall -Wextra $fail_on_warning -Wno-unknown-pragmas -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0") # Check for hash table headers AC_CHECK_HEADERS([ \ google/sparse_hash_set google/sparse_hash_map \ unordered_map tr1/unordered_map ext/hash_map \ unordered_set tr1/unordered_set ext/hash_set \ ]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT ================================================ FILE: src/svabautils/snowmanutils.cpp ================================================ #include "benchmark.h" #include "assembly2vcf.h" #include "splitcounter.h" #define AUTHOR "Jeremiah Wala " static const char *SUTILS_USAGE_MESSAGE = "-----------------------------------------------------------------------\n" "--- Snowman Utils - Utililty methods for analyzing/benchmarking SVs ---\n" "-----------------------------------------------------------------------\n" "Program: SnowmanUtils \n" "Contact: Jeremiah Wala [ jwala@broadinstitute.org ]\n" "Usage: snowmanutils [options]\n\n" "Commands:\n" " benchmark Run benchmarking tests for Snowman\n" " assembly2vcf Run Snowman filtering on BWA-MEM aligned assembly (eg Discovar, SGA, etc) and aligned reads\n" " splitcounter Simple utility to count locations of split-alignment breakpoints (eg for PacBio)\n" " splitfasta Simple utility to split a fasta into smaller subsequences, splitting seq in the middle\n" "\nReport bugs to jwala@broadinstitute.org \n\n"; int main(int argc, char** argv) { if (argc <= 1) { std::cerr << SUTILS_USAGE_MESSAGE; return 0; } else { std::string command(argv[1]); if (command == "help" || command == "--help") { std::cerr << SUTILS_USAGE_MESSAGE; return 0; } else if (command == "benchmark") { runBenchmark(argc-1, argv+1); } else if (command == "splitfasta") { runSplitFasta(argc-1, argv+1); } else if (command == "assembly2vcf") { runAssembly2VCF(argc-1, argv+1); } else if (command == "splitcounter") { runSplitCounter(argc-1, argv+1); } else { std::cerr << SUTILS_USAGE_MESSAGE; return 0; } } std::cerr << "Done with snowman utils" << std::endl; return 0; } ================================================ FILE: src/svabautils/snowtools.cpp ================================================ #include "json/json.h" #include "json/json-forwards.h" #include "SeqLib/MiniRules2.h" #include #include #include #include #include #include using namespace std; const std::vector m_propertyNames = {"reference", "mapQuality", "isReverseStrand"}; bool ParseFilterObject(const string& filterName, const Json::Value& filterObject) { // filter object parsing variables Json::Value null(Json::nullValue); Json::Value propertyValue; // store results map propertyTokens; // iterate over known properties vector::const_iterator propertyNameIter = m_propertyNames.begin(); vector::const_iterator propertyNameEnd = m_propertyNames.end(); for ( ; propertyNameIter != propertyNameEnd; ++propertyNameIter ) { const string& propertyName = (*propertyNameIter); // if property defined in filter, add to token list propertyValue = filterObject.get(propertyName, null); if ( propertyValue != null ) { std::cerr << "[" << propertyName << "] -- " << propertyValue.asString() << std::endl; propertyTokens.insert( make_pair(propertyName, propertyValue.asString()) ); } } // add this filter to engin //m_filterEngine.addFilter(filterName); // add token list to this filter //return AddPropertyTokensToFilter(filterName, propertyTokens); return true; } const string GetScriptContents(string script) { // open script for reading FILE* inFile = fopen(script.c_str(), "rb"); if ( !inFile ) { cerr << "bamtools filter ERROR: could not open script: " << script << " for reading" << endl; return string(); } // read in entire script contents char buffer[1024]; ostringstream docStream(""); while ( true ) { // peek ahead, make sure there is data available char ch = fgetc(inFile); ungetc(ch, inFile); if( feof(inFile) ) break; // read next block of data if ( fgets(buffer, 1024, inFile) == 0 ) { cerr << "bamtools filter ERROR: could not read script contents" << endl; return string(); } docStream << buffer; } // close script file fclose(inFile); // import buffer contents to document, return return docStream.str(); } int main(int argc, char** argv) { std::string script = "/xchip/gistic/Jeremiah/GIT/SeqLib/test.json"; const string document = GetScriptContents(script); // set up JsonCPP reader and attempt to parse script Json::Value root; Json::Reader reader; if ( !reader.parse(document, root) ) { // use built-in error reporting mechanism to alert user what was wrong with the script cerr << "bamtools filter ERROR: failed to parse script - see error message(s) below" << endl; return false; } // see if root object contains multiple filters const Json::Value filters = root["filters"]; cerr << " root size " << root.size() << std::endl; cerr << " filters size " << filters.size() << std::endl; // iterate over any filters found int filterIndex = 0; Json::Value::const_iterator filtersIter = filters.begin(); Json::Value::const_iterator filtersEnd = filters.end(); for ( ; filtersIter != filtersEnd; ++filtersIter, ++filterIndex ) { Json::Value filter = (*filtersIter); // convert filter index to string string filterName; // if id tag supplied const Json::Value id = filter["id"]; if ( !id.isNull() ) filterName = id.asString(); // use array index else { stringstream convert; convert << filterIndex; filterName = convert.str(); } cerr << "filter " << filterName << std::endl; // create & parse filter bool success = true; success &= ParseFilterObject(filterName, filter); } /// make mini rules cerr << " ... maing mini rules " << endl; SeqLib::MiniRulesCollection mrc(script); } ================================================ FILE: src/svabautils/splitcounter.cpp ================================================ #include "splitcounter.h" #include #include #include #include #include "gzstream.h" #include "SnowmanUtils.h" #include "SeqLib/BamReader.h" #include "SeqLib/ReadFilter.h" #define MIN_CLIP_FACTOR 2 #define MIN_MATCH_FACTOR 4 #define MIN_MAPQ 10 #define READ_LEN 151 SeqLib::GRC bks; namespace opt { static std::string bam; static std::string breaks_file; static std::string header; static std::string fasta; static int split_num = 1000; } static const char* shortopts = "hb:B:H:f:n:o:"; static const struct option longopts[] = { { "help", no_argument, NULL, 'h' }, { "bam", required_argument, NULL, 'b' }, { "fasta", required_argument, NULL, 'f' }, { "breaks", required_argument, NULL, 'B' }, { "breaks-header", required_argument, NULL, 'H' }, { "num-bases", required_argument, NULL, 'n' }, { "out-fasta", required_argument, NULL, 'o' }, { NULL, 0, NULL, 0 } }; static const char *RUN_SPLITCOUNTER_MESSAGE = "Usage: snowman splitcounter [OPTION] -b BAM\n\n" " Description: Simple utility to count locations of split-alignment breakpoints (eg for PacBio)\n" "\n" " General options\n" " -h, --help Display this help and exit\n" " Required input\n" " -b, --bam BAM file containing split alignments to count\n" " Optional input\n" " -B, --breaks BED file containing regions to limit analysis to\n" " -H, --breaks-header BAM file to pair with the BED file (to get header from)\n" "\n"; static const char *RUN_FASTASPLIT_MESSAGE = "Usage: snowman fastasplit -f fasta -n num_bases > outfile.fa\n\n" " Description: Divide a fasta into smaller sub-sequences, splitting some seqs in the middle\n" "\n" " General options\n" " -h, --help Display this help and exit\n" " Required input\n" " -f, --fasta BAM file containing split alignments to count\n" " -n, --num-bases Number of bases to split into\n" "\n"; void parseFastaSplitOptions(int argc, char** argv); void runSplitFasta(int argc, char** argv) { parseFastaSplitOptions(argc, argv); std::cerr << " SPLITTING: " << opt::fasta << "\n" << " NUM: " << SeqLib::AddCommas(opt::split_num) << std::endl; // open the fasta igzstream infile(opt::fasta.c_str(), std::ios::in); // confirm that it is open if (!infile) { std::cerr << "Can't read file " << opt::fasta << " for parsing fasta" << std::endl; exit(EXIT_FAILURE); } int line_count = 0; // std::string line; std::string curr_line; size_t this_line_count = 0; // new line count while (std::getline(infile, line, '\n')) { ++this_line_count; if (this_line_count % 20000) std::cerr << "...on fasta file line (new-line separated) " << SeqLib::AddCommas(this_line_count) << std::endl; if (line.empty() || line.find(">") != std::string::npos) continue; // doesn't hit limit if ((int)(line.length() + curr_line.length()) < opt::split_num) curr_line = curr_line + line; // hits limit, but only if adding the new line else if ((int)line.length() <= opt::split_num) { std::cout << ">" << line_count << std::endl; ++line_count; std::cout << curr_line << std::endl; curr_line = line; } // the line itself is too big, split up else if ((int)line.length() > opt::split_num) { int lsize = line.size(); int lstart = 0; while (lstart < (int)line.size()) { std::cout << ">" << line_count << std::endl; ++line_count; std::cout << line.substr(lstart, std::min(opt::split_num, lsize - lstart)) << std::endl; lstart += opt::split_num; } } } } void runSplitCounter(int argc, char** argv) { parseSplitCounterOptions(argc, argv); // open the header BAM std::cerr << "...opening the header BAM " << opt::header << std::endl; SeqLib::BamReader bwh; assert(bwh.Open(opt::header)); // open the breaks std::cerr << "...reading " << opt::breaks_file << std::endl; SnowmanUtils::__open_bed(opt::breaks_file, bks, bwh.Header()); std::cerr << "...read in " << SeqLib::AddCommas(bks.size()) << " break regions " << std::endl; // open the BAM SeqLib::BamReader walk; assert(walk.Open(opt::bam)); SeqLib::BamRecord r; std::string rules_string = "{\"\" : {\"rules\" : [{\"mapq\" : 10}]}}"; std::cerr << "Rules: " << rules_string << std::endl; SeqLib::Filter::ReadFilterCollection mr(rules_string, walk.Header()); // convert qname (big) to in (small) std::unordered_map qname_set; size_t countr = 0; while(walk.GetNextRecord(r)) { if (r.ChrID() > 23) break; if (!mr.isValid(r)) continue; ++countr; SeqLib::Cigar cig = r.GetCigar(); if (cig.size() <= 1) continue; int matchlen = 0; for (auto& c : cig) if (c.Type() == 'M') matchlen += c.Length(); if (matchlen < MIN_MATCH_FACTOR * READ_LEN) continue; if (!qname_set.count(r.Qname())) qname_set[r.Qname()] = qname_set.size(); std::string QN = std::to_string(qname_set[r.Qname()]); if (countr % 100000 == 0 ) std::cerr << "...at split read " << SeqLib::AddCommas(countr) << " at position " << r.Brief() << std::endl; if ( (cig[0].Type() == 'H' || cig[0].Type() == 'S') && cig[0].Length() >= MIN_CLIP_FACTOR * READ_LEN) // split on left std::cout << "L\t" << r.ChrName(walk.Header()) << "\t" << r.Position() << "\t" << (r.ReverseFlag() ? "-" : "+") << "\t" << QN << "\t" << r.MapQuality() << "\t" << (r.SecondaryFlag() ? "SEC" : "PRI") << "\t" << (bks.CountOverlaps(r.asGenomicRegion()) ? "BK" : "NBK") << "\t0" << std::endl; if ( (cig.back().Type() == 'H' || cig.back().Type() == 'S') && cig.back().Length() >= MIN_CLIP_FACTOR * READ_LEN) // split on right std::cout << "R\t" << r.ChrName(walk.Header()) << "\t" << r.PositionEnd() << "\t" << (r.ReverseFlag() ? "-" : "+") << "\t" << QN << "\t" << r.MapQuality() << "\t" << (r.SecondaryFlag() ? "SEC" : "PRI") << "\t" << (bks.CountOverlaps(r.asGenomicRegion()) ? "BK" : "NBK") << "\t0" << std::endl; // look for indels int pos = r.Position(); for (auto& c : cig) { if ((c.Type() == 'D' || c.Type() == 'I') && c.Length() >= 30) std::cout << c.Type() << "\t" << r.ChrName(walk.Header()) << "\t" << pos << "\t+\t" << QN << "\t" << r.MapQuality() << "\t" << (r.SecondaryFlag() ? "SEC" : "PRI") << "\t" << (bks.CountOverlaps(r.asGenomicRegion()) ? "BK" : "NBK") << "\t" << c.Length() << std::endl; if (c.ConsumesReference()) pos += c.Length(); } // try BLAT realignment //SeqLib::BamReadVector brv; //blat.querySequence(r.Qname(), r.Sequence(), brv); //for(auto& a : brv) // w.writeAlignment(a); } std::cerr << "...done" << std::endl; } void parseSplitCounterOptions(int argc, char** argv) { bool die = false; if (argc <= 2) die = true; bool help = false; std::stringstream ss; std::string tmp; for (char c; (c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1;) { std::istringstream arg(optarg != NULL ? optarg : ""); switch (c) { case 'b': arg >> opt::bam; break; case 'B': arg >> opt::breaks_file; break; case 'H': arg >> opt::header; break; case 'h': help = true; break; } } if (die || help) { std::cerr << "\n" << RUN_SPLITCOUNTER_MESSAGE; die ? exit(EXIT_FAILURE) : exit(EXIT_SUCCESS); } } void parseFastaSplitOptions(int argc, char** argv) { bool die = false; if (argc <= 2) die = true; bool help = false; std::stringstream ss; std::string tmp; for (char c; (c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1;) { std::istringstream arg(optarg != NULL ? optarg : ""); switch (c) { case 'f': arg >> opt::fasta; break; case 'n': arg >> opt::split_num; break; case 'h': help = true; break; } } if (die || help) { std::cerr << "\n" << RUN_FASTASPLIT_MESSAGE; die ? exit(EXIT_FAILURE) : exit(EXIT_SUCCESS); } } ================================================ FILE: src/svabautils/splitcounter.h ================================================ #ifndef SNOWMAN_SPLITCOUNTER_H__ #define SNOWMAN_SPLITCOUNTER_H__ void runSplitCounter(int argc,char** argv); void parseSplitCounterOptions(int argc, char** argv); void runSplitFasta(int argc, char** argv); #endif ================================================ FILE: svaba_jemalloc ================================================ #!/usr/bin/env bash # # svaba_jemalloc — run svaba with jemalloc forced as the allocator via # LD_PRELOAD. Recommended for Linux workloads at high thread counts # (~12+ threads): jemalloc's thread-local arenas relieve lock # contention the glibc allocator suffers under heavy malloc/free # traffic from the per-thread assembly pipeline. Typical wall-time # win: 10–20 % at -p 16 on a WGS region; less at low -p, sometimes a # wash under -p 4. # # *Do not use this on macOS.* Apple's libmalloc (nanomalloc fast path) # plus DYLD_INSERT_LIBRARIES overhead has empirically run 5–10× SLOWER # than the default allocator on the same BAM. Stick with system malloc # there. # # Usage: # svaba_jemalloc run -t tumor.bam -n normal.bam -G ref.fa ... # # or any other svaba subcommand — args are passed through. # # Optional environment overrides: # JEMALLOC_LIB=/path/to/libjemalloc.so.2 # skip auto-detection # SVABA=/path/to/svaba # skip $PATH lookup # # MALLOC_CONF is passed through if the caller sets it; a reasonable # default for high-concurrency svaba runs is: # MALLOC_CONF=background_thread:true,narenas:24,dirty_decay_ms:10000 # Tune `narenas` to match -p if you go above 24 threads. set -euo pipefail # Refuse to run on macOS — jemalloc loses badly there. case "$(uname -s)" in Darwin) echo "svaba_jemalloc: Linux only. On macOS, Apple's libmalloc is" >&2 echo " faster than jemalloc for this workload." >&2 echo " Just run svaba directly." >&2 exit 1 ;; esac # 1) Resolve libjemalloc path. JEMALLOC_LIB=${JEMALLOC_LIB:-} if [[ -z "$JEMALLOC_LIB" ]]; then for cand in \ /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 \ /usr/lib64/libjemalloc.so.2 \ /usr/lib/libjemalloc.so.2 \ /usr/local/lib/libjemalloc.so.2 \ /opt/homebrew/lib/libjemalloc.so.2 do if [[ -f "$cand" ]]; then JEMALLOC_LIB=$cand; break; fi done fi if [[ -z "$JEMALLOC_LIB" ]]; then # last-ditch: ask ldconfig for a cached match JEMALLOC_LIB=$(ldconfig -p 2>/dev/null | awk '/libjemalloc\.so\.2/ {print $NF; exit}') fi if [[ -z "$JEMALLOC_LIB" || ! -f "$JEMALLOC_LIB" ]]; then echo "svaba_jemalloc: could not find libjemalloc.so.2." >&2 echo " Install it (e.g. 'apt install libjemalloc2' or 'yum install jemalloc')" >&2 echo " or set JEMALLOC_LIB=/path/to/libjemalloc.so.2." >&2 exit 1 fi # 2) Resolve svaba binary. SVABA=${SVABA:-} if [[ -z "$SVABA" ]]; then # Prefer $PATH; fall back to a build/svaba next to this script. if command -v svaba >/dev/null 2>&1; then SVABA=$(command -v svaba) else here=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) for cand in "$here/build/svaba" "$here/bin/svaba"; do if [[ -x "$cand" ]]; then SVABA=$cand; break; fi done fi fi if [[ -z "$SVABA" || ! -x "$SVABA" ]]; then echo "svaba_jemalloc: could not find the svaba binary." >&2 echo " Put svaba on \$PATH, or set SVABA=/path/to/svaba." >&2 exit 1 fi exec env LD_PRELOAD="$JEMALLOC_LIB" "$SVABA" "$@" ================================================ FILE: tracks/README.md ================================================ # svaba tracks/ This directory holds the BED files consumed by `svaba run --blacklist` (and by the scripts that build the combined blacklist from component files). Everything here is a regeneratable artifact — don't hand-edit `hg38.combined_blacklist.bed` or `lowmap*perc.bed`; edit the upstream component or re-run the generator script. ## `hg38.combined_blacklist.bed` — the master blacklist This is the file you point svaba at. It is the union of several component blacklists, produced by `scripts/combine_blacklists.sh` from the components in this same directory. The three primary content sources are the manual blacklist (`hg38.manual.blacklist.bed`), empirically-slow-to-assemble regions (`hg38.high_runtime.bed`), and UCSC RepeatMasker simple repeats (`hg38.rmsk.simple_repeat.bed`). The non-standard-contig file (`hg38.nonstd_chr.blacklist.bed`) and the ENCODE-style high-signal blacklist (`hg38.blacklist.sorted.bed`) are typically folded in as well. To refresh the combined file after editing any component: ```bash ./scripts/combine_blacklists.sh --merge --clip tracks/chr \ -o tracks/hg38.combined_blacklist.bed \ tracks/hg38.manual.blacklist.bed \ tracks/hg38.high_runtime.bed \ tracks/hg38.rmsk.simple_repeat.bed ``` `--merge` runs `bedtools merge` to collapse overlapping intervals, with a comma-separated list of contributing source tags in col 4. `--clip` clips any oversize-end sentinels (e.g. synthetic `end=250000000` rows in some BED files) to real contig lengths. See the header comment in `combine_blacklists.sh` for the full flag surface. ## `lowmap{30,50}perc.bed` — low-mappability blacklists These are blacklists of regions where the vast majority of reads at a locus fail a mapping-quality threshold — i.e. the locus is effectively "unmapped" for any caller that only trusts uniquely-placed reads. They're derived from paired `mosdepth` runs over known-non-tumor BAMs using `scripts/mosdepth_lowmapq_blacklist.sh`, then intersected across two independent non-tumor samples so only regions confirmed as low- mappability in both samples survive. The number in the filename is the ratio cutoff used: `lowmap30perc.bed` keeps bins where fewer than 30% of reads pass MAPQ (stricter), and `lowmap50perc.bed` keeps bins below 50% (the default). The generation recipe has three steps per sample, plus a final intersection. ### Step 1 — mosdepth coverage per sample, unfiltered vs MAPQ-filtered Run mosdepth twice per BAM, differing only in `--mapq`. The unfiltered pass (`--mapq 0`) counts every alignment; the filtered pass (`--mapq 20`) counts only uniquely-placed reads. `--by 300` bins the coverage into 300 bp windows, which is finer than the svaba blacklist's natural resolution and gives us room to merge later. ```bash mosdepth --by 300 --fast-mode --mapq 0 unf_T0 NP_WGS_Normal_DNA.recal.bam mosdepth --by 300 --fast-mode --mapq 20 filt_T0 NP_WGS_Normal_DNA.recal.bam mosdepth --by 300 --fast-mode --mapq 0 unf_T2 .recal.bam mosdepth --by 300 --fast-mode --mapq 20 filt_T2 .recal.bam ``` Each mosdepth invocation produces a `.regions.bed.gz` with `chrom, start, end, mean_depth` columns. ### Step 2 — per-sample ratio + flagging `mosdepth_lowmapq_blacklist.sh` joins the two mosdepth outputs bin by bin, computes `filt/unf` (the fraction of reads that pass MAPQ), and flags bins below a threshold where `unf` is high enough to be statistically meaningful. `--max-ratio` controls strictness: `0.5` means "flag bins where fewer than half of reads pass MAPQ" (default), `0.3` is stricter, `0.7` is looser. ```bash ~/git/svaba/scripts/mosdepth_lowmapq_blacklist.sh --max-ratio 0.5 --out lowmap0.5_T0 unf_T0.regions.bed.gz filt_T0.regions.bed.gz ~/git/svaba/scripts/mosdepth_lowmapq_blacklist.sh --max-ratio 0.5 --out lowmap0.5_T2 unf_T2.regions.bed.gz filt_T2.regions.bed.gz ~/git/svaba/scripts/mosdepth_lowmapq_blacklist.sh --max-ratio 0.7 --out lowmap0.7_T2 unf_T2.regions.bed.gz filt_T2.regions.bed.gz ``` Each run emits `.flagged.bed` (raw per-bin flags), `.flagged.merged.bed` (intervals merged within 1 kb), and a `.summary.txt` with totals. ### Step 3 — cross-sample intersection The per-sample `lowmap0.Xp_T*.flagged.merged.bed` files are noisier than we want as a blacklist input. Taking the `bedtools intersect` of two independent non-tumor samples gives a more conservative result: only regions flagged as low-mappability in BOTH samples survive. ```bash bedtools intersect -a lowmap0.5_T0.flagged.merged.bed -b lowmap0.5_T2.flagged.merged.bed > lowmap50perc.bed bedtools intersect -a lowmap0.3_T0.flagged.merged.bed -b lowmap0.3_T2.flagged.merged.bed > lowmap30perc.bed ``` Both samples must be non-tumor — tumor BAMs have structural variation that can pile up multi-mappers at real break sites, which we don't want mistaken for low-mappability and blacklisted. Intersecting two independent non-tumor samples gets you a much smaller (and more trustworthy) blacklist than either sample's raw output. Per the v3 mosdepth helper's summary: typical single-sample flagged volume on hg38 WGS is 200-400 Mb; after intersection with a second non-tumor sample, the `lowmap50perc.bed` settles in the ~30-50 Mb range, and `lowmap30perc.bed` shrinks further. ## Other component files `hg38.blacklist.sorted.bed` is the ENCODE-style high-signal blacklist. `hg38.high_runtime.bed` is a list of regions empirically slow to assemble; curated from svaba runtime.txt tails. `hg38.manual.blacklist.bed` is the curated ad-hoc bad-list. `hg38.nonstd_chr.blacklist.bed` is full-contig entries for every chrUn/*_decoy/*_alt/*_random/chrEBV/HLA-* contig in the reference (regenerated from `tracks/chr` which is a GRCh38 fasta-header dump). `hg38.rmsk.simple_repeat.bed` is UCSC RepeatMasker simple-repeat regions. `genome.hg38.sorted.bed`, `hg38.bed`, and `hg38_arms_excl_centromeres.bed` are reference-coordinate helpers used by downstream analysis scripts, not by `svaba run` directly. `region_generator.R` is an R script used to regenerate some of the above. ## Adding a new component to the combined blacklist Put the new `.bed` file in this directory, then re-run `combine_blacklists.sh` with it added to the argument list. The script tolerates any well-formed 3-column BED. If the new file has a 4th column with per-interval labels, those get preserved in the merged output's label column. ================================================ FILE: tracks/genome.hg38.sorted.bed ================================================ chr1 0 248956422 chr10 0 133797422 chr11 0 135086622 chr12 0 133275309 chr13 0 114364328 chr14 0 107043718 chr15 0 101991189 chr16 0 90338345 chr17 0 83257441 chr18 0 80373285 chr19 0 58617616 chr2 0 32865900 chr2 32918400 242193529 chr20 0 64444167 chr21 0 46709983 chr22 0 50818468 chr3 0 198295559 chr4 0 190214555 chr5 0 181538259 chr6 0 170805979 chr7 0 159345973 chr8 0 145138636 chr9 0 138394717 chrX 0 156040895 chrY 0 57227415 ================================================ FILE: tracks/hg38.bed ================================================ chr1 0 248956422 chr2 0 32928000 chr2 32953000 242193529 chr3 0 198295559 chr4 0 190214555 chr5 0 181538259 chr6 0 170805979 chr7 0 159345973 chr8 0 145138636 chr9 0 138394717 chr10 0 133797422 chr11 0 135086622 chr12 0 133275309 chr13 0 114364328 chr14 0 107043718 chr15 0 101991189 chr16 0 90338345 chr17 0 83257441 chr18 0 80373285 chr19 0 58617616 chr20 0 64444167 chr21 0 46709983 chr22 0 50818468 chrX 0 156040895 ================================================ FILE: tracks/hg38.blacklist.sorted.bed ================================================ chr1 0 792500 High Signal Region chr1 91386300 91388400 Low Mappability chr1 103594400 103760600 High Signal Region chr1 121605200 124938900 High Signal Region chr1 125067600 125086000 High Signal Region chr1 125130200 143562200 High Signal Region chr1 161423100 161472400 High Signal Region chr1 168348600 168349900 High Signal Region chr1 224010800 224017000 High Signal Region chr1 230872006 230872168 High Signal Region chr1 236713000 236715600 Low Mappability chr1 248932700 248956400 High Signal Region chr10 0 45700 Low Mappability chr10 38481300 38596500 High Signal Region chr10 38782600 38967900 High Signal Region chr10 39901300 41712900 High Signal Region chr10 41838900 42107300 High Signal Region chr10 42279400 42322500 High Signal Region chr10 126946300 126953400 Low Mappability chr10 133625800 133797400 High Signal Region chr11 0 194500 Low Mappability chr11 518900 520700 Low Mappability chr11 584400 586500 High Signal Region chr11 964100 966000 Low Mappability chr11 1015700 1019300 High Signal Region chr11 1091000 1098200 Low Mappability chr11 3652800 3655600 High Signal Region chr11 10506900 10511100 High Signal Region chr11 28206300 28236700 High Signal Region chr11 50813600 54383000 High Signal Region chr11 61084500 61130400 High Signal Region chr11 70370400 70372400 High Signal Region chr11 73509800 73511700 High Signal Region chr11 77885600 77887600 High Signal Region chr11 93417500 93427700 High Signal Region chr11 94232700 94240400 High Signal Region chr11 103408700 103410600 High Signal Region chr11 121175000 121187000 High Signal Region chr11 131679500 131681500 High Signal Region chr11 135075600 135086600 High Signal Region chr12 0 77800 High Signal Region chr12 371800 422400 High Signal Region chr12 2254900 2257000 High Signal Region chr12 2519800 2540500 Low Mappability chr12 5928900 5933000 Low Mappability chr12 20550500 20552400 Low Mappability chr12 20768400 20770300 High Signal Region chr12 29790400 29834600 High Signal Region chr12 34715400 37269100 High Signal Region chr12 41362700 41364600 High Signal Region chr12 61471100 61473000 High Signal Region chr12 66473900 66475800 High Signal Region chr12 101147000 101155000 High Signal Region chr12 113079600 113081500 High Signal Region chr12 124430500 124440300 High Signal Region chr12 124905900 124941800 High Signal Region chr12 130386400 130394100 High Signal Region chr12 131475300 131478600 High Signal Region chr12 131576000 131589700 High Signal Region chr12 132223300 132243400 High Signal Region chr12 132455100 132465200 High Signal Region chr12 133249000 133275300 High Signal Region chr13 16087600 16165300 High Signal Region chr13 16226300 18171400 High Signal Region chr13 18211000 18216100 High Signal Region chr13 57140500 57172500 High Signal Region chr13 109423200 109425200 High Signal Region chr13 114353300 114364300 Low Mappability chr14 0 18670900 High Signal Region chr14 18695400 19724300 High Signal Region chr14 23033300 23098600 High Signal Region chr14 26629300 26634900 High Signal Region chr14 31793800 31798100 High Signal Region chr14 32483400 32486000 High Signal Region chr14 34537100 34562600 High Signal Region chr14 35947200 35950000 High Signal Region chr14 37351000 37356700 High Signal Region chr14 44025100 44027200 High Signal Region chr14 44705100 44709900 High Signal Region chr14 45477100 45482500 High Signal Region chr14 46865300 46866500 High Signal Region chr14 54235600 54240000 High Signal Region chr14 57112100 57118100 High Signal Region chr14 74711700 74729000 High Signal Region chr14 86074000 86076000 High Signal Region chr14 86593300 86595200 High Signal Region chr14 88443700 88458100 High Signal Region chr14 100525900 100527800 High Signal Region chr14 101267600 101272200 High Signal Region chr14 101674400 101676400 High Signal Region chr14 104288100 104290200 High Signal Region chr14 105215000 105240900 High Signal Region chr14 105568500 105583900 High Signal Region chr14 105616500 105618600 High Signal Region chr14 106326900 106367700 High Signal Region chr15 0 17035000 High Signal Region chr15 17058500 19790100 High Signal Region chr15 20005600 22606300 High Signal Region chr15 23125400 23357400 High Signal Region chr15 25757700 25759100 Low Mappability chr15 28304900 28683400 High Signal Region chr15 30066300 30627500 High Signal Region chr15 30844100 30859900 High Signal Region chr15 32153700 32626200 High Signal Region chr15 54925700 54932200 High Signal Region chr15 56311200 56314600 High Signal Region chr15 72635200 72687100 High Signal Region chr15 74068100 74102000 High Signal Region chr15 75254100 75299800 High Signal Region chr15 77698600 77700600 High Signal Region chr15 82321000 82374600 High Signal Region chr15 82421200 82541700 High Signal Region chr15 84405300 84524700 High Signal Region chr15 101752300 101764800 Low Mappability chr15 101892700 101991100 High Signal Region chr16 29430800 29566900 Low Mappability chr16 34061400 34121400 High Signal Region chr16 34272000 34633100 High Signal Region chr16 34657200 34672500 High Signal Region chr16 34694600 34772000 High Signal Region chr16 34832600 34922100 High Signal Region chr16 34945600 35072500 Low Mappability chr16 36166300 36202400 High Signal Region chr16 36225200 46423000 High Signal Region chr16 46449700 46467000 High Signal Region chr16 90100500 90338300 Low Mappability chr17 0 137600 High Signal Region chr17 294900 317900 High Signal Region chr17 448200 510900 High Signal Region chr17 1061500 1066100 High Signal Region chr17 1307700 1312000 Low Mappability chr17 19025700 19237400 High Signal Region chr17 21783300 22054000 High Signal Region chr17 22520400 22527300 High Signal Region chr17 22745200 26629800 High Signal Region chr17 26766800 26987200 High Signal Region chr17 43227600 43324300 High Signal Region chr17 45511500 45641300 Low Mappability chr17 53104900 53107300 High Signal Region chr18 0 64600 High Signal Region chr18 105200 113200 High Signal Region chr18 971000 976500 High Signal Region chr18 2841300 2861500 High Signal Region chr18 15367200 20940300 High Signal Region chr18 46961600 47031700 High Signal Region chr18 47852300 47854300 Low Mappability chr18 52791800 52793800 High Signal Region chr18 74615900 74618100 High Signal Region chr18 76966200 76968500 High Signal Region chr18 78436900 78438700 Low Mappability chr18 79013800 79040300 High Signal Region chr18 79617800 79621500 High Signal Region chr18 80257400 80373200 High Signal Region chr19 0 271200 High Signal Region chr19 7019100 7061300 High Signal Region chr19 7449400 7452000 High Signal Region chr19 8740100 8800500 High Signal Region chr19 24330100 27274500 High Signal Region chr19 27337600 27427400 High Signal Region chr19 34386800 34393500 High Signal Region chr19 34860600 34866200 High Signal Region chr19 36267900 36313700 High Signal Region chr19 37264900 37304300 High Signal Region chr19 44393300 44416700 High Signal Region chr19 47903000 47959700 High Signal Region chr19 50090500 50140400 High Signal Region chr19 58538700 58617600 High Signal Region chr2 1221700 1223900 High Signal Region chr2 1594700 1605200 High Signal Region chr2 3179600 3182100 High Signal Region chr2 4643800 4648800 High Signal Region chr2 10952800 10955000 High Signal Region chr2 13718700 13737700 High Signal Region chr2 21903500 21906400 High Signal Region chr2 32865900 32869900 High Signal Region chr2 32915300 32918400 High Signal Region chr2 33766500 33768400 High Signal Region chr2 36183000 36184500 High Signal Region chr2 49228700 49230700 High Signal Region chr2 64359300 64377000 High Signal Region chr2 86655300 86661100 High Signal Region chr2 86900700 87078100 Low Mappability chr2 87119300 87189800 Low Mappability chr2 87217000 87866200 High Signal Region chr2 88771000 88806500 High Signal Region chr2 89235300 89947100 High Signal Region chr2 90246300 91735500 High Signal Region chr2 91783000 91924800 Low Mappability chr2 91969000 94569500 High Signal Region chr2 95849400 96067900 High Signal Region chr2 97106300 97615800 High Signal Region chr2 109198400 109200700 High Signal Region chr2 109744600 110095200 High Signal Region chr2 110229200 110633400 Low Mappability chr2 111253600 111500500 Low Mappability chr2 112346200 112441300 Low Mappability chr2 113370100 113662700 High Signal Region chr2 130496800 130716400 High Signal Region chr2 132201000 132288900 High Signal Region chr2 132353600 132364500 High Signal Region chr2 148880800 148882800 High Signal Region chr2 161277700 161283400 High Signal Region chr2 181274800 181276800 High Signal Region chr2 226108500 226110400 High Signal Region chr2 234889800 234894400 High Signal Region chr2 239642200 239645600 High Signal Region chr2 240308100 240310300 High Signal Region chr2 241589300 241591800 High Signal Region chr2 242005900 242011100 High Signal Region chr2 242110100 242193500 High Signal Region chr20 0 67900 High Signal Region chr20 26364200 28916900 High Signal Region chr20 28939400 29264700 High Signal Region chr20 30995400 31246000 High Signal Region chr20 47893800 47900200 High Signal Region chr21 0 8679600 High Signal Region chr21 9159900 9735300 High Signal Region chr21 10013900 10069600 High Signal Region chr21 10094700 10505100 High Signal Region chr21 10650900 12965800 High Signal Region chr21 43212400 43280900 High Signal Region chr21 46682700 46709900 High Signal Region chr22 10687700 11428100 High Signal Region chr22 11496900 11873100 High Signal Region chr22 11976900 15154400 High Signal Region chr22 16258000 16385800 High Signal Region chr22 18175900 18947300 High Signal Region chr22 20337400 20343300 High Signal Region chr22 21113500 21554000 High Signal Region chr22 49972700 49975300 High Signal Region chr22 50642800 50644900 High Signal Region chr22 50786600 50818400 High Signal Region chr3 0 11600 High Signal Region chr3 3895200 3896700 High Signal Region chr3 4916700 4922500 High Signal Region chr3 14091000 14092500 High Signal Region chr3 15187200 15207800 High Signal Region chr3 15592100 15603300 High Signal Region chr3 16176800 16179200 High Signal Region chr3 16679700 16682500 High Signal Region chr3 19499700 19504000 High Signal Region chr3 19624000 19627100 High Signal Region chr3 21983200 21988100 High Signal Region chr3 24053500 24054900 High Signal Region chr3 26384800 26404100 High Signal Region chr3 29993900 29999900 High Signal Region chr3 36987500 36995000 High Signal Region chr3 38083400 38085400 High Signal Region chr3 38406100 38430900 High Signal Region chr3 39366700 39386000 High Signal Region chr3 40219400 40240500 High Signal Region chr3 49671000 49696700 High Signal Region chr3 51457800 51462000 High Signal Region chr3 57326800 57328500 High Signal Region chr3 65124100 65126100 High Signal Region chr3 65510000 65513900 High Signal Region chr3 65697400 65699300 High Signal Region chr3 66273800 66275200 High Signal Region chr3 68076400 68077800 High Signal Region chr3 69047300 69053600 High Signal Region chr3 69475300 69479700 High Signal Region chr3 75630100 75707800 High Signal Region chr3 75736400 75754600 High Signal Region chr3 78948800 78950500 High Signal Region chr3 80876000 80894000 High Signal Region chr3 89345600 89370500 High Signal Region chr3 90156400 90175500 High Signal Region chr3 90455400 91297100 High Signal Region chr3 91516200 93749200 High Signal Region chr3 96616300 96619300 High Signal Region chr3 97905100 97923200 High Signal Region chr3 101674800 101698400 High Signal Region chr3 103224300 103236500 High Signal Region chr3 106665700 106669700 High Signal Region chr3 106975900 106979600 High Signal Region chr3 108751100 108755100 High Signal Region chr3 111019500 111024600 High Signal Region chr3 121933800 121936400 High Signal Region chr3 122414300 122417500 High Signal Region chr3 122735500 122796600 High Signal Region chr3 122837000 122838700 High Signal Region chr3 133177100 133179800 High Signal Region chr3 133551500 133579500 High Signal Region chr3 135437200 135439100 High Signal Region chr3 136954600 136969200 High Signal Region chr3 137168400 137169900 High Signal Region chr3 138575800 138595900 High Signal Region chr3 139190800 139194700 High Signal Region chr3 153236200 153241300 High Signal Region chr3 155544100 155546700 High Signal Region chr3 156279000 156283500 High Signal Region chr3 157080800 157093400 High Signal Region chr3 158511300 158513100 High Signal Region chr3 160941200 160948700 High Signal Region chr3 161001900 161014100 High Signal Region chr3 165573100 165591000 High Signal Region chr3 166228200 166232400 High Signal Region chr3 168012100 168016800 High Signal Region chr3 170567000 170569900 High Signal Region chr3 170864300 170881400 High Signal Region chr3 171626600 171637700 High Signal Region chr3 174829200 174831800 High Signal Region chr3 176828700 176833000 High Signal Region chr3 177660600 177664000 High Signal Region chr3 178926800 178941300 High Signal Region chr3 183016900 183019100 High Signal Region chr3 183955400 183958700 High Signal Region chr3 187893900 187896100 High Signal Region chr3 192739300 192742700 High Signal Region chr3 194323600 194334900 High Signal Region chr3 195477900 195507300 High Signal Region chr3 195616000 195750100 High Signal Region chr3 195775500 195791400 High Signal Region chr3 195914100 196028300 High Signal Region chr3 196249400 196251900 High Signal Region chr3 196897800 196899800 High Signal Region chr3 197030600 197035800 High Signal Region chr3 197383400 197428800 High Signal Region chr3 197454700 197460800 High Signal Region chr3 197598400 197680900 High Signal Region chr3 198099800 198295500 High Signal Region chr4 0 69200 High Signal Region chr4 554100 556500 High Signal Region chr4 1427000 1468900 High Signal Region chr4 6002700 6005700 High Signal Region chr4 7863000 7865000 High Signal Region chr4 9212700 9369600 High Signal Region chr4 40291700 40318200 High Signal Region chr4 49077200 51816100 High Signal Region chr4 55327200 55329200 High Signal Region chr4 77994000 78009600 High Signal Region chr4 119274400 119301700 High Signal Region chr4 146285100 146305300 High Signal Region chr4 162420500 162422400 High Signal Region chr4 166554300 166581300 Low Mappability chr4 181238800 181242300 Low Mappability chr4 189232500 189236300 High Signal Region chr4 189834900 189849700 High Signal Region chr4 189877500 190023700 High Signal Region chr4 190048600 190214500 High Signal Region chr5 0 44100 High Signal Region chr5 548300 564100 High Signal Region chr5 647600 651700 High Signal Region chr5 1326100 1334600 High Signal Region chr5 2144600 2147800 High Signal Region chr5 2489800 2491700 High Signal Region chr5 3322100 3325100 High Signal Region chr5 6967700 6971700 High Signal Region chr5 17516800 17600200 High Signal Region chr5 21477600 21497600 High Signal Region chr5 25381400 25384300 High Signal Region chr5 34177900 34244800 High Signal Region chr5 45522900 45525200 High Signal Region chr5 45743000 45744800 High Signal Region chr5 46433900 46687700 High Signal Region chr5 46708100 50165300 High Signal Region chr5 60759700 60762500 High Signal Region chr5 63320900 63335500 High Signal Region chr5 69540700 71359500 High Signal Region chr5 71850000 71852800 High Signal Region chr5 74685400 74712400 High Signal Region chr5 78452400 78457600 High Signal Region chr5 78848400 78872800 High Signal Region chr5 80649100 80653100 High Signal Region chr5 85641800 85662700 High Signal Region chr5 93947500 93948900 High Signal Region chr5 94567100 94570400 High Signal Region chr5 100045500 100076300 High Signal Region chr5 106425500 106429500 High Signal Region chr5 109259500 109265400 High Signal Region chr5 111302100 111308300 High Signal Region chr5 114156700 114158300 High Signal Region chr5 119904000 119905600 High Signal Region chr5 123760300 123762200 High Signal Region chr5 134922500 134929400 High Signal Region chr5 139005500 139011600 High Signal Region chr5 146610000 146615500 High Signal Region chr5 153071100 153077000 High Signal Region chr5 156658300 156665400 High Signal Region chr5 161606000 161611700 High Signal Region chr5 171083900 171090200 High Signal Region chr5 175904500 176118000 High Signal Region chr5 176590700 176593000 High Signal Region chr5 177636700 177684700 High Signal Region chr5 177960500 177981400 High Signal Region chr5 178584600 178586600 High Signal Region chr5 181172600 181538200 High Signal Region chr6 256500 382800 High Signal Region chr6 861500 864200 High Signal Region chr6 1052800 1054800 High Signal Region chr6 26669200 26832300 High Signal Region chr6 33484600 33486400 High Signal Region chr6 34070600 34074000 High Signal Region chr6 38262000 38301600 High Signal Region chr6 39455800 39460500 High Signal Region chr6 44043600 44080000 High Signal Region chr6 44180600 44182900 High Signal Region chr6 51874900 51901300 High Signal Region chr6 54961900 54967400 High Signal Region chr6 58432200 60242300 High Signal Region chr6 61321800 61493000 High Signal Region chr6 61573200 61575100 Low Mappability chr6 61661900 61673400 High Signal Region chr6 103709000 103715100 High Signal Region chr6 115254900 115256800 High Signal Region chr6 143799900 143801800 High Signal Region chr6 156035300 156040100 High Signal Region chr6 157309500 157324800 High Signal Region chr6 160611700 160647400 High Signal Region chr6 170145300 170147200 High Signal Region chr6 170376900 170401000 High Signal Region chr6 170465400 170468400 High Signal Region chr7 0 49600 High Signal Region chr7 224500 241300 High Signal Region chr7 904700 907100 Low Mappability chr7 1271400 1273500 High Signal Region chr7 45251000 45253000 High Signal Region chr7 56369500 56375600 High Signal Region chr7 57485300 57497800 High Signal Region chr7 57611600 57637700 Low Mappability chr7 58031800 60997400 High Signal Region chr7 61017800 61075200 High Signal Region chr7 61102900 61725200 Low Mappability chr7 62265700 62409500 High Signal Region chr7 62430000 62520600 High Signal Region chr7 65488000 65496500 High Signal Region chr7 100951400 100968300 High Signal Region chr7 100991500 101004600 High Signal Region chr7 102474700 102686400 High Signal Region chr7 142665100 142668500 High Signal Region chr7 144180800 144377300 Low Mappability chr7 145996400 146018600 High Signal Region chr7 152375800 152435100 High Signal Region chr7 158131400 158156200 High Signal Region chr7 158594300 158596200 High Signal Region chr7 158893100 158918100 High Signal Region chr7 159334900 159345900 High Signal Region chr8 7209800 7914700 High Signal Region chr8 7940500 8075700 High Signal Region chr8 8128200 8204600 High Signal Region chr8 12136900 12614300 High Signal Region chr8 43236700 43262600 High Signal Region chr8 43937900 45969600 High Signal Region chr8 46829400 46832000 High Signal Region chr8 57204900 57216100 High Signal Region chr8 59168700 59170400 High Signal Region chr8 67584500 67592700 High Signal Region chr8 69688400 69691100 High Signal Region chr8 71406700 71412400 High Signal Region chr8 75444100 75448200 High Signal Region chr8 81841500 81851900 High Signal Region chr8 85642100 85829300 High Signal Region chr8 88685900 88691700 High Signal Region chr8 96171200 96173100 High Signal Region chr8 99494900 99496800 High Signal Region chr8 105789200 105793800 High Signal Region chr8 141491400 141493500 High Signal Region chr8 141871100 141875200 High Signal Region chr8 143641400 143670500 High Signal Region chr8 144124800 144137600 High Signal Region chr9 319900 322400 High Signal Region chr9 33656600 33660000 High Signal Region chr9 35912600 35915300 High Signal Region chr9 38824200 39089400 High Signal Region chr9 39846200 40771100 High Signal Region chr9 40792500 41323100 High Signal Region chr9 41492300 41635600 High Signal Region chr9 41661300 42119600 Low Mappability chr9 42364000 42410600 High Signal Region chr9 42899400 42901300 High Signal Region chr9 43263100 61518900 High Signal Region chr9 61735300 63548000 High Signal Region chr9 63761400 64027300 High Signal Region chr9 64135000 65390600 High Signal Region chr9 65579400 66874600 High Signal Region chr9 66959000 68398100 High Signal Region chr9 70037200 70039600 High Signal Region chr9 76174300 76176200 High Signal Region chr9 83222900 83226900 High Signal Region chr9 85071600 85075100 High Signal Region chr9 85164800 85166100 High Signal Region chr9 108502000 108506600 High Signal Region chr9 134164500 134185500 High Signal Region chr9 137326800 137330600 High Signal Region chr9 137715200 137722200 Low Mappability chr9 137841200 137846800 Low Mappability chr9 138222000 138394700 High Signal Region chrX 0 329300 High Signal Region chrX 362400 388500 High Signal Region chrX 456500 531800 High Signal Region chrX 723800 739500 High Signal Region chrX 864500 930400 High Signal Region chrX 1049100 1054300 High Signal Region chrX 1085100 1175500 High Signal Region chrX 1200600 1209400 High Signal Region chrX 1249200 1269000 High Signal Region chrX 1289500 1298900 High Signal Region chrX 1365300 1458700 High Signal Region chrX 1480900 1492800 High Signal Region chrX 1816200 1820600 High Signal Region chrX 2223900 2521900 High Signal Region chrX 2580600 2751300 High Signal Region chrX 3966700 3968700 High Signal Region chrX 5481200 5486100 High Signal Region chrX 6933400 6938700 High Signal Region chrX 7587600 7591800 High Signal Region chrX 9403600 9415100 High Signal Region chrX 10785000 10809700 High Signal Region chrX 10966600 10976800 High Signal Region chrX 11218800 11221100 Low Mappability chrX 11840900 11848000 High Signal Region chrX 14085100 14109500 High Signal Region chrX 14286500 14289300 High Signal Region chrX 16361200 16366000 High Signal Region chrX 16498100 16503400 High Signal Region chrX 19940200 19946300 High Signal Region chrX 21340600 21345700 High Signal Region chrX 25773300 25776000 High Signal Region chrX 26176400 26181400 High Signal Region chrX 30767800 30772600 High Signal Region chrX 31077600 31082600 High Signal Region chrX 31511400 31535800 High Signal Region chrX 34416800 34425900 High Signal Region chrX 36465200 36471200 High Signal Region chrX 37628400 37633500 High Signal Region chrX 42872300 42910700 High Signal Region chrX 49317500 49623500 High Signal Region chrX 50019400 50033700 High Signal Region chrX 50056700 50066100 High Signal Region chrX 51202300 51268100 High Signal Region chrX 51427500 51432400 High Signal Region chrX 52175000 52228100 High Signal Region chrX 52442800 52538100 High Signal Region chrX 53761700 53789500 High Signal Region chrX 55180400 55184500 High Signal Region chrX 56754900 56781100 Low Mappability chrX 57712300 57719700 High Signal Region chrX 58467900 62522800 High Signal Region chrX 63129600 63290600 Low Mappability chrX 67311800 67323800 High Signal Region chrX 67626800 67632300 High Signal Region chrX 68217300 68230200 High Signal Region chrX 70600000 70603800 High Signal Region chrX 70640600 70645000 High Signal Region chrX 70963600 70964900 High Signal Region chrX 71978800 71980500 High Signal Region chrX 72489400 72490800 High Signal Region chrX 72743200 73035800 High Signal Region chrX 73381000 73387000 High Signal Region chrX 73887000 73891300 High Signal Region chrX 74660000 74718100 High Signal Region chrX 74789000 74794000 High Signal Region chrX 74952200 74995200 High Signal Region chrX 78802400 78804500 High Signal Region chrX 79765500 79789600 High Signal Region chrX 80534100 80537000 High Signal Region chrX 82849700 82859300 Low Mappability chrX 83752100 83756900 High Signal Region chrX 86046600 86076600 High Signal Region chrX 86395500 86398100 High Signal Region chrX 86970000 86975600 High Signal Region chrX 87220500 87222100 High Signal Region chrX 89060200 89062700 High Signal Region chrX 89202500 89208400 High Signal Region chrX 91332900 91336600 High Signal Region chrX 93618000 93633400 High Signal Region chrX 94863600 94868300 High Signal Region chrX 97509600 97515000 High Signal Region chrX 100135800 100141000 High Signal Region chrX 100257100 100261600 High Signal Region chrX 101471700 101474900 High Signal Region chrX 102188700 102489200 High Signal Region chrX 103851800 103897800 High Signal Region chrX 106755500 106769400 High Signal Region chrX 106813900 106830900 High Signal Region chrX 107515800 107517200 High Signal Region chrX 109034800 109069100 High Signal Region chrX 109114900 109119400 High Signal Region chrX 109520800 109525700 High Signal Region chrX 109985900 109987300 High Signal Region chrX 110816700 110833400 High Signal Region chrX 111416100 111418000 High Signal Region chrX 113141700 113143600 High Signal Region chrX 114701600 114724300 High Signal Region chrX 115725600 115889600 High Signal Region chrX 116557600 116595600 High Signal Region chrX 117874100 117880000 High Signal Region chrX 118009000 118037800 High Signal Region chrX 118070900 118072700 High Signal Region chrX 121263700 121268100 High Signal Region chrX 121299200 121300600 High Signal Region chrX 122528400 122550000 High Signal Region chrX 124584300 124588400 High Signal Region chrX 125927600 125937100 High Signal Region chrX 126463700 126474200 High Signal Region chrX 127116700 127122600 High Signal Region chrX 127362200 127368300 High Signal Region chrX 128785000 128788700 High Signal Region chrX 129337600 129357900 High Signal Region chrX 129388400 129408400 High Signal Region chrX 130567700 130572000 High Signal Region chrX 131152200 131157400 High Signal Region chrX 131378300 131383300 High Signal Region chrX 131664300 131670000 High Signal Region chrX 132284600 132320400 High Signal Region chrX 133108600 133116500 High Signal Region chrX 135718600 135888700 High Signal Region chrX 137074700 137079100 High Signal Region chrX 137436600 137439300 High Signal Region chrX 138300600 138302200 High Signal Region chrX 139437600 139446800 High Signal Region chrX 139621500 139622800 High Signal Region chrX 140722400 140726100 High Signal Region chrX 141000400 141108300 High Signal Region chrX 142478000 142483800 High Signal Region chrX 142892300 142911600 High Signal Region chrX 143352000 143356500 High Signal Region chrX 144404500 144475900 Low Mappability chrX 147281700 147287100 High Signal Region chrX 147653800 147659900 High Signal Region chrX 148123500 148129000 High Signal Region chrX 148347100 148378700 High Signal Region chrX 149437900 149441900 High Signal Region chrX 150024800 150026200 High Signal Region chrX 152173800 152175100 High Signal Region chrX 153251200 153316400 High Signal Region chrX 154870000 154890200 High Signal Region chrX 154938900 154945100 High Signal Region chrX 155299600 155305100 High Signal Region chrX 155454000 155522000 High Signal Region chrX 155700400 155727500 High Signal Region chrX 155983500 156040800 High Signal Region chrY 4343800 4345800 High Signal Region chrY 10246200 11041200 High Signal Region chrY 11072100 11335300 High Signal Region chrY 11486600 11757800 High Signal Region chrY 26637300 57227400 High Signal Region ================================================ FILE: tracks/hg38.combined_blacklist.bed ================================================ [File too large to display: 72.5 MB] ================================================ FILE: tracks/hg38.high_runtime.bed ================================================ chr13 16660000 16685001 200.31 chr13 16807000 16832001 201.53 chr17 24304000 24329001 201.567 chr13 17125500 17150501 201.762 chr7 62303500 62328501 201.929 chr17 25235000 25260001 203.82 chr18 2940000 2965001 203.9 chr1 44565500 44590501 203.916 chr3 174807500 174832501 204.578 chr12 0 25001 204.931 chr5 49686000 49711001 204.978 chr10 39984000 40009001 205.314 chr16 14479500 14504501 205.502 chr22 12348000 12373001 206.143 chr19 24402000 24427001 206.715 chr17 26092500 26117501 206.936 chr16 46403000 46428001 207.242 chr16 34202000 34227001 207.518 chr17 25431000 25456001 207.796 chr13 16635500 16660501 209.095 chr3 91140000 91165001 209.463 chr20 30821000 30846001 210.483 chr16 34692000 34717001 210.521 chr3 90380500 90405501 210.567 chr16 34177500 34202501 210.946 chr10 21486500 21511501 211.286 chr13 17395000 17420001 214.498 chr3 91507500 91532501 214.602 chr16 35966000 35991001 214.865 chr7 57942500 57967501 215.161 chr13 17223500 17248501 216.611 chr13 16586500 16611501 216.675 chrX 62622000 62647001 219.136 chr13 16464000 16489001 219.855 chr13 17076500 17101501 220.742 chr20 28934500 28959501 221.317 chr13 17297000 17322001 221.517 chr9 64949500 64974501 221.872 chr13 17052000 17077001 222.058 chr19 48020000 48045001 223.192 chr13 17101000 17126001 223.703 chrX 111181000 111206001 223.762 chr8 43904000 43929001 224.069 chr17 25088000 25113001 224.519 chr21 37534000 37559001 224.775 chr17 23324000 23349001 225.98 chr17 25847500 25872501 226.549 chr19 24377500 24402501 226.678 chr19 41037500 41062501 226.944 chr9 40841500 40866501 227.104 chr1 123896500 123921501 227.236 chr13 17346000 17371001 228.012 chr12 37264500 37289501 228.042 chr11 48926500 48951501 228.062 chr8 141757000 141782001 228.354 chr2 94521000 94546001 230.376 chr15 19820500 19845501 231.707 chr20 30943500 30968501 231.795 chr12 37583000 37608001 232.21 chr5 46378500 46403501 232.363 chr8 63112000 63137001 232.69 chr16 36333500 36358501 233.1 chr5 49612500 49637501 233.398 chr17 23030000 23055001 235.789 chr17 26705000 26730001 236.673 chr20 45300500 45325501 237.331 chr7 62548500 62573501 237.92 chr13 17174500 17199501 238.275 chr17 24059000 24084001 238.855 chr13 17027500 17052501 239.493 chr10 40596500 40621501 240.047 chr8 20359500 20384501 241.755 chr11 133402500 133427501 241.807 chr22 30110500 30135501 241.826 chr17 22736000 22761001 243.31 chr21 5267500 5292501 244.005 chrX 1274000 1299001 245.393 chr5 50176000 50201001 246.429 chr3 90968500 90993501 246.493 chr17 25970000 25995001 246.697 chr16 34888000 34913001 246.932 chr9 60515000 60540001 248.008 chr15 18963000 18988001 248.104 chr3 71393000 71418001 248.789 chr17 23128000 23153001 249.727 chr4 136734500 136759501 249.946 chr9 129409000 129434001 250.297 chr7 69212500 69237501 251.108 chr10 98686000 98711001 251.677 chr17 24769500 24794501 253.302 chr13 16831500 16856501 254.866 chrX 62548500 62573501 254.876 chr22 35623000 35648001 255.42 chr3 91091000 91116001 255.86 chr10 40376000 40401001 255.977 chr11 36260000 36285001 256.304 chr1 124778500 124803501 258.491 chr3 93761500 93786501 260.847 chr13 20947500 20972501 260.865 chr2 94545500 94570501 261.352 chr11 37411500 37436501 262.848 chr15 19771500 19796501 263.259 chr14 93467500 93492501 264.017 chrX 62646500 62671501 264.527 chr7 29498000 29523001 265.054 chr13 17321500 17346501 265.43 chr22 12519500 12544501 265.502 chr8 45986500 46011501 266.334 chr10 42091000 42116001 266.418 chr7 13524000 13549001 266.577 chr7 58016000 58041001 266.774 chrX 6296500 6321501 266.966 chr7 61054000 61079001 267.185 chr2 87416000 87441001 267.503 chr5 46305000 46330001 268.071 chr17 25676000 25701001 268.485 chr5 50200500 50225501 268.525 chr3 164174500 164199501 269.743 chr17 25651500 25676501 273.071 chr14 71393000 71418001 273.418 chr12 19943000 19968001 273.8 chr16 35990500 36015501 274.607 chr3 91066500 91091501 279.274 chr3 164199000 164224001 279.682 chr14 29032500 29057501 279.882 chr10 39469500 39494501 279.934 chr6 61397000 61422001 279.949 chr5 50225000 50250001 280.28 chr7 117918500 117943501 280.661 chr17 25480000 25505001 281.583 chr11 48902000 48927001 282.222 chr7 57967000 57992001 283.033 chr4 74700500 74725501 283.796 chr4 136759000 136784001 284.07 chr2 89768000 89793001 284.453 chr14 93443000 93468001 285.54 chr17 25578000 25603001 287.048 chr10 40278000 40303001 288.179 chr3 90454000 90479001 288.855 chr3 90429500 90454501 289.34 chr9 40523000 40548001 289.548 chr1 242599000 242624001 290.312 chr19 24892000 24917001 296.548 chr16 36039500 36064501 297.066 chr7 151140500 151165501 297.899 chr7 38587500 38612501 298.055 chr6 134211000 134236001 298.086 chr22 16047500 16072501 298.991 chr17 24794000 24819001 301.577 chr3 91189000 91214001 301.757 chr20 30968000 30993001 301.781 chr8 137984000 138009001 301.868 chr12 37607500 37632501 302.578 chrX 62573000 62598001 302.737 chr15 17027500 17052501 303.545 chr7 61029500 61054501 304.059 chrX 58506000 58531001 304.24 chr17 24328500 24353501 305.166 chr3 99935500 99960501 306.639 chr19 27244000 27269001 306.656 chr12 44516500 44541501 308.333 chr17 24573500 24598501 309.115 chr16 6811000 6836001 310.179 chr7 62524000 62549001 310.584 chr1 123651500 123676501 310.677 chr3 90895000 90920001 311.556 chr5 46329500 46354501 311.939 chr17 26068000 26093001 312.042 chr4 148127000 148152001 313.351 chr16 36015000 36040001 313.439 chr20 28861000 28886001 313.486 chr1 60441500 60466501 314.444 chr11 48853000 48878001 314.983 chr19 27366500 27391501 316.626 chr3 138645500 138670501 317.366 chr22 16023000 16048001 318.266 chr19 55933500 55958501 321.472 chr17 23961000 23986001 321.797 chr19 27317500 27342501 322.544 chrX 62597500 62622501 322.871 chr17 25284000 25309001 324.135 chr1 125023500 125048501 324.204 chr2 1568000 1593001 324.249 chr21 5292000 5317001 325.173 chr3 93737000 93762001 325.465 chr1 123455500 123480501 327.116 chr12 37681000 37706001 328.439 chr19 39788000 39813001 330.563 chr17 25014500 25039501 331.211 chr17 48510000 48535001 331.514 chr20 2793000 2818001 333.462 chr1 125146000 125171001 338.905 chr19 27268500 27293501 339.482 chr20 30135000 30160001 339.511 chr1 124068000 124093001 341.457 chr15 83937000 83962001 344.74 chr19 35353500 35378501 345.557 chr6 4532500 4557501 345.974 chr1 121740500 121765501 346.376 chr20 29890000 29915001 346.749 chr17 23275000 23300001 346.882 chr11 50739500 50764501 348.598 chr19 7080500 7105501 349.683 chr12 37632000 37657001 350.202 chr7 57893500 57918501 351.03 chr8 45962000 45987001 351.113 chr20 26337500 26362501 352.135 chr17 26680500 26705501 353.691 chr16 68208000 68233001 354.501 chr3 90405000 90430001 359.17 chr17 25406500 25431501 360.321 chr17 26558000 26583001 361.779 chr3 91017500 91042501 362.511 chr3 90846000 90871001 366.113 chr14 58775500 58800501 366.88 chr10 39445000 39470001 370.361 chr4 53483500 53508501 372.44 chr7 153909000 153934001 372.703 chr17 23593500 23618501 379.342 chr17 25872000 25897001 380.73 chr3 6100500 6125501 381.269 chr17 23397500 23422501 382.927 chr17 23152500 23177501 383.837 chr20 29694000 29719001 388.212 chr17 26117000 26142001 391.745 chr21 10755500 10780501 391.925 chr1 123186000 123211001 392.881 chr15 19796000 19821001 398.054 chr10 39420500 39445501 407.36 chr12 128943500 128968501 408.665 chr17 23863000 23888001 412.522 chr22 12372500 12397501 414.248 chr17 25994500 26019501 414.398 chr5 46354000 46379001 417.498 chr12 37705500 37730501 421.705 chr11 50764000 50789001 426.272 chr17 24524500 24549501 426.316 chr3 90919500 90944501 426.88 chr12 34692000 34717001 427.559 chr3 91164500 91189501 428.718 chr3 90821500 90846501 437.099 chr17 23422000 23447001 439.72 chr17 24353000 24378001 442.273 chr17 23814000 23839001 443.762 chr6 109760000 109785001 449.68 chr3 90797000 90822001 450.559 chr17 23226000 23251001 454.185 chr17 25455500 25480501 454.479 chr2 89792500 89817501 455.229 chr19 27293000 27318001 457.811 chr6 61372500 61397501 458.538 chr7 57991500 58016501 458.619 chrX 32291000 32316001 459.006 chr3 93712500 93737501 464.049 chr17 26435500 26460501 470.504 chr9 43169000 43194001 471.608 chr1 122769500 122794501 472.473 chr7 57918000 57943001 477.493 chr17 26215000 26240001 478.255 chr10 39518500 39543501 478.275 chr1 122990000 123015001 482.532 chr3 91238000 91263001 484.823 chr10 39494000 39519001 484.901 chr1 123627000 123652001 485.318 chr17 23201500 23226501 495.189 chr9 43193500 43218501 498.249 chr12 52332000 52357001 508.451 chr17 23054500 23079501 511.199 chr3 90772500 90797501 514.17 chr17 26043500 26068501 514.786 chr1 123333000 123358001 515.578 chr12 34667500 34692501 515.955 chr17 25137000 25162001 519.668 chr17 24279500 24304501 520.46 chr11 50788500 50813501 522.116 chr17 26190500 26215501 523.419 chr17 26509000 26534001 524.167 chr1 123039000 123064001 526.052 chr7 7962500 7987501 526.69 chr5 55786500 55811501 534.781 chr17 22760500 22785501 539.536 chr3 90870500 90895501 543.466 chr17 25823000 25848001 544.589 chr17 24671500 24696501 546.987 chr17 24181500 24206501 558.639 chr13 61862500 61887501 559.708 chr17 23985500 24010501 559.938 chr13 56791000 56816001 561.631 chr10 65096500 65121501 565.917 chr17 25945500 25970501 567.872 chr7 3258500 3283501 570.751 chr6 30429000 30454001 572.075 chr4 112479500 112504501 578.068 chr15 65954000 65979001 580.993 chr17 24034500 24059501 581.008 chr19 54659500 54684501 588.398 chr1 124460000 124485001 589.356 chr1 124337500 124362501 595.291 chr17 24108000 24133001 598.498 chr1 122720500 122745501 606.913 chr17 26337500 26362501 609.154 chr7 157535000 157560001 621.593 chr17 23103500 23128501 622.043 chr1 16660000 16685001 629.674 chr17 25039000 25064001 630.891 chr1 123308500 123333501 632.928 chr1 123259500 123284501 641.023 chr1 123063500 123088501 642.245 chr7 62499500 62524501 643.386 chr17 23936500 23961501 644.727 chr17 23177000 23202001 645.466 chr17 23740500 23765501 660.114 chr1 123357500 123382501 666.049 chr3 91532000 91557001 668.738 chr17 26533500 26558501 670.338 chr17 26141500 26166501 672.135 chr1 122941000 122966001 678.844 chr17 23765000 23790001 680.082 chr10 39543000 39568001 682.513 chr17 24230500 24255501 695.284 chr1 123235000 123260001 703.32 chr1 123578000 123603001 703.85 chr17 26166000 26191001 715.287 chr1 124239500 124264501 726.574 chr17 26460000 26485001 732.662 chr17 25774000 25799001 748.934 chr20 29841000 29866001 763.551 chr9 110421500 110446501 768.529 chr1 123284000 123309001 769.27 chr17 25627000 25652001 801.529 chr17 26386500 26411501 802.085 chr17 24083500 24108501 803.179 chr3 52944500 52969501 806.148 chr17 26631500 26656501 807.831 chr17 23250500 23275501 817.027 chr1 122573500 122598501 835.932 chr3 90993000 91018001 865.716 chr1 123872000 123897001 870.956 chr1 122696000 122721001 872.648 chr17 24255000 24280001 879.328 chr13 26558000 26583001 898.345 chr1 123823000 123848001 903.328 chr3 90478500 90503501 910.833 chr17 25259500 25284501 923.172 chr1 123921000 123946001 923.626 chr17 23667000 23692001 927.039 chr1 122745000 122770001 931.06 chr2 32928000 32953001 935.33 chr3 90944000 90969001 964.885 chr1 123480000 123505001 980.457 chr17 24818500 24843501 987.73 chr17 25529000 25554001 995.266 chr17 26239500 26264501 999.115 chr17 23373000 23398001 1004.48 chr17 23789500 23814501 1010.05 chr17 26288500 26313501 1067.03 chr17 24132500 24157501 1086.69 chr10 41821500 41846501 1101.6 chr1 122598000 122623001 1114.25 chr17 25921000 25946001 1120.98 chr1 122965500 122990501 1189.6 chr17 25798500 25823501 1266.34 chr1 123602500 123627501 1280.69 chr17 26019000 26044001 1289.26 chr3 153884500 153909501 1298.94 chr7 4410000 4435001 1382.17 chr17 24377500 24402501 1383.77 chr17 26264000 26289001 1446.1 chr12 66057578 66057693 chr10 12774633 12776503 chr2 231841130 231844516 chr11 71065440 71066328 chr13 16170001 16195001 chrY 12372051 12372250 chr3 40203820 40204166 chr4 5315982 5317621 chrX 29356345 29356480 chr17 66798345 66799800 chr14 99420871 99421057 chrY 20054000 20350000 chr2 231822656 231849781 chr13 112283501 112308501 chr7 107770167 107770305 chr19 34196708 34196809 chr18 79200605 79200885 chr4 5316133 5317662 chr21 46292368 46294980 chr17 198345 198635 chr17 201442 201916 chr7 158360007 158361373 chr5 181088730 181091752 chr12 131626424 131627943 chr12 132134582 132136546 chr12 129855139 129859249 chr12 132148859 132150810 chr4 186957707 186975063 chr10 1234835 1240738 chr7 156154000 156156042 chr17 253178 258774 chr7 159202609 159203816 chr6 6261565 6262270 chr7 158319001 158344001 chr17 198259 198748 chr21 9800001 9825001 chr13 19137402 19138405 chr20 48503485 48517235 chr1 228609501 228634501 chr17 940715 943201 chr2 134606947 134609908 chr16 21829501 21854501 chr20 64173482 64176583 chr16 846582 847249 chr16 857416 860062 chr20 64173406 64176518 chr14 106752045 106753688 chr2 1342157 1346404 chr5 897094 900022 chr2 240976089 240981263 chr20 48503544 48516784 chr11 1429393 1433293 chr6 519038 521502 chr1 2121226 2124501 chr6 168592129 168595461 chr6 168571688 168573551 chr6 168560449 168562450 chr6 168592071 168595531 chr15 23040256 23050545 chr16 960212 962387 chr4 1397195 1398698 chr1 2651908 2778079 chr1 4077191 4078805 chr1 1382158 1382843 chr1 7114675 7115557 chr1 1248679 1249662 chr1 46240247 46242976 chr1 2280688 2282526 chr1 3475094 3475793 chr1 53713139 53713413 chr1 819786 823964 chr1 29723204 29724020 chr1 1288154 1290208 chr1 1075830 1079411 ================================================ FILE: tracks/hg38.manual.blacklist.bed ================================================ chr10 0 45700 Low Mappability chr10 38481300 38596500 High Signal Region chr10 38782600 38967900 High Signal Region chr10 39901300 41712900 High Signal Region chr10 41838900 42107300 High Signal Region chr10 42279400 42322500 High Signal Region chr10 126946300 126953400 Low Mappability chr10 133625800 133797400 High Signal Region chr11 0 194500 Low Mappability chr11 518900 520700 Low Mappability chr11 584400 586500 High Signal Region chr11 964100 966000 Low Mappability chr11 1015700 1019300 High Signal Region chr11 1091000 1098200 Low Mappability chr11 3652800 3655600 High Signal Region chr11 10506900 10511100 High Signal Region chr11 28206300 28236700 High Signal Region chr11 50813600 54383000 High Signal Region chr11 61084500 61130400 High Signal Region chr11 70370400 70372400 High Signal Region chr11 73509800 73511700 High Signal Region chr11 77885600 77887600 High Signal Region chr11 93417500 93427700 High Signal Region chr11 94232700 94240400 High Signal Region chr11 103408700 103410600 High Signal Region chr11 121175000 121187000 High Signal Region chr11 131679500 131681500 High Signal Region chr11 135075600 135086600 High Signal Region chr12 0 77800 High Signal Region chr12 371800 422400 High Signal Region chr12 2254900 2257000 High Signal Region chr12 2519800 2540500 Low Mappability chr12 5928900 5933000 Low Mappability chr12 20550500 20552400 Low Mappability chr12 20768400 20770300 High Signal Region chr12 29790400 29834600 High Signal Region chr12 34715400 37269100 High Signal Region chr12 41362700 41364600 High Signal Region chr12 61471100 61473000 High Signal Region chr12 66473900 66475800 High Signal Region chr12 101147000 101155000 High Signal Region chr12 113079600 113081500 High Signal Region chr12 124430500 124440300 High Signal Region chr12 124905900 124941800 High Signal Region chr12 130386400 130394100 High Signal Region chr12 131475300 131478600 High Signal Region chr12 131576000 131589700 High Signal Region chr12 132223300 132243400 High Signal Region chr12 132455100 132465200 High Signal Region chr12 133249000 133275300 High Signal Region chr13 16087600 16165300 High Signal Region chr13 16226300 18171400 High Signal Region chr13 18211000 18216100 High Signal Region chr13 57140500 57172500 High Signal Region chr13 109423200 109425200 High Signal Region chr13 114353300 114364300 Low Mappability chr14 0 18670900 High Signal Region chr14 18695400 19724300 High Signal Region chr14 23033300 23098600 High Signal Region chr14 26629300 26634900 High Signal Region chr14 31793800 31798100 High Signal Region chr14 32483400 32486000 High Signal Region chr14 34537100 34562600 High Signal Region chr14 35947200 35950000 High Signal Region chr14 37351000 37356700 High Signal Region chr14 44025100 44027200 High Signal Region chr14 44705100 44709900 High Signal Region chr14 45477100 45482500 High Signal Region chr14 46865300 46866500 High Signal Region chr14 54235600 54240000 High Signal Region chr14 57112100 57118100 High Signal Region chr14 74711700 74729000 High Signal Region chr14 86074000 86076000 High Signal Region chr14 86593300 86595200 High Signal Region chr14 88443700 88458100 High Signal Region chr14 100525900 100527800 High Signal Region chr14 101267600 101272200 High Signal Region chr14 101674400 101676400 High Signal Region chr14 104288100 104290200 High Signal Region chr14 105215000 105240900 High Signal Region chr14 105568500 105583900 High Signal Region chr14 105616500 105618600 High Signal Region chr14 106326900 106367700 High Signal Region chr15 0 17035000 High Signal Region chr15 17058500 19790100 High Signal Region chr15 20005600 22606300 High Signal Region chr15 23125400 23357400 High Signal Region chr15 25757700 25759100 Low Mappability chr15 28304900 28683400 High Signal Region chr15 30066300 30627500 High Signal Region chr15 30844100 30859900 High Signal Region chr15 32153700 32626200 High Signal Region chr15 54925700 54932200 High Signal Region chr15 56311200 56314600 High Signal Region chr15 72635200 72687100 High Signal Region chr15 74068100 74102000 High Signal Region chr15 75254100 75299800 High Signal Region chr15 77698600 77700600 High Signal Region chr15 82321000 82374600 High Signal Region chr15 82421200 82541700 High Signal Region chr15 84405300 84524700 High Signal Region chr15 101752300 101764800 Low Mappability chr15 101892700 101991100 High Signal Region chr16 29430800 29566900 Low Mappability chr16 34061400 34121400 High Signal Region chr16 34272000 34633100 High Signal Region chr16 34657200 34672500 High Signal Region chr16 34694600 34772000 High Signal Region chr16 34832600 34922100 High Signal Region chr16 34945600 35072500 Low Mappability chr16 36166300 36202400 High Signal Region chr16 36225200 46423000 High Signal Region chr16 46449700 46467000 High Signal Region chr16 90100500 90338300 Low Mappability chr17 0 137600 High Signal Region chr17 294900 317900 High Signal Region chr17 448200 510900 High Signal Region chr17 1061500 1066100 High Signal Region chr17 1307700 1312000 Low Mappability chr17 19025700 19237400 High Signal Region chr17 21783300 22054000 High Signal Region chr17 22520400 22527300 High Signal Region chr17 22745200 26629800 High Signal Region chr17 26766800 26987200 High Signal Region chr17 43227600 43324300 High Signal Region chr17 45511500 45641300 Low Mappability chr17 53104900 53107300 High Signal Region chr18 0 64600 High Signal Region chr18 105200 113200 High Signal Region chr18 971000 976500 High Signal Region chr18 2841300 2861500 High Signal Region chr18 15367200 20940300 High Signal Region chr18 46961600 47031700 High Signal Region chr18 47852300 47854300 Low Mappability chr18 52791800 52793800 High Signal Region chr18 74615900 74618100 High Signal Region chr18 76966200 76968500 High Signal Region chr18 78436900 78438700 Low Mappability chr18 79013800 79040300 High Signal Region chr18 79617800 79621500 High Signal Region chr18 80257400 80373200 High Signal Region chr19 0 271200 High Signal Region chr19 7019100 7061300 High Signal Region chr19 7449400 7452000 High Signal Region chr19 8740100 8800500 High Signal Region chr19 24330100 27274500 High Signal Region chr19 27337600 27427400 High Signal Region chr19 34386800 34393500 High Signal Region chr19 34860600 34866200 High Signal Region chr19 36267900 36313700 High Signal Region chr19 37264900 37304300 High Signal Region chr19 44393300 44416700 High Signal Region chr19 47903000 47959700 High Signal Region chr19 50090500 50140400 High Signal Region chr19 58538700 58617600 High Signal Region chr1 0 792500 High Signal Region chr1 91386300 91388400 Low Mappability chr1 103594400 103760600 High Signal Region chr1 121605200 124938900 High Signal Region chr1 125067600 125086000 High Signal Region chr1 125130200 143562200 High Signal Region chr1 161423100 161472400 High Signal Region chr1 168348600 168349900 High Signal Region chr1 224010800 224017000 High Signal Region chr1 236713000 236715600 Low Mappability chr1 248932700 248956400 High Signal Region chr20 0 67900 High Signal Region chr20 26364200 28916900 High Signal Region chr20 28939400 29264700 High Signal Region chr20 30995400 31246000 High Signal Region chr20 47893800 47900200 High Signal Region chr21 0 8679600 High Signal Region chr21 9159900 9735300 High Signal Region chr21 10013900 10069600 High Signal Region chr21 10094700 10505100 High Signal Region chr21 10650900 12965800 High Signal Region chr21 43212400 43280900 High Signal Region chr21 46682700 46709900 High Signal Region chr22 10687700 11428100 High Signal Region chr22 11496900 11873100 High Signal Region chr22 11976900 15154400 High Signal Region chr22 16258000 16385800 High Signal Region chr22 18175900 18947300 High Signal Region chr22 20337400 20343300 High Signal Region chr22 21113500 21554000 High Signal Region chr22 49972700 49975300 High Signal Region chr22 50642800 50644900 High Signal Region chr22 50786600 50818400 High Signal Region chr2 1221700 1223900 High Signal Region chr2 1594700 1605200 High Signal Region chr2 3179600 3182100 High Signal Region chr2 4643800 4648800 High Signal Region chr2 10952800 10955000 High Signal Region chr2 13718700 13737700 High Signal Region chr2 21903500 21906400 High Signal Region chr2 32865900 32869900 High Signal Region chr2 32915300 32918400 High Signal Region chr2 33766500 33768400 High Signal Region chr2 36183000 36184500 High Signal Region chr2 49228700 49230700 High Signal Region chr2 64359300 64377000 High Signal Region chr2 86655300 86661100 High Signal Region chr2 86900700 87078100 Low Mappability chr2 87119300 87189800 Low Mappability chr2 87217000 87866200 High Signal Region chr2 88771000 88806500 High Signal Region chr2 89235300 89947100 High Signal Region chr2 90246300 91735500 High Signal Region chr2 91783000 91924800 Low Mappability chr2 91969000 94569500 High Signal Region chr2 95849400 96067900 High Signal Region chr2 97106300 97615800 High Signal Region chr2 109198400 109200700 High Signal Region chr2 109744600 110095200 High Signal Region chr2 110229200 110633400 Low Mappability chr2 111253600 111500500 Low Mappability chr2 112346200 112441300 Low Mappability chr2 113370100 113662700 High Signal Region chr2 130496800 130716400 High Signal Region chr2 132201000 132288900 High Signal Region chr2 132353600 132364500 High Signal Region chr2 148880800 148882800 High Signal Region chr2 161277700 161283400 High Signal Region chr2 181274800 181276800 High Signal Region chr2 226108500 226110400 High Signal Region chr2 234889800 234894400 High Signal Region chr2 239642200 239645600 High Signal Region chr2 240308100 240310300 High Signal Region chr2 241589300 241591800 High Signal Region chr2 242005900 242011100 High Signal Region chr2 242110100 242193500 High Signal Region chr3 0 11600 High Signal Region chr3 3895200 3896700 High Signal Region chr3 4916700 4922500 High Signal Region chr3 14091000 14092500 High Signal Region chr3 15187200 15207800 High Signal Region chr3 15592100 15603300 High Signal Region chr3 16176800 16179200 High Signal Region chr3 16679700 16682500 High Signal Region chr3 19499700 19504000 High Signal Region chr3 19624000 19627100 High Signal Region chr3 21983200 21988100 High Signal Region chr3 24053500 24054900 High Signal Region chr3 26384800 26404100 High Signal Region chr3 29993900 29999900 High Signal Region chr3 36987500 36995000 High Signal Region chr3 38083400 38085400 High Signal Region chr3 38406100 38430900 High Signal Region chr3 39366700 39386000 High Signal Region chr3 40219400 40240500 High Signal Region chr3 49671000 49696700 High Signal Region chr3 51457800 51462000 High Signal Region chr3 57326800 57328500 High Signal Region chr3 65124100 65126100 High Signal Region chr3 65510000 65513900 High Signal Region chr3 65697400 65699300 High Signal Region chr3 66273800 66275200 High Signal Region chr3 68076400 68077800 High Signal Region chr3 69047300 69053600 High Signal Region chr3 69475300 69479700 High Signal Region chr3 75630100 75707800 High Signal Region chr3 75736400 75754600 High Signal Region chr3 78948800 78950500 High Signal Region chr3 80876000 80894000 High Signal Region chr3 89345600 89370500 High Signal Region chr3 90156400 90175500 High Signal Region chr3 90455400 91297100 High Signal Region chr3 91516200 93749200 High Signal Region chr3 96616300 96619300 High Signal Region chr3 97905100 97923200 High Signal Region chr3 101674800 101698400 High Signal Region chr3 103224300 103236500 High Signal Region chr3 106665700 106669700 High Signal Region chr3 106975900 106979600 High Signal Region chr3 108751100 108755100 High Signal Region chr3 111019500 111024600 High Signal Region chr3 121933800 121936400 High Signal Region chr3 122414300 122417500 High Signal Region chr3 122735500 122796600 High Signal Region chr3 122837000 122838700 High Signal Region chr3 133177100 133179800 High Signal Region chr3 133551500 133579500 High Signal Region chr3 135437200 135439100 High Signal Region chr3 136954600 136969200 High Signal Region chr3 137168400 137169900 High Signal Region chr3 138575800 138595900 High Signal Region chr3 139190800 139194700 High Signal Region chr3 153236200 153241300 High Signal Region chr3 155544100 155546700 High Signal Region chr3 156279000 156283500 High Signal Region chr3 157080800 157093400 High Signal Region chr3 158511300 158513100 High Signal Region chr3 160941200 160948700 High Signal Region chr3 161001900 161014100 High Signal Region chr3 165573100 165591000 High Signal Region chr3 166228200 166232400 High Signal Region chr3 168012100 168016800 High Signal Region chr3 170567000 170569900 High Signal Region chr3 170864300 170881400 High Signal Region chr3 171626600 171637700 High Signal Region chr3 174829200 174831800 High Signal Region chr3 176828700 176833000 High Signal Region chr3 177660600 177664000 High Signal Region chr3 178926800 178941300 High Signal Region chr3 183016900 183019100 High Signal Region chr3 183955400 183958700 High Signal Region chr3 187893900 187896100 High Signal Region chr3 192739300 192742700 High Signal Region chr3 194323600 194334900 High Signal Region chr3 195477900 195507300 High Signal Region chr3 195616000 195750100 High Signal Region chr3 195775500 195791400 High Signal Region chr3 195914100 196028300 High Signal Region chr3 196249400 196251900 High Signal Region chr3 196897800 196899800 High Signal Region chr3 197030600 197035800 High Signal Region chr3 197383400 197428800 High Signal Region chr3 197454700 197460800 High Signal Region chr3 197598400 197680900 High Signal Region chr3 198099800 198295500 High Signal Region chr4 0 69200 High Signal Region chr4 554100 556500 High Signal Region chr4 1427000 1468900 High Signal Region chr4 6002700 6005700 High Signal Region chr4 7863000 7865000 High Signal Region chr4 9212700 9369600 High Signal Region chr4 40291700 40318200 High Signal Region chr4 49077200 51816100 High Signal Region chr4 55327200 55329200 High Signal Region chr4 77994000 78009600 High Signal Region chr4 119274400 119301700 High Signal Region chr4 146285100 146305300 High Signal Region chr4 162420500 162422400 High Signal Region chr4 166554300 166581300 Low Mappability chr4 181238800 181242300 Low Mappability chr4 189232500 189236300 High Signal Region chr4 189834900 189849700 High Signal Region chr4 189877500 190023700 High Signal Region chr4 190048600 190214500 High Signal Region chr5 0 44100 High Signal Region chr5 548300 564100 High Signal Region chr5 647600 651700 High Signal Region chr5 1326100 1334600 High Signal Region chr5 2144600 2147800 High Signal Region chr5 2489800 2491700 High Signal Region chr5 3322100 3325100 High Signal Region chr5 6967700 6971700 High Signal Region chr5 17516800 17600200 High Signal Region chr5 21477600 21497600 High Signal Region chr5 25381400 25384300 High Signal Region chr5 34177900 34244800 High Signal Region chr5 45522900 45525200 High Signal Region chr5 45743000 45744800 High Signal Region chr5 46433900 46687700 High Signal Region chr5 46708100 50165300 High Signal Region chr5 60759700 60762500 High Signal Region chr5 63320900 63335500 High Signal Region chr5 69540700 71359500 High Signal Region chr5 71850000 71852800 High Signal Region chr5 74685400 74712400 High Signal Region chr5 78452400 78457600 High Signal Region chr5 78848400 78872800 High Signal Region chr5 80649100 80653100 High Signal Region chr5 85641800 85662700 High Signal Region chr5 93947500 93948900 High Signal Region chr5 94567100 94570400 High Signal Region chr5 100045500 100076300 High Signal Region chr5 106425500 106429500 High Signal Region chr5 109259500 109265400 High Signal Region chr5 111302100 111308300 High Signal Region chr5 114156700 114158300 High Signal Region chr5 119904000 119905600 High Signal Region chr5 123760300 123762200 High Signal Region chr5 134922500 134929400 High Signal Region chr5 139005500 139011600 High Signal Region chr5 146610000 146615500 High Signal Region chr5 153071100 153077000 High Signal Region chr5 156658300 156665400 High Signal Region chr5 161606000 161611700 High Signal Region chr5 171083900 171090200 High Signal Region chr5 175904500 176118000 High Signal Region chr5 176590700 176593000 High Signal Region chr5 177636700 177684700 High Signal Region chr5 177960500 177981400 High Signal Region chr5 178584600 178586600 High Signal Region chr5 181172600 181538200 High Signal Region chr6 256500 382800 High Signal Region chr6 861500 864200 High Signal Region chr6 1052800 1054800 High Signal Region chr6 26669200 26832300 High Signal Region chr6 33484600 33486400 High Signal Region chr6 34070600 34074000 High Signal Region chr6 38262000 38301600 High Signal Region chr6 39455800 39460500 High Signal Region chr6 44043600 44080000 High Signal Region chr6 44180600 44182900 High Signal Region chr6 51874900 51901300 High Signal Region chr6 54961900 54967400 High Signal Region chr6 58432200 60242300 High Signal Region chr6 61321800 61493000 High Signal Region chr6 61573200 61575100 Low Mappability chr6 61661900 61673400 High Signal Region chr6 103709000 103715100 High Signal Region chr6 115254900 115256800 High Signal Region chr6 143799900 143801800 High Signal Region chr6 156035300 156040100 High Signal Region chr6 157309500 157324800 High Signal Region chr6 160611700 160647400 High Signal Region chr6 170145300 170147200 High Signal Region chr6 170376900 170401000 High Signal Region chr6 170465400 170468400 High Signal Region chr7 0 49600 High Signal Region chr7 224500 241300 High Signal Region chr7 904700 907100 Low Mappability chr7 1271400 1273500 High Signal Region chr7 45251000 45253000 High Signal Region chr7 56369500 56375600 High Signal Region chr7 57485300 57497800 High Signal Region chr7 57611600 57637700 Low Mappability chr7 58031800 60997400 High Signal Region chr7 61017800 61075200 High Signal Region chr7 61102900 61725200 Low Mappability chr7 62265700 62409500 High Signal Region chr7 62430000 62520600 High Signal Region chr7 65488000 65496500 High Signal Region chr7 100951400 100968300 High Signal Region chr7 100991500 101004600 High Signal Region chr7 102474700 102686400 High Signal Region chr7 142665100 142668500 High Signal Region chr7 144180800 144377300 Low Mappability chr7 145996400 146018600 High Signal Region chr7 152375800 152435100 High Signal Region chr7 158131400 158156200 High Signal Region chr7 158594300 158596200 High Signal Region chr7 158893100 158918100 High Signal Region chr7 159334900 159345900 High Signal Region chr8 7209800 7914700 High Signal Region chr8 7940500 8075700 High Signal Region chr8 8128200 8204600 High Signal Region chr8 12136900 12614300 High Signal Region chr8 43236700 43262600 High Signal Region chr8 43937900 45969600 High Signal Region chr8 46829400 46832000 High Signal Region chr8 57204900 57216100 High Signal Region chr8 59168700 59170400 High Signal Region chr8 67584500 67592700 High Signal Region chr8 69688400 69691100 High Signal Region chr8 71406700 71412400 High Signal Region chr8 75444100 75448200 High Signal Region chr8 81841500 81851900 High Signal Region chr8 85642100 85829300 High Signal Region chr8 88685900 88691700 High Signal Region chr8 96171200 96173100 High Signal Region chr8 99494900 99496800 High Signal Region chr8 105789200 105793800 High Signal Region chr8 141491400 141493500 High Signal Region chr8 141871100 141875200 High Signal Region chr8 143641400 143670500 High Signal Region chr8 144124800 144137600 High Signal Region chr9 319900 322400 High Signal Region chr9 33656600 33660000 High Signal Region chr9 35912600 35915300 High Signal Region chr9 38824200 39089400 High Signal Region chr9 39846200 40771100 High Signal Region chr9 40792500 41323100 High Signal Region chr9 41492300 41635600 High Signal Region chr9 41661300 42119600 Low Mappability chr9 42364000 42410600 High Signal Region chr9 42899400 42901300 High Signal Region chr9 43263100 61518900 High Signal Region chr9 61735300 63548000 High Signal Region chr9 63761400 64027300 High Signal Region chr9 64135000 65390600 High Signal Region chr9 65579400 66874600 High Signal Region chr9 66959000 68398100 High Signal Region chr9 70037200 70039600 High Signal Region chr9 76174300 76176200 High Signal Region chr9 83222900 83226900 High Signal Region chr9 85071600 85075100 High Signal Region chr9 85164800 85166100 High Signal Region chr9 108502000 108506600 High Signal Region chr9 134164500 134185500 High Signal Region chr9 137326800 137330600 High Signal Region chr9 137715200 137722200 Low Mappability chr9 137841200 137846800 Low Mappability chr9 138222000 138394700 High Signal Region chrX 0 329300 High Signal Region chrX 362400 388500 High Signal Region chrX 456500 531800 High Signal Region chrX 723800 739500 High Signal Region chrX 864500 930400 High Signal Region chrX 1049100 1054300 High Signal Region chrX 1085100 1175500 High Signal Region chrX 1200600 1209400 High Signal Region chrX 1249200 1269000 High Signal Region chrX 1289500 1298900 High Signal Region chrX 1365300 1458700 High Signal Region chrX 1480900 1492800 High Signal Region chrX 1816200 1820600 High Signal Region chrX 2223900 2521900 High Signal Region chrX 2580600 2751300 High Signal Region chrX 3966700 3968700 High Signal Region chrX 5481200 5486100 High Signal Region chrX 6933400 6938700 High Signal Region chrX 7587600 7591800 High Signal Region chrX 9403600 9415100 High Signal Region chrX 10785000 10809700 High Signal Region chrX 10966600 10976800 High Signal Region chrX 11218800 11221100 Low Mappability chrX 11840900 11848000 High Signal Region chrX 14085100 14109500 High Signal Region chrX 14286500 14289300 High Signal Region chrX 16361200 16366000 High Signal Region chrX 16498100 16503400 High Signal Region chrX 19940200 19946300 High Signal Region chrX 21340600 21345700 High Signal Region chrX 25773300 25776000 High Signal Region chrX 26176400 26181400 High Signal Region chrX 30767800 30772600 High Signal Region chrX 31077600 31082600 High Signal Region chrX 31511400 31535800 High Signal Region chrX 34416800 34425900 High Signal Region chrX 36465200 36471200 High Signal Region chrX 37628400 37633500 High Signal Region chrX 42872300 42910700 High Signal Region chrX 49317500 49623500 High Signal Region chrX 50019400 50033700 High Signal Region chrX 50056700 50066100 High Signal Region chrX 51202300 51268100 High Signal Region chrX 51427500 51432400 High Signal Region chrX 52175000 52228100 High Signal Region chrX 52442800 52538100 High Signal Region chrX 53761700 53789500 High Signal Region chrX 55180400 55184500 High Signal Region chrX 56754900 56781100 Low Mappability chrX 57712300 57719700 High Signal Region chrX 58467900 62522800 High Signal Region chrX 63129600 63290600 Low Mappability chrX 67311800 67323800 High Signal Region chrX 67626800 67632300 High Signal Region chrX 68217300 68230200 High Signal Region chrX 70600000 70603800 High Signal Region chrX 70640600 70645000 High Signal Region chrX 70963600 70964900 High Signal Region chrX 71978800 71980500 High Signal Region chrX 72489400 72490800 High Signal Region chrX 72743200 73035800 High Signal Region chrX 73381000 73387000 High Signal Region chrX 73887000 73891300 High Signal Region chrX 74660000 74718100 High Signal Region chrX 74789000 74794000 High Signal Region chrX 74952200 74995200 High Signal Region chrX 78802400 78804500 High Signal Region chrX 79765500 79789600 High Signal Region chrX 80534100 80537000 High Signal Region chrX 82849700 82859300 Low Mappability chrX 83752100 83756900 High Signal Region chrX 86046600 86076600 High Signal Region chrX 86395500 86398100 High Signal Region chrX 86970000 86975600 High Signal Region chrX 87220500 87222100 High Signal Region chrX 89060200 89062700 High Signal Region chrX 89202500 89208400 High Signal Region chrX 91332900 91336600 High Signal Region chrX 93618000 93633400 High Signal Region chrX 94863600 94868300 High Signal Region chrX 97509600 97515000 High Signal Region chrX 100135800 100141000 High Signal Region chrX 100257100 100261600 High Signal Region chrX 101471700 101474900 High Signal Region chrX 102188700 102489200 High Signal Region chrX 103851800 103897800 High Signal Region chrX 106755500 106769400 High Signal Region chrX 106813900 106830900 High Signal Region chrX 107515800 107517200 High Signal Region chrX 109034800 109069100 High Signal Region chrX 109114900 109119400 High Signal Region chrX 109520800 109525700 High Signal Region chrX 109985900 109987300 High Signal Region chrX 110816700 110833400 High Signal Region chrX 111416100 111418000 High Signal Region chrX 113141700 113143600 High Signal Region chrX 114701600 114724300 High Signal Region chrX 115725600 115889600 High Signal Region chrX 116557600 116595600 High Signal Region chrX 117874100 117880000 High Signal Region chrX 118009000 118037800 High Signal Region chrX 118070900 118072700 High Signal Region chrX 121263700 121268100 High Signal Region chrX 121299200 121300600 High Signal Region chrX 122528400 122550000 High Signal Region chrX 124584300 124588400 High Signal Region chrX 125927600 125937100 High Signal Region chrX 126463700 126474200 High Signal Region chrX 127116700 127122600 High Signal Region chrX 127362200 127368300 High Signal Region chrX 128785000 128788700 High Signal Region chrX 129337600 129357900 High Signal Region chrX 129388400 129408400 High Signal Region chrX 130567700 130572000 High Signal Region chrX 131152200 131157400 High Signal Region chrX 131378300 131383300 High Signal Region chrX 131664300 131670000 High Signal Region chrX 132284600 132320400 High Signal Region chrX 133108600 133116500 High Signal Region chrX 135718600 135888700 High Signal Region chrX 137074700 137079100 High Signal Region chrX 137436600 137439300 High Signal Region chrX 138300600 138302200 High Signal Region chrX 139437600 139446800 High Signal Region chrX 139621500 139622800 High Signal Region chrX 140722400 140726100 High Signal Region chrX 141000400 141108300 High Signal Region chrX 142478000 142483800 High Signal Region chrX 142892300 142911600 High Signal Region chrX 143352000 143356500 High Signal Region chrX 144404500 144475900 Low Mappability chrX 147281700 147287100 High Signal Region chrX 147653800 147659900 High Signal Region chrX 148123500 148129000 High Signal Region chrX 148347100 148378700 High Signal Region chrX 149437900 149441900 High Signal Region chrX 150024800 150026200 High Signal Region chrX 152173800 152175100 High Signal Region chrX 153251200 153316400 High Signal Region chrX 154870000 154890200 High Signal Region chrX 154938900 154945100 High Signal Region chrX 155299600 155305100 High Signal Region chrX 155454000 155522000 High Signal Region chrX 155700400 155727500 High Signal Region chrX 155983500 156040800 High Signal Region chrY 4343800 4345800 High Signal Region chrY 10246200 11041200 High Signal Region chrY 11072100 11335300 High Signal Region chrY 11486600 11757800 High Signal Region chrY 26637300 57227400 High Signal Region chr1 230872006 230872168 High Signal Region chr1 230872009 230872119 chr2 32928000 32953000 ================================================ FILE: tracks/hg38.nonstd_chr.blacklist.bed ================================================ chr1_KI270706v1_random 0 175055 Unplaced random chr1_KI270707v1_random 0 32032 Unplaced random chr1_KI270708v1_random 0 127682 Unplaced random chr1_KI270709v1_random 0 66860 Unplaced random chr1_KI270710v1_random 0 40176 Unplaced random chr1_KI270711v1_random 0 42210 Unplaced random chr1_KI270712v1_random 0 176043 Unplaced random chr1_KI270713v1_random 0 40745 Unplaced random chr1_KI270714v1_random 0 41717 Unplaced random chr2_KI270715v1_random 0 161471 Unplaced random chr2_KI270716v1_random 0 153799 Unplaced random chr3_GL000221v1_random 0 155397 Unplaced random chr4_GL000008v2_random 0 209709 Unplaced random chr5_GL000208v1_random 0 92689 Unplaced random chr9_KI270717v1_random 0 40062 Unplaced random chr9_KI270718v1_random 0 38054 Unplaced random chr9_KI270719v1_random 0 176845 Unplaced random chr9_KI270720v1_random 0 39050 Unplaced random chr11_KI270721v1_random 0 100316 Unplaced random chr14_GL000009v2_random 0 201709 Unplaced random chr14_GL000225v1_random 0 211173 Unplaced random chr14_KI270722v1_random 0 194050 Unplaced random chr14_GL000194v1_random 0 191469 Unplaced random chr14_KI270723v1_random 0 38115 Unplaced random chr14_KI270724v1_random 0 39555 Unplaced random chr14_KI270725v1_random 0 172810 Unplaced random chr14_KI270726v1_random 0 43739 Unplaced random chr15_KI270727v1_random 0 448248 Unplaced random chr16_KI270728v1_random 0 1872759 Unplaced random chr17_GL000205v2_random 0 185591 Unplaced random chr17_KI270729v1_random 0 280839 Unplaced random chr17_KI270730v1_random 0 112551 Unplaced random chr22_KI270731v1_random 0 150754 Unplaced random chr22_KI270732v1_random 0 41543 Unplaced random chr22_KI270733v1_random 0 179772 Unplaced random chr22_KI270734v1_random 0 165050 Unplaced random chr22_KI270735v1_random 0 42811 Unplaced random chr22_KI270736v1_random 0 181920 Unplaced random chr22_KI270737v1_random 0 103838 Unplaced random chr22_KI270738v1_random 0 99375 Unplaced random chr22_KI270739v1_random 0 73985 Unplaced random chrY_KI270740v1_random 0 37240 Unplaced random chrUn_KI270302v1 0 2274 Unplaced chrUn_KI270304v1 0 2165 Unplaced chrUn_KI270303v1 0 1942 Unplaced chrUn_KI270305v1 0 1472 Unplaced chrUn_KI270322v1 0 21476 Unplaced chrUn_KI270320v1 0 4416 Unplaced chrUn_KI270310v1 0 1201 Unplaced chrUn_KI270316v1 0 1444 Unplaced chrUn_KI270315v1 0 2276 Unplaced chrUn_KI270312v1 0 998 Unplaced chrUn_KI270311v1 0 12399 Unplaced chrUn_KI270317v1 0 37690 Unplaced chrUn_KI270412v1 0 1179 Unplaced chrUn_KI270411v1 0 2646 Unplaced chrUn_KI270414v1 0 2489 Unplaced chrUn_KI270419v1 0 1029 Unplaced chrUn_KI270418v1 0 2145 Unplaced chrUn_KI270420v1 0 2321 Unplaced chrUn_KI270424v1 0 2140 Unplaced chrUn_KI270417v1 0 2043 Unplaced chrUn_KI270422v1 0 1445 Unplaced chrUn_KI270423v1 0 981 Unplaced chrUn_KI270425v1 0 1884 Unplaced chrUn_KI270429v1 0 1361 Unplaced chrUn_KI270442v1 0 392061 Unplaced chrUn_KI270466v1 0 1233 Unplaced chrUn_KI270465v1 0 1774 Unplaced chrUn_KI270467v1 0 3920 Unplaced chrUn_KI270435v1 0 92983 Unplaced chrUn_KI270438v1 0 112505 Unplaced chrUn_KI270468v1 0 4055 Unplaced chrUn_KI270510v1 0 2415 Unplaced chrUn_KI270509v1 0 2318 Unplaced chrUn_KI270518v1 0 2186 Unplaced chrUn_KI270508v1 0 1951 Unplaced chrUn_KI270516v1 0 1300 Unplaced chrUn_KI270512v1 0 22689 Unplaced chrUn_KI270519v1 0 138126 Unplaced chrUn_KI270522v1 0 5674 Unplaced chrUn_KI270511v1 0 8127 Unplaced chrUn_KI270515v1 0 6361 Unplaced chrUn_KI270507v1 0 5353 Unplaced chrUn_KI270517v1 0 3253 Unplaced chrUn_KI270529v1 0 1899 Unplaced chrUn_KI270528v1 0 2983 Unplaced chrUn_KI270530v1 0 2168 Unplaced chrUn_KI270539v1 0 993 Unplaced chrUn_KI270538v1 0 91309 Unplaced chrUn_KI270544v1 0 1202 Unplaced chrUn_KI270548v1 0 1599 Unplaced chrUn_KI270583v1 0 1400 Unplaced chrUn_KI270587v1 0 2969 Unplaced chrUn_KI270580v1 0 1553 Unplaced chrUn_KI270581v1 0 7046 Unplaced chrUn_KI270579v1 0 31033 Unplaced chrUn_KI270589v1 0 44474 Unplaced chrUn_KI270590v1 0 4685 Unplaced chrUn_KI270584v1 0 4513 Unplaced chrUn_KI270582v1 0 6504 Unplaced chrUn_KI270588v1 0 6158 Unplaced chrUn_KI270593v1 0 3041 Unplaced chrUn_KI270591v1 0 5796 Unplaced chrUn_KI270330v1 0 1652 Unplaced chrUn_KI270329v1 0 1040 Unplaced chrUn_KI270334v1 0 1368 Unplaced chrUn_KI270333v1 0 2699 Unplaced chrUn_KI270335v1 0 1048 Unplaced chrUn_KI270338v1 0 1428 Unplaced chrUn_KI270340v1 0 1428 Unplaced chrUn_KI270336v1 0 1026 Unplaced chrUn_KI270337v1 0 1121 Unplaced chrUn_KI270363v1 0 1803 Unplaced chrUn_KI270364v1 0 2855 Unplaced chrUn_KI270362v1 0 3530 Unplaced chrUn_KI270366v1 0 8320 Unplaced chrUn_KI270378v1 0 1048 Unplaced chrUn_KI270379v1 0 1045 Unplaced chrUn_KI270389v1 0 1298 Unplaced chrUn_KI270390v1 0 2387 Unplaced chrUn_KI270387v1 0 1537 Unplaced chrUn_KI270395v1 0 1143 Unplaced chrUn_KI270396v1 0 1880 Unplaced chrUn_KI270388v1 0 1216 Unplaced chrUn_KI270394v1 0 970 Unplaced chrUn_KI270386v1 0 1788 Unplaced chrUn_KI270391v1 0 1484 Unplaced chrUn_KI270383v1 0 1750 Unplaced chrUn_KI270393v1 0 1308 Unplaced chrUn_KI270384v1 0 1658 Unplaced chrUn_KI270392v1 0 971 Unplaced chrUn_KI270381v1 0 1930 Unplaced chrUn_KI270385v1 0 990 Unplaced chrUn_KI270382v1 0 4215 Unplaced chrUn_KI270376v1 0 1136 Unplaced chrUn_KI270374v1 0 2656 Unplaced chrUn_KI270372v1 0 1650 Unplaced chrUn_KI270373v1 0 1451 Unplaced chrUn_KI270375v1 0 2378 Unplaced chrUn_KI270371v1 0 2805 Unplaced chrUn_KI270448v1 0 7992 Unplaced chrUn_KI270521v1 0 7642 Unplaced chrUn_GL000195v1 0 182896 Unplaced chrUn_GL000219v1 0 179198 Unplaced chrUn_GL000220v1 0 161802 Unplaced chrUn_GL000224v1 0 179693 Unplaced chrUn_KI270741v1 0 157432 Unplaced chrUn_GL000226v1 0 15008 Unplaced chrUn_GL000213v1 0 164239 Unplaced chrUn_KI270743v1 0 210658 Unplaced chrUn_KI270744v1 0 168472 Unplaced chrUn_KI270745v1 0 41891 Unplaced chrUn_KI270746v1 0 66486 Unplaced chrUn_KI270747v1 0 198735 Unplaced chrUn_KI270748v1 0 93321 Unplaced chrUn_KI270749v1 0 158759 Unplaced chrUn_KI270750v1 0 148850 Unplaced chrUn_KI270751v1 0 150742 Unplaced chrUn_KI270752v1 0 27745 Unplaced chrUn_KI270753v1 0 62944 Unplaced chrUn_KI270754v1 0 40191 Unplaced chrUn_KI270755v1 0 36723 Unplaced chrUn_KI270756v1 0 79590 Unplaced chrUn_KI270757v1 0 71251 Unplaced chrUn_GL000214v1 0 137718 Unplaced chrUn_KI270742v1 0 186739 Unplaced chrUn_GL000216v2 0 176608 Unplaced chrUn_GL000218v1 0 161147 Unplaced chr1_KI270762v1_alt 0 354444 Alt haplotype chr1_KI270766v1_alt 0 256271 Alt haplotype chr1_KI270760v1_alt 0 109528 Alt haplotype chr1_KI270765v1_alt 0 185285 Alt haplotype chr1_GL383518v1_alt 0 182439 Alt haplotype chr1_GL383519v1_alt 0 110268 Alt haplotype chr1_GL383520v2_alt 0 366580 Alt haplotype chr1_KI270764v1_alt 0 50258 Alt haplotype chr1_KI270763v1_alt 0 911658 Alt haplotype chr1_KI270759v1_alt 0 425601 Alt haplotype chr1_KI270761v1_alt 0 165834 Alt haplotype chr2_KI270770v1_alt 0 136240 Alt haplotype chr2_KI270773v1_alt 0 70887 Alt haplotype chr2_KI270774v1_alt 0 223625 Alt haplotype chr2_KI270769v1_alt 0 120616 Alt haplotype chr2_GL383521v1_alt 0 143390 Alt haplotype chr2_KI270772v1_alt 0 133041 Alt haplotype chr2_KI270775v1_alt 0 138019 Alt haplotype chr2_KI270771v1_alt 0 110395 Alt haplotype chr2_KI270768v1_alt 0 110099 Alt haplotype chr2_GL582966v2_alt 0 96131 Alt haplotype chr2_GL383522v1_alt 0 123821 Alt haplotype chr2_KI270776v1_alt 0 174166 Alt haplotype chr2_KI270767v1_alt 0 161578 Alt haplotype chr3_JH636055v2_alt 0 173151 Alt haplotype chr3_KI270783v1_alt 0 109187 Alt haplotype chr3_KI270780v1_alt 0 224108 Alt haplotype chr3_GL383526v1_alt 0 180671 Alt haplotype chr3_KI270777v1_alt 0 173649 Alt haplotype chr3_KI270778v1_alt 0 248252 Alt haplotype chr3_KI270781v1_alt 0 113034 Alt haplotype chr3_KI270779v1_alt 0 205312 Alt haplotype chr3_KI270782v1_alt 0 162429 Alt haplotype chr3_KI270784v1_alt 0 184404 Alt haplotype chr4_KI270790v1_alt 0 220246 Alt haplotype chr4_GL383528v1_alt 0 376187 Alt haplotype chr4_KI270787v1_alt 0 111943 Alt haplotype chr4_GL000257v2_alt 0 586476 Alt haplotype chr4_KI270788v1_alt 0 158965 Alt haplotype chr4_GL383527v1_alt 0 164536 Alt haplotype chr4_KI270785v1_alt 0 119912 Alt haplotype chr4_KI270789v1_alt 0 205944 Alt haplotype chr4_KI270786v1_alt 0 244096 Alt haplotype chr5_KI270793v1_alt 0 126136 Alt haplotype chr5_KI270792v1_alt 0 179043 Alt haplotype chr5_KI270791v1_alt 0 195710 Alt haplotype chr5_GL383532v1_alt 0 82728 Alt haplotype chr5_GL949742v1_alt 0 226852 Alt haplotype chr5_KI270794v1_alt 0 164558 Alt haplotype chr5_GL339449v2_alt 0 1612928 Alt haplotype chr5_GL383530v1_alt 0 101241 Alt haplotype chr5_KI270796v1_alt 0 172708 Alt haplotype chr5_GL383531v1_alt 0 173459 Alt haplotype chr5_KI270795v1_alt 0 131892 Alt haplotype chr6_GL000250v2_alt 0 4672374 Alt haplotype chr6_KI270800v1_alt 0 175808 Alt haplotype chr6_KI270799v1_alt 0 152148 Alt haplotype chr6_GL383533v1_alt 0 124736 Alt haplotype chr6_KI270801v1_alt 0 870480 Alt haplotype chr6_KI270802v1_alt 0 75005 Alt haplotype chr6_KB021644v2_alt 0 185823 Alt haplotype chr6_KI270797v1_alt 0 197536 Alt haplotype chr6_KI270798v1_alt 0 271782 Alt haplotype chr7_KI270804v1_alt 0 157952 Alt haplotype chr7_KI270809v1_alt 0 209586 Alt haplotype chr7_KI270806v1_alt 0 158166 Alt haplotype chr7_GL383534v2_alt 0 119183 Alt haplotype chr7_KI270803v1_alt 0 1111570 Alt haplotype chr7_KI270808v1_alt 0 271455 Alt haplotype chr7_KI270807v1_alt 0 126434 Alt haplotype chr7_KI270805v1_alt 0 209988 Alt haplotype chr8_KI270818v1_alt 0 145606 Alt haplotype chr8_KI270812v1_alt 0 282736 Alt haplotype chr8_KI270811v1_alt 0 292436 Alt haplotype chr8_KI270821v1_alt 0 985506 Alt haplotype chr8_KI270813v1_alt 0 300230 Alt haplotype chr8_KI270822v1_alt 0 624492 Alt haplotype chr8_KI270814v1_alt 0 141812 Alt haplotype chr8_KI270810v1_alt 0 374415 Alt haplotype chr8_KI270819v1_alt 0 133535 Alt haplotype chr8_KI270820v1_alt 0 36640 Alt haplotype chr8_KI270817v1_alt 0 158983 Alt haplotype chr8_KI270816v1_alt 0 305841 Alt haplotype chr8_KI270815v1_alt 0 132244 Alt haplotype chr9_GL383539v1_alt 0 162988 Alt haplotype chr9_GL383540v1_alt 0 71551 Alt haplotype chr9_GL383541v1_alt 0 171286 Alt haplotype chr9_GL383542v1_alt 0 60032 Alt haplotype chr9_KI270823v1_alt 0 439082 Alt haplotype chr10_GL383545v1_alt 0 179254 Alt haplotype chr10_KI270824v1_alt 0 181496 Alt haplotype chr10_GL383546v1_alt 0 309802 Alt haplotype chr10_KI270825v1_alt 0 188315 Alt haplotype chr11_KI270832v1_alt 0 210133 Alt haplotype chr11_KI270830v1_alt 0 177092 Alt haplotype chr11_KI270831v1_alt 0 296895 Alt haplotype chr11_KI270829v1_alt 0 204059 Alt haplotype chr11_GL383547v1_alt 0 154407 Alt haplotype chr11_JH159136v1_alt 0 200998 Alt haplotype chr11_JH159137v1_alt 0 191409 Alt haplotype chr11_KI270827v1_alt 0 67707 Alt haplotype chr11_KI270826v1_alt 0 186169 Alt haplotype chr12_GL877875v1_alt 0 167313 Alt haplotype chr12_GL877876v1_alt 0 408271 Alt haplotype chr12_KI270837v1_alt 0 40090 Alt haplotype chr12_GL383549v1_alt 0 120804 Alt haplotype chr12_KI270835v1_alt 0 238139 Alt haplotype chr12_GL383550v2_alt 0 169178 Alt haplotype chr12_GL383552v1_alt 0 138655 Alt haplotype chr12_GL383553v2_alt 0 152874 Alt haplotype chr12_KI270834v1_alt 0 119498 Alt haplotype chr12_GL383551v1_alt 0 184319 Alt haplotype chr12_KI270833v1_alt 0 76061 Alt haplotype chr12_KI270836v1_alt 0 56134 Alt haplotype chr13_KI270840v1_alt 0 191684 Alt haplotype chr13_KI270839v1_alt 0 180306 Alt haplotype chr13_KI270843v1_alt 0 103832 Alt haplotype chr13_KI270841v1_alt 0 169134 Alt haplotype chr13_KI270838v1_alt 0 306913 Alt haplotype chr13_KI270842v1_alt 0 37287 Alt haplotype chr14_KI270844v1_alt 0 322166 Alt haplotype chr14_KI270847v1_alt 0 1511111 Alt haplotype chr14_KI270845v1_alt 0 180703 Alt haplotype chr14_KI270846v1_alt 0 1351393 Alt haplotype chr15_KI270852v1_alt 0 478999 Alt haplotype chr15_KI270851v1_alt 0 263054 Alt haplotype chr15_KI270848v1_alt 0 327382 Alt haplotype chr15_GL383554v1_alt 0 296527 Alt haplotype chr15_KI270849v1_alt 0 244917 Alt haplotype chr15_GL383555v2_alt 0 388773 Alt haplotype chr15_KI270850v1_alt 0 430880 Alt haplotype chr16_KI270854v1_alt 0 134193 Alt haplotype chr16_KI270856v1_alt 0 63982 Alt haplotype chr16_KI270855v1_alt 0 232857 Alt haplotype chr16_KI270853v1_alt 0 2659700 Alt haplotype chr16_GL383556v1_alt 0 192462 Alt haplotype chr16_GL383557v1_alt 0 89672 Alt haplotype chr17_GL383563v3_alt 0 375691 Alt haplotype chr17_KI270862v1_alt 0 391357 Alt haplotype chr17_KI270861v1_alt 0 196688 Alt haplotype chr17_KI270857v1_alt 0 2877074 Alt haplotype chr17_JH159146v1_alt 0 278131 Alt haplotype chr17_JH159147v1_alt 0 70345 Alt haplotype chr17_GL383564v2_alt 0 133151 Alt haplotype chr17_GL000258v2_alt 0 1821992 Alt haplotype chr17_GL383565v1_alt 0 223995 Alt haplotype chr17_KI270858v1_alt 0 235827 Alt haplotype chr17_KI270859v1_alt 0 108763 Alt haplotype chr17_GL383566v1_alt 0 90219 Alt haplotype chr17_KI270860v1_alt 0 178921 Alt haplotype chr18_KI270864v1_alt 0 111737 Alt haplotype chr18_GL383567v1_alt 0 289831 Alt haplotype chr18_GL383570v1_alt 0 164789 Alt haplotype chr18_GL383571v1_alt 0 198278 Alt haplotype chr18_GL383568v1_alt 0 104552 Alt haplotype chr18_GL383569v1_alt 0 167950 Alt haplotype chr18_GL383572v1_alt 0 159547 Alt haplotype chr18_KI270863v1_alt 0 167999 Alt haplotype chr19_KI270868v1_alt 0 61734 Alt haplotype chr19_KI270865v1_alt 0 52969 Alt haplotype chr19_GL383573v1_alt 0 385657 Alt haplotype chr19_GL383575v2_alt 0 170222 Alt haplotype chr19_GL383576v1_alt 0 188024 Alt haplotype chr19_GL383574v1_alt 0 155864 Alt haplotype chr19_KI270866v1_alt 0 43156 Alt haplotype chr19_KI270867v1_alt 0 233762 Alt haplotype chr19_GL949746v1_alt 0 987716 Alt haplotype chr20_GL383577v2_alt 0 128386 Alt haplotype chr20_KI270869v1_alt 0 118774 Alt haplotype chr20_KI270871v1_alt 0 58661 Alt haplotype chr20_KI270870v1_alt 0 183433 Alt haplotype chr21_GL383578v2_alt 0 63917 Alt haplotype chr21_KI270874v1_alt 0 166743 Alt haplotype chr21_KI270873v1_alt 0 143900 Alt haplotype chr21_GL383579v2_alt 0 201197 Alt haplotype chr21_GL383580v2_alt 0 74653 Alt haplotype chr21_GL383581v2_alt 0 116689 Alt haplotype chr21_KI270872v1_alt 0 82692 Alt haplotype chr22_KI270875v1_alt 0 259914 Alt haplotype chr22_KI270878v1_alt 0 186262 Alt haplotype chr22_KI270879v1_alt 0 304135 Alt haplotype chr22_KI270876v1_alt 0 263666 Alt haplotype chr22_KI270877v1_alt 0 101331 Alt haplotype chr22_GL383583v2_alt 0 96924 Alt haplotype chr22_GL383582v2_alt 0 162811 Alt haplotype chrX_KI270880v1_alt 0 284869 Alt haplotype chrX_KI270881v1_alt 0 144206 Alt haplotype chr19_KI270882v1_alt 0 248807 Alt haplotype chr19_KI270883v1_alt 0 170399 Alt haplotype chr19_KI270884v1_alt 0 157053 Alt haplotype chr19_KI270885v1_alt 0 171027 Alt haplotype chr19_KI270886v1_alt 0 204239 Alt haplotype chr19_KI270887v1_alt 0 209512 Alt haplotype chr19_KI270888v1_alt 0 155532 Alt haplotype chr19_KI270889v1_alt 0 170698 Alt haplotype chr19_KI270890v1_alt 0 184499 Alt haplotype chr19_KI270891v1_alt 0 170680 Alt haplotype chr1_KI270892v1_alt 0 162212 Alt haplotype chr2_KI270894v1_alt 0 214158 Alt haplotype chr2_KI270893v1_alt 0 161218 Alt haplotype chr3_KI270895v1_alt 0 162896 Alt haplotype chr4_KI270896v1_alt 0 378547 Alt haplotype chr5_KI270897v1_alt 0 1144418 Alt haplotype chr5_KI270898v1_alt 0 130957 Alt haplotype chr6_GL000251v2_alt 0 4795265 Alt haplotype chr7_KI270899v1_alt 0 190869 Alt haplotype chr8_KI270901v1_alt 0 136959 Alt haplotype chr8_KI270900v1_alt 0 318687 Alt haplotype chr11_KI270902v1_alt 0 106711 Alt haplotype chr11_KI270903v1_alt 0 214625 Alt haplotype chr12_KI270904v1_alt 0 572349 Alt haplotype chr15_KI270906v1_alt 0 196384 Alt haplotype chr15_KI270905v1_alt 0 5161414 Alt haplotype chr17_KI270907v1_alt 0 137721 Alt haplotype chr17_KI270910v1_alt 0 157099 Alt haplotype chr17_KI270909v1_alt 0 325800 Alt haplotype chr17_JH159148v1_alt 0 88070 Alt haplotype chr17_KI270908v1_alt 0 1423190 Alt haplotype chr18_KI270912v1_alt 0 174061 Alt haplotype chr18_KI270911v1_alt 0 157710 Alt haplotype chr19_GL949747v2_alt 0 729520 Alt haplotype chr22_KB663609v1_alt 0 74013 Alt haplotype chrX_KI270913v1_alt 0 274009 Alt haplotype chr19_KI270914v1_alt 0 205194 Alt haplotype chr19_KI270915v1_alt 0 170665 Alt haplotype chr19_KI270916v1_alt 0 184516 Alt haplotype chr19_KI270917v1_alt 0 190932 Alt haplotype chr19_KI270918v1_alt 0 123111 Alt haplotype chr19_KI270919v1_alt 0 170701 Alt haplotype chr19_KI270920v1_alt 0 198005 Alt haplotype chr19_KI270921v1_alt 0 282224 Alt haplotype chr19_KI270922v1_alt 0 187935 Alt haplotype chr19_KI270923v1_alt 0 189352 Alt haplotype chr3_KI270924v1_alt 0 166540 Alt haplotype chr4_KI270925v1_alt 0 555799 Alt haplotype chr6_GL000252v2_alt 0 4604811 Alt haplotype chr8_KI270926v1_alt 0 229282 Alt haplotype chr11_KI270927v1_alt 0 218612 Alt haplotype chr19_GL949748v2_alt 0 1064304 Alt haplotype chr22_KI270928v1_alt 0 176103 Alt haplotype chr19_KI270929v1_alt 0 186203 Alt haplotype chr19_KI270930v1_alt 0 200773 Alt haplotype chr19_KI270931v1_alt 0 170148 Alt haplotype chr19_KI270932v1_alt 0 215732 Alt haplotype chr19_KI270933v1_alt 0 170537 Alt haplotype chr19_GL000209v2_alt 0 177381 Alt haplotype chr3_KI270934v1_alt 0 163458 Alt haplotype chr6_GL000253v2_alt 0 4677643 Alt haplotype chr19_GL949749v2_alt 0 1091841 Alt haplotype chr3_KI270935v1_alt 0 197351 Alt haplotype chr6_GL000254v2_alt 0 4827813 Alt haplotype chr19_GL949750v2_alt 0 1066390 Alt haplotype chr3_KI270936v1_alt 0 164170 Alt haplotype chr6_GL000255v2_alt 0 4606388 Alt haplotype chr19_GL949751v2_alt 0 1002683 Alt haplotype chr3_KI270937v1_alt 0 165607 Alt haplotype chr6_GL000256v2_alt 0 4929269 Alt haplotype chr19_GL949752v1_alt 0 987100 Alt haplotype chr6_KI270758v1_alt 0 76752 Alt haplotype chr19_GL949753v2_alt 0 796479 Alt haplotype chr19_KI270938v1_alt 0 1066800 Alt haplotype chrEBV 0 171823 EBV chrUn_KN707606v1_decoy 0 2200 Decoy chrUn_KN707607v1_decoy 0 3033 Decoy chrUn_KN707608v1_decoy 0 3112 Decoy chrUn_KN707609v1_decoy 0 1642 Decoy chrUn_KN707610v1_decoy 0 1393 Decoy chrUn_KN707611v1_decoy 0 1103 Decoy chrUn_KN707612v1_decoy 0 1039 Decoy chrUn_KN707613v1_decoy 0 1619 Decoy chrUn_KN707614v1_decoy 0 3122 Decoy chrUn_KN707615v1_decoy 0 1934 Decoy chrUn_KN707616v1_decoy 0 3111 Decoy chrUn_KN707617v1_decoy 0 2545 Decoy chrUn_KN707618v1_decoy 0 2295 Decoy chrUn_KN707619v1_decoy 0 1551 Decoy chrUn_KN707620v1_decoy 0 2046 Decoy chrUn_KN707621v1_decoy 0 1222 Decoy chrUn_KN707622v1_decoy 0 1535 Decoy chrUn_KN707623v1_decoy 0 3784 Decoy chrUn_KN707624v1_decoy 0 1329 Decoy chrUn_KN707625v1_decoy 0 1238 Decoy chrUn_KN707626v1_decoy 0 5623 Decoy chrUn_KN707627v1_decoy 0 5821 Decoy chrUn_KN707628v1_decoy 0 2960 Decoy chrUn_KN707629v1_decoy 0 1848 Decoy chrUn_KN707630v1_decoy 0 2315 Decoy chrUn_KN707631v1_decoy 0 1945 Decoy chrUn_KN707632v1_decoy 0 1424 Decoy chrUn_KN707633v1_decoy 0 1274 Decoy chrUn_KN707634v1_decoy 0 1007 Decoy chrUn_KN707635v1_decoy 0 1414 Decoy chrUn_KN707636v1_decoy 0 1725 Decoy chrUn_KN707637v1_decoy 0 5354 Decoy chrUn_KN707638v1_decoy 0 2189 Decoy chrUn_KN707639v1_decoy 0 1294 Decoy chrUn_KN707640v1_decoy 0 1831 Decoy chrUn_KN707641v1_decoy 0 1647 Decoy chrUn_KN707642v1_decoy 0 2943 Decoy chrUn_KN707643v1_decoy 0 2857 Decoy chrUn_KN707644v1_decoy 0 1030 Decoy chrUn_KN707645v1_decoy 0 1070 Decoy chrUn_KN707646v1_decoy 0 1735 Decoy chrUn_KN707647v1_decoy 0 1982 Decoy chrUn_KN707648v1_decoy 0 1564 Decoy chrUn_KN707649v1_decoy 0 1775 Decoy chrUn_KN707650v1_decoy 0 1540 Decoy chrUn_KN707651v1_decoy 0 2013 Decoy chrUn_KN707652v1_decoy 0 1176 Decoy chrUn_KN707653v1_decoy 0 1890 Decoy chrUn_KN707654v1_decoy 0 3644 Decoy chrUn_KN707655v1_decoy 0 2785 Decoy chrUn_KN707656v1_decoy 0 1017 Decoy chrUn_KN707657v1_decoy 0 1068 Decoy chrUn_KN707658v1_decoy 0 1007 Decoy chrUn_KN707659v1_decoy 0 2605 Decoy chrUn_KN707660v1_decoy 0 8410 Decoy chrUn_KN707661v1_decoy 0 5534 Decoy chrUn_KN707662v1_decoy 0 2173 Decoy chrUn_KN707663v1_decoy 0 1065 Decoy chrUn_KN707664v1_decoy 0 8683 Decoy chrUn_KN707665v1_decoy 0 2670 Decoy chrUn_KN707666v1_decoy 0 2420 Decoy chrUn_KN707667v1_decoy 0 2189 Decoy chrUn_KN707668v1_decoy 0 2093 Decoy chrUn_KN707669v1_decoy 0 1184 Decoy chrUn_KN707670v1_decoy 0 1205 Decoy chrUn_KN707671v1_decoy 0 2786 Decoy chrUn_KN707672v1_decoy 0 2794 Decoy chrUn_KN707673v1_decoy 0 19544 Decoy chrUn_KN707674v1_decoy 0 2848 Decoy chrUn_KN707675v1_decoy 0 10556 Decoy chrUn_KN707676v1_decoy 0 9066 Decoy chrUn_KN707677v1_decoy 0 7267 Decoy chrUn_KN707678v1_decoy 0 2462 Decoy chrUn_KN707679v1_decoy 0 1774 Decoy chrUn_KN707680v1_decoy 0 1297 Decoy chrUn_KN707681v1_decoy 0 4379 Decoy chrUn_KN707682v1_decoy 0 4208 Decoy chrUn_KN707683v1_decoy 0 4068 Decoy chrUn_KN707684v1_decoy 0 2940 Decoy chrUn_KN707685v1_decoy 0 3938 Decoy chrUn_KN707686v1_decoy 0 2072 Decoy chrUn_KN707687v1_decoy 0 1136 Decoy chrUn_KN707688v1_decoy 0 4248 Decoy chrUn_KN707689v1_decoy 0 5823 Decoy chrUn_KN707690v1_decoy 0 3715 Decoy chrUn_KN707691v1_decoy 0 4885 Decoy chrUn_KN707692v1_decoy 0 4813 Decoy chrUn_KN707693v1_decoy 0 2899 Decoy chrUn_KN707694v1_decoy 0 1228 Decoy chrUn_KN707695v1_decoy 0 3119 Decoy chrUn_KN707696v1_decoy 0 3828 Decoy chrUn_KN707697v1_decoy 0 1186 Decoy chrUn_KN707698v1_decoy 0 1908 Decoy chrUn_KN707699v1_decoy 0 2795 Decoy chrUn_KN707700v1_decoy 0 3703 Decoy chrUn_KN707701v1_decoy 0 6722 Decoy chrUn_KN707702v1_decoy 0 6466 Decoy chrUn_KN707703v1_decoy 0 2235 Decoy chrUn_KN707704v1_decoy 0 2871 Decoy chrUn_KN707705v1_decoy 0 4632 Decoy chrUn_KN707706v1_decoy 0 4225 Decoy chrUn_KN707707v1_decoy 0 4339 Decoy chrUn_KN707708v1_decoy 0 2305 Decoy chrUn_KN707709v1_decoy 0 3273 Decoy chrUn_KN707710v1_decoy 0 5701 Decoy chrUn_KN707711v1_decoy 0 4154 Decoy chrUn_KN707712v1_decoy 0 1243 Decoy chrUn_KN707713v1_decoy 0 1308 Decoy chrUn_KN707714v1_decoy 0 2922 Decoy chrUn_KN707715v1_decoy 0 3044 Decoy chrUn_KN707716v1_decoy 0 2888 Decoy chrUn_KN707717v1_decoy 0 1742 Decoy chrUn_KN707718v1_decoy 0 4969 Decoy chrUn_KN707719v1_decoy 0 3270 Decoy chrUn_KN707720v1_decoy 0 6028 Decoy chrUn_KN707721v1_decoy 0 1105 Decoy chrUn_KN707722v1_decoy 0 2884 Decoy chrUn_KN707723v1_decoy 0 1124 Decoy chrUn_KN707724v1_decoy 0 1454 Decoy chrUn_KN707725v1_decoy 0 2565 Decoy chrUn_KN707726v1_decoy 0 2149 Decoy chrUn_KN707727v1_decoy 0 2630 Decoy chrUn_KN707728v1_decoy 0 14625 Decoy chrUn_KN707729v1_decoy 0 7431 Decoy chrUn_KN707730v1_decoy 0 5776 Decoy chrUn_KN707731v1_decoy 0 4820 Decoy chrUn_KN707732v1_decoy 0 1227 Decoy chrUn_KN707733v1_decoy 0 7503 Decoy chrUn_KN707734v1_decoy 0 9652 Decoy chrUn_KN707735v1_decoy 0 1091 Decoy chrUn_KN707736v1_decoy 0 2467 Decoy chrUn_KN707737v1_decoy 0 1270 Decoy chrUn_KN707738v1_decoy 0 4365 Decoy chrUn_KN707739v1_decoy 0 4284 Decoy chrUn_KN707740v1_decoy 0 10282 Decoy chrUn_KN707741v1_decoy 0 5601 Decoy chrUn_KN707742v1_decoy 0 4758 Decoy chrUn_KN707743v1_decoy 0 1624 Decoy chrUn_KN707744v1_decoy 0 4024 Decoy chrUn_KN707745v1_decoy 0 1276 Decoy chrUn_KN707746v1_decoy 0 5083 Decoy chrUn_KN707747v1_decoy 0 2075 Decoy chrUn_KN707748v1_decoy 0 3553 Decoy chrUn_KN707749v1_decoy 0 7010 Decoy chrUn_KN707750v1_decoy 0 4718 Decoy chrUn_KN707751v1_decoy 0 3546 Decoy chrUn_KN707752v1_decoy 0 2873 Decoy chrUn_KN707753v1_decoy 0 2144 Decoy chrUn_KN707754v1_decoy 0 2243 Decoy chrUn_KN707755v1_decoy 0 5343 Decoy chrUn_KN707756v1_decoy 0 4877 Decoy chrUn_KN707757v1_decoy 0 3034 Decoy chrUn_KN707758v1_decoy 0 2826 Decoy chrUn_KN707759v1_decoy 0 1221 Decoy chrUn_KN707760v1_decoy 0 1169 Decoy chrUn_KN707761v1_decoy 0 2319 Decoy chrUn_KN707762v1_decoy 0 3450 Decoy chrUn_KN707763v1_decoy 0 2674 Decoy chrUn_KN707764v1_decoy 0 3912 Decoy chrUn_KN707765v1_decoy 0 6020 Decoy chrUn_KN707766v1_decoy 0 2303 Decoy chrUn_KN707767v1_decoy 0 2552 Decoy chrUn_KN707768v1_decoy 0 3656 Decoy chrUn_KN707769v1_decoy 0 1591 Decoy chrUn_KN707770v1_decoy 0 1209 Decoy chrUn_KN707771v1_decoy 0 3176 Decoy chrUn_KN707772v1_decoy 0 8915 Decoy chrUn_KN707773v1_decoy 0 4902 Decoy chrUn_KN707774v1_decoy 0 3324 Decoy chrUn_KN707775v1_decoy 0 5997 Decoy chrUn_KN707776v1_decoy 0 2618 Decoy chrUn_KN707777v1_decoy 0 10311 Decoy chrUn_KN707778v1_decoy 0 2440 Decoy chrUn_KN707779v1_decoy 0 12444 Decoy chrUn_KN707780v1_decoy 0 5691 Decoy chrUn_KN707781v1_decoy 0 2717 Decoy chrUn_KN707782v1_decoy 0 5277 Decoy chrUn_KN707783v1_decoy 0 4373 Decoy chrUn_KN707784v1_decoy 0 3224 Decoy chrUn_KN707785v1_decoy 0 2631 Decoy chrUn_KN707786v1_decoy 0 5385 Decoy chrUn_KN707787v1_decoy 0 3678 Decoy chrUn_KN707788v1_decoy 0 1412 Decoy chrUn_KN707789v1_decoy 0 1443 Decoy chrUn_KN707790v1_decoy 0 1098 Decoy chrUn_KN707791v1_decoy 0 3240 Decoy chrUn_KN707792v1_decoy 0 1915 Decoy chrUn_KN707793v1_decoy 0 4667 Decoy chrUn_KN707794v1_decoy 0 7219 Decoy chrUn_KN707795v1_decoy 0 3277 Decoy chrUn_KN707796v1_decoy 0 3473 Decoy chrUn_KN707797v1_decoy 0 4243 Decoy chrUn_KN707798v1_decoy 0 17599 Decoy chrUn_KN707799v1_decoy 0 5095 Decoy chrUn_KN707800v1_decoy 0 2237 Decoy chrUn_KN707801v1_decoy 0 2901 Decoy chrUn_KN707802v1_decoy 0 2666 Decoy chrUn_KN707803v1_decoy 0 5336 Decoy chrUn_KN707804v1_decoy 0 4383 Decoy chrUn_KN707805v1_decoy 0 5446 Decoy chrUn_KN707806v1_decoy 0 6252 Decoy chrUn_KN707807v1_decoy 0 4616 Decoy chrUn_KN707808v1_decoy 0 3021 Decoy chrUn_KN707809v1_decoy 0 3667 Decoy chrUn_KN707810v1_decoy 0 4563 Decoy chrUn_KN707811v1_decoy 0 1120 Decoy chrUn_KN707812v1_decoy 0 3845 Decoy chrUn_KN707813v1_decoy 0 2272 Decoy chrUn_KN707814v1_decoy 0 4764 Decoy chrUn_KN707815v1_decoy 0 5410 Decoy chrUn_KN707816v1_decoy 0 7150 Decoy chrUn_KN707817v1_decoy 0 1762 Decoy chrUn_KN707818v1_decoy 0 1207 Decoy chrUn_KN707819v1_decoy 0 1331 Decoy chrUn_KN707820v1_decoy 0 8307 Decoy chrUn_KN707821v1_decoy 0 2276 Decoy chrUn_KN707822v1_decoy 0 2575 Decoy chrUn_KN707823v1_decoy 0 3970 Decoy chrUn_KN707824v1_decoy 0 1352 Decoy chrUn_KN707825v1_decoy 0 3040 Decoy chrUn_KN707826v1_decoy 0 2070 Decoy chrUn_KN707827v1_decoy 0 2913 Decoy chrUn_KN707828v1_decoy 0 2389 Decoy chrUn_KN707829v1_decoy 0 1835 Decoy chrUn_KN707830v1_decoy 0 4807 Decoy chrUn_KN707831v1_decoy 0 2201 Decoy chrUn_KN707832v1_decoy 0 1265 Decoy chrUn_KN707833v1_decoy 0 1961 Decoy chrUn_KN707834v1_decoy 0 1064 Decoy chrUn_KN707835v1_decoy 0 1932 Decoy chrUn_KN707836v1_decoy 0 3213 Decoy chrUn_KN707837v1_decoy 0 1178 Decoy chrUn_KN707838v1_decoy 0 2926 Decoy chrUn_KN707839v1_decoy 0 1038 Decoy chrUn_KN707840v1_decoy 0 3298 Decoy chrUn_KN707841v1_decoy 0 8992 Decoy chrUn_KN707842v1_decoy 0 6698 Decoy chrUn_KN707843v1_decoy 0 4880 Decoy chrUn_KN707844v1_decoy 0 1766 Decoy chrUn_KN707845v1_decoy 0 3532 Decoy chrUn_KN707846v1_decoy 0 2297 Decoy chrUn_KN707847v1_decoy 0 1234 Decoy chrUn_KN707848v1_decoy 0 1205 Decoy chrUn_KN707849v1_decoy 0 2790 Decoy chrUn_KN707850v1_decoy 0 2006 Decoy chrUn_KN707851v1_decoy 0 4593 Decoy chrUn_KN707852v1_decoy 0 1579 Decoy chrUn_KN707853v1_decoy 0 9597 Decoy chrUn_KN707854v1_decoy 0 10451 Decoy chrUn_KN707855v1_decoy 0 3219 Decoy chrUn_KN707856v1_decoy 0 2300 Decoy chrUn_KN707857v1_decoy 0 5985 Decoy chrUn_KN707858v1_decoy 0 2959 Decoy chrUn_KN707859v1_decoy 0 1340 Decoy chrUn_KN707860v1_decoy 0 3148 Decoy chrUn_KN707861v1_decoy 0 2242 Decoy chrUn_KN707862v1_decoy 0 16513 Decoy chrUn_KN707863v1_decoy 0 7821 Decoy chrUn_KN707864v1_decoy 0 2159 Decoy chrUn_KN707865v1_decoy 0 2114 Decoy chrUn_KN707866v1_decoy 0 4109 Decoy chrUn_KN707867v1_decoy 0 1544 Decoy chrUn_KN707868v1_decoy 0 1005 Decoy chrUn_KN707869v1_decoy 0 8632 Decoy chrUn_KN707870v1_decoy 0 1012 Decoy chrUn_KN707871v1_decoy 0 4728 Decoy chrUn_KN707872v1_decoy 0 2165 Decoy chrUn_KN707873v1_decoy 0 7591 Decoy chrUn_KN707874v1_decoy 0 5202 Decoy chrUn_KN707875v1_decoy 0 4241 Decoy chrUn_KN707876v1_decoy 0 4131 Decoy chrUn_KN707877v1_decoy 0 2272 Decoy chrUn_KN707878v1_decoy 0 2085 Decoy chrUn_KN707879v1_decoy 0 4346 Decoy chrUn_KN707880v1_decoy 0 1208 Decoy chrUn_KN707881v1_decoy 0 4543 Decoy chrUn_KN707882v1_decoy 0 2772 Decoy chrUn_KN707883v1_decoy 0 2490 Decoy chrUn_KN707884v1_decoy 0 4568 Decoy chrUn_KN707885v1_decoy 0 1776 Decoy chrUn_KN707886v1_decoy 0 2699 Decoy chrUn_KN707887v1_decoy 0 3534 Decoy chrUn_KN707888v1_decoy 0 2424 Decoy chrUn_KN707889v1_decoy 0 1747 Decoy chrUn_KN707890v1_decoy 0 1088 Decoy chrUn_KN707891v1_decoy 0 1143 Decoy chrUn_KN707892v1_decoy 0 2530 Decoy chrUn_KN707893v1_decoy 0 8049 Decoy chrUn_KN707894v1_decoy 0 1366 Decoy chrUn_KN707895v1_decoy 0 4284 Decoy chrUn_KN707896v1_decoy 0 33125 Decoy chrUn_KN707897v1_decoy 0 2137 Decoy chrUn_KN707898v1_decoy 0 3840 Decoy chrUn_KN707899v1_decoy 0 3087 Decoy chrUn_KN707900v1_decoy 0 2041 Decoy chrUn_KN707901v1_decoy 0 3344 Decoy chrUn_KN707902v1_decoy 0 2921 Decoy chrUn_KN707903v1_decoy 0 6581 Decoy chrUn_KN707904v1_decoy 0 3968 Decoy chrUn_KN707905v1_decoy 0 2339 Decoy chrUn_KN707906v1_decoy 0 1243 Decoy chrUn_KN707907v1_decoy 0 7776 Decoy chrUn_KN707908v1_decoy 0 19837 Decoy chrUn_KN707909v1_decoy 0 1737 Decoy chrUn_KN707910v1_decoy 0 1098 Decoy chrUn_KN707911v1_decoy 0 1893 Decoy chrUn_KN707912v1_decoy 0 1281 Decoy chrUn_KN707913v1_decoy 0 1527 Decoy chrUn_KN707914v1_decoy 0 2055 Decoy chrUn_KN707915v1_decoy 0 2527 Decoy chrUn_KN707916v1_decoy 0 3275 Decoy chrUn_KN707917v1_decoy 0 1265 Decoy chrUn_KN707918v1_decoy 0 2623 Decoy chrUn_KN707919v1_decoy 0 4850 Decoy chrUn_KN707920v1_decoy 0 3584 Decoy chrUn_KN707921v1_decoy 0 2561 Decoy chrUn_KN707922v1_decoy 0 3041 Decoy chrUn_KN707923v1_decoy 0 1409 Decoy chrUn_KN707924v1_decoy 0 4596 Decoy chrUn_KN707925v1_decoy 0 11555 Decoy chrUn_KN707926v1_decoy 0 1266 Decoy chrUn_KN707927v1_decoy 0 1079 Decoy chrUn_KN707928v1_decoy 0 1087 Decoy chrUn_KN707929v1_decoy 0 1226 Decoy chrUn_KN707930v1_decoy 0 1131 Decoy chrUn_KN707931v1_decoy 0 1199 Decoy chrUn_KN707932v1_decoy 0 1084 Decoy chrUn_KN707933v1_decoy 0 2038 Decoy chrUn_KN707934v1_decoy 0 1070 Decoy chrUn_KN707935v1_decoy 0 1312 Decoy chrUn_KN707936v1_decoy 0 4031 Decoy chrUn_KN707937v1_decoy 0 7445 Decoy chrUn_KN707938v1_decoy 0 1770 Decoy chrUn_KN707939v1_decoy 0 5600 Decoy chrUn_KN707940v1_decoy 0 1882 Decoy chrUn_KN707941v1_decoy 0 1170 Decoy chrUn_KN707942v1_decoy 0 1300 Decoy chrUn_KN707943v1_decoy 0 5325 Decoy chrUn_KN707944v1_decoy 0 2043 Decoy chrUn_KN707945v1_decoy 0 1072 Decoy chrUn_KN707946v1_decoy 0 2463 Decoy chrUn_KN707947v1_decoy 0 1010 Decoy chrUn_KN707948v1_decoy 0 1432 Decoy chrUn_KN707949v1_decoy 0 1162 Decoy chrUn_KN707950v1_decoy 0 1095 Decoy chrUn_KN707951v1_decoy 0 1118 Decoy chrUn_KN707952v1_decoy 0 1383 Decoy chrUn_KN707953v1_decoy 0 2289 Decoy chrUn_KN707954v1_decoy 0 1648 Decoy chrUn_KN707955v1_decoy 0 2203 Decoy chrUn_KN707956v1_decoy 0 3270 Decoy chrUn_KN707957v1_decoy 0 11499 Decoy chrUn_KN707958v1_decoy 0 2474 Decoy chrUn_KN707959v1_decoy 0 2294 Decoy chrUn_KN707960v1_decoy 0 1238 Decoy chrUn_KN707961v1_decoy 0 3410 Decoy chrUn_KN707962v1_decoy 0 1523 Decoy chrUn_KN707963v1_decoy 0 62955 Decoy chrUn_KN707964v1_decoy 0 6282 Decoy chrUn_KN707965v1_decoy 0 3836 Decoy chrUn_KN707966v1_decoy 0 6486 Decoy chrUn_KN707967v1_decoy 0 15368 Decoy chrUn_KN707968v1_decoy 0 9572 Decoy chrUn_KN707969v1_decoy 0 6413 Decoy chrUn_KN707970v1_decoy 0 4104 Decoy chrUn_KN707971v1_decoy 0 12943 Decoy chrUn_KN707972v1_decoy 0 4650 Decoy chrUn_KN707973v1_decoy 0 3080 Decoy chrUn_KN707974v1_decoy 0 3134 Decoy chrUn_KN707975v1_decoy 0 6211 Decoy chrUn_KN707976v1_decoy 0 1126 Decoy chrUn_KN707977v1_decoy 0 1101 Decoy chrUn_KN707978v1_decoy 0 1101 Decoy chrUn_KN707979v1_decoy 0 2648 Decoy chrUn_KN707980v1_decoy 0 2973 Decoy chrUn_KN707981v1_decoy 0 2520 Decoy chrUn_KN707982v1_decoy 0 2318 Decoy chrUn_KN707983v1_decoy 0 2606 Decoy chrUn_KN707984v1_decoy 0 2205 Decoy chrUn_KN707985v1_decoy 0 2929 Decoy chrUn_KN707986v1_decoy 0 3869 Decoy chrUn_KN707987v1_decoy 0 1117 Decoy chrUn_KN707988v1_decoy 0 2960 Decoy chrUn_KN707989v1_decoy 0 1009 Decoy chrUn_KN707990v1_decoy 0 4048 Decoy chrUn_KN707991v1_decoy 0 2193 Decoy chrUn_KN707992v1_decoy 0 1830 Decoy chrUn_JTFH01000001v1_decoy 0 25139 Decoy chrUn_JTFH01000002v1_decoy 0 18532 Decoy chrUn_JTFH01000003v1_decoy 0 15240 Decoy chrUn_JTFH01000004v1_decoy 0 13739 Decoy chrUn_JTFH01000005v1_decoy 0 11297 Decoy chrUn_JTFH01000006v1_decoy 0 10074 Decoy chrUn_JTFH01000007v1_decoy 0 9891 Decoy chrUn_JTFH01000008v1_decoy 0 9774 Decoy chrUn_JTFH01000009v1_decoy 0 9727 Decoy chrUn_JTFH01000010v1_decoy 0 9358 Decoy chrUn_JTFH01000011v1_decoy 0 8920 Decoy chrUn_JTFH01000012v1_decoy 0 8479 Decoy chrUn_JTFH01000013v1_decoy 0 8312 Decoy chrUn_JTFH01000014v1_decoy 0 8261 Decoy chrUn_JTFH01000015v1_decoy 0 8131 Decoy chrUn_JTFH01000016v1_decoy 0 8051 Decoy chrUn_JTFH01000017v1_decoy 0 7832 Decoy chrUn_JTFH01000018v1_decoy 0 7710 Decoy chrUn_JTFH01000019v1_decoy 0 7702 Decoy chrUn_JTFH01000020v1_decoy 0 7479 Decoy chrUn_JTFH01000021v1_decoy 0 7368 Decoy chrUn_JTFH01000022v1_decoy 0 7162 Decoy chrUn_JTFH01000023v1_decoy 0 7065 Decoy chrUn_JTFH01000024v1_decoy 0 7019 Decoy chrUn_JTFH01000025v1_decoy 0 6997 Decoy chrUn_JTFH01000026v1_decoy 0 6994 Decoy chrUn_JTFH01000027v1_decoy 0 6979 Decoy chrUn_JTFH01000028v1_decoy 0 6797 Decoy chrUn_JTFH01000029v1_decoy 0 6525 Decoy chrUn_JTFH01000030v1_decoy 0 6246 Decoy chrUn_JTFH01000031v1_decoy 0 5926 Decoy chrUn_JTFH01000032v1_decoy 0 5914 Decoy chrUn_JTFH01000033v1_decoy 0 5898 Decoy chrUn_JTFH01000034v1_decoy 0 5879 Decoy chrUn_JTFH01000035v1_decoy 0 5834 Decoy chrUn_JTFH01000036v1_decoy 0 5743 Decoy chrUn_JTFH01000037v1_decoy 0 5577 Decoy chrUn_JTFH01000038v1_decoy 0 5413 Decoy chrUn_JTFH01000039v1_decoy 0 5250 Decoy chrUn_JTFH01000040v1_decoy 0 5246 Decoy chrUn_JTFH01000041v1_decoy 0 5118 Decoy chrUn_JTFH01000042v1_decoy 0 5058 Decoy chrUn_JTFH01000043v1_decoy 0 4959 Decoy chrUn_JTFH01000044v1_decoy 0 4853 Decoy chrUn_JTFH01000045v1_decoy 0 4828 Decoy chrUn_JTFH01000046v1_decoy 0 4819 Decoy chrUn_JTFH01000047v1_decoy 0 4809 Decoy chrUn_JTFH01000048v1_decoy 0 4710 Decoy chrUn_JTFH01000049v1_decoy 0 4680 Decoy chrUn_JTFH01000050v1_decoy 0 4645 Decoy chrUn_JTFH01000051v1_decoy 0 4514 Decoy chrUn_JTFH01000052v1_decoy 0 4439 Decoy chrUn_JTFH01000053v1_decoy 0 4416 Decoy chrUn_JTFH01000054v1_decoy 0 4409 Decoy chrUn_JTFH01000055v1_decoy 0 4392 Decoy chrUn_JTFH01000056v1_decoy 0 4359 Decoy chrUn_JTFH01000057v1_decoy 0 4319 Decoy chrUn_JTFH01000058v1_decoy 0 4290 Decoy chrUn_JTFH01000059v1_decoy 0 4242 Decoy chrUn_JTFH01000060v1_decoy 0 4228 Decoy chrUn_JTFH01000061v1_decoy 0 4222 Decoy chrUn_JTFH01000062v1_decoy 0 4216 Decoy chrUn_JTFH01000063v1_decoy 0 4210 Decoy chrUn_JTFH01000064v1_decoy 0 4206 Decoy chrUn_JTFH01000065v1_decoy 0 4102 Decoy chrUn_JTFH01000066v1_decoy 0 4101 Decoy chrUn_JTFH01000067v1_decoy 0 4083 Decoy chrUn_JTFH01000068v1_decoy 0 3967 Decoy chrUn_JTFH01000069v1_decoy 0 3955 Decoy chrUn_JTFH01000070v1_decoy 0 3945 Decoy chrUn_JTFH01000071v1_decoy 0 3930 Decoy chrUn_JTFH01000072v1_decoy 0 3929 Decoy chrUn_JTFH01000073v1_decoy 0 3924 Decoy chrUn_JTFH01000074v1_decoy 0 3919 Decoy chrUn_JTFH01000075v1_decoy 0 3908 Decoy chrUn_JTFH01000076v1_decoy 0 3892 Decoy chrUn_JTFH01000077v1_decoy 0 3890 Decoy chrUn_JTFH01000078v1_decoy 0 3859 Decoy chrUn_JTFH01000079v1_decoy 0 3846 Decoy chrUn_JTFH01000080v1_decoy 0 3835 Decoy chrUn_JTFH01000081v1_decoy 0 3830 Decoy chrUn_JTFH01000082v1_decoy 0 3828 Decoy chrUn_JTFH01000083v1_decoy 0 3825 Decoy chrUn_JTFH01000084v1_decoy 0 3821 Decoy chrUn_JTFH01000085v1_decoy 0 3809 Decoy chrUn_JTFH01000086v1_decoy 0 3801 Decoy chrUn_JTFH01000087v1_decoy 0 3799 Decoy chrUn_JTFH01000088v1_decoy 0 3737 Decoy chrUn_JTFH01000089v1_decoy 0 3701 Decoy chrUn_JTFH01000090v1_decoy 0 3698 Decoy chrUn_JTFH01000091v1_decoy 0 3692 Decoy chrUn_JTFH01000092v1_decoy 0 3686 Decoy chrUn_JTFH01000093v1_decoy 0 3677 Decoy chrUn_JTFH01000094v1_decoy 0 3664 Decoy chrUn_JTFH01000095v1_decoy 0 3613 Decoy chrUn_JTFH01000096v1_decoy 0 3611 Decoy chrUn_JTFH01000097v1_decoy 0 3606 Decoy chrUn_JTFH01000098v1_decoy 0 3584 Decoy chrUn_JTFH01000099v1_decoy 0 3581 Decoy chrUn_JTFH01000100v1_decoy 0 3543 Decoy chrUn_JTFH01000101v1_decoy 0 3528 Decoy chrUn_JTFH01000102v1_decoy 0 3527 Decoy chrUn_JTFH01000103v1_decoy 0 3496 Decoy chrUn_JTFH01000104v1_decoy 0 3493 Decoy chrUn_JTFH01000105v1_decoy 0 3484 Decoy chrUn_JTFH01000106v1_decoy 0 3435 Decoy chrUn_JTFH01000107v1_decoy 0 3391 Decoy chrUn_JTFH01000108v1_decoy 0 3374 Decoy chrUn_JTFH01000109v1_decoy 0 3371 Decoy chrUn_JTFH01000110v1_decoy 0 3361 Decoy chrUn_JTFH01000111v1_decoy 0 3351 Decoy chrUn_JTFH01000112v1_decoy 0 3340 Decoy chrUn_JTFH01000113v1_decoy 0 3320 Decoy chrUn_JTFH01000114v1_decoy 0 3282 Decoy chrUn_JTFH01000115v1_decoy 0 3278 Decoy chrUn_JTFH01000116v1_decoy 0 3260 Decoy chrUn_JTFH01000117v1_decoy 0 3258 Decoy chrUn_JTFH01000118v1_decoy 0 3253 Decoy chrUn_JTFH01000119v1_decoy 0 3247 Decoy chrUn_JTFH01000120v1_decoy 0 3230 Decoy chrUn_JTFH01000121v1_decoy 0 3224 Decoy chrUn_JTFH01000122v1_decoy 0 3216 Decoy chrUn_JTFH01000123v1_decoy 0 3212 Decoy chrUn_JTFH01000124v1_decoy 0 3194 Decoy chrUn_JTFH01000125v1_decoy 0 3189 Decoy chrUn_JTFH01000126v1_decoy 0 3177 Decoy chrUn_JTFH01000127v1_decoy 0 3176 Decoy chrUn_JTFH01000128v1_decoy 0 3173 Decoy chrUn_JTFH01000129v1_decoy 0 3170 Decoy chrUn_JTFH01000130v1_decoy 0 3166 Decoy chrUn_JTFH01000131v1_decoy 0 3163 Decoy chrUn_JTFH01000132v1_decoy 0 3143 Decoy chrUn_JTFH01000133v1_decoy 0 3137 Decoy chrUn_JTFH01000134v1_decoy 0 3116 Decoy chrUn_JTFH01000135v1_decoy 0 3106 Decoy chrUn_JTFH01000136v1_decoy 0 3093 Decoy chrUn_JTFH01000137v1_decoy 0 3079 Decoy chrUn_JTFH01000138v1_decoy 0 3053 Decoy chrUn_JTFH01000139v1_decoy 0 3051 Decoy chrUn_JTFH01000140v1_decoy 0 3015 Decoy chrUn_JTFH01000141v1_decoy 0 3012 Decoy chrUn_JTFH01000142v1_decoy 0 3009 Decoy chrUn_JTFH01000143v1_decoy 0 2997 Decoy chrUn_JTFH01000144v1_decoy 0 2997 Decoy chrUn_JTFH01000145v1_decoy 0 2983 Decoy chrUn_JTFH01000146v1_decoy 0 2979 Decoy chrUn_JTFH01000147v1_decoy 0 2967 Decoy chrUn_JTFH01000148v1_decoy 0 2967 Decoy chrUn_JTFH01000149v1_decoy 0 2966 Decoy chrUn_JTFH01000150v1_decoy 0 2954 Decoy chrUn_JTFH01000151v1_decoy 0 2952 Decoy chrUn_JTFH01000152v1_decoy 0 2934 Decoy chrUn_JTFH01000153v1_decoy 0 2918 Decoy chrUn_JTFH01000154v1_decoy 0 2895 Decoy chrUn_JTFH01000155v1_decoy 0 2887 Decoy chrUn_JTFH01000156v1_decoy 0 2879 Decoy chrUn_JTFH01000157v1_decoy 0 2878 Decoy chrUn_JTFH01000158v1_decoy 0 2872 Decoy chrUn_JTFH01000159v1_decoy 0 2868 Decoy chrUn_JTFH01000160v1_decoy 0 2866 Decoy chrUn_JTFH01000161v1_decoy 0 2865 Decoy chrUn_JTFH01000162v1_decoy 0 2864 Decoy chrUn_JTFH01000163v1_decoy 0 2859 Decoy chrUn_JTFH01000164v1_decoy 0 2854 Decoy chrUn_JTFH01000165v1_decoy 0 2830 Decoy chrUn_JTFH01000166v1_decoy 0 2828 Decoy chrUn_JTFH01000167v1_decoy 0 2824 Decoy chrUn_JTFH01000168v1_decoy 0 2819 Decoy chrUn_JTFH01000169v1_decoy 0 2813 Decoy chrUn_JTFH01000170v1_decoy 0 2809 Decoy chrUn_JTFH01000171v1_decoy 0 2802 Decoy chrUn_JTFH01000172v1_decoy 0 2791 Decoy chrUn_JTFH01000173v1_decoy 0 2783 Decoy chrUn_JTFH01000174v1_decoy 0 2778 Decoy chrUn_JTFH01000175v1_decoy 0 2777 Decoy chrUn_JTFH01000176v1_decoy 0 2770 Decoy chrUn_JTFH01000177v1_decoy 0 2769 Decoy chrUn_JTFH01000178v1_decoy 0 2767 Decoy chrUn_JTFH01000179v1_decoy 0 2763 Decoy chrUn_JTFH01000180v1_decoy 0 2745 Decoy chrUn_JTFH01000181v1_decoy 0 2742 Decoy chrUn_JTFH01000182v1_decoy 0 2736 Decoy chrUn_JTFH01000183v1_decoy 0 2729 Decoy chrUn_JTFH01000184v1_decoy 0 2726 Decoy chrUn_JTFH01000185v1_decoy 0 2719 Decoy chrUn_JTFH01000186v1_decoy 0 2715 Decoy chrUn_JTFH01000187v1_decoy 0 2708 Decoy chrUn_JTFH01000188v1_decoy 0 2704 Decoy chrUn_JTFH01000189v1_decoy 0 2692 Decoy chrUn_JTFH01000190v1_decoy 0 2691 Decoy chrUn_JTFH01000191v1_decoy 0 2690 Decoy chrUn_JTFH01000192v1_decoy 0 2687 Decoy chrUn_JTFH01000193v1_decoy 0 2677 Decoy chrUn_JTFH01000194v1_decoy 0 2668 Decoy chrUn_JTFH01000195v1_decoy 0 2668 Decoy chrUn_JTFH01000196v1_decoy 0 2663 Decoy chrUn_JTFH01000197v1_decoy 0 2655 Decoy chrUn_JTFH01000198v1_decoy 0 2644 Decoy chrUn_JTFH01000199v1_decoy 0 2642 Decoy chrUn_JTFH01000200v1_decoy 0 2632 Decoy chrUn_JTFH01000201v1_decoy 0 2632 Decoy chrUn_JTFH01000202v1_decoy 0 2628 Decoy chrUn_JTFH01000203v1_decoy 0 2623 Decoy chrUn_JTFH01000204v1_decoy 0 2622 Decoy chrUn_JTFH01000205v1_decoy 0 2619 Decoy chrUn_JTFH01000206v1_decoy 0 2605 Decoy chrUn_JTFH01000207v1_decoy 0 2603 Decoy chrUn_JTFH01000208v1_decoy 0 2601 Decoy chrUn_JTFH01000209v1_decoy 0 2598 Decoy chrUn_JTFH01000210v1_decoy 0 2597 Decoy chrUn_JTFH01000211v1_decoy 0 2596 Decoy chrUn_JTFH01000212v1_decoy 0 2594 Decoy chrUn_JTFH01000213v1_decoy 0 2586 Decoy chrUn_JTFH01000214v1_decoy 0 2585 Decoy chrUn_JTFH01000215v1_decoy 0 2583 Decoy chrUn_JTFH01000216v1_decoy 0 2578 Decoy chrUn_JTFH01000217v1_decoy 0 2569 Decoy chrUn_JTFH01000218v1_decoy 0 2569 Decoy chrUn_JTFH01000219v1_decoy 0 2551 Decoy chrUn_JTFH01000220v1_decoy 0 2548 Decoy chrUn_JTFH01000221v1_decoy 0 2548 Decoy chrUn_JTFH01000222v1_decoy 0 2546 Decoy chrUn_JTFH01000223v1_decoy 0 2545 Decoy chrUn_JTFH01000224v1_decoy 0 2534 Decoy chrUn_JTFH01000225v1_decoy 0 2533 Decoy chrUn_JTFH01000226v1_decoy 0 2522 Decoy chrUn_JTFH01000227v1_decoy 0 2522 Decoy chrUn_JTFH01000228v1_decoy 0 2515 Decoy chrUn_JTFH01000229v1_decoy 0 2513 Decoy chrUn_JTFH01000230v1_decoy 0 2507 Decoy chrUn_JTFH01000231v1_decoy 0 2504 Decoy chrUn_JTFH01000232v1_decoy 0 2497 Decoy chrUn_JTFH01000233v1_decoy 0 2471 Decoy chrUn_JTFH01000234v1_decoy 0 2465 Decoy chrUn_JTFH01000235v1_decoy 0 2464 Decoy chrUn_JTFH01000236v1_decoy 0 2459 Decoy chrUn_JTFH01000237v1_decoy 0 2457 Decoy chrUn_JTFH01000238v1_decoy 0 2450 Decoy chrUn_JTFH01000239v1_decoy 0 2435 Decoy chrUn_JTFH01000240v1_decoy 0 2434 Decoy chrUn_JTFH01000241v1_decoy 0 2432 Decoy chrUn_JTFH01000242v1_decoy 0 2427 Decoy chrUn_JTFH01000243v1_decoy 0 2421 Decoy chrUn_JTFH01000244v1_decoy 0 2420 Decoy chrUn_JTFH01000245v1_decoy 0 2414 Decoy chrUn_JTFH01000246v1_decoy 0 2404 Decoy chrUn_JTFH01000247v1_decoy 0 2403 Decoy chrUn_JTFH01000248v1_decoy 0 2402 Decoy chrUn_JTFH01000249v1_decoy 0 2397 Decoy chrUn_JTFH01000250v1_decoy 0 2395 Decoy chrUn_JTFH01000251v1_decoy 0 2394 Decoy chrUn_JTFH01000252v1_decoy 0 2388 Decoy chrUn_JTFH01000253v1_decoy 0 2382 Decoy chrUn_JTFH01000254v1_decoy 0 2381 Decoy chrUn_JTFH01000255v1_decoy 0 2380 Decoy chrUn_JTFH01000256v1_decoy 0 2368 Decoy chrUn_JTFH01000257v1_decoy 0 2364 Decoy chrUn_JTFH01000258v1_decoy 0 2363 Decoy chrUn_JTFH01000259v1_decoy 0 2348 Decoy chrUn_JTFH01000260v1_decoy 0 2339 Decoy chrUn_JTFH01000261v1_decoy 0 2335 Decoy chrUn_JTFH01000262v1_decoy 0 2332 Decoy chrUn_JTFH01000263v1_decoy 0 2331 Decoy chrUn_JTFH01000264v1_decoy 0 2330 Decoy chrUn_JTFH01000265v1_decoy 0 2323 Decoy chrUn_JTFH01000266v1_decoy 0 2319 Decoy chrUn_JTFH01000267v1_decoy 0 2314 Decoy chrUn_JTFH01000268v1_decoy 0 2308 Decoy chrUn_JTFH01000269v1_decoy 0 2306 Decoy chrUn_JTFH01000270v1_decoy 0 2296 Decoy chrUn_JTFH01000271v1_decoy 0 2287 Decoy chrUn_JTFH01000272v1_decoy 0 2279 Decoy chrUn_JTFH01000273v1_decoy 0 2276 Decoy chrUn_JTFH01000274v1_decoy 0 2273 Decoy chrUn_JTFH01000275v1_decoy 0 2262 Decoy chrUn_JTFH01000276v1_decoy 0 2254 Decoy chrUn_JTFH01000277v1_decoy 0 2252 Decoy chrUn_JTFH01000278v1_decoy 0 2245 Decoy chrUn_JTFH01000279v1_decoy 0 2239 Decoy chrUn_JTFH01000280v1_decoy 0 2223 Decoy chrUn_JTFH01000281v1_decoy 0 2220 Decoy chrUn_JTFH01000282v1_decoy 0 2218 Decoy chrUn_JTFH01000283v1_decoy 0 2215 Decoy chrUn_JTFH01000284v1_decoy 0 2213 Decoy chrUn_JTFH01000285v1_decoy 0 2203 Decoy chrUn_JTFH01000286v1_decoy 0 2200 Decoy chrUn_JTFH01000287v1_decoy 0 2197 Decoy chrUn_JTFH01000288v1_decoy 0 2194 Decoy chrUn_JTFH01000289v1_decoy 0 2183 Decoy chrUn_JTFH01000290v1_decoy 0 2179 Decoy chrUn_JTFH01000291v1_decoy 0 2177 Decoy chrUn_JTFH01000292v1_decoy 0 2177 Decoy chrUn_JTFH01000293v1_decoy 0 2177 Decoy chrUn_JTFH01000294v1_decoy 0 2168 Decoy chrUn_JTFH01000295v1_decoy 0 2160 Decoy chrUn_JTFH01000296v1_decoy 0 2155 Decoy chrUn_JTFH01000297v1_decoy 0 2144 Decoy chrUn_JTFH01000298v1_decoy 0 2143 Decoy chrUn_JTFH01000299v1_decoy 0 2136 Decoy chrUn_JTFH01000300v1_decoy 0 2134 Decoy chrUn_JTFH01000301v1_decoy 0 2129 Decoy chrUn_JTFH01000302v1_decoy 0 2128 Decoy chrUn_JTFH01000303v1_decoy 0 2125 Decoy chrUn_JTFH01000304v1_decoy 0 2125 Decoy chrUn_JTFH01000305v1_decoy 0 2122 Decoy chrUn_JTFH01000306v1_decoy 0 2111 Decoy chrUn_JTFH01000307v1_decoy 0 2106 Decoy chrUn_JTFH01000308v1_decoy 0 2094 Decoy chrUn_JTFH01000309v1_decoy 0 2093 Decoy chrUn_JTFH01000310v1_decoy 0 2088 Decoy chrUn_JTFH01000311v1_decoy 0 2086 Decoy chrUn_JTFH01000312v1_decoy 0 2086 Decoy chrUn_JTFH01000313v1_decoy 0 2084 Decoy chrUn_JTFH01000314v1_decoy 0 2080 Decoy chrUn_JTFH01000315v1_decoy 0 2079 Decoy chrUn_JTFH01000316v1_decoy 0 2076 Decoy chrUn_JTFH01000317v1_decoy 0 2071 Decoy chrUn_JTFH01000318v1_decoy 0 2066 Decoy chrUn_JTFH01000319v1_decoy 0 2061 Decoy chrUn_JTFH01000320v1_decoy 0 2055 Decoy chrUn_JTFH01000321v1_decoy 0 2053 Decoy chrUn_JTFH01000322v1_decoy 0 2040 Decoy chrUn_JTFH01000323v1_decoy 0 2036 Decoy chrUn_JTFH01000324v1_decoy 0 2035 Decoy chrUn_JTFH01000325v1_decoy 0 2034 Decoy chrUn_JTFH01000326v1_decoy 0 2032 Decoy chrUn_JTFH01000327v1_decoy 0 2029 Decoy chrUn_JTFH01000328v1_decoy 0 2025 Decoy chrUn_JTFH01000329v1_decoy 0 2021 Decoy chrUn_JTFH01000330v1_decoy 0 2018 Decoy chrUn_JTFH01000331v1_decoy 0 2015 Decoy chrUn_JTFH01000332v1_decoy 0 2009 Decoy chrUn_JTFH01000333v1_decoy 0 2007 Decoy chrUn_JTFH01000334v1_decoy 0 2005 Decoy chrUn_JTFH01000335v1_decoy 0 2003 Decoy chrUn_JTFH01000336v1_decoy 0 2001 Decoy chrUn_JTFH01000337v1_decoy 0 2001 Decoy chrUn_JTFH01000338v1_decoy 0 2000 Decoy chrUn_JTFH01000339v1_decoy 0 1996 Decoy chrUn_JTFH01000340v1_decoy 0 1992 Decoy chrUn_JTFH01000341v1_decoy 0 1985 Decoy chrUn_JTFH01000342v1_decoy 0 1981 Decoy chrUn_JTFH01000343v1_decoy 0 1977 Decoy chrUn_JTFH01000344v1_decoy 0 1971 Decoy chrUn_JTFH01000345v1_decoy 0 1968 Decoy chrUn_JTFH01000346v1_decoy 0 1962 Decoy chrUn_JTFH01000347v1_decoy 0 1961 Decoy chrUn_JTFH01000348v1_decoy 0 1960 Decoy chrUn_JTFH01000349v1_decoy 0 1960 Decoy chrUn_JTFH01000350v1_decoy 0 1954 Decoy chrUn_JTFH01000351v1_decoy 0 1952 Decoy chrUn_JTFH01000352v1_decoy 0 1947 Decoy chrUn_JTFH01000353v1_decoy 0 1944 Decoy chrUn_JTFH01000354v1_decoy 0 1943 Decoy chrUn_JTFH01000355v1_decoy 0 1941 Decoy chrUn_JTFH01000356v1_decoy 0 1937 Decoy chrUn_JTFH01000357v1_decoy 0 1934 Decoy chrUn_JTFH01000358v1_decoy 0 1929 Decoy chrUn_JTFH01000359v1_decoy 0 1924 Decoy chrUn_JTFH01000360v1_decoy 0 1924 Decoy chrUn_JTFH01000361v1_decoy 0 1923 Decoy chrUn_JTFH01000362v1_decoy 0 1921 Decoy chrUn_JTFH01000363v1_decoy 0 1918 Decoy chrUn_JTFH01000364v1_decoy 0 1915 Decoy chrUn_JTFH01000365v1_decoy 0 1915 Decoy chrUn_JTFH01000366v1_decoy 0 1914 Decoy chrUn_JTFH01000367v1_decoy 0 1912 Decoy chrUn_JTFH01000368v1_decoy 0 1910 Decoy chrUn_JTFH01000369v1_decoy 0 1907 Decoy chrUn_JTFH01000370v1_decoy 0 1904 Decoy chrUn_JTFH01000371v1_decoy 0 1897 Decoy chrUn_JTFH01000372v1_decoy 0 1891 Decoy chrUn_JTFH01000373v1_decoy 0 1890 Decoy chrUn_JTFH01000374v1_decoy 0 1888 Decoy chrUn_JTFH01000375v1_decoy 0 1888 Decoy chrUn_JTFH01000376v1_decoy 0 1885 Decoy chrUn_JTFH01000377v1_decoy 0 1881 Decoy chrUn_JTFH01000378v1_decoy 0 1879 Decoy chrUn_JTFH01000379v1_decoy 0 1877 Decoy chrUn_JTFH01000380v1_decoy 0 1876 Decoy chrUn_JTFH01000381v1_decoy 0 1876 Decoy chrUn_JTFH01000382v1_decoy 0 1874 Decoy chrUn_JTFH01000383v1_decoy 0 1872 Decoy chrUn_JTFH01000384v1_decoy 0 1869 Decoy chrUn_JTFH01000385v1_decoy 0 1866 Decoy chrUn_JTFH01000386v1_decoy 0 1865 Decoy chrUn_JTFH01000387v1_decoy 0 1865 Decoy chrUn_JTFH01000388v1_decoy 0 1865 Decoy chrUn_JTFH01000389v1_decoy 0 1862 Decoy chrUn_JTFH01000390v1_decoy 0 1862 Decoy chrUn_JTFH01000391v1_decoy 0 1859 Decoy chrUn_JTFH01000392v1_decoy 0 1856 Decoy chrUn_JTFH01000393v1_decoy 0 1856 Decoy chrUn_JTFH01000394v1_decoy 0 1854 Decoy chrUn_JTFH01000395v1_decoy 0 1850 Decoy chrUn_JTFH01000396v1_decoy 0 1849 Decoy chrUn_JTFH01000397v1_decoy 0 1849 Decoy chrUn_JTFH01000398v1_decoy 0 1847 Decoy chrUn_JTFH01000399v1_decoy 0 1839 Decoy chrUn_JTFH01000400v1_decoy 0 1834 Decoy chrUn_JTFH01000401v1_decoy 0 1821 Decoy chrUn_JTFH01000402v1_decoy 0 1815 Decoy chrUn_JTFH01000403v1_decoy 0 1811 Decoy chrUn_JTFH01000404v1_decoy 0 1808 Decoy chrUn_JTFH01000405v1_decoy 0 1808 Decoy chrUn_JTFH01000406v1_decoy 0 1807 Decoy chrUn_JTFH01000407v1_decoy 0 1807 Decoy chrUn_JTFH01000408v1_decoy 0 1802 Decoy chrUn_JTFH01000409v1_decoy 0 1801 Decoy chrUn_JTFH01000410v1_decoy 0 1800 Decoy chrUn_JTFH01000411v1_decoy 0 1795 Decoy chrUn_JTFH01000412v1_decoy 0 1794 Decoy chrUn_JTFH01000413v1_decoy 0 1792 Decoy chrUn_JTFH01000414v1_decoy 0 1788 Decoy chrUn_JTFH01000415v1_decoy 0 1786 Decoy chrUn_JTFH01000416v1_decoy 0 1782 Decoy chrUn_JTFH01000417v1_decoy 0 1782 Decoy chrUn_JTFH01000418v1_decoy 0 1781 Decoy chrUn_JTFH01000419v1_decoy 0 1781 Decoy chrUn_JTFH01000420v1_decoy 0 1779 Decoy chrUn_JTFH01000421v1_decoy 0 1777 Decoy chrUn_JTFH01000422v1_decoy 0 1764 Decoy chrUn_JTFH01000423v1_decoy 0 1762 Decoy chrUn_JTFH01000424v1_decoy 0 1755 Decoy chrUn_JTFH01000425v1_decoy 0 1749 Decoy chrUn_JTFH01000426v1_decoy 0 1747 Decoy chrUn_JTFH01000427v1_decoy 0 1746 Decoy chrUn_JTFH01000428v1_decoy 0 1745 Decoy chrUn_JTFH01000429v1_decoy 0 1744 Decoy chrUn_JTFH01000430v1_decoy 0 1742 Decoy chrUn_JTFH01000431v1_decoy 0 1740 Decoy chrUn_JTFH01000432v1_decoy 0 1740 Decoy chrUn_JTFH01000433v1_decoy 0 1736 Decoy chrUn_JTFH01000434v1_decoy 0 1735 Decoy chrUn_JTFH01000435v1_decoy 0 1732 Decoy chrUn_JTFH01000436v1_decoy 0 1732 Decoy chrUn_JTFH01000437v1_decoy 0 1730 Decoy chrUn_JTFH01000438v1_decoy 0 1727 Decoy chrUn_JTFH01000439v1_decoy 0 1722 Decoy chrUn_JTFH01000440v1_decoy 0 1718 Decoy chrUn_JTFH01000441v1_decoy 0 1716 Decoy chrUn_JTFH01000442v1_decoy 0 1710 Decoy chrUn_JTFH01000443v1_decoy 0 1708 Decoy chrUn_JTFH01000444v1_decoy 0 1707 Decoy chrUn_JTFH01000445v1_decoy 0 1706 Decoy chrUn_JTFH01000446v1_decoy 0 1705 Decoy chrUn_JTFH01000447v1_decoy 0 1704 Decoy chrUn_JTFH01000448v1_decoy 0 1699 Decoy chrUn_JTFH01000449v1_decoy 0 1698 Decoy chrUn_JTFH01000450v1_decoy 0 1697 Decoy chrUn_JTFH01000451v1_decoy 0 1697 Decoy chrUn_JTFH01000452v1_decoy 0 1695 Decoy chrUn_JTFH01000453v1_decoy 0 1695 Decoy chrUn_JTFH01000454v1_decoy 0 1693 Decoy chrUn_JTFH01000455v1_decoy 0 1687 Decoy chrUn_JTFH01000456v1_decoy 0 1686 Decoy chrUn_JTFH01000457v1_decoy 0 1680 Decoy chrUn_JTFH01000458v1_decoy 0 1679 Decoy chrUn_JTFH01000459v1_decoy 0 1679 Decoy chrUn_JTFH01000460v1_decoy 0 1678 Decoy chrUn_JTFH01000461v1_decoy 0 1674 Decoy chrUn_JTFH01000462v1_decoy 0 1674 Decoy chrUn_JTFH01000463v1_decoy 0 1671 Decoy chrUn_JTFH01000464v1_decoy 0 1669 Decoy chrUn_JTFH01000465v1_decoy 0 1665 Decoy chrUn_JTFH01000466v1_decoy 0 1663 Decoy chrUn_JTFH01000467v1_decoy 0 1657 Decoy chrUn_JTFH01000468v1_decoy 0 1653 Decoy chrUn_JTFH01000469v1_decoy 0 1652 Decoy chrUn_JTFH01000470v1_decoy 0 1650 Decoy chrUn_JTFH01000471v1_decoy 0 1649 Decoy chrUn_JTFH01000472v1_decoy 0 1649 Decoy chrUn_JTFH01000473v1_decoy 0 1640 Decoy chrUn_JTFH01000474v1_decoy 0 1638 Decoy chrUn_JTFH01000475v1_decoy 0 1636 Decoy chrUn_JTFH01000476v1_decoy 0 1632 Decoy chrUn_JTFH01000477v1_decoy 0 1631 Decoy chrUn_JTFH01000478v1_decoy 0 1630 Decoy chrUn_JTFH01000479v1_decoy 0 1627 Decoy chrUn_JTFH01000480v1_decoy 0 1624 Decoy chrUn_JTFH01000481v1_decoy 0 1617 Decoy chrUn_JTFH01000482v1_decoy 0 1616 Decoy chrUn_JTFH01000483v1_decoy 0 1615 Decoy chrUn_JTFH01000484v1_decoy 0 1611 Decoy chrUn_JTFH01000485v1_decoy 0 1611 Decoy chrUn_JTFH01000486v1_decoy 0 1606 Decoy chrUn_JTFH01000487v1_decoy 0 1605 Decoy chrUn_JTFH01000488v1_decoy 0 1605 Decoy chrUn_JTFH01000489v1_decoy 0 1600 Decoy chrUn_JTFH01000490v1_decoy 0 1598 Decoy chrUn_JTFH01000491v1_decoy 0 1598 Decoy chrUn_JTFH01000492v1_decoy 0 1597 Decoy chrUn_JTFH01000493v1_decoy 0 1596 Decoy chrUn_JTFH01000494v1_decoy 0 1595 Decoy chrUn_JTFH01000495v1_decoy 0 1592 Decoy chrUn_JTFH01000496v1_decoy 0 1589 Decoy chrUn_JTFH01000497v1_decoy 0 1585 Decoy chrUn_JTFH01000498v1_decoy 0 1579 Decoy chrUn_JTFH01000499v1_decoy 0 1578 Decoy chrUn_JTFH01000500v1_decoy 0 1577 Decoy chrUn_JTFH01000501v1_decoy 0 1577 Decoy chrUn_JTFH01000502v1_decoy 0 1577 Decoy chrUn_JTFH01000503v1_decoy 0 1576 Decoy chrUn_JTFH01000504v1_decoy 0 1575 Decoy chrUn_JTFH01000505v1_decoy 0 1574 Decoy chrUn_JTFH01000506v1_decoy 0 1572 Decoy chrUn_JTFH01000507v1_decoy 0 1571 Decoy chrUn_JTFH01000508v1_decoy 0 1563 Decoy chrUn_JTFH01000509v1_decoy 0 1561 Decoy chrUn_JTFH01000510v1_decoy 0 1561 Decoy chrUn_JTFH01000511v1_decoy 0 1560 Decoy chrUn_JTFH01000512v1_decoy 0 1560 Decoy chrUn_JTFH01000513v1_decoy 0 1554 Decoy chrUn_JTFH01000514v1_decoy 0 1552 Decoy chrUn_JTFH01000515v1_decoy 0 1548 Decoy chrUn_JTFH01000516v1_decoy 0 1546 Decoy chrUn_JTFH01000517v1_decoy 0 1541 Decoy chrUn_JTFH01000518v1_decoy 0 1536 Decoy chrUn_JTFH01000519v1_decoy 0 1533 Decoy chrUn_JTFH01000520v1_decoy 0 1532 Decoy chrUn_JTFH01000521v1_decoy 0 1532 Decoy chrUn_JTFH01000522v1_decoy 0 1530 Decoy chrUn_JTFH01000523v1_decoy 0 1527 Decoy chrUn_JTFH01000524v1_decoy 0 1526 Decoy chrUn_JTFH01000525v1_decoy 0 1524 Decoy chrUn_JTFH01000526v1_decoy 0 1523 Decoy chrUn_JTFH01000527v1_decoy 0 1523 Decoy chrUn_JTFH01000528v1_decoy 0 1522 Decoy chrUn_JTFH01000529v1_decoy 0 1522 Decoy chrUn_JTFH01000530v1_decoy 0 1519 Decoy chrUn_JTFH01000531v1_decoy 0 1513 Decoy chrUn_JTFH01000532v1_decoy 0 1508 Decoy chrUn_JTFH01000533v1_decoy 0 1508 Decoy chrUn_JTFH01000534v1_decoy 0 1505 Decoy chrUn_JTFH01000535v1_decoy 0 1503 Decoy chrUn_JTFH01000536v1_decoy 0 1496 Decoy chrUn_JTFH01000537v1_decoy 0 1491 Decoy chrUn_JTFH01000538v1_decoy 0 1490 Decoy chrUn_JTFH01000539v1_decoy 0 1490 Decoy chrUn_JTFH01000540v1_decoy 0 1487 Decoy chrUn_JTFH01000541v1_decoy 0 1486 Decoy chrUn_JTFH01000542v1_decoy 0 1485 Decoy chrUn_JTFH01000543v1_decoy 0 1484 Decoy chrUn_JTFH01000544v1_decoy 0 1483 Decoy chrUn_JTFH01000545v1_decoy 0 1479 Decoy chrUn_JTFH01000546v1_decoy 0 1479 Decoy chrUn_JTFH01000547v1_decoy 0 1476 Decoy chrUn_JTFH01000548v1_decoy 0 1475 Decoy chrUn_JTFH01000549v1_decoy 0 1472 Decoy chrUn_JTFH01000550v1_decoy 0 1469 Decoy chrUn_JTFH01000551v1_decoy 0 1468 Decoy chrUn_JTFH01000552v1_decoy 0 1467 Decoy chrUn_JTFH01000553v1_decoy 0 1465 Decoy chrUn_JTFH01000554v1_decoy 0 1464 Decoy chrUn_JTFH01000555v1_decoy 0 1463 Decoy chrUn_JTFH01000556v1_decoy 0 1463 Decoy chrUn_JTFH01000557v1_decoy 0 1459 Decoy chrUn_JTFH01000558v1_decoy 0 1459 Decoy chrUn_JTFH01000559v1_decoy 0 1458 Decoy chrUn_JTFH01000560v1_decoy 0 1458 Decoy chrUn_JTFH01000561v1_decoy 0 1454 Decoy chrUn_JTFH01000562v1_decoy 0 1449 Decoy chrUn_JTFH01000563v1_decoy 0 1449 Decoy chrUn_JTFH01000564v1_decoy 0 1448 Decoy chrUn_JTFH01000565v1_decoy 0 1446 Decoy chrUn_JTFH01000566v1_decoy 0 1442 Decoy chrUn_JTFH01000567v1_decoy 0 1441 Decoy chrUn_JTFH01000568v1_decoy 0 1440 Decoy chrUn_JTFH01000569v1_decoy 0 1439 Decoy chrUn_JTFH01000570v1_decoy 0 1437 Decoy chrUn_JTFH01000571v1_decoy 0 1436 Decoy chrUn_JTFH01000572v1_decoy 0 1429 Decoy chrUn_JTFH01000573v1_decoy 0 1429 Decoy chrUn_JTFH01000574v1_decoy 0 1427 Decoy chrUn_JTFH01000575v1_decoy 0 1426 Decoy chrUn_JTFH01000576v1_decoy 0 1425 Decoy chrUn_JTFH01000577v1_decoy 0 1424 Decoy chrUn_JTFH01000578v1_decoy 0 1424 Decoy chrUn_JTFH01000579v1_decoy 0 1423 Decoy chrUn_JTFH01000580v1_decoy 0 1423 Decoy chrUn_JTFH01000581v1_decoy 0 1423 Decoy chrUn_JTFH01000582v1_decoy 0 1414 Decoy chrUn_JTFH01000583v1_decoy 0 1414 Decoy chrUn_JTFH01000584v1_decoy 0 1413 Decoy chrUn_JTFH01000585v1_decoy 0 1413 Decoy chrUn_JTFH01000586v1_decoy 0 1410 Decoy chrUn_JTFH01000587v1_decoy 0 1409 Decoy chrUn_JTFH01000588v1_decoy 0 1409 Decoy chrUn_JTFH01000589v1_decoy 0 1406 Decoy chrUn_JTFH01000590v1_decoy 0 1405 Decoy chrUn_JTFH01000591v1_decoy 0 1405 Decoy chrUn_JTFH01000592v1_decoy 0 1404 Decoy chrUn_JTFH01000593v1_decoy 0 1404 Decoy chrUn_JTFH01000594v1_decoy 0 1402 Decoy chrUn_JTFH01000595v1_decoy 0 1402 Decoy chrUn_JTFH01000596v1_decoy 0 1402 Decoy chrUn_JTFH01000597v1_decoy 0 1402 Decoy chrUn_JTFH01000598v1_decoy 0 1400 Decoy chrUn_JTFH01000599v1_decoy 0 1398 Decoy chrUn_JTFH01000600v1_decoy 0 1396 Decoy chrUn_JTFH01000601v1_decoy 0 1395 Decoy chrUn_JTFH01000602v1_decoy 0 1394 Decoy chrUn_JTFH01000603v1_decoy 0 1393 Decoy chrUn_JTFH01000604v1_decoy 0 1391 Decoy chrUn_JTFH01000605v1_decoy 0 1389 Decoy chrUn_JTFH01000606v1_decoy 0 1389 Decoy chrUn_JTFH01000607v1_decoy 0 1388 Decoy chrUn_JTFH01000608v1_decoy 0 1387 Decoy chrUn_JTFH01000609v1_decoy 0 1384 Decoy chrUn_JTFH01000610v1_decoy 0 1381 Decoy chrUn_JTFH01000611v1_decoy 0 1381 Decoy chrUn_JTFH01000612v1_decoy 0 1379 Decoy chrUn_JTFH01000613v1_decoy 0 1377 Decoy chrUn_JTFH01000614v1_decoy 0 1376 Decoy chrUn_JTFH01000615v1_decoy 0 1376 Decoy chrUn_JTFH01000616v1_decoy 0 1375 Decoy chrUn_JTFH01000617v1_decoy 0 1374 Decoy chrUn_JTFH01000618v1_decoy 0 1372 Decoy chrUn_JTFH01000619v1_decoy 0 1371 Decoy chrUn_JTFH01000620v1_decoy 0 1370 Decoy chrUn_JTFH01000621v1_decoy 0 1370 Decoy chrUn_JTFH01000622v1_decoy 0 1366 Decoy chrUn_JTFH01000623v1_decoy 0 1363 Decoy chrUn_JTFH01000624v1_decoy 0 1360 Decoy chrUn_JTFH01000625v1_decoy 0 1356 Decoy chrUn_JTFH01000626v1_decoy 0 1355 Decoy chrUn_JTFH01000627v1_decoy 0 1355 Decoy chrUn_JTFH01000628v1_decoy 0 1352 Decoy chrUn_JTFH01000629v1_decoy 0 1345 Decoy chrUn_JTFH01000630v1_decoy 0 1344 Decoy chrUn_JTFH01000631v1_decoy 0 1344 Decoy chrUn_JTFH01000632v1_decoy 0 1342 Decoy chrUn_JTFH01000633v1_decoy 0 1342 Decoy chrUn_JTFH01000634v1_decoy 0 1336 Decoy chrUn_JTFH01000635v1_decoy 0 1334 Decoy chrUn_JTFH01000636v1_decoy 0 1334 Decoy chrUn_JTFH01000637v1_decoy 0 1333 Decoy chrUn_JTFH01000638v1_decoy 0 1332 Decoy chrUn_JTFH01000639v1_decoy 0 1328 Decoy chrUn_JTFH01000640v1_decoy 0 1328 Decoy chrUn_JTFH01000641v1_decoy 0 1328 Decoy chrUn_JTFH01000642v1_decoy 0 1327 Decoy chrUn_JTFH01000643v1_decoy 0 1325 Decoy chrUn_JTFH01000644v1_decoy 0 1322 Decoy chrUn_JTFH01000645v1_decoy 0 1320 Decoy chrUn_JTFH01000646v1_decoy 0 1319 Decoy chrUn_JTFH01000647v1_decoy 0 1318 Decoy chrUn_JTFH01000648v1_decoy 0 1315 Decoy chrUn_JTFH01000649v1_decoy 0 1314 Decoy chrUn_JTFH01000650v1_decoy 0 1313 Decoy chrUn_JTFH01000651v1_decoy 0 1313 Decoy chrUn_JTFH01000652v1_decoy 0 1312 Decoy chrUn_JTFH01000653v1_decoy 0 1310 Decoy chrUn_JTFH01000654v1_decoy 0 1309 Decoy chrUn_JTFH01000655v1_decoy 0 1309 Decoy chrUn_JTFH01000656v1_decoy 0 1307 Decoy chrUn_JTFH01000657v1_decoy 0 1307 Decoy chrUn_JTFH01000658v1_decoy 0 1305 Decoy chrUn_JTFH01000659v1_decoy 0 1304 Decoy chrUn_JTFH01000660v1_decoy 0 1303 Decoy chrUn_JTFH01000661v1_decoy 0 1302 Decoy chrUn_JTFH01000662v1_decoy 0 1302 Decoy chrUn_JTFH01000663v1_decoy 0 1301 Decoy chrUn_JTFH01000664v1_decoy 0 1301 Decoy chrUn_JTFH01000665v1_decoy 0 1300 Decoy chrUn_JTFH01000666v1_decoy 0 1299 Decoy chrUn_JTFH01000667v1_decoy 0 1297 Decoy chrUn_JTFH01000668v1_decoy 0 1295 Decoy chrUn_JTFH01000669v1_decoy 0 1294 Decoy chrUn_JTFH01000670v1_decoy 0 1293 Decoy chrUn_JTFH01000671v1_decoy 0 1291 Decoy chrUn_JTFH01000672v1_decoy 0 1291 Decoy chrUn_JTFH01000673v1_decoy 0 1289 Decoy chrUn_JTFH01000674v1_decoy 0 1288 Decoy chrUn_JTFH01000675v1_decoy 0 1288 Decoy chrUn_JTFH01000676v1_decoy 0 1287 Decoy chrUn_JTFH01000677v1_decoy 0 1287 Decoy chrUn_JTFH01000678v1_decoy 0 1287 Decoy chrUn_JTFH01000679v1_decoy 0 1286 Decoy chrUn_JTFH01000680v1_decoy 0 1283 Decoy chrUn_JTFH01000681v1_decoy 0 1281 Decoy chrUn_JTFH01000682v1_decoy 0 1277 Decoy chrUn_JTFH01000683v1_decoy 0 1274 Decoy chrUn_JTFH01000684v1_decoy 0 1270 Decoy chrUn_JTFH01000685v1_decoy 0 1267 Decoy chrUn_JTFH01000686v1_decoy 0 1266 Decoy chrUn_JTFH01000687v1_decoy 0 1260 Decoy chrUn_JTFH01000688v1_decoy 0 1259 Decoy chrUn_JTFH01000689v1_decoy 0 1258 Decoy chrUn_JTFH01000690v1_decoy 0 1258 Decoy chrUn_JTFH01000691v1_decoy 0 1258 Decoy chrUn_JTFH01000692v1_decoy 0 1256 Decoy chrUn_JTFH01000693v1_decoy 0 1255 Decoy chrUn_JTFH01000694v1_decoy 0 1254 Decoy chrUn_JTFH01000695v1_decoy 0 1254 Decoy chrUn_JTFH01000696v1_decoy 0 1253 Decoy chrUn_JTFH01000697v1_decoy 0 1250 Decoy chrUn_JTFH01000698v1_decoy 0 1249 Decoy chrUn_JTFH01000699v1_decoy 0 1248 Decoy chrUn_JTFH01000700v1_decoy 0 1248 Decoy chrUn_JTFH01000701v1_decoy 0 1247 Decoy chrUn_JTFH01000702v1_decoy 0 1242 Decoy chrUn_JTFH01000703v1_decoy 0 1242 Decoy chrUn_JTFH01000704v1_decoy 0 1241 Decoy chrUn_JTFH01000705v1_decoy 0 1241 Decoy chrUn_JTFH01000706v1_decoy 0 1241 Decoy chrUn_JTFH01000707v1_decoy 0 1239 Decoy chrUn_JTFH01000708v1_decoy 0 1238 Decoy chrUn_JTFH01000709v1_decoy 0 1237 Decoy chrUn_JTFH01000710v1_decoy 0 1236 Decoy chrUn_JTFH01000711v1_decoy 0 1235 Decoy chrUn_JTFH01000712v1_decoy 0 1234 Decoy chrUn_JTFH01000713v1_decoy 0 1234 Decoy chrUn_JTFH01000714v1_decoy 0 1234 Decoy chrUn_JTFH01000715v1_decoy 0 1233 Decoy chrUn_JTFH01000716v1_decoy 0 1232 Decoy chrUn_JTFH01000717v1_decoy 0 1232 Decoy chrUn_JTFH01000718v1_decoy 0 1231 Decoy chrUn_JTFH01000719v1_decoy 0 1230 Decoy chrUn_JTFH01000720v1_decoy 0 1228 Decoy chrUn_JTFH01000721v1_decoy 0 1227 Decoy chrUn_JTFH01000722v1_decoy 0 1227 Decoy chrUn_JTFH01000723v1_decoy 0 1226 Decoy chrUn_JTFH01000724v1_decoy 0 1224 Decoy chrUn_JTFH01000725v1_decoy 0 1224 Decoy chrUn_JTFH01000726v1_decoy 0 1220 Decoy chrUn_JTFH01000727v1_decoy 0 1220 Decoy chrUn_JTFH01000728v1_decoy 0 1219 Decoy chrUn_JTFH01000729v1_decoy 0 1217 Decoy chrUn_JTFH01000730v1_decoy 0 1216 Decoy chrUn_JTFH01000731v1_decoy 0 1215 Decoy chrUn_JTFH01000732v1_decoy 0 1214 Decoy chrUn_JTFH01000733v1_decoy 0 1214 Decoy chrUn_JTFH01000734v1_decoy 0 1214 Decoy chrUn_JTFH01000735v1_decoy 0 1213 Decoy chrUn_JTFH01000736v1_decoy 0 1212 Decoy chrUn_JTFH01000737v1_decoy 0 1209 Decoy chrUn_JTFH01000738v1_decoy 0 1208 Decoy chrUn_JTFH01000739v1_decoy 0 1207 Decoy chrUn_JTFH01000740v1_decoy 0 1207 Decoy chrUn_JTFH01000741v1_decoy 0 1207 Decoy chrUn_JTFH01000742v1_decoy 0 1206 Decoy chrUn_JTFH01000743v1_decoy 0 1206 Decoy chrUn_JTFH01000744v1_decoy 0 1205 Decoy chrUn_JTFH01000745v1_decoy 0 1205 Decoy chrUn_JTFH01000746v1_decoy 0 1204 Decoy chrUn_JTFH01000747v1_decoy 0 1204 Decoy chrUn_JTFH01000748v1_decoy 0 1204 Decoy chrUn_JTFH01000749v1_decoy 0 1203 Decoy chrUn_JTFH01000750v1_decoy 0 1201 Decoy chrUn_JTFH01000751v1_decoy 0 1201 Decoy chrUn_JTFH01000752v1_decoy 0 1200 Decoy chrUn_JTFH01000753v1_decoy 0 1200 Decoy chrUn_JTFH01000754v1_decoy 0 1199 Decoy chrUn_JTFH01000755v1_decoy 0 1198 Decoy chrUn_JTFH01000756v1_decoy 0 1197 Decoy chrUn_JTFH01000757v1_decoy 0 1196 Decoy chrUn_JTFH01000758v1_decoy 0 1195 Decoy chrUn_JTFH01000759v1_decoy 0 1194 Decoy chrUn_JTFH01000760v1_decoy 0 1194 Decoy chrUn_JTFH01000761v1_decoy 0 1191 Decoy chrUn_JTFH01000762v1_decoy 0 1189 Decoy chrUn_JTFH01000763v1_decoy 0 1186 Decoy chrUn_JTFH01000764v1_decoy 0 1186 Decoy chrUn_JTFH01000765v1_decoy 0 1184 Decoy chrUn_JTFH01000766v1_decoy 0 1183 Decoy chrUn_JTFH01000767v1_decoy 0 1183 Decoy chrUn_JTFH01000768v1_decoy 0 1182 Decoy chrUn_JTFH01000769v1_decoy 0 1181 Decoy chrUn_JTFH01000770v1_decoy 0 1181 Decoy chrUn_JTFH01000771v1_decoy 0 1181 Decoy chrUn_JTFH01000772v1_decoy 0 1181 Decoy chrUn_JTFH01000773v1_decoy 0 1179 Decoy chrUn_JTFH01000774v1_decoy 0 1178 Decoy chrUn_JTFH01000775v1_decoy 0 1178 Decoy chrUn_JTFH01000776v1_decoy 0 1177 Decoy chrUn_JTFH01000777v1_decoy 0 1177 Decoy chrUn_JTFH01000778v1_decoy 0 1171 Decoy chrUn_JTFH01000779v1_decoy 0 1171 Decoy chrUn_JTFH01000780v1_decoy 0 1171 Decoy chrUn_JTFH01000781v1_decoy 0 1170 Decoy chrUn_JTFH01000782v1_decoy 0 1170 Decoy chrUn_JTFH01000783v1_decoy 0 1167 Decoy chrUn_JTFH01000784v1_decoy 0 1167 Decoy chrUn_JTFH01000785v1_decoy 0 1167 Decoy chrUn_JTFH01000786v1_decoy 0 1165 Decoy chrUn_JTFH01000787v1_decoy 0 1165 Decoy chrUn_JTFH01000788v1_decoy 0 1162 Decoy chrUn_JTFH01000789v1_decoy 0 1157 Decoy chrUn_JTFH01000790v1_decoy 0 1156 Decoy chrUn_JTFH01000791v1_decoy 0 1156 Decoy chrUn_JTFH01000792v1_decoy 0 1154 Decoy chrUn_JTFH01000793v1_decoy 0 1154 Decoy chrUn_JTFH01000794v1_decoy 0 1151 Decoy chrUn_JTFH01000795v1_decoy 0 1151 Decoy chrUn_JTFH01000796v1_decoy 0 1150 Decoy chrUn_JTFH01000797v1_decoy 0 1150 Decoy chrUn_JTFH01000798v1_decoy 0 1147 Decoy chrUn_JTFH01000799v1_decoy 0 1147 Decoy chrUn_JTFH01000800v1_decoy 0 1146 Decoy chrUn_JTFH01000801v1_decoy 0 1144 Decoy chrUn_JTFH01000802v1_decoy 0 1144 Decoy chrUn_JTFH01000803v1_decoy 0 1143 Decoy chrUn_JTFH01000804v1_decoy 0 1142 Decoy chrUn_JTFH01000805v1_decoy 0 1141 Decoy chrUn_JTFH01000806v1_decoy 0 1141 Decoy chrUn_JTFH01000807v1_decoy 0 1140 Decoy chrUn_JTFH01000808v1_decoy 0 1138 Decoy chrUn_JTFH01000809v1_decoy 0 1134 Decoy chrUn_JTFH01000810v1_decoy 0 1134 Decoy chrUn_JTFH01000811v1_decoy 0 1132 Decoy chrUn_JTFH01000812v1_decoy 0 1131 Decoy chrUn_JTFH01000813v1_decoy 0 1131 Decoy chrUn_JTFH01000814v1_decoy 0 1130 Decoy chrUn_JTFH01000815v1_decoy 0 1127 Decoy chrUn_JTFH01000816v1_decoy 0 1126 Decoy chrUn_JTFH01000817v1_decoy 0 1124 Decoy chrUn_JTFH01000818v1_decoy 0 1122 Decoy chrUn_JTFH01000819v1_decoy 0 1122 Decoy chrUn_JTFH01000820v1_decoy 0 1121 Decoy chrUn_JTFH01000821v1_decoy 0 1119 Decoy chrUn_JTFH01000822v1_decoy 0 1119 Decoy chrUn_JTFH01000823v1_decoy 0 1119 Decoy chrUn_JTFH01000824v1_decoy 0 1119 Decoy chrUn_JTFH01000825v1_decoy 0 1118 Decoy chrUn_JTFH01000826v1_decoy 0 1116 Decoy chrUn_JTFH01000827v1_decoy 0 1116 Decoy chrUn_JTFH01000828v1_decoy 0 1115 Decoy chrUn_JTFH01000829v1_decoy 0 1115 Decoy chrUn_JTFH01000830v1_decoy 0 1115 Decoy chrUn_JTFH01000831v1_decoy 0 1114 Decoy chrUn_JTFH01000832v1_decoy 0 1113 Decoy chrUn_JTFH01000833v1_decoy 0 1113 Decoy chrUn_JTFH01000834v1_decoy 0 1110 Decoy chrUn_JTFH01000835v1_decoy 0 1110 Decoy chrUn_JTFH01000836v1_decoy 0 1109 Decoy chrUn_JTFH01000837v1_decoy 0 1108 Decoy chrUn_JTFH01000838v1_decoy 0 1107 Decoy chrUn_JTFH01000839v1_decoy 0 1107 Decoy chrUn_JTFH01000840v1_decoy 0 1107 Decoy chrUn_JTFH01000841v1_decoy 0 1107 Decoy chrUn_JTFH01000842v1_decoy 0 1106 Decoy chrUn_JTFH01000843v1_decoy 0 1103 Decoy chrUn_JTFH01000844v1_decoy 0 1103 Decoy chrUn_JTFH01000845v1_decoy 0 1103 Decoy chrUn_JTFH01000846v1_decoy 0 1100 Decoy chrUn_JTFH01000847v1_decoy 0 1099 Decoy chrUn_JTFH01000848v1_decoy 0 1098 Decoy chrUn_JTFH01000849v1_decoy 0 1097 Decoy chrUn_JTFH01000850v1_decoy 0 1096 Decoy chrUn_JTFH01000851v1_decoy 0 1096 Decoy chrUn_JTFH01000852v1_decoy 0 1094 Decoy chrUn_JTFH01000853v1_decoy 0 1093 Decoy chrUn_JTFH01000854v1_decoy 0 1090 Decoy chrUn_JTFH01000855v1_decoy 0 1088 Decoy chrUn_JTFH01000856v1_decoy 0 1087 Decoy chrUn_JTFH01000857v1_decoy 0 1086 Decoy chrUn_JTFH01000858v1_decoy 0 1085 Decoy chrUn_JTFH01000859v1_decoy 0 1084 Decoy chrUn_JTFH01000860v1_decoy 0 1084 Decoy chrUn_JTFH01000861v1_decoy 0 1084 Decoy chrUn_JTFH01000862v1_decoy 0 1084 Decoy chrUn_JTFH01000863v1_decoy 0 1083 Decoy chrUn_JTFH01000864v1_decoy 0 1083 Decoy chrUn_JTFH01000865v1_decoy 0 1082 Decoy chrUn_JTFH01000866v1_decoy 0 1082 Decoy chrUn_JTFH01000867v1_decoy 0 1081 Decoy chrUn_JTFH01000868v1_decoy 0 1081 Decoy chrUn_JTFH01000869v1_decoy 0 1079 Decoy chrUn_JTFH01000870v1_decoy 0 1076 Decoy chrUn_JTFH01000871v1_decoy 0 1074 Decoy chrUn_JTFH01000872v1_decoy 0 1073 Decoy chrUn_JTFH01000873v1_decoy 0 1073 Decoy chrUn_JTFH01000874v1_decoy 0 1071 Decoy chrUn_JTFH01000875v1_decoy 0 1069 Decoy chrUn_JTFH01000876v1_decoy 0 1067 Decoy chrUn_JTFH01000877v1_decoy 0 1067 Decoy chrUn_JTFH01000878v1_decoy 0 1067 Decoy chrUn_JTFH01000879v1_decoy 0 1066 Decoy chrUn_JTFH01000880v1_decoy 0 1065 Decoy chrUn_JTFH01000881v1_decoy 0 1065 Decoy chrUn_JTFH01000882v1_decoy 0 1065 Decoy chrUn_JTFH01000883v1_decoy 0 1065 Decoy chrUn_JTFH01000884v1_decoy 0 1065 Decoy chrUn_JTFH01000885v1_decoy 0 1064 Decoy chrUn_JTFH01000886v1_decoy 0 1064 Decoy chrUn_JTFH01000887v1_decoy 0 1064 Decoy chrUn_JTFH01000888v1_decoy 0 1063 Decoy chrUn_JTFH01000889v1_decoy 0 1062 Decoy chrUn_JTFH01000890v1_decoy 0 1062 Decoy chrUn_JTFH01000891v1_decoy 0 1062 Decoy chrUn_JTFH01000892v1_decoy 0 1061 Decoy chrUn_JTFH01000893v1_decoy 0 1060 Decoy chrUn_JTFH01000894v1_decoy 0 1057 Decoy chrUn_JTFH01000895v1_decoy 0 1057 Decoy chrUn_JTFH01000896v1_decoy 0 1056 Decoy chrUn_JTFH01000897v1_decoy 0 1055 Decoy chrUn_JTFH01000898v1_decoy 0 1055 Decoy chrUn_JTFH01000899v1_decoy 0 1055 Decoy chrUn_JTFH01000900v1_decoy 0 1055 Decoy chrUn_JTFH01000901v1_decoy 0 1054 Decoy chrUn_JTFH01000902v1_decoy 0 1051 Decoy chrUn_JTFH01000903v1_decoy 0 1050 Decoy chrUn_JTFH01000904v1_decoy 0 1050 Decoy chrUn_JTFH01000905v1_decoy 0 1049 Decoy chrUn_JTFH01000906v1_decoy 0 1048 Decoy chrUn_JTFH01000907v1_decoy 0 1047 Decoy chrUn_JTFH01000908v1_decoy 0 1046 Decoy chrUn_JTFH01000909v1_decoy 0 1046 Decoy chrUn_JTFH01000910v1_decoy 0 1046 Decoy chrUn_JTFH01000911v1_decoy 0 1045 Decoy chrUn_JTFH01000912v1_decoy 0 1045 Decoy chrUn_JTFH01000913v1_decoy 0 1045 Decoy chrUn_JTFH01000914v1_decoy 0 1044 Decoy chrUn_JTFH01000915v1_decoy 0 1042 Decoy chrUn_JTFH01000916v1_decoy 0 1041 Decoy chrUn_JTFH01000917v1_decoy 0 1039 Decoy chrUn_JTFH01000918v1_decoy 0 1039 Decoy chrUn_JTFH01000919v1_decoy 0 1038 Decoy chrUn_JTFH01000920v1_decoy 0 1036 Decoy chrUn_JTFH01000921v1_decoy 0 1036 Decoy chrUn_JTFH01000922v1_decoy 0 1035 Decoy chrUn_JTFH01000923v1_decoy 0 1035 Decoy chrUn_JTFH01000924v1_decoy 0 1033 Decoy chrUn_JTFH01000925v1_decoy 0 1032 Decoy chrUn_JTFH01000926v1_decoy 0 1031 Decoy chrUn_JTFH01000927v1_decoy 0 1031 Decoy chrUn_JTFH01000928v1_decoy 0 1031 Decoy chrUn_JTFH01000929v1_decoy 0 1027 Decoy chrUn_JTFH01000930v1_decoy 0 1027 Decoy chrUn_JTFH01000931v1_decoy 0 1026 Decoy chrUn_JTFH01000932v1_decoy 0 1026 Decoy chrUn_JTFH01000933v1_decoy 0 1024 Decoy chrUn_JTFH01000934v1_decoy 0 1024 Decoy chrUn_JTFH01000935v1_decoy 0 1022 Decoy chrUn_JTFH01000936v1_decoy 0 1022 Decoy chrUn_JTFH01000937v1_decoy 0 1021 Decoy chrUn_JTFH01000938v1_decoy 0 1020 Decoy chrUn_JTFH01000939v1_decoy 0 1019 Decoy chrUn_JTFH01000940v1_decoy 0 1018 Decoy chrUn_JTFH01000941v1_decoy 0 1018 Decoy chrUn_JTFH01000942v1_decoy 0 1018 Decoy chrUn_JTFH01000943v1_decoy 0 1016 Decoy chrUn_JTFH01000944v1_decoy 0 1010 Decoy chrUn_JTFH01000945v1_decoy 0 1010 Decoy chrUn_JTFH01000946v1_decoy 0 1009 Decoy chrUn_JTFH01000947v1_decoy 0 1008 Decoy chrUn_JTFH01000948v1_decoy 0 1007 Decoy chrUn_JTFH01000949v1_decoy 0 1006 Decoy chrUn_JTFH01000950v1_decoy 0 1005 Decoy chrUn_JTFH01000951v1_decoy 0 1005 Decoy chrUn_JTFH01000952v1_decoy 0 1004 Decoy chrUn_JTFH01000953v1_decoy 0 1004 Decoy chrUn_JTFH01000954v1_decoy 0 1003 Decoy chrUn_JTFH01000955v1_decoy 0 1003 Decoy chrUn_JTFH01000956v1_decoy 0 1003 Decoy chrUn_JTFH01000957v1_decoy 0 1003 Decoy chrUn_JTFH01000958v1_decoy 0 1002 Decoy chrUn_JTFH01000959v1_decoy 0 1002 Decoy chrUn_JTFH01000960v1_decoy 0 1000 Decoy chrUn_JTFH01000961v1_decoy 0 1000 Decoy chrUn_JTFH01000962v1_decoy 0 8358 Decoy chrUn_JTFH01000963v1_decoy 0 7932 Decoy chrUn_JTFH01000964v1_decoy 0 6846 Decoy chrUn_JTFH01000965v1_decoy 0 4591 Decoy chrUn_JTFH01000966v1_decoy 0 4041 Decoy chrUn_JTFH01000967v1_decoy 0 3841 Decoy chrUn_JTFH01000968v1_decoy 0 3754 Decoy chrUn_JTFH01000969v1_decoy 0 3743 Decoy chrUn_JTFH01000970v1_decoy 0 3702 Decoy chrUn_JTFH01000971v1_decoy 0 3625 Decoy chrUn_JTFH01000972v1_decoy 0 3529 Decoy chrUn_JTFH01000973v1_decoy 0 3508 Decoy chrUn_JTFH01000974v1_decoy 0 3359 Decoy chrUn_JTFH01000975v1_decoy 0 3320 Decoy chrUn_JTFH01000976v1_decoy 0 3231 Decoy chrUn_JTFH01000977v1_decoy 0 3220 Decoy chrUn_JTFH01000978v1_decoy 0 3212 Decoy chrUn_JTFH01000979v1_decoy 0 3192 Decoy chrUn_JTFH01000980v1_decoy 0 3092 Decoy chrUn_JTFH01000981v1_decoy 0 3087 Decoy chrUn_JTFH01000982v1_decoy 0 3048 Decoy chrUn_JTFH01000983v1_decoy 0 3005 Decoy chrUn_JTFH01000984v1_decoy 0 3004 Decoy chrUn_JTFH01000985v1_decoy 0 2959 Decoy chrUn_JTFH01000986v1_decoy 0 2934 Decoy chrUn_JTFH01000987v1_decoy 0 2933 Decoy chrUn_JTFH01000988v1_decoy 0 2827 Decoy chrUn_JTFH01000989v1_decoy 0 2794 Decoy chrUn_JTFH01000990v1_decoy 0 2749 Decoy chrUn_JTFH01000991v1_decoy 0 2745 Decoy chrUn_JTFH01000992v1_decoy 0 2733 Decoy chrUn_JTFH01000993v1_decoy 0 2698 Decoy chrUn_JTFH01000994v1_decoy 0 2665 Decoy chrUn_JTFH01000995v1_decoy 0 2634 Decoy chrUn_JTFH01000996v1_decoy 0 2492 Decoy chrUn_JTFH01000997v1_decoy 0 2489 Decoy chrUn_JTFH01000998v1_decoy 0 2468 Decoy chrUn_JTFH01000999v1_decoy 0 2414 Decoy chrUn_JTFH01001000v1_decoy 0 2395 Decoy chrUn_JTFH01001001v1_decoy 0 2356 Decoy chrUn_JTFH01001002v1_decoy 0 2339 Decoy chrUn_JTFH01001003v1_decoy 0 2310 Decoy chrUn_JTFH01001004v1_decoy 0 2288 Decoy chrUn_JTFH01001005v1_decoy 0 2285 Decoy chrUn_JTFH01001006v1_decoy 0 2269 Decoy chrUn_JTFH01001007v1_decoy 0 2253 Decoy chrUn_JTFH01001008v1_decoy 0 2203 Decoy chrUn_JTFH01001009v1_decoy 0 2176 Decoy chrUn_JTFH01001010v1_decoy 0 2159 Decoy chrUn_JTFH01001011v1_decoy 0 2155 Decoy chrUn_JTFH01001012v1_decoy 0 2149 Decoy chrUn_JTFH01001013v1_decoy 0 2129 Decoy chrUn_JTFH01001014v1_decoy 0 2116 Decoy chrUn_JTFH01001015v1_decoy 0 2113 Decoy chrUn_JTFH01001016v1_decoy 0 2098 Decoy chrUn_JTFH01001017v1_decoy 0 2066 Decoy chrUn_JTFH01001018v1_decoy 0 2066 Decoy chrUn_JTFH01001019v1_decoy 0 2059 Decoy chrUn_JTFH01001020v1_decoy 0 2047 Decoy chrUn_JTFH01001021v1_decoy 0 2040 Decoy chrUn_JTFH01001022v1_decoy 0 2030 Decoy chrUn_JTFH01001023v1_decoy 0 2024 Decoy chrUn_JTFH01001024v1_decoy 0 2001 Decoy chrUn_JTFH01001025v1_decoy 0 1992 Decoy chrUn_JTFH01001026v1_decoy 0 1981 Decoy chrUn_JTFH01001027v1_decoy 0 1979 Decoy chrUn_JTFH01001028v1_decoy 0 1957 Decoy chrUn_JTFH01001029v1_decoy 0 1953 Decoy chrUn_JTFH01001030v1_decoy 0 1944 Decoy chrUn_JTFH01001031v1_decoy 0 1936 Decoy chrUn_JTFH01001032v1_decoy 0 1932 Decoy chrUn_JTFH01001033v1_decoy 0 1882 Decoy chrUn_JTFH01001034v1_decoy 0 1878 Decoy chrUn_JTFH01001035v1_decoy 0 1870 Decoy chrUn_JTFH01001036v1_decoy 0 1821 Decoy chrUn_JTFH01001037v1_decoy 0 1813 Decoy chrUn_JTFH01001038v1_decoy 0 1809 Decoy chrUn_JTFH01001039v1_decoy 0 1804 Decoy chrUn_JTFH01001040v1_decoy 0 1797 Decoy chrUn_JTFH01001041v1_decoy 0 1791 Decoy chrUn_JTFH01001042v1_decoy 0 1781 Decoy chrUn_JTFH01001043v1_decoy 0 1766 Decoy chrUn_JTFH01001044v1_decoy 0 1764 Decoy chrUn_JTFH01001045v1_decoy 0 1743 Decoy chrUn_JTFH01001046v1_decoy 0 1741 Decoy chrUn_JTFH01001047v1_decoy 0 1709 Decoy chrUn_JTFH01001048v1_decoy 0 1706 Decoy chrUn_JTFH01001049v1_decoy 0 1701 Decoy chrUn_JTFH01001050v1_decoy 0 1689 Decoy chrUn_JTFH01001051v1_decoy 0 1646 Decoy chrUn_JTFH01001052v1_decoy 0 1641 Decoy chrUn_JTFH01001053v1_decoy 0 1639 Decoy chrUn_JTFH01001054v1_decoy 0 1636 Decoy chrUn_JTFH01001055v1_decoy 0 1632 Decoy chrUn_JTFH01001056v1_decoy 0 1629 Decoy chrUn_JTFH01001057v1_decoy 0 1623 Decoy chrUn_JTFH01001058v1_decoy 0 1622 Decoy chrUn_JTFH01001059v1_decoy 0 1622 Decoy chrUn_JTFH01001060v1_decoy 0 1619 Decoy chrUn_JTFH01001061v1_decoy 0 1606 Decoy chrUn_JTFH01001062v1_decoy 0 1593 Decoy chrUn_JTFH01001063v1_decoy 0 1592 Decoy chrUn_JTFH01001064v1_decoy 0 1558 Decoy chrUn_JTFH01001065v1_decoy 0 1545 Decoy chrUn_JTFH01001066v1_decoy 0 1542 Decoy chrUn_JTFH01001067v1_decoy 0 1540 Decoy chrUn_JTFH01001068v1_decoy 0 1529 Decoy chrUn_JTFH01001069v1_decoy 0 1518 Decoy chrUn_JTFH01001070v1_decoy 0 1515 Decoy chrUn_JTFH01001071v1_decoy 0 1513 Decoy chrUn_JTFH01001072v1_decoy 0 1507 Decoy chrUn_JTFH01001073v1_decoy 0 1504 Decoy chrUn_JTFH01001074v1_decoy 0 1499 Decoy chrUn_JTFH01001075v1_decoy 0 1495 Decoy chrUn_JTFH01001076v1_decoy 0 1495 Decoy chrUn_JTFH01001077v1_decoy 0 1492 Decoy chrUn_JTFH01001078v1_decoy 0 1492 Decoy chrUn_JTFH01001079v1_decoy 0 1489 Decoy chrUn_JTFH01001080v1_decoy 0 1485 Decoy chrUn_JTFH01001081v1_decoy 0 1483 Decoy chrUn_JTFH01001082v1_decoy 0 1473 Decoy chrUn_JTFH01001083v1_decoy 0 1470 Decoy chrUn_JTFH01001084v1_decoy 0 1463 Decoy chrUn_JTFH01001085v1_decoy 0 1460 Decoy chrUn_JTFH01001086v1_decoy 0 1458 Decoy chrUn_JTFH01001087v1_decoy 0 1456 Decoy chrUn_JTFH01001088v1_decoy 0 1453 Decoy chrUn_JTFH01001089v1_decoy 0 1443 Decoy chrUn_JTFH01001090v1_decoy 0 1441 Decoy chrUn_JTFH01001091v1_decoy 0 1426 Decoy chrUn_JTFH01001092v1_decoy 0 1425 Decoy chrUn_JTFH01001093v1_decoy 0 1418 Decoy chrUn_JTFH01001094v1_decoy 0 1413 Decoy chrUn_JTFH01001095v1_decoy 0 1413 Decoy chrUn_JTFH01001096v1_decoy 0 1412 Decoy chrUn_JTFH01001097v1_decoy 0 1407 Decoy chrUn_JTFH01001098v1_decoy 0 1406 Decoy chrUn_JTFH01001099v1_decoy 0 1396 Decoy chrUn_JTFH01001100v1_decoy 0 1390 Decoy chrUn_JTFH01001101v1_decoy 0 1382 Decoy chrUn_JTFH01001102v1_decoy 0 1376 Decoy chrUn_JTFH01001103v1_decoy 0 1375 Decoy chrUn_JTFH01001104v1_decoy 0 1371 Decoy chrUn_JTFH01001105v1_decoy 0 1367 Decoy chrUn_JTFH01001106v1_decoy 0 1364 Decoy chrUn_JTFH01001107v1_decoy 0 1356 Decoy chrUn_JTFH01001108v1_decoy 0 1355 Decoy chrUn_JTFH01001109v1_decoy 0 1352 Decoy chrUn_JTFH01001110v1_decoy 0 1350 Decoy chrUn_JTFH01001111v1_decoy 0 1346 Decoy chrUn_JTFH01001112v1_decoy 0 1345 Decoy chrUn_JTFH01001113v1_decoy 0 1340 Decoy chrUn_JTFH01001114v1_decoy 0 1330 Decoy chrUn_JTFH01001115v1_decoy 0 1329 Decoy chrUn_JTFH01001116v1_decoy 0 1324 Decoy chrUn_JTFH01001117v1_decoy 0 1316 Decoy chrUn_JTFH01001118v1_decoy 0 1307 Decoy chrUn_JTFH01001119v1_decoy 0 1304 Decoy chrUn_JTFH01001120v1_decoy 0 1304 Decoy chrUn_JTFH01001121v1_decoy 0 1303 Decoy chrUn_JTFH01001122v1_decoy 0 1301 Decoy chrUn_JTFH01001123v1_decoy 0 1300 Decoy chrUn_JTFH01001124v1_decoy 0 1297 Decoy chrUn_JTFH01001125v1_decoy 0 1296 Decoy chrUn_JTFH01001126v1_decoy 0 1290 Decoy chrUn_JTFH01001127v1_decoy 0 1284 Decoy chrUn_JTFH01001128v1_decoy 0 1282 Decoy chrUn_JTFH01001129v1_decoy 0 1281 Decoy chrUn_JTFH01001130v1_decoy 0 1280 Decoy chrUn_JTFH01001131v1_decoy 0 1279 Decoy chrUn_JTFH01001132v1_decoy 0 1272 Decoy chrUn_JTFH01001133v1_decoy 0 1267 Decoy chrUn_JTFH01001134v1_decoy 0 1267 Decoy chrUn_JTFH01001135v1_decoy 0 1266 Decoy chrUn_JTFH01001136v1_decoy 0 1264 Decoy chrUn_JTFH01001137v1_decoy 0 1264 Decoy chrUn_JTFH01001138v1_decoy 0 1264 Decoy chrUn_JTFH01001139v1_decoy 0 1263 Decoy chrUn_JTFH01001140v1_decoy 0 1249 Decoy chrUn_JTFH01001141v1_decoy 0 1240 Decoy chrUn_JTFH01001142v1_decoy 0 1239 Decoy chrUn_JTFH01001143v1_decoy 0 1235 Decoy chrUn_JTFH01001144v1_decoy 0 1235 Decoy chrUn_JTFH01001145v1_decoy 0 1233 Decoy chrUn_JTFH01001146v1_decoy 0 1232 Decoy chrUn_JTFH01001147v1_decoy 0 1230 Decoy chrUn_JTFH01001148v1_decoy 0 1226 Decoy chrUn_JTFH01001149v1_decoy 0 1223 Decoy chrUn_JTFH01001150v1_decoy 0 1214 Decoy chrUn_JTFH01001151v1_decoy 0 1213 Decoy chrUn_JTFH01001152v1_decoy 0 1211 Decoy chrUn_JTFH01001153v1_decoy 0 1209 Decoy chrUn_JTFH01001154v1_decoy 0 1202 Decoy chrUn_JTFH01001155v1_decoy 0 1199 Decoy chrUn_JTFH01001156v1_decoy 0 1197 Decoy chrUn_JTFH01001157v1_decoy 0 1193 Decoy chrUn_JTFH01001158v1_decoy 0 1191 Decoy chrUn_JTFH01001159v1_decoy 0 1187 Decoy chrUn_JTFH01001160v1_decoy 0 1186 Decoy chrUn_JTFH01001161v1_decoy 0 1184 Decoy chrUn_JTFH01001162v1_decoy 0 1184 Decoy chrUn_JTFH01001163v1_decoy 0 1182 Decoy chrUn_JTFH01001164v1_decoy 0 1179 Decoy chrUn_JTFH01001165v1_decoy 0 1173 Decoy chrUn_JTFH01001166v1_decoy 0 1169 Decoy chrUn_JTFH01001167v1_decoy 0 1167 Decoy chrUn_JTFH01001168v1_decoy 0 1166 Decoy chrUn_JTFH01001169v1_decoy 0 1165 Decoy chrUn_JTFH01001170v1_decoy 0 1164 Decoy chrUn_JTFH01001171v1_decoy 0 1163 Decoy chrUn_JTFH01001172v1_decoy 0 1158 Decoy chrUn_JTFH01001173v1_decoy 0 1158 Decoy chrUn_JTFH01001174v1_decoy 0 1157 Decoy chrUn_JTFH01001175v1_decoy 0 1157 Decoy chrUn_JTFH01001176v1_decoy 0 1157 Decoy chrUn_JTFH01001177v1_decoy 0 1155 Decoy chrUn_JTFH01001178v1_decoy 0 1154 Decoy chrUn_JTFH01001179v1_decoy 0 1149 Decoy chrUn_JTFH01001180v1_decoy 0 1148 Decoy chrUn_JTFH01001181v1_decoy 0 1148 Decoy chrUn_JTFH01001182v1_decoy 0 1146 Decoy chrUn_JTFH01001183v1_decoy 0 1144 Decoy chrUn_JTFH01001184v1_decoy 0 1140 Decoy chrUn_JTFH01001185v1_decoy 0 1136 Decoy chrUn_JTFH01001186v1_decoy 0 1134 Decoy chrUn_JTFH01001187v1_decoy 0 1133 Decoy chrUn_JTFH01001188v1_decoy 0 1129 Decoy chrUn_JTFH01001189v1_decoy 0 1127 Decoy chrUn_JTFH01001190v1_decoy 0 1127 Decoy chrUn_JTFH01001191v1_decoy 0 1118 Decoy chrUn_JTFH01001192v1_decoy 0 1110 Decoy chrUn_JTFH01001193v1_decoy 0 1104 Decoy chrUn_JTFH01001194v1_decoy 0 1104 Decoy chrUn_JTFH01001195v1_decoy 0 1101 Decoy chrUn_JTFH01001196v1_decoy 0 1098 Decoy chrUn_JTFH01001197v1_decoy 0 1096 Decoy chrUn_JTFH01001198v1_decoy 0 1094 Decoy chrUn_JTFH01001199v1_decoy 0 1091 Decoy chrUn_JTFH01001200v1_decoy 0 1089 Decoy chrUn_JTFH01001201v1_decoy 0 1086 Decoy chrUn_JTFH01001202v1_decoy 0 1085 Decoy chrUn_JTFH01001203v1_decoy 0 1084 Decoy chrUn_JTFH01001204v1_decoy 0 1083 Decoy chrUn_JTFH01001205v1_decoy 0 1083 Decoy chrUn_JTFH01001206v1_decoy 0 1079 Decoy chrUn_JTFH01001207v1_decoy 0 1076 Decoy chrUn_JTFH01001208v1_decoy 0 1069 Decoy chrUn_JTFH01001209v1_decoy 0 1068 Decoy chrUn_JTFH01001210v1_decoy 0 1067 Decoy chrUn_JTFH01001211v1_decoy 0 1067 Decoy chrUn_JTFH01001212v1_decoy 0 1067 Decoy chrUn_JTFH01001213v1_decoy 0 1063 Decoy chrUn_JTFH01001214v1_decoy 0 1062 Decoy chrUn_JTFH01001215v1_decoy 0 1059 Decoy chrUn_JTFH01001216v1_decoy 0 1058 Decoy chrUn_JTFH01001217v1_decoy 0 1058 Decoy chrUn_JTFH01001218v1_decoy 0 1055 Decoy chrUn_JTFH01001219v1_decoy 0 1054 Decoy chrUn_JTFH01001220v1_decoy 0 1054 Decoy chrUn_JTFH01001221v1_decoy 0 1053 Decoy chrUn_JTFH01001222v1_decoy 0 1053 Decoy chrUn_JTFH01001223v1_decoy 0 1052 Decoy chrUn_JTFH01001224v1_decoy 0 1051 Decoy chrUn_JTFH01001225v1_decoy 0 1049 Decoy chrUn_JTFH01001226v1_decoy 0 1047 Decoy chrUn_JTFH01001227v1_decoy 0 1044 Decoy chrUn_JTFH01001228v1_decoy 0 1043 Decoy chrUn_JTFH01001229v1_decoy 0 1043 Decoy chrUn_JTFH01001230v1_decoy 0 1042 Decoy chrUn_JTFH01001231v1_decoy 0 1042 Decoy chrUn_JTFH01001232v1_decoy 0 1041 Decoy chrUn_JTFH01001233v1_decoy 0 1040 Decoy chrUn_JTFH01001234v1_decoy 0 1039 Decoy chrUn_JTFH01001235v1_decoy 0 1038 Decoy chrUn_JTFH01001236v1_decoy 0 1037 Decoy chrUn_JTFH01001237v1_decoy 0 1037 Decoy chrUn_JTFH01001238v1_decoy 0 1035 Decoy chrUn_JTFH01001239v1_decoy 0 1027 Decoy chrUn_JTFH01001240v1_decoy 0 1021 Decoy chrUn_JTFH01001241v1_decoy 0 1021 Decoy chrUn_JTFH01001242v1_decoy 0 1019 Decoy chrUn_JTFH01001243v1_decoy 0 1019 Decoy chrUn_JTFH01001244v1_decoy 0 1016 Decoy chrUn_JTFH01001245v1_decoy 0 1014 Decoy chrUn_JTFH01001246v1_decoy 0 1013 Decoy chrUn_JTFH01001247v1_decoy 0 1009 Decoy chrUn_JTFH01001248v1_decoy 0 1008 Decoy chrUn_JTFH01001249v1_decoy 0 1007 Decoy chrUn_JTFH01001250v1_decoy 0 1004 Decoy chrUn_JTFH01001251v1_decoy 0 1004 Decoy chrUn_JTFH01001252v1_decoy 0 1003 Decoy chrUn_JTFH01001253v1_decoy 0 1001 Decoy chrUn_JTFH01001254v1_decoy 0 1000 Decoy chrUn_JTFH01001255v1_decoy 0 1000 Decoy chrUn_JTFH01001256v1_decoy 0 1000 Decoy chrUn_JTFH01001257v1_decoy 0 17929 Decoy chrUn_JTFH01001258v1_decoy 0 9749 Decoy chrUn_JTFH01001259v1_decoy 0 8053 Decoy chrUn_JTFH01001260v1_decoy 0 7826 Decoy chrUn_JTFH01001261v1_decoy 0 7768 Decoy chrUn_JTFH01001262v1_decoy 0 5691 Decoy chrUn_JTFH01001263v1_decoy 0 5444 Decoy chrUn_JTFH01001264v1_decoy 0 5077 Decoy chrUn_JTFH01001265v1_decoy 0 4990 Decoy chrUn_JTFH01001266v1_decoy 0 4545 Decoy chrUn_JTFH01001267v1_decoy 0 4544 Decoy chrUn_JTFH01001268v1_decoy 0 4202 Decoy chrUn_JTFH01001269v1_decoy 0 4195 Decoy chrUn_JTFH01001270v1_decoy 0 3807 Decoy chrUn_JTFH01001271v1_decoy 0 3741 Decoy chrUn_JTFH01001272v1_decoy 0 3699 Decoy chrUn_JTFH01001273v1_decoy 0 3640 Decoy chrUn_JTFH01001274v1_decoy 0 3531 Decoy chrUn_JTFH01001275v1_decoy 0 3455 Decoy chrUn_JTFH01001276v1_decoy 0 3411 Decoy chrUn_JTFH01001277v1_decoy 0 3387 Decoy chrUn_JTFH01001278v1_decoy 0 3358 Decoy chrUn_JTFH01001279v1_decoy 0 3285 Decoy chrUn_JTFH01001280v1_decoy 0 3273 Decoy chrUn_JTFH01001281v1_decoy 0 3262 Decoy chrUn_JTFH01001282v1_decoy 0 3259 Decoy chrUn_JTFH01001283v1_decoy 0 3222 Decoy chrUn_JTFH01001284v1_decoy 0 3127 Decoy chrUn_JTFH01001285v1_decoy 0 3110 Decoy chrUn_JTFH01001286v1_decoy 0 3104 Decoy chrUn_JTFH01001287v1_decoy 0 3071 Decoy chrUn_JTFH01001288v1_decoy 0 3063 Decoy chrUn_JTFH01001289v1_decoy 0 3059 Decoy chrUn_JTFH01001290v1_decoy 0 2990 Decoy chrUn_JTFH01001291v1_decoy 0 2986 Decoy chrUn_JTFH01001292v1_decoy 0 2928 Decoy chrUn_JTFH01001293v1_decoy 0 2922 Decoy chrUn_JTFH01001294v1_decoy 0 2875 Decoy chrUn_JTFH01001295v1_decoy 0 2859 Decoy chrUn_JTFH01001296v1_decoy 0 2850 Decoy chrUn_JTFH01001297v1_decoy 0 2813 Decoy chrUn_JTFH01001298v1_decoy 0 2785 Decoy chrUn_JTFH01001299v1_decoy 0 2736 Decoy chrUn_JTFH01001300v1_decoy 0 2688 Decoy chrUn_JTFH01001301v1_decoy 0 2658 Decoy chrUn_JTFH01001302v1_decoy 0 2643 Decoy chrUn_JTFH01001303v1_decoy 0 2618 Decoy chrUn_JTFH01001304v1_decoy 0 2605 Decoy chrUn_JTFH01001305v1_decoy 0 2583 Decoy chrUn_JTFH01001306v1_decoy 0 2534 Decoy chrUn_JTFH01001307v1_decoy 0 2512 Decoy chrUn_JTFH01001308v1_decoy 0 2500 Decoy chrUn_JTFH01001309v1_decoy 0 2481 Decoy chrUn_JTFH01001310v1_decoy 0 2478 Decoy chrUn_JTFH01001311v1_decoy 0 2473 Decoy chrUn_JTFH01001312v1_decoy 0 2467 Decoy chrUn_JTFH01001313v1_decoy 0 2442 Decoy chrUn_JTFH01001314v1_decoy 0 2430 Decoy chrUn_JTFH01001315v1_decoy 0 2417 Decoy chrUn_JTFH01001316v1_decoy 0 2408 Decoy chrUn_JTFH01001317v1_decoy 0 2395 Decoy chrUn_JTFH01001318v1_decoy 0 2352 Decoy chrUn_JTFH01001319v1_decoy 0 2337 Decoy chrUn_JTFH01001320v1_decoy 0 2322 Decoy chrUn_JTFH01001321v1_decoy 0 2307 Decoy chrUn_JTFH01001322v1_decoy 0 2306 Decoy chrUn_JTFH01001323v1_decoy 0 2292 Decoy chrUn_JTFH01001324v1_decoy 0 2271 Decoy chrUn_JTFH01001325v1_decoy 0 2265 Decoy chrUn_JTFH01001326v1_decoy 0 2260 Decoy chrUn_JTFH01001327v1_decoy 0 2240 Decoy chrUn_JTFH01001328v1_decoy 0 2238 Decoy chrUn_JTFH01001329v1_decoy 0 2228 Decoy chrUn_JTFH01001330v1_decoy 0 2215 Decoy chrUn_JTFH01001331v1_decoy 0 2205 Decoy chrUn_JTFH01001332v1_decoy 0 2191 Decoy chrUn_JTFH01001333v1_decoy 0 2191 Decoy chrUn_JTFH01001334v1_decoy 0 2190 Decoy chrUn_JTFH01001335v1_decoy 0 2184 Decoy chrUn_JTFH01001336v1_decoy 0 2166 Decoy chrUn_JTFH01001337v1_decoy 0 2165 Decoy chrUn_JTFH01001338v1_decoy 0 2162 Decoy chrUn_JTFH01001339v1_decoy 0 2146 Decoy chrUn_JTFH01001340v1_decoy 0 2116 Decoy chrUn_JTFH01001341v1_decoy 0 2112 Decoy chrUn_JTFH01001342v1_decoy 0 2108 Decoy chrUn_JTFH01001343v1_decoy 0 2106 Decoy chrUn_JTFH01001344v1_decoy 0 2106 Decoy chrUn_JTFH01001345v1_decoy 0 2106 Decoy chrUn_JTFH01001346v1_decoy 0 2097 Decoy chrUn_JTFH01001347v1_decoy 0 2081 Decoy chrUn_JTFH01001348v1_decoy 0 2058 Decoy chrUn_JTFH01001349v1_decoy 0 2055 Decoy chrUn_JTFH01001350v1_decoy 0 2054 Decoy chrUn_JTFH01001351v1_decoy 0 2037 Decoy chrUn_JTFH01001352v1_decoy 0 2032 Decoy chrUn_JTFH01001353v1_decoy 0 2032 Decoy chrUn_JTFH01001354v1_decoy 0 2020 Decoy chrUn_JTFH01001355v1_decoy 0 2018 Decoy chrUn_JTFH01001356v1_decoy 0 2014 Decoy chrUn_JTFH01001357v1_decoy 0 2001 Decoy chrUn_JTFH01001358v1_decoy 0 2001 Decoy chrUn_JTFH01001359v1_decoy 0 1991 Decoy chrUn_JTFH01001360v1_decoy 0 1990 Decoy chrUn_JTFH01001361v1_decoy 0 1983 Decoy chrUn_JTFH01001362v1_decoy 0 1981 Decoy chrUn_JTFH01001363v1_decoy 0 1981 Decoy chrUn_JTFH01001364v1_decoy 0 1979 Decoy chrUn_JTFH01001365v1_decoy 0 1963 Decoy chrUn_JTFH01001366v1_decoy 0 1932 Decoy chrUn_JTFH01001367v1_decoy 0 1929 Decoy chrUn_JTFH01001368v1_decoy 0 1881 Decoy chrUn_JTFH01001369v1_decoy 0 1874 Decoy chrUn_JTFH01001370v1_decoy 0 1849 Decoy chrUn_JTFH01001371v1_decoy 0 1849 Decoy chrUn_JTFH01001372v1_decoy 0 1833 Decoy chrUn_JTFH01001373v1_decoy 0 1832 Decoy chrUn_JTFH01001374v1_decoy 0 1826 Decoy chrUn_JTFH01001375v1_decoy 0 1814 Decoy chrUn_JTFH01001376v1_decoy 0 1814 Decoy chrUn_JTFH01001377v1_decoy 0 1791 Decoy chrUn_JTFH01001378v1_decoy 0 1789 Decoy chrUn_JTFH01001379v1_decoy 0 1786 Decoy chrUn_JTFH01001380v1_decoy 0 1778 Decoy chrUn_JTFH01001381v1_decoy 0 1776 Decoy chrUn_JTFH01001382v1_decoy 0 1762 Decoy chrUn_JTFH01001383v1_decoy 0 1758 Decoy chrUn_JTFH01001384v1_decoy 0 1757 Decoy chrUn_JTFH01001385v1_decoy 0 1754 Decoy chrUn_JTFH01001386v1_decoy 0 1752 Decoy chrUn_JTFH01001387v1_decoy 0 1751 Decoy chrUn_JTFH01001388v1_decoy 0 1749 Decoy chrUn_JTFH01001389v1_decoy 0 1738 Decoy chrUn_JTFH01001390v1_decoy 0 1729 Decoy chrUn_JTFH01001391v1_decoy 0 1726 Decoy chrUn_JTFH01001392v1_decoy 0 1716 Decoy chrUn_JTFH01001393v1_decoy 0 1712 Decoy chrUn_JTFH01001394v1_decoy 0 1711 Decoy chrUn_JTFH01001395v1_decoy 0 1703 Decoy chrUn_JTFH01001396v1_decoy 0 1702 Decoy chrUn_JTFH01001397v1_decoy 0 1699 Decoy chrUn_JTFH01001398v1_decoy 0 1686 Decoy chrUn_JTFH01001399v1_decoy 0 1684 Decoy chrUn_JTFH01001400v1_decoy 0 1680 Decoy chrUn_JTFH01001401v1_decoy 0 1678 Decoy chrUn_JTFH01001402v1_decoy 0 1678 Decoy chrUn_JTFH01001403v1_decoy 0 1677 Decoy chrUn_JTFH01001404v1_decoy 0 1676 Decoy chrUn_JTFH01001405v1_decoy 0 1672 Decoy chrUn_JTFH01001406v1_decoy 0 1669 Decoy chrUn_JTFH01001407v1_decoy 0 1668 Decoy chrUn_JTFH01001408v1_decoy 0 1663 Decoy chrUn_JTFH01001409v1_decoy 0 1660 Decoy chrUn_JTFH01001410v1_decoy 0 1660 Decoy chrUn_JTFH01001411v1_decoy 0 1658 Decoy chrUn_JTFH01001412v1_decoy 0 1656 Decoy chrUn_JTFH01001413v1_decoy 0 1656 Decoy chrUn_JTFH01001414v1_decoy 0 1652 Decoy chrUn_JTFH01001415v1_decoy 0 1647 Decoy chrUn_JTFH01001416v1_decoy 0 1645 Decoy chrUn_JTFH01001417v1_decoy 0 1641 Decoy chrUn_JTFH01001418v1_decoy 0 1638 Decoy chrUn_JTFH01001419v1_decoy 0 1633 Decoy chrUn_JTFH01001420v1_decoy 0 1626 Decoy chrUn_JTFH01001421v1_decoy 0 1614 Decoy chrUn_JTFH01001422v1_decoy 0 1612 Decoy chrUn_JTFH01001423v1_decoy 0 1605 Decoy chrUn_JTFH01001424v1_decoy 0 1603 Decoy chrUn_JTFH01001425v1_decoy 0 1599 Decoy chrUn_JTFH01001426v1_decoy 0 1589 Decoy chrUn_JTFH01001427v1_decoy 0 1588 Decoy chrUn_JTFH01001428v1_decoy 0 1585 Decoy chrUn_JTFH01001429v1_decoy 0 1584 Decoy chrUn_JTFH01001430v1_decoy 0 1584 Decoy chrUn_JTFH01001431v1_decoy 0 1580 Decoy chrUn_JTFH01001432v1_decoy 0 1572 Decoy chrUn_JTFH01001433v1_decoy 0 1570 Decoy chrUn_JTFH01001434v1_decoy 0 1569 Decoy chrUn_JTFH01001435v1_decoy 0 1568 Decoy chrUn_JTFH01001436v1_decoy 0 1567 Decoy chrUn_JTFH01001437v1_decoy 0 1565 Decoy chrUn_JTFH01001438v1_decoy 0 1559 Decoy chrUn_JTFH01001439v1_decoy 0 1559 Decoy chrUn_JTFH01001440v1_decoy 0 1556 Decoy chrUn_JTFH01001441v1_decoy 0 1554 Decoy chrUn_JTFH01001442v1_decoy 0 1549 Decoy chrUn_JTFH01001443v1_decoy 0 1542 Decoy chrUn_JTFH01001444v1_decoy 0 1541 Decoy chrUn_JTFH01001445v1_decoy 0 1538 Decoy chrUn_JTFH01001446v1_decoy 0 1537 Decoy chrUn_JTFH01001447v1_decoy 0 1535 Decoy chrUn_JTFH01001448v1_decoy 0 1530 Decoy chrUn_JTFH01001449v1_decoy 0 1528 Decoy chrUn_JTFH01001450v1_decoy 0 1522 Decoy chrUn_JTFH01001451v1_decoy 0 1514 Decoy chrUn_JTFH01001452v1_decoy 0 1509 Decoy chrUn_JTFH01001453v1_decoy 0 1507 Decoy chrUn_JTFH01001454v1_decoy 0 1500 Decoy chrUn_JTFH01001455v1_decoy 0 1499 Decoy chrUn_JTFH01001456v1_decoy 0 1499 Decoy chrUn_JTFH01001457v1_decoy 0 1497 Decoy chrUn_JTFH01001458v1_decoy 0 1496 Decoy chrUn_JTFH01001459v1_decoy 0 1488 Decoy chrUn_JTFH01001460v1_decoy 0 1486 Decoy chrUn_JTFH01001461v1_decoy 0 1485 Decoy chrUn_JTFH01001462v1_decoy 0 1481 Decoy chrUn_JTFH01001463v1_decoy 0 1479 Decoy chrUn_JTFH01001464v1_decoy 0 1472 Decoy chrUn_JTFH01001465v1_decoy 0 1472 Decoy chrUn_JTFH01001466v1_decoy 0 1470 Decoy chrUn_JTFH01001467v1_decoy 0 1466 Decoy chrUn_JTFH01001468v1_decoy 0 1465 Decoy chrUn_JTFH01001469v1_decoy 0 1461 Decoy chrUn_JTFH01001470v1_decoy 0 1458 Decoy chrUn_JTFH01001471v1_decoy 0 1457 Decoy chrUn_JTFH01001472v1_decoy 0 1448 Decoy chrUn_JTFH01001473v1_decoy 0 1447 Decoy chrUn_JTFH01001474v1_decoy 0 1444 Decoy chrUn_JTFH01001475v1_decoy 0 1443 Decoy chrUn_JTFH01001476v1_decoy 0 1443 Decoy chrUn_JTFH01001477v1_decoy 0 1438 Decoy chrUn_JTFH01001478v1_decoy 0 1432 Decoy chrUn_JTFH01001479v1_decoy 0 1430 Decoy chrUn_JTFH01001480v1_decoy 0 1430 Decoy chrUn_JTFH01001481v1_decoy 0 1429 Decoy chrUn_JTFH01001482v1_decoy 0 1429 Decoy chrUn_JTFH01001483v1_decoy 0 1429 Decoy chrUn_JTFH01001484v1_decoy 0 1426 Decoy chrUn_JTFH01001485v1_decoy 0 1426 Decoy chrUn_JTFH01001486v1_decoy 0 1420 Decoy chrUn_JTFH01001487v1_decoy 0 1416 Decoy chrUn_JTFH01001488v1_decoy 0 1416 Decoy chrUn_JTFH01001489v1_decoy 0 1415 Decoy chrUn_JTFH01001490v1_decoy 0 1415 Decoy chrUn_JTFH01001491v1_decoy 0 1414 Decoy chrUn_JTFH01001492v1_decoy 0 1413 Decoy chrUn_JTFH01001493v1_decoy 0 1410 Decoy chrUn_JTFH01001494v1_decoy 0 1405 Decoy chrUn_JTFH01001495v1_decoy 0 1402 Decoy chrUn_JTFH01001496v1_decoy 0 1398 Decoy chrUn_JTFH01001497v1_decoy 0 1397 Decoy chrUn_JTFH01001498v1_decoy 0 1395 Decoy chrUn_JTFH01001499v1_decoy 0 1392 Decoy chrUn_JTFH01001500v1_decoy 0 1388 Decoy chrUn_JTFH01001501v1_decoy 0 1386 Decoy chrUn_JTFH01001502v1_decoy 0 1382 Decoy chrUn_JTFH01001503v1_decoy 0 1381 Decoy chrUn_JTFH01001504v1_decoy 0 1379 Decoy chrUn_JTFH01001505v1_decoy 0 1376 Decoy chrUn_JTFH01001506v1_decoy 0 1374 Decoy chrUn_JTFH01001507v1_decoy 0 1374 Decoy chrUn_JTFH01001508v1_decoy 0 1373 Decoy chrUn_JTFH01001509v1_decoy 0 1373 Decoy chrUn_JTFH01001510v1_decoy 0 1372 Decoy chrUn_JTFH01001511v1_decoy 0 1370 Decoy chrUn_JTFH01001512v1_decoy 0 1367 Decoy chrUn_JTFH01001513v1_decoy 0 1365 Decoy chrUn_JTFH01001514v1_decoy 0 1364 Decoy chrUn_JTFH01001515v1_decoy 0 1361 Decoy chrUn_JTFH01001516v1_decoy 0 1361 Decoy chrUn_JTFH01001517v1_decoy 0 1355 Decoy chrUn_JTFH01001518v1_decoy 0 1355 Decoy chrUn_JTFH01001519v1_decoy 0 1354 Decoy chrUn_JTFH01001520v1_decoy 0 1353 Decoy chrUn_JTFH01001521v1_decoy 0 1349 Decoy chrUn_JTFH01001522v1_decoy 0 1345 Decoy chrUn_JTFH01001523v1_decoy 0 1344 Decoy chrUn_JTFH01001524v1_decoy 0 1343 Decoy chrUn_JTFH01001525v1_decoy 0 1338 Decoy chrUn_JTFH01001526v1_decoy 0 1338 Decoy chrUn_JTFH01001527v1_decoy 0 1338 Decoy chrUn_JTFH01001528v1_decoy 0 1336 Decoy chrUn_JTFH01001529v1_decoy 0 1333 Decoy chrUn_JTFH01001530v1_decoy 0 1333 Decoy chrUn_JTFH01001531v1_decoy 0 1332 Decoy chrUn_JTFH01001532v1_decoy 0 1324 Decoy chrUn_JTFH01001533v1_decoy 0 1323 Decoy chrUn_JTFH01001534v1_decoy 0 1323 Decoy chrUn_JTFH01001535v1_decoy 0 1320 Decoy chrUn_JTFH01001536v1_decoy 0 1320 Decoy chrUn_JTFH01001537v1_decoy 0 1317 Decoy chrUn_JTFH01001538v1_decoy 0 1316 Decoy chrUn_JTFH01001539v1_decoy 0 1304 Decoy chrUn_JTFH01001540v1_decoy 0 1304 Decoy chrUn_JTFH01001541v1_decoy 0 1303 Decoy chrUn_JTFH01001542v1_decoy 0 1302 Decoy chrUn_JTFH01001543v1_decoy 0 1301 Decoy chrUn_JTFH01001544v1_decoy 0 1300 Decoy chrUn_JTFH01001545v1_decoy 0 1298 Decoy chrUn_JTFH01001546v1_decoy 0 1297 Decoy chrUn_JTFH01001547v1_decoy 0 1295 Decoy chrUn_JTFH01001548v1_decoy 0 1284 Decoy chrUn_JTFH01001549v1_decoy 0 1283 Decoy chrUn_JTFH01001550v1_decoy 0 1283 Decoy chrUn_JTFH01001551v1_decoy 0 1279 Decoy chrUn_JTFH01001552v1_decoy 0 1278 Decoy chrUn_JTFH01001553v1_decoy 0 1271 Decoy chrUn_JTFH01001554v1_decoy 0 1271 Decoy chrUn_JTFH01001555v1_decoy 0 1268 Decoy chrUn_JTFH01001556v1_decoy 0 1264 Decoy chrUn_JTFH01001557v1_decoy 0 1263 Decoy chrUn_JTFH01001558v1_decoy 0 1262 Decoy chrUn_JTFH01001559v1_decoy 0 1261 Decoy chrUn_JTFH01001560v1_decoy 0 1260 Decoy chrUn_JTFH01001561v1_decoy 0 1259 Decoy chrUn_JTFH01001562v1_decoy 0 1259 Decoy chrUn_JTFH01001563v1_decoy 0 1258 Decoy chrUn_JTFH01001564v1_decoy 0 1256 Decoy chrUn_JTFH01001565v1_decoy 0 1253 Decoy chrUn_JTFH01001566v1_decoy 0 1248 Decoy chrUn_JTFH01001567v1_decoy 0 1248 Decoy chrUn_JTFH01001568v1_decoy 0 1246 Decoy chrUn_JTFH01001569v1_decoy 0 1246 Decoy chrUn_JTFH01001570v1_decoy 0 1244 Decoy chrUn_JTFH01001571v1_decoy 0 1238 Decoy chrUn_JTFH01001572v1_decoy 0 1238 Decoy chrUn_JTFH01001573v1_decoy 0 1236 Decoy chrUn_JTFH01001574v1_decoy 0 1234 Decoy chrUn_JTFH01001575v1_decoy 0 1234 Decoy chrUn_JTFH01001576v1_decoy 0 1231 Decoy chrUn_JTFH01001577v1_decoy 0 1231 Decoy chrUn_JTFH01001578v1_decoy 0 1230 Decoy chrUn_JTFH01001579v1_decoy 0 1230 Decoy chrUn_JTFH01001580v1_decoy 0 1228 Decoy chrUn_JTFH01001581v1_decoy 0 1227 Decoy chrUn_JTFH01001582v1_decoy 0 1222 Decoy chrUn_JTFH01001583v1_decoy 0 1222 Decoy chrUn_JTFH01001584v1_decoy 0 1221 Decoy chrUn_JTFH01001585v1_decoy 0 1221 Decoy chrUn_JTFH01001586v1_decoy 0 1220 Decoy chrUn_JTFH01001587v1_decoy 0 1218 Decoy chrUn_JTFH01001588v1_decoy 0 1218 Decoy chrUn_JTFH01001589v1_decoy 0 1216 Decoy chrUn_JTFH01001590v1_decoy 0 1216 Decoy chrUn_JTFH01001591v1_decoy 0 1212 Decoy chrUn_JTFH01001592v1_decoy 0 1210 Decoy chrUn_JTFH01001593v1_decoy 0 1209 Decoy chrUn_JTFH01001594v1_decoy 0 1208 Decoy chrUn_JTFH01001595v1_decoy 0 1208 Decoy chrUn_JTFH01001596v1_decoy 0 1206 Decoy chrUn_JTFH01001597v1_decoy 0 1205 Decoy chrUn_JTFH01001598v1_decoy 0 1205 Decoy chrUn_JTFH01001599v1_decoy 0 1202 Decoy chrUn_JTFH01001600v1_decoy 0 1200 Decoy chrUn_JTFH01001601v1_decoy 0 1199 Decoy chrUn_JTFH01001602v1_decoy 0 1198 Decoy chrUn_JTFH01001603v1_decoy 0 1198 Decoy chrUn_JTFH01001604v1_decoy 0 1198 Decoy chrUn_JTFH01001605v1_decoy 0 1195 Decoy chrUn_JTFH01001606v1_decoy 0 1194 Decoy chrUn_JTFH01001607v1_decoy 0 1191 Decoy chrUn_JTFH01001608v1_decoy 0 1189 Decoy chrUn_JTFH01001609v1_decoy 0 1188 Decoy chrUn_JTFH01001610v1_decoy 0 1180 Decoy chrUn_JTFH01001611v1_decoy 0 1180 Decoy chrUn_JTFH01001612v1_decoy 0 1179 Decoy chrUn_JTFH01001613v1_decoy 0 1172 Decoy chrUn_JTFH01001614v1_decoy 0 1168 Decoy chrUn_JTFH01001615v1_decoy 0 1166 Decoy chrUn_JTFH01001616v1_decoy 0 1157 Decoy chrUn_JTFH01001617v1_decoy 0 1156 Decoy chrUn_JTFH01001618v1_decoy 0 1156 Decoy chrUn_JTFH01001619v1_decoy 0 1155 Decoy chrUn_JTFH01001620v1_decoy 0 1154 Decoy chrUn_JTFH01001621v1_decoy 0 1154 Decoy chrUn_JTFH01001622v1_decoy 0 1149 Decoy chrUn_JTFH01001623v1_decoy 0 1143 Decoy chrUn_JTFH01001624v1_decoy 0 1143 Decoy chrUn_JTFH01001625v1_decoy 0 1140 Decoy chrUn_JTFH01001626v1_decoy 0 1137 Decoy chrUn_JTFH01001627v1_decoy 0 1135 Decoy chrUn_JTFH01001628v1_decoy 0 1135 Decoy chrUn_JTFH01001629v1_decoy 0 1135 Decoy chrUn_JTFH01001630v1_decoy 0 1127 Decoy chrUn_JTFH01001631v1_decoy 0 1127 Decoy chrUn_JTFH01001632v1_decoy 0 1126 Decoy chrUn_JTFH01001633v1_decoy 0 1123 Decoy chrUn_JTFH01001634v1_decoy 0 1123 Decoy chrUn_JTFH01001635v1_decoy 0 1123 Decoy chrUn_JTFH01001636v1_decoy 0 1122 Decoy chrUn_JTFH01001637v1_decoy 0 1122 Decoy chrUn_JTFH01001638v1_decoy 0 1121 Decoy chrUn_JTFH01001639v1_decoy 0 1121 Decoy chrUn_JTFH01001640v1_decoy 0 1119 Decoy chrUn_JTFH01001641v1_decoy 0 1119 Decoy chrUn_JTFH01001642v1_decoy 0 1119 Decoy chrUn_JTFH01001643v1_decoy 0 1118 Decoy chrUn_JTFH01001644v1_decoy 0 1115 Decoy chrUn_JTFH01001645v1_decoy 0 1106 Decoy chrUn_JTFH01001646v1_decoy 0 1106 Decoy chrUn_JTFH01001647v1_decoy 0 1104 Decoy chrUn_JTFH01001648v1_decoy 0 1102 Decoy chrUn_JTFH01001649v1_decoy 0 1101 Decoy chrUn_JTFH01001650v1_decoy 0 1098 Decoy chrUn_JTFH01001651v1_decoy 0 1098 Decoy chrUn_JTFH01001652v1_decoy 0 1096 Decoy chrUn_JTFH01001653v1_decoy 0 1096 Decoy chrUn_JTFH01001654v1_decoy 0 1095 Decoy chrUn_JTFH01001655v1_decoy 0 1093 Decoy chrUn_JTFH01001656v1_decoy 0 1090 Decoy chrUn_JTFH01001657v1_decoy 0 1089 Decoy chrUn_JTFH01001658v1_decoy 0 1087 Decoy chrUn_JTFH01001659v1_decoy 0 1087 Decoy chrUn_JTFH01001660v1_decoy 0 1085 Decoy chrUn_JTFH01001661v1_decoy 0 1085 Decoy chrUn_JTFH01001662v1_decoy 0 1085 Decoy chrUn_JTFH01001663v1_decoy 0 1083 Decoy chrUn_JTFH01001664v1_decoy 0 1080 Decoy chrUn_JTFH01001665v1_decoy 0 1080 Decoy chrUn_JTFH01001666v1_decoy 0 1079 Decoy chrUn_JTFH01001667v1_decoy 0 1079 Decoy chrUn_JTFH01001668v1_decoy 0 1079 Decoy chrUn_JTFH01001669v1_decoy 0 1075 Decoy chrUn_JTFH01001670v1_decoy 0 1074 Decoy chrUn_JTFH01001671v1_decoy 0 1073 Decoy chrUn_JTFH01001672v1_decoy 0 1070 Decoy chrUn_JTFH01001673v1_decoy 0 1068 Decoy chrUn_JTFH01001674v1_decoy 0 1067 Decoy chrUn_JTFH01001675v1_decoy 0 1066 Decoy chrUn_JTFH01001676v1_decoy 0 1066 Decoy chrUn_JTFH01001677v1_decoy 0 1066 Decoy chrUn_JTFH01001678v1_decoy 0 1063 Decoy chrUn_JTFH01001679v1_decoy 0 1063 Decoy chrUn_JTFH01001680v1_decoy 0 1063 Decoy chrUn_JTFH01001681v1_decoy 0 1062 Decoy chrUn_JTFH01001682v1_decoy 0 1058 Decoy chrUn_JTFH01001683v1_decoy 0 1056 Decoy chrUn_JTFH01001684v1_decoy 0 1052 Decoy chrUn_JTFH01001685v1_decoy 0 1051 Decoy chrUn_JTFH01001686v1_decoy 0 1051 Decoy chrUn_JTFH01001687v1_decoy 0 1050 Decoy chrUn_JTFH01001688v1_decoy 0 1048 Decoy chrUn_JTFH01001689v1_decoy 0 1046 Decoy chrUn_JTFH01001690v1_decoy 0 1046 Decoy chrUn_JTFH01001691v1_decoy 0 1045 Decoy chrUn_JTFH01001692v1_decoy 0 1043 Decoy chrUn_JTFH01001693v1_decoy 0 1038 Decoy chrUn_JTFH01001694v1_decoy 0 1036 Decoy chrUn_JTFH01001695v1_decoy 0 1035 Decoy chrUn_JTFH01001696v1_decoy 0 1035 Decoy chrUn_JTFH01001697v1_decoy 0 1035 Decoy chrUn_JTFH01001698v1_decoy 0 1033 Decoy chrUn_JTFH01001699v1_decoy 0 1032 Decoy chrUn_JTFH01001700v1_decoy 0 1031 Decoy chrUn_JTFH01001701v1_decoy 0 1026 Decoy chrUn_JTFH01001702v1_decoy 0 1026 Decoy chrUn_JTFH01001703v1_decoy 0 1026 Decoy chrUn_JTFH01001704v1_decoy 0 1023 Decoy chrUn_JTFH01001705v1_decoy 0 1022 Decoy chrUn_JTFH01001706v1_decoy 0 1020 Decoy chrUn_JTFH01001707v1_decoy 0 1020 Decoy chrUn_JTFH01001708v1_decoy 0 1020 Decoy chrUn_JTFH01001709v1_decoy 0 1019 Decoy chrUn_JTFH01001710v1_decoy 0 1018 Decoy chrUn_JTFH01001711v1_decoy 0 1018 Decoy chrUn_JTFH01001712v1_decoy 0 1017 Decoy chrUn_JTFH01001713v1_decoy 0 1015 Decoy chrUn_JTFH01001714v1_decoy 0 1015 Decoy chrUn_JTFH01001715v1_decoy 0 1015 Decoy chrUn_JTFH01001716v1_decoy 0 1014 Decoy chrUn_JTFH01001717v1_decoy 0 1014 Decoy chrUn_JTFH01001718v1_decoy 0 1013 Decoy chrUn_JTFH01001719v1_decoy 0 1013 Decoy chrUn_JTFH01001720v1_decoy 0 1013 Decoy chrUn_JTFH01001721v1_decoy 0 1012 Decoy chrUn_JTFH01001722v1_decoy 0 1011 Decoy chrUn_JTFH01001723v1_decoy 0 1011 Decoy chrUn_JTFH01001724v1_decoy 0 1009 Decoy chrUn_JTFH01001725v1_decoy 0 1008 Decoy chrUn_JTFH01001726v1_decoy 0 1008 Decoy chrUn_JTFH01001727v1_decoy 0 1007 Decoy chrUn_JTFH01001728v1_decoy 0 1007 Decoy chrUn_JTFH01001729v1_decoy 0 1007 Decoy chrUn_JTFH01001730v1_decoy 0 1006 Decoy chrUn_JTFH01001731v1_decoy 0 1005 Decoy chrUn_JTFH01001732v1_decoy 0 1003 Decoy chrUn_JTFH01001733v1_decoy 0 1001 Decoy chrUn_JTFH01001734v1_decoy 0 1000 Decoy chrUn_JTFH01001735v1_decoy 0 19311 Decoy chrUn_JTFH01001736v1_decoy 0 11713 Decoy chrUn_JTFH01001737v1_decoy 0 11263 Decoy chrUn_JTFH01001738v1_decoy 0 9779 Decoy chrUn_JTFH01001739v1_decoy 0 9568 Decoy chrUn_JTFH01001740v1_decoy 0 9344 Decoy chrUn_JTFH01001741v1_decoy 0 9188 Decoy chrUn_JTFH01001742v1_decoy 0 9100 Decoy chrUn_JTFH01001743v1_decoy 0 8771 Decoy chrUn_JTFH01001744v1_decoy 0 8690 Decoy chrUn_JTFH01001745v1_decoy 0 8566 Decoy chrUn_JTFH01001746v1_decoy 0 8058 Decoy chrUn_JTFH01001747v1_decoy 0 7759 Decoy chrUn_JTFH01001748v1_decoy 0 7585 Decoy chrUn_JTFH01001749v1_decoy 0 7471 Decoy chrUn_JTFH01001750v1_decoy 0 7461 Decoy chrUn_JTFH01001751v1_decoy 0 7342 Decoy chrUn_JTFH01001752v1_decoy 0 7223 Decoy chrUn_JTFH01001753v1_decoy 0 7064 Decoy chrUn_JTFH01001754v1_decoy 0 6916 Decoy chrUn_JTFH01001755v1_decoy 0 6897 Decoy chrUn_JTFH01001756v1_decoy 0 6880 Decoy chrUn_JTFH01001757v1_decoy 0 6857 Decoy chrUn_JTFH01001758v1_decoy 0 6840 Decoy chrUn_JTFH01001759v1_decoy 0 6728 Decoy chrUn_JTFH01001760v1_decoy 0 6688 Decoy chrUn_JTFH01001761v1_decoy 0 6553 Decoy chrUn_JTFH01001762v1_decoy 0 6396 Decoy chrUn_JTFH01001763v1_decoy 0 6345 Decoy chrUn_JTFH01001764v1_decoy 0 6295 Decoy chrUn_JTFH01001765v1_decoy 0 6266 Decoy chrUn_JTFH01001766v1_decoy 0 6173 Decoy chrUn_JTFH01001767v1_decoy 0 6171 Decoy chrUn_JTFH01001768v1_decoy 0 6120 Decoy chrUn_JTFH01001769v1_decoy 0 6105 Decoy chrUn_JTFH01001770v1_decoy 0 6099 Decoy chrUn_JTFH01001771v1_decoy 0 5893 Decoy chrUn_JTFH01001772v1_decoy 0 5829 Decoy chrUn_JTFH01001773v1_decoy 0 5793 Decoy chrUn_JTFH01001774v1_decoy 0 5776 Decoy chrUn_JTFH01001775v1_decoy 0 5759 Decoy chrUn_JTFH01001776v1_decoy 0 5716 Decoy chrUn_JTFH01001777v1_decoy 0 5708 Decoy chrUn_JTFH01001778v1_decoy 0 5590 Decoy chrUn_JTFH01001779v1_decoy 0 5566 Decoy chrUn_JTFH01001780v1_decoy 0 5558 Decoy chrUn_JTFH01001781v1_decoy 0 5418 Decoy chrUn_JTFH01001782v1_decoy 0 5375 Decoy chrUn_JTFH01001783v1_decoy 0 5300 Decoy chrUn_JTFH01001784v1_decoy 0 5255 Decoy chrUn_JTFH01001785v1_decoy 0 5157 Decoy chrUn_JTFH01001786v1_decoy 0 5130 Decoy chrUn_JTFH01001787v1_decoy 0 4978 Decoy chrUn_JTFH01001788v1_decoy 0 4957 Decoy chrUn_JTFH01001789v1_decoy 0 4947 Decoy chrUn_JTFH01001790v1_decoy 0 4897 Decoy chrUn_JTFH01001791v1_decoy 0 4867 Decoy chrUn_JTFH01001792v1_decoy 0 4845 Decoy chrUn_JTFH01001793v1_decoy 0 4678 Decoy chrUn_JTFH01001794v1_decoy 0 4641 Decoy chrUn_JTFH01001795v1_decoy 0 4592 Decoy chrUn_JTFH01001796v1_decoy 0 4543 Decoy chrUn_JTFH01001797v1_decoy 0 4532 Decoy chrUn_JTFH01001798v1_decoy 0 4503 Decoy chrUn_JTFH01001799v1_decoy 0 4495 Decoy chrUn_JTFH01001800v1_decoy 0 4444 Decoy chrUn_JTFH01001801v1_decoy 0 4414 Decoy chrUn_JTFH01001802v1_decoy 0 4409 Decoy chrUn_JTFH01001803v1_decoy 0 4302 Decoy chrUn_JTFH01001804v1_decoy 0 4300 Decoy chrUn_JTFH01001805v1_decoy 0 4277 Decoy chrUn_JTFH01001806v1_decoy 0 4173 Decoy chrUn_JTFH01001807v1_decoy 0 4169 Decoy chrUn_JTFH01001808v1_decoy 0 4136 Decoy chrUn_JTFH01001809v1_decoy 0 4101 Decoy chrUn_JTFH01001810v1_decoy 0 4089 Decoy chrUn_JTFH01001811v1_decoy 0 4015 Decoy chrUn_JTFH01001812v1_decoy 0 4000 Decoy chrUn_JTFH01001813v1_decoy 0 3973 Decoy chrUn_JTFH01001814v1_decoy 0 3732 Decoy chrUn_JTFH01001815v1_decoy 0 3709 Decoy chrUn_JTFH01001816v1_decoy 0 3686 Decoy chrUn_JTFH01001817v1_decoy 0 3676 Decoy chrUn_JTFH01001818v1_decoy 0 3673 Decoy chrUn_JTFH01001819v1_decoy 0 3672 Decoy chrUn_JTFH01001820v1_decoy 0 3633 Decoy chrUn_JTFH01001821v1_decoy 0 3633 Decoy chrUn_JTFH01001822v1_decoy 0 3613 Decoy chrUn_JTFH01001823v1_decoy 0 3605 Decoy chrUn_JTFH01001824v1_decoy 0 3592 Decoy chrUn_JTFH01001825v1_decoy 0 3586 Decoy chrUn_JTFH01001826v1_decoy 0 3584 Decoy chrUn_JTFH01001827v1_decoy 0 3577 Decoy chrUn_JTFH01001828v1_decoy 0 3537 Decoy chrUn_JTFH01001829v1_decoy 0 3510 Decoy chrUn_JTFH01001830v1_decoy 0 3509 Decoy chrUn_JTFH01001831v1_decoy 0 3488 Decoy chrUn_JTFH01001832v1_decoy 0 3473 Decoy chrUn_JTFH01001833v1_decoy 0 3445 Decoy chrUn_JTFH01001834v1_decoy 0 3427 Decoy chrUn_JTFH01001835v1_decoy 0 3395 Decoy chrUn_JTFH01001836v1_decoy 0 3367 Decoy chrUn_JTFH01001837v1_decoy 0 3337 Decoy chrUn_JTFH01001838v1_decoy 0 3324 Decoy chrUn_JTFH01001839v1_decoy 0 3315 Decoy chrUn_JTFH01001840v1_decoy 0 3313 Decoy chrUn_JTFH01001841v1_decoy 0 3283 Decoy chrUn_JTFH01001842v1_decoy 0 3250 Decoy chrUn_JTFH01001843v1_decoy 0 3247 Decoy chrUn_JTFH01001844v1_decoy 0 3237 Decoy chrUn_JTFH01001845v1_decoy 0 3235 Decoy chrUn_JTFH01001846v1_decoy 0 3200 Decoy chrUn_JTFH01001847v1_decoy 0 3195 Decoy chrUn_JTFH01001848v1_decoy 0 3175 Decoy chrUn_JTFH01001849v1_decoy 0 3158 Decoy chrUn_JTFH01001850v1_decoy 0 3143 Decoy chrUn_JTFH01001851v1_decoy 0 3139 Decoy chrUn_JTFH01001852v1_decoy 0 3138 Decoy chrUn_JTFH01001853v1_decoy 0 3136 Decoy chrUn_JTFH01001854v1_decoy 0 3132 Decoy chrUn_JTFH01001855v1_decoy 0 3132 Decoy chrUn_JTFH01001856v1_decoy 0 3095 Decoy chrUn_JTFH01001857v1_decoy 0 3094 Decoy chrUn_JTFH01001858v1_decoy 0 3093 Decoy chrUn_JTFH01001859v1_decoy 0 3059 Decoy chrUn_JTFH01001860v1_decoy 0 2985 Decoy chrUn_JTFH01001861v1_decoy 0 2975 Decoy chrUn_JTFH01001862v1_decoy 0 2967 Decoy chrUn_JTFH01001863v1_decoy 0 2961 Decoy chrUn_JTFH01001864v1_decoy 0 2955 Decoy chrUn_JTFH01001865v1_decoy 0 2935 Decoy chrUn_JTFH01001866v1_decoy 0 2933 Decoy chrUn_JTFH01001867v1_decoy 0 2909 Decoy chrUn_JTFH01001868v1_decoy 0 2904 Decoy chrUn_JTFH01001869v1_decoy 0 2892 Decoy chrUn_JTFH01001870v1_decoy 0 2886 Decoy chrUn_JTFH01001871v1_decoy 0 2885 Decoy chrUn_JTFH01001872v1_decoy 0 2878 Decoy chrUn_JTFH01001873v1_decoy 0 2875 Decoy chrUn_JTFH01001874v1_decoy 0 2861 Decoy chrUn_JTFH01001875v1_decoy 0 2856 Decoy chrUn_JTFH01001876v1_decoy 0 2838 Decoy chrUn_JTFH01001877v1_decoy 0 2801 Decoy chrUn_JTFH01001878v1_decoy 0 2797 Decoy chrUn_JTFH01001879v1_decoy 0 2788 Decoy chrUn_JTFH01001880v1_decoy 0 2773 Decoy chrUn_JTFH01001881v1_decoy 0 2755 Decoy chrUn_JTFH01001882v1_decoy 0 2754 Decoy chrUn_JTFH01001883v1_decoy 0 2743 Decoy chrUn_JTFH01001884v1_decoy 0 2725 Decoy chrUn_JTFH01001885v1_decoy 0 2722 Decoy chrUn_JTFH01001886v1_decoy 0 2682 Decoy chrUn_JTFH01001887v1_decoy 0 2669 Decoy chrUn_JTFH01001888v1_decoy 0 2663 Decoy chrUn_JTFH01001889v1_decoy 0 2652 Decoy chrUn_JTFH01001890v1_decoy 0 2647 Decoy chrUn_JTFH01001891v1_decoy 0 2635 Decoy chrUn_JTFH01001892v1_decoy 0 2633 Decoy chrUn_JTFH01001893v1_decoy 0 2629 Decoy chrUn_JTFH01001894v1_decoy 0 2612 Decoy chrUn_JTFH01001895v1_decoy 0 2599 Decoy chrUn_JTFH01001896v1_decoy 0 2566 Decoy chrUn_JTFH01001897v1_decoy 0 2556 Decoy chrUn_JTFH01001898v1_decoy 0 2551 Decoy chrUn_JTFH01001899v1_decoy 0 2551 Decoy chrUn_JTFH01001900v1_decoy 0 2538 Decoy chrUn_JTFH01001901v1_decoy 0 2538 Decoy chrUn_JTFH01001902v1_decoy 0 2525 Decoy chrUn_JTFH01001903v1_decoy 0 2498 Decoy chrUn_JTFH01001904v1_decoy 0 2496 Decoy chrUn_JTFH01001905v1_decoy 0 2483 Decoy chrUn_JTFH01001906v1_decoy 0 2475 Decoy chrUn_JTFH01001907v1_decoy 0 2469 Decoy chrUn_JTFH01001908v1_decoy 0 2455 Decoy chrUn_JTFH01001909v1_decoy 0 2444 Decoy chrUn_JTFH01001910v1_decoy 0 2437 Decoy chrUn_JTFH01001911v1_decoy 0 2435 Decoy chrUn_JTFH01001912v1_decoy 0 2427 Decoy chrUn_JTFH01001913v1_decoy 0 2419 Decoy chrUn_JTFH01001914v1_decoy 0 2413 Decoy chrUn_JTFH01001915v1_decoy 0 2412 Decoy chrUn_JTFH01001916v1_decoy 0 2400 Decoy chrUn_JTFH01001917v1_decoy 0 2399 Decoy chrUn_JTFH01001918v1_decoy 0 2396 Decoy chrUn_JTFH01001919v1_decoy 0 2393 Decoy chrUn_JTFH01001920v1_decoy 0 2386 Decoy chrUn_JTFH01001921v1_decoy 0 2384 Decoy chrUn_JTFH01001922v1_decoy 0 2382 Decoy chrUn_JTFH01001923v1_decoy 0 2382 Decoy chrUn_JTFH01001924v1_decoy 0 2367 Decoy chrUn_JTFH01001925v1_decoy 0 2366 Decoy chrUn_JTFH01001926v1_decoy 0 2362 Decoy chrUn_JTFH01001927v1_decoy 0 2361 Decoy chrUn_JTFH01001928v1_decoy 0 2353 Decoy chrUn_JTFH01001929v1_decoy 0 2349 Decoy chrUn_JTFH01001930v1_decoy 0 2348 Decoy chrUn_JTFH01001931v1_decoy 0 2340 Decoy chrUn_JTFH01001932v1_decoy 0 2339 Decoy chrUn_JTFH01001933v1_decoy 0 2336 Decoy chrUn_JTFH01001934v1_decoy 0 2333 Decoy chrUn_JTFH01001935v1_decoy 0 2330 Decoy chrUn_JTFH01001936v1_decoy 0 2327 Decoy chrUn_JTFH01001937v1_decoy 0 2318 Decoy chrUn_JTFH01001938v1_decoy 0 2293 Decoy chrUn_JTFH01001939v1_decoy 0 2292 Decoy chrUn_JTFH01001940v1_decoy 0 2287 Decoy chrUn_JTFH01001941v1_decoy 0 2274 Decoy chrUn_JTFH01001942v1_decoy 0 2274 Decoy chrUn_JTFH01001943v1_decoy 0 2267 Decoy chrUn_JTFH01001944v1_decoy 0 2260 Decoy chrUn_JTFH01001945v1_decoy 0 2257 Decoy chrUn_JTFH01001946v1_decoy 0 2240 Decoy chrUn_JTFH01001947v1_decoy 0 2239 Decoy chrUn_JTFH01001948v1_decoy 0 2232 Decoy chrUn_JTFH01001949v1_decoy 0 2230 Decoy chrUn_JTFH01001950v1_decoy 0 2230 Decoy chrUn_JTFH01001951v1_decoy 0 2222 Decoy chrUn_JTFH01001952v1_decoy 0 2216 Decoy chrUn_JTFH01001953v1_decoy 0 2214 Decoy chrUn_JTFH01001954v1_decoy 0 2210 Decoy chrUn_JTFH01001955v1_decoy 0 2203 Decoy chrUn_JTFH01001956v1_decoy 0 2197 Decoy chrUn_JTFH01001957v1_decoy 0 2196 Decoy chrUn_JTFH01001958v1_decoy 0 2196 Decoy chrUn_JTFH01001959v1_decoy 0 2179 Decoy chrUn_JTFH01001960v1_decoy 0 2178 Decoy chrUn_JTFH01001961v1_decoy 0 2178 Decoy chrUn_JTFH01001962v1_decoy 0 2172 Decoy chrUn_JTFH01001963v1_decoy 0 2170 Decoy chrUn_JTFH01001964v1_decoy 0 2167 Decoy chrUn_JTFH01001965v1_decoy 0 2167 Decoy chrUn_JTFH01001966v1_decoy 0 2157 Decoy chrUn_JTFH01001967v1_decoy 0 2153 Decoy chrUn_JTFH01001968v1_decoy 0 2151 Decoy chrUn_JTFH01001969v1_decoy 0 2147 Decoy chrUn_JTFH01001970v1_decoy 0 2145 Decoy chrUn_JTFH01001971v1_decoy 0 2142 Decoy chrUn_JTFH01001972v1_decoy 0 2142 Decoy chrUn_JTFH01001973v1_decoy 0 2136 Decoy chrUn_JTFH01001974v1_decoy 0 2130 Decoy chrUn_JTFH01001975v1_decoy 0 2128 Decoy chrUn_JTFH01001976v1_decoy 0 2126 Decoy chrUn_JTFH01001977v1_decoy 0 2126 Decoy chrUn_JTFH01001978v1_decoy 0 2119 Decoy chrUn_JTFH01001979v1_decoy 0 2107 Decoy chrUn_JTFH01001980v1_decoy 0 2091 Decoy chrUn_JTFH01001981v1_decoy 0 2087 Decoy chrUn_JTFH01001982v1_decoy 0 2086 Decoy chrUn_JTFH01001983v1_decoy 0 2083 Decoy chrUn_JTFH01001984v1_decoy 0 2075 Decoy chrUn_JTFH01001985v1_decoy 0 2075 Decoy chrUn_JTFH01001986v1_decoy 0 2072 Decoy chrUn_JTFH01001987v1_decoy 0 2068 Decoy chrUn_JTFH01001988v1_decoy 0 2067 Decoy chrUn_JTFH01001989v1_decoy 0 2055 Decoy chrUn_JTFH01001990v1_decoy 0 2051 Decoy chrUn_JTFH01001991v1_decoy 0 2050 Decoy chrUn_JTFH01001992v1_decoy 0 2033 Decoy chrUn_JTFH01001993v1_decoy 0 2024 Decoy chrUn_JTFH01001994v1_decoy 0 2016 Decoy chrUn_JTFH01001995v1_decoy 0 2011 Decoy chrUn_JTFH01001996v1_decoy 0 2009 Decoy chrUn_JTFH01001997v1_decoy 0 2003 Decoy chrUn_JTFH01001998v1_decoy 0 2001 Decoy ================================================ FILE: tracks/hg38.rmsk.simple_repeat.bed ================================================ [File too large to display: 53.5 MB] ================================================ FILE: tracks/hg38_arms_excl_centromeres.bed ================================================ chr1 0 121700000 chr1 14300000 12000000 chr1 15400000 58000000 chr1 18700000 24400000 chr1 19000000 17000000 chr1 19500000 16000000 chr1 20500000 35300000 chr1 25800000 15400000 chr1 28000000 25800000 chr1 30000000 10900000 chr1 38200000 22100000 chr1 38600000 16000000 chr1 42900000 51400000 chr1 48100000 47100000 chr1 50700000 46100000 chr1 50700000 58600000 chr1 50700000 39100000 chr1 55800000 34700000 chr1 61900000 248956422 chr1 62700000 43900000 chr1 63400000 58000000 chr1 94000000 87800000 chr1 94000000 48200000 chr1 124600000 91800000 chr2 0 121700000 chr2 14300000 12000000 chr2 15400000 58000000 chr2 18700000 24400000 chr2 19000000 17000000 chr2 19500000 16000000 chr2 20500000 35300000 chr2 25800000 15400000 chr2 28000000 25800000 chr2 30000000 10900000 chr2 38200000 22100000 chr2 38600000 16000000 chr2 42900000 51400000 chr2 48100000 47100000 chr2 50700000 46100000 chr2 50700000 58600000 chr2 50700000 39100000 chr2 55800000 34700000 chr2 61900000 242193529 chr2 62700000 43900000 chr2 63400000 58000000 chr2 94000000 87800000 chr2 94000000 48200000 chr2 124600000 91800000 chr3 0 121700000 chr3 14300000 12000000 chr3 15400000 58000000 chr3 18700000 24400000 chr3 19000000 17000000 chr3 19500000 16000000 chr3 20500000 35300000 chr3 25800000 15400000 chr3 28000000 25800000 chr3 30000000 10900000 chr3 38200000 22100000 chr3 38600000 16000000 chr3 42900000 51400000 chr3 48100000 47100000 chr3 50700000 46100000 chr3 50700000 58600000 chr3 50700000 39100000 chr3 55800000 34700000 chr3 61900000 198295559 chr3 62700000 43900000 chr3 63400000 58000000 chr3 94000000 87800000 chr3 94000000 48200000 chr3 124600000 91800000 chr4 0 121700000 chr4 14300000 12000000 chr4 15400000 58000000 chr4 18700000 24400000 chr4 19000000 17000000 chr4 19500000 16000000 chr4 20500000 35300000 chr4 25800000 15400000 chr4 28000000 25800000 chr4 30000000 10900000 chr4 38200000 22100000 chr4 38600000 16000000 chr4 42900000 51400000 chr4 48100000 47100000 chr4 50700000 46100000 chr4 50700000 58600000 chr4 50700000 39100000 chr4 55800000 34700000 chr4 61900000 190214555 chr4 62700000 43900000 chr4 63400000 58000000 chr4 94000000 87800000 chr4 94000000 48200000 chr4 124600000 91800000 chr5 0 121700000 chr5 14300000 12000000 chr5 15400000 58000000 chr5 18700000 24400000 chr5 19000000 17000000 chr5 19500000 16000000 chr5 20500000 35300000 chr5 25800000 15400000 chr5 28000000 25800000 chr5 30000000 10900000 chr5 38200000 22100000 chr5 38600000 16000000 chr5 42900000 51400000 chr5 48100000 47100000 chr5 50700000 46100000 chr5 50700000 58600000 chr5 50700000 39100000 chr5 55800000 34700000 chr5 61900000 181538259 chr5 62700000 43900000 chr5 63400000 58000000 chr5 94000000 87800000 chr5 94000000 48200000 chr5 124600000 91800000 chr6 0 121700000 chr6 14300000 12000000 chr6 15400000 58000000 chr6 18700000 24400000 chr6 19000000 17000000 chr6 19500000 16000000 chr6 20500000 35300000 chr6 25800000 15400000 chr6 28000000 25800000 chr6 30000000 10900000 chr6 38200000 22100000 chr6 38600000 16000000 chr6 42900000 51400000 chr6 48100000 47100000 chr6 50700000 46100000 chr6 50700000 58600000 chr6 50700000 39100000 chr6 55800000 34700000 chr6 61900000 170805979 chr6 62700000 43900000 chr6 63400000 58000000 chr6 94000000 87800000 chr6 94000000 48200000 chr6 124600000 91800000 chr7 0 121700000 chr7 14300000 12000000 chr7 15400000 58000000 chr7 18700000 24400000 chr7 19000000 17000000 chr7 19500000 16000000 chr7 20500000 35300000 chr7 25800000 15400000 chr7 28000000 25800000 chr7 30000000 10900000 chr7 38200000 22100000 chr7 38600000 16000000 chr7 42900000 51400000 chr7 48100000 47100000 chr7 50700000 46100000 chr7 50700000 58600000 chr7 50700000 39100000 chr7 55800000 34700000 chr7 61900000 159345973 chr7 62700000 43900000 chr7 63400000 58000000 chr7 94000000 87800000 chr7 94000000 48200000 chr7 124600000 91800000 chr8 0 121700000 chr8 14300000 12000000 chr8 15400000 58000000 chr8 18700000 24400000 chr8 19000000 17000000 chr8 19500000 16000000 chr8 20500000 35300000 chr8 25800000 15400000 chr8 28000000 25800000 chr8 30000000 10900000 chr8 38200000 22100000 chr8 38600000 16000000 chr8 42900000 51400000 chr8 48100000 47100000 chr8 50700000 46100000 chr8 50700000 58600000 chr8 50700000 39100000 chr8 55800000 34700000 chr8 61900000 145138636 chr8 62700000 43900000 chr8 63400000 58000000 chr8 94000000 87800000 chr8 94000000 48200000 chr8 124600000 91800000 chr9 0 121700000 chr9 14300000 12000000 chr9 15400000 58000000 chr9 18700000 24400000 chr9 19000000 17000000 chr9 19500000 16000000 chr9 20500000 35300000 chr9 25800000 15400000 chr9 28000000 25800000 chr9 30000000 10900000 chr9 38200000 22100000 chr9 38600000 16000000 chr9 42900000 51400000 chr9 48100000 47100000 chr9 50700000 46100000 chr9 50700000 58600000 chr9 50700000 39100000 chr9 55800000 34700000 chr9 61900000 138394717 chr9 62700000 43900000 chr9 63400000 58000000 chr9 94000000 87800000 chr9 94000000 48200000 chr9 124600000 91800000 chr10 0 121700000 chr10 14300000 12000000 chr10 15400000 58000000 chr10 18700000 24400000 chr10 19000000 17000000 chr10 19500000 16000000 chr10 20500000 35300000 chr10 25800000 15400000 chr10 28000000 25800000 chr10 30000000 10900000 chr10 38200000 22100000 chr10 38600000 16000000 chr10 42900000 51400000 chr10 48100000 47100000 chr10 50700000 46100000 chr10 50700000 58600000 chr10 50700000 39100000 chr10 55800000 34700000 chr10 61900000 133797422 chr10 62700000 43900000 chr10 63400000 58000000 chr10 94000000 87800000 chr10 94000000 48200000 chr10 124600000 91800000 chr11 0 121700000 chr11 14300000 12000000 chr11 15400000 58000000 chr11 18700000 24400000 chr11 19000000 17000000 chr11 19500000 16000000 chr11 20500000 35300000 chr11 25800000 15400000 chr11 28000000 25800000 chr11 30000000 10900000 chr11 38200000 22100000 chr11 38600000 16000000 chr11 42900000 51400000 chr11 48100000 47100000 chr11 50700000 46100000 chr11 50700000 58600000 chr11 50700000 39100000 chr11 55800000 34700000 chr11 61900000 135086622 chr11 62700000 43900000 chr11 63400000 58000000 chr11 94000000 87800000 chr11 94000000 48200000 chr11 124600000 91800000 chr12 0 121700000 chr12 14300000 12000000 chr12 15400000 58000000 chr12 18700000 24400000 chr12 19000000 17000000 chr12 19500000 16000000 chr12 20500000 35300000 chr12 25800000 15400000 chr12 28000000 25800000 chr12 30000000 10900000 chr12 38200000 22100000 chr12 38600000 16000000 chr12 42900000 51400000 chr12 48100000 47100000 chr12 50700000 46100000 chr12 50700000 58600000 chr12 50700000 39100000 chr12 55800000 34700000 chr12 61900000 133275309 chr12 62700000 43900000 chr12 63400000 58000000 chr12 94000000 87800000 chr12 94000000 48200000 chr12 124600000 91800000 chr13 0 121700000 chr13 14300000 12000000 chr13 15400000 58000000 chr13 18700000 24400000 chr13 19000000 17000000 chr13 19500000 16000000 chr13 20500000 35300000 chr13 25800000 15400000 chr13 28000000 25800000 chr13 30000000 10900000 chr13 38200000 22100000 chr13 38600000 16000000 chr13 42900000 51400000 chr13 48100000 47100000 chr13 50700000 46100000 chr13 50700000 58600000 chr13 50700000 39100000 chr13 55800000 34700000 chr13 61900000 114364328 chr13 62700000 43900000 chr13 63400000 58000000 chr13 94000000 87800000 chr13 94000000 48200000 chr13 124600000 91800000 chr14 0 121700000 chr14 14300000 12000000 chr14 15400000 58000000 chr14 18700000 24400000 chr14 19000000 17000000 chr14 19500000 16000000 chr14 20500000 35300000 chr14 25800000 15400000 chr14 28000000 25800000 chr14 30000000 10900000 chr14 38200000 22100000 chr14 38600000 16000000 chr14 42900000 51400000 chr14 48100000 47100000 chr14 50700000 46100000 chr14 50700000 58600000 chr14 50700000 39100000 chr14 55800000 34700000 chr14 61900000 107043718 chr14 62700000 43900000 chr14 63400000 58000000 chr14 94000000 87800000 chr14 94000000 48200000 chr14 124600000 91800000 chr15 0 121700000 chr15 14300000 12000000 chr15 15400000 58000000 chr15 18700000 24400000 chr15 19000000 17000000 chr15 19500000 16000000 chr15 20500000 35300000 chr15 25800000 15400000 chr15 28000000 25800000 chr15 30000000 10900000 chr15 38200000 22100000 chr15 38600000 16000000 chr15 42900000 51400000 chr15 48100000 47100000 chr15 50700000 46100000 chr15 50700000 58600000 chr15 50700000 39100000 chr15 55800000 34700000 chr15 61900000 101991189 chr15 62700000 43900000 chr15 63400000 58000000 chr15 94000000 87800000 chr15 94000000 48200000 chr15 124600000 91800000 chr16 0 121700000 chr16 14300000 12000000 chr16 15400000 58000000 chr16 18700000 24400000 chr16 19000000 17000000 chr16 19500000 16000000 chr16 20500000 35300000 chr16 25800000 15400000 chr16 28000000 25800000 chr16 30000000 10900000 chr16 38200000 22100000 chr16 38600000 16000000 chr16 42900000 51400000 chr16 48100000 47100000 chr16 50700000 46100000 chr16 50700000 58600000 chr16 50700000 39100000 chr16 55800000 34700000 chr16 61900000 90338345 chr16 62700000 43900000 chr16 63400000 58000000 chr16 94000000 87800000 chr16 94000000 48200000 chr16 124600000 91800000 chr17 0 121700000 chr17 14300000 12000000 chr17 15400000 58000000 chr17 18700000 24400000 chr17 19000000 17000000 chr17 19500000 16000000 chr17 20500000 35300000 chr17 25800000 15400000 chr17 28000000 25800000 chr17 30000000 10900000 chr17 38200000 22100000 chr17 38600000 16000000 chr17 42900000 51400000 chr17 48100000 47100000 chr17 50700000 46100000 chr17 50700000 58600000 chr17 50700000 39100000 chr17 55800000 34700000 chr17 61900000 83257441 chr17 62700000 43900000 chr17 63400000 58000000 chr17 94000000 87800000 chr17 94000000 48200000 chr17 124600000 91800000 chr18 0 121700000 chr18 14300000 12000000 chr18 15400000 58000000 chr18 18700000 24400000 chr18 19000000 17000000 chr18 19500000 16000000 chr18 20500000 35300000 chr18 25800000 15400000 chr18 28000000 25800000 chr18 30000000 10900000 chr18 38200000 22100000 chr18 38600000 16000000 chr18 42900000 51400000 chr18 48100000 47100000 chr18 50700000 46100000 chr18 50700000 58600000 chr18 50700000 39100000 chr18 55800000 34700000 chr18 61900000 80373285 chr18 62700000 43900000 chr18 63400000 58000000 chr18 94000000 87800000 chr18 94000000 48200000 chr18 124600000 91800000 chr19 0 121700000 chr19 14300000 12000000 chr19 15400000 58000000 chr19 18700000 24400000 chr19 19000000 17000000 chr19 19500000 16000000 chr19 20500000 35300000 chr19 25800000 15400000 chr19 28000000 25800000 chr19 30000000 10900000 chr19 38200000 22100000 chr19 38600000 16000000 chr19 42900000 51400000 chr19 48100000 47100000 chr19 50700000 46100000 chr19 50700000 58600000 chr19 50700000 39100000 chr19 55800000 34700000 chr19 61900000 58617616 chr19 62700000 43900000 chr19 63400000 58000000 chr19 94000000 87800000 chr19 94000000 48200000 chr19 124600000 91800000 chr20 0 121700000 chr20 14300000 12000000 chr20 15400000 58000000 chr20 18700000 24400000 chr20 19000000 17000000 chr20 19500000 16000000 chr20 20500000 35300000 chr20 25800000 15400000 chr20 28000000 25800000 chr20 30000000 10900000 chr20 38200000 22100000 chr20 38600000 16000000 chr20 42900000 51400000 chr20 48100000 47100000 chr20 50700000 46100000 chr20 50700000 58600000 chr20 50700000 39100000 chr20 55800000 34700000 chr20 61900000 64444167 chr20 62700000 43900000 chr20 63400000 58000000 chr20 94000000 87800000 chr20 94000000 48200000 chr20 124600000 91800000 chr21 0 121700000 chr21 14300000 12000000 chr21 15400000 58000000 chr21 18700000 24400000 chr21 19000000 17000000 chr21 19500000 16000000 chr21 20500000 35300000 chr21 25800000 15400000 chr21 28000000 25800000 chr21 30000000 10900000 chr21 38200000 22100000 chr21 38600000 16000000 chr21 42900000 51400000 chr21 48100000 47100000 chr21 50700000 46100000 chr21 50700000 58600000 chr21 50700000 39100000 chr21 55800000 34700000 chr21 61900000 46709983 chr21 62700000 43900000 chr21 63400000 58000000 chr21 94000000 87800000 chr21 94000000 48200000 chr21 124600000 91800000 chr22 0 121700000 chr22 14300000 12000000 chr22 15400000 58000000 chr22 18700000 24400000 chr22 19000000 17000000 chr22 19500000 16000000 chr22 20500000 35300000 chr22 25800000 15400000 chr22 28000000 25800000 chr22 30000000 10900000 chr22 38200000 22100000 chr22 38600000 16000000 chr22 42900000 51400000 chr22 48100000 47100000 chr22 50700000 46100000 chr22 50700000 58600000 chr22 50700000 39100000 chr22 55800000 34700000 chr22 61900000 50818468 chr22 62700000 43900000 chr22 63400000 58000000 chr22 94000000 87800000 chr22 94000000 48200000 chr22 124600000 91800000 chrX 0 121700000 chrX 14300000 12000000 chrX 15400000 58000000 chrX 18700000 24400000 chrX 19000000 17000000 chrX 19500000 16000000 chrX 20500000 35300000 chrX 25800000 15400000 chrX 28000000 25800000 chrX 30000000 10900000 chrX 38200000 22100000 chrX 38600000 16000000 chrX 42900000 51400000 chrX 48100000 47100000 chrX 50700000 46100000 chrX 50700000 58600000 chrX 50700000 39100000 chrX 55800000 34700000 chrX 61900000 156040895 chrX 62700000 43900000 chrX 63400000 58000000 chrX 94000000 87800000 chrX 94000000 48200000 chrX 124600000 91800000 ================================================ FILE: tracks/lowmap30perc.bed ================================================ chr1 10800 12900 0 127 chr1 14100 15300 0 127 chr1 17100 51300 0 191 chr1 53400 54000 0 191 chr1 59700 60000 0.0233 68 chr1 64200 66000 0 104 chr1 67800 72000 0 93 chr1 73500 75600 0.0072 95 chr1 78300 78900 0 32 chr1 80700 81000 0.1405 65 chr1 90300 92400 0 119 chr1 93600 97500 0 119 chr1 99900 100500 0.0114 95 chr1 104400 105000 0.0051 104 chr1 106200 106500 0.0051 104 chr1 107700 108000 0.0051 104 chr1 109800 115500 0 124 chr1 116700 128400 0 124 chr1 130500 132900 0 58 chr1 134400 135900 0 52 chr1 137100 137400 0.2235 73 chr1 140100 180900 0 80 chr1 184800 186000 0.1444 135 chr1 187800 190500 0 154 chr1 192000 207300 0 114 chr1 258600 259800 0 150 chr1 262800 267300 0 150 chr1 270000 270300 0.0833 110 chr1 271800 273600 0.0011 101 chr1 274800 275100 0.0011 101 chr1 276600 277200 0.0011 101 chr1 278700 279000 0.1531 94 chr1 280800 284100 0.0114 105 chr1 288000 288300 0.2193 85 chr1 289500 296700 0 99 chr1 348000 532800 0 120 chr1 534000 535800 0 120 chr1 587700 589500 0 29 chr1 593700 594300 0.0444 60 chr1 596100 596700 0.0468 66 chr1 597900 598800 0.0018 109 chr1 602400 608400 0 65 chr1 609600 610500 0 17 chr1 611700 612300 0 73 chr1 613500 623100 0 73 chr1 624600 625500 0 750 chr1 627000 630000 0 750 chr1 631800 632100 0 750 chr1 635700 636900 0 88 chr1 638100 644700 0 88 chr1 648000 664500 0 86 chr1 669000 676500 0 71 chr1 678300 682200 0 56 chr1 683400 700500 0 110 chr1 702600 722100 0 110 chr1 723900 726900 0 83 chr1 728100 729300 0 81 chr1 731100 732600 0 100 chr1 734400 738600 0 100 chr1 739800 752100 0 100 chr1 753600 757500 0 100 chr1 758700 761700 0 67 chr1 764100 764400 0.0015 55 chr1 765900 766200 0.1199 75 chr1 767700 769800 0 86 chr1 772800 774600 0 89 chr1 791400 791700 0.2643 739 chr1 808800 809100 0.1351 68 chr1 813900 814200 0.0238 43 chr1 817500 817800 0.0781 83 chr1 934200 934500 0.0843 24 chr1 976800 977100 0.2936 18 chr1 1076700 1077000 0.0176 18 chr1 1078500 1078800 0.1732 48 chr1 1139400 1140300 0.0455 40 chr1 1201800 1202100 0.1474 43 chr1 1248900 1249500 0.0008 77 chr1 1478700 1479000 0.0834 63 chr1 1481400 1481700 0.0206 70 chr1 1517400 1517700 0.0632 67 chr1 1519500 1519800 0.0705 55 chr1 1632600 1633800 0 65 chr1 1635000 1636200 0.0131 61 chr1 1642200 1644600 0 71 chr1 1657500 1657800 0.0599 62 chr1 1661700 1662000 0.0691 72 chr1 1675500 1677300 0.0404 71 chr1 1690800 1692300 0.0417 71 chr1 1693500 1693800 0.0427 56 chr1 1695600 1695900 0.0864 44 chr1 1698600 1703400 0 63 chr1 1709400 1711800 0 74 chr1 1722900 1723200 0.0836 47 chr1 1727700 1728000 0.0666 56 chr1 1738500 1738800 0.0382 82 chr1 1745100 1745400 0.0108 71 chr1 1746600 1748100 0.068 54 chr1 1751100 1751400 0.0595 53 chr1 2281500 2282400 0.0113 114 chr1 2655300 2657100 0 596 chr1 2658300 2682900 0 596 chr1 2686800 2687100 0.1498 313 chr1 2688600 2698200 0 1101 chr1 2700900 2702700 0.0203 56 chr1 2746500 2747400 0 209 chr1 2749800 2750100 0.187 163 chr1 2753700 2759100 0 949 chr1 2762100 2767200 0 949 chr1 2768700 2775000 0 82 chr1 2776500 2777100 0.0034 100 chr1 3162900 3163200 0.1753 82 chr1 3475200 3475800 0 98 chr1 3583500 3583800 0.0758 51 chr1 3643800 3644100 0 22 chr1 3694200 3694800 0.1974 65 chr1 3892200 3892500 0.0354 23 chr1 4077300 4077900 0.1175 60 chr1 4302900 4303200 0.2549 348 chr1 5334300 5334600 0 103 chr1 6304500 6304800 0.1027 54 chr1 7114800 7115400 0 60 chr1 12825300 12825600 0.1179 91 chr1 12832800 12833100 0.2072 59 chr1 12866700 12867000 0 24 chr1 12868500 12868800 0.0613 65 chr1 12871800 12872700 0 51 chr1 12875100 12876600 0.0488 44 chr1 12879000 12879300 0.0419 41 chr1 12889200 12889500 0.0228 61 chr1 12891900 12892500 0.0118 43 chr1 12894600 12897300 0.0047 63 chr1 12899400 12900000 0.0126 60 chr1 12903000 12906000 0 75 chr1 12908400 12908700 0.056 39 chr1 12912900 12919200 0 81 chr1 12920400 12924600 0 73 chr1 12926100 12932100 0 77 chr1 12934200 12934800 0.0065 63 chr1 12939000 12947400 0 91 chr1 12951000 12954300 0 66 chr1 13005000 13005300 0.0151 44 chr1 13007700 13012200 0 56 chr1 13013400 13015800 0 56 chr1 13017600 13017900 0.0177 46 chr1 13020300 13023000 0 42 chr1 13026000 13026300 0.1354 51 chr1 13030500 13030800 0.1259 43 chr1 13032600 13034100 0.0234 50 chr1 13035600 13037100 0 67 chr1 13038300 13043100 0 67 chr1 13044600 13045200 0 44 chr1 13047900 13048200 0.0072 68 chr1 13049400 13049700 0.0072 68 chr1 13053000 13055400 0 69 chr1 13059300 13067100 0 54 chr1 13069500 13069800 0.0824 49 chr1 13071900 13104000 0 86 chr1 13122600 13155000 0 92 chr1 13156500 13167600 0 92 chr1 13173000 13199400 0 67 chr1 13200600 13202400 0 67 chr1 13203900 13222200 0 67 chr1 13223400 13224300 0 67 chr1 13247700 13251000 0 72 chr1 13254300 13262700 0 72 chr1 13264200 13265400 0.0031 70 chr1 13266900 13267500 0 75 chr1 13268700 13270500 0 75 chr1 13271700 13275900 0 75 chr1 13277400 13277700 0.136 66 chr1 13280400 13281300 0 74 chr1 13282800 13285500 0 72 chr1 13287000 13287900 0 78 chr1 13295700 13296900 0 69 chr1 13302000 13302300 0.0003 66 chr1 13304700 13305300 0.0028 53 chr1 13312200 13312800 0.092 70 chr1 13327500 13328700 0 57 chr1 13335600 13336200 0 59 chr1 13363200 13363800 0.0261 40 chr1 14029200 14029500 0.0111 86 chr1 16495200 16495800 0.01 91 chr1 16515000 16515300 0.1887 87 chr1 16548000 16548900 0.0779 19 chr1 16551300 16551600 0.0233 80 chr1 16554300 16557000 0 85 chr1 16558200 16567500 0 292 chr1 16568700 16569000 0 292 chr1 16572900 16574400 0.0665 122 chr1 16590600 16595100 0 122 chr1 16596300 16599000 0 111 chr1 16600500 16601100 0.0003 111 chr1 16602300 16602600 0.0027 110 chr1 16604100 16604400 0.0027 110 chr1 16619400 16619700 0.111 143 chr1 16653300 16653600 0.0963 139 chr1 16655400 16657200 0 142 chr1 16659000 16673700 0 164 chr1 16682100 16682400 0.0749 78 chr1 16688400 16691100 0 81 chr1 16694100 16695900 0 74 chr1 16698900 16699200 0.0385 92 chr1 16700400 16702200 0 93 chr1 16703700 16704000 0.0943 33 chr1 16706700 16707300 0.0009 77 chr1 16708500 16709100 0 83 chr1 16711200 16711500 0 83 chr1 16713900 16715700 0 98 chr1 16729500 16729800 0.054 122 chr1 16731000 16731600 0 162 chr1 16733700 16753200 0 155 chr1 16754400 16755000 0 155 chr1 16756800 16758000 0.0529 123 chr1 16761900 16764000 0.0038 94 chr1 16768500 16769100 0.0208 117 chr1 16778400 16778700 0.0466 126 chr1 16783800 16785600 0.0011 99 chr1 16850700 16853700 0 72 chr1 16866000 16866300 0.1518 141 chr1 16917600 16918200 0.0114 75 chr1 16953600 16954200 0.0577 140 chr1 16974000 16974900 0 34 chr1 20814900 20815200 0.056 31 chr1 20832900 20833200 0.0494 70 chr1 21388800 21389700 0.0859 47 chr1 21425100 21425700 0.0351 65 chr1 21482400 21483000 0.0104 73 chr1 21485400 21485700 0.1315 57 chr1 21968100 21968400 0.0698 54 chr1 21990300 21991200 0 78 chr1 22013400 22014300 0 72 chr1 23992800 23993400 0.0688 50 chr1 23994600 23994900 0.1722 41 chr1 24799800 24800100 0.1913 19 chr1 24832500 24834900 0 36 chr1 25264800 25266000 0.0078 53 chr1 25316700 25317900 0 42 chr1 25323000 25329000 0 56 chr1 25335000 25336200 0.0015 52 chr1 25362600 25367400 0 57 chr1 25374600 25375200 0.0553 51 chr1 25509000 25511100 0.1838 123 chr1 26163300 26163600 0.1266 39 chr1 26640600 26640900 0.0034 67 chr1 26646900 26647500 0.0017 65 chr1 27065100 27065400 0.0868 81 chr1 27852300 27855000 0.0671 75 chr1 30439200 30439800 0.0665 92 chr1 30441900 30442500 0.1204 109 chr1 30443700 30444000 0.1204 109 chr1 30498600 30498900 0.096 84 chr1 30567900 30568800 0.011 182 chr1 30579000 30579300 0.0551 71 chr1 30935700 30936000 0.1235 68 chr1 33051300 33053400 0.0135 70 chr1 33834600 33834900 0.0253 26 chr1 34095000 34095300 0.0948 80 chr1 34096500 34098300 0.0234 194 chr1 34253400 34253700 0.0393 93 chr1 34256100 34256400 0.0393 93 chr1 34566300 34572000 0 101 chr1 38667000 38667300 0.1822 126 chr1 39511200 39513300 0 68 chr1 39515100 39516300 0.0618 68 chr1 39518400 39518700 0.0919 66 chr1 39520500 39522000 0.0408 60 chr1 39765300 39765600 0.1933 61 chr1 39767700 39768000 0.2489 78 chr1 39770700 39774900 0 87 chr1 40366500 40370700 0 136 chr1 41208000 41208300 0.0326 56 chr1 41854500 41855100 0.0947 97 chr1 42064800 42065100 0.1743 69 chr1 42494700 42495000 0.0235 166 chr1 42708900 42709200 0.2458 185 chr1 42751200 42751500 0.0401 50 chr1 43117500 43117800 0.1024 75 chr1 45710700 45711000 0.1354 61 chr1 45725400 45726000 0.0421 51 chr1 45741600 45741900 0.1112 25 chr1 46240500 46240800 0.1027 82 chr1 46242300 46242900 0.1027 82 chr1 46505100 46505400 0.0383 90 chr1 46874700 46875000 0.1614 58 chr1 46876800 46877100 0.1271 51 chr1 46886400 46887600 0 67 chr1 46891800 46896900 0 63 chr1 47070600 47072700 0 78 chr1 47075100 47075400 0.0639 72 chr1 47080200 47081400 0 62 chr1 48153000 48156000 0 148 chr1 48381900 48383700 0.0287 99 chr1 49007100 49007400 0.1349 64 chr1 49283700 49284000 0.1117 102 chr1 49287000 49287300 0.0645 79 chr1 49800600 49800900 0.1283 52 chr1 49876200 49876800 0.0302 78 chr1 49878900 49879200 0.0602 65 chr1 50918400 50918700 0.0081 89 chr1 52797300 52797600 0.1032 134 chr1 53283600 53284200 0.0752 36 chr1 53713200 53713500 0.2647 120 chr1 55666800 55667100 0.1833 21 chr1 56365500 56369100 0 135 chr1 58115100 58115700 0.0732 84 chr1 58254600 58255200 0.0951 82 chr1 58269600 58273500 0.0006 87 chr1 58376700 58377000 0.0548 82 chr1 58378200 58378800 0.0548 82 chr1 59650500 59650800 0.156 63 chr1 60278700 60279000 0.1995 87 chr1 60550800 60551400 0.0955 109 chr1 60645000 60645300 0.1929 88 chr1 61925100 61925400 0.2659 103 chr1 63239700 63242400 0.0028 102 chr1 63927000 63927300 0.0432 49 chr1 64373400 64373700 0 23 chr1 64798200 64798500 0.0889 106 chr1 65558700 65563800 0 94 chr1 65778300 65778600 0.0289 74 chr1 67079100 67084200 0 91 chr1 67158900 67159200 0.1275 56 chr1 68735100 68739000 0 110 chr1 69116100 69116700 0.1179 84 chr1 69887100 69887400 0.1147 82 chr1 70646700 70647600 0.0059 26 chr1 71514300 71519700 0 114 chr1 71888700 71894100 0 122 chr1 73194000 73194300 0.0125 112 chr1 74447700 74448900 0.0093 104 chr1 75377400 75378000 0.0004 71 chr1 75381300 75383400 0 75 chr1 75387300 75387900 0.0728 125 chr1 75885900 75886200 0.095 25 chr1 77002800 77003400 0.1473 71 chr1 77870100 77870400 0.1259 72 chr1 78243900 78245400 0 95 chr1 78845700 78846600 0.0015 100 chr1 78847800 78850800 0.0015 100 chr1 79571700 79572000 0.2215 28 chr1 79940700 79941000 0.1225 58 chr1 80136900 80137200 0.13 32 chr1 80939400 80944800 0 105 chr1 80950800 80951100 0.0219 59 chr1 82251300 82252500 0.1129 63 chr1 82253700 82255800 0.0333 97 chr1 82660500 82661700 0 91 chr1 83184000 83184300 0.1363 78 chr1 83230800 83231100 0.1165 100 chr1 83266500 83266800 0.0975 59 chr1 83303400 83303700 0.0442 53 chr1 83339400 83341200 0.0207 89 chr1 83351100 83352300 0.0666 69 chr1 83392800 83393100 0.1258 34 chr1 84052500 84058200 0 92 chr1 84233400 84234000 0.0408 126 chr1 85521900 85522500 0.0134 63 chr1 85535400 85535700 0.0181 57 chr1 85748700 85754400 0 148 chr1 85927500 85932900 0 117 chr1 85940100 85940400 0.1448 27 chr1 86216400 86217300 0.0235 57 chr1 86275500 86275800 0.0005 64 chr1 86679300 86685000 0 111 chr1 88343100 88345800 0.0481 82 chr1 89414700 89415300 0.0016 89 chr1 89416800 89417100 0.1599 66 chr1 89561400 89561700 0.0317 76 chr1 89747400 89752500 0.0414 89 chr1 91212600 91216800 0.0107 104 chr1 91301400 91302000 0.0469 23 chr1 91371300 91371600 0.0807 37 chr1 91387200 91387500 0.035 950 chr1 93276900 93277500 0.0049 74 chr1 93791400 93796200 0.0157 98 chr1 95292900 95295600 0.0647 100 chr1 96052500 96052800 0.1288 41 chr1 96606900 96607200 0.0775 84 chr1 96853500 96853800 0.2118 106 chr1 97320600 97322100 0.0018 85 chr1 98983200 98983500 0.1537 60 chr1 99213600 99213900 0.0136 54 chr1 99388800 99390600 0.0085 93 chr1 103020300 103020900 0.1192 58 chr1 103356000 103356300 0.065 65 chr1 103594500 103610700 0 80 chr1 103621200 103623000 0 61 chr1 103624200 103627500 0 85 chr1 103629600 103667700 0 85 chr1 103668900 103713300 0 85 chr1 103715700 103760400 0 85 chr1 104036100 104036400 0.0083 116 chr1 104127000 104127300 0.0189 25 chr1 104770500 104775600 0 95 chr1 104844000 104849100 0 87 chr1 104885700 104886000 0.0026 12 chr1 105214500 105215700 0.0011 57 chr1 105575400 105575700 0.0908 94 chr1 105659700 105660300 0.0251 131 chr1 106089900 106090200 0.2428 184 chr1 108224100 108224400 0 81 chr1 108225600 108225900 0 81 chr1 108227400 108228300 0 81 chr1 108229800 108247200 0 96 chr1 108248400 108255600 0 72 chr1 108258600 108264000 0 79 chr1 108265200 108310500 0 79 chr1 108375000 108437400 0 105 chr1 108438600 108447300 0 74 chr1 108448800 108464700 0 86 chr1 108465900 108467100 0 76 chr1 108468600 108468900 0.1449 70 chr1 108470100 108470400 0.1449 70 chr1 108577200 108579300 0 57 chr1 109055100 109055400 0.0225 35 chr1 109680600 109683900 0 58 chr1 109693500 109693800 0.043 45 chr1 109698900 109702200 0 42 chr1 109843200 109843500 0.1528 96 chr1 110845800 110846100 0.0597 64 chr1 111544800 111545100 0.1185 104 chr1 111800100 111800400 0.0574 56 chr1 112159200 112159500 0.0432 72 chr1 112226400 112227300 0.1008 100 chr1 112293300 112294800 0.007 48 chr1 112773600 112773900 0.0854 17 chr1 112898700 112899300 0.0505 69 chr1 113068800 113070900 0.0582 92 chr1 113344200 113344800 0.0688 69 chr1 113360700 113362500 0.0147 129 chr1 113497200 113503200 0 132 chr1 113509500 113509800 0.0614 69 chr1 115152300 115153200 0.0435 98 chr1 115627200 115627500 0.1056 100 chr1 116136900 116137200 0.0484 83 chr1 116718000 116719500 0 134 chr1 117430500 117430800 0.0103 78 chr1 118575900 118576200 0.1012 50 chr1 118852800 118858200 0 122 chr1 119990100 119994900 0 70 chr1 119998800 119999100 0.1029 78 chr1 120005700 120006000 0.0593 53 chr1 120008100 120008700 0 61 chr1 120016200 120017100 0 78 chr1 120018300 120022800 0 78 chr1 120026700 120028200 0.0459 74 chr1 120029700 120032100 0.054 71 chr1 120035700 120036600 0 63 chr1 120039900 120040200 0.0153 66 chr1 120044100 120047400 0 88 chr1 120048900 120053400 0 75 chr1 120055200 120060000 0 70 chr1 120061800 120062700 0 84 chr1 120068400 120068700 0.1178 64 chr1 120069900 120070200 0.0076 66 chr1 120075300 120075600 0 75 chr1 120077100 120081000 0 75 chr1 120084000 120084600 0.0148 104 chr1 120087000 120087900 0.03 81 chr1 120096600 120096900 0.0659 70 chr1 120099000 120099300 0.0801 65 chr1 120103500 120104100 0.0156 63 chr1 120111900 120112200 0.0942 73 chr1 120126600 120127500 0 70 chr1 120158400 120159000 0.0749 57 chr1 120162000 120162600 0.1222 74 chr1 120172200 120175500 0 88 chr1 120181800 120182100 0.0917 68 chr1 120185100 120185400 0.0064 71 chr1 120189000 120189300 0.0328 53 chr1 120194100 120195900 0.0341 81 chr1 120198300 120198600 0.1837 45 chr1 120201000 120202200 0.0213 72 chr1 120203700 120204000 0.1404 48 chr1 120205200 120215100 0 84 chr1 120216300 120217200 0 84 chr1 120220500 120220800 0.2565 62 chr1 120222000 120225900 0 96 chr1 120227400 120257700 0 96 chr1 120259200 120269700 0 96 chr1 120270900 120315300 0 79 chr1 120316500 120321900 0 79 chr1 120323700 120324000 0.0083 65 chr1 120325800 120329100 0 63 chr1 120330300 120332100 0.0032 50 chr1 120336000 120340800 0 76 chr1 120343200 120343500 0.1314 20 chr1 120352200 120354600 0 67 chr1 120356700 120357000 0 71 chr1 120358200 120362400 0 71 chr1 120364500 120364800 0.034 42 chr1 120372300 120372600 0.126 54 chr1 120376800 120377700 0.0155 55 chr1 120383100 120383400 0.0832 41 chr1 120387000 120388500 0.0217 68 chr1 120390000 120390300 0.0217 68 chr1 120392400 120392700 0.1272 54 chr1 120396300 120397500 0.0043 65 chr1 120398700 120400500 0.0545 63 chr1 120405300 120405600 0.0051 67 chr1 120408300 120408900 0.0051 67 chr1 120410700 120411300 0 77 chr1 120413700 120414000 0.0311 51 chr1 120417900 120418500 0.1528 49 chr1 120419700 120420000 0.0741 63 chr1 120425700 120426000 0.1013 69 chr1 120427500 120427800 0.044 53 chr1 120434700 120435000 0.1322 55 chr1 120436800 120449100 0 86 chr1 120457200 120459300 0 98 chr1 120461400 120465300 0 155 chr1 120466800 120467400 0 155 chr1 120479100 120479400 0.1279 56 chr1 120493800 120494400 0.1489 70 chr1 120499200 120499800 0.0473 63 chr1 120503100 120503400 0.0006 86 chr1 120504600 120505800 0.0644 56 chr1 120507600 120508800 0.0128 76 chr1 120510300 120510900 0.0015 57 chr1 120513900 120514800 0 67 chr1 120516900 120521100 0 80 chr1 120526800 120527400 0.022 72 chr1 120528900 120529200 0.022 72 chr1 120531300 120534000 0.0004 75 chr1 120536100 120537000 0 59 chr1 120538200 120538500 0.1929 55 chr1 120544800 120545100 0.0209 55 chr1 120548100 120548400 0.0838 71 chr1 120550200 120551100 0 62 chr1 120553500 120554100 0.0076 53 chr1 120558000 120558300 0.0004 33 chr1 120563400 120563700 0.0454 67 chr1 120565500 120565800 0.0454 67 chr1 120567000 120567900 0 72 chr1 120569100 120570000 0 72 chr1 120574500 120575400 0 67 chr1 120576900 120580200 0 58 chr1 120583200 120590100 0 72 chr1 120592800 120631200 0 86 chr1 120632700 120633300 0 86 chr1 120634500 120636300 0 69 chr1 120638100 120638400 0 69 chr1 120640800 120644100 0 98 chr1 120645300 120647700 0 98 chr1 120648900 120651300 0 98 chr1 120652500 120659100 0 85 chr1 120660300 120660600 0 85 chr1 120661800 120663900 0 68 chr1 120665400 120667800 0 99 chr1 120669000 120670200 0 99 chr1 120672900 120673200 0.1198 70 chr1 120674700 120676200 0.0344 60 chr1 120678300 120678600 0.0688 59 chr1 120680100 120681600 0 81 chr1 120683400 120695100 0 81 chr1 120696300 120704400 0 66 chr1 120708000 120709500 0.1096 87 chr1 120710700 120711000 0 66 chr1 120712500 120718200 0 66 chr1 120724800 120725700 0.024 67 chr1 120730800 120731700 0 69 chr1 120733800 120734100 0 85 chr1 120735600 120744900 0 85 chr1 120746100 120750000 0 85 chr1 120751200 120753900 0 85 chr1 120755100 120755400 0.0988 50 chr1 120756900 120757800 0 73 chr1 120760500 120762900 0.0732 67 chr1 120765300 120767100 0 75 chr1 120771000 120777300 0 80 chr1 120780300 120781500 0.0221 68 chr1 120783000 120783600 0.0221 68 chr1 120785400 120787800 0.0213 73 chr1 120789000 120789300 0.0213 73 chr1 120792000 120792300 0.0172 21 chr1 120795000 120801000 0 71 chr1 120812400 120812700 0.0709 32 chr1 120815700 120816000 0.0424 40 chr1 120819900 120821700 0 74 chr1 120824700 120829200 0 283 chr1 120830400 120840000 0 283 chr1 120841200 120841800 0 76 chr1 120848700 120849000 0.0282 67 chr1 120864000 120864300 0.0718 56 chr1 120868500 120870000 0.0233 76 chr1 120871200 120871500 0.0196 69 chr1 120873000 120873300 0.0196 69 chr1 120876300 120876600 0.081 52 chr1 120885900 120887400 0.0421 50 chr1 120890400 120891300 0.0071 45 chr1 120894600 120895800 0.035 59 chr1 120912300 120918900 0 78 chr1 120922800 120924600 0 61 chr1 120926400 120927900 0 70 chr1 120936000 120936300 0.208 58 chr1 120945900 120946200 0.0478 44 chr1 120948900 120949200 0.0849 60 chr1 120965700 120966600 0.0662 49 chr1 120984300 120984600 0.016 50 chr1 120986400 120988800 0.0187 68 chr1 120990900 120991200 0.1214 75 chr1 120992400 120992700 0.1214 75 chr1 120995400 120997800 0.0039 62 chr1 120999000 120999300 0.0221 66 chr1 121001400 121002600 0.0221 66 chr1 121004400 121005000 0.0034 77 chr1 121011000 121012200 0.0123 63 chr1 121014600 121016400 0.0043 65 chr1 121019400 121020600 0.0495 77 chr1 121023600 121023900 0.0799 58 chr1 121025400 121026600 0 65 chr1 121029300 121030200 0.0648 78 chr1 121032000 121032300 0.0648 78 chr1 121036800 121037100 0.0458 58 chr1 121049100 121049400 0.1196 78 chr1 121071600 121071900 0.0224 66 chr1 121073400 121073700 0.0224 66 chr1 121076700 121078500 0.0023 65 chr1 121083600 121083900 0.0916 25 chr1 121088400 121088700 0 34 chr1 121092000 121092600 0.047 62 chr1 121099200 121100700 0.0352 57 chr1 121104000 121104300 0.0699 56 chr1 121113300 121113600 0.0302 68 chr1 121116000 121116300 0.0006 64 chr1 121128600 121128900 0.0048 68 chr1 121134300 121134600 0.0274 61 chr1 121138200 121138500 0.0774 51 chr1 121140000 121142400 0.0003 67 chr1 121144200 121146300 0.0003 67 chr1 121148700 121150200 0 53 chr1 121152000 121152900 0.0726 68 chr1 121156800 121159200 0 71 chr1 121161900 121162200 0.0653 49 chr1 121167900 121171500 0 67 chr1 121173600 121174200 0 67 chr1 121175400 121176600 0.036 66 chr1 121177800 121178400 0.036 66 chr1 121179900 121180200 0.036 66 chr1 121182900 121183500 0.036 66 chr1 121185300 121187700 0 68 chr1 121188900 121189800 0.0036 66 chr1 121193400 121199700 0 73 chr1 121203600 121206000 0 71 chr1 121209000 121209300 0.0605 67 chr1 121210500 121212000 0.0181 55 chr1 121214400 121215600 0 57 chr1 121218000 121221000 0 79 chr1 121223400 121223700 0 60 chr1 121224900 121225500 0 60 chr1 121229100 121229400 0 75 chr1 121231800 121234200 0 75 chr1 121235400 121237200 0 75 chr1 121241100 121243200 0 74 chr1 121244700 121253400 0 74 chr1 121255800 121257000 0.0006 72 chr1 121258800 121259100 0.0006 72 chr1 121260600 121262100 0 61 chr1 121264200 121264500 0.1657 56 chr1 121267500 121269300 0.0007 67 chr1 121271700 121272000 0.0248 50 chr1 121275300 121277100 0.0486 64 chr1 121280700 121282200 0.0008 75 chr1 121284300 121285800 0.0353 62 chr1 121287000 121287300 0.0215 54 chr1 121289700 121290900 0.012 62 chr1 121292700 121293000 0.012 62 chr1 121296300 121299000 0.0057 70 chr1 121300500 121302900 0.0546 63 chr1 121305300 121306500 0.0782 71 chr1 121309500 121313400 0 107 chr1 121316400 121322700 0 69 chr1 121325700 121326900 0.0186 56 chr1 121330500 121334400 0 70 chr1 121336800 121338000 0 71 chr1 121341600 121342800 0 67 chr1 121344300 121346400 0 66 chr1 121348800 121350000 0.0421 73 chr1 121351800 121352400 0 68 chr1 121353600 121356300 0 68 chr1 121357800 121360800 0 68 chr1 121362000 121365300 0 75 chr1 121368600 121370100 0.0023 66 chr1 121371300 121373700 0.0008 58 chr1 121376400 121377600 0.0251 64 chr1 121379700 121380300 0.0047 71 chr1 121382700 121390500 0 72 chr1 121392600 121393500 0 85 chr1 121532700 121538100 0 125 chr1 121604400 121608300 0 37 chr1 121609500 121615800 0 44 chr1 121619400 121620000 0 21 chr1 121621500 121622700 0 81 chr1 121624200 121624500 0.0028 60 chr1 121625700 121627200 0.0826 62 chr1 121628700 121629000 0 40 chr1 121630200 121631400 0 40 chr1 121633200 121639800 0.0035 306 chr1 121641600 121644000 0 157 chr1 121645200 121685700 0 157 chr1 121688400 121689000 0 40 chr1 121692600 121692900 0.1119 53 chr1 121694700 121696800 0 29 chr1 121698000 121698900 0 29 chr1 121700100 121700700 0 29 chr1 121701900 121706700 0 41 chr1 121707900 121710000 0 62 chr1 121711200 121718100 0 61 chr1 121719300 121722000 0 26 chr1 121725600 121727400 0 27 chr1 121731300 121731900 0 51 chr1 121739100 121739400 0 34 chr1 121741800 121742100 0.0718 30 chr1 121743600 121756800 0 2648 chr1 121758000 121758300 0.0599 16 chr1 121760400 121788000 0 3380 chr1 121790100 121791300 0 32 chr1 121793400 121796400 0 131 chr1 121797600 121798200 0 97 chr1 121799400 121804800 0 97 chr1 121806000 121806300 0 140 chr1 121808400 121809900 0 140 chr1 121811100 121822500 0 140 chr1 121823700 121838400 0 140 chr1 121839900 121840500 0 140 chr1 121842300 121843200 0 140 chr1 121846200 121846800 0 162 chr1 121848300 121863000 0 115 chr1 121865100 121869300 0 74 chr1 121870500 121879500 0 80 chr1 121881300 121882200 0 20 chr1 121883700 121884000 0 25 chr1 121888200 121893000 0 79 chr1 121894500 121898100 0 81 chr1 121899600 121901100 0 25 chr1 121903500 121909200 0 122 chr1 121911600 121911900 0 15 chr1 121914300 121924200 0 144 chr1 121925700 121929900 0 92 chr1 121931700 121932000 0 13 chr1 121940700 121942800 0 66 chr1 121944600 121946100 0 31 chr1 121948500 121948800 0 17 chr1 121952400 121952700 0 34 chr1 121953900 121957800 0 40 chr1 121959300 121965300 0 84 chr1 121966800 121968900 0 42 chr1 121970100 121973100 0 404 chr1 122032800 122047200 0 105 chr1 122050500 122050800 0 197 chr1 122053500 122054700 0 197 chr1 122056500 122056800 0 35 chr1 122058600 122063700 0 60 chr1 122064900 122070000 0 415 chr1 122073000 122085000 0 116 chr1 122087400 122089500 0 83 chr1 122090700 122097600 0 130 chr1 122101500 122102100 0.1373 20 chr1 122105100 122109000 0 97 chr1 122111400 122124300 0 104 chr1 122126100 122130300 0 389 chr1 122131800 122132100 0 21 chr1 122134500 122137200 0 53 chr1 122138700 122139000 0 53 chr1 122141100 122141700 0 53 chr1 122143800 122159700 0 118 chr1 122161800 122169600 0 98 chr1 122172000 122175000 0 412 chr1 122176200 122176800 0 412 chr1 122178000 122178300 0 412 chr1 122179500 122182500 0 412 chr1 122183700 122184300 0 412 chr1 122185800 122186400 0 412 chr1 122187600 122189100 0 22 chr1 122191200 122195400 0 82 chr1 122196600 122203200 0 111 chr1 122204400 122204700 0 111 chr1 122207100 122208300 0 111 chr1 122211000 122214900 0 98 chr1 122216700 122219100 0 29 chr1 122224800 122225400 0 200 chr1 122226600 122229000 0 200 chr1 122230500 122236500 0 200 chr1 122238000 122269200 0 464 chr1 122271600 122368800 0 838 chr1 122370000 122390100 0 838 chr1 122391300 122397300 0 838 chr1 122398500 122449800 0 838 chr1 122452200 122453100 0 838 chr1 122454300 122490900 0 838 chr1 122492100 122495700 0 3359 chr1 122497500 122548200 0 3359 chr1 122550000 122550300 0.2431 120 chr1 122551500 122552100 0.1195 73 chr1 122553300 122555100 0.0053 2215 chr1 122556300 122562000 0.0053 2215 chr1 122564100 122573400 0 631 chr1 122575500 122583000 0 2358 chr1 122584500 122598000 0 2358 chr1 122599500 122633100 0 2578 chr1 122634300 122647200 0 2449 chr1 122649300 122655000 0 797 chr1 122656500 122658900 0 797 chr1 122660100 122661600 0.0877 65 chr1 122662800 122676300 0 1237 chr1 122677800 122688600 0 1708 chr1 122690100 122694900 0 1708 chr1 122696100 122699400 0 216 chr1 122700600 122700900 0.0758 35 chr1 122703000 122712000 0.0072 1373 chr1 122713800 122733600 0 1321 chr1 122734800 122739900 0 2814 chr1 122741100 122752500 0 1369 chr1 122754300 122768700 0 1534 chr1 122769900 122830800 0 1534 chr1 122832000 122836800 0 1336 chr1 122839200 122840700 0 307 chr1 122842500 122844900 0 3523 chr1 122846400 122868900 0 3523 chr1 122870700 122872500 0.0617 1353 chr1 122874000 122874900 0 543 chr1 122876700 122919900 0 3575 chr1 122923200 122923500 0.1824 21 chr1 122925000 122950500 0 5163 chr1 122951700 122952900 0 2437 chr1 122954100 122964000 0 2437 chr1 122965200 122967600 0 84 chr1 122968800 122970600 0.0661 472 chr1 122973300 122976000 0.0926 1292 chr1 122977200 122990100 0 2034 chr1 122991300 123001500 0 1118 chr1 123002700 123009600 0 371 chr1 123011400 123012000 0.1283 401 chr1 123013800 123016800 0.0075 669 chr1 123018000 123019500 0.0075 669 chr1 123020700 123058200 0 2197 chr1 123059700 123066300 0 1739 chr1 123067800 123094200 0 1739 chr1 123095400 123095700 0.1164 40 chr1 123097500 123098400 0.0079 1825 chr1 123100500 123113700 0 3618 chr1 123114900 123122400 0 3618 chr1 123123600 123139500 0 3618 chr1 123141000 123150900 0.0083 1230 chr1 123152400 123178500 0 2320 chr1 123179700 123210000 0 2048 chr1 123211500 123219000 0 1181 chr1 123220200 123227100 0 1181 chr1 123229500 123235800 0 1045 chr1 123237600 123237900 0.0425 59 chr1 123239100 123240300 0 1264 chr1 123241500 123258000 0 1264 chr1 123259200 123276900 0 1060 chr1 123280800 123301200 0 1378 chr1 123302400 123312600 0 1002 chr1 123313800 123314400 0 1002 chr1 123315900 123319500 0 457 chr1 123321300 123326700 0 2034 chr1 123327900 123341400 0 2034 chr1 123343500 123349500 0 424 chr1 123350700 123373200 0 2092 chr1 123374700 123386100 0 528 chr1 123387600 123390000 0.0174 594 chr1 123391500 123397500 0 1241 chr1 123398700 123405900 0.0139 1482 chr1 123407100 123428100 0 952 chr1 123429300 123443100 0 1686 chr1 123444300 123444900 0.1602 633 chr1 123446700 123468000 0 4862 chr1 123469800 123484800 0 1745 chr1 123486000 123507300 0 1745 chr1 123508800 123531300 0 3361 chr1 123534900 123537900 0.0134 818 chr1 123539100 123540300 0 443 chr1 123541500 123541800 0 270 chr1 123543000 123548100 0 270 chr1 123549300 123559800 0 2837 chr1 123561000 123581400 0 2837 chr1 123582600 123593100 0 418 chr1 123596100 123613200 0 825 chr1 123614700 123618000 0 1874 chr1 123619500 123622200 0 1874 chr1 123624000 123633300 0 1874 chr1 123634500 123636000 0.0015 1723 chr1 123637200 123639900 0.0015 1723 chr1 123641400 123644100 0.0015 1723 chr1 123645300 123648000 0.0124 1009 chr1 123649200 123652800 0 214 chr1 123655200 123675900 0 1546 chr1 123677400 123695100 0 1445 chr1 123697500 123706500 0 951 chr1 123708000 123714300 0 951 chr1 123715800 123716700 0.0578 72 chr1 123717900 123720000 0.0161 1028 chr1 123721500 123724800 0 105 chr1 123726000 123726300 0.0693 22 chr1 123727800 123755400 0 2290 chr1 123756600 123756900 0.2447 254 chr1 123758400 123762600 0.0422 501 chr1 123764100 123774600 0 1512 chr1 123776700 123795300 0 6466 chr1 123796500 123801300 0 6466 chr1 123803400 123804000 0 1093 chr1 123805500 123815100 0 1093 chr1 123816300 123832200 0 1093 chr1 123833700 123837300 0 154 chr1 123838500 123840900 0.0244 104 chr1 123842100 123873000 0 2786 chr1 123874500 123881400 0 714 chr1 123882600 123918600 0 1543 chr1 123921300 123933000 0 1846 chr1 123934800 123938700 0 158 chr1 123940200 123942000 0.0141 62 chr1 123944100 123945000 0 421 chr1 123946200 123948000 0 421 chr1 123949200 123963600 0 5034 chr1 123965100 123966900 0 5034 chr1 123968100 123976200 0 5034 chr1 123977400 123996900 0 4893 chr1 123998100 124004100 0 894 chr1 124005300 124011600 0 894 chr1 124013100 124045200 0 2651 chr1 124046400 124078800 0 2651 chr1 124080000 124085700 0 2163 chr1 124087200 124095000 0 1039 chr1 124096200 124100400 0 2235 chr1 124101900 124111200 0 2235 chr1 124112400 124119000 0 2235 chr1 124120200 124138200 0 2235 chr1 124140000 124142400 0 2235 chr1 124143600 124149600 0 2474 chr1 124150800 124173000 0 2474 chr1 124174800 124175100 0.2184 82 chr1 124176300 124194000 0 3302 chr1 124195200 124205700 0 3302 chr1 124206900 124224600 0 5543 chr1 124225800 124231800 0 5543 chr1 124233000 124256100 0 5543 chr1 124257300 124269300 0 1857 chr1 124270500 124278600 0 1615 chr1 124281000 124281300 0 6138 chr1 124282500 124294800 0 6138 chr1 124296000 124300500 0 6138 chr1 124301700 124316700 0 3456 chr1 124317900 124326000 0.0019 2182 chr1 124328400 124363200 0 1781 chr1 124364700 124383900 0 2260 chr1 124385100 124392600 0 2260 chr1 124394100 124396500 0 2260 chr1 124397700 124401600 0 2260 chr1 124402800 124410300 0 1178 chr1 124411500 124414800 0.0154 1251 chr1 124416000 124420500 0.0071 967 chr1 124421700 124422300 0.0071 967 chr1 124423800 124454400 0 4455 chr1 124455600 124468200 0 4455 chr1 124469400 124474200 0 4455 chr1 124475400 124499400 0 4455 chr1 124501800 124510200 0 1179 chr1 124511400 124513800 0.0271 2017 chr1 124515300 124527000 0 3236 chr1 124528200 124543800 0 1337 chr1 124545000 124565100 0 4870 chr1 124566300 124586400 0 3979 chr1 124588800 124614000 0 2276 chr1 124615500 124636800 0 8877 chr1 124638300 124655100 0 8877 chr1 124656300 124698300 0 8877 chr1 124699800 124735800 0 7429 chr1 124737000 124740900 0 7429 chr1 124742400 124779300 0 8694 chr1 124781100 124788600 0 2430 chr1 124794900 124795500 0.0724 75 chr1 124797000 124797300 0 170 chr1 124798500 124801500 0 170 chr1 124803600 124805400 0 788 chr1 124807500 124814700 0 305 chr1 124815900 124820100 0 161 chr1 124821600 124822200 0.0215 80 chr1 124823700 124826700 0 672 chr1 124827900 124834800 0 672 chr1 124836000 124848900 0 672 chr1 124850100 124850400 0 672 chr1 124851900 124852500 0 672 chr1 124853700 124857600 0 672 chr1 124858800 124860900 0 80 chr1 124863000 124872600 0 446 chr1 124874100 124883700 0 446 chr1 124884900 124896300 0 446 chr1 124898100 124898400 0 446 chr1 124899900 124900500 0 105 chr1 124901700 124902000 0 105 chr1 124903800 124907700 0 342 chr1 124909200 124909500 0.0324 407 chr1 124911600 124914300 0.0324 407 chr1 124915800 124920900 0 233 chr1 124922700 124925400 0 308 chr1 124926900 124928700 0.0328 411 chr1 124931100 124931700 0.0951 101 chr1 124932900 124936500 0 212 chr1 124937700 124939500 0 212 chr1 125103000 125103300 0.0666 53 chr1 125171100 125171400 0.0748 228 chr1 125175300 125175600 0.0222 36986 chr1 125178000 125183400 0.0222 36986 chr1 143184600 143188200 0.0145 10765 chr1 143190600 143194500 0.0326 16765 chr1 143195700 143196000 0.0326 16765 chr1 143199600 143207400 0 30628 chr1 143211600 143221800 0.0141 31526 chr1 143223000 143224200 0.0141 31526 chr1 143226300 143228100 0 36167 chr1 143229300 143230800 0 36167 chr1 143232300 143233800 0 36167 chr1 143235300 143242800 0 15648 chr1 143245200 143245500 0.1933 580 chr1 143246700 143247600 0 28191 chr1 143249400 143259900 0 28191 chr1 143261100 143264400 0 28191 chr1 143266500 143268000 0.0408 6626 chr1 143273700 143274900 0 78 chr1 143288700 143292600 0 106 chr1 143295000 143295300 0 106 chr1 143296500 143296800 0.1137 71 chr1 143298900 143305800 0 117 chr1 143307900 143308800 0 90 chr1 143312700 143313000 0 113 chr1 143315400 143320200 0 113 chr1 143322000 143326500 0 75 chr1 143327700 143355900 0 86 chr1 143357100 143385000 0 86 chr1 143386200 143403300 0 86 chr1 143405400 143411100 0 77 chr1 143412300 143414100 0 73 chr1 143415600 143419200 0 73 chr1 143420400 143435100 0 114 chr1 143437500 143449200 0 114 chr1 143452200 143452500 0 96 chr1 143454000 143466600 0 96 chr1 143468100 143472300 0 96 chr1 143474100 143480100 0 118 chr1 143481300 143482200 0 118 chr1 143484000 143486100 0.0004 77 chr1 143487600 143488500 0 135 chr1 143490300 143493300 0 135 chr1 143495400 143496600 0.0846 74 chr1 143499300 143500200 0.0072 109 chr1 143506500 143508600 0 111 chr1 143510100 143515200 0 111 chr1 143518200 143519100 0 111 chr1 143520300 143523300 0 111 chr1 143524500 143526600 0 79 chr1 143535000 143535300 0.1113 46 chr1 143561400 143561700 0.1804 80 chr1 143639100 143639400 0.1444 78 chr1 143728500 143728800 0.0254 62 chr1 143739000 143739300 0.2757 63 chr1 143740500 143741100 0.0001 79 chr1 143767200 143767500 0.0097 70 chr1 143770200 143770800 0 65 chr1 143773200 143773500 0.1258 63 chr1 143776200 143776800 0.0046 86 chr1 143780100 143803800 0 92 chr1 143805600 143808600 0 88 chr1 143810400 143811000 0 88 chr1 143812500 143813700 0 88 chr1 143815200 143817300 0 79 chr1 143818800 143820300 0.0055 75 chr1 143822100 143822400 0.0687 65 chr1 143823600 143824200 0.0129 74 chr1 143826900 143830200 0.001 76 chr1 143833800 143834400 0.0073 57 chr1 143842200 143842500 0.1864 52 chr1 143847000 143847900 0 60 chr1 143855100 143856300 0.0317 71 chr1 143859000 143860500 0.0014 67 chr1 143865300 143865900 0.0432 48 chr1 143868000 143868300 0.1066 73 chr1 143871300 143872800 0.1018 61 chr1 143875200 143875800 0 73 chr1 143879400 143879700 0.1272 65 chr1 143886900 143888100 0.0303 59 chr1 143891100 143891700 0.0015 48 chr1 143895000 143895600 0.0335 70 chr1 143900700 143901300 0.0217 67 chr1 143903400 143903700 0.004 72 chr1 143916000 143916300 0.0135 72 chr1 143921700 143922600 0.0016 70 chr1 143929800 143930100 0.0044 65 chr1 143932200 143932500 0.0044 65 chr1 143939100 143953800 0 83 chr1 143955900 143958600 0 81 chr1 143960100 143964900 0 81 chr1 143968200 143973900 0 81 chr1 143975100 143976900 0 81 chr1 143979600 143985600 0 80 chr1 143988000 143992800 0 77 chr1 143995200 144000600 0 77 chr1 144001800 144003300 0 77 chr1 144004800 144005400 0 55 chr1 144006600 144008400 0 91 chr1 144010200 144020700 0 91 chr1 144022200 144022500 0 91 chr1 144024000 144026400 0 91 chr1 144027600 144030300 0 91 chr1 144033600 144045600 0 98 chr1 144046800 144047100 0.1331 58 chr1 144049200 144049800 0.0124 74 chr1 144051900 144052200 0.0124 74 chr1 144053400 144054300 0 85 chr1 144057300 144060300 0 85 chr1 144062100 144076500 0 85 chr1 144078300 144100800 0 100 chr1 144102900 144103200 0.1806 316 chr1 144105300 144322500 0 125 chr1 144323700 144394200 0 141 chr1 144397200 144399900 0 89 chr1 144401400 144401700 0 89 chr1 144406500 144406800 0.0787 63 chr1 144408900 144409200 0.025 59 chr1 144411300 144411600 0.1675 76 chr1 144417000 144418500 0 57 chr1 144422400 144422700 0.0699 77 chr1 144424800 144426000 0.1352 114 chr1 144429600 144429900 0.0884 69 chr1 144433500 144433800 0.103 91 chr1 144448800 144450300 0.0401 67 chr1 144460200 144460500 0.1037 62 chr1 144469500 144469800 0.0778 74 chr1 144473100 144475200 0 84 chr1 144477600 144479400 0.0061 57 chr1 144481200 144481500 0.0564 71 chr1 144482700 144483000 0.0564 71 chr1 144486600 144488400 0.0535 73 chr1 144490200 144490500 0.0535 73 chr1 144501300 144502200 0.0077 65 chr1 144509100 144509700 0.1452 57 chr1 144519300 144519600 0.1686 62 chr1 144524400 144525300 0.01 69 chr1 144535500 144535800 0.1094 56 chr1 144537000 144537300 0.0797 59 chr1 144559800 144560100 0.0426 65 chr1 144561300 144561600 0.0426 65 chr1 144568500 144569700 0.001 61 chr1 144573000 144642600 0 126 chr1 144644100 144825900 0 174 chr1 144827400 144881700 0 105 chr1 144884100 144898200 0 88 chr1 144900000 144903600 0 88 chr1 144910800 144911100 0.0008 75 chr1 144913500 144913800 0 88 chr1 144916500 144919800 0 88 chr1 144921900 144922500 0.1547 61 chr1 144923700 144924000 0.0308 64 chr1 144925800 144926400 0.0106 59 chr1 144927600 144928200 0.0093 62 chr1 144930000 144930300 0.0093 62 chr1 144932700 144933000 0.1679 94 chr1 144934800 144935700 0 70 chr1 144937500 144939300 0 85 chr1 144942900 144943200 0.0931 62 chr1 144945900 144949500 0 69 chr1 144958500 144963600 0 77 chr1 144966900 144970500 0.002 115 chr1 144973500 144973800 0.0404 65 chr1 144976800 144979500 0.0114 76 chr1 144981300 144981600 0.0114 76 chr1 144983400 144983700 0.0114 76 chr1 144989100 144990600 0 93 chr1 144995100 144995700 0.0146 78 chr1 144997800 144998400 0.0146 78 chr1 145000200 145000500 0.1074 68 chr1 145002000 145002300 0.1074 68 chr1 145004100 145005000 0.0318 59 chr1 145008000 145008300 0.0171 73 chr1 145011000 145011300 0.0171 73 chr1 145012500 145012800 0.1464 45 chr1 145014600 145016700 0.0369 78 chr1 145018200 145019700 0 59 chr1 145021200 145021500 0.0396 53 chr1 145023900 145029300 0 76 chr1 145030800 145031100 0 76 chr1 145032600 145040400 0 90 chr1 145042800 145044000 0 79 chr1 145045500 145057800 0 95 chr1 145059300 145063500 0 95 chr1 145065600 145066200 0.0003 73 chr1 145067400 145068000 0 78 chr1 145070400 145072500 0 78 chr1 145073700 145075500 0 78 chr1 145077300 145079700 0 69 chr1 145082700 145083900 0.0022 70 chr1 145085400 145088400 0.0022 70 chr1 145089600 145099800 0 85 chr1 145101300 145106400 0 85 chr1 145107600 145128900 0 87 chr1 145131000 145131300 0 79 chr1 145132500 145135200 0 79 chr1 145136700 145137300 0 79 chr1 145138800 145139100 0 79 chr1 145140900 145142100 0 78 chr1 145143600 145146000 0 78 chr1 145147500 145148700 0 78 chr1 145150200 145150500 0.0417 64 chr1 145151700 145152000 0.0417 64 chr1 145154100 145155900 0 68 chr1 145157400 145167900 0 78 chr1 145170900 145171500 0.0158 57 chr1 145173900 145176300 0 75 chr1 145177500 145178700 0 75 chr1 145180200 145181100 0 75 chr1 145182300 145182600 0 75 chr1 145184400 145185600 0.0127 68 chr1 145187400 145187700 0.0087 85 chr1 145195800 145196400 0.0264 56 chr1 145199400 145203300 0 83 chr1 145205700 145206000 0.0244 65 chr1 145208400 145208700 0.0244 65 chr1 145211100 145212300 0 72 chr1 145213800 145214100 0.064 75 chr1 145216800 145217100 0.0187 98 chr1 145220700 145221000 0.0044 63 chr1 145236300 145236600 0.0146 77 chr1 145239900 145240500 0 64 chr1 145242000 145246800 0 74 chr1 145250100 145254300 0 74 chr1 145257900 145258200 0.0084 71 chr1 145264800 145266000 0.0146 66 chr1 145267500 145268400 0 49 chr1 145274700 145275900 0.0002 64 chr1 145277400 145277700 0.0003 75 chr1 145279500 145280100 0.0003 75 chr1 145283100 145283400 0.0278 62 chr1 145284900 145286100 0.0671 61 chr1 145292700 145393200 0 183 chr1 145401300 145401600 0.0593 71 chr1 145406700 145407000 0.1795 70 chr1 145411800 145414800 0.0278 62 chr1 145416300 145416600 0 73 chr1 145418100 145419000 0 73 chr1 145420500 145421100 0.0886 69 chr1 145433400 145433700 0.163 69 chr1 145441800 145442100 0.1154 59 chr1 145443600 145443900 0.0222 64 chr1 145447500 145447800 0.1832 43 chr1 145449000 145449300 0.0808 66 chr1 145451100 145451400 0.1246 72 chr1 145456500 145457700 0 73 chr1 145467900 145468200 0.147 54 chr1 145480800 145481100 0.0663 73 chr1 145483500 145483800 0.2127 61 chr1 145488600 145488900 0.0826 66 chr1 145491600 145492500 0.0486 70 chr1 145497900 145511700 0 76 chr1 145514400 145514700 0 65 chr1 145521600 145522500 0 63 chr1 145527300 145527600 0.0329 71 chr1 145540500 145541100 0.0182 52 chr1 145550400 145551300 0 60 chr1 145573200 145573500 0.0852 83 chr1 145581600 145581900 0.033 79 chr1 145584600 145584900 0.1095 65 chr1 145589700 145590000 0.1279 90 chr1 145618500 145618800 0.0216 56 chr1 145622400 145622700 0.04 55 chr1 145630800 145632000 0.0113 48 chr1 145633200 145633800 0.0039 49 chr1 145643700 145644300 0.0306 53 chr1 145678200 145678500 0.0067 55 chr1 145682100 145682400 0.0805 69 chr1 145810200 145811700 0.0086 45 chr1 145816200 145817400 0.0075 72 chr1 145821600 145823100 0.128 71 chr1 145924800 145925100 0.1376 56 chr1 146060400 146061000 0.0965 60 chr1 146063700 146066700 0 93 chr1 146067900 146069100 0.0321 84 chr1 146070300 146125500 0 219 chr1 146126700 146128500 0 90 chr1 146129700 146133900 0 90 chr1 146137200 146141100 0 79 chr1 146143500 146157900 0 85 chr1 146159700 146161500 0 70 chr1 146162700 146170500 0 82 chr1 146173200 146174100 0 82 chr1 146175900 146179200 0 77 chr1 146181000 146184900 0 77 chr1 146188500 146228100 0 99 chr1 146229300 146250300 0 84 chr1 146252100 146317800 0 87 chr1 146319000 146319600 0 71 chr1 146321100 146321400 0.0861 64 chr1 146327100 146327400 0.0992 55 chr1 146330100 146330400 0 61 chr1 146332800 146333100 0.0016 64 chr1 146334300 146335200 0.0016 64 chr1 146337000 146340900 0 94 chr1 146342400 146343900 0.0013 79 chr1 146346000 146349000 0.0013 79 chr1 146350200 146356500 0 90 chr1 146358000 146358300 0 90 chr1 146359800 146362200 0.0242 74 chr1 146367300 146367600 0.0482 69 chr1 146369100 146369700 0.0331 78 chr1 146396700 146397000 0.2819 60 chr1 146398200 146398500 0.176 57 chr1 146403000 146403600 0.0445 83 chr1 146414400 146414700 0.0188 67 chr1 146417100 146417400 0.0834 87 chr1 146421900 146422200 0.0834 87 chr1 146423400 146424600 0.0446 60 chr1 146428800 146429100 0.1077 70 chr1 146430300 146430600 0.1077 70 chr1 146433600 146433900 0.0839 73 chr1 146439300 146440800 0 81 chr1 146442300 146442600 0.0403 83 chr1 146444400 146446200 0.0403 83 chr1 146451300 146452200 0 99 chr1 146453700 146454000 0 99 chr1 146456100 146456400 0.0019 49 chr1 146460000 146461200 0.0015 81 chr1 146465100 146465700 0.0348 67 chr1 146479800 146480100 0.111 77 chr1 146485500 146485800 0.0831 48 chr1 146487600 146488200 0 75 chr1 146492400 146494800 0 72 chr1 146496000 146497800 0 72 chr1 146502900 146503200 0.0958 62 chr1 146506500 146528100 0 79 chr1 146532300 146533200 0 68 chr1 146535300 146538600 0 67 chr1 146543400 146543700 0.044 65 chr1 146545500 146545800 0.0104 69 chr1 146549100 146549400 0.0295 71 chr1 146550600 146551200 0.0006 51 chr1 146553900 146554500 0.016 65 chr1 146563200 146564700 0 53 chr1 146567100 146567400 0.1105 66 chr1 146570700 146571000 0.0033 58 chr1 146578800 146580300 0.0192 71 chr1 146587500 146588400 0.1401 73 chr1 146593500 146593800 0.0848 63 chr1 146599800 146600100 0.0795 74 chr1 146605200 146605500 0.0207 69 chr1 146607300 146607600 0.0207 69 chr1 146609700 146610000 0.0055 74 chr1 146611200 146611800 0.1235 63 chr1 146619000 146619900 0 74 chr1 146625600 146625900 0.0312 76 chr1 146634000 146634300 0.0184 58 chr1 146652900 146653200 0.029 78 chr1 146664900 146665200 0.0097 69 chr1 146675400 146676000 0.1243 63 chr1 146677800 146678400 0.1994 68 chr1 146681400 146681700 0.0547 54 chr1 146685600 146687700 0.0119 64 chr1 146692800 146693400 0.0772 56 chr1 146697300 146697600 0.1814 52 chr1 146709900 146710200 0.0394 55 chr1 146717400 146722800 0 97 chr1 146728800 146731500 0 73 chr1 146733900 146734200 0.1305 62 chr1 146741400 146741700 0.0276 68 chr1 146743800 146744100 0.0276 68 chr1 146747100 146747400 0.0523 56 chr1 146749200 146749500 0.1701 67 chr1 146753700 146754000 0.0431 59 chr1 146759400 146759700 0.029 48 chr1 146763000 146763600 0.0019 63 chr1 146765100 146765700 0.0088 65 chr1 146779500 146779800 0.0045 83 chr1 146786400 146786700 0.1849 67 chr1 146787900 146788200 0.1222 71 chr1 146790600 146791200 0.006 57 chr1 146795100 146795400 0.0102 50 chr1 146801400 146801700 0.1394 65 chr1 146802900 146804700 0.0291 66 chr1 146807700 146808000 0.1566 58 chr1 146811300 146811600 0.06 76 chr1 146823600 146823900 0.1536 65 chr1 146826000 146826600 0.0111 51 chr1 146835600 146835900 0.1777 66 chr1 146838900 146839200 0.0609 46 chr1 146841900 146842500 0.0061 64 chr1 146846400 146846700 0.0968 58 chr1 146853600 146855100 0.0375 73 chr1 146859000 146859900 0.0726 59 chr1 146862900 146863200 0.0559 63 chr1 146868900 146871900 0 121 chr1 146876400 146876700 0.0883 52 chr1 146886300 146886600 0.0558 63 chr1 146888100 146889600 0.0087 71 chr1 146892000 146892600 0.0233 60 chr1 146905200 146905500 0.1882 47 chr1 146908200 146909100 0 74 chr1 146913900 146914200 0.0586 57 chr1 146916000 146919600 0 69 chr1 146922300 146923800 0.0007 69 chr1 146931600 146931900 0.0414 71 chr1 146933700 146934000 0.0414 71 chr1 146955000 146955600 0.0453 74 chr1 146958600 146960100 0 66 chr1 146979000 146979900 0 72 chr1 146983500 146983800 0.0211 370 chr1 146985000 146985300 0.0211 370 chr1 146986800 146990400 0 408 chr1 146991900 146994300 0 408 chr1 146998500 146998800 0.1668 73 chr1 147015300 147015900 0.0178 58 chr1 147942600 147942900 0.146 45 chr1 147953400 147953700 0.0072 67 chr1 147955800 147956100 0.0111 52 chr1 147966600 147966900 0.0044 61 chr1 147982500 147982800 0.2361 61 chr1 148001100 148001400 0.0119 59 chr1 148003800 148005300 0.0765 60 chr1 148016100 148016400 0.0537 67 chr1 148026000 148026600 0.0217 60 chr1 148029600 148031400 0 65 chr1 148053900 148054200 0.0623 59 chr1 148056900 148057200 0.1885 50 chr1 148061700 148062000 0.0579 66 chr1 148065000 148065300 0.1211 69 chr1 148070400 148084800 0 77 chr1 148087500 148088700 0.0148 60 chr1 148095300 148095600 0.0414 52 chr1 148097700 148098000 0.1184 49 chr1 148104600 148105200 0.022 267 chr1 148107000 148107300 0.022 267 chr1 148109700 148110000 0.1315 92 chr1 148113600 148114200 0.0149 84 chr1 148127100 148128600 0.0047 64 chr1 148131600 148131900 0.0182 64 chr1 148156800 148157100 0.1456 67 chr1 148167900 148168200 0.1117 64 chr1 148169700 148170000 0.1117 64 chr1 148176300 148177800 0 75 chr1 148180200 148183800 0 75 chr1 148185600 148185900 0.0853 48 chr1 148187700 148188900 0 68 chr1 148195200 148197900 0 74 chr1 148200300 148202400 0 65 chr1 148205100 148226700 0 77 chr1 148238700 148239300 0 66 chr1 148240500 148241100 0 66 chr1 148243800 148244100 0.0782 70 chr1 148245300 148245900 0.006 72 chr1 148252500 148253400 0.033 67 chr1 148256700 148257000 0.0851 71 chr1 148281000 148282800 0.0041 68 chr1 148284600 148285800 0.0286 71 chr1 148298400 148299600 0.0017 62 chr1 148301400 148302600 0.0213 80 chr1 148419300 148419600 0.0753 51 chr1 148442700 148444800 0 76 chr1 148446000 148447500 0 76 chr1 148448700 148449000 0.0706 38 chr1 148450500 148450800 0.1534 50 chr1 148455300 148456500 0.0538 71 chr1 148460100 148461900 0 92 chr1 148463100 148463400 0.233 55 chr1 148470900 148471800 0.0692 68 chr1 148473300 148473600 0.0089 78 chr1 148476300 148476600 0.1192 55 chr1 148479000 148479300 0.113 41 chr1 148482000 148482300 0.0386 62 chr1 148484400 148484700 0.0797 69 chr1 148486500 148487100 0.0758 44 chr1 148491600 148494000 0 60 chr1 148495500 148496100 0.0107 80 chr1 148499100 148499400 0.0744 70 chr1 148506900 148508700 0.0632 72 chr1 148511100 148512300 0.091 66 chr1 148516200 148517400 0.0211 64 chr1 148518900 148519800 0.0341 78 chr1 148521000 148521300 0.0341 78 chr1 148531500 148531800 0.0027 45 chr1 148533000 148533300 0.0583 117 chr1 148535400 148559100 0 215 chr1 148560300 148584900 0 142 chr1 148588200 148590900 0 86 chr1 148594500 148600200 0 91 chr1 148601700 148604400 0 91 chr1 148605900 148607400 0 91 chr1 148609200 148609500 0.1503 56 chr1 148611000 148620600 0 80 chr1 148623300 148627200 0 80 chr1 148628400 148629000 0 80 chr1 148630500 148632000 0 85 chr1 148633500 148636500 0 85 chr1 148639200 148659600 0 81 chr1 148662000 148701000 0 87 chr1 148702500 148712400 0 110 chr1 148713600 148716900 0 110 chr1 148718700 148819800 0 110 chr1 148822200 148823400 0 107 chr1 148824600 148876500 0 107 chr1 148877700 148909800 0 107 chr1 148911300 148911600 0.0032 93 chr1 148912800 148914900 0.0032 93 chr1 148916400 148916700 0 69 chr1 148918200 148919100 0 69 chr1 148920300 148922100 0 69 chr1 148924500 148924800 0.0768 66 chr1 148926000 148926300 0.0731 69 chr1 148928100 148929000 0 52 chr1 148930800 148932300 0.0017 81 chr1 148935300 148936500 0 57 chr1 148938900 148939200 0.0573 60 chr1 148941000 148941300 0.0033 69 chr1 148942500 148943700 0.0033 69 chr1 148956900 148957500 0 53 chr1 148960500 148960800 0.044 55 chr1 148965600 148966200 0.1428 60 chr1 148974000 148974900 0 53 chr1 148977000 148977600 0.0278 50 chr1 148988400 148988700 0.0032 68 chr1 148990800 148991100 0.0577 59 chr1 148993200 148994100 0.0331 62 chr1 149004600 149004900 0.012 70 chr1 149006700 149008500 0 76 chr1 149011200 149012100 0 72 chr1 149013300 149014500 0.0204 69 chr1 149018700 149020500 0.0099 77 chr1 149027700 149028000 0.0352 65 chr1 149042400 149042700 0.1815 72 chr1 149050800 149051100 0.0303 99 chr1 149052900 149053500 0.0303 99 chr1 149056200 149058600 0 104 chr1 149061600 149061900 0.1676 92 chr1 149063100 149063400 0.2959 94 chr1 149083200 149083500 0.1371 85 chr1 149090700 149091000 0.1207 65 chr1 149093700 149094600 0.098 73 chr1 149096400 149096700 0.0002 65 chr1 149107200 149110200 0 69 chr1 149112300 149112900 0.0019 79 chr1 149116800 149117100 0.0055 90 chr1 149119200 149119500 0.0055 90 chr1 149121300 149121900 0.0258 72 chr1 149128200 149130000 0.0593 75 chr1 149132400 149133900 0 74 chr1 149140800 149141100 0.1027 61 chr1 149142600 149143500 0.0121 78 chr1 149145300 149145900 0.0539 88 chr1 149148900 149149500 0.0236 78 chr1 149155500 149155800 0.0145 50 chr1 149161800 149162100 0.0566 69 chr1 149163900 149164200 0.0135 87 chr1 149165400 149165700 0.0135 87 chr1 149169300 149169600 0.0383 58 chr1 149174100 149174700 0.0296 84 chr1 149177700 149178300 0.0919 77 chr1 149179800 149180700 0.022 68 chr1 149187300 149190300 0 77 chr1 149192100 149192700 0 61 chr1 149193900 149194200 0 61 chr1 149198700 149199300 0.0314 89 chr1 149201400 149202300 0 59 chr1 149204700 149205000 0.1865 62 chr1 149207700 149209800 0 89 chr1 149211900 149214600 0.0194 73 chr1 149216100 149217300 0.0363 68 chr1 149220600 149222400 0 72 chr1 149223600 149230500 0 84 chr1 149232600 149250000 0 92 chr1 149251200 149259000 0 92 chr1 149261100 149264400 0 92 chr1 149267100 149274000 0 97 chr1 149275200 149293200 0 97 chr1 149294700 149303400 0 107 chr1 149304600 149305800 0 107 chr1 149307000 149308200 0.0284 62 chr1 149310000 149313600 0 90 chr1 149315700 149363400 0 90 chr1 149366700 149368200 0.03 62 chr1 149372400 149376600 0 95 chr1 149379300 149380500 0.088 69 chr1 149389800 149392500 0.0123 66 chr1 149394000 149394300 0.0659 68 chr1 149397000 149397900 0 95 chr1 149399400 149399700 0 69 chr1 149401500 149403900 0 69 chr1 149405700 149408400 0 70 chr1 149411700 149412000 0.0258 73 chr1 149416200 149416500 0.0192 60 chr1 149420700 149422200 0.0004 74 chr1 149426100 149426400 0.023 52 chr1 149427600 149428200 0.0048 57 chr1 149430900 149431500 0.0126 68 chr1 149434500 149444400 0 100 chr1 149448000 149448300 0.0018 68 chr1 149450700 149459700 0 82 chr1 149463600 149463900 0 71 chr1 149465100 149467800 0 71 chr1 149469300 149470800 0 71 chr1 149473200 149476500 0 94 chr1 149481900 149484300 0.0102 94 chr1 149485500 149486400 0 83 chr1 149488500 149554200 0 169 chr1 149559000 149559300 0 75 chr1 149566800 149567400 0.0996 70 chr1 149568600 149569200 0 82 chr1 149570400 149577600 0 82 chr1 149580000 149581500 0 82 chr1 149583600 149585100 0 82 chr1 149587800 149589900 0.0121 83 chr1 149591100 149591400 0.0121 83 chr1 149593200 149593500 0.0338 69 chr1 149595000 149598300 0.0299 63 chr1 149606700 149607000 0.0856 38 chr1 149609100 149609700 0.0467 94 chr1 149614500 149614800 0.068 72 chr1 149617800 149618400 0.0256 47 chr1 149621100 149621700 0 72 chr1 149623200 149623800 0.0024 82 chr1 149625000 149625300 0.0024 82 chr1 149640000 149640300 0.1317 47 chr1 149643000 149643300 0.1219 55 chr1 149649300 149649600 0.1598 60 chr1 149651100 149651700 0.0245 70 chr1 149654700 149655000 0.1604 47 chr1 149659800 149660100 0.0868 61 chr1 149675700 149676300 0.0045 67 chr1 149678100 149679600 0.0632 58 chr1 149681100 149683200 0.0022 85 chr1 149684700 149685000 0.0022 85 chr1 149687100 149687400 0.0465 65 chr1 149688600 149689500 0.0124 67 chr1 149696400 149708400 0 81 chr1 149710800 149712000 0 66 chr1 149714400 149715600 0.0123 61 chr1 149717100 149719200 0 69 chr1 149722800 149725200 0.0459 69 chr1 149728500 149728800 0.0634 61 chr1 149734200 149734500 0.025 63 chr1 149736000 149737200 0.0703 68 chr1 149740800 149741100 0.1155 64 chr1 149742300 149742900 0 59 chr1 149755800 149756100 0.0518 64 chr1 149758200 149758500 0.1983 64 chr1 149767800 149769000 0.0156 59 chr1 149772000 149773500 0 66 chr1 149775900 149776200 0.1227 62 chr1 149783100 149784000 0 70 chr1 149791800 149792100 0.1275 68 chr1 149794500 149795700 0.0063 68 chr1 149822100 149843400 0 81 chr1 149850600 149871900 0 83 chr1 150728100 150728700 0.1538 55 chr1 151599900 151601700 0.0506 78 chr1 151647300 151647600 0.1975 85 chr1 152213700 152214000 0.008 175 chr1 152216700 152218200 0 306 chr1 152269500 152271300 0 52 chr1 152305800 152307000 0.0842 68 chr1 152490300 152491500 0.0011 78 chr1 153278700 153279000 0.0491 78 chr1 155189100 155190000 0 43 chr1 155213100 155214300 0 70 chr1 155233800 155235000 0 70 chr1 155610900 155611200 0.0376 66 chr1 155618700 155619000 0.0209 63 chr1 155626800 155629800 0.028 81 chr1 155633100 155635500 0 95 chr1 155701200 155701500 0.0394 97 chr1 155746500 155746800 0.1094 65 chr1 155757600 155758200 0.1238 63 chr1 156179700 156180000 0.2474 63 chr1 156558600 156559200 0 53 chr1 158240700 158241000 0.1121 67 chr1 158761800 158763000 0.008 69 chr1 158954100 158954400 0.0501 74 chr1 158955600 158955900 0.116 74 chr1 159456900 159457200 0.0873 57 chr1 159526800 159527100 0.0794 61 chr1 161440800 161444100 0 377 chr1 161445300 161458500 0 377 chr1 161460300 161471700 0 345 chr1 161573400 161578200 0 85 chr1 161579700 161586300 0 85 chr1 161588100 161589000 0 67 chr1 161613600 161613900 0.0164 68 chr1 161640000 161640600 0.0063 22 chr1 161641800 161642100 0.0081 48 chr1 161651100 161651700 0.0038 55 chr1 161653800 161670900 0 75 chr1 161673900 161674200 0.0272 58 chr1 162738300 162739200 0.006 91 chr1 163262400 163262700 0.0263 67 chr1 163641000 163641900 0.0168 90 chr1 163643700 163644300 0.0168 90 chr1 164463300 164464800 0.0346 121 chr1 165971100 165974100 0 114 chr1 166243200 166248000 0.0348 137 chr1 168055500 168055800 0.0323 67 chr1 168349200 168349500 0.0521 72 chr1 168351600 168352200 0.0612 93 chr1 171377700 171378000 0.165 85 chr1 171690600 171690900 0.0756 91 chr1 172059300 172061100 0.0333 74 chr1 172981800 172982100 0.0321 64 chr1 172983300 172986000 0.0044 73 chr1 172987800 172988100 0.1298 59 chr1 174235500 174237600 0.0112 95 chr1 174350400 174351000 0.0576 73 chr1 174379500 174380100 0.0021 93 chr1 174381900 174382800 0.0021 93 chr1 174590700 174595500 0 101 chr1 174630300 174630600 0.0423 85 chr1 174633900 174634200 0.2314 92 chr1 174843600 174848400 0 111 chr1 176132700 176133000 0.0024 21 chr1 176256300 176261100 0 116 chr1 176751300 176752200 0.0162 87 chr1 177638400 177639300 0.0236 114 chr1 178315800 178317000 0 81 chr1 178778400 178778700 0.0172 137 chr1 178804500 178805100 0.1071 117 chr1 178841400 178842600 0 101 chr1 180699300 180702300 0 95 chr1 180867000 180872700 0 120 chr1 181225500 181226700 0.0592 58 chr1 182508900 182510400 0.0063 70 chr1 184846200 184851300 0.0009 121 chr1 185004300 185004600 0.1429 165 chr1 185253900 185254200 0.1867 66 chr1 185255400 185255700 0.1867 66 chr1 185380200 185380500 0.0792 95 chr1 185890500 185891100 0.0936 83 chr1 186641100 186642000 0.156 133 chr1 186795600 186796200 0.0239 24 chr1 187344000 187348500 0 116 chr1 187598700 187603500 0 112 chr1 189025800 189026100 0.1147 26 chr1 189469500 189471000 0.0753 88 chr1 190730700 190731000 0.2258 59 chr1 190732500 190732800 0.148 92 chr1 191064000 191064300 0.2471 44 chr1 191069700 191070000 0.0579 58 chr1 192501600 192502800 0.0418 95 chr1 192504600 192506100 0.0418 95 chr1 193718400 193723500 0 103 chr1 195925500 195928800 0 92 chr1 196219500 196225200 0 114 chr1 196753200 196754400 0 45 chr1 196757100 196757400 0.0483 64 chr1 196758900 196759200 0.0483 64 chr1 196796100 196796400 0.0089 63 chr1 196819500 196819800 0.0346 59 chr1 196821300 196821600 0.0774 66 chr1 196838100 196839300 0 49 chr1 196842300 196844100 0 54 chr1 196847100 196847700 0.0188 26 chr1 196920900 196921200 0.0221 70 chr1 196943700 196944000 0.0128 63 chr1 197531400 197534100 0 102 chr1 197708100 197713800 0 111 chr1 198250500 198250800 0.1148 93 chr1 199023600 199025400 0 102 chr1 199469700 199470900 0 78 chr1 200797500 200797800 0.0506 95 chr1 200914800 200915400 0 72 chr1 202391700 202392000 0.007 11 chr1 204471300 204471600 0 59 chr1 205854300 205854600 0.0894 60 chr1 206153400 206153700 0.0215 56 chr1 206158800 206160300 0 63 chr1 206171100 206172000 0 77 chr1 206175900 206176200 0.1206 59 chr1 206180100 206180700 0.0179 63 chr1 206183400 206183700 0.0664 42 chr1 206185200 206190000 0 75 chr1 206192100 206192700 0.0039 68 chr1 206194800 206196600 0 63 chr1 206199300 206202900 0.0004 63 chr1 206204400 206205600 0.0846 76 chr1 206207700 206208300 0.0846 76 chr1 206211300 206212800 0.0649 64 chr1 206216700 206217000 0 71 chr1 206218800 206219700 0 71 chr1 206223300 206225100 0 67 chr1 206232600 206234100 0 83 chr1 206235300 206236800 0 83 chr1 206238000 206238600 0 83 chr1 206242500 206242800 0.1018 68 chr1 206244000 206244300 0.1018 68 chr1 206245800 206247900 0 90 chr1 206251800 206253000 0.0913 74 chr1 206256900 206257200 0.1776 66 chr1 206259900 206261400 0.0109 59 chr1 206264700 206265600 0 71 chr1 206269800 206272200 0 70 chr1 206274900 206275500 0.0163 75 chr1 206277300 206277600 0.0163 75 chr1 206279100 206279400 0.0233 73 chr1 206282100 206282700 0.0233 73 chr1 206287500 206289000 0.1385 56 chr1 206293500 206294400 0.0004 71 chr1 206297100 206297400 0.0907 68 chr1 206299200 206300700 0.0907 68 chr1 206302800 206303100 0.126 55 chr1 206308200 206308500 0.0012 60 chr1 206314800 206315100 0.1434 61 chr1 206316900 206317500 0.0083 77 chr1 206320200 206321700 0.0165 60 chr1 206323800 206324100 0.0013 68 chr1 206328300 206332200 0 105 chr1 206336100 206338800 0.0168 83 chr1 206349000 206349900 0.0757 67 chr1 206352000 206352600 0.0307 51 chr1 206359200 206359800 0.0382 92 chr1 206361000 206361300 0.0783 69 chr1 206364900 206365200 0.203 62 chr1 206366700 206367000 0.1319 99 chr1 206368200 206368500 0.0188 64 chr1 206372100 206373600 0.0019 73 chr1 206374800 206375100 0.0019 73 chr1 206377500 206378100 0.0199 54 chr1 206379300 206382000 0 81 chr1 206387400 206388900 0.0047 85 chr1 206391300 206393400 0.1159 69 chr1 206400300 206400900 0.0119 59 chr1 206402700 206403000 0.1806 71 chr1 206405100 206409300 0 83 chr1 207526800 207544200 0 69 chr1 207545700 207563700 0 69 chr1 207568500 207572100 0 58 chr1 207721800 207722400 0.0686 81 chr1 207732900 207733500 0.0835 77 chr1 207735600 207735900 0.0169 113 chr1 209913900 209919600 0 82 chr1 210443700 210444300 0 69 chr1 212849700 212850900 0.0009 84 chr1 213806700 213807000 0.2221 110 chr1 214868700 214870500 0.0419 51 chr1 215209500 215209800 0.0394 45 chr1 217691400 217695600 0 83 chr1 218009400 218014800 0 76 chr1 218072400 218073000 0.0039 75 chr1 219455700 219456600 0.0698 109 chr1 219610200 219611100 0.1811 68 chr1 219866400 219867000 0.016 40 chr1 220246500 220246800 0.034 59 chr1 220995900 220996800 0 136 chr1 222481200 222481800 0.0281 40 chr1 222489000 222489300 0.0386 80 chr1 222668400 222668700 0.0095 26 chr1 223317900 223319400 0.0166 101 chr1 223397100 223397400 0.0647 62 chr1 223398600 223399500 0.1019 72 chr1 223451100 223451700 0.0266 79 chr1 223635600 223636800 0 122 chr1 223890000 223890300 0.0632 68 chr1 223927800 223929300 0.0213 66 chr1 223930800 223931100 0.0213 66 chr1 223932600 223934700 0 68 chr1 223941300 223941600 0.0039 36 chr1 223950900 223951200 0.1232 36 chr1 223981200 223981500 0.0585 53 chr1 223988100 223988400 0.0625 68 chr1 224011800 224012100 0.2964 325 chr1 224015100 224016600 0.2077 439 chr1 224034000 224034300 0.1403 64 chr1 224059500 224059800 0 30 chr1 224340000 224340300 0.0779 41 chr1 224799600 224800200 0.076 141 chr1 226071600 226071900 0.1224 46 chr1 226114500 226114800 0.0645 36 chr1 226797900 226798200 0.0165 27 chr1 227493300 227496000 0.01 75 chr1 227497800 227499000 0.0059 72 chr1 227502300 227504100 0 71 chr1 227505300 227508000 0 71 chr1 227981400 227981700 0.1635 56 chr1 227985300 227985600 0.0849 52 chr1 228556500 228558300 0 325 chr1 228608400 228646800 0 773 chr1 231047400 231047700 0.2172 36 chr1 231780600 231780900 0.0081 36 chr1 232823700 232824000 0.065 83 chr1 234788100 234789300 0.065 70 chr1 234797100 234798300 0.0313 116 chr1 234804000 234804300 0.1416 99 chr1 234812400 234812700 0.1051 105 chr1 234814500 234814800 0.0623 123 chr1 234818400 234818700 0.152 74 chr1 235384200 235384500 0.2121 59 chr1 236035200 236035500 0.0302 105 chr1 236097000 236097300 0.2783 390 chr1 236386500 236388000 0 59 chr1 236713500 236715000 0 414 chr1 236756400 236756700 0.1186 14 chr1 237019800 237025200 0 110 chr1 237075600 237081300 0.0036 103 chr1 238689300 238689900 0.0431 109 chr1 239623800 239626800 0 103 chr1 239628900 239629200 0 103 chr1 239732400 239732700 0.0195 57 chr1 242045700 242051100 0 82 chr1 243030600 243031200 0.0389 74 chr1 243040500 243040800 0.0656 63 chr1 243045900 243046500 0.0178 50 chr1 243081600 243081900 0.0109 79 chr1 245103300 245103600 0.1551 58 chr1 245280900 245281200 0.0573 90 chr1 245819400 245820000 0.0105 118 chr1 245975400 245976600 0 18 chr1 245991900 245992200 0.0023 22 chr1 246388200 246389400 0 83 chr1 246484800 246485100 0.2527 74 chr1 246620100 246620400 0.1052 15 chr1 246818100 246819300 0 30 chr1 246864600 246864900 0.1618 14 chr1 247116000 247118700 0 47 chr1 247126200 247127400 0 57 chr1 247129200 247129800 0.0482 71 chr1 247170900 247172100 0 55 chr1 247219200 247219500 0.069 67 chr1 247354800 247355100 0.0551 45 chr1 247687500 247693200 0 97 chr1 247809600 247809900 0.0101 46 chr1 247870500 247870800 0.2659 175 chr1 247888500 247891200 0 100 chr1 247892400 247893900 0 100 chr1 248167200 248168400 0.0061 105 chr1 248169600 248170800 0.0061 105 chr1 248187900 248188800 0 64 chr1 248221200 248221800 0.0667 81 chr1 248408100 248409000 0.0298 129 chr1 248448300 248448900 0 72 chr1 248451000 248452500 0 72 chr1 248454000 248457000 0 65 chr1 248474700 248476500 0 74 chr1 248479800 248480100 0.1043 67 chr1 248483700 248484600 0 67 chr1 248486100 248493900 0 88 chr1 248495700 248498400 0 66 chr1 248499600 248500500 0 65 chr1 248502000 248519100 0 65 chr1 248529000 248543400 0 65 chr1 248544900 248546100 0 47 chr1 248547600 248548200 0.0118 60 chr1 248549400 248551500 0 68 chr1 248554200 248554500 0 72 chr1 248555700 248556000 0 72 chr1 248557200 248561700 0 72 chr1 248563800 248564400 0 77 chr1 248568000 248568300 0.0747 73 chr1 248571600 248573700 0 69 chr1 248636400 248637900 0.0007 68 chr1 248639700 248641500 0 68 chr1 248643300 248643900 0 68 chr1 248654100 248655000 0 55 chr1 248676600 248676900 0.0569 12 chr1 248747100 248748000 0.0083 29 chr1 248931300 248931600 0.1102 88 chr1 248932800 248933100 0.0485 68 chr1 248937900 248938200 0.0069 103 chr1 248939700 248943000 0.0069 103 chr1 248944500 248944800 0.0069 103 chr1 248946300 248946600 0.0337 14 chr10 9900 35400 0 302 chr10 36600 39000 0 302 chr10 40200 47100 0 302 chr10 321600 323100 0.0504 107 chr10 345600 346200 0.2067 46 chr10 465000 465300 0.1919 59 chr10 717900 718200 0.0922 41 chr10 735900 736200 0.2104 37 chr10 757200 757500 0.0324 40 chr10 777600 777900 0.1577 41 chr10 783900 784200 0.0562 47 chr10 952500 953400 0.0013 77 chr10 1046700 1047600 0 22 chr10 1235400 1240200 0.0942 172 chr10 1260900 1261200 0.2213 60 chr10 1460100 1460400 0.2983 44 chr10 1592400 1593000 0.2122 120 chr10 2522700 2523000 0.286 31 chr10 4815600 4815900 0.0423 12 chr10 4975800 4976100 0.0906 56 chr10 4991700 4992000 0.0362 58 chr10 5245500 5251200 0 90 chr10 6369600 6375600 0 69 chr10 7059000 7060200 0.0358 69 chr10 7061700 7062600 0.0385 84 chr10 7138500 7138800 0.0586 79 chr10 7140300 7141800 0.0586 79 chr10 8984400 8984700 0.0844 105 chr10 10692600 10692900 0.0684 95 chr10 11731800 11736900 0 107 chr10 12519600 12520800 0.0017 29 chr10 12775200 12776100 0 253 chr10 13155300 13155600 0.1149 70 chr10 13217700 13218600 0 62 chr10 15915900 15919200 0 75 chr10 15920400 15921000 0 75 chr10 17631000 17631300 0.0536 47 chr10 18031500 18032400 0.0421 76 chr10 19088700 19093800 0 101 chr10 19160400 19160700 0.0143 67 chr10 19238100 19238400 0 52 chr10 19285800 19286100 0.1409 64 chr10 19582500 19583100 0.0125 39 chr10 20538600 20539800 0.1201 63 chr10 20752800 20754300 0 89 chr10 20756100 20757000 0 89 chr10 21322800 21323100 0.0582 87 chr10 21430500 21431100 0.0126 73 chr10 22124400 22127100 0.0533 74 chr10 22404000 22404600 0.0084 80 chr10 23154000 23154600 0.0388 98 chr10 24656700 24657900 0.22 59 chr10 25516500 25516800 0.1065 77 chr10 25518600 25520400 0.0086 81 chr10 26893500 26894100 0.108 98 chr10 27281700 27282000 0.2201 47 chr10 29423400 29423700 0 28 chr10 29697300 29697600 0.1826 44 chr10 30945600 30945900 0.089 79 chr10 30952500 30953100 0.0273 86 chr10 31445700 31446000 0.1115 61 chr10 31448100 31448400 0.0917 82 chr10 31969200 31971600 0 184 chr10 32416800 32417100 0.2795 16 chr10 33510900 33516300 0 74 chr10 37066200 37066500 0.1362 70 chr10 37103700 37104300 0.0031 48 chr10 37111800 37112400 0.0005 61 chr10 37163100 37163700 0.0044 62 chr10 37167900 37177200 0 79 chr10 37179600 37182600 0 68 chr10 37184400 37189200 0 78 chr10 38263500 38265000 0.0095 74 chr10 38418600 38418900 0.0213 63 chr10 38424600 38424900 0.1032 44 chr10 38464500 38465100 0.0115 61 chr10 38469900 38470200 0.2354 46 chr10 38485500 38485800 0.2089 557 chr10 38487300 38487600 0.241 381 chr10 38489100 38490600 0.1539 3073 chr10 38494800 38495100 0.2795 223 chr10 38496600 38496900 0.2124 437 chr10 38501400 38501700 0.2659 829 chr10 38510100 38510400 0.2608 375 chr10 38513400 38513700 0.2334 291 chr10 38515200 38515500 0.2561 320 chr10 38517300 38517600 0.2203 432 chr10 38524200 38524500 0.2788 291 chr10 38525700 38526000 0.2237 424 chr10 38573100 38573700 0.1381 2536 chr10 38577600 38579700 0.1536 2263 chr10 38786100 38787600 0.2239 322 chr10 38791800 38792100 0.1933 317 chr10 38794800 38795100 0.2562 285 chr10 38817900 38818200 0.2173 323 chr10 38826300 38826600 0.277 242 chr10 38836800 38862300 0 206 chr10 38864100 38864400 0.1683 134 chr10 38867100 38867400 0.1683 134 chr10 38872500 38873400 0.0112 175 chr10 38876400 38876700 0 131 chr10 38877900 38878200 0 131 chr10 38879400 38879700 0 131 chr10 38880900 38882400 0.0935 132 chr10 38884200 38884500 0.0935 132 chr10 38886000 38886300 0.0935 132 chr10 38888100 38888400 0.238 94 chr10 38893800 38894100 0.1111 78 chr10 38896200 38901000 0 1407 chr10 38902500 38905200 0 1407 chr10 38911500 38911800 0.0971 150 chr10 38919600 38920500 0.2128 2075 chr10 39466500 39467700 0.0265 26 chr10 39469200 39470100 0.0005 60 chr10 39508800 39513900 0 79 chr10 39575700 39576300 0.1422 83 chr10 39606300 39607500 0 49 chr10 39609600 39609900 0.1253 16 chr10 39619800 39620100 0 58 chr10 39625500 39625800 0 22 chr10 39636000 39636300 0.0225 44 chr10 39701700 39702000 0 16 chr10 39708300 39708600 0.0349 11 chr10 39711300 39712500 0 127 chr10 39717600 39717900 0 14 chr10 39719100 39720600 0 145 chr10 39721800 39722400 0 16 chr10 39725700 39728400 0 103 chr10 39735000 39735300 0 19 chr10 39738600 39738900 0 24 chr10 39744900 39745800 0 79 chr10 39751800 39752100 0.0262 25 chr10 39757500 39758400 0.0437 78 chr10 39762600 39763800 0 24 chr10 39771300 39771900 0 60 chr10 39774300 39777900 0 60 chr10 39779700 39780000 0 18 chr10 39786300 39786900 0 52 chr10 39795000 39795300 0 25 chr10 39802500 39802800 0.1813 11 chr10 39804000 39805200 0 19 chr10 39809700 39810000 0.2306 59 chr10 39812700 39813300 0 44 chr10 39819900 39820200 0 16 chr10 39825900 39826200 0.2293 26 chr10 39828900 39829200 0 11 chr10 39830700 39831000 0.1286 15 chr10 39834300 39836400 0 150 chr10 39837600 39837900 0 34 chr10 39843900 39844200 0 13 chr10 39849900 39851400 0 10 chr10 39856200 39856500 0.0614 76 chr10 39859800 39860400 0 54 chr10 39861900 39863400 0 19 chr10 39869700 39870600 0 37 chr10 39871800 39872100 0 31 chr10 39874200 39874500 0 40 chr10 39876300 39876900 0 40 chr10 39882600 39882900 0 12 chr10 39884400 39884700 0 17 chr10 39897300 39898200 0 53 chr10 39900600 39900900 0 14 chr10 39904200 39906300 0 70 chr10 39912600 39912900 0 28 chr10 39915900 39916500 0.0485 69 chr10 39918000 39918300 0 15 chr10 39921000 39921300 0 27 chr10 39927000 39927300 0 26 chr10 39928500 39930300 0 36 chr10 39933900 39934200 0 17 chr10 39936000 39939000 0 840 chr10 39940800 39941100 0.1451 60 chr10 39946200 39946500 0 14 chr10 39953400 39955200 0 263 chr10 39961200 39969900 0 3165 chr10 39980100 39980700 0 47 chr10 39983100 39987600 0 1012 chr10 39989700 39993900 0 465 chr10 39996900 40002300 0 465 chr10 40004400 40005900 0 294 chr10 40019400 40020900 0 1990 chr10 40024500 40025100 0.0024 289 chr10 40029300 40029900 0 57 chr10 40046700 40048200 0 280 chr10 40059600 40061100 0 74 chr10 40065300 40074000 0 887 chr10 40076100 40087800 0 773 chr10 40090500 40090800 0 27 chr10 40097700 40102200 0 1747 chr10 40104600 40105800 0.0047 137 chr10 40107300 40107600 0.2694 146 chr10 40117800 40118100 0 36 chr10 40127400 40129800 0 2060 chr10 40134600 40139100 0 1903 chr10 40141800 40142400 0 203 chr10 40145100 40145700 0 46 chr10 40147500 40150200 0 267 chr10 40157400 40159200 0.0003 846 chr10 40162800 40163100 0 11 chr10 40167000 40167600 0 82 chr10 40169700 40170000 0 19 chr10 40183500 40188000 0 311 chr10 40191900 40193400 0 248 chr10 40200600 40209000 0 2419 chr10 40213200 40213800 0.0559 46 chr10 40216200 40224300 0 377 chr10 40227600 40228800 0 254 chr10 40232400 40232700 0.0308 32 chr10 40241700 40242000 0.0163 56 chr10 40246200 40248900 0 329 chr10 40262400 40263600 0 516 chr10 40265700 40269000 0 1958 chr10 40270800 40271100 0 12 chr10 40276800 40280700 0 1970 chr10 40283100 40291500 0 683 chr10 40294500 40294800 0.0148 32 chr10 40301100 40302900 0 73 chr10 40314600 40316100 0 479 chr10 40318500 40319100 0 55 chr10 40325400 40326900 0.0012 142 chr10 40332900 40334700 0 445 chr10 40335900 40338600 0 445 chr10 40344600 40347300 0 564 chr10 40364400 40369200 0 1934 chr10 40370700 40379400 0 552 chr10 40387500 40401000 0 991 chr10 40407900 40409700 0.0092 738 chr10 40412400 40416000 0 2950 chr10 40420800 40422600 0.0088 247 chr10 40425600 40426200 0 186 chr10 40428300 40428900 0 177 chr10 40435500 40437600 0 319 chr10 40441200 40442700 0 686 chr10 40445700 40446000 0.0311 58 chr10 40448100 40448400 0 30 chr10 40453200 40456500 0 404 chr10 40461000 40463400 0 904 chr10 40465200 40467900 0 907 chr10 40476000 40480500 0 710 chr10 40483200 40487400 0 965 chr10 40488600 40491600 0 201 chr10 40492800 40494600 0 249 chr10 40495800 40498200 0 255 chr10 40502400 40518900 0 615 chr10 40524600 40525200 0 239 chr10 40532100 40532700 0.001 110 chr10 40537500 40538700 0 125 chr10 40539900 40547400 0 634 chr10 40550700 40551000 0.1311 22 chr10 40555200 40558500 0 3094 chr10 40567500 40568100 0.0021 321 chr10 40574700 40576500 0 226 chr10 40578300 40580700 0 169 chr10 40582200 40582800 0 120 chr10 40584000 40584300 0.1375 50 chr10 40586400 40587600 0 244 chr10 40588800 40613100 0 3793 chr10 40614900 40615500 0.0054 246 chr10 40616700 40620600 0 309 chr10 40626900 40627200 0.0556 155 chr10 40633200 40633800 0 316 chr10 40639800 40641000 0 191 chr10 40642800 40651200 0 674 chr10 40652400 40653300 0 143 chr10 40658100 40671600 0 400 chr10 40673100 40674000 0.0118 431 chr10 40676100 40676700 0 759 chr10 40677900 40683900 0 759 chr10 40685400 40686300 0 188 chr10 40687800 40689300 0 222 chr10 40691100 40691700 0 82 chr10 40704600 40705500 0.0041 275 chr10 40709700 40710000 0.0914 28 chr10 40711500 40714200 0 422 chr10 40715400 40717800 0 422 chr10 40720500 40721400 0 215 chr10 40722900 40723500 0 20 chr10 40726800 40730100 0 738 chr10 40733400 40737300 0 633 chr10 40739100 40740900 0 158 chr10 40743300 40743600 0 26 chr10 40744800 40745700 0 157 chr10 40748700 40749300 0 178 chr10 40751100 40753500 0 412 chr10 40755900 40758300 0 340 chr10 40759800 40766400 0 483 chr10 40767900 40771800 0 599 chr10 40773300 40775400 0 229 chr10 40781400 40785000 0 262 chr10 40786500 40787400 0.0001 181 chr10 40790400 40790700 0 112 chr10 40792200 40794000 0 666 chr10 40795500 40807800 0 513 chr10 40810800 40812000 0 646 chr10 40814400 40818600 0 373 chr10 40821600 40823400 0 400 chr10 40827300 40828800 0 752 chr10 40830000 40839600 0 752 chr10 40841400 40842300 0 752 chr10 40843800 40855500 0 1015 chr10 40862100 40864200 0 231 chr10 40866300 40867500 0 102 chr10 40869900 40871400 0 504 chr10 40873200 40873500 0 34 chr10 40874700 40876200 0 213 chr10 40878000 40881000 0 525 chr10 40882500 40883700 0 273 chr10 40886100 40886400 0 10 chr10 40888500 40889700 0.008 184 chr10 40891800 40898700 0 1252 chr10 40900200 40901100 0 116 chr10 40903200 40907100 0 359 chr10 40908300 40908900 0.1968 182 chr10 40911600 40912800 0 261 chr10 40917900 40920900 0 308 chr10 40923900 40927200 0 1318 chr10 40928700 40929000 0 1318 chr10 40931400 40936500 0 803 chr10 40937700 40943400 0 803 chr10 40944900 40949100 0 241 chr10 40954200 40958400 0 267 chr10 40960800 40969200 0 548 chr10 40970400 40972200 0 624 chr10 40973400 40984500 0 2674 chr10 40986000 40989300 0 571 chr10 40990800 40992900 0 782 chr10 40994100 40994700 0 135 chr10 40998600 41001900 0 473 chr10 41004900 41007000 0 244 chr10 41008200 41009700 0.001 259 chr10 41010900 41014200 0 379 chr10 41015400 41018400 0 357 chr10 41019900 41022000 0 357 chr10 41025300 41026500 0 260 chr10 41027700 41030400 0 260 chr10 41031600 41033400 0 260 chr10 41035800 41036400 0 822 chr10 41037600 41037900 0.0009 606 chr10 41039100 41039400 0.0009 606 chr10 41042100 41048700 0 356 chr10 41049900 41055600 0 356 chr10 41056800 41057400 0 105 chr10 41060700 41063100 0 160 chr10 41066400 41079300 0 541 chr10 41080800 41081100 0.127 80 chr10 41082300 41084700 0 465 chr10 41088600 41090700 0 1383 chr10 41096400 41096700 0 130 chr10 41098500 41099400 0 130 chr10 41100600 41101800 0 143 chr10 41104500 41106000 0.0015 530 chr10 41107500 41107800 0 23 chr10 41109300 41112900 0 337 chr10 41114700 41115000 0 36 chr10 41117400 41119500 0 474 chr10 41120700 41121600 0 474 chr10 41124300 41125800 0 765 chr10 41128200 41134200 0 2057 chr10 41135700 41138100 0 410 chr10 41139900 41140500 0 410 chr10 41143800 41145300 0 506 chr10 41148900 41152800 0 248 chr10 41154000 41158800 0 435 chr10 41160600 41160900 0 29 chr10 41162400 41164800 0 286 chr10 41166600 41166900 0 180 chr10 41169600 41171100 0.0085 151 chr10 41172300 41175300 0 517 chr10 41176500 41180700 0 500 chr10 41181900 41183400 0 174 chr10 41186400 41189100 0 569 chr10 41190600 41198700 0 569 chr10 41199900 41203500 0 263 chr10 41204700 41207700 0 263 chr10 41209200 41212500 0 268 chr10 41214900 41216400 0 188 chr10 41217600 41220000 0 188 chr10 41222100 41224200 0 114 chr10 41225400 41226300 0 66 chr10 41228700 41229300 0.0051 68 chr10 41231400 41232300 0 468 chr10 41235000 41237700 0 437 chr10 41239200 41240700 0 114 chr10 41243400 41251200 0 437 chr10 41255400 41258700 0 109 chr10 41260800 41264400 0 396 chr10 41266800 41268900 0 396 chr10 41270100 41273400 0 194 chr10 41274900 41277300 0 629 chr10 41279400 41293500 0 629 chr10 41295600 41296500 0 500 chr10 41299500 41301300 0 213 chr10 41302800 41306100 0 456 chr10 41307600 41309100 0 456 chr10 41310300 41312700 0 456 chr10 41313900 41314500 0 276 chr10 41315700 41316600 0 53 chr10 41319900 41323200 0 491 chr10 41326200 41327700 0 265 chr10 41328900 41336400 0 327 chr10 41338500 41342700 0 197 chr10 41344500 41356200 0 189 chr10 41358900 41360100 0 117 chr10 41364300 41368500 0 204 chr10 41370300 41374500 0 341 chr10 41376000 41376300 0 499 chr10 41377500 41378700 0 499 chr10 41379900 41384700 0 499 chr10 41387400 41391000 0 207 chr10 41395200 41395800 0 85 chr10 41397000 41397900 0 85 chr10 41399400 41404500 0 287 chr10 41405700 41406900 0 2845 chr10 41408700 41419800 0 2845 chr10 41422500 41422800 0 539 chr10 41424300 41430900 0 539 chr10 41432700 41433000 0 539 chr10 41436300 41441400 0 990 chr10 41442600 41448300 0 990 chr10 41449500 41450400 0 73 chr10 41454600 41456700 0 310 chr10 41460600 41461800 0 275 chr10 41466600 41466900 0 89 chr10 41468700 41469000 0 89 chr10 41470800 41474400 0 285 chr10 41475900 41478300 0 218 chr10 41481900 41484000 0 495 chr10 41488800 41490000 0 78 chr10 41493900 41496000 0 567 chr10 41497800 41508300 0 480 chr10 41510100 41518500 0 480 chr10 41520000 41524500 0 480 chr10 41525700 41528700 0 407 chr10 41530500 41533800 0 422 chr10 41535600 41543700 0 402 chr10 41544900 41546100 0 98 chr10 41548200 41550000 0.0249 81 chr10 41551200 41552400 0.0463 119 chr10 41556600 41557800 0.1901 161 chr10 41564100 41564400 0.0067 741 chr10 41565900 41566200 0.0067 741 chr10 41573100 41573400 0.125 70 chr10 41575200 41576100 0.0643 324 chr10 41585400 41585700 0.1571 238 chr10 41589000 41589600 0.1606 245 chr10 41693700 41706300 0 126 chr10 41713500 41713800 0.216 97 chr10 41857200 41857800 0.1456 3061 chr10 41859000 41881200 0.0388 15646 chr10 41883000 41883900 0.2488 17851 chr10 41885100 41889600 0.2151 11089 chr10 41890800 41904300 0.1308 10736 chr10 41905800 41906700 0.2274 3527 chr10 41908500 41911200 0.1887 3654 chr10 41915400 41916300 0.1021 1068 chr10 42066000 42066300 0.0398 1036 chr10 42069300 42069600 0.0862 746 chr10 42071100 42073200 0.0028 3747 chr10 42076500 42077400 0.0028 3747 chr10 42082200 42082800 0.0194 2415 chr10 42085200 42085800 0.1727 540 chr10 42212400 42212700 0.0506 54 chr10 42299100 42299700 0.1305 710 chr10 42301500 42301800 0.2785 329 chr10 42304200 42304800 0.0708 1830 chr10 42309000 42309300 0.2675 332 chr10 42312600 42312900 0.2649 268 chr10 42315000 42315300 0.2574 271 chr10 42318600 42318900 0.2499 345 chr10 42436500 42436800 0.2156 62 chr10 42995100 42995400 0.0872 60 chr10 43422600 43423200 0.0068 44 chr10 44222400 44223300 0 58 chr10 45010200 45011100 0.0283 67 chr10 45680100 45680400 0.0685 44 chr10 45685500 45685800 0.0787 70 chr10 45689400 45690600 0.0541 82 chr10 45692700 45693300 0.0174 55 chr10 45698400 45699000 0.0073 65 chr10 45703500 45703800 0.1367 70 chr10 45737100 45737400 0.0786 69 chr10 45740100 45740400 0.2701 69 chr10 45747900 45748200 0.1064 41 chr10 45752700 45753000 0.1883 64 chr10 45760200 45760800 0.0297 59 chr10 45767700 45768000 0.0579 61 chr10 45773100 45775200 0 74 chr10 45777600 45778500 0 74 chr10 45781800 45782100 0.0717 51 chr10 45827700 45829200 0.0441 62 chr10 45833100 45834000 0.1129 85 chr10 45835500 45835800 0.0591 89 chr10 45840600 45840900 0.0303 77 chr10 45845700 45846000 0.1667 51 chr10 45886200 45886500 0.0823 67 chr10 45888600 45888900 0.2514 48 chr10 45894300 45894600 0.1445 57 chr10 45902400 45904200 0 68 chr10 45906000 45906600 0 66 chr10 45908400 45908700 0.0764 72 chr10 45961500 45961800 0.0997 55 chr10 46108500 46110000 0.0624 71 chr10 46111800 46112100 0.0834 44 chr10 46114500 46115100 0.0286 72 chr10 46116300 46116600 0.1355 82 chr10 46117800 46118100 0.1856 25 chr10 46121400 46122300 0 62 chr10 46123500 46124400 0 62 chr10 46129800 46130100 0.0475 70 chr10 46135200 46137000 0.0398 76 chr10 46139400 46143600 0 98 chr10 46144800 46145700 0 98 chr10 46146900 46147200 0.0516 56 chr10 46149900 46150200 0.0516 56 chr10 46151700 46153200 0.0024 64 chr10 46158600 46159500 0.0528 69 chr10 46205700 46215300 0 72 chr10 46333500 46334100 0.0563 66 chr10 46344300 46345800 0.1533 56 chr10 46348800 46350300 0 76 chr10 46351800 46352400 0 76 chr10 46362000 46362300 0.0265 66 chr10 46369500 46370100 0.0126 81 chr10 46377000 46389300 0 100 chr10 46400400 46401000 0.0137 59 chr10 46402800 46403400 0.0969 51 chr10 46405800 46406100 0.0236 48 chr10 46411800 46413000 0.0321 67 chr10 46416900 46417200 0.0398 52 chr10 46418700 46421700 0 80 chr10 46423500 46423800 0 80 chr10 46428300 46428600 0.127 53 chr10 46434300 46434600 0.2225 38 chr10 46436100 46437600 0.0192 53 chr10 46446300 46446600 0.0089 64 chr10 46447800 46450800 0 77 chr10 46452600 46458000 0 75 chr10 46459500 46461900 0 84 chr10 46463400 46467300 0 84 chr10 46468500 46472700 0 84 chr10 46474200 46474500 0 79 chr10 46475700 46476600 0 79 chr10 46477800 46482300 0 79 chr10 46485900 46487700 0 71 chr10 46488900 46489200 0 71 chr10 46491300 46514100 0 84 chr10 46562100 46562700 0.0403 73 chr10 46566000 46568400 0.0801 75 chr10 46570500 46572300 0.0045 70 chr10 46574400 46575600 0.0102 75 chr10 46577100 46577400 0.1294 74 chr10 46579200 46580100 0 73 chr10 46581300 46583700 0 73 chr10 46584900 46593000 0 73 chr10 46594200 46595100 0 73 chr10 46599000 46600500 0 75 chr10 46603200 46605900 0 75 chr10 46607700 46608300 0 75 chr10 46609500 46616700 0 75 chr10 46618200 46618500 0 75 chr10 46620900 46629900 0 68 chr10 46631700 46632000 0 68 chr10 46633200 46633500 0 68 chr10 46635000 46636500 0.019 59 chr10 46643100 46644000 0.02 68 chr10 46649100 46649700 0.0014 56 chr10 46659600 46659900 0.0876 52 chr10 46662600 46664700 0 67 chr10 46677300 46679400 0.0599 63 chr10 46685100 46685700 0 62 chr10 46691400 46692000 0 43 chr10 46696200 46707000 0 66 chr10 46710300 46711500 0 50 chr10 46715700 46716000 0.1993 54 chr10 46728900 46733700 0.0038 65 chr10 46734900 46739400 0 66 chr10 46741800 46742100 0.0525 55 chr10 46748400 46748700 0.0795 77 chr10 46754400 46757400 0 74 chr10 46761600 46761900 0.0623 47 chr10 46764300 46764600 0.0332 79 chr10 46776900 46777500 0.1498 72 chr10 46792500 46792800 0.1416 56 chr10 46821300 46821900 0.0053 62 chr10 46827900 46828500 0.0012 76 chr10 46830600 46830900 0.1294 45 chr10 46832100 46833000 0.0579 62 chr10 46842000 46842300 0.0393 85 chr10 46845600 46845900 0.0007 88 chr10 46847400 46847700 0.0007 88 chr10 46849800 46850100 0.0007 88 chr10 46851600 46851900 0 76 chr10 46853400 46853700 0.0013 82 chr10 46854900 46858800 0.0013 82 chr10 46864500 46865700 0.0408 70 chr10 46884300 46884600 0.0026 67 chr10 46886700 46887000 0.0524 66 chr10 46895400 46895700 0.1415 65 chr10 46899600 46900500 0 51 chr10 46901700 46905600 0 61 chr10 46907400 46910400 0 83 chr10 46911600 46918500 0 83 chr10 46919700 46920300 0 83 chr10 46924200 46924500 0.0282 68 chr10 46928700 46929300 0.0428 67 chr10 46932900 46933200 0.0478 65 chr10 46938300 46938900 0.0021 68 chr10 46941900 46944600 0 68 chr10 46945800 46946400 0.0177 60 chr10 46949700 46950000 0.0119 48 chr10 46951800 46952100 0.0652 58 chr10 46955700 46958700 0 58 chr10 46959900 46966800 0 73 chr10 46968900 46976400 0 73 chr10 46977600 46978500 0 82 chr10 46980300 46982100 0.0085 82 chr10 46984500 46987800 0 73 chr10 46989000 46991700 0 62 chr10 47461800 47463000 0.0635 75 chr10 47470500 47476200 0 80 chr10 47477400 47481300 0 80 chr10 47490600 47491500 0 80 chr10 47493900 47494200 0.053 79 chr10 47499600 47499900 0.152 99 chr10 47505000 47505300 0.1 73 chr10 47508300 47509500 0.1562 71 chr10 47511600 47512800 0.0224 66 chr10 47514600 47518200 0 67 chr10 47519700 47520300 0 69 chr10 47522700 47523000 0.021 71 chr10 47524500 47525100 0 80 chr10 47526900 47527200 0.0407 66 chr10 47530800 47534100 0 76 chr10 47535600 47536500 0 76 chr10 47537700 47539200 0 76 chr10 47542200 47546100 0 76 chr10 47562300 47564400 0.079 67 chr10 47567100 47570100 0.0268 45 chr10 47574600 47576400 0 65 chr10 47577600 47579700 0.004 59 chr10 47582700 47584800 0 69 chr10 47591700 47592000 0.1187 45 chr10 47596200 47596500 0.2591 47 chr10 47597700 47598600 0.0711 49 chr10 47601000 47603100 0 65 chr10 47605200 47605500 0.0156 44 chr10 47607600 47611200 0 67 chr10 47613300 47615100 0 64 chr10 47616300 47616900 0 64 chr10 47618100 47618400 0 28 chr10 47619600 47621400 0 28 chr10 47623500 47625300 0 47 chr10 47628900 47630100 0 56 chr10 47633400 47636100 0 74 chr10 47638200 47638800 0.0035 72 chr10 47640300 47644200 0 72 chr10 47648700 47649000 0.0095 67 chr10 47654700 47655300 0.0026 65 chr10 47656500 47656800 0.1503 49 chr10 47661000 47661600 0.0922 55 chr10 47662800 47663100 0.0922 55 chr10 47677500 47678400 0 69 chr10 47691900 47692500 0 56 chr10 47697600 47697900 0.0789 64 chr10 47706300 47706600 0.0532 63 chr10 47709600 47709900 0.1272 69 chr10 47711700 47715300 0 63 chr10 47716800 47719800 0 68 chr10 47723100 47723400 0.0296 57 chr10 47725200 47726400 0.0069 62 chr10 47727600 47728500 0 69 chr10 47730000 47730300 0.0158 80 chr10 47731500 47732400 0 65 chr10 47736000 47736300 0.0385 65 chr10 47739300 47739600 0.0227 57 chr10 47741100 47742300 0.0227 57 chr10 47746200 47747100 0.0544 76 chr10 47748900 47749200 0.0238 61 chr10 47750400 47754900 0 70 chr10 47756100 47760300 0 76 chr10 47764500 47764800 0.0697 75 chr10 47766300 47766600 0.0011 63 chr10 47770200 47771400 0.0231 74 chr10 47772900 47775000 0.0015 65 chr10 47779200 47780400 0 72 chr10 47870400 47894100 0 81 chr10 47897100 47898600 0 72 chr10 47902500 47904900 0 79 chr10 47906100 47906700 0 79 chr10 47907900 47908800 0 79 chr10 47910000 47920200 0 79 chr10 47922000 47924400 0 79 chr10 47926200 47929500 0 79 chr10 47931600 47936700 0 75 chr10 47937900 47938500 0.0375 54 chr10 47945700 47946000 0.0863 64 chr10 47948100 47948400 0.1963 68 chr10 47955900 47956500 0.1099 52 chr10 47961600 47966100 0 72 chr10 47967600 47967900 0.0629 65 chr10 47971500 47972700 0.0257 68 chr10 47978400 47978700 0.0155 51 chr10 47981400 47981700 0.0235 48 chr10 47983500 47984100 0 58 chr10 47987100 47991300 0 70 chr10 47996400 47996700 0.1188 59 chr10 47999100 48000300 0.0029 61 chr10 48002100 48002400 0.1506 63 chr10 48006600 48006900 0.0019 53 chr10 48008700 48009000 0.0734 64 chr10 48013200 48013500 0.054 68 chr10 48016200 48017700 0.054 68 chr10 48020100 48021000 0 72 chr10 48022500 48026400 0 64 chr10 48027600 48029100 0 54 chr10 48030900 48031200 0 89 chr10 48032400 48033300 0 89 chr10 48035100 48035400 0.0027 71 chr10 48036600 48037200 0.0027 71 chr10 48039000 48042300 0 77 chr10 48043800 48048900 0 77 chr10 48050400 48054000 0 77 chr10 48056100 48056400 0 77 chr10 48058500 48058800 0 54 chr10 48060900 48067200 0 68 chr10 48069900 48072000 0 78 chr10 48073500 48074400 0 81 chr10 48076500 48082800 0 81 chr10 48084900 48096300 0 81 chr10 48099600 48100200 0.0899 46 chr10 48101700 48102000 0.0088 62 chr10 48105300 48105900 0 60 chr10 48107100 48110700 0 60 chr10 48113100 48113700 0 56 chr10 48114900 48117300 0.0701 58 chr10 48118500 48119100 0.0701 58 chr10 48120600 48120900 0.0602 59 chr10 48122400 48123000 0.0044 59 chr10 48124500 48124800 0.0311 55 chr10 48127200 48127500 0.0689 57 chr10 48130500 48132300 0 83 chr10 48133500 48144600 0 83 chr10 48148200 48150000 0.0049 64 chr10 48151500 48152100 0.0058 43 chr10 48167100 48167400 0.0128 81 chr10 48179100 48179400 0.191 65 chr10 49855200 49855500 0.0404 61 chr10 49857900 49858200 0.0456 57 chr10 49863300 49863600 0.0504 46 chr10 49870800 49873200 0 70 chr10 49875000 49875600 0.0026 71 chr10 50000100 50001000 0 101 chr10 50002500 50003400 0 101 chr10 50080500 50080800 0.1558 46 chr10 50085300 50085600 0.1311 48 chr10 50093400 50093700 0.1842 84 chr10 50096100 50096400 0.0409 73 chr10 50106900 50108700 0 65 chr10 50113800 50115300 0.0106 70 chr10 50117100 50119200 0 70 chr10 50122500 50122800 0.0541 57 chr10 50160900 50161200 0.1113 46 chr10 50164200 50164800 0.0345 35 chr10 50172300 50172600 0.0083 14 chr10 50181900 50184000 0.0045 54 chr10 50187300 50188200 0 77 chr10 50189400 50193000 0 77 chr10 50708700 50710200 0.0217 55 chr10 50745000 50745600 0.0951 58 chr10 50749200 50755500 0 67 chr10 50758200 50758500 0.0236 61 chr10 50759700 50760000 0.1771 57 chr10 51512400 51513900 0.1026 74 chr10 52181700 52182300 0.0267 64 chr10 52235700 52236900 0.0148 74 chr10 52238100 52238400 0.0148 74 chr10 53497200 53497500 0.1425 93 chr10 53762100 53762400 0.2137 31 chr10 54622500 54622800 0.2745 39 chr10 54735600 54735900 0.074 26 chr10 55542600 55542900 0.2313 45 chr10 55686300 55688100 0.1379 65 chr10 58654500 58655700 0.0362 58 chr10 60180300 60180600 0.0413 1226 chr10 62677500 62677800 0.1159 41 chr10 64371900 64372200 0.2402 65 chr10 64925400 64926600 0.1022 70 chr10 64929000 64929300 0.0592 79 chr10 67233300 67233600 0.1944 92 chr10 67561200 67561500 0.2682 53 chr10 67582200 67582500 0.2308 64 chr10 67692300 67692600 0.0638 69 chr10 69992400 69993900 0.0011 114 chr10 70686600 70688100 0.0127 64 chr10 73680900 73681200 0.1582 61 chr10 73683000 73685400 0 72 chr10 75480000 75480300 0.2357 52 chr10 76587000 76591500 0 73 chr10 77041200 77041500 0.1875 23 chr10 78089400 78094200 0 85 chr10 79332600 79332900 0.0906 81 chr10 79338300 79338600 0.1724 69 chr10 79504200 79504500 0.2228 49 chr10 79519500 79519800 0.0108 63 chr10 79703100 79703700 0 72 chr10 79706400 79706700 0.0575 78 chr10 79707900 79708500 0.0262 97 chr10 79710000 79710300 0.0813 91 chr10 79713000 79714500 0 100 chr10 79716900 79717200 0.0751 69 chr10 79741800 79742100 0.0661 63 chr10 79770300 79771800 0.0149 77 chr10 79774800 79775100 0.0376 59 chr10 79777800 79778100 0.1135 54 chr10 79780200 79780500 0.09 58 chr10 79794600 79794900 0.1117 54 chr10 79797600 79797900 0.1138 42 chr10 79814100 79814400 0.0701 29 chr10 79841100 79852800 0 102 chr10 79965900 79966500 0.0689 105 chr10 80240400 80240700 0.014 74 chr10 80255100 80255400 0.1454 59 chr10 80722800 80723400 0.0092 68 chr10 81711300 81714900 0.0058 78 chr10 83781600 83781900 0.0662 31 chr10 84071100 84071400 0.0542 69 chr10 84282000 84282300 0.2335 68 chr10 84283800 84284400 0.0289 82 chr10 84774600 84775200 0.0719 65 chr10 85355700 85361400 0 83 chr10 85744500 85745400 0.0079 77 chr10 87224700 87228300 0 77 chr10 87229800 87234300 0 77 chr10 87236100 87236700 0.0056 63 chr10 87239100 87239400 0.0634 58 chr10 87249900 87250500 0 52 chr10 87255300 87256800 0.0095 51 chr10 87262800 87263100 0 66 chr10 87264300 87265500 0 66 chr10 87270000 87275100 0 69 chr10 87276300 87276600 0 69 chr10 87277800 87290700 0 81 chr10 87292200 87298500 0 81 chr10 87301200 87303900 0.0278 65 chr10 87305100 87306300 0.0165 61 chr10 87316800 87317100 0.0401 62 chr10 87357600 87360600 0 77 chr10 87362100 87364500 0 81 chr10 87368400 87369000 0.0093 76 chr10 87431100 87435300 0 73 chr10 87436500 87436800 0 73 chr10 87439500 87439800 0.1751 61 chr10 87441300 87445800 0 67 chr10 87447900 87448500 0 83 chr10 87449700 87465300 0 83 chr10 87467400 87467700 0.0074 61 chr10 87472500 87475500 0 74 chr10 87481200 87482700 0.0033 52 chr10 88977600 88978200 0.0107 87 chr10 91440600 91443300 0 71 chr10 91446300 91449000 0 69 chr10 91752300 91752600 0.0854 70 chr10 92140800 92141100 0.0016 69 chr10 92375100 92377800 0 108 chr10 92673900 92674200 0.0133 64 chr10 94819200 94819800 0.1191 80 chr10 94825500 94825800 0.1081 66 chr10 95948400 95949600 0 71 chr10 96940500 96942000 0.0897 112 chr10 97275300 97277400 0 67 chr10 98697900 98698200 0.1378 98 chr10 98700900 98701200 0.0443 17 chr10 98781900 98788200 0 85 chr10 98961000 98962200 0.0242 61 chr10 98988600 98988900 0.0926 70 chr10 99155100 99155400 0.1318 78 chr10 99156900 99158400 0.0367 66 chr10 99771600 99773400 0 84 chr10 99823800 99824100 0.1567 95 chr10 99837300 99840600 0.0049 79 chr10 100092300 100094400 0.0109 57 chr10 100422600 100422900 0.0078 59 chr10 100425900 100426500 0.1282 59 chr10 103128600 103128900 0.0436 64 chr10 104859900 104860200 0.015 35 chr10 105377400 105383100 0 76 chr10 105776100 105780900 0 76 chr10 106845300 106848600 0.0057 74 chr10 107466300 107467200 0.0714 48 chr10 108114900 108115200 0.0128 80 chr10 108117300 108117600 0.0224 89 chr10 108119100 108119700 0.0703 75 chr10 108310500 108315000 0 73 chr10 108572700 108573000 0.0237 89 chr10 109241700 109242900 0.0663 75 chr10 109812300 109818300 0 435 chr10 109830300 109830900 0.0733 80 chr10 111584700 111587100 0 63 chr10 111588900 111589800 0 63 chr10 111797400 111797700 0.0628 59 chr10 111814800 111815400 0.0526 96 chr10 112066500 112067400 0.0027 120 chr10 112204800 112206600 0.0037 75 chr10 112398000 112398300 0.2865 16 chr10 114935400 114935700 0.1033 99 chr10 114998400 114998700 0.074 20 chr10 115202700 115203000 0.1519 75 chr10 115367100 115367400 0.1015 48 chr10 117079500 117081600 0.0051 75 chr10 117833700 117834600 0.0563 100 chr10 117836700 117838500 0.0563 100 chr10 117874800 117875100 0.1025 19 chr10 120214800 120215100 0.2672 44 chr10 120234900 120235800 0.0507 75 chr10 120237300 120237600 0.0507 75 chr10 120238800 120239100 0.0507 75 chr10 120913800 120914100 0.1701 71 chr10 120921000 120921600 0.0064 76 chr10 122581800 122584500 0 78 chr10 122594400 122597100 0 74 chr10 122601000 122616900 0 50 chr10 122681700 122682000 0.1662 61 chr10 125616300 125616900 0.0698 90 chr10 126056700 126057000 0.1579 53 chr10 126417900 126418200 0.1469 16 chr10 126672600 126672900 0.1737 96 chr10 126681900 126682200 0.0498 74 chr10 126885900 126886200 0.1854 79 chr10 126947400 126948300 0.1753 826 chr10 129735600 129735900 0.0759 79 chr10 130051800 130052100 0.2618 19 chr10 130316400 130316700 0.049 82 chr10 130572300 130572900 0.2549 98 chr10 130650900 130651200 0.061 61 chr10 130759500 130760100 0 25 chr10 131042100 131042400 0.1692 15 chr10 131376900 131377200 0.0746 54 chr10 131592600 131601600 0 36 chr10 131625900 131626200 0.2329 34 chr10 131705100 131706000 0.0515 61 chr10 131939100 131939400 0.2061 43 chr10 132158700 132159000 0.147 78 chr10 132622500 132622800 0 118 chr10 132914100 132914400 0.128 20 chr10 133111500 133111800 0.2972 90 chr10 133425900 133427700 0 75 chr10 133433100 133435500 0 72 chr10 133477800 133480200 0 54 chr10 133503600 133504800 0.0796 64 chr10 133569300 133571100 0 77 chr10 133575000 133575300 0 77 chr10 133576500 133579500 0 77 chr10 133624800 133626300 0.0214 76 chr10 133629900 133630800 0.0995 56 chr10 133637400 133637700 0.1837 73 chr10 133640700 133641300 0.0151 46 chr10 133651800 133652100 0.158 71 chr10 133655100 133655400 0.0849 69 chr10 133656600 133656900 0.2031 58 chr10 133664400 133690500 0 15197 chr10 133740600 133764000 0 3268 chr10 133766700 133785300 0 145 chr11 60000 102600 0 91 chr11 103800 122700 0 91 chr11 124200 125100 0.0176 57 chr11 126300 130500 0 91 chr11 132900 133200 0 91 chr11 135900 137100 0 117 chr11 138600 146400 0 84 chr11 149100 159300 0 87 chr11 160800 161400 0 87 chr11 162900 174600 0 87 chr11 176400 177300 0 66 chr11 178800 179100 0.0861 40 chr11 180900 185100 0.0118 58 chr11 188700 189300 0.0238 88 chr11 191100 191700 0.0238 88 chr11 193800 194100 0.1728 59 chr11 195300 195900 0 67 chr11 310800 311400 0.0133 57 chr11 318300 318600 0.1034 55 chr11 321600 322500 0.269 76 chr11 374700 375000 0.2425 46 chr11 384900 385500 0 86 chr11 390600 390900 0.0787 26 chr11 483000 483300 0.2595 44 chr11 519300 520200 0 174 chr11 585300 585600 0.0569 988 chr11 664500 665100 0.0223 94 chr11 735600 735900 0.1133 26 chr11 964800 965400 0.0303 307 chr11 980100 980400 0.0302 83 chr11 1080600 1081200 0.1681 36 chr11 1412100 1412400 0.0186 10 chr11 1429800 1433100 0 78 chr11 1663800 1664100 0.1095 71 chr11 1666500 1667100 0 50 chr11 1683600 1683900 0.1836 56 chr11 1687500 1687800 0.0614 59 chr11 1945500 1950600 0 47 chr11 1952100 1953000 0 37 chr11 1954800 1959000 0 44 chr11 1960500 1966500 0 44 chr11 1968900 1978200 0 43 chr11 1980000 2043000 0 51 chr11 3252600 3256800 0 51 chr11 3258900 3261300 0 44 chr11 3263100 3264600 0 41 chr11 3265800 3270600 0 41 chr11 3272100 3276000 0 41 chr11 3277200 3281100 0 41 chr11 3282300 3282900 0 43 chr11 3284100 3289500 0 43 chr11 3291000 3293100 0 44 chr11 3294300 3294600 0 25 chr11 3298200 3303000 0 37 chr11 3304500 3306600 0 32 chr11 3308700 3323100 0 44 chr11 3324300 3324600 0 44 chr11 3326100 3327000 0 44 chr11 3328200 3335400 0 44 chr11 3336900 3337200 0 44 chr11 3653700 3654900 0.0399 2367 chr11 4171800 4172400 0.07 56 chr11 4173600 4174800 0.1246 68 chr11 4230300 4230600 0.1257 63 chr11 4245000 4245900 0 63 chr11 4256400 4256700 0.0308 60 chr11 4270200 4274100 0 79 chr11 4278600 4279500 0 80 chr11 4282500 4284300 0.0038 60 chr11 4287900 4288200 0.0195 87 chr11 4290300 4298100 0 103 chr11 4303500 4303800 0.1486 51 chr11 4320000 4320300 0.1191 50 chr11 4326900 4327500 0.1304 63 chr11 4335000 4336200 0 75 chr11 4341300 4342800 0 89 chr11 4354800 4355100 0.0906 57 chr11 4620300 4620600 0.0321 22 chr11 5249400 5250000 0.0181 61 chr11 5481000 5482500 0.0179 70 chr11 6186000 6187800 0.1553 69 chr11 7233600 7233900 0.142 62 chr11 7325400 7327800 0 90 chr11 7359300 7359600 0.0143 68 chr11 7658400 7659000 0.0386 64 chr11 7719600 7720200 0.0841 45 chr11 7737900 7738200 0.259 45 chr11 7739400 7740300 0.0654 39 chr11 7768800 7769100 0.0363 43 chr11 8977800 8978100 0.1116 110 chr11 10391700 10392000 0.001 62 chr11 12719700 12720000 0.2036 168 chr11 13544400 13544700 0 16 chr11 13794900 13795500 0.0568 89 chr11 13867200 13867500 0.1499 49 chr11 14716500 14717400 0 70 chr11 14718900 14720700 0 70 chr11 14848200 14848500 0.2086 75 chr11 16515600 16515900 0.1735 53 chr11 16720200 16720500 0.1373 74 chr11 17028900 17029800 0.0379 63 chr11 18920700 18921900 0 70 chr11 18942600 18944100 0 75 chr11 20549100 20549400 0.0767 60 chr11 22019400 22020900 0.0216 92 chr11 22523400 22523700 0.0432 37 chr11 22910700 22911000 0.0685 69 chr11 23176500 23178000 0.1303 52 chr11 23193900 23194200 0.2034 44 chr11 23298300 23298900 0.0131 72 chr11 23302800 23303100 0.1344 58 chr11 24328200 24333900 0 83 chr11 24387600 24389100 0.0042 50 chr11 25428900 25429200 0 51 chr11 26968800 26969400 0 88 chr11 27221700 27222300 0.2589 69 chr11 28029900 28030200 0.0713 69 chr11 28206600 28206900 0.0925 50 chr11 29154600 29156100 0 71 chr11 30966000 30967200 0 78 chr11 31316400 31321200 0 83 chr11 33626700 33627000 0.0226 76 chr11 34687500 34687800 0.207 48 chr11 34760700 34761000 0.0272 69 chr11 35053800 35054100 0.1557 59 chr11 35396100 35396400 0.088 88 chr11 35698500 35698800 0.1344 33 chr11 36481800 36482100 0.0038 50 chr11 36552000 36557400 0 113 chr11 36615000 36615600 0.0734 74 chr11 36894000 36894600 0.1697 51 chr11 40587300 40587600 0.2644 70 chr11 42215100 42215700 0.0064 54 chr11 42431700 42432000 0.0258 73 chr11 42791700 42792300 0.0353 71 chr11 42798000 42798300 0.0136 51 chr11 43346400 43350300 0.0133 81 chr11 44664000 44664300 0.288 79 chr11 45101700 45102000 0.0428 65 chr11 45738000 45738300 0.1596 91 chr11 47097600 47098200 0.0115 61 chr11 48848100 48852900 0 76 chr11 48854100 48854400 0.1964 51 chr11 48859500 48859800 0.1468 11 chr11 48880800 48888000 0 76 chr11 48892500 48899700 0 78 chr11 48944100 48944400 0.1148 36 chr11 49104300 49105800 0 74 chr11 49713900 49714500 0.0042 66 chr11 49728600 49729200 0 68 chr11 49792500 49797300 0 79 chr11 50114400 50134500 0 73 chr11 50343900 50364300 0 78 chr11 50588400 50588700 0.1506 37 chr11 51078600 51090000 0 31 chr11 51091500 51146100 0 1061 chr11 51147300 51430200 0 1061 chr11 51431400 51477600 0 1061 chr11 51478800 51830100 0 1061 chr11 51831600 51994200 0 1061 chr11 51995400 52020900 0 1061 chr11 52022700 52128000 0 1061 chr11 52129500 52154100 0 666 chr11 52155600 52303500 0 666 chr11 52304700 52599600 0 595 chr11 52601100 52632300 0 595 chr11 52633500 52652100 0 595 chr11 52653300 52701300 0 595 chr11 52703100 52707000 0 1026 chr11 52708200 53015400 0 1026 chr11 53016600 53097000 0 1026 chr11 53098200 53107500 0 1026 chr11 53108700 53158500 0 1802 chr11 53159700 53215500 0 1802 chr11 53216700 53240400 0 1107 chr11 53241600 53283300 0 1107 chr11 53284500 53400000 0 1107 chr11 53401200 53470200 0 863 chr11 53471700 53504400 0 863 chr11 53505600 53507100 0 863 chr11 53508600 53518200 0 863 chr11 53519400 53592600 0 863 chr11 53593800 53639700 0 863 chr11 53640900 53716200 0 785 chr11 53717400 53798400 0 785 chr11 53799600 53818200 0 785 chr11 53820300 53840400 0 207 chr11 53842200 53935500 0 663 chr11 53936700 53948100 0 663 chr11 53949300 53964000 0 663 chr11 53965200 53989500 0 663 chr11 53990700 54006000 0 663 chr11 54007200 54084000 0 568 chr11 54086100 54090300 0 568 chr11 54091500 54097800 0 568 chr11 54099300 54177300 0 729 chr11 54178500 54326100 0 729 chr11 54327600 54330900 0 729 chr11 54332100 54342600 0 729 chr11 54349500 54350400 0.0624 91 chr11 54352200 54353100 0.0235 68 chr11 54355800 54356100 0.0308 30 chr11 54359400 54360000 0.2643 78 chr11 54362100 54363600 0.0264 74 chr11 54367500 54368100 0.0497 50 chr11 54371700 54372300 0.0303 80 chr11 54376200 54376500 0.1802 28 chr11 54383100 54383400 0 120 chr11 54388800 54389100 0.0029 162 chr11 54390900 54393900 0.0029 162 chr11 54399300 54400200 0.0858 127 chr11 54401400 54402000 0.0766 82 chr11 54404400 54405300 0 62 chr11 54409800 54410400 0.0893 57 chr11 54411600 54412500 0.0098 88 chr11 54413700 54414000 0.0098 88 chr11 54419100 54419700 0.0975 226 chr11 54421800 54422700 0.0975 226 chr11 54423900 54425100 0.0975 226 chr11 54528600 54532800 0 187 chr11 54534000 54536700 0 187 chr11 54541800 54542100 0.008 50 chr11 54545400 54546900 0.0128 68 chr11 54549900 54550200 0.0942 34 chr11 57995700 57996300 0.0851 85 chr11 58048800 58052400 0 49 chr11 60048900 60049500 0.0007 81 chr11 60439200 60439800 0.0161 85 chr11 60532800 60537900 0.0012 76 chr11 61084500 61086300 0 83 chr11 61205700 61218900 0 58 chr11 61220100 61220700 0 57 chr11 61221900 61239600 0 57 chr11 61240800 61246200 0 52 chr11 62096700 62099400 0 64 chr11 62277900 62280300 0 58 chr11 64170900 64172400 0.0477 86 chr11 67222200 67222500 0.0016 70 chr11 67603500 67604100 0.0413 90 chr11 67868100 67868700 0.0194 70 chr11 68892300 68892600 0.0738 30 chr11 69068400 69068700 0.0596 127 chr11 71578800 71579100 0.066 59 chr11 74527800 74528100 0.1867 57 chr11 74757600 74758200 0.0372 78 chr11 74760900 74761200 0.182 52 chr11 75749100 75749700 0.1869 75 chr11 75751200 75751500 0.146 73 chr11 75754200 75754500 0.1132 42 chr11 77097600 77099400 0.0194 102 chr11 78678000 78683100 0 81 chr11 79557300 79557600 0.1057 60 chr11 82156200 82161300 0.001 80 chr11 82625100 82625700 0.0127 40 chr11 83394900 83395200 0.1948 25 chr11 83396400 83397000 0.0199 77 chr11 83591400 83591700 0.1023 61 chr11 85325700 85330500 0 83 chr11 86756400 86756700 0.167 67 chr11 87048000 87053100 0 90 chr11 87164400 87165300 0.0021 65 chr11 87340200 87345000 0 102 chr11 87698400 87698700 0.107 57 chr11 89314500 89315700 0.0524 51 chr11 89746200 89746500 0.1111 65 chr11 89759100 89759400 0.0032 32 chr11 89763300 89764200 0 64 chr11 89766300 89766600 0.1044 63 chr11 89771100 89772000 0.067 51 chr11 89778600 89781300 0 70 chr11 89788200 89790300 0 71 chr11 89795100 89795700 0.0638 60 chr11 89797800 89799600 0 60 chr11 89801700 89802000 0.0218 59 chr11 89809500 89809800 0.0132 43 chr11 89811300 89811600 0.0114 60 chr11 89817300 89817900 0.0529 70 chr11 89819400 89820900 0.0046 55 chr11 89824200 89826000 0 68 chr11 89828100 89829000 0 57 chr11 89830500 89830800 0 57 chr11 89838000 89845800 0 79 chr11 89847000 89862300 0 79 chr11 89865000 89866200 0 72 chr11 89868600 89869500 0 72 chr11 89871600 89872200 0.0237 62 chr11 89873400 89874600 0.0146 60 chr11 89877000 89877300 0.1076 61 chr11 89879100 89880900 0 66 chr11 89882400 89883000 0 66 chr11 89885400 89888400 0 68 chr11 89889600 89891100 0 68 chr11 89893800 89897400 0 77 chr11 89900100 89908200 0 98 chr11 89909700 89910000 0 98 chr11 89911500 89920500 0 98 chr11 89924100 90000300 0 84 chr11 90001500 90006600 0 84 chr11 90008100 90008400 0.083 36 chr11 90013500 90014100 0.0539 69 chr11 90015600 90016500 0.0539 69 chr11 90018600 90020100 0 65 chr11 90023700 90025200 0 63 chr11 90026700 90028500 0 63 chr11 90029700 90030300 0.0148 54 chr11 90037500 90038100 0.0196 66 chr11 90039900 90042000 0 53 chr11 90044100 90045600 0 67 chr11 90050100 90051600 0 68 chr11 90056400 90056700 0.029 58 chr11 90058500 90061500 0 68 chr11 90068100 90069000 0.1042 64 chr11 90073500 90073800 0.005 50 chr11 90075900 90076500 0 54 chr11 90080400 90081000 0.0076 53 chr11 90088200 90088500 0.1023 34 chr11 90400200 90405600 0 124 chr11 90966600 90971700 0 76 chr11 90976500 90976800 0.0914 24 chr11 91579200 91579800 0.0623 75 chr11 93136800 93142500 0 93 chr11 93421200 93426900 0 81 chr11 93946500 93948000 0.0661 68 chr11 94038300 94042200 0.0365 112 chr11 94233000 94234200 0.0079 186 chr11 94341000 94341300 0.2757 56 chr11 95320500 95320800 0.0873 60 chr11 95436300 95442300 0 87 chr11 95626800 95627100 0.1101 153 chr11 95629800 95630100 0.1597 57 chr11 96406500 96408300 0.0637 79 chr11 96775200 96775500 0.1356 40 chr11 96935100 96936900 0.0617 72 chr11 97040400 97040700 0.2104 65 chr11 98325600 98325900 0.0984 50 chr11 99603000 99606300 0 90 chr11 99607500 99607800 0.1916 60 chr11 99783300 99783600 0.0073 60 chr11 100412100 100412400 0.1118 63 chr11 100413900 100414200 0.0793 48 chr11 100452600 100452900 0.0472 124 chr11 100478700 100479600 0.096 75 chr11 101546100 101546400 0.1184 25 chr11 101695500 101695800 0.0064 55 chr11 101697000 101698200 0 60 chr11 101700000 101704500 0 104 chr11 102370800 102371400 0.0663 90 chr11 102372600 102372900 0.0663 90 chr11 102743700 102744300 0.0473 101 chr11 103038900 103039200 0.1829 62 chr11 104195100 104195400 0.1095 56 chr11 104675700 104676600 0.0116 80 chr11 106710000 106710300 0.0914 15 chr11 107366100 107367000 0 70 chr11 107376600 107377800 0 67 chr11 108264600 108264900 0.0641 85 chr11 109177800 109183200 0 71 chr11 109404600 109404900 0.0788 77 chr11 109878900 109879200 0.2008 68 chr11 110212500 110214900 0.0064 71 chr11 112325400 112326000 0.0761 62 chr11 112680000 112680300 0.0917 68 chr11 114840000 114841800 0.0083 87 chr11 114843300 114843600 0.1597 85 chr11 116571300 116573100 0.0033 79 chr11 116574600 116575200 0.0033 79 chr11 117135300 117138000 0 66 chr11 118721100 118721400 0.0937 66 chr11 119848800 119849100 0.2419 15 chr11 120082800 120083700 0 27 chr11 121185600 121185900 0.0418 214 chr11 121601100 121601400 0.0673 86 chr11 121821600 121827000 0.0009 74 chr11 122477100 122478300 0 50 chr11 122826900 122827200 0.0961 74 chr11 123896100 123896400 0.1068 98 chr11 124236300 124236600 0.0556 43 chr11 124392000 124392600 0.1833 21 chr11 124505700 124506000 0.0746 88 chr11 125036100 125036400 0.0091 34 chr11 125537700 125542200 0 72 chr11 125863500 125863800 0.2613 71 chr11 126226200 126226500 0.0767 142 chr11 127079400 127079700 0.104 35 chr11 127287300 127288800 0.0416 84 chr11 127364400 127364700 0.0819 80 chr11 127367700 127368000 0.2057 70 chr11 127776900 127779000 0.0549 104 chr11 127869000 127869600 0.0227 85 chr11 129175500 129175800 0 77 chr11 129342300 129342900 0.0071 64 chr11 129563400 129564000 0.0104 62 chr11 130092300 130092600 0.1845 81 chr11 131342100 131342400 0.2844 131 chr11 132322500 132322800 0.2171 61 chr11 132324000 132324300 0.0414 81 chr11 133644300 133645800 0.141 88 chr11 134000100 134000700 0.1891 59 chr11 134296200 134296500 0.087 66 chr11 134839500 134840100 0.0162 83 chr11 134928600 134928900 0.157 39 chr12 9900 10500 0.0749 68 chr12 23700 38100 0 124 chr12 41400 43200 0 66 chr12 419700 421800 0.0632 58 chr12 529800 530100 0.1478 69 chr12 1079400 1079700 0.1105 44 chr12 1085100 1086000 0.0027 44 chr12 2130600 2135100 0 70 chr12 2520300 2520600 0.0416 129 chr12 2539200 2539800 0.0621 251 chr12 3499500 3505200 0 91 chr12 4511700 4513200 0.0296 100 chr12 5117400 5118900 0.0353 65 chr12 6022500 6022800 0.1418 65 chr12 7335900 7336200 0.1421 75 chr12 7819800 7820100 0.003 61 chr12 7924500 7924800 0.1292 49 chr12 7972200 7972500 0.0996 44 chr12 8387700 8388300 0.0124 87 chr12 8394900 8395500 0.0024 102 chr12 8626200 8626500 0.0719 70 chr12 8787900 8788500 0.0007 56 chr12 8795100 8795700 0 67 chr12 8940600 8940900 0.0036 68 chr12 9285300 9286200 0 54 chr12 9287700 9288300 0.0392 69 chr12 9291600 9292800 0.0451 62 chr12 9298200 9300000 0.0022 90 chr12 9401400 9401700 0.0543 36 chr12 9414900 9415200 0.0933 38 chr12 9431700 9433500 0.0241 66 chr12 9438600 9439500 0.0026 65 chr12 9441300 9442200 0 55 chr12 9443700 9444000 0.0006 70 chr12 9446100 9446400 0.178 66 chr12 9467700 9468000 0.0138 21 chr12 9496800 9497100 0.0659 18 chr12 9523200 9525600 0 80 chr12 9559800 9560100 0 14 chr12 9561300 9561600 0 14 chr12 9563100 9563400 0 29 chr12 9570600 9572100 0 38 chr12 9573600 9574200 0 22 chr12 9577500 9578100 0 15 chr12 9580500 9581700 0 67 chr12 10345800 10346100 0.1088 40 chr12 10424100 10425300 0 38 chr12 10427100 10427400 0.0031 45 chr12 10437000 10437900 0 21 chr12 10440300 10440900 0.078 49 chr12 10442400 10443000 0.0028 48 chr12 11034300 11034600 0.0808 28 chr12 11088300 11088600 0.065 38 chr12 11095200 11095500 0 19 chr12 11148600 11148900 0.1286 43 chr12 11298900 11300700 0 67 chr12 11301900 11303400 0.0833 60 chr12 11352300 11353200 0 75 chr12 11391900 11392800 0 67 chr12 11937900 11938500 0.0281 70 chr12 13392000 13399500 0 101 chr12 15477000 15477300 0.0936 67 chr12 16707600 16707900 0.0475 118 chr12 16709400 16709700 0.2017 73 chr12 17177400 17177700 0.0388 56 chr12 17769900 17770200 0.0281 42 chr12 17773500 17773800 0.0984 103 chr12 17859600 17859900 0.0218 32 chr12 18369600 18369900 0.212 60 chr12 20553300 20553600 0.1403 65 chr12 20709600 20709900 0 16 chr12 21284700 21285000 0.0055 66 chr12 21286200 21287700 0.1211 72 chr12 21397800 21398100 0.039 83 chr12 21399300 21399600 0.039 83 chr12 21423000 21423900 0 31 chr12 21622500 21622800 0 11 chr12 21976800 21978000 0 35 chr12 22419000 22431600 0 40 chr12 23073600 23073900 0.0609 39 chr12 25540200 25540500 0.2104 71 chr12 26035200 26035800 0.1413 142 chr12 26216700 26217600 0.1756 61 chr12 26784900 26786100 0.03 33 chr12 27281100 27281400 0.1179 22 chr12 28764300 28764600 0.1306 74 chr12 29932200 29932800 0.0067 98 chr12 32099700 32100300 0.0421 56 chr12 32810700 32811000 0.173 25 chr12 33738000 33738600 0.0824 66 chr12 34669800 34670100 0.0392 65 chr12 34770000 34773000 0 63 chr12 34776000 34778400 0 85 chr12 34779600 34786200 0 85 chr12 34787700 34795200 0 85 chr12 34797900 34799700 0 36 chr12 34802700 34803600 0 24 chr12 34805700 34812000 0 64 chr12 34813200 34816500 0 31 chr12 34820400 34820700 0 15 chr12 34821900 34822200 0.0427 50 chr12 34832100 34832400 0.0065 34 chr12 34834800 34841400 0 95 chr12 34842600 34849500 0 87 chr12 34851000 34852500 0 81 chr12 34854000 34857300 0 57 chr12 34858800 34860900 0.0407 58 chr12 34862700 34863000 0 75 chr12 34865700 34870200 0 140 chr12 34871700 34872900 0 140 chr12 34874100 34878600 0 140 chr12 34881000 34882800 0.0099 149 chr12 34884000 34887600 0 1117 chr12 34889700 35090700 0 1117 chr12 35092200 35141700 0 1117 chr12 35142900 35199300 0 1117 chr12 35201100 35208600 0 297 chr12 35210700 35250600 0 297 chr12 35252100 35274000 0 208 chr12 35275500 35319600 0 1097 chr12 35320800 35332500 0 338 chr12 35334600 35389500 0 338 chr12 35391000 35402400 0 178 chr12 35403600 35429400 0 221 chr12 35430900 35439000 0 221 chr12 35440500 35467800 0 221 chr12 35469000 35482800 0 165 chr12 35484000 35522100 0 185 chr12 35523300 35615700 0 2138 chr12 35616900 35650500 0 2138 chr12 35651700 35682900 0 2138 chr12 35684100 35725500 0 2138 chr12 35726700 35780400 0 2138 chr12 35781600 35787900 0 2138 chr12 35789100 35809800 0 1323 chr12 35811300 35987700 0 1323 chr12 35988900 35995500 0 1323 chr12 35996700 36125400 0 1323 chr12 36126600 36141300 0 237 chr12 36143100 36170400 0 237 chr12 36171900 36183600 0 167 chr12 36184800 36189600 0 167 chr12 36191400 36193200 0 213 chr12 36194700 36268500 0 213 chr12 36270000 36318600 0 213 chr12 36320100 36331500 0 213 chr12 36332700 36336600 0 213 chr12 36338400 36390000 0 176 chr12 36391500 36450900 0 201 chr12 36452400 36467400 0 201 chr12 36469200 36480600 0 201 chr12 36481800 36487800 0 201 chr12 36489000 36496200 0 132 chr12 36497400 36499500 0 132 chr12 36500700 36513300 0 138 chr12 36514800 36582000 0 185 chr12 36583200 36624000 0 162 chr12 36625200 36639000 0 304 chr12 36640200 36671100 0 479 chr12 36672300 36693000 0 194 chr12 36694200 36699900 0 194 chr12 36701100 36733800 0 194 chr12 36735000 36735900 0 194 chr12 36737400 36778800 0 225 chr12 36780300 36796200 0 225 chr12 36798900 36830400 0 364 chr12 36831900 36840600 0 364 chr12 36842100 36872700 0 364 chr12 36873900 36965100 0 364 chr12 36966300 36966600 0 364 chr12 36967800 37010400 0 364 chr12 37011600 37039200 0 270 chr12 37041000 37102500 0 182 chr12 37104300 37111800 0 232 chr12 37113000 37175700 0 232 chr12 37176900 37185000 0 120 chr12 37235700 37240200 0 144 chr12 37246200 37246500 0 82 chr12 37247700 37248900 0 82 chr12 37251300 37251600 0 29 chr12 37333200 37334700 0 50 chr12 37339800 37340100 0.1009 46 chr12 37705800 37706100 0.0472 60 chr12 37736700 37737000 0.1871 65 chr12 37815300 37815600 0.1457 72 chr12 38211900 38212200 0.0059 36 chr12 38226900 38227200 0.276 44 chr12 38313300 38313600 0.0745 41 chr12 38800200 38805600 0 84 chr12 39791400 39792300 0.0042 41 chr12 39800400 39801000 0 66 chr12 39836700 39837000 0.0357 60 chr12 39901500 39901800 0.0425 97 chr12 39981900 39982200 0.0268 79 chr12 41640300 41640600 0.2166 61 chr12 41673900 41674200 0.1789 71 chr12 41844300 41844900 0 24 chr12 42228900 42229200 0.0121 49 chr12 43473000 43476600 0.0213 66 chr12 43532700 43533900 0.0058 49 chr12 43583700 43585200 0 55 chr12 43790700 43791000 0.1281 61 chr12 43910700 43911300 0.0416 65 chr12 44108700 44113800 0 92 chr12 44577000 44577300 0.1435 70 chr12 44953200 44954700 0.0842 80 chr12 44956200 44956800 0.0622 84 chr12 45374100 45374700 0.0559 77 chr12 45376200 45376500 0.0817 101 chr12 48277800 48278100 0.2469 65 chr12 48331800 48333000 0.0234 65 chr12 51454800 51455100 0.0491 68 chr12 51563100 51568200 0 73 chr12 51719100 51719700 0.0474 43 chr12 52289100 52291200 0.001 82 chr12 52302300 52304400 0.0202 75 chr12 54779700 54780000 0.1159 41 chr12 54789000 54794400 0 80 chr12 55083900 55084500 0.2909 78 chr12 55096500 55099800 0 85 chr12 55345500 55346100 0 41 chr12 55349100 55349700 0.0144 60 chr12 55410000 55410600 0.0049 62 chr12 55413000 55413300 0.0233 69 chr12 55489500 55489800 0.1927 57 chr12 56400900 56401200 0.1159 79 chr12 56940300 56940900 0.0362 63 chr12 56984700 56985300 0.0146 69 chr12 57648600 57651000 0.0052 106 chr12 58110000 58110300 0.0552 62 chr12 58327800 58328400 0.0014 108 chr12 58331700 58332000 0.0233 71 chr12 58336200 58336800 0.0272 66 chr12 60008700 60009600 0.0024 167 chr12 61942500 61943100 0.0109 88 chr12 61944600 61944900 0.0109 88 chr12 61946400 61947000 0.0109 88 chr12 64197900 64201500 0.0108 80 chr12 64287600 64292700 0 89 chr12 65550600 65550900 0.1118 74 chr12 66057600 66057900 0.1246 480 chr12 66135600 66135900 0.0581 39 chr12 67903800 67905300 0.083 72 chr12 68660100 68660400 0.1348 51 chr12 68994600 68994900 0.0871 46 chr12 69773700 69778800 0 85 chr12 69940800 69941700 0.0987 72 chr12 70013700 70016700 0.0004 98 chr12 70017900 70018500 0.0636 60 chr12 70201200 70203300 0.0008 120 chr12 71098800 71099400 0.121 54 chr12 71102100 71103300 0.0198 69 chr12 71119200 71120100 0 60 chr12 71122500 71124000 0.0488 54 chr12 71564100 71564400 0 57 chr12 72515100 72515400 0.1046 76 chr12 73148700 73149000 0.0165 83 chr12 73284000 73288800 0 75 chr12 73398900 73400400 0.1866 88 chr12 73983000 73983300 0.0185 137 chr12 74875500 74880000 0 81 chr12 75730200 75730500 0.1438 97 chr12 77174100 77178300 0.0997 72 chr12 77656200 77656500 0.1887 39 chr12 78072300 78072900 0.0636 84 chr12 79177200 79177500 0.0212 32 chr12 80245200 80247900 0.0059 80 chr12 80451300 80452200 0 56 chr12 80453700 80454000 0 54 chr12 80464500 80465100 0 59 chr12 80482800 80483100 0.0841 63 chr12 82899900 82900500 0.0784 88 chr12 83394000 83394300 0.0496 19 chr12 83450400 83450700 0.1169 54 chr12 83524500 83524800 0.0431 45 chr12 83672100 83676000 0 68 chr12 83902500 83902800 0.1238 47 chr12 85193100 85194300 0.0472 82 chr12 85315500 85316100 0.0178 95 chr12 86845500 86846100 0.0051 76 chr12 86859300 86859900 0.0199 59 chr12 87102000 87102300 0.1538 54 chr12 87192000 87194100 0.0215 67 chr12 87747900 87749400 0 72 chr12 88621800 88622700 0.0283 74 chr12 90537600 90542400 0 69 chr12 92315100 92319900 0 85 chr12 92916600 92918400 0.0157 63 chr12 92919600 92920200 0.0157 63 chr12 93399300 93399600 0.0799 48 chr12 93401700 93402000 0.1436 57 chr12 93492900 93494100 0 63 chr12 93498000 93499200 0 56 chr12 95839800 95842500 0 59 chr12 95946600 95947500 0.0013 67 chr12 95948700 95949000 0.1775 52 chr12 96317400 96317700 0.1049 70 chr12 96320700 96321600 0 63 chr12 96827400 96827700 0.1323 25 chr12 97161000 97161300 0.0607 40 chr12 97704900 97705500 0.1293 73 chr12 97707000 97708500 0 53 chr12 97718100 97718400 0.0631 77 chr12 97725300 97727700 0 72 chr12 98278500 98279100 0.0287 65 chr12 98655000 98655300 0.1204 68 chr12 101146800 101147100 0.1883 82 chr12 101149500 101151900 0 58 chr12 101509500 101511300 0.0433 70 chr12 101586900 101587200 0.1689 60 chr12 101704800 101705700 0.054 45 chr12 102308100 102308400 0.1209 69 chr12 102828900 102829200 0.1071 72 chr12 103321500 103321800 0.153 95 chr12 103899600 103899900 0.1547 45 chr12 105630600 105631200 0.0854 87 chr12 105632700 105633000 0.0854 87 chr12 105777300 105781500 0 70 chr12 106473300 106474500 0 77 chr12 106476300 106476600 0.1328 66 chr12 108348000 108348600 0.0384 26 chr12 109000500 109000800 0.0171 75 chr12 110570400 110570700 0.023 49 chr12 112623300 112626900 0 89 chr12 113872800 113873700 0.065 103 chr12 115287300 115288800 0.0159 106 chr12 120928500 120928800 0.1222 34 chr12 121747500 121748100 0.0484 46 chr12 121994400 121994700 0.2093 58 chr12 122696100 122696400 0.0165 69 chr12 122709600 122709900 0.0322 64 chr12 122713500 122713800 0.0144 49 chr12 125409900 125410200 0.1004 11 chr12 126151800 126152100 0.1364 38 chr12 126299100 126304800 0 97 chr12 126583500 126584100 0 69 chr12 127095000 127097100 0.1113 86 chr12 127099500 127100100 0.049 85 chr12 127545300 127545900 0.0013 39 chr12 127871400 127871700 0.0355 70 chr12 128844900 128845200 0.2808 35 chr12 129018000 129018300 0.1703 46 chr12 129303300 129303600 0.0859 76 chr12 129804000 129804300 0.0327 52 chr12 129806100 129806400 0.0327 52 chr12 129855900 129858300 0 53 chr12 130386600 130387500 0.0245 62 chr12 130586700 130587600 0.0468 69 chr12 130843800 130844100 0.1047 100 chr12 130882200 130882500 0.1945 66 chr12 131195100 131195400 0.038 61 chr12 131201100 131202300 0 81 chr12 131206200 131206500 0.1545 44 chr12 131225400 131225700 0.0162 76 chr12 131278200 131278500 0.2476 56 chr12 131298600 131300100 0.0045 71 chr12 131301600 131307000 0 78 chr12 131393100 131393400 0.2243 33 chr12 131433300 131434200 0.0373 49 chr12 131439900 131440200 0.042 62 chr12 131470500 131470800 0.0808 49 chr12 131475600 131476200 0 76 chr12 131481300 131481600 0.0311 62 chr12 131588400 131588700 0.1747 439 chr12 131626500 131627700 0.1268 196 chr12 131656500 131656800 0.0791 66 chr12 131661000 131662200 0 68 chr12 131701200 131701500 0.111 18 chr12 132149100 132150600 0.0006 206 chr12 132212400 132212700 0.0779 21 chr12 132232200 132234600 0 72 chr12 132235800 132236100 0.1418 44 chr12 132241200 132243300 0.1538 199 chr12 132362100 132362400 0.2446 44 chr12 132378000 132378300 0.1995 12 chr12 132684300 132684900 0.1793 92 chr12 132793200 132793500 0.009 21 chr12 132836100 132836400 0.2755 33 chr12 133264800 133265400 0 201 chr13 16004100 16004400 0.2736 47 chr13 16005900 16006200 0.1347 44 chr13 16024800 16025400 0.0067 75 chr13 16028400 16028700 0.0437 15 chr13 16030800 16032600 0.1502 55 chr13 16033800 16034100 0.1502 55 chr13 16038600 16040100 0 141 chr13 16041600 16042200 0 141 chr13 16043400 16044900 0 23 chr13 16047000 16047300 0 23 chr13 16052700 16055700 0 52 chr13 16057200 16058400 0 52 chr13 16060500 16061700 0.0444 88 chr13 16062900 16063800 0.0444 88 chr13 16069200 16069500 0.0464 74 chr13 16071000 16074000 0 59 chr13 16075200 16077000 0.0197 69 chr13 16080600 16089600 0 105 chr13 16090800 16091100 0 105 chr13 16093800 16098900 0.008 256 chr13 16100700 16105200 0 179 chr13 16106700 16110000 0 116 chr13 16116000 16118100 0.1139 407 chr13 16124400 16125000 0.0406 118 chr13 16132200 16132500 0.1927 124 chr13 16137600 16137900 0.2841 141 chr13 16139100 16140300 0.0646 516 chr13 16162200 16162500 0.1312 366 chr13 16165200 16165800 0.2584 164 chr13 16167300 16169100 0.1796 87 chr13 16171800 16177500 0.046 366 chr13 16179000 16183500 0 219 chr13 16184700 16185000 0.2291 381 chr13 16186500 16186800 0.2956 484 chr13 16189200 16191000 0.2306 104 chr13 16192800 16194600 0.2 352 chr13 16195800 16197000 0.1094 310 chr13 16200000 16202100 0.1231 279 chr13 16203300 16205700 0.13 48 chr13 16206900 16207500 0.2164 138 chr13 16209600 16210500 0.1559 327 chr13 16213200 16214400 0.1395 257 chr13 16216200 16221900 0.0549 427 chr13 16223700 16224000 0.0737 105 chr13 16227000 16228500 0.1044 449 chr13 16231200 16231500 0.1753 283 chr13 16235400 16235700 0.1336 478 chr13 16242300 16243200 0.0761 556 chr13 16244700 16245000 0.2375 148 chr13 16250100 16256100 0 805 chr13 16262100 16263300 0 71 chr13 16266300 16266900 0.0026 127 chr13 16268100 16269900 0 83 chr13 16272000 16272300 0 69 chr13 16273800 16275600 0 69 chr13 16278300 16278900 0 51 chr13 16282200 16294200 0 685 chr13 16295400 16303800 0 685 chr13 16305000 16305900 0 685 chr13 16307100 16311300 0 1318 chr13 16312500 16354500 0 1318 chr13 16355700 16358100 0.0023 813 chr13 16359300 16368900 0.0119 1444 chr13 16370400 16381800 0.0006 1930 chr13 16383000 16400100 0.0006 1930 chr13 16401600 16415400 0 914 chr13 16416900 16425600 0.0028 673 chr13 16428900 16440600 0 1381 chr13 16441800 16460400 0 1381 chr13 16461600 16501200 0 2672 chr13 16502700 16504200 0 1909 chr13 16505400 16550400 0 1909 chr13 16551600 16570800 0 1494 chr13 16572000 16589100 0 2701 chr13 16590300 16593900 0 2321 chr13 16595100 16615800 0 2321 chr13 16618200 16653300 0 1438 chr13 16654500 16709700 0 2648 chr13 16711200 16812300 0 2648 chr13 16813500 16824900 0 2648 chr13 16826100 16835100 0 2648 chr13 16836900 16839900 0 2648 chr13 16841100 16844400 0.006 445 chr13 16845600 16905900 0 2376 chr13 16908300 16928100 0 1873 chr13 16929300 16954200 0 1873 chr13 16955400 16983000 0 1873 chr13 16984200 16992600 0.0128 773 chr13 16993800 17028000 0 1149 chr13 17029500 17077800 0 2220 chr13 17079000 17088300 0 2220 chr13 17089500 17095200 0 917 chr13 17097600 17098200 0.0092 194 chr13 17099700 17103600 0 2768 chr13 17104800 17107200 0 2768 chr13 17108400 17124000 0 1680 chr13 17125200 17143800 0 1680 chr13 17145000 17169300 0 1316 chr13 17170800 17185800 0 2082 chr13 17187000 17191200 0 2082 chr13 17192700 17210400 0.0003 1874 chr13 17211900 17218500 0.0047 999 chr13 17219700 17235900 0 1184 chr13 17237100 17253600 0 3917 chr13 17254800 17311800 0 3917 chr13 17313000 17334300 0 3450 chr13 17335500 17338800 0 3450 chr13 17340000 17418600 0 3450 chr13 17419800 17431200 0 714 chr13 17432400 17447100 0 536 chr13 17448900 17449500 0 155 chr13 17451000 17451600 0 155 chr13 17452800 17454300 0 155 chr13 17455500 17465700 0 1822 chr13 17466900 17539200 0 1822 chr13 17541000 17541600 0 1822 chr13 17542800 17573700 0 1292 chr13 17574900 17592600 0 1292 chr13 17594100 17636400 0 1370 chr13 17637600 17644200 0 941 chr13 17646600 17742300 0 1868 chr13 17743500 17753700 0 1868 chr13 17754900 17768100 0 1868 chr13 17769300 17880900 0 2954 chr13 17882700 17907900 0 2954 chr13 17909400 17912400 0 2111 chr13 17913600 17970600 0 3185 chr13 17972100 18051300 0 3185 chr13 18193800 18194100 0.2344 114 chr13 18196500 18196800 0.1706 83 chr13 18214800 18215100 0.104 2140 chr13 18339300 18345900 0 78 chr13 18347100 18348900 0 78 chr13 18350400 18352500 0 73 chr13 18356700 18357300 0.0385 78 chr13 18415500 18416100 0.0038 42 chr13 18417600 18418200 0 59 chr13 18419700 18420000 0.131 45 chr13 18424800 18425100 0.0884 27 chr13 18428400 18428700 0.0787 59 chr13 18434100 18434700 0.0002 53 chr13 18457500 18457800 0.0576 234 chr13 18459000 18459300 0.016 37 chr13 18464100 18464400 0.1352 42 chr13 18493800 18494100 0.1381 66 chr13 18509700 18510300 0.0224 46 chr13 18546900 18548400 0.1235 53 chr13 18552000 18552600 0.0009 67 chr13 18554400 18554700 0 71 chr13 18556200 18557700 0 71 chr13 18565500 18565800 0.1572 52 chr13 18571500 18572700 0.005 62 chr13 18574500 18574800 0.0945 27 chr13 18576000 18576300 0.0091 61 chr13 18580500 18581100 0.025 46 chr13 18588300 18588600 0.0826 50 chr13 18604200 18604800 0 58 chr13 18608400 18608700 0.0796 38 chr13 18671400 18672000 0.0407 48 chr13 18675900 18676200 0.0903 50 chr13 18770400 18771300 0 36 chr13 18784800 18785400 0.0495 61 chr13 18789900 18790800 0 32 chr13 18801600 18801900 0.0124 56 chr13 18902700 18903000 0.1139 20 chr13 19107000 19107300 0.1192 79 chr13 19137600 19138500 0.028 168 chr13 19274700 19275000 0.0816 12 chr13 19276200 19276500 0.0817 50 chr13 19278300 19278600 0.1208 38 chr13 19500900 19501500 0.1444 71 chr13 21377100 21377700 0.2003 347 chr13 21448200 21448800 0.0983 34 chr13 22481100 22481400 0.1837 33 chr13 24808500 24808800 0.0331 48 chr13 25004700 25005000 0.1223 48 chr13 26072700 26073000 0.015 43 chr13 26472600 26472900 0.1739 61 chr13 28265700 28266000 0.1351 28 chr13 29413500 29414400 0.0105 48 chr13 29641800 29647500 0 97 chr13 29670300 29670600 0.0612 49 chr13 31302600 31308300 0 118 chr13 32868000 32868900 0 75 chr13 34482000 34485900 0 78 chr13 35088900 35089800 0.0432 101 chr13 36009000 36011100 0.0115 78 chr13 36012900 36013200 0.0115 78 chr13 36056100 36056400 0.0321 53 chr13 36488100 36488400 0.1019 49 chr13 37152900 37153200 0.2093 99 chr13 37314600 37314900 0.0514 70 chr13 37317900 37318200 0.0828 59 chr13 37826100 37826400 0.1076 68 chr13 39003000 39005700 0 73 chr13 39986700 39987300 0.0174 58 chr13 40357200 40358400 0.0813 81 chr13 40361700 40362000 0.1835 69 chr13 40832100 40833900 0.0962 55 chr13 42425700 42430500 0.0284 101 chr13 42966900 42967200 0.0579 50 chr13 43967100 43967400 0.0966 70 chr13 43971900 43974900 0.0096 74 chr13 45381600 45381900 0.1471 27 chr13 45485400 45486000 0.0078 112 chr13 45645600 45645900 0.0862 100 chr13 45647100 45647700 0.0862 100 chr13 45649200 45649500 0.0275 73 chr13 45664200 45664500 0.0498 58 chr13 47222400 47224200 0.0241 164 chr13 48427200 48428400 0 81 chr13 48466800 48471300 0 100 chr13 49014000 49014600 0.1873 73 chr13 49153800 49155900 0.0493 73 chr13 49157700 49158000 0.0493 73 chr13 49378800 49379700 0.0521 77 chr13 49592700 49593000 0.0893 62 chr13 49799400 49800000 0.1249 108 chr13 50180400 50184000 0 68 chr13 50185500 50185800 0.0324 45 chr13 51774600 51775500 0 52 chr13 52059000 52059300 0.0246 63 chr13 52218900 52219200 0.0815 60 chr13 52230600 52231500 0 70 chr13 52233000 52233600 0 70 chr13 52237500 52239000 0 59 chr13 52247400 52248000 0.0506 66 chr13 52252500 52254000 0.0297 63 chr13 52257000 52257300 0.0279 89 chr13 52259400 52260000 0 65 chr13 52261800 52262100 0.0749 61 chr13 52267500 52268100 0.0113 59 chr13 52269900 52270500 0 96 chr13 52271700 52274400 0 96 chr13 52278300 52278600 0.0963 53 chr13 52296900 52299300 0.0143 60 chr13 52304100 52304400 0.013 59 chr13 52305600 52306500 0.0385 64 chr13 52332300 52332600 0.1184 67 chr13 52334100 52334400 0.0475 71 chr13 52488900 52489200 0.0201 61 chr13 52490700 52491000 0.0965 60 chr13 52506000 52508400 0.0371 71 chr13 52513200 52515900 0.0249 56 chr13 52528200 52528500 0.0209 60 chr13 52533900 52534200 0.0378 35 chr13 52538400 52539000 0.0252 51 chr13 52544400 52544700 0.0845 66 chr13 52546500 52547100 0.0056 54 chr13 52552500 52554000 0.0412 64 chr13 52558800 52559100 0.0588 51 chr13 52567500 52569300 0 70 chr13 52573200 52573500 0.0352 53 chr13 52575000 52575900 0 66 chr13 52587300 52587600 0.0679 59 chr13 53094000 53094300 0.2227 53 chr13 53096400 53097300 0.0213 73 chr13 57140700 57173400 0 168 chr13 57358200 57358500 0.2095 75 chr13 57401400 57401700 0 22 chr13 58512600 58513800 0.0032 80 chr13 58672800 58676700 0 72 chr13 59028900 59029200 0.2111 69 chr13 59848500 59849700 0 85 chr13 59984700 59986500 0 73 chr13 60741900 60743700 0.0011 48 chr13 63717000 63726600 0 72 chr13 63747300 63748200 0.0098 64 chr13 63749700 63755700 0 79 chr13 63759600 63769200 0 70 chr13 63824100 63830100 0 81 chr13 63831600 63832500 0.0082 50 chr13 64231500 64232100 0.0331 58 chr13 66741000 66743400 0 53 chr13 67527900 67528200 0.0451 903 chr13 67682100 67682400 0.01 65 chr13 70854600 70854900 0.0547 573 chr13 71734200 71734800 0.0263 34 chr13 73641300 73641600 0.1976 62 chr13 74236200 74237100 0.0851 71 chr13 74239200 74240700 0.0149 80 chr13 74427300 74431800 0 71 chr13 74539800 74540100 0.1065 78 chr13 74541300 74541900 0.1065 78 chr13 76545300 76547400 0.0325 77 chr13 76613100 76618500 0 88 chr13 77704500 77705100 0 34 chr13 79820100 79822500 0 86 chr13 79840800 79844100 0 57 chr13 81173100 81173400 0.1137 35 chr13 82049100 82049700 0.0017 69 chr13 83523000 83523300 0.19 61 chr13 83961900 83966100 0 76 chr13 85124400 85125000 0.0396 93 chr13 85127400 85128000 0.0279 71 chr13 85395300 85395600 0 12 chr13 85926300 85927800 0.0696 80 chr13 86253000 86258100 0 32 chr13 86259600 86264100 0 43 chr13 86266200 86268600 0 43 chr13 88199700 88200600 0.1504 66 chr13 89090700 89091000 0.2359 101 chr13 90325500 90325800 0.1218 69 chr13 91605600 91605900 0 70 chr13 92685900 92690100 0 70 chr13 93491100 93491400 0.0208 53 chr13 93492900 93494400 0.0707 60 chr13 94375800 94376100 0.0044 88 chr13 94732200 94732500 0.1758 82 chr13 94819200 94819500 0.011 58 chr13 97155900 97156200 0.0602 63 chr13 97668600 97671900 0.0087 58 chr13 97734300 97734600 0.1516 71 chr13 100699800 100700100 0.0868 83 chr13 100701900 100702800 0.0757 66 chr13 104051400 104051700 0.0469 67 chr13 104508900 104509200 0.1496 27 chr13 104654100 104655000 0.0483 65 chr13 105299700 105300000 0.0526 28 chr13 105382200 105382500 0.0517 24 chr13 105386700 105387000 0.1546 88 chr13 106216500 106217700 0.062 76 chr13 106779900 106780500 0.091 75 chr13 107921700 107922000 0.1425 56 chr13 107935200 107935500 0.1467 82 chr13 108237900 108238200 0.1092 76 chr13 108510600 108516000 0 76 chr13 109218000 109218600 0.0024 58 chr13 109569300 109569600 0.1459 13 chr13 110252700 110253000 0.1655 32 chr13 111254700 111255000 0.0128 42 chr13 111340200 111341700 0 145 chr13 111591900 111592200 0.0828 64 chr13 111669600 111703800 0 47 chr13 111753900 111757200 0 38 chr13 111759600 111781500 0 50 chr13 111783000 111789000 0 46 chr13 112015200 112015800 0.0327 67 chr13 112279200 112279500 0.1247 37 chr13 112281000 112284000 0 106 chr13 112290900 112292100 0 123 chr13 112294500 112296600 0.0104 180 chr13 112298100 112301100 0.0076 133 chr13 112302300 112308000 0 104 chr13 113067600 113069400 0.0076 144 chr13 113136600 113136900 0.1049 28 chr13 113162100 113162700 0.1165 42 chr13 113262900 113263200 0.2145 195 chr13 113371500 113371800 0.2113 91 chr13 113375400 113375700 0.2898 42 chr13 113541900 113542200 0 83 chr13 113726100 113726400 0.1697 18 chr13 113899500 113900100 0.0088 38 chr13 113940600 113941200 0 26 chr13 113985900 113986200 0 16 chr13 113987400 113988600 0 15 chr13 114008100 114009000 0.0363 69 chr13 114083700 114086700 0 56 chr13 114113700 114114000 0.0602 176 chr13 114351900 114352200 0.1106 121 chr13 114354000 114354600 0.0536 244 chr14 16023600 16024500 0 125 chr14 16026300 16030500 0 125 chr14 16031700 16034700 0 114 chr14 16036500 16036800 0 185 chr14 16038000 16053900 0 185 chr14 16055100 16055700 0 37 chr14 16056900 16063800 0 68 chr14 16065600 16086600 0 68 chr14 16090200 16091700 0 31 chr14 16096200 16096500 0.236 544 chr14 16103400 16103700 0.2427 4332 chr14 16134300 16135200 0 154 chr14 16404000 16404300 0.0118 47 chr14 18227100 18227700 0.0089 77 chr14 18229200 18229800 0.0089 77 chr14 18231000 18231600 0 72 chr14 18232800 18234900 0 72 chr14 18239400 18240000 0.1002 64 chr14 18242100 18244500 0.0041 87 chr14 18248100 18249900 0 86 chr14 18252600 18252900 0.0329 69 chr14 18254100 18254400 0.0329 69 chr14 18255600 18255900 0.1636 56 chr14 18259800 18261000 0.0601 74 chr14 18264900 18268800 0 83 chr14 18270300 18270900 0 83 chr14 18273300 18273900 0.0048 64 chr14 18276300 18276900 0.0104 53 chr14 18281400 18283200 0.0413 69 chr14 18284400 18288600 0.0013 97 chr14 18290400 18290700 0.0316 47 chr14 18297900 18298200 0.1094 63 chr14 18299700 18301800 0 87 chr14 18306000 18310200 0 77 chr14 18312900 18315000 0 68 chr14 18316500 18316800 0.0024 37 chr14 18319800 18321000 0.016 65 chr14 18323100 18324300 0 57 chr14 18326100 18329100 0 53 chr14 18331800 18332100 0.0073 74 chr14 18334200 18334800 0.0057 58 chr14 18336600 18339600 0 60 chr14 18341400 18342900 0 64 chr14 18344700 18346200 0 62 chr14 18348900 18349800 0.0652 70 chr14 18351600 18357600 0 73 chr14 18358800 18364500 0 73 chr14 18366300 18370800 0 71 chr14 18372600 18375000 0 56 chr14 18376500 18384000 0 75 chr14 18385500 18386100 0 75 chr14 18387600 18387900 0.0085 60 chr14 18390600 18391800 0.0085 60 chr14 18393300 18393600 0.1776 52 chr14 18395400 18396600 0 60 chr14 18398100 18398400 0.0939 54 chr14 18401700 18404400 0.0252 61 chr14 18411000 18411300 0.017 47 chr14 18415500 18417000 0.0061 70 chr14 18418800 18420600 0.0635 65 chr14 18424200 18425400 0.0097 96 chr14 18434400 18434700 0.0064 64 chr14 18435900 18436200 0.0951 71 chr14 18438000 18438900 0 82 chr14 18441300 18441600 0.0383 74 chr14 18443100 18443400 0.0383 74 chr14 18444900 18445200 0.0383 74 chr14 18452400 18452700 0.0907 65 chr14 18455100 18456000 0.0541 74 chr14 18463500 18465300 0 83 chr14 18469500 18471000 0.0477 69 chr14 18473400 18475200 0.0324 85 chr14 18476700 18477000 0.0979 65 chr14 18484500 18486000 0.0243 78 chr14 18487200 18487500 0.0589 58 chr14 18492600 18493200 0 64 chr14 18495600 18495900 0.2261 69 chr14 18498300 18500400 0.0166 82 chr14 18502500 18503100 0 78 chr14 18504900 18508200 0 83 chr14 18513600 18513900 0.0517 61 chr14 18517800 18520200 0 71 chr14 18522600 18522900 0.0432 71 chr14 18524700 18526200 0.026 67 chr14 18527700 18528300 0.0005 73 chr14 18531000 18534300 0 88 chr14 18535800 18537300 0.0021 79 chr14 18541200 18541800 0.0006 39 chr14 18543600 18546300 0 63 chr14 18549000 18553800 0 63 chr14 18555600 18556500 0.0304 51 chr14 18558600 18558900 0.0309 68 chr14 18564000 18567600 0.0032 64 chr14 18569400 18572700 0.0027 77 chr14 18573900 18576600 0 70 chr14 18577800 18579300 0 58 chr14 18584700 18585600 0 66 chr14 18588600 18589500 0.0653 84 chr14 18596400 18596700 0.139 76 chr14 18598800 18605400 0.002 91 chr14 18606900 18608400 0 118 chr14 18610200 18610500 0 149 chr14 18611700 18624000 0 149 chr14 18626400 18627000 0.1322 66 chr14 18628200 18630000 0 151 chr14 18632400 18633300 0 138 chr14 18634500 18635100 0 145 chr14 18638100 18638700 0 145 chr14 18639900 18642600 0 145 chr14 18644100 18649500 0 145 chr14 18696600 18697500 0.0241 140 chr14 18703500 18704700 0.0185 80 chr14 18709200 18710700 0.0011 70 chr14 18711900 18712200 0.0506 78 chr14 18862500 18881700 0 127 chr14 18882900 18883500 0 127 chr14 18885000 18903600 0 127 chr14 18905100 18928800 0 151 chr14 18931500 18939600 0 150 chr14 18941100 18947100 0 150 chr14 18951900 18952500 0.0283 140 chr14 18954600 18957900 0 144 chr14 18959700 18962400 0 144 chr14 18964800 18967500 0 179 chr14 18969300 18974400 0 179 chr14 18975900 18976800 0 179 chr14 18978300 18981000 0 179 chr14 18982800 19014300 0 179 chr14 19015500 19016400 0 179 chr14 19017600 19025100 0 127 chr14 19026300 19026600 0.2565 92 chr14 19028100 19044000 0 160 chr14 19045200 19046400 0 160 chr14 19047600 19058100 0 160 chr14 19059900 19077600 0 160 chr14 19078800 19081500 0 160 chr14 19084800 19086300 0 125 chr14 19087800 19096500 0 161 chr14 19099800 19102200 0.1031 124 chr14 19103400 19105200 0 95 chr14 19110300 19110600 0.0796 114 chr14 19112400 19113900 0 66 chr14 19116000 19117800 0 92 chr14 19119600 19120200 0.0736 82 chr14 19121700 19123200 0 104 chr14 19124700 19125300 0.145 100 chr14 19131600 19134600 0 116 chr14 19137300 19138200 0 96 chr14 19140900 19155600 0 96 chr14 19179300 19179900 0.0928 75 chr14 19183800 19184400 0.002 98 chr14 19190700 19191000 0.0762 67 chr14 19208400 19210200 0.0074 54 chr14 19211700 19215300 0 69 chr14 19218000 19223400 0 67 chr14 19224600 19237500 0 110 chr14 19239000 19239600 0 62 chr14 19242000 19255800 0 92 chr14 19257600 19259700 0 92 chr14 19261500 19264200 0 124 chr14 19265700 19266900 0.0565 133 chr14 19268700 19279500 0 131 chr14 19282200 19284300 0.0005 105 chr14 19285800 19286400 0 71 chr14 19290300 19290900 0.0308 130 chr14 19293600 19297200 0 126 chr14 19298700 19299300 0 126 chr14 19301700 19307400 0 176 chr14 19308600 19309800 0 176 chr14 19314000 19317000 0.0038 121 chr14 19319100 19319400 0.125 48 chr14 19320900 19321200 0 148 chr14 19323000 19340100 0 148 chr14 19341900 19342500 0 132 chr14 19344900 19350600 0 132 chr14 19351800 19352100 0 132 chr14 19353900 19356300 0 132 chr14 19357500 19361700 0 163 chr14 19364700 19371000 0 163 chr14 19375500 19376100 0 63 chr14 19383600 19383900 0.0174 84 chr14 19385100 19386900 0.0524 175 chr14 19389300 19389900 0.0524 175 chr14 19391100 19413900 0 158 chr14 19416600 19426200 0 158 chr14 19427700 19433700 0 158 chr14 19435800 19441500 0 148 chr14 19444200 19444500 0 128 chr14 19446300 19449900 0 128 chr14 19452900 19453200 0 150 chr14 19455000 19486200 0 150 chr14 19491000 19497000 0 98 chr14 19498200 19498500 0 98 chr14 19500000 19500300 0 98 chr14 19501500 19505700 0 105 chr14 19612500 19615200 0 85 chr14 19617600 19643700 0 92 chr14 19645200 19658100 0 118 chr14 19659600 19663500 0 118 chr14 19665600 19666200 0.1605 76 chr14 19672200 19672800 0.181 123 chr14 19682100 19686900 0 119 chr14 19688100 19688400 0.0413 36 chr14 19690800 19693800 0.0057 105 chr14 19695300 19700400 0 122 chr14 19704300 19704600 0.1937 96 chr14 19707000 19708200 0.0783 132 chr14 19709700 19711200 0 108 chr14 19712400 19713000 0 108 chr14 19714200 19714800 0.0506 97 chr14 19716900 19717500 0.0941 84 chr14 19718700 19719300 0.0394 61 chr14 19720500 19721100 0.1038 81 chr14 19722600 19722900 0.0248 88 chr14 20505900 20507400 0.1021 110 chr14 20882100 20883000 0 69 chr14 20946300 20946900 0.058 68 chr14 22674600 22676100 0 65 chr14 22680000 22681200 0 75 chr14 23920500 23921400 0.0207 62 chr14 23967600 23968200 0.04 59 chr14 23979900 23980500 0.002 59 chr14 23997300 23997600 0.2518 51 chr14 24002400 24005100 0.0144 88 chr14 24022500 24023100 0.0151 54 chr14 24111900 24113100 0 67 chr14 24486300 24489900 0 68 chr14 25207800 25208100 0.1799 50 chr14 26297100 26297400 0.2404 71 chr14 26631600 26634000 0.0271 84 chr14 26675700 26676000 0.0353 38 chr14 27459900 27460800 0.0721 60 chr14 27678300 27678900 0.0171 96 chr14 28193700 28194000 0.0309 65 chr14 29478600 29480100 0.0364 83 chr14 30364800 30367500 0.001 102 chr14 30477600 30477900 0.2039 75 chr14 30685200 30690300 0 90 chr14 31249200 31249500 0.1281 54 chr14 31794000 31797600 0 59 chr14 32269200 32269500 0.0992 52 chr14 34205400 34205700 0.0684 48 chr14 34294800 34296900 0 57 chr14 34540800 34547700 0 75 chr14 34555500 34562100 0 73 chr14 35039700 35040000 0.0803 60 chr14 35949300 35949600 0.2264 59 chr14 36144600 36144900 0.0506 89 chr14 36188400 36190200 0.0573 84 chr14 37352100 37352700 0.0379 46 chr14 37354500 37354800 0.1613 36 chr14 39512100 39512400 0.0904 46 chr14 39517500 39517800 0.1035 73 chr14 39629400 39630900 0.0139 77 chr14 39936000 39936300 0.2272 58 chr14 40327800 40328700 0.038 87 chr14 40331100 40331700 0.0309 42 chr14 40349400 40349700 0.1715 79 chr14 40351800 40352100 0.1455 57 chr14 40719000 40720200 0.0394 92 chr14 40728900 40729500 0.0047 68 chr14 40952100 40952700 0.1698 84 chr14 43065900 43066200 0 51 chr14 43372500 43372800 0.0537 66 chr14 43405800 43406100 0.1321 60 chr14 43601700 43602000 0.0716 57 chr14 44643300 44644200 0.0137 72 chr14 44705400 44710800 0 87 chr14 45389100 45389400 0.1786 95 chr14 45477600 45482100 0.0554 83 chr14 45844500 45844800 0.1236 72 chr14 45884400 45886500 0.042 67 chr14 46726800 46727400 0 52 chr14 47795400 47795700 0.2082 71 chr14 47796900 47797200 0.2621 74 chr14 47902500 47903700 0.0766 33 chr14 48188100 48189000 0 79 chr14 48190500 48192300 0.0247 63 chr14 48453900 48454200 0.1625 65 chr14 48938700 48939000 0.1145 14 chr14 49100100 49100400 0.1257 96 chr14 49535100 49535400 0.1554 38 chr14 49821300 49821600 0.2819 13 chr14 50074200 50074800 0.0177 31 chr14 51795000 51799800 0 76 chr14 52256100 52257000 0.0272 71 chr14 53270100 53270400 0.2175 67 chr14 53909400 53910900 0.0289 81 chr14 55024800 55025100 0.0474 36 chr14 55988400 55991400 0.0342 88 chr14 56017500 56017800 0.1232 78 chr14 56442000 56444400 0.0011 64 chr14 56445600 56447100 0.0249 89 chr14 56667900 56669100 0.0055 113 chr14 56673000 56673300 0.0055 113 chr14 57552300 57552600 0.15 36 chr14 58033200 58038300 0 93 chr14 58962600 58962900 0.0797 34 chr14 59948700 59951400 0.0203 67 chr14 60399000 60399300 0.0385 54 chr14 60604800 60606000 0 70 chr14 60612000 60612900 0 76 chr14 61055400 61060800 0 88 chr14 62284800 62285100 0.031 24 chr14 62286600 62287200 0.04 38 chr14 62536200 62541600 0 65 chr14 63117000 63122700 0 86 chr14 63870300 63870600 0.0846 59 chr14 64893900 64896600 0 65 chr14 64978800 64979100 0.0101 86 chr14 67870500 67870800 0.1586 52 chr14 67872300 67872600 0.229 105 chr14 70424400 70425000 0.0128 70 chr14 70476300 70476600 0.0531 95 chr14 70481100 70482000 0.0077 57 chr14 70547400 70552800 0 94 chr14 71037900 71038200 0.0972 63 chr14 71368200 71369700 0 69 chr14 71843700 71844000 0.0058 35 chr14 71979900 71980200 0.1087 78 chr14 73543500 73543800 0.0094 19 chr14 73549500 73549800 0.2293 44 chr14 74994900 74995800 0 99 chr14 77269800 77270100 0.285 178 chr14 79128000 79128300 0.2353 91 chr14 79309200 79314600 0 73 chr14 81117000 81118500 0 87 chr14 81861300 81861600 0.0365 130 chr14 82349400 82351200 0 76 chr14 82352400 82352700 0.0465 62 chr14 83169600 83169900 0.0379 40 chr14 83202300 83202600 0.0635 71 chr14 85846800 85847700 0 19 chr14 85886100 85890600 0 80 chr14 86107200 86107500 0.1489 47 chr14 86246100 86246400 0.1277 69 chr14 86473200 86473500 0.1164 67 chr14 89361000 89361900 0.2027 24 chr14 90246300 90246600 0.1611 42 chr14 91433100 91435800 0.0086 102 chr14 91640400 91645800 0 88 chr14 92640300 92640600 0.2054 38 chr14 92910900 92911500 0.0165 78 chr14 93722100 93722400 0.1243 50 chr14 99420900 99421200 0.067 549 chr14 99927900 99928200 0.2305 571 chr14 100685700 100686000 0.1916 12 chr14 100869900 100870500 0 36 chr14 101268300 101268600 0.0209 77 chr14 101271300 101271600 0.1025 75 chr14 101572200 101572500 0.2652 43 chr14 102677400 102677700 0.09 137 chr14 104217000 104217300 0.2782 47 chr14 104251200 104251800 0.009 155 chr14 105110700 105112800 0.0016 79 chr14 105229800 105240600 0 254 chr14 105276300 105277500 0.1955 58 chr14 105459600 105459900 0.2065 14 chr14 105520800 105521100 0.1125 92 chr14 105559800 105560100 0.0357 58 chr14 105561900 105562200 0.1869 50 chr14 105566100 105566400 0.0228 49 chr14 105572400 105572700 0.0632 15 chr14 105574800 105575400 0.0043 74 chr14 105578700 105579300 0.005 80 chr14 105594900 105596400 0.0089 69 chr14 105645300 105645600 0.0995 53 chr14 105680400 105680700 0.0597 59 chr14 105682200 105682500 0.109 70 chr14 105686100 105686400 0.0652 64 chr14 105692700 105693300 0.0008 75 chr14 105696000 105696900 0.0199 60 chr14 105715800 105717000 0.0048 60 chr14 105735300 105735900 0.0126 38 chr14 105756000 105756300 0.1898 42 chr14 105867600 105867900 0.0144 20 chr14 106001100 106001400 0.1507 27 chr14 106335600 106335900 0.0259 83 chr14 106337400 106337700 0.0161 111 chr14 106341900 106342200 0.0211 69 chr14 106360200 106360500 0.0232 98 chr14 106362000 106362600 0.0154 94 chr14 106471800 106473300 0 32 chr14 106476600 106481700 0 42 chr14 106701900 106703100 0 56 chr14 106716300 106716900 0.0848 71 chr14 106720500 106721100 0.0229 68 chr14 106748100 106749600 0 55 chr14 106752300 106752600 0.2945 347 chr14 106763700 106764300 0.1501 81 chr14 106767600 106768200 0.0711 64 chr15 17001000 17009100 0 102 chr15 17080500 17081700 0.1526 2089 chr15 17082900 17107200 0 967 chr15 17108400 17288100 0 967 chr15 17289300 17391600 0 967 chr15 17393100 17446200 0 967 chr15 17447400 17457900 0 69 chr15 17459400 17498400 0 345 chr15 17500500 17502600 0 100 chr15 17504700 17506200 0 43 chr15 17507400 17681100 0 139 chr15 17682300 17744400 0 125 chr15 17745900 17766600 0 125 chr15 17767800 17826300 0 125 chr15 17827500 17913900 0 125 chr15 17915100 18046500 0 129 chr15 18048600 18217800 0 140 chr15 18219300 18316200 0 140 chr15 18317400 18341100 0 97 chr15 18343200 18354900 0 94 chr15 18357000 18801900 0 301 chr15 18804000 18910500 0 180 chr15 18912600 19344900 0 324 chr15 19346400 19467300 0 275 chr15 19468500 19563300 0 275 chr15 19564800 19724700 0 289 chr15 19775400 19782600 0 125 chr15 19789200 19789500 0 27 chr15 19817100 19818600 0 60 chr15 19993500 19993800 0.0591 36 chr15 19995900 19996200 0.1375 55 chr15 20005800 20006700 0 52 chr15 20007900 20008200 0 52 chr15 20013900 20016300 0 60 chr15 20019300 20019600 0.0104 52 chr15 20022600 20028000 0 68 chr15 20030100 20031000 0 53 chr15 20035200 20036400 0 56 chr15 20040000 20041800 0 54 chr15 20043600 20046000 0 53 chr15 20047800 20048100 0.129 59 chr15 20050800 20053800 0.0025 52 chr15 20063700 20064300 0 65 chr15 20066700 20095200 0 65 chr15 20096700 20104500 0 253 chr15 20106900 20108400 0.0499 46 chr15 20109600 20113800 0 64 chr15 20116500 20116800 0.0004 47 chr15 20118000 20121900 0 86 chr15 20123700 20134500 0 86 chr15 20136300 20136600 0 63 chr15 20138100 20142300 0 63 chr15 20143500 20144400 0 68 chr15 20145900 20147100 0 52 chr15 20149800 20152800 0 61 chr15 20154600 20155800 0.0539 53 chr15 20158500 20166000 0 62 chr15 20170800 20171100 0 62 chr15 20172300 20174100 0 62 chr15 20175300 20175600 0 62 chr15 20178300 20179800 0.0005 52 chr15 20181900 20182200 0 51 chr15 20183700 20185500 0 51 chr15 20330400 20330700 0.01 70 chr15 20332200 20332500 0.0422 61 chr15 20423400 20424000 0 57 chr15 20425200 20436300 0 57 chr15 20437500 20437800 0 57 chr15 20439900 20440500 0.0229 46 chr15 20443200 20446800 0 97 chr15 20448600 20466300 0 97 chr15 20467800 20484600 0 97 chr15 20486100 20491800 0 97 chr15 20493000 20504100 0 97 chr15 20506500 20534400 0 97 chr15 20535600 20537100 0 86 chr15 20538300 20547000 0 86 chr15 20548200 20550900 0 102 chr15 20552100 20562000 0 102 chr15 20563500 20566200 0 102 chr15 20567400 20572200 0 102 chr15 20573400 20577300 0 102 chr15 20578800 20579100 0 102 chr15 20581800 20582100 0 102 chr15 20583600 20585400 0 102 chr15 20589000 20591700 0 61 chr15 20593200 20604000 0 61 chr15 20605800 20611800 0 55 chr15 20613300 20614500 0 60 chr15 20615700 20616000 0.0576 35 chr15 20617200 20623500 0 60 chr15 20626500 20627400 0 54 chr15 20630100 20640300 0 61 chr15 20674200 20675100 0 51 chr15 20678400 20678700 0.1311 31 chr15 20680200 20680500 0.1508 39 chr15 20682000 20682300 0.0999 32 chr15 20685000 20685300 0.06 34 chr15 20730600 20733300 0.009 42 chr15 20736000 20742600 0 45 chr15 20743800 20754000 0 42 chr15 20755200 20757300 0 27 chr15 20760000 20762100 0 43 chr15 20763900 20791800 0 48 chr15 20793300 20793600 0 20 chr15 20796000 20801700 0 54 chr15 20802900 20803200 0 54 chr15 20804400 20806800 0 54 chr15 20808000 20812500 0 54 chr15 20814000 20823000 0 54 chr15 20824200 20844000 0 54 chr15 20845200 20848200 0 51 chr15 20849400 20859600 0 51 chr15 20860800 20867700 0 51 chr15 20868900 20878500 0 51 chr15 20880300 20880600 0 51 chr15 20881800 20909700 0 51 chr15 20911500 20915100 0 51 chr15 20916600 20932800 0 51 chr15 20934300 20935500 0 34 chr15 20937900 20943000 0 36 chr15 20944200 20946600 0 36 chr15 20947800 20950200 0 33 chr15 20952600 20954100 0 29 chr15 20955600 20957100 0 29 chr15 20963700 20967300 0 29 chr15 20968500 20976000 0 38 chr15 20977200 20986200 0 43 chr15 20989800 20990100 0 25 chr15 20997000 20999100 0 40 chr15 21000300 21000600 0 40 chr15 21002400 21003600 0.005 43 chr15 21006000 21009000 0.005 43 chr15 21012300 21013200 0 56 chr15 21014400 21015900 0 56 chr15 21020400 21023700 0 53 chr15 21025200 21026400 0.0158 58 chr15 21028200 21038400 0 64 chr15 21041100 21043200 0 49 chr15 21046500 21052800 0 67 chr15 21054600 21055500 0.0034 43 chr15 21056700 21060600 0 49 chr15 21068700 21069000 0.1026 33 chr15 21070800 21102300 0 62 chr15 21103800 21109800 0 367 chr15 21111600 21111900 0.1734 164 chr15 21115200 21115500 0.0375 44 chr15 21117300 21120300 0 88 chr15 21123000 21123300 0 88 chr15 21124500 21130500 0 88 chr15 21131700 21141300 0 88 chr15 21142800 21143400 0 88 chr15 21144600 21150600 0 88 chr15 21152400 21154200 0 55 chr15 21155400 21159600 0 55 chr15 21161100 21162300 0.0002 48 chr15 21165000 21172800 0 53 chr15 21174000 21174300 0 54 chr15 21177300 21188700 0 54 chr15 21189900 21192900 0 54 chr15 21243300 21244200 0 36 chr15 21247500 21247800 0.0867 33 chr15 21275100 21275700 0 39 chr15 21277200 21281700 0 46 chr15 21283200 21283500 0 46 chr15 21285000 21285300 0.0013 38 chr15 21286500 21291300 0 47 chr15 21293100 21301500 0 62 chr15 21302700 21314700 0 37 chr15 21316200 21317100 0 37 chr15 21318600 21319200 0 26 chr15 21323700 21326100 0 39 chr15 21330000 21331800 0 25 chr15 21333000 21351300 0 57 chr15 21352500 21354600 0 57 chr15 21356400 21360600 0 57 chr15 21362400 21362700 0 30 chr15 21364500 21372300 0 46 chr15 21373500 21378900 0 46 chr15 21381600 21390600 0 65 chr15 21391800 21396300 0 65 chr15 21398100 21408600 0 60 chr15 21410400 21413400 0 44 chr15 21415200 21417000 0 44 chr15 21418200 21419700 0 36 chr15 21420900 21421200 0 30 chr15 21423300 21424500 0 30 chr15 21426600 21426900 0.0275 30 chr15 21429600 21430200 0 31 chr15 21431400 21432900 0.055 25 chr15 21434400 21441300 0 43 chr15 21443400 21445500 0 35 chr15 21447000 21449100 0 35 chr15 21450900 21456600 0 36 chr15 21458100 21458400 0.022 30 chr15 21460200 21469200 0 66 chr15 21471000 21471900 0 66 chr15 21473100 21474600 0 66 chr15 21476100 21483000 0 66 chr15 21484800 21486900 0 33 chr15 21488100 21493500 0 36 chr15 21494700 21509400 0 36 chr15 21510600 21514500 0 24 chr15 21515700 21516300 0 24 chr15 21517800 21526200 0 24 chr15 21527400 21529800 0 24 chr15 21539100 21540300 0.2484 36 chr15 21542400 21542700 0.0041 39 chr15 21543900 21544200 0.0041 39 chr15 21546600 21547200 0.0134 55 chr15 21551100 21559800 0 32 chr15 21562200 21565200 0 40 chr15 21567600 21568200 0 40 chr15 21570300 21573600 0.0009 35 chr15 21576300 21578400 0 38 chr15 21580500 21584400 0 38 chr15 21585600 21586800 0 23 chr15 21588600 21592200 0 55 chr15 21593400 21593700 0 36 chr15 21594900 21596400 0 36 chr15 21597900 21598200 0 36 chr15 21601800 21603300 0 33 chr15 21604500 21608400 0 33 chr15 21610800 21611100 0.056 28 chr15 21612600 21612900 0.0576 18 chr15 21615000 21616200 0 24 chr15 21617700 21620400 0.0058 26 chr15 21624000 21627300 0 33 chr15 21629100 21630600 0 51 chr15 21631800 21634200 0 51 chr15 21637800 21640500 0 28 chr15 21641700 21642000 0.0318 13 chr15 21644700 21651900 0 41 chr15 21654300 21747600 0 45 chr15 21749400 21750300 0 37 chr15 21751500 21763500 0 49 chr15 21764700 21777000 0 41 chr15 21828900 21839700 0 44 chr15 21840900 21854100 0 40 chr15 21855600 21858600 0 44 chr15 21859800 21869700 0 44 chr15 21871500 21889500 0 43 chr15 21891000 21920400 0 43 chr15 21922200 21924900 0 43 chr15 21926400 21928500 0 43 chr15 21929700 21940800 0 37 chr15 21942000 21946500 0 37 chr15 21948000 21951900 0 37 chr15 21953100 21953400 0 37 chr15 21956100 21963600 0 30 chr15 21964800 21978300 0 47 chr15 21979800 21986400 0 47 chr15 21988500 21997500 0 58 chr15 21998700 21999000 0 58 chr15 22000200 22002900 0 35 chr15 22005900 22035600 0 35 chr15 22037100 22042800 0 27 chr15 22044900 22048200 0 30 chr15 22050600 22050900 0 14 chr15 22055400 22056000 0 30 chr15 22057200 22058400 0 30 chr15 22059900 22079400 0 54 chr15 22080600 22094700 0 39 chr15 22096500 22101000 0 39 chr15 22102500 22120200 0 27 chr15 22122600 22124700 0.0024 21 chr15 22128300 22190700 0 52 chr15 22192200 22202100 0 52 chr15 22203300 22218300 0 42 chr15 22219500 22220400 0 42 chr15 22303800 22305300 0 58 chr15 22306500 22307100 0 49 chr15 22359300 22365000 0 64 chr15 22366200 22370400 0 64 chr15 22373100 22383000 0 55 chr15 22384500 22384800 0.1 34 chr15 22386000 22386900 0 53 chr15 22390500 22394700 0 48 chr15 22396500 22405800 0 68 chr15 22408800 22411500 0 53 chr15 22414800 22416600 0.0024 54 chr15 22418100 22418700 0.0024 54 chr15 22423500 22436100 0 94 chr15 22437600 22441200 0 107 chr15 22442700 22443600 0 107 chr15 22445400 22448400 0 107 chr15 22449900 22451400 0 92 chr15 22453800 22462800 0 92 chr15 22464900 22465500 0.1186 77 chr15 22466700 22476600 0 98 chr15 22477800 22482300 0 98 chr15 22484100 22485600 0.038 57 chr15 22487400 22494000 0 87 chr15 22496400 22496700 0.1487 42 chr15 22498200 22499100 0 44 chr15 22500600 22502700 0.0153 86 chr15 22503900 22505100 0.0738 66 chr15 22508700 22511700 0 70 chr15 22513800 22515300 0 70 chr15 22516800 22518300 0 70 chr15 22519500 22529700 0 70 chr15 22531200 22531500 0 75 chr15 22534200 22539000 0 75 chr15 22540200 22546200 0 75 chr15 22547700 22549800 0.0098 71 chr15 22551300 22551900 0.0079 59 chr15 22554000 22557900 0 78 chr15 22560300 22560600 0.02 53 chr15 22562100 22563000 0.0483 68 chr15 22565700 22568400 0.0052 82 chr15 22575600 22577400 0 76 chr15 22578600 22580400 0 76 chr15 22586400 22587000 0.018 70 chr15 22588500 22588800 0.0171 67 chr15 22593600 22593900 0.1487 67 chr15 22602600 22602900 0.0145 49 chr15 22605900 22606200 0.0749 63 chr15 22609800 22610100 0.0307 67 chr15 22673100 22673400 0.1243 66 chr15 22676100 22677600 0.0653 52 chr15 22704600 22704900 0.0952 29 chr15 22770300 22770600 0.0054 28 chr15 23124300 23163000 0 101 chr15 23164200 23173500 0 100 chr15 23178300 23178600 0.0341 77 chr15 23182800 23183400 0 66 chr15 23192100 23192400 0.2023 103 chr15 23197500 23198100 0 51 chr15 23199300 23200200 0.15 138 chr15 23202000 23202300 0.1363 60 chr15 23206500 23206800 0.0152 83 chr15 23210100 23210400 0.0447 68 chr15 23212500 23212800 0.1098 77 chr15 23217600 23218800 0.0409 100 chr15 23221500 23221800 0.2066 50 chr15 23277000 23294700 0 87 chr15 23296500 23296800 0.0437 45 chr15 23299200 23299500 0.0422 56 chr15 23303400 23303700 0.1532 69 chr15 23313000 23334000 0 94 chr15 23335200 23357400 0 98 chr15 23358900 23359200 0.1229 72 chr15 23363700 23364000 0.0399 90 chr15 23428500 23433900 0 71 chr15 23445000 23445300 0.089 11 chr15 24134400 24135000 0.0002 61 chr15 24138000 24138600 0.0207 59 chr15 24191700 24192300 0.0057 58 chr15 25758000 25758600 0.0241 98 chr15 27852900 27853200 0.1756 142 chr15 28202700 28203300 0.0054 65 chr15 28205400 28205700 0.1991 71 chr15 28213200 28213500 0.0468 44 chr15 28322100 28336200 0 104 chr15 28337400 28372500 0 104 chr15 28374900 28376100 0 106 chr15 28377300 28415400 0 106 chr15 28417500 28429500 0 145 chr15 28431000 28437000 0 102 chr15 28438200 28440000 0 102 chr15 28441200 28445100 0 94 chr15 28446600 28452000 0 94 chr15 28465500 28470900 0 93 chr15 28472700 28475400 0 73 chr15 28478700 28479300 0.0058 74 chr15 28480800 28484100 0 97 chr15 28485300 28485900 0 97 chr15 28488600 28488900 0 130 chr15 28490400 28491300 0 130 chr15 28495800 28496100 0 136 chr15 28497600 28497900 0 136 chr15 28499100 28505700 0 136 chr15 28507200 28508400 0 54 chr15 28510500 28510800 0.037 59 chr15 28512300 28512900 0.0033 98 chr15 28515600 28541100 0 114 chr15 28542300 28542900 0.0577 56 chr15 28545000 28545600 0 97 chr15 28546800 28564200 0 97 chr15 28565700 28568400 0 97 chr15 28569600 28573200 0 97 chr15 28574700 28581000 0 83 chr15 28582800 28589400 0 83 chr15 28592400 28596000 0.0313 73 chr15 28597500 28598100 0.0313 73 chr15 28599300 28600200 0.0299 66 chr15 28603800 28605600 0 71 chr15 28608600 28609500 0.0029 54 chr15 28614900 28628100 0 70 chr15 28629600 28633200 0 70 chr15 28635900 28638900 0 75 chr15 28640700 28641000 0 75 chr15 28642200 28644600 0 62 chr15 28646100 28646400 0.0199 53 chr15 28649100 28651800 0 93 chr15 28654800 28655100 0.0581 48 chr15 28658400 28658700 0.1973 42 chr15 28659900 28661700 0 62 chr15 28662900 28664100 0.0023 74 chr15 28665300 28665600 0.189 75 chr15 28670100 28674600 0 75 chr15 28679700 28681500 0 64 chr15 28682700 28683300 0 64 chr15 28697100 28697400 0.0291 59 chr15 28747800 28748100 0.1696 59 chr15 30082800 30089400 0 104 chr15 30090900 30091200 0 104 chr15 30097200 30103500 0 85 chr15 30105300 30108300 0 85 chr15 30110100 30119400 0 76 chr15 30120600 30122400 0 76 chr15 30125400 30135900 0 93 chr15 30137700 30139800 0 93 chr15 30141600 30142200 0 68 chr15 30143700 30144600 0 68 chr15 30146100 30147900 0 68 chr15 30150000 30150300 0.134 69 chr15 30152400 30153000 0.0782 59 chr15 30158400 30160800 0 53 chr15 30163500 30172500 0 61 chr15 30173700 30174900 0.0354 51 chr15 30177000 30180600 0 64 chr15 30183600 30189300 0 58 chr15 30190500 30191100 0.0137 47 chr15 30193500 30195600 0 47 chr15 30197700 30200400 0 51 chr15 30202200 30207900 0 51 chr15 30210000 30210300 0 51 chr15 30212700 30224100 0 66 chr15 30225900 30227400 0 37 chr15 30229200 30237600 0 82 chr15 30238800 30245400 0 82 chr15 30246600 30247200 0.0182 30 chr15 30248400 30248700 0 60 chr15 30249900 30252300 0 60 chr15 30253800 30254700 0 47 chr15 30255900 30256200 0.1702 21 chr15 30257400 30261000 0 60 chr15 30262200 30291000 0 60 chr15 30292200 30302400 0 55 chr15 30303600 30317700 0 60 chr15 30319200 30321300 0 49 chr15 30323400 30325200 0 49 chr15 30326700 30327000 0.0097 48 chr15 30328800 30329100 0 52 chr15 30330600 30333300 0 52 chr15 30334500 30334800 0.0095 40 chr15 30336000 30341100 0 57 chr15 30342900 30344100 0.0339 71 chr15 30348000 30354900 0 52 chr15 30356700 30366600 0 71 chr15 30367800 30370800 0 57 chr15 30374100 30374400 0.1125 54 chr15 30376200 30407400 0 96 chr15 30408600 30438000 0 96 chr15 30439200 30442200 0 96 chr15 30445800 30453900 0 55 chr15 30455400 30457800 0 55 chr15 30459000 30477300 0 55 chr15 30480300 30483300 0 46 chr15 30494100 30503400 0 64 chr15 30506700 30511200 0 54 chr15 30513300 30515100 0 48 chr15 30516600 30519300 0 48 chr15 30520500 30520800 0 48 chr15 30523200 30525900 0.0359 62 chr15 30528000 30558900 0 96 chr15 30561000 30567000 0 96 chr15 30568200 30585000 0 79 chr15 30586200 30587700 0 80 chr15 30590700 30591600 0 80 chr15 30594900 30595500 0 71 chr15 30598200 30602400 0 75 chr15 30604500 30604800 0.0275 80 chr15 30607200 30607500 0.0299 72 chr15 30610800 30611100 0.0315 61 chr15 30640200 30640500 0.0549 63 chr15 30652800 30653100 0.1413 48 chr15 30681600 30681900 0.1024 67 chr15 30693000 30693300 0.2152 69 chr15 30699300 30700800 0 68 chr15 30703500 30703800 0.2091 51 chr15 30751500 30751800 0.0428 56 chr15 30755400 30755700 0.1171 55 chr15 31511400 31511700 0.0627 28 chr15 31650000 31650300 0.0981 55 chr15 31653900 31654200 0.1252 58 chr15 31692000 31692300 0.0084 58 chr15 31696200 31696500 0.125 59 chr15 31701900 31702200 0.1716 59 chr15 31704000 31704300 0 84 chr15 31705800 31707300 0 84 chr15 31712400 31712700 0.2852 50 chr15 31723500 31724100 0.1813 57 chr15 32154000 32154600 0 55 chr15 32156400 32156700 0 55 chr15 32157900 32158200 0 74 chr15 32159700 32165400 0 74 chr15 32168400 32173500 0 50 chr15 32175000 32176800 0 64 chr15 32178300 32178600 0 64 chr15 32180100 32183100 0 64 chr15 32186700 32187000 0.0097 72 chr15 32188800 32195700 0 61 chr15 32196900 32200200 0 61 chr15 32202600 32206800 0 61 chr15 32208900 32214900 0 62 chr15 32226600 32238900 0 58 chr15 32240400 32240700 0 58 chr15 32242500 32246400 0 58 chr15 32248500 32251200 0 55 chr15 32252400 32259300 0 61 chr15 32260800 32271300 0 61 chr15 32272500 32278200 0 61 chr15 32280300 32290200 0 56 chr15 32291700 32292300 0 61 chr15 32293500 32309700 0 61 chr15 32311200 32312400 0.0211 60 chr15 32314500 32314800 0.1334 46 chr15 32316600 32320800 0 62 chr15 32322000 32323200 0 62 chr15 32324400 32325300 0 54 chr15 32328300 32328600 0.048 35 chr15 32331000 32335800 0 59 chr15 32338500 32339400 0 51 chr15 32340600 32340900 0 51 chr15 32343300 32346000 0 50 chr15 32347500 32348100 0.0036 44 chr15 32349300 32355600 0 69 chr15 32358000 32362500 0 60 chr15 32363700 32372100 0 65 chr15 32373300 32374800 0 65 chr15 32377500 32379900 0 60 chr15 32382600 32382900 0.0022 39 chr15 32385600 32385900 0.087 54 chr15 32389200 32394000 0 85 chr15 32396100 32396400 0 85 chr15 32399100 32404800 0 92 chr15 32406600 32407200 0.0042 70 chr15 32408400 32409600 0 77 chr15 32410800 32412900 0.0065 56 chr15 32416200 32418000 0 81 chr15 32419500 32420100 0 81 chr15 32422800 32425800 0 66 chr15 32427000 32430600 0 62 chr15 32432400 32439600 0 82 chr15 32441700 32450400 0 110 chr15 32451900 32458500 0 87 chr15 32460000 32464800 0 87 chr15 32466300 32479800 0 87 chr15 32481300 32484600 0 87 chr15 32485800 32486400 0 58 chr15 32487600 32491200 0 58 chr15 32492700 32500800 0 58 chr15 32504100 32513400 0 58 chr15 32524500 32545500 0 56 chr15 32546700 32551500 0 55 chr15 32552700 32562000 0 55 chr15 32563500 32564400 0 63 chr15 32565600 32572800 0 63 chr15 32576700 32578200 0 74 chr15 32579700 32585700 0 74 chr15 32587200 32606400 0 74 chr15 32630100 32630400 0.0579 56 chr15 34381800 34385400 0 81 chr15 34387200 34392600 0 85 chr15 34393800 34397100 0 85 chr15 34399500 34408500 0 85 chr15 34410000 34410300 0.0021 63 chr15 34413000 34416900 0 75 chr15 34419300 34419600 0.0139 85 chr15 34422000 34422600 0.0005 78 chr15 34523700 34524000 0.1112 24 chr15 34527900 34558800 0 80 chr15 34560300 34563300 0 80 chr15 34565100 34567200 0 79 chr15 34568400 34568700 0.0031 62 chr15 34570500 34571100 0.1148 51 chr15 34716900 34717200 0.2083 57 chr15 36199200 36199500 0.1263 76 chr15 36683400 36683700 0.013 53 chr15 37430100 37430400 0.1018 90 chr15 37515000 37515300 0.1829 48 chr15 38787300 38787600 0.1148 47 chr15 38974800 38975100 0.2043 15 chr15 39421800 39423600 0.0216 100 chr15 39424800 39425100 0.0216 100 chr15 39522900 39523200 0.1763 59 chr15 40681800 40684200 0.0075 57 chr15 41382300 41384100 0.0484 107 chr15 43561500 43596300 0 81 chr15 43599600 43599900 0.0334 55 chr15 43605600 43606200 0 73 chr15 43610400 43619100 0 89 chr15 43642500 43642800 0.0971 49 chr15 43661100 43696200 0 81 chr15 43699500 43699800 0.1456 65 chr15 43705200 43705800 0 71 chr15 43709700 43718700 0 81 chr15 44253300 44257200 0 104 chr15 44823900 44826900 0 80 chr15 44922900 44923200 0.1014 50 chr15 44936400 44936700 0.0814 76 chr15 45031800 45032100 0.0398 53 chr15 45072000 45072300 0 47 chr15 45074700 45076800 0 76 chr15 45598500 45599400 0.0008 71 chr15 46107000 46107300 0.0961 61 chr15 46368600 46368900 0.1938 47 chr15 46746000 46746300 0.1709 105 chr15 46748100 46748400 0.1353 75 chr15 46998300 46998900 0.0076 67 chr15 47133600 47134200 0.0728 60 chr15 47170200 47170500 0.1953 56 chr15 49356600 49356900 0.0694 77 chr15 49398600 49400400 0.0046 77 chr15 51174900 51176700 0.0619 95 chr15 51178500 51178800 0.0619 95 chr15 51417600 51423000 0 85 chr15 51583500 51585000 0 41 chr15 52233000 52233300 0 18 chr15 52907100 52908000 0.0082 43 chr15 53136900 53139000 0 94 chr15 53156100 53157000 0 63 chr15 53495100 53495700 0.0242 77 chr15 53541600 53542800 0.1294 84 chr15 54926100 54932100 0 121 chr15 55068300 55068600 0.0837 64 chr15 55987200 55987800 0.0034 62 chr15 56311500 56313000 0.0787 119 chr15 56575800 56576100 0.1565 72 chr15 57687900 57688200 0.061 20 chr15 58126500 58127100 0.0111 81 chr15 58129200 58129500 0.0387 71 chr15 58131000 58131300 0.0387 71 chr15 59420700 59421000 0 21 chr15 60367800 60368100 0.1586 24 chr15 60816300 60816600 0.0718 21 chr15 61899000 61899300 0.1187 72 chr15 64327800 64331700 0.0716 102 chr15 66450000 66452100 0 73 chr15 68133900 68136000 0 30 chr15 68691300 68691600 0.17 20 chr15 70729800 70735200 0 87 chr15 71095500 71095800 0.2187 53 chr15 71175000 71179800 0 93 chr15 71593200 71593500 0.2442 36 chr15 71769300 71769600 0.0654 72 chr15 71907300 71907600 0.1512 63 chr15 72631800 72632400 0.0012 66 chr15 72634800 72636300 0 136 chr15 72637500 72663300 0 136 chr15 72665400 72668700 0.0057 102 chr15 73219500 73219800 0.0949 76 chr15 73512300 73512600 0.0215 78 chr15 73533000 73533300 0.0238 81 chr15 74068800 74070600 0 145 chr15 74073900 74092200 0 158 chr15 74093700 74098800 0 89 chr15 74100900 74101800 0 89 chr15 74103600 74105400 0.0009 68 chr15 74977200 74977500 0.0438 19 chr15 75255900 75268800 0 147 chr15 75270600 75272400 0 147 chr15 75276600 75295200 0 134 chr15 75480900 75481200 0.1983 67 chr15 75702900 75703200 0.0784 55 chr15 75708000 75708300 0.1157 60 chr15 77618400 77618700 0.1664 260 chr15 77883000 77883300 0.0744 58 chr15 77948400 77948700 0.0715 73 chr15 77949900 77950200 0 86 chr15 77952300 77952900 0 86 chr15 78742800 78746100 0 72 chr15 78747300 78747600 0.0502 34 chr15 79273200 79275300 0.1157 94 chr15 79648800 79649100 0.0739 74 chr15 81091500 81091800 0.079 49 chr15 81655800 81656100 0.1239 63 chr15 81669000 81669300 0.061 74 chr15 81671400 81671700 0.061 74 chr15 81699900 81701100 0.1251 75 chr15 81799200 81799500 0.0528 82 chr15 81801900 81803400 0.0368 90 chr15 81996300 81997500 0.0239 90 chr15 81999300 82000200 0.0239 90 chr15 82242600 82243500 0 72 chr15 82250100 82250400 0.1592 73 chr15 82318800 82319400 0.002 69 chr15 82320600 82320900 0 68 chr15 82322400 82324200 0 68 chr15 82329300 82331100 0 44 chr15 82341300 82341900 0 89 chr15 82348800 82352100 0 75 chr15 82355400 82360500 0.0007 62 chr15 82361700 82364700 0 69 chr15 82366500 82367100 0 69 chr15 82421700 82423800 0 86 chr15 82425300 82426800 0 86 chr15 82428600 82428900 0 86 chr15 82430100 82431600 0 73 chr15 82433700 82434000 0.0858 90 chr15 82435800 82436100 0.0858 90 chr15 82437300 82438800 0.0757 74 chr15 82440300 82448700 0 107 chr15 82450200 82452600 0 93 chr15 82455000 82471800 0 141 chr15 82485000 82487100 0 46 chr15 82489500 82491900 0.1002 56 chr15 82493400 82497300 0 74 chr15 82502100 82506600 0 65 chr15 82508700 82523100 0 77 chr15 82883100 82888800 0 77 chr15 82990200 82990500 0.0062 50 chr15 82998600 82998900 0.035 77 chr15 83386200 83386800 0.0745 82 chr15 83451000 83456100 0 75 chr15 84099600 84101100 0 66 chr15 84165900 84173100 0 81 chr15 84174300 84197400 0 81 chr15 84198900 84246300 0 84 chr15 84247800 84252000 0 38 chr15 84253200 84270000 0 43 chr15 84320100 84360300 0 77 chr15 84362100 84384000 0 52 chr15 84403800 84425400 0 110 chr15 84426600 84474300 0 96 chr15 84476100 84493800 0 75 chr15 84495000 84516600 0 95 chr15 84519900 84522000 0 79 chr15 84523200 84525300 0 66 chr15 84564300 84564600 0.1583 40 chr15 85188900 85192500 0 153 chr15 85193700 85200900 0 153 chr15 85202100 85224300 0 153 chr15 85226100 85229700 0 82 chr15 85231500 85232100 0 82 chr15 85233300 85233600 0 82 chr15 85237800 85238400 0.0088 66 chr15 85240800 85241100 0 107 chr15 85242300 85242900 0 107 chr15 85265700 85267200 0.011 76 chr15 85270500 85271100 0.0043 68 chr15 85435500 85436400 0.081 68 chr15 85881900 85882200 0.2256 100 chr15 86528700 86529300 0.0177 90 chr15 86531100 86531700 0.0024 71 chr15 87000000 87001200 0.1134 65 chr15 87510600 87515700 0 96 chr15 88855800 88856700 0 130 chr15 88941000 88942500 0.0017 78 chr15 89637000 89637300 0.1499 78 chr15 89639400 89639700 0.0974 49 chr15 89853600 89853900 0.1086 81 chr15 91763100 91763400 0.0205 71 chr15 93678900 93679800 0.013 88 chr15 97266000 97268100 0 41 chr15 97270500 97270800 0.1382 18 chr15 98089200 98089500 0.027 62 chr15 99013800 99014100 0.057 69 chr15 100422000 100422600 0.0474 57 chr15 100557300 100557600 0.2726 23 chr15 100719300 100720200 0 60 chr15 101311800 101312100 0.2267 22 chr15 101627400 101627700 0.1895 35 chr15 101630100 101630700 0.133 96 chr15 101745600 101747100 0.0732 62 chr15 101752800 101753700 0.0496 122 chr15 101754900 101762700 0 148 chr15 101860200 101860500 0.0281 76 chr15 101862000 101862300 0 34 chr15 101863800 101864100 0.0626 84 chr15 101868900 101869200 0.0212 71 chr15 101873100 101873400 0.0081 84 chr15 101893500 101893800 0.1042 86 chr15 101896500 101897400 0 52 chr15 101911200 101912700 0.0101 61 chr15 101918400 101918700 0.035 79 chr15 101921100 101921400 0.1487 61 chr15 101922600 101923200 0.0217 83 chr15 101926200 101928000 0 80 chr15 101929500 101932200 0 92 chr15 101933400 101934900 0 92 chr15 101937000 101937900 0 92 chr15 101939700 101940300 0.0152 80 chr15 101943000 101944500 0 117 chr15 101948700 101949000 0.0611 115 chr15 101950200 101953500 0.0017 115 chr15 101954700 101955000 0.0668 104 chr15 101956200 101961900 0 141 chr15 101963400 101963700 0.0811 171 chr15 101969100 101969700 0.0608 148 chr15 101971800 101972400 0.0148 120 chr15 101976600 101976900 0.0736 159 chr15 101978100 101979900 0 109 chr16 14700 16800 0 148 chr16 20100 21600 0.001 70 chr16 25500 26700 0.0452 63 chr16 28800 29400 0.0172 67 chr16 153600 153900 0.0066 66 chr16 164100 164700 0.0017 53 chr16 172500 173100 0 35 chr16 458400 458700 0.2609 175 chr16 481800 482100 0.259 55 chr16 585000 585300 0.1015 21 chr16 599700 600000 0.1702 77 chr16 846900 847200 0.2419 501 chr16 953700 954000 0.2527 39 chr16 960900 962100 0 91 chr16 1228800 1229400 0.0084 60 chr16 1231800 1232700 0 68 chr16 1234200 1237800 0.0015 68 chr16 1241700 1242000 0.0034 64 chr16 1248600 1250100 0.0021 61 chr16 1251900 1252500 0.066 61 chr16 1253700 1254600 0 66 chr16 1599000 1599300 0.23 55 chr16 2543100 2543400 0.0002 63 chr16 2547300 2551200 0 72 chr16 2554500 2557800 0 74 chr16 2561400 2562000 0 80 chr16 2563200 2575500 0 80 chr16 2578800 2579100 0 69 chr16 2580600 2584200 0 69 chr16 2607000 2609400 0 84 chr16 2612400 2613900 0 81 chr16 2616000 2621400 0 69 chr16 2624700 2638800 0 73 chr16 2642400 2645700 0 73 chr16 2650800 2654700 0 87 chr16 2658000 2658300 0.0019 73 chr16 2679000 2679300 0.0326 67 chr16 2686200 2686800 0.0055 94 chr16 2688600 2689500 0 71 chr16 2694600 2696100 0 85 chr16 3886800 3887100 0.1546 83 chr16 5754600 5755200 0.0229 89 chr16 7008900 7009200 0.1654 112 chr16 8058000 8060100 0 84 chr16 8953800 8954100 0.0121 32 chr16 9584700 9590100 0 83 chr16 11928300 11931000 0 88 chr16 11939700 11940000 0.0555 70 chr16 14688300 14768400 0 103 chr16 14773500 14774100 0.0295 69 chr16 14776500 14777100 0 80 chr16 14780400 14783700 0 81 chr16 14785200 14786700 0 81 chr16 14788200 14788500 0 81 chr16 14789700 14800200 0 83 chr16 14801700 14802000 0.0946 56 chr16 14803200 14803800 0.0169 64 chr16 14808300 14810400 0.0143 73 chr16 14813100 14813400 0.0783 53 chr16 14819400 14820000 0 63 chr16 14826600 14827200 0.0038 77 chr16 14833800 14834400 0.0158 60 chr16 14837700 14838000 0.0638 57 chr16 14840100 14840400 0.0299 68 chr16 14844600 14844900 0.0299 68 chr16 14846400 14847600 0 68 chr16 14848800 14849400 0 68 chr16 14853000 14853300 0.203 69 chr16 14857800 14858100 0.1174 64 chr16 14863500 14864100 0.01 81 chr16 14872200 14872800 0.1178 72 chr16 14881800 14882400 0.0151 50 chr16 14896500 14897100 0.0098 65 chr16 14898600 14899200 0 73 chr16 14905500 14912700 0 88 chr16 14916300 14922300 0 97 chr16 14923800 14924400 0 97 chr16 14925600 14930400 0 97 chr16 14933400 14934600 0.007 88 chr16 14935800 14937600 0.0098 94 chr16 14938800 14943600 0.0004 95 chr16 14945700 14946300 0.007 80 chr16 14948700 14953200 0 101 chr16 15103800 15104100 0.0059 53 chr16 15105300 15105600 0.0498 90 chr16 15108600 15108900 0.0458 64 chr16 15112800 15114000 0 95 chr16 15115500 15118500 0 95 chr16 15120000 15121800 0 95 chr16 15123600 15123900 0.0771 75 chr16 15138300 15139500 0 84 chr16 15150600 15151200 0 67 chr16 15152400 15153300 0 67 chr16 15155700 15156000 0.0143 69 chr16 15166200 15166800 0.0558 72 chr16 15179100 15179400 0.0101 61 chr16 15183600 15183900 0 72 chr16 15185100 15185700 0 72 chr16 15186900 15188400 0 72 chr16 15195900 15196200 0.0928 65 chr16 15197700 15198000 0.0007 66 chr16 15200100 15200400 0.0007 66 chr16 15208200 15208800 0.0287 62 chr16 15210600 15213600 0.0077 68 chr16 15215400 15215700 0.0077 68 chr16 15222000 15222300 0.1207 74 chr16 15224400 15226800 0 76 chr16 15234600 15235200 0.0289 68 chr16 15236400 15241800 0 82 chr16 15243000 15244200 0 78 chr16 15245700 15256800 0 78 chr16 15258300 15261900 0 78 chr16 15266100 15266700 0.0344 46 chr16 15268800 15269100 0.086 74 chr16 15273000 15273600 0 88 chr16 15276600 15276900 0.0789 67 chr16 15279600 15280500 0.0339 72 chr16 15295500 15297300 0.0208 74 chr16 15310200 15310500 0.0206 58 chr16 15315600 15315900 0.1591 70 chr16 15320100 15320400 0 70 chr16 15325200 15325800 0.0124 68 chr16 15328800 15340800 0 103 chr16 15342000 15349200 0 103 chr16 15350700 15356400 0 103 chr16 15357900 15366600 0 103 chr16 15367800 15368100 0.0195 71 chr16 15369600 15369900 0.1143 89 chr16 15373500 15375000 0.0568 78 chr16 15378600 15378900 0.0139 81 chr16 16218300 16218900 0.0083 63 chr16 16225500 16226100 0 63 chr16 16232700 16233900 0.015 70 chr16 16239600 16239900 0.0714 44 chr16 16244400 16248000 0 77 chr16 16250700 16251000 0.0273 56 chr16 16252500 16254000 0.0273 56 chr16 16256400 16257300 0.0004 71 chr16 16259700 16260300 0 58 chr16 16261800 16262400 0.0131 58 chr16 16263600 16264500 0.0171 69 chr16 16270500 16357500 0 111 chr16 16359300 16362600 0 74 chr16 16364100 16364700 0.0016 46 chr16 16368300 16370700 0 89 chr16 16372500 16386300 0 83 chr16 16387500 16404300 0 99 chr16 16405500 16418700 0 99 chr16 16421700 16422000 0.0039 67 chr16 16423200 16423500 0.0039 67 chr16 16426500 16429800 0 91 chr16 16431000 16431300 0.0597 59 chr16 16433700 16434000 0.0298 68 chr16 16435800 16437900 0.0298 68 chr16 16439700 16441200 0.0371 68 chr16 16442400 16443000 0.0371 68 chr16 16444500 16445700 0.0032 81 chr16 16450500 16450800 0.0813 58 chr16 16455300 16456200 0.0994 73 chr16 16458600 16460400 0 80 chr16 16464600 16465200 0.0063 54 chr16 16475400 16477500 0.0694 69 chr16 16479300 16479600 0.0137 63 chr16 16482900 16483800 0 65 chr16 16486200 16488000 0.0054 61 chr16 16489500 16490100 0 68 chr16 16493700 16528500 0 86 chr16 16531200 16534500 0 59 chr16 16557300 16557900 0.0459 69 chr16 16559700 16560000 0.0627 70 chr16 16565400 16567500 0 69 chr16 16589700 16590000 0.005 48 chr16 16592400 16592700 0.0203 40 chr16 16595100 16595400 0.0716 68 chr16 16604700 16605000 0.1116 74 chr16 16614900 16615200 0.0431 49 chr16 16616700 16617300 0 54 chr16 16620900 16621800 0.058 63 chr16 16623900 16624200 0.1416 65 chr16 16626000 16626300 0.0009 29 chr16 16639500 16642800 0 66 chr16 16646700 16650600 0 74 chr16 16656300 16656900 0.0055 65 chr16 16659300 16662600 0 78 chr16 16664400 16683600 0 74 chr16 16684800 16686300 0.0248 71 chr16 16688400 16689300 0.0635 51 chr16 16690800 16691700 0 81 chr16 16694400 16699500 0 77 chr16 16701000 16702500 0 75 chr16 16704600 16735200 0 75 chr16 16737300 16737600 0.1306 60 chr16 16758000 16758900 0.0516 67 chr16 16840800 16846200 0 91 chr16 18077400 18078300 0.0126 54 chr16 18090600 18091200 0.1442 56 chr16 18095100 18097500 0 66 chr16 18098700 18099600 0 66 chr16 18101100 18101400 0.1613 60 chr16 18105300 18105600 0.0458 59 chr16 18107400 18107700 0.0334 63 chr16 18109200 18113100 0.0133 68 chr16 18120000 18120300 0.007 59 chr16 18122100 18126300 0 65 chr16 18131100 18131400 0.0611 66 chr16 18133500 18133800 0 73 chr16 18135000 18138600 0 73 chr16 18146100 18147300 0 71 chr16 18154500 18155100 0.0567 56 chr16 18178800 18179100 0.0542 74 chr16 18183600 18183900 0.0096 74 chr16 18185100 18185700 0.0096 74 chr16 18186900 18189600 0 63 chr16 18193200 18193800 0.1008 93 chr16 18205500 18205800 0.0972 74 chr16 18225600 18226200 0.0183 65 chr16 18228300 18229500 0 65 chr16 18239100 18240300 0.0608 59 chr16 18246900 18247200 0 58 chr16 18251400 18255000 0 78 chr16 18256500 18256800 0.074 49 chr16 18264900 18266400 0.055 60 chr16 18268200 18273300 0 76 chr16 18274800 18278100 0 76 chr16 18280500 18280800 0 62 chr16 18282000 18285900 0 62 chr16 18288900 18291000 0.0211 73 chr16 18293400 18304800 0 80 chr16 18306600 18340200 0 100 chr16 18342300 18347700 0 100 chr16 18348900 18354000 0 96 chr16 18355200 18382500 0 107 chr16 18384000 18393000 0 81 chr16 18394800 18435900 0 81 chr16 18486600 18524100 0 79 chr16 18530100 18531000 0.0485 95 chr16 18534600 18535200 0.0133 56 chr16 18537600 18538200 0.0377 59 chr16 18542700 18543000 0.0257 67 chr16 18545700 18547200 0 61 chr16 18549600 18550200 0.0601 63 chr16 18551400 18552600 0.1213 71 chr16 18554700 18556200 0.0142 56 chr16 18600300 18600600 0.1043 57 chr16 18603000 18603300 0.1615 70 chr16 18624000 18648600 0 84 chr16 18649800 18654600 0 84 chr16 18655800 18658200 0 84 chr16 18660000 18663900 0 71 chr16 18667200 18668400 0 70 chr16 18672600 18673200 0 76 chr16 18675600 18678900 0 76 chr16 18680100 18687900 0 71 chr16 18689400 18691800 0 72 chr16 18693000 18694200 0 72 chr16 18696600 18697200 0 77 chr16 18699000 18699600 0 66 chr16 18702300 18702600 0.0075 64 chr16 18705600 18705900 0.1123 34 chr16 18707400 18713400 0 76 chr16 18716700 18719700 0 65 chr16 18720900 18722400 0.034 36 chr16 18729000 18729600 0 54 chr16 18736500 18736800 0.108 72 chr16 18740400 18740700 0.081 44 chr16 18761100 18761400 0.0162 54 chr16 18763800 18764100 0.0397 54 chr16 18821400 18826800 0 68 chr16 19003500 19003800 0.0875 69 chr16 19786800 19800900 0 37 chr16 19802100 19802400 0.0318 30 chr16 20185800 20186100 0.0047 89 chr16 20443200 20451300 0 71 chr16 20484300 20484600 0.1726 53 chr16 20490000 20501100 0 83 chr16 20522400 20532900 0 77 chr16 20539200 20539500 0.0782 62 chr16 20576400 20584800 0 73 chr16 21043500 21044700 0.0282 76 chr16 21381600 21384900 0 62 chr16 21386100 21386700 0.0244 69 chr16 21389100 21389400 0.081 82 chr16 21390600 21390900 0 67 chr16 21393600 21395700 0 67 chr16 21399600 21400200 0 115 chr16 21401400 21475200 0 115 chr16 21476400 21480900 0 115 chr16 21482700 21486900 0 115 chr16 21489000 21498900 0 115 chr16 21500700 21501300 0.0555 94 chr16 21732900 21733200 0.0122 75 chr16 21738300 21738600 0.2123 89 chr16 21739800 21748500 0 97 chr16 21749700 21755400 0 97 chr16 21756900 21757200 0.0298 62 chr16 21761100 21762600 0 75 chr16 21765600 21766500 0.0241 74 chr16 21768900 21769200 0.0157 75 chr16 21776700 21783300 0 95 chr16 21784500 21793200 0 93 chr16 21794400 21794700 0.095 68 chr16 21798000 21799500 0 70 chr16 21831600 21832800 0 84 chr16 21834600 21840300 0 122 chr16 21842100 21863400 0 122 chr16 21864600 21873300 0 122 chr16 21876900 21884700 0 97 chr16 21887100 21890700 0 83 chr16 21892200 21893400 0 76 chr16 21894900 21897000 0 92 chr16 21900300 21906900 0 92 chr16 21908100 21917400 0 92 chr16 21918600 21919200 0.0148 87 chr16 21920400 21931800 0 89 chr16 22433700 22434600 0 73 chr16 22437900 22462500 0 131 chr16 22464000 22468800 0 131 chr16 22470900 22537200 0 131 chr16 22538400 22539300 0 88 chr16 22555200 22559400 0 85 chr16 22560600 22563000 0 91 chr16 22564200 22567500 0 91 chr16 22570800 22571100 0.0133 87 chr16 22573200 22573500 0.0133 87 chr16 22577400 22578600 0 90 chr16 22584900 22586400 0.0111 91 chr16 22593000 22593300 0 87 chr16 22594500 22599000 0 87 chr16 22600500 22601400 0 89 chr16 22603200 22611000 0 89 chr16 22700100 22700400 0.055 38 chr16 23599800 23600100 0.112 73 chr16 25337400 25337700 0.1374 58 chr16 26811900 26812500 0.021 32 chr16 28334100 28334400 0.0656 59 chr16 28340400 28341600 0.0177 81 chr16 28343400 28347300 0 88 chr16 28348800 28349400 0 90 chr16 28350600 28359600 0 90 chr16 28360800 28361400 0 75 chr16 28362900 28367700 0 75 chr16 28370700 28372800 0 76 chr16 28374000 28374300 0 76 chr16 28375800 28376100 0 76 chr16 28378200 28391700 0 81 chr16 28393200 28402200 0 81 chr16 28403400 28410300 0 81 chr16 28411800 28413900 0 81 chr16 28415100 28416600 0.0068 77 chr16 28419600 28421700 0 87 chr16 28423200 28441200 0 87 chr16 28442400 28461000 0 103 chr16 28462500 28463100 0 110 chr16 28465200 28468200 0 110 chr16 28470900 28471800 0 110 chr16 28599000 28600800 0 71 chr16 28611900 28614000 0 85 chr16 28637100 28637400 0.1802 70 chr16 28643700 28661100 0 99 chr16 28662300 28665300 0 88 chr16 28667400 28672200 0 82 chr16 28673400 28691700 0 82 chr16 28692900 28699200 0 82 chr16 28701300 28722300 0 80 chr16 28723800 28729500 0 80 chr16 28730700 28737600 0 80 chr16 28739400 28740300 0.058 49 chr16 28741800 28743000 0 54 chr16 28744200 28745700 0 78 chr16 28747500 28752300 0 78 chr16 28753500 28758000 0 110 chr16 28759500 28793400 0 110 chr16 28794600 28802100 0 83 chr16 28804200 28809300 0 76 chr16 29040300 29044800 0 94 chr16 29046000 29048100 0 94 chr16 29050800 29054100 0 97 chr16 29057100 29058000 0.0636 106 chr16 29061900 29062800 0 102 chr16 29064000 29064300 0 102 chr16 29065500 29065800 0 102 chr16 29067900 29068800 0.0024 102 chr16 29070600 29070900 0.1187 60 chr16 29332800 29333100 0.0055 49 chr16 29361300 29364000 0 77 chr16 29365200 29365800 0.0379 62 chr16 29368200 29370000 0.0408 80 chr16 29371500 29374800 0 73 chr16 29378700 29382900 0.0005 87 chr16 29384400 29388900 0 101 chr16 29395200 29395500 0.0283 64 chr16 29397900 29398500 0.0916 86 chr16 29403900 29404200 0.1263 92 chr16 29430900 29435400 0 89 chr16 29437500 29457600 0 138 chr16 29459100 29544900 0 138 chr16 29547900 29549700 0 110 chr16 29551200 29552700 0.0267 65 chr16 29554500 29555100 0.0267 65 chr16 29559300 29559600 0.1066 60 chr16 29561400 29561700 0.171 50 chr16 29562900 29563500 0.0007 67 chr16 29565600 29568600 0 72 chr16 30188700 30244200 0 143 chr16 30245400 30276000 0 143 chr16 30277500 30280800 0 110 chr16 30285000 30290700 0 102 chr16 30291900 30292800 0 102 chr16 30294300 30295500 0 67 chr16 30298800 30299100 0.1584 46 chr16 30301200 30308100 0 65 chr16 31104000 31104600 0 109 chr16 31308900 31309500 0.0376 59 chr16 31340400 31341000 0.0006 49 chr16 31596000 31596600 0.013 65 chr16 31760100 31760400 0 59 chr16 31955700 31956000 0.1682 54 chr16 31964400 31964700 0.0202 41 chr16 31970700 31971000 0.1348 80 chr16 31972500 31973100 0 52 chr16 31989000 31989300 0.1739 66 chr16 32017800 32018400 0.0647 61 chr16 32024100 32024400 0.116 47 chr16 32028900 32036100 0 84 chr16 32037300 32044200 0 84 chr16 32046300 32046900 0.0014 63 chr16 32048100 32059800 0 104 chr16 32062500 32064900 0 83 chr16 32066700 32069100 0.0266 77 chr16 32070900 32071200 0.0238 72 chr16 32074800 32077500 0.0052 97 chr16 32078700 32079000 0.0052 97 chr16 32080200 32081100 0.0052 97 chr16 32084400 32084700 0.1264 152 chr16 32086500 32089500 0.014 245 chr16 32091000 32091300 0.014 245 chr16 32092500 32093100 0 179 chr16 32094600 32096100 0 179 chr16 32099400 32102700 0.0218 175 chr16 32104800 32106600 0.0918 122 chr16 32112000 32112300 0.1591 110 chr16 32132100 32134200 0.0016 87 chr16 32136000 32151600 0 97 chr16 32153700 32178000 0 98 chr16 32181600 32188800 0 84 chr16 32190900 32191200 0 86 chr16 32193000 32197800 0 86 chr16 32199000 32200800 0 86 chr16 32202000 32203500 0 86 chr16 32204700 32208900 0 78 chr16 32212500 32213100 0.0257 73 chr16 32214300 32215500 0 88 chr16 32216700 32223000 0 88 chr16 32224500 32234100 0 88 chr16 32235600 32254200 0 88 chr16 32255400 32256300 0 71 chr16 32257500 32261400 0 71 chr16 32265300 32265900 0 67 chr16 32267100 32269200 0 56 chr16 32270400 32282700 0 64 chr16 32288400 32290200 0 98 chr16 32291400 32381700 0 98 chr16 32395500 32396100 0 56 chr16 32398500 32398800 0.0467 37 chr16 32413800 32414100 0.1102 83 chr16 32424300 32424600 0.1355 48 chr16 32429400 32442600 0 87 chr16 32457000 32457300 0.0862 53 chr16 32465400 32467800 0 56 chr16 32473500 32473800 0.0233 46 chr16 32476800 32477100 0.0446 59 chr16 32479800 32480100 0.0023 136 chr16 32481900 32483700 0.0023 136 chr16 32488500 32489700 0 74 chr16 32502300 32503200 0 44 chr16 32506500 32506800 0.0022 40 chr16 32508900 32509200 0 43 chr16 32510400 32511300 0 43 chr16 32521800 32524500 0 44 chr16 32526600 32526900 0.0882 54 chr16 32528100 32542500 0 51 chr16 32545800 32546700 0.0135 53 chr16 32547900 32548800 0 44 chr16 32551500 32552100 0 40 chr16 32553300 32553900 0.0061 54 chr16 32555400 32565300 0 60 chr16 32568900 32569200 0.0011 57 chr16 32570700 32571000 0.0011 57 chr16 32574000 32575800 0 59 chr16 32580300 32580900 0 59 chr16 32582100 32582700 0.001 60 chr16 32583900 32585400 0 68 chr16 32588100 32599200 0 82 chr16 32602200 32604000 0 72 chr16 32608800 32609700 0 77 chr16 32611500 32612400 0 81 chr16 32613900 32614200 0.0109 76 chr16 32615700 32617200 0.0109 76 chr16 32619000 32619600 0.0233 67 chr16 32623200 32623800 0 68 chr16 32628300 32628600 0.157 66 chr16 32635800 32638800 0 69 chr16 32641200 32643000 0 70 chr16 32647200 32648400 0.0138 65 chr16 32651700 32654100 0 132 chr16 32655300 32688000 0 132 chr16 32689200 32798700 0 132 chr16 32800500 32805600 0 135 chr16 32808000 32809200 0.0068 70 chr16 32810400 32811300 0 140 chr16 32818200 32818500 0.0395 38 chr16 32820900 32821800 0 91 chr16 32823000 32824200 0 64 chr16 32829900 32830200 0.0432 64 chr16 32834400 32835900 0 146 chr16 32837100 32838900 0 146 chr16 32847000 32865900 0 97 chr16 32867400 32867700 0 88 chr16 32869500 32877000 0 88 chr16 32878800 32879100 0.0348 81 chr16 32881500 32884500 0 85 chr16 32886300 32887800 0 85 chr16 32921100 32921400 0.0811 48 chr16 32924400 32924700 0.0126 70 chr16 32926200 32928000 0 88 chr16 32929800 32930100 0.0961 65 chr16 32939700 32940300 0.0262 62 chr16 32951400 32958600 0 92 chr16 32960700 32963400 0 92 chr16 32964900 32986500 0 93 chr16 32987700 32988000 0 93 chr16 32991600 32992200 0.0999 93 chr16 32994300 32997300 0 72 chr16 32999400 33000000 0.0314 89 chr16 33003900 33004500 0.01 62 chr16 33005700 33008400 0.0035 96 chr16 33009900 33011400 0.0035 96 chr16 33013200 33014700 0.0035 96 chr16 33018000 33020100 0.0043 78 chr16 33022200 33024600 0.0026 90 chr16 33027600 33027900 0.1773 131 chr16 33030000 33032700 0.0104 166 chr16 33034200 33034500 0.0281 84 chr16 33035700 33036600 0 162 chr16 33038100 33039600 0 124 chr16 33042600 33042900 0.1447 136 chr16 33045600 33045900 0.0967 80 chr16 33048300 33048600 0.092 67 chr16 33049800 33050100 0.1276 100 chr16 33065700 33079500 0 128 chr16 33081300 33214500 0 129 chr16 33264600 33336000 0 240 chr16 33340200 33392400 0 83 chr16 33442500 33491400 0 70 chr16 33492600 33506400 0 86 chr16 33507900 33508200 0.0261 68 chr16 33510300 33512100 0.048 64 chr16 33513900 33514800 0.0735 53 chr16 33518700 33525600 0 87 chr16 33528000 33528300 0.019 51 chr16 33529500 33531300 0 86 chr16 33532500 33602700 0 86 chr16 33605700 33607200 0 75 chr16 33609000 33609300 0 75 chr16 33619800 33620100 0.0137 57 chr16 33645300 33645600 0.0102 41 chr16 33648900 33657900 0 54 chr16 33659400 33660000 0 52 chr16 33688200 33688500 0.1271 59 chr16 33690600 33692100 0.0383 57 chr16 33698700 33699000 0.0307 53 chr16 33705000 33705300 0.1372 44 chr16 33717900 33718200 0.2753 85 chr16 33727500 33730200 0.004 134 chr16 33735900 33736200 0.141 61 chr16 33740700 33741300 0.075 129 chr16 33758400 33759000 0 40 chr16 33762000 33762300 0.1801 34 chr16 33766500 33766800 0.076 20 chr16 33768000 33768300 0.1462 28 chr16 33778200 33797400 0 66 chr16 33798900 33801900 0 57 chr16 33803100 33821100 0 57 chr16 33826200 33826800 0.0012 40 chr16 33829200 33830400 0.019 47 chr16 33831900 33832500 0 111 chr16 33833700 33835200 0 111 chr16 33845400 33845700 0.1581 68 chr16 33848100 33848400 0.2668 51 chr16 33856800 33857400 0.0029 63 chr16 33866700 33883200 0 85 chr16 33884700 33889200 0 85 chr16 33890400 33894000 0 85 chr16 33895200 33903600 0 81 chr16 33907200 33907500 0.0507 33 chr16 33909000 33909300 0.1278 52 chr16 33921000 33921300 0.1406 70 chr16 33924000 33924600 0.0152 63 chr16 33925800 33927600 0 90 chr16 33929100 33930600 0.0391 71 chr16 33935400 33935700 0.1171 48 chr16 33939300 33940500 0.0007 55 chr16 33942000 33942900 0.0843 70 chr16 33944100 33945300 0.0046 52 chr16 33947400 33947700 0.0167 66 chr16 33950700 33951000 0.0985 62 chr16 33952800 33958500 0 111 chr16 33961800 33962400 0.0393 54 chr16 33965700 33966300 0 53 chr16 33967500 33969300 0 64 chr16 33971400 33972000 0 86 chr16 33974100 33980700 0 86 chr16 33982500 33982800 0 86 chr16 33984300 33984900 0.0193 100 chr16 33987900 33991500 0.0039 82 chr16 33996300 34000200 0 97 chr16 34001700 34008600 0 97 chr16 34009800 34013100 0 97 chr16 34063800 34064400 0.1839 2127 chr16 34065900 34068000 0.0047 1141 chr16 34072800 34073700 0.0061 873 chr16 34085100 34086300 0.2121 3841 chr16 34096200 34098300 0.1597 2317 chr16 34186200 34189200 0 63 chr16 34267800 34268100 0.1283 28 chr16 34273800 34274400 0 44 chr16 34275900 34276200 0.0129 37 chr16 34278900 34279200 0 80 chr16 34280700 34281600 0 80 chr16 34283700 34284600 0 80 chr16 34286100 34289400 0 116 chr16 34339500 34494300 0 400 chr16 34495500 34506600 0 400 chr16 34507800 34517100 0 400 chr16 34518600 34520700 0 28 chr16 34574700 34575900 0.0918 597 chr16 34589400 34590600 0.0383 6369 chr16 34745100 34745700 0 48 chr16 34831500 34831800 0.0074 24 chr16 34834200 34836000 0 36 chr16 34838700 34839900 0 37 chr16 34842300 34842600 0.0539 27 chr16 34844700 34847100 0 52 chr16 34848900 34850700 0 31 chr16 34851900 34852800 0 29 chr16 34854600 34856100 0 48 chr16 34859100 34859700 0.0023 52 chr16 34860900 34862400 0.0023 52 chr16 34864200 34896600 0 389 chr16 34902300 34902600 0.1957 1295 chr16 34911300 34913100 0 53 chr16 34960200 35072400 0 55 chr16 35609400 35613000 0 71 chr16 35804100 35804400 0.0053 64 chr16 35806800 35807100 0.1439 54 chr16 35945400 35946000 0.0206 56 chr16 35957100 35957700 0.006 61 chr16 36009600 36009900 0 72 chr16 36011700 36012600 0 124 chr16 36016500 36017700 0 108 chr16 36019200 36019800 0 59 chr16 36246600 36249000 0 50 chr16 36260700 36261000 0 33 chr16 36315000 36315300 0.089 37 chr16 36317700 36321300 0 122 chr16 36323700 36324900 0 40 chr16 36327600 36328800 0 146 chr16 36330000 36330300 0 146 chr16 36333600 36333900 0 32 chr16 36337800 36338100 0 51 chr16 36339900 36340800 0 51 chr16 36343800 36347400 0 79 chr16 36348600 36714300 0 314 chr16 36716400 36747600 0 115 chr16 36749400 36907200 0 199 chr16 36909600 36975000 0 199 chr16 36977700 36993900 0 129 chr16 36995400 37725300 0 346 chr16 37727100 37782000 0 182 chr16 37783200 37922100 0 475 chr16 37923300 37945200 0 475 chr16 37946400 38048100 0 194 chr16 38049300 38109900 0 115 chr16 38111100 38253900 0 195 chr16 38255100 38267100 0 154 chr16 38275800 38276400 0 51 chr16 46382700 46383000 0.0077 8715 chr16 46385100 46385700 0.0077 8715 chr16 46397100 46398300 0.0285 5604 chr16 46624200 46624800 0.0124 67 chr16 46694100 46694400 0.0533 61 chr16 47646000 47646300 0.0435 54 chr16 47864700 47865000 0.1111 79 chr16 48017100 48018900 0.0438 90 chr16 48769800 48770100 0.1145 76 chr16 48772200 48772500 0.0103 110 chr16 48773700 48774000 0.0103 110 chr16 48917400 48918000 0.059 31 chr16 49135800 49136100 0.1108 80 chr16 49945500 49945800 0.0069 29 chr16 51014400 51014700 0.2881 69 chr16 52175100 52175400 0.0968 92 chr16 54042300 54048000 0 81 chr16 55170600 55170900 0.018 212 chr16 55761900 55762200 0.0262 25 chr16 55788600 55808100 0 79 chr16 56739000 56739600 0.1617 76 chr16 59559900 59560500 0.2137 51 chr16 59562300 59564100 0.0027 103 chr16 59980500 59980800 0.0476 63 chr16 59982000 59982300 0.0664 61 chr16 59998200 59998500 0.021 24 chr16 60196500 60197400 0.0701 74 chr16 60527700 60528000 0.0116 69 chr16 60876300 60879600 0 79 chr16 61785300 61787100 0 69 chr16 61802100 61803000 0.0651 79 chr16 61804800 61806900 0 79 chr16 61920000 61920900 0.149 76 chr16 63390300 63390600 0.0196 79 chr16 65361900 65362200 0.1462 77 chr16 65692200 65695800 0 67 chr16 67712400 67712700 0.0656 87 chr16 68583600 68586000 0 76 chr16 68587200 68589000 0 110 chr16 69665700 69666300 0.1256 74 chr16 69948000 69949500 0.0238 87 chr16 69950700 69952200 0.0238 87 chr16 69957900 69962700 0 91 chr16 69967800 69969300 0 73 chr16 69973500 69974700 0.0269 79 chr16 70052400 70052700 0.1102 93 chr16 70146900 70147200 0.1116 61 chr16 70172400 70172700 0.133 96 chr16 70175100 70179000 0 107 chr16 70180200 70185600 0 107 chr16 70190100 70191900 0 83 chr16 70200900 70201200 0.0037 46 chr16 70812000 70812300 0.0825 49 chr16 70814400 70815300 0.0186 63 chr16 70816500 70816800 0.0186 63 chr16 70823100 70823400 0.0033 61 chr16 70825800 70827300 0.0016 73 chr16 70839000 70839300 0.1608 41 chr16 70845000 70846800 0.0338 78 chr16 70848600 70848900 0.0635 59 chr16 70852200 70852500 0.0943 52 chr16 70856100 70857300 0.0376 46 chr16 70860600 70860900 0.0457 62 chr16 70862400 70862700 0.0457 62 chr16 70869000 70869300 0.0859 51 chr16 70872900 70873500 0.0006 63 chr16 70879800 70880100 0.0233 68 chr16 70889100 70889700 0.0154 52 chr16 70903500 70903800 0 74 chr16 70910700 70912500 0.0068 64 chr16 70913700 70915800 0.0068 64 chr16 70918800 70920300 0.0113 62 chr16 70924200 70924800 0.0026 53 chr16 70927200 70927500 0.0938 61 chr16 70928700 70929000 0.1164 54 chr16 70935600 70935900 0.0007 76 chr16 70951800 70952400 0.0064 64 chr16 70953900 70954200 0.0037 70 chr16 70963500 70963800 0.0461 68 chr16 70968000 70968300 0.0524 51 chr16 70969800 70970400 0.0649 53 chr16 70972200 70973700 0.0648 64 chr16 70983000 70983300 0.0851 50 chr16 70986000 70988400 0 78 chr16 71001000 71001300 0.1278 52 chr16 71008800 71009100 0.0678 90 chr16 71013600 71013900 0.1351 62 chr16 71018100 71018400 0.0786 51 chr16 71023500 71023800 0.0075 76 chr16 71025300 71025600 0.0075 76 chr16 71032800 71033100 0.1181 73 chr16 71034900 71035500 0.0631 69 chr16 71045700 71046300 0.0059 59 chr16 71058000 71058300 0.0426 76 chr16 71076600 71076900 0.0403 45 chr16 71085000 71085300 0.0776 66 chr16 71088000 71088300 0 76 chr16 71091000 71091900 0 76 chr16 71095800 71096100 0.1614 73 chr16 71099400 71099700 0.0056 52 chr16 71100900 71101500 0.014 74 chr16 71103300 71106000 0.0079 69 chr16 71110800 71111100 0.0408 69 chr16 71119200 71119500 0.0763 76 chr16 71121000 71121300 0.1309 65 chr16 71130900 71132700 0.0188 73 chr16 71140200 71140500 0.0006 63 chr16 71146500 71148000 0 57 chr16 71155500 71156100 0.0723 63 chr16 71159100 71161200 0 65 chr16 71164200 71164800 0.0316 62 chr16 71603100 71604000 0 75 chr16 72056700 72057000 0.0061 63 chr16 72058500 72058800 0.1223 72 chr16 72077100 72077400 0.1899 42 chr16 72342900 72343200 0.1431 73 chr16 72584100 72585600 0.015 64 chr16 72629700 72633000 0.028 79 chr16 73824600 73830300 0 80 chr16 74334300 74334600 0.0882 67 chr16 74382000 74382300 0.0194 116 chr16 74384100 74384400 0.0503 89 chr16 74385600 74385900 0.0503 89 chr16 74405100 74406600 0 83 chr16 74415000 74415300 0.1726 107 chr16 74417400 74418600 0.0416 107 chr16 74420400 74420700 0.12 120 chr16 74428500 74428800 0.196 73 chr16 74799600 74800200 0.0101 91 chr16 75204900 75206100 0.0006 71 chr16 75222900 75224100 0.0292 67 chr16 75504900 75505200 0.0606 81 chr16 75545400 75545700 0.1318 64 chr16 75824400 75824700 0.0041 73 chr16 76610700 76611000 0.051 77 chr16 76757700 76758000 0.0543 89 chr16 78651900 78652500 0.059 903 chr16 79696200 79696500 0.0539 61 chr16 80089500 80089800 0.0509 56 chr16 81082500 81082800 0.0282 73 chr16 81086100 81086400 0.1958 174 chr16 82139700 82141800 0.0116 102 chr16 82275600 82276200 0.1766 97 chr16 83637600 83643000 0 75 chr16 84456000 84458100 0 66 chr16 85405500 85406700 0.0517 20 chr16 85412100 85412400 0.0371 72 chr16 85972500 85974000 0 220 chr16 87162900 87163200 0.2199 44 chr16 87726300 87726600 0.0758 17 chr16 88000500 88001100 0.0985 28 chr16 88217700 88218000 0.1439 45 chr16 88547100 88547400 0.1313 12 chr16 88728600 88728900 0.1513 36 chr16 88831500 88831800 0.2077 22 chr16 88894200 88894500 0.1518 97 chr16 88950600 88950900 0.2773 52 chr16 89083800 89084100 0.1601 19 chr16 89400000 89400600 0.0438 44 chr16 89598600 89598900 0.198 36 chr16 89647800 89648400 0.0279 42 chr16 89901600 89902500 0.0381 44 chr16 90003600 90004200 0.0977 27 chr16 90100800 90101400 0.0448 89 chr16 90107400 90121200 0 242 chr16 90122700 90150900 0 107 chr16 90152100 90161700 0 107 chr16 90164100 90166200 0.0138 72 chr16 90170400 90172500 0.0117 63 chr16 90174600 90174900 0.0055 70 chr16 90176100 90177000 0.0055 70 chr16 90178200 90180900 0.0445 87 chr16 90183300 90185400 0.0019 89 chr16 90186900 90187800 0 93 chr16 90189000 90189300 0 93 chr16 90191100 90193800 0 93 chr16 90195000 90197100 0 93 chr16 90198900 90200100 0.0149 97 chr16 90202200 90202500 0.0527 101 chr16 90204600 90206700 0.0012 83 chr16 90208500 90211800 0.0011 126 chr16 90214500 90214800 0.0011 126 chr16 90216300 90225300 0 78 chr16 90226500 90228000 0.0054 112 chr17 60000 63300 0 34 chr17 66900 89700 0 93 chr17 90900 114000 0 93 chr17 115800 129000 0 1057 chr17 132600 133800 0 67 chr17 135600 136500 0 84 chr17 140400 141000 0.0151 57 chr17 166800 168600 0 28 chr17 192000 192300 0.1814 12 chr17 201600 201900 0.1127 270 chr17 220800 221100 0.1 23 chr17 254700 257100 0.0473 165 chr17 303600 304200 0.0886 84 chr17 356100 356400 0.2301 79 chr17 402900 404400 0 86 chr17 510000 510300 0.2472 44 chr17 618000 618300 0.1027 30 chr17 649200 649500 0.26 123 chr17 727500 727800 0.2188 75 chr17 894300 894600 0.2535 31 chr17 952200 952800 0.1667 81 chr17 1006800 1007100 0.1411 21 chr17 1117200 1117500 0.2792 77 chr17 1118700 1119300 0.087 46 chr17 1308300 1311600 0 137 chr17 2052600 2052900 0.0024 29 chr17 2355000 2356500 0.225 110 chr17 2448300 2448600 0.0066 62 chr17 3052800 3053100 0.1206 83 chr17 3054300 3056400 0 61 chr17 3059700 3060300 0.0029 45 chr17 3062100 3062400 0.1005 71 chr17 3064800 3065100 0.0055 49 chr17 3067200 3068700 0 72 chr17 3072900 3073500 0.003 66 chr17 3150300 3150600 0.0706 68 chr17 3179400 3179700 0.0593 70 chr17 3181500 3181800 0.1083 74 chr17 3230700 3231300 0.0241 64 chr17 3235500 3237600 0 64 chr17 3241800 3242100 0 61 chr17 3243900 3244500 0 48 chr17 3248100 3248700 0 61 chr17 3252300 3252900 0.0076 63 chr17 3274500 3275100 0.2808 46 chr17 3328200 3328500 0.1286 52 chr17 3329700 3330000 0.1003 98 chr17 3351300 3351600 0.0243 45 chr17 3687000 3687900 0.0149 18 chr17 4089900 4090200 0.0791 41 chr17 4462200 4462500 0.1108 17 chr17 9616200 9621900 0 89 chr17 11478000 11478900 0.1305 88 chr17 12443100 12443400 0.1107 18 chr17 12450300 12453600 0.0097 115 chr17 12651900 12652200 0.0466 21 chr17 13782600 13782900 0.1405 17 chr17 14022300 14023800 0 69 chr17 14177400 14177700 0.0564 60 chr17 14234400 14234700 0.1659 78 chr17 14237700 14238900 0.0018 61 chr17 15792600 15792900 0.1253 65 chr17 15960300 15960600 0.1668 24 chr17 16726800 16727100 0.1659 85 chr17 16730100 16730400 0.0928 58 chr17 16731600 16732200 0.0253 65 chr17 16752600 16752900 0.0771 70 chr17 16764900 16765200 0.0449 63 chr17 16779000 16779300 0.0851 71 chr17 16800600 16800900 0.0492 60 chr17 16828800 16829400 0.0014 59 chr17 16845600 16846200 0 47 chr17 16848300 16848900 0.0217 73 chr17 16864500 16866000 0.0524 73 chr17 18393000 18393600 0 69 chr17 18394800 18397500 0 69 chr17 18399900 18400200 0.0617 69 chr17 18401400 18401700 0 30 chr17 18402900 18404400 0 43 chr17 18406500 18407400 0 57 chr17 18412200 18412800 0 61 chr17 18417900 18418200 0 28 chr17 18420600 18420900 0.1002 43 chr17 18426000 18429000 0 91 chr17 18430200 18446100 0 91 chr17 18447600 18447900 0.1186 29 chr17 18452700 18453600 0 45 chr17 18456600 18458100 0 28 chr17 18460200 18461400 0 35 chr17 18471000 18471900 0 28 chr17 18474000 18474300 0 25 chr17 18477600 18479100 0 29 chr17 18480300 18481800 0 29 chr17 18483600 18483900 0 29 chr17 18485400 18489900 0 31 chr17 18491700 18493200 0 31 chr17 18498000 18504600 0 37 chr17 18505800 18506700 0 63 chr17 18513600 18516300 0 32 chr17 18517500 18517800 0 32 chr17 18520500 18521100 0 44 chr17 18522300 18522900 0 44 chr17 18526200 18527100 0 54 chr17 18528300 18528600 0 54 chr17 18533400 18534300 0 47 chr17 18536100 18536700 0 47 chr17 18538200 18538800 0 38 chr17 18540900 18541800 0 43 chr17 18544500 18545100 0.0475 28 chr17 18550200 18550800 0 66 chr17 18552600 18552900 0 66 chr17 18554100 18555300 0 43 chr17 18562800 18563100 0.0031 84 chr17 18584700 18585300 0.0455 78 chr17 18603600 18603900 0.0801 44 chr17 18605700 18606600 0 59 chr17 18619500 18619800 0.0758 59 chr17 18623100 18623400 0.1554 55 chr17 18826200 18826800 0.007 49 chr17 18839400 18840300 0 72 chr17 18842100 18842400 0.0523 58 chr17 18888000 18888600 0.0037 64 chr17 19026000 19081800 0 110 chr17 19083000 19092900 0 110 chr17 19094100 19110900 0 94 chr17 19112700 19142100 0 96 chr17 19143300 19148700 0 115 chr17 19149900 19237200 0 115 chr17 19627200 19628700 0.0305 67 chr17 20323200 20323500 0.0892 49 chr17 20332500 20332800 0.0882 57 chr17 20356200 20356500 0.0365 54 chr17 20361900 20362500 0.0909 65 chr17 20391000 20391300 0.0911 44 chr17 20406000 20406300 0.1207 71 chr17 20414400 20415900 0.1379 69 chr17 20429100 20429400 0.0529 62 chr17 20437800 20438100 0.0503 68 chr17 20442300 20442900 0.0024 38 chr17 20445000 20446500 0 42 chr17 20452200 20453700 0.0132 31 chr17 20456400 20457300 0 29 chr17 20459700 20460000 0 21 chr17 20462100 20463900 0.0427 43 chr17 20465400 20465700 0.1435 24 chr17 20472600 20472900 0.2213 28 chr17 20483100 20483400 0.1466 40 chr17 20500800 20501400 0.0351 58 chr17 20505000 20513400 0 69 chr17 20516400 20516700 0.02 37 chr17 20517900 20518500 0.0023 81 chr17 20531700 20532600 0.1001 57 chr17 20537100 20538600 0 60 chr17 20544300 20544600 0.0072 64 chr17 20546100 20546400 0.0388 61 chr17 20548800 20549100 0 85 chr17 20551200 20551800 0 85 chr17 20984100 20986200 0.0122 55 chr17 21342600 21342900 0.061 81 chr17 21345900 21346500 0.0109 111 chr17 21348000 21348300 0.0969 105 chr17 21413100 21413400 0.0025 90 chr17 21438600 21438900 0.0282 60 chr17 21700200 21701100 0.0117 82 chr17 21738600 21738900 0.0373 82 chr17 21741300 21741900 0.0042 107 chr17 21882000 21882300 0.2719 436 chr17 21884700 21909300 0 257 chr17 21910500 21992100 0 9754 chr17 22044000 22044300 0.1515 202 chr17 22047000 22047300 0.127 173 chr17 22080000 22080300 0.0679 50 chr17 22375800 22407600 0 350 chr17 22746300 22746900 0.0039 168 chr17 22748400 22748700 0.0005 61 chr17 22749900 22750200 0.0005 61 chr17 22753500 22754100 0 205 chr17 22755300 22755900 0 205 chr17 22757100 22761600 0 205 chr17 22814100 22817100 0 158 chr17 22818600 22821600 0 78 chr17 22823400 22868100 0 228 chr17 22869300 22912200 0 228 chr17 22913400 22949100 0 240 chr17 22950300 22990200 0 2064 chr17 22991400 23016000 0 2064 chr17 23017200 23027700 0 334 chr17 23028900 23031000 0 81 chr17 23032200 23047200 0 223 chr17 23048400 23067300 0 148 chr17 23069400 23081400 0 158 chr17 23082600 23093700 0 177 chr17 23094900 23099700 0 177 chr17 23101200 23108700 0 177 chr17 23109900 23157900 0 205 chr17 23159100 23161200 0 67 chr17 23162700 23169300 0 113 chr17 23170500 23175600 0 101 chr17 23177100 23178600 0 152 chr17 23179800 23192100 0 152 chr17 23194200 23213400 0 606 chr17 23214900 23219700 0 59 chr17 23221200 23221800 0.0017 766 chr17 23223900 23226000 0 29 chr17 23227500 23227800 0 35 chr17 23229000 23231100 0 35 chr17 23235300 23235600 0 10 chr17 23238900 23242500 0 121 chr17 23243700 23247900 0 70 chr17 23249700 23251500 0 19 chr17 23255700 23258100 0 2583 chr17 23260200 23263800 0 77 chr17 23267100 23268600 0 152 chr17 23271000 23271600 0 33 chr17 23273400 23277600 0 84 chr17 23281200 23286600 0 116 chr17 23289000 23298000 0 1530 chr17 23300100 23300400 0 14 chr17 23304900 23306700 0 20 chr17 23309400 23310000 0 34 chr17 23315100 23322300 0 67 chr17 23323800 23325000 0 11 chr17 23328900 23329200 0 10 chr17 23332500 23335500 0 45 chr17 23339400 23341500 0 28 chr17 23346900 23347200 0.1001 31 chr17 23349600 23349900 0 26 chr17 23352000 23352300 0 11 chr17 23353500 23365800 0 173 chr17 23369700 23370000 0 14 chr17 23371800 23372700 0 44 chr17 23376900 23377200 0 12 chr17 23379000 23380800 0.0103 55 chr17 23383500 23383800 0.1492 15 chr17 23385600 23388600 0 64 chr17 23389800 23391300 0 70 chr17 23394000 23398200 0 42 chr17 23399400 23400300 0 69 chr17 23403900 23405700 0 17 chr17 23407500 23419200 0 68 chr17 23421600 23424000 0 43 chr17 23428800 23429400 0 38 chr17 23430900 23433300 0 161 chr17 23436300 23443200 0 225 chr17 23445900 23447100 0 57 chr17 23448900 23449800 0 54 chr17 23452800 23455800 0 15 chr17 23457600 23458500 0 17 chr17 23460600 23461500 0 92 chr17 23462700 23468400 0 248 chr17 23470200 23473800 0 63 chr17 23475600 23476200 0 18 chr17 23477400 23477700 0 18 chr17 23479500 23483700 0 68 chr17 23485800 23487900 0 69 chr17 23489400 23490000 0 14 chr17 23492100 23496300 0 150 chr17 23497500 23497800 0 11 chr17 23500200 23502900 0 79 chr17 23506200 23506500 0 11 chr17 23508900 23509500 0 13 chr17 23511000 23511300 0 13 chr17 23513700 23514000 0 12 chr17 23515500 23515800 0 15 chr17 23520000 23520900 0 15 chr17 23523300 23525700 0 48 chr17 23526900 23527200 0 30 chr17 23529900 23530200 0.223 25 chr17 23531400 23532600 0 19 chr17 23534400 23537400 0 30 chr17 23538600 23538900 0 10 chr17 23540100 23545200 0 1314 chr17 23546700 23548800 0 23 chr17 23554200 23555100 0 32 chr17 23559000 23561400 0 44 chr17 23563800 23565300 0 45 chr17 23566500 23567700 0 45 chr17 23569800 23570700 0 166 chr17 23572200 23577000 0 62 chr17 23579700 23581200 0 18 chr17 23583000 23583900 0 452 chr17 23586000 23586900 0 15 chr17 23590200 23593200 0 48 chr17 23594400 23598600 0 76 chr17 23600700 23601000 0.1131 17 chr17 23603700 23605500 0 69 chr17 23606700 23612400 0 69 chr17 23613600 23615700 0 94 chr17 23617200 23617500 0 12 chr17 23620800 23626800 0 170 chr17 23628900 23630700 0 12 chr17 23632200 23638800 0 214 chr17 23640300 23641800 0 56 chr17 23644200 23644800 0 34 chr17 23646900 23650800 0 78 chr17 23656500 23657100 0 37 chr17 23663100 23664000 0 12 chr17 23666100 23667300 0 17 chr17 23668800 23671500 0 80 chr17 23672700 23673000 0 13 chr17 23676300 23677800 0 48 chr17 23680500 23680800 0 15 chr17 23682600 23682900 0 11 chr17 23686800 23688000 0 74 chr17 23691300 23694000 0 17 chr17 23698800 23700000 0 12 chr17 23701200 23701800 0 12 chr17 23703300 23703600 0 12 chr17 23708100 23708400 0 11 chr17 23711400 23711700 0 13 chr17 23714700 23715000 0 13 chr17 23716800 23717100 0 11 chr17 23719800 23722200 0 58 chr17 23727600 23728800 0 26 chr17 23731200 23734500 0 93 chr17 23736000 23736300 0 30 chr17 23740200 23751300 0 69 chr17 23752500 23753100 0 69 chr17 23755800 23759100 0 53 chr17 23760900 23761200 0 13 chr17 23762700 23770500 0 55 chr17 23773800 23778000 0 37 chr17 23779500 23781000 0 37 chr17 23783400 23784900 0 12 chr17 23786400 23786700 0 10 chr17 23791800 23793600 0 38 chr17 23795100 23796600 0 39 chr17 23800500 23801700 0 30 chr17 23803800 23805300 0 713 chr17 23810400 23811600 0 18 chr17 23817900 23824800 0 60 chr17 23826300 23831700 0 52 chr17 23832900 23833200 0 12 chr17 23842200 23842500 0 13 chr17 23844000 23845500 0 30 chr17 23849700 23853600 0 68 chr17 23857200 23861100 0 305 chr17 23863500 23873700 0 93 chr17 23875200 23881800 0 149 chr17 23884800 23886600 0 39 chr17 23887800 23888700 0 39 chr17 23892900 23894100 0 46 chr17 23896800 23900100 0 72 chr17 23901600 23903100 0 81 chr17 23904900 23910900 0 49 chr17 23912100 23916600 0 82 chr17 23917800 23918100 0 12 chr17 23919900 23921400 0 60 chr17 23922600 23922900 0.07 23 chr17 23925000 23925300 0 10 chr17 23928900 23931600 0 62 chr17 23933700 23936700 0 31 chr17 23941200 23943300 0 40 chr17 23944500 23946600 0 34 chr17 23949900 23954700 0 71 chr17 23956200 23964600 0 89 chr17 23969100 23969700 0 49 chr17 23970900 23977200 0 70 chr17 23979000 23980800 0 192 chr17 23982000 23983200 0 192 chr17 23984700 23988300 0 192 chr17 23993700 23996100 0 106 chr17 23997300 23997600 0 14 chr17 23999100 24004200 0 80 chr17 24007200 24007500 0 13 chr17 24009300 24009600 0 14 chr17 24011100 24013500 0 66 chr17 24016200 24019500 0 75 chr17 24021300 24021600 0.2557 64 chr17 24024000 24025800 0 54 chr17 24027300 24027600 0 11 chr17 24029100 24033300 0 30 chr17 24034800 24036900 0 34 chr17 24038700 24043500 0 107 chr17 24044700 24046800 0 23 chr17 24048000 24048900 0 53 chr17 24050100 24051300 0 50 chr17 24057300 24057900 0 13 chr17 24061800 24062700 0 203 chr17 24064200 24066000 0 42 chr17 24067200 24069900 0 81 chr17 24071700 24073500 0 68 chr17 24076800 24081600 0 88 chr17 24082800 24083400 0 130 chr17 24084900 24094500 0 59 chr17 24096900 24098700 0 43 chr17 24101400 24102000 0 16 chr17 24106500 24107100 0 45 chr17 24108900 24111000 0 85 chr17 24112500 24117900 0 50 chr17 24119400 24120300 0.056 42 chr17 24122100 24123900 0 35 chr17 24125700 24127800 0 56 chr17 24132300 24133200 0 46 chr17 24135000 24137400 0 29 chr17 24139200 24141600 0 130 chr17 24144300 24147300 0 60 chr17 24150600 24153900 0 573 chr17 24158100 24158400 0.0558 12 chr17 24163800 24166500 0 40 chr17 24168300 24170700 0 79 chr17 24175200 24176400 0 49 chr17 24180000 24188400 0 1036 chr17 24191400 24199200 0 52 chr17 24200400 24205500 0 66 chr17 24206700 24219900 0 81 chr17 24223500 24230400 0 154 chr17 24232500 24232800 0 11 chr17 24235200 24235500 0 20 chr17 24238800 24243600 0 69 chr17 24245400 24246300 0 35 chr17 24248100 24248400 0.0009 11 chr17 24250500 24258900 0 116 chr17 24261300 24262500 0 35 chr17 24263700 24264000 0.0396 20 chr17 24265800 24268800 0 35 chr17 24270600 24270900 0 11 chr17 24275700 24277200 0 67 chr17 24278700 24285000 0 67 chr17 24286200 24286500 0 24 chr17 24288600 24288900 0 12 chr17 24291300 24293100 0 41 chr17 24296100 24297000 0 42 chr17 24298200 24298500 0 12 chr17 24299700 24303000 0 68 chr17 24304500 24305400 0 41 chr17 24306900 24311100 0 41 chr17 24312900 24313200 0 27 chr17 24316200 24318000 0 65 chr17 24319200 24319500 0 12 chr17 24324300 24324600 0 11 chr17 24327600 24328500 0 50 chr17 24330600 24332100 0 39 chr17 24333600 24333900 0 10 chr17 24335100 24340200 0 27 chr17 24344700 24351300 0 59 chr17 24354000 24355200 0 569 chr17 24359100 24359700 0 26 chr17 24363000 24363900 0 27 chr17 24366900 24367500 0 41 chr17 24371400 24375300 0 66 chr17 24380100 24382500 0 44 chr17 24384900 24386700 0 54 chr17 24388800 24390300 0 41 chr17 24391500 24391800 0 12 chr17 24395400 24395700 0 12 chr17 24397500 24399900 0 1126 chr17 24402600 24403200 0 13 chr17 24408300 24410700 0 22 chr17 24415500 24421200 0 259 chr17 24423300 24424500 0 86 chr17 24427200 24427500 0 12 chr17 24429300 24429600 0 10 chr17 24437700 24439800 0 36 chr17 24441000 24442500 0 30 chr17 24445200 24445800 0.0936 37 chr17 24447300 24449700 0 16 chr17 24453000 24455700 0 82 chr17 24456900 24457200 0 19 chr17 24459300 24464100 0 67 chr17 24467100 24467700 0 28 chr17 24469200 24469500 0 11 chr17 24471300 24478200 0 68 chr17 24481500 24486000 0 32 chr17 24487200 24489300 0 55 chr17 24492000 24493500 0 142 chr17 24495600 24501600 0 42 chr17 24504300 24505800 0 18 chr17 24507300 24511200 0 71 chr17 24514200 24518400 0 204 chr17 24520200 24520500 0 14 chr17 24525600 24527100 0 27 chr17 24528300 24528900 0 35 chr17 24531300 24539700 0 876 chr17 24541500 24542100 0 11 chr17 24543900 24552000 0 66 chr17 24553200 24558300 0 48 chr17 24559500 24560100 0 11 chr17 24564900 24566400 0 73 chr17 24569700 24570600 0 28 chr17 24571800 24574500 0 127 chr17 24576600 24577500 0 55 chr17 24581400 24582300 0 57 chr17 24584100 24586200 0 39 chr17 24588000 24591900 0 74 chr17 24594600 24599100 0 145 chr17 24600900 24601200 0 10 chr17 24606300 24608100 0 26 chr17 24612900 24614700 0 44 chr17 24615900 24617700 0 76 chr17 24623400 24624900 0 1118 chr17 24627900 24628200 0 11 chr17 24630000 24636300 0 75 chr17 24638100 24642300 0 53 chr17 24643500 24645300 0 50 chr17 24648000 24648300 0 11 chr17 24649800 24650100 0 10 chr17 24651300 24652200 0 34 chr17 24654300 24656700 0 20 chr17 24660600 24662100 0 24 chr17 24663600 24665100 0 38 chr17 24668400 24670200 0 53 chr17 24672300 24676200 0 159 chr17 24677700 24678000 0 14 chr17 24681000 24683400 0 54 chr17 24685500 24685800 0 12 chr17 24688500 24697800 0 67 chr17 24699600 24700200 0 13 chr17 24702300 24703500 0 156 chr17 24707700 24714600 0 66 chr17 24716100 24716700 0 13 chr17 24718200 24719100 0 567 chr17 24722400 24723900 0 18 chr17 24729300 24729600 0 12 chr17 24734400 24736800 0 149 chr17 24740100 24742500 0 1219 chr17 24744300 24744600 0 11 chr17 24745800 24748800 0 1244 chr17 24750600 24754200 0 334 chr17 24758400 24759300 0 30 chr17 24760500 24762600 0 12 chr17 24765300 24766500 0 39 chr17 24770100 24777600 0 2349 chr17 24778800 24780000 0 27 chr17 24781500 24784200 0 74 chr17 24786000 24786300 0 10 chr17 24790500 24790800 0.2394 24 chr17 24792900 24793200 0 11 chr17 24795300 24797400 0 38 chr17 24800100 24802200 0 39 chr17 24809700 24810300 0 16 chr17 24812100 24816900 0 71 chr17 24820800 24824700 0 88 chr17 24828300 24828600 0 10 chr17 24830700 24831000 0 14 chr17 24833100 24837300 0 34 chr17 24839100 24839400 0 12 chr17 24841500 24843300 0 44 chr17 24845700 24846000 0 20 chr17 24847200 24851400 0 67 chr17 24852900 24853500 0 14 chr17 24855900 24856500 0.0019 21 chr17 24857700 24858000 0.0703 12 chr17 24859500 24861300 0 80 chr17 24863400 24865500 0 14 chr17 24866700 24869700 0 151 chr17 24872400 24872700 0 11 chr17 24873900 24879600 0 63 chr17 24882000 24883500 0 22 chr17 24885300 24885600 0 11 chr17 24888000 24893700 0 2416 chr17 24895800 24896100 0 12 chr17 24902100 24903300 0 14 chr17 24908100 24908700 0 34 chr17 24910500 24910800 0 12 chr17 24913500 24913800 0 36 chr17 24916200 24918000 0 44 chr17 24921300 24924000 0 32 chr17 24928200 24929700 0 22 chr17 24931200 24931500 0 13 chr17 24933000 24936600 0 61 chr17 24940500 24941100 0 93 chr17 24942600 24945000 0 69 chr17 24954900 24956100 0 37 chr17 24958200 24961200 0 47 chr17 24963900 24967800 0 63 chr17 24969000 24969900 0 13 chr17 24975000 24976200 0 20 chr17 24979500 24979800 0 12 chr17 24981000 24988200 0 974 chr17 24990900 24991200 0 12 chr17 24992700 24993600 0.0528 44 chr17 24994800 24997200 0 62 chr17 24999000 24999900 0 30 chr17 25001100 25007100 0 323 chr17 25008600 25010100 0 76 chr17 25011900 25012200 0 21 chr17 25015800 25016400 0 13 chr17 25020000 25021800 0 70 chr17 25023000 25025100 0 28 chr17 25028400 25028700 0 13 chr17 25031700 25040700 0 710 chr17 25043700 25045200 0 52 chr17 25047600 25050300 0 93 chr17 25053000 25056900 0 138 chr17 25059300 25064400 0 337 chr17 25068600 25069200 0 13 chr17 25071000 25077600 0 493 chr17 25078800 25087800 0 199 chr17 25091400 25093200 0 58 chr17 25094400 25094700 0 11 chr17 25096200 25098900 0 16 chr17 25101000 25107600 0 1253 chr17 25111500 25112700 0.0546 40 chr17 25115100 25118400 0 185 chr17 25120200 25120800 0 75 chr17 25122900 25123200 0 11 chr17 25124700 25128000 0 50 chr17 25130100 25131000 0 43 chr17 25132200 25135800 0 68 chr17 25139100 25140900 0 2390 chr17 25143300 25143900 0.001 63 chr17 25149900 25152000 0 43 chr17 25154100 25158300 0 57 chr17 25165500 25165800 0 16 chr17 25167300 25174800 0 76 chr17 25180500 25180800 0 17 chr17 25182300 25182600 0 54 chr17 25184700 25187700 0 720 chr17 25190700 25194600 0 50 chr17 25197600 25198800 0 18 chr17 25201500 25201800 0 16 chr17 25203600 25204800 0 61 chr17 25207500 25211700 0 197 chr17 25213500 25213800 0 10 chr17 25217100 25218000 0 17 chr17 25219200 25221600 0 30 chr17 25227900 25228200 0 18 chr17 25232100 25234500 0 29 chr17 25239300 25240500 0 129 chr17 25243200 25245600 0 34 chr17 25247400 25247700 0 26 chr17 25251600 25256700 0 76 chr17 25257900 25261200 0 21 chr17 25263900 25266600 0 55 chr17 25268700 25269600 0 16 chr17 25270800 25271400 0 16 chr17 25273500 25273800 0 12 chr17 25275600 25275900 0 11 chr17 25277100 25277400 0 10 chr17 25281300 25282200 0 107 chr17 25283400 25284300 0 28 chr17 25289100 25295400 0 50 chr17 25298100 25298700 0 17 chr17 25301700 25304100 0 77 chr17 25306500 25307100 0 30 chr17 25309800 25311000 0 21 chr17 25314600 25317900 0 82 chr17 25320000 25320300 0 11 chr17 25322400 25323000 0 135 chr17 25324800 25326600 0 76 chr17 25328100 25331700 0 217 chr17 25332900 25334700 0 50 chr17 25338000 25340400 0 38 chr17 25341900 25344900 0 59 chr17 25346700 25350600 0 34 chr17 25352700 25353900 0 302 chr17 25356600 25366200 0 211 chr17 25368000 25368600 0 43 chr17 25371300 25372500 0 36 chr17 25375500 25379400 0 36 chr17 25382100 25384800 0 5097 chr17 25387200 25387500 0 36 chr17 25388700 25392600 0 386 chr17 25393800 25396800 0 322 chr17 25398300 25400100 0 183 chr17 25403700 25404000 0 30 chr17 25405200 25410600 0 296 chr17 25413900 25416900 0 70 chr17 25418700 25419900 0 36 chr17 25421100 25425600 0 48 chr17 25427100 25429500 0 40 chr17 25431000 25435500 0 63 chr17 25437300 25440600 0 80 chr17 25443000 25444200 0.0009 27 chr17 25445400 25447800 0 38 chr17 25450200 25450800 0 103 chr17 25452300 25456200 0 67 chr17 25457700 25458300 0 139 chr17 25462200 25463400 0 41 chr17 25464600 25474200 0 64 chr17 25476000 25476900 0 46 chr17 25480200 25481700 0 455 chr17 25482900 25489800 0 455 chr17 25493700 25499100 0 646 chr17 25502700 25504500 0 72 chr17 25505700 25506000 0 45 chr17 25507800 25509900 0 28 chr17 25511400 25515600 0 61 chr17 25516800 25517100 0 11 chr17 25519500 25520400 0 49 chr17 25521600 25521900 0 49 chr17 25523700 25527900 0 938 chr17 25529400 25533600 0 123 chr17 25537500 25540800 0 54 chr17 25542600 25545300 0 54 chr17 25549200 25551000 0 39 chr17 25552200 25553400 0 17 chr17 25555500 25561200 0 67 chr17 25563900 25570200 0 4118 chr17 25571400 25572600 0 22 chr17 25574100 25575300 0 66 chr17 25578600 25582800 0 70 chr17 25586400 25588800 0 83 chr17 25591200 25592400 0 45 chr17 25594200 25600200 0 55 chr17 25603200 25608900 0 74 chr17 25610100 25612800 0 74 chr17 25614300 25616700 0 18 chr17 25620000 25620600 0 22 chr17 25621800 25623000 0 30 chr17 25624500 25624800 0 13 chr17 25626000 25629300 0 59 chr17 25631400 25638600 0 132 chr17 25639800 25643100 0 74 chr17 25644300 25648800 0 36 chr17 25650000 25653600 0 261 chr17 25655400 25661400 0 307 chr17 25665900 25666800 0 28 chr17 25668300 25668900 0 32 chr17 25670100 25670400 0.2988 12 chr17 25672800 25676700 0 58 chr17 25677900 25681200 0 58 chr17 25683900 25684800 0 62 chr17 25686300 25694100 0 35 chr17 25696500 25697700 0 33 chr17 25700700 25704900 0 108 chr17 25708800 25719300 0 51 chr17 25720800 25734900 0 150 chr17 25737000 25742100 0 55 chr17 25743300 25743600 0 52 chr17 25745400 25747500 0 52 chr17 25749000 25750200 0 38 chr17 25751700 25752000 0.0773 13 chr17 25753500 25754700 0 35 chr17 25757700 25758000 0 10 chr17 25759500 25761900 0 31 chr17 25763400 25764600 0 21 chr17 25766100 25768200 0 118 chr17 25769400 25775100 0 3795 chr17 25778100 25781400 0 56 chr17 25785600 25790400 0 1563 chr17 25794900 25796700 0 217 chr17 25798200 25800600 0 47 chr17 25802400 25802700 0 13 chr17 25804200 25806000 0 49 chr17 25807500 25809900 0 37 chr17 25811400 25813800 0 54 chr17 25816500 25821000 0 53 chr17 25822500 25826400 0 33 chr17 25827900 25830300 0 66 chr17 25831500 25840800 0 44 chr17 25842900 25843200 0 14 chr17 25844700 25847700 0 70 chr17 25850100 25867800 0 303 chr17 25869300 25869600 0 15 chr17 25871700 25874100 0 64 chr17 25876200 25878300 0 58 chr17 25881300 25882200 0 62 chr17 25884600 25884900 0 16 chr17 25886100 25886700 0.0122 59 chr17 25888800 25892700 0 53 chr17 25895100 25895700 0 33 chr17 25898400 25900500 0 25 chr17 25902300 25903500 0 36 chr17 25904700 25905900 0 45 chr17 25907700 25914600 0 67 chr17 25917600 25917900 0 21 chr17 25919100 25919400 0 60 chr17 25920600 25926000 0 60 chr17 25927500 25930800 0 79 chr17 25934100 25934700 0.0314 18 chr17 25936200 25938300 0 21 chr17 25939800 25951500 0 159 chr17 25953000 25959600 0 65 chr17 25961400 25967700 0 226 chr17 25969800 25976400 0 233 chr17 25977900 25981200 0 42 chr17 25982400 25985700 0 51 chr17 25986900 25991700 0 43 chr17 25994100 25999500 0 110 chr17 26001000 26001600 0 37 chr17 26003700 26010000 0 146 chr17 26011800 26028300 0 437 chr17 26029800 26033400 0 205 chr17 26034600 26045400 0 133 chr17 26048100 26052600 0 83 chr17 26053800 26054400 0 30 chr17 26055900 26056200 0 27 chr17 26057400 26060700 0 52 chr17 26064000 26071200 0 183 chr17 26075100 26083200 0 457 chr17 26084700 26085600 0 74 chr17 26087400 26090100 0 48 chr17 26092200 26092800 0.1069 50 chr17 26094000 26098500 0 296 chr17 26100600 26106900 0 1578 chr17 26108400 26115300 0 73 chr17 26116500 26120100 0 37 chr17 26121900 26123400 0 1755 chr17 26124600 26126400 0 64 chr17 26127900 26133300 0 473 chr17 26135400 26136900 0 15 chr17 26138100 26139300 0 33 chr17 26140500 26145600 0 232 chr17 26146800 26156700 0 279 chr17 26157900 26161200 0 40 chr17 26163600 26172900 0 164 chr17 26174400 26181000 0 33 chr17 26182800 26184600 0 69 chr17 26186100 26192100 0 60 chr17 26193900 26194500 0 18 chr17 26195700 26205300 0 99 chr17 26206500 26207700 0 99 chr17 26209800 26210700 0 77 chr17 26212200 26216700 0 61 chr17 26217900 26219700 0 32 chr17 26220900 26226900 0 86 chr17 26228400 26229900 0 183 chr17 26231100 26238000 0 53 chr17 26239200 26244000 0 72 chr17 26245500 26259300 0 62 chr17 26260800 26261700 0 41 chr17 26263500 26265600 0 63 chr17 26267100 26275800 0 243 chr17 26277600 26278200 0 74 chr17 26279700 26280600 0 185 chr17 26282400 26294400 0 388 chr17 26296500 26298000 0 23 chr17 26299200 26300100 0.056 458 chr17 26301300 26303100 0 105 chr17 26305200 26305500 0 16 chr17 26306700 26311800 0 213 chr17 26313000 26318700 0 40 chr17 26320500 26332200 0 253 chr17 26334000 26334900 0 30 chr17 26336400 26337000 0 17 chr17 26338500 26339700 0 40 chr17 26341200 26345700 0 64 chr17 26346900 26349900 0 64 chr17 26351400 26353500 0 27 chr17 26355300 26358900 0 124 chr17 26360100 26364600 0 845 chr17 26365800 26367000 0 33 chr17 26368500 26373000 0 22 chr17 26374500 26381100 0 226 chr17 26382600 26385900 0 210 chr17 26387400 26391300 0 347 chr17 26392500 26396400 0 62 chr17 26397900 26400000 0 691 chr17 26401200 26403600 0 38 chr17 26406300 26409900 0 76 chr17 26411400 26415600 0 65 chr17 26416800 26423700 0 60 chr17 26425200 26428800 0 60 chr17 26430300 26436300 0 76 chr17 26438700 26442000 0 30 chr17 26443200 26447400 0 1206 chr17 26448900 26451000 0 48 chr17 26452200 26466000 0 248 chr17 26467500 26474400 0 83 chr17 26475900 26477100 0 21 chr17 26478300 26487900 0 52 chr17 26490000 26490600 0 36 chr17 26492100 26496000 0 2782 chr17 26497200 26498700 0 39 chr17 26500200 26501700 0 35 chr17 26502900 26504400 0 69 chr17 26505600 26510100 0 73 chr17 26511900 26512200 0 16 chr17 26514000 26517900 0 29 chr17 26519100 26521200 0 20 chr17 26523300 26528400 0 58 chr17 26529900 26540100 0 66 chr17 26541600 26544900 0 256 chr17 26546100 26547900 0 256 chr17 26549700 26553600 0 256 chr17 26554800 26555700 0 45 chr17 26557200 26564400 0 58 chr17 26565600 26603100 0 814 chr17 26604600 26610600 0 2180 chr17 26612100 26618700 0 2180 chr17 26620800 26623800 0 76 chr17 26806500 26807400 0.0473 319 chr17 26809200 26809500 0.2507 663 chr17 26812200 26812500 0.0814 129 chr17 26814900 26815200 0.2553 188 chr17 26828100 26828400 0.2797 480 chr17 26832300 26832600 0.0899 779 chr17 26846100 26846400 0.2735 148 chr17 26851500 26851800 0.1985 289 chr17 26854500 26854800 0.2485 321 chr17 26862900 26863200 0.1904 178 chr17 26869800 26870100 0.1081 645 chr17 26879400 26881500 0 1028 chr17 26884200 26884500 0.0248 426 chr17 26936100 26938500 0.145 6317 chr17 26939700 26940900 0.2085 2591 chr17 27161100 27162300 0.0031 76 chr17 27210300 27210600 0.0338 54 chr17 27212700 27213300 0.0663 34 chr17 27829200 27829800 0 54 chr17 27831300 27831600 0.0195 64 chr17 27838200 27839700 0.0075 69 chr17 28455600 28456200 0 26 chr17 29895600 29896200 0 38 chr17 30440100 30441900 0 99 chr17 30617100 30621600 0 71 chr17 30625800 30630300 0 76 chr17 30654900 30655200 0.0695 37 chr17 30668400 30668700 0.0117 48 chr17 30700500 30700800 0.1803 40 chr17 30732300 30732600 0.0731 66 chr17 32028000 32028900 0 52 chr17 32084400 32084700 0.0559 58 chr17 32091000 32091600 0 56 chr17 32680200 32680500 0.0028 65 chr17 32682900 32683200 0.0975 96 chr17 32889000 32892900 0 79 chr17 33542400 33542700 0.0525 53 chr17 34293600 34296300 0.0396 83 chr17 36162300 36162600 0.045 112 chr17 36164400 36164700 0.045 112 chr17 36166500 36168300 0.0124 80 chr17 36169800 36170700 0 115 chr17 36172200 36174900 0 115 chr17 36176100 36176400 0 90 chr17 36177600 36179100 0 90 chr17 36208800 36209100 0.0248 35 chr17 36227100 36230700 0 94 chr17 36233700 36234000 0 94 chr17 36235200 36236100 0 55 chr17 36237600 36238200 0 55 chr17 36239700 36290400 0 136 chr17 36291600 36350100 0 141 chr17 36351300 36385200 0 134 chr17 36386400 36388200 0 126 chr17 36391500 36392700 0.0051 101 chr17 36394500 36394800 0.0037 68 chr17 36396000 36396900 0.0037 68 chr17 36398100 36399300 0 66 chr17 36400500 36400800 0 66 chr17 36402300 36410100 0 66 chr17 36411600 36414900 0 67 chr17 36416100 36420300 0 108 chr17 36422400 36426600 0 108 chr17 36428100 36433500 0 108 chr17 36434700 36437400 0 108 chr17 36438900 36443100 0 99 chr17 36445200 36445500 0.2335 77 chr17 36450300 36452400 0 66 chr17 37894200 37896600 0 78 chr17 37898100 37901100 0 74 chr17 37902600 37911600 0 66 chr17 37913700 37918500 0 151 chr17 37920300 37950600 0 151 chr17 37952400 37957500 0 98 chr17 37958700 37966800 0 131 chr17 37969800 37972800 0 152 chr17 37974000 38250000 0 152 chr17 38253600 38253900 0.0743 63 chr17 38630700 38632200 0.0406 51 chr17 41083500 41083800 0.1687 30 chr17 41204100 41205900 0.0943 80 chr17 41227200 41227800 0.0169 45 chr17 41238600 41239200 0.0239 41 chr17 42264900 42265200 0.2662 37 chr17 42338100 42338400 0.0909 22 chr17 43228200 43230300 0 67 chr17 43233000 43304700 0 410 chr17 43323000 43323600 0 194 chr17 44034900 44035500 0.0018 61 chr17 44179800 44180400 0.0608 71 chr17 45180600 45180900 0 11 chr17 45498000 45498300 0.0264 82 chr17 45512100 45519900 0 120 chr17 45526800 45529200 0 49 chr17 45531300 45532200 0.0163 75 chr17 45534300 45534600 0.0072 60 chr17 45535800 45536100 0.0072 60 chr17 45537900 45547500 0 94 chr17 45550800 45561300 0 108 chr17 45599100 45599700 0.0231 59 chr17 45602700 45603000 0.0021 93 chr17 46237500 46238100 0.1447 56 chr17 46242600 46243500 0 74 chr17 46246200 46246500 0 74 chr17 46293000 46298100 0 98 chr17 46299300 46305300 0 81 chr17 46307100 46311000 0 81 chr17 46313100 46314300 0 127 chr17 46315500 46316400 0 127 chr17 46317600 46321200 0 127 chr17 46322400 46323300 0 127 chr17 46326000 46332300 0 127 chr17 46333800 46339800 0 127 chr17 46341000 46365000 0 127 chr17 46366200 46403400 0 127 chr17 46406100 46409100 0 91 chr17 46410300 46444200 0 87 chr17 46445400 46449000 0 93 chr17 46450500 46455300 0 93 chr17 46456500 46457400 0 93 chr17 46459200 46460100 0 87 chr17 46464000 46467300 0 87 chr17 46468500 46473600 0 82 chr17 46476000 46477500 0 86 chr17 46479000 46486800 0 86 chr17 46488000 46488600 0.0535 83 chr17 46503900 46504500 0 112 chr17 46506300 46511100 0 112 chr17 46512300 46518000 0 112 chr17 46520100 46525200 0 102 chr17 46527600 46528500 0.0555 93 chr17 46530600 46531800 0.0033 82 chr17 46533000 46533900 0.1057 91 chr17 46535400 46539000 0 95 chr17 46544100 46550400 0 115 chr17 46551900 46552500 0.0022 82 chr17 46554300 46557900 0 125 chr17 46559100 46568100 0 125 chr17 46569900 46608600 0 89 chr17 46610400 46621800 0 89 chr17 46623000 46630500 0 92 chr17 46631700 46632900 0 92 chr17 46634100 46666800 0 90 chr17 46668000 46675200 0 90 chr17 46676700 46677900 0 87 chr17 46680600 46692300 0 87 chr17 46693800 46694100 0.075 76 chr17 46695300 46704600 0 84 chr17 46705800 46706400 0.027 83 chr17 47016600 47016900 0.064 107 chr17 47021400 47021700 0.0105 63 chr17 47025600 47025900 0.1085 69 chr17 47039400 47041200 0 52 chr17 47046600 47047200 0 40 chr17 47048700 47049000 0.0513 100 chr17 49151100 49151400 0 16 chr17 49423500 49423800 0.0169 64 chr17 51624900 51625200 0.1893 45 chr17 52185600 52185900 0.1435 64 chr17 52405500 52405800 0.0545 67 chr17 52408200 52408500 0.1133 82 chr17 55503000 55503300 0.1348 83 chr17 55506000 55506900 0.0182 59 chr17 56051100 56051400 0.0271 86 chr17 56190900 56192700 0.0013 74 chr17 59574000 59574300 0.0398 51 chr17 59578200 59578500 0 80 chr17 59579700 59581500 0 80 chr17 59582700 59585100 0 71 chr17 59593200 59593500 0.0141 57 chr17 59597100 59597400 0.046 52 chr17 59978100 59978400 0.0361 53 chr17 59979600 59979900 0.1459 56 chr17 59982000 59982300 0.0117 72 chr17 59990400 59992800 0 64 chr17 59994000 59995800 0 64 chr17 59997000 59997300 0 64 chr17 60001200 60001500 0.0238 60 chr17 60009900 60010200 0.0594 87 chr17 60020400 60027900 0 93 chr17 60029400 60034500 0 93 chr17 60111000 60126300 0 86 chr17 60882900 60885600 0.0055 87 chr17 61111800 61113600 0.0073 87 chr17 62234700 62235000 0.0718 114 chr17 62263800 62264100 0.0448 74 chr17 62265300 62266800 0.0448 74 chr17 63862800 63863100 0.0306 58 chr17 63872700 63873000 0.0589 64 chr17 63886200 63886500 0.0547 64 chr17 63895500 63896100 0.0076 80 chr17 64884000 64896600 0 92 chr17 64897800 64898100 0 102 chr17 64900500 64900800 0 102 chr17 64902300 64903500 0 102 chr17 64904700 64906500 0 102 chr17 66596700 66602400 0 88 chr17 66798600 66799500 0.2375 1205 chr17 68409000 68410500 0.0695 83 chr17 69002100 69002400 0.0782 62 chr17 69741600 69741900 0.0812 99 chr17 70459200 70464900 0 90 chr17 70545000 70550400 0 101 chr17 71608800 71609100 0.0089 25 chr17 77777100 77777400 0.0323 62 chr17 80488500 80488800 0.2526 24 chr17 80601600 80602200 0 46 chr17 80748900 80749200 0.2736 59 chr17 80963400 80963700 0.1822 45 chr17 82448400 82448700 0 54 chr17 82764900 82765200 0.0393 58 chr17 82903800 82904100 0.2949 33 chr17 82971600 82971900 0.1187 64 chr17 83208600 83211600 0.0006 67 chr17 83212800 83214000 0.0004 53 chr17 83215500 83223000 0 141 chr17 83224500 83230800 0 141 chr17 83232600 83234400 0 141 chr17 83238300 83238600 0.0317 65 chr17 83240700 83241000 0.1068 47 chr17 83242800 83247300 0 79 chr18 9900 45600 0 152 chr18 108600 109200 0.0446 13721 chr18 117600 117900 0.0331 66 chr18 126000 126300 0.0049 47 chr18 219000 219300 0.2311 71 chr18 536700 541500 0 84 chr18 972900 974100 0.0793 97 chr18 975300 975600 0.1971 58 chr18 1520700 1521000 0.1566 65 chr18 1534200 1534500 0.0284 46 chr18 1720500 1720800 0.0033 24 chr18 2001000 2001300 0.1181 48 chr18 2248500 2248800 0.236 91 chr18 2251800 2252100 0.0771 168 chr18 4474200 4474800 0.0683 84 chr18 4650000 4650300 0.1137 43 chr18 5332800 5334300 0.0142 52 chr18 5681700 5682000 0.0029 69 chr18 5685000 5687700 0 94 chr18 6273000 6273300 0.0151 107 chr18 7399200 7401300 0.0679 46 chr18 7692000 7692300 0.053 53 chr18 7967100 7971900 0.002 109 chr18 8057700 8062800 0.0016 82 chr18 9815400 9816000 0.0119 30 chr18 10573500 10574100 0.0887 108 chr18 10606200 10606500 0.0544 64 chr18 10643400 10643700 0.114 78 chr18 10646100 10646400 0.1295 42 chr18 11804400 11804700 0.1491 49 chr18 12077700 12078000 0.1295 72 chr18 12081600 12081900 0.0693 47 chr18 12141600 12144900 0 77 chr18 12147000 12149700 0 77 chr18 12179700 12180000 0.2801 62 chr18 12204300 12205500 0.0108 68 chr18 12228900 12229200 0.0548 52 chr18 13976100 13981200 0 80 chr18 14165100 14165400 0.0266 59 chr18 14387400 14387700 0.0292 74 chr18 14388900 14389200 0.0292 74 chr18 14629500 14629800 0.1696 36 chr18 14634300 14634600 0.1222 48 chr18 14721000 14721300 0.1676 47 chr18 14800800 14804400 0 54 chr18 14811600 14815200 0 53 chr18 14823000 14823300 0.0226 64 chr18 14857500 14859900 0.0196 47 chr18 15213300 15213900 0 48 chr18 15461400 15464700 0 143 chr18 15466500 15466800 0.011 62 chr18 15468300 15473400 0 336 chr18 15474900 15475800 0 336 chr18 15477000 15480900 0 336 chr18 15482400 15486300 0.036 178 chr18 15487800 15507300 0 275 chr18 15508800 15516900 0 227 chr18 15518400 15520500 0.0064 179 chr18 15521700 15549600 0 261 chr18 15551400 15555000 0 430 chr18 15556200 15562500 0 260 chr18 15563700 15571200 0 241 chr18 15572700 15573300 0 241 chr18 15574500 15576600 0 149 chr18 15578700 15616200 0 240 chr18 15618000 15631200 0 166 chr18 15632400 15642300 0 187 chr18 15643800 15645300 0.0105 150 chr18 15647100 15661800 0 177 chr18 15663300 15665400 0 155 chr18 15667500 15680400 0 210 chr18 15682500 15685800 0.0066 124 chr18 15687600 15691800 0 134 chr18 15693000 15693900 0 157 chr18 15695400 15703800 0 101 chr18 15705000 15706500 0 135 chr18 15707700 15713100 0 135 chr18 15715200 15718500 0.0028 179 chr18 15719700 15720600 0 98 chr18 15722100 15726900 0 148 chr18 15728100 15739500 0 148 chr18 15741600 15751500 0 130 chr18 15753300 15754800 0 130 chr18 15756900 15758700 0 175 chr18 15760200 15769800 0 175 chr18 15771000 15771600 0 193 chr18 15772800 15780900 0 193 chr18 15786000 15786300 0.0375 38 chr18 15788100 15788400 0 31 chr18 15792900 15794700 0.0347 61 chr18 15797400 15798900 0 572 chr18 15800400 15809400 0 572 chr18 15810600 15819300 0 572 chr18 15820500 15821700 0 572 chr18 15822900 16046400 0 572 chr18 16047600 16464900 0 572 chr18 16466100 16618200 0 572 chr18 16619700 16769700 0 572 chr18 16771200 16864200 0 284 chr18 16865400 16920900 0 237 chr18 16922100 16930200 0 293 chr18 16931400 17376900 0 293 chr18 17378100 17731200 0 293 chr18 17732400 17803200 0 293 chr18 17805300 17810700 0 238 chr18 17811900 17938800 0 238 chr18 17940000 18040500 0 238 chr18 18041700 18381600 0 288 chr18 18382800 18394200 0 164 chr18 18395700 18446400 0 228 chr18 18447600 18519000 0 228 chr18 18520200 18616800 0 286 chr18 18618300 18788100 0 307 chr18 18789300 18885600 0 307 chr18 18886800 18980700 0 388 chr18 18981900 19162200 0 388 chr18 19163400 19275300 0 220 chr18 19276800 19352400 0 264 chr18 19353600 19415700 0 264 chr18 19417200 19479600 0 264 chr18 19480800 19622100 0 202 chr18 19624200 19691400 0 231 chr18 19692600 19719000 0 271 chr18 19720200 19803300 0 271 chr18 19804500 19868700 0 271 chr18 19870200 19913100 0 385 chr18 19914600 20075100 0 385 chr18 20076300 20198400 0 385 chr18 20199600 20561400 0 385 chr18 20564400 20564700 0 13 chr18 20571600 20572200 0.0038 72 chr18 20573400 20573700 0.036 43 chr18 20576700 20577900 0 85 chr18 20580300 20581500 0 83 chr18 20584200 20584800 0.0041 117 chr18 20586000 20586300 0.0041 117 chr18 20591400 20592300 0.0262 55 chr18 20599800 20600100 0.0943 38 chr18 20602200 20611500 0 159 chr18 20613000 20677500 0 159 chr18 20678700 20696400 0 102 chr18 20697900 20715600 0 102 chr18 20716800 20720400 0 102 chr18 20721600 20726700 0 93 chr18 20727900 20732700 0 47 chr18 20733900 20734500 0 47 chr18 20738700 20739900 0 102 chr18 20741700 20742900 0 75 chr18 20745000 20745600 0.0116 88 chr18 20748000 20754900 0 114 chr18 20756400 20757000 0 114 chr18 20758500 20758800 0 114 chr18 20760600 20763600 0 114 chr18 20766000 20768100 0 114 chr18 20769300 20773800 0 64 chr18 20775000 20775300 0 64 chr18 20776500 20781000 0 128 chr18 20782500 20785500 0 20 chr18 20787900 20789400 0 29 chr18 20791800 20798400 0 76 chr18 20803800 20805900 0 76 chr18 20807400 20807700 0.0828 64 chr18 20810700 20811000 0.0302 68 chr18 20812200 20812500 0.0302 68 chr18 20813700 20814600 0 56 chr18 20817600 20818200 0 49 chr18 20820300 20822100 0 35 chr18 20824800 20825100 0.0532 23 chr18 20835000 20835600 0.0032 38 chr18 20837100 20837700 0.059 28 chr18 20838900 20839800 0 95 chr18 20911200 20912400 0 51 chr18 20915100 20920800 0.0012 138 chr18 20923200 20931900 0 183 chr18 20935200 20935500 0.1353 42 chr18 20945700 20946000 0.0073 49 chr18 22533600 22533900 0.0243 54 chr18 22581600 22581900 0.0083 28 chr18 22819500 22819800 0.0228 43 chr18 24619200 24620100 0.1677 58 chr18 24623700 24624000 0.0357 73 chr18 24713100 24713400 0.0342 88 chr18 24715200 24715800 0.1036 57 chr18 25485300 25487100 0 83 chr18 26169900 26170200 0.1695 65 chr18 26248500 26248800 0.0014 26 chr18 27515100 27515400 0.1694 63 chr18 27740100 27740400 0.0132 105 chr18 28417200 28419600 0.021 123 chr18 28783800 28784100 0 22 chr18 30024300 30025200 0 81 chr18 31348800 31350300 0.0281 71 chr18 32858400 32860800 0.0078 80 chr18 34554000 34554300 0.0409 86 chr18 35206800 35209800 0.0023 84 chr18 35211000 35211300 0.0905 80 chr18 36236100 36236400 0.0997 71 chr18 36240000 36240300 0.1 87 chr18 36986700 36987300 0.0145 60 chr18 37819800 37825200 0 77 chr18 37973400 37973700 0.246 65 chr18 39566700 39568200 0.0024 60 chr18 39569400 39570600 0.1054 66 chr18 39860400 39861600 0.0309 61 chr18 40845300 40847700 0 92 chr18 41636100 41637600 0.0488 88 chr18 41776200 41776500 0.1608 91 chr18 41778000 41779800 0 83 chr18 43299600 43300200 0.0946 83 chr18 43326000 43326300 0.0769 92 chr18 43451700 43452300 0 46 chr18 43873500 43873800 0.1508 21 chr18 45080400 45081000 0 37 chr18 46962300 46970100 0 326 chr18 47019900 47031000 0 275 chr18 47348400 47348700 0.0737 57 chr18 47661000 47666100 0 89 chr18 48276600 48276900 0.0521 48 chr18 48469800 48470100 0.0721 24 chr18 48511200 48511500 0.0436 108 chr18 49202400 49202700 0.2051 105 chr18 50344200 50349300 0 88 chr18 51741300 51742200 0.0113 85 chr18 51744900 51745800 0.1853 73 chr18 52792500 52793100 0.1119 881 chr18 53173800 53174100 0.0651 55 chr18 54342600 54344400 0.0088 68 chr18 54400200 54400500 0.1752 44 chr18 54426600 54430500 0 68 chr18 55889100 55889400 0.0222 74 chr18 56529600 56529900 0.0778 70 chr18 57264900 57265200 0.1302 48 chr18 57642300 57642600 0.1141 113 chr18 57720300 57720600 0.2043 92 chr18 57723300 57723600 0.09 79 chr18 57724800 57725100 0.0601 66 chr18 58170300 58171200 0 67 chr18 59404200 59409600 0 107 chr18 60031200 60031500 0.1316 78 chr18 61023300 61023600 0.1516 38 chr18 61074600 61075200 0 72 chr18 61561500 61561800 0.0272 69 chr18 61716600 61718100 0.1092 75 chr18 62581500 62581800 0.178 36 chr18 62906700 62912100 0 103 chr18 63063600 63063900 0.1234 218 chr18 63863400 63866100 0.0027 70 chr18 65779500 65779800 0.0385 44 chr18 68227200 68227800 0.0122 61 chr18 68538900 68541600 0 30 chr18 68786400 68786700 0.2248 59 chr18 68859300 68859600 0.0539 50 chr18 69450300 69454200 0.0578 102 chr18 70685400 70686600 0.0115 136 chr18 70746900 70752300 0 76 chr18 71179500 71179800 0.0301 24 chr18 71656800 71657400 0.0508 37 chr18 72966900 72972300 0 94 chr18 72975600 72976200 0.0481 75 chr18 74485200 74485500 0.0805 15 chr18 74998800 74999100 0.0004 90 chr18 75847500 75852600 0 112 chr18 77028300 77028600 0.0699 70 chr18 78371100 78372300 0.0129 20 chr18 78437400 78438000 0.0625 334 chr18 78502500 78502800 0.0018 74 chr18 78513600 78514800 0.2194 60 chr18 78753900 78754200 0.1537 36 chr18 79015800 79016700 0.1763 66 chr18 79035000 79035300 0.2596 58 chr18 79115700 79116600 0.0367 64 chr18 79308900 79309200 0.1281 42 chr18 79356900 79358700 0.0552 66 chr18 79550400 79551900 0 26 chr18 79745400 79746300 0 37 chr18 79752600 79752900 0.0878 24 chr18 79764600 79765500 0.1719 57 chr18 79808400 79808700 0.1089 19 chr18 79830900 79831500 0.0503 61 chr18 79886100 79887000 0 69 chr18 79920300 79921500 0.1145 50 chr18 80071500 80073000 0.0439 110 chr18 80262900 80263500 0.191 402 chr19 60000 92700 0 132 chr19 94800 95100 0 132 chr19 97800 99000 0.0081 90 chr19 100200 100500 0.0119 82 chr19 104400 107400 0.0003 89 chr19 109500 109800 0 106 chr19 111000 224700 0 106 chr19 225900 226500 0 106 chr19 227700 229200 0 106 chr19 230700 235200 0 80 chr19 239400 239700 0.083 95 chr19 312600 312900 0.2867 40 chr19 332700 333600 0.0197 57 chr19 361200 361800 0.1338 78 chr19 399900 400500 0.1577 37 chr19 432300 432900 0.1025 14 chr19 1033800 1034100 0.1481 12 chr19 1148700 1149000 0.0781 30 chr19 1195200 1198500 0 36 chr19 2418600 2418900 0.2378 32 chr19 2713500 2713800 0.202 55 chr19 3177900 3178200 0.1305 47 chr19 3649200 3649800 0 90 chr19 3973200 3975000 0 43 chr19 5076300 5076600 0.2967 97 chr19 5611200 5611500 0 54 chr19 5649000 5649600 0 61 chr19 7007400 7007700 0.04 67 chr19 7010400 7010700 0.0217 67 chr19 7019400 7032600 0 101 chr19 7035000 7035300 0.0493 84 chr19 7037700 7051500 0 92 chr19 7056900 7059900 0 95 chr19 7061100 7061400 0 95 chr19 8274000 8274300 0.0126 35 chr19 8276400 8277600 0.0225 31 chr19 8280000 8282100 0 38 chr19 8284500 8286300 0 38 chr19 8288100 8289300 0 37 chr19 8290500 8292300 0 33 chr19 8293800 8296800 0 30 chr19 8298600 8300700 0.0045 37 chr19 8741400 8767200 0 250 chr19 8769000 8773800 0 259 chr19 8775000 8778900 0 259 chr19 8780400 8786700 0 233 chr19 11424600 11424900 0.212 22 chr19 12006900 12007200 0.1082 70 chr19 13703100 13703400 0.1915 69 chr19 13936800 13937100 0.2977 28 chr19 14622600 14623200 0 27 chr19 15931500 15933000 0.0489 81 chr19 17349000 17349300 0.2568 103 chr19 20148900 20150400 0.0801 54 chr19 21720300 21722700 0 57 chr19 21864900 21865200 0.0329 74 chr19 21866400 21866700 0.0265 72 chr19 22925700 22926000 0.0574 65 chr19 23134800 23135100 0.1443 83 chr19 24411000 24413400 0 77 chr19 24420900 24432000 0 427 chr19 24433500 24449100 0 427 chr19 24891300 24891900 0.1596 651 chr19 24894600 24895500 0.0686 418 chr19 24908400 24908700 0.006 15 chr19 27645000 27645300 0.1251 60 chr19 28805100 28805400 0.2978 15 chr19 29229600 29230800 0 69 chr19 29460000 29464800 0 73 chr19 29898000 29902200 0 72 chr19 30141300 30143700 0 65 chr19 31653600 31654200 0 64 chr19 34078800 34080300 0 63 chr19 34861500 34861800 0.049 94 chr19 35360400 35360700 0.038 45 chr19 36247200 36247500 0.1559 66 chr19 36269100 36309000 0 240 chr19 36312000 36312600 0 57 chr19 36699900 36700200 0.1214 56 chr19 37266000 37266600 0.0716 61 chr19 37269300 37280400 0 321 chr19 37282500 37293000 0 411 chr19 37294800 37303200 0 411 chr19 37751100 37751400 0.1751 28 chr19 37838100 37843200 0 76 chr19 37866300 37866900 0.0056 80 chr19 38540400 38540700 0.1443 33 chr19 38770500 38773500 0 71 chr19 38789400 38792100 0 80 chr19 39876600 39877200 0.0806 103 chr19 39880800 39881100 0.0288 94 chr19 39883500 39884700 0.0444 98 chr19 39887100 39889800 0 111 chr19 39893100 39893400 0.2125 110 chr19 39897000 39897300 0.0161 109 chr19 39900600 39901200 0.0754 101 chr19 39903300 39906000 0 108 chr19 40107300 40109700 0.0002 93 chr19 40117200 40117800 0.2011 91 chr19 40119000 40119300 0.101 66 chr19 40647600 40649400 0.0007 56 chr19 40842900 40843200 0.1006 60 chr19 40874700 40875000 0.0681 63 chr19 40965000 40965300 0.1602 80 chr19 41645400 41646000 0.0206 71 chr19 42770100 42770400 0.2481 74 chr19 43051200 43052400 0.017 70 chr19 43356000 43359900 0 73 chr19 43364700 43365000 0.014 73 chr19 43369800 43370400 0.0435 73 chr19 43374900 43378800 0 71 chr19 43866000 43866300 0.2311 44 chr19 44546400 44546700 0.0538 77 chr19 44594400 44595000 0.048 66 chr19 45648300 45648600 0.2218 16 chr19 46039200 46039500 0.2929 57 chr19 46438800 46440900 0 37 chr19 46452900 46453200 0.2246 11 chr19 47903700 47949300 0 353 chr19 47950500 47958600 0 353 chr19 49023300 49023600 0.1063 58 chr19 49028100 49028400 0.1246 70 chr19 49032600 49032900 0.0232 78 chr19 49054500 49054800 0.1489 63 chr19 49959600 49959900 0.0411 53 chr19 50074800 50075100 0.1661 59 chr19 50091600 50098800 0 764 chr19 50100300 50133300 0 812 chr19 50137500 50139000 0 322 chr19 50609100 50609400 0.0756 10 chr19 51310800 51311100 0.1409 38 chr19 51630000 51630300 0.04 53 chr19 51646500 51646800 0.0275 69 chr19 51672900 51674100 0 63 chr19 51758100 51758400 0.0684 61 chr19 52888200 52888500 0.0797 53 chr19 53014200 53014500 0.0649 69 chr19 53049300 53049600 0.0059 61 chr19 53097000 53097300 0.0819 79 chr19 53113200 53113500 0.0981 41 chr19 53126700 53127000 0.0004 54 chr19 53186100 53188200 0 74 chr19 53281800 53282100 0.2322 61 chr19 54360000 54360300 0.0974 51 chr19 54580500 54581400 0 74 chr19 54780900 54781200 0.1369 60 chr19 55450200 55450500 0.2292 52 chr19 55773600 55773900 0.0363 65 chr19 55824900 55827000 0 71 chr19 56080200 56080500 0.0022 32 chr19 56103900 56104200 0.2659 24 chr19 56339400 56339700 0.023 38 chr19 56444700 56445900 0.0672 79 chr19 56669700 56670000 0.2661 58 chr19 56745000 56745600 0.1629 218 chr19 57834300 57834600 0.0192 70 chr19 57882000 57882300 0.0865 51 chr19 58106400 58106700 0.1481 17 chr19 58337400 58337700 0.1195 55 chr19 58587600 58587900 0.0974 59 chr19 58589100 58589400 0.0437 78 chr19 58591800 58596900 0.0111 77 chr19 58598100 58599600 0.0137 67 chr19 58600800 58604100 0.002 99 chr19 58605600 58605900 0.1299 70 chr2 197700 198300 0.0219 46 chr2 207000 207600 0.1359 138 chr2 306600 308700 0.211 47 chr2 420600 420900 0.0257 30 chr2 488100 488400 0.0756 14 chr2 495300 495600 0.0635 30 chr2 671400 671700 0.1278 53 chr2 800400 800700 0.0168 37 chr2 801900 802200 0.1086 99 chr2 804900 805200 0.1516 87 chr2 861000 861300 0.2527 22 chr2 931800 932400 0.042 20 chr2 1012800 1014000 0.0251 38 chr2 1107300 1108800 0 27 chr2 1222500 1223100 0.1335 429 chr2 1342500 1346100 0 61 chr2 1417500 1417800 0.0187 77 chr2 1568700 1569000 0.2091 28 chr2 1750500 1750800 0.2871 70 chr2 2034600 2036400 0.0236 50 chr2 2258100 2259300 0.0011 122 chr2 3221100 3221700 0.0063 147 chr2 3315300 3315900 0.0731 62 chr2 3331500 3332100 0.0924 106 chr2 3374700 3375000 0.0953 105 chr2 3591000 3591900 0.0064 138 chr2 3775200 3775500 0.0633 34 chr2 4733700 4739700 0 98 chr2 5069100 5069400 0.2057 22 chr2 5197200 5198700 0.0379 75 chr2 6238200 6238800 0.0122 59 chr2 7120500 7120800 0.277 94 chr2 7488600 7488900 0.2343 48 chr2 9406200 9406500 0.1486 29 chr2 10805400 10805700 0.1749 64 chr2 10996200 11001300 0 101 chr2 11091900 11092200 0.0611 12 chr2 12522600 12523800 0 102 chr2 13734300 13734900 0.1792 86 chr2 14489100 14489400 0.0657 63 chr2 14802000 14802300 0.124 63 chr2 14851800 14853300 0.0762 106 chr2 16230600 16230900 0.209 94 chr2 16593900 16599600 0 117 chr2 17984100 17985300 0 76 chr2 18012300 18014100 0.0398 94 chr2 18015600 18015900 0.1086 62 chr2 18756000 18756300 0.1515 24 chr2 19309500 19310700 0.0924 130 chr2 19831800 19832100 0.2034 73 chr2 21188100 21188400 0.2198 86 chr2 22986900 22987200 0.0499 89 chr2 23225400 23230200 0 87 chr2 23846100 23847000 0 36 chr2 27460200 27460800 0.0332 83 chr2 27539400 27540900 0.1751 100 chr2 27556800 27558600 0 90 chr2 28458600 28459200 0.0194 22 chr2 29093700 29094000 0.1604 91 chr2 30613800 30614100 0.045 71 chr2 30816900 30817200 0.0104 35 chr2 30907800 30908100 0.132 76 chr2 31500300 31500600 0.2163 82 chr2 31576200 31577100 0.0232 55 chr2 32448000 32448300 0.1032 68 chr2 32866500 32867100 0.0179 2767 chr2 32868300 32870400 0.0179 2767 chr2 32916000 32916900 0.0063 213491 chr2 34572600 34576500 0 89 chr2 36112800 36117300 0 87 chr2 36183000 36184200 0.0808 173 chr2 37225500 37225800 0.0834 71 chr2 37494300 37494900 0.0076 72 chr2 41515200 41515500 0.1615 72 chr2 41550600 41553600 0 71 chr2 41746200 41746800 0.0272 70 chr2 41748000 41748600 0.0085 68 chr2 42993300 42993900 0.0543 85 chr2 43296900 43298400 0.0971 63 chr2 43660800 43665900 0 112 chr2 44589300 44589600 0.0206 43 chr2 45059700 45060000 0.1249 55 chr2 45061200 45065400 0 95 chr2 45076800 45077100 0 102 chr2 45079200 45080400 0 102 chr2 48555600 48556500 0.0693 40 chr2 48744000 48744600 0.0567 95 chr2 49638900 49639500 0.055 66 chr2 51736800 51737100 0.0321 88 chr2 51939300 51939600 0.0615 63 chr2 53398800 53400600 0 128 chr2 53592000 53592600 0.0393 68 chr2 55739400 55739700 0.0959 61 chr2 56552100 56552400 0.1106 47 chr2 56683200 56683800 0.0145 78 chr2 57192300 57193500 0 30 chr2 57590400 57590700 0.0667 83 chr2 58383300 58383600 0.1843 72 chr2 59554800 59555100 0.1309 72 chr2 60084600 60088500 0 154 chr2 60143400 60143700 0.1105 111 chr2 60928500 60928800 0.1351 93 chr2 61980000 61980600 0.0088 93 chr2 62836500 62836800 0.1456 79 chr2 64511100 64513200 0 77 chr2 66142200 66142500 0.0368 71 chr2 70430400 70430700 0.0996 65 chr2 70434600 70434900 0.2783 49 chr2 71083500 71083800 0.0076 63 chr2 71183100 71183400 0.0014 73 chr2 71411700 71416800 0 97 chr2 71769300 71769600 0.0293 62 chr2 72016500 72016800 0.2309 69 chr2 72020100 72020400 0.0718 49 chr2 72065100 72065700 0.0116 99 chr2 72702300 72703800 0.0141 97 chr2 73166700 73167000 0.1394 62 chr2 73785300 73807500 0 144 chr2 74794200 74794500 0.1313 59 chr2 75330900 75331200 0.1244 83 chr2 76299600 76301700 0 106 chr2 77647200 77647800 0.0243 127 chr2 77676300 77676600 0.2 30 chr2 77682900 77683200 0.0915 63 chr2 77686500 77686800 0.0223 37 chr2 77755800 77756100 0.0549 123 chr2 79107300 79109100 0.0188 112 chr2 79284000 79284300 0.0203 94 chr2 79285500 79285800 0.1199 76 chr2 81351900 81352200 0.0277 53 chr2 81608700 81609000 0.1393 74 chr2 83093400 83093700 0.1351 91 chr2 83770500 83773500 0 115 chr2 83914500 83914800 0.1004 29 chr2 84371400 84372000 0.0106 104 chr2 85484100 85484700 0.0213 118 chr2 85489500 85489800 0.0448 99 chr2 86655600 86660700 0 112 chr2 86711700 86712000 0.2444 36 chr2 86713500 86713800 0.031 50 chr2 86717100 86717400 0.0391 55 chr2 86721900 86725200 0 66 chr2 86727000 86727600 0 66 chr2 86730000 86732100 0 77 chr2 86735400 86740500 0 77 chr2 86905800 86909400 0 78 chr2 86910900 86913000 0 85 chr2 86915400 86924100 0 78 chr2 86930700 86931000 0.1507 80 chr2 86932200 86932800 0 64 chr2 86936400 86936700 0.0309 65 chr2 86937900 86938200 0.1746 42 chr2 86939700 86940000 0.0869 52 chr2 86946300 86956500 0 70 chr2 86957700 87014100 0 80 chr2 87015300 87015900 0 72 chr2 87017400 87018900 0 72 chr2 87020100 87022500 0 72 chr2 87024600 87032700 0 70 chr2 87036300 87044100 0 86 chr2 87045300 87048000 0 70 chr2 87055500 87059700 0 76 chr2 87060900 87061500 0 76 chr2 87064500 87066600 0 72 chr2 87069300 87069600 0.0282 52 chr2 87071700 87073200 0 64 chr2 87074400 87074700 0.004 57 chr2 87079200 87079500 0.1717 55 chr2 87082800 87083400 0.1687 49 chr2 87104100 87104400 0.0736 65 chr2 87107700 87108000 0.0551 49 chr2 87118800 87124200 0 94 chr2 87125700 87127500 0 57 chr2 87129300 87129900 0.0016 62 chr2 87135000 87136200 0.0675 50 chr2 87139500 87139800 0.0305 57 chr2 87150600 87162900 0 89 chr2 87171600 87171900 0.1269 41 chr2 87180600 87180900 0.2761 58 chr2 87184500 87185700 0.1192 73 chr2 87191100 87192000 0.0117 69 chr2 87194700 87195900 0.0578 73 chr2 87201900 87203100 0.0774 56 chr2 87207300 87207600 0.015 69 chr2 87209400 87209700 0.0095 47 chr2 87211800 87212100 0.0095 47 chr2 87216300 87216600 0.1072 82 chr2 87227400 87227700 0.1155 61 chr2 87239100 87239400 0.0043 60 chr2 87265200 87267900 0 75 chr2 87277200 87278100 0 83 chr2 87280500 87280800 0.0631 55 chr2 87282300 87282600 0.1303 33 chr2 87298200 87298800 0.0279 72 chr2 87303000 87303600 0.0113 54 chr2 87311400 87312000 0.0269 60 chr2 87315900 87316200 0.0855 61 chr2 87319200 87319500 0.1 64 chr2 87326400 87326700 0.1785 67 chr2 87340500 87340800 0.1158 74 chr2 87349500 87350100 0.0153 88 chr2 87357000 87357600 0.041 111 chr2 87362700 87363000 0.0259 26 chr2 87367200 87367500 0.1028 85 chr2 87370500 87370800 0.1061 46 chr2 87372300 87372600 0.0134 71 chr2 87377700 87378000 0.1291 126 chr2 87382500 87383700 0 117 chr2 87384900 87385500 0.0293 117 chr2 87390900 87391800 0.0496 53 chr2 87393900 87395100 0.0022 101 chr2 87408000 87409500 0 80 chr2 87420300 87420600 0.1758 77 chr2 87423600 87423900 0.1195 74 chr2 87433200 87433500 0.0701 70 chr2 87448200 87448500 0.1392 56 chr2 87472800 87473100 0.1064 64 chr2 87496800 87497100 0 74 chr2 87499200 87499500 0 74 chr2 87501900 87507300 0 73 chr2 87511200 87511500 0.1596 54 chr2 87513300 87516000 0 76 chr2 87517800 87519300 0.0186 76 chr2 87524100 87524400 0 20 chr2 87526200 87526800 0 60 chr2 87528600 87530700 0 66 chr2 87534300 87535200 0 62 chr2 87537900 87538200 0.0722 64 chr2 87542100 87544500 0 76 chr2 87546600 87549300 0 76 chr2 87556500 87557400 0.0024 73 chr2 87560100 87561900 0 47 chr2 87564300 87565800 0.0056 62 chr2 87570600 87570900 0.0239 64 chr2 87572400 87572700 0.0689 70 chr2 87573900 87574200 0.0689 70 chr2 87581700 87582600 0 68 chr2 87595800 87596400 0 65 chr2 87597600 87598200 0 65 chr2 87600600 87605100 0.0003 78 chr2 87606900 87607500 0.0003 78 chr2 87608700 87610200 0.038 51 chr2 87611400 87614700 0 75 chr2 87615900 87616200 0 75 chr2 87618600 87623400 0 86 chr2 87624900 87627000 0 92 chr2 87628500 87629400 0 64 chr2 87630600 87631200 0 70 chr2 87632400 87632700 0 70 chr2 87648900 87649200 0.0879 57 chr2 87654000 87654300 0.0626 72 chr2 87663000 87663300 0.0716 51 chr2 87665100 87665400 0.0716 51 chr2 87667500 87669300 0 75 chr2 87676200 87676500 0.0852 61 chr2 87681900 87682500 0.0174 74 chr2 87687000 87687600 0.014 72 chr2 87690900 87691200 0.0439 67 chr2 87699600 87703500 0.0014 74 chr2 87704700 87705600 0 51 chr2 87710700 87711900 0.0044 51 chr2 87715200 87715500 0.0018 56 chr2 87721800 87724500 0 59 chr2 87726000 87730200 0 72 chr2 87732300 87732600 0.0819 68 chr2 87738600 87772500 0 97 chr2 87773700 87812700 0 97 chr2 87814200 87823500 0 85 chr2 87826500 87827700 0 51 chr2 87828900 87829200 0 51 chr2 87833100 87834000 0 56 chr2 87835500 87835800 0.0139 51 chr2 87837600 87839100 0 52 chr2 87844800 87845100 0.0809 33 chr2 87850500 87852300 0 46 chr2 87854100 87854400 0.1039 48 chr2 87855900 87856200 0.0419 46 chr2 87858900 87859200 0.0349 42 chr2 87861900 87862200 0.0011 44 chr2 87865800 87866100 0.0166 64 chr2 87867900 87868500 0.0077 48 chr2 87871200 87871500 0.0855 38 chr2 87879600 87880800 0.0113 51 chr2 87887700 87891900 0 54 chr2 87895500 87896700 0 49 chr2 87898200 87901800 0 55 chr2 87903000 87910200 0 54 chr2 87912600 87912900 0.0247 44 chr2 87914400 87914700 0.0252 43 chr2 87917400 87917700 0.0219 47 chr2 87924900 87926700 0 57 chr2 87927900 87928500 0 58 chr2 87929700 87931800 0 58 chr2 87933000 87933300 0.0753 45 chr2 87936600 87936900 0.0573 46 chr2 87938400 87939000 0 45 chr2 87941700 87944400 0 55 chr2 87945900 87946800 0 55 chr2 87948600 87950400 0 61 chr2 87954000 87956100 0 40 chr2 87960300 87960900 0.0033 51 chr2 87963300 87963600 0.1192 49 chr2 87965100 87967200 0.0598 62 chr2 87970500 87972600 0 64 chr2 87977100 87977400 0 68 chr2 87979200 87983700 0 68 chr2 87987300 87987900 0.0042 55 chr2 87990900 87991200 0.0338 51 chr2 88729800 88732800 0 100 chr2 89070300 89070600 0.1162 70 chr2 89096400 89096700 0.0497 65 chr2 89106900 89108100 0.0129 67 chr2 89110200 89110500 0.0257 60 chr2 89123400 89123700 0.109 41 chr2 89171700 89172000 0.1047 72 chr2 89173200 89173500 0.0141 78 chr2 89176800 89177100 0.1911 62 chr2 89231100 89231400 0.0664 55 chr2 89235600 89238300 0 65 chr2 89242200 89242500 0.0338 57 chr2 89249700 89250600 0.0238 51 chr2 89252100 89252400 0.1112 57 chr2 89255700 89259300 0 65 chr2 89262300 89262600 0.0741 60 chr2 89265600 89266500 0.0699 59 chr2 89268000 89268300 0.141 64 chr2 89271900 89283300 0 87 chr2 89287200 89288700 0 69 chr2 89292000 89295000 0 69 chr2 89297400 89298000 0.0059 68 chr2 89306400 89307000 0 66 chr2 89308500 89308800 0.0203 62 chr2 89310000 89310300 0.0203 62 chr2 89314200 89316300 0 85 chr2 89317800 89319900 0 85 chr2 89322000 89330700 0 81 chr2 89530500 89538000 0 107 chr2 89539800 89544000 0 107 chr2 89545200 89565600 0 122 chr2 89567100 89570100 0 98 chr2 89571600 89574600 0 102 chr2 89575800 89578200 0 91 chr2 89581200 89583000 0 105 chr2 89586600 89589000 0 90 chr2 89590800 89591400 0 90 chr2 89632800 89633100 0.0945 119 chr2 89634300 89634600 0.0151 109 chr2 89637600 89637900 0.0076 84 chr2 89649000 89649300 0.0488 58 chr2 89652000 89652300 0.0088 106 chr2 89659200 89659500 0.1463 61 chr2 89826300 89841300 0.1111 12789 chr2 89852100 89855700 0 75 chr2 89856900 89865600 0 75 chr2 89867400 89868300 0 75 chr2 89872500 89876100 0 68 chr2 89884500 89885100 0 80 chr2 89887200 89891100 0 78 chr2 89893800 89895300 0 67 chr2 89899500 89910600 0 76 chr2 89914500 89914800 0.082 66 chr2 89916600 89916900 0.0388 62 chr2 89923200 89926800 0 70 chr2 89930100 89930400 0.0183 57 chr2 89932500 89932800 0.0183 57 chr2 89940000 89940300 0.0836 51 chr2 89944200 89946900 0 67 chr2 89951100 89951400 0.0931 53 chr2 90004800 90005100 0.2195 65 chr2 90008400 90008700 0.0646 73 chr2 90009900 90010200 0.0646 73 chr2 90023100 90023400 0.2048 58 chr2 90058500 90058800 0.022 45 chr2 90090000 90090300 0.0802 61 chr2 90092400 90093000 0.1126 60 chr2 90103800 90104100 0.0509 73 chr2 90116100 90116400 0.0931 66 chr2 90237000 90237300 0.0738 95 chr2 90243000 90243300 0.1821 63 chr2 90246300 90246900 0.0021 101 chr2 90248700 90249000 0.1626 83 chr2 90258600 90259500 0.0558 67 chr2 90261600 90264600 0 113 chr2 90268800 90269400 0 141 chr2 90271200 90280800 0 141 chr2 90282900 90283500 0 119 chr2 90285900 90287100 0 119 chr2 90303900 90306900 0 92 chr2 90315900 90316200 0.003 127 chr2 90318600 90319500 0.003 127 chr2 90327600 90329400 0 183 chr2 90331200 90332400 0 183 chr2 90333600 90333900 0 183 chr2 90336600 90337200 0.0164 122 chr2 90338400 90339600 0.0164 122 chr2 90341700 90343200 0.0165 100 chr2 90344700 90345000 0.1441 73 chr2 90346200 90348900 0 126 chr2 90352800 90356100 0 168 chr2 90357900 90358200 0.0764 145 chr2 90361500 90362100 0.0101 177 chr2 90363600 90365100 0.0101 177 chr2 90366300 90369600 0.0101 177 chr2 90371400 90372000 0.0004 198 chr2 90373800 90374400 0.0004 198 chr2 90379500 90379800 0.1421 725 chr2 90401700 90402000 0.1585 1327 chr2 91402500 91407000 0 139 chr2 91416300 91420500 0 158 chr2 91423200 91423500 0.2925 642 chr2 91428600 91428900 0.024 225 chr2 91431000 91431600 0.0117 137 chr2 91433400 91433700 0.0447 172 chr2 91439100 91439400 0.1821 228 chr2 91447800 91450500 0 166 chr2 91454400 91456500 0 150 chr2 91460100 91461600 0.0148 96 chr2 91466400 91466700 0.0481 133 chr2 91469700 91470000 0 147 chr2 91471200 91472100 0 147 chr2 91474200 91474500 0.013 156 chr2 91479600 91479900 0.2705 115 chr2 91483200 91484100 0.0005 138 chr2 91486200 91486500 0.0968 105 chr2 91490400 91491900 0.0012 131 chr2 91505400 91508700 0 198 chr2 91509900 91515900 0 326 chr2 91517100 91517700 0.0557 336 chr2 91531800 91532100 0.0304 125 chr2 91533300 91533600 0.0304 125 chr2 91537200 91545300 0 125 chr2 91547400 91547700 0.0121 141 chr2 91552200 91555200 0 140 chr2 91557000 91557300 0 140 chr2 91563000 91563300 0.125 140 chr2 91569900 91570800 0.0023 113 chr2 91574700 91575000 0.0194 94 chr2 91605300 91607400 0 109 chr2 91608600 91612200 0 109 chr2 91613400 91623300 0 113 chr2 91625400 91630200 0 114 chr2 91631400 91634400 0 120 chr2 91635600 91638300 0 114 chr2 91639500 91641900 0 114 chr2 91643100 91647600 0 114 chr2 91648800 91652100 0 114 chr2 91654200 91657200 0.0035 90 chr2 91660800 91661400 0.0182 97 chr2 91665000 91666800 0 103 chr2 91668900 91669200 0 103 chr2 91671600 91671900 0.1496 98 chr2 91674900 91675200 0.073 80 chr2 91679100 91679400 0.1018 77 chr2 91683900 91684200 0.1556 98 chr2 91692300 91692900 0.0016 72 chr2 91695300 91695600 0.0386 70 chr2 91701000 91701300 0.2294 53 chr2 91703700 91704000 0.0407 73 chr2 91705800 91709700 0.0113 119 chr2 91712700 91713000 0.2846 78 chr2 91716600 91716900 0.1311 102 chr2 91719900 91721100 0.1536 89 chr2 91722900 91726500 0 152 chr2 91727700 91728600 0 152 chr2 91733100 91733400 0.1128 51 chr2 91795500 91798500 0 110 chr2 91800000 91839000 0 119 chr2 91926600 91926900 0.1011 92 chr2 92013600 92053800 0 144 chr2 92055300 92057400 0 144 chr2 92082000 92131200 0 108 chr2 92132400 92133000 0 108 chr2 92134500 92138100 0 44 chr2 92188200 92193300 0 134 chr2 92195100 92216700 0 420 chr2 92218200 92221200 0 420 chr2 92222400 92232900 0 215 chr2 92234400 92241300 0 228 chr2 92243100 92256900 0 485 chr2 92258100 92260800 0 217 chr2 92262000 92270700 0 402 chr2 92272500 92285100 0 402 chr2 92286300 92337600 0 402 chr2 92339400 92346300 0 277 chr2 92349000 92365500 0 321 chr2 92367300 92370000 0 409 chr2 92371200 92382600 0 409 chr2 92384100 92390100 0 315 chr2 92391300 92393700 0 288 chr2 92395200 92402700 0 288 chr2 92404200 92445600 0 372 chr2 92446800 92452200 0 372 chr2 92453700 92492400 0 369 chr2 92493900 92514300 0 369 chr2 92515500 92522400 0 399 chr2 92523600 92529600 0 399 chr2 92530800 92535900 0 210 chr2 92537100 92538000 0 131 chr2 92539200 92539800 0 131 chr2 92541000 92551500 0 374 chr2 92552700 92558700 0 374 chr2 92559900 92571300 0 502 chr2 92572800 92604000 0 502 chr2 92605500 92607600 0.0059 169 chr2 92608800 92619600 0 454 chr2 92620800 92623200 0 454 chr2 92624400 92633100 0 454 chr2 92634300 92644800 0 454 chr2 92646900 92660400 0 229 chr2 92661600 92663100 0 429 chr2 92664300 92667000 0 429 chr2 92668200 92673600 0 429 chr2 92675100 92686800 0 281 chr2 92688000 92690400 0 90 chr2 92691600 92694900 0 134 chr2 92696400 92711100 0 237 chr2 92712300 92715600 0 237 chr2 92716800 92734500 0 234 chr2 92735700 92736000 0 234 chr2 92738100 92748600 0 161 chr2 92749800 92753100 0 161 chr2 92754300 92754900 0 161 chr2 92757000 92760300 0 215 chr2 92762700 92763000 0.032 369 chr2 92764500 92765100 0 114 chr2 92767200 92771400 0 319 chr2 92772600 92783700 0 260 chr2 92785200 92790300 0 260 chr2 92791800 92798700 0 184 chr2 92800200 92821800 0 184 chr2 92823000 92840700 0 453 chr2 92841900 92856000 0 246 chr2 92858400 92865900 0 200 chr2 92867700 92872200 0 116 chr2 92874000 92878200 0 191 chr2 92879400 92886900 0 435 chr2 92888700 92900100 0 223 chr2 92901600 92912100 0 172 chr2 92913300 92919000 0 172 chr2 92920500 92921400 0 172 chr2 92922600 92933100 0 259 chr2 92934300 92941500 0 259 chr2 92943000 92946300 0 77 chr2 92948100 92949300 0 127 chr2 92950800 92954700 0 127 chr2 92957400 92960700 0 418 chr2 92962800 92978400 0 197 chr2 92979600 92986500 0 145 chr2 92988600 92999700 0 312 chr2 93001500 93004500 0 312 chr2 93007200 93012900 0 312 chr2 93014100 93014400 0 312 chr2 93015900 93019200 0 234 chr2 93021300 93029100 0 234 chr2 93030900 93039300 0 136 chr2 93040800 93041400 0 294 chr2 93042600 93060900 0 294 chr2 93062700 93067500 0 274 chr2 93068700 93078300 0 274 chr2 93079800 93081300 0 75 chr2 93082800 93085800 0 77 chr2 93087000 93088500 0 231 chr2 93089700 93091500 0 231 chr2 93093300 93093600 0.1346 38 chr2 93095100 93096000 0 233 chr2 93098100 93101100 0 233 chr2 93103200 93107400 0 233 chr2 93108900 93116700 0 233 chr2 93117900 93120900 0 233 chr2 93122100 93137700 0 138 chr2 93138900 93146100 0 172 chr2 93149100 93150300 0 30 chr2 93152100 93159900 0 258 chr2 93161700 93165600 0 190 chr2 93167100 93172500 0 190 chr2 93174300 93184200 0 171 chr2 93186300 93188400 0 274 chr2 93189900 93192000 0 274 chr2 93193800 93194700 0 148 chr2 93195900 93201000 0 148 chr2 93202500 93203400 0 148 chr2 93205200 93210000 0 245 chr2 93211200 93219300 0 245 chr2 93220500 93222300 0 154 chr2 93223500 93226500 0 154 chr2 93228000 93235200 0 145 chr2 93236700 93244800 0 115 chr2 93246600 93252000 0.0034 126 chr2 93253500 93253800 0.1406 124 chr2 93256800 93263100 0 286 chr2 93264600 93265200 0.0045 91 chr2 93267000 93281400 0 355 chr2 93282900 93284400 0 355 chr2 93286500 93295500 0 121 chr2 93298200 93302100 0 121 chr2 93303900 93305100 0 181 chr2 93306300 93308100 0 181 chr2 93309600 93314100 0 181 chr2 93315300 93315900 0 66 chr2 93317700 93320100 0 72 chr2 93321600 93323400 0 72 chr2 93324900 93325200 0 72 chr2 93327300 93330600 0 73 chr2 93334200 93337500 0 79 chr2 93339000 93339600 0 79 chr2 93341400 93343200 0.0015 226 chr2 93345900 93351000 0 193 chr2 93352500 93367500 0 142 chr2 93368700 93371100 0 141 chr2 93373500 93373800 0 141 chr2 93375900 93376200 0 141 chr2 93378000 93388800 0 359 chr2 93390300 93395400 0 359 chr2 93396600 93397200 0.0576 32 chr2 93399000 93404700 0 152 chr2 93408000 93409200 0 194 chr2 93410400 93419400 0 194 chr2 93420900 93426300 0 194 chr2 93427500 93432300 0 130 chr2 93433500 93434400 0 130 chr2 93435600 93442200 0 130 chr2 93444000 93447000 0 156 chr2 93448500 93461100 0 160 chr2 93465600 93466800 0 58 chr2 93468000 93470700 0 59 chr2 93472200 93478500 0 142 chr2 93480600 93485400 0 142 chr2 93486900 93493800 0 142 chr2 93495600 93495900 0 142 chr2 93497100 93503100 0 142 chr2 93504900 93506700 0 124 chr2 93508200 93512700 0 124 chr2 93515100 93523800 0 154 chr2 93525000 93530700 0 154 chr2 93533700 93552900 0 201 chr2 93555000 93555300 0.019 18 chr2 93557100 93561000 0 268 chr2 93562500 93562800 0 166 chr2 93564600 93567300 0 166 chr2 93568500 93572400 0 214 chr2 93575100 93591300 0 251 chr2 93592800 93597900 0 114 chr2 93599400 93610800 0 277 chr2 93612000 93612900 0 277 chr2 93614700 93630300 0 277 chr2 93632100 93635100 0 82 chr2 93636900 93641400 0 82 chr2 93643200 93646200 0 67 chr2 93648600 93657900 0 67 chr2 93659400 93662700 0 77 chr2 93663900 93666900 0 150 chr2 93668100 93671700 0 261 chr2 93673200 93679800 0 112 chr2 93681600 93693600 0 209 chr2 93694800 93700200 0 209 chr2 93704100 93706500 0 209 chr2 93707700 93708300 0 209 chr2 93710400 93712800 0 150 chr2 93714000 93719100 0 150 chr2 93721200 93723900 0 150 chr2 93725100 93730500 0 150 chr2 93732300 93733800 0 122 chr2 93735000 93737400 0 122 chr2 93738900 93740700 0 219 chr2 93741900 93743100 0 219 chr2 93745200 93746100 0 219 chr2 93747300 93770700 0 219 chr2 93772200 93777000 0 118 chr2 93778500 93783300 0 118 chr2 93784800 93790200 0 118 chr2 93792300 93801000 0 257 chr2 93802500 93805200 0 101 chr2 93806400 93807900 0 69 chr2 93809100 93809700 0 69 chr2 93811200 93817800 0 113 chr2 93819300 93820500 0 113 chr2 93821700 93828300 0 115 chr2 93831000 93831300 0 242 chr2 93832800 93843300 0 242 chr2 93845100 93853200 0 242 chr2 93854400 93859800 0 242 chr2 93861600 93872400 0 309 chr2 93875700 93877800 0 213 chr2 93879000 93884400 0 213 chr2 93885600 93885900 0.0521 156 chr2 93887400 93898500 0 236 chr2 93900600 93901200 0 195 chr2 93902400 93904500 0 195 chr2 93905700 93911700 0 195 chr2 93913800 93916500 0 195 chr2 93918000 93918300 0 277 chr2 93920100 93924900 0 277 chr2 93926100 93932700 0 277 chr2 93933900 93936000 0 277 chr2 93937200 93937500 0 277 chr2 93938700 93942300 0 243 chr2 93943500 93946500 0 243 chr2 93950700 93955500 0 243 chr2 93957000 93960300 0 243 chr2 93961500 93963300 0 243 chr2 93964500 93965100 0 243 chr2 93968400 93973200 0 118 chr2 93975600 93977700 0 164 chr2 93979200 93987300 0 164 chr2 93988500 93993300 0 164 chr2 93994500 93998100 0 116 chr2 93999300 94006800 0 161 chr2 94008600 94014300 0 161 chr2 94015500 94023300 0 174 chr2 94024800 94037700 0 174 chr2 94039500 94043100 0 174 chr2 94044300 94047900 0 215 chr2 94049100 94061700 0 215 chr2 94063800 94071300 0 182 chr2 94073700 94075200 0 182 chr2 94077000 94086300 0 182 chr2 94087500 94088100 0.0436 48 chr2 94090200 94090500 0.0257 21 chr2 94144800 94146300 0.0927 68 chr2 94148400 94149600 0.1114 159 chr2 94154700 94155300 0 360 chr2 94158900 94161300 0.0228 200 chr2 94162800 94164000 0 53 chr2 94171500 94172400 0 77 chr2 94173600 94174500 0 77 chr2 94260300 94260600 0.0562 85 chr2 94641000 94641300 0.1219 43 chr2 94718100 94718400 0.09 84 chr2 94740000 94740300 0.1102 48 chr2 95421300 95424000 0 73 chr2 95428500 95431200 0 84 chr2 95433300 95433600 0.0444 59 chr2 95435100 95480100 0 84 chr2 95487600 95488800 0 72 chr2 95588100 95589000 0 72 chr2 95596800 95641500 0 82 chr2 95643000 95643600 0 82 chr2 95645700 95648400 0 78 chr2 95652600 95655600 0 63 chr2 95774400 95774700 0.0088 67 chr2 95776800 95798100 0 84 chr2 95877300 95877600 0.129 64 chr2 95898900 95901900 0 69 chr2 95903700 95907600 0 70 chr2 95940600 95940900 0.0184 144 chr2 95946300 95946600 0.1212 102 chr2 95963700 95964000 0.0919 63 chr2 95982600 95982900 0.0804 54 chr2 96010800 96011100 0.1217 82 chr2 96026400 96028200 0 80 chr2 96030900 96048000 0 80 chr2 96049800 96050700 0 70 chr2 96055500 96055800 0.0112 63 chr2 96058500 96059400 0.0504 60 chr2 96444300 96444900 0.0214 107 chr2 96462300 96462600 0.1698 101 chr2 96776700 96777000 0.2438 315 chr2 97049700 97050000 0.0101 73 chr2 97051800 97053900 0.0537 67 chr2 97071300 97072800 0 77 chr2 97076100 97076400 0.1823 33 chr2 97094400 97094700 0.0475 67 chr2 97114500 97114800 0.0838 42 chr2 97118700 97120500 0 68 chr2 97156500 97156800 0.0651 92 chr2 97162500 97162800 0.0328 142 chr2 97166400 97166700 0.191 139 chr2 97213200 97213500 0.0452 55 chr2 97221300 97221600 0.0755 116 chr2 97223700 97224000 0.111 65 chr2 97233900 97236900 0 65 chr2 97238100 97248000 0 76 chr2 97249200 97260300 0 130 chr2 97261800 97266300 0 130 chr2 97269600 97278300 0 79 chr2 97279800 97285800 0 79 chr2 97287600 97292100 0 79 chr2 97294500 97310100 0 78 chr2 97311300 97313700 0 78 chr2 97314900 97347300 0 91 chr2 97361100 97393800 0 84 chr2 97395000 97397700 0 84 chr2 97399500 97411500 0 74 chr2 97413000 97413900 0 80 chr2 97416000 97420500 0 75 chr2 97422300 97438500 0 93 chr2 97489500 97493700 0 130 chr2 97494900 97508100 0 130 chr2 97509300 97513800 0 130 chr2 97515000 97521600 0 74 chr2 97522800 97524000 0 74 chr2 97543800 97544100 0.0073 67 chr2 97580700 97581000 0.0561 42 chr2 97583100 97584300 0.026 74 chr2 97588800 97589100 0.1438 51 chr2 97605900 97607700 0 80 chr2 97611600 97611900 0.0072 74 chr2 97614600 97615500 0.0266 77 chr2 98266500 98266800 0.1671 63 chr2 99307500 99307800 0.0596 70 chr2 100089300 100090200 0 69 chr2 100091400 100091700 0.1353 64 chr2 100096800 100097400 0.0012 64 chr2 100100100 100100400 0.0955 94 chr2 101748900 101749200 0.1974 101 chr2 102566400 102572100 0 84 chr2 105054600 105054900 0.2925 22 chr2 105210900 105211200 0 17 chr2 105586500 105587100 0.002 66 chr2 106131300 106136700 0 105 chr2 106401000 106401300 0.1418 65 chr2 106407900 106408200 0.0189 73 chr2 106416300 106417200 0.0017 54 chr2 106419000 106419300 0.1194 61 chr2 106425600 106425900 0.0215 56 chr2 106427700 106428300 0 54 chr2 106430700 106431300 0 62 chr2 106433400 106434900 0.0017 62 chr2 106436700 106437300 0.0017 62 chr2 106438800 106440900 0 72 chr2 106442100 106442400 0.0837 53 chr2 106444200 106444500 0 76 chr2 106445700 106447800 0 76 chr2 106452000 106461300 0 75 chr2 107827500 107827800 0.2394 18 chr2 107829000 107829300 0.0496 31 chr2 107834700 107836200 0 62 chr2 107837400 107840100 0 60 chr2 107841300 107844000 0 73 chr2 107847300 107851800 0 70 chr2 107853000 107853900 0.0667 57 chr2 107855100 107856000 0.1099 65 chr2 107858700 107862300 0 64 chr2 107864400 107866500 0 64 chr2 107868000 107868300 0.0456 50 chr2 107873100 107873400 0.0538 67 chr2 107878800 107879700 0.0042 57 chr2 107887500 107888100 0.1061 54 chr2 107894700 107895000 0.055 48 chr2 107912400 107912700 0.1469 65 chr2 108655500 108657000 0.0085 70 chr2 108660900 108661200 0.0774 60 chr2 108666300 108666600 0.1547 64 chr2 108672300 108672900 0.0078 63 chr2 108762300 108762600 0.025 46 chr2 108801000 108801900 0 86 chr2 109199100 109200000 0.1484 11428 chr2 109308300 109308600 0.0061 82 chr2 109310100 109311300 0.0061 82 chr2 109740900 109742400 0.0543 60 chr2 109744800 109760100 0 87 chr2 109762500 109762800 0.1442 54 chr2 109767900 109772100 0 65 chr2 109773300 109777200 0 65 chr2 109780200 109999500 0 84 chr2 110000700 110003100 0 84 chr2 110004600 110027700 0 84 chr2 110028900 110038200 0 80 chr2 110039400 110043000 0 80 chr2 110044800 110048100 0 88 chr2 110050200 110067600 0 79 chr2 110068800 110074200 0 75 chr2 110075400 110094900 0 81 chr2 110229300 110243400 0 74 chr2 110244600 110259000 0 61 chr2 110260200 110261700 0 61 chr2 110262900 110265600 0 54 chr2 110267700 110268000 0.0274 24 chr2 110269200 110269500 0 75 chr2 110270700 110272800 0 75 chr2 110275200 110291700 0 91 chr2 110293200 110298300 0 91 chr2 110299500 110305800 0 91 chr2 110308800 110313600 0 82 chr2 110314800 110325300 0 82 chr2 110327400 110327700 0.1796 79 chr2 110330100 110332200 0.0133 80 chr2 110334300 110341800 0 85 chr2 110343300 110356200 0 77 chr2 110358600 110360400 0 77 chr2 110362800 110364600 0 74 chr2 110369100 110370600 0 59 chr2 110372100 110386500 0 93 chr2 110388000 110389500 0 75 chr2 110391300 110424300 0 80 chr2 110425800 110590500 0 102 chr2 110592000 110592300 0.0986 66 chr2 110594400 110600700 0 74 chr2 110602500 110603700 0.0078 60 chr2 110606400 110606700 0.037 105 chr2 110608500 110609400 0.037 105 chr2 110611800 110622300 0 82 chr2 110625000 110626800 0 82 chr2 110630400 110630700 0.0178 74 chr2 110696100 110696400 0.0464 65 chr2 110698500 110699400 0 74 chr2 111223800 111224100 0.1603 31 chr2 111259800 111260100 0.0426 66 chr2 111263400 111264000 0.0183 68 chr2 111268500 111269100 0.0126 63 chr2 111272400 111272700 0.056 69 chr2 111274200 111274500 0.056 69 chr2 111279600 111279900 0 70 chr2 111281400 111283200 0 70 chr2 111285600 111285900 0.0449 56 chr2 111287400 111287700 0.0449 56 chr2 111296700 111297000 0.0748 58 chr2 111300000 111300300 0.0379 51 chr2 111301800 111302100 0.061 65 chr2 111314700 111315000 0.015 31 chr2 111316800 111317100 0.0947 68 chr2 111321900 111322200 0.022 65 chr2 111324900 111325800 0 81 chr2 111327600 111332100 0 78 chr2 111335400 111339300 0 81 chr2 111341700 111342000 0.0269 74 chr2 111343500 111344700 0.0151 66 chr2 111347700 111350100 0.0004 83 chr2 111352800 111354900 0.0024 69 chr2 111362400 111362700 0.1935 56 chr2 111368100 111369000 0 78 chr2 111378300 111378600 0.0725 73 chr2 111379800 111380400 0.0798 56 chr2 111384900 111386400 0.0132 62 chr2 111390000 111391500 0.0374 51 chr2 111393300 111394200 0 72 chr2 111402600 111402900 0.0459 57 chr2 111404100 111405300 0.0505 49 chr2 111407400 111408600 0.0129 68 chr2 111423900 111424200 0.0003 62 chr2 111431400 111431700 0.0873 74 chr2 111435000 111436500 0.0205 56 chr2 111438900 111439200 0.1885 55 chr2 111443400 111447300 0 69 chr2 111448800 111449100 0 69 chr2 111451200 111451500 0.0166 40 chr2 111453600 111454200 0 81 chr2 111477000 111477300 0.05 74 chr2 111499800 111502500 0.0859 54 chr2 111516900 111517200 0.0886 58 chr2 111531900 111532200 0.1083 61 chr2 111540300 111540600 0.0013 53 chr2 111542100 111542400 0.1221 61 chr2 111545400 111545700 0.0854 47 chr2 111549000 111550200 0.0093 74 chr2 111551700 111552900 0.0358 69 chr2 111558000 111558600 0.0309 55 chr2 111562800 111563400 0.0109 60 chr2 111576600 111577200 0.0327 46 chr2 111578700 111579300 0.0943 52 chr2 111580800 111581100 0.053 65 chr2 111583500 111584400 0 76 chr2 111588000 111588300 0.1267 63 chr2 111591300 111591600 0.0863 100 chr2 111593700 111596400 0 79 chr2 111599400 111599700 0.2066 62 chr2 111600900 111601200 0.0345 44 chr2 111723900 111724200 0.1029 55 chr2 111726300 111726600 0.0147 66 chr2 111731700 111732000 0.0893 57 chr2 111748200 111749400 0.0425 67 chr2 111756000 111756600 0.1193 52 chr2 111758100 111758400 0.1066 71 chr2 111762900 111764100 0.0457 64 chr2 111774300 111774900 0.0213 62 chr2 111776700 111777000 0.0371 52 chr2 111780000 111780300 0.1355 58 chr2 111784800 111785100 0.1051 57 chr2 111793800 111794100 0.0811 55 chr2 111802500 111803700 0.0586 71 chr2 111804900 111807300 0.0221 65 chr2 111814200 111815700 0.0027 80 chr2 111816900 111817200 0.0027 80 chr2 111819300 111819600 0.1023 74 chr2 111861600 111861900 0.1864 53 chr2 112113900 112115100 0.0007 51 chr2 112362000 112363200 0.1002 70 chr2 112365900 112369800 0 84 chr2 112371300 112374000 0 84 chr2 112375200 112375800 0 63 chr2 112377900 112379100 0 63 chr2 112380900 112389000 0 75 chr2 112392000 112409400 0 70 chr2 112411500 112413000 0 69 chr2 112414500 112414800 0 69 chr2 112416600 112423500 0 69 chr2 112503900 112509000 0 98 chr2 112776600 112776900 0.0398 12 chr2 113395500 113395800 0.0557 65 chr2 113416500 113416800 0.0274 74 chr2 113426700 113427000 0.0852 61 chr2 113451300 113451600 0.1724 78 chr2 113458500 113458800 0.0533 62 chr2 113464200 113464500 0.1855 53 chr2 113467200 113467500 0.0944 66 chr2 113480700 113481000 0.2278 60 chr2 113482500 113482800 0.0461 59 chr2 113484000 113484300 0.2447 69 chr2 113486100 113486400 0.0679 47 chr2 113490900 113492700 0.0078 94 chr2 113494200 113495700 0.0078 94 chr2 113509500 113509800 0.1192 89 chr2 113519400 113519700 0.1367 88 chr2 113525700 113526000 0.1592 70 chr2 113531700 113532000 0.1044 105 chr2 113534700 113535000 0.0208 98 chr2 113537400 113538600 0.0414 116 chr2 113547000 113549100 0 104 chr2 113564100 113564400 0.0924 70 chr2 113580600 113580900 0.0638 119 chr2 113582100 113582400 0.0662 141 chr2 113590500 113590800 0.1161 109 chr2 113611500 113613000 0.0137 57 chr2 113614800 113615100 0.2107 83 chr2 113617500 113617800 0.2107 83 chr2 113623800 113624100 0.1635 41 chr2 113643900 113645700 0.0203 64 chr2 113651100 113653500 0.0792 82 chr2 114084600 114085200 0.0999 69 chr2 114748500 114748800 0.1687 40 chr2 115008000 115009200 0.0474 87 chr2 115487400 115488600 0.0461 77 chr2 116053200 116053500 0.1467 83 chr2 117460500 117461100 0.0309 111 chr2 117624900 117625200 0.23 91 chr2 117649800 117650400 0 29 chr2 117750300 117751800 0.1202 91 chr2 118139100 118140000 0.0483 93 chr2 118141500 118141800 0.1289 71 chr2 118302900 118305000 0 65 chr2 118486800 118487100 0.0128 78 chr2 118867500 118868100 0 99 chr2 118896000 118900800 0 93 chr2 122014800 122015400 0.0395 72 chr2 122017200 122017500 0.1687 95 chr2 122050800 122051100 0.1184 76 chr2 122265600 122265900 0.118 85 chr2 122346900 122348400 0.1417 68 chr2 122783100 122783400 0.1352 79 chr2 123684600 123685200 0.1922 72 chr2 124140900 124141800 0 115 chr2 124143000 124145700 0 115 chr2 124359600 124360200 0.063 86 chr2 124409100 124409400 0.1424 69 chr2 124411500 124413000 0.023 80 chr2 124593300 124594200 0.0295 56 chr2 124595400 124596900 0.0062 86 chr2 124598100 124598400 0.0062 86 chr2 125417400 125418000 0.0916 76 chr2 126178200 126183000 0 111 chr2 127119000 127119600 0.0369 88 chr2 127787700 127789500 0.0503 85 chr2 128340600 128341200 0.1742 38 chr2 128418000 128418300 0.1456 80 chr2 128859600 128862900 0 93 chr2 128864400 128864700 0 93 chr2 128964900 128965200 0.1787 48 chr2 129411300 129417000 0 94 chr2 129682500 129686700 0 110 chr2 130041600 130042500 0 57 chr2 130064100 130064400 0.1367 66 chr2 130066800 130067400 0.0168 70 chr2 130078500 130085100 0 79 chr2 130086600 130094700 0 79 chr2 130095900 130100700 0 79 chr2 130106400 130106700 0.0399 49 chr2 130121400 130121700 0.0926 60 chr2 130122900 130124100 0.199 63 chr2 130223100 130223400 0.0253 61 chr2 130405500 130407600 0 80 chr2 130412400 130413900 0.1117 61 chr2 130416000 130416300 0.0031 65 chr2 130417500 130417800 0.0031 65 chr2 130419900 130420200 0.0031 65 chr2 130426800 130427100 0.1881 54 chr2 130430400 130431900 0 68 chr2 130433400 130438500 0 68 chr2 130441200 130446000 0 87 chr2 130448100 130448400 0 87 chr2 130458900 130459800 0 88 chr2 130462800 130463400 0 95 chr2 130465500 130468200 0 95 chr2 130469700 130476900 0 66 chr2 130478100 130478400 0.0237 56 chr2 130480800 130482300 0 53 chr2 130485300 130492200 0 66 chr2 130494300 130495800 0 66 chr2 130497000 130500000 0 66 chr2 130501200 130504200 0 66 chr2 130505400 130506300 0 88 chr2 130507500 130540200 0 88 chr2 130541400 130559700 0 88 chr2 130560900 130574100 0 83 chr2 130575300 130580100 0 83 chr2 130581900 130582800 0 83 chr2 130585200 130585500 0 83 chr2 130587000 130588800 0 77 chr2 130590000 130593900 0 77 chr2 130596000 130601400 0 91 chr2 130602900 130609500 0 91 chr2 130612800 130613100 0 67 chr2 130614900 130617600 0 67 chr2 130619400 130619700 0.0133 63 chr2 130620900 130623600 0.0021 72 chr2 130628400 130628700 0.1095 75 chr2 130629900 130630500 0.0042 43 chr2 130633200 130635900 0.0128 80 chr2 130642200 130642500 0.0641 58 chr2 130643700 130645500 0 73 chr2 130648800 130649100 0.1201 64 chr2 130650600 130651200 0.0958 57 chr2 130652400 130654200 0.0285 84 chr2 130657800 130658700 0.1026 77 chr2 130659900 130661700 0 80 chr2 130673100 130673400 0.0645 62 chr2 130675500 130680300 0 98 chr2 130682100 130687500 0 80 chr2 130689600 130691400 0 64 chr2 130694400 130694700 0.1734 60 chr2 130701300 130701600 0.0022 55 chr2 130703700 130705500 0.0098 69 chr2 130707600 130709700 0.1084 69 chr2 130714500 130716000 0 71 chr2 130857300 130863900 0 52 chr2 131226300 131226600 0.1358 54 chr2 131234400 131235000 0.0964 51 chr2 131238300 131239500 0 86 chr2 131240700 131247900 0 86 chr2 131249100 131252400 0 66 chr2 131254200 131259300 0 83 chr2 131261700 131262000 0.1046 60 chr2 131264400 131264700 0.0615 99 chr2 131268000 131268300 0.0185 69 chr2 131272800 131275800 0 103 chr2 131288700 131289000 0.1347 66 chr2 131294400 131295300 0.0104 69 chr2 131450700 131451300 0.1153 68 chr2 131694600 131694900 0.1176 89 chr2 131766300 131767500 0 67 chr2 131793900 131796000 0 89 chr2 131814600 131816400 0.0742 83 chr2 132393900 132394500 0.1478 252 chr2 133300800 133302600 0.0149 98 chr2 133551300 133551900 0.1137 109 chr2 133911600 133912200 0.0173 73 chr2 133914000 133915500 0.0105 121 chr2 134209200 134212500 0 114 chr2 134607300 134608500 0.082 57 chr2 134652300 134655000 0.0203 97 chr2 137397900 137398200 0.1863 61 chr2 138246900 138247200 0.0298 45 chr2 138251400 138251700 0.0823 48 chr2 139878600 139880400 0.0723 70 chr2 141965100 141965400 0.0134 120 chr2 142677000 142677300 0.2995 25 chr2 143008200 143011800 0.0501 111 chr2 143662500 143662800 0.0579 45 chr2 143665200 143665800 0.0634 79 chr2 143861100 143866800 0 137 chr2 144899100 144899700 0.0436 79 chr2 146408400 146409300 0.0565 88 chr2 146410500 146410800 0.0565 88 chr2 147155100 147155400 0.1288 98 chr2 147732300 147732600 0.0592 81 chr2 147745200 147745500 0.0749 66 chr2 148149300 148149600 0.1017 98 chr2 148153800 148154100 0.0902 52 chr2 148189500 148194600 0 88 chr2 149946900 149951100 0 111 chr2 151579500 151591200 0 90 chr2 151592400 151608900 0 91 chr2 151699200 151700700 0.0313 104 chr2 151703400 151704300 0.0003 117 chr2 153007800 153013200 0 115 chr2 153222300 153222600 0.1363 541 chr2 153538500 153539100 0.021 132 chr2 153865800 153866100 0.0073 101 chr2 154989000 154989300 0.0803 81 chr2 155444100 155444700 0.0037 76 chr2 155445900 155446500 0.0037 76 chr2 155500800 155501100 0.0656 140 chr2 156369600 156369900 0.0384 64 chr2 157370100 157373400 0.0162 112 chr2 157378800 157379700 0.0191 68 chr2 157520400 157521000 0.0215 61 chr2 157547100 157547400 0.0742 62 chr2 157567500 157572000 0 102 chr2 158524500 158528100 0.0005 81 chr2 158851800 158852100 0.1111 62 chr2 158872800 158873400 0.0473 71 chr2 159292800 159294900 0 91 chr2 159663900 159665700 0.0064 109 chr2 159991800 159992100 0.0939 69 chr2 160758300 160759500 0.0017 91 chr2 160770300 160771500 0 75 chr2 160800900 160801200 0.1221 93 chr2 160851300 160851600 0.0833 27 chr2 160853700 160854000 0.0099 80 chr2 161540400 161540700 0.0459 67 chr2 164121000 164123400 0.0018 127 chr2 164262300 164263500 0.0847 92 chr2 165486300 165489900 0.0102 120 chr2 165491100 165491700 0.0102 120 chr2 165731700 165732300 0.0027 137 chr2 165733500 165736800 0.0027 137 chr2 166099500 166101000 0.0198 147 chr2 166988700 166994400 0 114 chr2 167216100 167216700 0.0077 92 chr2 167466600 167466900 0.1813 941 chr2 168039300 168039600 0.0894 24 chr2 169248900 169254300 0 111 chr2 169785000 169785600 0 63 chr2 169787100 169787400 0 63 chr2 171866100 171866400 0.1162 78 chr2 172316400 172320900 0 129 chr2 173699700 173702700 0.0027 103 chr2 174269700 174273900 0.0293 90 chr2 174405000 174405600 0.0402 86 chr2 174407100 174409200 0.0422 83 chr2 174720300 174720600 0.2718 42 chr2 175482300 175487700 0 90 chr2 175589700 175591200 0.0225 102 chr2 175592700 175593000 0.1403 84 chr2 175692900 175693200 0.1359 81 chr2 175760100 175764900 0 66 chr2 175813200 175814100 0.0106 46 chr2 175962900 175963200 0.1763 86 chr2 177946200 177947100 0.195 63 chr2 177973200 177978900 0 137 chr2 178654800 178657200 0 74 chr2 178659000 178662300 0 74 chr2 179061900 179062200 0.1091 79 chr2 179735400 179735700 0.1422 71 chr2 180834000 180838500 0 114 chr2 182025900 182027100 0.0544 96 chr2 182029500 182030100 0.0544 96 chr2 182175600 182175900 0.043 82 chr2 182214900 182215200 0 114 chr2 182216400 182217000 0 114 chr2 182430300 182430600 0.0327 82 chr2 184947300 184950600 0 131 chr2 185420400 185421000 0.0157 91 chr2 185422800 185424600 0.0157 91 chr2 185844000 185844300 0.0601 31 chr2 185846400 185846700 0.0734 54 chr2 185869800 185870100 0.1791 88 chr2 186922800 186923100 0.0959 69 chr2 186953100 186953700 0.0979 91 chr2 187235100 187235400 0.1259 66 chr2 188124300 188127900 0.0186 98 chr2 188825400 188825700 0.0398 97 chr2 189027300 189030000 0.0292 114 chr2 192268800 192272100 0 85 chr2 193213800 193218300 0.0032 153 chr2 193706700 193707000 0.049 56 chr2 193914000 193914300 0 16 chr2 194447700 194448000 0.0585 57 chr2 195068700 195069000 0.0493 74 chr2 195528000 195528300 0.0873 99 chr2 195567300 195567900 0.1823 87 chr2 196524300 196524600 0.1823 65 chr2 196525800 196526400 0.1644 65 chr2 196906200 196911600 0 103 chr2 197067600 197067900 0.1037 111 chr2 197635800 197636700 0.1055 91 chr2 197638200 197640000 0.1234 84 chr2 197688000 197689800 0.0054 97 chr2 197691300 197692200 0.0664 77 chr2 198583800 198585600 0.0562 111 chr2 200822400 200822700 0.0142 54 chr2 201282000 201282600 0.1115 70 chr2 201283800 201284100 0.0566 50 chr2 204583200 204583500 0.0772 55 chr2 204767100 204770400 0 96 chr2 204993000 204994500 0.0248 76 chr2 204995700 204996300 0.0248 76 chr2 205044300 205044600 0.1335 120 chr2 206374800 206375400 0 25 chr2 206400300 206400600 0.2003 26 chr2 206910000 206910300 0.099 73 chr2 206911800 206913000 0.0161 114 chr2 207005700 207006000 0.0248 94 chr2 207609900 207612000 0 99 chr2 208094400 208094700 0.0373 31 chr2 208196400 208196700 0.2053 35 chr2 209130000 209130300 0.0007 66 chr2 209132700 209133000 0.1417 69 chr2 209164500 209164800 0.05 77 chr2 209332500 209332800 0.0235 99 chr2 211220700 211221000 0.0589 110 chr2 211223400 211224300 0.1528 72 chr2 211890000 211892400 0.0212 76 chr2 212702100 212702400 0.1545 65 chr2 213345300 213345600 0.1878 61 chr2 213567600 213572400 0 103 chr2 213783600 213783900 0.016 53 chr2 214686000 214689300 0.0111 101 chr2 216226500 216227700 0 45 chr2 217311300 217311600 0.1284 80 chr2 219932400 219937500 0 113 chr2 221985900 221986200 0.0404 76 chr2 221989800 221990100 0.0773 75 chr2 222148200 222148500 0.0589 76 chr2 222149700 222155100 0.0165 100 chr2 222816600 222817200 0.1754 38 chr2 222895500 222897600 0 65 chr2 225322500 225322800 0.1028 68 chr2 226470300 226470600 0 19 chr2 226574400 226575000 0.0078 92 chr2 228756900 228758400 0 98 chr2 228760200 228760500 0 98 chr2 229184400 229184700 0.169 34 chr2 230338200 230338500 0.0889 76 chr2 230460600 230460900 0 31 chr2 231823200 231824700 0 89 chr2 231828300 231828900 0 66 chr2 231838200 231838500 0.0178 19 chr2 231843600 231845100 0.0148 124 chr2 232149600 232154700 0 94 chr2 232177500 232181100 0 98 chr2 232360500 232360800 0.1151 131 chr2 233567400 233568000 0.1087 20 chr2 233578500 233579100 0.1051 66 chr2 233723700 233724000 0.0921 71 chr2 234645900 234649500 0 44 chr2 235043400 235043700 0.0714 66 chr2 236385300 236385900 0.0089 117 chr2 237187800 237188400 0.1643 87 chr2 238296000 238296600 0.0098 87 chr2 238417800 238418100 0.2669 38 chr2 238718400 238718700 0.0225 75 chr2 238880400 238880700 0.0434 33 chr2 239069100 239069400 0.1973 26 chr2 239527500 239527800 0.0013 60 chr2 239644500 239645100 0.0069 310 chr2 240354600 240354900 0.0168 18 chr2 240547500 240547800 0.0457 120 chr2 240641400 240641700 0.0572 24 chr2 240675300 240681900 0 77 chr2 240689400 240689700 0 39 chr2 240693900 240699600 0 80 chr2 240907800 240909000 0 54 chr2 240923700 240924000 0.1092 14 chr2 240977100 240979200 0.0352 66 chr2 240980400 240980700 0.0352 66 chr2 241355700 241356000 0.2945 47 chr2 241570500 241570800 0.2685 61 chr2 241760100 241760400 0.2034 79 chr2 241767000 241767300 0 15 chr2 241805400 241805700 0.126 16 chr2 241807500 241807800 0.2089 29 chr2 242007300 242009700 0.0172 56 chr2 242046900 242047500 0.0511 73 chr2 242083200 242083500 0.2756 75 chr2 242132400 242132700 0.0849 40 chr2 242134200 242135100 0.0607 56 chr2 242138400 242139900 0.0252 54 chr2 242142300 242142600 0.0056 66 chr2 242149500 242151900 0 80 chr2 242153100 242157000 0 80 chr2 242159100 242169300 0 75 chr2 242172300 242172600 0.0104 59 chr2 242174100 242181900 0 166 chr20 60300 67200 0.1475 1203 chr20 131100 131400 0.0384 93 chr20 133200 135300 0 81 chr20 1114800 1115100 0.1014 63 chr20 1259400 1259700 0.2048 73 chr20 1301700 1302600 0 149 chr20 1573200 1575600 0.0098 57 chr20 1606200 1607400 0.0055 53 chr20 1742400 1744800 0.0011 77 chr20 2443200 2443500 0.2378 55 chr20 2822700 2823900 0.0083 65 chr20 2825100 2825700 0.0083 65 chr20 3477300 3477600 0.2756 55 chr20 3498900 3499200 0.1616 56 chr20 4033200 4033500 0.0203 31 chr20 4035300 4035600 0.0203 31 chr20 4388700 4389000 0.0464 86 chr20 5380200 5380800 0.1342 56 chr20 6191100 6192000 0.015 47 chr20 6321000 6321300 0.0535 98 chr20 7116300 7122000 0 81 chr20 8112000 8112600 0.0432 76 chr20 8596200 8600400 0 86 chr20 9859500 9861300 0 75 chr20 11633400 11636400 0 72 chr20 11637600 11638500 0 62 chr20 12123900 12124200 0.2179 80 chr20 12635400 12635700 0.1229 62 chr20 12801300 12807000 0 74 chr20 16226700 16228200 0.0111 47 chr20 16260000 16260300 0.228 61 chr20 16549800 16550100 0.1687 63 chr20 17122800 17123100 0.0173 20 chr20 18602400 18605700 0 86 chr20 18950100 18954300 0.0032 87 chr20 19089000 19089300 0.0176 72 chr20 19419900 19421400 0.0159 68 chr20 19755300 19755600 0.0534 47 chr20 21747300 21747600 0.0899 87 chr20 21893100 21893400 0.0414 91 chr20 21911100 21911400 0.0503 98 chr20 23262900 23263200 0.0284 44 chr20 23426400 23431800 0 107 chr20 23591100 23595000 0 106 chr20 25332900 25333200 0 26 chr20 25765500 25766700 0 139 chr20 25767900 25771800 0 139 chr20 25778400 25778700 0.1196 52 chr20 25779900 25845000 0 98 chr20 25846500 25846800 0.0763 77 chr20 26010900 26076000 0 101 chr20 26084700 26091000 0 131 chr20 26310600 26310900 0 70 chr20 26313900 26314500 0.0244 77 chr20 26366700 26367000 0.0993 41 chr20 26437500 26442600 0 282 chr20 26443800 26459400 0 747 chr20 26460600 26476200 0 929 chr20 26477700 26480700 0 537 chr20 26482800 26511000 0 623 chr20 26512800 26513700 0 623 chr20 26516100 26533200 0 516 chr20 26535000 26544000 0 982 chr20 26546100 26547900 0 317 chr20 26549100 26556300 0 317 chr20 26557800 26562300 0 381 chr20 26564100 26577000 0 449 chr20 26578800 26584500 0 449 chr20 26585700 26589600 0 449 chr20 26600400 26601900 0 402 chr20 26603100 26608200 0 402 chr20 26609700 26611200 0 402 chr20 26613000 27294600 0 685 chr20 27295800 27964200 0 930 chr20 27965400 28044300 0 442 chr20 28045800 28196100 0 483 chr20 28197600 28336200 0 2005 chr20 28337400 28415700 0 401 chr20 28417200 28497000 0 365 chr20 28507200 28535700 0 481 chr20 28537200 28557000 0 481 chr20 28604700 28605000 0.062 75 chr20 28635900 28636200 0.0164 37 chr20 28644000 28646100 0 311 chr20 28648500 28694400 0 95 chr20 28696200 28716900 0 84 chr20 28719600 28728900 0 100 chr20 28777200 28778400 0.1606 84 chr20 28842600 28843500 0 224 chr20 28897500 28899000 0.1563 1809 chr20 28960500 29013600 0 63 chr20 29071200 29071800 0.04 158 chr20 29080800 29081100 0.0396 202 chr20 29130600 29131500 0 11 chr20 29133900 29134500 0 13 chr20 29136000 29137500 0 43 chr20 29139300 29139600 0.0744 10 chr20 29143500 29143800 0 32 chr20 29145000 29145600 0 44 chr20 29148600 29150400 0.0473 27 chr20 29153100 29155200 0 31 chr20 29157600 29158800 0 33 chr20 29161200 29161500 0.2563 18 chr20 29163300 29167500 0 39 chr20 29173800 29174100 0.1824 15 chr20 29175300 29178300 0 41 chr20 29184900 29185200 0 20 chr20 29189100 29190300 0 41 chr20 29192400 29192700 0.2395 25 chr20 29195400 29196900 0 20 chr20 29198400 29199900 0.211 79 chr20 29201400 29202600 0 24 chr20 29494500 29494800 0.1119 168 chr20 29505900 29506200 0.0315 126 chr20 29584800 29585700 0.011 50 chr20 29884800 29885400 0.0318 165 chr20 29910300 29910600 0 24 chr20 29913900 29914500 0 103 chr20 29915700 29920800 0 103 chr20 29922300 29923800 0 121 chr20 29925000 29929200 0 121 chr20 29930700 29933700 0 114 chr20 29937000 29941200 0 94 chr20 29947200 29948100 0 88 chr20 29949900 29950200 0.0252 32 chr20 29951700 29952000 0.0626 28 chr20 29953500 29954400 0 85 chr20 29957400 29958000 0 61 chr20 29960100 29960700 0 50 chr20 29962500 29964300 0 75 chr20 29966700 29967600 0 25 chr20 29968800 29969100 0.0246 41 chr20 29971200 29972100 0 37 chr20 29973600 29974200 0.1296 36 chr20 29976600 29976900 0.0316 11 chr20 29979900 29981400 0 52 chr20 29982600 29983500 0 117 chr20 29985300 29986500 0 75 chr20 29988000 29990400 0 75 chr20 29991600 29998500 0 75 chr20 29999700 30001500 0 75 chr20 30003900 30004200 0 75 chr20 30005400 30006900 0 43 chr20 30008100 30012900 0 43 chr20 30014100 30015600 0 58 chr20 30021600 30022200 0 22 chr20 30023700 30024000 0.1927 17 chr20 30027900 30029400 0 61 chr20 30030900 30033000 0 61 chr20 30034500 30034800 0.0864 27 chr20 30037200 30037500 0.0304 29 chr20 30088500 30098400 0 73 chr20 30102000 30108600 0 66 chr20 30109800 30125100 0 111 chr20 30127200 30127800 0.0044 50 chr20 30129300 30129900 0 15 chr20 30131100 30136800 0 68 chr20 30238200 30238800 0.0117 60 chr20 30271200 30271800 0.0126 55 chr20 30395100 30395400 0.2229 105 chr20 31051500 31054800 0.0691 8016 chr20 31056000 31057500 0.1476 3117 chr20 31059600 31060200 0.2268 4318 chr20 31062900 31064100 0.1896 7420 chr20 31066200 31066800 0.2708 1225 chr20 31069200 31069800 0.2123 4027 chr20 31071600 31071900 0.2722 3565 chr20 31073100 31073700 0.204 3877 chr20 31076100 31076400 0.0077 225 chr20 31078500 31082100 0.0077 225 chr20 31083300 31084200 0.0647 437 chr20 31085700 31086600 0.1276 204 chr20 31088400 31090200 0.0566 568 chr20 31091700 31093200 0.1018 173 chr20 31095900 31096200 0.1816 220 chr20 31098000 31107000 0 5573 chr20 31157100 31159200 0.1848 4493 chr20 31164000 31168500 0.1794 2365 chr20 31171500 31171800 0.2266 456 chr20 31174800 31175100 0.2655 327 chr20 31176600 31176900 0.2172 431 chr20 31184700 31187400 0.1673 5715 chr20 31189200 31189500 0.2292 2258 chr20 31194900 31212900 0 1534 chr20 31214100 31220700 0 1534 chr20 31222500 31226400 0.0137 378 chr20 31229700 31230900 0.1276 771 chr20 31235100 31235400 0.2136 401 chr20 31237200 31237500 0.2671 373 chr20 31239300 31239600 0.2954 258 chr20 31241400 31242000 0.1216 23471 chr20 31244100 31245300 0.25 395 chr20 32175300 32177400 0.0556 122 chr20 32723400 32724900 0 70 chr20 33456000 33456300 0.0085 24 chr20 34223700 34224000 0.0376 76 chr20 34228200 34231200 0 78 chr20 36981000 36981300 0.0163 28 chr20 39368700 39370500 0.012 82 chr20 39740700 39741000 0.0434 50 chr20 39978600 39978900 0.0459 49 chr20 40624800 40625100 0.0045 50 chr20 41971200 41971800 0.0099 83 chr20 42207300 42207900 0.1111 63 chr20 43175700 43176000 0.0797 52 chr20 43396200 43397100 0 40 chr20 43815300 43818900 0.0476 93 chr20 47829600 47833200 0 68 chr20 47834700 47835300 0 67 chr20 47894100 47894400 0.0127 60 chr20 47898300 47901900 0 74 chr20 48494700 48495000 0.0547 84 chr20 48510600 48511500 0.1647 29 chr20 48513900 48514500 0.0857 41 chr20 48870900 48871200 0.0116 26 chr20 53163300 53163600 0.255 123 chr20 53456700 53457600 0.0368 83 chr20 53474400 53474700 0.0539 81 chr20 53476800 53477400 0.0044 77 chr20 54249900 54250200 0 64 chr20 54819000 54819300 0.1127 234 chr20 55859700 55865400 0 74 chr20 55888200 55888500 0.0614 38 chr20 55945200 55945500 0.0357 19 chr20 56082300 56082600 0.1091 70 chr20 56109000 56109600 0.0599 94 chr20 59133000 59133300 0.2007 84 chr20 60409500 60410100 0 138 chr20 60618000 60618300 0.1357 62 chr20 61283100 61283400 0.2659 30 chr20 61289700 61290300 0.143 87 chr20 61653000 61653300 0.123 32 chr20 61675500 61675800 0.2688 50 chr20 61784100 61784400 0.1949 29 chr20 61943100 61944600 0 45 chr20 61946100 61946400 0.228 13 chr20 62057700 62058900 0.071 77 chr20 63156900 63157200 0.1406 38 chr20 63607500 63608100 0.1235 69 chr20 63669900 63670200 0 53 chr20 63965100 63965400 0.0594 48 chr20 64011900 64012800 0.0031 84 chr20 64087200 64087500 0.0152 62 chr20 64133400 64133700 0.2071 19 chr20 64173900 64176000 0.0083 99 chr20 64270800 64271400 0.014 49 chr20 64289400 64290900 0.0851 89 chr20 64292400 64293000 0 79 chr20 64295100 64302300 0 79 chr20 64304100 64306800 0.0204 87 chr20 64308300 64308600 0.0295 84 chr20 64310700 64312500 0.0542 73 chr20 64326600 64326900 0.0698 43 chr21 5010000 5030400 0 47 chr21 5032200 5033100 0 47 chr21 5034600 5035500 0 45 chr21 5037300 5037900 0 45 chr21 5039400 5051100 0 39 chr21 5052600 5062500 0 44 chr21 5067300 5067600 0.0802 37 chr21 5070300 5070600 0.0852 38 chr21 5072100 5085300 0 43 chr21 5087100 5089800 0 36 chr21 5091000 5095500 0 38 chr21 5100300 5101500 0 35 chr21 5105100 5107800 0 46 chr21 5109900 5110200 0 46 chr21 5113200 5113500 0.0296 25 chr21 5116800 5117100 0.0131 35 chr21 5118600 5119200 0 44 chr21 5120400 5136300 0 44 chr21 5137500 5138400 0 37 chr21 5139600 5140800 0 37 chr21 5142000 5142300 0.0885 30 chr21 5143800 5144700 0 37 chr21 5145900 5148300 0 48 chr21 5151300 5153700 0 44 chr21 5156400 5166300 0 38 chr21 5255700 5256000 0.082 42 chr21 5258700 5260800 0 129 chr21 5262000 5264100 0 129 chr21 5265600 5269500 0 91 chr21 5272200 5272800 0.1046 118 chr21 5275500 5280600 0.0085 115 chr21 5282100 5283000 0.005 100 chr21 5284200 5284800 0.005 100 chr21 5286300 5286900 0.005 100 chr21 5288100 5289000 0 96 chr21 5298600 5298900 0.0149 92 chr21 5300700 5301000 0.0482 94 chr21 5303400 5307600 0.0043 143 chr21 5310000 5311200 0.1259 140 chr21 5314200 5314500 0.0018 152 chr21 5317800 5318100 0.0911 197 chr21 5321400 5322300 0.0422 124 chr21 5323500 5324100 0.0065 184 chr21 5325300 5325900 0.1258 165 chr21 5327100 5330400 0.0253 690 chr21 5332200 5334300 0.0222 79 chr21 5337300 5340900 0 118 chr21 5342400 5343000 0.0844 80 chr21 5345100 5345700 0 75 chr21 5346900 5348400 0 75 chr21 5351400 5351700 0.0095 101 chr21 5354100 5354400 0.0095 101 chr21 5356800 5357400 0.0025 312 chr21 5360400 5363400 0.0019 170 chr21 5364900 5366700 0 91 chr21 5368500 5369400 0 91 chr21 5370900 5371200 0 91 chr21 5378100 5378700 0.0132 172 chr21 5379900 5380200 0.0132 172 chr21 5381700 5382000 0.0664 101 chr21 5383500 5387400 0.0466 233 chr21 5393100 5393400 0.1974 49 chr21 5443500 5448900 0 72 chr21 5499000 5506800 0 51 chr21 5508000 5627700 0 79 chr21 5677500 5796000 0 93 chr21 5846100 5916600 0 84 chr21 5966700 5985300 0 42 chr21 5988000 6093300 0 53 chr21 6094500 6097500 0 45 chr21 6100500 6102300 0 28 chr21 6103500 6106500 0 45 chr21 6107700 6124200 0 45 chr21 6126000 6154800 0 47 chr21 6156300 6157200 0 45 chr21 6158700 6161400 0 45 chr21 6211500 6312600 0 86 chr21 6314100 6374100 0 216 chr21 6431100 6431400 0.1337 26 chr21 6439500 6458400 0 47 chr21 6460500 6478500 0 42 chr21 6480600 6486300 0 39 chr21 6487500 6489000 0 60 chr21 6490500 6557700 0 60 chr21 6558900 6560700 0 60 chr21 6561900 6564600 0 38 chr21 6566400 6580200 0 44 chr21 6630300 6675000 0 122 chr21 6676500 6738900 0 122 chr21 6789600 6822600 0 45 chr21 6823800 6846000 0 45 chr21 6847200 6891900 0 45 chr21 6893100 6896700 0 45 chr21 6897900 6899400 0 49 chr21 6900600 6900900 0 49 chr21 6902100 6915600 0 49 chr21 6917400 6927000 0 53 chr21 6930000 6932400 0 35 chr21 6933600 6934200 0 24 chr21 6984300 7149600 0 89 chr21 7200300 7202400 0 146 chr21 7203600 7204200 0 146 chr21 7205700 7226400 0 146 chr21 7227600 7228500 0 146 chr21 7242300 7242600 0.1695 102 chr21 7244100 7244400 0.0614 152 chr21 7250700 7252500 0.0039 216 chr21 7253700 7254600 0.0039 216 chr21 7257300 7257600 0.029 432 chr21 7261200 7262400 0.1625 1418 chr21 7263900 7264200 0.0542 85 chr21 7265400 7266000 0.0542 85 chr21 7269000 7269600 0.0009 99 chr21 7270800 7271400 0 88 chr21 7277100 7277700 0.0015 109 chr21 7279500 7279800 0.0015 109 chr21 7285800 7286100 0.113 98 chr21 7288200 7289100 0.0003 315 chr21 7294200 7297200 0.0202 164 chr21 7299000 7300500 0.0043 75 chr21 7302600 7303200 0.0043 75 chr21 7305600 7305900 0.1168 109 chr21 7308600 7309200 0.0389 192 chr21 7313700 7316700 0.0077 151 chr21 7377900 7383900 0 44 chr21 7385100 7500900 0 79 chr21 7551000 7693800 0 91 chr21 7743900 7818600 0 51 chr21 7820700 7822500 0 47 chr21 7824600 7865700 0 47 chr21 7927200 7927500 0.2991 1033 chr21 7938300 7938600 0.2479 2314 chr21 7944300 7944600 0.2277 1733 chr21 7970700 7971600 0.0106 318 chr21 7974300 7974600 0.0977 351 chr21 7978500 7992000 0 284 chr21 7994400 8010600 0 284 chr21 8012100 8012700 0 284 chr21 8013900 8014800 0.0027 144 chr21 8016900 8019300 0.0289 215 chr21 8024700 8031000 0 236 chr21 8032800 8033100 0 236 chr21 8034600 8035500 0 236 chr21 8042700 8044800 0 210 chr21 8046300 8047200 0 123 chr21 8100000 8261100 0 5868 chr21 8310900 8472300 0 5169 chr21 8523000 8524500 0.0223 49 chr21 8525700 8526600 0.0223 49 chr21 8533800 8538600 0 77 chr21 8539800 8544600 0 66 chr21 8546400 8548500 0.0071 60 chr21 8550300 8553600 0 60 chr21 8555100 8559300 0 98 chr21 8560500 8562000 0 98 chr21 8563500 8563800 0 98 chr21 8565000 8570700 0 98 chr21 8571900 8577300 0 57 chr21 8578500 8581800 0 75 chr21 8583000 8583600 0.0008 37 chr21 8586300 8586900 0 43 chr21 8589300 8589900 0.0103 63 chr21 8591700 8594400 0 86 chr21 8596500 8602200 0 60 chr21 8603400 8610300 0 60 chr21 8611500 8613900 0 60 chr21 8616600 8617800 0.0238 38 chr21 8619300 8620800 0 62 chr21 8622600 8624400 0 46 chr21 8625900 8626200 0.0354 34 chr21 8628300 8630400 0 45 chr21 8631600 8632200 0.0052 37 chr21 8634900 8635200 0.0625 25 chr21 8637300 8637900 0 36 chr21 8639400 8645400 0 51 chr21 8646600 8647200 0 51 chr21 8650200 8650800 0.0009 53 chr21 8652900 8653200 0.1866 42 chr21 8656800 8657400 0.0013 39 chr21 8658900 8659800 0 41 chr21 8661000 8661600 0 32 chr21 8666400 8666700 0 51 chr21 8668200 8669100 0 51 chr21 8670300 8681400 0 52 chr21 8691000 8691300 0.0117 70 chr21 8791800 8805600 0 162 chr21 8806800 8808000 0 298 chr21 8809800 8814900 0 298 chr21 8816700 8830800 0 298 chr21 8832300 8832600 0 298 chr21 8840400 8840700 0.259 154 chr21 8845200 8879100 0 117 chr21 8880300 8885700 0 102 chr21 8986500 8988600 0 2094 chr21 9016200 9016800 0.0116 166 chr21 9030900 9031200 0.1509 80 chr21 9042900 9067500 0 116 chr21 9069000 9070500 0 116 chr21 9073500 9073800 0 35 chr21 9076200 9078000 0.0238 45 chr21 9079500 9081900 0 75 chr21 9091500 9091800 0 31 chr21 9093900 9094800 0 50 chr21 9096000 9096300 0 50 chr21 9098700 9103200 0 99 chr21 9106800 9115800 0 95 chr21 9117900 9118500 0.0518 110 chr21 9121800 9128700 0 158 chr21 9129900 9130200 0 158 chr21 9131400 9132300 0.0876 61 chr21 9133500 9151500 0 99 chr21 9153000 9157500 0 132 chr21 9159300 9167700 0 106 chr21 9168900 9174000 0 99 chr21 9175200 9187500 0 99 chr21 9188700 9195900 0 145 chr21 9248700 9283500 0 583 chr21 9285300 9288900 0 583 chr21 9290100 9291900 0 583 chr21 9293700 9297000 0 583 chr21 9299100 9301800 0.0062 197 chr21 9303000 9313200 0 263 chr21 9314400 9349200 0 263 chr21 9350400 9353700 0 263 chr21 9355500 9360000 0 178 chr21 9363300 9365100 0 216 chr21 9366600 9372900 0 188 chr21 9374400 9377100 0 188 chr21 9527400 9528300 0 98 chr21 9529500 9531900 0 98 chr21 9533700 9534600 0 98 chr21 9536700 9538200 0 98 chr21 9541200 9544200 0 107 chr21 9545400 9551700 0 107 chr21 9553200 9562200 0 107 chr21 9564300 9564900 0 109 chr21 9566400 9567900 0.0539 130 chr21 9570000 9570300 0.1352 63 chr21 9573300 9573900 0.0001 111 chr21 9576000 9576300 0.0029 111 chr21 9578400 9581400 0.0005 145 chr21 9584400 9586500 0.0139 123 chr21 9589200 9590400 0 116 chr21 9591600 9592500 0 116 chr21 9594000 9594300 0 116 chr21 9597900 9598500 0.005 66 chr21 9601800 9603300 0 128 chr21 9604800 9606300 0.1697 95 chr21 9609300 9610500 0.046 104 chr21 9612300 9613800 0.012 97 chr21 9615300 9615600 0.0511 68 chr21 9617100 9618000 0.0413 111 chr21 9620700 9622800 0.0186 99 chr21 9624300 9624600 0.0186 79 chr21 9627900 9628200 0.0027 86 chr21 9633000 9633600 0.0535 76 chr21 9635100 9636600 0.0044 90 chr21 9637800 9639300 0.1049 91 chr21 9640500 9642000 0 100 chr21 9645000 9646800 0 92 chr21 9659100 9659700 0 104 chr21 9660900 9662700 0 104 chr21 9664800 9665400 0 104 chr21 9668100 9668400 0 104 chr21 9670200 9671400 0 91 chr21 9672600 9673200 0 91 chr21 9675000 9675300 0.0484 53 chr21 9677400 9677700 0.012 102 chr21 9679500 9683100 0 91 chr21 9684600 9690300 0 119 chr21 9691500 9695400 0 104 chr21 9697200 9697500 0 104 chr21 9701100 9701400 0 113 chr21 9702900 9703500 0 113 chr21 9706500 9706800 0.0279 72 chr21 9709200 9710700 0.0154 78 chr21 9714000 9714600 0 104 chr21 9715800 9716700 0 104 chr21 9718200 9718500 0 104 chr21 9734700 9735000 0.1943 105 chr21 9798000 9798600 0.0522 103 chr21 9800400 9804600 0 97 chr21 9806400 9807000 0.0041 94 chr21 9808800 9809100 0.0685 89 chr21 9813000 9813300 0.19 335 chr21 9816300 9816600 0.1635 379 chr21 9818400 9818700 0.0889 53 chr21 9825000 9835800 0 187 chr21 10031100 10032300 0 103 chr21 10034700 10035000 0.0111 87 chr21 10037100 10038600 0.0111 87 chr21 10040100 10041600 0.0163 73 chr21 10043700 10044300 0.0042 71 chr21 10045800 10046400 0.0112 54 chr21 10049700 10050000 0 80 chr21 10051800 10053600 0.0084 93 chr21 10054800 10055100 0.0153 96 chr21 10057500 10057800 0.0537 90 chr21 10059300 10063200 0 69 chr21 10065300 10067400 0 91 chr21 10068600 10069200 0.0155 78 chr21 10070400 10071600 0.0086 100 chr21 10073400 10074000 0.0086 100 chr21 10075200 10075500 0.0327 80 chr21 10083000 10083300 0.182 103 chr21 10085400 10086000 0 73 chr21 10089900 10090200 0.0325 98 chr21 10092300 10092600 0.0043 83 chr21 10095300 10096200 0 118 chr21 10104300 10104600 0.0013 80 chr21 10109100 10111500 0.0102 107 chr21 10113300 10114500 0.0021 66 chr21 10116300 10116600 0.0016 70 chr21 10118100 10118400 0.0171 93 chr21 10124400 10125000 0.0031 56 chr21 10128000 10140300 0 130 chr21 10143300 10145700 0 116 chr21 10148700 10149000 0 116 chr21 10152000 10156200 0 104 chr21 10158000 10158300 0 104 chr21 10159500 10161600 0 104 chr21 10163700 10169100 0 104 chr21 10269600 10269900 0.1552 75 chr21 10274100 10274400 0.1199 4615 chr21 10324200 10324500 0.275 102 chr21 10364100 10364400 0.0021 167 chr21 10366500 10370700 0 383 chr21 10392600 10392900 0.1636 306 chr21 10479300 10479600 0.0833 148 chr21 10492500 10498200 0.008 62 chr21 10500900 10501500 0 70 chr21 10502700 10504800 0 69 chr21 10507500 10510200 0 61 chr21 10655400 10656600 0.1186 6680 chr21 10658700 10659000 0.2461 1950 chr21 10668900 10669200 0.2317 3467 chr21 10692300 10693200 0.1738 30778 chr21 10705200 10705500 0.1717 2181 chr21 10731900 10732200 0.2272 1201 chr21 13044900 13045200 0.1419 55 chr21 13046700 13047000 0.0221 66 chr21 13048800 13050000 0.0434 41 chr21 13063200 13063800 0.0238 50 chr21 13092300 13092600 0.0615 54 chr21 13138200 13138500 0.0037 57 chr21 13167000 13167300 0.1345 56 chr21 13175100 13175400 0.2975 60 chr21 13179900 13181100 0 62 chr21 13184700 13185900 0 62 chr21 13208700 13209000 0.0904 50 chr21 13586400 13587300 0 18 chr21 13588500 13591500 0 47 chr21 13594200 13594500 0.0088 30 chr21 13596000 13596900 0.2011 38 chr21 13599900 13600200 0.0747 50 chr21 13603200 13603500 0.0607 47 chr21 13606800 13608000 0.001 31 chr21 13610100 13610400 0.0831 37 chr21 13614600 13618500 0 37 chr21 13619700 13623900 0 47 chr21 13625100 13630200 0 32 chr21 13631700 13633200 0 32 chr21 13635300 13636200 0 25 chr21 13638000 13639200 0 36 chr21 13640700 13641300 0.0193 31 chr21 13642800 13643100 0.0202 45 chr21 13646400 13646700 0.0021 34 chr21 13648800 13649100 0.0021 34 chr21 13652400 13652700 0.0807 49 chr21 13657500 13659000 0.0975 32 chr21 13660500 13663500 0 38 chr21 13666800 13668600 0 29 chr21 13669800 13671900 0 34 chr21 13675500 13675800 0.0403 19 chr21 13678800 13685100 0 38 chr21 13686600 13711200 0 37 chr21 13712400 13717500 0 23 chr21 13719000 13732500 0 27 chr21 13733700 13778100 0 50 chr21 13784700 13799100 0 64 chr21 13866600 13866900 0.119 27 chr21 13975500 13975800 0.0027 40 chr21 13984200 13984500 0.0357 52 chr21 13992900 13993200 0.0168 66 chr21 14059800 14060100 0.0877 31 chr21 14068500 14068800 0.1606 38 chr21 14588100 14588400 0.2189 68 chr21 14929800 14930100 0.0127 80 chr21 14931300 14932500 0.0127 80 chr21 15837000 15837300 0.2844 47 chr21 17172600 17172900 0.034 25 chr21 17292000 17292600 0.0045 95 chr21 17305500 17306100 0.0801 51 chr21 17377500 17378700 0.0522 84 chr21 17380200 17380500 0.1912 69 chr21 17718900 17719200 0.1518 71 chr21 19073400 19073700 0.0491 61 chr21 20076900 20077200 0.0996 33 chr21 20200500 20201400 0.1161 66 chr21 24391800 24392100 0.0599 15 chr21 25919400 25920000 0.0674 93 chr21 25922100 25922700 0 58 chr21 25923900 25924200 0.0405 30 chr21 29421600 29422200 0.1107 68 chr21 30840000 30841800 0.0202 95 chr21 31784700 31785000 0.2873 301 chr21 32225400 32226000 0.006 87 chr21 33927000 33927300 0.1607 87 chr21 34374600 34449000 0 45 chr21 34450800 34495500 0 47 chr21 35493900 35495400 0.0053 70 chr21 35498400 35499300 0.0702 94 chr21 36496800 36497400 0.2061 169 chr21 38828700 38829300 0.0202 56 chr21 40023600 40023900 0.0196 15 chr21 40027500 40028100 0 77 chr21 40034100 40034700 0 66 chr21 40038300 40038600 0.0135 32 chr21 40917300 40917600 0.0442 26 chr21 42588000 42590100 0.0432 19 chr21 42957300 42957600 0.1622 1902 chr21 43044300 43045800 0.023 40 chr21 43047600 43065900 0 49 chr21 43068900 43086900 0 49 chr21 43089000 43094100 0 40 chr21 43095900 43116600 0 46 chr21 43117800 43137900 0 46 chr21 43139400 43165200 0 46 chr21 43167300 43168200 0 47 chr21 43170000 43173000 0 50 chr21 43174500 43187400 0 50 chr21 43377600 43379700 0 43 chr21 43381200 43382100 0 43 chr21 43383300 43403400 0 43 chr21 43404600 43410600 0 43 chr21 43412100 43412400 0.1544 28 chr21 43414200 43416900 0.0009 35 chr21 43418100 43438500 0 38 chr21 43440600 43467300 0 46 chr21 43468500 43494600 0 46 chr21 43497600 43505100 0 41 chr21 43506300 43550700 0 51 chr21 43553400 43571700 0 39 chr21 44096100 44145900 0 45 chr21 44147100 44148900 0 45 chr21 44150100 44163300 0 45 chr21 44164800 44194800 0 45 chr21 44196900 44197200 0 15 chr21 44201400 44209500 0 46 chr21 44211000 44229000 0 44 chr21 44230200 44253300 0 44 chr21 44422800 44423100 0.1979 32 chr21 44982000 44982300 0.1984 31 chr21 45633300 45634200 0.1596 78 chr21 45746400 45746700 0.1334 74 chr21 46034400 46034700 0.0249 51 chr21 46169700 46170000 0.208 15 chr21 46184400 46184700 0.2168 200 chr21 46201200 46201500 0.0904 103 chr21 46292700 46294500 0.1325 160 chr21 46684500 46686600 0 79 chr21 46689900 46691700 0 74 chr21 46692900 46698900 0 125 chr22 10509900 10521600 0 80 chr22 10523400 10550700 0 118 chr22 10551900 10558800 0 118 chr22 10560000 10560600 0 23 chr22 10562100 10567500 0 73 chr22 10568700 10571100 0 54 chr22 10573500 10597800 0 65 chr22 10599300 10601700 0 48 chr22 10602900 10612200 0 48 chr22 10614000 10615200 0 24 chr22 10617300 10628100 0 54 chr22 10629900 10630800 0 40 chr22 10634100 10638900 0 49 chr22 10641000 10641300 0.0137 20 chr22 10642500 10644000 0 47 chr22 10645500 10649700 0 47 chr22 10651500 10657200 0 47 chr22 10659000 10659900 0 47 chr22 10674600 10674900 0.1213 53 chr22 10682700 10683000 0.096 80 chr22 10689600 10689900 0.158 120 chr22 10706100 10706700 0.1954 82 chr22 10709400 10709700 0.0682 83 chr22 10718100 10718400 0.2787 1204 chr22 10725900 10726200 0.2591 152 chr22 10834500 10862700 0 142 chr22 10863900 10874400 0 62 chr22 10963500 10963800 0.0399 97 chr22 11016900 11017200 0 336 chr22 11018700 11022300 0 336 chr22 11045400 11045700 0.0402 270 chr22 11049900 11050200 0.0451 275 chr22 11119200 11160900 0 78 chr22 11211300 11212800 0.1607 585 chr22 11215500 11217300 0 38 chr22 11220900 11244900 0 69 chr22 11246100 11250300 0 69 chr22 11251500 11252700 0 69 chr22 11253900 11265900 0 193 chr22 11267100 11271000 0 193 chr22 11272200 11274300 0 193 chr22 11275500 11281500 0 193 chr22 11282700 11284500 0 193 chr22 11320500 11322900 0 226 chr22 11332500 11332800 0.1977 54 chr22 11368800 11370900 0.0029 644 chr22 11438400 11438700 0.2063 33 chr22 11445600 11447100 0 17 chr22 11449500 11450400 0 19 chr22 11452200 11452500 0 12 chr22 11454000 11456400 0 28 chr22 11458500 11459700 0 27 chr22 11460900 11461200 0 27 chr22 11462400 11466000 0 36 chr22 11470500 11471700 0.0674 21 chr22 11484600 11484900 0 12 chr22 11557800 11560200 0 270 chr22 11683200 11684400 0 105 chr22 11685600 11689800 0 105 chr22 11691900 11694300 0.0054 151 chr22 11696400 11696700 0.0126 54 chr22 11698800 11702700 0 219 chr22 11706000 11706300 0.0038 127 chr22 11708400 11710200 0.0038 127 chr22 11711700 11714400 0 160 chr22 11716800 11722200 0 201 chr22 11724000 11724300 0 201 chr22 11774700 11782200 0 113 chr22 11783400 11785500 0 113 chr22 11787600 11790300 0 141 chr22 11792700 11793300 0 30 chr22 11796600 11796900 0.0017 76 chr22 11798100 11799300 0 49 chr22 11802300 11810700 0 825 chr22 11811900 11817300 0 825 chr22 11820000 11821200 0 134 chr22 11823000 11823300 0.1625 41 chr22 11825700 11826000 0 64 chr22 11827200 11827500 0 97 chr22 11828700 11829300 0 97 chr22 11830500 11832600 0 149 chr22 11834700 11866200 0 149 chr22 11867400 11869800 0 80 chr22 11872200 11872800 0 80 chr22 11876100 11878800 0 38 chr22 11880900 11883900 0 79 chr22 11885100 11885700 0 79 chr22 11893800 11894100 0.0099 78 chr22 11895300 11899500 0 61 chr22 11901000 11908800 0 77 chr22 11911800 11915700 0 103 chr22 11916900 11919900 0 103 chr22 11921700 11928000 0.0451 84 chr22 11931300 11931900 0.0355 55 chr22 11935500 11938500 0.0132 89 chr22 11941200 11941500 0.0662 40 chr22 11952900 11953200 0.1724 35 chr22 11954700 11956800 0 106 chr22 11958900 11959500 0 106 chr22 11966100 11966700 0.1888 23 chr22 11969100 11969400 0 101 chr22 11972100 11973000 0 101 chr22 12046500 12046800 0.104 109 chr22 12058200 12058500 0.0647 66 chr22 12060600 12062100 0 61 chr22 12063600 12065700 0 128 chr22 12066900 12068400 0 128 chr22 12070200 12070500 0.0085 99 chr22 12071700 12077100 0.0006 163 chr22 12080100 12080700 0.0724 101 chr22 12085800 12087900 0 119 chr22 12089100 12091200 0.0083 107 chr22 12092700 12093000 0.1163 91 chr22 12096900 12097200 0.025 86 chr22 12106800 12107400 0.0566 79 chr22 12115800 12116400 0.0023 64 chr22 12127500 12128100 0.0006 136 chr22 12130200 12131700 0 57 chr22 12134400 12135300 0.0014 77 chr22 12138300 12139500 0.0096 90 chr22 12146700 12147900 0.039 84 chr22 12151500 12151800 0.1453 172 chr22 12155100 12155400 0.1329 176 chr22 12175500 12176700 0.016 892 chr22 12178200 12178500 0.0173 183 chr22 12182100 12182400 0.0042 79 chr22 12186600 12186900 0.1295 113 chr22 12275700 12276600 0.1793 149 chr22 12281700 12282000 0.0069 158 chr22 12286800 12289500 0.0021 171 chr22 12291000 12292500 0.0021 171 chr22 12293700 12294900 0 253 chr22 12296100 12296700 0 253 chr22 12299700 12300000 0.0705 67 chr22 12301500 12302100 0.0836 88 chr22 12305100 12305400 0.2314 185 chr22 12309000 12309300 0.002 218 chr22 12310500 12313800 0.002 218 chr22 12315900 12316200 0.0081 46 chr22 12320700 12321300 0.0017 35 chr22 12323100 12326700 0 137 chr22 12331800 12332400 0 194 chr22 12334500 12335700 0 194 chr22 12336900 12338100 0 194 chr22 12340200 12340500 0.0689 122 chr22 12345600 12345900 0.0604 121 chr22 12348900 12349200 0.0769 75 chr22 12352200 12352500 0 228 chr22 12353700 12356400 0 228 chr22 12360000 12362400 0 311 chr22 12364200 12364500 0.0255 194 chr22 12368400 12370200 0.1268 171 chr22 12373800 12374100 0.1021 206 chr22 12490500 12490800 0.0548 238 chr22 12493500 12494400 0.0548 238 chr22 12495900 12496200 0.0548 238 chr22 12499800 12500100 0.0893 196 chr22 12501600 12504300 0 296 chr22 12507600 12510600 0.0032 199 chr22 12515100 12515400 0.1182 71 chr22 12524100 12524700 0.0626 112 chr22 12526500 12528000 0 215 chr22 12529200 12530700 0 215 chr22 12532500 12534300 0.0044 105 chr22 12539100 12540300 0 107 chr22 12542400 12543300 0 96 chr22 12546900 12547200 0.0332 62 chr22 12550800 12556500 0.0057 231 chr22 12558300 12558600 0.0057 231 chr22 12562800 12563100 0.01 69 chr22 12564900 12565200 0.0076 97 chr22 12568200 12568800 0.0028 123 chr22 12570000 12571200 0.0341 135 chr22 12572400 12577800 0.0024 208 chr22 12579000 12579300 0.0024 208 chr22 12582600 12583200 0.0155 89 chr22 12585900 12586200 0.1237 130 chr22 12588300 12588900 0.1242 123 chr22 12698700 12699000 0 13 chr22 12709200 12709500 0.1964 60 chr22 12715200 12715500 0.1493 82 chr22 12717900 12718200 0.1481 59 chr22 12724500 12724800 0.139 35 chr22 12777000 12777300 0.0376 39 chr22 12787800 12788100 0.05 84 chr22 12791100 12792600 0.0767 110 chr22 12796500 12796800 0.0528 90 chr22 12804900 12805200 0.1598 67 chr22 12807900 12809700 0.0379 98 chr22 12814800 12815100 0.025 98 chr22 12868200 12870900 0 175 chr22 12872400 12904800 0 239 chr22 15155100 15156600 0 74 chr22 15159000 15159600 0 74 chr22 15160800 15165900 0 74 chr22 15167400 15185400 0 83 chr22 15186600 15194100 0 83 chr22 15195900 15198000 0 87 chr22 15199200 15202800 0 87 chr22 15204000 15208200 0 87 chr22 15209400 15222000 0 86 chr22 15223200 15224400 0 46 chr22 15225600 15227400 0 46 chr22 15228600 15228900 0 73 chr22 15230100 15241800 0 73 chr22 15243900 15245700 0 86 chr22 15247200 15252000 0 86 chr22 15253800 15263100 0 72 chr22 15264900 15279000 0 72 chr22 15280200 15295500 0 77 chr22 15297000 15301500 0 77 chr22 15303300 15303600 0.0434 46 chr22 15304800 15305700 0 53 chr22 15307500 15312600 0 69 chr22 15315000 15316800 0.0026 46 chr22 15318300 15319200 0.1307 52 chr22 15321300 15324300 0 57 chr22 15326100 15327600 0.0484 65 chr22 15331200 15331500 0.0715 42 chr22 15333300 15335100 0 55 chr22 15337200 15337800 0 37 chr22 15340800 15342000 0.0129 40 chr22 15345300 15345600 0.0056 53 chr22 15347400 15348600 0.0006 54 chr22 15349800 15351900 0.0821 64 chr22 15354900 15357000 0 96 chr22 15358500 15358800 0.1251 64 chr22 15365100 15365700 0.0728 67 chr22 15367800 15369600 0 83 chr22 15372300 15372600 0.0506 69 chr22 15380100 15380400 0.0508 28 chr22 15385800 15387000 0.0962 68 chr22 15393300 15395100 0 81 chr22 15398100 15399300 0.0409 82 chr22 15401400 15401700 0.0409 82 chr22 15403800 15404700 0.0025 88 chr22 15409800 15411000 0.0171 55 chr22 15414600 15416400 0 83 chr22 15417600 15419400 0.0042 76 chr22 15420900 15422400 0 70 chr22 15425400 15425700 0.0066 73 chr22 15426900 15427200 0.0066 73 chr22 15430200 15430800 0.0048 71 chr22 15433200 15436800 0 80 chr22 15441000 15441300 0.0752 81 chr22 15445500 15447900 0.0021 73 chr22 15450300 15450600 0.12 74 chr22 15452400 15455400 0 69 chr22 15458100 15459600 0 60 chr22 15460800 15464700 0.0008 73 chr22 15465900 15466200 0.0896 35 chr22 15472200 15473400 0 65 chr22 15476100 15480300 0 72 chr22 15481500 15483000 0 72 chr22 15484800 15486600 0 66 chr22 15491100 15494400 0.0106 69 chr22 15495600 15503400 0 74 chr22 15504900 15506700 0 61 chr22 15511800 15512100 0.0936 70 chr22 15514500 15514800 0.2109 20 chr22 15516600 15517200 0 88 chr22 15518400 15518700 0.0168 72 chr22 15520200 15520500 0.0168 72 chr22 15521700 15528000 0 106 chr22 15529200 15531300 0.0025 120 chr22 15534300 15534900 0.0025 120 chr22 15537600 15542400 0 132 chr22 15545400 15548100 0 142 chr22 15551100 15551700 0 142 chr22 15555300 15557100 0 142 chr22 15558900 15567600 0 139 chr22 15568800 15570000 0 141 chr22 15571200 15571500 0 141 chr22 15573600 15576600 0 141 chr22 15579000 15579600 0.0012 127 chr22 15581400 15582600 0 119 chr22 15584100 15596100 0 119 chr22 15598200 15598800 0.004 107 chr22 15600600 15607500 0 126 chr22 15608700 15611400 0 126 chr22 15616200 15616500 0.2451 58 chr22 15619500 15624000 0.0125 98 chr22 15625200 15625500 0.1583 49 chr22 15627000 15627300 0.0305 62 chr22 15638700 15639600 0 109 chr22 15641400 15651900 0 139 chr22 15653700 15657900 0 139 chr22 15659700 15669300 0 139 chr22 15670800 15681000 0 136 chr22 15682200 15682800 0 136 chr22 15684300 15687000 0 136 chr22 15691200 15691500 0 42 chr22 15693000 15696300 0 124 chr22 15698100 15699300 0.0885 120 chr22 15700800 15707400 0 137 chr22 15709500 15710100 0.0455 95 chr22 15711900 15712800 0 122 chr22 15714900 15718500 0 146 chr22 15719700 15724500 0 146 chr22 15726000 15728700 0 146 chr22 15729900 15730200 0 146 chr22 15732600 15733200 0.0295 126 chr22 15735600 15736800 0.004 146 chr22 15741300 15744900 0 130 chr22 15747300 15747600 0.0626 105 chr22 15750600 15753900 0.0161 131 chr22 15759300 15759600 0.0053 135 chr22 15762600 15763500 0.0211 150 chr22 15765000 15765300 0.0478 124 chr22 15767700 15769200 0 101 chr22 15770400 15770700 0.0284 93 chr22 15773700 15774000 0.0233 112 chr22 15776400 15776700 0.1098 128 chr22 15779400 15780900 0.0124 135 chr22 15782400 15783000 0.0124 135 chr22 15784500 15785400 0 142 chr22 15786600 15786900 0.0233 81 chr22 15788700 15804000 0 161 chr22 15805800 15808800 0 161 chr22 15810000 15813000 0 161 chr22 15815400 15816600 0 158 chr22 15817800 15824100 0 158 chr22 15826500 15826800 0.0641 107 chr22 15830700 15831900 0.0015 156 chr22 15839700 15840000 0.1108 102 chr22 15842400 15853500 0 159 chr22 15855300 15856800 0.031 115 chr22 15858300 15860700 0 112 chr22 15864300 15874800 0 114 chr22 15876300 15879300 0 114 chr22 15880800 15903900 0 114 chr22 15905400 15905700 0.1898 74 chr22 15909300 15910200 0 62 chr22 15912300 15913500 0.015 70 chr22 15915000 15915300 0.049 29 chr22 15918300 15918600 0.0741 62 chr22 15931200 15931500 0.2082 74 chr22 15941700 15944700 0.0362 68 chr22 15957000 15963300 0 41 chr22 15964500 15971700 0 45 chr22 15973500 15977100 0 67 chr22 15979200 15980400 0 35 chr22 15985200 15992700 0 73 chr22 15993900 15995100 0 73 chr22 15996300 15999000 0 89 chr22 16000500 16020600 0 89 chr22 16164900 16165200 0.0694 21 chr22 16305600 16306800 0.0214 29 chr22 16308000 16310100 0 32 chr22 16311600 16313100 0 18 chr22 16319100 16323600 0 51 chr22 16329000 16385700 0 11424 chr22 16480200 16480500 0 75 chr22 16481700 16522500 0 75 chr22 16701000 16701300 0.0393 70 chr22 17146800 17147100 0.1944 50 chr22 18009300 18009900 0 32 chr22 18161400 18161700 0.0168 64 chr22 18165000 18165600 0.233 57 chr22 18171000 18171300 0.017 66 chr22 18176100 18178500 0.0484 86 chr22 18180300 18184800 0 57 chr22 18186600 18188400 0.074 91 chr22 18191400 18203700 0 987 chr22 18205200 18206100 0 1414 chr22 18207600 18223200 0 52 chr22 18224400 18225300 0 52 chr22 18226800 18229800 0 31 chr22 18231300 18231600 0.0331 22 chr22 18233700 18234300 0 29 chr22 18236700 18238500 0.0142 1239 chr22 18340200 18342900 0 31 chr22 18344700 18346500 0 31 chr22 18347700 18354300 0 43 chr22 18358200 18368700 0 58 chr22 18371700 18387900 0 2035 chr22 18390600 18400200 0 63 chr22 18401400 18417300 0 63 chr22 18418500 18419700 0 1194 chr22 18420900 18433500 0 675 chr22 18484200 18485100 0 38 chr22 18486300 18487800 0 21 chr22 18489600 18491100 0 31 chr22 18492600 18498900 0 44 chr22 18500400 18502500 0 44 chr22 18504000 18505200 0 44 chr22 18507600 18508800 0 44 chr22 18510000 18510600 0 37 chr22 18512100 18518100 0 37 chr22 18520800 18528300 0 42 chr22 18529500 18529800 0.0003 31 chr22 18531000 18535200 0 52 chr22 18538800 18542700 0 38 chr22 18544200 18544500 0.1169 38 chr22 18546000 18550800 0 40 chr22 18552900 18568800 0 60 chr22 18570300 18571200 0 70 chr22 18572400 18588600 0 70 chr22 18590400 18597300 0 70 chr22 18600300 18606900 0 60 chr22 18609000 18614400 0 62 chr22 18616200 18616500 0 62 chr22 18618600 18618900 0.1407 41 chr22 18622500 18627300 0 38 chr22 18629700 18631500 0 39 chr22 18632700 18633900 0 39 chr22 18635400 18636000 0 39 chr22 18637800 18638400 0 35 chr22 18639900 18640200 0 28 chr22 18641700 18648600 0 28 chr22 18650100 18652500 0 28 chr22 18653700 18654900 0 28 chr22 18656400 18657600 0 61 chr22 18709500 18720300 0 36 chr22 18722100 18724500 0 89 chr22 18726000 18727500 0 89 chr22 18733500 18738900 0 7475 chr22 18741600 18742200 0 36 chr22 18743400 18744600 0 23 chr22 18746100 18748500 0 37 chr22 18749700 18751500 0 37 chr22 18752700 18761700 0 51 chr22 18762900 18765300 0 51 chr22 18767100 18781500 0 43 chr22 18784800 18785700 0 40 chr22 18786900 18787200 0.1241 19 chr22 18788400 18799200 0 47 chr22 18800400 18813600 0 43 chr22 18815100 18816900 0 34 chr22 18819900 18837900 0 48 chr22 18839100 18840300 0 32 chr22 18841500 18842100 0 32 chr22 18843300 18849900 0 71 chr22 18851100 18853200 0 71 chr22 18854400 18854700 0 63 chr22 18855900 18857400 0 63 chr22 18858900 18863100 0 63 chr22 18864600 18869700 0 63 chr22 18871200 18871500 0.003 58 chr22 18872700 18877500 0.003 58 chr22 18878700 18879000 0.1335 63 chr22 18881700 18908100 0 4960 chr22 18909900 18913200 0 41 chr22 18914400 18916500 0 41 chr22 18918300 18941700 0 73 chr22 18942900 18945000 0 123 chr22 18946500 18946800 0.0143 81 chr22 19025700 19026600 0.0494 45 chr22 20162700 20163000 0.2691 91 chr22 20326500 20326800 0.0425 47 chr22 20331900 20332200 0.0864 52 chr22 20334000 20334300 0.0244 39 chr22 20338800 20347200 0 1137 chr22 20350200 20350500 0.0541 67 chr22 20366100 20366700 0.0382 77 chr22 20372100 20372400 0.0924 73 chr22 20375700 20376000 0.0192 64 chr22 20679600 20679900 0.226 34 chr22 20689500 20689800 0.1145 67 chr22 20696700 20697000 0.0021 42 chr22 21112200 21122400 0 66 chr22 21124200 21128100 0 70 chr22 21129900 21134700 0 76 chr22 21136200 21138300 0 116 chr22 21139500 21148800 0 69 chr22 21153900 21155700 0 62 chr22 21156900 21157500 0 62 chr22 21160200 21160500 0 62 chr22 21161700 21163200 0 45 chr22 21165900 21171000 0 452 chr22 21172500 21176100 0 452 chr22 21177900 21195000 0 98 chr22 21197400 21197700 0 27 chr22 21198900 21200400 0 27 chr22 21202200 21209700 0 37 chr22 21211500 21216000 0 37 chr22 21219000 21220200 0 30 chr22 21222000 21224700 0 43 chr22 21225900 21226800 0 31 chr22 21228300 21229200 0 34 chr22 21230400 21233400 0 48 chr22 21235200 21248100 0 38 chr22 21249300 21260100 0 74 chr22 21261300 21275100 0 74 chr22 21276600 21280500 0 74 chr22 21285000 21286800 0 97 chr22 21288000 21294600 0 97 chr22 21296400 21301200 0 379 chr22 21302400 21326400 0 379 chr22 21330000 21332700 0 58 chr22 21333900 21336900 0 58 chr22 21338100 21345600 0 60 chr22 21347100 21349500 0 27 chr22 21351600 21355200 0 34 chr22 21356400 21357000 0 41 chr22 21360000 21360300 0.1039 40 chr22 21364200 21365400 0 45 chr22 21368700 21372600 0 42 chr22 21373800 21376200 0 28 chr22 21379500 21380400 0 44 chr22 21382200 21402000 0 68 chr22 21404400 21405300 0.0394 69 chr22 21407700 21408000 0.0292 47 chr22 21409200 21417000 0 67 chr22 21418200 21422700 0 65 chr22 21423900 21425100 0 75 chr22 21426600 21442800 0 72 chr22 21460800 21464700 0 37 chr22 21466200 21467400 0 40 chr22 21468900 21474300 0 40 chr22 21478500 21479400 0 34 chr22 21483600 21483900 0.001 40 chr22 21486600 21487200 0 35 chr22 21488700 21489300 0.0387 41 chr22 21492000 21511200 0 81 chr22 21512700 21542100 0 68 chr22 21543600 21554100 0 70 chr22 21955500 21956100 0 60 chr22 22221000 22221900 0.0379 67 chr22 22223700 22224000 0.0231 20 chr22 22637100 22637400 0.1377 20 chr22 22644300 22644900 0.1079 67 chr22 22900200 22900500 0.0405 72 chr22 22905600 22905900 0.0704 66 chr22 23540400 23540700 0.2428 60 chr22 23601900 23602200 0.1783 63 chr22 23853900 23854500 0 68 chr22 23855700 23856300 0.0394 116 chr22 23940000 23940300 0.0893 47 chr22 23948700 23949300 0 25 chr22 23957100 23958900 0.0114 35 chr22 23961000 23969100 0 49 chr22 23972700 23980500 0 51 chr22 23982300 23984400 0 31 chr22 23990400 23990700 0.0392 11 chr22 23999400 23999700 0.0877 42 chr22 24000900 24001200 0.0329 49 chr22 24193500 24193800 0.0563 88 chr22 24251700 24252000 0.0376 54 chr22 24293700 24294300 0.0581 82 chr22 24671400 24672000 0.0085 71 chr22 28194900 28195800 0 68 chr22 28212600 28213500 0 61 chr22 28663800 28668900 0 112 chr22 31026900 31027200 0.0972 49 chr22 31592100 31592400 0.1627 44 chr22 32295900 32296800 0.0306 67 chr22 32931900 32932200 0.1505 95 chr22 34550400 34553100 0 65 chr22 34677900 34678500 0.02 53 chr22 34682100 34682400 0.1587 51 chr22 36138000 36138900 0 69 chr22 36187200 36188100 0 77 chr22 38229900 38230200 0.2375 53 chr22 38806500 38806800 0.135 60 chr22 40501200 40501500 0.1344 25 chr22 40536600 40538100 0.0283 82 chr22 40744200 40746300 0 61 chr22 42123300 42125700 0 73 chr22 42129900 42130200 0.1422 57 chr22 42135600 42138000 0 79 chr22 42143700 42144000 0.0188 67 chr22 42501600 42502500 0 71 chr22 42503700 42505800 0 73 chr22 42513300 42513600 0.0705 59 chr22 42555000 42555900 0 68 chr22 42557100 42559200 0 68 chr22 42575100 42575400 0.1676 69 chr22 42980700 42981000 0.1118 80 chr22 42982200 42982500 0.1198 80 chr22 44800800 44801100 0.0118 26 chr22 46631700 46632000 0.2235 73 chr22 46772100 46772400 0.0849 28 chr22 46859400 46859700 0.0712 57 chr22 47732400 47732700 0.2424 94 chr22 48290400 48290700 0.0146 31 chr22 48985800 48991200 0 78 chr22 49265400 49266300 0.1012 73 chr22 49384800 49385100 0.0086 33 chr22 50028900 50029200 0.2043 119 chr22 50765400 50766900 0.0085 70 chr22 50787300 50787600 0.0996 55 chr22 50788800 50789100 0.0304 76 chr22 50792400 50792700 0.0324 81 chr22 50797800 50798100 0.1065 55 chr22 50800500 50806800 0 304 chr22 50808000 50808600 0 304 chr3 10800 11100 0.1615 29 chr3 18600 18900 0.0784 25 chr3 135000 135300 0.0731 14 chr3 261900 262500 0.1039 172 chr3 483000 483300 0.1157 20 chr3 812400 813600 0.0307 84 chr3 876300 876600 0.0763 119 chr3 1391100 1391400 0.2436 69 chr3 1392900 1393200 0.0479 96 chr3 1565700 1566000 0.0939 56 chr3 1658100 1658700 0.011 169 chr3 1707300 1707600 0.1284 22 chr3 2007000 2008500 0 118 chr3 2454300 2454600 0.0133 32 chr3 3131700 3132600 0.0091 100 chr3 3721500 3721800 0.1947 32 chr3 3963900 3969000 0 86 chr3 4025400 4027800 0 99 chr3 4256100 4257300 0.0669 72 chr3 4266600 4266900 0.1616 112 chr3 4917900 4922400 0 137 chr3 6486900 6487200 0.111 78 chr3 6699900 6700200 0.1861 61 chr3 8335800 8336400 0.0154 71 chr3 8614200 8615100 0 109 chr3 8616900 8617200 0.0136 89 chr3 8655000 8655300 0.0952 28 chr3 10052700 10053000 0.131 107 chr3 10297800 10298100 0.0706 79 chr3 11487900 11488200 0.0274 23 chr3 12028800 12029100 0.0227 107 chr3 12030900 12033000 0.0227 107 chr3 15188700 15189000 0.0389 116 chr3 15190500 15190800 0.0553 102 chr3 17097000 17097300 0.1059 103 chr3 17858700 17859300 0.1242 84 chr3 18326100 18326400 0.1455 103 chr3 18328800 18329100 0.0664 90 chr3 18518400 18518700 0.0792 83 chr3 18933300 18934500 0 77 chr3 18961200 18961500 0.0647 97 chr3 19009800 19010400 0.0079 71 chr3 19100700 19101000 0.102 72 chr3 20353800 20354400 0.105 78 chr3 21250500 21251100 0.0249 100 chr3 21490800 21491100 0.0748 59 chr3 21984300 21988500 0 84 chr3 22050900 22056300 0 95 chr3 22803600 22804500 0.0111 84 chr3 22806600 22806900 0.0895 144 chr3 24091200 24092100 0 88 chr3 24093900 24094200 0 88 chr3 26385000 26389500 0 105 chr3 26398200 26403600 0 89 chr3 27093000 27093600 0 82 chr3 27817500 27817800 0.0684 90 chr3 28354500 28354800 0.198 57 chr3 28366200 28366500 0.0367 68 chr3 28414800 28419900 0 74 chr3 28493700 28494300 0 83 chr3 28851600 28851900 0.2945 147 chr3 29109300 29111100 0.0005 83 chr3 30412800 30413400 0.035 91 chr3 32279400 32279700 0.0847 102 chr3 33511800 33512400 0 93 chr3 34413600 34418400 0 100 chr3 34653000 34656300 0 91 chr3 38341800 38343000 0 29 chr3 38406900 38407200 0.201 95 chr3 39985200 39985500 0.1 82 chr3 40040400 40040700 0.1816 80 chr3 40041900 40042200 0.2022 48 chr3 40203900 40204200 0.006 351 chr3 40239600 40240200 0.1 84 chr3 40903500 40903800 0.1698 78 chr3 41776800 41779800 0.0026 134 chr3 42797100 42799200 0 60 chr3 43065900 43069200 0.0059 109 chr3 43569300 43569900 0.1767 83 chr3 44750700 44751000 0.0447 55 chr3 45726900 45727200 0.0744 30 chr3 46151700 46152000 0.0887 99 chr3 46773000 46773300 0.0041 93 chr3 46783200 46788300 0 101 chr3 46801200 46801800 0.0069 63 chr3 47259900 47260200 0.2729 73 chr3 48055500 48055800 0.1119 86 chr3 48057300 48057600 0.0415 68 chr3 48210900 48213000 0.0045 82 chr3 49456800 49457100 0.2502 37 chr3 50887500 50887800 0.1505 63 chr3 50897700 50898000 0.1061 53 chr3 50973600 50973900 0.0895 73 chr3 51863400 51864000 0.0144 67 chr3 52675800 52676100 0.1508 32 chr3 53365500 53370600 0 99 chr3 53923800 53925600 0.1434 94 chr3 54394800 54399900 0 96 chr3 55046400 55049700 0 58 chr3 55137900 55138500 0.0188 57 chr3 55140000 55142100 0 47 chr3 56514000 56515500 0.0439 79 chr3 56543400 56543700 0.043 48 chr3 57028200 57028500 0.1478 76 chr3 58549200 58549500 0.1293 82 chr3 58818600 58818900 0.1562 104 chr3 58843800 58844400 0.0733 92 chr3 58847100 58848000 0.0513 125 chr3 58889700 58890000 0.0485 55 chr3 61399500 61399800 0.0028 58 chr3 61672200 61672500 0.2102 76 chr3 62599500 62599800 0.0131 24 chr3 62847600 62848800 0.0021 141 chr3 62850300 62850600 0.0021 141 chr3 63136800 63137700 0.0207 76 chr3 63138900 63141900 0 141 chr3 63153300 63155700 0 97 chr3 63212700 63217200 0 112 chr3 63589800 63590700 0.0087 237 chr3 63737400 63737700 0.0895 83 chr3 65511900 65514000 0.0188 113 chr3 65697900 65699400 0.0623 92 chr3 66063600 66063900 0.0622 32 chr3 66874500 66874800 0.0157 23 chr3 67445100 67445700 0.0714 53 chr3 67814400 67815600 0.08 119 chr3 68077200 68077500 0.1096 82 chr3 69437700 69438000 0.0638 43 chr3 70287000 70287300 0.1145 71 chr3 71435400 71436000 0.1199 186 chr3 74454000 74454300 0.1467 83 chr3 74703000 74703300 0.0619 128 chr3 75120300 75120600 0.085 147 chr3 76730700 76731000 0.1813 17 chr3 77763900 77769000 0 100 chr3 78582600 78583800 0.0264 28 chr3 78795900 78796500 0.0674 62 chr3 79129800 79134900 0 92 chr3 80442300 80442600 0.0523 70 chr3 80876400 80877300 0 82 chr3 80892900 80893500 0.0768 75 chr3 81051600 81057000 0 110 chr3 82153200 82153800 0.0256 51 chr3 82338600 82338900 0.1141 74 chr3 82465200 82465500 0.1938 13 chr3 83038500 83039400 0 100 chr3 83804100 83806200 0 75 chr3 86018100 86019300 0.044 70 chr3 86860200 86860500 0.1175 60 chr3 87844500 87844800 0.0908 89 chr3 88872600 88872900 0.1663 92 chr3 89349000 89349300 0.0094 66 chr3 89461200 89466300 0 126 chr3 89869500 89871000 0.0108 91 chr3 89872500 89873400 0.0022 76 chr3 89961900 89962200 0.0181 109 chr3 90169800 90171600 0.0053 91 chr3 90173400 90174900 0.0053 91 chr3 90336000 90338400 0 94 chr3 90406200 90406500 0.0956 105 chr3 90514800 90515400 0 62 chr3 90525600 90526200 0.0064 47 chr3 90559200 90559500 0.1323 55 chr3 90564000 90565200 0 45 chr3 90568800 90569400 0 40 chr3 90582900 90583200 0.1733 191 chr3 90670200 90672600 0.1254 118 chr3 90676500 90678600 0.1189 58 chr3 90681000 90682500 0.095 23 chr3 90684600 90684900 0.2991 86 chr3 90686700 90687000 0.2701 31 chr3 90688800 90689100 0.2906 13 chr3 90692100 90692400 0.2192 44 chr3 90696900 90698100 0.2389 47 chr3 90700200 90701700 0.2371 28 chr3 90702900 90703500 0.1068 21 chr3 90705600 90706200 0.1426 10 chr3 90708600 90709800 0.1788 22 chr3 90711000 90711300 0.2419 31 chr3 90713700 90720000 0 61 chr3 90772500 90777000 0 256 chr3 90780000 90782100 0.0013 312 chr3 90783300 90783600 0.0501 77 chr3 90786300 90789600 0 94 chr3 90791700 90798000 0 194 chr3 90799200 90801600 0 194 chr3 90803100 90803400 0.0054 445 chr3 90805500 90807600 0.0054 445 chr3 90809700 90810300 0 460 chr3 90812700 90817500 0 460 chr3 90819000 90821700 0.0022 324 chr3 90822900 90826200 0.0022 324 chr3 90827700 90829200 0 81 chr3 90831000 90832200 0 43 chr3 90833700 90841800 0.008 317 chr3 90845100 90845400 0.1674 41 chr3 90849300 90852300 0.0301 193 chr3 90854700 90860400 0 153 chr3 90861600 90861900 0.265 21 chr3 90863700 90870300 0 994 chr3 90872100 90875700 0 232 chr3 90876900 90878100 0 151 chr3 90879600 90881700 0.0781 425 chr3 90883200 90885000 0 107 chr3 90890700 90891900 0.1254 229 chr3 90894000 90895800 0 205 chr3 90897000 90898800 0 205 chr3 90900300 90902700 0.0573 197 chr3 90904500 90907200 0 227 chr3 90908400 90912900 0 287 chr3 90914100 90917400 0 287 chr3 90918900 90924000 0 197 chr3 90925500 90929700 0 108 chr3 90931200 90932700 0 108 chr3 90933900 90941100 0 280 chr3 90942300 90944700 0 188 chr3 90945900 90948300 0 188 chr3 90949800 90950700 0.0087 191 chr3 90951900 90961800 0 395 chr3 90963300 90963600 0 395 chr3 90964800 90965700 0.0334 106 chr3 90966900 90967200 0.0334 106 chr3 90968400 90975300 0 494 chr3 90976500 90991200 0 637 chr3 90992400 90999600 0 436 chr3 91000800 91002900 0 436 chr3 91004100 91012200 0 436 chr3 91014000 91014300 0 49 chr3 91015500 91016700 0 49 chr3 91017900 91019400 0.012 232 chr3 91021200 91024800 0 331 chr3 91026300 91026900 0.1286 96 chr3 91029300 91031700 0 287 chr3 91033200 91039200 0 287 chr3 91041000 91045200 0 287 chr3 91046700 91050900 0 358 chr3 91052400 91054200 0 273 chr3 91056300 91056600 0 273 chr3 91058700 91059000 0 273 chr3 91060800 91061100 0.108 79 chr3 91063200 91063500 0.0416 95 chr3 91064700 91067100 0.0215 57 chr3 91070700 91072200 0 146 chr3 91073700 91074600 0.0384 383 chr3 91076700 91077000 0 415 chr3 91078200 91085700 0 415 chr3 91086900 91089000 0 415 chr3 91090200 91099500 0 183 chr3 91101600 91103100 0.0102 70 chr3 91104900 91105800 0.0102 70 chr3 91107000 91108800 0 78 chr3 91110300 91110600 0 78 chr3 91112400 91112700 0.1242 26 chr3 91114200 91115100 0.0243 101 chr3 91118100 91119300 0 86 chr3 91121700 91122300 0.055 19 chr3 91123500 91125600 0 526 chr3 91127400 91128000 0 526 chr3 91131300 91134600 0 106 chr3 91138800 91149600 0 182 chr3 91152300 91152600 0 182 chr3 91154400 91155300 0.0195 356 chr3 91156500 91156800 0 156 chr3 91158900 91164900 0 139 chr3 91167900 91170000 0 87 chr3 91171200 91171500 0 87 chr3 91174200 91180500 0 136 chr3 91182000 91182300 0.1899 266 chr3 91185000 91191000 0 836 chr3 91194000 91194300 0 81 chr3 91195500 91197600 0 81 chr3 91198800 91201200 0 202 chr3 91202400 91206000 0 135 chr3 91207500 91208700 0 135 chr3 91210200 91210500 0 135 chr3 91213500 91218900 0 162 chr3 91221600 91221900 0.2328 30 chr3 91224300 91225500 0.023 36 chr3 91229100 91232100 0 115 chr3 91233600 91233900 0.0082 46 chr3 91235700 91236600 0 81 chr3 91238100 91239600 0 102 chr3 91241700 91242900 0.0122 374 chr3 91245000 91245600 0.0248 343 chr3 91246800 91247400 0.0248 343 chr3 91249200 91249500 0.0016 56 chr3 91260600 91261200 0 14 chr3 91263900 91264200 0.2464 48 chr3 91277700 91279200 0 210 chr3 91280400 91285800 0 210 chr3 91385100 91385700 0.0246 46 chr3 91392900 91393200 0.1413 61 chr3 91544100 91551000 0 2208 chr3 91552800 91713900 0 2208 chr3 91715100 91734600 0 2208 chr3 91735800 92704800 0 2208 chr3 92706000 92931300 0 2208 chr3 92932500 93026400 0 2208 chr3 93027900 93122700 0 595 chr3 93124200 93504000 0 1558 chr3 93505500 93655500 0 1558 chr3 93705600 93713400 0 163 chr3 93717000 93717300 0.2699 17 chr3 93789600 93791100 0.0115 83 chr3 94750800 94751100 0.1558 74 chr3 95805000 95805300 0.2133 63 chr3 98466300 98467800 0.0842 74 chr3 98837400 98837700 0.1642 30 chr3 99318600 99318900 0.0277 36 chr3 100473300 100474200 0.1035 81 chr3 101439600 101440500 0.024 59 chr3 101694300 101694600 0.1036 61 chr3 101797800 101798100 0.0682 76 chr3 103220700 103226100 0 64 chr3 103233000 103233600 0.0364 89 chr3 103235700 103236300 0 102 chr3 103556700 103562400 0 118 chr3 105297900 105298500 0.0742 31 chr3 105587400 105591900 0 101 chr3 106110600 106110900 0.032 75 chr3 106665900 106666500 0.0646 106 chr3 106667700 106668000 0.1266 38 chr3 106950600 106950900 0.0951 41 chr3 106976100 106980600 0.0067 91 chr3 107694000 107695500 0.0821 85 chr3 107886900 107888700 0.0324 133 chr3 108374700 108375000 0.1273 85 chr3 108749700 108755400 0 112 chr3 109200000 109205700 0 122 chr3 110117700 110120400 0 106 chr3 110442900 110443500 0.0056 73 chr3 110445600 110445900 0.0508 76 chr3 110635200 110635500 0.0342 67 chr3 111020700 111021000 0.0127 71 chr3 111022200 111022500 0.0127 71 chr3 111023700 111024000 0.1005 80 chr3 111491700 111492000 0.0979 81 chr3 111557100 111557400 0 84 chr3 111559200 111561000 0 84 chr3 112162800 112163100 0.181 98 chr3 112183800 112184400 0 77 chr3 113024400 113025000 0.0013 74 chr3 113027100 113029200 0.0055 75 chr3 113030400 113033400 0 90 chr3 114282000 114282300 0.1078 73 chr3 114747600 114747900 0.2771 16 chr3 116205300 116205900 0.0591 94 chr3 116360400 116365800 0 95 chr3 116645400 116645700 0.0096 53 chr3 118915500 118915800 0.0214 75 chr3 118918200 118920000 0.0503 384 chr3 119002800 119003100 0.0697 56 chr3 119109000 119109300 0.0837 115 chr3 120374400 120375900 0 83 chr3 120377400 120377700 0 83 chr3 120575400 120580500 0 91 chr3 121032600 121033200 0.0589 118 chr3 121088400 121089000 0.0712 87 chr3 121937100 121937400 0.0666 77 chr3 122042100 122042400 0.0079 103 chr3 122043600 122044200 0.0079 103 chr3 122164200 122164500 0.2129 55 chr3 122670300 122670600 0.1885 65 chr3 123478800 123479100 0.2542 34 chr3 123992100 123992400 0.1243 57 chr3 124110000 124110300 0.2977 28 chr3 124367700 124368000 0.0226 21 chr3 124789500 124790400 0 55 chr3 125171400 125172000 0.0808 47 chr3 125941800 125942400 0.0197 114 chr3 125969100 125969400 0.0304 59 chr3 126325200 126326400 0.0034 76 chr3 126332700 126333000 0.1133 65 chr3 126334500 126337200 0.0103 124 chr3 127434600 127434900 0.0205 102 chr3 128954100 128955900 0.0065 70 chr3 129088500 129089400 0 80 chr3 130629000 130634100 0 95 chr3 130911900 130912200 0.0661 58 chr3 131408400 131410500 0 97 chr3 132375300 132375600 0.1201 85 chr3 132470100 132470400 0.0191 53 chr3 132807300 132809700 0 79 chr3 132946200 132951900 0 83 chr3 133785600 133785900 0.0023 30 chr3 134955300 134955600 0 27 chr3 135254100 135254400 0.0387 90 chr3 135588600 135590100 0.026 102 chr3 135660300 135662400 0.0002 84 chr3 135663600 135663900 0.0002 84 chr3 136479900 136484100 0 82 chr3 136963800 136969200 0 97 chr3 137094000 137095800 0 84 chr3 137353800 137354400 0.0016 83 chr3 137457300 137458500 0.007 71 chr3 137634000 137634300 0 80 chr3 137635500 137638500 0 80 chr3 139143900 139144200 0.0368 98 chr3 139335900 139336200 0.0362 61 chr3 141757500 141761400 0 97 chr3 142011000 142011300 0.0596 105 chr3 145929000 145929600 0.0174 71 chr3 145930800 145931400 0.0859 128 chr3 146097300 146097600 0.2049 51 chr3 146732700 146735100 0.0033 214 chr3 148430100 148430700 0.1373 76 chr3 148563900 148564200 0.0246 48 chr3 148565700 148567500 0.0254 55 chr3 149830200 149830500 0.0023 56 chr3 149838900 149839500 0.0336 73 chr3 150616200 150616500 0.0796 81 chr3 150819600 150820200 0.0012 73 chr3 150821400 150821700 0.0916 63 chr3 152594100 152595300 0.0473 74 chr3 154911300 154914600 0 91 chr3 155119800 155123400 0.0161 91 chr3 155210100 155210400 0.1638 80 chr3 155472900 155473200 0.1765 81 chr3 155506800 155510700 0 78 chr3 157901700 157902000 0.1973 67 chr3 158021100 158024400 0 112 chr3 158637900 158639700 0.0073 82 chr3 159095400 159101100 0 110 chr3 161004300 161004600 0.1135 70 chr3 161907600 161907900 0.0401 62 chr3 162318900 162319200 0.1153 31 chr3 162407100 162408000 0.0007 56 chr3 163237800 163242600 0 80 chr3 163634700 163635600 0.0391 83 chr3 164294400 164296200 0.0207 108 chr3 164704500 164704800 0.0145 119 chr3 165573600 165573900 0.0905 48 chr3 165589200 165589500 0.1674 62 chr3 166229400 166230000 0.0928 79 chr3 166231800 166232100 0.0494 40 chr3 168351600 168354900 0 86 chr3 169680600 169685400 0.0176 78 chr3 170401800 170402100 0.082 26 chr3 170806200 170806500 0.0894 546 chr3 170879100 170879400 0.0537 99 chr3 170880900 170881200 0.0537 99 chr3 174262200 174263100 0.0559 78 chr3 175321500 175321800 0.2736 74 chr3 175436700 175437600 0.0397 89 chr3 175782300 175782600 0.2201 62 chr3 176831400 176831700 0.1108 98 chr3 177389400 177392700 0 96 chr3 178782000 178782300 0.064 73 chr3 178862400 178863000 0.1265 90 chr3 179121300 179121600 0.2563 74 chr3 181134600 181134900 0.2216 53 chr3 182429100 182429400 0.086 60 chr3 183174600 183174900 0.1633 83 chr3 183234900 183237900 0 89 chr3 183609300 183609600 0.0879 58 chr3 183739500 183740100 0 82 chr3 184753500 184753800 0.1754 15 chr3 185230800 185231400 0 42 chr3 185562900 185563200 0.1275 69 chr3 185565300 185565600 0.0663 83 chr3 185567100 185567400 0.0663 83 chr3 185569500 185569800 0.0152 77 chr3 186864000 186867300 0 41 chr3 187108800 187109100 0.1874 47 chr3 187413600 187417800 0 111 chr3 187424700 187428600 0 64 chr3 187866300 187866600 0.0104 106 chr3 187892700 187893300 0.0159 117 chr3 187894500 187894800 0.0159 117 chr3 188544600 188544900 0.0565 30 chr3 189020700 189021000 0.1641 40 chr3 191043300 191044500 0.0141 103 chr3 192138300 192138600 0.043 27 chr3 192149400 192150300 0.1233 40 chr3 192151500 192153900 0.0016 71 chr3 192739500 192741300 0.031 77 chr3 192743400 192743700 0.2295 74 chr3 192963000 192963600 0.0112 103 chr3 193888800 193889400 0.1459 86 chr3 194400600 194401200 0.0394 65 chr3 194663400 194663700 0.2229 34 chr3 195091500 195091800 0.0518 74 chr3 195093000 195093300 0.1113 84 chr3 195215400 195215700 0.0515 108 chr3 195217200 195217500 0.0515 108 chr3 195480300 195480600 0.0519 106 chr3 195483300 195485100 0.0398 201 chr3 195486900 195488400 0.0398 201 chr3 195489900 195490200 0.1126 86 chr3 195491400 195491700 0.0981 90 chr3 195497700 195498300 0.0576 162 chr3 195501000 195503700 0.0202 163 chr3 195624000 195624900 0 139 chr3 195626700 195627000 0.0673 134 chr3 195631500 195631800 0.0409 100 chr3 195635100 195635400 0.0276 93 chr3 195639000 195639300 0.0507 111 chr3 195644400 195644700 0.0046 243 chr3 195651600 195651900 0.1548 111 chr3 195681000 195681900 0 139 chr3 195723600 195725700 0.0018 111 chr3 195777000 195777300 0.1591 76 chr3 195787200 195788100 0.148 42 chr3 195816000 195816300 0.1495 35 chr3 195824400 195824700 0.0633 60 chr3 195927900 195928200 0.003 78 chr3 195936900 195937200 0.041 96 chr3 195953100 195954000 0.0002 141 chr3 195967200 195968100 0 125 chr3 195985800 195986100 0.0411 144 chr3 196271700 196272000 0.2113 37 chr3 196761300 196761600 0.0092 67 chr3 196784400 196784700 0.1014 62 chr3 197436600 197438100 0.0399 58 chr3 197623500 197623800 0.0517 139 chr3 197631600 197631900 0.1802 65 chr3 197635500 197635800 0.081 85 chr3 197644500 197644800 0.1457 75 chr3 197653200 197655000 0 150 chr3 197663100 197663400 0.0122 137 chr3 197665200 197666100 0 137 chr3 197877000 197877300 0.0438 61 chr3 198003900 198005100 0 69 chr3 198099900 198102900 0.0506 56 chr3 198141600 198141900 0.0632 64 chr3 198152400 198152700 0.0949 75 chr3 198156000 198156300 0 78 chr3 198157500 198159900 0 78 chr3 198164400 198164700 0.2447 49 chr3 198172200 198172500 0.0788 46 chr3 198175200 198189900 0 97 chr3 198191400 198235500 0 97 chr4 9900 10200 0.2781 50 chr4 13200 15000 0 152 chr4 17400 17700 0 222 chr4 19200 24900 0 222 chr4 26700 27000 0 222 chr4 28800 29100 0.0387 175 chr4 30900 35400 0 169 chr4 38700 39300 0.0266 177 chr4 43800 44100 0.1303 154 chr4 46500 50400 0.0207 163 chr4 51900 54300 0 201 chr4 55800 60300 0 201 chr4 62100 64200 0.003 211 chr4 65400 68100 0.003 211 chr4 731700 732000 0.2435 25 chr4 744900 747600 0 17 chr4 759000 759900 0 45 chr4 1278900 1279200 0.1125 34 chr4 1397700 1398300 0.0603 231 chr4 1434600 1435800 0.006 1045 chr4 1441500 1442100 0 134 chr4 1545300 1546800 0 47 chr4 1707000 1707300 0.2036 89 chr4 1827300 1827600 0.1111 52 chr4 2511300 2511600 0.0818 48 chr4 2808900 2809200 0.121 20 chr4 3227400 3227700 0.0368 55 chr4 3509400 3509700 0.0035 85 chr4 3542400 3543000 0.0374 46 chr4 3610500 3610800 0.1545 34 chr4 3613500 3613800 0.1628 33 chr4 4020000 4020900 0.0537 29 chr4 4068600 4068900 0.0963 67 chr4 5273400 5273700 0.051 70 chr4 5316300 5317500 0.0001 1156 chr4 5441700 5442000 0.0913 129 chr4 5779500 5779800 0.102 48 chr4 6879900 6880200 0.2808 98 chr4 7363500 7363800 0.0795 30 chr4 7386900 7387200 0.0186 28 chr4 7449000 7449300 0.2517 35 chr4 7835400 7835700 0.2975 54 chr4 7994100 7994700 0.0634 73 chr4 8622000 8634600 0 265 chr4 8636100 8636700 0 262 chr4 9084900 9085200 0.1985 60 chr4 9203700 9204000 0.0566 17 chr4 9211200 9211500 0 30 chr4 9213000 9247800 0 799 chr4 9249000 9273000 0 799 chr4 9322800 9368700 0 691 chr4 9614100 9617700 0 36 chr4 10827000 10827300 0.2107 45 chr4 11148000 11148300 0.0246 60 chr4 11169600 11169900 0.0876 34 chr4 11381400 11381700 0.1576 73 chr4 12509400 12510000 0.0685 62 chr4 12753300 12753600 0.1248 81 chr4 12907200 12908100 0 61 chr4 13131600 13132500 0.0683 63 chr4 13663200 13663500 0.2074 100 chr4 14011200 14013300 0.08 70 chr4 14755500 14760900 0 98 chr4 15280200 15281700 0.1033 81 chr4 15283200 15283500 0.0631 85 chr4 15791700 15792300 0.0105 85 chr4 15842400 15847500 0 97 chr4 15867600 15867900 0.073 73 chr4 16944000 16949100 0 85 chr4 17940300 17940600 0.1593 148 chr4 18175500 18175800 0.0996 72 chr4 19077900 19083900 0 94 chr4 19168800 19169100 0.1763 75 chr4 19336200 19337100 0.0499 76 chr4 19639800 19640100 0.0648 66 chr4 19949400 19950000 0.0251 81 chr4 19951200 19951500 0.0773 70 chr4 20661000 20661300 0.1187 115 chr4 21159600 21165300 0 122 chr4 22107000 22107300 0.0922 80 chr4 23099100 23099400 0.0688 57 chr4 23615100 23620500 0 104 chr4 23645100 23645400 0.1956 59 chr4 26166000 26166300 0.1502 91 chr4 26923500 26927400 0 116 chr4 27072000 27072300 0.1606 67 chr4 27376500 27381000 0.0002 79 chr4 31491300 31491600 0.2074 51 chr4 31967400 31967700 0.1382 53 chr4 32126700 32127000 0.2877 53 chr4 32360700 32361300 0.0387 95 chr4 35606400 35606700 0.2681 52 chr4 36468300 36468600 0.0354 19 chr4 36841200 36841500 0.245 22 chr4 37103700 37105200 0.0197 94 chr4 42982500 42982800 0.1021 69 chr4 43287300 43289400 0 116 chr4 43817700 43818300 0.0464 61 chr4 44505300 44505600 0.0021 24 chr4 44975100 44976900 0.0255 73 chr4 45023700 45024000 0 17 chr4 45824400 45824700 0.2008 71 chr4 46054200 46056000 0 87 chr4 46795200 46797000 0.0185 70 chr4 48052200 48057300 0 95 chr4 48363000 48364500 0.03 55 chr4 48414900 48417600 0 74 chr4 48735300 48735600 0.1055 57 chr4 49091100 49107300 0.0017 14130 chr4 49108800 49117800 0.0376 21031 chr4 49120500 49149600 0.001 43802 chr4 49150800 49151100 0.2818 3878 chr4 49152300 49153500 0.2669 16685 chr4 49154700 49156800 0.2512 2913 chr4 49189200 49189500 0.2207 118 chr4 49244100 49244400 0.1178 137 chr4 49248600 49248900 0.0829 150 chr4 49267200 49267500 0.001 262 chr4 49269600 49269900 0.001 262 chr4 49273200 49286700 0 209 chr4 49290000 49290300 0.0474 94 chr4 49291800 49292100 0.1023 222 chr4 49303800 49306200 0 304 chr4 49309200 49311000 0 178 chr4 49316700 49318200 0.0056 306 chr4 49324500 49337100 0 202 chr4 49492800 49493100 0.1612 99 chr4 49509600 49509900 0.1738 96 chr4 49521600 49522800 0.0637 144 chr4 49527600 49527900 0.0268 42 chr4 49531200 49531500 0.1157 103 chr4 49536600 49536900 0.0837 139 chr4 49540800 49541100 0.1521 104 chr4 49544400 49545000 0.0278 85 chr4 49582800 49583100 0.0197 50 chr4 49593000 49598400 0 99 chr4 49631400 49641300 0.0631 9574 chr4 49642500 49643400 0.2195 8114 chr4 49644600 49647900 0.1559 4043 chr4 49649700 49653900 0.1325 5912 chr4 49655700 49656900 0.2271 2152 chr4 49712400 49715700 0 255 chr4 49716900 49718700 0 255 chr4 49720500 49726200 0 889 chr4 49727400 49730700 0 889 chr4 49732200 49732500 0.0265 285 chr4 49733700 49753200 0 900 chr4 49754400 49786200 0 900 chr4 49787400 49920000 0 1055 chr4 49921500 50156100 0 2664 chr4 50157600 50196900 0 252 chr4 50200800 50337900 0 683 chr4 50339100 50511300 0 2518 chr4 50512500 50522700 0 3717 chr4 50523900 50637900 0 3717 chr4 50639100 50670300 0 3717 chr4 50671500 50829000 0 9189 chr4 50830500 50877300 0 9189 chr4 50878500 50970900 0 9189 chr4 50972400 51028500 0 9189 chr4 51030000 51047400 0 950 chr4 51048600 51058800 0 289 chr4 51060000 51082800 0 682 chr4 51084000 51117600 0 293 chr4 51119100 51123600 0 293 chr4 51124800 51141600 0 916 chr4 51143400 51187500 0 872 chr4 51188700 51231900 0 872 chr4 51233100 51259800 0 872 chr4 51261300 51265500 0 872 chr4 51266700 51292800 0 872 chr4 51294000 51368700 0 872 chr4 51369900 51381600 0 301 chr4 51382800 51396900 0 172 chr4 51398700 51405000 0 184 chr4 51406500 51454200 0 3549 chr4 51455400 51520500 0 3549 chr4 51521700 51534000 0 3549 chr4 51535500 51602100 0 3549 chr4 51603300 51627900 0 1139 chr4 51629100 51743100 0 928 chr4 51795000 51814500 0 361 chr4 52539000 52544100 0.01 108 chr4 52817100 52817700 0.0025 87 chr4 52818900 52822200 0.0025 87 chr4 53726400 53727000 0.0328 57 chr4 53737500 53738100 0.0118 56 chr4 55058400 55058700 0.1252 66 chr4 55620000 55624800 0 89 chr4 55847100 55847400 0.1322 85 chr4 57562500 57567600 0.0306 103 chr4 57644100 57644700 0.1123 81 chr4 57856200 57856500 0.2319 65 chr4 58021200 58022100 0.1089 83 chr4 58229400 58229700 0.1209 58 chr4 58577100 58577400 0.0011 54 chr4 58778100 58778400 0.2305 44 chr4 59079900 59084700 0 87 chr4 59519100 59519400 0.1063 35 chr4 60105000 60105600 0 88 chr4 60122400 60122700 0.005 190 chr4 60591900 60592200 0.1801 64 chr4 60703500 60703800 0.1548 23 chr4 61940100 61945500 0 89 chr4 62727000 62729400 0.0073 96 chr4 62730600 62731800 0.0162 70 chr4 63918000 63918300 0.1746 40 chr4 64237500 64237800 0.1534 70 chr4 64666500 64666800 0.1647 23 chr4 64841100 64842000 0 71 chr4 64861500 64863000 0 82 chr4 65180400 65180700 0.079 55 chr4 67179900 67180800 0.0438 62 chr4 67182000 67182300 0.0413 72 chr4 67398600 67398900 0.0077 34 chr4 67888200 67889100 0 77 chr4 67967700 67968000 0.1244 106 chr4 67970700 67971300 0.0245 88 chr4 68198100 68203800 0 43 chr4 68511000 68513100 0 72 chr4 69270300 69270600 0.0061 56 chr4 69368100 69368400 0.1465 47 chr4 69379200 69379800 0.0825 53 chr4 70329000 70334100 0 92 chr4 71103900 71105100 0.0188 90 chr4 72129300 72129900 0.0412 67 chr4 72400500 72400800 0.241 65 chr4 74717700 74723400 0 80 chr4 75128400 75128700 0.1795 78 chr4 75272400 75272700 0 39 chr4 75274200 75274800 0 39 chr4 75444600 75444900 0.0304 71 chr4 75446100 75446400 0.1314 63 chr4 76828500 76829400 0 66 chr4 76916100 76917300 0.0241 83 chr4 76918500 76918800 0.0241 83 chr4 77514300 77514600 0.1331 88 chr4 78106200 78111600 0 88 chr4 78348000 78354000 0 90 chr4 79270500 79271400 0 90 chr4 79704900 79710300 0 91 chr4 79938000 79943700 0 113 chr4 79967400 79972800 0 103 chr4 80381400 80381700 0 18 chr4 81537000 81537300 0.2199 71 chr4 82008600 82010100 0.0047 67 chr4 83184900 83185200 0.1103 44 chr4 83649600 83649900 0.1854 25 chr4 83954100 83954700 0.1521 83 chr4 84075000 84075300 0.0488 80 chr4 84130500 84130800 0.0627 73 chr4 85891500 85893600 0 69 chr4 86138100 86138700 0.0054 94 chr4 86252700 86254500 0.0085 92 chr4 87347400 87353100 0 84 chr4 87563100 87565200 0 87 chr4 87715200 87715500 0.0475 76 chr4 88161300 88161900 0.0066 97 chr4 88895700 88896000 0.2531 78 chr4 90675900 90681600 0 90 chr4 91137300 91138800 0.0605 110 chr4 91239300 91241100 0 33 chr4 91978500 91979400 0.0017 97 chr4 91980600 91983300 0 97 chr4 93609000 93611400 0 100 chr4 93612600 93612900 0 100 chr4 93638400 93643800 0 72 chr4 94839000 94839300 0.1464 71 chr4 95918400 95918700 0.1607 100 chr4 96797100 96797400 0.1224 71 chr4 96870600 96871200 0.1613 105 chr4 97669500 97669800 0.0694 33 chr4 97780200 97780500 0.0035 59 chr4 97798800 97799100 0.0266 64 chr4 98321700 98322600 0.1043 73 chr4 98591400 98591700 0.0008 126 chr4 98592900 98598000 0.0008 126 chr4 98880300 98880600 0.0172 48 chr4 100002300 100004100 0 84 chr4 100046700 100047000 0.0947 88 chr4 100718700 100719000 0.1168 76 chr4 101406600 101406900 0.0844 65 chr4 101749500 101750100 0.0212 25 chr4 102044400 102045000 0.0486 103 chr4 102205200 102210300 0.0078 71 chr4 102221100 102221400 0.0709 12 chr4 102952200 102954300 0 81 chr4 104689500 104690700 0.0812 91 chr4 104803200 104804700 0.0917 49 chr4 105307500 105308400 0.0148 73 chr4 105986700 105987000 0.1153 70 chr4 106572300 106576800 0 93 chr4 106638900 106639800 0.0341 85 chr4 107082900 107083500 0.021 106 chr4 107206800 107210400 0 82 chr4 107223000 107223300 0.1654 35 chr4 107355600 107356500 0 77 chr4 108410100 108410400 0.1102 90 chr4 109596000 109596300 0.0292 58 chr4 110407200 110407500 0.0164 82 chr4 110408700 110409000 0.0164 82 chr4 110462100 110462400 0.1324 32 chr4 110757900 110758200 0.0798 63 chr4 110871600 110871900 0.2555 65 chr4 111341400 111341700 0.0978 45 chr4 111459000 111459300 0.1175 74 chr4 111895800 111900600 0 91 chr4 111965700 111966000 0.0945 54 chr4 112092000 112092300 0.2051 67 chr4 113064900 113065200 0.09 22 chr4 113490900 113491200 0.2235 76 chr4 116204400 116206200 0.0315 57 chr4 116407800 116408100 0.199 65 chr4 116686500 116686800 0.1493 42 chr4 116775300 116775600 0.1555 83 chr4 118066200 118066500 0 17 chr4 118427100 118427400 0.1379 48 chr4 118608900 118609200 0.0108 59 chr4 118614300 118614600 0.1964 61 chr4 118621800 118622400 0.0002 65 chr4 118652700 118653000 0.1754 66 chr4 118662600 118662900 0.0507 41 chr4 119274900 119275500 0.0106 75 chr4 119276700 119278800 0.0106 75 chr4 119342700 119343000 0.0482 77 chr4 119414400 119414700 0.0644 74 chr4 119416200 119416500 0.0644 74 chr4 119417700 119418900 0 58 chr4 119421300 119421600 0.0399 48 chr4 119424000 119424300 0.0234 53 chr4 119425800 119426100 0.0234 53 chr4 119429700 119430000 0.1 78 chr4 119431200 119431800 0.0195 65 chr4 119949300 119954400 0 111 chr4 122112900 122113200 0.2885 64 chr4 122332800 122333400 0.0359 63 chr4 122497800 122498100 0.2823 65 chr4 122652900 122656500 0 83 chr4 124022700 124023900 0.0008 65 chr4 124153200 124155000 0 98 chr4 124406100 124406400 0.1821 90 chr4 125257500 125257800 0.2293 83 chr4 126928800 126932100 0.0894 103 chr4 127022400 127026300 0.0136 94 chr4 127652400 127652700 0.1134 74 chr4 128214600 128219700 0 71 chr4 129295800 129297900 0 80 chr4 130016700 130019700 0.0018 79 chr4 130425000 130425300 0.175 201 chr4 131201400 131202300 0 64 chr4 131724000 131724300 0.0596 91 chr4 131726400 131726700 0.0438 56 chr4 131733900 131734200 0.1201 164 chr4 131735400 131737200 0 167 chr4 131739300 131739600 0.065 39 chr4 131740800 131741100 0.065 39 chr4 131744100 131748900 0 113 chr4 131751900 131762100 0 298 chr4 131763600 131763900 0.1716 88 chr4 132635700 132636000 0.1058 52 chr4 132898500 132898800 0.2554 25 chr4 132948000 132949800 0.0342 82 chr4 133786800 133787700 0.0458 56 chr4 134590200 134590800 0 20 chr4 135079800 135083100 0.0008 68 chr4 135084600 135084900 0.1275 70 chr4 135452100 135452400 0.0089 57 chr4 136293600 136299300 0 100 chr4 137499000 137499300 0.0793 88 chr4 138547800 138552000 0 87 chr4 139428600 139430100 0.1132 92 chr4 139944600 139944900 0.199 73 chr4 140318400 140318700 0.1328 70 chr4 140415900 140417400 0.0857 107 chr4 140780100 140780400 0.0075 80 chr4 140895900 140896500 0.0105 67 chr4 141069000 141069600 0.1315 116 chr4 141182100 141182700 0.0018 93 chr4 141878400 141878700 0.1222 62 chr4 142137300 142137600 0.1079 38 chr4 142525500 142525800 0.0483 48 chr4 143100600 143106000 0 74 chr4 143809800 143811300 0.0115 74 chr4 143884200 143884800 0.0092 40 chr4 143886900 143887500 0.0092 40 chr4 144126600 144126900 0.1542 35 chr4 144748200 144748500 0.1056 65 chr4 144810300 144810900 0.0301 104 chr4 145372200 145374000 0 71 chr4 146353200 146353800 0.1103 74 chr4 146619000 146620500 0.0683 100 chr4 146621700 146622000 0.0683 100 chr4 146666400 146667000 0.1273 94 chr4 147452100 147452700 0.0456 59 chr4 147783900 147784200 0.0162 216 chr4 149853300 149853600 0.2632 70 chr4 150291300 150291600 0.023 83 chr4 150638700 150639000 0.0428 92 chr4 150659400 150660900 0 75 chr4 151419600 151420200 0.001 60 chr4 155282700 155285700 0 95 chr4 155538600 155538900 0 11 chr4 156048600 156049800 0.0017 105 chr4 156305100 156305400 0.0154 98 chr4 156371100 156371700 0.0072 85 chr4 158084400 158085000 0.0188 78 chr4 158086500 158086800 0.1073 93 chr4 158473800 158474400 0 49 chr4 159806400 159806700 0.2124 99 chr4 160575600 160575900 0.2249 80 chr4 160659300 160659600 0.012 82 chr4 161618100 161618400 0.1007 76 chr4 161637000 161637900 0.0261 79 chr4 161974500 161974800 0.1004 79 chr4 163212000 163212300 0.2022 122 chr4 163635000 163635300 0.0843 63 chr4 163824600 163824900 0.2087 47 chr4 164102100 164102400 0.0478 66 chr4 164104500 164104800 0.0478 66 chr4 164145900 164146200 0.1484 84 chr4 164352900 164353800 0 91 chr4 164470200 164470500 0.1398 92 chr4 164554800 164556000 0.0415 72 chr4 165958200 165958500 0.1497 67 chr4 166448100 166449300 0.0036 87 chr4 166468500 166468800 0.1263 92 chr4 166570500 166575900 0 93 chr4 166580100 166580700 0.0742 593 chr4 166755900 166761900 0 99 chr4 168155700 168156000 0.0642 273 chr4 168444000 168447000 0.0227 82 chr4 169515600 169521000 0 86 chr4 169793100 169793400 0.2198 54 chr4 170255700 170256300 0.1693 51 chr4 170436300 170436600 0.0916 69 chr4 173483700 173484000 0.2593 14 chr4 173867400 173867700 0.0509 40 chr4 174858900 174859500 0.0107 34 chr4 175207500 175208100 0.0722 83 chr4 175637400 175637700 0.0629 258 chr4 177999900 178000200 0.1479 72 chr4 180128700 180129000 0.0816 97 chr4 180944100 180945300 0.052 33 chr4 180955800 180957000 0 68 chr4 181239300 181241700 0 550 chr4 181409400 181413900 0.0672 81 chr4 181774200 181774800 0.0017 84 chr4 182780400 182780700 0.2263 48 chr4 182782500 182782800 0.1285 68 chr4 182832000 182832300 0.1349 22 chr4 182833800 182834400 0.0213 17 chr4 183336900 183337200 0 35 chr4 183640200 183640800 0.0011 58 chr4 183735000 183735300 0 22 chr4 183736800 183737100 0.1183 16 chr4 184140600 184140900 0.0896 67 chr4 184858500 184858800 0.2965 48 chr4 184966800 184967400 0.1565 48 chr4 185796600 185796900 0.214 43 chr4 186114000 186115200 0 63 chr4 186371400 186371700 0.0095 69 chr4 187304700 187305000 0 42 chr4 187948800 187949700 0 73 chr4 187955100 187956300 0 66 chr4 188151900 188154600 0.0681 21 chr4 188445000 188448900 0.0065 65 chr4 188504400 188504700 0.2662 26 chr4 188560200 188560500 0.0947 97 chr4 188741400 188741700 0.0433 58 chr4 189137400 189143100 0 72 chr4 189155400 189155700 0.1257 53 chr4 189307800 189309300 0.2123 76 chr4 189314400 189314700 0.0744 105 chr4 189332700 189333000 0 21 chr4 189400200 189400500 0.2065 106 chr4 189460800 189461100 0.0254 54 chr4 189491400 189491700 0.1042 130 chr4 189651600 189652200 0.1493 99 chr4 189669900 189676200 0 43 chr4 189680100 189680400 0 32 chr4 189681600 189685500 0 32 chr4 189688200 189688500 0 22 chr4 189690600 189691500 0 38 chr4 189692700 189695100 0 40 chr4 189696600 189699300 0 40 chr4 189700800 189701400 0 40 chr4 189835800 189837000 0.1925 1488 chr4 190022100 190022400 0.0537 176 chr4 190025400 190026900 0.0161 88 chr4 190038000 190038300 0.0262 61 chr4 190056000 190056300 0 57 chr4 190060500 190061400 0.1497 78 chr4 190065300 190099500 0 815 chr4 190101000 190106100 0 190 chr4 190113300 190113600 0.0603 187 chr4 190117800 190118100 0.0484 137 chr4 190173000 190175700 0 381 chr4 190177200 190181400 0 8733 chr4 190184400 190202400 0 157 chr4 190204200 190204500 0.2248 77 chr5 9900 12000 0 1344 chr5 43200 43500 0.1825 66 chr5 83700 84600 0.2601 23 chr5 100500 100800 0.1758 53 chr5 209100 209700 0.2422 39 chr5 212700 213000 0.1488 30 chr5 260100 262200 0.1675 54 chr5 293400 294000 0.1222 80 chr5 309600 309900 0.1876 71 chr5 344400 344700 0.1329 54 chr5 356700 358800 0 54 chr5 474300 474600 0.2955 47 chr5 487200 487500 0.2205 19 chr5 495600 495900 0.0356 15 chr5 553200 553500 0.2797 60 chr5 562500 563100 0.0341 33 chr5 564300 564600 0.0821 19 chr5 630000 632700 0 76 chr5 689100 690900 0 77 chr5 694500 695400 0 60 chr5 725400 725700 0.1159 48 chr5 734700 735600 0 76 chr5 738000 738600 0.0008 68 chr5 740100 740400 0.0008 68 chr5 747000 747300 0.0764 58 chr5 755700 756000 0.0185 72 chr5 767700 768900 0 68 chr5 781200 783000 0 70 chr5 786000 786600 0.0045 67 chr5 809700 810000 0.0297 55 chr5 825900 827100 0 67 chr5 830100 830700 0.0154 62 chr5 832500 832800 0.1663 52 chr5 839100 839400 0.0692 55 chr5 848100 848400 0.119 63 chr5 878700 879900 0 90 chr5 897600 899700 0 61 chr5 1022400 1025700 0.169 36 chr5 1070100 1070400 0.1084 19 chr5 1071600 1073100 0.0532 27 chr5 1170300 1170600 0.256 58 chr5 1272600 1272900 0.1948 54 chr5 1289400 1290900 0.1549 103 chr5 1569900 1570200 0.2046 99 chr5 1644600 1644900 0.2396 28 chr5 1713900 1715400 0.0234 80 chr5 1968300 1971300 0 83 chr5 3499200 3499500 0.1537 26 chr5 3638100 3639000 0 37 chr5 4496700 4497000 0 81 chr5 4498200 4500300 0 81 chr5 4619400 4619700 0.157 77 chr5 6774000 6774300 0.1265 16 chr5 6968400 6971100 0 64 chr5 7056900 7057500 0.0579 91 chr5 7194300 7195200 0.0135 83 chr5 7197300 7197900 0.0135 83 chr5 7233000 7234800 0.1042 105 chr5 7604100 7605900 0 69 chr5 9259800 9262200 0 88 chr5 9585300 9585900 0.0276 132 chr5 10346400 10346700 0.0411 69 chr5 12453300 12454800 0 74 chr5 13329900 13330200 0.0038 11 chr5 13416600 13422600 0 75 chr5 14346900 14347500 0.1198 265 chr5 14634300 14634600 0.0511 102 chr5 14808900 14809200 0.2506 71 chr5 15401400 15401700 0.1305 18 chr5 15906600 15912300 0 88 chr5 17101200 17101500 0.0807 92 chr5 17517900 17519400 0.0002 348 chr5 17520600 17526300 0 549 chr5 17528100 17529900 0 549 chr5 17580600 17595000 0 437 chr5 17596500 17598900 0 437 chr5 17749800 17750100 0.0438 19 chr5 17840700 17841000 0.0139 45 chr5 18474300 18474600 0.0862 86 chr5 19161600 19161900 0.0309 21 chr5 19164000 19166400 0.0042 79 chr5 20644500 20646900 0.0024 99 chr5 20754600 20754900 0.0051 54 chr5 20756700 20757300 0.0051 54 chr5 20763300 20763900 0.0015 54 chr5 20868300 20868600 0 24 chr5 21108900 21112800 0.0494 83 chr5 21299400 21299700 0.1353 85 chr5 21338100 21338400 0.1479 11 chr5 21480600 21480900 0.0802 128 chr5 21485100 21485400 0.0713 156 chr5 21490500 21490800 0.0964 139 chr5 21494700 21495000 0.0565 135 chr5 24370800 24373200 0 69 chr5 25079400 25079700 0.1359 68 chr5 25116900 25117200 0.2071 68 chr5 25207500 25207800 0.0386 94 chr5 25777200 25777500 0.0924 19 chr5 26111100 26111400 0 17 chr5 26481600 26481900 0.137 51 chr5 27426600 27426900 0.2791 31 chr5 28200900 28201200 0.1019 72 chr5 28801800 28802100 0.1748 32 chr5 29190900 29191200 0.0956 76 chr5 29486700 29489400 0 72 chr5 29877300 29877600 0.0493 92 chr5 30012600 30012900 0.0853 53 chr5 30426300 30426600 0.0546 65 chr5 30818400 30818700 0.1184 83 chr5 30822000 30822300 0.143 110 chr5 32208300 32208600 0.1095 115 chr5 32822700 32827800 0 83 chr5 32911800 32912100 0.1122 81 chr5 33126000 33126600 0.0507 109 chr5 33127800 33128100 0.0636 88 chr5 33953700 33954000 0.0497 97 chr5 34097700 34098300 0 59 chr5 34104000 34104600 0 52 chr5 34106400 34106700 0 52 chr5 34148400 34153800 0 85 chr5 34179000 34179300 0.0312 202 chr5 34183500 34183800 0.0224 150 chr5 34188900 34189200 0.0976 165 chr5 34198500 34199400 0.0113 57 chr5 34204800 34205100 0.1681 47 chr5 34231800 34232100 0.1284 79 chr5 34245300 34245600 0.0692 37 chr5 34305000 34307700 0.0008 77 chr5 36293100 36293400 0.0775 53 chr5 36321600 36321900 0.0467 29 chr5 37458000 37460400 0 64 chr5 38173800 38174100 0.0875 88 chr5 39787800 39793500 0 139 chr5 40543500 40543800 0.067 64 chr5 40545300 40546500 0.1122 101 chr5 40801200 40801500 0.0908 81 chr5 41235600 41238300 0.0707 81 chr5 41599500 41599800 0.1492 57 chr5 42165900 42167400 0 64 chr5 42737400 42738000 0.1081 71 chr5 42739200 42739800 0.001 48 chr5 42981300 42981600 0.0761 80 chr5 43086600 43087200 0.0608 81 chr5 44152500 44154300 0 94 chr5 45495000 45495300 0.0505 66 chr5 45660000 45664200 0 82 chr5 46486200 46487100 0 22 chr5 46488300 46492200 0 70 chr5 46493700 46501200 0 136 chr5 46503000 46503300 0 105 chr5 46504500 46507800 0 48 chr5 46510200 46512900 0.0017 50 chr5 46514100 46515000 0 54 chr5 46518600 46524000 0 53 chr5 46526400 46526700 0.2418 12 chr5 46528200 46529100 0 23 chr5 46530900 46533300 0 56 chr5 46535100 46538100 0 106 chr5 46541700 46542300 0.0305 35 chr5 46545300 46551300 0 98 chr5 46553100 46553700 0 43 chr5 46555500 46557000 0.0487 43 chr5 46559100 46562400 0 71 chr5 46564500 46564800 0 13 chr5 46566300 46570200 0 70 chr5 46572000 46573200 0 87 chr5 46574400 46575600 0 129 chr5 46576800 46580400 0 123 chr5 46582200 46584300 0 47 chr5 46585500 46586400 0 60 chr5 46587600 46599000 0 111 chr5 46600500 46610100 0 192 chr5 46611300 46616100 0 192 chr5 46617300 46625100 0 151 chr5 46626600 46627200 0 151 chr5 46628400 46630800 0 75 chr5 46632300 46635000 0 63 chr5 46637100 46638900 0 57 chr5 46640400 46642500 0 81 chr5 46644900 46645200 0 45 chr5 46646400 46647900 0 84 chr5 46649700 46658100 0 187 chr5 46659300 46673700 0 222 chr5 46676400 46676700 0 222 chr5 46677900 46682100 0 222 chr5 46683600 46684500 0 51 chr5 46686600 46687500 0 212 chr5 46688700 46689300 0 212 chr5 46692900 46695000 0 33 chr5 46697100 46702500 0 105 chr5 46707300 46708200 0 119 chr5 46710300 46716000 0 203 chr5 46717800 46718400 0 62 chr5 46719600 46722300 0 167 chr5 46724100 46725900 0 97 chr5 46728000 46728900 0 108 chr5 46730100 46740300 0 108 chr5 46742400 46749300 0 206 chr5 46750800 46769400 0 206 chr5 46771800 46781400 0 142 chr5 46782600 46784400 0 111 chr5 46785900 46790700 0 111 chr5 46792800 46812300 0 175 chr5 46813500 46912500 0 175 chr5 46913700 46925700 0 288 chr5 46927500 46953600 0 162 chr5 46955400 46957500 0 162 chr5 46959300 46985100 0 364 chr5 46986300 47026800 0 364 chr5 47028000 47059200 0 146 chr5 47060700 47065800 0 144 chr5 47068200 47068500 0.0486 38 chr5 47073900 47074200 0.0138 114 chr5 47076000 47079600 0 100 chr5 47083800 47087100 0 75 chr5 47089200 47089800 0 37 chr5 47092200 47095500 0 37 chr5 47097300 47098500 0.0013 67 chr5 47105100 47106900 0 135 chr5 47109600 47110800 0 135 chr5 47113500 47115000 0.0228 291 chr5 47117400 47124600 0 263 chr5 47125800 47127300 0 263 chr5 47130000 47131800 0.0068 183 chr5 47134200 47137200 0 458 chr5 47138700 47142000 0 458 chr5 47143200 47145600 0 458 chr5 47147400 47165100 0 458 chr5 47167200 47209800 0 435 chr5 47211000 47231700 0 408 chr5 47232900 47242200 0 408 chr5 47243400 47248200 0 408 chr5 47249400 47255700 0 408 chr5 47257200 47264100 0 364 chr5 47265300 47271600 0 364 chr5 47272800 47295300 0 561 chr5 47296800 47297400 0 561 chr5 47307600 47309100 0.0121 262 chr5 49591500 49591800 0 100 chr5 49601100 49601400 0.2028 3249 chr5 49602900 49603200 0.1512 1576 chr5 49609800 49617300 0 297 chr5 49626600 49627200 0.0071 398 chr5 49633500 49633800 0 23 chr5 49644000 49646400 0.0554 2508 chr5 49656000 49656600 0.1929 2584 chr5 49659000 49659300 0.282 8023 chr5 49665900 49667700 0 17908 chr5 49670400 49671300 0 37 chr5 49672800 49673400 0.0124 231 chr5 49674600 49675200 0.0124 231 chr5 49679700 49682700 0 150 chr5 49687800 49689900 0 93 chr5 49691700 49692000 0.1035 81 chr5 49695600 49695900 0.2833 91 chr5 49698600 49701300 0.0073 175 chr5 49703700 49704600 0.0073 175 chr5 49705800 49708800 0.0073 175 chr5 49712700 49714500 0.0013 111 chr5 49716600 49716900 0.1228 59 chr5 49719000 49720200 0 86 chr5 49723800 49725300 0.0338 448 chr5 49726500 49727700 0 83 chr5 49729800 49730400 0.0054 107 chr5 49734900 49735800 0 321 chr5 49740900 49741200 0.0106 126 chr5 49743600 49746600 0.0222 445 chr5 49748100 49748700 0.0222 445 chr5 49750500 49752600 0.0873 141 chr5 49755300 49755600 0.1234 318 chr5 49756800 49758300 0.1234 318 chr5 49759500 49761300 0.0627 136 chr5 49762800 49763100 0.0685 30 chr5 49764300 49764900 0.2015 286 chr5 49767000 49768200 0.2055 143 chr5 49771500 49772700 0.1999 101 chr5 49774200 49779300 0.0107 356 chr5 49783800 49784100 0.0571 233 chr5 49787100 49787700 0.154 1046 chr5 49789800 49790100 0.0765 38 chr5 49791300 49791900 0.199 87 chr5 49793400 49794000 0.1036 248 chr5 49796100 49800000 0.0105 238 chr5 49804500 49804800 0.1547 81 chr5 49806300 49806900 0.0191 245 chr5 49808700 49809000 0.2353 18 chr5 49811700 49812000 0.1878 40 chr5 49815300 49815600 0.1517 72 chr5 49817100 49817400 0.1745 34 chr5 49818900 49821900 0 90 chr5 49823400 49824900 0.2683 579 chr5 49826700 49827000 0.2282 91 chr5 49828200 49828500 0.1383 502 chr5 49833000 49833900 0.0622 29 chr5 49837200 49837500 0.1615 174 chr5 49839000 49841100 0.0205 636 chr5 49842600 49843200 0.1452 65 chr5 49844400 49845000 0.1059 26 chr5 49847100 49852500 0.114 274 chr5 49856100 49856400 0.0593 124 chr5 49859700 49860000 0.1464 18 chr5 49861200 49861800 0.0362 697 chr5 49863600 49864500 0.0362 697 chr5 49865700 49866900 0.0795 181 chr5 49869000 49872000 0 367 chr5 49873200 49875300 0.0236 98 chr5 49876800 49877400 0.0236 98 chr5 49880100 49880400 0.1172 316 chr5 49882200 49884900 0.0056 354 chr5 49886400 49887900 0.0056 354 chr5 49890600 49890900 0.1683 135 chr5 49893900 49895400 0 265 chr5 49901100 49903200 0 148 chr5 49905000 49906800 0.112 147 chr5 49908300 49911000 0 116 chr5 49912500 49913400 0 244 chr5 49915200 49916100 0.0926 270 chr5 49917300 49917900 0.1104 517 chr5 49921500 49924500 0.0242 845 chr5 49925700 49926000 0.17 29 chr5 49927500 49928100 0.1362 130 chr5 49930200 49932900 0 178 chr5 49934100 49934400 0 54 chr5 49936800 49940400 0.0235 161 chr5 49942200 49942500 0.0604 130 chr5 49944300 49948800 0.0314 492 chr5 49951500 49952400 0.092 124 chr5 49953600 49954200 0.092 124 chr5 49955400 49956600 0.0192 563 chr5 49959000 49960200 0.1907 59 chr5 49962300 49962600 0.2665 386 chr5 49964400 49969500 0.0755 497 chr5 49971000 49971900 0.2606 101 chr5 49977000 49977300 0.0644 571 chr5 49979100 49980600 0.0644 571 chr5 49981800 49983900 0.033 108 chr5 49986000 49989600 0.0388 320 chr5 49995300 49995600 0.0855 125 chr5 49997700 49999800 0.0347 492 chr5 50001000 50004000 0.0658 225 chr5 50005800 50006700 0.0709 329 chr5 50009700 50010300 0.0959 243 chr5 50011500 50012100 0.1425 45 chr5 50014800 50016600 0.0577 285 chr5 50018700 50020800 0.051 320 chr5 50023500 50026200 0.0176 221 chr5 50028300 50028600 0.0054 254 chr5 50030100 50030400 0.0054 254 chr5 50032800 50033400 0 211 chr5 50034600 50035200 0 211 chr5 50037300 50037600 0.0881 242 chr5 50039100 50039700 0.0491 48 chr5 50040900 50042100 0 609 chr5 50043600 50045700 0 609 chr5 50051400 50053800 0.1304 297 chr5 50057100 50059200 0.0547 567 chr5 50110200 50134200 0 617 chr5 50135700 50136600 0 617 chr5 50138100 50141700 0.0018 348 chr5 51254700 51255000 0.0716 86 chr5 51332700 51333900 0.0513 93 chr5 51335100 51335400 0.1176 79 chr5 52019100 52019400 0.1668 93 chr5 52090500 52090800 0.1042 87 chr5 52935900 52936200 0.2624 31 chr5 54182100 54182400 0.1067 59 chr5 55571400 55571700 0.1956 83 chr5 55695600 55695900 0.1793 54 chr5 55753800 55754100 0.134 66 chr5 57354600 57354900 0.0187 86 chr5 57473100 57475200 0.0505 72 chr5 58384200 58390200 0 89 chr5 58597500 58597800 0.1233 12 chr5 59284800 59285100 0.0048 67 chr5 59396400 59396700 0.2892 29 chr5 62799900 62800200 0.2163 48 chr5 62818200 62822700 0 73 chr5 63943200 63943500 0.0725 61 chr5 64466700 64470300 0 68 chr5 64477800 64481100 0 69 chr5 64710000 64710300 0.0028 73 chr5 64711500 64712100 0.0028 73 chr5 65164800 65169300 0 86 chr5 67822200 67822500 0.1797 74 chr5 67892400 67892700 0.081 76 chr5 68008200 68009100 0.0167 63 chr5 69534300 69535500 0 56 chr5 69537300 69546900 0 56 chr5 69550800 69553500 0 44 chr5 69555900 69557100 0 68 chr5 69558300 69558600 0 68 chr5 69565200 69565500 0.0562 38 chr5 69566700 69579600 0 89 chr5 69581700 69601500 0 89 chr5 69603300 69605100 0 101 chr5 69606300 69623700 0 101 chr5 69624900 69627300 0 101 chr5 69628800 69631800 0 169 chr5 69635700 69766500 0 388 chr5 69768000 69791400 0 388 chr5 69792600 69942600 0 388 chr5 69944400 69992400 0 92 chr5 69993600 69996600 0 92 chr5 69999000 70002000 0 73 chr5 70003200 70009500 0 84 chr5 70010700 70019100 0 84 chr5 70020300 70028100 0 90 chr5 70029900 70040700 0 89 chr5 70042200 70043400 0 89 chr5 70044600 70046400 0 82 chr5 70049400 70074300 0 89 chr5 70077900 70079100 0 89 chr5 70081200 70083300 0 89 chr5 70085700 70095600 0 95 chr5 70096800 70102200 0 95 chr5 70103700 70130400 0 95 chr5 70131900 70156500 0 95 chr5 70158300 70182300 0 141 chr5 70183500 70219200 0 141 chr5 70220700 70263600 0 141 chr5 70264800 70306800 0 141 chr5 70309800 70319100 0 141 chr5 70320600 70377000 0 141 chr5 70378200 70401000 0 141 chr5 70402500 70434000 0 108 chr5 70435800 70442100 0 108 chr5 70444500 70508400 0 225 chr5 70511700 70546200 0 225 chr5 70548600 70629000 0 274 chr5 70630200 70630800 0 274 chr5 70632000 70635600 0 274 chr5 70636800 70779900 0 274 chr5 70781100 70783800 0.0009 209 chr5 70785900 70811700 0 260 chr5 70812900 70855500 0 260 chr5 70856700 70867500 0 260 chr5 70868700 70871700 0 260 chr5 70874100 70922400 0 91 chr5 70923600 70949700 0 91 chr5 70953300 70954800 0 79 chr5 70956900 70959900 0.0034 81 chr5 70961100 70977000 0 94 chr5 70978500 71007000 0 95 chr5 71016600 71031900 0 86 chr5 71034600 71035800 0 73 chr5 71037000 71039100 0 73 chr5 71040300 71045400 0 73 chr5 71046900 71052900 0 73 chr5 71055600 71055900 0 74 chr5 71057700 71062800 0 74 chr5 71064300 71077200 0 80 chr5 71081700 71094900 0 63 chr5 71098800 71102100 0 76 chr5 71104800 71105700 0 102 chr5 71106900 71134500 0 102 chr5 71136000 71138400 0 102 chr5 71140200 71151000 0 103 chr5 71153400 71156700 0 103 chr5 71159400 71164200 0 103 chr5 71165700 71166300 0.0716 57 chr5 71169000 71182500 0 421 chr5 71183700 71230500 0 421 chr5 71231700 71272200 0 218 chr5 71273400 71281200 0 218 chr5 71282700 71299800 0 218 chr5 71303100 71317200 0 91 chr5 71318400 71318700 0 91 chr5 71319900 71321100 0 91 chr5 71323800 71324400 0.0033 75 chr5 71325900 71326200 0.0862 106 chr5 71329800 71343300 0 116 chr5 71344500 71346000 0.0008 65 chr5 71347200 71352600 0 66 chr5 71353800 71357700 0 89 chr5 71358900 71359200 0.0569 30 chr5 71362200 71362500 0.0524 55 chr5 71607900 71608500 0.1122 69 chr5 71851800 71852700 0.0451 54 chr5 75606000 75606600 0.0197 76 chr5 75642600 75647700 0.0048 82 chr5 75882900 75883200 0.2255 76 chr5 76170300 76172700 0.0479 85 chr5 77042700 77043300 0.2174 65 chr5 77794500 77794800 0.071 65 chr5 78619800 78620100 0.0901 45 chr5 79096800 79097100 0.1367 54 chr5 79779000 79784700 0 108 chr5 81033300 81033600 0.0579 59 chr5 81054300 81054900 0.1548 81 chr5 81596400 81596700 0.0147 72 chr5 81617100 81621900 0 87 chr5 82126200 82126500 0.0052 58 chr5 82134000 82134900 0 70 chr5 82140600 82140900 0.132 57 chr5 82369800 82371600 0.0023 77 chr5 82430100 82430700 0.0092 91 chr5 82505100 82506000 0.0797 89 chr5 82867500 82867800 0.2191 42 chr5 82938000 82938300 0.0262 50 chr5 83316900 83319900 0 64 chr5 83458500 83458800 0.0807 97 chr5 84176100 84176400 0.2734 213 chr5 85638900 85639500 0.0641 60 chr5 85662600 85663200 0.0491 80 chr5 86511000 86516100 0.0083 94 chr5 87091500 87091800 0.0578 72 chr5 87470700 87471000 0.0274 51 chr5 88904100 88904400 0.1865 37 chr5 90075300 90075900 0.1149 68 chr5 90212400 90212700 0.1132 55 chr5 90443400 90443700 0.0229 85 chr5 92194800 92195100 0.1237 64 chr5 92197500 92198100 0.0126 88 chr5 92300400 92300700 0.0818 55 chr5 93213900 93214800 0.0468 93 chr5 93262200 93264300 0.0976 86 chr5 93265800 93266100 0.1218 51 chr5 95492400 95492700 0.0796 251 chr5 96104700 96105000 0.0657 53 chr5 96106800 96107100 0.2258 58 chr5 97518000 97518600 0.1031 80 chr5 98548500 98548800 0.1408 25 chr5 98550600 98550900 0.0426 65 chr5 98552100 98552400 0.0426 65 chr5 99401700 99402000 0.0156 50 chr5 99410100 99411600 0.0368 67 chr5 99426000 99426300 0.1204 13 chr5 99427500 99430500 0 74 chr5 99498900 99499800 0 67 chr5 99518400 99518700 0.151 66 chr5 99537600 99537900 0.0409 48 chr5 99539100 99539400 0.0805 51 chr5 99576600 99576900 0.1045 66 chr5 99691500 99692400 0.1197 74 chr5 99735300 99735600 0.0489 70 chr5 99857100 99858300 0.0088 74 chr5 99859800 99861600 0.0088 74 chr5 99898200 99898500 0.1137 45 chr5 100058100 100058400 0.0352 55 chr5 100062300 100062600 0.1254 72 chr5 100075500 100076100 0.0021 71 chr5 100335300 100338300 0 67 chr5 100340400 100340700 0.1857 60 chr5 100349400 100349700 0.0038 37 chr5 100353600 100355400 0.0418 67 chr5 100363200 100363500 0.0095 50 chr5 100375500 100375800 0.1989 77 chr5 100396200 100396500 0.0362 52 chr5 100423800 100424100 0.202 20 chr5 101302800 101303400 0.1365 81 chr5 102132000 102136800 0 82 chr5 102190500 102194100 0.0006 76 chr5 102675600 102675900 0.1402 42 chr5 103050600 103050900 0.0678 44 chr5 104359800 104360400 0.0252 73 chr5 104447100 104447700 0.0007 90 chr5 104450700 104451000 0.1225 34 chr5 104518800 104524500 0 98 chr5 105513300 105513900 0.1262 74 chr5 105518100 105518700 0.0381 77 chr5 106148400 106149000 0 87 chr5 109259400 109265100 0 95 chr5 109341600 109341900 0.2965 42 chr5 109532100 109532400 0.2858 38 chr5 110990100 110990400 0.1583 44 chr5 111302400 111308100 0.0015 102 chr5 114231000 114231300 0.0085 47 chr5 115411800 115412100 0.1216 57 chr5 115421400 115421700 0.1101 67 chr5 117543600 117543900 0.1526 59 chr5 118046100 118046400 0.0367 25 chr5 118542000 118542300 0.1264 91 chr5 119685000 119687100 0 74 chr5 119689200 119689500 0 74 chr5 120195300 120195600 0.1535 77 chr5 120311700 120312000 0.062 56 chr5 121411800 121412100 0.0899 46 chr5 121952100 121953000 0.0038 77 chr5 121996200 121996800 0.0444 79 chr5 122240700 122244900 0.0007 116 chr5 122379000 122379600 0.07 74 chr5 123236700 123238500 0 58 chr5 125360400 125362200 0.0051 87 chr5 125364000 125364300 0.011 43 chr5 125616000 125616600 0.0098 187 chr5 126164100 126164400 0.2845 17 chr5 126528900 126529200 0.2762 89 chr5 126893700 126894000 0.0887 71 chr5 126905100 126905400 0.055 79 chr5 127734900 127735200 0.1571 64 chr5 127748100 127748400 0.0279 80 chr5 127879500 127879800 0.02 69 chr5 128295600 128295900 0.0913 78 chr5 129550200 129550500 0.1838 30 chr5 129578100 129578400 0.1812 61 chr5 130265400 130265700 0.1663 107 chr5 130733700 130734000 0.1353 73 chr5 130735500 130737300 0.0187 71 chr5 131778600 131778900 0.2606 60 chr5 132514500 132519600 0 81 chr5 133109400 133109700 0.1967 49 chr5 133583700 133589100 0 91 chr5 133626000 133626300 0.2195 11 chr5 134557500 134558400 0.0044 56 chr5 134881200 134881800 0.0445 71 chr5 137045400 137050200 0 94 chr5 139005600 139007100 0.0097 90 chr5 139083600 139084500 0 75 chr5 140849100 140849400 0.0917 68 chr5 142041900 142042200 0.068 73 chr5 142043700 142044000 0.0436 45 chr5 142075800 142077000 0 48 chr5 144069900 144071100 0.1212 43 chr5 144551400 144553200 0.0549 63 chr5 144713700 144717600 0.0195 87 chr5 144891000 144892200 0.106 72 chr5 145149900 145150800 0 71 chr5 145183200 145183800 0 20 chr5 145372800 145373100 0.0903 44 chr5 145420500 145420800 0.0792 70 chr5 146610000 146615400 0 80 chr5 146679000 146679900 0.0167 77 chr5 147013500 147013800 0.0855 58 chr5 147717000 147717300 0.0878 70 chr5 147941700 147942000 0.135 76 chr5 147945600 147945900 0.1757 89 chr5 147958800 147960300 0.0329 73 chr5 148022700 148023900 0.0146 75 chr5 148233300 148233600 0.0872 24 chr5 148252500 148252800 0 38 chr5 148612500 148612800 0.1717 72 chr5 152076900 152082900 0 80 chr5 152209500 152209800 0.0019 73 chr5 152211000 152212800 0.0019 73 chr5 152340300 152342100 0 65 chr5 152343300 152345400 0 73 chr5 152742300 152743800 0.1046 50 chr5 152886600 152891400 0 105 chr5 152940000 152940300 0.0218 76 chr5 153036900 153037200 0.1133 78 chr5 153071400 153072000 0 84 chr5 153073200 153075900 0 84 chr5 155612100 155612400 0.0378 47 chr5 155615400 155615700 0.1826 42 chr5 155660100 155660700 0.0799 72 chr5 156062100 156067200 0 82 chr5 156657900 156659400 0.001 90 chr5 156660600 156661500 0 114 chr5 156663900 156664800 0.0622 62 chr5 156666000 156666600 0.0104 80 chr5 157437000 157438800 0.0034 85 chr5 159036600 159037500 0.0043 70 chr5 160710000 160714500 0 85 chr5 160875000 160876200 0.0064 67 chr5 160878900 160879200 0.0668 75 chr5 161712000 161712300 0.0739 126 chr5 162906300 162906600 0.0231 36 chr5 163059900 163060200 0.0102 41 chr5 166141800 166142100 0.0351 58 chr5 166144200 166144800 0.0086 84 chr5 166146000 166146900 0.0136 111 chr5 166420800 166421400 0.0059 89 chr5 166967100 166972800 0 89 chr5 167860500 167860800 0.1111 75 chr5 168145200 168145500 0.0537 81 chr5 168717000 168717300 0.0701 68 chr5 168741900 168742200 0.1263 60 chr5 169665000 169665300 0.092 20 chr5 170242200 170242500 0.1802 59 chr5 171059700 171060300 0.0373 68 chr5 171084600 171086100 0 84 chr5 171404400 171404700 0.12 51 chr5 173403000 173408700 0 87 chr5 173462700 173463000 0.124 37 chr5 174018900 174019200 0.1473 88 chr5 175137900 175138200 0.071 37 chr5 175401600 175402200 0.0277 147 chr5 175917600 175918500 0.0621 69 chr5 175941300 175941600 0.1872 41 chr5 175946700 175948200 0.0141 68 chr5 175949400 175949700 0.0141 68 chr5 175954500 175954800 0.0734 61 chr5 175956000 175956900 0 66 chr5 175964700 175965000 0.1657 56 chr5 175969200 175969800 0.0158 58 chr5 175972500 175973100 0 54 chr5 175974900 175975500 0.0031 54 chr5 175977900 175981800 0 79 chr5 175983000 175990200 0 79 chr5 175991400 175998600 0 63 chr5 176000400 176000700 0 63 chr5 176014800 176021700 0 85 chr5 176025000 176032500 0 72 chr5 176033700 176034600 0 109 chr5 176046000 176047800 0.0065 71 chr5 176059200 176060700 0.0011 52 chr5 176063100 176063400 0.0118 40 chr5 176065800 176066100 0.1879 44 chr5 176067600 176067900 0.0076 58 chr5 176075100 176075400 0.1269 82 chr5 176082000 176082600 0.0073 48 chr5 176089200 176090700 0 62 chr5 176092800 176096400 0 76 chr5 176097900 176098500 0 66 chr5 176102100 176102700 0 77 chr5 176106000 176107200 0.0628 76 chr5 176111100 176113500 0 76 chr5 176117400 176118300 0.0331 59 chr5 176123400 176123700 0.0613 64 chr5 176196300 176196600 0.1025 65 chr5 176215800 176216100 0.0348 68 chr5 176227500 176227800 0.0034 50 chr5 176238900 176241300 0 64 chr5 176244000 176244300 0.0114 61 chr5 176266500 176267100 0.0347 60 chr5 176278200 176278800 0.0284 67 chr5 176871300 176871600 0.1837 30 chr5 176960700 176963100 0.0085 60 chr5 177517800 177518700 0 28 chr5 177643800 177645600 0.0012 49 chr5 177666300 177666600 0.0268 69 chr5 177671700 177672000 0.0097 68 chr5 177682500 177683100 0 68 chr5 177694500 177694800 0.0395 67 chr5 177714600 177714900 0.0171 62 chr5 177717900 177718200 0.0116 53 chr5 177719700 177721500 0 69 chr5 177724500 177724800 0.067 81 chr5 177726600 177726900 0.067 81 chr5 177731700 177732000 0.0062 72 chr5 177735300 177736200 0 74 chr5 177739800 177740400 0.0004 68 chr5 177741600 177745500 0 79 chr5 177748200 177748500 0.1482 69 chr5 177752100 177752400 0.0087 62 chr5 177760500 177760800 0.0034 77 chr5 177762000 177763500 0.0034 77 chr5 177766800 177767400 0.0197 63 chr5 177772500 177778200 0 102 chr5 177780900 177781200 0.0914 55 chr5 177796200 177796800 0.0089 66 chr5 177798600 177799200 0.0056 68 chr5 177801000 177801300 0.006 33 chr5 177802800 177803100 0 19 chr5 177809700 177819300 0 75 chr5 177822300 177830700 0 77 chr5 177833700 177834300 0.0272 75 chr5 177843000 177843300 0.2214 56 chr5 177845100 177845700 0.05 58 chr5 177859500 177865800 0 74 chr5 177868200 177868800 0 59 chr5 177870600 177871200 0 59 chr5 177873900 177874500 0 59 chr5 177878700 177880200 0.119 65 chr5 177885300 177887700 0 76 chr5 177888900 177889500 0 76 chr5 177894000 177894300 0.0651 67 chr5 177895500 177896100 0.0055 74 chr5 177900600 177902700 0 55 chr5 177904200 177905700 0 36 chr5 177909600 177909900 0.0199 20 chr5 177920400 177921600 0.0381 57 chr5 177929100 177929400 0.1378 46 chr5 177942300 177942900 0.0066 59 chr5 177948900 177949200 0.0846 28 chr5 177961800 177962400 0.0048 138 chr5 178006200 178006500 0.1297 42 chr5 178013100 178013700 0.0391 78 chr5 178016400 178017000 0.0768 75 chr5 178020000 178023300 0.0038 75 chr5 178031400 178031700 0.0525 62 chr5 178032900 178033200 0.0596 63 chr5 178035000 178036500 0.0798 78 chr5 178038600 178039200 0.0339 63 chr5 178045800 178046100 0.0563 61 chr5 178050000 178051500 0.0101 68 chr5 178052700 178053300 0.0582 63 chr5 178095600 178096500 0.1855 23 chr5 178395000 178396800 0 29 chr5 178525200 178525800 0.0081 146 chr5 178900500 178900800 0.1652 43 chr5 179447100 179448900 0 65 chr5 179502900 179503500 0.0016 68 chr5 179517000 179517300 0.2135 58 chr5 179634300 179637000 0 83 chr5 179644200 179644500 0.0847 22 chr5 179646300 179646600 0.0184 76 chr5 179655600 179658300 0 90 chr5 180486000 180486300 0.1785 43 chr5 180617400 180617700 0.2608 41 chr5 180903300 180903900 0.0677 77 chr5 180905400 180905700 0.0677 77 chr5 181089000 181091400 0 90 chr5 181096200 181098000 0 70 chr5 181101600 181103400 0 74 chr5 181293000 181294800 0 80 chr5 181296000 181299300 0 80 chr5 181302900 181303200 0 88 chr5 181304700 181356300 0 88 chr5 181357500 181361400 0 156 chr5 181362600 181473000 0 156 chr5 181474200 181478400 0 156 chr6 60000 90000 0 67 chr6 91200 92700 0 67 chr6 93900 95400 0 48 chr6 97200 100200 0.0025 48 chr6 101700 102000 0 84 chr6 103200 120900 0 84 chr6 122700 123900 0.007 63 chr6 126000 126600 0.007 63 chr6 127800 131400 0 73 chr6 132600 144000 0 73 chr6 145200 146100 0 73 chr6 519300 520500 0 53 chr6 601500 602400 0 84 chr6 861900 863700 0 432 chr6 909600 910500 0 37 chr6 1142100 1142400 0.2636 118 chr6 1319100 1320900 0 42 chr6 1432200 1432500 0.0582 62 chr6 2418000 2423700 0 87 chr6 3090900 3093900 0 43 chr6 3153900 3154500 0.1225 75 chr6 3225000 3225300 0.0508 68 chr6 4194000 4194300 0.0713 65 chr6 4329300 4329600 0.0691 69 chr6 5037300 5037600 0.1734 66 chr6 6142500 6143400 0.1151 93 chr6 6214800 6215100 0.0684 73 chr6 6261600 6262200 0.0069 196 chr6 7717200 7717500 0.1653 36 chr6 8216700 8217300 0.0513 69 chr6 8567100 8567400 0.1709 64 chr6 8770800 8775300 0 80 chr6 8827800 8828100 0.265 61 chr6 9813000 9813300 0.0706 63 chr6 9970200 9970500 0.0997 79 chr6 15188700 15189000 0.2131 49 chr6 15984000 15984300 0.2923 39 chr6 16013700 16014000 0.1394 94 chr6 16860900 16861500 0 87 chr6 17435100 17435400 0.2116 72 chr6 18910800 18912900 0 74 chr6 19347300 19347600 0.018 23 chr6 19765200 19770900 0 74 chr6 20615100 20615700 0.0346 61 chr6 20959500 20959800 0.0644 850 chr6 22176300 22177200 0.0258 64 chr6 22930200 22930500 0.1429 23 chr6 23232900 23233200 0.1267 66 chr6 23948700 23949300 0 25 chr6 24469200 24469500 0.1092 54 chr6 24811800 24817500 0 88 chr6 26634600 26635800 0.0151 62 chr6 26637000 26637900 0.0305 69 chr6 26671200 26709600 0 82 chr6 26711100 26738700 0 82 chr6 26746800 26747100 0.1105 46 chr6 26751900 26752500 0 48 chr6 26763000 26790900 0 76 chr6 26792100 26830500 0 76 chr6 26844000 26844300 0.0693 55 chr6 26885100 26885400 0.0762 131 chr6 27484200 27486000 0.1521 68 chr6 28026000 28026300 0.074 115 chr6 29115600 29115900 0.1653 84 chr6 29123100 29123400 0.004 60 chr6 29194200 29194800 0.0054 59 chr6 29717700 29719800 0 28 chr6 29847300 29847600 0.1708 19 chr6 29933400 29933700 0 21 chr6 30249600 30249900 0.1664 54 chr6 31244100 31245300 0 45 chr6 31454100 31454400 0.088 49 chr6 31486200 31486500 0.1163 71 chr6 31815900 31817400 0 72 chr6 31828200 31829400 0 75 chr6 31854600 31854900 0.1357 42 chr6 31980900 31995600 0 81 chr6 31996800 32004300 0 78 chr6 32009100 32028300 0 80 chr6 32030400 32036700 0 78 chr6 32041800 32045700 0 75 chr6 32579700 32580000 0.0357 15 chr6 33484500 33484800 0.0464 77 chr6 33525600 33525900 0.257 65 chr6 34397100 34397400 0.0343 33 chr6 35136600 35136900 0.0616 20 chr6 35827500 35828700 0.0077 71 chr6 38963700 38964300 0 60 chr6 39456000 39456300 0.0572 71 chr6 39458700 39459900 0 69 chr6 41985600 41985900 0.1198 29 chr6 42286500 42286800 0.1004 64 chr6 44752800 44753100 0.1215 83 chr6 44871300 44876400 0 107 chr6 45066600 45066900 0.1079 82 chr6 45673800 45674400 0.0291 96 chr6 46213800 46214400 0.0346 73 chr6 47051100 47051400 0.2321 52 chr6 47505900 47506500 0.105 74 chr6 47889000 47889300 0.1394 47 chr6 48365100 48367200 0.0464 77 chr6 48739200 48740400 0.0812 107 chr6 48741900 48742200 0.095 58 chr6 48901500 48902100 0.0042 79 chr6 49765800 49766100 0.1187 92 chr6 50894400 50894700 0.2071 54 chr6 51875100 51880500 0 94 chr6 51981900 51982200 0.2871 15 chr6 52757100 52757400 0.0548 47 chr6 52798500 52798800 0.1698 45 chr6 54838500 54839100 0.0611 79 chr6 54963900 54964200 0.1982 26 chr6 54966000 54966600 0.0537 82 chr6 54999600 54999900 0.0547 18 chr6 55365300 55365600 0.1562 63 chr6 55366800 55367100 0.1145 83 chr6 55543200 55543500 0.0161 132 chr6 55648500 55648800 0.2939 60 chr6 56893800 56894100 0.027 43 chr6 56895300 56895900 0.0002 42 chr6 57047100 57048000 0 71 chr6 57090600 57091500 0 69 chr6 57404100 57404400 0.1455 14 chr6 57798300 57799500 0 50 chr6 57821100 57822300 0.0498 47 chr6 58449900 58453500 0 2483 chr6 58554000 58554300 0.085 58 chr6 58556400 58594500 0 677 chr6 58595700 59417400 0 4133 chr6 59418600 59508000 0 4133 chr6 59509500 59652000 0 4686 chr6 59653500 59829900 0 4686 chr6 60280500 60280800 0.0624 36 chr6 60306300 60306900 0 62 chr6 60459000 60459300 0.1869 58 chr6 60510600 60510900 0.0481 60 chr6 60533700 60534300 0 43 chr6 60704100 60704400 0.1224 68 chr6 60861300 60861900 0.0555 82 chr6 60863100 60863400 0.0555 82 chr6 61323000 61356900 0 78 chr6 61425300 61473300 0 94 chr6 61480800 61492800 0 38 chr6 61673400 61673700 0.1961 63 chr6 64942200 64942500 0.1266 48 chr6 65256600 65256900 0.0787 82 chr6 65304300 65304900 0.1183 78 chr6 65550600 65552100 0 66 chr6 66078000 66078300 0.0806 60 chr6 66603000 66603300 0.1241 63 chr6 68432400 68433000 0.0257 62 chr6 68517900 68518200 0.0584 66 chr6 69519600 69520500 0.1506 60 chr6 70011000 70016100 0 93 chr6 71128500 71128800 0.1723 76 chr6 72571200 72575700 0 96 chr6 72989100 72994500 0 90 chr6 73436400 73436700 0.0533 563 chr6 73920300 73920600 0.1106 85 chr6 74098200 74099400 0.1272 54 chr6 74155800 74156700 0 88 chr6 74209200 74209800 0.2002 86 chr6 74247000 74247300 0.1077 44 chr6 75248100 75248400 0.0856 22 chr6 76109100 76109400 0.0177 84 chr6 76964400 76964700 0.0584 63 chr6 76977000 76977300 0.0957 65 chr6 77043900 77044500 0.0338 73 chr6 77591100 77591400 0.0826 12 chr6 77717100 77718300 0 120 chr6 77719800 77721900 0 120 chr6 77723400 77726100 0 120 chr6 78859200 78859500 0.0289 68 chr6 80571000 80571600 0.0334 69 chr6 80802300 80803800 0.0437 83 chr6 80917200 80917500 0 89 chr6 80919000 80920800 0 89 chr6 82392300 82392600 0.1679 45 chr6 82394100 82394400 0.0308 24 chr6 82560600 82561200 0.0628 69 chr6 83318400 83319000 0.0844 70 chr6 83334300 83339700 0 75 chr6 83798100 83798400 0.0641 86 chr6 83800200 83800500 0.0656 77 chr6 84608700 84609000 0 53 chr6 84610200 84614400 0 53 chr6 84628800 84629100 0.0817 53 chr6 84630300 84630600 0.0817 53 chr6 85986300 85986600 0 68 chr6 85999200 86004600 0 84 chr6 86052600 86052900 0.1047 23 chr6 86646900 86647800 0.0019 81 chr6 86667300 86667600 0.2147 56 chr6 86811000 86811600 0.1674 76 chr6 87327600 87327900 0.1709 92 chr6 87750600 87750900 0.0526 66 chr6 88381800 88382100 0.0092 87 chr6 88947000 88949100 0.0183 94 chr6 89225400 89230200 0 80 chr6 93636000 93636300 0.1458 66 chr6 93865800 93871500 0.0015 112 chr6 94198200 94203900 0 71 chr6 95665500 95665800 0 56 chr6 95667000 95667300 0 56 chr6 95760600 95762700 0.0022 88 chr6 95981100 95983800 0.053 109 chr6 98417100 98417400 0.1534 66 chr6 98420100 98421000 0.0038 79 chr6 99825300 99825600 0.0017 104 chr6 99828300 99829200 0.0591 58 chr6 100200000 100200300 0.0371 68 chr6 100201800 100202100 0.0995 75 chr6 100358700 100359000 0.1343 71 chr6 102464100 102464400 0.0748 49 chr6 102755100 102755400 0.0616 69 chr6 103654800 103655100 0.0509 57 chr6 103710000 103710300 0.0353 85 chr6 103711500 103714500 0.0353 85 chr6 104452800 104456100 0 98 chr6 104490900 104494500 0 84 chr6 105823800 105824100 0.1556 17 chr6 106402200 106402500 0.0801 70 chr6 106720800 106721100 0.0561 63 chr6 107783100 107783400 0.0725 50 chr6 107858100 107858400 0.0829 79 chr6 107859600 107859900 0.0914 95 chr6 109246500 109247700 0.0965 58 chr6 109249500 109249800 0.0859 65 chr6 109621200 109621500 0.0213 67 chr6 110155800 110158200 0 69 chr6 111904200 111904500 0.1098 75 chr6 111906900 111907500 0.0385 75 chr6 112508400 112508700 0.0576 65 chr6 112704000 112709100 0 104 chr6 112815000 112818000 0 70 chr6 112872300 112872600 0.0398 83 chr6 112915800 112918200 0.0019 74 chr6 113228100 113229000 0.0377 64 chr6 113535900 113536200 0.0703 80 chr6 113606100 113607300 0.0141 78 chr6 114722400 114723000 0 65 chr6 114801600 114802200 0.0396 63 chr6 115010700 115011000 0.0367 58 chr6 115085400 115085700 0.1162 62 chr6 115579200 115579500 0.053 66 chr6 115960800 115965900 0 127 chr6 116822100 116822400 0.134 70 chr6 117092400 117093000 0.1095 85 chr6 117102300 117108000 0 69 chr6 117246600 117247200 0 35 chr6 117250200 117250500 0.1514 68 chr6 121162800 121168200 0 97 chr6 122847900 122848500 0.1044 74 chr6 122889300 122889600 0.079 112 chr6 123180900 123181500 0.0749 61 chr6 123445500 123445800 0.0321 80 chr6 123475500 123475800 0.1435 78 chr6 124165800 124166100 0.0637 92 chr6 124177800 124178100 0.1002 20 chr6 124728300 124728600 0.0543 57 chr6 124840200 124841100 0.0048 70 chr6 125288700 125289000 0.1746 219 chr6 125319300 125321700 0.0003 82 chr6 125387700 125389800 0 54 chr6 127596000 127596300 0.1972 79 chr6 128668800 128669100 0.2237 55 chr6 128906100 128906400 0.0526 87 chr6 128998500 129004200 0 86 chr6 129171600 129171900 0.1454 86 chr6 131143800 131144100 0.1589 69 chr6 131698500 131701200 0 101 chr6 131704200 131705400 0.0098 76 chr6 131709000 131709300 0.1012 71 chr6 133020900 133026600 0 93 chr6 133470300 133472700 0 67 chr6 133521600 133521900 0.0836 93 chr6 133650600 133651200 0.0038 83 chr6 133652400 133653000 0.0038 83 chr6 133664100 133665900 0.0039 74 chr6 134659500 134659800 0.0764 65 chr6 136851300 136852800 0.0091 74 chr6 140681100 140683200 0 58 chr6 140877900 140878200 0.1244 75 chr6 141567600 141571500 0.0207 128 chr6 141619200 141619800 0.0675 57 chr6 141918300 141918600 0.036 87 chr6 141920400 141920700 0.2144 63 chr6 141922200 141922500 0.0347 61 chr6 141927300 141927900 0.0047 68 chr6 142424100 142424400 0.0632 79 chr6 145073100 145073700 0.1134 72 chr6 145503600 145505100 0.0346 68 chr6 145665000 145666500 0.0236 80 chr6 145770000 145770300 0.019 65 chr6 145852800 145853100 0.1629 77 chr6 148160400 148160700 0.0671 65 chr6 148738200 148738800 0 52 chr6 150022200 150023100 0.075 59 chr6 151848000 151848300 0.1339 51 chr6 151932300 151932600 0.099 82 chr6 152709000 152712600 0 69 chr6 152987700 152989500 0.0146 55 chr6 154524900 154525200 0.2254 83 chr6 156034500 156039900 0 77 chr6 156325200 156330000 0.013 69 chr6 156362400 156365700 0 95 chr6 157311300 157312200 0.1232 217 chr6 158127300 158127900 0 48 chr6 158238600 158240400 0.0125 60 chr6 159547500 159549600 0.0104 67 chr6 160100700 160101000 0.1063 434 chr6 160409100 160409400 0.1139 50 chr6 160611900 160631400 0 270 chr6 160632600 160646700 0 282 chr6 161646000 161646300 0.2316 45 chr6 161874000 161874300 0 114 chr6 161900400 161900700 0.1605 28 chr6 161982300 161983800 0 86 chr6 162839100 162840900 0 71 chr6 162842700 162844200 0.061 108 chr6 162990900 162991800 0.0015 78 chr6 162993900 162994200 0.1138 84 chr6 164798100 164798400 0.1733 86 chr6 165123300 165123600 0.131 83 chr6 165303600 165306300 0 81 chr6 166426500 166426800 0.0281 45 chr6 166428300 166428600 0.1091 133 chr6 166585800 166586100 0.0225 56 chr6 167176500 167176800 0.0701 64 chr6 167181900 167182200 0.0968 50 chr6 167319600 167319900 0.1408 48 chr6 167332500 167334900 0.084 94 chr6 167376600 167376900 0.0005 19 chr6 167381100 167381400 0.1818 53 chr6 167423700 167424000 0.1499 17 chr6 167941200 167941500 0.1299 24 chr6 167977500 167977800 0.2755 60 chr6 168246000 168246300 0.2571 69 chr6 168316500 168317700 0 80 chr6 168560700 168561900 0.0944 28 chr6 168592800 168593700 0.0205 105 chr6 168654600 168655200 0.0073 72 chr6 168846900 168847500 0.1791 138 chr6 168976800 168977100 0.0725 74 chr6 168978300 168978600 0.1018 47 chr6 169032900 169033200 0.1067 33 chr6 169987800 169988400 0.1783 19 chr6 170064900 170065200 0.2219 28 chr6 170145900 170146500 0.1753 220 chr6 170214900 170215500 0 115 chr6 170217000 170220600 0 115 chr6 170246400 170246700 0.0675 20 chr6 170612700 170626200 0 88 chr6 170627700 170699700 0 88 chr6 170700900 170701200 0 88 chr6 170703300 170705700 0 33 chr6 170706900 170707200 0.0012 66 chr6 170708400 170709900 0.0012 66 chr6 170712600 170713500 0 111 chr6 170715000 170730300 0 111 chr6 170731800 170736600 0 41 chr6 170738700 170745900 0 75 chr7 9900 30600 0 109 chr7 31800 32700 0 109 chr7 36300 36900 0.0115 95 chr7 47400 48000 0.0555 77 chr7 49200 49500 0.0555 77 chr7 73200 73500 0.1026 51 chr7 103500 103800 0.0292 23 chr7 215700 216000 0.2207 12 chr7 221400 222000 0 22 chr7 243300 243600 0.0643 29 chr7 361500 361800 0.2079 30 chr7 419700 420000 0.2812 24 chr7 470400 471000 0.1143 12 chr7 478800 479100 0.2156 15 chr7 636000 636300 0.1177 51 chr7 747900 748200 0.0804 29 chr7 990000 990300 0.2444 18 chr7 1037700 1038000 0.0868 91 chr7 1039500 1039800 0.1137 54 chr7 1107900 1108200 0.1939 41 chr7 1116900 1117200 0.244 105 chr7 1145400 1147800 0 100 chr7 1156200 1156500 0.0433 20 chr7 1272000 1273200 0.0192 338 chr7 1319700 1320300 0.0851 55 chr7 1861500 1861800 0.0133 56 chr7 1929900 1930200 0.264 17 chr7 1937700 1938000 0.0247 68 chr7 1990800 1991400 0 67 chr7 2035500 2035800 0 17 chr7 2278800 2279100 0.2426 21 chr7 3708300 3708600 0.0944 61 chr7 3815100 3815400 0.1099 49 chr7 3976200 3977100 0.0393 150 chr7 4263600 4263900 0.235 37 chr7 4545000 4545300 0.1479 110 chr7 4582800 4587300 0 89 chr7 4588800 4599900 0 89 chr7 5121000 5121300 0.171 60 chr7 5156400 5156700 0.0014 21 chr7 5160300 5160600 0.0059 26 chr7 5548800 5549100 0.2418 40 chr7 5898900 5899200 0.0431 68 chr7 5901000 5901300 0.1358 28 chr7 5916900 5917800 0 71 chr7 5921400 5921700 0.0114 68 chr7 5923200 5923500 0.0114 68 chr7 5924700 5925300 0.0084 68 chr7 5929500 5930700 0 80 chr7 5934000 5937000 0 68 chr7 5938500 5940900 0.0032 66 chr7 5945700 5957700 0 75 chr7 5959200 5960100 0 75 chr7 5961600 5963100 0 56 chr7 5965200 5965800 0 62 chr7 5967000 5967900 0 72 chr7 5969100 5972100 0 72 chr7 5973600 5975700 0 72 chr7 5979900 5980500 0.0055 60 chr7 6744600 6744900 0.0069 65 chr7 6747900 6751500 0 83 chr7 6752700 6763500 0 83 chr7 6765000 6780300 0 80 chr7 6783300 6784500 0 80 chr7 6787800 6792900 0 64 chr7 6794400 6795600 0 64 chr7 6798000 6800100 0 68 chr7 6801300 6803400 0 62 chr7 6805200 6807300 0 73 chr7 6809100 6809400 0.2101 36 chr7 6825900 6826200 0.1925 52 chr7 7465500 7470600 0 87 chr7 7544400 7545000 0 51 chr7 8303400 8303700 0.0384 103 chr7 8352300 8353800 0.0927 104 chr7 9400500 9400800 0.0164 73 chr7 9402300 9402600 0.165 64 chr7 9595200 9596100 0 40 chr7 9808500 9809100 0.0109 102 chr7 10166700 10167900 0.1348 73 chr7 10170600 10171200 0.0227 86 chr7 10464900 10465200 0.002 34 chr7 12183000 12183300 0.114 74 chr7 12485100 12485700 0.0209 61 chr7 12501900 12502200 0.0403 72 chr7 13085700 13086000 0.0857 67 chr7 13630800 13631100 0.0632 35 chr7 14211600 14211900 0.0039 31 chr7 14282100 14282400 0.0461 96 chr7 14316300 14318100 0.0044 87 chr7 14650200 14650500 0.0571 63 chr7 14706600 14708100 0.0319 78 chr7 15529800 15530400 0.0058 35 chr7 16197900 16198500 0.1405 78 chr7 16218300 16218900 0.1509 77 chr7 16220100 16220700 0.1044 63 chr7 16789200 16789800 0 58 chr7 18105300 18105600 0.2406 47 chr7 18985800 18986400 0.0005 61 chr7 19458900 19459800 0.105 79 chr7 19683600 19683900 0.1765 79 chr7 19686900 19687200 0.2136 71 chr7 22532400 22534200 0 70 chr7 23040000 23040600 0.0119 104 chr7 23042100 23042400 0.0119 104 chr7 23324400 23325000 0.0826 105 chr7 24001500 24004800 0 61 chr7 24355800 24356100 0.1198 36 chr7 24638400 24638700 0.2392 43 chr7 25005000 25005300 0 12 chr7 25018200 25019100 0.0675 38 chr7 25041900 25047000 0 88 chr7 25601700 25602300 0.0765 86 chr7 25605600 25606200 0.1153 72 chr7 25607700 25608900 0.0005 98 chr7 25744500 25744800 0.085 62 chr7 25748700 25749000 0.1497 99 chr7 28839000 28839300 0.1022 68 chr7 29580600 29580900 0.0215 151 chr7 29582400 29583900 0.0215 151 chr7 29961300 29961600 0.109 63 chr7 30056100 30056400 0.2721 90 chr7 30416400 30417000 0.1592 72 chr7 30439500 30445200 0 122 chr7 30637200 30638400 0.0222 92 chr7 30640200 30641100 0.0222 92 chr7 31484400 31485600 0 60 chr7 32350800 32353500 0 87 chr7 32465400 32465700 0.0163 71 chr7 32466900 32467200 0.0163 71 chr7 32469300 32469900 0.0864 86 chr7 32684400 32684700 0 88 chr7 32698800 32699100 0.1687 25 chr7 32712000 32712900 0 68 chr7 32825100 32825400 0.0593 86 chr7 33523200 33524100 0.002 85 chr7 33525300 33525600 0.2088 72 chr7 34200600 34201800 0.0535 78 chr7 34267200 34267500 0.0598 65 chr7 34517700 34518600 0.0327 101 chr7 34790700 34791000 0.0705 38 chr7 34800000 34801200 0 32 chr7 34816200 34817400 0 40 chr7 34907700 34908000 0.1849 55 chr7 35116200 35116500 0.0565 59 chr7 37298700 37300500 0 72 chr7 37612500 37612800 0.1009 106 chr7 38028600 38029500 0.0213 110 chr7 39274500 39274800 0.0573 76 chr7 39677400 39677700 0.0628 47 chr7 39853200 39853800 0.003 61 chr7 43063200 43064100 0.0833 88 chr7 43413300 43413600 0.0142 76 chr7 43415700 43416000 0.1324 85 chr7 44002800 44003100 0.0402 99 chr7 44198700 44199000 0.2556 59 chr7 45083700 45084300 0 58 chr7 46821300 46825500 0 81 chr7 47111700 47112000 0 10 chr7 48850800 48851100 0.0168 44 chr7 48907800 48908100 0.096 72 chr7 49534800 49535100 0.1129 50 chr7 49680300 49686300 0 86 chr7 51894600 51894900 0.0748 24 chr7 52893000 52893300 0.1276 75 chr7 53029200 53029500 0.1372 47 chr7 54221400 54222000 0.0005 67 chr7 54224400 54230700 0 77 chr7 54311700 54318300 0 76 chr7 54319500 54321000 0 76 chr7 55219200 55221000 0.0054 93 chr7 56370300 56374800 0 2244 chr7 56586600 56590200 0.0033 61 chr7 56748600 56748900 0.0147 20 chr7 56750100 56750700 0.0367 55 chr7 56813700 56814000 0.1092 24 chr7 56817900 56819100 0 86 chr7 56820300 56821200 0 86 chr7 56822700 56823000 0 86 chr7 56833800 56834100 0.0231 62 chr7 56844900 56845200 0.012 63 chr7 56848800 56849100 0.1799 54 chr7 56852700 56853000 0.1036 59 chr7 56866200 56866500 0.1263 60 chr7 56868900 56869200 0.1263 60 chr7 56878200 56878800 0.0009 68 chr7 56884200 56885700 0 72 chr7 56891100 56891400 0.029 20 chr7 56902200 56903700 0.0097 50 chr7 56907900 56908200 0.04 65 chr7 56914500 56914800 0.0373 39 chr7 56925000 56930400 0 68 chr7 56931600 56932500 0 61 chr7 56933700 56944800 0 73 chr7 56946300 56949000 0 64 chr7 56950500 56951100 0.0114 71 chr7 56952900 56953200 0.021 62 chr7 56955600 56956200 0 58 chr7 56958300 56961600 0 78 chr7 56962800 56969400 0 78 chr7 56971200 56973300 0.0061 65 chr7 56974800 56993400 0 77 chr7 56997000 56997300 0 53 chr7 57004800 57005400 0 29 chr7 57007200 57007500 0 15 chr7 57012000 57012300 0 27 chr7 57014700 57020700 0 70 chr7 57023100 57026100 0 81 chr7 57027900 57028200 0 84 chr7 57029700 57036000 0 84 chr7 57037200 57045000 0 67 chr7 57046500 57047700 0 60 chr7 57050700 57051300 0 60 chr7 57053400 57053700 0.1754 57 chr7 57070500 57074100 0 65 chr7 57077400 57078600 0.0104 59 chr7 57079800 57081000 0 57 chr7 57486300 57486600 0.2962 219 chr7 57487800 57488400 0.1814 475 chr7 57491700 57492000 0.1739 557 chr7 57496200 57496500 0.1986 335 chr7 57509100 57509400 0.123 16 chr7 57611100 57637500 0 163 chr7 57827700 57853800 0 149 chr7 57898200 57898500 0.2466 17 chr7 57983400 57984900 0.0118 63 chr7 58170000 58175400 0 148 chr7 58176600 58177200 0 1017 chr7 58179300 58184400 0 1017 chr7 58185600 58188600 0 1801 chr7 58191300 58515000 0 1801 chr7 58516200 58541100 0 1801 chr7 58542300 58727100 0 1010 chr7 58728600 58796100 0 4073 chr7 58797300 58912200 0 4073 chr7 58913400 58922100 0 4073 chr7 58923300 58926900 0 4073 chr7 58928100 59028900 0 4073 chr7 59030100 59112000 0 4073 chr7 59113500 59127600 0 4073 chr7 59128800 59249100 0 1772 chr7 59250300 59253900 0 1772 chr7 59255100 59355300 0 2549 chr7 59356500 59509200 0 4155 chr7 59511300 59680800 0 321 chr7 59682600 59752800 0 2715 chr7 59754000 59824500 0 2715 chr7 59826000 59848800 0 2715 chr7 59850000 59888400 0 2471 chr7 59889600 59891400 0 2471 chr7 59892600 59951400 0 2471 chr7 59952600 59958600 0 2471 chr7 59959800 60038100 0 2471 chr7 60039300 60117600 0 854 chr7 60118800 60121200 0 1800 chr7 60123000 60303900 0 1800 chr7 60305100 60421500 0 1800 chr7 60423300 60469800 0 503 chr7 60471000 60478200 0 503 chr7 60480000 60480300 0 14 chr7 60481500 60544200 0 1901 chr7 60545400 60573000 0 1901 chr7 60574200 60735000 0 1094 chr7 60736200 60828300 0 1355 chr7 60878400 60894000 0 68 chr7 60895200 60911100 0 68 chr7 61072800 61074900 0 65 chr7 61115700 61116300 0 64 chr7 61118400 61130100 0 87 chr7 61131300 61135800 0 87 chr7 61137000 61139700 0 71 chr7 61141200 61182900 0 132 chr7 61184100 61194300 0 132 chr7 61195800 61249500 0 132 chr7 61250700 61260900 0 132 chr7 61264800 61265700 0 33 chr7 61269300 61276800 0 60 chr7 61278000 61281000 0 60 chr7 61282800 61304700 0 116 chr7 61306500 61307100 0 116 chr7 61308300 61327800 0 116 chr7 61380000 61381200 0.0246 60 chr7 61382700 61386600 0 261 chr7 61387800 61404000 0 150 chr7 61405200 61406100 0 150 chr7 61407300 61410300 0 309 chr7 61412100 61422000 0 256 chr7 61423500 61430700 0 129 chr7 61431900 61439100 0 137 chr7 61440300 61443900 0 151 chr7 61445700 61454400 0 151 chr7 61455900 61479900 0 173 chr7 61481100 61482300 0 173 chr7 61483800 61487100 0 87 chr7 61488900 61493100 0 87 chr7 61495500 61500600 0 96 chr7 61502100 61504200 0.108 51 chr7 61505400 61509600 0 76 chr7 61510800 61512300 0 63 chr7 61514100 61514400 0.0094 170 chr7 61515900 61525800 0 175 chr7 61527300 61527600 0 46 chr7 61578000 61609500 0 73 chr7 61610700 61612500 0 73 chr7 61613700 61629000 0 62 chr7 61630200 61719300 0 93 chr7 61721100 61725000 0 64 chr7 61729200 61729500 0.0075 65 chr7 61758300 61763700 0 70 chr7 61768200 61768500 0.0159 69 chr7 61777800 61779300 0 62 chr7 61795800 61797300 0.0166 56 chr7 61807500 61811100 0 74 chr7 61812900 61813200 0.0964 42 chr7 61838700 61839000 0 103 chr7 61840200 61843500 0 103 chr7 61867800 61868100 0.1028 39 chr7 61968900 61969200 0.0117 52 chr7 61972500 61976100 0 266 chr7 62026500 62027400 0 63 chr7 62030400 62036400 0 44 chr7 62037600 62041500 0 44 chr7 62043000 62057700 0 66 chr7 62058900 62113800 0 95 chr7 62115000 62122200 0 93 chr7 62123400 62146500 0 93 chr7 62148300 62151900 0 71 chr7 62153100 62153400 0.0151 72 chr7 62158500 62159100 0.0092 69 chr7 62178900 62184300 0 67 chr7 62187300 62187600 0.1349 62 chr7 62190000 62191800 0 65 chr7 62209800 62210100 0.0356 62 chr7 62211900 62212200 0.2175 56 chr7 62214900 62215800 0 64 chr7 62219400 62223900 0 69 chr7 62277300 62292600 0 166 chr7 62333100 62333400 0.1268 68 chr7 62335200 62335500 0.2233 276 chr7 62360700 62373000 0 181 chr7 62374500 62375700 0.0031 78 chr7 62402700 62403000 0.2544 768 chr7 62454600 62454900 0.2631 1117 chr7 62506800 62511300 0 474 chr7 62516100 62516400 0.0401 33 chr7 62544000 62544300 0.065 10 chr7 63122100 63122400 0.0224 42 chr7 63149100 63154500 0 74 chr7 63292800 63297000 0 70 chr7 63299100 63302100 0 70 chr7 63303300 63304800 0 70 chr7 63306900 63315600 0 78 chr7 63318000 63348000 0 78 chr7 63349500 63365400 0 73 chr7 63382800 63456000 0 79 chr7 63484800 63485100 0.0576 20 chr7 63488100 63493200 0 60 chr7 63495300 63502800 0 67 chr7 63505500 63505800 0.0307 51 chr7 63516900 63517500 0.025 50 chr7 63525900 63526200 0.1109 69 chr7 63529200 63531900 0 70 chr7 63533100 63535800 0 68 chr7 63537000 63539100 0 68 chr7 63540600 63548700 0 91 chr7 63549900 63553800 0 91 chr7 63555000 63555300 0.124 49 chr7 63556500 63558900 0 69 chr7 63561300 63561900 0.0251 56 chr7 63583500 63585900 0 78 chr7 63587700 63610200 0 78 chr7 63611400 63613500 0 73 chr7 63615000 63624600 0 73 chr7 63625800 63627300 0 59 chr7 63629400 63630000 0.0786 87 chr7 63632400 63653100 0 78 chr7 63662100 63662400 0.0127 55 chr7 63668700 63669300 0 62 chr7 63673200 63673500 0.0135 60 chr7 63676800 63677100 0.0302 52 chr7 63681300 63682800 0.0623 50 chr7 63685200 63685500 0.0364 40 chr7 63691200 63692700 0.001 66 chr7 63698100 63698700 0.0229 57 chr7 63706800 63708000 0.1504 58 chr7 63724200 63724500 0.1352 62 chr7 63731700 63732300 0 67 chr7 63740700 63741000 0.0707 55 chr7 63742800 63743100 0.16 74 chr7 63750900 63751200 0.0376 77 chr7 63753600 63764700 0 169 chr7 63776700 63777000 0.0265 33 chr7 63825000 63825600 0.0347 54 chr7 64856100 64856400 0 37 chr7 65028300 65028600 0.0159 52 chr7 65073000 65074800 0.0091 59 chr7 65107200 65107800 0 46 chr7 65109600 65109900 0.2455 58 chr7 65114400 65123100 0 84 chr7 65124300 65140800 0 79 chr7 65146800 65149200 0.0201 54 chr7 65153100 65156100 0 78 chr7 65161500 65161800 0.1527 52 chr7 65164200 65171700 0 76 chr7 65175900 65176200 0.0096 44 chr7 65179200 65179500 0.1407 66 chr7 65181600 65181900 0.1596 43 chr7 65185200 65185500 0.0749 56 chr7 65192100 65192400 0.0208 61 chr7 65193600 65193900 0.0905 67 chr7 65196300 65196600 0.0093 62 chr7 65258100 65260200 0 58 chr7 65489400 65490300 0.1192 470 chr7 65507700 65508300 0 67 chr7 65520300 65533500 0 79 chr7 65534700 65535900 0 79 chr7 65537100 65549700 0 79 chr7 65551500 65559300 0 92 chr7 65562900 65565600 0 70 chr7 65566800 65571900 0 83 chr7 65573100 65575200 0 69 chr7 65578800 65579100 0.0101 73 chr7 65581200 65581500 0.0101 73 chr7 65583300 65583600 0.1103 88 chr7 65630700 65651100 0 83 chr7 65652900 65681400 0 79 chr7 65682600 65682900 0 79 chr7 65687700 65688000 0.0018 51 chr7 65691600 65691900 0.0575 53 chr7 65698200 65699700 0.0669 73 chr7 65702100 65702400 0.017 69 chr7 65708100 65708400 0.0674 57 chr7 65762400 65764500 0 67 chr7 65864700 65865000 0.0414 54 chr7 65948400 65948700 0.0626 55 chr7 66287100 66292500 0 67 chr7 66394800 66395100 0.0994 58 chr7 67031400 67031700 0.0238 76 chr7 67232700 67233300 0 25 chr7 67275300 67275600 0.031 59 chr7 67335600 67335900 0.0678 50 chr7 68652300 68652600 0.1804 59 chr7 70197600 70203000 0 87 chr7 72529500 72530100 0.0033 66 chr7 72795900 72796200 0.022 58 chr7 72851400 72852000 0.0064 64 chr7 72874500 72875700 0.0435 67 chr7 72942600 72942900 0.2098 56 chr7 72951000 72953700 0 76 chr7 72957900 72959100 0 84 chr7 72960300 72962400 0 84 chr7 72963900 72970200 0 84 chr7 72971400 72975600 0 84 chr7 72977100 72977700 0 84 chr7 72979200 72995400 0 84 chr7 72997800 73001400 0 84 chr7 73002900 73005300 0.0225 71 chr7 73008000 73103700 0 105 chr7 73104900 73113600 0 112 chr7 73115700 73122300 0 95 chr7 73124100 73124400 0 79 chr7 73125600 73126500 0 79 chr7 73128900 73129500 0 83 chr7 73130700 73134300 0 83 chr7 73135500 73137000 0 64 chr7 73138800 73142400 0 78 chr7 73144800 73146900 0 72 chr7 73148100 73153800 0 72 chr7 73157100 73166700 0 84 chr7 73167900 73170300 0 96 chr7 73172100 73173300 0 96 chr7 73174500 73177200 0 95 chr7 73178400 73190400 0 95 chr7 73191600 73192200 0 95 chr7 73193700 73210800 0 95 chr7 73212000 73212300 0 95 chr7 73213500 73224900 0 95 chr7 73226400 73227900 0 76 chr7 73230000 73230900 0 80 chr7 73232700 73237200 0 80 chr7 73240200 73240800 0.069 84 chr7 73255500 73257000 0.0713 60 chr7 73259400 73259700 0 66 chr7 73262700 73264800 0.0081 65 chr7 73266000 73267500 0 71 chr7 73278900 73279500 0.0047 78 chr7 73281000 73281300 0.1673 45 chr7 73293300 73293600 0.019 53 chr7 74728500 74730600 0 67 chr7 74734800 74749500 0 78 chr7 74750700 74761200 0 78 chr7 74763000 74771400 0 103 chr7 74772600 74778300 0 76 chr7 74779500 74782500 0 66 chr7 74784300 74785200 0 74 chr7 74787900 74790600 0 74 chr7 74793600 74793900 0.0474 72 chr7 74799300 74810400 0 78 chr7 74811900 74815200 0 78 chr7 74816400 74818200 0 78 chr7 74819400 74824800 0 70 chr7 74827500 74829300 0 56 chr7 74831700 74835900 0 81 chr7 74837100 74840400 0 81 chr7 74842800 74844900 0 77 chr7 74846100 74857500 0 77 chr7 74859000 74859900 0 54 chr7 74862300 74862600 0 62 chr7 74867100 74867400 0.079 49 chr7 74877900 74878200 0.1568 54 chr7 74889900 74890200 0.0812 57 chr7 74891700 74892600 0 62 chr7 74894400 74895900 0 80 chr7 74897100 74904000 0 80 chr7 74905500 74905800 0 80 chr7 74911200 74914500 0 74 chr7 74917800 74918100 0 70 chr7 74919300 74919900 0 70 chr7 74927100 74931600 0 98 chr7 74932800 74933400 0 98 chr7 74934600 74935200 0 98 chr7 74939400 74939700 0.0068 68 chr7 74942100 74943000 0.0104 84 chr7 74948700 74949900 0 66 chr7 74951100 74951400 0 66 chr7 74953500 74954100 0 73 chr7 74955900 74956200 0 73 chr7 74957700 74963700 0 72 chr7 74964900 74969700 0 76 chr7 74971200 74971800 0 76 chr7 74973600 74974800 0.0039 91 chr7 74978400 74981400 0 78 chr7 74982600 74982900 0 78 chr7 75075000 75075300 0.0656 60 chr7 75076500 75077100 0.0234 48 chr7 75078900 75079200 0.0719 33 chr7 75081300 75082200 0 59 chr7 75084600 75087600 0 67 chr7 75088800 75091500 0 73 chr7 75093900 75101100 0 71 chr7 75106500 75113400 0 72 chr7 75120300 75120600 0.0225 61 chr7 75122400 75126300 0 70 chr7 75127800 75129600 0 73 chr7 75130800 75131700 0 78 chr7 75135600 75136800 0 84 chr7 75138000 75146700 0 84 chr7 75156000 75156300 0.0597 54 chr7 75158100 75159000 0.0001 70 chr7 75160500 75162600 0 92 chr7 75164400 75226500 0 92 chr7 75227700 75244500 0 92 chr7 75246000 75246600 0 92 chr7 75247800 75249000 0 92 chr7 75250200 75257100 0 92 chr7 75258900 75260400 0 78 chr7 75261600 75272100 0 78 chr7 75273900 75278100 0 92 chr7 75279900 75362400 0 92 chr7 75363900 75368100 0 82 chr7 75369600 75385800 0 82 chr7 75387300 75395100 0 82 chr7 75396600 75408300 0 72 chr7 75410700 75414300 0 80 chr7 75426300 75426600 0.01 76 chr7 75443700 75444000 0 69 chr7 75445500 75446100 0 69 chr7 75490800 75491100 0.1757 66 chr7 75506700 75507300 0.0241 46 chr7 75706800 75707400 0.0055 61 chr7 75828900 75829200 0.1555 59 chr7 75834600 75834900 0.1045 72 chr7 76438800 76439100 0.0729 57 chr7 76442100 76442700 0 84 chr7 76446000 76447200 0 73 chr7 76455300 76460100 0 55 chr7 76461300 76462800 0.0016 55 chr7 76465800 76466100 0.12 72 chr7 76467300 76467600 0.0086 66 chr7 76470300 76470900 0.0182 66 chr7 76473600 76473900 0.0316 33 chr7 76475700 76476300 0.0318 56 chr7 76484100 76487700 0 67 chr7 76489200 76490400 0 67 chr7 76492500 76494600 0 60 chr7 76496400 76496700 0.0149 33 chr7 76504200 76504500 0.1546 48 chr7 76519200 76519500 0.0351 12 chr7 76521600 76522500 0 24 chr7 76524900 76525800 0 39 chr7 76527300 76529100 0 39 chr7 76532100 76532400 0.1543 19 chr7 76534800 76538100 0.0049 69 chr7 76544700 76545600 0.0792 63 chr7 76605000 76605900 0.0165 52 chr7 76609200 76610100 0 61 chr7 76612200 76614600 0 57 chr7 76628100 76628400 0.0412 55 chr7 76629900 76630800 0 68 chr7 76632900 76633200 0.0319 24 chr7 76641300 76642800 0.0468 57 chr7 76648500 76649100 0.0342 45 chr7 76652100 76652400 0.0478 64 chr7 76672800 76673100 0.1961 52 chr7 76733100 76734000 0.0796 65 chr7 76768800 76769100 0.1548 57 chr7 76956900 76957500 0 65 chr7 76959300 76961100 0 65 chr7 76963800 76964400 0.1047 67 chr7 76965600 76965900 0.039 69 chr7 76968600 76969200 0.0662 79 chr7 76974000 76974300 0.0352 56 chr7 76983000 76985400 0.0142 70 chr7 76987200 76987500 0.089 59 chr7 76990800 76991100 0.0057 55 chr7 77012700 77019900 0 75 chr7 77021700 77022600 0.0336 49 chr7 77023800 77025300 0 72 chr7 77026800 77027100 0 101 chr7 77028600 77031600 0 101 chr7 77033100 77037300 0 101 chr7 77039100 77039400 0.1742 51 chr7 77042100 77048100 0 88 chr7 77056200 77056500 0.0794 62 chr7 77078700 77079000 0.0507 69 chr7 77093700 77094000 0.0022 37 chr7 77106600 77106900 0.2576 46 chr7 77116200 77116500 0.022 15 chr7 77157000 77157300 0.0348 73 chr7 77510100 77510400 0.0371 78 chr7 79231200 79233600 0.0426 77 chr7 81785100 81785400 0.1629 49 chr7 82806900 82807200 0.1676 80 chr7 83029500 83029800 0.1101 61 chr7 84065100 84065400 0.1133 82 chr7 85331400 85333200 0.1293 93 chr7 86457300 86457600 0.0645 69 chr7 86986200 86986500 0.1812 12 chr7 87044100 87045300 0.104 64 chr7 87063900 87064200 0.0626 70 chr7 87951600 87951900 0.0818 46 chr7 88552800 88553100 0.1058 65 chr7 90074400 90075000 0.0026 57 chr7 91178100 91178400 0.0669 76 chr7 91217700 91218000 0.1438 86 chr7 91587300 91587600 0.0547 84 chr7 91905900 91906200 0.0853 92 chr7 92561700 92562000 0.058 52 chr7 93788100 93793200 0 68 chr7 94159800 94160400 0.0454 116 chr7 95834100 95834400 0.1117 83 chr7 96846600 96852600 0 90 chr7 97533300 97533600 0.1327 65 chr7 97614300 97619400 0.0112 86 chr7 97778400 97778700 0.2438 44 chr7 99809700 99815100 0 94 chr7 100308900 100309200 0.0593 69 chr7 100310400 100311300 0.0593 69 chr7 100313700 100314000 0.151 62 chr7 100740300 100742700 0.0428 59 chr7 100994700 100999800 0.0156 280 chr7 101001600 101001900 0.0156 280 chr7 101004000 101004300 0.0156 280 chr7 102342000 102342300 0.0451 60 chr7 102345000 102345300 0.0021 56 chr7 102347400 102351600 0 135 chr7 102352800 102357900 0 135 chr7 102476700 102477000 0 119 chr7 102480600 102484500 0 119 chr7 102485700 102495600 0 119 chr7 102497700 102503700 0 96 chr7 102504900 102527100 0 96 chr7 102528300 102541500 0 98 chr7 102543300 102543900 0 96 chr7 102545700 102553800 0 96 chr7 102555900 102576600 0 107 chr7 102579300 102595200 0 113 chr7 102596400 102602700 0 113 chr7 102604800 102605100 0.1039 69 chr7 102606600 102618000 0 100 chr7 102620400 102633900 0 91 chr7 102636300 102640800 0 89 chr7 102642300 102664800 0 124 chr7 102666000 102675600 0 117 chr7 102678600 102690600 0 101 chr7 102792300 102792600 0.1546 56 chr7 104507700 104508000 0.1272 60 chr7 106101300 106101600 0.0666 1123 chr7 106245000 106245900 0 82 chr7 107418300 107418600 0.179 45 chr7 107770200 107770500 0.2184 286 chr7 108507900 108508500 0.0042 72 chr7 109095900 109098300 0 75 chr7 109906200 109908300 0 76 chr7 110402100 110402400 0.0686 36 chr7 110558700 110560800 0.0014 62 chr7 110707200 110712600 0 84 chr7 111243600 111249300 0 120 chr7 111448500 111449700 0.0475 73 chr7 111455700 111457200 0 65 chr7 111963600 111968400 0 66 chr7 112552200 112552500 0.0947 78 chr7 112975500 112978200 0 57 chr7 112979700 112980900 0 56 chr7 113493000 113494500 0 72 chr7 113497200 113497500 0.0606 69 chr7 113661600 113661900 0.2193 60 chr7 113776200 113782200 0 141 chr7 115261500 115263600 0.0349 81 chr7 116718900 116719200 0.2076 68 chr7 117525300 117528900 0 70 chr7 118343100 118343400 0.0417 63 chr7 118703700 118704000 0.1945 68 chr7 118965000 118965300 0.0863 30 chr7 119591400 119591700 0.0717 56 chr7 120323700 120324000 0.0567 63 chr7 121443600 121443900 0.1833 62 chr7 121649400 121649700 0.1321 29 chr7 122232300 122232600 0.2072 53 chr7 122283300 122283600 0.0677 76 chr7 123042600 123042900 0.1439 35 chr7 123780900 123781200 0.0687 79 chr7 125179800 125180100 0.0189 43 chr7 125221500 125221800 0.0531 83 chr7 126829200 126829500 0.1377 76 chr7 127963500 127963800 0.0104 80 chr7 127965000 127966800 0.0104 80 chr7 130481100 130481400 0.1145 75 chr7 130580400 130581900 0.0142 81 chr7 130702200 130702800 0.0049 78 chr7 133422900 133423200 0.2122 25 chr7 133889700 133894200 0 67 chr7 136416000 136416600 0.0844 86 chr7 136797900 136798200 0.1515 69 chr7 136972800 136973100 0.2055 49 chr7 137137200 137137500 0.1038 79 chr7 137334300 137334600 0.0563 49 chr7 137429700 137430000 0.1447 49 chr7 139794900 139795500 0.1774 119 chr7 141062400 141066900 0 67 chr7 141882300 141883500 0.0971 83 chr7 141920700 141926400 0 75 chr7 141983400 141984000 0.0522 83 chr7 142042500 142042800 0 13 chr7 143522100 143524500 0 50 chr7 143526000 143529600 0 55 chr7 143532000 143537100 0 72 chr7 143542500 143548200 0 67 chr7 143550000 143556300 0 68 chr7 143557500 143558100 0.0006 65 chr7 143559600 143560800 0.0006 65 chr7 143563500 143566500 0 71 chr7 143567700 143570700 0 71 chr7 143571900 143577300 0 90 chr7 143578500 143580000 0 90 chr7 143581800 143585100 0 76 chr7 143587200 143593200 0 77 chr7 143594400 143610300 0 77 chr7 143612400 143650800 0 67 chr7 143700900 143707200 0 69 chr7 143708700 143718900 0 52 chr7 143720400 143724300 0 54 chr7 143726700 143727900 0.0309 60 chr7 143743800 143747700 0 74 chr7 143749500 143766600 0 82 chr7 143769600 143779200 0 73 chr7 143781600 143786700 0 70 chr7 143792400 143797500 0 67 chr7 143799900 143801700 0 77 chr7 143805000 143806500 0 77 chr7 143808000 143809200 0 77 chr7 143810400 143844900 0 77 chr7 143853600 143858400 0 92 chr7 143859900 143867400 0 92 chr7 143868600 143874600 0 92 chr7 144180000 144181200 0 85 chr7 144182400 144186000 0 85 chr7 144187800 144190500 0 85 chr7 144191700 144196500 0 75 chr7 144199200 144207900 0 75 chr7 144209700 144215100 0 76 chr7 144216300 144218400 0 76 chr7 144219900 144225900 0 76 chr7 144230100 144232500 0 71 chr7 144233700 144234600 0 71 chr7 144236700 144244200 0 83 chr7 144245400 144249300 0 83 chr7 144250500 144253500 0 83 chr7 144256500 144259500 0.001 100 chr7 144263100 144263400 0.0024 80 chr7 144265800 144270300 0 66 chr7 144271500 144271800 0 66 chr7 144273000 144274800 0.0064 79 chr7 144277200 144285300 0 78 chr7 144286800 144288300 0 57 chr7 144290400 144302400 0 76 chr7 144303600 144315600 0 85 chr7 144316800 144321300 0 85 chr7 144326700 144330900 0 67 chr7 144332400 144351600 0 75 chr7 144354300 144359100 0 78 chr7 144360300 144362400 0 78 chr7 144364200 144370200 0 72 chr7 144371400 144372300 0 79 chr7 144374100 144376800 0.0036 61 chr7 145305000 145305300 0.1345 54 chr7 146015400 146016300 0.0978 87 chr7 146604000 146604300 0.1283 57 chr7 146909400 146910000 0.0143 86 chr7 147084000 147084300 0.137 12 chr7 147323100 147323400 0.1978 57 chr7 147842700 147847800 0 76 chr7 148647900 148648200 0.0954 54 chr7 149906700 149907300 0.0152 58 chr7 149934900 149935200 0 38 chr7 149950800 149951100 0.0067 61 chr7 149990400 149990700 0.0903 63 chr7 150000300 150000900 0.0219 60 chr7 150030000 150030300 0.0832 47 chr7 150060900 150062400 0 71 chr7 150075000 150075300 0.1134 62 chr7 150091200 150091500 0.0071 65 chr7 150145500 150145800 0.053 56 chr7 150153600 150153900 0.1215 59 chr7 150187500 150187800 0.0863 69 chr7 150189600 150189900 0.0565 52 chr7 150199200 150199500 0.1209 60 chr7 150247500 150247800 0.1333 53 chr7 150268500 150270300 0 77 chr7 150295800 150296100 0.0815 59 chr7 152584800 152586300 0.0259 46 chr7 152785800 152786400 0.007 65 chr7 152812800 152814000 0.1079 53 chr7 152839500 152841300 0 81 chr7 153707100 153707400 0.0676 54 chr7 153748500 153748800 0.0507 29 chr7 153750300 153750600 0.1234 41 chr7 153821400 153821700 0.0259 53 chr7 153854700 153855000 0.1958 64 chr7 154009200 154009500 0.1727 67 chr7 154038300 154039800 0 71 chr7 154048200 154048800 0 23 chr7 154067100 154067400 0.0992 61 chr7 154096200 154096500 0.0464 59 chr7 154145700 154146300 0.0104 53 chr7 154161600 154162200 0.0136 45 chr7 154457100 154457700 0 65 chr7 154661100 154661400 0.0635 13 chr7 155341200 155341500 0.1159 169 chr7 155350500 155350800 0.171 66 chr7 155366700 155367300 0.0318 101 chr7 155407200 155407500 0.2722 11 chr7 156154200 156155700 0 320 chr7 157470300 157470600 0.1719 79 chr7 157554000 157554300 0.239 37 chr7 157647600 157647900 0.1406 13 chr7 157710900 157711200 0.0107 29 chr7 157731900 157732200 0.1766 24 chr7 157733700 157734000 0.1977 18 chr7 157858200 157859100 0.0439 15 chr7 157983000 157983300 0.1937 51 chr7 158000700 158001000 0.1985 28 chr7 158088000 158088300 0.2276 59 chr7 158099100 158099700 0.1965 13 chr7 158146800 158148600 0.0809 481 chr7 158237100 158237700 0.0645 48 chr7 158338800 158339700 0 17 chr7 158349000 158349600 0 21 chr7 158360100 158361300 0.0717 272 chr7 158455200 158455500 0.1578 63 chr7 158838900 158839200 0.1226 40 chr7 158916000 158916900 0.2381 53 chr7 158982000 158982300 0.2211 55 chr7 159088800 159089400 0.0185 106 chr7 159164400 159164700 0 40 chr7 159202800 159203100 0.2358 93 chr8 60600 60900 0 100 chr8 62100 76800 0 100 chr8 78300 79500 0 100 chr8 80700 81000 0 100 chr8 82500 102300 0 100 chr8 103800 166500 0 97 chr8 168300 169800 0 97 chr8 171000 191100 0 97 chr8 194100 194400 0.191 80 chr8 195900 200700 0 88 chr8 304200 304800 0.0337 59 chr8 378000 378300 0.1707 76 chr8 399300 399600 0.0768 55 chr8 402600 402900 0.1096 75 chr8 659100 659700 0.072 70 chr8 669300 669600 0.1689 63 chr8 680100 680400 0.216 85 chr8 714300 714600 0 27 chr8 775500 775800 0.0591 97 chr8 807300 807600 0.074 51 chr8 840000 840300 0.1552 48 chr8 848400 848700 0.2068 34 chr8 895800 896100 0.1485 40 chr8 933900 934200 0.0172 30 chr8 991500 993300 0.0112 103 chr8 1015500 1015800 0.2977 21 chr8 1034100 1035900 0.0358 42 chr8 1109100 1110000 0.0909 56 chr8 1215600 1215900 0.254 72 chr8 1238700 1239300 0.187 28 chr8 1350600 1350900 0.2703 85 chr8 1384500 1385400 0.2479 80 chr8 1394400 1394700 0.0195 16 chr8 1396800 1400100 0 29 chr8 1401900 1402200 0.1493 28 chr8 1406700 1407300 0.163 43 chr8 1470900 1471200 0.0551 60 chr8 1607700 1608600 0.0679 126 chr8 1611300 1612500 0.0194 82 chr8 1642800 1644000 0.2423 33 chr8 1692000 1692300 0 30 chr8 1968600 1968900 0.1208 43 chr8 1990500 1990800 0.1201 29 chr8 2191500 2191800 0.0872 10 chr8 2238900 2239200 0.1718 70 chr8 2244600 2246100 0.1263 63 chr8 2247600 2247900 0.2173 75 chr8 2250900 2251200 0 86 chr8 2253600 2276100 0 86 chr8 2278200 2279100 0 57 chr8 2280600 2333100 0 87 chr8 2337000 2338800 0 70 chr8 2341200 2341500 0 18 chr8 2383200 2384400 0 66 chr8 2387100 2387400 0.0006 50 chr8 2388600 2440800 0 78 chr8 2442000 2443800 0 78 chr8 2445600 2447700 0 80 chr8 2448900 2470800 0 80 chr8 2473500 2475000 0.0012 60 chr8 2480400 2481000 0.0038 62 chr8 6297300 6297600 0.0219 60 chr8 6300000 6300300 0.081 65 chr8 6974700 6998700 0 149 chr8 6999900 7001700 0 149 chr8 7002900 7014300 0 154 chr8 7017300 7017600 0.0609 79 chr8 7155300 7157100 0 83 chr8 7161300 7161600 0.2303 35 chr8 7162800 7163100 0.2031 39 chr8 7164300 7164600 0.1082 25 chr8 7165800 7166400 0.1607 31 chr8 7168200 7168500 0.0521 42 chr8 7173000 7173600 0.0075 32 chr8 7181700 7182000 0 35 chr8 7189500 7192500 0 33 chr8 7205400 7205700 0.0495 37 chr8 7209300 7215900 0 60 chr8 7218300 7220700 0 37 chr8 7222500 7223400 0 34 chr8 7224900 7227600 0 70 chr8 7229700 7252800 0 65 chr8 7254000 7267800 0 129 chr8 7269000 7293300 0 129 chr8 7294500 7295400 0 129 chr8 7299300 7300200 0 31 chr8 7302000 7304700 0 38 chr8 7307100 7311900 0 38 chr8 7314000 7316400 0 34 chr8 7317600 7318500 0 32 chr8 7320000 7320900 0 38 chr8 7323300 7325100 0 41 chr8 7326900 7327500 0 41 chr8 7329900 7331100 0.0111 36 chr8 7332600 7332900 0.0792 52 chr8 7335300 7335600 0.007 60 chr8 7337100 7338000 0.0341 62 chr8 7339200 7339800 0.0341 62 chr8 7342500 7343100 0 44 chr8 7371600 7374000 0 74 chr8 7377000 7378500 0.0258 57 chr8 7381200 7381500 0.0704 66 chr8 7399500 7404300 0 81 chr8 7406100 7410900 0 71 chr8 7412700 7414500 0 69 chr8 7416900 7417200 0.0208 62 chr8 7425600 7433700 0 71 chr8 7435500 7441500 0 76 chr8 7442700 7444500 0 76 chr8 7447200 7447800 0 81 chr8 7449000 7449300 0.1427 66 chr8 7452000 7452900 0 81 chr8 7454400 7458600 0 75 chr8 7459800 7469100 0 73 chr8 7470300 7471800 0.0005 46 chr8 7473300 7473600 0.0178 65 chr8 7474800 7475100 0.2315 38 chr8 7477800 7478400 0.1238 57 chr8 7479600 7480800 0.0273 67 chr8 7482300 7483800 0 71 chr8 7485600 7485900 0 71 chr8 7487100 7497000 0 71 chr8 7498200 7506300 0 109 chr8 7508700 7513800 0 109 chr8 7515600 7534800 0 109 chr8 7537200 7545900 0 84 chr8 7551000 7556700 0 106 chr8 7558800 7564500 0 132 chr8 7567200 7579800 0 384 chr8 7581000 7593600 0 384 chr8 7594800 7596900 0 384 chr8 7598100 7598400 0 74 chr8 7599600 7603500 0 74 chr8 7604700 7605000 0.1062 46 chr8 7607400 7609800 0.001 101 chr8 7612500 7614900 0.0412 112 chr8 7616100 7616400 0.0412 112 chr8 7667400 7676100 0 54 chr8 7677300 7678500 0 54 chr8 7681500 7682400 0 30 chr8 7684500 7686300 0 71 chr8 7688100 7718700 0 229 chr8 7719900 7764900 0 229 chr8 7766100 7769100 0 229 chr8 7772100 7772700 0 81 chr8 7773900 7789800 0 79 chr8 7791300 7801200 0 79 chr8 7802400 7805400 0 70 chr8 7807500 7812300 0.0034 67 chr8 7814400 7826100 0 71 chr8 7830600 7832100 0 63 chr8 7835100 7835400 0.0714 22 chr8 7837800 7838100 0.0806 55 chr8 7839600 7856700 0 85 chr8 7858800 7859700 0 71 chr8 7862100 7862700 0 77 chr8 7863900 7866600 0 77 chr8 7867800 7869300 0 77 chr8 7871100 7872900 0 77 chr8 7874400 7875900 0.017 64 chr8 7880100 7885800 0 74 chr8 7896300 7899300 0 71 chr8 7901100 7912500 0 71 chr8 7916400 7916700 0.0498 20 chr8 7917900 7918800 0 47 chr8 7923900 7924200 0.0503 11 chr8 7925700 7926600 0 42 chr8 7928700 7929000 0 44 chr8 7930200 7930800 0 44 chr8 7933200 7935000 0 70 chr8 7938000 7940100 0 75 chr8 7943100 7944300 0 42 chr8 7945800 7947900 0 42 chr8 7949700 7950000 0.0841 12 chr8 7952700 7972200 0 37 chr8 7974600 7975200 0 39 chr8 7977000 7984500 0 43 chr8 7986000 7990500 0 43 chr8 7991700 8008800 0 43 chr8 8010000 8011200 0 92 chr8 8013300 8015400 0 92 chr8 8016600 8044200 0 391 chr8 8046900 8051700 0 68 chr8 8053200 8053500 0.0868 42 chr8 8056200 8057400 0 94 chr8 8058900 8059200 0.1534 79 chr8 8061900 8065800 0 88 chr8 8068500 8068800 0.1618 12 chr8 8071500 8073300 0 78 chr8 8074800 8075100 0 78 chr8 8081700 8082600 0 26 chr8 8084400 8084700 0.0683 11 chr8 8086800 8087100 0 17 chr8 8091000 8091300 0.0257 23 chr8 8093400 8100900 0 40 chr8 8102100 8106000 0 26 chr8 8109000 8109600 0 18 chr8 8112000 8119500 0 104 chr8 8121300 8123100 0 104 chr8 8124300 8131800 0 104 chr8 8133000 8135700 0 104 chr8 8137200 8138400 0.0626 85 chr8 8141100 8143200 0.0075 109 chr8 8145300 8145600 0.0853 98 chr8 8148600 8156400 0 110 chr8 8157600 8158800 0 110 chr8 8160000 8160300 0.0022 82 chr8 8162100 8162400 0.0334 90 chr8 8163600 8163900 0.0007 123 chr8 8165100 8170200 0.0007 123 chr8 8171700 8177700 0 108 chr8 8178900 8179800 0.0105 85 chr8 8185500 8185800 0.0064 95 chr8 8187900 8189100 0.0582 108 chr8 8190300 8191200 0.008 105 chr8 8192700 8194200 0.008 105 chr8 8195700 8198400 0 80 chr8 8199600 8203500 0 80 chr8 8205000 8206200 0 51 chr8 8207700 8208600 0 51 chr8 8211000 8211600 0 45 chr8 8214300 8214600 0 39 chr8 8230200 8230500 0.0352 23 chr8 8233800 8234100 0.0596 78 chr8 8471100 8476500 0 81 chr8 9657300 9658200 0.145 58 chr8 9736500 9739800 0 65 chr8 10934100 10934400 0.0717 51 chr8 10936500 10937100 0.007 87 chr8 12038700 12039300 0 36 chr8 12041700 12046800 0 34 chr8 12050100 12051300 0 27 chr8 12053100 12056100 0 39 chr8 12057600 12060000 0 39 chr8 12061500 12061800 0 39 chr8 12063000 12072900 0 38 chr8 12075000 12075300 0 10 chr8 12076800 12077100 0 17 chr8 12079800 12081300 0 13 chr8 12082500 12088800 0 101 chr8 12090300 12104400 0 101 chr8 12106500 12111900 0 37 chr8 12113400 12115500 0 29 chr8 12118800 12119100 0 23 chr8 12121200 12121500 0 23 chr8 12149400 12149700 0.1146 59 chr8 12151800 12156900 0 68 chr8 12158400 12159600 0 59 chr8 12160800 12174300 0 74 chr8 12177600 12177900 0 22 chr8 12180900 12182100 0 52 chr8 12184200 12192300 0 82 chr8 12195600 12196500 0 97 chr8 12198300 12199800 0 99 chr8 12202500 12205200 0 99 chr8 12210000 12210300 0.0028 91 chr8 12211800 12217800 0 99 chr8 12219900 12222600 0 94 chr8 12225000 12225300 0.2059 63 chr8 12229200 12229500 0.1278 70 chr8 12285300 12286500 0.0194 38 chr8 12288600 12290100 0.0186 36 chr8 12292500 12297600 0 39 chr8 12299100 12308100 0 43 chr8 12309600 12314700 0 43 chr8 12316200 12318300 0 28 chr8 12328800 12330000 0.115 19 chr8 12333300 12333900 0.0606 25 chr8 12337200 12341100 0 51 chr8 12342600 12348900 0 116 chr8 12350400 12351000 0 116 chr8 12352800 12354900 0 35 chr8 12356100 12357900 0 35 chr8 12359700 12362100 0 29 chr8 12363900 12365700 0 49 chr8 12367500 12367800 0 49 chr8 12369600 12370500 0 45 chr8 12372000 12373500 0 34 chr8 12391800 12392100 0.1055 55 chr8 12394800 12401700 0 68 chr8 12402900 12414600 0 75 chr8 12416100 12420300 0 80 chr8 12423600 12432600 0 90 chr8 12434100 12434700 0 90 chr8 12438300 12438600 0 102 chr8 12440100 12441300 0 102 chr8 12442500 12442800 0 102 chr8 12444600 12451200 0 115 chr8 12452400 12461100 0 115 chr8 12462300 12475200 0 115 chr8 12477300 12479100 0 88 chr8 12480300 12483300 0.0051 73 chr8 12489000 12496500 0 117 chr8 12497700 12501900 0 117 chr8 12503100 12507300 0 86 chr8 12509400 12511200 0 107 chr8 12512400 12512700 0.0847 46 chr8 12514200 12517800 0 84 chr8 12520200 12520800 0.0088 96 chr8 12522600 12523800 0.0024 96 chr8 12528000 12528300 0.1528 88 chr8 12529800 12532200 0.0044 98 chr8 12533700 12537300 0 75 chr8 12600000 12601200 0.204 69 chr8 12602700 12603000 0.0589 73 chr8 12604200 12606000 0 75 chr8 12607500 12609900 0 75 chr8 12625800 12626100 0.0381 96 chr8 13920600 13920900 0.1277 21 chr8 14805000 14805300 0.0551 86 chr8 15557100 15558600 0.0044 48 chr8 15559800 15561000 0.0338 103 chr8 15579300 15580800 0.0167 97 chr8 16672800 16674600 0.1635 76 chr8 16946400 16946700 0.1322 57 chr8 18002100 18002700 0.046 56 chr8 18597300 18598500 0 78 chr8 18794100 18794700 0 68 chr8 18910200 18910500 0.1298 78 chr8 20685000 20685600 0.0991 61 chr8 23312700 23313000 0.1549 54 chr8 24255300 24255900 0.0081 62 chr8 25216200 25216800 0 40 chr8 25730700 25735200 0.0346 65 chr8 26005200 26005500 0.0446 17 chr8 26396100 26399700 0 97 chr8 27060900 27061500 0.0135 55 chr8 27114300 27119400 0 106 chr8 27552900 27553200 0.0278 55 chr8 29120400 29121600 0.0084 83 chr8 30246600 30246900 0.2982 38 chr8 30393900 30407700 0 39 chr8 32816700 32819400 0 68 chr8 33262800 33263100 0.0526 51 chr8 35173500 35174100 0.0004 103 chr8 35175300 35176500 0.0004 103 chr8 35523600 35524200 0 44 chr8 35529600 35532900 0 101 chr8 36484800 36485400 0.0252 96 chr8 37193400 37194300 0 74 chr8 39491400 39492000 0.0059 16 chr8 40432800 40437900 0 80 chr8 40652400 40652700 0.1323 55 chr8 41018700 41019000 0.1613 66 chr8 41503500 41503800 0.0807 44 chr8 43238100 43238400 0.2996 485 chr8 43260900 43261200 0.0277 73 chr8 43905900 43906200 0.0003 67 chr8 43938000 43939800 0 32 chr8 43941900 43942500 0.0083 102 chr8 43944300 43947900 0 71 chr8 43949400 43950300 0 71 chr8 43952100 43953000 0 71 chr8 43957200 43959900 0 79 chr8 43961700 43962000 0.0143 61 chr8 43967400 43983900 0 87 chr8 44034000 44036400 0 306 chr8 44037900 44117400 0 306 chr8 44118600 44316300 0 306 chr8 44317800 44401800 0 306 chr8 44403000 44489400 0 306 chr8 44490900 44740500 0 285 chr8 44741700 44828100 0 285 chr8 44829300 44968200 0 433 chr8 44969400 45015600 0 433 chr8 45016800 45031200 0 268 chr8 45032400 45391200 0 268 chr8 45392700 45405300 0 268 chr8 45406800 45620100 0 268 chr8 45621300 45705600 0 268 chr8 45707100 45877200 0 177 chr8 45930600 45930900 0 23 chr8 45932400 45933000 0 35 chr8 45936600 45939900 0 75 chr8 45941100 45945600 0 75 chr8 45948000 45951600 0 99 chr8 45952800 45954000 0 99 chr8 45955500 45956700 0 72 chr8 45959400 45960600 0 68 chr8 45962400 45964500 0 68 chr8 45965700 45966000 0.0447 55 chr8 45968700 45969300 0.0632 58 chr8 46983900 46984500 0.1117 79 chr8 47235000 47235300 0.0528 99 chr8 47332200 47332800 0.0299 126 chr8 48944100 48944400 0.0347 85 chr8 50166000 50166600 0 51 chr8 51535200 51535500 0.0571 86 chr8 53612700 53614200 0.0498 51 chr8 54031800 54032400 0.0081 83 chr8 54126000 54126300 0.2784 55 chr8 54594000 54594300 0.2646 63 chr8 56419200 56419500 0.1547 54 chr8 57160500 57160800 0.1778 60 chr8 57206400 57207600 0.0003 420 chr8 57211200 57213900 0.0126 479 chr8 58483500 58484400 0.0807 65 chr8 58915800 58920300 0 75 chr8 59169900 59170200 0.0673 61 chr8 61268700 61269000 0.0827 80 chr8 61752000 61752300 0.0095 44 chr8 63797700 63800700 0.0122 97 chr8 63802200 63802800 0.0821 61 chr8 64685400 64685700 0.1411 58 chr8 65121900 65122200 0.1778 73 chr8 66024600 66025800 0 87 chr8 66949800 66950100 0.1332 78 chr8 68362800 68367600 0.0082 124 chr8 69689100 69689700 0.0514 39 chr8 70671900 70672200 0.0517 56 chr8 71409300 71409600 0.0079 72 chr8 71410800 71411400 0.0079 72 chr8 72150000 72150600 0.045 65 chr8 72152100 72152400 0.2234 47 chr8 72482100 72482400 0.0639 86 chr8 72484500 72484800 0.0639 86 chr8 72875700 72881400 0 93 chr8 74947500 74947800 0.102 68 chr8 75280500 75282900 0.0279 91 chr8 75445200 75446700 0 70 chr8 75447900 75448200 0.119 57 chr8 75621600 75626700 0 70 chr8 76425300 76426200 0 58 chr8 79171800 79174200 0 71 chr8 80358600 80358900 0.0125 87 chr8 81134100 81134400 0.2326 45 chr8 81429600 81430200 0.2223 66 chr8 81768600 81768900 0.1745 75 chr8 81771900 81772200 0.1092 88 chr8 83451300 83451600 0.0802 67 chr8 83883600 83883900 0 21 chr8 84421200 84422700 0.1842 86 chr8 84465300 84465900 0.0535 68 chr8 84615900 84616200 0.1314 185 chr8 84618600 84618900 0.0074 77 chr8 85642800 85643700 0 462 chr8 85645500 85650900 0 1042 chr8 85652400 85659900 0 1042 chr8 85661700 85664100 0.0092 534 chr8 85714200 85741500 0 1030 chr8 85743600 85828500 0 1030 chr8 87326700 87327000 0.1693 73 chr8 87629400 87629700 0.0653 51 chr8 88149900 88150500 0.0302 89 chr8 88152000 88152900 0.0302 89 chr8 88154100 88154400 0.0302 89 chr8 88251900 88252200 0.1668 71 chr8 88380000 88380300 0.1809 12 chr8 88686300 88691400 0 72 chr8 89555700 89556300 0.0307 56 chr8 90684300 90685500 0.0348 101 chr8 91193400 91193700 0.0993 69 chr8 91307100 91307400 0.1406 79 chr8 91520400 91527600 0 76 chr8 91559100 91564200 0 90 chr8 91895400 91895700 0.1773 84 chr8 93406500 93411300 0 140 chr8 94590300 94590900 0 76 chr8 95368500 95369100 0.0939 81 chr8 95370300 95370600 0.0939 81 chr8 95371800 95372100 0.0939 81 chr8 95552400 95555400 0.0304 76 chr8 95556600 95557800 0.0304 76 chr8 96118800 96119100 0.1411 96 chr8 96121800 96122100 0.219 78 chr8 96739200 96739500 0.2045 75 chr8 97296000 97300200 0.0152 120 chr8 98261400 98261700 0.2869 68 chr8 98615700 98616300 0.1299 71 chr8 98619600 98620200 0.0462 88 chr8 99052200 99052500 0.0775 56 chr8 99293100 99293400 0.1339 80 chr8 99426300 99427200 0.0329 68 chr8 99693900 99694500 0 67 chr8 101893500 101893800 0.1275 75 chr8 101896800 101897100 0.1993 39 chr8 103604700 103605300 0.0797 60 chr8 103607700 103608000 0.2395 69 chr8 103784400 103784700 0.1139 70 chr8 104740200 104741400 0.0169 72 chr8 104742600 104744700 0 66 chr8 105169200 105169500 0.0012 24 chr8 105367200 105368100 0.0031 62 chr8 107891100 107891400 0.1317 31 chr8 110888100 110888400 0.0564 29 chr8 110953500 110954400 0.0172 74 chr8 110956500 110956800 0.1953 48 chr8 111156000 111156300 0.0965 23 chr8 112595400 112595700 0.0549 47 chr8 112597500 112597800 0.1341 70 chr8 112911600 112911900 0.1442 210 chr8 113304300 113304600 0.078 61 chr8 113451600 113451900 0.0702 46 chr8 113674500 113674800 0.1035 73 chr8 113909700 113910300 0.0692 68 chr8 114003300 114003600 0.1511 80 chr8 114509100 114509400 0.0847 83 chr8 114581700 114582000 0.168 48 chr8 114633300 114633600 0.0736 56 chr8 116679600 116680800 0.0955 88 chr8 119160000 119160300 0.07 55 chr8 119162100 119162700 0.0036 78 chr8 119163900 119164200 0.1665 70 chr8 119235900 119236200 0.0197 68 chr8 120351600 120353400 0.0046 68 chr8 120522000 120522300 0.1721 35 chr8 120646200 120646500 0.1927 62 chr8 120647700 120648300 0.0217 85 chr8 121782000 121782300 0.2049 57 chr8 122249700 122250000 0.0467 78 chr8 123860100 123863700 0.034 84 chr8 125583000 125588700 0 85 chr8 126236700 126237000 0.1965 21 chr8 126313500 126313800 0.0197 59 chr8 126315000 126315300 0.0197 59 chr8 126317100 126317400 0.0587 51 chr8 126801600 126801900 0.0722 65 chr8 126980700 126981600 0.0071 33 chr8 126984000 126985500 0.0207 38 chr8 127203600 127203900 0.1562 51 chr8 127317300 127317600 0.0484 49 chr8 127320300 127320600 0.1563 57 chr8 127380000 127381800 0.0013 57 chr8 127630500 127630800 0.2566 75 chr8 128453100 128458800 0 92 chr8 128717100 128717700 0.0498 57 chr8 128825100 128826000 0.1021 71 chr8 128892000 128892300 0.0915 58 chr8 128894700 128895000 0.0915 58 chr8 128896500 128896800 0.0915 58 chr8 129153600 129155700 0.0904 59 chr8 129329100 129329400 0.0595 94 chr8 129496500 129497700 0.0289 40 chr8 131772300 131773800 0.0213 98 chr8 132618300 132618600 0.0511 77 chr8 133313100 133313400 0 38 chr8 134070900 134076600 0 98 chr8 135260400 135260700 0.1285 64 chr8 135262200 135264300 0.0609 83 chr8 135876300 135881700 0 69 chr8 135884400 135884700 0.1787 44 chr8 135954900 135955200 0.0074 58 chr8 136191000 136191600 0.1389 84 chr8 136438500 136438800 0.1708 75 chr8 136440000 136443300 0 67 chr8 137236200 137236500 0.0495 27 chr8 137560500 137560800 0.2281 65 chr8 138952500 138952800 0.0535 71 chr8 139460100 139460400 0.1756 74 chr8 140196300 140196600 0.1362 98 chr8 140622300 140623200 0.1398 43 chr8 141335100 141335700 0.021 68 chr8 141492300 141493200 0 325 chr8 141550800 141551100 0.2214 28 chr8 141633300 141634500 0 40 chr8 141970800 141971100 0.0677 44 chr8 142390500 142390800 0.2071 47 chr8 142760700 142761000 0.2302 52 chr8 143458500 143458800 0.2622 57 chr8 143661900 143662200 0.2343 88 chr8 143858400 143858700 0.0166 113 chr8 143860200 143866500 0 150 chr8 143981400 143981700 0.2027 142 chr8 144531300 144531900 0.0396 171 chr8 144612300 144612600 0.0068 59 chr8 144625500 144626400 0.1235 45 chr8 144634200 144634800 0.0431 32 chr9 12300 13800 0.0465 151 chr9 15000 28800 0 160 chr9 30000 31500 0 160 chr9 32700 38700 0 160 chr9 51300 51600 0.0617 132 chr9 56100 56400 0.0771 133 chr9 66000 68400 0 97 chr9 77400 78000 0.0222 125 chr9 96300 96600 0.1799 76 chr9 119700 120000 0.077 66 chr9 122700 123000 0.1411 78 chr9 124500 124800 0.0606 88 chr9 126000 126300 0.0606 88 chr9 130800 131100 0.0441 52 chr9 132900 134700 0.002 77 chr9 135900 136500 0.0121 48 chr9 137700 138000 0.0788 64 chr9 168000 168300 0.1403 95 chr9 183900 185100 0.0012 77 chr9 320100 322200 0 60 chr9 380100 380700 0 54 chr9 707700 708000 0.0013 84 chr9 998700 999000 0.2021 49 chr9 1225200 1229400 0.0053 78 chr9 1338300 1338600 0 78 chr9 3504600 3504900 0.2378 17 chr9 3780600 3780900 0.1316 40 chr9 4346700 4347000 0.26 24 chr9 4608000 4608600 0.0984 90 chr9 5240100 5242800 0 76 chr9 5303100 5304300 0 56 chr9 5338200 5339400 0 71 chr9 5962500 5962800 0.009 52 chr9 6179400 6179700 0.1712 98 chr9 7668000 7668300 0.0211 74 chr9 9932400 9932700 0.1648 66 chr9 10020600 10022400 0 37 chr9 10136700 10137600 0 90 chr9 12337500 12337800 0.0957 73 chr9 12477000 12477600 0.0531 59 chr9 12557100 12559500 0 67 chr9 13040100 13040400 0.0964 13 chr9 13043100 13043400 0.0681 30 chr9 14666700 14668200 0.0155 83 chr9 15406500 15407400 0.0065 43 chr9 16466100 16467300 0 49 chr9 17576400 17576700 0.1145 40 chr9 17686200 17686500 0.0629 59 chr9 17764800 17765100 0.1421 45 chr9 17780700 17781300 0.017 60 chr9 17912400 17912700 0.0514 26 chr9 17924700 17925000 0.2098 105 chr9 17944800 17945100 0.0754 50 chr9 19536600 19541100 0.0128 84 chr9 20657400 20657700 0.0304 51 chr9 21537300 21538200 0.0006 107 chr9 21540900 21541500 0.1682 79 chr9 22350600 22350900 0.0746 57 chr9 22353900 22354200 0.1106 111 chr9 22701000 22701300 0.052 35 chr9 22999500 22999800 0.0251 23 chr9 23075100 23075400 0.1368 28 chr9 23936100 23936700 0.0312 55 chr9 24576600 24576900 0.0318 45 chr9 25073700 25074000 0.1617 107 chr9 25285800 25286100 0.2672 52 chr9 27691800 27692100 0.2453 59 chr9 27694200 27694500 0.0681 43 chr9 28112100 28116900 0 85 chr9 28349400 28349700 0.234 73 chr9 29306100 29306400 0.1966 66 chr9 29624700 29625000 0.0911 22 chr9 31299300 31299600 0.0765 78 chr9 32711400 32711700 0.0557 35 chr9 32713500 32713800 0.0216 14 chr9 34244400 34245900 0 68 chr9 34273500 34274700 0 69 chr9 35373300 35373900 0 12 chr9 38241600 38241900 0.1446 45 chr9 38243100 38243400 0.0138 56 chr9 38775900 38776500 0 48 chr9 38781000 38781600 0.051 61 chr9 38783700 38784000 0.0923 47 chr9 38798100 38798400 0.1305 26 chr9 38816100 38816400 0.0544 43 chr9 38819100 38819700 0.0864 49 chr9 38824200 38825100 0.0176 56 chr9 38829000 38829300 0.1478 36 chr9 38832900 38835600 0 66 chr9 38836800 38838600 0 66 chr9 38840700 38843400 0 66 chr9 38845200 38845500 0 52 chr9 38847000 38851800 0 52 chr9 38853900 38862900 0 58 chr9 38865000 38865300 0.0351 47 chr9 38866500 38875200 0 67 chr9 38880600 38889600 0 58 chr9 38891400 38896200 0 74 chr9 38898300 38916600 0 59 chr9 38919300 38920200 0.0604 63 chr9 38924400 38925000 0.0074 46 chr9 38926200 38926800 0 80 chr9 38929200 38932500 0 80 chr9 38934300 38936100 0 80 chr9 38937600 38946600 0 80 chr9 38949000 38949600 0.1143 49 chr9 38952000 38952300 0 69 chr9 38953500 38955900 0 69 chr9 38957100 38957400 0.0522 49 chr9 38959800 38960700 0 65 chr9 38963100 38964000 0.0021 76 chr9 38966400 38968500 0 89 chr9 38969700 38972400 0 89 chr9 38973900 38975100 0.093 88 chr9 38979300 38985900 0 134 chr9 38988600 38988900 0.1313 86 chr9 38998500 38998800 0.0713 97 chr9 39150300 39150600 0.0821 20 chr9 39153000 39153600 0.009 33 chr9 39156600 39159000 0 38 chr9 39160200 39162600 0 42 chr9 39163800 39164400 0 42 chr9 39165900 39174300 0 42 chr9 39175800 39177600 0 36 chr9 39179400 39180300 0 50 chr9 39181800 39248400 0 50 chr9 39252000 39252900 0 44 chr9 39254100 39288000 0 38 chr9 39289500 39339300 0 69 chr9 39340500 39341700 0 69 chr9 39344100 39357000 0 63 chr9 39360000 39360300 0.015 65 chr9 39363300 39367200 0 53 chr9 39369300 39386700 0 66 chr9 39388500 39412200 0 79 chr9 39413400 39422100 0 79 chr9 39423600 39446400 0 70 chr9 39452700 39453000 0.114 52 chr9 39469200 39469500 0.1398 53 chr9 39487800 39488100 0.0946 66 chr9 39489900 39491700 0 66 chr9 39493200 39496200 0 64 chr9 39497400 39498600 0 64 chr9 39499800 39504000 0 112 chr9 39507000 39508200 0 112 chr9 39509400 39517200 0 112 chr9 39519000 39520800 0 112 chr9 39522900 39531600 0 111 chr9 39534300 39536100 0 111 chr9 39549000 39549300 0.015 81 chr9 39569400 39569700 0.099 44 chr9 39573300 39573600 0.0628 65 chr9 39593700 39594000 0 90 chr9 39596400 39601800 0 90 chr9 39603300 39604200 0 90 chr9 39611400 39613200 0.0296 57 chr9 39616200 39626400 0 71 chr9 39627600 39664200 0 98 chr9 39665400 39666300 0 73 chr9 39667500 39721800 0 73 chr9 39723000 39744000 0 77 chr9 39745500 39758400 0 77 chr9 39759600 39773100 0 83 chr9 39774300 39777000 0 75 chr9 39778500 39788100 0 75 chr9 39789300 39790200 0.003 74 chr9 39791700 39792000 0.003 74 chr9 39793500 39800400 0 87 chr9 39801600 39802500 0 87 chr9 39804000 39804300 0.0037 78 chr9 39805800 39807000 0.0037 78 chr9 39808200 39808500 0.0037 78 chr9 39812100 39812400 0.1315 80 chr9 39814800 39818400 0.007 67 chr9 39819900 39820500 0.0018 71 chr9 39822300 39824100 0 70 chr9 39839100 39842100 0 101 chr9 39843300 40000800 0 101 chr9 40002600 40002900 0 101 chr9 40004700 40005600 0 85 chr9 40008000 40012200 0 85 chr9 40013400 40013700 0 85 chr9 40015500 40016100 0.0324 77 chr9 40026600 40027200 0.0257 66 chr9 40032000 40032300 0.1155 39 chr9 40033500 40035000 0.0588 56 chr9 40037100 40038300 0 52 chr9 40040100 40040400 0 58 chr9 40041600 40043400 0 58 chr9 40044900 40045500 0 58 chr9 40047300 40049100 0 69 chr9 40052100 40054200 0 70 chr9 40056000 40056300 0.0977 49 chr9 40059900 40061400 0 49 chr9 40064700 40068000 0.0025 60 chr9 40070700 40083900 0 82 chr9 40085100 40086900 0 82 chr9 40088700 40091700 0 64 chr9 40092900 40095300 0 64 chr9 40097700 40098900 0 64 chr9 40100400 40105800 0 57 chr9 40107000 40111500 0 57 chr9 40112700 40114200 0 57 chr9 40115700 40127100 0 90 chr9 40128600 40128900 0 90 chr9 40131300 40133700 0 95 chr9 40134900 40137300 0 95 chr9 40138800 40139100 0 94 chr9 40140900 40163100 0 94 chr9 40164600 40171800 0 94 chr9 40173000 40174200 0 94 chr9 40178400 40179300 0 51 chr9 40180500 40183500 0 51 chr9 40184700 40189500 0 51 chr9 40198500 40199700 0.062 56 chr9 40200900 40217100 0 55 chr9 40218600 40219200 0.1122 85 chr9 40222200 40222500 0.1736 23 chr9 40227000 40228500 0.0096 67 chr9 40229700 40297200 0 136 chr9 40299300 40344900 0 136 chr9 40346100 40383000 0 136 chr9 40384200 40386300 0 54 chr9 40387800 40389600 0.0022 83 chr9 40391700 40401000 0 95 chr9 40402200 40414200 0 95 chr9 40415700 40472100 0 95 chr9 40473900 40478400 0 95 chr9 40479600 40486200 0 95 chr9 40488000 40501200 0 54 chr9 40503000 40533900 0 54 chr9 40536000 40536300 0.1878 19 chr9 40538400 40543200 0 52 chr9 40545900 40546800 0 122 chr9 40548600 40553100 0 122 chr9 40554900 40561200 0 122 chr9 40562400 40568400 0 122 chr9 40569600 40570500 0 122 chr9 40572000 40572900 0.0016 55 chr9 40574100 40575000 0 65 chr9 40577700 40578000 0.1219 96 chr9 40581900 40582800 0 78 chr9 40585200 40586400 0.0013 72 chr9 40588200 40589400 0 87 chr9 40590900 40591200 0.0059 70 chr9 40593000 40595100 0 102 chr9 40596900 40598700 0 102 chr9 40600200 40607700 0 102 chr9 40608900 40609500 0 102 chr9 40611600 40646400 0 64 chr9 40647600 40649100 0 56 chr9 40651800 40661100 0 67 chr9 40662600 40695900 0 67 chr9 40700400 40702500 0 56 chr9 40704600 40705800 0.0442 54 chr9 40709400 40711500 0 65 chr9 40713600 40714200 0.1554 48 chr9 40715400 40715700 0.015 70 chr9 40717500 40718100 0.0021 48 chr9 40719300 40720200 0.1169 73 chr9 40723200 40724700 0.0718 74 chr9 40728300 40729200 0 76 chr9 40730400 40730700 0 76 chr9 40731900 40735200 0.0082 65 chr9 40738200 40738500 0.0134 51 chr9 40740600 40740900 0.0089 43 chr9 40743300 40745100 0.0047 57 chr9 40746300 40747800 0.0024 66 chr9 40749600 40752300 0 74 chr9 40754100 40754400 0 74 chr9 40759500 40759800 0.0108 62 chr9 40763100 40764300 0 76 chr9 40765500 40768200 0 76 chr9 40770000 40770900 0 64 chr9 40773900 40774500 0.0035 46 chr9 40776600 40777200 0.034 70 chr9 40778400 40778700 0.0124 61 chr9 40785300 40786500 0.0173 69 chr9 40792500 40794300 0 78 chr9 40795500 40796100 0 78 chr9 40798800 40799100 0 78 chr9 40801200 40801500 0.0983 62 chr9 40803300 40804500 0 56 chr9 40809300 40809600 0.0058 72 chr9 40814400 40814700 0.044 72 chr9 40820400 40820700 0.025 86 chr9 40821900 40823100 0.025 86 chr9 40827300 40827900 0 67 chr9 40830300 40830600 0.1226 93 chr9 40834500 40835100 0 67 chr9 40842000 40843500 0.0024 68 chr9 40848900 40849200 0.0782 43 chr9 40852500 40852800 0.0178 87 chr9 40854300 40854600 0.0178 87 chr9 40856100 40856400 0.0178 87 chr9 40863900 40867200 0 83 chr9 40967400 40968000 0.0942 159 chr9 41057400 41057700 0.0854 136 chr9 41077800 41078100 0.2073 99 chr9 41081400 41081700 0.1175 121 chr9 41102700 41103600 0 119 chr9 41105100 41105400 0.0514 162 chr9 41107800 41108100 0.0644 79 chr9 41109600 41110200 0.0006 190 chr9 41114700 41115300 0 147 chr9 41116800 41117100 0 147 chr9 41118600 41118900 0 179 chr9 41121000 41124000 0 179 chr9 41125200 41126700 0 179 chr9 41127900 41131800 0 179 chr9 41133000 41138700 0 119 chr9 41140200 41140800 0 99 chr9 41142300 41143800 0 99 chr9 41145000 41150700 0 99 chr9 41152800 41154300 0 99 chr9 41155500 41155800 0 113 chr9 41157900 41163900 0 113 chr9 41165100 41175900 0 113 chr9 41177400 41183100 0 113 chr9 41185800 41186700 0 59 chr9 41187900 41197500 0 97 chr9 41198700 41200500 0 97 chr9 41203500 41206500 0 97 chr9 41208000 41211000 0.0197 67 chr9 41214600 41216700 0 217 chr9 41217900 41223300 0 217 chr9 41262300 41262900 0.1451 181 chr9 41265600 41265900 0.0365 118 chr9 41268000 41268900 0 137 chr9 41272200 41272800 0 112 chr9 41277000 41277900 0 102 chr9 41283600 41283900 0.1177 126 chr9 41286600 41287800 0.0407 95 chr9 41293500 41293800 0.0366 74 chr9 41297400 41298300 0 63 chr9 41300400 41301900 0.0004 76 chr9 41305200 41305500 0.0347 69 chr9 41311200 41311500 0 85 chr9 41317500 41317800 0.0187 74 chr9 41320800 41321100 0.0303 107 chr9 41322600 41324100 0.0303 107 chr9 41328000 41328300 0.0086 65 chr9 41331000 41331300 0.0978 63 chr9 41337900 41341200 0 92 chr9 41344200 41344500 0.0081 75 chr9 41347500 41347800 0.0359 80 chr9 41351700 41352000 0.0859 70 chr9 41359800 41365500 0 75 chr9 41372400 41372700 0.0082 53 chr9 41375700 41376000 0.0133 54 chr9 41382300 41383200 0 61 chr9 41386800 41387100 0.1759 46 chr9 41391000 41392500 0.0698 54 chr9 41394300 41394600 0.0355 91 chr9 41395800 41396700 0.018 60 chr9 41398200 41400000 0 63 chr9 41403300 41403600 0.1142 62 chr9 41410500 41413800 0 51 chr9 41415000 41415300 0.0386 21 chr9 41424000 41424300 0.1064 11 chr9 41429700 41430000 0.1093 136 chr9 41434500 41434800 0.1929 48 chr9 41438100 41438700 0.017 46 chr9 41441400 41442000 0 65 chr9 41443200 41443500 0 65 chr9 41448600 41449200 0 61 chr9 41450700 41451900 0.0106 42 chr9 41455500 41455800 0.0326 74 chr9 41461800 41462100 0.1144 40 chr9 41469900 41470200 0.0514 65 chr9 41471400 41471700 0.0514 65 chr9 41479500 41479800 0.0246 63 chr9 41491200 41491800 0.0248 54 chr9 41494500 41495400 0 70 chr9 41500500 41501100 0.0005 90 chr9 41515800 41516100 0.0148 70 chr9 41525700 41527200 0 66 chr9 41532900 41533200 0.0388 79 chr9 41541600 41541900 0.2599 49 chr9 41544000 41547900 0 88 chr9 41551800 41552400 0 71 chr9 41555100 41556000 0.0797 56 chr9 41574000 41574300 0 129 chr9 41575500 41607300 0 129 chr9 41608800 41614200 0 90 chr9 41615400 41616600 0.0568 107 chr9 41620500 41622000 0 106 chr9 41628300 41631900 0 121 chr9 41636100 41637600 0.0045 77 chr9 41664300 41665200 0 83 chr9 41667600 41667900 0.0786 73 chr9 41670000 41670300 0.2179 70 chr9 41676600 41687400 0 87 chr9 41696100 41696400 0.0705 71 chr9 41698500 41699100 0.0004 110 chr9 41702400 41703300 0.0039 106 chr9 41706000 41706300 0.0226 103 chr9 41718900 41725200 0 77 chr9 41726400 41731800 0 83 chr9 41733000 41733600 0 70 chr9 41741700 41742000 0.1411 66 chr9 41743200 41753700 0 94 chr9 41757000 41757300 0.1016 94 chr9 41758800 41769900 0 81 chr9 41771100 41771400 0 81 chr9 41773200 41773500 0 81 chr9 41786100 41786400 0.0941 107 chr9 41792700 41793000 0.2103 53 chr9 41805600 41805900 0.0239 38 chr9 41808300 41808900 0.0182 115 chr9 41812500 41912400 0 144 chr9 41913900 41915400 0 144 chr9 41957100 41957400 0.0066 62 chr9 41970300 41972400 0 68 chr9 41974500 41976000 0 68 chr9 41979300 41982600 0.0144 70 chr9 41984100 41985600 0 57 chr9 41986800 41987100 0 57 chr9 41988900 41989500 0 57 chr9 41991300 41991600 0.14 67 chr9 41994900 42001200 0.0002 74 chr9 42004200 42004500 0 79 chr9 42005700 42011100 0 79 chr9 42013500 42013800 0.0705 52 chr9 42015000 42016200 0 53 chr9 42021300 42023100 0 62 chr9 42025200 42028500 0 75 chr9 42030300 42030600 0.0307 68 chr9 42033600 42033900 0.0628 64 chr9 42039300 42041100 0 62 chr9 42048300 42053100 0 61 chr9 42056700 42057300 0.0745 51 chr9 42058800 42059700 0 63 chr9 42065100 42066000 0 59 chr9 42068100 42070200 0 76 chr9 42073200 42074400 0.0396 64 chr9 42081600 42084900 0 66 chr9 42087900 42088200 0.0612 38 chr9 42091200 42092400 0 74 chr9 42100500 42102600 0 63 chr9 42103800 42106200 0 63 chr9 42128700 42129000 0.1669 59 chr9 42187800 42188100 0.1007 75 chr9 42198600 42198900 0.1179 39 chr9 42348600 42349200 0.0304 51 chr9 42350400 42350700 0.0683 71 chr9 42402300 42402600 0.0241 42 chr9 42408300 42408900 0 99 chr9 42410400 42412200 0 99 chr9 42413400 42413700 0.0932 72 chr9 42417300 42417600 0.0967 28 chr9 42419100 42419400 0.0129 15 chr9 42495600 42500400 0 79 chr9 42508800 42517200 0 81 chr9 42521400 42528600 0 64 chr9 42530100 42533400 0 64 chr9 42535800 42538200 0 70 chr9 42539400 42545700 0 84 chr9 42546900 42552900 0 84 chr9 42554100 42555300 0 84 chr9 42556800 42557100 0 84 chr9 42558300 42561000 0 89 chr9 42562200 42566100 0 89 chr9 42569700 42570300 0.0063 79 chr9 42571500 42573600 0.0186 71 chr9 42575400 42577500 0 77 chr9 42579300 42591000 0 95 chr9 42592800 42600000 0 95 chr9 42601500 42601800 0.0376 75 chr9 42603300 42632100 0 91 chr9 42633300 42634500 0 91 chr9 42635700 42637200 0 91 chr9 42638400 42638700 0 79 chr9 42639900 42645300 0 79 chr9 42646500 42660600 0 79 chr9 42662100 42687300 0 83 chr9 42688500 42689400 0 81 chr9 42691200 42691800 0.0156 64 chr9 42729600 42729900 0.0322 51 chr9 42733200 42733500 0.1256 75 chr9 42784500 42785100 0.0223 51 chr9 42820200 42820500 0.0424 67 chr9 42829200 42829500 0.0113 55 chr9 42857400 42857700 0.0011 38 chr9 42882600 42882900 0.2037 83 chr9 42970500 42970800 0.0293 61 chr9 42996600 42999000 0 81 chr9 43000500 43000800 0 81 chr9 43002600 43003200 0 81 chr9 43009500 43009800 0.0959 45 chr9 43032900 43033200 0.0085 53 chr9 43040100 43040400 0.088 48 chr9 43053300 43053600 0.0929 61 chr9 43068900 43069200 0.0726 64 chr9 43096500 43096800 0.1177 65 chr9 43105500 43105800 0.152 72 chr9 43132500 43132800 0.0358 73 chr9 43194600 43195500 0.0115 41 chr9 43214700 43215000 0.0116 35 chr9 43275000 43281300 0 75 chr9 43283100 43292100 0 53 chr9 43293300 43332300 0 142 chr9 43334100 43370100 0 161 chr9 43371300 43377300 0 161 chr9 43385100 43443600 0 413 chr9 43445100 43455600 0 583 chr9 43456800 44124600 0 583 chr9 44126400 44251500 0 626 chr9 44252700 44298900 0 626 chr9 44300100 44427600 0 360 chr9 44429100 44652300 0 517 chr9 44653800 44719500 0 480 chr9 44720700 44730600 0 480 chr9 44731800 44760900 0 480 chr9 44762100 44799000 0 480 chr9 44800200 44859000 0 480 chr9 44860200 44868000 0 344 chr9 44869500 44920200 0 344 chr9 44921400 45019200 0 344 chr9 45020400 45031500 0 344 chr9 45033600 45034500 0 308 chr9 45036000 45074400 0 308 chr9 45075600 45094500 0 308 chr9 45095700 45112800 0 308 chr9 45114600 45116400 0 198 chr9 45117600 45151800 0 198 chr9 45153300 45164700 0 198 chr9 45166200 45182700 0 261 chr9 45184200 45201000 0 261 chr9 45203400 45205800 0 261 chr9 45207600 45215400 0 261 chr9 45216900 45231600 0 239 chr9 45232800 45261900 0 239 chr9 45263400 45264600 0 239 chr9 45265800 45291300 0 239 chr9 45292500 45298500 0 239 chr9 45300900 45306000 0 239 chr9 45307500 45322500 0 239 chr9 45324000 45331800 0 361 chr9 45333300 45335700 0 361 chr9 45336900 45368400 0 361 chr9 45369600 45384300 0 361 chr9 45385500 45422700 0 361 chr9 45424200 45484200 0 361 chr9 45485700 45518700 0 361 chr9 60548400 60548700 0.1185 46 chr9 60550200 60552300 0 46 chr9 60553800 60560400 0 195 chr9 60561900 60570900 0 195 chr9 60572400 60616200 0 311 chr9 60618000 60654000 0 489 chr9 60655200 60656700 0 303 chr9 60657900 60679200 0 303 chr9 60680400 60682500 0.0183 154 chr9 60684000 60687300 0.0183 154 chr9 60749700 60759600 0 65 chr9 60762000 60765300 0.0242 60 chr9 60767100 60767400 0.1718 59 chr9 60769200 60772500 0 65 chr9 60774000 60779400 0 44 chr9 60829500 60863400 0 54 chr9 60864600 60864900 0 54 chr9 60866100 60875100 0 46 chr9 60876900 60885000 0 54 chr9 60886800 60887700 0 54 chr9 60891000 60893100 0 85 chr9 60894900 60898200 0 85 chr9 60899400 60980400 0 85 chr9 60981600 61003800 0 49 chr9 61053900 61126200 0 74 chr9 61127400 61138500 0 74 chr9 61143600 61144200 0 49 chr9 61147800 61149600 0 55 chr9 61150800 61151100 0 55 chr9 61152300 61157100 0 64 chr9 61161000 61161300 0.0196 77 chr9 61163400 61163700 0.0072 36 chr9 61167600 61168200 0 81 chr9 61170300 61173000 0 81 chr9 61174500 61179000 0 63 chr9 61183500 61184700 0 76 chr9 61185900 61191300 0 76 chr9 61192800 61196700 0 50 chr9 61198800 61211100 0 73 chr9 61212900 61213200 0.0064 38 chr9 61218900 61219200 0 58 chr9 61220400 61223100 0 58 chr9 61224300 61224600 0.1754 21 chr9 61226100 61226400 0.0029 52 chr9 61230900 61231200 0.0259 44 chr9 61282200 61315500 0 56 chr9 61317900 61318500 0.0024 50 chr9 61319700 61320000 0 44 chr9 61322100 61329600 0 44 chr9 61334100 61337400 0 35 chr9 61338600 61340100 0 42 chr9 61341300 61342200 0 42 chr9 61344900 61345800 0 34 chr9 61347600 61359600 0 44 chr9 61360800 61362000 0 44 chr9 61373400 61373700 0.0679 35 chr9 61375200 61376400 0 40 chr9 61377900 61380000 0 32 chr9 61381200 61381800 0 41 chr9 61383000 61384500 0 41 chr9 61385700 61396200 0 54 chr9 61398900 61399500 0 33 chr9 61401900 61402200 0.0222 24 chr9 61403400 61403700 0.0398 41 chr9 61405200 61405500 0.0398 41 chr9 61409400 61412100 0 48 chr9 61413900 61468800 0 48 chr9 61529100 61529400 0.1386 81 chr9 61586700 61587900 0 70 chr9 61589100 61590900 0 70 chr9 61637700 61638000 0.1171 54 chr9 61644300 61644600 0.0774 59 chr9 61647000 61647300 0.1014 57 chr9 61648500 61663800 0 84 chr9 61785300 61879800 0 1017 chr9 61881300 61893000 0 1017 chr9 61894800 61911000 0 1017 chr9 61914300 61914900 0.0001 93 chr9 61917900 61919700 0.0032 95 chr9 61921800 61926600 0 77 chr9 61928100 61933500 0 77 chr9 61935000 61944000 0 77 chr9 61945200 61946700 0 72 chr9 61953600 61957200 0 114 chr9 61959000 61959300 0 114 chr9 61961100 61966800 0 114 chr9 61968600 61969500 0 114 chr9 61970700 61971600 0 114 chr9 61973700 61974300 0 94 chr9 61975500 61977900 0 94 chr9 61986300 61986900 0.0135 35 chr9 61989300 61989900 0 48 chr9 61991100 61992000 0 48 chr9 61993500 61995900 0 48 chr9 61997400 62000700 0 58 chr9 62002500 62039100 0 65 chr9 62040300 62043900 0 59 chr9 62045700 62049000 0 59 chr9 62050800 62051400 0.0067 38 chr9 62054700 62055000 0.0086 30 chr9 62056800 62058600 0 71 chr9 62059800 62060100 0 71 chr9 62061300 62076300 0 68 chr9 62078400 62104200 0 68 chr9 62105400 62117700 0 61 chr9 62118900 62121300 0 61 chr9 62122500 62136300 0 60 chr9 62137500 62144400 0 60 chr9 62145600 62146500 0 60 chr9 62147700 62149500 0 59 chr9 62249700 62345100 0 113 chr9 62346300 62358300 0 113 chr9 62359500 62384400 0 113 chr9 62385900 62407500 0 113 chr9 62408700 62425800 0 113 chr9 62427000 62438700 0 113 chr9 62440800 62442000 0.0191 74 chr9 62443200 62443800 0.0149 59 chr9 62445900 62446200 0.1219 44 chr9 62448000 62452500 0 89 chr9 62454000 62455500 0 78 chr9 62456700 62457900 0 78 chr9 62459100 62466600 0 74 chr9 62467800 62468100 0 74 chr9 62469600 62508300 0 112 chr9 62509500 62526300 0 112 chr9 62528100 62530200 0 112 chr9 62531400 62532000 0.023 81 chr9 62535600 62539200 0 69 chr9 62540700 62543400 0 69 chr9 62545500 62545800 0.0043 72 chr9 62547300 62547600 0.0043 72 chr9 62549700 62553000 0 76 chr9 62554200 62554800 0 76 chr9 62556000 62562300 0 76 chr9 62563500 62568000 0 92 chr9 62569200 62582700 0 92 chr9 62583900 62596800 0 92 chr9 62598600 62601300 0 77 chr9 62602500 62606700 0 67 chr9 62608200 62610000 0.0022 76 chr9 62612100 62612400 0.0022 76 chr9 62614500 62627700 0 67 chr9 62628900 62655000 0 105 chr9 62656200 62672100 0 105 chr9 62673300 62696700 0 105 chr9 62697900 62699700 0 105 chr9 62700900 62716500 0 105 chr9 62718600 62724000 0 85 chr9 62725200 62727300 0 85 chr9 62729400 62732700 0 85 chr9 62734500 62746200 0 85 chr9 62748300 62748900 0 85 chr9 62812200 62812500 0.0172 128 chr9 62829900 62830500 0.0087 163 chr9 62832300 62833200 0 163 chr9 62836800 62837100 0.0236 111 chr9 62846700 62848200 0.0361 163 chr9 62883600 62884800 0.0072 82 chr9 62886300 62892600 0 73 chr9 62894100 62896500 0 60 chr9 62900400 62900700 0.1494 72 chr9 62904600 62907900 0 94 chr9 62910000 62913900 0 98 chr9 62917800 62918400 0.0004 73 chr9 62919900 62921100 0 82 chr9 62922900 62923200 0 74 chr9 62924700 62945700 0 74 chr9 62947200 62949600 0 36 chr9 62951100 62958300 0 97 chr9 63008400 63023400 0 62 chr9 63024900 63038100 0 59 chr9 63039600 63040200 0 59 chr9 63042600 63057900 0 67 chr9 63059400 63074700 0 125 chr9 63076500 63156300 0 125 chr9 63157500 63162300 0 125 chr9 63163800 63174300 0 125 chr9 63175500 63180000 0 125 chr9 63181500 63187500 0 125 chr9 63188700 63189000 0 53 chr9 63190200 63202800 0 53 chr9 63252900 63254400 0 44 chr9 63255900 63256200 0.0726 73 chr9 63258900 63259800 0.0347 41 chr9 63261900 63262800 0.0807 45 chr9 63268200 63268500 0.0779 59 chr9 63271500 63279000 0 69 chr9 63280200 63283500 0 69 chr9 63285000 63289800 0 69 chr9 63291600 63295500 0 65 chr9 63298500 63301800 0 72 chr9 63304200 63309600 0 69 chr9 63310800 63312000 0 69 chr9 63316200 63324900 0 76 chr9 63331500 63332100 0 46 chr9 63333600 63335100 0 56 chr9 63336600 63337800 0.0137 66 chr9 63339600 63341100 0 68 chr9 63343200 63343500 0.1252 52 chr9 63358800 63360300 0 69 chr9 63363300 63373200 0 126 chr9 63375000 63375900 0 126 chr9 63378000 63379200 0.0033 95 chr9 63382800 63384900 0 82 chr9 63386100 63386700 0 78 chr9 63388800 63396600 0 78 chr9 63397800 63399900 0 78 chr9 63402000 63405300 0 64 chr9 63406500 63408600 0 72 chr9 63410100 63433500 0 72 chr9 63435000 63448800 0 72 chr9 63451200 63492300 0 72 chr9 63547500 63547800 0.2101 16 chr9 63566400 63566700 0.0008 59 chr9 63570000 63570900 0.006 88 chr9 63598500 63598800 0.0932 10 chr9 63603000 63603300 0.0814 45 chr9 63639900 63640200 0.0464 55 chr9 63650100 63651300 0 57 chr9 63660600 63663900 0.0029 63 chr9 63666900 63667200 0.0402 18 chr9 63765900 63766200 0.0567 122 chr9 63768900 63769200 0.1697 69 chr9 63773100 63773400 0.0926 149 chr9 63778500 63778800 0.121 109 chr9 63801900 63802200 0.1709 142 chr9 63834300 63834600 0.1884 122 chr9 63872400 63872700 0.2155 136 chr9 63884100 63884400 0.0592 143 chr9 63992100 63992400 0.1152 65 chr9 63999600 63999900 0.0599 137 chr9 64002300 64002600 0.123 85 chr9 64006500 64006800 0.0129 156 chr9 64185600 64189200 0 35 chr9 64190400 64194600 0 44 chr9 64195800 64215000 0 44 chr9 64315200 64317000 0 64 chr9 64320300 64320900 0.0017 83 chr9 64323900 64324200 0.1986 10 chr9 64326300 64334400 0 92 chr9 64340700 64363200 0 66 chr9 64364700 64365600 0 66 chr9 64368600 64377900 0 63 chr9 64379100 64399800 0 84 chr9 64401300 64402500 0 67 chr9 64404300 64405800 0.0008 74 chr9 64407000 64407300 0.1189 52 chr9 64409700 64410000 0.0362 60 chr9 64413600 64414800 0.0183 74 chr9 64416900 64417200 0.0533 60 chr9 64420200 64420800 0.0156 31 chr9 64422000 64426200 0 78 chr9 64428000 64431900 0 80 chr9 64434000 64437600 0 80 chr9 64449000 64450500 0.0071 119 chr9 64453800 64454100 0.1227 63 chr9 64458000 64461900 0 106 chr9 64465200 64465500 0.0208 110 chr9 64468800 64469100 0.0413 71 chr9 64473900 64474200 0.0207 86 chr9 64475400 64475700 0.1704 48 chr9 64476900 64477200 0.1004 68 chr9 64478700 64479000 0.049 83 chr9 64491300 64491600 0.0353 73 chr9 64500000 64500300 0.1787 75 chr9 64507500 64507800 0.1272 78 chr9 64511700 64513200 0.0005 79 chr9 64515300 64515600 0.1746 93 chr9 64516800 64517100 0.0268 57 chr9 64519200 64520100 0 39 chr9 64521900 64523400 0 73 chr9 64524600 64524900 0 73 chr9 64527900 64528200 0 88 chr9 64529400 64530000 0 88 chr9 64531200 64539000 0 88 chr9 64541400 64547700 0.0145 92 chr9 64549200 64549800 0.0224 64 chr9 64551000 64554000 0 80 chr9 64555500 64558800 0.0012 59 chr9 64562400 64574700 0 76 chr9 64575900 64583400 0 76 chr9 64585200 64585500 0.0021 19 chr9 64587000 64594500 0 104 chr9 64595700 64601400 0 104 chr9 64602600 64608600 0 104 chr9 64609800 64613700 0 104 chr9 64614900 64617300 0 104 chr9 64618500 64626000 0 104 chr9 64627500 64765800 0 104 chr9 64767000 64768500 0 66 chr9 64770900 64771500 0.0172 35 chr9 64779600 64780800 0.0019 48 chr9 64784700 64787700 0 65 chr9 64789200 64791300 0 65 chr9 64792500 64794000 0 65 chr9 64795500 64799400 0 65 chr9 64800600 64802700 0 61 chr9 64808100 64809900 0 45 chr9 64811100 64811700 0 45 chr9 64813500 64814100 0 45 chr9 64816200 64819200 0 66 chr9 64821000 64822500 0 58 chr9 64824000 64824300 0.1619 43 chr9 64825500 64826100 0.0197 53 chr9 64828800 64829100 0.0326 48 chr9 64831200 64834800 0 59 chr9 64837200 64839300 0.0148 55 chr9 64840800 64841400 0.0033 42 chr9 64842600 64843500 0.0701 52 chr9 64846800 64848000 0 61 chr9 64851900 64854300 0 70 chr9 64855500 64859700 0.0043 62 chr9 64861800 64862100 0.1023 67 chr9 64864200 64864800 0 64 chr9 64867200 64868700 0 64 chr9 64869900 64874700 0 63 chr9 64876500 64878000 0.02 77 chr9 64880100 64884900 0 74 chr9 64886100 64888200 0 52 chr9 64890600 64891800 0 58 chr9 64893900 64895400 0 63 chr9 64897500 64897800 0 63 chr9 64899300 64900800 0.0152 56 chr9 64903800 64904100 0 71 chr9 64905900 64907400 0 71 chr9 64913400 64914900 0 56 chr9 64916100 64919700 0 75 chr9 64922100 64922700 0.0044 66 chr9 64924200 64927500 0 56 chr9 64929900 64930800 0 68 chr9 64932300 64932600 0 68 chr9 64933800 64934100 0 68 chr9 64947600 64947900 0.0837 78 chr9 64952400 64956300 0.0019 88 chr9 64960200 64961700 0 57 chr9 64963500 64963800 0.0815 82 chr9 64967700 64970100 0 69 chr9 64974600 64976700 0 66 chr9 64982700 64987500 0.0011 73 chr9 64992000 64992600 0.0562 60 chr9 64994400 64996200 0 66 chr9 64997400 64997700 0.0785 56 chr9 65079600 65080200 0.0007 48 chr9 65130600 65137200 0 47 chr9 65139000 65143800 0 47 chr9 65145600 65151600 0 76 chr9 65152800 65195400 0 76 chr9 65196600 65205900 0 76 chr9 65209200 65210100 0 79 chr9 65211300 65223600 0 79 chr9 65225700 65229000 0 57 chr9 65230200 65232000 0 57 chr9 65233200 65241600 0 86 chr9 65242800 65258100 0 86 chr9 65259600 65274000 0 146 chr9 65276100 65285100 0 146 chr9 65286600 65291100 0 156 chr9 65292300 65305800 0 156 chr9 65307000 65325000 0 156 chr9 65375100 65375400 0 82 chr9 65514000 65514300 0.1086 59 chr9 65517900 65521800 0 68 chr9 65542800 65543100 0.1032 86 chr9 65575500 65575800 0.0664 46 chr9 65579400 65583900 0 85 chr9 65585100 65587500 0 85 chr9 65589300 65593500 0 37 chr9 65645100 65646900 0 181 chr9 65648100 65648400 0.1888 65 chr9 65650800 65654700 0 111 chr9 65663400 65663700 0.0431 63 chr9 65670000 65673300 0.0054 100 chr9 65674800 65676300 0.1381 89 chr9 65679000 65679300 0.0402 58 chr9 65682900 65683200 0.0425 85 chr9 65685900 65688600 0.0077 118 chr9 65690100 65690700 0.0077 118 chr9 65692200 65692800 0.0042 76 chr9 65694600 65707800 0 130 chr9 65712300 65713500 0 130 chr9 65715900 65716200 0.1954 31 chr9 65718600 65720700 0 133 chr9 65721900 65724000 0 133 chr9 65726700 65727900 0 133 chr9 65729100 65732400 0 133 chr9 65736300 65736600 0.0236 123 chr9 65738400 65741700 0.0061 102 chr9 65743500 65744400 0 57 chr9 65747400 65750700 0 81 chr9 65753100 65762400 0 81 chr9 65763600 65809500 0 80 chr9 65811000 65811300 0.2528 26 chr9 65814600 65900400 0 90 chr9 65901600 65914500 0 90 chr9 65916300 65940300 0 90 chr9 65941800 65956200 0 95 chr9 65957700 65965800 0 88 chr9 65967000 65969100 0.0004 96 chr9 65970300 65971800 0.0004 96 chr9 65973000 65975700 0 100 chr9 65979300 65984400 0 100 chr9 65986800 65989500 0 89 chr9 65993100 66015000 0 101 chr9 66016200 66029400 0 101 chr9 66032100 66063600 0 110 chr9 66065100 66065700 0 97 chr9 66067500 66068100 0 97 chr9 66069600 66078600 0 106 chr9 66080700 66104700 0 108 chr9 66105900 66146400 0 108 chr9 66148800 66150300 0 74 chr9 66156000 66157500 0.0092 70 chr9 66163800 66164400 0 90 chr9 66165600 66169800 0 90 chr9 66176100 66176400 0.0114 65 chr9 66178500 66178800 0.0586 38 chr9 66183900 66185400 0.0493 61 chr9 66186600 66191100 0 56 chr9 66192300 66196200 0 56 chr9 66201900 66207900 0 56 chr9 66209100 66235200 0 98 chr9 66237000 66237300 0.0123 60 chr9 66238800 66241200 0 76 chr9 66242400 66244800 0 76 chr9 66247800 66248100 0.0238 64 chr9 66252600 66258900 0 93 chr9 66260100 66260700 0 93 chr9 66262500 66262800 0 93 chr9 66270600 66273000 0 62 chr9 66274500 66276600 0 62 chr9 66282300 66283800 0 70 chr9 66285000 66285600 0 70 chr9 66286800 66288600 0 70 chr9 66289800 66294300 0 70 chr9 66296100 66297300 0 70 chr9 66299100 66299400 0 70 chr9 66301500 66302400 0.0169 48 chr9 66303900 66305100 0.1536 40 chr9 66307500 66312300 0 62 chr9 66313500 66313800 0.0674 52 chr9 66315600 66316800 0 76 chr9 66318900 66326700 0 76 chr9 66328500 66329700 0 35 chr9 66331800 66332100 0 57 chr9 66333900 66335100 0 57 chr9 66336300 66336900 0 57 chr9 66338400 66340200 0 62 chr9 66342600 66344700 0 62 chr9 66346200 66350400 0 62 chr9 66351600 66352200 0 62 chr9 66353700 66355800 0 62 chr9 66358800 66359100 0.0452 43 chr9 66361500 66366000 0 65 chr9 66367500 66371100 0 65 chr9 66373200 66386700 0 65 chr9 66387900 66390600 0 65 chr9 66591300 66591900 0 14 chr9 66594300 66600600 0 69 chr9 66602400 66612300 0 98 chr9 66614100 66616500 0 72 chr9 66618300 66619200 0 85 chr9 66620700 66624600 0 85 chr9 66626100 66628500 0 85 chr9 66629700 66631500 0 72 chr9 66632700 66634800 0 53 chr9 66636300 66641400 0 81 chr9 66643800 66647100 0 81 chr9 66648900 66655500 0 81 chr9 66656700 66660600 0 57 chr9 66662400 66669600 0 57 chr9 66670800 66673500 0 57 chr9 66674700 66695400 0 76 chr9 66697800 66710400 0 145 chr9 66712200 66721200 0 145 chr9 66722400 66731100 0 145 chr9 66732300 66735600 0 145 chr9 66737700 66738300 0 55 chr9 66739800 66745800 0 88 chr9 66747300 66752100 0 88 chr9 66753300 66765000 0 88 chr9 66766200 66768300 0 88 chr9 66769500 66773400 0 62 chr9 66779700 66780000 0.0476 52 chr9 66791400 66792000 0.0078 73 chr9 66815700 66816000 0.1352 96 chr9 66821100 66821400 0.1287 81 chr9 66827700 66831000 0 88 chr9 66833700 66842700 0 118 chr9 66844500 66847200 0.0205 98 chr9 66848400 66851100 0.0021 60 chr9 66852600 66859200 0 65 chr9 66861300 66865500 0 77 chr9 66866700 66875400 0 73 chr9 66877200 66877500 0.0603 66 chr9 66895800 66896100 0.1111 45 chr9 66912300 66912600 0.0783 50 chr9 66918900 66919200 0.0565 74 chr9 66927900 66928200 0.0718 46 chr9 66933600 66933900 0.1084 18 chr9 66935700 66936000 0.0349 55 chr9 66940500 66940800 0.0629 49 chr9 66947700 66948000 0.1049 46 chr9 66956100 66956400 0.1357 64 chr9 66959100 66960300 0 61 chr9 66963000 66965700 0 73 chr9 66967800 66968400 0 73 chr9 66970200 66971700 0 58 chr9 66974400 66974700 0.1231 57 chr9 66979800 66980100 0.0335 48 chr9 66981600 66981900 0.0257 42 chr9 66983400 66986700 0 73 chr9 66987900 66996600 0 73 chr9 66997800 66999000 0 73 chr9 67002900 67004400 0 65 chr9 67006200 67011600 0 52 chr9 67012800 67013100 0 47 chr9 67014300 67015200 0 47 chr9 67018800 67019100 0.0042 47 chr9 67020900 67022700 0.0184 62 chr9 67023900 67030200 0 67 chr9 67031400 67037400 0 65 chr9 67042500 67043700 0 38 chr9 67045200 67047000 0 60 chr9 67048200 67049100 0 60 chr9 67059600 67059900 0.0309 54 chr9 67083300 67084500 0 76 chr9 67085700 67086900 0 76 chr9 67095000 67096200 0 52 chr9 67099200 67099500 0.089 45 chr9 67101600 67106700 0 65 chr9 67112400 67117500 0 57 chr9 67118700 67123500 0 70 chr9 67125000 67125300 0 64 chr9 67128000 67130700 0 64 chr9 67134300 67139100 0 72 chr9 67146300 67148700 0 63 chr9 67153500 67154100 0 62 chr9 67156800 67157100 0.0162 61 chr9 67158600 67162200 0 76 chr9 67163400 67167600 0 76 chr9 67170600 67172400 0 59 chr9 67173600 67173900 0.1365 47 chr9 67176300 67179000 0 74 chr9 67180200 67181100 0 74 chr9 67182900 67183200 0 74 chr9 67186200 67190700 0 62 chr9 67192200 67193100 0 62 chr9 67194900 67196100 0.0173 64 chr9 67197900 67203300 0 69 chr9 67204500 67207500 0 69 chr9 67210200 67212900 0 151 chr9 67215000 67375200 0 151 chr9 67376400 67387500 0 120 chr9 67389000 67397400 0 120 chr9 67400100 67404900 0.0069 66 chr9 67408200 67410300 0 64 chr9 67411500 67412100 0.0466 72 chr9 67417500 67425900 0 75 chr9 67428000 67428600 0 76 chr9 67430100 67433400 0 76 chr9 67434600 67445700 0 59 chr9 67446900 67447200 0 59 chr9 67448400 67451100 0 42 chr9 67452300 67510200 0 68 chr9 67512000 67548300 0 68 chr9 67549500 67591500 0 59 chr9 67592700 67600200 0 59 chr9 67601700 67603500 0 59 chr9 67604700 67607700 0 63 chr9 67617300 67622400 0 82 chr9 67631400 67635900 0 75 chr9 67641600 67657500 0 91 chr9 67658700 67679400 0 91 chr9 67680900 67699500 0 1053 chr9 67700700 67722900 0 1053 chr9 67724100 67736400 0 1053 chr9 67737600 67756500 0 1053 chr9 67758300 67758600 0.1544 94 chr9 67761600 67763100 0.0007 115 chr9 67764300 67765200 0 97 chr9 67766400 67769400 0 132 chr9 67771500 67773300 0 132 chr9 67779300 67782900 0 94 chr9 67784700 67785300 0 106 chr9 67786500 67788600 0 106 chr9 67790100 67790700 0 106 chr9 67791900 67792200 0 139 chr9 67794300 67795200 0 139 chr9 67796400 67797900 0 91 chr9 67799700 67811400 0 91 chr9 67813200 67819200 0 91 chr9 67820700 67822500 0 91 chr9 67825200 67828800 0 80 chr9 67831200 67831500 0 80 chr9 67833600 67835700 0 76 chr9 67837800 67838100 0 76 chr9 67839300 67839600 0 76 chr9 67841700 67843800 0 97 chr9 67846500 67848600 0 97 chr9 67858200 67858800 0.102 92 chr9 67860600 67864500 0 55 chr9 67866600 67870800 0 70 chr9 67872900 67881300 0 84 chr9 67883400 67884000 0 62 chr9 67886100 67897200 0 101 chr9 67898400 67918800 0 101 chr9 67920300 67920600 0.0678 27 chr9 68220600 68245500 0 111 chr9 68247600 68256600 0 111 chr9 68258100 68266200 0 111 chr9 68267400 68268000 0 111 chr9 68269500 68275200 0 87 chr9 68276700 68279100 0 87 chr9 68280600 68280900 0 87 chr9 68282100 68286600 0 87 chr9 68287800 68295900 0.0042 111 chr9 68297400 68298900 0 167 chr9 68300700 68303400 0 167 chr9 68305800 68306400 0 167 chr9 68308200 68311500 0 136 chr9 68312700 68313300 0.0002 150 chr9 68316000 68316600 0 135 chr9 68319600 68328600 0 148 chr9 69416400 69418200 0 81 chr9 69437400 69439200 0 86 chr9 69477600 69480900 0 80 chr9 69506400 69509700 0 81 chr9 69763200 69763800 0.2008 51 chr9 70038300 70038600 0.2992 6102 chr9 70200900 70201500 0.0423 44 chr9 70432500 70433100 0 77 chr9 70702200 70737600 0 45 chr9 74427900 74428800 0.0495 66 chr9 76063500 76063800 0.0105 22 chr9 76175100 76175400 0.1739 450 chr9 76673400 76673700 0.1018 71 chr9 76675200 76675800 0.1509 73 chr9 76791300 76791600 0.1685 62 chr9 79098000 79098300 0.026 59 chr9 79497900 79498500 0.1218 63 chr9 80743200 80743800 0.0062 81 chr9 81709500 81711900 0.0104 76 chr9 81919800 81933900 0 63 chr9 81935100 81948900 0 63 chr9 83049900 83052600 0.0011 98 chr9 83053800 83054400 0.0011 98 chr9 83226300 83226600 0.2252 82 chr9 83821200 83821800 0 63 chr9 83826300 83826600 0.0171 65 chr9 85074600 85074900 0.1191 49 chr9 85165500 85165800 0.0118 64 chr9 85811400 85812300 0.0136 123 chr9 86107500 86109300 0 64 chr9 86159400 86159700 0.1369 76 chr9 86607600 86607900 0.1385 59 chr9 87913800 87915300 0 75 chr9 87917400 87919800 0 78 chr9 87926700 87927300 0.0045 56 chr9 87928500 87929700 0.0005 74 chr9 87933000 87933600 0.0145 49 chr9 87940800 87941100 0.0126 31 chr9 88119300 88119900 0.0275 65 chr9 88123200 88123800 0.0506 72 chr9 88125600 88126200 0.051 59 chr9 88133100 88133400 0.0295 79 chr9 88140300 88140600 0.0015 41 chr9 88244100 88245900 0.007 83 chr9 88626300 88626900 0.0029 82 chr9 90150300 90155400 0 143 chr9 91227300 91227600 0.0841 56 chr9 91797300 91798200 0.0269 54 chr9 92216400 92216700 0.1995 72 chr9 92218200 92218500 0.2264 84 chr9 92226900 92227200 0.0599 107 chr9 93335700 93336300 0.0203 68 chr9 93515400 93516000 0.0359 77 chr9 94089600 94090800 0.0413 93 chr9 94113900 94119300 0 124 chr9 94307700 94308000 0.0608 70 chr9 94313100 94313400 0.2024 18 chr9 94314900 94316100 0 74 chr9 94317600 94319400 0 74 chr9 94328700 94329000 0.0812 66 chr9 94331400 94331700 0.058 62 chr9 94333200 94333500 0.1286 40 chr9 94334700 94335000 0.0558 34 chr9 94338000 94338300 0.1576 58 chr9 94340400 94340700 0.0367 57 chr9 94342800 94343100 0.0936 73 chr9 94348500 94349100 0 77 chr9 94350600 94350900 0.122 27 chr9 94362900 94363200 0.11 60 chr9 94365000 94365300 0.0255 63 chr9 94393200 94393500 0.0363 71 chr9 94530600 94530900 0.1437 26 chr9 95698200 95703300 0 84 chr9 96707100 96707400 0.1754 59 chr9 96908700 96909000 0.0017 72 chr9 96916800 96917100 0.0835 61 chr9 96919200 96919500 0.038 43 chr9 96924300 96924600 0.0806 58 chr9 96928500 96928800 0.0124 59 chr9 96939000 96940200 0 84 chr9 96942300 96942600 0.031 67 chr9 96948000 96948300 0.0511 72 chr9 96994500 96994800 0.0963 74 chr9 97022700 97023300 0.0999 68 chr9 97196400 97196700 0.0326 71 chr9 97197900 97199100 0.05 64 chr9 97582500 97582800 0.2024 78 chr9 98214300 98214600 0.1431 54 chr9 99500100 99502500 0.0681 96 chr9 99504300 99504600 0.0409 60 chr9 99853500 99855000 0 75 chr9 100528500 100528800 0.195 60 chr9 100692900 100693800 0.0216 84 chr9 100983300 100986900 0 82 chr9 101102400 101107800 0 77 chr9 101681700 101682300 0 20 chr9 102149100 102149400 0.169 63 chr9 102363900 102364200 0.0169 25 chr9 103739700 103740000 0.2758 73 chr9 105576600 105576900 0.0583 83 chr9 105580500 105580800 0.0276 74 chr9 105781500 105781800 0.1526 22 chr9 106184400 106185000 0.0838 56 chr9 106212600 106212900 0.0295 61 chr9 107027400 107028000 0.0259 94 chr9 107256000 107258400 0 74 chr9 107272800 107273100 0.0033 36 chr9 107776500 107776800 0 41 chr9 108504600 108504900 0.2168 90 chr9 110417400 110422800 0 73 chr9 110791500 110796900 0 88 chr9 111640500 111640800 0.0573 67 chr9 111642000 111642600 0.122 77 chr9 112513500 112515000 0.0049 60 chr9 112798200 112803900 0 90 chr9 113060400 113061300 0.0033 109 chr9 113063700 113088000 0 213 chr9 113105400 113111400 0 80 chr9 113112900 113119200 0 83 chr9 113439300 113443200 0.0019 70 chr9 114326700 114327600 0.1214 66 chr9 114329700 114330000 0.1838 57 chr9 115527600 115527900 0.1395 68 chr9 115769400 115769700 0.0378 92 chr9 115919400 115919700 0.1001 78 chr9 117066900 117070500 0.0075 64 chr9 119133900 119134200 0.102 72 chr9 119171700 119172000 0.0206 53 chr9 119622000 119622600 0.0007 81 chr9 119623800 119624100 0.0007 81 chr9 120056400 120060900 0 113 chr9 120495000 120496200 0.0254 109 chr9 121971300 121971600 0.115 42 chr9 123404700 123405900 0.0201 58 chr9 123906600 123908400 0.0344 76 chr9 123976500 123978900 0 64 chr9 123991200 123992700 0 72 chr9 125623500 125625000 0.029 85 chr9 126013800 126014100 0.2442 46 chr9 126484500 126485400 0 45 chr9 130277700 130278000 0.2813 117 chr9 131356800 131357400 0.0678 77 chr9 132526800 132529200 0 65 chr9 133069200 133069500 0.1435 75 chr9 133082700 133083300 0 33 chr9 133514100 133514400 0.0255 26 chr9 133827600 133827900 0.2235 18 chr9 134012700 134014500 0 197 chr9 134114700 134118900 0 69 chr9 134587200 134587500 0.1683 78 chr9 136355100 136355400 0.0271 25 chr9 136580400 136581000 0.0357 19 chr9 136802700 136803300 0.1716 100 chr9 137288700 137289000 0.2844 51 chr9 137322900 137323200 0.1391 57 chr9 137565900 137568000 0.042 58 chr9 137716200 137716500 0.1242 259 chr9 137818800 137819400 0.015 63 chr9 137845200 137846400 0 244 chr9 137887500 137887800 0.1619 53 chr9 138018000 138019500 0 54 chr9 138163200 138163500 0.1011 56 chr9 138184200 138186300 0.0033 73 chr9 138191100 138196800 0 37 chr9 138205500 138205800 0.0011 44 chr9 138216000 138216600 0.1351 68 chr9 138219900 138334200 0 252 chrX 10200 12300 0 46 chrX 16800 19500 0 30 chrX 21000 24600 0 33 chrX 94800 95100 0 34 chrX 96300 97500 0 34 chrX 99600 100200 0 34 chrX 222900 225600 0 42 chrX 229500 230100 0.0351 26 chrX 234300 234600 0.1256 35 chrX 236400 236700 0.091 42 chrX 249900 250800 0.0036 46 chrX 268200 274500 0.1001 513 chrX 297900 298500 0.1506 100 chrX 315900 316200 0.2671 129 chrX 321600 321900 0.0965 33 chrX 513000 515700 0.0585 103 chrX 527400 528300 0.0145 80 chrX 647400 648000 0.0118 37 chrX 839400 840300 0.0734 58 chrX 1128300 1128600 0.2277 27 chrX 1174200 1174500 0.1663 27 chrX 1264200 1264500 0.0556 74 chrX 1298100 1298400 0.1405 53 chrX 1368900 1376100 0 57 chrX 1409700 1410300 0 25 chrX 1697100 1697400 0.0735 40 chrX 1763700 1764900 0.2162 28 chrX 1855800 1856100 0.1546 58 chrX 1887900 1888200 0.1661 60 chrX 1947600 1949400 0 39 chrX 2133000 2133600 0 33 chrX 2227800 2228400 0.2219 28 chrX 2845200 2845500 0.0508 19 chrX 3824100 3824700 0.0158 20 chrX 3830700 3837900 0 25 chrX 3839100 3842100 0 34 chrX 3843600 3866400 0 30 chrX 3867900 3877800 0 40 chrX 3879000 3880800 0 30 chrX 3882000 3904800 0 30 chrX 3906300 3926100 0 34 chrX 3928200 3937200 0 34 chrX 3967500 3968400 0 66 chrX 4267200 4267500 0.1625 26 chrX 5108400 5109000 0.0046 53 chrX 5481300 5481600 0.0255 34 chrX 5483100 5485200 0.0255 34 chrX 5652300 5652600 0.0411 15 chrX 5669700 5670000 0.2126 11 chrX 5765100 5765400 0.1374 53 chrX 5816100 5816700 0.0103 67 chrX 6529500 6529800 0.1405 36 chrX 6533100 6533400 0.1014 23 chrX 6584100 6588600 0 62 chrX 6934800 6936600 0.007 64 chrX 6937800 6938400 0.0871 48 chrX 7590000 7590300 0.0365 118 chrX 7848900 7849200 0.1013 32 chrX 8169300 8169900 0.0883 55 chrX 8465700 8467200 0.1441 38 chrX 10967400 10967700 0.2436 39 chrX 11000700 11001600 0.0923 57 chrX 11219100 11219700 0.08 69 chrX 11707500 11713200 0 99 chrX 11935500 11941200 0 84 chrX 12621900 12622500 0.002 15 chrX 13881600 13883400 0 21 chrX 14085300 14085900 0.1188 44 chrX 14106000 14106300 0.1727 56 chrX 14107500 14107800 0.1727 56 chrX 15647700 15648000 0.0421 37 chrX 16234500 16234800 0.0383 41 chrX 16323600 16324200 0.0116 42 chrX 16337700 16338000 0.2195 56 chrX 16377600 16378200 0 29 chrX 16409700 16410000 0 25 chrX 16503000 16503300 0.1259 35 chrX 17055000 17055600 0.0905 57 chrX 17319300 17319900 0.0023 48 chrX 17342700 17344800 0.0969 74 chrX 17737200 17737500 0.0802 169 chrX 18110100 18110400 0.0239 87 chrX 19144500 19148400 0 84 chrX 19941900 19944600 0 72 chrX 20335800 20336400 0.0322 60 chrX 23239500 23239800 0.1791 56 chrX 23241000 23244300 0 73 chrX 23973000 23974500 0 36 chrX 24134400 24135900 0 37 chrX 24708600 24710100 0.0224 96 chrX 25824300 25824600 0.0766 11 chrX 26313900 26320200 0 104 chrX 27109800 27110400 0.0159 60 chrX 27226500 27226800 0.1976 56 chrX 27927900 27928200 0.0764 50 chrX 28209000 28212600 0.0012 77 chrX 28230000 28230300 0.0338 96 chrX 28950300 28950600 0.1399 52 chrX 29332200 29332500 0.0481 64 chrX 29334300 29334600 0.2214 128 chrX 29356200 29356500 0.0794 449 chrX 29582400 29583600 0.004 61 chrX 30018900 30019200 0.0269 24 chrX 30603300 30603600 0.2009 63 chrX 31531200 31535400 0 64 chrX 31897500 31897800 0.0938 54 chrX 32244300 32246700 0.1308 60 chrX 33190500 33190800 0.0069 20 chrX 34248600 34251900 0.0073 53 chrX 34416000 34416300 0.0839 47 chrX 35315400 35316000 0.0184 61 chrX 36466800 36469800 0.0193 70 chrX 36986700 36987900 0.0352 36 chrX 36998100 36999300 0.0142 33 chrX 37085100 37099200 0 42 chrX 37554600 37554900 0.0144 40 chrX 37570200 37570500 0.0062 22 chrX 41427600 41427900 0.0585 49 chrX 42202800 42203100 0.0239 78 chrX 42204600 42204900 0.1012 67 chrX 42473400 42473700 0.125 52 chrX 42888900 42890400 0.0129 89 chrX 42891600 42893700 0 65 chrX 43304700 43305300 0 294 chrX 43306500 43311600 0 294 chrX 43588500 43588800 0.0779 30 chrX 43671600 43671900 0.0757 61 chrX 43989300 43990200 0 36 chrX 43992900 43993200 0.0072 42 chrX 44282400 44282700 0.1779 78 chrX 44441100 44441400 0 15 chrX 44443800 44444100 0.0165 21 chrX 45039600 45042000 0.0774 94 chrX 45687900 45688800 0 36 chrX 45691800 45692400 0 36 chrX 46659300 46659900 0.1145 66 chrX 47036700 47037000 0.0988 69 chrX 47510100 47510400 0.1776 37 chrX 47511900 47512200 0.1013 35 chrX 47784300 47784900 0 80 chrX 47786400 47787000 0.012 74 chrX 47790600 47790900 0.0087 70 chrX 47906100 47906400 0.2386 31 chrX 48004500 48012000 0 42 chrX 48015300 48015600 0.0331 28 chrX 48018300 48020100 0 33 chrX 48092100 48092400 0 35 chrX 48095100 48095700 0 31 chrX 48127500 48134700 0 39 chrX 48137400 48137700 0.0238 26 chrX 48232500 48233100 0.0795 55 chrX 48367500 48368400 0 35 chrX 48369600 48396000 0 42 chrX 48399300 48425700 0 43 chrX 48427200 48427800 0.0032 34 chrX 49317900 49320600 0 101 chrX 49321800 49322100 0 150 chrX 49324200 49331700 0 150 chrX 49333500 49344300 0 123 chrX 49346700 49348500 0 99 chrX 49528500 49589700 0 165 chrX 49591800 49603500 0 138 chrX 49966800 49968900 0 83 chrX 50019600 50025300 0 91 chrX 50057400 50057700 0.0714 61 chrX 50061000 50062500 0 80 chrX 50065200 50065500 0.1287 76 chrX 50296500 50296800 0.1 40 chrX 50739900 50740200 0.0623 33 chrX 50990700 50991900 0 29 chrX 51033000 51033300 0.0463 33 chrX 51079800 51081000 0 39 chrX 51111600 51112200 0.1212 79 chrX 51115200 51117300 0.0116 63 chrX 51265800 51267000 0.0795 68 chrX 51429600 51429900 0.0113 31 chrX 51618000 51618300 0.0424 22 chrX 51668400 51692100 0 48 chrX 51700500 51725100 0 46 chrX 52041600 52077000 0 44 chrX 52177200 52212600 0 45 chrX 52223700 52224300 0.0928 66 chrX 52267500 52268100 0.0114 19 chrX 52445100 52445700 0.0663 29 chrX 52458600 52459500 0 35 chrX 52460700 52461300 0 35 chrX 52473900 52502100 0 71 chrX 52510800 52539000 0 65 chrX 52644000 52644600 0 28 chrX 52670400 52787700 0 49 chrX 52790100 52791300 0.0047 37 chrX 52799700 52800000 0.005 31 chrX 52801200 52801800 0.005 31 chrX 52883400 52920000 0 45 chrX 52935900 52973100 0 46 chrX 53338200 53339400 0 21 chrX 53769300 53769600 0.2188 30 chrX 53772300 53772600 0.0088 24 chrX 54102300 54102600 0.055 29 chrX 54108900 54109200 0.0327 35 chrX 54118800 54124500 0 72 chrX 54765000 54766800 0.0428 52 chrX 54769200 54769500 0.211 46 chrX 54823200 54823500 0.0576 28 chrX 54828000 54828300 0.1133 48 chrX 54967500 54968400 0 45 chrX 54970500 54971400 0 37 chrX 55077900 55079700 0 42 chrX 55092000 55093500 0 35 chrX 55454100 55479900 0 49 chrX 55493400 55519200 0 44 chrX 55806900 55807200 0.1024 67 chrX 56432400 56441100 0 41 chrX 56696100 56701500 0 89 chrX 56767800 56780700 0 63 chrX 57120300 57120600 0.1136 31 chrX 57297600 57298800 0 37 chrX 57325800 57326100 0.0059 30 chrX 58133400 58135200 0 45 chrX 58468200 58468800 0.0173 54 chrX 58480500 58485000 0 49 chrX 58486800 58487400 0 42 chrX 58493700 58494300 0 37 chrX 58499100 58505700 0 44 chrX 58539900 58555500 0 115 chrX 58606200 58874700 0 196 chrX 58875900 58935000 0 267 chrX 58936200 58988700 0 267 chrX 58989900 59114700 0 179 chrX 59115900 59144700 0 179 chrX 59145900 59185800 0 107 chrX 59187600 59189700 0 43 chrX 59190900 59316600 0 205 chrX 59317800 59327100 0 205 chrX 59329200 59425200 0 229 chrX 59427000 59457300 0 229 chrX 59458500 59594400 0 229 chrX 59598600 59666100 0 200 chrX 59667300 59695500 0 200 chrX 59696700 59735100 0 200 chrX 59736900 59824200 0 200 chrX 59825400 59889600 0 150 chrX 59891100 59921400 0 232 chrX 59922600 59961000 0 232 chrX 59962200 60066600 0 405 chrX 60067800 60153300 0 405 chrX 60154500 60208800 0 114 chrX 60210300 60264900 0 321 chrX 60266400 60405000 0 321 chrX 60407700 60483000 0 285 chrX 60484800 60486600 0 285 chrX 60487800 60774600 0 285 chrX 60776100 60971100 0 285 chrX 60972300 60987900 0 285 chrX 60989100 61022400 0 285 chrX 61024800 61203000 0 361 chrX 61204200 61286100 0 361 chrX 61287300 61368600 0 328 chrX 61369800 61437300 0 328 chrX 61438800 61467300 0 328 chrX 61468500 61511400 0 328 chrX 61513800 61581900 0 328 chrX 61583100 61738500 0 328 chrX 61739700 61819800 0 328 chrX 61821300 61862700 0 328 chrX 61863900 61929600 0 328 chrX 61930800 61955700 0 312 chrX 61956900 61995600 0 312 chrX 61997100 61997700 0 312 chrX 61998900 62106900 0 312 chrX 62108400 62159400 0 312 chrX 62160600 62189100 0 312 chrX 62190300 62247000 0 312 chrX 62248200 62321700 0 222 chrX 62323200 62412600 0 222 chrX 62463300 62465700 0 240 chrX 62468700 62472600 0 80 chrX 62475000 62483100 0 108 chrX 62484300 62487300 0 33 chrX 62490000 62490300 0 95 chrX 62492100 62495700 0 95 chrX 62497800 62499600 0 44 chrX 62502000 62503500 0 28 chrX 62504700 62506200 0 20 chrX 62603100 62603400 0.2658 22 chrX 63129600 63185400 0 47 chrX 63188700 63189000 0.0148 67 chrX 63193500 63249300 0 47 chrX 64013400 64015200 0.0418 52 chrX 64017000 64018500 0.125 60 chrX 64111200 64111500 0.0047 32 chrX 64114200 64114800 0.0033 49 chrX 64134300 64134900 0.0029 44 chrX 64254300 64258200 0 91 chrX 64298700 64299000 0.1922 54 chrX 64516800 64517100 0.0195 58 chrX 65207700 65211000 0 83 chrX 65457600 65457900 0.1056 66 chrX 65616300 65616600 0.0603 65 chrX 65834400 65834700 0.1593 43 chrX 66066900 66067500 0.016 70 chrX 66080100 66080400 0.0984 45 chrX 66137100 66137700 0.0109 75 chrX 66180900 66186000 0 87 chrX 66560400 66560700 0.1511 32 chrX 66953400 66953700 0.0846 75 chrX 67060200 67060500 0.068 66 chrX 67169400 67169700 0 55 chrX 68042700 68043300 0.0332 54 chrX 68217900 68219400 0.0222 55 chrX 68220600 68220900 0.0222 55 chrX 68326200 68327700 0.0088 37 chrX 69680400 69680700 0.1952 23 chrX 69749100 69749400 0.0367 50 chrX 69824700 69825000 0.0339 50 chrX 69950100 69950400 0.09 47 chrX 69982800 69987000 0 85 chrX 70100400 70104000 0.0117 74 chrX 70600800 70601400 0.0031 63 chrX 70631700 70632000 0.0429 31 chrX 70642500 70643100 0.011 67 chrX 70680300 70680600 0.2979 61 chrX 71350200 71351700 0 29 chrX 71414100 71416200 0 41 chrX 71520600 71522700 0 17 chrX 71683500 71797800 0 47 chrX 71903400 71903700 0.0306 27 chrX 72178200 72178500 0.0361 88 chrX 72179700 72180000 0.0361 88 chrX 72680700 72681300 0.0672 70 chrX 72743400 72749700 0 44 chrX 72750900 72753900 0 44 chrX 72755100 72757200 0 44 chrX 72758700 72806700 0 47 chrX 72808200 72838800 0 44 chrX 72840300 72912600 0 42 chrX 72914400 72962400 0 46 chrX 72963600 72979200 0 46 chrX 72996300 73004400 0 39 chrX 73009800 73011900 0 64 chrX 73078500 73086600 0 44 chrX 73106400 73112700 0 94 chrX 73291200 73291800 0.0093 65 chrX 73381200 73386900 0 78 chrX 73887600 73887900 0.0605 60 chrX 74874600 74874900 0.2478 39 chrX 74991300 74992200 0.0584 87 chrX 75218400 75218700 0.1423 58 chrX 75510600 75513000 0 53 chrX 76004700 76005000 0.0491 47 chrX 76006500 76007400 0.0014 51 chrX 76034100 76034400 0.141 27 chrX 76142100 76146000 0 42 chrX 76149300 76152900 0 42 chrX 76217400 76217700 0.2403 31 chrX 76323000 76326300 0.0104 84 chrX 76375800 76376100 0.1709 45 chrX 77205300 77208600 0 58 chrX 77247900 77248200 0.2988 43 chrX 78058500 78058800 0.2017 48 chrX 78172500 78173100 0.005 35 chrX 78196800 78197100 0 26 chrX 78229800 78230400 0.0694 59 chrX 78269100 78269400 0.005 14 chrX 78441600 78441900 0 52 chrX 78853800 78854100 0.19 62 chrX 79086600 79086900 0.0477 50 chrX 79224300 79224600 0.1521 43 chrX 79743600 79743900 0.2971 49 chrX 79766400 79767900 0.0311 63 chrX 79770600 79770900 0.0421 62 chrX 79927800 79928100 0.1661 43 chrX 79930800 79931700 0.067 68 chrX 80406600 80406900 0.0749 68 chrX 80534400 80535900 0.0575 49 chrX 81841500 81847200 0 71 chrX 82013100 82013400 0.196 65 chrX 82491300 82492200 0.1387 87 chrX 82857000 82857600 0.0035 55 chrX 83060400 83064600 0 70 chrX 83543100 83548200 0 61 chrX 83841300 83841600 0.1262 71 chrX 84604800 84605100 0.0495 94 chrX 85254300 85254600 0.0712 25 chrX 85425300 85425600 0.1569 53 chrX 86114100 86114400 0.0396 43 chrX 86350500 86354700 0 73 chrX 86446500 86449200 0 87 chrX 86557500 86561700 0 74 chrX 86970600 86970900 0.0983 62 chrX 87118200 87118500 0.0321 45 chrX 87499800 87500100 0.1061 33 chrX 87821400 87826800 0 88 chrX 88033500 88036500 0.006 73 chrX 89323500 89323800 0.0229 19 chrX 89357700 89358000 0.1686 34 chrX 89400900 89401200 0.0572 15 chrX 89408400 89408700 0.0466 14 chrX 89415900 89416200 0.0365 32 chrX 89505300 89505600 0.1145 44 chrX 89542800 89543100 0.1479 25 chrX 89546100 89546400 0.1784 25 chrX 89572800 89573100 0.1899 30 chrX 89619300 89619600 0.0325 33 chrX 89685300 89685600 0.0164 25 chrX 89707200 89708400 0.0181 31 chrX 89710800 89711100 0.0872 32 chrX 89729700 89730000 0.1111 19 chrX 89802000 89802300 0.1118 31 chrX 89828700 89829000 0.0897 22 chrX 89849400 89849700 0 28 chrX 89856300 89856600 0.0712 31 chrX 89991300 89991600 0.0923 32 chrX 90128700 90129000 0.1099 16 chrX 90138000 90138300 0.0841 33 chrX 90145800 90146400 0.0119 38 chrX 90179400 90179700 0.033 23 chrX 90186600 90186900 0.0853 27 chrX 90218700 90219000 0.1124 24 chrX 90234900 90235200 0.0208 45 chrX 90272700 90273000 0.0403 13 chrX 90284400 90284700 0.1282 25 chrX 90307800 90308400 0 29 chrX 90316500 90316800 0.24 25 chrX 90320700 90321000 0.1289 11 chrX 90346800 90347100 0.1524 26 chrX 90397800 90398100 0.0493 25 chrX 90446100 90446400 0.1019 26 chrX 90528300 90528600 0.1102 21 chrX 90575400 90575700 0.0723 33 chrX 90684600 90684900 0.2078 19 chrX 90693600 90693900 0.2903 22 chrX 90810000 90810300 0.0492 31 chrX 90869400 90869700 0.0129 35 chrX 90908400 90908700 0.022 30 chrX 90910500 90910800 0.0433 17 chrX 90934800 90935100 0.0245 23 chrX 90961200 90961500 0.132 25 chrX 90964500 90964800 0.0976 25 chrX 90966300 90966900 0 36 chrX 91360200 91360800 0.0428 53 chrX 91507500 91508100 0 28 chrX 91509300 91510200 0.0342 33 chrX 91566000 91566600 0.0998 29 chrX 91652400 91652700 0.135 34 chrX 91667100 91667400 0.0594 28 chrX 91746000 91746300 0.0621 34 chrX 91820100 91820400 0.1294 46 chrX 91862700 91863000 0.0673 25 chrX 91896600 91896900 0.0098 24 chrX 91979400 91980000 0.0888 30 chrX 91996500 91996800 0.0024 30 chrX 92035500 92036100 0.021 33 chrX 92055000 92055300 0.006 30 chrX 92155200 92155500 0.0429 21 chrX 92161800 92162100 0.0948 28 chrX 92220000 92220300 0.021 26 chrX 92349000 92349300 0.1759 16 chrX 92362500 92362800 0.0137 23 chrX 92413200 92413500 0.0954 21 chrX 92455500 92455800 0.066 25 chrX 92459100 92459400 0.0158 25 chrX 92476800 92477100 0.1024 11 chrX 92483400 92483700 0.0776 23 chrX 92595600 92595900 0.0765 26 chrX 92616000 92616300 0.0229 21 chrX 92643300 92643600 0.1093 26 chrX 92742600 92742900 0.1807 25 chrX 92795700 92796000 0.1888 15 chrX 92806200 92806500 0 33 chrX 92954400 92954700 0.0185 30 chrX 93058200 93058500 0.1715 29 chrX 93310800 93311700 0 65 chrX 94864200 94864500 0.0741 53 chrX 95140200 95140500 0.0901 16 chrX 95600700 95601900 0.0223 50 chrX 95810400 95812500 0 70 chrX 96057900 96063600 0 60 chrX 96897900 96898200 0.0733 54 chrX 97512600 97513800 0 77 chrX 97578600 97578900 0.1693 33 chrX 97581300 97582200 0 59 chrX 98424600 98426100 0.053 72 chrX 98687700 98692800 0 72 chrX 98831400 98831700 0.1437 12 chrX 99486900 99487200 0.0946 41 chrX 100139400 100139700 0.1989 53 chrX 100168800 100169100 0.0592 47 chrX 100257300 100257900 0.0188 59 chrX 100259700 100260000 0.0188 59 chrX 100501200 100502100 0 50 chrX 100551000 100551600 0.0867 65 chrX 100554900 100557000 0.0745 73 chrX 100869600 100869900 0.1476 75 chrX 100971600 100972200 0.0231 57 chrX 101472000 101472600 0.0199 74 chrX 101473800 101474400 0.0199 74 chrX 101597700 101601900 0 38 chrX 101611800 101616000 0 42 chrX 102048600 102049200 0.0752 44 chrX 102050400 102051000 0.0847 48 chrX 102198000 102281100 0 46 chrX 102282600 102338100 0 44 chrX 102349200 102452400 0 47 chrX 102453600 102457200 0 47 chrX 102458400 102479700 0 43 chrX 102481800 102489300 0 43 chrX 102811500 102811800 0 55 chrX 103893000 103894800 0.0581 55 chrX 103956300 103987200 0 40 chrX 104027700 104030700 0.0013 59 chrX 104032200 104032500 0.1272 43 chrX 104051700 104082600 0 46 chrX 104531100 104531400 0.1423 35 chrX 104549700 104550000 0.0567 37 chrX 105799200 105799500 0.0715 51 chrX 105992400 105992700 0.0892 48 chrX 106232700 106233000 0.1234 17 chrX 106266600 106278000 0 47 chrX 106288200 106299600 0 48 chrX 106469400 106475100 0 78 chrX 106602900 106603200 0.0829 44 chrX 106756800 106757400 0.1045 63 chrX 107035800 107036100 0 54 chrX 107159100 107159700 0.0641 69 chrX 107326800 107327100 0.1515 29 chrX 107365800 107366700 0.0089 65 chrX 107368500 107368800 0.0565 62 chrX 107612400 107613600 0 67 chrX 108281100 108281400 0.0837 92 chrX 108773700 108774000 0.0247 44 chrX 109035600 109035900 0.1749 57 chrX 109056000 109056300 0.1264 57 chrX 109057800 109058400 0.009 55 chrX 110222100 110222400 0.1329 49 chrX 110817000 110817600 0.086 60 chrX 111315300 111315900 0.0021 63 chrX 111590100 111593100 0.0061 76 chrX 111638400 111640200 0.0204 84 chrX 111721200 111721500 0.1134 10 chrX 112433400 112434000 0.0975 58 chrX 113337900 113340900 0.0231 80 chrX 113342400 113343000 0.0231 80 chrX 113633700 113634000 0.2018 21 chrX 113688600 113688900 0.083 38 chrX 114705900 114706200 0.0294 44 chrX 114721200 114721500 0.1508 45 chrX 114742800 114743100 0.0423 32 chrX 114831900 114833100 0.0355 43 chrX 115119300 115120800 0.0811 108 chrX 115347600 115347900 0.1968 15 chrX 115705800 115706100 0.2544 14 chrX 115724400 115725000 0 16 chrX 115726800 115735500 0 255 chrX 115736700 115737000 0 30 chrX 115842600 115889100 0 259 chrX 116557200 116557500 0.0203 18 chrX 116966700 116967000 0.1061 74 chrX 117425400 117425700 0.2166 41 chrX 117729600 117730200 0.1031 55 chrX 117876900 117877500 0.1209 51 chrX 118009200 118010400 0.0427 55 chrX 118034400 118035000 0.204 53 chrX 118401000 118401300 0.0342 50 chrX 119435700 119441400 0 77 chrX 119805900 119806200 0.0526 57 chrX 120038700 120065100 0 46 chrX 120066900 120067200 0.005 38 chrX 120069300 120074100 0 45 chrX 120075900 120086400 0 45 chrX 120150000 120160500 0 39 chrX 120162300 120165900 0 39 chrX 120168900 120169500 0.0475 38 chrX 120171300 120198000 0 48 chrX 120875700 120879300 0 40 chrX 120930000 120986700 0 55 chrX 121263900 121267800 0.0141 72 chrX 121692000 121692300 0.0212 70 chrX 121696500 121697700 0 86 chrX 121728300 121728900 0.0188 80 chrX 123051900 123052200 0.1991 54 chrX 124494900 124495200 0.2773 65 chrX 125043600 125044200 0.0154 56 chrX 125610000 125610300 0.0911 51 chrX 125611500 125612100 0.0911 51 chrX 125613300 125613600 0.1161 35 chrX 125779800 125780400 0.0324 84 chrX 125843100 125843400 0.0771 64 chrX 126108600 126108900 0.1952 55 chrX 126914400 126914700 0.0533 44 chrX 127117500 127118400 0.0018 79 chrX 127119600 127122300 0.0018 79 chrX 127254900 127255200 0.2951 39 chrX 127362900 127365000 0.0097 59 chrX 127366200 127367400 0.0097 59 chrX 127483800 127484100 0.1128 56 chrX 127593900 127594200 0.2355 30 chrX 128667600 128667900 0.0257 23 chrX 128787300 128787600 0.0935 67 chrX 129048900 129049200 0.1099 54 chrX 130518000 130523100 0 78 chrX 130569900 130570200 0.1007 47 chrX 130786800 130787100 0.071 51 chrX 130949100 130949400 0.0133 60 chrX 130959900 130960200 0.0075 80 chrX 130961700 130964700 0.0075 80 chrX 131003100 131006400 0 64 chrX 131124900 131125800 0.0017 84 chrX 131155500 131155800 0.186 24 chrX 131379000 131380200 0.1231 66 chrX 131487600 131487900 0.2065 74 chrX 131504700 131505000 0.1408 64 chrX 132136500 132138000 0.0119 66 chrX 132866400 132866700 0.0524 57 chrX 135116100 135118500 0 45 chrX 135120600 135157800 0 48 chrX 135174600 135174900 0.1226 29 chrX 135214500 135248700 0 44 chrX 135249900 135252000 0 40 chrX 135254100 135256200 0 43 chrX 135615900 135619200 0 42 chrX 135621300 135621600 0.0971 21 chrX 135669900 135673200 0 38 chrX 135720600 135723000 0 91 chrX 135724200 135729900 0 91 chrX 135731100 135734400 0 37 chrX 135748800 135757200 0 92 chrX 135758400 135813000 0 92 chrX 135814500 135847500 0 92 chrX 135849000 135864900 0 72 chrX 135866100 135877200 0 58 chrX 135879000 135881400 0 58 chrX 135883800 135885900 0 83 chrX 135945900 135946200 0.053 49 chrX 136075800 136076100 0.114 22 chrX 136440600 136440900 0.115 64 chrX 136443300 136445400 0.0063 106 chrX 137674200 137674500 0.1362 37 chrX 138062400 138064200 0 67 chrX 138301200 138301500 0.2246 35 chrX 139069200 139069500 0.0417 41 chrX 139852200 139852500 0.2235 50 chrX 140013000 140013300 0 13 chrX 140018100 140018400 0.0957 11 chrX 140074800 140075100 0 33 chrX 140219400 140220000 0.0169 19 chrX 140412000 140412300 0.2196 15 chrX 140419500 140420100 0.0513 97 chrX 140995800 140996100 0.139 35 chrX 141007200 141010500 0 80 chrX 141011700 141027900 0 80 chrX 141030300 141032100 0 35 chrX 141034200 141038100 0 35 chrX 141039600 141042900 0 40 chrX 141044700 141045000 0.0477 32 chrX 141052500 141054300 0 39 chrX 141055500 141064200 0 39 chrX 141066000 141072300 0 48 chrX 141073800 141081600 0 48 chrX 141082800 141090300 0 48 chrX 141091500 141092700 0.0117 33 chrX 141094500 141105000 0 39 chrX 141106200 141111000 0 39 chrX 141117300 141117900 0.0591 60 chrX 141231900 141232200 0.0102 32 chrX 141241800 141242100 0.1474 51 chrX 141249000 141249300 0.0009 26 chrX 141357000 141357300 0.1946 38 chrX 141421200 141426900 0 82 chrX 141476400 141477000 0 33 chrX 141478500 141480900 0 33 chrX 141482400 141492900 0 34 chrX 141494700 141495900 0.045 38 chrX 141497100 141507900 0 42 chrX 141509100 141511200 0 33 chrX 141512400 141513600 0.0042 32 chrX 141515700 141521100 0 43 chrX 141523500 141531900 0 39 chrX 141533100 141535500 0 39 chrX 141537600 141539400 0 28 chrX 141544500 141546600 0 40 chrX 141549300 141557100 0 37 chrX 141559500 141560400 0 39 chrX 141561900 141566700 0 39 chrX 141568200 141569100 0 77 chrX 141570600 141578100 0 77 chrX 141579600 141585000 0 77 chrX 141587100 141588300 0 59 chrX 141589500 141594900 0 59 chrX 141598500 141598800 0.14 39 chrX 141688200 141688500 0.0468 36 chrX 141697800 141698400 0.0421 50 chrX 141699900 141700200 0.0775 31 chrX 141790500 141790800 0.1709 20 chrX 141825000 141825300 0.1034 67 chrX 141912300 141912900 0 30 chrX 142190100 142190700 0.0046 33 chrX 142339200 142340400 0.0031 88 chrX 142342500 142344000 0.0031 88 chrX 142478400 142483500 0.0225 104 chrX 143154300 143154600 0.1576 48 chrX 144078000 144079800 0 46 chrX 144081000 144081300 0 46 chrX 144082800 144083700 0 36 chrX 144088500 144097500 0 56 chrX 144099900 144100500 0 34 chrX 144102300 144102600 0.0016 45 chrX 144105900 144106200 0.061 56 chrX 144107400 144111300 0 56 chrX 144112500 144116700 0 40 chrX 144118200 144118500 0.2348 34 chrX 144121500 144123000 0 44 chrX 144124200 144124800 0.0103 33 chrX 144126000 144126600 0.0433 36 chrX 144128700 144145200 0 55 chrX 144146700 144150900 0 55 chrX 144156900 144159300 0 50 chrX 144160500 144161700 0 50 chrX 144163800 144164100 0 41 chrX 144166200 144167400 0 41 chrX 144168900 144170700 0 48 chrX 144172500 144173100 0 48 chrX 144175200 144176700 0 41 chrX 144179100 144179700 0.0517 35 chrX 144182400 144182700 0.0255 56 chrX 144183900 144184200 0.1697 43 chrX 144186300 144188100 0 44 chrX 144189600 144189900 0.1191 40 chrX 144193200 144193500 0.0483 48 chrX 144195000 144196800 0.0483 48 chrX 144199500 144201000 0 43 chrX 144202500 144205500 0 43 chrX 144208500 144212100 0 43 chrX 144324600 144326700 0 55 chrX 144966900 144967200 0.154 47 chrX 145974900 145975800 0 75 chrX 146111400 146112000 0.031 63 chrX 146619300 146619600 0.0375 59 chrX 146802000 146822400 0 44 chrX 146861700 146862300 0.0412 47 chrX 146904000 146904300 0.1175 65 chrX 147279900 147280200 0 24 chrX 147283500 147283800 0.0287 59 chrX 147285300 147286500 0 71 chrX 147408900 147409500 0.0332 65 chrX 147654000 147659400 0 82 chrX 148123500 148123800 0.0723 65 chrX 148125300 148126800 0.0723 65 chrX 148170300 148171800 0.0477 45 chrX 148300200 148300500 0.1053 26 chrX 148731900 148732200 0.1489 54 chrX 148971900 148973100 0 53 chrX 149178300 149182800 0 86 chrX 149215200 149215800 0 66 chrX 149336100 149337600 0.005 61 chrX 149339100 149339400 0.0481 32 chrX 149438400 149439600 0.0099 370 chrX 149441100 149441400 0.0496 35 chrX 149538600 149538900 0.07 27 chrX 149544000 149544300 0.0458 40 chrX 149550900 149553600 0 43 chrX 149554800 149562000 0 43 chrX 149573400 149585700 0 45 chrX 149586900 149598600 0 45 chrX 149599800 149601000 0.0096 39 chrX 149654700 149658300 0 43 chrX 149659500 149680800 0 43 chrX 149722500 149748600 0 43 chrX 149767200 149769600 0 41 chrX 149770800 149796000 0 41 chrX 149917500 149928900 0 38 chrX 149935200 149935500 0.0451 37 chrX 149941200 149941500 0.102 35 chrX 149946600 149946900 0.1209 30 chrX 150000900 150001200 0.0157 131 chrX 150022200 150022500 0.1802 46 chrX 150132000 150134100 0.0194 73 chrX 150170100 150170400 0.1248 63 chrX 150215700 150216000 0.0386 28 chrX 150340800 150341100 0.0413 17 chrX 150418800 150420300 0.0091 64 chrX 151331400 151336200 0 75 chrX 151914300 151917600 0 19 chrX 152349600 152349900 0.1667 55 chrX 152360100 152360400 0.0649 76 chrX 152550000 152550300 0.121 91 chrX 152678700 152696700 0 43 chrX 152698500 152699700 0 36 chrX 152702400 152707800 0 39 chrX 152709600 152725200 0 45 chrX 152743200 152758800 0 43 chrX 152761800 152764200 0 43 chrX 152765700 152766300 0 43 chrX 152767500 152770200 0 45 chrX 152771700 152780700 0 45 chrX 152781900 152789100 0 44 chrX 152983800 152986800 0 41 chrX 153066600 153074100 0 43 chrX 153075900 153083400 0 47 chrX 153106800 153148500 0 47 chrX 153251700 153272100 0 44 chrX 153273600 153275400 0 44 chrX 153276600 153293700 0 44 chrX 153313500 153316200 0 46 chrX 154144500 154147800 0 53 chrX 154149600 154153800 0 84 chrX 154155000 154188000 0 84 chrX 154189200 154236900 0 75 chrX 154241100 154293300 0 57 chrX 154338300 154347000 0 43 chrX 154385100 154393800 0 38 chrX 154556400 154591200 0 44 chrX 154614000 154620900 0 44 chrX 154622400 154648200 0 44 chrX 154653600 154654200 0 24 chrX 154881000 154884900 0 44 chrX 154886400 154887300 0 76 chrX 155006400 155007000 0.0018 43 chrX 155148000 155148600 0.0122 35 chrX 155301600 155303700 0.0216 78 chrX 155337000 155340900 0 36 chrX 155342100 155346300 0 39 chrX 155347500 155369700 0 42 chrX 155372100 155386500 0 42 chrX 155454300 155468400 0 41 chrX 155471400 155504400 0 49 chrX 155516100 155521800 0 77 chrX 155571300 155571900 0 26 chrX 155700900 155703600 0 76 chrX 156010500 156014400 0 68 chrX 156017100 156021600 0 68 chrX 156024600 156024900 0.0031 141 chrX 156026400 156027900 0.0031 141 chrX 156030300 156030900 0.1447 1368 chrY 2808900 2809500 0.0171 34 chrY 3071400 3072000 0.1232 23 chrY 3215100 3215400 0.1449 27 chrY 3228600 3228900 0.2332 25 chrY 3275400 3275700 0.105 24 chrY 3346500 3346800 0.0623 24 chrY 3368400 3369600 0.0117 27 chrY 3444300 3444600 0.0534 63 chrY 3446100 3449400 0 85 chrY 3456600 3456900 0.2976 30 chrY 3504300 3505200 0.0044 31 chrY 3708000 3708300 0.0621 34 chrY 3715800 3716100 0.2054 34 chrY 3787800 3788100 0.1149 28 chrY 3804300 3804600 0.1398 30 chrY 3884400 3885000 0.0009 23 chrY 3974700 3975000 0 24 chrY 4018200 4018500 0.2037 25 chrY 4023000 4023300 0.0474 25 chrY 4106100 4106400 0.1154 32 chrY 4153200 4153500 0.0848 42 chrY 4266900 4267200 0.0203 26 chrY 4451700 4452000 0.1134 33 chrY 4482600 4482900 0.0659 25 chrY 4539900 4540200 0.0612 29 chrY 4541700 4542300 0.157 41 chrY 4632300 4632600 0.2087 23 chrY 4748700 4749300 0.189 30 chrY 4807200 4807800 0.0639 33 chrY 4851900 4852200 0.1844 25 chrY 4891200 4891500 0.137 37 chrY 4906500 4906800 0.1569 21 chrY 4949400 4954800 0 74 chrY 4966500 4966800 0.0809 36 chrY 5084100 5084400 0.1962 19 chrY 5118600 5118900 0.102 26 chrY 5141100 5141400 0.2212 46 chrY 5175600 5175900 0.0085 51 chrY 5196600 5197200 0.1548 42 chrY 5204100 5204400 0.0646 29 chrY 5221200 5221500 0.0199 28 chrY 5260200 5260500 0 10 chrY 5277000 5277300 0.0227 22 chrY 5279700 5280000 0.0082 23 chrY 5376900 5377200 0.0534 33 chrY 5473800 5474400 0.105 28 chrY 5526300 5526600 0.2625 33 chrY 5568900 5569200 0.0023 26 chrY 5572800 5573100 0.2278 28 chrY 5596500 5596800 0.0957 34 chrY 5606400 5612100 0.0078 99 chrY 5734800 5735400 0.0142 30 chrY 5760000 5760300 0.0212 32 chrY 5861700 5862000 0.1383 32 chrY 5875800 5876100 0.077 29 chrY 5922600 5923200 0.0457 28 chrY 6070500 6070800 0.1071 31 chrY 6174600 6174900 0.046 36 chrY 6191700 6192000 0.2732 27 chrY 6237600 6248700 0 173 chrY 6249900 6257400 0 173 chrY 6258600 6260400 0 140 chrY 6263100 6266400 0.0001 118 chrY 6273900 6275400 0.0503 35 chrY 6280500 6280800 0 32 chrY 6282000 6284700 0 32 chrY 6286500 6288900 0 45 chrY 6291300 6321600 0 45 chrY 6323100 6335700 0 41 chrY 6338400 6361200 0 50 chrY 6362400 6463800 0 50 chrY 6465300 6477000 0 50 chrY 6493200 6493800 0 35 chrY 6512100 6513600 0 28 chrY 6519300 6520800 0.0034 29 chrY 6524100 6524400 0.0121 26 chrY 6640500 6640800 0.1268 34 chrY 6675600 6706200 0 42 chrY 6709200 6709500 0.0046 30 chrY 7158300 7158600 0.1533 64 chrY 7254300 7254600 0.1293 46 chrY 7579200 7581000 0 40 chrY 7590900 7591200 0 41 chrY 7592400 7593000 0 41 chrY 7597800 7598100 0.0157 34 chrY 7600200 7600500 0.0417 32 chrY 7605300 7608600 0 43 chrY 7610100 7621500 0 43 chrY 7622700 7630800 0 42 chrY 7634700 7636500 0 35 chrY 7638300 7638600 0 35 chrY 9333600 9333900 0.0694 107 chrY 9336000 9345900 0 208 chrY 9347100 9402900 0 208 chrY 9453600 9491400 0 223 chrY 9492600 9502500 0 223 chrY 9503700 9533700 0 183 chrY 9534900 9537000 0 183 chrY 9636600 9636900 0.1465 28 chrY 9641100 9642000 0 30 chrY 9648600 9650100 0 33 chrY 9668400 9669000 0 32 chrY 9687900 9699600 0 48 chrY 9700800 9802500 0 48 chrY 9813600 9836400 0 44 chrY 9839100 9883500 0 44 chrY 9885600 9887400 0 32 chrY 9890100 9892500 0 35 chrY 9893700 9894000 0.1064 31 chrY 9898500 9900900 0 31 chrY 9903300 9903600 0.1033 34 chrY 9908400 9916800 0 39 chrY 9942000 9942900 0 76 chrY 9944100 9946200 0 76 chrY 10246500 10266900 0 69 chrY 10317000 10544100 0 80 chrY 10594200 10616400 0 67 chrY 10618800 10621500 0 39 chrY 10626600 10633500 0 4684 chrY 10645800 10650000 0 4661 chrY 10651500 10660800 0.0561 2454 chrY 10663500 10669800 0.129 4167 chrY 10672200 10672500 0.1853 1716 chrY 10673700 10674000 0.1853 1716 chrY 10682400 10689600 0.1031 3324 chrY 10690800 10692900 0.1031 3324 chrY 10744200 10744500 0.0933 3565 chrY 10745700 10781700 0.0933 3565 chrY 10783800 10787400 0.156 3867 chrY 10789200 10794300 0.1068 4048 chrY 10795800 10802100 0.1126 3884 chrY 10803900 10805100 0.1547 276 chrY 10806600 10816800 0.0883 910 chrY 10818600 10819500 0.0883 910 chrY 10820700 10822200 0.0883 910 chrY 10823400 10829400 0.082 1580 chrY 10830600 10849200 0.0669 3525 chrY 10851000 10852800 0.0669 3525 chrY 10855800 10856100 0.1969 132 chrY 10858200 10860000 0.1621 291 chrY 10861200 10866600 0.132 488 chrY 10868100 10873200 0.0733 1034 chrY 10875600 10878000 0.1605 370 chrY 10879200 10885500 0.0885 719 chrY 10887300 10890600 0.1298 1144 chrY 10891800 10892700 0.1363 1073 chrY 10895700 10896600 0.1275 773 chrY 10898100 10902300 0.0994 435 chrY 10921200 10947900 0.088 1180 chrY 10949100 10952700 0.088 1180 chrY 10953900 10956900 0.088 1180 chrY 10958100 10959600 0.1588 1023 chrY 10961100 10965900 0.0673 536 chrY 10967400 10967700 0.1566 1002 chrY 10968900 10977300 0.0937 1949 chrY 10980000 10980300 0.235 169 chrY 10982400 10995900 0.0998 2607 chrY 10997100 11001600 0.1104 8125 chrY 11003100 11028300 0.0718 4082 chrY 11029500 11031900 0.1076 520 chrY 11033100 11040900 0.1074 538 chrY 11240100 11240400 0.1767 102 chrY 11292900 11293200 0.2616 2484 chrY 11297100 11304300 0.101 4992 chrY 11313300 11313600 0.2069 2158 chrY 11326200 11326500 0.2071 2104 chrY 11355000 11355300 0.2326 24 chrY 11493000 11493600 0.2816 148 chrY 11494800 11495100 0.2079 257 chrY 11496300 11496600 0.209 199 chrY 11516700 11517000 0.2971 117 chrY 11520900 11521200 0.2394 213 chrY 11522400 11522700 0.1624 336 chrY 11529000 11529300 0.1439 837 chrY 11541900 11549100 0 801 chrY 11552700 11553000 0.0459 930 chrY 11555400 11555700 0.1537 563 chrY 11558100 11558400 0.0724 381 chrY 11560200 11561700 0.0409 374 chrY 11564100 11566500 0.0066 961 chrY 11567700 11569500 0 736 chrY 11570700 11592000 0 736 chrY 11643600 11643900 0.221 15657 chrY 11646000 11646300 0.1362 458 chrY 11666100 11666400 0.2009 293 chrY 11670600 11670900 0.2457 146 chrY 11673000 11673300 0.2658 120 chrY 11674800 11675100 0.2342 139 chrY 11676300 11676600 0.2747 162 chrY 11680200 11680500 0.1714 423 chrY 11684700 11685000 0.2622 132 chrY 11687400 11688300 0.1467 1992 chrY 11690100 11690700 0.1671 3894 chrY 11699100 11700600 0.159 334 chrY 11705400 11706900 0.2045 156 chrY 11709300 11709600 0.2801 163 chrY 11711700 11713200 0.1822 221 chrY 11716800 11719200 0.0966 1772 chrY 11721900 11723400 0.1258 31584 chrY 11726400 11726700 0.2299 120 chrY 11728200 11729700 0.202 217 chrY 11731200 11732700 0.1633 2982 chrY 11734800 11741700 0.113 2626 chrY 11743500 11745300 0.1493 2360 chrY 11747100 11748600 0.2632 7206 chrY 12313800 12315000 0 40 chrY 12320400 12321000 0 40 chrY 12850800 12851100 0.018 28 chrY 13113300 13114200 0 41 chrY 13121100 13122000 0 33 chrY 13166700 13167000 0.1983 42 chrY 13563600 13564200 0.0696 89 chrY 13984500 14019600 0 46 chrY 14023200 14058000 0 44 chrY 15875400 15883500 0 124 chrY 15896400 15904500 0 105 chrY 16159800 16269300 0 46 chrY 16316100 16425600 0 57 chrY 17061600 17063400 0 76 chrY 17376300 17377200 0 62 chrY 17456100 17951100 0 63 chrY 17955000 18450000 0 64 chrY 18451200 18640200 0 64 chrY 18680100 18870000 0 50 chrY 19583100 19583700 0 32 chrY 19667700 19668000 0.1543 55 chrY 19678200 19679100 0.02 48 chrY 19780800 19781400 0 34 chrY 20054100 20062800 0 48 chrY 20064300 20065500 0 56 chrY 20069700 20070900 0 39 chrY 20078400 20078700 0.1089 15 chrY 20080200 20083500 0 80 chrY 20085600 20091000 0 80 chrY 20095200 20095500 0.0923 13 chrY 20096700 20100000 0 42 chrY 20103000 20107200 0 52 chrY 20112300 20112600 0 40 chrY 20114100 20115000 0 67 chrY 20120100 20124600 0 93 chrY 20127600 20131500 0 52 chrY 20134500 20135700 0 30 chrY 20142600 20153400 0 66 chrY 20158500 20176800 0 88 chrY 20179500 20182800 0 44 chrY 20184900 20203500 0 167 chrY 20204700 20207700 0 63 chrY 20258400 20260200 0 40 chrY 20269500 20273400 0 80 chrY 20287800 20295300 0 100 chrY 20318700 20321100 0 56 chrY 20326500 20328300 0 229 chrY 20329500 20343600 0 229 chrY 20371500 20371800 0.2192 58 chrY 20473200 20475600 0.0241 61 chrY 20958900 20959200 0.1668 53 chrY 21010500 21021300 0 40 chrY 21051600 21063300 0 42 chrY 21065100 21065700 0 29 chrY 21493800 21567000 0 73 chrY 21705900 21706200 0.0565 36 chrY 21714900 21738900 0 23 chrY 21741600 21750000 0 26 chrY 21756000 21789000 0 26 chrY 21862200 21923400 0 86 chrY 21926100 21932100 0 86 chrY 21934200 21980400 0 86 chrY 21981600 22001700 0 86 chrY 22003500 22006500 0 86 chrY 22007700 22074300 0 86 chrY 22076700 22208700 0 58 chrY 22289100 22289400 0.1461 35 chrY 22377900 22504800 0 52 chrY 22506000 22526100 0 52 chrY 22527300 22725900 0 52 chrY 22735800 22736100 0.0225 25 chrY 22741500 22741800 0.1508 26 chrY 22746900 22777500 0 39 chrY 22779000 22783200 0 37 chrY 22785000 22814400 0 50 chrY 22815600 22883700 0 50 chrY 22885200 22898700 0 63 chrY 22899900 22941600 0 63 chrY 22942800 23027400 0 63 chrY 23028600 23572800 0 63 chrY 23574900 23655900 0 46 chrY 23657100 24353700 0 59 chrY 24355200 24490500 0 69 chrY 24491700 24569700 0 69 chrY 24570900 24582900 0 69 chrY 24584400 25185000 0 69 chrY 25186200 25406100 0 68 chrY 25407300 25692000 0 68 chrY 25693200 26019900 0 68 chrY 26021100 26059800 0 68 chrY 26061300 26282400 0 68 chrY 26283900 26311200 0 68 chrY 26638200 26643600 0.06 1063 chrY 26645100 26645400 0.0623 531 chrY 26652000 26655000 0.1651 335 chrY 26656200 26656500 0.2273 310 chrY 26660100 26660400 0.1911 147 chrY 26667900 26668500 0.1505 266 chrY 26672700 26673000 0.1076 600 chrY 56673000 56771700 0 27429 ================================================ FILE: tracks/lowmap50perc.bed ================================================ chr1 9900 15600 0 226 chr1 16800 55200 0 191 chr1 59700 61200 0.0233 68 chr1 64200 66000 0 104 chr1 67800 75900 0 104 chr1 78300 78900 0 104 chr1 80700 81000 0.1405 73 chr1 90300 97500 0 119 chr1 99300 101400 0 119 chr1 103500 108300 0.0051 106 chr1 109800 128400 0 124 chr1 129600 132900 0 124 chr1 134400 135900 0 55 chr1 137100 137700 0.2235 73 chr1 140100 182700 0 112 chr1 184500 186300 0.1444 135 chr1 187500 190800 0 154 chr1 192000 207300 0 114 chr1 258300 267300 0 150 chr1 269700 270600 0.0833 110 chr1 271800 279000 0.0011 120 chr1 280800 284100 0.0011 120 chr1 286200 286500 0 99 chr1 288000 297300 0 99 chr1 348000 532800 0 120 chr1 534000 535800 0 120 chr1 587700 589500 0 29 chr1 590700 591000 0 29 chr1 593700 599700 0.0018 109 chr1 601200 608400 0 65 chr1 609600 610500 0 750 chr1 611700 632400 0 750 chr1 635400 645000 0 94 chr1 646500 664500 0 94 chr1 666600 667200 0.3088 74 chr1 669000 676500 0 110 chr1 678300 701100 0 110 chr1 702600 729300 0 110 chr1 731100 732600 0 114 chr1 734400 752400 0 114 chr1 753600 757500 0 114 chr1 758700 762000 0 114 chr1 763200 766200 0.0015 75 chr1 767700 769800 0 86 chr1 772800 774600 0 90 chr1 776400 776700 0.3125 57 chr1 789600 791700 0.2643 739 chr1 799800 800100 0.3809 59 chr1 807000 807300 0.251 89 chr1 808800 809100 0.1351 68 chr1 813900 814200 0.0238 43 chr1 817500 817800 0.0781 83 chr1 828000 828300 0.1916 71 chr1 857400 857700 0.1344 31 chr1 866700 867000 0.4355 66 chr1 934200 934500 0.0843 24 chr1 976800 977100 0.2936 18 chr1 1076700 1079400 0.0176 87 chr1 1139400 1140300 0.0455 40 chr1 1201800 1202400 0.1474 43 chr1 1248900 1249500 0.0008 77 chr1 1288800 1290000 0.3288 96 chr1 1297200 1297500 0.4759 50 chr1 1478700 1479000 0.0834 63 chr1 1481100 1481700 0.0206 70 chr1 1517400 1517700 0.0632 67 chr1 1519200 1519800 0.0705 55 chr1 1632600 1636200 0 65 chr1 1642200 1644600 0 71 chr1 1657500 1658700 0.0599 62 chr1 1661700 1662000 0.0691 72 chr1 1675500 1677300 0.0404 71 chr1 1690800 1693800 0.0417 71 chr1 1695600 1695900 0.0864 44 chr1 1698300 1703400 0 63 chr1 1705200 1705500 0.4392 40 chr1 1707000 1707300 0.3648 48 chr1 1708800 1712700 0 74 chr1 1722900 1723200 0.0836 65 chr1 1727700 1728000 0.0666 56 chr1 1738500 1740000 0.0382 82 chr1 1744200 1748100 0.0108 71 chr1 1751100 1751700 0.0595 54 chr1 1979400 1979700 0.4737 28 chr1 2123100 2123700 0.334 56 chr1 2280900 2282400 0.0113 114 chr1 2365800 2366100 0.2105 80 chr1 2568000 2568300 0.2465 53 chr1 2655000 2682900 0 730 chr1 2684700 2687100 0.1498 317 chr1 2688600 2702700 0 1101 chr1 2746500 2750100 0 610 chr1 2753100 2767500 0 949 chr1 2768700 2775000 0 152 chr1 2776500 2777400 0.0034 100 chr1 2852400 2852700 0.4024 56 chr1 2949600 2949900 0.3544 24 chr1 3162900 3163200 0.1753 82 chr1 3167700 3168000 0.4241 45 chr1 3475200 3475800 0 98 chr1 3583200 3583800 0.0758 106 chr1 3643800 3644400 0 27 chr1 3693900 3694800 0.1974 65 chr1 3891900 3892500 0.0354 23 chr1 4077300 4077900 0.1175 60 chr1 4302900 4303200 0.2549 348 chr1 4332900 4333500 0.3322 112 chr1 4632900 4633200 0.3057 16 chr1 5334300 5334600 0 103 chr1 6304500 6304800 0.1027 54 chr1 7114800 7115400 0 60 chr1 7865100 7865400 0.3899 41 chr1 10577400 10577700 0.4368 29 chr1 10744500 10744800 0.3425 81 chr1 12789600 12789900 0.3936 45 chr1 12825300 12825600 0.1179 91 chr1 12832800 12833100 0.2072 59 chr1 12862200 12862500 0.3216 56 chr1 12866400 12867300 0 46 chr1 12868500 12868800 0.0613 65 chr1 12870900 12872700 0 51 chr1 12875100 12876600 0.0488 98 chr1 12879000 12879600 0.0419 41 chr1 12887700 12889500 0.0228 83 chr1 12891600 12892500 0.0047 68 chr1 12894600 12898200 0.0047 68 chr1 12899400 12900000 0.0047 68 chr1 12901800 12906000 0 75 chr1 12908400 12908700 0.056 39 chr1 12912900 12919200 0 81 chr1 12920400 12924600 0 77 chr1 12926100 12934800 0 77 chr1 12936600 12936900 0.1919 73 chr1 12939000 12947400 0 91 chr1 12948600 12954300 0 66 chr1 13005000 13005300 0.0151 56 chr1 13007700 13015800 0 56 chr1 13017600 13023600 0 74 chr1 13024800 13026300 0 74 chr1 13030500 13031100 0.1259 46 chr1 13032600 13034100 0.0234 50 chr1 13035600 13043100 0 67 chr1 13044300 13045200 0 67 chr1 13047600 13055400 0 69 chr1 13059000 13067700 0 86 chr1 13068900 13070100 0 86 chr1 13071600 13104000 0 86 chr1 13122600 13167600 0 92 chr1 13168800 13169100 0 92 chr1 13173000 13199400 0 67 chr1 13200600 13224300 0 67 chr1 13247700 13251000 0 72 chr1 13252200 13252500 0 72 chr1 13254000 13263000 0 72 chr1 13264200 13265400 0 72 chr1 13266600 13275900 0 75 chr1 13277400 13279200 0.136 66 chr1 13280400 13281600 0 89 chr1 13282800 13285500 0 89 chr1 13286700 13288500 0 89 chr1 13290000 13291500 0.0925 59 chr1 13295700 13298700 0 74 chr1 13299900 13300200 0.0003 66 chr1 13301700 13302600 0.0003 66 chr1 13304400 13305300 0.0003 66 chr1 13306800 13307400 0.3077 61 chr1 13312200 13312800 0.092 70 chr1 13327500 13328700 0 57 chr1 13332600 13332900 0.3013 73 chr1 13335600 13336200 0 74 chr1 13340100 13340400 0.1149 51 chr1 13363200 13363800 0.0261 40 chr1 14029200 14029500 0.0111 86 chr1 14257200 14257500 0.4339 50 chr1 16495200 16495800 0.01 91 chr1 16515000 16516800 0.1868 180 chr1 16539900 16540200 0.3954 57 chr1 16542000 16542300 0.2269 85 chr1 16545600 16545900 0.301 60 chr1 16548000 16548900 0.0779 52 chr1 16551000 16551600 0.0233 95 chr1 16554000 16557000 0 85 chr1 16558200 16569600 0 292 chr1 16572300 16574400 0.0665 134 chr1 16579200 16579500 0.3376 142 chr1 16581000 16581300 0.3252 156 chr1 16582500 16582800 0.1968 117 chr1 16588800 16589100 0.2012 128 chr1 16590600 16599000 0 135 chr1 16600500 16601100 0 135 chr1 16602300 16604700 0 135 chr1 16619100 16619700 0.111 150 chr1 16653300 16674000 0 185 chr1 16682100 16682700 0.0749 78 chr1 16688400 16696200 0 86 chr1 16698000 16699200 0.0385 92 chr1 16700400 16704000 0 98 chr1 16706100 16707300 0 83 chr1 16708500 16711500 0 83 chr1 16713300 16715700 0 98 chr1 16729500 16729800 0.054 122 chr1 16731000 16731900 0 175 chr1 16733700 16755000 0 175 chr1 16756500 16758300 0.0529 150 chr1 16760100 16760400 0.3697 69 chr1 16761900 16764000 0.0038 94 chr1 16768500 16769100 0.0208 123 chr1 16773000 16773300 0.2326 106 chr1 16778400 16778700 0.0466 126 chr1 16783800 16785600 0.0011 99 chr1 16790400 16792200 0.2609 120 chr1 16850700 16853700 0 72 chr1 16855500 16855800 0.3755 51 chr1 16858200 16858500 0.411 61 chr1 16863300 16863600 0.2797 87 chr1 16866000 16866600 0.1518 141 chr1 16917600 16918200 0.0114 75 chr1 16953600 16954200 0.0577 140 chr1 16974000 16974900 0 34 chr1 17241600 17241900 0.457 59 chr1 20814900 20817000 0.056 41 chr1 20831700 20833200 0.0494 70 chr1 21387600 21389700 0.0859 57 chr1 21422400 21422700 0.3003 61 chr1 21425100 21425700 0.0351 65 chr1 21482400 21483000 0.0104 73 chr1 21484800 21485700 0.1315 57 chr1 21968100 21968400 0.0698 54 chr1 21979800 21980100 0.2965 58 chr1 21989400 21991200 0 78 chr1 21993600 21993900 0.1595 60 chr1 22012500 22014600 0 72 chr1 23837100 23837400 0.3386 43 chr1 23992800 23994900 0.0688 55 chr1 24799800 24800400 0.1913 26 chr1 24832500 24834900 0 36 chr1 25002300 25002600 0.3444 13 chr1 25264800 25266000 0.0078 53 chr1 25273500 25273800 0.4385 40 chr1 25292700 25293000 0.3935 35 chr1 25297200 25298400 0.1491 51 chr1 25303800 25304400 0.1804 49 chr1 25312200 25312500 0.1363 47 chr1 25316700 25317900 0 42 chr1 25323000 25329000 0 56 chr1 25335000 25336200 0.0015 58 chr1 25337400 25337700 0.0015 58 chr1 25362600 25368600 0 57 chr1 25374600 25375200 0.0553 54 chr1 25380000 25380300 0.1413 55 chr1 25388100 25388400 0.0911 47 chr1 25419600 25419900 0.3566 47 chr1 25508700 25512000 0.1838 123 chr1 26163300 26163600 0.1266 39 chr1 26597100 26597400 0.2336 69 chr1 26640600 26641200 0.0034 67 chr1 26646900 26647500 0.0017 66 chr1 26818500 26819100 0.4183 38 chr1 27065100 27065400 0.0868 81 chr1 27852300 27855000 0.0671 75 chr1 29723400 29723700 0.4786 150 chr1 30439200 30439800 0.0665 109 chr1 30441900 30442500 0.0665 109 chr1 30443700 30444000 0.0665 109 chr1 30498600 30498900 0.096 84 chr1 30567900 30568800 0.011 182 chr1 30577200 30577500 0.4454 62 chr1 30578700 30579300 0.0551 71 chr1 30935700 30936000 0.1235 68 chr1 30949200 30949500 0.1536 79 chr1 31431900 31432200 0.4337 516 chr1 32974500 32974800 0.3256 61 chr1 33051300 33053400 0.0135 70 chr1 33834000 33834900 0.0253 56 chr1 34095000 34095300 0.0234 194 chr1 34096500 34098300 0.0234 194 chr1 34252200 34256400 0.0393 93 chr1 34566300 34572000 0 101 chr1 34956900 34957200 0.3072 73 chr1 35260200 35260500 0.2316 39 chr1 38667000 38667300 0.1822 126 chr1 38922300 38922600 0.3326 18 chr1 39413400 39413700 0.4493 37 chr1 39495300 39495600 0.3206 70 chr1 39511200 39513300 0 68 chr1 39515100 39516300 0.0618 68 chr1 39518100 39518700 0.0919 66 chr1 39520500 39522000 0.0408 60 chr1 39765300 39765900 0.1933 64 chr1 39767700 39768000 0.2489 78 chr1 39770700 39774900 0 87 chr1 39785100 39785400 0.1394 56 chr1 39999600 39999900 0.1148 50 chr1 40366200 40370700 0 136 chr1 40496700 40497000 0.1811 41 chr1 41208000 41208300 0.0326 56 chr1 41854500 41855100 0.0947 97 chr1 41989800 41991000 0.1619 84 chr1 41992500 41993100 0.1619 84 chr1 42064800 42065100 0.1743 69 chr1 42094500 42094800 0.202 55 chr1 42233100 42233400 0.1903 44 chr1 42253200 42254700 0.258 76 chr1 42277500 42277800 0.2148 36 chr1 42494700 42495300 0.0235 166 chr1 42708900 42709200 0.2458 185 chr1 42750900 42751500 0.0401 50 chr1 43117200 43117800 0.1024 78 chr1 45709800 45711000 0.1354 61 chr1 45725400 45726000 0.0421 51 chr1 45741600 45741900 0.1112 25 chr1 46240200 46242900 0.1027 82 chr1 46504200 46505400 0.0383 90 chr1 46874700 46875000 0.1614 58 chr1 46876800 46877100 0.1271 51 chr1 46886400 46887600 0 67 chr1 46891800 46897200 0 97 chr1 47070600 47075700 0 83 chr1 47078400 47078700 0.3607 49 chr1 47080200 47081400 0 62 chr1 47088600 47088900 0.285 55 chr1 47090700 47091000 0.167 70 chr1 47092800 47093100 0.2563 61 chr1 48150600 48150900 0 148 chr1 48152400 48156000 0 148 chr1 48381900 48384000 0.0287 99 chr1 49006800 49007400 0.1349 70 chr1 49259400 49260000 0.2722 80 chr1 49261800 49262100 0.4033 76 chr1 49283700 49284000 0.1117 102 chr1 49287000 49288200 0.0645 79 chr1 49800600 49800900 0.1283 52 chr1 49875600 49876800 0.0302 78 chr1 49878900 49879200 0.0602 65 chr1 50864100 50864400 0.3397 63 chr1 50918400 50919000 0.0081 89 chr1 52636200 52636500 0.4439 46 chr1 52797300 52797600 0.1032 134 chr1 53283600 53284200 0.0752 36 chr1 53713200 53713500 0.2647 120 chr1 54561300 54562800 0.2505 103 chr1 55666800 55667100 0.1833 21 chr1 55941900 55942200 0.1605 65 chr1 56365500 56369100 0 135 chr1 58115100 58115700 0.0732 84 chr1 58129800 58131300 0.1765 91 chr1 58254600 58255200 0.0951 82 chr1 58269600 58274400 0.0006 87 chr1 58374000 58374300 0.0548 82 chr1 58376700 58377000 0.0548 82 chr1 58378200 58378800 0.0548 82 chr1 58582500 58583400 0.1672 81 chr1 58593900 58594200 0.3137 38 chr1 58960200 58960500 0.1892 121 chr1 59253900 59254500 0.1297 76 chr1 59648400 59650800 0.156 69 chr1 59652300 59652600 0.156 69 chr1 60003000 60003300 0.2314 73 chr1 60210300 60210600 0.2012 83 chr1 60278700 60279000 0.1995 87 chr1 60380700 60381000 0.2317 69 chr1 60466800 60467100 0.3263 73 chr1 60493800 60494700 0.2107 90 chr1 60550800 60551400 0.0955 109 chr1 60643800 60645300 0.1929 88 chr1 60776100 60776400 0.3228 53 chr1 60779100 60779400 0.2439 56 chr1 61925100 61925400 0.2659 103 chr1 63239700 63242400 0.0028 102 chr1 63474000 63474300 0.3256 61 chr1 63926700 63927600 0.0432 53 chr1 64373400 64373700 0 68 chr1 64798200 64798500 0.0889 106 chr1 65227500 65227800 0.1824 82 chr1 65450400 65450700 0.2497 80 chr1 65558700 65564100 0 94 chr1 65671800 65672100 0.276 68 chr1 65778300 65778600 0.0289 74 chr1 66104400 66104700 0.1789 95 chr1 66486000 66486300 0.3607 93 chr1 66805500 66805800 0.2601 70 chr1 66823500 66824400 0.2397 67 chr1 67079100 67084800 0 91 chr1 67158900 67159200 0.1275 56 chr1 67342800 67343100 0.361 55 chr1 68734800 68739600 0 110 chr1 68878800 68879100 0.2492 74 chr1 68925600 68926200 0.324 77 chr1 69116100 69117000 0.1179 84 chr1 69118200 69118500 0.2728 50 chr1 69883800 69884100 0.0895 78 chr1 69887100 69887400 0.1147 82 chr1 70099200 70099500 0.139 82 chr1 70596000 70596600 0.1902 53 chr1 70599300 70599600 0.2421 100 chr1 70646700 70647600 0.0059 26 chr1 70814400 70814700 0.4068 37 chr1 71514000 71519700 0 114 chr1 71888700 71894100 0 122 chr1 72900900 72901500 0.3049 86 chr1 73194000 73194900 0.0125 112 chr1 73287900 73288200 0.239 19 chr1 74447700 74449200 0.0093 104 chr1 74519100 74519400 0.081 34 chr1 74758500 74758800 0.3686 80 chr1 74787900 74788200 0.2648 66 chr1 75377100 75379800 0 75 chr1 75381000 75384900 0 75 chr1 75387300 75387900 0.0728 125 chr1 75885900 75886200 0.095 25 chr1 76111500 76111800 0.1833 78 chr1 76999800 77001600 0.1473 72 chr1 77002800 77003400 0.1473 72 chr1 77004600 77004900 0.1473 72 chr1 77869200 77870700 0.1259 79 chr1 78243900 78245700 0 95 chr1 78282900 78283200 0.2715 57 chr1 78845700 78851100 0.0015 114 chr1 79571700 79572000 0.2215 28 chr1 79940700 79941300 0.1225 74 chr1 79942800 79943700 0.1225 74 chr1 80134200 80134800 0.13 60 chr1 80136900 80137200 0.13 60 chr1 80939400 80944800 0 105 chr1 80950800 80951100 0.0219 59 chr1 82131600 82132200 0.2059 72 chr1 82251000 82252500 0.0333 97 chr1 82253700 82255800 0.0333 97 chr1 82660200 82661700 0 91 chr1 83134500 83134800 0.3362 68 chr1 83161200 83161500 0.2608 42 chr1 83184000 83184300 0.1363 78 chr1 83187000 83187300 0.2478 59 chr1 83195700 83196000 0.4019 56 chr1 83208000 83208300 0.1703 46 chr1 83230500 83231100 0.1165 100 chr1 83266200 83266800 0.0975 87 chr1 83275500 83276100 0.398 44 chr1 83281200 83281500 0.3683 48 chr1 83303400 83304000 0.0442 57 chr1 83325300 83325900 0.3289 46 chr1 83339400 83341200 0.0207 89 chr1 83351100 83352300 0.0666 69 chr1 83390100 83390400 0.3693 38 chr1 83392800 83393100 0.1258 34 chr1 83417400 83417700 0.2211 72 chr1 83424600 83424900 0.4267 51 chr1 83440500 83440800 0.4107 50 chr1 83881800 83882100 0.3067 72 chr1 84052200 84058500 0 92 chr1 84233400 84234000 0.0408 126 chr1 85515300 85515600 0.2094 62 chr1 85521900 85522500 0.0134 63 chr1 85535400 85535700 0.0181 57 chr1 85748700 85754400 0 148 chr1 85825800 85826700 0.228 77 chr1 85927500 85932900 0 117 chr1 85940100 85940400 0.1448 27 chr1 86215200 86217300 0.0235 57 chr1 86242800 86243400 0.3194 78 chr1 86275500 86275800 0.0005 64 chr1 86679300 86685000 0 111 chr1 88342800 88347000 0.0481 82 chr1 89412600 89412900 0.0016 89 chr1 89414400 89415300 0.0016 89 chr1 89416800 89417400 0.0016 89 chr1 89561400 89561700 0.0317 76 chr1 89747100 89752500 0.0414 89 chr1 89797200 89797500 0.1077 53 chr1 90060300 90060900 0.3026 93 chr1 90215100 90215400 0.3873 69 chr1 91159200 91159500 0.4709 13 chr1 91212000 91216800 0.0107 104 chr1 91301400 91302000 0.0469 23 chr1 91371300 91371600 0.0807 37 chr1 91387200 91387500 0.035 950 chr1 93276900 93277500 0.0049 74 chr1 93791400 93796200 0.0157 98 chr1 95292300 95295600 0.0647 100 chr1 96052500 96052800 0.1288 41 chr1 96173400 96173700 0.2831 96 chr1 96242700 96243000 0.2236 113 chr1 96245400 96245700 0.4833 52 chr1 96606900 96607200 0.0775 84 chr1 96853500 96854100 0.2118 106 chr1 97319400 97322100 0.0018 85 chr1 98591100 98591400 0.4295 84 chr1 98983200 98983500 0.1537 63 chr1 99213600 99214200 0.0136 84 chr1 99388800 99390900 0.0085 93 chr1 101628900 101629200 0.186 58 chr1 101669100 101669400 0.3387 61 chr1 102073500 102073800 0.2643 95 chr1 102630600 102630900 0.2767 41 chr1 102807300 102807600 0.1934 55 chr1 103020300 103020900 0.1192 58 chr1 103356000 103356300 0.065 65 chr1 103594500 103610700 0 80 chr1 103618800 103623000 0 61 chr1 103624200 103760400 0 85 chr1 103923900 103924500 0.1691 103 chr1 104035500 104036400 0.0083 116 chr1 104127000 104127300 0.0189 25 chr1 104770500 104775900 0 95 chr1 104844000 104849100 0 87 chr1 104885700 104886000 0.0026 12 chr1 105214500 105216000 0.0011 57 chr1 105575400 105575700 0.0908 94 chr1 105658800 105660600 0.0251 131 chr1 106089900 106090200 0.2428 184 chr1 106284600 106284900 0.3692 65 chr1 108162900 108163200 0.292 103 chr1 108224100 108228300 0 96 chr1 108229500 108247200 0 96 chr1 108248400 108255600 0 96 chr1 108257100 108310500 0 79 chr1 108375000 108437400 0 140 chr1 108438600 108447300 0 86 chr1 108448500 108470400 0 86 chr1 108577200 108579300 0 71 chr1 109055100 109055400 0.0225 35 chr1 109674900 109675200 0.1752 56 chr1 109680600 109684200 0 66 chr1 109693500 109693800 0.043 45 chr1 109698900 109702200 0 56 chr1 109842600 109843800 0.1528 96 chr1 110845800 110846100 0.0597 64 chr1 111339300 111339600 0.2432 86 chr1 111544800 111545100 0.1185 104 chr1 111800100 111800400 0.0574 56 chr1 112104900 112105200 0.2437 15 chr1 112155300 112155600 0.0432 72 chr1 112158300 112159500 0.0432 72 chr1 112226100 112227300 0.1008 100 chr1 112293300 112294800 0.007 48 chr1 112773600 112774500 0.0854 54 chr1 112898400 112899300 0.0505 70 chr1 113068800 113070900 0.0582 92 chr1 113344200 113345700 0.0688 81 chr1 113360700 113362800 0.0147 129 chr1 113497200 113503200 0 132 chr1 113509500 113509800 0.0614 69 chr1 115151700 115153500 0.0435 140 chr1 115254300 115254600 0.2562 27 chr1 115627200 115627500 0.1056 100 chr1 116136900 116137200 0.0484 83 chr1 116718000 116719500 0 134 chr1 117430200 117430800 0.0103 78 chr1 118551300 118551600 0.2847 84 chr1 118575900 118576200 0.1012 50 chr1 118852500 118858200 0 122 chr1 119599200 119599500 0.2114 46 chr1 119989800 119994900 0 70 chr1 119998800 119999100 0.1029 78 chr1 120004200 120004500 0.0593 69 chr1 120005700 120006000 0.0593 69 chr1 120007800 120008700 0 61 chr1 120012000 120013200 0 81 chr1 120014400 120022800 0 81 chr1 120024300 120033000 0 74 chr1 120034500 120036900 0 74 chr1 120039900 120040800 0.0153 81 chr1 120042000 120042600 0.0153 81 chr1 120044100 120047400 0 101 chr1 120048600 120054000 0 101 chr1 120055200 120060000 0 101 chr1 120061800 120062700 0 101 chr1 120064200 120064500 0.1809 74 chr1 120067800 120068700 0.0076 66 chr1 120069900 120070500 0.0076 66 chr1 120073200 120073500 0.1825 46 chr1 120075300 120081600 0 104 chr1 120084000 120085200 0 104 chr1 120086400 120087900 0.03 115 chr1 120096600 120096900 0.0659 70 chr1 120099000 120100500 0.0801 65 chr1 120103500 120104100 0.0156 63 chr1 120106200 120106800 0.2459 55 chr1 120111000 120112200 0.0942 73 chr1 120118800 120119400 0.2222 59 chr1 120126600 120127500 0 70 chr1 120154500 120156600 0.2637 68 chr1 120158400 120159000 0.0749 57 chr1 120162000 120162600 0.1222 74 chr1 120164100 120164400 0.184 49 chr1 120169500 120169800 0.3386 57 chr1 120172200 120175500 0 88 chr1 120181800 120182100 0.0917 71 chr1 120184200 120185400 0.0064 71 chr1 120188700 120189300 0.0064 71 chr1 120192900 120196200 0.0341 81 chr1 120198300 120198600 0.1837 45 chr1 120200100 120218100 0 88 chr1 120220200 120220800 0 96 chr1 120222000 120321900 0 96 chr1 120323400 120332100 0 65 chr1 120334800 120340800 0 76 chr1 120342900 120345300 0 76 chr1 120346800 120347100 0 71 chr1 120348300 120351000 0 71 chr1 120352200 120363000 0 71 chr1 120364500 120364800 0 71 chr1 120368700 120369000 0.1433 54 chr1 120372300 120373800 0.126 54 chr1 120376800 120377700 0.0155 55 chr1 120382200 120383400 0.0832 56 chr1 120384900 120385200 0.0217 76 chr1 120387000 120391200 0.0217 76 chr1 120392400 120392700 0.0217 76 chr1 120394500 120394800 0.3432 40 chr1 120396300 120397500 0.0043 65 chr1 120398700 120401400 0.0545 63 chr1 120403800 120404100 0.0051 71 chr1 120405300 120408900 0.0051 71 chr1 120410700 120411300 0 77 chr1 120413400 120414300 0 77 chr1 120416100 120418500 0.1528 55 chr1 120419700 120420000 0.0741 63 chr1 120424800 120426000 0.1013 70 chr1 120427500 120427800 0.044 53 chr1 120429600 120430500 0.2468 69 chr1 120434700 120435600 0.1322 55 chr1 120436800 120449100 0 86 chr1 120451200 120453600 0.1191 82 chr1 120455400 120455700 0.0589 50 chr1 120457200 120459300 0 98 chr1 120461400 120465300 0 155 chr1 120466500 120467700 0 155 chr1 120469800 120470100 0 155 chr1 120471600 120471900 0 155 chr1 120478800 120479400 0.1279 56 chr1 120493800 120494400 0.1489 70 chr1 120499200 120500100 0.0473 63 chr1 120501900 120503400 0.0006 86 chr1 120504600 120506400 0.0006 86 chr1 120507600 120508800 0.0015 76 chr1 120510300 120510900 0.0015 76 chr1 120513000 120515700 0 80 chr1 120516900 120521100 0 80 chr1 120525000 120525300 0.2087 27 chr1 120526800 120529200 0.0004 75 chr1 120531000 120534000 0.0004 75 chr1 120536100 120537000 0 59 chr1 120538200 120539100 0 59 chr1 120541500 120541800 0.1175 62 chr1 120544800 120545400 0.0209 55 chr1 120548100 120548400 0 71 chr1 120550200 120551100 0 71 chr1 120552900 120554100 0.0076 53 chr1 120555600 120555900 0.1411 21 chr1 120558000 120558300 0.0004 58 chr1 120563400 120565800 0 72 chr1 120567000 120572100 0 72 chr1 120574500 120580200 0 80 chr1 120582900 120590700 0 80 chr1 120592500 120670200 0 99 chr1 120672000 120673500 0.0344 90 chr1 120674700 120678900 0.0344 90 chr1 120680100 120704400 0 81 chr1 120706800 120709500 0 87 chr1 120710700 120718800 0 87 chr1 120720000 120723000 0 87 chr1 120724800 120726000 0 89 chr1 120730800 120732000 0 89 chr1 120733500 120753900 0 89 chr1 120755100 120755400 0.0988 50 chr1 120756900 120758100 0 73 chr1 120760500 120763200 0.0732 67 chr1 120764700 120767700 0 75 chr1 120768900 120769200 0 80 chr1 120771000 120777300 0 80 chr1 120778500 120778800 0.0221 70 chr1 120780300 120781500 0.0221 70 chr1 120783000 120783600 0.0221 70 chr1 120785400 120792300 0.0172 73 chr1 120794700 120801000 0 71 chr1 120802800 120804000 0.1965 72 chr1 120808500 120808800 0.2187 83 chr1 120812400 120812700 0 283 chr1 120815700 120817800 0 283 chr1 120819900 120821700 0 283 chr1 120823800 120842700 0 283 chr1 120848700 120849000 0.0282 67 chr1 120853500 120854100 0.1357 63 chr1 120856500 120856800 0.4699 51 chr1 120861300 120861600 0.3388 57 chr1 120863100 120865500 0.0718 56 chr1 120868200 120870000 0.0233 76 chr1 120871200 120871500 0.0196 69 chr1 120872700 120875100 0.0196 69 chr1 120876300 120877500 0.081 52 chr1 120885900 120887400 0.0421 50 chr1 120890400 120891300 0.0071 45 chr1 120894300 120895800 0.035 59 chr1 120900000 120900300 0.2933 62 chr1 120911700 120919800 0 92 chr1 120922800 120924600 0 94 chr1 120925800 120928500 0 94 chr1 120929700 120930600 0 94 chr1 120936000 120936300 0.208 87 chr1 120943800 120944100 0.2953 68 chr1 120945900 120946500 0.0478 60 chr1 120948900 120949200 0.0849 60 chr1 120965700 120966600 0.0662 49 chr1 120971400 120971700 0.1568 37 chr1 120984300 120984600 0.016 59 chr1 120986400 120989100 0.0187 75 chr1 120990300 120992700 0.0187 75 chr1 120995400 121002600 0.0039 66 chr1 121004400 121005000 0.0034 77 chr1 121011000 121013400 0.0123 79 chr1 121014600 121016400 0.0043 87 chr1 121019400 121020600 0.0495 77 chr1 121023000 121027800 0 67 chr1 121029300 121032300 0.0648 78 chr1 121036800 121037100 0.0458 65 chr1 121049100 121049400 0.1196 78 chr1 121058700 121059000 0.1644 51 chr1 121065300 121065600 0.2389 52 chr1 121067400 121070100 0.0023 80 chr1 121071300 121074000 0.0023 80 chr1 121076100 121078500 0.0023 80 chr1 121083600 121084800 0.0916 59 chr1 121086600 121086900 0.0916 59 chr1 121088100 121088700 0 34 chr1 121092000 121092600 0.047 62 chr1 121096500 121096800 0.2753 69 chr1 121099200 121100700 0.0352 57 chr1 121102500 121104300 0.0699 57 chr1 121107600 121107900 0.0006 83 chr1 121110600 121110900 0.0006 83 chr1 121112700 121113900 0.0006 83 chr1 121116000 121116300 0.0006 83 chr1 121122600 121122900 0.2059 66 chr1 121124700 121125000 0.2059 66 chr1 121128300 121129200 0.0048 68 chr1 121130400 121131600 0.0048 68 chr1 121134300 121134900 0.0274 61 chr1 121138200 121138800 0.0774 51 chr1 121140000 121146900 0 71 chr1 121148700 121150500 0 71 chr1 121151700 121153200 0 71 chr1 121154400 121159200 0 71 chr1 121160400 121160700 0.3274 56 chr1 121161900 121162200 0.0653 49 chr1 121166700 121174200 0 76 chr1 121175400 121183500 0 68 chr1 121185300 121191000 0 68 chr1 121192800 121201500 0 73 chr1 121203600 121206000 0 71 chr1 121209000 121212000 0.0181 68 chr1 121214400 121215900 0 57 chr1 121218000 121221000 0 79 chr1 121223400 121225500 0 71 chr1 121226700 121227300 0 71 chr1 121229100 121238100 0 75 chr1 121239300 121243200 0 75 chr1 121244400 121254600 0 75 chr1 121255800 121259100 0 72 chr1 121260600 121262700 0 72 chr1 121264200 121265700 0.0007 79 chr1 121267500 121278000 0.0007 79 chr1 121280700 121282200 0.0007 79 chr1 121284300 121285800 0.0007 79 chr1 121287000 121287600 0.0007 79 chr1 121289400 121293300 0.012 68 chr1 121296300 121303200 0.0057 71 chr1 121305300 121307700 0.0057 71 chr1 121308900 121314300 0 107 chr1 121315800 121322700 0 73 chr1 121325400 121327800 0 70 chr1 121329300 121335000 0 70 chr1 121336500 121340100 0 73 chr1 121341600 121343100 0 73 chr1 121344300 121350000 0 73 chr1 121351800 121365900 0 99 chr1 121368600 121370100 0.0023 66 chr1 121371300 121374300 0.0008 65 chr1 121376100 121377900 0.0251 67 chr1 121379700 121381200 0 72 chr1 121382700 121390800 0 72 chr1 121392600 121394100 0 85 chr1 121398000 121398600 0.3404 131 chr1 121532400 121538100 0 125 chr1 121604400 121608300 0 37 chr1 121609500 121615800 0 44 chr1 121619400 121622700 0 83 chr1 121624200 121624500 0 62 chr1 121625700 121627200 0 62 chr1 121628700 121631400 0 62 chr1 121633200 121685700 0 426 chr1 121688400 121689000 0 40 chr1 121692600 121692900 0.1119 53 chr1 121694700 121698900 0 55 chr1 121700100 121700700 0 55 chr1 121701900 121710000 0 62 chr1 121711200 121718100 0 61 chr1 121719300 121722000 0 26 chr1 121724400 121727400 0 27 chr1 121731000 121735800 0 72 chr1 121737000 121737300 0 129 chr1 121738800 121739400 0 129 chr1 121741500 121756800 0 2648 chr1 121758000 121758300 0.0599 16 chr1 121760400 121788000 0 3380 chr1 121790100 121791300 0 32 chr1 121793400 121796400 0 131 chr1 121797600 121798200 0 97 chr1 121799400 121804800 0 97 chr1 121806000 121806300 0 207 chr1 121808400 121809900 0 207 chr1 121811100 121843200 0 207 chr1 121845000 121846800 0 162 chr1 121848300 121863000 0 115 chr1 121865100 121869300 0 74 chr1 121870500 121879500 0 81 chr1 121881300 121882200 0 32 chr1 121883700 121884000 0 25 chr1 121888200 121893000 0 79 chr1 121894500 121898100 0 81 chr1 121899600 121901100 0 25 chr1 121903500 121909200 0 122 chr1 121911600 121911900 0 15 chr1 121914300 121924200 0 144 chr1 121925400 121929900 0 102 chr1 121931700 121932000 0 13 chr1 121938900 121939500 0.3254 32 chr1 121940700 121942800 0 66 chr1 121944600 121946100 0 31 chr1 121948500 121948800 0 17 chr1 121951800 121952700 0 34 chr1 121953900 121957800 0 40 chr1 121959300 121965300 0 84 chr1 121966800 121968900 0 42 chr1 121970100 121973100 0 404 chr1 122032800 122047200 0 106 chr1 122050500 122050800 0 197 chr1 122053500 122055000 0 197 chr1 122056200 122056800 0 35 chr1 122058600 122063700 0 60 chr1 122064900 122070600 0 415 chr1 122073000 122085600 0 116 chr1 122087400 122089500 0 130 chr1 122090700 122098500 0 130 chr1 122101500 122102100 0.1373 20 chr1 122105100 122109000 0 97 chr1 122111400 122124300 0 104 chr1 122126100 122130600 0 389 chr1 122131800 122133300 0 21 chr1 122134500 122141700 0 150 chr1 122143800 122159700 0 118 chr1 122161800 122169600 0 98 chr1 122172000 122175000 0 412 chr1 122176200 122176800 0 412 chr1 122178000 122184300 0 412 chr1 122185800 122186400 0 412 chr1 122187600 122189100 0 22 chr1 122191200 122195400 0 82 chr1 122196600 122203200 0 111 chr1 122204400 122204700 0 111 chr1 122207100 122209500 0 111 chr1 122211000 122214900 0 111 chr1 122216700 122219100 0 37 chr1 122222100 122222400 0.3979 41 chr1 122224200 122225400 0 200 chr1 122226600 122229000 0 200 chr1 122230500 122236500 0 200 chr1 122238000 122270400 0 838 chr1 122271600 122368800 0 838 chr1 122370000 122449800 0 838 chr1 122452200 122490900 0 838 chr1 122492100 122495700 0 3359 chr1 122497500 122555100 0 3359 chr1 122556300 122573400 0 3359 chr1 122575200 122655000 0 2578 chr1 122656500 122658900 0 2578 chr1 122660100 122701800 0 1708 chr1 122703000 122712600 0.0072 1373 chr1 122713800 122739900 0 2814 chr1 122741100 122752500 0 1369 chr1 122754300 122872500 0 3523 chr1 122874000 122874900 0 3523 chr1 122876700 122920500 0 3575 chr1 122922900 123012000 0 5163 chr1 123013500 123066300 0 3618 chr1 123067800 123099000 0 3618 chr1 123100500 123150900 0 3618 chr1 123152100 123178500 0 2320 chr1 123179700 123227100 0 2048 chr1 123229500 123237900 0 1045 chr1 123239100 123276900 0 1264 chr1 123278100 123314400 0 2092 chr1 123315600 123373200 0 2092 chr1 123374700 123507300 0 4862 chr1 123508800 123531300 0 3361 chr1 123532500 123533100 0.1255 217 chr1 123534300 123537900 0.0134 818 chr1 123539100 123541800 0 3931 chr1 123543000 123622200 0 3931 chr1 123623400 123644100 0 3931 chr1 123645300 123652800 0 1009 chr1 123655200 123675900 0 1546 chr1 123677100 123720000 0 1546 chr1 123721500 123726600 0 4856 chr1 123727800 123756900 0 4856 chr1 123758400 123801600 0 6466 chr1 123803400 123920100 0 2786 chr1 123921300 123933600 0 2786 chr1 123934800 123963600 0 5034 chr1 123964800 123966900 0 5034 chr1 123968100 123976200 0 5034 chr1 123977400 124045200 0 4893 chr1 124046400 124085700 0 4893 chr1 124087200 124095000 0 1039 chr1 124096200 124100400 0 2235 chr1 124101600 124111200 0 2235 chr1 124112400 124119000 0 2235 chr1 124120200 124138200 0 2235 chr1 124139400 124142400 0 2235 chr1 124143600 124173300 0 2474 chr1 124174800 124194000 0 6138 chr1 124195200 124231800 0 6138 chr1 124233000 124278600 0 6138 chr1 124279800 124294800 0 6138 chr1 124296000 124468200 0 6138 chr1 124469400 124514100 0 6138 chr1 124515300 124543800 0 5650 chr1 124545000 124614300 0 4870 chr1 124615500 124779300 0 8877 chr1 124780800 124788900 0 2430 chr1 124793400 124801500 0 170 chr1 124803600 124805700 0 788 chr1 124807500 124820100 0 305 chr1 124821600 124826700 0 672 chr1 124827900 124834800 0 672 chr1 124836000 124848900 0 672 chr1 124850100 124852500 0 672 chr1 124853700 124857600 0 672 chr1 124858800 124898400 0 446 chr1 124899900 124914600 0 407 chr1 124915800 124921200 0 411 chr1 124922700 124928700 0 411 chr1 124931100 124931700 0.0951 101 chr1 124932900 124939800 0 212 chr1 125102700 125103300 0.0666 53 chr1 125114400 125114700 0.2726 132 chr1 125139000 125139300 0.2741 64 chr1 125166900 125167200 0.3706 2420 chr1 125171100 125171400 0.0748 228 chr1 125175300 125183700 0.0222 36986 chr1 143184600 143188500 0.0145 16765 chr1 143189700 143197200 0.0145 16765 chr1 143199600 143208600 0 30628 chr1 143210700 143224200 0 36167 chr1 143225700 143268900 0 36167 chr1 143271600 143271900 0.4763 284 chr1 143273700 143274900 0 288 chr1 143280000 143280300 0.2277 76 chr1 143282700 143283000 0.3364 93 chr1 143284200 143284500 0.2646 94 chr1 143286600 143286900 0.0687 44 chr1 143288700 143296800 0 106 chr1 143298900 143305800 0 117 chr1 143307000 143308800 0 117 chr1 143312700 143404200 0 113 chr1 143405400 143411100 0 77 chr1 143412300 143419200 0 77 chr1 143420400 143450400 0 116 chr1 143452200 143452800 0 109 chr1 143454000 143472300 0 109 chr1 143473500 143482500 0 135 chr1 143483700 143496600 0 135 chr1 143499300 143502000 0.0072 118 chr1 143506200 143523300 0 124 chr1 143524500 143526900 0 124 chr1 143528700 143529900 0.323 87 chr1 143535000 143535300 0.1113 46 chr1 143558400 143559300 0.1717 97 chr1 143560800 143562600 0.1717 97 chr1 143637600 143639400 0.1444 78 chr1 143703900 143704200 0.1677 66 chr1 143728500 143730300 0.0254 67 chr1 143737800 143739300 0.2757 64 chr1 143740500 143741700 0.0001 79 chr1 143744400 143744700 0.3958 55 chr1 143752500 143752800 0.2685 81 chr1 143766900 143767800 0.0097 70 chr1 143770200 143770800 0 68 chr1 143772600 143774400 0 68 chr1 143776200 143776800 0.0046 86 chr1 143778600 143778900 0 92 chr1 143780100 143803800 0 92 chr1 143805300 143813700 0 88 chr1 143815200 143817300 0 88 chr1 143818800 143820300 0.001 85 chr1 143821800 143822400 0.001 85 chr1 143823600 143824200 0.001 85 chr1 143826000 143830200 0.001 85 chr1 143833800 143835000 0.0073 57 chr1 143842200 143842500 0.1864 55 chr1 143846700 143847900 0 60 chr1 143855100 143856300 0.0317 71 chr1 143858700 143860500 0.0014 67 chr1 143863500 143863800 0.2124 57 chr1 143865000 143866200 0.0432 71 chr1 143868000 143868300 0.1066 73 chr1 143869500 143869800 0.1018 68 chr1 143871000 143872800 0.1018 68 chr1 143875200 143876100 0 73 chr1 143879400 143880000 0.1272 74 chr1 143886900 143888100 0.0303 59 chr1 143891100 143892900 0.0015 65 chr1 143895000 143895600 0.0335 70 chr1 143900700 143901300 0.0217 72 chr1 143903400 143903700 0.004 72 chr1 143910000 143910300 0.2223 80 chr1 143915700 143916300 0.0135 80 chr1 143921700 143922600 0.0016 70 chr1 143925300 143925600 0.2986 67 chr1 143929800 143930100 0.0044 72 chr1 143931900 143932500 0.0044 72 chr1 143934000 143934900 0.0044 72 chr1 143938800 143973900 0 83 chr1 143975100 143977200 0 83 chr1 143979600 143986200 0 83 chr1 143988000 144052200 0 98 chr1 144053400 144076500 0 98 chr1 144078300 144101100 0 100 chr1 144102600 144103200 0.1806 316 chr1 144105000 144394200 0 423 chr1 144395400 144395700 0 423 chr1 144397200 144401700 0 423 chr1 144406500 144406800 0.0787 63 chr1 144408600 144411600 0.025 76 chr1 144414600 144414900 0.2094 47 chr1 144417000 144418500 0 57 chr1 144422100 144422700 0.0699 77 chr1 144424800 144426300 0.1352 114 chr1 144429600 144429900 0.0884 69 chr1 144431700 144432000 0.0884 69 chr1 144433500 144433800 0.103 91 chr1 144446700 144447000 0.1678 66 chr1 144448800 144450300 0.0401 67 chr1 144453000 144454500 0.2519 65 chr1 144458400 144458700 0.3437 49 chr1 144460200 144460500 0.1037 62 chr1 144465600 144465900 0.2637 71 chr1 144469200 144469800 0.0778 74 chr1 144473100 144475200 0 84 chr1 144477600 144480000 0.0061 64 chr1 144481200 144481500 0.0564 71 chr1 144482700 144483000 0.0564 71 chr1 144484800 144488400 0.0535 98 chr1 144490200 144490500 0.0535 98 chr1 144498000 144498300 0.3314 32 chr1 144500400 144502200 0.0077 73 chr1 144505200 144506100 0.1452 63 chr1 144509100 144509700 0.1452 63 chr1 144514200 144514500 0.1719 57 chr1 144519300 144519600 0.1686 62 chr1 144520800 144521100 0.01 70 chr1 144523200 144525300 0.01 70 chr1 144526800 144527100 0.1581 73 chr1 144528300 144528600 0.3627 38 chr1 144535500 144535800 0.1094 56 chr1 144537000 144538500 0.0797 59 chr1 144540900 144541200 0.2766 54 chr1 144549300 144549600 0.1754 36 chr1 144558000 144558300 0.0426 67 chr1 144559800 144561900 0.0426 67 chr1 144568200 144570000 0.001 61 chr1 144573000 144825900 0 174 chr1 144827100 144882600 0 174 chr1 144884100 144904800 0 88 chr1 144906600 144907200 0.0008 75 chr1 144909900 144911400 0.0008 75 chr1 144912600 144919800 0 88 chr1 144921900 144922500 0.1547 61 chr1 144923700 144924000 0.0308 75 chr1 144925800 144926400 0 94 chr1 144927600 144928200 0 94 chr1 144930000 144930600 0 94 chr1 144931800 144935700 0 94 chr1 144936900 144941400 0 94 chr1 144942900 144943200 0 94 chr1 144945600 144951600 0 73 chr1 144954000 144954300 0 73 chr1 144955500 144955800 0 78 chr1 144957300 144963600 0 78 chr1 144966900 144970500 0.002 115 chr1 144972300 144973800 0.0404 68 chr1 144976800 144983700 0.0114 77 chr1 144984900 144990600 0 93 chr1 144992400 144992700 0.0146 86 chr1 144994200 144998400 0.0146 86 chr1 145000200 145002300 0.0318 86 chr1 145004100 145005300 0.0318 86 chr1 145007700 145011300 0.0171 73 chr1 145012500 145012800 0.0171 73 chr1 145014600 145016700 0 78 chr1 145018200 145019700 0 78 chr1 145021200 145021500 0 78 chr1 145023900 145041300 0 95 chr1 145042500 145044300 0 95 chr1 145045500 145063500 0 95 chr1 145065600 145066200 0 100 chr1 145067400 145075800 0 100 chr1 145077000 145079700 0 100 chr1 145081800 145106400 0 87 chr1 145107600 145128900 0 87 chr1 145130700 145135500 0 79 chr1 145136700 145139100 0 79 chr1 145140900 145146300 0 78 chr1 145147500 145152600 0 78 chr1 145153800 145155900 0 68 chr1 145157400 145167900 0 79 chr1 145170000 145171500 0.0158 57 chr1 145173300 145185600 0 75 chr1 145187400 145188000 0.0087 85 chr1 145191900 145193100 0.2149 67 chr1 145195800 145196400 0 83 chr1 145198800 145203600 0 83 chr1 145205700 145206300 0 107 chr1 145207500 145208700 0 107 chr1 145211100 145212300 0 107 chr1 145213500 145214400 0 107 chr1 145216500 145217100 0 107 chr1 145220400 145221000 0.0044 63 chr1 145227000 145227300 0.0838 60 chr1 145229400 145229700 0.1777 41 chr1 145230900 145232100 0.2309 78 chr1 145233600 145233900 0.0146 77 chr1 145236000 145236600 0.0146 77 chr1 145239600 145240500 0 64 chr1 145241700 145248600 0 74 chr1 145250100 145254300 0 74 chr1 145257600 145258500 0.0084 86 chr1 145262100 145262400 0 81 chr1 145264800 145268400 0 81 chr1 145269900 145271100 0 81 chr1 145274700 145277700 0 81 chr1 145279200 145280100 0 81 chr1 145283100 145283400 0.0278 62 chr1 145284900 145286100 0.0671 61 chr1 145288800 145289100 0.4049 53 chr1 145292700 145393200 0 325 chr1 145395900 145397100 0.1353 80 chr1 145398900 145399200 0.2142 53 chr1 145401300 145402200 0.0593 71 chr1 145405500 145407000 0.1795 70 chr1 145411800 145414800 0 81 chr1 145416300 145419000 0 81 chr1 145420500 145421100 0 81 chr1 145422900 145423200 0.2735 49 chr1 145433100 145433700 0.163 69 chr1 145440000 145440300 0.1154 65 chr1 145441800 145442100 0.1154 65 chr1 145443300 145443900 0.0222 69 chr1 145447500 145447800 0.1832 67 chr1 145449000 145449300 0.0808 66 chr1 145451100 145452600 0.1246 72 chr1 145456500 145460100 0 73 chr1 145462500 145462800 0.147 71 chr1 145465800 145468200 0.147 71 chr1 145472400 145472700 0.2172 58 chr1 145477500 145479600 0.0663 73 chr1 145480800 145481100 0.0663 73 chr1 145483500 145484100 0.2127 61 chr1 145488300 145488900 0 81 chr1 145491000 145494000 0 81 chr1 145495200 145495500 0 81 chr1 145497300 145511700 0 81 chr1 145514100 145515600 0 65 chr1 145521600 145522500 0 63 chr1 145527300 145527600 0.0329 71 chr1 145533900 145534200 0.4552 64 chr1 145540500 145541100 0.0182 52 chr1 145548300 145548600 0.1677 42 chr1 145550400 145551300 0 60 chr1 145573200 145573500 0.0852 83 chr1 145578000 145578300 0.2567 95 chr1 145581600 145582200 0.033 79 chr1 145584600 145584900 0.1095 65 chr1 145589700 145590000 0.1279 90 chr1 145618500 145618800 0.0216 56 chr1 145622400 145622700 0.04 63 chr1 145624200 145624500 0.238 60 chr1 145630500 145632000 0.0039 55 chr1 145633200 145633800 0.0039 55 chr1 145640400 145640700 0.2362 49 chr1 145643700 145644300 0.0306 53 chr1 145652400 145653900 0.107 69 chr1 145659600 145659900 0.1219 43 chr1 145669200 145670100 0.2005 53 chr1 145673400 145673700 0.262 71 chr1 145675200 145675500 0.2589 70 chr1 145677900 145678500 0.0067 55 chr1 145680900 145682400 0.0805 69 chr1 145809600 145811700 0.0086 53 chr1 145813800 145814100 0.1918 39 chr1 145815900 145818600 0.0075 72 chr1 145821000 145823100 0.128 71 chr1 145924800 145925400 0.1376 56 chr1 146059500 146062500 0 219 chr1 146063700 146125500 0 219 chr1 146126700 146135700 0 90 chr1 146136900 146141100 0 90 chr1 146143500 146157900 0 97 chr1 146159700 146161500 0 97 chr1 146162700 146170500 0 97 chr1 146173200 146174100 0 97 chr1 146175600 146184900 0 97 chr1 146188500 146228100 0 125 chr1 146229300 146317800 0 125 chr1 146319000 146319600 0 125 chr1 146321100 146322300 0 125 chr1 146323800 146324100 0.2997 60 chr1 146327100 146327400 0.0992 55 chr1 146329800 146330700 0 72 chr1 146331900 146335200 0 72 chr1 146337000 146341200 0 94 chr1 146342400 146349000 0 94 chr1 146350200 146358300 0 94 chr1 146359500 146362200 0.0242 90 chr1 146364300 146365200 0.0242 90 chr1 146367300 146367600 0.0331 78 chr1 146369100 146369700 0.0331 78 chr1 146379300 146380200 0.3143 47 chr1 146392200 146393100 0.1956 67 chr1 146396700 146397000 0.2819 60 chr1 146398200 146398500 0.176 57 chr1 146403000 146405700 0.0445 83 chr1 146407200 146407800 0.1047 69 chr1 146414400 146414700 0.0188 67 chr1 146417100 146417400 0.0446 87 chr1 146419500 146422200 0.0446 87 chr1 146423400 146424600 0.0446 87 chr1 146426700 146427000 0.2755 76 chr1 146428800 146430600 0.1077 70 chr1 146433600 146434200 0 83 chr1 146435400 146436300 0 83 chr1 146438100 146446200 0 83 chr1 146448900 146449200 0.1518 88 chr1 146451300 146456700 0 99 chr1 146459100 146461200 0.0015 81 chr1 146463900 146465700 0.0348 67 chr1 146467200 146467500 0.1797 61 chr1 146476500 146476800 0.329 81 chr1 146479800 146480700 0.111 77 chr1 146481900 146482200 0.162 63 chr1 146485500 146485800 0.0831 54 chr1 146487600 146489700 0 75 chr1 146491500 146497800 0 72 chr1 146502900 146504100 0.0958 62 chr1 146506500 146528100 0 79 chr1 146529600 146533200 0 77 chr1 146535300 146538900 0 67 chr1 146543400 146543700 0.044 65 chr1 146545200 146546100 0.0104 69 chr1 146547300 146547600 0.4887 45 chr1 146548800 146552400 0.0006 71 chr1 146553900 146554500 0.016 65 chr1 146562000 146564700 0 53 chr1 146567100 146568600 0.1105 68 chr1 146570400 146571000 0.0033 58 chr1 146578500 146580300 0.0192 72 chr1 146581500 146581800 0.0192 72 chr1 146583300 146583600 0.2062 52 chr1 146585700 146586000 0.0848 73 chr1 146587500 146591700 0.0848 73 chr1 146593500 146593800 0.0848 73 chr1 146598900 146601000 0.0795 74 chr1 146604900 146607600 0.0207 69 chr1 146609400 146610000 0.0055 74 chr1 146611200 146611800 0.1235 63 chr1 146615100 146616000 0.152 58 chr1 146619000 146621100 0 74 chr1 146623200 146627100 0.0312 76 chr1 146632800 146634300 0.0184 58 chr1 146637900 146638200 0.1853 37 chr1 146640000 146640300 0.3134 71 chr1 146652600 146654100 0.029 86 chr1 146655300 146655600 0.2724 56 chr1 146659800 146660100 0.29 52 chr1 146664600 146665200 0.0097 69 chr1 146674200 146676000 0.1243 63 chr1 146677800 146678400 0.1994 68 chr1 146681400 146681700 0.0547 67 chr1 146685600 146687700 0.0119 64 chr1 146692200 146693700 0.0772 56 chr1 146697300 146697600 0.1814 52 chr1 146702100 146702700 0.2571 75 chr1 146705100 146705400 0.3602 71 chr1 146709900 146710200 0.0394 55 chr1 146713800 146714100 0.2075 72 chr1 146717400 146722800 0 97 chr1 146728800 146731500 0 73 chr1 146733900 146734200 0.1305 62 chr1 146739900 146740200 0.2083 65 chr1 146741400 146745300 0.0276 68 chr1 146747100 146747700 0.0523 56 chr1 146748900 146749500 0.1701 67 chr1 146753700 146754000 0.0431 61 chr1 146759400 146759700 0.029 58 chr1 146763000 146763600 0.0019 65 chr1 146765100 146765700 0.0019 65 chr1 146768400 146768700 0.3398 82 chr1 146771100 146771400 0.1652 61 chr1 146774100 146774400 0.2627 64 chr1 146779200 146780400 0.0045 83 chr1 146785500 146786700 0.1849 67 chr1 146787900 146789400 0.006 71 chr1 146790600 146791200 0.006 71 chr1 146794800 146797800 0.0102 56 chr1 146799600 146799900 0.0291 66 chr1 146801400 146801700 0.0291 66 chr1 146802900 146804700 0.0291 66 chr1 146807700 146808000 0.1566 58 chr1 146811300 146811900 0.06 76 chr1 146823600 146823900 0.1536 65 chr1 146826000 146826600 0.0111 51 chr1 146830200 146831400 0.2296 79 chr1 146835300 146835900 0.1777 66 chr1 146838900 146839200 0.0609 46 chr1 146841000 146842500 0.0061 64 chr1 146845800 146846700 0.0968 59 chr1 146850900 146851200 0.1772 38 chr1 146852700 146855100 0.0375 73 chr1 146856600 146857200 0.1592 57 chr1 146859000 146860200 0.0726 59 chr1 146862900 146863200 0.0559 63 chr1 146866800 146872200 0 121 chr1 146876400 146876700 0.0883 68 chr1 146883600 146889600 0.0087 71 chr1 146892000 146892600 0.0233 60 chr1 146897400 146897700 0.1679 63 chr1 146900400 146903100 0.154 72 chr1 146904900 146905500 0.1882 70 chr1 146908200 146909100 0 74 chr1 146913900 146914800 0.0586 57 chr1 146916000 146920800 0 69 chr1 146922000 146923800 0 69 chr1 146925300 146925600 0.1616 62 chr1 146929800 146930400 0.0414 72 chr1 146931600 146934000 0.0414 72 chr1 146937300 146937600 0.2018 75 chr1 146949300 146949600 0.1166 41 chr1 146953200 146953500 0.3139 88 chr1 146955000 146955600 0.0453 74 chr1 146957100 146957400 0 71 chr1 146958600 146960400 0 71 chr1 146974500 146974800 0.2173 70 chr1 146978700 146981100 0 72 chr1 146983200 146985300 0 408 chr1 146986800 146995500 0 408 chr1 146998500 146998800 0 408 chr1 147015300 147015900 0.0178 58 chr1 147018000 147018300 0.3214 68 chr1 147019800 147020100 0.3214 68 chr1 147067800 147068100 0.2507 63 chr1 147424200 147424500 0.3254 62 chr1 147425700 147426300 0.283 72 chr1 147939000 147939300 0.1908 67 chr1 147942600 147943200 0.146 53 chr1 147944400 147945300 0.1402 73 chr1 147952800 147954600 0.0072 67 chr1 147955800 147956400 0.0111 56 chr1 147966300 147966900 0.0044 61 chr1 147974100 147976500 0.2984 61 chr1 147980100 147980400 0.4671 42 chr1 147982500 147982800 0.2361 61 chr1 147987300 147987600 0.3112 64 chr1 147992100 147993000 0.2254 72 chr1 147996300 147996600 0.2254 72 chr1 147998100 147998400 0.1486 78 chr1 148000800 148001400 0.0119 59 chr1 148003800 148005300 0.0765 60 chr1 148016100 148016400 0.0537 67 chr1 148020000 148020300 0.3655 63 chr1 148024500 148024800 0.2558 71 chr1 148026000 148027500 0.0217 60 chr1 148029600 148031400 0 76 chr1 148032900 148033200 0 76 chr1 148035600 148035900 0.2216 65 chr1 148040100 148041300 0.2216 65 chr1 148045500 148045800 0.1584 51 chr1 148050600 148052700 0.0623 75 chr1 148053900 148054200 0.0623 75 chr1 148056600 148057200 0.1885 51 chr1 148059600 148059900 0.0579 74 chr1 148061400 148062000 0.0579 74 chr1 148063500 148065900 0.0579 74 chr1 148068300 148068600 0.418 65 chr1 148070400 148084800 0 86 chr1 148087500 148088700 0.0148 60 chr1 148093200 148093800 0.0414 79 chr1 148095300 148095600 0.0414 79 chr1 148097700 148098300 0.1184 49 chr1 148102800 148107300 0.022 267 chr1 148109700 148110000 0.1315 92 chr1 148113300 148114800 0.0149 84 chr1 148117200 148117800 0.1533 87 chr1 148119000 148119300 0.1533 87 chr1 148126800 148128600 0.0047 64 chr1 148129800 148130100 0.0047 64 chr1 148131600 148132200 0.0182 64 chr1 148135500 148135800 0.2361 69 chr1 148137600 148137900 0.1425 55 chr1 148139400 148139700 0.156 46 chr1 148153200 148153500 0.2353 66 chr1 148156800 148158000 0.1456 67 chr1 148167900 148170000 0.1117 67 chr1 148173900 148174800 0.1535 71 chr1 148176000 148185900 0 75 chr1 148187700 148188900 0 68 chr1 148194000 148198200 0 74 chr1 148200300 148202700 0 78 chr1 148205100 148226700 0 78 chr1 148230300 148230600 0.3756 60 chr1 148235700 148236000 0 96 chr1 148238700 148241100 0 96 chr1 148243800 148244100 0.006 72 chr1 148245300 148245900 0.006 72 chr1 148247400 148248000 0.2178 52 chr1 148251300 148253400 0.033 67 chr1 148256700 148257000 0.0851 71 chr1 148281000 148282800 0.0041 73 chr1 148284600 148285800 0.0286 71 chr1 148298400 148303200 0.0017 80 chr1 148396200 148396500 0.3929 64 chr1 148419300 148419600 0.0753 51 chr1 148442400 148447500 0 83 chr1 148448700 148449000 0 83 chr1 148450500 148451700 0 83 chr1 148454400 148456500 0.0538 71 chr1 148460100 148461900 0 92 chr1 148463100 148463400 0 92 chr1 148464600 148464900 0.1744 62 chr1 148470300 148471800 0.0692 68 chr1 148473300 148473900 0.0089 78 chr1 148475700 148476600 0.0386 79 chr1 148479000 148480500 0.0386 79 chr1 148482000 148482600 0.0386 79 chr1 148484400 148484700 0 69 chr1 148486500 148488300 0 69 chr1 148490100 148494000 0 69 chr1 148495200 148499400 0.0107 80 chr1 148506300 148508700 0.0632 72 chr1 148511100 148512600 0.091 66 chr1 148516200 148517400 0.0211 64 chr1 148518900 148521300 0.0341 78 chr1 148527300 148528500 0.3054 72 chr1 148531500 148534200 0.0027 117 chr1 148535400 148559100 0 215 chr1 148560300 148584900 0 215 chr1 148586100 148586400 0 215 chr1 148587900 148590900 0 215 chr1 148594500 148607400 0 97 chr1 148609200 148636500 0 85 chr1 148639200 148660200 0 81 chr1 148661700 148820400 0 110 chr1 148821900 148910100 0 110 chr1 148911300 148914900 0 93 chr1 148916100 148916700 0 93 chr1 148917900 148922400 0 93 chr1 148924500 148924800 0 69 chr1 148926000 148929000 0 69 chr1 148930800 148932300 0.0017 81 chr1 148935300 148936500 0 57 chr1 148938900 148939200 0.0033 69 chr1 148941000 148944600 0.0033 69 chr1 148947300 148947600 0.0033 69 chr1 148956600 148957500 0 58 chr1 148960500 148960800 0.044 81 chr1 148962600 148962900 0.1428 75 chr1 148965600 148966200 0.1428 75 chr1 148968300 148969500 0.2348 69 chr1 148971900 148974900 0 60 chr1 148977000 148977600 0.0278 50 chr1 148988400 148989000 0.0032 68 chr1 148990800 148991100 0.0577 59 chr1 148992900 148994100 0.0331 77 chr1 148997100 148997400 0.2895 58 chr1 148998900 148999200 0.1754 64 chr1 149001300 149004900 0.012 77 chr1 149006700 149009400 0 76 chr1 149011200 149012100 0 72 chr1 149013300 149014800 0.0204 69 chr1 149018700 149020500 0.0099 78 chr1 149023500 149023800 0.0352 75 chr1 149027400 149028000 0.0352 75 chr1 149042400 149043000 0.1815 72 chr1 149050500 149054700 0 143 chr1 149056200 149059200 0 143 chr1 149060400 149064000 0.1676 178 chr1 149069400 149069700 0.1947 74 chr1 149078400 149078700 0.1301 94 chr1 149083200 149083500 0.1371 85 chr1 149090700 149091900 0.0002 87 chr1 149093700 149094600 0.0002 87 chr1 149096100 149097000 0.0002 87 chr1 149098800 149100600 0.2209 65 chr1 149102100 149102400 0.1447 72 chr1 149107200 149110200 0 90 chr1 149112300 149113200 0 90 chr1 149116800 149119800 0 90 chr1 149121300 149121900 0 90 chr1 149123400 149124600 0 90 chr1 149128200 149130000 0.0593 75 chr1 149131200 149134800 0 74 chr1 149140800 149141100 0.1027 61 chr1 149142600 149143500 0.0121 78 chr1 149145300 149147400 0.0539 88 chr1 149148900 149150700 0.0236 78 chr1 149151900 149152200 0.3807 42 chr1 149153400 149154000 0.3741 44 chr1 149155500 149157300 0.0145 79 chr1 149161500 149162100 0.0135 91 chr1 149163900 149167500 0.0135 91 chr1 149168700 149171400 0.0135 91 chr1 149174100 149174700 0.0296 84 chr1 149177100 149178300 0.022 99 chr1 149179800 149180700 0.022 99 chr1 149183400 149183700 0 82 chr1 149186700 149190300 0 82 chr1 149191800 149194200 0 82 chr1 149197800 149199300 0.0314 89 chr1 149201100 149202300 0 93 chr1 149203800 149205900 0.1865 79 chr1 149207100 149210100 0 89 chr1 149211900 149214900 0 130 chr1 149216100 149219100 0 130 chr1 149220300 149264700 0 130 chr1 149266500 149305800 0 130 chr1 149307000 149308200 0 119 chr1 149310000 149314200 0 119 chr1 149315700 149363400 0 119 chr1 149366700 149368200 0.03 62 chr1 149371800 149377500 0 95 chr1 149378700 149380800 0 95 chr1 149385600 149385900 0.3036 78 chr1 149388000 149388300 0.3036 78 chr1 149389800 149392500 0.0123 66 chr1 149393700 149394300 0 95 chr1 149396100 149397900 0 95 chr1 149399400 149403900 0 70 chr1 149405700 149408400 0 70 chr1 149410500 149412000 0.0258 73 chr1 149415000 149416500 0.0192 65 chr1 149418300 149418900 0.0192 65 chr1 149420700 149422200 0.0004 74 chr1 149426100 149428200 0.0048 64 chr1 149430900 149431800 0 100 chr1 149433900 149444400 0 100 chr1 149445900 149448600 0 100 chr1 149450700 149459700 0 82 chr1 149461800 149470800 0 80 chr1 149472900 149476800 0 94 chr1 149481300 149484300 0 94 chr1 149485500 149486400 0 94 chr1 149487900 149554200 0 184 chr1 149559000 149559600 0 75 chr1 149561100 149561400 0.3642 52 chr1 149563500 149563800 0 87 chr1 149565000 149565300 0 87 chr1 149566500 149585400 0 87 chr1 149587800 149591400 0.0121 83 chr1 149593200 149593800 0.0338 69 chr1 149595000 149598600 0.0299 63 chr1 149606700 149607000 0.0467 94 chr1 149608200 149609700 0.0467 94 chr1 149611200 149612100 0.2119 65 chr1 149614500 149616600 0 86 chr1 149617800 149618700 0 86 chr1 149620200 149622000 0 86 chr1 149623200 149627100 0.0024 82 chr1 149630100 149630400 0.2269 75 chr1 149637300 149637600 0.2697 67 chr1 149640000 149640600 0.1317 47 chr1 149643000 149643300 0.1219 55 chr1 149649300 149649600 0.1598 60 chr1 149651100 149651700 0.0245 70 chr1 149654700 149655000 0.1604 47 chr1 149657400 149657700 0.157 57 chr1 149659800 149660100 0.0868 62 chr1 149675700 149676300 0.0045 67 chr1 149678100 149679600 0.0022 85 chr1 149681100 149685300 0.0022 85 chr1 149687100 149687400 0.0022 85 chr1 149688600 149689500 0.0022 85 chr1 149691600 149691900 0.2967 54 chr1 149694600 149694900 0.2264 72 chr1 149696400 149709600 0 81 chr1 149710800 149712000 0 81 chr1 149713800 149715600 0.0123 61 chr1 149717100 149719800 0 69 chr1 149722800 149728800 0.025 69 chr1 149731800 149734500 0.025 69 chr1 149736000 149738100 0.025 69 chr1 149740800 149741100 0 64 chr1 149742300 149743500 0 64 chr1 149750700 149751300 0.2279 65 chr1 149755800 149756100 0.0518 64 chr1 149758200 149758500 0.1983 64 chr1 149760600 149761500 0.1983 64 chr1 149765400 149765700 0.3301 70 chr1 149767800 149769300 0.0156 70 chr1 149772000 149774100 0 66 chr1 149775900 149776200 0.1227 62 chr1 149777400 149777700 0.0927 65 chr1 149779200 149780700 0.0927 65 chr1 149783100 149784000 0 70 chr1 149791800 149792100 0.1275 68 chr1 149794500 149795700 0.0063 68 chr1 149798100 149799300 0.218 58 chr1 149800500 149800800 0.1622 58 chr1 149808900 149809200 0.1762 60 chr1 149817900 149818200 0 81 chr1 149821800 149843400 0 81 chr1 149850300 149871900 0 83 chr1 149873400 149873700 0 83 chr1 149875800 149876100 0.2981 57 chr1 150728100 150729000 0.1538 55 chr1 150782100 150782400 0.1901 67 chr1 151599900 151601700 0.0506 78 chr1 151647300 151647900 0.1975 85 chr1 152213400 152214900 0.008 357 chr1 152216100 152218200 0 306 chr1 152269500 152271300 0 58 chr1 152292300 152292600 0.2843 64 chr1 152305800 152307000 0.0842 68 chr1 152431800 152432100 0.2019 88 chr1 152490000 152491500 0.0011 78 chr1 152957100 152957400 0.2639 78 chr1 153004500 153004800 0.3856 58 chr1 153143100 153143400 0.254 79 chr1 153256800 153257100 0.3818 72 chr1 153278700 153279300 0.0491 78 chr1 153442800 153443100 0.2012 83 chr1 153465300 153465600 0.3258 51 chr1 155189100 155190300 0 43 chr1 155213100 155214600 0 70 chr1 155233800 155235000 0 70 chr1 155610300 155611800 0.0376 66 chr1 155618700 155619300 0.0209 63 chr1 155626800 155630400 0 95 chr1 155632200 155635800 0 95 chr1 155700900 155701500 0.0394 97 chr1 155745900 155746800 0.1094 71 chr1 155757600 155758200 0.1238 63 chr1 156179400 156180000 0.2474 63 chr1 156557400 156559200 0 53 chr1 157609500 157609800 0.1698 91 chr1 158240700 158241000 0.1121 67 chr1 158268600 158268900 0.1485 41 chr1 158319000 158319300 0.1993 79 chr1 158742300 158742600 0.3371 22 chr1 158761800 158763000 0.008 69 chr1 158953800 158954400 0.0501 74 chr1 158955600 158958600 0.116 76 chr1 159456600 159458400 0.0873 83 chr1 159525300 159525600 0.1277 34 chr1 159526800 159527100 0.0794 61 chr1 159569400 159570900 0.1645 114 chr1 159759900 159760500 0.186 89 chr1 159761700 159762600 0.1989 83 chr1 160695300 160695600 0.3902 105 chr1 161244000 161244300 0.2508 45 chr1 161423700 161424000 0.3642 71 chr1 161440800 161458500 0 452 chr1 161460300 161472000 0 452 chr1 161527200 161528100 0.2505 55 chr1 161533500 161535000 0.2048 57 chr1 161560500 161560800 0.2431 64 chr1 161566800 161567100 0.3146 50 chr1 161569500 161569800 0.2954 60 chr1 161573400 161586900 0 85 chr1 161588100 161589000 0 67 chr1 161590200 161590500 0.1365 49 chr1 161592000 161592600 0.2687 67 chr1 161608800 161609100 0.2765 65 chr1 161613600 161614500 0.0164 68 chr1 161633700 161634000 0.2826 56 chr1 161640000 161640600 0.0063 48 chr1 161641800 161642100 0.0063 48 chr1 161646000 161646300 0.3113 64 chr1 161648100 161648400 0.2851 57 chr1 161650800 161651700 0.0038 55 chr1 161653800 161670900 0 84 chr1 161673900 161674200 0.0272 66 chr1 162311700 162312000 0.1512 87 chr1 162737400 162739200 0.006 91 chr1 162791400 162791700 0.3857 50 chr1 163262400 163262700 0.0263 67 chr1 163641000 163644300 0.0168 90 chr1 163750800 163751100 0.3485 61 chr1 164290800 164291100 0.3646 64 chr1 164463300 164464800 0.0346 121 chr1 165971100 165974100 0 114 chr1 166243200 166248000 0.0348 137 chr1 166311300 166311600 0.3352 78 chr1 166494300 166494600 0.1364 58 chr1 167435100 167435400 0.4384 64 chr1 168055500 168055800 0.0323 67 chr1 168348900 168349500 0.0521 72 chr1 168351600 168354000 0.0612 93 chr1 168544200 168544500 0.1846 61 chr1 168576000 168576300 0.1523 72 chr1 169252800 169253400 0.2993 72 chr1 171097200 171097500 0.3862 56 chr1 171374100 171375600 0.2222 101 chr1 171377100 171378000 0.165 85 chr1 171690300 171690900 0.0756 91 chr1 172059300 172061100 0.0333 74 chr1 172981800 172988100 0.0044 75 chr1 173327400 173327700 0.3052 76 chr1 174235200 174237900 0.0112 95 chr1 174350100 174351000 0.0576 73 chr1 174379500 174382800 0.0021 93 chr1 174590400 174596100 0 101 chr1 174630300 174632100 0.0423 92 chr1 174633900 174634800 0.0423 92 chr1 174843600 174848400 0 111 chr1 175107600 175107900 0.339 63 chr1 175231500 175231800 0.3399 30 chr1 176002800 176003100 0.3249 132 chr1 176132700 176133000 0.0024 21 chr1 176256300 176261400 0 116 chr1 176640900 176641200 0.2602 131 chr1 176751300 176752200 0.0162 87 chr1 177408900 177409200 0.2098 80 chr1 177637500 177639600 0.0236 114 chr1 178315800 178317300 0 81 chr1 178695600 178696200 0.402 72 chr1 178777800 178778700 0.0172 137 chr1 178804500 178805100 0.1071 117 chr1 178841400 178843500 0 101 chr1 179943300 179943600 0.2195 63 chr1 180302700 180303000 0.4846 58 chr1 180699300 180702300 0 95 chr1 180867000 180872700 0 120 chr1 181225500 181226700 0.0592 66 chr1 182508900 182510400 0.0063 70 chr1 183616800 183617100 0.2795 66 chr1 184846200 184851600 0.0009 121 chr1 185004300 185004600 0.1429 165 chr1 185006100 185006400 0.1429 165 chr1 185252700 185255700 0.1867 82 chr1 185380200 185380500 0.0792 95 chr1 185888100 185888400 0.0936 83 chr1 185889600 185891100 0.0936 83 chr1 186160200 186160500 0.1835 66 chr1 186641100 186642000 0.156 133 chr1 186795600 186796200 0.0239 24 chr1 187344000 187348800 0 116 chr1 187598100 187603500 0 112 chr1 187805400 187805700 0.2465 46 chr1 188559900 188560200 0.2836 62 chr1 188756100 188756400 0.3004 120 chr1 189025800 189026100 0.1147 26 chr1 189469500 189471000 0.0753 88 chr1 189863400 189863700 0.204 48 chr1 190730400 190732800 0.148 92 chr1 191064000 191064300 0.2471 65 chr1 191069700 191070000 0.0579 58 chr1 192501300 192506400 0.0418 95 chr1 193445400 193446300 0.1974 95 chr1 193718100 193723500 0 103 chr1 194272200 194273100 0.2246 64 chr1 195925500 195929100 0 92 chr1 196219500 196225200 0 114 chr1 196753200 196754700 0 49 chr1 196757100 196757400 0.0483 64 chr1 196758900 196759200 0.0483 64 chr1 196795800 196796400 0.0089 63 chr1 196812900 196813200 0.2013 64 chr1 196819500 196820100 0.0346 59 chr1 196821300 196821600 0.0774 66 chr1 196837800 196839300 0 49 chr1 196841700 196844100 0 54 chr1 196847100 196847700 0.0188 70 chr1 196920900 196921500 0.0221 76 chr1 196943400 196944000 0.0128 63 chr1 196945200 196945800 0.2424 70 chr1 197531400 197534100 0 102 chr1 197708100 197713800 0 111 chr1 197803500 197804100 0.1705 77 chr1 198250500 198250800 0.1148 93 chr1 199023600 199025400 0 102 chr1 199469700 199470900 0 78 chr1 200487600 200487900 0.4729 70 chr1 200797500 200798700 0.0506 95 chr1 200914800 200915400 0 72 chr1 201210000 201210600 0.2724 67 chr1 201235500 201235800 0.175 66 chr1 202204800 202205100 0.2868 70 chr1 202391700 202392000 0.007 11 chr1 204471000 204471600 0 59 chr1 205847100 205847400 0.1791 58 chr1 205854300 205854600 0.0894 60 chr1 205958100 205958400 0.117 21 chr1 205966800 205967100 0.4159 18 chr1 206153100 206153700 0.0215 56 chr1 206158200 206160300 0 63 chr1 206163000 206164500 0.1748 70 chr1 206170500 206172000 0 77 chr1 206175000 206176800 0.0179 63 chr1 206180100 206180700 0.0179 63 chr1 206183400 206190300 0 75 chr1 206192100 206192700 0 75 chr1 206194800 206197800 0 75 chr1 206199300 206205600 0.0004 76 chr1 206207700 206208300 0.0004 76 chr1 206211300 206212800 0.0649 64 chr1 206214900 206220300 0 86 chr1 206221500 206226300 0 86 chr1 206228100 206228400 0.1616 94 chr1 206230200 206230500 0.2069 55 chr1 206232600 206234100 0 83 chr1 206235300 206238600 0 83 chr1 206242500 206247900 0 90 chr1 206250600 206254200 0.0913 74 chr1 206256900 206257200 0.0109 66 chr1 206258400 206258700 0.0109 66 chr1 206259900 206261400 0.0109 66 chr1 206263200 206265600 0 72 chr1 206268600 206272200 0 70 chr1 206274900 206277600 0.0163 75 chr1 206279100 206282700 0.0163 75 chr1 206287500 206289300 0.1385 67 chr1 206293200 206294400 0.0004 71 chr1 206297100 206300700 0.0907 70 chr1 206302800 206303100 0.0907 70 chr1 206308200 206309100 0.0012 60 chr1 206310900 206311200 0.2815 89 chr1 206313300 206313600 0.3485 81 chr1 206314800 206317500 0.0083 77 chr1 206319900 206321700 0.0013 68 chr1 206323800 206324400 0.0013 68 chr1 206327400 206332200 0 105 chr1 206334000 206334300 0.2437 70 chr1 206336100 206338800 0.0168 83 chr1 206342700 206343900 0.3068 70 chr1 206348700 206349900 0.0757 73 chr1 206352000 206352600 0.0307 51 chr1 206356200 206356500 0.3475 72 chr1 206357700 206358000 0.1335 59 chr1 206359200 206362800 0.0382 92 chr1 206364900 206365200 0.203 62 chr1 206366700 206367000 0.0188 99 chr1 206368200 206368800 0.0188 99 chr1 206370900 206375100 0.0019 73 chr1 206376600 206378100 0.0199 54 chr1 206379300 206383200 0 85 chr1 206387400 206388900 0 85 chr1 206390100 206394000 0.1159 69 chr1 206396700 206398200 0.2345 54 chr1 206400300 206400900 0 83 chr1 206402700 206409300 0 83 chr1 207526800 207564000 0 74 chr1 207568200 207572100 0 58 chr1 207721500 207722400 0.0686 81 chr1 207732300 207733500 0.0835 85 chr1 207735300 207736200 0.0169 113 chr1 208307100 208307400 0.344 105 chr1 208659000 208659300 0.1524 63 chr1 208694100 208694400 0.4882 49 chr1 208707000 208707300 0.2368 83 chr1 209281500 209281800 0.1699 72 chr1 209913900 209919600 0 82 chr1 210442200 210444300 0 69 chr1 210968100 210968400 0.2441 65 chr1 212298600 212298900 0.2244 29 chr1 212849400 212851200 0.0009 84 chr1 213740700 213741000 0.259 36 chr1 213806700 213807000 0.2221 110 chr1 214683300 214683600 0.3777 50 chr1 214868700 214870500 0.0419 51 chr1 215209500 215209800 0.0394 45 chr1 216488400 216489300 0.2044 84 chr1 216490800 216491100 0.2044 84 chr1 217359300 217359900 0.1739 54 chr1 217690500 217695600 0 83 chr1 217744200 217744500 0.3307 43 chr1 218009100 218014800 0 76 chr1 218072400 218073000 0.0039 75 chr1 219103800 219104100 0.1983 66 chr1 219455700 219457500 0.0698 109 chr1 219561900 219562200 0.165 63 chr1 219591300 219591600 0.2649 46 chr1 219598800 219600300 0.2296 52 chr1 219610200 219611700 0.1811 72 chr1 219866400 219867000 0.016 40 chr1 219869100 219869400 0.1181 77 chr1 220112100 220112400 0.2366 44 chr1 220246500 220246800 0.034 59 chr1 220995900 220996800 0 136 chr1 222138300 222138600 0.314 18 chr1 222481200 222481800 0.0281 40 chr1 222483000 222483300 0.3182 54 chr1 222488400 222489300 0.0386 101 chr1 222501300 222501600 0.4911 38 chr1 222507300 222507600 0.2135 87 chr1 222509400 222509700 0.2134 62 chr1 222668400 222668700 0.0095 68 chr1 223317900 223319400 0.0166 101 chr1 223396800 223397400 0.0647 72 chr1 223398600 223399500 0.0647 72 chr1 223451100 223451700 0.0266 79 chr1 223635600 223636800 0 122 chr1 223890000 223890300 0.0632 68 chr1 223894200 223894500 0.2902 49 chr1 223910400 223910700 0.2719 73 chr1 223917300 223917600 0.2498 71 chr1 223920600 223920900 0.1297 90 chr1 223923000 223923300 0.2606 72 chr1 223927800 223931400 0.0213 66 chr1 223932600 223934700 0 68 chr1 223938600 223938900 0.0039 68 chr1 223940100 223941600 0.0039 68 chr1 223943400 223944300 0.1719 67 chr1 223950900 223951200 0.1232 36 chr1 223953900 223954200 0.2175 50 chr1 223963200 223963500 0.4961 43 chr1 223968300 223968600 0.265 76 chr1 223979700 223981500 0.0585 53 chr1 223987800 223988400 0.0625 78 chr1 224001300 224001600 0.2409 47 chr1 224011800 224017200 0.2077 1434 chr1 224025300 224025600 0.2432 61 chr1 224026800 224027100 0.1541 36 chr1 224034000 224034300 0.1403 64 chr1 224059500 224059800 0 30 chr1 224340000 224340600 0.0779 52 chr1 224378700 224379000 0.3123 91 chr1 224799600 224800200 0.076 141 chr1 226071600 226071900 0.1224 46 chr1 226114500 226114800 0.0645 44 chr1 226797900 226798200 0.0165 27 chr1 227207700 227208000 0.2293 76 chr1 227493300 227496000 0.0059 96 chr1 227497800 227499000 0.0059 96 chr1 227502300 227508000 0 71 chr1 227981400 227982000 0.1635 56 chr1 227984100 227985600 0.0849 52 chr1 228384600 228384900 0.4534 47 chr1 228556500 228558300 0 325 chr1 228608400 228646800 0 773 chr1 228679200 228679500 0.2133 32 chr1 228709500 228709800 0.3244 71 chr1 228711600 228712200 0.2721 100 chr1 229900800 229901100 0.3862 67 chr1 230335200 230335500 0.327 13 chr1 230871900 230872200 0.4319 236 chr1 231047400 231047700 0.2172 36 chr1 231780600 231780900 0.0081 61 chr1 232082100 232082700 0.2749 94 chr1 232231800 232232100 0.1874 25 chr1 232725300 232725600 0.3893 44 chr1 232823700 232824300 0.065 83 chr1 233174100 233174400 0.4098 10 chr1 234267000 234267600 0.298 79 chr1 234451500 234451800 0.2176 32 chr1 234788100 234790800 0.065 125 chr1 234793800 234794100 0.3437 108 chr1 234797100 234798600 0.0313 116 chr1 234801000 234801300 0.3427 85 chr1 234803100 234804300 0.1416 116 chr1 234805800 234806100 0.2708 93 chr1 234809100 234809700 0.2708 93 chr1 234812400 234812700 0.0623 123 chr1 234813900 234814800 0.0623 123 chr1 234818400 234818700 0.152 74 chr1 235382700 235384500 0.2121 73 chr1 236035200 236035500 0.0302 105 chr1 236097000 236097300 0.2783 390 chr1 236386500 236388000 0 59 chr1 236713500 236715000 0 414 chr1 236755800 236757000 0.1186 44 chr1 237019500 237025200 0 110 chr1 237075600 237081300 0.0036 103 chr1 238689300 238689900 0.0431 109 chr1 239623500 239629200 0 103 chr1 239732400 239732700 0.0195 57 chr1 241197300 241197600 0.2177 31 chr1 241416000 241416300 0.281 61 chr1 242045700 242051400 0 82 chr1 242394300 242394600 0.1125 15 chr1 243013200 243013500 0.2069 63 chr1 243030000 243031500 0.0389 74 chr1 243033000 243034200 0.2107 61 chr1 243036300 243036600 0.322 63 chr1 243038400 243038700 0.322 63 chr1 243040500 243040800 0.0656 63 chr1 243042300 243042600 0.0656 63 chr1 243045600 243046800 0.0178 50 chr1 243052200 243052500 0.2328 47 chr1 243058800 243059100 0.156 58 chr1 243061500 243061800 0.3266 45 chr1 243068400 243068700 0.3517 89 chr1 243081300 243082800 0.0109 79 chr1 243096300 243096600 0.3059 67 chr1 244492800 244493100 0.1586 82 chr1 244523400 244523700 0.0986 79 chr1 244540800 244541100 0.225 45 chr1 245103300 245103600 0.1551 58 chr1 245280900 245281800 0.0573 90 chr1 245819400 245820300 0.0105 118 chr1 245974500 245976900 0 20 chr1 245991900 245992800 0.0023 49 chr1 246024600 246024900 0.4614 70 chr1 246251700 246252300 0.3594 50 chr1 246388200 246389700 0 118 chr1 246429900 246430200 0.4254 44 chr1 246484200 246485100 0.2527 74 chr1 246520800 246521100 0.4323 34 chr1 246620100 246620400 0.1052 15 chr1 246818100 246819300 0 30 chr1 246864600 246864900 0.1618 14 chr1 247116000 247119000 0 47 chr1 247126200 247129800 0 77 chr1 247170900 247172100 0 58 chr1 247219200 247219500 0.069 67 chr1 247354800 247355100 0.0551 45 chr1 247363200 247363500 0.4447 70 chr1 247687500 247693200 0 97 chr1 247725600 247726800 0.0733 66 chr1 247800600 247800900 0.2274 36 chr1 247809300 247810800 0.0101 81 chr1 247870500 247871100 0.2659 175 chr1 247888500 247891200 0 100 chr1 247892400 247893900 0 100 chr1 247921500 247921800 0.1473 42 chr1 248166900 248170800 0.0061 105 chr1 248187900 248188800 0 64 chr1 248221200 248221800 0.0667 81 chr1 248256300 248256600 0.308 72 chr1 248408100 248409000 0.0298 129 chr1 248448300 248448900 0 72 chr1 248450700 248452500 0 72 chr1 248454000 248457000 0 65 chr1 248474400 248476500 0 74 chr1 248479800 248480100 0.1043 67 chr1 248483400 248484600 0 67 chr1 248486100 248493900 0 88 chr1 248495700 248498400 0 66 chr1 248499600 248500500 0 66 chr1 248502000 248519100 0 65 chr1 248529000 248543700 0 78 chr1 248544900 248546100 0 78 chr1 248547600 248548200 0 78 chr1 248549400 248551800 0 69 chr1 248554200 248562000 0 72 chr1 248563800 248564400 0 77 chr1 248568000 248568300 0.0747 73 chr1 248571600 248573700 0 69 chr1 248635800 248638200 0.0007 93 chr1 248639700 248643900 0 68 chr1 248650200 248650500 0.3035 41 chr1 248654100 248655000 0 55 chr1 248676600 248676900 0.0569 12 chr1 248747100 248748000 0.0083 41 chr1 248931300 248933400 0.0069 305 chr1 248937900 248946600 0.0069 305 chr10 9900 47100 0 302 chr10 321600 323400 0.0504 107 chr10 345600 347100 0.2067 46 chr10 402300 402600 0.3243 25 chr10 425100 425400 0.3833 93 chr10 455400 456000 0.4409 135 chr10 465000 465300 0.1919 59 chr10 632400 632700 0.4778 56 chr10 717900 718200 0.0922 41 chr10 723300 723600 0.3428 36 chr10 735900 736200 0.2104 37 chr10 747300 747600 0.2376 59 chr10 757200 757500 0.0324 40 chr10 777600 777900 0.1577 41 chr10 783900 784200 0.0562 48 chr10 952500 953400 0.0013 77 chr10 1046700 1047600 0 22 chr10 1235400 1240200 0.0942 172 chr10 1260900 1261200 0.2213 79 chr10 1340400 1340700 0.4262 42 chr10 1460100 1460400 0.2983 44 chr10 1592400 1593300 0.2122 120 chr10 1699200 1701000 0.3754 33 chr10 1770000 1770300 0.1316 78 chr10 2232000 2232300 0.4724 56 chr10 2392200 2392500 0.4444 107 chr10 2522700 2523000 0.286 31 chr10 2806200 2806500 0.2031 73 chr10 3085200 3085500 0.4878 11 chr10 3106200 3106500 0.4702 78 chr10 3221700 3222000 0.2522 69 chr10 3252300 3252600 0.4406 29 chr10 3315000 3315300 0.3292 112 chr10 4592700 4593000 0.2608 28 chr10 4598100 4598400 0.402 68 chr10 4815600 4815900 0.0423 12 chr10 4956300 4956600 0.184 70 chr10 4975800 4976100 0.0906 56 chr10 4980300 4980600 0.2068 65 chr10 4987200 4987500 0.1164 62 chr10 4991700 4992000 0.0362 58 chr10 5245500 5251200 0 90 chr10 6210600 6210900 0.4172 11 chr10 6369600 6375600 0 69 chr10 6450000 6450300 0.1576 71 chr10 6861000 6861300 0.3483 65 chr10 7058700 7060200 0.0358 69 chr10 7061400 7062600 0.0385 84 chr10 7138500 7138800 0.0586 79 chr10 7140300 7141800 0.0586 79 chr10 8984400 8984700 0.0844 105 chr10 9831900 9832200 0.241 64 chr10 10107600 10108500 0.2146 81 chr10 10557000 10557300 0.2837 75 chr10 10652100 10652400 0.2138 66 chr10 10654500 10654800 0.2138 66 chr10 10692600 10693500 0.0684 95 chr10 11731500 11736900 0 107 chr10 11885400 11885700 0.3822 91 chr10 12519600 12520800 0.0017 29 chr10 12694200 12694500 0.4123 20 chr10 12774900 12776100 0 253 chr10 13155300 13155600 0.1149 70 chr10 13217400 13218600 0 62 chr10 14515200 14515500 0.1601 67 chr10 15915900 15921300 0 87 chr10 17628900 17629200 0.4835 72 chr10 17631000 17631300 0.0536 47 chr10 17720400 17720700 0.1718 89 chr10 18031500 18032400 0.0421 76 chr10 19088700 19093800 0 101 chr10 19160400 19161300 0.0143 67 chr10 19238100 19238700 0 52 chr10 19285800 19286100 0.1409 71 chr10 19582500 19583100 0.0125 68 chr10 20538600 20539800 0.1201 69 chr10 20752200 20757000 0 89 chr10 21322800 21323100 0.0582 87 chr10 21430500 21431100 0.0126 73 chr10 22124400 22128000 0.0533 74 chr10 22404000 22405800 0.0084 80 chr10 22408200 22408500 0.0084 80 chr10 23152800 23154600 0.0388 98 chr10 24656400 24657900 0.22 66 chr10 24809100 24809400 0.4005 25 chr10 25250100 25250400 0.19 53 chr10 25516500 25520400 0.0086 81 chr10 26892000 26894100 0.108 98 chr10 27281400 27282000 0.2201 59 chr10 27355200 27355500 0.2879 77 chr10 27823800 27824100 0.2793 75 chr10 27846600 27846900 0.3416 50 chr10 27873300 27873600 0.192 64 chr10 27968700 27969000 0.2287 69 chr10 29423400 29423700 0 28 chr10 29697000 29697600 0.1826 44 chr10 30945600 30946200 0.089 79 chr10 30950700 30951000 0.2437 11 chr10 30952500 30953100 0.0273 86 chr10 31445700 31446000 0.0917 82 chr10 31447200 31448400 0.0917 82 chr10 31470600 31471200 0.212 93 chr10 31968900 31971600 0 184 chr10 32416800 32417100 0.2795 16 chr10 32660700 32661300 0.2938 75 chr10 32775900 32776200 0.3486 51 chr10 32901000 32901300 0.192 49 chr10 33510900 33516300 0 74 chr10 35478000 35478300 0.2008 84 chr10 37066200 37066500 0.1362 70 chr10 37103100 37104300 0.0031 54 chr10 37111800 37113000 0.0005 64 chr10 37163100 37164000 0.0044 62 chr10 37167900 37177800 0 79 chr10 37179600 37182900 0 70 chr10 37184400 37189500 0 78 chr10 37900800 37901100 0.2272 65 chr10 38263500 38265600 0.0095 79 chr10 38272500 38272800 0.3282 53 chr10 38418600 38418900 0.0213 63 chr10 38424600 38424900 0.1032 44 chr10 38464200 38465100 0.0115 61 chr10 38468100 38468400 0.1549 53 chr10 38469900 38470200 0.2354 46 chr10 38476200 38476500 0.1565 72 chr10 38485200 38491800 0.1539 3073 chr10 38493000 38493300 0.3878 314 chr10 38494800 38497800 0.2124 829 chr10 38499000 38501700 0.2124 829 chr10 38503200 38507100 0.2703 357 chr10 38508300 38508600 0.2608 375 chr10 38509800 38511000 0.2608 375 chr10 38512800 38513700 0.2334 291 chr10 38515200 38522400 0.2203 557 chr10 38524200 38526300 0.2237 424 chr10 38573100 38575200 0.1381 2536 chr10 38577600 38582100 0.1536 2263 chr10 38636700 38637000 0.2891 94 chr10 38750400 38750700 0.3225 40 chr10 38783400 38783700 0.307 231 chr10 38785800 38788500 0.2239 322 chr10 38790600 38793000 0.1933 322 chr10 38794500 38795100 0.2562 285 chr10 38800500 38801700 0.3061 342 chr10 38803800 38805300 0.3865 171 chr10 38807400 38809500 0.3817 194 chr10 38814000 38814300 0.3606 228 chr10 38815800 38816100 0.4649 166 chr10 38817900 38818200 0.2173 323 chr10 38822400 38823000 0.3576 184 chr10 38825700 38826600 0.277 242 chr10 38833500 38833800 0.4742 148 chr10 38835000 38835300 0.4749 120 chr10 38836800 38862300 0 206 chr10 38863800 38869200 0 206 chr10 38870700 38871000 0 1407 chr10 38872500 38892300 0 1407 chr10 38893500 38905500 0 1407 chr10 38911500 38913000 0.0971 299 chr10 38918100 38920500 0.2128 2075 chr10 39183300 39183600 0.3024 31 chr10 39466500 39470100 0.0005 60 chr10 39508800 39513900 0 79 chr10 39559800 39560100 0.3686 14 chr10 39568500 39568800 0.2527 36 chr10 39575100 39576300 0.1422 83 chr10 39579600 39579900 0.2989 25 chr10 39582600 39582900 0.4612 14 chr10 39606300 39607500 0 49 chr10 39609600 39609900 0.1253 16 chr10 39619800 39620100 0 58 chr10 39625500 39625800 0 22 chr10 39636000 39636300 0.0225 44 chr10 39687600 39687900 0.1457 19 chr10 39701700 39702000 0 16 chr10 39708300 39708900 0 17 chr10 39711300 39712500 0 127 chr10 39717600 39717900 0 14 chr10 39719100 39720600 0 145 chr10 39721800 39722400 0 16 chr10 39725700 39728400 0 103 chr10 39735000 39735300 0 19 chr10 39738600 39738900 0 24 chr10 39744900 39746400 0 79 chr10 39751800 39752100 0.0262 25 chr10 39753600 39755400 0.1383 31 chr10 39757500 39758400 0.0437 78 chr10 39762600 39763800 0 24 chr10 39770400 39771900 0 60 chr10 39774300 39777900 0 60 chr10 39779700 39780000 0 18 chr10 39786300 39786900 0 52 chr10 39795000 39795300 0 25 chr10 39799500 39800100 0.1899 23 chr10 39802500 39802800 0.1813 11 chr10 39804000 39805200 0 19 chr10 39809700 39810000 0.2306 59 chr10 39812700 39813300 0 44 chr10 39819900 39820200 0 16 chr10 39825900 39826200 0.2293 26 chr10 39828900 39829200 0 11 chr10 39830700 39831000 0.1286 15 chr10 39834300 39836400 0 150 chr10 39837600 39837900 0 34 chr10 39843900 39844200 0 13 chr10 39849900 39851400 0 10 chr10 39855900 39856500 0.0614 87 chr10 39858900 39860400 0 54 chr10 39861900 39863400 0 19 chr10 39869700 39870600 0 37 chr10 39871800 39872100 0 31 chr10 39874200 39874500 0 40 chr10 39876300 39876900 0 40 chr10 39882600 39882900 0 12 chr10 39884400 39884700 0 17 chr10 39892500 39894000 0.1654 27 chr10 39897300 39898200 0 53 chr10 39900600 39900900 0 25 chr10 39904200 39906300 0 70 chr10 39911100 39911400 0.3556 13 chr10 39912600 39912900 0 28 chr10 39915300 39916500 0.0485 69 chr10 39918000 39918900 0 15 chr10 39921000 39921300 0 27 chr10 39924300 39924600 0 16 chr10 39927000 39927300 0 26 chr10 39928500 39930300 0 36 chr10 39933900 39934200 0 17 chr10 39936000 39941400 0 840 chr10 39946200 39946500 0 14 chr10 39953100 39956400 0 263 chr10 39958800 39959100 0.3216 34 chr10 39961200 39970200 0 3165 chr10 39980100 39981600 0 53 chr10 39983100 39987900 0 1012 chr10 39989400 39994500 0 465 chr10 39996900 40002300 0 465 chr10 40004400 40005900 0 294 chr10 40019400 40021200 0 1990 chr10 40024500 40025100 0.0024 289 chr10 40029300 40029900 0 57 chr10 40046700 40048200 0 280 chr10 40059600 40061100 0 74 chr10 40065300 40074000 0 887 chr10 40076100 40087800 0 773 chr10 40090500 40090800 0 27 chr10 40097100 40102200 0 1747 chr10 40104600 40105800 0.0047 137 chr10 40107300 40107900 0.2694 146 chr10 40117800 40118100 0 36 chr10 40127400 40129800 0 2060 chr10 40134600 40139400 0 1903 chr10 40141500 40142400 0 203 chr10 40145100 40145700 0 46 chr10 40147500 40150200 0 267 chr10 40157400 40159200 0.0003 846 chr10 40162800 40163100 0 11 chr10 40167000 40167600 0 82 chr10 40169700 40170000 0 19 chr10 40183500 40188000 0 311 chr10 40191900 40193400 0 248 chr10 40200600 40209000 0 2419 chr10 40213200 40213800 0.0559 46 chr10 40216200 40224300 0 377 chr10 40227600 40228800 0 254 chr10 40232400 40232700 0.0308 32 chr10 40241700 40242000 0.0163 56 chr10 40246200 40248900 0 329 chr10 40257900 40258200 0.4353 15 chr10 40262400 40263600 0 516 chr10 40265700 40269000 0 1958 chr10 40270800 40271100 0 12 chr10 40276800 40280700 0 1970 chr10 40283100 40291500 0 683 chr10 40294500 40294800 0.0148 32 chr10 40301100 40302900 0 73 chr10 40314600 40316100 0 479 chr10 40318500 40319100 0 55 chr10 40325400 40326900 0.0012 142 chr10 40332600 40338600 0 445 chr10 40344600 40347300 0 564 chr10 40364400 40369200 0 1934 chr10 40370700 40379400 0 552 chr10 40387500 40401000 0 991 chr10 40407900 40410000 0.0092 738 chr10 40411200 40416300 0 2950 chr10 40420800 40422600 0.0088 247 chr10 40425600 40428900 0 186 chr10 40435500 40437600 0 373 chr10 40440900 40442700 0 686 chr10 40445700 40446000 0.0311 58 chr10 40447200 40448400 0 79 chr10 40453200 40456500 0 404 chr10 40461000 40463400 0 904 chr10 40465200 40467900 0 907 chr10 40476000 40480800 0 965 chr10 40482900 40487400 0 965 chr10 40488600 40491600 0 201 chr10 40492800 40494600 0 249 chr10 40495800 40498200 0 255 chr10 40502400 40518900 0 615 chr10 40524600 40525500 0 239 chr10 40532100 40532700 0.001 110 chr10 40537500 40548600 0 634 chr10 40550700 40551000 0 634 chr10 40555200 40558500 0 3094 chr10 40567500 40568100 0.0021 321 chr10 40574700 40576500 0 226 chr10 40578300 40580700 0 169 chr10 40582200 40582800 0 120 chr10 40584000 40584300 0.1375 50 chr10 40586400 40613100 0 3793 chr10 40614600 40620600 0 1089 chr10 40626900 40627200 0.0556 155 chr10 40633200 40634100 0 477 chr10 40639800 40641000 0 191 chr10 40642800 40651200 0 674 chr10 40652400 40653300 0 143 chr10 40657500 40671600 0 400 chr10 40673100 40674000 0.0118 431 chr10 40676100 40683900 0 759 chr10 40685400 40686300 0 188 chr10 40687800 40689300 0 222 chr10 40691100 40691700 0 82 chr10 40700700 40701300 0.35 134 chr10 40704600 40705500 0.0041 275 chr10 40709700 40710000 0.0914 28 chr10 40711500 40717800 0 422 chr10 40720500 40721400 0 215 chr10 40722900 40723500 0 20 chr10 40726500 40730100 0 738 chr10 40733400 40737300 0 633 chr10 40739100 40740900 0 158 chr10 40743300 40743600 0 26 chr10 40744800 40745700 0 157 chr10 40748700 40749300 0 178 chr10 40751100 40753500 0 412 chr10 40755900 40758300 0 340 chr10 40759800 40766400 0 483 chr10 40767900 40772100 0 599 chr10 40773300 40775700 0 229 chr10 40781400 40785300 0 262 chr10 40786500 40787400 0.0001 181 chr10 40790400 40791000 0 666 chr10 40792200 40794000 0 666 chr10 40795500 40808700 0 513 chr10 40810800 40812000 0 646 chr10 40814400 40818900 0 373 chr10 40821600 40823400 0 400 chr10 40827300 40828800 0 1015 chr10 40830000 40839900 0 1015 chr10 40841400 40855500 0 1015 chr10 40857000 40857300 0.4777 41 chr10 40862100 40864500 0 231 chr10 40866300 40867500 0 102 chr10 40869900 40871400 0 504 chr10 40873200 40873500 0 34 chr10 40874700 40876200 0 213 chr10 40878000 40881000 0 525 chr10 40882500 40884000 0 273 chr10 40886100 40886400 0 10 chr10 40888500 40890600 0.008 184 chr10 40891800 40898700 0 1649 chr10 40900200 40901100 0 359 chr10 40903200 40907100 0 359 chr10 40908300 40908900 0.1968 182 chr10 40911600 40912800 0 261 chr10 40917900 40920900 0 308 chr10 40923900 40927200 0 1318 chr10 40928700 40929000 0 1318 chr10 40931400 40943400 0 803 chr10 40944900 40949400 0 241 chr10 40954200 40958400 0 548 chr10 40960800 40969200 0 548 chr10 40970400 40972200 0 624 chr10 40973400 40984500 0 2674 chr10 40986000 40989600 0 571 chr10 40990800 40992900 0 782 chr10 40994100 40994700 0 135 chr10 40998600 41001900 0 473 chr10 41003100 41003400 0 473 chr10 41004600 41009700 0 259 chr10 41010900 41014200 0 379 chr10 41015400 41018400 0 357 chr10 41019900 41022000 0 357 chr10 41025300 41030400 0 260 chr10 41031600 41033400 0 260 chr10 41034900 41036400 0 822 chr10 41037600 41039400 0.0009 606 chr10 41042100 41048700 0 356 chr10 41049900 41055600 0 356 chr10 41056800 41057400 0 105 chr10 41060100 41063100 0 160 chr10 41066400 41079300 0 541 chr10 41080800 41081100 0.127 80 chr10 41082300 41084700 0 465 chr10 41086500 41090700 0 1383 chr10 41096400 41096700 0 130 chr10 41098500 41099400 0 130 chr10 41100600 41101800 0 143 chr10 41104500 41106000 0.0015 530 chr10 41107500 41107800 0 23 chr10 41109300 41112900 0 337 chr10 41114700 41115000 0 36 chr10 41117400 41119500 0 474 chr10 41120700 41121600 0 474 chr10 41124300 41125800 0 765 chr10 41128200 41134200 0 2057 chr10 41135400 41138100 0 410 chr10 41139900 41140500 0 410 chr10 41143800 41145600 0 506 chr10 41148900 41152800 0 248 chr10 41154000 41158800 0 435 chr10 41160600 41160900 0 29 chr10 41162400 41164800 0 286 chr10 41166600 41166900 0 180 chr10 41169600 41183400 0 517 chr10 41185500 41189100 0 882 chr10 41190600 41207700 0 882 chr10 41209200 41212500 0 268 chr10 41214900 41220000 0 188 chr10 41221800 41224200 0 114 chr10 41225400 41226900 0 66 chr10 41228700 41229300 0.0051 68 chr10 41231400 41232600 0 468 chr10 41235000 41237700 0 437 chr10 41239200 41240700 0 114 chr10 41243400 41251200 0 437 chr10 41255400 41258700 0 111 chr10 41260800 41268900 0 1993 chr10 41270100 41273400 0 194 chr10 41274900 41293500 0 629 chr10 41295600 41296500 0 500 chr10 41299500 41301300 0 213 chr10 41302800 41306100 0 456 chr10 41307600 41312700 0 456 chr10 41313900 41314500 0 276 chr10 41315700 41316600 0 53 chr10 41319900 41323200 0 491 chr10 41326200 41327700 0 265 chr10 41328900 41336400 0 327 chr10 41338500 41342700 0 197 chr10 41344500 41356200 0 189 chr10 41358900 41361000 0 117 chr10 41364300 41368500 0 204 chr10 41370300 41374500 0 341 chr10 41376000 41378700 0 499 chr10 41379900 41384700 0 499 chr10 41387400 41391000 0 207 chr10 41395200 41395800 0 85 chr10 41397000 41397900 0 85 chr10 41399400 41407200 0 2845 chr10 41408400 41419800 0 2845 chr10 41422500 41422800 0 539 chr10 41424000 41430900 0 539 chr10 41432700 41433000 0 539 chr10 41436300 41441400 0 990 chr10 41442600 41448300 0 990 chr10 41449500 41450400 0 73 chr10 41454600 41456700 0 310 chr10 41460300 41461800 0 275 chr10 41466300 41466900 0 89 chr10 41468700 41469000 0 89 chr10 41470800 41474400 0 285 chr10 41475600 41478300 0 285 chr10 41481900 41484000 0 495 chr10 41488800 41490000 0 78 chr10 41493900 41508300 0 567 chr10 41509500 41518800 0 567 chr10 41520000 41524500 0 567 chr10 41525700 41529000 0 579 chr10 41530200 41543700 0 579 chr10 41544900 41546100 0 98 chr10 41547600 41553900 0.0249 142 chr10 41556600 41559900 0.1901 194 chr10 41562300 41567400 0.0067 741 chr10 41569500 41571900 0.3029 288 chr10 41573100 41573700 0.125 91 chr10 41574900 41578800 0.0643 324 chr10 41581500 41581800 0.3278 210 chr10 41583600 41586900 0.1571 238 chr10 41588100 41590800 0.1606 245 chr10 41592000 41592600 0.1606 245 chr10 41693700 41706300 0 126 chr10 41713500 41713800 0.216 97 chr10 41845500 41845800 0.3464 689 chr10 41848500 41848800 0.3464 689 chr10 41851500 41852100 0.4146 1221 chr10 41854500 41854800 0.1896 411 chr10 41856900 41916300 0.0388 17851 chr10 42066000 42068100 0.0398 1784 chr10 42069300 42069900 0.0398 1784 chr10 42071100 42078300 0.0028 3747 chr10 42080100 42083100 0.0028 3747 chr10 42085200 42086400 0.0028 3747 chr10 42090600 42090900 0.3539 747 chr10 42092400 42092700 0.4193 197 chr10 42093900 42094500 0.3442 461 chr10 42099600 42099900 0.3268 718 chr10 42101400 42101700 0.4763 489 chr10 42129900 42130200 0.1748 167 chr10 42165900 42166200 0.4602 313 chr10 42212400 42212700 0.0506 54 chr10 42295200 42297600 0.3218 208 chr10 42299100 42299700 0.1305 710 chr10 42301500 42302700 0.2785 329 chr10 42303900 42307800 0.0708 1830 chr10 42309000 42316200 0.2574 332 chr10 42318000 42321000 0.2499 378 chr10 42436500 42437100 0.2156 71 chr10 42448200 42448800 0.4002 79 chr10 42530700 42531000 0.22 49 chr10 42669900 42670200 0.1866 68 chr10 42995100 42995400 0.0872 60 chr10 43422600 43423200 0.0068 44 chr10 44140800 44141100 0.4141 48 chr10 44148000 44148300 0.2003 56 chr10 44222400 44223300 0 58 chr10 44483100 44486700 0.215 59 chr10 44662800 44663100 0.4803 25 chr10 45009900 45011100 0.0283 76 chr10 45680100 45680400 0.0685 53 chr10 45683100 45683400 0.0787 70 chr10 45685200 45687900 0.0787 70 chr10 45689400 45690900 0.0174 82 chr10 45692700 45693300 0.0174 82 chr10 45694800 45696000 0.0174 82 chr10 45698100 45699000 0.0073 65 chr10 45702600 45703800 0.1367 70 chr10 45711600 45711900 0.1417 40 chr10 45731100 45731400 0.3601 62 chr10 45737100 45737400 0.0786 69 chr10 45739800 45740400 0.2701 69 chr10 45744300 45746400 0.2021 72 chr10 45747900 45748200 0.1064 58 chr10 45752700 45753600 0.1883 64 chr10 45756000 45757500 0.1755 65 chr10 45759000 45760800 0.0297 59 chr10 45765000 45768000 0.0579 61 chr10 45773100 45779100 0 74 chr10 45781800 45782100 0 74 chr10 45823200 45823500 0.1929 62 chr10 45827400 45830100 0.0441 85 chr10 45831600 45834000 0.0441 85 chr10 45835200 45837000 0.0303 89 chr10 45838800 45839100 0.0303 89 chr10 45840600 45841200 0.0303 89 chr10 45842700 45843000 0.0303 89 chr10 45845700 45846000 0.1667 77 chr10 45848100 45848400 0.1679 64 chr10 45861300 45861600 0.2767 68 chr10 45873900 45874200 0.1613 52 chr10 45885900 45886500 0.0823 67 chr10 45888600 45889500 0.2514 61 chr10 45891900 45892200 0.2427 39 chr10 45894300 45895800 0.1445 57 chr10 45901500 45904200 0 77 chr10 45905700 45906600 0 77 chr10 45908400 45908700 0.0764 72 chr10 45915600 45915900 0.3005 57 chr10 45960000 45960300 0.0874 25 chr10 45961500 45961800 0.0997 55 chr10 45977100 45977400 0.4301 54 chr10 45995400 45995700 0.1535 49 chr10 46108500 46110300 0.0624 71 chr10 46111800 46112100 0.0624 71 chr10 46114500 46115100 0.0286 72 chr10 46116300 46116600 0.1355 82 chr10 46117800 46118100 0.1355 82 chr10 46121400 46124700 0 79 chr10 46127700 46131300 0.0475 70 chr10 46133400 46133700 0.0398 76 chr10 46135200 46137300 0.0398 76 chr10 46138800 46145700 0 103 chr10 46146900 46150200 0.0516 56 chr10 46151700 46153500 0.0024 64 chr10 46156200 46156500 0.0528 69 chr10 46158600 46159500 0.0528 69 chr10 46161600 46161900 0.1421 56 chr10 46163400 46163700 0.1421 56 chr10 46205700 46215300 0 78 chr10 46312500 46312800 0.2226 68 chr10 46332900 46334100 0.0563 66 chr10 46344000 46345800 0.1533 66 chr10 46348800 46352400 0 98 chr10 46354800 46355100 0 98 chr10 46361700 46362300 0.0265 66 chr10 46366500 46366800 0.271 61 chr10 46368600 46371300 0.0126 81 chr10 46376100 46389300 0 100 chr10 46391100 46392900 0.1385 66 chr10 46398900 46399200 0.0137 68 chr10 46400400 46401000 0.0137 68 chr10 46402800 46403400 0.0969 51 chr10 46405800 46406400 0.0236 48 chr10 46411800 46413000 0.0321 68 chr10 46416000 46417200 0.0398 60 chr10 46418700 46424100 0 100 chr10 46428000 46428900 0.127 53 chr10 46434300 46434600 0.2225 38 chr10 46436100 46438800 0.0192 53 chr10 46444500 46446600 0.0089 64 chr10 46447800 46450800 0 77 chr10 46452600 46458000 0 75 chr10 46459500 46482600 0 84 chr10 46484400 46489200 0 71 chr10 46490700 46514100 0 84 chr10 46561500 46563600 0.0403 75 chr10 46566000 46568700 0.0403 75 chr10 46569900 46572300 0.0045 70 chr10 46574400 46575600 0.0102 78 chr10 46576800 46577700 0.0102 78 chr10 46579200 46583700 0 73 chr10 46584900 46596000 0 73 chr10 46598100 46619700 0 75 chr10 46620900 46633500 0 75 chr10 46635000 46636500 0.019 59 chr10 46637700 46638000 0.019 59 chr10 46643100 46644600 0.02 68 chr10 46649100 46651200 0.0014 56 chr10 46652400 46653000 0.2467 63 chr10 46655700 46656000 0.192 53 chr10 46659600 46661100 0 70 chr10 46662600 46664700 0 70 chr10 46666800 46667100 0.2339 59 chr10 46675500 46675800 0.1634 42 chr10 46677300 46680300 0.0599 66 chr10 46683600 46683900 0.1982 74 chr10 46685100 46686000 0 62 chr10 46691400 46692000 0 49 chr10 46693800 46694100 0 49 chr10 46696200 46707600 0 68 chr10 46710300 46712100 0 58 chr10 46714800 46716000 0.1993 54 chr10 46722900 46723200 0.2929 87 chr10 46726800 46727100 0.2153 62 chr10 46728900 46733700 0.0038 65 chr10 46734900 46739400 0 66 chr10 46741800 46742700 0.0525 55 chr10 46743900 46744200 0.3426 60 chr10 46747200 46748700 0.0795 77 chr10 46754400 46757700 0 74 chr10 46760100 46760400 0.0623 82 chr10 46761600 46761900 0.0623 82 chr10 46764300 46764600 0.0332 79 chr10 46766700 46767000 0.1345 70 chr10 46772100 46772400 0.2467 84 chr10 46776000 46777500 0.1498 72 chr10 46792500 46792800 0.1416 58 chr10 46800600 46800900 0.1804 68 chr10 46812300 46813500 0.2502 81 chr10 46818600 46818900 0.267 76 chr10 46821300 46824300 0.0053 70 chr10 46827900 46828800 0.0012 76 chr10 46830600 46830900 0.1294 45 chr10 46832100 46833000 0.0579 62 chr10 46834500 46836000 0.1656 105 chr10 46837500 46837800 0.1656 105 chr10 46839900 46842300 0.0393 85 chr10 46843500 46843800 0.1331 64 chr10 46845600 46850100 0.0007 88 chr10 46851300 46852200 0 76 chr10 46853400 46859700 0.0013 82 chr10 46863900 46866300 0.0408 70 chr10 46867500 46868100 0.0408 70 chr10 46869300 46869600 0.3149 61 chr10 46872600 46872900 0.2446 67 chr10 46879500 46879800 0.1798 72 chr10 46881600 46887000 0.0026 72 chr10 46889400 46889700 0.2397 63 chr10 46895400 46895700 0.1415 65 chr10 46899600 46900500 0 51 chr10 46901700 46905600 0 83 chr10 46907400 46922700 0 83 chr10 46924200 46924800 0.0282 68 chr10 46926900 46927200 0.0428 69 chr10 46928700 46929300 0.0428 69 chr10 46930800 46931400 0.0428 69 chr10 46932900 46935600 0.0478 70 chr10 46938300 46938900 0 68 chr10 46940100 46944600 0 68 chr10 46945800 46946400 0.0177 60 chr10 46949700 46950000 0.0119 85 chr10 46951800 46952100 0.0652 58 chr10 46955700 46966800 0 82 chr10 46968000 46978500 0 82 chr10 46980000 46982100 0 82 chr10 46984500 46987800 0 73 chr10 46989000 46991700 0 65 chr10 47407800 47408100 0.4509 69 chr10 47461800 47463000 0.0635 75 chr10 47466900 47467200 0.1602 75 chr10 47468400 47468700 0.1602 75 chr10 47470500 47483100 0 116 chr10 47487300 47491500 0 80 chr10 47493900 47494800 0.053 79 chr10 47498700 47500800 0.152 99 chr10 47505000 47505900 0 77 chr10 47507700 47509800 0 77 chr10 47511600 47512800 0 77 chr10 47514300 47521200 0 77 chr10 47522700 47523000 0 80 chr10 47524200 47525100 0 80 chr10 47526900 47527500 0.0407 66 chr10 47528700 47547900 0 76 chr10 47550300 47550600 0.2214 71 chr10 47562300 47564400 0.079 67 chr10 47567100 47570100 0.0268 54 chr10 47573400 47576400 0 65 chr10 47577600 47579700 0.004 59 chr10 47582700 47586000 0 69 chr10 47591700 47592000 0.1187 66 chr10 47596200 47596500 0.2591 47 chr10 47597700 47598600 0.0711 49 chr10 47601000 47605500 0 65 chr10 47607000 47611500 0 67 chr10 47613300 47615100 0 64 chr10 47616300 47621400 0 64 chr10 47623500 47625600 0 47 chr10 47628900 47630100 0 56 chr10 47632800 47636100 0 74 chr10 47637600 47644200 0 74 chr10 47646300 47646600 0.0095 68 chr10 47648700 47649300 0.0095 68 chr10 47654400 47655300 0.0026 65 chr10 47656500 47656800 0.1503 61 chr10 47661000 47663100 0.0922 55 chr10 47664600 47664900 0.3715 63 chr10 47675100 47675400 0.3296 48 chr10 47677500 47679300 0 69 chr10 47680800 47682000 0.215 60 chr10 47688900 47689200 0.3721 57 chr10 47690400 47690700 0 70 chr10 47691900 47692500 0 70 chr10 47697600 47698500 0.0789 64 chr10 47706300 47706600 0.0532 68 chr10 47708100 47709900 0 69 chr10 47711700 47715300 0 69 chr10 47716500 47719800 0 69 chr10 47722200 47723400 0.0069 69 chr10 47724900 47726400 0.0069 69 chr10 47727600 47732400 0 96 chr10 47736000 47736600 0.0385 65 chr10 47739300 47742300 0.0227 57 chr10 47745900 47747700 0.0544 81 chr10 47748900 47749200 0.0238 61 chr10 47750400 47754900 0 70 chr10 47756100 47762700 0 82 chr10 47764500 47764800 0.0011 77 chr10 47766000 47767200 0.0011 77 chr10 47770200 47771400 0.0011 77 chr10 47772900 47775900 0.0015 87 chr10 47779200 47780400 0 72 chr10 47870400 47894100 0 81 chr10 47895300 47895600 0 91 chr10 47897100 47929500 0 91 chr10 47930700 47936700 0 91 chr10 47937900 47938500 0.0375 54 chr10 47939700 47940000 0.2261 72 chr10 47945700 47946000 0.0863 64 chr10 47947200 47948700 0.1963 68 chr10 47955900 47956500 0.1099 52 chr10 47961300 47966100 0 89 chr10 47967300 47967900 0.0629 65 chr10 47971500 47973000 0.0257 81 chr10 47976900 47977200 0.074 64 chr10 47978400 47979000 0.0155 58 chr10 47981400 47981700 0.0235 48 chr10 47983500 47985000 0 58 chr10 47987100 47991300 0 80 chr10 47993100 47993400 0.4311 46 chr10 47996100 47996700 0.1188 59 chr10 47999100 48000600 0.0029 68 chr10 48002100 48002400 0.1506 63 chr10 48006300 48007200 0 89 chr10 48008700 48009300 0 89 chr10 48011700 48017700 0 89 chr10 48019500 48021300 0 89 chr10 48022500 48029100 0 89 chr10 48030600 48033300 0 89 chr10 48034800 48037800 0 89 chr10 48039000 48056400 0 77 chr10 48058200 48059100 0 77 chr10 48060300 48067500 0 77 chr10 48069000 48072000 0 78 chr10 48073500 48083700 0 81 chr10 48084900 48097500 0 81 chr10 48098700 48100200 0 81 chr10 48101700 48103500 0 81 chr10 48105300 48113700 0 60 chr10 48114900 48119100 0 60 chr10 48120600 48120900 0.0044 59 chr10 48122400 48124800 0.0044 59 chr10 48127200 48127800 0.0689 57 chr10 48129300 48144600 0 83 chr10 48146400 48146700 0.2095 70 chr10 48147900 48150000 0.0049 84 chr10 48151500 48152100 0.0058 43 chr10 48155100 48157800 0.1764 58 chr10 48162300 48162600 0.4661 68 chr10 48164700 48170100 0.0128 81 chr10 48171900 48172200 0.0128 81 chr10 48179100 48179400 0.191 65 chr10 49127100 49127400 0.3559 79 chr10 49848300 49848600 0.3582 45 chr10 49850100 49850400 0.1977 56 chr10 49855200 49855500 0.0404 61 chr10 49857900 49858800 0.0456 57 chr10 49861200 49861500 0.2384 67 chr10 49863300 49864800 0.0504 59 chr10 49870800 49873500 0 70 chr10 49875000 49875900 0.0026 71 chr10 49877400 49877700 0.2958 56 chr10 49882800 49883100 0.2658 58 chr10 49884600 49884900 0.2658 58 chr10 49923900 49924200 0.2443 56 chr10 49930800 49931100 0.0828 57 chr10 49961700 49962000 0.2777 76 chr10 49974000 49974900 0.2269 60 chr10 49998000 50003400 0 101 chr10 50004600 50004900 0.2826 51 chr10 50007300 50007600 0.2184 34 chr10 50013600 50013900 0.2203 67 chr10 50070600 50071200 0.2618 51 chr10 50073600 50074200 0.131 35 chr10 50077800 50078100 0.0619 60 chr10 50080500 50081100 0.1558 50 chr10 50085000 50087100 0.1311 65 chr10 50088600 50088900 0.1841 48 chr10 50093400 50093700 0.1842 84 chr10 50096100 50097000 0.0409 73 chr10 50106900 50108700 0 77 chr10 50113800 50115300 0.0106 70 chr10 50117100 50119200 0 70 chr10 50120700 50121000 0 70 chr10 50122200 50122800 0.0541 57 chr10 50127600 50127900 0.3333 55 chr10 50144400 50144700 0.1163 52 chr10 50149800 50150100 0.3459 12 chr10 50153400 50153700 0.2923 31 chr10 50160900 50161200 0.1113 46 chr10 50164200 50164800 0.0345 55 chr10 50166600 50166900 0.2075 65 chr10 50172300 50172900 0.0083 49 chr10 50174100 50174400 0.2915 15 chr10 50181900 50184000 0.0045 54 chr10 50186100 50193000 0 77 chr10 50707200 50710200 0.0217 73 chr10 50745000 50745600 0.0951 58 chr10 50749200 50755500 0 72 chr10 50758200 50758500 0.0236 61 chr10 50759700 50760000 0.0236 61 chr10 50773500 50773800 0.1026 45 chr10 50779200 50779500 0.2049 77 chr10 51512400 51514200 0.1026 74 chr10 52181700 52182600 0.0267 64 chr10 52234800 52239300 0.0148 74 chr10 53495700 53497500 0.1425 93 chr10 53761800 53762400 0.2137 31 chr10 54027000 54027300 0.2289 83 chr10 54622500 54622800 0.2745 39 chr10 54735600 54735900 0.074 26 chr10 54757200 54757500 0.285 49 chr10 54825300 54825600 0.1868 87 chr10 55069500 55069800 0.1996 89 chr10 55542600 55543200 0.2313 45 chr10 55604100 55604400 0.3901 82 chr10 55605600 55606200 0.1627 84 chr10 55607400 55607700 0.1627 84 chr10 55683600 55683900 0.1379 65 chr10 55686000 55688100 0.1379 65 chr10 55942200 55942500 0.3104 41 chr10 56188200 56188500 0.334 92 chr10 56191200 56191500 0.3125 66 chr10 56709600 56709900 0.1662 63 chr10 58319400 58319700 0.3025 439 chr10 58654200 58655700 0.0362 58 chr10 59783700 59784000 0.3956 46 chr10 59882100 59882400 0.364 25 chr10 60180300 60180600 0.0413 1226 chr10 60640500 60640800 0.4014 87 chr10 60694800 60695100 0.3345 63 chr10 61056900 61057200 0.1837 108 chr10 61680300 61680600 0.1067 12 chr10 62604000 62604300 0.1556 59 chr10 62606100 62607600 0.2134 76 chr10 62677500 62677800 0.1159 41 chr10 64123500 64123800 0.2689 75 chr10 64371900 64372200 0.2402 65 chr10 64836300 64836600 0.186 61 chr10 64925400 64926600 0.1022 70 chr10 64929000 64929300 0.0592 79 chr10 65391900 65392200 0.3999 36 chr10 65524200 65524500 0.4668 21 chr10 67233300 67233900 0.1944 97 chr10 67388100 67388700 0.1988 77 chr10 67390500 67390800 0.2071 95 chr10 67561200 67561500 0.2682 53 chr10 67565400 67565700 0.2993 46 chr10 67582200 67582500 0.2308 89 chr10 67692300 67692600 0.0638 69 chr10 69992400 69993900 0.0011 114 chr10 70686300 70688700 0.0127 103 chr10 73326300 73326600 0.3161 74 chr10 73674000 73674300 0.2573 53 chr10 73680000 73681200 0 78 chr10 73683000 73685400 0 78 chr10 75480000 75480300 0.2357 52 chr10 76221000 76221300 0.4034 51 chr10 76587000 76591800 0 91 chr10 76819200 76819500 0.2842 44 chr10 76832700 76833000 0.2872 35 chr10 77041200 77041500 0.1875 23 chr10 77568900 77569500 0.2109 81 chr10 78089100 78094200 0 85 chr10 79332600 79332900 0.0906 81 chr10 79338300 79338600 0.1724 77 chr10 79504200 79504800 0.2228 69 chr10 79508400 79509900 0.2018 62 chr10 79519500 79520100 0.0108 63 chr10 79524000 79524300 0.2115 50 chr10 79536300 79536600 0.2277 70 chr10 79673100 79673400 0.3082 54 chr10 79676700 79677000 0.0711 43 chr10 79696800 79697400 0.2473 68 chr10 79701600 79703700 0 93 chr10 79706400 79706700 0 93 chr10 79707900 79708500 0.0262 97 chr10 79709700 79710300 0.0813 103 chr10 79713000 79714800 0 100 chr10 79716900 79718100 0.0751 69 chr10 79741800 79742100 0.0661 63 chr10 79743300 79743600 0.1402 47 chr10 79770300 79771800 0.0149 77 chr10 79774800 79775100 0.0376 73 chr10 79777800 79778100 0.1135 54 chr10 79780200 79782600 0.09 66 chr10 79794600 79794900 0.1117 54 chr10 79797600 79797900 0.1138 42 chr10 79801200 79801500 0.2008 34 chr10 79812000 79812300 0.1822 50 chr10 79814100 79814400 0.0701 61 chr10 79821000 79821300 0.1626 57 chr10 79835400 79835700 0.2406 63 chr10 79841100 79852800 0 102 chr10 79874700 79875000 0.2311 64 chr10 79965600 79967400 0.0689 105 chr10 80022300 80022600 0.1799 64 chr10 80025600 80025900 0.3292 54 chr10 80038200 80038500 0.3008 79 chr10 80240400 80241000 0.014 74 chr10 80250600 80250900 0.3234 53 chr10 80254800 80255400 0.1454 69 chr10 80535000 80535300 0.2689 99 chr10 80722800 80724300 0.0092 69 chr10 80725800 80726100 0.2684 73 chr10 81711300 81714900 0.0058 78 chr10 81770700 81771000 0.1929 68 chr10 82045200 82045500 0.0438 16 chr10 82046700 82047000 0.3917 37 chr10 82478400 82478700 0.3301 61 chr10 83781600 83782200 0.0662 73 chr10 83784900 83785200 0.0662 73 chr10 84071100 84071400 0.0542 69 chr10 84282000 84282600 0.0289 82 chr10 84283800 84285000 0.0289 82 chr10 84759600 84760800 0.1431 69 chr10 84773400 84775200 0.0719 88 chr10 84858300 84859200 0.1554 84 chr10 85207200 85207500 0.3667 50 chr10 85355700 85361400 0 83 chr10 85744500 85745400 0.0079 77 chr10 86075100 86075400 0.1788 77 chr10 86076900 86077200 0.1966 64 chr10 87198300 87198600 0.2043 41 chr10 87219000 87221100 0.2363 70 chr10 87224100 87234300 0 77 chr10 87235500 87236700 0 77 chr10 87239100 87240300 0.0634 58 chr10 87246900 87247200 0 52 chr10 87249300 87250500 0 52 chr10 87252600 87252900 0.2953 57 chr10 87254100 87256800 0.0095 69 chr10 87262800 87263100 0 66 chr10 87264300 87267000 0 66 chr10 87270000 87276600 0 94 chr10 87277800 87290700 0 94 chr10 87291900 87303900 0 94 chr10 87305100 87307500 0 94 chr10 87316800 87317100 0.0401 62 chr10 87326400 87326700 0.1801 46 chr10 87351900 87352200 0.1229 67 chr10 87356100 87356400 0.4406 24 chr10 87357600 87360600 0 83 chr10 87362100 87365700 0 87 chr10 87366900 87369300 0 87 chr10 87390900 87391200 0.3894 64 chr10 87406200 87406500 0.3241 50 chr10 87430500 87436800 0 73 chr10 87438600 87439800 0 84 chr10 87441300 87445800 0 84 chr10 87447000 87465600 0 84 chr10 87467100 87467700 0.0074 75 chr10 87471000 87471300 0 74 chr10 87472500 87475500 0 74 chr10 87481200 87483600 0.0033 75 chr10 87488400 87489300 0.2809 85 chr10 88977600 88978200 0.0107 87 chr10 90155700 90156000 0.2163 65 chr10 91440600 91443300 0 71 chr10 91446300 91449000 0 69 chr10 91507800 91508400 0.2675 82 chr10 91752300 91752600 0.0854 70 chr10 92140500 92141100 0.0016 73 chr10 92375100 92377800 0 108 chr10 92673900 92676000 0.0133 64 chr10 93931500 93931800 0.1379 68 chr10 94816800 94817100 0.1191 80 chr10 94819200 94820100 0.1191 80 chr10 94825500 94825800 0.1081 81 chr10 95151600 95151900 0.2061 66 chr10 95948400 95949600 0 71 chr10 96940500 96942300 0.0897 112 chr10 97275000 97277700 0 67 chr10 97348500 97348800 0.3056 44 chr10 97432800 97433100 0.2011 68 chr10 98697900 98698200 0.1378 98 chr10 98700600 98701200 0.0443 48 chr10 98781900 98788200 0 85 chr10 98961000 98962200 0.0242 61 chr10 98988600 98988900 0.0926 70 chr10 99154200 99158400 0.0367 78 chr10 99771600 99773400 0 84 chr10 99823800 99824100 0.1567 95 chr10 99837300 99840600 0.0049 80 chr10 100092300 100094400 0.0109 57 chr10 100422600 100422900 0.0078 59 chr10 100425900 100426500 0.1282 59 chr10 100703100 100703400 0.1304 102 chr10 103128300 103128900 0.0436 64 chr10 103251000 103251300 0.4739 149 chr10 104528700 104529600 0.2325 88 chr10 104785200 104785500 0.1876 43 chr10 104859900 104860200 0.015 35 chr10 105311700 105312000 0.2927 75 chr10 105377400 105383100 0 76 chr10 105740400 105740700 0.2685 54 chr10 105775800 105781200 0 76 chr10 106845300 106848900 0.0057 74 chr10 107465100 107467200 0.0714 56 chr10 108114600 108119700 0.0128 89 chr10 108310200 108315000 0 73 chr10 108572700 108573000 0.0237 89 chr10 109086600 109086900 0.1666 52 chr10 109241700 109242900 0.0663 75 chr10 109812300 109818300 0 435 chr10 109827300 109827600 0.2037 68 chr10 109829100 109830900 0.0733 80 chr10 110766600 110766900 0.2407 76 chr10 111431700 111432000 0.3058 19 chr10 111584700 111589800 0 68 chr10 111792600 111792900 0.1615 71 chr10 111797400 111797700 0.0628 91 chr10 111814800 111815400 0.0526 96 chr10 111817800 111818100 0.2522 86 chr10 112063500 112063800 0.2657 70 chr10 112066500 112067400 0.0027 120 chr10 112106700 112107000 0.1604 74 chr10 112204800 112206600 0.0037 75 chr10 112398000 112398300 0.2865 16 chr10 112455300 112455600 0.4737 11 chr10 114415200 114415500 0.2739 92 chr10 114935100 114935700 0.1033 99 chr10 114998400 114998700 0.074 20 chr10 115200600 115200900 0.1274 67 chr10 115202700 115203000 0.1519 75 chr10 115246500 115246800 0.3309 21 chr10 115362900 115364400 0.136 97 chr10 115367100 115367400 0.1015 48 chr10 116505900 116506200 0.308 20 chr10 117079200 117081600 0.0051 77 chr10 117833100 117838500 0.0563 100 chr10 117874800 117875100 0.1025 19 chr10 118181400 118181700 0.4515 156 chr10 119722800 119723100 0.3157 78 chr10 120214800 120215100 0.2672 44 chr10 120234900 120235800 0.0507 75 chr10 120237300 120239400 0.0507 75 chr10 120354900 120355200 0.2711 74 chr10 120913800 120915300 0.1701 73 chr10 120920100 120921900 0.0064 76 chr10 121584600 121584900 0.4983 41 chr10 122202300 122202600 0.1614 69 chr10 122581800 122584500 0 78 chr10 122594400 122597100 0 74 chr10 122601000 122616900 0 50 chr10 122681700 122682000 0.1662 61 chr10 122807400 122807700 0.2207 61 chr10 123292500 123293400 0.0889 65 chr10 124507200 124507500 0.4709 32 chr10 125228100 125228400 0.4632 39 chr10 125616300 125616900 0.0698 90 chr10 125948700 125949000 0.281 77 chr10 126056700 126057000 0.1579 53 chr10 126417900 126418200 0.1469 16 chr10 126672600 126672900 0.1737 96 chr10 126678600 126679200 0.0498 101 chr10 126680400 126682200 0.0498 101 chr10 126884400 126884700 0.1854 79 chr10 126885900 126886200 0.1854 79 chr10 126947400 126948600 0.1753 826 chr10 129414600 129414900 0.3696 110 chr10 129735600 129736200 0.0759 79 chr10 130051800 130052100 0.2618 19 chr10 130314300 130314600 0.2845 104 chr10 130316400 130316700 0.049 82 chr10 130518900 130519200 0.3918 52 chr10 130572300 130572900 0.2549 98 chr10 130650900 130651200 0.061 74 chr10 130759500 130760700 0 38 chr10 130785600 130785900 0.3364 38 chr10 131042100 131042400 0.1692 15 chr10 131289600 131289900 0.3103 37 chr10 131376900 131377200 0.0746 54 chr10 131592600 131601600 0 36 chr10 131625900 131626200 0.2329 34 chr10 131704800 131706000 0.0515 61 chr10 131939100 131939400 0.2061 43 chr10 132158700 132159000 0.147 78 chr10 132160200 132160800 0.4293 20 chr10 132505800 132506100 0.4496 13 chr10 132622200 132622800 0 118 chr10 132874500 132874800 0.3474 57 chr10 132914100 132914400 0.128 20 chr10 132999300 132999600 0.3115 92 chr10 133111200 133111800 0.2972 133 chr10 133155600 133156200 0.3411 84 chr10 133403100 133403400 0.2986 49 chr10 133424400 133427700 0 75 chr10 133430400 133430700 0.1626 60 chr10 133433100 133435500 0 72 chr10 133441200 133441500 0.3754 62 chr10 133477800 133480200 0 54 chr10 133503600 133506000 0.0796 64 chr10 133569300 133571100 0 79 chr10 133575000 133579500 0 77 chr10 133623000 133628400 0.0214 89 chr10 133629900 133630800 0.0995 56 chr10 133637400 133638000 0.1837 73 chr10 133640700 133641300 0.0151 46 chr10 133651800 133652400 0.158 88 chr10 133653900 133655400 0.0849 69 chr10 133656600 133656900 0.2031 80 chr10 133664400 133690500 0 15197 chr10 133740600 133764300 0 3268 chr10 133766700 133785300 0 145 chr11 60000 122700 0 117 chr11 124200 146700 0 117 chr11 148200 174600 0 87 chr11 176400 177600 0 66 chr11 178800 185100 0.0118 58 chr11 188700 191700 0 88 chr11 193200 196500 0 88 chr11 310800 311400 0.0133 57 chr11 318300 318900 0.1034 55 chr11 321300 322500 0.269 86 chr11 374700 375000 0.2425 46 chr11 384900 385500 0 86 chr11 390600 390900 0.0787 26 chr11 483000 483300 0.2595 44 chr11 519300 520200 0 174 chr11 530400 531000 0.3767 119 chr11 585300 585900 0.0569 988 chr11 664500 665100 0.0223 94 chr11 735000 736200 0.1133 61 chr11 881400 881700 0.4864 54 chr11 964800 965400 0.0303 307 chr11 980100 980400 0.0302 83 chr11 1078800 1081500 0.1681 45 chr11 1096800 1098900 0.418 88 chr11 1166700 1167000 0.439 51 chr11 1412100 1412400 0.0186 10 chr11 1429500 1433100 0 78 chr11 1510200 1510500 0.372 48 chr11 1663800 1665300 0.1095 71 chr11 1666500 1667100 0 50 chr11 1683600 1683900 0.1836 56 chr11 1686000 1687800 0.0614 59 chr11 1945200 1950900 0 47 chr11 1952100 1953000 0 47 chr11 1954800 1978800 0 51 chr11 1980000 2043000 0 51 chr11 2332200 2332500 0.1201 68 chr11 3248400 3248700 0.3551 27 chr11 3252600 3256800 0 51 chr11 3258600 3261900 0 44 chr11 3263100 3270900 0 41 chr11 3272100 3281100 0 41 chr11 3282300 3282900 0 44 chr11 3284100 3293100 0 44 chr11 3294300 3294600 0 25 chr11 3297600 3327000 0 44 chr11 3328200 3335400 0 44 chr11 3336600 3337800 0 44 chr11 3653700 3654900 0.0399 2367 chr11 4001700 4003500 0.2065 84 chr11 4171500 4172400 0.07 67 chr11 4173600 4174800 0.1246 68 chr11 4223400 4223700 0.1893 69 chr11 4230000 4230600 0.1257 63 chr11 4245000 4245900 0 63 chr11 4256400 4256700 0.0308 60 chr11 4263000 4263300 0.1839 40 chr11 4268400 4274100 0 84 chr11 4276800 4277100 0.256 27 chr11 4278300 4279500 0 80 chr11 4280700 4284600 0 80 chr11 4287300 4298400 0 103 chr11 4299900 4300200 0.1421 50 chr11 4303500 4303800 0.1486 51 chr11 4310700 4311000 0.3006 64 chr11 4320000 4320300 0.1191 50 chr11 4326600 4327500 0.1304 63 chr11 4333500 4336500 0 75 chr11 4338600 4338900 0.2284 68 chr11 4341300 4342800 0 89 chr11 4349100 4349400 0.3288 70 chr11 4353000 4353300 0.3868 57 chr11 4354800 4355100 0.0906 57 chr11 4357500 4357800 0.3205 56 chr11 4360200 4361700 0.274 59 chr11 4620300 4620900 0.0321 50 chr11 4781400 4781700 0.3647 43 chr11 4935900 4936200 0.1918 47 chr11 5249400 5250000 0.0181 61 chr11 5254500 5254800 0.175 66 chr11 5415900 5416200 0.3261 60 chr11 5481000 5483100 0.0179 71 chr11 6186000 6191100 0.1372 79 chr11 7179000 7179900 0.282 78 chr11 7233600 7234200 0.142 62 chr11 7325100 7327800 0 90 chr11 7359000 7359600 0.0143 68 chr11 7658400 7659000 0.0386 64 chr11 7719600 7720200 0.0841 52 chr11 7737900 7740300 0.0654 45 chr11 7768800 7769100 0.0363 43 chr11 7865700 7866300 0.263 76 chr11 8142600 8142900 0.3176 69 chr11 8977500 8979600 0.1116 155 chr11 9542100 9542400 0.2104 79 chr11 9544200 9544500 0.2104 79 chr11 9705900 9706200 0.308 92 chr11 10391400 10392000 0.001 72 chr11 12640800 12641100 0.4463 28 chr11 12719700 12720000 0.2036 168 chr11 13544400 13544700 0 16 chr11 13794900 13795500 0.0568 89 chr11 13867200 13867500 0.1499 49 chr11 14628600 14628900 0.3478 50 chr11 14631900 14632200 0.2629 83 chr11 14716500 14721000 0 70 chr11 14847900 14848500 0.2086 75 chr11 14963400 14963700 0.2432 74 chr11 15270600 15270900 0.1586 71 chr11 16515600 16515900 0.1735 53 chr11 16720200 16720500 0.1373 74 chr11 16907700 16908000 0.1276 108 chr11 17028600 17029800 0.0379 63 chr11 17342400 17342700 0.1627 78 chr11 18247500 18247800 0.2735 78 chr11 18266400 18267600 0.3147 79 chr11 18920400 18921900 0 70 chr11 18942600 18944100 0 75 chr11 19139700 19140000 0.2261 74 chr11 20548800 20549400 0.0767 60 chr11 20895000 20895300 0.3659 55 chr11 22016100 22020900 0.0216 92 chr11 22287300 22288800 0.1023 92 chr11 22523400 22523700 0.0432 37 chr11 22528200 22528500 0.2995 60 chr11 22910100 22911000 0.0685 69 chr11 23176500 23178300 0.1303 52 chr11 23193900 23194200 0.2034 44 chr11 23298300 23299800 0.0131 72 chr11 23301000 23303400 0.0131 72 chr11 23316600 23317500 0.2057 54 chr11 23433900 23434200 0.1698 49 chr11 23791500 23791800 0.4314 64 chr11 24169800 24170100 0.218 79 chr11 24327900 24333900 0 83 chr11 24387600 24389400 0.0042 50 chr11 25143300 25143600 0.2915 94 chr11 25425900 25426500 0.0299 34 chr11 25428900 25429200 0 51 chr11 25635300 25635600 0.2588 83 chr11 25647000 25647300 0.2504 57 chr11 26115900 26116200 0.3561 71 chr11 26968800 26970900 0 88 chr11 27221400 27224100 0.0691 98 chr11 28029900 28030200 0.0713 69 chr11 28205700 28207200 0.0925 51 chr11 28429500 28429800 0.1819 22 chr11 28431300 28431600 0.3258 44 chr11 29154600 29156400 0 71 chr11 29417700 29418000 0.2312 56 chr11 29648400 29648700 0.4018 55 chr11 29743800 29744100 0.2535 45 chr11 30965700 30967200 0 78 chr11 31316400 31321500 0 83 chr11 32942100 32942400 0.1152 47 chr11 32944800 32945100 0.2203 79 chr11 33626400 33627300 0.0226 76 chr11 33628500 33628800 0.4506 36 chr11 34687200 34690200 0.1763 89 chr11 34760700 34761000 0.0272 88 chr11 35053800 35054100 0.1557 59 chr11 35396100 35396700 0.088 88 chr11 35578800 35579100 0.2338 77 chr11 35698500 35698800 0.1344 52 chr11 35707800 35708100 0.14 61 chr11 36287100 36287400 0.1288 29 chr11 36309900 36310200 0.4052 184 chr11 36481800 36482400 0.0038 60 chr11 36552000 36557400 0 113 chr11 36615000 36615600 0.0734 74 chr11 36894000 36894600 0.1697 51 chr11 37242900 37243200 0.2128 69 chr11 37347900 37348200 0.4263 36 chr11 38232900 38233200 0.1539 67 chr11 38739000 38739300 0.1605 41 chr11 39001200 39001500 0.3546 43 chr11 39047400 39048000 0.1044 42 chr11 40260000 40260300 0.2379 36 chr11 40587300 40587600 0.2644 92 chr11 40948500 40948800 0.2896 48 chr11 41303400 41303700 0.2773 73 chr11 41305500 41305800 0.2773 73 chr11 41695800 41696100 0.2023 62 chr11 42156600 42156900 0.2448 62 chr11 42215100 42216600 0.0064 68 chr11 42431400 42432000 0.0258 76 chr11 42442500 42442800 0.417 24 chr11 42459900 42460200 0.358 40 chr11 42680400 42680700 0.2641 69 chr11 42791700 42792300 0.0353 71 chr11 42798000 42798300 0.0136 51 chr11 42952200 42954300 0.2313 99 chr11 43346400 43351500 0.0133 118 chr11 43778400 43778700 0.2841 103 chr11 44663700 44664600 0.288 79 chr11 45101700 45102300 0.0428 65 chr11 45123900 45124200 0.2446 71 chr11 45737700 45739200 0.1596 91 chr11 46573800 46574400 0.1301 74 chr11 46584000 46584300 0.1607 52 chr11 47097300 47098200 0.0115 61 chr11 48295500 48295800 0.2352 43 chr11 48302100 48302400 0.2362 67 chr11 48392700 48393600 0.2938 55 chr11 48771900 48772200 0.2728 73 chr11 48847800 48852900 0 76 chr11 48854100 48854400 0.1964 51 chr11 48859500 48859800 0.1468 11 chr11 48880500 48888300 0 76 chr11 48892200 48899700 0 78 chr11 48927300 48927600 0.3892 23 chr11 48944100 48944400 0.1148 44 chr11 49104300 49105800 0 74 chr11 49713900 49714500 0.0042 66 chr11 49728600 49729200 0 68 chr11 49775400 49776000 0.258 64 chr11 49778400 49780800 0.1274 89 chr11 49792500 49797600 0 79 chr11 50114100 50134800 0 73 chr11 50180100 50180400 0.3105 76 chr11 50343900 50364300 0 81 chr11 50588400 50589000 0.1506 53 chr11 51078600 51090000 0 31 chr11 51091500 51430200 0 1145 chr11 51431400 51830100 0 1145 chr11 51831600 52020900 0 1145 chr11 52022700 52128000 0 1145 chr11 52129500 52303500 0 666 chr11 52304700 52599600 0 595 chr11 52601100 52632300 0 595 chr11 52633500 52652100 0 595 chr11 52653300 52701300 0 595 chr11 52703100 52707000 0 1026 chr11 52708200 53015400 0 1026 chr11 53016600 53097000 0 1026 chr11 53098200 53107500 0 1026 chr11 53108700 53215500 0 1802 chr11 53216700 53240400 0 1107 chr11 53241600 53283300 0 1107 chr11 53284500 53470200 0 1107 chr11 53471700 53504400 0 1107 chr11 53505600 53507100 0 1107 chr11 53508600 53518200 0 1107 chr11 53519400 53639700 0 1107 chr11 53640900 53716200 0 1107 chr11 53717400 53798400 0 1107 chr11 53799600 53818200 0 1107 chr11 53820300 53840400 0 207 chr11 53842200 53948100 0 663 chr11 53949300 54084000 0 663 chr11 54086100 54097800 0 663 chr11 54099300 54177300 0 729 chr11 54178500 54326100 0 729 chr11 54327300 54343200 0 729 chr11 54345900 54346200 0.2207 94 chr11 54348900 54350700 0.0624 91 chr11 54352200 54353700 0.0235 68 chr11 54355500 54356100 0.0308 78 chr11 54357600 54360000 0.0308 78 chr11 54361800 54368100 0.0264 133 chr11 54371700 54372600 0.0303 132 chr11 54376200 54377700 0.1802 60 chr11 54379500 54380700 0.3072 133 chr11 54382200 54383400 0 120 chr11 54386700 54387000 0.4972 62 chr11 54388800 54393900 0.0029 162 chr11 54395100 54395400 0.3763 63 chr11 54399300 54405300 0 127 chr11 54406500 54406800 0.2383 51 chr11 54408300 54408600 0.2383 51 chr11 54409800 54410400 0.0893 57 chr11 54411600 54414000 0.0098 226 chr11 54415800 54425100 0.0098 226 chr11 54526500 54526800 0.2655 31 chr11 54528000 54537000 0 187 chr11 54541800 54542100 0.008 50 chr11 54545400 54546900 0.0128 68 chr11 54549900 54550200 0.0942 34 chr11 55477200 55477500 0.1747 73 chr11 55686900 55687200 0.0631 45 chr11 55689600 55689900 0.0631 45 chr11 55991700 55992000 0.3207 162 chr11 56913000 56913300 0.1677 50 chr11 56965800 56966100 0.3254 63 chr11 57995700 57997800 0.0851 85 chr11 58010400 58010700 0.3213 43 chr11 58048800 58052400 0 63 chr11 58697100 58697400 0.2865 73 chr11 60048600 60049500 0.0007 81 chr11 60051300 60051600 0.0007 81 chr11 60438900 60441000 0.0161 85 chr11 60474000 60474300 0.1831 62 chr11 60532800 60539100 0.0012 76 chr11 60603600 60603900 0.2637 88 chr11 61084500 61086300 0 83 chr11 61203900 61204200 0.2692 46 chr11 61205700 61246200 0 58 chr11 61340400 61340700 0.3085 29 chr11 62096400 62099400 0 64 chr11 62277900 62280300 0 58 chr11 62384700 62385000 0.3299 46 chr11 64161900 64162200 0.4434 62 chr11 64170900 64173300 0.0477 125 chr11 65239800 65240100 0.2513 54 chr11 65678700 65679300 0.3988 154 chr11 65970900 65971500 0.403 73 chr11 66093300 66094500 0.2271 101 chr11 66460200 66460500 0.2281 18 chr11 66588600 66588900 0.2478 64 chr11 67222200 67222800 0.0016 70 chr11 67603500 67604100 0.0413 90 chr11 67868100 67868700 0.0194 70 chr11 68892300 68892600 0.0738 30 chr11 69068400 69069600 0.0596 127 chr11 70341000 70341300 0.2109 50 chr11 71569500 71569800 0.3148 80 chr11 71578800 71579100 0.066 59 chr11 72150600 72150900 0.2535 21 chr11 72164700 72165300 0.3345 73 chr11 73572300 73572600 0.3887 78 chr11 74223600 74223900 0.3382 86 chr11 74527800 74528100 0.1867 57 chr11 74757300 74762100 0.0372 90 chr11 74880900 74882100 0.2012 88 chr11 74977200 74977500 0.4302 65 chr11 75409200 75409800 0.2119 75 chr11 75749100 75751800 0.146 85 chr11 75753600 75754500 0.1132 89 chr11 77097600 77099700 0.0194 102 chr11 78678000 78683700 0 81 chr11 79557300 79557600 0.1057 77 chr11 79961700 79962000 0.2087 70 chr11 82156200 82161600 0.001 80 chr11 82625100 82625700 0.0127 40 chr11 83394900 83395200 0.0199 77 chr11 83396400 83397000 0.0199 77 chr11 83589600 83591700 0.0872 66 chr11 84502200 84502500 0.4679 31 chr11 85324800 85330800 0 83 chr11 85849800 85850100 0.3354 69 chr11 86110200 86111700 0.2587 43 chr11 86536200 86536800 0.2826 58 chr11 86756400 86757600 0.167 69 chr11 87047700 87053100 0 90 chr11 87164100 87165300 0.0021 65 chr11 87340200 87345000 0 102 chr11 87698100 87698700 0.107 57 chr11 88989300 88989900 0.35 69 chr11 89314500 89317800 0.0524 73 chr11 89745000 89746500 0.1111 89 chr11 89749500 89749800 0.279 74 chr11 89751300 89751600 0.3671 40 chr11 89752800 89753100 0.2112 63 chr11 89759100 89759700 0.0032 52 chr11 89760900 89761200 0.2464 43 chr11 89763300 89764200 0 64 chr11 89766000 89766600 0.1044 63 chr11 89769600 89769900 0.067 67 chr11 89771100 89772000 0.067 67 chr11 89775300 89776200 0.2152 71 chr11 89778300 89784600 0 70 chr11 89788200 89790300 0 71 chr11 89793900 89795700 0.0638 70 chr11 89797800 89799900 0 60 chr11 89801400 89802000 0.0218 61 chr11 89803200 89803500 0.0218 61 chr11 89809200 89809800 0.0132 68 chr11 89811300 89811600 0.0114 60 chr11 89817300 89817900 0.0046 70 chr11 89819400 89822100 0.0046 70 chr11 89824200 89826600 0 68 chr11 89828100 89831400 0 68 chr11 89833800 89834100 0.4015 47 chr11 89838000 89862300 0 86 chr11 89864700 89869800 0 86 chr11 89871600 89872200 0.0237 62 chr11 89873400 89874900 0.0146 78 chr11 89876100 89877600 0 86 chr11 89878800 89883000 0 86 chr11 89884500 89891400 0 86 chr11 89893800 89897400 0 77 chr11 89900100 89920500 0 98 chr11 89924100 90006600 0 84 chr11 90008100 90008700 0.083 36 chr11 90013500 90016500 0.0539 69 chr11 90018600 90021000 0 65 chr11 90023700 90028500 0 65 chr11 90029700 90030300 0.0148 54 chr11 90032700 90033000 0.1692 43 chr11 90034200 90034500 0 67 chr11 90035700 90038100 0 67 chr11 90039900 90042900 0 67 chr11 90044100 90045600 0 67 chr11 90047400 90051600 0 68 chr11 90054000 90061500 0 68 chr11 90063600 90065400 0.1964 70 chr11 90068100 90070500 0.1042 69 chr11 90073500 90073800 0 66 chr11 90075600 90076800 0 66 chr11 90078900 90079200 0 66 chr11 90080400 90081000 0.0076 53 chr11 90082200 90082500 0.0076 53 chr11 90087000 90088500 0.1023 66 chr11 90090000 90091500 0.1815 75 chr11 90093300 90094200 0.2018 80 chr11 90400200 90405600 0 124 chr11 90966300 90972000 0 76 chr11 90976500 90976800 0.0914 24 chr11 91309200 91309500 0.3977 50 chr11 91578900 91579800 0.0623 75 chr11 91682100 91682700 0.2401 75 chr11 92030400 92030700 0.4554 37 chr11 92171700 92172000 0.4274 49 chr11 92359500 92359800 0.248 68 chr11 93136800 93142500 0 93 chr11 93172800 93174000 0.2723 77 chr11 93175800 93176100 0.2245 62 chr11 93243300 93243600 0.3154 56 chr11 93420900 93426900 0 81 chr11 93945000 93945300 0.1066 46 chr11 93946500 93948000 0.0661 68 chr11 94038300 94042500 0.0365 112 chr11 94233000 94235400 0.0079 278 chr11 94236900 94237500 0.1427 262 chr11 94239300 94239600 0.1811 256 chr11 94341000 94341300 0.2757 56 chr11 94807800 94808100 0.1397 29 chr11 95320200 95321100 0.0873 63 chr11 95436300 95442300 0 87 chr11 95626800 95627700 0.1101 153 chr11 95629800 95630100 0.1597 57 chr11 96406200 96408600 0.0637 79 chr11 96513900 96514200 0.3361 73 chr11 96771900 96772200 0.1422 35 chr11 96774900 96776400 0.1356 66 chr11 96935100 96936900 0.0617 72 chr11 97040400 97041000 0.2104 65 chr11 97043700 97044000 0.2986 24 chr11 98325600 98325900 0.0984 50 chr11 98344500 98344800 0.2414 65 chr11 99581100 99581400 0.3347 49 chr11 99602700 99607800 0 90 chr11 99761700 99762300 0.3638 62 chr11 99783000 99783600 0.0073 60 chr11 100035300 100035600 0.1631 68 chr11 100412100 100412400 0.1118 63 chr11 100413900 100414200 0.0793 76 chr11 100452600 100453200 0.0472 124 chr11 100457400 100457700 0.0825 67 chr11 100476000 100476300 0.4222 72 chr11 100478700 100480200 0.096 83 chr11 101546100 101546400 0.1184 25 chr11 101695200 101695800 0 104 chr11 101697000 101698200 0 104 chr11 101700000 101704500 0 104 chr11 102370200 102372900 0.0663 90 chr11 102374400 102374700 0.0663 90 chr11 102742800 102744300 0.0473 101 chr11 103038900 103039200 0.1829 62 chr11 104195100 104195400 0.1095 58 chr11 104252100 104252400 0.3673 58 chr11 104675700 104676600 0.0116 80 chr11 105018600 105018900 0.1352 60 chr11 106334700 106335300 0.2896 65 chr11 106710000 106710300 0.0914 15 chr11 107364600 107367000 0 74 chr11 107374500 107374800 0.2127 74 chr11 107376300 107377800 0 67 chr11 108263100 108265200 0.0641 85 chr11 108360900 108362400 0.2605 94 chr11 108378600 108378900 0.3919 61 chr11 108684600 108685500 0.3141 85 chr11 109177800 109183200 0 71 chr11 109404300 109404900 0.0788 77 chr11 109574700 109575900 0.1538 78 chr11 109878900 109879200 0.2008 80 chr11 109881300 109881900 0.229 63 chr11 109947900 109948200 0.2559 52 chr11 110212200 110214900 0.0064 71 chr11 110619000 110619300 0.3022 39 chr11 110659200 110659500 0.1998 88 chr11 112325400 112326000 0.0761 62 chr11 112679100 112680600 0.0917 68 chr11 114629700 114630000 0.3265 68 chr11 114633000 114633300 0.1999 16 chr11 114840000 114841800 0.0083 87 chr11 114843000 114844200 0.1597 85 chr11 116571300 116575200 0.0033 79 chr11 117135300 117138000 0 66 chr11 117207300 117208200 0.1361 90 chr11 117250800 117251100 0.2537 76 chr11 118330500 118330800 0.3452 70 chr11 118721100 118721400 0.0937 66 chr11 119507400 119507700 0.3104 38 chr11 119743800 119744100 0.4865 88 chr11 119848800 119849100 0.2419 15 chr11 120082500 120083700 0 27 chr11 121173300 121173600 0.2609 24 chr11 121185300 121185900 0.0418 214 chr11 121601100 121601400 0.0673 86 chr11 121752300 121752600 0.1798 67 chr11 121821600 121827000 0.0009 74 chr11 121859400 121859700 0.1484 60 chr11 122017500 122017800 0.4173 37 chr11 122477100 122478600 0 50 chr11 122826900 122828100 0.0961 74 chr11 123896100 123896400 0.1068 98 chr11 124236000 124236600 0.0556 69 chr11 124392000 124392600 0.1833 21 chr11 124505700 124506300 0.0746 88 chr11 125036100 125036400 0.0091 34 chr11 125537700 125542200 0 72 chr11 125863500 125864400 0.2613 75 chr11 126065100 126065400 0.2781 118 chr11 126226200 126226500 0.0767 142 chr11 127079400 127079700 0.104 35 chr11 127287300 127288800 0.0416 84 chr11 127364400 127364700 0.0819 82 chr11 127367700 127368000 0.2057 70 chr11 127776900 127779000 0.0549 104 chr11 127780200 127780500 0.0549 104 chr11 127869000 127869900 0.0227 85 chr11 128930700 128931000 0.3649 132 chr11 129174900 129176400 0 77 chr11 129342300 129343800 0.0071 64 chr11 129563400 129564000 0.0104 62 chr11 130092300 130092600 0.1845 81 chr11 131173500 131174700 0.1201 45 chr11 131342100 131342700 0.2844 131 chr11 132322500 132324300 0.0414 81 chr11 132483000 132483300 0.1945 79 chr11 133642200 133642500 0.2494 36 chr11 133644300 133646100 0.141 88 chr11 133932600 133932900 0.4727 149 chr11 134000100 134000700 0.1891 59 chr11 134166000 134166600 0.3989 47 chr11 134296200 134296500 0.087 66 chr11 134375700 134376000 0.4739 67 chr11 134451600 134451900 0.4042 71 chr11 134839500 134840400 0.0162 94 chr11 134928600 134928900 0.157 63 chr11 134986200 134986500 0.4847 63 chr11 135046800 135047100 0.3865 86 chr12 9900 11700 0.0749 82 chr12 14400 18600 0.1558 125 chr12 19800 20100 0.1558 125 chr12 23400 38700 0 130 chr12 41100 43200 0 66 chr12 45600 45900 0.4275 108 chr12 72600 72900 0.2755 55 chr12 419700 422100 0.0632 92 chr12 453000 453300 0.4258 44 chr12 529800 530100 0.1478 69 chr12 1079400 1079700 0.1105 44 chr12 1085100 1086000 0.0027 180 chr12 1087800 1088100 0.3394 16 chr12 1122000 1122600 0.2239 47 chr12 1661100 1661400 0.2781 22 chr12 1921500 1922100 0.2579 42 chr12 2105700 2106000 0.4429 73 chr12 2130600 2135100 0 70 chr12 2407500 2407800 0.473 74 chr12 2520000 2520600 0.0416 129 chr12 2539200 2539800 0.0621 251 chr12 3393600 3394200 0.1903 83 chr12 3499500 3505200 0 91 chr12 4510200 4510500 0.0296 100 chr12 4511700 4513200 0.0296 100 chr12 4732500 4733100 0.2752 88 chr12 4973400 4974000 0.4494 34 chr12 5117100 5119500 0.0353 72 chr12 5120700 5121600 0.3013 72 chr12 5288400 5289900 0.1882 77 chr12 5929800 5930100 0.4367 103 chr12 5931600 5932200 0.3595 141 chr12 6022500 6023100 0.1418 65 chr12 6290700 6291000 0.1073 40 chr12 7196700 7197000 0.3466 12 chr12 7335900 7336200 0.1421 75 chr12 7819500 7820100 0.003 61 chr12 7924500 7924800 0.1292 49 chr12 7954200 7954500 0.3128 65 chr12 7972200 7972500 0.0996 44 chr12 7980300 7980600 0.3494 26 chr12 8184900 8185200 0.1142 50 chr12 8387700 8388300 0.0124 87 chr12 8394000 8395500 0.0024 102 chr12 8625900 8626800 0.0719 79 chr12 8787600 8788500 0.0007 62 chr12 8795100 8796000 0 67 chr12 8932800 8933100 0.1333 68 chr12 8939400 8941200 0.0036 68 chr12 8964600 8964900 0.2151 75 chr12 8966700 8967000 0.2175 80 chr12 9285300 9286200 0 54 chr12 9287700 9288300 0.0392 69 chr12 9290400 9293400 0.0451 80 chr12 9295800 9300000 0.0022 90 chr12 9314400 9314700 0.2531 33 chr12 9401400 9401700 0.0543 36 chr12 9414900 9415200 0.0933 38 chr12 9431700 9433500 0.0241 66 chr12 9435000 9435300 0.0241 66 chr12 9437100 9437400 0.1758 47 chr12 9438600 9442200 0 70 chr12 9443400 9444300 0 70 chr12 9446100 9446700 0 70 chr12 9455100 9455700 0.0629 28 chr12 9467700 9468000 0.0138 21 chr12 9496800 9497100 0.0659 18 chr12 9523200 9525600 0 80 chr12 9549600 9549900 0.3735 16 chr12 9559800 9560100 0 14 chr12 9561300 9561600 0 14 chr12 9563100 9563400 0 29 chr12 9567600 9568500 0.3527 67 chr12 9570600 9572100 0 38 chr12 9573600 9574200 0 22 chr12 9577500 9578100 0 15 chr12 9580500 9582300 0 67 chr12 9952800 9953100 0.2318 65 chr12 10345800 10346100 0.1088 79 chr12 10348800 10349100 0.2629 59 chr12 10423800 10425300 0 38 chr12 10427100 10427400 0.0031 52 chr12 10437000 10437900 0 21 chr12 10439100 10440900 0.078 49 chr12 10442400 10443000 0.0028 48 chr12 11034000 11034600 0.0808 28 chr12 11088300 11088600 0.065 38 chr12 11095200 11095500 0 19 chr12 11148600 11149800 0.1286 43 chr12 11298900 11303400 0 67 chr12 11319600 11319900 0.2752 75 chr12 11352300 11353200 0 75 chr12 11391900 11392800 0 67 chr12 11937900 11938500 0.0281 70 chr12 12413700 12414600 0.299 29 chr12 13392000 13399500 0 101 chr12 14586300 14586600 0.243 10 chr12 14631600 14631900 0.2572 79 chr12 15476700 15477300 0.0936 70 chr12 16707300 16708200 0.0475 118 chr12 16709400 16709700 0.0475 118 chr12 17177100 17177700 0.0388 81 chr12 17178900 17179200 0.0388 81 chr12 17656200 17656500 0.3882 59 chr12 17769900 17770500 0.0281 83 chr12 17772900 17773800 0.0984 103 chr12 17856600 17858100 0.0218 105 chr12 17859300 17860200 0.0218 105 chr12 18369600 18369900 0.212 60 chr12 19340400 19340700 0.1178 66 chr12 19728900 19729200 0.1494 55 chr12 20553300 20553600 0.1403 65 chr12 20671500 20673600 0.2462 81 chr12 20709600 20709900 0 16 chr12 20773500 20773800 0.1748 45 chr12 21085200 21085500 0.4719 62 chr12 21212100 21213900 0.2453 96 chr12 21284700 21285000 0.0055 79 chr12 21286200 21288000 0.0055 79 chr12 21397800 21400800 0.039 96 chr12 21421200 21421500 0.276 54 chr12 21422700 21423900 0 44 chr12 21622500 21622800 0 11 chr12 21798300 21798600 0.2731 66 chr12 21976800 21978000 0 35 chr12 22139400 22142100 0.114 69 chr12 22178100 22178400 0.2578 49 chr12 22418700 22431600 0 42 chr12 22734900 22735800 0.2272 52 chr12 23073600 23073900 0.0609 58 chr12 25485600 25486200 0.1063 74 chr12 25488300 25488600 0.1063 74 chr12 25539900 25541700 0.2104 71 chr12 26035200 26035800 0.1413 142 chr12 26216400 26217600 0.1756 77 chr12 26673900 26674200 0.0667 57 chr12 26784900 26786100 0.03 33 chr12 27131100 27131700 0.2361 77 chr12 27281100 27281400 0.1179 22 chr12 27643500 27643800 0.2817 71 chr12 28200300 28200600 0.1354 53 chr12 28764300 28764600 0.1306 74 chr12 29408400 29408700 0.108 67 chr12 29932200 29932800 0.0067 98 chr12 30433500 30433800 0.2222 47 chr12 30521100 30521400 0.1784 47 chr12 31165800 31166400 0.2344 81 chr12 31615500 31615800 0.3056 69 chr12 32099700 32100300 0.0421 56 chr12 32810700 32811000 0.173 25 chr12 33738000 33738600 0.0824 68 chr12 33740100 33740400 0.0824 68 chr12 33793800 33794100 0.3079 86 chr12 34069800 34070100 0.2524 44 chr12 34669800 34670100 0.0392 65 chr12 34770000 34773000 0 63 chr12 34774500 34774800 0 85 chr12 34776000 34795200 0 85 chr12 34797600 34799700 0 37 chr12 34802700 34803600 0 24 chr12 34805700 34812000 0 64 chr12 34813200 34816500 0 64 chr12 34820400 34820700 0 51 chr12 34821900 34822200 0 51 chr12 34831200 34832400 0.0065 44 chr12 34834800 34849500 0 122 chr12 34851000 34861200 0 122 chr12 34862400 34863000 0 84 chr12 34865700 34870200 0 140 chr12 34871700 34872900 0 140 chr12 34874100 34878900 0 140 chr12 34880700 34882800 0 1117 chr12 34884000 35199300 0 1117 chr12 35200500 35274000 0 1117 chr12 35275500 35319600 0 1097 chr12 35320800 35389800 0 338 chr12 35391000 35429400 0 338 chr12 35430600 35482800 0 338 chr12 35484000 35650500 0 4118 chr12 35651700 35725500 0 4118 chr12 35726700 35787900 0 4118 chr12 35789100 35809800 0 1323 chr12 35811300 35995500 0 1323 chr12 35996700 36189600 0 1323 chr12 36191100 36193500 0 213 chr12 36194700 36268500 0 213 chr12 36270000 36331500 0 213 chr12 36332700 36336600 0 213 chr12 36338400 36390000 0 213 chr12 36391200 36450900 0 213 chr12 36452400 36496200 0 213 chr12 36497400 36513600 0 213 chr12 36514800 36624000 0 185 chr12 36625200 36699900 0 479 chr12 36701100 36733800 0 479 chr12 36735000 36779100 0 479 chr12 36780300 36796200 0 479 chr12 36798600 36830400 0 364 chr12 36831600 36840600 0 364 chr12 36842100 37010400 0 364 chr12 37011600 37039200 0 364 chr12 37040700 37102500 0 182 chr12 37104300 37111800 0 232 chr12 37113000 37185300 0 232 chr12 37235400 37240500 0 144 chr12 37246200 37248900 0 82 chr12 37251300 37251600 0 38 chr12 37333200 37334700 0 50 chr12 37339800 37340400 0.1009 46 chr12 37342500 37342800 0.1614 26 chr12 37465500 37465800 0.2866 25 chr12 37705800 37706100 0.0472 60 chr12 37736700 37737000 0.1871 65 chr12 37815300 37815600 0.1457 72 chr12 38094000 38094300 0.0755 35 chr12 38211600 38212200 0.0059 54 chr12 38226900 38227200 0.276 44 chr12 38313300 38313600 0.0745 41 chr12 38800200 38805600 0 84 chr12 38963700 38964000 0.3546 69 chr12 39790500 39792300 0.0042 63 chr12 39800400 39801000 0 66 chr12 39836700 39837600 0.0357 60 chr12 39901500 39901800 0.0425 97 chr12 39979500 39979800 0.0268 87 chr12 39981900 39984000 0.0268 87 chr12 41040900 41041200 0.329 75 chr12 41640300 41640600 0.2166 84 chr12 41669400 41671200 0.2172 81 chr12 41673900 41675700 0.1789 74 chr12 41677200 41677500 0.1789 74 chr12 41823900 41824200 0.4017 56 chr12 41844300 41844900 0 31 chr12 42228600 42229200 0.0121 49 chr12 42919200 42919500 0.3281 54 chr12 43260600 43260900 0.2944 43 chr12 43471500 43471800 0.0213 124 chr12 43473000 43476600 0.0213 124 chr12 43532700 43534200 0.0058 49 chr12 43583700 43585200 0 55 chr12 43605900 43606200 0.1232 68 chr12 43622700 43623300 0.2229 70 chr12 43686000 43686300 0.1915 55 chr12 43790700 43791300 0.1281 61 chr12 43910700 43911300 0.0416 65 chr12 44108400 44114100 0 106 chr12 44577000 44577300 0.1435 70 chr12 44865000 44865300 0.3463 55 chr12 44951700 44954700 0.0622 84 chr12 44956200 44956800 0.0622 84 chr12 45229500 45229800 0.319 237 chr12 45372300 45372600 0.1296 83 chr12 45374100 45374700 0.0559 77 chr12 45376200 45376500 0.0817 101 chr12 46705200 46705800 0.2725 64 chr12 46940400 46940700 0.2617 58 chr12 48277800 48278100 0.2469 65 chr12 48331800 48333600 0.0234 65 chr12 48843000 48843300 0.1963 67 chr12 51454500 51455100 0.0491 75 chr12 51562800 51568200 0 73 chr12 51719100 51719700 0.0474 43 chr12 52288800 52291200 0.001 82 chr12 52302000 52304400 0.0202 75 chr12 54779700 54780000 0.1159 41 chr12 54789000 54794400 0 80 chr12 55081500 55081800 0.2909 80 chr12 55083900 55084500 0.2909 80 chr12 55096500 55101300 0 85 chr12 55161900 55162200 0.3636 73 chr12 55345500 55347600 0 70 chr12 55349100 55350000 0 70 chr12 55410000 55411800 0.0049 62 chr12 55413000 55413300 0.0233 69 chr12 55489500 55489800 0.1927 75 chr12 55521600 55521900 0.3122 87 chr12 56075400 56075700 0.2028 77 chr12 56400600 56401200 0.1159 79 chr12 56938500 56938800 0.235 72 chr12 56940300 56940900 0.0362 63 chr12 56982000 56982300 0.2231 64 chr12 56984700 56985300 0.0146 69 chr12 57648600 57651900 0.0052 106 chr12 58057200 58057500 0.268 65 chr12 58110000 58110300 0.0552 62 chr12 58112700 58113000 0.3292 72 chr12 58327500 58328700 0.0014 108 chr12 58331400 58333800 0.0014 108 chr12 58336200 58336800 0.0272 66 chr12 59468100 59468400 0.44 48 chr12 59739300 59739600 0.1942 56 chr12 59756700 59757000 0.1921 54 chr12 60008700 60009600 0.0024 167 chr12 60736500 60736800 0.4053 58 chr12 61541400 61541700 0.1974 71 chr12 61942500 61947000 0.0109 88 chr12 63670500 63670800 0.3066 50 chr12 64055100 64055400 0.3347 61 chr12 64140600 64140900 0.2441 60 chr12 64197000 64201500 0.0108 80 chr12 64287600 64293000 0 89 chr12 65350500 65350800 0.3252 55 chr12 65550600 65551200 0.1118 74 chr12 65687400 65687700 0.2018 60 chr12 66057600 66057900 0.1246 480 chr12 66135600 66135900 0.0581 39 chr12 67847100 67847400 0.2872 75 chr12 67903800 67905300 0.083 80 chr12 67953600 67953900 0.1828 68 chr12 68513100 68513700 0.2871 62 chr12 68660100 68660400 0.1348 56 chr12 68994600 68995200 0.0871 46 chr12 69773700 69779400 0 85 chr12 69940800 69942600 0.0987 72 chr12 69944100 69944400 0.0987 72 chr12 70013700 70016700 0.0004 98 chr12 70017900 70018500 0.0004 98 chr12 70201200 70203600 0.0008 120 chr12 71098800 71099700 0.121 65 chr12 71101200 71103300 0.0198 84 chr12 71119200 71120100 0 60 chr12 71121900 71124000 0.0488 54 chr12 71564100 71564400 0 57 chr12 71911500 71911800 0.4343 100 chr12 72515100 72515400 0.1046 76 chr12 72908400 72908700 0.1393 69 chr12 73148100 73149000 0.0165 83 chr12 73151100 73151400 0.3341 56 chr12 73194600 73195200 0.0735 109 chr12 73283700 73288800 0 75 chr12 73395600 73395900 0.1651 84 chr12 73397100 73397400 0.1651 84 chr12 73398900 73400400 0.1866 92 chr12 73982700 73983600 0.0185 137 chr12 74506800 74507100 0.3468 95 chr12 74875500 74880900 0 81 chr12 75729900 75730500 0.1438 97 chr12 76321800 76322100 0.2896 79 chr12 77174100 77178600 0.0997 85 chr12 77656200 77656800 0.1887 46 chr12 78072300 78073200 0.0636 84 chr12 79042500 79042800 0.2092 76 chr12 79177200 79177800 0.0212 61 chr12 79311300 79311900 0.4239 75 chr12 80245200 80248800 0.0059 80 chr12 80451300 80452200 0 56 chr12 80453400 80454000 0 54 chr12 80464200 80465100 0 59 chr12 80482800 80483100 0.0841 63 chr12 82899900 82900500 0.0784 88 chr12 83393700 83394300 0.0496 21 chr12 83450400 83450700 0.1169 54 chr12 83524500 83524800 0.0431 45 chr12 83587500 83587800 0.2088 69 chr12 83589600 83589900 0.1922 73 chr12 83671800 83676300 0 68 chr12 83902500 83902800 0.1238 47 chr12 84006300 84006600 0.2963 61 chr12 85193100 85194600 0.0472 82 chr12 85315500 85317600 0.0178 95 chr12 86802600 86802900 0.1499 66 chr12 86845500 86846400 0.0051 76 chr12 86859300 86859900 0.0199 59 chr12 87077400 87077700 0.2803 56 chr12 87102000 87102600 0.1538 54 chr12 87192000 87194100 0.0215 67 chr12 87582600 87583500 0.1326 75 chr12 87747600 87750000 0 72 chr12 87970800 87971100 0.3748 71 chr12 88621800 88622700 0.0283 74 chr12 88848000 88848600 0.2979 106 chr12 88852200 88852500 0.1961 71 chr12 89443500 89443800 0.2605 82 chr12 90536700 90542400 0 69 chr12 92231700 92232600 0.1595 75 chr12 92315100 92319900 0 85 chr12 92680200 92680500 0.2234 87 chr12 92728200 92728500 0.4381 31 chr12 92916600 92920500 0.0157 63 chr12 93399300 93399600 0.0799 48 chr12 93401700 93402000 0.1436 59 chr12 93492900 93494100 0 63 chr12 93498000 93499200 0 56 chr12 95339700 95340000 0.3328 67 chr12 95839800 95842500 0 59 chr12 95923800 95925000 0.2328 89 chr12 95946600 95947500 0.0013 67 chr12 95948700 95949000 0.1775 52 chr12 96317100 96321900 0 84 chr12 96827400 96827700 0.1323 25 chr12 97161000 97161300 0.0607 40 chr12 97653600 97653900 0.1655 85 chr12 97655700 97656000 0.1655 85 chr12 97704900 97705500 0 73 chr12 97706700 97708800 0 73 chr12 97718100 97718700 0.0631 77 chr12 97725300 97729800 0 79 chr12 98278500 98279100 0.0287 65 chr12 98655000 98655300 0.1204 68 chr12 101146800 101147400 0.1883 82 chr12 101149200 101151900 0 66 chr12 101153700 101154000 0.3482 69 chr12 101509200 101511300 0.0433 70 chr12 101586300 101587200 0.1689 60 chr12 101704800 101705700 0.054 45 chr12 102308100 102308700 0.1209 69 chr12 102448200 102448500 0.4219 57 chr12 102828900 102829500 0.1071 81 chr12 103321200 103321800 0.153 95 chr12 103899600 103899900 0.1547 45 chr12 104031600 104032200 0.15 64 chr12 104322900 104323200 0.1151 41 chr12 105630600 105633600 0.0854 88 chr12 105777300 105781500 0 70 chr12 106473000 106474500 0 77 chr12 106476000 106476600 0.1328 66 chr12 106752000 106752300 0.4565 88 chr12 108348000 108348600 0.0384 26 chr12 108999000 109000800 0.0171 84 chr12 109002000 109002600 0.0171 84 chr12 109635000 109635600 0.3056 125 chr12 110570400 110570700 0.023 49 chr12 111831900 111832200 0.1301 75 chr12 112621200 112627200 0 105 chr12 113872500 113873700 0.065 103 chr12 114536400 114536700 0.3072 68 chr12 114571500 114571800 0.0632 59 chr12 115287300 115288800 0.0159 106 chr12 115290300 115290600 0.311 52 chr12 118681200 118681500 0.209 60 chr12 118707600 118708200 0.4307 150 chr12 119918100 119919300 0.3589 68 chr12 120928500 120928800 0.1222 34 chr12 121301100 121301400 0.4575 20 chr12 121747500 121748100 0.0484 46 chr12 121993200 121995000 0.2093 67 chr12 122695800 122696400 0.0165 69 chr12 122700300 122700600 0.1872 76 chr12 122709300 122709900 0.0322 64 chr12 122713500 122713800 0.0144 49 chr12 122717700 122718000 0.2796 59 chr12 124089300 124089600 0.4693 49 chr12 124101300 124101600 0.1226 37 chr12 124839600 124839900 0.2197 57 chr12 124912200 124912500 0.1934 55 chr12 125204400 125204700 0.4183 38 chr12 125409900 125411100 0.1004 27 chr12 126151800 126152100 0.1364 60 chr12 126299100 126304800 0 97 chr12 126583500 126584100 0 69 chr12 126969300 126969600 0.3368 64 chr12 127095000 127100100 0.049 86 chr12 127545000 127545900 0.0013 39 chr12 127871400 127871700 0.0355 70 chr12 128708400 128708700 0.4473 118 chr12 128844900 128845200 0.2808 35 chr12 129018000 129018300 0.1703 46 chr12 129088200 129088800 0.4039 84 chr12 129190200 129190500 0.4359 54 chr12 129303300 129303600 0.0859 76 chr12 129356100 129356400 0.2866 28 chr12 129479700 129480000 0.4053 42 chr12 129804000 129806400 0.0327 60 chr12 129855600 129858300 0 58 chr12 130338300 130338600 0.4328 51 chr12 130379400 130380000 0.3554 69 chr12 130386600 130387500 0.0245 62 chr12 130392600 130392900 0.477 166 chr12 130482900 130483200 0.4381 47 chr12 130586700 130587600 0.0468 69 chr12 130843800 130844100 0.1047 100 chr12 130882200 130882500 0.1945 66 chr12 130887600 130887900 0.2105 62 chr12 131032800 131033100 0.4251 58 chr12 131071800 131072100 0.4112 61 chr12 131195100 131195400 0.038 61 chr12 131200800 131202300 0 81 chr12 131206200 131206800 0.1545 67 chr12 131225400 131226000 0.0162 76 chr12 131278200 131278500 0.2476 56 chr12 131297400 131307000 0 78 chr12 131392800 131393400 0.2243 56 chr12 131395500 131395800 0.4328 231 chr12 131433300 131434200 0.0373 49 chr12 131439600 131440200 0.042 62 chr12 131470500 131470800 0.0808 49 chr12 131475600 131476200 0 87 chr12 131481000 131481600 0.0311 62 chr12 131580300 131580600 0.3327 60 chr12 131588400 131588700 0.1747 439 chr12 131626500 131627700 0.1268 196 chr12 131654400 131654700 0.3126 85 chr12 131656500 131658300 0.0791 79 chr12 131660700 131663400 0 68 chr12 131701200 131701800 0.111 28 chr12 132149100 132150600 0.0006 206 chr12 132212400 132212700 0.0779 21 chr12 132231300 132236100 0 72 chr12 132241200 132243300 0.1538 199 chr12 132304800 132305100 0.466 25 chr12 132349800 132350100 0.4687 225 chr12 132361800 132362400 0.2446 71 chr12 132364800 132365100 0.4251 34 chr12 132378000 132378300 0.1995 12 chr12 132392100 132392400 0.3899 14 chr12 132464100 132464400 0.3734 124 chr12 132684000 132684900 0.1793 92 chr12 132688800 132689100 0.1648 11 chr12 132693300 132693900 0.4516 33 chr12 132793200 132793500 0.009 21 chr12 132817200 132817800 0.3954 34 chr12 132836100 132836400 0.2755 33 chr12 133264800 133265400 0 201 chr13 16004100 16004400 0.2736 47 chr13 16005600 16006800 0.1347 111 chr13 16015800 16016100 0.3213 39 chr13 16023600 16025400 0.0067 75 chr13 16028400 16029600 0.0437 135 chr13 16030800 16034400 0.1502 62 chr13 16038600 16042200 0 141 chr13 16043400 16047900 0 71 chr13 16050900 16065000 0 152 chr13 16068300 16069500 0 152 chr13 16071000 16074000 0 59 chr13 16075200 16077000 0.0197 153 chr13 16080000 16089600 0 105 chr13 16090800 16091100 0 105 chr13 16093200 16099500 0.008 256 chr13 16100700 16111800 0 179 chr13 16114800 16119000 0.1139 562 chr13 16121700 16122900 0.3148 376 chr13 16124100 16126200 0.0406 428 chr13 16127400 16127700 0.4133 204 chr13 16130400 16130700 0.482 311 chr13 16131900 16135200 0.0646 1052 chr13 16136400 16141200 0.0646 1052 chr13 16142400 16142700 0.3767 463 chr13 16146900 16150200 0.3128 404 chr13 16152300 16155900 0.356 889 chr13 16159200 16159500 0.428 288 chr13 16161000 16162500 0.1312 629 chr13 16164300 16185000 0 733 chr13 16186500 16194600 0.2 484 chr13 16195800 16205700 0.1094 401 chr13 16206900 16211400 0.1559 381 chr13 16212600 16214400 0.1395 257 chr13 16216200 16231500 0.0549 449 chr13 16232700 16233900 0.3478 465 chr13 16235100 16237200 0.1336 478 chr13 16242300 16245300 0.0761 556 chr13 16246800 16256100 0 805 chr13 16262100 16263300 0 83 chr13 16266300 16269900 0 127 chr13 16272000 16272300 0 1930 chr13 16273500 16276500 0 1930 chr13 16278300 16280100 0 1930 chr13 16281300 16305900 0 1930 chr13 16307100 16400100 0 1930 chr13 16401300 16426800 0 4973 chr13 16428300 16440600 0 4973 chr13 16441800 16504200 0 4973 chr13 16505400 16835400 0 4973 chr13 16836900 16906200 0 4973 chr13 16908000 16954200 0 7157 chr13 16955400 17431200 0 7157 chr13 17432400 17447100 0 1822 chr13 17448600 17449500 0 1822 chr13 17451000 17592900 0 1822 chr13 17594100 17768100 0 1868 chr13 17769300 17880900 0 3185 chr13 17882700 18051300 0 3185 chr13 18192000 18192300 0.3695 115 chr13 18193800 18194100 0.1706 114 chr13 18195300 18197100 0.1706 114 chr13 18201300 18201900 0.2348 186 chr13 18211500 18215100 0.104 5875 chr13 18293100 18293400 0.4432 51 chr13 18318000 18318300 0.2492 155 chr13 18336300 18336600 0.2203 106 chr13 18339300 18348900 0 78 chr13 18350100 18352500 0 78 chr13 18356100 18357300 0.0385 78 chr13 18409500 18409800 0.3518 55 chr13 18414000 18414300 0.0038 47 chr13 18415500 18416100 0.0038 47 chr13 18417600 18418200 0 59 chr13 18419700 18421800 0.0787 65 chr13 18423000 18423300 0.0787 65 chr13 18424500 18425100 0.0787 65 chr13 18428100 18428700 0.0787 65 chr13 18430500 18430800 0.1708 75 chr13 18432600 18432900 0.0002 58 chr13 18434100 18436200 0.0002 58 chr13 18441300 18441600 0.2048 59 chr13 18452700 18453300 0.2452 28 chr13 18457200 18457800 0.0576 234 chr13 18459000 18459300 0.016 37 chr13 18464100 18464400 0.1352 42 chr13 18466200 18466800 0.1896 57 chr13 18481200 18481500 0.378 66 chr13 18483900 18484200 0.3246 42 chr13 18485700 18486000 0.1162 23 chr13 18492600 18494100 0.1381 66 chr13 18497400 18498000 0.1321 52 chr13 18503100 18503400 0.3493 69 chr13 18509700 18510300 0.0224 65 chr13 18521700 18522000 0.3118 48 chr13 18538500 18539100 0.2064 55 chr13 18542700 18543000 0.3408 63 chr13 18546900 18548700 0.1235 58 chr13 18550200 18550500 0.1235 58 chr13 18551700 18552900 0 71 chr13 18554400 18557700 0 71 chr13 18565500 18566400 0.1572 55 chr13 18569100 18569400 0.3061 53 chr13 18571200 18572700 0.005 62 chr13 18574500 18574800 0.0945 27 chr13 18576000 18577200 0.0091 64 chr13 18579900 18582000 0.025 46 chr13 18588300 18588600 0.0826 50 chr13 18604200 18604800 0 58 chr13 18608400 18608700 0.0796 38 chr13 18616800 18617100 0.2616 43 chr13 18669900 18670200 0.2181 68 chr13 18671400 18672000 0.0407 48 chr13 18675600 18676200 0.0903 54 chr13 18769200 18771300 0 36 chr13 18778800 18779100 0.4406 62 chr13 18784800 18785400 0.0495 61 chr13 18788700 18790800 0 32 chr13 18801300 18801900 0.0124 56 chr13 18805800 18806100 0.2793 70 chr13 18902700 18903000 0.1139 20 chr13 19107000 19107300 0.1192 79 chr13 19137300 19138500 0.028 168 chr13 19199400 19199700 0.1821 19 chr13 19274400 19277100 0.0816 69 chr13 19278300 19278900 0.1208 38 chr13 19353300 19353600 0.4084 57 chr13 19431900 19432200 0.2636 38 chr13 19497300 19497600 0.0535 34 chr13 19499400 19499700 0.1444 71 chr13 19500900 19501500 0.1444 71 chr13 19559700 19560300 0.2105 78 chr13 19778400 19780500 0.1148 73 chr13 21261600 21261900 0.2881 67 chr13 21377100 21377700 0.2003 347 chr13 21447600 21449100 0.0983 44 chr13 22481100 22481400 0.1837 33 chr13 22577700 22578000 0.1814 60 chr13 24321000 24321300 0.4582 15 chr13 24808500 24808800 0.0331 72 chr13 24810300 24810600 0.3138 62 chr13 25004700 25005000 0.1223 48 chr13 26072700 26073300 0.015 43 chr13 26472600 26472900 0.1739 61 chr13 28265700 28266000 0.1351 28 chr13 29413500 29414400 0.0105 48 chr13 29641800 29647500 0 97 chr13 29669400 29670600 0.0612 66 chr13 30264600 30264900 0.4141 69 chr13 30601500 30601800 0.3775 24 chr13 31302300 31308300 0 118 chr13 32717400 32717700 0.1779 39 chr13 32868000 32869200 0 99 chr13 34480800 34486200 0 78 chr13 34540200 34540500 0.1326 31 chr13 35088900 35089800 0.0432 101 chr13 36009000 36013200 0.0115 78 chr13 36056100 36056400 0.0321 53 chr13 36488100 36488400 0.1019 49 chr13 37150200 37150500 0.2093 99 chr13 37152900 37153200 0.2093 99 chr13 37155300 37155600 0.2825 115 chr13 37314600 37315200 0.0514 70 chr13 37317900 37318500 0.0828 59 chr13 37826100 37826400 0.1076 68 chr13 39001200 39001800 0 73 chr13 39003000 39006000 0 73 chr13 39986700 39987300 0.0174 58 chr13 40005900 40006200 0.1266 64 chr13 40356900 40358400 0.0813 81 chr13 40361400 40362000 0.0813 81 chr13 40832100 40833900 0.0962 72 chr13 40865700 40866000 0.2756 52 chr13 40902600 40902900 0.1953 67 chr13 40957200 40957500 0.2134 58 chr13 41591700 41592000 0.1797 99 chr13 41874000 41874300 0.281 63 chr13 42181800 42182100 0.4815 58 chr13 42372000 42372300 0.3617 20 chr13 42425400 42430500 0.0284 101 chr13 42856800 42857100 0.1935 82 chr13 42965700 42967200 0.0579 50 chr13 43161300 43162200 0.1906 69 chr13 43966800 43967700 0.0966 78 chr13 43971900 43975200 0.0096 86 chr13 44036700 44037300 0.143 64 chr13 44114400 44114700 0.3949 64 chr13 45380400 45381900 0.1471 27 chr13 45484500 45486300 0.0078 112 chr13 45645600 45650400 0.0275 100 chr13 45664200 45664500 0.0498 58 chr13 46515300 46515600 0.2038 45 chr13 47019300 47019900 0.3151 71 chr13 47222400 47224500 0.0241 164 chr13 47715900 47716200 0.2574 77 chr13 47731200 47731500 0.3496 69 chr13 47785500 47787000 0.1871 84 chr13 48427200 48428400 0 81 chr13 48465600 48471600 0 100 chr13 49014000 49014900 0.1873 86 chr13 49153800 49158000 0.0493 75 chr13 49378500 49379700 0.0521 77 chr13 49592400 49593000 0.0893 62 chr13 49799400 49800000 0.1249 108 chr13 50180400 50185800 0 68 chr13 50555400 50555700 0.4271 46 chr13 50982900 50983200 0.2047 78 chr13 50985900 50987700 0.1935 76 chr13 51172800 51173100 0.1807 68 chr13 51641400 51642000 0.241 129 chr13 51774600 51775800 0 53 chr13 52058100 52059600 0.0246 73 chr13 52218900 52220100 0.0815 60 chr13 52229700 52234200 0 71 chr13 52237200 52239000 0 67 chr13 52247400 52248000 0.0506 66 chr13 52252500 52254000 0.0297 63 chr13 52257000 52257600 0.0279 89 chr13 52259400 52260000 0 65 chr13 52261800 52263300 0.0749 61 chr13 52267500 52268100 0.0113 59 chr13 52269900 52274700 0 96 chr13 52278300 52278900 0.0963 53 chr13 52284300 52284600 0.2592 71 chr13 52294200 52294500 0.2805 70 chr13 52296900 52299300 0.0143 60 chr13 52302600 52302900 0.228 67 chr13 52304100 52306500 0.013 64 chr13 52327200 52328100 0.214 73 chr13 52332000 52332600 0.1184 67 chr13 52334100 52334400 0.0475 71 chr13 52488900 52489200 0.0201 61 chr13 52490700 52491600 0.0965 62 chr13 52495200 52496100 0.1615 53 chr13 52498200 52498500 0.2876 58 chr13 52501200 52501500 0.417 51 chr13 52506000 52508700 0.0371 71 chr13 52513200 52515900 0.0249 56 chr13 52518600 52518900 0.1327 47 chr13 52523400 52523700 0.2115 68 chr13 52527900 52528500 0.0209 60 chr13 52530600 52532100 0.0378 65 chr13 52533600 52534200 0.0378 65 chr13 52538400 52540200 0.0252 53 chr13 52543200 52544700 0.0845 66 chr13 52546500 52547100 0.0056 54 chr13 52552500 52554300 0.0412 64 chr13 52557300 52559100 0.0588 72 chr13 52567500 52569300 0 70 chr13 52570500 52570800 0.2668 60 chr13 52572300 52576800 0 66 chr13 52587300 52587600 0.0679 61 chr13 53094000 53094300 0.0213 73 chr13 53095500 53097300 0.0213 73 chr13 55320300 55320600 0.3153 43 chr13 55812900 55813200 0.1871 70 chr13 57139500 57173400 0 168 chr13 57220200 57220500 0.3818 56 chr13 57357900 57358500 0.2095 75 chr13 57401400 57401700 0 22 chr13 58512300 58513800 0.0032 80 chr13 58672800 58677900 0 74 chr13 59027700 59029200 0.2111 69 chr13 59848500 59850000 0 85 chr13 59984700 59986500 0 79 chr13 60714300 60714600 0.2623 58 chr13 60741900 60744000 0.0011 70 chr13 60801300 60801600 0.2203 62 chr13 60977700 60978000 0.3738 99 chr13 63717000 63726900 0 72 chr13 63742500 63742800 0.2887 63 chr13 63744000 63744300 0.3612 55 chr13 63747300 63748500 0 79 chr13 63749700 63755700 0 79 chr13 63759000 63769200 0 70 chr13 63823500 63830400 0 81 chr13 63831600 63832800 0 81 chr13 63835500 63835800 0.2413 53 chr13 63837000 63837300 0.2376 58 chr13 64231500 64232700 0.0331 58 chr13 66738900 66743400 0 71 chr13 67325400 67325700 0.1997 37 chr13 67527900 67528200 0.0451 903 chr13 67563900 67564200 0.2469 69 chr13 67682100 67683600 0.01 87 chr13 70854600 70854900 0.0547 573 chr13 71734200 71734800 0.0263 34 chr13 72382500 72382800 0.256 25 chr13 72613500 72615300 0.199 70 chr13 73574400 73574700 0.3983 46 chr13 73641300 73642200 0.1976 62 chr13 73645800 73646100 0.1523 41 chr13 74236200 74237100 0.0851 71 chr13 74238900 74241000 0.0149 80 chr13 74427000 74431800 0 71 chr13 74539500 74542200 0.1065 78 chr13 75729300 75729600 0.2695 97 chr13 76545300 76548000 0.0325 77 chr13 76613100 76618500 0 88 chr13 77204400 77205000 0.3289 72 chr13 77685000 77685900 0.2062 77 chr13 77704200 77705100 0 34 chr13 78020100 78020400 0.3507 33 chr13 78095100 78095400 0.2212 71 chr13 78153900 78154200 0.2068 40 chr13 79086900 79087200 0.2318 40 chr13 79818600 79822500 0 86 chr13 79840500 79844400 0 63 chr13 80153100 80155200 0.1534 73 chr13 80916900 80918100 0.2343 75 chr13 81067800 81068100 0.3759 36 chr13 81173100 81173400 0.1137 35 chr13 82048800 82050900 0.0017 79 chr13 82499400 82499700 0.3782 58 chr13 82538400 82538700 0.355 77 chr13 82604700 82605000 0.445 40 chr13 82742400 82742700 0.3816 48 chr13 83523000 83523300 0.19 61 chr13 83961600 83966400 0 76 chr13 84502800 84503100 0.2508 63 chr13 85124400 85125000 0.0279 93 chr13 85127400 85128000 0.0279 93 chr13 85395300 85395600 0 12 chr13 85926300 85927800 0.0696 80 chr13 86253000 86258100 0 48 chr13 86259600 86264700 0 48 chr13 86265900 86268900 0 48 chr13 86649300 86649600 0.3657 38 chr13 87074400 87074700 0.3991 20 chr13 87627900 87628200 0.4463 10 chr13 88199700 88200600 0.1504 66 chr13 89090700 89091300 0.2359 101 chr13 90325500 90325800 0.1218 69 chr13 90669000 90669300 0.3463 37 chr13 91605300 91606200 0 72 chr13 92475300 92475600 0.3169 63 chr13 92685600 92691000 0 70 chr13 93490800 93491400 0.0208 67 chr13 93492900 93494400 0.0208 67 chr13 93541200 93541800 0.1642 46 chr13 93844500 93845700 0.2401 76 chr13 94374600 94377600 0.0044 88 chr13 94731900 94732500 0.1758 82 chr13 94819200 94819500 0.011 58 chr13 95350500 95350800 0.1685 29 chr13 95735100 95735400 0.1972 77 chr13 95737800 95738100 0.1972 77 chr13 95908500 95909100 0.3553 61 chr13 96329700 96330900 0.3098 77 chr13 97155900 97157700 0.0602 75 chr13 97611300 97611600 0.3647 60 chr13 97668600 97672800 0.0087 75 chr13 97734300 97734900 0.1516 71 chr13 97765200 97766100 0.2602 70 chr13 99241800 99242100 0.1887 74 chr13 100699500 100700100 0.0868 83 chr13 100701300 100704000 0.0757 71 chr13 104051400 104051700 0.0469 67 chr13 104508900 104509200 0.1496 27 chr13 104654100 104655000 0.0483 65 chr13 105299700 105300900 0.0526 55 chr13 105382200 105382500 0.0517 24 chr13 105386400 105387000 0.1546 88 chr13 106214100 106217700 0.062 76 chr13 106779900 106780500 0.091 75 chr13 106931100 106931400 0.3583 67 chr13 107272200 107272500 0.2738 42 chr13 107921400 107922300 0.1425 56 chr13 107923500 107923800 0.3276 44 chr13 107935200 107935500 0.1467 82 chr13 108237900 108238500 0.1092 76 chr13 108510600 108516000 0 76 chr13 109218000 109218600 0.0024 58 chr13 109488900 109489200 0.1397 88 chr13 109569300 109569600 0.1459 13 chr13 110252700 110253000 0.1655 32 chr13 110385600 110385900 0.3777 176 chr13 110481300 110481900 0.3933 109 chr13 110530200 110530500 0.4488 45 chr13 110580600 110580900 0.3045 54 chr13 111052200 111052500 0.4512 14 chr13 111254700 111255000 0.0128 63 chr13 111340200 111341700 0 145 chr13 111545700 111546000 0.4333 66 chr13 111591900 111592200 0.0828 64 chr13 111669300 111703800 0 47 chr13 111753900 111757200 0 38 chr13 111758400 111781800 0 50 chr13 111783000 111789000 0 46 chr13 112015200 112015800 0.0327 67 chr13 112279200 112279500 0 106 chr13 112281000 112284600 0 106 chr13 112287900 112288500 0.258 143 chr13 112290000 112292400 0 180 chr13 112294200 112296600 0 180 chr13 112298100 112308000 0 133 chr13 112449900 112450200 0.4022 38 chr13 112749900 112750500 0.3937 80 chr13 112786200 112786500 0.2945 57 chr13 113067300 113069400 0.0076 144 chr13 113107500 113107800 0.3647 19 chr13 113136600 113136900 0.1049 28 chr13 113162100 113162700 0.1165 42 chr13 113262900 113263200 0.2145 195 chr13 113314500 113314800 0.2253 28 chr13 113346600 113346900 0.3286 25 chr13 113371500 113371800 0.2113 91 chr13 113375400 113375700 0.2898 42 chr13 113541600 113542200 0 83 chr13 113725800 113726400 0.1697 21 chr13 113745300 113745600 0.4848 47 chr13 113751900 113752200 0.4367 67 chr13 113824200 113824500 0.3519 154 chr13 113831700 113832000 0.401 30 chr13 113899200 113900400 0.0088 38 chr13 113940600 113941200 0 26 chr13 113985900 113986200 0 16 chr13 113987400 113988600 0 15 chr13 114006000 114009000 0.0363 69 chr13 114028800 114029100 0.4161 26 chr13 114070800 114071100 0.4573 73 chr13 114083700 114087000 0 56 chr13 114113700 114114000 0.0602 176 chr13 114120000 114120300 0.4893 42 chr13 114147600 114147900 0.4314 43 chr13 114198900 114199800 0.3073 191 chr13 114348900 114349200 0.2481 74 chr13 114351900 114352200 0.1106 121 chr13 114354000 114354600 0.0536 244 chr14 16023600 16034700 0 185 chr14 16035900 16053900 0 185 chr14 16055100 16055700 0 68 chr14 16056900 16086600 0 68 chr14 16090200 16093500 0 280 chr14 16095900 16098600 0.236 695 chr14 16099800 16100100 0.4726 627 chr14 16101900 16102200 0.4336 436 chr14 16103400 16104000 0.2427 4332 chr14 16133700 16135200 0 154 chr14 16404000 16404300 0.0118 47 chr14 18225000 18225300 0 87 chr14 18226500 18234900 0 87 chr14 18239400 18240000 0.1002 86 chr14 18241200 18246000 0 140 chr14 18247800 18250200 0 140 chr14 18251700 18254400 0 140 chr14 18255600 18258600 0.0601 75 chr14 18259800 18261000 0.0601 75 chr14 18264900 18270900 0 104 chr14 18273300 18273900 0.0048 64 chr14 18276300 18276900 0.0104 75 chr14 18280200 18288900 0.0013 97 chr14 18290400 18291000 0.0013 97 chr14 18293100 18293400 0.1739 74 chr14 18297900 18298200 0.1094 63 chr14 18299700 18301800 0 87 chr14 18303300 18303600 0 81 chr14 18306000 18311100 0 81 chr14 18312900 18315000 0 81 chr14 18316200 18317100 0.0024 60 chr14 18319200 18321000 0.016 65 chr14 18323100 18324900 0 81 chr14 18326100 18329100 0 81 chr14 18331500 18332100 0.0073 74 chr14 18334200 18334800 0 80 chr14 18336000 18339600 0 80 chr14 18341400 18346500 0 80 chr14 18348900 18349800 0.0652 70 chr14 18351600 18370800 0 73 chr14 18372600 18375000 0 73 chr14 18376500 18386100 0 75 chr14 18387600 18388200 0.0085 60 chr14 18389400 18392100 0.0085 60 chr14 18393300 18393600 0.0085 60 chr14 18395400 18396600 0 68 chr14 18398100 18398400 0 68 chr14 18400500 18404400 0.0252 61 chr14 18406500 18406800 0.1429 24 chr14 18410700 18411300 0.017 70 chr14 18413100 18413400 0.017 70 chr14 18414600 18417000 0.0061 70 chr14 18418800 18422100 0.0635 93 chr14 18424200 18425700 0.0097 96 chr14 18427500 18430200 0.0837 73 chr14 18431700 18432000 0 82 chr14 18433500 18434700 0 82 chr14 18435900 18436200 0 82 chr14 18438000 18438900 0 82 chr14 18441300 18446400 0.0383 74 chr14 18448200 18448500 0.0907 82 chr14 18449700 18453600 0.0907 82 chr14 18454800 18456000 0.0541 74 chr14 18462300 18465300 0 83 chr14 18468300 18471000 0.0477 81 chr14 18472500 18475200 0.0324 85 chr14 18476700 18477000 0.0324 85 chr14 18478200 18479700 0.21 81 chr14 18483600 18487500 0.0243 78 chr14 18492300 18493200 0 64 chr14 18494700 18496200 0.2261 81 chr14 18498300 18501000 0 101 chr14 18502500 18503100 0 101 chr14 18504900 18510300 0 83 chr14 18513600 18513900 0.0517 76 chr14 18517800 18520500 0 71 chr14 18522600 18522900 0.0432 71 chr14 18524700 18526500 0.026 88 chr14 18527700 18534300 0 88 chr14 18535800 18538800 0.0021 79 chr14 18541200 18541800 0.0006 46 chr14 18543600 18546300 0 63 chr14 18549000 18553800 0 63 chr14 18555600 18556500 0.0304 68 chr14 18557700 18558900 0.0304 68 chr14 18561600 18561900 0 77 chr14 18563400 18567600 0 77 chr14 18568800 18579300 0 77 chr14 18580800 18581100 0 77 chr14 18583500 18585600 0 69 chr14 18588600 18589800 0.0653 84 chr14 18591300 18593400 0.002 137 chr14 18594900 18595200 0.002 137 chr14 18596400 18605400 0.002 137 chr14 18606900 18608400 0 149 chr14 18610200 18624000 0 149 chr14 18626400 18627000 0 151 chr14 18628200 18631200 0 151 chr14 18632400 18649500 0 151 chr14 18653100 18654600 0.1863 81 chr14 18663600 18663900 0.2951 62 chr14 18696600 18697800 0.0241 140 chr14 18700800 18701100 0.0185 80 chr14 18702900 18705000 0.0185 80 chr14 18706200 18706800 0.0185 80 chr14 18708900 18712500 0.0011 101 chr14 18862500 18929700 0 151 chr14 18931500 18949200 0 151 chr14 18951000 18952500 0.0283 140 chr14 18954600 18958200 0 174 chr14 18959400 18963300 0 174 chr14 18964500 19025100 0 179 chr14 19026300 19026600 0 165 chr14 19028100 19082400 0 165 chr14 19083600 19086300 0 165 chr14 19087800 19096500 0 161 chr14 19099500 19106400 0 124 chr14 19108500 19114200 0 114 chr14 19116000 19118100 0 114 chr14 19119600 19120200 0 122 chr14 19121400 19123200 0 122 chr14 19124700 19125300 0.145 100 chr14 19131000 19134900 0 116 chr14 19137300 19158600 0 134 chr14 19160700 19161000 0 134 chr14 19165200 19165500 0.4713 104 chr14 19176300 19179900 0.0928 113 chr14 19183800 19185000 0.002 112 chr14 19186800 19187100 0.1778 78 chr14 19190700 19191600 0.0762 67 chr14 19203900 19204200 0.2065 70 chr14 19207200 19210200 0 75 chr14 19211700 19215300 0 75 chr14 19216800 19279500 0 149 chr14 19282200 19286400 0 109 chr14 19288500 19288800 0.0308 130 chr14 19290000 19290900 0.0308 130 chr14 19293600 19309800 0 176 chr14 19311300 19312200 0 176 chr14 19313700 19317000 0 176 chr14 19319100 19319400 0.125 48 chr14 19320600 19340400 0 177 chr14 19341900 19371900 0 177 chr14 19374900 19376400 0 177 chr14 19379100 19379400 0.3421 78 chr14 19382400 19383900 0 175 chr14 19385100 19413900 0 175 chr14 19415400 19426200 0 201 chr14 19427700 19442700 0 201 chr14 19444200 19449900 0 201 chr14 19452300 19486200 0 179 chr14 19487700 19488000 0 179 chr14 19489800 19498500 0 128 chr14 19500000 19507500 0 128 chr14 19510200 19510500 0.2188 68 chr14 19612500 19615200 0 141 chr14 19616400 19664400 0 149 chr14 19665600 19666200 0.1605 76 chr14 19671600 19672800 0.181 123 chr14 19681200 19689300 0 119 chr14 19690500 19700400 0 141 chr14 19701600 19702200 0 141 chr14 19703400 19704600 0 141 chr14 19706400 19708200 0 141 chr14 19709700 19713000 0 108 chr14 19714200 19714800 0 108 chr14 19716300 19721100 0 108 chr14 19722600 19722900 0.0248 88 chr14 20107800 20108100 0.0826 50 chr14 20153100 20153400 0.2129 73 chr14 20233800 20234100 0.1342 69 chr14 20266800 20267100 0.3446 58 chr14 20505900 20507700 0.1021 110 chr14 20882100 20883900 0 69 chr14 20946300 20946900 0.058 68 chr14 21183300 21183600 0.4225 25 chr14 22637400 22639200 0.1985 81 chr14 22674600 22676100 0 65 chr14 22680000 22681200 0 75 chr14 23920200 23921700 0.0207 62 chr14 23957700 23958000 0.344 57 chr14 23961900 23962500 0.2756 54 chr14 23964600 23964900 0.2756 54 chr14 23967600 23968200 0.04 70 chr14 23979600 23980500 0.002 59 chr14 23997000 23997600 0.2518 51 chr14 23999700 24000000 0.376 51 chr14 24002100 24005400 0.0144 88 chr14 24022500 24023100 0.0151 54 chr14 24111900 24113100 0 67 chr14 24486300 24489900 0 68 chr14 25205100 25205400 0.1738 65 chr14 25207800 25208100 0.1799 50 chr14 25947900 25948200 0.287 61 chr14 26215800 26216100 0.4155 62 chr14 26297100 26297400 0.2404 71 chr14 26298900 26299500 0.2239 58 chr14 26495700 26496000 0.2354 31 chr14 26630100 26634000 0.0271 84 chr14 26675700 26676300 0.0353 67 chr14 26678100 26678700 0.1696 66 chr14 27044700 27045000 0.2014 66 chr14 27459900 27460800 0.0721 60 chr14 27678000 27678900 0.0171 96 chr14 28178400 28178700 0.3168 50 chr14 28191600 28191900 0.3277 95 chr14 28193400 28194000 0.0309 65 chr14 28314000 28314300 0.2095 65 chr14 28402500 28402800 0.2721 40 chr14 28414800 28415100 0.2824 72 chr14 28545300 28545600 0.2418 49 chr14 29478600 29481000 0.0364 83 chr14 30364800 30367500 0.001 102 chr14 30368700 30369000 0.001 102 chr14 30475500 30475800 0.4775 59 chr14 30477300 30477900 0.2039 75 chr14 30684900 30690600 0 90 chr14 31247700 31248000 0.2694 63 chr14 31249200 31249500 0.1281 54 chr14 31473900 31474200 0.3925 34 chr14 31794000 31797900 0 59 chr14 32217000 32217300 0.3269 13 chr14 32269200 32269500 0.0992 67 chr14 34185900 34186200 0.225 100 chr14 34205400 34205700 0.0684 63 chr14 34294800 34297200 0 61 chr14 34348800 34349100 0.4601 12 chr14 34443300 34443600 0.4764 37 chr14 34540800 34547700 0 75 chr14 34555500 34562100 0 73 chr14 35038500 35040300 0.0803 60 chr14 35948400 35949600 0.2264 75 chr14 35976900 35977500 0.4238 63 chr14 36143100 36145800 0.0506 89 chr14 36186600 36187200 0.3151 74 chr14 36188400 36190500 0.0573 84 chr14 37352100 37353000 0.0379 53 chr14 37354500 37354800 0.1613 36 chr14 38640600 38640900 0.4137 60 chr14 39511800 39512400 0.0904 46 chr14 39517500 39517800 0.1035 75 chr14 39521700 39522300 0.287 93 chr14 39629400 39630900 0.0139 77 chr14 39936000 39936300 0.2272 75 chr14 40327500 40328700 0.038 87 chr14 40331100 40331700 0.0309 42 chr14 40349400 40350000 0.1715 79 chr14 40351500 40352100 0.1455 57 chr14 40423200 40423500 0.313 79 chr14 40719000 40720200 0.0394 92 chr14 40728900 40730400 0.0047 68 chr14 40952100 40952700 0.1698 84 chr14 41420400 41420700 0.232 36 chr14 41492400 41492700 0.2581 25 chr14 42956100 42956400 0.2169 68 chr14 42969000 42969300 0.2038 84 chr14 43065600 43066200 0 62 chr14 43256700 43257000 0.3508 31 chr14 43266600 43266900 0.2773 46 chr14 43371600 43372800 0.0537 66 chr14 43405800 43406100 0.1321 60 chr14 43494900 43495200 0.3048 49 chr14 43601700 43603200 0.0716 75 chr14 44643300 44644500 0.0137 72 chr14 44674800 44675100 0.3101 65 chr14 44705100 44710800 0 87 chr14 44891400 44891700 0.1947 84 chr14 44916300 44916600 0.233 17 chr14 45389100 45389700 0.1786 95 chr14 45477300 45482700 0.0554 83 chr14 45844500 45845100 0.1236 72 chr14 45884100 45888000 0.042 67 chr14 46726500 46727400 0 52 chr14 47795400 47798400 0.2082 74 chr14 47902200 47903700 0.0766 56 chr14 48187200 48192300 0 79 chr14 48314700 48315300 0.1928 61 chr14 48453600 48454200 0.1625 65 chr14 48938700 48939000 0.1145 14 chr14 49097700 49098300 0.1031 72 chr14 49100100 49100400 0.1257 96 chr14 49101900 49102200 0.2023 73 chr14 49535100 49535400 0.1554 64 chr14 49821300 49821600 0.2819 13 chr14 50074200 50074800 0.0177 31 chr14 51134700 51135000 0.319 21 chr14 51794700 51799800 0 76 chr14 52065600 52065900 0.1727 45 chr14 52255800 52257000 0.0272 71 chr14 52638600 52638900 0.4306 58 chr14 53268000 53268300 0.2899 70 chr14 53269800 53270400 0.2175 67 chr14 53909400 53911200 0.0289 81 chr14 55024800 55025100 0.0474 65 chr14 55988400 55992900 0.0342 91 chr14 56014200 56014500 0.1854 64 chr14 56017200 56018100 0.1232 78 chr14 56442000 56447400 0.0011 89 chr14 56667900 56673300 0.0055 113 chr14 56988900 56989200 0.3366 68 chr14 57552300 57552600 0.15 55 chr14 57626100 57626400 0.1979 50 chr14 57628200 57628500 0.1983 50 chr14 58032900 58038300 0 93 chr14 58962300 58962900 0.0797 34 chr14 59946900 59951400 0.0203 85 chr14 60341400 60341700 0.1346 54 chr14 60399000 60399300 0.0385 55 chr14 60524700 60525000 0.1491 53 chr14 60604800 60606000 0 70 chr14 60611700 60613200 0 76 chr14 60888600 60888900 0.3079 39 chr14 61055100 61060800 0 88 chr14 62284800 62285400 0.031 24 chr14 62286600 62288400 0.04 72 chr14 62536200 62541900 0 65 chr14 62640300 62640600 0.3944 84 chr14 62874900 62875200 0.2906 73 chr14 62948700 62949000 0.2576 71 chr14 63116700 63122700 0 86 chr14 63864900 63865500 0.3042 65 chr14 63870300 63870600 0.0846 59 chr14 64893900 64896600 0 65 chr14 64978800 64979400 0.0101 86 chr14 66835800 66836100 0.3431 60 chr14 67870500 67870800 0.1586 68 chr14 67872000 67872600 0.229 105 chr14 70424400 70425000 0.0128 70 chr14 70476300 70476600 0.0531 95 chr14 70480800 70482000 0.0077 67 chr14 70547400 70553100 0 94 chr14 70959900 70960200 0.0907 83 chr14 71037300 71038500 0.0972 72 chr14 71368200 71370300 0 85 chr14 71843400 71844300 0.0058 67 chr14 71846400 71847600 0.0058 67 chr14 71978100 71978400 0.3533 36 chr14 71979900 71981100 0.1087 78 chr14 73516200 73516500 0.1728 42 chr14 73543500 73543800 0.0094 63 chr14 73545300 73545600 0.3172 39 chr14 73549500 73550100 0.2293 44 chr14 73557600 73557900 0.3301 47 chr14 73575000 73575300 0.1502 68 chr14 73581900 73582200 0.1821 42 chr14 74994900 74995800 0 99 chr14 76750800 76751100 0.4797 23 chr14 77269500 77270100 0.285 178 chr14 79048800 79049100 0.3605 32 chr14 79128000 79129800 0.2353 91 chr14 79308900 79314600 0 73 chr14 79771500 79771800 0.222 87 chr14 80031000 80031300 0.3635 84 chr14 80858400 80858700 0.1856 67 chr14 81116100 81120000 0 87 chr14 81861300 81861600 0.0365 130 chr14 81863100 81863400 0.1756 53 chr14 82348800 82351200 0 77 chr14 82352400 82352700 0 77 chr14 82675500 82675800 0.4309 15 chr14 83169600 83169900 0.0379 40 chr14 83202300 83204700 0.0635 71 chr14 83642700 83643000 0.2234 60 chr14 85846800 85847700 0 19 chr14 85885800 85890900 0 80 chr14 86106900 86107500 0.1489 49 chr14 86246100 86246400 0.1277 69 chr14 86473200 86473500 0.1164 67 chr14 86878500 86879100 0.2639 45 chr14 87391800 87392100 0.3015 42 chr14 87415500 87415800 0.2409 76 chr14 89360700 89362800 0.2027 80 chr14 90207600 90207900 0.2539 73 chr14 90246300 90246600 0.1611 42 chr14 90525600 90525900 0.2943 61 chr14 91432800 91436400 0.0086 102 chr14 91640400 91645800 0 88 chr14 92640300 92640600 0.2054 38 chr14 92910900 92912100 0.0165 92 chr14 93413400 93413700 0.3083 64 chr14 93722100 93722400 0.1243 50 chr14 94590900 94591200 0.3329 126 chr14 96883500 96883800 0.2431 66 chr14 99332700 99333000 0.3797 51 chr14 99420900 99421200 0.067 549 chr14 99927900 99928200 0.2305 571 chr14 100685700 100686000 0.1916 12 chr14 100869300 100870800 0 36 chr14 101266800 101268600 0.0209 91 chr14 101270400 101271600 0.1025 80 chr14 101524500 101524800 0.3532 38 chr14 101572200 101572500 0.2652 43 chr14 102677400 102678000 0.09 137 chr14 103062600 103062900 0.3882 57 chr14 104217000 104217600 0.2782 47 chr14 104250900 104252100 0.009 155 chr14 104720700 104721000 0.3782 45 chr14 105110700 105113100 0.0016 79 chr14 105229800 105240900 0 254 chr14 105276000 105277500 0.1955 58 chr14 105459600 105459900 0.2065 14 chr14 105520800 105521400 0.1125 92 chr14 105559800 105560400 0.0357 58 chr14 105561600 105562200 0.1869 61 chr14 105566100 105566400 0.0228 49 chr14 105572400 105572700 0.0632 15 chr14 105574800 105576000 0.0043 74 chr14 105578700 105579300 0.005 80 chr14 105584700 105585000 0.4252 68 chr14 105594300 105596400 0.0089 69 chr14 105597600 105597900 0.1384 54 chr14 105603900 105604200 0.1676 65 chr14 105607500 105608400 0.0195 50 chr14 105618300 105619200 0.3612 51 chr14 105626400 105627000 0.199 83 chr14 105638100 105638400 0.2742 30 chr14 105645300 105645600 0.0995 53 chr14 105661500 105661800 0.3999 30 chr14 105678900 105679200 0.3968 26 chr14 105680400 105680700 0.0597 59 chr14 105682200 105682500 0.109 70 chr14 105685800 105686400 0.0652 64 chr14 105692400 105693300 0.0008 75 chr14 105695700 105696900 0.0199 74 chr14 105714600 105717000 0.0048 87 chr14 105719400 105719700 0.2441 54 chr14 105722700 105723000 0.1678 52 chr14 105726600 105726900 0.2132 56 chr14 105735000 105737100 0.0126 47 chr14 105740700 105741000 0.2089 81 chr14 105755700 105756300 0.1898 53 chr14 105768600 105768900 0.449 101 chr14 105850500 105850800 0.3276 78 chr14 105867600 105867900 0.0144 20 chr14 105947100 105947400 0.354 45 chr14 106001100 106001400 0.1507 27 chr14 106335300 106335900 0.0161 125 chr14 106337400 106337700 0.0161 125 chr14 106341600 106342200 0.0211 69 chr14 106360200 106360800 0.0232 98 chr14 106362000 106362600 0.0154 94 chr14 106366500 106366800 0.3471 101 chr14 106464300 106464600 0.3459 15 chr14 106471800 106473300 0 32 chr14 106476600 106481700 0 74 chr14 106483500 106483800 0 74 chr14 106639800 106640100 0.1647 63 chr14 106701600 106703100 0 56 chr14 106716300 106716900 0.0848 71 chr14 106720500 106721100 0.0229 68 chr14 106744500 106744800 0.2282 49 chr14 106748100 106749600 0 55 chr14 106752300 106753200 0.2945 347 chr14 106761300 106761900 0.2263 55 chr14 106763700 106764300 0.1501 81 chr14 106767600 106768200 0.0711 64 chr15 17000100 17009100 0 102 chr15 17080500 17446200 0 2089 chr15 17447400 17457900 0 69 chr15 17459400 17498400 0 345 chr15 17500500 17502600 0 100 chr15 17504700 17506200 0 43 chr15 17507400 17766600 0 139 chr15 17767800 17913900 0 139 chr15 17915100 18046500 0 129 chr15 18048600 18217800 0 140 chr15 18219300 18316200 0 140 chr15 18317400 18341100 0 97 chr15 18343200 18355800 0 97 chr15 18357000 18801900 0 525 chr15 18804000 18910800 0 362 chr15 18912600 19344900 0 362 chr15 19346400 19467300 0 275 chr15 19468500 19563300 0 275 chr15 19564500 19724700 0 289 chr15 19775400 19783500 0 125 chr15 19789200 19789500 0 27 chr15 19817100 19818600 0 69 chr15 19820400 19820700 0.451 231 chr15 19993500 19994100 0.0591 56 chr15 19995900 19996200 0.1375 56 chr15 19998300 19998600 0.1873 59 chr15 19999800 20000100 0.2526 50 chr15 20004600 20009700 0 52 chr15 20013600 20016900 0 60 chr15 20018400 20019600 0.0104 52 chr15 20022300 20028000 0 71 chr15 20029200 20031600 0 71 chr15 20035200 20036700 0 56 chr15 20039700 20041800 0 54 chr15 20043600 20046000 0 53 chr15 20047800 20053800 0.0025 59 chr15 20057400 20057700 0.3866 35 chr15 20063700 20095200 0 68 chr15 20096700 20104500 0 352 chr15 20106900 20113800 0 86 chr15 20116200 20116800 0 86 chr15 20118000 20144400 0 86 chr15 20145600 20147700 0 68 chr15 20148900 20153100 0 68 chr15 20154600 20155800 0.0539 55 chr15 20158500 20167800 0 79 chr15 20169900 20175600 0 79 chr15 20176800 20179800 0 79 chr15 20181900 20185500 0 66 chr15 20314500 20314800 0.2999 88 chr15 20330100 20330700 0.01 70 chr15 20332200 20332500 0.0422 61 chr15 20423400 20437800 0 57 chr15 20439900 20440500 0.0229 46 chr15 20442000 20447400 0 133 chr15 20448600 20534400 0 133 chr15 20535600 20562000 0 133 chr15 20563500 20586300 0 133 chr15 20588700 20604000 0 61 chr15 20605800 20611800 0 61 chr15 20613300 20614500 0 60 chr15 20615700 20616000 0 60 chr15 20617200 20623500 0 60 chr15 20626500 20628300 0 57 chr15 20630100 20640900 0 61 chr15 20673600 20675100 0 51 chr15 20678400 20678700 0.1311 31 chr15 20680200 20680500 0.1508 39 chr15 20682000 20682300 0.0999 32 chr15 20685000 20685300 0.06 34 chr15 20730600 20733300 0.009 42 chr15 20736000 20754000 0 45 chr15 20755200 20757300 0 27 chr15 20760000 20791800 0 48 chr15 20793000 20793600 0 20 chr15 20796000 20844000 0 58 chr15 20845200 20848200 0 51 chr15 20849400 20859600 0 51 chr15 20860800 20935500 0 51 chr15 20937900 20946600 0 44 chr15 20947800 20951100 0 44 chr15 20952600 20954100 0 44 chr15 20955300 20957100 0 44 chr15 20959800 20960100 0.274 30 chr15 20961600 20961900 0.274 30 chr15 20963700 20986200 0 43 chr15 20989500 20990400 0 32 chr15 20992200 20992500 0 56 chr15 20994600 21001200 0 56 chr15 21002400 21015900 0 56 chr15 21020100 21023700 0 53 chr15 21025200 21038400 0 64 chr15 21040200 21043200 0 49 chr15 21045600 21052800 0 67 chr15 21054600 21061200 0 49 chr15 21064200 21064500 0.3193 33 chr15 21065700 21069000 0 62 chr15 21070800 21102600 0 62 chr15 21103800 21150900 0 367 chr15 21152100 21159600 0 367 chr15 21161100 21163500 0 367 chr15 21164700 21192900 0 367 chr15 21243300 21244200 0 38 chr15 21247500 21248100 0.0867 33 chr15 21251100 21251400 0.1077 34 chr15 21254100 21254400 0.2156 40 chr15 21274800 21276000 0 39 chr15 21277200 21283500 0 48 chr15 21285000 21285300 0 48 chr15 21286500 21291300 0 48 chr15 21293100 21301500 0 62 chr15 21302700 21317100 0 45 chr15 21318600 21319200 0 26 chr15 21320700 21327000 0 39 chr15 21330000 21331800 0 57 chr15 21333000 21360600 0 57 chr15 21362400 21362700 0 30 chr15 21364500 21379800 0 46 chr15 21381600 21408900 0 65 chr15 21410400 21417000 0 44 chr15 21418200 21419700 0 36 chr15 21420900 21421200 0 57 chr15 21422400 21428100 0 57 chr15 21429600 21430200 0 57 chr15 21431400 21432900 0 57 chr15 21434100 21449400 0 44 chr15 21450900 21456600 0 44 chr15 21458100 21458400 0.022 30 chr15 21460200 21483000 0 66 chr15 21484800 21509400 0 36 chr15 21510600 21514500 0 24 chr15 21515700 21516300 0 24 chr15 21517800 21526200 0 24 chr15 21527400 21529800 0 24 chr15 21537900 21544200 0.0041 55 chr15 21545700 21547200 0.0041 55 chr15 21551100 21559800 0 32 chr15 21562200 21568200 0 59 chr15 21569700 21573900 0.0009 35 chr15 21576300 21584400 0 38 chr15 21585600 21586800 0 38 chr15 21588000 21600300 0 55 chr15 21601800 21608400 0 55 chr15 21610800 21612900 0 55 chr15 21614700 21622200 0 33 chr15 21624000 21635100 0 51 chr15 21636900 21640500 0 30 chr15 21641700 21642000 0.0318 13 chr15 21644400 21651900 0 41 chr15 21654300 21747900 0 45 chr15 21749400 21750300 0 37 chr15 21751500 21763500 0 49 chr15 21764700 21778500 0 49 chr15 21828900 21854100 0 61 chr15 21855600 21870300 0 61 chr15 21871500 21920400 0 47 chr15 21922200 21928500 0 47 chr15 21929700 21954600 0 47 chr15 21955800 21986700 0 47 chr15 21988500 21997500 0 58 chr15 21998700 22002900 0 58 chr15 22005300 22035900 0 58 chr15 22037100 22042800 0 58 chr15 22044900 22048200 0 30 chr15 22050600 22051500 0 14 chr15 22052700 22053000 0 54 chr15 22054500 22056000 0 54 chr15 22057200 22079400 0 54 chr15 22080600 22101000 0 39 chr15 22102500 22121100 0 29 chr15 22122600 22124700 0.0024 25 chr15 22128000 22190700 0 52 chr15 22191900 22202100 0 52 chr15 22203300 22220400 0 52 chr15 22302000 22302600 0 58 chr15 22303800 22307100 0 58 chr15 22359300 22370400 0 64 chr15 22371600 22383000 0 55 chr15 22384500 22386900 0 68 chr15 22388700 22394700 0 68 chr15 22396500 22412100 0 68 chr15 22414200 22416600 0 68 chr15 22418100 22418700 0 68 chr15 22420500 22422000 0.2123 72 chr15 22423200 22443900 0 125 chr15 22445100 22448400 0 125 chr15 22449900 22482300 0 125 chr15 22484100 22494300 0 125 chr15 22496400 22496700 0 125 chr15 22498200 22499100 0 86 chr15 22500300 22502700 0 86 chr15 22503900 22511700 0 86 chr15 22513800 22529700 0 86 chr15 22531200 22546200 0 77 chr15 22547700 22551900 0 77 chr15 22553700 22557900 0 78 chr15 22560000 22560600 0.02 53 chr15 22562100 22564200 0.0052 82 chr15 22565400 22570500 0.0052 82 chr15 22573800 22581300 0 76 chr15 22583400 22583700 0.0171 70 chr15 22585200 22588800 0.0171 70 chr15 22591800 22593900 0.1487 67 chr15 22602600 22602900 0.0145 64 chr15 22605600 22606200 0.0749 63 chr15 22608600 22610100 0.0307 67 chr15 22614300 22614600 0.1967 72 chr15 22615800 22616100 0.1967 72 chr15 22673100 22674900 0.1243 66 chr15 22676100 22678800 0.0653 60 chr15 22680000 22680300 0.1562 63 chr15 22686600 22686900 0.3937 62 chr15 22704600 22704900 0.0952 29 chr15 22745400 22745700 0.3302 60 chr15 22770300 22770600 0.0054 28 chr15 23124300 23173800 0 101 chr15 23175300 23175600 0.0341 90 chr15 23177400 23178600 0.0341 90 chr15 23182800 23183700 0 98 chr15 23186400 23186700 0.2402 90 chr15 23188200 23189400 0.2023 135 chr15 23191500 23192400 0.2023 135 chr15 23194800 23196000 0 138 chr15 23197500 23198100 0 138 chr15 23199300 23200200 0 138 chr15 23202000 23202300 0.1363 113 chr15 23203800 23204400 0.1363 113 chr15 23206500 23208600 0.0152 90 chr15 23210100 23210400 0.0409 100 chr15 23212500 23213400 0.0409 100 chr15 23216400 23218800 0.0409 100 chr15 23221500 23221800 0.2066 50 chr15 23277000 23295300 0 87 chr15 23296500 23297100 0.0437 63 chr15 23298900 23299500 0.0422 56 chr15 23303400 23303700 0.1532 69 chr15 23313000 23357400 0 137 chr15 23358900 23359200 0 137 chr15 23362800 23364000 0.0399 90 chr15 23366700 23367600 0.2048 69 chr15 23428500 23433900 0 71 chr15 23445000 23445300 0.089 11 chr15 23676300 23676600 0.3703 33 chr15 23993100 23993400 0.3102 18 chr15 24134100 24135000 0.0002 61 chr15 24137400 24138600 0.0207 59 chr15 24191700 24192300 0.0057 58 chr15 24261600 24261900 0.2824 57 chr15 24357900 24358200 0.2368 55 chr15 24918600 24918900 0.4441 13 chr15 25459500 25459800 0.1934 63 chr15 25528200 25528500 0.4428 166 chr15 25758000 25758900 0.0241 304 chr15 27852600 27853200 0.1756 142 chr15 27998400 27999000 0.3456 65 chr15 28146900 28147200 0.3307 60 chr15 28200900 28201200 0.4741 59 chr15 28202400 28203300 0.0054 65 chr15 28205400 28206000 0.1991 71 chr15 28213200 28213500 0.0468 54 chr15 28234500 28234800 0.2326 80 chr15 28302300 28302600 0.3276 62 chr15 28305300 28305900 0.4165 65 chr15 28318800 28319100 0.2612 56 chr15 28322100 28372800 0 145 chr15 28374600 28429500 0 145 chr15 28430700 28440000 0 102 chr15 28441200 28452300 0 102 chr15 28465500 28470900 0 93 chr15 28472700 28475700 0 121 chr15 28478400 28479300 0 136 chr15 28480800 28491300 0 136 chr15 28495500 28508400 0 136 chr15 28509600 28510800 0 136 chr15 28512300 28513800 0 122 chr15 28515300 28541100 0 122 chr15 28542300 28573500 0 122 chr15 28574700 28581600 0 122 chr15 28582800 28590600 0 122 chr15 28592400 28600500 0.0299 73 chr15 28602300 28606800 0 71 chr15 28608300 28609500 0 75 chr15 28611000 28611300 0 75 chr15 28612500 28613400 0 75 chr15 28614600 28628100 0 75 chr15 28629600 28633200 0 75 chr15 28634700 28641000 0 75 chr15 28642200 28646400 0 62 chr15 28648500 28652400 0 93 chr15 28654800 28656300 0.0581 66 chr15 28658100 28658700 0.0581 66 chr15 28659900 28661700 0 62 chr15 28662900 28674600 0 75 chr15 28679700 28683300 0 64 chr15 28687500 28688400 0.2336 61 chr15 28696800 28697400 0.0291 59 chr15 28699500 28700700 0.1711 55 chr15 28709100 28710900 0.2253 74 chr15 28723800 28724100 0.3585 57 chr15 28746600 28748100 0.1696 59 chr15 28749300 28752000 0.1696 59 chr15 28753500 28753800 0.2013 65 chr15 28759500 28759800 0.2547 53 chr15 28770900 28771200 0.253 33 chr15 28789200 28789500 0.2459 45 chr15 30082800 30089400 0 104 chr15 30090900 30091200 0 104 chr15 30093600 30093900 0.244 50 chr15 30095700 30103800 0 99 chr15 30105300 30122700 0 99 chr15 30125400 30135900 0 99 chr15 30137700 30144600 0 99 chr15 30145800 30148800 0 99 chr15 30150000 30150300 0 99 chr15 30152400 30153000 0.0782 59 chr15 30155700 30156000 0.2956 30 chr15 30158400 30162000 0 53 chr15 30163500 30174900 0 61 chr15 30177000 30180900 0 64 chr15 30183000 30189300 0 58 chr15 30190500 30191100 0 58 chr15 30192600 30195600 0 66 chr15 30197700 30208500 0 66 chr15 30210000 30211200 0 66 chr15 30212700 30224100 0 66 chr15 30225900 30227400 0 66 chr15 30228900 30245400 0 82 chr15 30246600 30247200 0 82 chr15 30248400 30252600 0 64 chr15 30253800 30256200 0 64 chr15 30257400 30291000 0 64 chr15 30292200 30317700 0 68 chr15 30319200 30321300 0 49 chr15 30322500 30327300 0 96 chr15 30328800 30346500 0 96 chr15 30348000 30374700 0 96 chr15 30376200 30442200 0 96 chr15 30445500 30477300 0 73 chr15 30478800 30483300 0 73 chr15 30494100 30503400 0 64 chr15 30505500 30511500 0 54 chr15 30513000 30515100 0 62 chr15 30516600 30520800 0 62 chr15 30522900 30526500 0.0359 62 chr15 30527700 30567000 0 96 chr15 30568200 30585000 0 91 chr15 30586200 30587700 0 91 chr15 30589500 30591600 0 91 chr15 30592800 30596700 0 91 chr15 30597900 30602400 0 75 chr15 30604500 30604800 0.0275 80 chr15 30606900 30607500 0.0299 82 chr15 30610200 30612300 0.0315 86 chr15 30613500 30613800 0.0315 86 chr15 30640200 30640500 0.0549 63 chr15 30652800 30653400 0.1413 48 chr15 30656700 30657000 0.4552 66 chr15 30681600 30682200 0.1024 67 chr15 30692700 30693300 0.2152 69 chr15 30699000 30701700 0 68 chr15 30703500 30703800 0.2091 63 chr15 30706800 30707100 0.2793 51 chr15 30710100 30710400 0.2921 55 chr15 30713700 30714000 0.3191 55 chr15 30751500 30751800 0.0428 65 chr15 30755400 30755700 0.1171 55 chr15 30832200 30832500 0.395 63 chr15 31510800 31511700 0.0627 28 chr15 31620600 31620900 0.2851 37 chr15 31650000 31650900 0.0981 56 chr15 31653900 31655400 0.1252 58 chr15 31691700 31692600 0.0084 58 chr15 31695300 31696500 0.125 59 chr15 31701900 31702200 0.1716 59 chr15 31704000 31707300 0 84 chr15 31712400 31712700 0.2852 62 chr15 31723500 31724100 0.1813 57 chr15 31912500 31913100 0.2718 40 chr15 32154000 32165400 0 74 chr15 32166600 32183100 0 74 chr15 32186400 32187600 0 74 chr15 32188800 32207400 0 74 chr15 32208900 32216400 0 62 chr15 32225100 32225400 0 79 chr15 32226600 32246700 0 79 chr15 32247900 32279100 0 79 chr15 32280300 32309700 0 79 chr15 32311200 32312700 0.0211 60 chr15 32314500 32323200 0 62 chr15 32324400 32325300 0 62 chr15 32328300 32328900 0.048 35 chr15 32330400 32336700 0 59 chr15 32338200 32339400 0 59 chr15 32340600 32340900 0 59 chr15 32343300 32346000 0 69 chr15 32347500 32355600 0 69 chr15 32357700 32375100 0 65 chr15 32376900 32381100 0 60 chr15 32382600 32382900 0.0022 39 chr15 32385300 32385900 0.087 54 chr15 32387400 32397300 0 85 chr15 32398500 32404800 0 92 chr15 32406600 32407200 0 83 chr15 32408400 32409600 0 83 chr15 32410800 32412900 0 83 chr15 32414100 32414400 0.3429 41 chr15 32416200 32420400 0 81 chr15 32422500 32439600 0 82 chr15 32440800 32484600 0 110 chr15 32485800 32491200 0 110 chr15 32492700 32502300 0 110 chr15 32504100 32513700 0 58 chr15 32524500 32551500 0 63 chr15 32552700 32562000 0 63 chr15 32563500 32564400 0 63 chr15 32565600 32572800 0 63 chr15 32576700 32606400 0 145 chr15 32630100 32630400 0.0579 56 chr15 34381800 34408800 0 107 chr15 34410000 34416900 0 107 chr15 34419300 34419900 0.0005 85 chr15 34422000 34422900 0.0005 85 chr15 34523700 34524000 0.1112 24 chr15 34527900 34563300 0 86 chr15 34565100 34567200 0 79 chr15 34568400 34571100 0.0031 91 chr15 34638600 34638900 0.2976 26 chr15 34716900 34717200 0.2083 57 chr15 36197700 36198000 0.1263 80 chr15 36199200 36199500 0.1263 80 chr15 36683100 36684000 0.013 70 chr15 37430100 37430700 0.1018 90 chr15 37473900 37474200 0.3218 50 chr15 37515000 37515300 0.1829 48 chr15 38787300 38787600 0.1148 47 chr15 38974800 38975100 0.2043 15 chr15 39421800 39425400 0.0216 100 chr15 39522900 39523500 0.1763 59 chr15 40681800 40684200 0.0075 57 chr15 41382300 41384100 0.0484 107 chr15 41725500 41725800 0.3161 25 chr15 43561500 43596300 0 81 chr15 43599600 43599900 0.0334 55 chr15 43605600 43607400 0 73 chr15 43610400 43619400 0 89 chr15 43642500 43642800 0.0971 49 chr15 43652700 43653600 0.2056 93 chr15 43660200 43696200 0 81 chr15 43699200 43699800 0.1456 69 chr15 43705200 43706400 0 71 chr15 43709700 43718700 0 81 chr15 43738500 43739100 0.1073 52 chr15 44252700 44257800 0 110 chr15 44823600 44826900 0 80 chr15 44856900 44857500 0.169 63 chr15 44888400 44888700 0.3241 59 chr15 44922900 44923200 0.1014 58 chr15 44936400 44936700 0.0814 76 chr15 44943600 44943900 0.1975 74 chr15 44967600 44968200 0.2735 57 chr15 44998200 44998500 0.1658 71 chr15 45031800 45032100 0.0398 53 chr15 45043200 45043500 0.2875 60 chr15 45071700 45072300 0 76 chr15 45073800 45076800 0 76 chr15 45111000 45111300 0.4069 65 chr15 45135600 45135900 0.4096 51 chr15 45462600 45462900 0.3075 27 chr15 45598500 45599700 0.0008 71 chr15 45775800 45776100 0.1986 49 chr15 46107000 46107300 0.0961 61 chr15 46368600 46368900 0.1938 47 chr15 46745700 46746300 0.1353 105 chr15 46748100 46748700 0.1353 105 chr15 46998000 46998900 0.0076 67 chr15 47133600 47134200 0.0728 60 chr15 47166600 47166900 0.2955 69 chr15 47169600 47170800 0.1953 86 chr15 47279100 47279400 0.1814 42 chr15 49263000 49263600 0.1148 53 chr15 49356300 49356900 0.0177 77 chr15 49398300 49400400 0.0046 77 chr15 49401600 49401900 0.0046 77 chr15 50833800 50834100 0.3008 23 chr15 51032100 51032400 0.1916 89 chr15 51174600 51178800 0.0619 95 chr15 51417300 51423300 0 93 chr15 51583200 51585300 0 41 chr15 52233000 52233300 0 18 chr15 52907100 52908000 0.0082 43 chr15 53136900 53139300 0 94 chr15 53156100 53157000 0 63 chr15 53495100 53495700 0.0242 80 chr15 53496900 53497200 0.0242 80 chr15 53541600 53542800 0.1294 84 chr15 53544000 53544600 0.25 88 chr15 53545800 53546100 0.3543 28 chr15 54051900 54052500 0.1057 66 chr15 54477000 54477300 0.3362 61 chr15 54926100 54932100 0 121 chr15 55065600 55065900 0.0837 68 chr15 55068300 55068900 0.0837 68 chr15 55987200 55987800 0.0034 62 chr15 56136300 56136900 0.3286 67 chr15 56138100 56138400 0.3817 80 chr15 56311500 56314500 0.0787 119 chr15 56331900 56332200 0.3603 24 chr15 56575500 56576100 0.1565 72 chr15 57687600 57688200 0.061 21 chr15 58126200 58127100 0.0111 81 chr15 58128900 58131600 0.0111 81 chr15 59420700 59421000 0 21 chr15 59539500 59539800 0.3388 26 chr15 60366600 60368100 0.1586 61 chr15 60816000 60816600 0.0718 21 chr15 60950400 60951000 0.2639 76 chr15 60953100 60953400 0.2639 76 chr15 61899000 61899300 0.1187 74 chr15 64139400 64139700 0.1712 48 chr15 64327800 64331700 0.0716 102 chr15 65167200 65167500 0.4243 123 chr15 65864100 65864400 0.2684 10 chr15 66341400 66341700 0.3598 32 chr15 66450000 66452100 0 73 chr15 68133900 68136000 0 30 chr15 68691300 68691600 0.17 20 chr15 70130100 70130400 0.4493 53 chr15 70729800 70735200 0 87 chr15 70988100 70988400 0.1327 71 chr15 71095200 71096100 0.2187 80 chr15 71134800 71135100 0.39 73 chr15 71175000 71180100 0 93 chr15 71587200 71587500 0.2374 35 chr15 71593200 71593500 0.2442 36 chr15 71769000 71769900 0.0654 72 chr15 71793600 71796300 0.3063 81 chr15 71907300 71907600 0.1512 63 chr15 72102000 72102300 0.2884 77 chr15 72631800 72663300 0 136 chr15 72664500 72668700 0 136 chr15 72670200 72670500 0 136 chr15 73219500 73219800 0.0949 76 chr15 73510500 73512900 0.0215 78 chr15 73533000 73535100 0.0238 81 chr15 74068500 74071800 0 145 chr15 74073600 74092200 0 159 chr15 74093700 74102400 0 159 chr15 74103600 74105700 0 159 chr15 74977200 74977500 0.0438 19 chr15 75255600 75272400 0 147 chr15 75273600 75273900 0.2675 57 chr15 75276600 75295200 0 134 chr15 75480900 75481200 0.1983 67 chr15 75702900 75703200 0.0784 55 chr15 75708000 75708600 0.1157 60 chr15 75716400 75716700 0.2473 74 chr15 76538100 76538400 0.0885 63 chr15 77077200 77077800 0.33 33 chr15 77205900 77206200 0.3742 63 chr15 77618400 77618700 0.1664 260 chr15 77876400 77876700 0.1788 57 chr15 77880000 77880300 0.3042 55 chr15 77883000 77883300 0.0744 58 chr15 77888700 77889000 0.152 74 chr15 77948400 77948700 0.0715 73 chr15 77949900 77952900 0 86 chr15 77973300 77973600 0.3513 41 chr15 78188400 78189000 0.2255 99 chr15 78742800 78746100 0 72 chr15 78747300 78747600 0.0502 34 chr15 78780000 78780300 0.364 71 chr15 79273200 79275300 0.1157 94 chr15 79648800 79649100 0.0739 74 chr15 81091500 81091800 0.079 71 chr15 81655500 81656100 0.1239 63 chr15 81659400 81659700 0.3052 39 chr15 81669000 81672600 0.061 74 chr15 81699900 81702300 0.1251 75 chr15 81731400 81732000 0.0873 71 chr15 81733800 81734400 0.0873 71 chr15 81735600 81736200 0.0873 71 chr15 81799200 81799800 0.0528 82 chr15 81801900 81803400 0.0368 92 chr15 81873600 81874200 0.1265 68 chr15 81996300 81997800 0.0239 90 chr15 81999000 82001100 0.0239 90 chr15 82242300 82243800 0 81 chr15 82250100 82250400 0.1592 84 chr15 82318800 82324200 0 73 chr15 82329000 82331700 0 51 chr15 82337400 82338000 0.1672 75 chr15 82339200 82339800 0 107 chr15 82341000 82341900 0 107 chr15 82346100 82346400 0.2531 96 chr15 82348500 82352100 0 123 chr15 82355100 82367100 0 74 chr15 82368600 82368900 0.2533 42 chr15 82421700 82428900 0 86 chr15 82430100 82431600 0 90 chr15 82433400 82436100 0 90 chr15 82437300 82449000 0 141 chr15 82450200 82471800 0 141 chr15 82473000 82473600 0.3501 89 chr15 82479000 82479300 0.247 55 chr15 82484400 82487100 0 53 chr15 82489500 82491900 0.1002 56 chr15 82493100 82497300 0 74 chr15 82500000 82506900 0 66 chr15 82508100 82526100 0 115 chr15 82883100 82888800 0 77 chr15 82989900 82990500 0.0062 50 chr15 82997700 82998900 0.035 77 chr15 83328900 83329500 0.2535 93 chr15 83384100 83384400 0.0745 82 chr15 83386200 83388600 0.0745 82 chr15 83451000 83456700 0 75 chr15 83661900 83662200 0.2805 64 chr15 84092700 84093000 0.1571 69 chr15 84099600 84101100 0 66 chr15 84165600 84197400 0 81 chr15 84198900 84252000 0 84 chr15 84253200 84270000 0 43 chr15 84320100 84360300 0 77 chr15 84362100 84384000 0 52 chr15 84403800 84425400 0 110 chr15 84426600 84474300 0 96 chr15 84476100 84493800 0 95 chr15 84495000 84516900 0 95 chr15 84518100 84525600 0 90 chr15 84564300 84564600 0.1583 52 chr15 85188900 85234500 0 153 chr15 85237800 85238400 0.0088 66 chr15 85240200 85244100 0 107 chr15 85250100 85250400 0.2291 75 chr15 85265700 85269300 0.0043 76 chr15 85270500 85271100 0.0043 76 chr15 85434900 85438200 0.081 70 chr15 85856100 85856400 0.2007 56 chr15 85881900 85882200 0.2256 100 chr15 86528700 86529300 0.0024 90 chr15 86530800 86531700 0.0024 90 chr15 86532900 86534100 0.0024 90 chr15 87000000 87001200 0.1134 65 chr15 87510300 87515700 0 96 chr15 88555800 88556100 0.3162 62 chr15 88855800 88856700 0 130 chr15 88940700 88942800 0.0017 78 chr15 89636400 89637300 0.0974 78 chr15 89639400 89639700 0.0974 78 chr15 89663700 89664000 0.3999 53 chr15 89853600 89854800 0.1086 81 chr15 89869200 89869500 0.2278 64 chr15 90858900 90859200 0.219 22 chr15 91504800 91505100 0.2404 63 chr15 91750800 91751100 0.4535 141 chr15 91762800 91763400 0.0205 71 chr15 92137200 92140500 0.1263 83 chr15 93676500 93677100 0.013 88 chr15 93678300 93679800 0.013 88 chr15 93681000 93681300 0.013 88 chr15 96898200 96898500 0.2483 103 chr15 97265700 97268100 0 46 chr15 97269300 97270800 0.1382 24 chr15 97437000 97437300 0.256 61 chr15 98089200 98089800 0.027 62 chr15 98096400 98096700 0.221 64 chr15 99013800 99014100 0.057 69 chr15 99805800 99807000 0.3413 52 chr15 100367400 100367700 0.2377 50 chr15 100419000 100420200 0.0474 86 chr15 100421700 100422900 0.0474 86 chr15 100557000 100557600 0.2726 32 chr15 100706400 100706700 0.328 32 chr15 100719000 100720200 0 61 chr15 101130600 101130900 0.3192 29 chr15 101311800 101312100 0.2267 22 chr15 101627400 101631000 0.133 96 chr15 101745600 101747100 0.0732 62 chr15 101752800 101753700 0.0496 122 chr15 101754900 101764200 0 160 chr15 101766900 101767200 0.3441 39 chr15 101860200 101862300 0 76 chr15 101863800 101865600 0.0626 84 chr15 101867700 101869200 0.0212 71 chr15 101871900 101873400 0.0081 84 chr15 101874900 101875200 0.0081 84 chr15 101878800 101879100 0.3456 59 chr15 101892900 101893800 0.1042 86 chr15 101896500 101897400 0 52 chr15 101900100 101900400 0.2156 39 chr15 101905500 101906100 0.347 67 chr15 101907600 101907900 0.0101 71 chr15 101909700 101912700 0.0101 71 chr15 101917500 101918700 0.035 79 chr15 101921100 101921400 0.1487 61 chr15 101922600 101923200 0.0217 83 chr15 101926200 101928300 0 117 chr15 101929500 101937900 0 117 chr15 101939700 101944800 0 117 chr15 101948700 101949000 0 171 chr15 101950200 101962200 0 171 chr15 101963400 101964300 0 171 chr15 101966400 101967300 0.0148 148 chr15 101968800 101970300 0.0148 148 chr15 101971800 101974500 0.0148 148 chr15 101975700 101976900 0 159 chr15 101978100 101981400 0 159 chr16 14400 16800 0 148 chr16 18000 18300 0.001 118 chr16 19800 22500 0.001 118 chr16 25500 26700 0.0172 78 chr16 28800 29700 0.0172 78 chr16 153300 153900 0.0066 66 chr16 163800 164700 0.0017 53 chr16 172500 173100 0 56 chr16 458400 458700 0.2609 175 chr16 481500 482100 0.259 55 chr16 494700 495000 0.3722 395 chr16 585000 585300 0.1015 21 chr16 599700 600000 0.1702 77 chr16 612000 612600 0.2255 31 chr16 846900 847200 0.2419 501 chr16 858000 858900 0.4072 108 chr16 886500 886800 0.4845 38 chr16 895800 896100 0.4045 51 chr16 953400 954000 0.2527 39 chr16 960600 962100 0 91 chr16 1025100 1025700 0.4222 349 chr16 1043400 1043700 0.2957 27 chr16 1092600 1093200 0.384 105 chr16 1228800 1229400 0.0084 60 chr16 1231800 1232700 0 68 chr16 1233900 1237800 0.0015 68 chr16 1241400 1242000 0.0034 64 chr16 1248600 1252500 0.0021 63 chr16 1253700 1254600 0 66 chr16 1459500 1459800 0.3693 28 chr16 1599000 1600500 0.23 65 chr16 2134200 2134500 0.1666 74 chr16 2542800 2543400 0.0002 63 chr16 2547300 2551200 0 72 chr16 2552700 2559000 0 80 chr16 2560500 2575800 0 80 chr16 2578500 2584200 0 69 chr16 2600400 2601000 0.1623 70 chr16 2606700 2609400 0 84 chr16 2611800 2614200 0 81 chr16 2616000 2621400 0 69 chr16 2624400 2639700 0 73 chr16 2642400 2647500 0 73 chr16 2650800 2654700 0 87 chr16 2657700 2658300 0.0019 73 chr16 2679000 2679300 0.0326 67 chr16 2686200 2686800 0.0055 94 chr16 2688600 2689500 0 71 chr16 2693700 2696100 0 85 chr16 3072600 3072900 0.4505 12 chr16 3886800 3887100 0.1546 83 chr16 5201700 5202300 0.2527 76 chr16 5500200 5500500 0.3564 184 chr16 5754600 5755200 0.0229 89 chr16 7008600 7009200 0.1654 112 chr16 7291800 7292100 0.2543 64 chr16 8058000 8060400 0 84 chr16 8953800 8954100 0.0121 32 chr16 9293700 9294000 0.3463 54 chr16 9317400 9317700 0.3334 57 chr16 9584700 9590100 0 83 chr16 9686400 9686700 0.1808 86 chr16 10288200 10288500 0.2954 49 chr16 10479000 10479300 0.2345 67 chr16 11925300 11925600 0.318 78 chr16 11927700 11931000 0 97 chr16 11934900 11935200 0.26 56 chr16 11936400 11937000 0.4114 54 chr16 11939400 11940300 0.0555 70 chr16 14688000 14768400 0 103 chr16 14773500 14774100 0.0295 69 chr16 14776500 14777400 0 92 chr16 14779800 14800200 0 109 chr16 14801400 14802000 0.0946 88 chr16 14803200 14803800 0.0169 64 chr16 14806200 14806500 0.0143 84 chr16 14808300 14810700 0.0143 84 chr16 14813100 14813400 0.0783 70 chr16 14819400 14820300 0 63 chr16 14824500 14824800 0.3502 45 chr16 14826600 14827200 0.0038 77 chr16 14829000 14829300 0.3063 60 chr16 14831400 14835000 0.0158 68 chr16 14837700 14838000 0.0299 71 chr16 14840100 14841600 0.0299 71 chr16 14843100 14844900 0.0299 71 chr16 14846400 14849700 0 73 chr16 14853000 14854500 0.203 96 chr16 14857200 14858400 0.1174 64 chr16 14863500 14864100 0.01 81 chr16 14865600 14865900 0.01 81 chr16 14868000 14868300 0.2576 69 chr16 14872200 14872800 0.1178 72 chr16 14875200 14875500 0.2009 83 chr16 14878200 14878500 0.2446 43 chr16 14881800 14882400 0.0151 50 chr16 14886300 14886600 0.2703 47 chr16 14889900 14891100 0.099 61 chr16 14895000 14895300 0.2281 68 chr16 14896500 14897100 0 73 chr16 14898600 14899500 0 73 chr16 14901300 14901600 0.1699 57 chr16 14903100 14903400 0.1044 55 chr16 14905200 14913300 0 149 chr16 14914500 14915100 0 149 chr16 14916300 14930400 0 149 chr16 14931900 14932200 0 149 chr16 14933400 14934600 0.007 88 chr16 14935800 14946300 0.0004 95 chr16 14948700 14953200 0 101 chr16 15103800 15108900 0.0059 90 chr16 15112800 15121800 0 95 chr16 15123600 15123900 0 95 chr16 15126300 15126600 0.1321 78 chr16 15134400 15134700 0.2843 50 chr16 15138300 15139500 0 84 chr16 15150600 15151200 0 67 chr16 15152400 15153300 0 67 chr16 15155700 15156000 0.0143 69 chr16 15165600 15166800 0.0558 72 chr16 15173400 15173700 0.1888 52 chr16 15179100 15179400 0.0101 61 chr16 15183600 15190500 0 78 chr16 15193500 15194100 0.257 75 chr16 15195900 15196200 0.0928 70 chr16 15197700 15201600 0.0007 69 chr16 15204300 15204600 0.1854 48 chr16 15208200 15208800 0.0287 62 chr16 15210600 15216600 0.0077 68 chr16 15217800 15218100 0.0077 68 chr16 15219600 15220800 0.1514 77 chr16 15222000 15222300 0.1207 74 chr16 15223500 15226800 0 76 chr16 15234600 15235200 0.0289 68 chr16 15236400 15241800 0 82 chr16 15243000 15261900 0 78 chr16 15263700 15264000 0.3453 65 chr16 15266100 15266700 0.0344 46 chr16 15268800 15269100 0.086 74 chr16 15271500 15273900 0 88 chr16 15276300 15277500 0.0789 67 chr16 15279000 15280500 0.0339 72 chr16 15282000 15282300 0.0339 72 chr16 15284100 15284400 0.1146 67 chr16 15295500 15298200 0.0208 83 chr16 15300000 15300300 0.2755 59 chr16 15305400 15305700 0.2025 53 chr16 15308400 15308700 0.3652 86 chr16 15310200 15310500 0.0206 58 chr16 15315300 15318300 0.1591 70 chr16 15319800 15320700 0 70 chr16 15323100 15323700 0.1913 92 chr16 15325200 15325800 0 103 chr16 15327000 15327300 0 103 chr16 15328800 15366600 0 103 chr16 15367800 15368100 0.0195 71 chr16 15369600 15370200 0.1143 89 chr16 15372900 15375000 0.0568 78 chr16 15378300 15378900 0.0139 81 chr16 15380700 15381000 0.2781 59 chr16 16218300 16218900 0.0083 63 chr16 16224300 16226100 0 63 chr16 16227900 16228200 0.2617 63 chr16 16230300 16233900 0.015 70 chr16 16239600 16239900 0.0714 44 chr16 16241400 16242300 0 77 chr16 16244400 16249200 0 77 chr16 16250400 16254000 0 77 chr16 16255500 16257300 0 71 chr16 16259400 16260300 0 71 chr16 16261800 16262400 0 71 chr16 16263600 16265100 0 71 chr16 16266900 16268100 0.1721 43 chr16 16269600 16357500 0 111 chr16 16359300 16364700 0 111 chr16 16366200 16366500 0 111 chr16 16367700 16386300 0 99 chr16 16387500 16418700 0 99 chr16 16421400 16424400 0.0039 76 chr16 16426200 16429800 0 91 chr16 16431000 16431300 0.0597 59 chr16 16432800 16446000 0.0032 81 chr16 16447200 16448100 0.0032 81 chr16 16450500 16450800 0.0813 77 chr16 16452000 16452300 0.0813 77 chr16 16453500 16453800 0.0813 77 chr16 16455000 16456200 0 85 chr16 16457700 16461600 0 85 chr16 16464600 16465200 0.0063 54 chr16 16471500 16473000 0.313 81 chr16 16475400 16477500 0.0694 69 chr16 16478700 16479600 0.0137 63 chr16 16482600 16484700 0 68 chr16 16486200 16488000 0 68 chr16 16489500 16490400 0 68 chr16 16493700 16528800 0 86 chr16 16531200 16534800 0 86 chr16 16557300 16557900 0.0459 69 chr16 16559700 16560000 0.0627 70 chr16 16563900 16567500 0 72 chr16 16571400 16572000 0.3737 68 chr16 16589400 16590000 0.005 70 chr16 16592400 16592700 0.0203 40 chr16 16595100 16595400 0.0716 68 chr16 16599000 16599300 0.1468 67 chr16 16604700 16605000 0.1116 74 chr16 16607700 16608600 0.1889 67 chr16 16611000 16611300 0.221 56 chr16 16613100 16613400 0.2819 59 chr16 16614900 16615200 0.0431 49 chr16 16616400 16617300 0 54 chr16 16620600 16621800 0.058 63 chr16 16623900 16624500 0.1416 65 chr16 16625700 16626300 0.0009 29 chr16 16639500 16642800 0 66 chr16 16646700 16650600 0 74 chr16 16653300 16653600 0.3701 52 chr16 16655100 16662600 0 78 chr16 16664100 16683600 0 80 chr16 16684800 16686600 0 80 chr16 16688400 16689300 0 81 chr16 16690800 16691700 0 81 chr16 16694100 16699500 0 77 chr16 16701000 16735200 0 77 chr16 16737300 16737600 0.1306 60 chr16 16745400 16745700 0.2329 56 chr16 16747800 16748100 0.2329 56 chr16 16755000 16756200 0.2097 82 chr16 16758000 16758900 0.0516 67 chr16 16840500 16846500 0 91 chr16 18076500 18078600 0.0126 62 chr16 18080100 18080700 0.1738 64 chr16 18087600 18087900 0.1708 39 chr16 18090600 18091200 0.1442 56 chr16 18095100 18099600 0 73 chr16 18100800 18102000 0 73 chr16 18105000 18105600 0.0458 59 chr16 18107400 18107700 0.0133 68 chr16 18109200 18113100 0.0133 68 chr16 18115800 18116100 0.2851 73 chr16 18120000 18120600 0.007 59 chr16 18122100 18128100 0 70 chr16 18129600 18129900 0.3014 68 chr16 18131100 18132300 0.0611 66 chr16 18133500 18138600 0 73 chr16 18141600 18142500 0.2984 52 chr16 18144900 18148500 0 71 chr16 18152400 18153000 0.269 70 chr16 18154500 18155100 0.0567 56 chr16 18177600 18180900 0 93 chr16 18183600 18189600 0 93 chr16 18191700 18193800 0 93 chr16 18202200 18202500 0.3126 68 chr16 18204600 18205800 0.0972 74 chr16 18207000 18207300 0.2906 76 chr16 18221700 18222000 0.4151 40 chr16 18224100 18226200 0.0183 65 chr16 18228300 18229800 0 76 chr16 18232200 18232800 0.3969 75 chr16 18234600 18234900 0.2478 62 chr16 18239100 18240300 0.0608 59 chr16 18246600 18247500 0 78 chr16 18250200 18255000 0 78 chr16 18256500 18256800 0.074 49 chr16 18258300 18258600 0.1327 55 chr16 18261300 18261600 0.1327 55 chr16 18264300 18266400 0.055 60 chr16 18268200 18278700 0 76 chr16 18280200 18286200 0 72 chr16 18287400 18287700 0 72 chr16 18288900 18291000 0 80 chr16 18292200 18305100 0 80 chr16 18306600 18354000 0 107 chr16 18355200 18435900 0 107 chr16 18486600 18524400 0 80 chr16 18527400 18528000 0.2436 76 chr16 18530100 18532500 0.0485 95 chr16 18534600 18535200 0.0133 56 chr16 18537600 18538200 0.0377 59 chr16 18540900 18543000 0.0257 83 chr16 18545700 18547200 0 61 chr16 18549600 18550200 0.0601 63 chr16 18551400 18552600 0.1213 71 chr16 18554700 18556200 0.0142 80 chr16 18558300 18558600 0.3465 44 chr16 18566400 18566700 0.2005 58 chr16 18600300 18601200 0.1043 57 chr16 18603000 18604200 0.1615 70 chr16 18611100 18611400 0.1275 77 chr16 18621300 18621900 0.2105 69 chr16 18624000 18654600 0 86 chr16 18655800 18658200 0 86 chr16 18659700 18664800 0 71 chr16 18667200 18668400 0 70 chr16 18672600 18678900 0 76 chr16 18680100 18687900 0 83 chr16 18689400 18694500 0 83 chr16 18696600 18699600 0 77 chr16 18702300 18702600 0.0075 64 chr16 18705000 18706200 0 76 chr16 18707400 18714300 0 76 chr16 18716100 18719700 0 69 chr16 18720900 18722400 0.034 39 chr16 18723900 18724500 0.034 39 chr16 18728400 18729600 0 58 chr16 18731700 18732300 0.2128 85 chr16 18736500 18736800 0.108 72 chr16 18740400 18740700 0.081 44 chr16 18742200 18742500 0.2219 60 chr16 18758100 18758700 0.3025 78 chr16 18760800 18761400 0.0162 54 chr16 18763800 18764400 0.0397 54 chr16 18781800 18782400 0.2693 71 chr16 18821400 18827100 0 68 chr16 18889200 18889500 0.189 59 chr16 19003500 19004100 0.0875 69 chr16 19219200 19219500 0.2792 28 chr16 19786800 19802400 0 37 chr16 20185500 20186100 0.0047 89 chr16 20442900 20451300 0 71 chr16 20456100 20456400 0.2488 53 chr16 20484300 20484600 0.1726 53 chr16 20490000 20501100 0 83 chr16 20522400 20532900 0 80 chr16 20539200 20539500 0.0782 62 chr16 20566800 20567100 0.3281 18 chr16 20571600 20571900 0.3826 58 chr16 20576400 20584800 0 73 chr16 20767200 20767500 0.2226 40 chr16 20858700 20859000 0.219 49 chr16 21043200 21045000 0.0282 79 chr16 21047100 21047400 0.0282 79 chr16 21351300 21351600 0.2069 49 chr16 21353400 21354000 0.3279 86 chr16 21379500 21379800 0 115 chr16 21381600 21386700 0 115 chr16 21389100 21390900 0 115 chr16 21392100 21396900 0 115 chr16 21399300 21499200 0 115 chr16 21500700 21501300 0 115 chr16 21732900 21733200 0.0122 75 chr16 21738000 21738600 0.2123 89 chr16 21739800 21755700 0 97 chr16 21756900 21757500 0 97 chr16 21761100 21762600 0 75 chr16 21765600 21766500 0.0241 74 chr16 21768600 21771300 0.0157 75 chr16 21774000 21774300 0.3734 76 chr16 21776700 21794700 0 103 chr16 21796800 21800100 0 70 chr16 21831600 21832800 0 84 chr16 21834600 21874500 0 122 chr16 21876300 21884700 0 122 chr16 21886800 21890700 0 83 chr16 21892200 21893400 0 92 chr16 21894600 21917400 0 92 chr16 21918600 21933300 0 89 chr16 22433400 22435200 0 73 chr16 22437900 22539300 0 131 chr16 22542300 22542600 0.1674 80 chr16 22548900 22549500 0.2755 89 chr16 22554000 22559400 0 91 chr16 22560600 22573500 0 91 chr16 22577100 22578900 0 90 chr16 22581600 22582500 0.2398 88 chr16 22584900 22586400 0.0111 91 chr16 22593000 22599300 0 100 chr16 22600500 22611900 0 89 chr16 22657500 22657800 0.1955 50 chr16 22700100 22700400 0.055 38 chr16 23517300 23517600 0.3684 35 chr16 23599800 23600100 0.112 73 chr16 25337100 25337700 0.1374 58 chr16 26811900 26812500 0.021 32 chr16 27138900 27139500 0.3336 242 chr16 28334100 28334700 0.0656 59 chr16 28340400 28347300 0 108 chr16 28348500 28359600 0 108 chr16 28360800 28361400 0 108 chr16 28362900 28376100 0 108 chr16 28377600 28391700 0 81 chr16 28392900 28413900 0 81 chr16 28415100 28417800 0 81 chr16 28419600 28441200 0 110 chr16 28442400 28471800 0 110 chr16 28598700 28601100 0 71 chr16 28611900 28615500 0 85 chr16 28631400 28631700 0.2348 43 chr16 28637100 28637400 0.1802 70 chr16 28641600 28641900 0.1803 101 chr16 28643400 28665300 0 101 chr16 28666500 28699500 0 102 chr16 28701300 28737600 0 102 chr16 28739400 28740300 0 110 chr16 28741800 28743000 0 110 chr16 28744200 28745700 0 110 chr16 28747500 28752300 0 110 chr16 28753500 28803000 0 110 chr16 28804200 28809300 0 110 chr16 29037900 29038200 0 126 chr16 29039700 29054100 0 126 chr16 29055300 29055600 0.0636 106 chr16 29056800 29059500 0.0636 106 chr16 29061300 29066100 0 102 chr16 29067900 29068800 0.0024 102 chr16 29070600 29070900 0.1187 60 chr16 29097900 29098200 0.3524 50 chr16 29330400 29330700 0.3302 45 chr16 29332800 29333100 0.0055 75 chr16 29358600 29358900 0.1998 57 chr16 29360400 29365800 0 101 chr16 29368200 29370000 0 101 chr16 29371200 29376900 0 101 chr16 29378700 29382900 0 101 chr16 29384100 29388900 0 101 chr16 29390100 29390400 0.3427 84 chr16 29392800 29393100 0.2879 64 chr16 29394900 29395500 0.0283 86 chr16 29397900 29398500 0.0283 86 chr16 29403300 29405100 0.1263 92 chr16 29412000 29412300 0.193 62 chr16 29415300 29416500 0.1915 79 chr16 29418900 29419200 0.3045 73 chr16 29430900 29436000 0 138 chr16 29437200 29545200 0 138 chr16 29547900 29550000 0 110 chr16 29551200 29555700 0 110 chr16 29557500 29559600 0 72 chr16 29561400 29568600 0 72 chr16 29586900 29587200 0.1923 56 chr16 29621100 29621400 0.3131 74 chr16 29630100 29630400 0.3111 69 chr16 29637300 29637600 0.2908 84 chr16 30188700 30276300 0 146 chr16 30277500 30280800 0 131 chr16 30284100 30295500 0 121 chr16 30297300 30297600 0.2438 30 chr16 30298800 30299700 0 70 chr16 30301200 30308100 0 70 chr16 30327000 30327300 0.3239 53 chr16 31104000 31104900 0 149 chr16 31308900 31309500 0.0376 59 chr16 31340400 31341000 0.0006 57 chr16 31596000 31596600 0.013 65 chr16 31759800 31760700 0 59 chr16 31953900 31954200 0.1682 72 chr16 31955700 31956300 0.1682 72 chr16 31959300 31959600 0.1949 69 chr16 31960800 31961700 0.1728 79 chr16 31964400 31964700 0.0202 41 chr16 31970700 31971000 0.1348 80 chr16 31972200 31973100 0 52 chr16 31977600 31977900 0.1481 45 chr16 31989000 31989900 0.1739 70 chr16 31998000 31998300 0.1992 52 chr16 32014200 32014500 0.2459 53 chr16 32017800 32018400 0.0647 61 chr16 32023800 32024400 0.116 47 chr16 32028900 32044200 0 104 chr16 32046000 32064900 0 104 chr16 32066700 32071500 0.0052 152 chr16 32074500 32084700 0.0052 152 chr16 32086500 32096400 0 245 chr16 32098200 32110200 0.0218 197 chr16 32112000 32112300 0.0218 197 chr16 32117400 32117700 0.3326 96 chr16 32122500 32122800 0.299 88 chr16 32131200 32134200 0.0016 87 chr16 32135700 32151600 0 98 chr16 32153400 32188800 0 98 chr16 32190900 32200800 0 98 chr16 32202000 32208900 0 98 chr16 32210700 32213100 0 95 chr16 32214300 32234400 0 95 chr16 32235600 32254200 0 95 chr16 32255400 32261400 0 71 chr16 32265300 32269200 0 90 chr16 32270400 32283000 0 71 chr16 32288100 32381700 0 98 chr16 32395500 32397300 0 69 chr16 32398500 32398800 0 69 chr16 32413500 32414100 0.1102 83 chr16 32416800 32417400 0.2561 70 chr16 32421000 32421300 0.2212 77 chr16 32424300 32426700 0.1355 50 chr16 32429100 32443200 0 87 chr16 32457000 32457300 0.0862 53 chr16 32459700 32460000 0.2262 46 chr16 32464800 32467800 0 56 chr16 32473500 32474100 0.0233 76 chr16 32476200 32477100 0.0233 76 chr16 32478900 32483700 0.0023 140 chr16 32488500 32489700 0 74 chr16 32496900 32498400 0.2436 56 chr16 32502300 32503500 0 59 chr16 32505300 32506800 0.0022 44 chr16 32508000 32511300 0 58 chr16 32520900 32524500 0 56 chr16 32526600 32542500 0 56 chr16 32544600 32549700 0 54 chr16 32551500 32552100 0 40 chr16 32553300 32553900 0 60 chr16 32555400 32566200 0 60 chr16 32568600 32572500 0.0011 63 chr16 32574000 32575800 0 59 chr16 32577600 32577900 0.3296 61 chr16 32579100 32580900 0 60 chr16 32582100 32582700 0 60 chr16 32583900 32585400 0 75 chr16 32588100 32600100 0 82 chr16 32602200 32604900 0 82 chr16 32607600 32612400 0 82 chr16 32613600 32617200 0 82 chr16 32618400 32620500 0.0233 67 chr16 32623200 32624100 0 68 chr16 32628000 32628600 0.157 81 chr16 32631900 32632200 0.291 61 chr16 32635500 32638800 0 77 chr16 32640000 32643600 0 77 chr16 32646000 32649000 0 158 chr16 32650500 32806200 0 158 chr16 32807700 32811300 0 140 chr16 32815200 32815500 0.2898 98 chr16 32818200 32818800 0 120 chr16 32820900 32824200 0 120 chr16 32827800 32828100 0.1717 96 chr16 32829900 32830200 0.0432 132 chr16 32833800 32840700 0 146 chr16 32847000 32865900 0 97 chr16 32867400 32868000 0 88 chr16 32869500 32877000 0 88 chr16 32878800 32879100 0 85 chr16 32880600 32887800 0 85 chr16 32889000 32889900 0.2935 88 chr16 32906100 32906400 0.2679 75 chr16 32912100 32912700 0.3171 89 chr16 32921100 32921400 0.0811 48 chr16 32924100 32924700 0.0126 70 chr16 32926200 32928000 0 88 chr16 32929800 32930100 0.0961 65 chr16 32937000 32937300 0.1862 67 chr16 32939700 32940300 0.0262 62 chr16 32949000 32949300 0.28 68 chr16 32951400 32988000 0 93 chr16 32991600 32992200 0.0999 93 chr16 32994300 32997300 0 80 chr16 32999400 33000000 0.0314 89 chr16 33001200 33001500 0.0314 89 chr16 33003900 33014700 0.0035 97 chr16 33018000 33020100 0.0043 96 chr16 33021300 33024600 0.0026 108 chr16 33026400 33027900 0.1773 131 chr16 33030000 33039600 0 267 chr16 33042600 33046200 0.092 157 chr16 33048300 33048600 0.092 157 chr16 33049800 33051000 0.092 157 chr16 33052200 33053700 0.092 157 chr16 33055200 33055800 0.092 157 chr16 33065400 33214500 0 129 chr16 33264600 33336300 0 339 chr16 33340200 33392400 0 83 chr16 33442500 33506700 0 111 chr16 33507900 33508800 0 111 chr16 33510300 33514800 0.048 64 chr16 33516000 33516300 0.048 64 chr16 33518100 33525600 0 99 chr16 33527100 33528300 0 99 chr16 33529500 33602700 0 99 chr16 33603900 33609300 0 99 chr16 33619800 33620100 0.0137 57 chr16 33625800 33626100 0.1764 66 chr16 33636300 33636600 0.2117 40 chr16 33645300 33645600 0.0102 48 chr16 33648900 33658200 0 59 chr16 33659400 33660300 0 59 chr16 33666900 33667200 0.3617 48 chr16 33668700 33669300 0.3448 56 chr16 33684000 33684300 0.3922 44 chr16 33687600 33688500 0.1271 59 chr16 33690600 33692100 0.0383 57 chr16 33698700 33699300 0.0307 53 chr16 33705000 33705300 0.1372 52 chr16 33717900 33718200 0.2753 85 chr16 33727500 33730200 0.004 164 chr16 33732000 33732900 0.004 164 chr16 33734100 33734700 0.004 164 chr16 33735900 33736500 0.141 104 chr16 33739800 33741300 0.075 129 chr16 33744900 33745200 0.294 139 chr16 33751500 33751800 0.2846 24 chr16 33757500 33759000 0 41 chr16 33761100 33764400 0 41 chr16 33766500 33766800 0.076 20 chr16 33768000 33768300 0.1462 28 chr16 33778200 33797400 0 66 chr16 33798900 33821400 0 66 chr16 33822600 33822900 0 66 chr16 33825000 33826800 0 66 chr16 33828600 33830700 0 111 chr16 33831900 33835200 0 111 chr16 33839100 33839400 0 111 chr16 33843000 33843300 0.1581 68 chr16 33845400 33846000 0.1581 68 chr16 33848100 33848400 0.2668 51 chr16 33849900 33851400 0.345 61 chr16 33852900 33854100 0.2234 54 chr16 33855900 33857400 0.0029 68 chr16 33859800 33860100 0.3496 76 chr16 33861900 33862200 0.3496 76 chr16 33866100 33894000 0 99 chr16 33895200 33903600 0 99 chr16 33904800 33905100 0 99 chr16 33907200 33907500 0.0507 52 chr16 33909000 33909300 0.0507 52 chr16 33916500 33916800 0.1034 73 chr16 33920400 33922500 0.1406 70 chr16 33924000 33924600 0 90 chr16 33925800 33927900 0 90 chr16 33929100 33930600 0 90 chr16 33935400 33935700 0.1171 62 chr16 33939300 33942900 0.0007 70 chr16 33944100 33945300 0.0007 70 chr16 33947400 33948600 0.0007 70 chr16 33950400 33958500 0 111 chr16 33961800 33962400 0 64 chr16 33963600 33964200 0 64 chr16 33965400 33969300 0 64 chr16 33971400 33982800 0 100 chr16 33984300 33984900 0 100 chr16 33987000 33991500 0 100 chr16 33996300 34013100 0 98 chr16 34062000 34068000 0.0047 2127 chr16 34072800 34073700 0.0061 873 chr16 34085100 34086300 0.2121 3841 chr16 34096200 34099800 0.1597 2317 chr16 34186200 34189200 0 63 chr16 34241400 34241700 0.2223 47 chr16 34267800 34268100 0.1283 35 chr16 34273800 34274400 0 44 chr16 34275900 34276200 0.0129 50 chr16 34278600 34281600 0 80 chr16 34282800 34284600 0 80 chr16 34286100 34289400 0 116 chr16 34339500 34494300 0 400 chr16 34495500 34506600 0 400 chr16 34507800 34517100 0 400 chr16 34518600 34521000 0 46 chr16 34572600 34573500 0.2625 7640 chr16 34574700 34575900 0.0918 597 chr16 34580700 34581300 0.0943 1089 chr16 34582500 34582800 0.4189 5687 chr16 34586400 34586700 0.0725 5927 chr16 34588500 34590600 0.0383 6369 chr16 34593000 34593900 0.2103 14692 chr16 34595700 34596000 0.3354 4609 chr16 34744800 34746000 0 64 chr16 34827300 34829400 0.0668 61 chr16 34831500 34831800 0.0074 24 chr16 34833300 34836000 0 45 chr16 34838700 34840800 0 45 chr16 34842000 34842600 0 52 chr16 34844700 34847100 0 52 chr16 34848900 34852800 0 41 chr16 34854300 34856100 0 52 chr16 34857600 34857900 0 52 chr16 34859100 34862400 0.0023 58 chr16 34863900 34896600 0 389 chr16 34902300 34902600 0.1957 1295 chr16 34911300 34913100 0 53 chr16 34960200 35072400 0 55 chr16 35609400 35613900 0 76 chr16 35804100 35804400 0.0053 64 chr16 35806500 35807100 0.1439 54 chr16 35829300 35829600 0.3012 69 chr16 35945400 35946000 0.0206 56 chr16 35957100 35957700 0.006 70 chr16 36009300 36010200 0 72 chr16 36011700 36012900 0 124 chr16 36016500 36017700 0 108 chr16 36019200 36019800 0 108 chr16 36246300 36249000 0 50 chr16 36260700 36261000 0 33 chr16 36312600 36312900 0.1557 84 chr16 36314700 36321300 0 124 chr16 36323700 36325200 0 47 chr16 36327600 36328800 0 146 chr16 36330000 36330900 0 146 chr16 36333600 36333900 0 32 chr16 36337500 36340800 0 783 chr16 36342000 36342300 0 314 chr16 36343800 36714300 0 314 chr16 36716100 36747600 0 314 chr16 36749100 36976500 0 346 chr16 36977700 36993900 0 346 chr16 36995100 37725300 0 346 chr16 37727100 37945200 0 475 chr16 37946400 38048100 0 475 chr16 38049300 38109900 0 475 chr16 38111100 38253900 0 195 chr16 38255100 38267100 0 195 chr16 38275800 38276700 0 54 chr16 38278800 38279100 0.2046 34 chr16 46382400 46389600 0.0077 8715 chr16 46392600 46392900 0.2036 1647 chr16 46394100 46394400 0.4106 5057 chr16 46397100 46398300 0.0285 5604 chr16 46450200 46450500 0.2637 70 chr16 46623600 46624800 0.0124 67 chr16 46693800 46694400 0.0533 61 chr16 47645100 47646300 0.0435 60 chr16 47864700 47865000 0.1111 79 chr16 48017100 48019200 0.0438 90 chr16 48768900 48770400 0.1145 76 chr16 48771900 48774000 0.0103 110 chr16 48917400 48918000 0.059 31 chr16 49135800 49136700 0.1108 80 chr16 49945500 49945800 0.0069 29 chr16 50442600 50442900 0.3549 113 chr16 50928600 50928900 0.373 47 chr16 51014400 51015000 0.2881 83 chr16 51373800 51374100 0.2933 93 chr16 52175100 52175400 0.0968 92 chr16 52248900 52249500 0.3967 25 chr16 53401800 53402100 0.2773 97 chr16 54042300 54048000 0 81 chr16 55170600 55170900 0.018 212 chr16 55761900 55762200 0.0262 63 chr16 55788600 55808400 0 84 chr16 56739000 56739600 0.1617 76 chr16 57200100 57200400 0.2877 94 chr16 58993800 58994100 0.0966 49 chr16 59559600 59560500 0.2137 51 chr16 59562300 59564100 0.0027 103 chr16 59680800 59681100 0.1894 72 chr16 59977800 59979300 0.0716 47 chr16 59980500 59980800 0.0476 73 chr16 59982000 59982300 0.0476 73 chr16 59998200 59998500 0.021 24 chr16 60196200 60197700 0.0701 74 chr16 60524100 60524400 0.1661 71 chr16 60526500 60528300 0.0116 86 chr16 60876300 60879900 0 79 chr16 61782900 61787700 0 81 chr16 61802100 61803300 0 79 chr16 61804800 61807200 0 79 chr16 61920000 61920900 0.149 76 chr16 63149400 63150000 0.2891 66 chr16 63151800 63152100 0.1537 62 chr16 63390300 63390900 0.0196 79 chr16 65129400 65129700 0.1243 15 chr16 65237700 65238900 0.1906 58 chr16 65361900 65362200 0.1462 77 chr16 65690100 65690700 0 86 chr16 65692200 65695800 0 86 chr16 66789300 66789600 0.2214 28 chr16 67712400 67713000 0.0656 87 chr16 68583600 68589300 0 110 chr16 69665400 69666300 0.1256 74 chr16 69946800 69952200 0.0238 87 chr16 69956400 69964200 0 91 chr16 69967800 69969300 0 73 chr16 69971400 69971700 0.2177 106 chr16 69973200 69975900 0.0269 111 chr16 69989100 69989400 0.4201 45 chr16 70050900 70052700 0.1102 93 chr16 70106100 70106400 0.2335 55 chr16 70144200 70144500 0.2539 96 chr16 70146600 70147200 0.1116 108 chr16 70167900 70168500 0.13 107 chr16 70172400 70172700 0.133 104 chr16 70174800 70187400 0 153 chr16 70188600 70191900 0 153 chr16 70200900 70201200 0.0037 50 chr16 70205400 70205700 0.1685 54 chr16 70812000 70812300 0.0825 49 chr16 70814400 70817100 0.0186 63 chr16 70822800 70823400 0.0033 61 chr16 70825800 70827600 0.0016 73 chr16 70828800 70833600 0.0016 73 chr16 70838700 70839300 0.1608 62 chr16 70843500 70848900 0.0338 78 chr16 70852200 70852500 0.0943 84 chr16 70854600 70854900 0.0943 84 chr16 70856100 70857300 0.0376 90 chr16 70860300 70862700 0.0457 63 chr16 70864200 70864500 0.2287 41 chr16 70869000 70869300 0.0859 65 chr16 70872900 70874700 0.0006 66 chr16 70876200 70876800 0.2567 57 chr16 70879800 70880100 0.0233 68 chr16 70885200 70885500 0.3623 82 chr16 70889100 70889700 0.0154 52 chr16 70891500 70891800 0.3458 63 chr16 70894500 70895400 0.128 75 chr16 70900800 70901100 0.2349 80 chr16 70903500 70904100 0 74 chr16 70907400 70907700 0.2065 48 chr16 70910700 70915800 0.0068 64 chr16 70917600 70920300 0.0113 62 chr16 70923000 70924800 0.0026 53 chr16 70927200 70927500 0.0938 61 chr16 70928700 70929900 0.1164 54 chr16 70935300 70936200 0.0007 76 chr16 70941000 70941300 0.1698 66 chr16 70946100 70946400 0.2421 81 chr16 70951800 70952400 0.0037 70 chr16 70953900 70954500 0.0037 70 chr16 70957800 70958100 0.1487 75 chr16 70962600 70963800 0.0461 68 chr16 70968000 70968600 0.0524 65 chr16 70969800 70970400 0.0649 53 chr16 70972200 70976100 0.0648 68 chr16 70983000 70983600 0.0851 50 chr16 70986000 70988700 0 78 chr16 71001000 71001300 0.1278 52 chr16 71005800 71006100 0.3242 67 chr16 71008800 71010000 0.0678 90 chr16 71013600 71013900 0.1351 64 chr16 71015700 71016000 0.1351 64 chr16 71018100 71018400 0.0786 53 chr16 71023500 71025600 0.0075 76 chr16 71027700 71028000 0.2842 50 chr16 71029200 71029800 0.1939 55 chr16 71032500 71033100 0.1181 73 chr16 71034900 71036700 0.0631 69 chr16 71045700 71046300 0.0059 59 chr16 71050800 71051100 0.3221 47 chr16 71056800 71058300 0.0426 76 chr16 71070600 71070900 0.2527 49 chr16 71074800 71075100 0.3895 49 chr16 71076600 71077200 0.0403 53 chr16 71083800 71085600 0.0776 66 chr16 71087400 71092200 0 76 chr16 71094900 71096100 0.1614 73 chr16 71099100 71099700 0.0056 52 chr16 71100900 71101500 0.014 74 chr16 71103300 71106000 0.0079 69 chr16 71109900 71112000 0.0408 69 chr16 71114700 71115000 0.2616 44 chr16 71117100 71117400 0.1073 64 chr16 71119200 71123700 0.0763 76 chr16 71127300 71127600 0.1483 64 chr16 71129100 71129400 0.3127 64 chr16 71130900 71132700 0.0188 73 chr16 71140200 71140800 0.0006 63 chr16 71142300 71142900 0.1071 66 chr16 71146500 71150100 0 57 chr16 71154300 71156100 0.0723 63 chr16 71158800 71161200 0 65 chr16 71164200 71164800 0.0316 62 chr16 71166300 71166900 0.2026 56 chr16 71589900 71590200 0.1493 79 chr16 71603100 71604300 0 75 chr16 72056700 72057000 0.0061 72 chr16 72058200 72058800 0.0061 72 chr16 72060900 72061200 0.3913 77 chr16 72077100 72077400 0.1899 42 chr16 72342900 72343200 0.1431 73 chr16 72497100 72497400 0.3713 63 chr16 72570900 72571200 0.2805 73 chr16 72584100 72585600 0.015 98 chr16 72627900 72633000 0.028 80 chr16 73824600 73830300 0 80 chr16 74333700 74334600 0.0882 81 chr16 74336400 74336700 0.0882 81 chr16 74381700 74382300 0.0194 116 chr16 74384100 74386200 0.0194 116 chr16 74390100 74391000 0.2602 100 chr16 74405100 74406600 0 107 chr16 74408100 74409300 0.1219 134 chr16 74414400 74418600 0.0416 107 chr16 74420100 74423400 0.12 120 chr16 74427600 74428800 0.196 78 chr16 74526300 74526600 0.3232 56 chr16 74799600 74800200 0.0101 91 chr16 75204900 75206100 0.0006 71 chr16 75222900 75224100 0.0292 67 chr16 75504900 75505200 0.0606 81 chr16 75545400 75546000 0.1318 64 chr16 75822300 75822600 0.2037 75 chr16 75824100 75825000 0.0041 73 chr16 75826800 75827400 0.2205 88 chr16 76610700 76611000 0.051 77 chr16 76757400 76758000 0.0543 89 chr16 78651900 78652500 0.059 903 chr16 79696200 79696500 0.0539 61 chr16 80089500 80089800 0.0509 81 chr16 81082500 81082800 0.0282 73 chr16 81085800 81086400 0.1958 174 chr16 82139700 82142400 0.0116 102 chr16 82144500 82144800 0.0116 102 chr16 82275600 82276200 0.1766 97 chr16 83637300 83643300 0 75 chr16 84456000 84458400 0 66 chr16 85405200 85406700 0.0517 25 chr16 85410600 85412700 0.0371 72 chr16 85451400 85451700 0.2875 42 chr16 85519200 85519500 0.4334 98 chr16 85972500 85974000 0 220 chr16 86236200 86237400 0.1727 54 chr16 86262600 86262900 0.1679 77 chr16 86265000 86266800 0.231 84 chr16 86419200 86419800 0.3725 168 chr16 87162600 87163200 0.2199 48 chr16 87222300 87222600 0.4895 170 chr16 87726300 87726600 0.0758 17 chr16 87738900 87739200 0.4161 109 chr16 87999600 88001100 0.0985 42 chr16 88217700 88218000 0.1439 90 chr16 88219200 88219500 0.1439 90 chr16 88277700 88278600 0.2151 81 chr16 88295100 88295400 0.3122 23 chr16 88547100 88547400 0.1313 12 chr16 88728600 88729500 0.1513 75 chr16 88771800 88772100 0.3603 37 chr16 88831200 88831800 0.2077 35 chr16 88894200 88894500 0.1518 97 chr16 88933500 88933800 0.4167 44 chr16 88950600 88950900 0.2773 52 chr16 88955100 88955700 0.3941 44 chr16 89029200 89029500 0.3498 30 chr16 89068800 89069100 0.4576 203 chr16 89083500 89084100 0.1601 29 chr16 89166000 89166300 0.4319 43 chr16 89268000 89268600 0.2172 54 chr16 89400000 89400600 0.0438 44 chr16 89412000 89412300 0.4048 46 chr16 89421300 89421600 0.4738 37 chr16 89535900 89536200 0.4146 83 chr16 89587800 89588100 0.4558 32 chr16 89598600 89598900 0.198 36 chr16 89634900 89635200 0.3597 59 chr16 89647800 89648400 0.0279 42 chr16 89879400 89879700 0.3179 47 chr16 89901600 89902500 0.0381 44 chr16 90003600 90004500 0.0977 51 chr16 90008100 90008400 0.457 67 chr16 90100800 90101400 0.0448 89 chr16 90107400 90121200 0 434 chr16 90122400 90161700 0 434 chr16 90163200 90166800 0.0138 81 chr16 90169500 90173400 0.0117 63 chr16 90174600 90177000 0 114 chr16 90178200 90185700 0 114 chr16 90186900 90197100 0 114 chr16 90198600 90207000 0.0011 126 chr16 90208200 90211800 0.0011 126 chr16 90213600 90214800 0.0011 126 chr16 90216000 90228000 0 112 chr17 60000 63300 0 34 chr17 65700 89700 0 93 chr17 90900 114000 0 93 chr17 115800 129900 0 1057 chr17 132600 133800 0 101 chr17 135600 136500 0 101 chr17 137700 138900 0 101 chr17 140100 141000 0.0151 73 chr17 166800 168600 0 28 chr17 192000 192300 0.1814 12 chr17 201600 201900 0.1127 270 chr17 217500 218100 0.392 188 chr17 220500 221400 0.1 131 chr17 234000 234300 0.4544 43 chr17 242400 242700 0.412 65 chr17 253800 257700 0.0473 165 chr17 287400 287700 0.3276 15 chr17 295500 295800 0.3881 31 chr17 303600 304200 0.0886 84 chr17 340500 341100 0.44 26 chr17 355800 356400 0.2301 79 chr17 363600 363900 0.2632 13 chr17 370200 370500 0.4869 50 chr17 402900 404400 0 86 chr17 505800 506700 0.3062 51 chr17 510000 510300 0.2472 44 chr17 513900 514200 0.4833 52 chr17 618000 618300 0.1027 30 chr17 646500 646800 0.4382 198 chr17 648900 649500 0.26 123 chr17 658200 658500 0.3875 85 chr17 727500 728100 0.2188 89 chr17 810000 810300 0.4619 86 chr17 860400 860700 0.389 49 chr17 867000 867300 0.3788 38 chr17 894300 894600 0.2535 31 chr17 941700 942900 0.3922 82 chr17 952200 952800 0.1667 81 chr17 1006800 1007100 0.1411 21 chr17 1053000 1053300 0.3175 16 chr17 1065000 1065300 0.4066 47 chr17 1117200 1119300 0.087 77 chr17 1131300 1131600 0.4656 17 chr17 1308000 1311600 0 137 chr17 1738800 1739100 0.2906 66 chr17 1740900 1741200 0.4846 61 chr17 2052600 2052900 0.0024 29 chr17 2355000 2356500 0.225 110 chr17 2448000 2448600 0.0066 62 chr17 3051300 3053100 0 83 chr17 3054300 3056400 0 83 chr17 3058500 3060300 0.0029 45 chr17 3062100 3062400 0.1005 71 chr17 3064800 3065100 0.0055 49 chr17 3066600 3068700 0 72 chr17 3071100 3071400 0.4567 70 chr17 3072900 3073500 0.003 66 chr17 3079500 3079800 0.2641 61 chr17 3147600 3148200 0.2019 70 chr17 3150300 3150600 0.0706 68 chr17 3179400 3182100 0.0593 78 chr17 3230700 3231300 0.0241 64 chr17 3233100 3233700 0.3941 53 chr17 3235500 3238200 0 65 chr17 3241800 3242100 0 61 chr17 3243900 3246000 0 61 chr17 3248100 3250200 0 61 chr17 3252300 3252900 0.0076 63 chr17 3274500 3275100 0.2808 46 chr17 3327300 3328500 0.1286 63 chr17 3329700 3330000 0.1003 98 chr17 3351300 3351600 0.0243 59 chr17 3420600 3420900 0.2491 61 chr17 3455400 3455700 0.4219 63 chr17 3687000 3687900 0.0149 18 chr17 4089900 4090200 0.0791 41 chr17 4462200 4462500 0.1108 17 chr17 4639800 4640100 0.3856 19 chr17 5561400 5561700 0.4189 15 chr17 6658800 6659100 0.195 45 chr17 7749300 7749600 0.4472 90 chr17 9616200 9621900 0 89 chr17 10554000 10554300 0.4546 73 chr17 10759200 10759500 0.4687 41 chr17 11478000 11478900 0.1305 88 chr17 11654100 11654400 0.2706 52 chr17 11846100 11847000 0.1174 67 chr17 12443100 12444000 0.1107 21 chr17 12450000 12453600 0.0097 115 chr17 12651900 12652200 0.0466 21 chr17 12654900 12655200 0.1786 57 chr17 13468200 13468500 0.2673 26 chr17 13496400 13496700 0.3377 55 chr17 13782600 13783200 0.1405 26 chr17 13797000 13797300 0.3342 15 chr17 14022300 14023800 0 69 chr17 14026800 14027100 0.2693 64 chr17 14177400 14178300 0.0564 60 chr17 14234400 14234700 0.1659 78 chr17 14237400 14240400 0.0018 61 chr17 14345100 14345400 0.3275 51 chr17 15537000 15537300 0.1935 44 chr17 15557700 15558000 0.1975 41 chr17 15574200 15574800 0.2172 64 chr17 15600300 15600600 0.2234 56 chr17 15635700 15636000 0.2469 81 chr17 15637500 15637800 0.2587 116 chr17 15642600 15642900 0.3576 65 chr17 15700200 15700500 0.2929 60 chr17 15718800 15719100 0.2015 57 chr17 15730200 15730500 0.175 57 chr17 15735600 15735900 0.3375 66 chr17 15792600 15792900 0.1253 69 chr17 15794100 15794400 0.1253 69 chr17 15870000 15870300 0.2005 45 chr17 15880200 15880500 0.223 44 chr17 15960300 15960600 0.1668 24 chr17 16721400 16721700 0.279 55 chr17 16726800 16727700 0.1659 85 chr17 16730100 16730400 0.0928 58 chr17 16731600 16732200 0.0253 65 chr17 16735800 16736100 0.2714 63 chr17 16738200 16739400 0.1289 62 chr17 16752600 16752900 0.0771 70 chr17 16764900 16765200 0.0449 75 chr17 16777500 16777800 0.1067 90 chr17 16779000 16779300 0.0851 71 chr17 16785900 16786200 0.2365 81 chr17 16789200 16789500 0.2754 75 chr17 16800600 16800900 0.0492 60 chr17 16809300 16809600 0.1926 79 chr17 16828800 16829400 0.0014 59 chr17 16833300 16833600 0.2485 92 chr17 16839300 16841100 0.2284 100 chr17 16845600 16846200 0 47 chr17 16848300 16849500 0.0217 73 chr17 16863900 16866000 0.0524 73 chr17 17010300 17010600 0.1507 57 chr17 17011800 17012100 0.4298 74 chr17 17442000 17442300 0.1381 83 chr17 17911800 17912100 0.1889 80 chr17 18389400 18389700 0.3427 16 chr17 18391200 18398400 0 83 chr17 18399900 18400200 0.0617 69 chr17 18401400 18401700 0 30 chr17 18402900 18404400 0 47 chr17 18405900 18407400 0 57 chr17 18411900 18412800 0 61 chr17 18416400 18416700 0.3373 54 chr17 18417900 18418500 0 33 chr17 18420300 18420900 0.1002 73 chr17 18423900 18424200 0.1976 84 chr17 18426000 18429000 0 91 chr17 18430200 18453600 0 91 chr17 18456600 18459000 0 35 chr17 18460200 18462300 0 35 chr17 18469500 18469800 0 28 chr17 18471000 18472800 0 28 chr17 18474000 18474300 0 28 chr17 18477600 18482400 0 39 chr17 18483600 18483900 0 29 chr17 18485400 18493800 0 35 chr17 18498000 18504600 0 37 chr17 18505800 18506700 0 63 chr17 18513600 18516300 0 32 chr17 18517500 18517800 0 32 chr17 18520500 18521100 0 44 chr17 18522300 18522900 0 44 chr17 18526200 18527100 0 54 chr17 18528300 18528600 0 54 chr17 18533400 18534300 0 47 chr17 18536100 18536700 0 47 chr17 18538200 18538800 0 38 chr17 18540900 18541800 0 43 chr17 18544500 18545100 0.0475 28 chr17 18550200 18550800 0 66 chr17 18552600 18552900 0 66 chr17 18554100 18555300 0 43 chr17 18562800 18563100 0.0031 101 chr17 18576300 18576600 0.3578 41 chr17 18583200 18583500 0.3877 53 chr17 18584700 18585300 0.0455 78 chr17 18587700 18589800 0.1664 64 chr17 18603600 18603900 0 59 chr17 18605700 18606600 0 59 chr17 18619500 18621900 0.0758 64 chr17 18623100 18623400 0.1554 55 chr17 18646200 18646500 0.2512 54 chr17 18669000 18669300 0.1946 68 chr17 18689700 18690000 0.3294 35 chr17 18722100 18722400 0.1927 66 chr17 18727800 18728400 0.2165 75 chr17 18763800 18764100 0.1877 81 chr17 18806400 18806700 0.2667 43 chr17 18825000 18827100 0.007 49 chr17 18839400 18840900 0 72 chr17 18842100 18842400 0.0523 58 chr17 18888000 18888600 0.0037 64 chr17 19025700 19092900 0 110 chr17 19094100 19110900 0 94 chr17 19112400 19237200 0 115 chr17 19627200 19628700 0.0305 67 chr17 20323200 20323500 0.0892 49 chr17 20332500 20333100 0.0882 58 chr17 20337300 20337600 0.3162 45 chr17 20356200 20356500 0.0365 54 chr17 20360700 20362500 0.0909 66 chr17 20368200 20368500 0.2484 59 chr17 20391000 20391300 0.0911 44 chr17 20393400 20393700 0.2129 81 chr17 20395500 20395800 0.2129 81 chr17 20400900 20401200 0.2906 81 chr17 20406000 20406300 0.1207 71 chr17 20414400 20415900 0.1379 75 chr17 20417700 20418000 0.2832 64 chr17 20423400 20423700 0.2241 41 chr17 20429100 20429400 0.0529 62 chr17 20437800 20438100 0.0503 68 chr17 20442300 20442900 0 42 chr17 20445000 20446500 0 42 chr17 20451300 20453700 0.0132 34 chr17 20456400 20457300 0 29 chr17 20459700 20460000 0 21 chr17 20461800 20463900 0.0427 43 chr17 20465100 20465700 0.1435 33 chr17 20472600 20472900 0.2213 28 chr17 20483100 20484300 0.1466 40 chr17 20487600 20487900 0.2796 37 chr17 20492400 20492700 0.4414 78 chr17 20499000 20499300 0.1596 36 chr17 20500800 20501400 0.0351 58 chr17 20503200 20503500 0 96 chr17 20505000 20513400 0 96 chr17 20516400 20518500 0.0023 81 chr17 20531700 20532600 0.1001 58 chr17 20536800 20538600 0 60 chr17 20540100 20540400 0.3288 75 chr17 20544300 20544600 0.0072 64 chr17 20546100 20551800 0 85 chr17 20595300 20595600 0.1309 66 chr17 20687700 20688000 0.2785 51 chr17 20984100 20986200 0.0122 55 chr17 21316500 21316800 0.3127 71 chr17 21334200 21334500 0.1944 92 chr17 21342600 21342900 0.061 99 chr17 21345900 21346500 0.0109 111 chr17 21348000 21348300 0.0969 105 chr17 21412800 21413700 0.0025 112 chr17 21438600 21438900 0.0282 110 chr17 21623100 21623400 0.2099 57 chr17 21625800 21626100 0.1389 58 chr17 21653400 21654600 0.2407 115 chr17 21700200 21701100 0.0117 82 chr17 21738600 21739200 0.0373 82 chr17 21741300 21745500 0.0042 107 chr17 21753600 21753900 0.2378 96 chr17 21759000 21759300 0.1998 12 chr17 21762000 21762300 0.3418 112 chr17 21771000 21771300 0.3144 50 chr17 21782400 21782700 0.236 64 chr17 21853800 21855300 0.3933 359 chr17 21856500 21856800 0.3554 263 chr17 21858600 21859800 0.3766 189 chr17 21861300 21861900 0.3074 195 chr17 21865500 21866100 0.3328 243 chr17 21869400 21869700 0.3956 220 chr17 21873600 21874800 0.3704 239 chr17 21882000 21882300 0.2719 436 chr17 21883500 21992100 0 23536 chr17 22041900 22042200 0.075 19 chr17 22044000 22044300 0.1515 202 chr17 22047000 22048200 0.127 173 chr17 22076700 22077600 0.2577 73 chr17 22080000 22080300 0.0679 50 chr17 22375500 22408500 0 471 chr17 22746000 22747200 0 205 chr17 22748400 22761900 0 205 chr17 22814100 22817100 0 158 chr17 22818600 22821600 0 78 chr17 22823100 22912200 0 311 chr17 22913400 22990200 0 2064 chr17 22991400 23016000 0 2064 chr17 23017200 23027700 0 334 chr17 23028900 23031000 0 81 chr17 23032200 23067900 0 223 chr17 23069100 23093700 0 205 chr17 23094900 23175600 0 205 chr17 23177100 23192700 0 606 chr17 23194200 23219700 0 606 chr17 23221200 23221800 0.0017 766 chr17 23223300 23231100 0 35 chr17 23235300 23235600 0 10 chr17 23238900 23242500 0 121 chr17 23243700 23247900 0 70 chr17 23249700 23251500 0 19 chr17 23255700 23258100 0 2583 chr17 23260200 23263800 0 77 chr17 23267100 23268600 0 152 chr17 23271000 23271600 0 33 chr17 23273400 23277600 0 84 chr17 23281200 23286600 0 116 chr17 23289000 23298000 0 1530 chr17 23300100 23300400 0 14 chr17 23304900 23306700 0 20 chr17 23309400 23310000 0 34 chr17 23315100 23322300 0 67 chr17 23323800 23325000 0 11 chr17 23328900 23329200 0 10 chr17 23332500 23335500 0 45 chr17 23339400 23341500 0 28 chr17 23343600 23344200 0 15 chr17 23346600 23347200 0.1001 31 chr17 23349600 23349900 0 26 chr17 23352000 23352300 0 11 chr17 23353500 23365800 0 173 chr17 23369700 23370000 0 14 chr17 23371800 23372700 0 44 chr17 23376900 23377200 0 12 chr17 23379000 23380800 0.0103 55 chr17 23383500 23383800 0.1492 15 chr17 23385600 23388600 0 64 chr17 23389800 23391300 0 70 chr17 23394000 23398200 0 42 chr17 23399400 23400300 0 69 chr17 23403900 23405700 0 17 chr17 23407500 23419200 0 283 chr17 23421600 23424000 0 43 chr17 23428800 23429400 0 38 chr17 23430900 23433300 0 161 chr17 23436300 23443200 0 225 chr17 23445900 23447100 0 57 chr17 23448900 23449800 0 54 chr17 23452800 23455800 0 15 chr17 23457600 23458500 0 17 chr17 23460600 23461500 0 92 chr17 23462700 23468400 0 248 chr17 23470200 23473800 0 63 chr17 23475600 23476200 0 18 chr17 23477400 23477700 0 18 chr17 23479500 23483700 0 68 chr17 23485800 23487900 0 69 chr17 23489400 23490000 0 14 chr17 23492100 23496300 0 150 chr17 23497500 23497800 0 11 chr17 23500200 23502900 0 79 chr17 23506200 23506500 0 11 chr17 23508900 23509500 0 13 chr17 23511000 23511300 0 13 chr17 23513700 23514000 0 12 chr17 23515500 23515800 0 15 chr17 23520000 23520900 0 15 chr17 23523300 23525700 0 48 chr17 23526900 23527200 0 30 chr17 23529900 23530200 0.223 25 chr17 23531400 23532600 0 19 chr17 23534400 23537400 0 30 chr17 23538600 23538900 0 10 chr17 23540100 23545200 0 1314 chr17 23546700 23548800 0 23 chr17 23554200 23555100 0 32 chr17 23559000 23561400 0 44 chr17 23563800 23565300 0 45 chr17 23566500 23567700 0 45 chr17 23569800 23570700 0 166 chr17 23572200 23577000 0 62 chr17 23579700 23581200 0 18 chr17 23583000 23583900 0 452 chr17 23586000 23586900 0 15 chr17 23590200 23593200 0 48 chr17 23594400 23598600 0 76 chr17 23600700 23601000 0.1131 17 chr17 23603700 23605500 0 94 chr17 23606700 23615700 0 94 chr17 23617200 23617500 0 12 chr17 23620800 23626800 0 170 chr17 23628900 23630700 0 12 chr17 23632200 23638800 0 214 chr17 23640000 23641800 0 56 chr17 23644200 23644800 0 34 chr17 23646900 23650800 0 78 chr17 23656500 23657100 0 37 chr17 23663100 23664000 0 12 chr17 23666100 23667300 0 17 chr17 23668800 23673000 0 80 chr17 23676300 23677800 0 48 chr17 23680500 23680800 0 15 chr17 23682600 23682900 0 11 chr17 23686800 23688000 0 74 chr17 23691300 23694000 0 17 chr17 23698800 23700000 0 12 chr17 23701200 23701800 0 12 chr17 23703300 23703600 0 12 chr17 23708100 23708400 0 11 chr17 23711400 23711700 0 13 chr17 23714700 23715000 0 13 chr17 23716800 23717100 0 11 chr17 23719800 23722200 0 58 chr17 23727600 23728800 0 26 chr17 23731200 23734500 0 93 chr17 23736000 23736300 0 30 chr17 23740200 23753100 0 69 chr17 23755800 23759100 0 53 chr17 23760900 23761200 0 13 chr17 23762700 23770500 0 55 chr17 23773800 23778000 0 37 chr17 23779500 23781000 0 37 chr17 23783400 23784900 0 12 chr17 23786400 23786700 0 10 chr17 23791800 23793600 0 38 chr17 23795100 23796600 0 39 chr17 23800500 23802000 0 30 chr17 23803800 23805600 0 713 chr17 23810400 23811600 0 18 chr17 23817900 23824800 0 60 chr17 23826300 23831700 0 52 chr17 23832900 23833200 0 12 chr17 23842200 23842500 0 13 chr17 23844000 23845500 0 30 chr17 23849700 23853600 0 68 chr17 23857200 23861100 0 305 chr17 23863500 23873700 0 93 chr17 23875200 23881800 0 149 chr17 23884800 23886600 0 39 chr17 23887800 23888700 0 39 chr17 23892900 23894100 0 46 chr17 23896800 23900100 0 72 chr17 23901600 23903100 0 81 chr17 23904900 23910900 0 49 chr17 23912100 23916600 0 82 chr17 23917800 23918100 0 12 chr17 23919900 23921400 0 60 chr17 23922600 23922900 0.07 23 chr17 23925000 23925300 0 10 chr17 23928900 23931600 0 62 chr17 23933700 23936700 0 31 chr17 23941200 23943300 0 40 chr17 23944500 23946600 0 34 chr17 23949900 23954700 0 71 chr17 23956200 23964600 0 89 chr17 23969100 23969700 0 49 chr17 23970900 23977200 0 70 chr17 23979000 23980800 0 192 chr17 23982000 23983200 0 192 chr17 23984400 23988300 0 192 chr17 23993700 23996100 0 106 chr17 23997300 23997600 0 14 chr17 23999100 24004200 0 80 chr17 24007200 24007500 0 13 chr17 24009300 24009600 0 14 chr17 24011100 24013500 0 66 chr17 24016200 24019500 0 75 chr17 24021300 24021600 0.2557 64 chr17 24024000 24025800 0 54 chr17 24027300 24027600 0 11 chr17 24029100 24033300 0 30 chr17 24034800 24036900 0 34 chr17 24038700 24043500 0 107 chr17 24044700 24046800 0 23 chr17 24048000 24048900 0 53 chr17 24050100 24051300 0 50 chr17 24057300 24057900 0 13 chr17 24061800 24062700 0 203 chr17 24064200 24066000 0 42 chr17 24067200 24069900 0 81 chr17 24071700 24073500 0 68 chr17 24076800 24081600 0 88 chr17 24082800 24083400 0 130 chr17 24084900 24094500 0 59 chr17 24096900 24098700 0 43 chr17 24101400 24102000 0 16 chr17 24106500 24107400 0 45 chr17 24108900 24111000 0 85 chr17 24112500 24117900 0 50 chr17 24119400 24123900 0 42 chr17 24125700 24127800 0 56 chr17 24132300 24133200 0 46 chr17 24135000 24137400 0 29 chr17 24139200 24141600 0 130 chr17 24144300 24147300 0 60 chr17 24150600 24153900 0 573 chr17 24158100 24158400 0.0558 12 chr17 24163800 24166500 0 40 chr17 24168300 24170700 0 79 chr17 24175200 24176400 0 49 chr17 24180000 24188400 0 1036 chr17 24191400 24199200 0 52 chr17 24200400 24205500 0 66 chr17 24206700 24219900 0 81 chr17 24223500 24230400 0 154 chr17 24232500 24232800 0 11 chr17 24235200 24235500 0 20 chr17 24238800 24243600 0 69 chr17 24245400 24246300 0 35 chr17 24248100 24249300 0.0009 19 chr17 24250500 24258900 0 116 chr17 24261300 24262500 0 35 chr17 24263700 24264000 0.0396 20 chr17 24265800 24268800 0 35 chr17 24270600 24270900 0 11 chr17 24275700 24277200 0 67 chr17 24278700 24286500 0 67 chr17 24288600 24288900 0 12 chr17 24291300 24293100 0 41 chr17 24296100 24297000 0 42 chr17 24298200 24298500 0 12 chr17 24299700 24303000 0 68 chr17 24304500 24305400 0 41 chr17 24306900 24311400 0 43 chr17 24312900 24313200 0 27 chr17 24316200 24318000 0 65 chr17 24319200 24319500 0 12 chr17 24324300 24324600 0 11 chr17 24327600 24328500 0 50 chr17 24330300 24332100 0 49 chr17 24333600 24333900 0 10 chr17 24335100 24340200 0 27 chr17 24344700 24351300 0 59 chr17 24354000 24355200 0 569 chr17 24359100 24359700 0 26 chr17 24363000 24363900 0 27 chr17 24366900 24367500 0 41 chr17 24371400 24375300 0 66 chr17 24380100 24382500 0 44 chr17 24384900 24386700 0 54 chr17 24388800 24390300 0 41 chr17 24391500 24391800 0 12 chr17 24395400 24395700 0 12 chr17 24397500 24399900 0 1126 chr17 24402600 24403200 0 13 chr17 24408300 24410700 0 22 chr17 24415500 24421800 0 4203 chr17 24423300 24425700 0 86 chr17 24427200 24427500 0 12 chr17 24429300 24429600 0 10 chr17 24437700 24439800 0 36 chr17 24441000 24442500 0 30 chr17 24445200 24445800 0.0936 37 chr17 24447300 24449700 0 16 chr17 24453000 24455700 0 82 chr17 24456900 24457200 0 19 chr17 24459300 24464100 0 67 chr17 24467100 24467700 0 28 chr17 24469200 24469500 0 11 chr17 24471300 24478200 0 68 chr17 24481500 24486000 0 32 chr17 24487200 24489300 0 55 chr17 24492000 24493500 0 142 chr17 24495600 24501600 0 223 chr17 24504300 24505800 0 18 chr17 24507300 24511200 0 71 chr17 24514200 24519000 0 204 chr17 24520200 24520500 0 14 chr17 24525600 24527100 0 27 chr17 24528300 24528900 0 35 chr17 24531000 24539700 0 876 chr17 24541500 24542100 0 11 chr17 24543900 24552000 0 66 chr17 24553200 24558300 0 48 chr17 24559500 24560100 0 11 chr17 24564900 24566400 0 73 chr17 24569700 24570600 0 28 chr17 24571800 24574500 0 127 chr17 24576600 24577500 0 55 chr17 24581400 24582300 0 57 chr17 24584100 24591900 0 116 chr17 24594600 24599100 0 145 chr17 24600900 24601200 0 10 chr17 24606300 24608100 0 26 chr17 24612900 24614700 0 44 chr17 24615900 24617700 0 76 chr17 24623400 24624900 0 1118 chr17 24627900 24628200 0 11 chr17 24630000 24636300 0 75 chr17 24638100 24642300 0 53 chr17 24643500 24645300 0 50 chr17 24648000 24648300 0 11 chr17 24649800 24650100 0 10 chr17 24651300 24652200 0 34 chr17 24654300 24656700 0 20 chr17 24660600 24662100 0 24 chr17 24663600 24665100 0 38 chr17 24668400 24670200 0 53 chr17 24672300 24676200 0 159 chr17 24677700 24678000 0 14 chr17 24681000 24683400 0 54 chr17 24685500 24685800 0 12 chr17 24688500 24697800 0 67 chr17 24699600 24700200 0 13 chr17 24702300 24703500 0 156 chr17 24707700 24714600 0 66 chr17 24716100 24716700 0 13 chr17 24718200 24719100 0 567 chr17 24722400 24723900 0 18 chr17 24729300 24729600 0 12 chr17 24734400 24736800 0 149 chr17 24740100 24742500 0 1219 chr17 24744300 24744600 0 11 chr17 24745800 24748800 0 1244 chr17 24750600 24754200 0 334 chr17 24758400 24759300 0 30 chr17 24760500 24762600 0 12 chr17 24765300 24766500 0 39 chr17 24770100 24780000 0 2349 chr17 24781500 24784200 0 74 chr17 24786000 24786300 0 10 chr17 24790500 24791100 0.2394 24 chr17 24792900 24793500 0 30 chr17 24795300 24797400 0 38 chr17 24800100 24802200 0 39 chr17 24809700 24810300 0 16 chr17 24812100 24816900 0 71 chr17 24819900 24824700 0 88 chr17 24828300 24828600 0 10 chr17 24830700 24831000 0 14 chr17 24833100 24837300 0 34 chr17 24839100 24839400 0 12 chr17 24841500 24843300 0 44 chr17 24845700 24846000 0 20 chr17 24847200 24851400 0 67 chr17 24852900 24853500 0 14 chr17 24855900 24856500 0.0019 21 chr17 24857700 24858000 0.0703 12 chr17 24859500 24861300 0 80 chr17 24863400 24865500 0 14 chr17 24866700 24869700 0 151 chr17 24872400 24872700 0 11 chr17 24873900 24879600 0 63 chr17 24882000 24883500 0 22 chr17 24885300 24885600 0 11 chr17 24888000 24893700 0 2416 chr17 24895800 24896100 0 12 chr17 24902100 24903300 0 14 chr17 24908100 24908700 0 34 chr17 24910500 24910800 0 12 chr17 24913500 24913800 0 36 chr17 24916200 24918000 0 44 chr17 24921300 24924000 0 32 chr17 24928200 24929700 0 22 chr17 24931200 24931500 0 13 chr17 24933000 24936600 0 61 chr17 24940500 24941100 0 93 chr17 24942600 24945000 0 69 chr17 24954900 24956100 0 37 chr17 24958200 24961200 0 47 chr17 24963900 24967800 0 63 chr17 24969000 24969900 0 13 chr17 24975000 24976200 0 20 chr17 24979500 24979800 0 12 chr17 24981000 24988200 0 974 chr17 24990900 24991200 0 12 chr17 24992400 24997200 0 77 chr17 24999000 25007100 0 323 chr17 25008600 25010400 0 76 chr17 25011900 25012200 0 21 chr17 25015800 25016400 0 13 chr17 25020000 25021800 0 70 chr17 25023000 25025100 0 28 chr17 25028400 25028700 0 13 chr17 25031700 25040700 0 710 chr17 25043700 25045200 0 52 chr17 25047600 25050300 0 93 chr17 25053000 25056900 0 138 chr17 25059300 25064400 0 337 chr17 25068600 25069200 0 13 chr17 25071000 25077600 0 493 chr17 25078800 25087800 0 199 chr17 25091400 25094700 0 58 chr17 25096200 25107600 0 1253 chr17 25111200 25112700 0.0546 40 chr17 25115100 25118400 0 185 chr17 25120200 25120800 0 75 chr17 25122900 25123200 0 11 chr17 25124700 25128000 0 50 chr17 25130100 25131000 0 43 chr17 25132200 25135800 0 68 chr17 25139100 25140900 0 2390 chr17 25143300 25143900 0.001 63 chr17 25149900 25152000 0 43 chr17 25154100 25158300 0 57 chr17 25165500 25165800 0 16 chr17 25167300 25174800 0 76 chr17 25180500 25180800 0 17 chr17 25182300 25182600 0 54 chr17 25184700 25187700 0 720 chr17 25190700 25194600 0 50 chr17 25197600 25198800 0 18 chr17 25201500 25201800 0 16 chr17 25203600 25204800 0 61 chr17 25207500 25211700 0 197 chr17 25213500 25213800 0 10 chr17 25217100 25218000 0 17 chr17 25219200 25221600 0 30 chr17 25227900 25228200 0 18 chr17 25232100 25234500 0 29 chr17 25239300 25240500 0 129 chr17 25242600 25245600 0 159 chr17 25247400 25247700 0 26 chr17 25251600 25256700 0 76 chr17 25257900 25261200 0 21 chr17 25263900 25266600 0 55 chr17 25268700 25269600 0 28 chr17 25270800 25271400 0 28 chr17 25273500 25273800 0 12 chr17 25275600 25275900 0 11 chr17 25277100 25277400 0 10 chr17 25281000 25282200 0 107 chr17 25283400 25284300 0 28 chr17 25289100 25295400 0 50 chr17 25298100 25298700 0 17 chr17 25301700 25304700 0 77 chr17 25306500 25307100 0 30 chr17 25309800 25311000 0 21 chr17 25314600 25317900 0 82 chr17 25320000 25320300 0 11 chr17 25322400 25323000 0 135 chr17 25324800 25326600 0 76 chr17 25328100 25331700 0 217 chr17 25332900 25334700 0 50 chr17 25338000 25340400 0 38 chr17 25341900 25344900 0 59 chr17 25346700 25350600 0 34 chr17 25352700 25353900 0 302 chr17 25356600 25366200 0 211 chr17 25368000 25368600 0 43 chr17 25371300 25372500 0 36 chr17 25375500 25379400 0 36 chr17 25382100 25384800 0 5097 chr17 25387200 25387500 0 36 chr17 25388700 25392600 0 4252 chr17 25393800 25396800 0 322 chr17 25398300 25400400 0 183 chr17 25403700 25404000 0 30 chr17 25405200 25411200 0 296 chr17 25413900 25416900 0 70 chr17 25418700 25419900 0 36 chr17 25421100 25425600 0 48 chr17 25427100 25429500 0 40 chr17 25431000 25435500 0 63 chr17 25437300 25440600 0 80 chr17 25442700 25447800 0 38 chr17 25450200 25450800 0 103 chr17 25452300 25456200 0 67 chr17 25457700 25458300 0 139 chr17 25462200 25463400 0 41 chr17 25464600 25474200 0 64 chr17 25476000 25476900 0 46 chr17 25480200 25481700 0 455 chr17 25482900 25489800 0 455 chr17 25493700 25499100 0 646 chr17 25502700 25504500 0 72 chr17 25505700 25506000 0 45 chr17 25507800 25509900 0 28 chr17 25511400 25515600 0 61 chr17 25516800 25517100 0 11 chr17 25519500 25520400 0 49 chr17 25521600 25521900 0 49 chr17 25523700 25527900 0 938 chr17 25529400 25533600 0 123 chr17 25536600 25540800 0 54 chr17 25542600 25545300 0 54 chr17 25549200 25551000 0 39 chr17 25552200 25553400 0 17 chr17 25555500 25561200 0 67 chr17 25563900 25572600 0 4118 chr17 25574100 25575300 0 66 chr17 25578600 25582800 0 70 chr17 25586400 25588800 0 83 chr17 25591200 25592400 0 45 chr17 25594200 25600200 0 55 chr17 25603200 25608900 0 74 chr17 25610100 25612800 0 74 chr17 25614300 25616700 0 18 chr17 25620000 25620600 0 22 chr17 25621800 25623000 0 30 chr17 25624500 25629300 0 59 chr17 25631400 25638600 0 132 chr17 25639800 25643100 0 74 chr17 25644300 25648800 0 66 chr17 25650000 25653600 0 261 chr17 25655400 25661400 0 307 chr17 25665900 25666800 0 28 chr17 25668300 25668900 0 32 chr17 25670100 25670400 0.2988 12 chr17 25672800 25676700 0 58 chr17 25677900 25681200 0 58 chr17 25683900 25684800 0 62 chr17 25686300 25694100 0 62 chr17 25696500 25697700 0 33 chr17 25700700 25704900 0 108 chr17 25708800 25734900 0 150 chr17 25737000 25743600 0 55 chr17 25745400 25747500 0 55 chr17 25749000 25750200 0 38 chr17 25751700 25752000 0.0773 13 chr17 25753500 25754700 0 35 chr17 25757700 25758000 0 10 chr17 25759500 25761900 0 31 chr17 25763400 25764600 0 21 chr17 25766100 25768200 0 118 chr17 25769400 25775100 0 3795 chr17 25778100 25781700 0 57 chr17 25785600 25790400 0 1563 chr17 25794600 25796700 0 217 chr17 25798200 25800600 0 47 chr17 25802400 25802700 0 13 chr17 25803900 25806000 0 49 chr17 25807500 25813800 0 54 chr17 25816200 25821000 0 53 chr17 25822500 25826400 0 33 chr17 25827900 25830300 0 66 chr17 25831500 25840800 0 44 chr17 25842900 25847700 0 70 chr17 25850100 25867800 0 303 chr17 25869300 25869600 0 15 chr17 25871700 25874100 0 64 chr17 25876200 25878300 0 58 chr17 25881300 25882200 0 62 chr17 25884600 25886700 0 59 chr17 25888800 25892700 0 53 chr17 25895100 25895700 0 33 chr17 25898400 25900500 0 25 chr17 25902300 25903500 0 36 chr17 25904700 25905900 0 48 chr17 25907700 25914600 0 67 chr17 25917600 25917900 0 21 chr17 25919100 25926000 0 992 chr17 25927500 25930800 0 79 chr17 25934100 25934700 0.0314 18 chr17 25936200 25938300 0 21 chr17 25939800 25951500 0 159 chr17 25953000 25960200 0 226 chr17 25961400 25967700 0 226 chr17 25969800 25976400 0 233 chr17 25977900 25981200 0 42 chr17 25982400 25985700 0 51 chr17 25986900 25991700 0 43 chr17 25994100 25999500 0 110 chr17 26001000 26001600 0 37 chr17 26003700 26010000 0 146 chr17 26011800 26028300 0 437 chr17 26029800 26045400 0 205 chr17 26048100 26052600 0 83 chr17 26053800 26056200 0 30 chr17 26057400 26060700 0 52 chr17 26064000 26071200 0 183 chr17 26075100 26083200 0 457 chr17 26084700 26085600 0 74 chr17 26087400 26090700 0 48 chr17 26091900 26092800 0.1069 50 chr17 26094000 26098500 0 296 chr17 26100600 26106900 0 1578 chr17 26108400 26115300 0 73 chr17 26116500 26120100 0 37 chr17 26121900 26123400 0 1755 chr17 26124600 26126400 0 64 chr17 26127900 26133900 0 473 chr17 26135400 26136900 0 15 chr17 26138100 26139300 0 33 chr17 26140500 26145600 0 232 chr17 26146800 26156700 0 279 chr17 26157900 26161200 0 40 chr17 26163600 26172900 0 164 chr17 26174400 26181000 0 33 chr17 26182800 26184600 0 69 chr17 26186100 26192100 0 60 chr17 26193900 26194500 0 18 chr17 26195700 26205300 0 99 chr17 26206500 26207700 0 99 chr17 26209800 26210700 0 77 chr17 26212200 26216700 0 61 chr17 26217900 26219700 0 87 chr17 26220900 26226900 0 86 chr17 26228400 26238000 0 183 chr17 26239200 26244000 0 72 chr17 26245500 26259300 0 62 chr17 26260800 26261700 0 41 chr17 26263500 26275800 0 243 chr17 26277600 26278200 0 74 chr17 26279700 26280600 0 185 chr17 26282400 26294400 0 388 chr17 26296500 26298000 0 23 chr17 26299200 26300100 0.056 458 chr17 26301300 26303100 0 105 chr17 26305200 26305500 0 16 chr17 26306700 26311800 0 213 chr17 26313000 26318700 0 40 chr17 26320500 26332500 0 253 chr17 26334000 26337000 0 30 chr17 26338500 26339700 0 40 chr17 26341200 26345700 0 78 chr17 26346900 26349900 0 78 chr17 26351400 26353500 0 27 chr17 26355300 26358900 0 124 chr17 26360100 26364600 0 845 chr17 26365800 26367000 0 33 chr17 26368500 26373000 0 22 chr17 26374500 26385900 0 226 chr17 26387400 26391300 0 347 chr17 26392500 26396400 0 62 chr17 26397900 26400000 0 691 chr17 26401200 26403900 0 55 chr17 26406300 26415600 0 76 chr17 26416800 26423700 0 60 chr17 26425200 26428800 0 60 chr17 26430300 26436300 0 76 chr17 26438700 26447400 0 1206 chr17 26448900 26451000 0 48 chr17 26452200 26466000 0 248 chr17 26467500 26474400 0 83 chr17 26475900 26477100 0 21 chr17 26478300 26487900 0 52 chr17 26490000 26490600 0 36 chr17 26492100 26496000 0 2782 chr17 26497200 26498700 0 39 chr17 26500200 26501700 0 35 chr17 26502900 26504400 0 69 chr17 26505600 26510100 0 73 chr17 26511900 26512200 0 16 chr17 26514000 26517900 0 29 chr17 26519100 26528400 0 58 chr17 26529900 26540100 0 66 chr17 26541600 26544900 0 256 chr17 26546100 26553600 0 256 chr17 26554800 26555700 0 45 chr17 26557200 26564400 0 58 chr17 26565600 26603100 0 10049 chr17 26604300 26610600 0 10049 chr17 26611800 26625900 0 10049 chr17 26630100 26630400 0.2708 111 chr17 26753700 26754000 0.4778 96 chr17 26763600 26763900 0.253 147 chr17 26783100 26785500 0.2621 279 chr17 26787300 26788800 0.3699 237 chr17 26794200 26794500 0.3937 169 chr17 26796300 26796600 0.3907 139 chr17 26797800 26799900 0.3826 183 chr17 26801400 26804700 0.2953 263 chr17 26805900 26809500 0.0473 663 chr17 26811900 26813100 0.0814 381 chr17 26814600 26816400 0.2553 195 chr17 26820900 26821200 0.4469 175 chr17 26824200 26826600 0.3314 425 chr17 26828100 26829000 0.2797 480 chr17 26830200 26833500 0.0899 779 chr17 26835300 26835600 0.371 324 chr17 26836800 26837400 0.3211 248 chr17 26840100 26841600 0.2735 228 chr17 26842800 26849100 0.2735 228 chr17 26851500 26851800 0.1985 289 chr17 26854500 26856900 0.2485 321 chr17 26859600 26864100 0.1904 239 chr17 26865300 26865600 0.4589 166 chr17 26868900 26870700 0.1081 645 chr17 26873100 26873400 0.4356 181 chr17 26877600 26881500 0 1028 chr17 26883900 26884500 0.0248 426 chr17 26936100 26938500 0.145 6317 chr17 26939700 26941200 0.2085 2591 chr17 27160800 27162600 0.0031 76 chr17 27210300 27210600 0.0338 54 chr17 27212100 27213300 0.0663 34 chr17 27645600 27645900 0.2771 69 chr17 27746100 27746400 0.2402 72 chr17 27829200 27831600 0 70 chr17 27838200 27840600 0.0075 71 chr17 28223100 28223700 0.265 66 chr17 28455600 28456200 0 26 chr17 29895600 29896500 0 38 chr17 30439500 30441900 0 99 chr17 30617100 30621600 0 71 chr17 30625800 30630300 0 76 chr17 30635700 30636000 0.164 55 chr17 30654900 30655200 0.0695 54 chr17 30663300 30663600 0.2692 58 chr17 30668400 30668700 0.0117 48 chr17 30700200 30700800 0.1803 56 chr17 30732300 30732600 0.0731 66 chr17 30978600 30978900 0.1926 55 chr17 30980400 30980700 0.2675 65 chr17 31036200 31036500 0.2461 63 chr17 31937700 31938000 0.0934 76 chr17 32028000 32028900 0 52 chr17 32061000 32061300 0.3505 63 chr17 32070900 32071200 0.1679 66 chr17 32084400 32085000 0.0559 58 chr17 32090700 32091600 0 56 chr17 32679900 32680500 0.0028 96 chr17 32682000 32683200 0.0028 96 chr17 32887500 32892900 0 79 chr17 33542400 33542700 0.0525 53 chr17 34212600 34212900 0.3983 64 chr17 34293600 34297500 0.0396 83 chr17 35030100 35030400 0.1527 107 chr17 35353500 35353800 0.1165 61 chr17 35398500 35398800 0.2424 75 chr17 35441700 35442000 0.2963 78 chr17 36162000 36162600 0.045 112 chr17 36164400 36164700 0.045 112 chr17 36166500 36168300 0.0124 80 chr17 36169500 36179700 0 115 chr17 36208800 36209400 0.0248 35 chr17 36225300 36230700 0 94 chr17 36233700 36234000 0 94 chr17 36235200 36236100 0 55 chr17 36237600 36238200 0 55 chr17 36239700 36290400 0 136 chr17 36291600 36388500 0 160 chr17 36390000 36396900 0 101 chr17 36398100 36410400 0 101 chr17 36411600 36414900 0 101 chr17 36416100 36443100 0 108 chr17 36445200 36445500 0.2335 77 chr17 36450300 36452400 0 66 chr17 36786300 36786600 0.3212 54 chr17 37379700 37380000 0.2549 61 chr17 37566300 37566600 0.1937 61 chr17 37890600 37891800 0 78 chr17 37893300 37896600 0 78 chr17 37897800 37901100 0 78 chr17 37902600 37966800 0 151 chr17 37969200 37972800 0 152 chr17 37974000 38250000 0 152 chr17 38253600 38253900 0.0743 63 chr17 38630700 38632200 0.0406 51 chr17 38930100 38930400 0.2184 87 chr17 41081400 41081700 0.1573 38 chr17 41083500 41083800 0.1687 30 chr17 41089200 41089500 0.4114 24 chr17 41203200 41206200 0.0943 80 chr17 41227200 41227800 0.0169 45 chr17 41238600 41239200 0.0239 41 chr17 42219300 42219600 0.2146 66 chr17 42264900 42265200 0.2662 75 chr17 42300000 42300300 0.329 64 chr17 42338100 42338400 0.0909 22 chr17 42550500 42550800 0.1898 45 chr17 43228200 43230300 0 67 chr17 43231500 43231800 0.4283 61 chr17 43233000 43304700 0 410 chr17 43322700 43323900 0 194 chr17 44034600 44036100 0.0018 61 chr17 44179800 44181600 0.0608 71 chr17 44239200 44239500 0.1466 70 chr17 44524800 44525100 0.4756 58 chr17 44984400 44984700 0.3173 32 chr17 45180600 45180900 0 34 chr17 45450600 45450900 0.3919 61 chr17 45498000 45498300 0.0264 82 chr17 45500700 45501300 0.0264 82 chr17 45510600 45510900 0 120 chr17 45512100 45522000 0 120 chr17 45525900 45529200 0 49 chr17 45531300 45532800 0.0072 106 chr17 45534300 45536100 0.0072 106 chr17 45537900 45561300 0 108 chr17 45562500 45562800 0.3345 44 chr17 45599100 45599700 0.0231 59 chr17 45602700 45603300 0.0021 93 chr17 45618600 45618900 0.236 51 chr17 45621600 45622800 0.2044 82 chr17 46224600 46224900 0.1677 49 chr17 46237500 46238100 0.1447 56 chr17 46242600 46246500 0 105 chr17 46293000 46311300 0 127 chr17 46313100 46324500 0 127 chr17 46326000 46409100 0 127 chr17 46410300 46457400 0 100 chr17 46458900 46474800 0 87 chr17 46476000 46486800 0 87 chr17 46488000 46488600 0 87 chr17 46497000 46497300 0.2835 85 chr17 46499700 46500000 0.1951 88 chr17 46503900 46518900 0 112 chr17 46520100 46528800 0 112 chr17 46530300 46531800 0 112 chr17 46533000 46533900 0 112 chr17 46535400 46539000 0 95 chr17 46540800 46541100 0.2561 84 chr17 46544100 46550400 0 115 chr17 46551900 46552500 0.0022 114 chr17 46554300 46608600 0 125 chr17 46610100 46621800 0 125 chr17 46623000 46704600 0 125 chr17 46705800 46707000 0 125 chr17 47016300 47016900 0.064 107 chr17 47019000 47019300 0.2914 64 chr17 47021400 47021700 0.0105 63 chr17 47025600 47026200 0.1085 69 chr17 47031900 47032200 0.2543 99 chr17 47039400 47042700 0 52 chr17 47045700 47049000 0 100 chr17 47051700 47052000 0.3844 82 chr17 47523000 47523300 0.247 62 chr17 49151100 49151400 0 43 chr17 49423500 49424100 0.0169 64 chr17 50880600 50880900 0.3553 32 chr17 51483300 51484500 0.222 89 chr17 51624900 51625200 0.1893 73 chr17 52185600 52186200 0.1435 64 chr17 52405500 52405800 0.0545 67 chr17 52408200 52408500 0.1133 82 chr17 52657500 52658400 0.272 71 chr17 53841600 53841900 0.2397 111 chr17 55502400 55503600 0.1348 83 chr17 55506000 55507500 0.0182 66 chr17 55791300 55791600 0.2279 58 chr17 56050200 56051400 0.0271 87 chr17 56190300 56193300 0.0013 84 chr17 56792700 56793000 0.3591 208 chr17 57132000 57132300 0.4885 17 chr17 59574000 59574300 0.0398 51 chr17 59578200 59585400 0 80 chr17 59589600 59589900 0.2492 60 chr17 59593200 59593800 0.0141 65 chr17 59595600 59595900 0.046 56 chr17 59597100 59597400 0.046 56 chr17 59978100 59978400 0.0361 60 chr17 59979600 59980200 0.0361 60 chr17 59981700 59982900 0.0117 72 chr17 59985600 59985900 0.2156 62 chr17 59990100 59997300 0 64 chr17 59999400 60000000 0.3262 58 chr17 60001200 60001500 0.0238 60 chr17 60007200 60007500 0.277 52 chr17 60008700 60010200 0.0594 87 chr17 60020100 60034500 0 93 chr17 60111000 60126300 0 86 chr17 60550800 60551400 0.3166 78 chr17 60882900 60886200 0.0055 87 chr17 60978000 60979200 0.3397 72 chr17 61111800 61114500 0.0073 87 chr17 62021100 62021400 0.2131 59 chr17 62234700 62235000 0.0718 114 chr17 62263800 62266800 0.0448 74 chr17 62272500 62272800 0.4272 22 chr17 62274300 62274600 0.3558 61 chr17 63862800 63863100 0.0306 58 chr17 63872700 63873000 0.0589 64 chr17 63886200 63886800 0.0547 64 chr17 63895500 63896100 0.0076 80 chr17 64797300 64797600 0.1958 54 chr17 64828200 64828500 0.3677 66 chr17 64881300 64882200 0.2584 69 chr17 64884000 64906500 0 115 chr17 64907700 64908300 0 115 chr17 64911300 64911900 0.1939 89 chr17 64914600 64914900 0.1939 89 chr17 65764800 65766300 0.2482 57 chr17 66596700 66602400 0 88 chr17 66798300 66799500 0.2375 1205 chr17 66934500 66934800 0.4024 36 chr17 67470900 67471200 0.0797 54 chr17 68269200 68269500 0.0801 25 chr17 68313000 68313300 0.4074 139 chr17 68409000 68410500 0.0695 83 chr17 68999400 68999700 0.4732 57 chr17 69002100 69003600 0.0782 62 chr17 69280500 69280800 0.2203 87 chr17 69612300 69613500 0.3011 44 chr17 69615600 69616200 0.388 74 chr17 69740700 69742200 0.0812 99 chr17 70458900 70464900 0 90 chr17 70545000 70550400 0 101 chr17 71352300 71352600 0.3204 84 chr17 71355000 71355300 0.3058 62 chr17 71608800 71609100 0.0089 25 chr17 73148100 73148400 0.2875 25 chr17 76991400 76991700 0.435 23 chr17 77239800 77240100 0.4611 29 chr17 77776500 77777400 0.0323 62 chr17 80488500 80488800 0.2526 24 chr17 80601600 80602200 0 46 chr17 80744400 80744700 0.4482 30 chr17 80748900 80749500 0.2736 59 chr17 80915400 80915700 0.4184 47 chr17 80963400 80963700 0.1822 45 chr17 81531300 81531600 0.4951 159 chr17 82448400 82448700 0 54 chr17 82764900 82765500 0.0393 86 chr17 82785300 82785600 0.4324 51 chr17 82848900 82849200 0.4346 91 chr17 82903800 82904100 0.2949 33 chr17 82971600 82972200 0.1187 102 chr17 82975200 82975800 0.3941 43 chr17 83022300 83022600 0.3556 60 chr17 83025300 83025600 0.2322 29 chr17 83068200 83068800 0.3154 30 chr17 83205600 83205900 0.4667 67 chr17 83208300 83211600 0.0006 67 chr17 83212800 83214000 0.0004 60 chr17 83215500 83235600 0 141 chr17 83238300 83239500 0 141 chr17 83240700 83247600 0 79 chr18 9900 45600 0 152 chr18 47100 47400 0.2698 126 chr18 96900 97200 0.3742 29 chr18 107400 109800 0.0446 32919 chr18 111900 112800 0.4202 2870 chr18 116100 116400 0.3194 45 chr18 117600 117900 0.0331 66 chr18 126000 126600 0.0049 56 chr18 219000 219600 0.2311 71 chr18 515100 515400 0.3455 79 chr18 536100 541500 0 84 chr18 663600 663900 0.31 77 chr18 972600 974100 0.0793 97 chr18 975300 975600 0.1971 77 chr18 1354500 1354800 0.1544 67 chr18 1517400 1517700 0.2601 99 chr18 1519200 1521300 0.1566 67 chr18 1533900 1534500 0.0284 46 chr18 1632300 1632600 0.2955 62 chr18 1720500 1721100 0.0033 24 chr18 2001000 2001300 0.1181 48 chr18 2248500 2248800 0.236 91 chr18 2251500 2252100 0.0771 168 chr18 3736800 3739200 0.1639 84 chr18 4473900 4475100 0.0683 84 chr18 4477800 4478100 0.3279 80 chr18 4650000 4650300 0.1137 53 chr18 5007600 5009700 0.2381 70 chr18 5332500 5334600 0.0142 56 chr18 5681400 5682000 0.0029 69 chr18 5685000 5687700 0 94 chr18 6272400 6273600 0.0151 107 chr18 6420000 6420300 0.1714 101 chr18 7399200 7401300 0.0679 74 chr18 7402500 7403100 0.0679 74 chr18 7692000 7692300 0.053 53 chr18 7967100 7972200 0.002 109 chr18 8057700 8062800 0.0016 82 chr18 8711100 8711400 0.1688 112 chr18 9537000 9537600 0.3058 60 chr18 9815400 9816000 0.0119 30 chr18 10573500 10574100 0.0887 108 chr18 10575900 10576200 0.1899 97 chr18 10606200 10606800 0.0544 64 chr18 10615800 10616100 0.1381 23 chr18 10642800 10643700 0.114 78 chr18 10646100 10646400 0.1295 42 chr18 10914900 10915200 0.2506 54 chr18 11620500 11620800 0.3436 86 chr18 11623800 11624100 0.3053 74 chr18 11634000 11634300 0.2514 65 chr18 11804100 11804700 0.1491 56 chr18 12077700 12078000 0.1295 72 chr18 12081600 12081900 0.0693 47 chr18 12141600 12144900 0 77 chr18 12147000 12150000 0 77 chr18 12179700 12180300 0.2801 71 chr18 12203100 12205500 0.0108 83 chr18 12228000 12229500 0.0548 68 chr18 13976100 13981800 0 80 chr18 14165100 14165400 0.0266 59 chr18 14382300 14382600 0.346 66 chr18 14384400 14385000 0.1906 58 chr18 14387400 14389200 0.0292 74 chr18 14452200 14452800 0.2917 51 chr18 14454300 14454600 0.1512 55 chr18 14518500 14518800 0.2134 45 chr18 14560500 14560800 0.1511 42 chr18 14562000 14562300 0.2252 40 chr18 14589900 14590200 0.248 55 chr18 14594700 14595000 0.4657 62 chr18 14613000 14613300 0.1869 31 chr18 14616000 14616300 0.3573 30 chr18 14623500 14624400 0.1974 77 chr18 14629500 14629800 0.1696 36 chr18 14634300 14634600 0.1222 48 chr18 14656500 14657400 0.2455 57 chr18 14663400 14663700 0.249 72 chr18 14673600 14673900 0.2534 52 chr18 14689200 14689500 0.0249 12 chr18 14721000 14721600 0.1676 47 chr18 14800800 14804400 0 54 chr18 14811600 14815200 0 60 chr18 14822700 14823300 0.0226 64 chr18 14857500 14859900 0.0196 47 chr18 14891400 14891700 0.3236 54 chr18 15026700 15027000 0.3012 76 chr18 15032100 15032400 0.2295 43 chr18 15159300 15159600 0.1593 57 chr18 15171900 15172200 0.2391 151 chr18 15213000 15213900 0 66 chr18 15215700 15216000 0 66 chr18 15273600 15273900 0.3049 24 chr18 15363600 15363900 0.2157 67 chr18 15461400 15465000 0 150 chr18 15466200 15466800 0 150 chr18 15468000 15486300 0 336 chr18 15487800 15507600 0 336 chr18 15508800 15516900 0 336 chr18 15518400 15520500 0 261 chr18 15521700 15550200 0 261 chr18 15551400 15562500 0 430 chr18 15563700 15576900 0 430 chr18 15578400 15631200 0 430 chr18 15632400 15642600 0 187 chr18 15643800 15645300 0 187 chr18 15647100 15661800 0 177 chr18 15663300 15666000 0 155 chr18 15667200 15686400 0 210 chr18 15687600 15691800 0 210 chr18 15693000 15706500 0 210 chr18 15707700 15713100 0 210 chr18 15714600 15720600 0 210 chr18 15722100 15739500 0 199 chr18 15741000 15751500 0 199 chr18 15753300 15754800 0 199 chr18 15756000 15758700 0 175 chr18 15760200 15769800 0 175 chr18 15771000 15781200 0 193 chr18 15785700 15786300 0.0375 79 chr18 15787800 15788400 0 31 chr18 15792000 15795000 0 572 chr18 15797100 15809400 0 572 chr18 15810600 15821700 0 572 chr18 15822900 16864200 0 572 chr18 16865400 17803200 0 572 chr18 17805000 18381600 0 460 chr18 18382800 18519000 0 460 chr18 18520200 18616800 0 710 chr18 18618300 19415700 0 710 chr18 19417200 19622100 0 710 chr18 19623900 19719000 0 385 chr18 19720200 19913100 0 385 chr18 19914600 20075100 0 385 chr18 20076300 20198400 0 385 chr18 20199600 20562300 0 385 chr18 20564100 20564700 0 109 chr18 20571600 20572200 0.0038 72 chr18 20573400 20573700 0.0038 72 chr18 20576700 20577900 0 85 chr18 20580000 20581500 0 117 chr18 20583000 20586300 0 117 chr18 20591400 20592600 0.0262 55 chr18 20595300 20595600 0.1637 45 chr18 20596800 20598300 0.1637 45 chr18 20599800 20600700 0 180 chr18 20601900 20611500 0 180 chr18 20613000 20726700 0 180 chr18 20727900 20732700 0 180 chr18 20733900 20734800 0 180 chr18 20738700 20739900 0 102 chr18 20741400 20742900 0 75 chr18 20745000 20746800 0 128 chr18 20748000 20754900 0 128 chr18 20756400 20781000 0 128 chr18 20782500 20785500 0 128 chr18 20787900 20789400 0 76 chr18 20790900 20798400 0 76 chr18 20800800 20801100 0 76 chr18 20803800 20806200 0 76 chr18 20807400 20807700 0 76 chr18 20810400 20812500 0.0302 68 chr18 20813700 20814600 0 104 chr18 20817600 20818500 0 59 chr18 20820300 20822400 0 59 chr18 20824800 20825100 0.0532 32 chr18 20827500 20827800 0.3953 42 chr18 20835000 20839800 0 95 chr18 20911200 20912700 0 51 chr18 20914200 20920800 0.0012 138 chr18 20922300 20931900 0 183 chr18 20935200 20935500 0.1353 42 chr18 20945700 20946000 0.0073 49 chr18 20954100 20954400 0.0809 61 chr18 20955600 20955900 0.2531 60 chr18 21144900 21145200 0.3423 71 chr18 21160200 21160500 0.2103 45 chr18 21738600 21738900 0.4444 78 chr18 21884700 21885000 0.2373 90 chr18 22530900 22533900 0.0243 72 chr18 22581600 22581900 0.0083 30 chr18 22722000 22722300 0.284 78 chr18 22819500 22820100 0.0228 43 chr18 24323700 24324000 0.1285 37 chr18 24619200 24624000 0.0357 95 chr18 24711300 24713400 0.0342 88 chr18 24714900 24715800 0.1036 64 chr18 25033500 25033800 0.4488 72 chr18 25485300 25487400 0 83 chr18 26168700 26170200 0.1695 65 chr18 26247900 26248800 0.0014 26 chr18 27282000 27282600 0.1703 77 chr18 27515100 27515400 0.1694 63 chr18 27531600 27531900 0.3022 59 chr18 27738300 27738600 0.3119 61 chr18 27740100 27741000 0.0132 105 chr18 28217400 28217700 0.1535 39 chr18 28416600 28420500 0.021 123 chr18 28783800 28784100 0 22 chr18 29151300 29151900 0.3025 53 chr18 29168100 29168400 0.3872 33 chr18 29552700 29553000 0.1552 67 chr18 30022200 30026400 0 81 chr18 31348800 31350600 0.0281 71 chr18 31353000 31353300 0.2687 88 chr18 32228400 32229900 0.1442 77 chr18 32857200 32860800 0.0078 80 chr18 32862000 32862300 0.0078 80 chr18 33881100 33881400 0.3072 59 chr18 34332000 34332300 0.2321 72 chr18 34334100 34334400 0.24 63 chr18 34335900 34336500 0.3568 65 chr18 34554000 34555200 0.0409 86 chr18 35206800 35209800 0.0023 84 chr18 35211000 35211300 0.0023 84 chr18 36235200 36237300 0.0997 71 chr18 36240000 36240300 0.1 87 chr18 36986400 36987300 0.0145 60 chr18 37078500 37078800 0.3166 61 chr18 37819800 37825500 0 77 chr18 37842300 37842600 0.4049 62 chr18 37941000 37941900 0.1615 79 chr18 37970100 37970400 0.1147 52 chr18 37973400 37973700 0.246 65 chr18 39254700 39255000 0.1227 71 chr18 39566400 39570600 0.0024 79 chr18 39860100 39861600 0.0309 61 chr18 39925800 39926100 0.187 70 chr18 39928200 39928500 0.2948 55 chr18 40190100 40190400 0.331 71 chr18 40845300 40847700 0 92 chr18 41635200 41637600 0.0488 88 chr18 41775300 41780100 0 91 chr18 43299600 43300200 0.0946 83 chr18 43326000 43326300 0.0769 92 chr18 43451700 43452300 0 46 chr18 43873500 43873800 0.1508 21 chr18 45030300 45030600 0.3416 59 chr18 45080400 45081000 0 37 chr18 45681000 45681300 0.3399 28 chr18 46546200 46546500 0.3995 153 chr18 46962000 46970100 0 326 chr18 47019900 47031300 0 275 chr18 47348400 47348700 0.0737 57 chr18 47352000 47352300 0.3127 80 chr18 47642700 47643300 0.3279 72 chr18 47660700 47666400 0 89 chr18 48276600 48276900 0.0521 48 chr18 48469800 48470100 0.0721 24 chr18 48510900 48511500 0.0436 108 chr18 49202400 49202700 0.2051 105 chr18 49577100 49578600 0.1285 87 chr18 50150100 50150400 0.2194 49 chr18 50344200 50349600 0 88 chr18 51677100 51677400 0.4206 45 chr18 51741300 51743700 0.0113 112 chr18 51744900 51745800 0.1853 85 chr18 52792500 52793100 0.1119 881 chr18 53110800 53111100 0.3073 43 chr18 53173800 53174100 0.0651 57 chr18 53175900 53176500 0.3035 80 chr18 53516700 53517300 0.2391 79 chr18 54342600 54344400 0.0088 68 chr18 54400200 54400500 0.1752 44 chr18 54426600 54430500 0 68 chr18 54664500 54664800 0.3033 73 chr18 55887900 55890000 0.0222 81 chr18 56529600 56529900 0.0778 81 chr18 57264600 57265200 0.1302 78 chr18 57642300 57642600 0.1141 113 chr18 57720300 57720600 0.0601 92 chr18 57721800 57725100 0.0601 92 chr18 58134300 58134600 0.4145 23 chr18 58170300 58171200 0 67 chr18 59404200 59409600 0 107 chr18 60031200 60034800 0.1316 78 chr18 60928200 60928500 0.1113 76 chr18 61023300 61023600 0.1516 38 chr18 61074600 61075500 0 72 chr18 61311300 61311600 0.1643 52 chr18 61561500 61561800 0.0272 69 chr18 61716600 61718100 0.1092 75 chr18 62097000 62097300 0.3457 56 chr18 62581200 62581800 0.178 36 chr18 62906400 62912100 0 103 chr18 63063600 63063900 0.1234 218 chr18 63469500 63470100 0.2904 38 chr18 63653400 63653700 0.3082 53 chr18 63863400 63866400 0.0027 70 chr18 64368900 64369200 0.3824 28 chr18 64880400 64880700 0.285 63 chr18 65393100 65393400 0.3363 25 chr18 65583900 65584200 0.2081 45 chr18 65779500 65779800 0.0385 44 chr18 66547800 66548100 0.4387 31 chr18 66717300 66717600 0.2532 67 chr18 68227200 68227800 0.0122 68 chr18 68538300 68541600 0 36 chr18 68786400 68786700 0.2248 59 chr18 68859300 68859600 0.0539 52 chr18 69450000 69454800 0.0578 102 chr18 70685400 70686600 0.0115 136 chr18 70746600 70752300 0 76 chr18 71179500 71179800 0.0301 24 chr18 71357100 71357400 0.1558 54 chr18 71656200 71657700 0.0508 37 chr18 72162300 72162600 0.3201 55 chr18 72966600 72972300 0 94 chr18 72975600 72976800 0.0481 75 chr18 73444200 73444500 0.3092 79 chr18 74485200 74485500 0.0805 15 chr18 74998800 74999400 0.0004 90 chr18 75299700 75300000 0.4777 45 chr18 75591000 75591300 0.4051 83 chr18 75847200 75852600 0 112 chr18 76585500 76585800 0.3629 58 chr18 76645800 76646100 0.4181 58 chr18 76810200 76810500 0.3867 52 chr18 76967100 76967400 0.3097 112 chr18 77028000 77028600 0.0699 70 chr18 77416500 77418300 0.2033 73 chr18 77670300 77670600 0.3643 13 chr18 78371100 78372900 0.0129 96 chr18 78437400 78438300 0.0625 334 chr18 78486000 78486300 0.4519 26 chr18 78502500 78503100 0.0018 74 chr18 78513600 78514800 0.2194 68 chr18 78633300 78633900 0.2947 72 chr18 78753900 78754200 0.1537 36 chr18 78782400 78782700 0.3774 35 chr18 78787200 78787500 0.4951 34 chr18 79014900 79017000 0.1763 145 chr18 79033500 79036500 0.2596 122 chr18 79115100 79116900 0.0367 64 chr18 79146000 79146300 0.488 50 chr18 79308900 79309200 0.1281 42 chr18 79326000 79326300 0.3208 67 chr18 79356900 79358700 0.0552 66 chr18 79367100 79367400 0.4007 65 chr18 79417500 79417800 0.4769 29 chr18 79504800 79505400 0.3199 77 chr18 79525200 79525500 0.4277 24 chr18 79550100 79551900 0 26 chr18 79618800 79619700 0.3568 381 chr18 79687200 79687500 0.3706 94 chr18 79691700 79692000 0.3874 20 chr18 79745400 79746300 0 37 chr18 79752300 79753200 0.0878 82 chr18 79764600 79765500 0.1719 57 chr18 79808400 79809300 0.1089 66 chr18 79830900 79831500 0.0503 61 chr18 79885800 79887000 0 69 chr18 79919700 79921500 0.1145 109 chr18 80015700 80016000 0.3031 72 chr18 80071500 80073300 0.0439 110 chr18 80075100 80075700 0.4657 33 chr18 80207100 80207400 0.4176 50 chr18 80258400 80258700 0.3921 19 chr18 80262900 80263500 0.191 402 chr19 60000 95100 0 132 chr19 97800 99000 0 132 chr19 100200 102900 0 132 chr19 104400 107400 0 132 chr19 109200 229200 0 106 chr19 230700 236700 0 80 chr19 239400 239700 0.083 95 chr19 241200 241500 0.2004 61 chr19 250200 250500 0.2066 70 chr19 312600 312900 0.2867 40 chr19 332700 333900 0.0197 61 chr19 360900 361800 0.1338 78 chr19 399900 400500 0.1577 37 chr19 411000 411300 0.4038 54 chr19 423300 423600 0.37 36 chr19 432000 432900 0.1025 36 chr19 491700 492000 0.3177 24 chr19 524700 525000 0.3196 84 chr19 540000 540300 0.4355 11 chr19 564000 564900 0.0924 41 chr19 605400 605700 0.4636 39 chr19 1033800 1034700 0.1481 20 chr19 1148700 1149000 0.0781 30 chr19 1195200 1198500 0 47 chr19 1627800 1629000 0.3196 60 chr19 2418600 2418900 0.2378 32 chr19 2713500 2714100 0.202 110 chr19 2772900 2773200 0.4628 50 chr19 3177900 3178200 0.1305 47 chr19 3332400 3332700 0.4504 25 chr19 3649200 3649800 0 90 chr19 3973200 3975000 0 43 chr19 4619100 4619400 0.4681 21 chr19 4961100 4961400 0.1641 50 chr19 5076000 5076600 0.2967 97 chr19 5498400 5498700 0.3579 48 chr19 5610900 5611800 0 58 chr19 5649000 5649600 0 61 chr19 7007100 7007700 0.04 67 chr19 7010100 7010700 0.0217 68 chr19 7019400 7032600 0 101 chr19 7035000 7035300 0.0493 84 chr19 7037700 7051500 0 103 chr19 7056600 7061400 0 101 chr19 8274000 8274300 0 40 chr19 8275500 8286600 0 40 chr19 8288100 8292600 0 37 chr19 8293800 8297100 0 37 chr19 8298600 8301300 0 37 chr19 8740800 8767200 0 267 chr19 8768400 8778900 0 267 chr19 8780400 8786700 0 233 chr19 11424600 11424900 0.212 22 chr19 12005400 12005700 0.1082 70 chr19 12006900 12007500 0.1082 70 chr19 12393300 12393600 0.3006 56 chr19 13536000 13536300 0.3648 11 chr19 13703100 13704300 0.1915 69 chr19 13936800 13937100 0.2977 28 chr19 14585700 14586000 0.2307 57 chr19 14589900 14590200 0.1833 61 chr19 14622600 14623200 0 27 chr19 14649600 14649900 0.4291 35 chr19 14749500 14750100 0.2925 13 chr19 15362400 15362700 0.3641 84 chr19 15674100 15674400 0.3333 14 chr19 15931500 15934200 0.0489 258 chr19 17349000 17349300 0.2568 103 chr19 20148600 20150700 0.0801 54 chr19 20797200 20797500 0.4543 31 chr19 21720300 21722700 0 57 chr19 21864900 21865200 0.0265 74 chr19 21866400 21866700 0.0265 74 chr19 22107900 22108500 0.337 63 chr19 22915800 22916100 0.2118 72 chr19 22925700 22926300 0.0574 65 chr19 22928100 22928400 0.0397 24 chr19 23134500 23135100 0.1443 83 chr19 24114300 24114600 0.1455 59 chr19 24411000 24413700 0 77 chr19 24417000 24417300 0.4868 192 chr19 24420600 24449100 0 427 chr19 24891300 24891900 0.1596 651 chr19 24894000 24895800 0.0686 418 chr19 24908400 24908700 0.006 15 chr19 27639600 27641100 0.1823 70 chr19 27645000 27645600 0.1251 79 chr19 28050600 28050900 0.4578 53 chr19 28678200 28678500 0.2025 53 chr19 28805100 28805400 0.2978 15 chr19 29229600 29231100 0 69 chr19 29459700 29465100 0 73 chr19 29898000 29902200 0 72 chr19 30141300 30143700 0 65 chr19 31506900 31507500 0.3713 64 chr19 31653600 31654500 0 64 chr19 34078500 34080300 0 63 chr19 34616400 34616700 0.1092 42 chr19 34861500 34863000 0.049 94 chr19 34864200 34864800 0.049 94 chr19 35358600 35358900 0.2272 66 chr19 35360400 35360700 0.038 45 chr19 35371200 35371800 0.3392 57 chr19 36247200 36247800 0.1559 114 chr19 36269100 36309000 0 240 chr19 36311700 36312600 0 60 chr19 36698400 36698700 0.2906 67 chr19 36699900 36700200 0.1214 58 chr19 36793500 36793800 0.3068 29 chr19 37264500 37264800 0.0716 61 chr19 37266000 37266600 0.0716 61 chr19 37269300 37303500 0 411 chr19 37332000 37332300 0.3343 84 chr19 37751100 37752000 0.1751 55 chr19 37838100 37843200 0 76 chr19 37866300 37866900 0.0056 80 chr19 38540400 38541000 0.1443 34 chr19 38770500 38773500 0 71 chr19 38789400 38792100 0 80 chr19 39245100 39245400 0.2783 58 chr19 39876600 39877200 0.0806 103 chr19 39879600 39881100 0.0288 94 chr19 39882900 39884700 0.0444 98 chr19 39887100 39889800 0 111 chr19 39892800 39893400 0.2125 110 chr19 39895800 39897600 0.0161 109 chr19 39899700 39901500 0.0754 101 chr19 39903300 39906300 0 108 chr19 39958500 39958800 0.1327 43 chr19 40107300 40109700 0.0002 93 chr19 40117200 40119300 0.101 91 chr19 40647600 40649400 0.0007 56 chr19 40821300 40821600 0.3135 39 chr19 40842900 40843200 0.1006 60 chr19 40874700 40875000 0.0681 63 chr19 40965000 40965300 0.1602 80 chr19 40998600 40999200 0.1843 61 chr19 41103900 41104200 0.1806 64 chr19 41644200 41646000 0.0206 78 chr19 41842800 41843100 0.3766 72 chr19 42769800 42770400 0.2481 74 chr19 43051200 43052400 0.017 70 chr19 43243200 43243500 0.304 68 chr19 43356000 43360800 0 73 chr19 43364700 43365600 0.014 88 chr19 43369200 43370400 0.0435 73 chr19 43374900 43378800 0 71 chr19 43864500 43864800 0.2311 67 chr19 43866000 43866300 0.2311 67 chr19 43878000 43878300 0.2417 47 chr19 44225100 44225400 0.3503 95 chr19 44546400 44546700 0.0538 77 chr19 44594400 44595000 0.048 66 chr19 44801100 44801400 0.471 46 chr19 45648300 45648600 0.2218 41 chr19 46038900 46039800 0.2929 65 chr19 46078800 46079100 0.4615 49 chr19 46438500 46440900 0 37 chr19 46452900 46453200 0.2246 11 chr19 47903400 47958900 0 501 chr19 48669000 48669600 0.3813 287 chr19 48834900 48835200 0.2757 29 chr19 49023000 49023600 0.1063 58 chr19 49028100 49028400 0.1246 70 chr19 49032600 49032900 0.0232 78 chr19 49040400 49041000 0.2993 84 chr19 49054500 49054800 0.1489 63 chr19 49959600 49959900 0.0411 53 chr19 49970700 49971300 0.3294 72 chr19 50074800 50075100 0.1661 59 chr19 50091300 50098800 0 877 chr19 50100000 50133600 0 877 chr19 50137200 50139300 0 322 chr19 50609100 50609400 0.0756 10 chr19 50617500 50617800 0.1212 62 chr19 50961000 50961300 0.3689 58 chr19 51051600 51051900 0.0581 31 chr19 51182700 51183000 0.4927 55 chr19 51310800 51311100 0.1409 38 chr19 51353400 51353700 0.4121 35 chr19 51463800 51464400 0.314 68 chr19 51629700 51630300 0.04 57 chr19 51646200 51646800 0.0275 90 chr19 51672900 51674100 0 63 chr19 51758100 51758700 0.0684 88 chr19 52575600 52575900 0.1137 65 chr19 52802700 52803000 0.317 191 chr19 52888200 52888500 0.0797 53 chr19 53014200 53014500 0.0649 69 chr19 53049300 53049600 0.0059 72 chr19 53097000 53097300 0.0819 79 chr19 53113200 53113500 0.0981 41 chr19 53126400 53127000 0.0004 66 chr19 53186100 53188800 0 74 chr19 53281800 53282100 0.2322 61 chr19 53301600 53301900 0.1905 53 chr19 53962500 53962800 0.4281 27 chr19 54360000 54360300 0.0974 51 chr19 54510000 54510300 0.3773 81 chr19 54580200 54581400 0 74 chr19 54645000 54645300 0.3421 53 chr19 54749700 54750000 0.2692 27 chr19 54780000 54781200 0.1369 60 chr19 54844200 54844500 0.3422 27 chr19 55093500 55094100 0.4238 46 chr19 55450200 55450500 0.2292 52 chr19 55472100 55472400 0.4325 39 chr19 55763700 55764000 0.3647 87 chr19 55773600 55774500 0.0363 65 chr19 55824900 55827000 0 71 chr19 55850400 55851600 0.4654 46 chr19 56080200 56080500 0.0022 32 chr19 56103900 56104500 0.2659 25 chr19 56151000 56151600 0.3374 76 chr19 56235300 56236200 0.3537 78 chr19 56306700 56307000 0.2272 39 chr19 56339400 56339700 0.023 38 chr19 56444700 56445900 0.0672 79 chr19 56600100 56600400 0.3368 30 chr19 56669700 56670000 0.2661 58 chr19 56745000 56745600 0.1629 218 chr19 57148200 57148500 0.1221 48 chr19 57169200 57169500 0.2278 25 chr19 57206700 57207000 0.4028 62 chr19 57833100 57835200 0.0192 83 chr19 57881400 57882300 0.0865 101 chr19 58106400 58106700 0.1481 17 chr19 58337400 58337700 0.1195 55 chr19 58404300 58404600 0.2187 58 chr19 58587600 58587900 0.0974 59 chr19 58589100 58589400 0.0437 78 chr19 58591800 58604400 0.002 99 chr19 58605600 58605900 0.002 99 chr2 127200 127500 0.3351 76 chr2 197700 198300 0.0219 46 chr2 207000 207600 0.1359 138 chr2 294000 294300 0.4876 13 chr2 306600 308700 0.211 47 chr2 399000 399300 0.3463 72 chr2 420300 420900 0.0257 30 chr2 427200 427500 0.4499 40 chr2 488100 488400 0.0756 14 chr2 495300 495600 0.0635 30 chr2 671400 671700 0.1278 53 chr2 800400 803400 0.0168 99 chr2 804900 805200 0.1516 87 chr2 846600 846900 0.3029 45 chr2 861000 861300 0.2527 22 chr2 879000 879300 0.4135 64 chr2 928200 928500 0.3437 111 chr2 931800 932400 0.042 20 chr2 970500 970800 0.2222 69 chr2 1012800 1014300 0.0251 38 chr2 1107000 1109100 0 72 chr2 1179900 1180200 0.3586 88 chr2 1221600 1223400 0.1335 429 chr2 1317300 1317600 0.3782 35 chr2 1342500 1346100 0 61 chr2 1417200 1417800 0.0187 77 chr2 1444500 1444800 0.1581 46 chr2 1490100 1490400 0.2577 29 chr2 1529100 1529400 0.3412 15 chr2 1568700 1569000 0.2091 28 chr2 1750500 1750800 0.2871 70 chr2 2034300 2036400 0.0236 50 chr2 2138400 2138700 0.0578 79 chr2 2257800 2259300 0.0011 122 chr2 2736300 2736600 0.4243 46 chr2 3221100 3221700 0.0063 147 chr2 3315300 3315900 0.0731 62 chr2 3331200 3332100 0.0924 106 chr2 3374700 3375000 0.0953 105 chr2 3437100 3437400 0.3468 34 chr2 3590400 3592200 0.0064 138 chr2 3775200 3775800 0.0633 34 chr2 3796500 3796800 0.1463 75 chr2 4159200 4159500 0.2758 60 chr2 4162200 4162500 0.2177 93 chr2 4471200 4471500 0.4452 57 chr2 4647900 4648200 0.2045 85 chr2 4733700 4739700 0 98 chr2 5049900 5050200 0.2386 56 chr2 5069100 5069400 0.2057 22 chr2 5196900 5199000 0.0379 77 chr2 5637600 5637900 0.333 62 chr2 5644200 5644500 0.2666 73 chr2 6238200 6238800 0.0122 59 chr2 7120500 7120800 0.277 94 chr2 7488600 7489200 0.2343 48 chr2 8041200 8041500 0.2863 83 chr2 9406200 9406500 0.1486 29 chr2 10399200 10399500 0.3314 226 chr2 10804500 10805700 0.1749 69 chr2 10953600 10953900 0.4391 220 chr2 10996200 11001600 0 101 chr2 11091900 11092200 0.0611 12 chr2 12346500 12346800 0.3467 77 chr2 12492300 12492600 0.3633 59 chr2 12522600 12525000 0 102 chr2 13734300 13734900 0.1792 86 chr2 14489100 14489400 0.0657 63 chr2 14501700 14502000 0.1877 77 chr2 14662500 14662800 0.1065 94 chr2 14802000 14802300 0.124 63 chr2 14850600 14853300 0.0762 106 chr2 15026100 15026400 0.3386 22 chr2 15219600 15219900 0.3652 66 chr2 16230600 16232100 0.209 108 chr2 16593900 16599600 0 117 chr2 16876800 16877100 0.356 67 chr2 16878600 16878900 0.2049 73 chr2 17946600 17946900 0.4035 36 chr2 17984100 17985300 0 76 chr2 18012300 18014400 0.0398 94 chr2 18015600 18016200 0.1086 62 chr2 18756000 18756300 0.1515 24 chr2 19307100 19307400 0.2417 72 chr2 19309500 19310700 0.0924 130 chr2 19831800 19832100 0.2034 87 chr2 20820600 20820900 0.1216 69 chr2 20906400 20906700 0.2978 58 chr2 21067500 21067800 0.3466 86 chr2 21188100 21188400 0.2198 86 chr2 21208800 21209100 0.3165 71 chr2 21907800 21908100 0.343 77 chr2 22158900 22159200 0.2378 85 chr2 22986900 22988100 0.0499 89 chr2 23225100 23230500 0 87 chr2 23845800 23847300 0 54 chr2 26656200 26656500 0.3134 53 chr2 27359700 27360300 0.1441 60 chr2 27460200 27460800 0.0332 83 chr2 27539400 27541200 0.1751 100 chr2 27556800 27558900 0 90 chr2 28126500 28126800 0.1744 74 chr2 28131000 28131300 0.3691 28 chr2 28458600 28459200 0.0194 22 chr2 29093100 29094600 0.1604 91 chr2 29672700 29673300 0.3837 73 chr2 30596700 30597000 0.1278 55 chr2 30606300 30606600 0.2612 72 chr2 30613800 30614400 0.045 71 chr2 30816900 30817200 0.0104 49 chr2 30907800 30908700 0.132 76 chr2 31500300 31500900 0.2163 82 chr2 31576200 31577100 0.0232 55 chr2 32110800 32111100 0.3083 23 chr2 32446800 32448300 0.1032 68 chr2 32866500 32867100 0.0179 2767 chr2 32868300 32870400 0.0179 2767 chr2 32916000 32916900 0.0063 213491 chr2 33556200 33556500 0.4155 38 chr2 34572600 34576500 0 89 chr2 34819800 34820100 0.1715 68 chr2 36112800 36118500 0 87 chr2 36183000 36184500 0.0808 173 chr2 37225500 37226100 0.0834 71 chr2 37494000 37494900 0.0076 72 chr2 38492700 38493000 0.2693 58 chr2 38755500 38755800 0.4046 60 chr2 38844300 38844600 0.2672 25 chr2 40012800 40013100 0.3483 60 chr2 41515200 41515500 0.1615 72 chr2 41550600 41553600 0 71 chr2 41746200 41748600 0.0085 70 chr2 42605100 42605400 0.3174 67 chr2 42991200 42991500 0.2502 83 chr2 42992700 42994800 0.0543 85 chr2 43296900 43298400 0.0971 74 chr2 43660500 43665900 0 112 chr2 44587800 44589600 0.0206 47 chr2 45059700 45065400 0 95 chr2 45076200 45081600 0 109 chr2 47100300 47100600 0.294 50 chr2 48554700 48556800 0.0693 76 chr2 48744000 48744600 0.0567 95 chr2 49008600 49008900 0.1997 92 chr2 49010100 49010400 0.1997 92 chr2 49638900 49639800 0.055 75 chr2 51735600 51737100 0.0321 88 chr2 51852600 51852900 0.4032 19 chr2 51939300 51939600 0.0615 79 chr2 53398800 53400600 0 128 chr2 53591400 53592600 0.0393 81 chr2 54873600 54873900 0.1709 55 chr2 55739400 55740000 0.0959 117 chr2 56172900 56173500 0.3665 95 chr2 56552100 56552400 0.1106 47 chr2 56622900 56623200 0.4338 26 chr2 56664000 56664300 0.1714 74 chr2 56682900 56683800 0.0145 78 chr2 57192300 57193500 0 30 chr2 57422400 57422700 0.2191 73 chr2 57423900 57424200 0.0954 108 chr2 57590400 57590700 0.0667 116 chr2 57612900 57613200 0.2337 79 chr2 58383000 58383600 0.1843 75 chr2 59162400 59162700 0.1062 70 chr2 59554800 59555100 0.1204 94 chr2 59556900 59558400 0.1204 94 chr2 60084600 60088500 0 154 chr2 60143400 60143700 0.1105 111 chr2 60928500 60928800 0.1351 93 chr2 61980000 61980600 0.0088 93 chr2 62647500 62648100 0.4164 71 chr2 62836500 62837100 0.1456 79 chr2 62838900 62839500 0.1456 79 chr2 64375800 64376100 0.4061 184 chr2 64511100 64513200 0 77 chr2 66142200 66142500 0.0368 71 chr2 66396900 66397200 0.2948 85 chr2 66627600 66627900 0.3001 75 chr2 67176600 67176900 0.3163 69 chr2 70429800 70431000 0.0996 66 chr2 70434600 70435200 0.2783 49 chr2 71083500 71084100 0.0076 63 chr2 71182800 71183400 0.0014 73 chr2 71411700 71416800 0 97 chr2 71769300 71770200 0.0293 62 chr2 72016200 72016800 0.0718 69 chr2 72018900 72020400 0.0718 69 chr2 72065100 72067800 0.0116 99 chr2 72642300 72642600 0.2322 82 chr2 72702300 72703800 0.0141 97 chr2 73166700 73167000 0.1394 62 chr2 73463400 73463700 0.247 72 chr2 73785000 73807800 0 144 chr2 74794200 74794500 0.1313 60 chr2 74797200 74797500 0.3487 66 chr2 75330900 75331500 0.1244 93 chr2 76299300 76301700 0 106 chr2 76480800 76481100 0.1398 75 chr2 76776600 76778400 0.1296 87 chr2 76800300 76800900 0.3244 81 chr2 77244000 77244300 0.185 85 chr2 77597100 77598600 0.1228 108 chr2 77647200 77647800 0.0243 127 chr2 77670300 77670600 0.2464 51 chr2 77676300 77676600 0.2 53 chr2 77680200 77680500 0.2608 42 chr2 77681700 77683200 0.0915 74 chr2 77686500 77687100 0.0223 51 chr2 77755800 77757300 0.0549 123 chr2 77795100 77795400 0.1284 108 chr2 79107300 79109700 0.0188 112 chr2 79283100 79285800 0.0203 94 chr2 79410000 79410300 0.3518 89 chr2 81314700 81315000 0.2814 68 chr2 81351900 81352200 0.0277 53 chr2 81608700 81609600 0.1393 74 chr2 83091000 83094300 0.1351 91 chr2 83770200 83773500 0 115 chr2 83914500 83914800 0.1004 29 chr2 84371400 84372000 0.0106 104 chr2 84531300 84531600 0.2597 15 chr2 84794700 84795000 0.2554 112 chr2 85099800 85100100 0.4932 32 chr2 85483500 85484700 0.0213 118 chr2 85489500 85489800 0.0448 99 chr2 86655300 86660700 0 112 chr2 86711700 86712000 0.2444 36 chr2 86713500 86713800 0.031 50 chr2 86717100 86717400 0.0391 67 chr2 86719200 86719500 0.0391 67 chr2 86721900 86725200 0 66 chr2 86727000 86728200 0 66 chr2 86730000 86733000 0 77 chr2 86735400 86740500 0 87 chr2 86905800 86909700 0 78 chr2 86910900 86913300 0 85 chr2 86915400 86924100 0 80 chr2 86927700 86929200 0 80 chr2 86930700 86931000 0 80 chr2 86932200 86933100 0 80 chr2 86935200 86938500 0 80 chr2 86939700 86940600 0 80 chr2 86945700 86956500 0 82 chr2 86957700 87022800 0 82 chr2 87024600 87032700 0 82 chr2 87035100 87049200 0 86 chr2 87055500 87063300 0 87 chr2 87064500 87066600 0 72 chr2 87068700 87069600 0 69 chr2 87071700 87074700 0 69 chr2 87077100 87077400 0.3378 80 chr2 87079200 87079800 0.1717 65 chr2 87081000 87081300 0.2018 58 chr2 87082800 87083400 0.1687 49 chr2 87101400 87101700 0.345 53 chr2 87104100 87104400 0.0736 65 chr2 87107700 87108000 0.0551 49 chr2 87114600 87114900 0.3318 41 chr2 87116700 87117000 0.2585 46 chr2 87118500 87127800 0 94 chr2 87129000 87129900 0 94 chr2 87135000 87136200 0.0675 55 chr2 87139200 87139800 0.0305 57 chr2 87142200 87142500 0.3373 67 chr2 87150600 87162900 0 89 chr2 87164700 87165900 0.1021 50 chr2 87169800 87170100 0.1733 54 chr2 87171600 87171900 0.1269 41 chr2 87174000 87174300 0.2863 52 chr2 87175800 87176100 0.1389 50 chr2 87178500 87178800 0.2761 58 chr2 87180300 87180900 0.2761 58 chr2 87184200 87186000 0.0117 73 chr2 87188700 87189300 0.0117 73 chr2 87191100 87192000 0.0117 73 chr2 87194700 87197400 0.0578 73 chr2 87201600 87203100 0.0774 68 chr2 87207300 87207900 0.015 69 chr2 87209100 87213900 0.0095 64 chr2 87216300 87217500 0.1072 82 chr2 87226800 87227700 0.1155 70 chr2 87231900 87232200 0.2123 73 chr2 87233700 87234000 0.2123 73 chr2 87236100 87236400 0.2123 73 chr2 87239100 87239400 0.0043 70 chr2 87240600 87242100 0.0043 70 chr2 87244800 87245100 0.3105 78 chr2 87248400 87249300 0.2219 61 chr2 87254400 87254700 0.3093 58 chr2 87261900 87262200 0.2624 67 chr2 87265200 87267900 0 75 chr2 87271500 87271800 0.1237 66 chr2 87273300 87273600 0.1237 66 chr2 87277200 87279000 0 83 chr2 87280500 87280800 0.0631 60 chr2 87282300 87282600 0.1303 33 chr2 87284700 87285000 0.2823 61 chr2 87288600 87290100 0.2322 72 chr2 87292200 87292500 0.3352 48 chr2 87298200 87298800 0.0279 72 chr2 87303000 87303600 0.0113 61 chr2 87307500 87307800 0.1913 71 chr2 87311400 87312000 0.0269 68 chr2 87315900 87316200 0.0855 61 chr2 87319200 87319500 0.1 64 chr2 87324900 87326700 0.1244 67 chr2 87331200 87331500 0.2911 68 chr2 87338700 87339000 0.2744 67 chr2 87340500 87340800 0.1158 120 chr2 87344100 87344400 0.3383 92 chr2 87349200 87350700 0.0153 88 chr2 87353100 87353400 0.2342 91 chr2 87355800 87357600 0.041 111 chr2 87362700 87363000 0.0259 80 chr2 87366900 87367500 0.1028 85 chr2 87370500 87372900 0.0134 89 chr2 87377700 87380700 0 128 chr2 87382200 87383700 0 128 chr2 87384900 87385500 0 128 chr2 87390600 87391800 0 128 chr2 87393600 87395700 0 128 chr2 87408000 87409500 0 87 chr2 87413100 87413400 0.3915 37 chr2 87416700 87417000 0.3675 73 chr2 87418500 87418800 0.3544 159 chr2 87420300 87420900 0.1758 77 chr2 87423600 87424500 0.1195 74 chr2 87433200 87434100 0.0701 70 chr2 87448200 87448500 0.1392 58 chr2 87450600 87450900 0.2978 63 chr2 87459000 87459300 0.2357 65 chr2 87461100 87461400 0.2093 74 chr2 87472800 87473100 0.1064 72 chr2 87494400 87494700 0.3982 56 chr2 87496800 87499500 0 76 chr2 87501600 87507600 0 73 chr2 87511200 87512100 0.1596 54 chr2 87513300 87516300 0 76 chr2 87517800 87521100 0.0186 76 chr2 87523800 87524400 0 34 chr2 87526200 87526800 0 82 chr2 87528600 87531300 0 66 chr2 87534300 87536400 0 62 chr2 87537900 87538800 0.0722 64 chr2 87540000 87551100 0 79 chr2 87552300 87552600 0.2778 50 chr2 87556200 87557700 0.0024 73 chr2 87560100 87562200 0 86 chr2 87564300 87565800 0.0056 62 chr2 87570600 87570900 0.0239 64 chr2 87572100 87574800 0.0689 70 chr2 87577200 87577800 0.2977 53 chr2 87581700 87582600 0 68 chr2 87588300 87588600 0.3099 57 chr2 87592200 87593100 0.2023 70 chr2 87595500 87598200 0 78 chr2 87600300 87607500 0 78 chr2 87608700 87610200 0 78 chr2 87611400 87616500 0 75 chr2 87618600 87623700 0 92 chr2 87624900 87629400 0 92 chr2 87630600 87633900 0 70 chr2 87635700 87636000 0.1072 50 chr2 87645000 87645300 0.2373 61 chr2 87648900 87649200 0.0879 57 chr2 87650700 87651600 0.1247 66 chr2 87654000 87654300 0.0626 72 chr2 87657000 87657600 0.0982 64 chr2 87663000 87665400 0.0716 78 chr2 87666900 87669600 0 75 chr2 87673200 87674400 0.1981 62 chr2 87676200 87677400 0.0852 71 chr2 87681000 87682500 0.0174 74 chr2 87687000 87687600 0.014 72 chr2 87690900 87691200 0.0439 67 chr2 87694200 87695400 0.1088 63 chr2 87698700 87705600 0 74 chr2 87709200 87711900 0.0044 51 chr2 87714900 87718500 0.0018 56 chr2 87721800 87724500 0 72 chr2 87726000 87730500 0 72 chr2 87732000 87732600 0.0819 68 chr2 87737100 87824100 0 97 chr2 87826200 87830100 0 51 chr2 87833100 87834000 0 56 chr2 87835500 87835800 0 56 chr2 87837600 87840300 0 69 chr2 87841800 87842100 0 69 chr2 87843300 87843600 0 69 chr2 87844800 87845100 0.0809 47 chr2 87849900 87852300 0 57 chr2 87854100 87854400 0.0419 62 chr2 87855900 87856200 0.0419 62 chr2 87858900 87860100 0.0349 51 chr2 87861900 87862500 0.0011 54 chr2 87865500 87866100 0.0166 64 chr2 87867900 87869700 0.0077 48 chr2 87871200 87871500 0.0855 52 chr2 87874200 87874500 0.2417 51 chr2 87879600 87880800 0.0113 51 chr2 87887700 87891900 0 61 chr2 87893700 87894000 0 61 chr2 87895500 87896700 0 61 chr2 87898200 87910200 0 61 chr2 87912600 87912900 0 61 chr2 87914100 87914700 0.0252 43 chr2 87916200 87917700 0.0219 47 chr2 87920700 87921000 0.2452 36 chr2 87923700 87926700 0 57 chr2 87927900 87931800 0 58 chr2 87933000 87933300 0 58 chr2 87935700 87936900 0.0573 51 chr2 87938400 87939000 0 45 chr2 87941400 87947100 0 55 chr2 87948600 87950700 0 61 chr2 87953400 87956100 0 42 chr2 87959100 87960900 0.0033 51 chr2 87963300 87963600 0.1192 62 chr2 87965100 87967200 0 64 chr2 87969600 87972600 0 64 chr2 87974100 87975600 0.1389 57 chr2 87977100 87983700 0 68 chr2 87987300 87987900 0.0042 55 chr2 87990900 87991200 0.0338 66 chr2 88181100 88181400 0.3631 71 chr2 88729800 88732800 0 100 chr2 89070300 89071500 0.1162 70 chr2 89077800 89078100 0.3313 64 chr2 89080500 89080800 0.1974 52 chr2 89084100 89084400 0.1931 66 chr2 89096400 89096700 0.0497 65 chr2 89106900 89108100 0.0129 67 chr2 89110200 89110500 0.0257 71 chr2 89123100 89123700 0.109 65 chr2 89154000 89154300 0.2966 53 chr2 89157000 89157300 0.0684 62 chr2 89158500 89158800 0.0684 62 chr2 89171700 89173500 0.0141 78 chr2 89176800 89177100 0.1911 62 chr2 89196900 89197200 0.2979 48 chr2 89216400 89216700 0.4357 75 chr2 89231100 89231400 0.0664 55 chr2 89232600 89232900 0.2976 47 chr2 89235300 89238600 0 71 chr2 89242200 89242500 0.0338 57 chr2 89249700 89250600 0.0238 72 chr2 89252100 89252400 0.0238 72 chr2 89254800 89259300 0 65 chr2 89262300 89262600 0.0741 60 chr2 89265600 89266500 0.0699 59 chr2 89267700 89269200 0.141 64 chr2 89271900 89283300 0 87 chr2 89286300 89289300 0 69 chr2 89291100 89295300 0 69 chr2 89297400 89298000 0.0059 68 chr2 89304000 89304600 0.1685 54 chr2 89306100 89307300 0 66 chr2 89308500 89310300 0 66 chr2 89314200 89330700 0 104 chr2 89530500 89538000 0 122 chr2 89539500 89578500 0 122 chr2 89581200 89583000 0 105 chr2 89586600 89589000 0 104 chr2 89590800 89592600 0 104 chr2 89597400 89597700 0.2644 97 chr2 89600400 89601600 0.2289 115 chr2 89604600 89604900 0.3906 94 chr2 89607600 89607900 0.2433 124 chr2 89628300 89628600 0.2903 90 chr2 89631600 89633100 0.0945 119 chr2 89634300 89634900 0.0151 109 chr2 89637600 89637900 0.0076 112 chr2 89640000 89640300 0.4103 126 chr2 89642100 89642400 0.1699 114 chr2 89645700 89646000 0.1594 84 chr2 89649000 89649600 0.0088 106 chr2 89651100 89652600 0.0088 106 chr2 89658900 89659500 0.1463 105 chr2 89811900 89812200 0.4437 319 chr2 89815800 89818800 0.3124 522 chr2 89821500 89822700 0.3166 484 chr2 89824500 89824800 0.3098 425 chr2 89826000 89841300 0.1111 12789 chr2 89852100 89868600 0 98 chr2 89872500 89876100 0 68 chr2 89877900 89878500 0.2681 73 chr2 89881200 89881500 0.4001 64 chr2 89884500 89885100 0 80 chr2 89887200 89895900 0 78 chr2 89897400 89910600 0 80 chr2 89913300 89914800 0.082 66 chr2 89916000 89916900 0.0388 62 chr2 89919600 89920200 0.2458 70 chr2 89922300 89927700 0 70 chr2 89930100 89930400 0.0183 57 chr2 89931900 89932800 0.0183 57 chr2 89940000 89940300 0.0836 64 chr2 89944200 89946900 0 72 chr2 89951100 89951400 0.0931 53 chr2 89960400 89960700 0.1399 67 chr2 89966100 89966400 0.2618 69 chr2 89985600 89985900 0.2059 61 chr2 90004800 90005100 0.2195 65 chr2 90008400 90010200 0.0646 73 chr2 90016800 90017100 0.3662 59 chr2 90023100 90023400 0.2003 58 chr2 90024600 90024900 0.2003 58 chr2 90058500 90058800 0.022 70 chr2 90083700 90084000 0.2116 53 chr2 90090000 90090600 0.0802 61 chr2 90092400 90093600 0.1126 61 chr2 90103800 90104100 0.0509 73 chr2 90114900 90116400 0.0931 66 chr2 90119100 90120000 0.1378 63 chr2 90122400 90122700 0.2093 69 chr2 90129900 90130200 0.2593 70 chr2 90153000 90153300 0.1782 62 chr2 90157500 90157800 0.2953 64 chr2 90162900 90163200 0.2299 42 chr2 90235200 90235500 0.2905 63 chr2 90237000 90237300 0.0738 95 chr2 90240300 90240600 0.2043 84 chr2 90243000 90243300 0.1821 91 chr2 90246300 90247200 0.0021 101 chr2 90248700 90249900 0.1626 85 chr2 90252600 90252900 0.1622 62 chr2 90258600 90260100 0.0558 74 chr2 90261600 90264600 0 121 chr2 90268500 90269400 0 141 chr2 90270600 90280800 0 141 chr2 90282600 90283500 0 141 chr2 90284700 90287700 0 141 chr2 90303900 90308100 0 97 chr2 90313200 90313500 0.003 127 chr2 90315000 90322800 0.003 127 chr2 90325200 90326400 0.2811 39 chr2 90327600 90334500 0 183 chr2 90336600 90339600 0.0164 122 chr2 90341700 90343500 0.0165 100 chr2 90344700 90345000 0.1441 73 chr2 90346200 90349200 0 168 chr2 90350400 90350700 0 168 chr2 90352200 90356100 0 168 chr2 90357900 90360000 0.0101 177 chr2 90361200 90369600 0.0101 177 chr2 90371400 90374700 0.0004 198 chr2 90379500 90379800 0.1421 725 chr2 90386400 90387300 0.2503 1008 chr2 90399600 90402600 0.1585 1327 chr2 91402500 91407000 0 145 chr2 91416300 91420800 0 158 chr2 91423200 91423500 0.2925 770 chr2 91425300 91425600 0.346 114 chr2 91428300 91428900 0.0117 225 chr2 91431000 91431600 0.0117 225 chr2 91433400 91436400 0.0447 238 chr2 91438200 91439400 0.0447 238 chr2 91440900 91441500 0.0447 238 chr2 91445100 91445700 0.2521 167 chr2 91447200 91450500 0 166 chr2 91452600 91452900 0 150 chr2 91454400 91457100 0 150 chr2 91458600 91458900 0.0148 131 chr2 91460100 91461600 0.0148 131 chr2 91464000 91464900 0.0481 158 chr2 91466400 91466700 0.0481 158 chr2 91469100 91472100 0 147 chr2 91474200 91476000 0.013 156 chr2 91479600 91481400 0.0005 150 chr2 91483200 91485000 0.0005 150 chr2 91486200 91486500 0.0005 150 chr2 91488900 91489200 0.0012 131 chr2 91490400 91493100 0.0012 131 chr2 91505100 91508700 0 419 chr2 91509900 91515900 0 419 chr2 91517100 91517700 0 419 chr2 91519200 91520400 0.2313 440 chr2 91522200 91526700 0.2313 440 chr2 91530000 91532100 0.0304 128 chr2 91533300 91533600 0.0304 128 chr2 91537200 91548000 0 174 chr2 91552200 91557600 0 140 chr2 91563000 91564500 0.125 140 chr2 91569600 91570800 0.0023 129 chr2 91574700 91575000 0.0194 94 chr2 91579200 91579500 0.2819 110 chr2 91600800 91601100 0.1142 90 chr2 91603800 91604100 0 152 chr2 91605300 91630200 0 152 chr2 91631400 91634400 0 152 chr2 91635600 91653000 0 152 chr2 91654200 91657200 0.0035 95 chr2 91660800 91663500 0 103 chr2 91664700 91669200 0 103 chr2 91670400 91671900 0 103 chr2 91673700 91675800 0.073 80 chr2 91678800 91680600 0.1018 81 chr2 91681800 91682400 0.2611 85 chr2 91683900 91684200 0.1556 98 chr2 91685400 91685700 0.4074 57 chr2 91692000 91692900 0.0016 86 chr2 91695000 91695600 0.0386 70 chr2 91699800 91704600 0.0113 124 chr2 91705800 91709700 0.0113 124 chr2 91710900 91711200 0.2293 101 chr2 91712400 91713000 0.2293 101 chr2 91714200 91714500 0.2776 67 chr2 91716300 91717800 0.1311 127 chr2 91719000 91721100 0.1311 127 chr2 91722600 91728600 0 164 chr2 91733100 91733400 0.1128 51 chr2 91795200 91798500 0 110 chr2 91799700 91839300 0 119 chr2 91921800 91922100 0.2417 93 chr2 91924500 91924800 0.1011 92 chr2 91926600 91926900 0.1011 92 chr2 92013600 92057700 0 144 chr2 92059500 92059800 0 144 chr2 92082000 92133000 0 108 chr2 92134500 92138100 0 44 chr2 92188200 92337600 0 654 chr2 92339100 92390100 0 451 chr2 92391300 92452200 0 451 chr2 92453700 92535900 0 399 chr2 92537100 92539800 0 515 chr2 92541000 92558700 0 515 chr2 92559900 92604000 0 515 chr2 92605500 92645700 0 515 chr2 92646900 92673900 0 515 chr2 92675100 92694900 0 515 chr2 92696100 92715600 0 515 chr2 92716800 92760300 0 515 chr2 92762100 92790300 0 453 chr2 92791500 92872800 0 453 chr2 92874000 92878200 0 453 chr2 92879400 92886900 0 453 chr2 92888700 92900100 0 223 chr2 92901600 92919000 0 259 chr2 92920500 92933100 0 259 chr2 92934300 92946300 0 259 chr2 92947800 92949300 0 273 chr2 92950800 92954700 0 273 chr2 92955900 92960700 0 418 chr2 92962800 92987400 0 394 chr2 92988600 93004500 0 394 chr2 93007200 93014400 0 394 chr2 93015600 93029100 0 394 chr2 93030600 93039300 0 394 chr2 93040800 93060900 0 294 chr2 93062400 93085800 0 274 chr2 93087000 93091500 0 231 chr2 93093300 93093900 0.1346 38 chr2 93095100 93101100 0 233 chr2 93103200 93146100 0 233 chr2 93147600 93147900 0 59 chr2 93149100 93150600 0 59 chr2 93152100 93159900 0 258 chr2 93161100 93165600 0 274 chr2 93166800 93192300 0 274 chr2 93193800 93194700 0 245 chr2 93195900 93201000 0 245 chr2 93202500 93222300 0 245 chr2 93223500 93245100 0 245 chr2 93246300 93252300 0.0034 146 chr2 93253500 93265200 0 355 chr2 93267000 93281700 0 355 chr2 93282900 93284400 0 355 chr2 93286200 93295500 0 181 chr2 93298200 93320100 0 181 chr2 93321600 93323700 0 181 chr2 93324900 93325500 0 181 chr2 93327300 93331200 0 149 chr2 93333000 93337500 0 226 chr2 93339000 93343200 0 226 chr2 93345900 93367500 0 359 chr2 93368700 93371100 0 359 chr2 93373500 93388800 0 359 chr2 93390000 93395400 0 359 chr2 93396600 93404700 0 152 chr2 93405900 93406200 0 194 chr2 93408000 93409200 0 194 chr2 93410400 93419700 0 194 chr2 93420900 93434400 0 194 chr2 93435600 93447000 0 194 chr2 93448500 93461100 0 160 chr2 93462900 93463200 0 58 chr2 93465300 93466800 0 58 chr2 93468000 93485400 0 207 chr2 93486900 93495900 0 207 chr2 93497100 93503700 0 207 chr2 93504900 93506700 0 207 chr2 93508200 93512700 0 207 chr2 93515100 93523800 0 276 chr2 93525000 93531900 0 276 chr2 93533100 93552900 0 276 chr2 93555000 93562800 0 276 chr2 93564300 93567300 0 276 chr2 93568500 93572400 0 214 chr2 93575100 93591300 0 251 chr2 93592500 93610800 0 277 chr2 93612000 93612900 0 277 chr2 93614700 93635100 0 277 chr2 93636900 93646200 0 277 chr2 93648600 93658200 0 277 chr2 93659400 93662700 0 277 chr2 93663900 93671700 0 277 chr2 93672900 93679800 0 112 chr2 93681600 93701100 0 209 chr2 93704100 93706500 0 209 chr2 93707700 93733800 0 209 chr2 93735000 93737400 0 209 chr2 93738900 93740700 0 257 chr2 93741900 93777300 0 257 chr2 93778500 93783300 0 257 chr2 93784800 93801000 0 257 chr2 93802500 93805200 0 101 chr2 93806400 93810000 0 69 chr2 93811200 93818100 0 115 chr2 93819300 93828300 0 115 chr2 93830400 93831600 0 309 chr2 93832800 93872700 0 309 chr2 93875700 93877800 0 277 chr2 93879000 93885900 0 277 chr2 93887400 93898500 0 277 chr2 93900000 93904500 0 277 chr2 93905700 93924900 0 277 chr2 93926100 93937500 0 277 chr2 93938700 93946500 0 243 chr2 93947700 93948000 0 243 chr2 93950700 93955500 0 243 chr2 93957000 93960300 0 243 chr2 93961500 93963300 0 243 chr2 93964500 93965100 0 243 chr2 93968100 93973200 0 118 chr2 93975600 93977700 0 175 chr2 93979200 93987300 0 175 chr2 93988500 93993300 0 175 chr2 93994500 94006800 0 175 chr2 94008600 94014300 0 175 chr2 94015500 94023300 0 215 chr2 94024800 94061700 0 215 chr2 94063200 94071600 0 182 chr2 94073400 94075800 0 182 chr2 94077000 94086300 0 182 chr2 94087500 94088100 0.0257 69 chr2 94089600 94090500 0.0257 69 chr2 94140600 94140900 0 360 chr2 94144500 94149900 0 360 chr2 94152000 94152300 0 360 chr2 94153800 94155600 0 360 chr2 94158900 94161300 0 200 chr2 94162800 94164000 0 200 chr2 94165500 94166400 0.1627 194 chr2 94171500 94172400 0 77 chr2 94173600 94174500 0 77 chr2 94257600 94257900 0.2207 125 chr2 94260300 94260600 0.0562 112 chr2 94279500 94279800 0.2011 139 chr2 94285200 94286400 0.2463 185 chr2 94287600 94287900 0.2463 185 chr2 94496400 94496700 0.2471 99 chr2 94581600 94581900 0.1051 62 chr2 94641000 94641300 0.1219 43 chr2 94718100 94718400 0.09 84 chr2 94723500 94723800 0.2944 70 chr2 94740000 94740300 0.1102 48 chr2 94828200 94828500 0.2326 71 chr2 95244000 95244300 0.2269 77 chr2 95406000 95406300 0.3274 69 chr2 95421000 95424000 0 73 chr2 95428200 95431200 0 84 chr2 95433300 95433600 0.0444 59 chr2 95435100 95480100 0 84 chr2 95487600 95489400 0 72 chr2 95587800 95589300 0 72 chr2 95596500 95643600 0 82 chr2 95645700 95648400 0 78 chr2 95652600 95655600 0 63 chr2 95765400 95765700 0.3845 80 chr2 95774400 95774700 0 84 chr2 95776500 95798100 0 84 chr2 95821500 95821800 0.2478 65 chr2 95843400 95843700 0.2491 49 chr2 95868600 95868900 0.2865 71 chr2 95871900 95872200 0.1468 70 chr2 95877300 95877900 0.129 71 chr2 95879700 95880000 0.3521 66 chr2 95895300 95895600 0.1546 61 chr2 95898300 95901900 0 69 chr2 95903700 95907600 0 70 chr2 95909400 95909700 0.247 56 chr2 95940600 95940900 0.0184 144 chr2 95946300 95946600 0.1212 102 chr2 95960700 95961000 0.4137 82 chr2 95963400 95964000 0.0919 63 chr2 95982600 95982900 0.0804 54 chr2 96010800 96011100 0.1217 82 chr2 96026400 96048000 0 80 chr2 96049500 96051600 0 80 chr2 96055500 96055800 0.0112 75 chr2 96057300 96059400 0.0112 75 chr2 96444300 96444900 0.0214 107 chr2 96462000 96462600 0.1698 101 chr2 96776700 96777000 0.2438 315 chr2 96805500 96805800 0.0836 50 chr2 97049700 97050000 0.0101 73 chr2 97051800 97053900 0.0537 67 chr2 97071300 97072800 0 77 chr2 97075800 97076400 0.1823 56 chr2 97090800 97091400 0.2835 42 chr2 97094400 97095000 0.0475 67 chr2 97114500 97114800 0.0838 51 chr2 97118400 97120500 0 68 chr2 97122300 97122600 0.4888 54 chr2 97125900 97126200 0.2497 61 chr2 97141200 97141800 0.2203 47 chr2 97156500 97156800 0.0651 92 chr2 97162500 97162800 0.0328 152 chr2 97166100 97166700 0.191 139 chr2 97170900 97171500 0.3463 69 chr2 97176300 97176600 0.2025 35 chr2 97213200 97213500 0.0452 74 chr2 97219500 97219800 0.2979 67 chr2 97221000 97221600 0.0755 116 chr2 97223400 97224000 0.111 65 chr2 97232400 97232700 0.2191 66 chr2 97233900 97266600 0 130 chr2 97269300 97292400 0 80 chr2 97294500 97347600 0 91 chr2 97360800 97397700 0 93 chr2 97398900 97413900 0 93 chr2 97416000 97420500 0 93 chr2 97422000 97439100 0 93 chr2 97489500 97524000 0 130 chr2 97542300 97544400 0.0073 67 chr2 97577100 97577700 0.1957 60 chr2 97580700 97581000 0.0561 42 chr2 97583100 97584900 0.026 74 chr2 97588800 97589100 0.1438 53 chr2 97603500 97603800 0.2539 57 chr2 97605600 97608000 0 81 chr2 97611600 97615800 0.0072 79 chr2 98061900 98062200 0.332 68 chr2 98265600 98266800 0.1671 107 chr2 99300600 99301200 0.2777 48 chr2 99307500 99307800 0.0596 70 chr2 100088400 100090200 0 69 chr2 100091400 100092000 0.1353 64 chr2 100096800 100098000 0.0012 94 chr2 100099800 100100400 0.0012 94 chr2 100102500 100103100 0.0012 94 chr2 100109100 100109400 0.3635 69 chr2 101748900 101750400 0.1974 101 chr2 102566400 102572100 0 84 chr2 102876000 102876300 0.2337 84 chr2 105054600 105054900 0.2925 22 chr2 105209700 105211200 0 17 chr2 105586500 105587400 0.002 66 chr2 106131300 106136700 0 105 chr2 106204800 106205100 0.2782 64 chr2 106243800 106244100 0.2726 82 chr2 106255500 106255800 0.3545 68 chr2 106320000 106320300 0.3362 198 chr2 106394100 106396500 0.332 60 chr2 106401000 106401300 0.1418 65 chr2 106406400 106406700 0.0189 73 chr2 106407900 106408500 0.0189 73 chr2 106411200 106411500 0.1688 51 chr2 106416300 106417500 0.0017 57 chr2 106419000 106419300 0.1194 61 chr2 106423200 106423800 0.3314 74 chr2 106425600 106425900 0.0215 61 chr2 106427700 106428600 0 54 chr2 106430700 106431300 0 62 chr2 106432500 106437300 0.0017 62 chr2 106438800 106443000 0 77 chr2 106444200 106447800 0 77 chr2 106452000 106463100 0 75 chr2 106466400 106467600 0.2666 82 chr2 106469100 106469400 0.3 46 chr2 106485300 106485600 0.251 30 chr2 106500000 106500300 0.2602 79 chr2 107189400 107189700 0.2408 66 chr2 107826000 107829300 0.0496 52 chr2 107834700 107844000 0 73 chr2 107847300 107857200 0 70 chr2 107858700 107869500 0 79 chr2 107872800 107873400 0.0538 68 chr2 107875800 107876100 0.2381 50 chr2 107878500 107879700 0.0042 64 chr2 107884500 107884800 0.2347 47 chr2 107887500 107888100 0.1061 54 chr2 107889300 107890500 0.1441 59 chr2 107892300 107892600 0.1441 59 chr2 107894700 107895900 0.055 48 chr2 107899800 107900100 0.1293 61 chr2 107901300 107901600 0.1293 61 chr2 107907900 107909100 0.3326 45 chr2 107911500 107912700 0.1469 65 chr2 107922900 107923200 0.0894 53 chr2 108651900 108653400 0.1149 71 chr2 108655200 108658200 0.0085 70 chr2 108660900 108661200 0.0774 60 chr2 108666300 108666600 0.1547 64 chr2 108672300 108672900 0.0078 63 chr2 108745200 108745500 0.1717 64 chr2 108762300 108762600 0.025 46 chr2 108800700 108802500 0 86 chr2 109199100 109200000 0.1484 11428 chr2 109307700 109311300 0.0061 82 chr2 109739100 109739400 0.2027 64 chr2 109740900 109742400 0.0543 60 chr2 109744800 109760100 0 87 chr2 109762500 109762800 0 87 chr2 109764900 109765200 0.0761 21 chr2 109767600 109777200 0 105 chr2 109779000 110043000 0 105 chr2 110044800 110048100 0 105 chr2 110049600 110074200 0 104 chr2 110075400 110095200 0 104 chr2 110228400 110261700 0 74 chr2 110262900 110266200 0 74 chr2 110267400 110268000 0 74 chr2 110269200 110273100 0 75 chr2 110275200 110307000 0 91 chr2 110308800 110325900 0 88 chr2 110327400 110327700 0 88 chr2 110329500 110332500 0 88 chr2 110334300 110341800 0 85 chr2 110343300 110365800 0 88 chr2 110368500 110386500 0 93 chr2 110388000 110424300 0 80 chr2 110425800 110600700 0 102 chr2 110602500 110604300 0 102 chr2 110606400 110609400 0.037 105 chr2 110611800 110626800 0 82 chr2 110629200 110630700 0.0178 74 chr2 110696100 110696400 0.0464 65 chr2 110697900 110699400 0 74 chr2 111223800 111224700 0.1603 82 chr2 111255300 111256800 0.2267 52 chr2 111259800 111260100 0.0426 66 chr2 111263400 111264000 0.0183 68 chr2 111265800 111266100 0.2722 77 chr2 111268500 111269700 0.0126 63 chr2 111272400 111274800 0.056 69 chr2 111276600 111276900 0.3542 55 chr2 111279300 111288000 0 72 chr2 111292800 111293700 0.1941 77 chr2 111296700 111297000 0.0748 58 chr2 111300000 111300300 0.0379 71 chr2 111301800 111302100 0.0379 71 chr2 111305400 111305700 0.146 58 chr2 111308100 111309000 0.1326 64 chr2 111314700 111315000 0.015 53 chr2 111316800 111318300 0.0947 68 chr2 111319800 111320100 0.2023 70 chr2 111321900 111322200 0 81 chr2 111323700 111325800 0 81 chr2 111327600 111332400 0 78 chr2 111335100 111339600 0 81 chr2 111340800 111342300 0.0004 83 chr2 111343500 111344700 0.0004 83 chr2 111345900 111350400 0.0004 83 chr2 111352500 111354900 0.0024 73 chr2 111357900 111358200 0.3313 71 chr2 111359700 111360000 0.3698 52 chr2 111362400 111362700 0.1935 56 chr2 111365700 111366000 0.223 42 chr2 111368100 111369000 0 78 chr2 111373200 111373500 0.3533 58 chr2 111375900 111378600 0.0725 73 chr2 111379800 111380400 0.0798 56 chr2 111384900 111386700 0.0132 62 chr2 111389100 111391500 0.0374 79 chr2 111393300 111394800 0 72 chr2 111400500 111402900 0.0459 58 chr2 111404100 111405300 0.0459 58 chr2 111406500 111408600 0.0129 68 chr2 111410400 111410700 0.3363 74 chr2 111412500 111412800 0.2594 70 chr2 111415500 111415800 0.2594 70 chr2 111419700 111420000 0.3361 37 chr2 111423600 111424200 0.0003 62 chr2 111429600 111429900 0.1921 57 chr2 111431400 111433200 0.0873 74 chr2 111434700 111439200 0.0205 82 chr2 111443400 111449100 0 76 chr2 111450600 111451800 0 81 chr2 111453600 111454500 0 81 chr2 111456000 111456300 0.1807 64 chr2 111477000 111477300 0.05 74 chr2 111489000 111489300 0.2588 62 chr2 111492900 111493200 0.4485 64 chr2 111499800 111502500 0.0859 64 chr2 111515700 111517200 0.0886 58 chr2 111527700 111528000 0.3823 69 chr2 111531900 111533700 0.1083 70 chr2 111540000 111540900 0.0013 61 chr2 111542100 111542700 0.0013 61 chr2 111545400 111546300 0.0854 47 chr2 111549000 111550200 0.0093 74 chr2 111551700 111554100 0.0093 74 chr2 111558000 111558600 0.0309 61 chr2 111562800 111563400 0.0109 60 chr2 111569100 111569400 0.4389 43 chr2 111571500 111573000 0.2883 51 chr2 111576600 111577200 0.0327 46 chr2 111578700 111581100 0.053 65 chr2 111582600 111584400 0 76 chr2 111588000 111588300 0.1267 63 chr2 111589800 111590100 0 100 chr2 111591300 111591600 0 100 chr2 111593100 111596400 0 100 chr2 111599400 111599700 0.2066 81 chr2 111600900 111601200 0.0345 44 chr2 111606900 111607200 0.2148 54 chr2 111610800 111611100 0.2135 55 chr2 111612300 111614100 0.1749 65 chr2 111720900 111721200 0.1029 67 chr2 111723900 111724200 0.1029 67 chr2 111726300 111726900 0.0147 66 chr2 111730200 111730500 0.2478 71 chr2 111731700 111732000 0.0893 57 chr2 111738000 111738900 0.0795 57 chr2 111748200 111749400 0.0425 67 chr2 111750900 111751800 0.1652 64 chr2 111753900 111754200 0.1652 64 chr2 111756000 111756600 0.1193 52 chr2 111758100 111758700 0.1066 71 chr2 111762600 111764100 0.0457 64 chr2 111770100 111770400 0.2428 75 chr2 111774300 111774900 0.0213 64 chr2 111776700 111777000 0.0371 52 chr2 111780000 111780600 0.1355 58 chr2 111784500 111785100 0.1051 61 chr2 111786600 111786900 0.1051 61 chr2 111789300 111789600 0.2467 50 chr2 111793500 111794100 0.0811 55 chr2 111795300 111795600 0.3126 59 chr2 111799500 111801000 0.2767 49 chr2 111802500 111803700 0.0586 71 chr2 111804900 111807300 0.0221 65 chr2 111809100 111809700 0.0027 80 chr2 111811200 111812100 0.0027 80 chr2 111814200 111820800 0.0027 80 chr2 111822300 111822600 0.1693 54 chr2 111861600 111861900 0.1864 82 chr2 112113600 112115400 0.0007 51 chr2 112361400 112363200 0.1002 70 chr2 112365900 112379100 0 101 chr2 112380900 112389900 0 101 chr2 112391700 112409400 0 75 chr2 112411500 112415100 0 75 chr2 112416600 112423500 0 75 chr2 112426500 112426800 0.2892 96 chr2 112428300 112428600 0.2892 96 chr2 112503900 112509000 0 98 chr2 112776600 112776900 0.0398 12 chr2 113130600 113130900 0.3616 60 chr2 113394000 113395800 0.0557 66 chr2 113416500 113416800 0.0274 74 chr2 113426700 113427300 0.0852 61 chr2 113430600 113430900 0.2714 53 chr2 113440800 113441100 0.2407 71 chr2 113443800 113444100 0.1726 47 chr2 113447400 113448600 0.1724 94 chr2 113450700 113453700 0.1724 94 chr2 113457300 113458800 0.0533 62 chr2 113460000 113460300 0.2622 62 chr2 113464200 113464500 0.0944 69 chr2 113467200 113467500 0.0944 69 chr2 113469600 113469900 0.0944 69 chr2 113475000 113475300 0.2859 75 chr2 113479200 113481300 0.0461 112 chr2 113482500 113484600 0.0461 112 chr2 113486100 113486400 0.0461 112 chr2 113489700 113498400 0.0078 94 chr2 113509500 113509800 0.1192 89 chr2 113517300 113517600 0.2189 67 chr2 113519400 113520000 0.1367 94 chr2 113525400 113526000 0.1592 106 chr2 113531700 113532000 0.1044 105 chr2 113534700 113535000 0.0208 98 chr2 113537400 113538600 0.0414 157 chr2 113544000 113544300 0.1702 97 chr2 113547000 113550300 0 106 chr2 113553000 113553300 0.2116 114 chr2 113564100 113564400 0.0924 74 chr2 113577300 113577600 0.0638 141 chr2 113580600 113582400 0.0638 141 chr2 113586600 113586900 0.1696 128 chr2 113590500 113591100 0.1161 134 chr2 113596500 113597100 0.1437 116 chr2 113607300 113607600 0.1815 82 chr2 113608800 113609100 0.0137 87 chr2 113610300 113613000 0.0137 87 chr2 113614800 113615100 0.1727 83 chr2 113616300 113617800 0.1727 83 chr2 113619300 113620200 0.1727 83 chr2 113623800 113624100 0.1635 57 chr2 113641800 113642100 0.3673 65 chr2 113643900 113645700 0.0203 64 chr2 113651100 113653500 0.0792 82 chr2 114084300 114085200 0.0999 69 chr2 114098100 114098400 0.1911 71 chr2 114748500 114749100 0.1687 60 chr2 115008000 115009200 0.0474 90 chr2 115426200 115426500 0.3786 41 chr2 115438800 115439100 0.4384 59 chr2 115487100 115488600 0.0461 77 chr2 116050200 116050500 0.1467 104 chr2 116051700 116054400 0.1467 104 chr2 116121900 116122200 0.227 81 chr2 116931300 116931600 0.1147 57 chr2 117460200 117461400 0.0309 111 chr2 117528000 117528300 0.2598 73 chr2 117624900 117625200 0.23 91 chr2 117627300 117627600 0.2345 69 chr2 117649800 117650400 0 29 chr2 117653100 117653400 0.242 64 chr2 117654600 117654900 0.242 64 chr2 117676800 117677100 0.3874 370 chr2 117750300 117751800 0.1202 91 chr2 117780300 117780600 0.3473 106 chr2 117806100 117807900 0.206 71 chr2 118137600 118140000 0.0483 93 chr2 118141500 118142700 0.1289 143 chr2 118302900 118305000 0 65 chr2 118486500 118487400 0.0128 91 chr2 118867500 118868100 0 99 chr2 118896000 118900800 0 93 chr2 119001300 119001600 0.3305 91 chr2 119843400 119843700 0.3669 59 chr2 122014800 122015400 0.0395 76 chr2 122017200 122017800 0.1687 95 chr2 122050500 122051700 0.1184 85 chr2 122265600 122265900 0.118 85 chr2 122346600 122348400 0.1417 68 chr2 122350500 122350800 0.1858 65 chr2 122783100 122783700 0.1352 79 chr2 123257100 123257400 0.1721 74 chr2 123684600 123685200 0.1922 72 chr2 123705000 123705600 0.1781 91 chr2 123950400 123950700 0.4379 66 chr2 124140300 124145700 0 115 chr2 124357500 124357800 0.063 86 chr2 124359600 124361100 0.063 86 chr2 124409100 124409700 0.1424 69 chr2 124411500 124413900 0.023 80 chr2 124593300 124596900 0.0062 94 chr2 124598100 124598700 0.0062 94 chr2 125417400 125418000 0.0916 76 chr2 125752500 125753100 0.231 56 chr2 126178200 126183300 0 111 chr2 127119000 127120500 0.0369 88 chr2 127787100 127789800 0.0503 85 chr2 128340600 128341200 0.1742 38 chr2 128417700 128418300 0.1456 84 chr2 128859600 128864700 0 93 chr2 128964900 128965200 0.1787 70 chr2 129411300 129417000 0 94 chr2 129645900 129646200 0.3903 52 chr2 129682500 129687000 0 110 chr2 130041600 130043100 0 57 chr2 130058400 130058700 0.3154 53 chr2 130064100 130064400 0.1367 90 chr2 130066800 130067400 0.0168 70 chr2 130071900 130072200 0.3008 51 chr2 130074300 130074600 0.1991 67 chr2 130077000 130100700 0 79 chr2 130103700 130104000 0.0399 69 chr2 130106400 130106700 0.0399 69 chr2 130108500 130108800 0.2136 56 chr2 130112400 130112700 0.1938 57 chr2 130121400 130121700 0.0926 60 chr2 130122900 130124100 0.199 63 chr2 130223100 130223400 0.0253 61 chr2 130238700 130239000 0.233 46 chr2 130277100 130277400 0.4018 59 chr2 130405200 130408800 0 80 chr2 130411200 130413900 0.1117 61 chr2 130416000 130418700 0.0031 65 chr2 130419900 130420200 0.0031 65 chr2 130426800 130427700 0.1881 67 chr2 130430100 130439700 0 87 chr2 130440900 130448700 0 87 chr2 130450800 130451100 0.2441 71 chr2 130458900 130459800 0 95 chr2 130462800 130464000 0 95 chr2 130465500 130476900 0 95 chr2 130478100 130483200 0 88 chr2 130484400 130495800 0 88 chr2 130497000 130559700 0 88 chr2 130560900 130585800 0 93 chr2 130587000 130594800 0 91 chr2 130596000 130609500 0 91 chr2 130611300 130611600 0 84 chr2 130612800 130617600 0 84 chr2 130619400 130619700 0 84 chr2 130620900 130623600 0 84 chr2 130627500 130630500 0.0042 91 chr2 130632300 130635900 0.0128 80 chr2 130642200 130642500 0 84 chr2 130643700 130646400 0 84 chr2 130648800 130649100 0 84 chr2 130650600 130655100 0 84 chr2 130657500 130658700 0 80 chr2 130659900 130661700 0 80 chr2 130672200 130673400 0 98 chr2 130674900 130680600 0 98 chr2 130681800 130691400 0 80 chr2 130693800 130694700 0.1734 60 chr2 130701300 130705500 0.0022 69 chr2 130707300 130710300 0.1084 69 chr2 130713300 130716000 0 71 chr2 130822200 130822500 0.3717 55 chr2 130857300 130863900 0 52 chr2 131214900 131215800 0.2408 57 chr2 131217000 131217600 0.3102 60 chr2 131226300 131226600 0.1358 54 chr2 131232000 131232600 0.2875 74 chr2 131234400 131235000 0.0964 51 chr2 131238300 131262000 0 94 chr2 131264400 131264700 0.0615 99 chr2 131268000 131268300 0.0185 69 chr2 131272500 131275800 0 103 chr2 131282700 131283000 0.3318 78 chr2 131288700 131289000 0.1347 71 chr2 131294400 131295600 0.0104 69 chr2 131435400 131435700 0.3331 56 chr2 131450700 131451300 0.1153 68 chr2 131466300 131466600 0.3217 42 chr2 131694600 131695200 0.1176 89 chr2 131761800 131763000 0.2689 75 chr2 131766300 131768100 0 67 chr2 131793900 131796600 0 89 chr2 131799300 131799900 0.1497 66 chr2 131814300 131816400 0.0742 83 chr2 131856900 131857200 0.4154 49 chr2 132090600 132090900 0.2555 45 chr2 132393900 132394500 0.1478 252 chr2 132565800 132566400 0.3128 72 chr2 133101000 133101600 0.2964 50 chr2 133299900 133302600 0.0149 98 chr2 133466100 133466400 0.4439 80 chr2 133549500 133552500 0.1137 109 chr2 133618800 133619100 0.2054 60 chr2 133911600 133915500 0.0105 121 chr2 134209200 134212500 0 114 chr2 134607000 134609400 0.082 120 chr2 134650800 134655000 0.0203 97 chr2 134830200 134831100 0.132 106 chr2 135033900 135034200 0.3027 51 chr2 136818000 136818300 0.3338 79 chr2 137396400 137396700 0.1175 62 chr2 137397900 137398200 0.1863 83 chr2 137484300 137485200 0.1178 63 chr2 138246900 138247200 0.0298 45 chr2 138251100 138251700 0.0823 60 chr2 139027800 139028100 0.2512 48 chr2 139372800 139373100 0.1955 127 chr2 139535700 139536000 0.1673 52 chr2 139878600 139880400 0.0723 70 chr2 141963900 141965700 0.0134 120 chr2 142608300 142608600 0.2461 88 chr2 142677000 142677300 0.2995 25 chr2 143007300 143011800 0.0501 111 chr2 143638200 143638500 0.1878 45 chr2 143662500 143663100 0.0579 79 chr2 143665200 143665800 0.0634 82 chr2 143861100 143866800 0 137 chr2 143921400 143921700 0.0971 40 chr2 144899100 144899700 0.0436 79 chr2 146408400 146411100 0.0565 88 chr2 147155100 147155400 0.1288 98 chr2 147727800 147728100 0.2247 60 chr2 147729300 147729600 0.0592 81 chr2 147732300 147732900 0.0592 81 chr2 147744000 147745800 0.0749 66 chr2 148149000 148150200 0.1017 98 chr2 148153800 148154100 0.0902 52 chr2 148189500 148194600 0 88 chr2 149854500 149854800 0.3077 74 chr2 149946900 149951100 0 111 chr2 151579500 151591200 0 90 chr2 151592400 151608900 0 95 chr2 151699200 151701000 0.0003 117 chr2 151703100 151704600 0.0003 117 chr2 152357100 152357400 0.2259 30 chr2 153007800 153013200 0 115 chr2 153222300 153222600 0.1363 541 chr2 153253200 153253500 0.4349 53 chr2 153398700 153399300 0.324 63 chr2 153538500 153539100 0.021 132 chr2 153724500 153724800 0.1246 70 chr2 153865500 153866100 0.0073 101 chr2 154980900 154981200 0.2604 59 chr2 154989000 154990200 0.0803 81 chr2 155192100 155192400 0.3958 56 chr2 155444100 155446500 0.0037 80 chr2 155500800 155501100 0.0656 140 chr2 155966700 155967000 0.2278 87 chr2 155968500 155969100 0.2278 87 chr2 156255000 156255300 0.1247 98 chr2 156256500 156256800 0.1247 98 chr2 156258600 156260100 0.1247 98 chr2 156368100 156368400 0.1302 26 chr2 156369600 156369900 0.0384 64 chr2 156450600 156451200 0.2701 61 chr2 156965400 156965700 0.331 63 chr2 157370100 157373400 0.0162 112 chr2 157378500 157379700 0.0191 68 chr2 157520400 157521000 0.0215 73 chr2 157547100 157548600 0.0742 62 chr2 157566900 157572300 0 102 chr2 157576800 157577100 0.2448 38 chr2 158355600 158357100 0.1978 74 chr2 158523900 158528100 0.0005 81 chr2 158780400 158780700 0.1536 47 chr2 158851800 158852400 0.1111 62 chr2 158872800 158873400 0.0473 71 chr2 159292800 159294900 0 91 chr2 159663900 159665700 0.0064 109 chr2 159991800 159992700 0.0939 69 chr2 160120200 160120800 0.2937 54 chr2 160713900 160714200 0.1602 45 chr2 160758300 160759500 0.0017 91 chr2 160768500 160768800 0.2997 63 chr2 160770000 160771500 0 75 chr2 160800900 160801200 0.1221 93 chr2 160851300 160851600 0.0833 27 chr2 160852800 160854000 0.0099 82 chr2 160855500 160855800 0.0099 82 chr2 160999500 160999800 0.3091 63 chr2 161540400 161540700 0.0459 67 chr2 162572400 162572700 0.124 56 chr2 164121000 164123400 0.0018 127 chr2 164262300 164263800 0.0847 92 chr2 165041100 165041400 0.3275 62 chr2 165411000 165411300 0.2031 49 chr2 165486300 165489900 0.0102 120 chr2 165491100 165491700 0.0102 120 chr2 165731700 165737400 0.0027 137 chr2 166099500 166101300 0.0198 147 chr2 166502700 166503000 0.2258 68 chr2 166703100 166704600 0.2889 70 chr2 166988400 166994400 0 114 chr2 167216100 167216700 0.0077 92 chr2 167466600 167466900 0.1813 941 chr2 167838000 167838300 0.2814 119 chr2 168039300 168039600 0.0894 24 chr2 169248900 169254300 0 111 chr2 169785000 169785600 0 63 chr2 169787100 169787400 0 63 chr2 169972800 169973400 0.1888 74 chr2 170150400 170150700 0.3294 65 chr2 170649300 170649600 0.4651 38 chr2 171865800 171866400 0.1162 78 chr2 172315500 172321200 0 129 chr2 173699400 173705400 0.0027 103 chr2 174269700 174273900 0.0293 90 chr2 174404700 174405600 0.0402 86 chr2 174406800 174409200 0.0402 86 chr2 174720300 174720600 0.2718 47 chr2 175482000 175488000 0 90 chr2 175589700 175591200 0.0225 102 chr2 175592700 175593000 0.1403 84 chr2 175692300 175693200 0.1359 90 chr2 175700700 175701000 0.1973 72 chr2 175760100 175764900 0 66 chr2 175813200 175814100 0.0106 46 chr2 175962900 175963200 0.1763 86 chr2 177946200 177947100 0.195 63 chr2 177973200 177978900 0 137 chr2 178654800 178662900 0 74 chr2 178985100 178985700 0.3673 70 chr2 179061900 179062200 0.1091 79 chr2 179319000 179319300 0.3306 46 chr2 179735400 179735700 0.1422 71 chr2 180834000 180838500 0 114 chr2 182025300 182030100 0.0544 96 chr2 182175300 182175900 0.043 82 chr2 182214900 182217600 0 114 chr2 182430300 182430900 0.0327 82 chr2 182747700 182749500 0.1617 68 chr2 183385200 183385500 0.2563 48 chr2 183590400 183590700 0.1833 65 chr2 184947300 184950900 0 131 chr2 185419500 185424600 0.0157 91 chr2 185766900 185767200 0.238 93 chr2 185844000 185844600 0.0601 31 chr2 185846400 185847000 0.0734 54 chr2 185865600 185868300 0.1606 102 chr2 185869800 185870100 0.1791 88 chr2 186402600 186402900 0.1791 71 chr2 186922800 186923100 0.0959 77 chr2 186952800 186953700 0.0979 91 chr2 187235100 187235400 0.1259 66 chr2 187598100 187598400 0.409 71 chr2 188124300 188129100 0.0186 98 chr2 188716200 188716500 0.2313 97 chr2 188825400 188827500 0.0398 97 chr2 189027300 189030000 0.0292 114 chr2 189200400 189200700 0.1305 49 chr2 191763300 191764200 0.0564 73 chr2 191765400 191765700 0.0564 73 chr2 192268800 192272100 0 89 chr2 192273600 192273900 0 89 chr2 192835800 192836100 0.2195 61 chr2 193212600 193218300 0.0032 153 chr2 193706700 193707000 0.049 56 chr2 193821900 193822200 0.2901 62 chr2 193914000 193914300 0 16 chr2 194447700 194448000 0.0585 57 chr2 194859300 194859600 0.4679 75 chr2 195063600 195064200 0.3366 64 chr2 195068400 195071400 0.0493 83 chr2 195376800 195377100 0.2297 70 chr2 195528000 195528300 0.0873 99 chr2 195567300 195567900 0.1823 87 chr2 196524300 196526400 0.1644 96 chr2 196905600 196911600 0 103 chr2 197067600 197067900 0.1037 111 chr2 197635500 197636700 0.1055 91 chr2 197638200 197640000 0.1055 91 chr2 197687700 197692500 0.0054 97 chr2 197730300 197730600 0.2008 65 chr2 197732700 197733300 0.2353 77 chr2 197922000 197922600 0.1655 62 chr2 198582900 198585900 0.0562 111 chr2 198934500 198934800 0.2172 78 chr2 200682600 200683200 0.1174 57 chr2 200822400 200822700 0.0142 58 chr2 201282000 201284400 0.0566 70 chr2 201484200 201484500 0.2515 84 chr2 201592200 201592500 0.4153 48 chr2 202606200 202606800 0.1264 68 chr2 204583200 204583500 0.0772 55 chr2 204767100 204770400 0 96 chr2 204992400 204996300 0.0248 76 chr2 205044300 205044600 0.1335 120 chr2 205207800 205209300 0.1285 94 chr2 206071200 206071500 0.1866 130 chr2 206355600 206356200 0.2363 93 chr2 206374800 206375400 0 25 chr2 206400300 206400900 0.2003 26 chr2 206910000 206913000 0.0161 114 chr2 207004800 207006000 0.0248 94 chr2 207273600 207273900 0.0685 51 chr2 207609900 207612000 0 99 chr2 208094400 208094700 0.0373 31 chr2 208196400 208196700 0.2053 35 chr2 208587000 208587300 0.2983 43 chr2 208803000 208803300 0.4033 31 chr2 208814400 208814700 0.1851 86 chr2 208817100 208817400 0.1851 86 chr2 209129700 209133600 0.0007 82 chr2 209164200 209166900 0.05 89 chr2 209332500 209332800 0.0235 99 chr2 209747700 209748300 0.3112 94 chr2 211220400 211221300 0.0589 110 chr2 211223400 211224600 0.0589 110 chr2 211890000 211892400 0.0212 76 chr2 211893600 211894200 0.0212 76 chr2 212702100 212702400 0.1545 65 chr2 213345300 213345600 0.1878 61 chr2 213367800 213368100 0.2004 59 chr2 213567300 213572400 0 103 chr2 213783600 213784500 0.016 53 chr2 214684200 214684500 0.0111 101 chr2 214686000 214689300 0.0111 101 chr2 214834800 214836000 0.2907 79 chr2 216225900 216227700 0 45 chr2 216324000 216324300 0.1942 76 chr2 216325800 216326100 0.1461 64 chr2 217311300 217311600 0.1284 80 chr2 219932400 219937500 0 113 chr2 221383800 221384100 0.1259 41 chr2 221985900 221988000 0.0404 106 chr2 221989800 221990100 0.0773 75 chr2 222147900 222148500 0.0165 100 chr2 222149700 222155100 0.0165 100 chr2 222816000 222817200 0.1754 40 chr2 222895500 222897600 0 65 chr2 222932700 222933000 0.1835 25 chr2 225174900 225175200 0.2975 69 chr2 225322500 225322800 0.1028 80 chr2 225643800 225644100 0.3197 81 chr2 225874500 225875100 0.2481 72 chr2 226470300 226470600 0 19 chr2 226574400 226575300 0.0078 92 chr2 227068800 227069100 0.2363 108 chr2 227203500 227203800 0.2548 33 chr2 228201300 228201600 0.2585 69 chr2 228231300 228231600 0.1009 78 chr2 228422400 228422700 0.2471 74 chr2 228756900 228760500 0 136 chr2 228855000 228855300 0.1859 83 chr2 229184400 229184700 0.169 34 chr2 230338200 230338800 0.0889 90 chr2 230340600 230341200 0.0889 90 chr2 230400900 230401200 0.2839 68 chr2 230460600 230460900 0 31 chr2 231005400 231005700 0.4855 135 chr2 231579000 231579300 0.3682 13 chr2 231823200 231824700 0 89 chr2 231828300 231828900 0 66 chr2 231838200 231838500 0.0178 62 chr2 231842400 231845400 0.0148 124 chr2 232149300 232155000 0 94 chr2 232177200 232181100 0 113 chr2 232360500 232360800 0.1151 131 chr2 232995300 232995600 0.3673 32 chr2 233561700 233562300 0.2367 88 chr2 233567400 233568000 0.1087 20 chr2 233578500 233580300 0.1051 66 chr2 233723700 233724000 0.0921 71 chr2 234562500 234562800 0.0889 25 chr2 234645900 234649500 0 44 chr2 234888900 234894300 0.102 93 chr2 235043400 235043700 0.0714 66 chr2 235525800 235526100 0.3608 70 chr2 235764900 235765200 0.3449 18 chr2 236379300 236379900 0.2668 59 chr2 236385300 236386200 0.0089 117 chr2 236388600 236388900 0.3024 91 chr2 236410800 236412000 0.1252 113 chr2 236437200 236438400 0.1705 76 chr2 236481900 236482200 0.2852 39 chr2 236868300 236868600 0.46 42 chr2 237187800 237188400 0.1643 87 chr2 237343500 237343800 0.2692 107 chr2 238110000 238110300 0.4575 209 chr2 238296000 238296600 0.0098 87 chr2 238397700 238398000 0.4719 33 chr2 238417800 238418100 0.2669 38 chr2 238718100 238718700 0.0225 75 chr2 238776900 238777500 0.4177 79 chr2 238880400 238881300 0.0434 33 chr2 239069100 239069400 0.1973 42 chr2 239527500 239527800 0.0013 60 chr2 239644500 239645100 0.0069 310 chr2 239817900 239818200 0.4867 151 chr2 240019500 240019800 0.316 15 chr2 240045600 240045900 0.3586 46 chr2 240354600 240354900 0.0168 18 chr2 240547500 240547800 0.0457 120 chr2 240626100 240626400 0.4806 168 chr2 240641400 240641700 0.0572 24 chr2 240675000 240682200 0 82 chr2 240684900 240685200 0 82 chr2 240689100 240691200 0 87 chr2 240693900 240699600 0 80 chr2 240780900 240781200 0.3831 21 chr2 240842700 240843000 0.4028 18 chr2 240907800 240909000 0 54 chr2 240923700 240924000 0.1092 14 chr2 240977100 240980700 0.0352 72 chr2 240984900 240985200 0.4793 15 chr2 241206300 241206600 0.1216 31 chr2 241355700 241356000 0.2945 47 chr2 241561500 241561800 0.2368 50 chr2 241570500 241570800 0.2685 61 chr2 241760100 241760400 0.2034 79 chr2 241767000 241767300 0 15 chr2 241805400 241805700 0.126 16 chr2 241807500 241807800 0.2089 29 chr2 241819500 241819800 0.324 28 chr2 242006700 242010000 0.0172 168 chr2 242046900 242047500 0.0511 73 chr2 242079300 242079600 0.1833 67 chr2 242083200 242085300 0.2756 75 chr2 242110800 242111100 0.2727 58 chr2 242115600 242115900 0.1256 52 chr2 242117400 242117700 0.2436 93 chr2 242127000 242127300 0.3174 73 chr2 242132400 242135400 0.0252 78 chr2 242136900 242139900 0.0252 78 chr2 242142300 242142600 0.0056 66 chr2 242148000 242157300 0 80 chr2 242159100 242169300 0 75 chr2 242172300 242172900 0 166 chr2 242174100 242183100 0 166 chr20 60300 67200 0.1475 1203 chr20 131100 132000 0.0384 93 chr20 133200 135600 0 81 chr20 160500 160800 0.1176 66 chr20 162000 162600 0.1176 66 chr20 1114500 1115100 0.1014 63 chr20 1259400 1260000 0.2048 73 chr20 1301700 1302600 0 149 chr20 1573200 1575600 0.0098 60 chr20 1606200 1609200 0.0055 53 chr20 1742400 1744800 0.0011 77 chr20 2443200 2443500 0.2378 55 chr20 2822700 2825700 0.0083 65 chr20 2910000 2910600 0.3374 30 chr20 3057300 3057600 0.3439 21 chr20 3477300 3477600 0.2756 55 chr20 3498900 3499200 0.1616 59 chr20 4033200 4035600 0.0203 31 chr20 4286700 4287000 0.2443 77 chr20 4386600 4389300 0.0464 86 chr20 5028000 5028300 0.2251 70 chr20 5278200 5278500 0.2088 91 chr20 5380200 5380800 0.1342 56 chr20 5453100 5453400 0.4669 32 chr20 6191100 6192000 0.015 47 chr20 6316800 6317700 0.2344 72 chr20 6321000 6321300 0.0535 98 chr20 7116300 7122000 0 81 chr20 7124700 7125300 0.0302 47 chr20 7299300 7299600 0.2919 52 chr20 8112000 8112600 0.0432 76 chr20 8595300 8600400 0 105 chr20 9015600 9015900 0.3939 30 chr20 9189000 9189300 0.3496 41 chr20 9858600 9861300 0 75 chr20 10807500 10807800 0.3624 71 chr20 11632800 11638800 0 75 chr20 12123900 12124200 0.2179 80 chr20 12125400 12126000 0.267 91 chr20 12362100 12362400 0.2709 73 chr20 12635400 12635700 0.1229 62 chr20 12664200 12664500 0.3264 70 chr20 12755100 12755400 0.143 21 chr20 12756900 12757200 0.2769 27 chr20 12801300 12807000 0 74 chr20 14273400 14273700 0.3044 63 chr20 15135600 15135900 0.2358 54 chr20 16226700 16228200 0.0111 47 chr20 16260000 16260300 0.228 61 chr20 16549800 16550100 0.1687 63 chr20 16994100 16994400 0.1203 78 chr20 17122800 17123100 0.0173 20 chr20 18602100 18605700 0 86 chr20 18950100 18954300 0.0032 87 chr20 19088100 19089300 0.0176 72 chr20 19118700 19119000 0.189 38 chr20 19419900 19421400 0.0159 68 chr20 19755300 19755600 0.0534 47 chr20 20357100 20357700 0.362 58 chr20 21254100 21254400 0.3222 55 chr20 21747300 21747600 0.0899 87 chr20 21889200 21889500 0.1903 72 chr20 21891600 21893400 0.0414 91 chr20 21911100 21911700 0.0503 98 chr20 21915000 21915300 0.27 73 chr20 21932400 21932700 0.2969 62 chr20 23262900 23263200 0.0284 44 chr20 23426100 23432100 0 107 chr20 23589900 23595000 0 106 chr20 25332900 25333200 0 79 chr20 25335300 25335600 0 79 chr20 25562100 25562400 0.2475 63 chr20 25716600 25716900 0.3748 41 chr20 25754400 25754700 0.26 59 chr20 25765500 25771800 0 139 chr20 25778400 25778700 0.1196 52 chr20 25779900 25845000 0 104 chr20 25846500 25846800 0.0763 77 chr20 26010900 26076300 0 101 chr20 26084700 26091000 0 131 chr20 26246700 26247000 0.1387 67 chr20 26310300 26310900 0 70 chr20 26313900 26314500 0.0244 77 chr20 26366700 26367000 0.0993 41 chr20 26384700 26386200 0.4312 27 chr20 26436300 26476200 0 929 chr20 26477400 26481000 0 537 chr20 26482200 26513700 0 623 chr20 26516100 26544000 0 982 chr20 26545800 26556300 0 317 chr20 26557500 26577000 0 449 chr20 26578800 26584500 0 449 chr20 26585700 26589600 0 449 chr20 26599500 26611200 0 817 chr20 26612700 27964200 0 930 chr20 27965400 28044300 0 442 chr20 28045800 28196100 0 2005 chr20 28197300 28497000 0 2005 chr20 28498200 28498500 0 2005 chr20 28504800 28505100 0 481 chr20 28506900 28557000 0 481 chr20 28596000 28596300 0.2275 98 chr20 28604700 28605300 0.062 75 chr20 28625700 28626600 0.3326 64 chr20 28635900 28636500 0.0164 99 chr20 28643700 28646100 0 311 chr20 28648500 28694700 0 95 chr20 28696200 28717800 0 100 chr20 28719600 28728900 0 100 chr20 28777200 28778700 0.1606 84 chr20 28842600 28843500 0 224 chr20 28861500 28861800 0.4962 162 chr20 28889100 28889400 0.4142 394 chr20 28897200 28899000 0.1563 1809 chr20 28940100 28940400 0.0386 44 chr20 28960500 29013900 0 63 chr20 29071200 29071800 0.04 158 chr20 29080800 29081100 0.0396 202 chr20 29082600 29083200 0.2565 224 chr20 29128800 29131500 0 29 chr20 29133600 29134500 0 31 chr20 29136000 29138100 0 43 chr20 29139300 29139900 0.0744 49 chr20 29143500 29143800 0 32 chr20 29145000 29145600 0 44 chr20 29147100 29150400 0.0473 43 chr20 29153100 29155500 0 31 chr20 29157600 29158800 0 33 chr20 29161200 29161500 0.2563 18 chr20 29163300 29167800 0 57 chr20 29170200 29171400 0.0748 69 chr20 29173800 29174100 0.1824 15 chr20 29175300 29179200 0 42 chr20 29181300 29181600 0.4431 27 chr20 29183700 29185200 0 40 chr20 29189100 29190300 0 41 chr20 29192400 29193000 0.2395 26 chr20 29194200 29196900 0 29 chr20 29198100 29202600 0 79 chr20 29207400 29207700 0.4687 161 chr20 29261700 29262000 0.2134 202 chr20 29451600 29451900 0.2251 36 chr20 29483400 29484300 0.1427 124 chr20 29494200 29494800 0.1119 168 chr20 29496600 29496900 0.3857 306 chr20 29505900 29506200 0.0315 126 chr20 29584800 29586000 0.011 50 chr20 29704500 29704800 0.4856 36 chr20 29884800 29885400 0.0318 165 chr20 29904900 29905200 0.4586 155 chr20 29910000 29910600 0 24 chr20 29913900 29914500 0 103 chr20 29915700 29920800 0 103 chr20 29922300 29923800 0 121 chr20 29925000 29934300 0 121 chr20 29937000 29941200 0 94 chr20 29944800 29945100 0.4065 20 chr20 29947200 29948100 0 88 chr20 29949900 29950200 0.0252 32 chr20 29951400 29952000 0.0626 68 chr20 29953500 29954400 0 85 chr20 29957400 29958000 0 61 chr20 29960100 29960700 0 50 chr20 29962500 29964900 0 75 chr20 29966700 29969100 0 41 chr20 29971200 29972100 0 37 chr20 29973600 29974200 0.1296 36 chr20 29976300 29976900 0.0316 28 chr20 29979900 29983500 0 117 chr20 29985300 29986500 0 75 chr20 29987700 29990400 0 75 chr20 29991600 30001500 0 75 chr20 30003900 30006900 0 75 chr20 30008100 30016200 0 75 chr20 30018900 30019500 0.4315 36 chr20 30021000 30024000 0 42 chr20 30025500 30026400 0 33 chr20 30027900 30029400 0 61 chr20 30030900 30033000 0 61 chr20 30034500 30035100 0.0864 27 chr20 30037200 30037500 0.0304 29 chr20 30088500 30098400 0 73 chr20 30102000 30125100 0 111 chr20 30127200 30127800 0.0044 50 chr20 30129300 30129900 0 15 chr20 30131100 30136800 0 68 chr20 30157800 30158100 0.4586 87 chr20 30238200 30238800 0.0117 60 chr20 30271200 30272400 0.0126 55 chr20 30395100 30395400 0.2229 105 chr20 30414900 30415200 0.3633 80 chr20 30841200 30841500 0.189 104 chr20 30975300 30975600 0.2725 62 chr20 30986100 30986400 0.4498 65 chr20 31051500 31060200 0.0691 8016 chr20 31062000 31067400 0.1896 7989 chr20 31069200 31107000 0 5573 chr20 31156800 31159200 0.1848 4493 chr20 31163100 31170000 0.1794 2365 chr20 31171200 31172100 0.2266 456 chr20 31173900 31175100 0.2655 327 chr20 31176300 31176900 0.2172 431 chr20 31178100 31178700 0.3551 192 chr20 31183200 31189500 0.1673 5715 chr20 31191000 31191300 0.4594 169 chr20 31192500 31193100 0.3316 255 chr20 31194300 31226400 0 1534 chr20 31227600 31230900 0.1276 771 chr20 31233000 31235400 0.2136 401 chr20 31236900 31238100 0.2671 373 chr20 31239300 31245300 0.1216 23471 chr20 32175300 32177400 0.0556 122 chr20 32723400 32724900 0 70 chr20 33456000 33456300 0.0085 24 chr20 33699600 33699900 0.2503 18 chr20 34223700 34225200 0.0376 76 chr20 34227900 34231200 0 110 chr20 35153700 35154900 0.2117 80 chr20 35262600 35262900 0.2396 87 chr20 36690600 36690900 0.3049 54 chr20 36981000 36981300 0.0163 47 chr20 38333700 38334000 0.3198 48 chr20 38460900 38461200 0.1819 77 chr20 39368700 39372000 0.012 82 chr20 39740400 39741300 0.0434 63 chr20 39804900 39805500 0.3416 86 chr20 39978600 39978900 0.0459 49 chr20 40623900 40625100 0.0045 50 chr20 41971200 41971800 0.0099 83 chr20 42207300 42208200 0.1111 63 chr20 42615600 42615900 0.2763 59 chr20 42618600 42619500 0.187 91 chr20 43175700 43176300 0.0797 52 chr20 43396200 43397100 0 40 chr20 43815000 43818900 0.0476 93 chr20 47525100 47525400 0.2034 111 chr20 47827200 47827500 0.331 73 chr20 47829300 47833200 0 68 chr20 47834700 47835300 0 67 chr20 47893200 47894700 0.0127 60 chr20 47898300 47902500 0 74 chr20 47903700 47904000 0.2421 47 chr20 48494700 48495000 0.0547 84 chr20 48504300 48504600 0.4066 126 chr20 48507600 48509100 0.0857 203 chr20 48510600 48514500 0.0857 203 chr20 48870900 48871800 0.0116 26 chr20 50209500 50209800 0.3926 361 chr20 51455700 51456000 0.3754 52 chr20 53163300 53163600 0.255 123 chr20 53456700 53457600 0.0368 83 chr20 53459400 53459700 0.0368 83 chr20 53474400 53475600 0.0044 81 chr20 53476800 53477700 0.0044 81 chr20 53504400 53504700 0.2021 86 chr20 53505900 53508000 0.2021 86 chr20 53509200 53509500 0.2021 86 chr20 54072900 54073200 0.4078 73 chr20 54249900 54250500 0 64 chr20 54811200 54812700 0.2455 71 chr20 54819000 54819300 0.1127 234 chr20 55076100 55076400 0.1948 73 chr20 55497600 55497900 0.4083 26 chr20 55859700 55865400 0 74 chr20 55888200 55888500 0.0614 38 chr20 55945200 55945500 0.0357 19 chr20 56082300 56082600 0.1091 70 chr20 56109000 56109600 0.0599 94 chr20 56281500 56281800 0.4787 38 chr20 59133000 59133300 0.2007 84 chr20 59533800 59534700 0.1865 109 chr20 60409200 60410400 0 138 chr20 60615900 60618600 0.1357 62 chr20 61242900 61243200 0.376 59 chr20 61283100 61283400 0.2659 30 chr20 61289700 61290300 0.143 87 chr20 61350300 61350600 0.3743 41 chr20 61653000 61653600 0.123 32 chr20 61675500 61675800 0.2688 50 chr20 61689300 61689600 0.3108 62 chr20 61783800 61784400 0.1949 47 chr20 61943100 61944600 0 45 chr20 61945800 61946400 0.228 24 chr20 61978200 61978500 0.3357 50 chr20 61995600 61995900 0.3613 33 chr20 62057700 62058900 0.071 77 chr20 62082900 62083200 0.3606 43 chr20 62270700 62271000 0.2404 44 chr20 62961000 62961300 0.2756 44 chr20 62989800 62990100 0.1371 62 chr20 63029100 63029400 0.3811 76 chr20 63068400 63068700 0.3669 136 chr20 63156900 63157200 0.1406 38 chr20 63266700 63267000 0.4288 39 chr20 63442800 63443400 0.4666 203 chr20 63607500 63609900 0.1235 189 chr20 63669600 63670500 0 62 chr20 63677700 63678000 0.3652 71 chr20 63693300 63693900 0.394 365 chr20 63824700 63825000 0.3108 17 chr20 63919500 63920100 0.3251 42 chr20 63942000 63942300 0.371 20 chr20 63965100 63965400 0.0594 48 chr20 64011900 64012800 0.0031 84 chr20 64087200 64087500 0.0152 62 chr20 64090800 64091100 0.3819 17 chr20 64118400 64118700 0.4217 22 chr20 64132200 64133700 0.2071 47 chr20 64135200 64135500 0.3438 60 chr20 64173600 64176300 0.0083 99 chr20 64270800 64271400 0.014 49 chr20 64289400 64302300 0 89 chr20 64304100 64308600 0.0204 87 chr20 64310700 64312500 0.0542 88 chr20 64317000 64317300 0.3709 83 chr20 64321800 64322100 0.2459 64 chr20 64326600 64326900 0.0698 44 chr21 5010000 5033100 0 47 chr21 5034600 5037900 0 45 chr21 5039400 5051100 0 39 chr21 5052600 5062500 0 44 chr21 5067300 5067600 0.0802 37 chr21 5069100 5070600 0.0852 38 chr21 5072100 5085600 0 43 chr21 5087100 5089800 0 44 chr21 5091000 5095800 0 44 chr21 5099400 5102700 0 35 chr21 5104800 5110500 0 46 chr21 5113200 5113500 0.0296 25 chr21 5116500 5117100 0.0131 35 chr21 5118600 5119200 0 48 chr21 5120400 5136300 0 48 chr21 5137500 5142300 0 46 chr21 5143500 5144700 0 48 chr21 5145900 5148600 0 48 chr21 5150400 5154000 0 48 chr21 5155200 5166300 0 48 chr21 5255700 5260800 0 129 chr21 5262000 5264100 0 129 chr21 5265300 5270100 0 91 chr21 5272200 5280600 0 118 chr21 5282100 5286900 0 118 chr21 5288100 5289000 0 118 chr21 5298600 5301000 0.0043 143 chr21 5303100 5307600 0.0043 143 chr21 5310000 5311200 0.0043 143 chr21 5313600 5314500 0.0018 308 chr21 5317800 5318100 0.0911 197 chr21 5319900 5322300 0.0422 185 chr21 5323500 5325900 0.0065 251 chr21 5327100 5330700 0.0253 690 chr21 5332200 5334300 0 118 chr21 5335800 5340900 0 118 chr21 5342400 5343000 0.0844 80 chr21 5345100 5349300 0 100 chr21 5351400 5354400 0.0095 101 chr21 5356800 5357400 0.0025 312 chr21 5360400 5363400 0 198 chr21 5364600 5371200 0 198 chr21 5375100 5375700 0.0132 233 chr21 5377500 5390400 0.0132 233 chr21 5392800 5393400 0.1974 128 chr21 5443500 5448900 0 72 chr21 5499000 5506800 0 51 chr21 5508000 5627700 0 79 chr21 5677500 5796000 0 93 chr21 5846100 5916600 0 84 chr21 5966700 5985300 0 42 chr21 5988000 6093300 0 53 chr21 6094500 6097500 0 45 chr21 6099600 6161400 0 47 chr21 6211500 6312600 0 86 chr21 6314100 6374100 0 216 chr21 6431100 6431400 0.1337 26 chr21 6434700 6435000 0.2077 42 chr21 6439500 6478800 0 49 chr21 6480600 6486300 0 60 chr21 6487500 6560700 0 60 chr21 6561900 6580200 0 152 chr21 6630300 6675000 0 122 chr21 6676500 6738900 0 122 chr21 6789600 6915600 0 49 chr21 6917400 6928200 0 53 chr21 6930000 6932400 0 53 chr21 6933600 6934200 0 24 chr21 6984300 7149600 0 89 chr21 7199700 7228500 0 185 chr21 7229700 7232100 0.1106 138 chr21 7237200 7238400 0.1149 243 chr21 7242300 7242600 0.1695 102 chr21 7243800 7244400 0.0614 152 chr21 7248000 7248300 0.3942 150 chr21 7250700 7254900 0.0039 216 chr21 7257300 7262400 0.029 2269 chr21 7263900 7266000 0.0542 85 chr21 7268700 7271400 0 157 chr21 7274400 7274700 0 157 chr21 7275900 7279800 0.0015 109 chr21 7285800 7286100 0.113 98 chr21 7287900 7289100 0.0003 315 chr21 7292400 7292700 0.2102 120 chr21 7294200 7297200 0.0202 164 chr21 7299000 7303200 0.0043 124 chr21 7305600 7305900 0.1168 119 chr21 7308600 7312500 0.0389 192 chr21 7313700 7316700 0.0077 151 chr21 7318800 7320900 0.0077 151 chr21 7323600 7323900 0.2135 82 chr21 7377900 7383900 0 44 chr21 7385100 7500900 0 79 chr21 7551000 7693800 0 91 chr21 7743900 7818600 0 51 chr21 7820700 7865700 0 47 chr21 7926000 7927500 0.2991 1485 chr21 7938000 7938600 0.2479 2314 chr21 7942200 7942500 0.3584 578 chr21 7944300 7944600 0.2277 1733 chr21 7950000 7950300 0.4122 495 chr21 7956000 7957800 0.3721 1085 chr21 7970700 7975500 0.0106 351 chr21 7977900 8012700 0 284 chr21 8013900 8014800 0.0027 144 chr21 8016300 8019900 0.0289 227 chr21 8024700 8035500 0 385 chr21 8039100 8039400 0.3517 155 chr21 8042700 8044800 0 210 chr21 8046000 8047200 0 123 chr21 8100000 8261100 0 5868 chr21 8310900 8472600 0 5641 chr21 8523000 8526600 0.0223 49 chr21 8529600 8529900 0.2226 55 chr21 8532900 8538600 0 77 chr21 8539800 8544600 0 77 chr21 8546100 8548800 0 77 chr21 8550300 8553600 0 60 chr21 8555100 8581800 0 98 chr21 8583000 8583600 0 98 chr21 8585100 8587500 0 86 chr21 8589300 8590200 0 86 chr21 8591700 8594400 0 86 chr21 8596500 8613900 0 60 chr21 8616600 8617800 0.0238 38 chr21 8619300 8620800 0 62 chr21 8622600 8624400 0 46 chr21 8625900 8626200 0 90 chr21 8628000 8630400 0 90 chr21 8631600 8635200 0.0052 43 chr21 8637000 8638200 0 40 chr21 8639400 8648100 0 53 chr21 8650200 8650800 0 53 chr21 8652900 8653200 0.1866 42 chr21 8656800 8659800 0 50 chr21 8661000 8661900 0 50 chr21 8663700 8664000 0.1989 28 chr21 8665500 8666700 0 69 chr21 8668200 8669100 0 69 chr21 8670300 8684100 0 69 chr21 8691000 8691300 0.0117 70 chr21 8700900 8701200 0.3311 78 chr21 8705100 8705400 0.255 79 chr21 8790000 8832900 0 298 chr21 8837100 8837400 0.2277 146 chr21 8840100 8840700 0.164 154 chr21 8842500 8842800 0.164 154 chr21 8844900 8885700 0 117 chr21 8986500 8988600 0 2094 chr21 9016200 9016800 0.0116 166 chr21 9030900 9031200 0.1509 84 chr21 9039000 9039300 0.1046 34 chr21 9042300 9067500 0 116 chr21 9069000 9070800 0 116 chr21 9073500 9073800 0 35 chr21 9075600 9078000 0.0238 45 chr21 9079500 9083400 0 75 chr21 9085200 9085500 0.4513 17 chr21 9089400 9089700 0 116 chr21 9091200 9103200 0 116 chr21 9106800 9116400 0 126 chr21 9117900 9118800 0.0518 110 chr21 9120300 9130200 0 158 chr21 9131400 9132300 0 132 chr21 9133500 9157500 0 132 chr21 9159300 9174000 0 145 chr21 9175200 9195900 0 145 chr21 9246000 9246300 0.3617 733 chr21 9248400 9291900 0 583 chr21 9293400 9301800 0 583 chr21 9303000 9360900 0 583 chr21 9363000 9365100 0 216 chr21 9366300 9377100 0 188 chr21 9527100 9538200 0 98 chr21 9540000 9562500 0 133 chr21 9564300 9564900 0 109 chr21 9566400 9570300 0.0539 166 chr21 9573300 9576600 0.0001 145 chr21 9578400 9587400 0.0001 145 chr21 9589200 9592500 0 128 chr21 9594000 9594600 0 128 chr21 9596100 9596400 0 128 chr21 9597900 9598800 0 128 chr21 9600600 9607200 0 128 chr21 9608400 9610500 0.046 104 chr21 9612300 9613800 0.012 97 chr21 9615300 9615600 0.0511 68 chr21 9617100 9619500 0.0413 111 chr21 9620700 9622800 0.0186 104 chr21 9624300 9626100 0.0186 104 chr21 9627600 9629400 0.0027 86 chr21 9633000 9633600 0.0535 76 chr21 9635100 9636600 0.0044 90 chr21 9637800 9639300 0.1049 91 chr21 9640500 9643200 0 100 chr21 9645000 9646800 0 100 chr21 9659100 9666300 0 121 chr21 9668100 9668400 0 121 chr21 9670200 9673200 0 121 chr21 9674700 9675300 0 121 chr21 9677100 9699300 0 121 chr21 9700500 9703500 0 121 chr21 9705300 9706800 0 121 chr21 9708600 9710700 0 109 chr21 9712200 9718500 0 109 chr21 9734700 9735000 0.1943 105 chr21 9798000 9799200 0 103 chr21 9800400 9804900 0 103 chr21 9806400 9807000 0.0041 94 chr21 9808800 9811800 0.0685 303 chr21 9813000 9813300 0.0889 594 chr21 9815700 9816900 0.0889 594 chr21 9818400 9819600 0.0889 594 chr21 9820800 9821100 0.4338 537 chr21 9824400 9836100 0 635 chr21 9906600 9906900 0.2537 146 chr21 10031100 10032600 0 105 chr21 10034700 10038600 0.0111 90 chr21 10040100 10041600 0.0111 90 chr21 10043700 10044300 0.0042 90 chr21 10045800 10046400 0.0042 90 chr21 10048800 10053600 0 113 chr21 10054800 10055400 0 107 chr21 10056900 10063200 0 107 chr21 10065300 10067400 0 107 chr21 10068600 10074000 0 107 chr21 10075200 10075800 0 107 chr21 10078800 10079100 0.3103 106 chr21 10080600 10080900 0 103 chr21 10082100 10083600 0 103 chr21 10085100 10086000 0 103 chr21 10088400 10090200 0.0325 98 chr21 10092000 10092600 0.0043 101 chr21 10095300 10096200 0 118 chr21 10100400 10101000 0.2051 97 chr21 10102500 10104600 0.0013 136 chr21 10108200 10111500 0.0102 107 chr21 10113300 10114500 0.0021 66 chr21 10116300 10116600 0.0016 93 chr21 10118100 10118400 0.0016 93 chr21 10124400 10140300 0 162 chr21 10141500 10141800 0 162 chr21 10143300 10169100 0 162 chr21 10269600 10271700 0.1199 4615 chr21 10272900 10274400 0.1199 4615 chr21 10324200 10326000 0.275 16528 chr21 10336200 10336500 0.3088 181 chr21 10364100 10364400 0 383 chr21 10366500 10371000 0 383 chr21 10392600 10392900 0.1636 306 chr21 10395300 10395600 0.4044 181 chr21 10397100 10397400 0.2973 353 chr21 10435200 10435500 0.1238 58 chr21 10441500 10441800 0.1166 120 chr21 10477500 10477800 0.2028 145 chr21 10479300 10479900 0.0833 148 chr21 10487100 10488000 0.198 126 chr21 10492200 10501500 0 109 chr21 10502700 10504800 0 69 chr21 10506000 10510200 0 69 chr21 10653900 10654200 0.441 409 chr21 10655400 10656600 0.1186 6680 chr21 10658700 10659000 0.2461 1950 chr21 10662300 10662600 0.2977 567 chr21 10666500 10666800 0.4972 383 chr21 10668000 10669200 0.2317 3467 chr21 10670700 10671000 0.4142 492 chr21 10673100 10674600 0.3331 726 chr21 10676700 10677000 0.3778 440 chr21 10678500 10680000 0.3128 574 chr21 10687200 10687500 0.3774 514 chr21 10692300 10693200 0.1738 30778 chr21 10698300 10698600 0.4679 374 chr21 10703100 10703400 0.3365 916 chr21 10704600 10705500 0.1717 2181 chr21 10706700 10708500 0.331 582 chr21 10711200 10711500 0.4604 364 chr21 10714200 10714500 0.4633 440 chr21 10716600 10716900 0.3328 679 chr21 10722900 10723200 0.4211 265 chr21 10724400 10728600 0.2272 1201 chr21 10730100 10733400 0.2272 1201 chr21 10737600 10737900 0.4994 329 chr21 13030500 13030800 0.2766 62 chr21 13038900 13039200 0.4857 48 chr21 13044900 13045200 0.1419 59 chr21 13046700 13047000 0.0221 66 chr21 13048800 13050000 0.0434 41 chr21 13056000 13057800 0.2203 74 chr21 13059000 13059900 0.2225 69 chr21 13063200 13065000 0.0238 72 chr21 13070400 13070700 0.2033 67 chr21 13092300 13092600 0.0615 54 chr21 13094700 13095000 0.227 48 chr21 13137900 13138800 0.0037 57 chr21 13158600 13158900 0.3072 46 chr21 13167000 13167300 0.1345 56 chr21 13171200 13171500 0.2468 62 chr21 13175100 13175400 0.2975 71 chr21 13179900 13181100 0 67 chr21 13182600 13183200 0 67 chr21 13184700 13185900 0 67 chr21 13194000 13196100 0.1765 65 chr21 13197600 13197900 0.1845 62 chr21 13199700 13200000 0.2112 70 chr21 13204200 13205400 0.2327 54 chr21 13208700 13210200 0.0904 57 chr21 13216500 13216800 0.2667 57 chr21 13375500 13375800 0.2169 64 chr21 13391100 13391400 0.2115 20 chr21 13483800 13484100 0.1919 73 chr21 13500300 13500900 0.4058 52 chr21 13524000 13524300 0.3683 57 chr21 13533900 13534800 0.1693 56 chr21 13567800 13568100 0.2705 50 chr21 13586400 13591800 0 47 chr21 13593000 13594500 0.0088 30 chr21 13596000 13596900 0.2011 38 chr21 13598400 13601100 0.0747 50 chr21 13602300 13604700 0.001 47 chr21 13606500 13608300 0.001 47 chr21 13610100 13610400 0.0831 37 chr21 13613100 13618500 0 47 chr21 13619700 13636200 0 47 chr21 13638000 13639200 0 47 chr21 13640700 13641300 0 47 chr21 13642800 13643400 0 47 chr21 13644600 13644900 0.1608 22 chr21 13646400 13649400 0.0021 44 chr21 13652400 13654200 0 49 chr21 13657500 13659000 0 49 chr21 13660200 13663800 0 49 chr21 13666800 13668600 0 29 chr21 13669800 13673100 0 34 chr21 13675500 13676700 0 38 chr21 13678800 13685100 0 38 chr21 13686600 13711200 0 38 chr21 13712400 13717500 0 23 chr21 13719000 13732500 0 27 chr21 13733700 13780500 0 50 chr21 13784700 13799100 0 64 chr21 13866600 13866900 0.119 27 chr21 13881600 13881900 0.3526 77 chr21 13975500 13975800 0.0027 40 chr21 13984200 13984500 0.0357 52 chr21 13992900 13993200 0.0168 66 chr21 14059800 14060100 0.0877 31 chr21 14068500 14068800 0.1606 40 chr21 14407800 14408100 0.0966 51 chr21 14588100 14588400 0.2189 68 chr21 14927700 14932500 0.0127 104 chr21 15554400 15555900 0.2513 83 chr21 15837000 15837300 0.2844 47 chr21 16398000 16398300 0.4284 32 chr21 16544400 16544700 0.2787 26 chr21 17167500 17167800 0.171 14 chr21 17172600 17172900 0.034 25 chr21 17291700 17292900 0.0045 95 chr21 17305500 17306100 0.0801 51 chr21 17332200 17332500 0.3763 78 chr21 17377200 17379000 0.0522 84 chr21 17380200 17381700 0.0522 84 chr21 17718600 17719200 0.1518 71 chr21 18561000 18561300 0.3244 47 chr21 18569700 18570000 0.3133 40 chr21 18872400 18872700 0.2019 63 chr21 19008900 19009200 0.3514 66 chr21 19071900 19074000 0.0491 83 chr21 20076900 20077200 0.0996 33 chr21 20199600 20201400 0.1161 66 chr21 21301800 21302100 0.2022 67 chr21 22957800 22958100 0.3094 50 chr21 23002500 23002800 0.1547 35 chr21 24391800 24392100 0.0599 15 chr21 25919400 25924200 0 93 chr21 27576000 27577800 0.2385 64 chr21 29421300 29422500 0.1107 68 chr21 30840000 30841800 0.0202 95 chr21 31784400 31785300 0.2873 301 chr21 32224800 32226000 0.006 87 chr21 33321600 33321900 0.2625 169 chr21 33323400 33323700 0.4506 37 chr21 33927000 33927600 0.1607 87 chr21 33930000 33930300 0.1765 52 chr21 34374300 34449300 0 45 chr21 34450500 34495500 0 47 chr21 35493900 35499300 0.0053 94 chr21 36496800 36497400 0.2061 169 chr21 38109300 38109600 0.1155 13 chr21 38218500 38218800 0.416 45 chr21 38828700 38829300 0.0202 56 chr21 38874300 38874600 0.4657 39 chr21 39786300 39786600 0.264 71 chr21 39974400 39975000 0.3369 266 chr21 40023600 40023900 0.0196 50 chr21 40027500 40028100 0 88 chr21 40033800 40035600 0 70 chr21 40038300 40038900 0 70 chr21 40182600 40182900 0.4661 31 chr21 40917300 40917600 0.0442 73 chr21 41031000 41031300 0.2293 15 chr21 41690100 41690400 0.4742 59 chr21 41805900 41806500 0.4122 494 chr21 41856000 41856300 0.2654 24 chr21 42078300 42078600 0.2628 11 chr21 42283800 42284100 0.2368 21 chr21 42588000 42590100 0.0432 27 chr21 42957300 42957600 0.1622 1902 chr21 43037400 43037700 0.3773 16 chr21 43039500 43039800 0.2369 39 chr21 43043100 43045800 0.023 40 chr21 43047600 43065900 0 49 chr21 43067400 43086900 0 49 chr21 43089000 43094100 0 50 chr21 43095600 43187400 0 50 chr21 43336800 43337100 0.4887 185 chr21 43377300 43410600 0 43 chr21 43412100 43412400 0 43 chr21 43414200 43438500 0 40 chr21 43440600 43505100 0 51 chr21 43506300 43550700 0 51 chr21 43553400 43571700 0 39 chr21 44096100 44145900 0 46 chr21 44147100 44148900 0 46 chr21 44150100 44194800 0 46 chr21 44196900 44197200 0 15 chr21 44201100 44209800 0 46 chr21 44211000 44229000 0 46 chr21 44230200 44253300 0 46 chr21 44410200 44410500 0.2899 31 chr21 44422800 44423100 0.1979 32 chr21 44487000 44487300 0.1539 64 chr21 44981700 44982300 0.1984 85 chr21 45500400 45501000 0.3509 61 chr21 45524400 45524700 0.1882 67 chr21 45633300 45634200 0.1596 78 chr21 45746100 45747000 0.1334 74 chr21 45924300 45924900 0.4092 266 chr21 46034400 46035000 0.0249 51 chr21 46090800 46091100 0.4801 199 chr21 46169700 46170000 0.208 15 chr21 46184400 46184700 0.2168 200 chr21 46201200 46201500 0.0904 103 chr21 46292700 46294500 0.1325 160 chr21 46682700 46686900 0 79 chr21 46689900 46691700 0 74 chr21 46692900 46700100 0 125 chr22 10509900 10521900 0 80 chr22 10523400 10560600 0 137 chr22 10562100 10571400 0 73 chr22 10573500 10597800 0 65 chr22 10599300 10615200 0 65 chr22 10616400 10628100 0 54 chr22 10629900 10630800 0 40 chr22 10632900 10639200 0 49 chr22 10640700 10641300 0 49 chr22 10642500 10644000 0 60 chr22 10645200 10659900 0 60 chr22 10674300 10676100 0.1213 56 chr22 10678200 10678500 0.1065 77 chr22 10682400 10684200 0.096 80 chr22 10685700 10686300 0.1957 97 chr22 10689600 10689900 0.158 120 chr22 10706100 10706700 0.1954 82 chr22 10709400 10709700 0.0682 97 chr22 10718100 10719000 0.2787 1204 chr22 10720800 10721400 0.2897 1599 chr22 10722900 10723200 0.2897 1599 chr22 10725000 10726800 0.2591 513 chr22 10729200 10730400 0.3731 755 chr22 10765200 10765500 0.1735 156 chr22 10834500 10874400 0 142 chr22 10954800 10955100 0.3125 223 chr22 10963500 10963800 0.0399 97 chr22 11016600 11017200 0 384 chr22 11018400 11023800 0 384 chr22 11043900 11046000 0.0402 270 chr22 11049900 11050200 0.0451 275 chr22 11052900 11053200 0.215 256 chr22 11119200 11160900 0 78 chr22 11211300 11214300 0.1607 585 chr22 11215500 11217600 0 39 chr22 11220600 11250300 0 193 chr22 11251500 11284500 0 193 chr22 11320500 11322900 0 226 chr22 11332500 11332800 0.1977 54 chr22 11368800 11371200 0.0029 644 chr22 11430000 11430300 0.2654 29 chr22 11433000 11433900 0.4654 40 chr22 11438400 11438700 0.2063 33 chr22 11440200 11440500 0.2973 39 chr22 11445600 11447400 0 32 chr22 11449500 11450400 0 19 chr22 11452200 11452500 0 12 chr22 11454000 11456400 0 48 chr22 11458500 11459700 0 27 chr22 11460900 11461200 0 27 chr22 11462400 11466000 0 36 chr22 11470500 11471700 0.0674 28 chr22 11472900 11473200 0.0674 28 chr22 11484600 11486100 0 26 chr22 11492400 11493600 0.244 22 chr22 11548500 11548800 0.3266 140 chr22 11557500 11560500 0 270 chr22 11683200 11689800 0 151 chr22 11691000 11694300 0 151 chr22 11696400 11697000 0 151 chr22 11698800 11703000 0 219 chr22 11704800 11710200 0 219 chr22 11711400 11714400 0 219 chr22 11715600 11724300 0 219 chr22 11774700 11786400 0 141 chr22 11787600 11793300 0 141 chr22 11794500 11795400 0 136 chr22 11796600 11800200 0 136 chr22 11802300 11818200 0 825 chr22 11820000 11821200 0 134 chr22 11823000 11827500 0 149 chr22 11828700 11869800 0 149 chr22 11871600 11872800 0 149 chr22 11874000 11874600 0 41 chr22 11876100 11878800 0 41 chr22 11880900 11883900 0 79 chr22 11885100 11885700 0 79 chr22 11893800 11894100 0.0099 78 chr22 11895300 11899500 0 61 chr22 11901000 11908800 0 171 chr22 11910000 11938500 0 171 chr22 11940000 11941500 0 171 chr22 11943000 11945400 0 171 chr22 11946600 11949900 0 171 chr22 11951700 11953500 0 171 chr22 11954700 11959500 0 106 chr22 11966100 11970300 0 101 chr22 11972100 11973000 0 101 chr22 11974800 11975100 0.2985 13 chr22 12042600 12043200 0.2457 162 chr22 12046500 12046800 0.104 109 chr22 12058200 12058800 0 128 chr22 12060600 12068400 0 128 chr22 12069900 12070500 0.0006 163 chr22 12071700 12077100 0.0006 163 chr22 12080100 12081600 0.0006 163 chr22 12083700 12087900 0 119 chr22 12089100 12091200 0.0083 107 chr22 12092700 12093000 0.0083 107 chr22 12096600 12097200 0.025 97 chr22 12100200 12100500 0.219 89 chr22 12102000 12102300 0.1687 103 chr22 12104100 12104700 0.155 155 chr22 12106800 12107700 0.0566 79 chr22 12115800 12116400 0.0023 106 chr22 12117600 12118200 0.0023 106 chr22 12125100 12125400 0 136 chr22 12126900 12128400 0 136 chr22 12129900 12132000 0 136 chr22 12133800 12135300 0.0014 90 chr22 12136800 12139500 0.0014 90 chr22 12141600 12141900 0.2039 107 chr22 12144000 12144600 0.039 176 chr22 12146700 12147900 0.039 176 chr22 12149100 12149400 0.039 176 chr22 12151500 12152700 0.039 176 chr22 12154500 12157500 0.039 176 chr22 12159300 12161100 0.2304 246 chr22 12162300 12163500 0.2304 246 chr22 12172200 12172500 0.3189 153 chr22 12175500 12176700 0.016 892 chr22 12178200 12178800 0.016 892 chr22 12182100 12182400 0.0042 79 chr22 12184800 12186900 0.1295 113 chr22 12189000 12189300 0.3377 98 chr22 12215400 12215700 0.1463 74 chr22 12219900 12222000 0.256 165 chr22 12225000 12225300 0.4271 84 chr22 12275700 12276900 0.1793 182 chr22 12278400 12279600 0.1793 182 chr22 12281100 12282000 0.0069 158 chr22 12285300 12292500 0.0021 171 chr22 12293700 12296700 0 253 chr22 12299400 12303000 0.002 228 chr22 12304500 12306600 0.002 228 chr22 12309000 12314100 0.002 228 chr22 12315900 12316500 0.002 228 chr22 12320700 12321300 0.0017 46 chr22 12323100 12330300 0 214 chr22 12331800 12338400 0 214 chr22 12340200 12340800 0 214 chr22 12342900 12343200 0 214 chr22 12344400 12346800 0.0604 121 chr22 12348900 12349200 0.0769 163 chr22 12352200 12357600 0 228 chr22 12359700 12362400 0 311 chr22 12364200 12364500 0.0255 194 chr22 12366300 12366900 0.1268 237 chr22 12368400 12371400 0.1268 237 chr22 12373800 12374100 0.1021 206 chr22 12490500 12496200 0.0548 238 chr22 12499800 12500100 0.0893 196 chr22 12501300 12504600 0 310 chr22 12506100 12511800 0.0032 199 chr22 12515100 12515400 0.1182 124 chr22 12517500 12519000 0.2319 185 chr22 12520800 12521100 0.2319 185 chr22 12523200 12525000 0 235 chr22 12526200 12530700 0 235 chr22 12532200 12535200 0 235 chr22 12538200 12540300 0 107 chr22 12542100 12543300 0 96 chr22 12546900 12547200 0.0332 62 chr22 12550500 12560400 0.0057 233 chr22 12561900 12563100 0.0076 97 chr22 12564300 12565500 0.0076 97 chr22 12568200 12580200 0.0024 253 chr22 12582600 12583200 0.0024 253 chr22 12585300 12586200 0.1237 130 chr22 12587400 12588900 0.1242 183 chr22 12698700 12699000 0 13 chr22 12709200 12709500 0.1964 60 chr22 12713400 12716400 0.1481 105 chr22 12717900 12718200 0.1481 105 chr22 12720900 12721200 0.334 74 chr22 12724500 12724800 0.139 55 chr22 12776700 12778200 0.0376 76 chr22 12781800 12783000 0.2023 169 chr22 12785100 12785400 0.2023 169 chr22 12786900 12788100 0.05 84 chr22 12791100 12792600 0.0528 112 chr22 12793800 12794700 0.0528 112 chr22 12796200 12796800 0.0528 112 chr22 12804900 12805200 0.1462 67 chr22 12806700 12809700 0.0379 98 chr22 12812100 12812400 0.1485 74 chr22 12814800 12815100 0.025 98 chr22 12816300 12817800 0.224 101 chr22 12868200 12904800 0 239 chr22 15155100 15165900 0 74 chr22 15167400 15194100 0 83 chr22 15195300 15208200 0 87 chr22 15209400 15227400 0 86 chr22 15228600 15252000 0 86 chr22 15253800 15279000 0 86 chr22 15280200 15301500 0 86 chr22 15303300 15316800 0 86 chr22 15318300 15324300 0 71 chr22 15326100 15329100 0.0484 65 chr22 15331200 15335100 0 55 chr22 15336600 15337800 0 55 chr22 15339600 15342300 0.0129 57 chr22 15343800 15344100 0.0129 57 chr22 15345300 15345900 0.0006 71 chr22 15347100 15348600 0.0006 71 chr22 15349800 15352500 0.0006 71 chr22 15354000 15357000 0 96 chr22 15358500 15358800 0 96 chr22 15360000 15360300 0.1424 75 chr22 15363000 15363300 0 83 chr22 15364500 15369600 0 83 chr22 15372300 15375900 0.0506 78 chr22 15377100 15378900 0.0506 78 chr22 15380100 15382200 0.0508 76 chr22 15384000 15384300 0.0962 88 chr22 15385800 15387600 0.0962 88 chr22 15393300 15396300 0 81 chr22 15398100 15402300 0.0025 88 chr22 15403500 15407700 0.0025 88 chr22 15409800 15411000 0.0171 76 chr22 15414000 15419400 0 83 chr22 15420900 15422700 0 70 chr22 15425100 15427200 0.0066 73 chr22 15429300 15430800 0.0048 71 chr22 15432600 15437700 0 80 chr22 15441000 15441300 0.0752 81 chr22 15444000 15447900 0.0021 73 chr22 15450000 15450600 0 74 chr22 15452400 15456300 0 74 chr22 15457500 15466200 0 74 chr22 15467400 15468000 0.2152 52 chr22 15471600 15483000 0 72 chr22 15484800 15486600 0 72 chr22 15489600 15506700 0 74 chr22 15507900 15512700 0 88 chr22 15514500 15514800 0 88 chr22 15516300 15517200 0 88 chr22 15518400 15520500 0 139 chr22 15521700 15535200 0 139 chr22 15537600 15542700 0 139 chr22 15545100 15548400 0 156 chr22 15549600 15576600 0 156 chr22 15578700 15598800 0 141 chr22 15600600 15612000 0 141 chr22 15616200 15616500 0.2451 105 chr22 15617700 15618000 0.2451 105 chr22 15619500 15625500 0.0125 98 chr22 15627000 15627300 0.0305 67 chr22 15629400 15629700 0.2347 116 chr22 15637200 15639600 0 177 chr22 15641400 15652200 0 177 chr22 15653700 15669300 0 177 chr22 15670800 15689100 0 177 chr22 15690900 15691500 0 177 chr22 15693000 15699300 0 150 chr22 15700800 15707700 0 150 chr22 15709200 15710100 0 150 chr22 15711900 15712800 0 122 chr22 15714600 15728700 0 146 chr22 15729900 15730200 0 146 chr22 15732600 15733500 0.0295 126 chr22 15735300 15737400 0.004 146 chr22 15741300 15745200 0 130 chr22 15747300 15747600 0.0626 105 chr22 15750600 15754500 0.0161 133 chr22 15756000 15756600 0.0161 133 chr22 15759000 15759900 0.0053 135 chr22 15762300 15763500 0.0211 183 chr22 15764700 15765300 0.0211 183 chr22 15767400 15770700 0 111 chr22 15773700 15774300 0.0233 112 chr22 15776100 15777900 0 186 chr22 15779100 15785400 0 186 chr22 15786600 15786900 0.0233 81 chr22 15788700 15814200 0 161 chr22 15815400 15826800 0 158 chr22 15828300 15828600 0.0644 32 chr22 15830700 15831900 0.0015 163 chr22 15833100 15833400 0.0015 163 chr22 15837300 15838500 0.092 95 chr22 15839700 15840300 0.1108 102 chr22 15842100 15861000 0 174 chr22 15864000 15879600 0 114 chr22 15880800 15904200 0 114 chr22 15905400 15906000 0 114 chr22 15907500 15907800 0 114 chr22 15909300 15910800 0 62 chr22 15912300 15913500 0.015 70 chr22 15915000 15915300 0.049 29 chr22 15918300 15918600 0.0741 64 chr22 15927900 15928200 0.3157 66 chr22 15931200 15932700 0.2082 74 chr22 15941400 15944700 0.0362 68 chr22 15947100 15947400 0.3419 66 chr22 15951000 15951600 0.2018 59 chr22 15954900 15955200 0.2015 37 chr22 15957000 15963300 0 45 chr22 15964500 15971700 0 45 chr22 15973500 15977100 0 67 chr22 15978300 15980400 0 67 chr22 15982500 15982800 0.3134 52 chr22 15984900 15995100 0 89 chr22 15996300 16020600 0 89 chr22 16164900 16165200 0.0694 21 chr22 16275600 16275900 0.4326 151 chr22 16305600 16314300 0 32 chr22 16319100 16323600 0 51 chr22 16328100 16385700 0 11424 chr22 16479900 16522500 0 75 chr22 16701000 16701300 0.0393 70 chr22 16959000 16959300 0.3749 49 chr22 17018100 17018400 0.1362 136 chr22 17034000 17034300 0.3226 98 chr22 17037000 17037300 0.2576 108 chr22 17146800 17147100 0.1944 50 chr22 17877000 17877300 0.4925 164 chr22 18009300 18009900 0 32 chr22 18161100 18161700 0.0168 64 chr22 18165000 18165600 0.233 57 chr22 18170700 18171300 0.017 66 chr22 18176100 18178500 0.0484 86 chr22 18180300 18184800 0 987 chr22 18186600 18189900 0 987 chr22 18191400 18203700 0 987 chr22 18205200 18206100 0 1414 chr22 18207600 18225300 0 52 chr22 18226500 18229800 0 52 chr22 18231000 18231600 0 52 chr22 18233100 18234600 0 29 chr22 18236700 18238500 0.0142 1239 chr22 18339900 18346500 0 37 chr22 18347700 18354300 0 43 chr22 18358200 18368700 0 58 chr22 18371700 18387900 0 2035 chr22 18390600 18417300 0 63 chr22 18418500 18419700 0 1194 chr22 18420900 18433500 0 675 chr22 18484200 18485100 0 38 chr22 18486300 18487800 0 21 chr22 18489000 18491100 0 31 chr22 18492300 18502500 0 44 chr22 18504000 18505200 0 44 chr22 18507600 18508800 0 44 chr22 18510000 18518100 0 50 chr22 18520800 18529800 0 42 chr22 18531000 18536100 0 52 chr22 18538500 18550800 0 48 chr22 18552900 18568800 0 60 chr22 18570000 18571200 0 70 chr22 18572400 18588600 0 70 chr22 18590400 18597600 0 70 chr22 18600300 18606900 0 60 chr22 18609000 18615000 0 62 chr22 18616200 18616500 0 62 chr22 18618000 18620700 0.1407 41 chr22 18622500 18628200 0 38 chr22 18629400 18631500 0 39 chr22 18632700 18633900 0 39 chr22 18635100 18636000 0 39 chr22 18637800 18638700 0 35 chr22 18639900 18640200 0 28 chr22 18641700 18648600 0 28 chr22 18650100 18652500 0 28 chr22 18653700 18654900 0 28 chr22 18656400 18657600 0 61 chr22 18658800 18659100 0 61 chr22 18709500 18720300 0 36 chr22 18722100 18727500 0 89 chr22 18729900 18730800 0.3272 12678 chr22 18733500 18738900 0 7475 chr22 18741600 18742200 0 36 chr22 18743400 18744600 0 23 chr22 18746100 18748500 0 49 chr22 18749700 18751500 0 37 chr22 18752700 18761700 0 51 chr22 18762900 18765300 0 51 chr22 18767100 18782400 0 43 chr22 18784500 18799200 0 47 chr22 18800400 18813600 0 43 chr22 18815100 18816900 0 34 chr22 18819600 18837900 0 50 chr22 18839100 18840300 0 32 chr22 18841500 18842100 0 32 chr22 18843300 18870000 0 4960 chr22 18871200 18908100 0 4960 chr22 18909300 18913200 0 4960 chr22 18914400 18916500 0 4960 chr22 18918300 18941700 0 73 chr22 18942900 18945000 0 123 chr22 18946200 18947700 0 123 chr22 19025700 19026900 0.0494 56 chr22 20162400 20163900 0.2691 94 chr22 20326500 20327700 0.0425 47 chr22 20331600 20332800 0.0864 55 chr22 20334000 20334300 0.0244 39 chr22 20338500 20347500 0 1137 chr22 20350200 20350500 0.0541 67 chr22 20352300 20353500 0.1668 47 chr22 20366100 20366700 0.0382 77 chr22 20371800 20372400 0.0924 73 chr22 20375700 20376300 0.0192 64 chr22 20679300 20679900 0.226 47 chr22 20683200 20684100 0.219 60 chr22 20689200 20689800 0.1145 67 chr22 20696400 20697000 0.0021 48 chr22 20708700 20709000 0.1947 51 chr22 21057600 21057900 0.2559 45 chr22 21112200 21122400 0 66 chr22 21123900 21128100 0 116 chr22 21129600 21151800 0 116 chr22 21153900 21158700 0 116 chr22 21160200 21163800 0 116 chr22 21165600 21176100 0 452 chr22 21177600 21216000 0 452 chr22 21219000 21226800 0 48 chr22 21228000 21229200 0 48 chr22 21230400 21233400 0 48 chr22 21234600 21248100 0 38 chr22 21249300 21294600 0 379 chr22 21295800 21327000 0 379 chr22 21330000 21336900 0 60 chr22 21338100 21349500 0 60 chr22 21350700 21355200 0 34 chr22 21356400 21357000 0 41 chr22 21360000 21360300 0.1039 40 chr22 21361500 21362100 0.1041 43 chr22 21364200 21365400 0 45 chr22 21367200 21376200 0 45 chr22 21379500 21380700 0 68 chr22 21381900 21402000 0 68 chr22 21403200 21405600 0.0394 75 chr22 21407700 21417000 0 67 chr22 21418200 21425100 0 75 chr22 21426600 21442800 0 78 chr22 21460800 21465000 0 50 chr22 21466200 21475800 0 50 chr22 21477900 21479400 0 45 chr22 21481800 21482100 0.001 46 chr22 21483300 21483900 0.001 46 chr22 21486600 21511500 0 81 chr22 21512700 21542100 0 81 chr22 21543300 21554700 0 78 chr22 21883500 21883800 0.4648 90 chr22 21955500 21956100 0 66 chr22 22221000 22221900 0.0379 67 chr22 22223400 22224000 0.0231 64 chr22 22278900 22279200 0.307 58 chr22 22281000 22281300 0.2814 61 chr22 22632600 22632900 0.3064 60 chr22 22636800 22637400 0.1377 20 chr22 22644300 22644900 0.1079 67 chr22 22650000 22650300 0.2507 33 chr22 22900200 22900500 0.0405 72 chr22 22905600 22905900 0.0704 66 chr22 23310900 23311200 0.1467 72 chr22 23344500 23344800 0.1897 42 chr22 23540100 23540700 0.2428 60 chr22 23601900 23602200 0.1783 63 chr22 23853900 23856300 0 134 chr22 23940000 23940300 0.0893 64 chr22 23941800 23942100 0.1364 36 chr22 23946600 23949300 0 25 chr22 23957100 23959200 0.0114 37 chr22 23961000 23969100 0 49 chr22 23972700 23980500 0 51 chr22 23982300 23984400 0 31 chr22 23989200 23990700 0.0392 30 chr22 23999400 23999700 0.0877 42 chr22 24000900 24001200 0.0329 49 chr22 24193500 24193800 0.0563 88 chr22 24251700 24252300 0.0376 54 chr22 24293700 24294300 0.0581 82 chr22 24671400 24672000 0.0085 71 chr22 25228200 25228500 0.2127 65 chr22 25266600 25267200 0.152 60 chr22 25309800 25310100 0.3228 67 chr22 25523700 25524000 0.1532 70 chr22 25613400 25613700 0.308 66 chr22 25615500 25615800 0.2402 54 chr22 26772300 26772900 0.3252 82 chr22 28194900 28195800 0 70 chr22 28212600 28213800 0 61 chr22 28663500 28669200 0 113 chr22 31026900 31027800 0.0972 49 chr22 31591800 31593900 0.1627 49 chr22 32145900 32146200 0.4876 36 chr22 32156400 32156700 0.1777 37 chr22 32295900 32298900 0.0306 67 chr22 32346600 32346900 0.2415 53 chr22 32931900 32932200 0.1505 95 chr22 34549800 34554600 0 78 chr22 34677600 34678500 0.02 53 chr22 34680900 34682400 0.1587 51 chr22 34779600 34779900 0.4564 45 chr22 36138000 36138900 0 69 chr22 36187200 36188100 0 77 chr22 37227000 37227300 0.2244 29 chr22 38229600 38230200 0.2375 66 chr22 38384400 38386200 0.165 88 chr22 38806500 38807700 0.135 82 chr22 39842700 39843000 0.2303 49 chr22 40501200 40501500 0.1344 25 chr22 40536300 40538400 0.0283 82 chr22 40744200 40746600 0 61 chr22 42123300 42125700 0 73 chr22 42129900 42130200 0.1422 67 chr22 42135600 42138000 0 79 chr22 42143700 42144000 0.0188 67 chr22 42501600 42505800 0 73 chr22 42513300 42513600 0.0705 59 chr22 42518100 42519300 0.2469 61 chr22 42555000 42559200 0 77 chr22 42575100 42575400 0.1676 69 chr22 42980700 42982500 0.1118 80 chr22 43281000 43281300 0.3349 26 chr22 43496700 43497000 0.4123 44 chr22 44113200 44113500 0.4956 98 chr22 44800800 44801100 0.0118 31 chr22 45327900 45328500 0.2558 136 chr22 46606200 46606500 0.1489 14 chr22 46631400 46632000 0.2235 73 chr22 46772100 46772400 0.0849 28 chr22 46859100 46860000 0.0712 57 chr22 47070600 47070900 0.4861 56 chr22 47732400 47732700 0.2424 94 chr22 48290400 48290700 0.0146 31 chr22 48985800 48991500 0 78 chr22 49265400 49266300 0.1012 73 chr22 49384800 49385100 0.0086 38 chr22 49672500 49672800 0.2866 43 chr22 49802400 49802700 0.368 62 chr22 50028900 50029500 0.2043 119 chr22 50643900 50644200 0.336 320 chr22 50685600 50685900 0.4341 18 chr22 50765100 50767200 0.0085 70 chr22 50769000 50769300 0.2535 65 chr22 50777400 50777700 0.1312 54 chr22 50782800 50783100 0.2594 59 chr22 50787300 50787600 0.0304 76 chr22 50788800 50789100 0.0304 76 chr22 50790600 50790900 0.0547 41 chr22 50792400 50793600 0.0324 81 chr22 50797800 50808600 0 304 chr3 10200 11100 0.1615 113 chr3 18600 18900 0.0784 25 chr3 134700 135600 0.0731 40 chr3 261900 262500 0.1039 172 chr3 483000 483300 0.1157 20 chr3 698100 698400 0.2009 92 chr3 760500 760800 0.3758 76 chr3 811800 813600 0.0307 84 chr3 876300 876600 0.0763 119 chr3 960900 961500 0.4311 43 chr3 1391100 1391700 0.0479 96 chr3 1392900 1393500 0.0479 96 chr3 1565400 1566000 0.0939 56 chr3 1596900 1597200 0.315 132 chr3 1638600 1638900 0.4588 57 chr3 1658100 1658700 0.011 169 chr3 1707300 1707600 0.1284 22 chr3 2007000 2008500 0 118 chr3 2454300 2454600 0.0133 54 chr3 3131700 3132600 0.0091 100 chr3 3671700 3672000 0.2514 77 chr3 3721500 3721800 0.1947 50 chr3 3723000 3723300 0.3374 67 chr3 3831600 3831900 0.2837 24 chr3 3895800 3896100 0.2501 67 chr3 3963300 3969000 0 86 chr3 4025400 4027800 0 99 chr3 4039200 4039500 0.2301 23 chr3 4254600 4257600 0.0669 72 chr3 4266600 4266900 0.1616 112 chr3 4917300 4922400 0 137 chr3 6320400 6320700 0.3049 73 chr3 6486900 6487200 0.111 78 chr3 6699600 6700200 0.1861 61 chr3 8335800 8336400 0.0154 71 chr3 8412000 8412300 0.4486 34 chr3 8612400 8612700 0.1351 37 chr3 8613900 8615400 0 109 chr3 8616900 8617500 0.0136 89 chr3 8655000 8655300 0.0952 28 chr3 8719800 8720100 0.24 89 chr3 8721300 8721900 0.24 89 chr3 8924400 8924700 0.182 32 chr3 10052700 10053300 0.131 107 chr3 10297800 10298100 0.0706 79 chr3 11487300 11488200 0.0274 23 chr3 11942700 11943300 0.2716 80 chr3 12028800 12033000 0.0227 107 chr3 14091600 14091900 0.2893 63 chr3 15188100 15189000 0.0389 116 chr3 15190500 15191100 0.0389 116 chr3 15592800 15593100 0.4873 28 chr3 16970400 16970700 0.1819 81 chr3 17097000 17097300 0.1059 103 chr3 17699100 17699400 0.1365 90 chr3 17703900 17705100 0.2455 74 chr3 17858700 17859300 0.1242 84 chr3 18326100 18326700 0.1455 103 chr3 18328800 18329100 0.0664 90 chr3 18518100 18519000 0.0792 83 chr3 18930900 18935400 0 77 chr3 18961200 18961500 0.0647 97 chr3 19009800 19010400 0.0079 71 chr3 19100700 19101300 0.102 72 chr3 19856100 19856400 0.1864 92 chr3 19857900 19858200 0.1864 92 chr3 20353800 20354400 0.105 78 chr3 21250500 21251100 0.0249 100 chr3 21278100 21278400 0.265 87 chr3 21416100 21416400 0.3119 42 chr3 21486000 21486300 0.1132 66 chr3 21490800 21491100 0.0748 59 chr3 21569100 21569400 0.3114 85 chr3 21983400 21988500 0 84 chr3 22050900 22056300 0 95 chr3 22100100 22100400 0.1616 62 chr3 22697400 22697700 0.4907 73 chr3 22803000 22804500 0.0111 84 chr3 22806600 22806900 0.0895 144 chr3 24090000 24094800 0 88 chr3 24282300 24282600 0.1494 52 chr3 26296200 26296500 0.1612 89 chr3 26385000 26389500 0 105 chr3 26398200 26403900 0 89 chr3 26495100 26495400 0.3218 92 chr3 26745300 26745600 0.2229 48 chr3 26884200 26884500 0.3538 83 chr3 27093000 27093600 0 82 chr3 27205200 27205800 0.1867 112 chr3 27817500 27818100 0.0684 90 chr3 28061700 28062000 0.2349 78 chr3 28063200 28063500 0.2349 78 chr3 28354500 28355100 0.198 57 chr3 28366200 28366500 0.0367 68 chr3 28414500 28419900 0 74 chr3 28493400 28494900 0 83 chr3 28851600 28851900 0.2945 147 chr3 29109000 29111400 0.0005 83 chr3 30364800 30365100 0.1699 134 chr3 30412800 30414300 0.035 91 chr3 31965300 31965600 0.3812 18 chr3 32279400 32280000 0.0847 102 chr3 33511800 33512700 0 93 chr3 34413300 34418400 0 100 chr3 34653000 34656600 0 91 chr3 35902200 35902800 0.2433 83 chr3 36066600 36066900 0.3308 46 chr3 36104700 36105300 0.2951 84 chr3 38081100 38081700 0.1864 78 chr3 38341800 38343000 0 67 chr3 38388900 38389500 0.3282 77 chr3 38406900 38407200 0.201 95 chr3 39228000 39228300 0.1376 91 chr3 39985200 39985800 0.1 82 chr3 40040400 40042200 0.1816 80 chr3 40157100 40157700 0.1844 66 chr3 40203900 40204200 0.006 351 chr3 40219800 40220100 0.2086 113 chr3 40239600 40240200 0.1 84 chr3 40903200 40903800 0.1698 78 chr3 40906200 40906500 0.4018 59 chr3 41689800 41690100 0.264 108 chr3 41776500 41779800 0.0026 134 chr3 42243300 42243600 0.2531 78 chr3 42282900 42283200 0.1898 85 chr3 42797100 42799200 0 60 chr3 42989700 42990000 0.295 44 chr3 43065600 43069200 0.0059 109 chr3 43486800 43487100 0.2352 85 chr3 43568700 43571100 0.1767 83 chr3 44750400 44751000 0.0447 55 chr3 45133500 45133800 0.3028 47 chr3 45726900 45727200 0.0744 30 chr3 46151400 46152000 0.0887 99 chr3 46495200 46495500 0.3215 77 chr3 46773000 46774500 0.0041 93 chr3 46783200 46788600 0 101 chr3 46801200 46801800 0.0069 63 chr3 47259600 47260200 0.2729 73 chr3 48055500 48057600 0.0415 92 chr3 48210900 48213000 0.0045 86 chr3 49456800 49457100 0.2502 37 chr3 50084700 50085000 0.3501 55 chr3 50887500 50887800 0.1505 63 chr3 50897700 50898000 0.1061 53 chr3 50973600 50973900 0.0895 73 chr3 50976900 50977200 0.2671 62 chr3 51204000 51204600 0.1295 76 chr3 51863400 51864900 0.0144 67 chr3 52675800 52676100 0.1508 32 chr3 53365500 53370600 0 99 chr3 53923800 53926200 0.1434 94 chr3 54394800 54399900 0 96 chr3 55046400 55049700 0 62 chr3 55137900 55138500 0.0188 92 chr3 55140000 55142100 0 50 chr3 56514000 56515500 0.0439 79 chr3 56543400 56543700 0.043 73 chr3 57028200 57028800 0.1478 76 chr3 57329400 57329700 0.2461 52 chr3 57747300 57747600 0.3045 50 chr3 58549200 58551000 0.1293 82 chr3 58817400 58818900 0.1562 104 chr3 58821900 58822200 0.3661 76 chr3 58843800 58844400 0.0513 125 chr3 58846800 58848000 0.0513 125 chr3 58854900 58855200 0.2609 76 chr3 58889700 58891200 0.0485 75 chr3 60098100 60098400 0.2452 51 chr3 61398900 61399800 0.0028 78 chr3 61672200 61672500 0.2102 76 chr3 62599500 62599800 0.0131 24 chr3 62847300 62850600 0.0021 141 chr3 63136800 63142200 0 141 chr3 63153300 63155700 0 97 chr3 63212100 63217500 0 112 chr3 63589800 63590700 0.0087 237 chr3 63737400 63737700 0.0895 83 chr3 64982100 64982400 0.4302 41 chr3 65510400 65514600 0.0188 113 chr3 65697300 65699400 0.0623 92 chr3 66063600 66063900 0.0622 32 chr3 66874200 66874800 0.0157 23 chr3 67445100 67445700 0.0714 53 chr3 67814400 67815600 0.08 119 chr3 68077200 68077500 0.1096 82 chr3 69437700 69438000 0.0638 43 chr3 70287000 70289700 0.1145 83 chr3 71435400 71436000 0.1199 186 chr3 74451900 74452200 0.3634 68 chr3 74454000 74454300 0.1467 83 chr3 74589300 74589600 0.1245 111 chr3 74703000 74703300 0.0619 128 chr3 74955600 74955900 0.0772 53 chr3 74970600 74970900 0.1122 45 chr3 75092100 75096000 0.0578 77 chr3 75120000 75120600 0.085 147 chr3 75121800 75122100 0.085 147 chr3 76730700 76731000 0.1813 17 chr3 77290500 77290800 0.3021 38 chr3 77763900 77769000 0 100 chr3 78582600 78583800 0.0264 28 chr3 78795900 78796500 0.0674 62 chr3 79129800 79134900 0 92 chr3 80441400 80442600 0.0523 70 chr3 80876400 80877300 0 82 chr3 80892900 80893500 0.0768 75 chr3 80894700 80896200 0.0768 75 chr3 81051600 81057000 0 110 chr3 81487800 81488100 0.2296 73 chr3 81720900 81721200 0.0618 44 chr3 82152900 82154100 0.0256 51 chr3 82334400 82334700 0.3552 65 chr3 82336200 82336500 0.3552 65 chr3 82338300 82339200 0.1141 74 chr3 82465200 82465500 0.1938 13 chr3 82866900 82867200 0.1967 70 chr3 83037900 83039400 0 100 chr3 83804100 83806200 0 75 chr3 85293300 85293900 0.2743 57 chr3 86018100 86019300 0.044 70 chr3 86860200 86860500 0.1175 60 chr3 87481500 87482100 0.1325 82 chr3 87844500 87844800 0.0908 89 chr3 88503600 88503900 0.3438 68 chr3 88508400 88508700 0.179 94 chr3 88872300 88872900 0.1663 92 chr3 89346900 89349600 0.0094 88 chr3 89460600 89466600 0 136 chr3 89610900 89611200 0.4693 35 chr3 89869200 89874000 0.0022 91 chr3 89961600 89962200 0.0181 109 chr3 89984700 89985000 0.3441 52 chr3 90156600 90156900 0.3752 93 chr3 90169800 90175200 0.0053 202 chr3 90303900 90304200 0.2483 49 chr3 90334500 90334800 0.2837 75 chr3 90336000 90339300 0 94 chr3 90406200 90407100 0.0956 105 chr3 90510000 90510300 0.4989 409 chr3 90514800 90515700 0 62 chr3 90525600 90526200 0.0064 70 chr3 90533700 90534000 0.4972 218 chr3 90559200 90559500 0.1323 55 chr3 90564000 90565200 0 45 chr3 90568800 90569400 0 40 chr3 90582600 90583200 0.1733 299 chr3 90585600 90587100 0.2994 168 chr3 90588300 90588600 0.273 66 chr3 90616200 90616800 0.4764 389 chr3 90668700 90687000 0.095 600 chr3 90688200 90711300 0.1068 218 chr3 90713700 90720600 0 348 chr3 90772500 90777600 0 256 chr3 90779400 90783900 0 460 chr3 90785700 90817500 0 460 chr3 90819000 90826200 0 324 chr3 90827700 90829800 0 324 chr3 90831000 90832200 0 324 chr3 90833400 90843300 0 324 chr3 90844500 90847500 0.1674 355 chr3 90849000 90861900 0 193 chr3 90863700 90881700 0 994 chr3 90882900 90885000 0 107 chr3 90886500 90887100 0 29 chr3 90889200 90889500 0.0944 772 chr3 90890700 90891900 0.0944 772 chr3 90894000 90895800 0 339 chr3 90897000 90898800 0 339 chr3 90900000 90903300 0 339 chr3 90904500 90917400 0 339 chr3 90918900 90929700 0 459 chr3 90931200 90941100 0 459 chr3 90942300 90948600 0 188 chr3 90949800 90950700 0.0087 191 chr3 90951900 90961800 0 494 chr3 90963300 90975300 0 494 chr3 90976500 91012200 0 637 chr3 91013400 91019400 0 232 chr3 91020600 91026900 0 331 chr3 91028400 91039200 0 287 chr3 91040400 91045200 0 287 chr3 91046700 91050900 0 403 chr3 91052400 91057200 0 403 chr3 91058700 91059000 0 403 chr3 91060500 91061700 0.0416 95 chr3 91063200 91063500 0.0416 95 chr3 91064700 91067700 0 383 chr3 91068900 91072200 0 383 chr3 91073400 91075200 0 383 chr3 91076700 91077000 0 415 chr3 91078200 91085700 0 415 chr3 91086900 91103700 0 415 chr3 91104900 91105800 0 415 chr3 91107000 91108800 0 78 chr3 91110300 91110600 0 78 chr3 91112400 91115400 0.0243 101 chr3 91118100 91122300 0 172 chr3 91123500 91125600 0 526 chr3 91126800 91136700 0 526 chr3 91138800 91149600 0 231 chr3 91150800 91152600 0 231 chr3 91154400 91155300 0.0195 356 chr3 91156500 91156800 0 156 chr3 91158900 91164900 0 420 chr3 91166100 91166400 0 420 chr3 91167600 91171800 0 87 chr3 91174200 91180500 0 136 chr3 91181700 91183500 0.1899 266 chr3 91184700 91197600 0 836 chr3 91198800 91201200 0 202 chr3 91202400 91208700 0 202 chr3 91210200 91210500 0 202 chr3 91212000 91212300 0 398 chr3 91213500 91220100 0 398 chr3 91221600 91221900 0.2328 30 chr3 91223400 91225800 0.023 38 chr3 91229100 91233900 0 115 chr3 91235700 91236600 0 81 chr3 91238100 91239600 0 374 chr3 91241100 91243200 0 374 chr3 91244700 91247400 0.0248 343 chr3 91248900 91249500 0.0016 56 chr3 91256400 91256700 0.0758 62 chr3 91260600 91261200 0 18 chr3 91262400 91264500 0.2464 68 chr3 91277700 91285800 0 210 chr3 91385100 91385700 0.0246 46 chr3 91392900 91393200 0.1413 61 chr3 91394400 91394700 0.2454 67 chr3 91543800 91713900 0 2208 chr3 91715100 92704800 0 2208 chr3 92706000 93026400 0 2208 chr3 93027900 93655500 0 1558 chr3 93705600 93713400 0 163 chr3 93717000 93717300 0.2699 17 chr3 93727800 93728100 0.4078 77 chr3 93789300 93791400 0.0115 83 chr3 94239000 94240500 0.271 84 chr3 94749000 94751100 0.1558 74 chr3 94850400 94850700 0.1895 73 chr3 95803500 95803800 0.2133 68 chr3 95805000 95805300 0.2133 68 chr3 96079800 96080100 0.3002 74 chr3 97599300 97600500 0.1935 85 chr3 97642200 97642500 0.2918 36 chr3 97906200 97907700 0.1516 84 chr3 98466300 98467800 0.0842 74 chr3 98835000 98835600 0.3452 44 chr3 98836800 98838600 0.1642 62 chr3 99273000 99274200 0.2275 86 chr3 99318600 99318900 0.0277 36 chr3 99363000 99363300 0.3046 103 chr3 99371100 99371400 0.21 63 chr3 100473300 100474200 0.1035 81 chr3 101439000 101440500 0.024 81 chr3 101694300 101694600 0.1036 61 chr3 101746800 101747100 0.1855 76 chr3 101749500 101750400 0.2185 56 chr3 101797500 101798100 0.0682 76 chr3 102495600 102495900 0.1516 57 chr3 103132500 103132800 0.3553 60 chr3 103220700 103226100 0 64 chr3 103233000 103236300 0 102 chr3 103556700 103562400 0 118 chr3 105297900 105298500 0.0742 38 chr3 105300900 105301200 0.4573 50 chr3 105587400 105592200 0 101 chr3 106073100 106073400 0.333 20 chr3 106110300 106111200 0.032 75 chr3 106665900 106666500 0.0646 106 chr3 106667700 106668000 0.0646 106 chr3 106669800 106670100 0.0646 106 chr3 106950600 106950900 0.0951 73 chr3 106976100 106981200 0.0067 91 chr3 107692800 107695500 0.0821 85 chr3 107886000 107889000 0.0324 133 chr3 108374700 108375000 0.1273 85 chr3 108575400 108575700 0.4477 75 chr3 108749400 108755400 0 112 chr3 109164000 109164600 0.3653 90 chr3 109200000 109205700 0 122 chr3 110117700 110120400 0 106 chr3 110442900 110444100 0.0056 76 chr3 110445600 110445900 0.0056 76 chr3 110634000 110635500 0.0342 81 chr3 110889900 110890200 0.0972 38 chr3 111019800 111024300 0.0127 83 chr3 111388200 111388500 0.4047 49 chr3 111491700 111492600 0.0979 81 chr3 111557100 111561900 0 84 chr3 111753300 111755400 0.1915 90 chr3 112162800 112163400 0.181 98 chr3 112183500 112184400 0 77 chr3 112729200 112729800 0.4097 86 chr3 113024400 113025000 0 90 chr3 113026200 113029200 0 90 chr3 113030400 113033400 0 90 chr3 114280200 114280500 0.1078 79 chr3 114281700 114282300 0.1078 79 chr3 114662400 114662700 0.2781 73 chr3 114747600 114747900 0.2771 16 chr3 115315200 115315500 0.1317 80 chr3 116205300 116205900 0.0591 94 chr3 116360400 116365800 0 95 chr3 116645400 116645700 0.0096 56 chr3 116986200 116986500 0.2677 76 chr3 117112200 117112500 0.3583 49 chr3 118914600 118915800 0.0214 384 chr3 118917900 118920000 0.0214 384 chr3 119001900 119003100 0.0697 77 chr3 119049900 119050200 0.1986 64 chr3 119108700 119109300 0.0837 115 chr3 120373500 120377700 0 83 chr3 120575100 120580500 0 91 chr3 121032600 121033500 0.0589 118 chr3 121088100 121089000 0.0712 87 chr3 121401600 121401900 0.355 42 chr3 121455000 121455600 0.2073 88 chr3 121933800 121934100 0.3336 72 chr3 121937100 121937400 0.0666 77 chr3 122042100 122044500 0.0079 103 chr3 122046900 122047200 0.1114 83 chr3 122134500 122134800 0.2949 66 chr3 122164200 122164500 0.2129 61 chr3 122670300 122670600 0.1885 65 chr3 122780100 122780400 0.349 41 chr3 123478800 123479100 0.2542 34 chr3 123975300 123975600 0.3509 66 chr3 123991200 123992400 0.1243 66 chr3 124109700 124110300 0.2977 34 chr3 124367100 124368000 0.0226 69 chr3 124789500 124790400 0 55 chr3 125171400 125172000 0.0808 47 chr3 125891400 125891700 0.3334 59 chr3 125938800 125939100 0.119 73 chr3 125941800 125942400 0.0197 114 chr3 125969100 125969400 0.0304 75 chr3 126324300 126326400 0.0034 76 chr3 126332700 126337200 0.0103 124 chr3 127434600 127434900 0.0205 102 chr3 128953800 128956200 0.0065 70 chr3 129088200 129090600 0 80 chr3 129362400 129363300 0.3987 71 chr3 130629000 130634100 0 95 chr3 130868400 130869300 0.3492 59 chr3 130910400 130912800 0.0661 61 chr3 131408400 131410800 0 97 chr3 131958900 131959200 0.4749 35 chr3 132374100 132375900 0.1201 85 chr3 132470100 132470700 0.0191 107 chr3 132763500 132763800 0.3745 63 chr3 132807300 132809700 0 79 chr3 132946200 132951900 0 83 chr3 133727400 133727700 0.1296 34 chr3 133785000 133786200 0.0023 53 chr3 134556000 134556300 0.159 77 chr3 134955000 134955600 0 36 chr3 135025500 135027000 0.154 75 chr3 135028500 135029100 0.154 75 chr3 135195600 135196200 0.2333 76 chr3 135254100 135254400 0.0387 90 chr3 135588300 135590400 0.026 102 chr3 135660300 135664500 0.0002 84 chr3 136227300 136227600 0.2087 82 chr3 136479600 136484100 0 82 chr3 136875600 136875900 0.3474 66 chr3 136963800 136969500 0 97 chr3 137043300 137043600 0.2604 66 chr3 137094000 137095800 0 84 chr3 137152500 137152800 0.1806 69 chr3 137353800 137354400 0.0016 83 chr3 137455200 137455500 0.007 84 chr3 137457000 137460600 0.007 84 chr3 137634000 137638800 0 83 chr3 138050700 138051000 0.4981 109 chr3 139068000 139068300 0.3536 57 chr3 139143900 139144200 0.0368 98 chr3 139335900 139336200 0.0362 61 chr3 139593600 139593900 0.1429 97 chr3 140490000 140490300 0.4378 114 chr3 140783700 140784000 0.1555 31 chr3 141665700 141666000 0.4752 15 chr3 141757500 141761700 0 97 chr3 142011000 142011300 0.0596 105 chr3 142393200 142393500 0.2477 59 chr3 143046600 143046900 0.236 56 chr3 143085900 143086200 0.2698 55 chr3 145253100 145253400 0.2421 62 chr3 145494600 145494900 0.4577 62 chr3 145822800 145823100 0.2276 73 chr3 145928700 145929600 0.0174 71 chr3 145930800 145932900 0.0859 128 chr3 146097300 146097600 0.2049 62 chr3 146732700 146735100 0.0033 214 chr3 147108600 147108900 0.3218 85 chr3 147727200 147727500 0.1788 38 chr3 148430100 148431300 0.1373 76 chr3 148563900 148564200 0.0246 61 chr3 148565700 148567500 0.0246 61 chr3 149829900 149830800 0.0023 61 chr3 149838900 149839500 0.0336 73 chr3 150493200 150493500 0.2986 36 chr3 150616200 150616500 0.0796 81 chr3 150819600 150822000 0.0012 94 chr3 151245600 151245900 0.3025 74 chr3 151887600 151887900 0.3013 60 chr3 151898400 151898700 0.1282 68 chr3 152594100 152595300 0.0473 74 chr3 153240300 153240600 0.1275 67 chr3 153510900 153511200 0.3162 98 chr3 153999000 153999300 0.0924 97 chr3 154911300 154914600 0 91 chr3 155119800 155123700 0.0161 91 chr3 155210100 155210400 0.1638 80 chr3 155471400 155471700 0.1555 73 chr3 155472900 155473200 0.1765 81 chr3 155474400 155474700 0.2504 49 chr3 155506500 155510700 0 78 chr3 155929500 155930100 0.241 72 chr3 156282600 156282900 0.2806 63 chr3 156881700 156882000 0.2435 82 chr3 157883400 157883700 0.3656 59 chr3 157901700 157902000 0.1973 88 chr3 158020500 158024700 0 112 chr3 158635500 158640300 0.0073 82 chr3 159056400 159056700 0.3599 50 chr3 159095400 159101100 0 110 chr3 160323000 160323300 0.2884 65 chr3 160324800 160325100 0.1685 76 chr3 160974600 160976400 0.2271 58 chr3 161002500 161004600 0.1135 70 chr3 161907600 161907900 0.0401 62 chr3 162318900 162319200 0.1153 31 chr3 162379500 162379800 0.2181 79 chr3 162382800 162383400 0.229 103 chr3 162407100 162408300 0.0007 65 chr3 162409500 162409800 0.0007 65 chr3 163005000 163005300 0.1719 50 chr3 163191900 163192200 0.4458 64 chr3 163237500 163242900 0 80 chr3 163634700 163636500 0.0391 83 chr3 164293800 164296200 0.0207 108 chr3 164633100 164633400 0.3184 101 chr3 164703600 164706300 0.0145 119 chr3 165317400 165317700 0.2046 88 chr3 165573600 165573900 0.0905 69 chr3 165576300 165576600 0.3287 88 chr3 165585900 165587400 0.1512 121 chr3 165589200 165589500 0.1674 63 chr3 166021200 166021500 0.3317 41 chr3 166228500 166230000 0.0928 79 chr3 166231800 166232100 0.0494 40 chr3 167017500 167018100 0.2109 25 chr3 167204400 167204700 0.2956 61 chr3 167277900 167278200 0.3655 54 chr3 167594700 167596200 0.2228 84 chr3 167802600 167802900 0.1959 69 chr3 168351600 168354900 0 86 chr3 168770400 168772200 0.1535 72 chr3 169483500 169483800 0.2448 56 chr3 169680000 169685400 0.0176 78 chr3 170401800 170402100 0.082 26 chr3 170805900 170806500 0.0894 546 chr3 170879100 170881500 0.0537 99 chr3 170927100 170927400 0.202 86 chr3 171630300 171630600 0.3597 51 chr3 174261300 174263100 0.0559 88 chr3 174484200 174484800 0.3384 70 chr3 174829800 174830400 0.137 75 chr3 175321500 175321800 0.222 80 chr3 175436700 175437600 0.0397 89 chr3 175782300 175782600 0.2201 73 chr3 175784400 175785600 0.2136 69 chr3 176827800 176828100 0.2027 99 chr3 176831400 176831700 0.1108 98 chr3 176925000 176925300 0.2587 86 chr3 177389100 177393900 0 96 chr3 177660000 177660300 0.3122 92 chr3 178720500 178720800 0.2911 67 chr3 178782000 178782300 0.064 73 chr3 178862400 178863000 0.1265 90 chr3 178864500 178865400 0.1265 90 chr3 178940400 178940700 0.3587 68 chr3 179119500 179119800 0.2857 91 chr3 179121300 179121900 0.2563 74 chr3 180375000 180375300 0.255 77 chr3 181134600 181134900 0.2216 53 chr3 181150500 181150800 0.3509 91 chr3 182428800 182430600 0.086 98 chr3 183174300 183174900 0.1633 83 chr3 183234900 183237900 0 89 chr3 183607800 183609600 0.0879 58 chr3 183738600 183740100 0 82 chr3 184753500 184754700 0.1754 31 chr3 185003400 185003700 0.2002 74 chr3 185230800 185231700 0 48 chr3 185562900 185563500 0.0663 83 chr3 185565300 185567400 0.0663 83 chr3 185569200 185569800 0.0152 77 chr3 185571000 185571300 0.0152 77 chr3 186864000 186867300 0 41 chr3 187108800 187109100 0.1874 47 chr3 187413300 187417800 0 111 chr3 187424700 187428600 0 64 chr3 187863600 187863900 0.2476 46 chr3 187866000 187868100 0.0104 106 chr3 187892700 187894800 0.0159 117 chr3 188544600 188545200 0.0565 30 chr3 189020700 189021000 0.1641 52 chr3 190287300 190287600 0.2128 56 chr3 191043300 191044500 0.0141 103 chr3 191863200 191863500 0.2387 53 chr3 192138300 192138600 0.043 27 chr3 192149400 192153900 0.0016 76 chr3 192739200 192743700 0.031 77 chr3 192960600 192960900 0.0112 103 chr3 192962700 192963600 0.0112 103 chr3 193888800 193889400 0.1459 86 chr3 194400600 194401200 0.0394 65 chr3 194663400 194663700 0.2229 34 chr3 195088500 195088800 0.2201 46 chr3 195091500 195093300 0.0518 84 chr3 195215100 195217500 0.0515 108 chr3 195478500 195488400 0.0398 242 chr3 195489900 195492300 0.0398 242 chr3 195495600 195504300 0.0202 242 chr3 195616200 195618900 0.109 155 chr3 195624000 195624900 0 139 chr3 195626100 195627000 0.0673 134 chr3 195631500 195631800 0.0409 100 chr3 195635100 195636900 0.0276 103 chr3 195639000 195640800 0.0507 112 chr3 195644400 195644700 0.0046 243 chr3 195650100 195650400 0.2865 122 chr3 195651600 195652200 0.1548 119 chr3 195658800 195659100 0.2807 112 chr3 195662400 195662700 0.1629 123 chr3 195667200 195667800 0.2635 82 chr3 195670200 195670500 0.3124 51 chr3 195681000 195681900 0 139 chr3 195713400 195713700 0.3956 160 chr3 195723600 195725700 0.0018 111 chr3 195776100 195777900 0.1591 102 chr3 195786900 195788100 0.148 60 chr3 195816000 195816300 0.1495 35 chr3 195824400 195824700 0.0633 77 chr3 195927900 195928500 0.003 78 chr3 195936900 195937200 0.041 96 chr3 195952800 195954000 0.0002 141 chr3 195967200 195968100 0 125 chr3 195981000 195981300 0.3603 120 chr3 195985800 195986400 0.0411 144 chr3 195989100 195989400 0.3314 108 chr3 196271700 196272000 0.2113 44 chr3 196761300 196761600 0.0092 67 chr3 196784400 196784700 0.1014 62 chr3 197030100 197030400 0.3693 65 chr3 197132700 197133000 0.2253 56 chr3 197436300 197438400 0.0399 81 chr3 197459400 197460000 0.3224 367 chr3 197622900 197625300 0.0517 139 chr3 197627400 197627700 0.1689 95 chr3 197631600 197631900 0.1802 65 chr3 197633100 197634000 0.1709 95 chr3 197635500 197635800 0.081 85 chr3 197642400 197642700 0.3803 57 chr3 197644200 197645100 0.1457 77 chr3 197649300 197650800 0.1866 125 chr3 197652900 197655600 0 150 chr3 197658300 197658600 0.2794 112 chr3 197662800 197663700 0.0122 137 chr3 197665200 197666100 0 137 chr3 197877000 197877300 0.0438 61 chr3 198003600 198005100 0 69 chr3 198099900 198104100 0.0506 56 chr3 198141600 198141900 0.0632 64 chr3 198145800 198147000 0.2599 64 chr3 198149400 198149700 0.2956 69 chr3 198152100 198152700 0.0949 75 chr3 198156000 198159900 0 78 chr3 198161100 198161700 0 78 chr3 198162900 198163200 0.1798 75 chr3 198164400 198165600 0.2447 75 chr3 198172200 198172500 0.0788 46 chr3 198175200 198189900 0 99 chr3 198191400 198235500 0 99 chr4 9900 10200 0.2781 50 chr4 11400 11700 0 152 chr4 12900 15000 0 152 chr4 17400 27300 0 222 chr4 28800 29100 0 222 chr4 30600 36300 0 169 chr4 38700 40800 0.0266 204 chr4 42300 44100 0.1303 154 chr4 46500 50400 0.0207 163 chr4 51900 60300 0 216 chr4 61800 68100 0 216 chr4 731700 732000 0.2435 25 chr4 736800 737100 0.4942 39 chr4 744900 747600 0 17 chr4 758700 759900 0 45 chr4 927300 927600 0.4274 40 chr4 1095900 1096500 0.4014 53 chr4 1145400 1145700 0.4971 33 chr4 1278900 1279200 0.1125 34 chr4 1397400 1398600 0.0603 231 chr4 1434300 1435800 0.006 1045 chr4 1441500 1442100 0 134 chr4 1520700 1521000 0.2427 29 chr4 1545300 1547100 0 47 chr4 1625100 1625400 0.3357 27 chr4 1707000 1707300 0.2036 89 chr4 1827300 1828500 0.1111 60 chr4 2430300 2430600 0.4865 36 chr4 2511300 2511600 0.0818 48 chr4 2808900 2809200 0.121 20 chr4 3227400 3227700 0.0368 55 chr4 3509400 3509700 0.0035 85 chr4 3537000 3538200 0.0804 50 chr4 3542400 3543000 0.0374 46 chr4 3610500 3610800 0.1545 34 chr4 3613500 3613800 0.1628 33 chr4 4020000 4020900 0.0537 29 chr4 4068600 4068900 0.0963 67 chr4 4954800 4955100 0.1563 79 chr4 4957200 4957800 0.1563 79 chr4 5272200 5273700 0.051 70 chr4 5316300 5317500 0.0001 1156 chr4 5439000 5439300 0.1996 73 chr4 5441700 5442300 0.0913 129 chr4 5763600 5764500 0.2216 66 chr4 5779500 5779800 0.102 65 chr4 6511500 6512100 0.4289 145 chr4 6579000 6579300 0.3907 132 chr4 6879900 6880200 0.2808 98 chr4 7090500 7090800 0.1894 50 chr4 7363500 7364100 0.0795 38 chr4 7386900 7387500 0.0186 40 chr4 7449000 7449300 0.2517 35 chr4 7835400 7835700 0.2975 54 chr4 7994100 7995000 0.0634 73 chr4 8620200 8637000 0 269 chr4 9084900 9085200 0.1985 60 chr4 9203700 9204000 0.0566 17 chr4 9211200 9211500 0 30 chr4 9213000 9273000 0 799 chr4 9322800 9369000 0 1454 chr4 9613800 9617700 0 36 chr4 10776900 10778400 0.2195 62 chr4 10827000 10827300 0.2107 76 chr4 11015400 11015700 0.2593 54 chr4 11016900 11017200 0.2593 54 chr4 11063400 11063700 0.1987 105 chr4 11064900 11065200 0.1987 105 chr4 11145000 11145300 0.3796 62 chr4 11148000 11148300 0.0246 60 chr4 11169600 11169900 0.0876 54 chr4 11238300 11238600 0.1526 62 chr4 11381400 11382600 0.1576 73 chr4 11560500 11560800 0.3806 99 chr4 11793600 11793900 0.1851 73 chr4 11797500 11797800 0.2903 91 chr4 12345300 12345600 0.1573 83 chr4 12509400 12510000 0.0685 68 chr4 12753300 12753600 0.1248 81 chr4 12906300 12908100 0 61 chr4 13131600 13132800 0.0683 63 chr4 13663200 13663500 0.2074 100 chr4 14010000 14013300 0.08 76 chr4 14486100 14486400 0.3465 75 chr4 14661900 14662500 0.255 60 chr4 14664000 14664300 0.255 60 chr4 14755200 14761200 0 98 chr4 15280200 15281700 0.1033 81 chr4 15283200 15284100 0.0631 85 chr4 15791700 15792300 0.0105 85 chr4 15841800 15847500 0 97 chr4 15867600 15867900 0.073 73 chr4 16392600 16392900 0.3021 79 chr4 16422300 16422600 0.2703 67 chr4 16942800 16949100 0 85 chr4 17459100 17459700 0.3945 60 chr4 17850000 17850300 0.2317 61 chr4 17940300 17940600 0.1593 148 chr4 18175500 18175800 0.0996 75 chr4 18177000 18177600 0.0996 75 chr4 18966000 18966300 0.2257 68 chr4 19008300 19008600 0.098 86 chr4 19077900 19083900 0 94 chr4 19168800 19169100 0.1763 75 chr4 19226100 19226400 0.332 10 chr4 19335300 19337100 0.0499 76 chr4 19520100 19520400 0.2492 27 chr4 19639800 19640100 0.0648 81 chr4 19949100 19950000 0.0251 81 chr4 19951200 19951800 0.0251 81 chr4 20518500 20518800 0.2677 24 chr4 20661000 20661300 0.1187 125 chr4 20669700 20670900 0.2886 91 chr4 21159300 21165300 0 122 chr4 21582000 21582300 0.3195 190 chr4 22107000 22107600 0.0922 80 chr4 22148700 22149900 0.2227 89 chr4 23099100 23099400 0.0688 57 chr4 23615100 23620800 0 104 chr4 23645100 23645400 0.1956 59 chr4 26166000 26167800 0.1502 91 chr4 26209500 26209800 0.424 89 chr4 26592600 26592900 0.4317 97 chr4 26736000 26736300 0.1996 34 chr4 26923500 26927700 0 116 chr4 27072000 27072300 0.1606 67 chr4 27376500 27381600 0.0002 88 chr4 29531700 29532000 0.2088 46 chr4 30278100 30278700 0.3794 61 chr4 30886200 30886500 0.2307 91 chr4 31491300 31491600 0.2074 51 chr4 31818600 31818900 0.4431 27 chr4 31967100 31967700 0.1382 53 chr4 32126700 32127000 0.2877 53 chr4 32360700 32361600 0.0387 95 chr4 32364000 32364300 0.0387 95 chr4 32517000 32518200 0.1578 78 chr4 34654800 34655100 0.1774 105 chr4 35323500 35323800 0.3191 69 chr4 35606400 35606700 0.2681 52 chr4 36468300 36468600 0.0354 19 chr4 36841200 36841500 0.245 22 chr4 36906600 36906900 0.3776 63 chr4 37103400 37105200 0.0197 94 chr4 37330800 37331400 0.3312 59 chr4 37558800 37559400 0.1653 47 chr4 37585200 37585500 0.4557 43 chr4 37884000 37884300 0.37 20 chr4 39001800 39002100 0.233 26 chr4 39297000 39297600 0.2686 58 chr4 40764900 40765500 0.1398 71 chr4 40766700 40767000 0.3363 72 chr4 41237100 41237400 0.314 57 chr4 42982200 42983400 0.1021 69 chr4 43185300 43185900 0.2291 28 chr4 43213500 43214100 0.1119 45 chr4 43287300 43289400 0 116 chr4 43415100 43415700 0.2555 92 chr4 43817700 43818300 0.0464 61 chr4 44076300 44076900 0.3027 52 chr4 44079300 44079900 0.2373 47 chr4 44505300 44505600 0.0021 24 chr4 44507400 44507700 0.3305 13 chr4 44975100 44976900 0.0255 73 chr4 45023400 45024000 0 17 chr4 45511500 45511800 0.2171 77 chr4 45824400 45825000 0.2008 71 chr4 46053900 46056000 0 87 chr4 46795200 46797000 0.0185 70 chr4 48052200 48057600 0 95 chr4 48363000 48364800 0.03 55 chr4 48414600 48417600 0 74 chr4 48735000 48735900 0.1055 88 chr4 48918900 48919200 0.2376 79 chr4 49091100 49156800 0.001 43802 chr4 49159200 49159500 0.3246 149 chr4 49161900 49162200 0.2231 94 chr4 49164600 49164900 0.1845 67 chr4 49180500 49182000 0.1185 144 chr4 49183200 49183500 0.1185 144 chr4 49184700 49186200 0.1185 144 chr4 49189200 49189500 0.2207 118 chr4 49203000 49203300 0.1695 190 chr4 49230600 49230900 0.3408 185 chr4 49244100 49244400 0.1178 137 chr4 49246500 49246800 0.0829 188 chr4 49248300 49252500 0.0829 188 chr4 49257000 49257300 0.1238 161 chr4 49259100 49260600 0.1238 161 chr4 49263300 49265100 0.001 262 chr4 49266900 49269900 0.001 262 chr4 49273200 49286700 0 315 chr4 49290000 49292700 0.0474 222 chr4 49295400 49295700 0.2801 65 chr4 49297500 49299000 0.2199 154 chr4 49300500 49300800 0 304 chr4 49302900 49306500 0 304 chr4 49309200 49312200 0 178 chr4 49316700 49318800 0.0056 306 chr4 49320000 49320300 0.0056 306 chr4 49323900 49337100 0 230 chr4 49488000 49488300 0.2707 67 chr4 49492800 49493100 0.1612 99 chr4 49509300 49509900 0.1738 96 chr4 49520400 49524000 0.0637 144 chr4 49527300 49528200 0.0268 106 chr4 49529400 49531500 0.1157 195 chr4 49533900 49534200 0.2821 101 chr4 49536600 49538100 0.0278 143 chr4 49540800 49541100 0.0278 143 chr4 49544400 49545000 0.0278 143 chr4 49546200 49546800 0.0278 143 chr4 49551300 49551600 0.3241 161 chr4 49563300 49564800 0.2924 108 chr4 49571700 49572000 0.1389 66 chr4 49582500 49583100 0.0197 138 chr4 49589100 49589400 0.2993 87 chr4 49593000 49598400 0 164 chr4 49601400 49601700 0.2025 34 chr4 49604700 49605000 0.2034 38 chr4 49610400 49611000 0.2757 123 chr4 49612500 49612800 0.2757 123 chr4 49615200 49615500 0.2757 123 chr4 49617300 49617600 0.3097 128 chr4 49628400 49628700 0.156 176 chr4 49631100 49654200 0.0631 9574 chr4 49655700 49658100 0.2271 2152 chr4 49708200 49718700 0 21389 chr4 49720500 49730700 0 889 chr4 49732200 49732500 0.0265 285 chr4 49733700 49753200 0 2664 chr4 49754400 49920000 0 2664 chr4 49921500 50156100 0 2664 chr4 50157600 50196900 0 252 chr4 50200800 50670300 0 3717 chr4 50671500 50829000 0 9189 chr4 50830500 51028500 0 9189 chr4 51029700 51047400 0 950 chr4 51048600 51123600 0 2549 chr4 51124800 51141600 0 916 chr4 51143400 51187500 0 872 chr4 51188700 51368700 0 872 chr4 51369900 51396900 0 872 chr4 51398400 51405300 0 184 chr4 51406500 51454200 0 3549 chr4 51455400 51520500 0 3549 chr4 51521700 51627900 0 3549 chr4 51629100 51743400 0 928 chr4 51793800 51814500 0 450 chr4 52219800 52220100 0.1692 40 chr4 52539000 52544100 0.01 108 chr4 52816500 52822500 0.0025 115 chr4 53567100 53567400 0.1056 91 chr4 53569200 53569500 0.2214 100 chr4 53726400 53727000 0.0328 57 chr4 53737500 53738100 0.0118 56 chr4 53882700 53883000 0.2611 95 chr4 54922500 54923100 0.1869 65 chr4 55058400 55058700 0.1252 75 chr4 55620000 55625100 0 89 chr4 55847100 55847400 0.1322 85 chr4 56248800 56249100 0.2809 47 chr4 56366700 56367000 0.3454 79 chr4 57562500 57567900 0.0306 103 chr4 57644100 57644700 0.1123 81 chr4 57790500 57790800 0.205 74 chr4 57856200 57856500 0.2319 65 chr4 57869100 57869400 0.347 14 chr4 58021200 58022100 0.1089 83 chr4 58229400 58229700 0.1209 58 chr4 58576800 58577700 0.0011 71 chr4 58778100 58778400 0.2305 72 chr4 59079000 59084700 0 87 chr4 59184300 59184600 0.1167 46 chr4 59301600 59301900 0.21 75 chr4 59304300 59304600 0.2236 67 chr4 59519100 59519400 0.1063 35 chr4 59720700 59721000 0.1531 71 chr4 60104700 60105600 0 88 chr4 60122400 60122700 0.005 190 chr4 60423600 60423900 0.252 96 chr4 60591900 60592200 0.1801 64 chr4 60703500 60703800 0.1548 23 chr4 60833700 60835200 0.1987 123 chr4 61367700 61368000 0.186 77 chr4 61643700 61644000 0.4732 54 chr4 61939800 61945500 0 89 chr4 62604600 62606100 0.2065 90 chr4 62607600 62607900 0.4291 76 chr4 62727000 62731800 0.0073 96 chr4 63328800 63329100 0.093 13 chr4 63534600 63534900 0.166 86 chr4 63536400 63536700 0.166 86 chr4 63576900 63577200 0.3515 30 chr4 63654300 63654600 0.1464 66 chr4 63918000 63918300 0.1746 40 chr4 64237500 64237800 0.1534 70 chr4 64666500 64666800 0.1647 23 chr4 64841100 64842000 0 71 chr4 64860900 64863000 0 82 chr4 64900200 64900800 0.1098 92 chr4 65053800 65054100 0.4081 68 chr4 65180400 65180700 0.079 55 chr4 65289300 65289600 0.2466 60 chr4 65293200 65293500 0.2466 60 chr4 65994900 65995800 0.2327 57 chr4 66711900 66712200 0.4857 62 chr4 67178400 67178700 0.0438 62 chr4 67179900 67180800 0.0438 62 chr4 67182000 67182900 0.0413 72 chr4 67398600 67399500 0.0077 34 chr4 67888200 67889100 0 77 chr4 67967700 67968900 0.1244 109 chr4 67970400 67971300 0.0245 88 chr4 68094000 68094300 0.1145 29 chr4 68171100 68171400 0.4629 30 chr4 68198100 68204700 0 58 chr4 68511000 68513100 0 72 chr4 68514300 68514600 0 72 chr4 68560500 68560800 0.2225 20 chr4 69232200 69232800 0.391 53 chr4 69270300 69270900 0.0061 56 chr4 69368100 69368400 0.1465 47 chr4 69379200 69379800 0.0825 53 chr4 69666900 69667500 0.2255 87 chr4 70329000 70334100 0 92 chr4 71056200 71056500 0.1389 67 chr4 71103900 71106000 0.0188 90 chr4 71114700 71115000 0.3155 53 chr4 71422200 71422500 0.2376 80 chr4 72129300 72129900 0.0412 67 chr4 72400500 72400800 0.241 65 chr4 73554300 73554600 0.2823 104 chr4 74248500 74248800 0.2057 69 chr4 74562900 74563200 0.4054 36 chr4 74717700 74723700 0 80 chr4 75128100 75128700 0.1795 78 chr4 75132000 75132600 0.179 98 chr4 75270600 75270900 0 39 chr4 75272400 75272700 0 39 chr4 75273900 75275100 0 39 chr4 75406200 75406500 0.2535 66 chr4 75444300 75446400 0.0304 92 chr4 76828500 76829700 0 66 chr4 76916100 76918800 0.0241 120 chr4 77514300 77514600 0.1331 88 chr4 77685600 77685900 0.2256 72 chr4 78106200 78111600 0 88 chr4 78306300 78306600 0.1893 32 chr4 78348000 78354000 0 90 chr4 79221300 79221900 0.1587 89 chr4 79269000 79271400 0 90 chr4 79284600 79284900 0.2386 37 chr4 79556400 79556700 0.1338 45 chr4 79704900 79710300 0 91 chr4 79938000 79943700 0 113 chr4 79967400 79972800 0 103 chr4 80381400 80381700 0 18 chr4 80691000 80691300 0.195 37 chr4 80890500 80890800 0.4367 115 chr4 81536700 81537300 0.2199 71 chr4 81594000 81594300 0.3575 116 chr4 82008300 82010100 0.0047 67 chr4 83184600 83186100 0.1103 82 chr4 83649600 83649900 0.1854 25 chr4 83953800 83954700 0.1521 83 chr4 84075000 84075300 0.0488 111 chr4 84076800 84078300 0.0488 111 chr4 84130500 84131400 0.0627 81 chr4 84299400 84299700 0.2986 66 chr4 84303000 84303300 0.3856 84 chr4 84759600 84761100 0.3105 109 chr4 85891200 85893600 0 69 chr4 86137500 86138700 0.0054 94 chr4 86251500 86254500 0.0085 92 chr4 86637600 86637900 0.2425 72 chr4 86865300 86865900 0.2133 57 chr4 86868600 86868900 0.451 74 chr4 86996400 86996700 0.2884 79 chr4 87347100 87353100 0 84 chr4 87563100 87565200 0 87 chr4 87711000 87711300 0.2268 52 chr4 87714000 87715500 0.0475 76 chr4 87796200 87797400 0.0861 80 chr4 88116600 88116900 0.247 31 chr4 88161300 88161900 0.0066 97 chr4 88551300 88551600 0.1953 78 chr4 88895400 88896000 0.2531 78 chr4 90154500 90154800 0.1176 79 chr4 90675600 90681600 0 90 chr4 91137300 91138800 0.0605 110 chr4 91239300 91241100 0 33 chr4 91787100 91789200 0.149 94 chr4 91790400 91790700 0.2279 96 chr4 91978500 91983900 0 97 chr4 92133000 92133300 0.4841 130 chr4 92955000 92955300 0.1761 98 chr4 93593400 93593700 0.3237 57 chr4 93609000 93613800 0 100 chr4 93638400 93644400 0 72 chr4 93682200 93682500 0.2997 72 chr4 93884100 93884400 0.0713 84 chr4 94794900 94795200 0.1894 98 chr4 94836900 94839300 0.1464 71 chr4 95173200 95173500 0.1798 81 chr4 95916000 95918700 0.1607 101 chr4 95920200 95920500 0.2176 76 chr4 96402600 96402900 0.1237 75 chr4 96797100 96797700 0.1224 77 chr4 96869400 96871200 0.1613 105 chr4 97638600 97638900 0.1789 56 chr4 97669500 97669800 0.0694 33 chr4 97780200 97780500 0.0035 59 chr4 97798500 97799100 0.0266 70 chr4 98320800 98323800 0.1043 73 chr4 98591400 98598000 0.0008 126 chr4 98880300 98880600 0.0172 48 chr4 99149100 99149400 0.383 24 chr4 99769200 99769500 0.3091 53 chr4 100001100 100005300 0 84 chr4 100046700 100048200 0.0947 88 chr4 100677300 100677600 0.1336 49 chr4 100718100 100719000 0.1168 76 chr4 101406600 101407200 0.0844 65 chr4 101749500 101750100 0.0212 25 chr4 101866800 101867100 0.1737 65 chr4 102044400 102045000 0.0486 103 chr4 102205200 102210300 0.0078 88 chr4 102221100 102221400 0.0709 45 chr4 102409500 102409800 0.4324 29 chr4 102463800 102464100 0.1842 45 chr4 102951900 102954300 0 81 chr4 103688400 103688700 0.1973 85 chr4 103817100 103818300 0.2059 39 chr4 104442300 104442600 0.202 106 chr4 104688600 104692200 0.0812 91 chr4 104792400 104792700 0.1034 72 chr4 104803200 104804700 0.0917 49 chr4 105307500 105308700 0.0148 73 chr4 105340200 105340500 0.2954 69 chr4 105986700 105987000 0.1153 70 chr4 106121100 106121400 0.3648 76 chr4 106218600 106218900 0.2072 69 chr4 106571700 106576800 0 108 chr4 106638600 106639800 0.0341 85 chr4 106937100 106938300 0.2497 78 chr4 107082900 107083500 0.021 106 chr4 107206800 107210400 0 82 chr4 107222700 107223300 0.1654 35 chr4 107307600 107308500 0.2868 46 chr4 107355600 107357100 0 77 chr4 108410100 108410400 0.1102 90 chr4 109596000 109596300 0.0292 102 chr4 110407200 110409000 0.0164 82 chr4 110462100 110462400 0.1324 32 chr4 110688000 110688300 0.3275 58 chr4 110690700 110691000 0.121 46 chr4 110757900 110758800 0.0798 63 chr4 110871600 110871900 0.2555 65 chr4 110873400 110874300 0.1828 65 chr4 111339600 111339900 0.337 71 chr4 111341400 111342600 0.0978 59 chr4 111459000 111460500 0.1175 81 chr4 111895800 111901500 0 91 chr4 111965700 111966000 0.0945 69 chr4 112092000 112092300 0.2051 67 chr4 113064900 113065200 0.09 22 chr4 113489700 113491500 0.2235 76 chr4 113854200 113854500 0.2331 133 chr4 113930700 113931000 0.2717 73 chr4 115009800 115010100 0.2131 39 chr4 116204100 116206200 0.0315 66 chr4 116407800 116408100 0.199 65 chr4 116686500 116686800 0.1493 75 chr4 116775300 116775600 0.1555 119 chr4 117924600 117924900 0.2564 82 chr4 118066200 118066500 0 17 chr4 118162800 118163100 0.4349 77 chr4 118427100 118427400 0.1379 48 chr4 118602600 118602900 0.3318 57 chr4 118608600 118609200 0.0108 59 chr4 118614300 118614900 0.1964 61 chr4 118616100 118616400 0.1846 81 chr4 118618800 118619100 0.2282 66 chr4 118621800 118624500 0.0002 84 chr4 118647300 118647600 0.2587 71 chr4 118652700 118653300 0.1754 66 chr4 118654800 118655100 0.1754 66 chr4 118662600 118662900 0.0507 72 chr4 118689600 118689900 0.4952 121 chr4 119063400 119063700 0.4147 55 chr4 119077800 119078100 0.1186 62 chr4 119274600 119279100 0.0106 75 chr4 119342700 119343300 0.0482 77 chr4 119414400 119416500 0.0644 74 chr4 119417700 119418900 0 58 chr4 119421000 119421600 0.0195 78 chr4 119424000 119424300 0.0195 78 chr4 119425500 119426100 0.0195 78 chr4 119428500 119430000 0.0195 78 chr4 119431200 119431800 0.0195 78 chr4 119435400 119435700 0.303 57 chr4 119457600 119457900 0.2121 74 chr4 119886900 119887200 0.236 77 chr4 119949000 119954400 0 111 chr4 120128100 120128400 0.2208 74 chr4 120255300 120255600 0.3391 63 chr4 120743400 120743700 0.1407 83 chr4 120744900 120745800 0.2316 75 chr4 121128900 121129200 0.2897 69 chr4 121310700 121311000 0.1227 61 chr4 122112900 122113500 0.2885 92 chr4 122115300 122115600 0.3389 93 chr4 122332800 122333400 0.0359 63 chr4 122497800 122498100 0.2823 65 chr4 122652900 122656800 0 83 chr4 123000600 123001200 0.1228 54 chr4 123723000 123723300 0.2151 100 chr4 124022700 124023900 0.0008 65 chr4 124152900 124155000 0 98 chr4 124232100 124232400 0.2423 64 chr4 124406100 124407900 0.122 90 chr4 125257500 125257800 0.2293 83 chr4 126928800 126933300 0.0894 103 chr4 127022400 127026300 0.0136 94 chr4 127064400 127064700 0.3237 79 chr4 127590300 127590600 0.1887 91 chr4 127591800 127592100 0.1887 91 chr4 127593900 127594200 0.2128 80 chr4 127652400 127652700 0.1134 103 chr4 127863000 127863300 0.1891 90 chr4 128214600 128219700 0 80 chr4 128647500 128647800 0.1174 74 chr4 129295500 129298200 0 80 chr4 129855000 129855600 0.2029 80 chr4 129878700 129879000 0.2256 80 chr4 129964500 129964800 0.2581 77 chr4 130016400 130019700 0.0018 79 chr4 130425000 130425300 0.175 201 chr4 131201400 131202300 0 64 chr4 131724000 131724600 0.0596 91 chr4 131726400 131726700 0.0438 101 chr4 131731500 131731800 0.4342 70 chr4 131733900 131742000 0 211 chr4 131744100 131749200 0 298 chr4 131751000 131762400 0 298 chr4 131763600 131764200 0 298 chr4 131890200 131890500 0.402 46 chr4 132632400 132633000 0.4682 64 chr4 132635700 132636000 0.1058 53 chr4 132898500 132898800 0.2554 25 chr4 132945300 132946500 0.2199 82 chr4 132948000 132950100 0.0342 82 chr4 133735800 133736100 0.1904 78 chr4 133786800 133787700 0.0458 74 chr4 134209500 134209800 0.1642 51 chr4 134590200 134590800 0 20 chr4 135079800 135085200 0.0008 75 chr4 135179700 135180000 0.1925 58 chr4 135451800 135452700 0.0089 67 chr4 136293600 136299600 0 100 chr4 137167500 137167800 0.4015 80 chr4 137497500 137499300 0.0793 88 chr4 137501700 137502000 0.0793 88 chr4 137843700 137844000 0.3399 39 chr4 138547800 138552300 0 87 chr4 138854700 138855000 0.2474 69 chr4 138881700 138882000 0.2095 68 chr4 139428600 139430100 0.1132 92 chr4 139944600 139944900 0.199 73 chr4 140318400 140318700 0.1328 70 chr4 140415600 140417700 0.0857 107 chr4 140779800 140780400 0.0075 80 chr4 140895900 140896500 0.0105 67 chr4 140956800 140957100 0.3054 58 chr4 141068700 141069600 0.1315 116 chr4 141182100 141183000 0.0018 93 chr4 141877800 141879000 0.1222 62 chr4 141882000 141882300 0.2811 67 chr4 142137300 142137600 0.1079 38 chr4 142525500 142525800 0.0483 48 chr4 142624800 142625100 0.2853 77 chr4 143100600 143106000 0 74 chr4 143809800 143811300 0.0115 74 chr4 143877900 143878200 0.2561 64 chr4 143884200 143889000 0.0092 61 chr4 143892900 143893200 0.3023 39 chr4 143998500 143998800 0.2594 81 chr4 144126600 144126900 0.1542 35 chr4 144128400 144128700 0.0479 15 chr4 144748200 144748500 0.1056 65 chr4 144810300 144810900 0.0301 104 chr4 145370700 145371000 0.1312 31 chr4 145372200 145374000 0 71 chr4 146351700 146355000 0.1103 75 chr4 146619000 146622000 0.0683 100 chr4 146666400 146667000 0.1273 94 chr4 147358200 147358500 0.3922 24 chr4 147452100 147453300 0.0456 59 chr4 147783900 147784200 0.0162 216 chr4 147905400 147905700 0.0643 35 chr4 148322400 148322700 0.3993 71 chr4 149130300 149130600 0.1597 92 chr4 149817000 149817300 0.2803 96 chr4 149853000 149853600 0.2632 74 chr4 149917800 149918400 0.168 107 chr4 150030000 150030300 0.2575 30 chr4 150291300 150291600 0.023 83 chr4 150638700 150639000 0.0428 92 chr4 150659100 150660900 0 75 chr4 151391400 151391700 0.3133 72 chr4 151419600 151420200 0.001 60 chr4 155282100 155285700 0 95 chr4 155538600 155538900 0 11 chr4 156048600 156049800 0.0017 105 chr4 156285000 156285300 0.1407 72 chr4 156304800 156305400 0.0154 98 chr4 156371100 156371700 0.0072 85 chr4 157635900 157636200 0.116 56 chr4 158084400 158085000 0.0188 78 chr4 158086500 158086800 0.1073 93 chr4 158088600 158088900 0.208 81 chr4 158433000 158433300 0.106 25 chr4 158436000 158436300 0.1601 18 chr4 158473500 158474700 0 49 chr4 158476500 158476800 0.366 52 chr4 159806100 159806700 0.2124 99 chr4 160476600 160476900 0.1946 75 chr4 160575600 160575900 0.2249 80 chr4 160578900 160579200 0.3631 58 chr4 160659000 160659600 0.012 82 chr4 161618100 161618400 0.1007 76 chr4 161636700 161638800 0.0261 79 chr4 161974500 161974800 0.1004 79 chr4 162466500 162467100 0.152 70 chr4 163209600 163210800 0.1935 110 chr4 163212000 163212300 0.2022 122 chr4 163634700 163635300 0.0843 63 chr4 163737600 163737900 0.2428 49 chr4 163824600 163824900 0.2087 47 chr4 163980000 163980300 0.1311 74 chr4 164102100 164104800 0.0478 66 chr4 164106300 164106600 0.0478 66 chr4 164143200 164143500 0.3154 82 chr4 164144700 164146200 0.1484 84 chr4 164242800 164243400 0.3046 62 chr4 164245800 164247300 0.3423 61 chr4 164352000 164355300 0 91 chr4 164470200 164470500 0.1398 92 chr4 164554500 164557500 0.0415 72 chr4 164915700 164916000 0.1404 49 chr4 165958200 165958500 0.1497 88 chr4 166448100 166449300 0.0036 87 chr4 166464600 166465800 0.1251 60 chr4 166468200 166468800 0.1263 92 chr4 166570500 166575900 0 93 chr4 166579800 166580700 0.0742 593 chr4 166755900 166761900 0 99 chr4 167276400 167276700 0.385 72 chr4 167347800 167348400 0.1468 54 chr4 168155700 168156000 0.0642 273 chr4 168444000 168447000 0.0227 89 chr4 168703500 168703800 0.3594 78 chr4 169515600 169521300 0 86 chr4 169793100 169793400 0.2198 54 chr4 169878900 169879200 0.2068 48 chr4 170255700 170256300 0.1693 51 chr4 170433900 170434200 0.286 68 chr4 170436000 170436600 0.0916 69 chr4 170463900 170464200 0.2649 21 chr4 171093900 171094200 0.2003 126 chr4 173483700 173484000 0.2593 14 chr4 173867400 173867700 0.0509 40 chr4 174780000 174781500 0.1582 85 chr4 174858900 174859800 0.0107 64 chr4 175023000 175025100 0.1491 75 chr4 175206300 175208100 0.0722 83 chr4 175637100 175637700 0.0629 258 chr4 175812300 175812600 0.4147 86 chr4 176694900 176695200 0.308 76 chr4 177845700 177846000 0.1177 43 chr4 177847200 177847500 0.3451 83 chr4 177999900 178000200 0.1479 72 chr4 178017900 178018200 0.368 52 chr4 179642100 179642400 0.2336 68 chr4 180128400 180129300 0.0816 97 chr4 180823500 180823800 0.3972 24 chr4 180944100 180945300 0.052 44 chr4 180955800 180957000 0 68 chr4 181239300 181241700 0 550 chr4 181409400 181413900 0.0672 86 chr4 181774200 181774800 0.0017 84 chr4 182358600 182358900 0.415 69 chr4 182360100 182360400 0.1711 56 chr4 182780400 182780700 0.1285 69 chr4 182781900 182782800 0.1285 69 chr4 182832000 182834400 0.0213 42 chr4 183277500 183277800 0.1859 74 chr4 183336900 183337200 0 35 chr4 183382500 183382800 0.2982 18 chr4 183640200 183640800 0.0011 58 chr4 183735000 183735300 0 22 chr4 183736500 183737400 0.1183 76 chr4 183852000 183852300 0.3248 103 chr4 184140600 184140900 0.0896 67 chr4 184210200 184210500 0.1898 92 chr4 184213800 184214100 0.175 77 chr4 184858200 184858800 0.2965 48 chr4 184966800 184967700 0.1565 48 chr4 185796600 185796900 0.214 43 chr4 185827200 185827800 0.4625 318 chr4 186110400 186111300 0 87 chr4 186112500 186112800 0 87 chr4 186114000 186115800 0 87 chr4 186371400 186372000 0.0095 74 chr4 186477300 186477600 0.3459 35 chr4 186546900 186547200 0.3898 65 chr4 186841800 186842100 0.3554 63 chr4 186959700 186963600 0.2512 51 chr4 186965100 186965400 0.3636 55 chr4 186966600 186966900 0.4572 38 chr4 186969300 186969600 0.4742 51 chr4 186970800 186972900 0.2935 34 chr4 187053000 187053300 0.2686 91 chr4 187066800 187067100 0.2551 52 chr4 187304700 187305000 0 42 chr4 187948500 187949700 0 73 chr4 187955100 187956300 0 66 chr4 188151900 188154600 0.0681 21 chr4 188197200 188197500 0.3788 18 chr4 188445000 188448900 0.0065 65 chr4 188504400 188504700 0.2662 26 chr4 188558700 188560800 0.0947 97 chr4 188740500 188741700 0.0433 58 chr4 188974800 188975100 0.3393 43 chr4 189011400 189011700 0.4976 38 chr4 189036000 189036300 0.1786 176 chr4 189048600 189048900 0.2906 16 chr4 189137100 189143100 0 72 chr4 189155400 189155700 0.1257 53 chr4 189233100 189234300 0.4316 52 chr4 189296700 189297000 0.2666 67 chr4 189307500 189309300 0.2123 76 chr4 189314400 189315000 0.0744 105 chr4 189332700 189333000 0 21 chr4 189400200 189400500 0.2065 106 chr4 189460800 189461400 0.0254 70 chr4 189491400 189491700 0.1042 130 chr4 189630000 189630300 0.2785 70 chr4 189645600 189646500 0.3403 67 chr4 189651600 189652200 0.1493 99 chr4 189669300 189676500 0 43 chr4 189678300 189678600 0 42 chr4 189680100 189685500 0 42 chr4 189688200 189689400 0 60 chr4 189690600 189702900 0 60 chr4 189798300 189798600 0.2476 44 chr4 189810600 189810900 0.3499 67 chr4 189835800 189837300 0.1925 1488 chr4 189846300 189847200 0.3817 246 chr4 190021800 190022700 0.0161 567 chr4 190025100 190027500 0.0161 567 chr4 190028700 190032000 0.2168 61 chr4 190038000 190038600 0.0262 61 chr4 190043100 190043400 0.205 41 chr4 190045200 190045500 0.2451 79 chr4 190047900 190049400 0.2451 79 chr4 190052400 190052700 0.3404 64 chr4 190053900 190054500 0 66 chr4 190055700 190056300 0 66 chr4 190058700 190059000 0.2246 75 chr4 190060500 190061400 0.1497 78 chr4 190065300 190106100 0 815 chr4 190113300 190114800 0.0603 213 chr4 190116600 190118100 0.0484 144 chr4 190122600 190123200 0.3714 284 chr4 190173000 190182000 0 20904 chr4 190183200 190204500 0 157 chr5 9900 12000 0 1344 chr5 43200 43500 0.1825 66 chr5 83700 85200 0.2601 64 chr5 100500 100800 0.1758 53 chr5 209100 209700 0.2422 39 chr5 211500 213000 0.1488 36 chr5 259800 262200 0.1675 68 chr5 293400 294000 0.1222 80 chr5 309600 309900 0.1876 71 chr5 344400 344700 0.1329 54 chr5 356700 359100 0 54 chr5 391500 392400 0.3038 117 chr5 415200 415500 0.4309 122 chr5 474300 474600 0.2955 47 chr5 487200 487500 0.2205 19 chr5 495600 495900 0.0356 15 chr5 552600 553500 0.2797 148 chr5 562200 564600 0.0341 36 chr5 629700 632700 0 76 chr5 650700 651000 0.2839 28 chr5 687300 687600 0.1917 60 chr5 689100 690900 0 77 chr5 694500 695400 0 67 chr5 697800 698100 0.1368 72 chr5 711900 712200 0.1478 68 chr5 723600 723900 0.1159 75 chr5 725400 725700 0.1159 75 chr5 727500 727800 0.1159 75 chr5 734400 736800 0 76 chr5 738000 740700 0 76 chr5 747000 747300 0.0764 58 chr5 755100 756000 0.0185 72 chr5 767700 769500 0 68 chr5 779400 779700 0 75 chr5 781200 783000 0 75 chr5 786000 786600 0.0045 67 chr5 796200 796500 0.35 86 chr5 809700 810300 0.0297 62 chr5 811800 812100 0.0297 62 chr5 825900 827100 0 67 chr5 828900 830700 0.0154 62 chr5 832200 832800 0.1663 52 chr5 839100 839400 0.0692 55 chr5 848100 848700 0.119 82 chr5 878700 880500 0 90 chr5 897300 899700 0 61 chr5 1022400 1025700 0.169 38 chr5 1070100 1073100 0.0532 27 chr5 1170300 1170600 0.256 58 chr5 1272600 1273500 0.1948 54 chr5 1289400 1290900 0.1549 103 chr5 1327800 1328400 0.438 75 chr5 1329600 1329900 0.3258 69 chr5 1569900 1570200 0.2046 99 chr5 1574400 1574700 0.2764 48 chr5 1644600 1644900 0.2396 28 chr5 1710600 1710900 0.4248 43 chr5 1712400 1712700 0.0234 92 chr5 1713900 1715700 0.0234 92 chr5 1842900 1843200 0.3115 88 chr5 1857900 1858200 0.4332 66 chr5 1968300 1971300 0 83 chr5 2145600 2146500 0.3159 396 chr5 2490600 2491200 0.3372 77 chr5 3440700 3441000 0.3083 84 chr5 3442800 3444000 0.2234 59 chr5 3499200 3499500 0.1537 26 chr5 3638100 3639300 0 45 chr5 4496700 4501800 0 81 chr5 4616700 4620600 0.157 82 chr5 5305200 5305500 0.4461 115 chr5 6363900 6364200 0.2695 36 chr5 6571200 6571500 0.3505 33 chr5 6774000 6774300 0.1265 16 chr5 6968100 6971400 0 64 chr5 7056900 7057500 0.0579 91 chr5 7174800 7175100 0.2284 55 chr5 7194000 7195200 0.0135 83 chr5 7196400 7199400 0.0135 83 chr5 7232700 7234800 0.1042 105 chr5 7300800 7301100 0.4027 20 chr5 7603800 7605900 0 73 chr5 8163900 8164200 0.2136 68 chr5 8274000 8274600 0.274 60 chr5 8937900 8938200 0.1371 35 chr5 9259800 9262800 0 88 chr5 9411600 9411900 0.36 32 chr5 9585000 9586200 0.0276 132 chr5 10273200 10273500 0.3827 22 chr5 10346400 10346700 0.0411 69 chr5 12197400 12198000 0.0741 70 chr5 12453300 12455100 0 74 chr5 12491400 12491700 0.2564 47 chr5 13329900 13330500 0.0038 11 chr5 13416600 13422600 0 75 chr5 14346900 14347500 0.1198 265 chr5 14634000 14634900 0.0511 102 chr5 14808600 14809200 0.2506 71 chr5 15296700 15297000 0.1341 69 chr5 15401100 15401700 0.1305 47 chr5 15906600 15912600 0 88 chr5 16336800 16337100 0.2718 60 chr5 16339500 16339800 0.1684 84 chr5 16341000 16341300 0.1684 84 chr5 17101200 17101500 0.0807 92 chr5 17517900 17530500 0 549 chr5 17580600 17598900 0 437 chr5 17749800 17750100 0.0438 19 chr5 17751900 17752200 0.1899 84 chr5 17840700 17841000 0.0139 45 chr5 18096900 18097200 0.3832 29 chr5 18474300 18474600 0.0862 86 chr5 19161600 19161900 0.0309 21 chr5 19163700 19167000 0.0042 79 chr5 20644500 20646900 0.0024 99 chr5 20700300 20700600 0.217 45 chr5 20738400 20738700 0.295 71 chr5 20754600 20755200 0.0051 57 chr5 20756700 20757300 0.0051 57 chr5 20759400 20759700 0.2794 58 chr5 20761500 20761800 0.2794 58 chr5 20763300 20765100 0.0015 54 chr5 20771100 20771400 0.3286 44 chr5 20775000 20775300 0.4249 48 chr5 20792700 20793000 0.2695 49 chr5 20841900 20842200 0.2631 47 chr5 20868300 20868600 0 24 chr5 20870700 20871000 0.166 32 chr5 21108000 21112800 0.0494 88 chr5 21299400 21300300 0.1353 85 chr5 21338100 21338400 0.1479 11 chr5 21480600 21480900 0.0802 128 chr5 21485100 21485400 0.0713 189 chr5 21490200 21490800 0.0964 139 chr5 21494700 21495300 0.0565 135 chr5 22012800 22013100 0.2044 56 chr5 22134600 22134900 0.2597 64 chr5 22157100 22157400 0.1816 56 chr5 24370800 24373200 0 69 chr5 25079100 25079700 0.1359 68 chr5 25080900 25081200 0.1359 68 chr5 25116900 25117500 0.2071 68 chr5 25207500 25207800 0.0386 94 chr5 25381800 25383900 0.2106 96 chr5 25777200 25777500 0.0924 19 chr5 25831800 25832100 0.2937 44 chr5 26111100 26111400 0 17 chr5 26477100 26477400 0.1295 66 chr5 26481600 26481900 0.137 51 chr5 27209700 27210000 0.2892 69 chr5 27426600 27426900 0.2791 31 chr5 28064700 28065000 0.1754 75 chr5 28197000 28197300 0.2408 47 chr5 28200900 28201200 0.1019 72 chr5 28502400 28502700 0.1895 36 chr5 28504200 28504500 0.1895 36 chr5 28801500 28802400 0.1748 72 chr5 29190900 29191200 0.0956 76 chr5 29486100 29490300 0 72 chr5 29877000 29878200 0.0493 92 chr5 30012600 30013200 0.0853 53 chr5 30426300 30426900 0.0546 65 chr5 30818400 30819900 0.1184 83 chr5 30822000 30823500 0.143 110 chr5 30860100 30860400 0.3609 51 chr5 32208000 32209500 0.1095 115 chr5 32822700 32827800 0 83 chr5 32911800 32912100 0.1122 81 chr5 33124500 33126600 0.0507 109 chr5 33127800 33128100 0.0507 109 chr5 33952800 33954000 0.0497 97 chr5 34086300 34086600 0.2049 53 chr5 34090200 34090500 0.2534 36 chr5 34093200 34093500 0.2467 50 chr5 34095300 34095600 0 59 chr5 34097400 34098300 0 59 chr5 34099500 34099800 0.1834 60 chr5 34104000 34104600 0 52 chr5 34105800 34107300 0 52 chr5 34148100 34153800 0 95 chr5 34173300 34173900 0.1884 47 chr5 34178700 34179300 0.0312 202 chr5 34183500 34183800 0.0224 150 chr5 34188900 34189200 0.0976 182 chr5 34194300 34194600 0.299 184 chr5 34198200 34199400 0.0113 57 chr5 34204800 34206900 0.1681 57 chr5 34231800 34232100 0.1284 79 chr5 34233300 34233600 0.2702 52 chr5 34245300 34245600 0.0692 37 chr5 34254000 34254300 0.2087 54 chr5 34275900 34276200 0.2388 20 chr5 34305000 34307700 0.0008 77 chr5 34363800 34364100 0.2093 57 chr5 35018700 35019300 0.2635 69 chr5 35021400 35021700 0.2157 79 chr5 35569200 35570100 0.2551 68 chr5 36293100 36293400 0.0775 53 chr5 36321600 36321900 0.0467 46 chr5 37458000 37460700 0 64 chr5 38172900 38174100 0.0875 88 chr5 39787800 39793500 0 139 chr5 39916800 39917100 0.4026 51 chr5 40543200 40543800 0.067 91 chr5 40545000 40546800 0.1122 101 chr5 40801200 40801800 0.0908 81 chr5 40856700 40857000 0.2248 79 chr5 41235600 41238300 0.0707 81 chr5 41403300 41403900 0.1492 66 chr5 41599500 41599800 0.1492 57 chr5 42165900 42167700 0 64 chr5 42735300 42735600 0.001 95 chr5 42737400 42738000 0.001 95 chr5 42739200 42739800 0.001 95 chr5 42981000 42981900 0.0761 80 chr5 43086600 43087200 0.0608 81 chr5 43720500 43720800 0.2422 82 chr5 44152500 44154300 0 94 chr5 44730600 44730900 0.2215 74 chr5 45495000 45495600 0.0505 66 chr5 45659400 45664200 0 82 chr5 45977400 45978300 0.2269 59 chr5 46486200 46487100 0 22 chr5 46488300 46492200 0 70 chr5 46493700 46501200 0 136 chr5 46503000 46503300 0 105 chr5 46504500 46507800 0 48 chr5 46510200 46515000 0 112 chr5 46518000 46524000 0 101 chr5 46526400 46526700 0.2418 12 chr5 46528200 46529700 0 23 chr5 46530900 46533300 0 56 chr5 46535100 46538400 0 106 chr5 46540500 46542900 0.0305 40 chr5 46545300 46551300 0 98 chr5 46553100 46554000 0 43 chr5 46555500 46557300 0.0487 63 chr5 46559100 46562400 0 71 chr5 46563600 46564800 0 127 chr5 46566300 46570200 0 70 chr5 46572000 46573200 0 87 chr5 46574400 46575600 0 129 chr5 46576800 46584300 0 153 chr5 46585500 46586400 0 60 chr5 46587600 46599300 0 111 chr5 46600500 46610100 0 192 chr5 46611300 46616100 0 192 chr5 46617300 46625100 0 151 chr5 46626600 46627200 0 151 chr5 46628400 46635000 0 98 chr5 46637100 46638900 0 57 chr5 46640400 46643100 0 81 chr5 46644900 46648500 0 84 chr5 46649700 46674900 0 222 chr5 46676400 46676700 0 222 chr5 46677900 46682100 0 222 chr5 46683600 46684800 0 51 chr5 46686000 46687500 0 212 chr5 46688700 46689300 0 212 chr5 46691700 46695000 0 116 chr5 46696800 46702500 0 105 chr5 46705200 46705500 0.4054 48 chr5 46707300 46708200 0 119 chr5 46710300 46716300 0 203 chr5 46717800 46718400 0 62 chr5 46719600 46722300 0 167 chr5 46724100 46725900 0 97 chr5 46728000 46728900 0 240 chr5 46730100 46740300 0 240 chr5 46742400 46749300 0 206 chr5 46750800 46769400 0 206 chr5 46771800 46784400 0 142 chr5 46785900 46790700 0 142 chr5 46792800 46812300 0 288 chr5 46813500 46925700 0 288 chr5 46927500 46957500 0 162 chr5 46959300 47026800 0 364 chr5 47028000 47068500 0 364 chr5 47073900 47074800 0 114 chr5 47076000 47079600 0 114 chr5 47082300 47087100 0 92 chr5 47088300 47090100 0 92 chr5 47092200 47098500 0 67 chr5 47102100 47102400 0.1463 75 chr5 47105100 47108400 0 135 chr5 47109600 47110800 0 135 chr5 47113200 47128800 0 414 chr5 47130000 47209800 0 458 chr5 47211000 47231700 0 408 chr5 47232900 47242200 0 408 chr5 47243400 47255700 0 408 chr5 47257200 47271600 0 408 chr5 47272800 47295300 0 561 chr5 47296800 47297400 0 561 chr5 47299200 47299500 0.4335 51 chr5 47307000 47309100 0.0121 262 chr5 49591500 49591800 0 100 chr5 49601100 49603200 0.1512 59888 chr5 49609800 49617300 0 297 chr5 49622700 49623000 0.321 40 chr5 49626600 49627200 0.0071 398 chr5 49630800 49631700 0.2639 15366 chr5 49633200 49633800 0 32 chr5 49643700 49646400 0.0554 2508 chr5 49650000 49650300 0.0554 2508 chr5 49656000 49661700 0.1929 49149 chr5 49665900 49667700 0 17908 chr5 49670400 49675500 0 17908 chr5 49679400 49683900 0 199 chr5 49685700 49686000 0 199 chr5 49687800 49693200 0 93 chr5 49695000 49695900 0.2833 97 chr5 49698000 49710000 0 226 chr5 49712100 49717200 0 226 chr5 49718400 49720200 0 226 chr5 49722300 49728300 0 448 chr5 49729800 49738500 0 448 chr5 49740900 49749000 0.0106 445 chr5 49750200 49754100 0.0873 493 chr5 49755300 49761300 0.0627 326 chr5 49762800 49765800 0.0685 286 chr5 49767000 49769100 0.2055 211 chr5 49771200 49784100 0.0107 820 chr5 49785600 49788600 0 1046 chr5 49789800 49794900 0.0105 380 chr5 49796100 49813200 0.0105 380 chr5 49814400 49815900 0.1517 211 chr5 49817100 49835100 0 579 chr5 49836300 49888200 0 724 chr5 49889400 49906800 0 724 chr5 49908000 49913400 0 845 chr5 49914600 49935300 0 845 chr5 49936800 49940400 0.0235 330 chr5 49941900 49956600 0.0192 630 chr5 49957800 49962600 0.1907 386 chr5 49964400 49983900 0.033 571 chr5 49985100 49992900 0.0388 454 chr5 49994400 49996200 0.0388 454 chr5 49997700 50008500 0.0347 669 chr5 50009700 50012400 0.0347 669 chr5 50013900 50026200 0.0176 928 chr5 50027700 50035500 0 859 chr5 50037000 50037600 0.0881 242 chr5 50039100 50046300 0 609 chr5 50047500 50048700 0.4305 263 chr5 50049900 50059500 0.0547 581 chr5 50109900 50143500 0 617 chr5 50144700 50145000 0 617 chr5 51252600 51252900 0.0716 99 chr5 51254700 51255000 0.0716 99 chr5 51332700 51333900 0.0513 93 chr5 51335100 51335400 0.1176 79 chr5 52019100 52019400 0.1668 93 chr5 52090500 52090800 0.1042 87 chr5 52164300 52164600 0.1451 46 chr5 52192500 52193100 0.1705 73 chr5 52248600 52248900 0.2173 66 chr5 52540200 52540500 0.2277 26 chr5 52722000 52722300 0.2248 71 chr5 52935900 52936200 0.2624 31 chr5 54181800 54183300 0.1067 59 chr5 54806700 54807300 0.3098 84 chr5 55571400 55572000 0.1956 83 chr5 55587900 55588200 0.1735 75 chr5 55695600 55695900 0.1793 54 chr5 55753500 55754100 0.134 66 chr5 57354300 57354900 0.0187 86 chr5 57377700 57378300 0.1883 80 chr5 57472200 57475200 0.0505 72 chr5 58290600 58290900 0.1269 48 chr5 58384200 58390200 0 89 chr5 58422000 58422300 0.3277 61 chr5 58552500 58553700 0.1616 88 chr5 58597200 58597800 0.1233 20 chr5 58757100 58757400 0.3059 60 chr5 59284500 59285100 0.0048 67 chr5 59396400 59396700 0.2892 48 chr5 60570600 60570900 0.2159 92 chr5 61375800 61376400 0.151 61 chr5 62512800 62513100 0.2589 62 chr5 62598300 62598600 0.4366 36 chr5 62799600 62801700 0.2163 74 chr5 62802900 62803200 0.1572 54 chr5 62817600 62823000 0 73 chr5 63408600 63408900 0.4673 33 chr5 63942300 63943800 0.0725 81 chr5 64131000 64132500 0.2507 103 chr5 64466700 64470300 0 68 chr5 64477800 64481400 0 69 chr5 64710000 64712100 0.0028 73 chr5 64713600 64714200 0.2731 73 chr5 65164800 65169600 0 86 chr5 65499900 65500500 0.2436 65 chr5 66752400 66752700 0.074 81 chr5 67251300 67251900 0.3054 58 chr5 67821900 67823400 0.1797 79 chr5 67892400 67893900 0.081 76 chr5 68007900 68009100 0.0167 63 chr5 69475800 69476100 0.4096 61 chr5 69480300 69480600 0.3663 48 chr5 69534000 69547500 0 62 chr5 69550500 69554100 0 62 chr5 69555900 69558900 0 73 chr5 69560400 69560700 0.1894 55 chr5 69562800 69563100 0.2846 64 chr5 69565200 69565500 0 388 chr5 69566700 69579600 0 388 chr5 69581700 69602100 0 388 chr5 69603300 69627300 0 388 chr5 69628800 69631800 0 388 chr5 69634500 69791400 0 388 chr5 69792600 69992400 0 388 chr5 69993600 70019100 0 388 chr5 70020300 70028400 0 388 chr5 70029900 70043400 0 102 chr5 70044600 70046400 0 102 chr5 70049400 70074600 0 141 chr5 70076100 70102200 0 141 chr5 70103700 70182300 0 141 chr5 70183500 70377000 0 141 chr5 70378200 70401000 0 141 chr5 70402500 70442100 0 141 chr5 70444500 70546200 0 280 chr5 70547400 70950000 0 280 chr5 70952700 70955100 0 280 chr5 70956900 70959900 0 280 chr5 70961100 70977000 0 280 chr5 70978500 71008800 0 95 chr5 71015700 71031900 0 86 chr5 71033400 71052900 0 86 chr5 71055600 71077500 0 80 chr5 71079600 71094900 0 63 chr5 71097000 71097300 0.2255 60 chr5 71098800 71102400 0 76 chr5 71104500 71138700 0 103 chr5 71140200 71164200 0 103 chr5 71165700 71166300 0 421 chr5 71168700 71230500 0 421 chr5 71231700 71300400 0 218 chr5 71302200 71321100 0 106 chr5 71322600 71327100 0 106 chr5 71328900 71352600 0 116 chr5 71353800 71359200 0 116 chr5 71362200 71362500 0 116 chr5 71364000 71364300 0 116 chr5 71367900 71368200 0.2164 69 chr5 71398200 71398500 0.2063 66 chr5 71604900 71605200 0.0968 49 chr5 71606400 71608500 0.1122 73 chr5 71851800 71852700 0.0451 60 chr5 73876200 73877700 0.205 79 chr5 74711100 74711400 0.3136 70 chr5 75606000 75606600 0.0197 76 chr5 75642300 75647700 0.0048 109 chr5 75700800 75701400 0.1621 67 chr5 75882900 75883200 0.2255 76 chr5 76170300 76172700 0.0479 85 chr5 76233000 76233600 0.1999 102 chr5 76360500 76360800 0.2775 92 chr5 76984200 76984500 0.3242 63 chr5 77042700 77043600 0.2174 65 chr5 77612700 77613000 0.4391 62 chr5 77794500 77794800 0.071 65 chr5 78455700 78456300 0.2099 51 chr5 78582300 78582600 0.2134 88 chr5 78619800 78620100 0.0901 45 chr5 78867900 78868200 0.3771 57 chr5 78872400 78872700 0.344 62 chr5 78981000 78981300 0.2902 53 chr5 79096800 79097100 0.1367 62 chr5 79779000 79784700 0 108 chr5 79907100 79907400 0.2717 44 chr5 80628300 80628600 0.1747 67 chr5 80692800 80693100 0.3621 47 chr5 80743500 80743800 0.3094 34 chr5 81033300 81033600 0.0579 59 chr5 81054300 81054900 0.1548 81 chr5 81596400 81596700 0.0147 72 chr5 81616200 81621900 0 87 chr5 82047900 82048200 0.4526 53 chr5 82125900 82126800 0.0052 71 chr5 82134000 82134900 0 70 chr5 82140300 82141200 0.132 57 chr5 82369500 82371900 0.0023 77 chr5 82429800 82433100 0.0092 91 chr5 82505100 82506000 0.0797 89 chr5 82867500 82867800 0.2191 55 chr5 82937700 82938300 0.0262 50 chr5 83316600 83319900 0 69 chr5 83458200 83459700 0.0807 97 chr5 83460900 83461200 0.0807 97 chr5 83610300 83610600 0.4909 21 chr5 84176100 84176400 0.2734 213 chr5 84652200 84652500 0.16 24 chr5 85358700 85359600 0.0861 65 chr5 85638900 85639500 0.0641 60 chr5 85662600 85663200 0.0491 80 chr5 86510700 86516700 0.0083 94 chr5 87091200 87091800 0.0578 72 chr5 87470700 87471000 0.0274 51 chr5 88904100 88904400 0.1865 37 chr5 89624400 89624700 0.2673 56 chr5 89737800 89738100 0.4893 128 chr5 90075300 90075900 0.1149 68 chr5 90077400 90077700 0.2068 63 chr5 90078900 90079200 0.3534 41 chr5 90212400 90213000 0.1132 82 chr5 90443100 90444600 0.0229 85 chr5 90595200 90595500 0.4896 41 chr5 90667200 90667500 0.3994 29 chr5 90925800 90926100 0.1742 68 chr5 91273500 91274400 0.2542 77 chr5 91278900 91279200 0.2109 20 chr5 92194800 92195100 0.1237 64 chr5 92196300 92198100 0.0126 88 chr5 92300400 92301900 0.0818 109 chr5 93148800 93149100 0.1465 66 chr5 93213900 93216300 0.0468 93 chr5 93218100 93218400 0.0468 93 chr5 93261900 93264300 0.0976 86 chr5 93265800 93266400 0.0976 86 chr5 94580700 94581000 0.3546 59 chr5 94773900 94774200 0.2858 57 chr5 95201400 95201700 0.4098 60 chr5 95492400 95492700 0.0796 251 chr5 96104700 96105300 0.0657 57 chr5 96106800 96107100 0.2258 58 chr5 96241800 96242100 0.2667 70 chr5 96732300 96732600 0.2159 48 chr5 97295100 97295400 0.3366 72 chr5 97515900 97516500 0.2886 71 chr5 97518000 97518600 0.1031 80 chr5 97632000 97632600 0.1585 67 chr5 97811400 97811700 0.2236 75 chr5 97813800 97814100 0.2348 98 chr5 98139000 98139300 0.2448 67 chr5 98548500 98548800 0.1408 25 chr5 98550600 98552400 0.0426 80 chr5 98704800 98705100 0.1931 55 chr5 98821800 98822100 0.4111 62 chr5 99401700 99402300 0.0156 50 chr5 99409800 99411600 0.0368 67 chr5 99415500 99415800 0.1594 58 chr5 99423900 99424800 0.2283 55 chr5 99426000 99430500 0 74 chr5 99432300 99433200 0.176 63 chr5 99484200 99484500 0.1483 41 chr5 99489300 99489600 0.3591 67 chr5 99493200 99493500 0.1792 43 chr5 99495000 99495300 0.1979 58 chr5 99498900 99499800 0 67 chr5 99518400 99521100 0.151 66 chr5 99529800 99530100 0.3473 33 chr5 99537600 99537900 0.0409 48 chr5 99539100 99539400 0.0805 51 chr5 99576600 99578100 0.1045 66 chr5 99584400 99584700 0.1788 74 chr5 99690900 99692400 0.1197 74 chr5 99735300 99735600 0.0489 70 chr5 99829200 99829500 0.3099 56 chr5 99855300 99855600 0.3491 84 chr5 99857100 99861600 0.0088 74 chr5 99896400 99898500 0.1137 62 chr5 100058100 100058400 0.0352 55 chr5 100062300 100062600 0.1254 98 chr5 100069800 100070100 0.2235 60 chr5 100075500 100076400 0.0021 71 chr5 100085700 100086000 0.1287 67 chr5 100087800 100088100 0.1087 78 chr5 100092900 100093200 0.2818 55 chr5 100332600 100333500 0.3098 54 chr5 100335300 100339200 0 67 chr5 100340400 100341900 0.1857 63 chr5 100349400 100350000 0.0038 49 chr5 100353600 100355400 0.0418 67 chr5 100363200 100363800 0.0095 54 chr5 100375500 100376100 0.1989 77 chr5 100383600 100383900 0.1799 62 chr5 100388700 100389300 0.1659 59 chr5 100396200 100396800 0.0362 52 chr5 100423800 100424100 0.202 20 chr5 101110500 101110800 0.1996 63 chr5 101126700 101127000 0.1793 74 chr5 101290200 101290500 0.3109 67 chr5 101302800 101303400 0.1365 81 chr5 102132000 102137100 0 82 chr5 102189600 102194100 0.0006 76 chr5 102675600 102675900 0.1402 77 chr5 102683700 102684900 0.1998 77 chr5 103050600 103051500 0.0678 50 chr5 103998300 103999200 0.1605 85 chr5 104075100 104076600 0.1363 97 chr5 104079300 104079600 0.1722 55 chr5 104357700 104360400 0.0252 73 chr5 104447100 104448000 0.0007 90 chr5 104450700 104451000 0.1225 34 chr5 104518800 104524500 0 98 chr5 105513300 105515100 0.1262 79 chr5 105518100 105518700 0.0381 95 chr5 106148400 106149300 0 87 chr5 106427100 106427400 0.2163 66 chr5 106564200 106564500 0.3666 14 chr5 106696200 106696500 0.2534 61 chr5 106902600 106902900 0.1538 58 chr5 109259400 109265400 0 95 chr5 109341600 109343100 0.2965 56 chr5 109532100 109532400 0.2858 38 chr5 110172600 110172900 0.1841 70 chr5 110655300 110655600 0.157 55 chr5 110990100 110990400 0.1583 44 chr5 111088500 111089100 0.1981 63 chr5 111302400 111308100 0.0015 156 chr5 111576600 111576900 0.4162 45 chr5 114230400 114231300 0.0085 59 chr5 114641700 114642000 0.1743 92 chr5 114675300 114675600 0.3768 37 chr5 115061100 115061400 0.2253 25 chr5 115410600 115413000 0.1216 71 chr5 115421400 115421700 0.1101 67 chr5 116149500 116151000 0.3507 66 chr5 116252400 116253300 0.1031 79 chr5 116558400 116558700 0.364 27 chr5 116821200 116821800 0.3569 85 chr5 117492000 117492300 0.1766 72 chr5 117543600 117543900 0.1526 59 chr5 117908100 117908400 0.1311 40 chr5 117931500 117931800 0.2104 56 chr5 118046100 118046400 0.0367 25 chr5 118542000 118542300 0.1264 91 chr5 119605200 119605500 0.3012 52 chr5 119685000 119689800 0 74 chr5 120195000 120195600 0.1535 77 chr5 120281400 120281700 0.2431 53 chr5 120311400 120312000 0.062 60 chr5 120666600 120666900 0.2673 85 chr5 121411800 121412100 0.0899 46 chr5 121952100 121953000 0.0038 77 chr5 121996200 121997100 0.0444 79 chr5 122240400 122244900 0.0007 116 chr5 122379000 122379600 0.07 76 chr5 122381100 122381400 0.07 76 chr5 122511900 122512200 0.1955 69 chr5 122911500 122912100 0.2367 58 chr5 122914500 122914800 0.2874 66 chr5 123236700 123238800 0 58 chr5 123240900 123241200 0.2602 59 chr5 125359500 125362200 0.0051 87 chr5 125364000 125364300 0.011 43 chr5 125616000 125616600 0.0098 187 chr5 125676300 125676600 0.1382 77 chr5 126163800 126164400 0.2845 17 chr5 126528900 126529500 0.2762 89 chr5 126891300 126892500 0.2345 79 chr5 126893700 126894300 0.0887 71 chr5 126904800 126905400 0.055 79 chr5 126907200 126907500 0.055 79 chr5 127103700 127104000 0.2688 51 chr5 127734900 127735800 0.1571 70 chr5 127738200 127738500 0.3477 40 chr5 127747800 127748700 0.0279 80 chr5 127750500 127750800 0.2273 69 chr5 127879200 127879800 0.02 69 chr5 128295000 128295900 0.0913 83 chr5 128605200 128605800 0.1948 123 chr5 128820600 128820900 0.32 50 chr5 129313200 129313500 0.1615 52 chr5 129550200 129550500 0.1838 30 chr5 129578100 129578400 0.1812 61 chr5 130265400 130265700 0.1663 107 chr5 130733700 130734000 0.1353 73 chr5 130735200 130737300 0.0187 92 chr5 131073300 131073600 0.1495 64 chr5 131308500 131308800 0.4447 88 chr5 131778600 131778900 0.2606 60 chr5 131876400 131876700 0.3036 68 chr5 132514500 132519600 0 81 chr5 133109100 133109700 0.1967 56 chr5 133583700 133589100 0 91 chr5 133626000 133626300 0.2195 11 chr5 134557500 134558400 0.0044 56 chr5 134881200 134881800 0.0445 71 chr5 135983400 135983700 0.1419 72 chr5 136783500 136784700 0.2854 75 chr5 136787700 136788000 0.276 78 chr5 137045400 137050500 0 94 chr5 137500200 137500500 0.2954 93 chr5 137687400 137687700 0.4256 25 chr5 137973600 137973900 0.2989 63 chr5 138519900 138520200 0.2104 49 chr5 139005600 139007700 0.0097 90 chr5 139009200 139009500 0.0097 90 chr5 139083300 139084800 0 75 chr5 140517000 140517900 0.2297 76 chr5 140592600 140593200 0.2565 63 chr5 140835000 140835300 0.147 74 chr5 140849100 140849400 0.0917 68 chr5 141106800 141107100 0.2314 45 chr5 141214200 141214500 0.2799 54 chr5 141387900 141388200 0.1986 59 chr5 141398100 141398400 0.3258 72 chr5 142041600 142042200 0.068 73 chr5 142043700 142044000 0.0436 61 chr5 142075200 142077000 0 61 chr5 144069900 144071400 0.1212 53 chr5 144551400 144553500 0.0549 63 chr5 144713700 144717600 0.0195 87 chr5 144891000 144892200 0.106 72 chr5 145149900 145150800 0 71 chr5 145183200 145183800 0 20 chr5 145372800 145373100 0.0903 44 chr5 145419300 145421100 0.0792 70 chr5 146610000 146615400 0 80 chr5 146678700 146680200 0.0167 77 chr5 147013200 147013800 0.0855 71 chr5 147716100 147720600 0.0878 75 chr5 147941700 147942300 0.135 76 chr5 147945600 147945900 0.1757 89 chr5 147958500 147960900 0.0329 73 chr5 148022400 148024200 0.0146 75 chr5 148233300 148233600 0.0872 45 chr5 148252500 148253700 0 38 chr5 148612500 148613100 0.1717 72 chr5 148945200 148946100 0.3132 59 chr5 149655000 149655600 0.4306 55 chr5 152076900 152082900 0 80 chr5 152209200 152213100 0.0019 81 chr5 152340300 152345700 0 99 chr5 152615100 152616000 0.1916 71 chr5 152654700 152655000 0.3696 36 chr5 152742300 152743800 0.1046 50 chr5 152746500 152746800 0.3221 67 chr5 152766900 152767200 0.2943 86 chr5 152886600 152892300 0 105 chr5 152939700 152940600 0.0218 76 chr5 153036900 153037200 0.1133 78 chr5 153071400 153075900 0 84 chr5 155170500 155170800 0.0979 73 chr5 155612100 155612400 0.0378 47 chr5 155615100 155615700 0.1826 61 chr5 155660100 155660700 0.0799 72 chr5 156062100 156067500 0 82 chr5 156657900 156659400 0 114 chr5 156660600 156661800 0 114 chr5 156663900 156664800 0.0104 80 chr5 156666000 156666900 0.0104 80 chr5 157437000 157438800 0.0034 85 chr5 158183700 158184000 0.2798 78 chr5 159036600 159037500 0.0043 73 chr5 160498500 160498800 0.4045 68 chr5 160709700 160715700 0 85 chr5 160875000 160876200 0.0064 67 chr5 160878900 160879500 0.0668 75 chr5 161004300 161004600 0.3272 25 chr5 161073000 161073300 0.3882 42 chr5 161075400 161075700 0.1966 100 chr5 161607600 161607900 0.1186 37 chr5 161609700 161610000 0.1894 71 chr5 161712000 161712300 0.0739 126 chr5 162290700 162291000 0.1964 24 chr5 162736800 162737100 0.2078 74 chr5 162850800 162851100 0.3747 69 chr5 162906000 162906600 0.0231 57 chr5 163059900 163060200 0.0102 41 chr5 165801000 165801300 0.4669 26 chr5 166141800 166142700 0.0086 93 chr5 166143900 166144800 0.0086 93 chr5 166146000 166147200 0.0136 111 chr5 166420800 166421400 0.0059 89 chr5 166966800 166972800 0 89 chr5 167859000 167860800 0.1111 76 chr5 168145200 168146100 0.0537 81 chr5 168717000 168717300 0.0701 68 chr5 168741900 168742200 0.1263 60 chr5 169665000 169665300 0.092 20 chr5 169834200 169834500 0.4062 60 chr5 170214900 170215200 0.4207 102 chr5 170240100 170240400 0.3466 69 chr5 170242200 170242500 0.1802 64 chr5 171059700 171060300 0.0373 84 chr5 171084600 171087300 0 84 chr5 171404400 171404700 0.12 56 chr5 173403000 173408700 0 87 chr5 173462700 173463000 0.124 37 chr5 174018900 174019200 0.1473 88 chr5 174539700 174540000 0.2217 77 chr5 175137900 175138200 0.071 58 chr5 175400700 175402200 0.0277 147 chr5 175721100 175721400 0.3443 75 chr5 175906800 175907100 0.2494 73 chr5 175911300 175911900 0.3073 61 chr5 175917600 175918500 0.0621 69 chr5 175941300 175941600 0.1872 41 chr5 175943100 175943400 0.2655 69 chr5 175946700 175949700 0.0141 68 chr5 175951500 175951800 0.0703 56 chr5 175954500 175957800 0 66 chr5 175964700 175965000 0.1657 59 chr5 175967100 175967400 0.1937 70 chr5 175969200 175969800 0.0158 58 chr5 175972500 175973100 0 54 chr5 175974900 175975800 0.0031 66 chr5 175977900 176000700 0 79 chr5 176009700 176010300 0.1935 80 chr5 176014800 176022000 0 85 chr5 176024400 176032500 0 109 chr5 176033700 176034600 0 109 chr5 176037900 176038200 0.4591 39 chr5 176042400 176043000 0.3826 61 chr5 176046000 176048400 0.0065 71 chr5 176053500 176054400 0.1533 80 chr5 176059200 176061000 0.0011 52 chr5 176062800 176063400 0.0118 40 chr5 176065800 176066100 0.1879 44 chr5 176067600 176067900 0.0076 58 chr5 176073000 176073600 0.1269 82 chr5 176075100 176075400 0.1269 82 chr5 176079900 176080200 0.2266 14 chr5 176082000 176082600 0.0073 58 chr5 176085600 176087400 0 76 chr5 176089200 176091300 0 76 chr5 176092500 176096400 0 76 chr5 176097600 176098500 0 76 chr5 176101800 176102700 0 77 chr5 176106000 176107200 0.0628 76 chr5 176109000 176109300 0 76 chr5 176110800 176114400 0 76 chr5 176117400 176118300 0.0331 59 chr5 176123100 176123700 0.0613 64 chr5 176128200 176128500 0.2334 41 chr5 176196300 176196600 0.1025 76 chr5 176215200 176216400 0.0348 68 chr5 176224200 176224500 0.2259 68 chr5 176226900 176227800 0.0034 62 chr5 176231700 176232000 0.1264 62 chr5 176238600 176241300 0 64 chr5 176244000 176244300 0.0114 62 chr5 176266500 176268600 0.0347 60 chr5 176277900 176278800 0.0284 67 chr5 176305200 176305500 0.447 13 chr5 176871000 176871600 0.1837 30 chr5 176960700 176963100 0.0085 60 chr5 177451500 177451800 0.2648 23 chr5 177517800 177518700 0 28 chr5 177643800 177645900 0.0012 49 chr5 177666300 177666900 0.0268 69 chr5 177670800 177672600 0.0097 68 chr5 177678600 177678900 0.2429 59 chr5 177682500 177683400 0 68 chr5 177686100 177686400 0.3084 70 chr5 177694200 177694800 0.0395 67 chr5 177703800 177704100 0.3231 43 chr5 177709800 177710100 0.2889 53 chr5 177714600 177714900 0.0171 62 chr5 177717900 177718500 0.0116 53 chr5 177719700 177722400 0 69 chr5 177723600 177728100 0.067 81 chr5 177730800 177733200 0.0062 91 chr5 177735300 177736200 0 74 chr5 177739500 177745800 0 80 chr5 177747600 177748800 0.1482 74 chr5 177750600 177750900 0.0087 68 chr5 177752100 177752400 0.0087 68 chr5 177756300 177757500 0.2319 66 chr5 177760500 177763500 0.0034 81 chr5 177766800 177767700 0.0197 67 chr5 177772200 177778200 0 102 chr5 177779700 177781200 0.0914 55 chr5 177788700 177789000 0.3542 90 chr5 177796200 177799200 0.0056 68 chr5 177801000 177801300 0.006 33 chr5 177802800 177804600 0 29 chr5 177807300 177807600 0.47 18 chr5 177809700 177819300 0 75 chr5 177820500 177830700 0 77 chr5 177833700 177834300 0.0272 75 chr5 177843000 177843300 0.2214 56 chr5 177845100 177845700 0.05 69 chr5 177851100 177851400 0.1153 43 chr5 177855300 177855900 0.1196 53 chr5 177859500 177865800 0 74 chr5 177867900 177871200 0 59 chr5 177873300 177874500 0 59 chr5 177875700 177876600 0.2261 70 chr5 177878700 177881100 0.119 65 chr5 177885300 177889500 0 76 chr5 177894000 177894300 0.0055 81 chr5 177895500 177898200 0.0055 81 chr5 177899400 177902700 0 61 chr5 177903900 177905700 0 61 chr5 177909600 177909900 0.0199 20 chr5 177914100 177914400 0.054 19 chr5 177916800 177917100 0.4388 26 chr5 177920400 177921600 0.0381 57 chr5 177924900 177925500 0.3571 53 chr5 177929100 177929700 0.1378 69 chr5 177932100 177932400 0.2983 69 chr5 177942300 177942900 0.0066 59 chr5 177948900 177949200 0.0846 28 chr5 177961500 177962400 0.0048 250 chr5 177979500 177979800 0.3577 15 chr5 178006200 178006500 0.1297 42 chr5 178010100 178010400 0.2984 55 chr5 178013100 178013700 0.0391 78 chr5 178014900 178015200 0.0768 75 chr5 178016400 178017000 0.0768 75 chr5 178020000 178023300 0.0038 75 chr5 178025400 178025700 0.2462 83 chr5 178030800 178033200 0.0525 63 chr5 178035000 178036500 0.0798 78 chr5 178038000 178039200 0.0339 63 chr5 178045800 178046700 0.0563 61 chr5 178048800 178051500 0.0101 68 chr5 178052700 178053300 0.0582 63 chr5 178095600 178096500 0.1855 23 chr5 178395000 178396800 0 29 chr5 178448100 178448400 0.353 59 chr5 178525200 178525800 0.0081 146 chr5 178900500 178900800 0.1652 43 chr5 179313300 179313900 0.3369 67 chr5 179447100 179448900 0 65 chr5 179502000 179503500 0.0016 77 chr5 179514300 179514600 0.3211 85 chr5 179517000 179517300 0.2135 58 chr5 179634000 179637000 0 83 chr5 179641800 179642100 0.1638 31 chr5 179644200 179644500 0.0847 22 chr5 179646300 179646600 0.0184 76 chr5 179655600 179658300 0 90 chr5 179871900 179872200 0.4062 54 chr5 180486000 180486300 0.1785 43 chr5 180534600 180534900 0.3238 53 chr5 180615600 180615900 0.3881 58 chr5 180617400 180617700 0.2608 41 chr5 180658500 180658800 0.4082 208 chr5 180903300 180905700 0.0677 89 chr5 181088700 181091700 0 95 chr5 181095900 181098000 0 70 chr5 181101300 181104000 0 74 chr5 181160700 181161000 0.3683 20 chr5 181183200 181183500 0.246 58 chr5 181293000 181299300 0 80 chr5 181300800 181301700 0 88 chr5 181302900 181356300 0 88 chr5 181357500 181361400 0 156 chr5 181362600 181478400 0 156 chr6 60000 92700 0 90 chr6 93900 95400 0 90 chr6 97200 100200 0 90 chr6 101400 120900 0 90 chr6 122700 126600 0 78 chr6 127800 131400 0 78 chr6 132600 146700 0 78 chr6 424500 424800 0.4943 23 chr6 519300 520500 0 53 chr6 601200 602400 0 84 chr6 676200 676800 0.4435 54 chr6 861900 863700 0 432 chr6 909600 910500 0 37 chr6 1141800 1142400 0.2636 118 chr6 1234800 1235100 0.3159 67 chr6 1319100 1320900 0 42 chr6 1432200 1432500 0.0582 62 chr6 1534500 1534800 0.4392 66 chr6 1926900 1927200 0.4431 139 chr6 2418000 2423700 0 87 chr6 3090900 3093900 0 52 chr6 3153900 3154500 0.1225 75 chr6 3225000 3225300 0.0508 68 chr6 4050000 4050300 0.375 12 chr6 4194000 4194300 0.0713 65 chr6 4254600 4254900 0.3216 60 chr6 4329000 4329600 0.0691 69 chr6 4331700 4332000 0.2635 73 chr6 4572900 4573200 0.1706 83 chr6 4834200 4834500 0.281 97 chr6 5037000 5037600 0.1734 66 chr6 5135100 5135400 0.3886 12 chr6 5835000 5835300 0.3507 68 chr6 5888100 5889000 0.2776 74 chr6 6142500 6143400 0.1151 93 chr6 6186900 6189600 0.1821 70 chr6 6213900 6216000 0.0684 73 chr6 6261600 6262200 0.0069 196 chr6 6295500 6295800 0.2 77 chr6 6299100 6299400 0.2006 93 chr6 6429000 6429300 0.3075 62 chr6 7717200 7717500 0.1653 36 chr6 8216700 8217300 0.0513 69 chr6 8566800 8568000 0.1709 65 chr6 8770800 8775300 0 80 chr6 8827800 8828100 0.265 61 chr6 9813000 9813600 0.0706 68 chr6 9814800 9815100 0.0706 68 chr6 9968100 9970500 0.0997 79 chr6 14482200 14482800 0.3143 80 chr6 15188400 15189900 0.2131 53 chr6 15806400 15806700 0.1818 69 chr6 15984000 15984300 0.2923 39 chr6 16013700 16014000 0.1394 94 chr6 16860600 16862100 0 87 chr6 17434800 17435700 0.2116 72 chr6 18910800 18912900 0 74 chr6 19347300 19347600 0.018 23 chr6 19765200 19770900 0 74 chr6 20615100 20616600 0.0346 61 chr6 20959500 20959800 0.0644 850 chr6 21192000 21192300 0.2429 39 chr6 22176300 22177200 0.0258 87 chr6 22179000 22179600 0.0258 87 chr6 22461600 22461900 0.189 86 chr6 22930200 22930500 0.1429 23 chr6 23232900 23233200 0.1267 76 chr6 23300100 23300400 0.2228 59 chr6 23948700 23949300 0 25 chr6 24046500 24046800 0.2113 41 chr6 24469200 24469500 0.1092 54 chr6 24811800 24817800 0 88 chr6 26368800 26369100 0.2617 64 chr6 26634600 26635800 0.0151 69 chr6 26637000 26638200 0.0151 69 chr6 26671200 26738700 0 105 chr6 26746500 26747100 0.1105 46 chr6 26751600 26753700 0 48 chr6 26755800 26756100 0.1751 43 chr6 26757300 26757900 0.1587 56 chr6 26762700 26830500 0 76 chr6 26833800 26834100 0.1768 51 chr6 26844000 26844300 0.0693 55 chr6 26868900 26869200 0.2164 48 chr6 26876400 26876700 0.2134 46 chr6 26885100 26885400 0.0762 131 chr6 26894700 26895000 0.1943 82 chr6 26961000 26961300 0.1588 44 chr6 26999700 27000000 0.2605 74 chr6 27484200 27486300 0.1521 68 chr6 27945000 27945300 0.18 87 chr6 28022100 28022400 0.3418 81 chr6 28026000 28026300 0.074 115 chr6 28626900 28627200 0.4186 65 chr6 29115600 29115900 0.1653 84 chr6 29123100 29123700 0.004 64 chr6 29194200 29195700 0.0054 59 chr6 29717700 29719800 0 28 chr6 29847300 29847600 0.1708 19 chr6 29933400 29933700 0 21 chr6 30249600 30249900 0.1664 54 chr6 31244100 31245300 0 45 chr6 31389300 31389600 0.3019 79 chr6 31453800 31454400 0.088 49 chr6 31486200 31486800 0.1163 71 chr6 31815900 31817400 0 72 chr6 31828200 31829400 0 75 chr6 31853700 31855200 0.1357 97 chr6 31980900 31995600 0 81 chr6 31996800 32004300 0 78 chr6 32009100 32028300 0 80 chr6 32030400 32036700 0 92 chr6 32041800 32045700 0 75 chr6 32410200 32410800 0.3233 45 chr6 32579700 32580000 0.0357 15 chr6 32595300 32596200 0.4329 31 chr6 32657400 32657700 0.3328 24 chr6 33484500 33484800 0.0464 77 chr6 33525600 33525900 0.257 65 chr6 34397100 34397700 0.0343 68 chr6 35136600 35136900 0.0616 30 chr6 35384400 35385600 0.1501 77 chr6 35827500 35828700 0.0077 71 chr6 38963700 38964300 0 60 chr6 39456000 39457500 0 76 chr6 39458700 39459900 0 76 chr6 41130600 41130900 0.1673 80 chr6 41436300 41436600 0.3564 28 chr6 41985600 41985900 0.1198 29 chr6 42210300 42210600 0.336 51 chr6 42286500 42287100 0.1004 64 chr6 43580100 43580700 0.348 75 chr6 44181600 44182200 0.3613 81 chr6 44401800 44402100 0.3517 59 chr6 44752800 44753100 0.1215 83 chr6 44757300 44757600 0.4849 62 chr6 44871300 44876400 0 107 chr6 44893800 44894100 0.2815 42 chr6 45063900 45065400 0.1079 82 chr6 45066600 45068100 0.1079 82 chr6 45670200 45671400 0.0291 96 chr6 45672900 45674400 0.0291 96 chr6 46213800 46214400 0.0346 73 chr6 47051100 47051700 0.2321 73 chr6 47505900 47506500 0.105 74 chr6 47758800 47759100 0.1871 34 chr6 47889000 47889300 0.1394 47 chr6 48365100 48368700 0.0464 77 chr6 48495300 48495900 0.298 41 chr6 48738900 48742500 0.0812 107 chr6 48901200 48902100 0.0042 79 chr6 49391100 49391400 0.318 68 chr6 49765800 49766100 0.1187 92 chr6 50894400 50895000 0.2071 67 chr6 51127200 51127500 0.2256 53 chr6 51652500 51652800 0.3169 35 chr6 51874800 51880800 0 94 chr6 51981900 51982500 0.2871 76 chr6 52205400 52205700 0.1756 119 chr6 52757100 52757400 0.0548 61 chr6 52798200 52798800 0.1698 77 chr6 52922700 52923000 0.4413 69 chr6 54838500 54839100 0.0611 79 chr6 54963900 54964500 0.0537 82 chr6 54965700 54967200 0.0537 82 chr6 54999600 54999900 0.0547 18 chr6 55365300 55365600 0.1562 63 chr6 55366800 55367100 0.1145 83 chr6 55543200 55543500 0.0161 132 chr6 55648500 55648800 0.2939 60 chr6 56114700 56115000 0.3573 86 chr6 56893800 56894100 0.0002 45 chr6 56895300 56895900 0.0002 45 chr6 57046800 57048000 0 71 chr6 57090300 57091500 0 69 chr6 57378900 57379200 0.2217 52 chr6 57404100 57405000 0.1455 55 chr6 57554100 57554400 0.2176 47 chr6 57556800 57557100 0.3493 62 chr6 57565200 57565500 0.2315 53 chr6 57797700 57799500 0 50 chr6 57820800 57822300 0.0498 62 chr6 57830700 57831000 0.2041 63 chr6 57880800 57881400 0.2247 55 chr6 57909900 57910200 0.2349 47 chr6 57939600 57939900 0.21 58 chr6 58014900 58015200 0.3159 58 chr6 58449900 58453500 0 2483 chr6 58554000 58554600 0 4686 chr6 58555800 59508000 0 4686 chr6 59509200 59829900 0 4686 chr6 60240300 60241800 0.4873 537 chr6 60280500 60280800 0.0624 42 chr6 60306300 60307200 0 62 chr6 60446700 60447000 0.1657 44 chr6 60449400 60449700 0.2641 58 chr6 60459000 60459300 0.1869 58 chr6 60463800 60464100 0.2461 44 chr6 60510600 60510900 0.0481 60 chr6 60533700 60534300 0 43 chr6 60703800 60704700 0.1224 68 chr6 60804000 60804300 0.1391 68 chr6 60861300 60863400 0.0555 82 chr6 60936900 60937200 0.2629 51 chr6 61322700 61356900 0 78 chr6 61425000 61473300 0 94 chr6 61480800 61492800 0 38 chr6 61673400 61674000 0.1961 68 chr6 62063700 62064000 0.3536 81 chr6 62532900 62533200 0.2894 46 chr6 63408300 63408600 0.2112 75 chr6 63419700 63420000 0.4141 80 chr6 64704300 64704600 0.3782 41 chr6 64942200 64942500 0.1266 48 chr6 65256600 65257200 0.0787 82 chr6 65303100 65305200 0.1183 78 chr6 65308200 65308500 0.1084 45 chr6 65314200 65314500 0.2137 54 chr6 65315700 65316000 0.322 62 chr6 65550300 65552100 0 66 chr6 66077700 66078300 0.0806 60 chr6 66602700 66603600 0.1241 63 chr6 66864000 66864300 0.1548 48 chr6 68288700 68289300 0.2133 70 chr6 68432400 68433000 0.0257 62 chr6 68517900 68518200 0.0584 66 chr6 69516000 69516300 0.1814 58 chr6 69518700 69520800 0.1506 60 chr6 69556500 69556800 0.2525 68 chr6 70010700 70016100 0 93 chr6 70767600 70767900 0.1926 45 chr6 70786200 70786500 0.1454 56 chr6 71128500 71129400 0.1723 76 chr6 71265600 71265900 0.3378 64 chr6 71827500 71827800 0.1386 58 chr6 72110400 72110700 0.2283 69 chr6 72571200 72576000 0 96 chr6 72801300 72801600 0.1571 44 chr6 72988800 72994500 0 94 chr6 73436400 73436700 0.0533 563 chr6 73711500 73711800 0.2965 18 chr6 73839600 73840200 0.1342 51 chr6 73920300 73920900 0.1106 85 chr6 73959600 73959900 0.4036 77 chr6 74097900 74099400 0.1272 70 chr6 74155800 74156700 0 88 chr6 74209200 74209800 0.2002 86 chr6 74246700 74247300 0.1077 44 chr6 75248100 75248400 0.0856 22 chr6 76109100 76109400 0.0177 84 chr6 76891200 76891500 0.2002 56 chr6 76964100 76964700 0.0584 63 chr6 76976700 76977300 0.0957 65 chr6 77043600 77044800 0.0338 73 chr6 77157900 77158200 0.4027 41 chr6 77591100 77591400 0.0826 12 chr6 77717100 77726100 0 120 chr6 78128100 78128400 0.231 36 chr6 78543600 78543900 0.2075 60 chr6 78858900 78859500 0.0289 95 chr6 78976800 78977100 0.1046 66 chr6 80571000 80571600 0.0334 69 chr6 80800800 80801100 0.0437 83 chr6 80802300 80803800 0.0437 83 chr6 80916900 80920800 0 89 chr6 81663300 81665100 0.1082 71 chr6 82392300 82392900 0.0308 45 chr6 82394100 82394400 0.0308 45 chr6 82560300 82561200 0.0628 87 chr6 82563600 82563900 0.3122 61 chr6 83318400 83319000 0.0844 70 chr6 83334300 83339700 0 75 chr6 83798100 83798400 0.0641 86 chr6 83800200 83800500 0.0641 86 chr6 83802300 83802600 0.0641 86 chr6 84243900 84244200 0.2091 61 chr6 84365100 84365400 0.3172 68 chr6 84608400 84609000 0 53 chr6 84610200 84614400 0 53 chr6 84628800 84630600 0.0817 87 chr6 85986000 85986600 0 68 chr6 85999200 86004600 0 84 chr6 86022900 86023200 0.2561 70 chr6 86052600 86052900 0.1047 23 chr6 86211900 86212500 0.3875 81 chr6 86645700 86648400 0.0019 81 chr6 86667300 86667600 0.2147 56 chr6 86811000 86811600 0.1674 76 chr6 87010500 87010800 0.1965 53 chr6 87326700 87327900 0.1709 92 chr6 87750600 87750900 0.0526 66 chr6 88319400 88319700 0.3696 78 chr6 88381800 88382400 0.0092 87 chr6 88449000 88449300 0.1695 49 chr6 88773000 88773300 0.3397 69 chr6 88946700 88949100 0.0183 94 chr6 89225400 89230500 0 80 chr6 91047600 91047900 0.1682 61 chr6 91049100 91049400 0.3149 55 chr6 91870500 91870800 0.2793 63 chr6 92098200 92098500 0.4395 41 chr6 92984100 92984400 0.2718 95 chr6 93632700 93633900 0.1909 86 chr6 93636000 93636300 0.1458 80 chr6 93865800 93871500 0.0015 112 chr6 94198200 94203900 0 71 chr6 94911000 94911900 0.2748 65 chr6 95303100 95303400 0.4679 22 chr6 95363400 95363700 0.2452 50 chr6 95665200 95667300 0 57 chr6 95760600 95763900 0.0022 88 chr6 95979900 95983800 0.053 109 chr6 98417100 98417400 0.1534 66 chr6 98420100 98421600 0.0038 79 chr6 98705700 98706000 0.2628 84 chr6 98867100 98868000 0.2128 60 chr6 99142500 99142800 0.0614 55 chr6 99649500 99649800 0.13 76 chr6 99824400 99825600 0.0017 104 chr6 99827700 99829500 0.0591 58 chr6 100198500 100198800 0.0371 85 chr6 100200000 100200300 0.0371 85 chr6 100201800 100202400 0.0995 76 chr6 100357200 100360200 0.1343 71 chr6 102090000 102090300 0.2451 73 chr6 102334500 102334800 0.2204 74 chr6 102463800 102464400 0.0748 49 chr6 102609900 102610200 0.3557 66 chr6 102722700 102723000 0.1089 86 chr6 102724200 102724500 0.1089 86 chr6 102753000 102753300 0.1523 56 chr6 102755100 102756600 0.0616 69 chr6 103192800 103193100 0.3945 86 chr6 103654800 103656000 0.0509 57 chr6 103710000 103714800 0.0353 85 chr6 104452800 104457000 0 98 chr6 104490300 104495400 0 84 chr6 104741400 104741700 0.2623 71 chr6 105120000 105120300 0.4577 11 chr6 105720300 105720600 0.2474 107 chr6 105823800 105824100 0.1556 17 chr6 106401600 106402500 0.0801 70 chr6 106720800 106721100 0.0561 63 chr6 106723200 106723500 0.1067 59 chr6 107519100 107519400 0.3449 52 chr6 107783100 107783700 0.0725 50 chr6 107856300 107856600 0.3152 66 chr6 107858100 107859900 0.0829 95 chr6 107887200 107887500 0.252 49 chr6 109047000 109047600 0.3149 93 chr6 109246500 109248000 0.0859 87 chr6 109249500 109249800 0.0859 87 chr6 109621200 109621800 0.0213 67 chr6 110155800 110158500 0 69 chr6 110231700 110232000 0.2864 43 chr6 111904200 111905700 0.1098 75 chr6 111906900 111907500 0.0385 75 chr6 112033200 112033500 0.3596 110 chr6 112508400 112509000 0.0576 65 chr6 112703700 112709400 0 104 chr6 112814700 112818900 0 70 chr6 112872300 112872900 0.0398 83 chr6 112915200 112918200 0.0019 94 chr6 113228100 113229000 0.0377 72 chr6 113230200 113231100 0.0377 72 chr6 113535300 113536500 0.0703 80 chr6 113605800 113607300 0.0141 78 chr6 114722400 114723000 0 65 chr6 114725400 114726000 0.1428 50 chr6 114801600 114802200 0.0396 63 chr6 115010400 115011300 0.0367 58 chr6 115034400 115034700 0.2977 99 chr6 115085400 115085700 0.1162 62 chr6 115578900 115580100 0.053 66 chr6 115960800 115965900 0 127 chr6 116693700 116694000 0.3592 91 chr6 116822100 116822700 0.134 70 chr6 117092400 117093000 0.1095 85 chr6 117102300 117108000 0 69 chr6 117183900 117184200 0.339 77 chr6 117187200 117187500 0.3511 129 chr6 117246600 117249000 0 70 chr6 117250200 117250500 0 70 chr6 117707400 117707700 0.0996 55 chr6 117709200 117709500 0.4168 51 chr6 117924000 117924300 0.4658 88 chr6 117998100 117998400 0.2076 79 chr6 118128000 118128300 0.2139 78 chr6 118646100 118646400 0.3011 2638 chr6 120691800 120693000 0.348 88 chr6 120694200 120694500 0.4228 43 chr6 121162800 121168200 0 97 chr6 121568400 121568700 0.1904 64 chr6 121623300 121623600 0.2771 122 chr6 122847900 122848500 0.1044 74 chr6 122889000 122889600 0.079 112 chr6 123180600 123181500 0.0749 61 chr6 123444300 123445800 0.0321 80 chr6 123475200 123475800 0.0837 78 chr6 123477000 123477300 0.0837 78 chr6 124165800 124167300 0.0637 92 chr6 124177800 124178100 0.1002 20 chr6 124728300 124728600 0.0543 57 chr6 124840200 124841100 0.0048 70 chr6 125288700 125289300 0.1746 219 chr6 125319000 125322000 0.0003 82 chr6 125387700 125389800 0 54 chr6 127596000 127596300 0.1972 79 chr6 127617000 127618200 0.188 83 chr6 128668800 128669100 0.2237 55 chr6 128906100 128907300 0.0526 87 chr6 128908500 128909700 0.0526 87 chr6 128922900 128923200 0.2843 75 chr6 128998500 129004500 0 86 chr6 129168000 129169800 0.1454 90 chr6 129171600 129172200 0.1454 90 chr6 131143800 131144100 0.1589 69 chr6 131698200 131703000 0 101 chr6 131704200 131705400 0 101 chr6 131707200 131711700 0 101 chr6 131714400 131714700 0.348 62 chr6 131857200 131857500 0.2645 82 chr6 133020900 133026600 0 93 chr6 133050300 133050600 0.4998 25 chr6 133470000 133473000 0 67 chr6 133520400 133521900 0.0836 93 chr6 133650000 133653000 0.0038 83 chr6 133664100 133666200 0.0039 74 chr6 134659200 134659800 0.0764 65 chr6 135511200 135511500 0.2161 83 chr6 135980700 135981000 0.3688 62 chr6 136851000 136853100 0.0091 74 chr6 138189900 138190200 0.2097 268 chr6 138823800 138824100 0.3046 49 chr6 140681100 140683200 0 58 chr6 140877900 140878200 0.1244 75 chr6 141567600 141571500 0.0207 128 chr6 141619200 141619800 0.0675 66 chr6 141621000 141621300 0.0675 66 chr6 141748800 141750300 0.3321 70 chr6 141818700 141819000 0.4172 85 chr6 141820200 141820500 0.4172 85 chr6 141918300 141918600 0.036 87 chr6 141920400 141921000 0.2144 63 chr6 141922200 141922800 0.0347 61 chr6 141926700 141927900 0.0047 68 chr6 142422600 142424700 0.0632 79 chr6 143213400 143213700 0.3971 347 chr6 143303700 143304000 0.3926 60 chr6 145072800 145073700 0.1134 82 chr6 145503300 145505100 0.0346 68 chr6 145665000 145667400 0.0236 80 chr6 145770000 145770600 0.019 65 chr6 145852500 145855200 0.1249 106 chr6 145983000 145983300 0.2994 70 chr6 147720900 147721200 0.1935 44 chr6 148160100 148160700 0.0671 65 chr6 148738200 148738800 0 52 chr6 149944500 149944800 0.1911 78 chr6 150022200 150023100 0.075 59 chr6 150198000 150198300 0.4605 104 chr6 151847400 151848300 0.1339 56 chr6 151931700 151932600 0.099 82 chr6 152633700 152634000 0.2986 67 chr6 152709000 152712600 0 69 chr6 152987700 152989500 0.0146 55 chr6 153914400 153914700 0.467 93 chr6 154524900 154525200 0.2254 83 chr6 156011100 156011400 0.2656 63 chr6 156034500 156039900 0 77 chr6 156178800 156179100 0.3188 44 chr6 156325200 156330300 0.013 69 chr6 156362100 156367200 0 95 chr6 157283700 157284000 0.3457 87 chr6 157311300 157312200 0.1232 217 chr6 158127300 158127900 0 48 chr6 158238600 158240400 0.0125 60 chr6 159457500 159457800 0.3288 71 chr6 159547200 159549600 0.0104 67 chr6 159652200 159652500 0.3162 30 chr6 160091100 160091400 0.4626 48 chr6 160100700 160101000 0.1063 434 chr6 160409100 160409400 0.1139 50 chr6 160611900 160646700 0 282 chr6 160680300 160680600 0.2399 74 chr6 161646000 161646300 0.2316 45 chr6 161874000 161874300 0 114 chr6 161900400 161900700 0.1605 28 chr6 161982300 161983800 0 86 chr6 162074100 162074400 0.3143 11 chr6 162838800 162844200 0 108 chr6 162990900 162994200 0.0015 86 chr6 164076600 164076900 0.4418 71 chr6 164798100 164798700 0.1733 86 chr6 165123300 165123600 0.131 83 chr6 165303600 165306300 0 81 chr6 165370200 165370500 0.149 152 chr6 166426200 166426800 0.0281 83 chr6 166428300 166428600 0.1091 133 chr6 166585500 166586100 0.0225 56 chr6 166748700 166749300 0.3654 24 chr6 166783800 166784400 0.2166 42 chr6 167084700 167085000 0.1878 88 chr6 167170800 167171100 0.2234 63 chr6 167175900 167176800 0.0701 72 chr6 167181300 167183400 0.0968 71 chr6 167204400 167204700 0.1593 52 chr6 167319600 167319900 0.1408 48 chr6 167332500 167335200 0.084 94 chr6 167358000 167358600 0.108 45 chr6 167374500 167374800 0.3031 65 chr6 167376600 167376900 0.0005 19 chr6 167378100 167381400 0.1818 70 chr6 167383800 167384400 0.2228 64 chr6 167389500 167389800 0.1303 13 chr6 167423700 167424000 0.1499 17 chr6 167562300 167562600 0.3071 72 chr6 167940300 167941500 0.1299 137 chr6 167977500 167977800 0.2755 60 chr6 168235200 168235500 0.459 48 chr6 168245700 168246300 0.2571 69 chr6 168316500 168318000 0 80 chr6 168560700 168562200 0.0944 33 chr6 168572100 168573300 0.4135 55 chr6 168592800 168594900 0.0205 105 chr6 168653700 168655200 0.0073 72 chr6 168693000 168693300 0.1718 55 chr6 168694800 168695100 0.2563 55 chr6 168840600 168840900 0.3667 73 chr6 168846900 168847800 0.1791 138 chr6 168931800 168932100 0.465 61 chr6 168942000 168942300 0.4958 50 chr6 168976800 168977100 0.0725 74 chr6 168978300 168978600 0.0725 74 chr6 168991500 168991800 0.4809 28 chr6 169032900 169033200 0.1067 33 chr6 169377000 169377600 0.2309 60 chr6 169425300 169425600 0.4766 28 chr6 169900500 169901100 0.3103 58 chr6 169987500 169988400 0.1783 62 chr6 170064900 170065200 0.2219 28 chr6 170145900 170146500 0.1753 220 chr6 170190900 170191200 0.4364 41 chr6 170214900 170220600 0 115 chr6 170246400 170246700 0.0675 20 chr6 170266800 170267700 0.2964 28 chr6 170377200 170377800 0.3651 192 chr6 170495400 170495700 0.4323 107 chr6 170612100 170626500 0 88 chr6 170627700 170701200 0 88 chr6 170703300 170705700 0 88 chr6 170706900 170709900 0 88 chr6 170712600 170736600 0 111 chr6 170738400 170745900 0 75 chr7 9900 32700 0 109 chr7 36300 36900 0.0115 95 chr7 38700 39000 0.2265 80 chr7 47400 49500 0.0555 77 chr7 73200 73500 0.1026 55 chr7 74700 75000 0.1026 55 chr7 103200 104100 0.0292 49 chr7 172800 173100 0.4245 44 chr7 207000 207300 0.3256 53 chr7 215400 216000 0.2207 18 chr7 221400 222000 0 22 chr7 243300 243600 0.0643 29 chr7 361500 361800 0.2079 30 chr7 393600 393900 0.3259 76 chr7 419700 420000 0.2812 24 chr7 470400 471000 0.1143 12 chr7 478800 479100 0.2156 15 chr7 552000 552300 0.4445 97 chr7 608700 609000 0.2257 45 chr7 636000 636300 0.1177 51 chr7 747900 748200 0.0804 29 chr7 847500 847800 0.4073 41 chr7 889800 890100 0.3444 21 chr7 906000 906600 0.4403 82 chr7 933900 934200 0.4899 20 chr7 990000 990300 0.2444 18 chr7 1016100 1016400 0.4313 41 chr7 1031400 1031700 0.3394 23 chr7 1037700 1040100 0.0868 91 chr7 1069500 1070100 0.0781 70 chr7 1107900 1108200 0.1939 41 chr7 1116600 1117500 0.244 105 chr7 1145400 1148100 0 100 chr7 1156200 1156500 0.0433 20 chr7 1272000 1274100 0.0192 338 chr7 1319700 1320300 0.0851 55 chr7 1861500 1861800 0.0133 56 chr7 1929900 1930500 0.264 30 chr7 1937700 1938000 0.0247 68 chr7 1990800 1991400 0 67 chr7 2035500 2035800 0 71 chr7 2058000 2058300 0.4896 17 chr7 2278800 2279100 0.2426 57 chr7 3708300 3708600 0.0944 61 chr7 3813600 3813900 0.1099 76 chr7 3815100 3815400 0.1099 76 chr7 3975900 3977100 0.0393 150 chr7 4263600 4263900 0.235 37 chr7 4313100 4313400 0.1439 35 chr7 4545000 4545300 0.1479 110 chr7 4582500 4599900 0 89 chr7 5121000 5121300 0.171 60 chr7 5156400 5156700 0.0014 64 chr7 5160300 5160600 0.0059 64 chr7 5449200 5449500 0.2004 31 chr7 5548800 5549100 0.2418 40 chr7 5847600 5847900 0.3923 69 chr7 5898900 5899200 0.0431 68 chr7 5901000 5901300 0.1358 28 chr7 5915700 5925300 0 95 chr7 5929500 5930700 0 80 chr7 5932200 5937000 0 80 chr7 5938500 5940900 0 80 chr7 5945700 5957700 0 81 chr7 5958900 5976900 0 81 chr7 5979900 5980800 0.0055 60 chr7 6744300 6744900 0.0069 65 chr7 6747900 6780300 0 84 chr7 6782400 6786300 0 84 chr7 6787500 6792900 0 84 chr7 6794400 6795600 0 84 chr7 6798000 6800100 0 73 chr7 6801300 6809400 0 73 chr7 6811200 6811500 0.271 30 chr7 6825300 6826200 0.1925 68 chr7 7465500 7470600 0 87 chr7 7544400 7545000 0 79 chr7 8299200 8299500 0.189 74 chr7 8301000 8301300 0.189 74 chr7 8303400 8303700 0.0384 103 chr7 8352300 8353800 0.0927 104 chr7 9400200 9400800 0.0164 73 chr7 9402300 9402600 0.165 70 chr7 9595200 9596100 0 40 chr7 9740100 9740400 0.2178 58 chr7 9808500 9809100 0.0109 102 chr7 10166700 10167900 0.1348 73 chr7 10170300 10171200 0.0227 86 chr7 10464900 10465500 0.002 40 chr7 10566900 10567200 0.3312 68 chr7 10589700 10590000 0.3128 77 chr7 12183000 12183300 0.114 74 chr7 12485100 12485700 0.0209 61 chr7 12501600 12502200 0.0403 72 chr7 13085700 13086000 0.0857 67 chr7 13203000 13203300 0.4742 43 chr7 13272300 13272600 0.2344 61 chr7 13630800 13631100 0.0632 35 chr7 13650000 13650300 0.3013 149 chr7 13768500 13769700 0.1829 59 chr7 13808400 13808700 0.404 77 chr7 14211600 14212200 0.0039 31 chr7 14281800 14282400 0.0461 96 chr7 14316300 14318100 0.0044 87 chr7 14650200 14650500 0.0571 63 chr7 14651700 14652000 0.0571 63 chr7 14706000 14708100 0.0319 78 chr7 15529800 15530400 0.0058 35 chr7 15549000 15549300 0.2687 92 chr7 15550800 15551100 0.2687 92 chr7 15944100 15945300 0.2446 177 chr7 16197900 16198500 0.1405 78 chr7 16217400 16220700 0.1044 77 chr7 16789200 16789800 0 58 chr7 17017500 17018700 0.2141 68 chr7 18105300 18105600 0.2406 47 chr7 18985800 18986700 0.0005 84 chr7 19197900 19198200 0.3962 90 chr7 19458900 19459800 0.105 79 chr7 19683600 19683900 0.1765 79 chr7 19686900 19687200 0.2136 71 chr7 20002800 20003100 0.2783 72 chr7 20538600 20538900 0.4337 67 chr7 20668800 20669700 0.3009 76 chr7 22494000 22494300 0.3483 42 chr7 22530600 22534200 0 81 chr7 22801500 22801800 0.1765 85 chr7 23036700 23042400 0.0119 104 chr7 23324400 23325000 0.0826 105 chr7 23637000 23637900 0.2861 30 chr7 23952600 23952900 0.2821 63 chr7 24001500 24004800 0 61 chr7 24355800 24356100 0.1198 36 chr7 24584100 24584400 0.2864 109 chr7 24638400 24638700 0.2392 43 chr7 24675600 24675900 0.2302 21 chr7 25005000 25005300 0 12 chr7 25018200 25019700 0.0675 38 chr7 25041900 25047600 0 168 chr7 25601700 25602300 0.0765 86 chr7 25605600 25608900 0.0005 98 chr7 25744500 25744800 0.085 62 chr7 25748100 25749600 0.1497 99 chr7 26176500 26176800 0.4793 63 chr7 26283900 26284200 0.3128 12 chr7 27743700 27744000 0.3185 23 chr7 28839000 28839300 0.1022 68 chr7 29580600 29584200 0.0215 151 chr7 29961300 29961600 0.109 63 chr7 30056100 30056400 0.2721 90 chr7 30416400 30417000 0.1592 72 chr7 30439500 30445200 0 122 chr7 30637200 30638400 0.0222 92 chr7 30640200 30641100 0.0222 92 chr7 31484400 31485600 0 60 chr7 31586100 31586400 0.3916 67 chr7 31624200 31624500 0.2871 55 chr7 32350500 32353500 0 87 chr7 32386200 32386800 0.0911 69 chr7 32465100 32467500 0.0163 86 chr7 32469300 32469900 0.0163 86 chr7 32684400 32685000 0 88 chr7 32698800 32699400 0.1687 51 chr7 32712000 32713800 0 79 chr7 32737800 32738100 0.3023 15 chr7 32825100 32825400 0.0593 86 chr7 33170100 33170400 0.4079 81 chr7 33523200 33524100 0.002 85 chr7 33525300 33525900 0.2088 72 chr7 33859200 33859500 0.3592 22 chr7 33988800 33989100 0.2844 33 chr7 33990900 33992100 0.3575 77 chr7 34170600 34170900 0.2779 70 chr7 34200300 34201800 0.0535 78 chr7 34266600 34267800 0.0598 83 chr7 34517700 34518600 0.0327 101 chr7 34790700 34791000 0.0705 38 chr7 34799700 34801500 0 32 chr7 34816200 34817700 0 40 chr7 34907700 34908000 0.1849 55 chr7 34910700 34911300 0.255 70 chr7 34954800 34955100 0.4134 39 chr7 35045400 35045700 0.4207 37 chr7 35116200 35116800 0.0565 59 chr7 36554700 36555300 0.188 100 chr7 36556500 36556800 0.3222 59 chr7 37293000 37293300 0.0411 20 chr7 37298700 37300800 0 72 chr7 37612500 37614000 0.1009 106 chr7 37615200 37616400 0.1009 106 chr7 37807500 37807800 0.1103 78 chr7 37959000 37959300 0.3808 34 chr7 38028600 38029500 0.0213 110 chr7 38473500 38473800 0.4838 20 chr7 38696100 38696400 0.144 64 chr7 39010500 39011700 0.2235 82 chr7 39274500 39274800 0.0573 77 chr7 39677400 39678000 0.0628 47 chr7 39853200 39853800 0.003 61 chr7 42786600 42786900 0.1812 81 chr7 43060200 43060500 0.0833 88 chr7 43063200 43064700 0.0833 88 chr7 43413000 43414500 0.0142 76 chr7 43415700 43416000 0.1324 85 chr7 43777200 43777500 0.19 103 chr7 44002800 44003400 0.0402 99 chr7 44031600 44031900 0.2768 94 chr7 44033100 44033400 0.3523 82 chr7 44198700 44199000 0.2556 59 chr7 45083400 45084300 0 58 chr7 45811200 45812700 0.2273 59 chr7 45948300 45948600 0.1165 19 chr7 46821300 46825500 0 81 chr7 47111700 47112300 0 23 chr7 48850500 48851100 0.0168 44 chr7 48864000 48864600 0.2291 78 chr7 48907800 48908100 0.096 72 chr7 48921600 48921900 0.2635 58 chr7 49534800 49535100 0.1129 50 chr7 49680300 49686300 0 86 chr7 50122200 50122500 0.2895 79 chr7 50901600 50903700 0.1206 72 chr7 51891300 51891600 0.2739 72 chr7 51894300 51895200 0.0748 39 chr7 52892700 52893300 0.1276 76 chr7 53027100 53029500 0.1372 82 chr7 54221400 54222900 0 77 chr7 54224100 54231000 0 77 chr7 54311400 54321000 0 76 chr7 55219200 55221300 0.0054 93 chr7 55401900 55402200 0.242 82 chr7 55472700 55473000 0.2419 76 chr7 55747200 55747500 0.3106 55 chr7 56370300 56374800 0 2733 chr7 56377800 56378100 0.2242 66 chr7 56586600 56590500 0.0033 115 chr7 56748300 56748900 0.0147 67 chr7 56750100 56750700 0.0367 55 chr7 56813700 56814000 0.1092 24 chr7 56817900 56823000 0 86 chr7 56833800 56834100 0.0231 62 chr7 56835900 56836500 0.1518 47 chr7 56842500 56842800 0.1862 75 chr7 56844900 56845200 0.012 63 chr7 56848200 56849100 0.1799 54 chr7 56852400 56853000 0.1036 59 chr7 56854200 56854500 0.2435 62 chr7 56866200 56870100 0.1263 71 chr7 56878200 56878800 0.0009 68 chr7 56883000 56886000 0 72 chr7 56888100 56889300 0.1257 65 chr7 56891100 56891400 0.029 79 chr7 56894100 56894400 0.2358 67 chr7 56902200 56903700 0.0097 50 chr7 56907900 56909100 0.04 75 chr7 56914500 56914800 0.0373 61 chr7 56916600 56916900 0.0373 61 chr7 56922000 56922300 0 85 chr7 56924400 56930400 0 85 chr7 56931600 56932500 0 85 chr7 56933700 56945100 0 85 chr7 56946300 56951100 0 71 chr7 56952900 56953200 0 69 chr7 56954700 56956200 0 69 chr7 56957400 56969400 0 78 chr7 56970900 56973300 0.0061 65 chr7 56974800 56993400 0 86 chr7 56997000 56997300 0 53 chr7 57004800 57005400 0 29 chr7 57007200 57007500 0 29 chr7 57009600 57009900 0 29 chr7 57012000 57012300 0 29 chr7 57014400 57036000 0 84 chr7 57037200 57045300 0 67 chr7 57046500 57048000 0 67 chr7 57050700 57051300 0 60 chr7 57053400 57053700 0.1754 57 chr7 57064800 57065100 0.2785 60 chr7 57068100 57075000 0 81 chr7 57077400 57078600 0 81 chr7 57079800 57081000 0 81 chr7 57083100 57083400 0 81 chr7 57090000 57090300 0.2578 58 chr7 57486000 57490200 0.1814 475 chr7 57491400 57497100 0.1739 557 chr7 57509100 57509400 0.123 16 chr7 57611100 57638100 0 175 chr7 57639900 57640200 0.1295 68 chr7 57827400 57853800 0 219 chr7 57898200 57899100 0.2466 17 chr7 57937500 57937800 0.4875 177 chr7 57945600 57945900 0.3198 61 chr7 57983400 57985200 0.0118 63 chr7 58036500 58036800 0.3405 393 chr7 58096800 58097100 0.2401 127 chr7 58170000 58177200 0 1801 chr7 58179300 58189500 0 1801 chr7 58191300 58515000 0 1801 chr7 58516200 58541100 0 1801 chr7 58542300 58727100 0 1010 chr7 58728600 58796100 0 4073 chr7 58797300 58912200 0 4073 chr7 58913400 58926900 0 4073 chr7 58928100 59028900 0 4073 chr7 59030100 59112000 0 4073 chr7 59113500 59127600 0 4073 chr7 59128800 59249100 0 1772 chr7 59250300 59253900 0 1772 chr7 59255100 59355300 0 2549 chr7 59356500 59509200 0 4155 chr7 59511300 59680800 0 321 chr7 59682600 59752800 0 2715 chr7 59754000 59824500 0 2715 chr7 59826000 59888400 0 2715 chr7 59889600 59891400 0 2715 chr7 59892600 59951400 0 2715 chr7 59952600 59958600 0 2715 chr7 59959800 60038100 0 2715 chr7 60039300 60117600 0 854 chr7 60118800 60303900 0 1800 chr7 60305100 60469800 0 1800 chr7 60471000 60478200 0 1800 chr7 60480000 60573000 0 1901 chr7 60574200 60828300 0 1355 chr7 60878400 60911400 0 68 chr7 61031400 61031700 0.4806 129 chr7 61072800 61074900 0 65 chr7 61115700 61116900 0 64 chr7 61118400 61130100 0 87 chr7 61131300 61135800 0 87 chr7 61137000 61139700 0 71 chr7 61141200 61182900 0 208 chr7 61184100 61194300 0 208 chr7 61195800 61249500 0 208 chr7 61250700 61260900 0 208 chr7 61262100 61262400 0 208 chr7 61264500 61266000 0 38 chr7 61268100 61281000 0 232 chr7 61282500 61327800 0 232 chr7 61380000 61404000 0 424 chr7 61405200 61422000 0 424 chr7 61423200 61500600 0 213 chr7 61501800 61512900 0 111 chr7 61514100 61527600 0 175 chr7 61578000 61725000 0 93 chr7 61728900 61729500 0.0075 65 chr7 61758300 61763700 0 70 chr7 61764900 61765200 0.2271 75 chr7 61768200 61768500 0.0159 69 chr7 61777800 61779300 0 62 chr7 61795800 61797600 0.0166 62 chr7 61799400 61799700 0.3661 56 chr7 61802400 61805100 0.1708 71 chr7 61806300 61811400 0 74 chr7 61812900 61813200 0.0964 42 chr7 61838400 61843500 0 103 chr7 61867800 61868400 0.1028 39 chr7 61967700 61970400 0.0117 52 chr7 61972500 61976100 0 266 chr7 62026500 62027400 0 63 chr7 62030400 62036400 0 95 chr7 62037600 62041500 0 95 chr7 62043000 62057700 0 95 chr7 62058900 62113800 0 95 chr7 62115000 62146500 0 95 chr7 62147700 62151900 0 95 chr7 62153100 62153400 0.0151 72 chr7 62158500 62159100 0.0092 69 chr7 62177400 62184300 0 80 chr7 62187300 62187600 0.1349 62 chr7 62190000 62191800 0 87 chr7 62209500 62210100 0.0356 77 chr7 62211900 62212200 0.2175 56 chr7 62214900 62216400 0 64 chr7 62219400 62226000 0 69 chr7 62264100 62264400 0.323 80 chr7 62270700 62271000 0.1631 23 chr7 62277300 62292600 0 166 chr7 62295300 62295600 0.475 163 chr7 62333100 62333400 0.1268 68 chr7 62335200 62335500 0.2233 276 chr7 62360700 62375700 0 181 chr7 62402700 62403000 0.2544 768 chr7 62454600 62454900 0.2631 1117 chr7 62506800 62511300 0 474 chr7 62516100 62516400 0.0401 33 chr7 62544000 62544300 0.065 10 chr7 62588100 62588400 0.1264 53 chr7 62607600 62608200 0.2776 75 chr7 63122100 63122400 0.0224 42 chr7 63149100 63154800 0 74 chr7 63292500 63305400 0 84 chr7 63306900 63365400 0 84 chr7 63382800 63456000 0 82 chr7 63471300 63471600 0.2879 64 chr7 63484800 63485100 0.0576 20 chr7 63486900 63493800 0 74 chr7 63495300 63502800 0 74 chr7 63505500 63505800 0.0307 51 chr7 63515400 63515700 0.1506 48 chr7 63516900 63517500 0.025 63 chr7 63525600 63526200 0.1109 69 chr7 63529200 63531900 0 70 chr7 63533100 63553800 0 97 chr7 63555000 63555300 0.124 49 chr7 63556500 63558900 0 69 chr7 63561300 63561900 0.0251 56 chr7 63583500 63610200 0 78 chr7 63611400 63627900 0 87 chr7 63629400 63630600 0 87 chr7 63632400 63653100 0 87 chr7 63660000 63660300 0.0127 60 chr7 63662100 63662400 0.0127 60 chr7 63667800 63669600 0 62 chr7 63673200 63674700 0.0135 60 chr7 63676800 63677700 0.0302 52 chr7 63679800 63680100 0.1467 62 chr7 63681300 63682800 0.0623 50 chr7 63685200 63686100 0.0364 51 chr7 63687600 63688800 0.001 73 chr7 63690900 63693900 0.001 73 chr7 63698100 63698700 0.0229 69 chr7 63701100 63701400 0.2461 39 chr7 63705300 63705600 0.1504 60 chr7 63706800 63708000 0.1504 60 chr7 63709500 63710700 0.1407 54 chr7 63723900 63724500 0.1352 65 chr7 63727800 63728700 0.2301 78 chr7 63731400 63732300 0 67 chr7 63739200 63739500 0.0707 55 chr7 63740700 63741000 0.0707 55 chr7 63742800 63743400 0.16 74 chr7 63750000 63751200 0.0376 77 chr7 63753600 63765000 0 192 chr7 63768300 63768900 0.2262 50 chr7 63770700 63771000 0.2639 47 chr7 63774000 63774300 0.3333 15 chr7 63776700 63777000 0.0265 33 chr7 63825000 63825600 0.0347 54 chr7 63827100 63827400 0.2332 60 chr7 64645500 64645800 0.2358 72 chr7 64808700 64809300 0.3343 44 chr7 64856100 64856400 0 37 chr7 64967100 64967400 0.148 28 chr7 65028300 65028600 0.0159 59 chr7 65073000 65075100 0.0091 60 chr7 65106900 65107800 0 46 chr7 65109300 65109900 0.2455 69 chr7 65112600 65112900 0 99 chr7 65114400 65140800 0 99 chr7 65143800 65144100 0.3049 93 chr7 65146800 65149200 0.0201 75 chr7 65153100 65156100 0 78 chr7 65161500 65161800 0.1527 52 chr7 65163000 65173800 0 78 chr7 65175900 65176200 0 78 chr7 65179200 65179500 0.1407 66 chr7 65181600 65181900 0.1596 43 chr7 65185200 65185500 0.0749 56 chr7 65192100 65192400 0.0208 61 chr7 65193600 65193900 0.0905 67 chr7 65196300 65196900 0.0093 62 chr7 65199900 65200200 0.2284 40 chr7 65202300 65202600 0.2649 51 chr7 65204700 65205000 0.2649 51 chr7 65217900 65218200 0.4211 62 chr7 65258100 65260200 0 58 chr7 65340900 65341200 0.269 86 chr7 65489400 65490300 0.1192 470 chr7 65506200 65508300 0 67 chr7 65511900 65513700 0.1789 91 chr7 65514900 65515500 0.1731 77 chr7 65517300 65517600 0.3465 58 chr7 65520300 65550300 0 117 chr7 65551500 65560200 0 117 chr7 65562900 65565600 0 70 chr7 65566800 65576400 0 83 chr7 65578800 65581500 0.0101 82 chr7 65583300 65583600 0.1103 88 chr7 65586300 65586600 0.1678 77 chr7 65630700 65651400 0 83 chr7 65652600 65682900 0 83 chr7 65687700 65688300 0.0018 78 chr7 65691600 65691900 0.0575 53 chr7 65694300 65694600 0.1106 51 chr7 65697900 65699700 0.017 73 chr7 65701800 65702400 0.017 73 chr7 65708100 65708400 0.0674 57 chr7 65721600 65721900 0.4038 55 chr7 65762400 65764500 0 67 chr7 65864700 65865000 0.0414 54 chr7 65946000 65946300 0.1976 57 chr7 65948400 65948700 0.0626 55 chr7 66001200 66001500 0.1049 45 chr7 66003600 66004200 0.1818 64 chr7 66287100 66292800 0 80 chr7 66394200 66395100 0.0994 58 chr7 67031100 67031700 0.0238 76 chr7 67185900 67186200 0.1337 42 chr7 67232700 67233300 0 25 chr7 67275300 67275900 0.031 59 chr7 67278300 67279500 0.2646 70 chr7 67281000 67281300 0.2489 86 chr7 67290300 67290600 0.2714 86 chr7 67335600 67335900 0.0678 50 chr7 68652300 68652600 0.1804 64 chr7 70197300 70203900 0 87 chr7 71102100 71102400 0.2939 41 chr7 71679900 71680800 0.3054 72 chr7 71747700 71748000 0.2281 14 chr7 72296100 72296700 0.2759 73 chr7 72529500 72530400 0.0033 66 chr7 72580800 72581100 0.267 32 chr7 72795600 72796200 0.022 58 chr7 72851400 72852300 0.0064 74 chr7 72864900 72865200 0.2062 71 chr7 72874500 72875700 0.0435 67 chr7 72942300 72942900 0.2098 68 chr7 72950700 73001400 0 102 chr7 73002900 73005300 0 102 chr7 73007100 73103700 0 112 chr7 73104900 73114200 0 112 chr7 73115400 73122900 0 95 chr7 73124100 73126500 0 79 chr7 73127700 73134300 0 100 chr7 73135500 73137000 0 100 chr7 73138800 73142400 0 100 chr7 73144800 73154400 0 100 chr7 73155600 73166700 0 100 chr7 73167900 73173300 0 100 chr7 73174500 73210800 0 100 chr7 73212000 73228800 0 100 chr7 73230000 73237200 0 85 chr7 73239600 73241100 0.069 84 chr7 73251300 73252800 0.1095 59 chr7 73255500 73257000 0 68 chr7 73258500 73259700 0 68 chr7 73262100 73264800 0 71 chr7 73266000 73267500 0 71 chr7 73269000 73269300 0.2597 50 chr7 73273800 73274100 0.3032 56 chr7 73277700 73279800 0.0047 78 chr7 73281000 73281600 0.0047 78 chr7 73284600 73284900 0.1931 59 chr7 73292400 73294800 0.019 73 chr7 73296300 73297800 0.019 73 chr7 73776000 73776300 0.348 36 chr7 73835400 73835700 0.3505 42 chr7 74728500 74730600 0 67 chr7 74733000 74733300 0 103 chr7 74734500 74761200 0 103 chr7 74762400 74771400 0 103 chr7 74772600 74778300 0 89 chr7 74779500 74782500 0 89 chr7 74784300 74790600 0 74 chr7 74793600 74794200 0 78 chr7 74795700 74810400 0 78 chr7 74811600 74818200 0 78 chr7 74819400 74829600 0 81 chr7 74830800 74840400 0 81 chr7 74842800 74859900 0 77 chr7 74862000 74865300 0 62 chr7 74867100 74869200 0.079 68 chr7 74873100 74873400 0.2437 64 chr7 74875500 74875800 0.4021 61 chr7 74877900 74878200 0.1568 64 chr7 74882700 74885700 0 71 chr7 74889900 74890200 0.0812 57 chr7 74891400 74892900 0 62 chr7 74894100 74906700 0 80 chr7 74910900 74914500 0 74 chr7 74916900 74919900 0 70 chr7 74926500 74931600 0 98 chr7 74932800 74935200 0 98 chr7 74939400 74940900 0.0068 84 chr7 74942100 74943000 0.0068 84 chr7 74944500 74945400 0.0068 84 chr7 74947800 74951700 0 66 chr7 74953500 74956200 0 91 chr7 74957700 74971800 0 91 chr7 74973300 74976900 0 91 chr7 74978400 74981400 0 78 chr7 74982600 74983200 0 78 chr7 75075000 75077100 0.0234 60 chr7 75078900 75079800 0.0719 37 chr7 75081300 75082200 0 59 chr7 75084300 75091500 0 73 chr7 75093900 75101100 0 71 chr7 75106500 75113400 0 72 chr7 75114900 75116400 0 72 chr7 75119100 75120600 0 70 chr7 75122400 75126300 0 70 chr7 75127500 75129600 0 90 chr7 75130800 75134100 0 90 chr7 75135600 75146700 0 90 chr7 75149100 75149400 0 90 chr7 75150900 75153000 0.2376 76 chr7 75156000 75156300 0.0597 54 chr7 75158100 75272100 0 99 chr7 75273900 75362400 0 92 chr7 75363600 75414300 0 82 chr7 75422400 75422700 0.2653 66 chr7 75426300 75427500 0.01 76 chr7 75443700 75444000 0 69 chr7 75445200 75446100 0 69 chr7 75451200 75451800 0.321 66 chr7 75459300 75459600 0.3399 50 chr7 75478800 75479100 0.1676 63 chr7 75490500 75491100 0.1757 66 chr7 75496800 75497100 0.1031 79 chr7 75499800 75500400 0.1031 79 chr7 75506700 75507300 0.0241 46 chr7 75706800 75708000 0.0055 61 chr7 75828900 75829200 0.1555 59 chr7 75834600 75834900 0.1045 72 chr7 76266000 76266300 0.1145 14 chr7 76438800 76439100 0.0729 57 chr7 76442100 76442700 0 84 chr7 76446000 76447500 0 73 chr7 76455300 76463100 0 67 chr7 76465800 76466100 0.0086 72 chr7 76467300 76468800 0.0086 72 chr7 76470300 76470900 0.0182 66 chr7 76473600 76473900 0.0316 43 chr7 76475700 76476300 0.0318 56 chr7 76479000 76479300 0.2502 55 chr7 76484100 76491000 0 68 chr7 76492500 76494600 0 60 chr7 76496400 76497000 0.0149 64 chr7 76500300 76500600 0.244 23 chr7 76504200 76504500 0.1546 48 chr7 76519200 76519500 0.0351 12 chr7 76521600 76522500 0 24 chr7 76524900 76525800 0 69 chr7 76527000 76532400 0 69 chr7 76534800 76538700 0 69 chr7 76544700 76545900 0.0792 63 chr7 76605000 76606800 0.0165 52 chr7 76609200 76610100 0 61 chr7 76612200 76614600 0 57 chr7 76617300 76617900 0.3307 59 chr7 76619700 76620300 0.1502 29 chr7 76626900 76630800 0 68 chr7 76632900 76634100 0 68 chr7 76635900 76636200 0 68 chr7 76639800 76642800 0.0468 57 chr7 76648500 76649100 0.0342 45 chr7 76652100 76652700 0.0478 64 chr7 76660800 76661100 0.1608 52 chr7 76672800 76673100 0.1961 52 chr7 76695600 76695900 0.1886 38 chr7 76733100 76734000 0.0796 65 chr7 76737000 76737300 0.2046 67 chr7 76749600 76749900 0.4466 19 chr7 76768500 76769100 0.1548 57 chr7 76790700 76791000 0.2686 51 chr7 76870800 76871100 0.253 58 chr7 76881300 76881600 0.3252 45 chr7 76896900 76897200 0.3863 55 chr7 76951200 76951500 0.1595 73 chr7 76952700 76953900 0.1595 73 chr7 76956300 76962300 0 65 chr7 76963800 76964400 0.1047 67 chr7 76965600 76966800 0.039 69 chr7 76968600 76969200 0.0662 79 chr7 76973700 76974300 0.0352 56 chr7 76982400 76985400 0.0142 70 chr7 76987200 76987500 0.089 59 chr7 76990500 76991100 0.0057 55 chr7 76993200 76993500 0.3666 70 chr7 77012100 77019900 0 75 chr7 77021700 77022600 0 72 chr7 77023800 77025300 0 72 chr7 77026800 77037300 0 101 chr7 77039100 77048100 0 101 chr7 77056200 77056800 0.0794 83 chr7 77061300 77061600 0.228 60 chr7 77078700 77080200 0.0507 69 chr7 77093700 77094000 0.0022 52 chr7 77099100 77099400 0.1538 53 chr7 77100900 77101800 0.1935 45 chr7 77106600 77106900 0.2576 46 chr7 77114400 77114700 0.2398 54 chr7 77116200 77116800 0.022 52 chr7 77157000 77157300 0.0348 73 chr7 77508900 77510400 0.0371 78 chr7 79230900 79234200 0.0426 77 chr7 79885500 79886700 0.1995 66 chr7 79939200 79939800 0.2259 72 chr7 80713800 80714100 0.1857 98 chr7 80715900 80716200 0.3443 47 chr7 80718300 80718600 0.3124 45 chr7 81172500 81172800 0.3807 16 chr7 81785100 81785700 0.1629 49 chr7 82806900 82807200 0.1676 80 chr7 83026800 83029800 0.1101 61 chr7 83298000 83298300 0.3899 63 chr7 83747400 83747700 0.3094 45 chr7 84053100 84053700 0.1591 59 chr7 84065100 84065400 0.1133 82 chr7 84067800 84068100 0.1513 109 chr7 85250700 85251000 0.1916 50 chr7 85254000 85254300 0.2907 54 chr7 85330200 85334700 0.1293 93 chr7 86343600 86344500 0.2127 69 chr7 86457300 86457900 0.0645 69 chr7 86986200 86986500 0.1812 43 chr7 87042000 87042300 0.3216 94 chr7 87044100 87045300 0.104 64 chr7 87063000 87064200 0.0626 70 chr7 87242700 87243000 0.3051 100 chr7 87626400 87626700 0.3732 31 chr7 87703800 87704100 0.2983 96 chr7 87951300 87951900 0.0818 66 chr7 88551900 88553100 0.1058 65 chr7 89195100 89195400 0.1305 102 chr7 89789400 89790900 0.1496 61 chr7 89792100 89792400 0.1496 61 chr7 89899200 89899500 0.2336 109 chr7 90074400 90075000 0.0026 57 chr7 90117000 90117300 0.1516 55 chr7 91175700 91176000 0.3585 65 chr7 91177800 91178400 0.0669 76 chr7 91217400 91218000 0.1438 86 chr7 91587300 91587900 0.0547 84 chr7 91905900 91906800 0.0853 92 chr7 92013000 92013300 0.3359 62 chr7 92561100 92562000 0.058 52 chr7 93788100 93793200 0 68 chr7 94159800 94160400 0.0454 116 chr7 95833200 95835300 0.1117 83 chr7 95942700 95943000 0.26 59 chr7 96554100 96554400 0.2754 51 chr7 96555600 96557100 0.3431 62 chr7 96846600 96852600 0 90 chr7 97533300 97533600 0.1327 65 chr7 97614300 97619400 0.0112 86 chr7 97702200 97702500 0.2101 77 chr7 97765800 97766100 0.2601 60 chr7 97778400 97779000 0.2438 62 chr7 99809700 99815100 0 94 chr7 100308900 100311300 0.0593 69 chr7 100313100 100314900 0.0593 69 chr7 100740300 100742700 0.0428 59 chr7 100993500 101004300 0.0156 344 chr7 101358000 101359500 0.0445 75 chr7 101691000 101691300 0.4019 30 chr7 102341700 102342300 0.0451 74 chr7 102343500 102343800 0.2726 85 chr7 102345000 102345600 0.0021 56 chr7 102347400 102357900 0 135 chr7 102476700 102527100 0 119 chr7 102528300 102541500 0 119 chr7 102543000 102554100 0 96 chr7 102555300 102576900 0 107 chr7 102579300 102605100 0 124 chr7 102606300 102618000 0 124 chr7 102620100 102634800 0 124 chr7 102636300 102640800 0 124 chr7 102642000 102664800 0 124 chr7 102666000 102676500 0 117 chr7 102677700 102690900 0 117 chr7 102713700 102714000 0.2846 67 chr7 102756600 102756900 0.2407 74 chr7 102764400 102764700 0.2004 50 chr7 102771900 102772200 0.1693 57 chr7 102792300 102792900 0.1546 58 chr7 103910100 103911000 0.2532 65 chr7 104507400 104508000 0.1272 60 chr7 104559000 104560500 0.0745 84 chr7 105405600 105405900 0.4163 27 chr7 106101300 106101600 0.0666 1123 chr7 106245000 106245900 0 82 chr7 107418300 107418600 0.179 45 chr7 107422800 107423100 0.0652 57 chr7 107769900 107770500 0.2184 286 chr7 108256200 108256500 0.2012 71 chr7 108507900 108509400 0.0042 72 chr7 108938100 108938400 0.1414 94 chr7 109013700 109014000 0.1898 50 chr7 109095900 109098300 0 75 chr7 109899600 109899900 0.1016 25 chr7 109906200 109908600 0 76 chr7 110402100 110402400 0.0686 36 chr7 110558700 110560800 0.0014 78 chr7 110562000 110562600 0.0014 78 chr7 110707200 110712600 0 84 chr7 111243600 111249300 0 120 chr7 111447000 111447300 0.0475 73 chr7 111448500 111449700 0.0475 73 chr7 111455700 111457200 0 65 chr7 111502800 111503100 0.2704 75 chr7 111610800 111611100 0.1276 58 chr7 111963600 111969000 0 90 chr7 112552200 112552500 0.0947 78 chr7 112975500 112978200 0 57 chr7 112979700 112981200 0 56 chr7 113259900 113260200 0.4074 72 chr7 113385000 113385300 0.256 57 chr7 113430300 113430600 0.2242 81 chr7 113493000 113494500 0 72 chr7 113495700 113496000 0.0606 69 chr7 113497200 113499300 0.0606 69 chr7 113536800 113537100 0.2909 69 chr7 113661300 113661900 0.2193 70 chr7 113745000 113745300 0.1135 120 chr7 113776200 113782200 0 141 chr7 114454500 114454800 0.3548 39 chr7 115026300 115026600 0.4501 49 chr7 115028700 115029000 0.3097 35 chr7 115261500 115263600 0.0349 81 chr7 116718900 116719200 0.1747 97 chr7 116720400 116721000 0.1747 97 chr7 116723100 116723400 0.1747 97 chr7 117031500 117031800 0.2043 101 chr7 117525300 117529200 0 70 chr7 118343100 118343400 0.0417 63 chr7 118703700 118704000 0.1945 68 chr7 118964700 118965300 0.0863 32 chr7 119589300 119589600 0.3609 62 chr7 119591400 119591700 0.0717 56 chr7 119657100 119657400 0.2356 64 chr7 120323700 120325200 0.0567 63 chr7 121443600 121443900 0.1833 62 chr7 121649400 121650000 0.1321 30 chr7 122232000 122233500 0.2072 53 chr7 122239500 122241000 0.164 78 chr7 122242800 122244300 0.2347 88 chr7 122280300 122281500 0.2117 83 chr7 122283300 122283900 0.0677 76 chr7 122569800 122570100 0.2882 68 chr7 123042600 123042900 0.1439 35 chr7 123429300 123429600 0.2222 71 chr7 123780900 123781500 0.0687 79 chr7 123996900 123997200 0.2458 32 chr7 124094400 124094700 0.229 95 chr7 125179800 125180100 0.0189 43 chr7 125221500 125222100 0.0531 83 chr7 125384700 125385000 0.3474 64 chr7 126168300 126168600 0.1966 66 chr7 126601500 126602400 0.3683 76 chr7 126829200 126829500 0.1377 76 chr7 127963500 127966800 0.0104 80 chr7 127980000 127980300 0.4776 34 chr7 128295000 128295300 0.2481 74 chr7 128655300 128655600 0.3019 58 chr7 130480800 130481400 0.1145 75 chr7 130541700 130542000 0.238 71 chr7 130578900 130579200 0.0142 93 chr7 130580400 130582500 0.0142 93 chr7 130702200 130703400 0.0049 78 chr7 133178100 133178400 0.3374 43 chr7 133422900 133423200 0.2122 25 chr7 133524000 133524600 0.1419 60 chr7 133889700 133894800 0 67 chr7 136094400 136094700 0.3357 72 chr7 136415100 136418100 0.0844 89 chr7 136764300 136764600 0.2292 70 chr7 136776300 136776600 0.3515 40 chr7 136797900 136798200 0.1515 69 chr7 136834800 136835100 0.3385 39 chr7 136972800 136973100 0.2055 49 chr7 137137200 137137500 0.1038 79 chr7 137334300 137334600 0.0563 49 chr7 137427900 137428200 0.2193 61 chr7 137429700 137430000 0.1447 49 chr7 138621900 138622200 0.3489 181 chr7 139794900 139795500 0.1774 119 chr7 140363100 140363400 0.3957 62 chr7 141037500 141037800 0.2864 69 chr7 141062400 141067800 0 67 chr7 141882300 141883500 0.0971 83 chr7 141920700 141926700 0 75 chr7 141981000 141981300 0.1629 57 chr7 141983400 141984000 0.0522 83 chr7 142042500 142045200 0 31 chr7 142132800 142133100 0.1495 19 chr7 142893600 142893900 0.3286 28 chr7 143522100 143524500 0 50 chr7 143526000 143529600 0 55 chr7 143531700 143537100 0 72 chr7 143540700 143548500 0 88 chr7 143550000 143556300 0 88 chr7 143557500 143561400 0 88 chr7 143563500 143570700 0 93 chr7 143571900 143580600 0 93 chr7 143581800 143585700 0 93 chr7 143587200 143593200 0 93 chr7 143594400 143610300 0 93 chr7 143612400 143650800 0 67 chr7 143700900 143707200 0 69 chr7 143708700 143725200 0 60 chr7 143726400 143727900 0 60 chr7 143743800 143747700 0 89 chr7 143749500 143766600 0 89 chr7 143768100 143779500 0 89 chr7 143781000 143787000 0 77 chr7 143788500 143788800 0 77 chr7 143792400 143798100 0 76 chr7 143799900 143802900 0 92 chr7 143805000 143844900 0 92 chr7 143852700 143874600 0 92 chr7 144120000 144120300 0.1706 85 chr7 144180000 144181200 0 85 chr7 144182400 144190500 0 85 chr7 144191700 144197700 0 85 chr7 144199200 144226200 0 84 chr7 144230100 144234600 0 71 chr7 144236700 144253500 0 83 chr7 144256500 144259500 0.001 100 chr7 144262200 144263700 0.0024 94 chr7 144265500 144271800 0 85 chr7 144273000 144276000 0 85 chr7 144277200 144285300 0 85 chr7 144286800 144322200 0 85 chr7 144324900 144330900 0 85 chr7 144332400 144351600 0 85 chr7 144353400 144362700 0 93 chr7 144364200 144370200 0 93 chr7 144371400 144372300 0 93 chr7 144373500 144377100 0 93 chr7 144685500 144685800 0.3511 77 chr7 144692100 144693000 0.2816 67 chr7 145192500 145192800 0.4227 35 chr7 145238700 145239300 0.3114 70 chr7 145305000 145305300 0.1345 54 chr7 145343100 145343400 0.245 62 chr7 146015400 146017200 0.0978 87 chr7 146604000 146604600 0.1283 73 chr7 146907300 146910000 0.0143 86 chr7 147084000 147084300 0.137 12 chr7 147322800 147323400 0.1978 62 chr7 147842700 147847800 0 76 chr7 148647900 148648200 0.0954 54 chr7 149906700 149907300 0.0152 58 chr7 149916600 149916900 0.3539 47 chr7 149934900 149935500 0 47 chr7 149947200 149947500 0.2996 40 chr7 149950800 149951400 0.0067 61 chr7 149953800 149954100 0.1471 60 chr7 149973900 149974200 0.1088 37 chr7 149986800 149987100 0.2128 62 chr7 149990400 149990700 0.0903 63 chr7 150000300 150000900 0.0219 60 chr7 150010800 150011100 0.2642 73 chr7 150012900 150013200 0.2554 50 chr7 150027300 150027600 0.3103 62 chr7 150030000 150030300 0.0832 47 chr7 150046500 150046800 0.2361 58 chr7 150052500 150052800 0.2323 71 chr7 150056700 150057000 0.2305 55 chr7 150060900 150063300 0 71 chr7 150071400 150072300 0.1134 62 chr7 150075000 150075300 0.1134 62 chr7 150091200 150091800 0.0071 65 chr7 150145500 150145800 0.053 56 chr7 150147900 150148200 0.1165 40 chr7 150151800 150152100 0.3308 15 chr7 150153600 150153900 0.1215 59 chr7 150171000 150171300 0.3592 63 chr7 150187500 150187800 0.0863 69 chr7 150189600 150189900 0.0565 52 chr7 150199200 150199500 0.1209 60 chr7 150218700 150219000 0.2193 69 chr7 150238200 150238500 0.143 56 chr7 150247500 150247800 0.1333 53 chr7 150261900 150262200 0.2161 57 chr7 150268500 150270300 0 77 chr7 150295800 150296100 0.0815 64 chr7 150298500 150298800 0.1966 55 chr7 150557400 150557700 0.2607 43 chr7 150674400 150674700 0.1995 48 chr7 150711300 150711600 0.2195 74 chr7 150909600 150910500 0.3309 153 chr7 151603200 151603500 0.4772 45 chr7 151737900 151738200 0.2271 74 chr7 152584800 152586600 0.0259 46 chr7 152785500 152786400 0.007 65 chr7 152802300 152802600 0.1485 52 chr7 152811000 152811300 0.2705 58 chr7 152812800 152814300 0.1079 55 chr7 152816700 152817000 0.1255 12 chr7 152839500 152841300 0 81 chr7 153312000 153312300 0.3189 56 chr7 153707100 153707400 0.0676 54 chr7 153711000 153711300 0.1541 66 chr7 153721800 153722100 0.1611 60 chr7 153748500 153748800 0.0507 29 chr7 153750300 153750600 0.1234 43 chr7 153777300 153777900 0.1181 63 chr7 153779400 153779700 0.2547 63 chr7 153821400 153821700 0.0259 53 chr7 153853800 153855000 0.1958 64 chr7 154008900 154009500 0.1727 67 chr7 154025400 154025700 0.2148 67 chr7 154026900 154027200 0.2148 67 chr7 154037400 154040100 0 71 chr7 154043700 154044000 0.1627 61 chr7 154047900 154048800 0 60 chr7 154053900 154054200 0.3872 70 chr7 154067100 154067400 0.0992 61 chr7 154068900 154069200 0.4316 64 chr7 154075500 154075800 0.353 51 chr7 154088400 154088700 0.277 64 chr7 154096200 154096500 0.0464 59 chr7 154106100 154106400 0.2845 70 chr7 154109700 154110000 0.2063 66 chr7 154119600 154119900 0.1165 70 chr7 154142700 154143000 0.2341 61 chr7 154145700 154146300 0.0104 53 chr7 154161600 154162200 0.0136 45 chr7 154456800 154457700 0 65 chr7 154661100 154661400 0.0635 13 chr7 155328600 155329200 0.4403 148 chr7 155341200 155341500 0.1159 169 chr7 155350500 155350800 0.171 66 chr7 155366700 155367300 0.0318 101 chr7 155406900 155407500 0.2722 100 chr7 155573700 155574000 0.3577 47 chr7 155934000 155934300 0.487 17 chr7 156154200 156155700 0 320 chr7 157441500 157441800 0.4444 37 chr7 157470300 157470600 0.1719 79 chr7 157554000 157554300 0.239 37 chr7 157647300 157648500 0.1406 32 chr7 157710900 157711200 0.0107 29 chr7 157716600 157716900 0.4229 64 chr7 157725900 157726200 0.4069 102 chr7 157731600 157734000 0.1766 43 chr7 157749000 157749300 0.448 69 chr7 157838700 157839000 0.3828 58 chr7 157858200 157859100 0.0439 22 chr7 157924800 157925400 0.3051 148 chr7 157972500 157972800 0.4917 51 chr7 157983000 157983300 0.1937 51 chr7 157994700 157995000 0.3452 12 chr7 158000700 158001000 0.1985 28 chr7 158058300 158058600 0.475 56 chr7 158088000 158090100 0.2276 59 chr7 158099100 158099700 0.1965 13 chr7 158146800 158148900 0.0809 481 chr7 158158800 158159100 0.4179 73 chr7 158198700 158199000 0.361 49 chr7 158237100 158237700 0.0645 48 chr7 158315100 158315400 0.491 127 chr7 158330100 158330400 0.3832 80 chr7 158334600 158335800 0.4604 20 chr7 158338500 158340000 0 51 chr7 158349000 158349600 0 21 chr7 158352000 158352300 0.3623 78 chr7 158360100 158361300 0.0717 272 chr7 158426100 158426400 0.3164 12 chr7 158455200 158455800 0.1578 63 chr7 158460000 158460300 0.4447 85 chr7 158464200 158464500 0.3787 53 chr7 158493300 158493600 0.4983 61 chr7 158521800 158522400 0.3584 115 chr7 158551800 158552100 0.3367 63 chr7 158648700 158649000 0.3368 228 chr7 158667900 158668200 0.4676 56 chr7 158838900 158839200 0.1226 40 chr7 158915700 158917200 0.2381 131 chr7 158950500 158950800 0.4163 80 chr7 158982000 158982300 0.2211 55 chr7 159006000 159006300 0.3863 25 chr7 159088800 159089400 0.0185 106 chr7 159152400 159152700 0.4408 57 chr7 159164400 159164700 0 40 chr7 159171300 159172200 0.3202 90 chr7 159202800 159203400 0.2358 354 chr8 60600 77100 0 100 chr8 78300 79500 0 100 chr8 80700 102300 0 100 chr8 103500 191700 0 100 chr8 193500 200700 0 88 chr8 210900 211200 0.2803 68 chr8 282300 282600 0.3514 25 chr8 304200 304800 0.0337 59 chr8 378000 378300 0.1707 76 chr8 399300 399600 0.0768 55 chr8 402300 402900 0.1096 75 chr8 659100 659700 0.072 70 chr8 669300 669600 0.1689 63 chr8 676200 676500 0.314 29 chr8 679800 680400 0.216 105 chr8 714000 714600 0 50 chr8 747900 748200 0.466 67 chr8 775500 776100 0.0591 97 chr8 807300 807600 0.074 51 chr8 840000 840300 0.1552 48 chr8 848400 848700 0.2068 34 chr8 895800 896100 0.1485 40 chr8 933900 934200 0.0172 30 chr8 978000 978600 0.3138 91 chr8 991500 993300 0.0112 103 chr8 1013700 1015800 0.2977 43 chr8 1034100 1035900 0.0358 42 chr8 1109100 1110000 0.0909 56 chr8 1206300 1206600 0.4163 248 chr8 1215300 1215900 0.254 109 chr8 1238700 1239300 0.187 28 chr8 1248000 1248300 0.4078 15 chr8 1350300 1351200 0.2703 85 chr8 1354500 1354800 0.4554 78 chr8 1384500 1385700 0.2479 107 chr8 1392900 1393200 0.0876 23 chr8 1394400 1394700 0.0195 16 chr8 1396800 1400100 0 29 chr8 1401900 1402200 0.1493 28 chr8 1406700 1407300 0.163 43 chr8 1449900 1450200 0.4788 48 chr8 1470900 1471200 0.0551 60 chr8 1521300 1521600 0.2901 24 chr8 1607700 1613100 0.0194 126 chr8 1642200 1644000 0.2423 45 chr8 1692000 1692300 0 30 chr8 1785300 1785600 0.2657 77 chr8 1852200 1852500 0.3471 45 chr8 1968600 1969200 0.1208 43 chr8 1990500 1991100 0.1201 29 chr8 2191500 2191800 0.0872 10 chr8 2238600 2239200 0.1718 70 chr8 2244300 2246100 0.1263 74 chr8 2247600 2247900 0.2173 75 chr8 2250900 2277000 0 86 chr8 2278200 2279100 0 57 chr8 2280300 2334900 0 87 chr8 2336700 2338800 0 70 chr8 2341200 2341500 0 18 chr8 2369100 2369400 0.4046 64 chr8 2383200 2384400 0 66 chr8 2386500 2443800 0 78 chr8 2445600 2471100 0 80 chr8 2472900 2475300 0 80 chr8 2480400 2481900 0.0038 62 chr8 5122800 5123100 0.4112 89 chr8 6297300 6297600 0.0219 60 chr8 6300000 6300600 0.081 65 chr8 6974400 7001700 0 149 chr8 7002900 7014300 0 154 chr8 7017300 7017600 0.0609 124 chr8 7155300 7157100 0 83 chr8 7161000 7161600 0.1082 47 chr8 7162800 7163100 0.1082 47 chr8 7164300 7166400 0.1082 47 chr8 7168200 7171800 0.0521 42 chr8 7173000 7174500 0.0075 32 chr8 7181400 7183200 0 35 chr8 7185000 7185300 0.2906 27 chr8 7187700 7188000 0 42 chr8 7189500 7192500 0 42 chr8 7194000 7194300 0 42 chr8 7197900 7198200 0.079 21 chr8 7200300 7200900 0.3666 27 chr8 7205400 7205700 0.0495 37 chr8 7209300 7217100 0 70 chr8 7218300 7227600 0 70 chr8 7229400 7252800 0 65 chr8 7254000 7267800 0 129 chr8 7269000 7295400 0 129 chr8 7299300 7300200 0 31 chr8 7301700 7311900 0 54 chr8 7314000 7316400 0 34 chr8 7317600 7318500 0 34 chr8 7320000 7320900 0 46 chr8 7323000 7325400 0 41 chr8 7326900 7327500 0 41 chr8 7329900 7331100 0.0111 52 chr8 7332300 7332900 0.0111 52 chr8 7335000 7335900 0.007 60 chr8 7337100 7339800 0.0341 81 chr8 7342500 7343400 0 44 chr8 7371600 7374000 0 74 chr8 7377000 7378500 0.0258 81 chr8 7381200 7381500 0.0704 66 chr8 7385700 7386000 0.3503 78 chr8 7393500 7393800 0.3073 90 chr8 7399500 7404300 0 92 chr8 7405500 7411200 0 92 chr8 7412400 7415400 0 92 chr8 7416600 7417200 0.0208 62 chr8 7420500 7420800 0.3257 62 chr8 7424100 7424400 0 71 chr8 7425600 7433700 0 71 chr8 7435500 7444500 0 77 chr8 7446300 7449300 0 81 chr8 7450500 7450800 0.4985 73 chr8 7452000 7452900 0 95 chr8 7454100 7469100 0 95 chr8 7470300 7471800 0 95 chr8 7473000 7473600 0.0178 65 chr8 7474800 7475100 0.2315 38 chr8 7476900 7480800 0.0273 67 chr8 7482300 7497000 0 109 chr8 7498200 7506300 0 109 chr8 7507500 7535100 0 109 chr8 7537200 7547400 0 109 chr8 7551000 7556700 0 106 chr8 7558800 7564500 0 132 chr8 7567200 7603500 0 384 chr8 7604700 7605300 0 384 chr8 7607400 7610100 0.001 112 chr8 7611900 7616400 0.001 112 chr8 7667400 7678800 0 54 chr8 7681200 7682400 0 45 chr8 7684500 7718700 0 547 chr8 7719900 7769100 0 547 chr8 7772100 7772700 0 81 chr8 7773900 7801200 0 79 chr8 7802400 7805400 0 81 chr8 7806600 7827000 0 81 chr8 7828800 7829100 0.4567 90 chr8 7830600 7833300 0 94 chr8 7835100 7835400 0 94 chr8 7837800 7859700 0 85 chr8 7860900 7872900 0 77 chr8 7874100 7875900 0.017 69 chr8 7877400 7885800 0 74 chr8 7890600 7890900 0.1497 65 chr8 7894200 7912500 0 85 chr8 7916400 7916700 0.0498 20 chr8 7917900 7918800 0 47 chr8 7923900 7924200 0.0503 11 chr8 7925400 7926600 0 46 chr8 7928700 7930800 0 44 chr8 7933200 7935000 0 70 chr8 7938000 7941000 0 75 chr8 7943100 7944300 0 42 chr8 7945800 7947900 0 42 chr8 7949700 7950000 0.0841 12 chr8 7952700 7972200 0 37 chr8 7973700 7975200 0 39 chr8 7977000 7990500 0 43 chr8 7991700 8008800 0 43 chr8 8010000 8015400 0 92 chr8 8016600 8044800 0 391 chr8 8046000 8051700 0 94 chr8 8052900 8057400 0 94 chr8 8058600 8059500 0 94 chr8 8061900 8075100 0 108 chr8 8077200 8078400 0 108 chr8 8081700 8082600 0 32 chr8 8084400 8084700 0.0683 11 chr8 8086800 8087100 0 17 chr8 8091000 8091300 0.0257 23 chr8 8093100 8100900 0 40 chr8 8102100 8106000 0 26 chr8 8108700 8109600 0 18 chr8 8112000 8119500 0 117 chr8 8121000 8123100 0 117 chr8 8124300 8138400 0 117 chr8 8139600 8143200 0.0075 109 chr8 8145300 8145600 0.0853 109 chr8 8147100 8160600 0 116 chr8 8162100 8162400 0 116 chr8 8163600 8170500 0.0007 129 chr8 8171700 8179800 0 130 chr8 8182500 8183400 0.0064 97 chr8 8185200 8186700 0.0064 97 chr8 8187900 8189100 0.0582 108 chr8 8190300 8191200 0.008 105 chr8 8192700 8194500 0.008 105 chr8 8195700 8203800 0 80 chr8 8205000 8206200 0 51 chr8 8207700 8208600 0 51 chr8 8211000 8211600 0 45 chr8 8214300 8214600 0 39 chr8 8230200 8230500 0.0352 23 chr8 8233800 8234100 0.0596 78 chr8 8471100 8476800 0 81 chr8 9657000 9658200 0.145 58 chr8 9736500 9739800 0 65 chr8 10933800 10934400 0.007 87 chr8 10936200 10937700 0.007 87 chr8 12038100 12039300 0 36 chr8 12041400 12046800 0 41 chr8 12049800 12051300 0 27 chr8 12053100 12060300 0 39 chr8 12061500 12061800 0 39 chr8 12063000 12072900 0 45 chr8 12075000 12075300 0 10 chr8 12076800 12077100 0 17 chr8 12079800 12081300 0 13 chr8 12082500 12088800 0 101 chr8 12090300 12104400 0 101 chr8 12106500 12111900 0 37 chr8 12113400 12115500 0 29 chr8 12118800 12119100 0 48 chr8 12121200 12121500 0 23 chr8 12149400 12149700 0.1146 59 chr8 12151500 12159600 0 82 chr8 12160800 12174300 0 74 chr8 12176100 12178200 0 84 chr8 12180900 12192600 0 100 chr8 12195600 12196500 0 97 chr8 12198300 12200400 0 109 chr8 12202500 12205800 0 109 chr8 12207000 12207300 0.0028 136 chr8 12208500 12210600 0.0028 136 chr8 12211800 12218100 0 99 chr8 12219600 12223500 0 94 chr8 12225000 12226500 0.1278 135 chr8 12228600 12229500 0.1278 135 chr8 12285300 12286500 0 43 chr8 12287700 12290100 0 43 chr8 12291300 12297600 0 43 chr8 12299100 12314700 0 43 chr8 12316200 12318600 0 43 chr8 12328800 12330000 0.115 19 chr8 12333300 12333900 0.0606 43 chr8 12337200 12341100 0 51 chr8 12342600 12351000 0 116 chr8 12352800 12357900 0 43 chr8 12359700 12362100 0 53 chr8 12363300 12366300 0 53 chr8 12367500 12370800 0 53 chr8 12372000 12373500 0 38 chr8 12390600 12392100 0.1055 59 chr8 12393600 12401700 0 83 chr8 12402900 12414600 0 83 chr8 12415800 12420300 0 83 chr8 12423600 12432600 0 102 chr8 12434100 12442800 0 102 chr8 12444000 12483300 0 134 chr8 12486600 12487200 0.3199 110 chr8 12488700 12501900 0 129 chr8 12503100 12511200 0 137 chr8 12512400 12521100 0 104 chr8 12522600 12524400 0.0024 110 chr8 12526200 12528300 0.1528 88 chr8 12529800 12532200 0.0044 98 chr8 12533700 12537300 0 87 chr8 12567600 12567900 0.1653 121 chr8 12594900 12595200 0.1692 69 chr8 12599100 12601200 0 119 chr8 12602700 12603000 0 119 chr8 12604200 12609900 0 119 chr8 12625800 12626100 0.0381 96 chr8 13920600 13920900 0.1277 21 chr8 14804100 14805600 0.0551 86 chr8 15143700 15144000 0.4961 27 chr8 15557100 15561000 0.0044 103 chr8 15576600 15581400 0.0167 97 chr8 16672800 16674600 0.1635 76 chr8 16946400 16948800 0.083 75 chr8 17819400 17819700 0.3365 14 chr8 18002100 18002700 0.046 56 chr8 18569100 18569400 0.2338 48 chr8 18597300 18598500 0 78 chr8 18794100 18794700 0 68 chr8 18910200 18910500 0.1298 78 chr8 19386900 19387200 0.4648 65 chr8 20685000 20685600 0.0991 61 chr8 21830700 21831000 0.1359 61 chr8 23312400 23313000 0.1549 54 chr8 23817900 23818200 0.2619 61 chr8 24255300 24256200 0.0081 78 chr8 25216200 25217100 0 40 chr8 25656300 25656600 0.1468 63 chr8 25730700 25735500 0.0346 65 chr8 26005200 26005500 0.0446 17 chr8 26396100 26401200 0 97 chr8 26590500 26590800 0.3591 108 chr8 26938200 26938500 0.0935 64 chr8 27060900 27061500 0.0135 55 chr8 27113700 27119400 0 106 chr8 27550500 27550800 0.1681 52 chr8 27552600 27553200 0.0278 77 chr8 28292400 28292700 0.2216 32 chr8 28818000 28818300 0.2353 118 chr8 28839900 28840200 0.1123 96 chr8 28880700 28881900 0.3366 82 chr8 29120400 29121600 0.0084 83 chr8 29666400 29666700 0.2312 27 chr8 30246000 30246900 0.2982 66 chr8 30393900 30407700 0 39 chr8 30987000 30987300 0.1627 67 chr8 31853400 31853700 0.1847 74 chr8 32816400 32819400 0 68 chr8 33261900 33263100 0.0526 51 chr8 33657600 33658200 0.2075 73 chr8 34612200 34612500 0.3882 79 chr8 35173200 35174100 0.0004 103 chr8 35175300 35176800 0.0004 103 chr8 35523600 35525100 0 45 chr8 35528700 35532900 0 101 chr8 36390300 36391200 0.2272 126 chr8 36393300 36394200 0.2272 126 chr8 36478800 36479100 0.2929 81 chr8 36480600 36480900 0.2929 81 chr8 36484800 36485700 0.0252 96 chr8 36488100 36488400 0.3933 89 chr8 36831600 36831900 0.234 60 chr8 37150200 37150500 0.312 13 chr8 37193400 37194300 0 74 chr8 39491400 39492000 0.0059 29 chr8 40432500 40437900 0 80 chr8 40648500 40648800 0.2334 45 chr8 40651800 40652700 0.1323 55 chr8 41018700 41019000 0.1613 66 chr8 41033700 41034300 0.1698 61 chr8 41503200 41503800 0.0807 44 chr8 43178700 43181100 0.1045 86 chr8 43238100 43238400 0.2996 485 chr8 43239600 43241700 0.3428 570 chr8 43260900 43261200 0.0277 73 chr8 43905000 43906500 0.0003 71 chr8 43938000 43939800 0 32 chr8 43941900 43947900 0 102 chr8 43949400 43950300 0 102 chr8 43952100 43953300 0 77 chr8 43955100 43959900 0 83 chr8 43961400 43962000 0.0143 61 chr8 43965900 43983900 0 87 chr8 44034000 45620100 0 433 chr8 45621300 45877200 0 433 chr8 45930600 45930900 0 23 chr8 45932400 45933000 0 35 chr8 45936600 45939900 0 75 chr8 45941100 45945600 0 75 chr8 45948000 45954000 0 99 chr8 45955500 45956700 0 99 chr8 45958500 45966600 0 68 chr8 45968700 45969300 0.0632 58 chr8 46983900 46984500 0.1117 79 chr8 47161800 47162400 0.1361 94 chr8 47235000 47235300 0.0528 99 chr8 47318700 47319000 0.1917 44 chr8 47331900 47332800 0.0299 126 chr8 48796200 48796800 0.2987 62 chr8 48944100 48944400 0.0347 85 chr8 50088300 50088600 0.2643 39 chr8 50166000 50166900 0 51 chr8 50486400 50486700 0.2472 70 chr8 51535200 51535500 0.0571 86 chr8 51599700 51600000 0.2894 19 chr8 53611500 53615400 0.0498 54 chr8 53948400 53948700 0.4132 28 chr8 54031800 54032400 0.0081 83 chr8 54126000 54126300 0.2784 55 chr8 54594000 54594300 0.2646 63 chr8 56417700 56419500 0.1547 89 chr8 57070800 57071100 0.2241 71 chr8 57158700 57160800 0.1778 60 chr8 57206400 57207900 0.0003 525 chr8 57209100 57209400 0.0003 525 chr8 57211200 57213900 0.0126 479 chr8 58323000 58323300 0.3619 66 chr8 58374600 58374900 0.3882 91 chr8 58483500 58484400 0.0807 65 chr8 58915200 58920600 0 75 chr8 58950000 58950300 0.4273 45 chr8 59169300 59170200 0.0673 62 chr8 59171700 59172000 0.0673 62 chr8 61117200 61117500 0.308 78 chr8 61120200 61120500 0.2611 84 chr8 61268700 61269900 0.0827 80 chr8 61752000 61752600 0.0095 47 chr8 63484500 63485100 0.2538 86 chr8 63487500 63487800 0.2453 78 chr8 63797700 63802800 0.0122 97 chr8 64106400 64106700 0.2505 57 chr8 64241400 64241700 0.2617 66 chr8 64685400 64686900 0.1411 58 chr8 65121900 65122200 0.1778 73 chr8 66024600 66025800 0 87 chr8 66949800 66953100 0.1332 78 chr8 67593000 67593300 0.1692 71 chr8 68362800 68367600 0.0082 124 chr8 68615100 68615400 0.3437 56 chr8 68906400 68906700 0.3354 39 chr8 69024300 69024600 0.2418 94 chr8 69258000 69259200 0.1533 84 chr8 69689100 69689700 0.0514 146 chr8 70671300 70672200 0.0517 56 chr8 70737300 70737900 0.1974 90 chr8 71406900 71407200 0.3921 107 chr8 71409300 71411400 0.0079 77 chr8 72148500 72148800 0.045 65 chr8 72150000 72150900 0.045 65 chr8 72152100 72152400 0.2234 47 chr8 72482100 72482400 0.0639 86 chr8 72484500 72485400 0.0639 86 chr8 72875700 72881400 0 93 chr8 73862700 73863000 0.3105 77 chr8 74595300 74596500 0.1755 81 chr8 74597700 74598000 0.1755 81 chr8 74733600 74733900 0.2672 59 chr8 74870100 74870400 0.4512 58 chr8 74946000 74948100 0.102 68 chr8 74964600 74964900 0.3958 36 chr8 75280500 75282900 0.0279 91 chr8 75324900 75325200 0.3215 73 chr8 75328200 75328500 0.2249 109 chr8 75444300 75448200 0 70 chr8 75621600 75626700 0 70 chr8 76425300 76426200 0 58 chr8 76644900 76645500 0.3808 33 chr8 77091000 77091300 0.478 55 chr8 77303100 77303400 0.4416 59 chr8 77645400 77645700 0.3286 41 chr8 79170600 79174200 0 71 chr8 80135700 80136000 0.2276 64 chr8 80358600 80358900 0.0125 87 chr8 81134100 81134400 0.2326 45 chr8 81327600 81327900 0.245 74 chr8 81429600 81430200 0.2223 73 chr8 81768600 81769500 0.1745 75 chr8 81771900 81772200 0.1092 88 chr8 82284300 82285500 0.2576 51 chr8 83439300 83441100 0.0894 79 chr8 83450700 83452800 0.0802 70 chr8 83883600 83883900 0 27 chr8 84050400 84050700 0.2959 54 chr8 84420900 84423000 0.1842 86 chr8 84465000 84466200 0.0535 82 chr8 84615600 84616500 0.0074 185 chr8 84618300 84618900 0.0074 185 chr8 85043400 85043700 0.1693 28 chr8 85642800 85644000 0 462 chr8 85645500 85659900 0 1042 chr8 85661400 85664100 0 1042 chr8 85714200 85828800 0 1030 chr8 86586900 86587200 0.1868 74 chr8 86804100 86804400 0.1781 70 chr8 87227400 87227700 0.1791 75 chr8 87322800 87323100 0.3776 48 chr8 87325200 87325500 0.1693 73 chr8 87326700 87327000 0.1693 73 chr8 87378000 87378300 0.4317 59 chr8 87485100 87487200 0.2286 91 chr8 87625500 87627000 0.315 46 chr8 87629100 87629700 0.0653 51 chr8 88149900 88154400 0.0302 89 chr8 88251600 88252200 0.1668 71 chr8 88345800 88346100 0.1275 42 chr8 88380000 88380300 0.1809 12 chr8 88686300 88691700 0 72 chr8 89444100 89444700 0.2756 70 chr8 89553600 89554200 0.3476 66 chr8 89555700 89557200 0.0307 56 chr8 90057000 90057300 0.3577 33 chr8 90684300 90685500 0.0348 101 chr8 91170600 91170900 0.2035 67 chr8 91193100 91194000 0.0993 69 chr8 91307100 91307400 0.1406 79 chr8 91520400 91527900 0 76 chr8 91558800 91564500 0 90 chr8 91796400 91796700 0.3771 46 chr8 91798800 91799100 0.2092 94 chr8 91895400 91895700 0.1773 84 chr8 93406500 93412500 0 140 chr8 93485100 93485400 0.1799 48 chr8 94415400 94415700 0.1936 80 chr8 94590300 94592400 0 76 chr8 95368500 95372100 0.0939 81 chr8 95374500 95374800 0.3179 73 chr8 95552400 95557800 0.0304 83 chr8 96085800 96086100 0.3706 34 chr8 96118500 96119400 0.1411 96 chr8 96121200 96122100 0.219 78 chr8 96557100 96557400 0.2088 87 chr8 96695100 96695400 0.1892 52 chr8 96739200 96739800 0.2045 81 chr8 96741900 96742200 0.2035 63 chr8 97296000 97301100 0.0152 120 chr8 98261100 98261700 0.2869 75 chr8 98265000 98265900 0.2329 63 chr8 98584500 98584800 0.2381 75 chr8 98615400 98617500 0.1299 77 chr8 98619600 98620200 0.0462 88 chr8 98652600 98652900 0.2071 76 chr8 99052200 99052500 0.0775 56 chr8 99083700 99084000 0.2628 68 chr8 99220800 99221100 0.1743 44 chr8 99293100 99293700 0.1339 80 chr8 99426300 99427500 0.0329 68 chr8 99693300 99694800 0 79 chr8 99849900 99850200 0.2795 54 chr8 100891500 100891800 0.214 37 chr8 101679000 101679300 0.1486 73 chr8 101683500 101683800 0.3164 87 chr8 101893500 101894400 0.1275 75 chr8 101896800 101897100 0.1993 45 chr8 102136500 102136800 0.2491 64 chr8 102138000 102138300 0.2688 71 chr8 103603800 103605300 0.0797 77 chr8 103607700 103608000 0.2395 69 chr8 103784400 103785000 0.1139 70 chr8 104059500 104059800 0.4039 74 chr8 104526600 104526900 0.2353 69 chr8 104627700 104628000 0.254 42 chr8 104739900 104745600 0 75 chr8 105169200 105169500 0.0012 24 chr8 105360600 105360900 0.2246 52 chr8 105367200 105368100 0.0031 62 chr8 106894500 106894800 0.3763 75 chr8 107241600 107241900 0.2875 86 chr8 107243700 107244000 0.2823 72 chr8 107246100 107246400 0.32 86 chr8 107891100 107891400 0.1317 40 chr8 107893500 107893800 0.2401 90 chr8 108947100 108947400 0.3486 47 chr8 110888100 110888400 0.0564 29 chr8 110952600 110954400 0.0172 74 chr8 110955900 110957100 0.0172 74 chr8 111156000 111156300 0.0965 23 chr8 111634800 111636000 0.1845 78 chr8 112595400 112596000 0.0549 55 chr8 112597500 112598100 0.1341 70 chr8 112911600 112911900 0.1442 210 chr8 113304300 113304600 0.078 79 chr8 113451600 113451900 0.0702 56 chr8 113512200 113512500 0.2314 50 chr8 113568300 113568600 0.2777 57 chr8 113609700 113610000 0.3303 39 chr8 113611200 113611500 0.3531 61 chr8 113674500 113674800 0.1035 76 chr8 113780100 113780400 0.2638 56 chr8 113909400 113910300 0.0692 68 chr8 114003300 114003600 0.1511 80 chr8 114044400 114044700 0.2358 66 chr8 114045900 114046200 0.2358 66 chr8 114164700 114165000 0.3204 52 chr8 114177300 114177600 0.2311 69 chr8 114286200 114286500 0.2974 68 chr8 114509100 114509700 0.0847 83 chr8 114581700 114582300 0.168 68 chr8 114584100 114584400 0.3541 67 chr8 114633000 114633600 0.0736 58 chr8 114634800 114635100 0.2448 67 chr8 115216500 115216800 0.1978 69 chr8 116679000 116680800 0.0955 88 chr8 118875600 118875900 0.0781 37 chr8 119159700 119160300 0.0036 81 chr8 119161800 119162700 0.0036 81 chr8 119163900 119164200 0.1665 70 chr8 119235900 119236200 0.0197 68 chr8 119475300 119475600 0.2519 64 chr8 120190800 120191100 0.4637 65 chr8 120351300 120354300 0.0046 71 chr8 120522000 120522300 0.1721 35 chr8 120636300 120636600 0.2827 46 chr8 120645600 120646500 0.0217 85 chr8 120647700 120649800 0.0217 85 chr8 121782000 121782300 0.2049 57 chr8 122245800 122246100 0.0467 82 chr8 122248200 122248500 0.0467 82 chr8 122249700 122250000 0.0467 82 chr8 122329500 122329800 0.3254 84 chr8 122331000 122331300 0.2322 70 chr8 122445300 122445600 0.2152 55 chr8 122480400 122480700 0.3724 53 chr8 123860100 123863700 0.034 84 chr8 123865200 123865500 0.034 84 chr8 124171800 124172100 0.4381 74 chr8 125583000 125588700 0 85 chr8 126236700 126237000 0.1965 21 chr8 126313500 126315300 0.0197 69 chr8 126317100 126318300 0.0587 51 chr8 126801600 126801900 0.0722 89 chr8 126803100 126803400 0.0722 89 chr8 126980700 126981600 0.0071 63 chr8 126983700 126985500 0.0071 63 chr8 127192800 127193400 0.2683 54 chr8 127203600 127203900 0.1562 51 chr8 127313700 127314000 0.3236 96 chr8 127317300 127317900 0.0484 74 chr8 127320300 127320600 0.0484 74 chr8 127380000 127381800 0.0013 57 chr8 127630200 127630800 0.2566 75 chr8 128118600 128118900 0.327 59 chr8 128328900 128329200 0.3659 48 chr8 128453100 128459100 0 92 chr8 128711400 128711700 0.2136 44 chr8 128715600 128718000 0.0498 57 chr8 128825100 128826000 0.1021 71 chr8 128892000 128896800 0.0915 58 chr8 129152700 129155700 0.0904 72 chr8 129157200 129157500 0.0904 72 chr8 129329100 129329400 0.0595 94 chr8 129496500 129497700 0.0289 40 chr8 130049700 130050000 0.4889 42 chr8 131638800 131639100 0.312 87 chr8 131772300 131776800 0.0213 98 chr8 131871900 131872200 0.1703 79 chr8 132617700 132618600 0.0511 77 chr8 133313100 133314600 0 60 chr8 134070900 134076600 0 98 chr8 134416200 134417400 0.2952 57 chr8 134498400 134498700 0.335 43 chr8 135260400 135261000 0.1285 70 chr8 135262200 135264300 0.0609 83 chr8 135340200 135340500 0.2326 59 chr8 135876300 135881700 0 69 chr8 135884400 135884700 0.1787 44 chr8 135954600 135955200 0.0074 86 chr8 136191000 136191600 0.1389 84 chr8 136193100 136193400 0.1389 84 chr8 136438200 136443900 0 134 chr8 136748400 136748700 0.4462 51 chr8 136992000 136992300 0.4207 17 chr8 137236200 137236500 0.0495 27 chr8 137558700 137559000 0.2577 57 chr8 137560500 137560800 0.2281 65 chr8 138037200 138037500 0.3008 59 chr8 138952500 138952800 0.0535 71 chr8 139460100 139463400 0.1756 112 chr8 139872600 139872900 0.4809 52 chr8 140157000 140157300 0.4425 132 chr8 140196000 140196600 0.1362 102 chr8 140292600 140292900 0.3371 57 chr8 140622300 140623200 0.1398 43 chr8 141262200 141262500 0.1921 61 chr8 141335100 141335700 0.021 68 chr8 141429600 141429900 0.4208 52 chr8 141492300 141493200 0 325 chr8 141550800 141551400 0.2214 28 chr8 141632400 141634500 0 45 chr8 141713700 141714000 0.4446 156 chr8 141970800 141971100 0.0677 44 chr8 142255500 142255800 0.4424 148 chr8 142390500 142390800 0.2071 47 chr8 142685100 142685400 0.4618 56 chr8 142760700 142761000 0.2302 52 chr8 142881000 142882200 0.2491 117 chr8 142898400 142898700 0.3789 61 chr8 143085000 143085300 0.4484 59 chr8 143167500 143167800 0.4575 19 chr8 143205300 143205900 0.3583 74 chr8 143458500 143458800 0.2622 57 chr8 143487900 143488200 0.4929 43 chr8 143492700 143493000 0.4634 50 chr8 143641500 143641800 0.3764 21 chr8 143661900 143662500 0.2343 88 chr8 143692500 143692800 0.3108 38 chr8 143695800 143696100 0.4388 54 chr8 143858400 143866500 0 150 chr8 143981400 143982000 0.2027 142 chr8 144125700 144126000 0.4887 792 chr8 144231000 144231300 0.2118 75 chr8 144281100 144281400 0.4415 54 chr8 144380400 144381000 0.4128 102 chr8 144531300 144531900 0.0396 171 chr8 144612300 144612600 0.0068 59 chr8 144624600 144626400 0.1235 60 chr8 144634200 144634800 0.0431 32 chr8 144687300 144687600 0.3703 67 chr9 12300 13800 0.0465 151 chr9 15000 39900 0 160 chr9 49500 49800 0.3305 50 chr9 51000 51600 0.0617 132 chr9 56100 56400 0.0771 133 chr9 66000 68400 0 97 chr9 70800 71400 0.2869 125 chr9 77400 78000 0.0222 125 chr9 88800 89100 0.2486 61 chr9 92100 92400 0.1925 101 chr9 96300 96900 0.1799 86 chr9 107400 107700 0.3139 89 chr9 119100 120000 0.0606 105 chr9 122700 123300 0.0606 105 chr9 124500 126300 0.0606 105 chr9 130200 131100 0.002 77 chr9 132900 138000 0.002 77 chr9 141000 144300 0.1041 73 chr9 147300 147600 0.2553 57 chr9 151500 153000 0.2192 64 chr9 156900 157200 0.2045 68 chr9 164100 165900 0.0895 65 chr9 167700 168300 0.1403 95 chr9 170700 171000 0.0808 37 chr9 173100 173400 0.2202 58 chr9 176100 176400 0.1479 50 chr9 183600 185100 0.0012 77 chr9 189600 190200 0.1762 74 chr9 194400 194700 0.2737 29 chr9 320100 322200 0 60 chr9 380100 380700 0 54 chr9 400500 400800 0.3634 111 chr9 707700 708300 0.0013 84 chr9 808800 809100 0.3369 121 chr9 998700 999000 0.2021 49 chr9 1224900 1229400 0.0053 80 chr9 1338300 1338900 0 78 chr9 1572000 1572300 0.3342 82 chr9 3147300 3147600 0.3637 49 chr9 3504300 3504900 0.2378 30 chr9 3780600 3780900 0.1316 40 chr9 4346700 4347000 0.26 24 chr9 4608000 4608600 0.0984 90 chr9 5239800 5242800 0 76 chr9 5302800 5304300 0 56 chr9 5338200 5339400 0 71 chr9 5684100 5684400 0.4075 97 chr9 5962200 5963400 0.009 68 chr9 5964600 5964900 0.009 68 chr9 6137700 6138000 0.1928 38 chr9 6139500 6139800 0.2914 95 chr9 6141300 6141600 0.2914 95 chr9 6179400 6179700 0.1712 98 chr9 6623100 6623400 0.343 69 chr9 6808200 6808500 0.2193 38 chr9 7668000 7668300 0.0211 74 chr9 8017800 8018100 0.1389 53 chr9 8334600 8334900 0.1419 18 chr9 9413100 9413400 0.2793 42 chr9 9932400 9933000 0.1648 66 chr9 10020600 10022400 0 40 chr9 10136700 10137600 0 90 chr9 10498800 10499100 0.2606 33 chr9 12337500 12338100 0.0957 73 chr9 12477000 12477600 0.0531 69 chr9 12556800 12559500 0 67 chr9 13039800 13040400 0.0964 72 chr9 13043100 13043400 0.0681 30 chr9 14664900 14665500 0.0155 83 chr9 14666700 14669100 0.0155 83 chr9 15326700 15327000 0.2868 57 chr9 15406500 15407700 0.0065 43 chr9 15948300 15948600 0.4108 49 chr9 16466100 16467300 0 69 chr9 17285700 17287200 0.1519 83 chr9 17544000 17544300 0.3432 65 chr9 17576400 17576700 0.1145 40 chr9 17685900 17686500 0.0629 59 chr9 17764800 17765100 0.1421 45 chr9 17780700 17781300 0.017 60 chr9 17912400 17912700 0.0514 26 chr9 17923200 17925300 0.2098 105 chr9 17944500 17945400 0.0754 59 chr9 18198600 18198900 0.108 85 chr9 18716700 18717000 0.3559 52 chr9 19536600 19541100 0.0128 84 chr9 20657100 20658000 0.0304 69 chr9 20920200 20920500 0.4029 51 chr9 21367500 21367800 0.1713 66 chr9 21440700 21441000 0.178 65 chr9 21537300 21538200 0.0006 107 chr9 21539700 21541500 0.1682 83 chr9 22349400 22352100 0.0746 57 chr9 22353600 22354200 0.1106 111 chr9 22700700 22701300 0.052 50 chr9 22734900 22735200 0.2147 48 chr9 22999500 22999800 0.0251 23 chr9 23075100 23075400 0.1368 28 chr9 23936100 23937300 0.0312 57 chr9 24226200 24226500 0.24 67 chr9 24576600 24576900 0.0318 56 chr9 24579300 24579600 0.4509 61 chr9 25073700 25074000 0.1617 107 chr9 25161600 25161900 0.4988 12 chr9 25285800 25286100 0.2672 52 chr9 26964000 26964300 0.1229 73 chr9 27691800 27692100 0.0681 89 chr9 27694200 27694500 0.0681 89 chr9 27696000 27696300 0.0681 89 chr9 28097400 28097700 0.1949 40 chr9 28112100 28116900 0 85 chr9 28189200 28189800 0.3076 102 chr9 28349400 28349700 0.234 84 chr9 28352400 28353300 0.234 84 chr9 28554900 28555200 0.369 95 chr9 29306100 29306400 0.1966 66 chr9 29624700 29625000 0.0911 22 chr9 30110700 30111000 0.4998 59 chr9 30171300 30171600 0.2917 93 chr9 31296900 31299900 0.0765 78 chr9 31553100 31553700 0.1267 59 chr9 31632900 31633200 0.264 72 chr9 32212800 32213100 0.3022 64 chr9 32711400 32711700 0.0557 35 chr9 32713500 32713800 0.0216 40 chr9 32731800 32732100 0.2253 67 chr9 33423900 33424200 0.3451 74 chr9 33579000 33579300 0.3023 45 chr9 34244400 34245900 0 68 chr9 34273500 34274700 0 69 chr9 34847400 34847700 0.3317 104 chr9 34872600 34872900 0.2157 72 chr9 35372700 35374200 0 14 chr9 35884200 35884500 0.2678 51 chr9 35913600 35914200 0.3722 136 chr9 36347100 36347400 0.1753 232 chr9 38241300 38241900 0.1446 48 chr9 38243100 38243400 0.0138 56 chr9 38325300 38325600 0.1918 34 chr9 38556000 38556600 0.306 30 chr9 38565000 38565300 0.4122 54 chr9 38775600 38777700 0 48 chr9 38781000 38782500 0.051 78 chr9 38783700 38784000 0.0923 48 chr9 38787000 38787300 0.2371 41 chr9 38788800 38789100 0.2371 41 chr9 38798100 38798400 0.1305 26 chr9 38800800 38801100 0.2731 27 chr9 38808300 38808600 0.3182 36 chr9 38809800 38810100 0.454 42 chr9 38811900 38812200 0.1935 40 chr9 38816100 38816400 0.0544 43 chr9 38818500 38821800 0.0864 49 chr9 38824200 38825100 0.0176 56 chr9 38829000 38829600 0.1478 49 chr9 38832900 38843700 0 67 chr9 38844900 38845800 0 67 chr9 38847000 38852100 0 67 chr9 38853900 38862900 0 67 chr9 38864100 38875200 0 67 chr9 38877300 38889900 0 67 chr9 38891100 38896200 0 80 chr9 38897400 38916600 0 80 chr9 38918700 38921100 0.0604 63 chr9 38924400 38925000 0.0074 46 chr9 38926200 38946900 0 95 chr9 38949000 38949600 0 84 chr9 38952000 38958000 0 84 chr9 38959800 38960700 0 84 chr9 38961900 38965200 0 84 chr9 38966400 38972400 0 101 chr9 38973900 38976600 0.093 92 chr9 38978400 38988900 0 134 chr9 38998500 38998800 0.0713 97 chr9 39029100 39029400 0.3453 105 chr9 39032100 39032400 0.1851 102 chr9 39053100 39053400 0.2562 85 chr9 39060900 39061200 0.2873 102 chr9 39071700 39072000 0.1633 57 chr9 39150300 39150900 0.0821 28 chr9 39152100 39154800 0 50 chr9 39156600 39159000 0 50 chr9 39160200 39248400 0 50 chr9 39252000 39252900 0 44 chr9 39254100 39288000 0 38 chr9 39289500 39357000 0 80 chr9 39358200 39358500 0 80 chr9 39360000 39360300 0.015 65 chr9 39362100 39367200 0 53 chr9 39369300 39446400 0 83 chr9 39448500 39448800 0.2507 66 chr9 39452700 39453000 0.114 52 chr9 39465000 39465300 0.1469 59 chr9 39469200 39469500 0.1398 53 chr9 39473700 39474000 0.2844 50 chr9 39480300 39480600 0.343 58 chr9 39486000 39488400 0 68 chr9 39489900 39491700 0 68 chr9 39493200 39498600 0 68 chr9 39499800 39505500 0 112 chr9 39507000 39521700 0 112 chr9 39522900 39532200 0 112 chr9 39534000 39537600 0 111 chr9 39543000 39543300 0.2878 109 chr9 39549000 39549300 0.015 81 chr9 39565200 39565500 0.3203 41 chr9 39567300 39569700 0.099 50 chr9 39573300 39573600 0.0628 65 chr9 39593700 39604800 0 90 chr9 39610200 39613800 0.0296 57 chr9 39615900 39744000 0 98 chr9 39745500 39808800 0 98 chr9 39812100 39813300 0.1315 98 chr9 39814800 39818400 0 71 chr9 39819600 39820500 0 71 chr9 39822300 39824100 0 71 chr9 39839100 40001400 0 101 chr9 40002600 40005600 0 101 chr9 40007100 40013700 0 101 chr9 40015500 40016100 0 101 chr9 40017300 40017900 0.3907 61 chr9 40019700 40020000 0.0779 61 chr9 40022100 40024800 0.0779 61 chr9 40026600 40028100 0.0257 66 chr9 40029300 40030800 0.0257 66 chr9 40032000 40032300 0 60 chr9 40033500 40035000 0 60 chr9 40037100 40038300 0 60 chr9 40039800 40043400 0 58 chr9 40044600 40045500 0 58 chr9 40047000 40050300 0 89 chr9 40052100 40054800 0 89 chr9 40056000 40056300 0 89 chr9 40057800 40058100 0 89 chr9 40059300 40062900 0 89 chr9 40064700 40086900 0 100 chr9 40088100 40105800 0 100 chr9 40107000 40128900 0 100 chr9 40131300 40137300 0 95 chr9 40138800 40174500 0 94 chr9 40177800 40189500 0 51 chr9 40191000 40191900 0.1841 56 chr9 40197000 40199700 0 72 chr9 40200900 40217400 0 72 chr9 40218600 40220700 0.1122 85 chr9 40222200 40222500 0.1122 85 chr9 40227000 40228500 0.0096 67 chr9 40229700 40390200 0 136 chr9 40391700 40501800 0 95 chr9 40503000 40533900 0 95 chr9 40536000 40536300 0.1878 19 chr9 40537500 40543200 0 52 chr9 40545900 40546800 0 122 chr9 40548000 40553400 0 122 chr9 40554900 40561200 0 122 chr9 40562400 40570500 0 122 chr9 40572000 40572900 0.0016 55 chr9 40574100 40575000 0 96 chr9 40576800 40578000 0 96 chr9 40581900 40584000 0 84 chr9 40585200 40586700 0.0013 97 chr9 40588200 40589700 0 87 chr9 40590900 40591200 0 87 chr9 40593000 40609500 0 117 chr9 40611300 40646400 0 117 chr9 40647600 40650600 0 117 chr9 40651800 40695900 0 67 chr9 40698600 40699200 0.37 71 chr9 40700400 40702500 0 57 chr9 40704300 40706700 0 57 chr9 40707900 40711500 0 65 chr9 40713600 40714200 0 65 chr9 40715400 40716000 0.015 70 chr9 40717500 40718100 0.0021 48 chr9 40719300 40720200 0.1169 73 chr9 40723200 40725600 0.0718 74 chr9 40726800 40727100 0 76 chr9 40728300 40730700 0 76 chr9 40731900 40735200 0 76 chr9 40738200 40739100 0.0047 71 chr9 40740600 40740900 0.0047 71 chr9 40742100 40745100 0.0047 71 chr9 40746300 40748100 0.0024 66 chr9 40749300 40754400 0 74 chr9 40759200 40760100 0.0108 62 chr9 40761900 40768200 0 76 chr9 40769700 40770900 0 76 chr9 40772400 40775400 0.0035 70 chr9 40776600 40777200 0.0035 70 chr9 40778400 40780200 0.0124 79 chr9 40783800 40784100 0.0173 80 chr9 40785300 40786500 0.0173 80 chr9 40791900 40796100 0 78 chr9 40798200 40799100 0 78 chr9 40801200 40801800 0.0983 62 chr9 40803300 40805700 0 56 chr9 40808100 40809600 0.0058 72 chr9 40811400 40811700 0.0058 72 chr9 40814100 40815600 0.044 123 chr9 40820400 40823100 0.025 86 chr9 40826400 40827900 0 77 chr9 40830300 40830600 0.1226 93 chr9 40833600 40835400 0 67 chr9 40836600 40836900 0.1845 74 chr9 40838400 40839600 0.1616 78 chr9 40841700 40843500 0.0024 90 chr9 40847700 40849200 0.0782 63 chr9 40851600 40857900 0.0178 87 chr9 40860000 40860300 0.2293 57 chr9 40863900 40867500 0 83 chr9 40967400 40968000 0.0942 159 chr9 41017200 41017500 0.409 112 chr9 41057400 41057700 0.0854 136 chr9 41077800 41078100 0.2073 150 chr9 41081400 41081700 0.1175 121 chr9 41100000 41100300 0.3715 91 chr9 41101800 41108100 0 321 chr9 41109600 41110500 0 321 chr9 41112600 41124000 0 179 chr9 41125200 41131800 0 179 chr9 41133000 41150700 0 179 chr9 41151900 41154300 0 179 chr9 41155500 41183100 0 179 chr9 41184600 41206800 0 179 chr9 41208000 41211000 0 179 chr9 41213400 41224500 0 251 chr9 41233500 41233800 0.2686 213 chr9 41256000 41256900 0.1989 143 chr9 41260500 41262900 0.1451 260 chr9 41265600 41265900 0 267 chr9 41267700 41270100 0 267 chr9 41272200 41272800 0 142 chr9 41274900 41275500 0 142 chr9 41277000 41278200 0 142 chr9 41279700 41280000 0 142 chr9 41281200 41281500 0.3885 46 chr9 41283300 41283900 0.0407 170 chr9 41285100 41288400 0.0407 170 chr9 41291400 41292000 0.1923 76 chr9 41293500 41293800 0.0366 74 chr9 41297400 41298600 0 63 chr9 41300100 41301900 0.0004 76 chr9 41304300 41305500 0.0347 69 chr9 41311200 41312700 0 85 chr9 41314200 41314500 0.2433 52 chr9 41317500 41317800 0.0187 74 chr9 41319900 41324100 0.0303 107 chr9 41328000 41328300 0.0086 65 chr9 41330700 41332500 0.0978 132 chr9 41333700 41334000 0.0978 132 chr9 41337900 41341800 0 92 chr9 41343000 41344500 0 92 chr9 41346000 41346300 0.3651 83 chr9 41347500 41347800 0.0359 80 chr9 41351700 41352000 0.0859 70 chr9 41355900 41356500 0.3554 56 chr9 41359500 41366400 0 84 chr9 41367600 41367900 0 84 chr9 41370300 41370600 0.0082 83 chr9 41372100 41373900 0.0082 83 chr9 41375100 41376600 0.0082 83 chr9 41382300 41383200 0 61 chr9 41384700 41385000 0.2337 59 chr9 41386800 41387100 0.1759 68 chr9 41390400 41392500 0.0698 54 chr9 41394300 41394600 0.018 94 chr9 41395800 41397000 0.018 94 chr9 41398200 41400900 0 63 chr9 41402100 41404500 0.1142 63 chr9 41407200 41408100 0 71 chr9 41409600 41413800 0 71 chr9 41415000 41415300 0.0386 21 chr9 41424000 41424300 0.1064 64 chr9 41429100 41431500 0.1093 136 chr9 41434500 41436600 0.017 52 chr9 41438100 41438700 0.017 52 chr9 41441400 41443500 0 65 chr9 41446500 41446800 0.3605 23 chr9 41448600 41449200 0 61 chr9 41450700 41451900 0.0106 49 chr9 41453100 41454000 0.0326 74 chr9 41455500 41456700 0.0326 74 chr9 41461500 41462100 0.1144 65 chr9 41468100 41468400 0.1985 26 chr9 41469900 41471700 0.0514 65 chr9 41476800 41477100 0.3569 54 chr9 41479500 41479800 0.0246 63 chr9 41487900 41488200 0.3934 52 chr9 41490000 41491800 0.0248 54 chr9 41494200 41495400 0 74 chr9 41498100 41498400 0.3137 52 chr9 41499600 41502300 0.0005 90 chr9 41503800 41505300 0.2194 84 chr9 41507100 41507400 0.2194 84 chr9 41515500 41517900 0.0148 70 chr9 41520300 41520600 0.2929 70 chr9 41522400 41522700 0.2195 80 chr9 41525700 41527200 0 96 chr9 41532900 41533200 0.0388 79 chr9 41539200 41539500 0 114 chr9 41541600 41542200 0 114 chr9 41543400 41547900 0 114 chr9 41549100 41549400 0 114 chr9 41551200 41552700 0 114 chr9 41555100 41556000 0.0797 56 chr9 41573100 41614200 0 129 chr9 41615400 41616600 0 129 chr9 41620500 41622000 0 119 chr9 41628300 41631900 0 168 chr9 41636100 41637900 0.0045 81 chr9 41641200 41641500 0.279 46 chr9 41662500 41662800 0.3438 94 chr9 41664300 41668200 0 105 chr9 41669700 41670300 0 105 chr9 41676600 41687400 0 102 chr9 41688900 41689200 0.2573 34 chr9 41691600 41691900 0 92 chr9 41694900 41696400 0.0705 79 chr9 41698500 41700300 0.0004 110 chr9 41701500 41703300 0.0004 110 chr9 41705100 41706300 0.0226 103 chr9 41714100 41715000 0.1267 100 chr9 41718600 41736000 0 83 chr9 41741700 41742000 0.1411 78 chr9 41743200 41753700 0 94 chr9 41757000 41757300 0.1016 94 chr9 41758800 41769900 0 114 chr9 41771100 41771400 0 114 chr9 41772900 41773500 0 114 chr9 41776800 41777100 0.3226 119 chr9 41786100 41786400 0.0941 107 chr9 41792700 41793000 0.2103 53 chr9 41795100 41795400 0.1784 77 chr9 41805600 41805900 0.0239 38 chr9 41808300 41808900 0.0182 115 chr9 41812200 41915400 0 144 chr9 41916600 41916900 0.1518 63 chr9 41927100 41927400 0.1994 60 chr9 41957100 41957700 0.0066 62 chr9 41970000 41976600 0 68 chr9 41978100 41982600 0 70 chr9 41984100 41989500 0 70 chr9 41991300 41991600 0.14 70 chr9 41994300 42002400 0 79 chr9 42004200 42011700 0 79 chr9 42013200 42016500 0 79 chr9 42017700 42023100 0 67 chr9 42025200 42028500 0 75 chr9 42030300 42035100 0.0307 68 chr9 42038700 42041100 0 70 chr9 42043500 42043800 0 70 chr9 42045300 42045600 0 70 chr9 42048300 42053100 0 70 chr9 42056700 42057300 0 68 chr9 42058800 42062400 0 68 chr9 42065100 42066000 0 78 chr9 42068100 42070200 0 78 chr9 42072000 42074400 0.0396 64 chr9 42076500 42076800 0.4112 45 chr9 42080700 42085200 0 67 chr9 42087900 42088200 0.0612 38 chr9 42090900 42093000 0 74 chr9 42099900 42106200 0 63 chr9 42118800 42119100 0.4541 23 chr9 42122700 42123000 0.4023 50 chr9 42128700 42129000 0.1669 59 chr9 42131700 42132000 0.405 35 chr9 42135300 42135600 0.4858 56 chr9 42137100 42137400 0.4139 49 chr9 42180000 42180300 0.3499 67 chr9 42186000 42186600 0.2686 67 chr9 42187800 42188700 0.1007 75 chr9 42192900 42193200 0.2585 57 chr9 42198300 42198900 0.1179 49 chr9 42201000 42201300 0.2956 49 chr9 42204300 42204600 0.1578 55 chr9 42225900 42226200 0.1536 77 chr9 42318300 42318600 0.2497 90 chr9 42348300 42350700 0.0304 71 chr9 42356400 42357000 0.1889 18 chr9 42370500 42370800 0.2839 36 chr9 42401700 42402600 0.0241 42 chr9 42408300 42412200 0 99 chr9 42413400 42414000 0.0932 72 chr9 42417300 42417600 0.0967 28 chr9 42419100 42419400 0.0129 15 chr9 42440700 42441000 0.2758 73 chr9 42450000 42450300 0.2182 58 chr9 42465600 42465900 0.3021 70 chr9 42495600 42500700 0 79 chr9 42508500 42518100 0 81 chr9 42519300 42519600 0 81 chr9 42521100 42533400 0 81 chr9 42535800 42538200 0 70 chr9 42539400 42557100 0 115 chr9 42558300 42573900 0 115 chr9 42575100 42577500 0 115 chr9 42579300 42600000 0 115 chr9 42601500 42601800 0.0376 84 chr9 42603300 42637200 0 91 chr9 42638400 42660600 0 90 chr9 42662100 42689700 0 83 chr9 42691200 42691800 0 83 chr9 42729600 42729900 0.0322 51 chr9 42733200 42733500 0.1256 75 chr9 42741000 42741300 0.2516 75 chr9 42760800 42761100 0.1779 49 chr9 42784500 42785100 0.0223 51 chr9 42818400 42818700 0.0424 67 chr9 42820200 42822600 0.0424 67 chr9 42824400 42825300 0.2125 52 chr9 42826500 42826800 0.1949 39 chr9 42828600 42829500 0.0113 55 chr9 42857400 42857700 0.0011 46 chr9 42882300 42882900 0.2037 83 chr9 42896400 42897000 0.23 74 chr9 42907800 42908100 0.3132 76 chr9 42919200 42919500 0.327 52 chr9 42970500 42970800 0.0293 61 chr9 42996600 43000800 0 99 chr9 43002600 43003200 0 99 chr9 43009500 43009800 0.0959 45 chr9 43017300 43017600 0.2946 56 chr9 43029300 43029600 0.3126 54 chr9 43032600 43033200 0.0085 85 chr9 43040100 43040400 0.088 48 chr9 43042500 43044000 0.1417 50 chr9 43045200 43045800 0.257 63 chr9 43053000 43053600 0.0929 61 chr9 43062000 43062300 0.2665 39 chr9 43068300 43070400 0.0726 64 chr9 43076400 43076700 0.2255 78 chr9 43078200 43078500 0.2255 78 chr9 43091700 43092000 0.3956 43 chr9 43096500 43097100 0.1177 65 chr9 43105500 43106400 0.152 72 chr9 43131600 43134000 0.0358 73 chr9 43150500 43150800 0.2484 77 chr9 43194600 43195500 0.0115 41 chr9 43214400 43215000 0.0116 35 chr9 43216200 43216500 0.3752 276 chr9 43240500 43240800 0.317 79 chr9 43242000 43242300 0.1375 77 chr9 43275000 43281300 0 75 chr9 43283100 43332300 0 142 chr9 43333800 43370100 0 171 chr9 43371300 43377300 0 171 chr9 43382400 43382700 0.1462 46 chr9 43383900 43443600 0 413 chr9 43445100 43455600 0 583 chr9 43456800 44124600 0 583 chr9 44125800 44251500 0 626 chr9 44252700 44719500 0 626 chr9 44720700 44730600 0 626 chr9 44731800 44799000 0 626 chr9 44800200 44868300 0 626 chr9 44869500 44920200 0 626 chr9 44921400 45019200 0 626 chr9 45020400 45031500 0 626 chr9 45033600 45034500 0 308 chr9 45036000 45074400 0 308 chr9 45075600 45094500 0 308 chr9 45095700 45112800 0 308 chr9 45114600 45152100 0 265 chr9 45153300 45164700 0 265 chr9 45166200 45182700 0 261 chr9 45184200 45201000 0 261 chr9 45202500 45205800 0 261 chr9 45207600 45215400 0 261 chr9 45216900 45231600 0 239 chr9 45232800 45261900 0 239 chr9 45263400 45264600 0 239 chr9 45265800 45298500 0 239 chr9 45300900 45306000 0 239 chr9 45307500 45322500 0 239 chr9 45324000 45368400 0 361 chr9 45369600 45384300 0 361 chr9 45385500 45422700 0 361 chr9 45424200 45484200 0 361 chr9 45485700 45518700 0 361 chr9 60548400 60548700 0.1185 46 chr9 60550200 60552600 0 195 chr9 60553800 60570900 0 195 chr9 60572400 60616200 0 311 chr9 60618000 60656700 0 489 chr9 60657900 60687300 0 489 chr9 60744000 60744300 0.1796 30 chr9 60749100 60759600 0 68 chr9 60761400 60765300 0 68 chr9 60767100 60767700 0.1718 59 chr9 60769200 60772500 0 65 chr9 60773700 60779400 0 65 chr9 60829500 60864900 0 54 chr9 60866100 60875100 0 46 chr9 60876900 60885000 0 54 chr9 60886800 60887700 0 54 chr9 60891000 60893100 0 85 chr9 60894900 61003800 0 85 chr9 61053900 61138800 0 74 chr9 61143600 61144500 0 49 chr9 61146900 61151100 0 55 chr9 61152300 61158600 0 77 chr9 61159800 61161600 0 77 chr9 61163400 61163700 0 81 chr9 61166700 61173000 0 81 chr9 61174200 61179300 0 81 chr9 61182900 61191300 0 81 chr9 61192500 61211400 0 81 chr9 61212600 61213800 0 81 chr9 61218900 61224600 0 70 chr9 61226100 61226700 0.0029 52 chr9 61230900 61231800 0.0259 44 chr9 61282200 61318500 0 56 chr9 61319700 61329600 0 56 chr9 61334100 61337400 0 37 chr9 61338600 61345800 0 42 chr9 61347600 61362000 0 49 chr9 61363500 61363800 0 49 chr9 61366200 61366500 0.2502 41 chr9 61371600 61371900 0.1839 42 chr9 61373400 61373700 0.0679 35 chr9 61374900 61376700 0 40 chr9 61377900 61384500 0 54 chr9 61385700 61396500 0 54 chr9 61398900 61399500 0 39 chr9 61401900 61405500 0.0222 41 chr9 61407300 61407600 0.4734 31 chr9 61408800 61468800 0 52 chr9 61528800 61529400 0.1386 81 chr9 61575300 61575600 0.2392 41 chr9 61585500 61590900 0 70 chr9 61636500 61638300 0.1171 54 chr9 61644300 61644900 0.0774 72 chr9 61647000 61647300 0 84 chr9 61648500 61663800 0 84 chr9 61785300 61912800 0 1017 chr9 61914300 61915200 0.0001 95 chr9 61916700 61919700 0.0001 95 chr9 61920900 61933500 0 114 chr9 61934700 61944000 0 114 chr9 61945200 61946700 0 114 chr9 61947900 61948200 0 114 chr9 61949700 61950000 0 114 chr9 61952700 61977900 0 114 chr9 61979100 61979400 0.2765 40 chr9 61983300 61983900 0.3529 82 chr9 61986300 61986900 0.0135 35 chr9 61988100 61992000 0 53 chr9 61993500 61995900 0 55 chr9 61997400 62001000 0 65 chr9 62002500 62039100 0 65 chr9 62040300 62049000 0 59 chr9 62050800 62051400 0.0067 38 chr9 62052600 62053200 0 71 chr9 62054700 62055000 0 71 chr9 62056500 62060100 0 71 chr9 62061300 62146500 0 78 chr9 62147700 62149500 0 78 chr9 62249700 62439600 0 113 chr9 62440800 62442000 0.0149 74 chr9 62443200 62444400 0.0149 74 chr9 62445600 62446800 0.0149 74 chr9 62448000 62452500 0 120 chr9 62454000 62457900 0 120 chr9 62459100 62530200 0 120 chr9 62531400 62534400 0 120 chr9 62535600 62562300 0 120 chr9 62563500 62597100 0 120 chr9 62598600 62613300 0 120 chr9 62614500 62717400 0 105 chr9 62718600 62748900 0 85 chr9 62810100 62810400 0.3434 139 chr9 62812200 62813700 0.0172 244 chr9 62825100 62825400 0.2225 323 chr9 62829900 62830500 0.0087 163 chr9 62832300 62833200 0 163 chr9 62836800 62837100 0.0236 111 chr9 62840700 62841600 0.2316 175 chr9 62845800 62848200 0.0361 163 chr9 62853900 62854200 0.1924 106 chr9 62883600 62896800 0 82 chr9 62900100 62900700 0 82 chr9 62902800 62903100 0.2503 93 chr9 62904600 62907900 0 104 chr9 62910000 62913900 0 98 chr9 62915400 62918400 0 98 chr9 62919900 62921100 0 98 chr9 62922900 62923200 0 98 chr9 62924700 62945700 0 98 chr9 62946900 62949600 0 98 chr9 62951100 62958300 0 98 chr9 63008400 63023400 0 62 chr9 63024900 63041400 0 59 chr9 63042600 63180000 0 125 chr9 63181500 63202800 0 125 chr9 63252900 63257100 0 75 chr9 63258600 63259800 0.0347 41 chr9 63261900 63262800 0.0807 45 chr9 63267900 63269400 0 69 chr9 63271500 63296100 0 69 chr9 63297300 63302100 0 72 chr9 63304200 63312300 0 72 chr9 63316200 63324900 0 76 chr9 63331500 63335400 0 56 chr9 63336600 63337800 0.0137 66 chr9 63339000 63341100 0 68 chr9 63343200 63343500 0.1252 52 chr9 63352500 63353100 0.1794 76 chr9 63358800 63360300 0 76 chr9 63363300 63375900 0 126 chr9 63377700 63379200 0.0033 95 chr9 63382800 63384900 0 82 chr9 63386100 63396600 0 105 chr9 63397800 63399900 0 105 chr9 63402000 63405300 0 105 chr9 63406500 63449100 0 105 chr9 63451200 63492300 0 72 chr9 63543000 63543600 0.096 64 chr9 63544800 63545100 0.096 64 chr9 63547200 63547800 0.096 64 chr9 63566100 63567600 0.0008 67 chr9 63568800 63570900 0.006 88 chr9 63598500 63599100 0.0932 45 chr9 63600900 63603300 0.0814 49 chr9 63639000 63640200 0.0464 55 chr9 63645000 63646500 0.1138 41 chr9 63650100 63652200 0 62 chr9 63653700 63654600 0.228 67 chr9 63660600 63663900 0.0029 63 chr9 63666900 63667200 0.0402 18 chr9 63671400 63671700 0.2133 43 chr9 63675300 63675600 0.2345 38 chr9 63687000 63687300 0.1914 56 chr9 63711300 63711600 0.4098 52 chr9 63717300 63718500 0.3637 90 chr9 63737400 63737700 0.4367 174 chr9 63765900 63767700 0.0567 147 chr9 63768900 63769200 0.0567 147 chr9 63772800 63774600 0.0926 149 chr9 63778200 63780900 0.121 112 chr9 63801900 63803400 0.1709 163 chr9 63829200 63829500 0.3998 151 chr9 63834300 63834600 0.1884 122 chr9 63867000 63868200 0.161 291 chr9 63872100 63872700 0.2155 183 chr9 63884100 63884400 0.0592 143 chr9 63918300 63918600 0.3972 60 chr9 63969000 63969300 0.4029 114 chr9 63972600 63972900 0.3089 114 chr9 63983400 63984000 0.1122 152 chr9 63991500 63992400 0.1152 162 chr9 63998700 64000500 0.0599 137 chr9 64002000 64002600 0.123 108 chr9 64006200 64006800 0.0129 156 chr9 64008900 64009200 0.1662 123 chr9 64185600 64189200 0 35 chr9 64190400 64215000 0 44 chr9 64315200 64335300 0 101 chr9 64340700 64365600 0 113 chr9 64368600 64400100 0 84 chr9 64401300 64402800 0 67 chr9 64404300 64405800 0.0008 98 chr9 64407000 64407300 0.0008 98 chr9 64409700 64411500 0.0183 87 chr9 64413600 64417200 0.0183 87 chr9 64418400 64426200 0 83 chr9 64427700 64437600 0 83 chr9 64441500 64445700 0.0103 85 chr9 64447200 64450800 0.0071 119 chr9 64453800 64454100 0.1227 63 chr9 64458000 64462200 0 106 chr9 64464600 64465800 0.0208 110 chr9 64468800 64469100 0.0413 71 chr9 64472400 64474200 0.0207 86 chr9 64475400 64475700 0.1004 78 chr9 64476900 64477200 0.1004 78 chr9 64478700 64480200 0.049 83 chr9 64485000 64486200 0.1757 92 chr9 64491300 64494000 0.0353 100 chr9 64497900 64498200 0.1778 82 chr9 64500000 64500300 0.1787 75 chr9 64502400 64502700 0.2731 52 chr9 64505400 64506300 0.2583 81 chr9 64507500 64507800 0.0005 96 chr9 64511400 64513500 0.0005 96 chr9 64515300 64515600 0 93 chr9 64516800 64517100 0 93 chr9 64519200 64520100 0 93 chr9 64521600 64524900 0 73 chr9 64527900 64539000 0 105 chr9 64541400 64547700 0.0145 92 chr9 64549200 64549800 0.0145 92 chr9 64551000 64554300 0 80 chr9 64555500 64558800 0 80 chr9 64560600 64583700 0 80 chr9 64585200 64585500 0 80 chr9 64587000 64768800 0 104 chr9 64770900 64771500 0 104 chr9 64776600 64776900 0.0019 49 chr9 64778400 64780800 0.0019 49 chr9 64784700 64791300 0 107 chr9 64792500 64803300 0 107 chr9 64805100 64806300 0.2383 56 chr9 64808100 64814100 0 45 chr9 64816200 64819200 0 66 chr9 64821000 64822800 0 58 chr9 64824000 64826100 0 60 chr9 64827900 64834800 0 60 chr9 64837200 64839600 0 60 chr9 64840800 64841400 0.0033 53 chr9 64842600 64844400 0.0033 53 chr9 64846800 64849200 0 61 chr9 64850400 64854300 0 77 chr9 64855500 64862700 0 77 chr9 64863900 64878000 0 77 chr9 64880100 64888200 0 77 chr9 64890600 64898100 0 77 chr9 64899300 64901100 0 77 chr9 64903800 64908600 0 76 chr9 64909800 64910100 0.2286 56 chr9 64911300 64911600 0.2286 56 chr9 64912800 64920000 0 75 chr9 64922100 64927500 0 75 chr9 64928700 64935600 0 75 chr9 64937700 64938000 0.4761 119 chr9 64947000 64950000 0.0837 78 chr9 64952100 64957500 0.0019 88 chr9 64959000 64962300 0 94 chr9 64963500 64963800 0.0815 82 chr9 64965600 64970400 0 69 chr9 64973700 64976700 0 71 chr9 64979400 64979700 0.2143 66 chr9 64981200 64981500 0.0011 73 chr9 64982700 64988400 0.0011 73 chr9 64989600 64997700 0 93 chr9 65079600 65080200 0.0007 48 chr9 65130600 65144100 0 86 chr9 65145300 65207400 0 86 chr9 65208900 65258100 0 86 chr9 65259600 65285100 0 156 chr9 65286300 65325000 0 156 chr9 65375100 65376300 0 82 chr9 65502600 65502900 0.3065 60 chr9 65514000 65514300 0.1086 75 chr9 65517000 65522100 0 68 chr9 65531700 65532000 0.1538 71 chr9 65535900 65536200 0.245 62 chr9 65542800 65544300 0.1032 86 chr9 65545500 65545800 0.1032 86 chr9 65559900 65560200 0.2526 114 chr9 65567700 65568900 0.2893 92 chr9 65575500 65576700 0.0664 90 chr9 65578200 65594700 0 92 chr9 65645100 65648400 0 187 chr9 65650200 65656500 0 119 chr9 65659800 65660100 0.1989 76 chr9 65663400 65663700 0.0431 63 chr9 65665500 65673300 0.0054 100 chr9 65674800 65676600 0.0402 100 chr9 65678100 65679300 0.0402 100 chr9 65682600 65690700 0.0077 118 chr9 65692200 65692800 0.0042 91 chr9 65694600 65707800 0 130 chr9 65709600 65713500 0 130 chr9 65715900 65716200 0 156 chr9 65718300 65732400 0 156 chr9 65734800 65735100 0 156 chr9 65736300 65736600 0 141 chr9 65738100 65741700 0 141 chr9 65742900 65745000 0 141 chr9 65747400 65762400 0 81 chr9 65763600 65809800 0 121 chr9 65811000 65811300 0 121 chr9 65813700 65900400 0 121 chr9 65901600 65940300 0 121 chr9 65941800 65965800 0 121 chr9 65967000 65984400 0 121 chr9 65986500 65990700 0 121 chr9 65991900 66030600 0 121 chr9 66032100 66068400 0 121 chr9 66069600 66146400 0 108 chr9 66148800 66157800 0 88 chr9 66159000 66160800 0.1304 75 chr9 66163800 66169800 0 90 chr9 66176100 66177000 0.0114 65 chr9 66178200 66179100 0.0586 52 chr9 66183900 66185400 0.0493 68 chr9 66186600 66196200 0 68 chr9 66201900 66235200 0 98 chr9 66236700 66237600 0 98 chr9 66238800 66245400 0 98 chr9 66247800 66248400 0 97 chr9 66249900 66251100 0 97 chr9 66252600 66260700 0 97 chr9 66262200 66262800 0 97 chr9 66267900 66268200 0.2877 63 chr9 66270600 66278100 0 90 chr9 66281100 66288600 0 70 chr9 66289800 66302700 0 70 chr9 66303900 66312300 0 70 chr9 66313500 66314100 0 76 chr9 66315600 66326700 0 76 chr9 66328500 66329700 0 76 chr9 66331800 66336900 0 65 chr9 66338400 66355800 0 65 chr9 66358500 66359100 0 65 chr9 66360900 66366000 0 65 chr9 66367500 66390600 0 65 chr9 66591300 66600600 0 73 chr9 66601800 66612300 0 98 chr9 66614100 66616800 0 72 chr9 66618300 66628500 0 85 chr9 66629700 66655500 0 85 chr9 66656700 66673500 0 85 chr9 66674700 66731100 0 145 chr9 66732300 66735600 0 145 chr9 66737700 66738300 0 89 chr9 66739500 66765000 0 89 chr9 66766200 66768300 0 89 chr9 66769500 66773400 0 112 chr9 66779700 66780600 0.0476 52 chr9 66791400 66792000 0.0078 73 chr9 66795300 66795600 0.226 51 chr9 66797400 66797700 0.2981 62 chr9 66808800 66809100 0.383 64 chr9 66810900 66812100 0.0984 60 chr9 66813300 66813600 0.3684 23 chr9 66815700 66816000 0.1352 96 chr9 66821100 66822000 0.1287 113 chr9 66827700 66831300 0 97 chr9 66833700 66842700 0 118 chr9 66844500 66865500 0 98 chr9 66866700 66875400 0 98 chr9 66876900 66877500 0 98 chr9 66895800 66896100 0.1111 45 chr9 66902400 66902700 0.4596 59 chr9 66912300 66912600 0.0783 50 chr9 66916500 66917100 0.3157 65 chr9 66918900 66919500 0.0565 74 chr9 66924600 66929400 0.0718 56 chr9 66933600 66936900 0.0349 55 chr9 66939600 66940800 0.0629 56 chr9 66947700 66948300 0.1049 46 chr9 66955800 66956400 0.1357 64 chr9 66959100 66960300 0 61 chr9 66963000 66969000 0 73 chr9 66970200 66972300 0 58 chr9 66973800 66975300 0.1231 57 chr9 66979500 66980100 0 73 chr9 66981600 66996600 0 73 chr9 66997800 67001100 0 73 chr9 67002300 67005000 0 65 chr9 67006200 67013100 0 52 chr9 67014300 67015200 0 52 chr9 67016400 67016700 0.0042 68 chr9 67018800 67019400 0.0042 68 chr9 67020900 67022700 0.0042 68 chr9 67023900 67037700 0 67 chr9 67041600 67043700 0 38 chr9 67045200 67049100 0 60 chr9 67053000 67053300 0.2692 62 chr9 67059600 67059900 0.0309 54 chr9 67064400 67065000 0.183 77 chr9 67077600 67077900 0.337 62 chr9 67080600 67086900 0 76 chr9 67094400 67096500 0 52 chr9 67099200 67099500 0.089 45 chr9 67101600 67106700 0 65 chr9 67112400 67123500 0 70 chr9 67125000 67133100 0 64 chr9 67134300 67141800 0 72 chr9 67143000 67143900 0 72 chr9 67145700 67148700 0 63 chr9 67150200 67150500 0.2467 43 chr9 67152300 67154100 0 62 chr9 67156800 67157100 0 62 chr9 67158300 67174200 0 76 chr9 67176300 67183200 0 74 chr9 67185000 67193400 0 62 chr9 67194900 67196100 0.0173 64 chr9 67197300 67208100 0 69 chr9 67210200 67397700 0 151 chr9 67399500 67410300 0 72 chr9 67411500 67412400 0 72 chr9 67413600 67413900 0 72 chr9 67417200 67426200 0 89 chr9 67427700 67433400 0 89 chr9 67434600 67548300 0 89 chr9 67549500 67591500 0 124 chr9 67592700 67607700 0 124 chr9 67614300 67614600 0.3275 64 chr9 67617300 67623000 0 89 chr9 67624200 67624500 0.2943 40 chr9 67626600 67637100 0 75 chr9 67641000 67679400 0 1810 chr9 67680600 67756800 0 1810 chr9 67758000 67758600 0.1544 94 chr9 67761600 67763100 0 132 chr9 67764300 67775700 0 132 chr9 67777800 67778100 0.1972 66 chr9 67779300 67782900 0 106 chr9 67784400 67790700 0 106 chr9 67791900 67822500 0 139 chr9 67824900 67829100 0 80 chr9 67830300 67831500 0 80 chr9 67833300 67839600 0 76 chr9 67841700 67844700 0 97 chr9 67846500 67848600 0 97 chr9 67853100 67853400 0.3974 65 chr9 67856100 67858800 0.102 92 chr9 67860600 67864500 0 85 chr9 67866300 67871100 0 85 chr9 67872900 67881600 0 85 chr9 67883100 67884300 0 85 chr9 67885800 67918800 0 109 chr9 67920300 67920600 0 109 chr9 68220600 68295900 0 111 chr9 68297400 68303400 0 167 chr9 68304600 68306400 0 167 chr9 68308200 68311500 0 167 chr9 68312700 68313600 0 167 chr9 68316000 68318100 0 135 chr9 68319600 68329800 0 148 chr9 68331900 68332800 0.1852 90 chr9 68365200 68365500 0.1476 85 chr9 68368200 68368500 0.2135 96 chr9 68384700 68386200 0.1759 121 chr9 68388000 68388600 0.2173 91 chr9 68394600 68394900 0.3525 90 chr9 68409300 68409600 0.2088 80 chr9 68412000 68412300 0.2 104 chr9 69416400 69418200 0 81 chr9 69437400 69439200 0 86 chr9 69477600 69481200 0 80 chr9 69506400 69510300 0 90 chr9 69763200 69763800 0.2008 51 chr9 69838800 69839400 0.1036 76 chr9 70038000 70038900 0.2992 6102 chr9 70199400 70199700 0.3212 61 chr9 70200900 70201800 0.0423 61 chr9 70203300 70203900 0.0423 61 chr9 70432500 70433400 0 77 chr9 70701900 70737600 0 45 chr9 74258100 74259900 0.1414 52 chr9 74426400 74426700 0.2906 49 chr9 74427900 74428800 0.0495 66 chr9 75204300 75204600 0.2401 41 chr9 76063500 76063800 0.0105 51 chr9 76175100 76175400 0.1739 450 chr9 76672200 76673700 0.1018 79 chr9 76674900 76675800 0.1509 73 chr9 76791300 76791600 0.1685 62 chr9 78789300 78789600 0.4954 15 chr9 79098000 79098300 0.026 59 chr9 79181400 79181700 0.235 54 chr9 79497900 79498500 0.1218 69 chr9 80251200 80251800 0.2519 80 chr9 80611800 80612100 0.2727 75 chr9 80742900 80744100 0.0062 81 chr9 81709500 81711900 0.0104 86 chr9 81918600 81948900 0 63 chr9 82753500 82754100 0.2635 61 chr9 82755600 82755900 0.2635 61 chr9 82771200 82771500 0.2724 76 chr9 83049900 83055300 0.0011 110 chr9 83223600 83223900 0.2837 46 chr9 83226000 83226900 0.2252 82 chr9 83821200 83822100 0 63 chr9 83826300 83826600 0.0171 78 chr9 83843100 83843400 0.1933 44 chr9 84167400 84167700 0.4367 73 chr9 85074600 85074900 0.1191 49 chr9 85165200 85165800 0.0118 68 chr9 85195800 85196100 0.1604 52 chr9 85780200 85780500 0.1632 39 chr9 85811400 85812300 0.0136 123 chr9 85828500 85829100 0.2727 57 chr9 86107500 86109300 0 64 chr9 86159400 86160300 0.1369 76 chr9 86607600 86609400 0.1385 64 chr9 87912900 87915300 0 75 chr9 87917400 87919800 0 78 chr9 87926700 87929700 0.0005 74 chr9 87933000 87933600 0.0145 49 chr9 87939900 87941400 0.0126 53 chr9 88112700 88113000 0.3361 25 chr9 88119300 88119900 0.0275 65 chr9 88123200 88124400 0.0506 72 chr9 88125600 88126200 0.0506 72 chr9 88133100 88134300 0.0295 79 chr9 88137600 88137900 0.2262 62 chr9 88140000 88140600 0.0015 41 chr9 88244100 88245900 0.007 83 chr9 88625700 88626900 0.0029 83 chr9 89161800 89163300 0.242 81 chr9 90150300 90155400 0 143 chr9 91226700 91228800 0.0841 97 chr9 91797000 91798200 0.0269 63 chr9 92216400 92217000 0.1995 72 chr9 92218200 92218800 0.2264 84 chr9 92226900 92227200 0.0599 107 chr9 92579100 92579400 0.111 70 chr9 93335700 93336300 0.0203 68 chr9 93515400 93516000 0.0359 77 chr9 93740700 93741000 0.3126 39 chr9 94089300 94090800 0.0413 93 chr9 94092300 94092600 0.2456 99 chr9 94113600 94119300 0 124 chr9 94307700 94308000 0.0608 72 chr9 94313100 94313400 0.2024 18 chr9 94314900 94319400 0 74 chr9 94321500 94321800 0.2931 66 chr9 94328700 94329300 0.0812 66 chr9 94331100 94331700 0.058 62 chr9 94332900 94335000 0.0558 68 chr9 94338000 94338600 0.1576 58 chr9 94340400 94341000 0.0367 73 chr9 94342800 94343100 0.0367 73 chr9 94348500 94349400 0 77 chr9 94350600 94351500 0 77 chr9 94352700 94353600 0.1842 66 chr9 94362900 94365600 0.0255 63 chr9 94376700 94377000 0.1794 60 chr9 94380300 94381200 0.1808 61 chr9 94393200 94394700 0.0363 71 chr9 94398600 94398900 0.2349 51 chr9 94412700 94413000 0.3526 53 chr9 94437000 94437900 0.1684 64 chr9 94530600 94530900 0.1437 26 chr9 95503800 95504100 0.3832 71 chr9 95697900 95703300 0 84 chr9 96706800 96707700 0.1754 59 chr9 96904200 96904500 0.1786 60 chr9 96908700 96909000 0.0017 81 chr9 96914700 96915000 0.341 50 chr9 96916800 96917400 0.0835 61 chr9 96919200 96919500 0.038 43 chr9 96922800 96924600 0.0806 74 chr9 96928500 96928800 0.0124 70 chr9 96939000 96940200 0 84 chr9 96941700 96942600 0.031 67 chr9 96947400 96948300 0.0511 72 chr9 96950100 96951000 0.1184 72 chr9 96975300 96975600 0.1974 86 chr9 96989100 96989400 0.1243 54 chr9 96993300 96995100 0.0963 75 chr9 97007400 97007700 0.2146 71 chr9 97022700 97024500 0.0999 68 chr9 97195500 97196700 0.0326 71 chr9 97197900 97199100 0.05 64 chr9 97209300 97209600 0.3866 82 chr9 97582500 97584000 0.2024 87 chr9 98214300 98214600 0.1431 54 chr9 98681100 98681400 0.136 33 chr9 99499800 99502800 0.0681 96 chr9 99504000 99504600 0.0409 60 chr9 99853500 99855000 0 75 chr9 100528500 100528800 0.195 83 chr9 100692300 100693800 0.0216 84 chr9 100695600 100696500 0.2947 58 chr9 100983300 100986900 0 82 chr9 101102400 101107800 0 77 chr9 101681700 101682300 0 20 chr9 102091800 102092100 0.2789 96 chr9 102149100 102149400 0.169 78 chr9 102219600 102219900 0.3626 63 chr9 102221700 102222000 0.4506 60 chr9 102363900 102364200 0.0169 25 chr9 102792600 102793800 0.2045 77 chr9 103239600 103239900 0.3592 75 chr9 103739700 103740000 0.2758 73 chr9 103947600 103947900 0.2739 39 chr9 105576600 105577500 0.0583 83 chr9 105580500 105581100 0.0276 77 chr9 105631800 105632100 0.1683 90 chr9 105762300 105762600 0.2572 87 chr9 105779100 105779400 0.1524 67 chr9 105781500 105781800 0.1524 67 chr9 106184400 106185000 0.0838 56 chr9 106212600 106212900 0.0295 61 chr9 107027400 107028000 0.0259 94 chr9 107256000 107258400 0 74 chr9 107271300 107273100 0.0033 64 chr9 107775300 107778300 0 49 chr9 108504000 108505200 0.2168 90 chr9 108594600 108595200 0.3048 83 chr9 110412900 110413200 0.334 84 chr9 110417400 110423100 0 73 chr9 110791200 110797200 0 88 chr9 111318600 111319500 0.2362 59 chr9 111640200 111642600 0.0573 77 chr9 111669600 111669900 0.0867 21 chr9 112513500 112515900 0.0049 60 chr9 112798200 112804200 0 90 chr9 113060400 113061300 0.0033 109 chr9 113063700 113088000 0 259 chr9 113089200 113089500 0 259 chr9 113105400 113111400 0 80 chr9 113112900 113119200 0 83 chr9 113439000 113443200 0.0019 77 chr9 114322800 114323100 0.1977 69 chr9 114326700 114327600 0.1214 66 chr9 114329700 114330000 0.1838 57 chr9 114333900 114334200 0.2484 81 chr9 115527600 115528200 0.1395 68 chr9 115769400 115769700 0.0378 92 chr9 115919400 115919700 0.1001 78 chr9 117066900 117070500 0.0075 81 chr9 119133900 119134200 0.102 72 chr9 119171400 119172000 0.0206 69 chr9 119621700 119626200 0.0007 81 chr9 120056100 120061200 0 113 chr9 120495000 120496500 0.0254 109 chr9 121417200 121417500 0.3337 70 chr9 121429200 121429500 0.2981 97 chr9 121971300 121971600 0.115 42 chr9 122569800 122570100 0.337 93 chr9 122627100 122627700 0.1288 70 chr9 122867100 122868000 0.2346 51 chr9 123404700 123405900 0.0201 58 chr9 123905400 123908700 0.0344 76 chr9 123976500 123978900 0 64 chr9 123991200 123993600 0 84 chr9 125328300 125328600 0.2278 47 chr9 125623200 125625000 0.029 85 chr9 125778900 125779200 0.0787 72 chr9 126013500 126014100 0.2442 75 chr9 126484500 126485400 0 45 chr9 128138700 128139000 0.4487 79 chr9 128795400 128795700 0.478 99 chr9 130277700 130278000 0.2813 117 chr9 130777500 130778100 0.3938 66 chr9 131356800 131357400 0.0678 77 chr9 132526800 132529200 0 65 chr9 133062300 133062600 0.2877 66 chr9 133069200 133070400 0.1435 75 chr9 133082700 133083600 0 75 chr9 133084800 133086300 0 75 chr9 133185300 133185600 0.1544 30 chr9 133313400 133314000 0.2099 92 chr9 133514100 133514400 0.0255 26 chr9 133564200 133564500 0.4995 63 chr9 133668900 133669200 0.4431 18 chr9 133827300 133827900 0.2235 32 chr9 134012100 134014500 0 197 chr9 134114700 134118900 0 69 chr9 134466600 134466900 0.4041 25 chr9 134475900 134476200 0.3245 116 chr9 134481000 134481300 0.4184 59 chr9 134586900 134588100 0.1683 78 chr9 134866200 134867100 0.1875 71 chr9 135528000 135528300 0.3769 64 chr9 135981600 135982200 0.3109 49 chr9 136101600 136101900 0.3093 67 chr9 136355100 136355400 0.0271 25 chr9 136580400 136581000 0.0357 19 chr9 136696800 136697100 0.4528 11 chr9 136802700 136803300 0.1716 100 chr9 137288400 137289000 0.2844 51 chr9 137322900 137323200 0.1391 57 chr9 137328600 137329200 0.3897 97 chr9 137341800 137342100 0.4446 36 chr9 137394300 137394600 0.4836 33 chr9 137565600 137568300 0.042 64 chr9 137693700 137694000 0.3613 24 chr9 137715900 137716500 0.1242 259 chr9 137818800 137819400 0.015 63 chr9 137845200 137846400 0 244 chr9 137885400 137886000 0.2862 66 chr9 137887500 137887800 0.1619 53 chr9 137976900 137977200 0.4754 59 chr9 138018000 138019500 0 54 chr9 138163200 138163500 0.1011 64 chr9 138184200 138186300 0.0033 73 chr9 138191100 138196800 0 37 chr9 138205200 138206100 0.0011 93 chr9 138209400 138209700 0.2554 66 chr9 138213300 138213900 0.1116 75 chr9 138216000 138216600 0.1116 75 chr9 138219900 138334500 0 252 chrX 10200 12300 0 46 chrX 16800 19500 0 30 chrX 21000 24600 0 33 chrX 94800 95100 0 34 chrX 96300 97800 0 34 chrX 99600 100200 0 34 chrX 222600 225600 0 42 chrX 226800 227400 0.1611 30 chrX 229500 230100 0.0351 26 chrX 231600 232500 0.3214 46 chrX 234300 234600 0.1256 43 chrX 236100 236700 0.091 42 chrX 244200 245400 0.1967 62 chrX 246900 247200 0.1335 59 chrX 249900 250800 0.0036 46 chrX 268200 274800 0.1001 513 chrX 280500 280800 0.4785 24 chrX 297900 298500 0.1506 100 chrX 315900 316200 0.2671 129 chrX 321600 322500 0.0965 33 chrX 342300 342900 0.4381 62 chrX 407400 408300 0.3387 55 chrX 432600 432900 0.4625 144 chrX 512400 516000 0.0585 106 chrX 527400 528600 0.0145 109 chrX 598500 598800 0.4125 15 chrX 647400 648000 0.0118 37 chrX 724800 725400 0.3145 207 chrX 825300 825600 0.4511 41 chrX 839400 840600 0.0734 58 chrX 918600 918900 0.4865 51 chrX 1049700 1050000 0.3474 94 chrX 1127400 1128900 0.2277 111 chrX 1143300 1143900 0.3474 65 chrX 1146300 1146900 0.3375 103 chrX 1174200 1174800 0.1663 70 chrX 1264200 1264500 0.0556 74 chrX 1296600 1298700 0.1405 94 chrX 1368900 1376100 0 57 chrX 1409700 1410300 0 25 chrX 1453800 1454100 0.4585 34 chrX 1489800 1490100 0.3792 27 chrX 1641000 1641300 0.3159 13 chrX 1697100 1697400 0.0735 57 chrX 1698600 1698900 0.0735 57 chrX 1705800 1706100 0.2726 60 chrX 1763700 1764900 0.2162 28 chrX 1855800 1856100 0.1546 58 chrX 1887900 1888200 0.1661 60 chrX 1947600 1949400 0 39 chrX 2133000 2134800 0 33 chrX 2227800 2228400 0.2219 28 chrX 2277300 2277600 0.293 17 chrX 2362800 2363100 0.3709 59 chrX 2382600 2382900 0.4872 271 chrX 2773500 2773800 0.2276 37 chrX 2845200 2845500 0.0508 19 chrX 3524400 3525000 0.3362 216 chrX 3641700 3642000 0.1933 34 chrX 3824100 3824700 0.0158 20 chrX 3830700 3837900 0 25 chrX 3839100 3842400 0 34 chrX 3843600 3866700 0 40 chrX 3867900 3880800 0 40 chrX 3882000 3937500 0 40 chrX 3967500 3968400 0 66 chrX 4267200 4267500 0.1625 26 chrX 4681800 4682100 0.3092 13 chrX 4986600 4986900 0.325 22 chrX 5107800 5109000 0.0046 53 chrX 5481300 5486400 0.0255 49 chrX 5652300 5652600 0.0411 15 chrX 5669700 5670000 0.2126 11 chrX 5764800 5765400 0.1374 53 chrX 5816100 5817000 0.0103 67 chrX 6480600 6481200 0.3235 46 chrX 6529200 6529800 0.1405 36 chrX 6532800 6534300 0.1014 43 chrX 6584100 6588900 0 62 chrX 6934500 6938400 0.007 64 chrX 7589100 7590300 0.0365 118 chrX 7608000 7608300 0.135 52 chrX 7844100 7844400 0.4499 26 chrX 7848600 7849200 0.1013 39 chrX 8169300 8170800 0.0883 55 chrX 8465700 8467200 0.1441 41 chrX 9052800 9053100 0.2161 26 chrX 9054600 9054900 0.1274 30 chrX 9406800 9407100 0.4951 29 chrX 10250100 10250400 0.1978 49 chrX 10880100 10880400 0.0595 14 chrX 10967400 10967700 0.2436 39 chrX 11000700 11001600 0.0923 57 chrX 11078400 11078700 0.3202 19 chrX 11219100 11220000 0.08 69 chrX 11518800 11519100 0.3545 33 chrX 11674800 11675100 0.3935 27 chrX 11707500 11713200 0 99 chrX 11935200 11941200 0 84 chrX 12560700 12561000 0.1427 35 chrX 12621900 12623400 0.002 15 chrX 12857400 12857700 0.2644 45 chrX 12928200 12928500 0.1754 62 chrX 13612200 13612500 0.1553 40 chrX 13881600 13883400 0 21 chrX 14085300 14085900 0.1188 44 chrX 14104500 14107800 0.1727 56 chrX 15030300 15030900 0.2747 66 chrX 15647700 15648000 0.0421 37 chrX 15703800 15704400 0.0702 30 chrX 16231200 16231500 0.2652 46 chrX 16234500 16234800 0.0383 42 chrX 16323600 16324200 0.0116 42 chrX 16337700 16338000 0.2195 56 chrX 16362300 16362600 0.2103 28 chrX 16377600 16378200 0 29 chrX 16409700 16410000 0 25 chrX 16499400 16499700 0.1937 66 chrX 16501800 16503300 0.1259 37 chrX 17055000 17055600 0.0905 57 chrX 17096400 17096700 0.3088 31 chrX 17184300 17184600 0.2167 50 chrX 17231400 17232000 0.2736 68 chrX 17319300 17320200 0.0023 48 chrX 17342700 17346300 0.0969 74 chrX 17737200 17737500 0.0802 169 chrX 18106800 18107100 0.3195 57 chrX 18109800 18110700 0.0239 87 chrX 19144500 19148700 0 84 chrX 19452000 19452300 0.4813 16 chrX 19780200 19780500 0.301 35 chrX 19941900 19944900 0 72 chrX 20335500 20337000 0.0322 60 chrX 20416500 20416800 0.1372 49 chrX 20704500 20704800 0.2546 50 chrX 20724300 20724600 0.1181 46 chrX 22658700 22659000 0.2413 67 chrX 23238900 23244300 0 73 chrX 23887200 23887500 0.3274 66 chrX 23973000 23974500 0 36 chrX 24043500 24043800 0.1102 41 chrX 24053100 24053400 0.1093 42 chrX 24134400 24135900 0 37 chrX 24274500 24274800 0.4326 19 chrX 24312900 24313200 0.3478 29 chrX 24336900 24337200 0.3642 41 chrX 24708300 24710100 0.0224 96 chrX 25824300 25824600 0.0766 11 chrX 25929900 25930200 0.2294 14 chrX 26163000 26163300 0.4393 38 chrX 26196300 26196600 0.286 36 chrX 26313900 26320200 0 104 chrX 27109800 27110400 0.0159 60 chrX 27226500 27227100 0.1976 56 chrX 27927600 27928200 0.0764 50 chrX 28095300 28095600 0.2468 34 chrX 28206900 28207200 0.0012 77 chrX 28209000 28212600 0.0012 77 chrX 28230000 28230300 0.0338 96 chrX 28950000 28950600 0.1399 52 chrX 29332200 29334600 0.0481 128 chrX 29356200 29356500 0.0794 449 chrX 29582400 29583600 0.004 61 chrX 29916000 29916300 0.3013 65 chrX 29984700 29985000 0.2868 60 chrX 30018900 30019200 0.0269 24 chrX 30324000 30324300 0.4356 48 chrX 30545400 30545700 0.3506 38 chrX 30603300 30603900 0.2009 63 chrX 30770700 30771600 0.2449 52 chrX 31184400 31184700 0.269 33 chrX 31190400 31190700 0.4196 37 chrX 31512300 31513200 0.2293 49 chrX 31530900 31535700 0 64 chrX 31798200 31798500 0.1544 109 chrX 31897500 31897800 0.0938 54 chrX 32244300 32246700 0.1308 60 chrX 33190500 33190800 0.0069 20 chrX 34248600 34251900 0.0073 53 chrX 34416000 34416300 0.0839 47 chrX 34819500 34820700 0.2006 47 chrX 35222100 35222700 0.2254 57 chrX 35315100 35317200 0.0184 61 chrX 35939400 35940000 0.2007 45 chrX 36174600 36174900 0.1989 51 chrX 36465300 36465600 0.0193 70 chrX 36466800 36470400 0.0193 70 chrX 36986700 36988800 0.0352 36 chrX 36998100 36999300 0.0142 33 chrX 37085100 37099200 0 42 chrX 37554600 37555800 0.0144 40 chrX 37570200 37570500 0.0062 36 chrX 40110600 40110900 0.182 127 chrX 41427600 41427900 0.0585 49 chrX 41613300 41613600 0.1955 58 chrX 42202800 42204900 0.0239 78 chrX 42426000 42426300 0.1128 61 chrX 42473400 42474900 0.125 52 chrX 42564600 42564900 0.367 50 chrX 42888900 42890400 0.0129 89 chrX 42891600 42894300 0 65 chrX 43304700 43311600 0 294 chrX 43574700 43575000 0.2384 46 chrX 43588500 43589100 0.0779 30 chrX 43671000 43671900 0.0757 61 chrX 43989300 43990200 0 36 chrX 43992900 43993500 0.0072 42 chrX 44282400 44282700 0.1779 78 chrX 44441100 44441400 0 15 chrX 44443800 44445000 0.0165 21 chrX 45039600 45042000 0.0774 94 chrX 45108600 45108900 0.2553 52 chrX 45589800 45590100 0.0756 31 chrX 45687900 45688800 0 36 chrX 45691500 45692400 0 36 chrX 46509600 46509900 0.2775 47 chrX 46656900 46659900 0.1145 66 chrX 47036700 47037000 0.0988 69 chrX 47148600 47148900 0.3262 13 chrX 47327100 47327700 0.1316 22 chrX 47510100 47512200 0.1013 37 chrX 47669400 47669700 0.1814 60 chrX 47784000 47784900 0 80 chrX 47786400 47787300 0 80 chrX 47790600 47791800 0.0087 73 chrX 47903400 47904000 0.1325 75 chrX 47906100 47907300 0.2386 31 chrX 48004500 48012000 0 42 chrX 48015000 48015600 0.0331 38 chrX 48018000 48020100 0 33 chrX 48091800 48092400 0 35 chrX 48095100 48096000 0 31 chrX 48127200 48135900 0 40 chrX 48137400 48138000 0 40 chrX 48140700 48141000 0.1644 36 chrX 48142200 48142500 0.1644 36 chrX 48173100 48173400 0.2391 52 chrX 48232500 48233400 0.0795 55 chrX 48259800 48260100 0.1437 29 chrX 48308400 48308700 0.1829 27 chrX 48339000 48339300 0.3102 18 chrX 48367500 48368400 0 42 chrX 48369600 48396300 0 42 chrX 48399300 48427800 0 43 chrX 49317900 49320600 0 101 chrX 49321800 49331700 0 150 chrX 49333500 49345500 0 150 chrX 49346700 49348500 0 150 chrX 49528500 49589700 0 165 chrX 49591800 49603500 0 138 chrX 49966800 49968900 0 83 chrX 50019600 50025600 0 91 chrX 50057400 50057700 0.0714 61 chrX 50060400 50065800 0 80 chrX 50296200 50296800 0.1 40 chrX 50739600 50740200 0.0623 33 chrX 50990700 50991900 0 29 chrX 51033000 51033300 0.0463 33 chrX 51079800 51081000 0 39 chrX 51111300 51112800 0.1212 79 chrX 51115200 51117300 0.0116 63 chrX 51246900 51248100 0.3004 47 chrX 51260400 51260700 0.2384 53 chrX 51265800 51267000 0.0795 68 chrX 51280500 51280800 0.2413 54 chrX 51429600 51429900 0.0113 37 chrX 51618000 51618600 0.0424 25 chrX 51648600 51648900 0.1979 69 chrX 51668400 51692400 0 48 chrX 51700500 51725100 0 46 chrX 52041300 52077000 0 44 chrX 52177200 52212600 0 45 chrX 52223700 52224600 0.0928 66 chrX 52267200 52268100 0.0114 19 chrX 52384500 52384800 0.2089 58 chrX 52445100 52445700 0.0663 29 chrX 52456500 52456800 0 45 chrX 52458600 52461300 0 45 chrX 52473600 52502100 0 71 chrX 52510800 52539000 0 65 chrX 52644000 52644600 0 28 chrX 52670400 52788000 0 49 chrX 52789800 52791300 0.0047 37 chrX 52799700 52801800 0.005 40 chrX 52803600 52804200 0.005 40 chrX 52826100 52826700 0.2131 38 chrX 52882800 52920000 0 45 chrX 52935900 52973400 0 46 chrX 53338200 53339400 0 21 chrX 53504700 53505000 0.4589 58 chrX 53524500 53524800 0.4314 27 chrX 53578800 53580000 0.1103 77 chrX 53597400 53597700 0.1834 21 chrX 53769300 53769600 0.2188 30 chrX 53772000 53772600 0.0088 29 chrX 54078000 54078300 0.3908 34 chrX 54102300 54102600 0.055 29 chrX 54108900 54109500 0.0327 35 chrX 54118800 54124500 0 72 chrX 54764400 54766800 0.0428 52 chrX 54768000 54770100 0.0428 52 chrX 54823200 54823500 0.0576 28 chrX 54828000 54829200 0.1133 48 chrX 54967500 54968400 0 45 chrX 54970500 54971400 0 37 chrX 55077900 55079700 0 42 chrX 55092000 55093500 0 35 chrX 55453800 55479900 0 49 chrX 55493100 55519500 0 44 chrX 55806900 55807200 0.1024 67 chrX 56056500 56056800 0.3839 25 chrX 56164200 56164500 0.14 32 chrX 56432400 56441100 0 41 chrX 56696100 56701500 0 89 chrX 56767800 56780700 0 63 chrX 56915100 56915400 0.307 32 chrX 57120300 57120900 0.1136 31 chrX 57136200 57136800 0.1188 32 chrX 57297600 57298800 0 37 chrX 57325800 57327000 0.0059 33 chrX 57800100 57800700 0.2019 55 chrX 58133400 58135500 0 46 chrX 58468200 58469100 0.0173 54 chrX 58480500 58485300 0 49 chrX 58486500 58487700 0 42 chrX 58493700 58494600 0 37 chrX 58499100 58505700 0 44 chrX 58539900 58555500 0 115 chrX 58606200 58874700 0 196 chrX 58875900 58935000 0 267 chrX 58936200 58988700 0 267 chrX 58989900 59114700 0 179 chrX 59115900 59144700 0 179 chrX 59145900 59185800 0 107 chrX 59187600 59189700 0 43 chrX 59190900 59316600 0 205 chrX 59317800 59327100 0 205 chrX 59329200 59425200 0 229 chrX 59427000 59457300 0 229 chrX 59458500 59594400 0 229 chrX 59598600 59666100 0 200 chrX 59667300 59695500 0 200 chrX 59696700 59735100 0 200 chrX 59736600 59824200 0 200 chrX 59825400 59889600 0 150 chrX 59891100 59921400 0 232 chrX 59922600 59961000 0 232 chrX 59962200 60066600 0 405 chrX 60067800 60153300 0 405 chrX 60154500 60208800 0 114 chrX 60210300 60264900 0 321 chrX 60266400 60405000 0 321 chrX 60406800 60483000 0 321 chrX 60484800 60486600 0 321 chrX 60487800 60774600 0 321 chrX 60776100 60971100 0 321 chrX 60972300 60987900 0 321 chrX 60989100 61022400 0 321 chrX 61024800 61203000 0 361 chrX 61204200 61286100 0 361 chrX 61287300 61368600 0 328 chrX 61369800 61437300 0 328 chrX 61438800 61467300 0 328 chrX 61468500 61511400 0 328 chrX 61513800 61581900 0 328 chrX 61583100 61738500 0 328 chrX 61739700 61819800 0 328 chrX 61821300 61862700 0 328 chrX 61863900 61929600 0 328 chrX 61930800 61955700 0 312 chrX 61956900 61997700 0 312 chrX 61998900 62159400 0 312 chrX 62160600 62189100 0 312 chrX 62190300 62247000 0 312 chrX 62248200 62321700 0 222 chrX 62323200 62412600 0 222 chrX 62463300 62466000 0 240 chrX 62467800 62472900 0 117 chrX 62474700 62487300 0 117 chrX 62489400 62495700 0 117 chrX 62497800 62499600 0 44 chrX 62502000 62506200 0 37 chrX 62511300 62511600 0.4953 74 chrX 62603100 62603400 0.2658 22 chrX 62646900 62647200 0.433 168 chrX 63129600 63185400 0 47 chrX 63188700 63190500 0.0148 67 chrX 63193500 63249300 0 47 chrX 63319500 63319800 0.2815 55 chrX 63597900 63598200 0.338 40 chrX 64013400 64018500 0.0418 60 chrX 64110900 64112400 0.0047 34 chrX 64114200 64115100 0.0033 49 chrX 64134300 64134900 0.0029 44 chrX 64254300 64258200 0 91 chrX 64296900 64300800 0.1922 54 chrX 64516800 64517100 0.0195 58 chrX 64518900 64519200 0.0195 58 chrX 65190900 65191500 0.1918 52 chrX 65207700 65211000 0 83 chrX 65383800 65384100 0.2453 55 chrX 65457600 65458200 0.1056 66 chrX 65616300 65616600 0.0603 65 chrX 65619000 65619300 0.379 37 chrX 65824800 65825100 0.3658 47 chrX 65834400 65834700 0.1593 43 chrX 66066900 66067500 0.016 70 chrX 66080100 66080700 0.0984 45 chrX 66137100 66137700 0.0109 75 chrX 66180900 66186300 0 87 chrX 66560400 66560700 0.1511 32 chrX 66646500 66646800 0.1682 54 chrX 66747300 66747600 0.1565 37 chrX 66953400 66954000 0.0846 75 chrX 67060200 67060500 0.068 66 chrX 67169100 67170000 0 55 chrX 67415400 67415700 0.3213 430 chrX 68042700 68043300 0.0332 54 chrX 68217900 68221500 0.0222 55 chrX 68325900 68327700 0.0088 37 chrX 68652900 68653500 0.3235 79 chrX 69680400 69680700 0.1952 23 chrX 69749100 69749400 0.0367 50 chrX 69785100 69785400 0.1427 44 chrX 69822900 69825300 0.0339 50 chrX 69949800 69951000 0.09 47 chrX 69982800 69987000 0 85 chrX 70100400 70104000 0.0117 74 chrX 70600500 70601400 0.0031 63 chrX 70602900 70603500 0.0031 63 chrX 70631700 70632000 0.0429 31 chrX 70642500 70644600 0.011 67 chrX 70680000 70680600 0.2979 61 chrX 70716000 70716300 0.4278 38 chrX 70728900 70729200 0.2831 24 chrX 70748700 70749000 0.2471 42 chrX 70939500 70939800 0.2148 63 chrX 71340600 71340900 0.252 53 chrX 71350200 71352300 0 33 chrX 71414100 71416200 0 41 chrX 71520600 71522700 0 17 chrX 71591400 71591700 0.2089 39 chrX 71683500 71797800 0 47 chrX 71903400 71903700 0.0306 27 chrX 72178200 72180000 0.0361 88 chrX 72444600 72444900 0.3171 49 chrX 72680700 72682800 0.0672 70 chrX 72743400 72757200 0 44 chrX 72758700 72962400 0 47 chrX 72963600 72979200 0 47 chrX 72996300 73005000 0 39 chrX 73009500 73011900 0 64 chrX 73033200 73033800 0.1668 40 chrX 73078500 73086900 0 44 chrX 73106100 73112700 0 94 chrX 73291200 73291800 0.0093 65 chrX 73381200 73386900 0 78 chrX 73600200 73600500 0.2428 50 chrX 73887600 73887900 0.0605 60 chrX 73889100 73890600 0.0605 60 chrX 74792400 74793900 0.1932 60 chrX 74874600 74874900 0.2478 45 chrX 74991300 74992200 0.0584 87 chrX 75218400 75218700 0.1423 58 chrX 75437400 75437700 0.2466 39 chrX 75510600 75513000 0 53 chrX 75537900 75538200 0.2908 57 chrX 75590100 75590400 0.3679 45 chrX 76003200 76003500 0.0014 51 chrX 76004700 76005000 0.0014 51 chrX 76006500 76007400 0.0014 51 chrX 76034100 76034400 0.141 27 chrX 76074000 76074300 0.2244 45 chrX 76092900 76093200 0.2199 36 chrX 76142100 76146000 0 42 chrX 76149300 76153200 0 42 chrX 76217400 76218300 0.2403 31 chrX 76272000 76272300 0.1092 57 chrX 76277700 76278000 0.144 44 chrX 76293000 76293300 0.1588 54 chrX 76323000 76326900 0.0104 84 chrX 76375800 76376100 0.1709 45 chrX 76481400 76481700 0.3452 57 chrX 76581900 76582200 0.1434 24 chrX 77145600 77145900 0.2279 31 chrX 77205000 77208600 0 58 chrX 77246100 77246700 0.2049 56 chrX 77247900 77248200 0.2988 43 chrX 78058500 78058800 0.2017 48 chrX 78172500 78173100 0.005 35 chrX 78184200 78184500 0.4465 61 chrX 78196800 78197400 0 26 chrX 78229800 78230400 0.0694 59 chrX 78269100 78269400 0.005 14 chrX 78403500 78404100 0.2157 30 chrX 78441300 78441900 0 52 chrX 78853800 78854100 0.19 62 chrX 79086600 79086900 0.0477 50 chrX 79200300 79200600 0.2972 50 chrX 79224300 79224600 0.1521 43 chrX 79743300 79743900 0.2971 77 chrX 79765800 79767900 0.0311 63 chrX 79769100 79770900 0.0311 63 chrX 79927800 79928100 0.1661 44 chrX 79930200 79931700 0.067 68 chrX 80187900 80188200 0.1358 33 chrX 80392500 80392800 0.3771 28 chrX 80406600 80406900 0.0749 68 chrX 80410200 80410500 0.1028 59 chrX 80534400 80536500 0.0575 57 chrX 81066900 81067500 0.2296 62 chrX 81832800 81833100 0.0762 41 chrX 81841200 81847200 0 71 chrX 81972900 81973200 0.1751 61 chrX 81976500 81976800 0.1955 54 chrX 82013100 82013400 0.196 65 chrX 82119900 82120200 0.3519 39 chrX 82491300 82492200 0.1387 87 chrX 82713300 82713600 0.4392 28 chrX 82857000 82858800 0.0035 55 chrX 82903500 82903800 0.224 46 chrX 83059800 83065200 0 70 chrX 83316000 83316300 0.2889 66 chrX 83543100 83549100 0 61 chrX 83568300 83568900 0.2952 42 chrX 83731500 83731800 0.2173 41 chrX 83838000 83838600 0.2106 63 chrX 83840100 83842800 0.1262 71 chrX 84435900 84436200 0.2376 95 chrX 84604500 84605100 0.0495 94 chrX 84858300 84858600 0.2536 25 chrX 84871800 84872100 0.3733 28 chrX 85254300 85254600 0.0712 25 chrX 85425300 85425600 0.1569 53 chrX 86074800 86075100 0.3538 36 chrX 86114100 86114700 0.0396 43 chrX 86117100 86117400 0.2755 27 chrX 86294700 86295000 0.4156 52 chrX 86350200 86354700 0 73 chrX 86396400 86396700 0.3004 46 chrX 86446500 86449500 0 87 chrX 86557500 86562000 0 74 chrX 86871300 86871900 0.3014 31 chrX 86970600 86972100 0.0983 62 chrX 87117300 87118800 0.0321 45 chrX 87121500 87121800 0.1897 30 chrX 87499800 87500100 0.1061 33 chrX 87821400 87827100 0 88 chrX 87828900 87829200 0.3472 36 chrX 88033500 88036500 0.006 73 chrX 88213500 88213800 0.2124 69 chrX 89285100 89285400 0.2304 21 chrX 89294700 89295000 0.2741 40 chrX 89306100 89306700 0.1978 28 chrX 89323200 89323800 0.0229 25 chrX 89329800 89330100 0.413 23 chrX 89357400 89358000 0.1686 34 chrX 89390700 89391000 0.1996 26 chrX 89396400 89396700 0.3963 22 chrX 89400900 89401200 0.0572 26 chrX 89408400 89408700 0.0466 22 chrX 89415900 89416500 0.0365 32 chrX 89423700 89424000 0.2199 38 chrX 89428200 89428500 0.4348 17 chrX 89447100 89448300 0.1191 28 chrX 89458200 89458500 0.212 24 chrX 89459700 89460000 0.2318 25 chrX 89477400 89477700 0.115 39 chrX 89479200 89479500 0.1996 14 chrX 89505300 89505600 0.1145 44 chrX 89535300 89535900 0.2952 29 chrX 89538300 89538600 0.4538 17 chrX 89542800 89543100 0.1479 25 chrX 89546100 89546400 0.1784 25 chrX 89549400 89549700 0.4973 39 chrX 89559000 89559300 0.1295 33 chrX 89572500 89573100 0.1899 30 chrX 89582100 89582400 0.1837 30 chrX 89619300 89619600 0.0325 33 chrX 89630400 89630700 0.175 22 chrX 89655900 89656200 0.1173 36 chrX 89685000 89685600 0.0164 25 chrX 89707200 89708700 0.0181 31 chrX 89710800 89711100 0.0872 32 chrX 89722800 89723100 0.3635 27 chrX 89726100 89726400 0.3831 22 chrX 89729700 89730000 0.1111 19 chrX 89774400 89774700 0.1285 27 chrX 89778000 89778300 0.3227 29 chrX 89782500 89782800 0.2818 28 chrX 89802000 89802300 0.1118 31 chrX 89828700 89829000 0.0897 22 chrX 89849400 89850600 0 30 chrX 89856300 89856600 0.0712 31 chrX 89859600 89859900 0.4273 26 chrX 89872200 89872500 0.2514 31 chrX 89881200 89881500 0.1886 33 chrX 89910300 89910600 0.3649 27 chrX 89916300 89916600 0.0907 23 chrX 89928600 89928900 0.3103 15 chrX 89936700 89937000 0.3884 30 chrX 89976000 89976300 0.2273 31 chrX 89987700 89988000 0.3175 33 chrX 89991300 89991600 0.0923 40 chrX 89994000 89995500 0.1555 32 chrX 90001200 90001500 0.3256 27 chrX 90096600 90096900 0.3415 25 chrX 90123900 90124200 0.223 26 chrX 90128700 90129000 0.1099 16 chrX 90132900 90133200 0.1829 11 chrX 90138000 90138300 0.0841 33 chrX 90144300 90144600 0.15 13 chrX 90145800 90146400 0.0119 38 chrX 90150300 90150600 0.1308 26 chrX 90179400 90179700 0.033 23 chrX 90186600 90186900 0.0853 27 chrX 90218700 90219000 0.1124 24 chrX 90224400 90224700 0.1454 25 chrX 90234900 90235200 0.0208 45 chrX 90238500 90238800 0.3403 25 chrX 90244800 90245100 0.3427 35 chrX 90254700 90255000 0.2697 32 chrX 90272700 90273000 0.0403 26 chrX 90279600 90279900 0.2292 30 chrX 90284400 90284700 0.1282 25 chrX 90307800 90308400 0 29 chrX 90316500 90316800 0.24 25 chrX 90320700 90321000 0.1289 11 chrX 90346800 90347100 0.1524 26 chrX 90390900 90391200 0.288 28 chrX 90397500 90398100 0.0493 29 chrX 90441300 90441600 0.325 22 chrX 90446100 90446400 0.1019 30 chrX 90461100 90461400 0.2694 28 chrX 90528300 90528900 0.1102 21 chrX 90542400 90542700 0.2748 24 chrX 90555300 90555600 0.2726 26 chrX 90575400 90575700 0.0723 33 chrX 90684600 90685200 0.2078 19 chrX 90693600 90693900 0.2903 32 chrX 90700500 90700800 0.4597 21 chrX 90702600 90702900 0.4214 29 chrX 90792300 90792600 0.2022 25 chrX 90810000 90810300 0.0492 31 chrX 90869400 90869700 0.0129 35 chrX 90890700 90891000 0.248 32 chrX 90908400 90908700 0.022 30 chrX 90910500 90910800 0.0433 17 chrX 90921300 90921600 0.2814 29 chrX 90926400 90926700 0.2321 25 chrX 90934800 90935100 0.0245 23 chrX 90961200 90961500 0.132 25 chrX 90963600 90964800 0.0976 25 chrX 90966300 90966900 0 36 chrX 90977700 90978000 0.2173 24 chrX 91160700 91161600 0.1683 28 chrX 91163400 91163700 0.2502 33 chrX 91168500 91168800 0.1135 29 chrX 91215900 91216200 0.1664 35 chrX 91231200 91231500 0.4916 23 chrX 91245900 91246200 0.3107 22 chrX 91360200 91360800 0.0428 53 chrX 91485900 91486200 0.3882 35 chrX 91500000 91500300 0.3669 26 chrX 91507500 91510200 0 33 chrX 91520400 91520700 0.2939 28 chrX 91530000 91530300 0.1548 32 chrX 91557000 91557300 0.4105 25 chrX 91566000 91566600 0.0998 29 chrX 91575300 91575600 0.3347 20 chrX 91580400 91580700 0.2603 33 chrX 91612200 91612500 0.3872 28 chrX 91632600 91632900 0.2109 56 chrX 91641000 91641300 0.3023 28 chrX 91650900 91651200 0.3896 28 chrX 91652400 91652700 0.135 34 chrX 91664700 91665000 0.0474 28 chrX 91667100 91667400 0.0594 28 chrX 91682100 91682700 0.2572 44 chrX 91742700 91743300 0.3412 39 chrX 91746000 91746300 0.0621 34 chrX 91757400 91758000 0.2254 42 chrX 91786500 91786800 0.2864 18 chrX 91789200 91790100 0.2929 36 chrX 91811700 91812000 0.2019 34 chrX 91820100 91820400 0.1294 46 chrX 91826400 91826700 0.1567 33 chrX 91841700 91842000 0.2665 27 chrX 91849800 91850100 0.474 24 chrX 91852800 91853100 0.4334 23 chrX 91856100 91856400 0.2966 30 chrX 91862700 91863000 0.0673 25 chrX 91874700 91875000 0.3863 23 chrX 91877100 91877400 0.2138 34 chrX 91896600 91896900 0.0098 24 chrX 91928400 91928700 0.2324 26 chrX 91972200 91972500 0.283 37 chrX 91979400 91980000 0.0888 30 chrX 91996500 91997100 0.0024 30 chrX 92000700 92001000 0.2996 32 chrX 92026800 92028600 0.2464 30 chrX 92035500 92036100 0.021 33 chrX 92052300 92052900 0.1669 22 chrX 92055000 92055300 0.006 30 chrX 92060100 92060400 0.4175 22 chrX 92066100 92066400 0.2071 22 chrX 92151900 92152200 0.1799 21 chrX 92155200 92155500 0.0429 31 chrX 92161800 92162100 0.0948 28 chrX 92219700 92220300 0.021 26 chrX 92286600 92286900 0.1368 24 chrX 92296800 92297100 0.1761 43 chrX 92349000 92349300 0.1759 16 chrX 92362200 92362800 0.0137 23 chrX 92371200 92371500 0.1899 33 chrX 92379900 92380200 0.3076 24 chrX 92388900 92389200 0.1943 25 chrX 92405100 92405400 0.2628 32 chrX 92413200 92413500 0.0954 21 chrX 92425800 92426100 0.2831 28 chrX 92448300 92448600 0.2404 39 chrX 92455200 92455800 0.066 25 chrX 92459100 92459400 0.0158 29 chrX 92476800 92477100 0.1024 11 chrX 92483400 92483700 0.0776 23 chrX 92488800 92489100 0.0918 27 chrX 92494800 92495100 0.3151 27 chrX 92574000 92574300 0.2292 37 chrX 92583300 92583600 0.2839 29 chrX 92592000 92592300 0.1386 35 chrX 92593800 92594100 0.2184 20 chrX 92595600 92595900 0.0765 26 chrX 92598600 92598900 0.2825 25 chrX 92615700 92616300 0.0229 23 chrX 92622000 92622300 0.2421 25 chrX 92643000 92643600 0.1093 34 chrX 92704800 92705100 0.1313 16 chrX 92738700 92739000 0.3512 22 chrX 92742600 92742900 0.1807 25 chrX 92745000 92746200 0.1466 29 chrX 92748300 92748600 0.2599 32 chrX 92759100 92759400 0.187 27 chrX 92773800 92774100 0.3691 47 chrX 92795700 92796000 0.1888 15 chrX 92805900 92806500 0 33 chrX 92817900 92818200 0.1101 43 chrX 92835600 92835900 0.1758 31 chrX 92854500 92854800 0.1151 30 chrX 92856000 92856300 0.3028 25 chrX 92886600 92888100 0.2867 26 chrX 92954400 92954700 0.0185 30 chrX 92962800 92963100 0.2491 20 chrX 92970300 92970600 0.3203 24 chrX 93037800 93038100 0.2287 19 chrX 93058200 93058800 0.1715 29 chrX 93079800 93081600 0.2436 32 chrX 93310800 93311700 0 65 chrX 93632700 93633000 0.1575 36 chrX 93943500 93943800 0.1857 59 chrX 93945000 93945300 0.2686 43 chrX 94863600 94864800 0.0741 53 chrX 94866000 94866300 0.2263 33 chrX 95140200 95140500 0.0901 16 chrX 95600700 95602200 0.0223 50 chrX 95810400 95812500 0 70 chrX 95852100 95852400 0.2969 38 chrX 96057900 96063600 0 60 chrX 96078600 96078900 0.2811 57 chrX 96523500 96523800 0.3938 23 chrX 96897900 96898200 0.0733 54 chrX 97512600 97514400 0 77 chrX 97578600 97578900 0 59 chrX 97580100 97582500 0 59 chrX 98305500 98305800 0.1132 74 chrX 98424600 98426100 0.053 72 chrX 98427900 98428200 0.1555 52 chrX 98669400 98669700 0.2446 46 chrX 98687700 98692800 0 72 chrX 98831400 98831700 0.1437 12 chrX 99178200 99178500 0.328 28 chrX 99403200 99403500 0.29 54 chrX 99485700 99487200 0.0946 49 chrX 99864300 99864600 0.3408 49 chrX 100139400 100140000 0.1989 53 chrX 100166100 100166400 0.0949 58 chrX 100167900 100169100 0.0592 47 chrX 100257300 100260000 0.0188 59 chrX 100501200 100502100 0 50 chrX 100550700 100551600 0.0745 73 chrX 100554900 100557000 0.0745 73 chrX 100869600 100870200 0.1476 75 chrX 100971600 100973400 0.0231 57 chrX 101472000 101474400 0.0199 74 chrX 101597700 101601900 0 41 chrX 101611800 101616000 0 42 chrX 101712000 101712300 0.3733 26 chrX 101995800 101997000 0.1886 48 chrX 102048600 102049200 0.0752 44 chrX 102050400 102051000 0.0847 48 chrX 102189000 102189300 0.4287 33 chrX 102198000 102281400 0 46 chrX 102282600 102338100 0 46 chrX 102349200 102489300 0 47 chrX 102617100 102617400 0.2049 61 chrX 102671100 102671700 0.2704 66 chrX 102777600 102777900 0.3408 49 chrX 102780900 102781200 0.4548 30 chrX 102811200 102812100 0 55 chrX 103235400 103235700 0.3269 39 chrX 103287000 103287300 0.3229 51 chrX 103891800 103897200 0.0581 55 chrX 103911600 103911900 0.1432 24 chrX 103956000 103987200 0 40 chrX 104027400 104030700 0.0013 68 chrX 104031900 104032500 0.0013 68 chrX 104051100 104082600 0 46 chrX 104417100 104417400 0.1414 52 chrX 104531100 104531700 0.1423 35 chrX 104549700 104550000 0.0567 37 chrX 104914500 104914800 0.4301 60 chrX 104946600 104946900 0.2168 56 chrX 105040800 105041100 0.129 59 chrX 105391500 105392100 0.2782 37 chrX 105799200 105799500 0.0715 51 chrX 105800700 105801000 0.1681 42 chrX 105920700 105921000 0.3223 47 chrX 105992400 105992700 0.0892 48 chrX 106079700 106080600 0.1458 61 chrX 106232700 106233000 0.1234 17 chrX 106266600 106278000 0 47 chrX 106288200 106299600 0 48 chrX 106308600 106308900 0.161 18 chrX 106382700 106383000 0.1567 51 chrX 106469400 106475400 0 78 chrX 106602900 106603200 0.0829 44 chrX 106756800 106757700 0.1045 63 chrX 106852200 106852500 0.294 45 chrX 107009700 107010000 0.2884 40 chrX 107035500 107036400 0 54 chrX 107156700 107157000 0.0641 69 chrX 107158200 107161500 0.0641 69 chrX 107326800 107327100 0.1515 29 chrX 107365200 107367000 0.0089 65 chrX 107368500 107369100 0.0565 76 chrX 107612400 107613900 0 67 chrX 108281100 108281400 0.0837 92 chrX 108530400 108530700 0.3934 33 chrX 108773700 108774000 0.0247 44 chrX 108858300 108858600 0.3053 51 chrX 108982500 108982800 0.358 26 chrX 109035600 109035900 0.1749 57 chrX 109056000 109056300 0.009 57 chrX 109057500 109058400 0.009 57 chrX 109115700 109116000 0.0797 40 chrX 109117500 109117800 0.2469 51 chrX 109648800 109649100 0.21 53 chrX 110222100 110222400 0.1329 49 chrX 110609400 110609700 0.2315 41 chrX 110817000 110817600 0.086 60 chrX 110819100 110819400 0.086 60 chrX 110820600 110820900 0.3516 65 chrX 111315300 111315900 0.0021 63 chrX 111590100 111593100 0.0061 76 chrX 111638400 111640800 0.0204 84 chrX 111721200 111721500 0.1134 10 chrX 111936600 111936900 0.2316 39 chrX 112329900 112330200 0.1438 69 chrX 112331700 112332000 0.1438 69 chrX 112349400 112350000 0.2626 63 chrX 112432500 112434000 0.0975 58 chrX 112506300 112506600 0.2662 68 chrX 112719600 112719900 0.2053 55 chrX 113325600 113325900 0.1692 51 chrX 113337900 113343000 0.0231 80 chrX 113451000 113451300 0.1966 31 chrX 113633700 113634300 0.2018 42 chrX 113688600 113689800 0.083 38 chrX 113740500 113740800 0.1961 39 chrX 114470700 114471000 0.3435 11 chrX 114492900 114493200 0.1291 81 chrX 114705600 114706500 0.0294 44 chrX 114720900 114721500 0.1508 45 chrX 114742800 114743100 0.0423 32 chrX 114831000 114833100 0.0355 43 chrX 114856200 114856500 0.1444 39 chrX 115080900 115081200 0.2207 40 chrX 115119300 115120800 0.0811 108 chrX 115346400 115348200 0.1968 44 chrX 115474500 115474800 0.2927 21 chrX 115668900 115669500 0.2351 36 chrX 115705800 115706100 0.2544 14 chrX 115724400 115725000 0 16 chrX 115726200 115735500 0 255 chrX 115736700 115737000 0 30 chrX 115840200 115840500 0.2618 16 chrX 115842300 115889400 0 297 chrX 116164200 116164500 0.2133 29 chrX 116187300 116187600 0.2281 41 chrX 116312100 116313300 0.2296 46 chrX 116516100 116516400 0.3763 36 chrX 116557200 116557500 0.0203 18 chrX 116944200 116944500 0.2831 49 chrX 116966400 116967000 0.1061 74 chrX 117425400 117425700 0.2166 41 chrX 117728100 117728400 0.1031 57 chrX 117729600 117730500 0.1031 57 chrX 117874200 117874500 0.1209 51 chrX 117875700 117878400 0.1209 51 chrX 118009200 118010700 0.0427 55 chrX 118034400 118035000 0.1528 53 chrX 118036800 118037400 0.1528 53 chrX 118071600 118071900 0.4078 37 chrX 118401000 118401600 0.0342 50 chrX 119038500 119038800 0.0341 15 chrX 119165400 119166000 0.2541 48 chrX 119435700 119441400 0 77 chrX 119805600 119806200 0.0526 57 chrX 119808300 119808600 0.2328 35 chrX 120038400 120067500 0 46 chrX 120069000 120086400 0 45 chrX 120150000 120166500 0 48 chrX 120168900 120169500 0 48 chrX 120171000 120198000 0 48 chrX 120346200 120346500 0.1433 34 chrX 120389100 120389400 0.0657 39 chrX 120873600 120873900 0.3767 25 chrX 120875700 120879300 0 40 chrX 120930000 120986700 0 55 chrX 121017900 121018200 0.3683 53 chrX 121263900 121267800 0.0141 72 chrX 121440900 121441200 0.3074 54 chrX 121532100 121532400 0.1512 70 chrX 121691700 121692600 0.0212 70 chrX 121695900 121698000 0 86 chrX 121728000 121728900 0.0188 80 chrX 121878900 121879200 0.2693 41 chrX 122181000 122181300 0.3264 18 chrX 122331900 122332200 0.4226 26 chrX 123051600 123052200 0.1991 54 chrX 123056700 123057000 0.2514 37 chrX 123058500 123058800 0.2236 23 chrX 124179300 124179600 0.3145 61 chrX 124494900 124495200 0.2773 65 chrX 124753200 124753500 0.3534 41 chrX 125043300 125044200 0.0154 56 chrX 125351100 125351400 0.4233 51 chrX 125511600 125511900 0.3029 49 chrX 125514300 125514600 0.1741 78 chrX 125610000 125613600 0.0911 51 chrX 125779500 125780400 0.0324 84 chrX 125842800 125843400 0.0771 64 chrX 126051900 126052200 0.2624 29 chrX 126108300 126108900 0.1952 55 chrX 126188100 126188400 0.2448 41 chrX 126231900 126232200 0.2784 74 chrX 126233700 126234000 0.2784 74 chrX 126288300 126288600 0.2763 58 chrX 126462300 126462600 0.451 58 chrX 126914400 126915000 0.0533 47 chrX 127117500 127122600 0.0018 79 chrX 127254900 127255200 0.2951 39 chrX 127362600 127368000 0.0097 59 chrX 127483800 127484400 0.1128 56 chrX 127593900 127594200 0.2355 30 chrX 127800300 127800600 0.3524 44 chrX 128667600 128667900 0.0257 23 chrX 128785800 128788200 0.0935 67 chrX 128944200 128944800 0.116 64 chrX 129045900 129046200 0.1099 64 chrX 129048300 129049200 0.1099 64 chrX 129085200 129085500 0.294 46 chrX 129166800 129168000 0.1938 56 chrX 129341700 129342600 0.1946 49 chrX 129406500 129407400 0.3143 44 chrX 129482100 129482400 0.2713 56 chrX 129536700 129537000 0.4455 38 chrX 129851700 129852000 0.112 44 chrX 130496100 130496400 0.1704 44 chrX 130517700 130523400 0 78 chrX 130569900 130570200 0.1007 56 chrX 130674900 130675200 0.1764 54 chrX 130786500 130787100 0.071 51 chrX 130821300 130821600 0.1835 40 chrX 130949100 130949700 0.0133 60 chrX 130959600 130965000 0.0075 80 chrX 131003100 131006400 0 64 chrX 131124900 131126100 0.0017 84 chrX 131155500 131156100 0.186 47 chrX 131245800 131248200 0.1353 67 chrX 131250300 131250600 0.1353 67 chrX 131327700 131328000 0.3234 39 chrX 131379000 131380200 0.1231 66 chrX 131487600 131488200 0.2065 74 chrX 131504100 131505000 0.1408 64 chrX 131579700 131580300 0.2318 54 chrX 131584200 131584500 0.1896 48 chrX 131664600 131664900 0.222 54 chrX 131667000 131667300 0.2275 58 chrX 132135600 132138000 0.0119 66 chrX 132156300 132159300 0.2178 69 chrX 132197100 132197400 0.4145 41 chrX 132866400 132867000 0.0524 57 chrX 134788200 134788500 0.1084 10 chrX 135027600 135027900 0.2377 41 chrX 135116100 135118500 0 48 chrX 135120600 135157800 0 48 chrX 135174600 135175200 0.1226 29 chrX 135214500 135252600 0 44 chrX 135253800 135256200 0 43 chrX 135615900 135619200 0 42 chrX 135621300 135621600 0.0971 28 chrX 135667200 135667500 0.2644 24 chrX 135669900 135673200 0 38 chrX 135686100 135686400 0.2217 46 chrX 135720600 135734700 0 91 chrX 135748800 135813000 0 92 chrX 135814500 135847500 0 92 chrX 135849000 135864900 0 72 chrX 135866100 135881400 0 58 chrX 135883800 135887700 0 83 chrX 135945600 135946200 0.053 49 chrX 136075800 136076100 0.114 22 chrX 136332300 136332600 0.2431 64 chrX 136440300 136445700 0.0063 106 chrX 137674200 137674500 0.1362 59 chrX 138062100 138064200 0 67 chrX 138301200 138301800 0.2246 55 chrX 138341700 138342000 0.1578 47 chrX 138780300 138780600 0.1072 61 chrX 138782700 138783600 0.1328 61 chrX 139068000 139069500 0.0417 62 chrX 139503300 139503600 0.2609 24 chrX 139852200 139852500 0.2235 50 chrX 140013000 140013900 0 14 chrX 140018100 140018400 0.0957 11 chrX 140074800 140075100 0 33 chrX 140137200 140138400 0.2234 39 chrX 140219400 140220600 0.0169 26 chrX 140412000 140412300 0.2196 15 chrX 140419200 140420100 0.0513 97 chrX 140995500 140996100 0.139 35 chrX 141007200 141028200 0 89 chrX 141030000 141033000 0 35 chrX 141034200 141042900 0 40 chrX 141044700 141045000 0.0477 32 chrX 141048000 141048600 0.3004 31 chrX 141052500 141064800 0 48 chrX 141066000 141092700 0 48 chrX 141094500 141111900 0 48 chrX 141117300 141117900 0.0591 60 chrX 141231900 141232500 0.0102 42 chrX 141239100 141239400 0.4153 40 chrX 141241800 141243000 0.1474 51 chrX 141244800 141245100 0.3106 35 chrX 141248700 141249600 0.0009 26 chrX 141285900 141286200 0.3486 37 chrX 141357000 141357600 0.1946 38 chrX 141421200 141427200 0 82 chrX 141475800 141492900 0 46 chrX 141494700 141495900 0 46 chrX 141497100 141507900 0 46 chrX 141509100 141511200 0 46 chrX 141512400 141514200 0 46 chrX 141515700 141521100 0 46 chrX 141523500 141535500 0 39 chrX 141537600 141539400 0 28 chrX 141542100 141542700 0 40 chrX 141544500 141557400 0 40 chrX 141559500 141566700 0 77 chrX 141568200 141585300 0 77 chrX 141586800 141594900 0 59 chrX 141598500 141600900 0.14 39 chrX 141688200 141689700 0.0468 36 chrX 141697800 141698400 0.0421 50 chrX 141699900 141700200 0.0775 31 chrX 141790500 141790800 0.1709 20 chrX 141824700 141825300 0.1034 67 chrX 141912000 141912900 0 30 chrX 142171500 142171800 0.3489 41 chrX 142190100 142190700 0.0046 33 chrX 142192200 142192500 0.12 15 chrX 142339200 142344000 0.0031 88 chrX 142377600 142377900 0.1384 51 chrX 142385700 142386000 0.2534 50 chrX 142387200 142387500 0.3244 48 chrX 142478400 142483500 0.0225 104 chrX 142908900 142910100 0.2412 74 chrX 143154300 143154900 0.1576 48 chrX 143355000 143355300 0.164 77 chrX 143990700 143991300 0.2347 23 chrX 144078000 144079800 0 46 chrX 144081000 144081300 0 46 chrX 144082800 144085200 0 51 chrX 144088500 144097800 0 56 chrX 144099900 144100800 0 56 chrX 144102300 144103500 0.0016 45 chrX 144105900 144106200 0 56 chrX 144107400 144111300 0 56 chrX 144112500 144117000 0 42 chrX 144118200 144118500 0.2348 34 chrX 144120000 144120300 0.2423 37 chrX 144121500 144123000 0 44 chrX 144124200 144124800 0.0103 33 chrX 144126000 144126600 0 55 chrX 144128700 144150900 0 55 chrX 144152700 144153600 0 55 chrX 144156900 144167400 0 50 chrX 144168900 144173100 0 50 chrX 144174900 144176700 0 56 chrX 144177900 144179700 0 56 chrX 144182100 144182700 0 56 chrX 144183900 144184500 0 56 chrX 144186000 144191700 0 48 chrX 144193200 144193800 0 48 chrX 144195000 144201000 0 48 chrX 144202500 144206700 0 48 chrX 144208500 144212400 0 43 chrX 144324000 144326700 0 55 chrX 144764700 144765000 0.4372 53 chrX 144966900 144967500 0.154 50 chrX 145353900 145354200 0.3501 36 chrX 145974900 145975800 0 75 chrX 146111400 146112600 0.031 63 chrX 146470800 146471100 0.2503 22 chrX 146619300 146619600 0.0375 59 chrX 146802000 146822400 0 44 chrX 146861700 146862300 0.0412 47 chrX 146903100 146904600 0.1175 65 chrX 147145500 147145800 0.1988 44 chrX 147221100 147221400 0.2697 35 chrX 147279900 147280200 0 24 chrX 147281700 147282000 0 71 chrX 147283500 147286800 0 71 chrX 147408900 147412200 0.0332 65 chrX 147654000 147659700 0 82 chrX 147992400 147992700 0.4075 16 chrX 148123500 148126800 0.0723 65 chrX 148170000 148171800 0.0477 45 chrX 148300200 148300500 0.1053 26 chrX 148351800 148352100 0.2015 26 chrX 148731600 148732200 0.1489 54 chrX 148971900 148973100 0 53 chrX 149178300 149183100 0 86 chrX 149215200 149215800 0 66 chrX 149336100 149337600 0.005 61 chrX 149338800 149339400 0.0481 33 chrX 149438400 149439600 0.0099 370 chrX 149441100 149441400 0.0099 370 chrX 149533200 149533500 0.4414 31 chrX 149538600 149538900 0.07 27 chrX 149542800 149544300 0.0458 40 chrX 149548500 149562000 0 48 chrX 149573400 149598600 0 45 chrX 149599800 149602200 0 45 chrX 149654700 149681100 0 43 chrX 149722200 149748600 0 43 chrX 149767200 149796000 0 41 chrX 149917500 149931000 0 38 chrX 149935200 149936700 0.0451 37 chrX 149940900 149941500 0.102 35 chrX 149946600 149946900 0.1209 30 chrX 149973900 149974200 0.2421 33 chrX 150000900 150001200 0.0157 131 chrX 150022200 150022500 0.1802 46 chrX 150132000 150134100 0.0194 73 chrX 150170100 150171300 0.1248 63 chrX 150215700 150216000 0.0386 28 chrX 150340800 150341100 0.0413 35 chrX 150418500 150420300 0.0091 64 chrX 151331100 151336200 0 75 chrX 151703700 151704000 0.3836 46 chrX 151914300 151917600 0 19 chrX 152239500 152239800 0.2308 59 chrX 152349600 152349900 0.1667 55 chrX 152359800 152360400 0.0649 76 chrX 152416200 152416500 0.146 49 chrX 152547300 152547600 0.2318 63 chrX 152549700 152550300 0.121 91 chrX 152678700 152696700 0 43 chrX 152698500 152699700 0 36 chrX 152702100 152725200 0 45 chrX 152743200 152766300 0 43 chrX 152767500 152770200 0 45 chrX 152771700 152789100 0 45 chrX 152983800 152986800 0 41 chrX 153066600 153074100 0 43 chrX 153075900 153083400 0 47 chrX 153106200 153148500 0 47 chrX 153251700 153293700 0 48 chrX 153313500 153316200 0 46 chrX 154144500 154148100 0 53 chrX 154149600 154188000 0 84 chrX 154189200 154238100 0 84 chrX 154241100 154294200 0 57 chrX 154338300 154347000 0 43 chrX 154385100 154394100 0 38 chrX 154556400 154591200 0 44 chrX 154614000 154648200 0 44 chrX 154653600 154654200 0 24 chrX 154881000 154885200 0 76 chrX 154886400 154888500 0 76 chrX 154941900 154942200 0.2303 51 chrX 155006400 155007000 0.0018 43 chrX 155148000 155148600 0.0122 35 chrX 155160900 155161200 0.3361 50 chrX 155300700 155304900 0.0216 78 chrX 155336700 155369700 0 46 chrX 155372100 155386500 0 42 chrX 155454000 155468400 0 41 chrX 155471400 155504400 0 49 chrX 155516100 155522100 0 77 chrX 155568900 155569200 0 26 chrX 155571300 155571900 0 26 chrX 155672700 155673000 0.3597 35 chrX 155693700 155694000 0.3998 66 chrX 155700600 155703600 0 76 chrX 156010200 156015300 0 68 chrX 156017100 156023100 0 160 chrX 156024600 156028800 0 160 chrX 156030000 156030900 0.1447 1368 chrY 2807700 2809500 0.0171 34 chrY 3056400 3056700 0.3152 36 chrY 3063900 3064500 0.1699 24 chrY 3071400 3072000 0.1232 23 chrY 3079200 3079500 0.2092 27 chrY 3103200 3103500 0.2882 29 chrY 3115800 3116100 0.2469 24 chrY 3161100 3161700 0.3895 39 chrY 3191400 3191700 0.0784 25 chrY 3198600 3198900 0.2399 24 chrY 3201900 3202500 0.288 29 chrY 3215100 3215400 0.1449 34 chrY 3228600 3228900 0.2332 26 chrY 3238200 3238500 0.1977 41 chrY 3275400 3275700 0.105 24 chrY 3317400 3317700 0.4146 28 chrY 3346500 3346800 0.0623 24 chrY 3354300 3354600 0.3523 26 chrY 3368400 3369600 0.0117 27 chrY 3371700 3372300 0.2939 28 chrY 3380100 3380400 0.2016 29 chrY 3384000 3384300 0.1825 17 chrY 3387600 3387900 0.2632 32 chrY 3415800 3416100 0.1608 38 chrY 3422700 3423600 0.1717 25 chrY 3430500 3430800 0.3068 36 chrY 3444300 3449400 0 85 chrY 3456600 3456900 0.2976 30 chrY 3483300 3483600 0.3727 26 chrY 3504000 3505200 0.0044 31 chrY 3510900 3511500 0.1575 35 chrY 3536700 3537000 0.2137 33 chrY 3540900 3541200 0.3229 30 chrY 3550200 3550500 0.1672 15 chrY 3556200 3556500 0.2555 31 chrY 3571800 3572100 0.2969 26 chrY 3573600 3573900 0.3089 28 chrY 3581400 3581700 0.2565 22 chrY 3648900 3649200 0.2097 34 chrY 3650700 3651900 0.2304 31 chrY 3658800 3659100 0.37 36 chrY 3693900 3694200 0.4698 36 chrY 3698700 3699300 0.2759 30 chrY 3708000 3708300 0.0621 34 chrY 3715800 3716400 0.2054 34 chrY 3720300 3720600 0.1094 33 chrY 3755400 3755700 0.3245 30 chrY 3787800 3788100 0.1149 28 chrY 3793500 3793800 0.0811 30 chrY 3804300 3804600 0.1398 32 chrY 3805800 3806100 0.3153 25 chrY 3824100 3824400 0.275 24 chrY 3861000 3861600 0.3661 24 chrY 3884400 3885000 0.0009 23 chrY 3893400 3893700 0.3316 32 chrY 3923400 3924000 0.3901 32 chrY 3936900 3937200 0.2362 17 chrY 3974700 3975000 0 32 chrY 3995400 3995700 0.3253 25 chrY 4018200 4018500 0.2037 30 chrY 4023000 4023300 0.0474 25 chrY 4038600 4038900 0.3535 22 chrY 4106100 4106700 0.1154 32 chrY 4120200 4120500 0.2809 20 chrY 4133100 4133400 0.2358 29 chrY 4153200 4153500 0.0848 42 chrY 4221600 4221900 0.2875 48 chrY 4266900 4267200 0.0203 26 chrY 4275600 4275900 0.1471 35 chrY 4291200 4291500 0.4497 20 chrY 4374300 4374600 0.2584 26 chrY 4386000 4386300 0.2681 26 chrY 4392000 4392300 0.2615 22 chrY 4451100 4452300 0.1134 33 chrY 4458600 4458900 0.4529 21 chrY 4464900 4465200 0.3698 27 chrY 4482600 4482900 0.0659 25 chrY 4491300 4491600 0.3741 24 chrY 4501800 4502400 0.2402 22 chrY 4539900 4540200 0.0612 29 chrY 4541700 4542300 0.157 41 chrY 4595700 4596000 0.4237 29 chrY 4624500 4624800 0.1667 32 chrY 4627200 4627500 0.4463 24 chrY 4632300 4632600 0.2087 23 chrY 4707600 4707900 0.4306 31 chrY 4709100 4709400 0.2301 28 chrY 4741200 4741500 0.2666 37 chrY 4748700 4749300 0.189 30 chrY 4761600 4761900 0.4191 18 chrY 4771500 4771800 0.2249 27 chrY 4798200 4798500 0.171 30 chrY 4807200 4807800 0.0639 33 chrY 4821600 4821900 0.325 27 chrY 4851900 4852200 0.1844 25 chrY 4889700 4890000 0.1458 24 chrY 4891200 4891500 0.137 37 chrY 4904100 4905000 0.1886 27 chrY 4906500 4906800 0.1569 21 chrY 4921500 4921800 0.213 29 chrY 4949100 4954800 0 74 chrY 4961400 4961700 0.1948 29 chrY 4963200 4963800 0.2397 29 chrY 4966500 4966800 0.0809 36 chrY 4975500 4975800 0.2322 50 chrY 4978800 4979100 0.3625 42 chrY 4987200 4987500 0.3502 21 chrY 5000400 5000700 0.2643 26 chrY 5010300 5010600 0.2261 31 chrY 5033100 5033400 0.2977 27 chrY 5036100 5036400 0.3899 31 chrY 5042700 5043000 0.2367 45 chrY 5047800 5048400 0.1593 32 chrY 5063100 5063400 0.2215 30 chrY 5071200 5071500 0.3107 28 chrY 5074200 5074500 0.3686 21 chrY 5077500 5077800 0.2886 28 chrY 5084100 5084400 0.1962 19 chrY 5096100 5096400 0.1737 25 chrY 5098500 5098800 0.2114 32 chrY 5118600 5118900 0.102 27 chrY 5141100 5142000 0.2212 46 chrY 5170800 5171100 0.4072 26 chrY 5175600 5176500 0.0085 51 chrY 5196600 5197200 0.1548 42 chrY 5204100 5205000 0.0646 29 chrY 5210400 5210700 0.2188 34 chrY 5218500 5218800 0.2735 29 chrY 5221200 5221500 0.0199 28 chrY 5225400 5225700 0.4036 29 chrY 5250000 5253300 0.1358 33 chrY 5260200 5260800 0 30 chrY 5277000 5277300 0.0227 22 chrY 5279400 5280000 0.0082 23 chrY 5290800 5291100 0.3218 18 chrY 5376900 5377200 0.0534 33 chrY 5379900 5380500 0.167 32 chrY 5393100 5393700 0.257 36 chrY 5400900 5401200 0.0938 23 chrY 5411100 5411400 0.1499 27 chrY 5438700 5439000 0.2711 26 chrY 5473800 5474400 0.105 28 chrY 5485800 5486100 0.2428 34 chrY 5510100 5510700 0.3076 26 chrY 5518500 5518800 0.3663 26 chrY 5526300 5526600 0.2625 33 chrY 5568900 5569200 0.0023 26 chrY 5571600 5573100 0.2278 33 chrY 5596500 5596800 0.0957 34 chrY 5606400 5612100 0.0078 99 chrY 5613900 5614200 0.2624 37 chrY 5673300 5673600 0.314 23 chrY 5702400 5702700 0.1791 32 chrY 5712900 5713200 0.1511 18 chrY 5714700 5715000 0.1151 27 chrY 5734800 5735400 0.0142 30 chrY 5759700 5760300 0.0212 32 chrY 5771100 5771400 0.3272 29 chrY 5821500 5821800 0.2435 15 chrY 5855400 5855700 0.2365 22 chrY 5859300 5859600 0.1865 21 chrY 5861700 5862000 0.1383 32 chrY 5865000 5865300 0.1615 26 chrY 5867700 5868000 0.1787 42 chrY 5875800 5876100 0.077 29 chrY 5912400 5912700 0.3423 27 chrY 5922600 5923200 0.0457 28 chrY 5934600 5934900 0.2321 26 chrY 5952300 5952600 0.1699 24 chrY 5971500 5971800 0.196 20 chrY 6004800 6005100 0.2408 23 chrY 6011700 6012000 0.1019 20 chrY 6070200 6070800 0.1071 31 chrY 6086700 6087000 0.1826 21 chrY 6174300 6174900 0.046 36 chrY 6191700 6192300 0.2732 27 chrY 6237600 6257400 0 173 chrY 6258600 6261600 0 173 chrY 6263100 6266400 0.0001 118 chrY 6267600 6267900 0.141 34 chrY 6271200 6271500 0.19 34 chrY 6273900 6276300 0.0503 35 chrY 6280500 6285300 0 45 chrY 6286500 6289200 0 45 chrY 6291300 6321600 0 45 chrY 6323100 6336900 0 41 chrY 6338400 6477000 0 50 chrY 6492900 6493800 0 35 chrY 6501900 6502200 0.2343 36 chrY 6508500 6508800 0.3733 34 chrY 6511200 6513600 0 28 chrY 6519300 6520800 0.0034 29 chrY 6523200 6525000 0.0121 26 chrY 6563100 6563400 0.3564 30 chrY 6591000 6591300 0.4209 21 chrY 6640500 6640800 0.1268 34 chrY 6659100 6659400 0.1841 30 chrY 6665400 6665700 0.1232 28 chrY 6675600 6706500 0 42 chrY 6709200 6709500 0.0046 30 chrY 6744900 6745200 0.2271 30 chrY 6854400 6854700 0.2063 52 chrY 7086900 7087200 0.1159 16 chrY 7155000 7155300 0.2343 136 chrY 7158300 7159500 0.1533 64 chrY 7254300 7254600 0.1293 46 chrY 7341000 7341600 0.3307 27 chrY 7578900 7581900 0 40 chrY 7587900 7588200 0.2176 31 chrY 7590900 7593000 0 41 chrY 7595700 7598100 0.0157 34 chrY 7599600 7600500 0.0417 34 chrY 7603200 7603500 0.4032 24 chrY 7605300 7631100 0 43 chrY 7634400 7636500 0 35 chrY 7638300 7638600 0 35 chrY 9158100 9158400 0.0691 23 chrY 9333600 9333900 0.0694 107 chrY 9336000 9403800 0 215 chrY 9453600 9502500 0 223 chrY 9503700 9537000 0 199 chrY 9545400 9546000 0.2455 73 chrY 9590700 9591000 0.1291 48 chrY 9636000 9637200 0.1465 35 chrY 9640200 9642000 0 30 chrY 9648600 9650700 0 34 chrY 9653100 9653400 0.2803 30 chrY 9659700 9660000 0.2809 26 chrY 9668100 9669000 0 32 chrY 9670200 9670800 0 32 chrY 9687600 9699600 0 48 chrY 9700800 9802500 0 48 chrY 9813000 9836400 0 44 chrY 9838800 9888000 0 44 chrY 9889500 9894000 0 44 chrY 9898500 9900900 0 31 chrY 9903300 9903600 0.1033 34 chrY 9906900 9907200 0.2233 31 chrY 9908400 9916800 0 39 chrY 9918300 9918600 0 39 chrY 9942000 9947100 0 76 chrY 10246200 10266900 0 69 chrY 10317000 10544100 0 80 chrY 10594200 10617600 0 67 chrY 10618800 10621800 0 67 chrY 10626600 10633500 0 4684 chrY 10645800 10650000 0 4661 chrY 10651500 10662000 0.0561 2454 chrY 10663200 10669800 0.129 4167 chrY 10671000 10674000 0.1853 1716 chrY 10677300 10679100 0.2861 270 chrY 10682400 10694100 0.1031 3324 chrY 10744200 10852800 0.0669 4048 chrY 10855800 10874100 0.0733 1034 chrY 10875600 10890600 0.0885 1144 chrY 10891800 10896600 0.1275 1073 chrY 10898100 10902300 0.0994 435 chrY 10905900 10907100 0.4521 97 chrY 10909500 10909800 0.4271 232 chrY 10920900 10965900 0.0673 1357 chrY 10967400 10977300 0.0937 1949 chrY 10978800 11028300 0.0718 8125 chrY 11029500 11040900 0.0718 8125 chrY 11106300 11106600 0.3334 65 chrY 11125500 11125800 0.2906 70 chrY 11163900 11164200 0.2148 60 chrY 11193000 11193300 0.4225 70 chrY 11219700 11220000 0.3419 70 chrY 11222100 11222400 0.339 128 chrY 11229900 11230200 0.3892 75 chrY 11240100 11240400 0.1767 102 chrY 11267100 11267400 0.2753 53 chrY 11290800 11291700 0.3537 914 chrY 11292900 11293200 0.2616 2484 chrY 11296200 11305800 0.101 14535 chrY 11310600 11310900 0.4935 2679 chrY 11312100 11313600 0.2069 2158 chrY 11317800 11320200 0.4513 6145 chrY 11323800 11326800 0.2071 2104 chrY 11328900 11330100 0.3135 7569 chrY 11355000 11355300 0.2326 24 chrY 11492100 11499000 0.2079 257 chrY 11502300 11502600 0.2691 124 chrY 11504400 11505900 0.3495 87 chrY 11508900 11509200 0.4197 104 chrY 11511000 11511300 0.3884 97 chrY 11512500 11514600 0.3769 130 chrY 11516700 11517000 0.2971 117 chrY 11518500 11518800 0.2971 117 chrY 11520900 11525400 0.1624 336 chrY 11528400 11529300 0.1439 837 chrY 11534400 11536200 0.2294 1257 chrY 11538000 11538300 0.3619 110 chrY 11539500 11562900 0 3239 chrY 11564100 11592000 0 3239 chrY 11643600 11643900 0.221 15657 chrY 11646000 11647200 0.1362 458 chrY 11649300 11649600 0.3752 121 chrY 11652600 11653800 0.341 122 chrY 11657100 11658300 0.3223 133 chrY 11659500 11660100 0.3324 109 chrY 11662800 11663100 0.4291 85 chrY 11666100 11666400 0.2009 293 chrY 11668800 11670900 0.2457 146 chrY 11672700 11673300 0.2658 120 chrY 11674800 11678700 0.2342 162 chrY 11680200 11682600 0.1714 423 chrY 11683800 11685000 0.2622 132 chrY 11687100 11691300 0.1467 3894 chrY 11692500 11700600 0.1467 3894 chrY 11702400 11702700 0.1467 3894 chrY 11705400 11706900 0.2045 156 chrY 11708700 11709600 0.2801 163 chrY 11711700 11713200 0.1822 221 chrY 11716800 11723400 0.0966 31584 chrY 11725200 11726700 0.2299 151 chrY 11728200 11741700 0.113 2982 chrY 11743500 11748600 0.1493 7206 chrY 11756400 11757000 0.307 49 chrY 12313800 12315000 0 40 chrY 12320100 12321300 0 40 chrY 12850800 12851400 0.018 31 chrY 13113300 13114200 0 41 chrY 13120500 13122000 0 33 chrY 13131000 13131300 0.2575 59 chrY 13166700 13167000 0.1983 42 chrY 13180500 13181700 0.1998 57 chrY 13183800 13184100 0.225 36 chrY 13561800 13562100 0.2394 56 chrY 13563600 13564200 0.0696 89 chrY 13772100 13772400 0.2858 49 chrY 13984500 14019600 0 46 chrY 14023200 14058000 0 44 chrY 14180700 14181000 0.4791 22 chrY 14923800 14924100 0.2166 49 chrY 14962800 14963100 0.3831 42 chrY 15087900 15088200 0.3482 45 chrY 15723000 15723300 0.2223 52 chrY 15875400 15883500 0 124 chrY 15896400 15904500 0 105 chrY 16159800 16269300 0 46 chrY 16315800 16425600 0 57 chrY 16870500 16870800 0.2222 61 chrY 16914000 16914300 0.1624 47 chrY 17061300 17063400 0 76 chrY 17065200 17065800 0.2774 52 chrY 17375100 17377500 0 62 chrY 17456100 17951100 0 63 chrY 17954700 18640200 0 64 chrY 18680100 18870000 0 50 chrY 19413300 19413600 0.4034 57 chrY 19583100 19584000 0 32 chrY 19667700 19668000 0.1543 55 chrY 19678200 19679100 0.02 48 chrY 19780500 19781400 0 34 chrY 20054100 20062800 0 48 chrY 20064300 20065500 0 73 chrY 20069400 20070900 0 50 chrY 20078100 20078700 0.1089 33 chrY 20079900 20091000 0 80 chrY 20094900 20095500 0.0923 18 chrY 20096700 20100300 0 42 chrY 20103000 20107200 0 52 chrY 20112300 20112900 0 50 chrY 20114100 20115000 0 67 chrY 20120100 20124600 0 93 chrY 20127600 20131500 0 52 chrY 20133000 20136000 0 33 chrY 20142600 20153700 0 67 chrY 20158500 20177100 0 88 chrY 20179500 20183100 0 44 chrY 20184900 20207700 0 239 chrY 20258400 20260200 0 40 chrY 20262000 20262300 0.4095 51 chrY 20264400 20264700 0.3393 44 chrY 20269200 20273400 0 80 chrY 20286600 20295300 0 248 chrY 20318700 20321100 0 56 chrY 20326200 20343600 0 229 chrY 20349000 20349600 0.4309 176 chrY 20371200 20371800 0.2192 58 chrY 20473200 20475600 0.0241 64 chrY 20690400 20690700 0.2685 30 chrY 20958900 20959500 0.1668 53 chrY 21010200 21021600 0 40 chrY 21051600 21063300 0 42 chrY 21065100 21066000 0 29 chrY 21426600 21426900 0.2782 36 chrY 21493800 21567300 0 73 chrY 21705900 21706200 0.0565 36 chrY 21714600 21738900 0 23 chrY 21741600 21750000 0 26 chrY 21756000 21789000 0 41 chrY 21862200 22208700 0 86 chrY 22241100 22241400 0.318 16 chrY 22288800 22289400 0.1461 52 chrY 22341900 22342800 0.1696 74 chrY 22344600 22344900 0.1696 74 chrY 22377900 22725900 0 52 chrY 22733400 22733700 0.1866 37 chrY 22735800 22736400 0.0225 32 chrY 22741500 22741800 0.1508 42 chrY 22743600 22743900 0.1713 28 chrY 22746900 22777500 0 69 chrY 22779000 26311500 0 69 chrY 26638200 26645400 0.06 1063 chrY 26646600 26648100 0.1651 1024 chrY 26649600 26650200 0.1651 1024 chrY 26651700 26663400 0.1651 1024 chrY 26665800 26666100 0.1505 521 chrY 26667300 26670000 0.1505 521 chrY 26671800 26673300 0.1076 600 chrY 56673000 56771700 0 28529 chrY 56829900 56830200 0.4436 728 chrY 56833200 56834700 0.4786 3185 chrY 56850600 56850900 0.4243 1367 ================================================ FILE: tracks/lowmap70perc.bed ================================================ chr1 9900 55200 0 226 chr1 57900 61200 0.0233 75 chr1 63600 78900 0 104 chr1 80400 81000 0.1405 85 chr1 83100 83700 0.221 70 chr1 90300 108300 0 124 chr1 109500 137700 0 124 chr1 139800 183300 0 156 chr1 184500 190800 0 156 chr1 192000 207300 0 114 chr1 258000 267900 0 150 chr1 269700 270600 0 150 chr1 271800 284400 0 150 chr1 286200 297900 0 150 chr1 348000 535800 0 120 chr1 587700 591000 0 750 chr1 592200 600000 0 750 chr1 601200 632400 0 750 chr1 635400 665400 0 121 chr1 666600 770100 0 121 chr1 771300 774900 0 121 chr1 776400 777000 0 121 chr1 781200 782700 0.4817 86 chr1 788700 792300 0.2643 739 chr1 799800 800100 0.3809 74 chr1 807000 807300 0.1351 106 chr1 808800 809400 0.1351 106 chr1 813600 814500 0.0238 63 chr1 817500 817800 0.0781 83 chr1 827700 828300 0.1916 71 chr1 842400 842700 0.4762 68 chr1 851100 851400 0.4845 45 chr1 853500 853800 0.5208 20 chr1 857400 858000 0.1344 40 chr1 861300 861600 0.543 50 chr1 866700 867000 0.4355 66 chr1 876000 876300 0.5791 30 chr1 909000 909300 0.5078 20 chr1 934200 934500 0.0843 24 chr1 976800 977100 0.2936 18 chr1 996300 996600 0.5557 74 chr1 1007700 1008000 0.3594 47 chr1 1016100 1016400 0.4079 138 chr1 1076700 1079400 0.0176 87 chr1 1080600 1080900 0.5825 32 chr1 1099200 1099800 0.6093 222 chr1 1139400 1140600 0.0455 56 chr1 1184700 1185000 0.5398 56 chr1 1201800 1202400 0.1474 43 chr1 1248900 1249500 0.0008 77 chr1 1288200 1290300 0.3288 200 chr1 1297200 1297500 0.4759 50 chr1 1350000 1350300 0.5275 10 chr1 1382400 1382700 0.5687 205 chr1 1445400 1445700 0.3131 58 chr1 1456200 1456500 0.2497 60 chr1 1474800 1475100 0.4887 52 chr1 1478700 1479000 0.0834 63 chr1 1481100 1481700 0.0206 70 chr1 1497300 1497600 0.3168 63 chr1 1513200 1513500 0.4026 58 chr1 1517400 1517700 0.0632 67 chr1 1519200 1519800 0.0705 55 chr1 1524300 1524600 0.3351 86 chr1 1530600 1530900 0.3808 36 chr1 1632600 1636200 0 73 chr1 1641600 1645500 0 79 chr1 1657500 1658700 0.0599 62 chr1 1661700 1662000 0.0691 83 chr1 1675500 1677300 0.0404 71 chr1 1690800 1693800 0.0417 71 chr1 1695600 1695900 0.0864 53 chr1 1698300 1703400 0 75 chr1 1705200 1705500 0.4392 40 chr1 1707000 1707300 0.3648 48 chr1 1708800 1713000 0 74 chr1 1714200 1714500 0 74 chr1 1722600 1724100 0.0836 65 chr1 1727700 1728000 0.0666 56 chr1 1738200 1740300 0.0382 82 chr1 1743900 1748100 0.0108 71 chr1 1751100 1751700 0.0595 54 chr1 1928100 1928400 0.6613 68 chr1 1979100 1979700 0.4737 36 chr1 1981500 1982100 0.626 92 chr1 2121600 2124300 0.334 162 chr1 2142000 2142300 0.614 52 chr1 2280600 2282400 0.0113 114 chr1 2365200 2366100 0.2105 80 chr1 2401200 2401500 0.6613 44 chr1 2440200 2440800 0.5545 118 chr1 2553300 2553900 0.4952 56 chr1 2568000 2568300 0.2465 53 chr1 2652000 2652300 0.6895 980 chr1 2655000 2702700 0 1101 chr1 2746200 2767500 0 949 chr1 2768700 2775300 0 152 chr1 2776500 2777400 0.0034 100 chr1 2849100 2849400 0.6441 132 chr1 2852400 2853000 0.4024 60 chr1 2859300 2859600 0.5488 45 chr1 2949600 2949900 0.3544 24 chr1 3029100 3029400 0.5608 72 chr1 3162900 3163200 0.1753 82 chr1 3167700 3168000 0.4241 45 chr1 3287400 3287700 0.5694 27 chr1 3299700 3300000 0.5262 25 chr1 3474900 3475800 0 98 chr1 3583200 3583800 0.0758 106 chr1 3588000 3588300 0.5576 23 chr1 3643800 3644400 0 51 chr1 3675000 3675300 0.3889 36 chr1 3693900 3694800 0.1974 65 chr1 3891900 3892500 0.0354 23 chr1 3929700 3930300 0.4971 38 chr1 4077300 4078200 0.1175 97 chr1 4302900 4303200 0.2549 348 chr1 4332900 4333500 0.3322 112 chr1 4632600 4633200 0.3057 75 chr1 5115600 5115900 0.5285 115 chr1 5334000 5334900 0 103 chr1 5732700 5733000 0.3445 60 chr1 5825700 5826000 0.564 59 chr1 5884500 5884800 0.5277 50 chr1 6186300 6186600 0.3136 65 chr1 6304500 6305100 0.1027 68 chr1 7114800 7115400 0 60 chr1 7335000 7335300 0.6539 52 chr1 7381500 7381800 0.5328 81 chr1 7865100 7865400 0.3899 41 chr1 7953000 7953600 0.4613 96 chr1 8433600 8433900 0.4035 70 chr1 8502000 8502900 0.4889 62 chr1 8511900 8512200 0.4422 36 chr1 9411000 9411300 0.6587 30 chr1 10577400 10577700 0.4368 29 chr1 10744200 10744800 0.3425 83 chr1 11036400 11036700 0.5377 60 chr1 11085900 11086200 0.3423 74 chr1 11249400 11250000 0.2146 47 chr1 11491800 11492100 0.4155 68 chr1 11522700 11523000 0.5874 169 chr1 12042900 12043200 0.585 44 chr1 12250800 12251100 0.5938 36 chr1 12782700 12783000 0.5695 66 chr1 12789600 12789900 0.3936 45 chr1 12816000 12816300 0.3762 44 chr1 12825300 12825600 0.1179 91 chr1 12832800 12833100 0.2072 59 chr1 12834300 12834600 0.2072 59 chr1 12846000 12846300 0.5352 71 chr1 12862200 12862500 0.3216 56 chr1 12866400 12868800 0 98 chr1 12870000 12872700 0 98 chr1 12874200 12877800 0 98 chr1 12879000 12879600 0 98 chr1 12887400 12889500 0.0228 83 chr1 12891600 12900600 0 89 chr1 12901800 12906600 0 89 chr1 12908100 12924600 0 89 chr1 12925800 12937800 0 89 chr1 12939000 12947400 0 91 chr1 12948600 12954300 0 91 chr1 13005000 13005600 0 76 chr1 13007700 13015800 0 76 chr1 13017600 13028400 0 76 chr1 13029600 13045200 0 76 chr1 13046400 13055400 0 76 chr1 13059000 13104300 0 86 chr1 13110300 13110600 0.5616 41 chr1 13122600 13169100 0 92 chr1 13173000 13199400 0 143 chr1 13200600 13224300 0 143 chr1 13247400 13265400 0 88 chr1 13266600 13275900 0 88 chr1 13277400 13288500 0 103 chr1 13289700 13293600 0 113 chr1 13294800 13305300 0 113 chr1 13306500 13307700 0 113 chr1 13312200 13312800 0.092 70 chr1 13314000 13314300 0.4305 82 chr1 13319400 13319700 0.6158 93 chr1 13322100 13322400 0.5296 63 chr1 13327500 13329000 0 58 chr1 13332300 13337700 0 80 chr1 13340100 13340400 0.1149 56 chr1 13347600 13347900 0.3417 79 chr1 13354800 13355100 0.5767 60 chr1 13357500 13358100 0.4083 60 chr1 13361400 13361700 0.3004 65 chr1 13363200 13363800 0.0261 40 chr1 13369800 13370100 0.5354 77 chr1 13371300 13371600 0.5417 79 chr1 13942200 13942500 0.511 68 chr1 14028900 14030400 0.0111 86 chr1 14257200 14257500 0.4339 50 chr1 14386200 14386500 0.4865 80 chr1 15268500 15268800 0.3118 65 chr1 16035600 16035900 0.637 28 chr1 16495200 16496100 0.01 91 chr1 16513200 16513500 0.1868 180 chr1 16515000 16516800 0.1868 180 chr1 16533600 16535100 0.3397 107 chr1 16537200 16537500 0.3813 66 chr1 16539900 16540200 0.3954 71 chr1 16542000 16542600 0.2269 111 chr1 16545600 16545900 0.301 60 chr1 16547700 16552500 0.0233 95 chr1 16554000 16570200 0 292 chr1 16571700 16575600 0 292 chr1 16579200 16579500 0.3252 156 chr1 16580700 16581300 0.3252 156 chr1 16582500 16582800 0.1968 168 chr1 16585500 16585800 0 214 chr1 16587300 16587600 0 214 chr1 16588800 16604700 0 214 chr1 16619100 16619700 0.111 150 chr1 16647000 16648800 0.4157 169 chr1 16652700 16674000 0 186 chr1 16682100 16682700 0.0749 80 chr1 16686900 16687200 0.4718 98 chr1 16688400 16696200 0 98 chr1 16698000 16699200 0 108 chr1 16700400 16711500 0 108 chr1 16713000 16715700 0 98 chr1 16729200 16764300 0 221 chr1 16767900 16770300 0.0208 135 chr1 16773000 16773300 0.2326 128 chr1 16774500 16775400 0.3433 140 chr1 16776600 16776900 0.3809 117 chr1 16778400 16779300 0.0466 126 chr1 16781100 16781400 0.3578 142 chr1 16782900 16785600 0.0011 126 chr1 16787400 16789200 0.2609 138 chr1 16790400 16794300 0.2609 138 chr1 16797600 16797900 0.5406 63 chr1 16850700 16854000 0 81 chr1 16855500 16858500 0 81 chr1 16862100 16863600 0.2797 101 chr1 16865400 16866600 0.1518 141 chr1 16868700 16869000 0.6266 171 chr1 16870500 16870800 0.5875 88 chr1 16872900 16873200 0.6545 159 chr1 16917300 16918200 0.0114 85 chr1 16953600 16954200 0.0577 140 chr1 16974000 16974900 0 34 chr1 17241600 17241900 0.457 59 chr1 18049500 18049800 0.6813 73 chr1 18825300 18825600 0.4995 21 chr1 18925800 18926100 0.5125 157 chr1 19267500 19267800 0.516 63 chr1 19508400 19508700 0.5363 50 chr1 20814900 20817300 0.056 41 chr1 20831700 20833200 0.0494 70 chr1 21387600 21389700 0.0859 60 chr1 21422400 21423000 0.3003 71 chr1 21425100 21425700 0.0351 70 chr1 21426900 21427500 0.0351 70 chr1 21429600 21430200 0.0351 70 chr1 21480900 21483000 0.0104 77 chr1 21484800 21485700 0.0104 77 chr1 21967800 21968400 0.0698 54 chr1 21979800 21980400 0.2965 58 chr1 21986700 21987000 0.3281 49 chr1 21989100 21991200 0 78 chr1 21993600 21994200 0.1595 103 chr1 22009800 22010100 0.5281 74 chr1 22012500 22014600 0 72 chr1 22372800 22373100 0.4761 108 chr1 23504700 23505000 0.6919 30 chr1 23837100 23837700 0.3386 43 chr1 23962200 23962500 0.5041 54 chr1 23992800 23994900 0.0688 55 chr1 24031500 24032100 0.2018 65 chr1 24076500 24076800 0.2306 40 chr1 24799800 24800400 0.1913 26 chr1 24832500 24834900 0 36 chr1 25002000 25002600 0.3444 13 chr1 25059300 25059600 0.4542 60 chr1 25264500 25267500 0.0078 53 chr1 25273200 25273800 0.4385 40 chr1 25292700 25293000 0.3935 35 chr1 25294500 25295700 0.1491 54 chr1 25297200 25298400 0.1491 54 chr1 25303800 25304400 0.1804 49 chr1 25311900 25312500 0.1363 47 chr1 25316700 25317900 0 42 chr1 25322700 25329000 0 56 chr1 25335000 25337700 0.0015 58 chr1 25362600 25368600 0 62 chr1 25374600 25375200 0.0553 54 chr1 25380000 25380300 0.1413 55 chr1 25388100 25388400 0.0911 47 chr1 25395000 25396200 0.2648 48 chr1 25397700 25398600 0.2648 48 chr1 25400400 25400700 0.5652 46 chr1 25419600 25419900 0.3566 47 chr1 25508400 25512000 0.1838 123 chr1 26163300 26163600 0.1266 39 chr1 26597100 26597400 0.2336 69 chr1 26640300 26641200 0.0034 67 chr1 26646900 26647500 0.0017 66 chr1 26817300 26819100 0.4183 57 chr1 27064500 27065700 0.0868 81 chr1 27288600 27288900 0.3266 66 chr1 27642600 27642900 0.4499 57 chr1 27852300 27855000 0.0671 75 chr1 27916800 27917100 0.6937 23 chr1 27921300 27921600 0.5853 31 chr1 28095300 28095900 0.3064 51 chr1 28695600 28695900 0.379 57 chr1 29657400 29657700 0.5369 51 chr1 29723400 29723700 0.4786 150 chr1 30375600 30375900 0.6195 36 chr1 30384000 30384300 0.491 59 chr1 30438600 30444000 0.0665 109 chr1 30495600 30495900 0.4704 54 chr1 30498600 30498900 0.096 84 chr1 30567900 30568800 0.011 182 chr1 30577200 30577500 0.4454 62 chr1 30578700 30579300 0.0551 71 chr1 30655200 30655800 0.5189 124 chr1 30773100 30773400 0.6196 58 chr1 30935700 30936300 0.1235 68 chr1 30949200 30949500 0.1536 79 chr1 31431600 31432200 0.4337 516 chr1 32973600 32974800 0.3256 61 chr1 32999700 33000000 0.4026 57 chr1 33051000 33053400 0.0135 70 chr1 33216000 33216300 0.4549 35 chr1 33833400 33834900 0.0253 56 chr1 34084500 34084800 0.3369 94 chr1 34095000 34095300 0.0234 194 chr1 34096500 34098300 0.0234 194 chr1 34252200 34256700 0.0393 93 chr1 34566300 34572000 0 101 chr1 34956900 34957200 0.3072 73 chr1 35260200 35260500 0.2316 39 chr1 37211400 37211700 0.3942 71 chr1 37896000 37896300 0.5053 73 chr1 38666700 38667300 0.1822 126 chr1 38922300 38922600 0.3326 18 chr1 39234000 39234300 0.4343 75 chr1 39264600 39264900 0.5031 39 chr1 39413400 39413700 0.4493 37 chr1 39495300 39496500 0.3206 70 chr1 39511200 39516300 0 110 chr1 39518100 39518700 0.0919 66 chr1 39520200 39522000 0.0408 78 chr1 39764700 39765900 0.1933 85 chr1 39767400 39768000 0.2489 78 chr1 39769800 39774900 0 87 chr1 39784200 39785400 0.1394 63 chr1 39999600 39999900 0.1148 56 chr1 40365900 40370700 0 136 chr1 40494300 40494600 0.4331 34 chr1 40496700 40498200 0.1811 41 chr1 41207700 41208300 0.0326 65 chr1 41545500 41545800 0.6939 70 chr1 41552400 41552700 0.3537 45 chr1 41854500 41855100 0.0947 97 chr1 41989800 41993100 0.1619 84 chr1 42064800 42065100 0.1743 69 chr1 42094200 42094800 0.202 66 chr1 42167100 42167400 0.5131 41 chr1 42233100 42234000 0.1903 80 chr1 42252900 42254700 0.258 76 chr1 42277500 42277800 0.2148 36 chr1 42494400 42495300 0.0235 166 chr1 42708900 42709200 0.2458 185 chr1 42750900 42751500 0.0401 50 chr1 43114800 43115100 0.1024 92 chr1 43116300 43117800 0.1024 92 chr1 43502700 43503000 0.3196 55 chr1 44140200 44140500 0.5894 44 chr1 44816700 44817000 0.5695 29 chr1 45223500 45223800 0.4133 61 chr1 45497700 45498300 0.5148 62 chr1 45709800 45711000 0.1354 85 chr1 45725100 45726000 0.0421 87 chr1 45741600 45741900 0.1112 25 chr1 45803700 45804000 0.3598 37 chr1 45900600 45900900 0.6763 34 chr1 46014900 46015200 0.308 78 chr1 46240200 46242900 0.1027 100 chr1 46504200 46505700 0.0383 90 chr1 46773900 46774200 0.4124 50 chr1 46808400 46809000 0.534 67 chr1 46874700 46875000 0.1614 58 chr1 46876800 46877100 0.1271 51 chr1 46878900 46879200 0.5075 68 chr1 46882800 46883100 0.3628 61 chr1 46886400 46887600 0 69 chr1 46891800 46897800 0 97 chr1 47069700 47075700 0 83 chr1 47078400 47078700 0.3607 49 chr1 47080200 47081700 0 62 chr1 47084700 47085000 0.4175 56 chr1 47088600 47088900 0.285 55 chr1 47090700 47091300 0.167 70 chr1 47092800 47093400 0.2563 62 chr1 47274300 47274600 0.3407 39 chr1 47614500 47614800 0.5178 60 chr1 47874300 47874600 0.2714 53 chr1 47958000 47958600 0.5521 64 chr1 48150300 48156000 0 148 chr1 48381900 48384000 0.0287 99 chr1 49006800 49007400 0.1349 70 chr1 49010100 49011300 0.1349 70 chr1 49095600 49095900 0.3535 65 chr1 49259400 49260000 0.2722 80 chr1 49261500 49262100 0.2722 80 chr1 49283700 49284000 0.1117 102 chr1 49287000 49288200 0.0645 79 chr1 49350300 49350600 0.4954 69 chr1 49510200 49511100 0.4267 69 chr1 49622400 49622700 0.3134 63 chr1 49800600 49800900 0.1283 52 chr1 49875300 49876800 0.0302 78 chr1 49878600 49880100 0.0602 95 chr1 49881600 49882500 0.344 73 chr1 50864100 50865600 0.3397 63 chr1 50918400 50919000 0.0081 89 chr1 51478500 51478800 0.4198 56 chr1 51918900 51919200 0.4125 60 chr1 52172700 52173000 0.4032 76 chr1 52636200 52636500 0.4439 46 chr1 52797300 52797600 0.1032 134 chr1 53283600 53284200 0.0752 65 chr1 53713200 53713500 0.2647 120 chr1 54025800 54026100 0.3611 45 chr1 54234000 54234300 0.5308 67 chr1 54440700 54441000 0.444 46 chr1 54561000 54563100 0.2505 103 chr1 55025100 55025400 0.5369 74 chr1 55497000 55497300 0.4246 44 chr1 55666800 55667100 0.1833 21 chr1 55941900 55942500 0.1605 65 chr1 56365500 56369400 0 135 chr1 57426900 57427200 0.486 54 chr1 57639000 57639300 0.545 18 chr1 58115100 58116000 0.0732 84 chr1 58128600 58131300 0.1765 91 chr1 58254600 58255200 0.0951 82 chr1 58269600 58274700 0.0006 87 chr1 58374000 58379100 0.0548 82 chr1 58582500 58583400 0.1672 81 chr1 58593900 58594200 0.3137 38 chr1 58729500 58729800 0.6643 39 chr1 58888500 58888800 0.4659 53 chr1 58960200 58960500 0.1892 121 chr1 59253900 59254500 0.1297 76 chr1 59324400 59324700 0.4948 64 chr1 59647800 59652600 0.156 69 chr1 60003000 60003300 0.2314 73 chr1 60209700 60210600 0.2012 83 chr1 60218700 60219000 0.2739 67 chr1 60278700 60279300 0.1995 87 chr1 60380700 60381300 0.2317 69 chr1 60405000 60405300 0.6019 73 chr1 60466800 60467100 0.3263 73 chr1 60492600 60494700 0.2107 90 chr1 60550800 60551400 0.0955 109 chr1 60643800 60645600 0.1929 88 chr1 60776100 60776700 0.3228 62 chr1 60778800 60779400 0.2439 56 chr1 61713900 61714200 0.2425 37 chr1 61925100 61925400 0.2659 103 chr1 62874000 62874300 0.3386 53 chr1 63239700 63242400 0.0028 102 chr1 63473400 63474600 0.3256 99 chr1 63926400 63927600 0.0432 56 chr1 64200600 64200900 0.3523 74 chr1 64276500 64278600 0.3976 86 chr1 64373100 64373700 0 68 chr1 64415400 64416900 0.4498 59 chr1 64797900 64798500 0.0889 106 chr1 65226900 65228400 0.1824 82 chr1 65302500 65302800 0.4873 41 chr1 65450400 65450700 0.2497 80 chr1 65452200 65452800 0.2497 80 chr1 65544900 65546100 0.2673 93 chr1 65558400 65564400 0 94 chr1 65671500 65672400 0.276 68 chr1 65778000 65778600 0.0289 74 chr1 65875200 65875800 0.3251 81 chr1 65924100 65924400 0.3232 46 chr1 66104400 66105000 0.1789 95 chr1 66338700 66339000 0.5931 62 chr1 66484800 66486600 0.3607 93 chr1 66736500 66736800 0.6285 24 chr1 66785400 66786000 0.2839 75 chr1 66805500 66805800 0.2601 70 chr1 66823500 66824400 0.2397 67 chr1 67079100 67084800 0 91 chr1 67158900 67159200 0.1275 56 chr1 67342800 67343100 0.361 71 chr1 67362300 67362600 0.3591 60 chr1 67548000 67548300 0.3189 100 chr1 67550400 67551000 0.3189 100 chr1 67784100 67784400 0.3762 49 chr1 68734200 68739600 0 110 chr1 68878800 68879700 0.2492 74 chr1 68880900 68881200 0.2492 74 chr1 68924400 68926200 0.324 77 chr1 68996100 68996400 0.4413 63 chr1 69115200 69118500 0.1179 90 chr1 69119700 69120000 0.1179 90 chr1 69212100 69212400 0.2961 38 chr1 69265800 69266100 0.5749 40 chr1 69341400 69341700 0.4873 20 chr1 69447600 69448200 0.4288 82 chr1 69462000 69462300 0.3779 51 chr1 69526500 69526800 0.6472 22 chr1 69561600 69561900 0.3612 50 chr1 69578400 69578700 0.514 65 chr1 69677100 69677400 0.6831 37 chr1 69883800 69885900 0.0895 78 chr1 69887100 69887400 0.1147 82 chr1 69908700 69909000 0.6008 52 chr1 69926100 69926400 0.3248 43 chr1 69995700 69996300 0.4518 80 chr1 69997500 69997800 0.4518 80 chr1 70098900 70099500 0.139 82 chr1 70596000 70596600 0.1902 100 chr1 70599300 70599900 0.1902 100 chr1 70646700 70647600 0.0059 26 chr1 70814100 70814700 0.4068 50 chr1 71275500 71275800 0.5551 27 chr1 71513700 71519700 0 114 chr1 71602200 71602500 0.4987 27 chr1 71888400 71894400 0 122 chr1 71928000 71928300 0.6592 35 chr1 71942400 71942700 0.2622 19 chr1 72025800 72026100 0.4799 60 chr1 72900900 72901500 0.3049 86 chr1 72902700 72903000 0.3049 86 chr1 72904500 72904800 0.5028 34 chr1 73193700 73194900 0.0125 112 chr1 73287900 73288200 0.239 19 chr1 73471200 73471500 0.3428 90 chr1 74446200 74450400 0.0093 104 chr1 74500500 74500800 0.494 36 chr1 74518800 74519400 0.081 45 chr1 74533500 74533800 0.5324 66 chr1 74758500 74758800 0.3686 80 chr1 74787900 74788200 0.2648 66 chr1 74882700 74883000 0.3756 66 chr1 75107100 75107400 0.2729 66 chr1 75110400 75110700 0.5052 72 chr1 75323100 75323400 0.3512 88 chr1 75377100 75384900 0 125 chr1 75387300 75388200 0 125 chr1 75536700 75537000 0.2144 53 chr1 75702900 75703200 0.5149 66 chr1 75839700 75840000 0.1895 72 chr1 75885900 75886200 0.095 25 chr1 76111500 76111800 0.1833 78 chr1 76458000 76458300 0.29 58 chr1 76914900 76915200 0.2658 63 chr1 76999800 77004900 0.1473 72 chr1 77810100 77810400 0.2458 65 chr1 77869200 77870700 0.1259 79 chr1 77992200 77992500 0.4676 45 chr1 78243600 78245700 0 95 chr1 78282300 78283200 0.2715 57 chr1 78845400 78851100 0.0015 114 chr1 79130700 79131000 0.6011 52 chr1 79170000 79170300 0.4194 74 chr1 79512600 79512900 0.522 73 chr1 79541700 79542000 0.3503 57 chr1 79571700 79572000 0.2215 28 chr1 79648500 79648800 0.4477 33 chr1 79939500 79943700 0.1225 81 chr1 80132700 80133000 0.2614 33 chr1 80134200 80138100 0.13 79 chr1 80394600 80394900 0.3493 70 chr1 80406900 80407200 0.4277 26 chr1 80409000 80409300 0.5048 51 chr1 80734200 80734500 0.4462 55 chr1 80939400 80944800 0 105 chr1 80946300 80946900 0.1882 24 chr1 80948400 80948700 0.5207 12 chr1 80949900 80951100 0.0219 59 chr1 81222000 81222300 0.642 52 chr1 81734400 81735300 0.3038 59 chr1 82104600 82104900 0.3332 80 chr1 82131300 82135200 0.2059 72 chr1 82250700 82255800 0.0333 97 chr1 82497600 82497900 0.5481 27 chr1 82576800 82577400 0.485 47 chr1 82584300 82584600 0.3378 59 chr1 82660200 82662000 0 91 chr1 83134500 83134800 0.3362 68 chr1 83143800 83144100 0.6694 64 chr1 83145900 83146200 0.3896 57 chr1 83150100 83150400 0.4436 52 chr1 83161200 83161500 0.2608 42 chr1 83169600 83169900 0.2557 113 chr1 83177700 83178000 0.3069 52 chr1 83184000 83184300 0.1363 78 chr1 83185800 83187300 0.1363 78 chr1 83195700 83196000 0.4019 56 chr1 83201400 83201700 0.2699 66 chr1 83208000 83208300 0.1703 46 chr1 83216700 83217000 0.3904 62 chr1 83230500 83231100 0.1165 100 chr1 83234400 83234700 0.4004 29 chr1 83261700 83262000 0.0975 87 chr1 83266200 83268600 0.0975 87 chr1 83272200 83272500 0.4429 71 chr1 83275500 83276400 0.398 60 chr1 83281200 83281500 0.3683 64 chr1 83303400 83304000 0.0442 57 chr1 83325300 83325900 0.3289 46 chr1 83339400 83341800 0.0207 89 chr1 83350800 83355000 0.0666 69 chr1 83361600 83361900 0.5447 63 chr1 83383200 83383500 0.5872 61 chr1 83388900 83390400 0.3693 38 chr1 83392800 83393400 0.1258 34 chr1 83406900 83407200 0.3015 56 chr1 83412900 83413200 0.3006 57 chr1 83414400 83414700 0.3006 57 chr1 83417400 83417700 0.2211 72 chr1 83424600 83425200 0.4267 59 chr1 83436000 83436300 0.4221 55 chr1 83440200 83440800 0.4107 59 chr1 83481300 83481600 0.5567 67 chr1 83486400 83486700 0.4791 61 chr1 83881500 83882100 0.3067 84 chr1 84052200 84058500 0 92 chr1 84229200 84229500 0.1674 87 chr1 84230700 84231000 0.1674 87 chr1 84233400 84234000 0.0408 126 chr1 84993600 84993900 0.4937 51 chr1 85026300 85026600 0.5804 90 chr1 85187400 85187700 0.3239 69 chr1 85515300 85517400 0.2094 62 chr1 85521900 85522500 0.0134 63 chr1 85526700 85527000 0.4162 50 chr1 85528800 85529100 0.4162 50 chr1 85531500 85531800 0.4245 66 chr1 85535100 85535700 0.0181 62 chr1 85748700 85754400 0 148 chr1 85771800 85772100 0.2511 59 chr1 85813500 85813800 0.3903 46 chr1 85825500 85826700 0.228 99 chr1 85828500 85829100 0.228 99 chr1 85927500 85933200 0 117 chr1 85940100 85940400 0.1448 27 chr1 85948200 85948500 0.4529 46 chr1 86215200 86217300 0.0235 57 chr1 86242800 86243700 0.3194 78 chr1 86244900 86245200 0.3194 78 chr1 86275200 86276100 0.0005 66 chr1 86467500 86467800 0.399 83 chr1 86529600 86529900 0.3975 54 chr1 86679300 86685000 0 111 chr1 86816400 86816700 0.2211 89 chr1 87888900 87889200 0.5377 47 chr1 87895200 87895500 0.3841 69 chr1 88342500 88347000 0.0481 82 chr1 88770600 88770900 0.6309 66 chr1 89388900 89389200 0.3913 27 chr1 89412600 89413200 0.0016 89 chr1 89414400 89418000 0.0016 89 chr1 89561100 89562000 0.0317 76 chr1 89705100 89705400 0.4101 76 chr1 89747100 89752800 0.0414 89 chr1 89797200 89797800 0.1077 53 chr1 89961300 89961600 0.3678 91 chr1 90057900 90060900 0.3026 93 chr1 90146400 90146700 0.3642 77 chr1 90214800 90215700 0.3873 81 chr1 90216900 90217200 0.3873 81 chr1 91159200 91159500 0.4709 13 chr1 91211700 91216800 0.0107 104 chr1 91293600 91293900 0.4107 67 chr1 91301400 91302000 0.0469 49 chr1 91371300 91371600 0.0807 50 chr1 91387200 91387800 0.035 950 chr1 91448700 91449000 0.3722 15 chr1 91668600 91668900 0.5952 25 chr1 93276900 93277800 0.0049 74 chr1 93790800 93796200 0.0157 98 chr1 94493400 94493700 0.4017 92 chr1 94507800 94508700 0.3825 79 chr1 95292300 95295900 0.0647 100 chr1 96052500 96053100 0.1288 52 chr1 96142200 96142500 0.4575 66 chr1 96173100 96174000 0.2831 96 chr1 96241200 96243000 0.2236 113 chr1 96245400 96245700 0.2236 113 chr1 96381300 96381600 0.3786 73 chr1 96434400 96434700 0.5105 77 chr1 96606600 96608700 0.0775 84 chr1 96762000 96762300 0.3179 55 chr1 96853500 96854100 0.2118 106 chr1 96884400 96884700 0.3921 70 chr1 97156800 97157100 0.5587 53 chr1 97162800 97163100 0.5496 66 chr1 97318800 97322100 0.0018 85 chr1 97556400 97557000 0.3921 91 chr1 97971600 97971900 0.4046 58 chr1 98511900 98512200 0.1751 39 chr1 98543100 98543400 0.4647 72 chr1 98591100 98591700 0.4295 97 chr1 98614200 98614500 0.2721 58 chr1 98672700 98673000 0.4624 54 chr1 98694000 98694300 0.5684 57 chr1 98983200 98983800 0.1537 63 chr1 99213600 99214200 0.0136 84 chr1 99388500 99390900 0.0085 93 chr1 100632600 100632900 0.3546 63 chr1 100923000 100923300 0.528 28 chr1 101628900 101629500 0.186 58 chr1 101636700 101637000 0.6079 44 chr1 101669100 101669400 0.3387 61 chr1 102073500 102074100 0.2643 95 chr1 102341700 102342000 0.2874 70 chr1 102542100 102542400 0.5904 28 chr1 102630600 102630900 0.2767 41 chr1 102807300 102807600 0.1934 55 chr1 102928800 102929100 0.4876 60 chr1 102930900 102933300 0.2299 67 chr1 103019700 103020900 0.1192 58 chr1 103277700 103278000 0.4286 39 chr1 103356000 103356300 0.065 65 chr1 103380000 103380600 0.3037 51 chr1 103594500 103610700 0 86 chr1 103618800 103623000 0 120 chr1 103624200 103760400 0 120 chr1 103922700 103924500 0.1691 103 chr1 104035500 104036700 0.0083 116 chr1 104127000 104127300 0.0189 47 chr1 104218500 104218800 0.4829 57 chr1 104660700 104661000 0.3489 60 chr1 104770500 104775900 0 95 chr1 104844000 104849100 0 87 chr1 104885700 104886000 0.0026 12 chr1 105189900 105190200 0.486 58 chr1 105214200 105216300 0.0011 57 chr1 105575400 105576000 0.0908 94 chr1 105658800 105660900 0.0251 131 chr1 105822600 105823200 0.3636 79 chr1 105948300 105948600 0.291 68 chr1 106089900 106090200 0.2428 184 chr1 106284600 106285200 0.3692 65 chr1 107993100 107993400 0.3589 54 chr1 108162900 108165000 0.292 103 chr1 108167100 108167400 0.4108 77 chr1 108223800 108310500 0 98 chr1 108374100 108470400 0 140 chr1 108482100 108483600 0.238 50 chr1 108489000 108489300 0.4398 89 chr1 108576300 108579600 0 71 chr1 108675900 108676200 0.6127 71 chr1 108933000 108933600 0.5283 60 chr1 109055100 109055400 0.0225 35 chr1 109674900 109675500 0.1752 56 chr1 109680600 109684200 0 66 chr1 109693200 109694100 0.043 45 chr1 109698900 109702500 0 56 chr1 109744200 109744800 0.2935 78 chr1 109842300 109843800 0.1528 96 chr1 110079900 110080200 0.5148 106 chr1 110808300 110808900 0.35 65 chr1 110821200 110821800 0.4787 62 chr1 110845800 110846400 0.0597 71 chr1 111059400 111059700 0.3694 71 chr1 111234000 111234300 0.6095 57 chr1 111337800 111338100 0.3924 48 chr1 111339300 111339600 0.2432 86 chr1 111529500 111529800 0.414 75 chr1 111544800 111545100 0.1185 104 chr1 111800100 111800700 0.0574 56 chr1 112022700 112023000 0.4636 45 chr1 112104900 112105200 0.2437 15 chr1 112155300 112155900 0.0432 72 chr1 112158300 112159500 0.0432 72 chr1 112203600 112203900 0.2977 86 chr1 112216500 112216800 0.394 54 chr1 112226100 112227300 0.1008 100 chr1 112293300 112295100 0.007 48 chr1 112340700 112341000 0.4179 99 chr1 112639800 112640400 0.5033 104 chr1 112773600 112774800 0.0854 55 chr1 112897800 112899300 0.0505 70 chr1 113068800 113071200 0.0582 92 chr1 113344200 113346300 0.0688 81 chr1 113360700 113362800 0.0147 129 chr1 113415900 113416200 0.524 47 chr1 113497200 113503200 0 132 chr1 113509500 113509800 0.0614 69 chr1 113599500 113599800 0.344 51 chr1 113601600 113601900 0.494 62 chr1 113668500 113668800 0.5697 47 chr1 114804000 114804300 0.6811 60 chr1 115016700 115017000 0.4238 75 chr1 115148700 115153800 0.0435 140 chr1 115254300 115254600 0.2562 27 chr1 115602300 115602600 0.5481 63 chr1 115626000 115627500 0.1056 100 chr1 116136000 116137200 0.0484 83 chr1 116214600 116214900 0.4741 63 chr1 116718000 116719800 0 134 chr1 117429600 117431100 0.0103 78 chr1 118283700 118284000 0.405 69 chr1 118286400 118286700 0.3423 65 chr1 118422900 118423200 0.4286 53 chr1 118551300 118551600 0.2847 84 chr1 118571400 118571700 0.5737 55 chr1 118575900 118576500 0.1012 69 chr1 118577700 118578000 0.1012 69 chr1 118721700 118722000 0.3976 60 chr1 118836600 118836900 0.4005 88 chr1 118852500 118858200 0 122 chr1 119016300 119016600 0.5471 63 chr1 119023200 119023500 0.4955 78 chr1 119059200 119059500 0.4588 77 chr1 119561700 119562000 0.5094 67 chr1 119599200 119599500 0.2114 46 chr1 119607600 119607900 0.3622 44 chr1 119989800 119995500 0 70 chr1 119998800 119999700 0.1029 81 chr1 120004200 120006600 0 69 chr1 120007800 120008700 0 69 chr1 120012000 120013200 0 81 chr1 120014400 120036900 0 81 chr1 120038400 120038700 0 81 chr1 120039900 120042600 0 101 chr1 120043800 120062700 0 101 chr1 120063900 120064500 0 101 chr1 120066600 120073500 0.0076 91 chr1 120074700 120088200 0 115 chr1 120089700 120091800 0 115 chr1 120093600 120094800 0.0659 70 chr1 120096600 120097200 0.0659 70 chr1 120099000 120100500 0.0801 65 chr1 120103500 120104100 0.0156 78 chr1 120106200 120107100 0.0156 78 chr1 120110100 120112800 0.0942 73 chr1 120117300 120117600 0.5594 59 chr1 120118800 120120900 0.2222 59 chr1 120122700 120123000 0.5771 55 chr1 120125100 120127500 0 70 chr1 120131700 120132000 0.4508 60 chr1 120138000 120139500 0.307 77 chr1 120152100 120152400 0.2637 68 chr1 120154500 120156600 0.2637 68 chr1 120158400 120159000 0.0749 57 chr1 120162000 120162600 0.1222 74 chr1 120164100 120164400 0.184 49 chr1 120169500 120170100 0 88 chr1 120171300 120175500 0 88 chr1 120180300 120180600 0.4179 65 chr1 120181800 120182400 0.0917 71 chr1 120183900 120189600 0 108 chr1 120192000 120198600 0 108 chr1 120199800 120218100 0 108 chr1 120220200 120321900 0 96 chr1 120323400 120345600 0 96 chr1 120346800 120365100 0 71 chr1 120366900 120367200 0.4071 50 chr1 120368400 120369000 0.0155 68 chr1 120370800 120373800 0.0155 68 chr1 120375300 120377700 0.0155 68 chr1 120380700 120383400 0.0043 76 chr1 120384600 120392700 0.0043 76 chr1 120394200 120408900 0.0043 76 chr1 120410700 120414300 0 77 chr1 120416100 120418500 0.1528 55 chr1 120419700 120420300 0.044 77 chr1 120421500 120421800 0.044 77 chr1 120423600 120427800 0.044 77 chr1 120429600 120430500 0.245 93 chr1 120432000 120432900 0.245 93 chr1 120434700 120435600 0 114 chr1 120436800 120449400 0 114 chr1 120450900 120453900 0 101 chr1 120455400 120455700 0 101 chr1 120456900 120459600 0 101 chr1 120461100 120472200 0 155 chr1 120474300 120474900 0.5486 61 chr1 120478800 120479400 0.1279 56 chr1 120483000 120483900 0.3342 67 chr1 120490800 120491100 0.4503 53 chr1 120493800 120497400 0.1489 76 chr1 120499200 120500700 0.0006 86 chr1 120501900 120511200 0.0006 86 chr1 120512700 120521100 0 80 chr1 120522900 120525300 0.2087 69 chr1 120526800 120534000 0.0004 75 chr1 120536100 120539100 0 105 chr1 120540600 120542700 0 105 chr1 120544500 120551100 0 105 chr1 120552900 120554400 0 105 chr1 120555600 120556200 0 105 chr1 120557400 120558300 0 105 chr1 120559500 120560700 0 105 chr1 120563400 120572400 0 105 chr1 120574500 120591300 0 105 chr1 120592500 120670800 0 105 chr1 120672000 120678900 0 90 chr1 120680100 120705300 0 90 chr1 120706800 120723000 0 89 chr1 120724800 120729600 0 89 chr1 120730800 120753900 0 89 chr1 120755100 120783600 0 89 chr1 120785400 120792600 0 73 chr1 120793800 120804300 0 73 chr1 120807600 120809100 0.2187 166 chr1 120812100 120818400 0 326 chr1 120819900 120821700 0 326 chr1 120823800 120843600 0 326 chr1 120845100 120846900 0.0282 67 chr1 120848700 120849000 0.0282 67 chr1 120852000 120852300 0.1357 63 chr1 120853500 120854700 0.1357 63 chr1 120855900 120856800 0.4699 51 chr1 120858300 120858900 0.0196 76 chr1 120860100 120875100 0.0196 76 chr1 120876300 120878100 0.0196 76 chr1 120885900 120887400 0.0421 50 chr1 120890100 120891600 0.0071 71 chr1 120892800 120893100 0.3773 27 chr1 120894300 120896100 0.035 59 chr1 120899100 120900300 0.2933 62 chr1 120911700 120920100 0 92 chr1 120922800 120934800 0 94 chr1 120936000 120938700 0.208 87 chr1 120940500 120940800 0.208 87 chr1 120942900 120944100 0.2953 68 chr1 120945900 120946500 0.0478 60 chr1 120948900 120949200 0.0849 60 chr1 120951000 120951900 0.4761 58 chr1 120959400 120959700 0.6026 30 chr1 120961500 120962100 0.3906 63 chr1 120964200 120967200 0.0662 55 chr1 120971400 120972900 0.1568 68 chr1 120974400 120975000 0.1568 68 chr1 120981300 120981600 0.5035 72 chr1 120983400 121005300 0.0034 77 chr1 121010100 121017300 0 91 chr1 121019400 121020600 0 91 chr1 121022100 121027800 0 91 chr1 121029000 121032300 0.0648 78 chr1 121036500 121038000 0.0458 65 chr1 121040100 121041300 0.2382 72 chr1 121042500 121044600 0.2382 72 chr1 121046100 121046400 0.3535 42 chr1 121049100 121049400 0.1196 78 chr1 121058700 121061700 0.0023 92 chr1 121062900 121066200 0.0023 92 chr1 121067400 121079100 0.0023 92 chr1 121082700 121084800 0.0916 65 chr1 121086600 121086900 0.0916 65 chr1 121088100 121089900 0 57 chr1 121092000 121092600 0.047 62 chr1 121095900 121096800 0.2753 69 chr1 121099200 121104300 0.0352 63 chr1 121107600 121116600 0.0006 83 chr1 121119600 121119900 0.4169 61 chr1 121122600 121125900 0 88 chr1 121128300 121129200 0 88 chr1 121130400 121131600 0 88 chr1 121133700 121136100 0 88 chr1 121138200 121159200 0 88 chr1 121160400 121160700 0 88 chr1 121161900 121162500 0 88 chr1 121164600 121174200 0 88 chr1 121175400 121191000 0 68 chr1 121192800 121201500 0 73 chr1 121202700 121206900 0 73 chr1 121209000 121221300 0 79 chr1 121223100 121238100 0 85 chr1 121239300 121254600 0 85 chr1 121255800 121262700 0 85 chr1 121264200 121295100 0 85 chr1 121296300 121314300 0 107 chr1 121315500 121366500 0 131 chr1 121367700 121377900 0 131 chr1 121379400 121394100 0 131 chr1 121395900 121396200 0 131 chr1 121397700 121398600 0 131 chr1 121402500 121403700 0.3974 90 chr1 121532400 121538100 0 125 chr1 121604400 121615800 0 46 chr1 121619400 121685700 0 426 chr1 121687500 121689000 0 426 chr1 121692600 121692900 0.1119 53 chr1 121694700 121698900 0 55 chr1 121700100 121700700 0 55 chr1 121701900 121710000 0 62 chr1 121711200 121718100 0 61 chr1 121719300 121722000 0 26 chr1 121724400 121727400 0 27 chr1 121731000 121735800 0 129 chr1 121737000 121737600 0 129 chr1 121738800 121739400 0 129 chr1 121740900 121756800 0 2648 chr1 121758000 121758300 0.0599 16 chr1 121760400 121788000 0 3380 chr1 121790100 121791600 0 131 chr1 121793400 121796400 0 131 chr1 121797600 121798200 0 130 chr1 121799400 121804800 0 130 chr1 121806000 121806300 0 207 chr1 121808400 121809900 0 207 chr1 121811100 121843200 0 207 chr1 121845000 121846800 0 207 chr1 121848300 121863000 0 128 chr1 121865100 121869300 0 74 chr1 121870500 121879500 0 160 chr1 121880700 121882200 0 160 chr1 121883700 121885200 0 101 chr1 121886400 121893000 0 297 chr1 121894500 121898100 0 81 chr1 121899600 121901100 0 25 chr1 121903500 121909200 0 142 chr1 121911600 121911900 0 15 chr1 121914300 121924200 0 144 chr1 121925400 121929900 0 102 chr1 121931700 121932000 0 13 chr1 121938300 121939500 0.3254 46 chr1 121940700 121942800 0 66 chr1 121944600 121946100 0 31 chr1 121948500 121950000 0 95 chr1 121951800 121952700 0 34 chr1 121953900 121957800 0 40 chr1 121959300 121965300 0 84 chr1 121966800 121968900 0 42 chr1 121970100 121973100 0 404 chr1 122026800 122027100 0 13 chr1 122032800 122047200 0 106 chr1 122050500 122050800 0 197 chr1 122053500 122055000 0 197 chr1 122056200 122056800 0 35 chr1 122058600 122063700 0 60 chr1 122064900 122070600 0 415 chr1 122073000 122085600 0 116 chr1 122087400 122089500 0 130 chr1 122090700 122098800 0 130 chr1 122101500 122102100 0.1373 20 chr1 122105100 122109000 0 97 chr1 122111400 122124300 0 104 chr1 122126100 122133300 0 658 chr1 122134500 122141700 0 150 chr1 122143800 122159700 0 118 chr1 122161800 122169600 0 412 chr1 122172000 122175000 0 412 chr1 122176200 122176800 0 412 chr1 122178000 122184300 0 412 chr1 122185800 122186400 0 412 chr1 122187600 122189100 0 22 chr1 122191200 122195400 0 82 chr1 122196600 122203200 0 111 chr1 122204400 122204700 0 111 chr1 122207100 122209500 0 111 chr1 122211000 122214900 0 111 chr1 122216700 122219100 0 37 chr1 122222100 122222700 0.3979 165 chr1 122224200 122225400 0 200 chr1 122226600 122236500 0 200 chr1 122238000 122449800 0 3359 chr1 122452200 122495700 0 3359 chr1 122497500 122555100 0 3359 chr1 122556300 122573700 0 3359 chr1 122575200 122655000 0 2578 chr1 122656500 122658900 0 2578 chr1 122660100 122712600 0 1708 chr1 122713800 122739900 0 2814 chr1 122741100 122874900 0 3523 chr1 122876700 122921100 0 3575 chr1 122922900 123066300 0 5163 chr1 123067800 123228000 0 5163 chr1 123229500 123237900 0 1045 chr1 123239100 123373200 0 2092 chr1 123374700 123537900 0 4862 chr1 123539100 123622200 0 3931 chr1 123623400 123644100 0 3931 chr1 123645300 123652800 0 1009 chr1 123655200 123675900 0 5424 chr1 123677100 123726600 0 5424 chr1 123727800 123756900 0 5424 chr1 123758400 123801600 0 6466 chr1 123803400 123920100 0 5034 chr1 123921300 123963600 0 5034 chr1 123964800 124045200 0 5034 chr1 124046400 124085700 0 5034 chr1 124087200 124111200 0 2235 chr1 124112400 124138200 0 2235 chr1 124139400 124142400 0 2235 chr1 124143600 124231800 0 8877 chr1 124233000 124468200 0 8877 chr1 124469400 124779300 0 8877 chr1 124780800 124788900 0 2430 chr1 124791900 124792200 0.2937 12 chr1 124793400 124801800 0 170 chr1 124803600 124806300 0 788 chr1 124807500 124820100 0 672 chr1 124821600 124834800 0 672 chr1 124836000 124848900 0 672 chr1 124850100 124898400 0 672 chr1 124899900 124914600 0 515 chr1 124915800 124928700 0 672 chr1 124929900 124940700 0 212 chr1 125019000 125019300 0.4042 66 chr1 125029800 125030100 0.6727 118 chr1 125032200 125032500 0.6702 81 chr1 125034600 125034900 0.6459 102 chr1 125070300 125070600 0.6686 182 chr1 125071800 125072100 0.6874 132 chr1 125094000 125094300 0.6105 50 chr1 125099700 125100000 0.4539 43 chr1 125102700 125103300 0.0666 68 chr1 125105400 125106000 0.556 189 chr1 125113800 125116200 0.2726 273 chr1 125117400 125118300 0.5081 172 chr1 125127300 125127600 0.5745 120 chr1 125139000 125139300 0.2741 106 chr1 125140800 125141100 0.6037 69 chr1 125166900 125168100 0.3706 2420 chr1 125169600 125169900 0.5701 182 chr1 125171100 125171400 0.0748 228 chr1 125173500 125184000 0.0222 36986 chr1 143184600 143208600 0 30628 chr1 143210700 143276100 0 36167 chr1 143278800 143280600 0.2277 76 chr1 143282700 143286900 0 146 chr1 143288700 143310000 0 146 chr1 143312100 143472300 0 177 chr1 143473500 143496600 0 177 chr1 143499300 143502000 0.0072 127 chr1 143503800 143504100 0 128 chr1 143505600 143530200 0 128 chr1 143531400 143535300 0 128 chr1 143558400 143562600 0.1717 97 chr1 143637600 143639400 0.1444 78 chr1 143703600 143704200 0.1677 66 chr1 143728200 143730600 0.0254 67 chr1 143737800 143739300 0.0001 79 chr1 143740500 143741700 0.0001 79 chr1 143744100 143744700 0.3958 55 chr1 143752500 143752800 0.2685 81 chr1 143766900 143774700 0 70 chr1 143775900 143803800 0 92 chr1 143805300 143830200 0 88 chr1 143833800 143835300 0 88 chr1 143840100 143840400 0.4469 61 chr1 143842200 143842800 0.1864 64 chr1 143846700 143847900 0 60 chr1 143853600 143856300 0.0317 71 chr1 143858700 143861700 0.0014 73 chr1 143863200 143863800 0.0014 73 chr1 143865000 143866500 0.0014 73 chr1 143868000 143868300 0.0014 73 chr1 143869500 143872800 0.0014 73 chr1 143874900 143876100 0 73 chr1 143879400 143880300 0.1272 74 chr1 143883300 143883600 0.4132 56 chr1 143886300 143888100 0.0303 66 chr1 143889300 143889600 0.0015 72 chr1 143891100 143892900 0.0015 72 chr1 143895000 143895600 0.0015 72 chr1 143896800 143898300 0.0015 72 chr1 143899800 143905200 0.0015 72 chr1 143907000 143907300 0.1857 85 chr1 143910000 143910300 0.0016 80 chr1 143915700 143917500 0.0016 80 chr1 143919000 143919300 0.0016 80 chr1 143921400 143922600 0.0016 80 chr1 143923800 143926800 0.0016 80 chr1 143929500 143934900 0.0044 80 chr1 143938800 143986200 0 83 chr1 143988000 144076500 0 101 chr1 144078300 144101400 0 107 chr1 144102600 144103200 0.1806 316 chr1 144104700 144403500 0 423 chr1 144406200 144407400 0 423 chr1 144408600 144411600 0.025 84 chr1 144414600 144414900 0 77 chr1 144416400 144418800 0 77 chr1 144420300 144422700 0 77 chr1 144424500 144427500 0.0884 114 chr1 144429600 144432000 0.0884 114 chr1 144433500 144433800 0.0884 114 chr1 144435600 144436200 0.3835 104 chr1 144441300 144441600 0.574 46 chr1 144446700 144447000 0.0401 88 chr1 144448500 144450300 0.0401 88 chr1 144452400 144454800 0.2519 65 chr1 144456600 144456900 0.5615 56 chr1 144458400 144458700 0.3437 49 chr1 144459900 144460500 0.1037 62 chr1 144462900 144463200 0.1037 62 chr1 144465600 144467100 0.0778 74 chr1 144468600 144469800 0.0778 74 chr1 144471000 144471300 0.0778 74 chr1 144473100 144475500 0 98 chr1 144477600 144483300 0 98 chr1 144484800 144490500 0 98 chr1 144493500 144493800 0 98 chr1 144495600 144495900 0 98 chr1 144497700 144498300 0 98 chr1 144500100 144503700 0.0077 74 chr1 144505200 144510300 0.0077 74 chr1 144511800 144513000 0.1719 73 chr1 144514200 144514500 0.1719 73 chr1 144516000 144516900 0.1719 73 chr1 144519000 144527100 0.01 75 chr1 144528300 144528600 0.01 75 chr1 144530100 144530400 0.01 75 chr1 144534600 144535800 0.1094 59 chr1 144537000 144538500 0.0797 59 chr1 144540900 144541800 0.2766 66 chr1 144544200 144544500 0.2766 66 chr1 144549300 144549600 0.1754 54 chr1 144557400 144561900 0.0426 67 chr1 144568200 144570600 0.001 61 chr1 144572100 144882600 0 174 chr1 144884100 144904800 0 94 chr1 144906600 144911400 0 94 chr1 144912600 144919800 0 94 chr1 144921300 144924600 0 94 chr1 144925800 144930600 0 94 chr1 144931800 144943800 0 94 chr1 144945000 144951600 0 115 chr1 144952800 144954300 0 115 chr1 144955500 144965700 0 115 chr1 144966900 144970500 0 115 chr1 144972000 144974400 0 115 chr1 144976200 144983700 0 115 chr1 144984900 144998400 0 105 chr1 144999600 145005900 0 105 chr1 145007700 145012800 0 105 chr1 145014000 145064100 0 105 chr1 145065300 145079700 0 105 chr1 145081800 145128900 0 96 chr1 145130700 145139100 0 85 chr1 145140900 145155900 0 85 chr1 145157400 145167900 0 85 chr1 145169700 145171800 0 85 chr1 145173300 145188000 0 85 chr1 145190400 145190700 0.2149 67 chr1 145191900 145193100 0.2149 67 chr1 145195500 145203600 0 107 chr1 145204800 145217400 0 107 chr1 145219500 145222200 0 107 chr1 145223700 145224900 0 107 chr1 145226100 145228200 0.0838 78 chr1 145229400 145232100 0.0838 78 chr1 145233300 145237200 0 86 chr1 145239600 145248600 0 86 chr1 145250100 145254900 0 86 chr1 145256400 145258500 0 86 chr1 145259700 145260900 0 81 chr1 145262100 145280100 0 81 chr1 145283100 145283700 0.0278 63 chr1 145284900 145287000 0.0278 63 chr1 145288800 145291200 0.0278 63 chr1 145292400 145393200 0 325 chr1 145395000 145397100 0 325 chr1 145398900 145399800 0.2142 53 chr1 145401000 145402200 0.0593 98 chr1 145405500 145407300 0.1795 70 chr1 145408800 145409700 0 81 chr1 145411800 145414800 0 81 chr1 145416000 145419000 0 81 chr1 145420500 145421100 0 81 chr1 145422300 145424400 0 81 chr1 145431000 145431300 0.49 71 chr1 145433100 145433700 0.163 77 chr1 145437300 145437600 0.3207 61 chr1 145438800 145442100 0.0222 69 chr1 145443300 145445100 0.0222 69 chr1 145446600 145447800 0.1832 67 chr1 145449000 145452600 0.0808 72 chr1 145456200 145460100 0 73 chr1 145462500 145468200 0.147 71 chr1 145469400 145470300 0.2172 72 chr1 145472400 145472700 0.2172 72 chr1 145477500 145482300 0 93 chr1 145483500 145484100 0 93 chr1 145486500 145486800 0 93 chr1 145488300 145488900 0 93 chr1 145490400 145511700 0 93 chr1 145513200 145515600 0 93 chr1 145521600 145522800 0 68 chr1 145527300 145527600 0.0329 71 chr1 145531200 145531500 0.2748 66 chr1 145533900 145534200 0.4552 64 chr1 145536000 145536300 0.4375 52 chr1 145540500 145541100 0.0182 66 chr1 145546500 145548600 0 64 chr1 145550100 145551300 0 64 chr1 145568400 145569000 0.36 66 chr1 145572600 145573500 0.0852 83 chr1 145575600 145575900 0.4914 150 chr1 145577700 145578900 0.2567 133 chr1 145581600 145582200 0.033 79 chr1 145584600 145585200 0.1095 78 chr1 145589700 145590300 0.1279 90 chr1 145607400 145607700 0.5947 61 chr1 145617900 145618800 0.0216 56 chr1 145620300 145620600 0.04 63 chr1 145622100 145622700 0.04 63 chr1 145623900 145625100 0.04 63 chr1 145627800 145628700 0.0039 70 chr1 145630200 145633800 0.0039 70 chr1 145637100 145637400 0.33 54 chr1 145640100 145640700 0.2362 49 chr1 145641900 145642200 0.4552 61 chr1 145643700 145644300 0.0306 77 chr1 145646100 145646400 0.0306 77 chr1 145647900 145648200 0.3352 34 chr1 145651500 145653900 0.107 77 chr1 145657500 145659900 0.1219 74 chr1 145661100 145661700 0.1219 74 chr1 145663800 145666500 0.3281 60 chr1 145669200 145671000 0.2005 71 chr1 145672200 145674000 0.2005 71 chr1 145675200 145675500 0.2589 70 chr1 145677900 145678800 0.0067 55 chr1 145680900 145682400 0.0805 69 chr1 145684500 145685100 0.5182 68 chr1 145809600 145812000 0.0086 53 chr1 145813800 145814100 0.0086 53 chr1 145815600 145819200 0.0075 72 chr1 145820700 145823400 0.0075 72 chr1 145924800 145925400 0.1376 56 chr1 146054700 146055000 0.4078 65 chr1 146057400 146057700 0.5137 103 chr1 146059500 146141700 0 219 chr1 146142900 146185200 0 219 chr1 146186400 146324100 0 219 chr1 146326800 146327400 0.0992 78 chr1 146329800 146335200 0 72 chr1 146337000 146358300 0 94 chr1 146359500 146362200 0 94 chr1 146363400 146365200 0 94 chr1 146367300 146367600 0 94 chr1 146369100 146369700 0 94 chr1 146376000 146376300 0.3228 63 chr1 146379300 146380200 0.3143 50 chr1 146389500 146389800 0.4029 43 chr1 146391900 146393100 0.1956 67 chr1 146395500 146397000 0.176 62 chr1 146398200 146399100 0.176 62 chr1 146402700 146408400 0.0445 83 chr1 146410800 146411100 0.0445 83 chr1 146414100 146414700 0.0188 96 chr1 146416200 146427600 0.0188 96 chr1 146428800 146430600 0.0188 96 chr1 146431800 146432100 0 88 chr1 146433300 146449500 0 88 chr1 146451000 146456700 0 99 chr1 146458200 146462100 0 99 chr1 146463600 146465700 0 99 chr1 146467200 146468700 0 99 chr1 146476200 146476800 0.329 81 chr1 146479800 146483400 0.0831 77 chr1 146484600 146486100 0.0831 77 chr1 146487300 146490300 0 83 chr1 146491500 146498400 0 83 chr1 146501100 146501400 0 83 chr1 146502600 146505000 0 83 chr1 146506500 146534100 0 83 chr1 146535300 146540700 0 83 chr1 146542500 146546100 0 83 chr1 146547300 146547600 0.0006 71 chr1 146548800 146552400 0.0006 71 chr1 146553900 146556000 0.0006 71 chr1 146559900 146560200 0.4525 48 chr1 146562000 146564700 0 54 chr1 146565900 146569200 0.0033 68 chr1 146570400 146571300 0.0033 68 chr1 146572500 146575800 0.3621 76 chr1 146578200 146580300 0.0192 72 chr1 146581500 146582100 0.0192 72 chr1 146583300 146583600 0.0192 72 chr1 146585700 146593800 0.0848 73 chr1 146597400 146602200 0.0795 74 chr1 146604000 146607600 0.0207 69 chr1 146609400 146612400 0.0055 74 chr1 146614800 146616000 0.0055 74 chr1 146617200 146617500 0.0055 74 chr1 146618700 146621100 0 76 chr1 146623200 146628000 0 76 chr1 146632500 146634600 0.0184 72 chr1 146635800 146636100 0.0184 72 chr1 146637900 146638200 0.1853 80 chr1 146639700 146640300 0.1853 80 chr1 146646600 146646900 0.3689 57 chr1 146649600 146650500 0.3733 71 chr1 146652300 146654100 0.029 86 chr1 146655300 146656200 0.029 86 chr1 146659800 146661300 0.29 59 chr1 146663100 146663400 0.29 59 chr1 146664600 146667000 0.0097 70 chr1 146670000 146670600 0.4479 62 chr1 146674200 146676000 0.1243 63 chr1 146677800 146678400 0.0547 68 chr1 146681100 146681700 0.0547 68 chr1 146682900 146683200 0.0547 68 chr1 146684400 146688000 0.0119 64 chr1 146691300 146695500 0.0772 71 chr1 146697300 146697900 0.0772 71 chr1 146699100 146699400 0.0772 71 chr1 146701200 146703300 0.2571 75 chr1 146704800 146705400 0.3602 71 chr1 146709900 146710200 0 97 chr1 146711400 146711700 0 97 chr1 146713800 146715300 0 97 chr1 146717100 146723700 0 97 chr1 146725500 146725800 0.356 56 chr1 146728800 146731500 0 73 chr1 146733900 146734500 0.1305 62 chr1 146737200 146737500 0.4759 54 chr1 146739900 146740200 0.0276 73 chr1 146741400 146745300 0.0276 73 chr1 146747100 146747700 0.0523 56 chr1 146748900 146749500 0.0431 79 chr1 146750700 146751000 0.0431 79 chr1 146753700 146754900 0.0431 79 chr1 146758500 146759700 0.029 68 chr1 146763000 146765700 0.0019 65 chr1 146768100 146771400 0.1652 82 chr1 146774100 146775600 0.2627 64 chr1 146778900 146780400 0.0045 83 chr1 146785500 146792100 0.006 71 chr1 146794800 146797800 0.0102 74 chr1 146799300 146804700 0.0291 66 chr1 146807700 146808000 0.0291 66 chr1 146811300 146812800 0.06 76 chr1 146814300 146816400 0.06 76 chr1 146818500 146818800 0.06 76 chr1 146820000 146821200 0.3601 66 chr1 146823600 146824200 0.0111 79 chr1 146825700 146826600 0.0111 79 chr1 146829000 146831400 0.0111 79 chr1 146835300 146835900 0.0111 79 chr1 146837100 146837400 0.3922 57 chr1 146838900 146839200 0.0061 84 chr1 146840700 146842800 0.0061 84 chr1 146844600 146846700 0.0061 84 chr1 146850900 146851200 0.1772 38 chr1 146852700 146855100 0.0375 73 chr1 146856600 146857200 0.1592 57 chr1 146858400 146863200 0.0559 70 chr1 146865600 146872200 0 121 chr1 146875200 146876700 0.0883 68 chr1 146879700 146880000 0.0087 90 chr1 146881500 146890200 0.0087 90 chr1 146891400 146892600 0.0087 90 chr1 146895600 146895900 0.154 72 chr1 146897400 146898900 0.154 72 chr1 146900400 146903100 0.154 72 chr1 146904900 146905500 0.1882 70 chr1 146908200 146909400 0 74 chr1 146913900 146914800 0.0586 57 chr1 146916000 146923800 0 75 chr1 146925000 146925600 0 75 chr1 146928000 146934000 0.0414 74 chr1 146937300 146937600 0.2018 75 chr1 146949300 146949600 0.1166 41 chr1 146951400 146953800 0 88 chr1 146955000 146955600 0 88 chr1 146956800 146960400 0 88 chr1 146967900 146968500 0.2568 86 chr1 146973300 146977200 0 592 chr1 146978700 146982000 0 592 chr1 146983200 146998800 0 592 chr1 147000000 147000300 0 592 chr1 147003300 147003600 0.1763 48 chr1 147015300 147015900 0.0178 58 chr1 147017700 147020100 0.3214 68 chr1 147067800 147068100 0.2507 63 chr1 147230100 147230400 0.456 38 chr1 147322200 147322500 0.461 74 chr1 147325500 147325800 0.4878 74 chr1 147360300 147360600 0.5022 71 chr1 147424200 147424500 0.3254 62 chr1 147425700 147426300 0.283 89 chr1 147927900 147929400 0.4278 63 chr1 147938700 147939300 0.1908 67 chr1 147940800 147941100 0.1402 73 chr1 147942600 147943200 0.1402 73 chr1 147944400 147945300 0.1402 73 chr1 147948300 147948600 0.371 56 chr1 147952800 147954600 0.0072 67 chr1 147955800 147956400 0.0111 56 chr1 147960600 147961200 0.362 67 chr1 147963000 147963300 0.3778 47 chr1 147964500 147964800 0.6008 62 chr1 147966300 147967200 0.0044 62 chr1 147969000 147969300 0.4338 55 chr1 147974100 147976500 0.2984 69 chr1 147977700 147978000 0.2984 69 chr1 147980100 147982800 0.2361 69 chr1 147984000 147984600 0.2361 69 chr1 147986700 147989100 0.3112 64 chr1 147992100 147993900 0.2254 72 chr1 147995100 147996900 0.2254 72 chr1 147998100 147998400 0.0119 78 chr1 148000800 148001700 0.0119 78 chr1 148003800 148005300 0.0765 68 chr1 148007400 148008000 0.4521 65 chr1 148016100 148016700 0.0537 67 chr1 148020000 148020300 0.0537 67 chr1 148021800 148024800 0 76 chr1 148026000 148027500 0 76 chr1 148029300 148034100 0 76 chr1 148035600 148035900 0 76 chr1 148038000 148041300 0 76 chr1 148042500 148043400 0 76 chr1 148045200 148045800 0 76 chr1 148047000 148047300 0 76 chr1 148050300 148054200 0.0623 75 chr1 148056000 148057200 0 86 chr1 148059300 148059900 0 86 chr1 148061400 148062000 0 86 chr1 148063500 148084800 0 86 chr1 148087500 148088700 0.0148 60 chr1 148093200 148098300 0.0414 79 chr1 148099500 148108200 0.022 361 chr1 148109700 148110900 0.022 361 chr1 148112400 148114800 0.0149 87 chr1 148116300 148119300 0.0149 87 chr1 148121700 148122000 0.6054 81 chr1 148123800 148124100 0.4619 87 chr1 148126800 148130400 0.0047 64 chr1 148131600 148135800 0.0182 69 chr1 148137600 148137900 0.1425 56 chr1 148139400 148139700 0.1425 56 chr1 148144200 148144500 0.3293 87 chr1 148152900 148153500 0.2353 66 chr1 148156500 148158000 0.1456 68 chr1 148167900 148171800 0.1117 71 chr1 148173900 148174800 0 75 chr1 148176000 148186200 0 75 chr1 148187700 148188900 0 68 chr1 148192200 148198200 0 88 chr1 148200000 148227000 0 88 chr1 148229400 148230600 0.3756 84 chr1 148235700 148245900 0 96 chr1 148247400 148248600 0 96 chr1 148250100 148253700 0 96 chr1 148256700 148257900 0.0851 71 chr1 148280700 148285800 0.0041 90 chr1 148298400 148303500 0.0017 89 chr1 148395900 148396500 0.3929 64 chr1 148412700 148413000 0.4347 88 chr1 148419300 148419600 0.0753 69 chr1 148440600 148452600 0 91 chr1 148454100 148458300 0 91 chr1 148460100 148464900 0 92 chr1 148467600 148469100 0 92 chr1 148470300 148476600 0 92 chr1 148478100 148482900 0 92 chr1 148484400 148500900 0 80 chr1 148502400 148502700 0 80 chr1 148505400 148509000 0.0632 72 chr1 148511100 148512600 0.0632 72 chr1 148514100 148514700 0.5513 70 chr1 148516200 148517700 0.0211 78 chr1 148518900 148521300 0.0211 78 chr1 148527300 148528500 0 215 chr1 148529700 148534200 0 215 chr1 148535400 148586400 0 215 chr1 148587600 148590900 0 215 chr1 148592100 148592700 0 215 chr1 148594200 148607700 0 97 chr1 148609200 148636800 0 97 chr1 148638900 148923300 0 110 chr1 148924500 148929000 0 110 chr1 148930800 148934100 0 110 chr1 148935300 148936500 0 57 chr1 148938900 148947600 0.0033 78 chr1 148949700 148950000 0.3861 71 chr1 148951200 148951500 0.3861 71 chr1 148952700 148953000 0.3861 71 chr1 148956600 148958100 0 81 chr1 148959600 148960800 0 81 chr1 148962000 148966200 0 81 chr1 148968300 148970400 0 81 chr1 148971900 148975500 0 81 chr1 148977000 148977600 0.0278 60 chr1 148988100 148989300 0.0032 68 chr1 148990500 148991400 0.0331 90 chr1 148992900 148995300 0.0331 90 chr1 148997100 148997400 0.2895 60 chr1 148998900 148999200 0.1754 64 chr1 149001300 149005200 0 106 chr1 149006700 149009400 0 106 chr1 149011200 149017200 0 109 chr1 149018400 149020500 0 109 chr1 149021700 149028000 0 109 chr1 149030700 149031300 0.4879 74 chr1 149042400 149043000 0.1815 72 chr1 149047200 149047500 0.3605 63 chr1 149049000 149059200 0 178 chr1 149060400 149067600 0 178 chr1 149069400 149070000 0 178 chr1 149076900 149080500 0.1301 94 chr1 149082300 149084100 0.1371 85 chr1 149086200 149086500 0.0002 89 chr1 149088900 149097000 0.0002 89 chr1 149098500 149100600 0.2209 71 chr1 149101800 149102400 0 90 chr1 149104200 149104800 0 90 chr1 149106900 149110500 0 90 chr1 149112300 149124600 0 90 chr1 149128200 149130000 0.0593 75 chr1 149131200 149143800 0 88 chr1 149145300 149154000 0 88 chr1 149155200 149157300 0 88 chr1 149159100 149159400 0 88 chr1 149161500 149171400 0 114 chr1 149174100 149175900 0 114 chr1 149177100 149181000 0 114 chr1 149182800 149194500 0 114 chr1 149197800 149199300 0.0314 89 chr1 149201100 149202300 0 130 chr1 149203800 149205900 0 130 chr1 149207100 149305800 0 130 chr1 149307000 149364600 0 130 chr1 149366700 149382300 0 130 chr1 149383800 149384400 0 130 chr1 149385600 149385900 0 130 chr1 149387400 149388300 0 130 chr1 149389800 149392500 0 95 chr1 149393700 149398200 0 95 chr1 149399400 149408400 0 73 chr1 149409600 149412600 0 73 chr1 149413800 149418900 0.0192 65 chr1 149420100 149423100 0.0004 74 chr1 149425500 149448600 0 100 chr1 149449800 149460300 0 100 chr1 149461800 149470800 0 100 chr1 149472300 149476800 0 94 chr1 149479500 149486400 0 184 chr1 149487900 149557500 0 184 chr1 149558700 149559600 0 75 chr1 149560800 149561400 0 75 chr1 149563500 149585400 0 87 chr1 149587800 149591700 0 87 chr1 149593200 149598600 0 94 chr1 149599800 149604900 0 94 chr1 149606700 149618700 0 94 chr1 149619900 149627400 0 94 chr1 149628600 149628900 0.2269 79 chr1 149630100 149630400 0.2269 79 chr1 149632200 149632500 0.2269 79 chr1 149634600 149635200 0.2269 79 chr1 149637300 149638200 0.2697 67 chr1 149640000 149640600 0.1317 47 chr1 149643000 149643600 0.1219 59 chr1 149645100 149645400 0.366 60 chr1 149647200 149649900 0.1598 63 chr1 149651100 149652600 0.0245 70 chr1 149654700 149655600 0.1604 47 chr1 149657400 149657700 0.157 90 chr1 149659800 149661300 0.0868 62 chr1 149663700 149664900 0.4931 90 chr1 149675700 149676600 0.0022 85 chr1 149678100 149685600 0.0022 85 chr1 149686800 149689500 0.0022 85 chr1 149691600 149691900 0 81 chr1 149693100 149694900 0 81 chr1 149696400 149712600 0 81 chr1 149713800 149715600 0 81 chr1 149716800 149719800 0 69 chr1 149721000 149738400 0 69 chr1 149739600 149744400 0 69 chr1 149747700 149748900 0.3124 70 chr1 149750700 149751300 0.2279 65 chr1 149754000 149754300 0.0518 74 chr1 149755500 149762100 0.0518 74 chr1 149765100 149769600 0.0156 70 chr1 149772000 149774100 0 66 chr1 149775900 149776200 0 70 chr1 149777400 149784000 0 70 chr1 149787600 149788200 0.5124 87 chr1 149791800 149792100 0.1275 68 chr1 149794500 149795700 0.0063 68 chr1 149797800 149799300 0.218 58 chr1 149800500 149800800 0.1622 58 chr1 149804100 149805000 0.4011 82 chr1 149808900 149809800 0.1762 73 chr1 149814600 149814900 0.636 56 chr1 149817600 149843400 0 81 chr1 149850300 149876100 0 83 chr1 150719100 150719400 0.5892 34 chr1 150728100 150729300 0.1538 55 chr1 150782100 150782400 0.1901 67 chr1 151599600 151601700 0.0506 87 chr1 151647300 151647900 0.1975 85 chr1 152213400 152218500 0 363 chr1 152269500 152272200 0 75 chr1 152289900 152292600 0.2843 101 chr1 152305500 152307000 0.0842 76 chr1 152385300 152385600 0.4164 61 chr1 152431800 152435700 0.2019 88 chr1 152464500 152464800 0.4473 65 chr1 152490000 152491500 0.0011 78 chr1 152615700 152617200 0.3652 35 chr1 152881500 152881800 0.4541 62 chr1 152927700 152928000 0.3626 57 chr1 152955600 152957400 0.2639 78 chr1 153004500 153005100 0.3856 58 chr1 153143100 153143400 0.254 79 chr1 153256800 153257100 0.3818 72 chr1 153278400 153279600 0.0491 78 chr1 153405300 153405600 0.3916 78 chr1 153442500 153443100 0.2012 83 chr1 153465300 153465600 0.3258 51 chr1 154125600 154125900 0.5743 21 chr1 155189100 155190300 0 43 chr1 155213100 155214600 0 70 chr1 155233800 155235300 0 70 chr1 155274600 155274900 0.5578 77 chr1 155561400 155562000 0.3406 61 chr1 155610300 155612100 0.0376 66 chr1 155614200 155614500 0.3323 73 chr1 155618400 155619300 0.0209 64 chr1 155626800 155635800 0 95 chr1 155687100 155687700 0.4166 68 chr1 155700900 155701800 0.0394 97 chr1 155745900 155747400 0.1094 71 chr1 155749500 155750400 0.4343 59 chr1 155757600 155758200 0.1238 63 chr1 156179400 156180000 0.2474 63 chr1 156557400 156559200 0 53 chr1 157242600 157242900 0.5011 60 chr1 157344000 157344300 0.364 66 chr1 157609500 157609800 0.1698 91 chr1 157681800 157682100 0.5038 71 chr1 158240700 158241000 0.1121 67 chr1 158268000 158268900 0.1485 73 chr1 158314800 158315100 0.4686 53 chr1 158319000 158319300 0.1993 79 chr1 158567400 158567700 0.2262 67 chr1 158709000 158709300 0.6177 60 chr1 158742300 158742600 0.3371 22 chr1 158761800 158763000 0.008 69 chr1 158887800 158889000 0.2879 87 chr1 158891700 158892000 0.4601 71 chr1 158953800 158958600 0.0501 77 chr1 159045000 159045300 0.5128 71 chr1 159049200 159049500 0.4894 55 chr1 159326400 159326700 0.3217 67 chr1 159455700 159458700 0.0873 83 chr1 159525300 159527100 0.0794 61 chr1 159569400 159571500 0.1645 114 chr1 159573300 159573600 0.5402 95 chr1 159734100 159734400 0.2767 74 chr1 159735900 159736200 0.2767 74 chr1 159759900 159760500 0.186 89 chr1 159761700 159762600 0.186 89 chr1 160695300 160697100 0.2223 112 chr1 160785900 160786200 0.3369 67 chr1 160788000 160788300 0.3369 67 chr1 160965300 160965600 0.3573 28 chr1 161244000 161244300 0.2508 45 chr1 161423400 161424000 0.3642 71 chr1 161440800 161472600 0 577 chr1 161512200 161513400 0.2437 60 chr1 161516700 161517000 0.2771 49 chr1 161527200 161528100 0.2505 55 chr1 161533500 161535000 0.2048 105 chr1 161553300 161553900 0.4321 64 chr1 161560500 161560800 0.2431 64 chr1 161564700 161565600 0.5188 76 chr1 161566800 161567100 0.3146 50 chr1 161569200 161569800 0.2954 67 chr1 161571900 161589000 0 92 chr1 161590200 161592600 0 92 chr1 161593800 161596800 0 92 chr1 161598600 161598900 0.4949 51 chr1 161608800 161609100 0.2765 75 chr1 161613600 161614500 0.0164 68 chr1 161629200 161629800 0.5002 81 chr1 161633700 161635200 0.2826 56 chr1 161639700 161642400 0.0063 53 chr1 161646000 161646300 0.3113 64 chr1 161648100 161648400 0.2851 57 chr1 161650800 161651700 0.0038 55 chr1 161653200 161670900 0 93 chr1 161672100 161672400 0.3593 73 chr1 161673600 161674500 0.0272 66 chr1 162082800 162083100 0.544 38 chr1 162311700 162312600 0.1512 87 chr1 162737400 162739200 0.006 91 chr1 162791400 162791700 0.3857 60 chr1 163254000 163254300 0.2193 74 chr1 163255500 163255800 0.2193 74 chr1 163262400 163262700 0.0263 67 chr1 163490100 163490700 0.3444 113 chr1 163640100 163644300 0.0168 90 chr1 163750800 163752000 0.3485 73 chr1 163753800 163754100 0.5801 42 chr1 163850100 163850400 0.3539 84 chr1 164048100 164048400 0.6808 13 chr1 164290200 164291100 0.3646 64 chr1 164359200 164359500 0.6065 43 chr1 164463300 164464800 0.0346 121 chr1 164958600 164958900 0.4117 32 chr1 165808200 165808500 0.3369 73 chr1 165970800 165974400 0 114 chr1 166243200 166248300 0.0348 137 chr1 166311300 166311600 0.3352 78 chr1 166494300 166494600 0.1364 58 chr1 166878300 166878600 0.6111 52 chr1 167435100 167435400 0.4384 64 chr1 168055500 168055800 0.0323 67 chr1 168162000 168162300 0.4894 67 chr1 168348900 168350400 0.0521 93 chr1 168351600 168354000 0.0521 93 chr1 168544200 168544500 0.1846 61 chr1 168576000 168576300 0.1523 72 chr1 169251900 169253400 0.2993 72 chr1 169255200 169255500 0.5638 46 chr1 169273500 169274100 0.5312 87 chr1 169277400 169278000 0.4666 79 chr1 169604100 169604400 0.3428 57 chr1 169990200 169990500 0.4594 49 chr1 170089200 170089800 0.3402 74 chr1 170092500 170093100 0.3402 74 chr1 170124600 170125200 0.4277 65 chr1 170236200 170236500 0.4311 41 chr1 170280300 170283600 0.3389 87 chr1 170418300 170419800 0.5298 72 chr1 170468400 170468700 0.47 59 chr1 171078900 171079500 0.396 96 chr1 171097200 171097500 0.3862 56 chr1 171292200 171292500 0.5272 66 chr1 171374100 171375600 0.165 101 chr1 171377100 171379200 0.165 101 chr1 171690000 171690900 0.0756 91 chr1 172059000 172061100 0.0333 74 chr1 172317000 172317300 0.5013 84 chr1 172806900 172807200 0.4923 67 chr1 172878600 172878900 0.4608 82 chr1 172981500 172988100 0.0044 75 chr1 172989300 172989600 0.0044 75 chr1 173327400 173327700 0.3052 76 chr1 173975700 173976000 0.3658 38 chr1 174148500 174148800 0.4233 57 chr1 174233400 174234000 0.0112 100 chr1 174235200 174237900 0.0112 100 chr1 174348600 174348900 0.3574 58 chr1 174350100 174351000 0.0576 73 chr1 174364200 174364500 0.4963 46 chr1 174379200 174383400 0.0021 93 chr1 174587100 174587400 0.377 31 chr1 174590400 174596100 0 101 chr1 174630000 174634800 0.0423 92 chr1 174650700 174651000 0.3879 72 chr1 174675300 174675600 0.5451 62 chr1 174843300 174849000 0 111 chr1 175107600 175107900 0.339 63 chr1 175231500 175231800 0.3399 30 chr1 175557900 175558200 0.1934 27 chr1 175998000 175998300 0.4796 69 chr1 176002500 176003100 0.3249 132 chr1 176132700 176133000 0.0024 21 chr1 176256300 176261700 0 116 chr1 176309100 176309700 0.3635 76 chr1 176600400 176600700 0.5551 47 chr1 176640600 176641200 0.2602 131 chr1 176751000 176752200 0.0162 87 chr1 177402600 177403200 0.3832 98 chr1 177404400 177405000 0.3832 98 chr1 177408900 177409200 0.2098 80 chr1 177634800 177639600 0.0236 114 chr1 178314900 178318800 0 81 chr1 178320000 178320300 0.305 76 chr1 178695600 178696200 0.402 72 chr1 178777800 178779000 0.0172 137 chr1 178804500 178805100 0.1071 117 chr1 178841100 178843500 0 101 chr1 178896600 178896900 0.3224 67 chr1 178989300 178989600 0.4524 68 chr1 178990800 178991100 0.4312 77 chr1 179452500 179452800 0.497 43 chr1 179645100 179645400 0.3584 53 chr1 179943300 179943600 0.2195 63 chr1 180214800 180215100 0.5368 36 chr1 180302700 180303300 0.4846 66 chr1 180336000 180336600 0.267 66 chr1 180699300 180702600 0 95 chr1 180867000 180872700 0 120 chr1 181225500 181226700 0.0592 66 chr1 181728900 181729200 0.4004 61 chr1 181860000 181860300 0.4094 52 chr1 182439300 182439900 0.5767 48 chr1 182508600 182510400 0.0063 70 chr1 182980800 182981100 0.4217 83 chr1 183614100 183614400 0.4817 22 chr1 183616200 183617100 0.2795 66 chr1 183657600 183657900 0.4481 68 chr1 183776100 183776400 0.5126 40 chr1 184263000 184263300 0.5726 65 chr1 184800300 184800600 0.487 59 chr1 184845600 184851600 0.0009 121 chr1 185002800 185007300 0.1429 165 chr1 185252700 185256300 0.1867 82 chr1 185380200 185380800 0.0792 95 chr1 185710500 185710800 0.3544 70 chr1 185797800 185798100 0.4239 34 chr1 185888100 185891400 0.0936 83 chr1 185953800 185954100 0.5485 77 chr1 186157800 186158400 0.1835 67 chr1 186160200 186160500 0.1835 67 chr1 186216600 186216900 0.3011 67 chr1 186637800 186638100 0.156 133 chr1 186641100 186642000 0.156 133 chr1 186643200 186643500 0.156 133 chr1 186795600 186796200 0.0239 24 chr1 187344000 187349700 0 116 chr1 187598100 187603500 0 112 chr1 187804800 187806000 0.2465 54 chr1 187823400 187823700 0.4626 50 chr1 187824900 187825200 0.4328 36 chr1 188032800 188033100 0.3918 81 chr1 188352900 188353200 0.2589 52 chr1 188559900 188560200 0.2836 62 chr1 188624400 188624700 0.5191 60 chr1 188754000 188754300 0.3004 120 chr1 188755500 188757000 0.3004 120 chr1 189025800 189026100 0.1147 26 chr1 189364500 189365100 0.3432 89 chr1 189469500 189471000 0.0753 88 chr1 189759900 189760200 0.3905 83 chr1 189863400 189863700 0.204 48 chr1 190730400 190734300 0.148 92 chr1 191063700 191064300 0.2471 65 chr1 191069400 191070000 0.0579 58 chr1 192481500 192482100 0.2894 79 chr1 192485100 192485400 0.2894 79 chr1 192501300 192506400 0.0418 95 chr1 192795900 192796200 0.643 53 chr1 193445100 193446300 0.1974 95 chr1 193717800 193723800 0 103 chr1 193862100 193862400 0.3465 71 chr1 193867200 193867500 0.3254 67 chr1 194017200 194017500 0.6969 22 chr1 194259600 194260200 0.3164 74 chr1 194272200 194273100 0.2246 64 chr1 195551400 195551700 0.4341 68 chr1 195924900 195929100 0 92 chr1 196219500 196225200 0 114 chr1 196753200 196755900 0 58 chr1 196757100 196759500 0.0483 74 chr1 196762500 196762800 0.4902 85 chr1 196795800 196796700 0.0089 66 chr1 196812900 196815300 0.2013 64 chr1 196819500 196820100 0.0346 59 chr1 196821300 196821900 0.0774 66 chr1 196836300 196836600 0 51 chr1 196837800 196840500 0 51 chr1 196841700 196844100 0 54 chr1 196847100 196848600 0.0188 70 chr1 196920900 196921500 0.0221 76 chr1 196934700 196935000 0.2865 60 chr1 196937100 196937400 0.2865 60 chr1 196943400 196944000 0.0128 63 chr1 196945200 196945800 0.2424 70 chr1 197531400 197534100 0 102 chr1 197708100 197713800 0 111 chr1 197803500 197804400 0.1705 77 chr1 198077400 198077700 0.222 78 chr1 198250500 198250800 0.1148 93 chr1 198546300 198546600 0.4575 50 chr1 199023300 199025400 0 102 chr1 199193700 199194000 0.5217 52 chr1 199469700 199471200 0 78 chr1 199555800 199556100 0.4523 64 chr1 200487600 200487900 0.4729 70 chr1 200797200 200799000 0.0506 95 chr1 200914500 200915400 0 72 chr1 201210000 201210600 0.2724 67 chr1 201235500 201235800 0.175 74 chr1 202191000 202192200 0.3906 77 chr1 202204500 202205700 0.2868 147 chr1 202253700 202254000 0.4764 28 chr1 202332600 202332900 0.2678 67 chr1 202341300 202341600 0.4945 39 chr1 202391700 202392000 0.007 11 chr1 202451400 202451700 0.4696 47 chr1 202610700 202611000 0.4344 71 chr1 203022900 203023200 0.394 48 chr1 204471000 204471600 0 59 chr1 205847100 205847700 0.1791 58 chr1 205854000 205854600 0.0894 64 chr1 205958100 205958400 0.117 21 chr1 205966800 205967100 0.4159 18 chr1 206153100 206153700 0.0215 68 chr1 206156100 206160300 0 80 chr1 206162700 206166000 0 80 chr1 206167500 206168400 0 77 chr1 206169600 206172600 0 77 chr1 206173800 206176800 0 77 chr1 206178900 206181000 0 77 chr1 206182200 206197800 0 77 chr1 206199300 206209500 0.0004 76 chr1 206211000 206213100 0.0004 76 chr1 206214900 206220300 0 86 chr1 206221500 206226300 0 86 chr1 206227800 206228400 0.1616 94 chr1 206230200 206239500 0 83 chr1 206241300 206248200 0 90 chr1 206249700 206254200 0 90 chr1 206255400 206255700 0 90 chr1 206256900 206266200 0 90 chr1 206268600 206272200 0 90 chr1 206274000 206277600 0 90 chr1 206279100 206285400 0 90 chr1 206287200 206290200 0 90 chr1 206293200 206303100 0 90 chr1 206304300 206304900 0.0012 97 chr1 206307900 206309100 0.0012 97 chr1 206310900 206311800 0.2815 89 chr1 206313000 206313600 0.2815 89 chr1 206314800 206322300 0 105 chr1 206323500 206324400 0 105 chr1 206325900 206334300 0 105 chr1 206336100 206338800 0 105 chr1 206340600 206340900 0 105 chr1 206342700 206345700 0 105 chr1 206346900 206350800 0.0307 73 chr1 206352000 206352600 0.0307 73 chr1 206355900 206362800 0.0382 92 chr1 206364900 206365200 0.0382 92 chr1 206366700 206368800 0 99 chr1 206370900 206378100 0 99 chr1 206379300 206388900 0 99 chr1 206390100 206394000 0 99 chr1 206396400 206409600 0 99 chr1 207526800 207564300 0 74 chr1 207568200 207573000 0 62 chr1 207718800 207719100 0.345 64 chr1 207721500 207722400 0.0686 81 chr1 207732300 207736200 0.0169 113 chr1 208307100 208307400 0.344 105 chr1 208659000 208659300 0.1524 63 chr1 208694100 208694400 0.4882 49 chr1 208707000 208707300 0.2368 83 chr1 209281500 209281800 0.1699 72 chr1 209320200 209320500 0.4942 51 chr1 209913900 209919600 0 82 chr1 210441900 210444300 0 69 chr1 210968100 210968700 0.2441 65 chr1 211035300 211035600 0.3993 61 chr1 211272600 211272900 0.3084 48 chr1 212298300 212299200 0.2244 37 chr1 212392800 212393100 0.3372 78 chr1 212778600 212778900 0.4782 74 chr1 212849400 212851800 0.0009 84 chr1 213116400 213116700 0.6117 54 chr1 213150300 213151500 0.1583 64 chr1 213740700 213741000 0.259 36 chr1 213806400 213807000 0.2221 110 chr1 214683000 214683600 0.3777 50 chr1 214868700 214870500 0.0419 51 chr1 215209500 215209800 0.0394 45 chr1 216486600 216486900 0.2044 84 chr1 216488400 216491400 0.2044 84 chr1 217257600 217257900 0.4211 27 chr1 217359300 217359900 0.1739 77 chr1 217580700 217581000 0.3638 59 chr1 217690500 217695900 0 83 chr1 217744200 217744500 0.3307 43 chr1 218009100 218014800 0 76 chr1 218072400 218073000 0.0039 75 chr1 218598600 218598900 0.6834 58 chr1 219103800 219104400 0.1983 66 chr1 219114900 219115800 0.3273 70 chr1 219455700 219458100 0.0698 109 chr1 219546600 219546900 0.5083 59 chr1 219561900 219562200 0.165 63 chr1 219591300 219591600 0.2649 46 chr1 219598500 219600300 0.2296 52 chr1 219602400 219602700 0.5023 57 chr1 219605700 219607800 0.4684 61 chr1 219609300 219612000 0.1811 95 chr1 219841500 219841800 0.1944 116 chr1 219866400 219867000 0.016 68 chr1 219868800 219869400 0.1181 77 chr1 219872700 219873300 0.3194 62 chr1 219948000 219948300 0.302 58 chr1 220112100 220112400 0.2366 44 chr1 220246200 220246800 0.034 69 chr1 220665300 220665600 0.5728 44 chr1 220995600 220996800 0 136 chr1 221607000 221607300 0.4511 56 chr1 221856900 221857200 0.3955 65 chr1 221860800 221861100 0.4246 49 chr1 222138300 222138900 0.314 36 chr1 222353700 222354000 0.3998 55 chr1 222469200 222469500 0.491 88 chr1 222481200 222483300 0.0281 76 chr1 222484800 222485100 0.0281 76 chr1 222486300 222489300 0.0386 101 chr1 222492000 222492900 0.3737 78 chr1 222495000 222495300 0.3609 73 chr1 222497400 222498300 0.3609 73 chr1 222501300 222501900 0.3609 73 chr1 222504000 222510000 0.2134 87 chr1 222668400 222669300 0.0095 68 chr1 223026000 223026300 0.5316 68 chr1 223169100 223169400 0.427 80 chr1 223171500 223173000 0.2599 80 chr1 223317900 223319400 0.0166 101 chr1 223396500 223400700 0.0647 81 chr1 223450800 223451700 0.0266 79 chr1 223635600 223636800 0 122 chr1 223767600 223768500 0.287 90 chr1 223890000 223890300 0.0632 73 chr1 223893900 223894500 0.2902 49 chr1 223910400 223910700 0.2719 73 chr1 223912200 223912500 0.3466 87 chr1 223914300 223914600 0.3466 87 chr1 223916400 223917600 0.2498 71 chr1 223919400 223923300 0.0213 90 chr1 223926300 223931400 0.0213 90 chr1 223932600 223935000 0 68 chr1 223938300 223941900 0.0039 68 chr1 223943400 223944300 0.1719 67 chr1 223947300 223947600 0.5104 46 chr1 223950600 223951200 0.1232 36 chr1 223953900 223954800 0.2175 69 chr1 223956900 223958700 0.3783 76 chr1 223963200 223963800 0.265 76 chr1 223966500 223969500 0.265 76 chr1 223973700 223977000 0.402 58 chr1 223979700 223981500 0.0585 69 chr1 223987800 223989000 0.0625 78 chr1 224001300 224001600 0.2409 47 chr1 224011500 224017200 0.2077 1434 chr1 224024100 224025600 0.1541 102 chr1 224026800 224027700 0.1541 102 chr1 224032200 224032500 0.1403 87 chr1 224033700 224035500 0.1403 87 chr1 224059500 224059800 0 30 chr1 224100600 224101800 0.4022 57 chr1 224340000 224340600 0.0779 52 chr1 224378400 224379000 0.3123 91 chr1 224799600 224800200 0.076 141 chr1 225574500 225574800 0.5219 30 chr1 226071600 226071900 0.1224 46 chr1 226114200 226115100 0.0645 44 chr1 226701300 226701600 0.4809 60 chr1 226797900 226798200 0.0165 27 chr1 227207700 227210100 0.2293 76 chr1 227493300 227499000 0.0059 96 chr1 227502300 227508300 0 75 chr1 227836500 227836800 0.4127 21 chr1 227976600 227976900 0.6515 60 chr1 227979600 227979900 0.1635 60 chr1 227981400 227982000 0.1635 60 chr1 227984100 227985600 0.0849 52 chr1 228193500 228193800 0.4708 54 chr1 228384600 228384900 0.4534 47 chr1 228556200 228558300 0 325 chr1 228608400 228646800 0 773 chr1 228678900 228679500 0.2133 43 chr1 228709200 228709800 0.2721 100 chr1 228711600 228712200 0.2721 100 chr1 229900800 229901100 0.3862 67 chr1 230296500 230297100 0.452 101 chr1 230335200 230335500 0.327 13 chr1 230871900 230872200 0.4319 236 chr1 231047400 231047700 0.2172 36 chr1 231167400 231167700 0.3655 44 chr1 231780600 231780900 0.0081 61 chr1 231995700 231996000 0.3588 88 chr1 232082100 232082700 0.2749 94 chr1 232231500 232232400 0.1874 25 chr1 232287300 232287600 0.5801 25 chr1 232725300 232725600 0.3893 44 chr1 232823700 232824900 0.065 83 chr1 233174100 233174400 0.4098 10 chr1 233594400 233594700 0.4925 12 chr1 233729400 233729700 0.6212 35 chr1 234267000 234267600 0.298 79 chr1 234451500 234451800 0.2176 32 chr1 234786000 234786300 0.5673 38 chr1 234787800 234792000 0.065 127 chr1 234793500 234794400 0.3437 108 chr1 234796800 234799800 0.0313 116 chr1 234801000 234801600 0.0313 116 chr1 234803100 234804300 0.0313 116 chr1 234805500 234809700 0.2708 95 chr1 234810900 234811200 0.2708 95 chr1 234812400 234814800 0.0623 150 chr1 234816300 234816600 0.0623 150 chr1 234818100 234819900 0.152 74 chr1 235382700 235384500 0.2121 73 chr1 235891200 235891500 0.5379 24 chr1 236035200 236035800 0.0302 105 chr1 236097000 236097600 0.2783 390 chr1 236386500 236388000 0 59 chr1 236713500 236715000 0 414 chr1 236755800 236757000 0.1186 44 chr1 237019500 237025200 0 110 chr1 237075300 237081300 0.0036 103 chr1 237605700 237606000 0.4623 57 chr1 238208100 238209600 0.5509 96 chr1 238689300 238689900 0.0431 109 chr1 239623500 239629200 0 103 chr1 239640600 239641500 0.4777 75 chr1 239732100 239733000 0.0195 57 chr1 239813700 239814000 0.5002 46 chr1 240184800 240185100 0.5519 106 chr1 240453600 240453900 0.4789 44 chr1 240777900 240778200 0.5605 69 chr1 240972300 240972600 0.2465 42 chr1 241197300 241197600 0.2177 31 chr1 241415700 241416300 0.281 61 chr1 242045700 242051400 0 82 chr1 242341500 242341800 0.4266 23 chr1 242394300 242394900 0.1125 15 chr1 242714100 242714400 0.4637 71 chr1 242968800 242969100 0.3885 55 chr1 242992500 242992800 0.3637 58 chr1 243013200 243013500 0.2069 63 chr1 243030000 243034200 0.0389 74 chr1 243036300 243038700 0.0656 63 chr1 243039900 243042600 0.0656 63 chr1 243044700 243047100 0.0178 50 chr1 243048900 243049200 0.3754 44 chr1 243052200 243052800 0.2328 62 chr1 243057900 243059100 0.156 75 chr1 243061500 243062100 0.3266 45 chr1 243065100 243066600 0.4812 51 chr1 243068100 243068700 0.3517 89 chr1 243074100 243075600 0.4791 72 chr1 243081000 243084300 0.0109 79 chr1 243087000 243087300 0.487 82 chr1 243096300 243098100 0.3059 67 chr1 243660000 243660300 0.3335 79 chr1 243661800 243662100 0.2284 103 chr1 244275900 244276200 0.5162 25 chr1 244444200 244444500 0.297 62 chr1 244492200 244493100 0.1586 82 chr1 244523400 244524000 0.0986 79 chr1 244539300 244542000 0.225 45 chr1 245103000 245103600 0.1551 133 chr1 245280600 245281800 0.0573 90 chr1 245586600 245586900 0.6158 55 chr1 245682300 245682600 0.6855 51 chr1 245819100 245821800 0.0105 118 chr1 245974500 245976900 0 20 chr1 245991900 245993100 0.0023 49 chr1 246024300 246024900 0.4614 84 chr1 246233400 246233700 0.6517 129 chr1 246251700 246252300 0.3594 50 chr1 246388200 246389700 0 118 chr1 246429900 246430200 0.4254 44 chr1 246478500 246478800 0.4819 60 chr1 246483900 246485100 0.2527 74 chr1 246520800 246521100 0.4323 34 chr1 246620100 246620700 0.1052 81 chr1 246713100 246713400 0.6612 74 chr1 246719400 246719700 0.3746 65 chr1 246783000 246783300 0.479 56 chr1 246785700 246786000 0.5614 204 chr1 246818100 246819300 0 30 chr1 246864600 246864900 0.1618 14 chr1 247116000 247119000 0 47 chr1 247126200 247130100 0 77 chr1 247169700 247172400 0 58 chr1 247219200 247219500 0.069 67 chr1 247354800 247355400 0.0551 47 chr1 247363200 247363500 0.4447 70 chr1 247649100 247649400 0.686 52 chr1 247687500 247693200 0 97 chr1 247725600 247728000 0.0733 66 chr1 247800600 247802700 0.2274 48 chr1 247809300 247811100 0.0101 81 chr1 247870200 247871100 0.2659 175 chr1 247888500 247891200 0 100 chr1 247892400 247894500 0 100 chr1 247921500 247921800 0.1473 42 chr1 248025000 248025300 0.3718 73 chr1 248044500 248044800 0.4446 47 chr1 248166900 248172300 0.0061 105 chr1 248187900 248188800 0 64 chr1 248221200 248221800 0.0667 81 chr1 248256300 248256600 0.308 72 chr1 248258100 248258400 0.308 72 chr1 248298600 248298900 0.4146 47 chr1 248306700 248307000 0.5948 75 chr1 248383200 248384100 0.4422 87 chr1 248408100 248409000 0.0298 129 chr1 248436000 248437800 0.5108 88 chr1 248441400 248441700 0.6428 79 chr1 248448000 248457000 0 100 chr1 248474400 248476500 0 74 chr1 248479800 248480100 0.1043 74 chr1 248481900 248482200 0.6622 35 chr1 248483400 248484600 0 67 chr1 248486100 248493900 0 88 chr1 248495700 248500500 0 83 chr1 248502000 248519100 0 83 chr1 248529000 248552400 0 78 chr1 248554200 248562000 0 72 chr1 248563500 248564700 0 77 chr1 248567700 248568600 0.0747 73 chr1 248571600 248574000 0 75 chr1 248634900 248643900 0 93 chr1 248649000 248650800 0.3035 66 chr1 248654100 248655600 0 55 chr1 248676600 248677500 0.0569 50 chr1 248725800 248726100 0.4767 73 chr1 248746800 248748300 0.0083 41 chr1 248764200 248764500 0.4267 70 chr1 248867100 248867400 0.6659 72 chr1 248931300 248933400 0.0069 305 chr1 248934600 248946600 0.0069 305 chr10 9900 47100 0 302 chr10 54300 54600 0.409 62 chr10 295500 295800 0.6981 48 chr10 321600 323400 0.0504 107 chr10 345600 347100 0.2067 46 chr10 402000 402600 0.3243 25 chr10 425100 425400 0.3833 93 chr10 448800 449100 0.4909 62 chr10 455400 456000 0.4409 135 chr10 465000 466500 0.1919 59 chr10 489900 490200 0.6832 63 chr10 587700 588000 0.5789 44 chr10 632400 632700 0.4778 57 chr10 717900 718200 0.0922 41 chr10 723300 723600 0.3428 36 chr10 726300 726600 0.5156 49 chr10 735600 736200 0.2104 37 chr10 747300 747900 0.2376 78 chr10 757200 757500 0.0324 64 chr10 777600 777900 0.1577 41 chr10 779400 779700 0.4451 53 chr10 783900 784500 0.0562 48 chr10 793800 794100 0.4163 47 chr10 952500 953700 0.0013 81 chr10 954900 955200 0.5827 62 chr10 1015500 1015800 0.5846 72 chr10 1038900 1039200 0.5575 50 chr10 1046400 1047600 0 55 chr10 1219800 1220400 0.5625 98 chr10 1235100 1240500 0.0942 172 chr10 1246500 1246800 0.4258 47 chr10 1260600 1262100 0.2213 79 chr10 1265700 1266000 0.4897 69 chr10 1306800 1307100 0.4027 81 chr10 1326900 1327200 0.5452 23 chr10 1340100 1340700 0.4262 76 chr10 1396800 1397700 0.5293 54 chr10 1438800 1439100 0.6999 36 chr10 1460100 1460700 0.2983 69 chr10 1541100 1542900 0.5119 81 chr10 1592400 1593300 0.2122 120 chr10 1699200 1701300 0.3754 33 chr10 1769700 1770600 0.1316 82 chr10 1800300 1800600 0.5385 39 chr10 2231700 2232300 0.4724 81 chr10 2254200 2255100 0.2059 78 chr10 2337300 2337600 0.3826 20 chr10 2392200 2392500 0.4444 107 chr10 2521800 2523300 0.286 86 chr10 2805900 2806500 0.2031 73 chr10 3084900 3085800 0.4878 17 chr10 3106200 3106500 0.4702 78 chr10 3206100 3206400 0.5785 68 chr10 3221700 3222000 0.2522 69 chr10 3225000 3225300 0.4006 57 chr10 3252300 3252600 0.4406 29 chr10 3315000 3315300 0.3292 112 chr10 3318300 3318600 0.5864 51 chr10 3373500 3373800 0.6084 63 chr10 3771600 3771900 0.3654 77 chr10 4592700 4593000 0.2608 28 chr10 4598100 4598400 0.402 68 chr10 4815600 4815900 0.0423 12 chr10 4956300 4956600 0.184 70 chr10 4975500 4976100 0.0906 56 chr10 4979700 4980600 0.2068 65 chr10 4987200 4987800 0.1164 62 chr10 4989300 4989600 0.4255 54 chr10 4991700 4992000 0.0362 62 chr10 4995000 4995600 0.484 55 chr10 5009700 5010300 0.3137 72 chr10 5021400 5021700 0.6818 37 chr10 5028000 5028300 0.3496 46 chr10 5176200 5176500 0.6531 13 chr10 5227200 5227500 0.3002 67 chr10 5245500 5251500 0 90 chr10 5253600 5253900 0.3667 44 chr10 5370000 5370600 0.5754 138 chr10 5381100 5381400 0.6044 63 chr10 6206100 6206400 0.3425 46 chr10 6210600 6210900 0.4172 11 chr10 6369600 6375600 0 69 chr10 6450000 6450300 0.1576 71 chr10 6548400 6548700 0.1386 59 chr10 6799500 6799800 0.4737 32 chr10 6806400 6806700 0.3925 61 chr10 6807900 6808200 0.5203 66 chr10 6860100 6861300 0.3483 68 chr10 6906600 6906900 0.3045 58 chr10 6992100 6992400 0.4257 63 chr10 7058100 7062900 0.0358 84 chr10 7138500 7141800 0.0586 79 chr10 7378200 7378500 0.5638 49 chr10 7593300 7593600 0.4906 38 chr10 7719900 7720200 0.6252 46 chr10 8367000 8367300 0.3974 50 chr10 8984400 8985300 0.0844 105 chr10 9216900 9217200 0.4907 58 chr10 9272700 9273000 0.3633 34 chr10 9372000 9372300 0.2598 38 chr10 9407700 9408000 0.5962 11 chr10 9477900 9478200 0.4428 14 chr10 9584100 9584400 0.3517 67 chr10 9596100 9596400 0.6219 39 chr10 9725400 9725700 0.4537 79 chr10 9831900 9832200 0.241 64 chr10 9930900 9931200 0.5962 46 chr10 10107600 10108500 0.2146 81 chr10 10266300 10267200 0.5013 70 chr10 10556700 10558200 0.2837 75 chr10 10652100 10656600 0.2138 66 chr10 10666500 10666800 0.5998 47 chr10 10692300 10693500 0.0684 95 chr10 11283900 11284200 0.6922 155 chr10 11366400 11366700 0.6565 22 chr10 11404200 11404500 0.4711 29 chr10 11731500 11736900 0 107 chr10 11885400 11885700 0.3822 91 chr10 12518400 12520800 0.0017 39 chr10 12694200 12694500 0.4123 20 chr10 12774900 12776100 0 253 chr10 13155300 13155600 0.1149 70 chr10 13217400 13218600 0 62 chr10 14514900 14515500 0.1601 67 chr10 15149400 15149700 0.6767 115 chr10 15229500 15230100 0.5088 82 chr10 15915900 15921300 0 87 chr10 17252100 17252400 0.4649 81 chr10 17518200 17518500 0.6523 59 chr10 17628900 17629200 0.4835 72 chr10 17631000 17631600 0.0536 47 chr10 17720400 17721600 0.1718 89 chr10 17723700 17724000 0.5382 57 chr10 18031500 18033300 0.0421 76 chr10 18035100 18035400 0.0421 76 chr10 18630000 18630300 0.3761 79 chr10 18631500 18631800 0.3761 79 chr10 19088700 19093800 0 101 chr10 19160100 19161300 0.0143 67 chr10 19238100 19238700 0 52 chr10 19284600 19287000 0.1409 71 chr10 19581600 19583400 0.0125 68 chr10 19741200 19741500 0.521 72 chr10 20538300 20539800 0.1201 69 chr10 20570400 20571600 0.2321 73 chr10 20752200 20757000 0 89 chr10 20940300 20940600 0.4934 44 chr10 21322500 21323100 0.0582 87 chr10 21430500 21431100 0.0126 73 chr10 21717600 21717900 0.6058 55 chr10 22062900 22063200 0.4102 32 chr10 22124100 22129200 0.0533 80 chr10 22403700 22405800 0.0084 80 chr10 22407900 22408500 0.0084 80 chr10 23152500 23154600 0.0388 98 chr10 23331300 23331600 0.5197 21 chr10 23773200 23773500 0.374 71 chr10 23790000 23790300 0.5833 53 chr10 24268500 24269100 0.29 62 chr10 24655500 24657900 0.22 66 chr10 24809100 24809400 0.4005 25 chr10 25247400 25248000 0.19 81 chr10 25249800 25251900 0.19 81 chr10 25429800 25430100 0.3705 61 chr10 25472100 25472400 0.5113 51 chr10 25490400 25490700 0.6832 46 chr10 25515600 25520400 0.0086 81 chr10 26006700 26007000 0.3976 75 chr10 26892000 26894100 0.108 98 chr10 27281100 27282600 0.2201 59 chr10 27355200 27355500 0.2879 77 chr10 27443400 27444000 0.551 47 chr10 27823800 27824100 0.2793 75 chr10 27846600 27846900 0.3416 50 chr10 27873000 27873600 0.192 64 chr10 27968100 27969000 0.2287 74 chr10 28522500 28522800 0.3441 60 chr10 29306400 29306700 0.4661 35 chr10 29423400 29423700 0 28 chr10 29510700 29511000 0.6733 57 chr10 29697000 29698500 0.1826 44 chr10 30642900 30643200 0.6777 63 chr10 30945600 30946200 0.089 79 chr10 30950700 30951000 0.0273 86 chr10 30952500 30953400 0.0273 86 chr10 31109400 31109700 0.2976 58 chr10 31306500 31306800 0.4507 64 chr10 31444200 31444500 0.0917 84 chr10 31445700 31446000 0.0917 84 chr10 31447200 31448400 0.0917 84 chr10 31470300 31471800 0.212 93 chr10 31473000 31473900 0.212 93 chr10 31968900 31971600 0 184 chr10 32024100 32024400 0.5109 42 chr10 32416800 32417100 0.2795 16 chr10 32660100 32661300 0.2938 75 chr10 32775900 32776200 0.3486 51 chr10 32900400 32901300 0.192 49 chr10 33510900 33516900 0 74 chr10 34395600 34395900 0.4793 33 chr10 35476500 35479500 0.2008 84 chr10 35549700 35550300 0.6053 47 chr10 35667300 35667600 0.5315 117 chr10 35678100 35678400 0.3602 65 chr10 35859900 35861400 0.4388 80 chr10 36011100 36012000 0 21 chr10 36123000 36123300 0.5115 45 chr10 36401400 36402000 0.3715 95 chr10 37066200 37066800 0.1362 70 chr10 37102500 37104600 0.0031 54 chr10 37111800 37113300 0.0005 68 chr10 37163100 37164000 0.0044 62 chr10 37166400 37177800 0 79 chr10 37179600 37182900 0 70 chr10 37184100 37189800 0 78 chr10 37606200 37606500 0.2978 69 chr10 37900500 37902900 0.2272 71 chr10 37998300 37998600 0.3758 72 chr10 38000100 38000700 0.3758 72 chr10 38262900 38265600 0.0095 79 chr10 38272500 38272800 0.3282 58 chr10 38328900 38329200 0.3941 64 chr10 38364000 38364300 0.574 72 chr10 38399700 38400000 0.4826 65 chr10 38408700 38409000 0.4401 81 chr10 38418600 38418900 0.0213 63 chr10 38424600 38424900 0.1032 44 chr10 38431500 38431800 0.4432 82 chr10 38457000 38457300 0.6009 46 chr10 38463000 38465100 0.0115 61 chr10 38468100 38468400 0.1549 67 chr10 38469900 38470200 0.1549 67 chr10 38476200 38476500 0.1565 72 chr10 38481900 38482200 0.3004 88 chr10 38484000 38507100 0.1539 3073 chr10 38508300 38511000 0.2608 375 chr10 38512800 38526600 0.2203 557 chr10 38573100 38582100 0.1381 2536 chr10 38588400 38588700 0.6925 101 chr10 38618100 38618400 0.4339 86 chr10 38623800 38624100 0.5451 91 chr10 38633700 38634000 0.5584 60 chr10 38636700 38637900 0.2891 94 chr10 38640300 38640600 0.5314 105 chr10 38667000 38667300 0.4648 94 chr10 38750100 38750700 0.3225 83 chr10 38759700 38760000 0.3707 67 chr10 38783400 38783700 0.307 231 chr10 38785200 38795700 0.1933 322 chr10 38799600 38802000 0.3061 342 chr10 38803200 38810100 0.3817 194 chr10 38811600 38812200 0.2173 323 chr10 38813400 38818200 0.2173 323 chr10 38820900 38823300 0.3576 184 chr10 38825700 38827200 0.277 242 chr10 38828700 38829000 0.6759 83 chr10 38830200 38906100 0 1407 chr10 38911500 38913300 0.0971 478 chr10 38918100 38920500 0.2128 2075 chr10 38943900 38944200 0.6212 116 chr10 38949900 38950200 0.6887 93 chr10 38977800 38978400 0.5293 71 chr10 39183300 39183600 0.3024 31 chr10 39334500 39334800 0.4667 52 chr10 39427500 39428700 0.5999 129 chr10 39454800 39455100 0.6628 52 chr10 39459600 39459900 0.6292 50 chr10 39466500 39470400 0.0005 60 chr10 39480000 39480300 0.3149 50 chr10 39485400 39485700 0.6179 175 chr10 39496200 39496500 0.6634 160 chr10 39506700 39507000 0.688 73 chr10 39508500 39514200 0 91 chr10 39533400 39533700 0.6327 83 chr10 39559800 39560100 0.3686 14 chr10 39568500 39569100 0.2527 84 chr10 39575100 39577500 0.1422 157 chr10 39579600 39579900 0.2989 42 chr10 39582600 39582900 0.4612 14 chr10 39600600 39600900 0.6042 26 chr10 39606300 39607500 0 49 chr10 39609600 39609900 0.1253 16 chr10 39619800 39620100 0 58 chr10 39625500 39625800 0 22 chr10 39636000 39636300 0.0225 44 chr10 39687600 39687900 0.1457 19 chr10 39691500 39691800 0.5827 39 chr10 39700800 39702000 0 16 chr10 39708300 39708900 0 17 chr10 39711300 39712500 0 127 chr10 39717600 39717900 0 14 chr10 39719100 39720600 0 145 chr10 39721800 39722400 0 16 chr10 39725700 39728400 0 103 chr10 39735000 39735300 0 19 chr10 39736500 39736800 0.6241 68 chr10 39738600 39738900 0 24 chr10 39744900 39746400 0 79 chr10 39751800 39752100 0.0262 25 chr10 39753600 39755400 0.1383 31 chr10 39757200 39758700 0.0437 78 chr10 39762600 39763800 0 24 chr10 39770400 39771900 0 60 chr10 39773100 39777900 0 60 chr10 39779700 39780000 0 18 chr10 39786000 39786900 0 52 chr10 39795000 39795300 0 25 chr10 39799500 39800100 0.1899 23 chr10 39802500 39805200 0 19 chr10 39809700 39810000 0.2306 59 chr10 39812700 39813300 0 44 chr10 39819900 39820200 0 16 chr10 39825900 39826200 0.2293 26 chr10 39828900 39829200 0 11 chr10 39830700 39831300 0.1286 42 chr10 39834300 39836400 0 185 chr10 39837600 39837900 0 34 chr10 39843900 39844200 0 78 chr10 39849900 39851400 0 10 chr10 39855900 39856500 0.0614 87 chr10 39858900 39860400 0 73 chr10 39861900 39863400 0 19 chr10 39869700 39870600 0 37 chr10 39871800 39872100 0 31 chr10 39874200 39874500 0 40 chr10 39876300 39876900 0 40 chr10 39882600 39882900 0 12 chr10 39884400 39884700 0 17 chr10 39892500 39894000 0.1654 27 chr10 39897300 39898200 0 53 chr10 39900600 39900900 0 43 chr10 39904200 39906300 0 70 chr10 39911100 39911400 0.3556 13 chr10 39912600 39912900 0 28 chr10 39914700 39916500 0.0485 69 chr10 39918000 39918900 0 15 chr10 39921000 39921300 0 27 chr10 39924300 39924600 0 16 chr10 39927000 39927300 0 26 chr10 39928500 39930300 0 36 chr10 39933900 39934200 0 17 chr10 39936000 39941400 0 840 chr10 39945900 39947700 0 25 chr10 39953100 39956400 0 263 chr10 39958800 39959100 0 3165 chr10 39960300 39970200 0 3165 chr10 39975000 39975300 0.0733 36 chr10 39980100 39981600 0 53 chr10 39983100 39987900 0 1012 chr10 39989400 39994500 0 465 chr10 39996900 40002900 0 465 chr10 40004400 40005900 0 294 chr10 40011000 40011300 0.555 24 chr10 40019400 40021500 0 1990 chr10 40024200 40025400 0.0024 289 chr10 40029300 40029900 0 57 chr10 40046700 40048200 0 280 chr10 40059600 40061100 0 74 chr10 40065300 40074000 0 887 chr10 40076100 40087800 0 773 chr10 40090500 40090800 0 27 chr10 40097100 40102200 0 1747 chr10 40104600 40105800 0.0047 137 chr10 40107300 40107900 0.2694 146 chr10 40117800 40118100 0 36 chr10 40127400 40130400 0 2060 chr10 40134600 40139400 0 1903 chr10 40141500 40142400 0 203 chr10 40145100 40145700 0 46 chr10 40147500 40150200 0 267 chr10 40157400 40159200 0.0003 846 chr10 40162800 40163100 0 11 chr10 40167000 40167600 0 82 chr10 40169700 40170000 0 19 chr10 40183500 40188000 0 311 chr10 40191900 40193400 0 248 chr10 40200600 40209000 0 2419 chr10 40213200 40213800 0.0559 46 chr10 40216200 40224300 0 377 chr10 40227600 40229100 0 254 chr10 40232400 40232700 0.0308 32 chr10 40241700 40242000 0.0163 56 chr10 40246200 40248900 0 329 chr10 40257900 40258200 0.4353 15 chr10 40262400 40263600 0 516 chr10 40265700 40269300 0 1958 chr10 40270800 40271100 0 12 chr10 40276800 40280700 0 1970 chr10 40283100 40291500 0 683 chr10 40294500 40294800 0.0148 32 chr10 40301100 40302900 0 73 chr10 40314600 40316100 0 479 chr10 40318500 40319100 0 55 chr10 40325400 40326900 0.0012 142 chr10 40332600 40338600 0 445 chr10 40344600 40347300 0 564 chr10 40364400 40369200 0 1934 chr10 40370700 40379400 0 552 chr10 40387500 40401000 0 991 chr10 40407900 40410000 0.0092 738 chr10 40411200 40416300 0 2950 chr10 40420800 40422600 0.0088 247 chr10 40425600 40429500 0 186 chr10 40435500 40437900 0 373 chr10 40440900 40442700 0 686 chr10 40445700 40446000 0.0311 58 chr10 40447200 40448400 0 79 chr10 40453200 40456500 0 404 chr10 40461000 40463400 0 904 chr10 40465200 40467900 0 907 chr10 40476000 40481700 0 965 chr10 40482900 40487400 0 965 chr10 40488600 40494600 0 249 chr10 40495800 40498200 0 255 chr10 40502100 40519200 0 615 chr10 40524600 40525500 0 239 chr10 40532100 40533000 0.001 110 chr10 40537500 40548600 0 634 chr10 40550700 40551000 0 634 chr10 40555200 40558500 0 3094 chr10 40567500 40568100 0.0021 321 chr10 40574700 40576500 0 226 chr10 40578300 40580700 0 169 chr10 40582200 40582800 0 120 chr10 40584000 40584300 0.1375 50 chr10 40586400 40613100 0 3793 chr10 40614600 40620600 0 1089 chr10 40626900 40627500 0.0556 155 chr10 40633200 40634100 0 477 chr10 40639800 40641000 0 191 chr10 40642800 40651200 0 674 chr10 40652400 40653300 0 143 chr10 40657500 40671600 0 400 chr10 40673100 40674000 0.0118 431 chr10 40676100 40683900 0 759 chr10 40685400 40686300 0 188 chr10 40687800 40689300 0 222 chr10 40691100 40692000 0 82 chr10 40700700 40701300 0.35 134 chr10 40704600 40706700 0.0041 275 chr10 40709700 40710000 0.0914 28 chr10 40711500 40718100 0 422 chr10 40720500 40721400 0 215 chr10 40722900 40723500 0 20 chr10 40726500 40730100 0 738 chr10 40733400 40737300 0 633 chr10 40739100 40740900 0 158 chr10 40743300 40743600 0 26 chr10 40744800 40745700 0 157 chr10 40748700 40749300 0 178 chr10 40751100 40753500 0 412 chr10 40755900 40758300 0 340 chr10 40759800 40766700 0 483 chr10 40767900 40772100 0 599 chr10 40773300 40775700 0 229 chr10 40781400 40785300 0 262 chr10 40786500 40787700 0.0001 181 chr10 40790400 40794000 0 666 chr10 40795500 40808700 0 513 chr10 40810800 40812000 0 646 chr10 40814400 40818900 0 373 chr10 40821600 40823400 0 400 chr10 40827300 40828800 0 1015 chr10 40830000 40839900 0 1015 chr10 40841400 40855500 0 1015 chr10 40857000 40857300 0.4777 41 chr10 40862100 40864500 0 231 chr10 40866300 40867500 0 102 chr10 40869900 40871400 0 504 chr10 40873200 40873500 0 34 chr10 40874700 40876200 0 213 chr10 40878000 40881000 0 525 chr10 40882500 40884600 0 273 chr10 40886100 40886400 0 10 chr10 40888500 40890600 0.008 184 chr10 40891800 40898700 0 1649 chr10 40900200 40907100 0 359 chr10 40908300 40908900 0.1968 182 chr10 40911600 40912800 0 261 chr10 40915500 40915800 0.5614 78 chr10 40917600 40920900 0 308 chr10 40923900 40927200 0 1318 chr10 40928700 40929600 0 1318 chr10 40931400 40943400 0 803 chr10 40944900 40949700 0 241 chr10 40954200 40958400 0 548 chr10 40959900 40969200 0 548 chr10 40970400 40972200 0 624 chr10 40973400 40984500 0 2674 chr10 40986000 40989600 0 571 chr10 40990800 40992900 0 782 chr10 40994100 40994700 0 135 chr10 40996800 40997400 0.2009 60 chr10 40998600 41001900 0 473 chr10 41003100 41003400 0 473 chr10 41004600 41009700 0 259 chr10 41010900 41014200 0 379 chr10 41015400 41018400 0 357 chr10 41019900 41022300 0 357 chr10 41025300 41030400 0 260 chr10 41031600 41033400 0 260 chr10 41034900 41039400 0 822 chr10 41042100 41048700 0 356 chr10 41049900 41055600 0 356 chr10 41056800 41057400 0 356 chr10 41060100 41063100 0 160 chr10 41066100 41079300 0 541 chr10 41080800 41081100 0.127 80 chr10 41082300 41084700 0 465 chr10 41086500 41090700 0 1383 chr10 41091900 41092800 0.2187 127 chr10 41096400 41096700 0 130 chr10 41098200 41099400 0 130 chr10 41100600 41101800 0 143 chr10 41104500 41106000 0.0015 530 chr10 41107500 41108100 0 337 chr10 41109300 41112900 0 337 chr10 41114700 41115000 0 36 chr10 41117400 41119500 0 474 chr10 41120700 41121600 0 474 chr10 41124300 41126700 0 2057 chr10 41128200 41134200 0 2057 chr10 41135400 41138100 0 410 chr10 41139900 41140500 0 410 chr10 41143800 41145600 0 506 chr10 41148900 41152800 0 248 chr10 41154000 41158800 0 435 chr10 41160600 41160900 0 29 chr10 41162400 41164800 0 286 chr10 41166000 41166900 0 180 chr10 41169600 41183400 0 517 chr10 41185200 41189100 0 882 chr10 41190600 41207700 0 882 chr10 41208900 41212500 0 268 chr10 41214900 41220000 0 188 chr10 41221800 41224200 0 114 chr10 41225400 41229300 0 68 chr10 41231400 41232900 0 468 chr10 41235000 41237700 0 437 chr10 41239200 41241000 0 114 chr10 41243400 41251200 0 437 chr10 41255100 41258700 0 111 chr10 41260800 41268900 0 1993 chr10 41270100 41273400 0 194 chr10 41274900 41293500 0 629 chr10 41295600 41296500 0 500 chr10 41299500 41301300 0 213 chr10 41302800 41306100 0 456 chr10 41307600 41312700 0 456 chr10 41313900 41314500 0 276 chr10 41315700 41316600 0 53 chr10 41319900 41323200 0 491 chr10 41326200 41327700 0 265 chr10 41328900 41336400 0 327 chr10 41338500 41342700 0 197 chr10 41344500 41356200 0 189 chr10 41358900 41361000 0 117 chr10 41364300 41368500 0 204 chr10 41370300 41374500 0 341 chr10 41376000 41378700 0 499 chr10 41379900 41384700 0 499 chr10 41387400 41391000 0 207 chr10 41395200 41397900 0 85 chr10 41399400 41407200 0 2845 chr10 41408400 41419800 0 2845 chr10 41421600 41422800 0 539 chr10 41424000 41430900 0 539 chr10 41432700 41433000 0 539 chr10 41436300 41448300 0 990 chr10 41449500 41450400 0 990 chr10 41454600 41456700 0 310 chr10 41460300 41461800 0 275 chr10 41466300 41466900 0 89 chr10 41468700 41469000 0 89 chr10 41470800 41478300 0 285 chr10 41481600 41484300 0 495 chr10 41488800 41490000 0 78 chr10 41493900 41561100 0 1191 chr10 41562300 41579100 0 1191 chr10 41580600 41582100 0 1191 chr10 41583300 41592900 0.1571 454 chr10 41693700 41706300 0 126 chr10 41713500 41714100 0.216 97 chr10 41843700 41844300 0.5642 288 chr10 41845500 41850000 0.3464 689 chr10 41851500 41855400 0.1896 1221 chr10 41856900 41916300 0.0388 17851 chr10 42066000 42095100 0.0028 4510 chr10 42097200 42098100 0.5658 338 chr10 42099600 42100200 0.3268 1017 chr10 42101400 42102000 0.4763 489 chr10 42103200 42105000 0.4763 489 chr10 42128100 42128400 0.1748 167 chr10 42129900 42130500 0.1748 167 chr10 42133800 42134100 0.377 69 chr10 42152100 42153600 0.5628 182 chr10 42165900 42166200 0.4602 313 chr10 42177000 42177900 0.5316 135 chr10 42185400 42185700 0.3882 72 chr10 42189300 42189600 0.3905 60 chr10 42206100 42206400 0.5031 44 chr10 42210000 42210300 0.6773 66 chr10 42211500 42213900 0.0506 54 chr10 42217200 42218400 0.4472 69 chr10 42219600 42219900 0.3281 30 chr10 42243300 42243900 0.435 33 chr10 42255900 42256200 0.6357 135 chr10 42261900 42262200 0.4039 116 chr10 42277200 42277500 0.4906 46 chr10 42280200 42281100 0.3768 188 chr10 42283800 42284100 0.5566 87 chr10 42294900 42321600 0.0708 1830 chr10 42436500 42441300 0.2156 71 chr10 42448200 42449400 0.4002 79 chr10 42530700 42531000 0.22 69 chr10 42669900 42670200 0.1866 68 chr10 42795000 42795300 0.6387 49 chr10 42995100 42995400 0.0872 60 chr10 43422600 43423200 0.0068 44 chr10 44140800 44141100 0.4141 48 chr10 44148000 44148300 0.2003 56 chr10 44222100 44223300 0 58 chr10 44272200 44272500 0.2517 91 chr10 44442300 44442900 0.3891 66 chr10 44483100 44486700 0.215 59 chr10 44501400 44501700 0.285 36 chr10 44534400 44534700 0.3913 45 chr10 44662800 44663100 0.4803 25 chr10 45009600 45011400 0.0283 76 chr10 45026400 45026700 0.3592 72 chr10 45679200 45693300 0.0073 82 chr10 45694500 45696000 0.0073 82 chr10 45697200 45699900 0.0073 82 chr10 45702600 45703800 0.1367 70 chr10 45711600 45711900 0.1417 40 chr10 45719400 45719700 0.5505 64 chr10 45726300 45726600 0.3254 59 chr10 45729900 45731700 0.3601 62 chr10 45733200 45733500 0.4722 88 chr10 45735300 45735600 0.4722 88 chr10 45737100 45738600 0.0786 69 chr10 45739800 45740400 0.0786 69 chr10 45743700 45746400 0.2021 72 chr10 45747600 45748200 0.1064 58 chr10 45752700 45753900 0.1755 78 chr10 45756000 45757500 0.1755 78 chr10 45759000 45760800 0.0297 59 chr10 45763200 45768000 0.0579 92 chr10 45770100 45771900 0.3141 68 chr10 45773100 45782700 0 74 chr10 45786900 45787500 0.3987 61 chr10 45794400 45794700 0.5027 33 chr10 45822600 45823800 0.0303 117 chr10 45825900 45837300 0.0303 117 chr10 45838800 45843600 0.0303 117 chr10 45845100 45846900 0.1667 77 chr10 45848100 45848400 0.1679 66 chr10 45850200 45850500 0.1679 66 chr10 45861000 45863400 0.2767 68 chr10 45867900 45868500 0.4272 73 chr10 45873900 45874500 0.1613 66 chr10 45880800 45882300 0.0823 73 chr10 45884700 45886500 0.0823 73 chr10 45888600 45892500 0.0823 73 chr10 45894000 45895800 0.0823 73 chr10 45898500 45898800 0.0823 73 chr10 45901500 45904200 0 94 chr10 45905700 45906900 0 94 chr10 45908400 45911100 0 94 chr10 45912900 45914400 0.2698 62 chr10 45915600 45915900 0.2698 62 chr10 45929100 45929700 0.3259 50 chr10 45936000 45936300 0.1752 21 chr10 45937500 45937800 0.5111 42 chr10 45954600 45955200 0.3906 57 chr10 45959700 45961800 0.0874 55 chr10 45970500 45971100 0.396 66 chr10 45977100 45977400 0.4301 54 chr10 45995400 45995700 0.1535 60 chr10 46104900 46105200 0.5239 49 chr10 46108500 46110300 0 82 chr10 46111500 46119900 0 82 chr10 46121400 46131600 0 82 chr10 46132800 46133700 0.0398 76 chr10 46134900 46137300 0.0398 76 chr10 46138800 46145700 0 103 chr10 46146900 46150200 0 103 chr10 46151400 46153800 0.0024 64 chr10 46155000 46163700 0.0528 88 chr10 46205100 46215300 0 78 chr10 46218600 46218900 0.4653 15 chr10 46249200 46249800 0.567 68 chr10 46281300 46281600 0.4132 65 chr10 46312500 46312800 0.2226 68 chr10 46332900 46335600 0.0563 66 chr10 46337100 46337400 0.0563 66 chr10 46340100 46345800 0.1533 66 chr10 46347900 46353300 0 98 chr10 46354500 46355400 0 98 chr10 46356600 46357500 0 98 chr10 46359000 46359300 0.2871 59 chr10 46361100 46362600 0.0265 82 chr10 46366200 46366800 0.0126 81 chr10 46368600 46374300 0.0126 81 chr10 46375800 46389600 0 100 chr10 46390800 46392900 0.1385 66 chr10 46394700 46395900 0.3509 62 chr10 46397400 46406700 0.0137 82 chr10 46411800 46413000 0.0321 68 chr10 46414800 46417200 0.0398 60 chr10 46418700 46425300 0 100 chr10 46426800 46429200 0 100 chr10 46431300 46431600 0.305 43 chr10 46434300 46434900 0.0192 90 chr10 46436100 46439100 0.0192 90 chr10 46440300 46441500 0.0192 90 chr10 46444500 46446600 0 78 chr10 46447800 46450800 0 78 chr10 46452300 46458000 0 79 chr10 46459200 46482900 0 90 chr10 46484400 46514100 0 90 chr10 46561500 46568700 0.0045 78 chr10 46569900 46577700 0.0045 78 chr10 46578900 46596900 0 99 chr10 46598100 46633800 0 75 chr10 46635000 46638900 0.019 59 chr10 46640700 46641300 0.02 68 chr10 46642800 46644900 0.02 68 chr10 46647600 46651200 0.0014 63 chr10 46652400 46653600 0.0014 63 chr10 46655700 46657500 0 70 chr10 46659300 46664700 0 70 chr10 46666500 46667100 0.2339 59 chr10 46672500 46673700 0.3847 55 chr10 46675200 46675800 0.1634 50 chr10 46677300 46680300 0.0599 74 chr10 46682400 46683900 0.0599 74 chr10 46685100 46686900 0 62 chr10 46688700 46689900 0.349 70 chr10 46691100 46694100 0 58 chr10 46696200 46712100 0 80 chr10 46714800 46716000 0.1993 65 chr10 46722600 46724100 0.2929 87 chr10 46725300 46725600 0.4839 64 chr10 46726800 46727100 0.2153 62 chr10 46728900 46739400 0 97 chr10 46741500 46742700 0 97 chr10 46743900 46744500 0.3426 60 chr10 46745700 46748700 0.0795 77 chr10 46754400 46757700 0 74 chr10 46760100 46762800 0.0332 83 chr10 46764300 46767000 0.0332 83 chr10 46770900 46773300 0.2467 84 chr10 46776000 46778100 0.1498 82 chr10 46783200 46783500 0.3848 37 chr10 46790400 46791000 0.292 62 chr10 46792500 46793100 0.1416 72 chr10 46794300 46794600 0.1416 72 chr10 46800600 46800900 0.1804 68 chr10 46802700 46803000 0.3417 56 chr10 46812300 46813500 0.2502 81 chr10 46816500 46817400 0.267 76 chr10 46818600 46819200 0.267 76 chr10 46821300 46825800 0.0012 105 chr10 46827000 46829100 0.0012 105 chr10 46830300 46833000 0.0012 105 chr10 46834200 46838100 0.0012 105 chr10 46839900 46850100 0.0007 98 chr10 46851300 46852200 0 76 chr10 46853400 46859700 0.0013 89 chr10 46862100 46868100 0.0013 89 chr10 46869300 46871100 0.3149 62 chr10 46872600 46872900 0.2446 67 chr10 46879500 46880100 0.0026 80 chr10 46881600 46887000 0.0026 80 chr10 46888200 46889700 0.0026 80 chr10 46892700 46897800 0 83 chr10 46899600 46900500 0 83 chr10 46901700 46922700 0 83 chr10 46924200 46924800 0.0282 68 chr10 46926900 46931400 0.0428 82 chr10 46932600 46935600 0 85 chr10 46938300 46946700 0 85 chr10 46948200 46948500 0 91 chr10 46949700 46950300 0 91 chr10 46951800 46953300 0 91 chr10 46954500 46982700 0 91 chr10 46984500 46991700 0 73 chr10 47005200 47006700 0.5332 56 chr10 47407800 47408100 0.4509 69 chr10 47459400 47460300 0.2185 64 chr10 47461800 47464200 0.0635 88 chr10 47466900 47468700 0.1602 75 chr10 47470200 47492100 0 116 chr10 47493900 47494800 0 116 chr10 47496300 47496600 0 116 chr10 47498400 47501100 0.152 99 chr10 47503500 47521200 0 89 chr10 47522400 47525400 0 80 chr10 47526600 47548200 0 80 chr10 47549400 47550600 0 80 chr10 47562300 47570100 0 89 chr10 47571900 47572200 0 89 chr10 47573400 47576400 0 89 chr10 47577600 47580000 0 89 chr10 47582400 47586300 0 84 chr10 47588100 47588400 0 84 chr10 47591700 47594700 0.1187 67 chr10 47595900 47596500 0 91 chr10 47597700 47599500 0 91 chr10 47600700 47611800 0 91 chr10 47613300 47615100 0 68 chr10 47616300 47621400 0 68 chr10 47623500 47625600 0 47 chr10 47628900 47631000 0 89 chr10 47632800 47644200 0 89 chr10 47645400 47649300 0.0095 68 chr10 47650500 47650800 0.0095 68 chr10 47653500 47655300 0.0026 65 chr10 47656500 47658000 0.0922 75 chr10 47660100 47663100 0.0922 75 chr10 47664600 47665200 0.0922 75 chr10 47668200 47668500 0.4707 61 chr10 47672100 47672400 0.4524 43 chr10 47674800 47675400 0.3296 63 chr10 47677500 47679300 0 83 chr10 47680800 47682600 0.215 65 chr10 47685600 47686200 0.4749 63 chr10 47688000 47689200 0 70 chr10 47690400 47692800 0 70 chr10 47697300 47698500 0.0789 78 chr10 47700600 47702100 0.0532 68 chr10 47704200 47706600 0.0532 68 chr10 47708100 47719800 0 96 chr10 47721600 47726400 0 96 chr10 47727600 47734800 0 96 chr10 47736000 47736600 0 96 chr10 47737800 47742900 0 96 chr10 47745000 47747700 0 91 chr10 47748900 47749200 0 91 chr10 47750400 47762700 0 91 chr10 47764500 47776500 0 92 chr10 47778300 47780400 0 92 chr10 47870400 47894100 0 91 chr10 47895300 47936700 0 91 chr10 47937900 47938500 0.0375 78 chr10 47939700 47940000 0.0375 78 chr10 47944200 47944500 0.6086 73 chr10 47945700 47948700 0.0863 83 chr10 47949900 47950200 0.5277 60 chr10 47955600 47956500 0.1099 71 chr10 47960100 47969700 0 89 chr10 47971500 47973600 0.0257 81 chr10 47976000 47977200 0 82 chr10 47978400 47979000 0 82 chr10 47980500 47982000 0 82 chr10 47983200 47985000 0 82 chr10 47986800 47991300 0 82 chr10 47993100 47993400 0 82 chr10 47995500 47997000 0 102 chr10 47998200 48000600 0 102 chr10 48001800 48003000 0 102 chr10 48004500 48067800 0 102 chr10 48069000 48100200 0 88 chr10 48101400 48103500 0 88 chr10 48105000 48119100 0 88 chr10 48120600 48124800 0.0044 63 chr10 48127200 48128100 0 85 chr10 48129300 48150000 0 85 chr10 48151200 48152100 0.0058 103 chr10 48153900 48159000 0.0058 103 chr10 48162000 48163500 0.0128 81 chr10 48164700 48173400 0.0128 81 chr10 48174900 48175200 0.4416 50 chr10 48179100 48179400 0.191 65 chr10 48180600 48180900 0.502 69 chr10 48675900 48676200 0.5334 11 chr10 48709200 48709500 0.5153 33 chr10 49126500 49127700 0.3559 79 chr10 49247400 49247700 0.379 71 chr10 49250100 49250400 0.5498 119 chr10 49847700 49848600 0.3582 46 chr10 49850100 49852800 0.0404 67 chr10 49854000 49856100 0.0404 67 chr10 49857600 49864800 0.0404 67 chr10 49867200 49867800 0.4217 54 chr10 49870800 49875900 0 71 chr10 49877400 49880100 0 71 chr10 49882200 49884900 0.2658 58 chr10 49898400 49898700 0.4349 60 chr10 49923900 49924200 0.2443 60 chr10 49930200 49931100 0.0828 79 chr10 49940100 49940700 0.4284 54 chr10 49946700 49947000 0.4539 60 chr10 49961700 49963200 0.2777 76 chr10 49967700 49968000 0.4278 69 chr10 49972500 49974900 0.2269 60 chr10 49977300 49977600 0.4861 37 chr10 49987800 49988100 0.4156 72 chr10 49996500 50006100 0 101 chr10 50007300 50007600 0 101 chr10 50010000 50010300 0.5815 79 chr10 50012700 50013900 0.2203 74 chr10 50034600 50034900 0.4511 79 chr10 50050500 50050800 0.2541 65 chr10 50067000 50067300 0.3603 57 chr10 50070600 50072400 0.2618 51 chr10 50073600 50074200 0.131 65 chr10 50077800 50079300 0.0619 60 chr10 50080500 50081100 0.1558 50 chr10 50084700 50087100 0.1311 69 chr10 50088600 50088900 0.1841 65 chr10 50091000 50091300 0.1841 65 chr10 50093100 50094000 0.1842 84 chr10 50096100 50097900 0.0409 73 chr10 50099400 50100000 0.2764 49 chr10 50104800 50108700 0 77 chr10 50110800 50123100 0 92 chr10 50125200 50125500 0.4979 54 chr10 50127600 50127900 0.3333 63 chr10 50144400 50145000 0.1163 52 chr10 50149800 50150100 0.3459 12 chr10 50152500 50153700 0.2923 31 chr10 50155200 50155500 0.3463 52 chr10 50160600 50161200 0.1113 52 chr10 50163600 50166900 0.0345 73 chr10 50168400 50168700 0.0345 73 chr10 50171700 50172900 0.0083 51 chr10 50174100 50174400 0.0083 51 chr10 50181900 50184600 0 77 chr10 50186100 50193000 0 77 chr10 50195400 50196900 0.4014 75 chr10 50267100 50267400 0.477 42 chr10 50297100 50297700 0.404 79 chr10 50322600 50322900 0.5046 48 chr10 50701800 50702100 0.4594 63 chr10 50707200 50710200 0.0217 73 chr10 50712600 50713800 0.3465 67 chr10 50745000 50746800 0.0951 58 chr10 50748900 50756100 0 75 chr10 50757900 50760000 0.0236 85 chr10 50769600 50769900 0.3382 75 chr10 50772300 50773800 0.1026 55 chr10 50775600 50776500 0.3633 80 chr10 50779200 50779500 0.2049 77 chr10 51512400 51514200 0.1026 74 chr10 52181700 52182600 0.0267 64 chr10 52233300 52239300 0.0148 74 chr10 52681500 52681800 0.3897 27 chr10 52834200 52834500 0.6014 14 chr10 53495700 53497800 0.1425 93 chr10 53761800 53762400 0.2137 31 chr10 53793900 53794200 0.3424 97 chr10 54027000 54028800 0.2289 83 chr10 54622500 54622800 0.2745 39 chr10 54717000 54717900 0.4302 61 chr10 54735600 54735900 0.074 26 chr10 54757200 54757500 0.285 49 chr10 54825300 54825600 0.1868 87 chr10 55069500 55069800 0.1996 89 chr10 55157400 55157700 0.465 69 chr10 55542600 55543200 0.2313 45 chr10 55589700 55590000 0.4491 55 chr10 55603800 55607700 0.1627 87 chr10 55683600 55688100 0.1379 65 chr10 55695600 55695900 0.4433 44 chr10 55942200 55942500 0.3104 41 chr10 56187600 56188500 0.334 92 chr10 56191200 56191500 0.3125 66 chr10 56395200 56395800 0.4393 87 chr10 56442600 56442900 0.4592 53 chr10 56526600 56527500 0.3669 62 chr10 56709600 56709900 0.1662 63 chr10 57196800 57197100 0.382 67 chr10 57255300 57255900 0.5808 62 chr10 57537000 57537300 0.3529 50 chr10 58148100 58148400 0.5689 53 chr10 58245900 58247400 0.1822 61 chr10 58319400 58319700 0.3025 439 chr10 58653900 58655700 0.0362 58 chr10 59423700 59424000 0.4241 62 chr10 59540400 59540700 0.488 84 chr10 59605800 59606100 0.3878 29 chr10 59783100 59784000 0.3956 51 chr10 59882100 59882700 0.364 75 chr10 60180300 60180600 0.0413 1226 chr10 60469200 60469500 0.6693 28 chr10 60640200 60640800 0.4014 87 chr10 60642000 60642300 0.4014 87 chr10 60694800 60695100 0.3116 70 chr10 60696600 60697200 0.3116 70 chr10 61055700 61057200 0.1837 108 chr10 61334400 61334700 0.5644 68 chr10 61680300 61680600 0.1067 12 chr10 62445000 62445300 0.3258 95 chr10 62500200 62500500 0.5216 69 chr10 62603400 62608200 0.1556 76 chr10 62677500 62677800 0.1159 78 chr10 62947200 62947500 0.4468 60 chr10 64123500 64124700 0.2689 78 chr10 64371900 64372200 0.2402 65 chr10 64440000 64440300 0.5157 72 chr10 64836300 64836600 0.186 61 chr10 64925400 64929900 0.0592 79 chr10 65391300 65392200 0.3999 36 chr10 65524200 65524800 0.4668 21 chr10 67233300 67235100 0.1944 97 chr10 67388100 67391100 0.1988 95 chr10 67561200 67561800 0.2682 64 chr10 67564800 67565700 0.2993 46 chr10 67578000 67578900 0.2308 89 chr10 67581900 67582500 0.2308 89 chr10 67673100 67673400 0.3333 66 chr10 67692300 67692600 0.0638 69 chr10 67705200 67705800 0.4653 75 chr10 67727100 67727400 0.6532 14 chr10 68521500 68521800 0.4786 53 chr10 69992100 69993900 0.0011 114 chr10 70686300 70688700 0.0127 103 chr10 71688600 71689200 0.4494 112 chr10 71759700 71760300 0.6628 39 chr10 71868600 71869200 0.4215 56 chr10 71875500 71875800 0.5415 74 chr10 73326300 73326600 0.3161 84 chr10 73328400 73329000 0.3161 84 chr10 73417800 73418100 0.461 57 chr10 73674000 73674300 0.2573 53 chr10 73677300 73685400 0 78 chr10 74220900 74221200 0.4598 88 chr10 75332400 75333900 0.3535 46 chr10 75479700 75480300 0.2357 52 chr10 75558600 75559200 0.5356 86 chr10 76221000 76221300 0.4034 51 chr10 76251300 76251600 0.6589 49 chr10 76587000 76591800 0 91 chr10 76601700 76602000 0.6308 47 chr10 76660800 76661100 0.3366 60 chr10 76819200 76819500 0.2842 44 chr10 76832700 76833000 0.2872 35 chr10 77041200 77041500 0.1875 23 chr10 77568300 77570400 0.2109 81 chr10 78089100 78094200 0 85 chr10 79332600 79332900 0.0906 81 chr10 79338000 79338600 0.1724 77 chr10 79504200 79504800 0.2228 69 chr10 79508400 79509900 0.2018 62 chr10 79512600 79512900 0.5955 53 chr10 79519200 79520100 0.0108 63 chr10 79524000 79524300 0.2115 50 chr10 79528200 79528500 0.2512 36 chr10 79536300 79536900 0.2277 81 chr10 79582800 79583100 0.6247 19 chr10 79654200 79654500 0.5154 85 chr10 79661400 79661700 0.2462 71 chr10 79673100 79673400 0.3082 54 chr10 79676700 79677000 0.0711 43 chr10 79696800 79698900 0.2473 68 chr10 79701600 79708500 0 99 chr10 79709700 79714800 0 118 chr10 79716600 79718100 0.0751 69 chr10 79723200 79723500 0.4055 71 chr10 79725900 79726200 0.5082 42 chr10 79727700 79728000 0.415 70 chr10 79735500 79738500 0.3153 73 chr10 79741800 79743600 0.0661 72 chr10 79752000 79752300 0.4616 63 chr10 79755300 79755600 0.3927 61 chr10 79758000 79758300 0.2759 52 chr10 79760700 79761000 0.5023 62 chr10 79762500 79762800 0.289 62 chr10 79767000 79767300 0.3418 49 chr10 79768500 79772400 0.0149 77 chr10 79774800 79775700 0.0376 73 chr10 79777800 79778100 0.0376 73 chr10 79780200 79783800 0.0376 73 chr10 79789200 79789500 0.311 77 chr10 79794600 79794900 0.1117 54 chr10 79797300 79797900 0.1138 53 chr10 79801200 79802100 0.2008 56 chr10 79804200 79804800 0.2008 56 chr10 79810800 79812300 0.1822 50 chr10 79813800 79815300 0.0701 61 chr10 79821000 79821300 0.1626 57 chr10 79835400 79836000 0.2406 63 chr10 79839900 79853100 0 102 chr10 79863900 79864200 0.3947 65 chr10 79871400 79872600 0.2904 69 chr10 79874700 79876200 0.2311 64 chr10 79877700 79878900 0.4953 71 chr10 79959000 79960500 0.4678 67 chr10 79965600 79967700 0.0689 105 chr10 80022300 80022600 0.1799 64 chr10 80025600 80025900 0.3292 54 chr10 80027400 80027700 0.5431 35 chr10 80038200 80038500 0.3008 79 chr10 80229900 80230200 0.5501 46 chr10 80232000 80232300 0.2277 54 chr10 80236200 80236500 0.3048 65 chr10 80240400 80241000 0.014 74 chr10 80250300 80251800 0.3234 80 chr10 80254800 80255400 0.1454 69 chr10 80479200 80479500 0.5774 56 chr10 80534400 80535300 0.2689 99 chr10 80722500 80724300 0.0092 78 chr10 80725800 80726100 0.0092 78 chr10 81710700 81714900 0.0058 78 chr10 81769200 81771000 0.1929 68 chr10 81856800 81857100 0.5424 28 chr10 82045200 82045500 0.0438 50 chr10 82046700 82047000 0.3917 37 chr10 82344600 82347300 0.2874 71 chr10 82348500 82348800 0.2874 71 chr10 82478100 82478700 0.3301 61 chr10 82647900 82648200 0.4983 51 chr10 82783200 82783500 0.3679 63 chr10 83628300 83628900 0.4617 67 chr10 83781600 83782200 0.0662 73 chr10 83783400 83785200 0.0662 73 chr10 84070800 84071400 0.0542 69 chr10 84281700 84282600 0.0289 89 chr10 84283800 84285600 0.0289 89 chr10 84731400 84731700 0.4257 63 chr10 84747600 84748200 0.3224 50 chr10 84756900 84761700 0.1431 69 chr10 84773400 84775500 0.0719 88 chr10 84777600 84778200 0.5549 48 chr10 84793800 84794400 0.4104 50 chr10 84858300 84859200 0.1554 84 chr10 85207200 85207500 0.3667 50 chr10 85355700 85361700 0 83 chr10 85404600 85404900 0.5069 57 chr10 85744500 85745700 0.0079 77 chr10 86075100 86075400 0.1788 77 chr10 86076900 86077200 0.1966 64 chr10 86274600 86274900 0.4013 52 chr10 86452800 86453100 0.5233 48 chr10 87152100 87152400 0.3621 69 chr10 87163500 87163800 0.4004 51 chr10 87174300 87174600 0.5652 57 chr10 87198300 87198600 0.2043 41 chr10 87219000 87221100 0.2363 70 chr10 87223500 87237000 0 94 chr10 87239100 87240300 0.0634 58 chr10 87245400 87245700 0 69 chr10 87246900 87247200 0 69 chr10 87248700 87259500 0 69 chr10 87260700 87261000 0 94 chr10 87262500 87308400 0 94 chr10 87311400 87311700 0.2744 56 chr10 87316500 87317100 0.0401 62 chr10 87319800 87320100 0.5191 49 chr10 87326400 87326700 0.1801 46 chr10 87333900 87334500 0.3291 66 chr10 87336300 87336600 0.5316 48 chr10 87340800 87341700 0.315 53 chr10 87347400 87347700 0.5078 45 chr10 87351900 87352200 0.1229 67 chr10 87356100 87369300 0 110 chr10 87385800 87386100 0.5346 37 chr10 87389100 87389400 0.4753 84 chr10 87390900 87391200 0.3894 64 chr10 87406200 87406500 0.3241 50 chr10 87418500 87419100 0.5429 49 chr10 87430200 87437100 0 104 chr10 87438600 87465900 0 104 chr10 87467100 87469200 0 75 chr10 87470400 87475500 0 75 chr10 87477000 87479700 0.0033 75 chr10 87481200 87486300 0.0033 75 chr10 87487800 87489300 0.2809 85 chr10 87490800 87491100 0.2809 85 chr10 88977300 88978200 0.0107 87 chr10 89320800 89321100 0.3368 70 chr10 89787600 89787900 0.5267 14 chr10 89997300 89997600 0.5053 52 chr10 90012900 90014400 0.3917 79 chr10 90154500 90156000 0.2163 65 chr10 90331500 90331800 0.5684 42 chr10 91209600 91209900 0.4537 40 chr10 91440600 91443300 0 71 chr10 91446300 91449000 0 69 chr10 91504500 91508400 0.2675 108 chr10 91752300 91752600 0.0854 70 chr10 91754400 91755000 0.0854 70 chr10 92115900 92116200 0.6898 30 chr10 92140500 92141400 0.0016 73 chr10 92374800 92377800 0 108 chr10 92631300 92631600 0.5534 38 chr10 92673900 92676000 0.0133 64 chr10 92966700 92967000 0.351 58 chr10 92975700 92976000 0.6289 44 chr10 93931500 93931800 0.1379 68 chr10 94814700 94815300 0.3966 70 chr10 94816800 94820100 0.1191 80 chr10 94824900 94825800 0.1081 81 chr10 94969500 94971000 0.5595 76 chr10 95081400 95081700 0.5948 69 chr10 95151600 95152500 0.2061 66 chr10 95948100 95949600 0 71 chr10 96751500 96751800 0.4722 64 chr10 96940200 96942300 0.0897 112 chr10 97275000 97277700 0 67 chr10 97348500 97348800 0.3056 44 chr10 97398000 97398300 0.248 21 chr10 97432500 97433100 0.2011 73 chr10 97528200 97528800 0.6 52 chr10 97678800 97679100 0.5996 51 chr10 97842000 97842300 0.5966 70 chr10 97996200 97996500 0.3544 62 chr10 98220600 98221200 0.3873 69 chr10 98542200 98542500 0.4947 86 chr10 98547000 98547300 0.2739 89 chr10 98697900 98698200 0.0443 98 chr10 98699400 98701200 0.0443 98 chr10 98781900 98788200 0 85 chr10 98802600 98803200 0.4601 77 chr10 98941500 98941800 0.3866 76 chr10 98961000 98962800 0.0242 61 chr10 98986200 98986500 0.4686 58 chr10 98988600 98988900 0.0926 77 chr10 99154200 99158400 0.0367 78 chr10 99771600 99773400 0 84 chr10 99823500 99824100 0.1567 95 chr10 99837000 99840900 0.0049 80 chr10 99892200 99892800 0.3947 61 chr10 99932700 99933000 0.6058 57 chr10 99934200 99935100 0.2194 54 chr10 99961200 99962100 0.3818 53 chr10 99963600 99963900 0.3377 58 chr10 100092300 100094400 0.0109 57 chr10 100422600 100423200 0.0078 59 chr10 100425900 100426500 0.1282 59 chr10 100703100 100704000 0.1304 102 chr10 102885600 102885900 0.5297 38 chr10 103128300 103129800 0.0436 64 chr10 103250700 103251300 0.4739 149 chr10 104528700 104529600 0.2325 88 chr10 104531700 104532000 0.4208 67 chr10 104785200 104785500 0.1876 43 chr10 104859900 104860200 0.015 35 chr10 105091200 105091500 0.4094 17 chr10 105311400 105312000 0.2927 75 chr10 105377400 105383400 0 76 chr10 105552600 105552900 0.4361 47 chr10 105738600 105739200 0.3332 60 chr10 105740400 105740700 0.2685 54 chr10 105775800 105781200 0 76 chr10 106224000 106224300 0.3478 55 chr10 106845000 106849200 0.0057 74 chr10 107285400 107285700 0.5862 138 chr10 107465100 107467200 0.0714 76 chr10 107801100 107801400 0.4675 51 chr10 108114600 108119700 0.0128 89 chr10 108310200 108315600 0 87 chr10 108381000 108381300 0.5458 57 chr10 108457800 108458100 0.57 52 chr10 108572700 108573000 0.0237 89 chr10 109086600 109086900 0.1666 52 chr10 109227000 109229400 0.2864 72 chr10 109241700 109242900 0.0663 75 chr10 109318500 109318800 0.5785 29 chr10 109414500 109415700 0.47 80 chr10 109812300 109818300 0 435 chr10 109827300 109827600 0.0733 80 chr10 109829100 109830900 0.0733 80 chr10 110120100 110120400 0.4454 63 chr10 110766600 110767200 0.2407 76 chr10 110856300 110856600 0.3362 44 chr10 111178200 111178500 0.6178 60 chr10 111431700 111432000 0.3058 19 chr10 111584700 111589800 0 68 chr10 111792600 111794100 0.1615 71 chr10 111797100 111797700 0.0628 91 chr10 111814500 111815400 0.0526 96 chr10 111817500 111818400 0.2522 86 chr10 112063500 112064100 0.2657 70 chr10 112066500 112067700 0.0027 120 chr10 112106700 112107300 0.1604 74 chr10 112108500 112108800 0.1604 74 chr10 112204800 112206600 0.0037 75 chr10 112398000 112398300 0.2865 16 chr10 112455300 112455600 0.4737 11 chr10 112595100 112595400 0.3652 51 chr10 114083700 114084000 0.6599 24 chr10 114102000 114102300 0.3001 31 chr10 114414300 114415500 0.2739 92 chr10 114634200 114634500 0.5304 51 chr10 114787500 114788100 0.3828 43 chr10 114790200 114790500 0.5201 43 chr10 114935100 114935700 0.1033 99 chr10 114998400 114998700 0.074 20 chr10 115200600 115200900 0.1274 82 chr10 115202100 115203000 0.1274 82 chr10 115246500 115246800 0.3309 21 chr10 115362900 115364700 0.136 97 chr10 115366800 115368000 0.1015 59 chr10 115582200 115587000 0 51 chr10 116505900 116506200 0.308 20 chr10 116633700 116634000 0.569 13 chr10 116904900 116905200 0.5824 58 chr10 116963100 116963400 0.3599 69 chr10 117079200 117083400 0.0051 77 chr10 117126600 117126900 0.5741 56 chr10 117833100 117838500 0.0563 100 chr10 117874800 117875100 0.1025 19 chr10 118181400 118182000 0.4515 156 chr10 118434300 118434600 0.1975 38 chr10 119136600 119137500 0.4705 50 chr10 119260800 119261100 0.4826 71 chr10 119722800 119723100 0.3157 78 chr10 120214500 120216000 0.2672 44 chr10 120234300 120239400 0.0507 75 chr10 120354900 120355200 0.2711 74 chr10 120395100 120395400 0.5467 35 chr10 120441000 120441600 0.28 92 chr10 120563400 120563700 0.674 49 chr10 120913500 120916800 0.1701 107 chr10 120920100 120921900 0.0064 76 chr10 121584600 121584900 0.4983 41 chr10 122202300 122202900 0.1614 69 chr10 122581200 122584500 0 78 chr10 122593800 122597100 0 74 chr10 122601000 122616900 0 54 chr10 122680800 122682000 0.1662 69 chr10 122807100 122808000 0.2207 132 chr10 122809200 122809500 0.2207 132 chr10 122942400 122943600 0.4216 82 chr10 123255000 123255600 0.5763 171 chr10 123292200 123293400 0.0889 65 chr10 123340500 123340800 0.4834 66 chr10 124507200 124507800 0.4709 32 chr10 124610400 124611000 0.6433 85 chr10 125228100 125228400 0.4632 39 chr10 125616300 125616900 0.0698 90 chr10 125946600 125950500 0.281 77 chr10 126056700 126057300 0.1579 53 chr10 126417900 126418200 0.1469 16 chr10 126508200 126508500 0.5991 47 chr10 126672300 126672900 0.1737 96 chr10 126678000 126682200 0.0498 101 chr10 126882900 126886500 0.1854 79 chr10 126947100 126948600 0.1753 826 chr10 127461300 127461600 0.2649 59 chr10 127767000 127767300 0.2621 26 chr10 128148300 128148600 0.3961 70 chr10 128219400 128219700 0.6843 99 chr10 128464500 128464800 0.6449 258 chr10 129414600 129414900 0.3696 110 chr10 129575400 129575700 0.4712 81 chr10 129732900 129733200 0.5242 61 chr10 129735600 129736200 0.0759 79 chr10 129920100 129920400 0.56 66 chr10 130051500 130052100 0.2618 26 chr10 130314300 130314900 0.049 104 chr10 130316400 130317000 0.049 104 chr10 130318200 130318500 0.049 104 chr10 130360200 130360500 0.5823 15 chr10 130518900 130519200 0.3918 52 chr10 130572300 130573200 0.2549 98 chr10 130650900 130651500 0.061 74 chr10 130759500 130760700 0 38 chr10 130785600 130785900 0.3364 38 chr10 131020200 131020500 0.6048 47 chr10 131042100 131043000 0.1692 15 chr10 131060100 131060400 0.4119 69 chr10 131228400 131228700 0.5788 51 chr10 131289600 131290200 0.3103 37 chr10 131376900 131377200 0.0746 54 chr10 131592600 131601600 0 46 chr10 131625900 131626200 0.2329 34 chr10 131697000 131697300 0.5866 64 chr10 131704800 131706000 0.0515 61 chr10 131850900 131851200 0.6222 148 chr10 131939100 131939400 0.2061 43 chr10 131949600 131950200 0.4753 81 chr10 132158700 132159000 0.147 78 chr10 132160200 132161700 0.147 78 chr10 132173700 132174000 0.5819 51 chr10 132191400 132191700 0.6646 44 chr10 132352200 132352500 0.6495 33 chr10 132356400 132356700 0.6035 61 chr10 132364200 132364800 0.6294 465 chr10 132448800 132449100 0.6284 27 chr10 132505500 132506100 0.4496 184 chr10 132549900 132550200 0.671 66 chr10 132573900 132574200 0.5531 46 chr10 132622200 132623100 0 118 chr10 132772500 132772800 0.5864 61 chr10 132774900 132775200 0.4667 69 chr10 132799200 132799500 0.62 52 chr10 132852000 132852600 0.5531 112 chr10 132874200 132874800 0.3474 71 chr10 132906600 132906900 0.5511 59 chr10 132914100 132914400 0.128 20 chr10 132982800 132983400 0.6023 48 chr10 132999300 132999600 0.3115 92 chr10 133011000 133011300 0.6755 93 chr10 133017900 133018200 0.6579 37 chr10 133029900 133030200 0.5318 64 chr10 133063500 133064100 0.5201 49 chr10 133078500 133079100 0.4651 35 chr10 133111200 133112100 0.2972 133 chr10 133138500 133138800 0.5594 16 chr10 133155600 133156200 0.3411 84 chr10 133220100 133220400 0.4772 11 chr10 133403100 133403400 0.2986 49 chr10 133416600 133417500 0.2052 65 chr10 133424100 133427700 0 75 chr10 133430100 133430700 0.1626 84 chr10 133432500 133435500 0 102 chr10 133441200 133441500 0.3754 62 chr10 133477800 133481100 0 54 chr10 133503600 133506300 0.0796 68 chr10 133568700 133572000 0 79 chr10 133574700 133579500 0 85 chr10 133623000 133631700 0.0214 105 chr10 133637400 133639500 0.0151 92 chr10 133640700 133641600 0.0151 92 chr10 133642800 133643100 0.0151 92 chr10 133644600 133646100 0.0151 92 chr10 133648800 133649400 0.42 107 chr10 133651800 133655400 0.0849 120 chr10 133656600 133658400 0.0849 120 chr10 133660200 133660500 0.4451 96 chr10 133662000 133662300 0.6401 71 chr10 133664400 133690500 0 15197 chr10 133740600 133787700 0 3268 chr11 60000 122700 0 117 chr11 123900 146700 0 117 chr11 147900 174600 0 117 chr11 176400 185700 0 96 chr11 187200 196500 0 150 chr11 220800 221100 0.5768 63 chr11 310800 311400 0.0133 57 chr11 318300 318900 0.1034 55 chr11 321300 322500 0.269 86 chr11 349500 350100 0.4823 48 chr11 374700 375300 0.2425 46 chr11 381300 381600 0.6045 28 chr11 384900 385800 0 86 chr11 390600 390900 0.0787 26 chr11 398400 398700 0.5442 40 chr11 400800 401100 0.5557 12 chr11 411000 411300 0.5261 20 chr11 431100 431400 0.6974 28 chr11 459000 459300 0.4405 56 chr11 480300 480600 0.5476 58 chr11 483000 483300 0.2595 44 chr11 485700 486000 0.6257 33 chr11 519300 520200 0 174 chr11 530400 531000 0.3767 119 chr11 541800 542100 0.5997 29 chr11 585000 585900 0.0569 988 chr11 647700 648000 0.6563 53 chr11 664500 665100 0.0223 94 chr11 734700 736200 0.1133 69 chr11 881400 881700 0.4864 54 chr11 964800 965400 0.0303 307 chr11 980100 980700 0.0302 83 chr11 1078800 1081500 0.1681 45 chr11 1096800 1099200 0.418 101 chr11 1166700 1167000 0.439 51 chr11 1244100 1244400 0.4521 66 chr11 1248000 1248300 0.3653 61 chr11 1255500 1256100 0.4312 23 chr11 1287300 1287900 0.5045 46 chr11 1294200 1294500 0.545 99 chr11 1296600 1296900 0.6342 30 chr11 1352400 1352700 0.3196 11 chr11 1410000 1410300 0.6161 10 chr11 1412100 1412400 0.0186 10 chr11 1417500 1417800 0.6656 57 chr11 1429500 1433100 0 78 chr11 1435200 1435500 0.6007 23 chr11 1510200 1510500 0.372 48 chr11 1661100 1661400 0.6766 19 chr11 1663800 1665300 0 83 chr11 1666500 1667100 0 83 chr11 1683600 1684200 0.1836 75 chr11 1686000 1687800 0.0614 59 chr11 1776000 1776300 0.6557 11 chr11 1945200 1953300 0 62 chr11 1954800 2043000 0 62 chr11 2161500 2161800 0.6863 46 chr11 2291400 2292000 0.3831 54 chr11 2332200 2334300 0.1201 68 chr11 3096900 3097200 0.6083 66 chr11 3206700 3207000 0.6881 93 chr11 3214800 3215100 0.6469 88 chr11 3248400 3248700 0.3551 39 chr11 3252300 3256800 0 51 chr11 3258300 3261900 0 44 chr11 3263100 3281100 0 49 chr11 3282300 3293100 0 55 chr11 3294300 3294600 0 25 chr11 3297600 3327000 0 51 chr11 3328200 3338400 0 51 chr11 3653700 3654900 0.0399 2367 chr11 3898200 3899700 0.3977 67 chr11 4001700 4004700 0.2065 84 chr11 4159200 4159500 0.3002 46 chr11 4170600 4174800 0.07 77 chr11 4223400 4223700 0.1893 69 chr11 4226700 4227600 0.4948 69 chr11 4230000 4230600 0.1257 63 chr11 4233600 4234200 0.5246 74 chr11 4238400 4239000 0.2909 61 chr11 4245000 4245900 0 63 chr11 4248300 4248600 0.2063 54 chr11 4254300 4256700 0.0308 60 chr11 4260000 4260600 0.3896 56 chr11 4263000 4263300 0.1839 40 chr11 4264500 4265100 0.4849 47 chr11 4266600 4266900 0.4581 65 chr11 4268100 4275300 0 84 chr11 4276800 4284600 0 84 chr11 4287000 4298400 0 149 chr11 4299900 4300200 0.1421 68 chr11 4303500 4303800 0.1486 51 chr11 4308300 4309200 0.4983 68 chr11 4310700 4311000 0.3006 64 chr11 4312800 4313100 0.3006 64 chr11 4314300 4315500 0.3006 64 chr11 4320000 4320300 0.1191 50 chr11 4323900 4324200 0.531 96 chr11 4326600 4327500 0.1304 67 chr11 4333500 4337400 0 75 chr11 4338600 4339200 0 75 chr11 4340400 4342800 0 131 chr11 4347900 4351200 0.3288 70 chr11 4353000 4353300 0.3868 64 chr11 4354500 4355100 0.0906 64 chr11 4357500 4357800 0.3205 81 chr11 4360200 4362300 0.274 59 chr11 4365000 4365300 0.4964 41 chr11 4620000 4621500 0.0321 50 chr11 4781400 4781700 0.3647 43 chr11 4933800 4934700 0.1918 86 chr11 4935900 4936200 0.1918 86 chr11 5249400 5250000 0.0181 61 chr11 5254500 5254800 0.175 66 chr11 5415900 5416200 0.3261 60 chr11 5465700 5466000 0.4309 47 chr11 5478300 5478600 0.0179 84 chr11 5479800 5483100 0.0179 84 chr11 5676600 5676900 0.5537 89 chr11 5716200 5716500 0.4571 64 chr11 5916600 5916900 0.3771 71 chr11 6120900 6122400 0.4179 66 chr11 6147000 6147300 0.3893 72 chr11 6186000 6191100 0.1372 79 chr11 6948900 6949200 0.2525 63 chr11 6981000 6981300 0.4698 75 chr11 7179000 7179900 0.282 78 chr11 7188000 7188300 0.4351 35 chr11 7233600 7234200 0.142 62 chr11 7325100 7328100 0 90 chr11 7359000 7359600 0.0143 68 chr11 7407300 7407600 0.2926 37 chr11 7658400 7659900 0.0386 93 chr11 7661700 7662000 0.4644 73 chr11 7719600 7720200 0.0841 61 chr11 7736100 7740300 0.0654 69 chr11 7768800 7769100 0.0363 43 chr11 7861800 7862100 0.263 76 chr11 7863300 7864200 0.263 76 chr11 7865700 7866900 0.263 76 chr11 7920600 7920900 0.499 64 chr11 8140800 8144700 0.3176 71 chr11 8161800 8162100 0.6994 67 chr11 8977500 8979600 0.1116 155 chr11 9540900 9544800 0.2104 79 chr11 9705900 9706500 0.308 92 chr11 9773100 9773400 0.6168 17 chr11 10391400 10392300 0.001 72 chr11 11235600 11235900 0.5169 29 chr11 11246700 11247300 0.5704 190 chr11 12131100 12131400 0.4981 31 chr11 12640800 12641100 0.4463 28 chr11 12719700 12720000 0.2036 168 chr11 13507500 13507800 0.3583 71 chr11 13509000 13509300 0.3583 71 chr11 13544400 13544700 0 36 chr11 13794900 13796400 0.0568 89 chr11 13827900 13828200 0.4271 59 chr11 13866900 13867500 0.1499 52 chr11 14628600 14628900 0.3478 50 chr11 14631900 14633100 0.2629 83 chr11 14666100 14666400 0.3264 48 chr11 14716500 14721000 0 72 chr11 14758200 14758500 0.5406 66 chr11 14810700 14811000 0.3124 65 chr11 14847300 14848500 0.2086 75 chr11 14963100 14963700 0.2432 74 chr11 15270600 15270900 0.1586 71 chr11 16076700 16077000 0.4931 36 chr11 16466700 16467000 0.377 60 chr11 16515300 16515900 0.1735 71 chr11 16575900 16576200 0.5119 40 chr11 16720200 16720500 0.1373 74 chr11 16907700 16908000 0.1276 108 chr11 16915800 16916100 0.2566 56 chr11 17028600 17029800 0.0379 63 chr11 17049600 17050800 0.1717 62 chr11 17341200 17343000 0.1627 78 chr11 18247200 18247800 0.2735 78 chr11 18266400 18267600 0.3147 79 chr11 18486600 18486900 0.475 76 chr11 18869700 18870000 0.6482 59 chr11 18920400 18922200 0 70 chr11 18942600 18944100 0 75 chr11 19137600 19138200 0.2261 87 chr11 19139400 19140300 0.2261 87 chr11 20547900 20549700 0.0767 60 chr11 20895000 20895300 0.3659 55 chr11 21276900 21277200 0.3495 67 chr11 21669300 21669900 0.3305 89 chr11 21943200 21943500 0.5585 48 chr11 22016100 22021200 0.0216 92 chr11 22286400 22288800 0.1023 92 chr11 22290000 22290300 0.5932 46 chr11 22485000 22485300 0.3939 70 chr11 22523100 22523700 0.0432 37 chr11 22528200 22528500 0.2995 60 chr11 22696800 22697100 0.5431 57 chr11 22910100 22911300 0.0685 78 chr11 23009400 23010000 0.4576 118 chr11 23031900 23032200 0.4859 63 chr11 23082900 23083200 0.4596 67 chr11 23176200 23178600 0.1303 62 chr11 23185500 23185800 0.6224 37 chr11 23193900 23194200 0.2034 44 chr11 23298300 23303400 0.0131 72 chr11 23316600 23317500 0.2057 54 chr11 23433300 23434200 0.1698 49 chr11 23791500 23793300 0.4314 65 chr11 24137100 24137400 0.4735 93 chr11 24152400 24152700 0.5225 82 chr11 24169800 24170100 0.218 79 chr11 24327900 24333900 0 83 chr11 24387600 24389400 0.0042 50 chr11 24446100 24446700 0.4393 64 chr11 24876300 24876600 0.4675 31 chr11 24891600 24891900 0.3869 55 chr11 24996900 24997200 0.3435 55 chr11 25143000 25144500 0.2915 94 chr11 25425900 25426500 0 51 chr11 25428900 25429200 0 51 chr11 25498800 25499100 0.4323 25 chr11 25542900 25543200 0.5951 59 chr11 25635300 25635600 0.2588 83 chr11 25647000 25647300 0.2504 57 chr11 25747800 25748100 0.6238 63 chr11 26115900 26116200 0.3561 71 chr11 26118900 26119200 0.6387 51 chr11 26441100 26441400 0.6771 38 chr11 26456700 26457000 0.3425 66 chr11 26886600 26888100 0.2773 61 chr11 26967300 26970900 0 96 chr11 27221400 27225000 0.0691 98 chr11 27944100 27944700 0.4115 88 chr11 28029600 28031100 0.0713 72 chr11 28045800 28046100 0.3258 59 chr11 28205700 28207200 0.0925 51 chr11 28234500 28235100 0.3353 67 chr11 28361100 28361400 0.5288 54 chr11 28429500 28430100 0.1819 46 chr11 28431300 28431900 0.3258 44 chr11 29142300 29143800 0.333 54 chr11 29154300 29156400 0 71 chr11 29417700 29418300 0.2312 71 chr11 29648100 29649600 0.4018 74 chr11 29726700 29727000 0.4778 56 chr11 29743800 29744100 0.2535 45 chr11 29789100 29789400 0.5094 72 chr11 29796600 29796900 0.513 68 chr11 29799000 29799600 0.3229 68 chr11 30051600 30051900 0.5301 71 chr11 30053100 30054000 0.5301 71 chr11 30965700 30967200 0 78 chr11 31131000 31131300 0.6104 37 chr11 31315800 31321500 0 83 chr11 31356600 31356900 0.2554 77 chr11 32265000 32265300 0.6421 50 chr11 32607000 32607300 0.5518 32 chr11 32942100 32942700 0.1152 79 chr11 32944200 32945400 0.1152 79 chr11 33234000 33234300 0.6831 30 chr11 33516000 33516300 0.5857 48 chr11 33626100 33627300 0.0226 76 chr11 33628500 33628800 0.0226 76 chr11 34273800 34274100 0.5163 69 chr11 34687200 34690200 0.1763 89 chr11 34760400 34761000 0.0272 88 chr11 35053800 35054100 0.1557 59 chr11 35396100 35397600 0.088 88 chr11 35578800 35579100 0.2338 77 chr11 35698200 35699100 0.1344 57 chr11 35704800 35705100 0.14 85 chr11 35707800 35708100 0.14 85 chr11 36287100 36287400 0.1288 29 chr11 36309900 36310200 0.4052 184 chr11 36481800 36482700 0.0038 60 chr11 36507000 36507300 0.5759 34 chr11 36551700 36557400 0 113 chr11 36614100 36615900 0.0734 85 chr11 36875400 36875700 0.4988 29 chr11 36894000 36894600 0.1697 51 chr11 37018200 37020000 0.3018 68 chr11 37241400 37243200 0.2128 76 chr11 37245000 37245300 0.4142 92 chr11 37347900 37348200 0.4263 36 chr11 37492800 37494300 0.3769 73 chr11 37537500 37538400 0.4384 49 chr11 37559700 37560000 0.4664 58 chr11 38078100 38078400 0.3889 37 chr11 38195700 38196000 0.4569 60 chr11 38232900 38233200 0.1539 67 chr11 38419800 38420100 0.2908 56 chr11 38739000 38739300 0.1605 41 chr11 39000000 39001800 0.3546 65 chr11 39047400 39048000 0.1044 42 chr11 39485400 39485700 0.4669 75 chr11 39605400 39605700 0.5311 45 chr11 39771900 39772200 0.4437 54 chr11 39849300 39852000 0.1969 65 chr11 40260000 40260300 0.2379 36 chr11 40587300 40587600 0.2644 92 chr11 40589700 40590900 0.3836 127 chr11 40948500 40948800 0.2896 75 chr11 40985400 40985700 0.6201 25 chr11 41303400 41305800 0.2773 73 chr11 41695500 41696100 0.2023 62 chr11 42156600 42156900 0.2448 79 chr11 42215100 42216600 0.0064 68 chr11 42430200 42432300 0.0258 76 chr11 42442500 42442800 0.417 24 chr11 42459600 42460200 0.358 71 chr11 42573000 42573300 0.2487 35 chr11 42680400 42681000 0.2641 69 chr11 42791700 42792300 0.0353 71 chr11 42798000 42798600 0.0136 51 chr11 42897300 42897600 0.4681 48 chr11 42945300 42945600 0.4059 63 chr11 42952200 42954300 0.2313 99 chr11 43346400 43352100 0.0133 118 chr11 43757400 43757700 0.4628 35 chr11 43778400 43778700 0.2841 103 chr11 44663100 44664600 0.288 79 chr11 45101700 45102300 0.0428 65 chr11 45123900 45124200 0.2446 72 chr11 45737700 45739200 0.1596 91 chr11 46156800 46157100 0.3027 82 chr11 46573800 46574400 0.1301 74 chr11 46583700 46584300 0.1607 52 chr11 46699500 46699800 0.625 86 chr11 46897500 46897800 0.5369 72 chr11 47037300 47037600 0.4032 69 chr11 47097300 47098200 0.0115 61 chr11 47174400 47174700 0.4959 43 chr11 47721900 47722200 0.4886 45 chr11 48186000 48186300 0.3181 57 chr11 48295200 48295800 0.2352 52 chr11 48302100 48302400 0.2362 67 chr11 48392400 48393600 0.2938 61 chr11 48395100 48395400 0.2938 61 chr11 48581100 48581400 0.2916 52 chr11 48746400 48746700 0.4753 44 chr11 48771900 48773400 0.2728 73 chr11 48847800 48854400 0 76 chr11 48859500 48859800 0.1468 11 chr11 48880500 48888300 0 76 chr11 48892200 48900000 0 78 chr11 48912900 48913200 0.5014 17 chr11 48922500 48922800 0.5287 124 chr11 48926700 48927600 0.3892 142 chr11 48928800 48929100 0.5174 27 chr11 48944100 48944400 0.1148 44 chr11 48982800 48983400 0.3038 51 chr11 49104300 49106100 0 74 chr11 49463400 49463700 0.5491 57 chr11 49712700 49714800 0.0042 66 chr11 49726800 49729500 0 68 chr11 49775100 49780800 0.1274 89 chr11 49792200 49797600 0 79 chr11 50114100 50134800 0 92 chr11 50180100 50180400 0.3105 76 chr11 50343900 50364300 0 81 chr11 50548500 50548800 0.2937 84 chr11 50588400 50589300 0.1506 53 chr11 50690700 50691300 0.5779 155 chr11 50739300 50739600 0.5279 57 chr11 50756400 50756700 0.6421 172 chr11 50786400 50786700 0.6434 128 chr11 50816400 50816700 0.3613 69 chr11 51078600 51090000 0 41 chr11 51091500 51430200 0 1145 chr11 51431400 51830100 0 1145 chr11 51831600 52020900 0 1145 chr11 52022700 52128000 0 1145 chr11 52129200 52599900 0 1145 chr11 52601100 52632300 0 1145 chr11 52633500 52652100 0 1145 chr11 52653300 52701300 0 1145 chr11 52703100 52707000 0 1026 chr11 52708200 53015400 0 1026 chr11 53016600 53097000 0 1026 chr11 53098200 53107500 0 1026 chr11 53108700 53215500 0 1802 chr11 53216700 53240400 0 1107 chr11 53241600 53283300 0 1107 chr11 53284500 53470200 0 1107 chr11 53471700 53504400 0 1107 chr11 53505600 53507100 0 1107 chr11 53508600 53518200 0 1107 chr11 53519400 53716200 0 1107 chr11 53717400 53798400 0 1107 chr11 53799600 53818200 0 1107 chr11 53820300 53840400 0 207 chr11 53842200 53948100 0 663 chr11 53949300 54084000 0 663 chr11 54086100 54097800 0 663 chr11 54099300 54177300 0 729 chr11 54178500 54326100 0 729 chr11 54327300 54347100 0 729 chr11 54348300 54353700 0.0235 91 chr11 54355500 54360600 0 184 chr11 54361800 54385500 0 184 chr11 54386700 54395400 0.0029 362 chr11 54396900 54425100 0 226 chr11 54525900 54537300 0 321 chr11 54541500 54542100 0.008 50 chr11 54545400 54546900 0.0128 80 chr11 54549900 54550200 0.0942 41 chr11 54789300 54789600 0.3381 66 chr11 55198500 55199400 0.5137 53 chr11 55442100 55442400 0.3901 46 chr11 55461900 55462200 0.4695 53 chr11 55476900 55477500 0.1747 73 chr11 55597200 55597500 0.4747 40 chr11 55686900 55691700 0.0631 78 chr11 55987500 55988400 0.333 70 chr11 55991700 55992000 0.3207 162 chr11 56144100 56144400 0.3716 33 chr11 56451000 56451300 0.4388 83 chr11 56497800 56498100 0.2579 65 chr11 56552700 56553000 0.4794 42 chr11 56588700 56589000 0.4488 83 chr11 56717700 56718000 0.1902 65 chr11 56724900 56726700 0.3367 77 chr11 56912400 56913600 0.1677 50 chr11 56965800 56966100 0.3254 63 chr11 57995700 57997800 0.0851 85 chr11 58010400 58010700 0.3213 43 chr11 58048800 58052700 0 63 chr11 58371000 58371300 0.5785 60 chr11 58399500 58399800 0.3403 44 chr11 58453200 58453500 0.5844 23 chr11 58697100 58697400 0.2865 73 chr11 59041800 59042100 0.3516 38 chr11 59645100 59645400 0.5449 39 chr11 60048600 60049500 0.0007 81 chr11 60051000 60051600 0.0007 81 chr11 60438900 60441000 0.0161 85 chr11 60473700 60474300 0.1831 62 chr11 60492000 60492300 0.4777 29 chr11 60532500 60539100 0.0012 76 chr11 60597600 60597900 0.5409 89 chr11 60603000 60603900 0.2637 88 chr11 60816000 60816300 0.3677 89 chr11 61084500 61086300 0 83 chr11 61166700 61167000 0.582 83 chr11 61203900 61204200 0 58 chr11 61205700 61246200 0 58 chr11 61340400 61340700 0.3085 29 chr11 61391100 61391400 0.3368 169 chr11 62096400 62099400 0 68 chr11 62277900 62280300 0 58 chr11 62366100 62366400 0.4109 47 chr11 62384700 62385000 0.3299 46 chr11 63036900 63037200 0.2436 62 chr11 63110400 63110700 0.4543 47 chr11 63420300 63420600 0.4573 67 chr11 63436200 63436800 0.3349 77 chr11 63438900 63439200 0.3349 77 chr11 63444600 63444900 0.6292 51 chr11 63528600 63528900 0.3636 67 chr11 63530400 63531000 0.5575 67 chr11 63871500 63871800 0.6512 63 chr11 64161600 64162200 0.4434 62 chr11 64170600 64173600 0.0477 125 chr11 64271100 64271400 0.5767 34 chr11 65239800 65240100 0.2513 54 chr11 65678700 65679300 0.3988 154 chr11 65839200 65839500 0.5206 32 chr11 65970900 65971500 0.403 73 chr11 66093300 66095100 0.2271 101 chr11 66460200 66460500 0.2281 41 chr11 66588600 66589200 0.2478 64 chr11 66991200 66991500 0.5588 45 chr11 67222200 67222800 0.0016 70 chr11 67603500 67604100 0.0413 90 chr11 67841700 67842000 0.3959 43 chr11 67863600 67863900 0.365 30 chr11 67868100 67868700 0.0194 85 chr11 67919400 67919700 0.3658 57 chr11 68644500 68644800 0.3903 38 chr11 68892300 68892600 0.0738 30 chr11 69068400 69069900 0.0596 127 chr11 69082500 69082800 0.6669 52 chr11 69813600 69813900 0.5711 100 chr11 69886800 69887100 0.4941 39 chr11 70126800 70127100 0.6331 71 chr11 70341000 70341300 0.2109 50 chr11 70344900 70345200 0.443 79 chr11 71090400 71090700 0.6928 28 chr11 71380500 71380800 0.5767 98 chr11 71569500 71570100 0.3148 80 chr11 71578500 71579100 0.066 69 chr11 71664300 71664600 0.5851 54 chr11 71676300 71676600 0.3577 57 chr11 72150600 72150900 0.2535 21 chr11 72164700 72165300 0.3345 73 chr11 73572300 73572900 0.3887 78 chr11 74223600 74224800 0.3382 86 chr11 74434200 74434500 0.6456 37 chr11 74527800 74528100 0.1867 57 chr11 74757000 74762100 0.0372 90 chr11 74877600 74878800 0.2012 88 chr11 74880900 74882400 0.2012 88 chr11 74892600 74892900 0.4741 65 chr11 74977200 74977500 0.4302 65 chr11 75060900 75061200 0.6003 70 chr11 75409200 75410100 0.2119 75 chr11 75749100 75752100 0.1132 89 chr11 75753600 75754500 0.1132 89 chr11 76931100 76931400 0.5947 49 chr11 76966200 76966500 0.4877 71 chr11 77097600 77099700 0.0194 102 chr11 77192700 77193000 0.6342 190 chr11 77922300 77922600 0.5711 61 chr11 78678000 78683700 0 81 chr11 79191300 79191600 0.2838 62 chr11 79554900 79557600 0.1057 77 chr11 79961700 79962000 0.2087 70 chr11 81522300 81522600 0.4509 19 chr11 81599400 81599700 0.4673 58 chr11 81845100 81845400 0.4053 21 chr11 82156200 82161600 0.001 80 chr11 82282800 82283100 0.235 81 chr11 82293300 82293600 0.6612 22 chr11 82625100 82625700 0.0127 40 chr11 83315400 83316000 0.2604 43 chr11 83394900 83397300 0.0199 77 chr11 83589600 83593200 0.0872 83 chr11 84039300 84039900 0.5427 64 chr11 84502200 84502500 0.4679 31 chr11 85324800 85330800 0 83 chr11 85400400 85400700 0.5632 43 chr11 85833000 85833300 0.6916 23 chr11 85849500 85851000 0.3354 69 chr11 85982400 85982700 0.5651 30 chr11 86104800 86105100 0.2867 76 chr11 86109900 86111700 0.2587 103 chr11 86310000 86310300 0.3233 31 chr11 86536200 86536800 0.2826 58 chr11 86601900 86602200 0.4722 81 chr11 86756100 86757600 0.167 69 chr11 86879700 86880000 0.6069 70 chr11 87047400 87053100 0 90 chr11 87163800 87165600 0.0021 65 chr11 87243000 87244500 0.3392 58 chr11 87340200 87345300 0 104 chr11 87698100 87698700 0.107 57 chr11 88030800 88032300 0.3894 98 chr11 88185300 88185600 0.6914 27 chr11 88637700 88638000 0.6347 56 chr11 88648200 88648500 0.641 71 chr11 88804200 88804500 0.343 64 chr11 88989300 88990800 0.35 69 chr11 89173500 89173800 0.2569 58 chr11 89314200 89318100 0.0524 85 chr11 89486400 89486700 0.5541 52 chr11 89745000 89750100 0.1111 89 chr11 89751300 89751600 0.2112 63 chr11 89752800 89753100 0.2112 63 chr11 89754900 89755800 0.4235 52 chr11 89758200 89759700 0.0032 54 chr11 89760900 89761200 0 75 chr11 89763300 89764500 0 75 chr11 89766000 89767200 0 75 chr11 89769600 89772000 0 71 chr11 89773200 89776500 0 71 chr11 89778300 89784600 0 71 chr11 89787900 89790300 0 83 chr11 89791800 89792400 0.4697 68 chr11 89793900 89795700 0.0638 70 chr11 89797500 89804100 0 89 chr11 89805300 89806800 0 89 chr11 89809200 89811900 0.0114 75 chr11 89817300 89822100 0 84 chr11 89823300 89831700 0 84 chr11 89833200 89834100 0 84 chr11 89835300 89836500 0 84 chr11 89837700 89869800 0 86 chr11 89871600 89872200 0 86 chr11 89873400 89874900 0 98 chr11 89876100 89897700 0 98 chr11 89900100 89920500 0 111 chr11 89923800 90006600 0 102 chr11 90008100 90008700 0 102 chr11 90010800 90011400 0.4924 66 chr11 90012900 90016500 0 90 chr11 90018000 90021600 0 90 chr11 90023400 90033000 0 90 chr11 90034200 90045900 0 90 chr11 90047100 90062100 0 75 chr11 90063300 90066600 0 75 chr11 90067800 90070500 0 75 chr11 90072600 90074100 0 66 chr11 90075600 90082500 0 66 chr11 90084000 90085200 0.4513 45 chr11 90086700 90088500 0.1023 80 chr11 90090000 90091800 0.1023 80 chr11 90093000 90095100 0.1023 80 chr11 90096600 90096900 0.1023 80 chr11 90186600 90187200 0.3557 59 chr11 90400200 90405600 0 124 chr11 90966300 90972000 0 76 chr11 90976500 90976800 0.0914 121 chr11 91019400 91019700 0.3657 50 chr11 91235100 91235700 0.2636 94 chr11 91309200 91309800 0.3977 50 chr11 91578900 91580100 0.0623 75 chr11 91681800 91683600 0.2401 75 chr11 92030400 92031000 0.4554 37 chr11 92032200 92032500 0.5257 56 chr11 92077800 92078100 0.4319 57 chr11 92095800 92096100 0.471 51 chr11 92171700 92172000 0.4274 49 chr11 92359500 92360100 0.248 68 chr11 92512800 92513100 0.5294 28 chr11 92565300 92565600 0.4938 72 chr11 92705400 92706000 0.5095 163 chr11 93136500 93142500 0 93 chr11 93172500 93176100 0.2245 77 chr11 93243300 93243600 0.3154 56 chr11 93369600 93369900 0.4089 36 chr11 93417000 93417300 0.3733 57 chr11 93420600 93426900 0 81 chr11 93945000 93945300 0.1066 46 chr11 93946500 93948000 0.0661 68 chr11 94038300 94042500 0.0365 112 chr11 94177200 94177500 0.3465 68 chr11 94233000 94235400 0.0079 278 chr11 94236900 94237500 0.1427 262 chr11 94239300 94240200 0.1811 256 chr11 94250100 94250400 0.3574 138 chr11 94318200 94318500 0.5622 61 chr11 94341000 94341300 0.2757 56 chr11 94807800 94808100 0.1397 29 chr11 95320200 95322000 0.0873 63 chr11 95436300 95442300 0 87 chr11 95626800 95628600 0.1101 153 chr11 95629800 95630400 0.1101 153 chr11 96405900 96408900 0.0637 79 chr11 96513900 96514200 0.3361 73 chr11 96743700 96744000 0.6852 16 chr11 96771900 96772200 0.1356 68 chr11 96773400 96776700 0.1356 68 chr11 96934800 96936900 0.0617 72 chr11 97040400 97041000 0.2104 65 chr11 97043700 97044000 0.2986 70 chr11 97082700 97083000 0.563 39 chr11 97378200 97378500 0.6019 66 chr11 97774800 97775100 0.6261 25 chr11 98325600 98325900 0.0984 50 chr11 98342400 98344800 0.2414 65 chr11 98435100 98435400 0.4932 68 chr11 98604600 98604900 0.6851 70 chr11 98649600 98649900 0.5237 48 chr11 99580800 99581400 0.3347 58 chr11 99602700 99608100 0 90 chr11 99761700 99762300 0.3638 62 chr11 99782100 99783900 0.0073 60 chr11 99998400 99998700 0.4458 65 chr11 100035300 100035900 0.1631 68 chr11 100286400 100291200 0.2596 102 chr11 100411800 100414200 0.0793 76 chr11 100452300 100453200 0.0472 124 chr11 100456500 100457700 0.0825 67 chr11 100464900 100465200 0.5063 66 chr11 100475700 100476300 0.096 83 chr11 100478700 100480800 0.096 83 chr11 100507500 100507800 0.4628 81 chr11 100654500 100654800 0.4826 64 chr11 100656900 100657500 0.4227 71 chr11 101546100 101546400 0.1184 25 chr11 101680500 101681100 0.4896 66 chr11 101682600 101682900 0.4896 66 chr11 101695200 101704500 0 104 chr11 101857200 101857500 0.6359 15 chr11 101937900 101938200 0.6714 26 chr11 102369600 102374700 0.0663 90 chr11 102730800 102731400 0.6252 238 chr11 102742800 102744300 0.0473 101 chr11 103038600 103039200 0.1829 68 chr11 103137000 103137300 0.4809 72 chr11 103540200 103540500 0.6466 33 chr11 104194200 104195700 0.1095 58 chr11 104252100 104252400 0.3673 62 chr11 104617800 104618100 0.4881 47 chr11 104675700 104677200 0.0116 80 chr11 104697000 104698500 0.2403 61 chr11 105018600 105018900 0.1352 61 chr11 105020400 105020700 0.1352 61 chr11 105072300 105072900 0.4003 53 chr11 106334700 106335300 0.2896 65 chr11 106338000 106338300 0.5153 61 chr11 106710000 106710300 0.0914 15 chr11 107363400 107367600 0 74 chr11 107374500 107378100 0 74 chr11 107590200 107590500 0.607 52 chr11 108262500 108266100 0.0641 85 chr11 108358200 108358800 0.2605 94 chr11 108360000 108362700 0.2605 94 chr11 108378300 108378900 0.3919 61 chr11 108684300 108685500 0.3141 85 chr11 109177500 109183500 0 71 chr11 109403700 109405200 0.0788 77 chr11 109572000 109576800 0.1538 79 chr11 109878300 109881900 0.2008 80 chr11 109947900 109948200 0.2559 52 chr11 110209800 110210400 0.0064 83 chr11 110211900 110214900 0.0064 83 chr11 110618700 110619300 0.3022 39 chr11 110658900 110659500 0.1998 88 chr11 112136700 112137000 0.5837 19 chr11 112187400 112187700 0.5607 60 chr11 112324800 112326000 0.0761 65 chr11 112575300 112575600 0.3398 62 chr11 112679100 112680600 0.0917 68 chr11 113011200 113011500 0.5226 58 chr11 113608800 113609100 0.3483 64 chr11 114629700 114630000 0.3265 74 chr11 114633000 114633300 0.1999 16 chr11 114635100 114635400 0.3134 78 chr11 114840000 114844200 0.0083 87 chr11 115857000 115857300 0.5353 69 chr11 116571000 116576100 0.0033 79 chr11 116898600 116898900 0.5944 64 chr11 117135300 117138300 0 80 chr11 117206400 117209400 0.1361 102 chr11 117250500 117251100 0.2537 76 chr11 118330200 118331400 0.3452 70 chr11 118678500 118678800 0.3715 53 chr11 118691400 118691700 0.3843 50 chr11 118721100 118721700 0.0937 66 chr11 118729200 118729800 0.2881 79 chr11 119270400 119270700 0.3976 29 chr11 119507100 119508600 0.3104 42 chr11 119648100 119648400 0.6403 90 chr11 119743800 119744100 0.4865 88 chr11 119848800 119849100 0.2419 15 chr11 120082500 120085200 0 49 chr11 120328800 120329100 0.6605 143 chr11 121173300 121173600 0.2609 62 chr11 121185300 121186200 0.0418 214 chr11 121360800 121361100 0.5577 28 chr11 121601100 121601400 0.0673 86 chr11 121752000 121752600 0.1798 72 chr11 121821300 121827000 0.0009 74 chr11 121859400 121860900 0.1484 60 chr11 122016600 122017800 0.4173 37 chr11 122476800 122478600 0 50 chr11 122694900 122695200 0.6623 86 chr11 122826600 122828100 0.0961 74 chr11 123118800 123119100 0.5282 59 chr11 123709200 123709500 0.4991 56 chr11 123896100 123896400 0.1068 98 chr11 124236000 124237500 0.0556 81 chr11 124245600 124245900 0.5003 48 chr11 124386300 124388400 0.2662 87 chr11 124392000 124392600 0.1833 34 chr11 124505400 124506600 0.0746 88 chr11 124553400 124553700 0.3234 64 chr11 124913100 124913400 0.5605 153 chr11 124914600 124914900 0.48 49 chr11 125036100 125036400 0.0091 34 chr11 125537400 125542500 0 72 chr11 125862300 125864400 0.2613 75 chr11 125871000 125871300 0.4282 64 chr11 126065100 126065400 0.2781 118 chr11 126226200 126226500 0.0767 142 chr11 126364200 126365400 0.4493 57 chr11 126381300 126382500 0.2874 75 chr11 127079400 127079700 0.104 35 chr11 127287300 127289100 0.0416 84 chr11 127364400 127365600 0.0819 82 chr11 127367100 127368000 0.2057 70 chr11 127776900 127780500 0.0549 104 chr11 127782000 127782300 0.0549 104 chr11 127869000 127869900 0.0227 85 chr11 127871100 127872000 0.3508 61 chr11 127940400 127941000 0.3695 41 chr11 127976100 127976700 0.4088 68 chr11 128076600 128076900 0.4877 64 chr11 128144100 128144400 0.6248 54 chr11 128930700 128931000 0.3649 132 chr11 129174900 129176400 0 77 chr11 129177900 129178200 0.5058 55 chr11 129245100 129245400 0.3329 65 chr11 129342300 129343800 0.0071 64 chr11 129563400 129564000 0.0104 62 chr11 130091100 130092600 0.1845 81 chr11 130755000 130756500 0.5518 32 chr11 130942500 130943400 0.2842 67 chr11 131083800 131084700 0.4854 65 chr11 131173500 131174700 0.1201 49 chr11 131342100 131342700 0.2844 131 chr11 131507400 131508900 0.4362 87 chr11 131680500 131680800 0.6406 369 chr11 131789400 131789700 0.6004 42 chr11 132071100 132071400 0.6346 63 chr11 132321600 132324300 0.0414 81 chr11 132481800 132483300 0.1945 79 chr11 133642200 133642500 0.141 88 chr11 133644300 133646100 0.141 88 chr11 133879800 133880400 0.4757 66 chr11 133932600 133932900 0.4727 149 chr11 134000100 134000700 0.1891 59 chr11 134137800 134138100 0.5583 52 chr11 134166000 134166600 0.3989 47 chr11 134296200 134296800 0.087 66 chr11 134308200 134308500 0.5653 91 chr11 134375700 134376300 0.4739 67 chr11 134408400 134408700 0.6218 60 chr11 134440200 134440500 0.6289 94 chr11 134451600 134451900 0.4042 71 chr11 134523600 134524200 0.5388 40 chr11 134656500 134657100 0.5379 79 chr11 134839500 134840400 0.0162 94 chr11 134851800 134852100 0.6684 145 chr11 134927100 134928900 0.157 87 chr11 134961900 134962200 0.5921 61 chr11 134985900 134986500 0.4847 63 chr11 135040200 135040800 0.58 64 chr11 135046800 135047100 0.3865 86 chr12 9900 11700 0.0749 82 chr12 14100 20100 0.1558 134 chr12 23400 39000 0 157 chr12 40500 43500 0 148 chr12 45600 45900 0.4275 108 chr12 63600 63900 0.4252 70 chr12 68100 68400 0.5823 84 chr12 72600 73200 0.2755 55 chr12 77400 78000 0.3409 71 chr12 163200 163500 0.5252 97 chr12 419400 422100 0.0632 92 chr12 453000 453600 0.4258 44 chr12 529800 530100 0.1478 69 chr12 582900 583200 0.5218 58 chr12 590700 591000 0.6383 28 chr12 783600 783900 0.689 24 chr12 1079400 1079700 0.1105 44 chr12 1085100 1086000 0.0027 180 chr12 1087800 1088100 0.3394 16 chr12 1122000 1122600 0.2239 47 chr12 1661100 1662600 0.2781 22 chr12 1921500 1922100 0.2579 42 chr12 1958700 1959000 0.6234 48 chr12 2105700 2106000 0.4429 73 chr12 2130300 2135100 0 70 chr12 2255700 2256300 0.5027 397 chr12 2280600 2280900 0.6062 56 chr12 2407500 2407800 0.473 74 chr12 2520000 2520900 0.0416 129 chr12 2539200 2539800 0.0621 251 chr12 2685300 2685600 0.5132 56 chr12 2701200 2701500 0.3339 83 chr12 2719800 2720400 0.6356 83 chr12 2741400 2741700 0.5614 67 chr12 3094800 3096000 0.3023 57 chr12 3197700 3198000 0.6687 53 chr12 3392400 3394200 0.1903 83 chr12 3396600 3396900 0.1903 83 chr12 3499200 3505200 0 91 chr12 4179900 4180800 0.3368 75 chr12 4509000 4513500 0.0296 100 chr12 4732500 4733100 0.2752 88 chr12 4973400 4974000 0.4494 34 chr12 5117100 5122200 0.0353 72 chr12 5143200 5143500 0.5589 54 chr12 5285400 5286600 0.3206 62 chr12 5288400 5290500 0.1882 77 chr12 5394000 5394300 0.5555 38 chr12 5928600 5930100 0.4367 103 chr12 5931600 5932800 0.3595 141 chr12 6022500 6023100 0.1418 65 chr12 6100200 6100500 0.5861 55 chr12 6290100 6291000 0.1073 69 chr12 7196700 7197000 0.3466 12 chr12 7279800 7280100 0.5133 41 chr12 7333800 7334100 0.4821 72 chr12 7335900 7336200 0.1421 75 chr12 7506600 7506900 0.4267 61 chr12 7794900 7795800 0.5397 116 chr12 7819500 7820100 0.003 61 chr12 7839000 7839300 0.3406 67 chr12 7843200 7843800 0.4507 69 chr12 7896600 7896900 0.4727 67 chr12 7898700 7899000 0.6098 73 chr12 7924500 7924800 0.1292 49 chr12 7954200 7954500 0.3128 65 chr12 7971900 7972500 0.0996 74 chr12 7980300 7980600 0.3494 26 chr12 8184600 8185500 0.1142 50 chr12 8199000 8199300 0.4597 75 chr12 8387700 8388600 0.0124 87 chr12 8391000 8391600 0.6921 17 chr12 8394000 8395500 0.0024 102 chr12 8415600 8415900 0.6563 35 chr12 8420100 8421300 0.5849 25 chr12 8438400 8438700 0.3534 20 chr12 8462400 8462700 0.5143 41 chr12 8472900 8473200 0.5634 33 chr12 8625600 8626800 0.0719 79 chr12 8787600 8788500 0.0007 62 chr12 8795100 8796000 0 67 chr12 8932800 8933400 0.1333 69 chr12 8939400 8941200 0.0036 68 chr12 8964600 8964900 0.2151 86 chr12 8966700 8967000 0.2151 86 chr12 9062100 9062400 0.6945 23 chr12 9285000 9294000 0 90 chr12 9295200 9301800 0 90 chr12 9303000 9304200 0.3886 72 chr12 9306600 9306900 0.502 61 chr12 9314400 9315300 0.2531 83 chr12 9395400 9395700 0.2869 37 chr12 9401100 9401700 0.0543 36 chr12 9414900 9415200 0.0933 72 chr12 9422700 9423000 0.5105 56 chr12 9425100 9426300 0.3821 87 chr12 9427800 9428700 0 98 chr12 9430200 9446700 0 98 chr12 9455100 9455700 0.0629 28 chr12 9459000 9459300 0.464 65 chr12 9467700 9468000 0.0138 21 chr12 9482100 9482400 0.3942 14 chr12 9496800 9497100 0.0659 18 chr12 9501600 9502200 0.3975 22 chr12 9503400 9503700 0.625 10 chr12 9512700 9513000 0.5589 16 chr12 9523200 9525600 0 80 chr12 9549600 9549900 0.3735 16 chr12 9556500 9556800 0.0369 14 chr12 9559800 9560100 0 15 chr12 9561300 9561600 0 15 chr12 9563100 9563400 0 29 chr12 9567600 9568500 0.3527 67 chr12 9570600 9572100 0 38 chr12 9573600 9574200 0 22 chr12 9577500 9578100 0 15 chr12 9580500 9582300 0 67 chr12 9952500 9954000 0.2318 65 chr12 10337100 10337400 0.5522 49 chr12 10344600 10346400 0.1088 79 chr12 10348800 10349100 0.2629 71 chr12 10419600 10419900 0.5081 23 chr12 10423800 10425300 0 38 chr12 10426800 10427700 0.0031 52 chr12 10437000 10437900 0 21 chr12 10439100 10440900 0.078 49 chr12 10442400 10443000 0.0028 48 chr12 10520100 10520400 0.417 89 chr12 10551000 10551300 0.4371 62 chr12 10882200 10882500 0.4636 51 chr12 11027100 11027400 0.3208 53 chr12 11034000 11034600 0.0808 28 chr12 11088000 11088600 0.065 38 chr12 11091300 11091600 0.5041 17 chr12 11095200 11095500 0 19 chr12 11106000 11106300 0.4075 18 chr12 11148300 11150100 0.1286 59 chr12 11213100 11213400 0.4115 68 chr12 11298000 11303400 0 67 chr12 11319600 11320200 0.2752 75 chr12 11352000 11353800 0 75 chr12 11391900 11393100 0 67 chr12 11395500 11395800 0.3848 47 chr12 11841900 11842200 0.4552 84 chr12 11936100 11938800 0.0281 70 chr12 12322800 12323100 0.6824 16 chr12 12413100 12415200 0.299 55 chr12 13392000 13399800 0 101 chr12 14586300 14586600 0.243 11 chr12 14631600 14631900 0.2572 79 chr12 15212100 15212400 0.4026 70 chr12 15357600 15357900 0.3885 54 chr12 15476700 15477300 0.0936 70 chr12 16378500 16378800 0.3962 65 chr12 16525500 16526100 0.3689 52 chr12 16707300 16710300 0.0475 118 chr12 17097600 17097900 0.6979 269 chr12 17175900 17179200 0.0388 81 chr12 17239500 17239800 0.5668 50 chr12 17656200 17656500 0.3882 59 chr12 17741100 17741400 0.6223 31 chr12 17769300 17770800 0.0281 103 chr12 17772600 17773800 0.0281 103 chr12 17856300 17860200 0.0218 105 chr12 18164700 18165000 0.4122 53 chr12 18369600 18370200 0.212 65 chr12 19000500 19000800 0.5396 33 chr12 19173000 19173300 0.4671 40 chr12 19340400 19340700 0.1178 66 chr12 19728900 19729200 0.1494 74 chr12 19730400 19730700 0.1494 74 chr12 19815900 19817400 0.4909 100 chr12 20156100 20156400 0.5568 48 chr12 20553000 20553600 0.1403 65 chr12 20670000 20673600 0.2462 94 chr12 20709600 20709900 0 16 chr12 20773500 20773800 0.1748 45 chr12 21085200 21085800 0.4719 63 chr12 21210000 21210300 0.484 60 chr12 21212100 21213900 0.2453 96 chr12 21284700 21288000 0.0055 79 chr12 21396000 21400800 0.039 96 chr12 21420000 21425100 0 67 chr12 21466200 21466500 0.4282 55 chr12 21622500 21622800 0 11 chr12 21798300 21799200 0.2731 76 chr12 21976800 21978300 0 37 chr12 22137000 22137600 0.114 87 chr12 22139100 22142100 0.114 87 chr12 22178100 22178400 0.2578 49 chr12 22418700 22431600 0 50 chr12 22734900 22735800 0.2272 72 chr12 22944600 22944900 0.3689 61 chr12 23070900 23071200 0.2396 75 chr12 23073600 23073900 0.0609 58 chr12 23075100 23075400 0.0609 58 chr12 23390400 23390700 0.509 43 chr12 24581700 24582000 0.3608 68 chr12 25485600 25488600 0.1063 78 chr12 25517400 25517700 0.5489 11 chr12 25538400 25542000 0.2104 71 chr12 26035200 26035800 0.1413 142 chr12 26216400 26217900 0.1756 77 chr12 26673600 26674200 0.0667 57 chr12 26784900 26786400 0.03 33 chr12 27124800 27125100 0.5471 54 chr12 27131100 27132000 0.2361 77 chr12 27281100 27281400 0.1179 22 chr12 27643200 27644100 0.2817 71 chr12 28003200 28003500 0.4555 69 chr12 28007400 28007700 0.414 79 chr12 28200300 28200600 0.1354 53 chr12 28695600 28696200 0.4597 53 chr12 28762800 28764600 0.1306 74 chr12 29017200 29017500 0.4654 59 chr12 29406600 29406900 0.108 67 chr12 29408400 29408700 0.108 67 chr12 29584800 29585100 0.3645 63 chr12 29814000 29814300 0.3395 65 chr12 29823000 29823300 0.5422 61 chr12 29913900 29914200 0.2609 77 chr12 29932200 29933100 0.0067 98 chr12 30036600 30036900 0.397 54 chr12 30433200 30433800 0.2222 72 chr12 30521100 30521400 0.1784 47 chr12 31056600 31056900 0.3364 44 chr12 31062900 31063200 0.5073 50 chr12 31079100 31079700 0.4885 68 chr12 31120200 31120500 0.6498 16 chr12 31129200 31129500 0.6347 39 chr12 31134000 31134300 0.1964 24 chr12 31163700 31166400 0.2344 81 chr12 31168500 31168800 0.3896 72 chr12 31614600 31615800 0.3056 69 chr12 32099700 32100300 0.0421 56 chr12 32220600 32220900 0.3746 54 chr12 32232000 32232300 0.361 78 chr12 32810700 32811000 0.173 25 chr12 33346200 33346500 0.3843 41 chr12 33738000 33740400 0.0824 68 chr12 33793800 33794100 0.3079 86 chr12 33976200 33976500 0.5037 51 chr12 34018800 34019100 0.572 85 chr12 34067700 34068000 0.2524 63 chr12 34069800 34070100 0.2524 63 chr12 34236000 34236300 0.6256 114 chr12 34669800 34670100 0.0392 65 chr12 34680900 34682700 0.5928 155 chr12 34690200 34690500 0.6907 78 chr12 34695000 34695600 0.6184 87 chr12 34770000 34773000 0 85 chr12 34774200 34796400 0 85 chr12 34797600 34800000 0 88 chr12 34802700 34803600 0 88 chr12 34805700 34817100 0 64 chr12 34820400 34822200 0 51 chr12 34829400 34829700 0.0065 44 chr12 34830900 34832700 0.0065 44 chr12 34834500 34863000 0 1117 chr12 34864200 34872900 0 1117 chr12 34874100 35482800 0 1117 chr12 35484000 35650500 0 4118 chr12 35651700 35809800 0 4118 chr12 35811000 36189600 0 4118 chr12 36191100 36268500 0 213 chr12 36270000 36450900 0 213 chr12 36452400 36624000 0 213 chr12 36625200 36699900 0 479 chr12 36701100 36733800 0 479 chr12 36735000 36779100 0 479 chr12 36780300 36830400 0 479 chr12 36831600 37010400 0 479 chr12 37011600 37039200 0 479 chr12 37040700 37102500 0 182 chr12 37104300 37111800 0 232 chr12 37113000 37185300 0 232 chr12 37235400 37240800 0 144 chr12 37246200 37248900 0 82 chr12 37250700 37251900 0 43 chr12 37317300 37317600 0.6355 109 chr12 37333200 37334700 0 50 chr12 37339800 37340400 0.1009 46 chr12 37342500 37342800 0.1614 26 chr12 37465500 37465800 0.2866 25 chr12 37486500 37486800 0.5285 101 chr12 37646700 37647000 0.5161 292 chr12 37649100 37649400 0.5101 179 chr12 37653600 37653900 0.5279 182 chr12 37671000 37671300 0.6895 100 chr12 37688400 37688700 0.6871 89 chr12 37691100 37691400 0.6592 55 chr12 37700100 37700400 0.6715 181 chr12 37702800 37703100 0.6872 120 chr12 37705800 37706400 0.0472 60 chr12 37709700 37710000 0.6542 180 chr12 37713000 37713300 0.5877 128 chr12 37716300 37716600 0.5726 83 chr12 37719300 37720500 0.5986 156 chr12 37723500 37723800 0.6471 113 chr12 37728300 37728600 0.6554 88 chr12 37730700 37733400 0.501 250 chr12 37736400 37737000 0.1871 65 chr12 37814400 37815900 0.1457 94 chr12 38072700 38073000 0.2971 47 chr12 38094000 38094300 0.0755 35 chr12 38211600 38212200 0.0059 54 chr12 38226900 38227200 0.276 44 chr12 38313300 38313600 0.0745 41 chr12 38627700 38628000 0.4012 59 chr12 38799900 38805600 0 84 chr12 38963700 38964000 0.3546 69 chr12 38967600 38967900 0.4597 45 chr12 38990400 38990700 0.2959 73 chr12 39488400 39488700 0.4555 84 chr12 39613200 39613500 0.5663 33 chr12 39665400 39665700 0.4542 26 chr12 39696300 39696600 0.3236 56 chr12 39790500 39792300 0.0042 63 chr12 39800400 39801300 0 66 chr12 39836400 39837600 0.0357 60 chr12 39901500 39901800 0.0425 97 chr12 39979500 39980100 0.0268 87 chr12 39981600 39984000 0.0268 87 chr12 41007000 41007300 0.5694 50 chr12 41040900 41041200 0.329 75 chr12 41083500 41083800 0.3627 86 chr12 41181000 41181300 0.2641 57 chr12 41639700 41640600 0.2166 84 chr12 41667600 41671200 0.2172 81 chr12 41673300 41677500 0.1789 94 chr12 41822400 41822700 0.3355 101 chr12 41823900 41824200 0.3355 101 chr12 41844300 41845200 0 31 chr12 41976900 41977200 0.3877 62 chr12 42047100 42047400 0.314 66 chr12 42226800 42227400 0.5732 38 chr12 42228600 42229500 0.0121 49 chr12 42919200 42919500 0.3281 61 chr12 43230300 43231500 0.3165 69 chr12 43260600 43260900 0.2944 43 chr12 43471500 43476600 0.0213 124 chr12 43532700 43534200 0.0058 49 chr12 43583700 43585500 0 55 chr12 43605900 43606200 0.1232 68 chr12 43622700 43624200 0.2229 70 chr12 43686000 43686300 0.1915 55 chr12 43790700 43791300 0.1281 61 chr12 43794300 43794600 0.4102 55 chr12 43908900 43912200 0.0416 65 chr12 44108400 44114100 0 106 chr12 44180400 44180700 0.5456 65 chr12 44576700 44577300 0.1435 70 chr12 44818800 44819100 0.4452 55 chr12 44865000 44865600 0.3463 55 chr12 44951700 44956800 0.0622 84 chr12 44970900 44971200 0.5511 68 chr12 45229500 45229800 0.319 237 chr12 45372300 45372600 0.1296 83 chr12 45374100 45374700 0.0559 101 chr12 45376200 45376800 0.0559 101 chr12 46056300 46056600 0.464 62 chr12 46681500 46681800 0.6116 22 chr12 46704900 46706100 0.2725 64 chr12 46939500 46941300 0.2617 67 chr12 47427900 47428200 0.3593 80 chr12 47432400 47432700 0.3593 80 chr12 47873400 47873700 0.5417 41 chr12 48209700 48210300 0.4224 60 chr12 48277200 48278100 0.2469 72 chr12 48320700 48321000 0.4768 78 chr12 48331800 48334200 0.0234 65 chr12 48499800 48500100 0.4508 66 chr12 48548400 48548700 0.4376 67 chr12 48842400 48843300 0.1963 67 chr12 48915300 48915600 0.5296 40 chr12 49435800 49436100 0.3365 78 chr12 50535900 50536200 0.5167 60 chr12 50872200 50872800 0.5769 29 chr12 51454500 51455100 0.0491 75 chr12 51561600 51568500 0 97 chr12 51719100 51719700 0.0474 60 chr12 52013100 52013400 0.527 47 chr12 52288800 52291500 0.001 82 chr12 52302000 52304400 0.0202 93 chr12 52410300 52410600 0.225 82 chr12 52473300 52473600 0.4698 55 chr12 53003400 53003700 0.5731 33 chr12 53682300 53682600 0.5415 35 chr12 54066900 54067200 0.548 35 chr12 54779700 54780000 0.1159 41 chr12 54789000 54794400 0 80 chr12 54885000 54885300 0.6688 36 chr12 54921900 54922200 0.5284 59 chr12 55081500 55082100 0.2909 80 chr12 55083900 55084500 0.2909 80 chr12 55096500 55101300 0 85 chr12 55155000 55155300 0.3689 93 chr12 55161900 55162200 0.3636 73 chr12 55163700 55164000 0.3078 106 chr12 55225500 55226100 0.4931 72 chr12 55333800 55334100 0.508 36 chr12 55344600 55350000 0 75 chr12 55387800 55388100 0.4892 45 chr12 55409700 55411800 0.0049 62 chr12 55413000 55413600 0.0233 98 chr12 55486200 55489800 0.1927 75 chr12 55521600 55522200 0.3122 87 chr12 55594800 55595100 0.3767 48 chr12 55690500 55690800 0.4649 70 chr12 56075400 56076600 0.2028 77 chr12 56400600 56401200 0.1159 79 chr12 56788500 56789100 0.2583 59 chr12 56938500 56938800 0.235 72 chr12 56940300 56941200 0.0362 63 chr12 56964300 56964900 0.3285 46 chr12 56982000 56982300 0.2231 64 chr12 56984700 56985300 0.0146 76 chr12 57507000 57507600 0.6082 52 chr12 57647700 57652200 0.0052 106 chr12 57971100 57971700 0.273 74 chr12 58054200 58054500 0.268 65 chr12 58057200 58058400 0.268 65 chr12 58075200 58075500 0.3864 53 chr12 58109700 58110900 0.0552 78 chr12 58112400 58113000 0.0552 78 chr12 58218600 58218900 0.4499 55 chr12 58228500 58228800 0.4273 65 chr12 58327500 58336800 0.0014 108 chr12 58471800 58475100 0.2231 35 chr12 58494300 58494600 0.4754 50 chr12 59467800 59468400 0.44 48 chr12 59590200 59590500 0.5444 74 chr12 59739300 59739600 0.1942 56 chr12 59756700 59757000 0.1921 54 chr12 59955000 59955300 0.3525 42 chr12 60008700 60009600 0.0024 167 chr12 60736500 60736800 0.4053 58 chr12 61002900 61003200 0.3688 65 chr12 61206300 61206600 0.5438 64 chr12 61223400 61223700 0.471 55 chr12 61400400 61400700 0.4803 69 chr12 61471200 61471500 0.2977 41 chr12 61540200 61541700 0.1974 85 chr12 61733700 61734300 0.4047 77 chr12 61942200 61947000 0.0109 88 chr12 62496900 62497200 0.5118 23 chr12 62838600 62838900 0.4071 47 chr12 63189300 63189600 0.4854 60 chr12 63545700 63546000 0.4709 46 chr12 63547800 63548100 0.4829 77 chr12 63592200 63592800 0.3926 65 chr12 63670500 63671100 0.3066 51 chr12 63740700 63741000 0.4089 65 chr12 63742800 63743100 0.4016 57 chr12 64055100 64055400 0.3347 61 chr12 64140300 64141200 0.2441 60 chr12 64196700 64201800 0.0108 80 chr12 64287600 64293000 0 89 chr12 64846500 64847100 0.3735 64 chr12 65350500 65351700 0.3252 78 chr12 65550300 65551200 0.1118 83 chr12 65552400 65552700 0.1118 83 chr12 65687400 65687700 0.2018 60 chr12 65813400 65813700 0.6121 27 chr12 66057300 66057900 0.1246 480 chr12 66134400 66135900 0.0581 39 chr12 66444300 66444600 0.6054 58 chr12 66579900 66580800 0.3277 71 chr12 66582600 66584100 0.3277 71 chr12 66585600 66585900 0.3999 54 chr12 67136100 67136400 0.233 44 chr12 67844100 67845300 0.2872 76 chr12 67846500 67847400 0.2872 76 chr12 67903800 67905600 0.083 80 chr12 67953600 67954200 0.1828 70 chr12 68513100 68513700 0.2871 62 chr12 68659800 68660400 0.1348 56 chr12 68927100 68927400 0.4155 74 chr12 68994600 68995200 0.0871 52 chr12 69469200 69469500 0.5557 52 chr12 69759000 69759300 0.5501 47 chr12 69773400 69779400 0 85 chr12 69808800 69809100 0.498 62 chr12 69861900 69862200 0.3379 82 chr12 69940200 69944400 0.0987 81 chr12 70013700 70018800 0.0004 98 chr12 70201200 70203600 0.0008 120 chr12 70682100 70682400 0.6483 51 chr12 70769100 70770300 0.2245 77 chr12 70866900 70867200 0.4373 71 chr12 71098800 71099700 0.121 65 chr12 71100900 71103300 0.0198 84 chr12 71119200 71120100 0 60 chr12 71121900 71124000 0 60 chr12 71265000 71265300 0.3284 61 chr12 71564100 71564700 0 57 chr12 71911500 71911800 0.4343 100 chr12 72514800 72515400 0.1046 76 chr12 72516600 72518400 0.4761 92 chr12 72636300 72636600 0.3576 61 chr12 72638100 72638400 0.4116 69 chr12 72908400 72908700 0.1393 69 chr12 73148100 73149600 0.0165 83 chr12 73150800 73152600 0.0165 83 chr12 73194600 73195500 0.0735 109 chr12 73197000 73197300 0.4997 58 chr12 73283700 73288800 0 75 chr12 73395600 73400700 0.1651 92 chr12 73506000 73506300 0.5575 42 chr12 73698000 73698300 0.45 41 chr12 73982400 73983600 0.0185 137 chr12 74505900 74507400 0.3468 95 chr12 74875200 74880900 0 86 chr12 75003300 75003600 0.5133 59 chr12 75729900 75730500 0.1438 97 chr12 76122300 76122600 0.3161 11 chr12 76321800 76322100 0.2896 79 chr12 77173800 77178600 0.0997 85 chr12 77514900 77515200 0.4974 21 chr12 77656200 77656800 0.1887 46 chr12 78070800 78071100 0.4357 90 chr12 78072300 78073500 0.0636 84 chr12 79039800 79040100 0.4156 64 chr12 79042200 79042800 0.2092 76 chr12 79044300 79044900 0.2092 76 chr12 79177200 79178100 0.0212 61 chr12 79311300 79311900 0.4239 75 chr12 79368300 79368900 0.426 80 chr12 80148300 80148600 0.341 73 chr12 80244900 80248800 0.0059 80 chr12 80307000 80307300 0.3144 61 chr12 80448600 80448900 0.4907 41 chr12 80451300 80452200 0 56 chr12 80453400 80454000 0 54 chr12 80462400 80463000 0.2633 112 chr12 80464200 80465100 0 59 chr12 80479500 80479800 0.3687 62 chr12 80481900 80483400 0.0841 63 chr12 80586300 80586600 0.5698 47 chr12 81638700 81639000 0.5334 51 chr12 82133400 82133700 0.5882 47 chr12 82899900 82900800 0.0784 88 chr12 83393700 83394300 0.0496 21 chr12 83428800 83429100 0.4467 70 chr12 83450400 83450700 0.1169 54 chr12 83524500 83524800 0.0431 46 chr12 83587500 83587800 0.1922 73 chr12 83589600 83589900 0.1922 73 chr12 83671800 83676600 0 75 chr12 83894400 83894700 0.4216 59 chr12 83902200 83902800 0.1238 47 chr12 84006300 84006900 0.2963 61 chr12 84090600 84090900 0.3889 31 chr12 85193100 85194600 0.0472 82 chr12 85312800 85313100 0.0178 95 chr12 85315200 85317600 0.0178 95 chr12 86802600 86804100 0.1499 76 chr12 86844900 86846400 0.0051 76 chr12 86859300 86859900 0.0199 59 chr12 86880000 86880300 0.5551 40 chr12 86947500 86947800 0.5216 41 chr12 87077400 87078300 0.2803 56 chr12 87102000 87102900 0.1538 56 chr12 87191700 87194100 0.0215 67 chr12 87582600 87583500 0.1326 75 chr12 87680400 87681000 0.4875 56 chr12 87682800 87683100 0.5681 71 chr12 87746700 87750000 0 72 chr12 87751500 87751800 0.4369 54 chr12 87970500 87971400 0.3748 87 chr12 88621800 88622700 0.0283 74 chr12 88710300 88710900 0.506 87 chr12 88712700 88713900 0.2877 89 chr12 88847400 88848600 0.2979 106 chr12 88852200 88852500 0.1961 71 chr12 88938900 88940400 0.4166 87 chr12 89443500 89443800 0.2605 82 chr12 89808300 89808900 0.5133 80 chr12 89811000 89811300 0.3001 72 chr12 89867100 89867700 0.3529 67 chr12 90536700 90543300 0 69 chr12 90841800 90842100 0.6929 53 chr12 91708800 91709100 0.4695 74 chr12 91977900 91978200 0.4868 62 chr12 92231700 92232600 0.1595 75 chr12 92314800 92319900 0 85 chr12 92679300 92682000 0.2234 87 chr12 92727900 92728500 0.4381 31 chr12 92916600 92921700 0.0157 71 chr12 93399300 93399900 0.0799 48 chr12 93401100 93402300 0.1436 59 chr12 93492900 93494100 0 63 chr12 93498000 93499200 0 56 chr12 93639900 93640800 0.3409 62 chr12 93987900 93989400 0.3695 66 chr12 94485900 94486200 0.4045 72 chr12 94950300 94950600 0.2662 49 chr12 95235000 95235300 0.5808 63 chr12 95339700 95340000 0.3328 67 chr12 95586300 95586600 0.5456 56 chr12 95596200 95596500 0.5883 51 chr12 95839800 95842500 0 59 chr12 95907000 95907600 0.4745 57 chr12 95923800 95926200 0.2328 89 chr12 95927700 95928300 0.2328 89 chr12 95946600 95949300 0.0013 67 chr12 96152700 96153000 0.4852 48 chr12 96316500 96321900 0 84 chr12 96725700 96726300 0.4449 75 chr12 96827400 96827700 0.1323 25 chr12 96916500 96916800 0.3707 75 chr12 97161000 97161300 0.0607 40 chr12 97351200 97351500 0.3914 70 chr12 97652700 97656300 0.1655 85 chr12 97704900 97709100 0 73 chr12 97718100 97719000 0.0631 77 chr12 97722300 97723200 0.3235 89 chr12 97725300 97729800 0 79 chr12 97950600 97950900 0.6793 28 chr12 98250000 98250300 0.4023 55 chr12 98278500 98279100 0.0287 65 chr12 98457600 98457900 0.5219 47 chr12 98654700 98655300 0.1204 68 chr12 99052500 99052800 0.5118 30 chr12 99058800 99059100 0.5447 54 chr12 101146800 101147400 0 82 chr12 101149200 101151900 0 82 chr12 101153700 101154300 0 82 chr12 101389800 101390100 0.497 79 chr12 101509200 101511600 0.0433 70 chr12 101586300 101587200 0.1689 69 chr12 101704500 101705700 0.054 45 chr12 102308100 102308700 0.1209 69 chr12 102311400 102311700 0.4796 60 chr12 102448200 102448500 0.4219 57 chr12 102827400 102829500 0.1071 81 chr12 102831300 102831900 0.3099 77 chr12 102899700 102900000 0.5702 34 chr12 103297800 103298100 0.6002 60 chr12 103321200 103321800 0.153 95 chr12 103436700 103437000 0.299 76 chr12 103440000 103440300 0.299 76 chr12 103656600 103656900 0.3347 58 chr12 103899600 103899900 0.1547 45 chr12 103905300 103905600 0.6653 12 chr12 104031600 104032200 0.15 64 chr12 104322900 104323800 0.1151 66 chr12 104572200 104572500 0.4728 61 chr12 104916900 104917200 0.3397 62 chr12 105629100 105633600 0.0854 88 chr12 105664200 105664500 0.4056 33 chr12 105777300 105781500 0 70 chr12 106403100 106403400 0.3303 85 chr12 106472100 106474800 0 77 chr12 106476000 106477500 0 77 chr12 106751100 106752300 0.4565 88 chr12 107189100 107189400 0.4309 60 chr12 108348000 108348600 0.0384 26 chr12 108859800 108860100 0.6372 22 chr12 108997800 109002600 0.0171 84 chr12 109634400 109635600 0.3056 125 chr12 110570400 110571300 0.023 73 chr12 110866500 110867700 0.5145 61 chr12 111296700 111297000 0.5362 49 chr12 111829200 111829500 0.3129 49 chr12 111831900 111832200 0.1301 75 chr12 112323900 112324200 0.5547 23 chr12 112621200 112627200 0 105 chr12 113451600 113451900 0.5303 35 chr12 113871900 113873700 0.065 103 chr12 114063900 114064500 0.5514 76 chr12 114084000 114084600 0.5332 59 chr12 114536100 114536700 0.3072 68 chr12 114571500 114571800 0.0632 59 chr12 115286400 115290600 0.0159 106 chr12 117428400 117429000 0.433 75 chr12 118514700 118515000 0.6209 52 chr12 118658700 118659000 0.454 62 chr12 118681200 118681500 0.209 60 chr12 118707600 118708200 0.4307 150 chr12 118757700 118758000 0.6421 63 chr12 119397600 119397900 0.5316 37 chr12 119918100 119919900 0.3589 68 chr12 120552900 120553200 0.5249 63 chr12 120928500 120928800 0.1222 34 chr12 120987900 120988200 0.6905 39 chr12 121301100 121301400 0.4575 20 chr12 121362300 121362600 0.4014 50 chr12 121515000 121515300 0.6728 15 chr12 121747200 121748100 0.0484 46 chr12 121992900 121995000 0.2093 67 chr12 122579100 122579400 0.5492 44 chr12 122695800 122696700 0.0165 69 chr12 122700000 122700600 0.1872 76 chr12 122704200 122704500 0.3565 49 chr12 122709300 122709900 0.0322 64 chr12 122713500 122714100 0.0144 76 chr12 122717700 122718000 0.2796 59 chr12 122853300 122853600 0.6435 29 chr12 122973300 122973600 0.4372 33 chr12 124089300 124089600 0.4693 49 chr12 124092600 124092900 0.5658 103 chr12 124101300 124101900 0.1226 37 chr12 124234800 124235100 0.6686 99 chr12 124323300 124323600 0.6617 46 chr12 124373400 124373700 0.4542 33 chr12 124839600 124840200 0.2197 69 chr12 124911900 124912500 0.1934 55 chr12 125204400 125205000 0.4183 67 chr12 125409600 125411100 0.1004 27 chr12 125729700 125730000 0.3679 68 chr12 126151500 126152100 0.1364 60 chr12 126180600 126181200 0.6278 56 chr12 126299100 126305100 0 97 chr12 126583500 126584400 0 69 chr12 126969000 126969600 0.3368 81 chr12 127095000 127100100 0.049 86 chr12 127176000 127176300 0.443 34 chr12 127545000 127545900 0.0013 39 chr12 127568700 127569000 0.6049 43 chr12 127871100 127871700 0.0355 70 chr12 128041800 128042400 0.544 65 chr12 128241600 128241900 0.5572 32 chr12 128638800 128639100 0.5263 192 chr12 128708100 128708700 0.4473 118 chr12 128844600 128846700 0.2808 46 chr12 129018000 129018300 0.1703 46 chr12 129087900 129089400 0.4039 146 chr12 129190200 129190500 0.4359 54 chr12 129303000 129303600 0.0859 76 chr12 129356100 129356400 0.2866 28 chr12 129479700 129480000 0.4053 42 chr12 129575700 129576000 0.5075 15 chr12 129801600 129802500 0.0327 79 chr12 129804000 129806700 0.0327 79 chr12 129855300 129858600 0 58 chr12 130338300 130338600 0.4328 51 chr12 130379400 130380000 0.3554 69 chr12 130386600 130387500 0.0245 62 chr12 130392000 130393200 0.477 207 chr12 130482900 130483200 0.4381 47 chr12 130539600 130539900 0.5085 54 chr12 130586700 130587600 0.0468 87 chr12 130646100 130646400 0.5291 37 chr12 130782300 130782600 0.5875 156 chr12 130843800 130844100 0.1047 100 chr12 130882200 130882800 0.1945 66 chr12 130887600 130887900 0.2105 73 chr12 131032800 131033100 0.4251 58 chr12 131067600 131067900 0.5232 37 chr12 131071800 131072100 0.4112 61 chr12 131195100 131195400 0.038 61 chr12 131200800 131202600 0 81 chr12 131206200 131206800 0.1545 67 chr12 131225400 131226000 0.0162 76 chr12 131235300 131235600 0.5025 69 chr12 131244600 131244900 0.6811 43 chr12 131278200 131278500 0.2476 66 chr12 131297100 131307900 0 78 chr12 131367000 131367300 0.5236 75 chr12 131392500 131393400 0.2243 56 chr12 131395500 131395800 0.4328 231 chr12 131400000 131400300 0.6368 47 chr12 131413800 131414700 0.6272 40 chr12 131433300 131434200 0.0373 49 chr12 131439600 131440200 0.042 62 chr12 131470500 131470800 0.0808 49 chr12 131474700 131476500 0 93 chr12 131481000 131481900 0.0311 62 chr12 131539200 131539500 0.674 91 chr12 131559000 131559300 0.4552 60 chr12 131577000 131577300 0.5375 170 chr12 131580300 131581200 0.3327 60 chr12 131582400 131582700 0.5092 37 chr12 131588100 131588700 0.1747 439 chr12 131626500 131627700 0.1268 196 chr12 131646600 131646900 0.5639 57 chr12 131654400 131658300 0.0791 105 chr12 131660700 131663700 0 82 chr12 131701200 131701800 0.111 28 chr12 131766900 131767200 0.5255 49 chr12 131810100 131810700 0.3983 57 chr12 132135000 132136200 0.536 29 chr12 132148800 132150600 0.0006 206 chr12 132212100 132212700 0.0779 37 chr12 132231300 132236100 0 72 chr12 132240900 132243300 0.1538 199 chr12 132244500 132244800 0.6188 11 chr12 132303600 132305400 0.466 63 chr12 132349800 132350100 0.4687 225 chr12 132359100 132359400 0.6725 26 chr12 132361800 132362700 0.2446 71 chr12 132364800 132365100 0.4251 34 chr12 132378000 132378300 0.1995 12 chr12 132384300 132384600 0.5467 43 chr12 132387600 132387900 0.5777 47 chr12 132392100 132392400 0.3899 14 chr12 132412800 132413400 0.588 37 chr12 132463500 132464400 0.3734 125 chr12 132684000 132684900 0.1793 92 chr12 132688200 132689100 0.1648 40 chr12 132692700 132694500 0.4516 37 chr12 132759000 132759300 0.6324 98 chr12 132787500 132787800 0.6342 44 chr12 132793200 132793800 0.009 51 chr12 132805200 132805500 0.5663 32 chr12 132817200 132818100 0.3954 34 chr12 132836100 132836400 0.2755 33 chr12 132945300 132945600 0.5888 69 chr12 133198200 133199100 0.3447 66 chr12 133264800 133265400 0 201 chr13 16001700 16002300 0.0914 67 chr13 16004100 16006800 0.1347 164 chr13 16011000 16011900 0.6061 134 chr13 16013100 16013400 0.6246 56 chr13 16015800 16016400 0.3213 59 chr13 16020600 16020900 0.5086 23 chr13 16023000 16025400 0.0067 150 chr13 16027200 16034700 0.0067 150 chr13 16035900 16036200 0.633 43 chr13 16038300 16065000 0 152 chr13 16067700 16069500 0 152 chr13 16070700 16074000 0 153 chr13 16075200 16077000 0 153 chr13 16078200 16129200 0 1096 chr13 16130400 16156500 0.0646 1637 chr13 16157700 16237500 0 1721 chr13 16238700 16256100 0 1118 chr13 16257600 16259100 0.6794 216 chr13 16260600 16260900 0.4284 75 chr13 16262100 16263600 0 83 chr13 16265400 16400100 0 1930 chr13 16401300 16426800 0 4973 chr13 16428300 16906200 0 4973 chr13 16908000 16954200 0 7157 chr13 16955400 17447400 0 7157 chr13 17448600 17449500 0 7157 chr13 17451000 17881200 0 7157 chr13 17882400 18051300 0 7157 chr13 18171300 18171600 0.5031 85 chr13 18178500 18179100 0.4745 168 chr13 18191400 18192300 0.3695 115 chr13 18193800 18197100 0.1706 123 chr13 18201300 18203400 0.2348 186 chr13 18206100 18206400 0.4626 141 chr13 18211500 18215100 0.104 51632 chr13 18284400 18284700 0.4444 81 chr13 18293100 18293400 0.4432 77 chr13 18312600 18312900 0.3967 71 chr13 18317100 18318300 0.2492 155 chr13 18320400 18320700 0.5555 96 chr13 18325500 18326100 0.4365 51 chr13 18330900 18331200 0.57 180 chr13 18333600 18334200 0.4278 117 chr13 18336300 18337200 0.2203 207 chr13 18339000 18352500 0 92 chr13 18353700 18357300 0 92 chr13 18408900 18410400 0.3518 55 chr13 18411900 18412200 0 75 chr13 18414000 18418200 0 75 chr13 18419700 18431100 0 75 chr13 18432600 18436500 0.0002 58 chr13 18440400 18442200 0.2048 61 chr13 18448800 18450000 0.2029 45 chr13 18452700 18453300 0.2452 72 chr13 18456900 18460500 0.016 234 chr13 18462300 18462900 0.3939 48 chr13 18464100 18464400 0.1352 42 chr13 18466200 18466800 0.1896 57 chr13 18481200 18482100 0.1162 66 chr13 18483900 18484200 0.1162 66 chr13 18485700 18486000 0.1162 66 chr13 18489000 18489300 0.3804 52 chr13 18492000 18495600 0.1381 66 chr13 18497400 18498300 0.1321 52 chr13 18503100 18503400 0.3493 69 chr13 18509100 18510300 0.0224 65 chr13 18515700 18516300 0.2928 67 chr13 18519300 18519600 0.2887 72 chr13 18520800 18522000 0.2887 72 chr13 18527100 18528600 0.4423 63 chr13 18534300 18536700 0.2414 63 chr13 18538500 18540600 0.2064 55 chr13 18542700 18544200 0.3408 63 chr13 18546900 18560100 0 75 chr13 18562800 18569700 0.1572 58 chr13 18571200 18574800 0.005 66 chr13 18576000 18577800 0.005 66 chr13 18579900 18582000 0.005 66 chr13 18583500 18583800 0.005 66 chr13 18585000 18585300 0.005 66 chr13 18588000 18588900 0.005 66 chr13 18592500 18592800 0.2901 55 chr13 18603600 18604800 0 58 chr13 18606300 18608700 0.0796 54 chr13 18616800 18617100 0.2616 43 chr13 18622800 18623100 0.5827 51 chr13 18669900 18670200 0.2181 68 chr13 18671400 18672000 0.0407 49 chr13 18675600 18676200 0.0903 62 chr13 18705300 18705600 0.5043 55 chr13 18759000 18759300 0.498 38 chr13 18769200 18771600 0 36 chr13 18778200 18779100 0.4406 62 chr13 18783000 18783300 0.6622 70 chr13 18784800 18785400 0.0495 61 chr13 18788400 18790800 0 32 chr13 18801300 18801900 0.0124 56 chr13 18805800 18806100 0.2793 70 chr13 18902700 18903000 0.1139 20 chr13 19104600 19104900 0.1192 79 chr13 19106100 19108500 0.1192 79 chr13 19137300 19138500 0.028 168 chr13 19199400 19200000 0.1821 51 chr13 19273500 19278900 0.0816 69 chr13 19353300 19353900 0.4084 78 chr13 19431900 19432200 0.2636 38 chr13 19497300 19497600 0.0535 34 chr13 19499400 19499700 0.1444 71 chr13 19500900 19501500 0.1444 71 chr13 19559700 19560300 0.2105 78 chr13 19594800 19595100 0.5686 61 chr13 19701000 19701300 0.6089 76 chr13 19778400 19780800 0.1148 73 chr13 21261600 21261900 0.2881 67 chr13 21377100 21377700 0.2003 347 chr13 21447600 21449100 0.0983 50 chr13 21856500 21856800 0.4188 54 chr13 21949500 21949800 0.5208 49 chr13 22361400 22361700 0.4636 40 chr13 22481100 22481400 0.1837 33 chr13 22522200 22522500 0.3627 121 chr13 22575300 22575600 0.6016 61 chr13 22577400 22578000 0.1814 60 chr13 22580400 22580700 0.5523 77 chr13 22942200 22942500 0.4172 74 chr13 23446500 23446800 0.4615 76 chr13 23483400 23483700 0.5827 30 chr13 24321000 24321300 0.4582 15 chr13 24355800 24356100 0.6767 67 chr13 24587400 24587700 0.6282 119 chr13 24808500 24809100 0.0331 73 chr13 24810300 24810600 0.0331 73 chr13 24961200 24961800 0.4105 107 chr13 25004100 25005000 0.1223 48 chr13 25479600 25479900 0.3768 86 chr13 25504500 25504800 0.3793 49 chr13 25992900 25993200 0.4227 80 chr13 26072700 26073300 0.015 58 chr13 26472600 26472900 0.1739 61 chr13 26700600 26700900 0.6222 66 chr13 26724000 26724600 0.3418 50 chr13 28265700 28266000 0.1351 28 chr13 29193900 29194200 0.4621 59 chr13 29219100 29219400 0.3318 45 chr13 29244600 29244900 0.6123 48 chr13 29413500 29414400 0.0105 65 chr13 29641800 29647800 0 97 chr13 29669400 29670900 0.0612 75 chr13 30262500 30265200 0.4141 69 chr13 30270600 30270900 0.2232 78 chr13 30330600 30330900 0.5405 39 chr13 30460200 30460500 0.4581 61 chr13 30601500 30601800 0.3775 24 chr13 30813900 30814200 0.3532 38 chr13 30840000 30840300 0.4075 60 chr13 30852000 30852300 0.6132 41 chr13 31302300 31308300 0 118 chr13 31835400 31835700 0.2926 27 chr13 32717100 32717700 0.1779 123 chr13 32867700 32869200 0 99 chr13 33886800 33887400 0.4479 67 chr13 33925200 33925500 0.1946 44 chr13 33926700 33927000 0.1946 44 chr13 33987600 33987900 0.4613 77 chr13 34480200 34486200 0 78 chr13 34539900 34541400 0.1326 33 chr13 34801200 34801800 0.427 147 chr13 35088900 35089800 0.0432 101 chr13 36008400 36013200 0.0115 78 chr13 36056100 36056400 0.0321 53 chr13 36066900 36067200 0.4234 27 chr13 36486600 36488700 0.1019 55 chr13 37150200 37153500 0.2093 115 chr13 37155000 37155600 0.2093 115 chr13 37250700 37251000 0.5277 68 chr13 37253700 37254300 0.2441 58 chr13 37281000 37281300 0.4719 60 chr13 37314600 37315200 0.0514 70 chr13 37317900 37318500 0.0828 59 chr13 37566900 37567200 0.6477 45 chr13 37822800 37824300 0.3779 81 chr13 37826100 37826700 0.1076 75 chr13 38068500 38070000 0.3136 69 chr13 38114100 38114400 0.28 65 chr13 38115900 38118000 0.2716 69 chr13 38289600 38289900 0.3657 58 chr13 39000900 39006000 0 76 chr13 39138300 39138600 0.5389 64 chr13 39959100 39959700 0.5022 65 chr13 39986400 39987300 0.0174 58 chr13 40005000 40006200 0.1266 64 chr13 40356900 40362300 0.0813 81 chr13 40735800 40737000 0.4848 95 chr13 40740000 40740900 0.411 56 chr13 40829700 40834800 0.0962 72 chr13 40865700 40866300 0.2756 105 chr13 40902600 40902900 0.1953 67 chr13 40956000 40957500 0.2134 58 chr13 41431500 41431800 0.4295 75 chr13 41443200 41443500 0.3299 59 chr13 41536500 41536800 0.4423 42 chr13 41591700 41592000 0.1797 99 chr13 41874000 41874300 0.281 63 chr13 42032400 42033000 0.5287 77 chr13 42141900 42142200 0.516 46 chr13 42181800 42182100 0.4815 58 chr13 42372000 42372300 0.3617 20 chr13 42385200 42386400 0.2965 78 chr13 42425400 42430800 0.0284 101 chr13 42557400 42557700 0.4719 69 chr13 42856800 42857100 0.1935 82 chr13 42965700 42967200 0.0579 50 chr13 43161300 43162800 0.1906 69 chr13 43351500 43351800 0.4828 54 chr13 43531500 43531800 0.2728 38 chr13 43966800 43968000 0.0966 78 chr13 43971900 43975200 0.0096 86 chr13 44036700 44037600 0.143 64 chr13 44114100 44114700 0.3949 64 chr13 45378000 45378300 0.5411 57 chr13 45380400 45381900 0.1471 27 chr13 45484500 45486300 0.0078 112 chr13 45645600 45651000 0.0275 100 chr13 45664200 45664500 0.0498 68 chr13 46332600 46332900 0.6277 58 chr13 46467000 46467300 0.6845 62 chr13 46515000 46515600 0.2038 45 chr13 47019300 47019900 0.3151 71 chr13 47221800 47224800 0.0241 164 chr13 47498700 47499000 0.5415 36 chr13 47714400 47716200 0.2574 77 chr13 47731200 47731500 0.3496 70 chr13 47784000 47787900 0.1871 91 chr13 48107400 48107700 0.4478 52 chr13 48427200 48428400 0 81 chr13 48465600 48471600 0 100 chr13 49014000 49016100 0.1873 86 chr13 49153500 49158000 0.0493 85 chr13 49215600 49215900 0.4868 63 chr13 49338300 49338600 0.6782 38 chr13 49377600 49379700 0.0521 77 chr13 49592100 49594200 0.0893 62 chr13 49799400 49800000 0.1249 108 chr13 50119200 50119500 0.4493 65 chr13 50180400 50185800 0 68 chr13 50331600 50331900 0.4778 63 chr13 50555400 50555700 0.4271 69 chr13 50982900 50983200 0.2047 78 chr13 50985900 50987700 0.1935 76 chr13 51172800 51173100 0.1807 68 chr13 51641400 51642000 0.241 129 chr13 51693300 51693600 0.3732 66 chr13 51716400 51716700 0.5916 53 chr13 51774300 51775800 0 53 chr13 52057200 52059600 0.0246 75 chr13 52064100 52064400 0.6419 40 chr13 52218900 52220100 0.0815 60 chr13 52229700 52234200 0 72 chr13 52235700 52236000 0 72 chr13 52237200 52239000 0 67 chr13 52240200 52240500 0 67 chr13 52242000 52242300 0.3526 47 chr13 52246200 52249200 0.0506 66 chr13 52252200 52254000 0.0297 63 chr13 52256700 52257600 0 89 chr13 52258800 52260000 0 89 chr13 52261500 52263300 0.0749 61 chr13 52266300 52268400 0.0113 80 chr13 52269600 52274700 0 96 chr13 52278300 52278900 0.0963 53 chr13 52280400 52281900 0.4591 74 chr13 52284000 52284600 0.2592 71 chr13 52293600 52294500 0.2805 70 chr13 52296000 52299600 0.0143 60 chr13 52302600 52306800 0.013 75 chr13 52321500 52321800 0.367 46 chr13 52324800 52325100 0.4299 69 chr13 52327200 52328100 0.214 73 chr13 52331100 52334400 0.0475 92 chr13 52362600 52362900 0.5481 45 chr13 52480800 52481100 0.5343 53 chr13 52488900 52492200 0.0201 80 chr13 52495200 52496100 0.1615 55 chr13 52498200 52498500 0.2876 65 chr13 52501200 52501500 0.417 52 chr13 52505400 52509900 0.0371 71 chr13 52513200 52516800 0.0249 60 chr13 52518000 52518900 0.1327 47 chr13 52520700 52521000 0.4172 41 chr13 52523400 52523700 0.2115 68 chr13 52527900 52528500 0.0209 65 chr13 52530600 52532400 0.0209 65 chr13 52533600 52534200 0.0209 65 chr13 52535700 52536000 0.0252 53 chr13 52538100 52540200 0.0252 53 chr13 52543200 52545000 0.0845 66 chr13 52546200 52547100 0.0056 54 chr13 52549800 52550100 0.4345 68 chr13 52552200 52554300 0.0412 64 chr13 52557000 52560300 0.0588 72 chr13 52564200 52564500 0.468 53 chr13 52566000 52566300 0 70 chr13 52567500 52569300 0 70 chr13 52570500 52570800 0 66 chr13 52572300 52577700 0 66 chr13 52586100 52587600 0.0679 61 chr13 53094000 53098200 0.0213 73 chr13 53597400 53597700 0.424 79 chr13 53949900 53950200 0.4671 30 chr13 54289200 54289500 0.5309 44 chr13 54478500 54478800 0.4078 32 chr13 54572700 54573000 0.5136 55 chr13 55149900 55150200 0.5082 38 chr13 55320300 55320900 0.3153 95 chr13 55352100 55352400 0.3367 90 chr13 55812300 55813200 0.1871 70 chr13 56611800 56612100 0.2578 78 chr13 56665200 56665500 0.4076 95 chr13 57040200 57040500 0.3976 63 chr13 57139200 57173400 0 170 chr13 57219600 57220500 0.3818 56 chr13 57329700 57330300 0.4106 63 chr13 57356100 57356400 0.4169 85 chr13 57357900 57359100 0.2095 75 chr13 57401400 57401700 0 22 chr13 58512300 58514100 0.0032 80 chr13 58672800 58678200 0 74 chr13 59026800 59030700 0.2111 72 chr13 59598300 59598600 0.3551 30 chr13 59848500 59851200 0 85 chr13 59984700 59986800 0 79 chr13 60048600 60048900 0.4101 37 chr13 60246600 60246900 0.4037 67 chr13 60249300 60249600 0.4037 67 chr13 60711600 60711900 0.5289 57 chr13 60713700 60715500 0.2623 58 chr13 60741900 60744000 0.0011 70 chr13 60801000 60801600 0.2203 62 chr13 60803700 60804000 0.5785 81 chr13 60977700 60978000 0.3738 99 chr13 61761300 61761600 0.6132 26 chr13 61844400 61844700 0.4581 43 chr13 62465100 62465400 0.5382 28 chr13 63081900 63082500 0.4746 46 chr13 63717000 63727200 0 72 chr13 63742500 63742800 0 79 chr13 63744000 63744900 0 79 chr13 63747000 63756900 0 79 chr13 63759000 63769500 0 70 chr13 63822900 63832800 0 81 chr13 63835500 63835800 0.2376 58 chr13 63837000 63837300 0.2376 58 chr13 64231200 64232700 0.0331 58 chr13 64714200 64714500 0.613 100 chr13 66034800 66035100 0.6138 58 chr13 66738900 66743400 0 71 chr13 67027500 67027800 0.2714 57 chr13 67325100 67325700 0.1997 37 chr13 67327200 67327500 0.5273 60 chr13 67527900 67528200 0.0451 903 chr13 67562700 67564500 0.2469 69 chr13 67618200 67618500 0.6041 34 chr13 67681200 67684500 0.01 93 chr13 67799100 67799400 0.5333 56 chr13 68415900 68416500 0.3032 55 chr13 69462300 69462600 0.4415 42 chr13 70287600 70287900 0.3479 35 chr13 70854600 70854900 0.0547 573 chr13 71385000 71385300 0.473 95 chr13 71387700 71389200 0.3456 88 chr13 71506800 71507100 0.3925 63 chr13 71734200 71734800 0.0263 50 chr13 72268800 72269100 0.1809 50 chr13 72382500 72382800 0.256 25 chr13 72612300 72615300 0.199 70 chr13 73574400 73575900 0.3983 46 chr13 73641300 73643700 0.1976 81 chr13 73645200 73646100 0.1523 41 chr13 74235900 74237400 0.0149 84 chr13 74238900 74241000 0.0149 84 chr13 74426700 74432100 0 71 chr13 74537700 74538000 0.1065 78 chr13 74539500 74542500 0.1065 78 chr13 74800200 74800800 0.3731 79 chr13 75410700 75411000 0.4793 41 chr13 75728400 75730800 0.2695 97 chr13 76318500 76318800 0.5604 13 chr13 76545300 76548300 0.0325 77 chr13 76612800 76618500 0 88 chr13 76963800 76964100 0.5553 65 chr13 77204400 77205000 0.3289 72 chr13 77685000 77685900 0.2062 82 chr13 77703900 77705100 0 34 chr13 77880600 77880900 0.2837 72 chr13 78020100 78020400 0.3507 33 chr13 78095100 78095400 0.2212 71 chr13 78153900 78154500 0.2068 62 chr13 78284400 78285000 0.5285 85 chr13 78639600 78639900 0.3725 45 chr13 79086900 79087200 0.2318 40 chr13 79818300 79822500 0 86 chr13 79840500 79845300 0 63 chr13 80104200 80104500 0.5835 39 chr13 80153100 80156400 0.1534 73 chr13 80289900 80290200 0.3714 62 chr13 80420100 80420400 0.4898 12 chr13 80916600 80918100 0.2343 75 chr13 81067800 81068100 0.3759 55 chr13 81076500 81076800 0.5543 60 chr13 81173100 81173400 0.1137 35 chr13 82046400 82051200 0.0017 79 chr13 82315200 82315500 0.6242 26 chr13 82499400 82499700 0.3782 58 chr13 82538400 82538700 0.355 77 chr13 82562100 82562400 0.4347 50 chr13 82604400 82605000 0.445 50 chr13 82628700 82629000 0.4836 19 chr13 82742400 82742700 0.3816 51 chr13 83522700 83523300 0.19 65 chr13 83904900 83905200 0.5142 54 chr13 83961300 83966400 0 76 chr13 84091500 84091800 0.5763 49 chr13 84502500 84503100 0.2508 65 chr13 84725700 84726000 0.4576 66 chr13 85124400 85129200 0.0279 93 chr13 85395300 85395600 0 12 chr13 85926000 85927800 0.0696 80 chr13 86115000 86115300 0.4985 42 chr13 86253000 86268900 0 52 chr13 86626200 86626500 0.3007 55 chr13 86627700 86628300 0.5541 57 chr13 86649300 86649600 0.3657 38 chr13 86891100 86891400 0.3629 45 chr13 87074400 87074700 0.3991 20 chr13 87609300 87609600 0.5756 70 chr13 87627900 87628200 0.4463 10 chr13 88199100 88200900 0.1504 66 chr13 88290900 88291200 0.4135 68 chr13 88684200 88684500 0.3302 65 chr13 88831200 88831500 0.527 79 chr13 88870500 88870800 0.501 58 chr13 89090700 89091300 0.2359 101 chr13 89509500 89509800 0.4244 49 chr13 90325200 90325800 0.1218 69 chr13 90653700 90654300 0.5014 71 chr13 90669000 90669300 0.3463 61 chr13 91056300 91056600 0.5745 46 chr13 91604100 91606200 0 72 chr13 92125800 92126100 0.5485 48 chr13 92475300 92475600 0.3169 63 chr13 92595600 92595900 0.5512 49 chr13 92643300 92643600 0.5093 51 chr13 92685600 92691600 0 70 chr13 92742000 92742300 0.4982 85 chr13 92755200 92757000 0.2967 69 chr13 93063000 93063300 0.549 62 chr13 93282600 93283200 0.5572 56 chr13 93426900 93427500 0.4995 53 chr13 93490800 93495900 0.0208 67 chr13 93541200 93541800 0.1642 46 chr13 93844500 93845700 0.2401 76 chr13 93879900 93880200 0.4551 72 chr13 94105800 94106100 0.5839 56 chr13 94316400 94316700 0.4723 58 chr13 94374600 94377600 0.0044 88 chr13 94731900 94732500 0.1758 82 chr13 94819200 94819500 0.011 58 chr13 95350500 95350800 0.1685 42 chr13 95690400 95690700 0.5749 52 chr13 95735100 95739600 0.1972 77 chr13 95908500 95909100 0.3553 61 chr13 95964900 95965500 0.4347 67 chr13 96054000 96054300 0.4021 28 chr13 96327900 96330900 0.3098 77 chr13 97155900 97158300 0.0602 83 chr13 97159500 97159800 0.0602 83 chr13 97583100 97583400 0.442 47 chr13 97611300 97611600 0.3647 60 chr13 97667400 97673400 0.0087 75 chr13 97734300 97736100 0.1516 101 chr13 97764900 97766400 0.2602 72 chr13 98069100 98069400 0.5511 34 chr13 98812200 98812500 0.2284 98 chr13 99115800 99116700 0.3713 65 chr13 99241800 99242100 0.1887 74 chr13 99462900 99463200 0.6845 157 chr13 100451700 100452000 0.5878 66 chr13 100698600 100700100 0.0868 83 chr13 100701300 100704000 0.0757 71 chr13 100761600 100761900 0.3554 92 chr13 101643000 101643300 0.3879 67 chr13 102526200 102526500 0.3052 85 chr13 103950600 103950900 0.3862 26 chr13 104051400 104051700 0.0469 67 chr13 104081700 104082000 0.3939 82 chr13 104508900 104509200 0.1496 27 chr13 104654100 104655000 0.0483 65 chr13 104958900 104959200 0.5206 62 chr13 105055800 105056100 0.3929 46 chr13 105299400 105301200 0.0526 79 chr13 105382200 105382800 0.0517 62 chr13 105384900 105388200 0.1546 88 chr13 105802800 105803100 0.6767 11 chr13 105844200 105844500 0.5159 26 chr13 105999900 106000200 0.2402 32 chr13 106214100 106217700 0.062 76 chr13 106779900 106780500 0.091 75 chr13 106931100 106931400 0.3583 67 chr13 106932900 106933200 0.4575 70 chr13 107272200 107272500 0.2738 42 chr13 107775300 107775600 0.354 69 chr13 107920800 107922300 0.1425 67 chr13 107923500 107925600 0.1425 67 chr13 107935200 107935800 0.1467 82 chr13 108237900 108239700 0.1092 76 chr13 108510600 108516000 0 76 chr13 108829800 108830400 0.4578 67 chr13 109008300 109008600 0.6316 42 chr13 109218000 109218600 0.0024 58 chr13 109383300 109383600 0.5667 44 chr13 109488900 109489500 0.1397 89 chr13 109569300 109569600 0.1459 13 chr13 109717200 109717500 0.6294 53 chr13 110252700 110253300 0.1655 32 chr13 110385300 110385900 0.3777 176 chr13 110481000 110481900 0.3933 109 chr13 110497800 110498100 0.6433 49 chr13 110530200 110530500 0.4488 45 chr13 110580600 110580900 0.3045 54 chr13 110587500 110587800 0.4806 30 chr13 110955900 110957100 0.3076 67 chr13 111045000 111045300 0.5582 62 chr13 111052200 111052500 0.4512 14 chr13 111254700 111255300 0.0128 63 chr13 111340200 111341700 0 145 chr13 111429900 111430200 0.5998 50 chr13 111545700 111546000 0.4333 66 chr13 111591900 111592200 0.0828 64 chr13 111669000 111703800 0 47 chr13 111753900 111757200 0 55 chr13 111758400 111781800 0 55 chr13 111783000 111789000 0 46 chr13 112014900 112016100 0.0327 345 chr13 112148100 112148400 0.6835 62 chr13 112278600 112286100 0 143 chr13 112287300 112288500 0 143 chr13 112290000 112308000 0 180 chr13 112393200 112393500 0.314 68 chr13 112449900 112450200 0.4022 38 chr13 112749900 112750500 0.3937 80 chr13 112767000 112767300 0.5925 31 chr13 112786200 112786800 0.2945 57 chr13 112872900 112873500 0.5851 186 chr13 112989300 112989600 0.6562 38 chr13 113067300 113069700 0.0076 144 chr13 113079900 113080200 0.5643 85 chr13 113089200 113089500 0.5733 70 chr13 113107200 113107800 0.3647 43 chr13 113111400 113111700 0.5659 55 chr13 113136600 113136900 0.1049 28 chr13 113161800 113162700 0.1165 42 chr13 113262600 113263200 0.2145 195 chr13 113314500 113314800 0.2253 28 chr13 113330400 113331000 0.6232 69 chr13 113346000 113347500 0.3286 137 chr13 113371500 113371800 0.2113 91 chr13 113375400 113375700 0.2898 42 chr13 113412900 113413200 0.5416 63 chr13 113434800 113436000 0.5203 111 chr13 113532900 113533200 0.6685 47 chr13 113541600 113542500 0 83 chr13 113583900 113584200 0.5084 43 chr13 113725800 113726400 0.1697 21 chr13 113745300 113745600 0.4848 47 chr13 113751900 113752200 0.4367 67 chr13 113824200 113824500 0.3519 154 chr13 113831700 113832000 0.401 30 chr13 113876100 113876400 0.5877 141 chr13 113899200 113900400 0.0088 38 chr13 113913600 113913900 0.55 78 chr13 113940600 113941500 0 32 chr13 113944500 113945100 0.5614 67 chr13 113983500 113983800 0 46 chr13 113985900 113986200 0 46 chr13 113987400 113988600 0 15 chr13 114005700 114009000 0.0363 69 chr13 114019800 114020100 0.4651 25 chr13 114028800 114029700 0.4161 67 chr13 114040200 114040500 0.564 41 chr13 114070800 114071100 0.4573 73 chr13 114075600 114075900 0.5541 31 chr13 114083700 114087300 0 56 chr13 114103500 114104100 0.6279 28 chr13 114111300 114111600 0.5649 49 chr13 114113700 114114000 0.0602 176 chr13 114119700 114120600 0.4893 42 chr13 114138300 114139200 0.6151 31 chr13 114147600 114147900 0.4314 43 chr13 114198900 114200100 0.3073 191 chr13 114231000 114231600 0.4553 89 chr13 114348900 114349200 0.2481 74 chr13 114351900 114352500 0.1106 121 chr13 114354000 114354600 0.0536 244 chr14 16023600 16086600 0 185 chr14 16089600 16100700 0 695 chr14 16101900 16104900 0.2427 4332 chr14 16133400 16135200 0 193 chr14 16139400 16139700 0.5082 161 chr14 16404000 16404300 0.0118 47 chr14 18225000 18235500 0 112 chr14 18237000 18240000 0 159 chr14 18241200 18254400 0 159 chr14 18255600 18261600 0 159 chr14 18264300 18272100 0 126 chr14 18273300 18276900 0.0048 105 chr14 18278100 18293400 0.0013 97 chr14 18296100 18296400 0.2828 48 chr14 18297900 18301800 0 87 chr14 18303300 18317100 0 103 chr14 18319200 18329700 0 103 chr14 18330900 18332400 0 103 chr14 18334200 18334800 0 103 chr14 18336000 18346800 0 103 chr14 18348900 18386100 0 103 chr14 18387300 18393600 0 103 chr14 18395100 18398400 0 103 chr14 18400200 18404400 0 103 chr14 18405600 18406800 0 103 chr14 18408600 18409200 0.017 72 chr14 18410700 18413400 0.017 72 chr14 18414600 18417000 0.0061 96 chr14 18418500 18422100 0.0061 96 chr14 18423300 18425700 0.0061 96 chr14 18426900 18430200 0.0837 73 chr14 18431700 18439200 0 100 chr14 18441000 18446400 0 100 chr14 18447600 18453600 0 100 chr14 18454800 18458100 0 100 chr14 18462300 18487800 0 100 chr14 18492300 18493500 0 101 chr14 18494700 18496200 0 101 chr14 18497700 18503100 0 101 chr14 18504900 18511200 0 83 chr14 18512700 18514500 0 88 chr14 18516300 18520500 0 88 chr14 18522600 18523200 0 95 chr14 18524700 18538800 0 95 chr14 18540300 18553800 0 167 chr14 18555600 18559800 0 167 chr14 18561300 18585600 0 167 chr14 18586800 18605400 0 167 chr14 18606600 18625200 0 167 chr14 18626400 18649500 0 152 chr14 18653100 18655200 0 152 chr14 18663600 18663900 0.2951 67 chr14 18669600 18670200 0.4053 97 chr14 18696600 18697800 0.0241 140 chr14 18700200 18705000 0.0185 80 chr14 18706200 18706800 0.0185 80 chr14 18708900 18712500 0.0011 101 chr14 18862500 18952500 0 189 chr14 18954000 19096500 0 189 chr14 19098000 19098300 0.5413 55 chr14 19099500 19118400 0 169 chr14 19119600 19134900 0 169 chr14 19136100 19161000 0 169 chr14 19162800 19163700 0.4074 149 chr14 19165200 19166100 0.4713 133 chr14 19172400 19172700 0.402 123 chr14 19173900 19174500 0.002 146 chr14 19175700 19180200 0.002 146 chr14 19181400 19181700 0.002 146 chr14 19182900 19185000 0.002 146 chr14 19186800 19187100 0.1778 78 chr14 19190700 19191600 0.0762 68 chr14 19194600 19194900 0.0762 68 chr14 19197600 19197900 0.5533 69 chr14 19199100 19199400 0.495 57 chr14 19202700 19204500 0.2065 78 chr14 19206000 19215600 0 174 chr14 19216800 19280700 0 174 chr14 19281900 19376400 0 198 chr14 19379100 19380000 0.3421 99 chr14 19382100 19414200 0 224 chr14 19415400 19488000 0 224 chr14 19489800 19510500 0 224 chr14 19611900 19615200 0 141 chr14 19616400 19664400 0 149 chr14 19665600 19666200 0.1605 76 chr14 19671600 19672800 0.181 123 chr14 19676100 19676400 0.477 149 chr14 19677900 19678200 0.477 149 chr14 19681200 19723200 0 143 chr14 19898400 19898700 0.361 47 chr14 19963500 19963800 0.142 59 chr14 20007900 20008200 0.5733 29 chr14 20040900 20041200 0.3594 78 chr14 20107800 20108100 0.0826 50 chr14 20153100 20153400 0.2129 73 chr14 20233800 20234100 0.1342 69 chr14 20266500 20267100 0.3446 61 chr14 20310300 20311200 0.4633 52 chr14 20505600 20507700 0.1021 120 chr14 20882100 20883900 0 69 chr14 20914200 20915100 0.3226 63 chr14 20946300 20946900 0.058 90 chr14 21068100 21068400 0.5165 35 chr14 21159300 21159600 0.3706 40 chr14 21183300 21183600 0.4225 25 chr14 21189000 21189300 0.4859 85 chr14 21897900 21899100 0.2047 61 chr14 22110600 22110900 0.4177 29 chr14 22636200 22640100 0.1985 104 chr14 22674600 22676100 0 65 chr14 22680000 22681500 0 75 chr14 23390100 23390400 0.3174 56 chr14 23705700 23706600 0.49 35 chr14 23760000 23760300 0.6078 58 chr14 23919600 23921700 0.0207 62 chr14 23957700 23958000 0.344 57 chr14 23961900 23962500 0.04 70 chr14 23964300 23964900 0.04 70 chr14 23966400 23968200 0.04 70 chr14 23978400 23980500 0.002 59 chr14 23992800 23993100 0.2284 69 chr14 23997000 24000000 0.2518 68 chr14 24001500 24006600 0.0144 88 chr14 24016200 24016500 0.5188 50 chr14 24021300 24023100 0.0151 85 chr14 24111600 24113400 0 67 chr14 24444000 24444300 0.6654 38 chr14 24486300 24490200 0 68 chr14 24519600 24519900 0.5426 89 chr14 24528600 24528900 0.3959 49 chr14 24552000 24552300 0.488 41 chr14 24584700 24585000 0.3721 51 chr14 24930900 24931200 0.5735 35 chr14 25204800 25206300 0.1738 84 chr14 25207800 25208100 0.1799 74 chr14 25209300 25209900 0.1799 74 chr14 25404900 25405200 0.3509 73 chr14 25677900 25678200 0.2668 11 chr14 25779000 25780800 0.4193 54 chr14 25947900 25948500 0.287 61 chr14 26108100 26108400 0.4291 59 chr14 26110200 26110800 0.4291 59 chr14 26215800 26216100 0.4155 62 chr14 26296500 26297400 0.2404 71 chr14 26298600 26300400 0.2239 61 chr14 26383800 26384100 0.4616 51 chr14 26495700 26496000 0.2354 52 chr14 26630100 26634600 0.0271 84 chr14 26674500 26676300 0.0353 74 chr14 26678100 26678700 0.0353 74 chr14 26688900 26689200 0.2825 73 chr14 27044400 27046200 0.2014 66 chr14 27168900 27169200 0.5149 74 chr14 27459000 27461400 0.0721 71 chr14 27675900 27676500 0.0171 96 chr14 27678000 27678900 0.0171 96 chr14 28178100 28179900 0.3168 62 chr14 28191300 28192200 0.0309 95 chr14 28193400 28194300 0.0309 95 chr14 28312800 28314300 0.2095 65 chr14 28332000 28332300 0.311 61 chr14 28401600 28402800 0.2721 63 chr14 28413600 28415100 0.2824 72 chr14 28545300 28545900 0.2418 54 chr14 29259000 29259600 0.2291 43 chr14 29478600 29481000 0.0364 83 chr14 29526600 29526900 0.618 41 chr14 29620500 29620800 0.5787 62 chr14 29727300 29727600 0.3743 58 chr14 30363900 30369000 0.001 102 chr14 30475500 30475800 0.2039 75 chr14 30477300 30479100 0.2039 75 chr14 30684900 30690600 0 90 chr14 31247100 31248000 0.2694 63 chr14 31249200 31249500 0.1281 54 chr14 31250700 31251000 0.5523 48 chr14 31473900 31474200 0.3925 34 chr14 31634700 31635000 0.506 67 chr14 31794000 31798200 0 66 chr14 31869000 31869300 0.6895 17 chr14 32217000 32217300 0.3269 13 chr14 32268900 32269500 0.0992 67 chr14 32454600 32454900 0.4857 26 chr14 32854200 32854500 0.426 64 chr14 33898200 33898500 0.6425 81 chr14 34185600 34186200 0.225 100 chr14 34205100 34206000 0.0684 75 chr14 34294500 34297200 0 63 chr14 34348800 34349100 0.4601 12 chr14 34443300 34443600 0.4764 37 chr14 34540800 34547700 0 75 chr14 34555200 34562100 0 73 chr14 34836000 34836300 0.4454 34 chr14 35038500 35040300 0.0803 60 chr14 35061600 35061900 0.6289 73 chr14 35538600 35539200 0.3777 58 chr14 35948400 35949900 0.2264 75 chr14 35976300 35978400 0.4238 63 chr14 35981100 35981400 0.4034 89 chr14 36120000 36120300 0.5528 55 chr14 36143100 36145800 0.0506 89 chr14 36186600 36187200 0.0573 84 chr14 36188400 36190500 0.0573 84 chr14 37351800 37356000 0.0379 72 chr14 37495500 37496700 0.3384 59 chr14 37770900 37771200 0.3207 87 chr14 37863300 37863600 0.5394 65 chr14 37922100 37922400 0.2733 67 chr14 38058000 38058300 0.4651 59 chr14 38636100 38636400 0.6626 31 chr14 38640600 38640900 0.4137 64 chr14 38714700 38715000 0.2105 68 chr14 39511800 39512400 0.0904 60 chr14 39517200 39517800 0.1035 75 chr14 39521700 39522600 0.287 93 chr14 39525000 39525300 0.4 76 chr14 39629400 39630900 0.0139 77 chr14 39659400 39659700 0.3908 41 chr14 39935400 39936600 0.2272 75 chr14 39942600 39942900 0.4716 72 chr14 40327500 40332000 0.0309 87 chr14 40349100 40352700 0.1455 79 chr14 40422900 40423800 0.313 79 chr14 40719000 40720200 0.0394 92 chr14 40728600 40730400 0.0047 68 chr14 40835700 40836000 0.5577 92 chr14 40950300 40950600 0.1698 84 chr14 40951800 40954500 0.1698 84 chr14 41196000 41197200 0.4442 75 chr14 41211600 41213400 0.4004 70 chr14 41335200 41335500 0.3999 57 chr14 41420400 41420700 0.232 36 chr14 41492400 41492700 0.2581 25 chr14 41907900 41908500 0.3568 157 chr14 42153300 42153600 0.4201 63 chr14 42181800 42182100 0.373 32 chr14 42954900 42956400 0.2169 78 chr14 42968700 42969600 0.2038 84 chr14 42971100 42971400 0.2038 84 chr14 42999300 43000200 0.5277 74 chr14 43062600 43067400 0 120 chr14 43256700 43257000 0.3508 31 chr14 43266600 43267200 0.2773 46 chr14 43371600 43373700 0.0537 79 chr14 43374900 43375500 0.4223 49 chr14 43391400 43391700 0.414 58 chr14 43405500 43406100 0.1321 60 chr14 43494900 43495200 0.3048 75 chr14 43496700 43497300 0.3048 75 chr14 43601400 43603200 0.0716 75 chr14 44127600 44128200 0.5078 67 chr14 44159100 44159400 0.4461 46 chr14 44323200 44324400 0.507 67 chr14 44585100 44585400 0.1684 64 chr14 44642400 44645100 0.0137 72 chr14 44674800 44675100 0.3101 65 chr14 44705100 44711100 0 87 chr14 44891400 44892000 0.1947 84 chr14 44916300 44916600 0.233 17 chr14 44987700 44988000 0.3256 81 chr14 45145800 45146100 0.4719 47 chr14 45384300 45384600 0.371 63 chr14 45389100 45390300 0.1786 95 chr14 45477300 45483000 0.0554 83 chr14 45635400 45636000 0.5156 70 chr14 45844500 45845100 0.1236 72 chr14 45883800 45888000 0.042 67 chr14 45991200 45991500 0.2734 54 chr14 46108800 46109100 0.3214 32 chr14 46152600 46152900 0.2783 44 chr14 46179900 46180200 0.3133 74 chr14 46419300 46419600 0.5397 47 chr14 46473900 46474200 0.4729 76 chr14 46514400 46514700 0.5278 115 chr14 46726500 46727400 0 52 chr14 46864200 46864500 0.3001 37 chr14 47129400 47130000 0.2814 82 chr14 47795400 47798700 0.2082 74 chr14 47865000 47865300 0.5915 21 chr14 47902200 47903700 0.0766 56 chr14 47905200 47905500 0.2161 72 chr14 48187200 48192900 0 79 chr14 48314100 48315300 0.1928 61 chr14 48357600 48357900 0.4295 39 chr14 48453600 48454200 0.1625 65 chr14 48521400 48521700 0.3579 57 chr14 48938700 48939000 0.1145 14 chr14 49097700 49098600 0.1031 96 chr14 49100100 49102200 0.1031 96 chr14 49534800 49535400 0.1554 65 chr14 49821300 49821600 0.2819 13 chr14 49912500 49912800 0.5759 61 chr14 50074200 50074800 0.0177 57 chr14 51134700 51135000 0.319 21 chr14 51153000 51153300 0.3994 73 chr14 51794700 51800400 0 76 chr14 52065600 52065900 0.1727 45 chr14 52255500 52257900 0.0272 75 chr14 52638300 52638900 0.4306 58 chr14 53268000 53270400 0.2175 70 chr14 53909100 53911200 0.0289 81 chr14 54004800 54005100 0.4157 87 chr14 54203700 54204300 0.5919 39 chr14 55024800 55025400 0.0474 65 chr14 55988400 55993200 0.0342 91 chr14 56014200 56014500 0.1232 92 chr14 56016900 56018100 0.1232 92 chr14 56442000 56447400 0.0011 89 chr14 56667900 56673300 0.0055 113 chr14 56988300 56989500 0.3366 68 chr14 57112800 57116400 0.2882 67 chr14 57339300 57339600 0.4521 75 chr14 57342900 57343200 0.4239 70 chr14 57454500 57454800 0.5797 53 chr14 57535200 57535500 0.2782 68 chr14 57552000 57552600 0.15 55 chr14 57621000 57622500 0.4479 36 chr14 57626100 57626400 0.1979 50 chr14 57628200 57628500 0.1983 50 chr14 57667800 57668100 0.3905 50 chr14 58032900 58038300 0 93 chr14 58172400 58172700 0.3348 57 chr14 58962300 58962900 0.0797 34 chr14 59672700 59673000 0.4378 51 chr14 59819400 59819700 0.3309 105 chr14 59946600 59951700 0.0203 85 chr14 60341400 60341700 0.1346 70 chr14 60398700 60399300 0.0385 55 chr14 60524700 60525000 0.1491 53 chr14 60604500 60606000 0 70 chr14 60611700 60613200 0 76 chr14 60888600 60888900 0.3079 39 chr14 61005300 61005600 0.6117 39 chr14 61055100 61061100 0 88 chr14 61755300 61755600 0.5677 85 chr14 62284800 62288400 0.031 72 chr14 62536200 62541900 0 65 chr14 62640000 62640600 0.3944 84 chr14 62641800 62642400 0.3049 45 chr14 62817000 62817300 0.6127 15 chr14 62874600 62875200 0.2906 73 chr14 62948700 62949300 0.2576 79 chr14 63116700 63122700 0 86 chr14 63154800 63155100 0.6071 30 chr14 63166200 63166500 0.269 73 chr14 63864900 63865500 0.3042 65 chr14 63870300 63870600 0.0846 59 chr14 64893900 64896900 0 65 chr14 64978500 64979400 0.0101 86 chr14 65692200 65692500 0.6383 66 chr14 65855400 65855700 0.3944 70 chr14 66834300 66837300 0.3431 76 chr14 67869900 67870800 0.1586 68 chr14 67872000 67872600 0.229 105 chr14 68092800 68093100 0.3763 54 chr14 68115000 68115300 0.414 76 chr14 70424400 70425000 0.0128 70 chr14 70476300 70476600 0.0531 95 chr14 70478100 70482300 0.0077 95 chr14 70547400 70553400 0 94 chr14 70798500 70798800 0.3313 58 chr14 70854300 70854600 0.5609 30 chr14 70959600 70960200 0.0907 83 chr14 71037000 71038500 0.0972 72 chr14 71368200 71370300 0 85 chr14 71843400 71847900 0.0058 67 chr14 71977200 71978700 0.1087 78 chr14 71979900 71981100 0.1087 78 chr14 72397200 72397500 0.3777 69 chr14 73183800 73184400 0.5247 68 chr14 73386900 73387200 0.6867 55 chr14 73515600 73516500 0.1728 42 chr14 73529700 73530000 0.5353 52 chr14 73543200 73543800 0.0094 63 chr14 73545300 73545900 0.3172 39 chr14 73549500 73550100 0.2293 44 chr14 73552200 73552500 0.3674 34 chr14 73557600 73557900 0.3301 47 chr14 73575000 73575600 0.1502 68 chr14 73577100 73577700 0.4363 57 chr14 73581600 73582200 0.1821 42 chr14 73584600 73584900 0.6674 53 chr14 74043300 74043600 0.6571 23 chr14 74994900 74995800 0 99 chr14 76215600 76215900 0.5601 61 chr14 76750200 76751400 0.4797 60 chr14 77269500 77270100 0.285 178 chr14 78082800 78083100 0.6512 61 chr14 78362100 78362400 0.4753 42 chr14 79048800 79049100 0.3605 32 chr14 79128000 79130100 0.2353 91 chr14 79257300 79257600 0.5183 148 chr14 79308900 79314900 0 80 chr14 79751400 79751700 0.328 90 chr14 79770300 79772100 0.222 87 chr14 80010600 80010900 0.5289 54 chr14 80030700 80031300 0.3635 84 chr14 80622300 80622900 0.3065 59 chr14 80626200 80626500 0.4352 42 chr14 80673300 80673600 0.4885 41 chr14 80858100 80858700 0.1856 67 chr14 81012300 81012600 0.5122 67 chr14 81116100 81120000 0 87 chr14 81861000 81861900 0.0365 130 chr14 81863100 81864600 0.0365 130 chr14 81945000 81945300 0.42 55 chr14 82348500 82353300 0 77 chr14 82473900 82474200 0.4711 47 chr14 82675500 82675800 0.4309 15 chr14 82885800 82886100 0.4749 58 chr14 83169600 83169900 0.0379 47 chr14 83202300 83204700 0.0635 74 chr14 83524200 83524500 0.5397 55 chr14 83641200 83641500 0.2234 73 chr14 83642700 83643000 0.2234 73 chr14 83644500 83645100 0.4206 90 chr14 85212000 85212300 0.4441 73 chr14 85846800 85847700 0 19 chr14 85885800 85891500 0 80 chr14 86075400 86075700 0.2416 66 chr14 86097000 86098500 0.4959 68 chr14 86106600 86107500 0.1489 63 chr14 86109000 86109300 0.1489 63 chr14 86245800 86246400 0.1277 69 chr14 86473200 86473800 0.1164 68 chr14 86878500 86879100 0.2639 45 chr14 87391800 87392100 0.3015 42 chr14 87415500 87415800 0.2409 76 chr14 87448200 87448500 0.6583 47 chr14 87753000 87753300 0.3825 45 chr14 88445100 88445400 0.4195 62 chr14 88789500 88789800 0.6256 52 chr14 89360700 89362800 0.2027 80 chr14 90207000 90208200 0.2539 77 chr14 90209700 90210000 0.2539 77 chr14 90246000 90246600 0.1611 42 chr14 90525600 90525900 0.2943 61 chr14 91190100 91190400 0.6207 67 chr14 91293300 91293600 0.5515 188 chr14 91431000 91431300 0.0086 102 chr14 91432800 91436400 0.0086 102 chr14 91557300 91557600 0.5579 29 chr14 91640400 91645800 0 88 chr14 92640300 92640600 0.2054 38 chr14 92910900 92912400 0.0165 92 chr14 93413400 93414000 0.3083 64 chr14 93415500 93416400 0.2675 85 chr14 93722100 93722400 0.1243 50 chr14 94590900 94591200 0.3329 126 chr14 94637700 94638000 0.6299 47 chr14 94658100 94658700 0.5408 72 chr14 95389200 95389500 0.4688 78 chr14 96708900 96709200 0.5147 78 chr14 96883200 96883800 0.2431 66 chr14 97136400 97136700 0.6944 88 chr14 97261200 97261500 0.4519 31 chr14 99332700 99333000 0.3797 51 chr14 99420900 99421200 0.067 549 chr14 99927900 99928200 0.2305 571 chr14 100378800 100379100 0.6398 26 chr14 100685700 100686000 0.1916 12 chr14 100869300 100870800 0 36 chr14 101266800 101271900 0.0209 91 chr14 101524500 101524800 0.3532 38 chr14 101571900 101572500 0.2652 43 chr14 101675700 101676000 0.3868 79 chr14 102172500 102172800 0.6001 52 chr14 102676200 102678000 0.09 137 chr14 102972600 102972900 0.4935 58 chr14 102999000 102999300 0.5124 28 chr14 103062600 103062900 0.3882 57 chr14 104097900 104098200 0.4194 64 chr14 104153400 104153700 0.5666 110 chr14 104217000 104217600 0.2782 47 chr14 104250900 104252100 0.009 155 chr14 104299200 104299500 0.6432 89 chr14 104720700 104721000 0.3782 45 chr14 104889900 104890200 0.6739 39 chr14 105110400 105113100 0.0016 79 chr14 105192300 105192600 0.6261 37 chr14 105229800 105240900 0 254 chr14 105271800 105272100 0.5292 47 chr14 105276000 105277500 0.1955 58 chr14 105459300 105459900 0.2065 25 chr14 105520800 105521400 0.1125 92 chr14 105546300 105546600 0.5978 79 chr14 105557100 105557400 0.5274 53 chr14 105559800 105560400 0.0357 61 chr14 105561600 105562200 0.0357 61 chr14 105566100 105566700 0.0228 65 chr14 105572100 105573000 0.0043 74 chr14 105574200 105576000 0.0043 74 chr14 105578700 105580200 0.005 80 chr14 105584700 105585000 0.4252 68 chr14 105593700 105596400 0.0089 92 chr14 105597600 105599100 0.0089 92 chr14 105603900 105604200 0.1676 65 chr14 105607500 105609900 0.0195 52 chr14 105615300 105615600 0.661 58 chr14 105618300 105620400 0.3612 58 chr14 105623700 105624300 0.4936 72 chr14 105626400 105627300 0.199 83 chr14 105638100 105639900 0.2742 81 chr14 105642900 105643200 0.5662 42 chr14 105645300 105645900 0.0995 117 chr14 105661500 105662100 0.3999 102 chr14 105663600 105663900 0.3999 102 chr14 105672000 105672300 0.3162 55 chr14 105677400 105679200 0.0597 71 chr14 105680400 105680700 0.0597 71 chr14 105682200 105682500 0.0597 71 chr14 105685800 105686400 0.0652 64 chr14 105692400 105693600 0.0008 75 chr14 105695700 105697500 0.0199 121 chr14 105698700 105699600 0.0199 121 chr14 105704700 105705000 0.3251 85 chr14 105714300 105717300 0.0048 87 chr14 105719400 105720600 0.2441 75 chr14 105722700 105723000 0.1678 53 chr14 105726300 105726900 0.2132 82 chr14 105735000 105737400 0.0126 47 chr14 105740700 105741600 0.2089 81 chr14 105743700 105745200 0.3389 75 chr14 105755700 105756900 0.1898 66 chr14 105762600 105763200 0.4802 96 chr14 105768300 105769200 0.449 112 chr14 105850500 105850800 0.3276 78 chr14 105867300 105867900 0.0144 34 chr14 105947100 105947400 0.354 45 chr14 106000800 106001400 0.1507 44 chr14 106206300 106206600 0.418 36 chr14 106300500 106300800 0.6109 29 chr14 106335300 106335900 0.0161 125 chr14 106337100 106338000 0.0161 125 chr14 106341600 106342200 0.0211 103 chr14 106359900 106360800 0.0154 98 chr14 106362000 106362600 0.0154 98 chr14 106366500 106366800 0.3471 101 chr14 106368000 106368300 0.2203 85 chr14 106403400 106403700 0.4352 53 chr14 106463700 106464600 0.3459 23 chr14 106468800 106469100 0.236 35 chr14 106471800 106473300 0 32 chr14 106476600 106484700 0 74 chr14 106498500 106498800 0.2406 20 chr14 106627800 106628400 0.3976 66 chr14 106639800 106640100 0.1647 63 chr14 106701600 106703100 0 56 chr14 106713900 106716900 0.0848 71 chr14 106720200 106721400 0.0229 68 chr14 106723800 106724700 0.3115 70 chr14 106744500 106745100 0.2282 49 chr14 106748100 106749600 0 55 chr14 106752000 106754700 0.2945 347 chr14 106761300 106764300 0.1501 81 chr14 106767300 106768200 0.0711 64 chr14 106770900 106771800 0.2809 88 chr14 106826700 106827000 0.5541 54 chr15 17000100 17010600 0 664 chr15 17024400 17024700 0.6421 262 chr15 17031900 17032200 0.6861 205 chr15 17076300 17076900 0.6036 130 chr15 17080500 17457900 0 2089 chr15 17459400 17498400 0 345 chr15 17499600 17503500 0 345 chr15 17504700 17766600 0 139 chr15 17767800 17913900 0 139 chr15 17915100 18046500 0 129 chr15 18048000 18217800 0 333 chr15 18219300 18316200 0 333 chr15 18317400 18341100 0 526 chr15 18342600 19345200 0 526 chr15 19346400 19467300 0 438 chr15 19468500 19724700 0 438 chr15 19775400 19783500 0 125 chr15 19784700 19785000 0 125 chr15 19786200 19786500 0.6117 46 chr15 19788900 19789500 0 41 chr15 19817100 19818900 0 69 chr15 19820400 19820700 0.451 231 chr15 19823400 19823700 0.537 62 chr15 19833000 19833300 0.6974 103 chr15 19846500 19846800 0.3577 72 chr15 19892700 19893000 0.5052 76 chr15 19895700 19896000 0.5398 78 chr15 19901400 19902000 0.5813 140 chr15 19940400 19940700 0.6527 186 chr15 19993500 19994100 0.0591 72 chr15 19995900 19998600 0.0591 72 chr15 19999800 20003100 0 60 chr15 20004600 20009700 0 60 chr15 20012100 20012400 0 72 chr15 20013600 20016900 0 72 chr15 20018400 20031900 0 71 chr15 20033400 20036700 0 71 chr15 20039700 20041800 0 60 chr15 20043600 20046300 0 60 chr15 20047800 20054100 0.0025 76 chr15 20057400 20057700 0.3866 35 chr15 20059200 20095500 0 68 chr15 20096700 20144400 0 419 chr15 20145600 20153400 0 419 chr15 20154600 20157000 0 419 chr15 20158200 20186700 0 419 chr15 20313600 20316900 0.2999 93 chr15 20325300 20325900 0.3913 51 chr15 20329500 20332800 0.01 77 chr15 20335200 20335500 0.517 61 chr15 20343000 20343300 0.6719 147 chr15 20423100 20440500 0 133 chr15 20441700 20611800 0 133 chr15 20613300 20623500 0 78 chr15 20625300 20628900 0 78 chr15 20630100 20640900 0 66 chr15 20673600 20675100 0 51 chr15 20677200 20680500 0 51 chr15 20682000 20682300 0.0999 35 chr15 20684400 20685300 0.06 35 chr15 20687700 20688600 0.4005 28 chr15 20730600 20733300 0.009 63 chr15 20734500 20757300 0 45 chr15 20760000 20793600 0 55 chr15 20796000 20844000 0 58 chr15 20845200 20848200 0 54 chr15 20849400 20859600 0 54 chr15 20860800 20936100 0 54 chr15 20937600 20951100 0 54 chr15 20952300 20962200 0 54 chr15 20963400 20986500 0 54 chr15 20989200 21016800 0 67 chr15 21018000 21023700 0 67 chr15 21024900 21038700 0 67 chr15 21039900 21043200 0 67 chr15 21045600 21053100 0 67 chr15 21054300 21061200 0 67 chr15 21063900 21064500 0.3193 36 chr15 21065700 21102600 0 428 chr15 21103800 21193200 0 428 chr15 21242700 21244500 0 41 chr15 21247500 21249600 0.0867 43 chr15 21251100 21251400 0.1077 34 chr15 21253800 21254400 0.2156 42 chr15 21256800 21257100 0.5094 38 chr15 21273000 21273300 0 69 chr15 21274800 21301500 0 69 chr15 21302700 21317400 0 50 chr15 21318600 21327000 0 50 chr15 21329400 21360600 0 70 chr15 21362400 21362700 0 30 chr15 21364500 21380400 0 46 chr15 21381600 21432900 0 65 chr15 21434100 21458400 0 54 chr15 21459600 21509400 0 66 chr15 21510600 21514500 0 32 chr15 21515700 21526200 0 32 chr15 21527400 21531000 0 32 chr15 21532800 21533100 0.6272 26 chr15 21537900 21547200 0 59 chr15 21548700 21549000 0 59 chr15 21550800 21559800 0 59 chr15 21561600 21568200 0 59 chr15 21569400 21574800 0 59 chr15 21576000 21612900 0 59 chr15 21614700 21622800 0 51 chr15 21624000 21635700 0 51 chr15 21636900 21640500 0 30 chr15 21641700 21642000 0.0318 13 chr15 21643800 21747900 0 54 chr15 21749400 21750300 0 54 chr15 21751500 21778500 0 61 chr15 21828900 21954600 0 61 chr15 21955800 21986700 0 61 chr15 21988500 22035900 0 58 chr15 22037100 22042800 0 58 chr15 22044900 22049100 0 54 chr15 22050300 22051500 0 54 chr15 22052700 22056000 0 54 chr15 22057200 22121100 0 54 chr15 22122300 22124700 0 54 chr15 22125900 22221000 0 54 chr15 22299600 22299900 0.3074 43 chr15 22302000 22308000 0 58 chr15 22359300 22387200 0 144 chr15 22388700 22558200 0 144 chr15 22560000 22572300 0.0052 82 chr15 22573800 22581300 0 76 chr15 22583100 22588800 0.0171 70 chr15 22591800 22593900 0.1487 69 chr15 22596300 22596600 0.4255 57 chr15 22602300 22603200 0.0145 72 chr15 22605000 22606200 0.0145 72 chr15 22607700 22610400 0.0145 72 chr15 22612800 22616700 0.0145 72 chr15 22625700 22626000 0.3265 51 chr15 22631100 22631400 0.2897 56 chr15 22639800 22640100 0.6411 63 chr15 22659600 22659900 0.5374 37 chr15 22662900 22664400 0.6092 41 chr15 22669800 22671600 0.2006 60 chr15 22673100 22674900 0.1243 66 chr15 22676100 22678800 0.0653 60 chr15 22680000 22680600 0.1562 63 chr15 22686000 22686900 0.3937 62 chr15 22690200 22690500 0.5396 40 chr15 22694400 22696200 0.441 51 chr15 22698000 22698300 0.5377 49 chr15 22704600 22704900 0.0952 29 chr15 22745100 22745700 0.3302 64 chr15 22753500 22753800 0.5133 58 chr15 22757100 22757400 0.5229 57 chr15 22770300 22770600 0.0054 28 chr15 23098500 23098800 0.4524 86 chr15 23124000 23173800 0 156 chr15 23175000 23179800 0 156 chr15 23181600 23183700 0 113 chr15 23185500 23186700 0 146 chr15 23187900 23200500 0 146 chr15 23201700 23202600 0 146 chr15 23203800 23205000 0 146 chr15 23206200 23208900 0 146 chr15 23210100 23220300 0.0409 118 chr15 23221500 23222700 0.0409 118 chr15 23223900 23225100 0.0409 118 chr15 23226300 23226600 0.4807 47 chr15 23277000 23300100 0 87 chr15 23301900 23303700 0.1532 69 chr15 23312700 23359200 0 137 chr15 23360400 23364000 0 137 chr15 23366700 23367600 0.2048 69 chr15 23428500 23433900 0 80 chr15 23439900 23440200 0.6748 50 chr15 23445000 23445300 0.089 11 chr15 23676300 23676600 0.3703 33 chr15 23715900 23717700 0.3683 82 chr15 23739000 23739300 0.2931 71 chr15 23993100 23993400 0.3102 44 chr15 24010800 24011100 0.5161 83 chr15 24095700 24096000 0.5869 27 chr15 24102000 24102600 0.3397 67 chr15 24104400 24104700 0.3302 85 chr15 24134100 24135000 0.0002 61 chr15 24137400 24138600 0.0207 83 chr15 24191700 24192300 0.0057 58 chr15 24261600 24261900 0.2824 57 chr15 24314700 24315300 0.59 79 chr15 24351000 24351300 0.4082 53 chr15 24357900 24358200 0.2368 55 chr15 24412200 24412500 0.5027 69 chr15 24918300 24918900 0.4441 14 chr15 25459500 25459800 0.1934 63 chr15 25527900 25528500 0.4428 166 chr15 25758000 25758900 0.0241 304 chr15 27852600 27853500 0.1756 142 chr15 27998100 27999000 0.3456 65 chr15 28069800 28071000 0.3914 72 chr15 28146600 28147200 0.3307 63 chr15 28200600 28201200 0.4741 59 chr15 28202400 28203300 0.0054 65 chr15 28205400 28206600 0.1991 71 chr15 28211100 28211400 0.4154 64 chr15 28212900 28213500 0.0468 54 chr15 28233900 28234800 0.2326 80 chr15 28239600 28239900 0.5293 64 chr15 28294200 28294500 0.4464 55 chr15 28302000 28302900 0.3276 62 chr15 28305300 28305900 0.4165 65 chr15 28318800 28319100 0.2612 56 chr15 28321800 28452300 0 145 chr15 28453800 28454100 0.4147 60 chr15 28455300 28455600 0.4184 52 chr15 28465500 28475700 0 184 chr15 28477200 28607100 0 184 chr15 28608300 28633200 0 184 chr15 28634700 28652400 0 184 chr15 28654500 28675800 0 184 chr15 28677300 28678500 0 184 chr15 28679700 28683300 0 64 chr15 28686300 28688400 0.2336 62 chr15 28696800 28697400 0.0291 66 chr15 28699500 28700700 0.0291 66 chr15 28703400 28703700 0.0291 66 chr15 28705200 28711200 0.2253 81 chr15 28720200 28720500 0.4502 81 chr15 28723800 28724100 0.3585 57 chr15 28732800 28733100 0.5294 38 chr15 28738200 28738500 0.3277 58 chr15 28743900 28744200 0.4168 78 chr15 28746600 28752000 0.1696 62 chr15 28753200 28753800 0.2013 65 chr15 28759200 28759800 0.2547 53 chr15 28763100 28763400 0.5228 50 chr15 28770900 28771200 0.253 46 chr15 28789200 28789500 0.2459 45 chr15 28816200 28816500 0.5402 48 chr15 28831500 28831800 0.4093 55 chr15 29119200 29119500 0.6209 24 chr15 29949600 29950200 0.51 88 chr15 30082500 30093900 0 104 chr15 30095400 30123600 0 107 chr15 30125400 30153000 0 107 chr15 30155400 30156000 0 107 chr15 30158100 30175200 0 107 chr15 30176700 30181800 0 107 chr15 30183000 30195600 0 107 chr15 30197100 30227700 0 107 chr15 30228900 30375000 0 107 chr15 30376200 30442200 0 107 chr15 30443700 30444000 0 107 chr15 30445500 30483600 0 75 chr15 30488700 30490200 0.3906 45 chr15 30493200 30503700 0 69 chr15 30505500 30511500 0 121 chr15 30512700 30596700 0 121 chr15 30597900 30602700 0 75 chr15 30604200 30605100 0.0275 82 chr15 30606900 30607500 0.0275 82 chr15 30609000 30617700 0.0315 86 chr15 30633000 30633300 0.4707 59 chr15 30639300 30640500 0.0549 63 chr15 30652500 30653400 0.1413 48 chr15 30656700 30657000 0.4552 66 chr15 30681600 30682200 0.1024 67 chr15 30684600 30684900 0.2629 66 chr15 30692700 30693300 0 77 chr15 30695100 30695400 0 77 chr15 30698700 30701700 0 77 chr15 30703200 30705000 0.2091 63 chr15 30706800 30707100 0.2793 51 chr15 30708900 30710400 0.2921 92 chr15 30713400 30714000 0.2921 92 chr15 30716400 30716700 0.535 41 chr15 30750000 30751800 0.0428 69 chr15 30754800 30755700 0.1171 71 chr15 30800100 30800700 0.3785 70 chr15 30831900 30832500 0.395 63 chr15 30844800 30845400 0.52 102 chr15 31510500 31511700 0.0627 28 chr15 31620600 31620900 0.2851 37 chr15 31629900 31631100 0.4926 110 chr15 31650000 31650900 0.0981 56 chr15 31653900 31655400 0.1252 63 chr15 31691700 31692600 0.0084 58 chr15 31695300 31696800 0.125 82 chr15 31698600 31698900 0.3002 66 chr15 31700700 31702500 0.1716 59 chr15 31704000 31707300 0 84 chr15 31710000 31710300 0.6419 51 chr15 31711500 31713000 0.2852 62 chr15 31720800 31721100 0.5264 73 chr15 31723500 31724100 0.1813 57 chr15 31912500 31913100 0.2718 51 chr15 31998900 31999200 0.6237 33 chr15 32153700 32216400 0 80 chr15 32225100 32309700 0 79 chr15 32311200 32312700 0.0211 60 chr15 32314500 32323200 0 73 chr15 32324400 32328900 0 73 chr15 32330400 32340900 0 73 chr15 32342400 32355600 0 73 chr15 32356800 32381100 0 73 chr15 32382300 32382900 0.0022 63 chr15 32385300 32397300 0 110 chr15 32398500 32502600 0 110 chr15 32504100 32514300 0 58 chr15 32518500 32518800 0.2982 49 chr15 32523900 32572800 0 75 chr15 32575200 32606400 0 145 chr15 32612700 32613300 0.3663 29 chr15 32622900 32623200 0.3656 65 chr15 32629200 32630400 0.0579 56 chr15 32962800 32963100 0.4648 49 chr15 33350400 33351900 0.5191 81 chr15 34381800 34417500 0 114 chr15 34419000 34422900 0.0005 85 chr15 34424100 34425000 0.3038 75 chr15 34523400 34524000 0.1112 63 chr15 34527600 34571700 0 95 chr15 34638600 34638900 0.2976 26 chr15 34716900 34717200 0.2083 57 chr15 35655900 35656800 0.5114 50 chr15 36103800 36104100 0.201 70 chr15 36119100 36120600 0.2935 73 chr15 36197700 36199800 0.1263 80 chr15 36201000 36201300 0.1263 80 chr15 36683100 36684900 0.013 78 chr15 37304400 37304700 0.4763 64 chr15 37399800 37400100 0.5299 65 chr15 37402800 37403400 0.3949 72 chr15 37428300 37428600 0.4249 75 chr15 37430100 37432800 0.1018 90 chr15 37473300 37475400 0.3218 70 chr15 37515000 37515300 0.1829 75 chr15 38787300 38787600 0.1148 58 chr15 38836200 38836500 0.3477 70 chr15 38974800 38975100 0.2043 15 chr15 39037200 39037500 0.3707 70 chr15 39421800 39426300 0.0216 100 chr15 39522600 39523800 0.1763 77 chr15 40681500 40684200 0.0075 60 chr15 41321700 41322000 0.3404 49 chr15 41382000 41384100 0.0484 107 chr15 41725500 41725800 0.3161 25 chr15 43015200 43015500 0.5154 50 chr15 43035600 43035900 0.6004 61 chr15 43368300 43368600 0.393 30 chr15 43560600 43597500 0 85 chr15 43599300 43600500 0.0334 76 chr15 43605600 43608600 0 98 chr15 43610100 43619400 0 98 chr15 43620900 43621200 0.592 50 chr15 43622400 43622700 0.4281 53 chr15 43629000 43629600 0.2703 58 chr15 43635900 43636200 0.4343 68 chr15 43642500 43642800 0.0971 49 chr15 43651800 43654500 0.2056 93 chr15 43659900 43696200 0 84 chr15 43699200 43700100 0.1456 69 chr15 43705200 43707900 0 81 chr15 43709400 43719000 0 81 chr15 43720500 43720800 0.6356 56 chr15 43722300 43722600 0.5159 54 chr15 43725300 43725600 0.4702 62 chr15 43738500 43739100 0.1073 52 chr15 44252100 44258100 0 110 chr15 44361000 44362500 0.4083 100 chr15 44742000 44742600 0.3556 77 chr15 44823600 44827500 0 80 chr15 44828700 44829000 0.2716 88 chr15 44836800 44837100 0.5776 78 chr15 44847300 44847600 0.3637 70 chr15 44855400 44855700 0.169 74 chr15 44856900 44857500 0.169 74 chr15 44888100 44888700 0.3241 59 chr15 44922600 44923200 0.1014 58 chr15 44936400 44937300 0.0814 76 chr15 44943000 44944200 0.1975 74 chr15 44948700 44949000 0.5123 79 chr15 44967600 44968200 0.2735 57 chr15 44998200 44998800 0.1658 71 chr15 45031800 45032100 0.0398 68 chr15 45033300 45033600 0.0398 68 chr15 45043200 45044700 0.2875 60 chr15 45055800 45056400 0.3169 68 chr15 45063900 45064200 0.3443 63 chr15 45071700 45076800 0 76 chr15 45111000 45111300 0.4069 65 chr15 45135600 45135900 0.4096 51 chr15 45293700 45294000 0.5494 71 chr15 45462300 45463500 0.3075 72 chr15 45598200 45600000 0.0008 71 chr15 45775800 45776100 0.1986 49 chr15 46047900 46048200 0.4769 63 chr15 46107000 46108500 0.0961 73 chr15 46362600 46362900 0.4131 67 chr15 46368000 46369200 0.1938 54 chr15 46608600 46608900 0.4581 44 chr15 46745700 46748700 0.1353 105 chr15 46998000 46999500 0.0076 67 chr15 47132400 47134200 0.0728 60 chr15 47166600 47168100 0.1953 86 chr15 47169300 47171100 0.1953 86 chr15 47251800 47252100 0.5239 54 chr15 47279100 47279400 0.1814 61 chr15 47281200 47281500 0.1814 61 chr15 47318400 47319000 0.3623 57 chr15 48529800 48530100 0.5045 47 chr15 48578700 48579000 0.3834 40 chr15 49261200 49261500 0.1148 61 chr15 49263000 49263900 0.1148 61 chr15 49277100 49277400 0.3501 36 chr15 49354800 49355100 0.0177 77 chr15 49356300 49359900 0.0177 77 chr15 49396500 49396800 0.0046 95 chr15 49398300 49401900 0.0046 95 chr15 49779000 49779300 0.3293 88 chr15 49782000 49783500 0.3293 88 chr15 49797000 49797300 0.4024 65 chr15 50833800 50834100 0.3008 23 chr15 51032100 51032400 0.1916 89 chr15 51033900 51034200 0.4252 92 chr15 51036900 51037200 0.4252 92 chr15 51118500 51119100 0.3512 61 chr15 51174000 51178800 0.0619 95 chr15 51417300 51423300 0 93 chr15 51583200 51585300 0 41 chr15 52233000 52233300 0 18 chr15 52907100 52908000 0.0082 43 chr15 53135700 53140500 0 94 chr15 53156100 53157000 0 63 chr15 53225100 53225400 0.4841 46 chr15 53381400 53381700 0.3892 55 chr15 53495100 53495700 0.0242 80 chr15 53496900 53497200 0.0242 80 chr15 53541600 53546100 0.1294 88 chr15 53685000 53685600 0.3919 85 chr15 53687400 53687700 0.3919 85 chr15 53805900 53806200 0.4159 28 chr15 54051900 54052500 0.1057 66 chr15 54477000 54477600 0.3362 61 chr15 54926100 54932100 0 121 chr15 55065300 55066500 0.0837 75 chr15 55067700 55069800 0.0837 75 chr15 55302600 55303800 0.4234 52 chr15 55645200 55645500 0.2786 44 chr15 55986900 55988400 0.0034 62 chr15 56067600 56067900 0.6067 57 chr15 56136300 56138400 0.3286 82 chr15 56311200 56314500 0.0787 119 chr15 56331900 56332200 0.3603 24 chr15 56575500 56576100 0.1565 72 chr15 57687600 57688200 0.061 29 chr15 57720000 57720300 0.4574 65 chr15 58126200 58131600 0.0111 81 chr15 58304400 58304700 0.4309 30 chr15 58347300 58347600 0.5977 48 chr15 59420700 59421000 0 21 chr15 59539200 59539800 0.3388 26 chr15 59807400 59807700 0.2543 47 chr15 60349800 60350100 0.5882 27 chr15 60366600 60368100 0.1586 61 chr15 60816000 60816600 0.0718 21 chr15 60950100 60954300 0.2639 76 chr15 61259400 61259700 0.4497 49 chr15 61443900 61444200 0.6225 40 chr15 61572000 61572300 0.5638 30 chr15 61898400 61900800 0.1187 74 chr15 61923900 61924200 0.5516 49 chr15 62003700 62004000 0.4629 73 chr15 62144400 62144700 0.3494 66 chr15 62332800 62333100 0.5182 78 chr15 63320700 63321000 0.575 36 chr15 64139100 64139700 0.1712 48 chr15 64326600 64332600 0.0716 102 chr15 65167200 65167500 0.4243 123 chr15 65429100 65429400 0.5892 56 chr15 65843700 65844000 0.4329 30 chr15 65864100 65864400 0.2684 10 chr15 66341400 66341700 0.3598 32 chr15 66450000 66452100 0 73 chr15 67242300 67242600 0.5357 49 chr15 67672200 67672800 0.4191 80 chr15 67905000 67905300 0.5223 34 chr15 68133900 68136000 0 30 chr15 68691300 68691600 0.17 20 chr15 68757300 68757600 0.4101 38 chr15 68859000 68859900 0.6185 68 chr15 68918400 68918700 0.4299 55 chr15 69473100 69473400 0.4784 36 chr15 70130100 70130400 0.4493 53 chr15 70279800 70280100 0.5035 51 chr15 70618800 70619100 0.6057 40 chr15 70729800 70735200 0 87 chr15 70984800 70986000 0.4516 83 chr15 70988100 70988400 0.1327 71 chr15 71094900 71096100 0.2187 83 chr15 71134800 71135400 0.39 73 chr15 71163600 71163900 0.4312 61 chr15 71174400 71180100 0 93 chr15 71587200 71587800 0.2374 35 chr15 71593200 71593500 0.2442 36 chr15 71769000 71769900 0.0654 72 chr15 71793600 71796900 0.3063 81 chr15 71907300 71907600 0.1512 63 chr15 71928000 71928300 0.5742 29 chr15 72101400 72102300 0.2884 77 chr15 72631500 72670500 0 136 chr15 72806400 72807000 0.5208 81 chr15 72911100 72911400 0.4653 49 chr15 73217100 73219800 0.0949 76 chr15 73509600 73513500 0.0215 90 chr15 73532700 73536000 0.0238 81 chr15 73876200 73876500 0.5148 44 chr15 74068500 74105700 0 172 chr15 74977200 74977500 0.0438 19 chr15 75255000 75273900 0 161 chr15 75276600 75295500 0 134 chr15 75331500 75332100 0.3597 92 chr15 75480900 75482100 0.1983 67 chr15 75503400 75503700 0.526 75 chr15 75505200 75505500 0.2456 45 chr15 75624000 75624300 0.5368 47 chr15 75702900 75704100 0.0784 55 chr15 75708000 75708600 0.1157 60 chr15 75716100 75716700 0.2473 74 chr15 76230300 76230600 0.3029 17 chr15 76538100 76538400 0.0885 63 chr15 77077200 77077800 0.33 33 chr15 77205900 77206500 0.3742 63 chr15 77257200 77257500 0.3554 58 chr15 77618400 77618700 0.1664 260 chr15 77876400 77877000 0.1788 57 chr15 77880000 77880300 0.3042 55 chr15 77883000 77883600 0.0744 64 chr15 77888400 77889000 0.152 74 chr15 77920500 77920800 0.6645 39 chr15 77948100 77948700 0 86 chr15 77949900 77952900 0 86 chr15 77973300 77973900 0.3513 64 chr15 77995800 77996100 0.4422 58 chr15 78188400 78189000 0.2255 99 chr15 78722700 78723000 0.3275 77 chr15 78724500 78724800 0.3275 77 chr15 78742800 78747600 0 76 chr15 78755400 78755700 0.3791 72 chr15 78779700 78780300 0.364 71 chr15 78798900 78799500 0.4129 77 chr15 79272900 79275900 0.1157 94 chr15 79438800 79439100 0.4739 16 chr15 79490100 79490400 0.5036 97 chr15 79575000 79575300 0.4576 65 chr15 79599600 79599900 0.5389 35 chr15 79648500 79649400 0.0739 74 chr15 79714500 79714800 0.4642 50 chr15 79749000 79749300 0.4761 85 chr15 81091200 81091800 0.079 71 chr15 81162900 81163200 0.2982 55 chr15 81655500 81656100 0.1239 63 chr15 81659100 81659700 0.3052 46 chr15 81662400 81663000 0.4939 59 chr15 81669000 81672600 0.061 74 chr15 81697800 81702300 0.1251 79 chr15 81705000 81705600 0.3657 50 chr15 81708300 81708600 0.4304 58 chr15 81730800 81736200 0.0873 104 chr15 81798900 81803400 0.0368 92 chr15 81872100 81872400 0.1265 99 chr15 81873600 81875100 0.1265 99 chr15 81996300 82001100 0.0239 90 chr15 82201800 82202100 0.5082 57 chr15 82242300 82243800 0 81 chr15 82250100 82250700 0.1592 84 chr15 82299900 82300200 0.4979 89 chr15 82318800 82324200 0 75 chr15 82328100 82331700 0 72 chr15 82337400 82338000 0.1672 75 chr15 82339200 82342200 0 107 chr15 82343400 82347000 0.2531 174 chr15 82348200 82353300 0 123 chr15 82354800 82368900 0 123 chr15 82372500 82372800 0.5224 57 chr15 82420800 82428900 0 86 chr15 82430100 82471800 0 149 chr15 82473000 82473600 0.3501 89 chr15 82475100 82475400 0.5459 99 chr15 82479000 82479300 0.247 82 chr15 82481100 82481400 0.247 82 chr15 82483800 82488300 0 85 chr15 82489500 82497300 0 85 chr15 82500000 82506900 0 115 chr15 82508100 82526400 0 115 chr15 82606500 82606800 0.4779 27 chr15 82882800 82888800 0 77 chr15 82989900 82990500 0.0062 50 chr15 82997700 82999200 0.035 77 chr15 83328900 83329500 0.2535 93 chr15 83384100 83389500 0.0745 82 chr15 83451000 83456700 0 75 chr15 83660700 83662500 0.2805 64 chr15 83821200 83821800 0.4553 88 chr15 84092700 84093300 0.1571 69 chr15 84099600 84101100 0 66 chr15 84138900 84139200 0.4277 57 chr15 84147300 84147600 0.5224 53 chr15 84165600 84197400 0 81 chr15 84198900 84270000 0 84 chr15 84320100 84384000 0 102 chr15 84394500 84394800 0.5404 83 chr15 84403800 84474300 0 110 chr15 84476100 84516900 0 95 chr15 84518100 84525600 0 90 chr15 84549600 84549900 0.5492 43 chr15 84564300 84564900 0.1583 52 chr15 85184100 85184400 0.3225 75 chr15 85188600 85235700 0 176 chr15 85237800 85238400 0 176 chr15 85240200 85246500 0 176 chr15 85248900 85250700 0.2291 83 chr15 85259100 85260600 0.3103 93 chr15 85265700 85272000 0.0043 76 chr15 85434900 85439100 0.081 70 chr15 85856100 85856400 0.2007 56 chr15 85881900 85882500 0.2256 100 chr15 85896300 85896600 0.496 86 chr15 86528400 86534100 0.0024 90 chr15 86999700 87001200 0.1134 65 chr15 87510000 87517200 0 96 chr15 88361100 88361400 0.4361 62 chr15 88538100 88538400 0.4948 58 chr15 88540800 88541100 0.5567 62 chr15 88552200 88553700 0.3637 69 chr15 88555800 88556100 0.3162 68 chr15 88855500 88857000 0 130 chr15 88940700 88942800 0.0017 78 chr15 89046300 89047200 0.4169 82 chr15 89636400 89639700 0.0974 78 chr15 89663700 89664000 0.3999 53 chr15 89853600 89855700 0.1086 81 chr15 89868000 89869500 0.2278 70 chr15 90359100 90359400 0.5498 63 chr15 90636300 90636600 0.4682 50 chr15 90647100 90647400 0.628 68 chr15 90858900 90859200 0.219 22 chr15 91177500 91178400 0.3366 97 chr15 91500900 91501200 0.6601 19 chr15 91504800 91506600 0.2404 63 chr15 91750800 91751100 0.4535 141 chr15 91762800 91763400 0.0205 71 chr15 92137200 92140500 0.1263 83 chr15 93393600 93393900 0.2455 72 chr15 93431400 93432300 0.5711 55 chr15 93675900 93681300 0.013 88 chr15 94101600 94101900 0.497 38 chr15 94813500 94813800 0.6941 73 chr15 96633300 96633600 0.4962 79 chr15 96898200 96898500 0.2483 103 chr15 97265700 97268100 0 46 chr15 97269300 97270800 0.1382 24 chr15 97292400 97292700 0.3485 45 chr15 97437000 97438500 0.256 69 chr15 98089200 98089800 0.027 62 chr15 98096400 98096700 0.221 64 chr15 99013500 99014100 0.057 69 chr15 99797400 99797700 0.6348 98 chr15 99805500 99808200 0.3413 59 chr15 100072200 100072500 0.3407 55 chr15 100162500 100162800 0.4868 30 chr15 100276200 100276500 0.6212 64 chr15 100313700 100314000 0.5155 56 chr15 100367400 100367700 0.2377 51 chr15 100370100 100370400 0.3408 79 chr15 100418400 100422900 0.0474 86 chr15 100535700 100536000 0.489 51 chr15 100555500 100555800 0.6775 26 chr15 100557000 100558500 0.2726 43 chr15 100706400 100706700 0.328 32 chr15 100710300 100710600 0.6354 134 chr15 100719000 100720200 0 61 chr15 100773600 100773900 0.2754 39 chr15 101075100 101075400 0.5871 12 chr15 101086200 101086500 0.5484 39 chr15 101130600 101131200 0.3192 77 chr15 101202300 101202600 0.6257 59 chr15 101214600 101214900 0.5438 53 chr15 101223600 101223900 0.548 61 chr15 101311800 101312100 0.2267 41 chr15 101402100 101402400 0.4344 25 chr15 101627400 101632200 0.133 96 chr15 101692200 101692500 0.6962 45 chr15 101730300 101730600 0.6246 57 chr15 101745600 101747100 0.0732 62 chr15 101752800 101764200 0 190 chr15 101766900 101767200 0.3441 39 chr15 101860200 101862300 0 76 chr15 101863800 101865600 0.0626 84 chr15 101867700 101875800 0.0081 84 chr15 101878800 101879700 0.3456 59 chr15 101889900 101890200 0.4306 45 chr15 101892600 101894700 0 86 chr15 101896500 101898600 0 86 chr15 101900100 101900400 0.2156 55 chr15 101905500 101906100 0.0101 71 chr15 101907600 101913000 0.0101 71 chr15 101915400 101918700 0.035 79 chr15 101920500 101947200 0 117 chr15 101948400 101964600 0 171 chr15 101966400 101970300 0 225 chr15 101971800 101981400 0 225 chr16 13200 16800 0 153 chr16 18000 23100 0 153 chr16 25200 31800 0.0172 106 chr16 81600 81900 0.5798 39 chr16 153300 154200 0.0066 66 chr16 160200 160500 0.5796 85 chr16 163800 164700 0.0017 53 chr16 172500 173400 0 69 chr16 176700 177000 0.3789 73 chr16 458400 458700 0.2609 175 chr16 481500 482100 0.259 55 chr16 494700 495000 0.3722 395 chr16 585000 585300 0.1015 21 chr16 599700 600000 0.1702 77 chr16 606000 606600 0.5179 72 chr16 611700 613200 0.2255 39 chr16 818700 819000 0.6346 236 chr16 826500 826800 0.5659 28 chr16 846600 847200 0.2419 501 chr16 857400 859800 0.4072 108 chr16 886500 886800 0.4845 38 chr16 895800 896100 0.4045 51 chr16 903000 904800 0.498 64 chr16 922800 923100 0.6177 41 chr16 952800 955200 0.2527 84 chr16 960600 962100 0 91 chr16 1025100 1025700 0.4222 349 chr16 1043400 1043700 0.2957 27 chr16 1092600 1093200 0.384 105 chr16 1113900 1114200 0.5679 79 chr16 1185600 1186200 0.4932 134 chr16 1199100 1199400 0.6079 35 chr16 1204800 1205100 0.588 61 chr16 1228800 1230000 0.0084 63 chr16 1231800 1237800 0 68 chr16 1239300 1239600 0.3466 79 chr16 1240800 1243200 0.0034 67 chr16 1248600 1252500 0 80 chr16 1253700 1254600 0 80 chr16 1284900 1285200 0.5767 58 chr16 1397400 1397700 0.5869 18 chr16 1459500 1459800 0.3693 28 chr16 1599000 1600500 0.23 65 chr16 2034300 2034600 0.4897 30 chr16 2098500 2098800 0.5036 63 chr16 2117700 2118000 0.4423 76 chr16 2127900 2128200 0.4966 19 chr16 2134200 2134500 0.1666 74 chr16 2164800 2165100 0.6529 47 chr16 2399400 2399700 0.4714 52 chr16 2542800 2543700 0.0002 63 chr16 2547300 2551200 0 80 chr16 2552400 2575800 0 80 chr16 2578500 2584800 0 77 chr16 2600400 2601000 0.1623 70 chr16 2604600 2604900 0.6118 55 chr16 2606400 2609400 0 84 chr16 2611800 2614200 0 81 chr16 2615400 2622000 0 81 chr16 2623500 2648100 0 73 chr16 2650800 2655000 0 87 chr16 2657700 2658600 0.0019 73 chr16 2678700 2679300 0.0326 71 chr16 2683500 2683800 0.3443 60 chr16 2685600 2686800 0.0055 94 chr16 2688600 2689500 0 71 chr16 2693700 2696400 0 85 chr16 2747400 2747700 0.6396 37 chr16 2801400 2801700 0.4483 85 chr16 2833500 2833800 0.6986 57 chr16 3072600 3072900 0.4505 12 chr16 3081600 3081900 0.2463 34 chr16 3197700 3198000 0.5644 24 chr16 3886500 3887100 0.1546 83 chr16 4344300 4344600 0.6516 32 chr16 5061300 5061600 0.417 81 chr16 5201700 5203200 0.2527 76 chr16 5500200 5500500 0.3564 184 chr16 5754300 5755200 0.0229 89 chr16 5825700 5826000 0.4729 37 chr16 6350400 6350700 0.4425 85 chr16 7008600 7009200 0.1654 112 chr16 7229700 7230000 0.4313 39 chr16 7291800 7292100 0.2543 64 chr16 7729200 7729500 0.5113 54 chr16 7902900 7903200 0.4065 65 chr16 8058000 8060700 0 84 chr16 8478900 8479200 0.6519 79 chr16 8953500 8954100 0.0121 34 chr16 9156600 9156900 0.465 70 chr16 9293700 9294000 0.3463 90 chr16 9317400 9317700 0.3334 57 chr16 9584400 9590100 0 83 chr16 9686400 9687000 0.1808 86 chr16 9730500 9731100 0.4013 77 chr16 10288200 10288500 0.2954 49 chr16 10479000 10479300 0.2345 67 chr16 11335800 11336100 0.5294 44 chr16 11925000 11926500 0.318 78 chr16 11927700 11931600 0 97 chr16 11934900 11937000 0.26 56 chr16 11939400 11943000 0.0555 78 chr16 11975100 11975400 0.5066 30 chr16 12322800 12323100 0.6589 98 chr16 12943200 12943500 0.5951 54 chr16 13385400 13385700 0.4982 63 chr16 14159700 14160000 0.5222 43 chr16 14688000 14769300 0 103 chr16 14773200 14774100 0 92 chr16 14775300 14778600 0 92 chr16 14779800 14800200 0 109 chr16 14801400 14803800 0 109 chr16 14805600 14811300 0.0143 105 chr16 14812500 14813400 0.0143 105 chr16 14817900 14818200 0.2962 62 chr16 14819400 14821200 0 63 chr16 14824200 14824800 0.0038 77 chr16 14826300 14827500 0.0038 77 chr16 14829000 14829300 0.0158 73 chr16 14830800 14835300 0.0158 73 chr16 14837700 14844900 0.0299 74 chr16 14846400 14855100 0 96 chr16 14857200 14858400 0.1174 64 chr16 14860800 14861400 0.418 53 chr16 14863200 14873700 0.01 84 chr16 14875200 14875500 0.2009 83 chr16 14877600 14880300 0.2009 83 chr16 14881800 14882400 0.0151 50 chr16 14886300 14886600 0.2703 47 chr16 14887800 14888100 0 94 chr16 14889900 14891100 0 94 chr16 14895000 14899500 0 94 chr16 14901300 14901600 0 94 chr16 14903100 14903400 0.1044 55 chr16 14905200 14953200 0 149 chr16 15002700 15003000 0.4102 72 chr16 15091200 15091500 0.6494 67 chr16 15101400 15109200 0 108 chr16 15110700 15111000 0 108 chr16 15112200 15123900 0 108 chr16 15125100 15126600 0.1321 78 chr16 15133200 15135000 0.2843 68 chr16 15138000 15139800 0 84 chr16 15150600 15153900 0 67 chr16 15155400 15156000 0.0143 69 chr16 15165600 15166800 0.0558 84 chr16 15168600 15168900 0.5356 85 chr16 15171900 15172200 0.1888 75 chr16 15173400 15173700 0.1888 75 chr16 15176100 15176400 0.6022 59 chr16 15178800 15179700 0.0101 61 chr16 15183300 15190500 0 81 chr16 15193500 15196200 0.0007 79 chr16 15197400 15201900 0.0007 79 chr16 15204300 15204600 0.1854 74 chr16 15207600 15208800 0.0287 62 chr16 15210300 15220800 0 82 chr16 15222000 15222300 0 82 chr16 15223500 15229200 0 82 chr16 15230400 15230700 0.5561 73 chr16 15233700 15262200 0 95 chr16 15263700 15264000 0 95 chr16 15266100 15266700 0.0344 74 chr16 15268200 15269100 0.0344 74 chr16 15271500 15273900 0 88 chr16 15276300 15285600 0.0339 77 chr16 15289200 15289500 0.4726 63 chr16 15294300 15300300 0.0208 83 chr16 15305100 15305700 0.2025 55 chr16 15308100 15308700 0.0206 86 chr16 15309900 15310500 0.0206 86 chr16 15314400 15318300 0 81 chr16 15319500 15320700 0 81 chr16 15323100 15323700 0.1913 92 chr16 15324900 15370200 0 103 chr16 15372900 15375000 0.0568 78 chr16 15378300 15379200 0.0139 87 chr16 15380700 15381300 0.2781 59 chr16 15655800 15656100 0.6273 57 chr16 16172100 16172400 0.6086 116 chr16 16213800 16214100 0.245 70 chr16 16216200 16220400 0.0083 88 chr16 16224000 16226100 0 70 chr16 16227900 16228200 0.015 70 chr16 16229700 16233900 0.015 70 chr16 16238100 16238400 0.3283 34 chr16 16239600 16240200 0 117 chr16 16241400 16254000 0 117 chr16 16255200 16257600 0 117 chr16 16259400 16260300 0 117 chr16 16261500 16265100 0 117 chr16 16266300 16268100 0 117 chr16 16269600 16366500 0 117 chr16 16367700 16419000 0 117 chr16 16421400 16431300 0 91 chr16 16432800 16448400 0 91 chr16 16450500 16452300 0 85 chr16 16453500 16461600 0 85 chr16 16464300 16465200 0.0063 61 chr16 16470000 16470300 0.313 82 chr16 16471500 16473000 0.313 82 chr16 16475400 16479900 0.0137 79 chr16 16482600 16492500 0 86 chr16 16493700 16534800 0 86 chr16 16539000 16539300 0.4906 67 chr16 16551900 16552200 0.3551 57 chr16 16555800 16556100 0.0459 82 chr16 16557300 16557900 0.0459 82 chr16 16559400 16560000 0.0627 70 chr16 16563900 16567500 0 72 chr16 16571400 16572000 0.3737 72 chr16 16573500 16573800 0.3737 72 chr16 16589400 16590000 0.005 70 chr16 16592100 16593000 0.0203 65 chr16 16594200 16595400 0.0716 68 chr16 16598400 16599900 0.1468 67 chr16 16602000 16602300 0.4784 50 chr16 16604100 16608600 0.1116 74 chr16 16610400 16611600 0.221 56 chr16 16613100 16613400 0 59 chr16 16614600 16615200 0 59 chr16 16616400 16618500 0 59 chr16 16620600 16624500 0.0009 71 chr16 16625700 16626300 0.0009 71 chr16 16629300 16629600 0.4899 67 chr16 16639500 16642800 0 99 chr16 16645800 16651200 0 97 chr16 16653300 16686600 0 83 chr16 16688100 16692900 0 81 chr16 16694100 16699500 0 81 chr16 16700700 16739100 0 81 chr16 16745400 16748100 0.2329 67 chr16 16750200 16750500 0.3613 63 chr16 16755000 16756200 0.2097 82 chr16 16758000 16758900 0.0516 67 chr16 16761900 16762200 0.4589 52 chr16 16840500 16846500 0 91 chr16 17715600 17715900 0.6849 44 chr16 18076500 18078600 0.0126 62 chr16 18080100 18080700 0.1738 64 chr16 18084600 18086100 0.3815 65 chr16 18087600 18087900 0.1442 61 chr16 18090600 18091200 0.1442 61 chr16 18095100 18102000 0 74 chr16 18104100 18113400 0.0133 73 chr16 18114600 18116700 0.0133 73 chr16 18119700 18120600 0 76 chr16 18122100 18129900 0 76 chr16 18131100 18139800 0 76 chr16 18141600 18142500 0 76 chr16 18144900 18148500 0 71 chr16 18152400 18153000 0.269 70 chr16 18154500 18155100 0.0567 65 chr16 18156300 18157500 0.0567 65 chr16 18160200 18160500 0.4949 53 chr16 18177000 18194700 0 93 chr16 18197100 18197400 0.3482 54 chr16 18200400 18200700 0.4559 70 chr16 18202200 18202800 0.3126 72 chr16 18204600 18207300 0.0972 76 chr16 18218400 18218700 0.0183 72 chr16 18220800 18226200 0.0183 72 chr16 18228300 18229800 0 78 chr16 18232200 18234900 0 78 chr16 18236100 18240600 0 78 chr16 18245100 18245400 0 78 chr16 18246600 18247500 0 78 chr16 18250200 18255000 0 78 chr16 18256500 18305400 0 156 chr16 18306600 18436200 0 156 chr16 18486600 18525000 0 87 chr16 18527400 18528000 0 87 chr16 18529500 18533100 0.0485 95 chr16 18534300 18535200 0.0133 83 chr16 18537600 18538200 0.0257 87 chr16 18540000 18543300 0.0257 87 chr16 18545400 18547500 0 87 chr16 18548700 18550200 0 87 chr16 18551400 18552600 0 87 chr16 18553800 18556200 0.0142 90 chr16 18558000 18558600 0.0142 90 chr16 18562800 18563100 0.4866 47 chr16 18566400 18566700 0.2005 64 chr16 18570300 18571500 0.2583 69 chr16 18580500 18580800 0.4786 64 chr16 18597000 18597300 0.44 41 chr16 18600300 18601500 0.1043 57 chr16 18603000 18604200 0.1615 70 chr16 18608700 18609000 0.392 67 chr16 18611100 18613500 0.1275 86 chr16 18621300 18658500 0 86 chr16 18659700 18665100 0 93 chr16 18666300 18670800 0 82 chr16 18672600 18695100 0 96 chr16 18696600 18706200 0 96 chr16 18707400 18714300 0 96 chr16 18716100 18719700 0 74 chr16 18720900 18724500 0.034 50 chr16 18726000 18729600 0 60 chr16 18731700 18732900 0.2128 85 chr16 18736500 18737100 0.108 88 chr16 18738600 18738900 0.2946 74 chr16 18740100 18740700 0.081 60 chr16 18742200 18742800 0.2219 63 chr16 18744900 18746400 0.2922 88 chr16 18748500 18749400 0.3415 95 chr16 18753900 18755400 0.2918 92 chr16 18758100 18759300 0.3025 78 chr16 18760800 18761400 0.0162 57 chr16 18763800 18764400 0.0162 57 chr16 18778500 18778800 0.3694 49 chr16 18780000 18780300 0.2693 71 chr16 18781800 18782400 0.2693 71 chr16 18821100 18827100 0 68 chr16 18889200 18889800 0.189 59 chr16 19003500 19004100 0.0875 69 chr16 19219200 19219500 0.2792 28 chr16 19786800 19802700 0 51 chr16 20185500 20186400 0.0047 89 chr16 20442900 20451600 0 71 chr16 20456100 20456400 0.2488 53 chr16 20481600 20481900 0.2823 35 chr16 20484300 20484600 0.1726 53 chr16 20490000 20501400 0 83 chr16 20522400 20533500 0 80 chr16 20539200 20539500 0.0782 66 chr16 20566800 20567100 0.3281 18 chr16 20571600 20571900 0.3826 60 chr16 20576400 20585100 0 82 chr16 20757600 20757900 0.2979 79 chr16 20767200 20767500 0.2226 40 chr16 20858700 20859000 0.219 49 chr16 21043200 21048000 0.0282 79 chr16 21351300 21351600 0.2069 49 chr16 21353400 21354000 0.3279 86 chr16 21378000 21378300 0.4562 60 chr16 21379500 21379800 0 115 chr16 21381000 21387900 0 115 chr16 21389100 21501300 0 115 chr16 21534900 21536100 0.394 89 chr16 21551400 21551700 0.4125 87 chr16 21730800 21731100 0.4879 51 chr16 21732900 21734400 0.0122 75 chr16 21737400 21757500 0 113 chr16 21760800 21762900 0 75 chr16 21765300 21766500 0.0241 74 chr16 21768600 21771300 0.0157 75 chr16 21774000 21774300 0.3734 76 chr16 21775800 21801300 0 103 chr16 21817500 21817800 0.3422 54 chr16 21831300 21884700 0 125 chr16 21886800 21890700 0 92 chr16 21892200 21933300 0 92 chr16 22432800 22435200 0 77 chr16 22437900 22539600 0 131 chr16 22542000 22542600 0.1674 80 chr16 22548900 22549500 0.2755 89 chr16 22553100 22573800 0 106 chr16 22577100 22578900 0 90 chr16 22581600 22582800 0.2398 96 chr16 22584600 22587300 0.0111 100 chr16 22590300 22590600 0.5504 78 chr16 22592700 22599300 0 100 chr16 22600500 22613400 0 100 chr16 22657500 22657800 0.1955 69 chr16 22700100 22700700 0.055 59 chr16 22818900 22819200 0.6372 18 chr16 23517300 23517600 0.3684 35 chr16 23599800 23600100 0.112 73 chr16 23981700 23982300 0.4871 20 chr16 24108300 24110100 0.2024 81 chr16 25294500 25294800 0.4639 35 chr16 25337100 25337700 0.1374 58 chr16 26376900 26377200 0.6936 36 chr16 26811600 26812500 0.021 32 chr16 27138900 27139500 0.3336 242 chr16 27306300 27306600 0.5624 56 chr16 27656700 27657000 0.4971 60 chr16 28089000 28089300 0.6796 22 chr16 28332900 28334700 0.0656 64 chr16 28339500 28376100 0 110 chr16 28377600 28471800 0 110 chr16 28598700 28601100 0 71 chr16 28611600 28615500 0 85 chr16 28631400 28631700 0.2348 43 chr16 28637100 28637400 0.1802 70 chr16 28641600 28641900 0.1803 101 chr16 28643100 28737900 0 140 chr16 28739100 28809300 0 140 chr16 29036700 29066700 0 126 chr16 29067900 29068800 0 126 chr16 29070600 29071200 0 126 chr16 29078400 29078700 0.408 59 chr16 29082000 29082300 0.5956 66 chr16 29087400 29087700 0.4544 54 chr16 29097900 29098200 0.3524 50 chr16 29104500 29104800 0.426 64 chr16 29210100 29210700 0.5253 69 chr16 29279400 29279700 0.5331 56 chr16 29298600 29298900 0.6785 38 chr16 29330400 29330700 0.3302 45 chr16 29332500 29333100 0.0055 75 chr16 29354400 29354700 0.4891 56 chr16 29358600 29367000 0 101 chr16 29368200 29388900 0 101 chr16 29390100 29391600 0.2879 84 chr16 29392800 29393100 0.2879 84 chr16 29394900 29395500 0.0283 86 chr16 29396700 29400600 0.0283 86 chr16 29402100 29405100 0.1263 92 chr16 29412000 29412300 0.193 63 chr16 29415000 29417700 0.1915 79 chr16 29418900 29419200 0.1915 79 chr16 29430900 29556000 0 148 chr16 29557500 29568600 0 72 chr16 29586900 29587200 0.1923 56 chr16 29594100 29594400 0.5295 60 chr16 29615400 29615700 0.3835 62 chr16 29616900 29617200 0.3937 52 chr16 29621100 29622900 0.3131 74 chr16 29630100 29630400 0.3111 71 chr16 29637300 29637600 0.2908 84 chr16 30170400 30170700 0.3482 61 chr16 30188700 30276300 0 148 chr16 30277500 30282300 0 148 chr16 30283500 30295500 0 148 chr16 30297300 30297600 0 148 chr16 30298800 30308400 0 70 chr16 30325800 30327300 0.3239 53 chr16 30799200 30799500 0.5973 35 chr16 31103700 31105200 0 149 chr16 31308900 31309500 0.0376 59 chr16 31340100 31341000 0.0006 57 chr16 31596000 31596600 0.013 65 chr16 31759800 31760700 0 59 chr16 31950000 31950300 0.1682 72 chr16 31953900 31954200 0.1682 72 chr16 31955700 31956300 0.1682 72 chr16 31958100 31959600 0.1949 69 chr16 31960800 31961700 0.1728 79 chr16 31964400 31965000 0.0202 54 chr16 31966800 31967100 0.4976 37 chr16 31968600 31968900 0 80 chr16 31970100 31971000 0 80 chr16 31972200 31974300 0 80 chr16 31977600 31978200 0.1481 68 chr16 31987800 31990500 0.1739 70 chr16 31992900 31993200 0.1992 72 chr16 31995600 31996800 0.1992 72 chr16 31998000 31998300 0.1992 72 chr16 32014200 32014800 0.2459 53 chr16 32017800 32018400 0.0647 61 chr16 32023200 32024400 0.116 77 chr16 32028600 32065500 0 245 chr16 32066700 32096400 0 245 chr16 32097600 32113500 0.0218 197 chr16 32114700 32115600 0.0218 197 chr16 32117100 32117700 0.3326 96 chr16 32122500 32122800 0.299 122 chr16 32124900 32125800 0.299 122 chr16 32127900 32128200 0.6848 85 chr16 32130600 32134500 0 98 chr16 32135700 32208900 0 98 chr16 32210700 32254200 0 95 chr16 32255400 32261400 0 95 chr16 32264100 32269200 0 90 chr16 32270400 32283900 0 90 chr16 32285400 32285700 0.5401 318 chr16 32286900 32382000 0 107 chr16 32386200 32386500 0.5333 57 chr16 32389500 32391300 0.4513 55 chr16 32395500 32398800 0 69 chr16 32411700 32412000 0.6722 55 chr16 32413500 32414700 0.1102 98 chr16 32416800 32417400 0.2561 117 chr16 32420700 32421300 0.2212 97 chr16 32423700 32426700 0.1355 94 chr16 32429100 32443800 0 87 chr16 32450400 32451300 0.4052 121 chr16 32452500 32452800 0.4052 121 chr16 32455200 32455500 0.0862 104 chr16 32457000 32458500 0.0862 104 chr16 32459700 32460000 0.0862 104 chr16 32464800 32468100 0 86 chr16 32470800 32472000 0.253 71 chr16 32473500 32477700 0.0023 140 chr16 32478900 32483700 0.0023 140 chr16 32487600 32489700 0 74 chr16 32493300 32493600 0.6778 73 chr16 32495100 32495400 0.5262 47 chr16 32496900 32498400 0.2436 63 chr16 32499600 32503500 0 65 chr16 32505300 32506800 0 58 chr16 32508000 32511600 0 58 chr16 32516400 32516700 0.4575 58 chr16 32520900 32542800 0 78 chr16 32544000 32549700 0 78 chr16 32551200 32552100 0 78 chr16 32553300 32567400 0 77 chr16 32568600 32572500 0 77 chr16 32574000 32575800 0 77 chr16 32577000 32586600 0 94 chr16 32587800 32606400 0 94 chr16 32607600 32620500 0 94 chr16 32623200 32624100 0 73 chr16 32628000 32630100 0.157 87 chr16 32631900 32632200 0.291 61 chr16 32634300 32643900 0 79 chr16 32646000 32811300 0 272 chr16 32812500 32812800 0 272 chr16 32814600 32815800 0.2898 98 chr16 32818200 32825400 0 172 chr16 32826600 32828100 0.0432 133 chr16 32829300 32830200 0.0432 133 chr16 32832900 32841900 0 227 chr16 32843400 32844900 0 227 chr16 32846700 32877300 0 119 chr16 32878500 32879100 0 119 chr16 32880300 32887800 0 119 chr16 32889000 32889900 0 119 chr16 32895000 32895300 0.3982 90 chr16 32898600 32898900 0.3281 63 chr16 32902200 32903400 0.3283 92 chr16 32906100 32906400 0.2679 79 chr16 32908800 32909100 0.3171 89 chr16 32912100 32912700 0.3171 89 chr16 32914200 32914500 0.3171 89 chr16 32920800 32921700 0.0811 97 chr16 32924100 32928000 0 105 chr16 32929800 32930100 0 105 chr16 32931300 32931600 0 105 chr16 32936400 32937300 0.0262 91 chr16 32939400 32940300 0.0262 91 chr16 32949000 32949300 0.28 68 chr16 32950500 32988900 0 131 chr16 32991600 32992200 0 131 chr16 32994000 33014700 0 131 chr16 33017400 33020100 0 131 chr16 33021300 33028200 0 131 chr16 33029400 33039600 0 350 chr16 33041400 33059100 0.092 157 chr16 33060300 33060900 0.092 157 chr16 33065400 33214500 0 169 chr16 33264600 33392400 0 1112 chr16 33442500 33516300 0 111 chr16 33517800 33609300 0 99 chr16 33614700 33615000 0.4051 66 chr16 33619500 33620100 0.0137 68 chr16 33624000 33624300 0.3382 47 chr16 33625800 33626100 0.1764 66 chr16 33636300 33636900 0.2117 40 chr16 33639300 33639600 0.6251 56 chr16 33645000 33645600 0.0102 55 chr16 33648600 33660300 0 61 chr16 33662700 33664200 0.3369 50 chr16 33666600 33667200 0.3617 48 chr16 33668700 33669300 0.3448 56 chr16 33682500 33682800 0.5633 68 chr16 33684000 33684300 0.3922 44 chr16 33687600 33688500 0.1271 59 chr16 33690600 33692100 0.0383 70 chr16 33698700 33699300 0.0307 53 chr16 33704700 33705600 0.1372 52 chr16 33708600 33708900 0.3066 46 chr16 33716400 33718500 0.2753 85 chr16 33727500 33736500 0.004 217 chr16 33739500 33741300 0.004 217 chr16 33744000 33747000 0.294 139 chr16 33750000 33751800 0.2846 51 chr16 33755100 33755400 0.2879 49 chr16 33757500 33764400 0 42 chr16 33766500 33768300 0.076 45 chr16 33778200 33821400 0 66 chr16 33822600 33827100 0 66 chr16 33828600 33836700 0 111 chr16 33838200 33840900 0 111 chr16 33843000 33846000 0.1581 69 chr16 33847200 33848400 0.1581 69 chr16 33849900 33851400 0.1581 69 chr16 33852600 33854100 0.1581 69 chr16 33855900 33857700 0.0029 77 chr16 33859800 33862200 0.3496 76 chr16 33864300 33864600 0 99 chr16 33865800 33905100 0 99 chr16 33907200 33909600 0.0507 52 chr16 33912000 33912300 0.4568 56 chr16 33914100 33917700 0.1034 73 chr16 33920400 33922500 0.1406 70 chr16 33923700 33931500 0 90 chr16 33933900 33935700 0.1171 62 chr16 33936900 33937200 0.4839 56 chr16 33939300 33959700 0 111 chr16 33961200 33969600 0 111 chr16 33971400 33991800 0 100 chr16 33996300 34013100 0 98 chr16 34062000 34068000 0.0047 2127 chr16 34071300 34073700 0.0061 2637 chr16 34085100 34086300 0.2121 3841 chr16 34096200 34100100 0.1597 2317 chr16 34123200 34123500 0.6671 43 chr16 34185900 34189200 0 79 chr16 34195500 34195800 0.6153 188 chr16 34201200 34201800 0.6158 234 chr16 34205100 34205400 0.6571 296 chr16 34210800 34211100 0.5381 175 chr16 34215900 34216200 0.2937 91 chr16 34241400 34241700 0.2223 47 chr16 34261500 34261800 0.4492 31 chr16 34267800 34268400 0.1283 72 chr16 34270800 34271100 0.1963 32 chr16 34273800 34274700 0 171 chr16 34275900 34277400 0 171 chr16 34278600 34281600 0 116 chr16 34282800 34289400 0 116 chr16 34339500 34494300 0 400 chr16 34495500 34506600 0 400 chr16 34507800 34517100 0 400 chr16 34518600 34521300 0 46 chr16 34572300 34576800 0.0918 14136 chr16 34580700 34584000 0.0943 23468 chr16 34586400 34586700 0.0383 6369 chr16 34588500 34590600 0.0383 6369 chr16 34592400 34596300 0.2103 14692 chr16 34661100 34661400 0.6402 110 chr16 34744800 34746600 0 64 chr16 34752600 34752900 0.582 106 chr16 34806000 34806300 0.5639 114 chr16 34821600 34821900 0.6928 61 chr16 34827300 34830000 0.0668 61 chr16 34831200 34831800 0 64 chr16 34833000 34840800 0 64 chr16 34842000 34852800 0 64 chr16 34854300 34896900 0 389 chr16 34902300 34902600 0.1957 1295 chr16 34911300 34913100 0 53 chr16 34960200 35072400 0 57 chr16 35080200 35080500 0.439 94 chr16 35098800 35099100 0.4443 72 chr16 35116800 35117100 0.4133 62 chr16 35164200 35164500 0.5423 29 chr16 35327700 35328000 0.6254 63 chr16 35470800 35471100 0.6789 54 chr16 35592900 35593200 0.4504 43 chr16 35608800 35613900 0 76 chr16 35804100 35804700 0.0053 64 chr16 35806500 35807100 0.1439 54 chr16 35829000 35829600 0.3012 69 chr16 35945400 35946000 0.0206 56 chr16 35957100 35958000 0.006 70 chr16 35995500 35995800 0.6736 136 chr16 35997600 35997900 0.6935 113 chr16 36001200 36001500 0.6761 99 chr16 36009300 36010200 0 72 chr16 36011400 36012900 0 124 chr16 36016500 36017700 0 108 chr16 36019200 36019800 0 108 chr16 36031800 36032100 0.6463 101 chr16 36041100 36041400 0.6079 147 chr16 36055800 36056100 0.6989 115 chr16 36057600 36057900 0.5772 121 chr16 36070800 36071100 0.5295 176 chr16 36072900 36073200 0.3062 104 chr16 36075300 36075900 0.3062 104 chr16 36084900 36085200 0.5251 154 chr16 36093600 36093900 0.6571 114 chr16 36099300 36099600 0.5993 91 chr16 36101400 36101700 0.6851 142 chr16 36103800 36105600 0.6415 350 chr16 36106800 36107400 0.4228 144 chr16 36110700 36111000 0.6834 124 chr16 36114300 36114600 0.5604 106 chr16 36118800 36119100 0.6595 228 chr16 36121200 36121500 0.6803 64 chr16 36193200 36193500 0.5259 192 chr16 36237900 36238200 0.6048 122 chr16 36246300 36249000 0 67 chr16 36260700 36261000 0 33 chr16 36311700 36313200 0.1557 147 chr16 36314700 36321300 0 156 chr16 36322800 36325200 0 156 chr16 36327300 36333900 0 146 chr16 36337500 36747600 0 783 chr16 36749100 36993900 0 475 chr16 36995100 37725300 0 475 chr16 37726500 38109900 0 475 chr16 38111100 38268300 0 195 chr16 38275800 38276700 0 88 chr16 38278800 38279100 0 88 chr16 46381200 46389600 0.0077 13098 chr16 46392000 46395300 0.2036 28465 chr16 46397100 46401600 0.0285 28741 chr16 46421700 46422000 0.6263 165 chr16 46446000 46446300 0.4325 106 chr16 46450200 46451700 0.2637 91 chr16 46458300 46459500 0.3999 113 chr16 46537500 46537800 0.362 63 chr16 46539900 46541400 0.3488 68 chr16 46623600 46626300 0.0124 94 chr16 46693800 46694400 0.0533 61 chr16 46999800 47000100 0.42 77 chr16 47223000 47223300 0.309 62 chr16 47645100 47646300 0.0435 60 chr16 47864700 47865300 0.1111 81 chr16 48015600 48015900 0.0438 90 chr16 48017100 48020400 0.0438 90 chr16 48466200 48466500 0.6744 30 chr16 48768600 48774000 0.0103 110 chr16 48783000 48783300 0.5166 43 chr16 48917400 48918000 0.059 31 chr16 48951300 48951600 0.4922 59 chr16 49135800 49136700 0.1108 80 chr16 49381500 49381800 0.4892 53 chr16 49945500 49945800 0.0069 29 chr16 50442600 50442900 0.3549 113 chr16 50928600 50928900 0.373 47 chr16 51014100 51015000 0.2881 83 chr16 51373500 51374100 0.2933 93 chr16 52174800 52175400 0.0968 92 chr16 52248900 52249500 0.3967 25 chr16 52380900 52381200 0.509 54 chr16 53400000 53400300 0.2773 97 chr16 53401500 53402700 0.2773 97 chr16 54042300 54048000 0 81 chr16 54420300 54420600 0.6574 58 chr16 54567300 54567600 0.5906 57 chr16 55170600 55170900 0.018 212 chr16 55602000 55602300 0.4379 72 chr16 55761900 55762200 0.0262 76 chr16 55770000 55770300 0.5999 24 chr16 55773300 55773900 0.3208 68 chr16 55788600 55808400 0 84 chr16 55818600 55818900 0.4889 62 chr16 55820100 55820400 0.3402 69 chr16 56157600 56158800 0.4763 72 chr16 56739000 56740500 0.1617 86 chr16 57200100 57200400 0.2877 94 chr16 57218700 57219000 0.3557 53 chr16 58119900 58120200 0.5975 84 chr16 58816200 58816500 0.4258 61 chr16 58839300 58839600 0.328 42 chr16 58978800 58979100 0.3777 58 chr16 58993800 58994100 0.0966 49 chr16 59100900 59101200 0.5565 29 chr16 59278500 59279100 0.3748 66 chr16 59289900 59290200 0.5425 51 chr16 59559600 59560800 0.0027 103 chr16 59562300 59564400 0.0027 103 chr16 59680800 59681100 0.1894 72 chr16 59977800 59982600 0.0476 73 chr16 59998200 59998500 0.021 24 chr16 60196200 60197700 0.0701 74 chr16 60456900 60457200 0.5258 28 chr16 60524100 60525300 0.0116 86 chr16 60526500 60528600 0.0116 86 chr16 60876300 60879900 0 79 chr16 61461900 61462200 0.5061 73 chr16 61511700 61512000 0.391 30 chr16 61782900 61787700 0 81 chr16 61802100 61807200 0 79 chr16 61920000 61921200 0.149 76 chr16 62013000 62013300 0.2312 44 chr16 62489400 62489700 0.3192 61 chr16 62983800 62984400 0.5907 61 chr16 62994000 62994300 0.4611 51 chr16 63123300 63123600 0.3695 92 chr16 63125100 63125400 0.3695 92 chr16 63149400 63150000 0.1537 66 chr16 63151800 63152100 0.1537 66 chr16 63274500 63274800 0.47 60 chr16 63389100 63393900 0.0196 79 chr16 63408600 63408900 0.6171 28 chr16 63693300 63693600 0.4356 39 chr16 64631700 64632300 0.361 79 chr16 65129400 65129700 0.1243 15 chr16 65237100 65240100 0.1906 63 chr16 65359500 65362200 0.1462 77 chr16 65465400 65465700 0.5909 50 chr16 65486100 65486400 0.5126 42 chr16 65556300 65556600 0.3823 82 chr16 65690100 65695800 0 86 chr16 66379800 66380100 0.6412 39 chr16 66760500 66760800 0.5245 48 chr16 66789300 66789600 0.2214 28 chr16 67479900 67480200 0.5491 31 chr16 67712400 67713000 0.0656 87 chr16 68583600 68589300 0 110 chr16 69246300 69246900 0.4993 57 chr16 69665400 69666300 0.1256 74 chr16 69943800 69944100 0.4098 65 chr16 69946200 69954300 0.0238 87 chr16 69956400 69964200 0 91 chr16 69965700 69966000 0 91 chr16 69967500 69969300 0 111 chr16 69971100 69971700 0 111 chr16 69973200 69975900 0 111 chr16 69989100 69989700 0.4201 65 chr16 69995700 69996900 0.4167 88 chr16 70037700 70038000 0.384 45 chr16 70050600 70052700 0.1102 93 chr16 70084500 70084800 0.3383 60 chr16 70091400 70091700 0.3483 66 chr16 70106100 70106400 0.2335 55 chr16 70109400 70109700 0.5399 47 chr16 70113600 70113900 0.4663 65 chr16 70119300 70119600 0.3488 81 chr16 70144200 70144500 0.2539 96 chr16 70145700 70147500 0.1116 108 chr16 70166700 70168500 0.13 114 chr16 70170900 70194300 0 158 chr16 70200600 70201200 0.0037 96 chr16 70202400 70202700 0.0037 96 chr16 70205400 70206000 0.1685 54 chr16 70210500 70210800 0.3068 77 chr16 70224300 70224600 0.4376 68 chr16 70243800 70244400 0.3614 64 chr16 70617600 70617900 0.6165 53 chr16 70811700 70812300 0.0825 51 chr16 70814100 70817100 0.0186 68 chr16 70818600 70820700 0.0186 68 chr16 70822800 70824000 0.0033 61 chr16 70825200 70833900 0.0016 73 chr16 70838700 70840200 0.1608 67 chr16 70842900 70850100 0.0338 78 chr16 70851900 70854900 0.0376 95 chr16 70856100 70858800 0.0376 95 chr16 70860300 70863000 0.0457 63 chr16 70864200 70864800 0.2287 41 chr16 70867500 70870500 0.0006 82 chr16 70871700 70881600 0.0006 82 chr16 70883100 70885500 0.0006 82 chr16 70889100 70889700 0.0154 63 chr16 70891500 70892100 0.0154 63 chr16 70894500 70895400 0 80 chr16 70896900 70897200 0 80 chr16 70899300 70901100 0 80 chr16 70903200 70904400 0 80 chr16 70907100 70907700 0.0068 71 chr16 70910400 70915800 0.0068 71 chr16 70917300 70920300 0.0068 71 chr16 70923000 70929900 0.0026 68 chr16 70935000 70936500 0.0007 76 chr16 70939800 70941300 0.1698 66 chr16 70946100 70950300 0.2421 81 chr16 70951800 70954500 0.0037 70 chr16 70957500 70959600 0.1487 75 chr16 70962600 70963800 0.0461 68 chr16 70966200 70966500 0.0524 65 chr16 70968000 70968600 0.0524 65 chr16 70969800 70970400 0.0648 74 chr16 70972200 70977600 0.0648 74 chr16 70980000 70980300 0.4783 62 chr16 70983000 70983600 0.0851 50 chr16 70986000 70988700 0 78 chr16 70993500 70998600 0.1278 78 chr16 71001000 71001600 0.1278 78 chr16 71005800 71006400 0.3242 67 chr16 71007900 71010300 0.0678 90 chr16 71013000 71019300 0.0786 72 chr16 71023500 71025900 0.0075 76 chr16 71027700 71028000 0.1939 57 chr16 71029200 71029800 0.1939 57 chr16 71032500 71033100 0.1181 73 chr16 71034900 71036700 0.0631 69 chr16 71040300 71041200 0.0059 64 chr16 71044200 71046300 0.0059 64 chr16 71049600 71051100 0.3221 57 chr16 71052600 71052900 0.5706 47 chr16 71054700 71055600 0.3648 61 chr16 71056800 71058600 0.0426 76 chr16 71060400 71061900 0.3227 66 chr16 71064000 71064300 0.442 34 chr16 71070600 71072400 0.2527 71 chr16 71074800 71075100 0.0403 66 chr16 71076300 71080500 0.0403 66 chr16 71083500 71085600 0 76 chr16 71086800 71093700 0 76 chr16 71094900 71096100 0.0056 74 chr16 71098800 71099700 0.0056 74 chr16 71100900 71101500 0.0056 74 chr16 71103000 71107200 0.0079 69 chr16 71108700 71113500 0.0408 69 chr16 71114700 71115000 0.0408 69 chr16 71117100 71125200 0.0763 76 chr16 71127300 71127600 0.0188 81 chr16 71128800 71129400 0.0188 81 chr16 71130900 71132700 0.0188 81 chr16 71135400 71138700 0.3453 63 chr16 71139900 71140800 0 75 chr16 71142300 71144400 0 75 chr16 71146500 71150100 0 75 chr16 71154000 71156100 0.0723 63 chr16 71157600 71161200 0 70 chr16 71164200 71168700 0 70 chr16 71589600 71590200 0.1493 79 chr16 71602800 71604300 0 75 chr16 72056400 72058800 0.0061 72 chr16 72060900 72061500 0.3913 77 chr16 72077100 72077400 0.1899 48 chr16 72342600 72343200 0.1431 83 chr16 72344400 72345000 0.1431 83 chr16 72497100 72497400 0.3713 63 chr16 72525600 72525900 0.486 71 chr16 72570600 72571200 0.2805 73 chr16 72584100 72585900 0.015 98 chr16 72627900 72633000 0.028 80 chr16 73147500 73147800 0.3703 39 chr16 73824600 73830300 0 80 chr16 74333700 74337000 0.0882 88 chr16 74361600 74361900 0.4862 119 chr16 74376000 74377200 0.2978 96 chr16 74381700 74388000 0.0194 116 chr16 74389500 74391000 0.0194 116 chr16 74392500 74394000 0.4006 119 chr16 74399400 74399700 0.3076 62 chr16 74402700 74403300 0 166 chr16 74404500 74406600 0 166 chr16 74407800 74410200 0 166 chr16 74411700 74412300 0.4099 176 chr16 74414400 74423400 0.0416 132 chr16 74427600 74428800 0.196 91 chr16 74444400 74444700 0.5621 63 chr16 74526300 74526600 0.3232 56 chr16 74538000 74538300 0.6081 56 chr16 74799300 74800200 0.0101 91 chr16 75204600 75206100 0.0006 71 chr16 75222900 75224100 0.0292 67 chr16 75504900 75505200 0.0606 81 chr16 75545400 75546000 0.1318 64 chr16 75822000 75825000 0.0041 80 chr16 75826800 75827400 0.2205 88 chr16 75874500 75876000 0.3755 59 chr16 75881700 75882000 0.5732 50 chr16 76610700 76611300 0.051 77 chr16 76757400 76758300 0.0543 89 chr16 76952700 76953000 0.5937 65 chr16 78651900 78652500 0.059 903 chr16 79695900 79696500 0.0539 77 chr16 80086800 80087100 0.4921 84 chr16 80089200 80089800 0.0509 81 chr16 81082200 81082800 0.0282 73 chr16 81085800 81086400 0.1958 174 chr16 81191100 81191400 0.5621 28 chr16 81978600 81982200 0.3655 90 chr16 82139700 82145100 0.0116 102 chr16 82275600 82276200 0.1766 97 chr16 83637300 83643300 0 75 chr16 83658000 83658600 0.6882 80 chr16 83950200 83950800 0.6205 59 chr16 84455700 84458400 0 66 chr16 85404900 85406700 0.0517 93 chr16 85408800 85412700 0.0371 72 chr16 85451400 85451700 0.2875 42 chr16 85519200 85519500 0.4334 98 chr16 85807800 85808100 0.5498 16 chr16 85972500 85974000 0 220 chr16 86063400 86063700 0.587 15 chr16 86234700 86239200 0.1727 70 chr16 86262600 86262900 0.1679 84 chr16 86265000 86266800 0.1679 84 chr16 86278800 86279100 0.5449 60 chr16 86419200 86419800 0.3725 168 chr16 86464200 86464500 0.5286 119 chr16 86678400 86679000 0.3243 62 chr16 86686500 86686800 0.511 43 chr16 86836200 86836500 0.5136 59 chr16 86845800 86846100 0.5144 50 chr16 86852100 86852400 0.6955 75 chr16 87162600 87163200 0.2199 48 chr16 87218100 87218400 0.5748 24 chr16 87222000 87222600 0.4895 170 chr16 87726300 87726600 0.0758 17 chr16 87738600 87739200 0.4161 109 chr16 87999300 88001100 0.0985 42 chr16 88174500 88174800 0.5466 24 chr16 88176000 88176600 0.4268 70 chr16 88191000 88191300 0.298 189 chr16 88192800 88193400 0.298 189 chr16 88217700 88219800 0.1439 90 chr16 88237200 88237500 0.5216 41 chr16 88239900 88240200 0.4001 60 chr16 88253400 88253700 0.3727 75 chr16 88277700 88278600 0.2151 81 chr16 88295100 88295400 0.3122 23 chr16 88371900 88372200 0.6799 143 chr16 88470600 88470900 0.5378 40 chr16 88547100 88547400 0.1313 12 chr16 88713000 88713300 0.6951 19 chr16 88728600 88729500 0.1513 75 chr16 88771800 88772100 0.3603 37 chr16 88823400 88823700 0.5603 58 chr16 88831200 88831800 0.2077 35 chr16 88894200 88894500 0.1518 97 chr16 88933200 88933800 0.4167 50 chr16 88950600 88950900 0.2773 52 chr16 88954800 88955700 0.3941 59 chr16 88961700 88962000 0.6817 56 chr16 89008200 89009400 0.6119 142 chr16 89028900 89029500 0.3498 30 chr16 89042400 89042700 0.5608 69 chr16 89068800 89069400 0.4576 203 chr16 89077500 89078100 0.5469 49 chr16 89083500 89084400 0.1601 29 chr16 89166000 89166300 0.4319 43 chr16 89212800 89213100 0.4946 49 chr16 89233200 89233500 0.6092 45 chr16 89268000 89268600 0.2172 54 chr16 89400000 89400600 0.0438 44 chr16 89412000 89412300 0.4048 46 chr16 89421300 89421600 0.4738 37 chr16 89429400 89429700 0.5634 37 chr16 89454600 89454900 0.5657 64 chr16 89535900 89536200 0.4146 83 chr16 89587800 89588100 0.4558 32 chr16 89598600 89598900 0.198 36 chr16 89634600 89635200 0.3597 59 chr16 89647500 89648400 0.0279 42 chr16 89852700 89853000 0.5057 35 chr16 89879400 89880000 0.3179 48 chr16 89901600 89902500 0.0381 44 chr16 90003600 90004500 0.0977 51 chr16 90008100 90008700 0.457 67 chr16 90052500 90053100 0.518 55 chr16 90098400 90098700 0.3123 64 chr16 90100800 90101400 0.0448 93 chr16 90107100 90162000 0 434 chr16 90163200 90166800 0 434 chr16 90168000 90168300 0.3457 61 chr16 90169500 90214800 0 126 chr16 90216000 90228000 0 126 chr17 60000 63300 0 34 chr17 65700 89700 0 1057 chr17 90900 130500 0 1057 chr17 131700 141000 0 112 chr17 166800 168600 0 28 chr17 192000 192300 0.1814 12 chr17 201300 201900 0.1127 270 chr17 216000 218400 0.392 220 chr17 220500 221700 0.1 162 chr17 234000 234300 0.4544 43 chr17 242100 242700 0.412 65 chr17 253800 257700 0.0473 165 chr17 273000 273600 0.5171 84 chr17 287400 287700 0.3276 15 chr17 295500 296400 0.3881 67 chr17 300000 300600 0.5053 38 chr17 303600 304200 0.0886 84 chr17 340500 341100 0.44 26 chr17 355800 356400 0.2301 79 chr17 363600 363900 0.2632 13 chr17 370200 370500 0.4869 50 chr17 402900 404400 0 86 chr17 504600 507000 0.3062 56 chr17 510000 510300 0.2472 44 chr17 513900 514200 0.4833 52 chr17 572700 573000 0.4044 69 chr17 590700 591000 0.3946 50 chr17 594900 595800 0.4843 73 chr17 599400 599700 0.2768 77 chr17 612300 612600 0.5402 62 chr17 617700 618300 0.1027 50 chr17 619500 619800 0.66 54 chr17 646500 646800 0.4382 198 chr17 648900 649500 0.26 123 chr17 658200 658500 0.3875 85 chr17 727500 728100 0.2188 89 chr17 768600 768900 0.6133 89 chr17 810000 810300 0.4619 86 chr17 835800 836100 0.5276 42 chr17 860400 860700 0.389 49 chr17 867000 867300 0.3788 38 chr17 893700 894600 0.2535 46 chr17 940800 942900 0.3922 223 chr17 952200 952800 0.1667 81 chr17 1006800 1007100 0.1411 21 chr17 1035300 1035600 0.6779 19 chr17 1052400 1053300 0.3175 25 chr17 1062300 1065300 0.4066 238 chr17 1072200 1072500 0.5255 78 chr17 1117200 1119600 0.087 77 chr17 1131300 1131900 0.4656 17 chr17 1143000 1143300 0.5044 36 chr17 1163400 1164000 0.5295 100 chr17 1250100 1250400 0.6176 38 chr17 1308000 1311600 0 137 chr17 1738800 1741200 0.2906 134 chr17 2052600 2052900 0.0024 29 chr17 2255100 2255400 0.5239 68 chr17 2354700 2356500 0.225 111 chr17 2447400 2448900 0.0066 74 chr17 3000600 3000900 0.599 12 chr17 3051300 3056700 0 83 chr17 3058500 3060300 0 72 chr17 3062100 3069900 0 72 chr17 3071100 3071400 0.4567 70 chr17 3072900 3073800 0.003 70 chr17 3079500 3080100 0.2641 61 chr17 3147600 3149100 0.0706 70 chr17 3150300 3150900 0.0706 70 chr17 3177600 3177900 0.0593 85 chr17 3179100 3182100 0.0593 85 chr17 3223800 3224400 0.43 58 chr17 3230700 3231600 0.0241 64 chr17 3232800 3234000 0 65 chr17 3235500 3240600 0 65 chr17 3241800 3246000 0 65 chr17 3247500 3250200 0 101 chr17 3252300 3252900 0.0076 63 chr17 3274500 3275100 0.2808 80 chr17 3278400 3279000 0.4848 57 chr17 3320100 3320400 0.2351 81 chr17 3326700 3330000 0.1003 98 chr17 3350700 3351900 0.0243 61 chr17 3420600 3420900 0.2491 61 chr17 3455400 3456000 0.4219 72 chr17 3464700 3465000 0.5807 52 chr17 3687000 3687900 0.0149 18 chr17 4089600 4090200 0.0791 76 chr17 4271400 4271700 0.4846 56 chr17 4462200 4462800 0.1108 107 chr17 4638000 4638300 0.5459 90 chr17 4639800 4640100 0.3856 57 chr17 4794600 4794900 0.545 44 chr17 4830600 4830900 0.5694 14 chr17 4832700 4833000 0.3778 71 chr17 4852800 4853100 0.6083 19 chr17 4873200 4873500 0.5045 51 chr17 5240100 5241000 0.5375 70 chr17 5561400 5561700 0.4189 15 chr17 5851500 5851800 0.3907 69 chr17 6030300 6030600 0.2723 35 chr17 6193800 6194400 0.527 106 chr17 6226500 6226800 0.4887 48 chr17 6655800 6657000 0.6246 97 chr17 6658800 6659100 0.195 45 chr17 6866700 6867000 0.4467 56 chr17 7597800 7598100 0.402 53 chr17 7749300 7749600 0.4472 90 chr17 7942800 7943100 0.4647 43 chr17 8107800 8108100 0.6569 25 chr17 8549700 8550000 0.4787 73 chr17 9616200 9621900 0 89 chr17 9993600 9993900 0.4367 78 chr17 10326900 10327200 0.4793 30 chr17 10553700 10554300 0.4546 73 chr17 10759200 10759500 0.4687 41 chr17 11478000 11478900 0.1305 88 chr17 11654100 11654400 0.2706 52 chr17 11694600 11694900 0.5842 16 chr17 11845500 11847000 0.1174 67 chr17 12443100 12444000 0.1107 21 chr17 12450000 12455400 0.0097 115 chr17 12651900 12652200 0.0466 21 chr17 12654900 12655800 0.1786 57 chr17 13317300 13317600 0.5921 36 chr17 13468200 13468500 0.2673 26 chr17 13496100 13496700 0.3377 55 chr17 13782600 13783200 0.1405 26 chr17 13797000 13797300 0.3342 15 chr17 14021100 14023800 0 69 chr17 14025300 14028900 0.2693 85 chr17 14177400 14178300 0.0564 68 chr17 14183100 14183400 0.4966 56 chr17 14185200 14185500 0.5307 40 chr17 14232600 14233200 0.1659 78 chr17 14234400 14235900 0.1659 78 chr17 14237400 14240400 0.0018 61 chr17 14345100 14345400 0.3275 51 chr17 15535200 15535500 0.5173 72 chr17 15537000 15537300 0.1935 44 chr17 15540000 15540600 0.5892 65 chr17 15557700 15558600 0.1975 41 chr17 15574200 15575100 0.2172 73 chr17 15576900 15577200 0.4571 57 chr17 15579900 15580800 0.2994 57 chr17 15583200 15583500 0.2994 57 chr17 15599100 15600600 0.2234 66 chr17 15609000 15609300 0.1925 55 chr17 15613500 15613800 0.5284 45 chr17 15623100 15623400 0.3764 59 chr17 15630600 15630900 0.4432 42 chr17 15635400 15636000 0.2469 81 chr17 15637200 15639000 0.2587 116 chr17 15642600 15643200 0.3576 65 chr17 15646200 15646500 0.5114 62 chr17 15672300 15672600 0.4029 55 chr17 15690900 15691200 0.5603 49 chr17 15699900 15701100 0.2929 60 chr17 15718200 15719100 0.2015 57 chr17 15730200 15730500 0.175 57 chr17 15732300 15733200 0.3375 71 chr17 15735300 15735900 0.3375 71 chr17 15738900 15739200 0.6027 71 chr17 15763800 15764100 0.5459 43 chr17 15768900 15769200 0.5898 73 chr17 15792300 15794400 0.1253 69 chr17 15800400 15801000 0.4684 48 chr17 15807900 15808200 0.4276 68 chr17 15816600 15816900 0.4464 66 chr17 15851100 15851400 0.3319 73 chr17 15867900 15868200 0.2005 51 chr17 15870000 15870300 0.2005 51 chr17 15880200 15880500 0.223 44 chr17 15960300 15960600 0.1668 24 chr17 16667700 16668000 0.4139 44 chr17 16693800 16694100 0.5076 56 chr17 16701300 16701600 0.4742 62 chr17 16705200 16706700 0.2981 68 chr17 16718700 16719000 0.5193 48 chr17 16721400 16721700 0.279 55 chr17 16725600 16727700 0.1659 85 chr17 16730100 16733400 0.0253 65 chr17 16735200 16736100 0.1289 64 chr17 16738200 16739400 0.1289 64 chr17 16752600 16753200 0.0771 70 chr17 16760400 16760700 0.3184 51 chr17 16763400 16763700 0.6531 80 chr17 16764900 16765800 0.0449 86 chr17 16772400 16772700 0.2528 121 chr17 16773900 16774800 0.2528 121 chr17 16776900 16777800 0.1067 90 chr17 16779000 16779600 0.0851 71 chr17 16781700 16782900 0.4798 74 chr17 16785900 16787700 0.2365 119 chr17 16789200 16789500 0.2754 116 chr17 16797900 16798200 0.5897 86 chr17 16800600 16801200 0.0492 72 chr17 16809300 16809900 0.1926 79 chr17 16811100 16811400 0.4466 58 chr17 16828500 16830300 0.0014 91 chr17 16832700 16834800 0.2485 97 chr17 16836000 16836300 0.4342 40 chr17 16838700 16841400 0.2284 107 chr17 16845600 16846200 0 47 chr17 16847700 16849800 0.0217 86 chr17 16862100 16862400 0.3861 49 chr17 16863900 16866000 0.0524 73 chr17 17010300 17010600 0.1507 80 chr17 17011800 17012100 0.1507 80 chr17 17442000 17442600 0.1381 83 chr17 17611200 17611500 0.5903 35 chr17 17911800 17912100 0.1889 80 chr17 18389100 18389700 0.3427 42 chr17 18391200 18398400 0 97 chr17 18399600 18400200 0 97 chr17 18401400 18401700 0 97 chr17 18402900 18407400 0 57 chr17 18411900 18413100 0 61 chr17 18416400 18418500 0 54 chr17 18420300 18420900 0.1002 100 chr17 18423000 18424200 0.1002 100 chr17 18425400 18429000 0 91 chr17 18430200 18453600 0 91 chr17 18456300 18462300 0 35 chr17 18469500 18472800 0 28 chr17 18474000 18474300 0 28 chr17 18477600 18483900 0 39 chr17 18485400 18495000 0 56 chr17 18497700 18504600 0 37 chr17 18505800 18506700 0 63 chr17 18513600 18516300 0 65 chr17 18517500 18517800 0 65 chr17 18520500 18521100 0 44 chr17 18522300 18522900 0 44 chr17 18526200 18527100 0 54 chr17 18528300 18528600 0 54 chr17 18533400 18534900 0 47 chr17 18536100 18536700 0 47 chr17 18538200 18538800 0 38 chr17 18540900 18541800 0 43 chr17 18544500 18545100 0.0475 28 chr17 18546600 18546900 0.6671 32 chr17 18550200 18550800 0 66 chr17 18552600 18552900 0 66 chr17 18554100 18555300 0 43 chr17 18562500 18563100 0.0031 101 chr17 18571800 18572100 0.5519 59 chr17 18576300 18577500 0.0455 78 chr17 18579300 18580200 0.0455 78 chr17 18582000 18585300 0.0455 78 chr17 18587700 18589800 0.1664 83 chr17 18593700 18594000 0.3357 64 chr17 18597000 18597300 0.3357 64 chr17 18600900 18601500 0 65 chr17 18603600 18606900 0 65 chr17 18614700 18615000 0.0758 100 chr17 18617400 18617700 0.0758 100 chr17 18619500 18621900 0.0758 100 chr17 18623100 18623700 0.1554 55 chr17 18640800 18641400 0.3435 75 chr17 18644100 18644400 0.3435 75 chr17 18646200 18646500 0.2512 60 chr17 18660600 18660900 0.4871 69 chr17 18665400 18665700 0.4726 47 chr17 18669000 18669300 0.1946 68 chr17 18670800 18671400 0.4933 76 chr17 18681600 18681900 0.3804 70 chr17 18689700 18690300 0.3294 36 chr17 18709800 18710100 0.3882 53 chr17 18718500 18718800 0.4352 70 chr17 18721800 18722400 0.1927 66 chr17 18726000 18726300 0.4822 42 chr17 18727800 18728400 0.2165 75 chr17 18732900 18733200 0.4934 63 chr17 18740400 18740700 0.436 53 chr17 18750000 18750300 0.5815 55 chr17 18754200 18754800 0.4889 72 chr17 18762900 18764100 0.1877 81 chr17 18804300 18804600 0.3823 53 chr17 18806400 18806700 0.2667 51 chr17 18825000 18827100 0.007 72 chr17 18830100 18830400 0.007 72 chr17 18831600 18832200 0.007 72 chr17 18833700 18834000 0.007 72 chr17 18835800 18837300 0 77 chr17 18839100 18843600 0 77 chr17 18888000 18888600 0.0037 64 chr17 19025700 19237200 0 116 chr17 19627200 19629000 0.0305 67 chr17 19640100 19640400 0.5242 11 chr17 20323200 20323800 0.0892 63 chr17 20331900 20333100 0.0882 61 chr17 20334300 20334600 0.0882 61 chr17 20337000 20337600 0.3162 52 chr17 20340000 20340300 0.2627 44 chr17 20348700 20349000 0.3778 50 chr17 20351400 20351700 0.6045 36 chr17 20356200 20356500 0.0365 54 chr17 20360700 20362500 0.0909 66 chr17 20367300 20368800 0.2484 65 chr17 20370600 20370900 0.2484 65 chr17 20382600 20383800 0.429 71 chr17 20390400 20391600 0.0911 51 chr17 20393400 20395800 0.2129 81 chr17 20400900 20401800 0.2906 81 chr17 20403600 20403900 0.2906 81 chr17 20405400 20406300 0.1207 79 chr17 20407500 20409000 0.1207 79 chr17 20411100 20411400 0.6503 93 chr17 20412600 20412900 0.1379 77 chr17 20414400 20418000 0.1379 77 chr17 20423400 20423700 0.2241 70 chr17 20429100 20429400 0.0529 62 chr17 20437800 20438400 0.0503 68 chr17 20442000 20446800 0 61 chr17 20451300 20463900 0 53 chr17 20465100 20465700 0 53 chr17 20469900 20470200 0.4863 40 chr17 20472600 20473200 0.2213 58 chr17 20479800 20480100 0.511 42 chr17 20483100 20484300 0.1466 40 chr17 20486400 20487900 0.2796 49 chr17 20490600 20491200 0.4052 78 chr17 20492400 20493900 0.4052 78 chr17 20498400 20499300 0.1596 36 chr17 20500800 20501700 0.0351 58 chr17 20503200 20514300 0 96 chr17 20516100 20518500 0 96 chr17 20519700 20521500 0 96 chr17 20523300 20524200 0 96 chr17 20526600 20528100 0.4418 52 chr17 20531400 20533200 0.1001 58 chr17 20535600 20538600 0 60 chr17 20540100 20540700 0.3288 81 chr17 20543700 20553000 0 109 chr17 20574600 20574900 0.5519 68 chr17 20595000 20597100 0.1309 66 chr17 20603100 20603400 0.27 60 chr17 20610600 20610900 0.4669 64 chr17 20632200 20632500 0.211 63 chr17 20668800 20669100 0.3353 63 chr17 20687700 20688000 0.2785 68 chr17 20697900 20698200 0.4718 61 chr17 20892600 20892900 0.5988 56 chr17 20984100 20986200 0.0122 55 chr17 21315900 21317100 0.3127 71 chr17 21326700 21327000 0.5402 95 chr17 21333300 21334500 0.1944 92 chr17 21342600 21344400 0.0109 135 chr17 21345900 21346800 0.0109 135 chr17 21348000 21349500 0.0109 135 chr17 21412800 21413700 0.0025 112 chr17 21438300 21439500 0.0282 110 chr17 21622800 21623400 0.2099 57 chr17 21625800 21626700 0.1389 58 chr17 21648300 21648600 0.6032 188 chr17 21651900 21652200 0.4189 104 chr17 21653400 21656100 0.2407 223 chr17 21659400 21659700 0.2716 70 chr17 21681900 21684600 0.4469 158 chr17 21698100 21698400 0.5206 77 chr17 21700200 21701100 0.0117 82 chr17 21706200 21706500 0.5526 91 chr17 21712500 21712800 0.3517 71 chr17 21724200 21725400 0.3749 108 chr17 21737400 21740100 0.0373 126 chr17 21741300 21745500 0.0042 124 chr17 21753600 21753900 0.2378 96 chr17 21758700 21759300 0.1998 55 chr17 21760800 21762300 0.3418 112 chr17 21771000 21771300 0.3144 75 chr17 21782400 21782700 0.236 64 chr17 21792000 21792300 0.4912 55 chr17 21837900 21838200 0.6595 161 chr17 21843900 21844200 0.6951 42 chr17 21851100 21862500 0.3074 359 chr17 21863700 21992100 0 23536 chr17 22041900 22042200 0.075 19 chr17 22044000 22044600 0.127 202 chr17 22045800 22048500 0.127 202 chr17 22054500 22054800 0.4743 125 chr17 22070700 22071000 0.3007 43 chr17 22076700 22077600 0.2577 73 chr17 22080000 22080300 0.0679 50 chr17 22375500 22408500 0 471 chr17 22521300 22521600 0.4746 437 chr17 22554600 22554900 0.5109 77 chr17 22721100 22721400 0.6035 63 chr17 22745400 22762200 0 205 chr17 22814100 22821600 0 2064 chr17 22822800 23027700 0 2064 chr17 23028900 23031000 0 81 chr17 23032200 23093700 0 783 chr17 23094900 23175600 0 783 chr17 23177100 23192700 0 661 chr17 23194200 23219700 0 661 chr17 23221200 23221800 0.0017 766 chr17 23223300 23231100 0 35 chr17 23235300 23235600 0 10 chr17 23238900 23242500 0 121 chr17 23243700 23247900 0 70 chr17 23249700 23251500 0 19 chr17 23255700 23258100 0 2583 chr17 23260200 23263800 0 77 chr17 23267100 23268600 0 152 chr17 23271000 23271600 0 33 chr17 23273400 23277600 0 84 chr17 23281200 23286600 0 116 chr17 23288700 23298000 0 1530 chr17 23300100 23300400 0 14 chr17 23304900 23306700 0 20 chr17 23309400 23310000 0 34 chr17 23315100 23322300 0 67 chr17 23323800 23325000 0 11 chr17 23328900 23329200 0 10 chr17 23332500 23335500 0 45 chr17 23339400 23341500 0 28 chr17 23343600 23344200 0 15 chr17 23346600 23347200 0.1001 31 chr17 23349600 23349900 0 26 chr17 23352000 23352300 0 11 chr17 23353500 23365800 0 173 chr17 23369700 23370000 0 14 chr17 23371800 23372700 0 44 chr17 23376900 23377200 0 12 chr17 23379000 23380800 0.0103 55 chr17 23383500 23383800 0.1492 15 chr17 23385600 23388600 0 64 chr17 23389800 23391300 0 70 chr17 23394000 23398200 0 42 chr17 23399400 23400300 0 69 chr17 23403900 23405700 0 17 chr17 23407500 23419200 0 283 chr17 23421600 23424000 0 43 chr17 23428800 23429400 0 38 chr17 23430900 23433300 0 161 chr17 23436300 23443200 0 225 chr17 23445900 23447100 0 57 chr17 23448900 23449800 0 54 chr17 23452800 23455800 0 15 chr17 23457600 23458500 0 17 chr17 23460600 23461500 0 92 chr17 23462700 23468400 0 248 chr17 23470200 23473800 0 63 chr17 23475600 23476200 0 18 chr17 23477400 23477700 0 18 chr17 23479500 23483700 0 68 chr17 23485800 23487900 0 69 chr17 23489400 23490000 0 14 chr17 23492100 23496300 0 150 chr17 23497500 23497800 0 11 chr17 23500200 23502900 0 79 chr17 23506200 23506500 0 11 chr17 23508900 23509500 0 13 chr17 23511000 23511300 0 13 chr17 23513700 23514000 0 12 chr17 23515500 23515800 0 15 chr17 23520000 23520900 0 15 chr17 23523300 23525700 0 48 chr17 23526900 23527200 0 30 chr17 23529900 23530200 0.223 25 chr17 23531400 23532600 0 19 chr17 23534400 23537400 0 30 chr17 23538600 23538900 0 10 chr17 23540100 23545200 0 1314 chr17 23546700 23548800 0 23 chr17 23554200 23555100 0 32 chr17 23559000 23561400 0 44 chr17 23563800 23565300 0 45 chr17 23566500 23567700 0 45 chr17 23569800 23570700 0 166 chr17 23572200 23577000 0 62 chr17 23579700 23581200 0 18 chr17 23583000 23583900 0 452 chr17 23586000 23586900 0 15 chr17 23590200 23593200 0 48 chr17 23594400 23598600 0 76 chr17 23600700 23601000 0.1131 17 chr17 23603700 23605500 0 94 chr17 23606700 23615700 0 94 chr17 23617200 23617500 0 12 chr17 23620800 23626800 0 170 chr17 23628900 23630700 0 12 chr17 23632200 23638800 0 214 chr17 23640000 23641800 0 56 chr17 23644200 23644800 0 34 chr17 23646900 23650800 0 78 chr17 23656500 23657100 0 37 chr17 23663100 23664000 0 12 chr17 23666100 23667300 0 17 chr17 23668800 23673000 0 80 chr17 23676000 23677800 0 48 chr17 23680500 23680800 0 15 chr17 23682600 23682900 0 11 chr17 23686800 23688000 0 74 chr17 23691300 23694000 0 17 chr17 23698800 23700000 0 12 chr17 23701200 23701800 0 12 chr17 23703300 23703600 0 12 chr17 23708100 23708400 0 11 chr17 23711400 23711700 0 13 chr17 23714700 23715000 0 13 chr17 23716800 23717100 0 11 chr17 23719800 23722200 0 58 chr17 23727600 23728800 0 26 chr17 23731200 23734500 0 93 chr17 23736000 23736300 0 30 chr17 23740200 23753100 0 69 chr17 23755800 23759100 0 53 chr17 23760900 23761200 0 13 chr17 23762700 23770500 0 55 chr17 23773800 23778000 0 37 chr17 23779500 23781000 0 37 chr17 23783400 23784900 0 12 chr17 23786400 23786700 0 10 chr17 23791800 23793600 0 38 chr17 23795100 23796600 0 39 chr17 23800500 23802000 0 30 chr17 23803800 23805600 0 713 chr17 23810400 23811600 0 18 chr17 23817900 23824800 0 60 chr17 23826300 23831700 0 52 chr17 23832900 23833200 0 12 chr17 23842200 23842500 0 13 chr17 23844000 23845500 0 30 chr17 23849700 23853600 0 68 chr17 23857200 23861100 0 305 chr17 23863500 23873700 0 93 chr17 23875200 23881800 0 149 chr17 23884800 23886600 0 39 chr17 23887800 23888700 0 39 chr17 23892600 23894100 0 46 chr17 23896800 23900100 0 72 chr17 23901600 23903100 0 81 chr17 23904900 23910900 0 49 chr17 23912100 23916600 0 82 chr17 23917800 23918100 0 12 chr17 23919900 23921400 0 60 chr17 23922600 23922900 0.07 23 chr17 23925000 23925300 0 10 chr17 23928900 23931600 0 62 chr17 23933700 23936700 0 31 chr17 23941200 23943300 0 40 chr17 23944500 23946600 0 34 chr17 23949900 23954700 0 71 chr17 23956200 23964600 0 89 chr17 23969100 23977200 0 70 chr17 23979000 23980800 0 192 chr17 23982000 23983200 0 192 chr17 23984400 23988300 0 192 chr17 23993700 23996100 0 106 chr17 23997300 23997600 0 14 chr17 23999100 24004200 0 80 chr17 24007200 24007500 0 13 chr17 24009300 24009600 0 14 chr17 24011100 24013500 0 66 chr17 24016200 24019500 0 75 chr17 24021300 24021600 0.2557 64 chr17 24024000 24025800 0 54 chr17 24027300 24027600 0 11 chr17 24029100 24033300 0 30 chr17 24034800 24036900 0 34 chr17 24038700 24043500 0 107 chr17 24044700 24046800 0 23 chr17 24048000 24048900 0 53 chr17 24050100 24051300 0 50 chr17 24057300 24057900 0 13 chr17 24061800 24062700 0 203 chr17 24064200 24066000 0 42 chr17 24067200 24069900 0 81 chr17 24071700 24073500 0 68 chr17 24076800 24081600 0 88 chr17 24082800 24083400 0 130 chr17 24084900 24094500 0 59 chr17 24096900 24098700 0 43 chr17 24101400 24102000 0 16 chr17 24106500 24107400 0 45 chr17 24108900 24111000 0 85 chr17 24112500 24117900 0 50 chr17 24119400 24123900 0 42 chr17 24125700 24127800 0 56 chr17 24132300 24133200 0 46 chr17 24135000 24137400 0 29 chr17 24139200 24141600 0 130 chr17 24144300 24147300 0 60 chr17 24150600 24153900 0 573 chr17 24156600 24156900 0.5985 14 chr17 24158100 24158400 0.0558 12 chr17 24163800 24166500 0 40 chr17 24168300 24170700 0 79 chr17 24175200 24176400 0 49 chr17 24180000 24188400 0 1036 chr17 24191400 24199200 0 52 chr17 24200400 24219900 0 81 chr17 24223500 24230400 0 154 chr17 24232500 24232800 0 11 chr17 24235200 24235500 0 20 chr17 24237600 24243600 0 69 chr17 24245400 24246300 0 35 chr17 24248100 24249300 0.0009 19 chr17 24250500 24258900 0 116 chr17 24261300 24262500 0 35 chr17 24263700 24264000 0.0396 20 chr17 24265800 24268800 0 35 chr17 24270600 24270900 0 11 chr17 24275700 24277200 0 67 chr17 24278700 24286500 0 67 chr17 24288600 24288900 0 12 chr17 24291300 24293100 0 41 chr17 24296100 24297000 0 42 chr17 24298200 24298500 0 12 chr17 24299700 24303000 0 68 chr17 24304500 24305400 0 41 chr17 24306900 24311400 0 43 chr17 24312900 24313200 0 27 chr17 24316200 24318000 0 65 chr17 24319200 24319500 0 12 chr17 24324300 24324600 0 11 chr17 24327300 24328500 0 50 chr17 24330300 24332100 0 49 chr17 24333600 24333900 0 10 chr17 24335100 24340200 0 27 chr17 24344700 24351300 0 59 chr17 24354000 24355200 0 569 chr17 24359100 24359700 0 26 chr17 24363000 24363900 0 27 chr17 24366900 24367500 0 41 chr17 24371400 24375300 0 66 chr17 24380100 24382500 0 44 chr17 24384900 24386700 0 54 chr17 24388500 24390300 0 41 chr17 24391500 24391800 0 12 chr17 24395400 24395700 0 12 chr17 24397500 24399900 0 1126 chr17 24402600 24403200 0 13 chr17 24408300 24410700 0 22 chr17 24415500 24421800 0 4203 chr17 24423300 24425700 0 86 chr17 24427200 24427500 0 12 chr17 24429300 24429600 0 10 chr17 24437700 24439800 0 36 chr17 24441000 24442500 0 30 chr17 24445200 24445800 0.0936 37 chr17 24447300 24449700 0 16 chr17 24453000 24455700 0 82 chr17 24456900 24457200 0 19 chr17 24459000 24464100 0 67 chr17 24467100 24467700 0 28 chr17 24469200 24469500 0 11 chr17 24471300 24478200 0 68 chr17 24481500 24486000 0 32 chr17 24487200 24489300 0 55 chr17 24492000 24493500 0 142 chr17 24495600 24501600 0 223 chr17 24504300 24505800 0 18 chr17 24507300 24511200 0 71 chr17 24514200 24519000 0 204 chr17 24520200 24520500 0 14 chr17 24525600 24527100 0 27 chr17 24528300 24528900 0 35 chr17 24530700 24539700 0 876 chr17 24541500 24542100 0 11 chr17 24543900 24552000 0 66 chr17 24553200 24558300 0 48 chr17 24559500 24560100 0 11 chr17 24564900 24566400 0 73 chr17 24569700 24570600 0 28 chr17 24571800 24574500 0 127 chr17 24576600 24577500 0 55 chr17 24581400 24582300 0 57 chr17 24584100 24591900 0 116 chr17 24594600 24599100 0 145 chr17 24600900 24601200 0 10 chr17 24606300 24608100 0 26 chr17 24612900 24614700 0 44 chr17 24615900 24617700 0 76 chr17 24623400 24624900 0 1118 chr17 24627900 24628200 0 11 chr17 24630000 24636300 0 75 chr17 24638100 24642300 0 53 chr17 24643500 24645300 0 50 chr17 24648000 24648300 0 11 chr17 24649800 24650100 0 10 chr17 24651300 24652200 0 34 chr17 24654300 24656700 0 20 chr17 24657900 24658200 0.6411 13 chr17 24660600 24662100 0 24 chr17 24663600 24665100 0 38 chr17 24668400 24670200 0 53 chr17 24672300 24676200 0 159 chr17 24677700 24678000 0 14 chr17 24681000 24683400 0 54 chr17 24685500 24685800 0 12 chr17 24688500 24697800 0 67 chr17 24699600 24700200 0 13 chr17 24702300 24703500 0 156 chr17 24707700 24714600 0 66 chr17 24716100 24716700 0 13 chr17 24718200 24719100 0 567 chr17 24722400 24723900 0 18 chr17 24729300 24729600 0 12 chr17 24734400 24736800 0 149 chr17 24740100 24742500 0 1219 chr17 24744300 24744600 0 11 chr17 24745800 24748800 0 1244 chr17 24750600 24754200 0 334 chr17 24758400 24759300 0 30 chr17 24760500 24762600 0 12 chr17 24765300 24766500 0 39 chr17 24770100 24780000 0 2349 chr17 24781500 24784200 0 74 chr17 24786000 24786300 0 10 chr17 24790500 24791100 0.2394 24 chr17 24792900 24793500 0 30 chr17 24795300 24797400 0 38 chr17 24800100 24802200 0 39 chr17 24809700 24810300 0 16 chr17 24812100 24816900 0 71 chr17 24819900 24824700 0 88 chr17 24828300 24828600 0 10 chr17 24830700 24831000 0 14 chr17 24833100 24837300 0 34 chr17 24839100 24839400 0 12 chr17 24841500 24843300 0 44 chr17 24845700 24846000 0 20 chr17 24847200 24851400 0 67 chr17 24852900 24853500 0 14 chr17 24855900 24856500 0.0019 21 chr17 24857700 24858000 0.0703 12 chr17 24859500 24861300 0 80 chr17 24863400 24865500 0 14 chr17 24866700 24869700 0 151 chr17 24872400 24872700 0 11 chr17 24873900 24879600 0 63 chr17 24882000 24883500 0 22 chr17 24885300 24885600 0 11 chr17 24888000 24893700 0 2416 chr17 24895800 24896100 0 12 chr17 24902100 24903300 0 14 chr17 24908100 24908700 0 34 chr17 24910500 24910800 0 12 chr17 24913500 24913800 0 36 chr17 24916200 24918000 0 44 chr17 24921300 24924000 0 32 chr17 24928200 24929700 0 22 chr17 24931200 24931500 0 13 chr17 24933000 24936600 0 61 chr17 24940500 24941100 0 93 chr17 24942600 24946800 0 69 chr17 24954900 24956100 0 37 chr17 24958200 24961200 0 47 chr17 24963900 24967800 0 63 chr17 24969000 24969900 0 13 chr17 24975000 24976200 0 20 chr17 24979500 24988200 0 974 chr17 24990900 24991200 0 12 chr17 24992400 24997200 0 77 chr17 24999000 25007100 0 323 chr17 25008600 25010400 0 76 chr17 25011900 25012200 0 21 chr17 25015800 25016400 0 13 chr17 25020000 25021800 0 70 chr17 25023000 25025100 0 28 chr17 25028400 25028700 0 13 chr17 25031700 25040700 0 710 chr17 25043700 25045200 0 52 chr17 25047600 25050300 0 93 chr17 25053000 25056900 0 138 chr17 25059300 25064400 0 337 chr17 25068600 25069200 0 13 chr17 25071000 25077600 0 4856 chr17 25078800 25087800 0 199 chr17 25091400 25094700 0 58 chr17 25096200 25107600 0 1253 chr17 25111200 25113000 0.0546 40 chr17 25115100 25118400 0 185 chr17 25120200 25120800 0 75 chr17 25122900 25123200 0 11 chr17 25124700 25128000 0 50 chr17 25130100 25131000 0 43 chr17 25132200 25135800 0 68 chr17 25139100 25140900 0 2390 chr17 25143300 25143900 0.001 63 chr17 25149900 25152000 0 43 chr17 25154100 25158300 0 57 chr17 25165500 25165800 0 16 chr17 25167300 25174800 0 76 chr17 25180500 25180800 0 17 chr17 25182300 25182600 0 54 chr17 25184700 25187700 0 720 chr17 25190700 25194600 0 50 chr17 25197600 25198800 0 18 chr17 25201500 25201800 0 16 chr17 25203600 25204800 0 61 chr17 25207500 25211700 0 197 chr17 25213500 25213800 0 10 chr17 25217100 25218000 0 17 chr17 25219200 25221600 0 30 chr17 25227900 25228200 0 18 chr17 25232100 25234500 0 29 chr17 25237500 25237800 0.5853 33 chr17 25239300 25240500 0 129 chr17 25242600 25245600 0 494 chr17 25247400 25248000 0 26 chr17 25251600 25256700 0 76 chr17 25257900 25261200 0 35 chr17 25263900 25266600 0 55 chr17 25268700 25269600 0 28 chr17 25270800 25271400 0 28 chr17 25273500 25273800 0 12 chr17 25275600 25275900 0 11 chr17 25277100 25277400 0 10 chr17 25281000 25282200 0 107 chr17 25283400 25284300 0 28 chr17 25288800 25295400 0 50 chr17 25298100 25298700 0 17 chr17 25301700 25304700 0 77 chr17 25306500 25307100 0 30 chr17 25309800 25311900 0 21 chr17 25314300 25317900 0 82 chr17 25320000 25320300 0 11 chr17 25322400 25323000 0 135 chr17 25324800 25326600 0 76 chr17 25328100 25331700 0 217 chr17 25332900 25334700 0 50 chr17 25338000 25340400 0 38 chr17 25341900 25344900 0 59 chr17 25346700 25350600 0 34 chr17 25352700 25353900 0 302 chr17 25356600 25366200 0 211 chr17 25368000 25368600 0 43 chr17 25371300 25372500 0 36 chr17 25375500 25379400 0 36 chr17 25382100 25384800 0 5097 chr17 25387200 25387500 0 36 chr17 25388700 25392600 0 4252 chr17 25393800 25396800 0 322 chr17 25398300 25400400 0 183 chr17 25403700 25404000 0 30 chr17 25405200 25411200 0 296 chr17 25413900 25416900 0 70 chr17 25418700 25419900 0 36 chr17 25421100 25425600 0 48 chr17 25427100 25429500 0 40 chr17 25431000 25435500 0 63 chr17 25437300 25440600 0 80 chr17 25442700 25447800 0 38 chr17 25449900 25450800 0 209 chr17 25452300 25456200 0 67 chr17 25457700 25458300 0 139 chr17 25462200 25463400 0 41 chr17 25464600 25474200 0 64 chr17 25476000 25476900 0 46 chr17 25480200 25481700 0 455 chr17 25482900 25489800 0 455 chr17 25493700 25499100 0 646 chr17 25502700 25504500 0 72 chr17 25505700 25506000 0 45 chr17 25507800 25509900 0 28 chr17 25511400 25515600 0 61 chr17 25516800 25517100 0 11 chr17 25519500 25520400 0 49 chr17 25521600 25521900 0 49 chr17 25523700 25527900 0 938 chr17 25529400 25533600 0 123 chr17 25536600 25540800 0 54 chr17 25542600 25545300 0 54 chr17 25549200 25551000 0 39 chr17 25552200 25553400 0 17 chr17 25555500 25561200 0 67 chr17 25563900 25572600 0 4118 chr17 25574100 25575300 0 66 chr17 25578600 25582800 0 70 chr17 25586400 25588800 0 83 chr17 25591200 25592400 0 45 chr17 25594200 25600200 0 55 chr17 25603200 25608900 0 74 chr17 25610100 25612800 0 74 chr17 25614300 25616700 0 18 chr17 25620000 25620600 0 22 chr17 25621800 25623000 0 30 chr17 25624500 25629300 0 59 chr17 25631400 25638600 0 132 chr17 25639800 25643100 0 74 chr17 25644300 25648800 0 66 chr17 25650000 25653600 0 261 chr17 25655400 25661400 0 307 chr17 25665900 25666800 0 28 chr17 25668300 25668900 0 32 chr17 25670100 25670400 0.2988 12 chr17 25672800 25676700 0 58 chr17 25677900 25681200 0 58 chr17 25683900 25684800 0 62 chr17 25686300 25694100 0 62 chr17 25696500 25697700 0 33 chr17 25700700 25704900 0 108 chr17 25708800 25734900 0 150 chr17 25737000 25743600 0 55 chr17 25745400 25747500 0 55 chr17 25749000 25750200 0 38 chr17 25751700 25752000 0.0773 13 chr17 25753500 25754700 0 35 chr17 25757700 25758000 0 10 chr17 25759500 25761900 0 31 chr17 25763400 25764600 0 21 chr17 25766100 25768200 0 118 chr17 25769400 25775100 0 3795 chr17 25778100 25781700 0 57 chr17 25785600 25790400 0 1563 chr17 25794600 25796700 0 217 chr17 25798200 25802700 0 47 chr17 25803900 25806000 0 49 chr17 25807500 25813800 0 54 chr17 25816200 25821000 0 53 chr17 25822500 25826400 0 33 chr17 25827900 25840800 0 66 chr17 25842900 25847700 0 94 chr17 25850100 25867800 0 303 chr17 25869300 25869600 0 15 chr17 25871700 25874100 0 64 chr17 25876200 25878300 0 58 chr17 25881300 25882200 0 62 chr17 25884600 25886700 0 59 chr17 25888800 25892700 0 53 chr17 25895100 25895700 0 33 chr17 25898400 25900500 0 25 chr17 25902300 25903500 0 36 chr17 25904700 25905900 0 48 chr17 25907700 25914600 0 67 chr17 25917600 25917900 0 21 chr17 25919100 25926000 0 10231 chr17 25927500 25930800 0 79 chr17 25934100 25934700 0.0314 18 chr17 25936200 25938300 0 21 chr17 25939800 25951500 0 159 chr17 25953000 25960200 0 226 chr17 25961400 25967700 0 226 chr17 25969800 25976400 0 233 chr17 25977900 25981200 0 42 chr17 25982400 25985700 0 51 chr17 25986900 25991700 0 43 chr17 25994100 25999500 0 110 chr17 26001000 26001600 0 37 chr17 26003700 26010000 0 146 chr17 26011800 26028300 0 437 chr17 26029800 26045400 0 205 chr17 26048100 26052600 0 83 chr17 26053800 26056200 0 30 chr17 26057400 26060700 0 52 chr17 26062500 26071200 0 183 chr17 26075100 26083200 0 457 chr17 26084700 26085600 0 74 chr17 26087400 26090700 0 48 chr17 26091900 26092800 0.1069 50 chr17 26094000 26098500 0 296 chr17 26100600 26106900 0 1578 chr17 26108400 26115300 0 73 chr17 26116500 26120100 0 37 chr17 26121900 26123400 0 1755 chr17 26124600 26126400 0 64 chr17 26127900 26133900 0 473 chr17 26135400 26136900 0 15 chr17 26138100 26139300 0 33 chr17 26140500 26145600 0 232 chr17 26146800 26156700 0 279 chr17 26157900 26161200 0 40 chr17 26163600 26172900 0 164 chr17 26174400 26181000 0 61 chr17 26182800 26184600 0 69 chr17 26186100 26192100 0 60 chr17 26193900 26194500 0 18 chr17 26195700 26205300 0 99 chr17 26206500 26207700 0 99 chr17 26209800 26210700 0 77 chr17 26212200 26216700 0 61 chr17 26217900 26219700 0 87 chr17 26220900 26226900 0 86 chr17 26228400 26238000 0 183 chr17 26239200 26244000 0 72 chr17 26245500 26259300 0 62 chr17 26260800 26261700 0 41 chr17 26263500 26275800 0 243 chr17 26277600 26278200 0 74 chr17 26279700 26280600 0 185 chr17 26282400 26294400 0 388 chr17 26296500 26298000 0 23 chr17 26299200 26300100 0.056 458 chr17 26301300 26303100 0 105 chr17 26305200 26305500 0 16 chr17 26306700 26311800 0 213 chr17 26313000 26318700 0 40 chr17 26320500 26332500 0 253 chr17 26334000 26337000 0 30 chr17 26338500 26339700 0 40 chr17 26341200 26345700 0 78 chr17 26346900 26349900 0 78 chr17 26351400 26353500 0 27 chr17 26355300 26358900 0 124 chr17 26360100 26364600 0 845 chr17 26365800 26367000 0 33 chr17 26368500 26373000 0 22 chr17 26374500 26385900 0 226 chr17 26387400 26391300 0 347 chr17 26392500 26396400 0 62 chr17 26397900 26404200 0 691 chr17 26406300 26415600 0 76 chr17 26416800 26423700 0 60 chr17 26425200 26428800 0 60 chr17 26430300 26436300 0 76 chr17 26438700 26447400 0 1206 chr17 26448900 26451000 0 48 chr17 26452200 26466000 0 248 chr17 26467500 26474400 0 83 chr17 26475900 26477100 0 21 chr17 26478300 26487900 0 52 chr17 26490000 26490600 0 36 chr17 26492100 26496000 0 2782 chr17 26497200 26498700 0 39 chr17 26500200 26501700 0 35 chr17 26502900 26504400 0 69 chr17 26505600 26510100 0 73 chr17 26511900 26512200 0 16 chr17 26514000 26517900 0 29 chr17 26519100 26528400 0 66 chr17 26529900 26540100 0 66 chr17 26541600 26544900 0 256 chr17 26546100 26553600 0 256 chr17 26554800 26555700 0 45 chr17 26557200 26625900 0 19033 chr17 26627400 26627700 0.6562 31 chr17 26630100 26630700 0.2708 111 chr17 26638800 26639100 0.6962 29 chr17 26676600 26676900 0.297 63 chr17 26718300 26718900 0.6365 152 chr17 26721300 26721600 0.6429 118 chr17 26726700 26727000 0.5559 104 chr17 26728500 26728800 0.6551 140 chr17 26730600 26730900 0.5346 107 chr17 26735700 26736000 0.673 98 chr17 26743200 26743500 0.4044 144 chr17 26748600 26748900 0.6393 148 chr17 26753700 26754300 0.4778 96 chr17 26763600 26764200 0.253 147 chr17 26769300 26769600 0.6179 115 chr17 26775300 26775600 0.6908 64 chr17 26779200 26779500 0.6571 134 chr17 26782500 26813100 0.0473 663 chr17 26814300 26822100 0.0473 663 chr17 26823900 26885700 0 2110 chr17 26935800 26941200 0.145 6317 chr17 26953200 26953500 0.6539 126 chr17 27160800 27162600 0.0031 76 chr17 27210300 27210600 0.0338 54 chr17 27212100 27213300 0.0338 54 chr17 27638400 27638700 0.3836 79 chr17 27645600 27645900 0.2771 69 chr17 27746100 27746400 0.2402 72 chr17 27753000 27753600 0.53 70 chr17 27829200 27831900 0 78 chr17 27838200 27840600 0.0075 72 chr17 27901200 27901500 0.3857 72 chr17 28223100 28224300 0.265 85 chr17 28455600 28456500 0 26 chr17 28576500 28576800 0.4387 59 chr17 28581300 28581600 0.4313 46 chr17 29202300 29202600 0.4405 54 chr17 29895600 29896500 0 38 chr17 30439500 30441900 0 99 chr17 30616800 30621900 0 71 chr17 30625800 30630600 0 76 chr17 30632100 30632400 0.5302 79 chr17 30635700 30636000 0.164 55 chr17 30640200 30640500 0.3404 53 chr17 30644100 30645300 0.277 61 chr17 30654000 30655200 0.0695 54 chr17 30660600 30660900 0.4629 66 chr17 30663300 30663600 0.2692 60 chr17 30668400 30669000 0.0117 66 chr17 30700200 30700800 0.1803 56 chr17 30732300 30732600 0.0731 66 chr17 30978600 30981300 0.1926 65 chr17 31036200 31036500 0.2461 72 chr17 31038600 31038900 0.2461 72 chr17 31041300 31041600 0.2461 72 chr17 31045800 31046100 0.5529 58 chr17 31346400 31348500 0.2471 75 chr17 31937700 31938000 0.0934 76 chr17 31972800 31973100 0.3583 43 chr17 32028000 32028900 0 61 chr17 32043900 32044200 0.4864 45 chr17 32048400 32048700 0.5087 65 chr17 32050200 32050500 0.5087 65 chr17 32060100 32061300 0.3505 65 chr17 32070000 32071200 0.1679 66 chr17 32076600 32076900 0.402 57 chr17 32079300 32079600 0.3901 67 chr17 32084400 32085000 0.0559 58 chr17 32088000 32088300 0 57 chr17 32090700 32091600 0 57 chr17 32679900 32683800 0.0028 96 chr17 32817900 32818200 0.4974 38 chr17 32887200 32892900 0 79 chr17 32921700 32922900 0.5796 61 chr17 33542100 33543000 0.0525 63 chr17 34083300 34084200 0.47 68 chr17 34086000 34086300 0.3013 54 chr17 34212300 34212900 0.3983 64 chr17 34292700 34297500 0.0396 83 chr17 34907700 34908000 0.4473 62 chr17 35030100 35030400 0.1527 107 chr17 35353500 35353800 0.1165 66 chr17 35379300 35379600 0.3494 57 chr17 35380800 35381100 0.3494 57 chr17 35397000 35398800 0.2424 75 chr17 35441700 35442000 0.2963 78 chr17 36101100 36102000 0.305 59 chr17 36158400 36158700 0.4327 51 chr17 36160800 36168300 0.0124 112 chr17 36169500 36180300 0 134 chr17 36189300 36189600 0.4116 12 chr17 36208200 36209400 0.0248 35 chr17 36224100 36230700 0 94 chr17 36233700 36234000 0 94 chr17 36235200 36236100 0 55 chr17 36237600 36238200 0 55 chr17 36239700 36443100 0 160 chr17 36445200 36445800 0.2335 82 chr17 36450300 36453600 0 66 chr17 36786300 36786600 0.3212 54 chr17 37379700 37380000 0.2549 61 chr17 37566300 37566600 0.1937 62 chr17 37863000 37863300 0.4824 66 chr17 37890600 37901100 0 93 chr17 37902600 37966800 0 185 chr17 37968300 38250000 0 185 chr17 38253600 38253900 0.0743 63 chr17 38264400 38265900 0.4274 57 chr17 38286000 38286300 0.6414 39 chr17 38302800 38303100 0.3945 64 chr17 38630700 38632200 0.0406 51 chr17 38930100 38930400 0.2184 87 chr17 40221600 40221900 0.2837 46 chr17 41045100 41045400 0.5613 72 chr17 41046900 41047200 0.4253 75 chr17 41055000 41055300 0.2958 56 chr17 41065500 41065800 0.2716 74 chr17 41081400 41082000 0.1573 38 chr17 41083500 41084100 0.1687 36 chr17 41089200 41089800 0.4114 27 chr17 41102700 41103000 0.5487 82 chr17 41202900 41206500 0.0943 80 chr17 41227200 41227800 0.0169 45 chr17 41238600 41239200 0.0239 60 chr17 41633400 41633700 0.6946 63 chr17 42219300 42219600 0.2146 70 chr17 42264600 42265200 0.2662 75 chr17 42300000 42300300 0.329 64 chr17 42337800 42338400 0.0909 41 chr17 42550500 42550800 0.1898 45 chr17 42660000 42660300 0.5044 39 chr17 42973800 42974100 0.318 60 chr17 43227600 43231800 0 67 chr17 43233000 43305000 0 410 chr17 43322700 43323900 0 194 chr17 43345800 43346100 0.2928 48 chr17 43452900 43453200 0.2263 37 chr17 44034600 44036400 0.0018 63 chr17 44039400 44039700 0.5901 40 chr17 44179800 44181600 0.0608 71 chr17 44238900 44239500 0.1466 70 chr17 44524800 44525100 0.4756 69 chr17 44568900 44569200 0.6377 46 chr17 44961600 44961900 0.429 58 chr17 44984400 44985000 0.3173 34 chr17 45180600 45181800 0 34 chr17 45450600 45451200 0.3919 61 chr17 45459600 45459900 0.5041 46 chr17 45481500 45481800 0.3632 65 chr17 45484800 45485100 0.3571 61 chr17 45498000 45498600 0.0264 82 chr17 45500700 45501900 0.0264 82 chr17 45509700 45522600 0 141 chr17 45525900 45529500 0 108 chr17 45531000 45536700 0 108 chr17 45537900 45561300 0 108 chr17 45562500 45563100 0 108 chr17 45569700 45570000 0.2891 36 chr17 45573000 45573300 0.3779 39 chr17 45588600 45588900 0.6726 65 chr17 45592200 45592500 0.5485 46 chr17 45597300 45600900 0.0021 138 chr17 45602700 45603300 0.0021 138 chr17 45613500 45613800 0.5497 82 chr17 45618600 45618900 0.236 51 chr17 45621000 45624000 0.2044 82 chr17 46221600 46223100 0.1677 92 chr17 46224600 46224900 0.1677 92 chr17 46226700 46227000 0.5402 60 chr17 46228500 46228800 0.5968 74 chr17 46232100 46233600 0.5279 102 chr17 46237500 46238100 0.1447 56 chr17 46242600 46246800 0 105 chr17 46293000 46489200 0 150 chr17 46491300 46491900 0.3945 73 chr17 46493100 46493400 0.5294 74 chr17 46494900 46500000 0.1951 133 chr17 46503600 46534200 0 114 chr17 46535400 46542300 0 114 chr17 46543800 46550400 0 115 chr17 46551600 46707000 0 125 chr17 47016300 47017500 0.064 107 chr17 47019000 47019300 0.2914 64 chr17 47021400 47021700 0.0105 63 chr17 47025600 47026200 0.1085 69 chr17 47030100 47030700 0.2543 102 chr17 47031900 47032200 0.2543 102 chr17 47039100 47042700 0 100 chr17 47043900 47044200 0 100 chr17 47045700 47052000 0 100 chr17 47420700 47421000 0.6696 103 chr17 47507100 47507400 0.3811 47 chr17 47523000 47523300 0.247 62 chr17 47540100 47540400 0.5093 75 chr17 47579100 47579400 0.3917 50 chr17 47580600 47580900 0.4345 50 chr17 47666400 47666700 0.5325 19 chr17 48898800 48899100 0.3594 45 chr17 49057200 49057500 0.3666 34 chr17 49151100 49151400 0 43 chr17 49423500 49424100 0.0169 64 chr17 50085900 50086200 0.5019 10 chr17 50673900 50674200 0.6286 49 chr17 50836500 50836800 0.5317 56 chr17 50880600 50880900 0.3553 32 chr17 50894100 50894400 0.2641 31 chr17 51483000 51484800 0.222 113 chr17 51624900 51625200 0.1893 73 chr17 52185600 52186500 0.1435 64 chr17 52405500 52406100 0.0545 82 chr17 52408200 52408500 0.0545 82 chr17 52655400 52655700 0.5827 52 chr17 52657200 52658400 0.272 71 chr17 53242800 53243100 0.4232 86 chr17 53352300 53352600 0.6352 42 chr17 53500800 53501100 0.5351 94 chr17 53811000 53811600 0.4992 62 chr17 53841600 53841900 0.2397 111 chr17 54201600 54202200 0.4719 69 chr17 54698100 54698400 0.3153 78 chr17 55502400 55507500 0.0182 83 chr17 55790400 55791600 0.2279 61 chr17 55839600 55839900 0.3979 61 chr17 56050200 56051700 0.0271 87 chr17 56190000 56193300 0.0013 84 chr17 56792700 56793000 0.3591 208 chr17 57013200 57013500 0.5604 19 chr17 57132000 57132600 0.4885 17 chr17 58073400 58073700 0.5274 69 chr17 59205300 59205600 0.3229 48 chr17 59307900 59308200 0.6902 85 chr17 59393400 59394000 0.3501 73 chr17 59500800 59501100 0.3918 73 chr17 59574000 59574600 0 80 chr17 59576100 59576400 0 80 chr17 59578200 59585400 0 80 chr17 59587200 59587500 0.4828 62 chr17 59589300 59590500 0.0141 65 chr17 59592600 59593800 0.0141 65 chr17 59595300 59597400 0.0141 65 chr17 59599200 59599800 0.4259 58 chr17 59909100 59909400 0.5534 51 chr17 59975700 59976900 0.5035 64 chr17 59978100 59982900 0.0117 72 chr17 59985000 59986200 0.2156 62 chr17 59988000 59988300 0.3364 44 chr17 59990100 59997300 0 77 chr17 59999100 60001500 0 77 chr17 60006900 60010200 0.0594 87 chr17 60014400 60014700 0.475 85 chr17 60015900 60016200 0.475 85 chr17 60017700 60018000 0.4676 71 chr17 60020100 60035400 0 93 chr17 60042300 60042600 0.5295 57 chr17 60099900 60100200 0.4594 18 chr17 60111000 60126600 0 86 chr17 60206400 60206700 0.4058 53 chr17 60213300 60213600 0.409 49 chr17 60369000 60369300 0.4175 47 chr17 60550800 60551400 0.3166 78 chr17 60552600 60552900 0.461 61 chr17 60882600 60886500 0.0055 87 chr17 60978000 60979200 0.3397 72 chr17 61111500 61114500 0.0073 87 chr17 61505400 61505700 0.4198 27 chr17 62020800 62021400 0.2131 68 chr17 62234400 62235000 0.0718 114 chr17 62256600 62256900 0.247 84 chr17 62263500 62266800 0.0448 74 chr17 62268900 62269500 0.4706 64 chr17 62271000 62271300 0.4272 68 chr17 62272500 62272800 0.4272 68 chr17 62274300 62274600 0.3558 61 chr17 62788800 62789100 0.5585 41 chr17 63457200 63457500 0.3504 98 chr17 63862500 63863100 0.0306 65 chr17 63872700 63873300 0.0589 92 chr17 63886200 63886800 0.0547 64 chr17 63895500 63896400 0.0076 80 chr17 63915000 63915600 0.3315 73 chr17 63921600 63922200 0.3193 59 chr17 64364700 64365000 0.4485 63 chr17 64797300 64797600 0.1958 65 chr17 64828200 64828500 0.3677 66 chr17 64831500 64831800 0.4507 65 chr17 64855200 64855500 0.4734 65 chr17 64864500 64864800 0.4828 73 chr17 64867200 64867500 0.3968 72 chr17 64873500 64873800 0.3165 84 chr17 64881300 64914900 0 119 chr17 64918200 64918500 0.4811 78 chr17 64956300 64956600 0.4367 67 chr17 65764800 65766300 0.2482 57 chr17 66269700 66270000 0.2375 68 chr17 66596700 66602400 0 88 chr17 66798300 66799800 0.2375 1205 chr17 66934500 66934800 0.4024 36 chr17 67409100 67409400 0.4996 48 chr17 67470600 67471200 0.0797 63 chr17 67631400 67631700 0.3384 14 chr17 68269200 68269500 0.0801 53 chr17 68313000 68313300 0.4074 139 chr17 68408700 68410500 0.0695 83 chr17 68411700 68412000 0.4202 68 chr17 68654700 68656200 0.3673 77 chr17 68999400 69000900 0.0782 66 chr17 69002100 69003600 0.0782 66 chr17 69138600 69138900 0.2899 65 chr17 69278700 69279000 0.4582 51 chr17 69280500 69280800 0.2203 87 chr17 69612000 69613500 0.3011 44 chr17 69615300 69616200 0.388 74 chr17 69740700 69742200 0.0812 99 chr17 69808200 69808500 0.4969 34 chr17 70154100 70154400 0.4565 51 chr17 70163700 70164300 0.5895 65 chr17 70458900 70464900 0 90 chr17 70544700 70550700 0 101 chr17 71352300 71353800 0.3058 84 chr17 71355000 71355300 0.3058 84 chr17 71356500 71356800 0.3058 84 chr17 71608800 71609400 0.0089 27 chr17 72060600 72060900 0.3434 49 chr17 72236400 72237000 0.5657 97 chr17 73147800 73148400 0.2875 43 chr17 73332300 73332600 0.5559 63 chr17 74301900 74302200 0.5978 42 chr17 75194700 75195000 0.4749 21 chr17 75401100 75401400 0.6546 46 chr17 75477900 75478200 0.5449 23 chr17 76679700 76680000 0.5947 51 chr17 76991400 76991700 0.435 23 chr17 77239800 77240100 0.4611 29 chr17 77335500 77335800 0.5351 66 chr17 77561400 77562600 0.5387 89 chr17 77598900 77599200 0.6501 37 chr17 77647200 77647500 0.5855 103 chr17 77759700 77760600 0.4343 87 chr17 77776500 77777700 0.0323 62 chr17 78115500 78115800 0.4473 71 chr17 79893900 79894200 0.5266 133 chr17 80184600 80184900 0.6641 49 chr17 80274600 80274900 0.6409 15 chr17 80313900 80314200 0.5825 60 chr17 80488500 80488800 0.2526 28 chr17 80536800 80537400 0.4531 52 chr17 80601600 80602200 0 46 chr17 80665200 80665500 0.626 57 chr17 80700600 80700900 0.6319 100 chr17 80743800 80744700 0.4482 226 chr17 80748600 80749500 0.2736 59 chr17 80876100 80876400 0.6494 59 chr17 80915400 80915700 0.4184 47 chr17 80930100 80930400 0.6202 114 chr17 80957100 80957400 0.5958 62 chr17 80963400 80963700 0.1822 45 chr17 81053700 81054300 0.4519 55 chr17 81249300 81249600 0.4508 192 chr17 81531000 81532500 0.4951 159 chr17 81797700 81798000 0.4148 32 chr17 81818700 81819000 0.444 53 chr17 82162500 82162800 0.4546 44 chr17 82448400 82449000 0 62 chr17 82575900 82576200 0.4474 28 chr17 82579500 82580700 0.5445 71 chr17 82586100 82586700 0.5362 147 chr17 82671600 82671900 0.5296 25 chr17 82692000 82692300 0.5739 60 chr17 82696500 82696800 0.582 46 chr17 82764600 82765500 0.0393 86 chr17 82785000 82785600 0.4324 59 chr17 82848900 82849200 0.4346 91 chr17 82903800 82904100 0.2949 33 chr17 82905600 82905900 0.6036 42 chr17 82971600 82972200 0.1187 102 chr17 82974900 82977000 0.3941 63 chr17 83003400 83004600 0.5504 54 chr17 83022300 83023200 0.3556 60 chr17 83025300 83025600 0.2322 29 chr17 83026800 83027100 0.6406 115 chr17 83068200 83068800 0.3154 30 chr17 83127600 83127900 0.656 137 chr17 83134800 83135100 0.6382 17 chr17 83172600 83173200 0.6517 41 chr17 83205600 83206800 0 167 chr17 83208000 83239500 0 167 chr17 83240700 83247600 0 167 chr18 9900 45600 0 158 chr18 47100 47400 0.2698 126 chr18 79200 79500 0.5841 64 chr18 86100 86700 0.6001 70 chr18 88200 88500 0.3603 65 chr18 96900 98400 0.3742 67 chr18 106200 112800 0.0446 32919 chr18 116100 118800 0.0331 66 chr18 126000 126600 0.0049 56 chr18 219000 219600 0.2311 71 chr18 515100 515400 0.3455 79 chr18 536100 541800 0 84 chr18 663300 664800 0.31 77 chr18 667200 667500 0.6163 35 chr18 972300 974100 0.0793 97 chr18 975300 975900 0.0793 97 chr18 1145700 1146000 0.6026 45 chr18 1320900 1321200 0.5357 63 chr18 1354500 1354800 0.1544 67 chr18 1517100 1521300 0.1566 99 chr18 1533900 1534500 0.0284 46 chr18 1629300 1629600 0.536 29 chr18 1632300 1634100 0.2955 65 chr18 1720500 1721100 0.0033 24 chr18 2001000 2001600 0.1181 48 chr18 2248200 2249400 0.236 91 chr18 2251500 2252400 0.0771 168 chr18 2343300 2343600 0.3125 110 chr18 2426100 2426400 0.3032 56 chr18 2542200 2542500 0.5201 51 chr18 3736800 3739500 0.1639 84 chr18 3741000 3741300 0.6973 71 chr18 3997200 3997500 0.6689 33 chr18 4473900 4475700 0.0683 84 chr18 4477800 4478100 0.0683 84 chr18 4510800 4511100 0.4459 185 chr18 4649400 4650600 0.1137 60 chr18 5007300 5009700 0.2381 74 chr18 5281800 5282100 0.2181 86 chr18 5332500 5334600 0.0142 56 chr18 5681400 5682300 0.0029 69 chr18 5684700 5688300 0 94 chr18 6034800 6035100 0.3878 68 chr18 6272400 6273600 0.0151 107 chr18 6419700 6420300 0.1714 101 chr18 6541200 6541500 0.5819 52 chr18 7099200 7099500 0.3688 56 chr18 7399200 7403100 0.0679 74 chr18 7625400 7625700 0.5427 130 chr18 7692000 7692300 0.053 53 chr18 7966800 7972200 0.002 109 chr18 8057400 8063100 0.0016 94 chr18 8711100 8711700 0.1688 112 chr18 9023700 9024000 0.4711 96 chr18 9385500 9385800 0.4945 24 chr18 9537000 9537600 0.3058 60 chr18 9815400 9816000 0.0119 30 chr18 10573200 10574100 0.0887 108 chr18 10575600 10576800 0.1899 97 chr18 10594800 10595100 0.4671 47 chr18 10606200 10608000 0.0544 64 chr18 10610700 10611000 0.4213 60 chr18 10614600 10616100 0.1381 54 chr18 10623000 10623300 0.4559 61 chr18 10627500 10627800 0.5981 34 chr18 10642800 10644600 0.114 78 chr18 10645800 10646400 0.1295 42 chr18 10911000 10911600 0.4144 73 chr18 10914900 10915500 0.2506 62 chr18 11611500 11611800 0.5211 76 chr18 11620200 11622300 0.3053 92 chr18 11623500 11624100 0.3053 92 chr18 11634000 11636700 0.2514 65 chr18 11641200 11641500 0.4711 73 chr18 11643300 11643600 0.338 50 chr18 11645400 11647200 0.4127 56 chr18 11804100 11804700 0.1491 56 chr18 12077700 12078000 0.1295 72 chr18 12081600 12081900 0.0693 47 chr18 12141600 12144900 0 77 chr18 12147000 12150000 0 86 chr18 12176700 12177300 0.4933 73 chr18 12178800 12180600 0.2801 71 chr18 12202800 12208500 0.0108 83 chr18 12216600 12216900 0.4918 68 chr18 12219600 12219900 0.5601 74 chr18 12228000 12229800 0.0548 68 chr18 12851100 12851400 0.4985 33 chr18 12896400 12896700 0.3147 44 chr18 12955200 12956700 0.4758 53 chr18 13674600 13676400 0.5359 79 chr18 13975800 13981800 0 80 chr18 14164800 14165400 0.0266 64 chr18 14255100 14255400 0.6873 163 chr18 14267100 14267400 0.3884 68 chr18 14282700 14283000 0.5674 70 chr18 14310900 14311200 0.3741 49 chr18 14322300 14322600 0.5398 115 chr18 14325600 14325900 0.4036 44 chr18 14367000 14367300 0.6889 25 chr18 14368800 14369100 0.5311 49 chr18 14382300 14382600 0.346 66 chr18 14384400 14385000 0.1906 58 chr18 14387100 14389200 0.0292 80 chr18 14443500 14443800 0.4933 48 chr18 14451300 14452800 0.2917 52 chr18 14454300 14454600 0.1512 55 chr18 14490300 14490600 0.3024 51 chr18 14499000 14499600 0.4302 41 chr18 14509800 14510100 0.5998 40 chr18 14511600 14511900 0.3172 42 chr18 14518500 14518800 0.2134 45 chr18 14545500 14545800 0.5313 23 chr18 14559000 14559300 0.5021 44 chr18 14560500 14560800 0.1511 42 chr18 14562000 14562300 0.2252 40 chr18 14571000 14571300 0.589 43 chr18 14589900 14590200 0.248 55 chr18 14594400 14595000 0.4657 62 chr18 14613000 14613300 0.1869 57 chr18 14616000 14616300 0.2524 43 chr18 14618100 14618400 0.2524 43 chr18 14621700 14622000 0.5946 60 chr18 14623500 14624400 0.1974 77 chr18 14629200 14630100 0.1696 58 chr18 14634000 14634600 0.1222 48 chr18 14636100 14636400 0.6832 22 chr18 14656500 14657700 0.2455 57 chr18 14663400 14663700 0.249 72 chr18 14669400 14669700 0.3951 72 chr18 14670900 14671200 0.3951 72 chr18 14673000 14673900 0.2534 52 chr18 14675400 14675700 0.626 44 chr18 14689200 14689500 0.0249 12 chr18 14718300 14718600 0.1676 54 chr18 14720400 14721600 0.1676 54 chr18 14727000 14728500 0.2759 53 chr18 14800500 14804400 0 54 chr18 14806500 14807700 0.3072 34 chr18 14811600 14815500 0 60 chr18 14819100 14819400 0.4278 48 chr18 14822700 14823300 0.0226 64 chr18 14856000 14859900 0.0196 67 chr18 14861400 14861700 0.228 63 chr18 14863800 14864100 0.5184 57 chr18 14877300 14877600 0.4048 56 chr18 14883900 14884200 0.3983 20 chr18 14891400 14891700 0.3236 54 chr18 14893800 14894100 0.3482 52 chr18 15026700 15027300 0.3012 76 chr18 15032100 15032400 0.2295 67 chr18 15138000 15139800 0.2937 61 chr18 15155100 15155400 0.347 41 chr18 15159300 15159600 0.1593 57 chr18 15171900 15172200 0.2391 151 chr18 15174300 15175500 0.6923 104 chr18 15189300 15189600 0.6478 54 chr18 15213000 15216000 0 72 chr18 15220200 15220500 0.5157 81 chr18 15273600 15273900 0.3049 24 chr18 15304800 15305100 0.4816 50 chr18 15329100 15329700 0.5622 52 chr18 15338100 15338400 0.4716 76 chr18 15353100 15353400 0.3374 58 chr18 15357600 15357900 0.3457 63 chr18 15363600 15363900 0.2157 67 chr18 15370500 15370800 0.5197 68 chr18 15373200 15373500 0.5396 85 chr18 15461400 15661800 0 430 chr18 15663300 15666000 0 155 chr18 15667200 15691800 0 210 chr18 15693000 15720600 0 210 chr18 15722100 15751500 0 210 chr18 15753300 15758700 0 210 chr18 15760200 15769800 0 210 chr18 15771000 15781200 0 193 chr18 15783000 15783300 0 193 chr18 15784800 15786600 0.0375 79 chr18 15787800 15788400 0 31 chr18 15791100 19415700 0 710 chr18 19416900 19622700 0 710 chr18 19623900 20198400 0 710 chr18 20199600 20562300 0 710 chr18 20563800 20564700 0 710 chr18 20571600 20574000 0.0038 72 chr18 20576400 20577900 0 117 chr18 20579100 20586600 0 117 chr18 20590500 20592600 0.0262 87 chr18 20594400 20598600 0 180 chr18 20599800 20735700 0 180 chr18 20737500 20739900 0 113 chr18 20741400 20742900 0 75 chr18 20744400 20781000 0 165 chr18 20782500 20785500 0 165 chr18 20787300 20798400 0 165 chr18 20799600 20808300 0 165 chr18 20810400 20812500 0 165 chr18 20813700 20815800 0 104 chr18 20817300 20823000 0 61 chr18 20824800 20825400 0 61 chr18 20827500 20828100 0 61 chr18 20829300 20829900 0 61 chr18 20832000 20832300 0 95 chr18 20833500 20839800 0 95 chr18 20911200 20920800 0 201 chr18 20922300 20932200 0 201 chr18 20934900 20936100 0.1353 42 chr18 20945400 20946300 0.0073 65 chr18 20950500 20950800 0.6818 43 chr18 20954100 20954400 0.0809 61 chr18 20955600 20955900 0.2531 60 chr18 20959500 20959800 0.4612 46 chr18 21027900 21028200 0.5208 65 chr18 21144900 21145200 0.3423 71 chr18 21156000 21156300 0.323 53 chr18 21160200 21160500 0.2103 45 chr18 21738600 21738900 0.4444 78 chr18 21883500 21885300 0.2373 90 chr18 22077600 22078200 0.4918 82 chr18 22273800 22274100 0.5179 16 chr18 22530600 22534200 0.0243 72 chr18 22581600 22582200 0.0083 30 chr18 22721700 22722600 0.284 82 chr18 22744500 22744800 0.2865 83 chr18 22819500 22820400 0.0228 43 chr18 24323700 24324000 0.1285 37 chr18 24619200 24624300 0.0357 95 chr18 24711000 24713400 0.0342 88 chr18 24714900 24715800 0.0342 88 chr18 25033500 25033800 0.4488 72 chr18 25485000 25487400 0 83 chr18 26167800 26170200 0.1695 65 chr18 26247900 26248800 0.0014 26 chr18 26393400 26393700 0.446 89 chr18 26829000 26829900 0.3933 73 chr18 27280200 27285000 0.1703 77 chr18 27511500 27512700 0.388 69 chr18 27514200 27516000 0.1694 76 chr18 27531600 27532200 0.3022 59 chr18 27737700 27738600 0.0132 105 chr18 27739800 27742200 0.0132 105 chr18 28217400 28217700 0.1535 39 chr18 28242600 28243500 0.4296 63 chr18 28416600 28421400 0.021 123 chr18 28783800 28784100 0 22 chr18 28942200 28943100 0.1711 64 chr18 29150700 29151900 0.3025 71 chr18 29168100 29168400 0.3872 33 chr18 29552700 29553300 0.1552 67 chr18 30022200 30026400 0 81 chr18 30049800 30050100 0.5582 19 chr18 31150200 31150500 0.6851 80 chr18 31348500 31351800 0.0281 103 chr18 31353000 31353300 0.0281 103 chr18 31960500 31960800 0.3643 12 chr18 32041500 32041800 0.6081 35 chr18 32228400 32229900 0.1442 77 chr18 32857200 32862600 0.0078 80 chr18 33388500 33388800 0.5897 43 chr18 33881100 33881400 0.3072 82 chr18 34332000 34334400 0.2321 72 chr18 34335900 34336500 0.3568 65 chr18 34552800 34555200 0.0409 86 chr18 34557000 34557300 0.0409 86 chr18 34714200 34714500 0.4036 54 chr18 34899300 34899600 0.1981 54 chr18 35033700 35034000 0.4348 68 chr18 35206800 35209800 0.0023 84 chr18 35211000 35211300 0.0023 84 chr18 35370600 35370900 0.6828 39 chr18 35792700 35793000 0.4546 66 chr18 36235200 36237300 0.0997 87 chr18 36238500 36240600 0.0997 87 chr18 36986400 36987300 0.0145 60 chr18 37074900 37075200 0.6369 66 chr18 37078500 37078800 0.3166 61 chr18 37338000 37338300 0.5447 39 chr18 37819800 37825500 0 77 chr18 37842300 37842600 0.4049 62 chr18 37941000 37941900 0.1615 79 chr18 37969800 37970400 0.1147 52 chr18 37973400 37973700 0.246 65 chr18 39124200 39124500 0.2177 73 chr18 39254400 39255000 0.1227 71 chr18 39256200 39256500 0.1227 71 chr18 39481800 39482100 0.5826 34 chr18 39566100 39571200 0.0024 79 chr18 39860100 39861600 0.0309 61 chr18 39925800 39926100 0.187 73 chr18 39927900 39928500 0.187 73 chr18 39930000 39930300 0.187 73 chr18 40188600 40190400 0.331 71 chr18 40845000 40848000 0 92 chr18 41634000 41637600 0.0488 88 chr18 41775300 41781000 0 91 chr18 42265800 42266100 0.4019 51 chr18 43291200 43291800 0.2927 63 chr18 43298100 43300200 0.0946 83 chr18 43325100 43326600 0.0769 92 chr18 43451700 43452600 0 46 chr18 43872000 43872300 0.1508 61 chr18 43873500 43873800 0.1508 61 chr18 45030000 45030600 0.3416 66 chr18 45080400 45081000 0 37 chr18 45235800 45236400 0.4017 27 chr18 45681000 45681300 0.3399 28 chr18 46546200 46546800 0.3995 153 chr18 46802700 46803000 0.5714 50 chr18 46962000 46970100 0 351 chr18 47019900 47031300 0 325 chr18 47348400 47348700 0.0737 57 chr18 47349900 47352300 0.3127 80 chr18 47401200 47401500 0.3447 51 chr18 47642700 47643300 0.3279 72 chr18 47660400 47666400 0 89 chr18 48276600 48277500 0.0521 54 chr18 48281700 48282300 0.3079 69 chr18 48469800 48470100 0.0721 24 chr18 48510900 48511500 0.0436 108 chr18 48870000 48870600 0.6321 80 chr18 49202400 49203900 0.2051 105 chr18 49220400 49220700 0.4203 81 chr18 49292400 49292700 0.6588 66 chr18 49577100 49579200 0.1285 87 chr18 49771500 49773300 0.3059 70 chr18 49774500 49775100 0.1698 67 chr18 50149800 50150400 0.2194 61 chr18 50343900 50349600 0 88 chr18 51676800 51677400 0.4206 55 chr18 51741300 51745800 0.0113 112 chr18 51830400 51830700 0.4482 70 chr18 52405200 52405500 0.5914 58 chr18 52792500 52793100 0.1119 881 chr18 53086500 53086800 0.5342 16 chr18 53110500 53111100 0.3073 57 chr18 53173800 53174100 0.0651 57 chr18 53175900 53176500 0.3035 80 chr18 53399700 53400000 0.4807 19 chr18 53427600 53427900 0.6555 38 chr18 53515500 53517300 0.2391 79 chr18 53562300 53562600 0.4408 54 chr18 53741100 53741400 0.3773 69 chr18 53861400 53861700 0.507 59 chr18 54342600 54344700 0.0088 68 chr18 54400200 54400500 0.1752 60 chr18 54426600 54430500 0 68 chr18 54664500 54664800 0.3033 73 chr18 54728700 54729000 0.4791 90 chr18 55716000 55716300 0.531 81 chr18 55717800 55720200 0.3141 73 chr18 55887900 55891500 0.0222 81 chr18 56529600 56530200 0.0778 81 chr18 57263700 57265200 0.1302 78 chr18 57495900 57496800 0.376 77 chr18 57642300 57642600 0.1141 113 chr18 57720000 57725400 0.0601 92 chr18 58134300 58134600 0.4145 23 chr18 58170300 58171500 0 67 chr18 59113800 59114100 0.4596 50 chr18 59404200 59409600 0 107 chr18 59925600 59925900 0.3444 36 chr18 60030900 60035100 0.1316 78 chr18 60927900 60928500 0.1113 76 chr18 61005900 61006200 0.6294 57 chr18 61023300 61023900 0.1516 38 chr18 61074600 61075500 0 72 chr18 61145100 61145400 0.3074 71 chr18 61311300 61311600 0.1643 66 chr18 61313400 61313700 0.1643 66 chr18 61513200 61513500 0.1748 75 chr18 61514700 61515000 0.1748 75 chr18 61561500 61562100 0.0272 69 chr18 61716000 61718400 0.1092 75 chr18 61903500 61903800 0.5733 41 chr18 62039700 62040000 0.5978 55 chr18 62052300 62052600 0.4832 72 chr18 62096400 62097600 0.3457 56 chr18 62581200 62581800 0.178 36 chr18 62906400 62912100 0 103 chr18 63063600 63063900 0.1234 218 chr18 63363300 63363600 0.3128 44 chr18 63469500 63470100 0.2904 38 chr18 63635400 63636000 0.576 66 chr18 63644400 63644700 0.4459 64 chr18 63653400 63653700 0.3082 54 chr18 63662100 63662400 0.4781 56 chr18 63734100 63734400 0.5003 65 chr18 63863100 63866400 0.0027 70 chr18 64368900 64369200 0.3824 52 chr18 64880100 64880700 0.285 63 chr18 65295600 65295900 0.4118 79 chr18 65393100 65393400 0.3363 25 chr18 65582100 65582400 0.411 44 chr18 65583900 65584200 0.2081 45 chr18 65779500 65780700 0.0385 44 chr18 65781900 65782200 0.6386 32 chr18 65866200 65866500 0.5269 46 chr18 66547800 66548100 0.4387 31 chr18 66677400 66677700 0.5233 53 chr18 66717300 66718500 0.2532 67 chr18 66875700 66876000 0.3879 37 chr18 67542600 67542900 0.6696 49 chr18 68226600 68228100 0.0122 68 chr18 68538300 68541600 0 61 chr18 68785500 68786700 0.2248 76 chr18 68788500 68789700 0.2248 76 chr18 68859300 68859900 0.0539 52 chr18 69252900 69253200 0.3426 105 chr18 69450000 69454800 0.0578 102 chr18 69760800 69761100 0.6656 63 chr18 70685100 70686600 0.0115 136 chr18 70746600 70752600 0 76 chr18 70855500 70855800 0.3968 76 chr18 70857300 70857600 0.3968 76 chr18 71093700 71094000 0.2854 69 chr18 71123700 71124600 0.4284 65 chr18 71179500 71179800 0.0301 24 chr18 71356800 71357400 0.1558 54 chr18 71655600 71657700 0.0508 45 chr18 71791800 71793000 0.3485 48 chr18 72162300 72162600 0.3201 55 chr18 72966600 72972300 0 94 chr18 72975600 72976800 0.0481 75 chr18 73166700 73167000 0.2976 59 chr18 73328700 73329000 0.5889 87 chr18 73444200 73444500 0.3092 79 chr18 73628700 73629000 0.6399 38 chr18 74010000 74010300 0.6013 59 chr18 74204700 74205000 0.5636 109 chr18 74485200 74485500 0.0805 15 chr18 74616600 74617200 0.6284 277 chr18 74998500 74999400 0.0004 90 chr18 75299700 75300000 0.4777 45 chr18 75591000 75591300 0.4051 83 chr18 75846900 75853200 0 112 chr18 76001400 76002000 0.3645 56 chr18 76585500 76585800 0.3629 58 chr18 76645800 76646400 0.4181 68 chr18 76744200 76744500 0.67 38 chr18 76792500 76792800 0.5975 49 chr18 76810200 76810500 0.3867 52 chr18 76858800 76859100 0.5067 25 chr18 76967100 76967700 0.3097 126 chr18 77028000 77028600 0.0699 70 chr18 77252700 77253000 0.5226 197 chr18 77416500 77419800 0.2033 73 chr18 77670300 77670600 0.3643 13 chr18 77969400 77969700 0.6249 50 chr18 78010200 78010500 0.6614 106 chr18 78229500 78229800 0.6706 10 chr18 78370800 78373200 0.0129 96 chr18 78409500 78409800 0.5717 18 chr18 78437400 78438300 0.0625 334 chr18 78442800 78443100 0.4704 49 chr18 78485700 78486300 0.4519 33 chr18 78502500 78503100 0.0018 74 chr18 78504600 78504900 0.6346 28 chr18 78513000 78514800 0.2194 112 chr18 78633300 78633900 0.2947 72 chr18 78654300 78654600 0.5724 24 chr18 78753900 78754500 0.1537 36 chr18 78782100 78782700 0.3774 35 chr18 78787200 78787500 0.4951 34 chr18 78840300 78840600 0.6005 94 chr18 78916200 78917400 0.5466 126 chr18 79014300 79017000 0.1763 189 chr18 79033500 79036800 0.2596 122 chr18 79098300 79098600 0.4336 42 chr18 79115100 79116900 0.0367 70 chr18 79145400 79146300 0.488 81 chr18 79200600 79200900 0.5813 459 chr18 79245900 79246200 0.6712 36 chr18 79284900 79285200 0.4845 62 chr18 79287900 79288200 0.4172 61 chr18 79308600 79309500 0.1281 121 chr18 79326000 79326600 0.3208 72 chr18 79341300 79341600 0.5903 62 chr18 79356900 79358700 0.0552 111 chr18 79367100 79367400 0.4007 65 chr18 79374300 79374600 0.45 87 chr18 79417200 79417800 0.4769 30 chr18 79494300 79494600 0.5074 51 chr18 79504800 79505700 0.3199 77 chr18 79525200 79525500 0.4277 43 chr18 79550100 79551900 0 27 chr18 79556400 79556700 0.4357 12 chr18 79618500 79620900 0.3568 522 chr18 79648500 79648800 0.644 27 chr18 79686900 79687500 0.3706 94 chr18 79691700 79692000 0.3874 20 chr18 79745400 79746300 0 37 chr18 79752300 79753200 0.0878 82 chr18 79764600 79765500 0.1719 57 chr18 79771200 79771500 0.593 75 chr18 79780200 79780500 0.5169 30 chr18 79808400 79809300 0.1089 66 chr18 79830900 79831500 0.0503 61 chr18 79885800 79887000 0 69 chr18 79919400 79921800 0.1145 109 chr18 79998600 79998900 0.3776 66 chr18 80015700 80016300 0.3031 72 chr18 80028000 80028300 0.4373 74 chr18 80071200 80073300 0.0439 110 chr18 80075100 80075700 0.4657 35 chr18 80207100 80207400 0.4176 50 chr18 80258100 80258700 0.3921 105 chr18 80262900 80263500 0.191 402 chr19 60000 236700 0 171 chr19 239100 240000 0.083 95 chr19 241200 243600 0.083 95 chr19 249600 251100 0.2066 95 chr19 270000 270600 0.5792 72 chr19 299100 300600 0.6059 58 chr19 312600 313200 0.2867 74 chr19 332400 333900 0.0197 62 chr19 360900 361800 0.1338 78 chr19 377400 377700 0.6908 28 chr19 382200 382500 0.6077 57 chr19 395100 395400 0.4611 40 chr19 399900 400500 0.1577 37 chr19 411000 411300 0.4038 54 chr19 423300 423600 0.37 60 chr19 426600 426900 0.3432 46 chr19 432000 434100 0.1025 72 chr19 491700 492000 0.3177 24 chr19 524700 525300 0.3196 96 chr19 534600 534900 0.5274 37 chr19 540000 540300 0.4355 11 chr19 564000 565500 0.0924 41 chr19 602100 602400 0.5754 54 chr19 605400 605700 0.4636 39 chr19 735300 735900 0.5519 67 chr19 853800 854100 0.5719 49 chr19 950100 950400 0.4096 47 chr19 1033800 1034700 0.1481 20 chr19 1049400 1050000 0.6644 23 chr19 1148400 1149000 0.0781 45 chr19 1164600 1164900 0.6792 66 chr19 1195200 1198500 0 47 chr19 1627800 1629000 0.3196 60 chr19 2347800 2349600 0.3248 58 chr19 2418300 2419200 0.2378 32 chr19 2433000 2433600 0.509 37 chr19 2643300 2643600 0.6219 48 chr19 2713500 2714100 0.202 110 chr19 2772900 2773800 0.4628 61 chr19 2928600 2929200 0.5578 28 chr19 3177600 3178200 0.1305 47 chr19 3332400 3332700 0.4504 25 chr19 3648900 3649800 0 90 chr19 3937500 3937800 0.6811 28 chr19 3973200 3975000 0 43 chr19 4011600 4011900 0.5436 43 chr19 4035600 4036200 0.5005 170 chr19 4512900 4513200 0.5132 63 chr19 4618500 4619400 0.4681 43 chr19 4947300 4947600 0.5588 69 chr19 4960800 4961400 0.1641 50 chr19 5044200 5044500 0.5621 49 chr19 5076000 5076600 0.2967 97 chr19 5498400 5498700 0.3579 48 chr19 5610900 5611800 0 58 chr19 5648700 5649600 0 61 chr19 5702700 5703000 0.3301 64 chr19 5731500 5731800 0.4867 40 chr19 6069900 6070200 0.5724 170 chr19 6356100 6356400 0.2947 64 chr19 6693900 6694200 0.6923 50 chr19 7007100 7007700 0.04 67 chr19 7010100 7010700 0.0217 68 chr19 7019100 7032900 0 103 chr19 7035000 7035300 0.0493 84 chr19 7037100 7052400 0 103 chr19 7055400 7061400 0 129 chr19 7124400 7124700 0.5271 23 chr19 7450500 7451100 0.6744 1047 chr19 7765800 7766100 0.6327 48 chr19 8268600 8268900 0.4875 71 chr19 8272200 8301300 0 53 chr19 8449500 8449800 0.4907 17 chr19 8543700 8544000 0.45 49 chr19 8720100 8720400 0.4329 101 chr19 8740800 8787600 0 267 chr19 8904000 8904300 0.5052 41 chr19 8912400 8912700 0.2547 82 chr19 9227700 9228000 0.4891 59 chr19 11209500 11209800 0.6755 47 chr19 11424600 11424900 0.212 22 chr19 11909700 11910000 0.3944 56 chr19 12005400 12007800 0.1082 70 chr19 12393000 12393600 0.3006 56 chr19 12402600 12402900 0.6223 57 chr19 12492900 12493200 0.411 39 chr19 12621900 12622200 0.252 43 chr19 12775800 12776100 0.4959 45 chr19 13535700 13536300 0.3648 14 chr19 13702800 13704600 0.1915 69 chr19 13936800 13937100 0.2977 28 chr19 14585700 14586000 0.2307 65 chr19 14589900 14590200 0.1833 61 chr19 14622300 14623200 0 54 chr19 14649600 14649900 0.4291 35 chr19 14749500 14750100 0.2925 13 chr19 15362400 15363000 0.3641 84 chr19 15581100 15581400 0.4925 23 chr19 15674100 15674400 0.3333 14 chr19 15708000 15708600 0.2329 47 chr19 15713400 15714000 0.3232 65 chr19 15778200 15778500 0.5846 51 chr19 15931500 15934200 0.0489 258 chr19 16875600 16875900 0.6169 85 chr19 17349000 17349300 0.2568 103 chr19 18550500 18550800 0.2366 39 chr19 20018100 20018400 0.3698 53 chr19 20064000 20064300 0.4958 13 chr19 20138100 20138700 0.4366 86 chr19 20148600 20150700 0.0801 54 chr19 20260200 20260500 0.408 70 chr19 20559900 20560200 0.3793 54 chr19 20797200 20797500 0.4543 31 chr19 20813100 20813400 0.4921 31 chr19 20829600 20829900 0.6501 17 chr19 20895300 20895600 0.4625 80 chr19 20952000 20953200 0.1991 43 chr19 21005100 21005400 0.4961 53 chr19 21681600 21681900 0.375 65 chr19 21720300 21722700 0 57 chr19 21776100 21776400 0.4566 54 chr19 21864900 21867000 0.0265 74 chr19 21875700 21876000 0.3102 71 chr19 22106400 22108500 0.337 75 chr19 22392300 22392600 0.3292 52 chr19 22394100 22394400 0.3708 63 chr19 22397700 22398000 0.6278 36 chr19 22542300 22542600 0.4039 40 chr19 22662600 22662900 0.3596 57 chr19 22664400 22664700 0.5784 59 chr19 22822500 22822800 0.3741 158 chr19 22915800 22916100 0.2118 76 chr19 22925700 22928400 0.0397 65 chr19 23134500 23135100 0.1443 83 chr19 23138100 23138400 0.5992 30 chr19 23369700 23370000 0.4055 58 chr19 23431800 23432100 0.396 65 chr19 23803500 23803800 0.4913 44 chr19 23890800 23891100 0.5147 61 chr19 24111600 24112200 0.5058 86 chr19 24114300 24114600 0.1455 59 chr19 24396000 24396300 0.5523 80 chr19 24411000 24413700 0 77 chr19 24417000 24417300 0.4868 192 chr19 24418500 24449100 0 427 chr19 24891300 24895800 0.0686 651 chr19 24908400 24908700 0.006 87 chr19 27270900 27271200 0.3095 92 chr19 27276600 27276900 0.6268 122 chr19 27301800 27302100 0.5397 125 chr19 27309000 27309300 0.6673 113 chr19 27315600 27315900 0.606 102 chr19 27336600 27336900 0.6479 130 chr19 27420300 27420600 0.3988 61 chr19 27637500 27641100 0.1251 81 chr19 27642600 27646200 0.1251 81 chr19 28048500 28048800 0.5433 53 chr19 28050600 28050900 0.4578 53 chr19 28629000 28629300 0.4291 35 chr19 28678200 28678500 0.2025 74 chr19 28805100 28805400 0.2978 59 chr19 28806600 28806900 0.2978 59 chr19 29229600 29231400 0 71 chr19 29459400 29465100 0 73 chr19 29717700 29718000 0.4613 51 chr19 29898000 29902200 0 72 chr19 29985000 29985300 0.6119 43 chr19 30141300 30144000 0 65 chr19 30526500 30526800 0.5818 38 chr19 31506900 31507500 0.3713 64 chr19 31653600 31654500 0 64 chr19 32590200 32591700 0.2744 102 chr19 32746200 32746500 0.675 50 chr19 32849400 32849700 0.2699 93 chr19 33757200 33757800 0.5773 58 chr19 34078500 34080600 0 63 chr19 34616400 34616700 0.1092 55 chr19 34861200 34865100 0.049 94 chr19 35358600 35360700 0.038 78 chr19 35371200 35372700 0.3392 89 chr19 36247200 36247800 0.1559 114 chr19 36268800 36309300 0 240 chr19 36311100 36313200 0 240 chr19 36407100 36407400 0.5033 59 chr19 36698400 36698700 0.2906 67 chr19 36699900 36700500 0.1214 64 chr19 36793500 36793800 0.3068 29 chr19 36844800 36845100 0.5851 34 chr19 37121100 37121400 0.3742 57 chr19 37264500 37266600 0 603 chr19 37268700 37303500 0 603 chr19 37331400 37332300 0.3343 84 chr19 37751100 37752000 0.1751 55 chr19 37838100 37843200 0 76 chr19 37866300 37867200 0.0056 80 chr19 38540400 38541000 0.1443 34 chr19 38770500 38773500 0 74 chr19 38789100 38792400 0 80 chr19 38797200 38797500 0.3952 57 chr19 39245100 39245400 0.2783 64 chr19 39246600 39246900 0.2783 64 chr19 39266100 39266400 0.4086 66 chr19 39268200 39268500 0.3174 63 chr19 39628500 39628800 0.5029 43 chr19 39876600 39877200 0.0806 103 chr19 39879600 39881400 0.0288 118 chr19 39882900 39889800 0 142 chr19 39892800 39893400 0.2125 110 chr19 39895800 39897600 0.0161 109 chr19 39899100 39906300 0 108 chr19 39957000 39958800 0.1327 56 chr19 40107300 40109700 0.0002 93 chr19 40113900 40114200 0.3345 93 chr19 40117200 40119300 0.101 91 chr19 40647300 40650000 0.0007 56 chr19 40821300 40821900 0.3135 53 chr19 40833600 40833900 0.5733 56 chr19 40842600 40843200 0.1006 60 chr19 40851300 40851600 0.4258 67 chr19 40852800 40853700 0.491 73 chr19 40874700 40875300 0.0681 67 chr19 40884600 40885500 0.4438 72 chr19 40941000 40941300 0.4648 53 chr19 40965000 40965600 0.1602 80 chr19 40998600 40999200 0.1843 61 chr19 41103900 41104200 0.1806 64 chr19 41121900 41122200 0.6303 34 chr19 41125200 41125800 0.5687 84 chr19 41490300 41490600 0.6401 70 chr19 41644200 41646300 0.0206 78 chr19 41749800 41750100 0.4844 67 chr19 41788500 41788800 0.5913 71 chr19 41842800 41843100 0.3766 72 chr19 42370800 42371100 0.5661 66 chr19 42530400 42530700 0.5931 37 chr19 42671400 42671700 0.3907 66 chr19 42748500 42748800 0.4464 79 chr19 42769800 42770400 0.2481 74 chr19 42789900 42790200 0.6393 43 chr19 42807900 42808200 0.4758 78 chr19 42809700 42810300 0.4758 78 chr19 42843300 42843600 0.5906 20 chr19 42955500 42955800 0.5283 66 chr19 43051200 43052400 0.017 70 chr19 43110600 43110900 0.2983 65 chr19 43176600 43176900 0.4674 61 chr19 43195800 43196100 0.4905 56 chr19 43243200 43243500 0.304 68 chr19 43344900 43345200 0.4171 71 chr19 43356000 43360800 0 73 chr19 43364400 43365900 0.014 88 chr19 43369200 43370400 0.0435 73 chr19 43374000 43378800 0 71 chr19 43388400 43388700 0.5572 67 chr19 43864500 43866300 0.2311 67 chr19 43878000 43878300 0.2417 47 chr19 44222400 44223000 0.332 85 chr19 44224800 44225400 0.3503 95 chr19 44546100 44547000 0.0538 77 chr19 44594400 44595000 0.048 66 chr19 44801100 44801700 0.471 46 chr19 45648300 45649200 0.2218 41 chr19 46038900 46039800 0.2929 71 chr19 46078800 46079100 0.4615 49 chr19 46438500 46440900 0 37 chr19 46452900 46453200 0.2246 11 chr19 47051100 47051400 0.3542 63 chr19 47397300 47397600 0.3974 59 chr19 47804100 47804400 0.5565 75 chr19 47859600 47859900 0.5669 60 chr19 47903400 47958900 0 501 chr19 48483000 48483300 0.5495 38 chr19 48669000 48670200 0.3813 287 chr19 48834900 48835500 0.2757 29 chr19 48890100 48890400 0.2661 98 chr19 49023000 49023600 0.1063 58 chr19 49024800 49025100 0.4398 61 chr19 49027800 49028400 0.1246 70 chr19 49032300 49033200 0.0232 78 chr19 49035600 49035900 0.4818 56 chr19 49040400 49041000 0.2993 84 chr19 49044600 49045200 0.4775 66 chr19 49047600 49048200 0.4184 94 chr19 49054200 49054800 0.1489 63 chr19 49167600 49167900 0.4567 65 chr19 49959300 49961100 0.0411 76 chr19 49969500 49971300 0.3294 85 chr19 50074800 50075100 0.1661 59 chr19 50079900 50080200 0.4168 69 chr19 50091000 50133600 0 1041 chr19 50137200 50139600 0 322 chr19 50603700 50604000 0.5329 84 chr19 50605500 50605800 0.3844 69 chr19 50609100 50609400 0.0756 10 chr19 50617500 50617800 0.1212 62 chr19 50622600 50623200 0.4082 60 chr19 50756100 50756400 0.3939 51 chr19 50961000 50961300 0.3689 58 chr19 51051600 51051900 0.0581 31 chr19 51180900 51181200 0.5989 39 chr19 51182400 51183000 0.4927 57 chr19 51310500 51311100 0.1409 38 chr19 51345600 51345900 0.6403 108 chr19 51353400 51354000 0.4121 40 chr19 51463800 51464400 0.314 68 chr19 51629400 51630300 0.04 57 chr19 51645900 51646800 0.0275 90 chr19 51672600 51674400 0 63 chr19 51758100 51758700 0.0684 88 chr19 52575600 52575900 0.1137 65 chr19 52732200 52732500 0.6105 62 chr19 52802700 52803300 0.317 191 chr19 52888200 52888500 0.0797 53 chr19 53014200 53014800 0.0649 69 chr19 53049300 53049900 0.0059 72 chr19 53097000 53097300 0.0819 79 chr19 53113200 53113500 0.0981 41 chr19 53126400 53127300 0.0004 66 chr19 53169900 53170200 0.3621 25 chr19 53185200 53188800 0 74 chr19 53281800 53282100 0.2322 61 chr19 53283600 53284200 0.4114 68 chr19 53299800 53300400 0.3826 69 chr19 53301600 53301900 0.1905 71 chr19 53648700 53649000 0.5059 58 chr19 53962500 53962800 0.4281 27 chr19 53990700 53991000 0.6539 46 chr19 54172200 54172500 0.5712 31 chr19 54220200 54220500 0.4905 64 chr19 54322800 54323100 0.4763 71 chr19 54349500 54349800 0.5399 250 chr19 54360000 54360300 0.0974 73 chr19 54413700 54414000 0.6823 65 chr19 54471900 54472500 0.5526 44 chr19 54508800 54510300 0.3773 81 chr19 54580200 54581400 0 74 chr19 54644700 54645300 0.3421 56 chr19 54680400 54680700 0.5696 14 chr19 54693000 54693300 0.6316 111 chr19 54748500 54750000 0.2692 63 chr19 54780000 54781200 0.1369 60 chr19 54824700 54825000 0.671 21 chr19 54833400 54834000 0.6151 30 chr19 54844200 54844500 0.3422 27 chr19 54964800 54966000 0.3147 47 chr19 54970800 54971100 0.3664 28 chr19 54998400 54998700 0.333 110 chr19 55026900 55027200 0.3788 40 chr19 55033200 55033500 0.6309 76 chr19 55093500 55094100 0.4238 46 chr19 55208400 55208700 0.5211 30 chr19 55434600 55435200 0.5583 53 chr19 55450200 55450500 0.2292 52 chr19 55472100 55472400 0.4325 39 chr19 55763400 55764000 0.3647 100 chr19 55768200 55768500 0.4595 62 chr19 55773000 55774500 0.0363 97 chr19 55823700 55827300 0 71 chr19 55850100 55851600 0.4654 94 chr19 55862100 55862700 0.5235 60 chr19 56080200 56080500 0.0022 32 chr19 56103900 56104500 0.2659 25 chr19 56150700 56151600 0.3374 76 chr19 56176200 56176500 0.6667 48 chr19 56235000 56236200 0.3537 78 chr19 56306400 56307000 0.2272 39 chr19 56339100 56339700 0.023 79 chr19 56444700 56445900 0.0672 79 chr19 56600100 56600400 0.3368 30 chr19 56669700 56670000 0.2661 59 chr19 56744700 56745900 0.1629 218 chr19 57148200 57148800 0.1221 56 chr19 57169200 57169500 0.2278 25 chr19 57206700 57207000 0.4028 62 chr19 57249600 57249900 0.4138 65 chr19 57483000 57483300 0.3161 27 chr19 57488100 57488400 0.3829 59 chr19 57808800 57809100 0.4509 61 chr19 57833100 57835800 0.0192 83 chr19 57858600 57858900 0.4718 87 chr19 57879900 57882600 0.0865 101 chr19 57909600 57909900 0.6043 55 chr19 58106400 58106700 0.1481 17 chr19 58337400 58337700 0.1195 55 chr19 58404300 58404600 0.2187 58 chr19 58526400 58526700 0.6439 33 chr19 58539000 58542300 0.4149 110 chr19 58587300 58587900 0.0437 88 chr19 58589100 58589400 0.0437 88 chr19 58591500 58606200 0.002 99 chr19 58607400 58607700 0.5808 26 chr2 127200 127500 0.3351 76 chr2 197700 198600 0.0219 46 chr2 207000 207600 0.1359 138 chr2 235500 236100 0.6113 50 chr2 293700 294300 0.4876 46 chr2 306600 308700 0.211 120 chr2 399000 400800 0.3463 72 chr2 420300 421200 0.0257 41 chr2 426900 427500 0.4499 50 chr2 488100 488400 0.0756 14 chr2 495300 495900 0.0635 46 chr2 604800 605100 0.6397 57 chr2 671400 672000 0.1278 61 chr2 800400 803400 0.0168 99 chr2 804600 805200 0.0168 99 chr2 846600 846900 0.3029 45 chr2 849600 849900 0.6531 24 chr2 861000 861300 0.2527 22 chr2 879000 879600 0.4135 64 chr2 909900 910200 0.6155 60 chr2 913500 913800 0.6713 30 chr2 927900 928500 0.3437 111 chr2 931800 932400 0.042 110 chr2 965100 965400 0.6409 139 chr2 970500 970800 0.2222 69 chr2 1012800 1014300 0.0251 38 chr2 1094400 1094700 0.6461 32 chr2 1106700 1109100 0 72 chr2 1179900 1180500 0.3586 88 chr2 1221600 1223400 0.1335 429 chr2 1316700 1317600 0.3782 35 chr2 1342500 1346100 0 61 chr2 1417200 1418100 0.0187 77 chr2 1444500 1445700 0.1581 47 chr2 1457100 1457400 0.6384 45 chr2 1490100 1490400 0.2577 29 chr2 1529100 1529400 0.3412 15 chr2 1530900 1531200 0.6862 12 chr2 1533600 1533900 0.6423 20 chr2 1568700 1569000 0.2091 36 chr2 1619400 1619700 0.615 50 chr2 1695600 1695900 0.6113 56 chr2 1704300 1704600 0.6982 16 chr2 1707000 1707300 0.5797 70 chr2 1750500 1750800 0.2871 70 chr2 1763700 1764000 0.4063 63 chr2 1780500 1780800 0.6984 51 chr2 1797900 1798200 0.5202 37 chr2 1829400 1829700 0.6092 52 chr2 2034300 2036400 0.0236 50 chr2 2138100 2138700 0.0578 79 chr2 2202900 2203200 0.3788 76 chr2 2257800 2259300 0.0011 122 chr2 2295600 2295900 0.5798 139 chr2 2650200 2650500 0.4472 57 chr2 2736300 2736900 0.4243 66 chr2 2792700 2793000 0.4833 69 chr2 3221100 3221700 0.0063 147 chr2 3284100 3284400 0.5378 56 chr2 3315300 3316200 0.0731 62 chr2 3331200 3332100 0.0924 106 chr2 3374700 3375300 0.0953 105 chr2 3437100 3438000 0.3468 41 chr2 3590100 3592200 0.0064 138 chr2 3651300 3651600 0.5201 61 chr2 3690300 3690600 0.5942 19 chr2 3725400 3725700 0.6268 142 chr2 3775200 3775800 0.0633 34 chr2 3795300 3798600 0.1463 100 chr2 4147500 4147800 0.3472 48 chr2 4159200 4160400 0.2177 93 chr2 4161900 4163400 0.2177 93 chr2 4471200 4471500 0.4452 57 chr2 4644000 4648200 0.2045 85 chr2 4733700 4739700 0 98 chr2 4795200 4795500 0.5361 37 chr2 5049900 5050200 0.2386 56 chr2 5069100 5069400 0.2057 22 chr2 5196900 5199300 0.0379 77 chr2 5280300 5280600 0.3297 55 chr2 5383800 5384100 0.5411 62 chr2 5628300 5628600 0.399 87 chr2 5637600 5637900 0.333 62 chr2 5639700 5640000 0.259 54 chr2 5644200 5644500 0.2666 73 chr2 5706300 5706600 0.5207 26 chr2 5744700 5745000 0.5878 57 chr2 6238200 6238800 0.0122 59 chr2 6420000 6420300 0.6923 44 chr2 7120500 7121400 0.277 94 chr2 7133400 7133700 0.6756 65 chr2 7337700 7338000 0.6225 62 chr2 7488600 7489200 0.2343 48 chr2 7877400 7877700 0.4698 51 chr2 8041200 8041800 0.2863 83 chr2 9406200 9406500 0.1486 29 chr2 9740100 9740400 0.6089 58 chr2 10399200 10399500 0.3314 226 chr2 10536300 10536600 0.598 65 chr2 10804500 10806000 0.1749 69 chr2 10902000 10902900 0.4168 88 chr2 10953600 10954200 0.4391 220 chr2 10996200 11001900 0 101 chr2 11091900 11092200 0.0611 12 chr2 11113500 11113800 0.6225 21 chr2 11176500 11176800 0.481 53 chr2 11854500 11854800 0.5614 21 chr2 12123000 12123300 0.5968 41 chr2 12346200 12347100 0.3467 77 chr2 12492000 12492900 0.3633 71 chr2 12522300 12526500 0 102 chr2 12927300 12927900 0.0647 74 chr2 13734300 13735800 0.1792 86 chr2 13749900 13750200 0.3973 76 chr2 13808700 13809600 0.3117 57 chr2 13867800 13868100 0.383 48 chr2 13882800 13883100 0.5123 76 chr2 13946700 13947000 0.4236 78 chr2 14489100 14489400 0.0657 63 chr2 14501700 14502300 0.1877 77 chr2 14504400 14504700 0.358 54 chr2 14662200 14663100 0.1065 94 chr2 14801700 14802300 0.124 63 chr2 14848800 14849100 0.0762 106 chr2 14850600 14853600 0.0762 106 chr2 15026100 15026400 0.3386 22 chr2 15098100 15098400 0.6997 13 chr2 15219300 15220200 0.3652 77 chr2 15441300 15441600 0.4248 117 chr2 15443400 15443700 0.4525 75 chr2 15445200 15445500 0.3552 65 chr2 15542100 15542400 0.3283 41 chr2 15610800 15612000 0.3451 51 chr2 15681000 15681300 0.6351 19 chr2 16230300 16233300 0.209 108 chr2 16234800 16235100 0.209 108 chr2 16593900 16599600 0 117 chr2 16876800 16877100 0.2049 73 chr2 16878600 16878900 0.2049 73 chr2 17946300 17946900 0.4035 38 chr2 17963700 17964000 0.6618 25 chr2 17984100 17985300 0 76 chr2 18012300 18014400 0.0398 94 chr2 18015600 18016200 0.0398 94 chr2 18635700 18636000 0.2804 39 chr2 18756000 18756300 0.1515 24 chr2 19164600 19164900 0.4035 77 chr2 19307100 19307400 0.2417 72 chr2 19309500 19310700 0.0924 130 chr2 19831500 19833000 0.2034 87 chr2 19985400 19985700 0.6431 78 chr2 20466900 20467200 0.4119 40 chr2 20598600 20598900 0.5789 42 chr2 20820600 20820900 0.1216 69 chr2 20906400 20906700 0.2978 58 chr2 21067500 21067800 0.3466 86 chr2 21187500 21188400 0.2198 86 chr2 21208800 21210300 0.3165 71 chr2 21903600 21903900 0.2475 94 chr2 21905400 21908100 0.2475 94 chr2 22055100 22055400 0.5345 34 chr2 22158900 22159200 0.2378 85 chr2 22985100 22985700 0.0499 99 chr2 22986900 22988400 0.0499 99 chr2 23224800 23230500 0 87 chr2 23845800 23847300 0 54 chr2 24193800 24194100 0.4981 69 chr2 24334800 24335100 0.4397 37 chr2 25046400 25046700 0.6214 60 chr2 25552800 25553100 0.4096 51 chr2 25910400 25910700 0.5449 57 chr2 26656200 26656500 0.3134 53 chr2 27359100 27360300 0.1441 74 chr2 27460200 27461100 0.0332 83 chr2 27539400 27541200 0.1751 100 chr2 27556800 27558900 0 90 chr2 28126500 28126800 0.1744 74 chr2 28131000 28131300 0.3691 28 chr2 28458600 28459200 0.0194 47 chr2 29092800 29094600 0.1604 91 chr2 29445900 29446200 0.3851 52 chr2 29512500 29514300 0.4876 79 chr2 29672700 29674200 0.3837 78 chr2 30451500 30451800 0.4689 55 chr2 30553500 30553800 0.4145 66 chr2 30596700 30597000 0.1278 55 chr2 30606300 30606600 0.2612 72 chr2 30613800 30614400 0.045 71 chr2 30643200 30643500 0.6804 42 chr2 30720600 30720900 0.366 72 chr2 30816900 30817500 0.0104 59 chr2 30852900 30853500 0.3803 77 chr2 30868500 30868800 0.521 41 chr2 30904800 30905100 0.132 82 chr2 30906300 30909900 0.132 82 chr2 31119900 31120200 0.328 28 chr2 31437300 31437600 0.4277 72 chr2 31500000 31500900 0.2163 82 chr2 31576200 31577100 0.0232 55 chr2 31731600 31731900 0.5646 26 chr2 32110800 32111400 0.3083 35 chr2 32200500 32200800 0.4167 93 chr2 32446800 32448300 0.1032 79 chr2 32754300 32754600 0.2886 34 chr2 32866500 32867100 0.0179 2767 chr2 32868300 32870400 0.0179 2767 chr2 32916000 32916900 0.0063 213491 chr2 33556200 33556500 0.4155 38 chr2 33732000 33732300 0.5522 51 chr2 34572600 34576500 0 89 chr2 34793100 34793400 0.4415 59 chr2 34816500 34817400 0.4437 45 chr2 34819500 34820100 0.1715 68 chr2 35107800 35108100 0.2307 58 chr2 35865600 35865900 0.5708 58 chr2 36098700 36099000 0.5423 65 chr2 36112800 36118500 0 87 chr2 36182400 36184500 0.0808 173 chr2 36728400 36728700 0.2694 31 chr2 37225500 37226100 0.0834 71 chr2 37494000 37494900 0.0076 72 chr2 37932300 37932600 0.4906 62 chr2 38492700 38493300 0.2693 58 chr2 38755500 38755800 0.4046 63 chr2 38844300 38844600 0.2672 25 chr2 40010400 40010700 0.3737 36 chr2 40012800 40013100 0.3483 60 chr2 40235700 40236000 0.4343 61 chr2 40492500 40492800 0.5283 71 chr2 40566900 40567200 0.3458 46 chr2 40692600 40692900 0.2555 78 chr2 40924800 40925100 0.4852 56 chr2 41273400 41274000 0.2852 77 chr2 41514900 41515500 0.1615 72 chr2 41550000 41553600 0 71 chr2 41746200 41748600 0.0085 70 chr2 42391500 42391800 0.3883 50 chr2 42605100 42605400 0.3174 67 chr2 42606600 42606900 0.5181 69 chr2 42990900 42991500 0.0543 85 chr2 42992700 42995400 0.0543 85 chr2 43296900 43298700 0.0971 74 chr2 43431600 43432200 0.4564 62 chr2 43660500 43665900 0 112 chr2 44260800 44261100 0.3817 77 chr2 44587500 44589600 0.0206 47 chr2 44630700 44631000 0.3881 60 chr2 45059700 45065400 0 111 chr2 45075900 45081600 0 109 chr2 45414900 45415200 0.5029 27 chr2 45829800 45830100 0.6265 49 chr2 46683000 46683300 0.3103 32 chr2 47100300 47100600 0.294 50 chr2 48554700 48557700 0.0693 76 chr2 48744000 48744600 0.0567 95 chr2 49008600 49011300 0.1997 92 chr2 49127700 49128000 0.6568 46 chr2 49385700 49386000 0.3689 29 chr2 49493100 49493400 0.4312 54 chr2 49638900 49639800 0.055 75 chr2 49875300 49875600 0.4352 80 chr2 51381600 51382200 0.3029 74 chr2 51735300 51737400 0.0321 88 chr2 51852600 51853200 0.4032 48 chr2 51854700 51855000 0.3182 37 chr2 51939000 51939900 0.0615 79 chr2 52040400 52041000 0.2377 61 chr2 52155900 52156200 0.4802 43 chr2 52173300 52173600 0.4862 55 chr2 52715700 52716000 0.3584 46 chr2 53398500 53400900 0 128 chr2 53589600 53592900 0.0393 81 chr2 54873600 54873900 0.1709 55 chr2 55736700 55737000 0.0959 117 chr2 55739400 55740000 0.0959 117 chr2 55774200 55774500 0.1371 50 chr2 56172900 56173500 0.3665 95 chr2 56552100 56552400 0.1106 55 chr2 56555400 56555700 0.385 25 chr2 56622900 56623200 0.4338 26 chr2 56661900 56662200 0.4755 74 chr2 56663700 56664600 0.1714 74 chr2 56682600 56684100 0.0145 78 chr2 56791200 56792400 0.4643 64 chr2 57115500 57115800 0.4387 39 chr2 57192300 57193500 0 30 chr2 57381600 57381900 0.2234 67 chr2 57422100 57422700 0.2191 109 chr2 57423900 57424200 0.0954 108 chr2 57556800 57557100 0.288 70 chr2 57559500 57561300 0.3233 86 chr2 57588900 57589200 0.4688 66 chr2 57590400 57592200 0.0667 116 chr2 57612600 57613200 0.2337 79 chr2 58134300 58134600 0.4377 44 chr2 58264800 58265100 0.4316 66 chr2 58382100 58385400 0.1843 75 chr2 59162400 59163000 0.1062 70 chr2 59554800 59559000 0.1204 94 chr2 59648100 59648400 0.4116 56 chr2 59838900 59839200 0.2902 60 chr2 60084600 60089100 0 154 chr2 60141600 60146100 0.1105 111 chr2 60193500 60194100 0.3186 78 chr2 60467400 60467700 0.5732 46 chr2 60928500 60929700 0.1351 93 chr2 61979700 61980600 0.0088 93 chr2 62646900 62648100 0.4164 71 chr2 62649300 62649900 0.4164 71 chr2 62836200 62841000 0.1456 101 chr2 63877800 63878100 0.4668 38 chr2 64375500 64376100 0.4061 184 chr2 64511100 64513200 0 77 chr2 64548000 64548300 0.3369 38 chr2 65338500 65338800 0.2711 70 chr2 65600700 65601000 0.4449 59 chr2 65676600 65676900 0.5212 25 chr2 66116700 66117000 0.489 75 chr2 66141900 66142800 0.0368 71 chr2 66178800 66183000 0.3136 90 chr2 66211800 66212100 0.3432 78 chr2 66391800 66392400 0.5015 65 chr2 66395700 66397200 0.2948 85 chr2 66627600 66627900 0.3001 75 chr2 66642900 66643200 0.5404 74 chr2 66718800 66719100 0.4123 64 chr2 66909600 66909900 0.4648 61 chr2 67176600 67177200 0.3163 69 chr2 67906500 67906800 0.4452 61 chr2 68445900 68446200 0.307 45 chr2 68613900 68614200 0.3969 79 chr2 68617800 68618100 0.4326 97 chr2 68678400 68678700 0.5062 66 chr2 70429500 70431000 0.0996 66 chr2 70434300 70435200 0.2783 51 chr2 70555800 70556100 0.4579 60 chr2 71050800 71051100 0.2773 32 chr2 71083200 71084100 0.0076 63 chr2 71182800 71183700 0.0014 73 chr2 71266500 71266800 0.4881 108 chr2 71411400 71417100 0 97 chr2 71623200 71623500 0.5033 56 chr2 71769000 71770200 0.0293 68 chr2 72016200 72020700 0.0718 69 chr2 72064800 72068700 0.0116 99 chr2 72266100 72266400 0.3052 71 chr2 72642000 72643500 0.2322 82 chr2 72653100 72653400 0.3857 64 chr2 72702300 72705000 0.0141 97 chr2 73127400 73127700 0.5632 37 chr2 73166700 73167000 0.1394 81 chr2 73170600 73170900 0.4836 71 chr2 73463400 73463700 0.247 72 chr2 73480500 73480800 0.3942 75 chr2 73482900 73484100 0.3942 75 chr2 73724400 73724700 0.2881 74 chr2 73785000 73807800 0 144 chr2 74284200 74284500 0.4131 38 chr2 74561100 74561400 0.6411 203 chr2 74793900 74795400 0.1313 60 chr2 74797200 74797500 0.3487 66 chr2 74970000 74971500 0.437 66 chr2 75330900 75331800 0.1244 93 chr2 75576300 75576600 0.3984 51 chr2 76299300 76301700 0 106 chr2 76480500 76481100 0.1398 75 chr2 76648200 76648800 0.3838 70 chr2 76705800 76706100 0.4106 65 chr2 76776600 76778400 0.1296 87 chr2 76798500 76798800 0.3244 81 chr2 76800300 76800900 0.3244 81 chr2 76906500 76908000 0.454 69 chr2 77244000 77244300 0.185 85 chr2 77292000 77292600 0.3741 71 chr2 77596800 77598600 0.1228 108 chr2 77646300 77647800 0.0243 127 chr2 77667900 77668200 0.2546 53 chr2 77669400 77670900 0.2 53 chr2 77672400 77672700 0.2 53 chr2 77674800 77676600 0.2 53 chr2 77680200 77684700 0.0223 74 chr2 77686500 77688000 0.0223 74 chr2 77689200 77689500 0.0223 74 chr2 77755800 77757300 0.0549 123 chr2 77758500 77758800 0.0549 123 chr2 77794500 77795400 0.1284 108 chr2 78170700 78171000 0.4824 60 chr2 78422700 78423000 0.4378 77 chr2 78702000 78702300 0.4045 70 chr2 78830700 78831000 0.5505 51 chr2 79105800 79109700 0.0188 112 chr2 79283100 79285800 0.0203 94 chr2 79409400 79410300 0.3518 89 chr2 81314700 81315000 0.2814 80 chr2 81351300 81353100 0.0277 53 chr2 81475800 81476100 0.3788 29 chr2 81607800 81609600 0.1393 83 chr2 82113300 82113600 0.3721 18 chr2 82840500 82841100 0.3661 36 chr2 82887000 82887300 0.6816 53 chr2 83089800 83094600 0.1351 91 chr2 83769300 83773800 0 115 chr2 83839800 83840100 0.3487 64 chr2 83914500 83915100 0.1004 29 chr2 83957700 83958000 0.3136 40 chr2 84229800 84230100 0.2962 40 chr2 84371100 84372000 0.0106 104 chr2 84531300 84531600 0.2597 15 chr2 84794400 84795000 0.2554 112 chr2 85099800 85100100 0.4932 32 chr2 85108200 85108500 0.4144 49 chr2 85292100 85292400 0.5159 36 chr2 85483200 85485000 0.0213 118 chr2 85489200 85489800 0.0448 99 chr2 85633800 85634100 0.421 43 chr2 86544900 86545200 0.6389 24 chr2 86654400 86660700 0 112 chr2 86711700 86713800 0.031 65 chr2 86715300 86717400 0.0391 67 chr2 86719200 86719800 0.0391 67 chr2 86721900 86742300 0 87 chr2 86841000 86841300 0.3459 63 chr2 86863500 86863800 0.5873 68 chr2 86865900 86866200 0.542 56 chr2 86871000 86871300 0.578 65 chr2 86891100 86891400 0.4309 64 chr2 86902500 86902800 0.4977 91 chr2 86905800 86913300 0 85 chr2 86915400 86926500 0 121 chr2 86927700 86940600 0 121 chr2 86945700 87049500 0 100 chr2 87052500 87052800 0 87 chr2 87054600 87066600 0 87 chr2 87068700 87069900 0 87 chr2 87071400 87075000 0 87 chr2 87077100 87081300 0.1687 80 chr2 87082800 87083400 0.1687 80 chr2 87084600 87084900 0.1687 80 chr2 87089100 87089700 0.3716 52 chr2 87093300 87096000 0.44 65 chr2 87097200 87097500 0.545 47 chr2 87101100 87102000 0.345 62 chr2 87104100 87109200 0.0551 65 chr2 87110400 87110700 0.0551 65 chr2 87111900 87113100 0 94 chr2 87114300 87114900 0 94 chr2 87116700 87117000 0 94 chr2 87118200 87129900 0 94 chr2 87132600 87136200 0.0675 66 chr2 87139200 87143100 0.0305 93 chr2 87150600 87163200 0 89 chr2 87164400 87165900 0 89 chr2 87167100 87167400 0.1269 62 chr2 87169800 87170100 0.1269 62 chr2 87171600 87171900 0.1269 62 chr2 87173100 87177000 0.1389 58 chr2 87178500 87181800 0.1389 58 chr2 87183900 87197400 0.0117 73 chr2 87199800 87203100 0.0774 68 chr2 87205800 87206100 0.5035 69 chr2 87207300 87207900 0.015 69 chr2 87209100 87214800 0.0095 64 chr2 87216300 87219300 0.1072 82 chr2 87223800 87224100 0.1155 76 chr2 87225300 87225600 0.1155 76 chr2 87226800 87227700 0.1155 76 chr2 87230700 87236400 0.2123 73 chr2 87238800 87242100 0.0043 81 chr2 87243300 87245100 0.3105 78 chr2 87247200 87249300 0.2219 63 chr2 87250500 87252000 0.4626 108 chr2 87254400 87254700 0.3093 67 chr2 87257700 87258000 0.334 43 chr2 87259200 87260700 0.3846 74 chr2 87261900 87262500 0.2624 67 chr2 87265200 87268500 0 83 chr2 87270000 87273600 0 83 chr2 87275100 87279000 0 83 chr2 87280500 87281100 0.0631 66 chr2 87282300 87282900 0.0631 66 chr2 87284400 87286200 0.2823 102 chr2 87288600 87290400 0.2322 72 chr2 87292200 87292500 0.3352 67 chr2 87298200 87298800 0.0279 72 chr2 87302100 87303600 0.0113 65 chr2 87307500 87312600 0.0269 100 chr2 87313800 87314100 0.636 67 chr2 87315900 87316200 0.0855 61 chr2 87319200 87319500 0.1 80 chr2 87321000 87321900 0.33 72 chr2 87324900 87326700 0.1244 78 chr2 87328800 87329100 0.5165 76 chr2 87330600 87332700 0.2911 71 chr2 87336600 87336900 0.1158 120 chr2 87338100 87339000 0.1158 120 chr2 87340500 87341100 0.1158 120 chr2 87344100 87344400 0.3383 92 chr2 87345600 87346200 0.3918 53 chr2 87349200 87351000 0.0153 88 chr2 87353100 87353400 0.0134 144 chr2 87355200 87358200 0.0134 144 chr2 87360900 87363000 0.0134 144 chr2 87366600 87375000 0.0134 144 chr2 87377400 87391800 0 132 chr2 87393600 87395700 0 132 chr2 87398100 87398700 0.6394 239 chr2 87404100 87410400 0 222 chr2 87412500 87414300 0.3915 82 chr2 87415500 87424800 0.1195 417 chr2 87427500 87431400 0.4092 277 chr2 87432900 87434100 0.0701 78 chr2 87446100 87451800 0.1392 78 chr2 87455100 87457500 0.2093 74 chr2 87459000 87459300 0.2093 74 chr2 87460800 87461400 0.2093 74 chr2 87463200 87463500 0.2093 74 chr2 87465000 87465300 0.2093 74 chr2 87472800 87474000 0.1064 72 chr2 87486000 87486300 0.5423 73 chr2 87492300 87492600 0.5596 76 chr2 87494400 87494700 0.3982 56 chr2 87496500 87499800 0 76 chr2 87501600 87507600 0 73 chr2 87510300 87516300 0 76 chr2 87517500 87521100 0 76 chr2 87522600 87524400 0 76 chr2 87526200 87527100 0 82 chr2 87528600 87531300 0 92 chr2 87532800 87538800 0 92 chr2 87540000 87551100 0 92 chr2 87552300 87552900 0.2778 50 chr2 87554700 87557700 0.0024 73 chr2 87559200 87566100 0 86 chr2 87570300 87574800 0.0239 70 chr2 87577200 87577800 0 80 chr2 87579600 87579900 0 80 chr2 87581700 87582900 0 80 chr2 87588000 87588600 0.3099 57 chr2 87591000 87593100 0.2023 70 chr2 87594300 87617100 0 92 chr2 87618600 87634200 0 92 chr2 87635400 87636000 0 92 chr2 87642300 87643800 0.5504 91 chr2 87645000 87645600 0.2373 61 chr2 87648000 87649200 0.0879 75 chr2 87650400 87651600 0.0879 75 chr2 87653100 87654300 0.0626 72 chr2 87655800 87657600 0.0982 64 chr2 87663000 87669600 0 78 chr2 87671100 87671700 0.4873 92 chr2 87673200 87674400 0.0852 71 chr2 87676200 87678000 0.0852 71 chr2 87680100 87682500 0.0174 74 chr2 87684300 87685200 0.3437 69 chr2 87686400 87687600 0.014 72 chr2 87690900 87691200 0.0439 67 chr2 87693600 87696600 0 74 chr2 87698700 87705900 0 74 chr2 87708300 87711900 0.0044 74 chr2 87714300 87718800 0 103 chr2 87720000 87730500 0 103 chr2 87731700 87734700 0 103 chr2 87735900 87824100 0 103 chr2 87826200 87830100 0 51 chr2 87831600 87836100 0 69 chr2 87837300 87852300 0 69 chr2 87854100 87856500 0.0419 62 chr2 87858900 87863400 0.0011 60 chr2 87865500 87866100 0.0077 64 chr2 87867300 87869700 0.0077 64 chr2 87871200 87871500 0.0855 60 chr2 87873300 87874800 0.0855 60 chr2 87879600 87881700 0.0113 52 chr2 87885600 87885900 0 77 chr2 87887400 87912900 0 77 chr2 87914100 87914700 0 77 chr2 87916200 87919200 0.0219 51 chr2 87920400 87921000 0.2452 39 chr2 87922500 87934200 0 58 chr2 87935700 87936900 0 58 chr2 87938400 87939300 0 55 chr2 87941400 87947100 0 61 chr2 87948600 87951300 0 61 chr2 87953100 87956700 0 52 chr2 87958800 87961200 0.0033 51 chr2 87962700 87963900 0 79 chr2 87965100 87972600 0 79 chr2 87974100 87984000 0 79 chr2 87987300 87992700 0.0042 66 chr2 88021500 88021800 0.453 20 chr2 88065000 88065300 0.6337 23 chr2 88181100 88181700 0.3631 71 chr2 88301400 88301700 0.4961 43 chr2 88306500 88306800 0.5229 59 chr2 88729800 88732800 0 100 chr2 88794300 88794600 0.2515 82 chr2 89031000 89031300 0.4411 50 chr2 89042700 89043000 0.4279 60 chr2 89046300 89047500 0.5225 73 chr2 89059500 89059800 0.426 67 chr2 89061600 89061900 0.426 67 chr2 89066100 89066400 0.4123 55 chr2 89070000 89071800 0.1162 82 chr2 89075700 89078100 0.1931 76 chr2 89079900 89085600 0.1931 76 chr2 89088600 89088900 0.4286 58 chr2 89091300 89091600 0.5837 54 chr2 89096400 89097000 0.0497 65 chr2 89105400 89110800 0.0129 71 chr2 89116800 89117100 0.3618 66 chr2 89121600 89121900 0.109 71 chr2 89123100 89123700 0.109 71 chr2 89136300 89136600 0.3633 58 chr2 89153700 89154300 0.2966 53 chr2 89156700 89158800 0.0684 70 chr2 89160000 89160300 0.3991 64 chr2 89164500 89165100 0.3516 61 chr2 89166300 89166600 0.4753 61 chr2 89170200 89170500 0.3343 70 chr2 89171700 89173800 0.0141 92 chr2 89176800 89177100 0.1911 62 chr2 89190300 89190900 0.2762 42 chr2 89195100 89195400 0.3659 56 chr2 89196900 89197200 0.2979 64 chr2 89202900 89203200 0.5531 53 chr2 89216400 89217000 0.4357 75 chr2 89219400 89219700 0.4154 57 chr2 89221800 89222100 0.2909 71 chr2 89226300 89227500 0.5265 83 chr2 89231100 89231400 0 71 chr2 89232600 89232900 0 71 chr2 89235000 89239200 0 71 chr2 89242200 89242800 0.0338 64 chr2 89248200 89252400 0.0238 72 chr2 89254800 89260200 0 73 chr2 89262300 89262600 0.0741 60 chr2 89265300 89266500 0.0699 67 chr2 89267700 89269800 0.0699 67 chr2 89271900 89285100 0 87 chr2 89286300 89295300 0 87 chr2 89297100 89298000 0 87 chr2 89300100 89301300 0.5094 69 chr2 89303100 89304600 0 66 chr2 89306100 89310300 0 66 chr2 89312100 89312400 0.5099 49 chr2 89313900 89330700 0 104 chr2 89530500 89578500 0 138 chr2 89579700 89583300 0 116 chr2 89584500 89593500 0 116 chr2 89597400 89597700 0.2644 100 chr2 89599500 89602500 0.2289 115 chr2 89604300 89604900 0.2289 115 chr2 89607600 89607900 0.2433 124 chr2 89609700 89610000 0.4297 57 chr2 89616000 89616300 0.4636 83 chr2 89617800 89618400 0.4721 63 chr2 89625900 89626200 0.6338 42 chr2 89627400 89629800 0.2903 90 chr2 89631600 89634900 0.0151 150 chr2 89636700 89638200 0.0076 112 chr2 89639700 89642400 0.1699 128 chr2 89645700 89646900 0.0088 111 chr2 89649000 89652600 0.0088 111 chr2 89654100 89654400 0.0088 111 chr2 89658900 89660100 0.1463 105 chr2 89811300 89813400 0.4437 319 chr2 89815500 89818800 0.3124 522 chr2 89820000 89820300 0.3166 484 chr2 89821500 89822700 0.3166 484 chr2 89824200 89841300 0.1111 12789 chr2 89852100 89868600 0 98 chr2 89872200 89876400 0 74 chr2 89877900 89879400 0 74 chr2 89881200 89882400 0 74 chr2 89884200 89885400 0 83 chr2 89887200 89896200 0 80 chr2 89897400 89910600 0 80 chr2 89913300 89917200 0 80 chr2 89919600 89920200 0.2458 70 chr2 89922300 89927700 0 70 chr2 89928900 89932800 0 70 chr2 89934000 89934300 0 70 chr2 89939700 89940300 0.0836 64 chr2 89942700 89947500 0 72 chr2 89949600 89951400 0 72 chr2 89955000 89955900 0.4537 66 chr2 89960400 89960700 0.1399 67 chr2 89962800 89963100 0.4536 63 chr2 89965800 89966400 0.2618 69 chr2 89977800 89978100 0.51 61 chr2 89985600 89985900 0.2059 61 chr2 89987400 89987700 0.5429 49 chr2 89991900 89992500 0.2491 45 chr2 90004800 90005400 0.2195 65 chr2 90008400 90010200 0.0646 73 chr2 90013200 90013800 0.4535 66 chr2 90016800 90017400 0.3662 67 chr2 90021600 90021900 0.4878 57 chr2 90023100 90025200 0.2003 58 chr2 90027600 90028200 0.3025 65 chr2 90058200 90060300 0.022 70 chr2 90083700 90084000 0.2116 62 chr2 90090000 90095100 0.0802 61 chr2 90098100 90099300 0.4091 73 chr2 90102900 90104400 0.0509 73 chr2 90109500 90109800 0.4323 55 chr2 90111600 90111900 0.3705 51 chr2 90114300 90120000 0.0931 69 chr2 90122400 90122700 0.0931 69 chr2 90124500 90124800 0.0931 69 chr2 90128700 90130500 0.2593 70 chr2 90132900 90134400 0.5327 66 chr2 90138900 90139200 0.3706 65 chr2 90153000 90155400 0.1782 64 chr2 90157500 90158100 0.1782 64 chr2 90159900 90160500 0.2299 43 chr2 90162900 90163200 0.2299 43 chr2 90230700 90231000 0.3816 65 chr2 90232800 90233100 0.2905 72 chr2 90234900 90235500 0.2905 72 chr2 90237000 90237600 0.0738 95 chr2 90240300 90244200 0.1821 91 chr2 90246000 90247200 0.0021 101 chr2 90248700 90249900 0.0021 101 chr2 90251100 90252900 0.1622 130 chr2 90254400 90254700 0.1622 130 chr2 90258600 90265200 0 181 chr2 90266400 90267000 0 181 chr2 90268500 90289200 0 181 chr2 90291600 90292500 0.5261 307 chr2 90299400 90309000 0 97 chr2 90310500 90310800 0.6001 43 chr2 90313200 90323100 0.003 127 chr2 90324300 90339900 0 198 chr2 90341400 90369900 0 198 chr2 90371100 90375900 0 198 chr2 90377100 90377700 0 198 chr2 90379500 90379800 0.1421 725 chr2 90386400 90390300 0.2503 2573 chr2 90391500 90397200 0.2503 2573 chr2 90399000 90402600 0.1585 1948 chr2 91402500 91407300 0 161 chr2 91416000 91423500 0 770 chr2 91425300 91425900 0.346 136 chr2 91428300 91431900 0.0117 225 chr2 91433400 91441800 0.0447 333 chr2 91445100 91445700 0 183 chr2 91447200 91451100 0 183 chr2 91452600 91461900 0 183 chr2 91463700 91466700 0.0481 216 chr2 91468800 91472100 0 188 chr2 91474200 91476000 0 188 chr2 91479600 91487700 0.0005 174 chr2 91488900 91494600 0.0005 174 chr2 91503300 91503600 0.6706 186 chr2 91504800 91527000 0 440 chr2 91529400 91533600 0.0304 132 chr2 91535700 91548000 0 174 chr2 91550400 91558200 0 169 chr2 91563000 91564500 0.125 144 chr2 91567200 91567500 0.5442 124 chr2 91569600 91571100 0.0023 135 chr2 91574700 91575300 0.0194 120 chr2 91579200 91579500 0.2819 110 chr2 91591500 91591800 0.4118 113 chr2 91600800 91601700 0.1142 140 chr2 91603800 91659300 0 152 chr2 91660500 91671900 0 152 chr2 91673700 91675800 0 152 chr2 91678500 91680600 0.1018 81 chr2 91681800 91682400 0 217 chr2 91683900 91685700 0 217 chr2 91688100 91690500 0 217 chr2 91691700 91692900 0 217 chr2 91694700 91697700 0 217 chr2 91698900 91714500 0 217 chr2 91715700 91728900 0 217 chr2 91733100 91733400 0.1128 63 chr2 91752300 91752600 0.3618 74 chr2 91762200 91762500 0.5595 65 chr2 91789200 91789500 0.6487 111 chr2 91791300 91791900 0 119 chr2 91794000 91839300 0 119 chr2 91860300 91860600 0.391 96 chr2 91889700 91890300 0.6601 99 chr2 91893000 91893300 0.6547 111 chr2 91895100 91896300 0.5753 124 chr2 91921800 91922100 0.2417 93 chr2 91924200 91924800 0.1011 92 chr2 91926300 91926900 0.1011 92 chr2 91969200 91969500 0.3977 71 chr2 91971000 91971600 0.5076 96 chr2 92013300 92061300 0 144 chr2 92063400 92063700 0 144 chr2 92071500 92071800 0.6448 86 chr2 92082000 92133000 0 108 chr2 92134500 92138100 0 44 chr2 92188200 92645700 0 654 chr2 92646900 92694900 0 654 chr2 92696100 92760300 0 654 chr2 92762100 92872800 0 453 chr2 92874000 92886900 0 453 chr2 92888700 92933100 0 453 chr2 92934300 92946300 0 453 chr2 92947800 92949600 0 273 chr2 92950800 92954700 0 273 chr2 92955900 92960700 0 418 chr2 92962200 93004500 0 794 chr2 93006300 93014400 0 794 chr2 93015600 93029100 0 794 chr2 93030300 93060900 0 794 chr2 93062400 93085800 0 274 chr2 93087000 93091800 0 233 chr2 93093300 93101100 0 233 chr2 93103200 93146100 0 233 chr2 93147300 93147900 0 258 chr2 93149100 93159900 0 258 chr2 93161100 93192600 0 274 chr2 93193800 93194700 0 355 chr2 93195900 93201000 0 355 chr2 93202500 93281700 0 355 chr2 93282900 93296400 0 355 chr2 93298200 93323700 0 355 chr2 93324900 93325500 0 355 chr2 93327300 93331200 0 355 chr2 93333000 93337500 0 359 chr2 93339000 93343200 0 359 chr2 93345900 93372300 0 359 chr2 93373500 93388800 0 359 chr2 93390000 93395400 0 359 chr2 93396600 93404700 0 356 chr2 93405900 93419700 0 356 chr2 93420900 93434400 0 356 chr2 93435600 93447000 0 356 chr2 93448500 93463200 0 356 chr2 93465300 93485400 0 356 chr2 93486900 93495900 0 356 chr2 93497100 93503700 0 356 chr2 93504900 93506700 0 356 chr2 93508200 93512700 0 356 chr2 93515100 93523800 0 388 chr2 93525000 93562800 0 388 chr2 93564000 93572400 0 388 chr2 93574800 93610800 0 388 chr2 93612000 93612900 0 388 chr2 93614700 93635100 0 388 chr2 93636900 93646200 0 388 chr2 93647400 93679800 0 388 chr2 93681600 93701400 0 235 chr2 93703200 93706500 0 235 chr2 93707700 93733800 0 235 chr2 93735000 93737400 0 235 chr2 93738900 93740700 0 257 chr2 93741900 93783300 0 257 chr2 93784800 93801000 0 257 chr2 93802500 93805200 0 101 chr2 93806400 93831600 0 310 chr2 93832800 93872700 0 310 chr2 93875700 93904500 0 277 chr2 93905700 93948000 0 277 chr2 93950700 93955500 0 277 chr2 93957000 93965700 0 277 chr2 93968100 93973200 0 118 chr2 93975600 93977700 0 175 chr2 93979200 93987300 0 175 chr2 93988500 94006800 0 175 chr2 94008600 94014300 0 175 chr2 94015500 94023300 0 215 chr2 94024800 94061700 0 215 chr2 94062900 94071600 0 253 chr2 94073400 94090500 0 253 chr2 94140600 94167000 0 360 chr2 94171200 94174500 0 77 chr2 94223100 94223400 0.6401 101 chr2 94250100 94250400 0.4799 120 chr2 94257600 94257900 0.2207 125 chr2 94260000 94260600 0.0562 112 chr2 94266300 94266600 0.4332 143 chr2 94269900 94270200 0.6229 138 chr2 94276500 94276800 0.6364 108 chr2 94279500 94280100 0.2011 139 chr2 94285200 94287900 0.2463 185 chr2 94496400 94497600 0.2471 99 chr2 94505400 94506000 0.5015 145 chr2 94530600 94531500 0.6345 214 chr2 94542300 94542600 0.6791 113 chr2 94547100 94547400 0.5548 126 chr2 94565100 94565400 0.6676 140 chr2 94568700 94570200 0.4064 142 chr2 94572300 94572600 0.4513 68 chr2 94581600 94582200 0.1051 62 chr2 94640400 94641300 0.1219 43 chr2 94644300 94644600 0.5112 45 chr2 94714200 94714500 0.4698 60 chr2 94716900 94718400 0.09 86 chr2 94723500 94724100 0.2944 70 chr2 94740000 94740300 0.1102 57 chr2 94828200 94828500 0.2326 71 chr2 94834200 94835400 0.497 52 chr2 94844700 94845000 0.3695 47 chr2 94846800 94847100 0.3951 60 chr2 95244000 95244300 0.2269 77 chr2 95406000 95406300 0.3274 69 chr2 95421000 95424300 0 73 chr2 95426700 95431200 0 84 chr2 95433300 95480100 0 97 chr2 95487600 95489700 0 72 chr2 95580300 95580600 0.4608 56 chr2 95587200 95589300 0 72 chr2 95591700 95592000 0.3781 60 chr2 95596500 95643600 0 86 chr2 95645400 95648400 0 81 chr2 95649900 95655600 0 63 chr2 95748900 95749200 0.4188 66 chr2 95765400 95765700 0.3845 80 chr2 95766900 95767200 0.4463 63 chr2 95772900 95798400 0 93 chr2 95810700 95811000 0.294 76 chr2 95821200 95821800 0.2478 65 chr2 95823000 95823300 0.2478 65 chr2 95843400 95843700 0.2491 64 chr2 95868600 95868900 0.2865 71 chr2 95871900 95872200 0.1468 70 chr2 95877000 95877900 0.129 71 chr2 95879700 95880300 0.3521 66 chr2 95881800 95882100 0.3521 66 chr2 95895000 95895600 0.1546 61 chr2 95898300 95901900 0 69 chr2 95903700 95907900 0 70 chr2 95909100 95909700 0.247 56 chr2 95913000 95913300 0.3458 50 chr2 95918700 95919000 0.5812 46 chr2 95935800 95937000 0.386 209 chr2 95940300 95940900 0.0184 147 chr2 95942100 95943300 0.3581 108 chr2 95946300 95946600 0.1212 102 chr2 95952000 95952300 0.6201 202 chr2 95958600 95959200 0.452 202 chr2 95960700 95961000 0.4137 82 chr2 95963400 95964000 0.0919 63 chr2 95982300 95982900 0.0804 54 chr2 95992200 95992500 0.5406 77 chr2 96010500 96011100 0.1217 82 chr2 96019800 96020100 0.5252 63 chr2 96026400 96051900 0 80 chr2 96053100 96053400 0.0112 75 chr2 96054900 96059700 0.0112 75 chr2 96383100 96384000 0.2894 89 chr2 96444000 96446100 0.0214 107 chr2 96461100 96462600 0.1698 101 chr2 96776700 96777000 0.2438 315 chr2 96805500 96805800 0.0836 50 chr2 97018800 97019100 0.4306 58 chr2 97049400 97050300 0.0101 73 chr2 97051800 97053900 0.0101 73 chr2 97069200 97069500 0.6989 21 chr2 97071300 97072800 0 77 chr2 97075800 97076400 0.1823 56 chr2 97078200 97078500 0.5073 38 chr2 97085100 97085400 0.3454 75 chr2 97090800 97091400 0.2835 42 chr2 97094400 97095000 0.0475 67 chr2 97114200 97114800 0.0838 51 chr2 97118400 97120500 0 68 chr2 97122000 97122900 0.4888 60 chr2 97125900 97127100 0.2497 61 chr2 97141200 97141800 0.2203 47 chr2 97150800 97151400 0.5019 127 chr2 97156500 97157700 0.0651 92 chr2 97162200 97162800 0.0328 152 chr2 97164000 97164300 0.191 139 chr2 97166100 97166700 0.191 139 chr2 97170900 97171500 0.3463 69 chr2 97174800 97176600 0.2025 74 chr2 97177800 97178100 0.2025 74 chr2 97193100 97193400 0.2315 21 chr2 97198800 97199100 0.6913 91 chr2 97213200 97215300 0.0452 84 chr2 97217700 97218000 0.0755 116 chr2 97219500 97222200 0.0755 116 chr2 97223400 97224000 0.0755 116 chr2 97232400 97267200 0 130 chr2 97269000 97293300 0 91 chr2 97294500 97347900 0 91 chr2 97360500 97413900 0 93 chr2 97415400 97439400 0 93 chr2 97489500 97524000 0 130 chr2 97542000 97544400 0.0073 67 chr2 97576500 97577700 0.1957 60 chr2 97580700 97581300 0.026 74 chr2 97583100 97584900 0.026 74 chr2 97588500 97589100 0.1438 53 chr2 97602600 97603800 0 81 chr2 97605600 97608000 0 81 chr2 97611000 97615800 0.0072 79 chr2 97617000 97617300 0.5588 43 chr2 97620000 97621500 0.4359 42 chr2 97630200 97630500 0.3086 67 chr2 97687500 97687800 0.4476 68 chr2 98061600 98062200 0.332 68 chr2 98265600 98266800 0.1671 107 chr2 98268000 98268300 0.3599 76 chr2 98595000 98595300 0.3309 71 chr2 99136500 99136800 0.5825 32 chr2 99300600 99301200 0.2777 48 chr2 99307500 99307800 0.0596 70 chr2 99740400 99740700 0.606 58 chr2 99966300 99966600 0.3608 77 chr2 100081200 100081500 0.6308 58 chr2 100085100 100085700 0.4741 64 chr2 100088400 100090200 0 69 chr2 100091400 100092000 0.1353 64 chr2 100093200 100093500 0.387 59 chr2 100095000 100095300 0.5041 66 chr2 100096500 100103100 0.0012 94 chr2 100109100 100109400 0.3635 69 chr2 101358600 101359200 0.5002 62 chr2 101481300 101481600 0.4957 30 chr2 101748600 101750400 0.1974 101 chr2 102533700 102534000 0.4465 62 chr2 102566400 102572400 0 84 chr2 102875700 102876300 0.2337 84 chr2 104222700 104223000 0.4819 57 chr2 104824200 104824500 0.6689 102 chr2 105054600 105054900 0.2925 22 chr2 105208200 105208500 0 63 chr2 105209700 105212100 0 63 chr2 105251700 105252000 0.3709 63 chr2 105586500 105587400 0.002 66 chr2 106131000 106137000 0 105 chr2 106204800 106205100 0.2782 64 chr2 106217100 106217400 0.5939 59 chr2 106240800 106241700 0.3687 56 chr2 106243800 106246800 0.2726 82 chr2 106255200 106255800 0.3545 68 chr2 106320000 106320300 0.3362 198 chr2 106373100 106373400 0.37 52 chr2 106378800 106379100 0.5245 50 chr2 106385700 106386000 0.4038 53 chr2 106392900 106397100 0.332 60 chr2 106398600 106398900 0.332 60 chr2 106400700 106401300 0.1418 72 chr2 106404300 106408500 0.0189 88 chr2 106411200 106412400 0.0017 92 chr2 106414500 106417500 0.0017 92 chr2 106419000 106419900 0.0017 92 chr2 106422300 106423800 0.0017 92 chr2 106425300 106431300 0 102 chr2 106432500 106437300 0 102 chr2 106438800 106448700 0 102 chr2 106449900 106450200 0 102 chr2 106452000 106463100 0 102 chr2 106464900 106465200 0.5655 64 chr2 106466400 106467600 0.2666 82 chr2 106468800 106469400 0.3 46 chr2 106477800 106478100 0.4051 70 chr2 106480200 106480500 0.6391 39 chr2 106482900 106483200 0.3343 55 chr2 106485300 106485600 0.251 30 chr2 106499700 106500300 0.2602 79 chr2 106507800 106508100 0.3234 70 chr2 106901400 106902000 0.2873 85 chr2 107189400 107190000 0.2408 66 chr2 107310000 107310300 0.3983 46 chr2 107826000 107829300 0 73 chr2 107831700 107846100 0 73 chr2 107847300 107857200 0 73 chr2 107858700 107870700 0 79 chr2 107872200 107876100 0.0042 68 chr2 107878500 107880900 0.0042 68 chr2 107882400 107882700 0.0042 68 chr2 107884500 107884800 0.2347 47 chr2 107886300 107892600 0.1061 59 chr2 107894700 107895900 0.055 48 chr2 107899500 107902500 0.1293 79 chr2 107907900 107909100 0.3326 46 chr2 107910900 107914200 0.1469 65 chr2 107922900 107923200 0.0894 53 chr2 107970000 107970300 0.3492 87 chr2 108496200 108496500 0.5122 66 chr2 108511500 108511800 0.6061 66 chr2 108524400 108524700 0.2 25 chr2 108651900 108653400 0.1149 71 chr2 108655200 108659400 0.0085 88 chr2 108660900 108661200 0.0774 60 chr2 108666300 108666900 0.1547 64 chr2 108672300 108673200 0.0078 63 chr2 108745200 108746700 0.1717 64 chr2 108761100 108762600 0.025 59 chr2 108765300 108765600 0.6025 60 chr2 108769200 108769500 0.4141 48 chr2 108800700 108802500 0 86 chr2 109199100 109200000 0.1484 11428 chr2 109307700 109311600 0.0061 82 chr2 109461300 109461600 0.5572 58 chr2 109738200 109739400 0.2027 64 chr2 109740600 109742400 0.0543 62 chr2 109744200 109763100 0 131 chr2 109764900 109765200 0 131 chr2 109767000 110048400 0 131 chr2 110049600 110095200 0 131 chr2 110137800 110138100 0.4448 69 chr2 110228400 110268000 0 110 chr2 110269200 110365800 0 110 chr2 110367600 110386800 0 110 chr2 110388000 110424300 0 111 chr2 110425800 110627400 0 111 chr2 110629200 110630700 0.0178 74 chr2 110632200 110632800 0.4313 72 chr2 110696100 110696700 0 74 chr2 110697900 110699400 0 74 chr2 111141300 111141600 0.3896 68 chr2 111216300 111216600 0.4223 62 chr2 111223800 111224700 0.1603 82 chr2 111253500 111257100 0.2267 62 chr2 111259500 111260100 0.0426 66 chr2 111263400 111264600 0.0183 77 chr2 111265800 111266100 0.0183 77 chr2 111268500 111274800 0.0126 80 chr2 111276600 111277800 0.3542 65 chr2 111279300 111288000 0 72 chr2 111292800 111294000 0.0379 88 chr2 111295800 111297000 0.0379 88 chr2 111299100 111303900 0.0379 88 chr2 111305400 111305700 0.0379 88 chr2 111308100 111309000 0.1326 74 chr2 111311700 111312000 0.1326 74 chr2 111314700 111315600 0 90 chr2 111316800 111318600 0 90 chr2 111319800 111326100 0 90 chr2 111327300 111332400 0 90 chr2 111334200 111350400 0 90 chr2 111351900 111356400 0 90 chr2 111357900 111360000 0.3313 71 chr2 111362400 111362700 0.1935 56 chr2 111365700 111366000 0.223 56 chr2 111368100 111369300 0 78 chr2 111373200 111373500 0 78 chr2 111375900 111380400 0.0725 73 chr2 111384300 111386700 0.0132 88 chr2 111388500 111391500 0.0132 88 chr2 111393000 111394800 0 72 chr2 111398100 111398400 0.1628 60 chr2 111399600 111411000 0.0129 82 chr2 111412500 111415800 0.2594 83 chr2 111417600 111417900 0.4407 60 chr2 111419700 111420000 0.3361 98 chr2 111421500 111422100 0.3361 98 chr2 111423600 111424500 0.0003 80 chr2 111429600 111441000 0.0205 89 chr2 111442500 111454500 0 81 chr2 111456000 111456300 0.1807 72 chr2 111457500 111457800 0.1807 72 chr2 111459000 111459300 0.4012 57 chr2 111475200 111475500 0.05 74 chr2 111477000 111477300 0.05 74 chr2 111485100 111485400 0.2588 74 chr2 111489000 111489600 0.2588 74 chr2 111491100 111491400 0.2588 74 chr2 111492900 111495300 0.2588 74 chr2 111498900 111504600 0.0859 64 chr2 111515700 111517800 0.0886 58 chr2 111525900 111528000 0.1083 70 chr2 111529500 111529800 0.1083 70 chr2 111531900 111533700 0.1083 70 chr2 111539700 111542700 0.0013 62 chr2 111545400 111546300 0.0854 47 chr2 111547500 111547800 0.0093 74 chr2 111549000 111554700 0.0093 74 chr2 111558000 111559500 0.0309 61 chr2 111561000 111561300 0.4046 53 chr2 111562500 111563400 0.0109 65 chr2 111569100 111569400 0.0327 75 chr2 111571200 111577200 0.0327 75 chr2 111578700 111581100 0.0327 75 chr2 111582600 111586500 0 100 chr2 111588000 111591600 0 100 chr2 111593100 111596400 0 100 chr2 111599100 111602400 0.0345 81 chr2 111603600 111603900 0.2148 65 chr2 111606900 111607200 0.2148 65 chr2 111609600 111611100 0.1749 72 chr2 111612300 111614400 0.1749 72 chr2 111720900 111726900 0.0147 68 chr2 111729300 111730500 0.0893 75 chr2 111731700 111732000 0.0893 75 chr2 111733500 111733800 0.0893 75 chr2 111738000 111740400 0.0795 61 chr2 111741600 111741900 0.3436 79 chr2 111747300 111749700 0.0425 87 chr2 111750900 111756600 0.1193 64 chr2 111758100 111758700 0.1066 71 chr2 111759900 111760200 0.1066 71 chr2 111762600 111764100 0.0457 65 chr2 111765600 111765900 0.4656 69 chr2 111768600 111772200 0.0213 89 chr2 111774000 111774900 0.0213 89 chr2 111776400 111777300 0.0213 89 chr2 111778500 111781500 0.0213 89 chr2 111784500 111789600 0.0811 65 chr2 111791100 111791400 0.0811 65 chr2 111793500 111794100 0.0811 65 chr2 111795300 111795900 0.3126 59 chr2 111798000 111798300 0.3126 59 chr2 111799500 111807900 0.0221 71 chr2 111809100 111820800 0.0027 80 chr2 111822000 111822900 0.0027 80 chr2 111850500 111850800 0.3799 75 chr2 111852000 111852300 0.5633 37 chr2 111860400 111861900 0.1864 82 chr2 111885600 111886200 0.3877 81 chr2 112113600 112115400 0.0007 51 chr2 112139400 112139700 0.5094 16 chr2 112284300 112284600 0.3577 56 chr2 112346400 112346700 0.6907 58 chr2 112356900 112357200 0.3241 61 chr2 112361400 112409700 0 108 chr2 112411200 112415100 0 108 chr2 112416600 112425000 0 108 chr2 112426200 112428900 0 108 chr2 112433400 112433700 0.5056 37 chr2 112444800 112445400 0.3273 62 chr2 112447200 112447500 0.5078 55 chr2 112503900 112509000 0 98 chr2 112776600 112776900 0.0398 12 chr2 113130600 113130900 0.3616 60 chr2 113391600 113392200 0.3662 93 chr2 113394000 113395800 0.0557 66 chr2 113411100 113412900 0.0274 136 chr2 113415300 113417100 0.0274 136 chr2 113419200 113419500 0.4169 56 chr2 113425200 113427300 0.0852 61 chr2 113430300 113432400 0.2714 89 chr2 113433900 113434500 0.2714 89 chr2 113440800 113441100 0.2407 71 chr2 113443800 113444100 0.1726 55 chr2 113447100 113455200 0.1724 94 chr2 113457300 113460300 0.0533 68 chr2 113463900 113469900 0.0944 73 chr2 113472900 113473200 0.2859 75 chr2 113474700 113475300 0.2859 75 chr2 113478900 113486400 0.0461 112 chr2 113488800 113498700 0.0078 94 chr2 113500800 113501400 0.6461 68 chr2 113505000 113507400 0.4728 139 chr2 113509500 113509800 0.1192 89 chr2 113513400 113514600 0.3396 127 chr2 113517300 113517600 0.2189 84 chr2 113519400 113520600 0.1367 106 chr2 113522700 113526000 0.1367 106 chr2 113527200 113528100 0.0208 157 chr2 113531700 113532900 0.0208 157 chr2 113534700 113535300 0.0208 157 chr2 113537400 113540400 0.0208 157 chr2 113544000 113544900 0 178 chr2 113546700 113551200 0 178 chr2 113552400 113554500 0 178 chr2 113558700 113560200 0.438 133 chr2 113562300 113562900 0.0924 148 chr2 113564100 113564700 0.0924 148 chr2 113568600 113568900 0.5956 69 chr2 113574600 113574900 0.4142 127 chr2 113576700 113582400 0.0638 164 chr2 113584200 113584500 0.5032 134 chr2 113586000 113586900 0.1161 145 chr2 113588700 113591100 0.1161 145 chr2 113593800 113598300 0.1437 174 chr2 113601300 113602200 0.5455 82 chr2 113605500 113605800 0.3257 83 chr2 113607300 113607600 0.0137 87 chr2 113608800 113620500 0.0137 87 chr2 113622000 113622300 0.5225 39 chr2 113623500 113625000 0.1635 75 chr2 113627700 113628900 0.1635 75 chr2 113633100 113633400 0.389 64 chr2 113641500 113642100 0.0203 73 chr2 113643900 113645700 0.0203 73 chr2 113651100 113653500 0.0792 82 chr2 113656500 113656800 0.533 132 chr2 113979600 113979900 0.615 56 chr2 114084300 114085200 0.0999 69 chr2 114097800 114098400 0.1911 71 chr2 114371400 114372000 0.4466 32 chr2 114748500 114749100 0.1687 60 chr2 115006500 115009200 0.0474 90 chr2 115376700 115377000 0.2477 66 chr2 115426200 115426500 0.3786 69 chr2 115438800 115439100 0.4384 59 chr2 115487100 115488900 0.0461 77 chr2 115800900 115801200 0.4294 113 chr2 116037600 116037900 0.5105 68 chr2 116050200 116054400 0.1467 104 chr2 116121900 116122200 0.227 81 chr2 116405400 116405700 0.3391 101 chr2 116929800 116930100 0.1147 87 chr2 116931300 116931600 0.1147 87 chr2 117460200 117461400 0.0309 111 chr2 117528000 117529500 0.2598 73 chr2 117594300 117594600 0.3121 91 chr2 117624600 117625800 0.23 91 chr2 117627300 117628500 0.23 91 chr2 117649800 117650400 0 34 chr2 117651600 117651900 0 34 chr2 117653100 117654900 0.242 64 chr2 117676800 117677100 0.3874 370 chr2 117749700 117752100 0.1202 91 chr2 117767100 117767400 0.4152 73 chr2 117780300 117780600 0.3473 106 chr2 117783300 117783600 0.3723 42 chr2 117804900 117808200 0.206 71 chr2 117909600 117909900 0.2941 36 chr2 118092900 118093500 0.5648 31 chr2 118137300 118142700 0.0483 143 chr2 118302900 118305000 0 65 chr2 118485900 118488000 0.0128 91 chr2 118867500 118868400 0 99 chr2 118895700 118901100 0 93 chr2 118999800 119000100 0.2836 91 chr2 119001300 119001600 0.2836 91 chr2 119444400 119444700 0.3603 21 chr2 119843400 119844600 0.3669 71 chr2 120188100 120188400 0.3306 108 chr2 120192900 120193200 0.3238 68 chr2 120321000 120321300 0.519 37 chr2 120391500 120391800 0.5646 199 chr2 121163700 121164000 0.5272 65 chr2 121438800 121439100 0.379 61 chr2 121478700 121479000 0.509 74 chr2 122013900 122017800 0.0395 95 chr2 122049000 122051700 0.1184 85 chr2 122265300 122266200 0.118 85 chr2 122346600 122348400 0.1417 78 chr2 122350500 122351400 0.1417 78 chr2 122668800 122669100 0.4885 67 chr2 122783100 122783700 0.1352 79 chr2 123256800 123257700 0.1721 74 chr2 123631500 123631800 0.3283 84 chr2 123633300 123633900 0.3283 84 chr2 123684600 123685200 0.1922 72 chr2 123705000 123705600 0.1781 91 chr2 123950400 123950700 0.4379 66 chr2 123955800 123956100 0.3491 27 chr2 124035900 124036200 0.4095 54 chr2 124140300 124145700 0 115 chr2 124357500 124361100 0.063 86 chr2 124408800 124409700 0.023 80 chr2 124411500 124413900 0.023 80 chr2 124458000 124458300 0.6926 52 chr2 124593300 124598700 0.0062 94 chr2 125417400 125418000 0.0916 76 chr2 125734500 125734800 0.6553 61 chr2 125752200 125753100 0.231 56 chr2 126118800 126119400 0.3696 72 chr2 126178200 126183300 0 111 chr2 126453000 126453300 0.3599 70 chr2 126455100 126455400 0.4905 67 chr2 127119000 127120500 0.0369 88 chr2 127752300 127752600 0.4414 53 chr2 127786800 127789800 0.0503 85 chr2 128113800 128114100 0.5723 23 chr2 128225700 128226000 0.6619 56 chr2 128265900 128266200 0.4866 63 chr2 128340600 128341200 0.1742 38 chr2 128417700 128418600 0.1456 84 chr2 128859600 128864700 0 93 chr2 128964900 128965800 0.1787 70 chr2 128967000 128967300 0.3496 27 chr2 129411000 129417300 0 94 chr2 129645900 129646200 0.3903 52 chr2 129682500 129687000 0 110 chr2 129980100 129980400 0.359 68 chr2 130041600 130043100 0 66 chr2 130044300 130044600 0 66 chr2 130048500 130050600 0.4843 60 chr2 130051800 130052100 0.6287 37 chr2 130053900 130054200 0.3672 75 chr2 130056000 130056900 0.3154 79 chr2 130058400 130058700 0.3154 79 chr2 130060200 130060500 0.3671 78 chr2 130064100 130064700 0.0168 90 chr2 130066500 130067400 0.0168 90 chr2 130069200 130069500 0.5209 67 chr2 130071600 130072200 0 85 chr2 130074300 130074600 0 85 chr2 130076100 130100700 0 85 chr2 130101900 130102200 0.4161 38 chr2 130103700 130107000 0.0399 71 chr2 130108500 130108800 0.2136 56 chr2 130110900 130111200 0.1938 57 chr2 130112400 130112700 0.1938 57 chr2 130114800 130115100 0.1938 57 chr2 130119600 130119900 0.0926 63 chr2 130121400 130125300 0.0926 63 chr2 130138200 130138500 0.5225 39 chr2 130151400 130151700 0.491 81 chr2 130215300 130215600 0.6114 55 chr2 130220400 130220700 0.4709 77 chr2 130222800 130223400 0.0253 72 chr2 130238700 130239000 0.233 58 chr2 130245000 130245300 0.464 67 chr2 130269000 130269300 0.5031 61 chr2 130277100 130277400 0.4018 59 chr2 130398000 130398300 0.5913 52 chr2 130401600 130402500 0 80 chr2 130405200 130409700 0 80 chr2 130410900 130414800 0.1117 61 chr2 130416000 130420500 0.0031 78 chr2 130425000 130425300 0.3898 70 chr2 130426800 130428900 0 87 chr2 130430100 130449300 0 87 chr2 130450800 130451100 0.2441 71 chr2 130453200 130453500 0.3199 63 chr2 130458900 130476900 0 107 chr2 130478100 130483200 0 107 chr2 130484400 130559700 0 107 chr2 130560900 130617600 0 107 chr2 130618800 130623900 0 107 chr2 130626000 130635900 0.0042 93 chr2 130638300 130639800 0.2901 72 chr2 130642200 130656000 0 102 chr2 130657200 130662000 0 80 chr2 130672200 130691400 0 98 chr2 130692600 130695000 0 98 chr2 130696200 130696500 0 98 chr2 130701000 130705500 0.0022 69 chr2 130706700 130710600 0.1084 69 chr2 130712400 130716300 0 71 chr2 130719000 130719900 0 71 chr2 130822200 130822500 0.3717 55 chr2 130857300 130863900 0 61 chr2 131208000 131208600 0.5011 53 chr2 131210700 131211000 0.2345 72 chr2 131213400 131213700 0.2408 65 chr2 131214900 131215800 0.2408 65 chr2 131217000 131218200 0.2408 65 chr2 131223900 131224500 0.3815 63 chr2 131226300 131227800 0.1358 68 chr2 131232000 131232600 0.2875 74 chr2 131234100 131235300 0.0964 74 chr2 131236800 131237100 0 99 chr2 131238300 131262300 0 99 chr2 131263500 131265300 0 99 chr2 131268000 131268600 0 99 chr2 131269800 131270100 0.4376 66 chr2 131272500 131276100 0 103 chr2 131278800 131279100 0.486 58 chr2 131282700 131283000 0.3318 78 chr2 131284800 131285100 0.3318 78 chr2 131287500 131289000 0.0104 71 chr2 131291400 131291700 0.0104 71 chr2 131294400 131298000 0.0104 71 chr2 131300700 131301000 0.1876 63 chr2 131363400 131363700 0.4264 61 chr2 131380800 131381100 0.4136 59 chr2 131387700 131388000 0.428 40 chr2 131435400 131435700 0.3331 56 chr2 131450700 131451300 0.1153 68 chr2 131453700 131454000 0.6043 47 chr2 131459100 131459400 0.5967 49 chr2 131466300 131466600 0.3217 42 chr2 131521200 131521500 0.4177 74 chr2 131531400 131532600 0.4085 65 chr2 131544600 131544900 0.3445 79 chr2 131693400 131695800 0.1176 89 chr2 131761800 131763000 0.2689 80 chr2 131766300 131768700 0 100 chr2 131778300 131778600 0.4386 58 chr2 131791800 131796600 0 89 chr2 131797800 131800800 0.1497 80 chr2 131814300 131816400 0.0742 83 chr2 131820000 131820300 0.5152 58 chr2 131856900 131857500 0.4154 49 chr2 131979900 131980200 0.4184 57 chr2 131985900 131986200 0.3124 55 chr2 132016800 132017100 0.5519 217 chr2 132085500 132085800 0.3577 49 chr2 132090600 132090900 0.2555 45 chr2 132099000 132099300 0.2878 55 chr2 132189300 132190500 0.5287 73 chr2 132193800 132194100 0.5868 56 chr2 132210600 132210900 0.6933 97 chr2 132233400 132233700 0.3874 96 chr2 132236700 132237000 0.5174 75 chr2 132393900 132394800 0.1478 252 chr2 132565500 132566400 0.3128 72 chr2 132591000 132591300 0.5006 48 chr2 133101000 133101600 0.2964 50 chr2 133116300 133116600 0.3612 51 chr2 133299900 133302600 0.0149 98 chr2 133308600 133308900 0.5148 40 chr2 133465800 133466400 0.4439 80 chr2 133549500 133552500 0.1137 109 chr2 133616100 133619100 0.2054 65 chr2 133702800 133703100 0.6893 35 chr2 133911600 133915800 0.0105 121 chr2 134209200 134212500 0 114 chr2 134607000 134609700 0.082 120 chr2 134650800 134655600 0.0203 97 chr2 134826600 134826900 0.5377 72 chr2 134828700 134831100 0.132 106 chr2 135032700 135034800 0.3027 51 chr2 135117300 135117900 0.5633 234 chr2 135235500 135235800 0.3745 49 chr2 135293700 135294000 0.3977 68 chr2 135482100 135482400 0.382 80 chr2 136817400 136818300 0.3338 79 chr2 136890300 136890600 0.5793 24 chr2 137238600 137238900 0.3657 62 chr2 137310300 137310600 0.269 67 chr2 137311800 137312100 0.269 67 chr2 137394000 137394900 0.1175 83 chr2 137396100 137396700 0.1175 83 chr2 137397900 137398500 0.1175 83 chr2 137484300 137485200 0.1178 63 chr2 137486400 137488200 0.1178 63 chr2 138246600 138247200 0.0298 53 chr2 138251100 138251700 0.0823 60 chr2 138459300 138459600 0.3572 76 chr2 139027800 139028100 0.2512 48 chr2 139103700 139104000 0.3308 88 chr2 139308000 139308300 0.4278 78 chr2 139309800 139310100 0.4278 78 chr2 139372800 139373100 0.1955 127 chr2 139533300 139533600 0.1673 69 chr2 139535700 139536000 0.1673 69 chr2 139878600 139880400 0.0723 70 chr2 140828400 140828700 0.3586 22 chr2 141045000 141045300 0.6351 32 chr2 141071100 141071400 0.2822 75 chr2 141963600 141965700 0.0134 120 chr2 142172700 142173000 0.55 36 chr2 142608300 142608900 0.2461 88 chr2 142611000 142613100 0.4361 68 chr2 142677000 142677300 0.2995 25 chr2 142808700 142810500 0.2897 75 chr2 143007300 143012100 0.0501 111 chr2 143637900 143638500 0.1878 53 chr2 143662200 143663400 0.0579 82 chr2 143665200 143667300 0.0579 82 chr2 143861100 143866800 0 137 chr2 143921400 143922300 0.0971 51 chr2 143992200 143992500 0.158 48 chr2 144246300 144246600 0.5372 45 chr2 144897600 144897900 0.0436 81 chr2 144899100 144899700 0.0436 81 chr2 145715100 145715400 0.3921 51 chr2 146408100 146411100 0.0565 88 chr2 147113400 147113700 0.4388 38 chr2 147155100 147155400 0.1288 98 chr2 147727800 147732900 0.0592 81 chr2 147744000 147745800 0.0749 66 chr2 147931200 147931500 0.4151 117 chr2 148149000 148151400 0.1017 98 chr2 148153500 148154100 0.0902 52 chr2 148188900 148194600 0 88 chr2 148326600 148326900 0.4104 60 chr2 149403300 149403600 0.2172 100 chr2 149405700 149406000 0.3459 78 chr2 149505900 149506200 0.3352 70 chr2 149545800 149546100 0.384 62 chr2 149549700 149550000 0.3387 72 chr2 149770500 149770800 0.2646 46 chr2 149851800 149852400 0.2967 89 chr2 149854500 149855100 0.3077 74 chr2 149902800 149903100 0.2214 49 chr2 149945700 149951100 0 111 chr2 150180300 150180600 0.35 70 chr2 151579200 151608900 0 95 chr2 151698900 151704600 0.0003 117 chr2 151875000 151875600 0.3233 72 chr2 152066400 152067000 0.5522 75 chr2 152357100 152357700 0.2259 30 chr2 152997900 152999100 0.5198 80 chr2 153007800 153013200 0 115 chr2 153222300 153222600 0.1363 541 chr2 153253200 153253500 0.4349 53 chr2 153398700 153399300 0.324 76 chr2 153401400 153401700 0.554 70 chr2 153538500 153539100 0.021 132 chr2 153629700 153630300 0.261 66 chr2 153720000 153724800 0.1246 75 chr2 153864600 153866100 0.0073 101 chr2 154051200 154051500 0.5676 57 chr2 154955100 154956600 0.3286 82 chr2 154980900 154981200 0.2604 59 chr2 154989000 154990500 0.0803 81 chr2 155034600 155034900 0.5191 37 chr2 155191800 155192400 0.3958 58 chr2 155331600 155331900 0.5541 23 chr2 155443800 155446500 0.0037 80 chr2 155500800 155501100 0.0656 140 chr2 155966700 155969400 0.2278 87 chr2 156255000 156260400 0.1247 98 chr2 156367800 156369900 0.0384 64 chr2 156450600 156451200 0.2701 61 chr2 156529200 156530400 0.436 72 chr2 156774600 156774900 0.4337 77 chr2 156965400 156965700 0.331 63 chr2 157369500 157374300 0.0162 112 chr2 157378500 157379700 0.0191 68 chr2 157516200 157516800 0.3429 76 chr2 157518600 157521000 0.0215 73 chr2 157547100 157548600 0.0742 62 chr2 157566900 157572300 0 102 chr2 157576800 157577100 0.2448 38 chr2 157632900 157633200 0.4964 54 chr2 157818900 157819200 0.6933 41 chr2 158351700 158352300 0.3072 66 chr2 158355600 158357100 0.1978 74 chr2 158523300 158528700 0.0005 81 chr2 158780400 158780700 0.1536 58 chr2 158851800 158852400 0.1111 62 chr2 158872800 158873400 0.0473 71 chr2 159280500 159280800 0.4174 49 chr2 159292800 159295200 0 91 chr2 159519300 159519600 0.6063 53 chr2 159663900 159665700 0.0064 109 chr2 159991800 159992700 0.0939 69 chr2 159999300 159999600 0.5264 15 chr2 160120200 160120800 0.2937 54 chr2 160713300 160714200 0.1602 45 chr2 160757100 160759500 0.0017 91 chr2 160768200 160768800 0.2997 63 chr2 160770000 160771500 0 75 chr2 160800600 160801500 0.1221 95 chr2 160851300 160851600 0.0099 82 chr2 160852800 160855800 0.0099 82 chr2 160860600 160860900 0.4157 83 chr2 160939200 160939500 0.4281 40 chr2 160999200 160999800 0.3091 63 chr2 161539200 161540700 0.0459 70 chr2 161926500 161926800 0.3864 69 chr2 161928000 161928300 0.3864 69 chr2 162569400 162569700 0.4977 71 chr2 162571500 162572700 0.124 58 chr2 164121000 164123400 0.0018 127 chr2 164262000 164263800 0.0847 92 chr2 165040500 165041700 0.3275 64 chr2 165411000 165411300 0.2031 49 chr2 165486300 165492000 0.0102 120 chr2 165592800 165593100 0.5062 60 chr2 165731700 165737400 0.0027 137 chr2 166099500 166101300 0.0198 147 chr2 166200000 166200300 0.3931 48 chr2 166310400 166310700 0.312 52 chr2 166502700 166503300 0.2258 79 chr2 166703100 166704900 0.2889 70 chr2 166859400 166859700 0.456 74 chr2 166988400 166994400 0 114 chr2 167085000 167085300 0.4476 67 chr2 167216100 167216700 0.0077 92 chr2 167466600 167466900 0.1813 941 chr2 167665200 167665500 0.4871 68 chr2 167837400 167841000 0.2814 119 chr2 168039300 168039600 0.0894 24 chr2 169079700 169080000 0.6714 48 chr2 169248900 169254600 0 111 chr2 169262400 169263600 0.3697 76 chr2 169785000 169785600 0 63 chr2 169787100 169787400 0 63 chr2 169970700 169971600 0.3096 61 chr2 169972800 169973400 0.1888 74 chr2 170150400 170150700 0.3294 65 chr2 170649300 170649600 0.4651 38 chr2 171819000 171819300 0.5771 13 chr2 171865800 171866700 0.1162 78 chr2 171900300 171900600 0.3597 66 chr2 172110900 172111200 0.4914 33 chr2 172190400 172190700 0.4694 77 chr2 172315500 172321200 0 129 chr2 173528400 173529900 0.3912 67 chr2 173699400 173705400 0.0027 103 chr2 174269700 174274200 0.0293 90 chr2 174404700 174410400 0.0402 86 chr2 174720300 174720900 0.2718 47 chr2 175083000 175083300 0.2634 70 chr2 175411800 175412100 0.3194 67 chr2 175482000 175488000 0 90 chr2 175588800 175593300 0.0225 102 chr2 175691700 175694400 0.1359 90 chr2 175700700 175701000 0.1973 72 chr2 175704000 175704300 0.4583 70 chr2 175760100 175765500 0 66 chr2 175813200 175814100 0.0106 46 chr2 175962900 175963200 0.1763 86 chr2 176798700 176799000 0.374 87 chr2 177924900 177925500 0.482 58 chr2 177945300 177947100 0.195 77 chr2 177973200 177978900 0 137 chr2 178653300 178662900 0 87 chr2 178984500 178985700 0.3673 70 chr2 179061900 179062500 0.1091 79 chr2 179201400 179201700 0.5483 53 chr2 179319000 179319300 0.3306 54 chr2 179389500 179389800 0.4852 73 chr2 179391600 179391900 0.3709 52 chr2 179735100 179735700 0.1422 71 chr2 179963400 179963700 0.6609 48 chr2 180300000 180300300 0.5684 62 chr2 180453000 180453300 0.4128 47 chr2 180580800 180581100 0.4 45 chr2 180833700 180839400 0 114 chr2 181182000 181182300 0.4817 82 chr2 181347000 181347300 0.5113 107 chr2 182025300 182030700 0.0544 96 chr2 182175300 182177100 0.043 82 chr2 182213100 182217600 0 114 chr2 182385600 182385900 0.546 57 chr2 182430300 182430900 0.0327 82 chr2 182560200 182560500 0.3636 53 chr2 182747700 182749500 0.1617 68 chr2 182881800 182882100 0.6639 55 chr2 182971200 182971500 0.5051 42 chr2 183385200 183385500 0.2563 48 chr2 183590100 183591000 0.1833 65 chr2 183853500 183853800 0.4546 69 chr2 183971100 183971400 0.3657 70 chr2 184231500 184231800 0.4635 66 chr2 184947300 184950900 0 131 chr2 185419500 185424600 0.0157 91 chr2 185586300 185586600 0.3048 78 chr2 185765700 185767200 0.238 93 chr2 185774700 185775300 0.2498 65 chr2 185841900 185842500 0.4137 84 chr2 185844000 185847000 0.0601 54 chr2 185865300 185868300 0.1606 102 chr2 185869500 185870400 0.1791 88 chr2 185982600 185982900 0.3807 71 chr2 186153300 186153600 0.6399 50 chr2 186402000 186402900 0.1791 84 chr2 186477000 186477300 0.2155 96 chr2 186922500 186923100 0.0959 77 chr2 186952800 186953700 0.0979 91 chr2 187235100 187235400 0.1259 66 chr2 187287900 187288200 0.0764 18 chr2 187357500 187357800 0.6933 53 chr2 187598100 187598700 0.409 71 chr2 188124300 188129100 0.0186 98 chr2 188716200 188716500 0.2313 97 chr2 188825100 188827500 0.0398 97 chr2 189027000 189030000 0.0292 114 chr2 189196200 189196500 0.3214 47 chr2 189200400 189200700 0.1305 49 chr2 189718800 189719100 0.5148 54 chr2 190143600 190143900 0.1732 56 chr2 191694600 191694900 0.3718 55 chr2 191742900 191743200 0.2252 43 chr2 191763300 191765700 0.0564 92 chr2 192131100 192131400 0.6038 75 chr2 192268500 192273900 0 89 chr2 192835800 192836400 0.2195 61 chr2 192862800 192863100 0.349 66 chr2 193032600 193032900 0.4905 92 chr2 193212600 193218600 0.0032 153 chr2 193533900 193534200 0.4008 34 chr2 193597200 193597800 0.3937 66 chr2 193649100 193649700 0.2935 80 chr2 193674300 193674600 0.5971 53 chr2 193706700 193707300 0.049 75 chr2 193821900 193822500 0.2901 78 chr2 193908300 193908600 0.4967 47 chr2 193914000 193914300 0 16 chr2 194447700 194448900 0.0585 57 chr2 194859300 194859600 0.4679 75 chr2 195063600 195065100 0.3366 64 chr2 195067500 195071400 0.0493 83 chr2 195233700 195234000 0.4099 68 chr2 195260700 195261300 0.3672 81 chr2 195375000 195375600 0.2297 80 chr2 195376800 195377100 0.2297 80 chr2 195527400 195528600 0.0873 99 chr2 195567300 195569100 0.1823 87 chr2 196521600 196521900 0.1644 96 chr2 196523400 196526400 0.1644 96 chr2 196749900 196750200 0.3616 38 chr2 196905600 196911600 0 103 chr2 197067300 197068200 0.1037 111 chr2 197635500 197640000 0.1055 91 chr2 197687700 197692500 0.0054 97 chr2 197695500 197695800 0.1141 70 chr2 197697300 197697600 0.3423 51 chr2 197730000 197731500 0.2008 77 chr2 197732700 197733600 0.2008 77 chr2 197922000 197922900 0.1655 62 chr2 198450300 198450600 0.3104 62 chr2 198575100 198575400 0.5603 32 chr2 198582900 198586200 0.0562 111 chr2 198934500 198935100 0.2172 78 chr2 200250600 200250900 0.4683 65 chr2 200500500 200501700 0.3679 94 chr2 200682600 200683800 0.1174 74 chr2 200822100 200823000 0.0142 62 chr2 201082800 201083100 0.4988 58 chr2 201282000 201284700 0.0566 70 chr2 201484200 201484800 0.2515 84 chr2 201592200 201592500 0.4153 85 chr2 201593700 201594000 0.3964 86 chr2 202021800 202022100 0.4145 71 chr2 202578300 202578600 0.5745 63 chr2 202606200 202606800 0.1264 68 chr2 202887600 202887900 0.4925 64 chr2 203408700 203409000 0.5327 34 chr2 203986800 203987100 0.587 76 chr2 204386100 204386400 0.311 76 chr2 204582900 204583500 0.0772 78 chr2 204767100 204770400 0 96 chr2 204991200 204996900 0.0248 76 chr2 205044300 205044600 0.1335 120 chr2 205206900 205209300 0.1285 94 chr2 206071200 206071500 0.1866 130 chr2 206171100 206171400 0.3511 73 chr2 206172600 206172900 0.3511 73 chr2 206355600 206356200 0.2363 93 chr2 206374800 206375400 0 25 chr2 206400000 206400900 0.2003 51 chr2 206577600 206577900 0.4924 64 chr2 206910000 206913900 0.0161 114 chr2 207004800 207006300 0.0248 94 chr2 207037200 207037500 0.2922 62 chr2 207273600 207273900 0.0685 51 chr2 207609900 207612000 0 99 chr2 207702600 207702900 0.4514 30 chr2 208094400 208094700 0.0373 31 chr2 208196400 208196700 0.2053 35 chr2 208587000 208587300 0.2983 43 chr2 208746900 208747200 0.3795 75 chr2 208803000 208803300 0.4033 37 chr2 208805400 208806000 0.4121 67 chr2 208812900 208817400 0.1851 86 chr2 208835400 208835700 0.4556 80 chr2 208897200 208898100 0.2913 80 chr2 208899300 208899600 0.2913 80 chr2 209129100 209133600 0.0007 85 chr2 209163900 209168100 0.05 89 chr2 209332200 209333100 0.0235 99 chr2 209746800 209748300 0.3112 94 chr2 209751000 209751300 0.3936 65 chr2 210069600 210069900 0.6032 37 chr2 210639300 210639600 0.5109 43 chr2 210666300 210666600 0.4945 74 chr2 211002900 211003200 0.5431 69 chr2 211220400 211224600 0.0589 110 chr2 211227000 211227300 0.5172 59 chr2 211633500 211633800 0.3014 32 chr2 211661700 211662000 0.4595 37 chr2 211686600 211686900 0.677 24 chr2 211872900 211873200 0.333 70 chr2 211889100 211894500 0.0212 76 chr2 212148600 212149200 0.3361 52 chr2 212701800 212702700 0.1545 83 chr2 212709900 212710200 0.3823 26 chr2 213345300 213345600 0.1878 61 chr2 213367500 213368100 0.2004 60 chr2 213567300 213572400 0 103 chr2 213676800 213677100 0.4128 84 chr2 213783300 213784500 0.016 53 chr2 213833400 213833700 0.5814 10 chr2 214684200 214689300 0.0111 101 chr2 214718700 214719000 0.5351 32 chr2 214834500 214836300 0.2907 79 chr2 215926500 215926800 0.5979 50 chr2 216225900 216228300 0 45 chr2 216324000 216324600 0.1461 76 chr2 216325800 216326100 0.1461 76 chr2 216459600 216459900 0.4044 67 chr2 217311300 217311600 0.1284 80 chr2 217677000 217677300 0.485 43 chr2 217805400 217805700 0.626 101 chr2 217809300 217809600 0.4914 122 chr2 218846100 218846400 0.5272 79 chr2 218932200 218932500 0.2838 81 chr2 218971800 218972100 0.518 35 chr2 219932400 219937800 0 113 chr2 220546200 220546500 0.5223 34 chr2 221366700 221367000 0.6353 25 chr2 221383800 221384100 0.1259 41 chr2 221860800 221861100 0.4253 51 chr2 221985900 221988600 0.0404 106 chr2 221989800 221990400 0.0404 106 chr2 222147900 222155100 0.0165 100 chr2 222816000 222817200 0.1754 40 chr2 222895500 222897600 0 65 chr2 222932700 222933000 0.1835 25 chr2 223942500 223942800 0.4395 39 chr2 225173400 225173700 0.3141 53 chr2 225174900 225175200 0.2975 69 chr2 225267300 225267900 0.4011 76 chr2 225322500 225323100 0.1028 80 chr2 225643800 225645000 0.3197 81 chr2 225851700 225852000 0.4937 55 chr2 225873600 225875100 0.2481 72 chr2 225939900 225940200 0.3728 52 chr2 226364100 226364400 0.6831 23 chr2 226470000 226470600 0 19 chr2 226507800 226508100 0.5762 72 chr2 226574400 226575300 0.0078 92 chr2 227067900 227070000 0.2363 108 chr2 227203500 227203800 0.2548 33 chr2 228035100 228035400 0.3186 69 chr2 228201300 228201900 0.2585 69 chr2 228230100 228231900 0.1009 78 chr2 228420900 228421200 0.2471 74 chr2 228422400 228423900 0.2471 74 chr2 228569700 228570000 0.4848 85 chr2 228756600 228761700 0 136 chr2 228831000 228831300 0.3552 68 chr2 228855000 228855900 0.1859 83 chr2 229184100 229185000 0.169 34 chr2 230197200 230197500 0.3837 51 chr2 230310600 230310900 0.4551 92 chr2 230337900 230341500 0.0889 90 chr2 230400900 230401200 0.2839 68 chr2 230460600 230460900 0 31 chr2 231005100 231005700 0.4855 171 chr2 231579000 231579300 0.3682 13 chr2 231823200 231825000 0 89 chr2 231826200 231828900 0 89 chr2 231837600 231840000 0.0178 62 chr2 231842400 231846600 0.0148 124 chr2 231847800 231848100 0.4749 60 chr2 232149300 232155000 0 94 chr2 232176900 232181100 0 113 chr2 232357200 232357500 0.5152 75 chr2 232359000 232360800 0.1151 131 chr2 232380900 232381200 0.5204 64 chr2 232408800 232409100 0.3861 47 chr2 232427100 232427400 0.4416 72 chr2 232449300 232449600 0.4765 44 chr2 232730700 232731000 0.3739 40 chr2 232905900 232906200 0.6883 35 chr2 232995000 232995600 0.3673 53 chr2 233186700 233187000 0.6888 68 chr2 233561400 233562600 0.2367 88 chr2 233567400 233568000 0.1087 20 chr2 233578200 233580300 0.1051 72 chr2 233581500 233581800 0.1051 72 chr2 233723700 233724300 0.0921 73 chr2 234562500 234563100 0.0889 25 chr2 234645600 234649500 0 90 chr2 234888600 234894300 0.102 93 chr2 235043400 235043700 0.0714 66 chr2 235186200 235186500 0.663 30 chr2 235525500 235526100 0.3608 75 chr2 235764900 235765200 0.3449 18 chr2 236379300 236379900 0.2668 59 chr2 236384700 236387100 0.0089 117 chr2 236388300 236388900 0.0089 117 chr2 236409900 236412000 0.1252 113 chr2 236437200 236439300 0.1705 76 chr2 236481600 236482200 0.2852 54 chr2 236868300 236868600 0.46 42 chr2 237030900 237031200 0.6904 45 chr2 237187800 237189300 0.1643 87 chr2 237343500 237343800 0.2692 107 chr2 237464700 237465000 0.6231 68 chr2 237522000 237522300 0.6197 61 chr2 237547200 237547800 0.5821 57 chr2 238110000 238110600 0.4575 209 chr2 238296000 238296600 0.0098 87 chr2 238397700 238398000 0.4719 33 chr2 238417800 238418400 0.2669 58 chr2 238717500 238718700 0.0225 75 chr2 238776600 238777500 0.4177 79 chr2 238870200 238871400 0.6079 92 chr2 238880400 238881300 0.0434 33 chr2 239068800 239069700 0.1973 42 chr2 239085900 239086200 0.5581 55 chr2 239218500 239218800 0.3004 84 chr2 239527500 239528100 0.0013 60 chr2 239644500 239645100 0.0069 310 chr2 239658900 239659200 0.5216 12 chr2 239665500 239665800 0.6641 48 chr2 239755200 239755800 0.5699 70 chr2 239816100 239818200 0.4569 151 chr2 240019500 240019800 0.316 15 chr2 240042000 240042300 0.6591 25 chr2 240045600 240045900 0.3586 46 chr2 240158100 240158700 0.5252 68 chr2 240354600 240354900 0.0168 38 chr2 240547200 240549300 0.0457 120 chr2 240625800 240626400 0.4806 168 chr2 240641400 240641700 0.0572 24 chr2 240675000 240685200 0 82 chr2 240689100 240699900 0 87 chr2 240780900 240781500 0.3831 26 chr2 240842700 240843000 0.4028 18 chr2 240907800 240909300 0 54 chr2 240923700 240924000 0.1092 14 chr2 240976200 240981000 0.0352 76 chr2 240984900 240985500 0.4793 21 chr2 241161000 241161300 0.6858 59 chr2 241205700 241206900 0.1216 31 chr2 241355700 241356000 0.2945 47 chr2 241457400 241457700 0.5979 60 chr2 241561500 241561800 0.2368 50 chr2 241570500 241571100 0.2685 99 chr2 241572900 241573200 0.6269 36 chr2 241590000 241591200 0.5971 309 chr2 241760100 241760400 0.2034 79 chr2 241767000 241767300 0 15 chr2 241805400 241805700 0.126 16 chr2 241807500 241808100 0.2089 46 chr2 241819500 241820100 0.324 142 chr2 241846800 241848300 0.5522 123 chr2 241896600 241896900 0.5449 85 chr2 242006700 242010600 0.0172 172 chr2 242046900 242047500 0.0511 73 chr2 242079300 242079600 0.1833 67 chr2 242083200 242085300 0.2756 75 chr2 242110500 242111100 0.2727 74 chr2 242114400 242117700 0.1256 93 chr2 242123100 242124300 0.398 69 chr2 242127000 242142900 0.0056 78 chr2 242145900 242146200 0 80 chr2 242148000 242157300 0 80 chr2 242158800 242170800 0 204 chr2 242172000 242183700 0 204 chr20 60000 67500 0.1475 1203 chr20 130200 135600 0 93 chr20 160500 162600 0.1176 66 chr20 1114500 1115400 0.1014 63 chr20 1258800 1260000 0.2048 73 chr20 1301700 1302600 0 149 chr20 1573200 1575900 0.0098 66 chr20 1606200 1609200 0.0055 54 chr20 1742400 1744800 0.0011 77 chr20 2442900 2443800 0.2378 73 chr20 2822700 2825700 0.0083 65 chr20 2883300 2883600 0.3772 37 chr20 2910000 2910600 0.3374 30 chr20 3057300 3057600 0.3439 21 chr20 3477000 3477600 0.2756 55 chr20 3497100 3497400 0.4123 54 chr20 3498900 3499500 0.1616 59 chr20 3517500 3517800 0.5203 50 chr20 3793800 3794100 0.3956 48 chr20 4032600 4035600 0.0203 53 chr20 4286700 4287300 0.2443 77 chr20 4386600 4389600 0.0464 86 chr20 5027100 5028300 0.2251 71 chr20 5277300 5279100 0.2088 91 chr20 5380200 5381400 0.1342 56 chr20 5418900 5419500 0.2303 66 chr20 5453100 5453400 0.4669 32 chr20 5503500 5503800 0.5698 52 chr20 5849700 5850000 0.4346 55 chr20 6170400 6170700 0.5877 27 chr20 6189600 6189900 0.015 79 chr20 6191100 6192000 0.015 79 chr20 6316200 6319200 0.0535 98 chr20 6320700 6321600 0.0535 98 chr20 6720900 6721200 0.4772 57 chr20 7116300 7122000 0 81 chr20 7124700 7125300 0.0302 47 chr20 7293600 7293900 0.5229 24 chr20 7299300 7299600 0.2919 52 chr20 7717500 7717800 0.4975 41 chr20 8112000 8112600 0.0432 76 chr20 8465700 8466000 0.5539 68 chr20 8486400 8486700 0.3566 47 chr20 8595300 8600700 0 105 chr20 9015600 9015900 0.3939 30 chr20 9188400 9189600 0.3496 117 chr20 9199800 9200100 0.3806 33 chr20 9858600 9861600 0 75 chr20 10807500 10808700 0.3624 71 chr20 11632800 11638800 0 75 chr20 12123900 12126900 0.2179 91 chr20 12362100 12362400 0.2709 73 chr20 12444600 12444900 0.5076 70 chr20 12487200 12487500 0.3725 61 chr20 12558600 12558900 0.5222 30 chr20 12587400 12587700 0.3507 89 chr20 12633900 12635700 0.1229 68 chr20 12663600 12664800 0.3062 100 chr20 12667500 12667800 0.3062 100 chr20 12755100 12755700 0.143 21 chr20 12756900 12757200 0.2769 27 chr20 12801000 12807000 0 74 chr20 13360200 13360500 0.4726 90 chr20 14273400 14273700 0.3044 71 chr20 14579100 14579400 0.4437 46 chr20 15000300 15000600 0.387 53 chr20 15135300 15136200 0.2358 56 chr20 15234000 15234300 0.384 33 chr20 15810300 15810600 0.4596 62 chr20 16226400 16228200 0.0111 47 chr20 16260000 16260300 0.228 61 chr20 16549500 16550400 0.1687 72 chr20 16993500 16994400 0.1203 78 chr20 17032500 17032800 0.3598 25 chr20 17122800 17123100 0.0173 20 chr20 18009600 18009900 0.3117 64 chr20 18071700 18072000 0.347 40 chr20 18195000 18195300 0.5157 79 chr20 18499500 18499800 0.5054 36 chr20 18601800 18606000 0 86 chr20 18861600 18861900 0.5809 80 chr20 18950100 18954300 0.0032 87 chr20 19080900 19081200 0.4178 30 chr20 19087800 19089300 0.0176 72 chr20 19118700 19119000 0.189 41 chr20 19262100 19262400 0.538 61 chr20 19419900 19421400 0.0159 68 chr20 19677900 19678200 0.5132 39 chr20 19755300 19755600 0.0534 47 chr20 19924200 19924500 0.535 25 chr20 20314800 20315100 0.4287 29 chr20 20346000 20346300 0.4478 27 chr20 20356500 20358000 0.362 67 chr20 21254100 21254400 0.3222 55 chr20 21747300 21747600 0.0899 87 chr20 21888600 21889500 0.1903 72 chr20 21891000 21893400 0.0414 91 chr20 21910800 21912000 0.0503 98 chr20 21915000 21915300 0.27 74 chr20 21929100 21929400 0.5199 54 chr20 21932400 21932700 0.2969 69 chr20 22083000 22083300 0.6769 13 chr20 22674600 22674900 0.6004 66 chr20 23262600 23263500 0.0284 62 chr20 23426100 23432100 0 107 chr20 23478300 23478600 0.3778 73 chr20 23589600 23595000 0 106 chr20 23715600 23715900 0.412 42 chr20 24408300 24408900 0.5011 57 chr20 24552900 24553200 0.4376 57 chr20 24625500 24625800 0.5123 90 chr20 25313100 25313400 0.5154 204 chr20 25332000 25335900 0 79 chr20 25562100 25562700 0.2475 63 chr20 25602600 25602900 0.5307 37 chr20 25716300 25716900 0.3748 42 chr20 25753500 25754700 0.26 74 chr20 25765500 25772400 0 139 chr20 25778400 25778700 0.1196 52 chr20 25779900 25847100 0 104 chr20 25930200 25930500 0.6435 103 chr20 26010900 26077500 0 118 chr20 26079300 26079900 0.6078 143 chr20 26084100 26091600 0 131 chr20 26093100 26093400 0.6296 74 chr20 26101500 26102100 0.4504 56 chr20 26238900 26239200 0.4258 61 chr20 26246700 26247000 0.1387 73 chr20 26282100 26282400 0.6292 94 chr20 26303700 26304600 0.3101 62 chr20 26310300 26311200 0 70 chr20 26313900 26314500 0.0244 79 chr20 26336400 26336700 0.6879 120 chr20 26339700 26342400 0.2631 281 chr20 26366700 26367000 0.0993 41 chr20 26384700 26386200 0.4312 27 chr20 26436300 26481000 0 929 chr20 26482200 26514300 0 982 chr20 26516100 26544000 0 982 chr20 26545500 26556300 0 317 chr20 26557500 26577000 0 449 chr20 26578200 26584500 0 449 chr20 26585700 26590500 0 449 chr20 26598300 28196100 0 2005 chr20 28197300 28499400 0 2005 chr20 28504800 28557000 0 481 chr20 28567500 28569300 0.2977 126 chr20 28574700 28576800 0.4431 102 chr20 28581600 28582200 0.6509 131 chr20 28584300 28584900 0.5878 124 chr20 28596000 28596300 0.2275 98 chr20 28599900 28600200 0.5542 124 chr20 28604700 28605300 0.062 75 chr20 28625700 28626600 0.3326 64 chr20 28635900 28637400 0.0164 99 chr20 28640400 28640700 0.4072 118 chr20 28643700 28646700 0 311 chr20 28648500 28694700 0 133 chr20 28696200 28717800 0 133 chr20 28719300 28728900 0 133 chr20 28732200 28732500 0.6703 322 chr20 28745400 28746600 0.5514 529 chr20 28748100 28749600 0.5256 406 chr20 28776900 28778700 0.1606 84 chr20 28783500 28783800 0.6614 115 chr20 28794300 28794600 0.6041 110 chr20 28802700 28803000 0.5563 137 chr20 28834800 28835400 0.563 115 chr20 28840800 28841400 0.6457 553 chr20 28842600 28843500 0 224 chr20 28861500 28861800 0.4962 162 chr20 28865400 28866000 0.5847 109 chr20 28888200 28890600 0.4142 1218 chr20 28897200 28899000 0.1563 1809 chr20 28900800 28901100 0.6968 270 chr20 28940100 28940700 0.0386 141 chr20 28957800 28958100 0.6827 115 chr20 28959300 29013900 0 125 chr20 29028300 29028600 0.3824 90 chr20 29031600 29031900 0.5586 180 chr20 29057400 29057700 0.4889 173 chr20 29058900 29059200 0.6303 236 chr20 29066100 29066400 0.6735 110 chr20 29067900 29071800 0.04 302 chr20 29074800 29075400 0.5923 249 chr20 29077500 29077800 0.5178 147 chr20 29080800 29081400 0.0396 202 chr20 29082600 29083200 0.2565 224 chr20 29088900 29089200 0.5832 77 chr20 29098200 29098500 0.4858 118 chr20 29106300 29106600 0.5733 153 chr20 29128800 29131500 0 73 chr20 29133600 29134500 0 31 chr20 29136000 29138100 0 57 chr20 29139300 29139900 0.0744 49 chr20 29143500 29143800 0 32 chr20 29145000 29145600 0 44 chr20 29147100 29150400 0.0473 43 chr20 29153100 29158800 0 40 chr20 29161200 29162100 0.2563 18 chr20 29163300 29168100 0 57 chr20 29170200 29171400 0.0748 69 chr20 29173500 29174100 0.1824 15 chr20 29175300 29179200 0 42 chr20 29181300 29181600 0.4431 27 chr20 29183700 29185200 0 40 chr20 29187900 29190300 0 41 chr20 29192400 29196900 0 56 chr20 29198100 29202600 0 79 chr20 29203800 29204400 0 79 chr20 29207400 29207700 0.4687 161 chr20 29208900 29209200 0.5876 63 chr20 29211900 29212200 0.5204 88 chr20 29214900 29215500 0.6323 145 chr20 29218800 29219100 0.5177 206 chr20 29222700 29223000 0.6904 142 chr20 29228400 29228700 0.6119 57 chr20 29253000 29253300 0.28 38 chr20 29258100 29259000 0.5428 88 chr20 29261700 29262000 0.2134 539 chr20 29337000 29337300 0.6393 108 chr20 29348100 29348400 0.602 141 chr20 29351100 29351400 0.6745 83 chr20 29352600 29352900 0.6715 53 chr20 29356200 29356800 0.4222 71 chr20 29389500 29390100 0.598 145 chr20 29402100 29402400 0.6891 26 chr20 29411100 29411700 0.6563 650 chr20 29451300 29451900 0.2251 36 chr20 29457300 29458500 0.6259 64 chr20 29475300 29475600 0.6331 59 chr20 29478900 29480100 0.6695 122 chr20 29481300 29481600 0.581 75 chr20 29483100 29484600 0.1427 124 chr20 29485800 29486400 0.6408 63 chr20 29493300 29494800 0.1119 187 chr20 29496300 29497200 0.3857 306 chr20 29499300 29500200 0.5032 198 chr20 29502000 29504400 0.5244 138 chr20 29505900 29508300 0.0315 180 chr20 29509800 29510100 0.6361 49 chr20 29511300 29511600 0.6991 158 chr20 29521200 29523000 0.4926 144 chr20 29535000 29535300 0.5836 68 chr20 29547300 29547600 0.3632 34 chr20 29584800 29586000 0.011 50 chr20 29637300 29637600 0.3632 72 chr20 29694600 29695500 0.6716 197 chr20 29697600 29697900 0.5785 194 chr20 29702400 29702700 0.5744 690 chr20 29704500 29705100 0.4856 60 chr20 29709000 29709300 0.6637 138 chr20 29712300 29712600 0.5497 127 chr20 29714700 29715300 0.6718 154 chr20 29719500 29719800 0.6979 102 chr20 29722500 29722800 0.6635 115 chr20 29799600 29799900 0.6918 73 chr20 29810400 29810700 0.5505 331 chr20 29828100 29828400 0.639 248 chr20 29838300 29838600 0.6494 102 chr20 29844900 29845200 0.6067 128 chr20 29847900 29848200 0.5912 50 chr20 29849400 29850600 0.662 133 chr20 29859000 29859300 0.5797 256 chr20 29863500 29863800 0.6227 139 chr20 29870700 29871000 0.6523 242 chr20 29879400 29880300 0.6284 384 chr20 29881500 29881800 0.6284 384 chr20 29883900 29885400 0.0318 165 chr20 29889600 29889900 0.585 102 chr20 29895600 29896200 0.5362 100 chr20 29901600 29901900 0.2431 47 chr20 29903100 29903700 0.5751 75 chr20 29904900 29905200 0.4586 155 chr20 29908200 29908500 0.6897 78 chr20 29909700 29910600 0 24 chr20 29913600 29914500 0 219 chr20 29915700 29920800 0 219 chr20 29922000 29923800 0 219 chr20 29925000 29934300 0 219 chr20 29937000 29941200 0 94 chr20 29942700 29943000 0.6391 121 chr20 29944800 29945100 0.4065 20 chr20 29947200 29948100 0 88 chr20 29949600 29952000 0 88 chr20 29953500 29955600 0 96 chr20 29957100 29958000 0 61 chr20 29960100 29964900 0 75 chr20 29966700 29975100 0 41 chr20 29976300 29976900 0 41 chr20 29979900 29983500 0 117 chr20 29985300 29986500 0 77 chr20 29987700 29990400 0 77 chr20 29991600 30001500 0 77 chr20 30003900 30006900 0 77 chr20 30008100 30016200 0 77 chr20 30018900 30024000 0 125 chr20 30025500 30026400 0 53 chr20 30027600 30029400 0 61 chr20 30030900 30033000 0 61 chr20 30034500 30037500 0.0304 39 chr20 30088500 30098400 0 73 chr20 30102000 30125100 0 111 chr20 30127200 30127800 0.0044 50 chr20 30129300 30129900 0 15 chr20 30131100 30137700 0 68 chr20 30147600 30147900 0.5563 67 chr20 30149400 30150000 0.61 81 chr20 30151800 30153900 0.5297 214 chr20 30157800 30159600 0.4586 87 chr20 30163500 30163800 0.6416 45 chr20 30166800 30167100 0.5156 62 chr20 30200700 30201000 0.4775 51 chr20 30215700 30216000 0.5957 86 chr20 30227700 30228900 0.4217 33 chr20 30237900 30238800 0.0117 60 chr20 30271200 30272400 0.0126 60 chr20 30283800 30284100 0.6512 587 chr20 30299700 30300000 0.4514 84 chr20 30353700 30354000 0.6472 173 chr20 30356400 30356700 0.4559 120 chr20 30357900 30358200 0.6701 68 chr20 30375000 30375300 0.4615 133 chr20 30379200 30379500 0.597 102 chr20 30392700 30393000 0.5519 195 chr20 30394800 30395400 0.2229 105 chr20 30403500 30403800 0.6799 151 chr20 30414900 30415200 0.3633 80 chr20 30418500 30418800 0.6791 176 chr20 30420300 30420600 0.632 165 chr20 30423300 30423600 0.6404 260 chr20 30503100 30503400 0.6736 80 chr20 30575400 30575700 0.3487 57 chr20 30756600 30756900 0.2173 117 chr20 30841200 30842700 0.189 291 chr20 30849300 30850800 0.61 157 chr20 30866700 30867300 0.607 239 chr20 30869700 30870300 0.3016 94 chr20 30879600 30880200 0.6506 129 chr20 30881700 30882000 0.6506 129 chr20 30936600 30936900 0.44 110 chr20 30959400 30959700 0.643 99 chr20 30963900 30964200 0.6723 95 chr20 30975300 30975600 0.2725 62 chr20 30977400 30977700 0.6376 189 chr20 30981000 30981300 0.6595 168 chr20 30986100 30986700 0.4498 65 chr20 30994800 30998700 0.6019 421 chr20 31000500 31001100 0.6273 431 chr20 31051500 31107000 0 8016 chr20 31156800 31159200 0.1848 4493 chr20 31162200 31178700 0.1794 2365 chr20 31179900 31238100 0 5715 chr20 31239300 31245300 0.1216 23471 chr20 31336200 31336500 0.3037 75 chr20 31426500 31426800 0.5321 80 chr20 31471200 31471500 0.619 89 chr20 32175300 32177400 0.0556 122 chr20 32723400 32724900 0 70 chr20 32926500 32927100 0.3177 45 chr20 33456000 33456300 0.0085 30 chr20 33699600 33699900 0.2503 18 chr20 34223400 34225200 0.0376 76 chr20 34227900 34231500 0 110 chr20 34527900 34528500 0.5886 46 chr20 34659000 34659300 0.5628 68 chr20 35153100 35154900 0.2117 80 chr20 35262600 35262900 0.2396 87 chr20 36000900 36001200 0.4431 51 chr20 36327600 36327900 0.4426 40 chr20 36690300 36690900 0.3049 56 chr20 36965700 36966000 0.4918 61 chr20 36976500 36976800 0.6839 43 chr20 36979800 36981600 0.0163 47 chr20 37000500 37001700 0.5288 91 chr20 38333700 38334000 0.3198 62 chr20 38460900 38461200 0.1819 77 chr20 38463900 38464200 0.6176 17 chr20 39368700 39372600 0.012 82 chr20 39740400 39742200 0.0434 63 chr20 39782100 39782400 0.4835 68 chr20 39802800 39806100 0.3242 86 chr20 39978300 39979500 0.0459 54 chr20 40620900 40625100 0.0045 83 chr20 40917300 40917600 0.406 24 chr20 41128200 41128500 0.2845 55 chr20 41554500 41554800 0.3635 52 chr20 41971200 41971800 0.0099 83 chr20 42207300 42208200 0.1111 73 chr20 42211500 42211800 0.3403 83 chr20 42515700 42516000 0.4309 71 chr20 42615600 42616800 0.2763 59 chr20 42618600 42619800 0.187 91 chr20 43095900 43096200 0.6823 33 chr20 43175700 43176300 0.0797 52 chr20 43395900 43397100 0 40 chr20 43815000 43820400 0.0476 93 chr20 44047500 44047800 0.1698 50 chr20 44132700 44133000 0.506 11 chr20 45591000 45591300 0.6994 128 chr20 45687900 45689100 0.4618 54 chr20 45738900 45739200 0.5125 70 chr20 46788900 46789500 0.6331 167 chr20 47525100 47525400 0.2034 111 chr20 47827200 47827500 0.331 73 chr20 47828700 47833200 0 94 chr20 47834700 47836200 0 72 chr20 47837400 47837700 0 72 chr20 47893200 47894700 0.0127 78 chr20 47898300 47902500 0 74 chr20 47903700 47904000 0 74 chr20 47978400 47978700 0.3658 55 chr20 48368100 48368400 0.3548 74 chr20 48494400 48495000 0.0547 84 chr20 48504300 48516000 0.0857 223 chr20 48590700 48591000 0.5817 67 chr20 48870900 48871800 0.0116 26 chr20 49617300 49617900 0.4836 123 chr20 49921800 49922100 0.5454 61 chr20 50209500 50209800 0.3926 361 chr20 51455700 51456000 0.3754 52 chr20 53163300 53163600 0.255 123 chr20 53204100 53204400 0.5139 65 chr20 53456400 53457900 0.0368 83 chr20 53459400 53460000 0.0368 83 chr20 53474400 53477700 0.0044 81 chr20 53504400 53509800 0.2021 86 chr20 54072900 54073200 0.4078 73 chr20 54249600 54250500 0 64 chr20 54375300 54375600 0.5354 66 chr20 54676200 54676500 0.4228 30 chr20 54785100 54785700 0.4221 70 chr20 54787800 54788400 0.3028 91 chr20 54810900 54812700 0.2455 71 chr20 54819000 54819300 0.1127 234 chr20 54933900 54934200 0.5289 47 chr20 55076100 55076400 0.1948 73 chr20 55497600 55497900 0.4083 43 chr20 55532100 55532700 0.3906 46 chr20 55848900 55849500 0.4327 49 chr20 55859700 55865400 0 74 chr20 55888200 55888500 0.0614 38 chr20 55902000 55902600 0.6206 55 chr20 55903800 55904100 0.3204 59 chr20 55944900 55945500 0.0357 21 chr20 55967100 55967400 0.6501 39 chr20 56082300 56082600 0.1091 70 chr20 56109000 56109600 0.0599 94 chr20 56281500 56282100 0.4787 38 chr20 58687500 58687800 0.3451 75 chr20 59133000 59133300 0.2007 84 chr20 59532900 59535300 0.1865 109 chr20 60409200 60410400 0 138 chr20 60445200 60445500 0.4449 40 chr20 60615900 60618600 0.1357 62 chr20 61242900 61243200 0.376 59 chr20 61283100 61283400 0.2659 48 chr20 61289700 61290300 0.143 87 chr20 61350300 61350600 0.3743 41 chr20 61641600 61641900 0.432 48 chr20 61653000 61653900 0.123 32 chr20 61675500 61675800 0.2688 50 chr20 61689300 61689600 0.3108 62 chr20 61783800 61784700 0.1949 47 chr20 61854900 61855200 0.6794 44 chr20 61943100 61944600 0 45 chr20 61945800 61948500 0.228 121 chr20 61951200 61951500 0.2769 21 chr20 61971300 61971600 0.6937 58 chr20 61978200 61978500 0.3357 50 chr20 61986000 61986300 0.6374 38 chr20 61995600 61995900 0.3613 33 chr20 62057700 62058900 0.071 77 chr20 62082900 62083200 0.3606 43 chr20 62270700 62271000 0.2404 44 chr20 62373600 62373900 0.6786 55 chr20 62509200 62509800 0.6642 43 chr20 62683800 62684100 0.5287 59 chr20 62755500 62755800 0.5554 39 chr20 62961000 62961300 0.2756 44 chr20 62966100 62966400 0.6545 26 chr20 62989800 62990100 0.1371 62 chr20 63028800 63029400 0.3811 76 chr20 63068400 63068700 0.3669 136 chr20 63156900 63157200 0.1406 38 chr20 63266700 63267000 0.4288 39 chr20 63372300 63372600 0.5004 23 chr20 63442800 63443700 0.4666 203 chr20 63445800 63446100 0.6815 62 chr20 63571200 63571800 0.4863 100 chr20 63607200 63609900 0.1235 189 chr20 63669600 63670500 0 62 chr20 63677700 63678000 0.3652 71 chr20 63693300 63693900 0.394 365 chr20 63824700 63825000 0.3108 17 chr20 63879900 63880500 0.5263 47 chr20 63919500 63920100 0.3251 42 chr20 63942000 63942300 0.371 20 chr20 63965100 63965400 0.0594 48 chr20 64011900 64012800 0.0031 84 chr20 64087200 64089000 0.0152 286 chr20 64090800 64091400 0.3819 50 chr20 64118400 64118700 0.4217 22 chr20 64127100 64127400 0.6451 23 chr20 64131900 64133700 0.2071 77 chr20 64135200 64135500 0.3438 60 chr20 64173600 64176300 0.0083 99 chr20 64178400 64178700 0.6032 97 chr20 64270800 64271400 0.014 49 chr20 64286700 64302300 0 89 chr20 64304100 64309500 0.0204 106 chr20 64310700 64312800 0.0204 106 chr20 64314600 64315200 0.0204 106 chr20 64317000 64317300 0.3709 83 chr20 64319100 64319400 0.3582 35 chr20 64321500 64322100 0.2459 64 chr20 64325700 64327200 0.0698 44 chr21 5010000 5033100 0 50 chr21 5034600 5037900 0 51 chr21 5039400 5062500 0 51 chr21 5067300 5070900 0.0802 59 chr21 5072100 5097300 0 49 chr21 5098800 5102700 0 66 chr21 5104800 5110500 0 66 chr21 5111700 5112000 0.0296 46 chr21 5113200 5113500 0.0296 46 chr21 5114700 5115000 0.0296 46 chr21 5116500 5117400 0 57 chr21 5118600 5142300 0 57 chr21 5143500 5166300 0 48 chr21 5231700 5232000 0.6057 181 chr21 5255100 5264100 0 130 chr21 5265300 5289600 0 130 chr21 5298300 5312100 0.0043 195 chr21 5313600 5349300 0 690 chr21 5350800 5357400 0 690 chr21 5359500 5371500 0 690 chr21 5375100 5390400 0.0132 233 chr21 5391600 5393400 0.1974 128 chr21 5443500 5448900 0 72 chr21 5499000 5506800 0 51 chr21 5508000 5627700 0 79 chr21 5677500 5796000 0 93 chr21 5846100 5916600 0 84 chr21 5966700 5985300 0 42 chr21 5988000 6097500 0 53 chr21 6099600 6161400 0 47 chr21 6211500 6312600 0 86 chr21 6314100 6375900 0 216 chr21 6429000 6429300 0.3473 39 chr21 6431100 6431400 0.1337 31 chr21 6434400 6437700 0.2077 42 chr21 6439200 6580200 0 152 chr21 6630300 6675000 0 122 chr21 6676500 6738900 0 122 chr21 6789600 6915600 0 77 chr21 6917400 6932400 0 55 chr21 6933600 6934200 0 55 chr21 6984300 7149600 0 89 chr21 7199700 7228500 0 185 chr21 7229700 7232100 0.1106 270 chr21 7233300 7239600 0.1106 270 chr21 7241400 7245900 0.0614 430 chr21 7248000 7248600 0.0039 606 chr21 7249800 7254900 0.0039 606 chr21 7257300 7262400 0.029 2269 chr21 7263900 7266000 0.029 2269 chr21 7268700 7271700 0 157 chr21 7274400 7281000 0 157 chr21 7283100 7286100 0.113 160 chr21 7287600 7289100 0.0003 315 chr21 7292400 7297200 0.0043 245 chr21 7298700 7303200 0.0043 245 chr21 7304700 7307100 0.0043 245 chr21 7308600 7312500 0.0043 245 chr21 7313700 7320900 0.0043 245 chr21 7322400 7323900 0.0043 245 chr21 7377900 7383900 0 44 chr21 7385100 7500900 0 79 chr21 7551000 7693800 0 91 chr21 7743900 7865700 0 64 chr21 7917900 7918200 0.5906 455 chr21 7926000 7930200 0.2991 1485 chr21 7938000 7938600 0.2479 2314 chr21 7942200 7942800 0.3584 578 chr21 7944000 7944900 0.2277 1733 chr21 7948500 7951500 0.4122 646 chr21 7954800 7957800 0.3721 1085 chr21 7970700 7975800 0.0106 351 chr21 7977300 8022900 0 314 chr21 8024100 8044800 0 385 chr21 8046000 8047500 0 184 chr21 8100000 8261100 0 6167 chr21 8310900 8472600 0 9156 chr21 8523000 8526900 0.0223 54 chr21 8528100 8530200 0.2226 55 chr21 8532900 8544900 0 77 chr21 8546100 8548800 0 77 chr21 8550000 8553900 0 101 chr21 8555100 8620800 0 101 chr21 8622600 8624400 0 101 chr21 8625600 8635200 0 101 chr21 8637000 8638200 0 101 chr21 8639400 8651100 0 53 chr21 8652600 8653800 0 53 chr21 8655600 8661900 0 58 chr21 8663700 8664000 0 110 chr21 8665500 8684100 0 110 chr21 8685300 8685600 0.5343 50 chr21 8687700 8688000 0.6395 40 chr21 8690700 8691300 0.0117 70 chr21 8694900 8695200 0.5034 60 chr21 8698200 8698500 0.3311 91 chr21 8700600 8701200 0.3311 91 chr21 8703900 8706600 0.255 86 chr21 8776200 8776500 0.4269 129 chr21 8779500 8779800 0.6901 152 chr21 8781000 8781300 0.3726 148 chr21 8782500 8784300 0.3726 148 chr21 8785800 8786700 0.4972 163 chr21 8790000 8833800 0 298 chr21 8835000 8838000 0 298 chr21 8840100 8843100 0 298 chr21 8844900 8886600 0 298 chr21 8986500 8988900 0 2094 chr21 9016200 9017100 0.0116 166 chr21 9019500 9020100 0.5673 127 chr21 9030600 9031200 0.1509 230 chr21 9032700 9036600 0.3347 239 chr21 9038700 9039300 0.1046 34 chr21 9040500 9072000 0 137 chr21 9073200 9074400 0 75 chr21 9075600 9083400 0 75 chr21 9085200 9085800 0.4513 18 chr21 9089400 9103200 0 126 chr21 9104700 9105000 0 126 chr21 9106800 9116700 0 126 chr21 9117900 9118800 0.0518 110 chr21 9120300 9195900 0 181 chr21 9246000 9377100 0 2350 chr21 9527100 9571200 0 205 chr21 9572400 9610500 0 205 chr21 9611700 9614100 0.012 115 chr21 9615300 9615900 0.0186 111 chr21 9617100 9619500 0.0186 111 chr21 9620700 9626100 0.0186 111 chr21 9627600 9629400 0.0027 88 chr21 9631500 9631800 0.0044 140 chr21 9633000 9636600 0.0044 140 chr21 9637800 9646800 0 146 chr21 9659100 9710700 0 141 chr21 9711900 9720300 0 141 chr21 9734700 9735300 0.1943 143 chr21 9797700 9804900 0 2099 chr21 9806100 9837300 0 2099 chr21 9849000 9849300 0.3908 190 chr21 9855000 9855300 0.6077 148 chr21 9863400 9863700 0.4236 94 chr21 9880500 9880800 0.3304 152 chr21 9895500 9896100 0.4165 128 chr21 9906600 9906900 0.2537 146 chr21 9998100 9998400 0.378 75 chr21 10015500 10015800 0.5128 87 chr21 10030500 10032600 0 105 chr21 10034700 10041900 0 105 chr21 10043400 10046400 0 105 chr21 10048500 10055700 0 117 chr21 10056900 10079100 0 117 chr21 10080600 10086000 0 103 chr21 10087800 10090200 0.0043 101 chr21 10091400 10092900 0.0043 101 chr21 10094100 10096200 0 118 chr21 10098000 10104900 0.0013 136 chr21 10107000 10111500 0.0016 135 chr21 10113000 10118700 0.0016 135 chr21 10120800 10121100 0 162 chr21 10122300 10122600 0 162 chr21 10124400 10169700 0 162 chr21 10269600 10274400 0.1199 15121 chr21 10324200 10326300 0.275 16528 chr21 10335300 10336800 0.3088 181 chr21 10344000 10344300 0.4792 213 chr21 10363800 10374000 0 391 chr21 10391100 10393200 0.1636 394 chr21 10395300 10395600 0.2973 353 chr21 10397100 10397400 0.2973 353 chr21 10398600 10400400 0.4674 388 chr21 10406100 10406400 0.6264 167 chr21 10407600 10407900 0.6519 158 chr21 10410000 10410300 0.4767 218 chr21 10426500 10427100 0.5719 449 chr21 10434900 10435500 0.1238 263 chr21 10441500 10441800 0.1166 120 chr21 10443600 10443900 0.643 138 chr21 10446600 10446900 0.5843 243 chr21 10467900 10468200 0.4757 142 chr21 10470600 10470900 0.6011 217 chr21 10472700 10473000 0.5435 253 chr21 10477500 10477800 0.2028 145 chr21 10479000 10479900 0.0833 153 chr21 10487100 10488000 0.198 126 chr21 10491600 10501500 0 207 chr21 10502700 10510200 0 207 chr21 10651800 10652700 0.1186 6680 chr21 10653900 10656900 0.1186 6680 chr21 10658400 10661100 0.2461 1950 chr21 10662300 10662600 0.2461 1950 chr21 10664100 10677000 0.2317 3467 chr21 10678200 10681500 0.3128 574 chr21 10683300 10683600 0.6083 320 chr21 10684800 10688700 0.3774 514 chr21 10691400 10694400 0.1738 30778 chr21 10696200 10698600 0.4679 374 chr21 10700400 10719900 0.1717 2181 chr21 10722000 10733400 0.2272 1201 chr21 10734600 10738200 0.2272 1201 chr21 10743600 10743900 0.559 123 chr21 10782600 10782900 0.6587 238 chr21 12980700 12981600 0.6481 248 chr21 12984300 12984600 0.6235 395 chr21 13020600 13020900 0.3612 105 chr21 13027200 13027500 0.5184 70 chr21 13029900 13031100 0.2766 62 chr21 13032600 13032900 0.4527 44 chr21 13038900 13039200 0.4857 57 chr21 13043700 13045200 0.1419 74 chr21 13046400 13047000 0.0221 94 chr21 13048800 13052400 0.0221 94 chr21 13056000 13057800 0.0221 94 chr21 13059000 13059900 0.2225 74 chr21 13061400 13065000 0.0238 72 chr21 13069500 13071300 0.2033 67 chr21 13087200 13088700 0.3185 68 chr21 13090500 13090800 0.5583 56 chr21 13092300 13092600 0.0615 54 chr21 13094400 13095900 0.227 59 chr21 13106700 13107000 0.4695 64 chr21 13109400 13110000 0.3879 68 chr21 13112400 13112700 0.3879 68 chr21 13113900 13114200 0.4043 68 chr21 13115400 13115700 0.3963 82 chr21 13117200 13117500 0.3963 82 chr21 13120800 13121400 0.3917 74 chr21 13122900 13123800 0.3917 74 chr21 13131300 13131900 0.5068 75 chr21 13137300 13138800 0.0037 69 chr21 13140900 13141200 0.4262 56 chr21 13144200 13144500 0.4495 62 chr21 13147500 13147800 0.3657 87 chr21 13155300 13156800 0.3072 66 chr21 13158600 13158900 0.3072 66 chr21 13162800 13164000 0.1345 62 chr21 13166700 13167300 0.1345 62 chr21 13170900 13172400 0.2468 62 chr21 13175100 13177200 0 80 chr21 13178400 13178700 0 80 chr21 13179900 13185900 0 80 chr21 13187700 13188000 0 80 chr21 13191000 13192500 0.1765 80 chr21 13193700 13196100 0.1765 80 chr21 13197300 13197900 0.1765 80 chr21 13199700 13201200 0.2112 96 chr21 13202700 13203000 0.0904 74 chr21 13204200 13205700 0.0904 74 chr21 13208700 13210200 0.0904 74 chr21 13212000 13212300 0.0904 74 chr21 13216500 13216800 0.2667 57 chr21 13219500 13219800 0.5364 62 chr21 13335600 13335900 0.4583 67 chr21 13347600 13348200 0.4426 45 chr21 13361700 13362000 0.4721 57 chr21 13375500 13375800 0.2169 64 chr21 13390800 13391400 0.2115 53 chr21 13416600 13416900 0.4312 75 chr21 13462500 13462800 0.525 51 chr21 13470000 13470300 0.4696 57 chr21 13483800 13484100 0.1919 73 chr21 13494000 13494300 0.2682 66 chr21 13500000 13501200 0.4058 52 chr21 13523700 13524300 0.3683 57 chr21 13528500 13528800 0.6305 65 chr21 13532400 13534800 0.1693 63 chr21 13542000 13542300 0.4418 58 chr21 13546500 13546800 0.5868 66 chr21 13563600 13564200 0.4376 59 chr21 13567800 13568100 0.2705 50 chr21 13586100 13594500 0 47 chr21 13596000 13608300 0.001 50 chr21 13610100 13610400 0 47 chr21 13611900 13644900 0 47 chr21 13646100 13649400 0 47 chr21 13651200 13654200 0 49 chr21 13656300 13663800 0 49 chr21 13666800 13668600 0 29 chr21 13669800 13673700 0 34 chr21 13674900 13711200 0 38 chr21 13712400 13717500 0 23 chr21 13719000 13732500 0 27 chr21 13733700 13780500 0 50 chr21 13782300 13799100 0 64 chr21 13805400 13805700 0.5611 70 chr21 13862100 13862400 0.4545 76 chr21 13866600 13866900 0.119 27 chr21 13881300 13881900 0.3526 77 chr21 13904100 13904700 0.3968 66 chr21 13931700 13932000 0.3921 43 chr21 13975500 13976100 0.0027 40 chr21 13984200 13984500 0.0357 54 chr21 13992600 13993500 0.0168 66 chr21 14059500 14060100 0.0877 52 chr21 14068200 14068800 0.1606 40 chr21 14097900 14098200 0.6688 99 chr21 14407800 14408100 0.0966 51 chr21 14587800 14588400 0.2189 68 chr21 14647500 14649000 0.4596 81 chr21 14927700 14933100 0.0127 104 chr21 15031500 15031800 0.5543 86 chr21 15554400 15555900 0.2513 83 chr21 15836400 15837300 0.2844 52 chr21 16398000 16398300 0.4284 32 chr21 16544400 16544700 0.2787 59 chr21 16971000 16971300 0.6488 24 chr21 17167500 17167800 0.171 29 chr21 17172600 17172900 0.034 25 chr21 17291700 17292900 0.0045 95 chr21 17305500 17306100 0.0801 51 chr21 17331000 17333100 0.3763 78 chr21 17377200 17382000 0.0522 84 chr21 17718600 17721000 0.1518 71 chr21 18561000 18561300 0.3244 47 chr21 18568800 18570000 0.3133 74 chr21 18871500 18872700 0.2019 63 chr21 18873900 18875100 0.2019 63 chr21 19008900 19009200 0.3514 66 chr21 19071900 19075800 0.0491 83 chr21 19959000 19959300 0.3831 62 chr21 20076900 20077200 0.0996 49 chr21 20199600 20201400 0.1161 66 chr21 21301800 21302100 0.2022 67 chr21 21660900 21661200 0.3857 60 chr21 22957500 22958100 0.3094 55 chr21 23001600 23003100 0.1547 35 chr21 23072400 23072700 0.5892 22 chr21 23147100 23147400 0.4975 93 chr21 24391800 24392100 0.0599 15 chr21 25919100 25924200 0 93 chr21 26359200 26359500 0.4926 81 chr21 27544200 27544500 0.1416 83 chr21 27575700 27577800 0.2385 64 chr21 27627000 27627600 0.5141 149 chr21 27893400 27893700 0.4119 56 chr21 29011500 29012700 0.4846 60 chr21 29229600 29229900 0.4175 31 chr21 29421300 29422500 0.1107 68 chr21 29781600 29781900 0.4174 44 chr21 30420900 30421200 0.4611 74 chr21 30840000 30841800 0.0202 95 chr21 31784400 31785300 0.2873 301 chr21 32224500 32226300 0.006 87 chr21 32771700 32772000 0.5364 66 chr21 33239700 33240000 0.6029 57 chr21 33321300 33324000 0.2625 169 chr21 33336000 33336600 0.4369 47 chr21 33926100 33927900 0.1607 87 chr21 33929100 33930300 0.1607 87 chr21 34374300 34495500 0 47 chr21 34701000 34701300 0.624 50 chr21 35493900 35499600 0.0053 94 chr21 35789700 35790000 0.4216 67 chr21 36496800 36497400 0.2061 169 chr21 37589400 37589700 0.553 40 chr21 38109300 38109600 0.1155 13 chr21 38188800 38189400 0.5671 41 chr21 38218500 38218800 0.416 45 chr21 38828400 38830500 0.0202 72 chr21 38874300 38874600 0.4657 39 chr21 38972400 38972700 0.4145 55 chr21 39583800 39584100 0.44 16 chr21 39786300 39786600 0.264 71 chr21 39974400 39975300 0.3369 266 chr21 40023300 40028400 0 88 chr21 40033800 40038900 0 70 chr21 40114200 40114500 0.5268 51 chr21 40182600 40182900 0.4661 31 chr21 40306200 40306800 0.4345 62 chr21 40378500 40378800 0.4651 45 chr21 40915800 40917600 0.0442 73 chr21 41031000 41031300 0.2293 15 chr21 41313300 41313900 0.5844 64 chr21 41690100 41690400 0.4742 59 chr21 41805900 41806800 0.4122 494 chr21 41856000 41856300 0.2654 24 chr21 42078300 42078600 0.2628 11 chr21 42283800 42284100 0.2368 21 chr21 42588000 42590400 0.0432 41 chr21 42615300 42615900 0.4852 62 chr21 42778500 42779100 0.4849 60 chr21 42957300 42957600 0.1622 1902 chr21 43035900 43036200 0.2369 40 chr21 43037400 43037700 0.2369 40 chr21 43039500 43040700 0.2369 40 chr21 43042500 43046100 0 66 chr21 43047300 43087200 0 66 chr21 43089000 43187400 0 56 chr21 43335900 43337400 0.4887 185 chr21 43377000 43438500 0 59 chr21 43440300 43550700 0 55 chr21 43553400 43572000 0 55 chr21 43583100 43583400 0.0403 24 chr21 44095800 44145900 0 46 chr21 44147100 44148900 0 46 chr21 44150100 44194800 0 46 chr21 44196900 44197200 0 15 chr21 44201100 44253300 0 46 chr21 44371200 44371500 0.6127 55 chr21 44410200 44410500 0.2899 31 chr21 44422800 44423100 0.1979 32 chr21 44481600 44481900 0.5926 60 chr21 44487000 44487300 0.1539 64 chr21 44504400 44504700 0.6736 63 chr21 44825100 44825700 0.4312 104 chr21 44981700 44982300 0.1984 85 chr21 45268800 45269100 0.5728 49 chr21 45500400 45501900 0.3509 71 chr21 45524100 45524700 0.1882 67 chr21 45633300 45634500 0.1596 78 chr21 45637500 45637800 0.5311 32 chr21 45746100 45747000 0.1334 74 chr21 45797700 45799200 0.5282 241 chr21 45924300 45925200 0.4092 266 chr21 45988200 45988500 0.3459 40 chr21 46010700 46011000 0.2921 17 chr21 46034400 46035300 0.0249 128 chr21 46090800 46091100 0.4801 199 chr21 46169400 46170900 0.208 119 chr21 46184400 46184700 0.2168 200 chr21 46201200 46202400 0.0904 103 chr21 46292400 46294800 0.1325 160 chr21 46413000 46413300 0.6679 81 chr21 46682700 46700100 0 125 chr22 10509900 10521900 0 137 chr22 10523100 10571700 0 137 chr22 10573500 10615200 0 65 chr22 10616400 10630800 0 65 chr22 10632900 10641300 0 52 chr22 10642500 10660200 0 64 chr22 10670400 10670700 0.3805 74 chr22 10674300 10676100 0.1213 56 chr22 10677600 10679400 0.096 80 chr22 10681200 10684200 0.096 80 chr22 10685700 10686300 0.1957 97 chr22 10688100 10690500 0.158 162 chr22 10697400 10700100 0.4895 63 chr22 10702800 10703400 0.2622 44 chr22 10706100 10710000 0.0682 97 chr22 10717200 10730400 0.2591 1599 chr22 10760100 10760400 0.3529 166 chr22 10765200 10766400 0.1735 230 chr22 10834500 10874400 0 142 chr22 10954500 10955100 0.3125 223 chr22 10963500 10963800 0.0399 97 chr22 11016600 11025900 0 384 chr22 11042400 11042700 0.0402 489 chr22 11043900 11048400 0.0402 489 chr22 11049900 11050800 0.0451 275 chr22 11052300 11053200 0.215 256 chr22 11058900 11059200 0.4593 142 chr22 11119200 11160900 0 78 chr22 11211000 11217600 0 585 chr22 11220600 11250300 0 193 chr22 11251500 11284800 0 193 chr22 11320200 11323200 0 357 chr22 11329800 11330100 0.6318 339 chr22 11332500 11332800 0.1977 108 chr22 11334600 11336100 0.1977 108 chr22 11368800 11372100 0.0029 1115 chr22 11430000 11430300 0.2654 29 chr22 11433000 11434200 0 40 chr22 11438400 11438700 0.2063 33 chr22 11440200 11440500 0.2973 39 chr22 11443800 11444100 0.5778 17 chr22 11445600 11447400 0 32 chr22 11449500 11450400 0 47 chr22 11451600 11452500 0 47 chr22 11454000 11456400 0 48 chr22 11458500 11459700 0 104 chr22 11460900 11466000 0 104 chr22 11470500 11471700 0 28 chr22 11472900 11473200 0 28 chr22 11475600 11477400 0 28 chr22 11481300 11481600 0.4795 10 chr22 11484000 11486100 0 35 chr22 11488500 11490300 0.512 24 chr22 11492400 11493600 0.244 22 chr22 11548500 11548800 0.3266 140 chr22 11557500 11560500 0 270 chr22 11681700 11682000 0.6513 128 chr22 11683200 11697000 0 151 chr22 11698500 11724300 0 219 chr22 11774700 11786400 0 157 chr22 11787600 11795400 0 157 chr22 11796600 11800200 0 157 chr22 11802300 11818200 0 825 chr22 11820000 11821200 0 134 chr22 11823000 11827500 0 163 chr22 11828700 11869800 0 163 chr22 11871600 11872800 0 163 chr22 11874000 11878800 0 41 chr22 11880900 11883900 0 79 chr22 11885100 11885700 0 79 chr22 11893800 11894100 0.0099 78 chr22 11895300 11899500 0 61 chr22 11901000 11959500 0 282 chr22 11963100 11963400 0 46 chr22 11966100 11970300 0 101 chr22 11972100 11976900 0 101 chr22 12031200 12031500 0.6972 96 chr22 12034200 12034500 0.6081 189 chr22 12042600 12043200 0.2457 162 chr22 12046200 12046800 0.104 109 chr22 12048300 12051600 0.3917 151 chr22 12054000 12055500 0.2925 168 chr22 12058200 12068700 0 128 chr22 12069900 12082200 0 171 chr22 12083400 12087900 0 171 chr22 12089100 12093000 0.0083 107 chr22 12095700 12102300 0.025 155 chr22 12103800 12105300 0.025 155 chr22 12106800 12107700 0.025 155 chr22 12109200 12109500 0.025 155 chr22 12113100 12114300 0.0023 194 chr22 12115800 12119100 0.0023 194 chr22 12123000 12132000 0 136 chr22 12133800 12142800 0.0014 246 chr22 12144000 12152700 0.0014 246 chr22 12154500 12157500 0.0014 246 chr22 12159000 12166500 0.0014 246 chr22 12167700 12169200 0.0014 246 chr22 12172200 12172500 0.016 892 chr22 12174900 12178800 0.016 892 chr22 12180000 12180300 0.016 892 chr22 12181500 12182700 0.0042 100 chr22 12183900 12189300 0.1295 148 chr22 12193500 12194100 0.5397 158 chr22 12200100 12200400 0.4692 160 chr22 12201600 12202200 0.4692 160 chr22 12204000 12204300 0.5989 141 chr22 12209400 12209700 0.3612 156 chr22 12211200 12213900 0.3612 156 chr22 12215400 12215700 0.1463 98 chr22 12218100 12222900 0.256 215 chr22 12225000 12225300 0.4271 84 chr22 12275700 12298200 0 313 chr22 12299400 12303000 0 313 chr22 12304500 12314100 0 313 chr22 12315300 12316500 0 313 chr22 12317700 12349800 0 313 chr22 12351300 12357600 0 356 chr22 12359100 12375000 0 356 chr22 12392700 12393000 0.6652 150 chr22 12398100 12399600 0.3949 165 chr22 12488700 12489000 0.6681 278 chr22 12490500 12498000 0 310 chr22 12499500 12513000 0 310 chr22 12514200 12537000 0 235 chr22 12538200 12543300 0 197 chr22 12544500 12545100 0.0024 273 chr22 12546600 12548100 0.0024 273 chr22 12549900 12589200 0.0024 273 chr22 12625500 12625800 0.6361 229 chr22 12691800 12692700 0.5247 1279 chr22 12694800 12695100 0.6449 128 chr22 12698700 12699000 0 13 chr22 12709200 12709500 0.1481 123 chr22 12711300 12719400 0.1481 123 chr22 12720600 12721200 0.1481 123 chr22 12723000 12726300 0.139 55 chr22 12776700 12788700 0.0376 169 chr22 12790500 12797700 0.0376 169 chr22 12799800 12803400 0.025 161 chr22 12804600 12805500 0.025 161 chr22 12806700 12818100 0.025 161 chr22 12868200 12904800 0 239 chr22 15155100 15165900 0 95 chr22 15167400 15208200 0 87 chr22 15209400 15227400 0 86 chr22 15228600 15316800 0 88 chr22 15318300 15329100 0 88 chr22 15331200 15338100 0 86 chr22 15339300 15352800 0 86 chr22 15354000 15361200 0 96 chr22 15362400 15369900 0 96 chr22 15372000 15387900 0 96 chr22 15390600 15390900 0.4512 65 chr22 15393000 15396300 0 88 chr22 15397800 15407700 0 88 chr22 15408900 15419400 0 91 chr22 15420600 15422700 0 91 chr22 15424200 15427500 0.0048 82 chr22 15428700 15430800 0.0048 82 chr22 15432300 15439800 0 88 chr22 15441000 15447900 0 88 chr22 15450000 15466200 0 88 chr22 15467400 15468600 0 139 chr22 15469800 15470100 0 139 chr22 15471600 15543900 0 139 chr22 15545100 15576600 0 156 chr22 15578700 15612900 0 162 chr22 15614100 15614400 0 162 chr22 15615600 15618000 0 162 chr22 15619200 15625500 0 162 chr22 15627000 15627600 0.0305 67 chr22 15629100 15630300 0.2347 116 chr22 15634800 15710700 0 209 chr22 15711900 15738000 0 209 chr22 15739800 15745500 0 209 chr22 15747300 15747600 0.0626 105 chr22 15750300 15760500 0.0053 160 chr22 15762300 15765600 0 183 chr22 15767400 15771600 0 183 chr22 15773400 15774300 0.0233 185 chr22 15775500 15828600 0 190 chr22 15830400 15834000 0.0015 163 chr22 15835500 15838500 0.0015 163 chr22 15839700 15840300 0.0015 163 chr22 15842100 15861000 0 177 chr22 15864000 15907800 0 161 chr22 15909000 15916500 0 103 chr22 15918300 15918900 0.0741 64 chr22 15923400 15923700 0.4917 58 chr22 15924900 15926400 0.5152 64 chr22 15927900 15928200 0.3157 66 chr22 15931200 15933000 0.2082 74 chr22 15941100 15944700 0.0362 68 chr22 15946500 15947400 0.3419 93 chr22 15951000 15951600 0.2018 59 chr22 15954900 15972000 0 46 chr22 15973500 15980700 0 89 chr22 15982200 15983700 0 89 chr22 15984900 16020600 0 89 chr22 16046400 16047900 0.6376 103 chr22 16057200 16057500 0.6567 128 chr22 16062300 16062600 0.6514 84 chr22 16064400 16064700 0.6623 114 chr22 16164900 16165200 0.0694 21 chr22 16188600 16188900 0.5432 25 chr22 16228800 16229100 0.5824 105 chr22 16238100 16238400 0.4648 40 chr22 16256100 16256400 0.6958 72 chr22 16258200 16258500 0.4679 56 chr22 16262100 16262400 0.6476 185 chr22 16265400 16265700 0.5905 122 chr22 16275600 16275900 0.4326 151 chr22 16305600 16314600 0 32 chr22 16315800 16316100 0 74 chr22 16319100 16323600 0 51 chr22 16325100 16325400 0.5398 22 chr22 16328100 16385700 0 11424 chr22 16409700 16410000 0.3013 94 chr22 16435500 16435800 0.5305 61 chr22 16438800 16439100 0.5509 123 chr22 16461300 16461600 0.4187 46 chr22 16479000 16522800 0 87 chr22 16545600 16546200 0.3325 75 chr22 16548000 16548300 0.3325 75 chr22 16558500 16558800 0.5608 98 chr22 16563000 16563300 0.6357 73 chr22 16565400 16565700 0.6862 91 chr22 16581000 16581300 0.3209 54 chr22 16636200 16636500 0.637 30 chr22 16701000 16701600 0.0393 70 chr22 16880700 16881300 0.548 66 chr22 16885500 16885800 0.6656 73 chr22 16895400 16895700 0.445 61 chr22 16959000 16959300 0.3749 49 chr22 17018100 17018400 0.1362 136 chr22 17033100 17034300 0.3226 98 chr22 17037000 17037300 0.2576 108 chr22 17103900 17104200 0.6936 30 chr22 17146800 17147400 0.1944 66 chr22 17876700 17877300 0.4925 188 chr22 18009300 18010200 0 32 chr22 18161100 18162600 0.0168 67 chr22 18165000 18165600 0.233 68 chr22 18170700 18171600 0.017 66 chr22 18176100 18178500 0.0484 86 chr22 18179700 18203700 0 987 chr22 18205200 18206100 0 1414 chr22 18207600 18231600 0 52 chr22 18233100 18234600 0 52 chr22 18236700 18238500 0.0142 1239 chr22 18339900 18346500 0 37 chr22 18347700 18354300 0 43 chr22 18357900 18368700 0 58 chr22 18371700 18387900 0 2035 chr22 18390600 18417300 0 63 chr22 18418500 18419700 0 1194 chr22 18420900 18433500 0 675 chr22 18484200 18485100 0 38 chr22 18486300 18487800 0 21 chr22 18489000 18491100 0 31 chr22 18492300 18502500 0 50 chr22 18504000 18505200 0 50 chr22 18507600 18518100 0 50 chr22 18520800 18536100 0 60 chr22 18538500 18568800 0 60 chr22 18570000 18571200 0 70 chr22 18572400 18588600 0 70 chr22 18590400 18598200 0 70 chr22 18599400 18607800 0 70 chr22 18609000 18616500 0 62 chr22 18617700 18633900 0 62 chr22 18635100 18636600 0 62 chr22 18637800 18638700 0 62 chr22 18639900 18640200 0 28 chr22 18641700 18648600 0 28 chr22 18650100 18652500 0 28 chr22 18653700 18654900 0 28 chr22 18656400 18657600 0 61 chr22 18658800 18659400 0 61 chr22 18709500 18720300 0 36 chr22 18722100 18727800 0 89 chr22 18729900 18731700 0.3272 12678 chr22 18733500 18739200 0 7475 chr22 18741600 18742200 0 36 chr22 18743400 18744600 0 23 chr22 18746100 18748500 0 49 chr22 18749700 18751500 0 49 chr22 18752700 18761700 0 51 chr22 18762900 18765300 0 51 chr22 18767100 18782400 0 43 chr22 18784200 18799200 0 47 chr22 18800400 18813600 0 43 chr22 18815100 18816900 0 34 chr22 18819600 18837900 0 50 chr22 18839100 18840300 0 32 chr22 18841500 18842100 0 32 chr22 18843300 18913200 0 8657 chr22 18914400 18916500 0 8657 chr22 18918300 18947700 0 123 chr22 18963600 18963900 0.4501 44 chr22 19025700 19026900 0.0494 56 chr22 19072500 19072800 0.5728 94 chr22 19907700 19908000 0.6268 23 chr22 20162400 20164500 0.2691 94 chr22 20325300 20327700 0.0425 47 chr22 20328900 20329200 0.0864 66 chr22 20331000 20332800 0.0864 66 chr22 20334000 20334900 0.0244 47 chr22 20338200 20348400 0 1137 chr22 20349900 20350500 0.0541 73 chr22 20352000 20353500 0.1668 47 chr22 20357700 20358000 0.4055 31 chr22 20366100 20366700 0.0382 77 chr22 20371500 20372400 0.0924 73 chr22 20374800 20376300 0.0192 64 chr22 20679300 20679900 0.226 47 chr22 20683200 20684100 0.219 60 chr22 20689200 20690400 0.1145 67 chr22 20696400 20698500 0.0021 48 chr22 20705700 20707200 0.3519 74 chr22 20708400 20709000 0.1947 55 chr22 20733300 20735400 0.3462 62 chr22 21057600 21057900 0.2559 45 chr22 21112200 21163800 0 116 chr22 21165600 21216000 0 452 chr22 21217800 21327000 0 379 chr22 21329700 21355200 0 63 chr22 21356400 21357000 0 55 chr22 21358800 21363000 0.1039 43 chr22 21364200 21377700 0 100 chr22 21379500 21405600 0 100 chr22 21407400 21442800 0 100 chr22 21460500 21476700 0 62 chr22 21477900 21479400 0 62 chr22 21480900 21485100 0.001 54 chr22 21486600 21542100 0 81 chr22 21543300 21555300 0 81 chr22 21558000 21559200 0.4369 74 chr22 21883500 21883800 0.4648 90 chr22 21955200 21957600 0 90 chr22 22160100 22161300 0.3692 46 chr22 22220700 22224000 0.0231 85 chr22 22267800 22268400 0.4152 81 chr22 22270500 22270800 0.386 70 chr22 22278600 22279200 0.2814 104 chr22 22281000 22281300 0.2814 104 chr22 22296300 22296600 0.4086 46 chr22 22630200 22633200 0.1377 97 chr22 22634700 22637400 0.1377 97 chr22 22638600 22639800 0.1377 97 chr22 22643400 22644900 0.1079 67 chr22 22650000 22650300 0.2507 33 chr22 22828500 22828800 0.6547 27 chr22 22877100 22877400 0.2481 51 chr22 22899900 22900500 0.0405 72 chr22 22905600 22905900 0.0704 80 chr22 23310900 23311200 0.1467 72 chr22 23316300 23318400 0.445 71 chr22 23329500 23330100 0.4051 43 chr22 23344500 23344800 0.1897 55 chr22 23448600 23449800 0.4971 61 chr22 23477700 23478000 0.4366 50 chr22 23540100 23540700 0.2428 60 chr22 23595000 23595300 0.5567 61 chr22 23601900 23602500 0.1783 63 chr22 23853600 23856300 0 134 chr22 23940000 23942100 0.0893 64 chr22 23946600 23949300 0 26 chr22 23951100 23952000 0.3798 49 chr22 23957100 23969100 0 49 chr22 23972100 23980500 0 51 chr22 23982000 23984400 0 31 chr22 23988900 23992200 0.0392 53 chr22 23999400 23999700 0.0329 49 chr22 24000900 24001200 0.0329 49 chr22 24193200 24195300 0.0563 88 chr22 24251700 24252600 0.0376 57 chr22 24258300 24260400 0.4548 92 chr22 24293700 24294300 0.0581 82 chr22 24297000 24297300 0.3342 63 chr22 24317100 24317400 0.5255 33 chr22 24643500 24647700 0.4664 75 chr22 24651900 24652500 0.4222 84 chr22 24658200 24659700 0.3717 89 chr22 24671100 24672000 0.0085 73 chr22 24674400 24674700 0.5184 31 chr22 25000200 25000500 0.2714 22 chr22 25228200 25228500 0.2127 65 chr22 25254000 25254300 0.5516 68 chr22 25266600 25267200 0.152 60 chr22 25309800 25310100 0.3228 67 chr22 25311900 25312200 0.388 69 chr22 25345500 25346100 0.6411 55 chr22 25455900 25456200 0.4911 72 chr22 25523700 25524000 0.1532 70 chr22 25613400 25613700 0.308 66 chr22 25615500 25615800 0.2402 54 chr22 26427300 26427900 0.4923 70 chr22 26772000 26773500 0.3252 82 chr22 28194600 28195800 0 70 chr22 28212600 28213800 0 61 chr22 28554000 28554300 0.5882 72 chr22 28663500 28669200 0 113 chr22 28781400 28781700 0.6311 45 chr22 29120100 29120400 0.536 198 chr22 29403900 29404200 0.5487 63 chr22 29421600 29421900 0.4378 66 chr22 29644500 29644800 0.5035 86 chr22 30060000 30060300 0.4418 69 chr22 30839100 30839400 0.6279 48 chr22 31011000 31011900 0.2181 67 chr22 31026600 31028100 0.0972 54 chr22 31590300 31593900 0.1627 57 chr22 32145900 32146200 0.4876 36 chr22 32156400 32156700 0.1777 37 chr22 32295000 32299800 0.0306 67 chr22 32329800 32330100 0.6362 22 chr22 32346600 32346900 0.2415 53 chr22 32931900 32932200 0.1505 95 chr22 34396500 34396800 0.6255 50 chr22 34549800 34555200 0 78 chr22 34677600 34682400 0.02 53 chr22 34779600 34779900 0.4564 45 chr22 35652900 35653200 0.4198 44 chr22 35694900 35695200 0.4736 68 chr22 35700900 35701200 0.4271 76 chr22 36090300 36090900 0.5531 62 chr22 36126300 36126900 0.4872 72 chr22 36138000 36138900 0 69 chr22 36187200 36188100 0 77 chr22 36201000 36201300 0.4329 61 chr22 36255600 36255900 0.3433 51 chr22 37097700 37098000 0.5971 58 chr22 37227000 37227300 0.2244 29 chr22 37329000 37329300 0.6384 74 chr22 38229600 38230200 0.2375 66 chr22 38384100 38386200 0.165 88 chr22 38806200 38808300 0.135 82 chr22 39599400 39599700 0.5908 32 chr22 39841500 39843000 0.2303 58 chr22 40007400 40007700 0.5195 59 chr22 40500900 40502400 0.1344 69 chr22 40536300 40538400 0.0283 82 chr22 40744200 40746600 0 61 chr22 40775400 40775700 0.3544 56 chr22 41295600 41295900 0.4226 58 chr22 42123300 42125700 0 73 chr22 42129900 42130500 0.1422 67 chr22 42135600 42138000 0 79 chr22 42143400 42144000 0.0188 67 chr22 42225300 42225600 0.6593 59 chr22 42324000 42324300 0.5534 145 chr22 42483900 42484200 0.477 60 chr22 42501600 42505800 0 73 chr22 42513300 42513600 0.0705 62 chr22 42518100 42519300 0.2469 61 chr22 42555000 42559200 0 77 chr22 42575100 42575700 0.1676 69 chr22 42580500 42580800 0.595 74 chr22 42980400 42982500 0.1118 80 chr22 43078800 43079100 0.4978 80 chr22 43281000 43281300 0.3349 26 chr22 43432500 43432800 0.5802 57 chr22 43496100 43497000 0.4123 44 chr22 43499700 43500000 0.5503 78 chr22 43834500 43835100 0.5472 36 chr22 44113200 44113500 0.4956 98 chr22 44115300 44115900 0.5295 71 chr22 44302500 44302800 0.5907 55 chr22 44800500 44801100 0.0118 31 chr22 45327900 45328500 0.2558 136 chr22 45916200 45916500 0.5322 42 chr22 46605900 46606500 0.1489 31 chr22 46631400 46632000 0.2235 73 chr22 46635000 46635600 0.5304 108 chr22 46772100 46772700 0.0849 28 chr22 46859100 46860000 0.0712 57 chr22 46941300 46941600 0.5647 32 chr22 47070600 47070900 0.4861 56 chr22 47117400 47117700 0.6848 43 chr22 47144700 47145000 0.6476 52 chr22 47170500 47170800 0.4228 118 chr22 47176200 47176500 0.6422 64 chr22 47400000 47400300 0.6722 68 chr22 47603100 47603400 0.6927 69 chr22 47732400 47732700 0.2424 94 chr22 48290100 48290700 0.0146 43 chr22 48498000 48498300 0.4945 39 chr22 48667800 48668400 0.505 25 chr22 48679200 48679800 0.4891 47 chr22 48862200 48863100 0.5343 72 chr22 48985800 48991500 0 78 chr22 49071000 49071300 0.6979 13 chr22 49265400 49266300 0.1012 73 chr22 49384200 49385100 0.0086 38 chr22 49387800 49388100 0.6006 29 chr22 49494300 49494600 0.5106 86 chr22 49552800 49553100 0.666 67 chr22 49672500 49672800 0.2866 43 chr22 49802100 49802700 0.368 62 chr22 49879500 49879800 0.6061 32 chr22 50028600 50029500 0.2043 119 chr22 50312700 50313000 0.5686 47 chr22 50629200 50629500 0.3992 61 chr22 50640000 50640300 0.4499 55 chr22 50643600 50644200 0.336 420 chr22 50680200 50682600 0.5425 81 chr22 50685300 50686500 0.4341 83 chr22 50741700 50742000 0.5432 64 chr22 50763600 50763900 0.0085 79 chr22 50765100 50767200 0.0085 79 chr22 50769000 50769300 0.2535 65 chr22 50777400 50777700 0.1312 54 chr22 50781900 50783100 0.2594 79 chr22 50784300 50784600 0.0304 76 chr22 50786700 50789100 0.0304 76 chr22 50790300 50790900 0 304 chr22 50792400 50794500 0 304 chr22 50797200 50808600 0 304 chr3 10200 11100 0.1615 113 chr3 18600 18900 0.0784 25 chr3 134700 135600 0.0731 40 chr3 261900 262500 0.1039 172 chr3 483000 483600 0.1157 24 chr3 582000 582300 0.4562 48 chr3 584100 584400 0.4562 48 chr3 588300 588600 0.5979 54 chr3 595800 597000 0.4344 50 chr3 697800 698700 0.2009 92 chr3 760500 761100 0.3758 76 chr3 810300 810600 0.0307 84 chr3 811800 814800 0.0307 84 chr3 876300 876900 0.0763 119 chr3 960900 961500 0.4311 43 chr3 1388700 1389300 0.0479 96 chr3 1390800 1393500 0.0479 96 chr3 1565400 1566000 0.0939 71 chr3 1596900 1597200 0.315 132 chr3 1638300 1638900 0.4588 57 chr3 1657800 1658700 0.011 169 chr3 1671600 1672200 0.49 54 chr3 1707300 1707600 0.1284 22 chr3 1811400 1811700 0.3648 49 chr3 2007000 2008500 0 118 chr3 2060700 2061300 0.5339 71 chr3 2084100 2084400 0.5575 53 chr3 2269800 2270100 0.63 31 chr3 2454000 2454600 0.0133 54 chr3 3047400 3047700 0.447 65 chr3 3131400 3132600 0.0091 100 chr3 3482400 3482700 0.3386 63 chr3 3671400 3672000 0.2514 77 chr3 3721200 3721800 0.1947 67 chr3 3723000 3723300 0.1947 67 chr3 3790200 3790500 0.6215 25 chr3 3831600 3831900 0.2837 24 chr3 3895200 3896100 0.2501 67 chr3 3963300 3969000 0 86 chr3 4025400 4027800 0 99 chr3 4039200 4039500 0.2301 23 chr3 4254300 4258500 0.0669 72 chr3 4266600 4268100 0.1616 112 chr3 4365000 4365900 0.3684 64 chr3 4917300 4922400 0 137 chr3 5119200 5119500 0.47 42 chr3 5239200 5239500 0.5549 53 chr3 5283300 5283600 0.4015 53 chr3 5526900 5527200 0.4563 74 chr3 6146700 6147000 0.2897 44 chr3 6268200 6268500 0.5621 45 chr3 6318300 6320700 0.3049 73 chr3 6388500 6389100 0.5786 48 chr3 6428700 6429000 0.6066 72 chr3 6486900 6488100 0.111 78 chr3 6546600 6548400 0.3003 67 chr3 6699600 6700200 0.1861 61 chr3 6764700 6765000 0.2697 59 chr3 6766800 6767100 0.5514 66 chr3 6829200 6829500 0.4611 68 chr3 7099500 7099800 0.6733 42 chr3 7524300 7524600 0.475 52 chr3 8334900 8336400 0.0154 71 chr3 8390700 8391000 0.3332 71 chr3 8411700 8412600 0.4486 34 chr3 8440800 8441100 0.3984 56 chr3 8612400 8612700 0.1351 37 chr3 8613900 8615400 0 109 chr3 8616900 8617500 0 109 chr3 8655000 8655300 0.0952 28 chr3 8718600 8721900 0.24 89 chr3 8924400 8925000 0.182 52 chr3 10052700 10053300 0.131 107 chr3 10070700 10071000 0.2133 75 chr3 10297500 10298400 0.0706 79 chr3 10355700 10356300 0.5064 75 chr3 10458300 10458600 0.5348 63 chr3 11167200 11167500 0.5594 46 chr3 11487000 11489700 0.0274 40 chr3 11502300 11502600 0.2934 43 chr3 11902200 11902500 0.5682 39 chr3 11942400 11943600 0.2716 80 chr3 12028800 12033300 0.0227 107 chr3 12297900 12298200 0.4318 63 chr3 12448500 12448800 0.6462 22 chr3 12668100 12668400 0.5385 38 chr3 14091300 14091900 0.2893 63 chr3 14968500 14968800 0.4289 48 chr3 15188100 15189300 0.0389 116 chr3 15190500 15192600 0.0389 116 chr3 15592500 15593100 0.4873 28 chr3 15749100 15749400 0.4374 42 chr3 16970400 16971000 0.1819 81 chr3 17097000 17099400 0.1059 103 chr3 17698500 17699700 0.1365 90 chr3 17703900 17706000 0.2455 74 chr3 17858400 17859300 0.1242 84 chr3 17907000 17907300 0.5347 60 chr3 18326100 18326700 0.1455 103 chr3 18328800 18329100 0.0664 90 chr3 18391200 18391500 0.6278 65 chr3 18517200 18519000 0.0792 96 chr3 18930900 18936000 0 81 chr3 18958800 18959100 0.3359 67 chr3 18961200 18961800 0.0647 97 chr3 18963000 18963300 0.3068 71 chr3 18979800 18980400 0.2393 71 chr3 19009800 19010700 0.0079 71 chr3 19097700 19098300 0.102 72 chr3 19099500 19101300 0.102 72 chr3 19371000 19372500 0.4022 81 chr3 19375200 19375500 0.4973 59 chr3 19502100 19503300 0.4183 86 chr3 19624800 19625100 0.3426 68 chr3 19855800 19858200 0.1864 92 chr3 19860000 19860300 0.1864 92 chr3 20353800 20354400 0.105 78 chr3 20355600 20355900 0.105 78 chr3 21250500 21251100 0.0249 100 chr3 21252300 21253800 0.0249 100 chr3 21278100 21278400 0.265 87 chr3 21416100 21416400 0.3119 42 chr3 21486000 21486300 0.1132 66 chr3 21490800 21491100 0.0748 59 chr3 21569100 21569400 0.3114 85 chr3 21983400 21988800 0 84 chr3 22050900 22056300 0 95 chr3 22100100 22100400 0.1616 62 chr3 22312800 22313100 0.5304 73 chr3 22433700 22434300 0.3435 88 chr3 22697400 22697700 0.4907 73 chr3 22739400 22740000 0.4407 93 chr3 22803000 22804500 0.0111 84 chr3 22806600 22807200 0.0895 144 chr3 23267700 23268000 0.5595 68 chr3 23298600 23298900 0.4731 77 chr3 23544600 23544900 0.5401 97 chr3 24090000 24095100 0 88 chr3 24282000 24282600 0.1494 70 chr3 24330000 24330300 0.4637 70 chr3 25760700 25761000 0.6013 68 chr3 26295000 26296500 0.1612 89 chr3 26384700 26390700 0 105 chr3 26398200 26403900 0 89 chr3 26495100 26495700 0.3218 92 chr3 26728800 26729100 0.2334 79 chr3 26730300 26731200 0.2334 79 chr3 26745300 26745600 0.2229 48 chr3 26784600 26784900 0.4882 35 chr3 26787300 26787600 0.4397 63 chr3 26843400 26843700 0.5221 45 chr3 26884200 26884500 0.3538 83 chr3 26917800 26918100 0.2177 73 chr3 26991600 26991900 0.3205 100 chr3 27093000 27093600 0 82 chr3 27204300 27206100 0.1867 112 chr3 27817500 27818700 0.0684 90 chr3 27819900 27821100 0.3438 81 chr3 28060800 28064700 0.2349 78 chr3 28354500 28355100 0.198 57 chr3 28366200 28366800 0.0367 68 chr3 28414500 28419900 0 74 chr3 28493400 28494900 0 83 chr3 28688700 28689000 0.2836 75 chr3 28732500 28732800 0.6817 45 chr3 28851600 28851900 0.2945 147 chr3 29109000 29111400 0.0005 83 chr3 29578800 29579100 0.6277 45 chr3 29996100 29996700 0.3759 73 chr3 30364800 30365100 0.1699 134 chr3 30412800 30414300 0.035 91 chr3 30820800 30821100 0.4141 72 chr3 31965300 31965600 0.3812 18 chr3 32279400 32280000 0.0847 102 chr3 32729700 32730000 0.4266 49 chr3 33511800 33512700 0 93 chr3 33675300 33676500 0.3967 81 chr3 34413300 34418400 0 100 chr3 34653000 34656600 0 91 chr3 35015400 35016000 0.3868 69 chr3 35820000 35820300 0.4025 74 chr3 35902200 35902800 0.2433 83 chr3 36066600 36066900 0.3308 46 chr3 36104700 36105300 0.2951 84 chr3 36237900 36239100 0.2829 57 chr3 36300600 36301200 0.5027 42 chr3 38081100 38082000 0.1864 78 chr3 38084400 38084700 0.598 242 chr3 38184900 38185200 0.5165 56 chr3 38341500 38343300 0 67 chr3 38388900 38389500 0.3282 77 chr3 38406900 38407200 0.201 95 chr3 39228000 39228600 0.1376 91 chr3 39468900 39469200 0.6522 35 chr3 39585000 39585900 0.3618 77 chr3 39676800 39677100 0.2748 44 chr3 39984900 39985800 0.1 82 chr3 40040100 40042200 0.1816 80 chr3 40084200 40085100 0.4137 43 chr3 40157100 40157700 0.1844 67 chr3 40203900 40204200 0.006 351 chr3 40219800 40220100 0.2086 113 chr3 40239300 40240200 0.1 84 chr3 40758300 40758600 0.4822 81 chr3 40759800 40760100 0.4822 81 chr3 40903200 40903800 0.1698 78 chr3 40906200 40907100 0.4018 59 chr3 40955100 40955400 0.4467 74 chr3 40956900 40957200 0.3875 70 chr3 41377500 41377800 0.3352 72 chr3 41481600 41481900 0.3893 71 chr3 41493900 41494200 0.3486 52 chr3 41689800 41690100 0.264 108 chr3 41776500 41779800 0.0026 134 chr3 41805600 41806200 0.334 64 chr3 41829000 41829300 0.3965 63 chr3 42241200 42243600 0.2531 78 chr3 42282900 42283200 0.1898 85 chr3 42796800 42799200 0 60 chr3 42976800 42977100 0.4814 63 chr3 42989700 42990000 0.295 44 chr3 43065300 43070700 0.0059 109 chr3 43167300 43167600 0.4204 64 chr3 43486800 43487100 0.2352 85 chr3 43488300 43488600 0.2352 85 chr3 43568400 43571100 0.1767 83 chr3 43655700 43656000 0.6113 57 chr3 44502900 44503200 0.367 63 chr3 44567700 44568000 0.3231 42 chr3 44750400 44751000 0.0447 55 chr3 45133500 45133800 0.3028 47 chr3 45680700 45681000 0.5475 113 chr3 45726900 45727200 0.0744 30 chr3 46140300 46140600 0.4663 87 chr3 46149300 46152300 0.0887 99 chr3 46174800 46175100 0.3377 52 chr3 46495200 46495500 0.3215 77 chr3 46508400 46508700 0.5712 58 chr3 46772700 46774500 0.0041 93 chr3 46783200 46788600 0 101 chr3 46800900 46801800 0.0069 63 chr3 47259600 47260500 0.2729 87 chr3 48055500 48057600 0.0415 92 chr3 48202500 48202800 0.6 47 chr3 48210600 48213300 0.0045 86 chr3 48615600 48615900 0.436 44 chr3 48843900 48844800 0.3393 75 chr3 49160400 49160700 0.4418 48 chr3 49456800 49457100 0.2502 37 chr3 50084400 50085600 0.3501 67 chr3 50887200 50887800 0.1505 63 chr3 50897700 50898300 0.1061 58 chr3 50973300 50977200 0.0895 77 chr3 51201000 51201300 0.5051 68 chr3 51204000 51204900 0.1295 76 chr3 51527100 51527400 0.5266 97 chr3 51863400 51864900 0.0144 67 chr3 52499700 52500000 0.4033 51 chr3 52675800 52676100 0.1508 32 chr3 52898400 52898700 0.4094 57 chr3 53365500 53370900 0 99 chr3 53691600 53691900 0.5446 11 chr3 53921700 53926800 0.1434 94 chr3 54287400 54287700 0.228 60 chr3 54394500 54400200 0 96 chr3 54459300 54460200 0.3417 70 chr3 54809400 54809700 0.3215 38 chr3 55046100 55051200 0 64 chr3 55137600 55142100 0 92 chr3 55833900 55834200 0.3806 80 chr3 56514000 56515500 0.0439 79 chr3 56543400 56544000 0.043 73 chr3 57028200 57028800 0.1478 76 chr3 57250800 57251100 0.5097 42 chr3 57329400 57329700 0.2461 70 chr3 57448800 57449100 0.5912 63 chr3 57747000 57748800 0.3045 53 chr3 58549200 58551000 0.1293 82 chr3 58815300 58815600 0.3912 82 chr3 58817400 58819800 0.1562 104 chr3 58821600 58822200 0.1562 104 chr3 58843800 58848300 0.0513 125 chr3 58854600 58855200 0.2609 76 chr3 58870500 58870800 0.3596 43 chr3 58889700 58891200 0.0485 75 chr3 59127900 59128200 0.5224 48 chr3 60098100 60098400 0.2452 51 chr3 60377400 60377700 0.5761 34 chr3 60713100 60713700 0.4547 77 chr3 60860100 60860400 0.5276 52 chr3 61397700 61400100 0.0028 78 chr3 61672200 61672500 0.2102 76 chr3 62599500 62599800 0.0131 24 chr3 62847300 62851800 0.0021 141 chr3 63136500 63142200 0 141 chr3 63153000 63155700 0 97 chr3 63211800 63217500 0 112 chr3 63589500 63591900 0.0087 237 chr3 63736800 63738600 0.0895 83 chr3 63780900 63781200 0.2278 62 chr3 64982100 64982700 0.4302 63 chr3 65510400 65514600 0.0188 113 chr3 65697300 65699700 0.0623 92 chr3 66063600 66063900 0.0622 32 chr3 66170700 66171000 0.5108 46 chr3 66874200 66874800 0.0157 23 chr3 67152900 67153500 0.3543 75 chr3 67264800 67265400 0.3095 87 chr3 67443600 67446300 0.0714 67 chr3 67814400 67815600 0.08 119 chr3 67903200 67904400 0.4069 64 chr3 68076900 68077500 0.1096 82 chr3 68123700 68124000 0.563 60 chr3 68613300 68613600 0.3556 43 chr3 69313800 69314100 0.4458 52 chr3 69437700 69438000 0.0638 43 chr3 69478800 69479100 0.5213 54 chr3 69628200 69628500 0.2672 52 chr3 70287000 70289700 0.1145 83 chr3 70448100 70448400 0.5513 77 chr3 71435400 71436000 0.1199 186 chr3 72431100 72431400 0.667 41 chr3 72730800 72731400 0.3954 56 chr3 72736200 72736500 0.405 48 chr3 74087100 74087400 0.5368 65 chr3 74451900 74452500 0.1467 83 chr3 74454000 74454600 0.1467 83 chr3 74589300 74589900 0.1245 111 chr3 74703000 74703300 0.0619 128 chr3 74716200 74716500 0.3126 32 chr3 74955600 74955900 0.0772 76 chr3 74970000 74971200 0.1122 54 chr3 75000000 75000300 0.3667 43 chr3 75065100 75065400 0.6897 43 chr3 75092100 75096000 0.0578 77 chr3 75120000 75120600 0.085 147 chr3 75121800 75123000 0.085 147 chr3 75275700 75276300 0.3866 67 chr3 75566700 75567900 0.5827 47 chr3 75638100 75638700 0.4269 96 chr3 75668700 75669300 0.5798 5232 chr3 75685200 75685500 0.653 108 chr3 75750000 75750300 0.6744 97 chr3 75752100 75753900 0.5649 211 chr3 75846900 75847200 0.2396 63 chr3 75867000 75867300 0.358 70 chr3 76059000 76059300 0.5038 64 chr3 76149900 76150200 0.6217 54 chr3 76414500 76414800 0.4862 36 chr3 76619100 76619400 0.4725 61 chr3 76730700 76731000 0.1813 17 chr3 77165100 77165400 0.5127 51 chr3 77290200 77290800 0.3021 38 chr3 77428200 77428500 0.6276 38 chr3 77655900 77656200 0.4935 62 chr3 77763900 77769600 0 100 chr3 78489900 78492000 0.2 82 chr3 78582300 78583800 0.0264 28 chr3 78680700 78681000 0.4416 69 chr3 78795900 78796500 0.0674 62 chr3 78948900 78949500 0.2451 61 chr3 79129800 79134900 0 92 chr3 79612200 79612500 0.4248 65 chr3 80320800 80321100 0.4224 51 chr3 80441400 80442600 0.0523 70 chr3 80837100 80838000 0.2232 94 chr3 80876100 80877300 0 82 chr3 80892600 80897100 0.0768 75 chr3 81051600 81057300 0 110 chr3 81487500 81488100 0.2296 78 chr3 81576000 81576300 0.4841 43 chr3 81720900 81721200 0.0618 44 chr3 81738000 81738300 0.4135 85 chr3 81858300 81858600 0.2582 20 chr3 82152900 82154100 0.0256 51 chr3 82300800 82301100 0.4357 64 chr3 82334400 82336800 0.3552 65 chr3 82338300 82339200 0.1141 74 chr3 82465200 82465500 0.1938 13 chr3 82866900 82867500 0.1967 70 chr3 83037900 83039400 0 100 chr3 83804100 83806200 0 75 chr3 84508500 84508800 0.6196 76 chr3 85104000 85104300 0.457 55 chr3 85154700 85155000 0.4579 82 chr3 85293300 85293900 0.2743 57 chr3 85897200 85897500 0.3459 48 chr3 86018100 86019600 0.044 70 chr3 86860200 86860500 0.1175 60 chr3 87481500 87482400 0.1325 82 chr3 87844500 87845700 0.0908 89 chr3 88050300 88050600 0.58 35 chr3 88119000 88119300 0.2824 71 chr3 88503600 88504200 0.179 94 chr3 88505700 88506600 0.179 94 chr3 88508400 88508700 0.179 94 chr3 88551900 88552200 0.2832 89 chr3 88629900 88630200 0.4232 40 chr3 88872000 88873800 0.1663 92 chr3 89219700 89220000 0.3354 45 chr3 89345700 89351700 0.0094 88 chr3 89460600 89466900 0 136 chr3 89610900 89611200 0.4693 35 chr3 89752800 89753100 0.3209 70 chr3 89869200 89874600 0.0022 91 chr3 89941500 89943900 0.3604 66 chr3 89960100 89960400 0.0181 109 chr3 89961600 89962200 0.0181 109 chr3 89984700 89985000 0.3441 52 chr3 90156600 90156900 0.3752 93 chr3 90169500 90175500 0.0053 202 chr3 90290700 90291000 0.6394 125 chr3 90298200 90298500 0.678 112 chr3 90303900 90305100 0.2483 101 chr3 90334500 90334800 0.2837 75 chr3 90336000 90339300 0 94 chr3 90394200 90394500 0.6389 75 chr3 90404400 90404700 0.6985 97 chr3 90406200 90408600 0.0956 184 chr3 90410400 90410700 0.6967 150 chr3 90419100 90419700 0.2852 88 chr3 90443100 90443400 0.5502 165 chr3 90455700 90456000 0.6751 126 chr3 90457800 90458100 0.655 90 chr3 90478200 90478500 0.621 88 chr3 90480000 90480300 0.6196 153 chr3 90485100 90486600 0.6422 118 chr3 90498000 90498300 0.6828 145 chr3 90506100 90506400 0.6401 174 chr3 90507900 90508200 0.6643 136 chr3 90510000 90511500 0.4989 409 chr3 90513000 90515700 0 206 chr3 90517800 90518100 0.673 99 chr3 90519300 90524100 0.5614 402 chr3 90525300 90526200 0.0064 70 chr3 90527400 90527700 0.6869 120 chr3 90529800 90532200 0.5416 238 chr3 90533400 90536100 0.4972 238 chr3 90537900 90541200 0.6167 449 chr3 90542400 90543900 0.3575 693 chr3 90545400 90546000 0.3575 693 chr3 90547500 90548100 0.643 178 chr3 90549300 90555300 0.5919 200 chr3 90558900 90559800 0.1323 115 chr3 90561300 90565200 0 303 chr3 90568800 90569400 0 40 chr3 90571800 90573000 0.6632 101 chr3 90575100 90579900 0.5248 404 chr3 90581700 90583500 0.1733 299 chr3 90584700 90593400 0.273 292 chr3 90596100 90596400 0.6797 78 chr3 90598800 90599100 0.6896 95 chr3 90601200 90602100 0.6197 197 chr3 90604800 90605400 0.6327 195 chr3 90610200 90614700 0.5678 238 chr3 90616200 90621900 0.4764 389 chr3 90623100 90624000 0.5558 228 chr3 90627000 90628500 0.5623 132 chr3 90629700 90630600 0.6568 117 chr3 90632700 90635400 0.5042 477 chr3 90637200 90638700 0.5881 161 chr3 90640500 90642300 0.4967 165 chr3 90643800 90644100 0.609 137 chr3 90645600 90648000 0.3353 155 chr3 90650100 90657300 0.5925 517 chr3 90660000 90660300 0.6554 352 chr3 90662400 90666000 0.532 176 chr3 90667800 90687000 0.095 600 chr3 90688200 90711900 0.1068 218 chr3 90713700 90721200 0 348 chr3 90772500 90777600 0 256 chr3 90778800 90832200 0 1009 chr3 90833400 90847500 0 1009 chr3 90849000 90885000 0 994 chr3 90886200 90892200 0 772 chr3 90894000 90961800 0 494 chr3 90963300 90975300 0 494 chr3 90976500 91039200 0 637 chr3 91040400 91050900 0 637 chr3 91052400 91057200 0 637 chr3 91058700 91059000 0 637 chr3 91060200 91061700 0 383 chr3 91063200 91075200 0 383 chr3 91076700 91085700 0 415 chr3 91086900 91103700 0 415 chr3 91104900 91105800 0 415 chr3 91107000 91110600 0 78 chr3 91112400 91115700 0.0243 101 chr3 91118100 91122300 0 172 chr3 91123500 91125600 0 526 chr3 91126800 91137300 0 526 chr3 91138800 91149600 0 526 chr3 91150800 91152900 0 526 chr3 91154400 91155300 0.0195 356 chr3 91156500 91156800 0 156 chr3 91158900 91171800 0 420 chr3 91173300 91180500 0 420 chr3 91181700 91197600 0 836 chr3 91198800 91201200 0 202 chr3 91202400 91208700 0 202 chr3 91210200 91210500 0 202 chr3 91211700 91212300 0 398 chr3 91213500 91225800 0 398 chr3 91229100 91233900 0 247 chr3 91235700 91236600 0 81 chr3 91238100 91243200 0 374 chr3 91244700 91247400 0.0016 343 chr3 91248900 91249800 0.0016 343 chr3 91256400 91257000 0.0758 62 chr3 91260300 91261200 0 18 chr3 91262400 91264500 0.2464 68 chr3 91277700 91285800 0 210 chr3 91385100 91385700 0.0246 46 chr3 91392900 91394700 0.1413 67 chr3 91425900 91426200 0.4999 61 chr3 91519200 91522200 0.5685 160 chr3 91523400 91523700 0.694 107 chr3 91526100 91526400 0.68 110 chr3 91533000 91533300 0.5808 178 chr3 91542600 91713900 0 2208 chr3 91715100 93026400 0 2208 chr3 93027600 93655500 0 2208 chr3 93705600 93713400 0 163 chr3 93717000 93717300 0.2699 17 chr3 93727800 93728100 0.4078 77 chr3 93748500 93749100 0.4217 67 chr3 93766200 93766500 0.6898 96 chr3 93778200 93778500 0.5541 203 chr3 93783300 93785100 0.6172 154 chr3 93789300 93791400 0.0115 83 chr3 93792600 93792900 0.653 132 chr3 94238700 94240500 0.271 84 chr3 94439100 94439700 0.3285 92 chr3 94749000 94751100 0.1558 74 chr3 94850400 94850700 0.1895 74 chr3 95166300 95166900 0.5884 48 chr3 95397300 95397600 0.3389 44 chr3 95661600 95662200 0.4015 66 chr3 95802900 95803800 0.2133 68 chr3 95805000 95805600 0.2133 68 chr3 95853000 95853600 0.4517 74 chr3 96079800 96080100 0.3002 74 chr3 96163800 96164100 0.3784 61 chr3 97598700 97600500 0.1935 85 chr3 97641900 97642500 0.1939 69 chr3 97644300 97645500 0.1939 69 chr3 97716300 97716600 0.2898 56 chr3 97906200 97907700 0.1516 84 chr3 97909200 97910100 0.3219 70 chr3 98176200 98176500 0.4594 12 chr3 98178300 98178600 0.5094 61 chr3 98466000 98467800 0.0842 74 chr3 98766300 98766600 0.6648 78 chr3 98835000 98835600 0.1642 67 chr3 98836800 98838600 0.1642 67 chr3 99038400 99038700 0.5636 29 chr3 99273000 99274200 0.2275 86 chr3 99290100 99290400 0.4598 73 chr3 99291600 99291900 0.2858 74 chr3 99293100 99293400 0.2858 74 chr3 99318600 99318900 0.0277 36 chr3 99362700 99363300 0.3046 103 chr3 99371100 99371700 0.21 63 chr3 100066500 100066800 0.5893 28 chr3 100221600 100221900 0.2919 61 chr3 100473300 100474200 0.1035 81 chr3 100514700 100515300 0.4423 87 chr3 100572600 100572900 0.4031 67 chr3 100587900 100588200 0.3152 35 chr3 101145600 101145900 0.2928 66 chr3 101198400 101198700 0.1679 61 chr3 101439000 101440500 0.024 81 chr3 101694000 101694600 0.1036 61 chr3 101697900 101698200 0.4495 144 chr3 101700000 101700300 0.5994 110 chr3 101746200 101747100 0.1855 76 chr3 101749500 101750400 0.2185 56 chr3 101797500 101798100 0.0682 76 chr3 102216300 102216600 0.3965 68 chr3 102495600 102495900 0.1516 57 chr3 102564900 102565200 0.2746 48 chr3 103028400 103028700 0.388 91 chr3 103131600 103132800 0.3553 60 chr3 103220700 103226400 0 64 chr3 103233000 103236600 0 102 chr3 103556400 103562400 0 118 chr3 103710900 103711200 0.4327 68 chr3 103829100 103829400 0.2573 29 chr3 105297600 105301200 0.0742 63 chr3 105521100 105521400 0.5192 61 chr3 105563700 105564000 0.2727 50 chr3 105587400 105592200 0 101 chr3 106072800 106074000 0.333 39 chr3 106110300 106111200 0.032 75 chr3 106112400 106112700 0.2326 26 chr3 106665900 106668000 0.0646 106 chr3 106669800 106670400 0.0646 106 chr3 106950300 106950900 0.0951 73 chr3 106976100 106981200 0.0067 91 chr3 107338800 107339100 0.2821 60 chr3 107583600 107583900 0.6071 51 chr3 107692800 107695500 0.0821 85 chr3 107886000 107889000 0.0324 133 chr3 108259800 108260100 0.4548 70 chr3 108261600 108261900 0.4563 79 chr3 108263100 108263400 0.4563 79 chr3 108372300 108372600 0.4291 61 chr3 108373800 108375300 0.1273 85 chr3 108575400 108576000 0.4477 75 chr3 108633600 108633900 0.6282 37 chr3 108749400 108755400 0 112 chr3 109164000 109164600 0.3653 90 chr3 109193700 109194000 0.6594 14 chr3 109200000 109205700 0 122 chr3 109456200 109456500 0.3226 54 chr3 109511100 109511700 0.4098 81 chr3 109757700 109758000 0.2296 71 chr3 109761600 109762800 0.3164 80 chr3 110087100 110087400 0.5283 31 chr3 110117700 110120700 0 106 chr3 110348100 110348400 0.3224 93 chr3 110441400 110445900 0.0056 76 chr3 110633100 110636400 0.0342 81 chr3 110889900 110890500 0.0972 38 chr3 110912100 110912400 0.6445 58 chr3 110914800 110915100 0.4852 67 chr3 111019800 111024600 0.0127 83 chr3 111388200 111388500 0.4047 65 chr3 111490200 111490500 0.454 60 chr3 111491700 111492600 0.0979 81 chr3 111556800 111561900 0 84 chr3 111753000 111756000 0.1915 90 chr3 111830400 111830700 0.3942 52 chr3 112162800 112163400 0.181 98 chr3 112183500 112184400 0 77 chr3 112205700 112206000 0.6179 34 chr3 112419600 112420200 0.5819 47 chr3 112659600 112661100 0.3693 83 chr3 112662600 112664100 0.406 72 chr3 112727700 112728000 0.4097 86 chr3 112729200 112729800 0.4097 86 chr3 113024400 113033400 0 90 chr3 113049300 113049600 0.5024 72 chr3 113476500 113476800 0.3351 67 chr3 114280200 114282600 0.1078 91 chr3 114662400 114663300 0.2781 73 chr3 114747600 114747900 0.2771 16 chr3 115305600 115305900 0.6308 25 chr3 115312800 115313100 0.5331 97 chr3 115315200 115315800 0.1317 80 chr3 115670100 115670400 0.4883 39 chr3 116204700 116206500 0.0591 94 chr3 116208000 116208300 0.0591 94 chr3 116360100 116365800 0 95 chr3 116427000 116427300 0.5107 49 chr3 116459100 116459400 0.4365 52 chr3 116507700 116508000 0.4063 79 chr3 116644500 116646000 0.0096 61 chr3 116986200 116986500 0.2677 76 chr3 117112200 117112500 0.3583 49 chr3 117309900 117310200 0.3353 58 chr3 117335400 117335700 0.2238 79 chr3 118049100 118049400 0.3763 77 chr3 118845300 118845900 0.2126 67 chr3 118854900 118855200 0.5498 37 chr3 118914600 118916100 0.0214 384 chr3 118917600 118920000 0.0214 384 chr3 119001900 119003400 0.0697 77 chr3 119004600 119007300 0.0697 77 chr3 119049900 119050200 0.1986 64 chr3 119107800 119109300 0.0837 115 chr3 120373500 120377700 0 83 chr3 120414600 120414900 0.3571 28 chr3 120575100 120580500 0 91 chr3 120582900 120583200 0.5175 58 chr3 121032600 121033500 0.0589 118 chr3 121088100 121089000 0.0712 87 chr3 121314000 121314600 0.4535 78 chr3 121401300 121401900 0.355 49 chr3 121455000 121455600 0.2073 88 chr3 121522200 121522500 0.359 41 chr3 121689300 121689600 0.3781 75 chr3 121932900 121934100 0.3336 72 chr3 121936500 121937700 0.0666 79 chr3 122042100 122047200 0.0079 103 chr3 122072100 122072400 0.2744 74 chr3 122134500 122134800 0.2949 66 chr3 122163900 122165700 0.2129 61 chr3 122419500 122419800 0.5913 50 chr3 122670300 122670600 0.1885 65 chr3 122780100 122780400 0.349 54 chr3 123478800 123479100 0.2542 34 chr3 123517800 123518100 0.5432 36 chr3 123966900 123967200 0.5064 59 chr3 123975300 123975600 0.3509 66 chr3 123991200 123992400 0.1243 66 chr3 124109700 124110300 0.2977 34 chr3 124153200 124153500 0.4717 89 chr3 124366200 124368300 0.0226 69 chr3 124628100 124628400 0.6889 19 chr3 124749300 124750500 0.4194 69 chr3 124789500 124790400 0 55 chr3 125007000 125007300 0.5098 68 chr3 125100600 125100900 0.5411 36 chr3 125171100 125172000 0.0808 47 chr3 125891400 125891700 0.3334 59 chr3 125938800 125939700 0.0197 114 chr3 125941500 125942400 0.0197 114 chr3 125968500 125970300 0.0304 78 chr3 125976900 125977200 0.2409 71 chr3 125985000 125985300 0.3591 55 chr3 125986500 125986800 0.4936 37 chr3 126221700 126222300 0.3513 80 chr3 126324000 126326400 0.0034 76 chr3 126332400 126337500 0.0103 124 chr3 127433700 127435200 0.0205 102 chr3 127592400 127592700 0.4328 55 chr3 127611600 127611900 0.5021 36 chr3 128953800 128956200 0.0065 70 chr3 129087600 129090900 0 80 chr3 129361800 129363300 0.3987 71 chr3 130160400 130160700 0.6164 31 chr3 130238700 130239000 0.4675 63 chr3 130254600 130254900 0.4517 71 chr3 130499400 130499700 0.2365 17 chr3 130628700 130634100 0 95 chr3 130868400 130869300 0.3492 59 chr3 130910400 130912800 0.0661 61 chr3 131097600 131097900 0.3786 66 chr3 131274000 131274300 0.1955 55 chr3 131334300 131334600 0.2766 77 chr3 131408100 131410800 0 97 chr3 131814600 131814900 0.3566 43 chr3 131958900 131959200 0.4749 35 chr3 132100500 132101100 0.4531 52 chr3 132127800 132128100 0.2333 101 chr3 132138000 132139500 0.3424 72 chr3 132277200 132277500 0.5281 62 chr3 132374100 132375900 0.1201 85 chr3 132470100 132472200 0.0191 107 chr3 132601200 132601800 0.4537 71 chr3 132633900 132634200 0.4253 80 chr3 132762000 132762300 0.4063 83 chr3 132763500 132763800 0.3745 63 chr3 132765000 132765900 0.3564 84 chr3 132799200 132799500 0.5704 79 chr3 132807000 132810000 0 79 chr3 132882000 132882300 0.6783 67 chr3 132946200 132951900 0 83 chr3 133001400 133001700 0.3968 77 chr3 133473600 133473900 0.489 59 chr3 133555800 133556400 0.3162 72 chr3 133727400 133727700 0.1296 37 chr3 133785000 133786200 0.0023 53 chr3 134554200 134554500 0.6204 49 chr3 134555700 134556300 0.159 77 chr3 134701200 134701500 0.5449 27 chr3 134955000 134955600 0 36 chr3 135025200 135030000 0.154 80 chr3 135195600 135196200 0.2333 76 chr3 135252600 135254400 0.0387 90 chr3 135255600 135257100 0.2834 69 chr3 135282000 135282600 0.3194 65 chr3 135284100 135284400 0.3194 65 chr3 135400200 135401400 0.3683 73 chr3 135586800 135587100 0.026 102 chr3 135588300 135590400 0.026 102 chr3 135659700 135664500 0.0002 84 chr3 135677400 135678000 0.3076 83 chr3 135824100 135824400 0.2485 63 chr3 135933000 135933600 0.284 80 chr3 136063500 136064100 0.5184 67 chr3 136227000 136227600 0.2087 82 chr3 136479600 136485000 0 82 chr3 136531200 136531500 0.549 71 chr3 136875600 136875900 0.3474 89 chr3 136963500 136969500 0 97 chr3 137043300 137043900 0.2604 66 chr3 137094000 137095800 0 84 chr3 137152500 137152800 0.1806 69 chr3 137191800 137192100 0.6368 84 chr3 137310300 137310600 0.5235 69 chr3 137353500 137354700 0.0016 83 chr3 137455200 137460600 0.007 84 chr3 137633700 137638800 0 83 chr3 137759100 137759400 0.5163 57 chr3 138050700 138051000 0.4981 109 chr3 138662400 138662700 0.3175 75 chr3 139067100 139068300 0.3536 57 chr3 139143600 139144200 0.0368 98 chr3 139145700 139146000 0.3107 71 chr3 139191300 139191600 0.2989 68 chr3 139334400 139334700 0.2195 71 chr3 139335900 139336500 0.0362 61 chr3 139593600 139593900 0.1429 97 chr3 139800600 139800900 0.4274 87 chr3 140171400 140172000 0.5445 41 chr3 140490000 140490300 0.4378 114 chr3 140548800 140549100 0.4856 75 chr3 140550300 140550600 0.4856 75 chr3 140783700 140784000 0.1555 31 chr3 140786400 140786700 0.5093 52 chr3 141112500 141112800 0.5752 34 chr3 141665700 141666000 0.4752 15 chr3 141757200 141762000 0 97 chr3 142010700 142011600 0.0596 105 chr3 142291500 142291800 0.2905 94 chr3 142295700 142296000 0.2905 94 chr3 142393200 142393500 0.2477 64 chr3 142554900 142555500 0.5342 369 chr3 143046600 143047500 0.236 56 chr3 143085900 143086200 0.2698 55 chr3 144739500 144739800 0.2884 78 chr3 145253100 145253400 0.2421 62 chr3 145460100 145461600 0.2211 83 chr3 145494600 145494900 0.4577 62 chr3 145576200 145576800 0.369 75 chr3 145821600 145823100 0.2276 73 chr3 145921800 145922400 0.2651 79 chr3 145928700 145929600 0.0174 71 chr3 145930800 145932900 0.0859 128 chr3 146096100 146097900 0.2049 62 chr3 146732700 146735100 0.0033 214 chr3 147096300 147096900 0.3376 64 chr3 147108600 147109200 0.3218 85 chr3 147726900 147727500 0.1788 44 chr3 148303800 148304400 0.2675 72 chr3 148430100 148431300 0.1373 80 chr3 148451700 148452000 0.6033 21 chr3 148563600 148567500 0.0246 84 chr3 149380800 149381100 0.4826 66 chr3 149804700 149805000 0.3369 72 chr3 149829900 149830800 0.0023 61 chr3 149838900 149839500 0.0336 73 chr3 149982000 149982300 0.3908 58 chr3 150160200 150160500 0.6023 35 chr3 150493200 150493500 0.2986 36 chr3 150615900 150616500 0.0796 92 chr3 150819300 150822000 0.0012 94 chr3 151244400 151245900 0.3025 80 chr3 151353900 151354200 0.6005 54 chr3 151613700 151614000 0.5192 82 chr3 151887600 151888200 0.3013 60 chr3 151898400 151898700 0.1282 68 chr3 152249100 152249400 0.23 86 chr3 152250600 152250900 0.23 86 chr3 152594100 152595300 0.0473 74 chr3 153114000 153114300 0.256 86 chr3 153237300 153238200 0.2879 75 chr3 153240300 153240600 0.1275 68 chr3 153510600 153511200 0.3162 98 chr3 153549300 153549900 0.4461 66 chr3 153801600 153801900 0.302 75 chr3 153999000 153999600 0.0924 97 chr3 154216800 154217100 0.3575 74 chr3 154290900 154291200 0.482 50 chr3 154418100 154418400 0.3147 81 chr3 154911000 154914600 0 91 chr3 155119500 155123700 0.0161 91 chr3 155210100 155210400 0.1638 80 chr3 155439000 155439600 0.3305 79 chr3 155471400 155471700 0.1555 81 chr3 155472900 155475000 0.1555 81 chr3 155506500 155511300 0 78 chr3 155543700 155545200 0.2676 80 chr3 155546700 155547300 0.2894 54 chr3 155693100 155693400 0.5046 50 chr3 155928600 155930700 0.241 72 chr3 156279900 156282900 0.2806 81 chr3 156395400 156395700 0.415 68 chr3 156881400 156882300 0.2435 82 chr3 157727700 157729500 0.1335 85 chr3 157883400 157883700 0.3656 59 chr3 157901400 157902300 0.1973 88 chr3 158020500 158025600 0 112 chr3 158228700 158229000 0.5695 72 chr3 158399100 158399400 0.3695 29 chr3 158424900 158425200 0.4201 81 chr3 158512200 158513100 0.2617 102 chr3 158635200 158640600 0.0073 82 chr3 158957400 158957700 0.3109 39 chr3 159056400 159056700 0.3599 56 chr3 159085500 159085800 0.5001 72 chr3 159095400 159101100 0 110 chr3 159383100 159384300 0.3672 73 chr3 159396300 159397200 0.2829 74 chr3 159427200 159427500 0.3518 80 chr3 160323000 160323300 0.2884 65 chr3 160324800 160325100 0.1685 76 chr3 160974600 160976700 0.2271 58 chr3 161002500 161004900 0.1135 70 chr3 161529000 161529300 0.4377 49 chr3 161907600 161907900 0.0401 62 chr3 162307800 162308100 0.5058 51 chr3 162318900 162319200 0.1153 31 chr3 162379500 162381000 0.2181 103 chr3 162382200 162383700 0.2181 103 chr3 162407100 162411000 0.0007 68 chr3 163005000 163005600 0.1719 50 chr3 163146600 163147800 0.4306 51 chr3 163191900 163192200 0.4458 64 chr3 163236900 163242900 0 80 chr3 163634400 163636500 0.0391 83 chr3 163761600 163761900 0.4763 62 chr3 164293500 164296500 0.0207 108 chr3 164633100 164633400 0.3184 101 chr3 164703600 164706300 0.0145 119 chr3 165110100 165110700 0.4466 65 chr3 165316200 165317700 0.2046 88 chr3 165573300 165573900 0.0905 69 chr3 165576300 165576600 0.3287 88 chr3 165585900 165587400 0.1512 121 chr3 165589200 165590400 0.1512 121 chr3 165962400 165962700 0.2793 50 chr3 166021200 166023600 0.3317 57 chr3 166228500 166232400 0.0494 79 chr3 166537800 166538100 0.4252 51 chr3 167017500 167018100 0.2109 25 chr3 167204400 167204700 0.2956 61 chr3 167277900 167278800 0.3255 74 chr3 167280300 167280600 0.3255 74 chr3 167594700 167596800 0.2228 84 chr3 167802600 167802900 0.1959 72 chr3 168016800 168017100 0.6404 81 chr3 168351600 168355200 0 86 chr3 168766200 168766500 0.2068 62 chr3 168768300 168768600 0.2518 67 chr3 168770400 168772200 0.1535 72 chr3 169417200 169417500 0.5016 80 chr3 169483500 169483800 0.2448 56 chr3 169680000 169685400 0.0176 78 chr3 170401800 170402100 0.082 26 chr3 170805900 170806500 0.0894 546 chr3 170878800 170882100 0.0537 99 chr3 170925900 170927700 0.202 86 chr3 171449700 171450000 0.5226 47 chr3 171503100 171503400 0.3044 25 chr3 171628800 171629100 0.3597 75 chr3 171630300 171630900 0.3597 75 chr3 172094100 172094400 0.6461 65 chr3 173852100 173852400 0.4478 45 chr3 174260100 174264600 0.0559 88 chr3 174484200 174484800 0.3384 70 chr3 174829200 174830400 0.137 78 chr3 174897900 174898200 0.4137 27 chr3 175320900 175323300 0.222 80 chr3 175436700 175437600 0.0397 89 chr3 175697700 175698000 0.6574 14 chr3 175782000 175783200 0.2136 73 chr3 175784400 175785900 0.2136 73 chr3 175905900 175906200 0.3332 72 chr3 176020200 176021100 0.5274 75 chr3 176419500 176419800 0.3695 44 chr3 176824200 176824500 0.3328 48 chr3 176827800 176829600 0.2027 99 chr3 176831100 176831700 0.1108 98 chr3 176924700 176925600 0.2587 86 chr3 177389100 177394200 0 96 chr3 177413400 177413700 0.5792 103 chr3 177645300 177645600 0.5075 27 chr3 177660000 177660600 0.3122 92 chr3 178014600 178014900 0.5033 85 chr3 178720200 178720800 0.2911 67 chr3 178782000 178782900 0.064 73 chr3 178862400 178865700 0.1265 90 chr3 178938000 178938300 0.2562 59 chr3 178940400 178940700 0.3587 68 chr3 179119500 179121900 0.2563 91 chr3 179130000 179130900 0.3429 82 chr3 179243100 179243400 0.3352 51 chr3 179727900 179728200 0.6842 63 chr3 180375000 180375300 0.255 77 chr3 180427200 180427500 0.3699 66 chr3 180452100 180452400 0.5395 73 chr3 180485400 180485700 0.4992 67 chr3 181134300 181134900 0.2216 53 chr3 181150500 181152000 0.3509 91 chr3 181772700 181773000 0.5848 47 chr3 182427000 182430900 0.086 98 chr3 182589900 182590200 0.4169 65 chr3 183018300 183018600 0.6826 69 chr3 183174300 183174900 0.1633 83 chr3 183234900 183238200 0 89 chr3 183607500 183609600 0.0879 73 chr3 183738600 183740100 0 82 chr3 184502700 184503300 0.5387 108 chr3 184753500 184755000 0.1754 184 chr3 185003100 185003700 0.2002 74 chr3 185184300 185184600 0.6558 52 chr3 185230500 185231700 0 52 chr3 185299500 185299800 0.4242 43 chr3 185382900 185383200 0.6451 60 chr3 185562600 185571600 0.0152 169 chr3 185689800 185690100 0.6261 59 chr3 186312000 186312300 0.5725 36 chr3 186379800 186380100 0.3169 70 chr3 186702000 186702300 0.6659 44 chr3 186864000 186867300 0 41 chr3 187108800 187109100 0.1874 47 chr3 187224300 187224600 0.5067 39 chr3 187413300 187418100 0 111 chr3 187424700 187428600 0 64 chr3 187863600 187864200 0.2476 46 chr3 187866000 187868400 0.0104 106 chr3 187892700 187895700 0.0159 117 chr3 188544600 188545200 0.0565 30 chr3 188587200 188587500 0.5875 36 chr3 188638200 188639700 0.448 82 chr3 188755800 188756100 0.4878 87 chr3 189007500 189007800 0.4351 65 chr3 189018300 189018600 0.1641 71 chr3 189020700 189022500 0.1641 71 chr3 189445500 189445800 0.4206 48 chr3 189519900 189520200 0.4787 72 chr3 190200600 190200900 0.6725 20 chr3 190287300 190287600 0.2128 84 chr3 190572900 190573200 0.4056 51 chr3 191042400 191044500 0.0141 103 chr3 191465700 191466000 0.2646 54 chr3 191467200 191467500 0.2646 54 chr3 191550600 191551800 0.2473 97 chr3 191863200 191863500 0.2387 53 chr3 192138300 192138600 0.043 27 chr3 192149400 192155100 0.0016 76 chr3 192739200 192744900 0.031 77 chr3 192960600 192963600 0.0112 103 chr3 193888800 193889400 0.1459 86 chr3 194400600 194401200 0.0394 65 chr3 194629800 194630700 0.6371 59 chr3 194663400 194663700 0.2229 34 chr3 194991000 194991300 0.6195 56 chr3 195088500 195088800 0.0518 84 chr3 195091200 195093300 0.0518 84 chr3 195215100 195218400 0.0515 108 chr3 195478500 195505200 0.0202 356 chr3 195615300 195619500 0.109 155 chr3 195624000 195627000 0 153 chr3 195629100 195629400 0.0409 109 chr3 195630600 195632100 0.0409 109 chr3 195634200 195636900 0.0276 151 chr3 195638100 195640800 0.0507 127 chr3 195644400 195644700 0.0046 243 chr3 195650100 195653100 0.1548 144 chr3 195658200 195665100 0.1629 123 chr3 195666600 195668100 0.2635 104 chr3 195670200 195670500 0.3124 51 chr3 195679200 195679500 0.3445 89 chr3 195681000 195681900 0 139 chr3 195688500 195688800 0.3216 81 chr3 195710700 195711300 0.5225 453 chr3 195712800 195714300 0.3956 370 chr3 195723300 195726000 0.0018 124 chr3 195750600 195750900 0.2404 89 chr3 195771000 195771300 0.683 71 chr3 195775500 195777900 0.1591 109 chr3 195780600 195782100 0.5404 90 chr3 195783300 195783600 0.5442 34 chr3 195786900 195788100 0.148 60 chr3 195815700 195816300 0.1495 46 chr3 195824400 195825000 0.0633 77 chr3 195874800 195875400 0.6047 35 chr3 195880800 195881400 0.4823 34 chr3 195927600 195928500 0.003 78 chr3 195936900 195937500 0.041 96 chr3 195952200 195955200 0.0002 141 chr3 195959700 195960000 0.3575 122 chr3 195967200 195968100 0 125 chr3 195972900 195973500 0.3057 70 chr3 195981000 195981300 0.3603 120 chr3 195983400 195983700 0.5094 67 chr3 195985800 195987600 0.0411 144 chr3 195989100 195989700 0.0411 144 chr3 195993900 195994200 0.5562 108 chr3 195996300 195996600 0.6093 140 chr3 196271700 196272300 0.2113 44 chr3 196378800 196379100 0.6783 52 chr3 196511400 196511700 0.4977 53 chr3 196542300 196542600 0.5271 82 chr3 196761000 196761900 0.0092 67 chr3 196784400 196784700 0.1014 62 chr3 196811100 196811400 0.6267 54 chr3 196898700 196899000 0.5931 112 chr3 196973700 196974000 0.342 42 chr3 197030100 197030400 0.3693 65 chr3 197132700 197133000 0.2253 56 chr3 197391300 197391600 0.6399 104 chr3 197436300 197438400 0.0399 81 chr3 197454900 197455200 0.5288 172 chr3 197459400 197460000 0.3224 367 chr3 197620800 197621100 0.342 81 chr3 197622300 197625300 0.0517 189 chr3 197626500 197627700 0.0517 189 chr3 197630100 197630400 0.4958 71 chr3 197631600 197635800 0.081 95 chr3 197638200 197639400 0.3543 74 chr3 197641800 197645400 0.1457 81 chr3 197647800 197650800 0 153 chr3 197652600 197656800 0 153 chr3 197658300 197658600 0 153 chr3 197660400 197661300 0.505 153 chr3 197662800 197667300 0 180 chr3 197876700 197877600 0.0438 61 chr3 197921400 197921700 0.6691 58 chr3 198003600 198005400 0 69 chr3 198011400 198011700 0.305 67 chr3 198015300 198015600 0.6202 60 chr3 198099000 198104100 0.0506 101 chr3 198141300 198141900 0.0632 98 chr3 198143100 198143700 0.0632 98 chr3 198145500 198147000 0.2599 72 chr3 198149400 198149700 0.2599 72 chr3 198152100 198154800 0 84 chr3 198156000 198161700 0 84 chr3 198162900 198163200 0 84 chr3 198164400 198166500 0 84 chr3 198168600 198169200 0.5476 197 chr3 198171300 198172500 0.0788 57 chr3 198175200 198235500 0 99 chr4 9900 10200 0.2781 50 chr4 11400 15300 0 222 chr4 16800 37200 0 222 chr4 38700 41100 0.0266 204 chr4 42300 45300 0.0207 187 chr4 46500 50700 0.0207 187 chr4 51900 68700 0 218 chr4 151800 152700 0.4507 74 chr4 519600 519900 0.6895 40 chr4 555000 555600 0.5863 270 chr4 668700 669300 0.6268 34 chr4 707700 708000 0.6043 44 chr4 717000 717300 0.5489 70 chr4 731700 732000 0.2435 25 chr4 736800 737100 0.4942 39 chr4 744900 747600 0 17 chr4 758700 759900 0 45 chr4 927000 927600 0.4274 44 chr4 1046400 1046700 0.6635 130 chr4 1054200 1054800 0.6566 42 chr4 1095900 1096500 0.4014 53 chr4 1145400 1146000 0.4971 55 chr4 1240200 1240500 0.5042 33 chr4 1278900 1279200 0.1125 34 chr4 1333800 1334100 0.5044 41 chr4 1335600 1336200 0.5617 57 chr4 1356900 1357200 0.5537 88 chr4 1364100 1364400 0.5897 52 chr4 1397400 1398600 0.0603 231 chr4 1429200 1429500 0.595 46 chr4 1434300 1435800 0.006 1045 chr4 1441500 1442100 0 134 chr4 1520700 1521000 0.2427 36 chr4 1545300 1547100 0 47 chr4 1581000 1581300 0.6513 41 chr4 1625100 1625400 0.3357 27 chr4 1707000 1707300 0.2036 89 chr4 1827300 1829400 0.1111 62 chr4 2430000 2430600 0.4865 56 chr4 2440200 2440500 0.4715 32 chr4 2511300 2511600 0.0818 48 chr4 2522100 2522400 0.558 52 chr4 2808900 2809200 0.121 20 chr4 3227400 3227700 0.0368 55 chr4 3309000 3309300 0.6946 40 chr4 3509400 3510000 0.0035 85 chr4 3511800 3512100 0.5968 28 chr4 3537000 3538200 0.0804 50 chr4 3540600 3540900 0.6031 78 chr4 3542100 3543000 0.0374 46 chr4 3610500 3610800 0.1545 34 chr4 3613500 3613800 0.1628 33 chr4 3876300 3876600 0.6393 60 chr4 4020000 4020900 0.0537 64 chr4 4023000 4023600 0.5823 39 chr4 4068600 4069200 0.0963 67 chr4 4414200 4414500 0.447 67 chr4 4954800 4959600 0.1563 79 chr4 5271900 5273700 0.051 70 chr4 5316300 5317500 0.0001 1156 chr4 5439000 5439300 0.1996 73 chr4 5440800 5442300 0.0913 129 chr4 5492400 5492700 0.4262 79 chr4 5597700 5598000 0.3059 89 chr4 5728200 5728500 0.4322 72 chr4 5762400 5764800 0.2216 66 chr4 5766300 5766900 0.2216 66 chr4 5779500 5780100 0.102 68 chr4 6003600 6004800 0.6105 204 chr4 6336600 6336900 0.6561 37 chr4 6511500 6512700 0.4289 145 chr4 6579000 6579600 0.3907 132 chr4 6756000 6756300 0.473 69 chr4 6879900 6880200 0.2808 98 chr4 6977100 6977400 0.4885 49 chr4 7090500 7090800 0.1894 50 chr4 7363500 7364100 0.0795 38 chr4 7386600 7387500 0.0186 62 chr4 7449000 7449300 0.2517 35 chr4 7482000 7482300 0.5922 21 chr4 7543800 7544100 0.6565 85 chr4 7695600 7695900 0.5761 80 chr4 7835100 7835700 0.2975 57 chr4 7863900 7864200 0.5451 521 chr4 7994100 7995000 0.0634 73 chr4 8620200 8637000 0 370 chr4 8687100 8687400 0.675 41 chr4 8842200 8842500 0.5857 71 chr4 9033300 9033600 0.5704 79 chr4 9084900 9085200 0.1985 60 chr4 9156300 9156600 0.6192 27 chr4 9203700 9204000 0.0566 17 chr4 9211200 9211500 0 30 chr4 9213000 9273000 0 799 chr4 9322800 9369000 0 1454 chr4 9566100 9566400 0.3264 49 chr4 9613800 9617700 0 36 chr4 9852300 9852600 0.5615 59 chr4 9874800 9875100 0.6515 72 chr4 10145400 10145700 0.6668 56 chr4 10514400 10514700 0.4003 57 chr4 10610100 10610400 0.404 34 chr4 10776900 10778700 0.2195 69 chr4 10824900 10825200 0.2107 77 chr4 10826700 10828500 0.2107 77 chr4 11015400 11017200 0.2593 54 chr4 11061000 11061600 0.3392 69 chr4 11063100 11065500 0.1987 105 chr4 11077500 11078400 0.4357 77 chr4 11144100 11145600 0.0246 81 chr4 11146800 11148600 0.0246 81 chr4 11169600 11170200 0.0876 54 chr4 11236500 11239800 0.1526 86 chr4 11379600 11379900 0.1576 73 chr4 11381400 11383800 0.1576 73 chr4 11388000 11388300 0.4709 46 chr4 11560500 11560800 0.3806 99 chr4 11793600 11793900 0.1851 91 chr4 11796300 11798400 0.1851 91 chr4 12093300 12093600 0.2549 84 chr4 12108000 12108300 0.5914 19 chr4 12339300 12339600 0.4204 48 chr4 12345300 12346800 0.1573 83 chr4 12509400 12510300 0.0685 68 chr4 12750000 12750300 0.236 86 chr4 12752700 12753600 0.1248 81 chr4 12904200 12904500 0.5524 87 chr4 12906000 12909300 0 61 chr4 13062000 13062300 0.6614 27 chr4 13131600 13132800 0.0683 63 chr4 13662900 13663500 0.2074 100 chr4 14010000 14014200 0.08 76 chr4 14481300 14481600 0.4147 65 chr4 14484000 14484300 0.4147 65 chr4 14486100 14486400 0.3465 75 chr4 14660700 14665800 0.255 63 chr4 14755200 14761200 0 98 chr4 14840400 14840700 0.533 54 chr4 15174900 15175200 0.2865 82 chr4 15176700 15179400 0.2865 82 chr4 15204000 15204300 0.3221 63 chr4 15280200 15281700 0.0631 85 chr4 15282900 15284400 0.0631 85 chr4 15791400 15792300 0.0105 85 chr4 15841800 15847500 0 97 chr4 15867600 15867900 0.073 73 chr4 16392600 16392900 0.3021 79 chr4 16406100 16406400 0.4649 104 chr4 16422300 16422600 0.2703 67 chr4 16942800 16949100 0 85 chr4 17459100 17459700 0.3945 60 chr4 17734500 17734800 0.5672 42 chr4 17850000 17851200 0.2317 76 chr4 17940300 17940600 0.1593 148 chr4 18175500 18177600 0.0996 76 chr4 18966000 18966300 0.2257 68 chr4 19008000 19008600 0.098 86 chr4 19077900 19083900 0 94 chr4 19168500 19169400 0.1763 75 chr4 19226100 19226400 0.332 10 chr4 19334700 19337400 0.0499 76 chr4 19519800 19520400 0.2492 27 chr4 19638300 19640100 0.0648 81 chr4 19641600 19641900 0.4227 41 chr4 19949100 19951800 0.0251 81 chr4 20518500 20518800 0.2677 24 chr4 20661000 20661600 0.1187 125 chr4 20669400 20670900 0.2886 91 chr4 20932200 20932500 0.4659 28 chr4 21159300 21165600 0 122 chr4 21582000 21582300 0.3195 190 chr4 21687000 21687300 0.4224 72 chr4 22048800 22049100 0.5261 55 chr4 22107000 22107600 0.0922 80 chr4 22148700 22149900 0.2227 89 chr4 22151700 22152000 0.2227 89 chr4 22307400 22307700 0.2313 45 chr4 22718700 22719000 0.4706 56 chr4 23099100 23099700 0.0688 57 chr4 23372100 23372400 0.4742 59 chr4 23615100 23620800 0 104 chr4 23642400 23643000 0.2718 50 chr4 23644800 23645400 0.1956 59 chr4 23724300 23724600 0.3996 75 chr4 23784000 23785200 0.3857 53 chr4 24504000 24504300 0.5079 98 chr4 26166000 26167800 0.1502 91 chr4 26209500 26209800 0.424 89 chr4 26592600 26592900 0.4317 97 chr4 26736000 26736300 0.1996 73 chr4 26923200 26927700 0 116 chr4 27070500 27072300 0.1606 78 chr4 27073800 27075300 0.1606 78 chr4 27376200 27381600 0.0002 88 chr4 28020900 28021200 0.4783 58 chr4 28256400 28256700 0.6021 58 chr4 28525500 28525800 0.3065 73 chr4 29440200 29440500 0.4316 72 chr4 29531700 29532300 0.2088 46 chr4 29659500 29659800 0.3022 29 chr4 30278100 30278700 0.3794 61 chr4 30886200 30886500 0.2307 91 chr4 31405200 31405500 0.5684 21 chr4 31491300 31491600 0.2074 51 chr4 31816500 31816800 0.5869 19 chr4 31818600 31818900 0.4431 27 chr4 31966800 31967700 0.1382 53 chr4 32126700 32127300 0.2877 53 chr4 32360700 32364600 0.0387 95 chr4 32517000 32518200 0.1578 78 chr4 32936700 32937000 0.4011 62 chr4 34200900 34201200 0.3703 56 chr4 34511400 34511700 0.5349 36 chr4 34654800 34655100 0.1774 105 chr4 35322900 35323800 0.3191 69 chr4 35606100 35606700 0.2681 52 chr4 35634600 35634900 0.6371 115 chr4 36468300 36468600 0.0354 19 chr4 36841200 36841500 0.245 22 chr4 36906600 36906900 0.3776 63 chr4 37054200 37054500 0.5094 47 chr4 37103400 37105200 0.0197 94 chr4 37330800 37331400 0.3312 59 chr4 37558800 37559400 0.1653 47 chr4 37585200 37585500 0.4557 43 chr4 37604700 37605000 0.6896 102 chr4 37884000 37884300 0.37 20 chr4 39001800 39002700 0.233 63 chr4 39029400 39029700 0.3383 21 chr4 39297000 39297600 0.2686 70 chr4 39594300 39595500 0.3241 83 chr4 39813300 39813600 0.5499 21 chr4 40140600 40140900 0.6572 75 chr4 40146900 40147200 0.2099 54 chr4 40294500 40295100 0.5372 205 chr4 40764900 40765500 0.1398 71 chr4 40766700 40767000 0.3363 72 chr4 41237100 41237400 0.314 57 chr4 41402400 41402700 0.4493 89 chr4 41907000 41907300 0.5884 57 chr4 42275100 42275400 0.3709 60 chr4 42982200 42983400 0.1021 69 chr4 43096500 43096800 0.3625 84 chr4 43185300 43186200 0.2291 49 chr4 43213500 43214100 0.1119 65 chr4 43287000 43289700 0 116 chr4 43415100 43415700 0.2555 92 chr4 43691700 43692000 0.5684 73 chr4 43817700 43818900 0.0464 61 chr4 44076300 44076900 0.3027 52 chr4 44079300 44079900 0.2373 47 chr4 44317200 44317500 0.3436 41 chr4 44505300 44505600 0.0021 24 chr4 44507400 44507700 0.3305 13 chr4 44975100 44976900 0.0255 73 chr4 45023400 45024900 0 17 chr4 45511500 45512100 0.2171 77 chr4 45699600 45699900 0.5092 55 chr4 45722700 45723000 0.5783 40 chr4 45824400 45825000 0.2008 71 chr4 46053900 46056300 0 87 chr4 46117800 46118100 0.6696 15 chr4 46569300 46569600 0.2671 85 chr4 46795200 46797000 0.0185 70 chr4 47262000 47262300 0.6276 44 chr4 47297100 47297400 0.566 51 chr4 47613600 47613900 0.4501 53 chr4 47622300 47622600 0.2921 62 chr4 48052200 48057600 0 95 chr4 48362700 48364800 0.03 55 chr4 48414600 48417900 0 74 chr4 48714300 48714900 0.2692 67 chr4 48735000 48735900 0.1055 88 chr4 48918900 48919200 0.2376 79 chr4 48920700 48921000 0.6692 32 chr4 49091100 49156800 0.001 43802 chr4 49158900 49162800 0.1845 164 chr4 49164300 49164900 0.1845 164 chr4 49166400 49169100 0.3394 150 chr4 49172100 49173000 0.4614 105 chr4 49174500 49174800 0.1185 247 chr4 49176600 49176900 0.1185 247 chr4 49179300 49187700 0.1185 247 chr4 49189200 49189800 0.2207 118 chr4 49191900 49192500 0.4868 89 chr4 49193700 49194300 0.4469 202 chr4 49196100 49198500 0.4469 202 chr4 49200300 49203300 0.1695 190 chr4 49206900 49207200 0.3323 88 chr4 49210800 49211100 0.5227 116 chr4 49223400 49224900 0.4468 158 chr4 49227300 49227600 0.5649 79 chr4 49228800 49229100 0.3408 185 chr4 49230600 49232700 0.3408 185 chr4 49237800 49239000 0.4832 176 chr4 49243800 49244400 0.1178 194 chr4 49246500 49255800 0.0829 302 chr4 49257000 49262100 0.0829 302 chr4 49263300 49270200 0.001 262 chr4 49272000 49286700 0 315 chr4 49290000 49293000 0.0474 222 chr4 49295100 49299000 0 304 chr4 49300500 49307100 0 304 chr4 49309200 49312500 0 178 chr4 49316700 49320600 0.0056 306 chr4 49323600 49337100 0 230 chr4 49487400 49488300 0.2707 67 chr4 49489500 49490100 0.5346 64 chr4 49492800 49493400 0.1612 99 chr4 49496700 49497000 0.593 72 chr4 49500000 49500300 0.2351 77 chr4 49502100 49502400 0.4673 65 chr4 49509300 49509900 0.1738 96 chr4 49514700 49515000 0.5953 447 chr4 49519500 49524000 0.0637 144 chr4 49525500 49549200 0.0268 195 chr4 49551000 49553400 0.3241 161 chr4 49556400 49556700 0.4049 228 chr4 49562700 49565100 0.2924 108 chr4 49566300 49566600 0.2924 108 chr4 49567800 49568100 0.6395 65 chr4 49570500 49572000 0.1389 249 chr4 49577100 49577400 0.4794 150 chr4 49581300 49583100 0.0197 138 chr4 49584900 49586700 0.3624 123 chr4 49589100 49589400 0.2993 112 chr4 49591800 49599000 0 201 chr4 49601400 49602000 0 201 chr4 49604400 49608000 0.2034 87 chr4 49609200 49615500 0.2757 123 chr4 49617300 49618500 0.3097 128 chr4 49620000 49620600 0.3591 73 chr4 49625700 49629000 0.0631 21391 chr4 49631100 49658100 0.0631 21391 chr4 49708200 49718700 0 25282 chr4 49719900 49730700 0 889 chr4 49732200 49732500 0.0265 285 chr4 49733700 50156100 0 2664 chr4 50157600 50196900 0 252 chr4 50200800 50670300 0 3717 chr4 50671500 50829000 0 9189 chr4 50830200 51028500 0 9189 chr4 51029700 51047400 0 950 chr4 51048600 51123600 0 2549 chr4 51124800 51141600 0 916 chr4 51143400 51396900 0 872 chr4 51398400 51405300 0 3549 chr4 51406500 51520500 0 3549 chr4 51521700 51627900 0 3549 chr4 51629100 51743400 0 928 chr4 51793800 51814800 0 522 chr4 51936000 51936300 0.4366 53 chr4 52219800 52220400 0.1692 75 chr4 52275900 52276200 0.3634 76 chr4 52464300 52465800 0.4333 67 chr4 52538700 52544100 0.01 108 chr4 52609800 52610100 0.438 34 chr4 52816500 52822500 0.0025 115 chr4 53237100 53238000 0.461 78 chr4 53247600 53247900 0.5623 47 chr4 53252100 53252400 0.5382 62 chr4 53329200 53329500 0.6262 88 chr4 53333100 53333400 0.5075 79 chr4 53565300 53565600 0.1056 100 chr4 53567100 53567400 0.1056 100 chr4 53569200 53570400 0.1056 100 chr4 53726400 53727900 0.0328 57 chr4 53737500 53739000 0.0118 56 chr4 53877900 53878200 0.3721 109 chr4 53879400 53879700 0.3721 109 chr4 53882700 53883000 0.2611 95 chr4 54922200 54923100 0.1869 65 chr4 55058400 55061700 0.1252 83 chr4 55619400 55625100 0 89 chr4 55847100 55847700 0.1322 85 chr4 56216700 56217000 0.4232 59 chr4 56248800 56249400 0.2809 47 chr4 56366700 56367000 0.3454 79 chr4 57282000 57282300 0.5936 30 chr4 57562500 57568200 0.0306 103 chr4 57643800 57645900 0.1123 81 chr4 57790500 57790800 0.205 74 chr4 57856200 57856500 0.2319 65 chr4 57869100 57869400 0.347 14 chr4 58021200 58022100 0.1089 83 chr4 58024800 58025100 0.3473 89 chr4 58229400 58230900 0.1209 58 chr4 58328100 58328400 0.4321 46 chr4 58576500 58578000 0.0011 76 chr4 58778100 58779000 0.2305 72 chr4 58927500 58927800 0.4453 50 chr4 58930500 58930800 0.4849 69 chr4 59079000 59084700 0 87 chr4 59184300 59184600 0.1167 46 chr4 59301000 59301900 0.21 75 chr4 59303700 59304600 0.21 75 chr4 59519100 59519400 0.1063 35 chr4 59720400 59721300 0.1531 71 chr4 60104700 60106200 0 88 chr4 60122400 60122700 0.005 190 chr4 60281100 60281400 0.6033 29 chr4 60423600 60423900 0.252 96 chr4 60572400 60573000 0.4228 43 chr4 60591900 60592500 0.1801 64 chr4 60703500 60703800 0.1548 23 chr4 60833700 60835200 0.1987 123 chr4 61367400 61368000 0.186 77 chr4 61643400 61644300 0.4612 59 chr4 61747500 61749000 0.4319 64 chr4 61874700 61875000 0.5026 49 chr4 61939800 61945800 0 89 chr4 62427000 62427300 0.3259 81 chr4 62604600 62607900 0.2065 90 chr4 62727000 62733000 0.0073 96 chr4 63027900 63028500 0.4625 58 chr4 63246900 63247200 0.4861 54 chr4 63328800 63329100 0.093 44 chr4 63368700 63369000 0.4084 64 chr4 63534600 63537000 0.166 86 chr4 63576900 63577200 0.3515 30 chr4 63653700 63654600 0.1464 66 chr4 63918000 63918600 0.1746 40 chr4 64155300 64155600 0.6005 85 chr4 64237500 64237800 0.1534 70 chr4 64333800 64334100 0.447 40 chr4 64666500 64667100 0.1647 46 chr4 64838400 64839600 0 71 chr4 64841100 64842000 0 71 chr4 64860600 64863300 0 82 chr4 64900200 64900800 0.1098 92 chr4 64993800 64994100 0.1902 30 chr4 65053500 65054400 0.4081 70 chr4 65055600 65055900 0.5022 49 chr4 65180100 65180700 0.079 58 chr4 65182200 65182500 0.4543 82 chr4 65200500 65201100 0.3384 71 chr4 65289000 65293500 0.2466 64 chr4 65708400 65709000 0.3679 57 chr4 65994000 65995800 0.2327 59 chr4 66657000 66657300 0.4988 74 chr4 66672300 66672600 0.5794 46 chr4 66711900 66712200 0.4857 62 chr4 66783900 66784200 0.2919 27 chr4 66968400 66969000 0.5481 72 chr4 67096800 67097100 0.4066 67 chr4 67178400 67182900 0.0413 72 chr4 67398600 67400100 0.0077 57 chr4 67887900 67889400 0 77 chr4 67967700 67968900 0.1244 109 chr4 67970400 67973100 0.0245 88 chr4 68084700 68085300 0.2442 55 chr4 68088300 68088600 0.4277 64 chr4 68094000 68094300 0.1145 36 chr4 68120400 68120700 0.3559 46 chr4 68171100 68171400 0.4629 30 chr4 68198100 68205000 0 58 chr4 68511000 68515200 0 72 chr4 68560500 68560800 0.2225 26 chr4 68566500 68567100 0.2755 31 chr4 68595600 68596200 0.4079 39 chr4 68668500 68668800 0.6059 41 chr4 69232200 69234000 0.391 53 chr4 69259200 69259500 0.5178 44 chr4 69270000 69270900 0.0061 56 chr4 69368100 69368400 0.1465 47 chr4 69379200 69379800 0.0825 53 chr4 69406800 69407100 0.2857 53 chr4 69423000 69423300 0.4753 60 chr4 69666900 69667500 0.2255 87 chr4 70016700 70017000 0.5317 100 chr4 70329000 70334400 0 92 chr4 70839900 70840200 0.5609 56 chr4 70918200 70918500 0.6675 83 chr4 71021100 71021400 0.5165 66 chr4 71053800 71057700 0.1389 79 chr4 71102100 71102400 0.0188 90 chr4 71103900 71106900 0.0188 90 chr4 71114700 71115000 0.3155 64 chr4 71420700 71422500 0.2376 80 chr4 72051900 72052200 0.5319 27 chr4 72129300 72129900 0.0412 67 chr4 72399900 72400800 0.241 65 chr4 72478200 72478800 0.366 79 chr4 72515400 72515700 0.3783 67 chr4 72894000 72894300 0.3972 94 chr4 73554300 73554900 0.2823 104 chr4 73580700 73581000 0.3841 73 chr4 74248500 74248800 0.2057 69 chr4 74562900 74563200 0.4054 36 chr4 74717100 74723700 0 80 chr4 75128100 75129000 0.1795 78 chr4 75130500 75132600 0.179 98 chr4 75270600 75272700 0 39 chr4 75273900 75275400 0 39 chr4 75406200 75406500 0.2535 66 chr4 75443100 75446400 0.0304 92 chr4 75603000 75603300 0.534 53 chr4 76828200 76829700 0 66 chr4 76916100 76918800 0.0241 120 chr4 77514300 77514600 0.1331 88 chr4 77685600 77685900 0.2256 72 chr4 78106200 78111600 0 88 chr4 78259200 78259500 0.4754 57 chr4 78306300 78306900 0.1893 83 chr4 78348000 78354000 0 90 chr4 79221300 79223400 0.1587 89 chr4 79268700 79271400 0 90 chr4 79284600 79284900 0.2386 37 chr4 79432800 79433100 0.3987 35 chr4 79556400 79556700 0.1338 45 chr4 79704900 79710600 0 91 chr4 79937700 79944600 0 113 chr4 79967100 79973100 0 103 chr4 80381400 80381700 0 18 chr4 80691000 80691600 0.195 70 chr4 80890500 80892000 0.4367 115 chr4 81070500 81070800 0.5124 40 chr4 81188700 81189000 0.3271 35 chr4 81536700 81537300 0.2199 71 chr4 81594000 81594300 0.3575 116 chr4 81932100 81932400 0.5296 63 chr4 81933900 81934500 0.4449 66 chr4 82008300 82010100 0.0047 67 chr4 82023600 82023900 0.2213 67 chr4 82087800 82088100 0.5066 59 chr4 82112700 82114200 0.3472 87 chr4 82180800 82181100 0.6666 108 chr4 82258800 82259100 0.6263 49 chr4 83182200 83183100 0.4691 41 chr4 83184600 83186700 0.1103 82 chr4 83649600 83649900 0.1854 25 chr4 83953800 83955000 0.1521 83 chr4 84073800 84075300 0.0488 111 chr4 84076500 84078300 0.0488 111 chr4 84129300 84132000 0.0627 81 chr4 84299400 84299700 0.2986 91 chr4 84300900 84301200 0.2986 91 chr4 84303000 84304500 0.2986 91 chr4 84523800 84524100 0.5069 58 chr4 84759600 84761100 0.3105 109 chr4 85643100 85643400 0.4943 47 chr4 85891200 85893900 0 69 chr4 86071800 86074200 0.3082 69 chr4 86137500 86140200 0.0054 94 chr4 86251500 86254800 0.0085 92 chr4 86628600 86629500 0.3619 52 chr4 86637600 86637900 0.2425 76 chr4 86865300 86866200 0.2133 74 chr4 86868600 86868900 0.2133 74 chr4 86996400 86996700 0.2884 79 chr4 87347100 87353100 0 84 chr4 87562800 87565200 0 87 chr4 87711000 87711300 0.2268 52 chr4 87712800 87715800 0.0475 76 chr4 87796200 87797700 0.0861 80 chr4 87936300 87937500 0.5068 59 chr4 88116600 88116900 0.247 31 chr4 88161300 88161900 0.0066 97 chr4 88551300 88551600 0.1953 78 chr4 88698900 88699200 0.3872 30 chr4 88895400 88896000 0.2531 78 chr4 88924800 88925100 0.4563 73 chr4 89094300 89094600 0.3557 72 chr4 89199300 89199600 0.3065 58 chr4 90154500 90156000 0.1176 79 chr4 90230400 90231000 0.3549 75 chr4 90232500 90232800 0.3549 75 chr4 90324300 90324600 0.268 38 chr4 90675600 90681600 0 90 chr4 90748500 90748800 0.2545 66 chr4 91137000 91138800 0.0605 110 chr4 91239300 91241400 0 46 chr4 91424100 91424400 0.5647 61 chr4 91442400 91442700 0.4789 42 chr4 91479900 91480200 0.4281 58 chr4 91786500 91789200 0.149 94 chr4 91790400 91790700 0.2279 96 chr4 91978500 91984200 0 97 chr4 92107800 92108100 0.4087 48 chr4 92133000 92133300 0.4841 130 chr4 92199900 92200500 0.5311 65 chr4 92276400 92276700 0.5414 49 chr4 92954700 92955300 0.1761 98 chr4 93591000 93591300 0.4822 70 chr4 93593100 93593700 0.3237 57 chr4 93608700 93613800 0 100 chr4 93638400 93644400 0 72 chr4 93682200 93682500 0.2997 72 chr4 93884100 93884700 0.0713 84 chr4 94577700 94578300 0.6261 58 chr4 94793400 94795200 0.1894 98 chr4 94836900 94839900 0.1464 71 chr4 94949400 94949700 0.558 28 chr4 95172000 95173500 0.1798 81 chr4 95174700 95175000 0.1798 81 chr4 95258700 95259000 0.3979 42 chr4 95328000 95328600 0.346 54 chr4 95592300 95593200 0.568 70 chr4 95916000 95918700 0.1607 101 chr4 95920200 95920800 0.1607 101 chr4 96129300 96129600 0.6879 39 chr4 96402600 96402900 0.1237 75 chr4 96411000 96414000 0.4065 80 chr4 96796500 96797700 0.1224 77 chr4 96869100 96872100 0.1613 105 chr4 96975900 96976200 0.4754 56 chr4 97189500 97189800 0.4292 43 chr4 97635900 97636500 0.347 60 chr4 97638600 97638900 0.1789 56 chr4 97669500 97669800 0.0694 33 chr4 97780200 97780800 0.0035 59 chr4 97798500 97799100 0.0266 70 chr4 98320500 98325600 0.1043 83 chr4 98414100 98414400 0.3814 69 chr4 98591400 98598300 0.0008 126 chr4 98763000 98763600 0.4376 71 chr4 98880300 98880600 0.0172 48 chr4 98957700 98958000 0.4625 56 chr4 99102000 99102300 0.5036 32 chr4 99149100 99149400 0.383 24 chr4 99348900 99349200 0.332 80 chr4 99769200 99769500 0.3091 59 chr4 100000800 100005600 0 84 chr4 100044600 100044900 0.0947 88 chr4 100046400 100048200 0.0947 88 chr4 100178400 100178700 0.628 13 chr4 100381200 100381500 0.3037 80 chr4 100677300 100677600 0.1336 49 chr4 100718100 100719000 0.1168 76 chr4 101295000 101295300 0.574 49 chr4 101405700 101407200 0.0844 65 chr4 101508300 101508600 0.338 82 chr4 101749500 101750100 0.0212 25 chr4 101839800 101840100 0.5974 27 chr4 101866800 101867100 0.1737 65 chr4 102044400 102046200 0.0486 103 chr4 102204900 102210600 0.0078 88 chr4 102221100 102221700 0.0709 45 chr4 102409200 102409800 0.4324 46 chr4 102463800 102464400 0.1842 51 chr4 102617700 102618000 0.3643 83 chr4 102620100 102620400 0.6496 65 chr4 102697500 102698700 0.3525 88 chr4 102699900 102700200 0.3525 88 chr4 102951900 102954300 0 81 chr4 103251300 103251600 0.3407 103 chr4 103253100 103254000 0.3407 103 chr4 103688400 103688700 0.1973 85 chr4 103817100 103818300 0.2059 80 chr4 103834500 103834800 0.6158 28 chr4 104031000 104031300 0.5557 80 chr4 104041200 104041500 0.4442 53 chr4 104442300 104442600 0.202 106 chr4 104687100 104692200 0.0812 91 chr4 104787900 104788500 0.1034 72 chr4 104790000 104790300 0.1034 72 chr4 104791800 104793000 0.1034 72 chr4 104803200 104804700 0.0917 49 chr4 104805900 104806200 0.4289 65 chr4 105307500 105308700 0.0148 73 chr4 105340200 105340500 0.2954 69 chr4 105449100 105449400 0.5685 58 chr4 105499200 105499500 0.3873 52 chr4 105568200 105568500 0.5578 67 chr4 105986700 105987000 0.1153 73 chr4 106121100 106121700 0.3648 76 chr4 106123800 106124100 0.4987 71 chr4 106218300 106218900 0.2072 79 chr4 106571100 106576800 0 108 chr4 106638300 106639800 0.0341 85 chr4 106641000 106641300 0.0341 85 chr4 106721100 106721400 0.398 73 chr4 106937100 106938300 0.2497 78 chr4 107082900 107084400 0.021 106 chr4 107206800 107210700 0 82 chr4 107222700 107223300 0.1654 35 chr4 107307600 107308500 0.2868 46 chr4 107355600 107358000 0 77 chr4 107846400 107847000 0.3563 89 chr4 108041100 108041400 0.3365 44 chr4 108077400 108077700 0.5924 44 chr4 108186600 108186900 0.5806 32 chr4 108409200 108410700 0.1102 90 chr4 108435900 108436200 0.4476 55 chr4 109269300 109269600 0.1704 87 chr4 109596000 109597800 0.0292 102 chr4 110084100 110084400 0.514 20 chr4 110406900 110410200 0.0164 82 chr4 110462100 110462400 0.1324 32 chr4 110688000 110688300 0.121 58 chr4 110690700 110691300 0.121 58 chr4 110757600 110759100 0.0798 63 chr4 110871600 110871900 0.1828 67 chr4 110873400 110875200 0.1828 67 chr4 111059400 111059700 0.4022 65 chr4 111099000 111099300 0.5936 69 chr4 111248400 111249000 0.3217 85 chr4 111339300 111340200 0.0978 71 chr4 111341400 111342600 0.0978 71 chr4 111396000 111396900 0.346 73 chr4 111458400 111461400 0.1175 85 chr4 111895800 111901500 0 91 chr4 111965700 111966000 0.0945 69 chr4 111967200 111967500 0.0945 69 chr4 112087500 112090800 0.2051 78 chr4 112092000 112092300 0.2051 78 chr4 112193700 112194000 0.5181 84 chr4 112483200 112483500 0.2868 45 chr4 112548900 112549200 0.6496 23 chr4 112578300 112578600 0.2771 37 chr4 112705800 112706100 0.5031 45 chr4 112956900 112957200 0.4571 57 chr4 113064900 113065200 0.09 22 chr4 113334600 113334900 0.6704 14 chr4 113427600 113428500 0.2672 66 chr4 113489400 113491500 0.2235 76 chr4 113492700 113493900 0.568 67 chr4 113854200 113854800 0.2331 133 chr4 113930700 113931000 0.2717 73 chr4 113988000 113988600 0.3594 83 chr4 114150000 114150300 0.434 96 chr4 114168300 114168900 0.2954 66 chr4 114448200 114448500 0.5834 57 chr4 114847200 114847500 0.5119 30 chr4 114918300 114918600 0.5798 31 chr4 115009800 115010100 0.2131 40 chr4 115176600 115177200 0.3573 78 chr4 116203800 116206200 0.0315 66 chr4 116330400 116330700 0.4042 31 chr4 116407800 116408100 0.199 65 chr4 116410800 116411100 0.4813 56 chr4 116686500 116687700 0.1493 75 chr4 116775300 116777100 0.1555 119 chr4 117924300 117924900 0.2564 82 chr4 118066200 118066500 0 17 chr4 118150500 118150800 0.405 67 chr4 118162500 118163100 0.4349 77 chr4 118427100 118427700 0.1379 51 chr4 118436400 118436700 0.4759 67 chr4 118505100 118505400 0.5538 48 chr4 118514100 118514400 0.3561 53 chr4 118535400 118535700 0.5423 53 chr4 118549500 118549800 0.5825 63 chr4 118554600 118554900 0.6867 50 chr4 118596300 118596600 0.3824 69 chr4 118602600 118605000 0.3318 104 chr4 118608600 118611300 0.0108 88 chr4 118613100 118614900 0.0108 88 chr4 118616100 118616400 0.0108 88 chr4 118618200 118619400 0.2282 99 chr4 118621200 118624500 0.0002 84 chr4 118644900 118647900 0.2587 71 chr4 118652100 118655100 0.1754 66 chr4 118656300 118656600 0.1754 66 chr4 118658100 118658400 0.2147 66 chr4 118662300 118664400 0.0507 72 chr4 118667400 118667700 0.3263 82 chr4 118689600 118689900 0.4952 121 chr4 119063400 119064000 0.4147 55 chr4 119077800 119078400 0.1186 62 chr4 119274600 119279700 0.0106 75 chr4 119342700 119343600 0.0482 77 chr4 119414400 119419500 0 78 chr4 119421000 119426400 0 78 chr4 119428200 119434200 0 78 chr4 119435400 119436300 0.303 57 chr4 119456700 119459100 0.2121 74 chr4 119461200 119461500 0.3238 24 chr4 119886900 119887500 0.236 77 chr4 119948700 119954400 0 111 chr4 120128100 120128700 0.2208 74 chr4 120252600 120253800 0.3077 70 chr4 120255300 120255600 0.3391 63 chr4 120586200 120586500 0.5162 46 chr4 120644700 120645000 0.3812 52 chr4 120647400 120647700 0.3197 54 chr4 120743400 120746700 0.1407 83 chr4 120887700 120888000 0.5886 40 chr4 121128900 121129200 0.2897 69 chr4 121310700 121311000 0.1227 61 chr4 121527000 121527300 0.4208 35 chr4 122112900 122114100 0.2885 92 chr4 122115300 122115600 0.3389 93 chr4 122332800 122333400 0.0359 63 chr4 122378100 122378400 0.5453 25 chr4 122497800 122498100 0.2823 67 chr4 122572800 122573100 0.2742 62 chr4 122652600 122656800 0 83 chr4 122801100 122801400 0.6622 23 chr4 122942100 122942400 0.296 85 chr4 123000600 123001200 0.1228 67 chr4 123022500 123022800 0.4136 61 chr4 123723000 123723300 0.2151 100 chr4 124022400 124023900 0.0008 65 chr4 124152900 124155000 0 98 chr4 124231800 124232400 0.2423 69 chr4 124286400 124287000 0.3529 75 chr4 124406100 124407900 0.122 90 chr4 124996500 124996800 0.3844 47 chr4 125257500 125259000 0.2293 83 chr4 126550200 126550500 0.6299 75 chr4 126770100 126770400 0.549 68 chr4 126928800 126934200 0.0894 103 chr4 127021200 127026600 0.0136 94 chr4 127063200 127064700 0.3237 89 chr4 127129800 127130400 0.5538 38 chr4 127227300 127227600 0.3213 60 chr4 127531200 127531500 0.4317 69 chr4 127590300 127592100 0.1887 91 chr4 127593900 127594200 0.1887 91 chr4 127651800 127653600 0.1134 103 chr4 127654800 127655100 0.1134 103 chr4 127680300 127680600 0.3932 63 chr4 127863000 127863300 0.1891 90 chr4 128214000 128219700 0 80 chr4 128647500 128647800 0.1174 74 chr4 129249900 129250200 0.423 24 chr4 129295500 129298200 0 80 chr4 129854400 129855600 0.2029 80 chr4 129858600 129859200 0.2857 68 chr4 129878700 129879000 0.2256 80 chr4 129962400 129962700 0.2581 77 chr4 129964500 129965400 0.2581 77 chr4 130016400 130019700 0.0018 79 chr4 130425000 130425300 0.175 201 chr4 131201400 131202300 0 64 chr4 131209800 131210400 0.4779 85 chr4 131354400 131355900 0.3451 85 chr4 131723700 131724600 0.0596 91 chr4 131726100 131727000 0.0438 101 chr4 131731200 131732700 0.4342 70 chr4 131733900 131764200 0 496 chr4 131887500 131887800 0.5161 58 chr4 131890200 131890500 0.402 61 chr4 132484800 132485100 0.3443 60 chr4 132632400 132633000 0.4682 71 chr4 132635700 132636300 0.1058 53 chr4 132698700 132699000 0.5872 35 chr4 132898500 132898800 0.2554 25 chr4 132945000 132946500 0.0342 82 chr4 132947700 132950100 0.0342 82 chr4 133491900 133492200 0.3674 63 chr4 133735800 133737300 0.1904 78 chr4 133786500 133788000 0.0458 74 chr4 134209500 134210100 0.1642 71 chr4 134590200 134591100 0 26 chr4 135006300 135006600 0.4504 56 chr4 135079800 135085200 0.0008 75 chr4 135179400 135180000 0.1925 58 chr4 135391200 135391500 0.2205 43 chr4 135407100 135407400 0.3566 119 chr4 135449100 135449400 0.0089 71 chr4 135451500 135452700 0.0089 71 chr4 136293600 136299600 0 100 chr4 137164800 137165100 0.4996 14 chr4 137167500 137168400 0.4015 80 chr4 137497200 137502300 0.0793 88 chr4 137843400 137844000 0.3399 58 chr4 137933100 137933400 0.5094 28 chr4 138066900 138067200 0.5254 37 chr4 138547800 138552300 0 87 chr4 138854700 138855000 0.2474 69 chr4 138881700 138882600 0.2095 68 chr4 139428300 139430400 0.1132 92 chr4 139707600 139707900 0.4621 95 chr4 139944600 139944900 0.199 73 chr4 139990200 139990800 0.3577 80 chr4 140318100 140318700 0.1328 70 chr4 140414400 140418600 0.0857 107 chr4 140520300 140520600 0.3112 63 chr4 140779800 140780700 0.0075 80 chr4 140895900 140896800 0.0105 67 chr4 140956800 140957100 0.3054 58 chr4 141068700 141071100 0.1315 116 chr4 141182100 141183000 0.0018 93 chr4 141203100 141203400 0.5089 25 chr4 141270300 141270600 0.5984 53 chr4 141823800 141824100 0.5284 70 chr4 141877500 141879000 0.1222 67 chr4 141880500 141882600 0.1222 67 chr4 142137300 142137600 0.1079 61 chr4 142255800 142256100 0.5767 61 chr4 142259100 142259400 0.361 61 chr4 142525500 142525800 0.0483 48 chr4 142624800 142625400 0.2853 77 chr4 142627200 142627800 0.3739 64 chr4 143100300 143106300 0 74 chr4 143588700 143589000 0.4812 56 chr4 143717100 143717400 0.3676 65 chr4 143808900 143811600 0.0115 74 chr4 143877600 143878200 0.2561 64 chr4 143884200 143889000 0.0092 61 chr4 143892900 143893200 0.3023 65 chr4 143970300 143970600 0.6667 10 chr4 143998500 143998800 0.2594 81 chr4 144006900 144007200 0.452 54 chr4 144124800 144125100 0.0479 72 chr4 144126600 144128700 0.0479 72 chr4 144239100 144239400 0.4604 71 chr4 144748200 144748500 0.1056 65 chr4 144772200 144773700 0.3592 73 chr4 144810000 144810900 0.0301 124 chr4 145369500 145375200 0 102 chr4 145397700 145398000 0.58 35 chr4 146286300 146286600 0.6959 220 chr4 146350500 146355300 0.1103 75 chr4 146554800 146555100 0.4817 71 chr4 146618700 146622000 0.0683 100 chr4 146665200 146667300 0.1273 94 chr4 146999400 146999700 0.4103 40 chr4 147358200 147358500 0.3922 24 chr4 147421200 147421500 0.5414 46 chr4 147435600 147435900 0.4601 66 chr4 147451800 147453300 0.0456 68 chr4 147468300 147468600 0.4196 74 chr4 147783900 147784200 0.0162 216 chr4 147905400 147905700 0.0643 35 chr4 148320300 148320600 0.3993 80 chr4 148322400 148322700 0.3993 80 chr4 148768500 148768800 0.4897 68 chr4 148863000 148863300 0.4431 41 chr4 149130300 149130600 0.1597 92 chr4 149817000 149818200 0.2803 96 chr4 149851800 149853900 0.2632 74 chr4 149916900 149918700 0.168 107 chr4 149920500 149921400 0.168 107 chr4 150030000 150030300 0.2575 30 chr4 150291300 150291900 0.023 83 chr4 150489000 150489300 0.6212 11 chr4 150638400 150639300 0.0428 92 chr4 150658500 150661200 0 75 chr4 151214400 151214700 0.5118 26 chr4 151254600 151254900 0.2148 78 chr4 151390800 151391700 0.3133 72 chr4 151419600 151420500 0.001 60 chr4 152865900 152866200 0.4412 69 chr4 153129300 153129600 0.5861 153 chr4 155282100 155285700 0 95 chr4 155538600 155538900 0 11 chr4 156013800 156014100 0.6661 39 chr4 156048300 156050100 0.0017 105 chr4 156107100 156107400 0.475 78 chr4 156284700 156285300 0.1407 78 chr4 156286500 156287100 0.1407 78 chr4 156304800 156305700 0.0154 98 chr4 156370800 156372900 0.0072 85 chr4 156605100 156605400 0.2138 57 chr4 156759300 156759900 0.5833 67 chr4 157177500 157177800 0.4395 66 chr4 157256100 157256400 0.6521 10 chr4 157495500 157497000 0.4927 32 chr4 157635900 157637700 0.116 57 chr4 157708200 157708500 0.4605 31 chr4 158084400 158085000 0.0188 78 chr4 158086500 158087400 0.1073 93 chr4 158088600 158089200 0.1073 93 chr4 158364300 158364600 0.3611 95 chr4 158433000 158433300 0.106 25 chr4 158435400 158436300 0.1601 22 chr4 158473500 158474700 0 72 chr4 158476500 158476800 0 72 chr4 158544900 158545200 0.338 72 chr4 158734800 158735100 0.5222 58 chr4 158983800 158985300 0.2493 63 chr4 159523500 159523800 0.5546 22 chr4 159709800 159710100 0.437 60 chr4 159711300 159711900 0.3537 63 chr4 159806100 159806700 0.2124 99 chr4 159939300 159939600 0.4679 63 chr4 160123200 160124100 0.2077 55 chr4 160151100 160151400 0.3107 56 chr4 160152600 160154400 0.3107 56 chr4 160476600 160476900 0.1946 75 chr4 160575600 160575900 0.2249 80 chr4 160578900 160579200 0.3631 73 chr4 160659000 160660800 0.012 82 chr4 161028600 161030100 0.5428 40 chr4 161084700 161085300 0.49 58 chr4 161288400 161288700 0.5477 46 chr4 161618100 161618700 0.1007 76 chr4 161636700 161639100 0.0261 79 chr4 161974200 161974800 0.1004 79 chr4 162153600 162153900 0.2556 32 chr4 162466500 162467100 0.152 70 chr4 162873300 162873600 0.5096 51 chr4 162942000 162942300 0.4841 58 chr4 163203900 163204200 0.3586 29 chr4 163207500 163207800 0.1935 122 chr4 163209300 163212300 0.1935 122 chr4 163573800 163574700 0.3209 91 chr4 163580700 163581000 0.5612 43 chr4 163634700 163636500 0.0843 63 chr4 163637700 163638000 0.0843 63 chr4 163737600 163737900 0.2428 49 chr4 163824300 163824900 0.2087 47 chr4 163979100 163980600 0.1311 74 chr4 164102100 164106600 0.0478 67 chr4 164143200 164143500 0.1484 84 chr4 164144700 164146200 0.1484 84 chr4 164242200 164243400 0.3046 71 chr4 164245800 164247300 0.3423 61 chr4 164352000 164355600 0 91 chr4 164470200 164470500 0.1398 92 chr4 164553600 164558400 0.0415 72 chr4 164915100 164916000 0.1404 49 chr4 164969400 164970300 0.3682 82 chr4 165957900 165958800 0.1497 88 chr4 166235700 166236000 0.3445 82 chr4 166266900 166267200 0.4417 75 chr4 166448100 166449300 0.0036 87 chr4 166464600 166466400 0.1251 92 chr4 166468200 166469100 0.1251 92 chr4 166554900 166555500 0.4991 75 chr4 166570500 166575900 0 93 chr4 166579800 166580700 0.0742 593 chr4 166603500 166603800 0.539 86 chr4 166755900 166761900 0 99 chr4 166851900 166852200 0.4828 78 chr4 167276100 167277000 0.385 72 chr4 167280600 167280900 0.3378 71 chr4 167345100 167345400 0.4274 67 chr4 167347800 167348400 0.1468 54 chr4 167709300 167709600 0.4349 52 chr4 168155700 168156000 0.0642 273 chr4 168442500 168442800 0.0227 89 chr4 168444000 168447300 0.0227 89 chr4 168703200 168703800 0.3594 78 chr4 168793200 168793500 0.6595 44 chr4 169515600 169521300 0 86 chr4 169545300 169545600 0.5301 69 chr4 169778400 169778700 0.2947 77 chr4 169792500 169793400 0.2198 54 chr4 169839300 169839600 0.3951 55 chr4 169878900 169879200 0.2068 60 chr4 170238300 170238600 0.4475 23 chr4 170255700 170256300 0.1693 79 chr4 170356200 170358000 0.2124 71 chr4 170433900 170434200 0.286 68 chr4 170435400 170436600 0.0916 71 chr4 170463900 170464200 0.2649 21 chr4 170783700 170784900 0.4503 102 chr4 170991600 170991900 0.342 47 chr4 171093900 171094200 0.2003 126 chr4 171296400 171296700 0.4629 45 chr4 171548100 171548400 0.536 54 chr4 172178700 172179600 0.2974 69 chr4 172341000 172341300 0.5949 78 chr4 173220900 173221200 0.4781 63 chr4 173483700 173484000 0.2593 14 chr4 173867100 173867700 0.0509 47 chr4 174224700 174225000 0.6586 16 chr4 174780000 174782400 0.1582 85 chr4 174857700 174859800 0.0107 64 chr4 175021200 175021500 0.4614 66 chr4 175023000 175025700 0.1491 75 chr4 175206300 175209000 0.0722 83 chr4 175257600 175257900 0.4578 56 chr4 175535100 175535400 0.3135 78 chr4 175637100 175637700 0.0629 258 chr4 175812300 175812600 0.4147 86 chr4 176693400 176696700 0.308 94 chr4 176935200 176935500 0.2561 71 chr4 176948100 176948400 0.5492 34 chr4 177235800 177236100 0.3561 25 chr4 177593100 177593400 0.4912 20 chr4 177845700 177846000 0.1177 83 chr4 177847200 177847500 0.1177 83 chr4 177998700 178000200 0.1479 72 chr4 178017600 178020900 0.368 74 chr4 178862100 178862400 0.4201 66 chr4 179377500 179377800 0.3127 63 chr4 179534100 179534400 0.5092 38 chr4 179640600 179640900 0.4999 53 chr4 179642100 179642400 0.2336 68 chr4 180128400 180129600 0.0816 97 chr4 180237900 180238800 0.3517 55 chr4 180495900 180496500 0.5298 86 chr4 180628200 180628500 0.6142 28 chr4 180823500 180823800 0.3972 24 chr4 180918600 180918900 0.5842 33 chr4 180943800 180945600 0.052 44 chr4 180955500 180957000 0 68 chr4 181239000 181242000 0 550 chr4 181409100 181414800 0.0672 86 chr4 181773900 181775100 0.0017 84 chr4 182124900 182125200 0.3622 55 chr4 182358600 182358900 0.415 79 chr4 182360100 182360400 0.1711 56 chr4 182780100 182783100 0.1285 69 chr4 182832000 182834700 0.0213 42 chr4 183277500 183277800 0.1859 74 chr4 183336900 183337200 0 35 chr4 183382500 183382800 0.2982 18 chr4 183487200 183487500 0.6955 41 chr4 183553200 183553500 0.5971 36 chr4 183639900 183640800 0.0011 58 chr4 183735000 183735300 0 22 chr4 183736500 183737700 0.1183 76 chr4 183851100 183852300 0.3248 103 chr4 184140300 184140900 0.0896 67 chr4 184209600 184212600 0.175 92 chr4 184213800 184214100 0.175 92 chr4 184858200 184858800 0.2965 48 chr4 184966500 184967700 0.1565 48 chr4 185234400 185234700 0.2781 37 chr4 185443800 185444100 0.5181 36 chr4 185796600 185796900 0.214 43 chr4 185826900 185827800 0.4625 318 chr4 185999700 186000000 0.6063 80 chr4 186057000 186057900 0.5403 20 chr4 186110400 186115800 0 87 chr4 186371400 186372000 0.0095 88 chr4 186428100 186428400 0.6743 27 chr4 186436200 186436500 0.6097 27 chr4 186477000 186478500 0.3459 106 chr4 186546900 186547200 0.3898 91 chr4 186626100 186627000 0.6912 53 chr4 186821400 186821700 0.6747 77 chr4 186841800 186842100 0.3554 63 chr4 186874500 186874800 0.4894 23 chr4 186959700 186972900 0.2512 77 chr4 187053000 187053600 0.2686 91 chr4 187066800 187067100 0.2551 52 chr4 187214400 187214700 0.6158 46 chr4 187304400 187305000 0 68 chr4 187529100 187529400 0.6552 27 chr4 187876800 187877100 0.5158 66 chr4 187896600 187896900 0.4007 50 chr4 187948500 187949700 0 73 chr4 187955100 187956600 0 66 chr4 188151900 188154600 0.0681 21 chr4 188197200 188197500 0.3788 18 chr4 188216400 188216700 0.6439 11 chr4 188269500 188269800 0.5795 15 chr4 188394300 188394600 0.3957 37 chr4 188445000 188448900 0.0065 65 chr4 188504400 188505000 0.2662 182 chr4 188558700 188562000 0.0947 97 chr4 188739600 188741700 0.0433 80 chr4 188874300 188874600 0.5458 30 chr4 188904900 188905200 0.5389 69 chr4 188973900 188975100 0.3393 43 chr4 189011400 189011700 0.4976 38 chr4 189036000 189036300 0.1786 176 chr4 189048600 189048900 0.2906 16 chr4 189051900 189052200 0.6669 56 chr4 189108600 189108900 0.458 52 chr4 189137100 189143100 0 72 chr4 189155400 189155700 0.1257 53 chr4 189232800 189235200 0.4316 81 chr4 189277500 189277800 0.5923 16 chr4 189280200 189280500 0.6516 83 chr4 189296700 189297000 0.2666 67 chr4 189307500 189309300 0.2123 76 chr4 189314400 189315000 0.0744 105 chr4 189332700 189333000 0 21 chr4 189380100 189380700 0.5222 96 chr4 189400200 189400500 0.2065 106 chr4 189403800 189404100 0.2819 58 chr4 189460800 189461400 0.0254 70 chr4 189466800 189467100 0.6199 57 chr4 189490500 189492000 0.1042 130 chr4 189630000 189630300 0.2785 70 chr4 189645300 189646500 0.3403 69 chr4 189651600 189652200 0.1493 99 chr4 189653700 189654000 0.1493 99 chr4 189669300 189676500 0 43 chr4 189677700 189686100 0 46 chr4 189688200 189702900 0 60 chr4 189705000 189705300 0.4716 71 chr4 189728400 189728700 0.504 61 chr4 189798300 189798600 0.2476 63 chr4 189810600 189810900 0.3499 67 chr4 189820500 189820800 0.6278 46 chr4 189835800 189837300 0.1925 1488 chr4 189846000 189847200 0.3817 246 chr4 189881100 189881700 0.5662 504 chr4 189980700 189981000 0.6246 26 chr4 190002900 190003200 0.6796 70 chr4 190021500 190032000 0.0161 567 chr4 190038000 190040100 0.0262 61 chr4 190042500 190046400 0 100 chr4 190047900 190050000 0 100 chr4 190051800 190056300 0 100 chr4 190057500 190059000 0.1497 133 chr4 190060200 190061400 0.1497 133 chr4 190065300 190106100 0 815 chr4 190113300 190119300 0.0484 284 chr4 190121100 190123200 0.0484 284 chr4 190173000 190204800 0 20904 chr5 9900 12000 0 1344 chr5 43200 43800 0.1825 66 chr5 73200 73500 0.6259 97 chr5 83400 85200 0.2601 64 chr5 100500 101100 0.1758 53 chr5 165300 166500 0.5813 69 chr5 209100 209700 0.2422 39 chr5 211500 213000 0.1488 39 chr5 216300 216900 0.3972 49 chr5 254100 254400 0.342 52 chr5 259800 262200 0.1675 68 chr5 279900 280200 0.4253 44 chr5 293400 294000 0.1222 80 chr5 309600 309900 0.1876 71 chr5 344400 344700 0.1329 54 chr5 356400 359400 0 54 chr5 391500 392400 0.3038 117 chr5 394200 394500 0.3591 59 chr5 415200 415800 0.4309 136 chr5 474300 474600 0.2955 47 chr5 486900 487500 0.2205 19 chr5 495300 495900 0.0356 34 chr5 552300 553500 0.2797 148 chr5 561900 565800 0.0341 43 chr5 628500 633000 0 238 chr5 649200 651000 0.2839 67 chr5 678300 678600 0.6334 69 chr5 679800 680400 0.5346 55 chr5 687300 690900 0 77 chr5 694500 695400 0 67 chr5 697800 698100 0.1368 72 chr5 699600 699900 0.4069 50 chr5 711900 712500 0.1478 68 chr5 723600 727800 0.1159 75 chr5 734400 741600 0 76 chr5 746700 747300 0.0764 58 chr5 754800 756300 0.0185 72 chr5 765000 765300 0.5574 66 chr5 767700 769500 0 70 chr5 779400 783000 0 75 chr5 785700 786900 0.0045 67 chr5 789000 789600 0.3893 52 chr5 796200 796500 0.35 86 chr5 809100 812100 0.0297 89 chr5 825900 827100 0 67 chr5 828600 830700 0.0154 62 chr5 832200 832800 0.1663 76 chr5 838800 839400 0.0692 55 chr5 847500 848700 0.119 82 chr5 878700 880500 0 90 chr5 897300 900000 0 61 chr5 975900 976200 0.6358 33 chr5 981900 982200 0.6037 53 chr5 1022100 1026300 0.169 96 chr5 1070100 1073400 0.0532 45 chr5 1170300 1170600 0.256 58 chr5 1191300 1192500 0.3747 18 chr5 1272600 1273800 0.1948 54 chr5 1289400 1291500 0.1549 103 chr5 1327800 1328400 0.438 75 chr5 1329600 1329900 0.3258 69 chr5 1332900 1333800 0.6381 184 chr5 1339500 1339800 0.5114 41 chr5 1422300 1422600 0.6586 108 chr5 1456200 1456800 0.5491 69 chr5 1539600 1540200 0.6064 182 chr5 1569900 1570200 0.2046 99 chr5 1574400 1574700 0.2764 48 chr5 1586400 1587000 0.4751 73 chr5 1598100 1598700 0.3915 62 chr5 1625700 1626000 0.3704 45 chr5 1644600 1644900 0.2396 28 chr5 1663800 1664100 0.0993 14 chr5 1682400 1682700 0.5003 39 chr5 1710600 1715700 0.0234 92 chr5 1842900 1843200 0.3115 88 chr5 1857900 1858200 0.4332 66 chr5 1968300 1971300 0 83 chr5 2004600 2004900 0.6661 61 chr5 2145300 2147100 0.3159 396 chr5 2490600 2491500 0.3372 131 chr5 2907600 2907900 0.4818 46 chr5 3202200 3202500 0.5621 73 chr5 3276000 3276300 0.5231 58 chr5 3440700 3441000 0.2234 84 chr5 3442500 3444000 0.2234 84 chr5 3445800 3446100 0.6846 105 chr5 3480300 3480600 0.3007 66 chr5 3499200 3499500 0.1537 26 chr5 3637800 3639300 0 47 chr5 3900300 3900600 0.4035 80 chr5 4003200 4003500 0.6433 70 chr5 4148700 4149000 0.412 45 chr5 4496700 4501800 0 81 chr5 4616400 4620900 0.157 82 chr5 5217000 5217300 0.4268 53 chr5 5304900 5305500 0.4461 115 chr5 5610600 5610900 0.685 46 chr5 6363900 6364200 0.2695 36 chr5 6571200 6571800 0.3505 33 chr5 6774000 6774300 0.1265 16 chr5 6966600 6971400 0 64 chr5 7056900 7057500 0.0579 91 chr5 7127400 7127700 0.4438 66 chr5 7141200 7141500 0.3544 29 chr5 7172700 7173000 0.2262 40 chr5 7174800 7176300 0.2284 55 chr5 7194000 7199700 0.0135 83 chr5 7221900 7222200 0.5783 22 chr5 7232700 7235100 0.1042 105 chr5 7300800 7301100 0.4027 20 chr5 7573800 7574100 0.3435 32 chr5 7603800 7606200 0 73 chr5 8085300 8086500 0.4366 66 chr5 8088300 8088600 0.5111 63 chr5 8160600 8160900 0.4525 65 chr5 8162400 8162700 0.2136 68 chr5 8163900 8164200 0.2136 68 chr5 8274000 8274600 0.274 75 chr5 8379000 8379300 0.2595 62 chr5 8745900 8746200 0.5135 96 chr5 8937900 8938200 0.1371 35 chr5 9259500 9262800 0 88 chr5 9400500 9400800 0.4337 33 chr5 9411600 9411900 0.36 32 chr5 9584400 9586200 0.0276 132 chr5 10005300 10005600 0.4616 35 chr5 10273200 10273500 0.3827 22 chr5 10275000 10275300 0.4125 33 chr5 10346400 10347000 0.0411 69 chr5 10443300 10443600 0.5894 48 chr5 10638900 10639800 0.4412 37 chr5 12057600 12057900 0.5857 56 chr5 12197400 12198000 0.0741 70 chr5 12254100 12254400 0.425 50 chr5 12453300 12455100 0 74 chr5 12491400 12491700 0.2564 47 chr5 12492900 12493800 0.2313 69 chr5 13137300 13137600 0.4723 62 chr5 13329900 13330500 0.0038 11 chr5 13416600 13422600 0 75 chr5 13855200 13855500 0.6332 43 chr5 14346900 14347500 0.1198 265 chr5 14634000 14635200 0.0511 102 chr5 14808600 14809200 0.2506 71 chr5 15274500 15274800 0.4944 69 chr5 15276000 15277200 0.5058 67 chr5 15296100 15297000 0.1341 69 chr5 15399900 15402000 0.1305 47 chr5 15404700 15405000 0.445 53 chr5 15569100 15569700 0.2373 80 chr5 15906600 15912600 0 88 chr5 16336800 16337700 0.1684 84 chr5 16339500 16341300 0.1684 84 chr5 17101200 17101800 0.0807 92 chr5 17517900 17530500 0 549 chr5 17580600 17599500 0 722 chr5 17707500 17707800 0.3737 59 chr5 17749800 17750100 0.0438 55 chr5 17751900 17752200 0.1899 84 chr5 17840400 17841000 0.0139 66 chr5 18096900 18097200 0.3832 29 chr5 18474000 18474600 0.0862 86 chr5 18842400 18842700 0.4877 52 chr5 19051500 19051800 0.2322 94 chr5 19161600 19162200 0.0042 79 chr5 19163700 19167000 0.0042 79 chr5 19863900 19864200 0.4746 64 chr5 20555400 20555700 0.3583 133 chr5 20644200 20646900 0.0024 99 chr5 20700300 20700900 0.217 45 chr5 20702100 20703300 0.2006 53 chr5 20730900 20731200 0.324 58 chr5 20738400 20738700 0.295 71 chr5 20749800 20750100 0.4012 59 chr5 20752200 20752800 0.3278 67 chr5 20754000 20757600 0.0051 57 chr5 20759400 20759700 0.0015 70 chr5 20761500 20765100 0.0015 70 chr5 20766600 20768400 0.0015 70 chr5 20769900 20771400 0.3286 51 chr5 20774100 20775300 0.4249 61 chr5 20779200 20779500 0.4896 60 chr5 20792700 20793000 0.2695 49 chr5 20802600 20802900 0.5492 65 chr5 20811900 20812200 0.63 50 chr5 20823000 20823300 0.4699 48 chr5 20841600 20842200 0.2631 47 chr5 20861100 20861400 0.5855 35 chr5 20868300 20868600 0 26 chr5 20870700 20871300 0.166 47 chr5 20874000 20874300 0.6562 49 chr5 20921100 20921400 0.4419 51 chr5 20932500 20932800 0.3809 54 chr5 21108000 21113100 0.0494 88 chr5 21271500 21271800 0.3653 38 chr5 21294000 21294300 0.3937 55 chr5 21299100 21300300 0.1353 85 chr5 21315000 21315300 0.5279 52 chr5 21332100 21332400 0.408 47 chr5 21338100 21338400 0.1479 62 chr5 21340800 21341400 0.5761 67 chr5 21478500 21478800 0.6904 154 chr5 21480300 21480900 0.0802 251 chr5 21484800 21485400 0.0713 189 chr5 21490200 21491100 0.0964 139 chr5 21494700 21495300 0.0565 207 chr5 21499800 21500400 0.3136 64 chr5 21506100 21507000 0.3873 45 chr5 21516600 21517200 0.451 79 chr5 21519600 21519900 0.4612 74 chr5 21544200 21544500 0.4009 48 chr5 21841500 21841800 0.4904 71 chr5 21938400 21938700 0.3686 48 chr5 21969900 21970200 0.5641 64 chr5 21999600 21999900 0.4784 53 chr5 22012500 22013100 0.2044 56 chr5 22134600 22134900 0.2597 64 chr5 22157100 22157400 0.1816 56 chr5 22164600 22165200 0.442 64 chr5 22168800 22169100 0.288 61 chr5 22321200 22321500 0.3878 52 chr5 22488900 22489200 0.6674 48 chr5 22821600 22821900 0.3017 68 chr5 23526900 23527200 0.6794 64 chr5 24091500 24091800 0.4265 21 chr5 24370500 24373200 0 69 chr5 24452700 24453000 0.4998 30 chr5 25079100 25081500 0.1359 68 chr5 25082700 25083000 0.1359 68 chr5 25113900 25114200 0.4208 69 chr5 25116600 25117500 0.2071 74 chr5 25119000 25119300 0.2071 74 chr5 25207500 25207800 0.0386 94 chr5 25275300 25275600 0.4118 48 chr5 25314600 25314900 0.4514 47 chr5 25381500 25384200 0.2106 96 chr5 25777200 25777500 0.0924 19 chr5 25831500 25832100 0.2937 46 chr5 26100600 26101200 0.4235 70 chr5 26111100 26111400 0 17 chr5 26477100 26478000 0.1295 66 chr5 26479500 26479800 0.137 112 chr5 26481300 26481900 0.137 112 chr5 27047100 27047700 0.3412 53 chr5 27209700 27210000 0.2892 69 chr5 27211500 27211800 0.398 50 chr5 27426600 27426900 0.2791 40 chr5 27919500 27919800 0.2146 54 chr5 28064700 28065000 0.1754 75 chr5 28197000 28197300 0.2408 52 chr5 28200900 28201200 0.1019 72 chr5 28502400 28504800 0.1895 63 chr5 28613100 28613400 0.475 62 chr5 28757700 28758000 0.4952 88 chr5 28760400 28760700 0.4404 81 chr5 28799700 28802700 0.1748 72 chr5 28803900 28804200 0.3748 83 chr5 28846500 28847100 0.3662 75 chr5 28874700 28875000 0.5293 66 chr5 29190600 29191200 0.0956 76 chr5 29458800 29459100 0.2461 28 chr5 29486100 29490300 0 72 chr5 29877000 29878500 0.0493 92 chr5 30012600 30014100 0.0853 53 chr5 30426000 30427800 0.0546 101 chr5 30486900 30488400 0.5428 81 chr5 30490200 30491700 0.4334 130 chr5 30818100 30823500 0.1184 110 chr5 30860100 30860400 0.3609 51 chr5 31203300 31203600 0.3866 64 chr5 32185500 32185800 0.3674 73 chr5 32208000 32209500 0.1095 115 chr5 32516400 32517000 0.3675 76 chr5 32822700 32828100 0 83 chr5 32911500 32912400 0.1122 81 chr5 33123000 33123300 0.0507 109 chr5 33124500 33128100 0.0507 109 chr5 33200700 33201000 0.4609 41 chr5 33355500 33355800 0.4048 28 chr5 33570600 33571200 0.3697 85 chr5 33952800 33954000 0.0497 97 chr5 34068900 34069200 0.2665 57 chr5 34082100 34082400 0.6033 64 chr5 34086300 34087200 0.2049 59 chr5 34090200 34090500 0.2534 36 chr5 34093200 34093500 0.2467 50 chr5 34094700 34098300 0 59 chr5 34099500 34100100 0.1834 60 chr5 34101900 34102200 0.3227 42 chr5 34104000 34107300 0 52 chr5 34108800 34109400 0.3765 68 chr5 34111500 34111800 0.5372 56 chr5 34122600 34122900 0.5249 59 chr5 34126200 34126500 0.5062 54 chr5 34130400 34130700 0.443 72 chr5 34135500 34136100 0.4585 51 chr5 34148100 34153800 0 95 chr5 34164300 34164600 0.539 47 chr5 34165800 34166100 0.2465 42 chr5 34168200 34168500 0.5517 69 chr5 34173300 34173900 0.1884 47 chr5 34178700 34179300 0.0312 225 chr5 34180500 34180800 0.0312 225 chr5 34182900 34184100 0.0224 168 chr5 34186500 34189200 0.0976 205 chr5 34194000 34195200 0.299 226 chr5 34196400 34196700 0.299 226 chr5 34198200 34200300 0.0113 57 chr5 34204800 34206900 0.1681 58 chr5 34212600 34212900 0.3219 66 chr5 34227000 34227300 0.3918 68 chr5 34231800 34233600 0.1284 79 chr5 34241400 34241700 0.2516 48 chr5 34245000 34245600 0.0692 61 chr5 34248000 34250400 0.2087 57 chr5 34251600 34251900 0.2087 57 chr5 34254000 34254600 0.2087 57 chr5 34269300 34269600 0.573 52 chr5 34275900 34276200 0.2388 20 chr5 34281000 34281300 0.5022 53 chr5 34305000 34307700 0.0008 77 chr5 34331100 34331400 0.606 35 chr5 34340100 34340400 0.2653 58 chr5 34344300 34344600 0.479 38 chr5 34363800 34364100 0.2093 65 chr5 34401000 34401300 0.4143 41 chr5 34439100 34439400 0.3481 116 chr5 35018700 35019600 0.2635 80 chr5 35021400 35021700 0.2157 79 chr5 35499900 35500200 0.495 86 chr5 35568900 35570100 0.2551 68 chr5 35614200 35614500 0.5983 44 chr5 36291900 36293400 0.0775 71 chr5 36321000 36322200 0.0467 69 chr5 37159200 37159500 0.6068 60 chr5 37458000 37460700 0 64 chr5 37466100 37466400 0.6364 66 chr5 38170500 38171100 0.3974 75 chr5 38172300 38174100 0.0875 88 chr5 38625900 38626200 0.3895 69 chr5 38627400 38627700 0.3895 69 chr5 38629200 38629500 0.3895 69 chr5 38821200 38821500 0.5228 56 chr5 39787800 39793500 0 139 chr5 39916800 39917100 0.4026 51 chr5 40542000 40547400 0.067 101 chr5 40800600 40801800 0.0908 81 chr5 40856700 40857000 0.2248 79 chr5 41235300 41238300 0.0707 81 chr5 41403300 41403900 0.1492 66 chr5 41488200 41489100 0.3975 67 chr5 41492100 41492400 0.382 109 chr5 41599500 41599800 0.1492 57 chr5 41604000 41604300 0.5557 43 chr5 41846100 41846700 0.3274 74 chr5 41847900 41848200 0.3274 74 chr5 41953500 41953800 0.3661 69 chr5 42165900 42167700 0 64 chr5 42735300 42740100 0.001 95 chr5 42981000 42982200 0.0761 80 chr5 43086600 43089000 0.0608 81 chr5 43577700 43578000 0.3468 54 chr5 43605300 43605600 0.4778 34 chr5 43718400 43718700 0.2422 82 chr5 43720200 43722000 0.2422 82 chr5 44152200 44154300 0 94 chr5 44688300 44688900 0.6341 20 chr5 44730600 44731200 0.2215 74 chr5 45350400 45351600 0.2731 70 chr5 45495000 45495600 0.0505 66 chr5 45548700 45549000 0.5244 64 chr5 45658800 45665400 0 82 chr5 45977400 45978300 0.2269 59 chr5 46030800 46032300 0.3788 54 chr5 46323300 46323600 0.6168 116 chr5 46327800 46328100 0.6429 80 chr5 46434600 46434900 0.6798 181 chr5 46486200 46492200 0 70 chr5 46493700 46501200 0 136 chr5 46503000 46503300 0 136 chr5 46504500 46507800 0 48 chr5 46509300 46515300 0 112 chr5 46518000 46524000 0 101 chr5 46526400 46526700 0.2418 12 chr5 46528200 46529700 0 23 chr5 46530900 46533600 0 56 chr5 46535100 46538400 0 106 chr5 46540200 46542900 0.0305 40 chr5 46545000 46551300 0 98 chr5 46553100 46554000 0 43 chr5 46555500 46557300 0.0487 63 chr5 46559100 46562400 0 71 chr5 46563600 46570200 0 170 chr5 46572000 46575600 0 129 chr5 46576800 46584300 0 153 chr5 46585500 46586400 0 60 chr5 46587600 46599300 0 111 chr5 46600500 46610100 0 192 chr5 46611300 46616100 0 192 chr5 46617300 46625100 0 207 chr5 46626600 46627200 0 207 chr5 46628400 46635000 0 98 chr5 46637100 46638900 0 57 chr5 46640400 46643100 0 81 chr5 46644900 46674900 0 222 chr5 46676400 46676700 0 222 chr5 46677900 46684800 0 222 chr5 46686000 46687500 0 212 chr5 46688700 46689300 0 212 chr5 46691700 46695000 0 116 chr5 46696200 46702500 0 116 chr5 46705200 46705500 0.4054 48 chr5 46707300 46709100 0 119 chr5 46710300 46716300 0 203 chr5 46717800 46718400 0 62 chr5 46719600 46722300 0 167 chr5 46723800 46726500 0 240 chr5 46728000 46728900 0 240 chr5 46730100 46740300 0 240 chr5 46742400 46749300 0 400 chr5 46750800 46769400 0 400 chr5 46771800 46784400 0 142 chr5 46785900 46790700 0 142 chr5 46792200 46926000 0 288 chr5 46927500 46957500 0 162 chr5 46959300 47068500 0 417 chr5 47073900 47079600 0 114 chr5 47082300 47099700 0 107 chr5 47101800 47102400 0.1463 76 chr5 47104800 47231700 0 767 chr5 47232900 47242200 0 767 chr5 47243400 47255700 0 767 chr5 47256900 47295300 0 767 chr5 47296500 47297400 0 767 chr5 47299200 47300400 0.4335 51 chr5 47307000 47309100 0.0121 262 chr5 49591500 49593000 0 100 chr5 49601100 49603200 0.1512 59888 chr5 49609800 49617300 0 297 chr5 49622700 49623000 0.321 40 chr5 49624800 49625100 0.5652 39 chr5 49626600 49627200 0.0071 398 chr5 49630500 49633800 0 15366 chr5 49642500 49648500 0.0554 2508 chr5 49649700 49650300 0.0554 2508 chr5 49656000 49662000 0.1929 49149 chr5 49665900 49677300 0 17908 chr5 49678500 49686300 0 17908 chr5 49687500 49693500 0 108 chr5 49695000 49720500 0 254 chr5 49721700 49728600 0 493 chr5 49729800 49769700 0 493 chr5 49770900 50008500 0 1046 chr5 50009700 50059500 0 1046 chr5 50109600 50145300 0 617 chr5 50205600 50205900 0.54 157 chr5 50229600 50229900 0.6417 111 chr5 51252600 51252900 0.0716 99 chr5 51254400 51255300 0.0716 99 chr5 51331200 51335400 0.0513 93 chr5 51354000 51354300 0.3558 75 chr5 51535500 51535800 0.5562 67 chr5 51708000 51708300 0.3102 25 chr5 52018800 52019400 0.1668 93 chr5 52089000 52089300 0.1042 87 chr5 52090500 52090800 0.1042 87 chr5 52100100 52100400 0.4567 44 chr5 52164300 52164600 0.1451 46 chr5 52192500 52193100 0.1705 73 chr5 52246800 52247100 0.2173 66 chr5 52248300 52248900 0.2173 66 chr5 52540200 52540500 0.2277 26 chr5 52613100 52613400 0.158 66 chr5 52722000 52722600 0.2248 71 chr5 52935900 52936200 0.2624 31 chr5 53004900 53005200 0.5807 69 chr5 53280000 53280600 0.3211 112 chr5 54181800 54184200 0.1067 59 chr5 54789300 54789600 0.4709 60 chr5 54806700 54807300 0.3098 84 chr5 55202700 55203000 0.6489 32 chr5 55571400 55572000 0.1956 83 chr5 55587900 55588200 0.1735 75 chr5 55695600 55696500 0.1793 54 chr5 55752600 55754700 0.134 66 chr5 56799900 56800200 0.2368 91 chr5 57352500 57352800 0.0187 86 chr5 57354000 57356700 0.0187 86 chr5 57377700 57378600 0.1883 80 chr5 57471900 57475500 0.0505 79 chr5 57866100 57867300 0.4377 66 chr5 58290600 58291200 0.1269 48 chr5 58384200 58390200 0 89 chr5 58422000 58422300 0.3277 61 chr5 58552500 58553700 0.1616 88 chr5 58554900 58555500 0.2526 67 chr5 58597200 58597800 0.1233 20 chr5 58757100 58757400 0.3059 60 chr5 59200200 59200500 0.4973 35 chr5 59284500 59285100 0.0048 67 chr5 59396100 59400600 0.2892 67 chr5 59762400 59762700 0.4868 44 chr5 60038700 60039000 0.4578 58 chr5 60430800 60431100 0.4325 92 chr5 60501300 60501600 0.3443 71 chr5 60570600 60572100 0.2159 92 chr5 61107900 61108500 0.3924 75 chr5 61260600 61260900 0.5033 45 chr5 61375800 61377000 0.151 61 chr5 62512500 62513100 0.2589 62 chr5 62598300 62598600 0.4366 36 chr5 62799300 62803500 0.1572 74 chr5 62817600 62823300 0 73 chr5 62868300 62868600 0.3029 58 chr5 63083100 63083700 0.3937 92 chr5 63277500 63277800 0.3056 28 chr5 63324900 63325200 0.4898 34 chr5 63408600 63408900 0.4673 33 chr5 63777000 63777300 0.5938 54 chr5 63942300 63943800 0.0725 81 chr5 64130700 64132800 0.2507 103 chr5 64267200 64267500 0.5675 62 chr5 64359000 64359300 0.4174 58 chr5 64466700 64470600 0 68 chr5 64477800 64481400 0 102 chr5 64710000 64714200 0.0028 77 chr5 65164500 65169600 0 86 chr5 65372400 65372700 0.3984 88 chr5 65374200 65374500 0.3984 88 chr5 65499900 65500500 0.2436 65 chr5 65732700 65733000 0.4129 88 chr5 65940000 65940300 0.6204 81 chr5 66258600 66261000 0.2975 75 chr5 66751800 66753900 0.074 83 chr5 67250100 67252200 0.3054 58 chr5 67539900 67540200 0.4185 54 chr5 67737000 67737300 0.3446 75 chr5 67740300 67740600 0.2556 86 chr5 67742100 67742400 0.2556 86 chr5 67820400 67820700 0.4694 25 chr5 67821900 67823400 0.1797 79 chr5 67890900 67891200 0.081 76 chr5 67892400 67894800 0.081 76 chr5 68007900 68009700 0.0167 63 chr5 68262600 68263200 0.4586 45 chr5 69223500 69223800 0.5149 95 chr5 69457200 69457500 0.4509 82 chr5 69475500 69476100 0.4096 61 chr5 69480300 69480900 0.3663 48 chr5 69534000 69548400 0 62 chr5 69550500 69554400 0 62 chr5 69555900 69558900 0 76 chr5 69560400 69561600 0 388 chr5 69562800 69632700 0 388 chr5 69634200 69791400 0 388 chr5 69792600 70028700 0 388 chr5 70029900 70046400 0 388 chr5 70048800 70442400 0 141 chr5 70443900 71008800 0 336 chr5 71015400 71054100 0 86 chr5 71055300 71077800 0 89 chr5 71079600 71095800 0 89 chr5 71097000 71103300 0 421 chr5 71104500 71364300 0 421 chr5 71367900 71368200 0.2164 69 chr5 71390700 71391000 0.4425 59 chr5 71398200 71398500 0.2063 66 chr5 71402100 71402400 0.3993 54 chr5 71524800 71525100 0.3382 75 chr5 71604600 71605200 0.0968 73 chr5 71606400 71609700 0.0968 73 chr5 71851800 71853600 0.0451 60 chr5 72484200 72484500 0.5203 44 chr5 72532200 72532500 0.5721 68 chr5 73048800 73049100 0.5449 34 chr5 73644000 73644300 0.4455 81 chr5 73875300 73877700 0.205 102 chr5 74702100 74702400 0.3497 68 chr5 74711100 74711400 0.3136 74 chr5 75606000 75606600 0.0197 76 chr5 75642300 75648000 0.0048 109 chr5 75700500 75701400 0.1621 67 chr5 75819300 75819600 0.529 79 chr5 75882900 75883500 0.2255 76 chr5 75897600 75897900 0.6499 111 chr5 75954900 75956400 0.3788 81 chr5 76121400 76121700 0.3495 66 chr5 76170000 76173000 0.0479 85 chr5 76233000 76233600 0.1999 102 chr5 76360200 76360800 0.2775 92 chr5 76362000 76362300 0.4442 107 chr5 76983900 76984500 0.3242 63 chr5 77042100 77044200 0.2174 65 chr5 77386800 77387100 0.5082 34 chr5 77477700 77478000 0.4153 70 chr5 77612700 77613000 0.4391 62 chr5 77614200 77614500 0.4391 62 chr5 77794500 77795100 0.071 65 chr5 78278400 78278700 0.4656 27 chr5 78452400 78452700 0.3865 73 chr5 78455100 78456300 0.2099 56 chr5 78469800 78470100 0.4604 78 chr5 78582300 78583800 0.2134 88 chr5 78619800 78620400 0.0901 46 chr5 78807900 78808200 0.662 39 chr5 78867900 78870300 0.344 63 chr5 78871500 78872700 0.344 63 chr5 78981000 78982200 0.2902 53 chr5 79096500 79098600 0.1367 79 chr5 79779000 79784700 0 108 chr5 79907100 79907400 0.2717 48 chr5 80626200 80628600 0.1747 67 chr5 80692800 80693400 0.3621 47 chr5 80743500 80743800 0.3094 34 chr5 81033000 81033600 0.0579 59 chr5 81054300 81054900 0.1548 81 chr5 81197100 81197400 0.5101 60 chr5 81406200 81406500 0.3282 37 chr5 81455400 81455700 0.4006 24 chr5 81596100 81597000 0.0147 72 chr5 81616200 81621900 0 87 chr5 82047900 82048500 0.4526 67 chr5 82125900 82126800 0.0052 71 chr5 82134000 82134900 0 70 chr5 82139700 82141200 0.132 57 chr5 82369500 82371900 0.0023 77 chr5 82429800 82433100 0.0092 91 chr5 82504500 82506000 0.0797 89 chr5 82867200 82870500 0.2191 79 chr5 82937700 82938300 0.0262 50 chr5 83263500 83264100 0.3192 78 chr5 83316600 83320200 0 69 chr5 83458200 83461500 0.0807 97 chr5 83463300 83463600 0.0807 97 chr5 83610300 83610600 0.4909 21 chr5 83902500 83903400 0.2242 87 chr5 84176100 84176400 0.2734 213 chr5 84208500 84208800 0.5612 42 chr5 84319200 84319500 0.3647 42 chr5 84471600 84472200 0.4635 67 chr5 84652200 84652500 0.16 24 chr5 84659100 84659400 0.0984 25 chr5 85358700 85359600 0.0861 65 chr5 85638900 85639500 0.0641 60 chr5 85641000 85642500 0.3334 104 chr5 85662600 85663200 0.0491 80 chr5 86446200 86446500 0.4996 46 chr5 86510700 86516700 0.0083 94 chr5 86847900 86848200 0.4369 77 chr5 86921700 86922000 0.6558 12 chr5 87091200 87091800 0.0578 72 chr5 87470700 87471300 0.0274 51 chr5 88011300 88011600 0.4535 65 chr5 88055100 88057500 0.4544 64 chr5 88616400 88616700 0.4072 66 chr5 88736400 88736700 0.5388 48 chr5 88901100 88901700 0.548 45 chr5 88904100 88904400 0.1865 37 chr5 88913100 88913400 0.5437 60 chr5 89186100 89186700 0.4524 124 chr5 89624400 89624700 0.2673 56 chr5 89625900 89626200 0.4417 64 chr5 89737800 89738100 0.4893 128 chr5 90075000 90075900 0.1149 84 chr5 90077100 90079200 0.1149 84 chr5 90209700 90210300 0.4193 57 chr5 90211800 90213000 0.1132 82 chr5 90443100 90444600 0.0229 85 chr5 90564600 90564900 0.5598 38 chr5 90594900 90595500 0.4896 66 chr5 90663300 90666000 0.3252 70 chr5 90667200 90667500 0.3252 70 chr5 90818100 90820500 0.3672 91 chr5 90925800 90926100 0.1742 74 chr5 90928800 90929100 0.1742 74 chr5 91273500 91274700 0.2542 77 chr5 91278900 91279200 0.2109 20 chr5 92054700 92055000 0.3853 79 chr5 92184900 92185200 0.5353 29 chr5 92194800 92198100 0.0126 88 chr5 92299200 92301900 0.0818 109 chr5 92356800 92357100 0.5785 59 chr5 92892900 92893200 0.421 61 chr5 93137700 93138000 0.3421 83 chr5 93148800 93149100 0.1465 69 chr5 93213900 93218400 0.0468 93 chr5 93261900 93266400 0.0976 86 chr5 93341400 93341700 0.5514 37 chr5 93485700 93486300 0.2476 61 chr5 94580700 94581000 0.3546 59 chr5 94773900 94774200 0.2858 57 chr5 95061300 95061600 0.5442 39 chr5 95201400 95201700 0.4098 60 chr5 95210400 95210700 0.2313 78 chr5 95492400 95492700 0.0796 251 chr5 95829300 95829600 0.4404 51 chr5 95927400 95927700 0.5441 34 chr5 96007500 96008100 0.5042 54 chr5 96103500 96105300 0.0657 76 chr5 96106800 96107100 0.2258 61 chr5 96241800 96242100 0.2667 70 chr5 96400800 96401100 0.3246 69 chr5 96681300 96681600 0.6225 69 chr5 96732000 96732600 0.2159 48 chr5 97294200 97295400 0.3366 72 chr5 97382400 97382700 0.2503 66 chr5 97515900 97518600 0.1031 80 chr5 97524600 97524900 0.46 64 chr5 97632000 97632900 0.1585 71 chr5 97641900 97642800 0.3195 81 chr5 97810800 97812600 0.2236 75 chr5 97813800 97815600 0.2348 98 chr5 98138700 98139300 0.2448 67 chr5 98278200 98278500 0.2969 55 chr5 98508300 98508600 0.4117 48 chr5 98548200 98552400 0.0426 80 chr5 98704800 98705100 0.1931 55 chr5 98821800 98822100 0.4111 62 chr5 98851500 98851800 0.36 31 chr5 99249600 99249900 0.5469 57 chr5 99401700 99402300 0.0156 59 chr5 99409800 99412200 0.0368 67 chr5 99415500 99415800 0.1594 59 chr5 99417300 99417600 0.1594 59 chr5 99419100 99419400 0.5407 48 chr5 99423300 99424800 0 74 chr5 99426000 99430500 0 74 chr5 99432300 99433800 0 74 chr5 99455100 99455700 0.4905 92 chr5 99474600 99474900 0.3287 51 chr5 99481800 99482100 0.3163 67 chr5 99484200 99484800 0.1483 41 chr5 99489300 99489600 0.3591 67 chr5 99493200 99493500 0.1792 44 chr5 99495000 99496800 0.1979 59 chr5 99498000 99499800 0 67 chr5 99502200 99502500 0.531 61 chr5 99503700 99504000 0.4445 51 chr5 99517500 99521700 0.151 66 chr5 99523800 99525900 0.3486 97 chr5 99529800 99530700 0.3473 51 chr5 99533100 99533400 0.5387 43 chr5 99537300 99540000 0.0409 51 chr5 99576600 99578700 0.1045 66 chr5 99583800 99585000 0.1788 74 chr5 99690900 99692400 0.1197 74 chr5 99733500 99735600 0.0489 70 chr5 99829200 99829500 0.3099 56 chr5 99848700 99849000 0.4475 64 chr5 99855300 99855900 0.0088 84 chr5 99857100 99861900 0.0088 84 chr5 99896400 99898500 0.1137 62 chr5 100058100 100059300 0.0352 55 chr5 100062000 100062600 0.1254 98 chr5 100069800 100071300 0.2235 60 chr5 100075500 100076400 0.0021 87 chr5 100081500 100082100 0.4295 52 chr5 100085700 100086000 0.1287 67 chr5 100087800 100088100 0.1087 78 chr5 100090800 100091100 0.4534 67 chr5 100092900 100093200 0.2818 55 chr5 100100100 100100400 0.3377 54 chr5 100332600 100333500 0 71 chr5 100335000 100341900 0 71 chr5 100347900 100348200 0.0038 59 chr5 100349400 100350000 0.0038 59 chr5 100351800 100355400 0.0418 67 chr5 100359300 100359600 0.3365 62 chr5 100362900 100363800 0.0095 54 chr5 100375200 100376100 0.1989 77 chr5 100383600 100383900 0.1799 62 chr5 100386000 100386300 0.4734 91 chr5 100388700 100389300 0.1659 78 chr5 100391100 100392600 0.1659 78 chr5 100395300 100397400 0.0362 80 chr5 100423800 100424100 0.202 20 chr5 100587900 100588200 0.5243 37 chr5 101020200 101021400 0.4492 84 chr5 101058900 101059500 0.3789 73 chr5 101108700 101109000 0.5408 46 chr5 101110500 101110800 0.1996 63 chr5 101126700 101127000 0.1793 74 chr5 101181000 101181300 0.3345 71 chr5 101184000 101185800 0.3345 71 chr5 101290200 101290800 0.3109 67 chr5 101302800 101303700 0.1365 81 chr5 101923500 101924100 0.4007 50 chr5 102131400 102137400 0 82 chr5 102189600 102194400 0.0006 76 chr5 102207000 102207600 0.3457 71 chr5 102675600 102675900 0.1402 77 chr5 102683700 102684900 0.1998 77 chr5 103048800 103052700 0.0678 58 chr5 103695000 103695300 0.5114 41 chr5 103726500 103726800 0.6139 50 chr5 103998300 103999200 0.1605 85 chr5 104074500 104078100 0.1363 97 chr5 104079300 104079600 0.1363 97 chr5 104357700 104360700 0.0252 73 chr5 104447100 104448900 0.0007 90 chr5 104450700 104451300 0.1225 57 chr5 104518500 104524500 0 98 chr5 104719500 104719800 0.285 71 chr5 104721900 104722800 0.285 71 chr5 105053100 105053400 0.6699 56 chr5 105166500 105166800 0.5108 37 chr5 105255300 105255600 0.2717 53 chr5 105464700 105465000 0.2525 73 chr5 105513300 105515400 0.1262 79 chr5 105517200 105518700 0.0381 95 chr5 106148100 106149300 0 87 chr5 106388700 106389000 0.557 21 chr5 106427100 106428300 0.2163 66 chr5 106535400 106535700 0.5688 88 chr5 106564200 106564500 0.3666 14 chr5 106626300 106626600 0.4177 33 chr5 106695600 106696500 0.2534 76 chr5 106714500 106715100 0.4371 68 chr5 106717200 106717500 0.5191 64 chr5 106771500 106771800 0.3795 58 chr5 106902600 106902900 0.1538 82 chr5 108558600 108558900 0.2377 76 chr5 109013400 109014300 0.4712 73 chr5 109259400 109265400 0 95 chr5 109341300 109343100 0.2965 61 chr5 109353900 109354200 0.6058 27 chr5 109462500 109462800 0.3592 86 chr5 109532100 109532400 0.2858 38 chr5 110172600 110172900 0.1841 70 chr5 110597400 110597700 0.3791 58 chr5 110655300 110655600 0.157 55 chr5 110776500 110776800 0.3954 72 chr5 110885400 110885700 0.529 59 chr5 110990100 110990400 0.1583 44 chr5 111085500 111086100 0.495 57 chr5 111088200 111089100 0.1981 63 chr5 111302400 111308100 0.0015 156 chr5 111355800 111356100 0.3734 76 chr5 111576000 111577200 0.4162 70 chr5 111885000 111885300 0.4208 65 chr5 111886500 111886800 0.4208 65 chr5 112133400 112134900 0.345 81 chr5 113106000 113106300 0.597 47 chr5 113491800 113492100 0.4453 73 chr5 113545800 113546100 0.5017 36 chr5 113853900 113854200 0.4055 78 chr5 114230400 114231600 0.0085 59 chr5 114357300 114357900 0.2952 65 chr5 114641700 114642000 0.1743 92 chr5 114675300 114675600 0.3768 68 chr5 114944400 114944700 0.4678 30 chr5 115061100 115061400 0.2253 56 chr5 115410600 115413300 0.1216 71 chr5 115421100 115422000 0.1101 67 chr5 116149500 116151000 0.3507 66 chr5 116252100 116253900 0.1031 79 chr5 116558400 116558700 0.364 27 chr5 116821200 116821800 0.3569 85 chr5 116922300 116922600 0.251 45 chr5 117339600 117341100 0.2058 72 chr5 117342600 117342900 0.3139 103 chr5 117358800 117359100 0.4231 46 chr5 117491700 117492300 0.1766 72 chr5 117528000 117529500 0.2697 70 chr5 117531300 117531600 0.2697 70 chr5 117541800 117542400 0.5861 34 chr5 117543600 117543900 0.1526 59 chr5 117851700 117852000 0.6027 50 chr5 117908100 117908400 0.1311 40 chr5 117931500 117931800 0.2104 61 chr5 118046100 118046400 0.0367 25 chr5 118177500 118178100 0.4103 58 chr5 118388400 118388700 0.3759 69 chr5 118495200 118495500 0.3771 58 chr5 118542000 118542600 0.1264 96 chr5 118991400 118991700 0.5965 45 chr5 119295900 119296200 0.3483 59 chr5 119605200 119605500 0.3012 52 chr5 119679600 119679900 0.6697 48 chr5 119685000 119690400 0 74 chr5 119778600 119779800 0.427 83 chr5 120179100 120179400 0.5796 96 chr5 120195000 120195600 0.1535 77 chr5 120281400 120281700 0.2431 71 chr5 120311400 120312000 0.062 63 chr5 120666600 120666900 0.2673 85 chr5 121411800 121412100 0.0899 83 chr5 121419600 121419900 0.4252 42 chr5 121951800 121953000 0.0038 77 chr5 121996200 121997100 0.0444 79 chr5 122240400 122244900 0.0007 116 chr5 122379000 122381700 0.07 76 chr5 122510400 122513400 0.1955 76 chr5 122627700 122628000 0.5424 35 chr5 122911500 122912400 0.2367 58 chr5 122914500 122914800 0.2874 66 chr5 122938800 122939100 0.6504 44 chr5 123236700 123238800 0 58 chr5 123240900 123241200 0.2602 62 chr5 123931500 123932100 0.5212 77 chr5 123935100 123935400 0.4269 70 chr5 124017600 124017900 0.4374 61 chr5 125028000 125028600 0.5098 61 chr5 125359200 125364600 0.0051 87 chr5 125616000 125616600 0.0098 187 chr5 125676300 125676900 0.1382 77 chr5 125920200 125920500 0.4161 64 chr5 125922300 125922600 0.5344 61 chr5 125993400 125993700 0.5232 39 chr5 126163800 126164400 0.2845 17 chr5 126528600 126529500 0.2762 89 chr5 126738300 126738600 0.5055 81 chr5 126891300 126892500 0.2345 79 chr5 126893700 126894300 0.0887 71 chr5 126904800 126907800 0.055 79 chr5 127103700 127104000 0.2688 51 chr5 127542600 127542900 0.3382 69 chr5 127734900 127737000 0.1571 70 chr5 127738200 127738500 0.1571 70 chr5 127747800 127749000 0.0279 80 chr5 127750500 127751100 0.0279 80 chr5 127878900 127879800 0.02 69 chr5 128294400 128295900 0.0913 83 chr5 128605200 128607300 0.1948 123 chr5 128820600 128820900 0.32 60 chr5 129313200 129313500 0.1615 56 chr5 129550200 129550500 0.1838 30 chr5 129578100 129578400 0.1812 61 chr5 129897000 129897300 0.5016 55 chr5 130265100 130266900 0.1663 107 chr5 130597200 130597500 0.6509 24 chr5 130733400 130734000 0.0187 92 chr5 130735200 130737900 0.0187 92 chr5 130753200 130754400 0.3745 69 chr5 130872900 130873200 0.4026 67 chr5 131073300 131074200 0.1495 64 chr5 131308500 131309700 0.4447 88 chr5 131515800 131516100 0.4864 75 chr5 131778600 131779200 0.2606 60 chr5 131876400 131876700 0.3036 68 chr5 131888100 131888400 0.4068 53 chr5 132514200 132519900 0 81 chr5 133108800 133109700 0.1967 56 chr5 133133700 133134000 0.4928 62 chr5 133183800 133185300 0.4167 71 chr5 133583400 133589100 0 91 chr5 133626000 133626300 0.2195 11 chr5 134557500 134558400 0.0044 56 chr5 134881200 134881800 0.0445 71 chr5 135982800 135983700 0.1419 72 chr5 136411200 136411500 0.2184 55 chr5 136782900 136784700 0.276 78 chr5 136787400 136788000 0.276 78 chr5 137044800 137050500 0 94 chr5 137160600 137160900 0.6606 24 chr5 137319600 137319900 0.5785 61 chr5 137338500 137338800 0.3687 63 chr5 137499900 137500500 0.2954 93 chr5 137686800 137688000 0.4256 97 chr5 137972100 137972400 0.2989 74 chr5 137973600 137974200 0.2989 74 chr5 138519900 138520200 0.2104 49 chr5 138777000 138777600 0.3199 151 chr5 138811200 138811500 0.6095 39 chr5 139005600 139011300 0.0097 90 chr5 139083300 139084800 0 75 chr5 140517000 140517900 0.2297 76 chr5 140592600 140593200 0.2565 63 chr5 140835000 140835300 0.147 75 chr5 140848800 140849400 0.0917 68 chr5 141106800 141107100 0.2314 45 chr5 141178200 141178500 0.4828 48 chr5 141183900 141184200 0.4739 37 chr5 141214200 141214500 0.2799 54 chr5 141229500 141229800 0.3882 70 chr5 141387900 141388200 0.1986 59 chr5 141398100 141398400 0.3258 72 chr5 142041600 142042200 0.0436 78 chr5 142043400 142044300 0.0436 78 chr5 142074900 142077000 0 61 chr5 143856000 143856300 0.4094 74 chr5 144051000 144051300 0.5567 54 chr5 144053100 144053400 0.5293 78 chr5 144069900 144071400 0.1212 53 chr5 144551400 144553500 0.0549 63 chr5 144713400 144717600 0.0195 87 chr5 144743400 144743700 0.5014 48 chr5 144891000 144892200 0.106 72 chr5 144996600 144996900 0.4064 54 chr5 145149900 145152900 0 81 chr5 145173000 145173300 0.2887 84 chr5 145183200 145183800 0 20 chr5 145336200 145336500 0.3249 57 chr5 145372800 145373100 0.0903 44 chr5 145419300 145421100 0.0792 70 chr5 145423500 145423800 0.0792 70 chr5 145447500 145447800 0.237 72 chr5 145486800 145487100 0.2997 49 chr5 146609400 146615400 0 80 chr5 146678400 146680200 0.0167 77 chr5 147011700 147012000 0.0855 71 chr5 147013200 147014400 0.0855 71 chr5 147477600 147477900 0.45 52 chr5 147716100 147720600 0.0878 75 chr5 147941100 147942300 0.135 89 chr5 147943800 147945900 0.135 89 chr5 147958500 147960900 0.0329 73 chr5 148022400 148024200 0.0146 79 chr5 148082700 148083000 0.6115 38 chr5 148143900 148144200 0.3769 56 chr5 148233000 148234800 0.0872 45 chr5 148252200 148254000 0 74 chr5 148327500 148327800 0.4138 82 chr5 148611000 148613400 0.1717 72 chr5 148944900 148947900 0.3132 79 chr5 149655000 149655600 0.4306 55 chr5 150366600 150366900 0.4176 28 chr5 150747600 150747900 0.4044 71 chr5 150929100 150929400 0.5466 37 chr5 150968100 150968400 0.3648 71 chr5 152076900 152082900 0 80 chr5 152207700 152213100 0.0019 81 chr5 152323500 152323800 0.5505 46 chr5 152340300 152346000 0 99 chr5 152479200 152479500 0.4252 71 chr5 152615100 152616000 0.1916 71 chr5 152654700 152655300 0.3696 74 chr5 152657400 152657700 0.3056 64 chr5 152715600 152715900 0.4017 52 chr5 152742300 152744100 0.1046 58 chr5 152746500 152746800 0.3221 67 chr5 152764800 152767500 0.2943 86 chr5 152816100 152816400 0.4634 50 chr5 152886000 152892300 0 105 chr5 152939700 152940600 0.0218 76 chr5 153036900 153037200 0.1133 78 chr5 153071400 153075900 0 84 chr5 153326400 153327600 0.4096 44 chr5 153728400 153728700 0.2326 62 chr5 154556100 154556400 0.4171 35 chr5 154617000 154617300 0.4744 57 chr5 155161200 155161500 0.3062 58 chr5 155170500 155171400 0.0979 73 chr5 155612100 155612400 0.0378 47 chr5 155615100 155615700 0.1826 61 chr5 155660100 155660700 0.0799 72 chr5 156062100 156067800 0 82 chr5 156657600 156666900 0 114 chr5 157085100 157085400 0.3835 42 chr5 157408200 157408500 0.5648 31 chr5 157437000 157438800 0.0034 85 chr5 157692000 157692300 0.422 61 chr5 158183700 158184000 0.2798 78 chr5 158259900 158260200 0.634 59 chr5 159036300 159037800 0.0043 73 chr5 159165300 159165600 0.5654 45 chr5 159500400 159500700 0.3608 73 chr5 160498500 160498800 0.4045 68 chr5 160596300 160596600 0.3908 96 chr5 160709700 160715700 0 85 chr5 160874700 160876200 0.0064 75 chr5 160877400 160879500 0.0064 75 chr5 161004300 161004600 0.3272 25 chr5 161072700 161073600 0.1966 100 chr5 161075100 161075700 0.1966 100 chr5 161216100 161216400 0.4213 45 chr5 161607600 161607900 0.1186 65 chr5 161609700 161610600 0.1894 71 chr5 161712000 161712600 0.0739 126 chr5 162031500 162032100 0.3071 67 chr5 162290700 162291300 0.1964 24 chr5 162316500 162316800 0.5965 83 chr5 162736800 162737100 0.2078 74 chr5 162741000 162741300 0.5759 45 chr5 162789900 162790200 0.3626 91 chr5 162811800 162812100 0.6279 71 chr5 162850800 162851100 0.3747 69 chr5 162906000 162906600 0.0231 57 chr5 163059900 163060200 0.0102 41 chr5 163131300 163131600 0.6565 32 chr5 163683600 163683900 0.5223 64 chr5 164328900 164329200 0.654 11 chr5 164391600 164391900 0.3789 40 chr5 164443200 164443500 0.3474 42 chr5 164889000 164889300 0.3677 15 chr5 165800700 165801300 0.4669 34 chr5 166141200 166147200 0.0086 111 chr5 166420800 166421400 0.0059 89 chr5 166966800 166972800 0 89 chr5 167105700 167106000 0.5107 34 chr5 167350800 167351100 0.6227 23 chr5 167859000 167861100 0.1111 76 chr5 168144900 168146100 0.0537 81 chr5 168541800 168542100 0.4082 58 chr5 168573900 168574200 0.5791 66 chr5 168642600 168643200 0.0965 29 chr5 168717000 168717300 0.0701 70 chr5 168741600 168742800 0.1263 69 chr5 169508100 169508400 0.3938 82 chr5 169582500 169582800 0.6842 54 chr5 169665000 169665300 0.092 20 chr5 169834200 169834800 0.4062 60 chr5 169997400 169997700 0.4387 65 chr5 170004600 170004900 0.3013 53 chr5 170214900 170215500 0.4207 102 chr5 170240100 170240400 0.1802 72 chr5 170241900 170243400 0.1802 72 chr5 170858400 170858700 0.6468 69 chr5 171059700 171062100 0.0373 84 chr5 171084300 171087900 0 84 chr5 171402300 171404700 0.12 56 chr5 171941400 171941700 0.4581 61 chr5 173281500 173281800 0.4987 55 chr5 173402700 173408700 0 87 chr5 173462700 173463000 0.124 37 chr5 173546700 173547000 0.5702 21 chr5 174018600 174019800 0.1473 88 chr5 174117900 174118200 0.6045 46 chr5 174477000 174478200 0.4521 60 chr5 174539700 174540000 0.2217 85 chr5 175134600 175134900 0.3338 33 chr5 175137600 175138500 0.071 58 chr5 175400700 175403400 0.0277 147 chr5 175720200 175722300 0.3443 75 chr5 175905900 175907400 0.2494 73 chr5 175909800 175910100 0.3073 86 chr5 175911300 175911900 0.3073 86 chr5 175913700 175914000 0.3073 86 chr5 175917600 175918800 0.0621 75 chr5 175939500 175939800 0.5163 89 chr5 175941300 175941600 0.1872 69 chr5 175943100 175944300 0.1872 69 chr5 175945500 175949700 0 99 chr5 175951500 175951800 0 99 chr5 175953000 175958400 0 99 chr5 175962600 175965000 0.1657 59 chr5 175967100 175975800 0 72 chr5 175977000 176001900 0 87 chr5 176007600 176007900 0.3453 68 chr5 176009700 176010300 0.1935 80 chr5 176013600 176022000 0 113 chr5 176023200 176034600 0 113 chr5 176037900 176038200 0.4591 39 chr5 176042400 176043000 0.3826 61 chr5 176044800 176048400 0.0065 76 chr5 176051100 176051400 0.3243 58 chr5 176052900 176054400 0.1533 80 chr5 176057400 176057700 0.0011 142 chr5 176058900 176064300 0.0011 142 chr5 176065800 176066100 0.0076 65 chr5 176067300 176068200 0.0076 65 chr5 176069700 176070900 0.1269 82 chr5 176072700 176076300 0.1269 82 chr5 176079900 176080200 0.0073 69 chr5 176081700 176082600 0.0073 69 chr5 176084400 176098800 0 76 chr5 176101800 176103000 0 77 chr5 176104200 176107500 0 77 chr5 176109000 176115900 0 77 chr5 176117400 176118600 0 77 chr5 176123100 176123700 0.0613 64 chr5 176127300 176128500 0.2334 41 chr5 176196300 176196900 0.1025 76 chr5 176207400 176208300 0.3689 52 chr5 176215200 176216400 0.0348 68 chr5 176224200 176224500 0.2259 68 chr5 176226000 176228400 0.0034 74 chr5 176231700 176232000 0.1264 62 chr5 176238600 176241600 0 64 chr5 176243700 176244600 0.0114 62 chr5 176254500 176254800 0.5194 47 chr5 176266500 176268600 0.0347 63 chr5 176274000 176274300 0.2585 50 chr5 176276700 176278800 0.0284 67 chr5 176305200 176306700 0.447 70 chr5 176871000 176871600 0.1837 30 chr5 176960700 176963100 0.0085 60 chr5 177451500 177451800 0.2648 23 chr5 177461100 177461400 0.4897 50 chr5 177517800 177519000 0 39 chr5 177643800 177645900 0.0012 49 chr5 177647400 177647700 0.5558 56 chr5 177649200 177649500 0.4581 58 chr5 177666000 177666900 0.0268 69 chr5 177669000 177669600 0.2517 61 chr5 177670800 177673200 0.0097 68 chr5 177678600 177679200 0.2429 61 chr5 177682200 177684600 0 70 chr5 177686100 177686400 0.3084 70 chr5 177694200 177695400 0.0395 67 chr5 177703500 177704100 0.3231 72 chr5 177709800 177710100 0.2889 53 chr5 177714300 177714900 0.0171 62 chr5 177717900 177718500 0 108 chr5 177719700 177736200 0 108 chr5 177739200 177748800 0 91 chr5 177750300 177753000 0 91 chr5 177756300 177758400 0.2319 90 chr5 177760200 177763500 0.0034 81 chr5 177764700 177768900 0.0197 105 chr5 177770100 177770400 0.3873 82 chr5 177772200 177778200 0 102 chr5 177779400 177784800 0.0914 90 chr5 177788700 177789600 0.0914 90 chr5 177791100 177791400 0.3189 61 chr5 177795600 177799800 0.0056 72 chr5 177801000 177804600 0 89 chr5 177806100 177807600 0.47 50 chr5 177809100 177819300 0 108 chr5 177820500 177830700 0 108 chr5 177832500 177836100 0.0272 75 chr5 177843000 177846300 0.05 95 chr5 177847500 177847800 0.05 95 chr5 177850200 177852600 0.05 95 chr5 177853800 177866100 0 88 chr5 177867900 177871200 0 59 chr5 177872400 177881400 0 79 chr5 177885300 177892200 0 101 chr5 177894000 177902700 0 101 chr5 177903900 177906600 0 101 chr5 177909600 177909900 0.0199 20 chr5 177914100 177915000 0.054 19 chr5 177916800 177917100 0.4388 26 chr5 177920100 177921600 0.0381 57 chr5 177924300 177925500 0.3571 53 chr5 177927300 177929700 0.1378 73 chr5 177931200 177932400 0.2983 86 chr5 177942000 177942900 0.0066 59 chr5 177944100 177945000 0.0066 59 chr5 177948900 177949200 0.0846 44 chr5 177952500 177952800 0.4416 34 chr5 177961500 177962700 0.0048 250 chr5 177979200 177980400 0.3577 24 chr5 177999000 177999300 0.5391 54 chr5 178006200 178006800 0.1297 47 chr5 178009500 178011900 0.2683 63 chr5 178013100 178013700 0.0391 78 chr5 178014900 178023600 0.0038 75 chr5 178025400 178025700 0.2462 94 chr5 178027200 178027500 0.2462 94 chr5 178030200 178033500 0.0525 73 chr5 178034700 178036500 0.0798 79 chr5 178038000 178039200 0.0339 72 chr5 178045800 178046700 0.0563 61 chr5 178047900 178053300 0.0101 91 chr5 178095600 178096500 0.1855 23 chr5 178239600 178239900 0.489 47 chr5 178294200 178294500 0.5818 50 chr5 178395000 178396800 0 29 chr5 178448100 178448400 0.353 59 chr5 178518000 178519200 0.5519 68 chr5 178525200 178525800 0.0081 146 chr5 178728900 178729200 0.381 70 chr5 178860900 178861200 0.3817 56 chr5 178900500 178900800 0.1652 43 chr5 179103900 179104800 0.3016 67 chr5 179106000 179106600 0.4825 74 chr5 179245500 179245800 0.3822 47 chr5 179262900 179263200 0.6479 67 chr5 179313300 179313900 0.3369 67 chr5 179364300 179364600 0.6298 15 chr5 179447100 179448900 0 65 chr5 179501100 179503500 0.0016 77 chr5 179514300 179514600 0.3211 85 chr5 179516700 179517300 0.2135 58 chr5 179634000 179637000 0 83 chr5 179641800 179642100 0.1638 31 chr5 179644200 179644500 0.0847 55 chr5 179646300 179646900 0.0184 80 chr5 179655600 179658600 0 95 chr5 179871900 179872200 0.4062 54 chr5 180486000 180486300 0.1785 43 chr5 180534600 180534900 0.3238 53 chr5 180615600 180616200 0.3881 58 chr5 180617400 180618300 0.2608 41 chr5 180634800 180635700 0.428 91 chr5 180658500 180658800 0.4082 208 chr5 180903300 180907200 0.0677 89 chr5 180917100 180917400 0.5124 55 chr5 180948600 180948900 0.5238 58 chr5 181000500 181000800 0.4936 52 chr5 181004100 181004400 0.5043 57 chr5 181045800 181046400 0.5472 152 chr5 181088700 181091700 0 95 chr5 181095900 181098000 0 70 chr5 181101300 181104300 0 74 chr5 181113600 181113900 0.608 68 chr5 181160700 181161300 0.3683 42 chr5 181183200 181183500 0.246 58 chr5 181289700 181290300 0.5637 84 chr5 181293000 181356300 0 156 chr5 181357500 181478400 0 156 chr6 60000 147000 0 101 chr6 371100 372000 0.5177 391 chr6 424500 424800 0.4943 23 chr6 468900 469500 0.5828 222 chr6 519000 520800 0 53 chr6 601200 602400 0 84 chr6 639300 639600 0.6227 44 chr6 675600 677100 0.4435 54 chr6 712500 712800 0.3472 51 chr6 861900 863700 0 432 chr6 909300 910800 0 103 chr6 1141800 1142400 0.2636 118 chr6 1205400 1205700 0.6074 66 chr6 1234800 1235400 0.3159 74 chr6 1244100 1244400 0.5697 87 chr6 1318800 1320900 0 42 chr6 1429500 1429800 0.0582 77 chr6 1431900 1432500 0.0582 77 chr6 1441200 1441500 0.6184 39 chr6 1534500 1534800 0.4392 66 chr6 1897800 1898100 0.5311 111 chr6 1926900 1927500 0.4431 139 chr6 2417700 2423700 0 87 chr6 2801400 2801700 0.54 31 chr6 3063000 3063300 0.6455 29 chr6 3090900 3093900 0 52 chr6 3153900 3154500 0.1225 75 chr6 3222000 3222300 0.6679 75 chr6 3224700 3225300 0.0508 68 chr6 4050000 4050300 0.375 12 chr6 4193700 4194600 0.0713 65 chr6 4254600 4254900 0.3216 60 chr6 4329000 4333500 0.0691 73 chr6 4572900 4573200 0.1706 83 chr6 4809600 4809900 0.5785 51 chr6 4831800 4834800 0.281 97 chr6 5037000 5038200 0.1734 66 chr6 5135100 5135400 0.3886 12 chr6 5690400 5690700 0.4375 63 chr6 5835000 5835300 0.3507 68 chr6 5887500 5889000 0.2776 81 chr6 5890800 5891400 0.2776 81 chr6 6029100 6029400 0.5051 38 chr6 6068700 6069000 0.5777 34 chr6 6141600 6143700 0.1151 93 chr6 6186000 6189600 0.1821 86 chr6 6213300 6216900 0.0684 73 chr6 6261600 6262200 0.0069 196 chr6 6295500 6296100 0.2 93 chr6 6299100 6299400 0.2 93 chr6 6429000 6429300 0.3075 62 chr6 6443100 6443400 0.3832 75 chr6 6716100 6716400 0.5327 17 chr6 7272900 7273500 0.6786 60 chr6 7717200 7717500 0.1653 36 chr6 7856700 7857000 0.557 58 chr6 7943700 7944000 0.4184 65 chr6 8216700 8217300 0.0513 69 chr6 8254200 8254500 0.5875 24 chr6 8566500 8568000 0.1709 65 chr6 8770500 8775600 0 80 chr6 8827500 8828100 0.265 61 chr6 8962200 8963100 0.3459 69 chr6 9811800 9816300 0.0706 68 chr6 9966300 9966600 0.0997 82 chr6 9968100 9971100 0.0997 82 chr6 10786500 10787100 0.4314 53 chr6 10984500 10984800 0.4318 41 chr6 11014200 11014800 0.4428 60 chr6 11019600 11019900 0.1792 55 chr6 11444100 11444400 0.4124 37 chr6 11556000 11556300 0.6397 39 chr6 11617200 11617500 0.059 10 chr6 11624400 11624700 0.6029 74 chr6 11903100 11903400 0.5038 34 chr6 12550500 12550800 0.3832 89 chr6 12553500 12553800 0.2582 58 chr6 14298300 14298600 0.6714 52 chr6 14482200 14482800 0.3143 80 chr6 14484300 14485500 0.2088 86 chr6 15188400 15190500 0.2131 58 chr6 15725700 15726000 0.3612 67 chr6 15806400 15806700 0.1818 69 chr6 15983700 15984300 0.2923 46 chr6 16010700 16011300 0.1394 94 chr6 16013700 16014000 0.1394 94 chr6 16614900 16615200 0.4326 33 chr6 16860300 16862100 0 87 chr6 17434800 17435700 0.2116 72 chr6 18910800 18912900 0 74 chr6 19131000 19131300 0.4375 68 chr6 19155300 19155600 0.3991 33 chr6 19347300 19347600 0.018 23 chr6 19636800 19637100 0.5746 41 chr6 19765200 19770900 0 74 chr6 20101800 20102100 0.388 57 chr6 20244300 20244600 0.4454 78 chr6 20339400 20339700 0.5443 59 chr6 20614800 20616600 0.0346 67 chr6 20765100 20765400 0.3961 46 chr6 20959500 20959800 0.0644 850 chr6 21192000 21192300 0.2429 39 chr6 21364200 21364500 0.5219 76 chr6 21551700 21552000 0.6834 58 chr6 21797700 21798000 0.4127 86 chr6 21851400 21852300 0.5552 32 chr6 22176300 22180200 0.0258 87 chr6 22461600 22463100 0.189 86 chr6 22837200 22837500 0.6774 55 chr6 22869900 22870200 0.4892 64 chr6 22930200 22930500 0.1429 23 chr6 23062800 23063400 0.3947 52 chr6 23232900 23233500 0.1267 76 chr6 23234700 23235000 0.1267 76 chr6 23300100 23300400 0.2228 59 chr6 23685900 23686200 0.4709 33 chr6 23701800 23702100 0.3446 80 chr6 23798700 23799000 0.4995 55 chr6 23806500 23807100 0.3785 75 chr6 23809200 23809500 0.6373 68 chr6 23948400 23949300 0 25 chr6 24046500 24046800 0.2113 69 chr6 24085200 24085500 0.4237 54 chr6 24469200 24469800 0.1092 54 chr6 24676200 24676500 0.4093 79 chr6 24811800 24817800 0 88 chr6 25184100 25184400 0.5574 59 chr6 26368800 26369100 0.2617 64 chr6 26406000 26406600 0.466 66 chr6 26634300 26638200 0.0151 69 chr6 26667600 26667900 0.4934 71 chr6 26669100 26669400 0.3785 52 chr6 26671200 26738700 0 105 chr6 26746500 26747100 0.1105 46 chr6 26751600 26754000 0 48 chr6 26755500 26756100 0.1587 56 chr6 26757300 26757900 0.1587 56 chr6 26762700 26830500 0 83 chr6 26833800 26834100 0.1768 51 chr6 26838600 26839200 0.3167 56 chr6 26844000 26844300 0.0693 55 chr6 26861700 26862000 0.2978 58 chr6 26868900 26869500 0.2164 56 chr6 26876400 26876700 0.2134 57 chr6 26885100 26885400 0.0762 131 chr6 26894700 26895000 0.1943 82 chr6 26900400 26901000 0.3926 56 chr6 26919000 26919300 0.4836 45 chr6 26944800 26945100 0.4697 63 chr6 26947200 26947500 0.3853 32 chr6 26955300 26955600 0.5099 62 chr6 26961000 26961300 0.1588 44 chr6 26987100 26987400 0.3327 46 chr6 26999700 27000600 0.2605 74 chr6 27484200 27486300 0.1521 70 chr6 27826800 27827100 0.5472 73 chr6 27945000 27945600 0.18 87 chr6 28022100 28022400 0.3418 81 chr6 28026000 28026600 0.074 115 chr6 28626000 28627200 0.4186 85 chr6 29115300 29115900 0.1653 84 chr6 29122800 29124300 0.004 64 chr6 29194200 29195700 0.0054 59 chr6 29364600 29364900 0.4201 23 chr6 29717700 29720400 0 28 chr6 29847300 29847600 0.1708 19 chr6 29933400 29933700 0 21 chr6 30081300 30081900 0.387 81 chr6 30084300 30084600 0.387 81 chr6 30249600 30250500 0.1664 61 chr6 30706500 30706800 0.4962 82 chr6 31244100 31245300 0 45 chr6 31389300 31389600 0.3019 79 chr6 31453800 31456200 0.088 49 chr6 31486200 31486800 0.1163 71 chr6 31815900 31817400 0 72 chr6 31827900 31829700 0 75 chr6 31853400 31855200 0.1357 97 chr6 31980900 32005200 0 81 chr6 32007900 32037900 0 92 chr6 32041200 32045700 0 87 chr6 32410200 32410800 0.3233 45 chr6 32468100 32469600 0.3766 59 chr6 32530800 32531100 0.5147 38 chr6 32569200 32569500 0.6079 16 chr6 32572800 32573100 0.5469 22 chr6 32579700 32580300 0.0357 30 chr6 32595300 32596500 0.4329 31 chr6 32657400 32657700 0.3328 24 chr6 32709000 32709300 0.4735 34 chr6 33043800 33044400 0.3633 59 chr6 33059100 33059400 0.2635 29 chr6 33484200 33484800 0.0464 77 chr6 33525600 33525900 0.257 65 chr6 33810600 33810900 0.5015 66 chr6 34071300 34071600 0.627 68 chr6 34072800 34073100 0.6157 115 chr6 34209900 34210200 0.5802 45 chr6 34397100 34398300 0.0343 68 chr6 35136600 35137500 0.0616 30 chr6 35384400 35385600 0.1501 77 chr6 35827500 35828700 0.0077 71 chr6 38954400 38954700 0.4368 40 chr6 38963400 38964300 0 60 chr6 39455700 39460500 0 76 chr6 39677700 39678000 0.3453 38 chr6 40063800 40064100 0.4408 85 chr6 40245600 40245900 0.6349 48 chr6 40491600 40492200 0.4729 70 chr6 41128500 41129100 0.1673 94 chr6 41130300 41130900 0.1673 94 chr6 41436300 41436600 0.3564 28 chr6 41985600 41985900 0.1198 29 chr6 42210300 42210600 0.336 51 chr6 42286500 42287100 0.1004 72 chr6 42845100 42845400 0.5204 57 chr6 42887700 42888000 0.2938 56 chr6 43580100 43581600 0.348 75 chr6 44044500 44044800 0.5224 188 chr6 44181600 44182200 0.3613 81 chr6 44391000 44391300 0.6771 27 chr6 44401800 44402400 0.3517 62 chr6 44752500 44753100 0.1215 83 chr6 44757300 44757600 0.4849 62 chr6 44759100 44759400 0.3974 60 chr6 44871000 44876400 0 107 chr6 44887500 44887800 0.5606 63 chr6 44893500 44894100 0.2815 61 chr6 44901600 44901900 0.5436 56 chr6 45017100 45017400 0.4356 88 chr6 45063000 45068400 0.1079 82 chr6 45180000 45180600 0.3607 62 chr6 45670200 45674400 0.0291 96 chr6 46019400 46019700 0.5553 35 chr6 46142100 46142400 0.5229 42 chr6 46213800 46214400 0.0346 73 chr6 47050500 47051700 0.2321 73 chr6 47101800 47102100 0.3314 47 chr6 47505600 47506800 0.105 74 chr6 47758800 47759100 0.1871 34 chr6 47888700 47889300 0.1394 56 chr6 48364800 48368700 0.0464 81 chr6 48495300 48495900 0.298 50 chr6 48507900 48508500 0.4381 68 chr6 48738900 48742500 0.0812 107 chr6 48901200 48902100 0.0042 79 chr6 49391100 49392000 0.318 68 chr6 49765800 49766400 0.1187 92 chr6 50171400 50171700 0.6799 21 chr6 50484900 50485200 0.6171 45 chr6 50798400 50798700 0.6726 58 chr6 50893800 50895000 0.2071 67 chr6 51125700 51127500 0.2256 55 chr6 51333000 51333900 0.3368 66 chr6 51391500 51391800 0.4313 46 chr6 51652500 51652800 0.3169 35 chr6 51666900 51667800 0.3738 62 chr6 51669300 51669900 0.4221 59 chr6 51874800 51880800 0 94 chr6 51897600 51898500 0.2497 81 chr6 51981600 51982800 0.2871 76 chr6 52204500 52206300 0.1756 119 chr6 52756800 52757400 0.0548 61 chr6 52767000 52767300 0.5597 67 chr6 52771200 52771500 0.4924 68 chr6 52798200 52798800 0.1698 77 chr6 52807200 52807500 0.267 28 chr6 52866000 52866600 0.3886 49 chr6 52922700 52923600 0.4413 69 chr6 53400900 53401200 0.519 99 chr6 54838200 54839700 0.0611 79 chr6 54915600 54915900 0.5533 35 chr6 54963900 54964500 0.0537 82 chr6 54965700 54967500 0.0537 82 chr6 54999600 54999900 0.0547 18 chr6 55313700 55314000 0.4094 63 chr6 55365300 55367400 0.1145 83 chr6 55397100 55397400 0.5125 75 chr6 55543200 55543500 0.0161 132 chr6 55641900 55642200 0.1778 32 chr6 55647900 55649100 0.2939 60 chr6 55686900 55687200 0.3033 68 chr6 55909500 55909800 0.497 54 chr6 56114700 56115000 0.3573 86 chr6 56825100 56825400 0.175 70 chr6 56893500 56896200 0.0002 55 chr6 57046800 57048000 0 71 chr6 57090300 57091500 0 69 chr6 57349200 57349500 0.5084 43 chr6 57378900 57379500 0.2217 52 chr6 57387600 57387900 0.5673 59 chr6 57403800 57405600 0.1455 55 chr6 57509100 57509400 0.5884 62 chr6 57554100 57554400 0.2176 47 chr6 57556800 57557400 0.3493 62 chr6 57560100 57560400 0.6726 64 chr6 57565200 57565500 0.2315 53 chr6 57573900 57574800 0.4042 62 chr6 57630000 57630300 0.4505 38 chr6 57737700 57738000 0.3472 65 chr6 57773100 57773400 0.5627 66 chr6 57797100 57799500 0 52 chr6 57814800 57816300 0.3457 40 chr6 57819300 57822300 0.0498 62 chr6 57828600 57828900 0.307 58 chr6 57830400 57831600 0.2041 66 chr6 57835500 57835800 0.5767 56 chr6 57874500 57874800 0.5136 59 chr6 57876300 57876600 0.672 53 chr6 57880800 57881400 0.2247 55 chr6 57885600 57885900 0.2414 62 chr6 57909300 57910200 0.2349 47 chr6 57912300 57912600 0.5247 64 chr6 57917400 57918600 0.324 75 chr6 57939300 57939900 0.21 58 chr6 58014900 58015200 0.3159 58 chr6 58169400 58169700 0.5212 36 chr6 58182600 58182900 0.5105 53 chr6 58448100 58448400 0.5353 35 chr6 58449900 58453500 0 2483 chr6 58554000 59829900 0 4686 chr6 60230100 60231300 0.6339 429 chr6 60237600 60238500 0.5348 420 chr6 60240300 60241800 0.4873 537 chr6 60251100 60251400 0.4333 32 chr6 60280500 60281100 0.0624 42 chr6 60289200 60289500 0.488 60 chr6 60306300 60307200 0 85 chr6 60333000 60333300 0.6421 48 chr6 60426600 60426900 0.4676 58 chr6 60446700 60447000 0.1657 44 chr6 60449400 60450000 0.2641 59 chr6 60459000 60459300 0.1869 69 chr6 60463800 60464100 0.2461 46 chr6 60473100 60473400 0.436 50 chr6 60494700 60495000 0.4282 46 chr6 60510600 60510900 0.0481 60 chr6 60528900 60529200 0.4933 53 chr6 60533400 60534300 0 43 chr6 60618900 60619200 0.3708 124 chr6 60703800 60705000 0.1224 68 chr6 60756600 60756900 0.3114 53 chr6 60766500 60766800 0.4187 51 chr6 60804000 60804300 0.1391 68 chr6 60861300 60863400 0.0555 82 chr6 60936900 60937200 0.2629 52 chr6 61183500 61183800 0.651 20 chr6 61322700 61356900 0 78 chr6 61381500 61383000 0.578 121 chr6 61400700 61402200 0.6063 135 chr6 61406700 61407900 0.5859 162 chr6 61413600 61414500 0.6196 120 chr6 61425000 61473600 0 94 chr6 61480500 61493100 0 39 chr6 61662600 61662900 0.4442 77 chr6 61671900 61674000 0.1961 68 chr6 61720800 61722000 0.2323 63 chr6 61930500 61930800 0.5361 64 chr6 62062200 62064600 0.3536 81 chr6 62532900 62533200 0.2894 75 chr6 62827200 62827500 0.3804 42 chr6 63054600 63054900 0.4369 40 chr6 63408300 63408600 0.2112 75 chr6 63419700 63420000 0.4141 80 chr6 63473700 63474000 0.2366 40 chr6 64536900 64537200 0.5817 65 chr6 64636800 64637100 0.5774 27 chr6 64660200 64660500 0.4073 58 chr6 64704300 64704600 0.3782 41 chr6 64942200 64942500 0.1266 48 chr6 65140800 65141100 0.2518 152 chr6 65256600 65257500 0.0787 82 chr6 65302500 65305200 0.1183 78 chr6 65307600 65308500 0.1084 66 chr6 65312100 65312400 0.407 54 chr6 65314200 65314500 0.2137 54 chr6 65315700 65316000 0.322 62 chr6 65323200 65323500 0.5196 53 chr6 65550300 65552100 0 66 chr6 65619600 65619900 0.4827 67 chr6 65885700 65886000 0.5666 20 chr6 65938800 65939100 0.4834 31 chr6 66077700 66078300 0.0806 60 chr6 66525600 66525900 0.6028 41 chr6 66602700 66603600 0.1241 63 chr6 66864000 66864300 0.1548 48 chr6 67062000 67062300 0.3879 21 chr6 67156200 67156500 0.4485 40 chr6 67260300 67260600 0.4228 72 chr6 67685100 67685700 0.2376 52 chr6 67786800 67787100 0.3246 71 chr6 67871100 67871400 0.5584 67 chr6 68288700 68289300 0.2133 70 chr6 68432400 68433000 0.0257 62 chr6 68517900 68518200 0.0584 66 chr6 68532300 68532600 0.5845 32 chr6 68629500 68629800 0.6463 41 chr6 69367800 69368100 0.6332 57 chr6 69439800 69440100 0.4458 54 chr6 69441300 69441600 0.4458 54 chr6 69496500 69496800 0.3188 58 chr6 69499500 69499800 0.3741 64 chr6 69501000 69501300 0.3741 64 chr6 69516000 69521700 0.1506 102 chr6 69556500 69556800 0.2525 68 chr6 69745200 69745500 0.4958 69 chr6 70010700 70016400 0 93 chr6 70757100 70757400 0.4143 72 chr6 70767600 70767900 0.1926 61 chr6 70786200 70786500 0.1454 82 chr6 70935900 70936200 0.266 80 chr6 70938000 70938300 0.266 80 chr6 70948200 70948800 0.3506 48 chr6 71128500 71129400 0.1723 76 chr6 71141400 71143500 0.3211 75 chr6 71265600 71265900 0.3378 64 chr6 71318400 71318700 0.2483 69 chr6 71827200 71827800 0.1386 72 chr6 71861700 71862000 0.4996 45 chr6 72110400 72110700 0.2283 69 chr6 72500100 72500400 0.6142 48 chr6 72570900 72576000 0 96 chr6 72801300 72801600 0.1571 60 chr6 72809100 72809400 0.6079 44 chr6 72988800 72994500 0 94 chr6 73436400 73436700 0.0533 563 chr6 73517700 73518000 0.4605 71 chr6 73659900 73660200 0.5735 38 chr6 73661400 73661700 0.4656 60 chr6 73711500 73711800 0.2965 18 chr6 73836300 73836600 0.1342 78 chr6 73838100 73838400 0.1342 78 chr6 73839600 73840200 0.1342 78 chr6 73920300 73920900 0.1106 85 chr6 73959300 73959900 0.4036 77 chr6 74097900 74099700 0.1272 70 chr6 74155800 74157000 0 88 chr6 74208900 74209800 0.2002 86 chr6 74246700 74247600 0.1077 44 chr6 74486100 74486400 0.4049 75 chr6 74533500 74533800 0.627 43 chr6 74594100 74594700 0.4825 47 chr6 74724900 74725200 0.615 17 chr6 75095400 75095700 0.4335 73 chr6 75248100 75248400 0.0856 22 chr6 75441000 75441300 0.5964 45 chr6 76107900 76109700 0.0177 84 chr6 76193400 76193700 0.4922 89 chr6 76197000 76197300 0.4763 26 chr6 76746300 76746900 0 20 chr6 76891200 76891500 0.2002 56 chr6 76900500 76900800 0.3386 61 chr6 76964100 76964700 0.0584 63 chr6 76976700 76977300 0.0957 65 chr6 77043300 77044800 0.0338 73 chr6 77061300 77061600 0.3384 76 chr6 77083200 77083800 0.4062 77 chr6 77085000 77086500 0.4062 77 chr6 77157900 77158200 0.4027 41 chr6 77591100 77591400 0.0826 12 chr6 77696400 77696700 0.3892 71 chr6 77717100 77726100 0 120 chr6 77731200 77731500 0.3423 54 chr6 77917500 77918700 0.4039 76 chr6 77919900 77920200 0.4039 76 chr6 78128100 78128400 0.231 36 chr6 78543000 78543900 0.2075 84 chr6 78858900 78859500 0.0289 95 chr6 78976200 78977100 0.1046 69 chr6 79691700 79692000 0.4423 75 chr6 80493900 80494200 0.2994 57 chr6 80496000 80496300 0.581 44 chr6 80569800 80571600 0.0334 75 chr6 80796000 80796600 0.4895 79 chr6 80800800 80803800 0.0437 83 chr6 80824800 80825100 0.4002 72 chr6 80850300 80850600 0.4855 64 chr6 80916900 80920800 0 89 chr6 81435900 81436200 0.3323 88 chr6 81468000 81468300 0.53 34 chr6 81473400 81473700 0.3138 68 chr6 81641700 81642000 0.3585 44 chr6 81663000 81665400 0.1082 71 chr6 82092300 82092600 0.4262 85 chr6 82104300 82104600 0.5891 65 chr6 82389600 82390200 0.0308 64 chr6 82391700 82394700 0.0308 64 chr6 82451700 82452000 0.511 31 chr6 82560300 82561200 0.0628 87 chr6 82562400 82565400 0.3122 142 chr6 83318100 83319000 0.0844 70 chr6 83334300 83340000 0 75 chr6 83440500 83442300 0.3356 68 chr6 83797800 83798700 0.0641 86 chr6 83800200 83802600 0.0641 86 chr6 84243900 84244200 0.2091 79 chr6 84364800 84367800 0.3172 68 chr6 84603300 84603600 0.353 46 chr6 84608400 84609000 0 53 chr6 84610200 84614400 0 53 chr6 84628500 84630600 0.0817 87 chr6 84631800 84632400 0.4022 53 chr6 85316700 85317000 0.6006 35 chr6 85434600 85434900 0.5307 40 chr6 85985400 85986900 0 68 chr6 85998900 86005200 0 84 chr6 86021700 86023800 0.2561 70 chr6 86025000 86025300 0.2561 70 chr6 86052600 86053800 0.1047 90 chr6 86211900 86212500 0.3875 81 chr6 86225700 86226000 0.4899 67 chr6 86492400 86492700 0.4631 72 chr6 86507100 86507400 0.4506 31 chr6 86577300 86577600 0.486 59 chr6 86645700 86648700 0.0019 81 chr6 86667300 86667900 0.2147 60 chr6 86807700 86808900 0.1674 76 chr6 86810400 86811600 0.1674 76 chr6 86900100 86900400 0.603 49 chr6 86902500 86902800 0.2654 61 chr6 86925000 86925300 0.3368 83 chr6 86926500 86926800 0.3368 83 chr6 87009900 87010800 0.1965 67 chr6 87128700 87129000 0.6575 29 chr6 87239400 87239700 0.5969 94 chr6 87324300 87324600 0.4652 52 chr6 87326400 87327900 0.1709 92 chr6 87576300 87576600 0.3479 35 chr6 87680400 87680700 0.4697 117 chr6 87736800 87737100 0.6472 31 chr6 87750600 87751200 0.0526 66 chr6 88319400 88319700 0.3696 78 chr6 88337100 88337400 0.4756 97 chr6 88353300 88353600 0.2516 78 chr6 88356600 88356900 0.4527 71 chr6 88381800 88382400 0.0092 87 chr6 88411500 88412100 0.4345 56 chr6 88434900 88435200 0.4088 71 chr6 88448700 88449300 0.1695 53 chr6 88773000 88773300 0.3397 69 chr6 88946700 88949100 0.0183 94 chr6 89166300 89166600 0.4346 44 chr6 89225400 89231100 0 80 chr6 89295600 89295900 0.397 50 chr6 90528000 90528300 0.5647 42 chr6 91047600 91049400 0.1682 85 chr6 91051500 91051800 0.1682 85 chr6 91209300 91209600 0.35 61 chr6 91870500 91871100 0.2793 63 chr6 92098200 92098500 0.4395 41 chr6 92983500 92984400 0.2718 95 chr6 93632700 93634500 0.1458 86 chr6 93635700 93636600 0.1458 86 chr6 93865800 93871500 0.0015 112 chr6 94198200 94203900 0 71 chr6 94763100 94763400 0.4849 67 chr6 94829700 94830000 0.6194 57 chr6 94856400 94857000 0.4383 78 chr6 94911000 94911900 0.2748 65 chr6 95303100 95303400 0.4679 22 chr6 95363400 95363700 0.2452 50 chr6 95665200 95667600 0 57 chr6 95759100 95759400 0.6773 73 chr6 95760600 95763900 0.0022 88 chr6 95979900 95983800 0.053 109 chr6 96193200 96193500 0.6671 37 chr6 96655200 96655500 0.6907 38 chr6 97663800 97664100 0.6576 73 chr6 98083200 98083800 0.4835 48 chr6 98243400 98243700 0.4069 23 chr6 98245800 98246100 0.5824 43 chr6 98417100 98417700 0.0038 79 chr6 98418900 98422500 0.0038 79 chr6 98704500 98706900 0.2628 84 chr6 98866800 98868300 0.2128 60 chr6 99002400 99002700 0.5049 68 chr6 99142500 99142800 0.0614 55 chr6 99206400 99206700 0.3852 59 chr6 99483600 99483900 0.6364 23 chr6 99649500 99650100 0.13 76 chr6 99823800 99825900 0.0017 104 chr6 99827100 99829500 0.0017 104 chr6 100026600 100026900 0.5973 46 chr6 100071000 100071600 0.3962 76 chr6 100197600 100200600 0.0371 85 chr6 100201800 100202400 0.0371 85 chr6 100355400 100356000 0.1343 128 chr6 100357200 100360200 0.1343 128 chr6 100369200 100369500 0.3452 83 chr6 101148000 101148300 0.4814 24 chr6 101152800 101153100 0.2944 65 chr6 101154600 101154900 0.2944 65 chr6 101790600 101790900 0.5161 90 chr6 101863800 101864100 0.4616 65 chr6 102090000 102090300 0.2451 73 chr6 102171000 102171900 0.4361 88 chr6 102334500 102334800 0.2204 74 chr6 102463800 102464400 0.0748 49 chr6 102535500 102535800 0.3271 95 chr6 102609900 102610200 0.3557 66 chr6 102722700 102724500 0.1089 86 chr6 102753000 102753300 0.1523 56 chr6 102754800 102757500 0.0616 69 chr6 103192800 103193100 0.3945 86 chr6 103557900 103558200 0.2523 106 chr6 103589400 103589700 0.5455 53 chr6 103654800 103656300 0.0509 67 chr6 103710000 103714800 0.0353 85 chr6 104003400 104003700 0.6393 19 chr6 104093100 104093400 0.3449 61 chr6 104452800 104457300 0 98 chr6 104464200 104464500 0.6348 41 chr6 104489400 104495400 0 84 chr6 104738100 104738400 0.2623 86 chr6 104740800 104742300 0.2623 86 chr6 105120000 105120300 0.4577 11 chr6 105248400 105249300 0.2322 66 chr6 105683700 105684000 0.5037 66 chr6 105719100 105720900 0.2474 107 chr6 105823800 105824100 0.1556 17 chr6 105854400 105854700 0.241 82 chr6 106061100 106061400 0.5268 63 chr6 106401600 106402800 0.0801 70 chr6 106535700 106536000 0.5928 23 chr6 106720800 106721400 0.0561 63 chr6 106723200 106723500 0.1067 59 chr6 107464800 107465100 0.2622 92 chr6 107519100 107519400 0.3449 52 chr6 107520900 107521200 0.3358 68 chr6 107710200 107710500 0.6265 19 chr6 107782800 107783700 0.0725 50 chr6 107854800 107859900 0.0829 95 chr6 107887200 107887500 0.252 49 chr6 107953500 107953800 0.6958 46 chr6 108436200 108436500 0.68 117 chr6 108664500 108664800 0.2232 64 chr6 108681300 108681600 0.4826 68 chr6 108889800 108890100 0.6792 46 chr6 109046100 109047900 0.3149 93 chr6 109246200 109250700 0.0859 87 chr6 109621200 109621800 0.0213 67 chr6 109684500 109684800 0.6732 57 chr6 110155500 110158500 0 69 chr6 110230500 110232000 0.2864 43 chr6 111904200 111907500 0.0385 75 chr6 112033200 112033500 0.3596 110 chr6 112508400 112509000 0.0576 65 chr6 112533300 112533600 0.4436 72 chr6 112535400 112535700 0.3511 65 chr6 112629600 112629900 0.1788 59 chr6 112703700 112709700 0 104 chr6 112813800 112818900 0 70 chr6 112872300 112872900 0.0398 83 chr6 112914600 112919700 0.0019 94 chr6 113228100 113232300 0.0377 72 chr6 113531700 113532000 0.0703 86 chr6 113534700 113536800 0.0703 86 chr6 113549700 113550000 0.3919 68 chr6 113605800 113607600 0.0141 78 chr6 113815500 113815800 0.6289 47 chr6 114435000 114435300 0.4478 44 chr6 114721800 114723000 0 69 chr6 114724200 114726000 0 69 chr6 114801600 114802800 0.0396 63 chr6 114845700 114846000 0.3714 51 chr6 114970500 114972000 0.2625 96 chr6 114973800 114974100 0.5281 40 chr6 115010100 115012800 0.0367 60 chr6 115034400 115034700 0.2977 99 chr6 115085100 115085700 0.1162 62 chr6 115178100 115178400 0.2756 67 chr6 115179900 115181100 0.2756 67 chr6 115303500 115303800 0.5764 46 chr6 115578900 115580100 0.053 66 chr6 115960200 115965900 0 127 chr6 116640900 116641200 0.3298 44 chr6 116693700 116694000 0.3592 91 chr6 116818200 116819400 0.134 74 chr6 116820900 116822700 0.134 74 chr6 117092400 117093600 0.1095 85 chr6 117102300 117108000 0 69 chr6 117182700 117184200 0.339 105 chr6 117185700 117187500 0.3511 129 chr6 117246600 117250500 0 70 chr6 117707400 117707700 0.0996 55 chr6 117709200 117709500 0.4168 51 chr6 117924000 117924600 0.4658 88 chr6 117997800 117998400 0.2076 79 chr6 118002000 118002300 0.5756 69 chr6 118128000 118128300 0.2139 78 chr6 118646100 118646400 0.3011 2638 chr6 119275200 119275500 0.3657 24 chr6 120463500 120464100 0.5803 69 chr6 120520500 120520800 0.4846 66 chr6 120639000 120639300 0.2588 57 chr6 120641100 120642000 0.2588 57 chr6 120678600 120678900 0.4661 67 chr6 120690900 120694500 0.348 88 chr6 120727800 120728100 0.5425 82 chr6 120751800 120752400 0.5684 77 chr6 120823500 120823800 0.4 71 chr6 121162800 121168500 0 97 chr6 121566600 121566900 0.1904 77 chr6 121568100 121568700 0.1904 77 chr6 121623300 121623600 0.2771 122 chr6 122377500 122377800 0.5805 70 chr6 122540700 122541300 0.3359 79 chr6 122847900 122850000 0.1044 74 chr6 122889000 122889600 0.079 112 chr6 122934000 122934300 0.4747 60 chr6 123180600 123182100 0.0749 61 chr6 123444000 123446100 0.0321 80 chr6 123475200 123477600 0.0837 78 chr6 123760500 123760800 0.4938 43 chr6 124139100 124139400 0.3833 42 chr6 124165800 124167300 0.0637 92 chr6 124177800 124178100 0.1002 20 chr6 124347000 124347300 0.6725 95 chr6 124358700 124359000 0.3785 51 chr6 124708800 124709400 0.4508 79 chr6 124710600 124710900 0.4508 79 chr6 124727700 124728900 0.0543 74 chr6 124730400 124731300 0.0543 74 chr6 124807500 124807800 0.4396 41 chr6 124839900 124841700 0.0048 70 chr6 125288700 125289300 0.1746 219 chr6 125319000 125322000 0.0003 82 chr6 125387700 125389800 0 54 chr6 125702700 125703600 0.2278 96 chr6 126043200 126043500 0.5942 58 chr6 126622500 126622800 0.6577 32 chr6 127596000 127599000 0.1972 79 chr6 127617000 127618200 0.188 83 chr6 127930500 127930800 0.3889 65 chr6 128296800 128297100 0.5577 77 chr6 128668500 128669100 0.2237 55 chr6 128906100 128909700 0.0526 87 chr6 128922300 128923200 0.2843 75 chr6 128998500 129004500 0 86 chr6 129129600 129129900 0.3864 54 chr6 129167700 129172200 0.1454 90 chr6 129518700 129519000 0.3495 67 chr6 130116900 130117500 0.3897 63 chr6 131143800 131144400 0.1589 71 chr6 131541900 131542200 0.3551 45 chr6 131698200 131712000 0 101 chr6 131714100 131714700 0 101 chr6 131856600 131857500 0.2645 82 chr6 132006000 132006300 0.5514 136 chr6 133020900 133026600 0 93 chr6 133050300 133050600 0.4998 25 chr6 133145400 133146000 0.3696 101 chr6 133470000 133473000 0 67 chr6 133520100 133521900 0.0836 93 chr6 133650000 133653900 0.0038 83 chr6 133663800 133666200 0.0039 74 chr6 134132100 134132400 0.4446 48 chr6 134496300 134496600 0.5616 31 chr6 134659200 134660100 0.0764 65 chr6 135363900 135364800 0.3929 62 chr6 135510300 135511500 0.2161 83 chr6 135893100 135893400 0.6307 62 chr6 135980700 135981000 0.3688 62 chr6 136276200 136276500 0.4606 58 chr6 136815900 136816200 0.3639 70 chr6 136851000 136853100 0.0091 74 chr6 138049500 138049800 0.5712 78 chr6 138189900 138190200 0.2097 268 chr6 138626700 138627000 0.2681 38 chr6 138823500 138824100 0.3046 50 chr6 139557900 139558200 0.3661 34 chr6 139657800 139658100 0.5571 59 chr6 140652300 140652600 0.6249 34 chr6 140681100 140683200 0 58 chr6 140877900 140878200 0.1244 75 chr6 141567600 141571500 0.0207 128 chr6 141619200 141621900 0.0675 66 chr6 141748800 141750600 0.3321 70 chr6 141751800 141752100 0.3321 70 chr6 141796200 141796500 0.4707 43 chr6 141816000 141816300 0.3875 85 chr6 141817500 141819000 0.3875 85 chr6 141820200 141820500 0.3875 85 chr6 141918000 141921000 0.036 87 chr6 141922200 141922800 0.0347 61 chr6 141926700 141927900 0.0047 81 chr6 142422600 142424700 0.0632 79 chr6 142974600 142974900 0.5465 66 chr6 143213400 143213700 0.3971 347 chr6 143303700 143304600 0.3926 78 chr6 144433200 144433500 0.6594 53 chr6 145072500 145073700 0.1134 82 chr6 145503300 145505100 0.0346 68 chr6 145596900 145597200 0.3505 58 chr6 145663500 145667400 0.0236 80 chr6 145681200 145681800 0.2749 69 chr6 145719000 145719300 0.4293 62 chr6 145770000 145770600 0.019 65 chr6 145852500 145855500 0.1249 106 chr6 145983000 145983300 0.2994 70 chr6 146522100 146522700 0.2068 65 chr6 147287100 147287400 0.4359 28 chr6 147720900 147721200 0.1935 74 chr6 147795900 147796200 0.4016 65 chr6 147797400 147797700 0.4016 65 chr6 148160100 148160700 0.0671 65 chr6 148162800 148163100 0.4968 49 chr6 148738200 148738800 0 52 chr6 149177700 149178000 0.5531 28 chr6 149444100 149444400 0.5487 73 chr6 149944500 149945400 0.1911 78 chr6 149947200 149947500 0.3482 70 chr6 150019800 150020400 0.4355 58 chr6 150022200 150023100 0.075 59 chr6 150197700 150198300 0.4605 178 chr6 151685100 151685400 0.5932 28 chr6 151847400 151848300 0.1339 56 chr6 151931700 151933500 0.099 82 chr6 152251500 152251800 0.4679 53 chr6 152633700 152634000 0.2986 67 chr6 152709000 152712600 0 69 chr6 152987700 152989500 0.0146 55 chr6 153195900 153196200 0.4569 60 chr6 153397800 153398100 0.3835 72 chr6 153914400 153914700 0.467 93 chr6 154263300 154263600 0.395 31 chr6 154420500 154420800 0.4041 41 chr6 154524900 154525500 0.2254 83 chr6 154724100 154724400 0.5328 25 chr6 155731500 155731800 0.5409 61 chr6 156011100 156011400 0.2656 65 chr6 156034200 156039900 0 77 chr6 156178800 156179100 0.3188 44 chr6 156325200 156330600 0.013 69 chr6 156362100 156367200 0 95 chr6 156483000 156483300 0.3673 64 chr6 157147500 157147800 0.6884 87 chr6 157283700 157284000 0.3457 87 chr6 157310700 157312200 0.1232 1394 chr6 157314000 157314300 0.6693 775 chr6 157774200 157774500 0.5381 213 chr6 158127300 158127900 0 48 chr6 158238600 158241300 0.0125 60 chr6 158455200 158455500 0.6617 47 chr6 158705100 158705400 0.5758 42 chr6 159231000 159231300 0.4163 30 chr6 159402900 159403200 0.5318 98 chr6 159457500 159457800 0.3288 71 chr6 159547200 159549600 0.0104 67 chr6 159651900 159652500 0.3162 30 chr6 160091100 160092300 0.4626 65 chr6 160100700 160101000 0.1063 434 chr6 160125900 160126200 0.5778 76 chr6 160409100 160409700 0.1139 53 chr6 160611900 160647000 0 282 chr6 160679700 160683300 0.2399 74 chr6 160752900 160753200 0.4839 54 chr6 161646000 161646300 0.2316 48 chr6 161874000 161874300 0 114 chr6 161900400 161900700 0.1605 28 chr6 161982300 161983800 0 86 chr6 162074100 162074400 0.3143 11 chr6 162114000 162114600 0.4071 72 chr6 162339900 162340200 0.3262 53 chr6 162838800 162844200 0 108 chr6 162990000 162995400 0.0015 86 chr6 163329300 163329600 0.6651 98 chr6 163976400 163976700 0.4723 54 chr6 164076300 164076900 0.4418 71 chr6 164474100 164474700 0.4036 68 chr6 164723400 164723700 0.3412 28 chr6 164784000 164784300 0.3466 79 chr6 164797800 164798700 0.1733 86 chr6 164958000 164958300 0.4267 65 chr6 165123300 165123600 0.131 83 chr6 165303300 165306300 0 81 chr6 165370200 165370500 0.149 152 chr6 165749100 165749400 0.6816 113 chr6 166272600 166272900 0.6119 86 chr6 166396200 166396500 0.6981 50 chr6 166426200 166428900 0.0281 133 chr6 166517400 166517700 0.5337 51 chr6 166581900 166582200 0.6691 71 chr6 166585500 166586100 0.0225 56 chr6 166748700 166749300 0.3654 24 chr6 166783800 166784700 0.2166 57 chr6 166794000 166794300 0.4399 51 chr6 167084700 167085000 0.1878 88 chr6 167167800 167168400 0.5773 47 chr6 167170800 167171100 0.2234 87 chr6 167173500 167177100 0.0701 87 chr6 167181300 167183400 0.0968 71 chr6 167194200 167194500 0.6314 77 chr6 167196600 167196900 0.3992 69 chr6 167204400 167204700 0.1593 52 chr6 167208000 167208300 0.536 64 chr6 167266200 167266500 0.5025 72 chr6 167315700 167316000 0.2265 59 chr6 167319600 167319900 0.1408 48 chr6 167332500 167335200 0.084 94 chr6 167358000 167358600 0.108 45 chr6 167365500 167365800 0.4353 40 chr6 167372700 167373000 0.0005 78 chr6 167374200 167375100 0.0005 78 chr6 167376600 167376900 0.0005 78 chr6 167378100 167381400 0.1818 73 chr6 167383800 167390700 0.1303 64 chr6 167421900 167422200 0.545 11 chr6 167423700 167424000 0.1499 17 chr6 167433000 167434800 0.5244 108 chr6 167562300 167562600 0.3071 72 chr6 167732700 167733300 0.5119 77 chr6 167940300 167941800 0.1299 137 chr6 167977500 167977800 0.2755 60 chr6 168001800 168002100 0.6323 60 chr6 168168600 168168900 0.4691 89 chr6 168235200 168235800 0.459 60 chr6 168245700 168246300 0.2571 69 chr6 168316500 168318000 0 80 chr6 168357900 168358800 0.6074 54 chr6 168560700 168562200 0.0944 33 chr6 168571800 168573300 0.4135 55 chr6 168589800 168590100 0.5439 57 chr6 168592800 168594900 0.0205 105 chr6 168596100 168596400 0.6307 91 chr6 168653700 168655200 0.0073 72 chr6 168659400 168659700 0.6053 158 chr6 168693000 168693300 0.1718 55 chr6 168694500 168695100 0.2563 55 chr6 168705600 168705900 0.6687 70 chr6 168795900 168796200 0.5601 43 chr6 168840300 168840900 0.3667 159 chr6 168846900 168847800 0.1791 138 chr6 168850200 168850500 0.6107 61 chr6 168909600 168909900 0.6785 39 chr6 168931800 168932100 0.465 61 chr6 168942000 168942300 0.4958 50 chr6 168975300 168975600 0.3864 56 chr6 168976800 168978600 0.0725 74 chr6 168990900 168991800 0.4809 42 chr6 169024800 169025100 0.5631 29 chr6 169032900 169033200 0.1067 34 chr6 169127400 169128900 0.4327 82 chr6 169195800 169196100 0.5885 43 chr6 169372200 169372500 0.6228 56 chr6 169377000 169377600 0.2309 60 chr6 169425300 169425600 0.4766 28 chr6 169509300 169509600 0.4938 57 chr6 169781700 169782300 0.5726 71 chr6 169900500 169902000 0.3103 68 chr6 169987500 169988400 0.1783 62 chr6 170052600 170052900 0.6419 19 chr6 170064900 170065200 0.2219 28 chr6 170087400 170088000 0.5822 61 chr6 170114100 170114400 0.6754 132 chr6 170145900 170146500 0.1753 220 chr6 170190600 170191800 0.4364 48 chr6 170214900 170220900 0 115 chr6 170236800 170238000 0.5195 66 chr6 170246100 170246700 0.0675 49 chr6 170266800 170267700 0.2964 28 chr6 170344200 170344500 0.5751 52 chr6 170376900 170377800 0.3651 192 chr6 170394300 170394600 0.6285 75 chr6 170399400 170400000 0.635 298 chr6 170421600 170421900 0.6173 92 chr6 170466000 170467200 0.5596 103 chr6 170495100 170496900 0.4323 107 chr6 170612100 170626500 0 88 chr6 170627700 170710800 0 88 chr6 170712300 170736600 0 111 chr6 170738400 170745900 0 75 chr7 9900 34200 0 109 chr7 36300 37200 0.0115 95 chr7 38400 40500 0.2265 80 chr7 47400 49500 0.0555 77 chr7 69300 70200 0.4663 79 chr7 73200 75000 0.1026 55 chr7 77400 77700 0.6689 40 chr7 103200 104100 0.0292 49 chr7 129000 129300 0.5016 107 chr7 172800 173100 0.4245 44 chr7 177600 178200 0.4918 66 chr7 206400 207300 0.3256 145 chr7 215400 216000 0.2207 18 chr7 221400 222000 0 22 chr7 243000 243900 0.0643 59 chr7 257700 258000 0.6882 143 chr7 262800 264000 0.2947 77 chr7 297000 297300 0.5607 56 chr7 336600 336900 0.6997 45 chr7 355800 356100 0.5242 65 chr7 361500 361800 0.2079 68 chr7 393600 394200 0.3259 76 chr7 419400 420000 0.2812 33 chr7 457200 457500 0.6073 32 chr7 470400 471000 0.1143 12 chr7 478800 479100 0.2156 15 chr7 552000 552300 0.4445 97 chr7 566700 567000 0.4507 14 chr7 588600 588900 0.6952 64 chr7 608700 609000 0.2257 45 chr7 629700 630000 0.5801 33 chr7 636000 636600 0.1177 73 chr7 747900 748200 0.0804 29 chr7 847500 847800 0.4073 41 chr7 889800 890100 0.3444 21 chr7 905400 906600 0.4403 290 chr7 933600 934200 0.4899 34 chr7 942600 943800 0.5754 27 chr7 990000 990300 0.2444 18 chr7 1002900 1003200 0.671 19 chr7 1016100 1016400 0.4313 41 chr7 1031400 1031700 0.3394 49 chr7 1037100 1040100 0.0868 91 chr7 1067400 1067700 0.65 47 chr7 1069500 1070400 0.0781 70 chr7 1107900 1108200 0.1939 41 chr7 1116600 1117500 0.244 105 chr7 1145400 1148100 0 100 chr7 1156200 1156500 0.0433 20 chr7 1272000 1274100 0.0192 338 chr7 1319700 1320300 0.0851 55 chr7 1763700 1764000 0.5678 31 chr7 1861500 1861800 0.0133 56 chr7 1929600 1930500 0.264 75 chr7 1937700 1938000 0.0247 68 chr7 1990800 1991400 0 67 chr7 1996200 1996500 0.5415 91 chr7 2035200 2035800 0 71 chr7 2049900 2050200 0.659 57 chr7 2058000 2058600 0.4896 23 chr7 2101200 2101500 0.5719 54 chr7 2267400 2269200 0.3993 64 chr7 2278800 2279400 0.2426 57 chr7 2377500 2378100 0.4638 105 chr7 2533800 2534100 0.5637 59 chr7 2676900 2678400 0.5964 66 chr7 3127200 3127500 0.4916 70 chr7 3603000 3603300 0.6541 55 chr7 3708300 3708600 0.0944 61 chr7 3813600 3816300 0.1099 76 chr7 3963000 3963600 0.5222 58 chr7 3975900 3977400 0.0393 150 chr7 4263600 4264200 0.235 49 chr7 4313100 4313400 0.1439 35 chr7 4496100 4496400 0.4414 79 chr7 4545000 4545300 0.1479 110 chr7 4582500 4600200 0 89 chr7 5121000 5121600 0.171 60 chr7 5155800 5156700 0.0014 64 chr7 5160300 5160900 0.0059 64 chr7 5449200 5449500 0.2004 31 chr7 5548800 5549100 0.2418 40 chr7 5610900 5611200 0.6865 55 chr7 5807700 5808300 0.4205 77 chr7 5812500 5812800 0.5084 64 chr7 5847600 5848200 0.3923 69 chr7 5898600 5899200 0.0431 68 chr7 5900700 5901300 0.1358 44 chr7 5905200 5905500 0.4346 60 chr7 5913300 5914200 0 99 chr7 5915700 5926500 0 99 chr7 5929200 5942400 0 93 chr7 5945100 5976900 0 105 chr7 5979900 5980800 0.0055 65 chr7 5985900 5986200 0.4423 70 chr7 6738600 6738900 0.4267 72 chr7 6742200 6742500 0.0069 73 chr7 6744300 6745200 0.0069 73 chr7 6747600 6780300 0 118 chr7 6782400 6795900 0 118 chr7 6797700 6810000 0 118 chr7 6811200 6811500 0.271 30 chr7 6819600 6819900 0.4267 44 chr7 6823800 6824100 0.4298 63 chr7 6825300 6826200 0.1925 68 chr7 6974400 6974700 0.2423 79 chr7 7465500 7470900 0 87 chr7 7544400 7547100 0 79 chr7 8298900 8301600 0.0384 103 chr7 8303100 8304000 0.0384 103 chr7 8352000 8353800 0.0927 104 chr7 8726400 8726700 0.3069 49 chr7 8727900 8730300 0.3287 77 chr7 8858700 8859600 0.4689 70 chr7 9321900 9322200 0.444 31 chr7 9400200 9401100 0.0164 73 chr7 9402300 9402600 0.165 70 chr7 9427200 9428400 0.4596 70 chr7 9595200 9596400 0 40 chr7 9655800 9656100 0.6295 34 chr7 9738900 9740400 0.2178 58 chr7 9808500 9809400 0.0109 102 chr7 9990000 9990300 0.2772 80 chr7 10166700 10171500 0.0227 86 chr7 10464600 10466400 0.002 40 chr7 10566900 10567200 0.3312 68 chr7 10589400 10590300 0.3128 77 chr7 12182700 12183300 0.114 74 chr7 12242100 12242400 0.4704 26 chr7 12485100 12486000 0.0209 83 chr7 12499800 12500100 0.0403 76 chr7 12501600 12502500 0.0403 76 chr7 12527100 12527400 0.675 70 chr7 12972300 12972600 0.4492 43 chr7 13085700 13086000 0.0857 67 chr7 13103100 13103700 0.4323 54 chr7 13203000 13203300 0.4742 43 chr7 13272300 13272600 0.2344 76 chr7 13623600 13623900 0.5152 28 chr7 13630800 13631100 0.0632 45 chr7 13650000 13650300 0.3013 149 chr7 13767900 13770000 0.1829 59 chr7 13806900 13808700 0.404 77 chr7 14211300 14212200 0.0039 60 chr7 14281200 14282400 0.0461 96 chr7 14315100 14318400 0.0044 87 chr7 14649600 14652300 0.0571 63 chr7 14706000 14709900 0.0319 78 chr7 14843400 14843700 0.4838 55 chr7 15529800 15530400 0.0058 35 chr7 15549000 15552900 0.2687 92 chr7 15573000 15573300 0.4365 66 chr7 15942300 15942600 0.2446 177 chr7 15944100 15946200 0.2446 177 chr7 16197900 16198500 0.1405 78 chr7 16217100 16220700 0.1044 77 chr7 16789200 16789800 0 58 chr7 17017500 17018700 0.2141 76 chr7 18007200 18007500 0.346 56 chr7 18105000 18105600 0.2406 47 chr7 18135300 18137400 0.293 85 chr7 18984900 18986700 0.0005 84 chr7 19190100 19191300 0.2928 64 chr7 19193100 19193400 0.4356 63 chr7 19197900 19198200 0.3962 90 chr7 19458900 19460100 0.105 79 chr7 19494900 19495200 0.5627 31 chr7 19683600 19683900 0.1765 79 chr7 19685700 19687200 0.2136 71 chr7 20002800 20003100 0.2783 72 chr7 20073300 20073600 0.4894 63 chr7 20538300 20538900 0.4337 67 chr7 20667900 20669700 0.3009 95 chr7 22462500 22464000 0.378 65 chr7 22493700 22494300 0.3483 42 chr7 22511400 22511700 0.6515 64 chr7 22529700 22534200 0 81 chr7 22644600 22644900 0.5785 72 chr7 22801500 22801800 0.1765 85 chr7 23036400 23042700 0.0119 104 chr7 23045400 23045700 0.3631 83 chr7 23323200 23325000 0.0826 105 chr7 23326500 23326800 0.3595 59 chr7 23636400 23638500 0.2861 42 chr7 23952600 23953200 0.2821 63 chr7 23996700 23997000 0.0065 35 chr7 24001500 24005100 0 61 chr7 24102000 24102300 0.4381 70 chr7 24355800 24356100 0.1198 36 chr7 24545700 24546000 0.5147 29 chr7 24584100 24584700 0.2864 109 chr7 24638400 24638700 0.2392 43 chr7 24675600 24675900 0.2302 21 chr7 24677400 24677700 0.437 60 chr7 24897300 24897600 0.5925 56 chr7 25005000 25005300 0 12 chr7 25017900 25020000 0.0675 38 chr7 25041900 25047900 0 168 chr7 25355100 25355400 0.6261 63 chr7 25450800 25451100 0.4988 79 chr7 25601700 25602300 0.0765 86 chr7 25604700 25608900 0.0005 98 chr7 25744500 25745100 0.085 99 chr7 25746300 25746600 0.085 99 chr7 25747800 25749600 0.085 99 chr7 25925100 25925700 0.3863 69 chr7 26176500 26176800 0.4793 63 chr7 26262300 26262900 0.1467 64 chr7 26283900 26284200 0.3128 12 chr7 27045900 27046200 0.6675 42 chr7 27308700 27309000 0.4029 32 chr7 27456600 27456900 0.5118 62 chr7 27503100 27503400 0.3128 60 chr7 27743700 27744000 0.3185 23 chr7 28743900 28744200 0.5415 31 chr7 28839000 28839600 0.1022 68 chr7 29580600 29584200 0.0215 151 chr7 29585400 29585700 0.0215 151 chr7 29961000 29961600 0.109 63 chr7 30056100 30056400 0.2721 90 chr7 30415500 30417300 0.1592 72 chr7 30419700 30420000 0.1592 72 chr7 30439500 30445200 0 122 chr7 30495900 30496200 0.3437 43 chr7 30636900 30641400 0.0222 92 chr7 30857400 30857700 0.5225 34 chr7 31031100 31031400 0.5417 37 chr7 31280700 31281000 0.5057 45 chr7 31484400 31485600 0 60 chr7 31586100 31586400 0.3916 67 chr7 31621800 31622100 0.6393 56 chr7 31623900 31624800 0.2871 80 chr7 31656900 31657200 0.6602 32 chr7 32085000 32085900 0.5126 40 chr7 32097900 32098200 0.5689 53 chr7 32308800 32309100 0.4081 70 chr7 32350500 32353500 0 87 chr7 32386200 32386800 0.0911 69 chr7 32464800 32468100 0.0163 86 chr7 32469300 32470200 0.0163 86 chr7 32579100 32579400 0.5154 30 chr7 32620500 32620800 0.3307 38 chr7 32683200 32685000 0 88 chr7 32686500 32686800 0 88 chr7 32698800 32699400 0.1687 64 chr7 32700600 32703300 0.1687 64 chr7 32710200 32710500 0 79 chr7 32711700 32713800 0 79 chr7 32737800 32738100 0.3023 15 chr7 32746500 32746800 0.5093 61 chr7 32825100 32825700 0.0593 86 chr7 32829300 32829600 0.4357 52 chr7 32970900 32971200 0.3757 68 chr7 33170100 33170700 0.4079 81 chr7 33522600 33525900 0.002 85 chr7 33549000 33549600 0.4295 53 chr7 33859200 33859500 0.3592 22 chr7 33988800 33993300 0.2844 77 chr7 34169700 34171500 0.2779 93 chr7 34173000 34174200 0.493 71 chr7 34200300 34202100 0.0535 78 chr7 34266000 34267800 0.0598 83 chr7 34515000 34516200 0.0327 101 chr7 34517400 34519200 0.0327 101 chr7 34790700 34791000 0.0705 38 chr7 34799700 34801500 0 32 chr7 34816200 34817700 0 40 chr7 34907700 34908000 0.1849 55 chr7 34910700 34912200 0.255 70 chr7 34914900 34915200 0.645 83 chr7 34918200 34918500 0.6095 69 chr7 34954800 34955100 0.4134 39 chr7 35044500 35046000 0.4207 58 chr7 35082600 35082900 0.3137 51 chr7 35094900 35095200 0.3158 88 chr7 35097900 35098200 0.4882 83 chr7 35115900 35116800 0.0565 95 chr7 35139900 35140200 0.4313 35 chr7 35153700 35154300 0.4438 52 chr7 36435600 36435900 0.4656 40 chr7 36554700 36555300 0.188 100 chr7 36556500 36557100 0.3222 65 chr7 37164600 37164900 0.4371 50 chr7 37167300 37167600 0.5114 57 chr7 37293000 37293300 0.0411 20 chr7 37298700 37300800 0 72 chr7 37437600 37437900 0.6879 20 chr7 37469700 37470000 0.5035 71 chr7 37612500 37616700 0.1009 106 chr7 37807500 37809300 0.1103 78 chr7 37959000 37959300 0.3808 34 chr7 38028600 38029500 0.0213 110 chr7 38240100 38240400 0.6164 49 chr7 38473500 38473800 0.4838 20 chr7 38696100 38696400 0.144 64 chr7 39007800 39009000 0.2235 111 chr7 39010200 39012900 0.2235 111 chr7 39274200 39276000 0.0573 77 chr7 39677400 39678000 0.0628 47 chr7 39787200 39787500 0.6059 27 chr7 39808500 39808800 0.4439 40 chr7 39853200 39854100 0.003 61 chr7 40249200 40249500 0.4937 30 chr7 40335300 40335600 0.5646 56 chr7 40944300 40944600 0.4228 68 chr7 42564900 42565500 0.5527 41 chr7 42582900 42583200 0.5012 139 chr7 42786600 42787200 0.1812 81 chr7 43060200 43064700 0.0833 88 chr7 43413000 43416000 0.0142 85 chr7 43686300 43686600 0.4932 61 chr7 43776900 43777500 0.19 103 chr7 43980900 43981200 0.3405 72 chr7 43998600 44000100 0.4084 72 chr7 44002200 44004900 0.0402 99 chr7 44006400 44006700 0.0402 99 chr7 44016600 44016900 0.5881 77 chr7 44022000 44022300 0.4711 55 chr7 44027400 44027700 0.2768 94 chr7 44030400 44031900 0.2768 94 chr7 44033100 44033400 0.3523 82 chr7 44039400 44040300 0.3548 76 chr7 44198700 44199000 0.2556 59 chr7 44455800 44456100 0.4961 48 chr7 44910900 44911200 0.607 26 chr7 45083400 45084300 0 58 chr7 45378900 45379200 0.2946 64 chr7 45693300 45693900 0.3221 56 chr7 45758400 45758700 0.5095 47 chr7 45760200 45760500 0.3796 59 chr7 45811200 45812700 0.2273 59 chr7 45948300 45948600 0.1165 70 chr7 46141500 46143000 0.4071 72 chr7 46326600 46326900 0.3652 32 chr7 46821300 46825500 0 81 chr7 47109600 47109900 0.5607 41 chr7 47111700 47112300 0 23 chr7 47524500 47524800 0.5337 48 chr7 47959200 47960400 0.3657 58 chr7 48463800 48464100 0.4954 124 chr7 48791100 48792300 0.1792 93 chr7 48850500 48851400 0.0168 44 chr7 48860100 48860400 0.3506 70 chr7 48864000 48865500 0.2291 78 chr7 48907500 48908400 0.096 72 chr7 48912000 48912900 0.3303 57 chr7 48921600 48921900 0.2635 58 chr7 49534800 49535100 0.1129 50 chr7 49653600 49653900 0.4271 72 chr7 49664700 49665000 0.2632 51 chr7 49680000 49686300 0 86 chr7 50122200 50123400 0.2895 79 chr7 50901000 50904000 0.1206 73 chr7 51571800 51572100 0.4211 41 chr7 51594600 51594900 0.4257 76 chr7 51624300 51624600 0.5579 39 chr7 51683100 51683400 0.3987 67 chr7 51787800 51788100 0.3618 75 chr7 51891300 51892200 0.0748 72 chr7 51894300 51895200 0.0748 72 chr7 52892700 52894500 0.1276 76 chr7 53026500 53031900 0.1372 82 chr7 54221100 54231000 0 77 chr7 54232500 54233700 0 77 chr7 54309000 54309600 0.4994 84 chr7 54311400 54321300 0 76 chr7 54667800 54668100 0.5926 38 chr7 55219200 55221300 0.0054 93 chr7 55401600 55402200 0.242 82 chr7 55470900 55473000 0.2419 76 chr7 55692900 55693200 0.3947 66 chr7 55707300 55707600 0.5156 56 chr7 55716600 55716900 0.3868 65 chr7 55744200 55744500 0.3596 154 chr7 55747200 55749300 0.3106 67 chr7 56150700 56152200 0.0471 52 chr7 56335800 56336100 0.6865 83 chr7 56370300 56374800 0 2733 chr7 56377200 56379300 0.2242 66 chr7 56382900 56383200 0.2242 66 chr7 56585400 56590800 0.0033 115 chr7 56748300 56748900 0.0147 67 chr7 56750100 56750700 0.0147 67 chr7 56794500 56794800 0.4389 62 chr7 56799600 56799900 0.4637 47 chr7 56805300 56805600 0.4888 78 chr7 56807700 56808000 0.4885 76 chr7 56813700 56814000 0 91 chr7 56816700 56823000 0 91 chr7 56824800 56825100 0.354 67 chr7 56833500 56834100 0.0231 62 chr7 56835900 56837700 0.1518 71 chr7 56838900 56839200 0.1518 71 chr7 56840400 56842800 0.1862 75 chr7 56844600 56845500 0.012 82 chr7 56848200 56849100 0.1799 61 chr7 56852100 56853000 0.1036 62 chr7 56854200 56855700 0.1036 62 chr7 56857800 56858100 0.2881 61 chr7 56864400 56870700 0.1263 71 chr7 56875500 56878800 0.0009 98 chr7 56883000 56886000 0 76 chr7 56887500 56889300 0.1257 75 chr7 56891100 56891400 0.029 79 chr7 56894100 56895600 0.2358 86 chr7 56896800 56898000 0.2358 86 chr7 56899800 56900100 0.0097 65 chr7 56902200 56904000 0.0097 65 chr7 56907300 56909100 0.04 78 chr7 56914500 56916900 0.0373 75 chr7 56919000 56919300 0.4084 65 chr7 56921100 56945100 0 99 chr7 56946300 56993700 0 105 chr7 56995800 56997300 0 57 chr7 57004800 57007500 0 49 chr7 57009000 57012300 0 49 chr7 57013500 57048300 0 98 chr7 57050700 57051300 0 60 chr7 57053100 57054000 0.1754 93 chr7 57055200 57055500 0.3751 71 chr7 57057300 57057600 0.5014 64 chr7 57064800 57065400 0.2785 62 chr7 57068100 57075300 0 85 chr7 57076800 57083400 0 85 chr7 57087600 57087900 0.3736 73 chr7 57090000 57091500 0.2578 58 chr7 57105600 57105900 0.3775 61 chr7 57126300 57126600 0.4987 64 chr7 57486000 57497100 0.1739 557 chr7 57509100 57509400 0.123 16 chr7 57611100 57638100 0 175 chr7 57639600 57640200 0.1295 68 chr7 57825300 57825600 0.3875 97 chr7 57827400 57854400 0 224 chr7 57887700 57888300 0.6837 180 chr7 57898200 57900300 0.2466 100 chr7 57905700 57906000 0.6868 101 chr7 57908400 57908700 0.6748 87 chr7 57918600 57918900 0.6989 155 chr7 57926400 57926700 0.6666 88 chr7 57935100 57936000 0.6401 134 chr7 57937500 57937800 0.4875 177 chr7 57945600 57945900 0.3198 61 chr7 57961800 57962100 0.6512 96 chr7 57977100 57977400 0.6327 118 chr7 57983400 57985200 0.0118 92 chr7 58008300 58008600 0.6267 128 chr7 58032900 58033500 0.5692 159 chr7 58036200 58036800 0.3405 393 chr7 58067400 58067700 0.5166 246 chr7 58074000 58074900 0.6165 213 chr7 58079100 58079400 0.6812 295 chr7 58080900 58081200 0.593 207 chr7 58083600 58085100 0.593 207 chr7 58096800 58097100 0.2401 127 chr7 58170000 58177200 0 1801 chr7 58179300 58189500 0 1801 chr7 58191300 58515000 0 1801 chr7 58516200 58541100 0 1801 chr7 58542300 58727100 0 1010 chr7 58728600 58912200 0 4073 chr7 58913400 58926900 0 4073 chr7 58928100 59028900 0 4073 chr7 59030100 59112000 0 4073 chr7 59113500 59127600 0 4073 chr7 59128800 59249100 0 1772 chr7 59250300 59253900 0 1772 chr7 59255100 59355300 0 2549 chr7 59356500 59509200 0 4155 chr7 59511000 59680800 0 321 chr7 59682600 59752800 0 2715 chr7 59754000 59824500 0 2715 chr7 59826000 59888400 0 2715 chr7 59889600 59891400 0 2715 chr7 59892600 59951400 0 2715 chr7 59952600 59958600 0 2715 chr7 59959800 60038100 0 2715 chr7 60039300 60117600 0 854 chr7 60118800 60303900 0 1800 chr7 60305100 60469800 0 1800 chr7 60471000 60478200 0 1800 chr7 60480000 60573000 0 1901 chr7 60574200 60828300 0 1355 chr7 60878400 60911700 0 79 chr7 60931200 60932400 0.5659 136 chr7 60938100 60938400 0.6281 140 chr7 60950100 60950400 0.4913 104 chr7 60951900 60952500 0.4913 104 chr7 60953700 60955200 0.5354 182 chr7 60986400 60986700 0.5201 144 chr7 61012200 61012500 0.4726 108 chr7 61031400 61031700 0.4806 129 chr7 61071900 61075200 0 79 chr7 61102800 61103100 0.4907 233 chr7 61105200 61107600 0.6264 162 chr7 61114500 61130100 0 87 chr7 61131300 61135800 0 87 chr7 61137000 61139700 0 87 chr7 61141200 61182900 0 208 chr7 61184100 61194300 0 208 chr7 61195800 61249500 0 208 chr7 61250700 61262400 0 208 chr7 61264500 61266300 0 232 chr7 61267500 61327800 0 232 chr7 61379700 61404000 0 424 chr7 61405200 61527600 0 424 chr7 61578000 61725000 0 107 chr7 61728900 61729500 0.0075 66 chr7 61758300 61765200 0 85 chr7 61768200 61769400 0.0159 69 chr7 61777500 61780800 0 90 chr7 61794900 61797600 0.0166 62 chr7 61799400 61799700 0.3661 56 chr7 61802400 61811400 0 94 chr7 61812900 61813200 0 94 chr7 61816500 61816800 0.5957 49 chr7 61838400 61843500 0 103 chr7 61867800 61868400 0.1028 39 chr7 61967700 61970400 0.0117 52 chr7 61972500 61976100 0 266 chr7 62026500 62027400 0 63 chr7 62028600 62028900 0.688 41 chr7 62030100 62154600 0 117 chr7 62158500 62159100 0.0092 69 chr7 62174100 62174400 0.4397 55 chr7 62177400 62184300 0 87 chr7 62187000 62188500 0 87 chr7 62190000 62193300 0 87 chr7 62209500 62210100 0.0356 80 chr7 62211900 62212200 0.2175 56 chr7 62214000 62216400 0 68 chr7 62218800 62226000 0 83 chr7 62255100 62255400 0.5142 120 chr7 62263800 62264400 0.323 84 chr7 62269200 62269500 0.6523 146 chr7 62270700 62271000 0.1631 23 chr7 62273700 62274000 0.5864 120 chr7 62277300 62292900 0 166 chr7 62295300 62295600 0.475 163 chr7 62333100 62333400 0.1268 68 chr7 62335200 62335500 0.2233 276 chr7 62338800 62339100 0.6407 125 chr7 62354400 62354700 0.5722 125 chr7 62359800 62376000 0 181 chr7 62382300 62382600 0.486 156 chr7 62402700 62403000 0.2544 768 chr7 62441100 62441400 0.6239 204 chr7 62454600 62455200 0.2631 1117 chr7 62506800 62511300 0 474 chr7 62515800 62516400 0.0401 33 chr7 62544000 62544300 0.065 10 chr7 62587800 62588400 0.1264 57 chr7 62607600 62608200 0.2776 75 chr7 62728800 62729100 0.358 63 chr7 62864100 62864400 0.3525 64 chr7 62970900 62971800 0.3194 73 chr7 63064200 63064500 0.4648 95 chr7 63122100 63122400 0.0224 42 chr7 63148800 63154800 0 74 chr7 63276000 63276300 0.4587 72 chr7 63277500 63277800 0.4587 72 chr7 63284400 63284700 0.5761 40 chr7 63290700 63291000 0 91 chr7 63292500 63365400 0 91 chr7 63379500 63379800 0.6066 44 chr7 63382500 63457500 0 89 chr7 63470700 63471600 0.2879 64 chr7 63484800 63493800 0 89 chr7 63495300 63503400 0 89 chr7 63504900 63506400 0.0307 51 chr7 63507900 63508200 0.3361 37 chr7 63509700 63511500 0.3361 37 chr7 63513000 63513600 0.1506 48 chr7 63515100 63515700 0.1506 48 chr7 63516900 63518700 0.025 63 chr7 63525600 63526200 0.1109 69 chr7 63528900 63531900 0 83 chr7 63533100 63559200 0 102 chr7 63561300 63561900 0.0251 56 chr7 63567300 63567600 0.6928 17 chr7 63570000 63570300 0.3003 26 chr7 63579600 63579900 0.3255 85 chr7 63583200 63653100 0 103 chr7 63654600 63655800 0 103 chr7 63657600 63662700 0.0127 62 chr7 63663900 63664200 0.0127 62 chr7 63665400 63665700 0.0127 62 chr7 63667200 63669600 0 62 chr7 63672600 63675600 0.0135 65 chr7 63676800 63677700 0.0135 65 chr7 63679800 63682800 0.0135 65 chr7 63684900 63686400 0.001 75 chr7 63687600 63695100 0.001 75 chr7 63698100 63701400 0.0229 78 chr7 63703500 63703800 0.0229 78 chr7 63705300 63710700 0.0229 78 chr7 63712200 63712800 0.0229 78 chr7 63716700 63717000 0.4601 70 chr7 63718800 63719400 0.4601 70 chr7 63721500 63725100 0.1352 65 chr7 63727800 63728700 0 78 chr7 63731400 63732300 0 78 chr7 63734100 63735300 0.0707 74 chr7 63738000 63741600 0.0707 74 chr7 63742800 63743400 0.16 74 chr7 63750000 63765000 0 192 chr7 63768300 63768900 0.2262 50 chr7 63770700 63771000 0.2639 47 chr7 63773700 63774600 0.0265 50 chr7 63776700 63777000 0.0265 50 chr7 63779100 63780600 0.3515 62 chr7 63781800 63784200 0.4729 65 chr7 63825000 63825600 0.0347 54 chr7 63827100 63827400 0.2332 60 chr7 63846600 63846900 0.4229 41 chr7 64154400 64154700 0.4174 61 chr7 64645200 64647600 0.2358 72 chr7 64808700 64809300 0.3343 44 chr7 64856100 64856400 0 37 chr7 64967100 64968000 0.148 28 chr7 65028000 65028600 0.0159 59 chr7 65067600 65067900 0.4428 55 chr7 65073000 65075100 0.0091 60 chr7 65098800 65099100 0.3227 58 chr7 65106900 65107800 0 46 chr7 65109300 65109900 0.2455 69 chr7 65112600 65142600 0 99 chr7 65143800 65144100 0 99 chr7 65146800 65151300 0 78 chr7 65153100 65156100 0 78 chr7 65161200 65176500 0 78 chr7 65179200 65181900 0.1407 75 chr7 65185200 65185800 0.0749 60 chr7 65187300 65187600 0.0093 75 chr7 65190600 65190900 0.0093 75 chr7 65192100 65196900 0.0093 75 chr7 65199900 65200200 0.2284 56 chr7 65202000 65205000 0.2284 56 chr7 65207100 65208300 0.2284 56 chr7 65215800 65216100 0.3949 58 chr7 65217900 65218200 0.4211 62 chr7 65258100 65261700 0 59 chr7 65340600 65341200 0.269 86 chr7 65489400 65490600 0.1192 470 chr7 65505900 65508600 0 67 chr7 65511900 65513700 0.1789 91 chr7 65514900 65515500 0.1731 77 chr7 65517000 65517600 0.3465 66 chr7 65519400 65560200 0 117 chr7 65562900 65583600 0 103 chr7 65586300 65586600 0.1678 94 chr7 65588100 65589000 0.1678 94 chr7 65630700 65682900 0 105 chr7 65685600 65688300 0.0018 78 chr7 65691300 65691900 0.0575 53 chr7 65694300 65694600 0.017 83 chr7 65697900 65702400 0.017 83 chr7 65705700 65706300 0.2943 55 chr7 65708100 65708400 0.0674 63 chr7 65710500 65710800 0.0674 63 chr7 65721600 65721900 0.4038 55 chr7 65724000 65724300 0.5117 61 chr7 65757000 65757300 0.4577 64 chr7 65762400 65764500 0 67 chr7 65788200 65788500 0.3316 57 chr7 65847300 65847600 0.4605 37 chr7 65864700 65865000 0.0414 61 chr7 65945700 65946300 0.1976 58 chr7 65948400 65948700 0.0626 55 chr7 66001200 66001500 0.1049 45 chr7 66003600 66004200 0.1818 64 chr7 66099000 66099300 0.6434 32 chr7 66286800 66292800 0 80 chr7 66393000 66395100 0.0994 60 chr7 66636300 66636600 0.4378 56 chr7 66673500 66673800 0.5253 53 chr7 66820500 66820800 0.6331 38 chr7 67031100 67031700 0.0238 76 chr7 67071900 67072200 0.2512 54 chr7 67173600 67174200 0.5911 41 chr7 67177200 67178100 0.5029 42 chr7 67179600 67179900 0.5029 42 chr7 67185900 67186200 0.1337 42 chr7 67201200 67201500 0.2921 22 chr7 67215000 67216500 0.2209 48 chr7 67232700 67233300 0 25 chr7 67273800 67274100 0.2968 70 chr7 67275300 67275900 0.031 59 chr7 67278300 67279500 0.2489 86 chr7 67280700 67283100 0.2489 86 chr7 67284300 67284600 0.2489 86 chr7 67287900 67288500 0.2714 86 chr7 67290300 67290600 0.2714 86 chr7 67292700 67293000 0.4671 44 chr7 67294500 67294800 0.4671 44 chr7 67324500 67324800 0.407 62 chr7 67326300 67326600 0.5309 59 chr7 67333200 67333500 0.4101 50 chr7 67335300 67335900 0.0678 50 chr7 67338300 67338900 0.4753 60 chr7 68652000 68653200 0.1804 64 chr7 69062700 69063600 0.3535 64 chr7 69611700 69612000 0.377 36 chr7 70162200 70162500 0.4695 31 chr7 70197300 70203900 0 87 chr7 70872000 70872300 0.6693 23 chr7 71102100 71102400 0.2939 41 chr7 71679900 71680800 0.3054 72 chr7 71747700 71748000 0.2281 14 chr7 72106500 72106800 0.6011 30 chr7 72209100 72209400 0.6548 66 chr7 72295500 72296700 0.2759 73 chr7 72526800 72527400 0.0033 82 chr7 72529500 72530400 0.0033 82 chr7 72560400 72560700 0.5576 73 chr7 72580800 72581400 0.267 38 chr7 72626100 72626400 0.4414 67 chr7 72739800 72740100 0.5295 56 chr7 72795600 72796500 0.022 58 chr7 72851400 72853200 0.0064 74 chr7 72864900 72865200 0.2062 71 chr7 72870600 72871200 0.4167 64 chr7 72872400 72872700 0.3777 59 chr7 72874500 72876000 0.0435 67 chr7 72880800 72881700 0.5147 55 chr7 72885600 72885900 0.4299 51 chr7 72896400 72896700 0.4428 23 chr7 72940200 72942900 0.2098 75 chr7 72946800 72947400 0.2862 72 chr7 72950700 73005600 0 116 chr7 73007100 73122900 0 116 chr7 73124100 73134300 0 116 chr7 73135500 73237200 0 116 chr7 73238400 73242900 0 116 chr7 73244400 73244700 0.4564 79 chr7 73250100 73252800 0.1095 59 chr7 73254900 73260000 0 68 chr7 73261500 73270200 0 71 chr7 73273800 73274400 0.0047 78 chr7 73275600 73282200 0.0047 78 chr7 73284000 73286400 0.1931 59 chr7 73292400 73297800 0.019 73 chr7 73302000 73302600 0.5005 67 chr7 73776000 73776300 0.348 36 chr7 73797600 73797900 0.2538 91 chr7 73835400 73837200 0.3505 62 chr7 74196600 74196900 0.4126 51 chr7 74728500 74731500 0 67 chr7 74733000 74782500 0 103 chr7 74784000 74841000 0 103 chr7 74842800 74865600 0 92 chr7 74867100 74869200 0.079 68 chr7 74871300 74871600 0.1568 64 chr7 74873100 74873400 0.1568 64 chr7 74875500 74879700 0.1568 64 chr7 74882400 74892900 0 99 chr7 74894100 74907000 0 99 chr7 74908200 74908500 0.0771 45 chr7 74910900 74920500 0 90 chr7 74926200 74935500 0 98 chr7 74937900 74945400 0 98 chr7 74946600 74976900 0 98 chr7 74978400 74984400 0 98 chr7 75075000 75079800 0.0234 81 chr7 75081300 75092100 0 92 chr7 75093900 75101400 0 92 chr7 75106500 75113700 0 97 chr7 75114900 75117300 0 97 chr7 75119100 75153000 0 97 chr7 75155700 75156300 0.0597 73 chr7 75157500 75272100 0 99 chr7 75273900 75414300 0 92 chr7 75417900 75418200 0.6626 53 chr7 75422400 75423600 0.2653 66 chr7 75425100 75427500 0.01 76 chr7 75443400 75448800 0 75 chr7 75451200 75451800 0 75 chr7 75455400 75455700 0.3893 64 chr7 75456900 75457800 0.2414 87 chr7 75459000 75459900 0.2414 87 chr7 75463800 75464100 0.4273 69 chr7 75478800 75480300 0.1676 63 chr7 75489000 75491100 0.1757 66 chr7 75496200 75498000 0.1031 81 chr7 75499800 75500400 0.1031 81 chr7 75504300 75504900 0.3092 87 chr7 75506400 75507900 0.0241 62 chr7 75510000 75510300 0.0241 62 chr7 75516600 75516900 0.6105 48 chr7 75706800 75708000 0.0055 61 chr7 75828900 75829200 0.1555 59 chr7 75834600 75834900 0.1045 75 chr7 76103700 76104000 0.4397 63 chr7 76170000 76170300 0.3583 60 chr7 76266000 76266300 0.1145 14 chr7 76434000 76434900 0.2062 70 chr7 76438800 76439100 0 88 chr7 76440900 76442700 0 88 chr7 76446000 76449600 0 73 chr7 76452900 76469100 0 78 chr7 76470300 76471200 0 78 chr7 76472400 76473900 0 78 chr7 76475400 76476300 0.0318 56 chr7 76477800 76479300 0.0318 56 chr7 76483500 76497900 0 68 chr7 76500000 76500600 0.244 54 chr7 76504200 76504500 0.1546 54 chr7 76519200 76519500 0.0351 12 chr7 76521600 76522500 0 24 chr7 76524900 76525800 0 80 chr7 76527000 76547400 0 80 chr7 76551300 76551600 0.2868 57 chr7 76553400 76553700 0.3538 37 chr7 76573200 76573500 0.3144 44 chr7 76584300 76584600 0.3652 57 chr7 76590600 76590900 0.5833 77 chr7 76599900 76600200 0.2725 40 chr7 76602900 76603200 0.5841 22 chr7 76605000 76607100 0.0165 105 chr7 76609200 76611000 0 61 chr7 76612200 76615200 0 61 chr7 76617300 76618200 0 72 chr7 76619700 76620300 0 72 chr7 76621800 76622400 0 72 chr7 76626900 76630800 0 72 chr7 76632900 76636500 0 72 chr7 76638300 76638600 0.0468 57 chr7 76639800 76644300 0.0468 57 chr7 76648500 76649100 0.0342 45 chr7 76651800 76652700 0.0478 64 chr7 76660800 76661100 0.1608 52 chr7 76666500 76666800 0.3322 59 chr7 76672800 76673100 0.1961 52 chr7 76681500 76681800 0.2642 55 chr7 76695600 76695900 0.1886 51 chr7 76729500 76730100 0.0796 73 chr7 76732200 76734000 0.0796 73 chr7 76737000 76737300 0.2046 67 chr7 76738800 76739100 0.4401 47 chr7 76740300 76741500 0.4113 66 chr7 76745100 76746900 0.2011 61 chr7 76748100 76748400 0.5259 58 chr7 76749600 76749900 0.4466 19 chr7 76768500 76769100 0.1548 57 chr7 76781400 76781700 0.6055 56 chr7 76790700 76791300 0.2686 62 chr7 76817700 76818000 0.4668 54 chr7 76845300 76845600 0.4799 51 chr7 76849200 76849500 0.3414 37 chr7 76863300 76863600 0.3057 57 chr7 76869300 76869600 0.3082 47 chr7 76870800 76871100 0.253 58 chr7 76873800 76874100 0.376 57 chr7 76880400 76881600 0.3252 45 chr7 76892400 76892700 0.5112 50 chr7 76896900 76897200 0.3863 59 chr7 76951200 76954500 0.1595 73 chr7 76956300 76962300 0 71 chr7 76963800 76969200 0.039 90 chr7 76973400 76974300 0.0352 80 chr7 76977000 76977300 0.0352 80 chr7 76982100 76985700 0.0142 82 chr7 76987200 76987500 0.089 79 chr7 76988700 76989000 0.089 79 chr7 76990500 76991700 0.0057 101 chr7 76993200 76993500 0.0057 101 chr7 76994700 76996500 0.4817 69 chr7 77004000 77004300 0.4303 76 chr7 77012100 77019900 0 75 chr7 77021400 77048400 0 101 chr7 77054100 77054700 0.0794 96 chr7 77055900 77059800 0.0794 96 chr7 77061000 77062500 0.0794 96 chr7 77075700 77076000 0.5226 28 chr7 77078400 77080200 0.0507 69 chr7 77087100 77087400 0.4941 58 chr7 77092500 77094300 0.0022 52 chr7 77096700 77099400 0.1538 58 chr7 77100900 77101800 0.1538 58 chr7 77106600 77106900 0.2576 46 chr7 77108100 77108400 0.4503 50 chr7 77113200 77114700 0.2398 63 chr7 77115900 77116800 0.022 52 chr7 77157000 77157300 0.0348 73 chr7 77166300 77166600 0.4515 50 chr7 77508600 77510400 0.0371 78 chr7 78297300 78297600 0.591 70 chr7 78330300 78330600 0.4871 38 chr7 78536100 78536400 0.5507 34 chr7 78668400 78668700 0.359 69 chr7 78867000 78867300 0.4144 53 chr7 79230900 79234500 0.0426 77 chr7 79885500 79887000 0.1995 69 chr7 79939200 79939800 0.2259 72 chr7 80112900 80113200 0.5133 34 chr7 80328900 80329200 0.6223 53 chr7 80713800 80714100 0.1857 98 chr7 80715900 80716200 0.3443 69 chr7 80718300 80718600 0.3124 53 chr7 81058500 81058800 0.6282 60 chr7 81172500 81172800 0.3807 16 chr7 81426600 81426900 0.5539 81 chr7 81785100 81786000 0.1629 49 chr7 82059900 82060200 0.5912 19 chr7 82400100 82401600 0.3979 54 chr7 82611600 82611900 0.5089 40 chr7 82642200 82642500 0.5756 45 chr7 82806900 82807200 0.1676 80 chr7 83025300 83025600 0.1101 77 chr7 83026800 83029800 0.1101 77 chr7 83291700 83292000 0.4472 68 chr7 83298000 83298600 0.3899 63 chr7 83389800 83390400 0.504 59 chr7 83606400 83606700 0.2852 53 chr7 83747400 83747700 0.3094 45 chr7 83989500 83993400 0.1386 81 chr7 84053100 84054000 0.1591 59 chr7 84064500 84065400 0.1133 82 chr7 84067800 84068100 0.1513 109 chr7 84080700 84081000 0.5834 22 chr7 84099000 84099300 0.6287 24 chr7 84121500 84121800 0.616 22 chr7 84152100 84152400 0.3861 72 chr7 84318300 84318600 0.3603 46 chr7 84707700 84708000 0.3018 67 chr7 85250700 85251000 0.1916 50 chr7 85253100 85254900 0.2907 67 chr7 85330200 85334700 0.1293 93 chr7 85418700 85419000 0.5091 42 chr7 85656900 85657500 0.3929 67 chr7 86198100 86198400 0.4621 60 chr7 86204400 86204700 0.3674 76 chr7 86205900 86206200 0.3674 76 chr7 86343300 86344800 0.2127 69 chr7 86457000 86458800 0.0645 73 chr7 86484600 86484900 0.3863 62 chr7 86807100 86807400 0.2874 34 chr7 86986200 86987100 0.1812 43 chr7 87042000 87042300 0.3216 94 chr7 87043800 87045300 0.104 64 chr7 87062700 87065100 0.0626 70 chr7 87087900 87088200 0.4829 47 chr7 87242700 87243600 0.3051 100 chr7 87626100 87626700 0.3732 39 chr7 87703800 87704100 0.2983 96 chr7 87750600 87750900 0.4753 81 chr7 87950400 87952200 0.0818 67 chr7 88221900 88222500 0.2978 66 chr7 88439700 88440000 0.3564 23 chr7 88462200 88462500 0.3626 23 chr7 88551900 88553100 0.1058 65 chr7 88554300 88554600 0.4866 54 chr7 88872600 88872900 0.4902 70 chr7 89195100 89195700 0.1305 102 chr7 89343000 89343300 0.6689 37 chr7 89462400 89463600 0.3133 63 chr7 89682900 89683200 0.5029 70 chr7 89789400 89792400 0.1496 61 chr7 89899200 89900400 0.2336 109 chr7 90074400 90075300 0.0026 57 chr7 90113100 90113400 0.3413 59 chr7 90117000 90117300 0.1516 55 chr7 90160500 90160800 0.537 60 chr7 90202200 90202500 0.5146 67 chr7 90523200 90523800 0.3175 75 chr7 90954600 90954900 0.6428 29 chr7 91174500 91176000 0.0669 76 chr7 91177200 91178400 0.0669 76 chr7 91217400 91218000 0.1438 86 chr7 91390800 91391100 0.4688 87 chr7 91392600 91392900 0.3666 66 chr7 91488300 91488600 0.4943 63 chr7 91511700 91512000 0.4562 54 chr7 91587300 91588200 0.0547 84 chr7 91702500 91702800 0.4718 35 chr7 91903800 91908300 0.0853 92 chr7 92013000 92013300 0.3359 62 chr7 92185500 92185800 0.2953 62 chr7 92261100 92261400 0.5783 68 chr7 92561100 92562000 0.058 52 chr7 92574600 92574900 0.3632 73 chr7 93346800 93347700 0.3924 61 chr7 93369900 93370500 0.2322 67 chr7 93589200 93589500 0.491 64 chr7 93788100 93793200 0 68 chr7 94159200 94160400 0.0454 116 chr7 95100900 95101200 0.6135 63 chr7 95832000 95835300 0.1117 83 chr7 95837100 95837700 0.4413 94 chr7 95942700 95943000 0.26 59 chr7 96553200 96557700 0.2754 65 chr7 96582000 96583500 0.2344 45 chr7 96846600 96852600 0 90 chr7 97533300 97533600 0.1327 65 chr7 97535700 97536000 0.5988 58 chr7 97614000 97619700 0.0112 86 chr7 97701600 97702500 0.2101 77 chr7 97765800 97766100 0.2601 65 chr7 97778400 97779000 0.2438 62 chr7 97780200 97780500 0.4389 62 chr7 99809700 99815100 0 94 chr7 99888000 99888300 0.6026 34 chr7 99952500 99952800 0.5534 53 chr7 100300500 100300800 0.4285 69 chr7 100302000 100302300 0.4285 69 chr7 100308900 100314900 0.0593 69 chr7 100322100 100322400 0.4593 45 chr7 100334700 100335000 0.2694 53 chr7 100345200 100345500 0.6118 48 chr7 100740300 100742700 0.0428 59 chr7 100957500 100959000 0.5707 1375 chr7 100962000 100962300 0.4991 33 chr7 100993500 101004300 0.0156 400 chr7 101017800 101018100 0.5436 61 chr7 101358000 101359800 0.0445 75 chr7 101691000 101691300 0.4019 30 chr7 102341700 102342300 0.0021 85 chr7 102343500 102345600 0.0021 85 chr7 102346800 102357900 0 135 chr7 102361500 102361800 0.6145 52 chr7 102371700 102372000 0.4311 69 chr7 102476400 102541500 0 151 chr7 102543000 102554100 0 151 chr7 102555300 102576900 0 117 chr7 102579000 102691200 0 139 chr7 102702900 102703500 0.3972 58 chr7 102713700 102714300 0.2846 67 chr7 102733800 102734100 0.6038 50 chr7 102755100 102755400 0.3942 76 chr7 102756600 102756900 0.2407 74 chr7 102762900 102763200 0.2004 56 chr7 102764400 102764700 0.2004 56 chr7 102767100 102770700 0.3747 63 chr7 102771900 102773400 0.1693 70 chr7 102777300 102777600 0.3689 62 chr7 102785100 102785400 0.3535 59 chr7 102791100 102792900 0.1546 67 chr7 102960900 102962100 0.3968 73 chr7 103521000 103521300 0.529 63 chr7 103822500 103822800 0.6498 31 chr7 103873200 103873800 0.276 71 chr7 103909800 103911900 0.2532 65 chr7 104173800 104174100 0.6319 61 chr7 104213700 104214000 0.465 86 chr7 104392200 104392500 0.401 83 chr7 104457600 104457900 0.2898 60 chr7 104507400 104508300 0.1272 73 chr7 104520300 104520900 0.5227 37 chr7 104547000 104547300 0.2717 19 chr7 104558100 104560800 0.0745 114 chr7 104562900 104563200 0.0745 114 chr7 104748300 104749500 0.4554 72 chr7 104752200 104752800 0.4233 70 chr7 104974800 104975100 0.4924 40 chr7 105405600 105405900 0.4163 27 chr7 105410100 105410400 0.3786 65 chr7 105733500 105733800 0.6717 195 chr7 106101300 106101600 0.0666 1123 chr7 106245000 106246800 0 82 chr7 106323600 106323900 0.4529 89 chr7 107418300 107418600 0.179 51 chr7 107422800 107423100 0.0652 57 chr7 107647500 107647800 0.2941 59 chr7 107769900 107770500 0.2184 286 chr7 107864100 107864400 0.6245 60 chr7 108256200 108256500 0.2012 71 chr7 108507900 108510000 0.0042 72 chr7 108615900 108616200 0.2782 49 chr7 108672000 108672300 0.548 78 chr7 108938100 108938700 0.1414 94 chr7 109013400 109014000 0.1898 56 chr7 109094700 109098300 0 75 chr7 109899600 109899900 0.1016 25 chr7 109906200 109908600 0 76 chr7 109915200 109915500 0.3385 33 chr7 110058900 110059200 0.3819 64 chr7 110402100 110402400 0.0686 36 chr7 110476500 110476800 0.3609 62 chr7 110558700 110562600 0.0014 78 chr7 110707200 110712600 0 84 chr7 110902500 110903100 0.4989 47 chr7 111243600 111249600 0 120 chr7 111447000 111450000 0.0475 73 chr7 111455400 111458100 0 65 chr7 111502800 111503100 0.2704 75 chr7 111610800 111611100 0.1276 58 chr7 111616200 111616500 0.5402 48 chr7 111963300 111969000 0 90 chr7 112551900 112552800 0.0947 91 chr7 112920300 112921800 0.2518 80 chr7 112975500 112981200 0 69 chr7 113240100 113240400 0.6135 27 chr7 113259900 113261700 0.4074 72 chr7 113385000 113385600 0.256 69 chr7 113429400 113430900 0.2242 81 chr7 113493000 113499300 0 72 chr7 113523300 113523600 0.3322 74 chr7 113534400 113537100 0.2909 69 chr7 113618400 113618700 0.4597 40 chr7 113661300 113661900 0.2193 75 chr7 113738700 113739000 0.3976 52 chr7 113744400 113745300 0.1135 120 chr7 113776200 113782200 0 141 chr7 114453900 114454800 0.3548 88 chr7 114515100 114515400 0.3407 70 chr7 115026000 115026600 0.3049 54 chr7 115028700 115029900 0.3049 54 chr7 115171200 115171500 0.479 53 chr7 115261500 115263600 0.0349 81 chr7 115399800 115400100 0.5428 57 chr7 115948500 115949100 0.5081 68 chr7 116109000 116109300 0.4941 59 chr7 116412000 116412300 0.3179 64 chr7 116413500 116413800 0.3179 64 chr7 116718600 116721000 0.1747 97 chr7 116722500 116723400 0.1747 97 chr7 117031200 117031800 0.2043 101 chr7 117525300 117529500 0 70 chr7 118104000 118104300 0.3049 71 chr7 118343100 118343700 0.0417 63 chr7 118551900 118552500 0.1925 83 chr7 118629300 118629600 0.4755 43 chr7 118703700 118704000 0.1945 68 chr7 118963500 118965300 0.0863 67 chr7 119589000 119589600 0.0717 72 chr7 119591100 119592000 0.0717 72 chr7 119650200 119650500 0.6201 58 chr7 119657100 119658000 0.2356 66 chr7 119981400 119981700 0.5304 37 chr7 120323400 120325500 0.0567 63 chr7 121241100 121241400 0.4283 32 chr7 121349700 121350000 0.3379 56 chr7 121443600 121444200 0.1833 67 chr7 121649400 121650000 0.1321 30 chr7 122231700 122233500 0.2072 58 chr7 122239500 122244300 0.164 88 chr7 122280300 122282100 0.0677 83 chr7 122283300 122283900 0.0677 83 chr7 122569500 122570700 0.2882 68 chr7 122680800 122681100 0.3655 43 chr7 123042600 123042900 0.1439 35 chr7 123429300 123429600 0.2222 71 chr7 123446700 123447000 0.4139 79 chr7 123448800 123449100 0.3335 38 chr7 123524100 123524400 0.2845 63 chr7 123526500 123526800 0.2845 63 chr7 123780900 123781500 0.0687 79 chr7 123897900 123898200 0.4306 68 chr7 123900000 123900300 0.4159 70 chr7 123996900 123997200 0.2458 32 chr7 124047300 124047600 0.4806 64 chr7 124094400 124094700 0.229 95 chr7 124096500 124096800 0.229 95 chr7 124581000 124581300 0.5346 66 chr7 124628700 124629000 0.5155 21 chr7 125179800 125180400 0.0189 43 chr7 125221200 125222100 0.0531 83 chr7 125384700 125385000 0.3474 64 chr7 125702100 125702400 0.2802 119 chr7 125838900 125839200 0.3959 63 chr7 125883900 125884200 0.4071 40 chr7 126168300 126168900 0.1966 71 chr7 126345300 126345900 0.4233 61 chr7 126601500 126603300 0.3683 76 chr7 126829200 126829500 0.1377 76 chr7 127963500 127966800 0.0104 80 chr7 127980000 127980600 0.4776 34 chr7 128107800 128108100 0.4871 36 chr7 128294100 128295600 0.2481 83 chr7 128297400 128297700 0.2481 83 chr7 128626500 128626800 0.4358 63 chr7 128636700 128637000 0.3488 56 chr7 128648400 128649900 0.4094 75 chr7 128655300 128655600 0.3019 72 chr7 128669100 128669400 0.3752 34 chr7 129409800 129410100 0.465 40 chr7 129867300 129867600 0.1903 61 chr7 130480800 130481400 0.1145 75 chr7 130537200 130537500 0.3973 69 chr7 130541700 130542000 0.238 71 chr7 130578000 130582800 0.0142 93 chr7 130702200 130703700 0.0049 78 chr7 132132300 132132600 0.6062 75 chr7 132664800 132665100 0.4645 48 chr7 133178100 133178400 0.3374 62 chr7 133422900 133423200 0.2122 25 chr7 133524000 133524600 0.1419 60 chr7 133889400 133894800 0 67 chr7 134665200 134665500 0.543 83 chr7 135044700 135045000 0.6931 21 chr7 135325200 135325500 0.5309 29 chr7 136094400 136095900 0.3357 72 chr7 136107900 136108200 0.4696 59 chr7 136414800 136419900 0.0844 89 chr7 136763100 136764600 0.2292 70 chr7 136774800 136776600 0.3515 73 chr7 136777800 136778100 0.2868 60 chr7 136779300 136779600 0.2868 60 chr7 136797000 136798200 0.1515 69 chr7 136834800 136836600 0.3385 99 chr7 136972800 136973700 0.2055 58 chr7 137137200 137137500 0.1038 79 chr7 137139000 137139300 0.1038 79 chr7 137166900 137167200 0.2572 35 chr7 137184300 137184600 0.3919 83 chr7 137186400 137186700 0.3919 83 chr7 137334300 137334600 0.0563 64 chr7 137427900 137428200 0.2193 61 chr7 137429700 137430300 0.1447 49 chr7 138621900 138622200 0.3489 181 chr7 139213800 139214100 0.5256 65 chr7 139522500 139522800 0.4214 47 chr7 139794600 139795800 0.1774 119 chr7 139950600 139950900 0.5789 69 chr7 140363100 140363700 0.3957 62 chr7 140764200 140764500 0.3334 69 chr7 141037500 141037800 0.2864 69 chr7 141062100 141067800 0 77 chr7 141336900 141337200 0.6529 79 chr7 141414000 141414300 0.4205 38 chr7 141882300 141883500 0.0971 83 chr7 141920700 141926700 0 97 chr7 141981000 141981600 0.0522 83 chr7 141983100 141984300 0.0522 83 chr7 142042500 142045200 0 31 chr7 142132800 142133100 0.1495 19 chr7 142267500 142267800 0.3865 39 chr7 142893600 142893900 0.3286 28 chr7 143522100 143529900 0 82 chr7 143531100 143537100 0 94 chr7 143538300 143539200 0 94 chr7 143540700 143561700 0 94 chr7 143562900 143610300 0 94 chr7 143612400 143650800 0 67 chr7 143700900 143727900 0 90 chr7 143738700 143739600 0.4071 69 chr7 143742600 143788800 0 89 chr7 143790600 143798700 0 89 chr7 143799900 143844900 0 106 chr7 143852700 143874600 0 104 chr7 144119700 144120300 0.1706 85 chr7 144179400 144197700 0 85 chr7 144199200 144226200 0 103 chr7 144228600 144234900 0 103 chr7 144236100 144253800 0 86 chr7 144256500 144264000 0.001 100 chr7 144265200 144351600 0 111 chr7 144353400 144377100 0 93 chr7 144460800 144461100 0.4272 44 chr7 144488400 144489000 0.4745 63 chr7 144664200 144664500 0.5807 41 chr7 144685500 144685800 0.3511 77 chr7 144692100 144693000 0.2816 69 chr7 145192500 145192800 0.4227 35 chr7 145238400 145239300 0.3114 70 chr7 145305000 145305900 0.1345 58 chr7 145341300 145341900 0.4796 53 chr7 145343100 145343400 0.245 62 chr7 145559700 145561200 0.3942 47 chr7 145563300 145563600 0.4271 58 chr7 146015400 146017200 0.0978 87 chr7 146132700 146134800 0.336 79 chr7 146604000 146604900 0.1283 73 chr7 146643000 146643300 0.3281 41 chr7 146821800 146823300 0.363 72 chr7 146907300 146910000 0.0143 86 chr7 146912100 146912400 0.2214 46 chr7 146968800 146969100 0.4194 74 chr7 147084000 147084300 0.137 12 chr7 147322500 147323400 0.1978 62 chr7 147842700 147848400 0 76 chr7 148365900 148366200 0.6537 21 chr7 148647600 148648500 0.0954 54 chr7 149121000 149121300 0.4311 34 chr7 149890200 149891400 0.3388 57 chr7 149892600 149892900 0.6554 12 chr7 149899200 149899500 0.3886 56 chr7 149906700 149907300 0.0152 59 chr7 149909400 149910300 0.2971 37 chr7 149916000 149916900 0.3539 51 chr7 149920200 149920500 0.5191 49 chr7 149922000 149922300 0.6552 56 chr7 149934600 149935500 0 47 chr7 149939700 149940000 0.5032 75 chr7 149947200 149948400 0.2996 46 chr7 149950500 149951400 0.0067 87 chr7 149953800 149954100 0.1471 60 chr7 149965200 149965500 0.4868 19 chr7 149968800 149969100 0.5484 63 chr7 149973900 149974200 0.1088 37 chr7 149976900 149978100 0.3335 79 chr7 149986800 149987100 0.2128 62 chr7 149990400 149990700 0.0903 63 chr7 149997000 149997300 0.2815 91 chr7 150000300 150001800 0.0219 60 chr7 150006300 150006600 0.4043 74 chr7 150008700 150009000 0.4043 74 chr7 150010800 150011100 0.2642 73 chr7 150012900 150013200 0.2554 54 chr7 150021300 150021600 0.4989 57 chr7 150027300 150027600 0.0832 67 chr7 150030000 150030300 0.0832 67 chr7 150036900 150037200 0.6611 39 chr7 150040500 150040800 0.4612 66 chr7 150046500 150046800 0.2361 58 chr7 150052500 150052800 0.2323 71 chr7 150056700 150057000 0.2305 55 chr7 150060600 150064500 0 77 chr7 150065700 150066000 0.2741 82 chr7 150071400 150075300 0.1134 69 chr7 150078300 150078600 0.1722 39 chr7 150080100 150080400 0.3983 52 chr7 150091200 150091800 0.0071 65 chr7 150096000 150096300 0.3864 70 chr7 150109800 150110100 0.4631 51 chr7 150121500 150121800 0.4914 56 chr7 150129000 150129300 0.5174 56 chr7 150145500 150146100 0.053 56 chr7 150147900 150148200 0.1165 54 chr7 150151800 150152100 0.3308 15 chr7 150153300 150153900 0.1215 59 chr7 150170700 150171300 0.3592 63 chr7 150187500 150187800 0.0863 69 chr7 150189600 150189900 0.0565 54 chr7 150192000 150192300 0.381 73 chr7 150199200 150199500 0.1209 60 chr7 150204300 150204600 0.4802 60 chr7 150213600 150214200 0.4392 63 chr7 150217500 150219000 0.2193 83 chr7 150220200 150220800 0.2193 83 chr7 150238200 150239400 0.143 56 chr7 150247500 150247800 0.1333 53 chr7 150258300 150258600 0.4725 78 chr7 150261900 150262200 0.2161 73 chr7 150268500 150270300 0 77 chr7 150271500 150271800 0.5036 65 chr7 150282600 150283200 0.4274 58 chr7 150295800 150297000 0.0815 64 chr7 150298500 150298800 0.1966 55 chr7 150300600 150300900 0.4805 81 chr7 150557400 150557700 0.2607 47 chr7 150674400 150674700 0.1995 48 chr7 150711300 150711600 0.2195 74 chr7 150909600 150910800 0.3309 153 chr7 151603200 151603500 0.4772 45 chr7 151737900 151738200 0.2271 74 chr7 151855200 151855500 0.6875 47 chr7 152584800 152586900 0.0259 65 chr7 152662500 152662800 0.405 45 chr7 152772600 152772900 0.5911 26 chr7 152775900 152776500 0.5275 57 chr7 152785500 152786400 0.007 65 chr7 152793300 152793600 0.2544 45 chr7 152801700 152802600 0.1485 52 chr7 152808900 152809200 0.5612 60 chr7 152811000 152811300 0.1079 61 chr7 152812500 152814300 0.1079 61 chr7 152816700 152817000 0.1255 35 chr7 152826600 152828100 0.4908 70 chr7 152839500 152841600 0 81 chr7 153112500 153112800 0.5836 16 chr7 153312000 153312300 0.3189 56 chr7 153706800 153707400 0.0676 54 chr7 153711000 153711300 0.1541 66 chr7 153721500 153722100 0.1611 72 chr7 153730800 153731100 0.1849 57 chr7 153748500 153748800 0.0507 50 chr7 153750300 153751200 0.1234 63 chr7 153755100 153755400 0.3495 62 chr7 153775200 153775500 0.4156 59 chr7 153777300 153777900 0.1181 63 chr7 153779400 153780000 0.1181 63 chr7 153795900 153796500 0.3051 58 chr7 153817200 153817500 0.5787 17 chr7 153819000 153819300 0.38 53 chr7 153820800 153821700 0.0259 53 chr7 153853800 153855000 0.1958 68 chr7 153969300 153969600 0.5317 57 chr7 153971700 153972000 0.4859 60 chr7 153990000 153990300 0.6022 54 chr7 154004400 154004700 0.4071 64 chr7 154008900 154009500 0.1727 69 chr7 154025100 154027200 0.2148 67 chr7 154029000 154029300 0.1932 74 chr7 154034700 154035000 0.2145 74 chr7 154036200 154040100 0 71 chr7 154043700 154044000 0.1627 61 chr7 154047900 154049100 0 60 chr7 154050600 154050900 0 60 chr7 154053900 154054200 0.3872 70 chr7 154062300 154062600 0.5352 37 chr7 154066800 154067400 0.0992 61 chr7 154068600 154070100 0.4316 64 chr7 154075500 154075800 0.353 51 chr7 154083900 154084800 0.4002 61 chr7 154086300 154086600 0.2938 56 chr7 154088400 154088700 0.277 65 chr7 154095900 154096500 0.0464 90 chr7 154099500 154100700 0.3685 68 chr7 154106100 154106700 0.2845 70 chr7 154109700 154110000 0.2063 66 chr7 154118400 154119900 0.1165 70 chr7 154128000 154128300 0.5218 65 chr7 154139100 154139400 0.5464 49 chr7 154142700 154143000 0.0104 82 chr7 154145700 154146300 0.0104 82 chr7 154148400 154149600 0.0104 82 chr7 154161300 154162200 0.0136 72 chr7 154456800 154458000 0 65 chr7 154575300 154575600 0.5293 63 chr7 154660800 154662900 0.0635 54 chr7 154749600 154749900 0.552 54 chr7 155034900 155035200 0.3952 84 chr7 155124300 155124600 0.6731 39 chr7 155140500 155140800 0.4083 28 chr7 155159700 155160000 0.6375 43 chr7 155328600 155330100 0.4403 148 chr7 155335200 155335500 0.6779 112 chr7 155341200 155341500 0.1159 169 chr7 155348100 155348400 0.5636 12 chr7 155350200 155350800 0.171 69 chr7 155366400 155367600 0.0318 101 chr7 155406900 155407500 0.2722 100 chr7 155573700 155574000 0.3577 47 chr7 155579400 155579700 0.5547 59 chr7 155792100 155792400 0.6553 35 chr7 155934000 155934300 0.487 17 chr7 156154200 156156000 0 320 chr7 156266700 156267000 0.653 59 chr7 156597300 156597600 0.5177 44 chr7 156720000 156720300 0.4971 66 chr7 156834900 156835200 0.5136 119 chr7 156911100 156911400 0.3751 71 chr7 157385700 157386000 0.4018 58 chr7 157441500 157441800 0.4444 37 chr7 157461300 157461600 0.5643 133 chr7 157470300 157470600 0.1719 79 chr7 157480200 157480500 0.6744 52 chr7 157482600 157482900 0.6484 52 chr7 157554000 157554300 0.239 37 chr7 157647000 157648500 0.1406 45 chr7 157696800 157697400 0.5917 72 chr7 157710900 157711200 0.0107 29 chr7 157716600 157717200 0.4229 79 chr7 157725300 157726200 0.4069 102 chr7 157731600 157734000 0.1766 43 chr7 157747200 157747500 0.6911 145 chr7 157748700 157749300 0.448 90 chr7 157761000 157761600 0.3301 61 chr7 157834200 157834500 0.6064 71 chr7 157838700 157839000 0.3828 58 chr7 157858200 157859700 0.0439 22 chr7 157861800 157862100 0.573 60 chr7 157866900 157867500 0.532 53 chr7 157902300 157902600 0.6294 84 chr7 157924800 157925400 0.3051 148 chr7 157972500 157972800 0.4917 51 chr7 157983000 157983300 0.1937 51 chr7 157994700 157995000 0.3452 12 chr7 158000700 158001000 0.1985 28 chr7 158058300 158060400 0.475 95 chr7 158087700 158090100 0.2276 150 chr7 158099100 158099700 0.1965 13 chr7 158126100 158126400 0.6144 28 chr7 158146800 158148900 0.0809 481 chr7 158151300 158151600 0.6329 369 chr7 158158500 158159100 0.4179 113 chr7 158188200 158188500 0.5522 35 chr7 158198700 158199000 0.361 49 chr7 158236800 158237700 0.0645 48 chr7 158266200 158266500 0.4194 46 chr7 158314800 158315400 0.491 127 chr7 158319900 158320200 0.5684 26 chr7 158330100 158330700 0.3832 95 chr7 158334600 158335800 0.4604 20 chr7 158338500 158340000 0 51 chr7 158342400 158342700 0.6674 59 chr7 158348400 158349600 0 67 chr7 158351700 158352300 0.3623 82 chr7 158360100 158361300 0.0717 272 chr7 158376900 158377200 0.5813 37 chr7 158407200 158407500 0.5262 44 chr7 158425200 158426400 0.3164 63 chr7 158427600 158427900 0.5859 17 chr7 158436300 158436600 0.5682 58 chr7 158454000 158455800 0.1578 97 chr7 158460000 158460300 0.4447 85 chr7 158464200 158464500 0.3787 53 chr7 158493300 158493900 0.4983 61 chr7 158508600 158508900 0.3956 57 chr7 158521500 158522400 0.3584 115 chr7 158551800 158552100 0.3367 63 chr7 158595000 158595300 0.5516 1135 chr7 158648700 158649000 0.3368 228 chr7 158667300 158668200 0.4676 56 chr7 158721900 158722200 0.1518 12 chr7 158803800 158804400 0.6372 50 chr7 158838900 158839200 0.1226 40 chr7 158915700 158917200 0.2381 131 chr7 158950500 158950800 0.4163 80 chr7 158982000 158982300 0.2211 55 chr7 158998500 158998800 0.5558 50 chr7 159006000 159006300 0.3863 25 chr7 159088800 159090900 0.0185 106 chr7 159129300 159129900 0.5843 57 chr7 159132000 159132300 0.3336 93 chr7 159152400 159152700 0.4408 57 chr7 159164100 159165000 0 40 chr7 159171300 159172200 0.3202 90 chr7 159175500 159175800 0.6332 62 chr7 159202800 159203700 0.2358 354 chr7 159333900 159334200 0.361 62 chr8 60300 79500 0 100 chr8 80700 201600 0 100 chr8 202800 203100 0.3563 71 chr8 207300 207600 0.2803 84 chr8 209400 211200 0.2803 84 chr8 231600 232200 0.3788 55 chr8 282300 282600 0.3514 48 chr8 303900 305400 0.0337 79 chr8 374400 374700 0.6665 125 chr8 378000 378300 0.1707 78 chr8 399300 399600 0.0768 55 chr8 402300 402900 0.1096 75 chr8 440700 441000 0.5092 65 chr8 588000 588300 0.6047 65 chr8 659100 659700 0.072 70 chr8 669000 669600 0.1689 63 chr8 676200 676500 0.314 29 chr8 679800 680400 0.216 105 chr8 696000 696600 0.6124 23 chr8 714000 714600 0 50 chr8 747600 748200 0.466 67 chr8 774600 776100 0.0591 97 chr8 795600 795900 0.682 60 chr8 807300 807600 0.074 51 chr8 840000 840300 0.1552 48 chr8 848400 848700 0.2068 34 chr8 895800 896100 0.1485 40 chr8 929100 929400 0.5656 12 chr8 933600 934200 0.0172 30 chr8 939000 939300 0.4575 61 chr8 977700 978600 0.3138 91 chr8 990300 993300 0.0112 103 chr8 1006500 1006800 0.6828 71 chr8 1013700 1015800 0.2977 43 chr8 1033800 1036200 0.0358 51 chr8 1103400 1103700 0.6236 46 chr8 1109100 1110000 0.0909 56 chr8 1180800 1181100 0.6016 75 chr8 1206300 1206600 0.4163 248 chr8 1215300 1215900 0.254 109 chr8 1236000 1236900 0.2093 38 chr8 1238700 1239900 0.187 28 chr8 1247400 1248300 0.4078 42 chr8 1297500 1298100 0.5074 88 chr8 1315500 1315800 0.5884 56 chr8 1350300 1351200 0.2703 85 chr8 1354500 1355100 0.4554 78 chr8 1375200 1376100 0.5104 49 chr8 1384500 1385700 0.2479 107 chr8 1392900 1393200 0.0876 23 chr8 1394400 1394700 0.0195 16 chr8 1396800 1400100 0 29 chr8 1401900 1402200 0.1493 28 chr8 1406400 1407600 0.163 43 chr8 1449900 1450500 0.4788 105 chr8 1461300 1461900 0.4681 31 chr8 1470900 1471500 0.0551 60 chr8 1521300 1521900 0.2901 55 chr8 1607700 1613400 0.0194 126 chr8 1642200 1644000 0.2423 49 chr8 1679100 1679400 0.5929 64 chr8 1691700 1692300 0 56 chr8 1785300 1785600 0.2657 77 chr8 1816200 1816500 0.6035 77 chr8 1832700 1833300 0.603 108 chr8 1852200 1852500 0.3471 45 chr8 1968600 1969200 0.1208 43 chr8 1990500 1991100 0.1201 29 chr8 2191200 2191800 0.0872 12 chr8 2238600 2239200 0.1718 70 chr8 2244300 2246100 0.1263 84 chr8 2247600 2248200 0.2173 94 chr8 2250600 2279100 0 86 chr8 2280300 2335500 0 87 chr8 2336700 2338800 0 70 chr8 2340600 2341500 0 75 chr8 2369100 2369700 0.4046 64 chr8 2379300 2379600 0.4123 35 chr8 2383200 2385000 0 89 chr8 2386500 2444100 0 138 chr8 2445300 2471100 0 138 chr8 2472600 2475600 0 138 chr8 2477700 2478300 0.5611 59 chr8 2480400 2481900 0.0038 62 chr8 3660300 3660600 0.5028 75 chr8 5057400 5057700 0.5115 58 chr8 5122800 5123400 0.4112 89 chr8 6297000 6297600 0.0219 60 chr8 6300000 6300600 0.081 65 chr8 6845400 6846000 0.5751 58 chr8 6972600 6972900 0.4545 169 chr8 6974400 7014300 0 170 chr8 7016400 7018500 0.0609 124 chr8 7104000 7104300 0.5936 47 chr8 7155000 7157100 0 83 chr8 7160400 7166400 0.0075 51 chr8 7167600 7175400 0.0075 51 chr8 7180500 7183800 0 39 chr8 7185000 7185300 0 39 chr8 7187100 7194300 0 49 chr8 7196400 7196700 0.605 23 chr8 7197900 7198200 0.079 21 chr8 7200300 7200900 0.3666 30 chr8 7205400 7205700 0.0495 39 chr8 7208700 7227900 0 70 chr8 7229400 7267800 0 129 chr8 7269000 7295400 0 129 chr8 7297800 7298100 0.4327 44 chr8 7299300 7300200 0 31 chr8 7301700 7311900 0 59 chr8 7314000 7318500 0 52 chr8 7320000 7327500 0 52 chr8 7329300 7333200 0 52 chr8 7335000 7335900 0.007 60 chr8 7337100 7343400 0 81 chr8 7345800 7346700 0.4205 73 chr8 7353600 7353900 0.5154 72 chr8 7370700 7374000 0 81 chr8 7377000 7378800 0.0258 81 chr8 7380900 7381500 0.0704 66 chr8 7383900 7384200 0.334 36 chr8 7385700 7386000 0.3503 82 chr8 7393500 7393800 0.3073 92 chr8 7396500 7396800 0.5333 29 chr8 7399200 7415400 0 97 chr8 7416600 7417500 0 97 chr8 7420500 7421100 0.3257 62 chr8 7423500 7434000 0 97 chr8 7435200 7445100 0 97 chr8 7446300 7471800 0 97 chr8 7473000 7475100 0.0178 67 chr8 7476600 7480800 0.0178 67 chr8 7482300 7506300 0 109 chr8 7507500 7547400 0 109 chr8 7551000 7556700 0 106 chr8 7558800 7564500 0 132 chr8 7567200 7605600 0 600 chr8 7607400 7616400 0.001 137 chr8 7667400 7679400 0 109 chr8 7681200 7682400 0 547 chr8 7683600 7718700 0 547 chr8 7719900 7769100 0 547 chr8 7772100 7772700 0 81 chr8 7773900 7833300 0 103 chr8 7835100 7835700 0 103 chr8 7837800 7859700 0 95 chr8 7860900 7875900 0 91 chr8 7877400 7886100 0 74 chr8 7890600 7890900 0.1497 65 chr8 7893900 7912500 0 92 chr8 7916400 7916700 0.0498 20 chr8 7917900 7918800 0 47 chr8 7923900 7924200 0.0503 11 chr8 7925400 7926600 0 55 chr8 7927800 7931100 0 55 chr8 7933200 7935000 0 70 chr8 7938000 7941600 0 75 chr8 7943100 7944300 0 42 chr8 7945800 7947900 0 42 chr8 7949700 7950000 0.0841 12 chr8 7952700 7972200 0 37 chr8 7973700 7975200 0 39 chr8 7977000 7990500 0 92 chr8 7991700 8015400 0 92 chr8 8016600 8059500 0 573 chr8 8061900 8080500 0 123 chr8 8081700 8082900 0 32 chr8 8084400 8084700 0 32 chr8 8086800 8087100 0 17 chr8 8091000 8091600 0.0257 23 chr8 8093100 8100900 0 48 chr8 8102100 8106000 0 26 chr8 8108400 8109600 0 25 chr8 8112000 8119500 0 145 chr8 8121000 8123100 0 145 chr8 8124300 8138400 0 145 chr8 8139600 8143200 0 145 chr8 8145000 8170500 0 145 chr8 8171700 8180400 0 145 chr8 8182500 8206200 0 145 chr8 8207700 8208600 0 145 chr8 8211000 8211600 0 45 chr8 8214300 8214600 0 45 chr8 8230200 8230800 0.0352 41 chr8 8233800 8234100 0.0596 78 chr8 8471100 8476800 0 81 chr8 9656700 9658500 0.145 58 chr8 9736500 9740100 0 65 chr8 10932600 10937700 0.007 87 chr8 12038100 12039600 0 36 chr8 12041400 12047400 0 47 chr8 12049800 12061800 0 47 chr8 12063000 12072900 0 45 chr8 12075000 12077100 0 20 chr8 12079800 12081300 0 13 chr8 12082500 12088800 0 101 chr8 12090300 12104400 0 101 chr8 12106500 12111900 0 37 chr8 12113400 12115500 0 29 chr8 12117300 12117600 0 48 chr8 12118800 12119100 0 48 chr8 12121200 12121500 0 23 chr8 12124500 12125100 0.3621 59 chr8 12148200 12149700 0 122 chr8 12151200 12174300 0 122 chr8 12176100 12178200 0 122 chr8 12179400 12194100 0 122 chr8 12195600 12196500 0 99 chr8 12198000 12210600 0 164 chr8 12211800 12230700 0 164 chr8 12285300 12318600 0 52 chr8 12322500 12322800 0.6904 24 chr8 12328800 12330900 0.0606 43 chr8 12332100 12333900 0.0606 43 chr8 12337200 12351300 0 116 chr8 12352800 12357900 0 55 chr8 12359700 12373500 0 56 chr8 12381300 12381600 0.531 56 chr8 12390600 12392100 0.1055 59 chr8 12393600 12422100 0 134 chr8 12423300 12442800 0 134 chr8 12444000 12484800 0 134 chr8 12486300 12521400 0 137 chr8 12522600 12532200 0 135 chr8 12533400 12537900 0 135 chr8 12567600 12568200 0.1653 121 chr8 12592200 12593100 0.4698 135 chr8 12594900 12595200 0.1692 156 chr8 12599100 12609900 0 119 chr8 12625500 12626100 0.0381 96 chr8 12671100 12671400 0.469 26 chr8 12807900 12808200 0.2995 50 chr8 13312200 13312500 0.4951 18 chr8 13920600 13920900 0.1277 21 chr8 14804100 14806500 0.0551 86 chr8 15143700 15144000 0.4961 27 chr8 15556500 15561300 0.0044 103 chr8 15576600 15581400 0.0167 97 chr8 16632900 16633200 0.4205 67 chr8 16672800 16674900 0.1635 76 chr8 16707600 16707900 0.5159 90 chr8 16946400 16948800 0.083 78 chr8 17104800 17105100 0.47 35 chr8 17819400 17819700 0.3365 14 chr8 18002100 18002700 0.046 56 chr8 18568800 18569400 0.2338 48 chr8 18597000 18598500 0 78 chr8 18756900 18757200 0.3486 59 chr8 18794100 18794700 0 68 chr8 18910200 18910500 0.1298 78 chr8 19386900 19387500 0.4648 65 chr8 19461300 19461900 0.6611 106 chr8 19974600 19974900 0.4984 43 chr8 20680500 20680800 0.3369 174 chr8 20682900 20683800 0.4288 84 chr8 20685000 20685600 0.0991 61 chr8 21243300 21243600 0.2835 62 chr8 21828900 21829500 0.1359 76 chr8 21830700 21831000 0.1359 76 chr8 23312100 23314200 0.1549 54 chr8 23645400 23646900 0.382 69 chr8 23648100 23648400 0.382 69 chr8 23649600 23650200 0.382 69 chr8 23817900 23818500 0.2619 61 chr8 24255000 24257700 0.0081 78 chr8 24451500 24452100 0.554 67 chr8 24560400 24560700 0.4639 56 chr8 24708000 24708300 0.6844 120 chr8 24783900 24785400 0.3576 57 chr8 25122000 25122300 0.4628 18 chr8 25216200 25217100 0 40 chr8 25656000 25656600 0.1468 63 chr8 25730700 25735500 0.0346 65 chr8 26005200 26005500 0.0446 17 chr8 26396100 26401500 0 97 chr8 26590500 26590800 0.3591 108 chr8 26676000 26676300 0.3907 62 chr8 26792700 26793000 0.3883 50 chr8 26937900 26938500 0.0935 82 chr8 27060900 27061500 0.0135 55 chr8 27113700 27119400 0 106 chr8 27550500 27551100 0.0278 77 chr8 27552600 27553200 0.0278 77 chr8 28292400 28292700 0.2216 43 chr8 28816500 28818900 0.2353 118 chr8 28839900 28840800 0.1123 96 chr8 28880400 28882200 0.3366 82 chr8 29120400 29121900 0.0084 83 chr8 29378400 29378700 0.4376 38 chr8 29598900 29599200 0.3607 67 chr8 29600700 29601000 0.3607 67 chr8 29666400 29666700 0.2312 27 chr8 29762700 29764200 0.3966 73 chr8 30246000 30247200 0.2982 66 chr8 30388200 30388800 0.4013 76 chr8 30393900 30408000 0 39 chr8 30985800 30987300 0.1627 67 chr8 31234200 31234800 0.4648 77 chr8 31853400 31853700 0.1847 74 chr8 31947000 31947300 0.3344 98 chr8 32816400 32819700 0 68 chr8 33019500 33020100 0.4357 69 chr8 33261900 33263100 0.0526 76 chr8 33657600 33658200 0.2075 73 chr8 34040700 34041000 0.6401 45 chr8 34612200 34612800 0.3882 79 chr8 35172000 35176800 0.0004 103 chr8 35523600 35525100 0 45 chr8 35528400 35532900 0 101 chr8 36106200 36106500 0.381 38 chr8 36390000 36394200 0.2272 126 chr8 36478800 36480900 0.2929 81 chr8 36484800 36488700 0.0252 96 chr8 36831600 36831900 0.234 60 chr8 37150200 37150500 0.312 13 chr8 37193400 37194300 0 74 chr8 37403700 37404000 0.574 68 chr8 37462500 37462800 0.5819 80 chr8 37927500 37927800 0.428 88 chr8 39491100 39492000 0.0059 46 chr8 39589800 39590100 0.5141 48 chr8 40432500 40438200 0 80 chr8 40648500 40649100 0.1323 71 chr8 40650300 40653000 0.1323 71 chr8 40721100 40721400 0.4615 54 chr8 40805100 40805400 0.539 52 chr8 41018700 41019000 0.1613 66 chr8 41033700 41034300 0.1698 61 chr8 41503200 41503800 0.0807 44 chr8 41625900 41626200 0.3484 60 chr8 42327900 42328200 0.557 19 chr8 42717000 42717300 0.6312 47 chr8 42730800 42731100 0.301 21 chr8 43032600 43032900 0.3318 100 chr8 43178700 43181100 0.1045 86 chr8 43237500 43242300 0.2996 592 chr8 43260900 43261500 0.0277 73 chr8 43263600 43263900 0.5381 43 chr8 43309800 43310100 0.3615 74 chr8 43393800 43395000 0.4669 74 chr8 43677900 43678200 0.4875 50 chr8 43740000 43740300 0.5234 44 chr8 43904700 43906800 0.0003 132 chr8 43938000 43939800 0 102 chr8 43941900 43950300 0 102 chr8 43951500 43953300 0 98 chr8 43955100 43959900 0 98 chr8 43961400 43962000 0 98 chr8 43965900 43983900 0 87 chr8 44034000 45877200 0 433 chr8 45930600 45930900 0 23 chr8 45932400 45933000 0 35 chr8 45936600 45939900 0 99 chr8 45941100 45946200 0 99 chr8 45948000 45957000 0 99 chr8 45958500 45966900 0 73 chr8 45968700 45969300 0.0632 58 chr8 46602600 46602900 0.4553 65 chr8 46983900 46984800 0.1117 79 chr8 47160300 47160600 0.3899 35 chr8 47161800 47162400 0.1361 94 chr8 47163600 47163900 0.1361 94 chr8 47176200 47176500 0.2741 56 chr8 47234700 47235300 0.0528 99 chr8 47301600 47302200 0.3474 62 chr8 47318700 47319000 0.1917 47 chr8 47331900 47333100 0.0299 126 chr8 48794400 48794700 0.2987 76 chr8 48795900 48796800 0.2987 76 chr8 48943800 48944400 0.0347 85 chr8 49790700 49791000 0.558 59 chr8 50088300 50088900 0.2643 80 chr8 50102400 50102700 0.385 62 chr8 50166000 50166900 0 51 chr8 50485500 50486700 0.2472 70 chr8 51534600 51535800 0.0571 86 chr8 51599700 51600000 0.2894 19 chr8 51825300 51825600 0.3808 36 chr8 52572600 52572900 0.4653 65 chr8 52698600 52698900 0.5702 53 chr8 53064900 53065200 0.5314 54 chr8 53610600 53615400 0.0498 55 chr8 53695500 53695800 0.6233 82 chr8 53948400 53948700 0.4132 28 chr8 54031800 54032700 0.0081 83 chr8 54059400 54059700 0.5077 30 chr8 54125700 54126300 0.2784 55 chr8 54594000 54594300 0.2646 63 chr8 55709100 55709400 0.5255 67 chr8 56271600 56271900 0.3555 44 chr8 56417100 56419500 0.1547 89 chr8 56815500 56815800 0.3474 67 chr8 56917200 56917500 0.5154 79 chr8 57070800 57071100 0.2241 71 chr8 57158700 57160800 0.1778 61 chr8 57206400 57209400 0.0003 596 chr8 57210900 57214200 0.0126 609 chr8 57662400 57662700 0.5761 51 chr8 58165800 58166100 0.5768 38 chr8 58176600 58176900 0.3982 66 chr8 58322700 58323300 0.3619 66 chr8 58374600 58375200 0.3882 91 chr8 58483500 58484700 0.0807 65 chr8 58915200 58920600 0 75 chr8 58950000 58950300 0.4273 45 chr8 59169300 59173200 0.0673 67 chr8 59870700 59871900 0.3685 83 chr8 59873400 59874900 0.4114 85 chr8 59886000 59886300 0.3658 94 chr8 60164400 60164700 0.285 61 chr8 60547800 60549300 0.4136 80 chr8 60760200 60760800 0.3686 60 chr8 60884400 60884700 0.5342 54 chr8 61116600 61117500 0.308 87 chr8 61120200 61120500 0.2611 84 chr8 61268400 61271400 0.0827 87 chr8 61752000 61753800 0.0095 47 chr8 61997100 61998000 0.2796 72 chr8 62017500 62017800 0.5461 36 chr8 63227400 63227700 0.588 67 chr8 63484500 63486000 0.2538 86 chr8 63487500 63487800 0.2453 78 chr8 63489000 63489600 0.2453 78 chr8 63797700 63802800 0.0122 97 chr8 64106100 64106700 0.2505 60 chr8 64241400 64241700 0.2617 66 chr8 64245000 64245900 0.5629 63 chr8 64646100 64646400 0.386 76 chr8 64685100 64687200 0.1411 58 chr8 65121600 65122200 0.1778 73 chr8 65124600 65125800 0.3255 89 chr8 65391600 65391900 0.563 51 chr8 65680800 65681100 0.591 67 chr8 65814300 65814600 0.4821 43 chr8 66024600 66026400 0 87 chr8 66321000 66321300 0.6554 82 chr8 66577200 66577500 0.3095 55 chr8 66703500 66703800 0.5995 57 chr8 66949800 66953700 0.1332 91 chr8 67273200 67273500 0.6033 48 chr8 67384800 67385100 0.4863 56 chr8 67461000 67461600 0.4414 50 chr8 67592400 67593900 0.1692 71 chr8 67652400 67652700 0.3957 81 chr8 68278200 68278500 0.399 52 chr8 68362800 68367900 0.0082 124 chr8 68418000 68418300 0.52 59 chr8 68614800 68615400 0.3437 101 chr8 68746500 68746800 0.2388 82 chr8 68748900 68749200 0.2388 82 chr8 68906100 68907000 0.3354 39 chr8 69019800 69020100 0.2728 86 chr8 69021300 69021600 0.2728 86 chr8 69022800 69023100 0.2418 94 chr8 69024300 69024600 0.2418 94 chr8 69245400 69246000 0.4176 50 chr8 69255600 69260100 0.1533 94 chr8 69445500 69445800 0.524 38 chr8 69689100 69689700 0.0514 146 chr8 69841200 69841500 0.6576 48 chr8 69879300 69879600 0.4265 64 chr8 70435200 70435500 0.4164 25 chr8 70671300 70672500 0.0517 56 chr8 70684800 70685100 0.4002 57 chr8 70696500 70697700 0.3745 95 chr8 70736700 70738200 0.1974 90 chr8 71406900 71412300 0.0079 107 chr8 71639100 71639400 0.5254 40 chr8 71785800 71786100 0.3523 53 chr8 72148200 72153000 0.045 66 chr8 72480000 72480300 0.0639 86 chr8 72482100 72485400 0.0639 86 chr8 72875700 72881700 0 93 chr8 73255500 73255800 0.4985 71 chr8 73301100 73301400 0.5209 67 chr8 73720500 73720800 0.2726 28 chr8 73862400 73863300 0.3105 77 chr8 74399700 74400000 0.3421 63 chr8 74430900 74431200 0.4266 29 chr8 74595300 74599200 0.1755 81 chr8 74680800 74681100 0.4623 71 chr8 74733300 74733900 0.2672 75 chr8 74868900 74870700 0.4512 92 chr8 74871900 74872500 0.3532 55 chr8 74943900 74948100 0.102 80 chr8 74964600 74964900 0.3958 36 chr8 75105000 75105300 0.4765 55 chr8 75134100 75134400 0.5806 54 chr8 75279000 75279300 0.0279 91 chr8 75280500 75283200 0.0279 91 chr8 75293400 75293700 0.5698 46 chr8 75324900 75328800 0.2249 109 chr8 75444300 75448200 0 74 chr8 75621300 75627000 0 70 chr8 76311300 76313400 0.359 70 chr8 76425300 76426200 0 58 chr8 76644900 76645500 0.3808 33 chr8 77090700 77092500 0.478 71 chr8 77303100 77303700 0.4416 59 chr8 77473200 77473500 0.2324 44 chr8 77645400 77645700 0.3286 41 chr8 77944800 77945100 0.4738 73 chr8 78356100 78356700 0.4556 82 chr8 78768300 78768600 0.4109 64 chr8 79170600 79174500 0 71 chr8 79273500 79273800 0.5468 77 chr8 80072400 80072700 0.4059 49 chr8 80135700 80136000 0.2276 64 chr8 80358600 80359200 0.0125 87 chr8 80666700 80667000 0.3716 66 chr8 81134100 81134400 0.2326 45 chr8 81327600 81330600 0.245 74 chr8 81428700 81430200 0.2223 73 chr8 81768600 81770100 0.1745 75 chr8 81771600 81772500 0.1092 88 chr8 81773700 81774000 0.1092 88 chr8 82117500 82117800 0.5527 93 chr8 82284300 82285500 0.2576 51 chr8 82508100 82509300 0.4226 76 chr8 82658100 82658400 0.6646 40 chr8 82838400 82838700 0.6092 52 chr8 83341200 83341800 0.2907 40 chr8 83439300 83441100 0.0894 79 chr8 83448300 83448900 0.0802 70 chr8 83450400 83453100 0.0802 70 chr8 83845200 83845500 0.5919 23 chr8 83883600 83884200 0 27 chr8 83891400 83891700 0.3934 58 chr8 84015300 84015600 0.4674 81 chr8 84017700 84018000 0.4002 56 chr8 84050400 84050700 0.2959 54 chr8 84310800 84311100 0.6589 21 chr8 84389700 84390000 0.4063 79 chr8 84420600 84423000 0.1842 86 chr8 84464400 84466500 0.0535 82 chr8 84568500 84568800 0.4477 38 chr8 84615600 84620400 0.0074 185 chr8 84856800 84857100 0.3882 41 chr8 84972300 84973200 0.3655 78 chr8 85043400 85043700 0.1693 28 chr8 85642800 85644000 0 1042 chr8 85645200 85664400 0 1042 chr8 85714200 85828800 0 2037 chr8 86306700 86307000 0.6788 30 chr8 86586600 86588700 0.1868 85 chr8 86804100 86804400 0.1781 70 chr8 86806800 86807100 0.4547 75 chr8 86819100 86819400 0.6726 11 chr8 87224100 87225300 0.1791 75 chr8 87227400 87227700 0.1791 75 chr8 87322500 87327300 0.1693 73 chr8 87377700 87378300 0.4317 59 chr8 87413700 87414000 0.4552 64 chr8 87421500 87422100 0.5216 77 chr8 87425700 87426000 0.4744 76 chr8 87484200 87487200 0.2286 91 chr8 87625500 87627000 0.0653 87 chr8 87629100 87630000 0.0653 87 chr8 87737400 87737700 0.5537 26 chr8 88149900 88154700 0.0302 89 chr8 88251600 88252200 0.1668 71 chr8 88345800 88346100 0.1275 64 chr8 88380000 88380300 0.1809 12 chr8 88533300 88533600 0.4652 56 chr8 88646400 88646700 0.495 64 chr8 88686300 88691700 0 72 chr8 88855800 88856100 0.5874 87 chr8 89030400 89030700 0.6933 34 chr8 89088900 89089200 0.3009 68 chr8 89191500 89191800 0.473 77 chr8 89391000 89391300 0.4737 71 chr8 89444100 89444700 0.2756 70 chr8 89512500 89512800 0.4642 76 chr8 89537700 89540100 0.4681 61 chr8 89552400 89557200 0.0307 68 chr8 89699700 89700000 0.3789 70 chr8 90057000 90057300 0.3577 33 chr8 90684300 90685800 0.0348 101 chr8 91170600 91170900 0.2035 67 chr8 91193100 91194300 0.0993 69 chr8 91306800 91307700 0.1406 79 chr8 91520100 91527900 0 76 chr8 91558800 91564500 0 90 chr8 91796400 91796700 0.3771 77 chr8 91798800 91799100 0.2092 94 chr8 91895400 91896000 0.1773 84 chr8 92364600 92364900 0.3462 87 chr8 92367000 92367600 0.3462 87 chr8 92368800 92369100 0.3741 75 chr8 92382900 92384100 0.2742 59 chr8 92484300 92484600 0.594 49 chr8 92578200 92578800 0.5016 71 chr8 93406200 93412500 0 140 chr8 93468000 93468600 0.2935 87 chr8 93485100 93485400 0.1799 48 chr8 93668700 93669000 0.3632 63 chr8 94415400 94416300 0.1936 80 chr8 94590000 94592400 0 76 chr8 94804200 94804500 0.5239 44 chr8 95188500 95188800 0.3715 44 chr8 95207400 95207700 0.3716 81 chr8 95368500 95372100 0.0939 81 chr8 95373900 95375100 0.0939 81 chr8 95410200 95410500 0.4602 60 chr8 95552100 95557800 0.0304 83 chr8 95621100 95621400 0.4976 76 chr8 95747400 95747700 0.421 61 chr8 95796900 95797200 0.6418 75 chr8 95992500 95992800 0.5072 71 chr8 96085800 96086100 0.3706 34 chr8 96118500 96119400 0.1411 96 chr8 96121200 96122400 0.1411 96 chr8 96556500 96557400 0.2088 87 chr8 96576300 96576600 0.4683 16 chr8 96695100 96695400 0.1892 52 chr8 96738900 96740700 0.2035 81 chr8 96741900 96742200 0.2035 81 chr8 97039800 97040100 0.5789 75 chr8 97188000 97188300 0.4513 28 chr8 97296000 97301400 0.0152 120 chr8 97583100 97583400 0.4403 26 chr8 97590900 97591500 0.265 73 chr8 97592700 97593600 0.265 73 chr8 97771200 97771500 0.2794 75 chr8 98261100 98266200 0.2329 75 chr8 98288400 98288700 0.3979 80 chr8 98584500 98586600 0.2381 75 chr8 98588400 98589300 0.4084 121 chr8 98615100 98620500 0.0462 88 chr8 98652300 98652900 0.2071 80 chr8 98739600 98739900 0.5785 65 chr8 99052200 99052500 0.0775 60 chr8 99083400 99084000 0.2628 68 chr8 99220800 99221400 0.1743 44 chr8 99293100 99294000 0.1339 80 chr8 99426000 99427500 0.0329 68 chr8 99543600 99543900 0.5977 61 chr8 99691500 99695400 0 79 chr8 99849900 99850200 0.2795 54 chr8 100426500 100426800 0.6407 211 chr8 100790700 100791000 0.6049 72 chr8 100856700 100857000 0.5257 61 chr8 100891500 100891800 0.214 37 chr8 101652300 101652600 0.4956 81 chr8 101676000 101676300 0.3726 62 chr8 101678700 101681100 0.1486 86 chr8 101682600 101684100 0.3164 87 chr8 101893500 101894400 0.1275 75 chr8 101896800 101897400 0.1993 45 chr8 102003900 102004200 0.2991 70 chr8 102135000 102136800 0.2491 71 chr8 102138000 102138900 0.2491 71 chr8 103091700 103092000 0.6135 29 chr8 103292700 103293300 0.3674 65 chr8 103603500 103608000 0.0797 77 chr8 103783800 103785300 0.1139 70 chr8 103786800 103788600 0.383 80 chr8 104058000 104059800 0.4039 74 chr8 104285400 104285700 0.3767 62 chr8 104292300 104292600 0.3578 59 chr8 104526300 104526900 0.2353 70 chr8 104627400 104628300 0.254 62 chr8 104739900 104745600 0 75 chr8 105169200 105169500 0.0012 24 chr8 105308400 105308700 0.3806 80 chr8 105360600 105361200 0.2246 52 chr8 105366900 105368100 0.0031 62 chr8 105879300 105879600 0.5731 15 chr8 106488000 106489200 0.3407 85 chr8 106716300 106716600 0.5234 19 chr8 106894500 106894800 0.3763 75 chr8 107241300 107241900 0.2823 86 chr8 107243100 107244000 0.2823 86 chr8 107245800 107246400 0.2823 86 chr8 107556600 107556900 0.343 52 chr8 107713800 107714100 0.4951 60 chr8 107891100 107891700 0.1317 40 chr8 107893200 107893800 0.2401 90 chr8 108932100 108932400 0.4885 69 chr8 108947100 108947400 0.3486 47 chr8 109498200 109498500 0.6442 32 chr8 109591500 109591800 0.4274 58 chr8 110153400 110153700 0.3065 78 chr8 110301300 110301600 0.4929 36 chr8 110429100 110429400 0.4478 62 chr8 110728200 110728500 0.5202 67 chr8 110888100 110888400 0.0564 29 chr8 110952600 110957100 0.0172 74 chr8 111156000 111156300 0.0965 23 chr8 111424800 111425100 0.4557 52 chr8 111634800 111636000 0.1845 78 chr8 112213500 112213800 0.3862 58 chr8 112595400 112596000 0.0549 70 chr8 112597500 112599600 0.0549 70 chr8 112911600 112911900 0.1442 210 chr8 112928400 112929300 0.4931 76 chr8 113019900 113020200 0.4586 46 chr8 113269800 113270100 0.3895 66 chr8 113302800 113304900 0.078 79 chr8 113451600 113452500 0.0702 56 chr8 113511300 113512500 0.2314 50 chr8 113522700 113523000 0.3129 42 chr8 113568300 113569500 0.2777 57 chr8 113609700 113612100 0.3303 61 chr8 113674500 113674800 0.1035 81 chr8 113780100 113780400 0.2638 56 chr8 113906700 113907600 0.0692 68 chr8 113908800 113911200 0.0692 68 chr8 114000900 114003600 0.1511 80 chr8 114005100 114005400 0.1511 80 chr8 114043800 114046200 0.2358 72 chr8 114164700 114165000 0.3204 52 chr8 114177300 114178200 0.2311 69 chr8 114284700 114285000 0.6464 98 chr8 114286200 114286500 0.2974 68 chr8 114506100 114509700 0.0847 83 chr8 114581700 114582600 0.168 72 chr8 114583800 114584400 0.168 72 chr8 114632100 114633600 0.0736 61 chr8 114634800 114635100 0.2448 67 chr8 114654000 114654300 0.5177 42 chr8 115216500 115216800 0.1978 69 chr8 115476000 115476300 0.3492 18 chr8 116191500 116191800 0.3388 35 chr8 116678100 116680800 0.0955 88 chr8 117211200 117211500 0.5979 24 chr8 117639300 117639600 0.4704 57 chr8 117700500 117700800 0.2934 29 chr8 118215900 118216200 0.3555 81 chr8 118719300 118719600 0.3725 53 chr8 118875600 118875900 0.0781 53 chr8 118977300 118977600 0.4172 78 chr8 119159700 119162700 0.0036 81 chr8 119163900 119164200 0.0036 81 chr8 119235900 119236500 0.0197 68 chr8 119475300 119476500 0.2519 70 chr8 119498700 119499300 0.3546 37 chr8 120190800 120191400 0.4637 71 chr8 120351000 120354300 0.0046 71 chr8 120522000 120522300 0.1721 35 chr8 120636300 120636600 0.2827 83 chr8 120645600 120649800 0.0217 85 chr8 120886200 120886800 0.3927 64 chr8 121423500 121423800 0.5282 21 chr8 121508400 121509900 0.3907 82 chr8 121518900 121519200 0.4104 76 chr8 121656600 121656900 0.1848 71 chr8 121782000 121782300 0.2049 57 chr8 122245200 122250300 0.0467 82 chr8 122327100 122331900 0.2322 84 chr8 122445300 122445600 0.2152 65 chr8 122479800 122480700 0.3724 70 chr8 122704500 122704800 0.5528 40 chr8 123315000 123316500 0.2322 81 chr8 123855900 123856200 0.5075 23 chr8 123860100 123863700 0.034 84 chr8 123865200 123865500 0.034 84 chr8 124171800 124172100 0.4381 74 chr8 124908300 124908600 0.4742 60 chr8 125215200 125215500 0.4866 59 chr8 125333400 125333700 0.5287 44 chr8 125583000 125589000 0 85 chr8 125741100 125741400 0.5332 106 chr8 126203100 126203400 0.4902 70 chr8 126236700 126237000 0.1965 21 chr8 126313500 126318300 0.0197 69 chr8 126344100 126344400 0.3677 62 chr8 126346800 126347400 0.4079 98 chr8 126801300 126804000 0.0722 89 chr8 126888600 126888900 0.422 76 chr8 126980700 126985500 0.0071 63 chr8 127192800 127193400 0.2683 54 chr8 127203300 127204200 0.1562 51 chr8 127312200 127312500 0.3236 96 chr8 127313700 127314000 0.3236 96 chr8 127315800 127316100 0.3511 25 chr8 127317300 127320600 0.0484 74 chr8 127380000 127381800 0.0013 57 chr8 127434300 127434600 0.4437 72 chr8 127630200 127630800 0.2566 75 chr8 128118000 128118900 0.327 59 chr8 128328900 128329200 0.3659 48 chr8 128347500 128347800 0.527 70 chr8 128452800 128459100 0 92 chr8 128613300 128613600 0.4729 46 chr8 128709600 128709900 0.2136 75 chr8 128711400 128711700 0.2136 75 chr8 128715600 128719200 0.0498 57 chr8 128748000 128748900 0.3943 70 chr8 128750100 128750400 0.3943 70 chr8 128825100 128827200 0.1021 71 chr8 128892000 128897100 0.0915 59 chr8 129152100 129157500 0.0904 72 chr8 129327600 129329400 0.0595 94 chr8 129496200 129497700 0.0289 40 chr8 129606000 129606300 0.4362 40 chr8 130049400 130050000 0.4889 42 chr8 131064300 131064600 0.4064 89 chr8 131066400 131066700 0.4064 89 chr8 131156100 131156400 0.4844 20 chr8 131550600 131550900 0.3706 56 chr8 131637900 131639400 0.312 87 chr8 131772300 131776800 0.0213 98 chr8 131871600 131872500 0.1703 83 chr8 132617700 132618900 0.0511 77 chr8 133313100 133314900 0 60 chr8 133317300 133317600 0.4347 34 chr8 133411200 133411500 0.3764 47 chr8 133728900 133729500 0.3202 65 chr8 134070900 134076900 0 98 chr8 134189700 134190600 0.2371 91 chr8 134243100 134243700 0.4296 87 chr8 134416200 134417400 0.2952 57 chr8 134497800 134499300 0.335 60 chr8 134930400 134930700 0.6234 57 chr8 135259800 135261000 0.1285 70 chr8 135262200 135264300 0.0609 83 chr8 135340200 135340800 0.2326 59 chr8 135876300 135881700 0 69 chr8 135884100 135885000 0.1787 71 chr8 135954600 135955500 0.0074 86 chr8 135959700 135960000 0.4522 44 chr8 136190700 136194600 0.1389 84 chr8 136437300 136443900 0 134 chr8 136575300 136575600 0.585 44 chr8 136704600 136704900 0.2952 30 chr8 136748100 136749600 0.4462 74 chr8 136890900 136891200 0.4128 65 chr8 136917900 136918200 0.3491 62 chr8 136955700 136956000 0.6171 15 chr8 136991700 136992300 0.4207 19 chr8 137236200 137236800 0.0495 27 chr8 137295600 137295900 0.6273 21 chr8 137558700 137559300 0.2577 89 chr8 137560500 137560800 0.2281 65 chr8 138037200 138037500 0.3008 59 chr8 138042900 138043200 0.4185 68 chr8 138045600 138045900 0.5407 66 chr8 138121800 138122100 0.459 45 chr8 138952500 138952800 0.0535 71 chr8 139460100 139463400 0.1756 112 chr8 139872600 139872900 0.4809 52 chr8 140157000 140157300 0.4425 132 chr8 140196000 140196600 0.1362 102 chr8 140292600 140293200 0.3371 59 chr8 140338800 140339100 0.6322 55 chr8 140497800 140499600 0.3421 67 chr8 140622300 140623200 0.1398 43 chr8 140928900 140929200 0.3703 41 chr8 141262200 141262500 0.1921 65 chr8 141335100 141335700 0.021 83 chr8 141429600 141429900 0.4208 52 chr8 141445500 141445800 0.5823 47 chr8 141492300 141493200 0 325 chr8 141540900 141541200 0.5352 81 chr8 141550500 141551400 0.2214 40 chr8 141632100 141634500 0 62 chr8 141713700 141714000 0.4446 156 chr8 141873900 141874200 0.6396 162 chr8 141970800 141971100 0.0677 53 chr8 142242000 142242300 0.5657 192 chr8 142255500 142256400 0.4424 157 chr8 142287300 142287600 0.6823 50 chr8 142390500 142391100 0.2071 98 chr8 142685100 142685400 0.4618 56 chr8 142760700 142761300 0.2302 75 chr8 142881000 142882200 0.2491 117 chr8 142898100 142898700 0.3789 61 chr8 143041800 143042100 0.3938 46 chr8 143085000 143085300 0.4484 59 chr8 143167200 143168100 0.4575 22 chr8 143205000 143205900 0.3583 74 chr8 143256000 143256300 0.6195 37 chr8 143340000 143340300 0.6531 22 chr8 143458500 143458800 0.2622 57 chr8 143487000 143488500 0.4929 52 chr8 143492700 143493000 0.4634 50 chr8 143641500 143641800 0.3764 76 chr8 143661600 143662500 0.2343 88 chr8 143692500 143692800 0.3108 38 chr8 143695800 143696100 0.4388 54 chr8 143858100 143866500 0 150 chr8 143981400 143982000 0.2027 142 chr8 144021600 144021900 0.5707 33 chr8 144125400 144126000 0.4887 792 chr8 144231000 144231300 0.2118 75 chr8 144281100 144281400 0.4415 54 chr8 144380400 144382200 0.4128 102 chr8 144531300 144531900 0.0396 171 chr8 144556500 144556800 0.5958 118 chr8 144612000 144612900 0.0068 63 chr8 144624600 144626400 0.1235 60 chr8 144634200 144634800 0.0431 32 chr8 144687000 144687600 0.3703 67 chr8 144811500 144811800 0.6969 50 chr8 144838800 144839100 0.5389 83 chr8 144921600 144921900 0.6232 106 chr9 9900 39900 0 182 chr9 49200 53400 0.0617 132 chr9 55800 56700 0.0771 133 chr9 64200 72600 0 160 chr9 74700 75000 0.6027 60 chr9 76200 78000 0.0222 125 chr9 84300 84600 0.3841 96 chr9 87000 87300 0.2607 81 chr9 88800 89100 0.1925 101 chr9 90300 90600 0.1925 101 chr9 92100 92400 0.1925 101 chr9 96300 96900 0.1799 86 chr9 100200 100500 0.3055 106 chr9 102000 102300 0.3055 106 chr9 107400 107700 0.3139 89 chr9 118800 126600 0.0606 106 chr9 128100 128400 0.002 133 chr9 130200 138600 0.002 133 chr9 140700 153600 0.1041 73 chr9 155100 155400 0.1041 73 chr9 156900 157200 0.2045 68 chr9 159000 159300 0.2045 68 chr9 164100 166500 0.0895 65 chr9 167700 171000 0.0808 95 chr9 172500 173400 0.2202 58 chr9 176100 176400 0.1479 53 chr9 180600 180900 0.5914 75 chr9 183600 185400 0.0012 77 chr9 187800 188100 0.384 38 chr9 189600 190200 0.1762 74 chr9 192600 192900 0.5018 14 chr9 194100 195300 0.2737 29 chr9 200100 200400 0.4821 62 chr9 320100 322200 0 60 chr9 380100 381000 0 57 chr9 399900 401100 0.3634 111 chr9 608100 608400 0.4635 45 chr9 707400 708300 0.0013 84 chr9 808800 809100 0.3369 121 chr9 998700 999000 0.2021 49 chr9 1224900 1229700 0.0053 80 chr9 1338000 1338900 0 78 chr9 1570500 1570800 0.3575 57 chr9 1572000 1572300 0.3342 82 chr9 1809300 1809600 0.5115 50 chr9 3147300 3147600 0.3637 49 chr9 3504300 3504900 0.2378 30 chr9 3780600 3780900 0.1316 40 chr9 4188300 4188600 0.5371 47 chr9 4346700 4347000 0.26 24 chr9 4608000 4608600 0.0984 90 chr9 4610100 4611300 0.3189 66 chr9 4713900 4714200 0.6313 273 chr9 5239800 5243100 0 76 chr9 5302800 5304300 0 56 chr9 5337900 5339700 0 71 chr9 5680800 5681100 0.461 44 chr9 5684100 5684400 0.4075 97 chr9 5685900 5686200 0.5725 64 chr9 5962200 5964900 0.009 68 chr9 6137700 6141600 0.1928 95 chr9 6179100 6179700 0.1712 98 chr9 6182400 6182700 0.1712 98 chr9 6387900 6388200 0.3341 35 chr9 6623100 6623400 0.343 69 chr9 6659700 6660000 0.6265 35 chr9 6808200 6808500 0.2193 59 chr9 6999300 6999600 0.2873 31 chr9 7667400 7668300 0.0211 74 chr9 7867500 7867800 0.4123 59 chr9 8002500 8002800 0.3868 77 chr9 8017800 8018100 0.1389 53 chr9 8334600 8334900 0.1419 33 chr9 9413100 9413400 0.2793 42 chr9 9472200 9472500 0.6228 38 chr9 9642000 9642300 0.2654 55 chr9 9931800 9933000 0.1648 73 chr9 9936600 9936900 0.2811 62 chr9 9950400 9950700 0.3582 47 chr9 10018500 10018800 0.6241 44 chr9 10020300 10022400 0 40 chr9 10136700 10137600 0 90 chr9 10142100 10143000 0.311 67 chr9 10498800 10499100 0.2606 33 chr9 10763100 10763400 0.6731 41 chr9 10850700 10851000 0.4401 63 chr9 12335100 12339000 0.0957 78 chr9 12354600 12354900 0.5568 46 chr9 12476700 12478200 0.0531 69 chr9 12556800 12559500 0 67 chr9 12884100 12884400 0.3815 78 chr9 13038300 13040400 0.0681 72 chr9 13043100 13043400 0.0681 72 chr9 14664900 14669400 0.0155 83 chr9 14874300 14874600 0.3216 47 chr9 15326400 15327000 0.2868 63 chr9 15394800 15395100 0.5786 26 chr9 15406200 15407700 0.0065 43 chr9 15945300 15945600 0.535 67 chr9 15948300 15948600 0.4108 49 chr9 16066500 16068300 0.2828 67 chr9 16465800 16467600 0 69 chr9 16905600 16905900 0.4917 35 chr9 17258100 17258400 0.4276 68 chr9 17264100 17264700 0.49 49 chr9 17285400 17287800 0.1519 83 chr9 17289300 17289600 0.4153 79 chr9 17338200 17338500 0.6547 40 chr9 17541900 17542200 0.3432 65 chr9 17543700 17544600 0.3432 65 chr9 17576400 17576700 0.1145 40 chr9 17685900 17686800 0.0629 59 chr9 17764800 17765400 0.1421 73 chr9 17780700 17781300 0.017 60 chr9 17909100 17909400 0.367 54 chr9 17912400 17912700 0.0514 26 chr9 17923200 17925600 0.2098 105 chr9 17944500 17945400 0.0754 59 chr9 17973300 17973600 0.1743 23 chr9 18000000 18000300 0.6066 50 chr9 18168600 18168900 0.4382 44 chr9 18197400 18198900 0.108 85 chr9 18578700 18579000 0.3502 55 chr9 18645600 18645900 0.2087 61 chr9 18711600 18712200 0.3559 100 chr9 18713700 18717000 0.3559 100 chr9 18751800 18752100 0.4514 13 chr9 18840000 18841200 0.4517 83 chr9 19058400 19058700 0.6723 50 chr9 19392300 19392600 0.4106 46 chr9 19536300 19542000 0.0128 84 chr9 19837200 19837500 0.5724 48 chr9 19906200 19906500 0.3389 59 chr9 20655900 20658000 0.0304 69 chr9 20751300 20752200 0.2657 72 chr9 20767200 20768400 0.3596 64 chr9 20920200 20920800 0.4029 73 chr9 20937000 20937300 0.2011 52 chr9 21367500 21367800 0.1713 66 chr9 21440700 21441000 0.178 65 chr9 21537300 21538500 0.0006 107 chr9 21539700 21541800 0.1682 83 chr9 21705000 21705300 0.351 82 chr9 22093200 22093800 0.4261 66 chr9 22095600 22095900 0.3759 66 chr9 22348800 22352400 0.0746 58 chr9 22353600 22354200 0.1106 111 chr9 22504200 22504500 0.6837 32 chr9 22568100 22568400 0.3197 45 chr9 22597500 22597800 0.6227 50 chr9 22700700 22702200 0.052 64 chr9 22734900 22736400 0.2147 48 chr9 22999500 22999800 0.0251 23 chr9 23075100 23075400 0.1368 28 chr9 23936100 23937300 0.0312 57 chr9 24226200 24226500 0.24 80 chr9 24575100 24577200 0.0318 78 chr9 24579300 24579600 0.0318 78 chr9 24753600 24753900 0.3781 30 chr9 25073400 25074000 0.1617 107 chr9 25161600 25161900 0.4988 12 chr9 25285800 25286100 0.2672 52 chr9 25484700 25485000 0.5437 66 chr9 26254200 26254500 0.3586 44 chr9 26586900 26587200 0.5013 68 chr9 26963400 26964300 0.1229 75 chr9 27691200 27696300 0.0681 89 chr9 28097400 28097700 0.1949 40 chr9 28112100 28117500 0 85 chr9 28189200 28189800 0.3076 102 chr9 28201200 28201500 0.389 56 chr9 28349100 28353300 0.234 84 chr9 28554300 28555500 0.369 95 chr9 28991400 28991700 0.4323 27 chr9 28994400 28994700 0.5701 43 chr9 29306100 29306700 0.1966 66 chr9 29452800 29453100 0.5177 67 chr9 29624700 29625000 0.0911 22 chr9 30110700 30111000 0.4998 59 chr9 30171300 30171600 0.2917 93 chr9 30427800 30429300 0.3837 56 chr9 30541800 30542400 0.4282 43 chr9 30544200 30545400 0.2373 35 chr9 30637200 30637500 0.4997 53 chr9 30957000 30957300 0.4877 60 chr9 31056600 31056900 0.1262 12 chr9 31060500 31060800 0.32 12 chr9 31294500 31294800 0.5524 83 chr9 31296900 31299900 0.0765 78 chr9 31552200 31553700 0.1267 77 chr9 31620300 31620600 0.5664 26 chr9 31632900 31633500 0.264 72 chr9 31934400 31934700 0.513 59 chr9 32152200 32152500 0.2477 77 chr9 32154600 32154900 0.3548 64 chr9 32189700 32190000 0.3111 81 chr9 32212800 32213400 0.3022 64 chr9 32225400 32225700 0.3949 75 chr9 32711100 32713800 0.0216 46 chr9 32715600 32716200 0.3751 33 chr9 32730300 32730600 0.4442 70 chr9 32731800 32734800 0.2253 77 chr9 33183300 33183600 0.5082 35 chr9 33252000 33252300 0.579 36 chr9 33398100 33398400 0.4445 59 chr9 33423600 33424200 0.3451 74 chr9 33539700 33540000 0.3962 89 chr9 33542100 33542400 0.3341 54 chr9 33563400 33563700 0.4203 66 chr9 33579000 33579300 0.3023 45 chr9 34138200 34138500 0.3667 67 chr9 34244400 34245900 0 68 chr9 34273200 34275000 0 69 chr9 34530900 34531200 0.6256 77 chr9 34725300 34725600 0.39 56 chr9 34762800 34763100 0.3937 87 chr9 34847400 34847700 0.3317 104 chr9 34872600 34873200 0.2157 72 chr9 35372400 35374200 0 48 chr9 35803200 35803500 0.6152 44 chr9 35804700 35805000 0.4632 47 chr9 35884200 35884500 0.2678 51 chr9 35913300 35914500 0.3722 136 chr9 36057900 36058500 0.4389 62 chr9 36309300 36309600 0.3801 33 chr9 36347100 36347400 0.1753 232 chr9 36614400 36615900 0.2102 76 chr9 37047600 37047900 0.5517 60 chr9 37093200 37093500 0.2615 76 chr9 38095800 38096100 0.4847 47 chr9 38241300 38243700 0.0138 56 chr9 38325300 38325900 0.1918 53 chr9 38556000 38556600 0.306 40 chr9 38564700 38565300 0.4122 54 chr9 38580600 38580900 0.271 59 chr9 38604300 38604600 0.4318 51 chr9 38774100 38779200 0 48 chr9 38781000 38782500 0.051 78 chr9 38783700 38784900 0.0923 57 chr9 38786400 38789100 0.0923 57 chr9 38792400 38792700 0.4295 58 chr9 38798100 38798400 0.1305 45 chr9 38800800 38801100 0.2731 27 chr9 38808300 38808600 0.3182 37 chr9 38809800 38810100 0.454 42 chr9 38811900 38814600 0.1935 44 chr9 38816100 38816400 0.0544 56 chr9 38818500 38821800 0.0544 56 chr9 38823600 38825100 0.0176 56 chr9 38827200 38827500 0.6021 50 chr9 38829000 38829600 0 84 chr9 38830800 38916600 0 84 chr9 38918700 38922000 0 152 chr9 38923200 38988900 0 152 chr9 38991600 38991900 0.532 109 chr9 38998500 38998800 0.0713 97 chr9 39000600 39002100 0.459 129 chr9 39007200 39007500 0.4425 66 chr9 39010200 39010500 0.5602 42 chr9 39014700 39015600 0.5486 170 chr9 39018300 39018900 0.4208 83 chr9 39029100 39030600 0.1851 152 chr9 39032100 39033600 0.1851 152 chr9 39053100 39053400 0.2562 85 chr9 39060900 39061500 0.2873 149 chr9 39065400 39066600 0.4276 68 chr9 39070200 39070500 0.1633 101 chr9 39071700 39073200 0.1633 101 chr9 39075000 39075600 0.4512 97 chr9 39079800 39080100 0.4682 81 chr9 39091800 39092400 0.4241 89 chr9 39102600 39102900 0.4395 122 chr9 39128400 39128700 0.6662 67 chr9 39144600 39145500 0.4868 93 chr9 39150300 39150900 0 59 chr9 39152100 39248400 0 59 chr9 39252000 39252900 0 44 chr9 39254100 39288000 0 55 chr9 39289500 39358500 0 81 chr9 39359700 39360600 0 81 chr9 39362100 39446400 0 83 chr9 39447900 39449400 0.2507 66 chr9 39452400 39454200 0.114 71 chr9 39455700 39456000 0.114 71 chr9 39457200 39457500 0.114 71 chr9 39458700 39459000 0.5116 70 chr9 39462600 39462900 0.5355 79 chr9 39465000 39466200 0.1469 59 chr9 39469200 39469500 0.1398 66 chr9 39471300 39472200 0.1398 66 chr9 39473700 39474300 0.2844 65 chr9 39475800 39476100 0.2844 65 chr9 39479100 39480600 0.343 58 chr9 39483300 39483600 0.4006 53 chr9 39486000 39498600 0 131 chr9 39499800 39532500 0 131 chr9 39534000 39537600 0 111 chr9 39543000 39543900 0.2878 109 chr9 39545100 39545400 0.4268 91 chr9 39548700 39549600 0.015 92 chr9 39553200 39554100 0.5101 121 chr9 39555900 39556200 0.5417 97 chr9 39557700 39558000 0.5321 121 chr9 39561600 39561900 0.4226 82 chr9 39563100 39565500 0.3203 49 chr9 39567300 39569700 0.099 60 chr9 39572700 39573900 0.0628 78 chr9 39576000 39576300 0.0628 78 chr9 39591300 39591600 0 111 chr9 39593700 39604800 0 111 chr9 39607500 39607800 0 117 chr9 39609600 39810600 0 117 chr9 39812100 39824100 0 117 chr9 39839100 40016100 0 101 chr9 40017300 40024800 0 101 chr9 40026000 40035600 0 101 chr9 40036800 40038600 0 101 chr9 40039800 40045500 0 101 chr9 40047000 40062900 0 101 chr9 40064100 40129500 0 100 chr9 40131300 40174500 0 100 chr9 40177800 40189800 0 72 chr9 40191000 40192200 0.1841 56 chr9 40197000 40222800 0 93 chr9 40226700 40390200 0 147 chr9 40391400 40501800 0 95 chr9 40503000 40533900 0 95 chr9 40535700 40536300 0 95 chr9 40537500 40543500 0 95 chr9 40545600 40553400 0 130 chr9 40554900 40572900 0 130 chr9 40574100 40578900 0 105 chr9 40581900 40586700 0 98 chr9 40588200 40591500 0 98 chr9 40593000 40650600 0 117 chr9 40651800 40695900 0 80 chr9 40697700 40716000 0 82 chr9 40717200 40720500 0 82 chr9 40722900 40725600 0 82 chr9 40726800 40735200 0 95 chr9 40736700 40745100 0 95 chr9 40746300 40755000 0 95 chr9 40758900 40771200 0 76 chr9 40772400 40780200 0.0035 79 chr9 40783200 40789200 0.0173 96 chr9 40791600 40799100 0 91 chr9 40801200 40801800 0 91 chr9 40803300 40805700 0 91 chr9 40808100 40809900 0 91 chr9 40811400 40812000 0 91 chr9 40814100 40824600 0.025 123 chr9 40825800 40827900 0 125 chr9 40829700 40830600 0 125 chr9 40833600 40835400 0 70 chr9 40836600 40836900 0.0024 156 chr9 40838400 40843500 0.0024 156 chr9 40847700 40849800 0.0782 96 chr9 40851000 40857900 0.0178 87 chr9 40860000 40860300 0 98 chr9 40861500 40867500 0 98 chr9 40893600 40893900 0.6425 414 chr9 40901700 40902000 0.5751 258 chr9 40906800 40907100 0.6722 321 chr9 40910400 40913100 0.5953 495 chr9 40915200 40915500 0.5783 344 chr9 40927800 40928100 0.6656 420 chr9 40932600 40932900 0.5584 49 chr9 40964700 40965000 0.4274 92 chr9 40967400 40968000 0.0942 159 chr9 40979400 40980000 0.4105 257 chr9 40990200 40990500 0.4428 134 chr9 41003400 41004000 0.4114 171 chr9 41016900 41017500 0.409 192 chr9 41019900 41020200 0.3518 192 chr9 41022600 41022900 0.4869 120 chr9 41043600 41043900 0.3284 162 chr9 41047200 41048100 0.4217 172 chr9 41052000 41052600 0.4127 143 chr9 41057400 41058300 0.0854 136 chr9 41073300 41073600 0.4322 147 chr9 41076600 41078100 0.2073 154 chr9 41081400 41081700 0.1175 121 chr9 41084400 41084700 0.2537 136 chr9 41092200 41092500 0.4531 135 chr9 41097300 41097600 0.6061 215 chr9 41100000 41100300 0.3715 151 chr9 41101800 41110500 0 321 chr9 41112000 41225700 0 321 chr9 41230800 41231100 0.674 309 chr9 41233500 41234100 0.2686 213 chr9 41238600 41238900 0.6245 45 chr9 41241600 41242200 0.5573 155 chr9 41253300 41253600 0.544 134 chr9 41255700 41258700 0.1989 200 chr9 41259900 41270700 0 267 chr9 41272200 41289000 0 170 chr9 41291400 41292000 0 170 chr9 41293200 41295300 0 170 chr9 41297100 41301900 0 170 chr9 41304000 41305500 0.0347 69 chr9 41306700 41307600 0.0347 69 chr9 41310600 41312700 0 92 chr9 41314200 41314800 0.2433 52 chr9 41316900 41318100 0.0187 76 chr9 41319300 41324400 0.0303 107 chr9 41326200 41326500 0.0086 132 chr9 41327700 41328300 0.0086 132 chr9 41329800 41334000 0.0086 132 chr9 41335800 41344500 0 92 chr9 41346000 41348700 0 92 chr9 41351100 41352300 0 105 chr9 41353800 41354100 0 105 chr9 41355600 41356800 0 105 chr9 41358300 41367900 0 105 chr9 41370000 41376600 0.0082 83 chr9 41378100 41378400 0.4747 78 chr9 41380200 41380500 0.4747 78 chr9 41381700 41385300 0 68 chr9 41386800 41388300 0 68 chr9 41390100 41392500 0 94 chr9 41394000 41400900 0 94 chr9 41402100 41405700 0 94 chr9 41407200 41413800 0 94 chr9 41415000 41415600 0.0386 67 chr9 41416800 41417100 0.0386 67 chr9 41418300 41418600 0.5941 47 chr9 41421600 41424600 0.1064 84 chr9 41427300 41427600 0.1093 136 chr9 41429100 41431500 0.1093 136 chr9 41434500 41438700 0 74 chr9 41440200 41445300 0 74 chr9 41446500 41447400 0 74 chr9 41448600 41457900 0 74 chr9 41460600 41462100 0.1144 76 chr9 41466900 41468400 0.0514 79 chr9 41469900 41472900 0.0514 79 chr9 41474100 41475300 0.0514 79 chr9 41476800 41477400 0.3569 54 chr9 41478600 41481600 0 100 chr9 41484300 41485800 0 100 chr9 41487300 41488500 0 100 chr9 41490000 41495700 0 100 chr9 41498100 41498400 0 100 chr9 41499600 41502300 0 100 chr9 41503800 41507400 0.2194 84 chr9 41509500 41509800 0.0148 88 chr9 41513100 41518800 0.0148 88 chr9 41520300 41520900 0.0148 88 chr9 41522100 41528700 0 109 chr9 41532300 41533500 0.0388 80 chr9 41539200 41539500 0 120 chr9 41541600 41559900 0 120 chr9 41563200 41563800 0.4568 145 chr9 41573100 41626800 0 169 chr9 41628000 41632800 0 169 chr9 41635800 41637900 0.0045 81 chr9 41639700 41641500 0.279 60 chr9 41642700 41643000 0.279 60 chr9 41648700 41649300 0.3708 109 chr9 41660100 41663100 0 121 chr9 41664300 41670300 0 121 chr9 41673900 41674200 0.3109 82 chr9 41675400 41691900 0 103 chr9 41694000 41696400 0 103 chr9 41697900 41706300 0.0004 117 chr9 41709600 41710200 0.5006 115 chr9 41711700 41715600 0.1267 108 chr9 41718000 41738700 0 109 chr9 41739900 41753700 0 125 chr9 41756700 41775000 0 119 chr9 41776800 41777100 0 119 chr9 41786100 41787300 0.0941 111 chr9 41792400 41793000 0.2103 135 chr9 41795100 41795400 0.1784 101 chr9 41805600 41805900 0.0239 128 chr9 41808300 41808900 0 157 chr9 41810100 41916900 0 157 chr9 41920200 41920500 0.2539 130 chr9 41921700 41922000 0.2539 130 chr9 41927100 41927400 0.1994 60 chr9 41936400 41936700 0.5158 104 chr9 41944200 41944500 0.4749 62 chr9 41946300 41946900 0.4295 57 chr9 41948700 41949300 0.3261 75 chr9 41952600 41954100 0.4128 115 chr9 41956500 41957700 0.0066 88 chr9 41958900 41959200 0.0066 88 chr9 41965800 41966100 0.5137 94 chr9 41969100 41976600 0 87 chr9 41978100 41989500 0 87 chr9 41991300 41992500 0.14 93 chr9 41994000 42028500 0 103 chr9 42030000 42035400 0 103 chr9 42036900 42053100 0 77 chr9 42056700 42062700 0 95 chr9 42063900 42074400 0 95 chr9 42075900 42076800 0 95 chr9 42078000 42079500 0 95 chr9 42080700 42088200 0 95 chr9 42090300 42093000 0 74 chr9 42099900 42107100 0 63 chr9 42114000 42115800 0.3188 67 chr9 42118800 42119100 0.4541 68 chr9 42122700 42123000 0.4023 50 chr9 42126000 42126300 0.5018 72 chr9 42128400 42129900 0.1669 59 chr9 42131700 42132000 0.405 35 chr9 42135300 42137700 0.4139 56 chr9 42148200 42148500 0.4134 43 chr9 42162900 42163800 0.4294 52 chr9 42180000 42180300 0.3499 67 chr9 42185100 42186600 0.2686 67 chr9 42187800 42189000 0.1007 75 chr9 42192900 42193200 0.2585 57 chr9 42198300 42198900 0.1179 49 chr9 42201000 42201300 0.2956 49 chr9 42202500 42204600 0.1578 78 chr9 42207000 42207600 0.3721 66 chr9 42212100 42213000 0.5382 67 chr9 42214200 42214500 0.5382 67 chr9 42216900 42217200 0.3205 60 chr9 42220800 42221100 0.545 65 chr9 42225900 42226200 0.1536 77 chr9 42228300 42228600 0.4234 58 chr9 42298800 42300300 0.4824 73 chr9 42314400 42314700 0.2788 34 chr9 42318300 42318600 0.2497 90 chr9 42324600 42324900 0.4318 89 chr9 42348000 42352500 0.0304 128 chr9 42356400 42357300 0.1889 94 chr9 42360600 42360900 0.3719 79 chr9 42364800 42365100 0.492 61 chr9 42370500 42371100 0.2839 81 chr9 42386100 42386400 0.2412 69 chr9 42395400 42395700 0.4332 61 chr9 42401400 42402600 0.0241 42 chr9 42408300 42417600 0 99 chr9 42419100 42419700 0.0129 36 chr9 42437400 42437700 0.4764 94 chr9 42439800 42441300 0.2758 112 chr9 42442800 42443100 0.5258 79 chr9 42450000 42450300 0.2182 58 chr9 42463800 42464100 0.5894 50 chr9 42465600 42465900 0.3021 70 chr9 42485100 42485400 0.4992 61 chr9 42495600 42500700 0 79 chr9 42508500 42533700 0 81 chr9 42535500 42538200 0 70 chr9 42539400 42660900 0 116 chr9 42662100 42693300 0 116 chr9 42729600 42729900 0.0322 51 chr9 42733200 42733500 0.1256 75 chr9 42741000 42741600 0.2516 75 chr9 42760800 42761100 0.1779 49 chr9 42766500 42766800 0.3744 56 chr9 42776700 42777000 0.4643 41 chr9 42784500 42785100 0.0223 51 chr9 42818400 42829800 0.0113 67 chr9 42857100 42857700 0.0011 57 chr9 42862200 42862500 0.3788 76 chr9 42863700 42865200 0.3788 76 chr9 42871200 42871800 0.614 50 chr9 42882000 42882900 0.2037 83 chr9 42884100 42885900 0.4863 67 chr9 42887400 42887700 0.4625 66 chr9 42888900 42889200 0.4625 66 chr9 42894900 42895200 0.3887 59 chr9 42896400 42897000 0.23 74 chr9 42898500 42898800 0.4712 60 chr9 42907800 42908100 0.3132 76 chr9 42910200 42910500 0.4389 64 chr9 42914700 42915000 0.4376 45 chr9 42917400 42917700 0.4462 73 chr9 42919200 42919500 0.327 52 chr9 42958800 42959100 0.4088 74 chr9 42970500 42970800 0.0293 61 chr9 42977400 42977700 0.3447 64 chr9 42980100 42980400 0.5187 53 chr9 42986400 42986700 0.4648 59 chr9 42993600 42993900 0 99 chr9 42996000 43004100 0 99 chr9 43009200 43009800 0.0959 55 chr9 43011600 43011900 0.524 68 chr9 43017300 43017600 0.2946 56 chr9 43026000 43026300 0.4421 79 chr9 43029000 43029600 0.3126 54 chr9 43032300 43035000 0.0085 85 chr9 43037400 43037700 0.4189 64 chr9 43040100 43040700 0.088 53 chr9 43042500 43046100 0.1417 63 chr9 43052700 43053600 0.0929 61 chr9 43059300 43060800 0.3081 52 chr9 43062000 43062300 0.1959 62 chr9 43063800 43065000 0.1959 62 chr9 43067100 43070400 0.0726 64 chr9 43072800 43073100 0.2255 78 chr9 43076400 43078500 0.2255 78 chr9 43080900 43081500 0.3948 87 chr9 43083000 43083300 0.3948 87 chr9 43085700 43086000 0.5665 48 chr9 43091700 43092000 0.3956 68 chr9 43093200 43093500 0.3956 68 chr9 43095000 43097100 0.1177 70 chr9 43099800 43101000 0.1177 70 chr9 43104600 43107000 0.152 72 chr9 43111800 43112100 0.4391 66 chr9 43113600 43113900 0.4466 48 chr9 43131300 43134000 0.0358 73 chr9 43135800 43136100 0.3992 57 chr9 43150200 43150800 0.2484 77 chr9 43152900 43153800 0.3983 58 chr9 43159500 43159800 0.3494 72 chr9 43170900 43171500 0.5852 167 chr9 43174200 43174500 0.4936 51 chr9 43194300 43195500 0.0115 68 chr9 43210800 43211400 0.6255 236 chr9 43214400 43216500 0.0116 276 chr9 43240200 43242600 0.1375 79 chr9 43263900 43264200 0.3762 68 chr9 43275000 43281300 0 75 chr9 43283100 43332300 0 142 chr9 43333800 43370100 0 171 chr9 43371300 43377300 0 171 chr9 43382400 43382700 0.1462 46 chr9 43383900 43443600 0 413 chr9 43445100 43455600 0 583 chr9 43456800 44124600 0 583 chr9 44125800 44251500 0 626 chr9 44252700 44799000 0 626 chr9 44800200 44868300 0 626 chr9 44869500 44920200 0 626 chr9 44921400 45019200 0 626 chr9 45020400 45031500 0 626 chr9 45033600 45034500 0 308 chr9 45036000 45074400 0 308 chr9 45075600 45112800 0 308 chr9 45114600 45152100 0 265 chr9 45153300 45164700 0 265 chr9 45165900 45182700 0 265 chr9 45184200 45205800 0 265 chr9 45207600 45215400 0 265 chr9 45216600 45261900 0 239 chr9 45263400 45264600 0 239 chr9 45265800 45298500 0 239 chr9 45300900 45306000 0 239 chr9 45307200 45322500 0 239 chr9 45324000 45368400 0 361 chr9 45369600 45384300 0 361 chr9 45385500 45422700 0 361 chr9 45424200 45484200 0 361 chr9 45485700 45518700 0 361 chr9 60519600 60521100 0.634 139 chr9 60523200 60529200 0.4756 278 chr9 60548400 60549000 0.1185 47 chr9 60550200 60552600 0 195 chr9 60553800 60570900 0 195 chr9 60572400 60616500 0 311 chr9 60617700 60656700 0 489 chr9 60657900 60688200 0 489 chr9 60740400 60740700 0.5718 31 chr9 60744000 60744300 0.1796 31 chr9 60747300 60765300 0 68 chr9 60766500 60767700 0 68 chr9 60768900 60779400 0 68 chr9 60829500 60875100 0 54 chr9 60876600 60885000 0 54 chr9 60886800 60887700 0 54 chr9 60891000 60893100 0 85 chr9 60894900 61003800 0 85 chr9 61053900 61142100 0 74 chr9 61143600 61145400 0 74 chr9 61146900 61161900 0 98 chr9 61163100 61180500 0 98 chr9 61181700 61213800 0 94 chr9 61218900 61224600 0 70 chr9 61225800 61227600 0.0029 52 chr9 61230600 61231800 0.0259 74 chr9 61282200 61329600 0 81 chr9 61331400 61345800 0 81 chr9 61347300 61363800 0 62 chr9 61366200 61367100 0.2502 56 chr9 61370700 61373700 0.0679 45 chr9 61374900 61397100 0 59 chr9 61398300 61400100 0 59 chr9 61401600 61405800 0 59 chr9 61407300 61468800 0 63 chr9 61528800 61529400 0.1386 81 chr9 61551900 61553400 0.5993 96 chr9 61556400 61556700 0.5695 69 chr9 61558200 61558500 0.4316 109 chr9 61568700 61569000 0.3287 87 chr9 61570200 61570500 0.3287 87 chr9 61575300 61575600 0.2392 43 chr9 61585500 61590900 0 94 chr9 61593300 61593600 0.5263 64 chr9 61596900 61597200 0.4934 53 chr9 61611600 61612200 0.4625 70 chr9 61625400 61625700 0.4375 73 chr9 61636500 61638600 0.1171 97 chr9 61644300 61645200 0.0774 72 chr9 61646400 61663800 0 87 chr9 61668300 61668600 0.6055 330 chr9 61686600 61686900 0.4271 84 chr9 61785300 61912800 0 1182 chr9 61914000 61979400 0 1182 chr9 61983300 61983900 0.3529 82 chr9 61986300 61992000 0 78 chr9 61993200 62039100 0 78 chr9 62040300 62049600 0 78 chr9 62050800 62149500 0 78 chr9 62249700 62439600 0 133 chr9 62440800 62717400 0 133 chr9 62718600 62748900 0 133 chr9 62803500 62803800 0.4218 175 chr9 62810100 62810400 0.3434 139 chr9 62811900 62813700 0.0172 283 chr9 62817600 62817900 0.3937 152 chr9 62820000 62823000 0.2225 323 chr9 62825100 62827200 0.2225 323 chr9 62829900 62835000 0 196 chr9 62836500 62837400 0 196 chr9 62839800 62842500 0.2316 189 chr9 62844000 62844300 0.0361 169 chr9 62845500 62850000 0.0361 169 chr9 62851200 62851500 0.0361 169 chr9 62852700 62856000 0.0361 169 chr9 62859600 62860200 0.6163 124 chr9 62883600 62903400 0 128 chr9 62904600 62958300 0 128 chr9 63008400 63023400 0 62 chr9 63024900 63202800 0 125 chr9 63252900 63257400 0 75 chr9 63258600 63260100 0 115 chr9 63261900 63262800 0 115 chr9 63264000 63266100 0 115 chr9 63267900 63296100 0 115 chr9 63297300 63312300 0 115 chr9 63314400 63325500 0 115 chr9 63331200 63341100 0 94 chr9 63342300 63345000 0 94 chr9 63346200 63346500 0.1407 79 chr9 63348900 63349500 0.1407 79 chr9 63352500 63353100 0.1794 76 chr9 63354600 63354900 0.1794 76 chr9 63356100 63360300 0 76 chr9 63363000 63379200 0 126 chr9 63381300 63449100 0 126 chr9 63451200 63492300 0 72 chr9 63543000 63548100 0.096 64 chr9 63566100 63570900 0.0008 88 chr9 63576000 63576300 0.3576 55 chr9 63590100 63591300 0.3448 83 chr9 63594600 63594900 0.4344 56 chr9 63598500 63599100 0.0814 49 chr9 63600300 63603300 0.0814 49 chr9 63619200 63619500 0.2315 66 chr9 63636900 63637200 0.0464 64 chr9 63639000 63640200 0.0464 64 chr9 63643200 63643500 0.1138 64 chr9 63644700 63646500 0.1138 64 chr9 63649200 63652500 0 62 chr9 63653700 63654900 0.228 67 chr9 63660600 63664500 0.0029 74 chr9 63666600 63671700 0.0029 74 chr9 63673800 63675600 0.2345 67 chr9 63677100 63677400 0.2345 67 chr9 63679200 63679500 0.2345 67 chr9 63687000 63687300 0.1914 68 chr9 63689700 63690300 0.1914 68 chr9 63698400 63699000 0.5275 56 chr9 63709200 63709800 0.5701 52 chr9 63711300 63711600 0.4098 72 chr9 63712800 63713100 0.4098 72 chr9 63717300 63718800 0.2896 90 chr9 63720000 63720300 0.2896 90 chr9 63737100 63737700 0.4367 174 chr9 63744600 63744900 0.4344 27 chr9 63747600 63747900 0.4649 45 chr9 63765600 63770400 0.0567 164 chr9 63772500 63774600 0.0926 149 chr9 63776400 63781200 0.121 157 chr9 63783900 63784200 0.5615 265 chr9 63793200 63794700 0.4029 202 chr9 63797700 63798000 0.4979 278 chr9 63799500 63800100 0.4979 278 chr9 63801900 63804300 0.1709 187 chr9 63807300 63808800 0.2897 186 chr9 63810000 63812100 0.2897 186 chr9 63818700 63819900 0.5876 452 chr9 63822900 63823200 0.6858 183 chr9 63826500 63829800 0.3363 320 chr9 63833400 63835800 0.1884 122 chr9 63840300 63841200 0.5794 103 chr9 63842700 63843000 0.6787 73 chr9 63858300 63858600 0.5981 200 chr9 63861300 63862800 0.4782 187 chr9 63867000 63870300 0.161 291 chr9 63871800 63872700 0.161 291 chr9 63875400 63877500 0.4173 165 chr9 63879600 63879900 0.3883 113 chr9 63881400 63882300 0.0592 409 chr9 63884100 63885900 0.0592 409 chr9 63887100 63887400 0.0592 409 chr9 63888900 63889200 0.3829 96 chr9 63894600 63895500 0.3776 165 chr9 63898500 63898800 0.5599 182 chr9 63918300 63918600 0.3972 60 chr9 63969000 63969900 0.3089 147 chr9 63971100 63975300 0.3089 147 chr9 63978000 63978300 0.4657 48 chr9 63982500 63984000 0.1122 153 chr9 63985200 63985500 0.1122 153 chr9 63986700 63992400 0.1152 162 chr9 63997500 64000500 0.0129 168 chr9 64002000 64003200 0.0129 168 chr9 64004400 64007100 0.0129 168 chr9 64008900 64009500 0.0129 168 chr9 64091100 64091700 0.4933 163 chr9 64185300 64215000 0 45 chr9 64315200 64335300 0 128 chr9 64339500 64366500 0 113 chr9 64367700 64402800 0 113 chr9 64404000 64407900 0 113 chr9 64409400 64445700 0 108 chr9 64447200 64451100 0.0071 119 chr9 64453800 64455900 0.1227 87 chr9 64457400 64463100 0 149 chr9 64464300 64470600 0 149 chr9 64472400 64477500 0 149 chr9 64478700 64480500 0 149 chr9 64485000 64488000 0.1757 92 chr9 64489800 64494000 0.0353 100 chr9 64497600 64498200 0.1778 82 chr9 64500000 64508100 0 117 chr9 64509300 64525800 0 117 chr9 64527900 64559400 0 117 chr9 64560600 64773600 0 117 chr9 64775100 64781700 0.0019 93 chr9 64783500 64803900 0 107 chr9 64805100 64806300 0 107 chr9 64807500 64845300 0 74 chr9 64846500 64911600 0 80 chr9 64912800 64920600 0 80 chr9 64921800 64936200 0 80 chr9 64937700 64938300 0.4761 119 chr9 64944900 64950300 0.0837 78 chr9 64952100 64997700 0 134 chr9 65070000 65070300 0.2041 38 chr9 65073900 65074200 0.6974 224 chr9 65079600 65080200 0.0007 48 chr9 65130300 65258100 0 86 chr9 65259600 65325000 0 156 chr9 65375100 65376600 0 82 chr9 65378700 65380800 0.4044 78 chr9 65385300 65386500 0.606 212 chr9 65391900 65392200 0.323 123 chr9 65478300 65478600 0.3987 89 chr9 65487300 65487600 0.4289 71 chr9 65489400 65489700 0.3272 66 chr9 65493600 65493900 0.3301 69 chr9 65502600 65502900 0.3065 62 chr9 65510700 65514300 0.1086 75 chr9 65516700 65522100 0 106 chr9 65523600 65523900 0 106 chr9 65530500 65532000 0.1538 71 chr9 65535900 65536500 0.245 72 chr9 65542500 65545800 0.1032 86 chr9 65551500 65552700 0.5297 71 chr9 65558700 65561400 0.2526 114 chr9 65563200 65563500 0.6166 118 chr9 65567700 65568900 0.2893 92 chr9 65575200 65576700 0 94 chr9 65577900 65594700 0 94 chr9 65645100 65657100 0 261 chr9 65659500 65661000 0.1989 82 chr9 65663400 65663700 0.0431 63 chr9 65665500 65679300 0 217 chr9 65681400 65693100 0 217 chr9 65694600 65713800 0 217 chr9 65715600 65716200 0 217 chr9 65718300 65762400 0 217 chr9 65763600 65900400 0 128 chr9 65901600 66157800 0 128 chr9 66159000 66162300 0 128 chr9 66163500 66170100 0 128 chr9 66172800 66173400 0.454 102 chr9 66174900 66197400 0 74 chr9 66201900 66278100 0 100 chr9 66280200 66336900 0 100 chr9 66338400 66390900 0 100 chr9 66591300 66600600 0 98 chr9 66601800 66616800 0 98 chr9 66618300 66673500 0 105 chr9 66674700 66774600 0 145 chr9 66775800 66776100 0.4447 87 chr9 66777900 66778200 0.6124 72 chr9 66779700 66780600 0.0476 52 chr9 66783300 66783600 0.4212 97 chr9 66788400 66788700 0.4065 56 chr9 66791100 66792300 0.0078 77 chr9 66795300 66795900 0.226 60 chr9 66797400 66797700 0.2981 62 chr9 66799500 66799800 0.3335 69 chr9 66801000 66801300 0.3924 66 chr9 66806100 66807300 0.3868 49 chr9 66808800 66809400 0.0984 64 chr9 66810900 66812100 0.0984 64 chr9 66813300 66813600 0.3684 23 chr9 66814800 66816000 0.1352 104 chr9 66819300 66822000 0.1287 113 chr9 66825900 66826500 0 132 chr9 66827700 66842700 0 132 chr9 66843900 66877500 0 132 chr9 66878700 66879300 0.5244 52 chr9 66881700 66882000 0.475 58 chr9 66884700 66886200 0.2576 52 chr9 66889200 66889500 0.4237 62 chr9 66890700 66891600 0.4237 62 chr9 66893100 66894000 0.1111 79 chr9 66895800 66896100 0.1111 79 chr9 66898800 66899100 0.4625 55 chr9 66902400 66902700 0.4596 60 chr9 66906300 66906600 0.4089 68 chr9 66907800 66908100 0.4089 68 chr9 66909300 66909600 0.0565 74 chr9 66911100 66912600 0.0565 74 chr9 66915600 66917400 0.0565 74 chr9 66918900 66919500 0.0565 74 chr9 66921900 66930300 0.0349 71 chr9 66933300 66937200 0.0349 71 chr9 66939600 66940800 0.0629 56 chr9 66943500 66943800 0.518 77 chr9 66945000 66946500 0.518 77 chr9 66947700 66948600 0.1049 72 chr9 66952200 66952500 0.3554 38 chr9 66953700 66957900 0 73 chr9 66959100 66960900 0 73 chr9 66962400 66972300 0 73 chr9 66973800 66975300 0 73 chr9 66979500 67038300 0 86 chr9 67039500 67043700 0 86 chr9 67045200 67051500 0 86 chr9 67053000 67054200 0 86 chr9 67056600 67056900 0.4424 48 chr9 67059300 67062600 0.0309 77 chr9 67064400 67065000 0.0309 77 chr9 67069800 67070100 0.2766 70 chr9 67071600 67073400 0.2766 70 chr9 67077600 67078200 0.337 62 chr9 67080600 67087500 0 78 chr9 67094400 67096500 0 60 chr9 67099200 67109400 0 71 chr9 67110600 67133100 0 71 chr9 67134300 67148700 0 76 chr9 67150200 67193400 0 76 chr9 67194600 67196100 0 151 chr9 67197300 67397700 0 151 chr9 67399500 67607700 0 124 chr9 67610700 67611900 0.3151 89 chr9 67613100 67614600 0 90 chr9 67616100 67623000 0 90 chr9 67624200 67624500 0 90 chr9 67626600 67637100 0 113 chr9 67641000 67756800 0 1810 chr9 67758000 67758600 0 1810 chr9 67760400 67776600 0 1810 chr9 67777800 67822500 0 1810 chr9 67824600 67831500 0 110 chr9 67833000 67848600 0 97 chr9 67850700 67854000 0.3974 79 chr9 67855800 67858800 0.102 92 chr9 67860600 67864800 0 109 chr9 67866000 67884600 0 109 chr9 67885800 67920600 0 109 chr9 68220600 68332800 0 204 chr9 68334000 68334300 0.3636 100 chr9 68336400 68336700 0.3636 100 chr9 68344500 68345100 0.4651 212 chr9 68352300 68355000 0.2756 106 chr9 68359200 68360700 0.4687 91 chr9 68364600 68365500 0.1476 160 chr9 68367600 68368500 0.2135 96 chr9 68374200 68374800 0.414 126 chr9 68384100 68386200 0.1759 121 chr9 68388000 68388600 0.1759 121 chr9 68390700 68391000 0.5005 166 chr9 68394600 68394900 0.3525 90 chr9 68409000 68409600 0.2088 80 chr9 68411700 68412300 0.2 104 chr9 68414700 68415000 0.5191 118 chr9 68592600 68592900 0.5551 48 chr9 69416400 69418200 0 81 chr9 69437400 69439200 0 86 chr9 69477300 69481200 0 80 chr9 69506400 69510900 0 90 chr9 69680700 69681000 0.4523 51 chr9 69761100 69761400 0.4078 56 chr9 69763200 69763800 0.2008 51 chr9 69838800 69839400 0.1036 76 chr9 70038000 70038900 0.2992 6102 chr9 70199100 70204800 0.0423 90 chr9 70432500 70433400 0 77 chr9 70701900 70737600 0 45 chr9 70896600 70897200 0.3837 52 chr9 71497200 71498400 0.3947 68 chr9 71654400 71654700 0.4821 29 chr9 72153300 72153600 0.4907 55 chr9 72451500 72451800 0.3676 71 chr9 72839700 72842100 0.4125 82 chr9 73123800 73124400 0.5759 33 chr9 73193400 73193700 0.4625 47 chr9 73321200 73321500 0.5111 31 chr9 73386300 73386600 0.5078 54 chr9 73835400 73836300 0.205 69 chr9 73851900 73852500 0.3924 72 chr9 74198400 74198700 0.196 71 chr9 74258100 74259900 0.1414 52 chr9 74346600 74346900 0.6986 59 chr9 74426100 74426700 0.0495 82 chr9 74427900 74430300 0.0495 82 chr9 75204300 75205800 0.2401 55 chr9 75341100 75341400 0.4777 63 chr9 75417900 75418200 0.5539 72 chr9 76063200 76064700 0.0105 51 chr9 76175100 76175400 0.1739 450 chr9 76306800 76307100 0.5461 11 chr9 76509600 76509900 0.2385 27 chr9 76671000 76675800 0.1018 79 chr9 76791300 76791600 0.1685 62 chr9 77371800 77372100 0.3527 66 chr9 77398800 77399100 0.6278 43 chr9 77682600 77682900 0.4876 58 chr9 78652800 78653100 0.5997 68 chr9 78738000 78738300 0.5057 58 chr9 78789300 78789600 0.4954 15 chr9 78864300 78864600 0.3609 44 chr9 78875100 78875400 0.265 42 chr9 78878100 78878400 0.4008 49 chr9 79075500 79076700 0.2627 80 chr9 79098000 79098600 0.026 59 chr9 79099800 79100400 0.5293 62 chr9 79110900 79111200 0.6229 37 chr9 79177500 79178700 0.5082 58 chr9 79181400 79181700 0.235 54 chr9 79442400 79443900 0.3201 68 chr9 79495800 79498800 0.1218 69 chr9 79548000 79548300 0.348 63 chr9 79853700 79854000 0.2236 69 chr9 80230200 80230500 0.5328 55 chr9 80251200 80251800 0.2519 80 chr9 80545200 80545500 0.2524 14 chr9 80611500 80613000 0.2727 75 chr9 80656200 80656500 0.449 69 chr9 80742900 80744100 0.0062 81 chr9 81015600 81015900 0.3507 25 chr9 81436800 81437100 0.3937 78 chr9 81709500 81711900 0.0104 90 chr9 81918600 81948900 0 63 chr9 82420800 82421100 0.4199 80 chr9 82753500 82754400 0.2635 66 chr9 82755600 82755900 0.2635 66 chr9 82770000 82773300 0.2724 76 chr9 83049600 83055300 0.0011 110 chr9 83223300 83224800 0.2252 86 chr9 83226000 83226900 0.2252 86 chr9 83273100 83273400 0.6302 85 chr9 83821200 83822100 0 63 chr9 83826000 83826900 0.0171 78 chr9 83843100 83843400 0.1933 44 chr9 83900100 83900700 0.3731 56 chr9 84167400 84167700 0.4367 73 chr9 85074300 85075200 0.1191 85 chr9 85165200 85166100 0.0118 68 chr9 85195800 85196100 0.1604 52 chr9 85780200 85780500 0.1632 39 chr9 85811400 85812300 0.0136 123 chr9 85828500 85829100 0.2727 57 chr9 86107500 86109600 0 64 chr9 86159400 86160300 0.1369 76 chr9 86606100 86609400 0.1385 78 chr9 87047100 87047700 0.3523 90 chr9 87757500 87757800 0.3666 64 chr9 87912900 87919800 0 79 chr9 87923400 87923700 0.4888 55 chr9 87926700 87930000 0.0005 74 chr9 87933000 87935400 0.0145 52 chr9 87939900 87942000 0.0126 53 chr9 88110900 88111200 0.4756 44 chr9 88112700 88113000 0.3361 25 chr9 88117500 88118100 0.0275 71 chr9 88119300 88119900 0.0275 71 chr9 88123200 88126200 0.0506 72 chr9 88129200 88129500 0.597 62 chr9 88133100 88135200 0.0015 79 chr9 88136700 88140600 0.0015 79 chr9 88244100 88245900 0.007 83 chr9 88375200 88375500 0.4366 76 chr9 88625700 88626900 0.0029 83 chr9 88958700 88959000 0.2668 61 chr9 89161800 89163300 0.242 81 chr9 89371800 89372100 0.6872 36 chr9 90150000 90155700 0 143 chr9 90416400 90416700 0.4542 84 chr9 90884400 90884700 0.6566 54 chr9 90935700 90936000 0.515 69 chr9 91225800 91230300 0.0841 97 chr9 91797000 91798200 0.0269 63 chr9 92084100 92086200 0.2999 81 chr9 92201700 92202000 0.5735 38 chr9 92216400 92218800 0.1995 84 chr9 92226900 92227500 0.0599 107 chr9 92451900 92452200 0.3683 78 chr9 92579100 92579400 0.111 70 chr9 92830200 92830500 0.4073 68 chr9 92899200 92899500 0.3767 49 chr9 92901000 92902500 0.3795 86 chr9 93335400 93336300 0.0203 68 chr9 93515400 93516000 0.0359 77 chr9 93740400 93741000 0.3126 39 chr9 94089300 94090800 0.0413 93 chr9 94092300 94093800 0.2456 99 chr9 94113600 94119600 0 124 chr9 94307700 94308600 0.0608 72 chr9 94313100 94313400 0 74 chr9 94314900 94319400 0 74 chr9 94321500 94321800 0.2931 66 chr9 94326900 94329300 0.0812 66 chr9 94331100 94331700 0.058 62 chr9 94332900 94335300 0.0558 70 chr9 94338000 94338600 0.0367 73 chr9 94340400 94343100 0.0367 73 chr9 94344300 94344600 0.0367 73 chr9 94345800 94346700 0.0367 73 chr9 94347900 94351500 0 77 chr9 94352700 94353600 0 77 chr9 94354800 94355100 0.3468 30 chr9 94356600 94357500 0.4355 69 chr9 94362900 94365900 0.0255 63 chr9 94373400 94373700 0.2853 38 chr9 94375800 94377000 0.1794 62 chr9 94378800 94379100 0.3737 59 chr9 94380300 94381200 0.1808 61 chr9 94392000 94396200 0.0363 71 chr9 94398600 94398900 0.2349 58 chr9 94405800 94406100 0.5194 43 chr9 94411200 94413000 0.3126 64 chr9 94437000 94437900 0.1684 64 chr9 94530600 94530900 0.1437 34 chr9 95503800 95504100 0.3832 71 chr9 95697900 95703600 0 84 chr9 96157800 96158100 0.5372 89 chr9 96706800 96707700 0.1754 59 chr9 96802200 96802500 0.2522 87 chr9 96824100 96825000 0.3876 72 chr9 96900300 96900600 0.6222 64 chr9 96902400 96902700 0.304 37 chr9 96903900 96905100 0.1786 63 chr9 96906900 96907200 0.0017 81 chr9 96908400 96909300 0.0017 81 chr9 96914400 96915000 0.341 63 chr9 96916800 96919500 0.038 61 chr9 96921300 96921600 0.4557 46 chr9 96922800 96924600 0.0806 74 chr9 96925800 96926400 0.3425 73 chr9 96928500 96929100 0.0124 70 chr9 96930600 96930900 0.5399 61 chr9 96936000 96936300 0.4048 70 chr9 96938100 96940200 0 97 chr9 96941700 96942600 0 97 chr9 96947400 96948300 0.0511 72 chr9 96950100 96951000 0.1184 72 chr9 96975300 96975600 0.1974 86 chr9 96976800 96977100 0.3164 50 chr9 96989100 96989400 0.1243 54 chr9 96993000 96996000 0.0963 75 chr9 97006800 97008000 0.2146 71 chr9 97012200 97012500 0.3979 52 chr9 97022400 97025400 0.0999 68 chr9 97195500 97196700 0.0326 71 chr9 97197900 97199100 0.0326 71 chr9 97209300 97210800 0.3866 82 chr9 97582200 97584000 0.2024 87 chr9 97586400 97586700 0.2024 87 chr9 98214300 98214600 0.1431 54 chr9 98266500 98266800 0.4078 51 chr9 98514000 98514300 0.4393 24 chr9 98681100 98681400 0.136 33 chr9 99247200 99247500 0.4606 100 chr9 99499800 99502800 0.0681 96 chr9 99504000 99504600 0.0409 60 chr9 99687300 99687600 0.5695 32 chr9 99853500 99855000 0 75 chr9 100528500 100529700 0.195 83 chr9 100692000 100693800 0.0216 84 chr9 100695300 100696500 0.2947 89 chr9 100983300 100986900 0 82 chr9 101102100 101108100 0 77 chr9 101681700 101682300 0 20 chr9 101831400 101831700 0.615 66 chr9 102091800 102092400 0.2789 96 chr9 102148200 102149700 0.169 78 chr9 102151500 102151800 0.383 75 chr9 102219600 102219900 0.3626 107 chr9 102221700 102222000 0.4506 60 chr9 102313500 102313800 0.609 57 chr9 102363900 102364200 0.0169 25 chr9 102400200 102400500 0.5829 32 chr9 102790800 102793800 0.2045 77 chr9 103046100 103046400 0.2061 64 chr9 103162200 103162500 0.4638 68 chr9 103239000 103239900 0.3592 75 chr9 103356900 103357200 0.2872 59 chr9 103370400 103370700 0.4429 32 chr9 103739400 103740300 0.2758 73 chr9 103947600 103947900 0.2739 60 chr9 104012100 104012400 0.5505 78 chr9 104061900 104062500 0.4157 60 chr9 104324100 104324400 0.4189 53 chr9 105354000 105354300 0.3646 42 chr9 105372600 105372900 0.5375 55 chr9 105490500 105491100 0.3996 61 chr9 105526800 105527400 0.3047 59 chr9 105576600 105581100 0.0276 83 chr9 105631500 105632100 0.1683 90 chr9 105762300 105764100 0.2572 87 chr9 105778500 105779400 0.1524 73 chr9 105781500 105781800 0.1524 73 chr9 106183500 106185000 0.0838 56 chr9 106212300 106212900 0.0295 61 chr9 106319700 106320000 0.4509 75 chr9 106407600 106407900 0.2845 79 chr9 107027400 107028000 0.0259 94 chr9 107256000 107258400 0 74 chr9 107271300 107273100 0.0033 64 chr9 107670600 107670900 0.3116 33 chr9 107716800 107717100 0.6357 13 chr9 107775300 107778300 0 52 chr9 108502500 108506700 0.2168 90 chr9 108594600 108595200 0.3048 83 chr9 109668000 109668300 0.4807 26 chr9 110232600 110232900 0.5628 29 chr9 110412900 110413500 0.334 84 chr9 110417100 110423100 0 73 chr9 110791200 110797200 0 88 chr9 111081000 111081300 0.502 81 chr9 111200400 111201300 0.4017 69 chr9 111318000 111319500 0.2362 68 chr9 111640200 111642600 0.0573 105 chr9 111669600 111669900 0.0867 21 chr9 111875400 111875700 0.6738 130 chr9 112513500 112515900 0.0049 60 chr9 112798200 112804200 0 90 chr9 113060400 113090100 0 259 chr9 113105400 113111700 0 80 chr9 113112900 113119200 0 83 chr9 113250000 113250300 0.4698 62 chr9 113267100 113267400 0.2401 66 chr9 113333400 113333700 0.6532 55 chr9 113439000 113443500 0.0019 77 chr9 113900700 113901000 0.6115 40 chr9 114322800 114323100 0.1977 79 chr9 114326400 114327600 0.1214 71 chr9 114329400 114330000 0.1838 57 chr9 114333300 114334500 0.2484 85 chr9 114944100 114944400 0.4083 32 chr9 115069500 115069800 0.6011 35 chr9 115347300 115347600 0.506 29 chr9 115527600 115528800 0.1395 68 chr9 115769100 115770000 0.0378 92 chr9 115919400 115919700 0.1001 78 chr9 117066900 117071700 0.0075 81 chr9 118018500 118018800 0.5426 50 chr9 119133900 119134500 0.102 72 chr9 119170500 119174700 0.0206 69 chr9 119621700 119626500 0.0007 81 chr9 120055500 120061200 0 113 chr9 120305400 120305700 0.341 61 chr9 120494700 120497400 0.0254 109 chr9 120552000 120552300 0.3653 77 chr9 121416900 121417800 0.3337 70 chr9 121419300 121419600 0.4293 85 chr9 121429200 121430100 0.2981 97 chr9 121971000 121971600 0.115 42 chr9 122569800 122570400 0.337 93 chr9 122595300 122595600 0.6021 92 chr9 122627100 122627700 0.1288 70 chr9 122765100 122766300 0.5521 77 chr9 122866800 122868000 0.2346 78 chr9 123293400 123293700 0.1833 52 chr9 123404400 123405900 0.0201 58 chr9 123905400 123908700 0.0344 76 chr9 123976500 123978900 0 64 chr9 123991200 123993600 0 95 chr9 125328300 125328900 0.2278 60 chr9 125623200 125625300 0.029 85 chr9 125778600 125779800 0.0787 72 chr9 126013200 126014100 0.2442 75 chr9 126484500 126485400 0 45 chr9 126951300 126951600 0.5015 85 chr9 128138700 128139000 0.4487 79 chr9 128795400 128795700 0.478 99 chr9 130064100 130064400 0.6207 44 chr9 130277700 130278000 0.2813 117 chr9 130777500 130778100 0.3938 67 chr9 131172000 131172300 0.3363 73 chr9 131356800 131357400 0.0678 77 chr9 132270000 132270300 0.5156 66 chr9 132526500 132529500 0 65 chr9 133019700 133021200 0.2898 80 chr9 133062300 133062600 0.2877 66 chr9 133068600 133071600 0.1435 75 chr9 133082700 133086300 0 75 chr9 133123800 133124100 0.6313 59 chr9 133185300 133185600 0.1544 30 chr9 133312800 133315200 0.2099 92 chr9 133383300 133383600 0.6109 105 chr9 133514100 133514400 0.0255 26 chr9 133563900 133564500 0.4995 63 chr9 133668900 133669200 0.4431 18 chr9 133745100 133745400 0.2477 68 chr9 133827300 133828500 0.2235 32 chr9 134012100 134014500 0 197 chr9 134092800 134093100 0.3418 67 chr9 134114400 134118900 0 69 chr9 134182800 134183100 0.631 215 chr9 134466600 134466900 0.4041 25 chr9 134475900 134476500 0.3245 116 chr9 134481000 134481300 0.4184 59 chr9 134550000 134550300 0.6467 56 chr9 134586900 134589000 0.1683 78 chr9 134644200 134644500 0.5486 25 chr9 134729400 134730000 0.4115 66 chr9 134865900 134867400 0.1875 71 chr9 135528000 135528300 0.3769 64 chr9 135541800 135542100 0.4222 52 chr9 135549000 135549300 0.6495 42 chr9 135981600 135982200 0.3109 49 chr9 136101600 136101900 0.3093 67 chr9 136355100 136355400 0.0271 25 chr9 136580100 136581300 0.0357 57 chr9 136696800 136697100 0.4528 11 chr9 136802700 136803300 0.1716 100 chr9 137049900 137050200 0.6224 105 chr9 137145000 137145300 0.4893 19 chr9 137288400 137289000 0.2844 51 chr9 137322600 137323500 0.1391 57 chr9 137327700 137329800 0.3897 393 chr9 137341800 137342400 0.4446 56 chr9 137355300 137355600 0.5907 174 chr9 137379000 137379600 0.5256 167 chr9 137394300 137394600 0.4836 33 chr9 137451300 137451600 0.5686 33 chr9 137503800 137504100 0.6751 69 chr9 137517300 137517600 0.6777 48 chr9 137525700 137526000 0.5178 58 chr9 137565300 137568600 0.042 71 chr9 137597400 137597700 0.2639 45 chr9 137675700 137676000 0.42 51 chr9 137693700 137694000 0.3613 24 chr9 137715900 137716500 0.1242 259 chr9 137719800 137720100 0.5426 108 chr9 137722800 137723400 0.6669 36 chr9 137818500 137819700 0.015 86 chr9 137844900 137846400 0 244 chr9 137874300 137874600 0.5826 57 chr9 137884200 137886000 0.2862 67 chr9 137887500 137888100 0.1619 62 chr9 137976900 137977500 0.4754 59 chr9 138018000 138019500 0 54 chr9 138125400 138127200 0.4883 70 chr9 138135600 138136200 0.3734 61 chr9 138137700 138138000 0.4962 64 chr9 138163200 138163800 0.1011 64 chr9 138169800 138170100 0.3542 45 chr9 138176100 138176400 0.6533 51 chr9 138183900 138188100 0.0033 73 chr9 138190800 138196800 0 46 chr9 138204900 138206100 0.0011 93 chr9 138209400 138209700 0.2554 66 chr9 138213300 138216900 0 252 chr9 138218100 138334800 0 252 chrX 10200 14400 0 46 chrX 16800 19500 0 46 chrX 21000 24600 0 33 chrX 94800 95100 0 34 chrX 96300 100200 0 34 chrX 222600 228000 0 42 chrX 229500 230100 0.0351 26 chrX 231300 234900 0.091 46 chrX 236100 236700 0.091 46 chrX 243900 245400 0.1335 64 chrX 246900 247200 0.1335 64 chrX 249900 250800 0.0036 58 chrX 268200 274800 0.1001 513 chrX 277800 278100 0.6067 52 chrX 280500 281100 0.4785 24 chrX 297000 298800 0.1506 100 chrX 309900 310200 0.4935 213 chrX 315600 316200 0.2671 129 chrX 321300 324000 0.0965 306 chrX 342300 344100 0.4381 62 chrX 407100 408600 0.3387 64 chrX 416700 417000 0.6921 72 chrX 432600 432900 0.4625 144 chrX 512100 516000 0.0585 106 chrX 527100 528600 0.0145 109 chrX 555000 555600 0.5119 111 chrX 584100 584400 0.6747 65 chrX 598500 598800 0.4125 15 chrX 647100 648300 0.0118 53 chrX 678600 678900 0.5705 60 chrX 724800 725400 0.3145 207 chrX 728700 729300 0.5268 93 chrX 825300 825600 0.4511 41 chrX 839400 840600 0.0734 58 chrX 918300 918900 0.4865 122 chrX 938700 939000 0.6108 25 chrX 971400 971700 0.5391 71 chrX 1048500 1050000 0.3474 94 chrX 1127400 1128900 0.2277 111 chrX 1143300 1144200 0.3474 129 chrX 1146300 1147200 0.3375 103 chrX 1173900 1174800 0.1663 224 chrX 1263900 1264500 0.0556 74 chrX 1296600 1298700 0.1405 94 chrX 1360800 1361100 0.6944 62 chrX 1365600 1367100 0.5642 21 chrX 1368900 1376700 0 68 chrX 1409700 1410300 0 25 chrX 1453800 1454100 0.4585 34 chrX 1489800 1490100 0.3792 74 chrX 1641000 1641300 0.3159 13 chrX 1696800 1698900 0.0735 57 chrX 1705800 1706400 0.2726 60 chrX 1708200 1708800 0.2726 60 chrX 1735800 1736100 0.4273 52 chrX 1763700 1764900 0.2162 28 chrX 1855800 1856400 0.1546 64 chrX 1887600 1888500 0.1661 108 chrX 1947600 1949400 0 39 chrX 2133000 2134800 0 33 chrX 2186700 2187000 0.6266 166 chrX 2214000 2214300 0.4618 22 chrX 2227800 2228400 0.2219 28 chrX 2265000 2265300 0.6554 55 chrX 2277000 2277600 0.293 19 chrX 2296500 2296800 0.6293 43 chrX 2314200 2314500 0.5868 77 chrX 2362800 2363400 0.3709 59 chrX 2382300 2382900 0.4872 271 chrX 2773500 2773800 0.2276 37 chrX 2845200 2845500 0.0508 19 chrX 3524400 3525000 0.3362 216 chrX 3554700 3555000 0.4794 85 chrX 3557700 3558600 0.3978 34 chrX 3641700 3642000 0.1933 34 chrX 3702600 3702900 0.2562 32 chrX 3823800 3824700 0.0158 26 chrX 3830400 3837900 0 35 chrX 3839100 3842400 0 34 chrX 3843600 3866700 0 40 chrX 3867900 3880800 0 40 chrX 3882000 3937500 0 40 chrX 3966900 3968400 0 66 chrX 4267200 4267500 0.1625 26 chrX 4608900 4609200 0.6076 15 chrX 4681800 4682100 0.3092 13 chrX 4986600 4986900 0.325 22 chrX 5107800 5109000 0.0046 53 chrX 5481300 5486400 0.0255 49 chrX 5652300 5652600 0.0411 15 chrX 5669700 5670000 0.2126 11 chrX 5764800 5766000 0.1374 53 chrX 5790000 5790300 0.6305 10 chrX 5814900 5817000 0.0103 67 chrX 6273300 6273600 0.4019 28 chrX 6447600 6447900 0.4556 30 chrX 6480600 6481200 0.3235 46 chrX 6528000 6529800 0.1405 36 chrX 6532800 6534600 0.1014 43 chrX 6584100 6588900 0 62 chrX 6934500 6938400 0.007 64 chrX 7491300 7491600 0.4922 36 chrX 7589100 7592100 0.0365 118 chrX 7608000 7608300 0.135 52 chrX 7842900 7844400 0.4499 26 chrX 7848600 7850400 0.1013 39 chrX 8169300 8171100 0.0883 55 chrX 8465100 8467500 0.1441 41 chrX 8541600 8541900 0.376 24 chrX 8992200 8992500 0.6052 28 chrX 9052800 9053100 0.2161 26 chrX 9054600 9054900 0.1274 30 chrX 9082200 9082500 0.675 17 chrX 9404700 9405600 0.4719 89 chrX 9406800 9410400 0.2624 89 chrX 9412200 9414000 0.4398 83 chrX 10249800 10250400 0.1978 49 chrX 10668900 10669200 0.4942 33 chrX 10805400 10805700 0.4985 36 chrX 10880100 10880400 0.0595 14 chrX 10967100 10967700 0.2436 39 chrX 10975500 10975800 0.3731 28 chrX 11000100 11002200 0.0923 57 chrX 11078400 11078700 0.3202 19 chrX 11218800 11220000 0.08 69 chrX 11390400 11390700 0.4111 48 chrX 11518800 11519400 0.3545 41 chrX 11574300 11574600 0.2569 47 chrX 11660400 11660700 0.5699 28 chrX 11674800 11675100 0.3935 27 chrX 11707200 11713200 0 99 chrX 11842200 11842800 0.2064 47 chrX 11845500 11845800 0.4753 45 chrX 11935200 11941500 0 84 chrX 12005400 12005700 0.4387 34 chrX 12276900 12277200 0.3366 50 chrX 12560700 12561000 0.1427 35 chrX 12621900 12623700 0.002 15 chrX 12857400 12857700 0.2644 45 chrX 12927000 12928800 0.1754 62 chrX 13612200 13612500 0.1553 40 chrX 13674300 13674900 0.3802 42 chrX 13683000 13683300 0.4855 35 chrX 13881600 13883700 0 21 chrX 14085300 14085900 0.1188 44 chrX 14104500 14108400 0.1727 56 chrX 14286600 14286900 0.3537 50 chrX 14812200 14813100 0.2973 46 chrX 15000000 15000300 0.4629 39 chrX 15030000 15030900 0.2747 66 chrX 15092400 15092700 0.2693 41 chrX 15433500 15434100 0.5951 23 chrX 15647400 15648000 0.0421 37 chrX 15703800 15704400 0.0702 30 chrX 16230900 16232400 0.2652 46 chrX 16234200 16235100 0.0383 54 chrX 16260900 16261200 0.3441 16 chrX 16323600 16324200 0.0116 42 chrX 16325400 16325700 0.1524 74 chrX 16326900 16327200 0.1524 74 chrX 16336500 16338000 0.2195 56 chrX 16362300 16362600 0.2103 44 chrX 16364400 16364700 0.2103 44 chrX 16377600 16378500 0 29 chrX 16409700 16410000 0 25 chrX 16499400 16499700 0.1259 66 chrX 16501800 16503300 0.1259 66 chrX 16596600 16598100 0.2612 63 chrX 16672800 16673100 0.3542 26 chrX 16964700 16965300 0.5655 30 chrX 16968300 16968600 0.6138 40 chrX 16999800 17000100 0.4049 35 chrX 17055000 17055900 0.0905 57 chrX 17096400 17096700 0.3088 31 chrX 17118000 17118300 0.4892 39 chrX 17184300 17184600 0.2167 50 chrX 17231400 17234100 0.2736 68 chrX 17319300 17320500 0.0023 48 chrX 17342700 17347200 0.0969 74 chrX 17502600 17502900 0.3323 36 chrX 17737200 17737500 0.0802 169 chrX 17761200 17761500 0.3363 34 chrX 17763300 17763600 0.4488 31 chrX 17784000 17784600 0.3489 49 chrX 18105000 18105300 0.4688 55 chrX 18106500 18108600 0.0239 87 chrX 18109800 18110700 0.0239 87 chrX 18233100 18233400 0.3124 31 chrX 18234900 18235200 0.4726 36 chrX 18237600 18237900 0.4357 34 chrX 18531600 18531900 0.5173 25 chrX 18863100 18863400 0.5649 46 chrX 19143300 19148700 0 84 chrX 19236600 19236900 0.6896 21 chrX 19243200 19243500 0.3942 35 chrX 19452000 19452300 0.4813 16 chrX 19780200 19780500 0.301 35 chrX 19887600 19887900 0.3264 40 chrX 19941600 19946100 0 72 chrX 20127000 20127300 0.5389 34 chrX 20335500 20337000 0.0322 60 chrX 20416500 20416800 0.1372 49 chrX 20506200 20506500 0.4326 28 chrX 20649900 20650200 0.5252 42 chrX 20673900 20674200 0.5558 23 chrX 20704500 20704800 0.2546 50 chrX 20723400 20724600 0.1181 46 chrX 20784600 20784900 0.2787 45 chrX 20812200 20812500 0.3961 51 chrX 21099600 21099900 0.4092 34 chrX 21264300 21264600 0.4242 39 chrX 22613400 22614000 0.221 36 chrX 22658700 22660800 0.2413 67 chrX 23076300 23077500 0.2001 39 chrX 23238600 23244600 0 73 chrX 23457900 23458200 0.4335 37 chrX 23517000 23517300 0.6408 32 chrX 23530800 23531100 0.5325 30 chrX 23887200 23887500 0.3274 66 chrX 23973000 23974500 0 36 chrX 24043500 24043800 0.1102 41 chrX 24045900 24046200 0.6236 33 chrX 24053100 24053400 0.1093 42 chrX 24083100 24083700 0.5104 26 chrX 24134100 24135900 0 37 chrX 24274500 24275100 0.4326 20 chrX 24312900 24313200 0.3478 38 chrX 24336900 24337500 0.3642 45 chrX 24363000 24363300 0.366 27 chrX 24708300 24710100 0.0224 96 chrX 24805800 24806100 0.6619 19 chrX 25702800 25703100 0.3964 24 chrX 25815000 25815300 0.6316 25 chrX 25824300 25824600 0.0766 11 chrX 25929900 25930200 0.2294 14 chrX 26113500 26113800 0.4219 43 chrX 26163000 26163300 0.4393 38 chrX 26179800 26180400 0.3984 43 chrX 26196300 26196600 0.286 36 chrX 26313900 26320500 0 104 chrX 26423100 26423400 0.4452 49 chrX 26490300 26490600 0.514 50 chrX 26686500 26686800 0.444 49 chrX 26867400 26868000 0.5052 40 chrX 27109500 27110400 0.0159 60 chrX 27157500 27158100 0.6594 40 chrX 27226200 27227100 0.1976 56 chrX 27323100 27323400 0.2938 55 chrX 27514500 27514800 0.4608 31 chrX 27927600 27928200 0.0764 50 chrX 28095300 28095600 0.2468 34 chrX 28206900 28212600 0.0012 77 chrX 28230000 28230300 0.0338 96 chrX 28727400 28727700 0.4176 30 chrX 28950000 28951200 0.1399 52 chrX 28956600 28956900 0.3029 54 chrX 29332200 29334900 0.0481 128 chrX 29356200 29356500 0.0794 449 chrX 29582400 29583900 0.004 61 chrX 29916000 29916300 0.3013 65 chrX 29981700 29982000 0.3661 45 chrX 29984100 29986500 0.2868 60 chrX 30018900 30019200 0.0269 24 chrX 30324000 30324300 0.4356 48 chrX 30325500 30325800 0.554 74 chrX 30545400 30546000 0.3506 38 chrX 30599700 30603900 0.2009 63 chrX 30770400 30771600 0.2449 52 chrX 30873300 30873600 0.3142 40 chrX 31067100 31067400 0.6584 37 chrX 31080000 31080600 0.4067 60 chrX 31184400 31185000 0.269 33 chrX 31190400 31190700 0.4196 37 chrX 31227900 31228200 0.4466 36 chrX 31374000 31374300 0.4459 42 chrX 31511700 31513500 0.2293 49 chrX 31530600 31535700 0 64 chrX 31749600 31750500 0.4086 55 chrX 31798200 31798500 0.1544 109 chrX 31897500 31897800 0.0938 54 chrX 32244300 32246700 0.1308 60 chrX 32400600 32400900 0.4249 44 chrX 32486700 32487000 0.4187 35 chrX 32733600 32733900 0.3304 58 chrX 33190500 33190800 0.0069 20 chrX 33304500 33305100 0.3744 38 chrX 33524100 33524400 0.4986 25 chrX 34248300 34253100 0.0073 53 chrX 34415700 34416300 0.0839 47 chrX 34417500 34419300 0.0839 47 chrX 34819500 34820700 0.2006 47 chrX 35222100 35222700 0.2254 57 chrX 35314800 35317200 0.0184 61 chrX 35916900 35917200 0.2675 37 chrX 35939400 35940000 0.2007 45 chrX 36170700 36171000 0.1989 58 chrX 36172200 36172500 0.1989 58 chrX 36174600 36175200 0.1989 58 chrX 36229800 36231600 0.4764 45 chrX 36234000 36234300 0.3699 48 chrX 36298200 36298500 0.4519 36 chrX 36465300 36470700 0.0193 70 chrX 36986700 36988800 0.0352 36 chrX 36998100 36999300 0.0142 35 chrX 37038600 37039200 0.4438 43 chrX 37056600 37056900 0.5626 34 chrX 37085100 37099200 0 42 chrX 37399200 37399800 0.4478 60 chrX 37516500 37517400 0.3402 29 chrX 37554300 37555800 0.0144 40 chrX 37569300 37571400 0.0062 38 chrX 37630500 37630800 0.3764 57 chrX 38521500 38521800 0.4242 28 chrX 38535300 38536500 0.2134 62 chrX 38604000 38604300 0.2844 45 chrX 38605500 38606100 0.2844 45 chrX 39097800 39098100 0.6149 42 chrX 39130800 39131100 0.3917 42 chrX 39715200 39715500 0.2932 37 chrX 40110600 40110900 0.182 127 chrX 40210800 40211100 0.3716 51 chrX 40499400 40499700 0.6793 18 chrX 40557300 40557600 0.5062 17 chrX 40645800 40646100 0.5085 18 chrX 41282100 41282400 0.5259 47 chrX 41427300 41428200 0.0585 49 chrX 41613300 41613600 0.1955 58 chrX 41775000 41775300 0.4993 39 chrX 42006900 42007200 0.3438 42 chrX 42202500 42205500 0.0239 78 chrX 42425700 42428100 0.1128 61 chrX 42473400 42474900 0.125 52 chrX 42564600 42564900 0.367 50 chrX 42652800 42653100 0 33 chrX 42888900 42894300 0 89 chrX 42912900 42913200 0.5758 28 chrX 43304400 43311900 0 294 chrX 43574700 43575300 0.2384 46 chrX 43588500 43589400 0.0779 30 chrX 43671000 43671900 0.0757 61 chrX 43674000 43674900 0.0757 61 chrX 43809900 43810200 0.5291 38 chrX 43989300 43990200 0 36 chrX 43992600 43993500 0.0072 42 chrX 44282400 44282700 0.1779 78 chrX 44441100 44441400 0 15 chrX 44443800 44445900 0.0165 21 chrX 44601300 44601900 0.5527 29 chrX 45039600 45042000 0.0774 94 chrX 45108600 45108900 0.2553 52 chrX 45589800 45590100 0.0756 31 chrX 45604500 45604800 0.5503 30 chrX 45687900 45688800 0 36 chrX 45691500 45692400 0 36 chrX 45942900 45943200 0.4218 30 chrX 46275600 46275900 0.476 53 chrX 46394700 46395000 0.3049 33 chrX 46473000 46473300 0.4666 28 chrX 46509300 46509900 0.2775 47 chrX 46656000 46661100 0.1145 66 chrX 47036400 47037000 0.0988 69 chrX 47073000 47073300 0.4026 41 chrX 47148600 47148900 0.3262 13 chrX 47267400 47267700 0.4196 49 chrX 47327100 47327700 0.1316 22 chrX 47469000 47469300 0.4834 26 chrX 47509800 47512500 0.1013 37 chrX 47669400 47669700 0.1814 60 chrX 47784000 47787600 0 80 chrX 47789100 47791800 0.0087 73 chrX 47903100 47904000 0.1325 75 chrX 47906100 47907600 0.2386 31 chrX 48004500 48012000 0 42 chrX 48013200 48015600 0.0331 38 chrX 48017700 48020100 0 36 chrX 48039900 48040500 0.4696 39 chrX 48091800 48092700 0 35 chrX 48095100 48096000 0 31 chrX 48127200 48138000 0 53 chrX 48140400 48142500 0.1644 50 chrX 48172800 48173400 0.2391 52 chrX 48198900 48199200 0.2169 25 chrX 48232500 48233700 0.0795 55 chrX 48259800 48260100 0.1437 30 chrX 48308400 48308700 0.1829 27 chrX 48320100 48320400 0.3062 28 chrX 48339000 48339300 0.3102 24 chrX 48367500 48396300 0 54 chrX 48399300 48427800 0 43 chrX 48659100 48659400 0.3907 58 chrX 49009500 49009800 0.4509 56 chrX 49011000 49011300 0.4509 56 chrX 49305300 49305600 0.3392 63 chrX 49317600 49348500 0 150 chrX 49528500 49590000 0 165 chrX 49591800 49604100 0 138 chrX 49620900 49621200 0.5069 49 chrX 49623000 49623300 0.5784 50 chrX 49781100 49781400 0.4712 24 chrX 49814100 49814400 0.4162 48 chrX 49942800 49943700 0.2818 41 chrX 49966500 49968900 0 83 chrX 50019300 50025600 0 91 chrX 50057400 50057700 0.0714 61 chrX 50060100 50065800 0 80 chrX 50144700 50145000 0.5579 20 chrX 50175600 50175900 0.3784 51 chrX 50296200 50296800 0.1 40 chrX 50739600 50740200 0.0623 33 chrX 50761800 50762100 0.3459 57 chrX 50990700 50991900 0 29 chrX 51033000 51033600 0.0463 33 chrX 51079800 51081000 0 40 chrX 51111300 51112800 0.0116 79 chrX 51114600 51117600 0.0116 79 chrX 51160500 51161100 0.5268 34 chrX 51202200 51202500 0.4724 36 chrX 51217800 51218100 0.5227 55 chrX 51246900 51248400 0.3004 62 chrX 51260400 51261300 0.2384 53 chrX 51264300 51264600 0.2474 47 chrX 51265800 51267300 0.0795 68 chrX 51280500 51280800 0.2413 54 chrX 51429300 51429900 0.0113 39 chrX 51498300 51498600 0.392 33 chrX 51618000 51618600 0.0424 25 chrX 51646200 51646500 0.4214 49 chrX 51648600 51648900 0.1979 69 chrX 51668100 51693000 0 48 chrX 51700500 51725100 0 46 chrX 51840900 51841200 0.5468 38 chrX 51994200 51994500 0.4214 50 chrX 52020600 52020900 0.4717 37 chrX 52041000 52077000 0 44 chrX 52134300 52134600 0.349 35 chrX 52176900 52212900 0 45 chrX 52223400 52226100 0.0928 66 chrX 52267200 52268100 0.0114 19 chrX 52343700 52344000 0.5322 32 chrX 52384200 52384800 0.2089 58 chrX 52445100 52445700 0.0663 39 chrX 52456200 52461300 0 45 chrX 52473600 52502100 0 75 chrX 52510800 52539300 0 65 chrX 52644000 52644600 0 28 chrX 52670400 52788000 0 52 chrX 52789800 52791300 0.0047 37 chrX 52799100 52804200 0.005 42 chrX 52825800 52827300 0.2131 38 chrX 52882800 52920000 0 45 chrX 52935900 52973400 0 46 chrX 53338200 53339400 0 30 chrX 53504700 53505000 0.4589 58 chrX 53524500 53524800 0.4314 27 chrX 53577600 53580000 0.1103 77 chrX 53597400 53597700 0.1834 21 chrX 53698500 53699700 0.2476 52 chrX 53722200 53722500 0.2803 50 chrX 53760900 53761200 0.5305 48 chrX 53769300 53770500 0.2188 45 chrX 53772000 53772600 0.0088 29 chrX 53788500 53788800 0.3117 40 chrX 53967300 53967900 0.3283 78 chrX 54065400 54065700 0.3998 20 chrX 54078000 54078300 0.3908 34 chrX 54102300 54102900 0.055 29 chrX 54108900 54109500 0.0327 35 chrX 54118800 54124800 0 72 chrX 54572100 54572700 0.4137 63 chrX 54764400 54766800 0.0428 53 chrX 54768000 54770100 0.0428 53 chrX 54789900 54790200 0.3342 40 chrX 54823200 54823500 0.0576 30 chrX 54828000 54829800 0.1133 48 chrX 54967500 54968400 0 45 chrX 54970500 54971400 0 45 chrX 55036800 55037100 0.4127 34 chrX 55077900 55079700 0 42 chrX 55091700 55093800 0 35 chrX 55271700 55272000 0.422 32 chrX 55280700 55281000 0.5169 43 chrX 55291500 55291800 0.4273 37 chrX 55453800 55480200 0 49 chrX 55493100 55519500 0 44 chrX 55527900 55528200 0.5458 33 chrX 55586700 55587000 0.2582 32 chrX 55806600 55807200 0.1024 67 chrX 56056500 56056800 0.3839 25 chrX 56137200 56137500 0.2972 43 chrX 56164200 56165100 0.14 32 chrX 56189700 56190000 0.4802 15 chrX 56432100 56441100 0 41 chrX 56457000 56457300 0.387 41 chrX 56695800 56701800 0 89 chrX 56755800 56756100 0.4544 29 chrX 56767800 56781000 0 63 chrX 56915100 56915400 0.307 32 chrX 57120300 57120900 0.1136 31 chrX 57131100 57131400 0.4632 36 chrX 57136200 57136800 0.1188 32 chrX 57297600 57298800 0 37 chrX 57325500 57327000 0.0059 35 chrX 57335400 57335700 0.6845 59 chrX 57438600 57438900 0.5979 35 chrX 57594000 57594300 0.5938 36 chrX 57800100 57800700 0.2019 55 chrX 57851400 57851700 0.334 56 chrX 57908400 57908700 0.4966 31 chrX 58133400 58135800 0 46 chrX 58394700 58395000 0.3074 35 chrX 58465800 58466100 0.5191 29 chrX 58467600 58469100 0.0173 69 chrX 58480500 58485300 0 49 chrX 58486500 58487700 0 42 chrX 58493700 58494600 0 40 chrX 58498800 58506000 0 44 chrX 58518300 58518600 0.6084 60 chrX 58537800 58538100 0 115 chrX 58539300 58555500 0 115 chrX 58606200 58874700 0 196 chrX 58875900 58935000 0 267 chrX 58936200 58988700 0 267 chrX 58989900 59144700 0 179 chrX 59145900 59185800 0 107 chrX 59187600 59189700 0 43 chrX 59190900 59316600 0 205 chrX 59317800 59327100 0 205 chrX 59329200 59425200 0 229 chrX 59427000 59457300 0 229 chrX 59458500 59594400 0 229 chrX 59598600 59666100 0 207 chrX 59667300 59695500 0 207 chrX 59696700 59735100 0 207 chrX 59736600 59824200 0 207 chrX 59825400 59889600 0 150 chrX 59891100 59921400 0 232 chrX 59922600 59961000 0 232 chrX 59962200 60066600 0 405 chrX 60067800 60153300 0 405 chrX 60154500 60208800 0 114 chrX 60210300 60264900 0 321 chrX 60266400 60405000 0 321 chrX 60406200 60483000 0 321 chrX 60484800 60486600 0 321 chrX 60487800 60774600 0 321 chrX 60776100 60971100 0 321 chrX 60972300 60987900 0 321 chrX 60989100 61022400 0 321 chrX 61024800 61203000 0 361 chrX 61204200 61286100 0 361 chrX 61287300 61368600 0 328 chrX 61369800 61437300 0 328 chrX 61438800 61467300 0 328 chrX 61468500 61511400 0 328 chrX 61513800 61581900 0 328 chrX 61583100 61738500 0 328 chrX 61739700 61819800 0 328 chrX 61821300 61862700 0 328 chrX 61863900 61929600 0 328 chrX 61930800 61955700 0 312 chrX 61956900 61997700 0 312 chrX 61998900 62159400 0 312 chrX 62160600 62189100 0 312 chrX 62190300 62247000 0 312 chrX 62248200 62321700 0 222 chrX 62323200 62412600 0 222 chrX 62462700 62466000 0 240 chrX 62467200 62488200 0 117 chrX 62489400 62495700 0 117 chrX 62497800 62499600 0 44 chrX 62500800 62506200 0 44 chrX 62511000 62511900 0.4953 113 chrX 62513100 62514000 0.6427 129 chrX 62535300 62535600 0.6455 50 chrX 62555100 62555400 0.5221 73 chrX 62563200 62564100 0.493 54 chrX 62565600 62565900 0.493 54 chrX 62567100 62568300 0.5982 60 chrX 62570700 62571000 0.3311 86 chrX 62572500 62573400 0.3311 86 chrX 62575200 62575500 0.5995 59 chrX 62577300 62577600 0.6678 47 chrX 62583600 62587200 0.5337 72 chrX 62589300 62589600 0.6046 65 chrX 62595600 62596200 0.6323 77 chrX 62603100 62603700 0.2658 22 chrX 62612700 62613000 0.5949 61 chrX 62640300 62640600 0.6701 52 chrX 62646900 62648700 0.433 168 chrX 62661600 62662200 0.5919 49 chrX 62671200 62671500 0.6825 44 chrX 63062100 63062700 0.4062 51 chrX 63129300 63185400 0 47 chrX 63188700 63190500 0.0148 67 chrX 63193500 63249900 0 47 chrX 63319500 63319800 0.2815 55 chrX 63393600 63394200 0.2914 50 chrX 63518100 63518400 0.2184 61 chrX 63597900 63598800 0.338 42 chrX 63600900 63601500 0.338 42 chrX 64013400 64019100 0.0418 60 chrX 64110900 64112400 0.0033 49 chrX 64114200 64115100 0.0033 49 chrX 64134000 64135200 0.0029 44 chrX 64254000 64258500 0 91 chrX 64296900 64300800 0.1922 54 chrX 64516500 64519200 0.0195 58 chrX 64649100 64649700 0.4107 42 chrX 65002500 65003100 0.3959 45 chrX 65189100 65189400 0.1918 52 chrX 65190900 65191500 0.1918 52 chrX 65207700 65211300 0 83 chrX 65383800 65384400 0.2453 55 chrX 65456400 65458200 0.1056 66 chrX 65614800 65617800 0.0603 65 chrX 65619000 65619600 0.379 50 chrX 65824800 65825100 0.3658 47 chrX 65834100 65834700 0.1593 43 chrX 65876700 65877000 0.3114 42 chrX 66066900 66067500 0.016 70 chrX 66080100 66080700 0.0984 45 chrX 66137100 66138300 0.0109 75 chrX 66180900 66186300 0 87 chrX 66229800 66231000 0.2133 48 chrX 66467100 66467400 0.6917 30 chrX 66550200 66550500 0.4872 21 chrX 66560100 66560700 0.1511 36 chrX 66646500 66646800 0.1682 54 chrX 66649200 66649500 0.6012 53 chrX 66713700 66715500 0.3534 46 chrX 66747300 66747600 0.1565 37 chrX 66925500 66926700 0.2321 45 chrX 66929100 66930000 0.2321 45 chrX 66944400 66944700 0.4784 53 chrX 66953400 66954000 0.0846 75 chrX 66995100 66995400 0.6246 21 chrX 67060200 67060800 0.068 66 chrX 67169100 67170300 0 55 chrX 67193400 67193700 0.3823 49 chrX 67259100 67259400 0.4681 55 chrX 67312800 67313100 0.5662 36 chrX 67415100 67415700 0.3213 430 chrX 67836300 67836600 0.3241 39 chrX 68042700 68043300 0.0332 54 chrX 68082900 68083200 0.449 47 chrX 68170200 68170500 0.3205 41 chrX 68217900 68221500 0.0222 55 chrX 68325900 68327700 0.0088 37 chrX 68379300 68379600 0.4205 40 chrX 68394000 68394300 0.6587 33 chrX 68475000 68475300 0.4572 40 chrX 68630100 68630400 0.5712 35 chrX 68652600 68653800 0.3235 79 chrX 69057900 69058200 0.377 47 chrX 69339000 69339600 0.3454 47 chrX 69355200 69355500 0.3317 66 chrX 69453900 69454200 0.3246 51 chrX 69677100 69677400 0.1952 57 chrX 69680400 69680700 0.1952 57 chrX 69749100 69749400 0.0367 50 chrX 69784200 69786600 0.1427 44 chrX 69822900 69826800 0.0339 54 chrX 69949800 69951000 0.09 47 chrX 69982800 69987000 0 85 chrX 70099500 70104300 0.0117 74 chrX 70347600 70347900 0.4923 31 chrX 70364400 70364700 0.2706 46 chrX 70372200 70372500 0.4908 58 chrX 70566000 70566300 0.3248 42 chrX 70600500 70603500 0.0031 63 chrX 70631700 70632000 0.0429 31 chrX 70642500 70644900 0.011 67 chrX 70679400 70680600 0.2979 61 chrX 70716000 70716300 0.4278 38 chrX 70728600 70729200 0.2831 32 chrX 70748700 70749000 0.2471 42 chrX 70938600 70940100 0.2148 63 chrX 71340600 71341200 0.252 53 chrX 71349600 71352600 0 34 chrX 71414100 71416200 0 41 chrX 71520600 71523000 0 20 chrX 71591400 71595000 0.2089 39 chrX 71683500 71798100 0 49 chrX 71812500 71812800 0.4414 32 chrX 71897400 71897700 0.2572 34 chrX 71903400 71903700 0.0306 27 chrX 72177900 72180000 0.0361 88 chrX 72444600 72445200 0.3171 49 chrX 72654900 72655200 0.6551 19 chrX 72680700 72683100 0.0672 70 chrX 72741600 72741900 0.525 43 chrX 72743400 72757200 0 61 chrX 72758400 72962400 0 61 chrX 72963600 72979200 0 61 chrX 72996300 73005000 0 39 chrX 73009500 73011900 0 64 chrX 73033200 73033800 0.1668 47 chrX 73078200 73086900 0 44 chrX 73106100 73112700 0 94 chrX 73290900 73292100 0.0093 65 chrX 73381200 73387200 0 78 chrX 73512600 73512900 0.2213 54 chrX 73516200 73516800 0.4403 55 chrX 73599900 73600500 0.2428 50 chrX 73604100 73604400 0.2855 33 chrX 73642500 73642800 0.5978 26 chrX 73887600 73890600 0.0605 60 chrX 74166900 74168100 0.6103 33 chrX 74568000 74568300 0.5476 32 chrX 74661300 74661600 0.4214 47 chrX 74790000 74790300 0.369 37 chrX 74792100 74794500 0.1932 60 chrX 74874000 74874900 0.2478 45 chrX 74876400 74877000 0.3681 45 chrX 74991000 74992500 0.0584 87 chrX 75184200 75184800 0.4198 45 chrX 75218400 75218700 0.1423 58 chrX 75437400 75437700 0.2466 39 chrX 75510600 75513300 0 55 chrX 75537900 75538500 0.2908 57 chrX 75541200 75541500 0.3482 43 chrX 75590100 75590700 0.3679 45 chrX 75677100 75677400 0.334 38 chrX 76003200 76007700 0.0014 51 chrX 76034100 76034400 0.141 27 chrX 76057500 76057800 0.2355 55 chrX 76070700 76071000 0.5098 44 chrX 76074000 76074300 0.2244 45 chrX 76092900 76093200 0.2199 36 chrX 76113000 76113300 0.3491 40 chrX 76141800 76146000 0 42 chrX 76149300 76153200 0 42 chrX 76217100 76219200 0.2403 47 chrX 76270800 76272300 0.1092 57 chrX 76277700 76278000 0.144 44 chrX 76293000 76293300 0.1588 54 chrX 76323000 76327200 0.0104 84 chrX 76374600 76376100 0.1709 45 chrX 76481400 76481700 0.3452 57 chrX 76548000 76548300 0.4724 29 chrX 76581900 76582200 0.1434 24 chrX 76652400 76652700 0.4898 51 chrX 76750500 76750800 0.5966 28 chrX 76947300 76947600 0.4202 39 chrX 76980300 76980600 0.4916 49 chrX 76983900 76984200 0.6928 44 chrX 77048400 77048700 0.6327 48 chrX 77145300 77145900 0.2279 31 chrX 77205000 77208600 0 58 chrX 77246100 77246700 0.2049 56 chrX 77247900 77248200 0.2988 43 chrX 77278500 77278800 0.635 30 chrX 77307300 77307600 0.1703 25 chrX 77352000 77352300 0.5116 42 chrX 78058200 78059100 0.2017 48 chrX 78072300 78072600 0.5353 29 chrX 78154200 78154500 0.385 61 chrX 78172500 78173100 0.005 35 chrX 78184200 78184500 0.4465 61 chrX 78196500 78197400 0 26 chrX 78229800 78230700 0.0694 59 chrX 78269100 78269400 0.005 14 chrX 78403200 78404100 0.2157 56 chrX 78410700 78411000 0.4341 46 chrX 78414000 78414300 0.2482 33 chrX 78441300 78441900 0 52 chrX 78853800 78854400 0.19 62 chrX 79086000 79086900 0.0477 50 chrX 79200300 79200600 0.2972 50 chrX 79224300 79224600 0.1521 43 chrX 79699500 79699800 0.4247 22 chrX 79743300 79743900 0.2971 77 chrX 79765800 79770900 0.0311 63 chrX 79816800 79817100 0.6018 12 chrX 79927800 79928400 0.067 68 chrX 79930200 79931700 0.067 68 chrX 80001600 80001900 0.4544 35 chrX 80154300 80154600 0.306 58 chrX 80187900 80188200 0.1358 33 chrX 80384100 80384400 0.458 24 chrX 80392500 80392800 0.3771 28 chrX 80406300 80407800 0.0749 68 chrX 80409600 80410800 0.0749 68 chrX 80534100 80536800 0.0575 57 chrX 80872200 80872500 0.1678 34 chrX 80977200 80978100 0.1854 53 chrX 81043500 81043800 0.358 27 chrX 81066900 81067500 0.2296 62 chrX 81591600 81591900 0.3267 51 chrX 81734100 81734400 0.5369 41 chrX 81810000 81810300 0.3535 38 chrX 81832800 81833100 0.0762 41 chrX 81841200 81847200 0 71 chrX 81972600 81973200 0.1751 61 chrX 81975900 81976800 0.1955 54 chrX 82013100 82013700 0.196 65 chrX 82119600 82120200 0.3519 39 chrX 82160100 82160400 0.3745 26 chrX 82491300 82492800 0.1387 87 chrX 82546500 82546800 0.3819 48 chrX 82713300 82713600 0.4392 41 chrX 82856400 82859100 0.0035 55 chrX 82903500 82904100 0.224 46 chrX 83059500 83065500 0 70 chrX 83316000 83316300 0.2889 66 chrX 83396700 83397000 0.4152 46 chrX 83542800 83549100 0 61 chrX 83568300 83568900 0.2952 42 chrX 83673600 83673900 0.3533 36 chrX 83731500 83731800 0.2173 41 chrX 83838000 83838600 0.1262 71 chrX 83840100 83843400 0.1262 71 chrX 83917500 83918100 0.2918 44 chrX 84163500 84163800 0.3965 17 chrX 84373800 84375300 0.4569 46 chrX 84385200 84385500 0.521 24 chrX 84435600 84436200 0.2376 95 chrX 84604500 84606000 0.0495 94 chrX 84817500 84817800 0.3899 85 chrX 84858300 84858900 0.2536 25 chrX 84871800 84872100 0.3733 28 chrX 84993900 84994500 0.2496 50 chrX 85060200 85060500 0.1954 30 chrX 85095600 85095900 0.5822 21 chrX 85254300 85254600 0.0712 25 chrX 85321500 85321800 0.4766 19 chrX 85422600 85422900 0.2953 43 chrX 85425300 85425600 0.1569 53 chrX 85529700 85530000 0.3172 64 chrX 85531500 85531800 0.3172 64 chrX 85533300 85534200 0.3172 64 chrX 85892100 85892400 0.6855 33 chrX 86074800 86075400 0.3538 36 chrX 86114100 86114700 0.0396 43 chrX 86116500 86117700 0.0396 43 chrX 86289900 86290200 0.2795 63 chrX 86294700 86295000 0.4156 52 chrX 86350200 86354700 0 73 chrX 86396100 86396700 0.3004 46 chrX 86446500 86449500 0 87 chrX 86557500 86562000 0 74 chrX 86623800 86624100 0.4573 23 chrX 86871300 86871900 0.3014 31 chrX 86901000 86901300 0.6454 24 chrX 86970600 86973300 0.0983 62 chrX 87117300 87120000 0.0321 45 chrX 87121200 87122100 0.0321 45 chrX 87499500 87500100 0.1061 34 chrX 87532500 87532800 0.3147 44 chrX 87555600 87555900 0.3602 46 chrX 87821400 87827400 0 88 chrX 87828900 87829500 0.3472 36 chrX 88033500 88036500 0.006 73 chrX 88208700 88209300 0.2124 69 chrX 88210500 88210800 0.2124 69 chrX 88212600 88213800 0.2124 69 chrX 88488000 88488300 0.4448 24 chrX 88548600 88548900 0.3813 37 chrX 88743000 88743300 0.5097 30 chrX 88782300 88783200 0.2839 69 chrX 88784400 88784700 0.2839 69 chrX 89060700 89061300 0.3686 47 chrX 89211600 89212200 0.224 20 chrX 89229000 89229600 0.5629 29 chrX 89245800 89246100 0.2036 29 chrX 89256900 89257200 0.2686 33 chrX 89274600 89274900 0.4966 32 chrX 89280900 89281200 0.3759 35 chrX 89284500 89285400 0.2304 42 chrX 89287800 89288100 0.2304 42 chrX 89290800 89291100 0.5153 21 chrX 89294700 89296500 0.2741 41 chrX 89297700 89298000 0.4245 22 chrX 89299200 89299500 0.3972 21 chrX 89306100 89306700 0.1978 28 chrX 89316600 89316900 0.424 17 chrX 89323200 89323800 0.0229 29 chrX 89325600 89325900 0.3068 31 chrX 89329500 89330100 0.413 27 chrX 89341800 89342100 0.4366 24 chrX 89343300 89343600 0.4366 24 chrX 89353800 89354100 0.3483 33 chrX 89357400 89358000 0.1686 34 chrX 89364300 89364600 0.3728 30 chrX 89368500 89368800 0.5442 29 chrX 89376300 89377800 0.4214 34 chrX 89386200 89386500 0.5432 25 chrX 89390700 89391000 0.1996 26 chrX 89396400 89396700 0.3963 27 chrX 89399700 89403600 0.0572 33 chrX 89406300 89406600 0.0466 27 chrX 89408400 89409000 0.0466 27 chrX 89415900 89416500 0.0365 32 chrX 89422500 89424000 0.2199 38 chrX 89426100 89426400 0.4065 28 chrX 89428200 89428500 0.4348 17 chrX 89431500 89433000 0.3985 30 chrX 89434200 89435400 0.3985 30 chrX 89437200 89437500 0.501 27 chrX 89447100 89448300 0.1191 28 chrX 89458200 89458500 0.212 35 chrX 89459700 89460000 0.212 35 chrX 89466900 89467200 0.2901 28 chrX 89474400 89474700 0.6922 11 chrX 89477400 89477700 0.115 39 chrX 89479200 89479500 0.115 39 chrX 89485800 89486100 0.6214 14 chrX 89504100 89505600 0.1145 44 chrX 89506800 89507700 0.1145 44 chrX 89512500 89514300 0.2628 29 chrX 89515500 89517300 0.3625 36 chrX 89520900 89521200 0.4516 35 chrX 89530200 89530500 0.4984 31 chrX 89535300 89536500 0.2952 29 chrX 89538000 89538600 0.4538 23 chrX 89541000 89541300 0.4929 21 chrX 89542500 89544300 0.1479 25 chrX 89546100 89547300 0.1784 29 chrX 89549400 89550000 0.4973 39 chrX 89552700 89553000 0.5736 35 chrX 89559000 89561400 0.1295 33 chrX 89572500 89574000 0.1899 30 chrX 89578500 89578800 0.3808 24 chrX 89582100 89582400 0.1837 30 chrX 89600700 89601000 0.5695 27 chrX 89616000 89616300 0.6636 19 chrX 89619300 89619900 0.0325 33 chrX 89628000 89628300 0.5982 13 chrX 89629800 89630700 0.175 29 chrX 89636700 89637000 0.4813 25 chrX 89641200 89641500 0.4471 28 chrX 89643300 89643600 0.4951 25 chrX 89655900 89656200 0.1173 36 chrX 89659500 89659800 0.3262 36 chrX 89664900 89665500 0.4122 36 chrX 89678400 89678700 0.4802 26 chrX 89685000 89685600 0.0164 25 chrX 89693100 89693400 0.2345 39 chrX 89707200 89708700 0.0181 31 chrX 89709900 89711100 0.0872 32 chrX 89720400 89723100 0.3498 31 chrX 89726100 89726400 0.3831 22 chrX 89729400 89730000 0.1111 27 chrX 89745000 89745300 0.4157 24 chrX 89767800 89768400 0.3934 36 chrX 89773200 89775600 0.1285 35 chrX 89778000 89778300 0.3227 29 chrX 89782500 89782800 0.2818 28 chrX 89788500 89790000 0.4636 30 chrX 89791800 89792100 0.5685 26 chrX 89796300 89796600 0.274 29 chrX 89802000 89802300 0.1118 37 chrX 89816100 89816400 0.3455 31 chrX 89818200 89818500 0.3499 29 chrX 89828400 89829000 0.0897 30 chrX 89830500 89830800 0.0897 30 chrX 89848200 89851800 0 31 chrX 89853300 89853600 0.2933 28 chrX 89856000 89856600 0.0712 31 chrX 89859600 89859900 0.4273 26 chrX 89872200 89872500 0.2514 31 chrX 89877300 89877600 0.3892 28 chrX 89881200 89881500 0.1886 33 chrX 89883000 89885400 0.1886 33 chrX 89889000 89889600 0.386 35 chrX 89892900 89893500 0.3524 27 chrX 89898900 89899200 0.3105 31 chrX 89908500 89910600 0.3649 27 chrX 89914500 89914800 0.0907 27 chrX 89916300 89916600 0.0907 27 chrX 89924100 89924400 0.3874 21 chrX 89927700 89928900 0.3103 23 chrX 89933100 89933400 0.3809 55 chrX 89936700 89937000 0.3884 33 chrX 89946600 89947500 0.2743 31 chrX 89960400 89960700 0.4848 36 chrX 89973000 89973300 0.5296 26 chrX 89976000 89976300 0.2273 31 chrX 89987700 89988000 0.3175 33 chrX 89991300 89991600 0.0923 40 chrX 89993100 89995500 0.0923 40 chrX 90001200 90001800 0.3256 27 chrX 90004200 90004500 0.327 32 chrX 90096600 90096900 0.3415 25 chrX 90102300 90103200 0.3273 33 chrX 90123900 90124800 0.223 26 chrX 90128700 90129600 0.1099 26 chrX 90132900 90133200 0.1829 11 chrX 90138000 90138300 0.0841 33 chrX 90144300 90144600 0.15 13 chrX 90145800 90146400 0.0119 38 chrX 90150300 90150600 0.1308 31 chrX 90179400 90179700 0.033 23 chrX 90182100 90182400 0.2378 29 chrX 90186300 90186900 0.0853 34 chrX 90218700 90221100 0.1124 29 chrX 90222900 90223200 0.5855 29 chrX 90224400 90224700 0.1454 25 chrX 90230700 90231000 0.3918 28 chrX 90234900 90235200 0.0208 45 chrX 90236400 90236700 0.2923 27 chrX 90238200 90238800 0.2923 27 chrX 90244800 90245100 0.3427 35 chrX 90254700 90255000 0.2697 32 chrX 90257400 90257700 0.5941 27 chrX 90264000 90264300 0.6476 24 chrX 90267300 90267600 0.4052 18 chrX 90268800 90269100 0.5459 30 chrX 90272100 90273000 0.0403 28 chrX 90274500 90274800 0.4953 19 chrX 90279600 90279900 0.2292 30 chrX 90284400 90284700 0.1282 25 chrX 90307500 90308400 0 29 chrX 90316500 90317100 0.24 30 chrX 90320700 90321000 0.1289 11 chrX 90346800 90347100 0.1524 28 chrX 90349800 90350100 0.5603 24 chrX 90390900 90391200 0.288 28 chrX 90393300 90393600 0.4496 22 chrX 90397500 90398100 0.0493 29 chrX 90399900 90400200 0.6321 21 chrX 90409800 90410100 0.4705 20 chrX 90413700 90414000 0.5118 23 chrX 90418200 90418500 0.4146 27 chrX 90423000 90423300 0.2424 33 chrX 90437700 90438000 0.4255 22 chrX 90441300 90441600 0.2564 27 chrX 90444000 90444300 0.4734 24 chrX 90445800 90446400 0.1019 30 chrX 90460800 90461400 0.2694 28 chrX 90465000 90465300 0.1659 27 chrX 90483300 90484800 0.4027 34 chrX 90489000 90489600 0.5197 40 chrX 90528300 90528900 0.1102 21 chrX 90542400 90542700 0.2748 24 chrX 90555300 90555600 0.2726 26 chrX 90573600 90573900 0.4708 22 chrX 90575100 90575700 0.0723 33 chrX 90579600 90580200 0.4036 38 chrX 90594000 90594300 0.439 31 chrX 90610200 90610500 0.4295 28 chrX 90622500 90622800 0.5201 28 chrX 90645600 90645900 0.4498 17 chrX 90647100 90647400 0.2906 26 chrX 90670500 90672000 0.3996 24 chrX 90674400 90674700 0.3063 24 chrX 90684600 90685200 0.2078 19 chrX 90686700 90687000 0.4688 26 chrX 90693300 90693900 0.2903 32 chrX 90700500 90700800 0.4597 23 chrX 90702600 90702900 0.4214 29 chrX 90725700 90726000 0.3769 29 chrX 90728700 90729600 0.3831 29 chrX 90749100 90749700 0.5821 20 chrX 90753300 90753600 0.5655 23 chrX 90757200 90757500 0.4142 27 chrX 90792300 90792600 0.2022 25 chrX 90793800 90794100 0.3885 24 chrX 90795900 90796200 0.4852 23 chrX 90803100 90803400 0.4932 25 chrX 90810000 90810300 0.0492 31 chrX 90832500 90832800 0.6416 19 chrX 90864000 90864300 0.2044 25 chrX 90868200 90869700 0.0129 36 chrX 90890700 90891000 0.248 32 chrX 90901500 90902100 0.4329 27 chrX 90904800 90905100 0.3917 23 chrX 90908400 90908700 0.022 30 chrX 90910500 90911100 0.0433 34 chrX 90921300 90921600 0.2814 30 chrX 90926400 90926700 0.2321 25 chrX 90934800 90935100 0.0245 23 chrX 90951000 90951300 0.5943 34 chrX 90953700 90954000 0.6212 29 chrX 90956700 90957000 0.4801 36 chrX 90960300 90961500 0.132 25 chrX 90963600 90964800 0.0976 25 chrX 90966300 90968100 0 36 chrX 90969900 90970200 0.4156 27 chrX 90977400 90978300 0.2173 29 chrX 90981000 90981300 0.3719 26 chrX 90996900 90997200 0.6962 16 chrX 90998700 90999000 0.26 25 chrX 91005900 91006200 0.3825 32 chrX 91020900 91021200 0.616 26 chrX 91144200 91144500 0.4929 27 chrX 91146900 91148100 0.2612 21 chrX 91151100 91151400 0.3048 34 chrX 91154400 91154700 0.3048 34 chrX 91160700 91161600 0.1683 28 chrX 91163400 91165200 0.2502 33 chrX 91168200 91169100 0.1135 33 chrX 91175400 91175700 0.3437 32 chrX 91183200 91183500 0.3712 32 chrX 91187700 91188000 0.4356 14 chrX 91203000 91203300 0.3239 30 chrX 91212000 91212300 0.3901 19 chrX 91214100 91216200 0.1664 35 chrX 91231200 91231800 0.4916 32 chrX 91242300 91242600 0.6076 24 chrX 91244400 91246200 0.3107 25 chrX 91334700 91335000 0.3013 46 chrX 91336200 91336500 0.3013 46 chrX 91358400 91358700 0.0428 53 chrX 91360200 91361100 0.0428 53 chrX 91480800 91481100 0.3759 36 chrX 91484400 91484700 0.5821 34 chrX 91485900 91487100 0.3882 35 chrX 91488300 91488600 0.4077 17 chrX 91500000 91500300 0.3669 26 chrX 91507500 91510200 0 33 chrX 91512600 91512900 0.2917 52 chrX 91518900 91519200 0.3758 23 chrX 91520400 91521000 0.2939 28 chrX 91530000 91530300 0.1548 32 chrX 91533900 91534200 0.3514 36 chrX 91542000 91542300 0.5135 26 chrX 91556700 91557300 0.4105 25 chrX 91566000 91566600 0.0998 29 chrX 91572300 91572600 0.3622 46 chrX 91575300 91575600 0.3347 20 chrX 91580400 91582200 0.2603 33 chrX 91592700 91593000 0.2225 27 chrX 91612200 91612800 0.3872 30 chrX 91614900 91615200 0.4913 24 chrX 91631100 91631400 0.2109 56 chrX 91632600 91632900 0.2109 56 chrX 91641000 91641300 0.3023 28 chrX 91646100 91646400 0.2805 28 chrX 91650600 91652700 0.135 34 chrX 91664700 91665600 0.0474 38 chrX 91666800 91667400 0.0474 38 chrX 91680300 91682700 0.2572 44 chrX 91689900 91690200 0.2955 32 chrX 91702500 91702800 0.5047 26 chrX 91740900 91741200 0.2993 25 chrX 91742700 91743300 0.3412 39 chrX 91744800 91746300 0.0621 34 chrX 91754400 91755000 0.3754 43 chrX 91757400 91758000 0.2254 42 chrX 91762200 91763100 0.5181 36 chrX 91766400 91766700 0.6416 23 chrX 91770900 91772100 0.2769 30 chrX 91778400 91779900 0.1299 35 chrX 91786500 91786800 0.2864 26 chrX 91789200 91790100 0.2929 36 chrX 91797300 91797600 0.3951 31 chrX 91811700 91812000 0.2019 34 chrX 91814400 91815000 0.4148 34 chrX 91819800 91821900 0.1294 52 chrX 91826400 91827000 0.1567 33 chrX 91831500 91832100 0.2707 30 chrX 91841700 91842900 0.2665 27 chrX 91849800 91850100 0.474 28 chrX 91852800 91853100 0.4334 23 chrX 91856100 91856400 0.2966 30 chrX 91862400 91863000 0.0673 25 chrX 91864500 91864800 0.563 29 chrX 91874700 91875000 0.3863 23 chrX 91877100 91877400 0.2138 34 chrX 91891500 91892100 0.4728 19 chrX 91896600 91897800 0.0098 26 chrX 91928400 91928700 0.2324 26 chrX 91932300 91932600 0.551 21 chrX 91935000 91936200 0.5583 35 chrX 91938300 91938600 0.3979 23 chrX 91943100 91944300 0.3206 33 chrX 91947300 91947600 0.3206 33 chrX 91951500 91951800 0.2746 21 chrX 91959900 91961400 0.1478 33 chrX 91972200 91972500 0.283 37 chrX 91979400 91980300 0.0888 30 chrX 91984200 91984500 0.4642 12 chrX 91986000 91986300 0.4133 24 chrX 91991100 91991400 0.4849 23 chrX 91993800 91994100 0.463 25 chrX 91996500 91997100 0.0024 30 chrX 92000700 92002200 0.2996 32 chrX 92016900 92017200 0.3978 30 chrX 92025300 92028900 0.2464 38 chrX 92035500 92036100 0.021 33 chrX 92044500 92044800 0.4656 23 chrX 92047200 92047500 0.5952 23 chrX 92052300 92052900 0.1669 22 chrX 92055000 92055600 0.006 30 chrX 92060100 92060400 0.4175 22 chrX 92066100 92066400 0.2071 22 chrX 92151900 92152200 0.1799 21 chrX 92154900 92155500 0.0429 31 chrX 92161800 92162100 0.0948 36 chrX 92164800 92165100 0.3652 31 chrX 92167800 92168100 0.1237 22 chrX 92219700 92220300 0.021 26 chrX 92254800 92255100 0.3475 42 chrX 92286600 92286900 0.1368 24 chrX 92291400 92291700 0.5251 28 chrX 92294700 92295000 0.3784 27 chrX 92296800 92297100 0.1761 43 chrX 92307900 92308200 0.3973 37 chrX 92324700 92325000 0.4682 30 chrX 92327700 92328000 0.4439 19 chrX 92330700 92331000 0.503 28 chrX 92349000 92349300 0.1759 16 chrX 92356500 92356800 0.1967 30 chrX 92362200 92363100 0.0137 23 chrX 92371200 92372700 0.1899 33 chrX 92374200 92374500 0.3002 16 chrX 92379900 92381400 0.3076 24 chrX 92385000 92385300 0.6853 16 chrX 92388900 92389200 0.1943 25 chrX 92390700 92391000 0.6243 30 chrX 92405100 92405400 0.2628 32 chrX 92410200 92410500 0.5461 25 chrX 92412900 92414400 0.0954 33 chrX 92425800 92426100 0.2831 28 chrX 92448000 92448600 0.2404 39 chrX 92455200 92457000 0.0158 31 chrX 92458200 92459700 0.0158 31 chrX 92468700 92469000 0.2578 22 chrX 92470200 92470500 0.2578 22 chrX 92476800 92477100 0.1024 32 chrX 92481900 92482200 0.3224 26 chrX 92483400 92483700 0.0776 23 chrX 92488800 92489100 0.0918 27 chrX 92494200 92495100 0.3151 29 chrX 92503200 92503500 0.3857 26 chrX 92511900 92512200 0.3443 26 chrX 92543100 92543400 0.6394 29 chrX 92562000 92562300 0.574 30 chrX 92570400 92571000 0.4404 30 chrX 92572200 92572500 0.594 40 chrX 92574000 92574300 0.2292 37 chrX 92581800 92582100 0.3187 27 chrX 92583300 92583600 0.2839 29 chrX 92588100 92588400 0.3479 15 chrX 92592000 92592300 0.1386 35 chrX 92593800 92594100 0.1386 35 chrX 92595300 92595900 0.0765 26 chrX 92598600 92598900 0.2825 25 chrX 92602500 92602800 0.3297 27 chrX 92615700 92616600 0.0229 32 chrX 92622000 92622300 0.2421 25 chrX 92629500 92629800 0.4881 32 chrX 92638800 92639100 0.4914 43 chrX 92643000 92644500 0.1093 34 chrX 92662200 92662500 0.5038 30 chrX 92670300 92670600 0.6128 27 chrX 92680800 92681100 0.6689 26 chrX 92689800 92690100 0.3381 33 chrX 92704800 92705100 0.1313 21 chrX 92710500 92710800 0.4733 27 chrX 92713500 92713800 0.4898 24 chrX 92718000 92718300 0.4667 26 chrX 92738700 92739000 0.3512 22 chrX 92742600 92742900 0.1807 27 chrX 92745000 92747100 0.1466 32 chrX 92748300 92748900 0.2599 32 chrX 92751000 92751300 0.2851 34 chrX 92758200 92759700 0.187 32 chrX 92760900 92761200 0.187 32 chrX 92773800 92774100 0.3691 47 chrX 92775300 92775600 0.3297 27 chrX 92781300 92781600 0.5749 36 chrX 92787300 92787600 0.4993 34 chrX 92795700 92797200 0.1888 23 chrX 92805900 92806800 0 33 chrX 92817900 92818200 0.1101 43 chrX 92835600 92836500 0.1758 31 chrX 92838900 92839200 0.2952 39 chrX 92842800 92843100 0.4512 23 chrX 92852100 92852400 0.6427 24 chrX 92854500 92854800 0.1151 30 chrX 92856000 92856300 0.3028 25 chrX 92886600 92888400 0.2867 37 chrX 92891700 92892000 0.6098 23 chrX 92894700 92895000 0.2092 24 chrX 92907600 92907900 0.6171 19 chrX 92909100 92909400 0.5588 32 chrX 92925000 92926200 0.5092 35 chrX 92941500 92942100 0.3583 29 chrX 92946600 92946900 0.4356 16 chrX 92951700 92952000 0.5302 21 chrX 92954400 92955000 0.0185 30 chrX 92961000 92961300 0.3527 36 chrX 92962800 92963100 0.2491 20 chrX 92970300 92970900 0.3203 24 chrX 92988900 92989200 0.5984 28 chrX 92995500 92995800 0.4255 36 chrX 93007500 93007800 0.608 36 chrX 93037800 93038100 0.2287 19 chrX 93039900 93040200 0.2395 24 chrX 93058200 93058800 0.1715 29 chrX 93079800 93081600 0.2436 32 chrX 93110400 93112200 0.33 31 chrX 93310800 93311700 0 65 chrX 93632700 93633000 0.1575 36 chrX 93942300 93943800 0.1857 59 chrX 93945000 93945600 0.1857 59 chrX 94439100 94439400 0.3529 39 chrX 94699800 94700100 0.3663 78 chrX 94805400 94805700 0.465 38 chrX 94863600 94864800 0.0741 53 chrX 94866000 94866900 0.2263 35 chrX 95140200 95140500 0.0901 16 chrX 95352900 95354100 0.3413 51 chrX 95370600 95370900 0.6858 33 chrX 95439300 95439600 0.2926 57 chrX 95544300 95544600 0.4446 44 chrX 95546700 95547000 0.4446 44 chrX 95600700 95602200 0.0223 50 chrX 95810100 95812500 0 70 chrX 95852100 95852700 0.2969 38 chrX 96054900 96055200 0.3898 45 chrX 96057900 96063600 0 60 chrX 96078600 96080100 0.2811 57 chrX 96174600 96174900 0.3929 40 chrX 96187500 96188100 0.2625 66 chrX 96189900 96190200 0.4031 50 chrX 96523500 96523800 0.3938 23 chrX 96589800 96590100 0.5868 41 chrX 96836700 96837000 0.2019 29 chrX 96897900 96898200 0.0733 54 chrX 96939600 96939900 0.2666 27 chrX 97510500 97510800 0 77 chrX 97512300 97514400 0 77 chrX 97578600 97578900 0 59 chrX 97580100 97583400 0 59 chrX 97649400 97649700 0.2562 38 chrX 97908300 97908600 0.659 30 chrX 98305500 98306100 0.1132 74 chrX 98424300 98426700 0.053 72 chrX 98427900 98428200 0.053 72 chrX 98429700 98430000 0.053 72 chrX 98669400 98669700 0.2446 46 chrX 98687700 98692800 0 72 chrX 98831400 98831700 0.1437 12 chrX 99178200 99178500 0.328 28 chrX 99287100 99287400 0.3882 61 chrX 99402000 99403500 0.29 54 chrX 99485700 99487200 0.0946 49 chrX 99596100 99596700 0.4213 39 chrX 99808200 99808500 0.4572 56 chrX 99864300 99865200 0.3408 49 chrX 100055100 100056600 0.2463 54 chrX 100136100 100136700 0.1989 53 chrX 100138200 100140000 0.1989 53 chrX 100165800 100166400 0.0949 58 chrX 100167600 100169100 0.0592 47 chrX 100257300 100261500 0.0188 84 chrX 100501200 100502100 0 50 chrX 100550700 100557300 0.0745 73 chrX 100724100 100724400 0.5425 26 chrX 100869600 100870200 0.1476 75 chrX 100971000 100973400 0.0231 57 chrX 101273400 101273700 0.492 51 chrX 101471700 101475000 0.0199 74 chrX 101541600 101541900 0.3755 64 chrX 101581500 101581800 0.2355 60 chrX 101597700 101601900 0 49 chrX 101611800 101616300 0 42 chrX 101712000 101713200 0.3733 46 chrX 101838600 101839800 0.2856 32 chrX 101855700 101856000 0.468 33 chrX 101858400 101858700 0.4873 16 chrX 101897100 101897400 0.6497 20 chrX 101994300 101994600 0.3443 52 chrX 101995800 101997000 0.1886 48 chrX 102047400 102051000 0.0752 48 chrX 102111600 102112200 0.3038 45 chrX 102189000 102189300 0.4287 44 chrX 102198000 102338100 0 54 chrX 102348900 102489300 0 50 chrX 102579000 102579300 0.4792 39 chrX 102586800 102587100 0.3431 43 chrX 102588300 102588600 0.3431 43 chrX 102616200 102617700 0.2049 61 chrX 102670800 102671700 0.2704 66 chrX 102689700 102690000 0.4282 34 chrX 102777600 102777900 0.3408 49 chrX 102779100 102779400 0.3408 49 chrX 102780900 102781200 0.4548 30 chrX 102811200 102812100 0 55 chrX 102828300 102828600 0.3514 57 chrX 102873000 102873300 0.4467 49 chrX 103136700 103137000 0.4844 70 chrX 103235400 103235700 0.3269 39 chrX 103286700 103287300 0.3229 51 chrX 103380900 103381200 0.3883 19 chrX 103488600 103488900 0.6963 10 chrX 103872900 103873200 0.2438 53 chrX 103891500 103897200 0.0581 55 chrX 103898700 103899000 0.1939 25 chrX 103911600 103911900 0.1432 24 chrX 103956000 103987500 0 40 chrX 104027100 104032800 0.0013 68 chrX 104051100 104082900 0 46 chrX 104417100 104417400 0.1414 52 chrX 104531100 104531700 0.1423 35 chrX 104549700 104550300 0.0567 37 chrX 104632500 104632800 0.4181 42 chrX 104672400 104672700 0.3785 39 chrX 104761800 104762100 0.5721 37 chrX 104914500 104914800 0.4301 60 chrX 104946600 104947800 0.2168 56 chrX 104949300 104949600 0.2168 56 chrX 105040800 105041100 0.129 59 chrX 105042600 105042900 0.4451 40 chrX 105216900 105217200 0.3894 32 chrX 105352800 105353100 0.2853 48 chrX 105381900 105382800 0.3151 69 chrX 105391500 105392100 0.2782 37 chrX 105739800 105740100 0.5392 26 chrX 105797400 105797700 0.0715 76 chrX 105799200 105801300 0.0715 76 chrX 105920700 105921600 0.3223 47 chrX 105947100 105947400 0.4563 31 chrX 105992100 105992700 0.0892 48 chrX 106079700 106081200 0.1458 61 chrX 106134000 106135500 0.2331 53 chrX 106232700 106233000 0.1234 17 chrX 106266600 106278300 0 47 chrX 106288200 106299600 0 48 chrX 106308600 106308900 0.161 18 chrX 106382700 106384500 0.1567 51 chrX 106469400 106475400 0 78 chrX 106602600 106603200 0.0829 44 chrX 106756800 106757700 0.1045 63 chrX 106814400 106814700 0.2837 45 chrX 106828200 106829700 0.3311 80 chrX 106851900 106852500 0.294 45 chrX 107009400 107010000 0.2884 40 chrX 107035500 107036400 0 54 chrX 107105100 107105700 0.536 44 chrX 107156400 107161800 0.0641 69 chrX 107326800 107327400 0.1515 31 chrX 107364900 107367000 0.0089 76 chrX 107368500 107369700 0.0089 76 chrX 107501400 107501700 0.5163 28 chrX 107612400 107613900 0 67 chrX 107967300 107968500 0.2218 56 chrX 108015000 108015300 0.5342 41 chrX 108281100 108281400 0.0837 92 chrX 108451500 108451800 0.3421 64 chrX 108530400 108530700 0.3934 33 chrX 108773700 108774000 0.0247 44 chrX 108858300 108858600 0.3053 51 chrX 108918900 108919200 0.3734 30 chrX 108982500 108982800 0.358 26 chrX 109035300 109035900 0.1749 57 chrX 109055400 109058400 0.009 57 chrX 109067700 109068000 0.4393 44 chrX 109115700 109116000 0.0797 51 chrX 109117500 109117800 0.0797 51 chrX 109175700 109176000 0.223 49 chrX 109197300 109197600 0.5277 26 chrX 109435200 109435500 0.3082 42 chrX 109490100 109490400 0.5833 39 chrX 109646400 109646700 0.3934 34 chrX 109648800 109649100 0.21 53 chrX 109650300 109650600 0.21 53 chrX 109834500 109834800 0.2792 61 chrX 109868700 109869000 0.4315 42 chrX 110034600 110035200 0.3643 43 chrX 110122200 110122500 0.3419 29 chrX 110222100 110222400 0.1329 49 chrX 110608200 110609700 0.2315 41 chrX 110643600 110643900 0.4378 43 chrX 110817000 110819400 0.086 65 chrX 110820600 110821800 0.086 65 chrX 110832600 110833200 0.3094 53 chrX 111315300 111316200 0.0021 63 chrX 111500700 111501000 0.3509 35 chrX 111547800 111548100 0.1989 66 chrX 111574200 111574500 0.296 62 chrX 111577200 111577500 0.5585 33 chrX 111588900 111594300 0.0061 76 chrX 111638100 111640800 0.0204 84 chrX 111721200 111721500 0.1134 10 chrX 111936600 111938400 0.2316 39 chrX 112174200 112175400 0.435 28 chrX 112329900 112332000 0.1438 69 chrX 112349400 112350000 0.2626 63 chrX 112431900 112434300 0.0975 58 chrX 112505400 112507800 0.2662 68 chrX 112719300 112720200 0.2053 55 chrX 112721400 112721700 0.2053 55 chrX 112722900 112723200 0.2053 55 chrX 113325000 113325900 0.1692 51 chrX 113337900 113343000 0.0231 80 chrX 113446200 113446500 0.6379 61 chrX 113449800 113451300 0.1966 35 chrX 113633700 113634300 0.2018 42 chrX 113688600 113689800 0.083 43 chrX 113740500 113740800 0.1961 39 chrX 113900700 113901000 0.309 32 chrX 114261300 114261600 0.594 43 chrX 114458100 114458400 0.4043 21 chrX 114470700 114471000 0.3435 33 chrX 114492600 114493200 0.1291 81 chrX 114558900 114559200 0.3478 42 chrX 114602400 114603300 0.358 59 chrX 114705600 114706500 0.0294 44 chrX 114720600 114721500 0.1508 45 chrX 114722700 114724200 0.1508 45 chrX 114742800 114743400 0.0423 32 chrX 114802800 114803400 0.3747 25 chrX 114807000 114807300 0.5741 13 chrX 114831000 114833100 0.0355 43 chrX 114834900 114836100 0.5416 44 chrX 114847200 114847500 0.4839 25 chrX 114856200 114856500 0.1444 39 chrX 114977100 114977400 0.3359 31 chrX 115080900 115081200 0.2207 40 chrX 115119300 115120800 0.0811 108 chrX 115242000 115242300 0.4738 34 chrX 115346400 115348200 0.1968 44 chrX 115474500 115474800 0.2927 21 chrX 115668900 115669800 0.2351 36 chrX 115705800 115706100 0.2544 14 chrX 115724400 115725000 0 16 chrX 115726200 115735500 0 257 chrX 115736700 115737000 0 30 chrX 115839000 115840500 0.2618 18 chrX 115842300 115889400 0 297 chrX 116164200 116164500 0.2133 40 chrX 116187300 116187600 0.2281 41 chrX 116312100 116313300 0.2296 46 chrX 116514900 116516400 0.3763 41 chrX 116517900 116518500 0.3763 41 chrX 116557200 116557500 0.0203 18 chrX 116817900 116818200 0.4683 39 chrX 116944200 116945100 0.2831 49 chrX 116965200 116967000 0.1061 74 chrX 116970000 116970300 0.4527 83 chrX 117181500 117182100 0.3651 41 chrX 117265500 117266700 0.4291 46 chrX 117320400 117320700 0.3986 42 chrX 117425400 117426000 0.2166 41 chrX 117728100 117732300 0.1031 57 chrX 117829200 117829500 0.2761 38 chrX 117874200 117878700 0.1209 52 chrX 117952200 117952800 0.3181 48 chrX 117963600 117964200 0.3102 57 chrX 118009200 118010700 0.0427 55 chrX 118019700 118020000 0.394 45 chrX 118033800 118037400 0.1528 53 chrX 118071600 118071900 0.4078 58 chrX 118288500 118288800 0.4011 42 chrX 118401000 118401900 0.0342 50 chrX 118486200 118486800 0.3773 39 chrX 118799700 118800000 0.6372 31 chrX 118853100 118853400 0.1789 33 chrX 118905300 118905600 0.5051 25 chrX 118908600 118908900 0.5982 20 chrX 119038500 119039400 0.0341 34 chrX 119165100 119166000 0.2541 48 chrX 119435400 119441400 0 77 chrX 119805600 119806500 0.0526 57 chrX 119808300 119808600 0.2328 35 chrX 119824200 119824500 0.2881 31 chrX 119925900 119926200 0.4012 34 chrX 119965200 119965500 0.5782 60 chrX 119968200 119968500 0.3707 43 chrX 120038400 120067500 0 46 chrX 120069000 120086400 0 46 chrX 120149700 120198000 0 48 chrX 120346200 120346800 0.1433 34 chrX 120385500 120385800 0.2501 46 chrX 120388500 120389400 0.0657 41 chrX 120509400 120509700 0.3744 14 chrX 120773100 120773400 0.3697 26 chrX 120873600 120874200 0.3767 27 chrX 120875700 120879300 0 40 chrX 120930000 120986700 0 55 chrX 121017600 121018200 0.3683 53 chrX 121174200 121174500 0.4515 19 chrX 121195500 121195800 0.3279 23 chrX 121263900 121268100 0.0141 72 chrX 121440900 121441200 0.3074 54 chrX 121532100 121533300 0.1512 70 chrX 121567500 121567800 0.4235 43 chrX 121690500 121692600 0.0212 70 chrX 121695900 121698000 0 86 chrX 121728000 121728900 0.0188 80 chrX 121827600 121828200 0.5285 45 chrX 121878900 121880100 0.2693 41 chrX 121882200 121882800 0.2797 38 chrX 122181000 122181600 0.3264 28 chrX 122256600 122256900 0.4862 48 chrX 122331900 122332500 0.4226 26 chrX 122395500 122397000 0.177 52 chrX 122482200 122482500 0.6944 42 chrX 122547000 122548500 0.2956 60 chrX 123014700 123015000 0.4843 59 chrX 123051600 123052200 0.1991 54 chrX 123056100 123057300 0.2514 37 chrX 123058500 123058800 0.2236 23 chrX 123798300 123798600 0.3374 35 chrX 123815700 123816000 0.3331 25 chrX 123960600 123960900 0.4633 35 chrX 124128600 124128900 0.5824 32 chrX 124179300 124179900 0.3145 61 chrX 124334400 124334700 0.4474 29 chrX 124409400 124410000 0.4168 62 chrX 124494900 124496100 0.2773 65 chrX 124586700 124587000 0.525 32 chrX 124752600 124753800 0.3534 41 chrX 125043000 125044200 0.0154 56 chrX 125051700 125052000 0.522 34 chrX 125351100 125351400 0.4233 51 chrX 125511600 125511900 0.1741 78 chrX 125514300 125515200 0.1741 78 chrX 125609700 125613600 0.0911 51 chrX 125658900 125659200 0.3041 56 chrX 125779500 125780400 0.0324 84 chrX 125842800 125843400 0.0771 64 chrX 125928000 125928300 0.3429 59 chrX 125936400 125936700 0.3531 50 chrX 126051900 126052200 0.2624 29 chrX 126105600 126108900 0.1952 55 chrX 126186300 126189900 0.2448 45 chrX 126231900 126234300 0.2784 74 chrX 126263700 126264000 0.3704 34 chrX 126287700 126288600 0.2763 58 chrX 126437400 126437700 0.5835 26 chrX 126462300 126462600 0.4083 58 chrX 126642000 126642300 0.5478 67 chrX 126914100 126915600 0.0533 47 chrX 127117200 127122600 0.0018 79 chrX 127161000 127161300 0.2655 46 chrX 127219200 127219500 0.4614 35 chrX 127254900 127255200 0.2951 39 chrX 127332000 127332300 0.2931 43 chrX 127362600 127368300 0.0097 59 chrX 127483500 127484400 0.1128 56 chrX 127508700 127509000 0.3405 27 chrX 127593900 127594500 0.2355 33 chrX 127612500 127613100 0.4821 43 chrX 127800300 127800600 0.3524 44 chrX 128136900 128137200 0.3811 32 chrX 128382600 128382900 0.6842 20 chrX 128667600 128667900 0.0257 23 chrX 128735400 128735700 0.3109 45 chrX 128785200 128788200 0.0935 67 chrX 128916900 128917200 0.5645 30 chrX 128943900 128944800 0.116 64 chrX 129045900 129049200 0.1099 64 chrX 129085200 129085500 0.294 46 chrX 129166800 129168000 0.1938 56 chrX 129341700 129342900 0.1946 49 chrX 129392700 129393000 0.3669 43 chrX 129406500 129407400 0.3143 44 chrX 129481800 129482400 0.2713 56 chrX 129536700 129537000 0.4455 38 chrX 129563700 129564000 0.3615 49 chrX 129851700 129852000 0.112 44 chrX 130255200 130255500 0.2709 46 chrX 130405800 130406100 0.4729 22 chrX 130451400 130451700 0.3351 83 chrX 130478100 130478400 0.3821 39 chrX 130496100 130497000 0.1704 44 chrX 130517700 130523400 0 78 chrX 130569300 130570200 0.1007 56 chrX 130571700 130572000 0.405 46 chrX 130674900 130675200 0.1764 54 chrX 130786500 130787100 0.071 51 chrX 130821300 130821600 0.1835 40 chrX 130948800 130949700 0.0133 60 chrX 130959600 130965000 0.0075 80 chrX 131003100 131006400 0 64 chrX 131117700 131118000 0.4074 41 chrX 131124900 131127600 0.0017 84 chrX 131152800 131153400 0.186 49 chrX 131155200 131157000 0.186 49 chrX 131245500 131250600 0.1353 67 chrX 131327700 131328300 0.3234 39 chrX 131379000 131380200 0.1231 66 chrX 131382600 131382900 0.1231 66 chrX 131487600 131488200 0.2065 74 chrX 131496600 131496900 0.3184 42 chrX 131504100 131505000 0.1408 64 chrX 131579100 131581200 0.2318 54 chrX 131583300 131584500 0.1896 48 chrX 131626200 131626500 0.4144 33 chrX 131664600 131669700 0.222 58 chrX 131839800 131840100 0.2982 31 chrX 132011400 132011700 0.4258 40 chrX 132135300 132138600 0.0119 66 chrX 132156300 132159600 0.2178 69 chrX 132197100 132197400 0.4145 41 chrX 132866400 132867000 0.0524 57 chrX 133344000 133344300 0.4298 36 chrX 133354500 133354800 0.2876 36 chrX 133863600 133863900 0.4023 32 chrX 134330100 134330400 0.4668 39 chrX 134788200 134788500 0.1084 10 chrX 135027600 135027900 0.2377 41 chrX 135116100 135158100 0 48 chrX 135174600 135175200 0.1226 29 chrX 135214500 135256500 0 44 chrX 135598500 135599100 0.3268 36 chrX 135615600 135619200 0 56 chrX 135621300 135621900 0.0971 44 chrX 135658500 135658800 0.4943 29 chrX 135666900 135667500 0.2644 24 chrX 135669600 135673500 0 55 chrX 135686100 135686400 0.2217 46 chrX 135718500 135734700 0 91 chrX 135748800 135813000 0 143 chrX 135814500 135847500 0 143 chrX 135849000 135864900 0 72 chrX 135866100 135882300 0 58 chrX 135883500 135888900 0 83 chrX 135945600 135946200 0.053 49 chrX 136075800 136076100 0.114 22 chrX 136332300 136332600 0.2431 64 chrX 136440300 136445700 0.0063 106 chrX 136949100 136949400 0.3526 29 chrX 137000400 137000700 0.5224 37 chrX 137111700 137112300 0.3954 51 chrX 137673900 137674500 0.1362 59 chrX 137785800 137786400 0.3936 27 chrX 138062100 138064200 0 67 chrX 138155100 138155400 0.3821 33 chrX 138300900 138301800 0.2246 55 chrX 138341700 138342300 0.1578 47 chrX 138460200 138460500 0.3211 44 chrX 138505200 138506100 0.4177 50 chrX 138780300 138780600 0.1072 61 chrX 138782400 138784200 0.1328 61 chrX 138878100 138878400 0.5489 39 chrX 139064100 139064400 0.4744 26 chrX 139068000 139069500 0.0417 62 chrX 139302600 139303200 0.5275 25 chrX 139445400 139445700 0.2784 42 chrX 139503300 139503600 0.2609 24 chrX 139528200 139528500 0.6186 42 chrX 139852200 139852500 0.2235 50 chrX 139991400 139992000 0.32 70 chrX 140013000 140013900 0 34 chrX 140017800 140018400 0.0957 22 chrX 140074800 140075100 0 33 chrX 140137200 140138400 0.2234 39 chrX 140219100 140220900 0.0169 26 chrX 140233200 140233500 0.4299 21 chrX 140412000 140412300 0.2196 15 chrX 140419200 140420100 0.0513 97 chrX 140567700 140568300 0.2733 61 chrX 140723400 140724300 0.5714 190 chrX 140995500 140996100 0.139 35 chrX 141007200 141033000 0 92 chrX 141034200 141042900 0 92 chrX 141044700 141045000 0.0477 49 chrX 141048000 141049200 0.3004 43 chrX 141052500 141112800 0 48 chrX 141117300 141117900 0.0591 60 chrX 141230400 141232500 0.0102 42 chrX 141233700 141234000 0.348 35 chrX 141238200 141239700 0.1474 53 chrX 141241200 141243600 0.1474 53 chrX 141244800 141245400 0.1474 53 chrX 141248700 141249600 0.0009 29 chrX 141267300 141267900 0.4079 39 chrX 141285900 141286200 0.3486 37 chrX 141356700 141358200 0.1946 38 chrX 141421200 141427200 0 82 chrX 141474600 141521400 0 50 chrX 141523500 141535800 0 50 chrX 141537600 141539400 0 28 chrX 141542100 141543000 0 77 chrX 141544500 141585300 0 77 chrX 141586800 141595800 0 59 chrX 141598200 141600900 0 59 chrX 141687600 141690000 0.0468 36 chrX 141697800 141698400 0.0421 50 chrX 141699600 141700500 0.0421 50 chrX 141790500 141790800 0.1709 20 chrX 141824400 141825600 0.1034 67 chrX 141880500 141880800 0.6284 30 chrX 141896100 141896400 0.2961 23 chrX 141910500 141910800 0.5338 28 chrX 141912000 141912900 0 36 chrX 142122900 142123200 0.6562 37 chrX 142125900 142126200 0.5976 21 chrX 142171500 142172100 0.3489 81 chrX 142189800 142192500 0.0046 33 chrX 142285800 142286400 0.426 39 chrX 142338900 142344000 0.0031 88 chrX 142377600 142377900 0.1384 51 chrX 142385700 142387500 0.2534 50 chrX 142389000 142389600 0.2762 59 chrX 142390800 142391100 0.2762 59 chrX 142478400 142483500 0.0225 104 chrX 142852800 142853100 0.6121 38 chrX 142908900 142910100 0.2412 74 chrX 143154300 143155500 0.1576 48 chrX 143355000 143355600 0.164 77 chrX 143990700 143991300 0.2347 23 chrX 144078000 144081600 0 56 chrX 144082800 144087300 0 56 chrX 144088500 144100800 0 56 chrX 144102000 144117000 0 56 chrX 144118200 144118500 0.2348 34 chrX 144120000 144123000 0 55 chrX 144124200 144153900 0 55 chrX 144156600 144176700 0 56 chrX 144177900 144180300 0 56 chrX 144181800 144201300 0 56 chrX 144202500 144207000 0 56 chrX 144208500 144212400 0 43 chrX 144324000 144326700 0 55 chrX 144404700 144405900 0.2595 65 chrX 144504300 144504600 0.4303 37 chrX 144764700 144765000 0.4372 53 chrX 144775800 144776100 0.6095 30 chrX 144966900 144967500 0.154 50 chrX 145353900 145354200 0.3501 36 chrX 145437900 145438200 0.4481 33 chrX 145974900 145975800 0 75 chrX 145996200 145996500 0.6778 31 chrX 146111400 146112900 0.031 63 chrX 146406300 146406600 0.5986 26 chrX 146445000 146445300 0.3012 51 chrX 146470800 146471100 0.2503 39 chrX 146618100 146620800 0.0375 59 chrX 146802000 146822400 0 44 chrX 146861700 146862300 0.0412 47 chrX 146883000 146883300 0.4001 36 chrX 146902200 146904600 0.1175 65 chrX 146970600 146970900 0.3222 30 chrX 147145500 147145800 0.1988 44 chrX 147190500 147190800 0.5884 31 chrX 147221100 147221400 0.2697 35 chrX 147222600 147222900 0.2697 35 chrX 147279900 147280200 0 24 chrX 147281700 147286800 0 71 chrX 147408900 147412500 0.0332 65 chrX 147513600 147513900 0.2997 36 chrX 147653700 147659700 0 82 chrX 147992400 147992700 0.4075 25 chrX 148017600 148017900 0.5123 48 chrX 148123500 148127400 0.0723 65 chrX 148170000 148171800 0.0477 45 chrX 148300200 148300500 0.1053 26 chrX 148304700 148305000 0.4003 35 chrX 148326600 148326900 0.3069 27 chrX 148351800 148352100 0.2015 26 chrX 148581300 148581600 0.5161 50 chrX 148656600 148656900 0.5074 36 chrX 148731600 148732500 0.1489 54 chrX 148971300 148973100 0 53 chrX 148975500 148976100 0.5052 33 chrX 149142900 149143200 0.6669 28 chrX 149178300 149183400 0 86 chrX 149215200 149215800 0 66 chrX 149336100 149340000 0.005 61 chrX 149418600 149418900 0.587 21 chrX 149436600 149436900 0.0099 370 chrX 149438400 149441700 0.0099 370 chrX 149487900 149488200 0.388 32 chrX 149527200 149527800 0.3451 26 chrX 149533200 149533800 0.4414 31 chrX 149538300 149538900 0.07 35 chrX 149542800 149544300 0.0458 40 chrX 149547600 149562000 0 56 chrX 149573400 149598600 0 50 chrX 149599800 149602200 0 50 chrX 149654700 149681100 0 51 chrX 149685000 149685300 0.4103 40 chrX 149700600 149701200 0.4182 46 chrX 149722200 149748600 0 56 chrX 149767200 149796000 0 41 chrX 149917500 149931000 0 38 chrX 149932800 149933100 0 38 chrX 149935200 149936700 0.0451 37 chrX 149940900 149941500 0.102 35 chrX 149946600 149946900 0.1209 32 chrX 149973900 149974200 0.2421 37 chrX 150000900 150001200 0.0157 131 chrX 150022200 150022500 0.1802 46 chrX 150067200 150067500 0.4519 45 chrX 150131700 150134700 0.0194 73 chrX 150168900 150171300 0.1248 63 chrX 150214800 150216000 0.0386 28 chrX 150340800 150342300 0.0413 35 chrX 150401100 150401700 0.4626 42 chrX 150417300 150420300 0.0091 64 chrX 150816900 150817200 0.559 43 chrX 151330500 151336200 0 75 chrX 151506900 151507200 0.6143 22 chrX 151655100 151655400 0.6023 26 chrX 151703700 151704000 0.3836 46 chrX 151914300 151917600 0 25 chrX 152151900 152152200 0.5579 29 chrX 152236200 152236800 0.2308 59 chrX 152239200 152240700 0.2308 59 chrX 152349600 152350500 0.1667 55 chrX 152359800 152360400 0.0649 76 chrX 152385900 152386200 0.4349 39 chrX 152415900 152417700 0.146 49 chrX 152502600 152502900 0.4102 59 chrX 152545800 152547600 0.121 91 chrX 152549100 152550300 0.121 91 chrX 152678700 152696700 0 43 chrX 152698200 152700900 0 56 chrX 152702100 152725200 0 45 chrX 152743200 152766300 0 45 chrX 152767500 152770200 0 45 chrX 152771700 152789700 0 45 chrX 152983800 152987700 0 41 chrX 153066600 153074400 0 43 chrX 153075600 153083400 0 48 chrX 153106200 153148500 0 47 chrX 153251400 153293700 0 54 chrX 153313200 153316500 0 46 chrX 153389700 153390300 0.6823 23 chrX 154144200 154148100 0 53 chrX 154149600 154239000 0 84 chrX 154240500 154294200 0 57 chrX 154303200 154303500 0.6842 18 chrX 154338000 154347300 0 43 chrX 154360800 154361100 0.3281 60 chrX 154384800 154394100 0 39 chrX 154456500 154456800 0.6774 41 chrX 154556100 154591200 0 52 chrX 154613100 154648200 0 44 chrX 154653300 154654500 0 34 chrX 154768800 154769100 0.4429 31 chrX 154844700 154845000 0.4609 50 chrX 154881000 154890300 0 76 chrX 154941900 154942500 0.2303 53 chrX 155006100 155007000 0.0018 43 chrX 155148000 155148600 0.0122 36 chrX 155160900 155161500 0.3361 50 chrX 155164200 155164500 0.2916 27 chrX 155199900 155201700 0.3132 43 chrX 155299500 155304900 0.0216 78 chrX 155336700 155369700 0 46 chrX 155372100 155386500 0 42 chrX 155402400 155403000 0.3902 50 chrX 155426700 155427000 0.3865 34 chrX 155454000 155468400 0 41 chrX 155471400 155504400 0 49 chrX 155510700 155511000 0.2953 34 chrX 155516100 155522100 0 77 chrX 155568900 155569200 0 26 chrX 155571300 155571900 0 26 chrX 155573700 155574000 0.5881 18 chrX 155672700 155673000 0.3597 37 chrX 155693700 155694000 0.3998 66 chrX 155700600 155703900 0 76 chrX 155902200 155903100 0.4944 64 chrX 156007500 156007800 0.5583 80 chrX 156010200 156030900 0 1368 chrY 2807700 2809500 0.0171 34 chrY 2833800 2834100 0.5342 24 chrY 2850900 2851200 0.5179 29 chrY 2998500 2998800 0.2732 33 chrY 3051900 3052200 0.6095 30 chrY 3055200 3060300 0.3152 41 chrY 3061800 3062100 0.1699 29 chrY 3063900 3064500 0.1699 29 chrY 3071400 3072000 0.1232 23 chrY 3078000 3079500 0.2092 31 chrY 3081600 3081900 0.3652 27 chrY 3083400 3083700 0.4882 35 chrY 3085800 3087300 0.2905 33 chrY 3089400 3089700 0.5605 22 chrY 3097500 3099000 0.3257 28 chrY 3101700 3104100 0.2882 29 chrY 3114300 3116100 0.2469 28 chrY 3123000 3123300 0.3419 23 chrY 3125100 3125400 0.1464 16 chrY 3133500 3134100 0.4604 25 chrY 3161100 3163500 0.3895 39 chrY 3169800 3170100 0.3281 22 chrY 3171300 3171600 0.5741 37 chrY 3186000 3186300 0.4568 23 chrY 3188100 3188400 0.5905 34 chrY 3191100 3192300 0.0784 33 chrY 3198600 3198900 0.2399 24 chrY 3201900 3203100 0.288 29 chrY 3205200 3205800 0.2793 39 chrY 3215100 3216300 0.1449 36 chrY 3228600 3230100 0.2332 26 chrY 3238200 3238500 0.1977 41 chrY 3239700 3240000 0.6858 38 chrY 3269400 3269700 0.4556 24 chrY 3272100 3272400 0.5698 21 chrY 3275400 3276000 0.105 36 chrY 3281100 3281400 0.661 18 chrY 3285900 3286800 0.3177 36 chrY 3304800 3305100 0.2171 23 chrY 3316200 3317700 0.4146 28 chrY 3327600 3327900 0.4837 41 chrY 3346500 3347100 0.0623 27 chrY 3352800 3353100 0.3309 31 chrY 3354300 3354600 0.3523 26 chrY 3366000 3366300 0.5631 27 chrY 3368100 3369600 0.0117 27 chrY 3371700 3372300 0.2939 28 chrY 3377700 3378900 0.2016 29 chrY 3380100 3380400 0.2016 29 chrY 3384000 3384300 0.1825 17 chrY 3387600 3388200 0.2632 32 chrY 3415800 3416100 0.1608 38 chrY 3422100 3423600 0.1717 27 chrY 3425700 3426300 0.5356 36 chrY 3430500 3430800 0.3068 36 chrY 3432600 3432900 0.4262 29 chrY 3436200 3437700 0.5177 30 chrY 3439500 3439800 0.4485 28 chrY 3444300 3449700 0 85 chrY 3456300 3457200 0.2976 33 chrY 3458700 3459000 0.2976 33 chrY 3483300 3483600 0.3727 34 chrY 3485100 3485400 0.3727 34 chrY 3488100 3488400 0.1869 20 chrY 3502800 3506400 0.0044 31 chrY 3510900 3511500 0.1575 35 chrY 3514500 3514800 0.423 24 chrY 3526200 3527700 0.3384 36 chrY 3536700 3537000 0.2137 33 chrY 3540000 3541200 0.3229 30 chrY 3546600 3546900 0.2544 29 chrY 3548100 3548400 0.2544 29 chrY 3550200 3550500 0.1672 31 chrY 3556200 3557400 0.2555 31 chrY 3565800 3566100 0.3033 25 chrY 3567300 3567600 0.6029 29 chrY 3570600 3573900 0.2969 28 chrY 3581400 3581700 0.2565 22 chrY 3586200 3586500 0.3037 31 chrY 3590700 3591000 0.5726 43 chrY 3594300 3594600 0.3906 30 chrY 3603600 3605100 0.2372 29 chrY 3615900 3616200 0.5484 28 chrY 3628500 3628800 0.243 38 chrY 3630300 3630600 0.5396 34 chrY 3633300 3633600 0.4986 33 chrY 3643500 3643800 0.6273 28 chrY 3645300 3645600 0.206 34 chrY 3648300 3649500 0.2097 34 chrY 3650700 3653100 0.2097 34 chrY 3658800 3659400 0.37 36 chrY 3660600 3662100 0.5349 32 chrY 3666600 3666900 0.3767 24 chrY 3672900 3673200 0.582 33 chrY 3693900 3694800 0.4698 36 chrY 3698700 3699300 0.2759 30 chrY 3708000 3708300 0.0621 34 chrY 3715800 3716400 0.2054 34 chrY 3720300 3720600 0.1094 33 chrY 3749700 3750000 0.3101 41 chrY 3752400 3752700 0.4719 27 chrY 3755400 3756000 0.3245 30 chrY 3771600 3771900 0.2512 28 chrY 3774000 3774300 0.4638 28 chrY 3787800 3789300 0.1149 30 chrY 3793500 3793800 0.0811 30 chrY 3800100 3800400 0.3711 27 chrY 3804000 3804600 0.1398 38 chrY 3805800 3806100 0.3153 30 chrY 3807600 3807900 0.3153 30 chrY 3814200 3814500 0.2853 32 chrY 3824100 3824400 0.275 24 chrY 3841500 3842400 0.643 34 chrY 3861000 3861600 0.3661 24 chrY 3884400 3885300 0.0009 23 chrY 3893100 3894600 0.3316 32 chrY 3897600 3897900 0.2174 28 chrY 3921900 3922200 0.4685 41 chrY 3923400 3924000 0.3901 32 chrY 3936600 3937200 0.2362 17 chrY 3967800 3969300 0.3487 31 chrY 3974400 3975300 0 32 chrY 3986700 3987000 0.3433 24 chrY 3990600 3990900 0.3825 22 chrY 3995400 3995700 0.3253 25 chrY 3999900 4000200 0.5768 30 chrY 4018200 4018800 0.2037 30 chrY 4023000 4023300 0.0474 25 chrY 4038600 4039200 0.3535 22 chrY 4042800 4043100 0.4519 31 chrY 4061100 4061400 0.5989 25 chrY 4066800 4067400 0.3522 29 chrY 4070100 4070400 0.4829 35 chrY 4086900 4087200 0.5333 30 chrY 4099200 4099500 0.5224 25 chrY 4106100 4106700 0.1154 32 chrY 4120200 4120500 0.2809 20 chrY 4133100 4133400 0.2358 29 chrY 4151400 4151700 0.4988 25 chrY 4152900 4153500 0.0848 42 chrY 4171800 4172100 0.3911 26 chrY 4176000 4176300 0.3933 22 chrY 4180500 4180800 0.5027 26 chrY 4182900 4183200 0.5075 19 chrY 4200000 4200300 0.4729 36 chrY 4221600 4223100 0.2875 48 chrY 4227900 4228200 0.3013 24 chrY 4256700 4257000 0.5651 29 chrY 4266600 4267200 0.0203 26 chrY 4269000 4269300 0.525 29 chrY 4275600 4275900 0.1471 35 chrY 4278300 4278600 0.6355 33 chrY 4282800 4283100 0.4742 31 chrY 4284600 4284900 0.6116 25 chrY 4291200 4291500 0.4497 28 chrY 4310400 4312500 0.468 29 chrY 4315500 4315800 0.5443 27 chrY 4331100 4331400 0.4097 13 chrY 4335300 4335900 0.334 19 chrY 4339200 4339500 0.2948 28 chrY 4374000 4374600 0.2584 26 chrY 4375800 4376100 0.3492 25 chrY 4383300 4383600 0.5968 37 chrY 4384800 4386300 0.2681 26 chrY 4391700 4392300 0.2615 23 chrY 4446300 4446600 0.4112 19 chrY 4450500 4452300 0.1134 33 chrY 4458600 4458900 0.4529 39 chrY 4464900 4465200 0.3698 29 chrY 4475700 4476300 0.5832 29 chrY 4479000 4479300 0.2667 15 chrY 4482600 4482900 0.0659 25 chrY 4486200 4486500 0.6131 28 chrY 4491300 4491600 0.3741 30 chrY 4501800 4502400 0.2402 22 chrY 4511100 4511400 0.1936 51 chrY 4532100 4532400 0.2953 29 chrY 4536600 4536900 0.3136 22 chrY 4539900 4540200 0.0612 34 chrY 4541700 4542300 0.157 41 chrY 4551000 4551300 0.3849 38 chrY 4553100 4553400 0.3849 38 chrY 4574100 4574700 0.4723 34 chrY 4595700 4596000 0.4237 29 chrY 4614900 4615200 0.4313 24 chrY 4618200 4618500 0.5307 29 chrY 4624500 4625400 0.1667 35 chrY 4627200 4628100 0.4463 24 chrY 4632000 4632600 0.2087 29 chrY 4647000 4647300 0.3909 28 chrY 4651500 4651800 0.588 13 chrY 4662600 4662900 0.6018 24 chrY 4666500 4667100 0.3533 40 chrY 4679400 4679700 0.1216 21 chrY 4689000 4689300 0.3372 17 chrY 4694400 4695300 0.2419 37 chrY 4705500 4705800 0.4515 27 chrY 4707600 4707900 0.2301 31 chrY 4709100 4709400 0.2301 31 chrY 4711200 4711500 0.4956 29 chrY 4715400 4715700 0.5329 26 chrY 4722300 4722600 0.4702 28 chrY 4725900 4727400 0.4032 33 chrY 4741200 4741500 0.2666 37 chrY 4748700 4749600 0.189 42 chrY 4750800 4751400 0.189 42 chrY 4760100 4760400 0.498 22 chrY 4761600 4762200 0.4191 21 chrY 4771500 4771800 0.2249 30 chrY 4775400 4775700 0.5536 30 chrY 4797900 4798500 0.171 30 chrY 4807200 4807800 0.0639 33 chrY 4816500 4816800 0.4361 35 chrY 4821600 4822500 0.325 37 chrY 4833900 4834200 0.3356 25 chrY 4850100 4850400 0.2573 24 chrY 4851900 4852200 0.1844 28 chrY 4862400 4862700 0.6345 23 chrY 4889700 4890000 0.1458 24 chrY 4891200 4891800 0.137 37 chrY 4895100 4895400 0.3863 29 chrY 4904100 4905000 0.1569 27 chrY 4906500 4907100 0.1569 27 chrY 4919700 4920000 0.213 29 chrY 4921200 4921800 0.213 29 chrY 4929000 4929300 0.2753 35 chrY 4949100 4954800 0 74 chrY 4961400 4961700 0.1948 29 chrY 4963200 4963800 0.2397 29 chrY 4965300 4966800 0.0809 36 chrY 4975200 4975800 0.2322 50 chrY 4977900 4979100 0.3625 42 chrY 4983000 4983300 0.3247 29 chrY 4987200 4987500 0.3502 21 chrY 4992600 4992900 0.4413 35 chrY 5000400 5000700 0.2643 44 chrY 5007300 5007900 0.6166 21 chrY 5010300 5012100 0.2261 31 chrY 5013900 5014200 0.4642 27 chrY 5033100 5033400 0.2977 27 chrY 5035800 5036400 0.3899 31 chrY 5042100 5043000 0.2367 45 chrY 5047800 5048400 0.1593 32 chrY 5052900 5053200 0.4753 33 chrY 5054400 5054700 0.4753 33 chrY 5063100 5064300 0.2215 30 chrY 5071200 5071500 0.3107 28 chrY 5074200 5074500 0.3686 21 chrY 5077500 5077800 0.2886 28 chrY 5084100 5084400 0.1962 23 chrY 5085900 5086200 0.4165 34 chrY 5096100 5096400 0.1737 25 chrY 5098500 5098800 0.2114 32 chrY 5118600 5119800 0.102 27 chrY 5137200 5137500 0.4458 27 chrY 5139900 5142300 0.2212 46 chrY 5146800 5147100 0.6776 30 chrY 5151900 5152200 0.3987 21 chrY 5155800 5156100 0.4976 26 chrY 5158200 5159700 0.4636 24 chrY 5166300 5166900 0.2946 32 chrY 5169000 5169300 0.4925 23 chrY 5170800 5171100 0.4072 26 chrY 5175000 5176500 0.0085 51 chrY 5184300 5186100 0.3547 29 chrY 5196600 5198100 0.1548 42 chrY 5203800 5205000 0.0646 29 chrY 5208900 5209200 0.4873 30 chrY 5210400 5210700 0.2188 34 chrY 5218500 5218800 0.2735 29 chrY 5220900 5221500 0.0199 38 chrY 5225100 5225700 0.4036 29 chrY 5228100 5228400 0.5646 17 chrY 5246100 5246400 0.6271 20 chrY 5250000 5253300 0.1358 33 chrY 5259900 5260800 0 30 chrY 5265300 5265900 0.4053 30 chrY 5276700 5277300 0.0227 28 chrY 5279400 5280000 0.0082 23 chrY 5284800 5285100 0.4146 28 chrY 5290800 5291100 0.3218 27 chrY 5313600 5313900 0.6006 30 chrY 5362500 5362800 0.4866 24 chrY 5376900 5377200 0.0534 33 chrY 5379900 5380500 0.167 32 chrY 5386500 5387100 0.4598 36 chrY 5393100 5394000 0.257 36 chrY 5400900 5401200 0.0938 23 chrY 5407200 5407500 0.5539 38 chrY 5409000 5409600 0.2669 25 chrY 5411100 5411400 0.1499 40 chrY 5414100 5414400 0.3019 19 chrY 5438100 5439000 0.2711 28 chrY 5442000 5442300 0.6551 35 chrY 5445000 5445300 0.3752 24 chrY 5463000 5463600 0.2337 36 chrY 5473800 5474400 0.105 28 chrY 5482800 5484300 0.41 31 chrY 5485800 5486100 0.2428 34 chrY 5492400 5492700 0.4101 43 chrY 5502000 5502600 0.3774 32 chrY 5509500 5510700 0.3076 26 chrY 5517900 5520000 0.3663 29 chrY 5523600 5523900 0.2467 24 chrY 5526300 5527800 0.2625 33 chrY 5538900 5539200 0.5271 38 chrY 5556000 5556300 0.4453 30 chrY 5558100 5558400 0.4423 44 chrY 5561400 5564100 0.3215 42 chrY 5568600 5569500 0.0023 26 chrY 5571600 5573100 0.2278 33 chrY 5582100 5582400 0.3327 27 chrY 5583600 5583900 0.3327 27 chrY 5587800 5588100 0.5885 18 chrY 5595000 5595300 0.4118 31 chrY 5596500 5597100 0.0957 34 chrY 5601900 5602200 0.3445 28 chrY 5606100 5612400 0.0078 99 chrY 5613900 5614200 0.0078 99 chrY 5618400 5618700 0.6542 23 chrY 5622300 5622600 0.5408 41 chrY 5631000 5631300 0.3556 22 chrY 5633400 5633700 0.5201 28 chrY 5648700 5649000 0.4585 28 chrY 5662200 5662500 0.4181 22 chrY 5673300 5673600 0.314 23 chrY 5676000 5676300 0.5717 28 chrY 5689800 5690100 0.3998 30 chrY 5691600 5691900 0.3998 30 chrY 5693100 5693700 0.5258 37 chrY 5700900 5701200 0.358 26 chrY 5702400 5702700 0.1791 32 chrY 5705400 5705700 0.4276 27 chrY 5706900 5707500 0.4276 27 chrY 5711100 5711400 0.1511 26 chrY 5712900 5713200 0.1511 26 chrY 5714400 5715000 0.1151 27 chrY 5717700 5718000 0.3253 29 chrY 5721600 5721900 0.4388 29 chrY 5734800 5735400 0.0142 30 chrY 5740800 5741400 0.4653 33 chrY 5755800 5756100 0.5375 29 chrY 5759700 5760300 0.0212 32 chrY 5771100 5771400 0.3272 42 chrY 5778900 5779200 0.5163 21 chrY 5794500 5794800 0.5662 34 chrY 5797800 5798100 0.3929 24 chrY 5821500 5821800 0.2435 19 chrY 5827200 5827500 0.3887 27 chrY 5830200 5830500 0.271 26 chrY 5834700 5835000 0.2834 26 chrY 5855400 5855700 0.2365 22 chrY 5859300 5859600 0.1865 21 chrY 5861700 5862000 0.1383 35 chrY 5863200 5863500 0.1383 35 chrY 5865000 5866200 0.1383 35 chrY 5867700 5868000 0.1787 42 chrY 5874900 5876100 0.077 31 chrY 5890500 5892300 0.3194 38 chrY 5904000 5904300 0.436 23 chrY 5906100 5906400 0.4424 22 chrY 5912100 5913900 0.3423 34 chrY 5922600 5923200 0.0457 28 chrY 5934600 5934900 0.2321 30 chrY 5952300 5953200 0.1699 24 chrY 5955600 5955900 0.4632 39 chrY 5957100 5957700 0.5376 31 chrY 5960400 5960700 0.4011 24 chrY 5969100 5969400 0.3433 22 chrY 5971500 5971800 0.196 20 chrY 6003300 6005400 0.2408 37 chrY 6011700 6012000 0.1019 20 chrY 6017100 6017400 0.4543 30 chrY 6023400 6023700 0.6323 31 chrY 6041700 6042000 0.4868 29 chrY 6057300 6057900 0.4089 33 chrY 6070200 6070800 0.1071 31 chrY 6078900 6079500 0.5778 35 chrY 6086400 6087000 0.1826 21 chrY 6105300 6105600 0.3722 25 chrY 6111900 6112200 0.4706 32 chrY 6123900 6124200 0.2931 30 chrY 6146100 6146400 0.3258 31 chrY 6154200 6154500 0.4974 25 chrY 6156300 6156600 0.6234 23 chrY 6174300 6174900 0.046 36 chrY 6191700 6193200 0.2732 27 chrY 6221400 6221700 0.5576 19 chrY 6224700 6225000 0.5613 28 chrY 6235800 6261900 0 173 chrY 6263100 6266400 0 173 chrY 6267600 6267900 0.141 38 chrY 6269100 6269400 0.141 38 chrY 6270900 6271500 0.19 37 chrY 6273900 6276300 0 54 chrY 6278400 6278700 0 54 chrY 6280500 6336900 0 54 chrY 6338400 6477000 0 51 chrY 6480300 6480600 0.6185 30 chrY 6482100 6482400 0.574 28 chrY 6486300 6487200 0.3793 28 chrY 6490800 6494100 0 35 chrY 6501900 6502500 0.2343 36 chrY 6508500 6509100 0.3733 34 chrY 6511200 6513600 0 30 chrY 6519300 6522000 0.0034 30 chrY 6523200 6525000 0.0121 26 chrY 6526800 6528000 0.2509 30 chrY 6530700 6531000 0.5539 25 chrY 6540900 6541500 0.3909 34 chrY 6550800 6551100 0.6093 28 chrY 6563100 6563700 0.3564 30 chrY 6567600 6567900 0.3893 27 chrY 6579900 6580200 0.2385 28 chrY 6591000 6591600 0.4209 27 chrY 6618900 6619500 0.4297 45 chrY 6621900 6622200 0.3057 22 chrY 6624900 6625200 0.6746 21 chrY 6633300 6633600 0.3554 41 chrY 6640200 6640800 0.1268 34 chrY 6659100 6659400 0.1841 30 chrY 6665400 6665700 0.1232 28 chrY 6675300 6706500 0 42 chrY 6709200 6709500 0.0046 30 chrY 6715800 6716100 0.5777 33 chrY 6731700 6732000 0.5111 29 chrY 6740400 6740700 0.6488 31 chrY 6744900 6745200 0.2271 30 chrY 6854100 6854700 0.2063 52 chrY 6856800 6857100 0.4023 52 chrY 7086900 7087200 0.1159 16 chrY 7134900 7135200 0.6792 76 chrY 7154700 7155300 0.2343 136 chrY 7157100 7159500 0.1533 64 chrY 7251900 7252200 0.5279 45 chrY 7253700 7254600 0.1293 46 chrY 7287600 7287900 0.4052 35 chrY 7341000 7341600 0.3307 27 chrY 7459800 7460100 0.6631 38 chrY 7572000 7572300 0.3439 34 chrY 7574400 7574700 0.4084 47 chrY 7578000 7582200 0 40 chrY 7583700 7584000 0.5191 24 chrY 7587900 7589100 0 43 chrY 7590600 7593000 0 43 chrY 7594500 7598400 0 43 chrY 7599600 7601400 0 43 chrY 7602900 7603500 0 43 chrY 7605300 7631100 0 43 chrY 7634400 7638900 0 36 chrY 7668000 7668300 0.5988 26 chrY 8136000 8136300 0.4338 29 chrY 8425200 8425500 0.2937 43 chrY 8446200 8446500 0.4084 33 chrY 8521500 8521800 0.5522 33 chrY 9134100 9134400 0.3706 50 chrY 9158100 9158400 0.0691 26 chrY 9333600 9334200 0.0694 107 chrY 9335700 9403800 0 215 chrY 9453600 9502500 0 223 chrY 9503700 9537000 0 221 chrY 9545400 9546000 0.2455 73 chrY 9590700 9591900 0.1291 48 chrY 9630000 9630300 0.3526 21 chrY 9633000 9634500 0.3039 29 chrY 9636000 9637800 0 35 chrY 9639000 9642000 0 35 chrY 9648300 9651000 0 34 chrY 9653100 9653400 0.2803 30 chrY 9659700 9660000 0.2809 26 chrY 9667800 9671400 0 36 chrY 9674700 9675600 0.434 36 chrY 9687600 9802500 0 53 chrY 9813000 9836700 0 44 chrY 9837900 9894300 0 44 chrY 9895500 9895800 0.5903 29 chrY 9898500 9903600 0 39 chrY 9905400 9907200 0 39 chrY 9908400 9918600 0 39 chrY 9942000 9947100 0 76 chrY 10071300 10074000 0.5187 170 chrY 10076700 10077000 0.6303 68 chrY 10078200 10079700 0.5974 94 chrY 10086300 10087800 0.5391 97 chrY 10097100 10097400 0.5505 58 chrY 10113600 10113900 0.6681 53 chrY 10119000 10119300 0.5771 85 chrY 10137600 10137900 0.6962 49 chrY 10220400 10221000 0.2941 32 chrY 10232100 10232400 0.6017 107 chrY 10244100 10244700 0.5833 116 chrY 10246200 10266900 0 69 chrY 10317000 10544100 0 80 chrY 10594200 10621800 0 67 chrY 10626600 10633500 0 4684 chrY 10645800 10650000 0 4661 chrY 10651500 10674000 0.0561 4167 chrY 10676700 10679400 0.2861 270 chrY 10682400 10694100 0.1031 3324 chrY 10744200 10852800 0.0669 4048 chrY 10855800 10890600 0.0733 1144 chrY 10891800 10896600 0.1275 1073 chrY 10898100 10902300 0.0994 435 chrY 10903800 10904400 0.5404 59 chrY 10905900 10908000 0.4521 97 chrY 10909500 10909800 0.4271 232 chrY 10911600 10913100 0.5856 181 chrY 10914300 10914900 0.5628 89 chrY 10916400 10916700 0.6849 45 chrY 10920300 10965900 0.0673 1357 chrY 10967400 11040900 0.0718 8125 chrY 11083800 11084100 0.6294 86 chrY 11091300 11091600 0.4601 64 chrY 11097000 11098200 0.4654 55 chrY 11100900 11101200 0.6631 19 chrY 11106300 11106600 0.3334 65 chrY 11108400 11108700 0.5195 170 chrY 11125200 11125800 0.2906 70 chrY 11144700 11145000 0.2597 57 chrY 11163900 11164800 0.2148 60 chrY 11182200 11186100 0.5485 150 chrY 11192100 11193300 0.4225 70 chrY 11194800 11196300 0.3914 127 chrY 11203200 11203800 0.3595 50 chrY 11219700 11220000 0.3419 70 chrY 11222100 11222400 0.339 128 chrY 11229000 11230200 0.3892 75 chrY 11239800 11240700 0.1767 138 chrY 11247600 11248800 0.3167 69 chrY 11250900 11251200 0.5807 51 chrY 11254500 11254800 0.3198 64 chrY 11256900 11257200 0.5835 49 chrY 11259900 11260200 0.3164 49 chrY 11261700 11262900 0.4216 106 chrY 11264400 11265300 0.4216 106 chrY 11267100 11267400 0.2753 53 chrY 11273100 11273400 0.606 130 chrY 11280300 11282400 0.5089 95 chrY 11284200 11284500 0.5089 95 chrY 11288100 11288400 0.6308 71 chrY 11289600 11293200 0.2616 2484 chrY 11294400 11295000 0.6635 1497 chrY 11296200 11315100 0.101 14535 chrY 11316300 11334300 0.2071 7569 chrY 11347200 11347500 0.5112 69 chrY 11355000 11355300 0.2326 56 chrY 11356800 11357100 0.6124 22 chrY 11365500 11366100 0.4842 73 chrY 11391300 11393100 0.3215 46 chrY 11408400 11408700 0.5293 52 chrY 11490600 11500800 0.2079 257 chrY 11502300 11514600 0.2079 257 chrY 11516700 11526300 0.1624 336 chrY 11527500 11529300 0.1439 837 chrY 11532300 11592900 0 3239 chrY 11643600 11643900 0.1362 15657 chrY 11645100 11654100 0.1362 15657 chrY 11655600 11660400 0.1362 15657 chrY 11662200 11664600 0.4291 85 chrY 11665800 11666400 0.2009 293 chrY 11668200 11671500 0.2457 146 chrY 11672700 11678700 0.2342 162 chrY 11679900 11749500 0.0966 31584 chrY 11755200 11757000 0.307 49 chrY 11861100 11861400 0.4215 38 chrY 11863200 11863500 0.4799 33 chrY 11935500 11935800 0.2012 43 chrY 11990400 11990700 0.4301 33 chrY 12220500 12221100 0.3719 53 chrY 12313800 12315000 0 40 chrY 12319800 12321300 0 40 chrY 12372000 12372300 0.5969 1442 chrY 12497700 12498000 0.6086 29 chrY 12849600 12851400 0.018 32 chrY 12985800 12986100 0.5993 22 chrY 13029000 13029300 0.6984 45 chrY 13113000 13114200 0 41 chrY 13120500 13122000 0 33 chrY 13131000 13131300 0.2575 59 chrY 13166700 13167000 0.1983 42 chrY 13179300 13181700 0.1998 57 chrY 13183800 13184100 0.225 38 chrY 13529100 13529400 0.2279 107 chrY 13561800 13562100 0.2394 56 chrY 13563600 13564200 0.0696 89 chrY 13726800 13727100 0.2661 71 chrY 13770000 13770300 0.3283 30 chrY 13772100 13772700 0.2858 49 chrY 13900500 13901700 0.2682 37 chrY 13955700 13956300 0.503 43 chrY 13984500 14019600 0 46 chrY 14023200 14058300 0 49 chrY 14180700 14181000 0.4791 22 chrY 14193900 14194200 0.587 28 chrY 14489400 14489700 0.2429 27 chrY 14673000 14673300 0.3525 35 chrY 14722500 14723100 0.4488 33 chrY 14884800 14885100 0.4036 42 chrY 14923800 14924400 0.2166 49 chrY 14962800 14963100 0.3831 42 chrY 15032100 15032400 0.4142 40 chrY 15087900 15088200 0.3482 45 chrY 15237300 15237600 0.4653 23 chrY 15723000 15723300 0.2223 52 chrY 15875100 15883500 0 124 chrY 15896400 15904500 0 105 chrY 16159800 16269600 0 51 chrY 16315800 16425600 0 57 chrY 16535700 16536000 0.4921 39 chrY 16870500 16870800 0.2222 61 chrY 16914000 16914300 0.1624 47 chrY 16917300 16917600 0.3236 54 chrY 16990500 16991100 0.5834 40 chrY 17061300 17066700 0 76 chrY 17075400 17076000 0.4449 38 chrY 17077500 17077800 0.3672 34 chrY 17098500 17098800 0.3272 38 chrY 17181600 17181900 0.5503 20 chrY 17228100 17228400 0.3208 26 chrY 17375100 17377500 0 62 chrY 17435400 17435700 0.4422 23 chrY 17455800 17951100 0 63 chrY 17954700 18640200 0 64 chrY 18680100 18870000 0 50 chrY 18992100 18992400 0.4908 30 chrY 19353600 19353900 0.6478 33 chrY 19413300 19413600 0.4034 57 chrY 19446000 19446300 0.6116 20 chrY 19582800 19584000 0 32 chrY 19667700 19668300 0.1543 55 chrY 19678200 19679100 0.02 48 chrY 19780500 19781400 0 34 chrY 20053800 20062800 0 85 chrY 20064000 20065500 0 85 chrY 20069400 20070900 0 50 chrY 20073600 20073900 0.6611 17 chrY 20077800 20078700 0.1089 42 chrY 20079900 20091000 0 88 chrY 20092200 20092500 0.6248 65 chrY 20094900 20095500 0.0923 18 chrY 20096700 20100300 0 42 chrY 20102100 20108700 0 112 chrY 20112300 20115300 0 127 chrY 20120100 20124900 0 93 chrY 20127300 20131500 0 52 chrY 20133000 20136000 0 51 chrY 20139300 20139600 0.4184 38 chrY 20142300 20154300 0 78 chrY 20158200 20177100 0 96 chrY 20179500 20183100 0 44 chrY 20184900 20207700 0 239 chrY 20258400 20262900 0 131 chrY 20264400 20265600 0 84 chrY 20268000 20274300 0 84 chrY 20277300 20277600 0.5358 82 chrY 20280000 20280300 0.4999 59 chrY 20285400 20295600 0 380 chrY 20318700 20321400 0 56 chrY 20322900 20344800 0 229 chrY 20346000 20350800 0.4309 254 chrY 20371200 20371800 0.2192 58 chrY 20473200 20475600 0.0241 64 chrY 20690400 20690700 0.2685 30 chrY 20872500 20872800 0.6289 33 chrY 20958900 20959500 0.1668 53 chrY 21008700 21021600 0 40 chrY 21051600 21063300 0 42 chrY 21065100 21066600 0 29 chrY 21293100 21293400 0.2017 43 chrY 21330600 21330900 0.4724 27 chrY 21403500 21403800 0.3228 39 chrY 21426600 21426900 0.2782 36 chrY 21477300 21477600 0.3739 43 chrY 21493800 21567300 0 73 chrY 21615900 21616200 0.4783 32 chrY 21705900 21706200 0.0565 36 chrY 21714600 21738900 0 23 chrY 21741600 21750000 0 26 chrY 21756000 21789000 0 41 chrY 21862200 22208700 0 86 chrY 22241100 22242000 0.318 16 chrY 22274700 22275000 0.4872 25 chrY 22288800 22289400 0.1461 52 chrY 22313400 22314000 0.4668 29 chrY 22341900 22342800 0.1696 74 chrY 22344300 22344900 0.1696 74 chrY 22377600 22725900 0 53 chrY 22730700 22734600 0.0225 42 chrY 22735800 22739700 0.0225 42 chrY 22741500 22742400 0.0225 42 chrY 22743600 26311500 0 69 chrY 26345100 26345400 0.5778 31 chrY 26407500 26407800 0.4148 30 chrY 26436900 26437200 0.6871 129 chrY 26440500 26441100 0.3966 170 chrY 26511600 26511900 0.4686 24 chrY 26514600 26514900 0.6505 30 chrY 26589000 26589300 0.444 45 chrY 26637900 26670000 0.06 1063 chrY 26671800 26673300 0.1076 600 chrY 56673000 56771700 0 28529 chrY 56825700 56830500 0.4436 1724 chrY 56832600 56837100 0.4786 3185 chrY 56838900 56839500 0.6016 925 chrY 56842200 56842500 0.6384 926 chrY 56846100 56847300 0.6157 547 chrY 56850300 56851200 0.4243 1367 chrY 56884500 56884800 0.5545 46 ================================================ FILE: tracks/region_generator.R ================================================ library(data.table) options(scipen = 999) # Load hg38 chromosome sizes from UCSC chr_sizes <- fread("https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes", col.names = c("chrom", "size")) chr_sizes <- chr_sizes[chrom %in% paste0("chr", c(1:22, "X"))] # Centromere positions (approximate from UCSC Table Browser / literature) centromeres <- fread(" chrom start end chr1 121700000 124600000 chr2 91800000 94000000 chr3 87800000 94000000 chr4 48200000 50700000 chr5 46100000 50700000 chr6 58600000 63400000 chr7 58000000 62700000 chr8 43900000 48100000 chr9 47100000 50700000 chr10 39100000 42900000 chr11 51400000 55800000 chr12 34700000 38600000 chr13 16000000 19500000 chr14 16000000 19000000 chr15 17000000 20500000 chr16 35300000 38200000 chr17 22100000 25800000 chr18 15400000 18700000 chr19 24400000 28000000 chr20 25800000 30000000 chr21 10900000 14300000 chr22 12000000 15400000 chrX 58000000 61900000 ") # Construct p and q arms bed <- rbindlist(lapply(1:nrow(chr_sizes), function(i) { chrom <- chr_sizes$chrom[i] size <- chr_sizes$size[i] cent <- centromeres[chrom == chrom] if (nrow(cent) == 0) return(NULL) data.table( chrom = c(chrom, chrom), start = c(0, cent$end), end = c(cent$start, size) ) })) # Natural chromosome order: chr1 chr22, chrX bed[, chrom := factor(chrom, levels = paste0("chr", c(1:22, "X")))] # Sort by chromosome and start position setorder(bed, chrom, start) # Write to BED file fwrite(bed, "hg38_arms_excl_centromeres.bed", sep = "\t", col.names = FALSE)