Repository: brentp/goleft Branch: master Commit: c9e31f241285 Files: 86 Total size: 4.8 MB Directory structure: gitextract_3n5h5hp9/ ├── .gitignore ├── .nojekyll ├── .travis.yml ├── HISTORY.md ├── LICENSE ├── README.md ├── cmd/ │ └── goleft/ │ └── goleft.go ├── cnveval/ │ ├── cmd/ │ │ └── cnveval/ │ │ └── cnveval.go │ └── cnveval.go ├── covstats/ │ ├── README.md │ └── covstats.go ├── dcnv/ │ ├── dcnv.go │ ├── debiaser/ │ │ ├── debiaser.go │ │ └── debiaser_test.go │ └── scalers/ │ ├── scalers.go │ └── scalers_test.go ├── depth/ │ ├── README.md │ ├── depth.go │ ├── functional-test.sh │ ├── intervals.go │ └── test/ │ ├── cmp.py │ ├── fake.fa │ ├── fake.fa.fai │ ├── hg19.fa │ ├── hg19.fa.fai │ ├── hla.bam │ ├── hla.bam.bai │ ├── run.sh │ ├── t-empty.bam │ ├── t-empty.bam.bai │ ├── t.bam │ └── t.bam.bai ├── depthwed/ │ └── depthwed.go ├── docs/ │ ├── index.html │ └── indexcov/ │ ├── ex-indexcov-depth-15.html │ ├── ex-indexcov-depth-X.html │ ├── ex-indexcov-depth-Y.html │ ├── ex-indexcov-roc.html │ ├── ex-indexcov-sex.html │ ├── help-bin.md │ ├── help-counts.md │ ├── help-depth.md │ ├── help-pca.md │ ├── help-sex.md │ └── index.html ├── emdepth/ │ ├── README.md │ ├── emdepth.go │ ├── emdepth_test.go │ ├── mops/ │ │ ├── mops.go │ │ └── mops_test.go │ └── stats.go ├── go.mod ├── go.sum ├── goleft.go ├── indexcov/ │ ├── README.md │ ├── anonymize/ │ │ ├── README.md │ │ └── main.go │ ├── crai/ │ │ ├── README.md │ │ ├── crai.go │ │ ├── crai_test.go │ │ ├── plot-vs-with-st-depth.py │ │ └── st-depth-to-bins.py │ ├── functional-tests.sh │ ├── indexcov.go │ ├── indexcov_test.go │ ├── paper/ │ │ ├── cmp.py │ │ ├── cmp.sh │ │ ├── plot-bins.py │ │ ├── plot-eiee-15.py │ │ ├── plot-simons-sex.py │ │ └── scripts/ │ │ ├── cmp.py │ │ └── cmp.sh │ ├── plot.go │ ├── template.go │ ├── test-data/ │ │ ├── sample_issue_27_0001.bam │ │ ├── sample_issue_27_0001.bam.bai │ │ ├── viral.crai │ │ └── viral.fa.fai │ └── types.go ├── indexsplit/ │ ├── README.md │ ├── functional-tests.sh │ └── indexsplit.go ├── multidepth/ │ └── multidepth.go └── samplename/ ├── README.md ├── functional-tests.sh └── samplename.go ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ *.png _test.cov *.bed *_linux64 *_osx *_darwin *pprof* *.gz indexcov/*.bam indexcov/*.cram indexcov/*.bai indexcov/*.crai ssshtest goleft_test ================================================ FILE: .nojekyll ================================================ # ================================================ FILE: .travis.yml ================================================ language: go os: - linux go: - 1.16.x before_install: - cd indexcov && go get ./... ; cd .. - cd depth && go get ./... ; cd .. - sudo apt-get -qq update - sudo apt-get install -y bedtools samtools script: - cd indexcov && travis_wait 30 bash functional-tests.sh ; cd .. - cd depth && travis_wait 30 bash functional-test.sh ; cd .. - cd indexsplit && travis_wait 30 bash functional-tests.sh; cd .. - cd samplename && travis_wait 30 bash functional-tests.sh; cd .. ================================================ FILE: HISTORY.md ================================================ v0.2.6 ====== + covstats: fix denominator in unmapped v0.2.4 ====== + `indexcov`: protect against empty chroms v0.2.3 ====== + `indexcov`: fix bug in text output header. v0.2.2 ====== + `indexcov`: better message on empty crai + `indexcov`: allow sending indexes as globs (to avoid argument length limit) + `indexcov`: if expected sex chroms are X,Y also find chrX,chrY (and use sorted order for output) v0.2.1 ====== + `indexcov`:more defense for bad crai's + `indexcov`: now works on just `*.bai` if a .fai is also given with -f. v0.2.0 ====== + `indexcov`: better error message and handling of excluded chromosomes. + `indexcov`: if given crais and no fai, indexcov will try to read the cram header using `samtools view`. + `indexsplit`: fix rare panic in CRAI files due to an off-by-one error. v0.1.19 ======= + `indexcov`: fix for long reads with cram. (#43) v0.1.18 ======= + `indexsplit`: fix off-by-one that resulted in double-counting some regions. + `indexcov`: cram edge-cases. + `indexcov`: better normalization to 1 for all cases. Fixes bug for bams with many (e.g. > 10K) chromosomes of which many have very low or normalization coverage. (#36) v0.1.17 ======= + `indexcov`: dont error when no sex chromosomes are found (#27). + `indexcov`: dont error when some chromosomes have a single region and others have 0. + `indexcov`: better checking on short sex chroms and other CRAI fixes. v0.1.16 ======= + `indexcov`: report and plot number of mapped and unmapped reads as reported by the index. + `covmed`: rename to `covstats` + `covstats`: report samplename(s) from read groups as well as bam path. + `covstats`: skip first 100K reads to give better estimates of depth. + `covstats`: report percent of bad (QC-Fail|Duplicate) and of umapped reads. + `indexcov`: automatically exclude chromosomes that match pattern: `^chrEBV$|^NC|_random$|Un_|^HLA\-|_alt$|hap\d$`. this can be adjust from the command-line. v0.1.15 ======= + `indexsplit`: more closely match request number of regions. + `indexsplit`: allow specifying "problematic" regions which are split more finely. + `samplename`: **new tool** report the sample name of a bam from the read-group in its header. v0.1.14 ======= + `indexcov`: speed and memory improvements. + `indexcov`: support crai. + `indexcov`: prettier plot and labels for pngs. + `indexcov`: bin plot shows proportions rather than total numbers. + `indexcov`: better messages and docs for `--sex` argument. + `indexsplit`: new tool to generate regions for parallelization (from bam/cram indexes) v0.1.13 ======= + `covmed`: better coverage estimate by scaling by dup|qcfail|secondary. + `covmed`: report 5th and 95th percentile of insert size. + `indexcov`: make index.html even when no sex chromosomes are present. + `depth:` quote reference and chromosome name. v0.1.12 ======= + `indexcov`: --sex is now specified as a comma-delimited string + `indexcov`: handle a single sample (see #16) + `indexcov`: functional tests. + `indexcov`: add "slope" output which indicates the slope of the coverage plot between ~0.85 and ~1.15. this matches bins.out fairly well, but it is another metric to look at. v0.1.11 ======= + `indexcov`: make plots a saner size. + `indexcov`: output an index.html page that summarizes findings and links to other pages. the index contains static pngs for coverage and depth that link to the interactive HTML pages for each chromosome. + `indexcov`: remove --prefix argument in favor of -d/--directory and write the overview page index index.html v0.1.10 ======= + report correct version # (v0.1.9 reported 0.1.8 from CLI) + `indexcov`: bigger hit radius in plots == easier to mouse-over points + `indexcov`: use vOffset for better resolution of (estimated) depth. + `indexcov`: ~2X faster due to optimizations in biogo/hts and buffered IO. + `indexcov`: PCA and dosage bias plots (values also reported in .ped file). v0.1.9 ====== + `indexcov`: fix for sparse bams and other edge-cases. + `indexcov`: performance improvements. + `indexcov`: output html with plot of coverage. + `indexcov`: plot and report sex inferred from coverage on allosomes. v0.1.8 ====== + `indexcov`: output header with sample names. + `indexcov`: limit reported CN. v0.1.7 ====== + fix bug in goleft depth where some lines were output multiple times. + add covmed subprogram to calculate median coverage, mean and sd of insert size quickly. + add depthwed to make a matrix file from multiple .depth files from `goleft depth`. + goleft depth will always output windows of the exact size requested, previously if 10MB was not a multiple of windowsize, we'd get smaller windows at the edge. + new tool: **indexcov**: very fast calculation of relative coverage using the bam index. ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2016 Brent Pedersen - Bioinformatics Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # goleft [![Build Status](https://travis-ci.org/brentp/goleft.svg)](https://travis-ci.org/brentp/goleft) goleft is a collection of bioinformatics tools written in [go](https://github.com/golang/go) distributed together as a single binary under a liberal (MIT) license. Running the binary `goleft` will give a list of subcommands with a short description. Running any subcommand without arguments will give a full help for that command. # Installation The easiest way to install goleft is to download the latest binary from the [releases](https://github.com/brentp/goleft/releases) and make sure to chmod +x the resulting binary. If you are using [go](https://github.com/golang/go), you can build from source with: ``` go get -u github.com/brentp/goleft/... go install github.com/brentp/goleft/cmd/goleft ``` `goleft` is also available in [bioconda](https://bioconda.github.io) # Commands + [covstats](https://github.com/brentp/goleft/tree/master/covstats#covstats) : estimate coverage and insert-size statistics on bams by sampling + [depth](https://github.com/brentp/goleft/tree/master/depth#depth) : parallelize calls to samtools in user-defined windows + depthwed : matricize output from depth to n-sites * n-samples + [indexcov](https://github.com/brentp/goleft/tree/master/indexcov#indexcov) : quick coverage estimate using only the bam index + [indexsplit](https://github.com/brentp/goleft/tree/master/indexsplit#indexsplit) : generate regions of even data across a cohort (for parallelization) + [samplename](https://github.com/brentp/goleft/tree/master/samplename#samplename): report samplename(s) from a bam's SM tag ================================================ FILE: cmd/goleft/goleft.go ================================================ package main import ( "fmt" "io" "os" "sort" "strconv" "github.com/brentp/goleft" "github.com/brentp/goleft/covstats" "github.com/brentp/goleft/depth" "github.com/brentp/goleft/depthwed" "github.com/brentp/goleft/indexcov" "github.com/brentp/goleft/indexsplit" "github.com/brentp/goleft/samplename" ) type progPair struct { help string main func() } var progs = map[string]progPair{ "depth": progPair{"parallelize calls to samtools in user-defined windows", depth.Main}, "depthwed": progPair{"matricize output from depth to n-sites * n-samples", depthwed.Main}, "covstats": progPair{"coverage stats across bams by sampling", covstats.Main}, "indexcov": progPair{"quick coverage estimate using only the bam index", indexcov.Main}, "indexsplit": progPair{"create regions of even coverage across bams/crams", indexsplit.Main}, "samplename": progPair{"report samplename(s) from a bam's SM tag", samplename.Main}, } func printProgs(ret int) { var wtr io.Writer = os.Stdout fmt.Fprintf(wtr, "goleft Version: %s\n\n", goleft.Version) var keys []string l := 5 for k := range progs { keys = append(keys, k) if len(k) > l { l = len(k) } } fmtr := "%-" + strconv.Itoa(l) + "s : %s\n" sort.Strings(keys) for _, k := range keys { fmt.Fprintf(wtr, fmtr, k, progs[k].help) } os.Exit(ret) } func main() { if len(os.Args) < 2 { printProgs(0) } var p progPair var ok bool if p, ok = progs[os.Args[1]]; !ok { printProgs(1) } // remove the prog name from the call os.Args = append(os.Args[:1], os.Args[2:]...) p.main() } ================================================ FILE: cnveval/cmd/cnveval/cnveval.go ================================================ package main import ( "fmt" "io" "log" "os" "runtime/pprof" "strconv" "strings" arg "github.com/alexflint/go-arg" "github.com/brentp/goleft/cnveval" "github.com/brentp/xopen" ) type cliargs struct { MinOverlap float64 `arg:"-m,help:minimum overlap proportion for intervals to be considered as overlapping"` LimitSamples bool `arg:"-s,help:only included sites in the truth-set that have matching samples in the test-set"` Truth string `arg:"positional,required,help:bed file of truth-set"` Test string `arg:"positional,required,help:bed file of test-set"` } func main() { cli := cliargs{MinOverlap: 0.4} if p := arg.MustParse(&cli); cli.MinOverlap > 1 || cli.MinOverlap <= 0 { p.Fail("minoverlap must be between 0 and 1") } tcnvs := parseTruth(cli.Test, false, nil) var samples map[string]bool if cli.LimitSamples { samples = make(map[string]bool) for _, t := range tcnvs { samples[t.Samples[0]] = true } } truths := parseTruth(cli.Truth, true, samples) cnvs := asCNV(tcnvs) f, err := os.Create("x.cpu.pprof") if err != nil { panic(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() ch := cnveval.Evaluate(cnvs, truths, cli.MinOverlap) tabs := ch.Tabulate() for _, cl := range []cnveval.SC{cnveval.Small, cnveval.Medium, cnveval.Large, cnveval.Any} { t := tabs[cl.Order()] fmt.Printf("size-class: %-12s | %s\n", cl, t) } } func asCNV(ts []cnveval.Truth) []cnveval.CNV { cnvs := make([]cnveval.CNV, len(ts)) for i, t := range ts { cnvs[i] = cnveval.CNV{Chrom: t.Chrom, Start: t.Start, End: t.End, CN: t.CN, Sample: t.Samples[0]} } return cnvs } func parseTruth(p string, cnt bool, samples map[string]bool) []cnveval.Truth { truths := make([]cnveval.Truth, 0, 1000) fh, err := xopen.Ropen(p) if err != nil { panic(err) } n := 0 for { line, err := fh.ReadString('\n') if err == io.EOF { break } if err != nil { panic(err) } if line[0] == '#' { continue } t := parseLine(line) if samples != nil { found := false for _, s := range t.Samples { if _, ok := samples[s]; ok { found = true break } } if !found { continue } } truths = append(truths, parseLine(line)) if cnt { n += len(truths[len(truths)-1].Samples) } } if cnt { log.Printf("%d total cnvs in truth-set (%d)", n, len(truths)) } else { log.Printf("cnvs in test-set (%d)", len(truths)) } return truths } func mustAtoi(s string) int { i, err := strconv.Atoi(s) if err != nil { panic(err) } return i } func parseLine(l string) cnveval.Truth { toks := strings.Split(strings.TrimRight(l, "\r\n"), "\t") if len(toks) < 5 { panic("expected five fields for CNVs") } return cnveval.Truth{Chrom: toks[0], Start: mustAtoi(toks[1]), End: mustAtoi(toks[2]), Samples: strings.Split(toks[4], ","), CN: mustAtoi(toks[3])} } ================================================ FILE: cnveval/cnveval.go ================================================ // Package cnveval provides a way to evalute CNVs based on a truth-set. package cnveval import ( "fmt" "math" "sort" ) // CNV indicates the region, sample and copy-number of a region. type CNV struct { Chrom string Start int End int Sample string CN int counted bool } // Truth indicates the region, samples and copy-number for a truth-set. type Truth struct { Chrom string Start int End int Samples []string CN int used map[string]bool } func (t Truth) String() string { return fmt.Sprintf("%s:%d-%d[%d]", t.Chrom, t.Start, t.End, t.CN) } func (c CNV) String() string { return fmt.Sprintf("%s:%d-%d[%d] in %s", c.Chrom, c.Start, c.End, c.CN, c.Sample) } func (t Truth) equals(o Truth) bool { return t.Start == o.Start && t.End == o.End } // SC is a size-class type SC int var ( // Any is used to avoid any size-class designation when reporting results. Any SC Small SC = 20000 Medium SC = 100000 Large SC = math.MaxInt64 ) func (s SC) Order() int { switch s { case Small: return 0 case Medium: return 1 case Large: return 2 case Any: return 3 default: panic(fmt.Sprintf("unknown size class: %d", s)) } } func (s SC) String() string { switch s { case Any: return "all" case Small: return fmt.Sprintf("0-%d", Small) case Medium: return fmt.Sprintf("%d-%d", Small, Medium) case Large: return fmt.Sprintf(">=%d", Medium) default: panic(fmt.Sprintf("unknown size class: %d", s)) } } // TS indicates a sample and SizeClass type TS struct { SizeClass SC Sample string } type Stat struct { FP, FN, TP, TN int } func (s Stat) String() string { return fmt.Sprintf("precision: %.4f (%-04d / (%-04d + %-04d)) recall: %.4f (%-04d / (%-04d + %-04d))", s.Precision(), s.TP, s.TP, s.FP, s.Recall(), s.TP, s.TP, s.FN) } func (s Stat) Recall() float64 { return float64(s.TP) / float64(s.TP+s.FN) } func (s Stat) Precision() float64 { return float64(s.TP) / float64(s.TP+s.FP) } type CohortStats map[TS]*Stat func (c CohortStats) TP(class SC) int { var TP int for cls, st := range c { if class != Any && cls.SizeClass != class { continue } TP += st.TP } return TP } func (c CohortStats) Tabulate() [4]Stat { var stats [4]Stat for cls, st := range c { stats[cls.SizeClass.Order()].TP += st.TP stats[cls.SizeClass.Order()].FP += st.FP stats[cls.SizeClass.Order()].TN += st.TN stats[cls.SizeClass.Order()].FN += st.FN } for _, cl := range []SC{Small, Medium, Large} { stats[Any.Order()].TP += stats[cl.Order()].TP stats[Any.Order()].FP += stats[cl.Order()].FP stats[Any.Order()].TN += stats[cl.Order()].TN stats[Any.Order()].FN += stats[cl.Order()].FN } return stats } func (c CohortStats) Precision(class SC) float64 { var TP, FP float64 for cls, st := range c { if class != Any && cls.SizeClass != class { continue } TP += float64(st.TP) FP += float64(st.FP) } //log.Println("TP, FP:", TP, FP) return TP / (TP + FP) } func (c CohortStats) Recall(class SC) float64 { var TP, FN, FP, TN float64 for cls, st := range c { if class != Any && cls.SizeClass != class { continue } TP += float64(st.TP) FN += float64(st.FN) FP += float64(st.FP) TN += float64(st.TN) } //log.Println("TP, FN, FP, TN:", TP, FN, FP, TN) return TP / (TP + FN) } func Evaluate(cnvs []CNV, truths []Truth, po float64) CohortStats { stat := make(map[TS]*Stat, 200) allSamples := make(map[string]bool) for _, t := range truths { for _, s := range t.Samples { allSamples[s] = true } } for _, c := range cnvs { allSamples[c.Sample] = true } sampleList := fromMap(allSamples) truthBySample := make(map[string][]Truth) truthWithoutSample := make(map[string][]Truth) for _, t := range truths { for _, s := range t.Samples { truthBySample[s] = append(truthBySample[s], t) } for _, s := range sampleList { if notin(s, t.Samples) { truthWithoutSample[s] = append(truthWithoutSample[s], t) } } } cnvBySample := make(map[string][]CNV) for _, c := range cnvs { cnvBySample[c.Sample] = append(cnvBySample[c.Sample], c) } for _, sample := range sampleList { truths, _ := truthBySample[sample] sort.Slice(truths, func(i, j int) bool { return truths[i].Chrom < truths[j].Chrom || (truths[i].Chrom == truths[j].Chrom && truths[i].Start < truths[j].Start) }) cnvs, _ := cnvBySample[sample] sort.Slice(cnvs, func(i, j int) bool { return cnvs[i].Chrom < cnvs[j].Chrom || (cnvs[i].Chrom == cnvs[j].Chrom && cnvs[i].Start < cnvs[j].Start) }) updatePositive(stat, truths, cnvs, po) others, _ := truthWithoutSample[sample] sort.Slice(others, func(i, j int) bool { return others[i].Chrom < others[j].Chrom || (others[i].Chrom == others[j].Chrom && others[i].Start < others[j].Start) }) updateFP(stat, others, cnvs, truths, po) } return stat } func notin(a string, bs []string) bool { for _, b := range bs { if a == b { return false } } return true } func fromMap(samples map[string]bool) []string { m := make([]string, 0, len(samples)) for k := range samples { m = append(m, k) } return m } func updateFP(stat map[TS]*Stat, others []Truth, cnvs []CNV, truths []Truth, po float64) { if len(cnvs) == 0 || len(others) == 0 { return } var i int // others should not include CNVs from this sample. for _, o := range others { ts := TS{Sample: cnvs[0].Sample, SizeClass: sizeClass(o)} val := stat[ts] if val == nil { val = &Stat{} stat[ts] = val } // don't need to reset i because others is sorted. for ; i < len(cnvs) && (cnvs[i].Chrom < o.Chrom || (cnvs[i].Chrom == o.Chrom && cnvs[i].End < o.Start)); i++ { } if i > 0 { i-- } tpfound := false fpfound := false found := false // TODO: flip this cnvs loop with the others loop above because we need to have a value for every cnv. for k, cnv := range cnvs[i:] { if cnv.Chrom > o.Chrom || (o.Chrom == cnv.Chrom && cnv.Start > o.End) { break } if poverlap(cnv, o) >= po && sameCN(cnv.CN, o.CN) { fpfound = true // we have a putative FP, but need to check if there's something else in the truth something // that also fits this criteria to avoid incorrectly calling an FP. for _, t := range truths { if t.Chrom != cnv.Chrom { continue } if poverlap(cnv, t) >= po && sameCN(cnv.CN, t.CN) { tpfound = true break } } } // if here, then cnv didn't overlap something in the truth set. if fpfound && !tpfound { val.FP++ found = true cnvs[i+k].counted = true } } if !(found || tpfound) { val.TN++ } } } // given a set of truths and cnvs from a sample, update the FPs. // truths and cnvs are sorted by chrom, then by start func updatePositive(stat map[TS]*Stat, truths []Truth, cnvs []CNV, po float64) { if len(cnvs) == 0 { return } var i int for _, t := range truths { ts := TS{Sample: cnvs[0].Sample, SizeClass: sizeClass(t)} found := false val := stat[ts] if val == nil { val = &Stat{} stat[ts] = val } // since truths are sorted as well, we don't need to reset i. for ; i < len(cnvs) && (cnvs[i].Chrom < t.Chrom || (cnvs[i].Chrom == t.Chrom && cnvs[i].End < t.Start)); i++ { } if i > 0 { i-- } for k, cnv := range cnvs[i:] { if cnv.Chrom > t.Chrom || (t.Chrom == cnv.Chrom && cnv.Start > t.End) { break } if poverlap(cnv, t) >= po && sameCN(cnv.CN, t.CN) { // used map make sure we don't double count cnvs from the sameCN // sample that are subsets of the full truth interval. if _, ok := t.used[cnv.Sample]; !ok { val.TP++ cnvs[i+k].counted = true found = true if t.used == nil { t.used = make(map[string]bool) } t.used[cnv.Sample] = true } } } if !found { val.FN++ } } for _, cnv := range cnvs { if !cnv.counted { ts := TS{Sample: cnv.Sample, SizeClass: sizeClass(Truth{Start: cnv.Start, End: cnv.End})} val := stat[ts] if val == nil { val = &Stat{} stat[ts] = val } val.FP++ } } } func sizeClass(t Truth) SC { l := t.End - t.Start if l < int(Small) { return Small } if l < int(Medium) { return Medium } return Large } func sameCN(a, b int) bool { if a > 2 { a = 3 } if b > 2 { b = 3 } return a == b } func imin(a, b int) int { if a < b { return a } return b } func imax(a, b int) int { if a > b { return a } return b } func poverlap(a CNV, b Truth) float64 { if a.Chrom != b.Chrom { return 0 } total := math.Min(float64(a.End-a.Start), float64(b.End-b.Start)) //total := float64(b.End - b.Start) ovl := imin(a.End, b.End) - imax(a.Start, b.Start) if ovl < 0 { return 0 } return float64(ovl) / total } ================================================ FILE: covstats/README.md ================================================ ## covstats get estimates for coverage, instert size, duplicate, from a bam file by sampling read-length and looking at the index. ================================================ FILE: covstats/covstats.go ================================================ package covstats import ( "fmt" "io" "log" "math" "os" "sort" "strconv" "strings" arg "github.com/alexflint/go-arg" "github.com/biogo/hts/bam" "github.com/biogo/hts/sam" "github.com/brentp/goleft/samplename" "github.com/brentp/smoove/shared" "github.com/brentp/xopen" ) var cli = struct { N int `arg:"-n,help:number of reads to sample for length"` Regions string `arg:"-r,help:optional bed file to specify target regions"` Fasta string `arg:"-f,help:fasta file. required for cram format"` Bams []string `arg:"positional,required,help:bams/crams for which to estimate coverage"` }{N: 1000000} func pcheck(e error) { if e != nil { panic(e) } } const N_MADS = 10 func readCoverage(path string) int { fh, err := xopen.Ropen(path) pcheck(err) cov := 0 for { line, err := fh.ReadString('\n') if err == io.EOF { break } line = strings.TrimSuffix(line, "\n") toks := strings.SplitN(line, "\t", 5) s, err := strconv.Atoi(toks[1]) pcheck(err) e, err := strconv.Atoi(toks[2]) pcheck(err) cov += e - s } return cov } func madFilter(arr []int, nmads int) []int { if !sort.IntsAreSorted(arr) { sort.Ints(arr) } med := arr[len(arr)/2] upper_mads := make([]int, 0, len(arr)) for _, a := range arr[len(arr)/2+1:] { upper_mads = append(upper_mads, a-med) } sort.Ints(upper_mads) umad := upper_mads[len(upper_mads)/2] upper := med + nmads*umad var i, a int for i, a = range arr { if a > upper { break } } return arr[:i] } func meanStd(arr []int) (mean, std float64) { // first remove things that are more than 10 mads above the median. l := float64(len(arr)) for _, a := range arr { mean += float64(a) / l } for _, a := range arr { std += math.Pow(float64(a)-mean, 2) / l } return mean, math.Sqrt(std) } // Stats hold info about a bam returned from `BamStats` type Stats struct { InsertMean float64 InsertSD float64 // 5th percentile of insert size InsertPct5 int // 95th percentile of insert size InsertPct95 int TemplateMean float64 TemplateSD float64 ReadLengthMean float64 ReadLengthMedian float64 // ProportionBad is the proportion of reads that were Dup|QCFail ProportionBad float64 ProportionUnmapped float64 ProportionProperlyPaired float64 ProportionDuplicate float64 MaxReadLength int H []float64 } func (s Stats) String() string { return fmt.Sprintf("%.2f\t%.2f\t%d\t%d\t%.2f\t%.2f", s.InsertMean, s.InsertSD, s.InsertPct5, s.InsertPct95, s.TemplateMean, s.TemplateSD) } // number of reads to skip to avoid crap at start of chrom const skipReads = 100000 // BamStats takes bam reader sample N well-behaved sites and return the coverage and insert-size info func BamStats(br *bam.Reader, n int, skipReads int) Stats { br.Omit(bam.AllVariableLengthData) sizes := make([]int, 0, 2*n) insertSizes := make([]int, 0, n) templateLengths := make([]int, 0, n) var nBad, nUnmapped int for i := 0; i < skipReads; i++ { _, err := br.Read() if err == io.EOF { log.Println("covmed: not enough reads to sample for bam stats") break } } s := Stats{} var k int for len(insertSizes) < n { rec, err := br.Read() if err == io.EOF { break } pcheck(err) if rec.Flags&sam.Unmapped != 0 { nUnmapped++ continue } k++ if rec.Flags&(sam.Duplicate|sam.QCFail) != 0 { if rec.Flags&sam.Duplicate != 0 { s.ProportionDuplicate++ } nBad++ continue } if rec.Flags&sam.ProperPair != 0 { s.ProportionProperlyPaired++ } if len(sizes) < 2*n { _, read := rec.Cigar.Lengths() sizes = append(sizes, read) } else { // single end reads have no pairs so we have to skip. if len(insertSizes) == 0 { break } } if rec.Pos < rec.MatePos && rec.Flags&sam.ProperPair == sam.ProperPair && len(rec.Cigar) == 1 && rec.Cigar[0].Type() == sam.CigarMatch { insertSizes = append(insertSizes, rec.MatePos-rec.End()) templateLengths = append(templateLengths, rec.TempLen) } } sort.Ints(sizes) if len(sizes) > 0 { s.ProportionBad = float64(nBad) / float64(k+nUnmapped) s.ProportionDuplicate = s.ProportionDuplicate / float64(k+nUnmapped) s.ProportionProperlyPaired = s.ProportionProperlyPaired / float64(k+nUnmapped) s.ProportionUnmapped = float64(nUnmapped) / float64(k+nUnmapped) s.ReadLengthMedian = float64(sizes[(len(sizes)-1)/2]) - 1 s.ReadLengthMean, _ = meanStd(sizes) sort.Ints(sizes) s.MaxReadLength = sizes[len(sizes)-1] } if len(insertSizes) > 0 { sort.Ints(insertSizes) l := float64(len(insertSizes) - 1) s.InsertPct5 = insertSizes[int(0.05*l+0.5)] s.InsertPct95 = insertSizes[int(0.95*l+0.5)] insertSizes = madFilter(insertSizes, N_MADS) s.InsertMean, s.InsertSD = meanStd(insertSizes) templateLengths = madFilter(templateLengths, N_MADS) s.TemplateMean, s.TemplateSD = meanStd(templateLengths) // taken from lumpy/scripts/pairend_distro.py start := float64(s.MaxReadLength) stop := float64(s.TemplateMean + s.TemplateSD*4) s.H = make([]float64, int(stop-start+1)) cnt := float64(0) for _, t := range templateLengths { x := float64(t) if x < start || x > stop { continue } j := int(x - start) s.H[j] += 1 cnt += 1 } for i := range s.H { s.H[i] /= cnt } } return s } // Main is called from the dispatcher func Main() { fmt.Fprintln(os.Stdout, "coverage\tinsert_mean\tinsert_sd\tinsert_5th\tinsert_95th\ttemplate_mean\ttemplate_sd\tpct_unmapped\tpct_bad_reads\tpct_duplicate\tpct_proper_pair\tread_length\tbam\tsample") arg.MustParse(&cli) for _, bamPath := range cli.Bams { brdr, err := shared.NewReader(bamPath, 2, cli.Fasta) pcheck(err) names := strings.Join(samplename.Names(brdr.Header()), ",") if names == "" { names = "" } var idx *bam.Index if strings.HasSuffix(bamPath, ".bam") { ifh, ierr := os.Open(bamPath + ".bai") if ierr != nil { // if .bam.bai didn't exist, check .bai ifh, err = os.Open(bamPath[:len(bamPath)-4] + ".bai") } pcheck(err) idx, err = bam.ReadIndex(ifh) pcheck(err) } genomeBases := 0 mapped := uint64(0) sizes := BamStats(brdr, cli.N, skipReads) var notFound []string for _, ref := range brdr.Header().Refs() { genomeBases += ref.Len() if idx != nil { stats, ok := idx.ReferenceStats(ref.ID()) if !ok { if !strings.Contains(ref.Name(), "random") && ref.Len() > 10000 { notFound = append(notFound, ref.Name()) } continue } mapped += stats.Mapped } } if len(notFound) > 0 { fmt.Fprintf(os.Stderr, "chromosomes: %s not found in %s\n", strings.Join(notFound, ","), bamPath) } if cli.Regions != "" { genomeBases = readCoverage(cli.Regions) } // TODO: check that reads are from coverage regions. coverage := (1 - sizes.ProportionBad) * float64(mapped) * sizes.ReadLengthMean / float64(genomeBases) fmt.Fprintf(os.Stdout, "%.2f\t%s\t%.2f\t%.1f\t%.1f\t%.1f\t%d\t%s\t%s\n", coverage, sizes.String(), 100*sizes.ProportionUnmapped, 100*sizes.ProportionBad, 100*sizes.ProportionDuplicate, 100*sizes.ProportionProperlyPaired, sizes.MaxReadLength, bamPath, names) } } ================================================ FILE: dcnv/dcnv.go ================================================ package main import ( "fmt" "html/template" "io" "math" "math/rand" "os" "strconv" "strings" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/mat" "github.com/brentp/faidx" chartjs "github.com/brentp/go-chartjs" "github.com/brentp/go-chartjs/types" "github.com/brentp/goleft/dcnv/debiaser" "github.com/brentp/xopen" "go4.org/sort" ) // Intervals is the wrapper for a slice of intervals. type Intervals struct { Chrom string // 0-based starts Starts []uint32 // 1-based ends GCs []float64 SeqComplexity []float64 Ends []uint32 // shape is n-sites * n-samples Depths *mat.Dense _depths []float64 GCB *GcBounds sampleMedians []float64 sampleScalars []float64 Samples []string } func (ivs Intervals) NSamples() int { _, c := ivs.Depths.Dims() return c } func mustAtoi(a string) uint32 { v, err := strconv.Atoi(a) if err != nil { panic(err) } return uint32(v) } func mustAtof(a string) float64 { v, err := strconv.ParseFloat(a, 64) if err != nil { panic(err) } return v } func imin(a, b int) int { if a < b { return a } return b } type GcBounds struct { Min float64 Max float64 } func (ivs *Intervals) addFromLine(l string, fa *faidx.Faidx, fp *faidx.FaPos) { toks := strings.Split(l, "\t") toks[len(toks)-1] = strings.TrimSpace(toks[len(toks)-1]) // subtract $n bases since GC before will afffect reads here. s, e := mustAtoi(toks[1]), mustAtoi(toks[2]) if s < 250 { s = 250 } st, err := fa.Stats(toks[0], int(s-250), int(e)) if err != nil { fmt.Fprintln(os.Stderr, err) } if ivs.GCB != nil && (st.GC > ivs.GCB.Max || st.GC < ivs.GCB.Min) { return } ivs.Starts = append(ivs.Starts, s) ivs.Ends = append(ivs.Ends, e) for c := 3; c < len(toks); c++ { d := mustAtof(toks[c]) //d /= float64(iv.End - iv.Start) ivs._depths = append(ivs._depths, d) } ivs.GCs = append(ivs.GCs, st.GC) } // SampleMedians gets the Median log2 values for each sample. func (ivs *Intervals) SampleMedians() []float64 { r, _ := ivs.Depths.Dims() depths := make([]float64, r) ivs.sampleMedians = make([]float64, ivs.NSamples()) for sampleI := 0; sampleI < ivs.NSamples(); sampleI++ { // sorting the extracted array is much faster. mat.Col(depths, sampleI, ivs.Depths) // lop off the lower depths (for exome). // and then normalized on the median above that lower bound. sort.Slice(depths, func(i, j int) bool { return depths[i] < depths[j] }) var k int for k = 0; k < len(depths) && depths[k] == 0; k++ { } ivs.sampleMedians[sampleI] = depths[k:][int(0.65*float64(len(depths)-k))] } return ivs.sampleMedians } // NormalizeBySampleMedian divides each depth by the sample median. func (ivs *Intervals) NormalizeBySampleMedian() { meds := ivs.SampleMedians() r, _ := ivs.Depths.Dims() mat := ivs.Depths for i := 0; i < r; i++ { row := mat.RawRowView(i) floats.Div(row, meds) } } func median(b []float64) float64 { a := make([]float64, len(b)) copy(a, b) sort.Slice(a, func(i, j int) bool { return a[i] < a[j] }) if len(a)%2 == 0 { am := a[len(a)/2] bm := a[len(a)/2+1] return (am + bm) / 2 } return a[len(a)/2] } type MatFn func(*mat.Dense) func (ivs *Intervals) ReadRegions(path string, fasta string) { fai, err := faidx.New(fasta) if err != nil { panic(err) } fp := &faidx.FaPos{} rdr, err := xopen.Ropen(path) if err != nil { panic(err) } i := 0 for { line, err := rdr.ReadString('\n') if err == io.EOF { break } if err != nil { panic(err) } if i == 0 && (line[0] == '#' || strings.HasPrefix(line, "chrom")) { ivs.Samples = strings.Split(strings.TrimSpace(line), "\t")[3:] continue } if i == 0 || i == 1 { ivs.Chrom = string(line[:strings.Index(line, "\t")]) fp.Chrom = ivs.Chrom } i++ ivs.addFromLine(line, fai, fp) } ns := len(ivs.Samples) ivs.Depths = mat.NewDense(len(ivs._depths)/ns, ns, ivs._depths) } func (ivs *Intervals) Write(n int) { meds := ivs.SampleMedians() r, c := ivs.Depths.Dims() lmeds := make([]float64, c) for i, v := range meds { lmeds[i] = math.Log2(v) } _s := make([]string, ivs.NSamples()) formatIV := func(depths []float64) string { for k := 0; k < len(_s); k++ { _s[k] = fmt.Sprintf("%.1f", depths[k]) } return strings.Join(_s, "\t") } for i := 0; i < r; i++ { if i == n { break } fmt.Printf("%s:%d-%d\t%s\n", ivs.Chrom, ivs.Starts[i], ivs.Ends[i], formatIV(ivs.Depths.RawRowView(i))) } } func Pipeliner(mat *mat.Dense, fns ...MatFn) { for _, fn := range fns { fn(mat) } } // truncate depth values above this to cnMax const cnMax = 2.5 type vs struct { xs []float64 ys []float64 } func (v *vs) Xs() []float64 { return v.xs } func (v *vs) Ys() []float64 { return v.ys } func (v *vs) Rs() []float64 { return nil } func (v *vs) Len() int { return len(v.xs) } // make it meet gonum/plot plotter.XYer func (v *vs) XY(i int) (x, y float64) { return v.xs[i], v.ys[i] } func asValues(vals []float64, multiplier float64) chartjs.Values { // skip until we find non-zero. v := vs{xs: make([]float64, 0, len(vals)), ys: make([]float64, 0, len(vals))} seenNonZero := false for i, r := range vals { if r == 0 && !seenNonZero { continue } seenNonZero = true v.xs = append(v.xs, float64(i)*multiplier) if r > cnMax { r = cnMax } v.ys = append(v.ys, float64(r)) } return &v } func randomColor(s int) *types.RGBA { rand.Seed(int64(s)) return &types.RGBA{ R: uint8(26 + rand.Intn(230)), G: uint8(26 + rand.Intn(230)), B: uint8(26 + rand.Intn(230)), A: 240} } func plotDepths(depths *mat.Dense, samples []string, chrom string, base string) error { chart := chartjs.Chart{Label: chrom} xa, err := chart.AddXAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Bottom, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "position on " + chrom, Display: chartjs.True}}) if err != nil { return err } ya, err := chart.AddYAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Left, Tick: &chartjs.Tick{Min: 0, Max: 2.5}, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "scaled coverage", Display: chartjs.True}}) if err != nil { return err } w := 0.4 r, nsamples := depths.Dims() if nsamples > 30 { w = 0.3 } if nsamples > 50 { w = 0.2 } depth := make([]float64, r) for i := 0; i < nsamples; i++ { mat.Col(depth, i, depths) xys := asValues(depth, 16384) //log.Println(chrom, samples[i], len(xys.Xs())) c := randomColor(i) dataset := chartjs.Dataset{Data: xys, Label: samples[i], Fill: chartjs.False, PointRadius: 0, BorderWidth: w, BorderColor: c, BackgroundColor: c, SteppedLine: chartjs.True, PointHitRadius: 6} dataset.XAxisID = xa dataset.YAxisID = ya chart.AddDataset(dataset) } chart.Options.Responsive = chartjs.False chart.Options.Tooltip = &chartjs.Tooltip{Mode: "nearest"} wtr, err := os.Create(fmt.Sprintf("%s-depth-%s.html", base, chrom)) if err != nil { return err } link := template.HTML(`back to index`) if err := chart.SaveHTML(wtr, map[string]interface{}{"width": 850, "height": 550, "customHTML": link}); err != nil { return err } if err := wtr.Close(); err != nil { return err } return nil } func main() { bed := os.Args[1] fasta := os.Args[2] ivs := &Intervals{} ivs.ReadRegions(bed, fasta) db := debiaser.GeneralDebiaser{} db.Window = 9 db.Vals = make([]float64, len(ivs.GCs)) copy(db.Vals, ivs.GCs) Pipeliner(ivs.Depths, db.Sort, db.Debias, db.Unsort) ivs.NormalizeBySampleMedian() nsites, nsamples := ivs.Depths.Dims() dps := make([]string, nsamples) fdp, err := os.Create("depth.bed") if err != nil { panic(err) } plotDepths(ivs.Depths, ivs.Samples, ivs.Chrom, "dd") fmt.Fprintf(fdp, "#chrom\tstart\tend\t%s\n", strings.Join(ivs.Samples, "\t")) for i := 0; i < nsites; i++ { iv := ivs.Depths.RawRowView(i) for si := range dps { dps[si] = fmt.Sprintf("%.2f", iv[si]) } fmt.Fprintf(fdp, "%s\t%d\t%d\t%s\n", ivs.Chrom, ivs.Starts[i], ivs.Ends[i], strings.Join(dps, "\t")) } } ================================================ FILE: dcnv/debiaser/debiaser.go ================================================ package debiaser import ( "fmt" "log" "math" "sort" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/mat" "github.com/JaderDias/movingmedian" ) // Debiaser implements inplace removal of bias from a mat64 of (scaled) values. type Debiaser interface { Debias(*mat.Dense) } // Sorter provides method to sort and then unsort a mat64 type Sorter interface { Sort(*mat.Dense) Unsort(*mat.Dense) } // SortedDebiaser is useful when we need to: sort, then unbias based on that sort order, then unsort. // An example of this is for GC bias. type SortedDebiaser interface { Sorter Debiaser } // GeneralDebiaser is an implementation of a SortedDebiaser that can be used simply by setting attributes.int // Window is the size of the moving window for correction. // Usage is to Call GeneralDebiaser.Sort() then Debias(), then Unsort(). Presumbly, Those calls will be flanked // by a scaler call such as to scaler.ZScore. type GeneralDebiaser struct { Vals []float64 Window int inds []int tmp *mat.Dense } func (g *GeneralDebiaser) setTmp(r, c int) { if g.tmp == nil { g.tmp = mat.NewDense(r, c, nil) } else { gr, gc := g.tmp.Dims() if gr != r || gc != c { g.tmp = mat.NewDense(r, c, nil) } } } // Sort sorts the rows in mat according the order in g.Vals. func (g *GeneralDebiaser) Sort(mat *mat.Dense) { if g.inds == nil { g.inds = make([]int, len(g.Vals)) } floats.Argsort(g.Vals, g.inds) r, c := mat.Dims() g.setTmp(r, c) changed := false for ai, bi := range g.inds { if ai != bi { changed = true } g.tmp.SetRow(ai, mat.RawRowView(bi)) } if !changed { log.Println("WARNING: no change after sorting. This usually means .Vals is unset or same as previous run") } // copy g.tmp into mat mat.Copy(g.tmp) } // Unsort reverts the values to be position sorted. func (g *GeneralDebiaser) Unsort(mat *mat.Dense) { if g.inds == nil { panic("unsort: must call sort first") } r, c := mat.Dims() g.setTmp(r, c) // copy mat into g.tmp g.tmp.Copy(mat) tmp := make([]float64, len(g.Vals)) for ai, bi := range g.inds { mat.SetRow(bi, g.tmp.RawRowView(ai)) tmp[bi] = g.Vals[ai] } g.Vals = tmp } // Debias by subtracting moving median in each sample. // It's assumed that g.Sort() has been called before this and that g.Unsort() will be called after. // It's also assumed that the values in mat have been scaled, for example by a `scaler.ZScore`. func (g *GeneralDebiaser) Debias(imat *mat.Dense) { r, c := imat.Dims() col := make([]float64, r) for sampleI := 0; sampleI < c; sampleI++ { mat.Col(col, sampleI, imat) mm := movingmedian.NewMovingMedian(g.Window) mid := (g.Window-1)/2 + 1 for i := 0; i < mid; i++ { mm.Push(col[i]) } for i := 0; i < mid; i++ { col[i] /= math.Max(mm.Median(), 1) } var i int for i = mid; i < len(col)-mid; i++ { mm.Push(col[i+mid]) col[i] /= math.Max(mm.Median(), 1) } for ; i < len(col); i++ { col[i] /= math.Max(mm.Median(), 1) } imat.SetCol(sampleI, col) } } type ChunkDebiaser struct { GeneralDebiaser // ScoreWindow defines the range of Vals used per window. // E.g. if this is 0.1 then all values from 0.25-0.35 will be normalized to the median of // Depths occuring in that range. ScoreWindow float64 } func (cd *ChunkDebiaser) Debias(imat *mat.Dense) { if cd.ScoreWindow == 0 { panic("must set ChunkDebiaser.ScoreWindow") } r, c := imat.Dims() col := make([]float64, r) slices := make([]int, 1, 100) v0 := cd.Vals[0] for i := 0; i < len(cd.Vals); i++ { if cd.Vals[i]-v0 > cd.ScoreWindow { v0 = cd.Vals[i] slices = append(slices, i) } } slices = append(slices, len(cd.Vals)) dpSubset := make([]float64, 0, len(cd.Vals)) for sampleI := 0; sampleI < c; sampleI++ { mat.Col(col, sampleI, imat) for i := 1; i < len(slices); i++ { si, ei := slices[i-1], slices[i] dpSubset = dpSubset[:(ei - si)] copy(dpSubset, col[si:ei]) sort.Float64s(dpSubset) var k int for ; k < len(dpSubset) && dpSubset[k] == 0; k++ { } median := dpSubset[(ei-si-k)/2] if median > 0 { for j := si; j < ei; j++ { col[j] /= median } } } imat.SetCol(sampleI, col) } } type SVD struct { MinVariancePct float64 } func (isvd *SVD) Debias(imat *mat.Dense) { var svd mat.SVD if ok := svd.Factorize(imat, mat.SVDThin); !ok { panic("error with SVD") } // get svd and zero out first n components. s, u, v := extractSVD(&svd) sum := floats.Sum(s) str := "variance:" var n int for n = 0; n < 15 && 100*s[n]/sum > isvd.MinVariancePct; n++ { str += fmt.Sprintf(" %.2f", 100*s[n]/sum) } log.Println(str) sigma := mat.NewDense(len(s), len(s), nil) // leave the first n as 0 and set the rest. for i := n; i < len(s); i++ { sigma.Set(i, i, s[i]) } imat.Product(u, sigma, v.T()) } func extractSVD(svd *mat.SVD) (s []float64, u, v *mat.Dense) { var um *mat.Dense var vm *mat.Dense svd.UTo(um) svd.VTo(vm) s = svd.Values(nil) return s, um, vm } ================================================ FILE: dcnv/debiaser/debiaser_test.go ================================================ package debiaser_test import ( "fmt" "math/rand" "reflect" "testing" "gonum.org/v1/gonum/mat" "github.com/brentp/goleft/dcnv/debiaser" "github.com/brentp/goleft/dcnv/scalers" ) func fillMatrix(mat *mat.Dense) { r, c := imat.Dims() for i := 0; i < r; i++ { for j := 0; j < c; j++ { imat.Set(i, j, 100+float64(i)*100+10*float64(j)+float64(j)/10+10*rand.Float64()) } } } func printMatrix(imat *mat.Dense) { r, c := imat.Dims() for i := 0; i < r; i++ { fmt.Printf("[") row := imat.RawRowView(i) for j := 0; j < c; j++ { if j < c-1 { fmt.Printf("%.2f, ", row[j]) } else { fmt.Printf("%.2f", row[j]) } } fmt.Printf("]\n") } } func TestGeneralDebiasSort(t *testing.T) { g := debiaser.GeneralDebiaser{Vals: []float64{0, 1, 2, 3, 10, 9, 8, 6}} imat := mat.NewDense(len(g.Vals), 4, nil) cpy := mat.NewDense(len(g.Vals), 4, nil) fillMatrix(imat) cpy.Copy(imat) g.Sort(imat) /* for i := 0; i < r; i++ { fmt.Printf("%v\n", mat.RawRowView(i)) } */ /* if !reflect.DeepEqual(g.Posns, []uint32{0, 1, 2, 3, 7, 6, 5, 4}) { t.Fatalf("got %s", g.Posns) } */ if !reflect.DeepEqual(g.Vals, []float64{0, 1, 2, 3, 6, 8, 9, 10}) { t.Fatalf("got %s", g.Vals) } if reflect.DeepEqual(cpy, mat) { t.Fatalf("expected different matrix after sort") } g.Unsort(imat) /* if !reflect.DeepEqual(g.Posns, []uint32{0, 1, 2, 3, 4, 5, 6, 7}) { t.Fatalf("got %s", g.Posns) } */ if !reflect.DeepEqual(g.Vals, []float64{0, 1, 2, 3, 10, 9, 8, 6}) { t.Fatalf("got %s", g.Vals) } /* fmt.Println("\nafter unsort") for i := 0; i < r; i++ { fmt.Printf("%v -- %v\n", mat.RawRowView(i), cpy.RawRowView(i)) } */ if !reflect.DeepEqual(cpy, imat) { t.Fatalf("expected indentical matrix after unsort") } } func TestGeneralDebias(t *testing.T) { g := debiaser.GeneralDebiaser{Vals: []float64{0, 1, 2, 3, 10, 9, 8, 6, 5, 4, 3, 2, 1, 0.5}, Window: 1, //Posns: []uint32{0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14}, } imat := mat.NewDense(len(g.Vals), 7, nil) fillMatrix(imat) var zscore scalers.ZScore zscore.Scale(imat) zscore.UnScale(imat) // check z-scaling //fmt.Println("after") //printMatrix(mat) zscore.Scale(imat) g.Sort(imat) g.Debias(imat) zscore.UnScale(imat) //fmt.Println("after") //printMatrix(mat) /* if reflect.DeepEqual(g.Posns, []uint32{0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14}) { t.Fatal("expected unsorted posns") } */ g.Unsort(imat) /* if !reflect.DeepEqual(g.Posns, []uint32{0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14}) { t.Fatal("expected sorted posns") } */ } ================================================ FILE: dcnv/scalers/scalers.go ================================================ // Package scalers holds the interface for scaling depths to standardized scores. package scalers import ( "math" "sort" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat" ) // Scaler allows transformation and back of the depths. // As an example, see the `ZScore` struct. Usually, these // will be 0-centered type Scaler interface { // Scale Converts from AdjustedDepth to a scaled value Scale(*mat.Dense) UnScale(*mat.Dense) } var _ Scaler = &ZScore{} var _ Scaler = &Log2{} // ZScore implements the Scaler interface for StdScore (z-score) type ZScore struct { means []float64 sds []float64 } // UnScale converts back to depths. func (z *ZScore) UnScale(a *mat.Dense) { r, _ := a.Dims() for i := 0; i < r; i++ { row := a.RawRowView(i) for c, v := range row { row[c] = math.Max(0, v*z.sds[i]+z.means[i]) } } } // Scale converts from depths to z-scores. func (z *ZScore) Scale(a *mat.Dense) { r, _ := a.Dims() z.means = make([]float64, r) z.sds = make([]float64, r) // convert to z-score for i := 0; i < r; i++ { row := a.RawRowView(i) m, sd := stat.MeanStdDev(row, nil) for c, d := range row { row[c] = (d - m) / sd } z.means[i] = m z.sds[i] = sd } } type RowCentered struct { Centerer func([]float64) float64 centers []float64 } type ColCentered struct { Centerer func([]float64) float64 centers []float64 } func (rc *RowCentered) Scale(a *mat.Dense) { r, _ := a.Dims() if rc.centers == nil { rc.centers = make([]float64, 0, r) } rc.centers = rc.centers[:0] for i := 0; i < r; i++ { row := a.RawRowView(i) rc.centers = append(rc.centers, rc.Centerer(row)) for c := range row { row[c] -= rc.centers[i] } } } func (cc *ColCentered) Scale(a *mat.Dense) { r, c := a.Dims() if cc.centers == nil { cc.centers = make([]float64, 0, c) } cc.centers = cc.centers[:0] col := make([]float64, r) for i := 0; i < c; i++ { mat.Col(col, i, a) cc.centers = append(cc.centers, cc.Centerer(col)) for c := range col { col[c] -= cc.centers[i] } a.SetCol(i, col) } } func (rc *RowCentered) UnScale(a *mat.Dense) { r, _ := a.Dims() for i := 0; i < r; i++ { row := a.RawRowView(i) cnt := rc.centers[i] for j := range row { row[j] += cnt } } } func (cc *ColCentered) UnScale(a *mat.Dense) { r, c := a.Dims() col := make([]float64, r) for i := 0; i < c; i++ { mat.Col(col, i, a) cnt := cc.centers[i] for j := range col { col[j] += cnt } a.SetCol(i, col) } } func gmean(vs []float64) float64 { os := make([]float64, len(vs)) copy(os, vs) sort.Float64s(os) return os[len(os)/2] return stat.Mean(vs, nil) } // Log2 implements Scaler interface to perform log2 transformation on depths. type Log2 struct { CC *ColCentered } // Scale converts from depths to log2s func (l *Log2) Scale(a *mat.Dense) { r, _ := a.Dims() if l.CC == nil { l.CC = &ColCentered{Centerer: gmean} } for i := 0; i < r; i++ { row := a.RawRowView(i) for c, d := range row { row[c] = math.Log2(1 + d) } } l.CC.Scale(a) } // UnScale converts from log2s to depths func (l *Log2) UnScale(a *mat.Dense) { r, _ := a.Dims() l.CC.UnScale(a) for i := 0; i < r; i++ { row := a.RawRowView(i) for c, d := range row { row[c] = math.Pow(2, d) } } } ================================================ FILE: dcnv/scalers/scalers_test.go ================================================ package scalers_test import ( "log" "math" "testing" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat" "github.com/brentp/goleft/dcnv/scalers" ) const eps = 0.001 func TestZScoreRoundTrip(t *testing.T) { zsc := &scalers.ZScore{} imat := mat.NewDense(10, 10, nil) r, c := imat.Dims() if r != 10 || c != 10 { t.Fatal("unexpected size") } for i := 0; i < r; i++ { for j := 0; j < c; j++ { imat.Set(i, j, float64((i+1)*(j+1))) } } zsc.Scale(imat) for i := 0; i < r; i++ { if math.Abs(stat.Mean(mat.RawRowView(i), nil)) > eps { t.Fatalf("expected 0, got %f", stat.Mean(mat.RawRowView(i), nil)) } } zsc.UnScale(mat) for i := 0; i < r; i++ { row := mat.RawRowView(i) for j := 0; j < c; j++ { if math.Abs(row[j]-float64((i+1)*(j+1))) > eps { log.Fatalf("expected: %f, got %f", float64((i+1)*(j+1)), row[j]) } } } } func TestLog2RoundTrip(t *testing.T) { zsc := &scalers.Log2{} imat := mat.NewDense(10, 10, nil) r, c := imat.Dims() if r != 10 || c != 10 { t.Fatal("unexpected size") } for i := 0; i < r; i++ { for j := 0; j < c; j++ { imat.Set(i, j, float64((i+1)*(j+1))) } } zsc.Scale(imat) for i := 0; i < r; i++ { if floats.Min(imat.RawRowView(i)) < 0 { t.Fatalf("log2:expected >0, got %f", stat.Mean(imat.RawRowView(i), nil)) } } zsc.UnScale(imat) for i := 0; i < r; i++ { row := imat.RawRowView(i) for j := 0; j < c; j++ { if math.Abs(row[j]-float64((i+1)*(j+1))) > eps { log.Fatalf("expected: %f, got %f", float64((i+1)*(j+1)), row[j]) } } } } ================================================ FILE: depth/README.md ================================================ depth ===== depth parallelizes calls to [samtools](https://samtools.github.io) in user-defined windows. It outputs a bed file of callable regions (determined by mincov) and of depth (only windows with <= `maxmeandepth` are reported. ``` usage: goleft depth [--windowsize WINDOWSIZE] [--maxmeandepth MAXMEANDEPTH] [--q Q] [--chrom CHROM] [--mincov MINCOV] [--stats] --reference REFERENCE [--processes PROCESSES] [--bed BED] [--prefix PREFIX] BAM positional arguments: bam bam for which to calculate depth options: --windowsize WINDOWSIZE, -w WINDOWSIZE window size in which to calculate high-depth regions [default: 250] --maxmeandepth MAXMEANDEPTH, -m MAXMEANDEPTH windows with depth > than this are high-depth. The default reports the depth of all regions. --q Q, -Q Q mapping quality cutoff [default: 1] --chrom CHROM, -c CHROM optional chromosome to limit analysis --mincov MINCOV minimum depth considered callable [default: 4] --stats, -s report sequence stats [GC CpG masked] for each window --reference REFERENCE, -r REFERENCE path to reference fasta --processes PROCESSES, -p PROCESSES number of processors to parallelize. --bed BED, -b BED file of positions or regions. (parallelization will be by region). --prefix PREFIX --help, -h display this help and exit ================================================ FILE: depth/depth.go ================================================ // Package depth parallelizes calls to samtools depths and outputs: // 1) $prefix.callable.bed that contains collapsed per-base regions of NO/LOW/or CALLABLE coverage. // where low is < MinCov. // 2) $prefix.depth.bed that contains the average depth for each window interval specified by WindowSize. // TODO: output gc-content in depth windows. package depth import ( "bufio" "bytes" "fmt" "io" "log" "os" "regexp" "runtime" "strconv" "strings" arg "github.com/alexflint/go-arg" "github.com/brentp/faidx" "github.com/brentp/gargs/process" "github.com/brentp/xopen" "github.com/fatih/color" ) type dargs struct { WindowSize int `arg:"-w,help:window size in which to calculate high-depth regions"` MaxMeanDepth int `arg:"-m,help:windows with depth > than this are high-depth. The default reports the depth of all regions."` Ordered bool `arg:"-o,help:force output to be in same order as input even with -p."` Q int `arg:"-Q,help:mapping quality cutoff"` Chrom string `arg:"-c,help:optional chromosome to limit analysis"` MinCov int `arg:"help:minimum depth considered callable"` Stats bool `arg:"-s,help:report sequence stats [GC CpG masked] for each window"` Reference string `arg:"-r,help:path to reference fasta"` Processes int `arg:"-p,help:number of processors to parallelize."` Bed string `arg:"-b,help:optional file of positions or regions to restrict depth calculations."` Prefix string `arg:"required,help:prefix for output files depth.bed and callable.bed"` Bam string `arg:"positional,required,help:bam for which to calculate depth"` stdout io.Writer `arg:"-"` } // we echo the region first so the callback knows the full extents even if there is NOTE // coverage for part of it. const command = "echo '%s'; samtools depth -Q %d -d %d -r '%s' '%s'" // this is the size in basepairs of the genomic chunks for parallelization. var step = 10000000 var exitCode = 0 func pcheck(e error) { if e != nil { log.Fatal(e) } } func min(a, b int) int { if a < b { return a } return b } func max(a, b int) int { if a > b { return a } return b } // match chrom:start-end and chrom\tstart\tend var re = regexp.MustCompile("(.+?)[:\t](\\d+)([\\-\t])(\\d+).*?") func chromStartEndFromLine(line []byte) (string, int, int) { ret := re.FindSubmatch(line) if len(ret) != 5 { log.Fatal("couldn't get region from line", string(line)) } chrom, start, isep, end := ret[1], ret[2], ret[3], ret[4] // convert from bed to chrom:start-end region so add 1 to start istart, err := strconv.Atoi(string(start)) if err != nil { log.Fatal(err) } if bytes.Equal(isep, []byte{'-'}) { istart-- } iend, err := strconv.Atoi(string(end)) if err != nil { log.Fatal(err) } return string(chrom), max(istart, 0), iend } func regionFromLine(line []byte) string { chrom, start, end := chromStartEndFromLine(line) // convert from bed to chrom:start-end region so add 1 to start return fmt.Sprintf("%s:%d-%d", chrom, start+1, end) } // when the user specified a Bed file of regions for coverage, this is used. func genFromBed(ch chan string, args dargs) { rdr, err := xopen.Ropen(args.Bed) pcheck(err) for { line, err := rdr.ReadBytes('\n') if err == io.EOF { break } pcheck(err) if len(line) == 0 { continue } region := regionFromLine(line) ch <- fmt.Sprintf(command, region, args.Q, args.MaxMeanDepth+2500, region, args.Bam) } close(ch) } func genCommands(args dargs) chan string { ch := make(chan string) if args.Bed != "" { go genFromBed(ch, args) return ch } go func() { // make sure step jives with windowsize otherwise we get WindowSize // where it doesn't have the right size step = max(1, step/args.WindowSize) * args.WindowSize rdr, err := xopen.Ropen(args.Reference + ".fai") pcheck(err) for { line, err := rdr.ReadString('\n') if err == io.EOF { break } pcheck(err) toks := strings.Split(line, "\t") chrom := toks[0] if args.Chrom != "" && chrom != args.Chrom { continue } length, err := strconv.Atoi(toks[1]) pcheck(err) for i := 0; i < length; i += step { region := fmt.Sprintf("%s:%d-%d", chrom, i+1, min(i+step, length)) ch <- fmt.Sprintf(command, region, args.Q, args.MaxMeanDepth+2500, region, args.Bam) } } close(ch) }() return ch } // Main is run from the dispatcher func Main() { args := dargs{WindowSize: 250, MaxMeanDepth: 0, MinCov: 4, Q: 1} p := arg.MustParse(&args) if args.Prefix == "" { p.Fail("you must specify an output prefix") } runtime.GOMAXPROCS(args.Processes) run(args) os.Exit(exitCode) } type ipos struct { start int } func mean(sl []int, l int) (avg float64) { if len(sl) == 0 || l == 0 { return 0 } for _, v := range sl { avg += float64(v) } return avg / float64(l) } func getStats(fa *faidx.Faidx, chrom string, start, end int) string { if fa == nil { return "" } st, err := fa.Stats(chrom, start, end) if err != nil { log.Println(err) } return fmt.Sprintf("\t%.3g\t%.3g\t%.3g", st.GC, st.CpG, st.Masked) } func getPosDepth(rline string) (int, int, error) { // toks starts after chrom. so [0] is pos and [1] is depth. toks := strings.SplitN(rline, "\t", 2) pos, err := strconv.Atoi(toks[0]) if err != nil { return 0, 0, err } pos-- if len(toks[1]) > 1 && toks[1][len(toks[1])-1] == '\n' { toks[1] = toks[1][:len(toks[1])-1] } depth, err := strconv.Atoi(toks[1]) if err != nil { return 0, 0, err } return pos, depth, nil } func getCovClass(depth, minCov, maxMeanDepth int) string { if depth == 0 { return "NO_COVERAGE" } if depth < minCov { return "LOW_COVERAGE" } if maxMeanDepth > 0 && depth >= maxMeanDepth { return "EXCESSIVE_COVERAGE" } return "CALLABLE" } func run(args dargs) { callback := func(r io.Reader, w io.WriteCloser) error { rdr := bufio.NewReader(r) wtr := bufio.NewWriter(w) defer w.Close() defer wtr.Flush() var fa *faidx.Faidx var err error if args.Stats { fa, err = faidx.New(args.Reference) defer fa.Close() if err != nil { return err } } depthCache := make([]int, 0, args.WindowSize) var depth, pos int region, err := rdr.ReadBytes('\n') if err != nil { return err } // this is the bounds of the region echo'd before the samtools depth call. chrom, regionStart, regionEnd := chromStartEndFromLine(region) lastWindow := max(0, regionStart/args.WindowSize) var cache [2]ipos cache[0].start = regionStart - 1 cache[1].start = regionStart - 1 var lastCovClass string hdPath := fmt.Sprintf("%s.%s-%d-%d.tmp.depth.bed", args.Prefix, chrom, regionStart, regionEnd) fhHD, ferr := xopen.Wopen(hdPath) if ferr != nil { return ferr } caPath := fmt.Sprintf("%s.%s-%d-%d.tmp.callable.bed", args.Prefix, chrom, regionStart, regionEnd) fhCA, ferr := xopen.Wopen(caPath) if ferr != nil { return ferr } defer fhCA.Close() defer fhHD.Close() line, err := rdr.ReadString('\n') for err == nil { chrom = line[:strings.Index(line, "\t")] pos, depth, err = getPosDepth(line[len(chrom)+1:]) if err != nil { break } // if we have a full window... if pos/args.WindowSize != lastWindow { thisWindow := pos / args.WindowSize // print lastWindow along with any windows without any coverage. for iwindow := lastWindow; iwindow < thisWindow; iwindow++ { s := max(regionStart, iwindow*args.WindowSize) e := min(regionEnd, (iwindow+1)*args.WindowSize) stats := getStats(fa, chrom, s, e) // only the 1st loop of this will have values in depthCache. Others will have 0. fhHD.WriteString(fmt.Sprintf("%s\t%d\t%d\t%.4g%s\n", chrom, s, e, mean(depthCache, e-s), stats)) depthCache = depthCache[:0] } lastWindow = thisWindow } depthCache = append(depthCache, depth) covClass := getCovClass(depth, args.MinCov, args.MaxMeanDepth) // check for a gap or a change in the coverage class. if covClass != lastCovClass || pos != cache[1].start+1 { if lastCovClass != "" { fhCA.WriteString(fmt.Sprintf("%s\t%d\t%d\t%s\n", chrom, cache[0].start, cache[1].start+1, lastCovClass)) } // also fill in block without any coverage. if pos != cache[1].start+1 { fhCA.WriteString(fmt.Sprintf("%s\t%d\t%d\t%s\n", chrom, cache[1].start+1, pos, "NO_COVERAGE")) } lastCovClass = covClass cache[0] = ipos{pos} cache[1] = ipos{pos} } else { cache[1].start = pos } line, err = rdr.ReadString('\n') } if cache[0].start != -1 && lastCovClass != "" { fhCA.WriteString(fmt.Sprintf("%s\t%d\t%d\t%s\n", chrom, cache[0].start, cache[1].start+1, lastCovClass)) } if len(depthCache) > 0 { s := pos / args.WindowSize * args.WindowSize if s < regionEnd { s := max(s, regionStart) e := min(regionEnd, s+args.WindowSize) stats := getStats(fa, chrom, s, e) fhHD.WriteString(fmt.Sprintf("%s\t%d\t%d\t%.4g%s\n", chrom, s, e, mean(depthCache, e-s), stats)) depthCache = depthCache[:0] // set position to end here so we don't output the same position below. pos = e } } // we didn't get data for the full region, so it must end in no-coverage. if cache[1].start+1 < regionEnd { // If we had regions within section if cache[1].start != -1 { fhCA.WriteString(fmt.Sprintf("%s\t%d\t%d\tNO_COVERAGE\n", chrom, cache[1].start+1, regionEnd)) // otherwise the whole region is NO_COVERAGE } else { fhCA.WriteString(fmt.Sprintf("%s\t%d\t%d\tNO_COVERAGE\n", chrom, regionStart, regionEnd)) } for ds := max(regionStart, pos) / args.WindowSize * args.WindowSize; ds < regionEnd && pos < regionEnd; ds += args.WindowSize { // keep de calc first. de := min(regionEnd, ds+args.WindowSize) s := max(ds, regionStart) stats := getStats(fa, chrom, s, de) fhHD.WriteString(fmt.Sprintf("%s\t%d\t%d\t%.4g%s\n", chrom, s, de, mean(depthCache, de-s), stats)) depthCache = depthCache[:0] } } wtr.WriteString(caPath + "\n") wtr.WriteString(hdPath + "\n") wtr.Flush() return w.Close() } cancel := make(chan bool) defer close(cancel) var stdout io.Writer if args.stdout == nil { stdout = bufio.NewWriter(os.Stdout) } else { stdout = args.stdout } type flushable interface { Flush() error } if s, ok := stdout.(flushable); ok { defer s.Flush() } chrom := "" if args.Chrom != "" { chrom = "." + args.Chrom } fhca, err := xopen.Wopen(fmt.Sprintf("%s%s.callable.bed", args.Prefix, chrom)) pcheck(err) fhhd, err := xopen.Wopen(fmt.Sprintf("%s%s.depth.bed", args.Prefix, chrom)) pcheck(err) defer fhca.Flush() defer fhhd.Flush() opts := process.Options{Retries: 1, CallBack: callback, Ordered: args.Ordered} for cmd := range process.Runner(genCommands(args), cancel, &opts) { if ex := cmd.ExitCode(); ex != 0 && cmd.Err != io.EOF { c := color.New(color.BgRed).Add(color.Bold) fmt.Fprintf(os.Stderr, "%s\n", c.SprintFunc()(fmt.Sprintf("ERROR with command: %s", cmd))) exitCode = max(exitCode, ex) } if cmd.Err == io.EOF { continue } caPath, err := cmd.ReadString('\n') if err != nil { log.Println(cmd.CmdStr, err, cmd.Err) } caSrc, err := xopen.Ropen(strings.TrimSpace(caPath)) pcheck(err) io.Copy(fhca, caSrc) os.Remove(strings.TrimSpace(caPath)) hdPath, err := cmd.ReadString('\n') if err != nil { log.Println(err) } hdSrc, err := xopen.Ropen(strings.TrimSpace(hdPath)) pcheck(err) io.Copy(fhhd, hdSrc) os.Remove(strings.TrimSpace(hdPath)) cmd.Cleanup() } fhca.Flush() fhca.Close() fhhd.Flush() fhhd.Close() } ================================================ FILE: depth/functional-test.sh ================================================ #!/bin/bash test -e ssshtest || wget -q https://raw.githubusercontent.com/ryanlayer/ssshtest/master/ssshtest . ssshtest set -uo pipefail go build -o goleft ../cmd/goleft/goleft.go check_with_fai_bt() { fai=$1 bed=$2 v=$(awk '{ print $1"\t"0"\t"$2 }' $fai | bedtools subtract -b - -a $bed && awk '{ print $1"\t"0"\t"$2 }' $fai | bedtools subtract -a - -b $bed) echo -e "$v" } check_with_bed_bt() { v=$(bedtools subtract -a $1 -b $2 && bedtools subtract -a $2 -b $1) echo -e "$v" } check_uniq() { a=$(cat $1 | wc -l) b=$(uniq $1 | wc -l) if [[ "$a" != "$b" ]]; then echo "DUPLICATE LINES in $1: $a $b" return fi if [[ "$#" == "2" ]]; then echo "OK" return fi c=$(cut -f 1-3 $1 | sort -u | wc -l) if [[ "$a" != "$c" ]]; then echo "DUPLICATE regions in $1: $a $c" return fi echo "OK" } export -f check_with_fai_bt export -f check_with_bed_bt run check_wgs ./goleft depth -Q 1 --ordered --windowsize 100 --stats --prefix x --reference test/hg19.fa test/t.bam assert_exit_code 0 assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.depth.bed)" "" assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.callable.bed)" "" assert_equal "$(check_uniq x.depth.bed)" "OK" assert_equal "$(check_uniq x.callable.bed)" "OK" run compare_to_samtools_100 python test/cmp.py x.depth.bed test/t.bam assert_exit_code 0 run check_wgs_big_window ./goleft depth -Q 1 --ordered --windowsize 1000000000 --stats --prefix x --reference test/hg19.fa test/t.bam assert_exit_code 0 assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.depth.bed)" "" assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.callable.bed)" "" assert_equal "$(check_uniq x.depth.bed)" "OK" assert_equal "$(check_uniq x.callable.bed)" "OK" for w in 55 60 71 13 2001; do run check_wgs_big_window$w ./goleft depth -Q 1 --ordered --windowsize $w --stats --prefix x --reference test/hg19.fa test/t.bam assert_exit_code 0 assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.depth.bed)" "" assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.callable.bed)" "" assert_equal "$(check_uniq x.depth.bed)" "OK" assert_equal "$(check_uniq x.callable.bed)" "OK" done run check_bed ./goleft depth --bed test/windows.bed -Q 1 --ordered --windowsize 10 --stats --prefix x --reference test/hg19.fa test/t.bam assert_exit_code 0 assert_equal "$(check_with_bed_bt x.depth.bed test/windows.bed)" "" assert_equal "$(check_with_bed_bt x.callable.bed test/windows.bed)" "" assert_equal "$(check_uniq x.depth.bed bed)" "OK" assert_equal "$(check_uniq x.callable.bed bed)" "OK" run check_bed_big_window ./goleft depth --bed test/windows.bed -Q 1 --ordered --windowsize 1000000 --stats --prefix x --reference test/hg19.fa test/t.bam assert_exit_code 0 assert_equal "$(check_with_bed_bt x.depth.bed test/windows.bed)" "" assert_equal "$(check_with_bed_bt x.callable.bed test/windows.bed)" "" assert_equal "$(check_uniq x.depth.bed bed)" "OK" assert_equal "$(check_uniq x.callable.bed bed)" "OK" run compare_to_samtools_big_window python test/cmp.py x.depth.bed test/t.bam for w in 50 55 60 71 13 2002; do run check_bed_window$w ./goleft depth --bed test/windows.bed -Q 1 --ordered --windowsize $w --stats --prefix x --reference test/hg19.fa test/t.bam assert_exit_code 0 assert_equal "$(check_with_bed_bt x.depth.bed test/windows.bed)" "" assert_equal "$(check_with_bed_bt x.callable.bed test/windows.bed)" "" assert_equal "$(check_uniq x.depth.bed bed)" "OK" assert_equal "$(check_uniq x.callable.bed bed)" "OK" run compare_to_samtools_directly$w python test/cmp.py x.depth.bed test/t.bam done assert_exit_code 0 run check_empty ./goleft depth --windowsize 10 --q 1 --mincov 4 --reference test/hg19.fa --processes 1 --stats --prefix x test/t-empty.bam assert_exit_code 0 assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.depth.bed)" "" assert_equal "$(check_with_fai_bt test/hg19.fa.fai x.callable.bed)" "" assert_equal "$(check_uniq x.depth.bed)" "OK" assert_equal "$(check_uniq x.callable.bed)" "OK" run check_empty_window ./goleft depth --bed test/windows.bed --windowsize 10 --q 1 --mincov 4 --reference test/hg19.fa --processes 1 --stats --prefix x test/t-empty.bam assert_exit_code 0 assert_equal "$(check_with_bed_bt x.depth.bed test/windows.bed)" "" assert_equal "$(check_with_bed_bt x.callable.bed test/windows.bed)" "" assert_equal "$(check_uniq x.depth.bed bed)" "OK" assert_equal "$(check_uniq x.callable.bed bed)" "OK" run check_hla ./goleft depth -r test/fake.fa --prefix /tmp/xx test/hla.bam assert_exit_code 0 echo -e "\nFINISHED OK" ================================================ FILE: depth/intervals.go ================================================ package depth import ( "bufio" "io" "github.com/biogo/store/interval" "github.com/brentp/xopen" ) // Integer-specific intervals type irange struct { Start, End int UID uintptr } func (i irange) Overlap(b interval.IntRange) bool { // Half-open interval indexing. return i.End > b.Start && i.Start < b.End } func (i irange) ID() uintptr { return i.UID } func (i irange) Range() interval.IntRange { return interval.IntRange{i.Start, i.End} } // Overlaps checks for overlaps without pulling intervals from the tree. func Overlaps(tree *interval.IntTree, start, end int) bool { if tree == nil { return false } q := irange{Start: start, End: end, UID: uintptr(tree.Len())} overlaps := false tree.DoMatching(func(iv interval.IntInterface) bool { overlaps = true return true }, q) return overlaps } // ReadTree takes a bed file and returns map of trees. func ReadTree(ps ...string) map[string]*interval.IntTree { tree := make(map[string]*interval.IntTree, 10) k := 0 for _, p := range ps { if p == "" { continue } r, err := xopen.Ropen(p) if err != nil { panic(err) } defer r.Close() br := bufio.NewReader(r) for { line, err := br.ReadBytes('\n') if err == io.EOF { break } if err != nil { panic(err) } chrom, start, end := chromStartEndFromLine(line) if start >= end { continue } if _, ok := tree[chrom]; !ok { tree[chrom] = &interval.IntTree{} } if err := tree[chrom].Insert(irange{start, end, uintptr(k)}, false); err != nil { panic(err) } k += 1 } } return tree } ================================================ FILE: depth/test/cmp.py ================================================ import subprocess as sp import sys goleft_bed = sys.argv[1] bam = sys.argv[2] for toks in (l.rstrip().split("\t") for l in open(goleft_bed)): cmd = "samtools depth -a -Q 1 -r '%s:%d-%s' %s | awk '{s+=$3}END{if(NR==0){print 0}else{print s/%d}}'" % (toks[0], int(toks[1]) + 1, toks[2], bam, int(toks[2]) - int(toks[1])) out = sp.check_output(cmd, shell=True).strip() expected = float(toks[3]) if abs(expected - float(out.strip())) > 0.5: print("ERROR") print(float(out.strip()), expected) print(cmd) sys.exit(1) ================================================ FILE: depth/test/fake.fa ================================================ >HLA-A*01:01:01:01 GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG ACATCACGATG ================================================ FILE: depth/test/fake.fa.fai ================================================ HLA-A*01:01:01:01 16571 19 60 61 ================================================ FILE: depth/test/hg19.fa ================================================ >chrM GATCACAGGTCTATCACCCTATTAACCACTCACGGGAGCTCTCCATGCATTTGGTATTTT CGTCTGGGGGGTGTGCACGCGATAGCATTGCGAGACGCTGGAGCCGGAGCACCCTATGTC GCAGTATCTGTCTTTGATTCCTGCCTCATTCTATTATTTATCGCACCTACGTTCAATATT ACAGGCGAACATACCTACTAAAGTGTGTTAATTAATTAATGCTTGTAGGACATAATAATA ACAATTGAATGTCTGCACAGCCGCTTTCCACACAGACATCATAACAAAAAATTTCCACCA AACCCCCCCCTCCCCCCGCTTCTGGCCACAGCACTTAAACACATCTCTGCCAAACCCCAA AAACAAAGAACCCTAACACCAGCCTAACCAGATTTCAAATTTTATCTTTAGGCGGTATGC ACTTTTAACAGTCACCCCCCAACTAACACATTATTTTCCCCTCCCACTCCCATACTACTA ATCTCATCAATACAACCCCCGCCCATCCTACCCAGCACACACACACCGCTGCTAACCCCA TACCCCGAACCAACCAAACCCCAAAGACACCCCCCACAGTTTATGTAGCTTACCTCCTCA AAGCAATACACTGAAAATGTTTAGACGGGCTCACATCACCCCATAAACAAATAGGTTTGG TCCTAGCCTTTCTATTAGCTCTTAGTAAGATTACACATGCAAGCATCCCCGTTCCAGTGA GTTCACCCTCTAAATCACCACGATCAAAAGGGACAAGCATCAAGCACGCAGCAATGCAGC TCAAAACGCTTAGCCTAGCCACACCCCCACGGGAAACAGCAGTGATTAACCTTTAGCAAT AAACGAAAGTTTAACTAAGCTATACTAACCCCAGGGTTGGTCAATTTCGTGCCAGCCACC GCGGTCACACGATTAACCCAAGTCAATAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCC CCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAG ACTACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTA GATACCCCACTATGCTTAGCCCTAAACCTCAACAGTTAAATCAACAAAACTGCTCGCCAG AACACTACGAGCCACAGCTTAAAACTCAAAGGACCTGGCGGTGCTTCATATCCCTCTAGA GGAGCCTGTTCTGTAATCGATAAACCCCGATCAACCTCACCACCTCTTGCTCAGCCTATA TACCGCCATCTTCAGCAAACCCTGATGAAGGCTACAAAGTAAGCGCAAGTACCCACGTAA AGACGTTAGGTCAAGGTGTAGCCCATGAGGTGGCAAGAAATGGGCTACATTTTCTACCCC AGAAAACTACGATAGCCCTTATGAAACTTAAGGGTCGAAGGTGGATTTAGCAGTAAACTG AGAGTAGAGTGCTTAGTTGAACAGGGCCCTGAAGCGCGTACACACCGCCCGTCACCCTCC TCAAGTATACTTCAAAGGACATTTAACTAAAACCCCTACGCATTTATATAGAGGAGACAA GTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGACGAACCAGAGTGTAGCTTAACA CAAAGCACCCAACTTACACTTAGGAGATTTCAACTTAACTTGACCGCTCTGAGCTAAACC TAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAAT AAAGTATAGGCGATAGAAATTGAAACCTGGCGCAATAGATATAGTACCGCAAGGGAAAGA TGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATG AATTAACTAGAAATAACTTTGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAG CTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTA TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTT AGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTTAG TCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATT TAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACC CACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTA TCACCCTATAGAAGAACTAATGTTAGTATAAGTAACATGAAAACATTCTCCTCCGCATAA GCCTGCGTCAGATCAAAACACTGAACTGACAATTAACAGCCCAATATCTACAATCAACCA ACAAGTCATTATTACCCTCACTGTCAACCCAACACAGGCATGCTCATAAGGAAAGGTTAA AAAAAGTAAAAGGAACTCGGCAAACCTTACCCCGCCTGTTTACCAAAAACATCACCTCTA GCATCACCAGTATTAGAGGCACCGCCTGCCCAGTGACACATGTTTAACGGCCGCGGTACC CTAACCGTGCAaaggtagcataatcacttgttccttaaatagggacctgtatgaatggct ccacgagggttcagctgtctcttacttttaaccagtgaaattgacctgcccgtgaagagg cgggcatgacacagcaagacgagaagaccctatggagctttaatttaTTAATGCAAACAG TACCTAACAAACCCACAGGTCCTAAACTACCAAACCTGCATTAAAAATTTCGGTTGGGGC GACCTCGGAGCAGAACCCAACCTCCGAGCAGTACATGCTAAGACTTCACCAGTCAAAGCG AACTACTATACTCAATTGATCCAATAACTTGACCAACGGAACAAGTTACCCTAGGGATAA CAGCGCAATCCTATTCTAGAGTCCATATCAACAATAGGGTTTACGACCTCGATGTTGGAT CAGGACATCCCGATGGTGCAGCCGCTATTAAAGGTTCGTTTGTTCAACGATTAAAGTCCT ACGTGATCTGAGTTCAGACCGGAGTAATCCAGGTCGGTTTCTATCTACTTCAAATTCCTC CCTGTACGAAAGGACAAGAGAAATAAGGCCTACTTCACAAAGCGCCTTCCCCCGTAAATG ATATCATCTCAACTTAGTATTATACCCACACCCACCCAAGAACAGGGTTTgttaagatgg cagagcccggtaatcgcataaaacttaaaactttacagtcagaggttcaattcctcttct taacaacaTACCCATGGCCAACCTCCTACTCCTCATTGTACCCATTCTAATCGCAATGGC ATTCCTAATGCTTACCGAACGAAAAATTCTAGGCTATATACAACTACGCAAAGGCCCCAA CGTTGTAGGCCCCTACGGGCTACTACAACCCTTCGCTGACGCCATAAAACTCTTCACCAA AGAGCCCCTAAAACCCGCCACATCTACCATCACCCTCTACATCACCGCCCCGACCTTAGC TCTCACCATCGCTCTTCTACTATGAACCCCCCTCCCCATACCCAACCCCCTGGTCAACCT CAACCTAGGCCTCCTATTTATTCTAGCCACCTCTAGCCTAGCCGTTTACTCAATCCTCTG ATCAGGGTGAGCATCAAACTCAAACTACGCCCTGATCGGCGCACTGCGAGCAGTAGCCCA AACAATCTCATATGAAGTCACCCTAGCCATCATTCTACTATCAACATTACTAATAAGTGG CTCCTTTAACCTCTCCACCCTTATCACAACACAAGAACACCTCTGATTACTCCTGCCATC ATGACCCTTGGCCATAATATGATTTATCTCCACACTAGCAGAGACCAACCGAACCCCCTT CGACCTTGCCGAAGGGGAGTCCGAACTAGTCTCAGGCTTCAACATCGAATACGCCGCAGG CCCCTTCGCCCTATTCTTCATAGCCGAATACACAAACATTATTATAATAAACACCCTCAC CACTACAATCTTCCTAGGAACAACATATGACGCACTCTCCCCTGAACTCTACACAACATA TTTTGTCACCAAGACCCTACTTCTAACCTCCCTGTTCTTATGAATTCGAACAGCATACCC CCGATTCCGCTACGACCAACTCATACACCTCCTATGAAAAAACTTCCTACCACTCACCCT AGCATTACTTATATGATATGTCTCCATACCCATTACAATCTCCAGCATTCCCCCTCAAAC CTAAGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACC CCCTTATTTctaggactatgagaatcgaacccatccctgagaatccaaaattctccgtgc cacctatcacaccccatcctaAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCC GAAAATGTTGGTTATACCCTTCCCGTACTAATTAATCCCCTGGCCCAACCCGTCATCTAC TCTACCATCTTTGCAGGCACACTCATCACAGCGCTAAGCTCGCACTGATTTTTTACCTGA GTAGGCCTAGAAATAAACATGCTAGCTTTTATTCCAGTTCTAACCAAAAAAATAAACCCT CGTTCCACAGAAGCTGCCATCAAGTATTTCCTCACGCAAGCAACCGCATCCATAATCCTT CTAATAGCTATCCTCTTCAACAATATACTCTCCGGACAATGAACCATAACCAATACTACC AATCAATACTCATCATTAATAATCATAATGGCTATAGCAATAAAACTAGGAATAGCCCCC TTTCACTTCTGAGTCCCAGAGGTTACCCAAGGCACCCCTCTGACATCCGGCCTGCTTCTT CTCACATGACAAAAACTAGCCCCCATCTCAATCATATACCAAATCTCTCCCTCACTAAAC GTAAGCCTTCTCCTCACTCTCTCAATCTTATCCATCATAGCAGGCAGTTGAGGTGGATTA AACCAAACCCAGCTACGCAAAATCTTAGCATACTCCTCAATTACCCACATAGGATGAATA ATAGCAGTTCTACCGTACAACCCTAACATAACCATTCTTAATTTAACTATTTATATTATC CTAACTACTACCGCATTCCTACTACTCAACTTAAACTCCAGCACCACGACCCTACTACTA TCTCGCACCTGAAACAAGCTAACATGACTAACACCCTTAATTCCATCCACCCTCCTCTCC CTAGGAGGCCTGCCCCCGCTAACCGGCTTTTTGCCCAAATGGGCCATTATCGAAGAATTC ACAAAAAACAATAGCCTCATCATCCCCACCATCATAGCCACCATCACCCTCCTTAACCTC TACTTCTACCTACGCCTAATCTACTCCACCTCAATCACACTACTCCCCATATCTAACAAC GTAAAAATAAAATGACAGTTTGAACATACAAAACCCACCCCATTCCTCCCCACACTCATC GCCCTTACCACGCTACTCCTACCTATCTCCCCTTTTATACTAATAATCTTATAGAAATTT AGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTGCAATACTTAATTTCTG CAACAGCTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTA ATTAAGCTAAGCCCTTACTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGC TAAGCACCCTAATCAACTGGCTTCAATCTACTTCTCCCGCCGCCGGGAAAAAAGGCGGGA GAAGCCCCGGCAGGTTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAATCACCT CGGAGCTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCACTC AGCCATTTTACCTCACCCCCACTGATGTTCGCCGACCGTTGACTATTCTCTACAAACCAC AAAGACATTGGAACACTATACCTATTATTCGGCGCATGAGCTGGAGTCCTAGGCACAGCT CTAAGCCTCCTTATTCGAGCCGAGCTGGGCCAGCCAGGCAACCTTCTAGGTAACGACCAC ATCTACAACGTTATCGTCACAGCCCATGCATTTGTAATAATCTTCTTCATAGTAATACCC ATCATAATCGGAGGCTTTGGCAACTGACTAGTTCCCCTAATAATCGGTGCCCCCGATATG GCGTTTCCCCGCATAAACAACATAAGCTTCTGACTCTTACCTCCCTCTCTCCTACTCCTG CTCGCATCTGCTATAGTGGAGGCCGGAGCAGGAACAGGTTGAACAGTCTACCCTCCCTTA GCAGGGAACTACTCCCACCCTGGAGCCTCCGTAGACCTAACCATCTTCTCCTTACACCTA GCAGGTGTCTCCTCTATCTTAGGGGCCATCAATTTCATCACAACAATTATCAATATAAAA CCCCCTGCCATAACCCAATACCAAACGCCCCTCTTCGTCTGATCCGTCCTAATCACAGCA GTCCTACTTCTCCTATCTCTCCCAGTCCTAGCTGCTGGCATCACTATACTACTAACAGAC CGCAACCTCAACACCACCTTCTTCGACCCCGCCGGAGGAGGAGACCCCATTCTATACCAA CACCTATTCTGATTTTTCGGTCACCCTGAAGTTTATATTCTTATCCTACCAGGCTTCGGA ATAATCTCCCATATTGTAACTTACTACTCCGGAAAAAAAGAACCATTTGGATACATAGGT ATGGTCTGAGCTATGATATCAATTGGCTTCCTAGGGTTTATCGTGTGAGCACACCATATA TTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATC GCTATCCCCACCGGCGTCAAAGTATTTAGCTGACTCGCCACACTCCACGGAAGCAATATG AAATGATCTGCTGCAGTGCTCTGAGCCCTAGGATTCATCTTTCTTTTCACCGTAGGTGGC CTGACTGGCATTGTATTAGCAAACTCATCACTAGACATCGTACTACACGACACGTACTAC GTTGTAGCTCACTTCCACTATGTCCTATCAATAGGAGCTGTATTTGCCATCATAGGAGGC TTCATTCACTGATTTCCCCTATTCTCAGGCTACACCCTAGACCAAACCTACGCCAAAATC CATTTCACTATCATATTCATCGGCGTAAATCTAACTTTCTTCCCACAACACTTTCTCGGC CTATCCGGAATGCCCCGACGTTACTCGGACTACCCCGATGCATACACCACATGAAACATC CTATCATCTGTAGGCTCATTCATTTCTCTAACAGCAGTAATATTAATAATTTTCATGATT TGAGAAGCCTTCGCTTCGAAGCGAAAAGTCCTAATAGTAGAAGAACCCTCCATAAACCTG GAGTGACTATATGGATGCCCCCCACCCTACCACACATTCGAAGAACCCGTATACATAAAA TCTAGACAaaaaaggaaggaatcgaaccccccaaagctggtttcaagccaaccccatggc ctccatgactttttcAAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAA TTATAGGCTAAATCCTATATATCTTAATGGCACATGCAGCGCAAGTAGGTCTACAAGACG CTACTTCCCCTATCATAGAAGAGCTTATCACCTTTCATGATCACGCCCTCATAATCATTT TCCTTATCTGCTTCCTAGTCCTGTATGCCCTTTTCCTAACACTCACAACAAAACTAACTA ATACTAACATCTCAGACGCTCAGGAAATAGAAACCGTCTGAACTATCCTGCCCGCCATCA TCCTAGTCCTCATCGCCCTCCCATCCCTACGCATCCTTTACATAACAGACGAGGTCAACG ATCCCTCCCTTACCATCAAATCAATTGGCCACCAATGGTACTGAACCTACGAGTACACCG ACTACGGCGGACTAATCTTCAACTCCTACATACTTCCCCCATTATTCCTAGAACCAGGCG ACCTGCGACTCCTTGACGTTGACAATCGAGTAGTACTCCCGATTGAAGCCCCCATTCGTA TAATAATTACATCACAAGACGTCTTGCACTCATGAGCTGTCCCCACATTAGGCTTAAAAA CAGATGCAATTCCCGGACGTCTAAACCAAACCACTTTCACCGCTACACGACCGGGGGTAT ACTACGGTCAATGCTCTGAAATCTGTGGAGCAAACCACAGTTTCATGCCCATCGTCCTAG AATTAATTCCCCTAAAAATCTTTGAAATAGGGCCCGTATTTACCCTATAGCACCCCCTCT ACCCCCTCTAGAGCCCACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAA GAGAACCAACACCTCTTTACAGTGAAATGCCCCAACTAAATACTACCGTATGGCCCACCA TAATTACCCCCATACTCCTTACACTATTCCTCATCACCCAACTAAAAATATTAAACACAA ACTACCACCTACCTCCCTCACCAAAGCCCATAAAAATAAAAAATTATAACAAACCCTGAG AACCAAAATGAACGAAAATCTGTTCGCTTCATTCATTGCCCCCACAATCCTAGGCCTACC CGCCGCAGTACTGATCATTCTATTTCCCCCTCTATTGATCCCCACCTCCAAATATCTCAT CAACAACCGACTAATCACCACCCAACAATGACTAATCAAACTAACCTCAAAACAAATGAT AGCCATACACAACACTAAAGGACGAACCTGATCTCTTATACTAGTATCCTTAATCATTTT TATTGCCACAACTAACCTCCTCGGACTCCTGCCTCACTCATTTACACCAACCACCCAACT ATCTATAAACCTAGCCATGGCCATCCCCTTATGAGCGGGCGCAGTGATTATAGGCTTTCG CTCTAAGATTAAAAATGCCCTAGCCCACTTCTTACCACAAGGCACACCTACACCCCTTAT CCCCATACTAGTTATTATCGAAACCATCAGCCTACTCATTCAACCAATAGCCCTGGCCGT ACGCCTAACCGCTAACATTACTGCAGGCCACCTACTCATGCACCTAATTGGAAGCGCCAC CCTAGCAATATCAACCATTAACCTTCCCTCTACACTTATCATCTTCACAATTCTAATTCT ACTGACTATCCTAGAAATCGCTGTCGCCTTAATCCAAGCCTACGTTTTCACACTTCTAGT AAGCCTCTACCTGCACGACAACACATAATGACCCACCAATCACATGCCTATCATATAGTA AAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTA GCCATGTGATTTCACTTCCACTCCATAACGCTCCTCATACTAGGCCTACTAACCAACACA CTAACCATATACCAATGGTGGCGCGATGTAACACGAGAAAGCACATACCAAGGCCACCAC ACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTT TTTTTCTTCGCAGGATTTTTCTGAGCCTTTTACCACTCCAGCCTAGCCCCTACCCCCCAA CTAGGAGGGCACTGGCCCCCAACAGGCATCACCCCGCTAAATCCCCTAGAAGTCCCACTC CTAAACACATCCGTATTACTCGCATCAGGAGTATCAATCACCTGAGCTCACCATAGTCTA ATAGAAAACAACCGAAACCAAATAATTCAAGCACTGCTTATTACAATTTTACTGGGTCTC TATTTTACCCTCCTACAAGCCTCAGAGTACTTCGAGTCTCCCTTCACCATTTCCGACGGC ATCTACGGCTCAACATTTTTTGTAGCCACAGGCTTCCACGGACTTCACGTCATTATTGGC TCAACTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACAT CACTTTGGCTTCGAAGCCGCCGCCTGATACTGGCATTTTGTAGATGTGGTTTGACTATTT CTGTATGTCTCCATCTATTGATGAGGGTCTTACTCTTTTAGTATAAATAGTACCGTTAAC TTCCAATTAACTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTA ATAATCAACACCCTCCTAGCCTTACTACTAATAATTATTACATTTTGACTACCACAACTC AACGGCTACATAGAAAAATCCACCCCTTACGAGTGCGGCTTCGACCCTATATCCCCCGCC CGCGTCCCTTTCTCCATAAAATTCTTCTTAGTAGCTATTACCTTCTTATTATTTGATCTA GAAATTGCCCTCCTTTTACCCCTACCATGAGCCCTACAAACAACTAACCTGCCACTAATA GTTATGTCATCCCTCTTATTAATCATCATCCTAGCCCTAAGTCTGGCCTATGAGTGACTA CAAAAAGGATTAGACTGAGCCGAATTGGTATATAGTTTAAACAAAACGAATGATTTCGAC TCATTAAATTATGATAATCATATTTACCAAATGCCCCTCATTTACATAAATATTATACTA GCATTTACCATCTCACTTCTAGGAATACTAGTATATCGCTCACACCTCATATCCTCCCTA CTATGCCTAGAAGGAATAATACTATCGCTGTTCATTATAGCTACTCTCATAACCCTCAAC ACCCACTCCCTCTTAGCCAATATTGTGCCTATTGCCATACTAGTCTTTGCCGCCTGCGAA GCAGCGGTGGGCCTAGCCCTACTAGTCTCAATCTCCAACACATATGGCCTAGACTACGTA CATAACCTAAACCTACTCCAATGCTAAAACTAATCGTCCCAACAATTATATTACTACCAC TGACATGACTTTCCAAAAAGCACATAATTTGAATCAACACAACCACCCACAGCCTAATTA TTAGCATCATCCCCCTACTATTTTTTAACCAAATCAACAACAACCTATTTAGCTGTTCCC CAACCTTTTCCTCCGACCCCCTAACAACCCCCCTCCTAATACTAACTACCTGACTCCTAC CCCTCACAATCATGGCAAGCCAACGCCACTTATCCAGCGAACCACTATCACGAAAAAAAC TCTACCTCTCTATACTAATCTCCCTACAAATCTCCTTAATTATAACATTCACAGCCACAG AACTAATCATATTTTATATCTTCTTCGAAACCACACTTATCCCCACCTTGGCTATCATCA CCCGATGAGGCAACCAGCCAGAACGCCTGAACGCAGGCACATACTTCCTATTCTACACCC TAGTAGGCTCCCTTCCCCTACTCATCGCACTAATTTACACTCACAACACCCTAGGCTCAC TAAACATTCTACTACTCACTCTCACTGCCCAAGAACTATCAAACTCCTGAGCCAACAACT TAATATGACTAGCTTACACAATAGCTTTTATAGTAAAGATACCTCTTTACGGACTCCACT TATGACTCCCTAAAGCCCATGTCGAAGCCCCCATCGCTGGGTCAATAGTACTTGCCGCAG TACTCTTAAAACTAGGCGGCTATGGTATAATACGCCTCACACTCATTCTCAACCCCCTGA CAAAACACATAGCCTACCCCTTCCTTGTACTATCCCTATGAGGCATAATTATAACAAGCT CCATCTGCCTACGACAAACAGACCTAAAATCGCTCATTGCATACTCTTCAATCAGCCACA TAGCCCTCGTAGTAACAGCCATTCTCATCCAAACCCCCTGAAGCTTCACCGGCGCAGTCA TTCTCATAATCGCCCACGGACTCACATCCTCATTACTATTCTGCCTAGCAAACTCAAACT ACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCAC TAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTA ACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCC TACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAA CACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAA ACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCA TTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAAACATCAGATTGTGAATCTGACA ACAGAGGCTTACGACCCCTTATTTACCGAGAAAGCTCACAAGAACTGCTAACTCATGCCC CCATGTCTAACAACATGGCTTTCTCAACTTTTAAAGGATAACAGCTATCCATTGGTCTTA GGCCCCAAAAATTTTGGTGCAACTCCAAATAAAAGTAATAACCATGCACACTACTATAAC CACCCTAACCCTGACTTCCCTAATTCCCCCCATCCTTACCACCCTCGTTAACCCTAACAA AAAAAACTCATACCCCCATTATGTAAAATCCATTGTCGCATCCACCTTTATTATCAGTCT CTTCCCCACAACAATATTCATGTGCCTAGACCAAGAAGTTATTATCTCGAACTGACACTG AGCCACAACCCAAACAACCCAGCTCTCCCTAAGCTTCAAACTAGACTACTTCTCCATAAT ATTCATCCCTGTAGCATTGTTCGTTACATGGTCCATCATAGAATTCTCACTGTGATATAT AAACTCAGACCCAAACATTAATCAGTTCTTCAAATATCTACTCATTTTCCTAATTACCAT ACTAATCTTAGTTACCGCTAACAACCTATTCCAACTGTTCATCGGCTGAGAGGGCGTAGG AATTATATCCTTCTTGCTCATCAGTTGATGATACGCCCGAGCAGATGCCAACACAGCAGC CATTCAAGCAGTCCTATACAACCGTATCGGCGATATCGGTTTCATCCTCGCCTTAGCATG ATTTATCCTACACTCCAACTCATGAGACCCACAACAAATAGCCCTTCTAAACGCTAATCC AAGCCTCACCCCACTACTAGGCCTCCTCCTAGCAGCAGCAGGCAAATCAGCCCAATTAGG TCTCCACCCCTGACTCCCCTCAGCCATAGAAGGCCCCACCCCAGTCTCAGCCCTACTCCA CTCAAGCACTATAGTTGTAGCAGGAATCTTCTTACTCATCCGCTTCCACCCCCTAGCAGA AAATAGCCCACTAATCCAAACTCTAACACTATGCTTAGGCGCTATCACCACTCTGTTCGC AGCAGTCTGCGCCCTTACACAAAATGACATCAAAAAAATCGTAGCCTTCTCCACTTCAAG TCAACTAGGACTCATAATAGTTACAATCGGCATCAACCAACCACACCTAGCATTCCTGCA CATCTGTACCCACGCCTTCTTCAAAGCCATACTATTTATGTGCTCCGGGTCCATCATCCA CAACCTTAACAATGAACAAGATATTCGAAAAATAGGAGGACTACTCAAAACCATACCTCT CACTTCAACCTCCCTCACCATTGGCAGCCTAGCATTAGCAGGAATACCTTTCCTCACAGG TTTCTACTCCAAAGACCACATCATCGAAACCGCAAACATATCATACACAAACGCCTGAGC CCTATCTATTACTCTCATCGCTACCTCCCTGACAAGCGCCTATAGCACTCGAATAATTCT TCTCACCCTAACAGGTCAACCTCGCTTCCCCACCCTTACTAACATTAACGAAAATAACCC CACCCTACTAAACCCCATTAAACGCCTGGCAGCCGGAAGCCTATTCGCAGGATTTCTCAT TACTAACAACATTTCCCCCGCATCCCCCTTCCAAACAACAATCCCCCTCTACCTAAAACT CACAGCCCTCGCTGTCACTTTCCTAGGACTTCTAACAGCCCTAGACCTCAACTACCTAAC CAACAAACTTAAAATAAAATCCCCACTATGCACATTTTATTTCTCCAACATACTCGGATT CTACCCTAGCATCACACACCGCACAATCCCCTATCTAGGCCTTCTTACGAGCCAAAACCT GCCCCTACTCCTCCTAGACCTAACCTGACTAGAAAAGCTATTACCTAAAACAATTTCACA GCACCAAATCTCCACCTCCATCATCACCTCAACCCAAAAAGGCATAATTAAACTTTACTT CCTCTCTTTCTTCTTCCCACTCATCCTAACCCTACTCCTAATCACATAACCTATTCCCCC GAGCAATCTCAATTACAATATATACACCAACAAACAATGTTCAACCAGTAACCACTACTA ATCAACGCCCATAATCATACAAAGCCCCCGCACCAATAGGATCCTCCCGAATCAACCCTG ACCCCTCTCCTTCATAAATTATTCAGCTTCCTACACTATTAAAGTTTACCACAACCACCA CCCCATCATACTCTTTCACCCACAGCACCAATCCTACCTCCATCGCTAACCCCACTAAAA CACTCACCAAGACCTCAACCCCTGACCCCCATGCCTCAGGATACTCCTCAATAGCCATCG CTGTAGTATATCCAAAGACAACCATCATTCCCCCTAAATAAATTAAAAAAACTATTAAAC CCATATAACCTCCCCCAAAATTCAGAATAATAACACACCCGACCACACCGCTAACAATCA GTACTAAACCCCCATAAATAGGAGAAGGCTTAGAAGAAAACCCCACAAACCCCATTACTA AACCCACACTCAACAGAAACAAAGCATACATCATTATTCTCGCACGGACTACAACCACGA CCAATGATATGAAAAACCATCGTTGTATTTCAACTACAAGAACACCAATGACCCCAATAC GCAAAATTAACCCCCTAATAAAATTAATTAACCACTCATTCATCGACCTCCCCACCCCAT CCAACATCTCCGCATGATGAAACTTCGGCTCACTCCTTGGCGCCTGCCTGATCCTCCAAA TCACCACAGGACTATTCCTAGCCATACACTACTCACCAGACGCCTCAACCGCCTTTTCAT CAATCGCCCACATCACTCGAGACGTAAATTATGGCTGAATCATCCGCTACCTTCACGCCA ATGGCGCCTCAATATTCTTTATCTGCCTCTTCCTACACATCGGGCGAGGCCTATATTACG GATCATTTCTCTACTCAGAAACCTGAAACATCGGCATTATCCTCCTGCTTGCAACTATAG CAACAGCCTTCATAGGCTATGTCCTCCCGTGAGGCCAAATATCATTCTGAGGGGCCACAG TAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCT GAGGAGGCTACTCAGTAGACAGTCCCACCCTCACACGATTCTTTACCTTTCACTTCATCT TACCCTTCATTATTGCAGCCCTAGCAGCACTCCACCTCCTATTCTTGCACGAAACGGGAT CAAACAACCCCCTAGGAATCACCTCCCATTCCGATAAAATCACCTTCCACCCTTACTACA CAATCAAAGACGCCCTCGGCTTACTTCTCTTCCTTCTCTCCTTAATGACATTAACACTAT TCTCACCAGACCTCCTAGGCGACCCAGACAATTATACCCTAGCCAACCCCTTAAACACCC CTCCCCACATCAAGCCCGAATGATATTTCCTATTCGCCTACACAATTCTCCGATCCGTCC CTAACAAACTAGGAGGCGTCCTTGCCCTATTACTATCCATCCTCATCCTAGCAATAATCC CCATCCTCCATATATCCAAACAACAAAGCATAATATTTCGCCCACTAAGCCAATCACTTT ATTGACTCCTAGCCGCAGACCTCCTCATTCTAACCTGAATCGGAGGACAACCAGTAAGCT ACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCTAATCC TAATACCAACTATCTCCCTAATTGAAAACAAAATACTCAAATGGGCCTGTCCTTGTAGTA TAAACTAATACACCAGTCTTGTAAACCGGAGACGAAAACCTTTTTCCAAGGACAAATCAG AGAAAAAGTCTTTAACTCCACCATTAGCACCCAAAGCTAAGATTCTAATTTAAACTATTC TCTGTTCTTTCATGGGGAAGCAGATTTGGGTACCACCCAAGTATTGACTCACCCATCAAC AACCGCTATGTATTTCGTACATTACTGCCAGCCACCATGAATATTGTACGGTACCATAAA TACTTGACCACCTGTAGTACATAAAAACCCAACCCACATCAAACCCCCCCCCCCCATGCT TACAAGCAAGTACAGCAATCAACCTTCAACTATCACACATCAACTGCAACTCCAAAGCCA CCCCTCACCCACTAGGATACCAACAAACCTACCCACCCTTAACAGTACATAGTACATAAA GTCATTTACCGTACATAGCACATTACAGTCAAATCCCTTCTCGTCCCCATGGATGACCCC CCTCAGATAGGGGTCCCTTGACCACCATCCTCCGTGAAATCAATATCCCGCACAAGAGTG CTACTCTCCTCGCTCCGGGCCCATAACACTTGGGGGTAGCTAAAGTGAACTGTATCCGAC ATCTGGTTCCTACTTCAGGGCCATAAAGCCTAAATAGCCCACACGTTCCCCTTAAATAAG ACATCACGATG >chr22 gTATTTTCTccctggataatgaaataatctttaaatggcctgttaaattatgcttcaaaa tgacattgcgagaaatagtgccctccttttgccgtatttccaagttctagggtaattttt cctAACTCTTGTTTCAGGGAAGTCATTTGTTCTGCTGGCTCCACAGACTGACTCCCATGG GCACCCCCACGCTGCCCTTTTGACTTGAAGCATTCTGTATTGCTTAGCGATTCTTTCCTG TCTGCTCATATTTATAAATAAAGACGATGAGGCTCTAAGCTGAGCAGGGTGAAGAGCTGC CTAGCTTCAGCATTGTGGTGAGCTCTCAGTTTGACATTTTCTCTTGGTCCTCGAGATGGG GGCTGGATGAGGCGAGGTCTGCAGGCCAGCATCCTTGGGAGATCAGGGagggctgggcat ggggctgacatgcgatgtgtgcggtcacacagggccccacgcttgggtccatactctgct gtcactattttgaaattcttaatcatttatgaacaaggggccctgcatcttcagtttgca ccaagtcccacaatgatgtaggtggtcctgGCTGAGGGATAGATGCAAAGGAGACttttt tttgaggcagtttcattctgtcacccaggctggagtgcagtggtgcgatcacagcttact gcagcctcgccctccctggactcaggtgatcctcccacttcagcctcccaagtagctggg actacaggcacatgccccatgcccggctaattttttttttttttactttttaattttttt gtagagacaagctctcactatgtgacctcctgggttcaagtgatcctcccaccttggcct cttgaagcgctgggatacaggtgtgagccaccacgctcagcTGACTTTTTTGCTGGAGTC Atgagcactctcactgcccagctatgtgctggatttgggaactcaggtgaacaggaccac cccgTGCTCAAGGTCGTTCCCATCCTTTGTGCCCAGGGGTGGCGTGGGTGGAGAGGACAG GATGGGGAGTCACAACCCTGGCTCCAGAGCCCAGCCCTCCGGTCCCCCTCCCACCCAAGA CCCATCCCCAGAGCTGCCCACCCACCCCCCAAATCCCACCCAGGCCTGGTGCTATAAATG TTCTGTTCCCCGAGTAACCGGCCTATTTGCTCCCTTCCTCTACCTCCCCTTCCCCAAATT AATTACTAGCTCTTTCTTCAAGCTGTGGAGGCAGAcatagcacctccgagttagaaggtt ccttagaggtcacggccttcatctccacatctggtgtaaccctcatggcaggtgtgtctg agactggggcctgcctctgttcccaggctgcccctgcagggagcacagtgcctcaccagg cggctggtctcaaactaggacatccaaatgcactagaaagctctttctttcacggagctg aaactgatcttcctgtggctcccaccGGATGGTACcattcattcattcattcattcattc aCTAaatcgacctttattgagcatctactacatgccaggccttgtgcagagcagtggggg catgaagatgaacaagacaggccctttgtgatttcacgtaactttcagtttggaaaacag aaataaaacacatcaccacaactaaagtctaaattgggatccatgctgttgtcaggaagc atagagagccatcaggtcatggaatggggtcctgcttttgattggggggtgtcactgtat gtcacactgagggacagacctggggtaggtaagagctggccaggcagagagctgggggaa agggagtttcaggcagcggggaagcatgcaggaggcctgagggggtgcatgaggaaggga aaggtgagtgacaggggatgctggagcccagggtttctggggggtgggtgctaagacatg aggccagagaagggcaagggcttcattgcacAGGCAAGGTCCAGAGGCTGCAGGGATGGT ATCACTGACAAACTcatagccgtccttcagaagttggggggtggttcctgtcctcctcaa gtctccccttccagatgaaatgtccccagccttcccaccatttgtcaaaggacagcgttc atcccttatctgctggactcgcttcaggctgtctctgtccctggcaggagaacgggatcc caccctcccaatgatggcttatggggtagagagaatgggctgccctcgcctcagtgaagt gtgggattgcggtggcctggggagtggccatgctcccttttgccgtcaggtcatgttcac tctccaaaccaggtctctcccaccctggaactaaaagttggtgatttttaaaacccacgt gaaaaactttgcacttactgctgttgagttcatctCACCGTGGCCTCTTGGAGTCCTGAG GCAGCCGCTCATTCCATGCACTTCCTGCACTCGcacagctcaggatagtgagtcctgtgg caccgcactagactcttccagtgtgtgacaaagaccccgtcatcatctctatttgtgttt ggttgaacccaactcttttatttattattcttttttgagacagggtctctttctgttgcc caggctggagtgcagtggcgccatctcggctcactacaacctcagcttcctaggttcaag caattctcatgcctcagcctcccgagtagctgggattacaggcatgcgccgccatgccgg ctaagttttgtatttttagtagagacggggtttcaccatgttggccagattggtcttgaa ctcctgacctcaagtgatccaccctcctcggcctcccgaagtgctgggattacaggcatg agtcactatgtctggccaatcccaactctttgtcttatcatttaagctacacttttctgc ctctgtccattaggaggtcatgaactattcaatcacattcttgctgaacttgagacgttc tttatctgtgtatctcccttggtgcatcatgctggtaattctatcTCCTCCCCCAACCAG AAACAAAATGGCCATTGCCACCTGtggggaggggcctgggcacttctgttaaaagttccc caagaattctgatgtCTGGTCTCTGGGGGTGAGCCAGGGGTGGAGGGTGAGGCTACTGGG ATCTCTCCAGAATGAGGTTTGCCAAGGACATGGCTGATGTGGGCCCTGTCTTGGATGAGT ACAGAGAACAGGAGGCGCCTTACATCTGAAAGACTTCGCAAGCTTCTGACTGTGTGGAGA ATGGAACAGCTGAGGGCAGGGTGTGCATAGATCAGGAATGCGAACTGCCCCACTCCCCAA ACACATGCACATCCTTTCACCCCTTCTcaatgttcctccaacgtcagggagcagcaggat cactggggcatgtgtttaaaagcagatttctggccttagctcagggatccactgccagca ggcaggcagagcttagaaatctgcattgtaaccaaacgcccaggtggccctgatgtggtc tgtgggccactggtggagaaATTACAGCTCATTCGACTGTCACAGCAGCCTCTAATCAGG AGGACTGAAAGGTACAGGTCATGATTCCCAGTCTGGGAACCGCAGGAAGGGGAAGAGAGA TAGGGAGGGCTCCATCTCTGCATCTGTGTCCAGGATTTGAATAATTTTCATGACAGGTAG AAGTACTTTGTGAACAGAACAGTGGGAACTCTATGTAAGAAGTTCTGTGATTggccaggc actgtggctcatgcctataatcccagcactttgggaggctgaggcaggcagatcacctga ggtcaggagtttgagaccagcctggcaaacatgatgaaaccccatgtctactaaaaatac aaaaattagtccgggtgcggtggctcacacctgtaatcccagcactttggggtgccaagg cgggggggggtcacctgaggtcaggagttcgagaccaacatggtgaaaccctgtctctac taaaaatacaaaaaaattagctgggcgtggtggcagacacctgtaatcccagcgggaggc tgaggcaggagaactgcttgaacccaggaggcggaggttgccatgagcccagatcgtgcc actgcactccagcctgggcaatgagagtgaaactccatctccaaaaaaaaaaaaaaaaaa aaaatacaaatacaaattcaaaaattagccaggcgcagtggcgcacacctgtagtcccag ctgtttgggcggcaggagaatagcttgaaccgggtggtagagaggttgcagtgagccaag attgcactcctacactccagcctgggagacagagtctcagtctctaaaaaagaaCTTCTG TGATCACCCAGTCCAGTGGTGTGTGTCAATTGttccagctactcaggaggctgaggtggg aggatatcttgagcccaggagttagagatcggtctgggcaacatagcgagagcccatttc tttaaaacattttttaaaaaagaaTTTCTATGATCATTAATAGTATTAATAAAGTAATAT TAGTAACTTAGCACCTTGGCtagagggtgagaaggagaggctgggttaggacttgtatcc tgggctgagtgcagtggctcttgcctgtaatcccagcactttggcaggccgaggtggatg gatcgcttgagctcagaaggttgagaccagcctgggcaacatggtgaaaccacagctaaa aaaaaaaaaaatgtgtgtgtctgtagtcccagctactcaggaggctgaggtgggaggatt gcttgaggctgggaggcggaggttgcagtgagccaagattgcgccactacactgcagcct gggtgacagagtgagatcctgtctcaaaaaaaaagaaaagagaaaaaaaaaatttattgt accctggaaacatggtctctggaatgctgggaacagcttctccaccctgactcttacagA CTCTTGGGAAACAAAAAGCCACTAAGAATTGTTCCTCAGCTCTGGGCTAGGGCTTTCTAG AAAGATCAGGCAGGTATGTCCCTGCTGAGGTTGCTGGCTGAGAGTTCCTTTTTTCCAAAG TGCCCCATCAGTGGGACTTCAAAAGGCAAAGGTAATTTAATTCTCTGATGCCTCCAGGAG TGTGATAAGAATAAGgacgctgactgctgagtgctcacaccgtgcatcatcctgttgaat ggtcagacaagccctgtgagggctgtggtcagttccacctcacagatgaggcagtgacag gagtaacttgcctgaggtcacaggctggtaaggggcagagtcaggagttgaacccaggga gcttagctccaCCAGCTCCACCAGGATTGGGTCCTGGTTCAGTGTGACTGCTGGGtgtat ttgtcagggatgcatttggctgcaagtaatagaaaacccaaccaactgtggctcaggcaa atcctgaatccgtgtttttctgacataacacaaagttcTGGTTACTGGTGATAGTTCTGC AGTGTGGGGGCTGACATCCTTGTGATTTTCCAGGCCTTTCTTTCATGGTCACAAGGCAGC CGGTGAAGCCGTGGGTGTCATGTCTGAATTAAAGACAGGAAAGAAGGGTGAAGAGTGACA GGGCATGTCCACTTGGATCAGGAAAATGAGATTTTCTTTCCGGGATCCTTCCCTTCCCTA GTGCATTTGGCCAGAACTGGGTCTGATGGACACCTGAGTGGCAGCAAGGCTAGGAAAGCA GAAAGCATCATTGAACTTGGCTAAATCAAACAAGAGTTGTTCCTTGGGTTCAGGCAAGAT CACAAGAGAGAGAACGCCCATCATGGGGGCACTCCGAGTCAGCCACATTCCTCTCCTTGA GCCTCAGTTTCTTCACCCACCCTCTGCCAAAGCCGTGGCTCTACCATGTCTCCAAGCCCT GGTTAGAGCTTCTGGAGCTCTGCCTGTGCTGACTGGGCAGGGGCAGGGCTCTGTTGAGAT CTCTAACGTCAATACCAACCTAGGCAAGCTCCACAGAGCCCAGTGCCTGTCAGCAGATCC TGCTGTGGTCATGGGAATCAGAAGGCAATCACTTGGATGCCCAGAAGCCTTTGGAGCTGG CCTTCCTGCACAACTCTGTGTGCACTATTGGTGGGTAAGGGAAGCCCTCCGAATGTCTTG AAGCCCAGGGGACCCTTCTGGTTTTGTCATTGACTTTACACTCTGATCTATCCTGGACTT ACAGGTCTGTCTGCCCTGCGGCTGTGGATGCTCAGATGCactgggtgctctgagggcagg accaaggctagtcatcatcctgaagtccccagagccgtggaggcatcattacatgtttgt tTCCTGTCTGTTGCACCCAGGCACGAAAGAGCTGGGGAGAGGATATCTGGAGCCATTTTC TTTAAGCTGAGCTGCCGTTGGGTGGGCGTGGACTGGGGAAGGTTCCAATAGGAACCTTAG TGTGTTTTTCTCATTTGCATATGGGATGGGATGGGAGAGAGGGTGATGGTCACTGTGGAG GCTCGTTTCCATGGAAACAGGATGGTAGCTGCCATGTGTGATGTTGGGGGAAGTCACCAG AGATTCTCTGGCCACAGGCTGAGGTGCCTGACACGGGTCAATCATGAATCGGGAaggact atctctgttacgtgggacagaaaccctgaatctggtttaagggagtcaactgtttcctct actgaaaagccaagaggtctccagcttcagggcccgcttgctctagaatcctgaaagatg tctctagatggtgtgtgctcctatcccacagctctgctagtctgtgctgacttccctccc tggagctttcacggtggcagggtggtggcaggcagctcggggctcagtgccgactccctc cagttcagacacacctttcctttcctagcagttccaatcagtcctgggaactgagcctct ttggcctggattggctggtgtggggcatgtgctcatccctaagccaatcactgagggtag ggtgggcagagctcctataggccagacggaggtgaaggctcacccctggcaggatgtgtc agctgtgcccctatcacgtggctgagggtggggAGGCTGGTCAGGGAGGCTGGAAAGGGA TGCTGGACAGGGAGGATCCCAGGCCAGGCCTTGTTACTCCTGGAGTTCACAAGGGCGCCC TGGCTGGTGGAAACCAAGCCGTTTAGGTGGCCTACCATGAACTATCATTAACTGactgag ttgggcttttttacacccatgatggtgttacatcctgacaatccccagaaattagtattg ttaacaccattttgcagatgagaaaatggagtgtcagagagattggtagcctgcctcagg acacactcagcctttatggatcagatctgggattgctcaggtctggctgcccccagggct cgtgctcACCCATGACATGAAGGGGTTGTACATTTCCAGAGGCTGAAATATAAGCCGTTG ATTTGCCTCACTAGCCCTCAGAAAGCAGTGAGGTGAGTCCCCTGAGAGGAACATTTCCCC CAGGCTCTGGTTAGAGCCAAAAGCATCTCTGCACCACACAGAGCCCACTCTCTGGTTCCC AGCAGCCATTCTCACCTGCCGTGCTGCCAAGACTACTCTGGAGTAATGGAGCTAAGTTTC ACGGGAGGCAGACATcatgaggcatacactaaaattattcattgtttatctgaagctcag atttaactgggaagcttctatttatctggcaactctaCCCAGAAATAAACCACTGGAGTA AAGTAACCCAAATGGAGGCTTGGAGAGAGAAGGTCCAGGTCTTCTGCCACTGAGGTTCCC AGAGCTGCCCTGGTTCCCACCTGCCTGGGTTCTGTCTTTGCAGCCCATCCCTCAGCTTTG TGGCCAACCCAGCATTCTTCCCCCAAATCCCCCCTGTACTCTGAGCTTGGCctgagttgg tttcagagcgtcagtcaactgggcttaataacctctgttctttggcctcataggtttgtg tgaggaactgcgagtgttgctgttgtttgaatgtgtctcccatagttcatgtgttggcaa cctaatgccaagtgcaacagagttgagaggtgggacctttaagaagtgaccaggtcatga ggactcagccctcgtggatggattaatgccattattgtgggagtgggatggttatcgtgg gagtgggttcctgatgagagggatgagtttggccccttccctgtctcacacacactttct tgcccttctgccacgtgatgacacagcaagaaagtcctcgccagatgcagctccttgatg ttggacttcccagcctccagaatcgtaaaccaaattaatttcttttttaaaaataaatca tccagtctttctgcttctgttatagcagcagaaaatggactaagacaGGtatcttagtct gtttggggtgctctaacaaaataccataaaccgggtgcctcataaacaacagaaatctag ttctcacagttctggaggttgggaagtccaagatcaaggtgctggcagattcaatgtctg gtgggggccacttcctcatagatgagtcttctcattgagtcctcacttgagtcctcacgt gaaggggcagatgagtttccctttgcctgttttaaaaaggtgctaatctcattcttgagg gccctgccttcatgatctaatcacctccccaaaggccctaataccatcaccttgggggat agaatttcaatgtatgaattttaagtggatataaatattcagaccatagcaatgggtgaa atgacccataaatcatgaggtgctggccacagtcaagggttaatgtcattACTCCCAAAT CCTCTCTATTATTTccttcctccttctctccctccttccctccatccctccACAGAACAC CTACTGTGTGCTAGGTCCCCGGATATTGGCAATGGCTGGTGGTCTAGTTACCAACCAACA CAAGCCTGAGTCATCACAGAGCTGCCTCCTGACAGATGATCTGTGATTTCCAGCATCTCA GCTTCCCTTCCATTAGCTACATCTTAAATCACATTTTAAGAAAGCCCCCGTGGGCCCCTT GTGAAGATTGAGGAAACACCCTATTTTTATCAGCCACACACAGAAATCATCTCCTGGGCG GGGTATTTCCTGGAAAGATGTTAAATCTCAGTCATTTCTTGTGGCTTCTTGTCAGCTCCA AGCTTTTTTTTTCTTTCTTCTTTTTTTCTGATCTTGTCCCTCAAAttatttgtttgacaa actcacacagggaatccacctctaagtcagaacctgggctgggcactggggacccagcag gggctctgagccaacccctgctctgaggaacAGGGACAGGTGCCCAGAGGTGCCCTCATA GAGGATCAGTGGGACACCAGGCAGAAGAGCTCATCTCTGCCTGGGGGTGGGGTCTGGAGA GGGCCTCATGTGATTCGTGGGCGCGTGTGAGCTGAGGTAACAGTTGAGGCTGCGATACaa taatagctcacatttcttggctgttccttgtgtgaggccctgttctgagtactggatctg tatATGAACATGTTTCaggtcagtgacttgcccaaagtcacatgggacacaagcagcgag ctgggattggaacccagctctgtactctgacCATCGGGTAGCACTGCCTTGGAGGATGCT GGCCCTGGTCCTAGTGCTGTGGTGGGCGCTGTGCCTTCCACCTACCTGGTCAGCAGAGGG TAACGCTCCCGAGCCGGAGGCGCTGGCCTGCTCCGGCCTTGCCGGTGACTGATGCAGTGG GAGAGGGGGCAGGTCACACAGAGCTCCTGGGTCCCTTGGTACCTGTCTGTGGGACATGGA TCCCttctttttttttttttgagacagagttttgttcttgtcacccaggctggagtgcag tggcgcaatctcagctcactgcaacctccgcctcctgggttcaagcgattctcttccctc agcctcttgagtagctgggattacaggcgtgcgccaccatgcccagctaattttttttta tttttgtatttttagtagagacagggttttgccatgttagccaggctggtcttgaactcg tgacttcaggtgatccacctgccttggcctcccaaagtactgggcttacaggcatgagcc accatgctgggccTGACATGGGCCCCTTCTGTCTCAGTTTCTTCATCTGCAGTGGGTGCT GTAATCCAGCTGAGAGAGGAGTACTTGAGGGAAGGGGTATGAAGCTTGCGGCAGGTAGCG AGTGCTCAGATAACCTTTCTAAACCAACCGGGACCCTGAgttccagttgacagaaacaca gtacaagcaggacctagaacccaaaaggaaggcactggctcaagtaaccggggagagcag agggtaggtcagggatctgggctcagctggagggaggtcctccaagcatgtggtcaggag cccgcctctctccagctcttgcttcagccttcctttgtgttggcaaaattctcaggccac cacagagccaaggtggcctccgggtttgcaggctgctgcttagccagggagaagggctct tccctgcagtcctggcttaagggctgggctgcctttgtggctcacctgggatcacgtgcc tatcctgaaccaaccatggtggcccagctgggggcatgggatcctctggtggaccaggcc tgggtcTCTGGACCTCTGCTAGGAGCCAGGAGCCAGGGAGGGAGGCTCTTCAAGGAATAA GGTCGGAGTAGAGGGTGCTGGGAAGAAATGGTGTCCACCCTCCCTGCCCTCCTTTGCATG GCCCCTCTACCAGTCTGACCACACGGGAGCCCCTCTCCCCAGAAGACAGCCACCTCCTCC TGGGGCGACTTCAGGATGGAAGTGCTCTCTTTAAAGCAACATTACTTACCTAATTAAGCG CTTAGGAGCTGGCAGGAGGTAGTGGGGAGGTTTTGTTGATTTCTTTTTTAGACTTTTAGC ACTGAAGTTGCGTGAGAAAGTAACTGTGTAATTAGGAATTAATTTCTCACTCCTGTAAGC GATGTCTTATTTGGGGCCTGAGGGGAGTCAGCCCACAAGGCGGCCCTTCCTTACCTTCTC TTTTTGGAATGTGGGCAGGAAGTCCCAGCTGTCTTGGCTGTCACTGGGGTGGAAAGAGGA GAAGGGGAGGGAGATAGCTTCCTCCATCCCAGGTGGCCCTCAGCAAAAATTGAGACGTGG TGCTTATGCCTGACATGGCACCTAGGGTGAGCAGACACTCGGgggagatggacggaggcc acattatggagacccttgaaggtctctttgttctgaaggcaatggggagtcactgagggt tttaagtgggagtgacacagctaggtctgagtttaggagatttctgctgactgaggaagg gctgtaggggaggaagcaaggggcaggagggcaattgggaggcttgtgccactgtcggga cagagggagggtgatccgggctaggacagggagagtggaactgTCAGCAAGCTATCCCAG GTTGGGCCAATTGGTGCATTGAGTCATTGTCAAGACAGTGAGGTTCCCAGGACACAGACT TAAACCCACAATTCCTCCCTCCCAACTAAGTGCTCTTCCCTCTTCCCTCCTCTCTCCCCA TCCTTGTCCTGTGTCCTCCTTTCTATCCTCTTCTGCTCAGAGAAGAATGAGAACTACACG ATTCTTCACTGTGCAGCTACTATGTTTCTTCTTCACTGAATGCATTTATATGCTCTTATT CCCCCAGGCAGGAGATGCGGCCACCGCAGAATACCCGCAAATGGTTCATGAAGTGGAGAA GTGAGAGTTAGGACCCAGGAGAAACATTTAAGCAAATGGATTCCCTGGAAGGATCTACAG TGTCAAGATCTTTCATGCTGCtaagaactcagtaatatcacatttccttttttgacttgg ttgccaggaagctcagagctaagatcttgacaccagattctaCAGGAACGTTTTCTTGGG GGAGCTTTTCACCGGGGTCTGAGGGCTGCACCTGGTGGATTCTCAGGGGAATTTGGGGAA TGTTTGCCGCAGACATAGACTGCAGGTGTGTTCCCGTGCTGAAGACCCAGAGGGTCATGT ATGGCGTGAAGGAAAGGGGCTGGGCCAATGTGTTGCTCCAGGCCTGCCCTATTTGGACCA GCTCAGAGTGTTTGGGAGCTTCAAATGCACTGCCAGGCAGCGGCTGTTTCTGTTCCCCTC CAAGAtgggggcggatggcggggaggttgcccaagtctgtagccgagagcacacgtgtct gatcagcctcctgtggcaaggctggggtctgggaggtgttcagatcctaaagttactaac tgggtcatcgtgggccccccctttgacatccagtcacaacttgtatctcattgaggaccc tgggatcagtctcttcctgccaccccttgttgtagagaaacacaaagtgtaagaaaacaC TCTTTGTCggctgggcacggtggctcacgcctgtaatcccagcactttgggaggccaaag tgggtggatcatctgaggttgggagttcgagaccagcctgaccaacatggagaaactcca tctctactaaaaatacaaaattagctgggcatggtggtgcatgcctgtaatcccagctac tcaggaggctgaggcaggagaatcgcttgaacccgggaggcgtaggttgtggtgagctaa gatagtgccattgcactccagcctgggcaacaagagtgaaactctgtctcaaaaaaaaaa aaaaaaaaaaaaagaaaagaaaaagaaaaCACTCTTTGTCATCAAGGGGCTGAGTTGTGC ACGAGGGCAGTCTTGTCCCCCAGCCTATCCTGGGGCAGGGGCCATGGTTGGTGTCCTCAC TTAACTGAGAGCCAATAGTCCTAGACTGGGTGGGGAAGGTGGAGCCTGGTGGCCGTGTAG GGGAGGGGAGTTAGGGACCAGCAGGGGGTTGTCCCAAGGGCTCCCTCAATGAGCCAGTCA TGGATGTGGCTTGCTCTGGTCCGGGGTGGAATGGAGGGAGGCTGTGGCAggagagaataa tgggcccgcgctcaaatgagtggagattgaaatgggttcccacaggtaaagagaacagtg cccggcacccagtagggtctcaaACAGCCTTGCTTTTCTGTCTACCCATCCATCTTTCAG GCATCTGTTTATTTTCATGGCGAGGCTTCATGGGGACGGGAACAAGTCCTTGATGAGCGC CTGCCAGAGCTGGGCAGGTGTGCCCTCTGGGCTCTGGGAAGGCAGCACGTGGGTGGGTTC AGTCTGGTGTGGGCTGGGAGCCCCCATCTCCAGCTCACCCAGCAAAGCATGAACTGAGCC TGAGGGGGTTCCCAGCTCTCCCTAGGGACTGACTCCCCCCACCCCGCCCCCCACAGGATC TGGAGAACCAAGGCAGGAGAAAGAGAGGCTGCGTCTGTGGGGGTGGGGCATGGTGGGGAG GGCTGGCTGGAGCTGGGCCTGGCTGCCTGCGATGGGACTCGGCAGTCCTGGGCCCCGCGG GTGCCAGCGCCTGTTTGTGTGCCTGTGTGTGCCACCCCCGCAGCCCCTCCATCACACGTG TCTCCCGGCTGCCTGGAGAGCTCTTTCTACAAAATGTGAAAATGACAGTTGGGCTCACCC ACGCGCAGAATCCTCATGCAGTCCCGCTCCCTCGCTGCCCCTTCCAGGTCACCATCGGCC CTCACCCTCTCTGCCTAGCTGCTGccccccgcccaccgcacccctcctttcccggcccct cccccaaccccctcttccctcctcctgctccttcccttggccccctcctccctccctgct ctctgccagctcccccctccctctttcctccctccccctcAGGTCCCCAAGGTCTCTGTC TCTAGCTCTAGGTCTCTGTCACTTTTTTGGGTCACTCCCCCTCATCTGAATTTATGCTTG AGTAGGAGTGTGCATGTATGAGGATGTCCAAGAAGGGAGTGAGTGTGTGTGTGCAGGTGT GCAGTtgtgtgtgtatttgtgcttgtgtatgcgggtgtgtggttgtttgcatgtgtgtga ctctgtgtgcaggtgtgtgactgggtgtgtgggtatgtggttgtgtgtatgtgtgacttt ttttggaggtgtgtgactgtgtgtgtgggtatgtggttgtgtacgtgtgtgtgACTGTGA TGGTGTGTGACTGTGTGCAGgtgtgtggttgtgtgcctgtgtgtgtgtgtgcaagtgtgt gactgtgtgtgtgactgtgtgtgcaggtgtgtgattatgtgcgtgtgtgtgattgtgcag gtgtgtgtttgtgggtgtgtggttgtgtgcgtgtgtgactgtgtgcatgggtgtgactgt gggtgtgtggttgtgtgCATGTACGTGACTCTGTGTATGCAGGTGTGTGACTGTGCGTGT GTGCACACAGGTATGGAAGTGTGTGTGCATGCGCTCCAGCGGGTGGGGGATGGATGGTGG TGGCATTTCAGGGAACGAATGGAGCTTTCACTCAATGACTCTTCAAGCAGCGGGAGGGGG TGGCAGCTTCACAACAGTCGGACAGGTTTGTGCAGCATGTAGGAAAAGCCTTCATTTCCT ACTGACAGTGGTGACATGGGTGGTGACAGGTGGAGCTGGCAGCAGTGCTGAAGTCCTGGG GTGGGAGGTGCCAGGGGAAGGGTCTGGTGATGGGGGGCAGGGGGGGTCATCCTGGAAATG CAGGCCGGGCCCATCTCCCAGTCGCCCTCAAATGAGGTTTGCTGTGCTTCCACCGTGAAG GGACCTCAGAGGTCTGCCTCTTGAGGGAGATCTGGGAAGACTTCCTGAAGGAGGCAAACT GCCTCCAAAGAGCTGCAGGGCTAGTTGAGCATGGAAGGGATGTGGGGTGTGGAGCCGTTT GGTGCAGGAGATGTTCCTCCCACTTTCAGAGGCTGCTGTGGAAGCTGGGGCTGACATGGG CCACGGGCCAGGAGGATGCGCTGGGGCAGGAGCCACCTGGCACAGCGCTGGGCACACAGT GGGAGCCCAACATCTGTGCTCCCTTCATGCTCTAAGCCCTTGCCCACATCTGTCACCGGC GCCATTTACAGAGGAGGAGACAAGGGCCACCAACCCCAGGCCACATGTTGGCCAGGTGTA GCTGGAGATCCGACTGCTGTCTTTACTTGCCCTGTCCAGGCAGTAGTGCGCAGGTGGCTG GAGAATGCTGTGGCCCGGGCCCTGGCCCCAGCTGGCCTCCAGCACCATCCCTCACTCTCT CTCCTTTCTCTGCAGGATGGTCGAGTACTCCCTGGACCTTCAGAACATCAACCTGTCAGC CATCCGCACCGTGCGCGTCCTGAGGCCCCTCAAAGCCATCAACCGCGTGCCCAGTGAGTC AGCCCCGCCCTGTCCACACATTCCTGGCTGATCCATCCCTGGCCAACCCATCCCTGGCCT ACCTAGCCAATGCCCACCCCCCCACCCTGCTTCGTTCACTTGGAGAAGACTGATTAGGGC CCGGGTGTGCTCAGGGATCCTGCGGTGTCTATCTAGACAGATGTGCCCTGCTCCCATAGA GCTCATGGGCCTGAAGACACTGGCAGGTGGTCCCAATGCTTCTGAGTCCCAGGAGAGTCT GGAGAGCATGCTGGGGAGTCTGGCTTTTCAGGGACGAAGAGTTTATGGGAGAGTGGTCTT CATAGGATGTCAAGGCAAGCACCCATAGGAAAAGAAGTTGCTTAGTTTGAAGGAGGACGT CGTAGAGCATTTCACTGGGGCAATGAAACCTGACTCCCTCACTTGTGCTGACTGACTTAG AAGTCGAGCTCTGTCATTCACCCACCACAGATCGATGTACCTACTCACCCATATGCCTAG CCACCGGTTcatccatccacccgtccacctatccacctgtccatccatccatccatccgt ccgtccgtccatccatccatccatccatccatctacctgtccacccatccacctgtctat ccatccatccatccatccatccatccatccatccatccacccacccacccatccacccac ccacctgtccacccacccacctgtccatccatctacctgtccacccatccacctgtccat ccatccacccacccatccatccacccacccatccatccatccatccactcatccatccat tcacccacccgtccatccatctacctgtccacccatccacctgtccatccatccatccat ccatccatccatccatccatccatACGTACATACATACATCTGCTCATCTTTCTAGCCAT CTTTCCATTTGTCCATTCATTCATCTGTATAGTCAGCCAGAcatccacctgtccatccac tcatccacccatccacctgtccatccatccatctgtccacccacacatccatccacctgc ccacccaCCTAGTATTAAGAGAGGTTATCTTGCAACCATAAGCCCTGTagagttttcatg tccatgacctgttttgagccttacagtcattctgagggaggtgagctgttgccattttac agatgaaaaaactaagacttggagacacgaggttacctgcccagggacgcactgccagtg agtagcaaaggctggagtcagttaggtcttctgactcctcactgctctcttcTAGGAATG GGGTGAAGACTGGGGAAAGAGAGGATGAGGGCCCTGCCTGCCTTCCTGGtttttttttgt tgttgttgtttgtttgtttgtttgtttgttttttttgagacacagcccgtagctctgttg cccagactggagtccagtggtgtgaacttggctcactgcaacttctgcctcccaggttca agcaattctcctcctgtctcaccctcatgagtagctgggactacaggcatgtgccaccat gcctggctaatttttgtatttttagtagggatgaggtttcaccatattggtcaggctggt ctcgaactcctgacctcaggtgatccacccaccttggcttcccaaagtgctaggattaca ggcatgagccactgcacctggcTGCCTGGGGCTTTTATACGCATTTACCCACTTCCTATG GTCCAGGAACTTGACATCTGATGGCTCAACAACCTGTGGgaggctcagagaagttaagtg actcacacaaagtcacacagcaattcagcggcagagctggaatctgaacagagttctgtc tgtcctcagcccagtttatttccTGGCTGTGTCTGACCCCTTGCTTCTCTTCCCTGCCTG AGCTTCTGTTTCCCCATCTGCCAAAGAGTACAGGTCTCCTGGCACCTGCTCCCCCTCCAC AGGTAGTGCTGTCCCCATTCCTTTATTCCTAGCCCTGGGGCCTTGGGGCTCTGTCACCCA CCCCACCCAGCCAACCTCTGTGGTCCATCCATCCTGAGCGCCCTGTGGGGCTGGCCTGAC CCCGGGCTTGCAGAATGCATCAGTCAGTCTGGGCAGGCCTGGCGGGGCAGGAGAGGCCAT GCTTCAGAATATCTGTGGAGCAAGGTGACCAGGAGGGTGGCAGAGCTTTCTGAGCCTGGA GGGTGGCCCAATCCTGCTTTGTTCTGAGAGGGACTGGCTTGGCTTGGGTAGGGCACAGAG GGGGCCTGGGGGCTGGGGTCTCAAGGTCACAATACGATAGAAAACGCTGGGGGTCCTCAG TGCTACTGTGAGGGTCTTGGGGAAGGGTTTGGGAGGCGAGGTAGGGCAAGTGAGTAGTGG GAACCAAAGCTGTGCGGGAGGGGGAGGGGGAGTTCAGCTCTACCAGCCTGGCCCCTTCCC ACTGCCCTAGGGAGACCCCCTTGGGCACAGGGAGGGGACATGCGGAGAGGCCATTTTAGG GCCAGCTTCTCTCTGTCCTCATCCCCTCCAATCccagagggctccttgaagatcacctag ttcaaaaccatctttcccacatttaacaaatgaggaaactaaggtccagagagggtcgtg gctagtccagggtcacacagcaattcagtgTGACCAAACAGCAGTTCAGGAAGGACCAAG CCAAACCAGCACACCTTCCCCAACAGTGTGTGATTTTCTCCCATGTGCCCCACCTGACTT TACTGGGAAATGAGCCAAAAGGTGGCCTccgtacactcagcacccagaactctgcctggc ggacagaaggcgcgccaaagacacgtgtgaaatggaCACAGCAGGTGTACTGAGCTGTGT ACTGTGCCAGGACCACAGAGCTATACATGCTCCTGTGCCGGGCATGAGGAGGCAGGGAGA ATGGGGCTgggggtcgggaggcctccgggagaaggggatgtctgagttgagacccagggg aggatggggattgagtaggtggagggggagggctgggcggcagtagcgggggttcaggga gtgtaaagggcttggggagggagcTGCAGGAGCTGGGGGTTACAGGCTGGGTGGACCAAG GGGTGGGGCATGAGGCTGGAGAGGACAGGGCCTGGGCATGGACCATGTGCCTGAGGGCAG TGGGAGCATAGGAAGAGGTTAGCAAGTGGTTGCTTTAGAAACACCCCTGGCCAGAGTGCG GTgtggggggggcggtggggggggcagtgggggTGAGCTGGACATGGGACTGCTCCTGGA ACAGGTGTGAGCGAATGGCCGGTACTGGGCAGGGGTGGGGGTGGGATGCAGAGCAGCAAG TGGGTGGGAGAGGGACTGCTGGGCCCAGTCCAGGTCCTCCTTGAGTGTCTGGTGTGGGCA CCTGGGTGGGCGGGAGGGACCTCAGCTCTCAGGGGCCAGCACAGAGGGCCACGTCGCTCC TGGCTCCCACCCACAGTGCTGCTTGTTTCTGTCCTGGGGGACGGCGGGGGCTGCCCTCAG CAGGCAGCTGCCATGGGACCATGGTCACACTCCAGGCCACGGAGCCCACAGGCACCGCCA CCTTCCAGAGGTGTGTGCACGTTGCAGAGGGTCGCACACAAGGGATGTTTGTACGTGATC TTGATCTGAACCTCTTGTCCGGTCTAGGGTCTGCCCAGCAGGGGGCAGCACTGTGATGGG ACCGCTGAGGCTGCAGGCGGGCTTAGGGGCATGGGACGGGACACGGGCGGAGGCCTCGCT CTTGCCAGGCGGGCTTCTCTACATCtgtgtgagggtgtgtgtgggtgtgagggtgtgtgt gggtgtgagggtgtgtgtCCACCAGAGAACACGTGTGAGGACGTGTGTGCACGAGTGTGT GTGCAATGAAGGGTGTGCACAGGTGAGTATGTGCCTGTGAGGTGCGTGTGCACATGTAAG TACATGGGAGAGtgtgtgtgcatgtgacaatgtgtgcatctgaggatgtgtgtgcacaag tgagcaaatgtgaaagcctgcacacgtgaatgggcacatgtaagggtgtgtacatgtgag agtgcgtgcctatgaaagtgtgtgtgttgtgagggtgtgtgctgtgtctgcctgggaggg tgtctgtgtatgCCTATGAATATGTTCATGCCTGAGCATAtgtgtgcttgtgtgtgtgtg cctgtgagggtgtgtgtgcctgtgagagtgtttgctgtgatgtgtgtgtgcctgtgaggg tgtgtgtgcctgtgtgtgtgtgtgcctgtgtgtgtatgtgtgCTGCGAGGGGGTATGCCT GTGAGGGgtgtgtggctgtgagggtgtgtgtgctgtgaggaggtgtgttatgaaagtatg cgtgcctgtgaacatgcgtgtgtctatgagcctatgtgtgcctgtgggggtgtgtatgtc tgtgaaagggtgtgtacgtgtcaagagtgtgtgtgtgcctctgagcgtgtgtgcgtccat aaaggggtgtgcctgtgagggtgtgtgtgtgtgaagtgtgtgtgtgcgcctgtgagggtg tatgtgtgacgtgtttgtgtgtgtgcctgtgagggtgtgtgtgaaagggtgtgtatgtgt CAAGGGTGTGTGTGCGCCTCT ================================================ FILE: depth/test/hg19.fa.fai ================================================ chrM 16571 6 60 61 chr22 20001 16861 60 61 ================================================ FILE: depth/test/run.sh ================================================ #!/bin/bash goleft depth --windowsize 10 --q 1 --mincov 4 --reference hg19.fa --processes 1 --stats --bed Test1-coverage.depth-tocalculate-windows.bed --prefix out Test1-sort.bam ================================================ FILE: depthwed/depthwed.go ================================================ // Package depthwed combines files from goleft depth into matrices. package depthwed import ( "bufio" "bytes" "fmt" "io" "log" "os" "strconv" "strings" arg "github.com/alexflint/go-arg" "github.com/brentp/xopen" ) type cliargs struct { Size int `arg:"-s,required,help:sizes of windows to aggregate to must be >= window in input files."` Beds []string `arg:"positional,required,help:depth.bed files from goleft depth"` } func pcheck(e error) { if e != nil { log.Fatal(e) } } // Main is run from the dispatcher func Main() { cli := cliargs{} arg.MustParse(&cli) run(cli) } func getNameFromFile(f string) string { tmp := strings.Split(f, "/") tmpn := tmp[len(tmp)-1] for _, suff := range []string{".gz", ".bed", ".depth"} { if strings.HasSuffix(tmpn, suff) { tmpn = tmpn[:len(tmpn)-len(suff)] } } return strings.TrimSuffix(tmpn, "\n") } func run(args cliargs) { stdout := bufio.NewWriter(os.Stdout) defer stdout.Flush() beds := make([]*xopen.Reader, len(args.Beds)) names := make([]string, 3+len(args.Beds)) names[0], names[1], names[2] = "#chrom", "start", "end" var err error for i, f := range args.Beds { beds[i], err = xopen.Ropen(f) pcheck(err) names[i+3] = getNameFromFile(f) } stdout.WriteString(strings.Join(names, "\t") + "\n") depths, eof := next(beds, args.Size) for ; !eof; depths, eof = next(beds, args.Size) { fmt.Fprintf(stdout, "%s\t%d\t%d", depths[0].chrom, depths[0].start, depths[0].end) for _, d := range depths { fmt.Fprintf(stdout, "\t%d", d.depth) } stdout.Write([]byte{'\n'}) } } type depth struct { chrom string start int end int depth int } func mustAtoi(s string) int { v, err := strconv.Atoi(s) pcheck(err) return v } func mustAtof(s string) float64 { v, err := strconv.ParseFloat(s, 64) pcheck(err) return v } func sFromLine(l string) depth { toks := strings.Split(strings.TrimSuffix(l, "\n"), "\t") dep := mustAtof(toks[3]) d := depth{ chrom: toks[0], start: mustAtoi(toks[1]), end: mustAtoi(toks[2]), } d.depth = int(0.5 + dep) //*float64(d.end-d.start)) return d } func getNextChrom(r *bufio.Reader) string { chromLine, _ := r.Peek(100) var chrom string if len(chromLine) > 0 { chrom = string(chromLine[:bytes.Index(chromLine, []byte("\t"))]) } return chrom } func next(beds []*xopen.Reader, size int) (depths []depth, eof bool) { depths = make([]depth, len(beds)) eof = false k := 0 // endSeen makes sure we only print the indivisible message once per chrom endSeen := false chrom := getNextChrom(beds[0].Reader) for !eof && depths[0].end-depths[0].start < size && chrom == getNextChrom(beds[0].Reader) { for i, bed := range beds { line, err := bed.ReadString('\n') if err == io.EOF { if i > 0 && !eof { panic("not all files have same number of records") } eof = true continue } else if err != nil { panic(err) } if k == 0 { depths[i] = sFromLine(line) if depths[i].chrom != chrom { log.Fatalf("got unexpected chromosome from %s: %s", bed, depths[i].chrom) } if size%(depths[i].end-depths[i].start) != 0 && !endSeen { endSeen = true log.Printf("size %d indivisible by interval in line: %s likely chromosome change.", size, line) } } else { tmp := sFromLine(line) depths[i].end = tmp.end depths[i].depth += tmp.depth } } k++ } return depths, eof } ================================================ FILE: docs/index.html ================================================

IndexCov

================================================ FILE: docs/indexcov/ex-indexcov-depth-15.html ================================================

Here we see a single sample with a very large deletion. Also note that this is an acrocentric chromosome.

Each line is a sample.
The legend at the top of the plot shows the sample id from the bam read-group.

================================================ FILE: docs/indexcov/ex-indexcov-depth-X.html ================================================

We can see a clear separation between males (with a single X) and females (with 2).

Each line is a sample.
The legend at the top of the plot shows the sample id from the bam read-group.

================================================ FILE: docs/indexcov/ex-indexcov-depth-Y.html ================================================

We can see a clear separation between males (with a single Y) and females (with 0).

Each line is a sample
The legend at the top of the plot shows the sample id from the bam read-group.

================================================ FILE: docs/indexcov/ex-indexcov-roc.html ================================================
This is an interactive ROC-like coverage plot for each chromosome where each line is a sample.
The legend at the top of the plot shows the sample id from the bam read-group.

Here we see a large deletion in a single sample on chromosome 15

This deletion is also visible in the depth plot for that chromosome

We see separation of the Sexes on the X

This is also visible in the depth plot for chromosome X
and in the sex plot

and separation on the Y

This is also visible in the depth plot for chromosome Y
and in the sex plot

================================================ FILE: docs/indexcov/ex-indexcov-sex.html ================================================
Each point is a sample. We can see the sample ID by hovering on the point

================================================ FILE: docs/indexcov/help-bin.md ================================================ Bins ==== A "*bin*" in `indexcov` terms is a 16,384 base window for which coverage was estimated. For a *good* sample, we expect most of the bins to be around 1. This plot shows: + x-axis: number of bins with scaled coverage < 0.15 + y-axis: number of bins with scaled coverage outside of 0.85 - 1.15 These relatively simple metrics are quite effective in finding problematic samples. samples that fall: + to the right of the plot have many regions with low or missing coverage. + high on the plot have many regions outside of the expected coverage interval. The former of those may be due to truncated bam files or other missing data. The latter is a good indicator of dosage bias (basically uneven coverage across the genome). Samples that have large values on the y-axis will be problematic for CNV and SV calling. For example: ![bin Help](https://cloud.githubusercontent.com/assets/1739/22121227/6ccb2ffa-de40-11e6-8916-eb7f3a584c35.png "bin help") In these plots **each point represents a sample**. In this plot, we see 2 samples that have very extreme values for both the x and y axis. These are samples that were missing coverage for entire sections of the genome due to processing glitches. There are also several samples with values above 25000 on the y-axis that warrant further investigation. We can not use hard cutoffs like 25000 because the number of regions covered will vary according to many factors such as the reference genome used, the mapper, the PCR artefacts, etc. It is best to evaluate based on the cohort. ================================================ FILE: docs/indexcov/help-counts.md ================================================ Mapped Counts ============= The bam index reports the number of mapped and unmapped reads (without regard for quality or flag). This plot shows the log of the total number of mapped and unmapped reads for each sample. ================================================ FILE: docs/indexcov/help-depth.md ================================================ Depth ===== Depth plots are very intuitive. The x-value indicates the position on the chromosome and the y-value indicates the relative coverage. For example: ![depth Help](https://cloud.githubusercontent.com/assets/1739/22121191/4505f720-de40-11e6-8f92-8e386298c2cd.png "depth help") In this plot **each line represents a sample**. Here, we can see that, as expected, most samples are centered around 1. We can see the centromere. Notably, we also see a single sample with extremely low coverage. We can tell this is not due to a deletion because it is non-zero and it's not 0.5 (which would indicate a heterozygous deletion). For this case, we know that this occured due to a processing 'glitch' that resulted in a loss of most of the data for this region in that sample. We can see a corresponding drop in the coverage plot below. The depth plot in the `index.html` file is a static image. But **clicking the image will take the user to an interactive HTML version of that plot** for more in-depth (so to speak) exploration. Coverage ======== Coverage plots indicate the proportion of bins (on the y) covered to at least a relative depth (on the x). We expect the large drop around 1 since much of each chromosome will have an estimated, scaled coverage of 1. For example: ![coverage Help](https://cloud.githubusercontent.com/assets/1739/22121534/bf3e7cdc-de41-11e6-9486-1e81f8fbb2d8.png "coverage help") In this plot **each line represents a sample**. Where we can see that most samples drop around a coverage value (x-axis) of 1. There is a single sample that drops much sooner. This sample is also seen in the depth plot above. In general, changes as severe as this indicate a problem with the data rather than a biological effect such as a deletion. Though a very large (20MB+) deletion would show up in this type of plot. The coverage plot in the `index.html` file is a static image. But **clicking the image will take the user to an interactive HTML version of that plot** for more in-depth exploration. ================================================ FILE: docs/indexcov/help-pca.md ================================================ Principal Components Analysis ============================= In `indexcov` we use PCA as a means of dimensionality reduction. That is, we send a matrix of $n samples by $m bins in the genome and (with PCA), we project that to $n samples by 5 components. This enables discovery of major batch effects among samples. **NOTE** that `indexcov` excludes the sex chromosomes from the PCA, otherwise the 1st or 2nd principal Components would separate the sexes because of coverage difference on the sex chromosomes. Because `indexcov` already examines sex in the [sex plot](https://github.com/brentp/goleft/blob/master/docs/indexcov/help-sex.md) it is excluded from the PCA so that we can more easily discover other batch effects. We plot the *1st vs 2nd* principal components: ![pca1](https://cloud.githubusercontent.com/assets/1739/22120760/54e89e38-de3e-11e6-8bc0-c0ee22f23f99.png "pca1") and the *1st vs 3rd* principal components: ![pca2](https://cloud.githubusercontent.com/assets/1739/22120759/54d8aa5a-de3e-11e6-8b46-f0e6c1d94080.png "pca2") In these plots **each point represents a sample**. In this case, we don't see any major clusterings or outliers, but we may want to hover over the samples at the edges and check their sample Ids in the other `indexcov` plots. ================================================ FILE: docs/indexcov/help-sex.md ================================================ Inferred Sex ============ Since we have scaled coverage to have a median of 1, chromosomes with a value of ~0.5 have a single copy of that chromosome while those with a value of 1 have 2 copies (assuming diploid organism). Using that information, we can infer the copy-number state of the sex chromosomes and report. For example: ![Sex Help](https://cloud.githubusercontent.com/assets/1739/22120288/6b304990-de3c-11e6-811e-fb01b0a83a67.png "sex help") In these plots **each point represents a sample**. Here, we can see inferred males in blue and inferred females in pink. (Color choices aside...) We can also see a single outlier sample that has only a single X chromosome and no Y chromosomes. In this case we know that there is a problem with this sample where much of the data from the Y chromosome was lost. *When viewed in context, this plot is interactive*; the name of the sample will appear in a tool-tip when the user hovers over a point. Atypical Ploidy --------------- This plot will also enable discover of samples with unusual sex chromosome copy-numbers. For example, an **XXY** sample would appear at *2* along the X-axis and *1* along the Y-axis (there are no points there in this cohort). An **XYY** sample would appear above the males in this plot at position *2* on the Y-axis. The occurence of This in the population is as high as 1 in 400 so it should not be too unexpected to find such samples in large cohorts. ================================================ FILE: docs/indexcov/index.html ================================================ depth plot: autosomal chromosome with large deletion in one sample
depth plot: X chromosome showing separation of males and females
depth plot: Y chromosome showing separation of males and females
ROC-like coverage plots for entire genome.
Scatter plot of X and Y ploidies used to infer sex.

================================================ FILE: emdepth/README.md ================================================ [![GoDoc] (https://godoc.org/github.com/brentp/goleft/emdepth?status.png)](https://godoc.org/github.com/brentp/goleft/emdepth) # emdepth -- import "github.com/brentp/goleft/emdepth" emdepth uses a simplified EM algorithm to assign copy-number given a set of depths. it is based off the implementation in cn.mops. Like cn.mops, it works best with more samples and it assumes that most samples will have copy-number 2. emdepth consists of a single function EMDepth that iteratively assigns depths to copy-numbers, adjusts the center of each copy-number bin. and re-assigns... This package does no normalization and therefore expects incoming data to be normalized. ================================================ FILE: emdepth/emdepth.go ================================================ // Package emdepth uses a simplified EM algorithm to assign copy-number given a set of depths. // it is based off the implementation in cn.mops. // Like cn.mops, it works best with more samples and it assumes that most samples will // have copy-number 2. // emdepth consists of a single function EMDepth that iteratively assigns depths to copy-numbers, adjusts // the center of each copy-number bin. and re-assigns... // This package does no normalization and therefore expects incoming data to be normalized. package emdepth import ( "fmt" "math" "sort" "sync" ) // mean of all except highest and lowest values. func median32(a []float32) float64 { // make a copy so we dont modify original order b := make([]float64, len(a)) for i, v := range a { b[i] = float64(v) } sort.Float64s(b) if len(b)%2 == 1 { return b[len(b)/2] } return (b[len(b)/2] + b[len(b)/2+1]) / 2 } // mean of all except highest and lowest values. func mean32(a []float32) float32 { var sum float32 for _, v := range a { sum += v } return sum / float32(len(a)) } func mean64(a []float64) float64 { if len(a) == 0 { return 0 } var sum float64 for _, v := range a { sum += v } return sum / float64(len(a)) } func abs(a float64) float64 { if a < 0 { return -a } return a } func abs32(a float32) float32 { if a < 0 { return -a } return a } const maxCN = 8 const maxiter = 10 const eps = 0.01 // used to test for convergence return the sum of abs differences // and the largest absolute difference. func summaxdiff(a, b []float64) (float64, float64) { var m, sum float64 for i, av := range a { d := abs(av - b[i]) sum += d if d > m { m = d } } return sum, m } func getBins(nSamples int) [][]float64 { binned := make([][]float64, maxCN+1) for i := 0; i < maxCN; i++ { if i == 2 { binned[i] = make([]float64, 0, nSamples) } else { binned[i] = make([]float64, 0) } } return binned } var binPool *sync.Pool func init() { binPool = &sync.Pool{New: func() interface{} { return getBins(32) }} } type Position struct { Start uint32 End uint32 } func (p *Position) String() string { return fmt.Sprintf("%d:%d", p.Start, p.End) } // EMDepth returns a slice of integer copy-numbers (CNs) corresponding to the given normalized // depths. It uses a simple EM to assign depths to copy-numbers bins with a preference for CN 2. // And to adjust the mean depth of each bin after each iteration. // I is a unique identifier for the depths that can be use to assiciate the returned struct with // position info. func EMDepth(depths []float32, p Position) *EMD { m := median32(depths) // lambda are the centers of each CN lambda := make([]float64, maxCN+1) // put each sample into the bin they belong to. // we re-use these since they can take a lot of mem. binned := binPool.Get().([][]float64) // keep lastCenters to check for convergence. lastCenters := make([]float64, len(lambda)) lambda[0], lambda[2] = eps*m, m lastCenters[0] = lambda[0] // EXPECTATION: // initialize centers of each bin relative to copy-number 2. for i := 1; i < len(lambda); i++ { if i != 2 { lambda[i] = lambda[2] * math.Pow(float64(i)/2, 1.1) } } // iterate at most maxiter times. stop early if the largest depth change // from 1 iter to the next is < 0.5 or if the total of all changes is < delta. sumd, maxd := float64(100), float64(100) for iter := 0; iter < maxiter && sumd > eps && maxd > 0.5; iter++ { for i := 1; i < len(lambda); i++ { lastCenters[i] = lambda[i] binned[i] = binned[i][:0] } binned[0] = binned[0][:0] //fmt.Println(getCNs(depths, centers), centers) // MAXIMIZATION // put samples in the bin they are closest 2. for _, df := range depths { d := float64(df) // most common case of copy-number 2. if d > lambda[1] && d < lambda[3] { if abs(d-lambda[2]) < abs(d-lambda[1]) && abs(d-lambda[2]) < abs(d-lambda[3]) { binned[2] = append(binned[2], d) continue } } idx := sort.SearchFloat64s(lambda, d) if idx == 0 { binned[0] = append(binned[0], d) continue } if idx == len(lambda) { binned[idx-1] = append(binned[idx-1], d) continue } // idx will always be the index of the value >= d so we check if idx or idx-1 is better. if abs(d-lambda[idx]) < abs(d-lambda[idx-1]) { binned[idx] = append(binned[idx], d) } else { binned[idx-1] = append(binned[idx-1], d) } } // EXPECTATION: // adjust copy-number 2 depth. lambda[2] = mean64(binned[2]) if lambda[2] == 0 { n := float64(len(depths)) // we exclude the top bin to avoid over-adjusting lambda[2] for extreme outliers. for i := 1; i < len(lambda)-1; i++ { bin := binned[i] pdepth := float64(len(bin)) / n if lambda[i] < eps { lambda[i] = eps } lambda[2] += mean64(bin) * (2 / float64(i)) * pdepth } } for i := 1; i < len(lambda); i++ { // adjust the expected depths of other copy-numbers based on that from CN2. lambda[i] = lambda[2] * (float64(i) / 2) } // make CN 2 more likely by expanding the range between CN1 and CN3. span := lambda[2] - lambda[1] lambda[1] -= (span / 1.5) lambda[3] += (span / 1.5) sumd, maxd = summaxdiff(lambda, lastCenters) } binPool.Put(binned) return &EMD{Lambda: lambda, Depths: depths, Position: p} } // EMD holds the posterior maximum depth for each copy-number type EMD struct { Lambda []float64 Depths []float32 Position Position _l2 []float64 } // Same returns // 1) slice of indexes for samples that have the same (non 2 CN), // 2) a slice indicating the sample-set that has changed state in o in a way that // ends a CNV, either by going back to state2 or by switching from a state > 2 // less <2. // 3)a float indicating the proportion of samples that in the same copy-number // state in both. const lower = -0.80 const upper = 0.40 func (e *EMD) Same(o *EMD) (non2 []int, changed []int, pct float64) { ofc := o.Log2FC() var nSame float64 non2 = make([]int, 0, 2) changed = make([]int, 0, 1) for i, ee := range e.Log2FC() { oo := ofc[i] if ee > lower && ee < upper && oo > lower && oo < upper { nSame++ continue } // same direction. if (oo >= upper && ee >= upper) || (oo <= lower && ee <= lower) { non2 = append(non2, i) nSame++ } else { changed = append(changed, i) } } return non2, changed, nSame / float64(len(e.Depths)) } // Log2FC is the fold-change relative to copy-number 2. func (e *EMD) Log2FC() []float64 { if e._l2 != nil { return e._l2 } m := make([]float64, 0, len(e.Depths)) for _, d := range e.Depths { m = append(m, math.Log2(float64(d)/e.Lambda[2])) } e._l2 = m return m } // CN finds the posterior maximum CN for each sample. func (e *EMD) CN() []int { cns := make([]int, len(e.Depths)) for i, df := range e.Depths { cns[i] = e.Type(df) } return cns } // Type returns the copy-number for the given depth func (e *EMD) Type(d float32) int { df := float64(d) idx := sort.SearchFloat64s(e.Lambda, df) var cn int if idx == 0 { cn = 0 } else if idx == len(e.Lambda) { cn = len(e.Lambda) } else { // idx will always be the index of the value >= d so we check if idx or idx-1 is better. if abs(df-e.Lambda[idx]) < abs(df-e.Lambda[idx-1]) { cn = idx } else { cn = idx - 1 } } return e.adjustCN(cn, df) } // adjustCN for copy-number 1 and 3. Use poisson PMF to make sure they // are better than CN2. If not, set to CN2. func (e *EMD) adjustCN(cn int, depth float64) int { // TODO: do this for all cn +/- 1. if cn != 2 && cn < len(e.Lambda) { dk := int(0.5 + depth) o, o2 := pmf(dk, e.Lambda[cn]), pmf(dk, e.Lambda[2]) if o*0.9 < o2 { cn = 2 } } return cn } // Cache is a way to track depth states.eps // As new items are added to the cache, the value from EMD.Same // is compared. // Each time an EMD is added, a slice of Regions that have ended is returned. type Cache struct { last *EMD // for each sample (key by sample index), where is it non-CN2? cnvs map[int][]*EMD } // CNV holds the information for a CNV for a single sample. type CNV struct { SampleI int Depth []float32 Position []Position Log2FC []float32 CN []int PSize int } func (c *CNV) String() string { return fmt.Sprintf("%v %v", c.Position, c.CN) } func (c *Cache) Add(e *EMD) []*CNV { // TODO: here we check e.Position and eject anything that doesnt have and End with 3 * len(position). if c.last == nil { if c.cnvs == nil { c.cnvs = make(map[int][]*EMD, 200) } c.last = e } ret := c.Clear(&e.Position) noncn2, _, _ := c.last.Same(e) for _, si := range noncn2 { c.cnvs[si] = append(c.cnvs[si], e) } c.last = e return ret } func (c *Cache) Clear(p *Position) []*CNV { if p == nil { if c.last == nil { return nil } p = &Position{End: c.last.Position.End + 100000, Start: c.last.Position.Start + 100000} } cnvs := make([]*CNV, 0, 5) keys := make([]int, len(c.cnvs)) //L := p.End - p.Start for si, emd := range c.cnvs { // not a big enough gap yet. if p.Start-emd[len(emd)-1].Position.End < 30000 { continue } if putative := makecnvs(emd, si); putative != nil { cnvs = append(cnvs, putative) cnvs[len(cnvs)-1].PSize = len(c.cnvs) keys = append(keys, si) } } for _, key := range keys { delete(c.cnvs, key) } return cnvs } // merge individal aberrant depth calls into CNVs. func makecnvs(es []*EMD, sampleI int) *CNV { var cnv *CNV // in here, we know we have adjacent calls from same sample. var k int for _, es := range es { fc := es.Log2FC()[sampleI] if fc > -0.5 && fc < 0.3 { continue } cn := es.Type(es.Depths[sampleI]) if k == 0 { cnv = &CNV{SampleI: sampleI, CN: []int{cn}, Depth: []float32{es.Depths[sampleI]}, Position: []Position{es.Position}, Log2FC: []float32{float32(fc)}} k++ continue } cnv.CN = append(cnv.CN, cn) cnv.Depth = append(cnv.Depth, es.Depths[sampleI]) cnv.Position = append(cnv.Position, es.Position) cnv.Log2FC = append(cnv.Log2FC, float32(fc)) } return cnv } ================================================ FILE: emdepth/emdepth_test.go ================================================ package emdepth import ( "fmt" "reflect" "testing" ) var p = Position{123, 456} func TestDepth(t *testing.T) { v := []float32{1, 8, 33, 34, 35, 37, 31, 22, 66} cns := EMDepth(v, p).CN() exp := []int{0, 1, 2, 2, 2, 2, 2, 2, 4} if !reflect.DeepEqual(cns, exp) { t.Errorf("expected: %v, got: %v", exp, cns) } exp = []int{2, 2, 2, 2, 2, 2, 2, 2, 2} v = []float32{30, 28, 33, 34, 35, 37, 31, 22, 38} cns = EMDepth(v, p).CN() if !reflect.DeepEqual(cns, exp) { t.Errorf("expected: %v, got: %v", exp, cns) } } func TestBig(t *testing.T) { v := []float32{296.6, 16.7, 17.0, 3019.2, 14.4, 16.5, 14.2, 26, 7} cns := EMDepth(v, p) exp := []int{8, 2, 2, 8, 2, 2, 2, 3, 1} _ = exp if !reflect.DeepEqual(cns.CN(), exp) { t.Errorf("expected: %v, got: %v", exp, cns.CN()) } v2 := []float32{96.6, 16.7, 17.0, 319.2, 14.4, 16.5, 14.2, 7, 16} em2 := EMDepth(v2, p) idx, changed, pct := em2.Same(cns) if pct != 7./9. { t.Errorf("percent of sample with same state... expected: %v, got: %v", 7./9., pct) } if !reflect.DeepEqual(idx, []int{0, 3}) { t.Errorf("sample with non CN2 state... expected: 0, 3, got: %v", idx) } if !reflect.DeepEqual(changed, []int{7, 8}) { t.Errorf("expected change in 7,8, got: %v", changed) } fmt.Println(changed) fmt.Println(cns.Log2FC()) fmt.Println(em2.Log2FC()) } func BenchmarkEMDepth(b *testing.B) { v := []float32{296.6, 16.7, 17.0, 319.2, 14.4, 16.5, 14.2, 22, 33, 44, 66, 22, 33, 11, 15, 18, 22, 22, 44, 31, 22, 66, 22, 21, 23, 16, 17, 19} v = append(v, v...) s := 0 for i := 0; i < b.N; i++ { cns := EMDepth(v, p).CN() s += len(cns) } } ================================================ FILE: emdepth/mops/mops.go ================================================ // Package mops implements the EM algorithm described in the cn.mops paper. package mops import "math" // mean of all except highest and lowest values. func mean32(a []float32) float32 { var sum float32 for _, v := range a { sum += v } return sum / float32(len(a)) } func abs(a float64) float64 { if a < 0 { return -a } return a } func abs32(a float32) float32 { if a < 0 { return -a } return a } const maxCN = 8 const delta = 0.001 const maxiter = 10 const eps = 0.001 func pmf(k int, pmean float64) float64 { // TODO: pre-calc exp(-pmean) if math.Exp show up in bench. return math.Pow(pmean, float64(k)) * math.Exp(-pmean) / math.Gamma(float64(k+1)) } // top right of eqn 5. func pdepth(depths []float32, cn int, lambda float32, out []float32) { // i indexes copy-number, k indexes sample beta := float64(cn) / 2 * float64(lambda) if cn == 0 { beta = 0.001 / 2 * float64(lambda) } //em := math.Exp(-beta) for k, d := range depths { out[k] = float32(pmf(int(d+0.5), beta)) } } // returns a square alpha ik. func estep(alpha []float32, depths []float32, lambda float32, aik [][]float32) [][]float32 { // i index copy-numbers // k indexes sample // N is number of samples. N := len(depths) if len(aik) == 0 { // best-to-reuse as this can take a lot of memory. aik = make([][]float32, len(alpha)) for i := range aik { aik[i] = make([]float32, N) } } //expm := math.Exp(float64(-lambda)) denom := make([]float32, len(depths)) n := len(alpha) // calculte prob for cn 2. // eqn(1), eqn(5) denom. for k, d := range depths { for i := 0; i < n; i++ { denom[k] += alpha[i] * float32(pmf(int(d+0.5), float64(float32(i)/2*lambda))) } } // calculate prob for other cns. for cn := range alpha { // aik[cn] is set by this call to avoid allocation by re-use pdepth(depths, cn, lambda, aik[cn]) // eqn 5 from cn.mops. for k, ad := range aik[cn] { aik[cn][k] = alpha[cn] * ad / denom[k] } } return aik } func mstep(depths []float32, adepths [][]float32) (alpha []float32, lambda float32) { n := len(adepths) alpha = make([]float32, n) N := float32(len(depths)) // eqn 6, 7 G := float32(11) var lambdaDenom float32 ys := float32(len(alpha)) + G alphaDenom := 1 + 1/N*float32(ys-float32(n)) for cn, ai := range adepths { amean := mean32(ai) yi := float32(1) if cn == 2 { yi = 1 + G } top := amean + 1/N*(yi-1) alpha[cn] = top / alphaDenom // eqn 7 if cn == 0 { lambdaDenom += amean * eps / 2 } else { lambdaDenom += amean * float32(cn) / 2 } } return alpha, mean32(depths) / lambdaDenom } type Mopped struct { aik [][]float32 alpha []float32 } func (m *Mopped) Gain() float32 { // cn.mops eqn(8) var ig float32 for i, ai := range m.aik { v := float64(i) if i == 0 { v = float64(eps) } ig += mean32(ai) * float32(abs(math.Log(float64(v/2)))) } return ig } func Mops(depths []float32) *Mopped { // alpha[i] is percentage of samples with CNi // lambda is mean read-count for CN2 // x is depth // p(x|i) is likely that read-count x is from CNi == 1/x! * e^-(i/2 * lambda) * i/2*lambda alpha := make([]float32, maxCN) for i := 0; i < len(alpha); i++ { alpha[i] = eps } alpha[2] = 1.0 - 5*eps*float32(len(alpha)-1) nlambda := mean32(depths) lambda := float32(math.MaxFloat32) / 10.0 var aik [][]float32 // em iterations. for n := 0; abs32(lambda-nlambda) > 0.01 && n < 10; n++ { lambda = nlambda aik = estep(alpha, depths, lambda, aik) alpha, nlambda = mstep(depths, aik) } return &Mopped{aik: aik, alpha: alpha} } func CNINI(cns []int, depths []float32, centers []float64) float32 { var in float32 for i, cni := range cns { if cni == 0 { continue } v := float32(i) if v == 0 { v = eps } in += float32(cni) / float32(abs(math.Log(float64(v/2)))) } return in } ================================================ FILE: emdepth/mops/mops_test.go ================================================ package mops_test import ( "reflect" "testing" "github.com/brentp/goleft/emdepth/mops" ) func TestDepth(t *testing.T) { v := []float32{1, 8, 33, 34, 35, 37, 31, 22, 66} cns := mops.Mops(v) exp := []int{0, 1, 2, 2, 2, 2, 2, 2, 4} if !reflect.DeepEqual(cns, exp) { t.Errorf("expected: %v, got: %v", exp, cns) } exp = []int{2, 2, 2, 2, 2, 2, 2, 2, 2} v = []float32{30, 28, 33, 34, 35, 37, 31, 22, 38} cns = mops.Mops(v) if !reflect.DeepEqual(cns, exp) { t.Errorf("expected: %v, got: %v", exp, cns) } } func TestBig(t *testing.T) { v := []float32{296.6, 16.7, 17.0, 319.2, 14.4, 16.5, 14.2} cns := mops.Mops(v) exp := []int{8, 2, 2, 8, 2, 2, 2} if !reflect.DeepEqual(cns, exp) { t.Errorf("expected: %v, got: %v", exp, cns) } } func TestMops(t *testing.T) { v := []float32{93, 34, 33, 34, 35, 37, 33, 36, 32} _ = mops.Mops(v) } ================================================ FILE: emdepth/stats.go ================================================ package emdepth import "math" var gammas []float64 func init() { gammas = make([]float64, 1000) for i := 0; i < 1000; i++ { gammas[i], _ = math.Lgamma(float64(i + 1)) } } func pmf(k int, mu float64) float64 { sign := 1 var lg float64 if k < len(gammas) { lg = gammas[k] } else { lg, sign = math.Lgamma(float64(k + 1)) } return math.Exp(float64(k)*math.Log(mu) - float64(sign)*lg - mu) } func cdf(mu float64, k int) float64 { var tot float64 for ; k >= 0; k-- { tot += pmf(k, mu) } return tot } ================================================ FILE: go.mod ================================================ module github.com/brentp/goleft go 1.21.5 require ( github.com/JaderDias/movingmedian v0.0.0-20220813210630-d8c6b6de8835 github.com/alexflint/go-arg v1.4.3 github.com/biogo/biogo v1.0.4 github.com/biogo/hts v1.4.4 github.com/biogo/store v0.0.0-20201120204734-aad293a2328f github.com/brentp/faidx v0.0.0-20200301150453-c39eb85760d8 github.com/brentp/gargs v0.3.9 github.com/brentp/go-chartjs v0.0.0-20170901194241-a37b166b7875 github.com/brentp/smoove v0.2.8 github.com/brentp/xopen v0.0.0-20220602092336-8ece9a01569d github.com/fatih/color v1.16.0 go4.org v0.0.0-20230225012048-214862532bf5 gonum.org/v1/gonum v0.14.0 gonum.org/v1/plot v0.14.0 ) require ( git.sr.ht/~sbinet/gg v0.5.0 // indirect github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect github.com/alexflint/go-scalar v1.1.0 // indirect github.com/campoy/embedmd v1.0.0 // indirect github.com/edsrzf/mmap-go v1.0.0 // indirect github.com/go-fonts/liberation v0.3.1 // indirect github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect github.com/go-pdf/fpdf v0.8.0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect golang.org/x/image v0.11.0 // indirect golang.org/x/sys v0.14.0 // indirect golang.org/x/text v0.12.0 // indirect ) ================================================ FILE: go.sum ================================================ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo= git.sr.ht/~sbinet/cmpimg v0.1.0/go.mod h1:FU12psLbF4TfNXkKH2ZZQ29crIqoiqTZmeQ7dkp/pxE= git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/JaderDias/movingmedian v0.0.0-20220813210630-d8c6b6de8835 h1:mbxQnovjDz5SvlatpxkbiMvybHH1hsSEu6OhPDLlfU8= github.com/JaderDias/movingmedian v0.0.0-20220813210630-d8c6b6de8835/go.mod h1:zsfWLaDctbM7aV1TsQAwkVswuKQ0k7PK4rjC1VZqpbI= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/alexflint/go-arg v1.4.2/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM= github.com/alexflint/go-arg v1.4.3 h1:9rwwEBpMXfKQKceuZfYcwuc/7YY7tWJbFsgG5cAU/uo= github.com/alexflint/go-arg v1.4.3/go.mod h1:3PZ/wp/8HuqRZMUUgu7I+e1qcpUbvmS258mRXkFH4IA= github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw= github.com/alexflint/go-scalar v1.1.0 h1:aaAouLLzI9TChcPXotr6gUhq+Scr8rl0P9P4PnltbhM= github.com/alexflint/go-scalar v1.1.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o= github.com/biogo/biogo v1.0.3/go.mod h1:WlqzR+oIOt6UKRqDbDsbLm7zHe4+FLLDd9iFTrnfloc= github.com/biogo/biogo v1.0.4 h1:I+FV8WHty5o6pk1VWZxwFETJDcd25GKcGsghMTeQgCY= github.com/biogo/biogo v1.0.4/go.mod h1:WlqzR+oIOt6UKRqDbDsbLm7zHe4+FLLDd9iFTrnfloc= github.com/biogo/boom v0.0.0-20150317015657-28119bc1ffc1 h1:LAHY5JxqhOgJDeDBGKsQ4300qd3sG8C0j5CQS8gD+Kw= github.com/biogo/boom v0.0.0-20150317015657-28119bc1ffc1/go.mod h1:fwtxkutinkQcME9Zlywh66T0jZLLjgrwSLY2WxH2N3U= github.com/biogo/graph v0.0.0-20150317020928-057c1989faed/go.mod h1:UuyD2swDzTz1ChZTQld42mP5pyePLSDccmGycTpxRew= github.com/biogo/hts v1.1.0/go.mod h1:6C9MdMt9ALD5PsluK5n0B0svHOpmVse3UjQQx/cTgOw= github.com/biogo/hts v1.4.3/go.mod h1:eW40HJ1l2ExK9C+yvvoRSftInqWsf3ue+zAEjzCGWjA= github.com/biogo/hts v1.4.4 h1:Z+TminqAKRE/t6nyy5PwI/DL90kdew4GpghB+QdjjFk= github.com/biogo/hts v1.4.4/go.mod h1:AfPn4uJQ2zxi04Q/4vccdmCX16W+IsHXVguPsdh4HE4= github.com/biogo/store v0.0.0-20200104231603-2c6ad937eb83/go.mod h1:wdbXg77soR6ESRprAMEwAQDFtLT6EAGF5o1GRy0cB5k= github.com/biogo/store v0.0.0-20201120204734-aad293a2328f h1:+6okTAeUsUrdQr/qN7fIODzowrjjCrnJDg/gkYqcSXY= github.com/biogo/store v0.0.0-20201120204734-aad293a2328f/go.mod h1:z52shMwD6SGwRg2iYFjjDwX5Ene4ENTw6HfXraUy/08= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/brentp/faidx v0.0.0-20200301150453-c39eb85760d8 h1:8vtWhuvR/u/bgIR+2z77tkXiyNSsgRRPJQCmeaUsp8c= github.com/brentp/faidx v0.0.0-20200301150453-c39eb85760d8/go.mod h1:nug5D4YtdNZnLp5GNeHRjI+aIlmM6Fz2XAf2g5lLiGQ= github.com/brentp/gargs v0.3.9 h1:d0shxMahZWCkGBprDR1ekUc+KnkOkKfs5nPWlO0eUZU= github.com/brentp/gargs v0.3.9/go.mod h1:OIniVrezPEprgmMRsVJDsovXJIA9oqsuVCRBvYXQlXM= github.com/brentp/go-athenaeum v0.0.0-20180711164918-19f838fd53de/go.mod h1:UgccWdwjTFk8ICpYVJKGOcUCB9ccmiD7+wVRD0e0HEg= github.com/brentp/go-chartjs v0.0.0-20170901194241-a37b166b7875 h1:EqIvlodHPEPIzTN8PBjkDByV7jTdsakF65QocHrroaU= github.com/brentp/go-chartjs v0.0.0-20170901194241-a37b166b7875/go.mod h1:bGMnZsAx8j/XKTLruyqd198RkVpUCA0EoUbTEYStmgE= github.com/brentp/goleft v0.2.5/go.mod h1:ruUWxBiZDHkKWquY3a9GrA53aMVkHD1EzU0eOKiDxUE= github.com/brentp/irelate v0.0.1/go.mod h1:Ct+JzyZC+JSi9WUkw3IGWc/j0yYEt4235wKCfLOKN54= github.com/brentp/smoove v0.2.8 h1:zNjs5/WEZeLfYZTQtAtrSTWU9xl+ZOpp69e9ncLVWes= github.com/brentp/smoove v0.2.8/go.mod h1:bo2vnaGD7yh0N71Ar8SxZa+G34ua4b8kmjB6VSxa0e4= github.com/brentp/vcfgo v0.0.0-20190824021612-654ed2e5945d/go.mod h1:nN0Qx/D3CzwA4yLg2N7jbtSfJ7AUFU2I3J7gq/CmNfc= github.com/brentp/xopen v0.0.0-20181116180855-111b45cadc7d/go.mod h1:e9h4TyB6lQQXv8+zIg6/OskMHMuNXeyo4Ezw/47wWi0= github.com/brentp/xopen v0.0.0-20220602092336-8ece9a01569d h1:rqd1bH+SuYDvHKLkGMfVPPq9AmgRAFE0XaXgjPzY7zQ= github.com/brentp/xopen v0.0.0-20220602092336-8ece9a01569d/go.mod h1:e9h4TyB6lQQXv8+zIg6/OskMHMuNXeyo4Ezw/47wWi0= github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= github.com/go-fonts/latin-modern v0.3.1 h1:/cT8A7uavYKvglYXvrdDw4oS5ZLkcOU22fa2HJ1/JVM= github.com/go-fonts/latin-modern v0.3.1/go.mod h1:ysEQXnuT/sCDOAONxC7ImeEDVINbltClhasMAqEtRK0= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/liberation v0.3.1 h1:9RPT2NhUpxQ7ukUvz3jeUckmN42T9D9TpjtQcqK/ceM= github.com/go-fonts/liberation v0.3.1/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs= github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= github.com/go-pdf/fpdf v0.8.0 h1:IJKpdaagnWUeSkUFUjTcSzTppFxmv8ucGQyNPQWxYOQ= github.com/go-pdf/fpdf v0.8.0/go.mod h1:gfqhcNwXrsd3XYKte9a7vM3smvU/jB4ZRDrmWSxpfdc= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jupp0r/go-priority-queue v0.0.0-20160601094913-ab1073853bde/go.mod h1:RDgD/dfPmIwFH0qdUOjw71HjtWg56CtyLIoHL+R1wJw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kortschak/utter v0.0.0-20190412033250-50fe362e6560/go.mod h1:oDr41C7kH9wvAikWyFhr6UFr8R7nelpmCF5XR5rL7I8= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kyroy/kdtree v0.0.0-20200419114247-70830f883f1d/go.mod h1:6oJGQK7VSg3RxSQ7QspgqpCmKjIbAslgT2wBXbFJUZw= github.com/kyroy/priority-queue v0.0.0-20180327160706-6e21825e7e0c/go.mod h1:R477L6j2/dUcE0q0aftk0kR5Xt93W7g1066AodcJhEo= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc= go4.org v0.0.0-20230225012048-214862532bf5/go.mod h1:F57wTi5Lrj6WLyswp5EYV1ncrEbFGHD4hhz6S1ZYeaU= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI= golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.11.0 h1:ds2RoQvBvYTiJkwpSFDwCcDFNX7DqjL2WsUgTNk0Ooo= golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= ================================================ FILE: goleft.go ================================================ package goleft const Version = "0.2.6" ================================================ FILE: indexcov/README.md ================================================ indexcov ======== Quickly estimate coverage from a *whole-genome* bam or [**cram**](#CRAM) index. A bam index has 16KB resolution so that's what this gives, but it provides what appears to be a high-quality coverage estimate in seconds per genome. The output is scaled to around 1. So a long stretch with values of 1.5 would be a heterozygous duplication. This is useful as a quick QC to get coverage values across the genome. In our tests, we can **estimate depth across 60X genomes for 30 samples in 30 seconds**. Interactive HTML plots of depth are output for each chromosome. **Live examples of the interactive output are available [here](http://indexcov.s3-website-us-east-1.amazonaws.com/)** Usage ===== ``` goleft indexcov --directory my-project-dir/ *.bam ``` This will create a number of text files described in the [Files](#Files) section below. In addition, it will write a few `.html` files containing interactive plots. For example, if we view the $prefix-indexcov-depth-X.html file for **X chromosome** we can see a nice separation of samples by sex except at the PAR at the left: ![X Example](https://cloud.githubusercontent.com/assets/1739/21597648/074f06ca-d10b-11e6-8732-e9a2e8d1ecb5.png "x example") That plot is taken directly from the HTML output by `indexcov`. Using that separation, `indexcov` infers the copy-number of the sex chromosomes, outputs a stub .ped/.fam file with that information, and makes a plot like this one: ![Sex Example](https://cloud.githubusercontent.com/assets/1739/21627994/2973d464-d1d9-11e6-9962-5d3ac0f80329.png "sex example") Where here the males and females separate by the X and Y chromosomes perfectly. In some cases, we have found *XXY* and *XYY* samples this way. `indexcov` will output a coverage (ROC) plot that shows how much of the genome is coverage at at given (scaled) depth. This is output to a $prefix-depth-roc.html file and looks like: ![ROC Example](https://cloud.githubusercontent.com/assets/1739/21599983/b27fa4d8-d132-11e6-95b9-e9fa8ae64412.png "ROC example") Here we can see that one sample has much lower coverage than the rest, and we can hover and determine the exact sample. Finally, `indexcov` will output a `$prefix-indexcov-bins.html` file with a point per sample. Samples with high values on the y-axis have very uneven coverage (this will affect SV calling). Samples with high values on There x-axis have many missing bins (likely truncated bam files). CRAM ======================== CRAM indexes are supported. Since there is not a full CRAM parser available in go yet, `indexcov` uses only the .crai files and requires a `.fasta.fai` to be sent via `--fai` so that it knows the chromosome names and lengths. The sample names are inferred from the file names. crai resolution is often much less than 100KB (compared to) 16KB for the bam index, but it is sufficient to find large-scale differences in coverage. Example usage with cram looks like: ``` goleft indexcov --extranormalize -d output/ --fai h human_g1k_v37.fasta.fai /path/to/*.crai ``` **note** that the .fai (not the fasta) is required and that the files are .crai (not cram). The `--extranormalize` flag greatly improves the results on CRAM (crai) files. # BAI only If the BAM file itself is not available, you can pass the BAI only. Similar to CRAI, the BAI only mode requires a `.fasta.fai` to be sent via `--fai` so that it knows the chromosome names and lengths. The sample names are inferred from the file names. Example usage with BAI files looks like: ``` goleft indexcov --extranormalize -d output/ --fai human_g1k_v37.fasta.fai /path/to/*.bai ``` **note** that the .fai (not the fasta) is required when passing the BAI How It Works ============ The bam index stores a linear index for each chromosome indicating the file (and virtual) offset for every 16,384 bases in that chromosome. Since we know the total number of 16,384 base intervals in the index and the size of the bam file (from the last file offset stored in the index), we know the average size (in bytes) of taken by each 16,384 base chunk. So, we iterate over each (16KB) element in the linear index, subtract the previous file offset, and scale by the expected (average) size. This gives the scaled value for each 16,384-base chunk. There are many ways that this value can be off, but, in practice, it works well as a rough estimate. Because of this `indexcov` is of less-use on exome or targetted capture, but those will be very fast to run with `goleft depth` anyway. Files ========================== In addition to the interactive HTML files, `indexcov` outputs a number of text files: + `$prefix-indexcov.ped`: a .ped/.fam file with the inferred sex in the appropriate column if the sex chromosomes were found. the CNX and CNY columns indicating the floating-point estimate of copy-number for those chromosomes. `bins.out`: how many bins had a coverage value outside of (0.85, 1.15). high values can indicate high-bias samples. `bins.lo`: number of bins with value < 0.15. high values indicate missing data. `bins.hi`: number of bins with value > 1.15. `bins.in`: number of bins with value inside of (0.85, 1.15) `p.out`: `bins.out/bins.in` `PC1...PC5`: PCA projections calculated with depth of autosomes. + `$prefix-indexcov.roc`: tab-delimited columns of chrom, scaled coverage cutoff, and $n_samples columns where each indicates the proportion of 16KB blocks at or above that scaled coverage value. + `$prefix-indexcov.bed.gz`: a bed file with columns of chrom, start, end, and a column per sample where the values indicate there scaled coverage for that sample in that 16KB chunk. ================================================ FILE: indexcov/anonymize/README.md ================================================ this is a small tool to create a new stub bam file with **all real readgroups and data removed** so users can share the full bam index but a (small) bam file containing only a spartan header. The index is left unchanged and just copied to a new file with an unformative name. usage is like: ``` anonymize-for-indexcov test1 *.bam ``` this will create sample\_test1\_0001.bam, sample\_test1\_0001.bam.bai ... sample\_test1\_$n.bam, sample\_test1\_$n.bam.bai which can be shared. ================================================ FILE: indexcov/anonymize/main.go ================================================ package main import ( "fmt" "log" "os" "os/exec" "strconv" "time" "github.com/biogo/hts/bam" "github.com/biogo/hts/sam" "github.com/brentp/xopen" ) func main() { if len(os.Args) < 3 { fmt.Println("\nUsage: anonymize-for-indexcov name *.bam.\n\nThis will create files like sample_0001.bam through sample_$name_$n.bam with read-groups and file names changed as well.\n") os.Exit(1) } if xopen.Exists(os.Args[1]) { log.Fatal("send (arbitrary) name as 1st argument. must not be an exisiting file.") } for i := 2; i < len(os.Args); i++ { f, err := os.Open(os.Args[i]) if err != nil { panic(err) } name := fmt.Sprintf("sample_%s_%04d", os.Args[1], i-1) br, err := bam.NewReader(f, 1) if err != nil { panic(err) } defer f.Close() defer br.Close() rgs := br.Header().RGs() hdr := br.Header().Clone() if len(rgs) == 0 { fmt.Fprintf(os.Stderr, "no readgroups in %s\n", os.Args[i]) } rg, err := sam.NewReadGroup(name, "", strconv.Itoa(i-1), "XX", "indexcov-anon", "illumina", "", name, "", "", time.Now(), 1000) if err != nil { panic(err) } if err := hdr.AddReadGroup(rg); err != nil { panic(err) } fo, err := os.Create(fmt.Sprintf("%s.bam", name)) if err != nil { panic(err) } defer fo.Close() o, err := bam.NewWriter(fo, hdr, 1) if err != nil { panic(err) } if err := o.Close(); err != nil { panic(err) } bai := "" if _, err := os.Stat(f.Name() + ".bai"); err == nil { bai = f.Name() + ".bai" } else if _, err := os.Stat(f.Name()[:len(f.Name())-4] + ".bai"); err == nil { bai = f.Name()[:len(f.Name())-4] + ".bai" } if bai == "" { panic(fmt.Sprintf("unable to find bam index for %s", f.Name())) } if err := exec.Command("cp", "-f", bai, fmt.Sprintf("%s.bam.bai", name)).Run(); err != nil { panic(err) } fmt.Printf("wrote: %s.bam\n", name) } } ================================================ FILE: indexcov/crai/README.md ================================================ read a crai and output sizes. the python scripts in this directory simplify comparing the output of samtools depth with the output of crai. e.g. ``` samtools depth xx/phase3/data/NA21144/alignment/NA21144.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam.cram > t.out cat t.out | python agg.py > real.bed python plot-vs-with-st-depth.py real.bed o.bed ``` where o.bed is from the crai.Sizes() (and the output of running go test in this directory). ================================================ FILE: indexcov/crai/crai.go ================================================ package crai import ( "bufio" "fmt" "io" "log" "strconv" "strings" ) // note: for index cov, just need alnStart, alnSpan and sliceLen // will need to scale sliceLen by 16384/alnSpan and then artifically partition // into 16KB chunks? // Slice holds the index information for a particular cram slice type Slice struct { alnStart int64 alnSpan int64 // Container start byte offset in the file containerStart int64 // Slice start byte offset in the container data (‘blocks’) sliceStart int64 sliceLen int32 } func (s Slice) Start() int64 { return s.alnStart } func (s Slice) SliceBytes() int32 { return s.sliceLen } func (s Slice) Span() int64 { return s.alnSpan } type Index struct { Slices [][]Slice } const TileWidth = 16384 func (idx *Index) Sizes() [][]int64 { refs := make([][]int64, len(idx.Slices)) for i, s := range idx.Slices { refs[i] = idx.makeSizes(s) } return refs } // estimate the sizes (in arbitrary units of 16KB blocks from the cram index. // the index has arbitrary slice sizes so this function interpolates the 16KB // blocks. func (idx *Index) makeSizes(slices []Slice) []int64 { // each slice may be hundreds of KB. This function splits those into 16KB chunks to match the // bam index. If we have e.g. start, end, size: 10000, 30000, 100 // then we have to back fill from 0-10000 if len(slices) == 0 { return nil } last := slices[len(slices)-1] if last.alnSpan < 0 { last.alnSpan = 0 } if last.alnSpan > 1000000 { last.alnSpan = 0 } sizes := make([]int64, 0, (last.Start()+last.Span()+TileWidth)/TileWidth) lastStart := int64(0) lastVal := int64(0) //unusedBytes := int32(0) for _, sl := range slices { // back fill gaps for k := 0; lastStart < sl.Start()-TileWidth; lastStart += TileWidth { if k == 0 { sizes = append(sizes, lastVal) lastVal = 0 } else { sizes = append(sizes, 0) } k++ } overhang := (sl.Start() - lastStart) if overhang > TileWidth { panic("tilewidth logic error") } for overhang < -TileWidth { // can get here with long reads if a read from the previous slice // extended > tileWidth into the next slice. // could get slightly better by taking average, but should be pretty close // as long as the cram slices are largish. sl.alnStart += TileWidth sl.alnSpan -= TileWidth overhang = (sl.Start() - lastStart) } if sl.alnSpan <= 0 { // if we did so much correction for overlapping bins above that alnSpan // becomes negative, then just skip this bin. continue } // 100000 is an arbitrary scalar to make sure we have enough resolution. perBase := int64(100000 * float64(sl.SliceBytes()) / float64(int64(sl.Span()))) nTiles := int64(float64(sl.Span()) / float64(TileWidth)) if nTiles == 0 && sl.Start()-lastStart < TileWidth { lastVal = perBase continue } for i := 0; i < int(nTiles); i++ { sizes = append(sizes, perBase) } cmp := int(sl.Start()+sl.Span()) / TileWidth if len(sizes) > cmp+1 || cmp < len(sizes)-1 { log.Println(len(sizes), cmp, overhang, sl.alnSpan) panic("logic error") } lastStart += TileWidth * nTiles lastVal = perBase } return sizes } func ReadIndex(r io.Reader) (*Index, error) { b := bufio.NewReader(r) idx := &Index{Slices: make([][]Slice, 0, 2)} iline := 1 for line, err := b.ReadString('\n'); err == nil; line, err = b.ReadString('\n') { parts := strings.Split(strings.TrimSpace(line), "\t") if len(parts) != 6 { return nil, fmt.Errorf("crai: expected 6 fields in index, got %d at line %d", len(parts), iline) } si, err := strconv.Atoi(parts[0]) if err != nil { return nil, fmt.Errorf("crai: unable to parse seqID (%s) at line %d", parts[0], iline) } if si == -1 { // TODO: handle unmapped. continue } for i := len(idx.Slices); i <= si; i++ { idx.Slices = append(idx.Slices, make([]Slice, 0, 16)) } sl := Slice{} if alnStart, err := strconv.Atoi(parts[1]); err != nil { return nil, fmt.Errorf("crai: unable to parse alignment start (%s) at line %d", parts[1], iline) } else { sl.alnStart = int64(alnStart) } if alnSpan, err := strconv.Atoi(parts[2]); err != nil { return nil, fmt.Errorf("crai: unable to parse alignment span (%s) at line %d", parts[2], iline) } else { if alnSpan < 0 { log.Printf("crai: negative alnSpan in line %d: %s. breaking early.", iline, line) break } sl.alnSpan = int64(alnSpan) } if containerStart, err := strconv.Atoi(parts[3]); err != nil { return nil, fmt.Errorf("crai: unable to parse alignment container start (%s) at line %d", parts[3], iline) } else { sl.containerStart = int64(containerStart) } if sliceStart, err := strconv.Atoi(parts[4]); err != nil { return nil, fmt.Errorf("crai: unable to parse alignment slice start (%s) at line %d", parts[4], iline) } else { sl.sliceStart = int64(sliceStart) } if sliceLen, err := strconv.Atoi(parts[5]); err != nil { return nil, fmt.Errorf("crai: unable to parse alignment slice length (%s) at line %d", parts[5], iline) } else { sl.sliceLen = int32(sliceLen) } idx.Slices[si] = append(idx.Slices[si], sl) iline++ } return idx, nil } ================================================ FILE: indexcov/crai/crai_test.go ================================================ package crai_test import ( "fmt" "strings" "testing" "github.com/brentp/goleft/indexcov/crai" ) func TestCrai(t *testing.T) { s := strings.NewReader(`0 1 2 3 4 5 0 10 20 30 40 50 `) cr, err := crai.ReadIndex(s) if err != nil { t.Fatal(err) } if len(cr.Slices) != 1 { t.Fatalf("expected 1 chromosome, got %d", len(cr.Slices)) } sl := cr.Slices[0] if len(sl) != 2 { t.Fatalf("expected 2 slices, got %d", len(sl)) } for _, t := range sl { _, _, _ = t.Start(), t.Span(), t.SliceBytes() } } // 1146880 var idx = `0 10000 98379 36840 1620 376975 0 108293 223811 415455 1235 340259 0 332008 216930 756971 1581 339687 0 548839 19350 1098262 1169 352877 0 568089 106488 1452331 1368 345918 0 674487 90494 1799640 1409 365740 0 764899 125730 2166812 1712 350645 0 890534 140973 2519192 1486 364685 0 1031414 139590 2885386 1588 356302 0 1170919 140119 3243299 1572 359060 0 1310940 137115 3603954 1529 365674 0 1448024 133108 3971180 1835 363843 0 1581038 137289 4336881 1750 369761 0 1718228 136278 4708415 1548 335329 0 1854421 123464 5045315 1402 353039 0 1977820 127030 5399779 1608 350448 0 2104772 129146 5751858 1563 348622 0 2233827 127856 6102067 1455 349386 0 2361588 129725 6452932 1261 356680 0 2491213 101511 6810897 1501 365948 0 2592624 28814 7178370 1358 397107 0 2621348 150582 7576859 1476 369734 0 2771851 119185 7948093 1258 342981 0 2890957 124205 8292356 1243 341129 0 3015072 123311 8634752 1439 348721 0 3138297 118843 8984936 1593 344954 0 3257052 127723 9331507 1347 344047 0 3384716 119494 9676925 1294 357167 0 3504120 128298 10035410 1414 346775 0 3632331 126302 10383623 1525 342429 0 3758552 274674 10727601 1614 337424 0 4033134 117718 11066663 1594 337403 0 4150756 120352 11405684 1606 333740 0 4271012 125762 11741054 1743 323584 0 4396681 118868 12066405 1311 323366 0 4515486 123210 12391106 1265 319824 0 4638603 120369 12712219 1520 332580 0 4758884 123362 13046343 1433 328811 0 4882163 119054 13376611 1619 319867 0 5001119 124311 13698121 1696 315595 0 5125364 128076 14015436 1624 315283 0 5253347 120690 14332367 1436 319389 0 5373958 116817 14653216 1610 318628 0 5490695 120899 14973478 1332 320077 0 5611504 120480 15294911 1850 322617 0 5731904 119029 15619402 1595 330318 0 5850846 113350 15951339 1597 340137 0 5964111 122145 16293097 1385 333181 0 6086160 126699 16627687 1344 341799 0 6212770 133028 16970854 1577 343277 0 6345707 130302 17315732 1532 342423 0 6475915 134951 17659711 1586 347598 0 6610772 131820 18008919 1592 340399 0 6742493 142259 18350934 1669 326444 0 6884663 124995 18679071 1483 320083 0 7009578 128186 19000661 1287 327744 0 7137666 120030 19329716 1589 323926 0 7257601 126671 19655255 1703 319685 0 7384175 121696 19976667 1976 332125 0 7505779 120973 20310792 1356 336230 0 7626682 115847 20648402 1672 338414 0 7742438 131032 20988512 1412 317677 0 7873372 131251 21307625 1551 320147 0 8004547 134702 21629347 1572 324015 0 8139149 135476 21954958 1618 329084 0 8274525 136750 22285684 1700 340582 0 8411190 127765 22627990 1549 321197 0 8538872 133492 22950760 1520 308348 0 8672266 127187 23260652 1437 309313 0 8799372 131584 23571426 1458 318471 0 8930860 128611 23891379 1660 332559 0 9059378 127131 24225622 1536 335656 0 9186411 130194 24562838 1472 337544 0 9316505 124536 24901878 1469 340396 0 9440952 127726 25243767 1500 337049 0 9568598 141719 25582340 1627 340949 0 9710221 133996 25924940 1664 336823 0 9844121 135187 26263451 1534 333708 0 9979217 140316 26598717 1633 334390 0 10119441 135019 26934764 1609 323217 0 10254373 134924 27259614 1455 316355 0 10389214 128926 27577448 1417 327449 0 10518042 136203 27906338 1614 323743 0 10654170 133162 28231719 1317 340278 0 10787233 132363 28573338 1497 337946 0 10919497 139654 28912805 1479 337748 0 11059065 132698 29252056 1792 335305 0 11191675 129656 29589177 1584 319516 0 11321276 129265 29910301 1562 336638 0 11450451 122715 30248525 1598 330873 0 11573071 120747 30581020 1444 333986 0 11693728 130360 30916474 1469 339153 0 11823991 123116 31257120 1430 337234 0 11947009 136104 31595808 1708 341470 0 12083015 134121 31939010 1567 337773 0 12217046 125235 32278374 1442 328336 0 12342184 125910 32608176 1501 309340 0 12468023 128067 32919041 1381 318171 0 12596001 129826 33238617 1536 332458 0 12725728 120211 33572635 1540 318404 0 12845852 180913 33892603 1822 385639 0 13026751 193054 34280088 1521 373550 0 13219744 278442 34655183 1606 390541 0 13498096 261376 35047354 1499 383871 0 13759375 139139 35432748 1596 336999 0 13898433 132644 35771367 1675 324553 0 14030993 127855 36097619 1624 318606 0 14158764 125722 36417873 1559 313294 0 14284393 120888 36732750 1573 311154 0 14405198 122270 37045501 1461 313614 0 14527375 120685 37360600 1625 307387 0 14647972 120448 37669636 1846 314702 0 14768327 126877 37986208 1554 315066 0 14895110 124435 38302852 1357 320150 0 15019451 120243 38624383 1780 326472 0 15139606 121377 38952659 1430 327047 0 15260885 125905 39281160 1396 334528 0 15386691 127795 39617108 1551 330634 0 15514402 124196 39949317 1576 326422 0 15638501 131727 40277339 1684 329656 0 15770128 134594 40608703 1538 329025 0 15904632 132167 40939290 1471 326325 0 16036721 143719 41267110 1636 341469 0 16180343 134667 41610239 1521 323024 0 16314912 128708 41934808 1612 346945 0 16443521 130188 42283389 1421 341259 0 16573611 140706 42626093 1488 326262 0 16714238 122851 42953867 1623 342607 0 16836990 56350 43298121 1682 364620 0 16893240 38344 43664447 1620 351089 0 16931488 34562 44017180 1581 350140 0 16965951 56950 44368925 1743 382390 0 17022806 51941 44753082 1919 371560 0 17074648 102243 45126585 1498 367099 0 17176793 84066 45495206 2072 365636 0 17260784 123192 45862938 1738 343847 0 17383896 124299 46208547 1590 331221 0 17508096 125537 46541382 1472 333015 0 17633554 128725 46875893 1699 338509 0 17762197 138249 47216125 1575 338019 0 17900383 118002 47555743 1302 335947 0 18018301 124842 47893016 1606 329257 0 18143047 117392 48223903 1510 323080 0 18260345 118877 48548517 1568 327320 0 18379136 119512 48877429 1564 328883 0 18498549 116652 49207900 1366 324878 0 18615104 114931 49534168 1744 327737 0 18729942 121752 49863673 1632 319702 0 18851622 129914 50185031 1515 329613 0 18981440 122962 50516183 1522 328620 0 19104309 116009 50846349 1458 335808 0 19220322 122864 51183639 1569 334383 0 19343131 128481 51519615 1414 323724 0 19471522 125783 51844777 1425 321161 0 19597217 123320 52167387 1716 335798 0 19720437 123959 52504925 1717 327931 0 19844298 135030 52834597 1648 326199 0 19979229 125831 53162468 1411 329689 0 20104964 130883 53493592 1452 318283 0 20235761 121191 53813351 1664 318562 0 20356869 120008 54133601 1181 320739 0 20476786 125569 54455545 1618 324297 0 20602272 119638 54781484 1459 326087 0 20721827 126216 55109054 1438 325701 0 20847968 132328 55436217 1596 328716 0 20980217 129820 55766553 1628 330752 0 21109952 135858 56098957 1834 312722 0 21245716 133008 56413537 1645 305135 0 21378670 145007 56720341 1763 317179 0 21523577 124960 57039307 1528 334865 0 21648448 132127 57375724 1912 338920 0 21780503 126885 57716580 1768 336635 0 21907296 125927 58055007 1529 336941 0 22033162 134424 58393501 1620 329337 0 22167491 126422 58724482 1673 342363 0 22293815 136798 59068542 1823 339536 0 22430545 124881 59409925 1512 331601 0 22555331 122989 59743062 1476 331213 0 22678264 121469 60075775 1650 319197 0 22799637 119769 60396646 1440 325811 0 22919328 120880 60723921 1506 332451 0 23040151 121567 61057902 1476 331124 0 23161620 120925 61390526 1562 330808 0 23282458 129291 61722920 1596 314333 0 23411653 131186 62038873 1486 321528 0 23542750 140221 62361911 1688 320914 0 23682890 129770 62684537 1641 331197 0 23812621 130588 63017399 1740 334262 0 23943120 133457 63353425 1797 330272 0 24076482 136720 63685518 1899 335286 0 24213115 192739 64022727 2040 354522 0 24405758 123908 64379313 1721 329944 0 24529601 125022 64711002 1573 325582 0 24654523 120479 65038181 1666 319348 0 24774909 130974 65359219 1657 323252 0 24905787 135988 65684152 1668 327689 0 25041692 141106 66013533 1725 321809 0 25182720 127162 66337091 1386 333489 0 25309797 120930 66671990 1563 334787 0 25430629 128512 67008364 1443 324474 0 25559057 160119 67334305 1577 343559 0 25719093 135729 67679465 1755 328266 0 25854722 124097 68009510 1671 328928 0 25978720 121334 68340133 1404 328949 0 26099977 130567 68670510 1515 329509 0 26230444 133509 69001558 1658 328378 0 26363882 129282 69331618 1406 326186 0 26493092 128283 69659234 1654 334164 0 26621279 138438 69995076 1614 334586 0 26759621 132598 70331300 1787 331896 0 26892125 146296 70665007 1675 329879 0 27038346 129293 70996586 1653 324469 0 27167541 132715 71322733 1579 336984 0 27300161 136510 71661321 1710 339103 0 27436572 136693 72002159 1687 330886 0 27573197 131549 72334757 1597 333197 0 27704689 136884 72669576 1680 328312 0 27841519 131362 72999593 1326 335748 0 27972794 134343 73336692 1598 324882 0 28107066 131720 73663197 1817 325813 0 28238710 134120 73990852 1582 319574 0 28372742 135080 74312033 1700 324486 0 28507732 139078 74638244 1628 327348 0 28646718 144368 74967245 1691 324350 0 28791016 137939 75293311 1823 336174 0 28928856 146271 75631333 1712 334391 0 29075031 135218 75967461 1691 334257 0 29210151 135366 76303434 1712 319432 0 29345438 139965 76624603 1665 322194 0 29485309 126013 76948487 1612 326971 0 29611243 121295 77277095 1718 329436 0 29732447 120006 77608274 1287 325290 0 29852372 267034 77934876 1415 319186 0 30119323 119739 78255502 1607 324883 0 30238996 121987 78582017 1296 317736 0 30360913 119885 78901074 1834 322350 0 30480711 117124 79225283 1341 323737 0 30597746 120130 79550386 1518 317433 0 30717779 115091 79869362 1821 320854 0 30832796 113939 80192062 1888 330304 0 30946640 115546 80524279 1717 321154 0 31062088 114026 80847175 1637 327413 0 31176014 124454 81176250 1487 334532 0 31300369 131880 81512294 1542 328789 0 31432151 139711 81842650 1694 317112 0 31571793 142229 82161481 1712 337789 0 31713941 127382 82501007 1480 313775 0 31841225 121305 82816287 1439 332122 0 31962458 124923 83149873 1899 325343 0 32087284 117885 83477140 1500 332143 0 32205099 126876 83810808 1524 330584 0 32331909 136582 84142941 1513 321438 0 32468396 138714 84465917 1495 325694 0 32607013 132716 84793131 1637 331617 0 32739639 134017 85126410 1520 330781 0 32873574 133910 85458736 1550 325835 0 33007399 142657 85786146 1654 328184 0 33149967 139464 86116009 1877 336849 0 33289356 133799 86454760 1526 322692 0 33423061 127943 86779003 1681 327163 0 33550912 125401 87107872 1555 322778 0 33676221 120756 87432230 1562 326910 0 33796895 123243 87760727 1471 315163 0 33920040 121373 88077386 1643 315512 0 34041321 119534 88394566 1592 318930 0 34160756 120746 88715113 1596 314354 0 34281417 119120 89031088 1852 317370 0 34400480 115983 89350335 1486 314365 0 34516364 126505 89666211 1807 321626 0 34642780 123199 89989669 1632 314277 0 34765886 122685 90305603 1448 307032 0 34888471 126042 90614108 1222 312203 0 35014416 116423 90927558 1814 319615 0 35130742 119579 91249012 1540 320160 0 35250226 125513 91570737 1475 324146 0 35375639 137626 91896383 1635 316182 0 35513168 138758 92214225 1757 323258 0 35651834 144760 92539265 1782 317104 0 35796517 133622 92858176 1578 309557 0 35930047 131941 93169336 1613 317478 0 36061909 133507 93488452 1622 319542 0 36195339 138569 93809641 1584 318809 0 36333811 132204 94130059 1539 310879 0 36465922 134776 94442502 1713 322438 0 36600619 139332 94766678 1790 334976 0 36739862 130390 95103469 1604 333380 0 36870152 123688 95438478 1546 327308 0 36993746 120312 95767357 1402 323588 0 37113962 118758 96092372 1790 322894 0 37232629 115532 96417081 1486 325223 0 37348074 114509 96743815 1327 324362 0 37462486 119554 97069529 1576 324770 0 37581950 121046 97395900 1583 312353 0 37702902 120270 97709861 1481 322979 0 37823107 120198 98034346 1732 328431 0 37943273 131031 98364534 1544 323513 0 38074210 125065 98689616 1512 331801 0 38199177 128812 99022954 1759 323722 0 38327893 136269 99348460 1856 330928 0 38464073 122339 99681269 1422 327140 0 38586340 117616 100009856 1557 318528 0 38703858 118939 100329966 1692 317914 0 38822697 124818 100649597 1725 307848 0 38947422 119115 100959195 1530 314881 0 39066441 118801 101275631 1847 315414 0 39185191 123350 101592917 1678 318581 0 39308468 145335 101913201 1722 326176 0 39453755 141636 102241124 1708 330601 0 39595307 131131 102573458 1689 319376 0 39726340 129945 102894548 1575 310043 0 39856187 131434 103206191 1561 326202 0 39987537 124742 103533979 1527 329462 0 40112184 124785 103864993 1500 327628 0 40236893 131268 104194146 1647 327592 0 40368095 129783 104523410 1699 332305 0 40497792 127470 104857439 1496 314316 0 40625162 140137 105173276 1670 310789 0 40765200 134129 105485760 1777 321317 0 40899285 134452 105808879 1733 316432 0 41033727 129763 106127069 1505 323684 0 41163410 131448 106452283 1518 322403 0 41294787 128202 106776229 1541 329733 0 41422891 123059 107107528 1434 318222 0 41545854 126918 107427209 1734 303585 0 41672686 121581 107732553 1588 315207 0 41794167 119646 108049373 1429 328997 0 41913722 114843 108379824 1879 337368 0 42028498 118881 108719096 1367 322650 0 42147294 117613 109043138 1266 320138 0 42264809 121504 109364567 1430 315918 0 42386221 122539 109681940 1597 307316 0 42508667 123667 109990878 1557 312464 0 42632237 129446 110304924 1651 305187 0 42761593 125857 110611787 1471 310111 0 42887351 128938 110923394 1580 307475 0 43016191 128854 111232474 1495 307032 0 43144955 128227 111541026 1645 324883 0 43273089 126209 111867579 1595 315776 0 43399222 126509 112184975 1491 329169 0 43525654 123452 112515660 1690 319435 0 43649009 127026 112836810 1554 324111 0 43775941 123222 113162500 1514 324964 0 43899066 123347 113489003 1492 325546 0 44022317 120920 113816066 1614 335805 0 44143146 129143 114153510 1467 315443 0 44272191 126251 114470445 1430 318993 0 44398352 122452 114790893 1461 334255 0 44520714 134315 115126634 1716 320137 0 44654931 117333 115448512 1356 321405 0 44772216 126013 115771298 1488 316813 0 44898142 126559 116089624 1512 317851 0 45024607 123081 116409012 1481 330486 0 45147611 131902 116741004 1676 336646 0 45279424 137211 117079351 1699 325244 0 45416548 127133 117406319 1825 320644 0 45543588 132205 117728813 1757 314165 0 45675698 127238 118044760 1716 320841 0 45802864 132259 118367342 1551 314921 0 45935033 133255 118683839 1704 331730 0 46068225 135392 119017298 1818 321543 0 46203527 129232 119340684 1830 317193 0 46332702 133329 119659732 1697 311482 0 46465964 124198 119972936 1660 313287 0 46590062 132407 120287908 1670 325246 0 46722382 131259 120614849 1647 328099 0 46853549 122416 120944620 1555 335177 0 46975877 120353 121281377 1539 328858 0 47096131 123213 121611799 1606 311154 0 47219264 120154 121924584 1735 321420 0 47339321 118248 122247764 1453 319897 0 47457472 121747 122569139 1671 319200 0 47579122 119825 122890035 1626 325355 0 47698903 141878 123217041 1642 319302 0 47840698 128598 123538010 1431 322663 0 47969221 117333 123862129 1514 317390 0 48086461 123159 124181058 1336 321733 0 48209553 115114 124504152 1222 322598 0 48324570 115265 124827997 1559 318118 0 48439739 125666 125147699 1601 315648 0 48565315 124971 125464973 1709 312492 0 48690204 123761 125779199 1628 308597 0 48813874 133697 126089449 1678 304571 0 48947484 128484 126395723 1464 309197 0 49075885 119831 126706409 1401 309058 0 49195617 124153 127016893 1419 304941 0 49319677 123304 127323278 1337 298190 0 49442882 126664 127622830 1488 300259 0 49569453 124889 127924602 1779 296048 0 49694243 131501 128222454 1669 302705 0 49825650 129726 128526853 1546 293007 0 49955280 129228 128821431 1520 300060 0 50084417 128872 129123036 1723 295745 0 50213192 126632 129420529 1470 296291 0 50339753 127659 129718315 1705 303266 0 50467370 126804 130023311 1465 298845 0 50594077 123634 130323646 1538 303181 0 50717638 117805 130628390 1780 315204 0 50835347 135041 130945399 1505 310136 0 50970298 136057 131257065 1417 299038 0 51106262 139430 131557545 1728 309504 0 51245598 128617 131868802 1659 300059 0 51374116 132569 132170545 1683 307850 0 51506593 130531 132480103 1334 302513 0 51637047 134408 132783975 1542 317909 0 51771363 126740 133103451 1612 315780 0 51898012 136872 133420868 1555 307371 0 52034788 130611 133729819 1362 308990 0 52165311 132328 134040196 1565 302724 0 52297592 129083 134344510 1492 313924 0 52426579 135544 134659951 1629 317965 0 52562026 134084 134979570 1814 317048 0 52696013 130088 135298457 1616 310568 0 52826014 129879 135610666 1472 310563 0 52955823 140305 135922726 1433 314959 0 53096030 136340 136239143 1708 326495 0 53232272 146888 136567371 1677 319125 0 53379073 135430 136888198 1634 312421 0 53514404 116767 137202278 1354 331261 0 53631082 123934 137534918 1426 319617 0 53754924 121635 137855986 1272 329799 0 53876463 124721 138187082 1483 331984 0 54001092 110698 138520574 1592 326605 0 54111696 122451 138848796 1337 323864 0 54234081 129588 139174022 1474 312016 0 54363572 130031 139487537 1598 319609 0 54493506 128683 139808769 1507 317137 0 54622089 119061 140127438 1673 333567 0 54741059 126673 140462703 1696 329257 0 54867672 142939 140793681 1748 334295 0 55010524 130554 141129749 1769 331751 0 55140980 121636 141463294 1325 324191 0 55262523 121908 141788835 1861 327547 0 55384335 124300 142118268 1685 329892 0 55508551 127430 142449870 1467 306592 0 55635888 132779 142757954 1535 309825 0 55768579 123394 143069339 1265 308906 0 55891876 122948 143379535 1530 309402 0 56014738 124127 143690492 1611 307921 0 56138775 125672 144000049 1371 301868 0 56264348 125948 144303313 1337 297367 0 56390257 127401 144602042 1536 300031 0 56517563 125676 144903634 1480 298945 0 56643144 120932 145204084 1835 302254 0 56763977 133127 145508198 1629 309790 0 56897080 126544 145819642 1480 311797 0 57023533 139145 146132944 1625 307302 0 57162581 127939 146441896 1324 299757 0 57290431 124018 146743002 1271 306194 0 57414364 125008 147050492 1288 306738 0 57539303 126514 147358543 1254 303533 0 57665731 123927 147663355 1554 304303 0 57789589 125536 147969237 1390 302506 0 57915033 126314 148273158 1654 305888 0 58041252 126997 148580725 1661 304769 0 58168156 128368 148887180 1278 299950 0 58296428 121731 149188433 1754 303508 0 58418065 121751 149493720 1377 307580 0 58539788 121926 149802702 1594 309342 0 58661615 119749 150113663 1724 308774 0 58781270 117053 150424186 1933 307554 0 58898226 125351 150733698 1641 307306 0 59023486 124310 151042670 1686 310063 0 59147706 128596 151354444 1633 310022 0 59276203 122372 151666124 1602 309479 0 59398506 116214 151977230 1777 312509 0 59514634 123342 152291541 1411 305484 0 59637878 123171 152598461 1812 304681 0 59760962 124464 152904979 1444 306152 0 59885345 123541 153212600 1594 306611 0 60008796 121503 153520830 1672 310391 0 60130212 121698 153832918 1397 306512 0 60251835 133907 154140852 1338 296080 0 60385663 124573 154438295 1439 300306 0 60510137 130885 154740065 1311 297135 0 60640942 128328 155038536 1603 297269 0 60769175 131412 155337433 1667 298255 0 60900489 132811 155637380 1750 301724 0 61033213 128198 155940879 1683 300801 0 61161332 125738 156243388 1552 302278 0 61286981 129901 156547243 1322 305064 0 61416794 133559 156853654 1459 312542 0 61550259 133423 157167680 1442 301658 0 61683583 132581 157470805 1456 301582 0 61816090 131900 157773868 1413 305533 0 61947920 125930 158080839 1558 306376 0 62073754 138799 158388798 1605 314458 0 62212461 143171 158704886 1837 309862 0 62355533 139633 159016610 1726 312892 0 62495089 133251 159331253 1615 315143 0 62628264 131669 159648036 1754 328117 0 62759839 135204 159977932 1458 322114 0 62894943 140244 160301529 1545 299278 0 63035097 139443 160602377 1700 304587 0 63174474 135499 160908689 1616 306056 0 63309895 131975 161216386 1355 300706 0 63441824 126758 161518472 1597 308934 0 63568483 134971 161829028 1393 299920 0 63703370 140785 162130366 1681 314938 0 63844078 141654 162447010 1636 301712 0 63985635 132869 162750383 1439 303220 0 64118418 126381 163055067 1588 318104 0 64244701 128347 163374784 1457 306236 0 64372952 124030 163682502 1604 307339 0 64496891 126344 163991470 1563 304930 0 64623163 132678 164297988 1683 308897 0 64755752 131945 164608593 1758 311983 0 64887639 131132 164922359 1443 303764 0 65018695 128120 165227591 1456 303213 0 65146742 131254 165532285 1633 301615 0 65277950 128602 165835558 1474 309285 0 65406452 134972 166146342 1525 314707 0 65541327 127872 166462599 1619 318798 0 65669110 128379 166783041 1653 307944 0 65797409 125620 167092663 1617 304726 0 65922935 126263 167399031 1710 306398 0 66049103 131102 167707164 1784 302608 0 66180121 128710 168011581 1452 297695 0 66308753 128032 168310753 1641 297927 0 66436692 128327 168610346 1595 293935 0 66564937 125772 168905901 1685 302973 0 66690638 119220 169210584 1368 297912 0 66809763 125241 169509889 1460 299226 0 66934905 123247 169810600 1656 302147 0 67058054 124123 170114428 1568 299593 0 67182078 133728 170415614 1672 301615 0 67315730 134957 170718926 1491 296738 0 67450590 123536 171017180 1527 305786 0 67574039 128812 171324518 1547 309714 0 67702796 125396 171635804 1615 308456 0 67828126 130174 171945900 1603 311876 0 67958239 127521 172259404 1607 316644 0 68085661 121955 172577680 1658 306279 0 68207548 123825 172885642 1654 304756 0 68331290 126951 173192077 1602 302445 0 68458143 128817 173496149 1745 303223 0 68586864 128377 173801142 1408 309368 0 68715173 134970 174111943 1501 307231 0 68850062 134001 174420700 1538 301367 0 68983985 134400 174723630 1413 291019 0 69118289 130892 175016087 1797 299725 0 69249082 128139 175317634 1691 303600 0 69377140 130556 175622950 1743 300411 0 69507599 131794 175925129 1690 301343 0 69639302 133683 176228187 1532 293668 0 69772890 130581 176523412 1521 297505 0 69903385 138624 176822463 1777 297041 0 70041915 135629 177121306 1677 291309 0 70177446 134879 177414317 1350 289125 0 70312239 137774 177704817 1791 304759 0 70449924 137229 178011392 1534 290127 0 70587056 138979 178303078 1429 297745 0 70725952 146140 178602277 1657 312463 0 70871996 134360 178916422 1615 304550 0 71006270 131031 179222612 1734 301660 0 71137203 133020 179526031 1612 298706 0 71270128 130048 179826374 1560 298847 0 71400103 132164 180126806 1365 298008 0 71532170 130706 180426204 1635 299817 0 71662780 133126 180727681 1688 296610 0 71795806 136098 181026004 1258 293276 0 71931812 136388 181320563 1627 296244 0 72068138 136959 181618459 1378 290800 0 72205009 134705 181910662 1531 291367 0 72339615 146039 182203585 1602 293919 0 72485566 147997 182499131 1388 287289 0 72633483 156163 182787833 1327 288209 0 72789626 155130 183077394 1646 293822 0 72944682 136784 183372887 1430 290081 0 73081378 143420 183664423 1363 288813 0 73224703 136016 183954624 1547 291428 0 73360620 141755 184247624 1687 298631 0 73502288 139941 184547967 1378 295928 0 73642150 145716 184845298 1652 294727 0 73787770 140915 185141702 1677 293954 0 73928593 140617 185437358 1589 291654 0 74069149 135660 185730626 1426 291319 0 74204713 138785 186023396 1587 290504 0 74343403 137859 186315512 1178 292910 0 74481168 139952 186609625 1801 294247 0 74621023 139895 186905698 1459 291406 0 74760854 138373 187198588 1610 297189 0 74899160 130103 187497412 1674 302684 0 75029178 129948 187801795 1187 292687 0 75159034 134881 188095694 1517 298032 0 75293820 126224 188395268 1656 300501 0 75419948 131906 188697450 1700 296054 0 75551760 135071 188995229 1631 303569 0 75686747 137209 189300454 1484 294977 0 75823861 128399 189596940 1835 303550 0 75952177 138064 189902350 1455 296637 0 76090142 132129 190200467 1835 310499 0 76222241 140935 190512826 1736 307934 0 76363079 134660 190822521 1573 297147 0 76497701 130105 191121266 1572 309588 0 76627722 128624 191432451 1543 303070 0 76756246 128608 191737089 1265 296584 0 76884777 131476 192034963 1604 297078 0 77016168 129829 192333670 1486 296517 0 77145911 127064 192631698 1650 300171 0 77272890 125316 192933544 1755 302873 0 77398108 122238 193238197 1655 306680 0 77520250 133626 193546557 1721 297063 0 77653777 128879 193845366 1439 297549 0 77782572 136162 194144379 1597 300748 0 77918636 129217 194446749 1526 310826 0 78047757 134351 194759126 1522 302041 0 78182016 142988 195062714 1603 311938 0 78324920 145689 195376280 1766 310796 0 78470514 137033 195688867 1601 305338 0 78607482 122650 195995831 1728 304879 0 78730063 125347 196302463 1632 298534 0 78855354 128745 196602654 1587 299487 0 78984000 131243 196903753 1496 292995 0 79115143 133386 197198269 1192 294217 0 79248439 133246 197493703 1638 297824 0 79381592 138910 197793190 1535 293988 0 79520404 134590 198088738 1586 292466 0 79654894 134581 198382815 1466 292002 0 79789382 133847 198676308 1307 292698 0 79923135 136521 198970338 1701 300137 0 80059566 140064 199272201 1646 298324 0 80199551 137480 199572196 1433 291416 0 80336949 137026 199865070 1745 302526 0 80473898 139716 200169366 1633 297670 0 80613517 138638 200468694 1223 291396 0 80752062 142305 200761338 1696 294856 0 80894272 145373 201057915 1563 291290 0 81039547 137863 201350793 1564 290806 0 81177349 137381 201643188 1540 292874 0 81314639 139671 201937627 1643 297619 0 81454248 139288 202236914 1372 290909 0 81593449 135273 202529220 1524 298712 0 81728631 133477 202829481 1480 297068 0 81862035 134427 203128054 1407 302820 0 81996369 137280 203432306 1460 301035 0 82133590 142799 203734826 1517 302650 0 82276317 145445 204039018 1460 291346 0 82421679 134928 204331849 1556 302643 0 82556516 129881 204636073 1439 301125 0 82686339 141020 204938662 1696 302884 0 82827266 133248 205243267 1417 292730 0 82960427 136423 205537439 1605 296093 0 83096751 142571 205835162 1567 292738 0 83239256 133090 206129492 1272 295273 0 83372246 134800 206426062 1391 298887 0 83506952 131659 206726365 1606 305224 0 83638537 135448 207033220 1736 329515 0 83773920 125004 207364496 1696 327886 0 83898830 130808 207694103 1312 307819 0 84029544 130146 208003259 1616 302596 0 84159595 128812 208307496 1437 299465 0 84288313 132162 208608423 1559 294668 0 84420377 133807 208904675 1586 295580 0 84554095 135154 209201866 1211 285636 0 84689186 125597 209488738 1744 303135 0 84814685 126423 209793642 1724 304643 0 84941038 139165 210100034 1480 298987 0 85080105 132703 210400526 1321 301362 0 85212784 123701 210703234 1322 309700 0 85336401 128071 211014281 1512 307206 0 85464381 135409 211323024 1661 304265 0 85599698 137364 211628975 1671 305172 0 85736965 127036 211935843 1450 303602 0 85863924 121472 212240920 1710 305264 0 85985300 108570 212547919 1594 308784 0 86093771 135793 212858322 1765 303879 0 86229466 138736 213163991 1733 301971 0 86368143 136808 213467720 1757 297254 0 86504862 134452 213766756 1776 301449 0 86639223 132472 214070006 1578 297993 0 86771596 132825 214369602 1518 300089 0 86904332 127566 214671234 1409 303208 0 87031836 129004 214975876 1751 302262 0 87160749 130485 215279914 1561 305917 0 87291136 141231 215587417 1506 305084 0 87432268 135976 215894032 1571 298204 0 87568171 122602 216193832 1245 308603 0 87690689 125231 216503705 1326 307251 0 87815828 127010 216812307 1393 306316 0 87942772 128544 217120041 1411 300631 0 88071226 130793 217422108 1437 300896 0 88201925 132118 217724466 1622 297610 0 88333944 129411 218023723 1426 298150 0 88463259 127655 218323324 1173 292801 0 88590874 127272 218617323 1495 295306 0 88718054 126784 218914149 1666 298328 0 88844739 130345 219214168 1354 296772 0 88974988 126329 219512319 1455 298867 0 89101222 132460 219812666 1623 298032 0 89233593 135092 220112346 1520 303122 0 89368600 128160 220417013 1406 305652 0 89496665 121586 220724096 1762 303608 0 89618154 125792 221029491 1721 298991 0 89743878 123647 221330228 1651 304679 0 89867465 123555 221636583 1796 309982 0 89990986 129449 221948386 1570 300546 0 90120337 130579 222250527 1742 309269 0 90250830 125593 222561563 1615 306960 0 90376328 128175 222870163 1579 305224 0 90504420 122967 223176991 1734 304090 0 90627290 122603 223482840 1672 306855 0 90749795 127480 223791392 1500 299289 0 90877187 126209 224092206 1218 292677 0 91003301 130010 224386126 1608 301297 0 91133297 133729 224689056 1396 306395 0 91266932 133520 224996872 1477 303742 0 91400377 130422 225302116 1568 300599 0 91530703 128100 225604308 1743 317655 0 91658739 130630 225923731 1823 312595 0 91789280 131717 226238174 1810 305835 0 91920902 129262 226545844 1460 307094 0 92050070 128060 226854423 1430 314851 0 92178061 128765 227170729 1474 313492 0 92306733 141772 227485720 1861 323318 0 92448410 138619 227810924 1551 307861 0 92586950 135658 228120361 1747 305784 0 92722511 135423 228427917 1687 304670 0 92857840 133806 228734299 1867 319720 0 92991601 130454 229055911 1861 312417 0 93121955 133546 229370214 1607 309231 0 93255406 130934 229681077 1806 314665 0 93386254 130740 229997573 1528 308852 0 93516929 137926 230307978 1609 305223 0 93654779 137133 230614835 1661 302598 0 93791829 125920 230919119 1812 311055 0 93917666 129966 231232011 1699 305284 0 94047589 119961 231539019 1498 314508 0 94167455 124454 231855050 1658 318495 0 94291809 129898 232175228 1707 312724 0 94421615 115774 232489684 1495 316468 0 94537294 127311 232807672 1625 313985 0 94664530 131628 233123307 1595 303859 0 94796065 123345 233428786 1549 305451 0 94919317 127031 233735811 1775 307842 0 95046253 123028 234045453 1498 310762 0 95169184 127541 234357738 1658 311942 0 95296626 127783 234671363 1535 311271 0 95424323 136940 234984194 1580 310071 0 95561182 135008 235295870 1746 308635 0 95696098 130036 235606276 1708 302950 0 95826058 125573 235910959 1365 299094 0 95951562 132076 236211443 1426 296367 0 96083544 133829 236509261 1378 299018 0 96217276 132454 236809682 1460 297806 0 96349637 141755 237108973 1239 290403 0 96491299 131148 237400640 1764 303398 0 96622361 135989 237705827 1721 300245 0 96758256 136498 238007818 1611 295920 0 96894673 132832 238305374 1665 303213 0 97027407 133293 238610277 1778 305815 0 97160601 144717 238917895 1632 297907 0 97305218 136005 239217459 1632 299084 0 97441135 129789 239518200 1331 295048 0 97570838 134935 239814604 1575 293686 0 97705706 129802 240109890 1648 299551 0 97835417 139717 240411114 1548 294924 0 97975084 136523 240707611 1401 289115 0 98111527 142253 240998152 1415 287656 0 98253683 137332 241287248 1317 290747 0 98390932 141441 241579337 1391 289039 0 98532293 132305 241869792 1521 292238 0 98664513 134225 242163576 1784 295244 0 98798654 133480 242460629 1527 296546 0 98932037 136046 242758727 1659 296825 0 99067984 131554 243057236 1722 297958 0 99199438 130140 243356941 1461 296891 0 99329490 132343 243655318 1517 295687 0 99461738 134173 243952547 1543 296288 0 99595814 131634 244250403 1636 295161 0 99727365 127986 244547225 1582 298467 0 99855254 129198 244847299 1769 304124 0 99984369 125990 245153217 1611 296601 0 100110272 131164 245451454 1380 300775 0 100241340 133374 245753634 1828 309269 0 100374616 140377 246064756 1535 302971 0 100514896 136110 246369287 1538 302656 0 100650911 135770 246673506 1737 307465 0 100786599 134882 246982733 1597 304659 0 100921401 125189 247289014 1534 301618 0 101046526 121003 247592191 1977 311273 0 101167430 125155 247905466 1479 298824 0 101292490 127489 248205794 1555 295956 0 101419881 130178 248503330 1391 295380 0 101549961 129942 248800126 1443 300084 0 101679812 131031 249101678 1542 309457 0 101810746 126256 249412702 1394 300149 0 101936913 129207 249714270 1355 299171 0 102066035 129895 250014821 1625 297388 0 102195831 131062 250313859 1622 291836 0 102326819 134573 250607342 1597 291044 0 102461294 128586 250900008 1567 293480 0 102589805 137870 251195080 1601 290738 0 102727578 137338 251487444 1641 294305 0 102864833 138723 251783415 1700 301151 0 103003473 139961 252086291 1680 296231 0 103143336 137301 252384227 1642 296060 0 103280545 132661 252681954 1754 298090 0 103413118 147223 252981823 1610 290928 0 103560253 146764 253274386 1592 291923 0 103706919 235028 253567926 1759 313539 0 103941874 168401 253883249 1507 303220 0 104110175 115112 254188001 1374 335855 0 104225207 111167 254525255 1117 344797 0 104336287 147663 254871194 1591 292255 0 104483880 147496 255165065 1458 289629 0 104631293 138740 255456177 1547 298572 0 104769939 140569 255756321 1439 295558 0 104910410 139321 256053343 1527 297884 0 105049644 143606 256352779 1660 296408 0 105193202 149263 256650872 1706 299974 0 105342385 147097 256952577 1686 301741 0 105489437 154688 257256029 1409 291450 0 105644045 147692 257548913 1814 300184 0 105791645 149398 257850936 1641 291545 0 105940944 147468 258144147 1462 292689 0 106088324 148836 258438323 1668 292414 0 106237061 139987 258732430 1714 294850 0 106376954 141896 259029019 1570 294342 0 106518758 144919 259324956 1498 291227 0 106663599 140216 259617706 1481 291339 0 106803727 139683 259910551 1469 292446 0 106943334 142567 260204491 1525 291587 0 107085894 132249 260497628 1482 293567 0 107218046 134253 260792702 1075 289594 0 107352209 133403 261083396 1542 294504 0 107485534 137363 261379467 1516 297530 0 107622804 132689 261678538 1545 296269 0 107755409 128525 261976377 1313 295361 0 107883889 131102 262273076 1348 297906 0 108014895 120707 262572355 1811 305244 0 108135514 127940 262879435 1568 294295 0 108263365 128580 263175323 1561 299282 0 108391875 126335 263476191 1516 299180 0 108518113 129779 263776912 1362 303428 0 108647797 132270 264081727 1808 322176 0 108779968 144324 264405736 1508 337442 0 108924195 151226 264744711 1586 339667 0 109075327 123258 265085989 1878 307566 0 109198493 135619 265395458 1713 311987 0 109334051 133972 265709183 1388 308559 0 109467926 144006 266019155 1713 319614 0 109611837 134229 266340507 1663 326528 0 109745985 124688 266668723 1488 330405 0 109870582 129880 267000641 1399 308028 0 110000371 126448 267310093 1415 320157 0 110126734 136459 267631690 1591 327543 0 110263130 122448 267960849 1714 326077 0 110385478 121650 268288665 1711 319680 0 110507038 121917 268610081 1484 316280 0 110628862 115520 268927870 1550 325177 0 110744287 120911 269254622 1469 323318 0 110865100 124923 269579434 1577 316805 0 110989925 113647 269897841 1654 322881 0 111103483 120300 270222401 1278 310399 0 111223692 123724 270534103 1389 305621 0 111347323 125308 270841138 1592 297646 0 111472535 121776 271140401 1586 299580 0 111594214 127606 271441592 1698 300822 0 111721742 119974 271744137 1818 310301 0 111841626 119355 272056281 1844 309018 0 111960889 119045 272367168 1423 310481 0 112079838 130154 272679097 1594 307261 0 112209897 125050 272987977 1556 311842 0 112334952 113997 273301400 1648 319481 0 112448856 113112 273622554 1692 316057 0 112561887 119191 273940328 1363 308499 0 112680989 125504 274250215 1749 314987 0 112806398 122351 274566976 1675 312887 0 112928669 132250 274881563 1524 315039 0 113060825 140392 275198151 1560 306514 0 113201135 132341 275506250 1654 326478 0 113333379 135621 275834407 1766 331281 0 113468928 145239 276167479 1707 324812 0 113614077 133730 276494023 1730 316528 0 113747714 126752 276812306 1392 309193 0 113874368 134525 277122916 1791 303189 0 114008812 135422 277427921 1880 301355 0 114144147 139275 277731181 1646 304046 0 114283341 140698 278036898 1502 303543 0 114423939 126392 278341968 1723 312196 0 114550241 117972 278655912 1465 318075 0 114668117 121347 278975477 1619 319390 0 114789377 122626 279296511 1585 312898 0 114911926 140773 279611019 1555 303121 0 115052608 140318 279915720 1539 311522 0 115192874 137524 280228806 1518 305377 0 115330302 139802 280535726 1659 300021 0 115470005 128492 280837431 1610 299698 0 115598406 122092 281138764 1600 309070 0 115720400 124748 281449459 1290 305631 0 115845064 120336 281756405 1512 307101 0 115965307 119650 282065043 1445 311663 0 116084871 128523 282378176 1712 315335 0 116213297 126208 282695248 1628 313401 0 116339409 128798 283010302 1395 306141 0 116468115 127625 283317863 1624 306003 0 116595664 125294 283625515 1647 312191 0 116720869 123852 283939378 1563 310142 0 116844627 124584 284251108 1327 309388 0 116969116 120149 284561848 1379 310387 0 117089174 120308 284873639 1456 340674 0 117209426 125353 285215794 1602 315302 0 117334722 124854 285532723 1386 316295 0 117459476 119563 285850429 1827 311857 0 117578947 124881 286164138 1402 310082 0 117703756 128768 286475647 1731 314725 0 117832435 131436 286792128 1759 305706 0 117963794 135968 287099618 1420 296140 0 118099663 114837 287397203 1468 318163 0 118214435 124096 287716859 1585 310925 0 118338474 126177 288029394 1429 297171 0 118464566 126905 288328019 1573 298235 0 118591411 131669 288627852 1421 295051 0 118722996 126669 288924349 1856 302565 0 118849592 135020 289228795 1713 298292 0 118984525 124248 289528825 1523 297365 0 119108699 131712 289827738 1693 303986 0 119240313 138149 290133442 1678 299305 0 119378370 122989 290434450 1895 301438 0 119501266 128229 290737808 1623 312755 0 119629432 131738 291052211 1713 310468 0 119761078 132090 291364417 1497 307081 0 119893084 122675 291673020 1581 306060 0 120015668 118786 291980686 1925 317526 0 120134358 126018 292300162 1626 314099 0 120260279 124386 292615912 1555 313769 0 120384610 127166 292931261 1427 303437 0 120511679 68942 293236150 1615 337718 0 120580530 65358 293575508 1852 346611 0 120645805 157374 293923996 1581 355543 0 120803081 292156 294281145 1611 394116 0 121095139 107975 294676897 1643 343884 0 121203059 129501 295022449 1979 309930 0 121332496 48478 295334383 1571 359860 0 121380876 55796 295695839 1076 349463 0 121436608 46756 296046403 1435 360604 0 121483264 1638 296408467 1183 362135 0 121484802 21054044 296771809 1604 371620 0 142538746 45974 297145059 1726 355533 0 142584621 46308 297502343 1744 349359 0 142630832 40939 297853471 1707 372181 0 142671693 112684 298227384 1536 370775 0 142784290 25164 298599720 1452 360364 0 142809355 45798 298961561 1392 350708 0 142855054 66607 299313686 1787 372863 0 142921567 211477 299688361 1724 349632 0 143132965 72673 300039742 1532 386390 0 143205549 83310 300427689 1843 375582 0 143288782 131097 300805139 1480 372139 0 143419780 86682 301178783 1510 377012 0 143506390 241661 301557330 1974 363276 0 143747952 204606 301922605 1663 384388 0 143952464 69764 302308681 1684 352441 0 144022131 142476 302662831 1921 354170 0 144164507 174117 303018947 1301 340308 0 144338531 201991 303360581 1631 362542 0 144540425 145460 303724779 1895 378497 0 144685798 167626 304105196 1806 358666 0 144853324 66785 304465693 1526 323039 0 144920012 64007 304790283 1631 328681 0 144983958 48404 305120620 1726 334832 0 145032264 33936 305457203 1708 324092 0 145066101 42936 305783028 1422 306767 0 145108937 57942 306091242 1524 331007 0 145166781 52631 306423798 1646 351762 0 145219316 49526 306777231 1596 342487 0 145268743 44047 307121339 1725 352689 0 145312690 41341 307475778 1398 323765 0 145353931 96398 307800966 1643 342355 0 145450246 131218 308144989 1598 325990 0 145581365 134680 308472602 1692 325284 0 145715948 192063 308799603 1665 355878 0 145907955 149751 309157171 1661 379030 0 146057618 288397 309537887 1660 381873 0 146345924 172899 309921445 1826 364414 0 146518723 129986 310287710 1564 313660 0 146648618 130814 310602959 1785 311841 0 146779336 125946 310916610 1892 313095 0 146905186 124141 311231622 1766 306397 0 147029239 126966 311539810 1420 311136 0 147156123 123967 311852391 1363 308625 0 147279990 126498 312162404 1747 314841 0 147406390 172495 312479017 1577 373311 0 147578800 164380 312853930 1601 378021 0 147743106 156244 313233577 1465 340355 0 147899250 111732 313575422 1590 353053 0 148010883 232545 313930090 1575 345794 0 148243334 99818 314277484 1273 339652 0 148343054 244805 314618434 1943 380274 0 148587763 164657 315000676 1514 352438 0 148752321 112950 315354653 1657 360987 0 148865171 44917 315717322 1389 374261 0 148909991 97923 316092997 1426 361551 0 149007815 208526 316455999 1848 332068 0 149216249 89328 316789940 1719 363928 0 149305491 151578 317155612 1770 380166 0 149457042 224984 317537573 1611 365659 0 149681950 93349 317904868 1688 359431 0 149775203 134825 318266012 1499 357798 0 149909940 135166 318625334 1702 313541 ` func TestSizes(t *testing.T) { s := strings.NewReader(idx) cr, err := crai.ReadIndex(s) if err != nil { t.Fatal(err) } for i, c := range cr.Sizes()[0] { fmt.Printf("1\t%d\t%d\t%d\n", i*16384, (i+1)*16384, c) } } ================================================ FILE: indexcov/crai/plot-vs-with-st-depth.py ================================================ import sys freal = sys.argv[1] fcram = sys.argv[2] def read(path): xs, ys = [], [] for toks in (l.rstrip().split("\t") for l in open(path)): try: ys.append(float(toks[3])) xs.append(int(toks[1])) except IndexError: break return xs, ys realx, realy = read(freal) cramx, cramy = read(fcram) n = min(len(realx), len(cramx)) import numpy as np realx, realy = realx[:n], np.array(realy[:n]) cramx, cramy = cramx[:n], np.array(cramy[:n]) cramy = cramy.astype(float) / np.median(np.array(cramy)) realy = realy.astype(float) / np.median(realy) assert all(c == r for c, r in zip(cramx, realx)) from matplotlib import pyplot as plt import seaborn as sns sns.set_palette('Set1') sns.set_style('whitegrid') plt.plot(realx, realy, marker=None, lw=1, ls='-', label='samtools-depth') plt.plot(realx, cramy, marker=None, lw=1, ls='-', label='cram-index') plt.ylim(0, 5) plt.xlabel("genomic position") plt.ylabel("scaled depth") plt.legend() plt.show() ================================================ FILE: indexcov/crai/st-depth-to-bins.py ================================================ import sys from itertools import groupby import numpy as np def gen(): for l in sys.stdin: chrom, p, d = l.rstrip().split() if chrom != '1': break p, d = int(p), float(d) yield p, d last = 0 interval = 16384 for i, g in groupby(gen(), lambda (p, d) : p / interval): if i * interval > 150028288: break g = list(g) n = len(g) vals = [x[1] for x in g] while last < i * interval: print "1\t%d\t%d\t0" % (last, last+16384) last += 16384 for k in range(interval/16384): print "1\t%d\t%d\t%.2f" % ((i+k) * 16384, (i+k+1)*16384, sum(vals) / 16384) last = (i+1) * interval ================================================ FILE: indexcov/functional-tests.sh ================================================ #!/bin/bash test -e ssshtest || wget -q https://raw.githubusercontent.com/ryanlayer/ssshtest/master/ssshtest . ssshtest set -uo pipefail go build -o ./goleft_test ../cmd/goleft/goleft.go check_nobams() { echo "XXX" } get() { set -e bam=$1 if [[ ! -e $bam ]]; then curl -sS https://s3.amazonaws.com/b4-test-data/$bam > $bam fi if [[ ! -e $bam.bai ]]; then curl -sS https://s3.amazonaws.com/b4-test-data/$bam.bai > $bam.bai fi set +e } num_colcounts() { set -e f=$1 awk 'BEGIN{FS=OFS="\t"} NR > 1 { print NF }' $f | uniq -c | wc -l } export -f num_colcounts run check_empty ./goleft_test indexcov -d /tmp/tt test-data/sample_issue_27_0001.bam assert_exit_code 0 rm -rf /tmp/tt export -f check_nobams run check_no_bams ./goleft_test indexcov -d /tmp/tt assert_exit_code 255 assert_in_stderr "error: bam is required" get sample_name_0001.bam rm -rf /tmp/tt run check_single_sample ./goleft_test indexcov -d /tmp/tt sample_name_0001.bam assert_exit_code 0 assert_in_stderr "not plotting" assert_equal $(num_colcounts /tmp/tt/tt-indexcov.ped) 1 assert_equal $(zgrep -wc ^1 /tmp/tt/tt-indexcov.bed.gz ) 14748 run check_sex ./goleft_test indexcov -d /tmp/tt --sex "X,Y" sample_name_0001.bam assert_exit_code 0 assert_equal $(num_colcounts /tmp/tt/tt-indexcov.ped) 1 get sample_biogo_e_0001.bam run check_issue17 ./goleft_test indexcov -d /tmp/tt sample_biogo_e_0001.bam assert_exit_code 1 assert_in_stderr "no usable chromsomes in bam" run check_sex_warning ./goleft_test indexcov --sex chrX,chrY -d /tmp/tt sample_name_0001.bam assert_equal $(num_colcounts /tmp/tt/tt-indexcov.ped) 1 mkdir -p samples/ && cd samples/ if [[ ! -e sample_paper.tar.xz ]]; then curl -Ss https://s3.amazonaws.com/b4-test-data/sample_paper.tar.xz > sample_paper.tar.xz fi if [[ ! -e sample_paper_0030.bam.bai ]]; then tar xJf sample_paper.tar.xz fi if [[ ! -e sample_paper_0030.bam ]]; then tar xJf sample_paper.tar.xz fi cd ../ rm -r /tmp/tt run check_no_sex ./goleft_test indexcov --sex "" -d /tmp/tt samples/*.bam assert_in_stderr "index.html for overview" assert_equal $(num_colcounts /tmp/tt/tt-indexcov.ped) 1 if [[ ! -e NA21144.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam.cram.crai ]]; then wget -q ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/phase3/data/NA21144/alignment/NA21144.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam.cram.crai fi if [[ ! -e human_g1k_v37.fasta.fai ]]; then wget -q ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/human_g1k_v37.fasta.fai fi #export INDEXCOV_FMT=svg run check_cohort ./goleft_test indexcov -d /tmp/tt samples/*.bam assert_exit_code 0 assert_equal $(num_colcounts /tmp/tt/tt-indexcov.ped) 1 rm -f /tmp/tt/tt-indexcov.bed.gz run check_exclude ./goleft_test indexcov --excludepatt '^1$' -d /tmp/tt samples/sample_paper_0001.bam assert_equal $(zgrep -wc ^1 /tmp/tt/tt-indexcov.bed.gz ) 0 assert_exit_code 0 cat $STDERR_FILE run check_crai ./goleft_test indexcov --fai human_g1k_v37.fasta.fai -d /tmp/1kg NA21144.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam.cram.crai assert_exit_code 0 assert_in_stderr "index.html for overview" assert_equal $(num_colcounts /tmp/1kg/1kg-indexcov.ped) 1 run check_crai_long_reads ./goleft_test indexcov -fai test-data/viral.fa.fai -d /tmp/clr test-data/viral.crai assert_exit_code 0 assert_in_stderr "index.html for overview" ================================================ FILE: indexcov/indexcov.go ================================================ package indexcov import ( "bufio" "compress/gzip" "fmt" "html/template" "io" "log" "os" "os/exec" "path/filepath" "reflect" "regexp" "sort" "strconv" "strings" "sync" "time" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/mat" "gonum.org/v1/gonum/stat" arg "github.com/alexflint/go-arg" "github.com/biogo/biogo/io/seqio/fai" "github.com/biogo/hts/bam" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/sam" chartjs "github.com/brentp/go-chartjs" "github.com/brentp/go-chartjs/types" "github.com/brentp/goleft" "github.com/brentp/goleft/indexcov/crai" "github.com/brentp/xopen" ) // Ploidy indicates the expected ploidy of the samples. var Ploidy = 2 var cli = &struct { Directory string `arg:"-d,required,help:directory for output files"` IncludeGL bool `arg:"-e,help:plot GL chromosomes like: GL000201.1 which are not plotted by default"` ExcludePatt string `arg:-p,help:regular expression of chromosome names to exclude"` Sex string `arg:"-X,help:comma delimited names of the sex chromosome(s) used to infer sex. Set to '' if no sex chromosomes are present."` Chrom string `arg:"-c,help:optional chromosome to extract depth. default is entire genome."` Fai string `arg:"-f,help:fasta index file. Required when crais are used."` ExtraNormalize bool `arg:"-n,help:normalize across samples and do local smoothign within sample. this is recommended for CRAI"` Bam []string `arg:"positional,required,help:bam(s) or crais for which to estimate coverage"` sex []string `arg:"-"` exclude *regexp.Regexp `arg:"-"` }{Sex: "X,Y", ExcludePatt: `^chrEBV$|^NC|_random$|Un_|^HLA\-|_alt$|hap\d$`} // MaxCN is the maximum normalized value. var MaxCN = float32(8) // Index wraps a bam.Index to cache calculated values. type Index struct { *bam.Index crai *crai.Index path string //mu *sync.RWMutex medianSizePerTile float64 sizes [][]int64 mapped uint64 unmapped uint64 } func (i *Index) Path() string { return i.path } // Sizes returns the size of each block in slices of chromosomes. func (i *Index) Sizes() [][]int64 { return i.sizes } func vOffset(o bgzf.Offset) int64 { return o.File<<16 | int64(o.Block) } // init sets the medianSizePerTile func (x *Index) init() { if x.Index != nil { x.sizes, x.mapped, x.unmapped = getSizes(x.Index) x.Index = nil } else if x.crai != nil { x.sizes = x.crai.Sizes() if x.sizes == nil { log.Fatal("bad index:", x.path) } x.crai = nil } // sizes is used to get the median. sizes := make([]int64, 0, 16384) for k := 0; k < len(x.sizes); k++ { sizes = append(sizes, x.sizes[k]...) } if len(sizes) < 1 { log.Fatalf("indexcov: no usable chromsomes in bam: %s", x.path) } sort.Slice(sizes, func(i, j int) bool { return sizes[i] < sizes[j] }) total := int64(0) cumsum := make([]int64, len(sizes)) // some bins with very high coverage can screw the normalization. // so we cap at the 98th percentile and then take the bin that passed then // median. n98 := sizes[int(0.98*float64(len(sizes)))] for i, s := range sizes { if s > n98 { s = n98 } total += s cumsum[i] = total } var idx = sort.Search(len(cumsum), func(i int) bool { return (cumsum[i]) > (total / 2) }) for idx >= len(sizes) { idx-- } x.medianSizePerTile = float64(sizes[idx]) } // NormalizedDepth returns a list of numbers for the normalized depth of the given region. // Values are scaled to have a mean of 1. If end is 0, the full chromosome is returned. func (x *Index) NormalizedDepth(refID int) []float32 { if x.medianSizePerTile == 0.0 { x.init() } if refID >= len(x.sizes) { return make([]float32, 0) } ref := x.sizes[refID] depths := make([]float32, 0, len(ref)) if x.medianSizePerTile == 0 { return depths } for i, o := range ref { depths = append(depths, float32(float64(o)/x.medianSizePerTile)) if depths[i] > 50000 { depths[i] = 50000 } } return depths } const slots = 70 // with 0.5, we'll get centered at 1 and max of 2. // so the max is 1/slotsMid const slotsMid = float64(2) / float64(3) func tint(f float32) int { if v := int(f); v < slots { if v < 0 { return 0 } return v } return slots - 1 } // CountsAtDepth calculates the count of items in depths that are at 100 * d func CountsAtDepth(depths []float32, counts []int) { if len(counts) != slots { panic(fmt.Sprintf("indexcov: expecting counts to be length %d, was: %d", slots, len(counts))) } for _, d := range depths { counts[tint(d*(slots*float32(slotsMid))+0.5)]++ } } // CountsROC returns a slice that indicates the cumulative proportion of // 16KB chunks that were at least (normalized) depth given by their index. func CountsROC(counts []int) []float32 { totals := make([]int, len(counts)) totals[len(totals)-1] = counts[len(totals)-1] for i := len(totals) - 2; i >= 0; i-- { totals[i] = totals[i+1] + counts[i] } max := float32(totals[0]) roc := make([]float32, len(counts)) for i := 0; i < len(roc); i++ { roc[i] = float32(totals[i]) / max } return roc } func getRef(b *bam.Reader, chrom string) *sam.Reference { refs := b.Header().Refs() if strings.HasPrefix(chrom, "chr") { chrom = chrom[3:] } for _, ref := range refs { if chrom == ref.Name() { return ref } if strings.HasPrefix(ref.Name(), "chr") { if chrom == ref.Name()[3:] { return ref } } } return nil } func GetShortName(b string, isCrai bool) (string, error) { // TODO: replace this with samplename.Names() if !isCrai { fh, err := os.Open(b) if err != nil { return "", err } defer fh.Close() br, err := bam.NewReader(fh, 1) if err != nil { return "", err } defer br.Close() m := make(map[string]bool) for _, rg := range br.Header().RGs() { m[rg.Get(sam.Tag([2]byte{'S', 'M'}))] = true } if len(m) > 1 { return "", fmt.Errorf("bam reagroup: more than one RG for %s", b) } for sm := range m { return sm, nil } } vs := strings.Split(b, "/") v := vs[len(vs)-1] vs = strings.Split(v, ".") if len(vs) <= 2 { return vs[0], nil } v = strings.Join(vs[0:len(vs)-1], "-") return v, nil } func getWriter(base string) (*bgzf.Writer, error) { fh, err := os.Create(fmt.Sprintf("%s.bed.gz", base)) if err != nil { return nil, err } w := bgzf.NewWriter(fh, 1) w.ModTime = time.Unix(0, 0) w.OS = 0xff return w, nil } func zero(ints []int) { for i := range ints { ints[i] = 0 } } func getDirectory(path string) (bool, error) { fi, err := os.Stat(path) if err != nil { if err := os.MkdirAll(path, 0755); err != nil { return false, err } return true, nil } return fi.IsDir(), nil } // ReadFai returns a slit of references from the fai path. // If chrom is "" all chromosomes are returned. func ReadFai(path string, chrom string) []*sam.Reference { f, err := os.Open(path) if err != nil { fmt.Fprintf(os.Stderr, "error opening fai: %s. Is is present?\n", path) panic(err) } idx, err := fai.ReadFrom(f) if err != nil { fmt.Fprintf(os.Stderr, "error opening fai: %s. are you sure this i s a valid fasta index?\n", path) panic(err) } recs := make([]fai.Record, 0, len(idx)) for _, rec := range idx { recs = append(recs, rec) } sort.Slice(recs, func(i, j int) bool { return recs[i].Start < recs[j].Start }) refs := make([]*sam.Reference, 0, len(idx)) for _, rec := range recs { if chrom != "" && rec.Name != chrom { continue } ref, err := sam.NewReference(rec.Name, "", "", rec.Length, nil, nil) if err != nil { panic(err) } // add to the header so the id gets set. refs = append(refs, ref) } if len(refs) == 0 { if chrom != "" { log.Printf("ERROR: didn't find %s in %s", chrom, path) } panic(fmt.Sprintf("ERROR: didn't find any usable chromosomes in %s", path)) } h, err := sam.NewHeader(nil, refs) if err != nil { panic(err) } return h.Refs() } func RefsFromBam(path string, chrom string) []*sam.Reference { rdr, err := os.Open(path) if err != nil { log.Println("ERROR: since no .fai was specified, expected input to be a list of bams") log.Printf("ERROR: got, e.g. %s", path) panic(err) } brdr, err := bam.NewReader(rdr, 2) if err != nil { panic(err) } refs := brdr.Header().Refs() if chrom != "" { refs = append(refs, getRef(brdr, chrom)) } rdr.Close() brdr.Close() if refs == nil { panic(fmt.Sprintf("indexcov: chromosome: %s not found", chrom)) } return refs } func getReferences() []*sam.Reference { if strings.HasSuffix(cli.Bam[0], ".bam") { return RefsFromBam(cli.Bam[0], cli.Chrom) } if cli.Fai != "" { return ReadFai(cli.Fai, cli.Chrom) } if strings.HasSuffix(cli.Bam[0], ".crai") { path := cli.Bam[0][:len(cli.Bam[0])-5] if xopen.Exists(cli.Bam[0][:len(cli.Bam[0])-5] + ".cram") { path = cli.Bam[0][:len(cli.Bam[0])-5] + ".cram" } if p, err := exec.LookPath("samtools"); err == nil { log.Println(p, "view", "-H", path) if out, e := exec.Command(p, "view", "-H", path).Output(); e == nil { if h, e := sam.NewHeader(out, nil); e == nil { return h.Refs() } } else { log.Println(e) } } else { log.Println(err) log.Fatal("indexcov: samtools is required to be on the path if indexcov is given cram indexes without an fai") } } return RefsFromBam(cli.Bam[0], cli.Chrom) } func expandGlobs(paths []string) []string { result := make([]string, 0, len(paths)) for _, p := range paths { matches, err := filepath.Glob(p) if err != nil { log.Fatal("indexcov: error with file path:" + p + "\n" + err.Error()) } for _, m := range matches { result = append(result, m) } } return result } // Main is called from the goleft dispatcher func Main() { chartjs.XFloatFormat = "%.0f" p := arg.MustParse(cli) if len(cli.Bam) == 0 { p.Fail(fmt.Sprintf("indexcov: expected at least 1 bam/bai/crai: %s", os.Args)) } if len(cli.Sex) > 0 { cli.sex = strings.Split(strings.TrimSpace(cli.Sex), ",") } if cli.ExcludePatt != "" { cli.exclude = regexp.MustCompile(cli.ExcludePatt) } if exists, err := getDirectory(cli.Directory); err != nil || !exists { log.Fatalf("indexcov: error creating specified directory: %s, %s", cli.Directory, err) } // the lengths and names of references from bams or fasta refs := getReferences() cli.Bam = expandGlobs(cli.Bam) names := make([]string, len(cli.Bam)) idxs := make([]*Index, len(cli.Bam)) ch := make(chan rdi, 8) wg := &sync.WaitGroup{} wg.Add(8) for k := 0; k < 8; k++ { go func() { for r := range ch { idx, name, i := readIndex(r) names[i] = name idxs[i] = idx } wg.Done() }() } for i, b := range cli.Bam { ch <- rdi{bamPath: b, i: i} } close(ch) wg.Wait() sexes, counts, pca8, chromNames, slopes := run(refs, idxs, names, getBase(cli.Directory), cli.ExtraNormalize) mapped := make([]uint64, len(names)) unmapped := make([]uint64, len(names)) anygt := false for i, ix := range idxs { mapped[i] = ix.mapped unmapped[i] = ix.unmapped if ix.mapped > 0 || ix.unmapped > 0 { anygt = true } } if !anygt { mapped = nil unmapped = nil } chartjs.XFloatFormat = "%.2f" if indexPath := writeIndex(sexes, counts, names, cli.Directory, pca8, slopes, chromNames, mapped, unmapped); indexPath != "" { fmt.Fprintf(os.Stderr, "indexcov finished: see %s for overview of output\n", indexPath) } } type rdi struct { bamPath string i int } // ReadIndex returns an Index pointer from the specified bam or crai path. func ReadIndex(path string) *Index { i, _, _ := readIndex(rdi{path, 0}) return i } // get an initialized index from a bamPath. // `i` is used in the return when parallelized to keep same order. func readIndex(r rdi) (*Index, string, int) { b := r.bamPath if strings.HasSuffix(b, ".crai") { f, err := os.Open(b) if err != nil { panic(err) } gz, err := gzip.NewReader(f) if err != nil { log.Printf("error from index: %s", b) panic(err) } cr, err := crai.ReadIndex(gz) if err != nil { log.Printf("error from index: %s", b) panic(err) } idx := &Index{crai: cr, path: b} idx.init() nm, err := GetShortName(b, true) if err != nil { panic(err) } return idx, nm, r.i } suf := ".bai" if strings.HasSuffix(b, ".bai") { suf = "" } if strings.HasSuffix(b, ".cram") { log.Printf("WARNING: when using CRAM files, send the crai indexes to indexcov, not the alignment files") } rdr, err := os.Open(b + suf) if err != nil { var terr error rdr, terr = os.Open(b[:(len(b)-4)] + suf) if terr != nil { panic(err) } } dx, err := bam.ReadIndex(bufio.NewReader(rdr)) if err != nil { panic(err) } idx := &Index{Index: dx, path: b} idx.init() nm, err := GetShortName(b, strings.HasSuffix(b, ".bai")) if err != nil { panic(err) } return idx, nm, r.i } // if there are more samples than this then the depth plots won't be drawn. const maxSamples = 100 func sameChrom(as []string, b string) bool { for _, a := range as { if a == b { return true } na := a if strings.HasPrefix(a, "chr") { na = a[3:] } else if strings.HasPrefix(b, "chr") { na = "chr" + a } if na == b { return true //log.Printf(`indexcov: found chromosome "%s", wanted "%s" please use exact chromosome names for --sex.`, b, a) } } return false } func normalizeAcrossSamples(depths [][]float32) { // depths is n_samples, n-sites if len(depths) < 5 { return } var maxLen = 0 for _, d := range depths { if len(d) > maxLen { maxLen = len(d) } } for j := 0; j < maxLen; j++ { var m float64 = 0 var n float64 = 0 for i := range depths { if len(depths[i]) > j { // take mean of j-1:j+1 for a bit of smoothing m += float64(depths[i][j]) n++ if j > 0 { m += float64(depths[i][j-1]) n++ } if j < len(depths[i])-1 { m += float64(depths[i][j+1]) n++ } } } if int(n) < 3*len(depths)-4 { continue } m /= n if m < 0.1 { continue } for i := range depths { if len(depths[i]) > j { depths[i][j] /= float32(m) if j > 2 && j < len(depths[i])-3 { // i + 1 is not scaled yet, so scale it here. // moving average of window-size 5 depths[i][j] = 1.0 / 7.0 * (depths[i][j-3] + depths[i][j-2] + depths[i][j-1] + depths[i][j] + depths[i][j+1]/float32(m) + depths[i][j+2]/float32(m) + depths[i][j+3]/float32(m)) } } } } } func run(refs []*sam.Reference, idxs []*Index, names []string, base string, interSampleNormalize bool) (map[string][]float64, []*counter, [][]uint8, []string, []float32) { // keep a slice of charts since we plot all of the coverage roc charts in a single html file. sexes := make(map[string][]float64) counts := make([][]int, len(idxs)) depths := make([][]float32, len(idxs)) // slope of coverage line between 1-delta and 1+delta. slopes, nSlopes := make([]float32, len(idxs)), 0 offs := make([]*counter, len(idxs)) // uint8 to use less memory. pca8 := make([][]uint8, len(idxs)) log.Printf("indexcov: running on %d indexes", len(idxs)) if len(idxs) > maxSamples { log.Printf("indexcov: creating only static (no interactive) plots for depth because # of samples %d is > %d\n", len(idxs), maxSamples) } tmp, err := getWriter(base) if err != nil { panic(err) } defer tmp.Close() bgz := bufio.NewWriter(tmp) defer bgz.Flush() rtmp, err := os.Create(fmt.Sprintf("%s.roc", base)) if err != nil { panic(err) } defer rtmp.Close() rfh := bufio.NewWriter(rtmp) defer rfh.Flush() chromNames := make([]string, 0, len(refs)) fmt.Fprintf(bgz, "#chrom\tstart\tend\t%s\n", strings.Join(names, "\t")) ir := -1 var nreported = 0 for _, ref := range refs { chrom := ref.Name() if cli.exclude != nil && cli.exclude.Match([]byte(chrom)) { if nreported < 10 { log.Printf("indexcv: excluding chromosome: %s because of exclude-pattern: %s", chrom, cli.ExcludePatt) nreported += 1 if nreported == 10 { log.Println("not reporting further skipped chromosomes") } } continue } ir++ // Some samples may not have all the data, so we always take the longest sample for printing. longest, longesti := 0, 0 for k, idx := range idxs { if ir == 0 { pca8[k] = make([]uint8, 0, 2e5) offs[k] = &counter{} } depths[k] = idx.NormalizedDepth(ref.ID()) if len(depths[k]) > longest { longesti = k longest = len(depths[k]) } if ir == 0 { counts[k] = make([]int, slots) } else { zero(counts[k]) } } isSex := sameChrom(cli.sex, chrom) if interSampleNormalize && !isSex { normalizeAcrossSamples(depths) } for k := range idxs { CountsAtDepth(depths[k], counts[k]) } for i := 0; i < len(depths[longesti]); i++ { fmt.Fprintf(bgz, "%s\t%d\t%d\t%s\n", chrom, i*16384, (i+1)*16384, depthsFor(depths, i)) } if isSex { if len(depths[longesti]) > 0 { sexes[chrom] = GetCN(depths) } } else { // now add non-sex chromosomes to the pca data since we know the longest. var dp float32 for k := range idxs { i := -1 // initalize to -1 to differentiate from never entering loop. dps := depths[k] for i, dp = range dps { // := depths[k][i] if dp > MaxCN { dp = MaxCN depths[k][i] = dp } pca8[k] = append(pca8[k], uint8(65535/MaxCN*dp+0.5)) } for ; i < longest; i++ { pca8[k] = append(pca8[k], 0) } offs[k].count(dps, longest) } } if len(depths[longesti]) > 0 { c, rocs := writeROCs(counts, names, chrom, rfh) // only plot those with at least 3 regions. if (cli.IncludeGL || !strings.HasPrefix(chrom, "GL")) && len(depths[longesti]) > 2 { if !isSex && longest > 100 { updateSlopes(rocs, float32(ref.Len())/1e6, slopes) nSlopes++ } chromNames = append(chromNames, chrom) if err := plotDepths(depths, names, chrom, base, len(names) <= maxSamples); err != nil { panic(err) } tmp := chartjs.XFloatFormat chartjs.XFloatFormat = "%.2f" c.Options.Legend = &chartjs.Legend{Display: types.False} link := `back to index` saveCharts(fmt.Sprintf("%s-roc-%s.html", base, chrom), "", link, c) chartjs.XFloatFormat = tmp asPng(fmt.Sprintf("%s-roc-%s.png", base, chrom), c, 4, 3) } } } for i, s := range slopes { slopes[i] = s / float32(nSlopes) } checkSexes(sexes, cli.sex) return sexes, offs, pca8, chromNames, slopes } // updateSlopes adjusts the slopes slice for each sample. // The value is the slope between 1+/-delta scaled by scalar // where scalar is likely chromosome length to weight chromosomes. func updateSlopes(rocs [][]float32, scalar float32, slopes []float32) { //mid := slotsMid * slots n := 0.1 ilo := int(0.5 + (slotsMid-n)*slots) ihi := int(0.5 + (slotsMid+n)*slots) // value around 1 is: (0.6666+/-0.15)/0.6666 for i := range slopes { vals := rocs[i] lo, hi := vals[ilo], vals[ihi] slopes[i] += float32(lo-hi) * scalar } } func keys(o map[string][]float64) []string { skeys := make([]string, 0, len(o)) for k := range o { skeys = append(skeys, k) } return skeys } func checkSexes(obs map[string][]float64, exp []string) { if len(obs) != len(exp) { msg := fmt.Sprintf("indexcov: expected %d sex chromosomes, found: %d.", len(exp), len(obs)) msg += fmt.Sprintf("\nyou can set the expected with --sex '%s'", strings.Join(keys(obs), ",")) // if it found no sex chromosomes *and* it was not the default, then error. // but it it was the default, it's just a warning. if len(obs) == 0 && !reflect.DeepEqual(exp, []string{"X", "Y"}) { log.Fatal("(FATAL) " + msg) } fmt.Fprintln(os.Stderr, "(WARNING) "+msg) } } func pca(pca8 [][]uint8, samples []string) (*mat.Dense, []chartjs.Chart, string) { imat := mat.NewDense(len(pca8), len(pca8[0]), nil) row := make([]float64, len(pca8[0])) for i := 0; i < len(pca8); i++ { for j, v := range pca8[i] { row[j] = float64(v) } imat.SetRow(i, row) } var pc stat.PC if ok := pc.PrincipalComponents(imat, nil); !ok { panic("indexcov: error with principal components") } k := 5 vars := pc.VarsTo(nil) floats.Scale(1/floats.Sum(vars), vars) if len(vars) < k { k = len(vars) log.Printf("got: %d principal components", len(vars)) if k < 3 { log.Printf("indexcov: %d principal components, not plotting", k) return nil, nil, "" } } vars = vars[:k] var proj mat.Dense var dst mat.Dense pc.VectorsTo(&dst) proj.Mul(imat, dst.Slice(0, len(pca8[0]), 0, k)) pcaPlots, customjs := plotPCA(&proj, samples, vars) return &proj, pcaPlots, customjs } func getBase(directory string) string { prefix := filepath.Base(directory) return directory + string(os.PathSeparator) + prefix + "-indexcov" } // write an index.html and a ped file. includes the PC projections and inferred sexes. func writeIndex(sexes map[string][]float64, counts []*counter, samples []string, directory string, pca8 [][]uint8, slopes []float32, chromNames []string, mapped []uint64, unmapped []uint64) string { if len(sexes) == 0 { log.Println("sex chromosomes not found.") } pcs, pcaPlots, pcajs := pca(pca8, samples) binChart, binjs := plotBins(counts, samples) sexes["_inferred"] = make([]float64, len(samples)) f, err := os.Create(fmt.Sprintf("%s.ped", getBase(directory))) if err != nil { panic(err) } defer f.Close() hdr := make([]string, len(sexes)-1, len(sexes)+7) keys := make([]string, 0, len(sexes)) for k := range sexes { if k == "_inferred" { continue } keys = append(keys, k) } sort.Strings(keys) for i, k := range keys { hdr[i] = "CN" + k } hdr = append(hdr, []string{"bins.out", "bins.lo", "bins.hi", "bins.in", "slope", "p.out"}...) var c int if pcs != nil { _, c = pcs.Dims() for i := 0; i < 5 && i < c; i++ { hdr = append(hdr, fmt.Sprintf("PC%d", i+1)) } } if mapped != nil { hdr = append(hdr, "mapped") hdr = append(hdr, "unmapped") } fmt.Fprintf(f, "#family_id\tsample_id\tpaternal_id\tmaternal_id\tsex\tphenotype\t%s\n", strings.Join(hdr, "\t")) tmpl := "unknown\t%s\t-9\t-9\t%d\t-9\t" var inferred int for i, s := range samples { if counts[i] == nil { continue } if len(sexes) > 1 { // 1 key for _inferred inferred = int(0.5 + sexes[keys[0]][i]) } else { inferred = -9 } fmt.Fprintf(f, tmpl, s, inferred) sexes["_inferred"][i] = float64(inferred) s := make([]string, 0, len(keys)+4) for _, k := range keys { if _, ok := sexes[k]; ok { s = append(s, fmt.Sprintf("%.2f", sexes[k][i])) } else { s = append(s, "-9") } } cnt := counts[i] s = append(s, []string{ fmt.Sprintf("%d", cnt.out), fmt.Sprintf("%d", cnt.low), fmt.Sprintf("%d", cnt.hi), fmt.Sprintf("%d", cnt.in), fmt.Sprintf("%.3f", slopes[i]), fmt.Sprintf("%.2f", float64(cnt.out)/float64(cnt.in)), }...) for j := 0; j < c && j < 5; j++ { s = append(s, fmt.Sprintf("%.2f", pcs.At(i, j))) } if mapped != nil { s = append(s, strconv.Itoa(int(mapped[i]))) s = append(s, strconv.Itoa(int(unmapped[i]))) } fmt.Fprintln(f, strings.Join(s, "\t")) } var sexChart *chartjs.Chart var sexjs string if len(keys) > 1 && len(sexes) > 1 { sexChart, sexjs, err = plotSex(sexes, keys[:2], samples) if err != nil { panic(err) } } var mapChart *chartjs.Chart var mapjs string if mapped != nil { mapChart, mapjs, err = plotMapped(mapped, unmapped, samples) if err != nil { panic(err) } } indexPath := fmt.Sprintf("%s%cindex.html", directory, os.PathSeparator) wtr, err := os.Create(indexPath) if err != nil { panic(err) } if sexChart != nil { asPng(fmt.Sprintf("%s-sex.png", getBase(directory)), *sexChart, 6, 6) } chartMap := map[string]interface{}{"pcajs": template.JS(pcajs), "pcbjs": template.JS(pcajs), "template": chartTemplate, "sex": sexChart, "hasSex": sexChart != nil, "sexjs": template.JS(sexjs), "mapChart": mapChart, "hasMap": mapped != nil, "mapjs": template.JS(mapjs), "bin": binChart, "binjs": template.JS(binjs), "version": goleft.Version, "prefix": getBase(directory), "name": filepath.Base(directory), "chroms": chromNames} if len(pcaPlots) > 1 { chartMap["pca"] = pcaPlots[0] chartMap["pcb"] = pcaPlots[1] chartMap["hasPCA"] = true } else { chartMap["hasPCA"] = false } chartMap["notmany"] = len(samples) <= maxSamples if err := chartjs.SaveCharts(wtr, chartMap, chartjs.Chart{}); err != nil { panic(err) } wtr.Close() return indexPath } // GetCN returns an float per sample estimating the number of copies of that chromosome. // It is a very crude estimate, but that's what indexcov is and it tends to work well. func GetCN(depths [][]float32) []float64 { if depths == nil { return nil } meds := make([]float64, 0, len(depths)) for _, d := range depths { tmp := make([]float32, 0, len(d)) lows := 0 for _, dp := range d { // exclude sites that are exactly 0 as these are the centromere. if dp != 0 { tmp = append(tmp, dp) if dp < 0.02 { lows++ } } } if len(tmp) > 0 { sort.Slice(tmp, func(i, j int) bool { return tmp[i] < tmp[j] }) // e.g. on Y, there are so many very low values in males and females that we have to filter... pLo := float64(lows) / float64(len(d)) if pLo > 0.3 { tmp = tmp[lows:] } var med float64 = 0 if len(tmp) > 0 { med = float64(float32(Ploidy) * tmp[int(float64(len(tmp))*0.4)]) } meds = append(meds, med) } else { meds = append(meds, -0.1) } } return meds } func saveCharts(path string, customjs string, customHTML string, charts ...chartjs.Chart) { if len(charts) == 0 { return } wtr, err := os.Create(path) if err != nil { panic(err) } defer wtr.Close() if err := chartjs.SaveCharts(wtr, map[string]interface{}{"height": 550, "width": 650, "custom": template.JS(customjs), "customHTML": template.HTML(customHTML)}, charts...); err != nil { panic(err) } } func getROCs(counts [][]int) [][]float32 { rocs := make([][]float32, len(counts)) for i, scount := range counts { rocs[i] = CountsROC(scount) } return rocs } func writeROCs(counts [][]int, names []string, chrom string, fh io.Writer) (chartjs.Chart, [][]float32) { rocs := getROCs(counts) chart, err := plotROCs(rocs, names, chrom) if err != nil { panic(err) } fmt.Fprintf(fh, "#chrom\tcov\t%s\n", strings.Join(names, "\t")) nSamples := len(names) vals := make([]string, nSamples) for i := 0; i < slots; i++ { for k := 0; k < nSamples; k++ { vals[k] = fmt.Sprintf("%.2f", rocs[k][i]) } fmt.Fprintf(fh, "%s\t%.2f\t%s\n", chrom, float64(i)/(slots*slotsMid), strings.Join(vals, "\t")) } return chart, rocs } func depthsFor(depths [][]float32, i int) string { s := make([]string, len(depths)) for j := 0; j < len(depths); j++ { if i >= len(depths[j]) { s[j] = "0" } else { s[j] = fmt.Sprintf("%.3g", depths[j][i]) } } return strings.Join(s, "\t") } type counter struct { // count of sites outside of (0.85, 1.15) out int // count of sites below 0.15 low int // count of sites above 1.15 hi int // count of sites inside of (0.85, 1.15) in int } // count values in or out of expected range of ~1. func (c *counter) count(depths []float32, n int) { var i int for ; i < len(depths); i++ { if depths[i] < 0.85 || depths[i] > 1.15 { c.out++ if depths[i] > 1.15 { c.hi++ } else if depths[i] < 0.15 { c.low++ } } else { c.in++ } } c.out += n - i c.low += n - i } ================================================ FILE: indexcov/indexcov_test.go ================================================ package indexcov import ( "testing" ) func TestShortName(t *testing.T) { r, err := GetShortName("asdf.cram", true) if r != "asdf" || err != nil { t.Errorf("expected: 'asdf', got: %s", r) } r, err = GetShortName("/path/to/v1/asdf.123.cram", true) if r != "asdf-123" || err != nil { t.Errorf("expected: 'asdf-123', got: %s", r) } } ================================================ FILE: indexcov/paper/cmp.py ================================================ import sys import gzip import itertools as it import numpy as np import scipy.stats as ss from matplotlib import pyplot as plt import seaborn as sns sns.set_style('whitegrid') fha = (gzip.open if sys.argv[1].endswith(".gz") else open)(sys.argv[1]) fhb = (gzip.open if sys.argv[2].endswith(".gz") else open)(sys.argv[2]) LCR = len(sys.argv) > 3 and sys.argv[3] == "LCR" def gen(fh): for line in fh: toks = line.rstrip().split("\t") toks[1], toks[2] = int(toks[1]), int(toks[2]) toks[3] = float(toks[3]) yield toks xs, ys = [], [] lcr = [] ras = [] rbs = [] for i, (a, b) in enumerate(it.izip(gen(fha), gen(fhb))): if a[1] != b[1]: raise Exception("expected same positions for both files") xs.append(a[3]) ys.append(b[3]) if LCR: assert b[4] == a[4] lcr.append(b[4] != '0') ras.append(a) rbs.append(b) #if not lcr[-1]: # print(abs(xs[-1] - ys[-1]), lcr[-1]) plt.rc('ytick', labelsize=16) plt.rc('xtick', labelsize=16) fig, axes = plt.subplots(1, figsize=(18, 14)) axes = (axes,) ras, rbs = np.array(ras), np.array(rbs) lcr = np.array(lcr) ys = np.array(ys) ys /= np.median(ys) xs = np.array(xs) if LCR: xs = xs[~lcr] ys = ys[~lcr] ras = ras[~lcr] rbs = rbs[~lcr] diff = xs - ys print diff[np.abs(diff) > 0.5] for a, b, d, sc in zip(ras[np.abs(diff)>0.5].tolist(), rbs[np.abs(diff)>0.5].tolist(), diff[np.abs(diff) > 0.5], ys[np.abs(diff) > 0.5]): print a, b, d, sc out = sum(abs(d) > 0.5 for d in diff) print "out:", out, "total:", len(diff), ("%.2f" % (100.0*out/len(diff))) print "max diff:", np.abs(diff).max() print "corr:", np.corrcoef(xs, ys)[0, 1] from scipy.stats import spearmanr print "spearman corr:", spearmanr(xs, ys)[0] print sum(abs(d) < 0.25 for d in diff) / float(len(diff)) print sum(abs(d) < 0.1 for d in diff) / float(len(diff)) sdiff = diff[np.abs(diff) < 0.5] axes[0].hist(sdiff, 40) axes[0].set_xlim(-0.5, 0.5) axes[0].set_xlabel("Difference in depth estimate (indexcov - samtools)", fontsize=20) axes[0].set_ylabel("Number of Tiles", fontsize=20) out = (np.abs(diff) > 0.5).sum() #ax = axes[0] #for label in (ax.get_xticklabels() + ax.get_yticklabels()): # label.set_fontsize(15) d = "/uufs/chpc.utah.edu/common/home/u6000771/public_html/" plt.savefig(d + "figure-1.eps") plt.show() ================================================ FILE: indexcov/paper/cmp.sh ================================================ ref=Homo_sapiens.GRCh38.dna.toplevel.fa bam=NA12878_S1.bam set -eu chrom=chr1 if [[ ! -e st.depth.$chrom.depth.bed ]]; then time ~/bin/goleft depth --chrom $chrom -p 20 -o -w 16384 --reference $ref $bam --prefix st.depth #time samtools depth $bam > /dev/null fi time ~/bin/goleft indexcov -d ix.depth --sex "chrX,chrY" $bam zgrep -w $chrom ix.depth/ix.depth-indexcov.bed.gz > ix.depth/$chrom.bed python cmp.py ix.depth/$chrom.bed st.depth.$chrom.depth.bed bedtools intersect -sorted -a st.depth.$chrom.depth.bed -b <(zgrep -w "^chr1" LCR-hs38.bed.gz) -c > noLCR.st.bed bedtools intersect -sorted -a ix.depth/$chrom.bed -b <(zgrep -w "^chr1" LCR-hs38.bed.gz) -c > noLCR.ix.bed python cmp.py noLCR.ix.bed noLCR.st.bed LCR ================================================ FILE: indexcov/paper/plot-bins.py ================================================ from matplotlib import pyplot as plt plt.rcParams['pdf.fonttype'] = 42 import pandas as pd import seaborn as sns sns.set_style('whitegrid') sns.set_palette('Set1') pcr_plus = set(x.strip() for x in open('pcr-plus.samples')) df = pd.read_table('simons-indexcov.ped', index_col='sample_id') size = 9 pp = df.loc[pcr_plus] tot = pp['bins.in'] + pp['bins.out'] plt.scatter(pp['bins.lo'] / tot, pp['bins.out'] / tot, alpha=0.55, label='PCR +', s=size, zorder=2) pf = df.loc[[x for x in df.index if not x in pcr_plus]] tot = pf['bins.in'] + pf['bins.out'] plt.scatter(pf['bins.lo'] / tot, pf['bins.out'] / tot, alpha=0.55, label='PCR free', s=size) plt.xlabel('Proportion of bins with scaled coverage < 0.15') plt.ylabel('Proportion of bins with scaled coverage outside of (0.85, 1.15)') plt.xlim(xmin=0.067, xmax=0.0695) plt.legend() plt.savefig('figure4.eps', dpi=1000) ================================================ FILE: indexcov/paper/plot-eiee-15.py ================================================ from matplotlib import pyplot as plt import pandas as pd import seaborn as sns sns.set_style('white') df = pd.read_table('eiee.15.bed.gz', compression='gzip') print(df.head()) cols = list(df.columns) cols[0] = "chrom" cols = [c for c in cols[3:] if c != '15-0022964' and c != '15-0022989'] fig, ax = plt.subplots(1) for c in cols: ax.plot(df['start'], df[c], color='#cdcdcd', lw=0.3) ax.plot(df['start'], df['15-0022989'], color='#a01b1b', lw=0.2, alpha=0.4) ax.plot(df['start'], df['15-0022964'], color='#487535', lw=0.2, alpha=0.8) ax.set_ylabel("Scaled Coverage") ax.set_xlabel("Position On Chromosome 15") ax.set_xlim(xmin=0, xmax=df.start.max()) print(df.start.max()) ax.axhline(y=1, color='#111111', ls="-", lw=0.6) ax.set_ylim(0, 3) plt.draw() ticks = ax.get_xticks() labels = ["%dM" % (t / 1000000) for t in ticks if t < df.start.max()] ax.set_xticks(ticks, labels) ax.set_xticklabels(labels) ax.set_xlim(xmin=0, xmax=df.start.max()) sns.despine() plt.show() plt.close() fig, ax = plt.subplots(1) df = pd.read_table('eiee.15.roc') for c in cols: ax.plot(df['cov'], df[c], color='#dddddd', lw=2) ax.plot(df['cov'], df['15-0022989'], color='#a01b1b', lw=1.6, alpha=0.4) ax.plot(df['cov'], df['15-0022964'], color='#487535', lw=1.6, alpha=0.8) ax.set_xlabel("Scaled Coverage") ax.set_ylabel("Proportion of Regions Covered") sns.despine() plt.show() ================================================ FILE: indexcov/paper/plot-simons-sex.py ================================================ from matplotlib import pyplot as plt import pandas as pd import seaborn as sns sns.set_style('whitegrid') df = pd.read_table('simons-indexcov.with-pca-free.ped') fig, ax = plt.subplots(1) """ family_id sample_id paternal_id maternal_id sex phenotype CNX CNY bins.out bins.lo bins.hi bins.in slope p.out PC1 PC2 PC3 PC4 PC5 pcr unknown SS0012978 -9 -9 2 -9 1.99 0.00 16893 11865 3515 159270 118.575 0.11 -206.56 404.37 1830.56 -864.83 2393.05 0 unknown SS0012979 -9 -9 1 -9 1.02 1.03 16803 11830 3344 159360 118.681 0.11 1673.99 -705.83 2592.70 -2354.44 -624.61 0 unknown SS0013012 -9 -9 2 -9 1.99 0.00 17248 11848 3716 158915 118.316 0.11 -965.45 -867.86 1960.27 -1007.85 1912.20 0 unknown SS0013018 -9 -9 1 -9 1.03 1.03 16884 11840 3393 159279 118.592 0.11 1132.93 -1922.86 1063.57 -2462.44 590.51 0 unknown SSC00003 -9 -9 1 -9 1.03 1.03 16945 11840 3495 159218 118.544 0.11 -139.27 135.12 1718.49 -1230.76 1844.47 0 unknown SSC00004 -9 -9 1 -9 1.02 1.02 19159 11841 5762 157004 116.745 0.12 -160.11 -1011.12 2903.40 -320.78 3020.00 0 unknown SSC00005 -9 -9 2 -9 1.99 0.00 17241 11827 3969 158922 118.284 0.11 1159.92 164.66 1301.97 -948.43 2678.17 0 unknown SSC00006 -9 -9 1 -9 1.03 1.03 16743 11836 3273 159420 118.710 0.11 465.95 -1278.65 629.43 -1894.03 1565.34 0 unknown SSC00011 -9 -9 1 -9 1.02 1.01 16761 11841 3292 159402 118.689 0.11 -647.15 1066.58 2230.69 -614.67 2766.30 0 """ colors = sns.color_palette('Set2', 4) for i, y in enumerate(sorted(df.sex.unique())): sub = df.sex == y ax.scatter(df['CNX'][sub], df['CNY'][sub], facecolors=colors[i], edgecolors=(0.8, 0.8, 0.8), label='inferred CN for chrX: %d' % y) ax.set_xlabel("X copy number") ax.set_ylabel("Y copy number") ax.set_xticks([0, 1, 2]) ax.set_yticks([0, 1, 2]) legend = ax.legend(frameon=True, loc="upper left") legend.get_frame().set_facecolor('#fafafa') sns.despine() plt.show() ================================================ FILE: indexcov/paper/scripts/cmp.py ================================================ import sys import gzip import itertools as it import numpy as np import scipy.stats as ss from matplotlib import pyplot as plt import seaborn as sns sns.set_style('whitegrid') fha = (gzip.open if sys.argv[1].endswith(".gz") else open)(sys.argv[1]) fhb = (gzip.open if sys.argv[2].endswith(".gz") else open)(sys.argv[2]) def gen(fh): for line in fh: toks = line.rstrip().split("\t") toks[1], toks[2] = int(toks[1]), int(toks[2]) toks[3] = float(toks[3]) yield toks xs, ys = [], [] for i, (a, b) in enumerate(it.izip(gen(fha), gen(fhb))): if a[1] != b[1]: raise Exception("expected same positions for both files") xs.append(a[3]) ys.append(b[3]) if xs[-1] < 0.05 and ys[-1] > 20: print(a, b) plt.rc('ytick', labelsize=16) plt.rc('xtick', labelsize=16) fig, axes = plt.subplots(1, figsize=(18, 14)) axes = (axes,) ys = np.array(ys) ys /= np.median(ys) xs = np.array(xs) diff = xs - ys out = sum(abs(d) > 0.5 for d in diff) print "out:", out, "total:", len(diff), ("%.2f" % (100.0*out/len(diff))) print sum(abs(d) < 0.25 for d in diff) / float(len(diff)) print sum(abs(d) < 0.1 for d in diff) / float(len(diff)) diff = diff[np.abs(diff) < 0.5] axes[0].hist(diff, 40) axes[0].set_xlim(-0.5, 0.5) axes[0].set_xlabel("Difference in depth estimate (indexcov - samtools)", fontsize=20) axes[0].set_ylabel("Number of Tiles", fontsize=20) #ax = axes[0] #for label in (ax.get_xticklabels() + ax.get_yticklabels()): # label.set_fontsize(15) d = "/uufs/chpc.utah.edu/common/home/u6000771/public_html/" plt.savefig(d + "figure-1.eps") plt.show() ================================================ FILE: indexcov/paper/scripts/cmp.sh ================================================ ref=Homo_sapiens.GRCh38.dna.toplevel.fa bam=NA12878_S1.bam set -eu chrom=chr1 if [[ ! -e st.depth.$chrom.depth.bed ]]; then time ~/bin/goleft depth -p 20 --chrom $chrom -o -w 16384 --reference $ref $bam --prefix st.depth fi time ~/bin/goleft indexcov -d ix.depth --sex "chrX,chrY" $bam zgrep -w $chrom ix.depth/ix.depth-indexcov.bed.gz > ix.depth/$chrom.bed python cmp.py ix.depth/$chrom.bed st.depth.$chrom.depth.bed ================================================ FILE: indexcov/plot.go ================================================ package indexcov import ( "encoding/json" "fmt" "html/template" "image/color" "log" "math" "math/rand" "os" "strconv" "strings" "gonum.org/v1/gonum/mat" "gonum.org/v1/plot" "gonum.org/v1/plot/plotter" "gonum.org/v1/plot/vg" chartjs "github.com/brentp/go-chartjs" "github.com/brentp/go-chartjs/types" ) type vs struct { xs []float64 ys []float64 } func (v *vs) Xs() []float64 { return v.xs } func (v *vs) Ys() []float64 { return v.ys } func (v *vs) Rs() []float64 { return nil } func (v *vs) Len() int { return len(v.xs) } // make it meet gonum/plot plotter.XYer func (v *vs) XY(i int) (x, y float64) { return v.xs[i], v.ys[i] } func (v *vs) Sample(nth int) *vs { o := &vs{xs: make([]float64, 0, 10+len(v.xs)/nth), ys: make([]float64, 0, 10+len(v.xs)/nth)} for i, x := range v.xs { if i%nth == 0 { o.xs = append(o.xs, x) o.ys = append(o.ys, v.ys[i]) } } return o } // truncate depth values above this to cnMax const cnMax = 2.5 func asValues(vals []float32, multiplier float64) chartjs.Values { // skip until we find non-zero. v := vs{xs: make([]float64, 0, len(vals)), ys: make([]float64, 0, len(vals))} seenNonZero := false for i, r := range vals { if r == 0 && !seenNonZero { continue } seenNonZero = true v.xs = append(v.xs, float64(i)*multiplier) if r > cnMax { r = cnMax } v.ys = append(v.ys, float64(r)) } return &v } // user can set environment variable INDEXCOV_N_BACKGROUNDS to a // number `n` so that the first `n` samples are given a gray color. var backgroundN int func init() { if v := os.Getenv("INDEXCOV_N_BACKGROUNDS"); v != "" { if i, err := strconv.Atoi(v); err == nil { log.Printf("[indexcov] setting first %d samples as background", i) backgroundN = i } } } func randomColor(s int, check bool) *types.RGBA { if check && s < backgroundN { return &types.RGBA{R: 180, G: 180, B: 180, A: 240} } rand.Seed(int64(s)) return &types.RGBA{ R: uint8(rand.Intn(256)), G: uint8(rand.Intn(256)), B: uint8(rand.Intn(256)), A: 240} } func plotDepths(depths [][]float32, samples []string, chrom string, base string, writeHTML bool) error { chart := chartjs.Chart{Label: chrom} xa, err := chart.AddXAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Bottom, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "position on " + chrom, Display: chartjs.True}}) if err != nil { return err } ya, err := chart.AddYAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Left, Tick: &chartjs.Tick{Min: 0, Max: 2.5}, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "scaled coverage", Display: chartjs.True}}) if err != nil { return err } w := 0.4 if len(depths) > 30 { w = 0.3 } if len(depths) > 50 { w = 0.2 } datasets := make([]chartjs.Dataset, 0, len(depths)) for i, depth := range depths { xys := asValues(depth, 16384) //log.Println(chrom, samples[i], len(xys.Xs())) c := randomColor(i, true) dataset := chartjs.Dataset{Data: xys, Label: samples[i], Fill: chartjs.False, PointRadius: 0, BorderWidth: w, BorderColor: c, BackgroundColor: c, SteppedLine: chartjs.True, PointHitRadius: 6} dataset.XAxisID = xa dataset.YAxisID = ya datasets = append(datasets, dataset) } for i := len(datasets) - 1; i >= 0; i-- { chart.AddDataset(datasets[i]) } chart.Options.Responsive = chartjs.False chart.Options.Tooltip = &chartjs.Tooltip{Mode: "nearest"} if writeHTML { wtr, err := os.Create(fmt.Sprintf("%s-depth-%s.html", base, chrom)) if err != nil { return err } link := template.HTML(`back to index`) if err := chart.SaveHTML(wtr, map[string]interface{}{"width": 850, "height": 550, "customHTML": link}); err != nil { return err } if err := wtr.Close(); err != nil { return err } } asPng(fmt.Sprintf("%s-depth-%s.png", base, chrom), chart, 4, 3) return nil } func plotBins(counts []*counter, samples []string) (chartjs.Chart, string) { c := &types.RGBA{R: 110, G: 250, B: 59, A: 240} chart := chartjs.Chart{} xa, err := chart.AddXAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Bottom, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "proportion of bins with depth < 0.15", Display: chartjs.True}, Tick: &chartjs.Tick{Min: 0.0001}}) if err != nil { panic(err) } ya, err := chart.AddYAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Left, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "proportion of bins with depth outside of (0.85, 1.15)", Display: chartjs.True}, Tick: &chartjs.Tick{Min: 0.000001}}) if err != nil { panic(err) } cxys := &vs{xs: make([]float64, 0, len(counts)), ys: make([]float64, 0, len(counts))} bxys := &vs{xs: make([]float64, 0, len(counts)), ys: make([]float64, 0, len(counts))} min, max := float64(1000000), float64(0) for i, c := range counts { xys := cxys if i < backgroundN { xys = bxys } if c == nil { continue } tot := float64(c.in + c.out) val := float64(c.low) / math.Max(tot, 1) xys.xs = append(xys.xs, val) if val > max { max = val } if val < min { min = val } xys.ys = append(xys.ys, float64(c.out)/tot) } rng := max - min chart.Options.Scales.XAxes[0].Tick.Min = min - 0.1*rng chart.Options.Scales.XAxes[0].Tick.Max = max + 0.1*rng if backgroundN > 0 { plotBinsSet(&chart, bxys, &types.RGBA{R: 180, G: 180, B: 180, A: 240}, xa, ya) } plotBinsSet(&chart, cxys, c, xa, ya) chart.Options.Responsive = chartjs.False chart.Options.Tooltip = &chartjs.Tooltip{Mode: "nearest"} chart.Options.Legend = &chartjs.Legend{Display: chartjs.False} sjson, err := json.Marshal(samples[backgroundN:]) if err != nil { panic(err) } jsfunc := fmt.Sprintf(` bin_chart.options.tooltips.callbacks.title = function(tts, data) { var names = %s var has_backgrounds = %v var out = [] tts.forEach(function(ti) { if(has_backgrounds == (ti.datasetIndex == 1)) { out.push(names[ti.index]) } else { out.push("background") } }) return out.join(",") }`, sjson, backgroundN > 0) return chart, jsfunc } func plotBinsSet(chart *chartjs.Chart, xys *vs, c *types.RGBA, xa string, ya string) { dataset := chartjs.Dataset{Data: xys, Label: "samples", Fill: chartjs.False, PointHoverRadius: 6, PointRadius: 4, BorderWidth: 0, BorderColor: &types.RGBA{R: 150, G: 150, B: 150, A: 150}, PointBackgroundColor: c, BackgroundColor: c, ShowLine: chartjs.False, PointHitRadius: 6} dataset.XFloatFormat = "%.5f" dataset.YFloatFormat = "%.3f" dataset.XAxisID = xa dataset.YAxisID = ya chart.AddDataset(dataset) } func plotPCA(imat *mat.Dense, samples []string, vars []float64) ([]chartjs.Chart, string) { var charts []chartjs.Chart c := &types.RGBA{R: 110, G: 250, B: 59, A: 240} for _, pc := range []int{2, 3} { c1 := chartjs.Chart{} xa, err := c1.AddXAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Bottom, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: fmt.Sprintf("PC1 (variance explained: %.2f%%)", 100*vars[0]), Display: chartjs.True}}) if err != nil { panic(err) } ya, err := c1.AddYAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Left, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: fmt.Sprintf("PC%d (variance explained: %.2f%%)", pc, 100*vars[pc-1]), Display: chartjs.True}}) if err != nil { panic(err) } if backgroundN > 0 { c := &types.RGBA{R: 180, G: 180, B: 180, A: 240} xys := &vs{xs: mat.Col(nil, 0, imat)[:backgroundN], ys: mat.Col(nil, pc-1, imat)[:backgroundN]} dataset := chartjs.Dataset{Data: xys, Label: "samples", Fill: chartjs.False, PointHoverRadius: 6, PointRadius: 4, BorderWidth: 0, BorderColor: &types.RGBA{R: 150, G: 150, B: 150, A: 150}, PointBackgroundColor: c, BackgroundColor: c, ShowLine: chartjs.False, PointHitRadius: 6} dataset.XAxisID = xa dataset.YAxisID = ya c1.AddDataset(dataset) } xys := &vs{xs: mat.Col(nil, 0, imat)[backgroundN:], ys: mat.Col(nil, pc-1, imat)[backgroundN:]} dataset := chartjs.Dataset{Data: xys, Label: "samples", Fill: chartjs.False, PointHoverRadius: 6, PointRadius: 4, BorderWidth: 0, BorderColor: &types.RGBA{R: 150, G: 150, B: 150, A: 150}, PointBackgroundColor: c, BackgroundColor: c, ShowLine: chartjs.False, PointHitRadius: 6} dataset.XAxisID = xa dataset.YAxisID = ya c1.AddDataset(dataset) c1.Options.Responsive = chartjs.False c1.Options.Legend = &chartjs.Legend{Display: chartjs.False} c1.Options.Tooltip = &chartjs.Tooltip{Mode: "nearest"} charts = append(charts, c1) } sjson, err := json.Marshal(samples[backgroundN:]) if err != nil { panic(err) } jsfunc := fmt.Sprintf(` chart.options.hover.mode = 'index'; chart.options.tooltips.callbacks.title = function(tts, data) { var names = %s var has_backgrounds = %v var out = [] tts.forEach(function(ti) { if(has_backgrounds == (ti.datasetIndex == 1)) { out.push(names[ti.index]) } else { out.push("background") } }) return out.join(",") }`, sjson, backgroundN > 0) return charts, jsfunc } func plotROCs(rocs [][]float32, samples []string, chrom string) (chartjs.Chart, error) { chart := chartjs.Chart{} xa, err := chart.AddXAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Bottom, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "scaled coverage for " + chrom, Display: chartjs.True}, Tick: &chartjs.Tick{Max: 1 / slotsMid}}) if err != nil { return chart, err } yax := chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Left, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "proportion of regions covered", Display: chartjs.True}} ya, err := chart.AddYAxis(yax) if err != nil { return chart, err } datasets := make([]chartjs.Dataset, 0, len(rocs)) for i, roc := range rocs { xys := asValues(roc, 1/float64(slots)*1/slotsMid) c := randomColor(i, true) label := samples[i] if i < backgroundN { label = "background" } dataset := chartjs.Dataset{Data: xys, Label: label, Fill: chartjs.False, PointRadius: 0.0, BorderWidth: 2, BorderColor: c, PointBackgroundColor: c, BackgroundColor: c, PointHitRadius: 8, PointHoverRadius: 3} dataset.XAxisID = xa dataset.YAxisID = ya datasets = append(datasets, dataset) } for i := len(datasets) - 1; i >= 0; i-- { chart.AddDataset(datasets[i]) } chart.Options.Responsive = chartjs.False chart.Options.Tooltip = &chartjs.Tooltip{Mode: "nearest"} return chart, nil } func plotMapped(mapped []uint64, unmapped []uint64, samples []string) (*chartjs.Chart, string, error) { if len(mapped) != len(samples) { return nil, "", fmt.Errorf("plottMapped: unequal numbers in samples and mapped: %d vs %d", len(mapped), len(samples)) } chart := chartjs.Chart{} xa, err := chart.AddXAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Bottom, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "log(mapped reads)", Display: chartjs.True}, Tick: &chartjs.Tick{Min: 0}}) if err != nil { return nil, "", err } ya, err := chart.AddYAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Left, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: "log(unmapped reads)", Display: chartjs.True}, Tick: &chartjs.Tick{Min: 0}}) if err != nil { return nil, "", err } vals := &vs{xs: make([]float64, 0, len(mapped)), ys: make([]float64, 0, len(mapped))} for i, m := range mapped { if i >= backgroundN { vals.xs = append(vals.xs, math.Log1p(float64(m))) vals.ys = append(vals.ys, math.Log1p(float64(unmapped[i]))) } } c := &types.RGBA{R: 110, G: 250, B: 59, A: 240} dataset := chartjs.Dataset{Data: vals, Label: "samples", Fill: chartjs.False, PointHoverRadius: 6, PointRadius: 4, BorderWidth: 0, BorderColor: &types.RGBA{R: 150, G: 150, B: 150, A: 150}, PointBackgroundColor: c, BackgroundColor: c, ShowLine: chartjs.False, PointHitRadius: 6} chart.Options.Legend = &chartjs.Legend{Display: chartjs.False} dataset.XAxisID = xa dataset.YAxisID = ya chart.AddDataset(dataset) sjson, err := json.Marshal(samples[backgroundN:]) if err != nil { panic(err) } jsfunc := fmt.Sprintf(` chart.options.hover.mode = 'index' chart.options.tooltips.callbacks.title = function(tts, data) { var names = [%s] var out = [] tts.forEach(function(ti) { out.push(names[ti.datasetIndex][ti.index]) }) return out.join(",") }`, sjson) chart.Options.Responsive = chartjs.False chart.Options.Tooltip = &chartjs.Tooltip{Mode: "nearest"} return &chart, jsfunc, nil } func plotSex(sexes map[string][]float64, chroms []string, samples []string) (*chartjs.Chart, string, error) { chart := chartjs.Chart{Label: "sex"} tmp := sexes["_inferred"] inferred := make([]int, len(tmp)) cns := make(map[int]bool) for i, inf := range tmp { inferred[i] = int(inf) cns[int(inf)] = true } xa, err := chart.AddXAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Bottom, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: chroms[0] + " Copy Number", Display: chartjs.True}, Tick: &chartjs.Tick{Min: 0}}) if err != nil { return nil, "", err } ya, err := chart.AddYAxis(chartjs.Axis{Type: chartjs.Linear, Position: chartjs.Left, ScaleLabel: &chartjs.ScaleLabel{FontSize: 16, LabelString: chroms[1] + " Copy Number", Display: chartjs.True}, Tick: &chartjs.Tick{Min: 0}}) if err != nil { return nil, "", err } // chartjs separates into datasets so we need to track which samples in which datasets. jssamples := make([][]string, 0, 2) for cn := range cns { jssamples = append(jssamples, make([]string, 0)) vals := &vs{xs: make([]float64, 0, len(inferred)), ys: make([]float64, 0, len(inferred))} for i, inf := range inferred { if inf != cn { continue } if i < backgroundN { continue } jssamples[len(jssamples)-1] = append(jssamples[len(jssamples)-1], samples[i]) vals.xs = append(vals.xs, sexes[chroms[0]][i]) vals.ys = append(vals.ys, sexes[chroms[1]][i]) } c := randomColor(cn, false) dataset := chartjs.Dataset{Data: vals, Label: fmt.Sprintf("Inferred CN for %s: %d", chroms[0], cn), Fill: chartjs.False, PointRadius: 6, BorderWidth: 0, BorderColor: &types.RGBA{R: 90, G: 90, B: 90, A: 150}, PointBackgroundColor: c, BackgroundColor: c, ShowLine: chartjs.False, PointHitRadius: 6} dataset.XAxisID = xa dataset.YAxisID = ya chart.AddDataset(dataset) } sjson, err := json.Marshal(jssamples) if err != nil { panic(err) } jsfunc := fmt.Sprintf(` chart.options.hover.mode = 'index' chart.options.tooltips.callbacks.title = function(tts, data) { var names = %s var out = [] tts.forEach(function(ti) { out.push(names[ti.datasetIndex][ti.index]) }) return out.join(",") }`, sjson) chart.Options.Responsive = chartjs.False chart.Options.Tooltip = &chartjs.Tooltip{Mode: "nearest"} return &chart, jsfunc, nil } func asPng(path string, chart chartjs.Chart, wInches float64, hInches float64) { p := plot.New() p.X.Label.Text = chart.Options.Scales.XAxes[0].ScaleLabel.LabelString p.Y.Label.Text = chart.Options.Scales.YAxes[0].ScaleLabel.LabelString for i := range chart.Data.Datasets { ds := chart.Data.Datasets[len(chart.Data.Datasets)-i-1] data := ds.Data // gonum plotting is a significant portion of the runtime so we sample datasets. if data.(*vs).Len() > 2000 { data = data.(*vs).Sample(10) } else if data.(*vs).Len() > 1000 { data = data.(*vs).Sample(5) } else { // no data for some chromosome. bad := false for _, d := range data.Ys() { if math.IsNaN(d) { bad = true break } } if bad { continue } } l, err := plotter.NewLine(data.(*vs)) if err != nil { panic(err) } c := color.RGBA(*ds.BorderColor) c.A = 255 l.LineStyle.Width = vg.Points(0.8) if len(chart.Data.Datasets) > 30 { l.LineStyle.Width = vg.Points(0.65) } l.Color = c p.Add(l) } data := chart.Data.Datasets[0].Data.(*vs) xs := data.Xs() // check if we are in a depth plot if len(xs) > 0 && xs[len(xs)-1] > 3 { p.Y.Tick.Marker = ydticks{} p.X.Tick.Marker = xdticks{} } if err := p.Save(vg.Length(wInches)*vg.Inch, vg.Length(hInches)*vg.Inch, path); err != nil { panic(err) } // Set INDEXCOV_FMT env variable to also get .eps and .svg if fmt := os.Getenv("INDEXCOV_FMT"); fmt != "" { if fmt != "svg" { fmt = "eps" } l := len(path) - 3 if err := p.Save(vg.Length(wInches)*vg.Inch, vg.Length(hInches)*vg.Inch, path[:l]+fmt); err != nil { panic(err) } } } type ydticks struct{} type xdticks struct{} func (ydticks) Ticks(min, max float64) []plot.Tick { tks := make([]plot.Tick, 5) for i := 0; i < 5; i++ { v := float64(i) * 0.5 tks[i] = plot.Tick{Value: v, Label: fmt.Sprintf("%.1f", v)} } return tks } func (xdticks) Ticks(min, max float64) []plot.Tick { otks := plot.DefaultTicks{}.Ticks(min, max) tks := make([]plot.Tick, 0, 5) for i, t := range otks { if t.Label == "" { continue } tks = append(tks, t) tks[i].Label = makeMillions(t.Value) } return tks } func makeMillions(v float64) string { var lbl string if v > 2000000 { lbl = fmt.Sprintf("%.1fMB", v/1000000) } else if v > 10000 { lbl = fmt.Sprintf("%.1fKB", v/1000) } else { lbl = fmt.Sprintf("%.1f", v) } if strings.HasSuffix(lbl, ".0MB") { lbl = lbl[:len(lbl)-4] + "MB" } return lbl } ================================================ FILE: indexcov/template.go ================================================ package indexcov const chartTemplate = ` {{ $name := index . "name" }} {{ $has_sex := index . "hasSex" }} {{ $name }}:indexcov This is the indexcov summary page created with version {{ index . "version" }}.
Click the ? above each plot for help describing that type of plot.
Inferred sex ? {{ if $has_sex }} {{ else }}

Fewer than 2 sex chromosomes found; sex plot not shown.

{{ end }}
{{ if index . "hasMap" }} Mapped Counts ? {{ end }} Bin Counts ?

Pedigree File

contains inferred sex, bins counts, and PCA values used to make the above plots

{{ $name }}-indexcov.ped
Coverage BED File

contains scaled coverage for every sample (each column) for each 16,384 interval in the index

{{ $name }}-indexcov.bed.gz

{{ if index . "hasPCA" }}
PCA: 1 vs 2 ?
PCA: 1 vs 3 ?

{{ end }}
{{ $notmany := index . "notmany" }}
Coverage Plots ?

Click each plot for an interactive view.

{{ $chroms := index . "chroms" }} {{ range $idx, $chrom := $chroms }}

{{ end }}
Acknowledgements
Depth Plots ?

{{ if $notmany }} Click each plot for an interactive view. {{ else }} . {{ end }}

{{ range $idx, $chrom := $chroms }}

{{ if $notmany }} {{ else }} {{ end }}

{{ end }}
` ================================================ FILE: indexcov/test-data/viral.fa.fai ================================================ 1 249250621 52 60 61 2 243199373 253404903 60 61 3 198022430 500657651 60 61 4 191154276 701980507 60 61 5 180915260 896320740 60 61 6 171115067 1080251307 60 61 7 159138663 1254218344 60 61 8 146364022 1416009371 60 61 9 141213431 1564812846 60 61 10 135534747 1708379889 60 61 11 135006516 1846173603 60 61 12 133851895 1983430282 60 61 13 115169878 2119513096 60 61 14 107349540 2236602526 60 61 15 102531392 2345741279 60 61 16 90354753 2449981581 60 61 17 81195210 2541842300 60 61 18 78077248 2624390817 60 61 19 59128983 2703769406 60 61 20 63025520 2763883926 60 61 21 48129895 2827959925 60 61 22 51304566 2876892038 60 61 X 155270560 2929051733 60 61 Y 59373566 3086910193 60 61 MT 16569 3147273397 70 71 GL000207.1 4262 3147290264 60 61 GL000226.1 15008 3147294660 60 61 GL000229.1 19913 3147309981 60 61 GL000231.1 27386 3147330288 60 61 GL000210.1 27682 3147358193 60 61 GL000239.1 33824 3147386399 60 61 GL000235.1 34474 3147420849 60 61 GL000201.1 36148 3147455960 60 61 GL000247.1 36422 3147492773 60 61 GL000245.1 36651 3147529865 60 61 GL000197.1 37175 3147567189 60 61 GL000203.1 37498 3147605046 60 61 GL000246.1 38154 3147643231 60 61 GL000249.1 38502 3147682083 60 61 GL000196.1 38914 3147721289 60 61 GL000248.1 39786 3147760914 60 61 GL000244.1 39929 3147801426 60 61 GL000238.1 39939 3147842083 60 61 GL000202.1 40103 3147882750 60 61 GL000234.1 40531 3147923584 60 61 GL000232.1 40652 3147964853 60 61 GL000206.1 41001 3148006245 60 61 GL000240.1 41933 3148047992 60 61 GL000236.1 41934 3148090686 60 61 GL000241.1 42152 3148133381 60 61 GL000243.1 43341 3148176298 60 61 GL000242.1 43523 3148220424 60 61 GL000230.1 43691 3148264735 60 61 GL000237.1 45867 3148309217 60 61 GL000233.1 45941 3148355911 60 61 GL000204.1 81310 3148402680 60 61 GL000198.1 90085 3148485408 60 61 GL000208.1 92689 3148577057 60 61 GL000191.1 106433 3148671354 60 61 GL000227.1 128374 3148779624 60 61 GL000228.1 129120 3148910201 60 61 GL000214.1 137718 3149041536 60 61 GL000221.1 155397 3149181613 60 61 GL000209.1 159169 3149339663 60 61 GL000218.1 161147 3149501548 60 61 GL000220.1 161802 3149665444 60 61 GL000213.1 164239 3149830006 60 61 GL000211.1 166566 3149997046 60 61 GL000199.1 169874 3150166452 60 61 GL000217.1 172149 3150339221 60 61 GL000216.1 172294 3150514303 60 61 GL000215.1 172545 3150689532 60 61 GL000205.1 174588 3150865016 60 61 GL000219.1 179198 3151042577 60 61 GL000224.1 179693 3151224825 60 61 GL000223.1 180455 3151407576 60 61 GL000195.1 182896 3151591102 60 61 GL000212.1 186858 3151777110 60 61 GL000222.1 186861 3151967146 60 61 GL000200.1 187035 3152157185 60 61 GL000193.1 189789 3152347401 60 61 GL000194.1 191469 3152540417 60 61 GL000225.1 211173 3152735141 60 61 GL000192.1 547496 3152949897 60 61 NC_007605 171823 3153506529 60 61 hs37d5 35477943 3153681224 60 61 gi|15078713|ref|NC_003038.1| 212482 3189750546 80 81 gi|32140163|ref|NC_004908.1| 1714 3189965790 80 81 gi|32140165|ref|NC_004909.1| 1418 3189967631 80 81 gi|32140167|ref|NC_004910.1| 2341 3189969172 80 81 gi|32140171|ref|NC_004912.1| 2225 3189971648 80 81 gi|71647197|ref|NC_007223.1| 677 3189973993 80 81 gi|73919206|ref|NC_007366.1| 1762 3189974784 80 81 gi|73919151|ref|NC_007367.1| 1027 3189976674 80 81 gi|73919135|ref|NC_007368.1| 1467 3189977819 80 81 gi|73919146|ref|NC_007369.1| 1566 3189979410 80 81 gi|73919211|ref|NC_007370.1| 890 3189981101 80 81 gi|73919133|ref|NC_007371.1| 2233 3189982108 80 81 gi|73919148|ref|NC_007372.1| 2341 3189984474 80 81 gi|73919059|ref|NC_007373.1| 2341 3189986950 80 81 gi|73919144|ref|NC_007374.1| 1773 3189989421 80 81 gi|73912684|ref|NC_007376.1| 2233 3189991317 80 81 gi|73912686|ref|NC_007377.1| 1027 3189993678 80 81 gi|73921565|ref|NC_007380.1| 838 3189994818 80 81 gi|73921306|ref|NC_007381.1| 1497 3189995767 80 81 gi|73921303|ref|NC_007382.1| 1410 3189997383 80 81 gi|85362699|ref|NC_007721.1| 1350 3189998904 80 81 gi|89888070|ref|NC_007803.1| 19212 3190000332 80 81 gi|22417460|ref|NC_004054.1| 2343 3190019868 80 81 gi|34303903|ref|NC_002685.2| 31301 3190022308 80 81 gi|22417454|ref|NC_004049.1| 2617 3190054072 80 81 gi|22417456|ref|NC_004052.1| 2599 3190056792 80 81 gi|22417458|ref|NC_004053.1| 2474 3190059494 80 81 gi|108512256|ref|NC_008056.1| 2577 3190062081 80 81 gi|108519230|ref|NC_008059.1| 2605 3190064773 80 81 gi|111118951|ref|NC_008267.1| 2762 3190067509 80 81 gi|9626152|ref|NC_001402.1| 2630 3190070374 80 81 gi|33112010|ref|NC_005039.1| 10857 3190073097 80 81 gi|29742052|ref|NC_004714.1| 5533 3190084170 80 81 gi|9634672|ref|NC_002187.1| 4014 3190089853 80 81 gi|66090796|ref|NC_006999.1| 3178 3190093999 80 81 gi|66090625|ref|NC_007000.1| 2720 3190097298 80 81 gi|66090969|ref|NC_007001.1| 2091 3190100133 80 81 gi|80540093|ref|NC_007535.1| 4143 3190102326 80 81 gi|80549998|ref|NC_007536.1| 3310 3190106596 80 81 gi|29567085|ref|NC_004690.1| 113220 3190110017 80 81 gi|113195540|ref|NC_008295.1| 6179 3190224726 80 81 gi|113200758|ref|NC_008302.1| 8912 3190231068 80 81 gi|115350044|ref|NC_008374.1| 2744 3190240188 80 81 gi|115350051|ref|NC_008365.1| 6279 3190243048 80 81 gi|115353270|ref|NC_008373.1| 2744 3190249495 80 81 gi|42794075|ref|NC_005635.1| 2728 3190252351 80 81 gi|50198872|ref|NC_005982.1| 3429 3190255186 80 81 gi|50234096|ref|NC_005983.1| 2750 3190258730 80 81 gi|50428954|ref|NC_006061.1| 3892 3190261599 80 81 gi|50428964|ref|NC_006063.1| 5339 3190265612 80 81 gi|39163648|ref|NC_005287.1| 4421 3190271108 80 81 gi|116536742|ref|NC_008517.1| 2756 3190275661 80 81 gi|66396481|ref|NC_007069.1| 13883 3190278510 80 81 gi|57753416|ref|NC_006638.1| 15230 3190292657 80 81 gi|57753407|ref|NC_006640.1| 5032 3190308168 80 81 gi|118647916|ref|NC_008605.1| 1367 3190313373 80 81 gi|119756985|ref|NC_008695.1| 42271 3190314825 80 81 gi|119952256|ref|NC_008714.1| 7390 3190357695 80 81 gi|119952257|ref|NC_008715.1| 7391 3190365248 80 81 gi|119964529|ref|NC_008716.1| 6794 3190372802 80 81 gi|126010934|ref|NC_009015.1| 72415 3190379765 80 81 gi|126011062|ref|NC_009018.1| 38528 3190453162 80 81 gi|81079705|ref|NC_007582.1| 3947 3190492246 80 81 gi|81096040|ref|NC_007584.1| 3690 3190496317 80 81 gi|134141995|ref|NC_009224.1| 5261 3190500137 80 81 gi|145651764|ref|NC_009383.1| 8590 3190505526 80 81 gi|10518470|ref|NC_002555.1| 2622 3190514306 80 81 gi|10518476|ref|NC_002556.1| 2572 3190517043 80 81 gi|77020191|ref|NC_007457.1| 36615 3190519717 80 81 gi|81343928|ref|NC_007603.1| 46219 3190556862 80 81 gi|134287154|ref|NC_009247.1| 2542 3190603742 80 81 gi|62398852|ref|NC_006964.1| 7496 3190606403 80 81 gi|66391744|ref|NC_007026.1| 2525 3190614077 80 81 gi|66391747|ref|NC_007027.1| 1745 3190616718 80 81 gi|71647082|ref|NC_007216.1| 9695 3190618559 80 81 gi|76253626|ref|NC_007415.1| 5470 3190628482 80 81 gi|83721671|ref|NC_007656.1| 3993 3190634097 80 81 gi|83721673|ref|NC_007657.1| 2900 3190638216 80 81 gi|83721675|ref|NC_007658.1| 2688 3190641229 80 81 gi|83721677|ref|NC_007659.1| 1993 3190644027 80 81 gi|83721679|ref|NC_007660.1| 1957 3190646121 80 81 gi|83721681|ref|NC_007661.1| 1683 3190648179 80 81 gi|83721683|ref|NC_007662.1| 1504 3190649960 80 81 gi|83721685|ref|NC_007663.1| 1191 3190651559 80 81 gi|83721687|ref|NC_007664.1| 1082 3190652841 80 81 gi|83721689|ref|NC_007665.1| 825 3190654014 80 81 gi|78762962|ref|NC_007524.1| 2259 3190654924 80 81 gi|78763261|ref|NC_007525.1| 2030 3190657286 80 81 gi|78763552|ref|NC_007526.1| 1509 3190659416 80 81 gi|78763788|ref|NC_007527.1| 1299 3190661018 80 81 gi|78764193|ref|NC_007528.1| 1226 3190662408 80 81 gi|78764529|ref|NC_007529.1| 1171 3190663725 80 81 gi|78764643|ref|NC_007531.1| 1003 3190664986 80 81 gi|78764769|ref|NC_007532.1| 943 3190666077 80 81 gi|96980747|ref|NC_008031.1| 1352 3190667117 80 81 gi|109240500|ref|NC_008171.1| 5792 3190668574 80 81 gi|109240502|ref|NC_008172.1| 4175 3190674527 80 81 gi|109240504|ref|NC_008173.1| 3129 3190678843 80 81 gi|109240506|ref|NC_008174.1| 2833 3190682100 80 81 gi|109240508|ref|NC_008175.1| 2027 3190685057 80 81 gi|109240510|ref|NC_008176.1| 1687 3190687198 80 81 gi|109240512|ref|NC_008177.1| 1556 3190688995 80 81 gi|109240514|ref|NC_008178.1| 1449 3190690659 80 81 gi|109240516|ref|NC_008179.1| 1296 3190692215 80 81 gi|109240518|ref|NC_008180.1| 878 3190693617 80 81 gi|109240520|ref|NC_008181.1| 741 3190694595 80 81 gi|109390396|ref|NC_008185.1| 4787 3190695413 80 81 gi|109390403|ref|NC_008186.1| 4756 3190700327 80 81 gi|55770820|ref|NC_006428.1| 15450 3190705206 80 81 gi|32140160|ref|NC_004906.1| 890 3190720955 80 81 gi|32141421|ref|NC_004907.1| 1025 3190721962 80 81 gi|40549402|ref|NC_004466.2| 45503 3190723070 80 81 gi|119443652|ref|NC_008689.1| 44857 3190769221 80 81 gi|116536721|ref|NC_008514.1| 11545 3190814717 80 81 gi|116536735|ref|NC_008516.1| 26660 3190826473 80 81 gi|56692568|ref|NC_006548.1| 38439 3190853535 80 81 gi|62327168|ref|NC_006938.1| 63649 3190892517 80 81 gi|66392052|ref|NC_007024.1| 55770 3190957032 80 81 gi|115304270|ref|NC_008364.1| 26537 3191013570 80 81 gi|115334607|ref|NC_008375.1| 1898 3191040504 80 81 gi|120407024|ref|NC_008736.1| 2186 3191042511 80 81 gi|120407027|ref|NC_008737.1| 1870 3191044809 80 81 gi|125981364|ref|NC_009013.1| 7808 3191046779 80 81 gi|126010927|ref|NC_009032.1| 5403 3191054761 80 81 gi|60677687|ref|NC_006875.1| 7453 3191060303 80 81 gi|68532377|ref|NC_007156.1| 1843 3191067928 80 81 gi|83700359|ref|NC_007648.1| 17635 3191069866 80 81 gi|90403548|ref|NC_007916.1| 7454 3191087791 80 81 gi|66395588|ref|NC_007053.1| 43095 3191095410 80 81 gi|66395450|ref|NC_007051.1| 41318 3191139118 80 81 gi|66395508|ref|NC_007052.1| 45861 3191181025 80 81 gi|66395807|ref|NC_007056.1| 45286 3191227531 80 81 gi|66395965|ref|NC_007058.1| 43155 3191273457 80 81 gi|66396113|ref|NC_007060.1| 41902 3191317223 80 81 gi|70980512|ref|NC_007192.1| 5823 3191359709 80 81 gi|116326069|ref|NC_008520.1| 132239 3191365696 80 81 gi|62326904|ref|NC_006943.1| 6185 3191499660 80 81 gi|51949957|ref|NC_006259.1| 5610 3191505990 80 81 gi|94971809|ref|NC_008020.1| 8739 3191511733 80 81 gi|56692633|ref|NC_006568.1| 2484 3191520670 80 81 gi|66391749|ref|NC_007013.1| 2249 3191523253 80 81 gi|75750459|ref|NC_007408.1| 7009 3191525599 80 81 gi|83999988|ref|NC_007679.1| 6582 3191532758 80 81 gi|96980764|ref|NC_008033.1| 2063 3191539490 80 81 gi|96980777|ref|NC_008029.1| 9345 3191541656 80 81 gi|94972339|ref|NC_008017.1| 7568 3191551197 80 81 gi|113882957|ref|NC_008315.1| 30307 3191558941 80 81 gi|116326687|ref|NC_008518.1| 174059 3191589704 80 81 gi|77864625|ref|NC_007497.1| 44856 3191766013 80 81 gi|84662653|ref|NC_007710.1| 46643 3191811499 80 81 gi|118197482|ref|NC_008586.1| 131204 3191858796 80 81 gi|120407008|ref|NC_008728.1| 1931 3191991726 80 81 gi|120407010|ref|NC_008729.1| 3566 3191993767 80 81 gi|120407012|ref|NC_008730.1| 3617 3191997463 80 81 gi|120407014|ref|NC_008731.1| 2639 3192001211 80 81 gi|120407016|ref|NC_008732.1| 3826 3192003968 80 81 gi|120407018|ref|NC_008733.1| 4501 3192007927 80 81 gi|66391759|ref|NC_007019.1| 34704 3192012557 80 81 gi|148283132|ref|NC_009490.1| 2609 3192047793 80 81 gi|148283136|ref|NC_009491.1| 2559 3192050533 80 81 gi|116734779|ref|NC_008552.1| 8281 3192053200 80 81 gi|115304324|ref|NC_008366.1| 17039 3192061677 80 81 gi|134288562|ref|NC_009232.1| 42572 3192079000 80 81 gi|134303398|ref|NC_009240.1| 96944 3192122183 80 81 gi|93163150|ref|NC_004905.2| 1557 3192220432 80 81 gi|148283122|ref|NC_009489.1| 15486 3192222071 80 81 gi|65362558|ref|NC_007003.1| 7801 3192237843 80 81 gi|149944272|ref|NC_009608.1| 6413 3192245817 80 81 gi|149944278|ref|NC_009609.1| 6001 3192252386 80 81 gi|151266277|ref|NC_009640.1| 15180 3192258531 80 81 gi|151266411|ref|NC_009642.1| 6375 3192273980 80 81 gi|73852954|ref|NC_007362.1| 1760 3192280543 80 81 gi|109255272|ref|NC_008168.1| 104710 3192282413 80 81 gi|116294317|ref|NC_008494.1| 2569 3192388520 80 81 gi|116294322|ref|NC_008495.1| 2514 3192391210 80 81 gi|96980848|ref|NC_008034.1| 7531 3192393825 80 81 gi|116294325|ref|NC_008492.1| 2606 3192401535 80 81 gi|116294330|ref|NC_008493.1| 2589 3192404258 80 81 gi|116630443|ref|NC_008522.1| 1962 3192406945 80 81 gi|116630439|ref|NC_008521.1| 2035 3192408996 80 81 gi|117676340|ref|NC_008574.1| 8999 3192411126 80 81 gi|148727234|ref|NC_009544.1| 11319 3192420313 80 81 gi|22550322|ref|NC_004124.1| 8223 3192431864 80 81 gi|157786393|ref|NC_009877.1| 51277 3192440261 80 81 gi|109287878|ref|NC_008187.1| 191100 3192492265 80 81 gi|115304210|ref|NC_008363.1| 28538 3192685825 80 81 gi|119953678|ref|NC_008722.1| 43420 3192714796 80 81 gi|119967833|ref|NC_008723.1| 44041 3192758833 80 81 gi|157939612|ref|NC_009889.1| 8406 3192803490 80 81 gi|157939615|ref|NC_009894.1| 6868 3192812076 80 81 gi|66395729|ref|NC_007055.1| 43681 3192819101 80 81 gi|119953744|ref|NC_008724.1| 288047 3192863418 80 81 gi|83721691|ref|NC_007666.1| 3817 3193155158 80 81 gi|83721693|ref|NC_007667.1| 3752 3193159115 80 81 gi|83721695|ref|NC_007668.1| 3732 3193163006 80 81 gi|83721697|ref|NC_007669.1| 3375 3193166877 80 81 gi|83721699|ref|NC_007670.1| 3227 3193170387 80 81 gi|83721701|ref|NC_007671.1| 1775 3193173747 80 81 gi|83721703|ref|NC_007672.1| 1171 3193175637 80 81 gi|83721705|ref|NC_007673.1| 1151 3193176915 80 81 gi|83721707|ref|NC_007674.1| 1147 3193178173 80 81 gi|114679849|ref|NC_008348.1| 168041 3193179428 80 81 gi|114680053|ref|NC_008349.1| 134417 3193349668 80 81 gi|158997720|ref|NC_005262.2| 63879 3193485840 80 81 gi|148727082|ref|NC_009541.1| 29739 3193550594 80 81 gi|157102936|ref|NC_009761.2| 41407 3193580785 80 81 gi|157102938|ref|NC_009763.2| 41966 3193622790 80 81 gi|134287335|ref|NC_009231.1| 56538 3193665353 80 81 gi|157102937|ref|NC_009762.2| 45710 3193722678 80 81 gi|160700642|ref|NC_009991.1| 9058 3193769022 80 81 gi|160693214|ref|NC_009799.2| 42969 3193778270 80 81 gi|162290175|ref|NC_010148.1| 1361 3193821884 80 81 gi|109390412|ref|NC_008191.1| 1866 3193823354 80 81 gi|48697401|ref|NC_005885.1| 58638 3193825318 80 81 gi|157953191|ref|NC_009899.1| 344691 3193884779 80 81 gi|162944684|ref|NC_010165.1| 294 3194233843 80 81 gi|16798783|ref|NC_003216.1| 40834 3194234208 80 81 gi|22296522|ref|NC_004112.1| 43411 3194275623 80 81 gi|40806958|ref|NC_004664.2| 41831 3194319650 80 81 gi|29566108|ref|NC_004683.1| 57050 3194362077 80 81 gi|156535141|ref|NC_005131.2| 7118 3194419910 80 81 gi|48697070|ref|NC_005884.1| 43783 3194427187 80 81 gi|56694869|ref|NC_006557.1| 41092 3194471587 80 81 gi|56693048|ref|NC_006565.1| 131522 3194513265 80 81 gi|66395164|ref|NC_007045.1| 15603 3194646507 80 81 gi|89152479|ref|NC_007814.1| 37974 3194662372 80 81 gi|90592637|ref|NC_007917.1| 53325 3194700896 80 81 gi|109392353|ref|NC_008195.1| 70654 3194754963 80 81 gi|109391846|ref|NC_008197.1| 68427 3194826575 80 81 gi|109521840|ref|NC_008199.1| 69059 3194895935 80 81 gi|109392287|ref|NC_008202.1| 42289 3194965931 80 81 gi|109392453|ref|NC_008203.1| 52047 3195008823 80 81 gi|109521758|ref|NC_008204.1| 67188 3195061597 80 81 gi|109521437|ref|NC_008206.1| 78441 3195129701 80 81 gi|109393216|ref|NC_008207.1| 153766 3195209198 80 81 gi|39653674|ref|NC_005294.1| 42935 3195364962 80 81 gi|13095680|ref|NC_002666.1| 35538 3195408509 80 81 gi|13095743|ref|NC_002667.1| 41834 3195444567 80 81 gi|13095891|ref|NC_002671.1| 15179 3195486999 80 81 gi|23578028|ref|NC_004322.1| 6056 3195502429 80 81 gi|29028617|ref|NC_004616.1| 44970 3195508639 80 81 gi|29028667|ref|NC_004617.1| 42722 3195554250 80 81 gi|91214206|ref|NC_005091.2| 57455 3195597584 80 81 gi|82700933|ref|NC_007623.1| 211215 3195655826 80 81 gi|70727678|ref|NC_007189.1| 6907 3195869760 80 81 gi|71834082|ref|NC_007291.1| 46072 3195876827 80 81 gi|115304338|ref|NC_008367.1| 40938 3195923548 80 81 gi|156563990|ref|NC_009760.1| 218948 3195965073 80 81 gi|160707859|ref|NC_009992.1| 14214 3196186859 80 81 gi|55831383|ref|NC_006452.1| 1145 3196201343 80 81 gi|148828646|ref|NC_009563.1| 1372 3196202599 80 81 gi|148828650|ref|NC_009555.1| 1322 3196204085 80 81 gi|148828652|ref|NC_009556.1| 1358 3196205521 80 81 gi|148828654|ref|NC_009557.1| 1367 3196206984 80 81 gi|148828656|ref|NC_009558.1| 1340 3196208467 80 81 gi|148828658|ref|NC_009559.1| 1342 3196209921 80 81 gi|148828662|ref|NC_009561.1| 1346 3196211385 80 81 gi|148828664|ref|NC_009562.1| 1344 3196212847 80 81 gi|157939778|ref|NC_009891.1| 6718 3196214281 80 81 gi|164607193|ref|NC_010248.1| 3535 3196221158 80 81 gi|164607196|ref|NC_010250.1| 7184 3196224813 80 81 gi|164607202|ref|NC_010249.1| 7053 3196232164 80 81 gi|164607211|ref|NC_010252.1| 7106 3196239379 80 81 gi|161617915|ref|NC_010106.1| 52975 3196246655 80 81 gi|117413398|ref|NC_008558.1| 10851 3196300360 80 81 gi|148641520|ref|NC_009520.1| 1465 3196311437 80 81 gi|148641522|ref|NC_009521.1| 1479 3196313011 80 81 gi|156616260|ref|NC_009764.1| 8727 3196314584 80 81 gi|167600353|ref|NC_010327.1| 30992 3196323488 80 81 gi|167832331|ref|NC_010343.1| 1717 3196354961 80 81 gi|167832333|ref|NC_010344.1| 1521 3196356793 80 81 gi|167832335|ref|NC_010345.1| 1485 3196358427 80 81 gi|167851790|ref|NC_010349.1| 1793 3196360024 80 81 gi|167851792|ref|NC_010350.1| 1566 3196361933 80 81 gi|167832337|ref|NC_010351.1| 1383 3196363612 80 81 gi|157939583|ref|NC_009890.1| 5077 3196365085 80 81 gi|168229273|ref|NC_010353.1| 35543 3196370298 80 81 gi|32453825|ref|NC_004927.1| 75898 3196406347 80 81 gi|71647259|ref|NC_007217.1| 30889 3196483262 80 81 gi|146411811|ref|NC_009452.1| 23814 3196514616 80 81 gi|148724437|ref|NC_009532.1| 6223 3196538794 80 81 gi|148724420|ref|NC_009537.1| 3433 3196545175 80 81 gi|148724422|ref|NC_009538.1| 2914 3196548731 80 81 gi|149274319|ref|NC_009597.1| 18098 3196551756 80 81 gi|117530171|ref|NC_008562.1| 162109 3196570156 80 81 gi|20428615|ref|NC_003746.1| 14042 3196734363 80 81 gi|126165310|ref|NC_009041.1| 6395 3196748652 80 81 gi|169303556|ref|NC_010416.1| 6937 3196755193 80 81 gi|169794178|ref|NC_010179.2| 40881 3196762304 80 81 gi|50058548|ref|NC_005964.1| 15141 3196803769 80 81 gi|149980623|ref|NC_009612.1| 2571 3196819183 80 81 gi|176428594|ref|NC_010560.1| 8965 3196821870 80 81 gi|177882060|ref|NC_010561.1| 8530 3196831031 80 81 gi|172088171|ref|NC_010562.1| 3357 3196839742 80 81 gi|172088174|ref|NC_010563.1| 7107 3196843215 80 81 gi|182682776|ref|NC_010584.1| 3949 3196850500 80 81 gi|182682778|ref|NC_010585.1| 3876 3196854588 80 81 gi|182682780|ref|NC_010586.1| 3709 3196858602 80 81 gi|182682782|ref|NC_010587.1| 2293 3196862447 80 81 gi|182682786|ref|NC_010589.1| 2042 3196864858 80 81 gi|182682788|ref|NC_010590.1| 1356 3196867015 80 81 gi|182682791|ref|NC_010591.1| 1305 3196868477 80 81 gi|182682793|ref|NC_010592.1| 1125 3196869888 80 81 gi|182682795|ref|NC_010593.1| 912 3196871118 80 81 gi|182682797|ref|NC_010594.1| 772 3196872132 80 81 gi|182637477|ref|NC_010576.1| 55597 3196872985 80 81 gi|168804017|ref|NC_010356.1| 190032 3196929378 80 81 gi|121614279|ref|NC_008779.1| 2611 3197121875 80 81 gi|121614288|ref|NC_008780.1| 2586 3197124608 80 81 gi|165969010|ref|NC_010276.1| 156179 3197127298 80 81 gi|169822558|ref|NC_010438.1| 28773 3197285499 80 81 gi|169822550|ref|NC_010437.1| 28326 3197314699 80 81 gi|169822542|ref|NC_010436.1| 28476 3197343447 80 81 gi|169259706|ref|NC_010412.1| 7373 3197372351 80 81 gi|169259708|ref|NC_010413.1| 7348 3197379889 80 81 gi|169259712|ref|NC_010415.1| 7351 3197387400 80 81 gi|182406744|ref|NC_009448.2| 8115 3197394905 80 81 gi|170676271|ref|NC_010490.1| 4945 3197403207 80 81 gi|185357846|ref|NC_010618.1| 2747 3197408302 80 81 gi|25140980|ref|NC_004426.1| 9878 3197411156 80 81 gi|21389216|ref|NC_003988.1| 7374 3197421226 80 81 gi|187764323|ref|NC_010662.1| 1830 3197428784 80 81 gi|187764195|ref|NC_010663.1| 1066 3197430728 80 81 gi|187765479|ref|NC_010664.1| 1268 3197431899 80 81 gi|187765477|ref|NC_010665.1| 1930 3197433274 80 81 gi|187765469|ref|NC_010666.1| 2797 3197435320 80 81 gi|187765481|ref|NC_010667.1| 3303 3197438243 80 81 gi|187765471|ref|NC_010668.1| 3713 3197441679 80 81 gi|187765473|ref|NC_010669.1| 3905 3197445530 80 81 gi|187765483|ref|NC_010670.1| 4123 3197449575 80 81 gi|146261987|ref|NC_002568.2| 4148 3197453820 80 81 gi|108516129|ref|NC_008057.1| 2558 3197458103 80 81 gi|188543036|ref|NC_010704.1| 1530 3197460773 80 81 gi|189022230|ref|NC_010754.1| 2305 3197462416 80 81 gi|189022232|ref|NC_010755.1| 2207 3197464843 80 81 gi|189009862|ref|NC_010737.1| 7713 3197467166 80 81 gi|189009869|ref|NC_010738.1| 8463 3197475055 80 81 gi|158324544|ref|NC_009923.1| 3091 3197483718 80 81 gi|158324547|ref|NC_009924.1| 2780 3197486942 80 81 gi|189022224|ref|NC_010743.1| 4127 3197489832 80 81 gi|189022226|ref|NC_010744.1| 3846 3197494086 80 81 gi|189022228|ref|NC_010745.1| 3258 3197498056 80 81 gi|189418877|ref|NC_010809.1| 5674 3197501435 80 81 gi|189418884|ref|NC_010806.1| 5808 3197507263 80 81 gi|169257155|ref|NC_010391.1| 42723 3197513216 80 81 gi|190336465|ref|NC_010948.1| 2622 3197556570 80 81 gi|190336471|ref|NC_010951.1| 2578 3197559321 80 81 gi|190336479|ref|NC_010953.1| 2553 3197562053 80 81 gi|189490154|ref|NC_010820.1| 13111 3197564707 80 81 gi|190643463|ref|NC_010987.1| 7229 3197578061 80 81 gi|190643471|ref|NC_010988.1| 4906 3197585460 80 81 gi|30090015|ref|NC_002160.2| 5695 3197590505 80 81 gi|30089981|ref|NC_002198.2| 5662 3197596349 80 81 gi|38488686|ref|NC_005226.1| 6541 3197602152 80 81 gi|192824177|ref|NC_011023.1| 52892 3197608852 80 81 gi|29134936|ref|NC_004629.1| 280334 3197662477 80 81 gi|45476493|ref|NC_005817.1| 2928 3197946404 80 81 gi|45476496|ref|NC_005818.1| 1981 3197949457 80 81 gi|45476498|ref|NC_005819.1| 977 3197951551 80 81 gi|189490161|ref|NC_010821.1| 316674 3197952617 80 81 gi|169803200|ref|NC_010434.1| 7674 3198273318 80 81 gi|193506277|ref|NC_009737.2| 35055 3198281153 80 81 gi|148609382|ref|NC_009514.1| 47021 3198316706 80 81 gi|20143424|ref|NC_003554.1| 7743 3198364383 80 81 gi|9625564|ref|NC_001343.1| 7489 3198372299 80 81 gi|20564135|ref|NC_003822.1| 2580 3198379956 80 81 gi|9626687|ref|NC_001478.1| 2701 3198382638 80 81 gi|8486148|ref|NC_002205.1| 2313 3198385445 80 81 gi|8486150|ref|NC_002206.1| 2204 3198387859 80 81 gi|8486154|ref|NC_002208.1| 1841 3198390163 80 81 gi|8486156|ref|NC_002209.1| 1557 3198392100 80 81 gi|8486161|ref|NC_002211.1| 1096 3198393749 80 81 gi|22788700|ref|NC_004158.1| 4888 3198394930 80 81 gi|22788702|ref|NC_004159.1| 12255 3198399951 80 81 gi|23334591|ref|NC_004292.1| 7102 3198412434 80 81 gi|23334594|ref|NC_004293.1| 3432 3198419699 80 81 gi|20219026|ref|NC_003680.1| 5273 3198423253 80 81 gi|30248019|ref|NC_004756.1| 5666 3198428666 80 81 gi|9626671|ref|NC_001469.1| 4701 3198434473 80 81 gi|20087024|ref|NC_003532.1| 4733 3198439305 80 81 gi|9627010|ref|NC_001513.1| 6211 3198444171 80 81 gi|21427633|ref|NC_004013.1| 9465 3198450539 80 81 gi|20386794|ref|NC_003738.1| 3543 3198460202 80 81 gi|20387441|ref|NC_003741.1| 6033 3198463869 80 81 gi|20095237|ref|NC_003549.1| 5889 3198470053 80 81 gi|20087034|ref|NC_003550.1| 3481 3198476091 80 81 gi|20069869|ref|NC_003530.1| 3840 3198479696 80 81 gi|20069874|ref|NC_003531.1| 1403 3198483664 80 81 gi|20153411|ref|NC_003621.1| 4441 3198485170 80 81 gi|20153413|ref|NC_003622.1| 7212 3198489752 80 81 gi|20153341|ref|NC_003615.1| 7342 3198497134 80 81 gi|20564155|ref|NC_003840.1| 8214 3198504645 80 81 gi|9632338|ref|NC_002036.1| 7073 3198513041 80 81 gi|21426909|ref|NC_004006.1| 2293 3198520282 80 81 gi|21426914|ref|NC_004008.1| 3158 3198522683 80 81 gi|19744912|ref|NC_003465.1| 2979 3198525955 80 81 gi|9628590|ref|NC_001696.1| 4275 3198529049 80 81 gi|9626658|ref|NC_001465.1| 1291 3198533451 80 81 gi|9629730|ref|NC_001841.1| 10820 3198534840 80 81 gi|11496571|ref|NC_001558.1| 360 3198545870 80 81 gi|11496572|ref|NC_001471.1| 254 3198546307 80 81 gi|20908248|ref|NC_003882.1| 295 3198546633 80 81 gi|20177431|ref|NC_003631.1| 1168 3198547028 80 81 gi|21071085|ref|NC_003889.1| 359 3198548295 80 81 gi|9627242|ref|NC_001564.1| 10695 3198548729 80 81 gi|20178598|ref|NC_003669.1| 6828 3198559635 80 81 gi|20178623|ref|NC_003670.1| 1799 3198566626 80 81 gi|20522096|ref|NC_003795.1| 8832 3198568511 80 81 gi|20177434|ref|NC_003652.1| 1430 3198577542 80 81 gi|20177436|ref|NC_003653.1| 1802 3198579077 80 81 gi|20177438|ref|NC_003654.1| 4391 3198580989 80 81 gi|20177440|ref|NC_003655.1| 3732 3198585522 80 81 gi|20177442|ref|NC_003656.1| 3753 3198589388 80 81 gi|20177444|ref|NC_003657.1| 3560 3198593275 80 81 gi|20177446|ref|NC_003658.1| 3427 3198596967 80 81 gi|20177448|ref|NC_003659.1| 2970 3198600524 80 81 gi|20177450|ref|NC_003660.1| 1994 3198603619 80 81 gi|20177452|ref|NC_003661.1| 1640 3198605725 80 81 gi|20178603|ref|NC_003671.1| 2438 3198607462 80 81 gi|20178625|ref|NC_003673.1| 3128 3198610007 80 81 gi|20178627|ref|NC_003674.1| 2735 3198613251 80 81 gi|13487801|ref|NC_002703.1| 38347 3198616094 80 81 gi|20530226|ref|NC_003813.1| 1001 3198655008 80 81 gi|20530228|ref|NC_003814.1| 1022 3198656109 80 81 gi|20530230|ref|NC_003815.1| 991 3198657231 80 81 gi|20530236|ref|NC_003818.1| 1017 3198658322 80 81 gi|20530238|ref|NC_003819.1| 988 3198659439 80 81 gi|20087059|ref|NC_003546.1| 2289 3198660520 80 81 gi|20087062|ref|NC_003547.1| 2990 3198662918 80 81 gi|9632270|ref|NC_001981.1| 5312 3198666033 80 81 gi|19744944|ref|NC_003470.1| 2180 3198671503 80 81 gi|19744946|ref|NC_003471.1| 2135 3198673802 80 81 gi|19744948|ref|NC_003472.1| 1790 3198676055 80 81 gi|9628107|ref|NC_001658.1| 6376 3198677942 80 81 gi|50261332|ref|NC_005990.1| 3930 3198684470 80 81 gi|50261334|ref|NC_005991.1| 1967 3198688522 80 81 gi|50261336|ref|NC_005992.1| 877 3198690586 80 81 gi|50261338|ref|NC_005993.1| 1764 3198691546 80 81 gi|50261340|ref|NC_005994.1| 1059 3198693405 80 81 gi|50261342|ref|NC_005995.1| 728 3198694551 80 81 gi|20889296|ref|NC_003885.1| 1645 3198695360 80 81 gi|20889302|ref|NC_003886.1| 1445 3198697097 80 81 gi|20522132|ref|NC_003797.1| 10818 3198698639 80 81 gi|20428596|ref|NC_003750.1| 3808 3198709676 80 81 gi|20428600|ref|NC_003752.1| 2157 3198713615 80 81 gi|20428604|ref|NC_003758.1| 1914 3198715882 80 81 gi|20428606|ref|NC_003759.1| 2682 3198717903 80 81 gi|20428608|ref|NC_003769.1| 1162 3198720703 80 81 gi|20428610|ref|NC_003770.1| 1938 3198721963 80 81 gi|20428612|ref|NC_003771.1| 3823 3198724009 80 81 gi|20070095|ref|NC_003501.1| 9672 3198727953 80 81 gi|20522134|ref|NC_003808.1| 3439 3198737822 80 81 gi|20522139|ref|NC_003810.1| 2310 3198741380 80 81 gi|20260783|ref|NC_003689.1| 7383 3198743781 80 81 gi|22960697|ref|NC_004180.1| 1884 3198751342 80 81 gi|22960700|ref|NC_004181.1| 4350 3198753335 80 81 gi|22960702|ref|NC_004182.1| 3909 3198757825 80 81 gi|22960704|ref|NC_004183.1| 3586 3198761868 80 81 gi|22960706|ref|NC_004184.1| 3157 3198765584 80 81 gi|22960708|ref|NC_004185.1| 2432 3198768866 80 81 gi|22960710|ref|NC_004186.1| 2141 3198771414 80 81 gi|22960712|ref|NC_004187.1| 2133 3198773667 80 81 gi|22960714|ref|NC_004188.1| 2029 3198775912 80 81 gi|22960716|ref|NC_004189.1| 1880 3198778053 80 81 gi|22960718|ref|NC_004190.1| 675 3198780043 80 81 gi|22960720|ref|NC_004191.1| 998 3198780813 80 81 gi|58177830|ref|NC_003786.2| 5344 3198781899 80 81 gi|20153383|ref|NC_003603.1| 4019 3198787381 80 81 gi|22855185|ref|NC_004169.1| 3243 3198791529 80 81 gi|22855187|ref|NC_004177.1| 3360 3198794891 80 81 gi|20564194|ref|NC_003825.1| 2861 3198798370 80 81 gi|9629255|ref|NC_001793.1| 6509 3198801334 80 81 gi|14141972|ref|NC_002786.1| 6305 3198807996 80 81 gi|9630566|ref|NC_001909.1| 31754 3198814451 80 81 gi|20522153|ref|NC_003804.1| 2760 3198846692 80 81 gi|20178606|ref|NC_003676.1| 10116 3198849536 80 81 gi|20178608|ref|NC_003675.1| 10140 3198859833 80 81 gi|19919937|ref|NC_003502.1| 6405 3198870184 80 81 gi|19919939|ref|NC_003509.1| 7711 3198876753 80 81 gi|9630125|ref|NC_001884.1| 134416 3198884628 80 81 gi|20177457|ref|NC_003638.1| 1007 3199020807 80 81 gi|20177459|ref|NC_003639.1| 1009 3199021909 80 81 gi|20177461|ref|NC_003640.1| 1000 3199023013 80 81 gi|20177463|ref|NC_003641.1| 990 3199024108 80 81 gi|20177465|ref|NC_003642.1| 989 3199025193 80 81 gi|20177467|ref|NC_003643.1| 977 3199026277 80 81 gi|20177469|ref|NC_003644.1| 981 3199027349 80 81 gi|20177471|ref|NC_003645.1| 985 3199028425 80 81 gi|20177477|ref|NC_003648.1| 1001 3199029506 80 81 gi|19919944|ref|NC_003511.1| 2913 3199030588 80 81 gi|19919949|ref|NC_003512.1| 2529 3199033606 80 81 gi|20177479|ref|NC_003634.1| 6673 3199036236 80 81 gi|21326223|ref|NC_003974.1| 3591 3199043076 80 81 gi|9630710|ref|NC_001942.1| 15644 3199046780 80 81 gi|25140191|ref|NC_004423.1| 5600 3199062701 80 81 gi|25140194|ref|NC_004424.1| 2831 3199068452 80 81 gi|25140197|ref|NC_004425.1| 2417 3199071400 80 81 gi|18249855|ref|NC_003357.1| 2737 3199073922 80 81 gi|20806034|ref|NC_003857.1| 2597 3199076780 80 81 gi|20451024|ref|NC_003787.1| 6812 3199079498 80 81 gi|20451026|ref|NC_003788.1| 3384 3199086484 80 81 gi|23238141|ref|NC_004205.1| 894 3199089986 80 81 gi|20889358|ref|NC_003873.1| 4674 3199090970 80 81 gi|21427637|ref|NC_004014.1| 6878 3199095787 80 81 gi|9634977|ref|NC_002201.1| 12035 3199102816 80 81 gi|22091104|ref|NC_004084.1| 58498 3199115072 80 81 gi|17736958|ref|NC_003300.1| 4741 3199174385 80 81 gi|9630091|ref|NC_001876.1| 34446 3199179252 80 81 gi|9629466|ref|NC_001813.1| 33213 3199214193 80 81 gi|20428571|ref|NC_003743.1| 5641 3199247890 80 81 gi|22855193|ref|NC_004170.1| 2981 3199253686 80 81 gi|10518489|ref|NC_002566.1| 200 3199256815 80 81 gi|10518490|ref|NC_002567.1| 3311 3199257127 80 81 gi|27881469|ref|NC_004541.1| 8289 3199260546 80 81 gi|20177491|ref|NC_003633.1| 4114 3199269012 80 81 gi|13559817|ref|NC_002729.1| 7352 3199273250 80 81 gi|20564213|ref|NC_003833.1| 3459 3199280774 80 81 gi|20564215|ref|NC_003834.1| 2944 3199284357 80 81 gi|20564218|ref|NC_003835.1| 2229 3199287418 80 81 gi|20889389|ref|NC_003876.1| 5133 3199289757 80 81 gi|22855216|ref|NC_004174.1| 2322 3199295039 80 81 gi|20806021|ref|NC_003860.1| 2662 3199297478 80 81 gi|30018236|ref|NC_004724.1| 16527 3199300270 80 81 gi|31343652|ref|NC_002628.2| 28798 3199317088 80 81 gi|20514400|ref|NC_003791.1| 7471 3199346328 80 81 gi|111572515|ref|NC_003792.2| 4667 3199353976 80 81 gi|22550379|ref|NC_004121.1| 2898 3199358784 80 81 gi|22550381|ref|NC_004122.1| 2213 3199361801 80 81 gi|20065963|ref|NC_003524.1| 33507 3199364115 80 81 gi|20087066|ref|NC_003533.1| 322 3199398132 80 81 gi|20260800|ref|NC_003694.1| 4662 3199398534 80 81 gi|20219034|ref|NC_003682.1| 301 3199403325 80 81 gi|20178349|ref|NC_003629.1| 5706 3199403704 80 81 gi|18450262|ref|NC_003380.1| 220 3199409564 80 81 gi|20806076|ref|NC_003850.1| 377 3199409880 80 81 gi|21234419|ref|NC_003906.1| 366 3199410351 80 81 gi|9627899|ref|NC_001625.1| 4194 3199410797 80 81 gi|9627203|ref|NC_001546.1| 300 3199415130 80 81 gi|22128617|ref|NC_004100.1| 2605 3199415530 80 81 gi|9632377|ref|NC_002048.1| 2584 3199418256 80 81 gi|9632383|ref|NC_002049.1| 2542 3199420961 80 81 gi|29251557|ref|NC_004644.1| 2535 3199423626 80 81 gi|29243866|ref|NC_004636.1| 2581 3199426273 80 81 gi|29337266|ref|NC_004660.1| 2589 3199428976 80 81 gi|28976177|ref|NC_004614.1| 2761 3199431679 80 81 gi|28976184|ref|NC_004613.1| 2748 3199434550 80 81 gi|29294559|ref|NC_004648.1| 2754 3199437412 80 81 gi|20806526|ref|NC_003868.1| 2586 3199440283 80 81 gi|9629636|ref|NC_001828.1| 2597 3199442982 80 81 gi|9630640|ref|NC_001917.1| 2562 3199445692 80 81 gi|29243888|ref|NC_004640.1| 2773 3199448371 80 81 gi|83700363|ref|NC_007647.1| 13952 3199451252 80 81 gi|124378065|ref|NC_008842.1| 1940 3199465470 80 81 gi|124378067|ref|NC_008843.1| 1945 3199467526 80 81 gi|124378070|ref|NC_008845.1| 1963 3199469587 80 81 gi|124378072|ref|NC_008846.1| 1963 3199471667 80 81 gi|124378075|ref|NC_008848.1| 2066 3199473746 80 81 gi|124378079|ref|NC_008851.1| 2080 3199475929 80 81 gi|124378082|ref|NC_008852.1| 2094 3199478126 80 81 gi|124378084|ref|NC_008853.1| 2135 3199480338 80 81 gi|124378086|ref|NC_008854.1| 2177 3199482591 80 81 gi|124378090|ref|NC_008857.1| 2199 3199484888 80 81 gi|124378092|ref|NC_008858.1| 2235 3199487207 80 81 gi|124378094|ref|NC_008859.1| 2262 3199489562 80 81 gi|124378096|ref|NC_008860.1| 2285 3199491945 80 81 gi|124378099|ref|NC_008861.1| 2295 3199494351 80 81 gi|124378102|ref|NC_008863.1| 2318 3199496767 80 81 gi|124378104|ref|NC_008864.1| 2341 3199499206 80 81 gi|124378107|ref|NC_008866.1| 2358 3199501669 80 81 gi|124378110|ref|NC_008867.1| 2380 3199504149 80 81 gi|124378114|ref|NC_008869.1| 2408 3199506651 80 81 gi|124378117|ref|NC_008870.1| 2415 3199509182 80 81 gi|124378119|ref|NC_008871.1| 2452 3199511720 80 81 gi|124378122|ref|NC_008872.1| 2454 3199514295 80 81 gi|124378125|ref|NC_008873.1| 2462 3199516872 80 81 gi|124378129|ref|NC_008876.1| 2548 3199519457 80 81 gi|124378132|ref|NC_008878.1| 2579 3199522129 80 81 gi|124378135|ref|NC_008880.1| 2598 3199524833 80 81 gi|124378137|ref|NC_008881.1| 2615 3199527556 80 81 gi|124378140|ref|NC_008883.1| 2631 3199530296 80 81 gi|124378142|ref|NC_008884.1| 2636 3199533052 80 81 gi|124378144|ref|NC_008885.1| 2641 3199535813 80 81 gi|124378147|ref|NC_008887.1| 2723 3199538580 80 81 gi|124378150|ref|NC_008888.1| 2723 3199541430 80 81 gi|124378153|ref|NC_008889.1| 2738 3199544280 80 81 gi|124378155|ref|NC_008890.1| 2768 3199547145 80 81 gi|124378157|ref|NC_008891.1| 2775 3199550040 80 81 gi|124378160|ref|NC_008893.1| 2808 3199552942 80 81 gi|124378162|ref|NC_008894.1| 2819 3199555878 80 81 gi|124378167|ref|NC_008896.1| 2856 3199558825 80 81 gi|124378170|ref|NC_008898.1| 2875 3199561809 80 81 gi|124378173|ref|NC_008900.1| 2924 3199564812 80 81 gi|124378176|ref|NC_008901.1| 2930 3199567865 80 81 gi|124378178|ref|NC_008902.1| 2933 3199570924 80 81 gi|124378181|ref|NC_008904.1| 2944 3199573986 80 81 gi|124378183|ref|NC_008905.1| 2997 3199577059 80 81 gi|124378185|ref|NC_008906.1| 3036 3199580185 80 81 gi|124378190|ref|NC_008908.1| 3083 3199583350 80 81 gi|124378192|ref|NC_008909.1| 3111 3199586563 80 81 gi|124378194|ref|NC_008910.1| 3117 3199589804 80 81 gi|124378202|ref|NC_008912.1| 3141 3199593051 80 81 gi|124378206|ref|NC_008914.1| 3243 3199596324 80 81 gi|124378212|ref|NC_008917.1| 3343 3199599700 80 81 gi|124378216|ref|NC_008919.1| 3391 3199603177 80 81 gi|124378219|ref|NC_008920.1| 3403 3199606703 80 81 gi|124378221|ref|NC_008921.1| 3498 3199610241 80 81 gi|124378223|ref|NC_008922.1| 3519 3199613875 80 81 gi|124378225|ref|NC_008923.1| 3743 3199617530 80 81 gi|124378228|ref|NC_008924.1| 3761 3199621412 80 81 gi|124378232|ref|NC_008926.1| 4059 3199625312 80 81 gi|124378235|ref|NC_008927.1| 4066 3199629513 80 81 gi|124378238|ref|NC_008928.1| 4340 3199633721 80 81 gi|124378242|ref|NC_008930.1| 4829 3199638207 80 81 gi|124378245|ref|NC_008932.1| 5156 3199643188 80 81 gi|124378247|ref|NC_008933.1| 2060 3199648500 80 81 gi|124378249|ref|NC_008934.1| 2309 3199650678 80 81 gi|124378252|ref|NC_008936.1| 2588 3199653108 80 81 gi|124378255|ref|NC_008937.1| 2759 3199655821 80 81 gi|124378257|ref|NC_008938.1| 2840 3199658707 80 81 gi|124378259|ref|NC_008939.1| 3008 3199661674 80 81 gi|124378261|ref|NC_008940.1| 3140 3199664811 80 81 gi|124378264|ref|NC_008941.1| 4459 3199668082 80 81 gi|8486127|ref|NC_002018.1| 1413 3199672700 80 81 gi|8486131|ref|NC_002020.1| 890 3199674234 80 81 gi|8486136|ref|NC_002022.1| 2233 3199675239 80 81 gi|8486138|ref|NC_002023.1| 2341 3199677603 80 81 gi|9629708|ref|NC_001836.1| 16934 3199680042 80 81 gi|28209386|ref|NC_004559.1| 2688 3199697291 80 81 gi|37059720|ref|NC_005099.1| 824 3199700098 80 81 gi|18034800|ref|NC_003157.4| 41796 3199701006 80 81 gi|33867950|ref|NC_005074.1| 5207 3199743423 80 81 gi|167583555|ref|NC_010324.1| 77554 3199748774 80 81 gi|194100609|ref|NC_011039.1| 70110 3199827375 80 81 gi|134305391|ref|NC_001615.2| 13720 3199898418 80 81 gi|8486164|ref|NC_002204.1| 2368 3199912382 80 81 gi|8486152|ref|NC_002207.1| 1882 3199914852 80 81 gi|38371701|ref|NC_005214.1| 6423 3199916833 80 81 gi|9629156|ref|NC_001746.1| 6362 3199923412 80 81 gi|9629167|ref|NC_001748.1| 6656 3199929920 80 81 gi|20177417|ref|NC_003632.1| 7059 3199936734 80 81 gi|26986741|ref|NC_004439.1| 7358 3199943961 80 81 gi|111564125|ref|NC_003839.2| 7271 3199951489 80 81 gi|34610110|ref|NC_005096.1| 3929 3199958929 80 81 gi|34610112|ref|NC_005097.1| 7514 3199962986 80 81 gi|13249660|ref|NC_002690.1| 3204 3199970663 80 81 gi|19744910|ref|NC_003464.1| 3476 3199973982 80 81 gi|9626924|ref|NC_001495.1| 3644 3199977577 80 81 gi|20386796|ref|NC_003739.1| 5449 3199981350 80 81 gi|20522126|ref|NC_003806.1| 3876 3199986958 80 81 gi|9628660|ref|NC_001706.1| 22172 3199990950 80 81 gi|20153407|ref|NC_003606.1| 9779 3200013473 80 81 gi|9625433|ref|NC_001335.1| 52297 3200023444 80 81 gi|9630656|ref|NC_001925.1| 6875 3200076470 80 81 gi|189042976|ref|NC_003500.2| 4760 3200083512 80 81 gi|50253399|ref|NC_005987.1| 1610 3200088404 80 81 gi|50253403|ref|NC_005989.1| 2774 3200090107 80 81 gi|11072110|ref|NC_002598.1| 4326 3200092984 80 81 gi|20087056|ref|NC_003534.1| 12507 3200097429 80 81 gi|20428594|ref|NC_003749.1| 3849 3200110176 80 81 gi|58177829|ref|NC_003785.2| 6794 3200114149 80 81 gi|9628907|ref|NC_001726.1| 4201 3200121100 80 81 gi|9632368|ref|NC_002046.1| 2642 3200125433 80 81 gi|20143442|ref|NC_003568.1| 2874 3200128181 80 81 gi|20143444|ref|NC_003569.1| 3431 3200131163 80 81 gi|46393301|ref|NC_005854.1| 2268 3200134716 80 81 gi|11067737|ref|NC_002588.1| 6364 3200137081 80 81 gi|19919941|ref|NC_003510.1| 6003 3200143593 80 81 gi|9631279|ref|NC_001990.1| 6625 3200149749 80 81 gi|18249864|ref|NC_003356.1| 42575 3200156532 80 81 gi|10314012|ref|NC_002552.1| 8612 3200199704 80 81 gi|9634052|ref|NC_001278.1| 4113 3200208500 80 81 gi|41387225|ref|NC_005084.2| 15378 3200212731 80 81 gi|10518479|ref|NC_002557.1| 4361 3200228411 80 81 gi|10518480|ref|NC_002558.1| 4187 3200232936 80 81 gi|10518481|ref|NC_002559.1| 3878 3200237285 80 81 gi|10518482|ref|NC_002560.1| 2260 3200241321 80 81 gi|10518483|ref|NC_002561.1| 1859 3200243719 80 81 gi|10518484|ref|NC_002562.1| 1776 3200245711 80 81 gi|10518485|ref|NC_002563.1| 1234 3200247619 80 81 gi|10518486|ref|NC_002564.1| 1157 3200248978 80 81 gi|33620701|ref|NC_005065.1| 15045 3200250219 80 81 gi|20514675|ref|NC_003793.1| 7768 3200265524 80 81 gi|22550377|ref|NC_004120.1| 3252 3200273472 80 81 gi|20066014|ref|NC_003523.1| 1104 3200276852 80 81 gi|20260798|ref|NC_003693.1| 7362 3200278045 80 81 gi|20451032|ref|NC_003778.1| 1165 3200285595 80 81 gi|157784255|ref|NC_004009.2| 618 3200286862 80 81 gi|20806069|ref|NC_003854.1| 717 3200287574 80 81 gi|21450051|ref|NC_004033.1| 230 3200288382 80 81 gi|20153365|ref|NC_003614.1| 8911 3200288703 80 81 gi|8486122|ref|NC_002016.1| 1027 3200297829 80 81 gi|8486125|ref|NC_002017.1| 1778 3200298972 80 81 gi|8486129|ref|NC_002019.1| 1565 3200300876 80 81 gi|29337260|ref|NC_004659.1| 2603 3200302550 80 81 gi|29337269|ref|NC_004661.1| 2612 3200305264 80 81 gi|29711070|ref|NC_004706.1| 1372 3200307999 80 81 gi|29501756|ref|NC_004673.1| 2739 3200309466 80 81 gi|42733078|ref|NC_005497.1| 1360 3200312340 80 81 gi|56693045|ref|NC_006559.1| 8026 3200313791 80 81 gi|63252855|ref|NC_006995.1| 2746 3200321993 80 81 gi|38707888|ref|NC_005281.1| 8587 3200324859 80 81 gi|20514394|ref|NC_003790.1| 6927 3200333620 80 81 gi|124378062|ref|NC_008840.1| 1859 3200340725 80 81 gi|170676268|ref|NC_010489.1| 3279 3200342693 80 81 gi|170676274|ref|NC_010491.1| 8919 3200346098 80 81 gi|194100514|ref|NC_011044.1| 69904 3200355203 80 81 gi|21493006|ref|NC_004042.1| 2617 3200426061 80 81 gi|21493011|ref|NC_004043.1| 2580 3200428791 80 81 gi|9625557|ref|NC_001341.1| 4491 3200431475 80 81 gi|21238454|ref|NC_003908.1| 11484 3200436109 80 81 gi|9626694|ref|NC_001480.1| 6331 3200447805 80 81 gi|22711868|ref|NC_004145.1| 1305 3200454286 80 81 gi|20178589|ref|NC_003668.1| 4504 3200455682 80 81 gi|20178595|ref|NC_003672.1| 5897 3200460317 80 81 gi|19919896|ref|NC_003504.1| 2603 3200466368 80 81 gi|19919902|ref|NC_003505.1| 2572 3200469084 80 81 gi|9627952|ref|NC_001633.1| 4009 3200471762 80 81 gi|20530232|ref|NC_003816.1| 1002 3200475909 80 81 gi|20087064|ref|NC_003548.1| 3404 3200477004 80 81 gi|9632272|ref|NC_001982.1| 2478 3200480538 80 81 gi|9626510|ref|NC_001447.1| 11965 3200483115 80 81 gi|20522144|ref|NC_003802.1| 2206 3200495309 80 81 gi|16519569|ref|NC_003203.1| 1114 3200497628 80 81 gi|20806045|ref|NC_003847.1| 826 3200498834 80 81 gi|20178632|ref|NC_003678.1| 12602 3200499739 80 81 gi|27228718|ref|NC_004450.1| 7458 3200512569 80 81 gi|33867953|ref|NC_005075.1| 2096 3200520219 80 81 gi|31442397|ref|NC_004824.1| 2742 3200522423 80 81 gi|31442404|ref|NC_004825.1| 2713 3200525281 80 81 gi|28144357|ref|NC_004553.1| 4037 3200528096 80 81 gi|22128611|ref|NC_004099.1| 2642 3200532280 80 81 gi|29243860|ref|NC_004638.1| 2582 3200535047 80 81 gi|29294566|ref|NC_004647.1| 2756 3200537742 80 81 gi|38707890|ref|NC_005284.1| 54865 3200540608 80 81 gi|194097521|ref|NC_011046.1| 29305 3200596232 80 81 gi|194303197|ref|NC_011057.1| 68090 3200625981 80 81 gi|98960846|ref|NC_008038.1| 2129 3200694988 80 81 gi|22212887|ref|NC_004106.1| 6524 3200697217 80 81 gi|25057978|ref|NC_004421.1| 8374 3200703887 80 81 gi|124484665|ref|NC_008963.1| 3573 3200712458 80 81 gi|54193767|ref|NC_006367.1| 5359 3200716150 80 81 gi|80511633|ref|NC_007533.1| 3773 3200721651 80 81 gi|80526268|ref|NC_007534.1| 2089 3200725547 80 81 gi|85677473|ref|NC_007728.1| 10046 3200727738 80 81 gi|170778501|ref|NC_010521.1| 9836 3200737986 80 81 gi|124378059|ref|NC_008837.1| 1533 3200748036 80 81 gi|124378060|ref|NC_008838.1| 1657 3200749680 80 81 gi|124378061|ref|NC_008839.1| 1750 3200751449 80 81 gi|124378064|ref|NC_008841.1| 1916 3200753312 80 81 gi|124378069|ref|NC_008844.1| 1948 3200755343 80 81 gi|124378074|ref|NC_008847.1| 2005 3200757407 80 81 gi|124378077|ref|NC_008849.1| 2074 3200759529 80 81 gi|124378078|ref|NC_008850.1| 2079 3200761720 80 81 gi|124378088|ref|NC_008855.1| 2179 3200763917 80 81 gi|124378089|ref|NC_008856.1| 2195 3200766216 80 81 gi|124378101|ref|NC_008862.1| 2298 3200768531 80 81 gi|124378106|ref|NC_008865.1| 2358 3200770950 80 81 gi|124378113|ref|NC_008868.1| 2395 3200773430 80 81 gi|124378127|ref|NC_008874.1| 2509 3200775947 80 81 gi|124378128|ref|NC_008875.1| 2540 3200778580 80 81 gi|124378131|ref|NC_008877.1| 2572 3200781244 80 81 gi|124378134|ref|NC_008879.1| 2590 3200783941 80 81 gi|124378139|ref|NC_008882.1| 2625 3200786656 80 81 gi|124378146|ref|NC_008886.1| 2646 3200789406 80 81 gi|124378159|ref|NC_008892.1| 2785 3200792178 80 81 gi|124378169|ref|NC_008897.1| 2871 3200795090 80 81 gi|124378172|ref|NC_008899.1| 2879 3200798089 80 81 gi|124378180|ref|NC_008903.1| 2934 3200801096 80 81 gi|124378189|ref|NC_008907.1| 3058 3200804158 80 81 gi|124378204|ref|NC_008913.1| 3157 3200807347 80 81 gi|124378210|ref|NC_008915.1| 3307 3200810636 80 81 gi|124378211|ref|NC_008916.1| 3331 3200814077 80 81 gi|124378215|ref|NC_008918.1| 3357 3200817542 80 81 gi|124378231|ref|NC_008925.1| 3821 3200821033 80 81 gi|124378241|ref|NC_008929.1| 4707 3200824993 80 81 gi|124378244|ref|NC_008931.1| 4886 3200829850 80 81 gi|124378251|ref|NC_008935.1| 2502 3200834890 80 81 gi|124484637|ref|NC_008955.1| 3548 3200837516 80 81 gi|171473627|ref|NC_010538.1| 8550 3200841174 80 81 gi|195661200|ref|NC_011104.1| 39989 3200849904 80 81 gi|89902995|ref|NC_007906.1| 7316 3200890463 80 81 gi|89902998|ref|NC_007905.1| 3366 3200897941 80 81 gi|89885729|ref|NC_007903.1| 3380 3200901422 80 81 gi|89903001|ref|NC_007904.1| 7325 3200904917 80 81 gi|189026271|ref|NC_010759.1| 7038 3200912407 80 81 gi|189026277|ref|NC_010760.1| 7174 3200919606 80 81 gi|189026280|ref|NC_010761.1| 7088 3200926943 80 81 gi|164607214|ref|NC_010254.1| 3332 3200934193 80 81 gi|158380386|ref|NC_009552.2| 40863 3200937636 80 81 gi|17736965|ref|NC_003301.1| 3192 3200979092 80 81 gi|197085612|ref|NC_007030.2| 4576 3200982417 80 81 gi|134287156|ref|NC_009233.1| 186262 3200987132 80 81 gi|197261511|ref|NC_011167.1| 53104 3201175791 80 81 gi|157310906|ref|NC_009816.1| 70579 3201229635 80 81 gi|195982531|ref|NC_011132.1| 18343 3201301163 80 81 gi|200003956|ref|NC_011222.1| 44929 3201319808 80 81 gi|119964534|ref|NC_008725.1| 111953 3201365367 80 81 gi|203457352|ref|NC_011272.1| 153894 3201478794 80 81 gi|203458877|ref|NC_011269.1| 154017 3201634689 80 81 gi|203460520|ref|NC_011270.1| 154906 3201790705 80 81 gi|203463359|ref|NC_011267.1| 49487 3201947622 80 81 gi|204305660|ref|NC_011271.1| 155372 3201997801 80 81 gi|78766369|ref|NC_007549.1| 2969 3202155200 80 81 gi|78766647|ref|NC_007550.1| 2512 3202158291 80 81 gi|78767039|ref|NC_007552.1| 1307 3202160919 80 81 gi|78767273|ref|NC_007553.1| 1287 3202162327 80 81 gi|78767504|ref|NC_007554.1| 1004 3202163715 80 81 gi|78767691|ref|NC_007555.1| 932 3202164816 80 81 gi|78767825|ref|NC_007556.1| 820 3202165844 80 81 gi|78767973|ref|NC_007557.1| 739 3202166759 80 81 gi|78768152|ref|NC_007558.1| 649 3202167592 80 81 gi|206599544|ref|NC_011291.1| 47057 3202168326 80 81 gi|206599983|ref|NC_011292.1| 68952 3202216052 80 81 gi|206600290|ref|NC_011284.1| 68450 3202285939 80 81 gi|208436764|ref|NC_011335.1| 119343 3202355327 80 81 gi|207271566|ref|NC_011309.1| 2757 3202476251 80 81 gi|208429851|ref|NC_011317.1| 4139 3202479130 80 81 gi|18496886|ref|NC_003387.1| 52797 3202483392 80 81 gi|12657854|ref|NC_002656.1| 50550 3202536921 80 81 gi|29566021|ref|NC_004682.1| 50913 3202588175 80 81 gi|29566511|ref|NC_004687.1| 156102 3202639797 80 81 gi|9632343|ref|NC_002037.1| 1399 3202797924 80 81 gi|209170884|ref|NC_011345.1| 155122 3202799435 80 81 gi|209363550|ref|NC_011349.1| 7310 3202956565 80 81 gi|48696722|ref|NC_005881.1| 207439 3202964036 80 81 gi|189418893|ref|NC_010810.1| 7961 3203174144 80 81 gi|190151415|ref|NC_010945.1| 39136 3203182278 80 81 gi|209486234|ref|NC_011362.1| 356 3203221994 80 81 gi|169257208|ref|NC_010392.1| 48491 3203222417 80 81 gi|169257267|ref|NC_010393.1| 45840 3203271577 80 81 gi|209571591|ref|NC_011372.1| 2805 3203318082 80 81 gi|209902360|ref|NC_011400.1| 6171 3203320987 80 81 gi|170676276|ref|NC_010495.1| 45051 3203327304 80 81 gi|73852470|ref|NC_007346.1| 407339 3203372993 80 81 gi|9626109|ref|NC_001365.1| 8273 3203785496 80 81 gi|21427656|ref|NC_004017.1| 2284 3203793945 80 81 gi|209901237|ref|NC_011398.1| 50930 3203796332 80 81 gi|148747799|ref|NC_009551.1| 43249 3203847972 80 81 gi|212671375|ref|NC_011533.1| 6742 3203891833 80 81 gi|212671430|ref|NC_011540.1| 8500 3203898733 80 81 gi|212671437|ref|NC_011542.1| 12381 3203907427 80 81 gi|212671448|ref|NC_011543.1| 4652 3203920036 80 81 gi|212671453|ref|NC_011544.1| 6528 3203924809 80 81 gi|212726666|ref|NC_011558.1| 6797 3203931507 80 81 gi|212499141|ref|NC_011541.1| 9650 3203938467 80 81 gi|212498614|ref|NC_011535.1| 4731 3203948318 80 81 gi|212675447|ref|NC_011568.1| 6081 3203953201 80 81 gi|212498904|ref|NC_011538.1| 6285 3203959435 80 81 gi|212498833|ref|NC_011537.1| 6206 3203965873 80 81 gi|212498985|ref|NC_011539.1| 6154 3203972227 80 81 gi|212525933|ref|NC_011559.1| 6151 3203978536 80 81 gi|212498331|ref|NC_011532.1| 12926 3203984840 80 81 gi|212498718|ref|NC_011536.1| 4547 3203998005 80 81 gi|212525937|ref|NC_011560.1| 9973 3204002688 80 81 gi|197085614|ref|NC_011142.1| 47453 3204012860 80 81 gi|213159268|ref|NC_011588.1| 127615 3204060980 80 81 gi|213496077|ref|NC_011592.1| 8759 3204190294 80 81 gi|19919953|ref|NC_003503.1| 4616 3204199247 80 81 gi|19919961|ref|NC_003506.1| 6683 3204204004 80 81 gi|215401232|ref|NC_011615.1| 154196 3204210870 80 81 gi|96980660|ref|NC_008028.1| 9548 3204367061 80 81 gi|215401395|ref|NC_011616.1| 148634 3204376819 80 81 gi|14251190|ref|NC_002795.1| 8657 3204527380 80 81 gi|30410830|ref|NC_004779.1| 7794 3204536225 80 81 gi|30410833|ref|NC_004780.1| 1402 3204544196 80 81 gi|30410836|ref|NC_004781.1| 1788 3204545695 80 81 gi|20451012|ref|NC_003779.1| 8797 3204547583 80 81 gi|32469477|ref|NC_004995.1| 4048 3204556561 80 81 gi|47177088|ref|NC_005876.1| 10152 3204560720 80 81 gi|162290107|ref|NC_010147.1| 43011 3204571076 80 81 gi|122891714|ref|NC_008798.1| 43265 3204614702 80 81 gi|122891784|ref|NC_008799.1| 43282 3204658585 80 81 gi|20177475|ref|NC_003647.1| 1022 3204702492 80 81 gi|56158847|ref|AC_000003.1| 30536 3204703594 80 81 gi|56160472|ref|AC_000006.1| 35100 3204734578 80 81 gi|56160492|ref|AC_000007.1| 35937 3204770183 80 81 gi|56160529|ref|AC_000008.1| 35938 3204806636 80 81 gi|56160595|ref|AC_000010.1| 35524 3204843092 80 81 gi|56160634|ref|AC_000011.1| 36519 3204879129 80 81 gi|56160815|ref|AC_000016.1| 26263 3204916172 80 81 gi|56160839|ref|AC_000017.1| 36001 3204942835 80 81 gi|56160876|ref|AC_000018.1| 35514 3204979358 80 81 gi|56160914|ref|AC_000019.1| 34794 3205015388 80 81 gi|56160952|ref|AC_000020.1| 31323 3205050689 80 81 gi|9632881|ref|NC_000869.1| 2751 3205082497 80 81 gi|9632889|ref|NC_000870.1| 2737 3205085376 80 81 gi|9632978|ref|NC_000874.1| 5899 3205088222 80 81 gi|9632989|ref|NC_000882.1| 2744 3205094270 80 81 gi|9633622|ref|NC_000943.1| 11014 3205097128 80 81 gi|9633628|ref|NC_000947.1| 9760 3205108352 80 81 gi|45597171|ref|NC_001270.2| 6825 3205118305 80 81 gi|11497494|ref|NC_001340.1| 329 3205125286 80 81 gi|9625665|ref|NC_001346.1| 2690 3205125703 80 81 gi|9626081|ref|NC_001359.1| 2631 3205128515 80 81 gi|72257063|ref|NC_001361.2| 8533 3205131241 80 81 gi|9626096|ref|NC_001362.1| 8323 3205139956 80 81 gi|9626127|ref|NC_001368.1| 3374 3205148463 80 81 gi|9626196|ref|NC_001407.1| 9392 3205151945 80 81 gi|9626201|ref|NC_001408.1| 7286 3205161528 80 81 gi|9626205|ref|NC_001409.1| 7555 3205168984 80 81 gi|11496574|ref|NC_001410.1| 247 3205176706 80 81 gi|9626219|ref|NC_001413.1| 8482 3205177033 80 81 gi|9626225|ref|NC_001414.1| 8419 3205185690 80 81 gi|9626433|ref|NC_001428.1| 7401 3205194281 80 81 gi|9626436|ref|NC_001430.1| 7390 3205201841 80 81 gi|9626460|ref|NC_001437.1| 10976 3205209389 80 81 gi|9626462|ref|NC_001438.1| 2585 3205220589 80 81 gi|9626465|ref|NC_001439.1| 2647 3205223293 80 81 gi|9626472|ref|NC_001440.1| 2216 3205226050 80 81 gi|9626475|ref|NC_001441.1| 6955 3205228363 80 81 gi|9626508|ref|NC_001445.1| 9741 3205235466 80 81 gi|9626526|ref|NC_001449.1| 11444 3205245412 80 81 gi|9626546|ref|NC_001452.1| 9202 3205257064 80 81 gi|9626649|ref|NC_001461.1| 12573 3205266458 80 81 gi|11496578|ref|NC_001462.1| 246 3205279265 80 81 gi|9626651|ref|NC_001463.1| 9189 3205279598 80 81 gi|11496573|ref|NC_001464.1| 371 3205288973 80 81 gi|9626677|ref|NC_001472.1| 7389 3205289415 80 81 gi|28212283|ref|NC_001481.2| 7683 3205296963 80 81 gi|9626708|ref|NC_001483.1| 6151 3205304810 80 81 gi|9626732|ref|NC_001489.1| 7478 3205311102 80 81 gi|9626965|ref|NC_001503.1| 8805 3205318746 80 81 gi|9626971|ref|NC_001504.1| 4266 3205327725 80 81 gi|9627034|ref|NC_001517.1| 9640 3205332111 80 81 gi|9627197|ref|NC_001542.1| 11932 3205341931 80 81 gi|9790292|ref|NC_001543.1| 7437 3205354096 80 81 gi|9627210|ref|NC_001550.1| 8557 3205361698 80 81 gi|11496568|ref|NC_001553.1| 360 3205370436 80 81 gi|9790340|ref|NC_001555.1| 9494 3205370866 80 81 gi|9627252|ref|NC_001575.1| 4450 3205380550 80 81 gi|9627404|ref|NC_001598.1| 15480 3205385121 80 81 gi|158539108|ref|NC_001608.3| 19111 3205400879 80 81 gi|9627719|ref|NC_001612.1| 7413 3205420295 80 81 gi|9627728|ref|NC_001616.1| 9704 3205427862 80 81 gi|9627730|ref|NC_001617.1| 7152 3205437754 80 81 gi|9627950|ref|NC_001632.1| 12226 3205445070 80 81 gi|9627971|ref|NC_001639.1| 14104 3205457533 80 81 gi|9627983|ref|NC_001642.1| 6366 3205471880 80 81 gi|9627990|ref|NC_001647.1| 2705 3205478402 80 81 gi|9627994|ref|NC_001648.1| 8159 3205481213 80 81 gi|11496577|ref|NC_001651.1| 315 3205489545 80 81 gi|9628101|ref|NC_001655.1| 9399 3205489931 80 81 gi|9628265|ref|NC_001661.1| 19296 3205499516 80 81 gi|9628429|ref|NC_001671.1| 9924 3205519128 80 81 gi|9628431|ref|NC_001672.1| 11141 3205529253 80 81 gi|9628705|ref|NC_001710.1| 9392 3205540609 80 81 gi|9628826|ref|NC_001718.1| 5075 3205550184 80 81 gi|9629096|ref|NC_001734.1| 30536 3205555387 80 81 gi|11344952|ref|NC_001739.2| 8178 3205586383 80 81 gi|57864579|ref|NC_001749.2| 6495 3205594737 80 81 gi|9629179|ref|NC_001768.1| 9475 3205601388 80 81 gi|9629244|ref|NC_001785.1| 10326 3205611050 80 81 gi|9629345|ref|NC_001800.1| 8106 3205621567 80 81 gi|9629352|ref|NC_001801.1| 6424 3205629856 80 81 gi|9629357|ref|NC_001802.1| 9181 3205636438 80 81 gi|9629460|ref|NC_001812.1| 6227 3205645803 80 81 gi|9629496|ref|NC_001814.1| 9535 3205652176 80 81 gi|9629498|ref|NC_001815.1| 8855 3205661907 80 81 gi|11496567|ref|NC_001830.1| 315 3205670947 80 81 gi|9629718|ref|NC_001837.1| 9550 3205671333 80 81 gi|9629892|ref|NC_001859.1| 7414 3205681068 80 81 gi|9629902|ref|NC_001867.1| 12708 3205688650 80 81 gi|9629909|ref|NC_001868.1| 2706 3205701601 80 81 gi|9630315|ref|NC_001886.1| 9384 3205704413 80 81 gi|9630376|ref|NC_001897.1| 7348 3205713971 80 81 gi|11496580|ref|NC_001907.1| 326 3205721475 80 81 gi|9630635|ref|NC_001915.1| 3097 3205721901 80 81 gi|9630638|ref|NC_001916.1| 2784 3205725132 80 81 gi|9630643|ref|NC_001918.1| 8251 3205728009 80 81 gi|11496576|ref|NC_001920.1| 366 3205736445 80 81 gi|9630658|ref|NC_001926.1| 4458 3205736891 80 81 gi|39980672|ref|NC_001928.2| 2632 3205741482 80 81 gi|39980679|ref|NC_001929.2| 2585 3205744224 80 81 gi|9630671|ref|NC_001932.1| 2815 3205746924 80 81 gi|9630680|ref|NC_001933.1| 2645 3205749857 80 81 gi|9630683|ref|NC_001934.1| 2593 3205752617 80 81 gi|9630688|ref|NC_001935.1| 2547 3205755324 80 81 gi|9630699|ref|NC_001938.1| 2601 3205757977 80 81 gi|9630704|ref|NC_001939.1| 2544 3205760685 80 81 gi|9630707|ref|NC_001940.1| 8448 3205763329 80 81 gi|9630726|ref|NC_001943.1| 6813 3205771946 80 81 gi|9630737|ref|NC_001948.1| 8744 3205778933 80 81 gi|9630778|ref|NC_001958.1| 26263 3205787853 80 81 gi|106060735|ref|NC_001959.2| 7654 3205814507 80 81 gi|11497496|ref|NC_002015.1| 356 3205822331 80 81 gi|50355594|ref|NC_002024.2| 2593 3205822768 80 81 gi|9626928|ref|NC_002025.1| 2037 3205825469 80 81 gi|9626931|ref|NC_002026.1| 3234 3205827605 80 81 gi|9626933|ref|NC_002027.1| 2865 3205830953 80 81 gi|176121034|ref|NC_002028.2| 2111 3205833929 80 81 gi|11497497|ref|NC_002030.1| 359 3205836142 80 81 gi|9627244|ref|NC_002031.1| 10862 3205836571 80 81 gi|9629506|ref|NC_002032.1| 12255 3205847654 80 81 gi|9632334|ref|NC_002034.1| 3357 3205860139 80 81 gi|9632346|ref|NC_002038.1| 3357 3205863611 80 81 gi|9632350|ref|NC_002040.1| 2188 3205867083 80 81 gi|9632353|ref|NC_002041.1| 7099 3205869382 80 81 gi|9632357|ref|NC_002042.1| 3593 3205876653 80 81 gi|9632374|ref|NC_002047.1| 2585 3205880370 80 81 gi|9632391|ref|NC_002052.1| 8897 3205883068 80 81 gi|12408699|ref|NC_002058.3| 7440 3205892135 80 81 gi|9634109|ref|NC_002161.1| 15456 3205899743 80 81 gi|9635228|ref|NC_002323.1| 9760 3205915471 80 81 gi|9635231|ref|NC_002324.1| 4056 3205925431 80 81 gi|9635234|ref|NC_002325.1| 3123 3205929616 80 81 gi|9635237|ref|NC_002326.1| 2915 3205932857 80 81 gi|9635240|ref|NC_002327.1| 2704 3205935887 80 81 gi|9635243|ref|NC_002328.1| 2584 3205938703 80 81 gi|9635246|ref|NC_002330.1| 3683 3205941404 80 81 gi|9635436|ref|NC_002349.1| 3659 3205945214 80 81 gi|9635438|ref|NC_002350.1| 7636 3205948999 80 81 gi|9635444|ref|NC_002356.1| 3569 3205956811 80 81 gi|9635457|ref|NC_002359.1| 7147 3205960505 80 81 gi|9635461|ref|NC_002361.1| 2037 3205967808 80 81 gi|9845214|ref|NC_002510.1| 2764 3205969947 80 81 gi|14583260|ref|NC_002532.2| 12704 3205972816 80 81 gi|10314009|ref|NC_002548.1| 9491 3205985752 80 81 gi|10314005|ref|NC_002551.1| 8284 3205995444 80 81 gi|10518487|ref|NC_002565.1| 897 3206003942 80 81 gi|11119632|ref|NC_002602.2| 336 3206004934 80 81 gi|12657941|ref|NC_002657.1| 12301 3206005350 80 81 gi|13559808|ref|NC_002728.1| 18246 3206017864 80 81 gi|13634098|ref|NC_002738.1| 893 3206036424 80 81 gi|13634104|ref|NC_002743.1| 682 3206037413 80 81 gi|14010734|ref|NC_002766.1| 5776 3206038172 80 81 gi|14142010|ref|NC_002792.1| 6301 3206044090 80 81 gi|15808065|ref|NC_002990.1| 7637 3206050552 80 81 gi|15808067|ref|NC_002991.1| 3582 3206058367 80 81 gi|14717378|ref|NC_003003.1| 5951 3206062072 80 81 gi|14717380|ref|NC_003004.1| 3607 3206068176 80 81 gi|14993610|ref|NC_003006.1| 4329 3206071897 80 81 gi|14993612|ref|NC_003007.1| 4056 3206076349 80 81 gi|14993614|ref|NC_003008.1| 3921 3206080524 80 81 gi|14993616|ref|NC_003009.1| 3339 3206084563 80 81 gi|14993618|ref|NC_003010.1| 3159 3206088012 80 81 gi|14993620|ref|NC_003011.1| 1783 3206091279 80 81 gi|14993622|ref|NC_003012.1| 1391 3206093153 80 81 gi|14993624|ref|NC_003013.1| 1250 3206094630 80 81 gi|14993626|ref|NC_003014.1| 1141 3206095964 80 81 gi|14993628|ref|NC_003015.1| 956 3206097189 80 81 gi|14993631|ref|NC_003016.1| 4164 3206098245 80 81 gi|14993633|ref|NC_003017.1| 3853 3206102550 80 81 gi|14993635|ref|NC_003018.1| 3846 3206106540 80 81 gi|14993637|ref|NC_003019.1| 3262 3206110523 80 81 gi|14993639|ref|NC_003020.1| 2851 3206113914 80 81 gi|14993641|ref|NC_003021.1| 1792 3206116889 80 81 gi|14993643|ref|NC_003022.1| 1501 3206118792 80 81 gi|14993645|ref|NC_003023.1| 1332 3206120400 80 81 gi|14993647|ref|NC_003024.1| 1187 3206121837 80 81 gi|14993649|ref|NC_003025.1| 944 3206123128 80 81 gi|15081544|ref|NC_003045.1| 31028 3206124150 80 81 gi|26553442|ref|NC_003050.2| 40248 3206155640 80 81 gi|15148076|ref|NC_003054.1| 1821 3206196456 80 81 gi|15150434|ref|NC_003056.1| 5853 3206198367 80 81 gi|16767845|ref|NC_003215.1| 11442 3206204362 80 81 gi|17059637|ref|NC_003224.1| 9591 3206216024 80 81 gi|18071198|ref|NC_003326.1| 2750 3206225800 80 81 gi|18254496|ref|NC_003355.1| 6298 3206228653 80 81 gi|18490052|ref|NC_003377.1| 9515 3206235102 80 81 gi|18450238|ref|NC_003379.1| 2672 3206244814 80 81 gi|18450268|ref|NC_003382.1| 7559 3206247594 80 81 gi|18652414|ref|NC_003398.1| 9596 3206255318 80 81 gi|18702122|ref|NC_003403.1| 1347 3206265128 80 81 gi|18702397|ref|NC_003405.1| 1353 3206266591 80 81 gi|19073904|ref|NC_003417.1| 11411 3206268021 80 81 gi|19073908|ref|NC_003418.1| 2741 3206279654 80 81 gi|19387576|ref|NC_003436.1| 28033 3206282509 80 81 gi|19550999|ref|NC_003448.1| 3107 3206310983 80 81 gi|19551002|ref|NC_003449.1| 1421 3206314212 80 81 gi|19744938|ref|NC_003462.1| 9306 3206315723 80 81 gi|19747252|ref|NC_003463.1| 306 3206325219 80 81 gi|19744917|ref|NC_003469.1| 3768 3206325611 80 81 gi|19744927|ref|NC_003473.1| 1075 3206329506 80 81 gi|19744929|ref|NC_003474.1| 1043 3206330674 80 81 gi|19744931|ref|NC_003475.1| 1060 3206331810 80 81 gi|19744932|ref|NC_003476.1| 1089 3206332963 80 81 gi|19744934|ref|NC_003477.1| 1018 3206334145 80 81 gi|19744919|ref|NC_003478.1| 3164 3206335258 80 81 gi|19744936|ref|NC_003479.1| 1111 3206338541 80 81 gi|19744914|ref|NC_003480.1| 2056 3206339740 80 81 gi|19744922|ref|NC_003481.1| 3289 3206341904 80 81 gi|19747285|ref|NC_003482.1| 3524 3206345314 80 81 gi|19749338|ref|NC_003483.1| 7262 3206348963 80 81 gi|19881394|ref|NC_003492.1| 9532 3206356388 80 81 gi|40806838|ref|NC_003493.2| 2561 3206366111 80 81 gi|19881396|ref|NC_003495.1| 3662 3206368782 80 81 gi|19881398|ref|NC_003496.1| 5995 3206372567 80 81 gi|19919889|ref|NC_003498.1| 7932 3206378712 80 81 gi|19919905|ref|NC_003513.1| 1320 3206386831 80 81 gi|19919907|ref|NC_003514.1| 6746 3206388255 80 81 gi|19919915|ref|NC_003516.1| 1774 3206395173 80 81 gi|19919917|ref|NC_003517.1| 1465 3206397057 80 81 gi|19919927|ref|NC_003518.1| 3454 3206398618 80 81 gi|19919930|ref|NC_003519.1| 3005 3206402193 80 81 gi|19919934|ref|NC_003520.1| 5834 3206405313 80 81 gi|20087030|ref|NC_003536.1| 9584 3206411292 80 81 gi|20095239|ref|NC_003538.1| 370 3206421066 80 81 gi|20087053|ref|NC_003539.1| 284 3206421511 80 81 gi|20095240|ref|NC_003540.1| 399 3206421884 80 81 gi|20087039|ref|NC_003541.1| 2774 3206422373 80 81 gi|20087041|ref|NC_003542.1| 2173 3206425267 80 81 gi|20087044|ref|NC_003543.1| 3171 3206427553 80 81 gi|20136756|ref|NC_003553.1| 369 3206430839 80 81 gi|20143439|ref|NC_003555.1| 6277 3206431282 80 81 gi|20143469|ref|NC_003556.1| 2766 3206437714 80 81 gi|20143449|ref|NC_003558.1| 1004 3206440603 80 81 gi|20143451|ref|NC_003559.1| 999 3206441709 80 81 gi|20143453|ref|NC_003560.1| 1003 3206442809 80 81 gi|20143457|ref|NC_003562.1| 992 3206443913 80 81 gi|20143459|ref|NC_003563.1| 1006 3206445006 80 81 gi|20143463|ref|NC_003565.1| 1015 3206446113 80 81 gi|20143465|ref|NC_003566.1| 986 3206447229 80 81 gi|20143467|ref|NC_003567.1| 1007 3206448316 80 81 gi|20143446|ref|NC_003570.1| 2315 3206449408 80 81 gi|20153339|ref|NC_003605.1| 10080 3206451820 80 81 gi|20153400|ref|NC_003609.1| 2757 3206462110 80 81 gi|20153409|ref|NC_003611.1| 256 3206464967 80 81 gi|20153376|ref|NC_003612.1| 363 3206465308 80 81 gi|20153410|ref|NC_003613.1| 370 3206465740 80 81 gi|20153333|ref|NC_003616.1| 4972 3206466204 80 81 gi|20153367|ref|NC_003619.1| 3057 3206471327 80 81 gi|20153370|ref|NC_003620.1| 4801 3206474511 80 81 gi|20153343|ref|NC_003623.1| 3774 3206479452 80 81 gi|20153336|ref|NC_003624.1| 2992 3206483363 80 81 gi|20153415|ref|NC_003625.1| 8776 3206486482 80 81 gi|20162543|ref|NC_003626.1| 11832 3206495443 80 81 gi|20162536|ref|NC_003627.1| 4437 3206507499 80 81 gi|20177429|ref|NC_003628.1| 9871 3206512066 80 81 gi|20177424|ref|NC_003630.1| 6357 3206522133 80 81 gi|20177433|ref|NC_003636.1| 337 3206528644 80 81 gi|20177483|ref|NC_003637.1| 360 3206529055 80 81 gi|20177473|ref|NC_003646.1| 997 3206529502 80 81 gi|20178610|ref|NC_003664.1| 2622 3206530597 80 81 gi|20178616|ref|NC_003665.1| 2573 3206533337 80 81 gi|20198945|ref|NC_003679.1| 12333 3206536016 80 81 gi|20219033|ref|NC_003681.1| 248 3206548574 80 81 gi|20219035|ref|NC_003683.1| 364 3206548896 80 81 gi|20260779|ref|NC_003687.1| 10839 3206549327 80 81 gi|20260786|ref|NC_003688.1| 5669 3206560384 80 81 gi|20279530|ref|NC_003708.1| 2745 3206566212 80 81 gi|20279537|ref|NC_003709.1| 2753 3206569080 80 81 gi|20330558|ref|NC_003714.1| 2948 3206571951 80 81 gi|20330569|ref|NC_003716.1| 4063 3206575019 80 81 gi|20340272|ref|NC_003722.1| 2743 3206579206 80 81 gi|20386771|ref|NC_003728.1| 3572 3206582075 80 81 gi|20386773|ref|NC_003729.1| 4501 3206585783 80 81 gi|20386776|ref|NC_003730.1| 2193 3206590432 80 81 gi|20386779|ref|NC_003731.1| 1900 3206592744 80 81 gi|20386782|ref|NC_003732.1| 1936 3206594759 80 81 gi|20386784|ref|NC_003733.1| 1801 3206596812 80 81 gi|20386786|ref|NC_003734.1| 3812 3206598727 80 81 gi|20386788|ref|NC_003735.1| 3617 3206602678 80 81 gi|20386790|ref|NC_003736.1| 3164 3206606432 80 81 gi|20386792|ref|NC_003737.1| 2645 3206609727 80 81 gi|20386798|ref|NC_003740.1| 2231 3206612489 80 81 gi|20428636|ref|NC_003742.1| 9663 3206614818 80 81 gi|20428539|ref|NC_003744.1| 2758 3206624682 80 81 gi|20428623|ref|NC_003747.1| 4210 3206627544 80 81 gi|20428598|ref|NC_003751.1| 3699 3206631890 80 81 gi|20428583|ref|NC_003753.1| 2157 3206635709 80 81 gi|20428586|ref|NC_003754.1| 3514 3206637966 80 81 gi|20428589|ref|NC_003755.1| 8970 3206641597 80 81 gi|20428578|ref|NC_003756.1| 3890 3206650768 80 81 gi|20428602|ref|NC_003757.1| 1132 3206654790 80 81 gi|20428543|ref|NC_003760.1| 1578 3206656013 80 81 gi|20428545|ref|NC_003761.1| 2218 3206657687 80 81 gi|20428547|ref|NC_003762.1| 2449 3206660009 80 81 gi|20428549|ref|NC_003763.1| 1579 3206662565 80 81 gi|20428551|ref|NC_003764.1| 1397 3206664240 80 81 gi|20428553|ref|NC_003765.1| 1224 3206665731 80 81 gi|20428555|ref|NC_003766.1| 1163 3206667048 80 81 gi|20428557|ref|NC_003767.1| 1036 3206668303 80 81 gi|20428561|ref|NC_003772.1| 3195 3206669428 80 81 gi|20428563|ref|NC_003773.1| 4422 3206672739 80 81 gi|20428565|ref|NC_003774.1| 3512 3206677293 80 81 gi|20429233|ref|NC_003775.1| 1448 3206680937 80 81 gi|20428591|ref|NC_003776.1| 2504 3206682477 80 81 gi|20451031|ref|NC_003777.1| 371 3206685087 80 81 gi|20451006|ref|NC_003781.1| 9650 3206685537 80 81 gi|20451018|ref|NC_003782.1| 9275 3206695372 80 81 gi|20522103|ref|NC_003794.1| 5966 3206704844 80 81 gi|20522156|ref|NC_003798.1| 324 3206710977 80 81 gi|20522113|ref|NC_003799.1| 5865 3206711381 80 81 gi|20522115|ref|NC_003800.1| 3354 3206717395 80 81 gi|20522146|ref|NC_003803.1| 2800 3206720881 80 81 gi|20522117|ref|NC_003805.1| 6791 3206723792 80 81 gi|20522130|ref|NC_003807.1| 1449 3206730758 80 81 gi|20522122|ref|NC_003811.1| 3855 3206732302 80 81 gi|20530234|ref|NC_003817.1| 998 3206736293 80 81 gi|20564145|ref|NC_003820.1| 5845 3206737377 80 81 gi|20564174|ref|NC_003824.1| 4647 3206743371 80 81 gi|20564211|ref|NC_003826.1| 822 3206748166 80 81 gi|20564177|ref|NC_003830.1| 2634 3206749077 80 81 gi|20564183|ref|NC_003831.1| 2579 3206751822 80 81 gi|20564157|ref|NC_003836.1| 2386 3206754510 80 81 gi|20564160|ref|NC_003837.1| 3410 3206757002 80 81 gi|20564164|ref|NC_003842.1| 2926 3206760531 80 81 gi|20564167|ref|NC_003844.1| 3491 3206763570 80 81 gi|20564169|ref|NC_003845.1| 2205 3206767181 80 81 gi|20806077|ref|NC_003848.1| 1118 3206769508 80 81 gi|20806004|ref|NC_003849.1| 6128 3206770718 80 81 gi|20806079|ref|NC_003851.1| 388 3206777017 80 81 gi|20806010|ref|NC_003852.1| 6507 3206777476 80 81 gi|20806070|ref|NC_003853.1| 4253 3206784139 80 81 gi|20806075|ref|NC_003855.1| 393 3206788526 80 81 gi|20806029|ref|NC_003856.1| 2607 3206789010 80 81 gi|20806048|ref|NC_003861.1| 2755 3206791737 80 81 gi|20806055|ref|NC_003862.1| 2711 3206794614 80 81 gi|20806015|ref|NC_003866.1| 2583 3206797438 80 81 gi|20806520|ref|NC_003867.1| 2620 3206800136 80 81 gi|20889381|ref|NC_003877.1| 8747 3206802861 80 81 gi|20889306|ref|NC_003887.1| 2513 3206811797 80 81 gi|21165973|ref|NC_003890.1| 1374 3206814427 80 81 gi|21165975|ref|NC_003891.1| 2749 3206815899 80 81 gi|21218463|ref|NC_003896.1| 2766 3206818753 80 81 gi|21218470|ref|NC_003897.1| 2759 3206821634 80 81 gi|21218477|ref|NC_003898.1| 2739 3206824505 80 81 gi|21218484|ref|NC_003899.1| 11675 3206827360 80 81 gi|146334864|ref|NC_003976.2| 7590 3206839243 80 81 gi|21363123|ref|NC_003985.1| 7117 3206846997 80 81 gi|21389214|ref|NC_003990.1| 7055 3206854280 80 81 gi|21397174|ref|NC_003996.1| 10053 3206861479 80 81 gi|21426912|ref|NC_004007.1| 2799 3206871737 80 81 gi|21449930|ref|NC_004035.1| 9624 3206874639 80 81 gi|21492611|ref|NC_004039.1| 9585 3206884446 80 81 gi|21594412|ref|NC_004044.1| 2734 3206894234 80 81 gi|21553928|ref|NC_004047.1| 9612 3206897084 80 81 gi|21644716|ref|NC_004060.1| 4136 3206906891 80 81 gi|21686950|ref|NC_004063.1| 6318 3206911153 80 81 gi|21911441|ref|NC_004071.1| 2755 3206917626 80 81 gi|22128013|ref|NC_004090.1| 2768 3206920496 80 81 gi|22128020|ref|NC_004091.1| 2749 3206923377 80 81 gi|22123916|ref|NC_004092.1| 741 3206926251 80 81 gi|22123917|ref|NC_004093.1| 1305 3206927065 80 81 gi|22128602|ref|NC_004097.1| 2615 3206928480 80 81 gi|22128608|ref|NC_004098.1| 2571 3206931221 80 81 gi|22128597|ref|NC_004101.1| 2613 3206933907 80 81 gi|22681117|ref|NC_004136.1| 1433 3206936651 80 81 gi|22681120|ref|NC_004137.1| 3103 3206938200 80 81 gi|22681055|ref|NC_004146.1| 3107 3206941415 80 81 gi|22726208|ref|NC_004147.1| 2746 3206944631 80 81 gi|46852132|ref|NC_004148.2| 13335 3206947481 80 81 gi|22788698|ref|NC_004157.1| 1716 3206961054 80 81 gi|22855189|ref|NC_004168.1| 2976 3206962876 80 81 gi|22855191|ref|NC_004176.1| 2735 3206965974 80 81 gi|22855166|ref|NC_004178.1| 3183 3206968835 80 81 gi|22855169|ref|NC_004179.1| 2715 3206972149 80 81 gi|23238115|ref|NC_004198.1| 862 3206974970 80 81 gi|23238117|ref|NC_004200.1| 867 3206975915 80 81 gi|23238119|ref|NC_004201.1| 977 3206976865 80 81 gi|23238121|ref|NC_004202.1| 1101 3206977926 80 81 gi|23238123|ref|NC_004203.1| 1119 3206979112 80 81 gi|23238125|ref|NC_004204.1| 1136 3206980316 80 81 gi|23334585|ref|NC_004291.1| 6680 3206981561 80 81 gi|23334588|ref|NC_004294.1| 3376 3206988419 80 81 gi|23343509|ref|NC_004296.1| 3402 3206991909 80 81 gi|23343512|ref|NC_004297.1| 7279 3206995425 80 81 gi|24323599|ref|NC_004346.1| 4258 3207002875 80 81 gi|24432113|ref|NC_004355.1| 10685 3207007249 80 81 gi|24432115|ref|NC_004356.1| 2750 3207018155 80 81 gi|24462250|ref|NC_004358.1| 327 3207021007 80 81 gi|24817634|ref|NC_004364.1| 1957 3207021425 80 81 gi|25140187|ref|NC_004422.1| 6303 3207023474 80 81 gi|26986743|ref|NC_004440.1| 4633 3207029935 80 81 gi|27057675|ref|NC_004441.1| 7388 3207034695 80 81 gi|27573297|ref|NC_004515.1| 1356 3207042272 80 81 gi|27884824|ref|NC_004544.1| 1339 3207043747 80 81 gi|27905018|ref|NC_004546.1| 1354 3207045196 80 81 gi|28209379|ref|NC_004558.1| 2757 3207046670 80 81 gi|28492878|ref|NC_004573.1| 9899 3207049534 80 81 gi|28867231|ref|NC_004580.1| 2630 3207059638 80 81 gi|28867236|ref|NC_004581.1| 2550 3207062388 80 81 gi|28872846|ref|NC_004582.1| 2744 3207065047 80 81 gi|28872853|ref|NC_004583.1| 2748 3207067904 80 81 gi|28913321|ref|NC_004607.1| 2751 3207070764 80 81 gi|28916651|ref|NC_004608.1| 2745 3207073640 80 81 gi|28916659|ref|NC_004609.1| 2616 3207076510 80 81 gi|28972962|ref|NC_004611.1| 2739 3207079247 80 81 gi|28972971|ref|NC_004612.1| 2696 3207082109 80 81 gi|29126595|ref|NC_004625.1| 2802 3207084937 80 81 gi|29135250|ref|NC_004627.1| 2734 3207087856 80 81 gi|29135243|ref|NC_004628.1| 2754 3207090695 80 81 gi|29135257|ref|NC_004630.1| 2741 3207093582 80 81 gi|29171762|ref|NC_004634.1| 2731 3207096434 80 81 gi|29243853|ref|NC_004639.1| 2661 3207099272 80 81 gi|29243836|ref|NC_004642.1| 2593 3207102044 80 81 gi|29251560|ref|NC_004645.1| 2612 3207104771 80 81 gi|29251565|ref|NC_004646.1| 2578 3207107517 80 81 gi|29294538|ref|NC_004650.1| 2828 3207110204 80 81 gi|29294597|ref|NC_004654.1| 2761 3207113145 80 81 gi|29570853|ref|NC_004656.2| 2763 3207116039 80 81 gi|29337275|ref|NC_004662.1| 2593 3207118915 80 81 gi|29366687|ref|NC_004667.1| 17919 3207121626 80 81 gi|29502183|ref|NC_004674.1| 2799 3207139858 80 81 gi|29565553|ref|NC_004676.1| 2777 3207142781 80 81 gi|29742058|ref|NC_004715.1| 1424 3207145683 80 81 gi|30146796|ref|NC_004751.1| 5723 3207147202 80 81 gi|30146803|ref|NC_004753.1| 2930 3207153083 80 81 gi|30146811|ref|NC_004754.1| 2927 3207156131 80 81 gi|30410839|ref|NC_004782.1| 1515 3207159174 80 81 gi|30840962|ref|NC_004809.1| 9123 3207160802 80 81 gi|31543992|ref|NC_004828.1| 4694 3207170128 80 81 gi|32490548|ref|NC_005028.1| 10155 3207174968 80 81 gi|32490546|ref|NC_005029.1| 10538 3207185322 80 81 gi|32490550|ref|NC_005030.1| 1336 3207196089 80 81 gi|32493271|ref|NC_005032.1| 2755 3207197524 80 81 gi|33300797|ref|NC_005046.1| 1351 3207200415 80 81 gi|33300799|ref|NC_005047.1| 1350 3207201882 80 81 gi|33300801|ref|NC_005048.1| 1387 3207203348 80 81 gi|33300803|ref|NC_005049.1| 1356 3207204853 80 81 gi|33300807|ref|NC_005051.1| 1307 3207206325 80 81 gi|38147300|ref|NC_005166.1| 3949 3207207731 80 81 gi|38147302|ref|NC_005167.1| 3877 3207211812 80 81 gi|38147304|ref|NC_005168.1| 3702 3207215820 80 81 gi|38147306|ref|NC_005169.1| 2320 3207219651 80 81 gi|38147308|ref|NC_005170.1| 2239 3207222082 80 81 gi|38147310|ref|NC_005171.1| 2039 3207224431 80 81 gi|38147312|ref|NC_005172.1| 1414 3207226578 80 81 gi|38147315|ref|NC_005173.1| 1297 3207228092 80 81 gi|38147317|ref|NC_005174.1| 1130 3207229488 80 81 gi|38147319|ref|NC_005175.1| 909 3207230716 80 81 gi|38147321|ref|NC_005176.1| 820 3207231720 80 81 gi|38371718|ref|NC_005223.1| 3682 3207232624 80 81 gi|38505523|ref|NC_005233.1| 1673 3207236426 80 81 gi|38505525|ref|NC_005234.1| 3635 3207238193 80 81 gi|38505527|ref|NC_005235.1| 6532 3207241960 80 81 gi|38505529|ref|NC_005236.1| 1769 3207248658 80 81 gi|38505531|ref|NC_005237.1| 3651 3207250521 80 81 gi|38505533|ref|NC_005238.1| 6530 3207254287 80 81 gi|38639880|ref|NC_005267.1| 3914 3207260979 80 81 gi|39163630|ref|NC_005286.1| 3923 3207265020 80 81 gi|39163614|ref|NC_005288.1| 9644 3207269058 80 81 gi|39163640|ref|NC_005289.1| 5817 3207278902 80 81 gi|39163645|ref|NC_005290.1| 3446 3207284871 80 81 gi|75905471|ref|NC_005300.2| 5366 3207288458 80 81 gi|76364065|ref|NC_005301.3| 12108 3207293989 80 81 gi|39840949|ref|NC_005302.1| 1672 3207306346 80 81 gi|40254027|ref|NC_005304.1| 9591 3207308104 80 81 gi|40804734|ref|NC_005319.1| 2746 3207317896 80 81 gi|40804720|ref|NC_005321.1| 2751 3207320760 80 81 gi|41057577|ref|NC_005330.1| 2675 3207323633 80 81 gi|41057583|ref|NC_005331.1| 2656 3207326429 80 81 gi|41057724|ref|NC_005347.1| 2786 3207329196 80 81 gi|41227706|ref|NC_005359.1| 1012 3207332117 80 81 gi|44965086|ref|NC_005775.1| 4385 3207333217 80 81 gi|45390216|ref|NC_005807.1| 2784 3207337740 80 81 gi|46359753|ref|NC_005844.1| 2742 3207340654 80 81 gi|46395057|ref|NC_005855.1| 2779 3207343518 80 81 gi|46401626|ref|NC_005856.1| 94800 3207346403 80 81 gi|46401737|ref|NC_005859.1| 121750 3207442459 80 81 gi|48696604|ref|NC_005888.1| 3018 3207565809 80 81 gi|48696000|ref|NC_005894.1| 3393 3207568938 80 81 gi|49237297|ref|NC_005946.1| 105903 3207572434 80 81 gi|49246207|ref|NC_005950.1| 3024 3207679737 80 81 gi|50253397|ref|NC_005986.1| 3055 3207682871 80 81 gi|50253401|ref|NC_005988.1| 1151 3207686037 80 81 gi|50253377|ref|NC_006007.1| 1125 3207687279 80 81 gi|50253379|ref|NC_006008.1| 1049 3207688495 80 81 gi|50261344|ref|NC_006009.1| 758 3207689646 80 81 gi|50253381|ref|NC_006010.1| 1638 3207690490 80 81 gi|50253371|ref|NC_006011.1| 1179 3207692236 80 81 gi|50261320|ref|NC_006012.1| 1978 3207693517 80 81 gi|50253383|ref|NC_006013.1| 2953 3207695596 80 81 gi|50253385|ref|NC_006014.1| 2772 3207698662 80 81 gi|50253387|ref|NC_006015.1| 822 3207701546 80 81 gi|50261324|ref|NC_006016.1| 1166 3207702466 80 81 gi|50261326|ref|NC_006017.1| 2792 3207703734 80 81 gi|50261328|ref|NC_006018.1| 1566 3207706648 80 81 gi|50253389|ref|NC_006022.1| 1156 3207708310 80 81 gi|50253391|ref|NC_006023.1| 3944 3207709557 80 81 gi|85857779|ref|NC_006024.2| 1980 3207713627 80 81 gi|50253395|ref|NC_006025.1| 1769 3207715708 80 81 gi|50399852|ref|NC_006056.1| 3820 3207717575 80 81 gi|50399854|ref|NC_006057.1| 7334 3207721518 80 81 gi|51593836|ref|NC_006152.1| 4642 3207729016 80 81 gi|51980902|ref|NC_006267.1| 1346 3207733828 80 81 gi|51950963|ref|NC_006269.1| 7429 3207735272 80 81 gi|52133185|ref|NC_006272.1| 3315 3207742871 80 81 gi|52627072|ref|NC_006318.1| 1869 3207746301 80 81 gi|52673227|ref|NC_006319.1| 6404 3207748267 80 81 gi|56692993|ref|NC_006554.1| 7476 3207754807 80 81 gi|85667876|ref|NC_006577.2| 29926 3207762447 80 81 gi|62327614|ref|NC_006955.1| 7650 3207792822 80 81 gi|62327451|ref|NC_006956.1| 1032 3207800645 80 81 gi|62398870|ref|NC_006965.1| 3842 3207801777 80 81 gi|66478128|ref|NC_007017.1| 3884 3207805746 80 81 gi|66395293|ref|NC_007048.1| 42732 3207809750 80 81 gi|66395370|ref|NC_007049.1| 43883 3207853088 80 81 gi|66394870|ref|NC_007050.1| 44283 3207897591 80 81 gi|66395656|ref|NC_007054.1| 44777 3207942499 80 81 gi|66395885|ref|NC_007057.1| 43576 3207987907 80 81 gi|66396040|ref|NC_007059.1| 43114 3208032099 80 81 gi|66396191|ref|NC_007061.1| 42802 3208075823 80 81 gi|66396267|ref|NC_007062.1| 41690 3208119233 80 81 gi|66396333|ref|NC_007063.1| 43231 3208161516 80 81 gi|66396406|ref|NC_007064.1| 42431 3208205359 80 81 gi|66394670|ref|NC_007065.1| 43440 3208248392 80 81 gi|66396483|ref|NC_007067.1| 1323 3208292475 80 81 gi|71658856|ref|NC_007241.1| 2012 3208293889 80 81 gi|71849435|ref|NC_007289.1| 8478 3208295989 80 81 gi|77020137|ref|NC_007458.1| 37253 3208304641 80 81 gi|80509240|ref|NC_007518.1| 4375 3208342445 80 81 gi|81021557|ref|NC_007544.1| 1270 3208346946 80 81 gi|81002246|ref|NC_007545.1| 1037 3208348303 80 81 gi|81097459|ref|NC_007547.1| 3309 3208349424 80 81 gi|78765373|ref|NC_007548.1| 3538 3208352859 80 81 gi|78766821|ref|NC_007551.1| 2204 3208356526 80 81 gi|81097465|ref|NC_007569.1| 730 3208358830 80 81 gi|81042249|ref|NC_007570.1| 1353 3208359641 80 81 gi|81054207|ref|NC_007571.1| 1063 3208361082 80 81 gi|81097461|ref|NC_007572.1| 2283 3208362230 80 81 gi|78761397|ref|NC_007573.1| 613 3208364614 80 81 gi|81097463|ref|NC_007574.1| 2166 3208365306 80 81 gi|123205971|ref|NC_007580.2| 10940 3208367577 80 81 gi|81083820|ref|NC_007583.1| 3867 3208378728 80 81 gi|85667892|ref|NC_007724.1| 2745 3208382726 80 81 gi|89888602|ref|NC_007816.1| 4433 3208385578 80 81 gi|90403545|ref|NC_007915.1| 7560 3208390158 80 81 gi|92918808|ref|NC_007965.1| 2557 3208397890 80 81 gi|92854072|ref|NC_007966.1| 2492 3208400556 80 81 gi|94536597|ref|NC_007983.1| 4764 3208403153 80 81 gi|95020638|ref|NC_008018.1| 7722 3208408044 80 81 gi|95116884|ref|NC_008026.1| 2778 3208415940 80 81 gi|154551150|ref|NC_008035.3| 126629 3208418839 80 81 gi|98960851|ref|NC_008040.1| 3105 3208547148 80 81 gi|98960854|ref|NC_008041.1| 1434 3208550389 80 81 gi|108518227|ref|NC_008058.1| 2614 3208551924 80 81 gi|108737103|ref|NC_008094.1| 5188 3208554637 80 81 gi|109390410|ref|NC_008190.1| 1791 3208559981 80 81 gi|110084000|ref|NC_008236.1| 2768 3208561881 80 81 gi|113200747|ref|NC_008300.1| 3232 3208564768 80 81 gi|113200755|ref|NC_008301.1| 3477 3208568126 80 81 gi|113200760|ref|NC_008303.1| 4823 3208571732 80 81 gi|113200771|ref|NC_008304.1| 2613 3208576713 80 81 gi|113200776|ref|NC_008305.1| 2602 3208579456 80 81 gi|113478394|ref|NC_008311.1| 7382 3208582158 80 81 gi|115353277|ref|NC_008377.1| 2792 3208589719 80 81 gi|117530755|ref|NC_008559.1| 2728 3208592631 80 81 gi|117530853|ref|NC_008560.1| 1357 3208595492 80 81 gi|117530598|ref|NC_008561.1| 1373 3208596962 80 81 gi|117949597|ref|NC_008579.1| 1346 3208598452 80 81 gi|118430724|ref|NC_008583.1| 43128 3208599891 80 81 gi|118496614|ref|NC_008603.1| 321240 3208643649 80 81 gi|119952254|ref|NC_008718.1| 10510 3208968971 80 81 gi|119952252|ref|NC_008719.1| 10793 3208979673 80 81 gi|124378165|ref|NC_008895.1| 2854 3208990693 80 81 gi|125860391|ref|NC_009010.1| 7261 3208993659 80 81 gi|126030112|ref|NC_009019.1| 30286 3209001082 80 81 gi|126030122|ref|NC_009020.1| 30482 3209031818 80 81 gi|126030132|ref|NC_009021.1| 29114 3209062753 80 81 gi|126010924|ref|NC_009025.1| 9499 3209092299 80 81 gi|134287146|ref|NC_009241.1| 1578 3209102000 80 81 gi|134287148|ref|NC_009242.1| 1198 3209103682 80 81 gi|134302817|ref|NC_009243.1| 3224 3209104978 80 81 gi|134287150|ref|NC_009244.1| 3514 3209108326 80 81 gi|134302819|ref|NC_009245.1| 1171 3209111968 80 81 gi|134287152|ref|NC_009246.1| 1202 3209113237 80 81 gi|134302821|ref|NC_009248.1| 4505 3209114538 80 81 gi|134302823|ref|NC_009249.1| 2622 3209119183 80 81 gi|134302825|ref|NC_009250.1| 1648 3209121921 80 81 gi|134302827|ref|NC_009251.1| 1652 3209123673 80 81 gi|134302829|ref|NC_009252.1| 853 3209125430 80 81 gi|148724425|ref|NC_009527.1| 11966 3209126368 80 81 gi|148724431|ref|NC_009528.1| 11930 3209138558 80 81 gi|148828660|ref|NC_009560.1| 1356 3209150743 80 81 gi|148877238|ref|NC_009571.1| 1346 3209152243 80 81 gi|156603882|ref|NC_009759.1| 8404 3209153679 80 81 gi|157939617|ref|NC_009895.1| 4309 3209162263 80 81 gi|157939567|ref|NC_009896.1| 858 3209166700 80 81 gi|158711659|ref|NC_009944.1| 2498 3209167674 80 81 gi|158711661|ref|NC_009945.1| 2833 3209170309 80 81 gi|158713823|ref|NC_009946.1| 3128 3209173283 80 81 gi|158713825|ref|NC_009947.1| 3399 3209176556 80 81 gi|160707867|ref|NC_009988.1| 27165 3209180067 80 81 gi|160700581|ref|NC_009996.1| 7099 3209207639 80 81 gi|164682561|ref|NC_010247.1| 3341 3209214901 80 81 gi|164607199|ref|NC_010251.1| 7046 3209218358 80 81 gi|164682564|ref|NC_010253.1| 3343 3209225570 80 81 gi|164607205|ref|NC_010255.1| 7102 3209229033 80 81 gi|164607208|ref|NC_010256.1| 3339 3209236302 80 81 gi|167006427|ref|NC_010315.1| 1057 3209239766 80 81 gi|167832339|ref|NC_010346.1| 1749 3209240914 80 81 gi|167832341|ref|NC_010347.1| 1485 3209242762 80 81 gi|167832343|ref|NC_010348.1| 1446 3209244343 80 81 gi|169303562|ref|NC_010417.1| 2845 3209245886 80 81 gi|177807261|ref|NC_010569.1| 1362 3209248890 80 81 gi|182682784|ref|NC_010588.1| 2237 3209250359 80 81 gi|48305606|ref|NC_010624.1| 7458 3209252686 80 81 gi|187476504|ref|NC_010647.1| 2630 3209260327 80 81 gi|187476510|ref|NC_010648.1| 2593 3209263079 80 81 gi|187765475|ref|NC_010661.1| 883 3209265797 80 81 gi|188531117|ref|NC_010700.1| 3316 3209266776 80 81 gi|188531114|ref|NC_010702.1| 7141 3209270208 80 81 gi|188531120|ref|NC_010703.1| 7132 3209277523 80 81 gi|188572144|ref|NC_010705.1| 2315 3209284838 80 81 gi|188572146|ref|NC_010706.1| 2252 3209287265 80 81 gi|188543069|ref|NC_010707.1| 6581 3209289626 80 81 gi|188543102|ref|NC_010708.1| 3621 3209296370 80 81 gi|188543136|ref|NC_010709.1| 6064 3209300112 80 81 gi|188543165|ref|NC_010710.1| 4020 3209306327 80 81 gi|189026268|ref|NC_010757.1| 3410 3209310471 80 81 gi|189026274|ref|NC_010758.1| 3474 3209313997 80 81 gi|189313868|ref|NC_010800.1| 27657 3209317582 80 81 gi|189475229|ref|NC_010818.1| 2737 3209345703 80 81 gi|190336474|ref|NC_010952.1| 2605 3209348596 80 81 gi|190340974|ref|NC_010956.1| 35083 3209351301 80 81 gi|197944766|ref|NC_011202.1| 34794 3209386891 80 81 gi|197944726|ref|NC_011203.1| 35343 3209422188 80 81 gi|212928341|ref|NC_011583.1| 2797 3209458067 80 81 gi|212928348|ref|NC_011584.1| 2776 3209460993 80 81 gi|215481430|ref|NC_011620.1| 6435 3209463867 80 81 gi|30018261|ref|NC_004728.1| 335 3209470453 80 81 gi|40804727|ref|NC_005320.1| 2738 3209470879 80 81 gi|216967209|ref|NC_011639.1| 13196 3209473715 80 81 gi|50428958|ref|NC_006062.1| 8035 3209487148 80 81 gi|18875309|ref|NC_003410.1| 1952 3209495349 80 81 gi|148734472|ref|NC_009540.1| 49902 3209497399 80 81 gi|45686008|ref|NC_005832.1| 106332 3209547997 80 81 gi|149882781|ref|NC_009603.1| 46365 3209655733 80 81 gi|9629925|ref|NC_001871.1| 10479 3209702743 80 81 gi|216906055|ref|NC_011646.1| 34952 3209713446 80 81 gi|217337293|ref|NC_011659.1| 6633 3209748905 80 81 gi|189043050|ref|NC_010746.1| 2269 3209755696 80 81 gi|189043070|ref|NC_010747.1| 2056 3209758069 80 81 gi|189043076|ref|NC_010748.1| 2023 3209760226 80 81 gi|189043046|ref|NC_010749.1| 1539 3209762350 80 81 gi|189043048|ref|NC_010750.1| 1536 3209763984 80 81 gi|189043052|ref|NC_010751.1| 1072 3209765615 80 81 gi|189043072|ref|NC_010752.1| 975 3209766777 80 81 gi|189043074|ref|NC_010753.1| 732 3209767841 80 81 gi|218202718|ref|NC_011702.1| 13696 3209768670 80 81 gi|218148631|ref|NC_011704.1| 7422 3209782624 80 81 gi|218148634|ref|NC_011705.1| 1609 3209790230 80 81 gi|218148636|ref|NC_011706.1| 1581 3209791951 80 81 gi|86355520|ref|NC_007767.1| 132959 3209793637 80 81 gi|18450251|ref|NC_003375.1| 8660 3209928320 80 81 gi|18450244|ref|NC_003376.1| 8405 3209937151 80 81 gi|219552908|ref|NC_011800.1| 8791 3209945739 80 81 gi|219552920|ref|NC_011804.1| 2740 3209954731 80 81 gi|219552941|ref|NC_011807.1| 2307 3209957578 80 81 gi|212681378|ref|NC_011549.1| 26396 3209959991 80 81 gi|212681388|ref|NC_011550.1| 26552 3209986794 80 81 gi|219563197|ref|NC_011801.1| 38934 3210013751 80 81 gi|197914881|ref|NC_011187.1| 3983 3210053249 80 81 gi|22854993|ref|NC_004167.1| 39325 3210057351 80 81 gi|23505445|ref|NC_004313.1| 40149 3210097238 80 81 gi|53869480|ref|NC_005345.2| 49220 3210137959 80 81 gi|62362363|ref|NC_006953.1| 37966 3210187867 80 81 gi|115315572|ref|NC_008370.1| 30510 3210226378 80 81 gi|115315628|ref|NC_008371.1| 27453 3210257341 80 81 gi|168495103|ref|NC_010355.1| 62337 3210285208 80 81 gi|212681398|ref|NC_011552.1| 7988 3210348392 80 81 gi|23334611|ref|NC_004287.1| 5078 3210356552 80 81 gi|29243881|ref|NC_004641.1| 2760 3210361771 80 81 gi|220903269|ref|NC_007485.2| 1346 3210364669 80 81 gi|157939776|ref|NC_009893.1| 1356 3210366152 80 81 gi|221186001|ref|NC_011919.1| 2751 3210367627 80 81 gi|45004654|ref|NC_005778.1| 9711 3210370487 80 81 gi|221048141|ref|NC_011918.1| 9792 3210380395 80 81 gi|221048143|ref|NC_011920.1| 8222 3210390392 80 81 gi|57661615|ref|NC_006630.1| 647 3210398802 80 81 gi|80978942|ref|NC_007537.1| 2299 3210399553 80 81 gi|81355155|ref|NC_007538.1| 2279 3210401976 80 81 gi|90093251|ref|NC_007913.1| 9544 3210404351 80 81 gi|164597960|ref|NC_010246.1| 5193 3210414090 80 81 gi|166197717|ref|NC_010295.1| 5816 3210419411 80 81 gi|166851945|ref|NC_010308.1| 396 3210425365 80 81 gi|9635165|ref|NC_002321.1| 41401 3210425840 80 81 gi|17426228|ref|NC_003288.1| 43081 3210467834 80 81 gi|198449262|ref|NC_011216.1| 37635 3210511526 80 81 gi|58177831|ref|NC_003975.2| 5956 3210549715 80 81 gi|113200750|ref|NC_008306.1| 8918 3210555830 80 81 gi|113200752|ref|NC_008307.1| 4815 3210564944 80 81 gi|222435670|ref|NC_012027.1| 69378 3210569895 80 81 gi|222822598|ref|NC_012041.1| 2757 3210640233 80 81 gi|55770807|ref|NC_006432.1| 18875 3210643089 80 81 gi|222509601|ref|NC_012038.1| 8542 3210662278 80 81 gi|209552419|ref|NC_011373.1| 46872 3210670999 80 81 gi|118430707|ref|NC_008580.1| 8380 3210718522 80 81 gi|9790355|ref|NC_001557.1| 1239 3210727086 80 81 gi|224504350|ref|NC_012127.1| 274 3210728412 80 81 gi|224581828|ref|NC_012118.1| 2764 3210728801 80 81 gi|224581835|ref|NC_012120.1| 2725 3210731695 80 81 gi|190336519|ref|NC_010839.1| 2725 3210734535 80 81 gi|190336522|ref|NC_010840.1| 2756 3210737375 80 81 gi|224808883|ref|NC_012205.1| 2794 3210740254 80 81 gi|224808890|ref|NC_012206.1| 2784 3210743177 80 81 gi|224808897|ref|NC_012134.1| 3350 3210746081 80 81 gi|224808902|ref|NC_012136.1| 2214 3210749558 80 81 gi|224808899|ref|NC_012135.1| 2935 3210751883 80 81 gi|197322510|ref|NC_011181.1| 2660 3210754945 80 81 gi|197322515|ref|NC_011182.1| 2653 3210757729 80 81 gi|27228471|ref|NC_004453.1| 33501 3210760485 80 81 gi|46852402|ref|NC_005869.1| 34094 3210794473 80 81 gi|52801677|ref|NC_006324.1| 34185 3210829061 80 81 gi|29789895|ref|NC_003291.2| 37618 3210863739 80 81 gi|154759349|ref|NC_009731.1| 1346 3210901921 80 81 gi|15320570|ref|NC_003085.1| 49534 3210903352 80 81 gi|30043925|ref|NC_004740.1| 44082 3210953585 80 81 gi|209363552|ref|NC_011344.1| 47342 3210998299 80 81 gi|11497495|ref|NC_001351.1| 302 3211046297 80 81 gi|17223092|ref|NC_003264.1| 292 3211046673 80 81 gi|225626377|ref|NC_012419.1| 21115 3211047043 80 81 gi|225676452|ref|NC_012437.1| 7722 3211068492 80 81 gi|225847629|ref|NC_012481.1| 2597 3211076404 80 81 gi|225847634|ref|NC_012482.1| 2542 3211079127 80 81 gi|225908238|ref|NC_012484.1| 6506 3211081773 80 81 gi|226309581|ref|NC_012519.1| 7781 3211088441 80 81 gi|9626719|ref|NC_001486.1| 3027 3211096390 80 81 gi|226377833|ref|NC_012532.1| 10794 3211099514 80 81 gi|226377835|ref|NC_012533.1| 10723 3211110506 80 81 gi|226377837|ref|NC_012534.1| 10941 3211121425 80 81 gi|226423321|ref|NC_012535.1| 4475 3211132595 80 81 gi|226423323|ref|NC_012536.1| 3522 3211137218 80 81 gi|226423325|ref|NC_012537.1| 3180 3211140877 80 81 gi|226423327|ref|NC_012538.1| 2559 3211144189 80 81 gi|226423329|ref|NC_012539.1| 2521 3211146872 80 81 gi|226423331|ref|NC_012540.1| 1665 3211149517 80 81 gi|226423333|ref|NC_012541.1| 1702 3211151295 80 81 gi|226423335|ref|NC_012542.1| 1434 3211153111 80 81 gi|226423337|ref|NC_012543.1| 1187 3211154655 80 81 gi|226423339|ref|NC_012544.1| 1205 3211155950 80 81 gi|226423341|ref|NC_012545.1| 1234 3211157264 80 81 gi|226423344|ref|NC_012546.1| 1040 3211158607 80 81 gi|66391753|ref|NC_007014.1| 2635 3211159727 80 81 gi|158120308|ref|NC_009903.1| 1354 3211162494 80 81 gi|166162027|ref|NC_010293.1| 2551 3211163952 80 81 gi|166851938|ref|NC_010305.1| 8412 3211166617 80 81 gi|190643450|ref|NC_010985.1| 2149 3211175225 80 81 gi|190643457|ref|NC_010986.1| 1886 3211177491 80 81 gi|194268060|ref|NC_011050.1| 8305 3211179476 80 81 gi|194351529|ref|NC_011063.1| 3100 3211187970 80 81 gi|194351532|ref|NC_011064.1| 1433 3211191194 80 81 gi|226597568|ref|NC_012557.1| 1389 3211192730 80 81 gi|226596529|ref|NC_012558.1| 7048 3211194216 80 81 gi|159192286|ref|NC_001421.2| 14927 3211201427 80 81 gi|38229112|ref|NC_005178.1| 37611 3211216612 80 81 gi|9632466|ref|NC_000924.1| 61670 3211254766 80 81 gi|9629524|ref|NC_001825.1| 19343 3211317278 80 81 gi|119952179|ref|NC_008720.1| 70153 3211336935 80 81 gi|17570786|ref|NC_003298.1| 38208 3211408036 80 81 gi|22855148|ref|NC_004165.1| 18630 3211446789 80 81 gi|9625355|ref|NC_001330.1| 6087 3211465726 80 81 gi|9629143|ref|NC_001741.1| 4877 3211471957 80 81 gi|56718463|ref|NC_003287.2| 6407 3211476967 80 81 gi|9625366|ref|NC_001331.1| 7349 3211483523 80 81 gi|20330564|ref|NC_003715.1| 6374 3211491047 80 81 gi|9627904|ref|NC_001628.1| 3588 3211497569 80 81 gi|113195172|ref|NC_008294.1| 3573 3211501273 80 81 gi|12248100|ref|NC_002649.1| 21129 3211504958 80 81 gi|45597386|ref|NC_005822.1| 32172 3211526424 80 81 gi|14251125|ref|NC_002796.1| 40003 3211559070 80 81 gi|13786531|ref|NC_002747.1| 37667 3211599647 80 81 gi|197322500|ref|NC_009811.2| 137619 3211637853 80 81 gi|23455719|ref|NC_004302.1| 33350 3211777262 80 81 gi|66391255|ref|NC_007021.1| 130706 3211811103 80 81 gi|19548987|ref|NC_003444.1| 37074 3211943515 80 81 gi|9633550|ref|NC_000935.1| 36524 3211981140 80 81 gi|23455823|ref|NC_004306.1| 6340 3212018185 80 81 gi|17975105|ref|NC_003313.1| 33106 3212024670 80 81 gi|38707640|ref|NC_005282.1| 86155 3212058267 80 81 gi|21716072|ref|NC_004066.1| 36798 3212145569 80 81 gi|17736952|ref|NC_003299.1| 7051 3212182909 80 81 gi|194302947|ref|NC_011054.1| 58037 3212190124 80 81 gi|51236723|ref|NC_002371.2| 41724 3212248965 80 81 gi|9635467|ref|NC_002362.1| 8784 3212291277 80 81 gi|9635478|ref|NC_002363.1| 6891 3212300238 80 81 gi|49248521|ref|NC_005948.1| 7965 3212307281 80 81 gi|49248530|ref|NC_005949.1| 7965 3212315411 80 81 gi|22855198|ref|NC_004171.1| 4213 3212323560 80 81 gi|18640469|ref|NC_003390.1| 47872 3212327897 80 81 gi|13095805|ref|NC_002668.1| 36949 3212376443 80 81 gi|28173057|ref|NC_002700.2| 4268 3212413927 80 81 gi|22855209|ref|NC_004173.1| 6751 3212418333 80 81 gi|22855221|ref|NC_004175.1| 4100 3212425253 80 81 gi|17975161|ref|NC_003309.1| 53373 3212429479 80 81 gi|20065797|ref|NC_003525.1| 61765 3212483591 80 81 gi|26114633|ref|NC_003327.2| 6882 3212546193 80 81 gi|108861984|ref|NC_008152.1| 44385 3212553236 80 81 gi|41179361|ref|NC_005357.1| 42493 3212598246 80 81 gi|169936017|ref|NC_010463.1| 33693 3212641347 80 81 gi|31880044|ref|NC_004831.2| 43769 3212675534 80 81 gi|31044225|ref|NC_004813.1| 57930 3212719927 80 81 gi|29565721|ref|NC_004678.1| 16784 3212778657 80 81 gi|29565743|ref|NC_004679.1| 18227 3212795726 80 81 gi|33300811|ref|NC_005045.1| 42519 3212814253 80 81 gi|29565879|ref|NC_004681.1| 75931 3212857376 80 81 gi|29566737|ref|NC_004688.1| 110865 3212934330 80 81 gi|47835019|ref|NC_004333.2| 48247 3213046655 80 81 gi|30387379|ref|NC_004775.1| 39671 3213095584 80 81 gi|46358648|ref|NC_005841.1| 41391 3213135825 80 81 gi|31072008|ref|NC_004814.1| 16687 3213177804 80 81 gi|32128412|ref|NC_004902.1| 44373 3213194770 80 81 gi|62327085|ref|NC_006936.1| 36674 3213239773 80 81 gi|38640276|ref|NC_005258.1| 14935 3213276975 80 81 gi|222824550|ref|NC_012042.1| 5196 3213292163 80 81 gi|47777280|ref|NC_005263.2| 48177 3213297496 80 81 gi|42495057|ref|NC_005361.1| 17385 3213346352 80 81 gi|46402086|ref|NC_005857.1| 51601 3213364026 80 81 gi|157786475|ref|NC_009878.1| 52250 3213416351 80 81 gi|47842848|ref|NC_005342.2| 48024 3213469328 80 81 gi|226938554|ref|NC_012564.1| 5242 3213518019 80 81 gi|48696910|ref|NC_005882.1| 36748 3213523400 80 81 gi|48697190|ref|NC_005887.1| 42415 3213560682 80 81 gi|48697258|ref|NC_005893.1| 39166 3213603702 80 81 gi|72257064|ref|NC_005886.2| 47399 3213643432 80 81 gi|66394949|ref|NC_007066.1| 138715 3213691495 80 81 gi|52221121|ref|NC_006294.1| 7107 3213832013 80 81 gi|62327519|ref|NC_006945.1| 14844 3213839278 80 81 gi|66395187|ref|NC_007046.1| 18199 3213854379 80 81 gi|84662593|ref|NC_007709.1| 43785 3213872875 80 81 gi|176120924|ref|NC_001417.2| 3569 3213917281 80 81 gi|9626425|ref|NC_001426.1| 3466 3213920965 80 81 gi|23455713|ref|NC_004301.1| 4276 3213924546 80 81 gi|151266287|ref|NC_009643.1| 17171 3213928947 80 81 gi|109302896|ref|NC_008193.1| 30505 3213946404 80 81 gi|77118167|ref|NC_007456.1| 39704 3213977363 80 81 gi|83571714|ref|NC_007637.1| 45251 3214017636 80 81 gi|30089861|ref|NC_004746.1| 36596 3214063523 80 81 gi|85701379|ref|NC_007734.1| 40867 3214100645 80 81 gi|119637746|ref|NC_008694.1| 38564 3214142093 80 81 gi|89885981|ref|NC_007902.1| 52162 3214181208 80 81 gi|109302753|ref|NC_008194.1| 74483 3214234095 80 81 gi|109392186|ref|NC_008196.1| 56852 3214309583 80 81 gi|109522776|ref|NC_008198.1| 64494 3214367219 80 81 gi|109522567|ref|NC_008200.1| 64787 3214432593 80 81 gi|109522084|ref|NC_008205.1| 56692 3214498262 80 81 gi|9626372|ref|NC_001422.1| 5386 3214555738 80 81 gi|176120944|ref|NC_001420.2| 5577 3214561264 80 81 gi|116221992|ref|NC_008464.1| 60238 3214566984 80 81 gi|118430711|ref|NC_008575.1| 6662 3214628044 80 81 gi|158345023|ref|NC_009935.1| 43200 3214634862 80 81 gi|157311004|ref|NC_009817.1| 79232 3214678673 80 81 gi|119953625|ref|NC_008717.1| 36415 3214758967 80 81 gi|157834972|ref|NC_009818.1| 36409 3214795909 80 81 gi|194172859|ref|NC_011041.1| 137947 3214832844 80 81 gi|157311135|ref|NC_009819.1| 40539 3214972587 80 81 gi|125999960|ref|NC_009014.1| 45445 3215013712 80 81 gi|148724443|ref|NC_009531.1| 46214 3215059790 80 81 gi|157311189|ref|NC_009820.1| 58692 3215106657 80 81 gi|149882900|ref|NC_009604.1| 47382 3215166158 80 81 gi|157265294|ref|NC_009803.1| 84201 3215214202 80 81 gi|157265412|ref|NC_009804.1| 83319 3215299525 80 81 gi|148727181|ref|NC_009543.1| 44520 3215383959 80 81 gi|157738587|ref|NC_009875.1| 17938 3215429111 80 81 gi|195546641|ref|NC_011105.1| 42954 3215447344 80 81 gi|89888652|ref|NC_007821.1| 6068 3215490908 80 81 gi|89888094|ref|NC_007856.1| 5486 3215497125 80 81 gi|165970234|ref|NC_010275.1| 33134 3215502747 80 81 gi|195546701|ref|NC_011107.1| 42961 3215536366 80 81 gi|167832345|ref|NC_010342.1| 39245 3215579938 80 81 gi|168983473|ref|NC_010363.1| 18762 3215619750 80 81 gi|89888607|ref|NC_007817.1| 5486 3215638834 80 81 gi|189043152|ref|NC_010763.1| 64511 3215644465 80 81 gi|189427193|ref|NC_010807.1| 38815 3215709858 80 81 gi|194100252|ref|NC_011040.1| 39816 3215749233 80 81 gi|194100305|ref|NC_011042.1| 39252 3215789623 80 81 gi|194100359|ref|NC_011045.1| 38841 3215829439 80 81 gi|192824086|ref|NC_011021.1| 51478 3215868842 80 81 gi|194303053|ref|NC_011056.1| 75811 3215921039 80 81 gi|194303296|ref|NC_011055.1| 76312 3215997872 80 81 gi|62362154|ref|NC_006946.1| 7494 3216075226 80 81 gi|40807285|ref|NC_001978.2| 41491 3216082887 80 81 gi|9626938|ref|NC_001497.1| 8024 3216124968 80 81 gi|9627507|ref|NC_001609.1| 11624 3216133163 80 81 gi|9628600|ref|NC_001697.1| 32355 3216145001 80 81 gi|111146921|ref|NC_004166.2| 44010 3216177829 80 81 gi|9626078|ref|NC_001358.1| 5176 3216222450 80 81 gi|9626669|ref|NC_001467.1| 2779 3216227774 80 81 gi|9626670|ref|NC_001468.1| 2724 3216230671 80 81 gi|9626986|ref|NC_001507.1| 2588 3216233511 80 81 gi|9626988|ref|NC_001508.1| 2508 3216236213 80 81 gi|9626213|ref|NC_001412.1| 2994 3216238841 80 81 gi|9626133|ref|NC_001396.1| 7308 3216241942 80 81 gi|9629246|ref|NC_001786.1| 11488 3216249408 80 81 gi|9626535|ref|NC_001451.1| 27608 3216261120 80 81 gi|9629812|ref|NC_001846.1| 31357 3216289154 80 81 gi|19525721|ref|NC_003443.1| 15646 3216320978 80 81 gi|10937870|ref|NC_001796.2| 15462 3216336895 80 81 gi|9626103|ref|NC_001364.1| 13246 3216352616 80 81 gi|9627001|ref|NC_001511.1| 9256 3216366091 80 81 gi|9628880|ref|NC_001722.1| 10359 3216375540 80 81 gi|9627204|ref|NC_001549.1| 9623 3216386105 80 81 gi|9626962|ref|NC_001502.1| 5833 3216395924 80 81 gi|9626955|ref|NC_001500.1| 6296 3216401903 80 81 gi|9626984|ref|NC_001506.1| 3811 3216408350 80 81 gi|30146774|ref|NC_004750.1| 5677 3216412288 80 81 gi|9629178|ref|NC_001753.1| 7015 3216418109 80 81 gi|9626125|ref|NC_001367.1| 6395 3216425279 80 81 gi|20087032|ref|NC_003544.1| 3732 3216431836 80 81 gi|20087033|ref|NC_003545.1| 5957 3216435697 80 81 gi|20564162|ref|NC_003838.1| 3074 3216441805 80 81 gi|9633000|ref|NC_000896.1| 43785 3216444994 80 81 gi|13277517|ref|NC_001653.2| 1682 3216489396 80 81 gi|9626429|ref|NC_001427.1| 2319 3216491167 80 81 gi|20087046|ref|NC_003535.1| 4029 3216493582 80 81 gi|9630386|ref|NC_001900.1| 49136 3216497732 80 81 gi|19919909|ref|NC_003515.1| 4609 3216547570 80 81 gi|19919919|ref|NC_003499.1| 8512 3216552307 80 81 gi|30018258|ref|NC_004729.1| 5841 3216561007 80 81 gi|9632333|ref|NC_001983.1| 2723 3216567005 80 81 gi|9632332|ref|NC_001984.1| 2675 3216569846 80 81 gi|29742044|ref|NC_004713.1| 5135 3216572614 80 81 gi|9695413|ref|NC_001824.1| 102653 3216577889 80 81 gi|20376947|ref|NC_003723.1| 6043 3216681902 80 81 gi|20373119|ref|NC_003724.1| 3134 3216688097 80 81 gi|38488690|ref|NC_005228.1| 3694 3216691341 80 81 gi|23334606|ref|NC_004286.1| 6039 3216695160 80 81 gi|13242472|ref|NC_002687.1| 335593 3216701353 80 81 gi|15426259|ref|NC_003092.1| 15717 3217041219 80 81 gi|38349471|ref|NC_002618.2| 4082 3217057203 80 81 gi|9632937|ref|NC_000872.1| 40739 3217061409 80 81 gi|9635576|ref|NC_002470.1| 7003 3217102722 80 81 gi|9632893|ref|NC_000871.1| 37370 3217109885 80 81 gi|9630525|ref|NC_001902.1| 26111 3217147798 80 81 gi|9634983|ref|NC_002214.1| 39807 3217174308 80 81 gi|29165635|ref|NC_002072.2| 34815 3217214684 80 81 gi|9632287|ref|NC_001998.1| 4529 3217250005 80 81 gi|9633605|ref|NC_000936.1| 5454 3217254671 80 81 gi|9635147|ref|NC_002251.1| 13222 3217260269 80 81 gi|9635440|ref|NC_002351.1| 7025 3217273741 80 81 gi|9634948|ref|NC_002194.1| 4563 3217280921 80 81 gi|21427641|ref|NC_004015.1| 3418 3217285626 80 81 gi|9634626|ref|NC_002185.1| 35466 3217289158 80 81 gi|9845468|ref|NC_002513.1| 33034 3217325133 80 81 gi|9635677|ref|NC_002486.1| 45636 3217358658 80 81 gi|6446580|ref|NC_000942.1| 30944 3217404931 80 81 gi|163869641|ref|NC_004037.2| 29576 3217436329 80 81 gi|13487858|ref|NC_002702.1| 32621 3217466343 80 81 gi|47073736|ref|NC_002661.2| 42942 3217499447 80 81 gi|30027774|ref|NC_004735.1| 129908 3217542998 80 81 gi|13095658|ref|NC_002670.1| 14510 3217674605 80 81 gi|13095862|ref|NC_002669.1| 14957 3217689372 80 81 gi|19881389|ref|NC_003491.1| 5722 3217704589 80 81 gi|17981815|ref|NC_003315.1| 31508 3217710452 80 81 gi|33770508|ref|NC_005069.1| 46339 3217742421 80 81 gi|23334625|ref|NC_004290.1| 5234 3217789416 80 81 gi|9628835|ref|NC_001720.1| 43804 3217794780 80 81 gi|9633173|ref|NC_000899.1| 45063 3217839196 80 81 gi|52627075|ref|NC_006320.1| 4215 3217884896 80 81 gi|28867239|ref|NC_004579.1| 6610 3217889227 80 81 gi|9626131|ref|NC_001369.1| 2589 3217896008 80 81 gi|29337256|ref|NC_004657.1| 2605 3217898721 80 81 gi|29337258|ref|NC_004658.1| 2587 3217901450 80 81 gi|31543997|ref|NC_004827.1| 43033 3217904139 80 81 gi|9625519|ref|NC_001338.1| 15465 3217947775 80 81 gi|45429963|ref|NC_005808.1| 42663 3217963504 80 81 gi|45429984|ref|NC_005809.1| 42638 3218006771 80 81 gi|9627732|ref|NC_001618.1| 3166 3218050006 80 81 gi|227122414|ref|NC_012584.1| 30570 3218053280 80 81 gi|228861590|ref|NC_012639.1| 141291 3218084328 80 81 gi|9633494|ref|NC_000929.1| 36717 3218227456 80 81 gi|9626553|ref|NC_001454.1| 34214 3218264697 80 81 gi|9629189|ref|NC_001780.1| 3879 3218299406 80 81 gi|9629653|ref|NC_001835.1| 28451 3218303402 80 81 gi|9630464|ref|NC_001901.1| 46375 3218332280 80 81 gi|9630663|ref|NC_001930.1| 2576 3218379311 80 81 gi|9630666|ref|NC_001931.1| 2615 3218381996 80 81 gi|9634116|ref|NC_002164.1| 6099 3218384714 80 81 gi|9634119|ref|NC_002166.1| 40751 3218390963 80 81 gi|9634155|ref|NC_002167.1| 39732 3218432296 80 81 gi|9635449|ref|NC_002357.1| 3232 3218472601 80 81 gi|9635453|ref|NC_002358.1| 7111 3218475950 80 81 gi|9635572|ref|NC_002469.1| 6440 3218483213 80 81 gi|9635790|ref|NC_002500.1| 8018 3218489805 80 81 gi|9910036|ref|NC_002515.1| 11660 3218497990 80 81 gi|9964607|ref|NC_002519.1| 39898 3218509865 80 81 gi|10086561|ref|NC_002526.1| 14900 3218550338 80 81 gi|11072108|ref|NC_002600.1| 9709 3218565492 80 81 gi|11462417|ref|NC_002615.1| 7442 3218575405 80 81 gi|12085135|ref|NC_002643.1| 4594 3218583015 80 81 gi|13559823|ref|NC_002730.1| 38297 3218587741 80 81 gi|14329174|ref|NC_002802.1| 308 3218626598 80 81 gi|17017954|ref|NC_003219.1| 1911 3218627034 80 81 gi|17017957|ref|NC_003220.1| 5699 3218629093 80 81 gi|51527264|ref|NC_003266.2| 35994 3218634930 80 81 gi|18071213|ref|NC_003324.1| 57416 3218671446 80 81 gi|18138257|ref|NC_003349.1| 130869 3218729648 80 81 gi|19352423|ref|NC_003433.1| 11900 3218862223 80 81 gi|19549041|ref|NC_003445.1| 7036 3218874349 80 81 gi|19549043|ref|NC_003446.1| 5619 3218881550 80 81 gi|19718349|ref|NC_003460.1| 5804 3218887314 80 81 gi|19718363|ref|NC_003461.1| 15600 3218893266 80 81 gi|20087054|ref|NC_003537.1| 10038 3218909129 80 81 gi|20153349|ref|NC_003617.1| 8118 3218919379 80 81 gi|20153353|ref|NC_003618.1| 7193 3218927685 80 81 gi|20177455|ref|NC_003635.1| 10600 3218935027 80 81 gi|20177484|ref|NC_003649.1| 3383 3218945843 80 81 gi|20177486|ref|NC_003650.1| 2435 3218949352 80 81 gi|20177488|ref|NC_003651.1| 2659 3218951901 80 81 gi|20530224|ref|NC_003812.1| 1005 3218954679 80 81 gi|21218488|ref|NC_003900.1| 11824 3218955755 80 81 gi|21431571|ref|NC_004010.1| 9848 3218967789 80 81 gi|21427654|ref|NC_004016.1| 7550 3218977831 80 81 gi|21427658|ref|NC_004018.1| 1782 3218985565 80 81 gi|21427660|ref|NC_004019.1| 1586 3218987459 80 81 gi|21427662|ref|NC_004020.1| 1186 3218989154 80 81 gi|21557564|ref|NC_004051.1| 2514 3218990435 80 81 gi|22550315|ref|NC_004119.1| 10690 3218993067 80 81 gi|22550317|ref|NC_004123.1| 9407 3219003979 80 81 gi|22855204|ref|NC_004172.1| 6458 3219013585 80 81 gi|23334621|ref|NC_004288.1| 5002 3219020201 80 81 gi|23455848|ref|NC_004303.1| 43075 3219025339 80 81 gi|24371534|ref|NC_004348.1| 40679 3219069027 80 81 gi|24817630|ref|NC_004362.1| 3332 3219110299 80 81 gi|24817632|ref|NC_004363.1| 2591 3219113757 80 81 gi|29243846|ref|NC_004637.1| 2668 3219116446 80 81 gi|29366701|ref|NC_004665.1| 37359 3219119218 80 81 gi|29502195|ref|NC_004675.1| 2766 3219157116 80 81 gi|29565766|ref|NC_004680.1| 59471 3219159989 80 81 gi|29566193|ref|NC_004684.1| 67480 3219220280 80 81 gi|29566284|ref|NC_004685.1| 69777 3219288679 80 81 gi|29566407|ref|NC_004686.1| 56276 3219359402 80 81 gi|29566975|ref|NC_004689.1| 70797 3219416458 80 81 gi|30039743|ref|NC_004736.1| 7542 3219488207 80 81 gi|57977268|ref|NC_004778.3| 129593 3219495921 80 81 gi|32140173|ref|NC_004904.1| 1342 3219627219 80 81 gi|32469420|ref|NC_004996.1| 34692 3219628649 80 81 gi|37651479|ref|NC_005136.1| 9346 3219663848 80 81 gi|38638403|ref|NC_005259.1| 68999 3219673382 80 81 gi|38639801|ref|NC_005265.1| 14796 3219743310 80 81 gi|41057278|ref|NC_005344.1| 39043 3219758363 80 81 gi|41179287|ref|NC_005354.1| 38384 3219797971 80 81 gi|41179217|ref|NC_005355.1| 40190 3219836911 80 81 gi|41189515|ref|NC_005356.1| 41708 3219877675 80 81 gi|45686283|ref|NC_005833.1| 48836 3219919976 80 81 gi|47177085|ref|NC_005874.1| 1354 3219969513 80 81 gi|48696391|ref|NC_005880.1| 127395 3219970954 80 81 gi|48843719|ref|NC_005902.1| 186250 3220100032 80 81 gi|48843530|ref|NC_005903.1| 9540 3220288681 80 81 gi|48843532|ref|NC_005904.1| 9463 3220298409 80 81 gi|55733720|ref|NC_006444.1| 1781 3220308080 80 81 gi|55733722|ref|NC_006445.1| 1586 3220309973 80 81 gi|55733724|ref|NC_006446.1| 1186 3220311668 80 81 gi|56692908|ref|NC_006552.1| 65195 3220312939 80 81 gi|62362213|ref|NC_006949.1| 46900 3220379022 80 81 gi|62327464|ref|NC_006957.1| 1209 3220426587 80 81 gi|65372047|ref|NC_007002.1| 7263 3220427882 80 81 gi|74229684|ref|NC_007383.1| 134394 3220435304 80 81 gi|89152530|ref|NC_007805.1| 39199 3220571447 80 81 gi|89152531|ref|NC_007806.1| 42999 3220611204 80 81 gi|89152532|ref|NC_007807.1| 43365 3220654811 80 81 gi|89152533|ref|NC_007808.1| 49639 3220698789 80 81 gi|89155211|ref|NC_007809.1| 59446 3220749117 80 81 gi|89158250|ref|NC_007810.1| 66015 3220809375 80 81 gi|158079296|ref|NC_009904.1| 142072 3220876292 80 81 gi|169259704|ref|NC_010411.1| 7378 3221020211 80 81 gi|188543025|ref|NC_010711.1| 3674 3221027764 80 81 gi|188543030|ref|NC_010712.1| 2305 3221031566 80 81 gi|42794082|ref|NC_005636.1| 2677 3221033983 80 81 gi|46393304|ref|NC_005850.1| 2560 3221036777 80 81 gi|46393310|ref|NC_005851.1| 2525 3221039452 80 81 gi|46393313|ref|NC_005852.1| 2575 3221042099 80 81 gi|46393319|ref|NC_005853.1| 2543 3221044797 80 81 gi|48843534|ref|NC_005905.1| 86462 3221047443 80 81 gi|50261346|ref|NC_005985.1| 3904 3221135074 80 81 gi|229604969|ref|NC_012663.1| 60074 3221139098 80 81 gi|229904919|ref|NC_012671.1| 10865 3221199988 80 81 gi|233800859|ref|NC_012666.1| 1337 3221211082 80 81 gi|237642069|ref|NC_012685.1| 5759 3221212509 80 81 gi|228861209|ref|NC_012637.1| 105890 3221218419 80 81 gi|237781155|ref|NC_012702.1| 11752 3221325694 80 81 gi|237781162|ref|NC_012703.1| 11631 3221337657 80 81 gi|28876145|ref|NC_004584.1| 39538 3221349510 80 81 gi|28876202|ref|NC_004585.1| 41072 3221389619 80 81 gi|28876316|ref|NC_004587.1| 41796 3221431281 80 81 gi|28876381|ref|NC_004588.1| 38206 3221473676 80 81 gi|28876437|ref|NC_004589.1| 40014 3221512436 80 81 gi|31415740|ref|NC_004820.1| 61395 3221553025 80 81 gi|31415816|ref|NC_004821.1| 38472 3221615262 80 81 gi|47566140|ref|NC_008355.1| 4554 3221654280 80 81 gi|209972829|ref|NC_011421.1| 132562 3221658959 80 81 gi|9629160|ref|NC_001747.1| 5987 3221793247 80 81 gi|239828756|ref|NC_012798.1| 6580 3221799376 80 81 gi|239828780|ref|NC_012800.1| 7632 3221806106 80 81 gi|239830818|ref|NC_012801.1| 7205 3221813901 80 81 gi|239830831|ref|NC_012802.1| 7215 3221821264 80 81 gi|22129792|ref|NC_004102.1| 9646 3221828646 80 81 gi|9626665|ref|NC_001466.1| 2750 3221838488 80 81 gi|9626701|ref|NC_001482.1| 9474 3221841349 80 81 gi|81022919|ref|NC_007543.1| 1350 3221851013 80 81 gi|80984706|ref|NC_007546.1| 2736 3221852451 80 81 gi|166159177|ref|NC_008604.2| 10837 3221855287 80 81 gi|254729452|ref|NC_013017.1| 2386 3221866340 80 81 gi|254729459|ref|NC_013019.1| 2774 3221868842 80 81 gi|21426900|ref|NC_004005.1| 2781 3221871728 80 81 gi|22128594|ref|NC_004096.1| 2595 3221874626 80 81 gi|32493264|ref|NC_005031.1| 2752 3221877329 80 81 gi|255612555|ref|NC_006937.2| 6621 3221880203 80 81 gi|113195403|ref|NC_008293.1| 135454 3221886997 80 81 gi|124300942|ref|NC_008376.2| 34683 3222024217 80 81 gi|255614072|ref|NC_009026.2| 10815 3222059399 80 81 gi|255961478|ref|NC_013094.1| 1003 3222070435 80 81 gi|255961480|ref|NC_013095.1| 992 3222071536 80 81 gi|255961482|ref|NC_013096.1| 994 3222072626 80 81 gi|255961484|ref|NC_013097.1| 980 3222073718 80 81 gi|255961486|ref|NC_013098.1| 981 3222074796 80 81 gi|255961488|ref|NC_013099.1| 986 3222075876 80 81 gi|255961490|ref|NC_013100.1| 984 3222076961 80 81 gi|255961492|ref|NC_013101.1| 987 3222078044 80 81 gi|255987648|ref|NC_013109.1| 2390 3222079137 80 81 gi|255987650|ref|NC_013110.1| 2344 3222081650 80 81 gi|256535775|ref|NC_013135.1| 12390 3222084113 80 81 gi|224923880|ref|NC_012210.1| 8604 3222096735 80 81 gi|224923893|ref|NC_012212.1| 9467 3222105547 80 81 gi|226377830|ref|NC_012531.1| 10411 3222115208 80 81 gi|219504472|ref|NC_011809.1| 2916 3222125822 80 81 gi|219552915|ref|NC_011803.1| 6449 3222128848 80 81 gi|219504396|ref|NC_011808.1| 3431 3222135450 80 81 gi|56158826|ref|AC_000001.1| 33034 3222138990 80 81 gi|56158801|ref|AC_000002.1| 34446 3222172504 80 81 gi|56158879|ref|AC_000004.1| 33213 3222207446 80 81 gi|56160436|ref|AC_000005.1| 34125 3222241124 80 81 gi|56160566|ref|AC_000009.1| 32621 3222275744 80 81 gi|56160673|ref|AC_000012.1| 30944 3222308840 80 81 gi|56160703|ref|AC_000013.1| 45063 3222340236 80 81 gi|56160738|ref|AC_000014.1| 43804 3222385928 80 81 gi|23455771|ref|NC_004305.1| 42259 3222430354 80 81 gi|227811306|ref|NC_004462.2| 19604 3222473209 80 81 gi|226823166|ref|NC_012561.1| 11526 3222493125 80 81 gi|255357299|ref|NC_013060.1| 6586 3222504859 80 81 gi|261041169|ref|NC_013266.1| 3249 3222511611 80 81 gi|261041428|ref|NC_013267.1| 2862 3222514984 80 81 gi|261041621|ref|NC_013268.1| 2424 3222517965 80 81 gi|259120449|ref|NC_013261.1| 9502 3222520494 80 81 gi|32453808|ref|NC_004324.3| 8253 3222530196 80 81 gi|85718592|ref|NC_007733.1| 3964 3222538629 80 81 gi|113195533|ref|NC_008292.1| 8386 3222542720 80 81 gi|163932203|ref|NC_010178.1| 13071 3222551302 80 81 gi|16507269|ref|NC_003200.1| 1351 3222564627 80 81 gi|262396906|ref|NC_013459.1| 1433 3222566088 80 81 gi|262396903|ref|NC_013458.1| 3101 3222567632 80 81 gi|115298502|ref|NC_008361.1| 156922 3222570855 80 81 gi|216905810|ref|NC_011643.1| 4009 3222729822 80 81 gi|9626953|ref|NC_001499.1| 5894 3222733958 80 81 gi|267857692|ref|NC_005895.2| 8066 3222740019 80 81 gi|268529021|ref|NC_005209.2| 8006 3222748266 80 81 gi|268529022|ref|NC_005210.2| 7903 3222756453 80 81 gi|211998869|ref|NC_011525.1| 7890 3222764523 80 81 gi|197322349|ref|NC_011183.1| 154641 3222772585 80 81 gi|190643480|ref|NC_010984.1| 3567 3222929257 80 81 gi|190643486|ref|NC_010989.1| 2794 3222932967 80 81 gi|190643491|ref|NC_010990.1| 2576 3222935894 80 81 gi|190643496|ref|NC_010991.1| 1420 3222938600 80 81 gi|197914886|ref|NC_011188.1| 2959 3222940125 80 81 gi|19881405|ref|NC_003494.1| 111362 3222943212 80 81 gi|9627007|ref|NC_001512.1| 11835 3223056033 80 81 gi|9629367|ref|NC_001803.1| 15191 3223068090 80 81 gi|9631267|ref|NC_001989.1| 15140 3223083552 80 81 gi|21557572|ref|NC_004048.1| 497 3223098974 80 81 gi|50234098|ref|NC_005974.1| 13782 3223099549 80 81 gi|51518815|ref|NC_006144.1| 34246 3223113571 80 81 gi|55831382|ref|NC_006460.1| 615 3223148331 80 81 gi|62327479|ref|NC_006942.1| 12020 3223149027 80 81 gi|85677467|ref|NC_007729.1| 4094 3223161273 80 81 gi|18138397|ref|NC_003345.1| 77670 3223165487 80 81 gi|157324960|ref|NC_009810.1| 38867 3223244196 80 81 gi|157325217|ref|NC_009812.1| 42653 3223283617 80 81 gi|157325284|ref|NC_009813.1| 48172 3223326872 80 81 gi|157325365|ref|NC_009814.1| 35822 3223375714 80 81 gi|157325422|ref|NC_009815.1| 38124 3223412052 80 81 gi|189043087|ref|NC_010762.1| 41901 3223450725 80 81 gi|207270774|ref|NC_011308.1| 35638 3223493217 80 81 gi|226377630|ref|NC_012530.1| 142111 3223529377 80 81 gi|254729462|ref|NC_013021.1| 107530 3223673329 80 81 gi|9626714|ref|NC_001484.1| 3311 3223782282 80 81 gi|9626735|ref|NC_001490.1| 7212 3223785701 80 81 gi|9626818|ref|NC_001492.1| 12734 3223793076 80 81 gi|9626914|ref|NC_001494.1| 7462 3223806044 80 81 gi|9627186|ref|NC_001539.1| 5323 3223813664 80 81 gi|9627190|ref|NC_001540.1| 5517 3223819118 80 81 gi|9790297|ref|NC_001544.1| 11657 3223824767 80 81 gi|9790313|ref|NC_001547.1| 11703 3223836630 80 81 gi|9790328|ref|NC_001554.1| 4776 3223848551 80 81 gi|9790346|ref|NC_001556.1| 6355 3223853465 80 81 gi|9627957|ref|NC_001634.1| 8174 3223859976 80 81 gi|9627980|ref|NC_001641.1| 4615 3223868340 80 81 gi|9628082|ref|NC_001652.1| 11131 3223873099 80 81 gi|9628113|ref|NC_001659.1| 170101 3223884442 80 81 gi|19909349|ref|NC_003497.1| 836 3224056751 80 81 gi|20428567|ref|NC_003745.1| 4579 3224057685 80 81 gi|21557557|ref|NC_004045.1| 2843 3224062411 80 81 gi|21556070|ref|NC_004046.1| 2728 3224065380 80 81 gi|38371710|ref|NC_005218.1| 1696 3224068204 80 81 gi|55733698|ref|NC_006447.1| 3419 3224069984 80 81 gi|56403984|ref|NC_006506.1| 1574 3224073507 80 81 gi|22256030|ref|NC_004107.1| 3323 3224075174 80 81 gi|9628278|ref|NC_001662.1| 4801 3224078613 80 81 gi|9628932|ref|NC_001731.1| 190289 3224083559 80 81 gi|9629210|ref|NC_001782.1| 1801 3224276314 80 81 gi|38371727|ref|NC_005217.1| 6562 3224278202 80 81 gi|52627079|ref|NC_006317.1| 3366 3224284906 80 81 gi|9626154|ref|NC_001403.1| 4788 3224288384 80 81 gi|9629198|ref|NC_001781.1| 15225 3224293312 80 81 gi|9629644|ref|NC_001831.1| 12002 3224308793 80 81 gi|9629900|ref|NC_001866.1| 3392 3224321021 80 81 gi|9629930|ref|NC_001873.1| 6311 3224324529 80 81 gi|9629935|ref|NC_001874.1| 10011 3224330990 80 81 gi|9630645|ref|NC_001921.1| 15690 3224341196 80 81 gi|20451015|ref|NC_003780.1| 10035 3224357156 80 81 gi|20889313|ref|NC_003871.1| 2835 3224367406 80 81 gi|9633477|ref|NC_000903.1| 11550 3224370345 80 81 gi|9633619|ref|NC_000940.1| 7320 3224382112 80 81 gi|9633630|ref|NC_000960.1| 9799 3224389596 80 81 gi|9630960|ref|NC_001963.1| 5163 3224399596 80 81 gi|9630963|ref|NC_001964.1| 5202 3224404902 80 81 gi|9635564|ref|NC_002468.1| 8432 3224410251 80 81 gi|13249663|ref|NC_002691.1| 1336 3224418856 80 81 gi|19919963|ref|NC_003507.1| 1720 3224420290 80 81 gi|19919965|ref|NC_003508.1| 1203 3224422113 80 81 gi|20260781|ref|NC_003690.1| 10943 3224423392 80 81 gi|20260793|ref|NC_003691.1| 3011 3224434551 80 81 gi|20260796|ref|NC_003692.1| 1311 3224437679 80 81 gi|20889342|ref|NC_003872.1| 1432 3224439097 80 81 gi|20889374|ref|NC_003874.1| 3157 3224440627 80 81 gi|21321708|ref|NC_003924.1| 9185 3224443895 80 81 gi|21557568|ref|NC_004050.1| 2891 3224453275 80 81 gi|55733705|ref|NC_006437.1| 3616 3224456275 80 81 gi|68532373|ref|NC_007154.1| 3820 3224460013 80 81 gi|10445391|ref|NC_002554.1| 8115 3224463966 80 81 gi|11068003|ref|NC_002593.1| 100999 3224472263 80 81 gi|11125722|ref|NC_002604.1| 6827 3224574589 80 81 gi|11545722|ref|NC_002617.1| 15186 3224581576 80 81 gi|12018227|ref|NC_002633.1| 6562 3224597034 80 81 gi|13487887|ref|NC_002701.1| 5358 3224603755 80 81 gi|14327711|ref|NC_002797.1| 1787 3224609265 80 81 gi|14329171|ref|NC_002800.1| 1585 3224611160 80 81 gi|19697298|ref|NC_003451.1| 3373 3224612850 80 81 gi|19697300|ref|NC_003452.1| 2404 3224616351 80 81 gi|19697302|ref|NC_003453.1| 2053 3224618871 80 81 gi|21426907|ref|NC_004004.1| 8134 3224621035 80 81 gi|22681027|ref|NC_004142.1| 3096 3224629338 80 81 gi|50253405|ref|NC_005997.1| 4089 3224632551 80 81 gi|14575752|ref|NC_001839.2| 7206 3224636767 80 81 gi|15320794|ref|NC_003084.1| 108252 3224644133 80 81 gi|15426406|ref|NC_003093.1| 7560 3224753815 80 81 gi|15617474|ref|NC_003102.1| 139342 3224761539 80 81 gi|15741225|ref|NC_003113.1| 9476 3224902688 80 81 gi|17158105|ref|NC_003225.1| 305107 3224912363 80 81 gi|17158068|ref|NC_003243.1| 11822 3225221357 80 81 gi|18071203|ref|NC_003323.1| 8918 3225233404 80 81 gi|20279565|ref|NC_003710.1| 1781 3225242519 80 81 gi|20279567|ref|NC_003711.1| 1611 3225244408 80 81 gi|30315794|ref|NC_004765.1| 8300 3225246126 80 81 gi|55775706|ref|NC_006439.1| 6997 3225254598 80 81 gi|68532380|ref|NC_007157.1| 2831 3225261759 80 81 gi|68532382|ref|NC_007158.1| 3623 3225264702 80 81 gi|68532384|ref|NC_007159.1| 4532 3225268447 80 81 gi|68532386|ref|NC_007160.1| 3150 3225273112 80 81 gi|98960844|ref|NC_008037.1| 2593 3225276372 80 81 gi|21450043|ref|NC_004036.1| 7857 3225279068 80 81 gi|21686665|ref|NC_004062.1| 119217 3225287108 80 81 gi|21699776|ref|NC_004064.1| 7453 3225407885 80 81 gi|22003842|ref|NC_004074.1| 15522 3225415492 80 81 gi|22256023|ref|NC_004108.1| 6980 3225431282 80 81 gi|22256025|ref|NC_004109.1| 4527 3225438423 80 81 gi|22256027|ref|NC_004110.1| 984 3225443080 80 81 gi|23577820|ref|NC_004323.1| 131526 3225444144 80 81 gi|24943167|ref|NC_004365.1| 9812 3225577391 80 81 gi|24943162|ref|NC_004366.1| 4152 3225587397 80 81 gi|30018246|ref|NC_004723.1| 4766 3225591666 80 81 gi|32563515|ref|NC_005036.1| 15192 3225596564 80 81 gi|34365538|ref|NC_005077.1| 3343 3225612019 80 81 gi|34365532|ref|NC_005078.1| 3439 3225615475 80 81 gi|78761973|ref|NC_007539.1| 3562 3225619044 80 81 gi|78762152|ref|NC_007540.1| 3200 3225622738 80 81 gi|78762360|ref|NC_007541.1| 2976 3225626065 80 81 gi|78762517|ref|NC_007542.1| 2902 3225629166 80 81 gi|94717689|ref|NC_008003.1| 15510 3225632195 80 81 gi|188572141|ref|NC_010701.1| 3533 3225647979 80 81 gi|189043026|ref|NC_010756.1| 3406 3225651636 80 81 gi|29468603|ref|NC_001906.2| 18234 3225655145 80 81 gi|27311166|ref|NC_004455.1| 9518 3225673694 80 81 gi|29366744|ref|NC_004666.1| 5685 3225683408 80 81 gi|30018252|ref|NC_004725.1| 4576 3225689244 80 81 gi|30793779|ref|NC_004807.1| 9524 3225693943 80 81 gi|32188257|ref|NC_004915.1| 8167 3225703677 80 81 gi|33620713|ref|NC_005064.1| 11375 3225712013 80 81 gi|44965093|ref|NC_005776.1| 6846 3225723604 80 81 gi|56403981|ref|NC_006504.1| 955 3225730607 80 81 gi|68532390|ref|NC_007162.1| 1819 3225731651 80 81 gi|78762702|ref|NC_007523.1| 4975 3225733572 80 81 gi|95116639|ref|NC_008019.2| 3092 3225738685 80 81 gi|48477070|ref|NC_003992.2| 8203 3225741905 80 81 gi|32698539|ref|NC_005038.1| 99657 3225750288 80 81 gi|33438708|ref|NC_005053.1| 1996 3225851261 80 81 gi|33589253|ref|NC_005062.1| 10787 3225853358 80 81 gi|33622203|ref|NC_005068.1| 110907 3225864365 80 81 gi|34365535|ref|NC_005079.1| 7196 3225976730 80 81 gi|34365526|ref|NC_005080.1| 7114 3225984085 80 81 gi|34365529|ref|NC_005081.1| 3411 3225991357 80 81 gi|34365541|ref|NC_005082.1| 7081 3225994884 80 81 gi|34610121|ref|NC_005094.1| 3202 3226002143 80 81 gi|37595815|ref|NC_005132.1| 6966 3226005450 80 81 gi|38018022|ref|NC_005147.1| 30738 3226012574 80 81 gi|38639784|ref|NC_005266.1| 7935 3226043774 80 81 gi|41057345|ref|NC_005343.1| 8741 3226051876 80 81 gi|44965100|ref|NC_005777.1| 754 3226060800 80 81 gi|46359747|ref|NC_005843.1| 2606 3226061647 80 81 gi|48696569|ref|NC_005890.1| 3051 3226064362 80 81 gi|48696024|ref|NC_005897.1| 7089 3226067523 80 81 gi|48843625|ref|NC_005906.1| 81755 3226074772 80 81 gi|50428554|ref|NC_006059.1| 6624 3226157615 80 81 gi|50428560|ref|NC_006060.1| 6653 3226164385 80 81 gi|50428566|ref|NC_006064.1| 3382 3226171200 80 81 gi|50428568|ref|NC_006065.1| 2810 3226174703 80 81 gi|50428570|ref|NC_006066.1| 1938 3226177627 80 81 gi|51949945|ref|NC_006262.1| 10035 3226179661 80 81 gi|52627076|ref|NC_006313.1| 7133 3226189891 80 81 gi|55733713|ref|NC_006431.1| 9149 3226197204 80 81 gi|56692637|ref|NC_006549.1| 140131 3226206544 80 81 gi|56692441|ref|NC_006551.1| 11066 3226348486 80 81 gi|77118348|ref|NC_007447.1| 28475 3226359750 80 81 gi|48429536|ref|NC_011450.1| 8161 3226388666 80 81 gi|48429537|ref|NC_011451.1| 8173 3226397019 80 81 gi|48429538|ref|NC_011452.1| 8170 3226405384 80 81 gi|48697148|ref|NC_005898.1| 5492 3226413742 80 81 gi|48697170|ref|NC_005899.1| 2490 3226419388 80 81 gi|50080149|ref|NC_005965.1| 5129 3226421992 80 81 gi|50355585|ref|NC_006051.1| 7651 3226427267 80 81 gi|50355586|ref|NC_006052.1| 1830 3226435095 80 81 gi|50355587|ref|NC_006053.1| 1527 3226437029 80 81 gi|50355588|ref|NC_006054.1| 1417 3226438657 80 81 gi|51949966|ref|NC_006264.1| 2587 3226440188 80 81 gi|62401661|ref|NC_006960.1| 2223 3226442889 80 81 gi|30840968|ref|NC_004810.1| 7976 3226445232 80 81 gi|51010904|ref|NC_003094.2| 130759 3226453380 80 81 gi|51980895|ref|NC_006265.1| 5723 3226585843 80 81 gi|52220885|ref|NC_006276.1| 1708 3226591719 80 81 gi|52630359|ref|NC_006314.1| 8186 3226593523 80 81 gi|52630362|ref|NC_006315.1| 1645 3226601886 80 81 gi|52630364|ref|NC_006316.1| 1447 3226603626 80 81 gi|56692396|ref|NC_006558.1| 11597 3226605151 80 81 gi|56692628|ref|NC_006566.1| 3431 3226616979 80 81 gi|56692630|ref|NC_006567.1| 2570 3226620539 80 81 gi|56699507|ref|NC_006575.1| 3427 3226623220 80 81 gi|62327380|ref|NC_006939.1| 3683 3226626761 80 81 gi|62326965|ref|NC_006941.1| 9751 3226630568 80 81 gi|66476546|ref|NC_007018.1| 5268 3226640507 80 81 gi|66391195|ref|NC_007028.1| 3611 3226645931 80 81 gi|68299603|ref|NC_007147.1| 9611 3226649659 80 81 gi|71658849|ref|NC_007219.1| 1355 3226659491 80 81 gi|71647188|ref|NC_007221.1| 1677 3226660953 80 81 gi|71647191|ref|NC_007222.1| 1500 3226662741 80 81 gi|85813347|ref|NC_007736.1| 3740 3226664333 80 81 gi|85813349|ref|NC_007737.1| 3055 3226668193 80 81 gi|85813351|ref|NC_007738.1| 2404 3226671360 80 81 gi|85813353|ref|NC_007739.1| 2062 3226673868 80 81 gi|85813355|ref|NC_007740.1| 1870 3226676029 80 81 gi|85813357|ref|NC_007741.1| 1750 3226677996 80 81 gi|85719259|ref|NC_007742.1| 1208 3226679841 80 81 gi|85719261|ref|NC_007743.1| 1147 3226681138 80 81 gi|85719263|ref|NC_007744.1| 943 3226682373 80 81 gi|85719265|ref|NC_007745.1| 903 3226683402 80 81 gi|85719267|ref|NC_007746.1| 897 3226684391 80 81 gi|85719269|ref|NC_007747.1| 760 3226685374 80 81 gi|120407020|ref|NC_008734.1| 1798 3226686228 80 81 gi|120407022|ref|NC_008735.1| 3162 3226688132 80 81 gi|56699504|ref|NC_006574.1| 7271 3226691412 80 81 gi|9628892|ref|NC_001724.1| 10688 3226698841 80 81 gi|74007769|ref|NC_003821.2| 4050 3226709731 80 81 gi|94490709|ref|NC_005977.2| 1582 3226713922 80 81 gi|62326506|ref|NC_006934.1| 8295 3226715599 80 81 gi|62326809|ref|NC_006947.1| 10653 3226724058 80 81 gi|62327433|ref|NC_006948.1| 5914 3226734905 80 81 gi|62327635|ref|NC_006950.1| 6820 3226740977 80 81 gi|66508427|ref|NC_007020.1| 11440 3226747943 80 81 gi|66391212|ref|NC_007033.1| 7823 3226759616 80 81 gi|66391234|ref|NC_007037.1| 15058 3226767627 80 81 gi|66391250|ref|NC_007040.1| 15096 3226782964 80 81 gi|66527857|ref|NC_007044.1| 34334 3226798339 80 81 gi|71658858|ref|NC_007242.1| 1779 3226833175 80 81 gi|72398362|ref|NC_007340.1| 8595 3226835053 80 81 gi|72398332|ref|NC_007341.1| 8247 3226843832 80 81 gi|77118921|ref|NC_007448.1| 16494 3226852268 80 81 gi|77124337|ref|NC_007454.1| 18954 3226869024 80 81 gi|77999988|ref|NC_007501.1| 36466 3226888288 80 81 gi|78768326|ref|NC_007559.1| 4170 3226925296 80 81 gi|82712717|ref|NC_007620.1| 15516 3226929581 80 81 gi|83722643|ref|NC_007654.1| 10305 3226945381 80 81 gi|83722647|ref|NC_007655.1| 1354 3226955913 80 81 gi|85718614|ref|NC_007732.1| 30480 3226957380 80 81 gi|113460144|ref|NC_008310.1| 6474 3226988321 80 81 gi|73918825|ref|NC_007378.1| 2341 3226994966 80 81 gi|73852946|ref|NC_007357.1| 2341 3226997433 80 81 gi|73852950|ref|NC_007359.1| 2233 3226999900 80 81 gi|73852952|ref|NC_007360.1| 1565 3227002257 80 81 gi|73921265|ref|NC_007361.1| 1458 3227003957 80 81 gi|269954638|ref|NC_013527.1| 8662 3227005505 80 81 gi|269954645|ref|NC_013528.1| 11381 3227014342 80 81 gi|255237668|ref|NC_013057.1| 3383 3227025939 80 81 gi|255237729|ref|NC_013058.1| 7207 3227029438 80 81 gi|68532392|ref|NC_007163.1| 2194 3227036814 80 81 gi|73852956|ref|NC_007363.1| 1027 3227039151 80 81 gi|73852943|ref|NC_007364.1| 865 3227040287 80 81 gi|85719271|ref|NC_007748.1| 3987 3227041250 80 81 gi|85719273|ref|NC_007749.1| 2856 3227045374 80 81 gi|85719275|ref|NC_007750.1| 2747 3227048353 80 81 gi|85719277|ref|NC_007751.1| 1996 3227051222 80 81 gi|85719279|ref|NC_007752.1| 1695 3227053330 80 81 gi|85719281|ref|NC_007753.1| 1071 3227055134 80 81 gi|85719283|ref|NC_007754.1| 1180 3227056306 80 81 gi|85719285|ref|NC_007755.1| 1784 3227057588 80 81 gi|85719287|ref|NC_007756.1| 1613 3227059482 80 81 gi|85719289|ref|NC_007757.1| 819 3227061204 80 81 gi|270358326|ref|NC_013105.1| 7040 3227062136 80 81 gi|50261322|ref|NC_005996.1| 3203 3227069349 80 81 gi|255987642|ref|NC_013106.1| 2335 3227072695 80 81 gi|255987644|ref|NC_013107.1| 1348 3227075162 80 81 gi|255987646|ref|NC_013108.1| 1559 3227076629 80 81 gi|215401108|ref|NC_011612.1| 45344 3227078292 80 81 gi|215401171|ref|NC_011614.1| 42526 3227124287 80 81 gi|281190771|ref|NC_013590.2| 135797 3227167413 80 81 gi|281372524|ref|NC_013639.1| 2808 3227305016 80 81 gi|281358863|ref|NC_013641.1| 1352 3227307978 80 81 gi|281416165|ref|NC_013651.1| 38497 3227309411 80 81 gi|119953745|ref|NC_008721.1| 36216 3227348462 80 81 gi|148641518|ref|NC_009519.1| 1734 3227385219 80 81 gi|56692979|ref|NC_006553.1| 8289 3227387040 80 81 gi|62401671|ref|NC_006961.1| 2296 3227395514 80 81 gi|110645209|ref|NC_008252.1| 84264 3227397910 80 81 gi|168480155|ref|NC_010354.1| 7556 3227483300 80 81 gi|187251953|ref|NC_010646.1| 31686 3227491028 80 81 gi|66395215|ref|NC_007047.1| 39620 3227523183 80 81 gi|110611896|ref|NC_008251.1| 6858 3227563366 80 81 gi|118197609|ref|NC_008585.1| 17481 3227570386 80 81 gi|282937675|ref|NC_013699.1| 5018 3227588168 80 81 gi|9626993|ref|NC_001510.1| 5149 3227593316 80 81 gi|56692800|ref|NC_006550.1| 9104 3227598612 80 81 gi|68304136|ref|NC_007151.1| 149622 3227607921 80 81 gi|82524281|ref|NC_007609.1| 6181 3227759484 80 81 gi|90403572|ref|NC_007920.1| 10375 3227765833 80 81 gi|109255260|ref|NC_008169.1| 8745 3227776416 80 81 gi|109255267|ref|NC_008170.1| 4986 3227785349 80 81 gi|56900714|ref|NC_006579.1| 14885 3227790475 80 81 gi|90592717|ref|NC_007921.1| 147544 3227805631 80 81 gi|148368821|ref|NC_009503.1| 124121 3227955099 80 81 gi|254728908|ref|NC_013012.1| 1321 3228080880 80 81 gi|238801614|ref|NC_012735.1| 10814 3228082284 80 81 gi|237688319|ref|NC_012698.1| 9069 3228093309 80 81 gi|240114604|ref|NC_012812.1| 12337 3228102585 80 81 gi|254667440|ref|NC_013006.1| 8517 3228115148 80 81 gi|273809728|ref|NC_013598.1| 35525 3228123848 80 81 gi|281416385|ref|NC_013645.1| 34882 3228159891 80 81 gi|237781146|ref|NC_012699.1| 6434 3228195283 80 81 gi|238890537|ref|NC_012776.1| 3189 3228201867 80 81 gi|238890540|ref|NC_012777.1| 7163 3228205165 80 81 gi|239590011|ref|NC_012788.1| 41441 3228212492 80 81 gi|254305431|ref|NC_012986.1| 7989 3228254520 80 81 gi|270358328|ref|NC_013220.1| 3220 3228262697 80 81 gi|270358330|ref|NC_013221.1| 2896 3228266047 80 81 gi|254728912|ref|NC_013014.1| 1874 3228269078 80 81 gi|254728914|ref|NC_013015.1| 1852 3228271074 80 81 gi|273810419|ref|NC_013599.1| 36674 3228273019 80 81 gi|282598938|ref|NC_013697.1| 157486 3228310221 80 81 gi|259493848|ref|NC_005896.2| 7978 3228469769 80 81 gi|262530250|ref|NC_013469.1| 9098 3228477934 80 81 gi|262530253|ref|NC_013470.1| 2383 3228487240 80 81 gi|262530255|ref|NC_013471.1| 1739 3228489747 80 81 gi|255987652|ref|NC_013111.1| 2740 3228491555 80 81 gi|255987654|ref|NC_013112.1| 1137 3228494377 80 81 gi|255987656|ref|NC_013113.1| 958 3228495576 80 81 gi|194351523|ref|NC_011065.1| 2769 3228496597 80 81 gi|194351525|ref|NC_011066.1| 1028 3228499452 80 81 gi|194351527|ref|NC_011067.1| 960 3228500544 80 81 gi|194351517|ref|NC_011068.1| 2814 3228501566 80 81 gi|194351519|ref|NC_011069.1| 1064 3228504466 80 81 gi|194351521|ref|NC_011070.1| 974 3228505594 80 81 gi|24462251|ref|NC_004359.1| 330 3228506645 80 81 gi|284504040|ref|NC_013756.1| 368454 3228507043 80 81 gi|284520907|ref|NC_013758.1| 8082 3228880192 80 81 gi|9628649|ref|NC_001701.1| 5106 3228888439 80 81 gi|190336482|ref|NC_010949.1| 2561 3228893695 80 81 gi|190336488|ref|NC_010950.1| 2569 3228896375 80 81 gi|9629641|ref|NC_001829.1| 4767 3228899050 80 81 gi|149980608|ref|NC_009605.1| 2562 3228903964 80 81 gi|149980611|ref|NC_009606.1| 2611 3228906646 80 81 gi|166162030|ref|NC_010294.1| 2604 3228909377 80 81 gi|71658845|ref|NC_007218.1| 6321 3228912092 80 81 gi|149980617|ref|NC_009607.1| 2593 3228918576 80 81 gi|268537545|ref|NC_011545.2| 6310 3228921294 80 81 gi|33235697|ref|NC_005040.1| 5499 3228927756 80 81 gi|16507262|ref|NC_003199.1| 2754 3228933414 80 81 gi|23096165|ref|NC_004192.1| 2753 3228936304 80 81 gi|56698743|ref|NC_006561.1| 1988 3228939163 80 81 gi|46359760|ref|NC_005845.1| 2739 3228941268 80 81 gi|46359766|ref|NC_005846.1| 2705 3228944134 80 81 gi|122808720|ref|NC_008793.1| 2762 3228946970 80 81 gi|112180294|ref|NC_008283.1| 2750 3228949861 80 81 gi|112180300|ref|NC_008284.1| 2726 3228952740 80 81 gi|148734560|ref|NC_009550.1| 2740 3228955595 80 81 gi|71849678|ref|NC_007290.1| 2751 3228958460 80 81 gi|146411800|ref|NC_009451.1| 2760 3228961327 80 81 gi|77125236|ref|NC_007455.1| 5299 3228964185 80 81 gi|113199737|ref|NC_008299.1| 2759 3228969641 80 81 gi|126640090|ref|NC_009088.1| 2728 3228972522 80 81 gi|85667899|ref|NC_007726.1| 2674 3228975363 80 81 gi|85667904|ref|NC_007727.1| 2626 3228978149 80 81 gi|151266257|ref|NC_009644.1| 2677 3228980894 80 81 gi|151266266|ref|NC_009645.1| 2731 3228983680 80 81 gi|151266274|ref|NC_009647.1| 2672 3228986521 80 81 gi|148734567|ref|NC_009545.1| 2761 3228989312 80 81 gi|148734574|ref|NC_009546.1| 2757 3228992194 80 81 gi|148734581|ref|NC_009547.1| 2753 3228995073 80 81 gi|148734637|ref|NC_009548.1| 2745 3228997955 80 81 gi|148734668|ref|NC_009549.1| 2751 3229000821 80 81 gi|126030105|ref|NC_009030.1| 2762 3229003693 80 81 gi|121614345|ref|NC_008727.1| 2737 3229006601 80 81 gi|122809020|ref|NC_008794.1| 2745 3229009465 80 81 gi|126031754|ref|NC_009031.1| 2742 3229012327 80 81 gi|148658998|ref|NC_009518.1| 2931 3229015175 80 81 gi|164564312|ref|NC_010238.1| 2756 3229018226 80 81 gi|189426769|ref|NC_010812.1| 2756 3229021134 80 81 gi|190336512|ref|NC_010947.1| 2755 3229024005 80 81 gi|160688402|ref|NC_009987.1| 7870 3229026882 80 81 gi|166867487|ref|NC_010307.1| 2725 3229034930 80 81 gi|169803207|ref|NC_010435.1| 2740 3229037768 80 81 gi|219552927|ref|NC_011805.1| 2737 3229040638 80 81 gi|189303447|ref|NC_010797.1| 2736 3229043480 80 81 gi|209901313|ref|NC_011399.1| 8929 3229046320 80 81 gi|190336530|ref|NC_010837.1| 2666 3229055445 80 81 gi|190336536|ref|NC_010838.1| 2634 3229058229 80 81 gi|190336539|ref|NC_010835.1| 2560 3229060977 80 81 gi|190336545|ref|NC_010836.1| 2498 3229063650 80 81 gi|190336548|ref|NC_010833.1| 2708 3229066259 80 81 gi|190336554|ref|NC_010834.1| 2663 3229069080 80 81 gi|196049395|ref|NC_011135.1| 2767 3229071855 80 81 gi|209363613|ref|NC_011346.1| 2776 3229074750 80 81 gi|209363620|ref|NC_011347.1| 2739 3229077654 80 81 gi|223951472|ref|NC_012094.1| 1898 3229080500 80 81 gi|215480035|ref|NC_011619.1| 4800 3229082489 80 81 gi|215480028|ref|NC_011618.1| 4746 3229087416 80 81 gi|224504298|ref|NC_012126.1| 2140 3229092302 80 81 gi|254688517|ref|NC_013023.1| 2162 3229094545 80 81 gi|254688521|ref|NC_013024.1| 2819 3229096811 80 81 gi|254688524|ref|NC_013025.1| 1803 3229099742 80 81 gi|254688527|ref|NC_013026.1| 2072 3229101644 80 81 gi|254688530|ref|NC_013027.1| 2782 3229103818 80 81 gi|254688533|ref|NC_013028.1| 2160 3229106711 80 81 gi|254729601|ref|NC_013029.1| 2757 3229108974 80 81 gi|255046528|ref|NC_013030.2| 1739 3229111843 80 81 gi|254688511|ref|NC_013018.1| 1833 3229113681 80 81 gi|254688514|ref|NC_013020.1| 1815 3229115614 80 81 gi|285002275|ref|NC_013772.1| 176677 3229117535 80 81 gi|268053723|ref|NC_013499.1| 6780 3229296512 80 81 gi|239507361|ref|NC_012784.1| 44492 3229303459 80 81 gi|18875445|ref|NC_003412.1| 5698 3229348581 80 81 gi|281416490|ref|NC_013643.1| 36270 3229354426 80 81 gi|281416434|ref|NC_013644.1| 37856 3229391225 80 81 gi|281416323|ref|NC_013646.1| 38764 3229429630 80 81 gi|281416213|ref|NC_013648.1| 39576 3229468954 80 81 gi|213493498|ref|NC_011590.1| 348 3229509098 80 81 gi|224591438|ref|NC_012137.1| 2759 3229509553 80 81 gi|213496074|ref|NC_011591.1| 3437 3229512417 80 81 gi|209401054|ref|NC_011354.1| 132425 3229515975 80 81 gi|20889325|ref|NC_003883.1| 2185 3229650133 80 81 gi|20889329|ref|NC_003884.1| 2203 3229652423 80 81 gi|94676202|ref|NC_008000.1| 14531 3229654744 80 81 gi|9632565|ref|NC_000858.1| 9028 3229669533 80 81 gi|9626453|ref|NC_001436.1| 8507 3229678749 80 81 gi|9626530|ref|NC_001450.1| 8359 3229687440 80 81 gi|9627742|ref|NC_001623.1| 133894 3229695994 80 81 gi|9629514|ref|NC_001819.1| 8282 3229831639 80 81 gi|9630378|ref|NC_001899.1| 5941 3229840103 80 81 gi|9630729|ref|NC_001944.1| 1993 3229846196 80 81 gi|9630966|ref|NC_001973.1| 161046 3229848282 80 81 gi|9632547|ref|NC_002077.1| 4718 3230011415 80 81 gi|9635250|ref|NC_002331.1| 178733 3230016267 80 81 gi|13357204|ref|NC_002692.1| 6383 3230197302 80 81 gi|14329173|ref|NC_002801.1| 1181 3230203850 80 81 gi|37591172|ref|NC_002815.2| 6614 3230205108 80 81 gi|14647158|ref|NC_002981.1| 2748 3230211899 80 81 gi|15081567|ref|NC_003043.1| 16236 3230214751 80 81 gi|15320657|ref|NC_003083.1| 118584 3230231262 80 81 gi|21263121|ref|NC_003138.2| 8303 3230351405 80 81 gi|20889398|ref|NC_003870.1| 8146 3230359901 80 81 gi|21728357|ref|NC_004067.1| 6450 3230368216 80 81 gi|22788704|ref|NC_004153.1| 2745 3230374831 80 81 gi|23334616|ref|NC_004289.1| 5380 3230377687 80 81 gi|27151463|ref|NC_004442.1| 5097 3230383202 80 81 gi|50080143|ref|NC_004452.3| 3644 3230388434 80 81 gi|27819377|ref|NC_004540.1| 7591 3230392200 80 81 gi|28261417|ref|NC_004560.1| 5784 3230399965 80 81 gi|28380571|ref|NC_004569.1| 2782 3230405906 80 81 gi|29337246|ref|NC_004655.1| 2785 3230408819 80 81 gi|30146791|ref|NC_004755.1| 2735 3230411717 80 81 gi|33354433|ref|NC_004994.2| 7448 3230414571 80 81 gi|34610126|ref|NC_005092.1| 9394 3230422196 80 81 gi|34610124|ref|NC_005095.1| 1175 3230431797 80 81 gi|46359769|ref|NC_005842.1| 2763 3230433062 80 81 gi|46393296|ref|NC_005848.1| 3518 3230435937 80 81 gi|94490707|ref|NC_005976.2| 1754 3230439589 80 81 gi|51949960|ref|NC_006260.1| 4721 3230441439 80 81 gi|51949963|ref|NC_006261.1| 4393 3230446294 80 81 gi|53851026|ref|NC_006358.1| 2724 3230450836 80 81 gi|53851032|ref|NC_006359.1| 2691 3230453689 80 81 gi|55775697|ref|NC_006430.1| 15246 3230456483 80 81 gi|68532388|ref|NC_007161.1| 1959 3230471996 80 81 gi|71658851|ref|NC_007220.1| 1991 3230474043 80 81 gi|78768528|ref|NC_007560.1| 3780 3230476145 80 81 gi|78768725|ref|NC_007561.1| 3595 3230480059 80 81 gi|78768833|ref|NC_007562.1| 3362 3230483785 80 81 gi|78768952|ref|NC_007563.1| 2106 3230487276 80 81 gi|78769059|ref|NC_007564.1| 1935 3230489495 80 81 gi|78769117|ref|NC_007565.1| 1606 3230491541 80 81 gi|78769203|ref|NC_007566.1| 1584 3230493254 80 81 gi|78769296|ref|NC_007567.1| 1547 3230494944 80 81 gi|78769480|ref|NC_007568.1| 1509 3230496598 80 81 gi|82703944|ref|NC_007619.1| 11034 3230498188 80 81 gi|83716025|ref|NC_007652.1| 14071 3230509412 80 81 gi|85718599|ref|NC_007731.1| 6607 3230523733 80 81 gi|94676000|ref|NC_007986.1| 7276 3230530513 80 81 gi|94676016|ref|NC_007987.1| 6567 3230537970 80 81 gi|94676033|ref|NC_007988.1| 7760 3230544710 80 81 gi|94676045|ref|NC_007989.1| 8284 3230552657 80 81 gi|94676060|ref|NC_007990.1| 8171 3230561136 80 81 gi|94676074|ref|NC_007991.1| 8315 3230569500 80 81 gi|94676079|ref|NC_007992.1| 8600 3230578009 80 81 gi|94676089|ref|NC_007993.1| 9155 3230586807 80 81 gi|94676104|ref|NC_007994.1| 9391 3230596167 80 81 gi|94676120|ref|NC_007995.1| 8864 3230605767 80 81 gi|94676136|ref|NC_007996.1| 10223 3230614832 80 81 gi|94676156|ref|NC_007997.1| 6138 3230625304 80 81 gi|94676174|ref|NC_007998.1| 11285 3230631610 80 81 gi|94676188|ref|NC_007999.1| 11841 3230643127 80 81 gi|94676220|ref|NC_008001.1| 14825 3230655207 80 81 gi|94676233|ref|NC_008002.1| 19557 3230670308 80 81 gi|94676250|ref|NC_008004.1| 7887 3230690200 80 81 gi|94676264|ref|NC_008005.1| 6283 3230698297 80 81 gi|94676276|ref|NC_008006.1| 10757 3230704749 80 81 gi|94676281|ref|NC_008008.1| 7604 3230715731 80 81 gi|109240522|ref|NC_008182.1| 7581 3230723515 80 81 gi|109240529|ref|NC_008183.1| 6364 3230731275 80 81 gi|110645391|ref|NC_008249.1| 5900 3230737798 80 81 gi|116326654|ref|NC_008523.1| 1358 3230743879 80 81 gi|118725053|ref|NC_008617.1| 44061 3230745330 80 81 gi|124484618|ref|NC_008947.1| 2755 3230790032 80 81 gi|124484628|ref|NC_008951.1| 3590 3230792913 80 81 gi|124484630|ref|NC_008952.1| 4063 3230796638 80 81 gi|126010918|ref|NC_009017.1| 4172 3230800834 80 81 gi|148750834|ref|NC_009554.1| 34659 3230805132 80 81 gi|156447517|ref|NC_009742.1| 9689 3230840294 80 81 gi|156447521|ref|NC_009744.1| 9659 3230850178 80 81 gi|166851932|ref|NC_010306.1| 26253 3230860028 80 81 gi|169247424|ref|NC_010384.1| 7383 3230886690 80 81 gi|189178624|ref|NC_010791.1| 2738 3230894239 80 81 gi|189178631|ref|NC_010792.1| 2708 3230897085 80 81 gi|239740600|ref|NC_012786.1| 2672 3230899923 80 81 gi|239740606|ref|NC_012787.1| 2644 3230902725 80 81 gi|242346753|ref|NC_012869.1| 8433 3230905484 80 81 gi|262340522|ref|NC_013439.1| 5168 3230914094 80 81 gi|282598693|ref|NC_013695.1| 7379 3230919407 80 81 gi|124484646|ref|NC_008957.1| 2851 3230926971 80 81 gi|124484649|ref|NC_008958.1| 2857 3230929950 80 81 gi|124484652|ref|NC_008959.1| 3213 3230932935 80 81 gi|124484656|ref|NC_008960.1| 3225 3230936281 80 81 gi|124484659|ref|NC_008961.1| 3293 3230939639 80 81 gi|124484668|ref|NC_008965.1| 3591 3230943067 80 81 gi|124484672|ref|NC_008966.1| 3638 3230946796 80 81 gi|124484677|ref|NC_008967.1| 3841 3230950573 80 81 gi|124484680|ref|NC_008968.1| 3868 3230954556 80 81 gi|124484684|ref|NC_008969.1| 3957 3230958566 80 81 gi|124484687|ref|NC_008970.1| 4006 3230962665 80 81 gi|124484694|ref|NC_008972.1| 4144 3230966814 80 81 gi|124484697|ref|NC_008973.1| 4180 3230971102 80 81 gi|124484701|ref|NC_008976.1| 4188 3230975427 80 81 gi|124484705|ref|NC_008977.1| 4225 3230979760 80 81 gi|124484707|ref|NC_008978.1| 4247 3230984130 80 81 gi|124484709|ref|NC_008979.1| 4264 3230988523 80 81 gi|124484713|ref|NC_008980.1| 4367 3230992934 80 81 gi|124484715|ref|NC_008981.1| 4495 3230997449 80 81 gi|124484717|ref|NC_008982.1| 4562 3231002094 80 81 gi|124484719|ref|NC_008983.1| 4720 3231006807 80 81 gi|124484722|ref|NC_008984.1| 4729 3231011679 80 81 gi|124484729|ref|NC_008985.1| 4914 3231016561 80 81 gi|124484731|ref|NC_008986.1| 5047 3231021629 80 81 gi|124484735|ref|NC_008987.1| 5050 3231026832 80 81 gi|124484743|ref|NC_008988.1| 5070 3231032038 80 81 gi|124484749|ref|NC_008989.1| 5108 3231037264 80 81 gi|124484754|ref|NC_008990.1| 5298 3231042528 80 81 gi|124484759|ref|NC_008991.1| 5328 3231047985 80 81 gi|124484764|ref|NC_008992.1| 5353 3231053472 80 81 gi|124484769|ref|NC_008993.1| 5530 3231058984 80 81 gi|124484774|ref|NC_008994.1| 5579 3231064677 80 81 gi|124484778|ref|NC_008995.1| 5848 3231070419 80 81 gi|124484783|ref|NC_008996.1| 5404 3231076434 80 81 gi|124484788|ref|NC_008997.1| 6654 3231081998 80 81 gi|124484802|ref|NC_008999.1| 3402 3231088828 80 81 gi|124484804|ref|NC_009000.1| 3831 3231092366 80 81 gi|124484806|ref|NC_009001.1| 4461 3231096338 80 81 gi|124484808|ref|NC_009002.1| 4808 3231100948 80 81 gi|124484810|ref|NC_009003.1| 6145 3231105909 80 81 gi|291084859|ref|NC_013936.1| 52141 3231112207 80 81 gi|282174037|ref|NC_013668.1| 248531 3231165072 80 81 gi|50253375|ref|NC_006021.1| 3965 3231416795 80 81 gi|256574726|ref|NC_013114.1| 7422 3231420879 80 81 gi|11496581|ref|NC_000885.1| 360 3231428471 80 81 gi|66275797|ref|NC_006998.1| 194711 3231428898 80 81 gi|9634679|ref|NC_002188.1| 288539 3231626103 80 81 gi|21426071|ref|NC_004002.1| 149955 3231918320 80 81 gi|9633809|ref|NC_001266.1| 159857 3232070217 80 81 gi|18450236|ref|NC_001132.2| 161773 3232232133 80 81 gi|18640086|ref|NC_003389.1| 146454 3232395991 80 81 gi|82503188|ref|NC_007605.1| 171823 3232544350 80 81 gi|9625955|ref|NC_001350.1| 112930 3232718392 80 81 gi|13095578|ref|NC_002665.1| 108873 3232832802 80 81 gi|83642839|ref|NC_007646.1| 135135 3232943103 80 81 gi|9626821|ref|NC_001493.1| 134226 3233079998 80 81 gi|94675982|ref|NC_007985.1| 12098 3233215992 80 81 gi|9627065|ref|NC_001523.1| 8374 3233228308 80 81 gi|9627074|ref|NC_001524.1| 8095 3233236861 80 81 gi|9627486|ref|NC_001605.1| 7687 3233245139 80 81 gi|118129780|ref|NC_008582.1| 7393 3233253010 80 81 gi|9626053|ref|NC_001355.1| 7902 3233260571 80 81 gi|9627196|ref|NC_001541.1| 7868 3233268651 80 81 gi|9628283|ref|NC_001663.1| 5366 3233276685 80 81 gi|9627180|ref|NC_001538.1| 5153 3233282181 80 81 gi|9628642|ref|NC_001699.1| 5130 3233287461 80 81 gi|9627020|ref|NC_001515.1| 5297 3233292722 80 81 gi|9632857|ref|NC_000867.1| 10079 3233298160 80 81 gi|29366675|ref|NC_000866.4| 168903 3233308436 80 81 gi|9630327|ref|NC_001895.1| 33593 3233479521 80 81 gi|228860932|ref|NC_012635.1| 168394 3233513608 80 81 gi|194186868|ref|NC_011048.1| 19282 3233684176 80 81 gi|9627425|ref|NC_001604.1| 39937 3233703770 80 81 gi|242346741|ref|NC_012868.1| 6094 3233744281 80 81 gi|19387568|ref|NC_003438.1| 4421 3233750519 80 81 gi|9626232|ref|NC_002014.1| 6883 3233755067 80 81 gi|9630747|ref|NC_001954.1| 8454 3233762108 80 81 gi|9625381|ref|NC_001332.1| 6744 3233770740 80 81 gi|9626316|ref|NC_001418.1| 5833 3233777637 80 81 gi|32453484|ref|NC_004928.1| 167560 3233783616 80 81 gi|41057352|ref|NC_005340.1| 30636 3233953344 80 81 gi|30315610|ref|NC_004763.1| 5270 3233984444 80 81 gi|139424470|ref|NC_009334.1| 172764 3233989848 80 81 gi|22164589|ref|NC_004105.1| 209771 3234164836 80 81 gi|9628002|ref|NC_001650.1| 184427 3234377296 80 81 gi|113195177|ref|NC_008291.1| 198050 3234564093 80 81 gi|18640237|ref|NC_003391.1| 205719 3234764681 80 81 gi|9627734|ref|NC_001619.1| 8607 3234973045 80 81 gi|17313217|ref|NC_003278.1| 35580 3234981832 80 81 gi|38229169|ref|NC_005179.1| 134721 3235017928 80 81 gi|57753410|ref|NC_006639.1| 24748 3235154424 80 81 gi|57753378|ref|NC_006649.1| 32108 3235179573 80 81 gi|23217014|ref|NC_004195.1| 7841 3235212159 80 81 gi|9628542|ref|NC_001690.1| 7100 3235220174 80 81 gi|9628550|ref|NC_001691.1| 7184 3235227438 80 81 gi|9628566|ref|NC_001693.1| 7313 3235234787 80 81 gi|40555938|ref|NC_005309.1| 359853 3235242255 80 81 gi|116326222|ref|NC_008515.1| 165890 3235606681 80 81 gi|51518014|ref|NC_006146.1| 171096 3235774715 80 81 gi|212671382|ref|NC_011534.1| 39472 3235948018 80 81 gi|33620426|ref|NC_005066.1| 164018 3235988057 80 81 gi|66391198|ref|NC_007029.1| 6307 3236154216 80 81 gi|66391204|ref|NC_007031.1| 7228 3236160692 80 81 gi|66391208|ref|NC_007032.1| 9604 3236168101 80 81 gi|66391216|ref|NC_007034.1| 10790 3236177916 80 81 gi|66391221|ref|NC_007035.1| 11238 3236188931 80 81 gi|66391228|ref|NC_007036.1| 13704 3236200400 80 81 gi|66391236|ref|NC_007038.1| 15218 3236214366 80 81 gi|66391242|ref|NC_007039.1| 17355 3236229865 80 81 gi|66391252|ref|NC_007041.1| 13279 3236247529 80 81 gi|9629249|ref|NC_001789.1| 7761 3236261045 80 81 gi|9629720|ref|NC_001838.1| 7889 3236268985 80 81 gi|91214232|ref|NC_005083.2| 244834 3236277039 80 81 gi|9631294|ref|NC_001993.1| 236120 3236525018 80 81 gi|9630761|ref|NC_001956.1| 8651 3236764153 80 81 gi|9631195|ref|NC_001987.1| 108409 3236772981 80 81 gi|109638461|ref|NC_008211.1| 220859 3236882814 80 81 gi|157939619|ref|NC_009888.1| 144565 3237106496 80 81 gi|24943089|ref|NC_004367.1| 149696 3237252944 80 81 gi|9633990|ref|NC_001271.1| 39600 3237404584 80 81 gi|37651481|ref|NC_005135.1| 173591 3237444751 80 81 gi|66391451|ref|NC_007023.1| 180500 3237620585 80 81 gi|9635132|ref|NC_002232.1| 7565 3237803415 80 81 gi|90403473|ref|NC_007914.1| 14462 3237811133 80 81 gi|90403509|ref|NC_007918.1| 16067 3237825834 80 81 gi|41057437|ref|NC_005337.1| 134431 3237842181 80 81 gi|12084983|ref|NC_002642.1| 144575 3237978364 80 81 gi|18653809|ref|NC_003401.1| 133719 3238124808 80 81 gi|22122227|ref|NC_004087.1| 32308 3238260287 80 81 gi|158267608|ref|NC_003214.2| 40900 3238293087 80 81 gi|228861315|ref|NC_012638.1| 165429 3238334573 80 81 gi|21844535|ref|NC_004068.1| 7729 3238502150 80 81 gi|21326229|ref|NC_003973.1| 7304 3238510065 80 81 gi|27311175|ref|NC_004456.1| 43198 3238517526 80 81 gi|30518360|ref|NC_004800.1| 5256 3238561342 80 81 gi|27531786|ref|NC_004500.1| 7461 3238566740 80 81 gi|38639923|ref|NC_005260.1| 233234 3238574363 80 81 gi|30387453|ref|NC_004777.1| 37555 3238810591 80 81 gi|30065704|ref|NC_004745.1| 30728 3238848685 80 81 gi|28376615|ref|NC_001505.2| 4754 3238879871 80 81 gi|109289986|ref|NC_008208.1| 161475 3238884752 80 81 gi|45655866|ref|NC_005830.1| 20869 3239048323 80 81 gi|50253426|ref|NC_005134.2| 7438 3239069529 80 81 gi|42494927|ref|NC_005360.1| 16473 3239077137 80 81 gi|126010846|ref|NC_009016.1| 38197 3239093883 80 81 gi|124484616|ref|NC_008946.1| 4692 3239132649 80 81 gi|124484625|ref|NC_008950.1| 5254 3239137490 80 81 gi|124484632|ref|NC_008953.1| 3935 3239142901 80 81 gi|124484661|ref|NC_008962.1| 3385 3239146978 80 81 gi|124484666|ref|NC_008964.1| 3573 3239150499 80 81 gi|124484689|ref|NC_008971.1| 4126 3239154209 80 81 gi|124484793|ref|NC_008998.1| 8851 3239158479 80 81 gi|47131155|ref|NC_005872.1| 28337 3239167516 80 81 gi|56692997|ref|NC_006556.1| 20933 3239196293 80 81 gi|56693036|ref|NC_006564.1| 8101 3239217559 80 81 gi|161622381|ref|NC_010105.1| 170523 3239225836 80 81 gi|157929273|ref|NC_009884.1| 31787 3239398569 80 81 gi|62422552|ref|NC_006966.1| 166259 3239430824 80 81 gi|62443971|ref|NC_006967.1| 170560 3239599233 80 81 gi|159341058|ref|NC_009965.1| 24655 3239772002 80 81 gi|75750386|ref|NC_007409.1| 62730 3239797040 80 81 gi|66391804|ref|NC_007022.1| 172963 3239860621 80 81 gi|219681191|ref|NC_011802.1| 41941 3240035833 80 81 gi|117676329|ref|NC_007145.2| 37639 3240078378 80 81 gi|9627377|ref|NC_001593.1| 7856 3240116563 80 81 gi|23217032|ref|NC_004194.1| 7613 3240124588 80 81 gi|20428628|ref|NC_003748.1| 7610 3240132378 80 81 gi|9626063|ref|NC_001356.1| 7815 3240140155 80 81 gi|9626069|ref|NC_001357.1| 7857 3240148140 80 81 gi|9626032|ref|NC_001352.1| 7860 3240156167 80 81 gi|9627056|ref|NC_001522.1| 7945 3240164198 80 81 gi|167600365|ref|NC_010329.1| 7326 3240172320 80 81 gi|109390382|ref|NC_008188.1| 7263 3240179816 80 81 gi|109390389|ref|NC_008189.1| 7259 3240187248 80 81 gi|97331426|ref|NC_008032.1| 7542 3240194680 80 81 gi|212499705|ref|NC_011551.1| 39867 3240202386 80 81 gi|155370093|ref|NC_007804.2| 39104 3240242825 80 81 gi|162329288|ref|NC_010155.1| 40449 3240282496 80 81 gi|162329357|ref|NC_010152.1| 39577 3240323529 80 81 gi|162329424|ref|NC_010153.1| 36895 3240363679 80 81 gi|162329482|ref|NC_010154.1| 38179 3240401114 80 81 gi|221328618|ref|NC_011976.1| 43016 3240439846 80 81 gi|90403553|ref|NC_007922.1| 5079 3240483465 80 81 gi|90403560|ref|NC_007923.1| 5278 3240488674 80 81 gi|113200740|ref|NC_008297.1| 7801 3240494090 80 81 gi|96980809|ref|NC_008030.1| 190054 3240502055 80 81 gi|113200763|ref|NC_008298.1| 7970 3240694577 80 81 gi|15011550|ref|NC_003027.1| 150773 3240702727 80 81 gi|21426072|ref|NC_004003.1| 149599 3240855453 80 81 gi|162290187|ref|NC_008296.2| 177300 3241006995 80 81 gi|109638594|ref|NC_008210.1| 231801 3241186580 80 81 gi|109289936|ref|NC_008201.1| 34525 3241421353 80 81 gi|116536728|ref|NC_008519.1| 7522 3241456391 80 81 gi|158518661|ref|NC_009542.2| 33985 3241464080 80 81 gi|145708074|ref|NC_009382.1| 38760 3241498562 80 81 gi|118197620|ref|NC_008584.1| 152372 3241537877 80 81 gi|124378198|ref|NC_008911.1| 3130 3241692245 80 81 gi|134288556|ref|NC_009238.1| 5040 3241695492 80 81 gi|146329912|ref|NC_009447.1| 52414 3241700671 80 81 gi|148724565|ref|NC_009539.1| 5229 3241753805 80 81 gi|218685637|ref|NC_011765.1| 8256 3241759183 80 81 gi|206599537|ref|NC_011280.1| 7260 3241767624 80 81 gi|160688416|ref|NC_009986.1| 15135 3241775057 80 81 gi|198449227|ref|NC_011217.1| 15330 3241790464 80 81 gi|164429763|ref|NC_010226.1| 7742 3241806058 80 81 gi|160700594|ref|NC_009990.1| 37313 3241813969 80 81 gi|161622648|ref|NC_010107.1| 7295 3241851850 80 81 gi|212286048|ref|NC_011530.1| 7020 3241859318 80 81 gi|212286056|ref|NC_011531.1| 6953 3241866506 80 81 gi|256352174|ref|NC_013117.1| 7498 3241873635 80 81 gi|237651540|ref|NC_012697.1| 74611 3241881293 80 81 gi|237651460|ref|NC_012696.1| 73325 3241956903 80 81 gi|189475225|ref|NC_010817.1| 7277 3242031246 80 81 gi|215479976|ref|NC_011613.1| 36632 3242038685 80 81 gi|215479924|ref|NC_011611.1| 36885 3242075846 80 81 gi|171473648|ref|NC_010537.1| 41172 3242113271 80 81 gi|211956446|ref|NC_011523.1| 14398 3242155026 80 81 gi|269838908|ref|NC_011085.2| 38234 3242169674 80 81 gi|238695587|ref|NC_012742.1| 44080 3242208458 80 81 gi|197935853|ref|NC_011201.1| 43079 3242253158 80 81 gi|219681259|ref|NC_011811.1| 84576 3242296848 80 81 gi|206599619|ref|NC_011286.1| 64562 3242382563 80 81 gi|206599706|ref|NC_011290.1| 64807 3242448009 80 81 gi|206599795|ref|NC_011285.1| 64618 3242513702 80 81 gi|206599880|ref|NC_011288.1| 58471 3242579206 80 81 gi|206600079|ref|NC_011287.1| 58554 3242638483 80 81 gi|206600181|ref|NC_011289.1| 58578 3242697844 80 81 gi|209447126|ref|NC_011357.1| 62147 3242757239 80 81 gi|207271573|ref|NC_011310.1| 5081 3242820239 80 81 gi|209427726|ref|NC_011356.1| 54896 3242825471 80 81 gi|224983322|ref|NC_012213.1| 7149 3242881132 80 81 gi|213163898|ref|NC_011589.1| 40287 3242888445 80 81 gi|238694878|ref|NC_012740.1| 166418 3242929309 80 81 gi|238695156|ref|NC_012741.1| 171451 3243097882 80 81 gi|238801731|ref|NC_012749.1| 88487 3243271550 80 81 gi|82524372|ref|NC_007611.1| 5230 3243361207 80 81 gi|17974913|ref|NC_003310.1| 196858 3243366580 80 81 gi|225626323|ref|NC_012418.1| 43152 3243565973 80 81 gi|238821372|ref|NC_012757.1| 6842 3243609733 80 81 gi|257136426|ref|NC_013196.1| 7378 3243616753 80 81 gi|291612456|ref|NC_013955.1| 15764 3243624287 80 81 gi|270281746|ref|NC_013585.1| 24186 3243640330 80 81 gi|292397674|ref|NC_013953.1| 156344 3243664889 80 81 gi|119943073|ref|NC_008706.1| 2245 3243823274 80 81 gi|119943076|ref|NC_008707.1| 2876 3243825634 80 81 gi|154800412|ref|NC_008708.2| 3429 3243828632 80 81 gi|170783609|ref|NC_010237.1| 63395 3243832179 80 81 gi|189427122|ref|NC_010808.1| 44342 3243896444 80 81 gi|50198836|ref|NC_005978.1| 3612 3243941409 80 81 gi|50198850|ref|NC_005981.1| 2763 3243945135 80 81 gi|50198846|ref|NC_005980.1| 2972 3243948001 80 81 gi|50198840|ref|NC_005979.1| 3134 3243951079 80 81 gi|56407674|ref|NC_006505.1| 2169 3243954343 80 81 gi|260665857|ref|NC_013115.1| 7423 3243956610 80 81 gi|212525344|ref|NC_011553.1| 3478 3243964215 80 81 gi|212525346|ref|NC_011554.1| 2879 3243967826 80 81 gi|269124268|ref|NC_011555.2| 2290 3243970808 80 81 gi|212681403|ref|NC_011556.1| 2008 3243973202 80 81 gi|212681415|ref|NC_011557.1| 1783 3243975311 80 81 gi|29028563|ref|NC_004615.1| 43604 3243977188 80 81 gi|28876263|ref|NC_004586.1| 34419 3244021420 80 81 gi|182682799|ref|NC_010583.1| 111382 3244056344 80 81 gi|294719514|ref|NC_009029.2| 10874 3244169182 80 81 gi|294768475|ref|NC_006962.2| 7800 3244180287 80 81 gi|294768540|ref|NC_009028.2| 10755 3244188246 80 81 gi|134288739|ref|NC_009234.1| 35741 3244199222 80 81 gi|134288688|ref|NC_009236.1| 36690 3244235497 80 81 gi|134288788|ref|NC_009237.1| 37446 3244272732 80 81 gi|258549709|ref|NC_013225.1| 3804 3244310732 80 81 gi|258549711|ref|NC_013226.1| 3870 3244314669 80 81 gi|258549713|ref|NC_013227.1| 2251 3244318673 80 81 gi|258549715|ref|NC_013228.1| 2127 3244321038 80 81 gi|258549717|ref|NC_013229.1| 3888 3244323277 80 81 gi|258549719|ref|NC_013230.1| 2241 3244327299 80 81 gi|258549721|ref|NC_013231.1| 1368 3244329654 80 81 gi|258549723|ref|NC_013232.1| 1331 3244331125 80 81 gi|258549725|ref|NC_013233.1| 1198 3244332558 80 81 gi|258549727|ref|NC_013234.1| 1098 3244333856 80 81 gi|237643549|ref|NC_012672.1| 126770 3244335054 80 81 gi|157952304|ref|NC_009898.1| 368683 3244463498 80 81 gi|50313241|ref|NC_001491.2| 150224 3244836857 80 81 gi|224020395|ref|NC_001664.2| 159322 3244989028 80 81 gi|51874225|ref|NC_001716.2| 153080 3245150409 80 81 gi|9629267|ref|NC_001798.1| 154746 3245305469 80 81 gi|146261990|ref|NC_001826.2| 119451 3245462218 80 81 gi|9629732|ref|NC_001844.1| 145597 3245583229 80 81 gi|125745044|ref|NC_002229.3| 177874 3245730715 80 81 gi|10834856|ref|NC_002577.1| 164270 3245910881 80 81 gi|12084824|ref|NC_002641.1| 159160 3246077276 80 81 gi|126882977|ref|NC_002686.2| 124784 3246238503 80 81 gi|20026600|ref|NC_003521.1| 241087 3246364915 80 81 gi|30984428|ref|NC_004812.1| 156789 3246609086 80 81 gi|38638196|ref|NC_005264.1| 163025 3246767906 80 81 gi|51557483|ref|NC_006151.1| 143461 3246933035 80 81 gi|56694721|ref|NC_006560.1| 150715 3247078366 80 81 gi|83722567|ref|NC_007653.1| 156487 3247231034 80 81 gi|139472801|ref|NC_009333.1| 137969 3247389546 80 81 gi|216905852|ref|NC_011644.1| 148371 3247529308 80 81 gi|9631135|ref|NC_001977.1| 6035 3247679602 80 81 gi|9632405|ref|NC_002066.1| 8832 3247685774 80 81 gi|20451021|ref|NC_003784.1| 8550 3247694787 80 81 gi|51555744|ref|NC_006148.1| 4432 3247703510 80 81 gi|56407666|ref|NC_006499.1| 1323 3247708086 80 81 gi|56407668|ref|NC_006500.1| 1504 3247709487 80 81 gi|56418533|ref|NC_006501.1| 1787 3247711071 80 81 gi|56407670|ref|NC_006502.1| 2046 3247712942 80 81 gi|56407672|ref|NC_006503.1| 2185 3247715075 80 81 gi|80160664|ref|NC_007586.1| 2242 3247717369 80 81 gi|80160784|ref|NC_007587.1| 1395 3247719721 80 81 gi|229604924|ref|NC_012662.1| 43931 3247721200 80 81 gi|9629650|ref|NC_001834.1| 9264 3247765746 80 81 gi|9630733|ref|NC_001946.1| 8372 3247775203 80 81 gi|9630816|ref|NC_001962.1| 128413 3247783742 80 81 gi|9634221|ref|NC_002169.1| 135611 3247913830 80 81 gi|10257473|ref|NC_002543.1| 3080 3248051212 80 81 gi|14602241|ref|NC_002816.1| 123500 3248054407 80 81 gi|14602460|ref|NC_002817.1| 2767 3248179531 80 81 gi|15187162|ref|NC_003059.1| 8072 3248182412 80 81 gi|16156223|ref|NC_003077.1| 8821 3248190658 80 81 gi|18314284|ref|NC_003369.1| 5964 3248199657 80 81 gi|18450263|ref|NC_003378.1| 7767 3248205771 80 81 gi|19774242|ref|NC_003487.1| 3762 3248213708 80 81 gi|20069879|ref|NC_003529.1| 155060 3248217592 80 81 gi|20451028|ref|NC_003783.1| 9010 3248374653 80 81 gi|20522142|ref|NC_003801.1| 2363 3248383857 80 81 gi|27754751|ref|NC_004162.2| 11826 3248386315 80 81 gi|23238143|ref|NC_004206.1| 946 3248398373 80 81 gi|56403990|ref|NC_006497.1| 736 3248399419 80 81 gi|56403993|ref|NC_006498.1| 966 3248400253 80 81 gi|12175745|ref|NC_002645.1| 27317 3248401302 80 81 gi|9634957|ref|NC_002195.1| 2915 3248429032 80 81 gi|29502191|ref|NC_002076.2| 3852 3248432051 80 81 gi|134133206|ref|NC_009225.1| 3245 3248436025 80 81 gi|9635795|ref|NC_002501.1| 26163 3248439375 80 81 gi|14780876|ref|NC_003005.1| 10205 3248465934 80 81 gi|9630807|ref|NC_001961.1| 15428 3248476365 80 81 gi|295413830|ref|NC_014072.1| 2064 3248492058 80 81 gi|295413834|ref|NC_014073.1| 3629 3248494217 80 81 gi|295413915|ref|NC_014068.1| 2910 3248497965 80 81 gi|295413918|ref|NC_014074.1| 3729 3248500981 80 81 gi|295413923|ref|NC_014075.1| 3759 3248504826 80 81 gi|295413928|ref|NC_014076.1| 3770 3248508701 80 81 gi|295413933|ref|NC_014069.1| 3690 3248512587 80 81 gi|295413936|ref|NC_014070.1| 2878 3248516396 80 81 gi|295413940|ref|NC_014071.1| 2797 3248519382 80 81 gi|295413944|ref|NC_014077.1| 3899 3248522283 80 81 gi|295413947|ref|NC_014078.1| 3808 3248526300 80 81 gi|295413950|ref|NC_014079.1| 3798 3248530225 80 81 gi|295413954|ref|NC_014080.1| 3736 3248534139 80 81 gi|295413958|ref|NC_014081.1| 3748 3248537990 80 81 gi|295413965|ref|NC_014082.1| 2952 3248541858 80 81 gi|295413968|ref|NC_014083.1| 3763 3248544916 80 81 gi|295413972|ref|NC_014084.1| 3790 3248548795 80 81 gi|295413977|ref|NC_014085.1| 3371 3248552707 80 81 gi|295413982|ref|NC_014086.1| 2765 3248556194 80 81 gi|295413991|ref|NC_014087.1| 3718 3248559072 80 81 gi|295441838|ref|NC_014099.1| 16622 3248562925 80 81 gi|295441873|ref|NC_014088.1| 2897 3248579828 80 81 gi|295441877|ref|NC_014089.1| 2908 3248582835 80 81 gi|295441881|ref|NC_014090.1| 2785 3248585853 80 81 gi|295441884|ref|NC_014091.1| 3818 3248588742 80 81 gi|295441891|ref|NC_014093.1| 3253 3248592681 80 81 gi|295441896|ref|NC_014094.1| 3705 3248596043 80 81 gi|295441901|ref|NC_014095.1| 2897 3248599868 80 81 gi|295441905|ref|NC_014096.1| 3787 3248602871 80 81 gi|295441908|ref|NC_014097.1| 2856 3248606779 80 81 gi|296006053|ref|NC_014130.1| 2611 3248609750 80 81 gi|296006059|ref|NC_014128.1| 2573 3248612473 80 81 gi|296006066|ref|NC_014066.1| 2612 3248615165 80 81 gi|296006072|ref|NC_014067.1| 2582 3248617896 80 81 gi|21326227|ref|NC_003971.1| 457 3248620600 80 81 gi|296011096|ref|NC_014140.1| 2768 3248621137 80 81 gi|55925641|ref|NC_006458.1| 781 3248624030 80 81 gi|296040240|ref|NC_014141.1| 2708 3248624906 80 81 gi|296040248|ref|NC_014142.1| 2647 3248627733 80 81 gi|296040251|ref|NC_014143.1| 7737 3248630501 80 81 gi|55733701|ref|NC_006433.1| 1701 3248638418 80 81 gi|55733703|ref|NC_006435.1| 6533 3248640216 80 81 gi|256352170|ref|NC_013116.1| 2166 3248646941 80 81 gi|9632336|ref|NC_002035.1| 3050 3248649211 80 81 gi|9627246|ref|NC_001574.1| 7161 3248652372 80 81 gi|281416278|ref|NC_013647.1| 41119 3248659693 80 81 gi|62327407|ref|NC_006944.1| 15450 3248701386 80 81 gi|9634968|ref|NC_002199.1| 17904 3248717097 80 81 gi|298103485|ref|NC_014229.1| 37068 3248735301 80 81 gi|41057593|ref|NC_005339.1| 16650 3248772894 80 81 gi|298200953|ref|NC_014244.1| 1203 3248789825 80 81 gi|298200955|ref|NC_014245.1| 808 3248791116 80 81 gi|298200958|ref|NC_014243.1| 1231 3248792007 80 81 gi|298200960|ref|NC_014242.1| 1316 3248793326 80 81 gi|298200990|ref|NC_014241.1| 2068 3248794731 80 81 gi|298201177|ref|NC_014240.1| 2076 3248796897 80 81 gi|298201179|ref|NC_014239.1| 2327 3248799071 80 81 gi|298201181|ref|NC_014238.1| 3848 3248801500 80 81 gi|298201183|ref|NC_014237.1| 3903 3248805469 80 81 gi|298201185|ref|NC_014236.1| 3947 3248809493 80 81 gi|30018262|ref|NC_004730.1| 4507 3248813571 80 81 gi|298531304|ref|NC_014252.1| 9750 3248818197 80 81 gi|9627947|ref|NC_001630.1| 5144 3248828134 80 81 gi|23334597|ref|NC_004284.1| 5908 3248833416 80 81 gi|14336454|ref|NC_002803.1| 11019 3248839475 80 81 gi|34610114|ref|NC_005093.1| 11034 3248850698 80 81 gi|41057731|ref|NC_005348.1| 2773 3248861945 80 81 gi|46402151|ref|NC_005860.1| 2925 3248864824 80 81 gi|48696557|ref|NC_005889.1| 4693 3248867863 80 81 gi|48696991|ref|NC_005892.1| 17663 3248872700 80 81 gi|50234106|ref|NC_005975.1| 12133 3248890650 80 81 gi|51593841|ref|NC_006147.2| 5132 3248903006 80 81 gi|56698739|ref|NC_006555.1| 5039 3248908283 80 81 gi|62362146|ref|NC_006951.1| 7428 3248913473 80 81 gi|9626692|ref|NC_001479.1| 7835 3248921067 80 81 gi|9627420|ref|NC_001600.1| 4041 3248929078 80 81 gi|9628918|ref|NC_001729.1| 4726 3248933243 80 81 gi|9626920|ref|NC_002063.1| 5284 3248938102 80 81 gi|9628596|ref|NC_002064.1| 5241 3248943526 80 81 gi|124484600|ref|NC_003607.2| 5179 3248948919 80 81 gi|20373121|ref|NC_003725.1| 2964 3248954239 80 81 gi|20522136|ref|NC_003809.1| 2939 3248957317 80 81 gi|20564172|ref|NC_003823.1| 6099 3248960365 80 81 gi|38371712|ref|NC_005219.1| 3616 3248966602 80 81 gi|38371707|ref|NC_005221.1| 1720 3248970327 80 81 gi|48696977|ref|NC_005883.1| 5310 3248972144 80 81 gi|51949968|ref|NC_006263.1| 4682 3248977609 80 81 gi|52220883|ref|NC_006275.1| 1955 3248982431 80 81 gi|227122443|ref|NC_012585.1| 2896 3248984492 80 81 gi|294872884|ref|NC_014038.1| 9965 3248987506 80 81 gi|9629914|ref|NC_001870.1| 10000 3248997678 80 81 gi|38018060|ref|NC_005148.1| 1768 3249007871 80 81 gi|281199644|ref|NC_013594.1| 37235 3249009733 80 81 gi|124484641|ref|NC_008956.1| 3153 3249047526 80 81 gi|124484635|ref|NC_008954.1| 4351 3249050812 80 81 gi|124484622|ref|NC_008949.1| 3510 3249055310 80 81 gi|124484620|ref|NC_008948.1| 4442 3249058957 80 81 gi|258657512|ref|NC_013258.1| 8271 3249063543 80 81 gi|258676964|ref|NC_013259.1| 7913 3249072006 80 81 gi|270281785|ref|NC_013587.1| 15684 3249080100 80 81 gi|270281819|ref|NC_013588.1| 17602 3249096063 80 81 gi|301173441|ref|NC_014325.1| 9741 3249113954 80 81 gi|301173451|ref|NC_014327.1| 9745 3249123892 80 81 gi|9630660|ref|NC_001927.1| 961 3249133834 80 81 gi|72537515|ref|NC_007339.1| 2736 3249134896 80 81 gi|302317577|ref|NC_014361.1| 5232 3249137765 80 81 gi|302317862|ref|NC_014357.1| 6085 3249143164 80 81 gi|302317586|ref|NC_014359.1| 7951 3249149404 80 81 gi|302317583|ref|NC_014360.1| 8086 3249157531 80 81 gi|302371213|ref|NC_014373.1| 18940 3249165789 80 81 gi|289522102|ref|NC_013920.1| 7148 3249185035 80 81 gi|302425257|ref|NC_014380.1| 2628 3249192356 80 81 gi|302425263|ref|NC_014381.1| 2607 3249195100 80 81 gi|302393080|ref|NC_004914.2| 62706 3249197813 80 81 gi|41057569|ref|NC_005341.1| 6034 3249261377 80 81 gi|302596924|ref|NC_014395.1| 1690 3249267569 80 81 gi|302596922|ref|NC_014396.1| 3885 3249269363 80 81 gi|302596920|ref|NC_014397.1| 6404 3249273379 80 81 gi|254688376|ref|NC_012932.1| 11064 3249279929 80 81 gi|259493850|ref|NC_006963.2| 7916 3249291225 80 81 gi|212499466|ref|NC_011546.1| 8913 3249299323 80 81 gi|242916041|ref|NC_012910.1| 8556 3249308425 80 81 gi|239918958|ref|NC_012805.1| 342 3249317159 80 81 gi|86476036|ref|NC_007193.2| 6000 3249317587 80 81 gi|23238127|ref|NC_004211.1| 3747 3249323733 80 81 gi|23238129|ref|NC_004217.1| 3048 3249327598 80 81 gi|23238131|ref|NC_004218.1| 2400 3249330756 80 81 gi|23238133|ref|NC_004219.1| 2038 3249333257 80 81 gi|23238135|ref|NC_004220.1| 1716 3249335392 80 81 gi|23238137|ref|NC_004221.1| 1671 3249337201 80 81 gi|72537512|ref|NC_007338.1| 2719 3249338983 80 81 gi|303291522|ref|NC_014407.1| 4952 3249341803 80 81 gi|303291528|ref|NC_014406.1| 4926 3249346884 80 81 gi|9633069|ref|NC_000898.1| 162114 3249351939 80 81 gi|14717136|ref|NC_002984.1| 2632 3249516163 80 81 gi|14717141|ref|NC_002985.1| 2600 3249518911 80 81 gi|52630351|ref|NC_006308.1| 2265 3249521640 80 81 gi|52630353|ref|NC_006309.1| 2130 3249524030 80 81 gi|52630355|ref|NC_006310.1| 1968 3249526283 80 81 gi|52630357|ref|NC_006311.1| 1807 3249528372 80 81 gi|52673229|ref|NC_006312.1| 1125 3249530298 80 81 gi|211910015|ref|NC_006306.2| 935 3249531533 80 81 gi|52630349|ref|NC_006307.1| 2325 3249532575 80 81 gi|41057586|ref|NC_005338.1| 2761 3249535006 80 81 gi|20806024|ref|NC_003865.1| 2663 3249537889 80 81 gi|302317866|ref|NC_014358.1| 4944 3249540663 80 81 gi|304360662|ref|NC_014457.1| 59199 3249545743 80 81 gi|20564186|ref|NC_003832.1| 8917 3249605772 80 81 gi|20564188|ref|NC_003841.1| 4880 3249614891 80 81 gi|20564191|ref|NC_003843.1| 3534 3249619922 80 81 gi|9695415|ref|NC_002200.1| 15384 3249623559 80 81 gi|9629378|ref|NC_001806.1| 152261 3249639202 80 81 gi|9629818|ref|NC_001847.1| 135301 3249793434 80 81 gi|20198505|ref|NC_002512.2| 230138 3249930494 80 81 gi|10140926|ref|NC_002531.1| 130608 3250163582 80 81 gi|14250967|ref|NC_002794.1| 195859 3250295892 80 81 gi|51556461|ref|NC_006150.1| 221454 3250494270 80 81 gi|213159161|ref|NC_011587.1| 232678 3250718562 80 81 gi|12280941|ref|NC_001792.2| 1758 3250954217 80 81 gi|304443238|ref|NC_014460.1| 41207 3250956073 80 81 gi|304522114|ref|NC_014469.1| 7181 3250997871 80 81 gi|9627014|ref|NC_001514.1| 8785 3251005221 80 81 gi|167046005|ref|NC_010313.1| 2803 3251014203 80 81 gi|304633675|ref|NC_014470.1| 29276 3251017123 80 81 gi|306478690|ref|NC_014482.1| 2763 3251046837 80 81 gi|306478704|ref|NC_014474.1| 8126 3251049703 80 81 gi|306478716|ref|NC_014320.1| 6171 3251058000 80 81 gi|11038431|ref|NC_001875.2| 131995 3251064322 80 81 gi|306478722|ref|NC_014324.1| 2981 3251198038 80 81 gi|9628437|ref|NC_001676.1| 7759 3251201127 80 81 gi|22789222|ref|NC_004161.1| 18891 3251209048 80 81 gi|118725119|ref|NC_008614.1| 6485 3251228246 80 81 gi|302315369|ref|NC_014372.1| 18935 3251234869 80 81 gi|255694008|ref|NC_013075.1| 7492 3251254122 80 81 gi|255694013|ref|NC_013076.1| 5109 3251261789 80 81 gi|62327499|ref|NC_006935.1| 1348 3251267064 80 81 gi|9630691|ref|NC_001936.1| 2634 3251268516 80 81 gi|9630696|ref|NC_001937.1| 2607 3251271270 80 81 gi|304422916|ref|NC_014468.1| 4286 3251273989 80 81 gi|296005646|ref|NC_014137.1| 9505 3251278402 80 81 gi|307346982|ref|NC_014521.1| 672 3251288122 80 81 gi|307346984|ref|NC_014520.1| 765 3251288899 80 81 gi|307346987|ref|NC_014519.1| 1025 3251289769 80 81 gi|307346989|ref|NC_014518.1| 1026 3251290902 80 81 gi|307346991|ref|NC_014517.1| 1242 3251292036 80 81 gi|307346993|ref|NC_014516.1| 1353 3251293389 80 81 gi|307346995|ref|NC_014515.1| 1872 3251294854 80 81 gi|307346997|ref|NC_014514.1| 2104 3251296845 80 81 gi|307346999|ref|NC_014513.1| 2366 3251299071 80 81 gi|307347001|ref|NC_014512.1| 2801 3251301562 80 81 gi|307347003|ref|NC_014511.1| 3274 3251304494 80 81 gi|304282485|ref|NC_014411.1| 8035 3251307870 80 81 gi|304282472|ref|NC_014412.1| 7641 3251316067 80 81 gi|304282459|ref|NC_014413.1| 7678 3251323865 80 81 gi|289183404|ref|NC_012729.2| 5104 3251331705 80 81 gi|307563838|ref|NC_014536.1| 9870 3251336956 80 81 gi|77020112|ref|NC_006356.2| 36012 3251347022 80 81 gi|188572155|ref|NC_010714.1| 2757 3251383574 80 81 gi|188572148|ref|NC_010713.1| 2767 3251386455 80 81 gi|151266263|ref|NC_009646.1| 2649 3251389343 80 81 gi|195535989|ref|NC_011096.1| 2794 3251392116 80 81 gi|261420948|ref|NC_013413.1| 2751 3251395031 80 81 gi|226202299|ref|NC_012492.1| 2752 3251397900 80 81 gi|45445708|ref|NC_005812.1| 2752 3251400785 80 81 gi|45445705|ref|NC_005811.1| 2752 3251403670 80 81 gi|304360752|ref|NC_014446.1| 2608 3251406555 80 81 gi|304360749|ref|NC_014447.1| 2578 3251409294 80 81 gi|9626958|ref|NC_001501.1| 8332 3251411981 80 81 gi|308125292|ref|NC_014546.1| 6643 3251420490 80 81 gi|308125297|ref|NC_014547.1| 2762 3251427306 80 81 gi|308814346|ref|NC_014593.1| 3431 3251430174 80 81 gi|308814351|ref|NC_014595.1| 170605 3251433716 80 81 gi|309259994|ref|NC_014609.1| 7510 3251606540 80 81 gi|295984040|ref|NC_014126.1| 6155 3251614209 80 81 gi|309949148|ref|NC_014608.1| 4003 3251620510 80 81 gi|310288304|ref|NC_014631.1| 3065 3251624643 80 81 gi|226232349|ref|NC_012493.1| 1349 3251627832 80 81 gi|189009855|ref|NC_010732.1| 5920 3251629276 80 81 gi|310698439|ref|NC_001526.2| 7905 3251635347 80 81 gi|18959285|ref|NC_003414.1| 1360 3251643461 80 81 gi|193061633|ref|NC_011024.1| 2771 3251644914 80 81 gi|308125285|ref|NC_014545.1| 5866 3251647796 80 81 gi|310830989|ref|NC_014637.1| 617453 3251653821 80 81 gi|311788788|ref|NC_014648.1| 7543 3252279077 80 81 gi|311788792|ref|NC_014647.1| 2754 3252286805 80 81 gi|311992494|ref|NC_014660.1| 167716 3252289667 80 81 gi|311992750|ref|NC_014661.1| 164093 3252459554 80 81 gi|311992992|ref|NC_014662.1| 165540 3252625773 80 81 gi|311993272|ref|NC_014663.1| 169947 3252793456 80 81 gi|304373555|ref|NC_014467.1| 176788 3252965602 80 81 gi|310722466|ref|NC_014636.1| 225268 3253144671 80 81 gi|312126258|ref|NC_014665.1| 5905 3253372824 80 81 gi|306478697|ref|NC_014481.1| 3427 3253378872 80 81 gi|52627071|ref|NC_005839.2| 131680 3253382418 80 81 gi|163954976|ref|NC_010191.1| 185373 3253515816 80 81 gi|229342011|ref|NC_012636.1| 3776 3253703580 80 81 gi|295840787|ref|NC_014129.1| 361 3253707477 80 81 gi|255683134|ref|NC_013036.1| 158091 3253707912 80 81 gi|262166845|ref|NC_013443.1| 6534 3253868045 80 81 gi|9629183|ref|NC_001777.1| 3684 3253874732 80 81 gi|312192953|ref|NC_014480.2| 3322 3253878531 80 81 gi|20153346|ref|NC_003601.1| 5283 3253881969 80 81 gi|23464593|ref|NC_003467.2| 3671 3253887388 80 81 gi|23464594|ref|NC_003468.2| 6562 3253891174 80 81 gi|159159425|ref|NC_002654.2| 131405 3253897912 80 81 gi|49169782|ref|NC_005831.2| 27553 3254031030 80 81 gi|46393298|ref|NC_005849.1| 2922 3254059005 80 81 gi|238801929|ref|NC_012754.1| 3933 3254062047 80 81 gi|238801931|ref|NC_012755.1| 2792 3254066113 80 81 gi|301349453|ref|NC_014336.1| 7354 3254069010 80 81 gi|312164872|ref|NC_014522.1| 3897 3254076533 80 81 gi|312164870|ref|NC_014523.1| 2794 3254080556 80 81 gi|312166200|ref|NC_014524.1| 1936 3254083462 80 81 gi|312164874|ref|NC_014525.1| 1731 3254085500 80 81 gi|312164876|ref|NC_014526.1| 1722 3254087330 80 81 gi|312164878|ref|NC_014527.1| 1666 3254089151 80 81 gi|312164880|ref|NC_014528.1| 1181 3254090915 80 81 gi|312164887|ref|NC_014529.1| 1172 3254092188 80 81 gi|312164884|ref|NC_014530.1| 1056 3254093452 80 81 gi|312164882|ref|NC_014531.1| 703 3254094600 80 81 gi|45239034|ref|NC_005790.1| 7355 3254095379 80 81 gi|312234404|ref|NC_014707.1| 2736 3254102944 80 81 gi|312234429|ref|NC_014092.2| 2735 3254105787 80 81 gi|255983864|ref|NC_013102.1| 2748 3254108635 80 81 gi|300116737|ref|NC_014321.1| 17666 3254111501 80 81 gi|300116753|ref|NC_014322.1| 22743 3254129471 80 81 gi|312274939|ref|NC_014717.1| 3571 3254152598 80 81 gi|312274941|ref|NC_014716.1| 3618 3254156313 80 81 gi|312274943|ref|NC_014715.1| 3815 3254160076 80 81 gi|312274945|ref|NC_014714.1| 4500 3254164038 80 81 gi|312274947|ref|NC_014713.1| 1798 3254168695 80 81 gi|312274949|ref|NC_014712.1| 1900 3254170615 80 81 gi|312274952|ref|NC_014710.1| 2176 3254172638 80 81 gi|312274955|ref|NC_014711.1| 1928 3254174941 80 81 gi|312274957|ref|NC_014709.1| 2651 3254176993 80 81 gi|312274959|ref|NC_014708.1| 3167 3254179777 80 81 gi|110645916|ref|NC_001401.2| 4679 3254183059 80 81 gi|61806401|ref|NC_006882.1| 44970 3254187873 80 81 gi|167600373|ref|NC_010325.1| 45625 3254233478 80 81 gi|167600442|ref|NC_010326.1| 43548 3254279746 80 81 gi|304373832|ref|NC_014462.1| 3554 3254323930 80 81 gi|304373826|ref|NC_014463.1| 3074 3254327620 80 81 gi|304373828|ref|NC_014464.1| 3043 3254330824 80 81 gi|304373830|ref|NC_014465.1| 3250 3254333997 80 81 gi|9626482|ref|NC_001442.1| 4697 3254337354 80 81 gi|23334602|ref|NC_004285.1| 4176 3254342185 80 81 gi|9964314|ref|NC_002520.1| 232392 3254346494 80 81 gi|9627521|ref|NC_001611.1| 185578 3254581851 80 81 gi|9626726|ref|NC_001488.1| 8952 3254769824 80 81 gi|312839924|ref|NC_001885.2| 8088 3254778962 80 81 gi|313122763|ref|NC_014730.1| 8127 3254787225 80 81 gi|313122770|ref|NC_014739.1| 2605 3254795525 80 81 gi|313139312|ref|NC_014740.1| 2582 3254798238 80 81 gi|313139317|ref|NC_014742.1| 10820 3254800922 80 81 gi|313493538|ref|NC_014743.1| 5086 3254811950 80 81 gi|313493544|ref|NC_014745.1| 2764 3254817178 80 81 gi|313493555|ref|NC_014748.1| 5639 3254820059 80 81 gi|22138122|ref|NC_004104.1| 8033 3254825845 80 81 gi|168164403|ref|NC_010352.1| 2746 3254834051 80 81 gi|187903037|ref|NC_010671.1| 124279 3254836929 80 81 gi|240017693|ref|NC_011052.2| 2780 3254962845 80 81 gi|283484027|ref|NC_013022.2| 2791 3254965734 80 81 gi|262530236|ref|NC_013465.1| 2807 3254968644 80 81 gi|262530243|ref|NC_013467.1| 2814 3254971574 80 81 gi|282598772|ref|NC_013698.1| 58652 3254974495 80 81 gi|30844336|ref|NC_003663.2| 224499 3255033941 80 81 gi|20279540|ref|NC_003696.1| 4349 3255261316 80 81 gi|20279542|ref|NC_003697.1| 3934 3255265789 80 81 gi|20279544|ref|NC_003698.1| 3585 3255269842 80 81 gi|20279546|ref|NC_003699.1| 3156 3255273541 80 81 gi|20279548|ref|NC_003700.1| 2398 3255276806 80 81 gi|20279550|ref|NC_003701.1| 2178 3255279303 80 81 gi|20279552|ref|NC_003702.1| 2139 3255281578 80 81 gi|20279554|ref|NC_003703.1| 2028 3255283813 80 81 gi|20279556|ref|NC_003704.1| 1884 3255285936 80 81 gi|20279559|ref|NC_003705.1| 1879 3255287914 80 81 gi|20279561|ref|NC_003706.1| 1002 3255289887 80 81 gi|20279563|ref|NC_003707.1| 678 3255290972 80 81 gi|27151468|ref|NC_003907.2| 46012 3255291726 80 81 gi|313767999|ref|NC_014765.1| 198519 3255338397 80 81 gi|313768203|ref|NC_014767.1| 184095 3255539480 80 81 gi|41057066|ref|NC_005336.1| 139962 3255725934 80 81 gi|313843958|ref|NC_004764.2| 4981 3255867733 80 81 gi|313843970|ref|NC_014766.1| 194022 3255872861 80 81 gi|225927568|ref|NC_012486.1| 7227 3256069387 80 81 gi|312281379|ref|NC_006883.2| 252401 3256076782 80 81 gi|312281391|ref|NC_006884.2| 178249 3256332416 80 81 gi|314953944|ref|NC_014793.1| 10436 3256512965 80 81 gi|294661423|ref|NC_014036.1| 174436 3256523602 80 81 gi|225927560|ref|NC_012485.1| 7346 3256700297 80 81 gi|315192962|ref|NC_002306.3| 29355 3256707819 80 81 gi|254728910|ref|NC_013013.1| 1378 3256737645 80 81 gi|254728906|ref|NC_013011.1| 1315 3256739149 80 81 gi|49487495|ref|NC_005954.1| 1377 3256740552 80 81 gi|302425254|ref|NC_014379.1| 1334 3256742050 80 81 gi|148828648|ref|NC_009564.1| 1378 3256743496 80 81 gi|184202004|ref|NC_010620.1| 1388 3256744980 80 81 gi|80159686|ref|NC_007581.1| 185683 3256746456 80 81 gi|58042841|ref|NC_005137.2| 131160 3256934542 80 81 gi|56121875|ref|NC_006494.1| 10112 3257067415 80 81 gi|68304288|ref|NC_007150.1| 8170 3257077732 80 81 gi|93007408|ref|NC_007967.1| 38194 3257086077 80 81 gi|254810663|ref|NC_013035.1| 7184 3257124822 80 81 gi|116326656|ref|NC_008524.1| 1380 3257132198 80 81 gi|218547381|ref|NC_011762.1| 1368 3257133700 80 81 gi|57790514|ref|NC_006632.1| 1350 3257135188 80 81 gi|77020110|ref|NC_007459.1| 1358 3257136658 80 81 gi|164564322|ref|NC_010235.1| 1361 3257138123 80 81 gi|62327280|ref|NC_006952.1| 1379 3257139593 80 81 gi|164519193|ref|NC_010236.1| 1370 3257141076 80 81 gi|270358403|ref|NC_013424.1| 1363 3257142566 80 81 gi|47270692|ref|NC_006289.1| 1343 3257144042 80 81 gi|164564320|ref|NC_010239.1| 1358 3257145492 80 81 gi|110084007|ref|NC_008237.1| 1358 3257146973 80 81 gi|32140175|ref|NC_004903.1| 1337 3257148453 80 81 gi|185357924|ref|NC_010619.1| 1196 3257149904 80 81 gi|148724441|ref|NC_009535.1| 1346 3257151212 80 81 gi|156151352|ref|NC_009740.1| 1349 3257152652 80 81 gi|167583553|ref|NC_010328.1| 1339 3257154130 80 81 gi|194268064|ref|NC_011051.1| 8032 3257155571 80 81 gi|9628574|ref|NC_001694.1| 7989 3257163776 80 81 gi|162135082|ref|NC_010116.1| 58663 3257171935 80 81 gi|281306659|ref|NC_013638.1| 43144 3257231404 80 81 gi|23216976|ref|NC_004197.1| 7276 3257275159 80 81 gi|9628445|ref|NC_001678.1| 8028 3257282601 80 81 gi|9627145|ref|NC_001531.1| 7746 3257290801 80 81 gi|317160469|ref|NC_014846.1| 1385 3257298761 80 81 gi|317160471|ref|NC_014845.1| 2739 3257300277 80 81 gi|317160968|ref|NC_014894.1| 2724 3257303160 80 81 gi|9627363|ref|NC_001591.1| 7560 3257305994 80 81 gi|317160975|ref|NC_014847.1| 2723 3257313757 80 81 gi|317160982|ref|NC_014895.1| 1373 3257316632 80 81 gi|317171909|ref|NC_014896.1| 1354 3257318134 80 81 gi|317453621|ref|NC_014897.1| 2744 3257319617 80 81 gi|318054196|ref|NC_014905.1| 9917 3257322458 80 81 gi|318054208|ref|NC_014906.1| 1356 3257332607 80 81 gi|318056034|ref|NC_014907.1| 1416 3257334077 80 81 gi|58532811|ref|NC_006820.1| 196280 3257335584 80 81 gi|319774833|ref|NC_014898.1| 10113 3257534386 80 81 gi|282599392|ref|NC_013691.1| 74901 3257544697 80 81 gi|282598847|ref|NC_013692.1| 72544 3257620606 80 81 gi|320339430|ref|NC_014977.1| 1183 3257694138 80 81 gi|320340134|ref|NC_014978.1| 3111 3257695417 80 81 gi|320202726|ref|NC_014968.1| 2799 3257698673 80 81 gi|189311143|ref|NC_010798.1| 2734 3257701574 80 81 gi|289163350|ref|NC_013774.1| 1767 3257704420 80 81 gi|197261329|ref|NC_011165.1| 64427 3257706281 80 81 gi|197261417|ref|NC_011166.1| 66530 3257771585 80 81 gi|218457801|ref|NC_011756.1| 66390 3257839016 80 81 gi|219523869|ref|NC_011810.1| 65764 3257906306 80 81 gi|9633613|ref|NC_000939.1| 4354 3257972959 80 81 gi|15029533|ref|NC_003031.1| 7687 3257977446 80 81 gi|18138525|ref|NC_003347.1| 7564 3257985299 80 81 gi|18138516|ref|NC_003348.1| 7879 3257993041 80 81 gi|18450258|ref|NC_003381.1| 7389 3258001089 80 81 gi|18677787|ref|NC_003397.1| 9992 3258008643 80 81 gi|18652416|ref|NC_003399.1| 9324 3258018829 80 81 gi|19352426|ref|NC_003434.1| 2746 3258028340 80 81 gi|20143432|ref|NC_003557.1| 8363 3258031188 80 81 gi|20143455|ref|NC_003561.1| 996 3258039736 80 81 gi|20143461|ref|NC_003564.1| 1020 3258040825 80 81 gi|20153395|ref|NC_003610.1| 6514 3258041937 80 81 gi|20889365|ref|NC_003878.1| 6513 3258048615 80 81 gi|21321727|ref|NC_003930.1| 11919 3258055287 80 81 gi|21427635|ref|NC_004011.1| 10142 3258067427 80 81 gi|21427645|ref|NC_004012.1| 8451 3258077758 80 81 gi|22122273|ref|NC_004086.1| 35450 3258086403 80 81 gi|23343515|ref|NC_004295.1| 5028 3258122366 80 81 gi|23395818|ref|NC_004300.1| 2757 3258127536 80 81 gi|29028717|ref|NC_004618.1| 2787 3258130403 80 81 gi|29294545|ref|NC_004651.1| 2714 3258133302 80 81 gi|30023513|ref|NC_004733.1| 1348 3258136145 80 81 gi|71480055|ref|NC_004830.2| 10140 3258137577 80 81 gi|33300809|ref|NC_005052.1| 1344 3258147947 80 81 gi|33438957|ref|NC_005057.1| 1367 3258149398 80 81 gi|33438959|ref|NC_005058.1| 1363 3258150883 80 81 gi|33438961|ref|NC_005059.1| 1363 3258152367 80 81 gi|33438963|ref|NC_005060.1| 1370 3258153843 80 81 gi|37674199|ref|NC_005138.1| 8394 3258155301 80 81 gi|38707562|ref|NC_005283.1| 15702 3258163869 80 81 gi|47177087|ref|NC_005875.1| 667 3258179863 80 81 gi|49248517|ref|NC_005947.1| 4302 3258180621 80 81 gi|51980126|ref|NC_006268.1| 75294 3258185047 80 81 gi|52093349|ref|NC_006271.1| 7034 3258261353 80 81 gi|155573622|ref|NC_006273.2| 235646 3258268543 80 81 gi|71037362|ref|NC_006383.2| 15948 3258507215 80 81 gi|54646388|ref|NC_006384.1| 2735 3258523443 80 81 gi|55770802|ref|NC_006440.1| 1839 3258526303 80 81 gi|55770804|ref|NC_006441.1| 2002 3258528255 80 81 gi|57790516|ref|NC_006631.1| 2747 3258530366 80 81 gi|57753434|ref|NC_006633.1| 27346 3258533241 80 81 gi|57753428|ref|NC_006634.1| 14975 3258561022 80 81 gi|57753420|ref|NC_006635.1| 29874 3258576278 80 81 gi|57659152|ref|NC_006636.1| 15876 3258606619 80 81 gi|57659187|ref|NC_006637.1| 14489 3258622787 80 81 gi|57659250|ref|NC_006641.1| 15959 3258637551 80 81 gi|57753400|ref|NC_006642.1| 14286 3258653804 80 81 gi|57659287|ref|NC_006643.1| 12903 3258668363 80 81 gi|57753395|ref|NC_006644.1| 16103 3258681522 80 81 gi|57659323|ref|NC_006645.1| 21388 3258697921 80 81 gi|57753388|ref|NC_006646.1| 31972 3258719671 80 81 gi|57659365|ref|NC_006647.1| 8785 3258752137 80 81 gi|57659393|ref|NC_006648.1| 15158 3258761126 80 81 gi|57753371|ref|NC_006650.1| 18768 3258776568 80 81 gi|57659440|ref|NC_006651.1| 19161 3258795665 80 81 gi|57659485|ref|NC_006653.1| 26062 3258815160 80 81 gi|57659519|ref|NC_006654.1| 13597 3258841642 80 81 gi|57659549|ref|NC_006655.1| 15279 3258855503 80 81 gi|57659582|ref|NC_006656.1| 12682 3258871067 80 81 gi|57659613|ref|NC_006657.1| 19820 3258884002 80 81 gi|57659643|ref|NC_006658.1| 30655 3258904164 80 81 gi|57659681|ref|NC_006659.1| 41573 3258935297 80 81 gi|57659716|ref|NC_006660.1| 20197 3258977484 80 81 gi|60683946|ref|NC_006876.1| 2768 3258998012 80 81 gi|57659745|ref|NC_006661.1| 11186 3259000909 80 81 gi|57659767|ref|NC_006662.1| 17477 3259012329 80 81 gi|68989216|ref|NC_007180.1| 9723 3259030098 80 81 gi|77734835|ref|NC_007210.2| 2758 3259040023 80 81 gi|71658834|ref|NC_007211.1| 2745 3259042901 80 81 gi|71658841|ref|NC_007212.1| 1347 3259045775 80 81 gi|71658843|ref|NC_007213.1| 1355 3259047228 80 81 gi|76803354|ref|NC_007433.1| 10429 3259048675 80 81 gi|83571707|ref|NC_007638.1| 2757 3259059303 80 81 gi|83571705|ref|NC_007639.1| 1365 3259062183 80 81 gi|83571702|ref|NC_007640.1| 1384 3259063651 80 81 gi|83659771|ref|NC_007642.1| 12807 3259065131 80 81 gi|84663872|ref|NC_007711.1| 1354 3259078181 80 81 gi|85667885|ref|NC_007723.1| 2761 3259079638 80 81 gi|85662375|ref|NC_007725.1| 895 3259082538 80 81 gi|110835685|ref|NC_008266.1| 8539 3259083523 80 81 gi|113972271|ref|NC_008316.1| 2767 3259092254 80 81 gi|113972278|ref|NC_008317.1| 2784 3259095143 80 81 gi|114067525|ref|NC_008329.1| 2752 3259098041 80 81 gi|145321028|ref|NC_009354.1| 2753 3259100907 80 81 gi|148717842|ref|NC_009526.1| 43864 3259103772 80 81 gi|158345134|ref|NC_009936.1| 41593 3259148259 80 81 gi|159035665|ref|NC_009951.1| 5075 3259190449 80 81 gi|166153475|ref|NC_010289.1| 2572 3259195673 80 81 gi|189311148|ref|NC_010799.1| 2740 3259198342 80 81 gi|190336506|ref|NC_010832.1| 7212 3259201181 80 81 gi|190336494|ref|NC_010954.1| 9656 3259208551 80 81 gi|190336491|ref|NC_010955.1| 10207 3259218418 80 81 gi|208429855|ref|NC_011318.1| 38753 3259228824 80 81 gi|218148540|ref|NC_011703.1| 66235 3259268133 80 81 gi|225220072|ref|NC_012223.1| 39792 3259335275 80 81 gi|238821317|ref|NC_012756.1| 31276 3259375638 80 81 gi|242345571|ref|NC_012884.1| 31147 3259407378 80 81 gi|255928922|ref|NC_013085.1| 194454 3259438990 80 81 gi|9625551|ref|NC_001339.1| 4789 3259635953 80 81 gi|9625568|ref|NC_001344.1| 3027 3259640871 80 81 gi|9626041|ref|NC_001354.1| 7614 3259644011 80 81 gi|51014188|ref|NC_001411.2| 3106 3259651787 80 81 gi|9626597|ref|NC_001457.1| 7353 3259655006 80 81 gi|9626605|ref|NC_001458.1| 7348 3259662526 80 81 gi|9627257|ref|NC_001576.1| 7919 3259670041 80 81 gi|9627305|ref|NC_001583.1| 7855 3259678134 80 81 gi|9627327|ref|NC_001586.1| 7961 3259686163 80 81 gi|9627334|ref|NC_001587.1| 7723 3259694299 80 81 gi|9627389|ref|NC_001595.1| 8027 3259702193 80 81 gi|9627396|ref|NC_001596.1| 7434 3259710395 80 81 gi|9628654|ref|NC_001702.1| 8135 3259717993 80 81 gi|9628874|ref|NC_001721.1| 3699 3259726297 80 81 gi|9628900|ref|NC_001725.1| 7876 3259730119 80 81 gi|9628912|ref|NC_001728.1| 6618 3259738169 80 81 gi|9629518|ref|NC_001822.1| 3662 3259744940 80 81 gi|9630630|ref|NC_001914.1| 8002 3259748724 80 81 gi|20153377|ref|NC_003602.1| 7599 3259756892 80 81 gi|310286518|ref|NC_014630.1| 1331 3259764674 80 81 gi|86515321|ref|NC_003604.2| 7351 3259766087 80 81 gi|20153387|ref|NC_003608.1| 3911 3259773611 80 81 gi|20564204|ref|NC_003828.1| 2773 3259777657 80 81 gi|21328570|ref|NC_003982.1| 7734 3259780536 80 81 gi|21335364|ref|NC_003983.1| 8828 3259788440 80 81 gi|22711883|ref|NC_004144.1| 1400 3259797444 80 81 gi|29126650|ref|NC_004626.1| 2741 3259798936 80 81 gi|38371716|ref|NC_005222.1| 6533 3259801783 80 81 gi|38371722|ref|NC_005225.1| 6550 3259808469 80 81 gi|56410431|ref|NC_006296.2| 15882 3259815183 80 81 gi|55831391|ref|NC_006451.1| 355 3259831357 80 81 gi|56403986|ref|NC_006507.1| 1418 3259831788 80 81 gi|56403988|ref|NC_006508.1| 2375 3259833295 80 81 gi|284925104|ref|NC_007730.2| 2745 3259835781 80 81 gi|85813359|ref|NC_007735.1| 1331 3259838642 80 81 gi|115357968|ref|NC_008393.1| 9890 3259840065 80 81 gi|124249189|ref|NC_008824.1| 9816 3259850156 80 81 gi|166369054|ref|NC_010297.1| 1338 3259860199 80 81 gi|194322731|ref|NC_011058.1| 2584 3259861633 80 81 gi|233799733|ref|NC_012665.1| 2743 3259864341 80 81 gi|239740609|ref|NC_012789.1| 1384 3259867216 80 81 gi|255983871|ref|NC_013103.1| 1369 3259868705 80 81 gi|261181253|ref|NC_013396.1| 3942 3259870219 80 81 gi|261181412|ref|NC_013397.1| 2968 3259874338 80 81 gi|261181528|ref|NC_013398.1| 2768 3259877471 80 81 gi|261181650|ref|NC_013399.1| 1983 3259880401 80 81 gi|261181767|ref|NC_013400.1| 1803 3259882536 80 81 gi|261181857|ref|NC_013401.1| 1640 3259884489 80 81 gi|261181982|ref|NC_013402.1| 1162 3259886277 80 81 gi|261182061|ref|NC_013403.1| 1186 3259887581 80 81 gi|261182158|ref|NC_013404.1| 1143 3259888909 80 81 gi|261597712|ref|NC_013405.1| 810 3259890195 80 81 gi|270358405|ref|NC_013423.1| 1364 3259891099 80 81 gi|272569246|ref|NC_013593.1| 1387 3259892568 80 81 gi|281334030|ref|NC_013637.1| 1348 3259894059 80 81 gi|288855749|ref|NC_013800.1| 1344 3259895516 80 81 gi|298388366|ref|NC_014064.1| 9489 3259896946 80 81 gi|295137050|ref|NC_014065.1| 1370 3259906644 80 81 gi|296006062|ref|NC_014127.1| 6517 3259908110 80 81 gi|296005648|ref|NC_014138.1| 2653 3259914785 80 81 gi|296005654|ref|NC_014139.1| 2618 3259917548 80 81 gi|311788799|ref|NC_014646.1| 1351 3259920290 80 81 gi|9629508|ref|NC_001818.1| 3803 3259921727 80 81 gi|18652418|ref|NC_003400.1| 6985 3259925642 80 81 gi|315506976|ref|NC_014821.1| 9311 3259932784 80 81 gi|322688186|ref|NC_015115.1| 3893 3259942286 80 81 gi|190149257|ref|NC_010944.1| 6381 3259946305 80 81 gi|322840368|ref|NC_015051.1| 2860 3259952846 80 81 gi|322867240|ref|NC_015069.1| 3628 3259955815 80 81 gi|322867242|ref|NC_015070.1| 2653 3259959562 80 81 gi|38707974|ref|NC_005285.1| 4744 3259962328 80 81 gi|323148013|ref|NC_015124.1| 2740 3259967209 80 81 gi|323361056|ref|NC_015123.1| 15131 3259970079 80 81 gi|323361058|ref|NC_015122.1| 2625 3259985490 80 81 gi|253729529|ref|NC_012931.1| 5673 3259988225 80 81 gi|148747798|ref|NC_009235.2| 48674 3259994056 80 81 gi|194100415|ref|NC_011043.1| 41181 3260043408 80 81 gi|194100467|ref|NC_011038.1| 38677 3260085173 80 81 gi|323409485|ref|NC_015126.1| 3958 3260124413 80 81 gi|323409487|ref|NC_015127.1| 3829 3260128500 80 81 gi|323409489|ref|NC_015128.1| 3907 3260132456 80 81 gi|323409491|ref|NC_015129.1| 2283 3260136491 80 81 gi|323409493|ref|NC_015130.1| 2158 3260138882 80 81 gi|312162798|ref|NC_014567.1| 156742 3260141140 80 81 gi|148877235|ref|NC_009570.1| 1349 3260299943 80 81 gi|57659461|ref|NC_006652.1| 4981 3260301403 80 81 gi|318065901|ref|NC_014900.1| 40986 3260306518 80 81 gi|323714223|ref|NC_015131.1| 1996 3260348096 80 81 gi|323714225|ref|NC_015132.1| 1645 3260350196 80 81 gi|323714227|ref|NC_015133.1| 1324 3260351941 80 81 gi|323714229|ref|NC_015134.1| 1202 3260353361 80 81 gi|323714231|ref|NC_015135.1| 1192 3260354658 80 81 gi|255252682|ref|NC_013059.1| 40975 3260355935 80 81 gi|321496547|ref|NC_015049.1| 124335 3260397495 80 81 gi|21450040|ref|NC_004034.1| 4844 3260523462 80 81 gi|315570366|ref|NC_014822.1| 2797 3260528455 80 81 gi|318054194|ref|NC_014904.1| 9760 3260531363 80 81 gi|321961793|ref|NC_015043.1| 2679 3260541327 80 81 gi|321961770|ref|NC_015044.1| 2668 3260544122 80 81 gi|321961702|ref|NC_015045.1| 2717 3260546908 80 81 gi|321961748|ref|NC_015046.1| 2680 3260549741 80 81 gi|321961721|ref|NC_015047.1| 2637 3260552537 80 81 gi|321958405|ref|NC_015048.1| 2682 3260555291 80 81 gi|32140169|ref|NC_004911.1| 2328 3260558112 80 81 gi|282598706|ref|NC_013696.1| 42822 3260560545 80 81 gi|301173443|ref|NC_014326.1| 7510 3260603986 80 81 gi|307691262|ref|NC_014542.1| 2763 3260611666 80 81 gi|9628421|ref|NC_001669.1| 5243 3260614526 80 81 gi|20428559|ref|NC_003768.1| 1066 3260619912 80 81 gi|9627219|ref|NC_001552.1| 15384 3260621051 80 81 gi|9626945|ref|NC_001498.1| 15894 3260636688 80 81 gi|9627229|ref|NC_001560.1| 11161 3260652862 80 81 gi|302585372|ref|NC_009424.4| 5159 3260664239 80 81 gi|12018225|ref|NC_002634.1| 9588 3260669531 80 81 gi|9626440|ref|NC_001434.1| 7176 3260679303 80 81 gi|123318702|ref|NC_005261.2| 137821 3260686638 80 81 gi|294441960|ref|NC_002190.2| 3909 3260826285 80 81 gi|288887367|ref|NC_013804.1| 145289 3260830310 80 81 gi|302861121|ref|NC_004913.2| 59866 3260977486 80 81 gi|9626123|ref|NC_001366.1| 8101 3261038159 80 81 gi|239828769|ref|NC_012799.1| 10282 3261046432 80 81 gi|146411807|ref|NC_009449.1| 1336 3261056939 80 81 gi|146411809|ref|NC_009450.1| 1350 3261058398 80 81 gi|260665870|ref|NC_013288.1| 191761 3261059840 80 81 gi|294336486|ref|NC_013640.2| 2823 3261254120 80 81 gi|57790931|ref|NC_006623.1| 148687 3261257047 80 81 gi|9632348|ref|NC_002039.1| 2947 3261407666 80 81 gi|9627493|ref|NC_001607.1| 8910 3261410716 80 81 gi|55770806|ref|NC_006429.1| 11940 3261419798 80 81 gi|80160542|ref|NC_007585.1| 1619 3261431960 80 81 gi|80160891|ref|NC_007588.1| 1317 3261433672 80 81 gi|80161069|ref|NC_007589.1| 1118 3261435078 80 81 gi|80161225|ref|NC_007590.1| 985 3261436283 80 81 gi|80161401|ref|NC_007591.1| 783 3261437354 80 81 gi|80161607|ref|NC_007592.1| 2052 3261438219 80 81 gi|66576233|ref|NC_007015.1| 7434 3261440378 80 81 gi|9626621|ref|NC_001460.1| 34125 3261447970 80 81 gi|9626158|ref|NC_001405.1| 35937 3261482587 80 81 gi|48696638|ref|NC_005879.1| 39853 3261519038 80 81 gi|48696682|ref|NC_005891.1| 39786 3261559454 80 81 gi|60115391|ref|NC_006852.1| 31526 3261599819 80 81 gi|68299727|ref|NC_007149.1| 39503 3261631803 80 81 gi|189909151|ref|NC_010819.1| 12972 3261671875 80 81 gi|9626243|ref|NC_001416.1| 48502 3261685084 80 81 gi|83700361|ref|NC_007649.1| 13936 3261734269 80 81 gi|78484344|ref|NC_007522.1| 9035 3261748468 80 81 gi|325965584|ref|NC_015220.1| 7241 3261757701 80 81 gi|9625875|ref|NC_001348.1| 124884 3261765099 80 81 gi|9633396|ref|NC_000902.1| 60942 3261891622 80 81 gi|9633804|ref|NC_001265.1| 4003 3261953395 80 81 gi|8486134|ref|NC_002021.1| 2341 3261957552 80 81 gi|9632386|ref|NC_002050.1| 4821 3261960003 80 81 gi|8486159|ref|NC_002210.1| 1191 3261964957 80 81 gi|9635581|ref|NC_002484.1| 56425 3261966230 80 81 gi|21326584|ref|NC_003977.1| 3215 3262023426 80 81 gi|30146781|ref|NC_004752.1| 9608 3262026746 80 81 gi|73912682|ref|NC_007375.1| 2341 3262036575 80 81 gi|56407093|ref|NC_002509.2| 9835 3262039013 80 81 gi|73852948|ref|NC_007358.1| 2341 3262049079 80 81 gi|320202734|ref|NC_014969.1| 44055 3262051516 80 81 gi|308928610|ref|NC_014598.1| 3948 3262096204 80 81 gi|308928608|ref|NC_014599.1| 3914 3262100284 80 81 gi|308928605|ref|NC_014600.1| 3818 3262104329 80 81 gi|308928603|ref|NC_014601.1| 3650 3262108277 80 81 gi|308928601|ref|NC_014602.1| 2563 3262112055 80 81 gi|308928599|ref|NC_014603.1| 1996 3262114733 80 81 gi|308928597|ref|NC_014604.1| 1957 3262116836 80 81 gi|308928595|ref|NC_014605.1| 1936 3262118900 80 81 gi|308928593|ref|NC_014606.1| 1205 3262120943 80 81 gi|308928590|ref|NC_014607.1| 1141 3262122247 80 81 gi|56698748|ref|NC_006563.1| 7722 3262123498 80 81 gi|109390374|ref|NC_008184.1| 7866 3262131401 80 81 gi|189043078|ref|NC_010739.1| 7582 3262139447 80 81 gi|297342356|ref|NC_014185.1| 7342 3262147197 80 81 gi|23309024|ref|NC_004275.1| 3916 3262154717 80 81 gi|23309028|ref|NC_004277.1| 1416 3262158768 80 81 gi|294854040|ref|NC_004282.4| 3860 3262160289 80 81 gi|23309040|ref|NC_004283.1| 1198 3262164284 80 81 gi|23309026|ref|NC_004276.1| 1196 3262165583 80 81 gi|23309030|ref|NC_004278.1| 2207 3262166880 80 81 gi|23309032|ref|NC_004279.1| 1331 3262169201 80 81 gi|23309034|ref|NC_004280.1| 2304 3262170635 80 81 gi|23309036|ref|NC_004281.1| 2235 3262173054 80 81 gi|23309022|ref|NC_004274.1| 3901 3262175403 80 81 gi|216905965|ref|NC_011645.1| 37456 3262179423 80 81 gi|326424956|ref|NC_015208.1| 39562 3262217420 80 81 gi|60683953|ref|NC_006874.1| 2777 3262257593 80 81 gi|326425018|ref|NC_015210.1| 61440 3262260477 80 81 gi|326536847|ref|NC_015262.1| 37664 3262322761 80 81 gi|314998981|ref|NC_014791.1| 9070 3262361004 80 81 gi|318069473|ref|NC_014927.1| 1838 3262370265 80 81 gi|318069476|ref|NC_014928.1| 1751 3262372203 80 81 gi|318069479|ref|NC_014929.1| 1703 3262374048 80 81 gi|318082874|ref|NC_014930.1| 1760 3262375853 80 81 gi|315064795|ref|NC_014790.1| 9858 3262377713 80 81 gi|326632894|ref|NC_015269.1| 118351 3262387770 80 81 gi|326633040|ref|NC_015271.1| 38368 3262507671 80 81 gi|307715266|ref|NC_014510.2| 2591 3262546603 80 81 gi|110804020|ref|NC_008265.1| 38092 3262549313 80 81 gi|326804500|ref|NC_015296.1| 157061 3262587952 80 81 gi|82547780|ref|NC_007612.1| 7412 3262747048 80 81 gi|327197584|ref|NC_015252.1| 36953 3262754623 80 81 gi|327197643|ref|NC_015253.1| 127065 3262792107 80 81 gi|327197843|ref|NC_015263.1| 114768 3262920831 80 81 gi|327197998|ref|NC_015265.1| 37236 3263037105 80 81 gi|327198045|ref|NC_015266.1| 40555 3263074878 80 81 gi|327198098|ref|NC_015270.1| 16945 3263116014 80 81 gi|327198269|ref|NC_015273.1| 32317 3263133243 80 81 gi|327198314|ref|NC_015274.1| 56506 3263166037 80 81 gi|327198387|ref|NC_015292.1| 84565 3263223321 80 81 gi|327198559|ref|NC_015295.1| 47279 3263309014 80 81 gi|327198628|ref|NC_015297.1| 5475 3263356954 80 81 gi|327198506|ref|NC_015293.1| 30651 3263362577 80 81 gi|27228716|ref|NC_004451.1| 8126 3263393680 80 81 gi|311977355|ref|NC_014649.1| 1181549 3263401989 80 81 gi|327409390|ref|NC_015254.1| 41518 3264598378 80 81 gi|327415370|ref|NC_015225.1| 35499 3264640484 80 81 gi|327415403|ref|NC_015226.1| 35512 3264676496 80 81 gi|219547604|ref|NC_011829.1| 8210 3264712545 80 81 gi|195661184|ref|NC_011109.1| 8089 3264720947 80 81 gi|321958368|ref|NC_015050.1| 6244 3264729212 80 81 gi|294768538|ref|NC_009011.2| 131331 3264735616 80 81 gi|323363050|ref|NC_015116.1| 7489 3264868658 80 81 gi|326536907|ref|NC_015264.1| 40973 3264876319 80 81 gi|21363127|ref|NC_003987.1| 7491 3264917874 80 81 gi|328545949|ref|NC_015328.1| 7723 3264925539 80 81 gi|328550464|ref|NC_015373.1| 4326 3264933431 80 81 gi|328550466|ref|NC_015374.1| 6327 3264937884 80 81 gi|328545954|ref|NC_015375.1| 1842 3264944363 80 81 gi|314055095|ref|NC_014789.1| 184409 3264946304 80 81 gi|326910936|ref|NC_015150.1| 5026 3265133088 80 81 gi|326537255|ref|NC_015228.1| 8837 3265138258 80 81 gi|326439148|ref|NC_015230.1| 19063 3265147262 80 81 gi|330370661|ref|NC_015397.1| 2566 3265166645 80 81 gi|330444744|ref|NC_015411.1| 4403 3265169332 80 81 gi|330444746|ref|NC_015412.1| 6439 3265173879 80 81 gi|330444748|ref|NC_015414.1| 7918 3265180475 80 81 gi|330444750|ref|NC_015415.1| 6360 3265188568 80 81 gi|330464826|ref|NC_015413.1| 1761 3265195096 80 81 gi|330858351|ref|NC_015453.1| 29017 3265196975 80 81 gi|330858398|ref|NC_015454.1| 29074 3265226450 80 81 gi|330858444|ref|NC_015456.1| 50661 3265255957 80 81 gi|330858525|ref|NC_015457.1| 165919 3265307321 80 81 gi|294661411|ref|NC_013649.2| 43809 3265475384 80 81 gi|331028054|ref|NC_015466.1| 62668 3265519818 80 81 gi|330370639|ref|NC_015393.1| 9999 3265583338 80 81 gi|110611894|ref|NC_008250.1| 7687 3265593535 80 81 gi|156519332|ref|NC_009750.1| 7790 3265601392 80 81 gi|331271175|ref|NC_015455.1| 26284 3265609348 80 81 gi|326536103|ref|NC_015249.1| 39270 3265636035 80 81 gi|326536151|ref|NC_015250.1| 159801 3265675868 80 81 gi|326536409|ref|NC_015251.1| 235229 3265837734 80 81 gi|326804341|ref|NC_015294.1| 93398 3266075977 80 81 gi|332288077|ref|NC_015325.1| 7584 3266170631 80 81 gi|332290590|ref|NC_015468.1| 4848 3266178431 80 81 gi|332290611|ref|NC_015469.1| 8876 3266183461 80 81 gi|332290613|ref|NC_015487.1| 2641 3266192534 80 81 gi|332290618|ref|NC_015488.1| 2611 3266195292 80 81 gi|332290623|ref|NC_015489.1| 2551 3266198019 80 81 gi|332290626|ref|NC_015490.1| 2640 3266200690 80 81 gi|332290631|ref|NC_015491.1| 2585 3266203451 80 81 gi|332290634|ref|NC_015492.1| 7452 3266206160 80 81 gi|332290641|ref|NC_015493.1| 5821 3266213797 80 81 gi|332304382|ref|NC_015502.1| 7519 3266219762 80 81 gi|332308935|ref|NC_015503.1| 7458 3266227446 80 81 gi|332308939|ref|NC_015504.1| 7401 3266235069 80 81 gi|332308943|ref|NC_015505.1| 7532 3266242634 80 81 gi|332308947|ref|NC_015506.1| 7408 3266250332 80 81 gi|332308951|ref|NC_015507.1| 7769 3266257904 80 81 gi|195546530|ref|NC_011103.1| 60195 3266265840 80 81 gi|332672294|ref|NC_015209.1| 10638 3266326866 80 81 gi|332672310|ref|NC_015327.1| 1396 3266337741 80 81 gi|169822861|ref|NC_010439.1| 2723 3266339237 80 81 gi|169822868|ref|NC_010440.1| 2761 3266342081 80 81 gi|303308462|ref|NC_010441.2| 2750 3266344963 80 81 gi|332290587|ref|NC_015467.1| 3067 3266347869 80 81 gi|333595893|ref|NC_015553.1| 2689 3266351053 80 81 gi|333798107|ref|NC_015568.1| 41090 3266353852 80 81 gi|325961446|ref|NC_015212.1| 2164 3266395535 80 81 gi|327409465|ref|NC_015323.1| 45667 3266397793 80 81 gi|330850808|ref|NC_015450.1| 4185 3266444104 80 81 gi|330850810|ref|NC_015451.1| 6393 3266448415 80 81 gi|330850812|ref|NC_015452.1| 1830 3266454961 80 81 gi|327409458|ref|NC_015317.1| 2782 3266456906 80 81 gi|331271216|ref|NC_015324.1| 2824 3266459813 80 81 gi|330370657|ref|NC_015396.1| 2383 3266462739 80 81 gi|333595888|ref|NC_015552.1| 6791 3266465227 80 81 gi|9630317|ref|NC_001890.1| 4215 3266472176 80 81 gi|306478709|ref|NC_014473.1| 2744 3266476517 80 81 gi|9791176|ref|NC_002180.1| 4532 3266479365 80 81 gi|334847635|ref|NC_015627.1| 2601 3266484037 80 81 gi|334847641|ref|NC_015628.1| 2553 3266486754 80 81 gi|23238149|ref|NC_004209.1| 1259 3266489411 80 81 gi|327409548|ref|NC_015326.1| 346754 3266490748 80 81 gi|335352415|ref|NC_015521.1| 7310 3266841907 80 81 gi|50253373|ref|NC_006020.1| 1748 3266849367 80 81 gi|56403977|ref|NC_006495.1| 2212 3266851181 80 81 gi|56403979|ref|NC_006496.1| 1927 3266853465 80 81 gi|307346911|ref|NC_014509.1| 4248 3266855493 80 81 gi|335999437|ref|NC_015631.1| 1395 3266859890 80 81 gi|317453629|ref|NC_014902.1| 2727 3266861394 80 81 gi|317453636|ref|NC_014903.1| 2679 3266864247 80 81 gi|336042307|ref|NC_015639.1| 6688 3266867043 80 81 gi|336125399|ref|NC_015655.1| 8082 3266873888 80 81 gi|336284682|ref|NC_001545.2| 9762 3266882134 80 81 gi|332290646|ref|NC_015494.1| 1696 3266892095 80 81 gi|332290648|ref|NC_015495.1| 1415 3266893889 80 81 gi|326910942|ref|NC_015298.1| 7026 3266895394 80 81 gi|326910944|ref|NC_015299.1| 2245 3266902580 80 81 gi|326910946|ref|NC_015300.1| 1544 3266904926 80 81 gi|326910948|ref|NC_015301.1| 1541 3266906562 80 81 gi|338209349|ref|NC_015668.1| 20128 3266908185 80 81 gi|338209357|ref|NC_015691.1| 7632 3266928655 80 81 gi|338209365|ref|NC_015692.1| 7686 3266936469 80 81 gi|335352402|ref|NC_015394.2| 9682 3266944326 80 81 gi|334265679|ref|NC_015398.1| 101487 3266954211 80 81 gi|338777097|ref|NC_005041.2| 5335 3267057046 80 81 gi|338826803|ref|NC_015718.1| 4926 3267062528 80 81 gi|338826807|ref|NC_015719.1| 40940 3267067589 80 81 gi|338826915|ref|NC_015721.1| 23931 3267109116 80 81 gi|338827142|ref|NC_015585.1| 43032 3267133418 80 81 gi|338826857|ref|NC_015720.1| 45530 3267177056 80 81 gi|339276104|ref|NC_007815.2| 8197 3267223223 80 81 gi|339276123|ref|NC_015523.1| 6175 3267231600 80 81 gi|325170966|ref|NC_015157.1| 125956 3267237919 80 81 gi|325171199|ref|NC_015158.1| 49675 3267365516 80 81 gi|325171272|ref|NC_015159.1| 39162 3267415878 80 81 gi|339832375|ref|NC_015783.1| 3725 3267455596 80 81 gi|340034686|ref|NC_015843.1| 10916 3267459430 80 81 gi|23238139|ref|NC_004199.1| 756 3267470567 80 81 gi|23238145|ref|NC_004207.1| 1054 3267471416 80 81 gi|23238147|ref|NC_004208.1| 1114 3267472567 80 81 gi|23238151|ref|NC_004210.1| 3774 3267473778 80 81 gi|23238153|ref|NC_004212.1| 3035 3267477683 80 81 gi|23238155|ref|NC_004213.1| 2415 3267480839 80 81 gi|23238157|ref|NC_004214.1| 2121 3267483368 80 81 gi|23238159|ref|NC_004215.1| 1947 3267485599 80 81 gi|23238161|ref|NC_004216.1| 1670 3267487654 80 81 gi|50253407|ref|NC_005998.1| 2747 3267489434 80 81 gi|50253409|ref|NC_005999.1| 2024 3267492305 80 81 gi|50253411|ref|NC_006000.1| 2017 3267494444 80 81 gi|50253413|ref|NC_006001.1| 1664 3267496576 80 81 gi|50253415|ref|NC_006002.1| 1657 3267498350 80 81 gi|50253417|ref|NC_006003.1| 1463 3267500117 80 81 gi|50253419|ref|NC_006004.1| 1256 3267501688 80 81 gi|50253421|ref|NC_006005.1| 764 3267503049 80 81 gi|50253423|ref|NC_006006.1| 764 3267503913 80 81 gi|94717691|ref|NC_008007.1| 15812 3267504788 80 81 gi|38371703|ref|NC_005220.1| 3229 3267520882 80 81 gi|77020114|ref|NC_007461.1| 4530 3267524217 80 81 gi|148717839|ref|NC_009536.1| 2309 3267528894 80 81 gi|38371723|ref|NC_005215.1| 3696 3267531317 80 81 gi|50261330|ref|NC_006019.1| 1169 3267535156 80 81 gi|282599175|ref|NC_013693.1| 158006 3267536415 80 81 gi|68532375|ref|NC_007155.1| 3568 3267696484 80 81 gi|319976668|ref|NC_014954.1| 7182 3267700175 80 81 gi|319962668|ref|NC_014955.1| 7125 3267707525 80 81 gi|319962660|ref|NC_014956.1| 7309 3267714818 80 81 gi|319976684|ref|NC_014952.1| 7259 3267722297 80 81 gi|319976676|ref|NC_014953.1| 7219 3267729725 80 81 gi|317046144|ref|NC_014835.1| 7164 3267737113 80 81 gi|148717937|ref|NC_009530.1| 10180 3267744456 80 81 gi|148747790|ref|NC_009553.1| 2752 3267754845 80 81 gi|148839269|ref|NC_009568.1| 7522 3267757711 80 81 gi|157939586|ref|NC_009892.1| 9005 3267765405 80 81 gi|160700552|ref|NC_009989.1| 27751 3267774588 80 81 gi|160700528|ref|NC_009994.1| 9570 3267802768 80 81 gi|164519195|ref|NC_010240.1| 169794 3267812540 80 81 gi|340616006|ref|NC_015784.1| 7752 3267984535 80 81 gi|156563980|ref|NC_009756.1| 4449 3267992453 80 81 gi|156563984|ref|NC_009757.1| 9236 3267997028 80 81 gi|156563987|ref|NC_009758.1| 8926 3268006450 80 81 gi|9632388|ref|NC_002051.1| 2916 3268015568 80 81 gi|333798163|ref|NC_015569.1| 178563 3268018597 80 81 gi|194351513|ref|NC_011062.1| 6539 3268199456 80 81 gi|190149262|ref|NC_010946.1| 2724 3268206170 80 81 gi|167006425|ref|NC_010314.1| 1090 3268209006 80 81 gi|167006428|ref|NC_010316.1| 1087 3268210187 80 81 gi|167006430|ref|NC_010317.1| 1074 3268211365 80 81 gi|167006434|ref|NC_010319.1| 1099 3268212530 80 81 gi|165973999|ref|NC_010277.1| 5387 3268213716 80 81 gi|189009876|ref|NC_010735.1| 9742 3268219235 80 81 gi|189009878|ref|NC_010736.1| 9842 3268229180 80 81 gi|195546756|ref|NC_011106.1| 7564 3268239212 80 81 gi|194473848|ref|NC_011086.1| 6290 3268246947 80 81 gi|194871987|ref|NC_011097.1| 9205 3268253390 80 81 gi|339905986|ref|NC_015780.1| 205791 3268262784 80 81 gi|330339438|ref|NC_015399.1| 1957 3268471214 80 81 gi|326631676|ref|NC_015267.1| 7679 3268473286 80 81 gi|326631684|ref|NC_015268.1| 7906 3268481151 80 81 gi|157781208|ref|NC_009825.1| 9355 3268489224 80 81 gi|157781210|ref|NC_009826.1| 9343 3268498764 80 81 gi|157781212|ref|NC_009823.1| 9711 3268508301 80 81 gi|157781214|ref|NC_009827.1| 9628 3268518211 80 81 gi|157939570|ref|NC_009887.1| 7421 3268528030 80 81 gi|157781216|ref|NC_009824.1| 9456 3268535612 80 81 gi|161984671|ref|NC_010126.1| 1371 3268545285 80 81 gi|157265283|ref|NC_009805.1| 9636 3268546747 80 81 gi|167006432|ref|NC_010318.1| 1015 3268556583 80 81 gi|341926380|ref|NC_015874.1| 20192 3268557674 80 81 gi|314953947|ref|NC_014794.1| 2627 3268578234 80 81 gi|314953951|ref|NC_014795.1| 2572 3268581009 80 81 gi|326425105|ref|NC_015211.1| 5813 3268583696 80 81 gi|157311299|ref|NC_009821.1| 164270 3268589656 80 81 gi|224460770|ref|NC_012122.1| 5206 3268756044 80 81 gi|224460777|ref|NC_012123.1| 7802 3268761388 80 81 gi|229605058|ref|NC_012664.1| 2754 3268769368 80 81 gi|238563974|ref|NC_012728.1| 7961 3268772230 80 81 gi|343098545|ref|NC_015877.1| 3903 3268780371 80 81 gi|343098547|ref|NC_015878.1| 3838 3268784403 80 81 gi|343098549|ref|NC_015879.1| 3766 3268788369 80 81 gi|343098551|ref|NC_015880.1| 2292 3268792263 80 81 gi|343098553|ref|NC_015881.1| 2143 3268794664 80 81 gi|343098555|ref|NC_015882.1| 1892 3268796914 80 81 gi|343098557|ref|NC_015883.1| 1311 3268798910 80 81 gi|343098559|ref|NC_015884.1| 1253 3268800318 80 81 gi|343098561|ref|NC_015885.1| 887 3268801667 80 81 gi|343098564|ref|NC_015886.1| 1150 3268802646 80 81 gi|209978775|ref|NC_011423.1| 111724 3268803897 80 81 gi|281415946|ref|NC_013650.1| 155445 3268917091 80 81 gi|282598606|ref|NC_013694.1| 51376 3269074556 80 81 gi|304360758|ref|NC_014458.1| 59598 3269126652 80 81 gi|304360853|ref|NC_014459.1| 59798 3269187069 80 81 gi|304360949|ref|NC_014461.1| 73453 3269247690 80 81 gi|330370654|ref|NC_015395.1| 6942 3269322131 80 81 gi|343469028|ref|NC_015928.1| 1377 3269329256 80 81 gi|343469030|ref|NC_015929.1| 1343 3269330748 80 81 gi|203449525|ref|NC_011268.1| 2743 3269332187 80 81 gi|253761974|ref|NC_012959.1| 34920 3269335033 80 81 gi|27881465|ref|NC_004542.1| 8513 3269370456 80 81 gi|288804639|ref|NC_013797.1| 108592 3269379150 80 81 gi|345107188|ref|NC_015960.1| 175699 3269489162 80 81 gi|345461093|ref|NC_015934.1| 7749 3269667125 80 81 gi|345461107|ref|NC_015938.1| 89916 3269675041 80 81 gi|345461259|ref|NC_015940.1| 7753 3269766148 80 81 gi|345461275|ref|NC_015941.1| 7693 3269774065 80 81 gi|30271926|ref|NC_004718.3| 29751 3269781919 80 81 gi|203454602|ref|NC_011273.1| 164602 3269812116 80 81 gi|223869186|ref|NC_012092.1| 3606 3269978860 80 81 gi|223869191|ref|NC_012093.1| 2578 3269982596 80 81 gi|273810554|ref|NC_013600.1| 45169 3269985274 80 81 gi|211774534|ref|NC_011515.1| 4193 3270031076 80 81 gi|332925434|ref|NC_015227.2| 3929 3270035387 80 81 gi|308814349|ref|NC_014594.1| 1371 3270039456 80 81 gi|343960381|ref|NC_015937.1| 151483 3270040911 80 81 gi|318065965|ref|NC_014899.1| 35203 3270194356 80 81 gi|346421290|ref|NC_007919.3| 12333 3270230059 80 81 gi|346683610|ref|NC_016003.1| 6495 3270242618 80 81 gi|320202719|ref|NC_014967.1| 3956 3270249270 80 81 gi|338826797|ref|NC_015706.1| 7718 3270253343 80 81 gi|347750411|ref|NC_012743.2| 62715 3270261234 80 81 gi|347750413|ref|NC_016013.1| 7048 3270324814 80 81 gi|347750421|ref|NC_016014.1| 7784 3270332023 80 81 gi|347762073|ref|NC_016031.1| 5278 3270339973 80 81 gi|347762078|ref|NC_016032.1| 5177 3270345387 80 81 gi|21716071|ref|NC_004065.1| 230278 3270350696 80 81 gi|345462124|ref|NC_015935.1| 6543 3270583932 80 81 gi|22549402|ref|NC_004117.1| 158482 3270590631 80 81 gi|326537265|ref|NC_015229.1| 6704 3270751170 80 81 gi|258611051|ref|NC_013236.1| 7810 3270758030 80 81 gi|258611059|ref|NC_013237.1| 8242 3270766010 80 81 gi|259120461|ref|NC_013262.1| 7586 3270774435 80 81 gi|257796352|ref|NC_013218.1| 6082 3270782192 80 81 gi|257796354|ref|NC_013219.1| 3985 3270788427 80 81 gi|349641625|ref|NC_016044.1| 9595 3270792532 80 81 gi|253761958|ref|NC_012957.1| 7982 3270802311 80 81 gi|262216749|ref|NC_013447.1| 16614 3270810477 80 81 gi|131840030|ref|NC_009127.1| 295146 3270827370 80 81 gi|195546694|ref|NC_011108.1| 4198 3271126282 80 81 gi|152994036|ref|NC_009657.1| 28203 3271130613 80 81 gi|353072697|ref|NC_011504.2| 751 3271159240 80 81 gi|353072704|ref|NC_011505.2| 667 3271160072 80 81 gi|61602086|ref|NC_006879.1| 34450 3271160815 80 81 gi|342243406|ref|NC_015781.2| 14728 3271195769 80 81 gi|353332641|ref|NC_016084.1| 5906 3271210773 80 81 gi|353332643|ref|NC_016085.1| 3935 3271216844 80 81 gi|353332645|ref|NC_016086.1| 2588 3271220920 80 81 gi|353332650|ref|NC_016087.1| 1724 3271223632 80 81 gi|351694292|ref|NC_011510.2| 2362 3271225448 80 81 gi|354459081|ref|NC_016136.1| 12875 3271227914 80 81 gi|352950877|ref|NC_011500.2| 1614 3271241020 80 81 gi|352950878|ref|NC_011501.2| 1105 3271242725 80 81 gi|352950879|ref|NC_011502.2| 1059 3271243914 80 81 gi|352950880|ref|NC_011503.2| 1062 3271245057 80 81 gi|352950881|ref|NC_011506.2| 2693 3271246203 80 81 gi|352950882|ref|NC_011507.2| 3302 3271249000 80 81 gi|352950883|ref|NC_011508.2| 2591 3271252414 80 81 gi|352950884|ref|NC_011509.2| 1356 3271255108 80 81 gi|98960849|ref|NC_008039.1| 3374 3271256551 80 81 gi|261597694|ref|NC_013414.1| 2733 3271260054 80 81 gi|273809542|ref|NC_013597.1| 43970 3271262898 80 81 gi|288804632|ref|NC_013796.1| 5112 3271307501 80 81 gi|292559580|ref|NC_013999.1| 11563 3271312764 80 81 gi|308814735|ref|NC_014597.1| 1379 3271324558 80 81 gi|315111586|ref|NC_014799.1| 2542 3271326064 80 81 gi|315573168|ref|NC_014823.1| 5196 3271328723 80 81 gi|314121562|ref|NC_014792.1| 169285 3271334065 80 81 gi|340025671|ref|NC_000852.5| 330611 3271505553 80 81 gi|261597702|ref|NC_013415.1| 2657 3271840383 80 81 gi|308814737|ref|NC_014596.1| 2707 3271843157 80 81 gi|315111550|ref|NC_004635.2| 2608 3271846007 80 81 gi|156522770|ref|NC_009752.1| 7791 3271848720 80 81 gi|253750530|ref|NC_012936.1| 31250 3271856680 80 81 gi|253756580|ref|NC_012948.1| 30969 3271888406 80 81 gi|253756605|ref|NC_012950.1| 30953 3271919849 80 81 gi|253761971|ref|NC_012958.1| 4806 3271951256 80 81 gi|254666617|ref|NC_013007.1| 16354 3271956196 80 81 gi|262396908|ref|NC_013460.1| 3112 3271972845 80 81 gi|262396911|ref|NC_013461.1| 1422 3271976085 80 81 gi|262396913|ref|NC_013462.1| 8931 3271977626 80 81 gi|262396916|ref|NC_013463.1| 7180 3271986770 80 81 gi|262396919|ref|NC_013464.1| 2744 3271994111 80 81 gi|354951927|ref|NC_015629.1| 3480 3271996963 80 81 gi|345461828|ref|NC_015933.1| 72917 3272000565 80 81 gi|355348565|ref|NC_016141.1| 8372 3272074474 80 81 gi|355348567|ref|NC_016142.1| 3134 3272083031 80 81 gi|355348571|ref|NC_016143.1| 3196 3272086285 80 81 gi|334847621|ref|NC_015626.1| 7801 3272089591 80 81 gi|355469071|ref|NC_016144.1| 18927 3272097551 80 81 gi|356457872|ref|NC_000883.2| 5596 3272116784 80 81 gi|339276119|ref|NC_015522.1| 6423 3272122523 80 81 gi|19744949|ref|NC_003466.1| 1871 3272129098 80 81 gi|38371725|ref|NC_005216.1| 2059 3272131069 80 81 gi|38371720|ref|NC_005224.1| 1830 3272133227 80 81 gi|356457881|ref|NC_005227.2| 1831 3272135149 80 81 gi|356870600|ref|NC_016158.1| 49576 3272137075 80 81 gi|356870677|ref|NC_016160.1| 36661 3272187342 80 81 gi|356870736|ref|NC_016161.1| 38013 3272224533 80 81 gi|356870838|ref|NC_016165.1| 39283 3272263095 80 81 gi|352749693|ref|NC_016080.1| 8315 3272302948 80 81 gi|158976983|ref|NC_001474.2| 10723 3272311430 80 81 gi|163644368|ref|NC_001475.2| 10707 3272322351 80 81 gi|9626685|ref|NC_001477.1| 10735 3272333253 80 81 gi|12084822|ref|NC_002640.1| 10649 3272344185 80 81 gi|357580071|ref|NC_016405.1| 10347 3272355046 80 81 gi|357580105|ref|NC_012211.2| 7118 3272365586 80 81 gi|226466498|ref|NC_012553.1| 2609 3272372877 80 81 gi|318088758|ref|NC_012554.2| 2578 3272375603 80 81 gi|332672312|ref|NC_015464.1| 135041 3272378292 80 81 gi|356640291|ref|NC_016154.1| 218041 3272515119 80 81 gi|358356468|ref|NC_016159.1| 9626 3272735958 80 81 gi|358356470|ref|NC_016162.1| 7103 3272745774 80 81 gi|358356482|ref|NC_016163.1| 262391 3272753038 80 81 gi|358356850|ref|NC_016166.1| 74431 3273018777 80 81 gi|358356460|ref|NC_016157.1| 7326 3273094217 80 81 gi|358356445|ref|NC_009993.2| 53746 3273101709 80 81 gi|192823813|ref|NC_011022.1| 51621 3273156199 80 81 gi|192823901|ref|NC_011020.1| 50968 3273208541 80 81 gi|192823996|ref|NC_011019.1| 53572 3273260219 80 81 gi|350528582|ref|NC_015961.1| 2605 3273314577 80 81 gi|350528585|ref|NC_015962.1| 2625 3273317331 80 81 gi|348020285|ref|NC_016038.1| 5666 3273320060 80 81 gi|359683123|ref|NC_016436.1| 16404 3273325883 80 81 gi|359745340|ref|NC_016438.1| 43883 3273342573 80 81 gi|359802265|ref|NC_016434.1| 65839 3273387073 80 81 gi|359802358|ref|NC_016435.1| 65766 3273453803 80 81 gi|326781756|ref|NC_015279.1| 190789 3273520466 80 81 gi|326782024|ref|NC_015280.1| 181044 3273713716 80 81 gi|326782266|ref|NC_015281.1| 179563 3273897099 80 81 gi|326782497|ref|NC_015282.1| 174079 3274078981 80 81 gi|326782732|ref|NC_015283.1| 176428 3274255313 80 81 gi|326782972|ref|NC_015284.1| 183806 3274434023 80 81 gi|326783215|ref|NC_015285.1| 174285 3274620203 80 81 gi|326783443|ref|NC_015286.1| 175230 3274796741 80 81 gi|326783659|ref|NC_015287.1| 232878 3274974237 80 81 gi|326783979|ref|NC_015288.1| 191195 3275210101 80 81 gi|326784214|ref|NC_015289.1| 176184 3275403761 80 81 gi|326784440|ref|NC_015290.1| 182180 3275582225 80 81 gi|359946431|ref|NC_012783.2| 226205 3275766760 80 81 gi|360040872|ref|NC_016441.1| 9649 3275995863 80 81 gi|360040900|ref|NC_016447.1| 219474 3276005702 80 81 gi|360086494|ref|NC_016448.1| 196691 3276227993 80 81 gi|358356446|ref|NC_016156.1| 7391 3276427211 80 81 gi|9627909|ref|NC_001629.1| 22195 3276434765 80 81 gi|363539522|ref|NC_016071.1| 145964 3276457311 80 81 gi|363539767|ref|NC_016072.1| 1259197 3276605169 80 81 gi|363540888|ref|NC_016074.1| 7873 3277880178 80 81 gi|363540896|ref|NC_016075.1| 7774 3277888223 80 81 gi|363540904|ref|NC_016076.1| 7828 3277896168 80 81 gi|363540913|ref|NC_016437.1| 26340 3277904172 80 81 gi|255033713|ref|NC_013055.1| 39896 3277930913 80 81 gi|257136356|ref|NC_013195.1| 40761 3277971382 80 81 gi|257136433|ref|NC_013197.1| 17036 3278012722 80 81 gi|299778956|ref|NC_014260.1| 172253 3278030046 80 81 gi|363542401|ref|NC_015586.1| 5819 3278204532 80 81 gi|363987117|ref|NC_015939.1| 10438 3278210509 80 81 gi|156447515|ref|NC_009741.1| 9804 3278221154 80 81 gi|156447513|ref|NC_009745.1| 9711 3278231155 80 81 gi|160700540|ref|NC_009995.1| 9730 3278241069 80 81 gi|256398147|ref|NC_013133.1| 6228 3278251007 80 81 gi|256398150|ref|NC_013134.1| 3007 3278257399 80 81 gi|351518443|ref|NC_016073.1| 157950 3278260515 80 81 gi|365824262|ref|NC_016418.1| 9565 3278420513 80 81 gi|262392379|ref|NC_013455.1| 7317 3278430274 80 81 gi|148717968|ref|NC_009533.1| 4293 3278437761 80 81 gi|197725705|ref|NC_011189.1| 3418 3278442192 80 81 gi|197725710|ref|NC_011190.1| 5862 3278445737 80 81 gi|253756593|ref|NC_012949.1| 30953 3278451777 80 81 gi|242915933|ref|NC_012909.1| 8591 3278483194 80 81 gi|366091748|ref|NC_016519.1| 6514 3278491976 80 81 gi|366898511|ref|NC_016509.1| 18659 3278498658 80 81 gi|366091740|ref|NC_016517.1| 3250 3278517630 80 81 gi|366091742|ref|NC_016518.1| 3427 3278521000 80 81 gi|370882203|ref|NC_016536.1| 662 3278524557 80 81 gi|371496125|ref|NC_016564.1| 95299 3278525302 80 81 gi|371496268|ref|NC_016566.1| 44077 3278621861 80 81 gi|371496326|ref|NC_016567.1| 81184 3278666556 80 81 gi|371670910|ref|NC_016562.1| 132662 3278748827 80 81 gi|371671060|ref|NC_016563.1| 156897 3278883217 80 81 gi|371671319|ref|NC_016565.1| 18168 3279042151 80 81 gi|371671341|ref|NC_016568.1| 24645 3279060622 80 81 gi|372199367|ref|NC_016570.1| 157304 3279085657 80 81 gi|372199572|ref|NC_016573.1| 2678 3279245008 80 81 gi|372199578|ref|NC_016574.1| 2649 3279247803 80 81 gi|372199584|ref|NC_016575.1| 2727 3279250564 80 81 gi|372199591|ref|NC_016576.1| 2661 3279253404 80 81 gi|372199594|ref|NC_016577.1| 2633 3279256182 80 81 gi|372199603|ref|NC_016579.1| 2614 3279258928 80 81 gi|372204028|ref|NC_016580.1| 2540 3279261666 80 81 gi|372204034|ref|NC_016581.1| 2494 3279264329 80 81 gi|372204037|ref|NC_016647.1| 5076 3279266929 80 81 gi|372204042|ref|NC_016648.1| 13459 3279272147 80 81 gi|372208450|ref|NC_016649.1| 2750 3279285858 80 81 gi|372217586|ref|NC_016569.1| 46140 3279288711 80 81 gi|372217655|ref|NC_016656.1| 45890 3279335494 80 81 gi|372217712|ref|NC_016657.1| 47055 3279382026 80 81 gi|372217768|ref|NC_016658.1| 47741 3279429738 80 81 gi|372217834|ref|NC_016659.1| 47536 3279478146 80 81 gi|372293674|ref|NC_016572.1| 2661 3279526357 80 81 gi|372449733|ref|NC_016650.1| 48072 3279529123 80 81 gi|372449800|ref|NC_016651.1| 14270 3279577867 80 81 gi|372449821|ref|NC_016652.1| 49330 3279592387 80 81 gi|372449904|ref|NC_016653.1| 46586 3279642405 80 81 gi|372449971|ref|NC_016654.1| 39474 3279689645 80 81 gi|372450032|ref|NC_016655.1| 51342 3279729684 80 81 gi|372199597|ref|NC_016578.1| 2725 3279781748 80 81 gi|370702946|ref|NC_004156.2| 231621 3279784584 80 81 gi|373231359|ref|NC_006940.2| 40793 3280019171 80 81 gi|11528013|ref|NC_001563.2| 10962 3280060537 80 81 gi|158516887|ref|NC_009942.1| 11029 3280071701 80 81 gi|269838879|ref|NC_010811.2| 231255 3280082937 80 81 gi|327198122|ref|NC_015272.1| 88322 3280317155 80 81 gi|356491217|ref|NC_016152.1| 3377 3280406651 80 81 gi|356491220|ref|NC_016153.1| 7230 3280410140 80 81 gi|269838911|ref|NC_012091.2| 6501 3280417545 80 81 gi|9629456|ref|NC_001809.1| 10871 3280424192 80 81 gi|374504754|ref|NC_016757.1| 4942 3280435291 80 81 gi|374504757|ref|NC_016758.1| 3685 3280440387 80 81 gi|374504762|ref|NC_016759.1| 4352 3280444211 80 81 gi|374504766|ref|NC_016760.1| 4099 3280448710 80 81 gi|374531191|ref|NC_016761.1| 38684 3280452932 80 81 gi|374531244|ref|NC_016762.1| 49135 3280492173 80 81 gi|374531598|ref|NC_016764.1| 40058 3280541993 80 81 gi|374531645|ref|NC_016765.1| 54024 3280582631 80 81 gi|374531848|ref|NC_016767.1| 60714 3280637399 80 81 gi|90592575|ref|NC_007924.1| 38239 3280698944 80 81 gi|345462093|ref|NC_015932.1| 31616 3280737726 80 81 gi|371671369|ref|NC_016571.1| 284757 3280769808 80 81 gi|318065792|ref|NC_014901.1| 59230 3281058197 80 81 gi|338827012|ref|NC_015584.1| 75960 3281118243 80 81 gi|374671600|ref|NC_016770.1| 47159 3281195227 80 81 gi|374674409|ref|NC_016752.1| 4595 3281243058 80 81 gi|334285101|ref|NC_015524.1| 6519 3281247789 80 81 gi|331027904|ref|NC_015463.1| 72332 3281254465 80 81 gi|331028007|ref|NC_015465.1| 33004 3281327777 80 81 gi|356870794|ref|NC_016164.1| 30332 3281361269 80 81 gi|374531742|ref|NC_016766.1| 69420 3281392056 80 81 gi|375267221|ref|NC_016763.1| 43221 3281462413 80 81 gi|10313991|ref|NC_002549.1| 18959 3281506255 80 81 gi|375294199|ref|NC_016874.1| 3780 3281525540 80 81 gi|375298197|ref|NC_016875.1| 3325 3281529457 80 81 gi|375298199|ref|NC_016876.1| 2031 3281532913 80 81 gi|375298260|ref|NC_016877.1| 1761 3281535059 80 81 gi|375298262|ref|NC_016878.1| 1121 3281536933 80 81 gi|375298264|ref|NC_016879.1| 4012 3281538158 80 81 gi|375298266|ref|NC_016880.1| 3729 3281542310 80 81 gi|375298268|ref|NC_016881.1| 2238 3281546175 80 81 gi|375298270|ref|NC_016882.1| 1937 3281548530 80 81 gi|375298272|ref|NC_016883.1| 1205 3281550581 80 81 gi|347762083|ref|NC_016033.1| 4152 3281551885 80 81 gi|365824248|ref|NC_016416.1| 13830 3281556175 80 81 gi|365824255|ref|NC_016417.1| 13807 3281570264 80 81 gi|339906182|ref|NC_015782.1| 7275 3281584319 80 81 gi|352749709|ref|NC_016081.1| 13384 3281591771 80 81 gi|313501306|ref|NC_014744.1| 1383 3281605414 80 81 gi|313493553|ref|NC_014747.1| 1392 3281606904 80 81 gi|311788801|ref|NC_014645.1| 2792 3281608396 80 81 gi|313493551|ref|NC_014746.1| 1259 3281611309 80 81 gi|238801880|ref|NC_012753.1| 37184 3281612657 80 81 gi|9632550|ref|NC_000855.1| 11158 3281650392 80 81 gi|358025590|ref|NC_016403.1| 8159 3281661771 80 81 gi|357579586|ref|NC_016404.1| 7488 3281670098 80 81 gi|372220275|ref|NC_016561.1| 3048 3281677753 80 81 gi|375267283|ref|NC_016769.1| 8210 3281680926 80 81 gi|310722194|ref|NC_014635.1| 163875 3281689310 80 81 gi|360040865|ref|NC_016440.1| 8638 3281855309 80 81 gi|360040884|ref|NC_016442.1| 6506 3281864144 80 81 gi|360040889|ref|NC_016443.1| 6139 3281870808 80 81 gi|360040896|ref|NC_016444.1| 4735 3281877100 80 81 gi|353212475|ref|NC_016082.1| 2621 3281881974 80 81 gi|353212481|ref|NC_016083.1| 2601 3281884707 80 81 gi|365824246|ref|NC_014564.2| 45413 3281887409 80 81 gi|313139310|ref|NC_014741.1| 1388 3281933486 80 81 gi|377829940|ref|NC_016924.1| 185139 3281934960 80 81 gi|294795277|ref|NC_014037.1| 9782 3282122492 80 81 gi|288860181|ref|NC_013801.1| 1347 3282132486 80 81 gi|288860179|ref|NC_013803.1| 1366 3282133939 80 81 gi|288966115|ref|NC_013802.1| 1354 3282135411 80 81 gi|154814487|ref|NC_009087.2| 8855 3282136852 80 81 gi|378554407|ref|NC_016744.1| 5065 3282145894 80 81 gi|378554412|ref|NC_016895.1| 31681 3282151090 80 81 gi|378554443|ref|NC_016899.1| 21592 3282183246 80 81 gi|378554472|ref|NC_016896.1| 6707 3282205195 80 81 gi|56699498|ref|NC_006572.1| 7271 3282212071 80 81 gi|56699501|ref|NC_006573.1| 3402 3282219518 80 81 gi|379048300|ref|NC_016963.1| 689 3282223072 80 81 gi|379059601|ref|NC_016898.1| 7855 3282223866 80 81 ================================================ FILE: indexcov/types.go ================================================ package indexcov import ( "log" "reflect" "unsafe" "github.com/biogo/hts/bam" "github.com/biogo/hts/bgzf" ) const ( // TileWidth is the length of the interval tiling used // in BAI and tabix indexes. TileWidth = 0x4000 // StatsDummyBin is the bin number of the reference // statistics bin used in BAI and tabix indexes. StatsDummyBin = 0x924a ) type oRefIndex struct { Bins []bin Stats *referenceStats Intervals []bgzf.Offset } type bin struct { Bin uint32 Chunks []bgzf.Chunk } type referenceStats struct { // Chunk is the span of the indexed BGZF // holding alignments to the reference. Chunk bgzf.Chunk // Mapped is the count of mapped reads. Mapped uint64 // Unmapped is the count of unmapped reads. Unmapped uint64 } func getSizes(idx *bam.Index) ([][]int64, uint64, uint64) { var mapped, unmapped uint64 refs := reflect.ValueOf(*idx).FieldByName("idx").FieldByName("Refs") ptr := unsafe.Pointer(refs.Pointer()) ret := (*(*[1 << 28]oRefIndex)(ptr))[:refs.Len()] // save some memory. m := make([][]int64, len(ret)) n_messages := 0 for i, r := range ret { st, ok := idx.ReferenceStats(i) if ok { mapped += st.Mapped unmapped += st.Unmapped } else { if n_messages <= 10 { log.Printf("no reference stats found for %dth reference chromosome", i) } if n_messages == 10 { log.Printf("not reporting further chromosomes without stats. %d", i) } n_messages += 1 } if len(r.Intervals) < 2 { m[i] = make([]int64, 0) continue } m[i] = make([]int64, len(r.Intervals)-1) for k, iv := range r.Intervals[1:] { m[i][k] = vOffset(iv) - vOffset(r.Intervals[k]) if m[i][k] < 0 { panic("expected positive change in vOffset") } } r.Bins, r.Intervals = nil, nil } return m, mapped, unmapped } ================================================ FILE: indexsplit/README.md ================================================ indexsplit ---------- `indexsplit` quickly generates evenly sized (by amount of data) regions across a cohort. It does this by reading the bam (or cram) index and using the file offsets as proxies for the amount of data. It sums the values in these bins across all samples. This gives a good estimate for actual reads in the region but without having to parse the bam file. The result is a bed file with an additional column indicating the (scaled) size of data in these region across all samples. The numbers in that column will be fairly even except at the ends offsets chromosomes or for small chromosomes. A common use of this will be to **generate regions to be used to parallelize variant-calling** fairly by splitting in to `N` regions with approximately equal amounts of data **across the cohort**. On a modest laptop with an SSD, `indexsplit` can **generate even-coverage regions in ~4 seconds for 45 bams**. The time is independent of the number of regions. When a single 16KB chunk will has more data than the determined chunk size, `indexsplit` will output sub-regions of that chunk even though it doesn't know the exact placement of the data within it. Usage ----- ``` goleft indexsplit -N 5000 /path/to/*.bam > regions.bed ``` If you want to do this from CRAM files send the .crai files and a fasta index via the `--fai`: ``` goleft indexsplit -N 8000 --fai reference.fa.fai /path/to/*.crai > regions.bed ``` The user is responsible for ensuring that the crai chromosome order matches the .fai order (this will be the case if the fasta was the same as used in alignment). ================================================ FILE: indexsplit/functional-tests.sh ================================================ #!/bin/bash test -e ssshtest || wget -q https://raw.githubusercontent.com/ryanlayer/ssshtest/master/ssshtest . ssshtest set -uo pipefail go build -o ./goleft_test ../cmd/goleft/goleft.go mkdir -p ../indexcov/samples/ && cd ../indexcov/samples/ if [[ ! -e sample_paper.tar.xz ]]; then curl -Ss https://s3.amazonaws.com/b4-test-data/sample_paper.tar.xz > sample_paper.tar.xz fi if [[ ! -e sample_paper_0030.bam.bai ]]; then tar xJf sample_paper.tar.xz fi if [[ ! -e sample_paper_0030.bam ]]; then tar xJf sample_paper.tar.xz fi cd - if [[ ! -e human_g1k_v37.fasta.fai ]]; then wget -q ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/human_g1k_v37.fasta.fai fi splitter() { ./goleft_test indexsplit -n 1000 --fai human_g1k_v37.fasta.fai ../indexcov/samples/*.bam > _test.cov } samtools view -H ../indexcov/samples/sample_paper_0001.bam | grep "^@SQ" | perl -pe 's/.+SN://' | awk 'BEGIN{FS="\tLN:"; OFS="\t"} { print $1,0,$2 }' > genome.bed run check_it splitter assert_exit_code 0 cat $STDERR_FILE assert_equal 0 $(bedtools subtract -a genome.bed -b _test.cov | wc -l) assert_equal 0 $(bedtools subtract -b genome.bed -a _test.cov | wc -l) assert_equal 0 $(bedtools intersect -a _test.cov -b _test.cov -c | awk '$NF != 1' | wc -l) rm -f genome.bed _test.cov ================================================ FILE: indexsplit/indexsplit.go ================================================ // Package indexsplit is used to quickly generate evenly sized (by amount of data) regions across // a cohort. It does this by reading the bam (or cram) index and using the file offsets as proxies // for the amount of data. It sums the values in these bins across all samples. This gives a good // estimate for actual reads in the region but without having to parse the bam file. // // A common use of this will be to generate regions to be use to parallelize variant calling fairly // by splitting in to `N` regions with approximately equal amounts of data **across the cohort**. package indexsplit import ( "fmt" "strings" "gonum.org/v1/gonum/floats" "gonum.org/v1/gonum/stat" arg "github.com/alexflint/go-arg" "github.com/biogo/hts/sam" "github.com/biogo/store/interval" "github.com/brentp/goleft/depth" "github.com/brentp/goleft/indexcov" ) type cliargs struct { N int `arg:"-n,required,help:number of regions to split to."` Fai string `arg:"--fai,help:fasta index file."` Problematic string `arg:"-p,help:pipe-delimited list of regions to split small."` Indexes []string `arg:"positional,required,help:bai's/crais to use for splitting genome."` } func imin(a, b int) int { if a < b { return a } return b } func chop(sizes [][]float64) { for k, size := range sizes { m, std := stat.MeanStdDev(size, nil) max := m + 3*std for i, s := range size { if s > max { size[i] = 8 * m } } sizes[k] = size } } // return the proportion of data in each chromosome. func getPercents(sizes [][]float64) ([]float64, []float64) { chop(sizes) var tot float64 pcts := make([]float64, len(sizes)) sums := make([]float64, len(sizes)) for i, s := range sizes { sums[i] = floats.Sum(s) tot += sums[i] } for i := range pcts { pcts[i] = sums[i] / tot } return pcts, sums } // Chunk is a region of the genome create by `Split`. type Chunk struct { Chrom string Start int End int Sum float64 // amount of data in this Chunk Splits int // number of splits } func (c Chunk) String() string { return fmt.Sprintf("%s\t%d\t%d\t%.2f\t%d", c.Chrom, c.Start, c.End, c.Sum, c.Splits) } // Split takes paths of bams or crais and generates `N` `Chunks` func Split(paths []string, refs []*sam.Reference, N int, probs map[string]*interval.IntTree) chan Chunk { ch := make(chan Chunk) go func() { // sizes will be the sum of values for all samples // use a float since we divide by a large number to avoid overflow var sizes [][]float64 scalar := float64(1000000000) for _, path := range paths { osz := indexcov.ReadIndex(path).Sizes() for _, ref := range refs { i := ref.ID() for i >= len(sizes) { sizes = append(sizes, make([]float64, 0)) } if i >= len(osz) { break } s, o := sizes[i], osz[i] m := imin(len(s), len(o)) var j int // we add for as long as we have data from both... for j = 0; j < m; j++ { s[j] += float64(o[j]) / scalar } for ; j < len(o); j++ { s = append(s, float64(o[j])/scalar) } sizes[i] = s } } percents, sums := getPercents(sizes) for _, ref := range refs { ri := ref.ID() if ri >= len(sizes) || len(sizes[ri]) == 0 { // output the empty chrom with a sum of 0 the user isn't. ch <- Chunk{Chrom: ref.Name(), Start: 0, End: ref.Len(), Sum: 0, Splits: 0} continue } n := int(percents[ri] * float64(N)) if n == 0 && percents[ri] > 0 { n = 1 } else if n == 0 { ch <- Chunk{Chrom: ref.Name(), Start: 0, End: ref.Len(), Sum: 0, Splits: 0} continue } // we get `chunk` as a sum and then we know we have enough data. chunk := sums[ri] / float64(n) size := sizes[ri] var sum float64 var lasti int var tree *interval.IntTree if probs != nil { if t, ok := probs[ref.Name()]; ok { tree = t } } // loop over the tiles and yield regions as soon as each is > chunk. for i := 0; i < len(size); i++ { // for single Tiles > chunk, we split into smaller regions. // 120 heuristic is arbitrary, may need to be tuned. ovl := depth.Overlaps(tree, i*indexcov.TileWidth, (i+1)*indexcov.TileWidth) if size[i] > chunk || (size[i] >= 0.05*chunk && ovl) { //if sum >= 0 && i > lasti { if i > lasti { ch <- Chunk{Chrom: ref.Name(), Start: lasti * indexcov.TileWidth, End: i * indexcov.TileWidth, Sum: sum, Splits: 1} } sum = size[i] nsplits := int(0.5 + (sum / (chunk / 2))) if nsplits > 8 { nsplits = 8 } else if nsplits < 1 { nsplits = 1 if ovl { nsplits = 3 } } start := i * indexcov.TileWidth l := int(float64(indexcov.TileWidth)/float64(nsplits) + 1) for k := 0; k < nsplits; k++ { if i+k == len(size)+1 { ch <- Chunk{Chrom: ref.Name(), Start: start, End: ref.Len(), Sum: sum / float64(nsplits), Splits: nsplits} } else { ch <- Chunk{Chrom: ref.Name(), Start: start, End: imin(start+l, (i+1)*indexcov.TileWidth), Sum: sum / float64(nsplits), Splits: nsplits} } start += l } lasti, sum = i+1, 0 continue } sum += size[i] if sum >= chunk || i == len(size)-1 || (sum >= 0.2*chunk && ovl) { if i == len(size)-1 { ch <- Chunk{Chrom: ref.Name(), Start: lasti * indexcov.TileWidth, End: ref.Len(), Sum: sum, Splits: 1} } else { ch <- Chunk{Chrom: ref.Name(), Start: lasti * indexcov.TileWidth, End: (i + 1) * indexcov.TileWidth, Sum: sum, Splits: 1} } lasti = i + 1 sum = 0 } } } close(ch) }() return ch } // Main is called from the goleft dispatcher. func Main() { cli := &cliargs{} arg.MustParse(cli) var probs map[string]*interval.IntTree if cli.Problematic != "" { probs = depth.ReadTree(cli.Problematic) } var refs []*sam.Reference if strings.HasSuffix(cli.Indexes[0], ".bam") { refs = indexcov.RefsFromBam(cli.Indexes[0], "") } else { refs = indexcov.ReadFai(cli.Fai, "") } for chunk := range Split(cli.Indexes, refs, cli.N, probs) { fmt.Println(chunk) } } ================================================ FILE: multidepth/multidepth.go ================================================ package main import ( "bufio" "fmt" "os" "os/exec" "runtime" "strconv" "strings" "sync" arg "github.com/alexflint/go-arg" "github.com/biogo/hts/bam" "github.com/brentp/goleft/indexcov" ) type dargs struct { Q int `arg:"-Q,help:mapping quality cutoff"` Chrom string `arg:"required,-c,help:optional chromosome to limit analysis"` MinCov int `arg:"help:minimum depth considered callable"` MaxCov int `arg:"help:maximum depth considered callable"` MaxSkip int `arg:"-k,help:skip this many uncovered bases before forcing a new block"` MinSize int `arg:"-m,help:only report blocks of at least this length"` Window int `arg:"-w,help:discretize into windows of this size"` Processes int `arg:"-p,help:number of processors to use"` MinSamples float64 `arg:"help:proportion of samples with mincov coverage for a region to be reported"` Bams []string `arg:"positional,required,help:bams for which to calculate depth"` minSamples int `arg:"-"` } func chromSize(path string, chrom string) int { f, err := os.Open(path) if err != nil { panic(err) } b, err := bam.NewReader(f, 1) if err != nil { panic(err) } for _, ref := range b.Header().Refs() { if ref.Name() == chrom { return ref.Len() } } panic(fmt.Sprintf("multidepth: chromosome %s not found in %s", chrom, path)) } func main() { args := dargs{Q: 10, MinCov: 7, MaxCov: 1000, MinSamples: 0.5, MinSize: 15, MaxSkip: 10, Window: 1e7} if p := arg.MustParse(&args); len(args.Bams) == 0 { p.Fail("specify > 1 bam") } if args.Processes <= 0 { args.Processes = runtime.NumCPU() } runtime.GOMAXPROCS(args.Processes) hdr := make([]string, 1, len(args.Bams)+1) hdr[0] = "#chrom\tstart\tend" if len(args.Bams) > 50 { chunkSize /= 5 } args.minSamples = int(0.5 + args.MinSamples*float64(len(args.Bams))) for _, b := range args.Bams { nm, err := indexcov.GetShortName(b, false) if err != nil { panic(fmt.Sprintf("%s: %s", b, err)) } hdr = append(hdr, nm) } ch := genRegions(chromSize(args.Bams[0], args.Chrom), args.Chrom) out := make(chan []block, 1) wg := &sync.WaitGroup{} wg.Add(args.Processes) for i := 0; i < args.Processes; i++ { go func() { for reg := range ch { aggregate(&args, reg, out) } wg.Done() }() } fmt.Println(strings.Join(hdr, "\t")) pwg := writeOut(out) wg.Wait() close(out) pwg.Wait() } func writeOut(ch chan []block) *sync.WaitGroup { var wg sync.WaitGroup wg.Add(1) go func() { stdout := bufio.NewWriter(os.Stdout) for blocks := range ch { for _, bl := range blocks { stdout.WriteString(bl.String()) stdout.WriteByte('\n') } stdout.Flush() } stdout.Flush() wg.Done() }() return &wg } var chunkSize = 5000000 type region struct { chrom string start int // 1-based start i int } func (r region) String() string { return r.chrom + ":" + strconv.Itoa(r.start) } func genRegions(l int, chrom string) chan region { ch := make(chan region, 2) go func() { var k int for i := 0; i < l; i += chunkSize { ch <- region{chrom: chrom, start: i + 1, i: k} k++ } close(ch) }() return ch } type site struct { pos0 int depths []int } func parseLine(line string) site { toks := strings.Split(line, "\t") toks[len(toks)-1] = strings.TrimSpace(toks[len(toks)-1]) pos, err := strconv.Atoi(toks[1]) if err != nil { panic(err) } s := site{pos0: pos - 1, depths: make([]int, len(toks)-2)} for i, str := range toks[2:] { s.depths[i], err = strconv.Atoi(str) if err != nil { panic(err) } } return s } func sufficientDepth(s site, a *dargs) bool { var n int for _, d := range s.depths { if d >= a.MinCov { n++ } } return n > a.minSamples } type block struct { chrom string start int // 0-based end int // 1-based depths []string } func (b block) String() string { return fmt.Sprintf("%s\t%d\t%d\t%s", b.chrom, b.start, b.end, strings.Join(b.depths, "\t")) } func splitBlocks(chrom string, cache []site, a *dargs) []block { blocks := make([]block, 0, 2) var i, lasti int for i < len(cache) { blk := block{chrom: chrom, start: cache[i].pos0} i++ for ; i < len(cache) && cache[i].pos0-blk.start < a.Window; i++ { } blk.end = cache[i-1].pos0 + 1 blk.depths = means(cache[lasti:i]) blocks = append(blocks, blk) lasti = i } return blocks } func aggregate(a *dargs, r region, out chan []block) { cache := make([]site, 0, 2000) blocks := make([]block, 0, 256) cargs := append([]string{"depth", "-q", "0", "-Q", strconv.Itoa(a.Q), "-d", strconv.Itoa(a.MaxCov), "-r", r.String()}, a.Bams...) cmd := exec.Command("samtools", cargs...) cmd.Stderr = os.Stderr pipeout, err := cmd.StdoutPipe() if err != nil { panic(err) } if err := cmd.Start(); err != nil { panic(err) } rdr := bufio.NewReader(pipeout) // since we are running multiple adjacent blocks in parallel: // only start after we've seen empty // only end after we've seen empty seen0 := false for line, err := rdr.ReadString('\n'); err == nil; line, err = rdr.ReadString('\n') { s := parseLine(line) suf := sufficientDepth(s, a) // check that we've encountered ... if !suf { seen0 = true // once we complete a block, we bail if we're outside of the chunk. if s.pos0 > r.start+chunkSize { if len(cache) == 0 || s.pos0-cache[len(cache)-1].pos0 >= a.MaxSkip { if err := cmd.Process.Kill(); err != nil { panic(err) } break } } } // and are past a 0 region. if !seen0 { continue } if (len(cache) == 0 || s.pos0-(cache[len(cache)-1].pos0+1) <= a.MaxSkip) && suf { cache = append(cache, s) } else if len(cache) > 0 && s.pos0-(cache[len(cache)-1].pos0+1) > a.MaxSkip { if len(cache) >= a.MinSize { blocks = append(blocks, splitBlocks(a.Chrom, cache, a)...) //dps := means(cache) //blocks = append(blocks, block{chrom: a.Chrom, start: cache[0].pos0, end: cache[len(cache)-1].pos0 + 1, depths: dps}) } cache = cache[:0] if suf { cache = append(cache, s) } } } if len(cache) > 0 { //dps := means(cache) //blocks = append(blocks, block{chrom: a.Chrom, start: cache[0].pos0, end: cache[len(cache)-1].pos0 + 1, depths: dps}) blocks = append(blocks, splitBlocks(a.Chrom, cache, a)...) cache = cache[:0] } if err := cmd.Wait(); err != nil { if _, ok := err.(*exec.ExitError); !ok { panic(err) } } out <- blocks } func means(sites []site) []string { dps := make([]float64, len(sites[0].depths)) for _, s := range sites { for i, d := range s.depths { dps[i] += float64(d) / 1000. } } l := sites[len(sites)-1].pos0 - sites[0].pos0 + 1 sdps := make([]string, len(dps)) for i, d := range dps { sdps[i] = fmt.Sprintf("%.2f", d/float64(l)*1000) } return sdps } ================================================ FILE: samplename/README.md ================================================ samplename ========== report the samplename(s) from a bam using the read-group info. ``` Usage: goleft samplename [--errormulti] BAM Positional arguments: BAM bam for to get sample name(s) Options: --errormulti, -e return an error if there is not exactly 1 sample in the bam. --help, -h display this help and exit --version display version and exit ``` ================================================ FILE: samplename/functional-tests.sh ================================================ #!/bin/bash test -e ssshtest || wget -q https://raw.githubusercontent.com/ryanlayer/ssshtest/master/ssshtest . ssshtest set -uo pipefail go build -o ./goleft_test ../cmd/goleft/goleft.go run check_sample_name ./goleft_test samplename ../indexcov/samples/sample_paper_0021.bam assert_exit_code 0 assert_in_stdout sample_paper_0021 run check_sample_name_e ./goleft_test samplename -e ../indexcov/samples/sample_paper_0021.bam assert_exit_code 0 assert_in_stdout sample_paper_0021 ================================================ FILE: samplename/samplename.go ================================================ package samplename import ( "fmt" "os" "strings" arg "github.com/alexflint/go-arg" "github.com/biogo/hts/bam" "github.com/biogo/hts/sam" "github.com/brentp/goleft" ) func Names(h *sam.Header) []string { rgs := h.RGs() if len(rgs) == 1 { v := rgs[0].Get(sam.Tag([2]byte{'S', 'M'})) if v == "" { return nil } return []string{v} } m := make(map[string]bool) tag := sam.Tag([2]byte{'S', 'M'}) for _, rg := range rgs { v := rg.Get(tag) if v == "" { continue } m[v] = true } names := make([]string, 0, len(m)) for sm := range m { names = append(names, sm) } return names } type cliargs struct { Bam string `arg:"positional,required,help:bam for to get sample name(s)"` ErrorMulti bool `arg:"-e,help:return an error if there is not exactly 1 sample in the bam."` } func (c cliargs) Version() string { return fmt.Sprintf("samplename %s", goleft.Version) } func Main() { cli := &cliargs{} arg.MustParse(cli) f, err := os.Open(cli.Bam) if err != nil { panic(err) } defer f.Close() b, err := bam.NewReader(f, 1) if err != nil { panic(err) } defer b.Close() names := Names(b.Header()) if cli.ErrorMulti && len(names) != 1 { panic(fmt.Sprintf("goleft/samplename: found multiple samples in %s", cli.Bam)) } fmt.Println(strings.Join(names, "\n")) }