├── .github ├── dependabot.yml └── workflows │ ├── release.yaml │ └── test.yaml ├── .gitignore ├── .travis.yml ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── ci ├── before_deploy.sh ├── install.sh ├── script.sh ├── sha256.sh └── utils.sh ├── src └── main.rs └── test ├── barcodes.csv ├── test.bam └── test.bam.bai /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: cargo 4 | directory: "/" 5 | schedule: 6 | interval: weekly 7 | open-pull-requests-limit: 10 8 | - package-ecosystem: "github-actions" 9 | directory: "/" 10 | schedule: 11 | interval: weekly 12 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | # Sequence of patterns matched against refs/tags 4 | tags: 5 | - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 6 | 7 | name: Build and Upload Release 8 | 9 | env: 10 | CARGO_INCREMENTAL: 0 11 | 12 | jobs: 13 | 14 | linux: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout git repository 18 | uses: actions/checkout@v4 19 | - name: Login to GitHub Package Registry 20 | run: docker login docker.pkg.github.com -u 10xbuild -p ${{secrets.GH_PAT}} 21 | - name: Make release build 22 | run: > 23 | docker run -v ${{github.workspace}}:/root 24 | -e GITHUB_SHA -e GITHUB_REF 25 | docker.pkg.github.com/10xdev/toolchain-scripts/toolchain:latest 26 | /bin/bash -lec ' 27 | cargo build --release; 28 | target/release/subset-bam --help | grep -q subset-bam; 29 | readelf -V target/release/subset-bam; 30 | '; 31 | mkdir ${{runner.temp}}/artifacts; 32 | cp -a target/release/subset-bam ${{runner.temp}}/artifacts/subset-bam-linux 33 | - name: Upload build artifact 34 | uses: actions/upload-artifact@v3 35 | with: 36 | name: subset-bam 37 | path: ${{runner.temp}}/artifacts 38 | macos: 39 | runs-on: macos-latest 40 | env: 41 | MACOSX_DEPLOYMENT_TARGET: 10.7 42 | steps: 43 | - name: Checkout git repository 44 | uses: actions/checkout@v4 45 | - name: Make release build 46 | run: | 47 | cargo build --release 48 | target/release/subset-bam --help | grep -q subset-bam 49 | mkdir ${{runner.temp}}/artifacts 50 | cp -a target/release/subset-bam ${{runner.temp}}/artifacts/subset-bam-macos 51 | - name: Upload build artifact 52 | uses: actions/upload-artifact@v3 53 | with: 54 | name: subset-bam 55 | path: ${{runner.temp}}/artifacts 56 | 57 | setup-release: 58 | needs: [linux, macos] 59 | runs-on: ubuntu-latest 60 | steps: 61 | - uses: actions/download-artifact@v3 62 | with: 63 | name: subset-bam 64 | path: ${{runner.temp}}/artifacts 65 | 66 | - run: ls ${{runner.temp}}/artifacts 67 | 68 | - name: Create Release 69 | id: create_release 70 | uses: actions/create-release@v1 71 | env: 72 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 73 | with: 74 | tag_name: ${{ github.ref }} 75 | release_name: Release ${{ github.ref }} 76 | draft: false 77 | prerelease: false 78 | 79 | - name: Upload Linux 80 | id: upload-linux-release 81 | uses: actions/upload-release-asset@v1 82 | env: 83 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 84 | with: 85 | upload_url: ${{ steps.create_release.outputs.upload_url }} 86 | asset_path: ${{runner.temp}}/artifacts/subset-bam-linux 87 | asset_name: subset-bam_linux 88 | asset_content_type: application/octet-stream 89 | 90 | - name: Upload Mac 91 | id: upload-mac-release 92 | uses: actions/upload-release-asset@v1 93 | env: 94 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 95 | with: 96 | upload_url: ${{ steps.create_release.outputs.upload_url }} 97 | asset_path: ${{runner.temp}}/artifacts/subset-bam-macos 98 | asset_name: subset-bam_macos 99 | asset_content_type: application/octet-stream 100 | -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Test subset-bam 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - master 8 | 9 | env: 10 | CARGO_INCREMENTAL: 0 11 | 12 | jobs: 13 | test-mac: 14 | # This job runs on MacOS Catalina 15 | runs-on: macos-latest 16 | steps: 17 | - name: rust version 18 | run: rustup default 1.69.0 19 | - name: add rustfmt 20 | run: rustup component add rustfmt 21 | - name: Checkout subset-bam master 22 | uses: actions/checkout@v4 23 | - name: Check Rust formatting 24 | run: cargo fmt -- --check 25 | - name: build-subset-bam 26 | run: cargo build --release 27 | - name: unit tests 28 | run: cargo test --release -- --nocapture 29 | 30 | test-linux: 31 | # This job runs on Linux 32 | runs-on: ubuntu-latest 33 | steps: 34 | - name: rust version 35 | run: rustup default 1.69.0 36 | - name: add rustfmt 37 | run: rustup component add rustfmt 38 | - name: Checkout subset-bam master 39 | uses: actions/checkout@v4 40 | - name: Check Rust formatting 41 | run: cargo fmt -- --check 42 | - name: build-subset-bam 43 | run: cargo build --release 44 | - name: unit tests 45 | run: cargo test --release -- --nocapture 46 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: rust 2 | env: 3 | global: 4 | - PROJECT_NAME: subset-bam 5 | - RUST_BACKTRACE: full 6 | matrix: 7 | fast_finish: true 8 | include: 9 | - os: osx 10 | rust: stable 11 | env: TARGET=x86_64-apple-darwin 12 | - os: linux 13 | rust: stable 14 | env: TARGET=x86_64-unknown-linux-gnu 15 | install: ci/install.sh 16 | script: ci/script.sh 17 | before_deploy: ci/before_deploy.sh 18 | deploy: 19 | provider: releases 20 | api_key: 21 | secure: WmRDPhN2x48rqNZSscMBRJ9ISiGII8Gxp3x0SEJW+EQUmsNMfJ23QxS9x59ZGNy9RMLF6u+LalyAsCo+Gn1XS4sj27imQ5keXWzHtsoENdThldoFybCkv3y/Gj5/zUWfUXFaNoMm8yiTHr0gZCnv5sRfgI0BaEfxBkLz7DRasfCw13UjncLwk56A20iD8SEFeGNggE8rj/TxLJuaHMldQdvZMnnV0WGo6KdFRz7tr3c381PO/ps0/L7NWgAOlrz0uaZ27KYycVLKUjmhkeV7gzm15VJDDnsAKhUAyqlJWpMAIVimU6mdi6XCJ1M/mpwQJiU9L8YzKcIKTTURuxVwH8NNqzwIitQcxgg/G182p2/yxdawEmgz+DKPgzZfuiBlp3xLu8P17aLdNSKoSn9ATvJPYIIjkJ+dgJ6rJTDCBbNtTTDTWEyK2ka8nmKmY3wE3ky6PCedRkxSuMs40x3cP2XQWIY5o7W4uWodXpINjHwJyYdqmmBN/z0K+k4DMrypf4A7XgSXzyRfRK3S0JpRZfmxnBMu8fGkJec5oTycJDKN7COGhbGdwDeMg4TjyHgJEr/xEXyXY+isN4McxKeFQ3qZcTL7MS/G0SlkkQ+Y97xYUNg5hXouXJIfuHWLGnysahSwfJm6/2oUvNk1ANB9NFqj+kT7CiifbwbiLAHvcOc= 22 | file: deployment/${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}.tar.gz 23 | file_glob: true 24 | skip_cleanup: true 25 | on: 26 | repo: 10XDev/subset-bam 27 | branch: master 28 | tags: true 29 | condition: "$TARGET = x86_64-apple-darwin" 30 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.12.1" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "a49806b9dadc843c61e7c97e72490ad7f7220ae249012fbda9ad0609457c0543" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler32" 16 | version = "1.1.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "0.6.10" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" 25 | dependencies = [ 26 | "memchr 2.3.3", 27 | ] 28 | 29 | [[package]] 30 | name = "aho-corasick" 31 | version = "0.7.10" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" 34 | dependencies = [ 35 | "memchr 2.3.3", 36 | ] 37 | 38 | [[package]] 39 | name = "ansi_term" 40 | version = "0.11.0" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 43 | dependencies = [ 44 | "winapi", 45 | ] 46 | 47 | [[package]] 48 | name = "arrayref" 49 | version = "0.3.6" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 52 | 53 | [[package]] 54 | name = "arrayvec" 55 | version = "0.5.1" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" 58 | 59 | [[package]] 60 | name = "atty" 61 | version = "0.2.14" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 64 | dependencies = [ 65 | "hermit-abi", 66 | "libc", 67 | "winapi", 68 | ] 69 | 70 | [[package]] 71 | name = "autocfg" 72 | version = "1.0.0" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" 75 | 76 | [[package]] 77 | name = "backtrace" 78 | version = "0.3.49" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "05100821de9e028f12ae3d189176b41ee198341eb8f369956407fea2f5cc666c" 81 | dependencies = [ 82 | "addr2line", 83 | "cfg-if", 84 | "libc", 85 | "miniz_oxide", 86 | "object", 87 | "rustc-demangle", 88 | ] 89 | 90 | [[package]] 91 | name = "base64" 92 | version = "0.11.0" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" 95 | 96 | [[package]] 97 | name = "bindgen" 98 | version = "0.36.1" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "acc8fa644dc2b6f6c2d391ccea460da1ad9bf2271c4e9ffaad88d2dd727a7295" 101 | dependencies = [ 102 | "cexpr", 103 | "cfg-if", 104 | "clang-sys", 105 | "clap", 106 | "env_logger", 107 | "lazy_static 1.4.0", 108 | "log", 109 | "peeking_take_while", 110 | "proc-macro2 0.3.5", 111 | "quote 0.5.2", 112 | "regex 0.2.11", 113 | "which", 114 | ] 115 | 116 | [[package]] 117 | name = "bitflags" 118 | version = "0.9.1" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" 121 | 122 | [[package]] 123 | name = "bitflags" 124 | version = "1.2.1" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 127 | 128 | [[package]] 129 | name = "blake2b_simd" 130 | version = "0.5.10" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" 133 | dependencies = [ 134 | "arrayref", 135 | "arrayvec", 136 | "constant_time_eq", 137 | ] 138 | 139 | [[package]] 140 | name = "bstr" 141 | version = "0.2.13" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "31accafdb70df7871592c058eca3985b71104e15ac32f64706022c58867da931" 144 | dependencies = [ 145 | "lazy_static 1.4.0", 146 | "memchr 2.3.3", 147 | "regex-automata", 148 | "serde", 149 | ] 150 | 151 | [[package]] 152 | name = "byteorder" 153 | version = "1.3.4" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" 156 | 157 | [[package]] 158 | name = "cc" 159 | version = "1.0.54" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "7bbb73db36c1246e9034e307d0fba23f9a2e251faa47ade70c1bd252220c8311" 162 | 163 | [[package]] 164 | name = "cexpr" 165 | version = "0.2.3" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "42aac45e9567d97474a834efdee3081b3c942b2205be932092f53354ce503d6c" 168 | dependencies = [ 169 | "nom", 170 | ] 171 | 172 | [[package]] 173 | name = "cfg-if" 174 | version = "0.1.10" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 177 | 178 | [[package]] 179 | name = "chrono" 180 | version = "0.4.11" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" 183 | dependencies = [ 184 | "num-integer", 185 | "num-traits", 186 | "time", 187 | ] 188 | 189 | [[package]] 190 | name = "clang-sys" 191 | version = "0.22.0" 192 | source = "registry+https://github.com/rust-lang/crates.io-index" 193 | checksum = "939a1a34310b120d26eba35c29475933128b0ec58e24b43327f8dbe6036fc538" 194 | dependencies = [ 195 | "glob", 196 | "libc", 197 | "libloading", 198 | ] 199 | 200 | [[package]] 201 | name = "clap" 202 | version = "2.33.1" 203 | source = "registry+https://github.com/rust-lang/crates.io-index" 204 | checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" 205 | dependencies = [ 206 | "ansi_term", 207 | "atty", 208 | "bitflags 1.2.1", 209 | "strsim", 210 | "textwrap", 211 | "unicode-width", 212 | "vec_map", 213 | ] 214 | 215 | [[package]] 216 | name = "constant_time_eq" 217 | version = "0.1.5" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 220 | 221 | [[package]] 222 | name = "crossbeam-deque" 223 | version = "0.7.3" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" 226 | dependencies = [ 227 | "crossbeam-epoch", 228 | "crossbeam-utils", 229 | "maybe-uninit", 230 | ] 231 | 232 | [[package]] 233 | name = "crossbeam-epoch" 234 | version = "0.8.2" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" 237 | dependencies = [ 238 | "autocfg", 239 | "cfg-if", 240 | "crossbeam-utils", 241 | "lazy_static 1.4.0", 242 | "maybe-uninit", 243 | "memoffset", 244 | "scopeguard", 245 | ] 246 | 247 | [[package]] 248 | name = "crossbeam-queue" 249 | version = "0.2.3" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" 252 | dependencies = [ 253 | "cfg-if", 254 | "crossbeam-utils", 255 | "maybe-uninit", 256 | ] 257 | 258 | [[package]] 259 | name = "crossbeam-utils" 260 | version = "0.7.2" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" 263 | dependencies = [ 264 | "autocfg", 265 | "cfg-if", 266 | "lazy_static 1.4.0", 267 | ] 268 | 269 | [[package]] 270 | name = "csv" 271 | version = "1.1.3" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "00affe7f6ab566df61b4be3ce8cf16bc2576bca0963ceb0955e45d514bf9a279" 274 | dependencies = [ 275 | "bstr", 276 | "csv-core", 277 | "itoa", 278 | "ryu", 279 | "serde", 280 | ] 281 | 282 | [[package]] 283 | name = "csv-core" 284 | version = "0.1.10" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" 287 | dependencies = [ 288 | "memchr 2.3.3", 289 | ] 290 | 291 | [[package]] 292 | name = "custom_derive" 293 | version = "0.1.7" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" 296 | 297 | [[package]] 298 | name = "data-encoding" 299 | version = "2.2.1" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69" 302 | 303 | [[package]] 304 | name = "dirs" 305 | version = "1.0.5" 306 | source = "registry+https://github.com/rust-lang/crates.io-index" 307 | checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" 308 | dependencies = [ 309 | "libc", 310 | "redox_users", 311 | "winapi", 312 | ] 313 | 314 | [[package]] 315 | name = "either" 316 | version = "1.5.3" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" 319 | 320 | [[package]] 321 | name = "env_logger" 322 | version = "0.5.13" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" 325 | dependencies = [ 326 | "atty", 327 | "humantime", 328 | "log", 329 | "regex 1.3.9", 330 | "termcolor", 331 | ] 332 | 333 | [[package]] 334 | name = "faccess" 335 | version = "0.2.4" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "59ae66425802d6a903e268ae1a08b8c38ba143520f227a205edf4e9c7e3e26d5" 338 | dependencies = [ 339 | "bitflags 1.2.1", 340 | "libc", 341 | "winapi", 342 | ] 343 | 344 | [[package]] 345 | name = "failure" 346 | version = "0.1.8" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" 349 | dependencies = [ 350 | "backtrace", 351 | "failure_derive", 352 | ] 353 | 354 | [[package]] 355 | name = "failure_derive" 356 | version = "0.1.8" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" 359 | dependencies = [ 360 | "proc-macro2 1.0.18", 361 | "quote 1.0.7", 362 | "syn", 363 | "synstructure", 364 | ] 365 | 366 | [[package]] 367 | name = "fs-utils" 368 | version = "1.1.4" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "6fc7a9dc005c944c98a935e7fd626faf5bf7e5a609f94bc13e42fc4a02e52593" 371 | dependencies = [ 372 | "quick-error", 373 | ] 374 | 375 | [[package]] 376 | name = "getrandom" 377 | version = "0.1.14" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" 380 | dependencies = [ 381 | "cfg-if", 382 | "libc", 383 | "wasi", 384 | ] 385 | 386 | [[package]] 387 | name = "gimli" 388 | version = "0.21.0" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c" 391 | 392 | [[package]] 393 | name = "glob" 394 | version = "0.2.11" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" 397 | 398 | [[package]] 399 | name = "hermit-abi" 400 | version = "0.1.14" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "b9586eedd4ce6b3c498bc3b4dd92fc9f11166aa908a914071953768066c67909" 403 | dependencies = [ 404 | "libc", 405 | ] 406 | 407 | [[package]] 408 | name = "human-panic" 409 | version = "1.0.3" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "39f357a500abcbd7c5f967c1d45c8838585b36743823b9d43488f24850534e36" 412 | dependencies = [ 413 | "backtrace", 414 | "os_type", 415 | "serde", 416 | "serde_derive", 417 | "termcolor", 418 | "toml", 419 | "uuid", 420 | ] 421 | 422 | [[package]] 423 | name = "humantime" 424 | version = "1.3.0" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" 427 | dependencies = [ 428 | "quick-error", 429 | ] 430 | 431 | [[package]] 432 | name = "idna" 433 | version = "0.1.5" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 436 | dependencies = [ 437 | "matches", 438 | "unicode-bidi", 439 | "unicode-normalization", 440 | ] 441 | 442 | [[package]] 443 | name = "ieee754" 444 | version = "0.2.6" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "9007da9cacbd3e6343da136e98b0d2df013f553d35bdec8b518f07bea768e19c" 447 | 448 | [[package]] 449 | name = "itertools" 450 | version = "0.6.5" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "d3f2be4da1690a039e9ae5fd575f706a63ad5a2120f161b1d653c9da3930dd21" 453 | dependencies = [ 454 | "either", 455 | ] 456 | 457 | [[package]] 458 | name = "itoa" 459 | version = "0.4.6" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" 462 | 463 | [[package]] 464 | name = "lazy_static" 465 | version = "0.2.11" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" 468 | 469 | [[package]] 470 | name = "lazy_static" 471 | version = "1.4.0" 472 | source = "registry+https://github.com/rust-lang/crates.io-index" 473 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 474 | 475 | [[package]] 476 | name = "libc" 477 | version = "0.2.71" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49" 480 | 481 | [[package]] 482 | name = "libloading" 483 | version = "0.5.2" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" 486 | dependencies = [ 487 | "cc", 488 | "winapi", 489 | ] 490 | 491 | [[package]] 492 | name = "linear-map" 493 | version = "1.2.0" 494 | source = "registry+https://github.com/rust-lang/crates.io-index" 495 | checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" 496 | 497 | [[package]] 498 | name = "log" 499 | version = "0.4.19" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" 502 | 503 | [[package]] 504 | name = "matches" 505 | version = "0.1.8" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 508 | 509 | [[package]] 510 | name = "maybe-uninit" 511 | version = "2.0.0" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 514 | 515 | [[package]] 516 | name = "memchr" 517 | version = "1.0.2" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" 520 | dependencies = [ 521 | "libc", 522 | ] 523 | 524 | [[package]] 525 | name = "memchr" 526 | version = "2.3.3" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" 529 | 530 | [[package]] 531 | name = "memoffset" 532 | version = "0.5.4" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" 535 | dependencies = [ 536 | "autocfg", 537 | ] 538 | 539 | [[package]] 540 | name = "miniz_oxide" 541 | version = "0.3.7" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" 544 | dependencies = [ 545 | "adler32", 546 | ] 547 | 548 | [[package]] 549 | name = "newtype_derive" 550 | version = "0.1.6" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "ac8cd24d9f185bb7223958d8c1ff7a961b74b1953fd05dba7cc568a63b3861ec" 553 | dependencies = [ 554 | "rustc_version", 555 | ] 556 | 557 | [[package]] 558 | name = "nom" 559 | version = "3.2.1" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b" 562 | dependencies = [ 563 | "memchr 1.0.2", 564 | ] 565 | 566 | [[package]] 567 | name = "num-integer" 568 | version = "0.1.43" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" 571 | dependencies = [ 572 | "autocfg", 573 | "num-traits", 574 | ] 575 | 576 | [[package]] 577 | name = "num-traits" 578 | version = "0.2.12" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" 581 | dependencies = [ 582 | "autocfg", 583 | ] 584 | 585 | [[package]] 586 | name = "num_cpus" 587 | version = "1.13.0" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" 590 | dependencies = [ 591 | "hermit-abi", 592 | "libc", 593 | ] 594 | 595 | [[package]] 596 | name = "object" 597 | version = "0.20.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5" 600 | 601 | [[package]] 602 | name = "os_type" 603 | version = "2.2.0" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "7edc011af0ae98b7f88cf7e4a83b70a54a75d2b8cb013d6efd02e5956207e9eb" 606 | dependencies = [ 607 | "regex 1.3.9", 608 | ] 609 | 610 | [[package]] 611 | name = "peeking_take_while" 612 | version = "0.1.2" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 615 | 616 | [[package]] 617 | name = "percent-encoding" 618 | version = "1.0.1" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 621 | 622 | [[package]] 623 | name = "ppv-lite86" 624 | version = "0.2.8" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" 627 | 628 | [[package]] 629 | name = "proc-macro2" 630 | version = "0.3.5" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "77997c53ae6edd6d187fec07ec41b207063b5ee6f33680e9fa86d405cdd313d4" 633 | dependencies = [ 634 | "unicode-xid 0.1.0", 635 | ] 636 | 637 | [[package]] 638 | name = "proc-macro2" 639 | version = "1.0.18" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa" 642 | dependencies = [ 643 | "unicode-xid 0.2.0", 644 | ] 645 | 646 | [[package]] 647 | name = "quick-error" 648 | version = "1.2.3" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 651 | 652 | [[package]] 653 | name = "quote" 654 | version = "0.5.2" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" 657 | dependencies = [ 658 | "proc-macro2 0.3.5", 659 | ] 660 | 661 | [[package]] 662 | name = "quote" 663 | version = "1.0.7" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" 666 | dependencies = [ 667 | "proc-macro2 1.0.18", 668 | ] 669 | 670 | [[package]] 671 | name = "rand" 672 | version = "0.7.3" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 675 | dependencies = [ 676 | "getrandom", 677 | "libc", 678 | "rand_chacha", 679 | "rand_core", 680 | "rand_hc", 681 | ] 682 | 683 | [[package]] 684 | name = "rand_chacha" 685 | version = "0.2.2" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 688 | dependencies = [ 689 | "ppv-lite86", 690 | "rand_core", 691 | ] 692 | 693 | [[package]] 694 | name = "rand_core" 695 | version = "0.5.1" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 698 | dependencies = [ 699 | "getrandom", 700 | ] 701 | 702 | [[package]] 703 | name = "rand_hc" 704 | version = "0.2.0" 705 | source = "registry+https://github.com/rust-lang/crates.io-index" 706 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 707 | dependencies = [ 708 | "rand_core", 709 | ] 710 | 711 | [[package]] 712 | name = "rayon" 713 | version = "1.3.1" 714 | source = "registry+https://github.com/rust-lang/crates.io-index" 715 | checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" 716 | dependencies = [ 717 | "autocfg", 718 | "crossbeam-deque", 719 | "either", 720 | "rayon-core", 721 | ] 722 | 723 | [[package]] 724 | name = "rayon-core" 725 | version = "1.7.1" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" 728 | dependencies = [ 729 | "crossbeam-deque", 730 | "crossbeam-queue", 731 | "crossbeam-utils", 732 | "lazy_static 1.4.0", 733 | "num_cpus", 734 | ] 735 | 736 | [[package]] 737 | name = "redox_syscall" 738 | version = "0.1.56" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 741 | 742 | [[package]] 743 | name = "redox_users" 744 | version = "0.3.4" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" 747 | dependencies = [ 748 | "getrandom", 749 | "redox_syscall", 750 | "rust-argon2", 751 | ] 752 | 753 | [[package]] 754 | name = "regex" 755 | version = "0.2.11" 756 | source = "registry+https://github.com/rust-lang/crates.io-index" 757 | checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" 758 | dependencies = [ 759 | "aho-corasick 0.6.10", 760 | "memchr 2.3.3", 761 | "regex-syntax 0.5.6", 762 | "thread_local 0.3.6", 763 | "utf8-ranges", 764 | ] 765 | 766 | [[package]] 767 | name = "regex" 768 | version = "1.3.9" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" 771 | dependencies = [ 772 | "aho-corasick 0.7.10", 773 | "memchr 2.3.3", 774 | "regex-syntax 0.6.18", 775 | "thread_local 1.0.1", 776 | ] 777 | 778 | [[package]] 779 | name = "regex-automata" 780 | version = "0.1.9" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" 783 | dependencies = [ 784 | "byteorder", 785 | ] 786 | 787 | [[package]] 788 | name = "regex-syntax" 789 | version = "0.5.6" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" 792 | dependencies = [ 793 | "ucd-util", 794 | ] 795 | 796 | [[package]] 797 | name = "regex-syntax" 798 | version = "0.6.18" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" 801 | 802 | [[package]] 803 | name = "remove_dir_all" 804 | version = "0.5.3" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 807 | dependencies = [ 808 | "winapi", 809 | ] 810 | 811 | [[package]] 812 | name = "ring" 813 | version = "0.14.6" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "426bc186e3e95cac1e4a4be125a4aca7e84c2d616ffc02244eef36e2a60a093c" 816 | dependencies = [ 817 | "cc", 818 | "lazy_static 1.4.0", 819 | "libc", 820 | "spin", 821 | "untrusted", 822 | "winapi", 823 | ] 824 | 825 | [[package]] 826 | name = "rust-argon2" 827 | version = "0.7.0" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" 830 | dependencies = [ 831 | "base64", 832 | "blake2b_simd", 833 | "constant_time_eq", 834 | "crossbeam-utils", 835 | ] 836 | 837 | [[package]] 838 | name = "rust-htslib" 839 | version = "0.20.0" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "f702eebd89609dd27605999d981b67b3380861cc2d4318a2e827709c884006c4" 842 | dependencies = [ 843 | "bindgen", 844 | "bitflags 0.9.1", 845 | "custom_derive", 846 | "fs-utils", 847 | "ieee754", 848 | "itertools", 849 | "lazy_static 0.2.11", 850 | "libc", 851 | "linear-map", 852 | "newtype_derive", 853 | "quick-error", 854 | "regex 1.3.9", 855 | "url", 856 | ] 857 | 858 | [[package]] 859 | name = "rustc-demangle" 860 | version = "0.1.16" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 863 | 864 | [[package]] 865 | name = "rustc_version" 866 | version = "0.1.7" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084" 869 | dependencies = [ 870 | "semver", 871 | ] 872 | 873 | [[package]] 874 | name = "ryu" 875 | version = "1.0.5" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" 878 | 879 | [[package]] 880 | name = "scopeguard" 881 | version = "1.1.0" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 884 | 885 | [[package]] 886 | name = "semver" 887 | version = "0.1.20" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac" 890 | 891 | [[package]] 892 | name = "serde" 893 | version = "1.0.113" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "6135c78461981c79497158ef777264c51d9d0f4f3fc3a4d22b915900e42dac6a" 896 | 897 | [[package]] 898 | name = "serde_derive" 899 | version = "1.0.113" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "93c5eaa17d0954cb481cdcfffe9d84fcfa7a1a9f2349271e678677be4c26ae31" 902 | dependencies = [ 903 | "proc-macro2 1.0.18", 904 | "quote 1.0.7", 905 | "syn", 906 | ] 907 | 908 | [[package]] 909 | name = "simplelog" 910 | version = "0.5.3" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "2e95345f185d5adeb8ec93459d2dc99654e294cc6ccf5b75414d8ea262de9a13" 913 | dependencies = [ 914 | "chrono", 915 | "log", 916 | "term", 917 | ] 918 | 919 | [[package]] 920 | name = "spin" 921 | version = "0.5.2" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 924 | 925 | [[package]] 926 | name = "strsim" 927 | version = "0.8.0" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 930 | 931 | [[package]] 932 | name = "subset-bam" 933 | version = "1.1.0" 934 | dependencies = [ 935 | "clap", 936 | "csv", 937 | "data-encoding", 938 | "faccess", 939 | "failure", 940 | "human-panic", 941 | "log", 942 | "rayon", 943 | "ring", 944 | "rust-htslib", 945 | "simplelog", 946 | "tempfile", 947 | "terminal_size", 948 | ] 949 | 950 | [[package]] 951 | name = "syn" 952 | version = "1.0.31" 953 | source = "registry+https://github.com/rust-lang/crates.io-index" 954 | checksum = "b5304cfdf27365b7585c25d4af91b35016ed21ef88f17ced89c7093b43dba8b6" 955 | dependencies = [ 956 | "proc-macro2 1.0.18", 957 | "quote 1.0.7", 958 | "unicode-xid 0.2.0", 959 | ] 960 | 961 | [[package]] 962 | name = "synstructure" 963 | version = "0.12.4" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" 966 | dependencies = [ 967 | "proc-macro2 1.0.18", 968 | "quote 1.0.7", 969 | "syn", 970 | "unicode-xid 0.2.0", 971 | ] 972 | 973 | [[package]] 974 | name = "tempfile" 975 | version = "3.1.0" 976 | source = "registry+https://github.com/rust-lang/crates.io-index" 977 | checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" 978 | dependencies = [ 979 | "cfg-if", 980 | "libc", 981 | "rand", 982 | "redox_syscall", 983 | "remove_dir_all", 984 | "winapi", 985 | ] 986 | 987 | [[package]] 988 | name = "term" 989 | version = "0.5.2" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" 992 | dependencies = [ 993 | "byteorder", 994 | "dirs", 995 | "winapi", 996 | ] 997 | 998 | [[package]] 999 | name = "termcolor" 1000 | version = "1.1.0" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" 1003 | dependencies = [ 1004 | "winapi-util", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "terminal_size" 1009 | version = "0.1.12" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b" 1012 | dependencies = [ 1013 | "libc", 1014 | "winapi", 1015 | ] 1016 | 1017 | [[package]] 1018 | name = "textwrap" 1019 | version = "0.11.0" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 1022 | dependencies = [ 1023 | "unicode-width", 1024 | ] 1025 | 1026 | [[package]] 1027 | name = "thread_local" 1028 | version = "0.3.6" 1029 | source = "registry+https://github.com/rust-lang/crates.io-index" 1030 | checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1031 | dependencies = [ 1032 | "lazy_static 1.4.0", 1033 | ] 1034 | 1035 | [[package]] 1036 | name = "thread_local" 1037 | version = "1.0.1" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" 1040 | dependencies = [ 1041 | "lazy_static 1.4.0", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "time" 1046 | version = "0.1.43" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" 1049 | dependencies = [ 1050 | "libc", 1051 | "winapi", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "tinyvec" 1056 | version = "0.3.3" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" 1059 | 1060 | [[package]] 1061 | name = "toml" 1062 | version = "0.5.6" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" 1065 | dependencies = [ 1066 | "serde", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "ucd-util" 1071 | version = "0.1.8" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "c85f514e095d348c279b1e5cd76795082cf15bd59b93207832abe0b1d8fed236" 1074 | 1075 | [[package]] 1076 | name = "unicode-bidi" 1077 | version = "0.3.4" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1080 | dependencies = [ 1081 | "matches", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "unicode-normalization" 1086 | version = "0.1.13" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" 1089 | dependencies = [ 1090 | "tinyvec", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "unicode-width" 1095 | version = "0.1.7" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" 1098 | 1099 | [[package]] 1100 | name = "unicode-xid" 1101 | version = "0.1.0" 1102 | source = "registry+https://github.com/rust-lang/crates.io-index" 1103 | checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1104 | 1105 | [[package]] 1106 | name = "unicode-xid" 1107 | version = "0.2.0" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 1110 | 1111 | [[package]] 1112 | name = "untrusted" 1113 | version = "0.6.2" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | checksum = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f" 1116 | 1117 | [[package]] 1118 | name = "url" 1119 | version = "1.7.2" 1120 | source = "registry+https://github.com/rust-lang/crates.io-index" 1121 | checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 1122 | dependencies = [ 1123 | "idna", 1124 | "matches", 1125 | "percent-encoding", 1126 | ] 1127 | 1128 | [[package]] 1129 | name = "utf8-ranges" 1130 | version = "1.0.4" 1131 | source = "registry+https://github.com/rust-lang/crates.io-index" 1132 | checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" 1133 | 1134 | [[package]] 1135 | name = "uuid" 1136 | version = "0.8.1" 1137 | source = "registry+https://github.com/rust-lang/crates.io-index" 1138 | checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" 1139 | dependencies = [ 1140 | "rand", 1141 | ] 1142 | 1143 | [[package]] 1144 | name = "vec_map" 1145 | version = "0.8.2" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 1148 | 1149 | [[package]] 1150 | name = "wasi" 1151 | version = "0.9.0+wasi-snapshot-preview1" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1154 | 1155 | [[package]] 1156 | name = "which" 1157 | version = "1.0.5" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "e84a603e7e0b1ce1aa1ee2b109c7be00155ce52df5081590d1ffb93f4f515cb2" 1160 | dependencies = [ 1161 | "libc", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "winapi" 1166 | version = "0.3.8" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 1169 | dependencies = [ 1170 | "winapi-i686-pc-windows-gnu", 1171 | "winapi-x86_64-pc-windows-gnu", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "winapi-i686-pc-windows-gnu" 1176 | version = "0.4.0" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1179 | 1180 | [[package]] 1181 | name = "winapi-util" 1182 | version = "0.1.5" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1185 | dependencies = [ 1186 | "winapi", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "winapi-x86_64-pc-windows-gnu" 1191 | version = "0.4.0" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1194 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "subset-bam" 3 | version = "1.1.0" 4 | authors = ["Ian Fiddes ", "Wyatt McDonnell "] 5 | 6 | [dependencies] 7 | rust-htslib = "0.20" 8 | csv = "1" 9 | failure = "*" 10 | clap = "*" 11 | terminal_size = "*" 12 | human-panic = "1.0.1" 13 | simplelog = "0.5.0" 14 | log = "*" 15 | tempfile = "*" 16 | rayon = "*" 17 | ring = "0.14.6" 18 | data-encoding = "*" 19 | faccess="0.2.4" 20 | 21 | [profile.release] 22 | debug = 1 23 | lto = true 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 10x Genomics, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # subset-bam 2 | 3 | `subset-bam` is a tool to subset a 10x Genomics BAM file based on a tag, most commonly the cell barcode tag. The latest version is `v1.1.0` and can be found [on the releases page](https://github.com/10XGenomics/subset-bam/releases). 4 | 5 | ## Overview of how it works 6 | `subset-bam` is a simple tool implemented in Rust that takes a 10x Genomics BAM file, a CSV file defining the subset of cells you want to isolate, and produces a new BAM file with only alignments associated with those cells. 7 | 8 | In the subsetting process, temporary BAM files will be written to your temporary file (`$TMPDIR`) location before a final concatenation step. Please make sure this location is writeable has enough space to support this operation. If you cannot write to this location, you can set your `TMPDIR` variable to a path you can write by the command `export TMPDIR=/my/writeable/path`. 9 | 10 | ## Support 11 | This tool is not officially supported. If you have any comments, please submit a GitHub issue. 12 | 13 | ## Installation 14 | 15 | `subset-bam` has automatically generated downloadable binaries for generic linux and Mac OSX under the [releases page](https://github.com/10XGenomics/subset-bam/releases). The linux binaries are expected to work on [our supported Operating Systems](https://support.10xgenomics.com/os-support). 16 | 17 | ## Compiling from source 18 | `subset-bam` is standard Rust executable project, that works with stable Rust >=1.13. Install Rust through the standard channels, then type `cargo build --release`. The executable will appear at `target/release/subset-bam`. As usual it's important to use a release build to get good performance. 19 | 20 | ## Usage 21 | 22 | `--bam (-b)`: Input 10x Genomics BAM. This BAM must have the `CB` tag to define the barcodes of cell barcodes (or the tag defined by `--bam-tag`). Must also have an index (.bai) file. REQUIRED. 23 | 24 | `--cell-barcodes (-c)`: A cell barcodes file as produced by Cell Ranger that defines which barcodes were called as cells. One barcode per line. In Cell Ranger runs, this can be found in the sub-folder `outs/filtered_gene_bc_matrices_mex/${refGenome}/barcodes.tsv` where `${refGenome}` is the name of the reference genome used in your Cell Ranger run. This file can be used as column labels for the output matrix. REQUIRED. 25 | 26 | `--out-bam (-o)`: A path to write the subsetted BAM file to. REQUIRED. 27 | 28 | `--cores`: Number of parallel cores to use. DEFAULT: 1. 29 | 30 | `--log-level`: One of `info`, `error` or `debug`. Increasing levels of logging. DEFAULT: error. 31 | 32 | `--bam-tag`: Change this to use an alternative tag to the default `CB` tag. This can be useful for subsetting BAMs from LongRanger. 33 | 34 | ## License 35 | `subset-bam` is licensed under the [MIT license](http://opensource.org/licenses/MIT). This project may not be copied, modified, or distributed except according to those terms. 36 | -------------------------------------------------------------------------------- /ci/before_deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # package the build artifacts 4 | 5 | set -ex 6 | 7 | . "$(dirname $0)/utils.sh" 8 | 9 | # Generate artifacts for release 10 | mk_artifacts() { 11 | cargo build --target "$TARGET" --release 12 | } 13 | 14 | mk_tarball() { 15 | # When cross-compiling, use the right `strip` tool on the binary. 16 | local gcc_prefix="$(gcc_prefix)" 17 | # Create a temporary dir that contains our staging area. 18 | # $tmpdir/$name is what eventually ends up as the deployed archive. 19 | local tmpdir="$(mktemp -d)" 20 | local name="${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}" 21 | local staging="$tmpdir/$name" 22 | mkdir -p "$staging" 23 | # The deployment directory is where the final archive will reside. 24 | # This path is known by the .travis.yml configuration. 25 | local out_dir="$(pwd)/deployment" 26 | mkdir -p "$out_dir" 27 | # Find the correct (most recent) Cargo "out" directory. The out directory 28 | # contains shell completion files and the man page. 29 | local cargo_out_dir="$(cargo_out_dir "target/$TARGET")" 30 | 31 | # Copy the subset-bam binary and strip it. 32 | cp "target/$TARGET/release/subset-bam" "$staging/subset-bam" 33 | #"${gcc_prefix}strip" "$staging/subset-bam" 34 | # Copy the licenses and README. 35 | cp {README.md,LICENSE} "$staging/" 36 | 37 | (cd "$tmpdir" && tar czf "$out_dir/$name.tar.gz" "$name") 38 | rm -rf "$tmpdir" 39 | } 40 | 41 | main() { 42 | mk_artifacts 43 | mk_tarball 44 | } 45 | 46 | main 47 | -------------------------------------------------------------------------------- /ci/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # install stuff needed for the `script` phase 4 | 5 | # Where rustup gets installed. 6 | export PATH="$PATH:$HOME/.cargo/bin" 7 | 8 | set -ex 9 | 10 | . "$(dirname $0)/utils.sh" 11 | 12 | install_rustup() { 13 | curl https://sh.rustup.rs -sSf \ 14 | | sh -s -- -y --default-toolchain="$TRAVIS_RUST_VERSION" 15 | rustc -V 16 | cargo -V 17 | } 18 | 19 | install_targets() { 20 | if [ $(host) != "$TARGET" ]; then 21 | rustup target add $TARGET 22 | fi 23 | } 24 | 25 | install_osx_dependencies() { 26 | if ! is_osx; then 27 | return 28 | fi 29 | 30 | brew install asciidoc docbook-xsl 31 | } 32 | 33 | configure_cargo() { 34 | local prefix=$(gcc_prefix) 35 | if [ -n "${prefix}" ]; then 36 | local gcc_suffix= 37 | if [ -n "$GCC_VERSION" ]; then 38 | gcc_suffix="-$GCC_VERSION" 39 | fi 40 | local gcc="${prefix}gcc${gcc_suffix}" 41 | 42 | # information about the cross compiler 43 | "${gcc}" -v 44 | 45 | # tell cargo which linker to use for cross compilation 46 | mkdir -p .cargo 47 | cat >>.cargo/config <&2 7 | exit 1 8 | fi 9 | version="$1" 10 | 11 | # Linux and Darwin builds. 12 | for arch in i686 x86_64; do 13 | for target in apple-darwin unknown-linux-musl; do 14 | url="https://github.com/10xDev/subset-bam/releases/download/$version/subset-bam-$version-$arch-$target.tar.gz" 15 | sha=$(curl -sfSL "$url" | sha256sum) 16 | echo "$version-$arch-$target $sha" 17 | done 18 | done 19 | 20 | # Source. 21 | for ext in zip tar.gz; do 22 | url="https://github.com/10xDev/subset-bam/archive/$version.$ext" 23 | sha=$(curl -sfSL "$url" | sha256sum) 24 | echo "source.$ext $sha" 25 | done 26 | -------------------------------------------------------------------------------- /ci/utils.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Various utility functions used through CI. 4 | 5 | # Finds Cargo's `OUT_DIR` directory from the most recent build. 6 | # 7 | # This requires one parameter corresponding to the target directory 8 | # to search for the build output. 9 | cargo_out_dir() { 10 | # This works by finding the most recent stamp file, which is produced by 11 | # every subset-bam build. 12 | target_dir="$1" 13 | find "$target_dir" -name subset-bam-stamp -print0 \ 14 | | xargs -0 ls -t \ 15 | | head -n1 \ 16 | | xargs dirname 17 | } 18 | 19 | host() { 20 | case "$TRAVIS_OS_NAME" in 21 | linux) 22 | echo x86_64-unknown-linux-gnu 23 | ;; 24 | osx) 25 | echo x86_64-apple-darwin 26 | ;; 27 | esac 28 | } 29 | 30 | architecture() { 31 | case "$TARGET" in 32 | x86_64-*) 33 | echo amd64 34 | ;; 35 | i686-*|i586-*|i386-*) 36 | echo i386 37 | ;; 38 | arm*-unknown-linux-gnueabihf) 39 | echo armhf 40 | ;; 41 | *) 42 | die "architecture: unexpected target $TARGET" 43 | ;; 44 | esac 45 | } 46 | 47 | gcc_prefix() { 48 | case "$(architecture)" in 49 | armhf) 50 | echo arm-linux-gnueabihf- 51 | ;; 52 | *) 53 | return 54 | ;; 55 | esac 56 | } 57 | 58 | is_ssse3_target() { 59 | case "$(architecture)" in 60 | amd64) return 0 ;; 61 | *) return 1 ;; 62 | esac 63 | } 64 | 65 | is_x86() { 66 | case "$(architecture)" in 67 | amd64|i386) return 0 ;; 68 | *) return 1 ;; 69 | esac 70 | } 71 | 72 | is_arm() { 73 | case "$(architecture)" in 74 | armhf) return 0 ;; 75 | *) return 1 ;; 76 | esac 77 | } 78 | 79 | is_linux() { 80 | case "$TRAVIS_OS_NAME" in 81 | linux) return 0 ;; 82 | *) return 1 ;; 83 | esac 84 | } 85 | 86 | is_osx() { 87 | case "$TRAVIS_OS_NAME" in 88 | osx) return 0 ;; 89 | *) return 1 ;; 90 | esac 91 | } 92 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2020 10X Genomics, Inc. All rights reserved. 2 | 3 | extern crate clap; 4 | extern crate csv; 5 | extern crate data_encoding; 6 | extern crate failure; 7 | extern crate rayon; 8 | extern crate ring; 9 | extern crate rust_htslib; 10 | extern crate simplelog; 11 | extern crate tempfile; 12 | extern crate terminal_size; 13 | #[macro_use] 14 | extern crate log; 15 | extern crate faccess; 16 | extern crate human_panic; 17 | 18 | use clap::{App, Arg}; 19 | use faccess::{AccessMode, PathExt}; 20 | use failure::Error; 21 | use rayon::prelude::*; 22 | use rust_htslib::bam; 23 | use rust_htslib::bam::record::Aux; 24 | use rust_htslib::bam::Record; 25 | use simplelog::*; 26 | use std::cmp; 27 | use std::collections::HashSet; 28 | use std::fs; 29 | use std::io::prelude::*; 30 | use std::io::{self, BufRead, BufReader}; 31 | use std::path::{Path, PathBuf}; 32 | use std::process; 33 | use tempfile::tempdir; 34 | use terminal_size::{terminal_size, Width}; 35 | 36 | fn get_args() -> clap::App<'static, 'static> { 37 | let args = App::new("subset-bam") 38 | .set_term_width(if let Some((Width(w), _)) = terminal_size() { w as usize } else { 120 }) 39 | .version("1.1.0") 40 | .author("Ian Fiddes , Wyatt McDonnell ") 41 | .about("Subsetting 10x Genomics BAM files") 42 | .arg(Arg::with_name("bam") 43 | .short("b") 44 | .long("bam") 45 | .value_name("FILE") 46 | .help("Cellranger BAM file.") 47 | .required(true)) 48 | .arg(Arg::with_name("cell_barcodes") 49 | .short("c") 50 | .long("cell-barcodes") 51 | .value_name("FILE") 52 | .help("File with cell barcodes to be extracted.") 53 | .required(true)) 54 | .arg(Arg::with_name("out_bam") 55 | .short("o") 56 | .long("out-bam") 57 | .value_name("OUTPUT_FILE") 58 | .help("Output BAM.") 59 | .required(true)) 60 | .arg(Arg::with_name("log_level") 61 | .long("log-level") 62 | .possible_values(&["info", "debug", "error"]) 63 | .default_value("error") 64 | .help("Logging level.")) 65 | .arg(Arg::with_name("cores") 66 | .long("cores") 67 | .default_value("1") 68 | .value_name("INTEGER") 69 | .help("Number of cores to use. If larger than 1, will write BAM subsets to temporary files before merging.")) 70 | .arg(Arg::with_name("bam_tag") 71 | .long("bam-tag") 72 | .default_value("CB") 73 | .help("Change from default value (CB) to subset alignments based on alternative tags.")); 74 | args 75 | } 76 | 77 | pub struct Locus { 78 | pub chrom: String, 79 | pub start: u32, 80 | pub end: u32, 81 | } 82 | 83 | pub struct Metrics { 84 | pub total_reads: usize, 85 | pub barcoded_reads: usize, 86 | pub kept_reads: usize, 87 | } 88 | 89 | pub struct ChunkArgs<'a> { 90 | cell_barcodes: &'a HashSet>, 91 | i: usize, 92 | bam_file: &'a str, 93 | tmp_dir: &'a Path, 94 | bam_tag: String, 95 | virtual_start: Option, 96 | virtual_stop: Option, 97 | } 98 | 99 | pub struct ChunkOuts { 100 | metrics: Metrics, 101 | out_bam_file: PathBuf, 102 | } 103 | 104 | fn main() { 105 | //setup_panic!(); // pretty panics for users 106 | let mut cli_args = Vec::new(); 107 | for arg in std::env::args_os() { 108 | cli_args.push(arg.into_string().unwrap()); 109 | } 110 | _main(cli_args); 111 | } 112 | 113 | fn _main(cli_args: Vec) { 114 | let args = get_args().get_matches_from(cli_args); 115 | let bam_file = args.value_of("bam").expect("You must provide a BAM file"); 116 | let cell_barcodes = args 117 | .value_of("cell_barcodes") 118 | .expect("You must provide a cell barcodes file"); 119 | let out_bam_file = args 120 | .value_of("out_bam") 121 | .expect("You must provide a path to write the new BAM file"); 122 | let ll = args.value_of("log_level").unwrap(); 123 | let cores = args 124 | .value_of("cores") 125 | .unwrap_or_default() 126 | .parse::() 127 | .expect("Failed to convert cores to integer"); 128 | let bam_tag = args.value_of("bam_tag").unwrap_or_default().to_string(); 129 | 130 | let ll = match ll { 131 | "info" => LevelFilter::Info, 132 | "debug" => LevelFilter::Debug, 133 | "error" => LevelFilter::Error, 134 | &_ => { 135 | println!("Log level not valid"); 136 | process::exit(1); 137 | } 138 | }; 139 | let _ = SimpleLogger::init(ll, Config::default()); 140 | 141 | check_inputs_exist(bam_file, cell_barcodes, out_bam_file); 142 | let cell_barcodes = load_barcodes(&cell_barcodes).unwrap(); 143 | let tmp_dir = tempdir().unwrap(); 144 | let virtual_offsets = bgzf_noffsets(&bam_file, &cores).unwrap(); 145 | 146 | let mut chunks = Vec::new(); 147 | for (i, (virtual_start, virtual_stop)) in virtual_offsets.iter().enumerate() { 148 | let c = ChunkArgs { 149 | cell_barcodes: &cell_barcodes, 150 | i: i, 151 | bam_file: &bam_file, 152 | tmp_dir: tmp_dir.path(), 153 | bam_tag: bam_tag.clone(), 154 | virtual_start: *virtual_start, 155 | virtual_stop: *virtual_stop, 156 | }; 157 | chunks.push(c); 158 | } 159 | let pool = rayon::ThreadPoolBuilder::new() 160 | .num_threads(cores as usize) 161 | .build() 162 | .unwrap(); 163 | let results: Vec<_> = pool.install(|| { 164 | chunks 165 | .par_iter() 166 | .map(|chunk| slice_bam_chunk(chunk)) 167 | .collect() 168 | }); 169 | 170 | // combine metrics 171 | let mut metrics = Metrics { 172 | total_reads: 0, 173 | barcoded_reads: 0, 174 | kept_reads: 0, 175 | }; 176 | 177 | fn add_metrics(metrics: &mut Metrics, m: &Metrics) { 178 | metrics.total_reads += m.total_reads; 179 | metrics.barcoded_reads += m.barcoded_reads; 180 | metrics.kept_reads += m.kept_reads; 181 | } 182 | 183 | let mut tmp_bams = Vec::new(); 184 | for c in results.iter() { 185 | add_metrics(&mut metrics, &c.metrics); 186 | tmp_bams.push(&c.out_bam_file); 187 | } 188 | 189 | if metrics.kept_reads == 0 { 190 | error!("Zero alignments were kept. Does your BAM contain the cell barcodes and/or tag you chose?"); 191 | process::exit(2); 192 | } 193 | 194 | // just copy the temp file over 195 | if cores == 1 { 196 | fs::copy(tmp_bams[0], out_bam_file).unwrap(); 197 | } else { 198 | info!("Merging {} BAM chunks into final output", cores); 199 | merge_bams(tmp_bams, Path::new(out_bam_file)); 200 | } 201 | 202 | info!("Done!"); 203 | info!( 204 | "Visited {} alignments, found {} with barcodes and kept {}", 205 | metrics.total_reads, metrics.barcoded_reads, metrics.kept_reads 206 | ); 207 | } 208 | 209 | pub fn check_inputs_exist(bam_file: &str, cell_barcodes: &str, out_bam_path: &str) { 210 | for path in [bam_file, cell_barcodes].iter() { 211 | if !Path::new(&path).exists() { 212 | error!("File {} does not exist", path); 213 | process::exit(1); 214 | } 215 | } 216 | let path = Path::new(out_bam_path); 217 | if path.exists() { 218 | error!("Output path already exists"); 219 | process::exit(1); 220 | } 221 | if path.is_dir() { 222 | error!("Output path is a directory"); 223 | process::exit(1); 224 | } 225 | let _parent_dir = path.parent(); 226 | if _parent_dir.is_none() { 227 | error!("Unable to parse directory from {}", out_bam_path); 228 | process::exit(1); 229 | } 230 | let parent_dir = _parent_dir.unwrap(); 231 | if (parent_dir.to_str().unwrap().len() > 0) & !parent_dir.exists() { 232 | error!("Output directory {:?} does not exist", parent_dir); 233 | process::exit(1); 234 | } 235 | 236 | let extension = Path::new(bam_file).extension().unwrap().to_str().unwrap(); 237 | match extension { 238 | "bam" => { 239 | let bai = bam_file.to_owned() + ".bai"; 240 | if !Path::new(&bai).exists() { 241 | error!("BAM index {} does not exist", bai); 242 | process::exit(1); 243 | } 244 | } 245 | "cram" => { 246 | let crai = bam_file.to_owned() + ".crai"; 247 | if !Path::new(&crai).exists() { 248 | error!("CRAM index {} does not exist", crai); 249 | process::exit(1); 250 | } 251 | } 252 | &_ => { 253 | error!("BAM file did not end in .bam or .cram. Unable to validate"); 254 | process::exit(1); 255 | } 256 | } 257 | } 258 | 259 | pub fn load_barcodes(filename: impl AsRef) -> Result>, Error> { 260 | let r = fs::File::open(filename.as_ref())?; 261 | let reader = BufReader::with_capacity(32 * 1024, r); 262 | 263 | let mut bc_set = HashSet::new(); 264 | 265 | for l in reader.lines() { 266 | let seq = l?.into_bytes(); 267 | bc_set.insert(seq); 268 | } 269 | let num_bcs = bc_set.len(); 270 | if num_bcs == 0 { 271 | error!("Loaded 0 barcodes. Is your barcode file gzipped or empty?"); 272 | process::exit(1); 273 | } 274 | debug!("Loaded {} barcodes", num_bcs); 275 | Ok(bc_set) 276 | } 277 | 278 | pub fn get_cell_barcode(rec: &Record, bam_tag: &str) -> Option> { 279 | //println!("{:?}", rec.aux(bam_tag.as_bytes())); 280 | match rec.aux(bam_tag.as_bytes()) { 281 | Some(Aux::String(hp)) => { 282 | let cb = hp.to_vec(); 283 | Some(cb) 284 | } 285 | _ => None, 286 | } 287 | } 288 | 289 | pub fn load_writer(bam: &bam::Reader, out_bam_path: &Path) -> Result { 290 | use rust_htslib::bam::Read; // collides with fs::Read 291 | let hdr = rust_htslib::bam::Header::from_template(bam.header()); 292 | let out_handle = bam::Writer::from_path(out_bam_path, &hdr)?; 293 | Ok(out_handle) 294 | } 295 | 296 | pub fn bgzf_noffsets( 297 | bam_path: &str, 298 | num_chunks: &u64, 299 | ) -> Result, Option)>, Error> { 300 | fn vec_diff(input: &Vec) -> Vec { 301 | let vals = input.iter(); 302 | let next_vals = input.iter().skip(1); 303 | 304 | vals.zip(next_vals).map(|(cur, next)| next - cur).collect() 305 | } 306 | 307 | // if we only have one thread, this is easy 308 | if *num_chunks == 1 as u64 { 309 | let final_offsets = vec![(None, None)]; 310 | return Ok(final_offsets); 311 | } 312 | 313 | let bam_bytes = fs::metadata(bam_path)?.len(); 314 | let mut initial_offsets = Vec::new(); 315 | let step_size = bam_bytes / num_chunks; 316 | for n in 1..*num_chunks { 317 | initial_offsets.push((step_size * n) as u64); 318 | } 319 | 320 | let num_bytes = if initial_offsets.len() > 1 { 321 | let diff = vec_diff(&initial_offsets); 322 | let m = diff.iter().max().unwrap(); 323 | cmp::min(1 << 16, *m) 324 | } else { 325 | 1 << 16 326 | }; 327 | 328 | // linear search to the right of each possible offset until 329 | // a valid virtual offset is found 330 | let mut adjusted_offsets = Vec::new(); 331 | let mut fp = fs::File::open(bam_path)?; 332 | for offset in initial_offsets { 333 | fp.seek(io::SeekFrom::Start(offset))?; 334 | let mut buffer = [0; 2 << 16]; 335 | fp.read(&mut buffer)?; 336 | for i in 0..num_bytes { 337 | if is_valid_bgzf_block(&buffer[i as usize..]) { 338 | adjusted_offsets.push(offset + i); 339 | break; 340 | } 341 | } 342 | } 343 | // bit-shift and produce start/stop intervals 344 | let mut final_offsets = Vec::new(); 345 | 346 | // handle special case where we only found one offset 347 | if adjusted_offsets.len() == 1 { 348 | final_offsets.push((None, None)); 349 | return Ok(final_offsets); 350 | } 351 | 352 | final_offsets.push((None, Some(((adjusted_offsets[1]) as i64) << 16))); 353 | for n in 2..num_chunks - 1 { 354 | let n = n as usize; 355 | final_offsets.push(( 356 | Some((adjusted_offsets[n - 1] as i64) << 16), 357 | Some((adjusted_offsets[n] as i64) << 16), 358 | )); 359 | } 360 | final_offsets.push(( 361 | Some(((adjusted_offsets[adjusted_offsets.len() - 1]) as i64) << 16), 362 | None, 363 | )); 364 | Ok(final_offsets) 365 | } 366 | 367 | pub fn is_valid_bgzf_block(block: &[u8]) -> bool { 368 | // look for the bgzip magic characters \x1f\x8b\x08\x04 369 | // TODO: is this sufficient? 370 | if block.len() < 18 { 371 | return false; 372 | } 373 | if (block[0] != 31) | (block[1] != 139) | (block[2] != 8) | (block[3] != 4) { 374 | return false; 375 | } 376 | true 377 | } 378 | 379 | pub fn slice_bam_chunk(args: &ChunkArgs) -> ChunkOuts { 380 | let mut bam = bam::Reader::from_path(args.bam_file).unwrap(); 381 | let out_bam_file = args.tmp_dir.join(format!("{}.bam", args.i)); 382 | let mut out_bam = load_writer(&bam, &out_bam_file).unwrap(); 383 | let mut metrics = Metrics { 384 | total_reads: 0, 385 | barcoded_reads: 0, 386 | kept_reads: 0, 387 | }; 388 | for r in bam.iter_chunk(args.virtual_start, args.virtual_stop) { 389 | let rec = r.unwrap(); 390 | metrics.total_reads += 1; 391 | let barcode = get_cell_barcode(&rec, &args.bam_tag); 392 | if barcode.is_some() { 393 | metrics.barcoded_reads += 1; 394 | let barcode = barcode.unwrap(); 395 | if args.cell_barcodes.contains(&barcode) { 396 | metrics.kept_reads += 1; 397 | out_bam.write(&rec).unwrap(); 398 | } 399 | } 400 | } 401 | let r = ChunkOuts { 402 | metrics: metrics, 403 | out_bam_file: out_bam_file, 404 | }; 405 | info!("Chunk {} is done", args.i); 406 | r 407 | } 408 | 409 | pub fn merge_bams(tmp_bams: Vec<&PathBuf>, out_bam_file: &Path) { 410 | use rust_htslib::bam::Read; // collides with fs::Read 411 | let bam = bam::Reader::from_path(tmp_bams[0]).unwrap(); 412 | let mut out_bam = load_writer(&bam, out_bam_file).unwrap(); 413 | for b in tmp_bams.iter() { 414 | let mut rdr = bam::Reader::from_path(b).unwrap(); 415 | for _rec in rdr.records() { 416 | let rec = _rec.unwrap(); 417 | out_bam.write(&rec).unwrap(); 418 | } 419 | } 420 | } 421 | 422 | #[cfg(test)] 423 | mod tests { 424 | use super::*; 425 | use data_encoding::HEXUPPER; 426 | use ring::digest::{Context, Digest, SHA256}; 427 | use tempfile::tempdir; 428 | 429 | /// Compute digest value for given `Reader` and print it 430 | /// This is taken from the Rust cookbook 431 | /// https://rust-lang-nursery.github.io/rust-cookbook/cryptography/hashing.html 432 | fn sha256_digest(mut reader: R) -> Result { 433 | let mut context = Context::new(&SHA256); 434 | let mut buffer = [0; 1024]; 435 | 436 | loop { 437 | let count = reader.read(&mut buffer)?; 438 | if count == 0 { 439 | break; 440 | } 441 | context.update(&buffer[..count]); 442 | } 443 | 444 | Ok(context.finish()) 445 | } 446 | 447 | #[test] 448 | fn test_bam_single_core() { 449 | let mut cmds = Vec::new(); 450 | let tmp_dir = tempdir().unwrap(); 451 | let out_file = tmp_dir.path().join("result.bam"); 452 | let out_file = out_file.to_str().unwrap(); 453 | for l in &[ 454 | "subset-bam", 455 | "-b", 456 | "test/test.bam", 457 | "-c", 458 | "test/barcodes.csv", 459 | "-o", 460 | out_file, 461 | "--cores", 462 | "1", 463 | ] { 464 | cmds.push(l.to_string()); 465 | } 466 | _main(cmds); 467 | let fh = fs::File::open(&out_file).unwrap(); 468 | let d = sha256_digest(fh).unwrap(); 469 | let d = HEXUPPER.encode(d.as_ref()); 470 | assert_eq!( 471 | d, 472 | "65061704E9C15BFC8FECF07D1DE527AF666E7623525262334C3FDC62F366A69E" 473 | ); 474 | } 475 | } 476 | -------------------------------------------------------------------------------- /test/barcodes.csv: -------------------------------------------------------------------------------- 1 | AAACCTGCAGAACAGC-1 2 | AAACCTGGTCCGCAAC-1 3 | AAACGGGGTTTCGCAA-1 4 | AAACGGGTCGCTAGTA-1 5 | AAAGATGAGGCGTTGA-1 6 | AAAGATGAGTGTTGAA-1 7 | AAAGATGCATCCTGGG-1 8 | AAAGATGGTCCGCAAC-1 9 | AAAGATGGTGTCAACT-1 10 | AAAGCAAAGCTAACTC-1 11 | AAAGCAACATCATGCA-1 12 | AAAGCAAGTTCGAGCC-1 13 | AAAGCAATCGCTCTAC-1 14 | AAAGTAGAGGGAAACA-1 15 | AAAGTAGAGTTAGCGG-1 16 | AAAGTAGGTAACTTCG-1 17 | AAATGCCAGTCGACTT-1 18 | AAATGCCCACATTGGT-1 19 | AAATGCCGTTGACCCG-1 20 | AACACGTAGTACGTTC-1 21 | AACACGTTCATCGCAA-1 22 | AACACGTTCGCGTGGT-1 23 | AACACGTTCTCGTGGG-1 24 | AACCATGAGGGATTCG-1 25 | AACCATGAGTGTGAAT-1 26 | AACCATGTCTTCTAAC-1 27 | AACCGCGCAACAACTC-1 28 | AACCGCGCAACCTCAA-1 29 | AACCGCGCACCAATGT-1 30 | AACCGCGCATCAAGAA-1 31 | AACGTTGCAGAACAGC-1 32 | AACGTTGGTGACCTGC-1 33 | AACTCAGCAAATCGCT-1 34 | AACTCAGGTGCGAAAC-1 35 | AACTCAGTCAGCGCGT-1 36 | AACTCAGTCATGGGCC-1 37 | AACTCCCAGAAGGCCT-1 38 | AACTCCCGTTCCATGA-1 39 | AACTCCCTCTACACCC-1 40 | AACTCTTAGACTCGGA-1 41 | AACTCTTCAAGGTATA-1 42 | AACTGGTAGCACACAG-1 43 | AACTGGTGTTGGTATC-1 44 | AACTTTCAGAGCCACA-1 45 | AACTTTCGTAGTGGCA-1 46 | AAGACCTTCGACCATA-1 47 | AAGACCTTCTAGAGCT-1 48 | AAGCCGCCATGGAGAC-1 49 | AAGGAGCCAACACCGC-1 50 | AAGGAGCCAGGCCGTT-1 51 | AAGGAGCTCAACAGCT-1 52 | AAGGAGCTCGCGCACA-1 53 | AAGGCAGTCTTAAGGC-1 54 | AAGGTTCAGAAAGCTT-1 55 | AAGGTTCAGCTACCTA-1 56 | AAGGTTCCAATGGTAA-1 57 | AAGGTTCCACCGAACC-1 58 | AAGGTTCTCGTGTACA-1 59 | AAGTCTGAGTTGGCTT-1 60 | AAGTCTGCAACCCACG-1 61 | AAGTCTGGTTAGTGAA-1 62 | AAGTCTGTCACTTTAC-1 63 | AATCCAGAGATATGGT-1 64 | AATCCAGCACAGCTAT-1 65 | AATCCAGCACTATGCA-1 66 | AATCGGTAGGCAGGTT-1 67 | AATCGGTTCCTCGACT-1 68 | ACACCAAAGAACTCGG-1 69 | ACACCAAAGATCACTC-1 70 | ACACCAACAGTACCTA-1 71 | ACACCAAGTGGTACAG-1 72 | ACACCCTAGGGTTTCT-1 73 | ACACCCTCAACCGGAA-1 74 | ACACCGGAGCAGAGAA-1 75 | ACACCGGAGTTGTAGA-1 76 | ACACCGGCAACACGTT-1 77 | ACACCGGCACGTGCGT-1 78 | ACACCGGTCATGGGCC-1 79 | ACACCGGTCCTAGACA-1 80 | ACACTGAAGTGACTCT-1 81 | ACAGCCGTCGGAGTTT-1 82 | ACAGCTACACAAGCGA-1 83 | ACAGCTACACGCTGAC-1 84 | ACAGCTACACTCTGGG-1 85 | ACAGCTAGTGCGAAAC-1 86 | ACAGCTAGTTGTCACA-1 87 | ACAGCTATCTTGCTTA-1 88 | ACATACGAGCAGCGTA-1 89 | ACATACGAGGTGCTTT-1 90 | ACATACGGTCCGAATT-1 91 | ACATCAGAGAGGGATA-1 92 | ACATCAGCAAGTGAGC-1 93 | ACATCAGTCACTGCGG-1 94 | ACATCAGTCATCTCCG-1 95 | ACATGGTAGACTTTCG-1 96 | ACATGGTCAGACTCCG-1 97 | ACCAGTAAGAGTCTGG-1 98 | ACCAGTACAGTAGGGT-1 99 | ACCCACTCAATTCACG-1 100 | ACCCACTCATCCTGGG-1 101 | ACCCACTTCGACAATC-1 102 | ACCCACTTCTGAGATC-1 103 | ACCGTAAAGTGGGATC-1 104 | ACCGTAACATAGACAA-1 105 | ACCGTAACATAGTGGG-1 106 | ACCTTTAAGGCAAAGA-1 107 | ACCTTTAGTGATATGA-1 108 | ACGAGCCGTTGACGGA-1 109 | ACGAGGAAGAAGATTC-1 110 | ACGAGGAGTTGGAGCA-1 111 | ACGAGGATCCGCTTGT-1 112 | ACGAGGATCTGAAGTC-1 113 | ACGATACAGCTAAGAT-1 114 | ACGATACAGTGTCTCA-1 115 | ACGATACCAACAGCCC-1 116 | ACGATACCACCAATAC-1 117 | ACGATACCAGTGCTGC-1 118 | ACGATACGTGGTGAGT-1 119 | ACGATGTAGTTACGGG-1 120 | ACGATGTTCCGCTTGT-1 121 | ACGATGTTCTCATCCG-1 122 | ACGCAGCGTTTCCTGC-1 123 | ACGCAGCTCCTCGCTA-1 124 | ACGCCAGAGAGGTAGA-1 125 | ACGCCAGCATTGTCTT-1 126 | ACGCCAGGTGACGGTA-1 127 | ACGCCGAAGGCCCTCA-1 128 | ACGCCGACAACTAGTC-1 129 | ACGCCGAGTATCTCTT-1 130 | ACGGAGAAGCATCTTG-1 131 | ACGGAGAAGGATCGCA-1 132 | ACGGAGAAGTTGTCGT-1 133 | ACGGAGACATGATAAG-1 134 | ACGGAGATCTCACCTG-1 135 | ACGGCCAAGGGAGTAA-1 136 | ACGGCCAGTCAAGCCC-1 137 | ACGGCCATCATGTCAG-1 138 | ACGGGCTAGTCCCGAC-1 139 | ACGGGCTAGTCTCGTA-1 140 | ACGGGCTCATAGACAA-1 141 | ACGGGCTGTATTCGTG-1 142 | ACGGGCTGTGATGTTC-1 143 | ACGGGCTTCCAAGGGA-1 144 | ACGGGCTTCTCCATGC-1 145 | ACGGGTCCAGCATGTT-1 146 | ACGGGTCGTGATGTTC-1 147 | ACGGGTCTCTGGTGAT-1 148 | ACGTCAACAACTACTG-1 149 | ACTATCTAGTCCATAC-1 150 | ACTATCTCAGGTCTGC-1 151 | ACTATCTTCAACTGCA-1 152 | ACTGAACTCTACGTGA-1 153 | ACTGAGTAGTCATCCA-1 154 | ACTGAGTTCCGTTAAG-1 155 | ACTGATGCAGGCCTTG-1 156 | ACTGATGGTCAGTGGA-1 157 | ACTGATGGTTGTCACA-1 158 | ACTGATGTCGCTATTT-1 159 | ACTGCTCGTAGTAGTA-1 160 | ACTGCTCGTCGACCAC-1 161 | ACTGTCCCAATCCGTA-1 162 | ACTTACTCAAGCCAAG-1 163 | ACTTACTTCATCACTT-1 164 | ACTTGTTCAACGAAAT-1 165 | ACTTGTTCAGGCCGTT-1 166 | ACTTGTTGTTACGGCC-1 167 | ACTTGTTTCGAGAGGT-1 168 | ACTTGTTTCTCCAGCT-1 169 | AGAATAGAGCAAAGTT-1 170 | AGAATAGCAGGAGCAT-1 171 | AGAATAGGTCGAGTAG-1 172 | AGAATAGGTGAAAGAG-1 173 | AGAATAGGTGCGAACA-1 174 | AGACGTTCATCCTGGG-1 175 | AGACGTTGTTAGCTCA-1 176 | AGAGCGAAGGCCGAAT-1 177 | AGAGCGATCGAAATCC-1 178 | AGAGCTTTCGTCTAAG-1 179 | AGAGTGGCATGGCTAT-1 180 | AGAGTGGCATTTGCGA-1 181 | AGAGTGGTCGACCCTT-1 182 | AGATCTGAGAATTGTG-1 183 | AGATCTGAGACACGAC-1 184 | AGATCTGAGCTCAACT-1 185 | AGATCTGGTTTGTCTT-1 186 | AGATCTGTCCTCAGTC-1 187 | AGATTGCAGCCAGAAC-1 188 | AGATTGCAGCTAAACA-1 189 | AGATTGCAGGAGCGTT-1 190 | AGATTGCCACCACGCA-1 191 | AGCAGCCAGGCCATAG-1 192 | AGCAGCCAGGTAACGC-1 193 | AGCAGCCCAATTAAGG-1 194 | AGCAGCCTCCCGAATA-1 195 | AGCAGCCTCTTAAGGC-1 196 | AGCATACGTAAACAGT-1 197 | AGCATACTCTGCCGTT-1 198 | AGCCTAAGTAGGGTGT-1 199 | AGCCTAAGTCGCTCAG-1 200 | AGCCTAATCCGAGATT-1 201 | AGCGGTCAGCGTAGTG-1 202 | AGCGGTCCAAGGCCCT-1 203 | AGCGGTCCACAGCTAT-1 204 | AGCGGTCTCTAACACG-1 205 | AGCGTATAGTAGATCA-1 206 | AGCGTATCAAAGTGGC-1 207 | AGCGTATCATCCCAAA-1 208 | AGCGTATTCATCGACA-1 209 | AGCGTCGAGGCTATCT-1 210 | AGCTCCTAGTCTAGCT-1 211 | AGCTCCTCAAGAATCA-1 212 | AGCTCCTCACCACACG-1 213 | AGCTCCTGTGGAAACC-1 214 | AGCTCTCAGGACAGTC-1 215 | AGCTCTCAGGTGTGTG-1 216 | AGCTCTCCAGATGAAT-1 217 | AGCTCTCTCCTACCTG-1 218 | AGCTTGAAGCGCGATA-1 219 | AGCTTGAGTGCCATTA-1 220 | AGGCCACCAGGATCCC-1 221 | AGGCCGTCAGGGCTTC-1 222 | AGGCCGTGTCACATGT-1 223 | AGGCCGTGTTGACGGA-1 224 | AGGGAGTAGAAGATTC-1 225 | AGGGAGTAGAGCCCAA-1 226 | AGGGAGTGTGAGCTCC-1 227 | AGGGATGAGAAGGTGA-1 228 | AGGGATGAGCGCGATA-1 229 | AGGGATGAGGTGCTAG-1 230 | AGGGATGGTATGCGGA-1 231 | AGGGTGACAAGACGAC-1 232 | AGGGTGATCCGCTCTA-1 233 | AGGTCATAGAAAGTGG-1 234 | AGGTCATCACTACGTA-1 235 | AGGTCATGTTAGAATG-1 236 | AGGTCATTCGCCCAGA-1 237 | AGGTCCGAGCAGGTCA-1 238 | AGGTCCGTCAGAAACA-1 239 | AGGTCCGTCCGAAGGA-1 240 | AGTAGTCCAACTACTG-1 241 | AGTCTTTCATGGCTCG-1 242 | AGTCTTTGTAGGTTTC-1 243 | AGTCTTTGTGTTTCAG-1 244 | AGTGAGGAGTAGCCGA-1 245 | AGTGAGGCAATGGGAC-1 246 | AGTGAGGGTACTTGCA-1 247 | AGTGGGAAGGCTAGAC-1 248 | AGTGGGATCGCTATGA-1 249 | AGTGTCAGTGCTCTGG-1 250 | AGTGTCAGTTCGGTGC-1 251 | AGTTGGTTCCGCGAGT-1 252 | ATAACGCAGGGATTTA-1 253 | ATAACGCCAACTTTCT-1 254 | ATAAGAGAGATCCCGC-1 255 | ATAAGAGCATTTGCGA-1 256 | ATAAGAGGTAGTCAAA-1 257 | ATAAGAGGTGCGCTTG-1 258 | ATAAGAGTCCGCGACA-1 259 | ATAGACCCACAATCAC-1 260 | ATAGACCCACAGCTGC-1 261 | ATAGACCGTCCCACAG-1 262 | ATAGACCTCCCAAGCG-1 263 | ATCATCTTCCGTAATG-1 264 | ATCATCTTCGGCACCA-1 265 | ATCATGGAGGCTAGAC-1 266 | ATCATGGGTTTGTCTT-1 267 | ATCATGGTCCTCGCTA-1 268 | ATCCACCTCGGATCCG-1 269 | ATCGAGTAGATACACA-1 270 | ATCGAGTAGTGGGTTG-1 271 | ATCGAGTGTGGTAACG-1 272 | ATCTACTCAGAATTCC-1 273 | ATCTACTCATTACAGC-1 274 | ATCTACTGTGGGCCTT-1 275 | ATCTACTGTTGATCTG-1 276 | ATCTACTTCCACGATA-1 277 | ATCTGCCAGACCACGA-1 278 | ATCTGCCCAAGCACGA-1 279 | ATCTGCCGTGGTAAGC-1 280 | ATCTGCCTCACACTAG-1 281 | ATGCGATCAGGTCCCA-1 282 | ATGGGAGCAAATCAGA-1 283 | ATGGGAGCAACTCATG-1 284 | ATGGGAGGTACATGAA-1 285 | ATGGGAGGTCTAGGTT-1 286 | ATGGGAGGTGGATAGC-1 287 | ATGGGAGTCGGATCCG-1 288 | ATGTGTGAGGGATGGG-1 289 | ATGTGTGTCATCTTTG-1 290 | ATGTGTGTCTCATCTA-1 291 | ATTACTCGTTCTAGTG-1 292 | ATTACTCTCTTATGGG-1 293 | ATTATCCAGAGAGCTC-1 294 | ATTCTACCAAAGCGCA-1 295 | ATTCTACCAACGACGA-1 296 | ATTCTACGTCCCGACA-1 297 | ATTCTACGTCGCGCTA-1 298 | ATTCTACGTGTAGTTC-1 299 | ATTGGACTCGGATCCG-1 300 | ATTGGACTCTCGAACA-1 301 | ATTGGTGGTGTCGCTG-1 302 | ATTGGTGTCTGAAGTC-1 303 | ATTTCTGAGTGTATCC-1 304 | ATTTCTGGTACCAACT-1 305 | ATTTCTGTCAACTGCA-1 306 | ATTTCTGTCTACGGGC-1 307 | CAACCAAAGTTTCCTT-1 308 | CAACCAATCGTTAAGC-1 309 | CAACCAATCTGGTAGT-1 310 | CAACCTCCAAGACGCA-1 311 | CAACCTCGTTGTTCAG-1 312 | CAACCTCTCACGTAGT-1 313 | CAACCTCTCGTTAAGC-1 314 | CAACTAGGTACCTTGA-1 315 | CAACTAGGTCAGTTTG-1 316 | CAAGAAACATTGCATG-1 317 | CAAGAAATCCAAACCA-1 318 | CAAGATCCAAGGCTAG-1 319 | CAAGATCCATCCTGGG-1 320 | CAAGATCTCACAGCCG-1 321 | CAAGATCTCACGTAGT-1 322 | CAAGATCTCCTACCTG-1 323 | CAAGGCCAGTACGCGA-1 324 | CAAGGCCCATTACTTC-1 325 | CAAGTTGCACTTCTTA-1 326 | CAAGTTGCAGGTCCCA-1 327 | CAAGTTGGTTCGCGTG-1 328 | CAAGTTGGTTGAACTC-1 329 | CAAGTTGTCTCGAATG-1 330 | CACAAACCATTCTTCA-1 331 | CACAAACGTACCAGTT-1 332 | CACACAATCTGATCAG-1 333 | CACACCTAGTAACCCT-1 334 | CACACCTAGTACACCT-1 335 | CACACTCCATGATAAG-1 336 | CACAGGCCAACCTGAT-1 337 | CACAGGCTCTGGGATT-1 338 | CACAGTAAGAGTTGGC-1 339 | CACAGTAAGCCAGTTT-1 340 | CACAGTAAGCTAGTGG-1 341 | CACAGTAAGTCGAGTG-1 342 | CACAGTACATATCGCA-1 343 | CACAGTAGTGTTCCGG-1 344 | CACATAGAGCGTTGCC-1 345 | CACATAGTCATCGCCT-1 346 | CACATAGTCTCATGTT-1 347 | CACATTTCAGGTGTGA-1 348 | CACATTTGTGCTTTGA-1 349 | CACATTTTCGGGAAAC-1 350 | CACCACTAGAGGGCTT-1 351 | CACCACTGTTCAGTAC-1 352 | CACCAGGAGGCCCGTT-1 353 | CACCAGGGTCCCTTGT-1 354 | CACCAGGTCCTACCCA-1 355 | CACCTTGGTACCGTCG-1 356 | CACTCCAAGAGACTAT-1 357 | CACTCCAAGTCGATAA-1 358 | CACTCCACAACGAAAT-1 359 | CACTCCACACAGCTAT-1 360 | CACTCCAGTTGAACTC-1 361 | CAGAATCAGTGAACAT-1 362 | CAGAATCGTACCTCGG-1 363 | CAGAGAGAGCTATGCT-1 364 | CAGAGAGCATTCGTTT-1 365 | CAGATCAGTTGCCACG-1 366 | CAGATCATCAGCCTGG-1 367 | CAGATCATCATTCGCC-1 368 | CAGATCATCCTCGCTA-1 369 | CAGATCATCTATGCAG-1 370 | CAGCAGCAGCAGAGAA-1 371 | CAGCAGCCATACAGAA-1 372 | CAGCAGCGTAGGGTGT-1 373 | CAGCAGCGTCTCTATT-1 374 | CAGCAGCGTGTCCTTC-1 375 | CAGCATAAGAATTCCC-1 376 | CAGCATAAGAGATGAG-1 377 | CAGCATAGTCCATTGA-1 378 | CAGCATATCGGAGAGT-1 379 | CAGCCGATCGAAATCC-1 380 | CAGCGACAGAGAACAG-1 381 | CAGCGACGTGCAAACG-1 382 | CAGCGACTCACACGTA-1 383 | CAGCTAATCATGTGAC-1 384 | CAGCTAATCCGCCTAT-1 385 | CAGCTAATCCTCTGTG-1 386 | CAGCTGGAGGCAGTCA-1 387 | CAGCTGGGTACTGTTG-1 388 | CAGCTGGGTGCGAAAC-1 389 | CAGGTGCAGGTAAACT-1 390 | CAGGTGCCACCCGTTT-1 391 | CAGGTGCCATTGCCGG-1 392 | CAGGTGCGTATCAGTC-1 393 | CAGGTGCTCAACTGCA-1 394 | CAGTAACAGACTAAGT-1 395 | CAGTAACAGCTCAACT-1 396 | CAGTAACTCCCAAAGT-1 397 | CAGTAACTCGTATTGG-1 398 | CAGTCCTAGACTGGGT-1 399 | CATATGGAGTGGGTAC-1 400 | CATATGGCAGTGCTGC-1 401 | CATATTCAGCATTCAC-1 402 | CATATTCCAACTCCGG-1 403 | CATATTCCACGAGCTC-1 404 | CATATTCCAGGTCAAG-1 405 | CATATTCCATGGAGAC-1 406 | CATCAAGTCGGAGAAC-1 407 | CATCAGAGTAACTTCG-1 408 | CATCAGATCTCGTCTG-1 409 | CATCCACGTCAAGTCT-1 410 | CATCCACGTTGAGCAG-1 411 | CATCCACTCCCACAAA-1 412 | CATCGAACATCCAGGC-1 413 | CATCGAAGTATCAGTC-1 414 | CATCGGGGTCCGCAGT-1 415 | CATCGGGTCGCGCACA-1 416 | CATCGGGTCGTATCCC-1 417 | CATGACAAGCCCGAAA-1 418 | CATGACAAGGACACCA-1 419 | CATGACAGTCATCTAG-1 420 | CATGACAGTCGCGAAA-1 421 | CATGCCTAGAATGTTG-1 422 | CATGCCTCACGGCTGT-1 423 | CATGCCTGTTGATCTG-1 424 | CATGGCGGTATTCGTG-1 425 | CATGGCGTCTACCGAA-1 426 | CATTATCCAAAGTGGC-1 427 | CATTATCCACCACGCA-1 428 | CATTATCCAGCCAAAG-1 429 | CATTATCGTCATGCTA-1 430 | CCAATCCAGTACGTTC-1 431 | CCAATCCCACCGGCAT-1 432 | CCAATCCTCTACCGTC-1 433 | CCACCTACAGTAGGGT-1 434 | CCACCTAGTTAGAGCG-1 435 | CCACGGACAACCTGCG-1 436 | CCACGGAGTTCCCACT-1 437 | CCACTACAGCACCGCT-1 438 | CCACTACAGTGTATCC-1 439 | CCACTACCAGGACCAA-1 440 | CCACTACGTAGATGCG-1 441 | CCACTACTCCACTGCT-1 442 | CCAGCGACATCCACGG-1 443 | CCAGCGAGTACCAGTT-1 444 | CCAGCGAGTGCAAACG-1 445 | CCAGCGATCGCCCAGA-1 446 | CCATGTCCAGTGTGGA-1 447 | CCATGTCCATTGAAGA-1 448 | CCATGTCGTACAACGG-1 449 | CCATGTCGTTTGCCTC-1 450 | CCATGTCTCGTAGGGA-1 451 | CCATGTCTCTCTAGTT-1 452 | CCATTCGAGGAGTTTA-1 453 | CCATTCGTCAAGCCAT-1 454 | CCATTCGTCGTGCTAA-1 455 | CCATTCGTCTCATGTT-1 456 | CCATTCGTCTGTGAAC-1 457 | CCCAATCCACGTGCGT-1 458 | CCCAGTTAGATCCGAG-1 459 | CCCAGTTGTACCTCGG-1 460 | CCCAGTTGTCGGGAAT-1 461 | CCCAGTTTCTCGTCTG-1 462 | CCCTCCTAGACTTTCG-1 463 | CCCTCCTAGCCAGTAG-1 464 | CCCTCCTCACAAACTC-1 465 | CCCTCCTGTGCACTTA-1 466 | CCCTCCTGTGCTTTGA-1 467 | CCCTCCTTCTGGATCA-1 468 | CCGGGATGTTACGCCG-1 469 | CCGGTAGGTCCTAGTA-1 470 | CCGGTAGGTCGGCATC-1 471 | CCGGTAGGTGACACGA-1 472 | CCGGTAGTCGCGGCAT-1 473 | CCGTACTAGTGGCACA-1 474 | CCGTGGAAGGAGTAGA-1 475 | CCGTGGACACTTCTTA-1 476 | CCGTGGAGTAGGTCGA-1 477 | CCGTGGAGTCGATACT-1 478 | CCGTTCAAGACTTCCA-1 479 | CCGTTCAAGACTTTCG-1 480 | CCGTTCACAACTCATG-1 481 | CCGTTCATCGCCAACG-1 482 | CCTAAAGCAGGTACGA-1 483 | CCTACACAGGATGTCG-1 484 | CCTACACCATGAGGCA-1 485 | CCTACCAGTCAGAAGC-1 486 | CCTACCATCGCCTGGA-1 487 | CCTACCATCTCCATGC-1 488 | CCTAGCTGTAAGAGAG-1 489 | CCTAGCTTCGCGGCAT-1 490 | CCTATTAAGGTGCTTT-1 491 | CCTATTACACCTCCAT-1 492 | CCTATTAGTACCACTA-1 493 | CCTCAGTCAAACTCAC-1 494 | CCTCAGTGTACAATAG-1 495 | CCTCAGTTCTAATGGC-1 496 | CCTCTGAAGTGTGATA-1 497 | CCTCTGACATTGCATG-1 498 | CCTCTGATCTCGAACA-1 499 | CCTTACGAGATGTAAC-1 500 | CCTTACGTCATTTGCT-1 501 | CCTTACGTCGGAGAGT-1 502 | CCTTCCCCAATGTAGA-1 503 | CCTTCCCCAGATCGAG-1 504 | CCTTCGAGTAGTTGGG-1 505 | CCTTCGATCTCAGCGG-1 506 | CCTTTCTCAGAACCAG-1 507 | CGAACATAGGCATTGG-1 508 | CGAACATTCTACGTGA-1 509 | CGAATGTAGATCCCGC-1 510 | CGACCTTAGAAGCCCA-1 511 | CGACCTTAGAGCTGGT-1 512 | CGACCTTAGATCGGGT-1 513 | CGACCTTCAATGTGTC-1 514 | CGACCTTTCTGCCGTT-1 515 | CGACCTTTCTGTTGTT-1 516 | CGAGAAGAGATCGGGT-1 517 | CGAGCACAGCGTGAAC-1 518 | CGAGCACAGTCGATAA-1 519 | CGAGCACCAAACCGAG-1 520 | CGAGCACCATCCATCC-1 521 | CGAGCACGTATGTACC-1 522 | CGAGCACGTCCGCAAC-1 523 | CGAGCACTCCAGGCGT-1 524 | CGAGCACTCGAGCGTC-1 525 | CGATGGCCATCAGGGA-1 526 | CGATGGCTCCCACGGA-1 527 | CGATGTAAGTTACGGG-1 528 | CGATGTACAGCTTGAT-1 529 | CGATGTAGTCGCCAAC-1 530 | CGCGGTATCGCTATTT-1 531 | CGCTATCAGATGTGGC-1 532 | CGCTATCAGTGGTAGC-1 533 | CGCTATCTCACACGTA-1 534 | CGCTGGAAGCACACAG-1 535 | CGCTGGAAGTTAGGTA-1 536 | CGCTGGACAAACCGAG-1 537 | CGCTGGAGTTTACTTC-1 538 | CGCTTCACACCTGCAG-1 539 | CGCTTCACAGACAGTG-1 540 | CGCTTCACAGTTGCCG-1 541 | CGCTTCATCCGTTCAC-1 542 | CGGACACGTACGTGCC-1 543 | CGGACGTTCGCTGAAT-1 544 | CGGAGCTAGATGCGAC-1 545 | CGGAGCTAGCTGCGAA-1 546 | CGGAGCTAGGCCGAAT-1 547 | CGGAGCTAGTCCCGAC-1 548 | CGGAGCTCACCCGTGA-1 549 | CGGAGCTTCCCATGTC-1 550 | CGGAGCTTCCTTGCAC-1 551 | CGGAGTCAGTACAGTA-1 552 | CGGAGTCAGTGTTAGA-1 553 | CGGAGTCCAGTTATGC-1 554 | CGGCTAGAGTACGCGA-1 555 | CGGCTAGGTAAAGTCA-1 556 | CGGCTAGTCGCGGACT-1 557 | CGGGTCAGTCAACTGT-1 558 | CGGTTAAGTTCTCAAG-1 559 | CGTAGGCAGGAGCGAG-1 560 | CGTAGGCAGGTGCACA-1 561 | CGTAGGCAGTGTTAGA-1 562 | CGTAGGCCAACTAGTC-1 563 | CGTAGGCCACACACGC-1 564 | CGTAGGCCACGTATGT-1 565 | CGTAGGCGTCAGTGGA-1 566 | CGTAGGCTCTCGGTTC-1 567 | CGTCACTAGTTCCACA-1 568 | CGTCACTCAGCGTACC-1 569 | CGTCAGGAGGGATCTG-1 570 | CGTCAGGCAATCGTCA-1 571 | CGTCAGGGTCGCGTCA-1 572 | CGTCAGGTCATGGGCC-1 573 | CGTCCATAGTGATGGC-1 574 | CGTCCATCACTCTCTG-1 575 | CGTCCATCATCCATCC-1 576 | CGTCCATTCGACAATC-1 577 | CGTCTACAGGCGATAC-1 578 | CGTCTACAGGGTCGAT-1 579 | CGTCTACTCAGTGTGT-1 580 | CGTGAGCCAGGTCTGC-1 581 | CGTGTAAAGTACGACG-1 582 | CGTGTAATCAGGTGAG-1 583 | CGTGTCTCAGCGTGTC-1 584 | CGTGTCTTCGAGTTGT-1 585 | CGTTCTGAGACTTCCA-1 586 | CGTTCTGGTATCAGTC-1 587 | CGTTCTGTCTTCTAAC-1 588 | CGTTGGGAGGTGATTA-1 589 | CGTTGGGTCATTGGAC-1 590 | CTAACTTCATTACAGC-1 591 | CTAACTTGTCTGGGCT-1 592 | CTAAGACCAACTTTCT-1 593 | CTAAGACGTCAGTGGA-1 594 | CTAATGGAGATCCGAG-1 595 | CTAATGGAGGGTTTCT-1 596 | CTAATGGAGGTGCTAG-1 597 | CTAATGGCATAGTGGG-1 598 | CTAATGGTCGAGGTGA-1 599 | CTACACCCATACAGAA-1 600 | CTACATTAGACCGATG-1 601 | CTACCCACATCTCGTC-1 602 | CTACCCAGTCCGGGTT-1 603 | CTACGTCAGCCAGTAG-1 604 | CTACGTCAGCTTAGAA-1 605 | CTACGTCCACAGCTAT-1 606 | CTAGAGTAGCCCAGCT-1 607 | CTAGCCTCAACACGTT-1 608 | CTAGCCTCAGTAGGGT-1 609 | CTAGCCTGTTATCGGT-1 610 | CTAGCCTTCCGTATTT-1 611 | CTAGCCTTCTGATGGT-1 612 | CTAGTGAGTCTAACGT-1 613 | CTAGTGATCGACCATA-1 614 | CTAGTGATCGGAGAGT-1 615 | CTCACACAGCATCTTG-1 616 | CTCACACAGCGATGAC-1 617 | CTCACACAGGCAACAC-1 618 | CTCACACCATACGTCA-1 619 | CTCACACTCTTTCGTA-1 620 | CTCAGAAAGGGTTCGA-1 621 | CTCAGAATCCAGGAAG-1 622 | CTCAGAATCTGTCGAA-1 623 | CTCATTACAACCGCTG-1 624 | CTCATTACAATCGTCA-1 625 | CTCATTACATGTTGCA-1 626 | CTCATTATCAGAGTCT-1 627 | CTCATTATCATTGTTC-1 628 | CTCCTAGAGCTGAAAT-1 629 | CTCCTAGAGGCTCTTA-1 630 | CTCGAAAAGAGGCAAA-1 631 | CTCGAAACACTTGTTT-1 632 | CTCGGAGAGAGCTATA-1 633 | CTCGGAGAGTCTAGCT-1 634 | CTCGGAGGTACAATAG-1 635 | CTCGGAGTCTGCACTC-1 636 | CTCGGGAAGCACAGGT-1 637 | CTCGGGACAACATGGG-1 638 | CTCGGGACAGCGATGA-1 639 | CTCGGGACAGTCCGCA-1 640 | CTCGGGATCTTTCGTA-1 641 | CTCGTACAGGGTTCGA-1 642 | CTCGTCACACCTGGCA-1 643 | CTCGTCATCCTGAAGT-1 644 | CTCTAATAGACTAAGT-1 645 | CTCTAATAGAGCAATT-1 646 | CTCTAATAGGCATGGT-1 647 | CTCTACGCATGAATGA-1 648 | CTGATAGGTCCGATGC-1 649 | CTGATCCAGGGATTTA-1 650 | CTGATCCCAGTCGGAA-1 651 | CTGATCCTCCGTACCT-1 652 | CTGATCCTCTACGGAT-1 653 | CTGCCTACAGAACCAG-1 654 | CTGCCTATCTCGAGCG-1 655 | CTGCGGAAGTAACCCT-1 656 | CTGCGGAGTAGACGAC-1 657 | CTGCGGATCAAGTGCT-1 658 | CTGCTGTAGGTGCTAG-1 659 | CTGCTGTAGTACGTAA-1 660 | CTGGTCTAGGCTATCT-1 661 | CTGGTCTCAACCGCTG-1 662 | CTGGTCTCACCTGCAG-1 663 | CTGGTCTTCACCAGCG-1 664 | CTGGTCTTCGAAGCGA-1 665 | CTGTGCTGTCGAGTAG-1 666 | CTGTGCTGTGATCCTA-1 667 | CTGTTTATCGTTCGAA-1 668 | CTTAACTAGGATCGCA-1 669 | CTTAACTAGTACTTGC-1 670 | CTTAACTAGTAGATGT-1 671 | CTTAACTCAGCCCATG-1 672 | CTTAACTTCAGTGCCG-1 673 | CTTACCGAGCAATCTC-1 674 | CTTACCGAGGCTATCT-1 675 | CTTACCGAGGGAGTAA-1 676 | CTTACCGAGTGTTAGA-1 677 | CTTACCGCAAGGTGAC-1 678 | CTTACCGCAGATCCCG-1 679 | CTTAGGACAGTAGGGT-1 680 | CTTAGGAGTGGCAACA-1 681 | CTTCTCTTCACTGCGG-1 682 | CTTCTCTTCCGCACGA-1 683 | CTTCTCTTCTACACCC-1 684 | CTTGGCTAGAAGGCCT-1 685 | CTTGGCTTCATTGCTT-1 686 | CTTTGCGCAAATACGA-1 687 | CTTTGCGCAACGACGA-1 688 | CTTTGCGGTAACGCGA-1 689 | CTTTGCGGTACGTTCA-1 690 | GAAACTCAGTAGATGT-1 691 | GAAACTCTCACTCATT-1 692 | GAAACTCTCCAGGCAC-1 693 | GAAACTCTCTAGCAGT-1 694 | GAAATGACACGTACAT-1 695 | GAAATGACATACTTGG-1 696 | GAACATCAGGGTTCCC-1 697 | GAACATCTCACTATGG-1 698 | GAACATCTCGTTACCC-1 699 | GAACCTAAGACAGGCT-1 700 | GAACCTAAGCCCGAAA-1 701 | GAACCTACAATTCACG-1 702 | GAACCTATCCGAAGGA-1 703 | GAACCTATCCGTATTT-1 704 | GAACGGAAGTAACCCT-1 705 | GAACGGACAACAACTC-1 706 | GAACGGAGTAGAACAT-1 707 | GAACGGAGTCCGGTTG-1 708 | GAACGGATCCACAGAT-1 709 | GAAGCAGGTGCAACCC-1 710 | GAAGCAGTCACAGCCG-1 711 | GAATAAGAGGCGTTGA-1 712 | GAATAAGCAACACTTG-1 713 | GAATAAGGTGCTTTGA-1 714 | GAATAAGTCCGCTGGA-1 715 | GAATGAAAGGTAAGTT-1 716 | GAATGAAGTGGTGAGT-1 717 | GACACGCAGCGTCGAA-1 718 | GACACGCCACGCACCA-1 719 | GACACGCCATCCATCC-1 720 | GACAGAGCAACTCGCG-1 721 | GACAGAGCAGACGAAC-1 722 | GACAGAGGTTGCACTA-1 723 | GACAGAGTCGAGCACC-1 724 | GACAGAGTCGATAGTC-1 725 | GACAGAGTCGGCACCA-1 726 | GACCAATCATCTAAGC-1 727 | GACCTGGCATATCGCA-1 728 | GACCTGGGTACCGCTG-1 729 | GACGCGTAGGACACCA-1 730 | GACGCGTTCAACGATC-1 731 | GACGGCTAGCTGCGAA-1 732 | GACGGCTGTCAGGTAG-1 733 | GACGTGCAGCAGTACG-1 734 | GACGTGCAGTGTGATA-1 735 | GACGTGCGTATATGAG-1 736 | GACGTTAAGTCAAGCG-1 737 | GACGTTACAGCGATGA-1 738 | GACTAACCACGCACCA-1 739 | GACTAACGTCAGCCGT-1 740 | GACTACAGTCAACCGC-1 741 | GACTACATCGAGCACC-1 742 | GACTGCGGTGATTGGG-1 743 | GAGCAGAAGTGGTAAT-1 744 | GAGGTGAAGTAACCCT-1 745 | GAGGTGATCGAATGTC-1 746 | GAGGTGATCGGAGAAC-1 747 | GAGTCCGAGGGCTTGA-1 748 | GAGTCCGCAAACTCAC-1 749 | GAGTCCGTCCTTGCAC-1 750 | GAGTCCGTCGCCTGGA-1 751 | GAGTCCGTCTTAAGGC-1 752 | GATCAGTGTATGAAAC-1 753 | GATCAGTTCCCGTTGT-1 754 | GATCAGTTCGTTAAGC-1 755 | GATCGATAGACCTTTG-1 756 | GATCGATGTCAACTGT-1 757 | GATCGATGTCTAGGGA-1 758 | GATCGATTCCCGCATT-1 759 | GATCGATTCTGGTGAT-1 760 | GATCGCGCACCAAAGG-1 761 | GATCGCGCATAGGGCA-1 762 | GATCGCGGTACCTAGT-1 763 | GATCGTAAGGATGCGT-1 764 | GATCGTACATCTTTCA-1 765 | GATCGTAGTTATGTGC-1 766 | GATCTAGCACAGAGCA-1 767 | GATCTAGGTTGTCACA-1 768 | GATGAAAAGTAAGTAC-1 769 | GATGAAAGTAAGATGT-1 770 | GATGAAAGTAATATGG-1 771 | GATGAAAGTATGAAAC-1 772 | GATGAAAGTCATGCTA-1 773 | GATGAAAGTGAACACG-1 774 | GATGAAATCTCACCTG-1 775 | GATGCTAAGAAGGCCT-1 776 | GATGCTAGTAACGTGG-1 777 | GATTCAGCACTCACCT-1 778 | GATTCAGGTGTTTCAG-1 779 | GATTCAGTCACACTAG-1 780 | GATTCAGTCACGTATG-1 781 | GATTCAGTCGTTGCTC-1 782 | GCAAACTAGATCACTC-1 783 | GCAAACTCAACACGTT-1 784 | GCAAACTCATCAGCAT-1 785 | GCAAACTGTCATGCTA-1 786 | GCAAACTGTGTTCGAT-1 787 | GCAAACTGTTCTAGAC-1 788 | GCAAACTTCATTCGCC-1 789 | GCAAACTTCTCACCTG-1 790 | GCAATCAAGCAGGTCA-1 791 | GCAATCAAGCCGTCGT-1 792 | GCAATCAAGCGAACTG-1 793 | GCAATCAAGTAATCCC-1 794 | GCAATCACAGTACTCA-1 795 | GCAATCACAGTGGATG-1 796 | GCAATCATCGAGAGGT-1 797 | GCAATCATCGCTAGTA-1 798 | GCAATCATCGGGAAAC-1 799 | GCAATCATCTGCACAA-1 800 | GCACATACATATGTGC-1 801 | GCACATATCGTGCTAA-1 802 | GCACTCTGTGGGAAGG-1 803 | GCAGCCAAGTAAGTAC-1 804 | GCAGCCAGTACCAAGG-1 805 | GCAGCCATCTCCACGT-1 806 | GCAGCCATCTGGATCA-1 807 | GCAGTTAGTCCAGCCA-1 808 | GCAGTTAGTCCTCCAT-1 809 | GCATACAAGACTAGAT-1 810 | GCATACACATGAGACG-1 811 | GCATACATCAATCTTC-1 812 | GCATACATCCCGGACA-1 813 | GCATGATCAACACCGC-1 814 | GCATGATCATCCATCC-1 815 | GCATGATCATGACCGC-1 816 | GCATGATGTGCGAAAC-1 817 | GCATGATTCTCGGAAT-1 818 | GCATGATTCTTCCGAC-1 819 | GCATGCGCAAGACGCA-1 820 | GCATGCGGTGATTACC-1 821 | GCATGCGGTTTGGCTA-1 822 | GCATGTACACAGTGTT-1 823 | GCCAAATAGACTGGGT-1 824 | GCCAAATCAGGAGCAT-1 825 | GCCAAATGTTCGCGTG-1 826 | GCCAAATTCCAACCGG-1 827 | GCCAAATTCGAGAATA-1 828 | GCCTCTATCCGCCTAT-1 829 | GCGACCAGTACCATCA-1 830 | GCGACCAGTGCTATTG-1 831 | GCGAGAATCAGAAACA-1 832 | GCGAGAATCATCGCCT-1 833 | GCGAGAATCGTGCCTT-1 834 | GCGCAACAGACAGGCT-1 835 | GCGCAACAGCCCTAAT-1 836 | GCGCAGTAGTGCGTGA-1 837 | GCGCAGTAGTGTACCT-1 838 | GCGCAGTCACTTGTTT-1 839 | GCGCAGTGTGGAGCTA-1 840 | GCGCAGTTCATTTCGT-1 841 | GCGCCAAAGAGCGAAA-1 842 | GCGCCAAGTAACCGAG-1 843 | GCGCCAAGTGGCGTCT-1 844 | GCGCGATAGGTGTAGC-1 845 | GCGCGATTCTCTAGTT-1 846 | GCGGGTTAGCCCGAAA-1 847 | GCGGGTTTCAACTGCA-1 848 | GCGGGTTTCTTGGCCT-1 849 | GCTCCTAAGCTAAACA-1 850 | GCTCCTACAATCCGTA-1 851 | GCTCCTATCACCATCC-1 852 | GCTGCAGAGATATGCA-1 853 | GCTGCAGCACAAGGAC-1 854 | GCTGCAGTCTGCTACC-1 855 | GCTGCGACAGCGATGA-1 856 | GCTGCTTGTCAAACTC-1 857 | GCTGCTTGTCCCACAG-1 858 | GCTGGGTTCACTGCGG-1 859 | GCTGGGTTCCGCGGAT-1 860 | GCTTCCAAGACAGAGA-1 861 | GCTTCCACAGGTCTGC-1 862 | GCTTCCACATTACGCA-1 863 | GCTTCCATCGACAACT-1 864 | GCTTGAAAGAGTTGGC-1 865 | GCTTGAACAACTCATG-1 866 | GCTTGAAGTCGAGTAG-1 867 | GGAAAGCAGAACTTCC-1 868 | GGAAAGCAGACTAGGC-1 869 | GGAAAGCCACGATCTA-1 870 | GGAACTTCAATCGCGC-1 871 | GGAACTTGTGTGCTTA-1 872 | GGAACTTTCTTCCGAC-1 873 | GGAATAAGTAACGGCA-1 874 | GGAATAAGTAGCTAAA-1 875 | GGACAAGAGGGTGTTG-1 876 | GGACAAGGTGAGCTCC-1 877 | GGACAGAAGAAGGCCT-1 878 | GGACAGAAGCTGAACG-1 879 | GGACAGACAGAGACGT-1 880 | GGACAGATCCGACGTG-1 881 | GGACATTCACGGAGTA-1 882 | GGACATTGTAGTGGCA-1 883 | GGACGTCTCGTGAGGA-1 884 | GGAGCAAAGTATGACA-1 885 | GGAGCAAAGTCGATAA-1 886 | GGAGCAACAACGACGA-1 887 | GGAGCAACAGTGAAAT-1 888 | GGAGCAATCAGTACAC-1 889 | GGAGCAATCGTAGGGA-1 890 | GGATGTTAGATATACG-1 891 | GGATGTTGTCATTACG-1 892 | GGATTACGTGCGAAAC-1 893 | GGATTACGTTCAGGTT-1 894 | GGATTACTCACCGCAG-1 895 | GGCAATTAGTGTACGG-1 896 | GGCAATTAGTTCCACA-1 897 | GGCAATTGTTAGAATG-1 898 | GGCCGATAGTCGCCGT-1 899 | GGCCGATCAGAACAGC-1 900 | GGCGTGTCAAGGGATC-1 901 | GGCGTGTCACTACGTA-1 902 | GGCGTGTCAGCCAGTC-1 903 | GGCGTGTCATCGGTCG-1 904 | GGCTCGACACCTATGA-1 905 | GGCTCGAGTCGGGAAT-1 906 | GGCTCGATCTAGCCTC-1 907 | GGCTGGTTCCTTATTG-1 908 | GGGAATGAGCAGGTCA-1 909 | GGGAATGAGTAGGCCA-1 910 | GGGAATGTCATCAGCA-1 911 | GGGAATGTCCACCGGA-1 912 | GGGACCTCAGCGGTCT-1 913 | GGGACCTGTTATGCGT-1 914 | GGGACCTTCACGATAC-1 915 | GGGAGATAGAAACGCC-1 916 | GGGAGATGTTAGTGAA-1 917 | GGGAGATTCCGCTGAG-1 918 | GGGATGAAGTGGGATC-1 919 | GGGATGACACATTCAG-1 920 | GGGATGACAGAACCAG-1 921 | GGGCACTAGCCCGAAA-1 922 | GGGCACTAGCTATGCT-1 923 | GGGCACTAGGACACCA-1 924 | GGGCACTTCCTTCGTG-1 925 | GGGCATCAGTGTACGG-1 926 | GGGCATCCAACTCCGG-1 927 | GGGCATCTCAATAGGA-1 928 | GGGTCTGAGAGTAATC-1 929 | GGGTCTGCATAACAAG-1 930 | GGGTCTGGTATGCGGA-1 931 | GGGTCTGGTCTGCCAG-1 932 | GGGTTGCCACTGCGCA-1 933 | GGTATTGTCTACCGAA-1 934 | GGTGAAGGTACTCGTA-1 935 | GGTGCGTAGAGCTTCT-1 936 | GGTGCGTGTGGCCACT-1 937 | GGTGTTAAGCGTCGAA-1 938 | GGTGTTAAGTGGGTTG-1 939 | GGTGTTACACCCGTGA-1 940 | GTAACGTCATCATGCA-1 941 | GTAACGTTCCAGGTTA-1 942 | GTAACTGCAATTCACG-1 943 | GTAACTGCAGGGCTTC-1 944 | GTAACTGTCCAGGAAG-1 945 | GTAACTGTCCTTCGCA-1 946 | GTACGTAAGACAGTTA-1 947 | GTACTCCGTCGCGTCA-1 948 | GTACTCCTCCTGACAA-1 949 | GTACTTTAGACCTAGG-1 950 | GTACTTTAGGTAAGTT-1 951 | GTACTTTCATAGTGAA-1 952 | GTACTTTCATTCATCT-1 953 | GTACTTTGTCAGTTTG-1 954 | GTACTTTGTCTAGGGA-1 955 | GTAGGCCGTTCGATTG-1 956 | GTAGGCCTCGCTCTGT-1 957 | GTAGTCAAGCTAGTGG-1 958 | GTAGTCACAATCGTCA-1 959 | GTATCTTCATAGTGAA-1 960 | GTATCTTGTGTTACGT-1 961 | GTATCTTTCAATAGAG-1 962 | GTATTCTGTACGTGCC-1 963 | GTATTCTGTTCCCTAC-1 964 | GTATTCTTCTTCTTGA-1 965 | GTCAAGTAGCCAGTAG-1 966 | GTCAAGTCATCCCAAA-1 967 | GTCAAGTGTGTCTCAA-1 968 | GTCAAGTGTTTCCATT-1 969 | GTCAAGTTCCAGACCG-1 970 | GTCAAGTTCCAGGCGT-1 971 | GTCACAAAGGCCCTTG-1 972 | GTCACAACAGCGCCAT-1 973 | GTCACAATCCTCTCAG-1 974 | GTCATTTGTCTCCACT-1 975 | GTCATTTTCCTCGCTA-1 976 | GTCCTCAGTAAGAAGG-1 977 | GTCCTCAGTCAAGTCT-1 978 | GTCCTCAGTGCCTGGT-1 979 | GTCGGGTCACCCAAAT-1 980 | GTCGGGTGTAGGGTGT-1 981 | GTCGGGTGTTCCGTCT-1 982 | GTCGGGTTCATTGTTC-1 983 | GTCGTAAAGACTTCCA-1 984 | GTCGTAAAGGGCTTGA-1 985 | GTCGTAAGTAGTTCTG-1 986 | GTCGTAAGTATATGAG-1 987 | GTCTCGTTCAACAGCT-1 988 | GTCTCGTTCATGCGCG-1 989 | GTCTTCGAGGAGTCTG-1 990 | GTCTTCGTCCTGAAGT-1 991 | GTGAAGGCAGCGCATC-1 992 | GTGAAGGTCGATAGGG-1 993 | GTGCAGCAGCCAGTTT-1 994 | GTGCAGCGTGTCCTTC-1 995 | GTGCATAAGAATGTGT-1 996 | GTGCATAAGCGATATA-1 997 | GTGCGGTAGAGTAAGG-1 998 | GTGCGGTAGGGATTTA-1 999 | GTGCGGTAGGTGTAGC-1 1000 | GTGCGGTAGTAGGTGC-1 1001 | GTGCGGTCAGTCGGAA-1 1002 | GTGCTTCCATCACTGA-1 1003 | GTGCTTCCATTACAGC-1 1004 | GTGGGTCAGTCGAGTG-1 1005 | GTGGGTCTCGCAGCAC-1 1006 | GTGTGCGAGTGGTTAA-1 1007 | GTGTGCGGTCAACCGC-1 1008 | GTGTGCGGTTGACGGA-1 1009 | GTGTTAGGTCAGCCGT-1 1010 | GTGTTAGGTGACCCAC-1 1011 | GTGTTAGTCACGTATG-1 1012 | GTTAAGCAGGTCGGAT-1 1013 | GTTAAGCCACGACTAT-1 1014 | GTTAAGCGTCCCACAG-1 1015 | GTTAAGCTCTTGTCCG-1 1016 | GTTACAGAGTGGGTAC-1 1017 | GTTACAGTCGGTGCGT-1 1018 | GTTCATTAGTGGAGAA-1 1019 | GTTCATTAGTGGCACA-1 1020 | GTTCGGGAGACCTTTG-1 1021 | GTTCGGGAGCTGCGAA-1 1022 | GTTCGGGCATTCAGTG-1 1023 | GTTCGGGGTGTCTAAC-1 1024 | GTTCGGGTCATGGGCC-1 1025 | GTTCGGGTCCACTTAT-1 1026 | GTTCGGGTCCGATACA-1 1027 | GTTCTCGAGCGCCTTG-1 1028 | GTTCTCGGTTACGCCG-1 1029 | GTTCTCGTCCACCGGA-1 1030 | GTTTCTAAGTCGACTT-1 1031 | GTTTCTATCCTCATCG-1 1032 | TAAACCGCATTGAAAG-1 1033 | TAAACCGGTGACATGG-1 1034 | TAAACCGGTGTGTTCA-1 1035 | TAAACCGTCACGCGAC-1 1036 | TAAGTGCAGGAGTACC-1 1037 | TAAGTGCCATGCCATA-1 1038 | TACACGAAGCTCTCGG-1 1039 | TACACGACACCACGCA-1 1040 | TACACGAGTACTTGCA-1 1041 | TACACGAGTCATCTAG-1 1042 | TACACGATCCTCTGCA-1 1043 | TACAGTGAGCCTAACT-1 1044 | TACAGTGCAATTAAGG-1 1045 | TACAGTGCATCGCATA-1 1046 | TACAGTGTCAAGACAA-1 1047 | TACAGTGTCCGTTAAG-1 1048 | TACAGTGTCGTAGCGC-1 1049 | TACAGTGTCTGCTGAA-1 1050 | TACCTATAGATCACTC-1 1051 | TACCTATCAGGGCTTC-1 1052 | TACCTATGTGATACCT-1 1053 | TACCTATGTGCGAAAC-1 1054 | TACCTATTCATCGGTA-1 1055 | TACCTATTCTCCATGC-1 1056 | TACCTATTCTCCCTAG-1 1057 | TACCTTAAGTATGACA-1 1058 | TACCTTACAGTGGATG-1 1059 | TACCTTACATACTTGG-1 1060 | TACCTTATCGAGAGGT-1 1061 | TACGGATAGCAAAGTT-1 1062 | TACGGATAGGTGTAGC-1 1063 | TACGGATTCGCGAGAA-1 1064 | TACGGGCAGACCTTTG-1 1065 | TACGGGCCAGACAGTG-1 1066 | TACGGGCCATCTTTCA-1 1067 | TACGGGCCATGGATTC-1 1068 | TACGGGCGTACGTCAT-1 1069 | TACGGGCGTGGTCAAG-1 1070 | TACGGGCGTGTCCCTT-1 1071 | TACGGGCTCTTCACAT-1 1072 | TACGGTACAATGTAGA-1 1073 | TACTCATAGCTTTCAG-1 1074 | TACTCATCACTATGCA-1 1075 | TACTCATCAGTGTGGA-1 1076 | TACTCATGTCTCGAGC-1 1077 | TACTCATGTGACCTGC-1 1078 | TACTCATGTGGACGTA-1 1079 | TACTCGCGTTAAGCCT-1 1080 | TACTCGCTCTCAGCGG-1 1081 | TACTTACAGATCCGAG-1 1082 | TACTTACAGCAGCGTA-1 1083 | TACTTACAGCCACGTC-1 1084 | TACTTACCACCACATA-1 1085 | TACTTGTAGTTACGGG-1 1086 | TAGACCAGTTAAAGGT-1 1087 | TAGAGCTAGTCGTACT-1 1088 | TAGAGCTCAGTGCTGC-1 1089 | TAGAGCTTCATGTCAG-1 1090 | TAGAGCTTCGAAAGGC-1 1091 | TAGAGCTTCTTTCGCG-1 1092 | TAGCCGGAGATACACA-1 1093 | TAGCCGGCATACGTCA-1 1094 | TAGCCGGGTAACGCGA-1 1095 | TAGCCGGTCGAACAAA-1 1096 | TAGCCGGTCTCAGTTT-1 1097 | TAGCCGGTCTTGCGGG-1 1098 | TAGGCATAGGAATGGA-1 1099 | TAGGCATAGTCGATAA-1 1100 | TAGGCATGTACCAGCC-1 1101 | TAGGCATGTAGACGAC-1 1102 | TAGGCATTCACTGTTT-1 1103 | TAGTGGTAGCTCAACT-1 1104 | TAGTGGTCAAGCACGA-1 1105 | TAGTGGTCAGCTCATA-1 1106 | TAGTGGTGTCATCTGA-1 1107 | TAGTTGGCATAGAGGC-1 1108 | TATCAGGCAACGAAAT-1 1109 | TATCAGGCATGAAAGT-1 1110 | TATCAGGGTCTCGAGC-1 1111 | TATCTCAGTTCTTTGT-1 1112 | TATCTCATCGTTAGGT-1 1113 | TATGCCCCAGACAGTG-1 1114 | TATGCCCGTGACCAAG-1 1115 | TATTACCAGACTAGGC-1 1116 | TATTACCCATGGATTC-1 1117 | TATTACCGTCTTCGTC-1 1118 | TATTACCGTTACTGAC-1 1119 | TCAACGAGTCAGTGGA-1 1120 | TCAATCTCAGAAGAAG-1 1121 | TCAATCTGTTAAGATG-1 1122 | TCAATCTTCTGGATCA-1 1123 | TCACAAGGTAAGGTGC-1 1124 | TCACAAGGTACCTAGT-1 1125 | TCACAAGGTCGAATCT-1 1126 | TCACAAGGTTGACCCG-1 1127 | TCACAAGTCGTGTCAA-1 1128 | TCACGAAGTAGTCTGT-1 1129 | TCACGAATCGTTATCT-1 1130 | TCAGATGTCGTTAAGC-1 1131 | TCAGCTCAGACAAAGG-1 1132 | TCAGCTCCAACATAAG-1 1133 | TCAGCTCCAGCTTGAT-1 1134 | TCAGGATAGGGCATGT-1 1135 | TCAGGATCATGCGTGC-1 1136 | TCAGGTAAGAGTGACC-1 1137 | TCAGGTAAGCTAGTGG-1 1138 | TCAGGTAAGTGGGTAC-1 1139 | TCAGGTATCCGAAGCC-1 1140 | TCATTACAGAAGGTTT-1 1141 | TCATTACGTCCTCCAT-1 1142 | TCATTTGCAACTCACA-1 1143 | TCCACACAGCAGTCTT-1 1144 | TCCACACGTCCATTGA-1 1145 | TCCACACTCACGTTAG-1 1146 | TCCCGATCAACTGGAG-1 1147 | TCCCGATGTCGATACT-1 1148 | TCCCGATTCTCAGATG-1 1149 | TCGAGGCGTTGGTATC-1 1150 | TCGAGGCTCGGGTCCA-1 1151 | TCGCGAGCATCGCACG-1 1152 | TCGCGAGGTTCAAGGG-1 1153 | TCGCGAGTCATGACCA-1 1154 | TCGCGTTCAACCTGAT-1 1155 | TCGCGTTTCCTCTGCA-1 1156 | TCGCGTTTCGCGGCAT-1 1157 | TCGGGACAGGCCCTTG-1 1158 | TCGGGACCATCCATCC-1 1159 | TCGGGACGTCCCACAG-1 1160 | TCGGGACTCACGATAC-1 1161 | TCGTACCAGGTAAGTT-1 1162 | TCGTACCGTAATATGG-1 1163 | TCGTACCGTGGATAGC-1 1164 | TCGTAGAGTGACCCAC-1 1165 | TCTATTGCAAGCACGA-1 1166 | TCTCATAAGAGGTACC-1 1167 | TCTCATAAGGAGTACC-1 1168 | TCTCATATCCGGCTAG-1 1169 | TCTCTAAGTTTACTCT-1 1170 | TCTCTAATCGTAACCA-1 1171 | TCTGAGAGTAGGTTTC-1 1172 | TCTGGAAGTTATCGGT-1 1173 | TCTGGAAGTTGGTGAG-1 1174 | TCTGGAATCACACTAG-1 1175 | TCTGGAATCTATTGCT-1 1176 | TCTTCGGAGCTGCGAA-1 1177 | TCTTCGGGTCATACTG-1 1178 | TCTTCGGGTTGTCGCG-1 1179 | TCTTCGGTCCGCCTTA-1 1180 | TCTTTCCAGTACTTGC-1 1181 | TCTTTCCTCGAGTACT-1 1182 | TCTTTCCTCGTAACCA-1 1183 | TGAAAGAAGGAGTACC-1 1184 | TGAAAGAAGGAGTTTA-1 1185 | TGAAAGAAGTGACATA-1 1186 | TGAAAGACACCACATA-1 1187 | TGAAAGAGTGCATCTA-1 1188 | TGACAACCAGGTACGA-1 1189 | TGACGGCAGCCCGTGT-1 1190 | TGACGGCGTTCCACAA-1 1191 | TGACTAGGTGCTTAGT-1 1192 | TGACTAGTCACACGGC-1 1193 | TGACTTTAGATAGCAT-1 1194 | TGACTTTAGCCAGGAT-1 1195 | TGACTTTAGCGATATA-1 1196 | TGACTTTAGCGTCTAT-1 1197 | TGACTTTCAACCGCTG-1 1198 | TGACTTTGTAGATGCG-1 1199 | TGACTTTTCAGTTCTT-1 1200 | TGACTTTTCATCGCCT-1 1201 | TGAGAGGCATTTCGTT-1 1202 | TGAGAGGTCTTTCGTA-1 1203 | TGAGCATAGCTCTCGG-1 1204 | TGAGCATAGGTGCACA-1 1205 | TGAGCCGAGATATACG-1 1206 | TGAGCCGCACCCTCTA-1 1207 | TGAGCCGCAGGTCCCA-1 1208 | TGAGCCGCATTCTTGT-1 1209 | TGAGCCGGTTAAAGGT-1 1210 | TGAGCCGTCAAGTGCT-1 1211 | TGAGCCGTCCAGGCGT-1 1212 | TGAGGGAAGCACCGCT-1 1213 | TGAGGGAAGCAGCCCT-1 1214 | TGAGGGAGTGTGCTTA-1 1215 | TGAGGGATCTATGCCC-1 1216 | TGATTTCAGCAGATCG-1 1217 | TGATTTCCACAATCAC-1 1218 | TGATTTCCACGGCTGT-1 1219 | TGATTTCTCACGCGAC-1 1220 | TGCACCTGTATCGCCG-1 1221 | TGCACCTTCCCTAAGA-1 1222 | TGCCAAAGTCAGCCGT-1 1223 | TGCCAAAGTTGGCGTC-1 1224 | TGCCCATCAGCTCATA-1 1225 | TGCCCTACAATTAAGG-1 1226 | TGCCCTACAGAGACGT-1 1227 | TGCCCTATCCACCTTG-1 1228 | TGCCCTATCGCGATGC-1 1229 | TGCGCAGAGCTACCTA-1 1230 | TGCGCAGGTGGGCCTT-1 1231 | TGCGCAGGTTTGGCTA-1 1232 | TGCGTGGCAACTCACA-1 1233 | TGCTACCAGACCCACC-1 1234 | TGCTACCGTCAGAAGC-1 1235 | TGCTGCTAGAGCTTCT-1 1236 | TGCTGCTAGTCGCCGT-1 1237 | TGCTGCTGTAAGTGTA-1 1238 | TGCTGCTGTGGTACAG-1 1239 | TGGACGCAGCCCGAAA-1 1240 | TGGACGCAGGCAGTCA-1 1241 | TGGACGCAGTACAGTA-1 1242 | TGGACGCCAGCGATGA-1 1243 | TGGACGCGTCACATGT-1 1244 | TGGACGCGTTCAGTGT-1 1245 | TGGCCAGTCGATTGCA-1 1246 | TGGCGCAAGTTAGGTA-1 1247 | TGGCGCATCCTGCACT-1 1248 | TGGCGCATCTCCATGC-1 1249 | TGGCTGGAGCGTTGCC-1 1250 | TGGCTGGTCCACCCAT-1 1251 | TGGCTGGTCCAGGAAG-1 1252 | TGGCTGGTCTATGCAG-1 1253 | TGGGAAGCAGTGAAAT-1 1254 | TGGGAAGTCCGCCTAT-1 1255 | TGGGAAGTCGAAAGGC-1 1256 | TGGGCGTAGGGTTCCC-1 1257 | TGGTTAGAGATACACA-1 1258 | TGGTTAGTCAACAGCT-1 1259 | TGGTTAGTCGCTATTT-1 1260 | TGGTTCCCAGTTGCCG-1 1261 | TGGTTCCGTCTGGGCT-1 1262 | TGGTTCCTCGATCCGG-1 1263 | TGTATTCTCACGCGAC-1 1264 | TGTATTCTCGTACGCG-1 1265 | TGTATTCTCTAGAGCT-1 1266 | TGTCCCAAGACCACGA-1 1267 | TGTCCCAAGCGCGTCT-1 1268 | TGTCCCACAAGTGCAG-1 1269 | TGTCCCACACCACACG-1 1270 | TGTCCCAGTCACGCAC-1 1271 | TGTCCCATCCGCGAGT-1 1272 | TGTGGTAAGTTCCACA-1 1273 | TGTGTTTAGCAAATCA-1 1274 | TGTGTTTCACGCACGT-1 1275 | TGTGTTTGTCGTGAAG-1 1276 | TGTTCCGCAAACCCTA-1 1277 | TGTTCCGCACGACTAT-1 1278 | TGTTCCGCATCCAGGC-1 1279 | TGTTCCGGTCATGTTG-1 1280 | TGTTCCGGTGCATGAG-1 1281 | TGTTCCGTCCACGATA-1 1282 | TGTTCCGTCCGTATTT-1 1283 | TTAACTCGTTATCCGA-1 1284 | TTAACTCTCATCGCCT-1 1285 | TTAACTCTCTCATCCG-1 1286 | TTAGGACGTAACTTCG-1 1287 | TTAGGACTCATTGGAC-1 1288 | TTAGGCAAGCCTATGT-1 1289 | TTAGGCACAAACCGAG-1 1290 | TTAGGCAGTCTCGTCT-1 1291 | TTAGGCATCCAAAGAA-1 1292 | TTAGTTCAGGTGCTTT-1 1293 | TTAGTTCCACTGCGCA-1 1294 | TTAGTTCCAGGACCAA-1 1295 | TTAGTTCCATTGGTCA-1 1296 | TTATGCTAGCCCGTGT-1 1297 | TTCGAAGAGTCAAGGC-1 1298 | TTCGAAGGTCACATGT-1 1299 | TTCGAAGGTGATGTGG-1 1300 | TTCGAAGTCGGTGCAC-1 1301 | TTCGGTCGTGGAAACC-1 1302 | TTCTACAAGACGCTTT-1 1303 | TTCTACAAGTGATGAT-1 1304 | TTCTCAACAACTCGCG-1 1305 | TTCTCAACATGAATGA-1 1306 | TTCTCAATCAGTAAAG-1 1307 | TTCTCAATCGATACAC-1 1308 | TTCTCCTCAACGGGAT-1 1309 | TTCTTAGCAGTAATCC-1 1310 | TTCTTAGTCAACAGTC-1 1311 | TTGAACGGTCGTCTTC-1 1312 | TTGAACGTCCCGGACA-1 1313 | TTGACTTAGACAGGCT-1 1314 | TTGACTTGTCCTACCT-1 1315 | TTGCCGTCATAGTGTC-1 1316 | TTGCCGTGTTTGTCAG-1 1317 | TTGCGTCCAACACCGC-1 1318 | TTGGCAAGTAATGACA-1 1319 | TTGGCAAGTTGCCACG-1 1320 | TTTACTGAGTGAAGTT-1 1321 | TTTATGCCAACTCGCG-1 1322 | TTTATGCTCCAACAAC-1 1323 | TTTCCTCAGGCGTTGA-1 1324 | TTTCCTCTCCAAAGAA-1 1325 | TTTCCTCTCTGTATTC-1 1326 | TTTGCGCCATCAAGAA-1 1327 | TTTGCGCGTAAGATGT-1 1328 | TTTGCGCGTCACATGT-1 1329 | TTTGGTTCAACGCGCT-1 1330 | TTTGGTTGTTACGGCC-1 1331 | TTTGTCAAGGCAGTCA-1 1332 | -------------------------------------------------------------------------------- /test/test.bam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10XGenomics/subset-bam/c135329d375f3bb542fd9e85bb9e940f82a7661f/test/test.bam -------------------------------------------------------------------------------- /test/test.bam.bai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10XGenomics/subset-bam/c135329d375f3bb542fd9e85bb9e940f82a7661f/test/test.bam.bai --------------------------------------------------------------------------------