diff --git a/.github/workflows/testing_and_building_repo.yml b/.github/workflows/testing_and_building_repo.yml new file mode 100644 index 00000000..9eb037e0 --- /dev/null +++ b/.github/workflows/testing_and_building_repo.yml @@ -0,0 +1,50 @@ +name: testing_and_building_repo +on: [push, pull_request] +jobs: + build: + strategy: + matrix: + os: ['ubuntu-18.04'] + + runs-on: ${{matrix.os}} + name: Workflow on ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: '0' + + - name: install libgd-dev and liblzma-dev + run: + sudo apt-get install -y libgd-dev liblzma-dev libcurl4-openssl-dev + + - name: clone samtools branch + run: | + export HTSLIB=${{ github.workspace }}/htslib + git clone --branch $HTSLIB_BRANCH git://github.com/samtools/htslib.git $HTSLIB + env: + HTSLIB_BRANCH: develop + + - name: make HTSLIB + run: | + export HTSLIB=${{ github.workspace }}/htslib + export HTSDIR=${{ github.workspace }}/htslib/b + cd $HTSLIB + git submodule update --init --recursive + (autoreconf && mkdir b && ./configure --prefix=$HTSDIR && make && make install) + + - name: make and configure + run: | + export HTSDIR=${{ github.workspace }}/htslib/b + autoreconf -i + ./configure --with-htslib=$HTSDIR + make + make check + #make distcheck #TODO + + # running ./Build dist and exporting files + - name: run ./Build dist + run: | + make dist + export DIST_FILE=$(ls bambi-*.tar.gz) + export SHA256_FILE=$DIST_FILE.sha256 + shasum -a 256 $DIST_FILE > $SHA256_FILE diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 539bba95..00000000 --- a/.travis.yml +++ /dev/null @@ -1,56 +0,0 @@ -language: c - -addons: - apt: - packages: - - liblzma-dev - - libgd-dev - -matrix: - include: - - os: linux - compiler: clang - env: CFLAGS="-Wno-pointer-sign"" - - os: linux - compiler: gcc - - os: linux - compiler: gcc - -env: - global: - - P=`pwd` - - HTSLIB=$P/htslib - - HTSDIR=$HTSLIB/b - - HTSLIB_BRANCH=develop - - DISTCHECK_CONFIGURE_FLAGS=--with-htslib=$HTSDIR - -install: -- git clone --branch $HTSLIB_BRANCH git://github.com/samtools/htslib.git $HTSLIB - -before_script: -- (cd $HTSLIB && autoreconf && mkdir b && ./configure --prefix=$HTSDIR && make && make install) - -script: - - autoreconf -i && ./configure -V && ./configure --with-htslib=$HTSDIR - - make && make check && make distcheck - -after_success: - - make dist - - export DIST_FILE=$(ls bambi-*.tar.gz) - - export SHA256_FILE=$DIST_FILE.sha256 - - shasum -a 256 $DIST_FILE > $SHA256_FILE - -after_failure: - -deploy: - provider: releases - api_key: - secure: ThARbt8qf7uZsgT/2Di49LOeeUI5NKUP7OKm8WIG2POrjHoxMBFn6xwirRfDLdIGWc93WUjK99y5o0PcHzkvgsqBKMsmBdb3Gar34Wn35Xc7rW/kChv95cXKWAVT12I212Qltiq0M8Ge8tLTou3P5IF/gKZD/aCvTCR+HkZP6WNS63zM+0RxFptw9BUqlPSfBHRJmk6zPLBkxSrq126Um3FEDEr33lU7uOvEiY69gnpQBVNBNS+g4fD/6Trvdj8x3s/IqnnGp4b4Vmz11nK9bkKOavVzFYplq0z//7fpOhhsCppD1pNhyUX9JHZ+/hEkZ1pGzx2QHIHrp23e54CRiWKEFBZ88LJOH7Hjiht7HfdaMUVwF+j8yWD3+3VIhspCk04un9uIFoG0x6IJ1kfzLpvpYuxhdnvCZymfMbsRkvx9vOyeLARZXiw8+UEYDJNxPqho1tJoQtrW5f0CkpQFkSw5qn/VYdotyuVw8fkpK1g/zjzWKS+2Av2XLTFf67ULZeArdaAZqxXI5vnKg3YkJDdkQ8/eiXTYhKkjTP8bx4RXbcdXDTGUPXJBNd6wm4h+KMsa9+Yht1iU3xuALCV3wi8KdNRPA3IDrCH0aXxI5hulqR+iPkMPXsbyhh/TyENkNuB6TgSSNpkeH9Y6kCuODEywT2D5CEEaZMADt+jEINs= - file: - - $DIST_FILE - - $SHA256_FILE - skip_cleanup: true - on: - tags: true - repo: jenniferliddle/bambi - branch: master diff --git a/Makefile.am b/Makefile.am index 8fc393fa..1b8e72af 100644 --- a/Makefile.am +++ b/Makefile.am @@ -38,7 +38,8 @@ src_bambi_SOURCES = src/bambi.c \ src/parse_bam.c \ src/parse_bam.h \ src/crc.c \ - src/crc.h + src/crc.h \ + src/substitution_analysis.c src_check_bcl_SOURCES = src/check_bcl.c src/bclfile.c src/bambi_utils.c src/array.c @@ -60,7 +61,8 @@ TESTS = test/t_array \ test/t_sf \ test/t_seqchksum \ test/t_adapters \ - test/t_update + test/t_update \ + test/t_sa dist_doc_DATA = README.md LICENSE @@ -77,7 +79,8 @@ check_PROGRAMS = test/t_read2tags \ test/t_sf \ test/t_seqchksum \ test/t_adapters \ - test/t_update + test/t_update \ + test/t_sa TEST_CFLAGS = -I$(top_srcdir)/src $(XML_CFLAGS) -DDATA_DIR=$(top_srcdir)/test/data TEST_LDADD = $(HTSLIB_LIBS) -lm @@ -128,6 +131,10 @@ test_t_sf_SOURCES = test/t_sf.c src/bamit.c src/array.c src/bambi_utils.c test_t_sf_CFLAGS = $(TEST_CFLAGS) test_t_sf_LDADD = $(TEST_LDADD) +test_t_sa_SOURCES = test/t_sa.c src/bamit.c src/bambi_utils.c +test_t_sa_CFLAGS = $(TEST_CFLAGS) +test_t_sa_LDADD = $(TEST_LDADD) + test_t_seqchksum_SOURCES = test/t_seqchksum.c test_t_seqchksum_CFLAGS = $(TEST_CFLAGS) #test_t_seqchksum_LDADD = $(TEST_LDADD) diff --git a/.travis/clone b/scripts/clone similarity index 100% rename from .travis/clone rename to scripts/clone diff --git a/src/bambi.c b/src/bambi.c index 388d9edd..0622603f 100644 --- a/src/bambi.c +++ b/src/bambi.c @@ -39,6 +39,7 @@ int main_spatial_filter(int argc, char *argv[]); int main_seqchksum(int argc, char *argv[]); int main_adapters(int argc, char *argv[]); int main_update(int argc, char *argv[]); +int main_substitution_analysis(int argc, char *argv[]); const char *bambi_version() { @@ -64,6 +65,7 @@ static void usage(FILE *fp) " seqchksum calculate checksums for a bam file\n" " adapters find and remove adapters\n" " update update an existing BAM/SAM/CRAM file\n" +" substitution_analysis produce a substitution analysis table\n" "\n" "bambi for help on a particular command\n" "\n"); @@ -93,6 +95,7 @@ int main(int argc, char *argv[]) else if (strcmp(argv[1], "seqchksum") == 0) ret = main_seqchksum(argc-1, argv+1); else if (strcmp(argv[1], "adapters") == 0) ret = main_adapters(argc-1, argv+1); else if (strcmp(argv[1], "update") == 0) ret = main_update(argc-1, argv+1); + else if (strcmp(argv[1], "substitution_analysis") == 0) ret = main_substitution_analysis(argc-1, argv+1); else if (strcmp(argv[1], "--version") == 0) { printf( "bambi %s\n" "Using htslib %s\n" diff --git a/src/check_bcl.c b/src/check_bcl.c index 8af4f101..6b92fd6a 100644 --- a/src/check_bcl.c +++ b/src/check_bcl.c @@ -117,32 +117,6 @@ static char *uncompressBlock(char* abSrc, int nLenSrc, char* abDst, int nLenDst return msg; } -#if 0 -// libdeflate version -#include -static char *uncompressBlock(char* abSrc, int nLenSrc, char* abDst, int nLenDst ) -{ - char *msg = NULL; - size_t actualOut; - - if (nLenDst == 0) return 0; - - int nErr; - struct libdeflate_decompressor *compressor = libdeflate_alloc_decompressor(); - //LIBDEFLATEAPI *compressor = libdeflate_alloc_decompressor(); - - nErr = libdeflate_gzip_decompress(compressor, abSrc, nLenSrc, abDst, nLenDst, &actualOut); - if (nErr != LIBDEFLATE_SUCCESS) { - char buff[64]; - sprintf(buff, "%02x %02x %02x %02x %02x", (uint8_t)abSrc[0], (uint8_t)abSrc[1], (uint8_t)abSrc[2], (uint8_t)abSrc[3], (uint8_t)abSrc[4]); - store_msg(&msg, "inflate() returned %d for data %s", nErr, buff); - } - - libdeflate_free_decompressor(compressor); - return msg; -} -#endif - static off_t find_tile_offset(bclfile_t *bcl, int tile, tilerec_t **ti_out) { off_t offset = bcl->header_size; @@ -208,7 +182,7 @@ static int checkBclFile(char *fname, int verbose) bclfile_t *bcl; bcl = bclfile_open(fname, mt, tile); if (bcl->errmsg) { - display("File: %s\t%s\n", fname, bcl->errmsg); + display("Can't open File: %s\t%s\n", fname, bcl->errmsg); ret = 1; } @@ -234,20 +208,17 @@ static int checkBclFile(char *fname, int verbose) tilerec_t *tile = bcl->tiles->entries[n]; if (verbose) display(" %3d %6d %d\t%d\t%d\t", n, tile->tilenum, tile->nclusters, tile->uncompressed_blocksize, tile->compressed_blocksize); char *msg = checkTile(bcl,tile->tilenum); - if (msg) ret = 1; - if (verbose) { - if (msg) display("***FAIL*** %s\n", msg); - else display("Ok\n"); + if (msg) { + display("Failed Tile %6d for file %s: %s\n", tile->tilenum, fname, msg); + ret = 1; + } else { + if (verbose) display("Ok\n"); } free(msg); } } } - if (!verbose && ret != 0) { - display("Failed %s check: %s\n", (ret==1 ? "Header" : "Tile"), fname); - } - bclfile_close(bcl); return ret; } @@ -343,7 +314,7 @@ int main(int argc, char *argv[]) if (optind >= argc) Usage(stderr); if (isDirectory(argv[optind])) r = checkRunFolder(argv[optind]); - else r = checkBclFile(argv[optind], 1); + else r = checkBclFile(argv[optind], check_opts_verbose); return r; } diff --git a/src/decode.c b/src/decode.c index 823c2a8a..b6af4c59 100644 --- a/src/decode.c +++ b/src/decode.c @@ -633,7 +633,7 @@ int writeMetrics(va_t *barcodeArray, HashTable *tagHopHash, decode_opts_t *opts) * Now write tag hop metrics file - if there are any */ - if (opts->idx2_len) { + if (opts->idx1_len && opts->idx2_len) { char *metrics_hops_name = malloc(strlen(opts->metrics_name)+6); strcpy(metrics_hops_name, opts->metrics_name); strcat(metrics_hops_name, ".hops"); @@ -968,7 +968,7 @@ char *findBarcodeName(char *barcode, va_t *barcodeArray, HashTable *barcodeHash, } else { bcd = findBestMatch(barcode, barcodeArray, barcodeHash, opts); if (isUpdateMetrics) updateMetrics(bcd, barcode, isPf); - if ((bcd == barcodeArray->entries[0]) && opts->idx2_len) { + if ((bcd == barcodeArray->entries[0]) && opts->idx1_len && opts->idx2_len) { bc_details_t *tag_hop = check_tag_hopping(barcode, barcodeArray, tagHopHash, opts); if (isUpdateMetrics && tag_hop) updateMetrics(tag_hop, barcode, isPf); } @@ -1584,7 +1584,8 @@ size_t find_longest_barcode_name(va_t *barcodeArray) int get_barcode_metadata(va_t *barcodeArray, int idx, const char **name_out, const char **lib_out, - const char **sample_out, const char **desc_out) { + const char **sample_out, const char **desc_out, + const char **seq_out) { bc_details_t *barcode; if (!barcodeArray || idx >= barcodeArray->end) return -1; barcode = barcodeArray->entries[idx]; @@ -1592,6 +1593,7 @@ int get_barcode_metadata(va_t *barcodeArray, int idx, if (lib_out) *lib_out = barcode->lib; if (sample_out) *sample_out = barcode->sample; if (desc_out) *desc_out = barcode->desc; + if (seq_out) *seq_out = barcode->seq; return 0; } diff --git a/src/decode.h b/src/decode.h index 000a90fa..d508ee53 100644 --- a/src/decode.h +++ b/src/decode.h @@ -51,7 +51,8 @@ size_t find_longest_barcode_name(va_t *barcodeArray); // Get barcode metadata. Returns -1 if idx is off the end of barcodeArray, else 0 int get_barcode_metadata(va_t *barcodeArray, int idx, const char **name_out, const char **lib_out, - const char **sample_out, const char **desc_out); + const char **sample_out, const char **desc_out, + const char **seq_out); // Make a copy of a barcode array va_t *copy_barcode_array(va_t *barcode_array); diff --git a/src/i2b.c b/src/i2b.c index c51e2a53..dd030c92 100644 --- a/src/i2b.c +++ b/src/i2b.c @@ -898,8 +898,8 @@ static int addHeader(samFile *output_file, bam_hdr_t *output_header, opts_t *opt char *pu = malloc(strlen(opts->platform_unit) + longest_name + 2); if (!id || !pu) die("Out of memory"); for (int idx = 0; ; idx++) { - const char *name = NULL, *lib = NULL, *sample = NULL, *desc = NULL; - if (get_barcode_metadata(opts->barcodeArray, idx, &name, &lib, &sample, &desc) < 0) break; + const char *name = NULL, *lib = NULL, *sample = NULL, *desc = NULL, *seq = NULL; + if (get_barcode_metadata(opts->barcodeArray, idx, &name, &lib, &sample, &desc, &seq) < 0) break; if (idx == 0) { lib = opts->library_name; sample = opts->sample_alias; @@ -917,6 +917,7 @@ static int addHeader(samFile *output_file, bam_hdr_t *output_header, opts_t *opt "CN", opts->sequencing_centre, "PL", opts->platform, (desc ? "DS" : NULL), (desc ? desc : NULL), + (seq ? "BC" : NULL), (seq ? seq : NULL), NULL); } free(id); @@ -2515,7 +2516,7 @@ static int createBAM(samFile *output_file, bam_hdr_t *output_header, hts_tpool * if (!tag_hops) die("Out of memory"); barcodeHash = make_barcode_hash(opts->barcodeArray); longest_barcode_name = find_longest_barcode_name(opts->barcodeArray); - if (get_barcode_metadata(opts->barcodeArray, 0, &opts->unmatched_barcode_name, NULL, NULL, NULL) < 0) { + if (get_barcode_metadata(opts->barcodeArray, 0, &opts->unmatched_barcode_name, NULL, NULL, NULL, NULL) < 0) { opts->unmatched_barcode_name = "0"; } } diff --git a/src/parse_bam.c b/src/parse_bam.c index c33c6031..ee057021 100644 --- a/src/parse_bam.c +++ b/src/parse_bam.c @@ -327,11 +327,11 @@ bam1_t *parse_bam_readinfo( BAMit_t *fp, } } - *bam_lane = lane; - *bam_tile = tile; - *bam_x = x; - *bam_y = y; - *bam_read = read; + if (bam_lane) *bam_lane = lane; + if (bam_tile) *bam_tile = tile; + if (bam_x) *bam_x = x; + if (bam_y) *bam_y = y; + if (bam_read) *bam_read = read; if (bam_offset) *bam_offset = offset; return bam; } diff --git a/src/spatial_filter.c b/src/spatial_filter.c index a8245214..bb7f0493 100644 --- a/src/spatial_filter.c +++ b/src/spatial_filter.c @@ -1146,7 +1146,7 @@ static void writeFilter(opts_t *s, RegionTable_t *rtsArray) if (!fp) die("Can't open filter file %s: %s\n", s->filters->entries[0], strerror(errno)); strncpy(Fheader.region_magic, REGION_MAGIC, sizeof(Fheader.region_magic)); - strncpy(Fheader.cmdLine, s->argv_list, sizeof(Fheader.cmdLine)); + strncpy(Fheader.cmdLine, s->argv_list, sizeof(Fheader.cmdLine)-1); if (hwrite(fp, &Fheader, sizeof(Fheader)) < 0) die("writeFheader() failed\n");; for (int lane=1; lane < SF_MAX_LANES; lane++) { diff --git a/src/substitution_analysis.c b/src/substitution_analysis.c new file mode 100644 index 00000000..3ff1bca4 --- /dev/null +++ b/src/substitution_analysis.c @@ -0,0 +1,794 @@ +/* -*- mode: c; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8; -*- */ + +/* + * Copyright (c) 2021, Genome Research Ltd (GRL). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * * Neither the name of the Genome Research Limited nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY GRL ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL GRL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Author: Steven Leonard, Jan 2009 + * + * This code generates a substitution analysis table + * + * Incorporated into Bambi: Jennifer Liddle May 2021 + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "parse_bam.h" +#include "bambi_utils.h" +#include "bamit.h" + +#define N_READS 3 + +#define LEN_SUBST 2 +#define NUM_SUBST 16 // 4 ^ LEN_SUBST +#define LEN_CNTXT 4 +#define NUM_CNTXT 256 // 4 ^ LEN_CNTXT + +#define NBINS 51 +#define ST_HILO_QUALITY 29.5 + +typedef struct { + int read; + int cycle; + int nbins; + float predictor_hilo; + float *predictor; + long *num_bases; + long *num_errors; + long *subst[NUM_SUBST]; + long substH[NUM_SUBST]; + long substL[NUM_SUBST]; + long cntxtH[NUM_CNTXT]; + long cntxtL[NUM_CNTXT]; + long total_bases; + long total_errors; + float quality; +} SurvTable; + +typedef struct { + char *reportName; + char *in_bam_file; + int read_length[N_READS]; + int quiet; + int verbose; + char compression_level; + char *input_fmt; + char *output_fmt; + +} opts_t; + +static void free_opts(opts_t *opts) +{ + free(opts->reportName); + free(opts->in_bam_file); + free(opts->input_fmt); + free(opts); +} + + +#define MAXNH 7 +static int* lookup = NULL; + +static void init_lookup(void) { + int i; + + lookup = (int *) calloc(256, sizeof(int)); + for (i = 0; i < 256; i++) + lookup[i] = -1; + lookup['A'] = 0; + lookup['a'] = 0; + lookup['C'] = 1; + lookup['c'] = 1; + lookup['G'] = 2; + lookup['g'] = 2; + lookup['T'] = 3; + lookup['t'] = 3; +} + +int str2word(char *seq, int NH) { + int i, word = -1; + + if (!lookup) { + init_lookup(); + } + + if (NH > MAXNH) + return word; + + word = 0; + for (i = 0; i < NH; i++) { + word <<= 2; + word |= lookup[(int)seq[i]]; + } + + return word; +} + +char *word2str(int word, int NH) { + static char str[MAXNH+1]; + int i; + + if (!lookup) { + init_lookup(); + } + + for (i = 0; i < NH; i++) + str[i] = "ACGT"[(word >> (2*(NH-1)-2*i)) & 3]; + str[NH] = 0; + + return str; +} + +static void initialiseSurvTable(SurvTable *st, int read, int cycle) +{ + int i, j; + + st->read = read; + st->cycle = cycle; + + st->nbins = NBINS; + + st->predictor_hilo = ST_HILO_QUALITY; + + st->predictor = (float *)smalloc(st->nbins * sizeof(float)); + for (i=0;inbins;i++) + st->predictor[i] = i; + + st->num_bases = (long *)smalloc(st->nbins * sizeof(long)); + st->num_errors = (long *)smalloc(st->nbins * sizeof(long)); + for (i=0;inbins;i++) { + st->num_bases[i] = 0; + st->num_errors[i] = 0; + } + + for (j=0;jsubst[j] = (long *)smalloc(st->nbins * sizeof(long)); + for (i=0;inbins;i++) + st->subst[j][i] = 0; + st->substH[j]=0; + st->substL[j]=0; + } + for (j=0;jcntxtH[j]=0; + st->cntxtL[j]=0; + } + + st->total_bases = 0; + st->total_errors = 0; + +} + +static void freeSurvEntry(SurvTable *st) +{ + if (st && st->nbins) { + free(st->predictor); + free(st->num_bases); + free(st->num_errors); + for (int i=0;isubst[i]); + st->nbins = 0; + } +} + +static void freeSurvTable(opts_t *opts, SurvTable **sts) +{ + int read, cycle; + for(read=0;readread_length[read];cycle++) + { + SurvTable *st = sts[read] + cycle; + freeSurvEntry(st); + } + free(sts[read]); + } + free(sts); +} + +static void completeSurvTable(opts_t *opts, SurvTable **sts) +{ + float ssc = 1.0; + + for (int read=0; read < N_READS; read++) { + if (NULL == sts[read]) continue; + for (int cycle=0; cycle < opts->read_length[read]; cycle++) { + SurvTable *st = sts[read] + cycle; + long quality_bases = 0; + long quality_errors = 0; + + for (int i=0; i < st->nbins; i++) { + st->total_bases += st->num_bases[i]; + st->total_errors += st->num_errors[i]; + + // bases in the first bin are called as N and explicitly get a quality of 0 + if( i == 0 ) + continue; + + quality_bases += st->num_bases[i]; + quality_errors += st->num_errors[i]; + } + + st->quality = -10.0 * log10((quality_errors + ssc)/(quality_bases + ssc)); + } + } +} + +static void writeReport(opts_t *opts, SurvTable **sts) +{ + FILE *fp = NULL; + SurvTable **read_sts; + int read, cycle, i, j; + char p; + + // open report file + if (opts->reportName) fp = fopen(opts->reportName, "w"); + else fp = stdout; + + if (!fp) die("ERROR: can't open report file %s: %s\n", opts->reportName, strerror(errno)); + + /* generate read summary tables by summing over cycles */ + + read_sts = (SurvTable **)smalloc(N_READS * sizeof(SurvTable *)); + + for (read=0; read < N_READS; read++) { + int read_length = opts->read_length[read]; + read_sts[read] = NULL; + if (0 == read_length) continue; + + read_sts[read] = (SurvTable *)smalloc(sizeof(SurvTable)); + SurvTable *read_st = read_sts[read]; + + initialiseSurvTable(read_st, read, -1); + + for (cycle=0; cycle < read_length; cycle++) { + SurvTable *st = sts[read] + cycle; + for(j=0;jnbins;i++) + read_st->subst[j][i] += st->subst[j][i]; + for(j=0;jsubstH[j] += st->substH[j]; + for(j=0;jsubstL[j] += st->substL[j]; + for(j=0;jcntxtH[j] += st->cntxtH[j]; + for(j=0;jcntxtL[j] += st->cntxtL[j]; + } + } + + /* substitution RC */ + + fprintf(fp, "# Substitution error table. Use `grep ^SET | cut -f 2-` to extract this part\n"); + fprintf(fp, "# One row per read and quality value, columns read, quality value followed by substitution and count for 12 substitutions\n"); + for(read=0;readnbins;i++) + { + fprintf(fp, "SET\t%d\t%.2f", read, st->predictor[i]); + for (j=0;jsubst[j][i]); + } + fprintf(fp, "\n"); + } + } + + fprintf(fp, "# Mismatch substitutions high quality. Use `grep ^RCH | cut -f 2-` to extract this part\n"); + fprintf(fp, "# One row per read and cycle, columns read, cycle then substitution and count for 12 substitutions\n"); + fprintf(fp, "# Followed by a single row with a total over all cycles for each read, columns are read, -1 then substitution and count for 12 substitutions\n"); + for(read=0;readread_length[read];cycle++) + { + SurvTable *st = sts[read] + cycle; + if( 0 == st->total_bases ) continue; + fprintf(fp, "RCH\t%d\t%d", read, cycle); + for (j=0;jsubstH[j]); + } + fprintf(fp, "\n"); + } + /* and read summary (cycle = -1) */ + SurvTable *st = read_sts[read]; + fprintf(fp, "RCH\t%d\t%d", read, -1); + for (j=0;jsubstH[j]); + } + fprintf(fp, "\n"); + } + + fprintf(fp, "# Mismatch substitutions low quality. Use `grep ^RCL | cut -f 2-` to extract this part\n"); + fprintf(fp, "# One row per read and cycle, columns read, cycle then substitution and count for 12 substitutions\n"); + fprintf(fp, "# Followed by a single row with a total over all cycles for each read, columns are read, -1 then substitution and count for 12 substitutions\n"); + for(read=0;readread_length[read];cycle++) + { + SurvTable *st = sts[read] + cycle; + if( 0 == st->total_bases ) continue; + fprintf(fp, "RCL\t%d\t%d", read, cycle); + for (j=0;jsubstL[j]); + } + fprintf(fp, "\n"); + } + /* and read summary (cycle = -1) */ + SurvTable *st = read_sts[read]; + fprintf(fp, "RCL\t%d\t%d", read, -1); + for (j=0;jsubstL[j]); + } + fprintf(fp, "\n"); + } + + /* previous base PRC */ + + fprintf(fp, "# Effect of previous base high quality. Use `grep ^PRCH | cut -f 2-` to extract this part\n"); + fprintf(fp, "# One row per read and previous base, columns read then previous base+substitution and count for 12 substitutions\n"); + for(read=0;readcntxtH[j]; + } + for (j=0,p=0;jcntxtL[j]; + } + for (j=0,p=0;jcntxtH[j]; + } + for (j=0,p=0;jcntxtL[j]; + } + for (j=0,p=0;jreportName) fclose(fp); +} + +static int updateSurvTable(opts_t *opts, SurvTable **sts, + int read, int *read_mismatch, + char *read_seq, int *read_qual, char *read_ref) { + + int read_length = opts->read_length[read]; + int b; + + /* update survival table */ + for (b = 0; b < read_length; b++) { + SurvTable *st = sts[read] + b; + float predictor = -1.0; + int ibin; + + predictor = read_qual[b]; + + ibin = predictor + 0.5; + if( ibin >= st->nbins ) ibin=(st->nbins-1); + + if( read_mismatch[b] & BASE_KNOWN_SNP ) { + // don't count these + } else { + if( read_mismatch[b] & BASE_ALIGN ) + st->num_bases[ibin]++; + if( read_mismatch[b] & BASE_MISMATCH ){ + char subst[LEN_SUBST+1]; + char cntxt[LEN_CNTXT+1]; + int chr, word; + + st->num_errors[ibin]++; + + chr=0; + subst[chr++]=read_ref[b]; + subst[chr++]=read_seq[b]; + word=str2word(subst, LEN_SUBST); + if( word >= 0 ) { + st->subst[word][ibin]++; + if( predictor >= st->predictor_hilo ) + st->substH[word]++; + else + st->substL[word]++; + } + + chr=0; + cntxt[chr++]=(b > 0 ? read_ref[b-1] : 'N'); + cntxt[chr++]=read_ref[b]; + cntxt[chr++]=read_seq[b]; + cntxt[chr++]=(b < (read_length-1) ? read_ref[b+1] : 'N'); + word=str2word(cntxt, LEN_CNTXT); + if( word >= 0 ) { + if( predictor >= st->predictor_hilo ) + st->cntxtH[word]++; + else + st->cntxtL[word]++; + } + } + } + } + + return 0; +} + +/* + * Takes the bam file as input and updates the survival table + * + * Assumption: within a single input file, all reads are the same length and + * we're using unclipped data. + * + * Returns: +'ve integer for success + * 0 for failure + */ +SurvTable **LoadData(opts_t *opts) { + SurvTable **sts = NULL; + + sts = smalloc(N_READS * sizeof(SurvTable *)); + for(int read=0;readin_bam_file, 'r', opts->input_fmt, 0, NULL); + if (NULL == bam_in) { + die("ERROR: can't open bam file %s: %s\n", opts->in_bam_file, strerror(errno)); + } + + bam1_t *bam; + + /* loop over reads in the bam file */ + while (1) { + int bam_read = -1, read_length; + + bam = parse_bam_readinfo(bam_in, NULL, NULL, NULL, NULL, &bam_read, NULL); + if (!bam) break; // exit loop at end of BAM file + + if (BAM_FUNMAP & bam->core.flag) continue; + if (BAM_FQCFAIL & bam->core.flag) continue; + if (BAM_FSECONDARY & bam->core.flag) continue; + if (BAM_FSUPPLEMENTARY & bam->core.flag) continue; + if (BAM_FPAIRED & bam->core.flag) { + if (BAM_FMUNMAP & bam->core.flag) continue; + if (0 == (BAM_FPROPER_PAIR & bam->core.flag)) continue; + } + + read_length = bam->core.l_qseq; + if (0 == opts->read_length[bam_read]) { + opts->read_length[bam_read] = read_length; + } + + if (opts->read_length[bam_read] != read_length) { + fprintf(stderr, + "Error: inconsistent read lengths " + "within bam file for read %d.\n" + "have length %ld, previously it was %d.\n", + bam_read, (long) read_length, opts->read_length[bam_read]); + exit(EXIT_FAILURE); + } + + parse_bam_alignments(bam_in, bam, bam_read_seq, bam_read_qual, bam_read_ref, + bam_read_mismatch, bam_read_buff_size, NULL); + + if (NULL == sts[bam_read]) { + sts[bam_read] = (SurvTable *)smalloc(read_length * sizeof(SurvTable)); + for(int cycle=0;cycleread_length[n] = 0; + opts->in_bam_file = NULL; + opts->reportName = NULL; + opts->input_fmt = NULL; + + int opt; + int option_index = 0; + while ((opt = getopt_long(argc, argv, optstring, lopts, &option_index)) != -1) { + const char *arg; + switch (opt) { + case 'o': opts->reportName = strdup(optarg); break; + case 'v': opts->verbose = 1; break; + case 'h': usage(stdout); free_opts(opts); return NULL; + case 0: arg = lopts[option_index].name; + if (strcmp(arg, "output-fmt") == 0) opts->output_fmt = strdup(optarg); + else if (strcmp(arg, "input-fmt") == 0) opts->input_fmt = strdup(optarg); + else if (strcmp(arg, "compression-level") == 0) opts->compression_level = *optarg; + else { + fprintf(stderr,"\nUnknown option: %s\n\n", arg); + usage(stderr); free_opts(opts); + return NULL; + } + break; + default: fprintf(stderr,"Unknown option: '%c'\n", opt); + usage(stderr); free_opts(opts); + return NULL; + + } + } + + if (optind < argc) opts->in_bam_file = strdup(argv[optind]); + + return opts; +} + +static int substitution_analysis(opts_t *opts) +{ + SurvTable **sts = NULL; + + sts = LoadData(opts); + writeReport(opts, sts); + freeSurvTable(opts, sts); + + return EXIT_SUCCESS; +} + +/* + * Called from bambi to create a substitution analysis table + * + * parse the command line arguments, then call the main process + * + * returns 0 on success, 1 if there was a problem + */ +int main_substitution_analysis(int argc, char *argv[]) +{ + int ret = 1; + opts_t *opts = substitution_analysis_parse_args(argc, argv); + if (opts) ret = substitution_analysis(opts); + if (opts) free_opts(opts); + return ret; +} + diff --git a/test/data/decode_5.sam b/test/data/decode_5.sam new file mode 100644 index 00000000..a7421e56 --- /dev/null +++ b/test/data/decode_5.sam @@ -0,0 +1,20 @@ +@HD VN:1.5 SO:unsorted +@RG ID:1 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8 LB:2_184535_653_010611 DS:Study ZF_MrSol_Exome DT:2011-06-08T00:00:00+0100 SM:MRSOL5096964,MRSOL5096965 CN:SC +@PG ID:SCS PN:RTA DS:Controlling software on instrument VN:1.12.4.0 +@PG ID:basecalling PN:RTA PP:SCS DS:Basecalling Package VN:1.12.4.0 +@PG ID:illumina2bam PN:illumina2bam PP:basecalling DS:Convert Illumina BCL to BAM or SAM file VN:0.03 CL:illumina.Illumina2bam INTENSITY_DIR=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities LANE=8 OUTPUT=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities/PB_basecalls_20110614-084055/6383_8.bam SAMPLE_ALIAS=MRSOL5096964,MRSOL5096965 LIBRARY_NAME=2_184535_653_010611 STUDY_NAME=ZF_MrSol_Exome CREATE_MD5_FILE=true GENERATE_SECONDARY_BASE_CALLS=false PF_FILTER=true READ_GROUP_ID=1 SEQUENCING_CENTER=SC PLATFORM=ILLUMINA TMP_DIR=/tmp/srpipe VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false +HS19_6383:8:1101:1128:2136 133 * 0 0 * * 0 0 NTGCGNATCANNNNN !!!!!!!!!!!!!!! RG:Z:1 +HS19_6383:8:1101:1085:2136 69 * 0 0 * * 0 0 ACATTCACAANNNNN @BCD!!!!!!!!!!! RG:Z:1 QT:Z:!!!!!!!! BC:Z:NNNNNNNN +HS19_6383:8:1101:1085:2136 133 * 0 0 * * 0 0 NCATGNAGNNNNNNN !!!!!!!!!!!!!!! RG:Z:1 +HS19_6383:8:1101:1245:2140 69 * 0 0 * * 0 0 TTCTGAAAGCTGTGT @C@FCCHHEAHHAEA RG:Z:1 +HS19_6383:8:1101:1245:2140 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATG-TATGT +HS19_6383:8:1101:1216:2154 69 * 0 0 * * 0 0 TTTTGACCCTTGTTT @@@AH?>EEECFFCC RG:Z:1 QT:Z:B@CFF?DF BC:Z:NATG-TATNT +HS19_6383:8:1101:1216:2154 133 * 0 0 * * 0 0 CGTATTCGGACNNNG @@CF++(!(!(!!!( RG:Z:1 +HS19_6383:8:1101:1534:2155 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:NNNT-TATNT +HS19_6383:8:1101:1534:2156 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:TATG-TANNN +HS19_6383:8:1101:1534:2160 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:GCGT-TGCAT +HS19_6383:8:1101:1534:2162 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:CATG-TGCAT +HS19_6383:8:1101:1534:2164 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:ACGT-AAAAA +HS19_6383:8:1101:1245:2165 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATGAA-TATGTAA +HS19_6383:8:1101:1245:2166 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATGAA-TCACT +HS19_6383:8:1101:1245:2167 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATGAT-TCACT diff --git a/test/data/decode_5.tag b/test/data/decode_5.tag new file mode 100644 index 00000000..5f327633 --- /dev/null +++ b/test/data/decode_5.tag @@ -0,0 +1,5 @@ +barcode_sequence barcode_name +-TGCAT 1 +-TATGT 2 +-ACACT 3 +-TCACT 4 diff --git a/test/data/decode_6.sam b/test/data/decode_6.sam new file mode 100644 index 00000000..a7421e56 --- /dev/null +++ b/test/data/decode_6.sam @@ -0,0 +1,20 @@ +@HD VN:1.5 SO:unsorted +@RG ID:1 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8 LB:2_184535_653_010611 DS:Study ZF_MrSol_Exome DT:2011-06-08T00:00:00+0100 SM:MRSOL5096964,MRSOL5096965 CN:SC +@PG ID:SCS PN:RTA DS:Controlling software on instrument VN:1.12.4.0 +@PG ID:basecalling PN:RTA PP:SCS DS:Basecalling Package VN:1.12.4.0 +@PG ID:illumina2bam PN:illumina2bam PP:basecalling DS:Convert Illumina BCL to BAM or SAM file VN:0.03 CL:illumina.Illumina2bam INTENSITY_DIR=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities LANE=8 OUTPUT=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities/PB_basecalls_20110614-084055/6383_8.bam SAMPLE_ALIAS=MRSOL5096964,MRSOL5096965 LIBRARY_NAME=2_184535_653_010611 STUDY_NAME=ZF_MrSol_Exome CREATE_MD5_FILE=true GENERATE_SECONDARY_BASE_CALLS=false PF_FILTER=true READ_GROUP_ID=1 SEQUENCING_CENTER=SC PLATFORM=ILLUMINA TMP_DIR=/tmp/srpipe VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false +HS19_6383:8:1101:1128:2136 133 * 0 0 * * 0 0 NTGCGNATCANNNNN !!!!!!!!!!!!!!! RG:Z:1 +HS19_6383:8:1101:1085:2136 69 * 0 0 * * 0 0 ACATTCACAANNNNN @BCD!!!!!!!!!!! RG:Z:1 QT:Z:!!!!!!!! BC:Z:NNNNNNNN +HS19_6383:8:1101:1085:2136 133 * 0 0 * * 0 0 NCATGNAGNNNNNNN !!!!!!!!!!!!!!! RG:Z:1 +HS19_6383:8:1101:1245:2140 69 * 0 0 * * 0 0 TTCTGAAAGCTGTGT @C@FCCHHEAHHAEA RG:Z:1 +HS19_6383:8:1101:1245:2140 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATG-TATGT +HS19_6383:8:1101:1216:2154 69 * 0 0 * * 0 0 TTTTGACCCTTGTTT @@@AH?>EEECFFCC RG:Z:1 QT:Z:B@CFF?DF BC:Z:NATG-TATNT +HS19_6383:8:1101:1216:2154 133 * 0 0 * * 0 0 CGTATTCGGACNNNG @@CF++(!(!(!!!( RG:Z:1 +HS19_6383:8:1101:1534:2155 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:NNNT-TATNT +HS19_6383:8:1101:1534:2156 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:TATG-TANNN +HS19_6383:8:1101:1534:2160 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:GCGT-TGCAT +HS19_6383:8:1101:1534:2162 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:CATG-TGCAT +HS19_6383:8:1101:1534:2164 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1 QT:Z:@C@FFFFF BC:Z:ACGT-AAAAA +HS19_6383:8:1101:1245:2165 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATGAA-TATGTAA +HS19_6383:8:1101:1245:2166 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATGAA-TCACT +HS19_6383:8:1101:1245:2167 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1 QT:Z:@@@DFDFF BC:Z:TATGAT-TCACT diff --git a/test/data/decode_6.tag b/test/data/decode_6.tag new file mode 100644 index 00000000..4312e3a4 --- /dev/null +++ b/test/data/decode_6.tag @@ -0,0 +1,4 @@ +barcode_sequence barcode_name +ACGT- 1 +TATG- 2 +CATG- 3 diff --git a/test/data/out/decode_5.metrics b/test/data/out/decode_5.metrics new file mode 100644 index 00000000..668d8001 --- /dev/null +++ b/test/data/out/decode_5.metrics @@ -0,0 +1,12 @@ +## +# BARCODE_TAG_NAME=BC MAX_MISMATCHES=1 MIN_MISMATCH_DELTA=1 MAX_NO_CALLS=2 +## +# ID:bambi VN:12.34 (htslib 1.11-94-g7152cb4) CL:bambi decode -i ./test/data/decode_5.sam -o /tmp/bambi.fMV6yI/decode_5.sam --output-fmt sam --input-fmt sam --barcode-file ./test/data/decode_5.tag --metrics-file /tmp/bambi.fMV6yI/decode_5.metrics --ignore-pf + +## +BARCODE BARCODE_NAME LIBRARY_NAME SAMPLE_NAME DESCRIPTION READS PERFECT_MATCHES ONE_MISMATCH_MATCHES PCT_MATCHES RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT +-TGCAT 1 2 2 0 0.182 0.500 +-TATGT 2 4 4 0 0.364 1.000 +-ACACT 3 0 0 0 0.000 0.000 +-TCACT 4 2 2 0 0.182 0.500 +-NNNNN 3 0 0 0.273 0.750 diff --git a/test/data/out/decode_5.sam b/test/data/out/decode_5.sam new file mode 100644 index 00000000..27a3f0ed --- /dev/null +++ b/test/data/out/decode_5.sam @@ -0,0 +1,25 @@ +@HD VN:1.5 SO:unsorted +@PG ID:SCS PN:RTA DS:Controlling software on instrument VN:1.12.4.0 +@PG ID:basecalling PN:RTA PP:SCS DS:Basecalling Package VN:1.12.4.0 +@PG ID:illumina2bam PN:illumina2bam PP:basecalling DS:Convert Illumina BCL to BAM or SAM file VN:0.03 CL:illumina.Illumina2bam INTENSITY_DIR=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities LANE=8 OUTPUT=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities/PB_basecalls_20110614-084055/6383_8.bam SAMPLE_ALIAS=MRSOL5096964,MRSOL5096965 LIBRARY_NAME=2_184535_653_010611 STUDY_NAME=ZF_MrSol_Exome CREATE_MD5_FILE=true GENERATE_SECONDARY_BASE_CALLS=false PF_FILTER=true READ_GROUP_ID=1 SEQUENCING_CENTER=SC PLATFORM=ILLUMINA TMP_DIR=/tmp/srpipe VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false +@PG ID:bambi PN:bambi PP:illumina2bam VN:12.34 CL:bambi decode -i ./test/data/decode_5.sam -o /tmp/bambi.fMV6yI/decode_5.sam --output-fmt sam --input-fmt sam --barcode-file ./test/data/decode_5.tag --metrics-file /tmp/bambi.fMV6yI/decode_5.metrics --ignore-pf +@RG ID:1#0 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#0 LB:2_184535_653_010611 DS:Study ZF_MrSol_Exome DT:2011-06-08T00:00:00+0100 SM:MRSOL5096964,MRSOL5096965 CN:SC +@RG ID:1#1 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#1 LB: DS: DT:2011-06-08T00:00:00+0100 SM: CN:SC +@RG ID:1#2 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#2 LB: DS: DT:2011-06-08T00:00:00+0100 SM: CN:SC +@RG ID:1#3 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#3 LB: DS: DT:2011-06-08T00:00:00+0100 SM: CN:SC +@RG ID:1#4 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#4 LB: DS: DT:2011-06-08T00:00:00+0100 SM: CN:SC +HS19_6383:8:1101:1128:2136 133 * 0 0 * * 0 0 NTGCGNATCANNNNN !!!!!!!!!!!!!!! RG:Z:1 +HS19_6383:8:1101:1085:2136 69 * 0 0 * * 0 0 ACATTCACAANNNNN @BCD!!!!!!!!!!! RG:Z:1#0 QT:Z:!!!!!!!! BC:Z:NNNNNNNN +HS19_6383:8:1101:1085:2136 133 * 0 0 * * 0 0 NCATGNAGNNNNNNN !!!!!!!!!!!!!!! RG:Z:1#0 +HS19_6383:8:1101:1245:2140 69 * 0 0 * * 0 0 TTCTGAAAGCTGTGT @C@FCCHHEAHHAEA RG:Z:1#2 +HS19_6383:8:1101:1245:2140 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#2 QT:Z:@@@DFDFF BC:Z:TATG-TATGT +HS19_6383:8:1101:1216:2154 69 * 0 0 * * 0 0 TTTTGACCCTTGTTT @@@AH?>EEECFFCC RG:Z:1#2 QT:Z:B@CFF?DF BC:Z:NATG-TATNT +HS19_6383:8:1101:1216:2154 133 * 0 0 * * 0 0 CGTATTCGGACNNNG @@CF++(!(!(!!!( RG:Z:1#2 +HS19_6383:8:1101:1534:2155 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#2 QT:Z:@C@FFFFF BC:Z:NNNT-TATNT +HS19_6383:8:1101:1534:2156 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#0 QT:Z:@C@FFFFF BC:Z:TATG-TANNN +HS19_6383:8:1101:1534:2160 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#1 QT:Z:@C@FFFFF BC:Z:GCGT-TGCAT +HS19_6383:8:1101:1534:2162 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#1 QT:Z:@C@FFFFF BC:Z:CATG-TGCAT +HS19_6383:8:1101:1534:2164 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#0 QT:Z:@C@FFFFF BC:Z:ACGT-AAAAA +HS19_6383:8:1101:1245:2165 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#2 QT:Z:@@@DFDFF BC:Z:TATGAA-TATGTAA +HS19_6383:8:1101:1245:2166 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#4 QT:Z:@@@DFDFF BC:Z:TATGAA-TCACT +HS19_6383:8:1101:1245:2167 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#4 QT:Z:@@@DFDFF BC:Z:TATGAT-TCACT diff --git a/test/data/out/decode_6.metrics b/test/data/out/decode_6.metrics new file mode 100644 index 00000000..207d0953 --- /dev/null +++ b/test/data/out/decode_6.metrics @@ -0,0 +1,11 @@ +## +# BARCODE_TAG_NAME=BC MAX_MISMATCHES=1 MIN_MISMATCH_DELTA=1 MAX_NO_CALLS=2 +## +# ID:bambi VN:12.34 (htslib 1.11-94-g7152cb4) CL:bambi decode -i ./test/data/decode_6.sam -o /tmp/bambi.fMV6yI/decode_6.sam --output-fmt sam --input-fmt sam --barcode-file ./test/data/decode_6.tag --metrics-file /tmp/bambi.fMV6yI/decode_6.metrics --ignore-pf + +## +BARCODE BARCODE_NAME LIBRARY_NAME SAMPLE_NAME DESCRIPTION READS PERFECT_MATCHES ONE_MISMATCH_MATCHES PCT_MATCHES RATIO_THIS_BARCODE_TO_BEST_BARCODE_PCT +ACGT 1 2 1 1 0.182 0.400 +TATG 2 5 5 0 0.455 1.000 +CATG 3 1 1 0 0.091 0.200 +NNNN 3 0 1 0.273 0.600 diff --git a/test/data/out/decode_6.sam b/test/data/out/decode_6.sam new file mode 100644 index 00000000..573870f9 --- /dev/null +++ b/test/data/out/decode_6.sam @@ -0,0 +1,24 @@ +@HD VN:1.5 SO:unsorted +@PG ID:SCS PN:RTA DS:Controlling software on instrument VN:1.12.4.0 +@PG ID:basecalling PN:RTA PP:SCS DS:Basecalling Package VN:1.12.4.0 +@PG ID:illumina2bam PN:illumina2bam PP:basecalling DS:Convert Illumina BCL to BAM or SAM file VN:0.03 CL:illumina.Illumina2bam INTENSITY_DIR=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities LANE=8 OUTPUT=/nfs/sf36/ILorHSany_sf36/analysis/110608_HS19_06383_B_C024LABXX/Data/Intensities/PB_basecalls_20110614-084055/6383_8.bam SAMPLE_ALIAS=MRSOL5096964,MRSOL5096965 LIBRARY_NAME=2_184535_653_010611 STUDY_NAME=ZF_MrSol_Exome CREATE_MD5_FILE=true GENERATE_SECONDARY_BASE_CALLS=false PF_FILTER=true READ_GROUP_ID=1 SEQUENCING_CENTER=SC PLATFORM=ILLUMINA TMP_DIR=/tmp/srpipe VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false +@PG ID:bambi PN:bambi PP:illumina2bam VN:12.34 CL:bambi decode -i ./test/data/decode_6.sam -o /tmp/bambi.fMV6yI/decode_6.sam --output-fmt sam --input-fmt sam --barcode-file ./test/data/decode_6.tag --metrics-file /tmp/bambi.fMV6yI/decode_6.metrics --ignore-pf +@RG ID:1#0 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#0 LB:2_184535_653_010611 DS:Study ZF_MrSol_Exome DT:2011-06-08T00:00:00+0100 SM:MRSOL5096964,MRSOL5096965 CN:SC +@RG ID:1#1 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#1 LB: DS: DT:2011-06-08T00:00:00+0100 SM: CN:SC +@RG ID:1#2 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#2 LB: DS: DT:2011-06-08T00:00:00+0100 SM: CN:SC +@RG ID:1#3 PL:ILLUMINA PU:110608_HS19_06383_B_C024LABXX_8#3 LB: DS: DT:2011-06-08T00:00:00+0100 SM: CN:SC +HS19_6383:8:1101:1128:2136 133 * 0 0 * * 0 0 NTGCGNATCANNNNN !!!!!!!!!!!!!!! RG:Z:1 +HS19_6383:8:1101:1085:2136 69 * 0 0 * * 0 0 ACATTCACAANNNNN @BCD!!!!!!!!!!! RG:Z:1#0 QT:Z:!!!!!!!! BC:Z:NNNNNNNN +HS19_6383:8:1101:1085:2136 133 * 0 0 * * 0 0 NCATGNAGNNNNNNN !!!!!!!!!!!!!!! RG:Z:1#0 +HS19_6383:8:1101:1245:2140 69 * 0 0 * * 0 0 TTCTGAAAGCTGTGT @C@FCCHHEAHHAEA RG:Z:1#2 +HS19_6383:8:1101:1245:2140 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#2 QT:Z:@@@DFDFF BC:Z:TATG-TATGT +HS19_6383:8:1101:1216:2154 69 * 0 0 * * 0 0 TTTTGACCCTTGTTT @@@AH?>EEECFFCC RG:Z:1#0 QT:Z:B@CFF?DF BC:Z:NATG-TATNT +HS19_6383:8:1101:1216:2154 133 * 0 0 * * 0 0 CGTATTCGGACNNNG @@CF++(!(!(!!!( RG:Z:1#0 +HS19_6383:8:1101:1534:2155 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#0 QT:Z:@C@FFFFF BC:Z:NNNT-TATNT +HS19_6383:8:1101:1534:2156 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#2 QT:Z:@C@FFFFF BC:Z:TATG-TANNN +HS19_6383:8:1101:1534:2160 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#1 QT:Z:@C@FFFFF BC:Z:GCGT-TGCAT +HS19_6383:8:1101:1534:2162 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#3 QT:Z:@C@FFFFF BC:Z:CATG-TGCAT +HS19_6383:8:1101:1534:2164 69 * 0 0 * * 0 0 TGTATTGATTTGTTG CCCFHBBCA8@3((( RG:Z:1#1 QT:Z:@C@FFFFF BC:Z:ACGT-AAAAA +HS19_6383:8:1101:1245:2165 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#2 QT:Z:@@@DFDFF BC:Z:TATGAA-TATGTAA +HS19_6383:8:1101:1245:2166 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#2 QT:Z:@@@DFDFF BC:Z:TATGAA-TCACT +HS19_6383:8:1101:1245:2167 133 * 0 0 * * 0 0 NACTGTATGTNNNNN !!!4!!!!!!!!!!! RG:Z:1#2 QT:Z:@@@DFDFF BC:Z:TATGAT-TCACT diff --git a/test/data/out/sa.txt b/test/data/out/sa.txt new file mode 100644 index 00000000..c3118e3a --- /dev/null +++ b/test/data/out/sa.txt @@ -0,0 +1,606 @@ +# Substitution error table. Use `grep ^SET | cut -f 2-` to extract this part +# One row per read and quality value, columns read, quality value followed by substitution and count for 12 substitutions +SET 1 0.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 1.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 2.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 3.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 4.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 5.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 6.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 7.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 8.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 9.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 10.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 11.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 1 TA 1 TC 0 TG 0 +SET 1 12.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 13.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 14.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 15.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 16.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 17.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 18.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 19.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 20.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 21.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 22.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 23.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 24.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 25.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 26.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 27.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 28.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 29.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 30.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 31.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 32.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 33.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 34.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 35.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 36.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 37.00 AC 0 AG 1 AT 0 CA 0 CG 1 CT 1 GA 0 GC 1 GT 0 TA 0 TC 0 TG 0 +SET 1 38.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 39.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 40.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 41.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 42.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 43.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 44.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 45.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 46.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 47.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 48.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 49.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 1 50.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 0.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 1.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 2.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 3.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 4.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 5.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 6.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 7.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 8.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 9.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 10.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 11.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 12.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 13.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 14.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 15.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 16.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 17.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 18.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 19.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 20.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 21.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 22.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 23.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 24.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 25.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 26.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 27.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 28.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 29.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 30.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 31.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 32.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 33.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 34.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 35.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 36.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 37.00 AC 0 AG 0 AT 0 CA 1 CG 1 CT 0 GA 1 GC 1 GT 0 TA 0 TC 1 TG 0 +SET 2 38.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 39.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 40.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 41.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 42.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 43.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 44.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 45.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 46.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 47.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 48.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 49.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +SET 2 50.00 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +# Mismatch substitutions high quality. Use `grep ^RCH | cut -f 2-` to extract this part +# One row per read and cycle, columns read, cycle then substitution and count for 12 substitutions +# Followed by a single row with a total over all cycles for each read, columns are read, -1 then substitution and count for 12 substitutions +RCH 1 0 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 1 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 2 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 3 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 4 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 5 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 6 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 7 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 8 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 9 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 10 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 11 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 12 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 13 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 14 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 15 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 16 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 17 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 18 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 19 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 20 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 21 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 22 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 23 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 24 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 25 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 26 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 27 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 28 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 29 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 30 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 31 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 32 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 33 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 34 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 35 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 36 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 37 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 38 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 39 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 40 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 41 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 42 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 43 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 44 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 45 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 46 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 47 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 48 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 49 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 50 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 51 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 52 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 53 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 54 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 55 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 56 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 57 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 58 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 59 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 1 GT 0 TA 0 TC 0 TG 0 +RCH 1 60 AC 0 AG 0 AT 0 CA 0 CG 0 CT 1 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 61 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 62 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 63 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 64 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 65 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 66 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 67 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 68 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 69 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 70 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 71 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 72 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 73 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 74 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 75 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 76 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 77 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 78 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 79 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 80 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 81 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 82 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 83 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 84 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 85 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 86 AC 0 AG 1 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 87 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 88 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 89 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 90 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 91 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 92 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 93 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 94 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 95 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 96 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 97 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 98 AC 0 AG 0 AT 0 CA 0 CG 1 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 99 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 100 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 1 -1 AC 0 AG 1 AT 0 CA 0 CG 1 CT 1 GA 0 GC 1 GT 0 TA 0 TC 0 TG 0 +RCH 2 0 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 1 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 2 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 3 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 4 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 5 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 6 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 7 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 8 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 9 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 10 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 11 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 12 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 13 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 14 AC 0 AG 0 AT 0 CA 1 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 15 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 16 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 17 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 18 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 19 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 20 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 21 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 22 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 23 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 24 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 25 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 26 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 27 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 1 GT 0 TA 0 TC 0 TG 0 +RCH 2 28 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 29 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 30 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 31 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 1 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 32 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 33 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 34 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 35 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 36 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 37 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 38 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 39 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 1 TG 0 +RCH 2 40 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 41 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 42 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 43 AC 0 AG 0 AT 0 CA 0 CG 1 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 44 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 45 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 46 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 47 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 48 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 49 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 50 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 51 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 52 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 53 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 54 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 55 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 56 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 57 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 58 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 59 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 60 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 61 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 62 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 63 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 64 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 65 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 66 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 67 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 68 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 69 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 70 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 71 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 72 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 73 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 74 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 75 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 76 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 77 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 78 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 79 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 80 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 81 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 82 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 83 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 84 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 85 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 86 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 87 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 88 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 89 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 90 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 91 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 92 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 93 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 94 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 95 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 96 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 97 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 98 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 99 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 100 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCH 2 -1 AC 0 AG 0 AT 0 CA 1 CG 1 CT 0 GA 1 GC 1 GT 0 TA 0 TC 1 TG 0 +# Mismatch substitutions low quality. Use `grep ^RCL | cut -f 2-` to extract this part +# One row per read and cycle, columns read, cycle then substitution and count for 12 substitutions +# Followed by a single row with a total over all cycles for each read, columns are read, -1 then substitution and count for 12 substitutions +RCL 1 0 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 1 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 2 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 3 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 4 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 5 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 6 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 7 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 8 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 9 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 10 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 11 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 12 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 13 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 14 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 15 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 16 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 17 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 18 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 19 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 20 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 21 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 22 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 23 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 24 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 25 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 26 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 27 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 28 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 29 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 30 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 31 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 32 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 33 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 34 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 35 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 36 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 37 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 38 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 39 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 40 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 41 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 42 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 43 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 44 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 45 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 46 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 47 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 48 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 49 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 50 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 51 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 52 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 53 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 54 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 55 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 56 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 57 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 58 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 59 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 60 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 61 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 62 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 63 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 64 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 1 TC 0 TG 0 +RCL 1 65 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 66 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 67 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 68 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 69 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 70 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 71 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 72 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 73 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 74 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 75 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 1 TA 0 TC 0 TG 0 +RCL 1 76 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 77 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 78 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 79 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 80 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 81 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 82 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 83 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 84 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 85 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 86 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 87 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 88 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 89 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 90 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 91 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 92 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 93 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 94 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 95 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 96 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 97 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 98 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 99 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 100 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 1 -1 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 1 TA 1 TC 0 TG 0 +RCL 2 0 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 1 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 2 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 3 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 4 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 5 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 6 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 7 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 8 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 9 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 10 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 11 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 12 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 13 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 14 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 15 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 16 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 17 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 18 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 19 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 20 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 21 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 22 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 23 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 24 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 25 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 26 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 27 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 28 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 29 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 30 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 31 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 32 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 33 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 34 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 35 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 36 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 37 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 38 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 39 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 40 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 41 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 42 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 43 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 44 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 45 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 46 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 47 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 48 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 49 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 50 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 51 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 52 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 53 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 54 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 55 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 56 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 57 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 58 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 59 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 60 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 61 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 62 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 63 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 64 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 65 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 66 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 67 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 68 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 69 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 70 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 71 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 72 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 73 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 74 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 75 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 76 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 77 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 78 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 79 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 80 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 81 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 82 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 83 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 84 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 85 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 86 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 87 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 88 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 89 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 90 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 91 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 92 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 93 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 94 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 95 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 96 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 97 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 98 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 99 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 100 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +RCL 2 -1 AC 0 AG 0 AT 0 CA 0 CG 0 CT 0 GA 0 GC 0 GT 0 TA 0 TC 0 TG 0 +# Effect of previous base high quality. Use `grep ^PRCH | cut -f 2-` to extract this part +# One row per read and previous base, columns read then previous base+substitution and count for 12 substitutions +PRCH 1 AAC 0 AAG 1 AAT 0 ACA 0 ACG 1 ACT 1 AGA 0 AGC 0 AGT 0 ATA 0 ATC 0 ATG 0 +PRCH 1 CAC 0 CAG 0 CAT 0 CCA 0 CCG 0 CCT 0 CGA 0 CGC 1 CGT 0 CTA 0 CTC 0 CTG 0 +PRCH 1 GAC 0 GAG 0 GAT 0 GCA 0 GCG 0 GCT 0 GGA 0 GGC 0 GGT 0 GTA 0 GTC 0 GTG 0 +PRCH 1 TAC 0 TAG 0 TAT 0 TCA 0 TCG 0 TCT 0 TGA 0 TGC 0 TGT 0 TTA 0 TTC 0 TTG 0 +PRCH 2 AAC 0 AAG 0 AAT 0 ACA 0 ACG 0 ACT 0 AGA 0 AGC 1 AGT 0 ATA 0 ATC 0 ATG 0 +PRCH 2 CAC 0 CAG 0 CAT 0 CCA 0 CCG 0 CCT 0 CGA 0 CGC 0 CGT 0 CTA 0 CTC 0 CTG 0 +PRCH 2 GAC 0 GAG 0 GAT 0 GCA 0 GCG 1 GCT 0 GGA 1 GGC 0 GGT 0 GTA 0 GTC 0 GTG 0 +PRCH 2 TAC 0 TAG 0 TAT 0 TCA 1 TCG 0 TCT 0 TGA 0 TGC 0 TGT 0 TTA 0 TTC 1 TTG 0 +# Effect of previous base low quality. Use `grep ^PRCL | cut -f 2-` to extract this part +# One row per read and previous base, columns read then previous base+substitution and count for 12 substitutions +PRCL 1 AAC 0 AAG 0 AAT 0 ACA 0 ACG 0 ACT 0 AGA 0 AGC 0 AGT 0 ATA 0 ATC 0 ATG 0 +PRCL 1 CAC 0 CAG 0 CAT 0 CCA 0 CCG 0 CCT 0 CGA 0 CGC 0 CGT 0 CTA 1 CTC 0 CTG 0 +PRCL 1 GAC 0 GAG 0 GAT 0 GCA 0 GCG 0 GCT 0 GGA 0 GGC 0 GGT 1 GTA 0 GTC 0 GTG 0 +PRCL 1 TAC 0 TAG 0 TAT 0 TCA 0 TCG 0 TCT 0 TGA 0 TGC 0 TGT 0 TTA 0 TTC 0 TTG 0 +PRCL 2 AAC 0 AAG 0 AAT 0 ACA 0 ACG 0 ACT 0 AGA 0 AGC 0 AGT 0 ATA 0 ATC 0 ATG 0 +PRCL 2 CAC 0 CAG 0 CAT 0 CCA 0 CCG 0 CCT 0 CGA 0 CGC 0 CGT 0 CTA 0 CTC 0 CTG 0 +PRCL 2 GAC 0 GAG 0 GAT 0 GCA 0 GCG 0 GCT 0 GGA 0 GGC 0 GGT 0 GTA 0 GTC 0 GTG 0 +PRCL 2 TAC 0 TAG 0 TAT 0 TCA 0 TCG 0 TCT 0 TGA 0 TGC 0 TGT 0 TTA 0 TTC 0 TTG 0 +# Effect of previous base and next base high quality. Use `grep ^PRCNH | cut -f 2-` to extract this part +# Sixteen rows per read, columns read then 12 of the possible previous base+substitution+next base combinations and the corresponding count +PRCNH 1 AACA 0 AACC 0 AACG 0 AACT 0 AAGA 1 AAGC 0 AAGG 0 AAGT 0 AATA 0 AATC 0 AATG 0 AATT 0 +PRCNH 1 ACAA 0 ACAC 0 ACAG 0 ACAT 0 ACGA 0 ACGC 0 ACGG 0 ACGT 1 ACTA 0 ACTC 1 ACTG 0 ACTT 0 +PRCNH 1 AGAA 0 AGAC 0 AGAG 0 AGAT 0 AGCA 0 AGCC 0 AGCG 0 AGCT 0 AGTA 0 AGTC 0 AGTG 0 AGTT 0 +PRCNH 1 ATAA 0 ATAC 0 ATAG 0 ATAT 0 ATCA 0 ATCC 0 ATCG 0 ATCT 0 ATGA 0 ATGC 0 ATGG 0 ATGT 0 +PRCNH 1 CACA 0 CACC 0 CACG 0 CACT 0 CAGA 0 CAGC 0 CAGG 0 CAGT 0 CATA 0 CATC 0 CATG 0 CATT 0 +PRCNH 1 CCAA 0 CCAC 0 CCAG 0 CCAT 0 CCGA 0 CCGC 0 CCGG 0 CCGT 0 CCTA 0 CCTC 0 CCTG 0 CCTT 0 +PRCNH 1 CGAA 0 CGAC 0 CGAG 0 CGAT 0 CGCA 0 CGCC 1 CGCG 0 CGCT 0 CGTA 0 CGTC 0 CGTG 0 CGTT 0 +PRCNH 1 CTAA 0 CTAC 0 CTAG 0 CTAT 0 CTCA 0 CTCC 0 CTCG 0 CTCT 0 CTGA 0 CTGC 0 CTGG 0 CTGT 0 +PRCNH 1 GACA 0 GACC 0 GACG 0 GACT 0 GAGA 0 GAGC 0 GAGG 0 GAGT 0 GATA 0 GATC 0 GATG 0 GATT 0 +PRCNH 1 GCAA 0 GCAC 0 GCAG 0 GCAT 0 GCGA 0 GCGC 0 GCGG 0 GCGT 0 GCTA 0 GCTC 0 GCTG 0 GCTT 0 +PRCNH 1 GGAA 0 GGAC 0 GGAG 0 GGAT 0 GGCA 0 GGCC 0 GGCG 0 GGCT 0 GGTA 0 GGTC 0 GGTG 0 GGTT 0 +PRCNH 1 GTAA 0 GTAC 0 GTAG 0 GTAT 0 GTCA 0 GTCC 0 GTCG 0 GTCT 0 GTGA 0 GTGC 0 GTGG 0 GTGT 0 +PRCNH 1 TACA 0 TACC 0 TACG 0 TACT 0 TAGA 0 TAGC 0 TAGG 0 TAGT 0 TATA 0 TATC 0 TATG 0 TATT 0 +PRCNH 1 TCAA 0 TCAC 0 TCAG 0 TCAT 0 TCGA 0 TCGC 0 TCGG 0 TCGT 0 TCTA 0 TCTC 0 TCTG 0 TCTT 0 +PRCNH 1 TGAA 0 TGAC 0 TGAG 0 TGAT 0 TGCA 0 TGCC 0 TGCG 0 TGCT 0 TGTA 0 TGTC 0 TGTG 0 TGTT 0 +PRCNH 1 TTAA 0 TTAC 0 TTAG 0 TTAT 0 TTCA 0 TTCC 0 TTCG 0 TTCT 0 TTGA 0 TTGC 0 TTGG 0 TTGT 0 +PRCNH 2 AACA 0 AACC 0 AACG 0 AACT 0 AAGA 0 AAGC 0 AAGG 0 AAGT 0 AATA 0 AATC 0 AATG 0 AATT 0 +PRCNH 2 ACAA 0 ACAC 0 ACAG 0 ACAT 0 ACGA 0 ACGC 0 ACGG 0 ACGT 0 ACTA 0 ACTC 0 ACTG 0 ACTT 0 +PRCNH 2 AGAA 0 AGAC 0 AGAG 0 AGAT 0 AGCA 0 AGCC 0 AGCG 0 AGCT 1 AGTA 0 AGTC 0 AGTG 0 AGTT 0 +PRCNH 2 ATAA 0 ATAC 0 ATAG 0 ATAT 0 ATCA 0 ATCC 0 ATCG 0 ATCT 0 ATGA 0 ATGC 0 ATGG 0 ATGT 0 +PRCNH 2 CACA 0 CACC 0 CACG 0 CACT 0 CAGA 0 CAGC 0 CAGG 0 CAGT 0 CATA 0 CATC 0 CATG 0 CATT 0 +PRCNH 2 CCAA 0 CCAC 0 CCAG 0 CCAT 0 CCGA 0 CCGC 0 CCGG 0 CCGT 0 CCTA 0 CCTC 0 CCTG 0 CCTT 0 +PRCNH 2 CGAA 0 CGAC 0 CGAG 0 CGAT 0 CGCA 0 CGCC 0 CGCG 0 CGCT 0 CGTA 0 CGTC 0 CGTG 0 CGTT 0 +PRCNH 2 CTAA 0 CTAC 0 CTAG 0 CTAT 0 CTCA 0 CTCC 0 CTCG 0 CTCT 0 CTGA 0 CTGC 0 CTGG 0 CTGT 0 +PRCNH 2 GACA 0 GACC 0 GACG 0 GACT 0 GAGA 0 GAGC 0 GAGG 0 GAGT 0 GATA 0 GATC 0 GATG 0 GATT 0 +PRCNH 2 GCAA 0 GCAC 0 GCAG 0 GCAT 0 GCGA 0 GCGC 0 GCGG 1 GCGT 0 GCTA 0 GCTC 0 GCTG 0 GCTT 0 +PRCNH 2 GGAA 0 GGAC 0 GGAG 0 GGAT 1 GGCA 0 GGCC 0 GGCG 0 GGCT 0 GGTA 0 GGTC 0 GGTG 0 GGTT 0 +PRCNH 2 GTAA 0 GTAC 0 GTAG 0 GTAT 0 GTCA 0 GTCC 0 GTCG 0 GTCT 0 GTGA 0 GTGC 0 GTGG 0 GTGT 0 +PRCNH 2 TACA 0 TACC 0 TACG 0 TACT 0 TAGA 0 TAGC 0 TAGG 0 TAGT 0 TATA 0 TATC 0 TATG 0 TATT 0 +PRCNH 2 TCAA 0 TCAC 1 TCAG 0 TCAT 0 TCGA 0 TCGC 0 TCGG 0 TCGT 0 TCTA 0 TCTC 0 TCTG 0 TCTT 0 +PRCNH 2 TGAA 0 TGAC 0 TGAG 0 TGAT 0 TGCA 0 TGCC 0 TGCG 0 TGCT 0 TGTA 0 TGTC 0 TGTG 0 TGTT 0 +PRCNH 2 TTAA 0 TTAC 0 TTAG 0 TTAT 0 TTCA 0 TTCC 0 TTCG 0 TTCT 1 TTGA 0 TTGC 0 TTGG 0 TTGT 0 +# Effect of previous base and next base low quality. Use `grep ^PRCNL | cut -f 2-` to extract this part +# Sixteen rows per read, columns read then 12 of the possible previous base+substitution+next base combinations and the corresponding count +PRCNL 1 AACA 0 AACC 0 AACG 0 AACT 0 AAGA 0 AAGC 0 AAGG 0 AAGT 0 AATA 0 AATC 0 AATG 0 AATT 0 +PRCNL 1 ACAA 0 ACAC 0 ACAG 0 ACAT 0 ACGA 0 ACGC 0 ACGG 0 ACGT 0 ACTA 0 ACTC 0 ACTG 0 ACTT 0 +PRCNL 1 AGAA 0 AGAC 0 AGAG 0 AGAT 0 AGCA 0 AGCC 0 AGCG 0 AGCT 0 AGTA 0 AGTC 0 AGTG 0 AGTT 0 +PRCNL 1 ATAA 0 ATAC 0 ATAG 0 ATAT 0 ATCA 0 ATCC 0 ATCG 0 ATCT 0 ATGA 0 ATGC 0 ATGG 0 ATGT 0 +PRCNL 1 CACA 0 CACC 0 CACG 0 CACT 0 CAGA 0 CAGC 0 CAGG 0 CAGT 0 CATA 0 CATC 0 CATG 0 CATT 0 +PRCNL 1 CCAA 0 CCAC 0 CCAG 0 CCAT 0 CCGA 0 CCGC 0 CCGG 0 CCGT 0 CCTA 0 CCTC 0 CCTG 0 CCTT 0 +PRCNL 1 CGAA 0 CGAC 0 CGAG 0 CGAT 0 CGCA 0 CGCC 0 CGCG 0 CGCT 0 CGTA 0 CGTC 0 CGTG 0 CGTT 0 +PRCNL 1 CTAA 1 CTAC 0 CTAG 0 CTAT 0 CTCA 0 CTCC 0 CTCG 0 CTCT 0 CTGA 0 CTGC 0 CTGG 0 CTGT 0 +PRCNL 1 GACA 0 GACC 0 GACG 0 GACT 0 GAGA 0 GAGC 0 GAGG 0 GAGT 0 GATA 0 GATC 0 GATG 0 GATT 0 +PRCNL 1 GCAA 0 GCAC 0 GCAG 0 GCAT 0 GCGA 0 GCGC 0 GCGG 0 GCGT 0 GCTA 0 GCTC 0 GCTG 0 GCTT 0 +PRCNL 1 GGAA 0 GGAC 0 GGAG 0 GGAT 0 GGCA 0 GGCC 0 GGCG 0 GGCT 0 GGTA 1 GGTC 0 GGTG 0 GGTT 0 +PRCNL 1 GTAA 0 GTAC 0 GTAG 0 GTAT 0 GTCA 0 GTCC 0 GTCG 0 GTCT 0 GTGA 0 GTGC 0 GTGG 0 GTGT 0 +PRCNL 1 TACA 0 TACC 0 TACG 0 TACT 0 TAGA 0 TAGC 0 TAGG 0 TAGT 0 TATA 0 TATC 0 TATG 0 TATT 0 +PRCNL 1 TCAA 0 TCAC 0 TCAG 0 TCAT 0 TCGA 0 TCGC 0 TCGG 0 TCGT 0 TCTA 0 TCTC 0 TCTG 0 TCTT 0 +PRCNL 1 TGAA 0 TGAC 0 TGAG 0 TGAT 0 TGCA 0 TGCC 0 TGCG 0 TGCT 0 TGTA 0 TGTC 0 TGTG 0 TGTT 0 +PRCNL 1 TTAA 0 TTAC 0 TTAG 0 TTAT 0 TTCA 0 TTCC 0 TTCG 0 TTCT 0 TTGA 0 TTGC 0 TTGG 0 TTGT 0 +PRCNL 2 AACA 0 AACC 0 AACG 0 AACT 0 AAGA 0 AAGC 0 AAGG 0 AAGT 0 AATA 0 AATC 0 AATG 0 AATT 0 +PRCNL 2 ACAA 0 ACAC 0 ACAG 0 ACAT 0 ACGA 0 ACGC 0 ACGG 0 ACGT 0 ACTA 0 ACTC 0 ACTG 0 ACTT 0 +PRCNL 2 AGAA 0 AGAC 0 AGAG 0 AGAT 0 AGCA 0 AGCC 0 AGCG 0 AGCT 0 AGTA 0 AGTC 0 AGTG 0 AGTT 0 +PRCNL 2 ATAA 0 ATAC 0 ATAG 0 ATAT 0 ATCA 0 ATCC 0 ATCG 0 ATCT 0 ATGA 0 ATGC 0 ATGG 0 ATGT 0 +PRCNL 2 CACA 0 CACC 0 CACG 0 CACT 0 CAGA 0 CAGC 0 CAGG 0 CAGT 0 CATA 0 CATC 0 CATG 0 CATT 0 +PRCNL 2 CCAA 0 CCAC 0 CCAG 0 CCAT 0 CCGA 0 CCGC 0 CCGG 0 CCGT 0 CCTA 0 CCTC 0 CCTG 0 CCTT 0 +PRCNL 2 CGAA 0 CGAC 0 CGAG 0 CGAT 0 CGCA 0 CGCC 0 CGCG 0 CGCT 0 CGTA 0 CGTC 0 CGTG 0 CGTT 0 +PRCNL 2 CTAA 0 CTAC 0 CTAG 0 CTAT 0 CTCA 0 CTCC 0 CTCG 0 CTCT 0 CTGA 0 CTGC 0 CTGG 0 CTGT 0 +PRCNL 2 GACA 0 GACC 0 GACG 0 GACT 0 GAGA 0 GAGC 0 GAGG 0 GAGT 0 GATA 0 GATC 0 GATG 0 GATT 0 +PRCNL 2 GCAA 0 GCAC 0 GCAG 0 GCAT 0 GCGA 0 GCGC 0 GCGG 0 GCGT 0 GCTA 0 GCTC 0 GCTG 0 GCTT 0 +PRCNL 2 GGAA 0 GGAC 0 GGAG 0 GGAT 0 GGCA 0 GGCC 0 GGCG 0 GGCT 0 GGTA 0 GGTC 0 GGTG 0 GGTT 0 +PRCNL 2 GTAA 0 GTAC 0 GTAG 0 GTAT 0 GTCA 0 GTCC 0 GTCG 0 GTCT 0 GTGA 0 GTGC 0 GTGG 0 GTGT 0 +PRCNL 2 TACA 0 TACC 0 TACG 0 TACT 0 TAGA 0 TAGC 0 TAGG 0 TAGT 0 TATA 0 TATC 0 TATG 0 TATT 0 +PRCNL 2 TCAA 0 TCAC 0 TCAG 0 TCAT 0 TCGA 0 TCGC 0 TCGG 0 TCGT 0 TCTA 0 TCTC 0 TCTG 0 TCTT 0 +PRCNL 2 TGAA 0 TGAC 0 TGAG 0 TGAT 0 TGCA 0 TGCC 0 TGCG 0 TGCT 0 TGTA 0 TGTC 0 TGTG 0 TGTT 0 +PRCNL 2 TTAA 0 TTAC 0 TTAG 0 TTAT 0 TTCA 0 TTCC 0 TTCG 0 TTCT 0 TTGA 0 TTGC 0 TTGG 0 TTGT 0 diff --git a/test/data/out/test10_decode.sam b/test/data/out/test10_decode.sam index b6facb1a..d1316610 100644 --- a/test/data/out/test10_decode.sam +++ b/test/data/out/test10_decode.sam @@ -1,81 +1,81 @@ @HD VN:1.5 SO:unsorted -@RG ID:1#0 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#0 LB:TestLibrary PG:SCS SM:TestSample CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#1 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#1 LB:TestLibrary1 PG:SCS SM:TestSample1 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#2 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#2 LB:TestLibrary2 PG:SCS SM:TestSample2 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#3 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#3 LB:TestLibrary3 PG:SCS SM:TestSample3 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#4 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#4 LB:TestLibrary4 PG:SCS SM:TestSample4 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#5 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#5 LB:TestLibrary5 PG:SCS SM:TestSample5 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#6 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#6 LB:TestLibrary6 PG:SCS SM:TestSample6 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#7 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#7 LB:TestLibrary7 PG:SCS SM:TestSample7 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#8 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#8 LB:TestLibrary8 PG:SCS SM:TestSample8 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#9 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#9 LB:TestLibrary9 PG:SCS SM:TestSample9 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#10 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#10 LB:TestLibrary10 PG:SCS SM:TestSample10 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#11 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#11 LB:TestLibrary11 PG:SCS SM:TestSample11 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#12 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#12 LB:TestLibrary12 PG:SCS SM:TestSample12 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#13 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#13 LB:TestLibrary13 PG:SCS SM:TestSample13 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#14 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#14 LB:TestLibrary14 PG:SCS SM:TestSample14 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#15 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#15 LB:TestLibrary15 PG:SCS SM:TestSample15 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#16 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#16 LB:TestLibrary16 PG:SCS SM:TestSample16 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#17 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#17 LB:TestLibrary17 PG:SCS SM:TestSample17 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#18 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#18 LB:TestLibrary18 PG:SCS SM:TestSample18 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#19 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#19 LB:TestLibrary19 PG:SCS SM:TestSample19 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#20 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#20 LB:TestLibrary20 PG:SCS SM:TestSample20 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#21 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#21 LB:TestLibrary21 PG:SCS SM:TestSample21 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#22 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#22 LB:TestLibrary22 PG:SCS SM:TestSample22 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#23 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#23 LB:TestLibrary23 PG:SCS SM:TestSample23 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#24 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#24 LB:TestLibrary24 PG:SCS SM:TestSample24 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#25 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#25 LB:TestLibrary25 PG:SCS SM:TestSample25 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#26 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#26 LB:TestLibrary26 PG:SCS SM:TestSample26 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#27 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#27 LB:TestLibrary27 PG:SCS SM:TestSample27 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#28 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#28 LB:TestLibrary28 PG:SCS SM:TestSample28 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#29 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#29 LB:TestLibrary29 PG:SCS SM:TestSample29 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#30 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#30 LB:TestLibrary30 PG:SCS SM:TestSample30 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#31 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#31 LB:TestLibrary31 PG:SCS SM:TestSample31 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#32 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#32 LB:TestLibrary32 PG:SCS SM:TestSample32 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#33 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#33 LB:TestLibrary33 PG:SCS SM:TestSample33 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#34 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#34 LB:TestLibrary34 PG:SCS SM:TestSample34 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#35 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#35 LB:TestLibrary35 PG:SCS SM:TestSample35 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#36 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#36 LB:TestLibrary36 PG:SCS SM:TestSample36 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#37 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#37 LB:TestLibrary37 PG:SCS SM:TestSample37 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#38 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#38 LB:TestLibrary38 PG:SCS SM:TestSample38 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#39 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#39 LB:TestLibrary39 PG:SCS SM:TestSample39 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#40 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#40 LB:TestLibrary40 PG:SCS SM:TestSample40 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#41 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#41 LB:TestLibrary41 PG:SCS SM:TestSample41 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#42 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#42 LB:TestLibrary42 PG:SCS SM:TestSample42 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#43 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#43 LB:TestLibrary43 PG:SCS SM:TestSample43 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#44 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#44 LB:TestLibrary44 PG:SCS SM:TestSample44 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#45 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#45 LB:TestLibrary45 PG:SCS SM:TestSample45 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#46 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#46 LB:TestLibrary46 PG:SCS SM:TestSample46 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#47 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#47 LB:TestLibrary47 PG:SCS SM:TestSample47 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#48 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#48 LB:TestLibrary48 PG:SCS SM:TestSample48 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#49 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#49 LB:TestLibrary49 PG:SCS SM:TestSample49 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#50 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#50 LB:TestLibrary50 PG:SCS SM:TestSample50 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#51 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#51 LB:TestLibrary51 PG:SCS SM:TestSample51 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#52 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#52 LB:TestLibrary52 PG:SCS SM:TestSample52 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#53 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#53 LB:TestLibrary53 PG:SCS SM:TestSample53 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#54 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#54 LB:TestLibrary54 PG:SCS SM:TestSample54 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#55 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#55 LB:TestLibrary55 PG:SCS SM:TestSample55 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#56 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#56 LB:TestLibrary56 PG:SCS SM:TestSample56 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#57 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#57 LB:TestLibrary57 PG:SCS SM:TestSample57 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#58 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#58 LB:TestLibrary58 PG:SCS SM:TestSample58 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#59 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#59 LB:TestLibrary59 PG:SCS SM:TestSample59 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#60 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#60 LB:TestLibrary60 PG:SCS SM:TestSample60 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#61 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#61 LB:TestLibrary61 PG:SCS SM:TestSample61 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#62 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#62 LB:TestLibrary62 PG:SCS SM:TestSample62 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#63 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#63 LB:TestLibrary63 PG:SCS SM:TestSample63 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#64 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#64 LB:TestLibrary64 PG:SCS SM:TestSample64 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#65 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#65 LB:TestLibrary65 PG:SCS SM:TestSample65 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#66 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#66 LB:TestLibrary66 PG:SCS SM:TestSample66 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#67 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#67 LB:TestLibrary67 PG:SCS SM:TestSample67 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#68 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#68 LB:TestLibrary68 PG:SCS SM:TestSample68 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#69 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#69 LB:TestLibrary69 PG:SCS SM:TestSample69 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#70 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#70 LB:TestLibrary70 PG:SCS SM:TestSample70 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#71 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#71 LB:TestLibrary71 PG:SCS SM:TestSample71 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#72 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#72 LB:TestLibrary72 PG:SCS SM:TestSample72 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#73 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#73 LB:TestLibrary73 PG:SCS SM:TestSample73 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#74 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#74 LB:TestLibrary74 PG:SCS SM:TestSample74 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#75 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#75 LB:TestLibrary75 PG:SCS SM:TestSample75 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#76 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#76 LB:TestLibrary76 PG:SCS SM:TestSample76 CN:SC PL:ILLUMINA DS:Study TestStudy +@RG ID:1#0 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#0 LB:TestLibrary PG:SCS SM:TestSample CN:SC PL:ILLUMINA DS:Study TestStudy BC:NN-NNN +@RG ID:1#1 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#1 LB:TestLibrary1 PG:SCS SM:TestSample1 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-GCG +@RG ID:1#2 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#2 LB:TestLibrary2 PG:SCS SM:TestSample2 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TA-GTA +@RG ID:1#3 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#3 LB:TestLibrary3 PG:SCS SM:TestSample3 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GA-AAG +@RG ID:1#4 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#4 LB:TestLibrary4 PG:SCS SM:TestSample4 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-GGT +@RG ID:1#5 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#5 LB:TestLibrary5 PG:SCS SM:TestSample5 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AT-ACG +@RG ID:1#6 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#6 LB:TestLibrary6 PG:SCS SM:TestSample6 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-TAG +@RG ID:1#7 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#7 LB:TestLibrary7 PG:SCS SM:TestSample7 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-GGA +@RG ID:1#8 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#8 LB:TestLibrary8 PG:SCS SM:TestSample8 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AC-GTC +@RG ID:1#9 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#9 LB:TestLibrary9 PG:SCS SM:TestSample9 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-TGG +@RG ID:1#10 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#10 LB:TestLibrary10 PG:SCS SM:TestSample10 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-CTG +@RG ID:1#11 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#11 LB:TestLibrary11 PG:SCS SM:TestSample11 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-GAA +@RG ID:1#12 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#12 LB:TestLibrary12 PG:SCS SM:TestSample12 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AC-GGT +@RG ID:1#13 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#13 LB:TestLibrary13 PG:SCS SM:TestSample13 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AT-TGT +@RG ID:1#14 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#14 LB:TestLibrary14 PG:SCS SM:TestSample14 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AA-CAG +@RG ID:1#15 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#15 LB:TestLibrary15 PG:SCS SM:TestSample15 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TA-CAA +@RG ID:1#16 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#16 LB:TestLibrary16 PG:SCS SM:TestSample16 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-GTA +@RG ID:1#17 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#17 LB:TestLibrary17 PG:SCS SM:TestSample17 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TC-ACC +@RG ID:1#18 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#18 LB:TestLibrary18 PG:SCS SM:TestSample18 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AT-CTG +@RG ID:1#19 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#19 LB:TestLibrary19 PG:SCS SM:TestSample19 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CT-GAG +@RG ID:1#20 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#20 LB:TestLibrary20 PG:SCS SM:TestSample20 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-CCG +@RG ID:1#21 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#21 LB:TestLibrary21 PG:SCS SM:TestSample21 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-CTA +@RG ID:1#22 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#22 LB:TestLibrary22 PG:SCS SM:TestSample22 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-ACA +@RG ID:1#23 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#23 LB:TestLibrary23 PG:SCS SM:TestSample23 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CA-CGT +@RG ID:1#24 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#24 LB:TestLibrary24 PG:SCS SM:TestSample24 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GA-ACA +@RG ID:1#25 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#25 LB:TestLibrary25 PG:SCS SM:TestSample25 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TG-CAT +@RG ID:1#26 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#26 LB:TestLibrary26 PG:SCS SM:TestSample26 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AT-GCA +@RG ID:1#27 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#27 LB:TestLibrary27 PG:SCS SM:TestSample27 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-TTC +@RG ID:1#28 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#28 LB:TestLibrary28 PG:SCS SM:TestSample28 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-TCC +@RG ID:1#29 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#29 LB:TestLibrary29 PG:SCS SM:TestSample29 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-CTC +@RG ID:1#30 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#30 LB:TestLibrary30 PG:SCS SM:TestSample30 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CG-CGG +@RG ID:1#31 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#31 LB:TestLibrary31 PG:SCS SM:TestSample31 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-TAT +@RG ID:1#32 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#32 LB:TestLibrary32 PG:SCS SM:TestSample32 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TC-ATG +@RG ID:1#33 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#33 LB:TestLibrary33 PG:SCS SM:TestSample33 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AC-ATA +@RG ID:1#34 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#34 LB:TestLibrary34 PG:SCS SM:TestSample34 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-TTA +@RG ID:1#35 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#35 LB:TestLibrary35 PG:SCS SM:TestSample35 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AT-TTC +@RG ID:1#36 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#36 LB:TestLibrary36 PG:SCS SM:TestSample36 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CT-AGA +@RG ID:1#37 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#37 LB:TestLibrary37 PG:SCS SM:TestSample37 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-GGC +@RG ID:1#38 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#38 LB:TestLibrary38 PG:SCS SM:TestSample38 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-ACC +@RG ID:1#39 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#39 LB:TestLibrary39 PG:SCS SM:TestSample39 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TC-TGG +@RG ID:1#40 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#40 LB:TestLibrary40 PG:SCS SM:TestSample40 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-TCC +@RG ID:1#41 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#41 LB:TestLibrary41 PG:SCS SM:TestSample41 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-AGT +@RG ID:1#42 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#42 LB:TestLibrary42 PG:SCS SM:TestSample42 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TA-ATC +@RG ID:1#43 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#43 LB:TestLibrary43 PG:SCS SM:TestSample43 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-CCC +@RG ID:1#44 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#44 LB:TestLibrary44 PG:SCS SM:TestSample44 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AC-ACT +@RG ID:1#45 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#45 LB:TestLibrary45 PG:SCS SM:TestSample45 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CG-AAG +@RG ID:1#46 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#46 LB:TestLibrary46 PG:SCS SM:TestSample46 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AC-AAC +@RG ID:1#47 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#47 LB:TestLibrary47 PG:SCS SM:TestSample47 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-AGT +@RG ID:1#48 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#48 LB:TestLibrary48 PG:SCS SM:TestSample48 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CT-TGG +@RG ID:1#49 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#49 LB:TestLibrary49 PG:SCS SM:TestSample49 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CT-GCT +@RG ID:1#50 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#50 LB:TestLibrary50 PG:SCS SM:TestSample50 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-CGC +@RG ID:1#51 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#51 LB:TestLibrary51 PG:SCS SM:TestSample51 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CG-GGA +@RG ID:1#52 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#52 LB:TestLibrary52 PG:SCS SM:TestSample52 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-GTT +@RG ID:1#53 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#53 LB:TestLibrary53 PG:SCS SM:TestSample53 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-TCT +@RG ID:1#54 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#54 LB:TestLibrary54 PG:SCS SM:TestSample54 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-CGG +@RG ID:1#55 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#55 LB:TestLibrary55 PG:SCS SM:TestSample55 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-CCT +@RG ID:1#56 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#56 LB:TestLibrary56 PG:SCS SM:TestSample56 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-CGT +@RG ID:1#57 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#57 LB:TestLibrary57 PG:SCS SM:TestSample57 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TG-TCG +@RG ID:1#58 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#58 LB:TestLibrary58 PG:SCS SM:TestSample58 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-CAG +@RG ID:1#59 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#59 LB:TestLibrary59 PG:SCS SM:TestSample59 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CA-GTC +@RG ID:1#60 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#60 LB:TestLibrary60 PG:SCS SM:TestSample60 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GA-ATT +@RG ID:1#61 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#61 LB:TestLibrary61 PG:SCS SM:TestSample61 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GA-CGA +@RG ID:1#62 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#62 LB:TestLibrary62 PG:SCS SM:TestSample62 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CA-ATA +@RG ID:1#63 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#63 LB:TestLibrary63 PG:SCS SM:TestSample63 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TG-CTA +@RG ID:1#64 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#64 LB:TestLibrary64 PG:SCS SM:TestSample64 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TA-TGA +@RG ID:1#65 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#65 LB:TestLibrary65 PG:SCS SM:TestSample65 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-ATC +@RG ID:1#66 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#66 LB:TestLibrary66 PG:SCS SM:TestSample66 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-CGC +@RG ID:1#67 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#67 LB:TestLibrary67 PG:SCS SM:TestSample67 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TC-TAT +@RG ID:1#68 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#68 LB:TestLibrary68 PG:SCS SM:TestSample68 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AA-TCC +@RG ID:1#69 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#69 LB:TestLibrary69 PG:SCS SM:TestSample69 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TG-GAC +@RG ID:1#70 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#70 LB:TestLibrary70 PG:SCS SM:TestSample70 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GA-GAC +@RG ID:1#71 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#71 LB:TestLibrary71 PG:SCS SM:TestSample71 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CG-CAA +@RG ID:1#72 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#72 LB:TestLibrary72 PG:SCS SM:TestSample72 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CT-CTC +@RG ID:1#73 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#73 LB:TestLibrary73 PG:SCS SM:TestSample73 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AA-GCT +@RG ID:1#74 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#74 LB:TestLibrary74 PG:SCS SM:TestSample74 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CG-TTG +@RG ID:1#75 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#75 LB:TestLibrary75 PG:SCS SM:TestSample75 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-GAG +@RG ID:1#76 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#76 LB:TestLibrary76 PG:SCS SM:TestSample76 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-AAC @PG ID:SCS VN:2.0.12.0 PN:HiSeq Control Software DS:Controlling software on instrument @PG ID:basecalling PP:SCS VN:Unknown PN:Unknown DS:Basecalling Package @PG ID:bambi PP:basecalling VN:12.34 CL:bambi i2b -i ./test/data/160919_hiseq2500_4966_FC/Data/Intensities -o /tmp/bambi.3bdOh3/test10_decode.bam --lane 1 --first-tile 1101 --tile-limit 1 --library-name TestLibrary --sample-alias TestSample --study-name Study TestStudy --run-start-date 2011-03-23T00:00:00+0000 --verbose --first-cycle 1,30 --final-cycle 2,32 --first-index-cycle 3,5 --final-index-cycle 4,7 --barcode-file test/data/160919_hiseq2500_4966_FC/barcodes_ci --barcode-tag-name BC --metrics-file /tmp/bambi.3bdOh3/test10_decode.bam.metrics PN:bambi DS:Convert Illumina BCL to BAM or SAM file diff --git a/test/data/out/test7_decode.sam b/test/data/out/test7_decode.sam index 671eb184..79dc88fc 100644 --- a/test/data/out/test7_decode.sam +++ b/test/data/out/test7_decode.sam @@ -1,15 +1,15 @@ @HD VN:1.5 SO:unsorted -@RG ID:1#0 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#0 LB:TestLibrary PG:SCS SM:TestSample CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#1 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#1 LB:TestLibrary1 PG:SCS SM:TestSample1 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#2 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#2 LB:TestLibrary2 PG:SCS SM:TestSample2 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#3 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#3 LB:TestLibrary3 PG:SCS SM:TestSample3 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#4 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#4 LB:TestLibrary4 PG:SCS SM:TestSample4 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#5 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#5 LB:TestLibrary5 PG:SCS SM:TestSample5 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#6 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#6 LB:TestLibrary6 PG:SCS SM:TestSample6 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#7 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#7 LB:TestLibrary7 PG:SCS SM:TestSample7 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#8 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#8 LB:TestLibrary8 PG:SCS SM:TestSample8 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#9 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#9 LB:TestLibrary9 PG:SCS SM:TestSample9 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#10 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#10 LB:TestLibrary10 PG:SCS SM:TestSample10 CN:SC PL:ILLUMINA DS:Study TestStudy +@RG ID:1#0 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#0 LB:TestLibrary PG:SCS SM:TestSample CN:SC PL:ILLUMINA DS:Study TestStudy BC:NNNNN +@RG ID:1#1 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#1 LB:TestLibrary1 PG:SCS SM:TestSample1 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AACCG +@RG ID:1#2 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#2 LB:TestLibrary2 PG:SCS SM:TestSample2 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CCTCA +@RG ID:1#3 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#3 LB:TestLibrary3 PG:SCS SM:TestSample3 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GGACA +@RG ID:1#4 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#4 LB:TestLibrary4 PG:SCS SM:TestSample4 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TAATT +@RG ID:1#5 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#5 LB:TestLibrary5 PG:SCS SM:TestSample5 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TGGAC +@RG ID:1#6 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#6 LB:TestLibrary6 PG:SCS SM:TestSample6 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GTTAC +@RG ID:1#7 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#7 LB:TestLibrary7 PG:SCS SM:TestSample7 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CTACG +@RG ID:1#8 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#8 LB:TestLibrary8 PG:SCS SM:TestSample8 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TCTCC +@RG ID:1#9 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#9 LB:TestLibrary9 PG:SCS SM:TestSample9 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CGCCT +@RG ID:1#10 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#10 LB:TestLibrary10 PG:SCS SM:TestSample10 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AGGTG @PG ID:SCS VN:2.0.12.0 PN:HiSeq Control Software DS:Controlling software on instrument @PG ID:basecalling PP:SCS VN:Unknown PN:Unknown DS:Basecalling Package @PG ID:bambi PP:basecalling VN:12.34 CL:bambi i2b -i test/data/160919_hiseq2500_4966_FC/Data/Intensities -o /tmp/bambi.3bdOh3/i2b_7_decode.bam --lane 1 --first-tile 1101 --tile-limit 1 --library-name TestLibrary --sample-alias TestSample --study-name Study TestStudy --run-start-date 2011-03-23T00:00:00+0000 --verbose --first-cycle 1,30 --final-cycle 2,32 --first-index-cycle 3,6,11 --final-index-cycle 5,10,12 --barcode-tag b1,b2,b3 --quality-tag q1,q2,q3 --barcode-file test/data/160919_hiseq2500_4966_FC/barcodes_i2 --barcode-tag-name b2 --metrics-file /tmp/bambi.3bdOh3/i2b_7_decode.bam.metrics PN:bambi DS:Convert Illumina BCL to BAM or SAM file diff --git a/test/data/out/test9_decode.sam b/test/data/out/test9_decode.sam index c75f6885..8c6c3279 100644 --- a/test/data/out/test9_decode.sam +++ b/test/data/out/test9_decode.sam @@ -1,41 +1,41 @@ @HD VN:1.5 SO:unsorted -@RG ID:1#0 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#0 LB:TestLibrary PG:SCS SM:TestSample CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#1 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#1 LB:TestLibrary1 PG:SCS SM:TestSample1 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#2 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#2 LB:TestLibrary2 PG:SCS SM:TestSample2 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#3 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#3 LB:TestLibrary3 PG:SCS SM:TestSample3 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#4 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#4 LB:TestLibrary4 PG:SCS SM:TestSample4 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#5 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#5 LB:TestLibrary5 PG:SCS SM:TestSample5 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#6 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#6 LB:TestLibrary6 PG:SCS SM:TestSample6 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#7 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#7 LB:TestLibrary7 PG:SCS SM:TestSample7 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#8 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#8 LB:TestLibrary8 PG:SCS SM:TestSample8 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#9 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#9 LB:TestLibrary9 PG:SCS SM:TestSample9 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#10 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#10 LB:TestLibrary10 PG:SCS SM:TestSample10 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#11 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#11 LB:TestLibrary11 PG:SCS SM:TestSample11 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#12 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#12 LB:TestLibrary12 PG:SCS SM:TestSample12 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#13 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#13 LB:TestLibrary13 PG:SCS SM:TestSample13 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#14 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#14 LB:TestLibrary14 PG:SCS SM:TestSample14 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#15 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#15 LB:TestLibrary15 PG:SCS SM:TestSample15 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#16 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#16 LB:TestLibrary16 PG:SCS SM:TestSample16 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#17 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#17 LB:TestLibrary17 PG:SCS SM:TestSample17 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#18 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#18 LB:TestLibrary18 PG:SCS SM:TestSample18 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#19 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#19 LB:TestLibrary19 PG:SCS SM:TestSample19 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#20 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#20 LB:TestLibrary20 PG:SCS SM:TestSample20 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#21 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#21 LB:TestLibrary21 PG:SCS SM:TestSample21 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#22 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#22 LB:TestLibrary22 PG:SCS SM:TestSample22 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#23 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#23 LB:TestLibrary23 PG:SCS SM:TestSample23 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#24 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#24 LB:TestLibrary24 PG:SCS SM:TestSample24 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#25 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#25 LB:TestLibrary25 PG:SCS SM:TestSample25 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#26 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#26 LB:TestLibrary26 PG:SCS SM:TestSample26 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#27 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#27 LB:TestLibrary27 PG:SCS SM:TestSample27 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#28 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#28 LB:TestLibrary28 PG:SCS SM:TestSample28 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#29 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#29 LB:TestLibrary29 PG:SCS SM:TestSample29 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#30 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#30 LB:TestLibrary30 PG:SCS SM:TestSample30 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#31 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#31 LB:TestLibrary31 PG:SCS SM:TestSample31 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#32 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#32 LB:TestLibrary32 PG:SCS SM:TestSample32 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#33 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#33 LB:TestLibrary33 PG:SCS SM:TestSample33 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#34 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#34 LB:TestLibrary34 PG:SCS SM:TestSample34 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#35 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#35 LB:TestLibrary35 PG:SCS SM:TestSample35 CN:SC PL:ILLUMINA DS:Study TestStudy -@RG ID:1#36 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#36 LB:TestLibrary36 PG:SCS SM:TestSample36 CN:SC PL:ILLUMINA DS:Study TestStudy +@RG ID:1#0 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#0 LB:TestLibrary PG:SCS SM:TestSample CN:SC PL:ILLUMINA DS:Study TestStudy BC:NN-NN +@RG ID:1#1 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#1 LB:TestLibrary1 PG:SCS SM:TestSample1 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-AG +@RG ID:1#2 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#2 LB:TestLibrary2 PG:SCS SM:TestSample2 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AC-TC +@RG ID:1#3 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#3 LB:TestLibrary3 PG:SCS SM:TestSample3 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-AA +@RG ID:1#4 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#4 LB:TestLibrary4 PG:SCS SM:TestSample4 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AA-GT +@RG ID:1#5 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#5 LB:TestLibrary5 PG:SCS SM:TestSample5 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-TA +@RG ID:1#6 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#6 LB:TestLibrary6 PG:SCS SM:TestSample6 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-AC +@RG ID:1#7 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#7 LB:TestLibrary7 PG:SCS SM:TestSample7 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CT-TG +@RG ID:1#8 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#8 LB:TestLibrary8 PG:SCS SM:TestSample8 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-CA +@RG ID:1#9 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#9 LB:TestLibrary9 PG:SCS SM:TestSample9 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-GG +@RG ID:1#10 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#10 LB:TestLibrary10 PG:SCS SM:TestSample10 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TA-AG +@RG ID:1#11 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#11 LB:TestLibrary11 PG:SCS SM:TestSample11 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-GA +@RG ID:1#12 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#12 LB:TestLibrary12 PG:SCS SM:TestSample12 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-GC +@RG ID:1#13 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#13 LB:TestLibrary13 PG:SCS SM:TestSample13 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CG-AG +@RG ID:1#14 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#14 LB:TestLibrary14 PG:SCS SM:TestSample14 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CG-TC +@RG ID:1#15 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#15 LB:TestLibrary15 PG:SCS SM:TestSample15 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TC-CT +@RG ID:1#16 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#16 LB:TestLibrary16 PG:SCS SM:TestSample16 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AC-AG +@RG ID:1#17 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#17 LB:TestLibrary17 PG:SCS SM:TestSample17 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TG-TA +@RG ID:1#18 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#18 LB:TestLibrary18 PG:SCS SM:TestSample18 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AT-AT +@RG ID:1#19 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#19 LB:TestLibrary19 PG:SCS SM:TestSample19 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-AT +@RG ID:1#20 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#20 LB:TestLibrary20 PG:SCS SM:TestSample20 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TA-GA +@RG ID:1#21 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#21 LB:TestLibrary21 PG:SCS SM:TestSample21 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AA-TA +@RG ID:1#22 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#22 LB:TestLibrary22 PG:SCS SM:TestSample22 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-CC +@RG ID:1#23 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#23 LB:TestLibrary23 PG:SCS SM:TestSample23 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GT-GT +@RG ID:1#24 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#24 LB:TestLibrary24 PG:SCS SM:TestSample24 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GA-AA +@RG ID:1#25 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#25 LB:TestLibrary25 PG:SCS SM:TestSample25 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-CG +@RG ID:1#26 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#26 LB:TestLibrary26 PG:SCS SM:TestSample26 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-AA +@RG ID:1#27 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#27 LB:TestLibrary27 PG:SCS SM:TestSample27 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CA-CA +@RG ID:1#28 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#28 LB:TestLibrary28 PG:SCS SM:TestSample28 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GA-GC +@RG ID:1#29 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#29 LB:TestLibrary29 PG:SCS SM:TestSample29 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TT-TT +@RG ID:1#30 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#30 LB:TestLibrary30 PG:SCS SM:TestSample30 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-CC +@RG ID:1#31 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#31 LB:TestLibrary31 PG:SCS SM:TestSample31 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AA-AC +@RG ID:1#32 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#32 LB:TestLibrary32 PG:SCS SM:TestSample32 CN:SC PL:ILLUMINA DS:Study TestStudy BC:CC-GG +@RG ID:1#33 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#33 LB:TestLibrary33 PG:SCS SM:TestSample33 CN:SC PL:ILLUMINA DS:Study TestStudy BC:AG-TG +@RG ID:1#34 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#34 LB:TestLibrary34 PG:SCS SM:TestSample34 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GC-CG +@RG ID:1#35 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#35 LB:TestLibrary35 PG:SCS SM:TestSample35 CN:SC PL:ILLUMINA DS:Study TestStudy BC:TG-AT +@RG ID:1#36 DT:2011-03-23T00:00:00+0000 PU:160919_hiseq2500_4966_FC_1#36 LB:TestLibrary36 PG:SCS SM:TestSample36 CN:SC PL:ILLUMINA DS:Study TestStudy BC:GG-CT @PG ID:SCS VN:2.0.12.0 PN:HiSeq Control Software DS:Controlling software on instrument @PG ID:basecalling PP:SCS VN:Unknown PN:Unknown DS:Basecalling Package @PG ID:bambi PP:basecalling VN:0.11.1-8-g237eff2 CL:./src/bambi i2b -i test/data/160919_hiseq2500_4966_FC/Data/Intensities -o /tmp/bambi.3bdOh3/test9_decode.bam --lane 1 --first-tile 1101 --tile-limit 1 --library-name TestLibrary --sample-alias TestSample --study-name Study TestStudy --run-start-date 2011-03-23T00:00:00+0000 --verbose --first-cycle 1,30 --final-cycle 2,32 --first-index-cycle 3,6,11 --final-index-cycle 4,9,12 --barcode-tag b1,b2,b1 --quality-tag q1,q2,q1 --barcode-file test/data/160919_hiseq2500_4966_FC/barcodes_i1i3_sep --barcode-tag-name b1 --metrics-file /tmp/bambi.3bdOh3/test9_decode.bam.metrics PN:bambi DS:Convert Illumina BCL to BAM or SAM file diff --git a/test/data/sa.bam b/test/data/sa.bam new file mode 100644 index 00000000..ce49826f Binary files /dev/null and b/test/data/sa.bam differ diff --git a/test/t_decode.c b/test/t_decode.c index 3450ae54..9b96ab14 100644 --- a/test/t_decode.c +++ b/test/t_decode.c @@ -160,6 +160,58 @@ void setup_test_4(int* argc, char*** argv, char *outputfile, char* metricsfile, } } +void setup_test_5(int* argc, char*** argv, char *outputfile, char* metricsfile, + int threads) +{ + *argc = 15 + (threads ? 2 : 0); + *argv = (char**)calloc(sizeof(char*), *argc); + (*argv)[0] = strdup("bambi"); + (*argv)[1] = strdup("decode"); + (*argv)[2] = strdup("-i"); + (*argv)[3] = strdup(MKNAME(DATA_DIR,"/decode_5.sam")); + (*argv)[4] = strdup("-o"); + (*argv)[5] = strdup(outputfile); + (*argv)[6] = strdup("--output-fmt"); + (*argv)[7] = strdup("sam"); + (*argv)[8] = strdup("--input-fmt"); + (*argv)[9] = strdup("sam"); + (*argv)[10] = strdup("--barcode-file"); + (*argv)[11] = strdup(MKNAME(DATA_DIR,"/decode_5.tag")); + (*argv)[12] = strdup("--metrics-file"); + (*argv)[13] = strdup(metricsfile); + (*argv)[14] = strdup("--ignore-pf"); + if (threads) { + (*argv)[15] = strdup("--threads"); + (*argv)[16] = itoa(threads); + } +} + +void setup_test_6(int* argc, char*** argv, char *outputfile, char* metricsfile, + int threads) +{ + *argc = 15 + (threads ? 2 : 0); + *argv = (char**)calloc(sizeof(char*), *argc); + (*argv)[0] = strdup("bambi"); + (*argv)[1] = strdup("decode"); + (*argv)[2] = strdup("-i"); + (*argv)[3] = strdup(MKNAME(DATA_DIR,"/decode_6.sam")); + (*argv)[4] = strdup("-o"); + (*argv)[5] = strdup(outputfile); + (*argv)[6] = strdup("--output-fmt"); + (*argv)[7] = strdup("sam"); + (*argv)[8] = strdup("--input-fmt"); + (*argv)[9] = strdup("sam"); + (*argv)[10] = strdup("--barcode-file"); + (*argv)[11] = strdup(MKNAME(DATA_DIR,"/decode_6.tag")); + (*argv)[12] = strdup("--metrics-file"); + (*argv)[13] = strdup(metricsfile); + (*argv)[14] = strdup("--ignore-pf"); + if (threads) { + (*argv)[15] = strdup("--threads"); + (*argv)[16] = itoa(threads); + } +} + void free_argv(int argc, char *argv[]) { for (int n=0; n < argc; free(argv[n++])); @@ -378,6 +430,67 @@ int main(int argc, char**argv) } } + // --dual-tag option with missing first tag + for (int threads = 0; threads <= NTHREADS; threads += NTHREADS) { + int argc_5; + char** argv_5; + int result; + snprintf(outputfile, max_path_length,"%s/decode_5%s.sam",TMPDIR, threads ? "threads" : ""); + snprintf(metricsfile, max_path_length, "%s/decode_5%s.metrics", TMPDIR, threads ? "threads" : ""); + setup_test_5(&argc_5, &argv_5, outputfile, metricsfile, threads); + main_decode(argc_5-1, argv_5+1); + free_argv(argc_5,argv_5); + + snprintf(cmd, sizeof(cmd), "diff -I ID:bambi %s %s", outputfile, MKNAME(DATA_DIR,"/out/decode_5.sam")); + result = system(cmd); + if (result) { + fprintf(stderr, "test 5 failed at SAM file diff\n"); + failure++; + } else { + success++; + } + + snprintf(cmd, sizeof(cmd), "diff -I ID:bambi %s %s", metricsfile, MKNAME(DATA_DIR,"/out/decode_5.metrics")); + result = system(cmd); + if (result) { + fprintf(stderr, "test 5 failed at metrics file diff\n"); + failure++; + } else { + success++; + } + } + + // --dual-tag option with missing second tag + for (int threads = 0; threads <= NTHREADS; threads += NTHREADS) { + int argc_6; + char** argv_6; + int result; + snprintf(outputfile, max_path_length,"%s/decode_6%s.sam",TMPDIR, threads ? "threads" : ""); + snprintf(metricsfile, max_path_length, "%s/decode_6%s.metrics", TMPDIR, threads ? "threads" : ""); + setup_test_6(&argc_6, &argv_6, outputfile, metricsfile, threads); + main_decode(argc_6-1, argv_6+1); + free_argv(argc_6,argv_6); + + snprintf(cmd, sizeof(cmd), "diff -I ID:bambi %s %s", outputfile, MKNAME(DATA_DIR,"/out/decode_6.sam")); + result = system(cmd); + if (result) { + fprintf(stderr, "test 5 failed at SAM file diff\n"); + failure++; + } else { + success++; + } + + snprintf(cmd, sizeof(cmd), "diff -I ID:bambi %s %s", metricsfile, MKNAME(DATA_DIR,"/out/decode_6.metrics")); + result = system(cmd); + if (result) { + fprintf(stderr, "test 5 failed at metrics file diff\n"); + failure++; + } else { + success++; + } + + } + free(metricsfile); free(outputfile); free(chksumfile); diff --git a/test/t_i2b.c b/test/t_i2b.c index 8f6783c4..37ae3808 100644 --- a/test/t_i2b.c +++ b/test/t_i2b.c @@ -595,20 +595,20 @@ void checkFiles(char *gotfile, char *expectfile, int verbose) bam1_t *got_rec, *exp_rec; int c = sam_hdr_count_lines(bgot->h, "RG"); - if (c != sam_hdr_count_lines(bexp->h, "RG")) { failure++; return; } + if (c != sam_hdr_count_lines(bexp->h, "RG")) { failure++; c = 0; } for (int n=0; n < c; n++) { kstring_t ks_got; ks_initialize(&ks_got); kstring_t ks_exp; ks_initialize(&ks_exp); sam_hdr_find_line_pos(bgot->h, "RG", n, &ks_got); sam_hdr_find_line_pos(bexp->h, "RG", n, &ks_exp); - if (strcmp(ks_str(&ks_got), ks_str(&ks_exp))) { failure++; return; } + if (strcmp(ks_str(&ks_got), ks_str(&ks_exp))) { failure++; c = 0; } ks_free(&ks_got); ks_free(&ks_exp); } while ((exp_rec = BAMit_next(bexp)) != NULL) { got_rec = BAMit_next(bgot); - if (!got_rec) { fprintf(stderr, "%s ended too soon\n", gotfile); failure++; return; } + if (!got_rec) { fprintf(stderr, "%s ended too soon\n", gotfile); failure++; break; } if (memcmp(got_rec->data, exp_rec->data, got_rec->l_data)) { failure++; break; diff --git a/test/t_sa.c b/test/t_sa.c new file mode 100644 index 00000000..c5493c25 --- /dev/null +++ b/test/t_sa.c @@ -0,0 +1,91 @@ +/* test/t_sa.c -- substitution_anlysis test cases. + + Copyright (C) 2021 Genome Research Ltd. + + Author: Jennifer Liddle + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . + +*/ + +#include +#include +#include +#include + +#include "bamit.h" +#include + +#define xMKNAME(d,f) #d f +#define MKNAME(d,f) xMKNAME(d,f) + +int main_substitution_anlysis(int argc, char *argv[]); + +const char * bambi_version(void) +{ + return "12.34"; +} + +int success = 0; +int failure = 0; + +void checkOutputFiles(char *tmpdir, char *gotfile, char *expectfile) +{ + char cmd[1024]; + sprintf(cmd,"diff %s/%s %s", tmpdir, gotfile, expectfile); + if (system(cmd)) { fprintf(stderr,"Command failed: %s\n",cmd); failure++; } +} + +int main(int argc, char**argv) +{ + int verbose = 0; + + int getopt_char; + while ((getopt_char = getopt(argc, argv, "v")) != -1) { + switch (getopt_char) { + case 'v': ++verbose; + break; + default: printf("usage: test_parse_args [-v]\n\n" + " -v verbose output\n" + ); + break; + } + } + + // Cleanup getopt + optind = 1; + + // create temp directory + char template[] = "/tmp/bambi.XXXXXX"; + char *TMPDIR = mkdtemp(template); + if (TMPDIR == NULL) { + fprintf(stderr,"Can't create temp directory\n"); + exit(1); + } else { + if (verbose) fprintf(stderr,"Created temporary directory: %s\n", TMPDIR); + } + + // minimal options + char cmd[2048]; + char prog[512]; + + sprintf(prog, "%s", "src/bambi substitution_analysis"); + + snprintf(cmd, sizeof(cmd), "%s -o %s/sa.txt %s", prog, TMPDIR, MKNAME(DATA_DIR,"/sa.bam")); + if (system(cmd)) { fprintf(stderr,"Command failed: %s\n",cmd); failure++; } + else checkOutputFiles(TMPDIR, "sa.txt", MKNAME(DATA_DIR,"/out/sa.txt")); + + printf("substitution_analysis tests: %s\n", failure ? "FAILED" : "Passed"); + return failure ? EXIT_FAILURE : EXIT_SUCCESS; +}