diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..ba37ce5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,38 @@ +# Control file for continuous integration testing at http://travis-ci.org/ + +language: c + +addons: + apt: + packages: + - liblzma-dev + +matrix: + include: + - os: linux + compiler: clang + - os: linux + compiler: gcc + # An unoptimised C99 build, for detecting non-static inline functions + - os: linux + compiler: gcc + env: CFLAGS="-std=gnu99 -O0" + - os: osx + compiler: gcc + +env: + global: + - HTSLIB=`pwd`/htslib + - HTSDIR=$HTSLIB/b + - SAMTOOLSDIR=samtools + - PATH=$SAMTOOLSDIR:$PATH + +install: + - .travis/clone ${HTSREPO:-git://github.com/samtools/htslib.git} $HTSLIB master + - .travis/clone ${HTSREPO:-git://github.com/samtools/samtools.git} $SAMTOOLSDIR master + +before_script: + - (cd $HTSLIB && autoreconf && mkdir b && ./configure --prefix=$HTSDIR && make && make install) + - (cd $SAMTOOLSDIR && autoconf && make) + +script: autoreconf -i && ./configure -V && ./configure --with-htslib=$HTSDIR && make -e && make -e check diff --git a/.travis/clone b/.travis/clone new file mode 100755 index 0000000..d978402 --- /dev/null +++ b/.travis/clone @@ -0,0 +1,14 @@ +#!/bin/sh +# Usage: .travis/clone REPOSITORY [DIR] [BRANCH] +# +# Creates a shallow clone, checking out the specified branch. If BRANCH is +# omitted or if there is no branch with that name, checks out origin/HEAD. + +repository=$1 +localdir=$2 +branch=$3 + +[ -n "$branch" ] && ref=$(git ls-remote --heads $repository $branch) + +set -x +git clone --depth=1 ${ref:+--branch=$branch} $repository $localdir diff --git a/Makefile b/Makefile deleted file mode 100644 index a3f25ca..0000000 --- a/Makefile +++ /dev/null @@ -1,129 +0,0 @@ -# Makefile for bambi, utilities for the Sequence Alignment/Map format. -# -# Copyright (C) 2016 Genome Research Ltd. -# -# 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 . -# -# This is @configure_input@ -# -# If you use configure, this file overrides variables and augments rules -# in the Makefile to reflect your configuration choices. If you don't run -# configure, the main Makefile contains suitable conservative defaults. - -CC = gcc -CFLAGS = -g -Wall -O0 -LDFLAGS = -LIBS = - -OBJS= bambi.o hts_addendum.o decode.o - -prefix = /usr/local -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -datarootdir = $(prefix)/share -mandir = $(datarootdir)/man -man1dir = $(mandir)/man1 - -MKDIR_P = mkdir -p -INSTALL = install -p -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) -m 644 -INSTALL_DIR = $(MKDIR_P) -m 755 - - -PROGRAMS = bambi - -BUILT_TEST_PROGRAMS = \ - test/decode/decode - -all: $(PROGRAMS) $(BUILT_TEST_PROGRAMS) - -# TODO Use configure or htslib.pc to add -rdynamic/-ldl conditionally -ALL_CPPFLAGS = -I. $(HTSLIB_CPPFLAGS) $(CPPFLAGS) -ALL_LDFLAGS = -rdynamic $(HTSLIB_LDFLAGS) $(LDFLAGS) -ALL_LIBS = -lz -ldl $(LIBS) - -# Usually config.mk and config.h are generated by running configure -# or config.status, but if those aren't used create defaults here. - -config.mk: - @sed -e '/^prefix/,/^LIBS/d;s/@Hsource@//;s/@Hinstall@/#/;s#@HTSDIR@#../htslib#g;s/@HTSLIB_CPPFLAGS@/-I$$(HTSDIR)/g;s/@CURSES_LIB@/-lcurses/g' config.mk.in > $@ - -include config.mk - - -PACKAGE_VERSION = 0.1 - -# If building from a Git repository, replace $(PACKAGE_VERSION) with the Git -# description of the working tree: either a release tag with the same value -# as $(PACKAGE_VERSION) above, or an exact description likely based on a tag. -# $(shell), :=, etc are GNU Make-specific. If you don't have GNU Make, -# comment out this conditional. -ifneq "$(wildcard .git)" "" -PACKAGE_VERSION := $(shell git describe --always --dirty) - -# Force version.h to be remade if $(PACKAGE_VERSION) has changed. -version.h: $(if $(wildcard version.h),$(if $(findstring "$(PACKAGE_VERSION)",$(shell cat version.h)),,force)) -endif - -# If you don't have GNU Make but are building from a Git repository, you may -# wish to replace this with a rule that always rebuilds version.h: -# version.h: force -# echo '#define SAMTOOLS_VERSION "`git describe --always --dirty`"' > $@ -version.h: - echo '#define VINES_VERSION "$(PACKAGE_VERSION)"' > $@ - -print-version: - @echo $(PACKAGE_VERSION) - - -.SUFFIXES: .c .o - -.c.o: - $(CC) $(CFLAGS) $(ALL_CPPFLAGS) -c -o $@ $< - - -bambi: $(OBJS) $(HTSLIB) - $(CC) -pthread $(ALL_LDFLAGS) -o $@ $(OBJS) $(HTSLIB_LIB) $(CURSES_LIB) -lm $(ALL_LIBS) - -decode.o: decode.c $(htslib_sam_h) $(htslib_khash_h) $(htslib_kstring_h) $(sam_opts_h) -bambi.o: bambi.c $(htslib_hts_h) version.h -hts_addendum.o: hts_addendum.h - -# test programs - -check test: bambi $(BUILT_TEST_PROGRAMS) - test/decode/decode - -test/decode/decode: test/decode/decode.o $(HTSLIB) - $(CC) -pthread $(ALL_LDFLAGS) -o $@ test/decode/decode.o hts_addendum.o $(HTSLIB_LIB) $(ALL_LIBS) - -test/decode/decode.o: test/decode/decode.c decode.o hts_addendum.o - - -install: $(PROGRAMS) $(BUILT_MISC_PROGRAMS) - $(INSTALL_DIR) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) - $(INSTALL_PROGRAM) $(PROGRAMS) $(MISC_PROGRAMS) $(DESTDIR)$(bindir) - $(INSTALL_DATA) samtools.1 misc/wgsim.1 $(DESTDIR)$(man1dir) - - - -clean: - -rm -f *.o misc/*.o test/*.o test/*/*.o version.h - -rm -f $(PROGRAMS) $(BUILT_TEST_PROGRAMS) - -distclean: clean - -rm -f config.cache config.log config.status - -.PHONY: all check test clean distclean install diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..8f0c75a --- /dev/null +++ b/Makefile.am @@ -0,0 +1,5 @@ +ACLOCAL_AMFLAGS= -I m4 +TESTS = test/posfile/t_posfile test/filterfile/t_filterfile test/bclfile/t_bclfile test/decode/t_decode test/i2b/t_i2b +SUBDIRS = src test/posfile test/bclfile test/filterfile test/decode test/i2b +dist_doc_DATA = README.md LICENSE +AM_COLOR_TESTS=always diff --git a/README.md b/README.md index f3d5c74..dbf5c81 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,20 @@ # bambi A set of programs to manipulate SAM/BAM/CRAM files, using HTSLIB + +to install: + + +clone into a local directory (eg 'bambi') + +cd bambi +autoreconf -i +configure --prefix= --with-htslib= + +(eg configure --prefix=/usr/local/bambi --with-htslib=/usr/local/htslib/1.3) + +make + +make check (to run tests) + + + diff --git a/config.mk b/config.mk index c03711f..e242dcc 100644 --- a/config.mk +++ b/config.mk @@ -24,8 +24,8 @@ # configure, the main Makefile contains suitable conservative defaults. -HTSDIR = /software/solexa/pkg/htslib/htslib-1.3 -### include $(HTSDIR)/src/htslib.mk +HTSDIR = ../htslib +include $(HTSDIR)/htslib.mk HTSLIB = $(HTSDIR)/libhts.a HTSLIB_LIB = $(HTSLIB) BGZIP = $(HTSDIR)/bin/bgzip diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..81bdf69 --- /dev/null +++ b/configure.ac @@ -0,0 +1,33 @@ +AC_INIT([bambi], m4_esyscmd_s([git describe --dirty --always --tags]), [js10@sanger.ac.uk]) +AC_ARG_VAR(HTSDIR,Directory to look for hts) +AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) +AC_PROG_CC + +LT_INIT + +AC_CONFIG_MACRO_DIR([m4]) + +AX_WITH_HTSLIB + +AC_CONFIG_HEADERS([config.h]) + +saved_CPPFLAGS="$CPPFLAGS" +saved_LDFLAGS="$LDFLAGS" +CPPFLAGS="$HTSLIB_CPPFLAGS" +LDFLAGS="$HTSLIB_LDFLAGS" +AC_CHECK_HEADERS([cram/sam_header.h]) +AC_CHECK_LIB([hts], [bam_aux_update_str], [AC_DEFINE([HAVE_BAM_AUX_UPDATE_STR],[1],[Does htslib contain bam_aux_update_str()?])]) +CPPFLAGS="$saved_CPPFLAGS" +LDFLAGS="$saved_LDFLAGS" + +AC_CONFIG_FILES([ + Makefile + src/Makefile + test/posfile/Makefile + test/bclfile/Makefile + test/filterfile/Makefile + test/decode/Makefile + test/i2b/Makefile +]) +AC_OUTPUT + diff --git a/m4/ax_with_htslib.m4 b/m4/ax_with_htslib.m4 new file mode 100644 index 0000000..4b025ec --- /dev/null +++ b/m4/ax_with_htslib.m4 @@ -0,0 +1,117 @@ +# +# SYNOPSIS +# +# AX_WITH_HTSLIB() +# +# DESCRIPTION +# +# This macro searches for the header files and libraries of a htslib +# (https://github.com/samtools/htslib) installation. If --with-htslib is specified +# without argument, or as --with-htslib=yes, a packaged (.deb or +# .rpm) installation is assumed and the default system paths will be +# searched. If --with-htslib=DIR is specified, a run-in-place htslib +# installation will be searched for in DIR. +# +# The system header and library paths will be used for run-in-place +# iRODS installation dependencies, in preference to the those +# dependencies provided by iRODS in its 'externals' directory +# because the latter cannot be determined reliably. +# +# The macro defines the symbol HAVE_HTSLIB if the library is found +# and the following output variables are set with AC_SUBST: +# +# HTSLIB_CPPFLAGS +# HTSLIB_LDFLAGS +# HTSLIB_LIBS +# +# You can use them like this in Makefile.am: +# +# AM_CPPFLAGS = $(HTSLIB_CPPFLAGS) +# AM_LDFLAGS = $(HTSLIB_LDFLAGS) +# library_la_LIBADD = $(HTSLIB_LIBS) +# program_LDADD = $(HTSLIB_LIBS) +# +# LICENSE +# +# Copyright (C) 2016, Genome Research Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +AC_DEFUN([AX_WITH_HTSLIB], [ + HTSLIB_HOME= + HTSLIB_CPPFLAGS= + HTSLIB_LDFLAGS= + HTSLIB_LIBS= + + saved_CPPFLAGS="$CPPFLAGS" + saved_LDFLAGS="$LDFLAGS" + saved_LIBS="$LIBS" + + AC_ARG_WITH([htslib], + [AS_HELP_STRING([--with-htslib[[=DIR]]], [select htslib directory])], [ + AS_IF([test "x$with_htslib" != "xno"], [ + + AS_IF([test "x$with_htslib" = "xyes"], [ + AC_MSG_CHECKING([for packaged htslib]) + CPPFLAGS="-I/usr/include/htslib $CPPFLAGS" + LDFLAGS="-L/usr/lib/htslib/externals $LDFLAGS" + ], [ + HTSLIB_HOME="$with_htslib" + CPPFLAGS="-I$HTSLIB_HOME/include $CPPFLAGS" + LDFLAGS="-L$HTSLIB_HOME/lib $LDFLAGS" + ]) + + LIBS="$HTSLIB_HOME/lib/libhts.a -lz -ldl -lbz2 -llzma -lpthread" + + AC_MSG_CHECKING([checking htslib version]) + AC_RUN_IFELSE([AC_LANG_PROGRAM([ + #include "htslib/hts.h" + #include + #include +#include + ], [ + char *v=strdup(hts_version()); + char *s = strtok(v,".-"); + int n = atoi(s) * 100000; + s = strtok(NULL,".-"); + if (s) n += atoi(s) * 1000; + s = strtok(NULL,".-"); + if (s) n += atoi(s) * 10; +printf(" n=%d ",n); + if(n>=103010) return 0; + else exit(-1); + ]) + ], [AC_MSG_RESULT([Ok])], + [AC_MSG_ERROR([htslib version must be 1.3.1 or greater])] + ) + + HTSLIB_CPPFLAGS="$CPPFLAGS" + HTSLIB_LDFLAGS="$LDFLAGS" + HTSLIB_LIBS="$LIBS" + + CPPFLAGS="$saved_CPPFLAGS" + LDFLAGS="$saved_LDFLAGS" + LIBS="$saved_LIBS" + + unset saved_CPPFLAGS + unset saved_LDFLAGS + unset saved_LIBS + + AC_SUBST([HTSLIB_HOME]) + AC_SUBST([HTSLIB_CPPFLAGS]) + AC_SUBST([HTSLIB_LDFLAGS]) + AC_SUBST([HTSLIB_LIBS]) + + ]) + ]) +]) diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..c4ce07e --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,7 @@ +AM_CPPFLAGS = $(HTSLIB_CPPFLAGS) +AM_LDFLAGS = -rdynamic $(HTSLIB_LDFLAGS) + +bin_PROGRAMS = bambi +bambi_SOURCES = bambi.c bclfile.c decode.c filterfile.c hts_addendum.c i2b.c posfile.c +bambi_CFLAGS = -I/usr/include/libxml2 +bambi_LDADD = $(HTSLIB_HOME)/lib/libhts.a -ldl -lxml2 -lz -llzma -lbz2 -lpthread diff --git a/bambi.c b/src/bambi.c similarity index 96% rename from bambi.c rename to src/bambi.c index c7b74e3..2de2f0c 100644 --- a/bambi.c +++ b/src/bambi.c @@ -25,8 +25,9 @@ along with this program. If not, see . #include #include #include + #include "htslib/hts.h" -#include "version.h" +#include "bambi.h" int main_decode(int argc, char *argv[]); int main_i2b(int argc, char *argv[]); @@ -34,7 +35,7 @@ int main_afilter(int argc, char *argv[]); const char *bambi_version() { - return VINES_VERSION; + return VERSION; } static void vprint_error_core(const char *subcommand, const char *format, va_list args, const char *extra) @@ -99,6 +100,7 @@ int main(int argc, char *argv[]) int ret = 0; if (strcmp(argv[1], "decode") == 0) ret = main_decode(argc-1, argv+1); + else if (strcmp(argv[1], "i2b") == 0) ret = main_i2b(argc-1, argv+1); else if (strcmp(argv[1], "--version") == 0) { printf( "bambi %s\n" "Using htslib %s\n" diff --git a/bambi.h b/src/bambi.h similarity index 97% rename from bambi.h rename to src/bambi.h index 2186585..1c87e17 100644 --- a/bambi.h +++ b/src/bambi.h @@ -22,6 +22,7 @@ along with this program. If not, see . #define __BAMBI_H__ #include "hts_addendum.h" +#include "config.h" const char *bambi_version(void); #endif diff --git a/src/bclfile.c b/src/bclfile.c new file mode 100644 index 0000000..b47a30e --- /dev/null +++ b/src/bclfile.c @@ -0,0 +1,146 @@ +/* bclfile.c + + Functions to read and parse an Illumina BCL file. + + Copyright (C) 2016 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 +#include +#include +#include +#include + +#include "bclfile.h" + +#define BCL_BASE_ARRAY "ACGT" +#define BCL_UNKNOWN_BASE 'N' + +/* + * Try to open the given bcl/scl file. + * If that doesn't work, try appending ".gz" and gzopen it + * If *that* doesn't work, return the error message in the errmsg field + */ +bclfile_t *bclfile_open(char *fname) +{ + bclfile_t *bclfile = calloc(1, sizeof(bclfile_t)); + bclfile->current_cluster = 0; + bclfile->total_clusters = 0; + bclfile->gzhandle = NULL; + bclfile->file_type = BCL; + bclfile->current_base = 0; + bclfile->filename = strdup(fname); + + // need to find if this is a BCL or SCL file + char *base = basename(fname); + char *ext = rindex(base,'.'); + if (ext) ext++; + if (strcmp(ext,"scl")==0) bclfile->file_type = SCL; + // FIXME: this isn't going to recognise a .scl.gz file as scl + // It will probably crash if it doesn't find an extention (ie ext==NULL) + + bclfile->fhandle = open(fname, O_RDONLY); + if (bclfile->fhandle == -1) { + char *gzfname = calloc(1,strlen(fname)+8); + strcpy(gzfname,fname); strcat(gzfname,".gz"); + bclfile->gzhandle = gzopen(gzfname,"r"); + if (bclfile->gzhandle == NULL) { + strcpy(gzfname,fname); strcat(gzfname,".bgzf"); + bclfile->gzhandle = gzopen(gzfname,"r"); + if (bclfile->gzhandle == NULL) { + bclfile->errmsg = strdup(strerror(errno)); + } + } else { + gzread(bclfile->gzhandle,(void *)&bclfile->total_clusters,4); + } + free(gzfname); + } else { + if (read(bclfile->fhandle, (void *)&bclfile->total_clusters, 4) < 0) { + fprintf(stderr,"failed to read total_clusters from bcl_file\n"); + exit(1); + } + } + + return bclfile; +} + +void bclfile_seek(bclfile_t *bcl, int cluster) +{ + if (bcl->gzhandle) { + gzseek(bcl->gzhandle, (z_off_t)(4 + cluster), SEEK_SET); + } else { + lseek(bcl->fhandle, (off_t)(4 + cluster), SEEK_SET); + } +} + +void bclfile_close(bclfile_t *bclfile) +{ + if (bclfile->gzhandle) { + gzclose(bclfile->gzhandle); + } else { + close(bclfile->fhandle); + } + free(bclfile->filename); + free(bclfile); +} + +int bclfile_next(bclfile_t *bcl) +{ + int i=0; + static unsigned char c = 0; + + if (bcl->current_base == 0) { + if (bcl->gzhandle) { + i = gzgetc(bcl->gzhandle); + if (i<0) return i; + c = i; + } else { + if (read(bcl->fhandle, (void *)&c, 1) != 1) return -1; + } + } + + if (bcl->file_type == SCL) { + int baseIndex = 0; + switch (bcl->current_base) { + case 0: baseIndex = (c >> 6) & 0x03; break; + case 1: baseIndex = (c >> 4) & 0x03; break; + case 2: baseIndex = (c >> 2) & 0x03; break; + case 3: baseIndex = c & 0x03; break; + } + bcl->base = BCL_BASE_ARRAY[baseIndex]; + bcl->current_base++; + if (bcl->current_base > 3) bcl->current_base = 0; + } else { + int baseIndex = c & 0x03; // last two bits + bcl->quality = (c & 0xfc) >> 2; // rest of bits + if (bcl->quality) { + bcl->base = BCL_BASE_ARRAY[baseIndex]; + } else { + bcl->base = BCL_UNKNOWN_BASE; + } + } + + if (bcl->current_base == 0) bcl->current_cluster++; + return 0; +} + diff --git a/src/bclfile.h b/src/bclfile.h new file mode 100644 index 0000000..f694f57 --- /dev/null +++ b/src/bclfile.h @@ -0,0 +1,48 @@ +/* bclfile.h + + Copyright (C) 2016 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 . +*/ + +#ifndef __BCLFILE_H__ +#define __BCLFILE_H__ + +#include +#include + +typedef enum { BCL, SCL } BCL_FILE_TYPE; + +typedef struct { + BCL_FILE_TYPE file_type; + int fhandle; + gzFile gzhandle; + char *errmsg; + uint32_t total_clusters; + int current_cluster; + int current_base; + char base; + int quality; +char *filename; +} bclfile_t; + +bclfile_t *bclfile_open(char *fname); +int bclfile_next(bclfile_t *bclfile); +void bclfile_close(bclfile_t *bclfile); +void bclfile_seek(bclfile_t *bclfile, int cluster); + +#endif + diff --git a/src/cram/cram_samtools.h b/src/cram/cram_samtools.h new file mode 100755 index 0000000..635e2e0 --- /dev/null +++ b/src/cram/cram_samtools.h @@ -0,0 +1,105 @@ +/* +Copyright (c) 2010-2013 Genome Research Ltd. +Author: James Bonfield + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + + 2. 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. + + 3. Neither the names Genome Research Ltd and Wellcome Trust Sanger +Institute 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 GENOME RESEARCH LTD AND CONTRIBUTORS "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 GENOME RESEARCH LTD OR CONTRIBUTORS 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. +*/ + +#ifndef _CRAM_SAMTOOLS_H_ +#define _CRAM_SAMTOOLS_H_ + +/* Samtools compatible API */ +#define bam_blk_size(b) ((b)->l_data) +#define bam_set_blk_size(b,v) ((b)->data_len = (v)) + +#define bam_ref(b) (b)->core.tid +#define bam_pos(b) (b)->core.pos +#define bam_mate_pos(b) (b)->core.mpos +#define bam_mate_ref(b) (b)->core.mtid +#define bam_ins_size(b) (b)->core.isize +#define bam_seq_len(b) (b)->core.l_qseq +#define bam_cigar_len(b) (b)->core.n_cigar +#define bam_flag(b) (b)->core.flag +#define bam_bin(b) (b)->core.bin +#define bam_map_qual(b) (b)->core.qual +#define bam_name_len(b) (b)->core.l_qname +#define bam_name(b) bam_get_qname((b)) +#define bam_qual(b) bam_get_qual((b)) +#define bam_seq(b) bam_get_seq((b)) +#define bam_cigar(b) bam_get_cigar((b)) +#define bam_aux(b) bam_get_aux((b)) + +#define bam_dup(b) bam_copy1(bam_init1(), (b)) + +#define bam_free(b) bam_destroy1((b)) + +#define bam_reg2bin(beg,end) hts_reg2bin((beg),(end),14,5) + +#include "htslib/sam.h" + +enum cigar_op { + BAM_CMATCH_=BAM_CMATCH, + BAM_CINS_=BAM_CINS, + BAM_CDEL_=BAM_CDEL, + BAM_CREF_SKIP_=BAM_CREF_SKIP, + BAM_CSOFT_CLIP_=BAM_CSOFT_CLIP, + BAM_CHARD_CLIP_=BAM_CHARD_CLIP, + BAM_CPAD_=BAM_CPAD, + BAM_CBASE_MATCH=BAM_CEQUAL, + BAM_CBASE_MISMATCH=BAM_CDIFF +}; + +typedef bam1_t bam_seq_t; + +#include "cram/sam_header.h" + +#ifdef __cplusplus +extern "C" { +#endif + +bam_hdr_t *cram_header_to_bam(SAM_hdr *h); +SAM_hdr *bam_header_to_cram(bam_hdr_t *h); + +int bam_construct_seq(bam_seq_t **bp, size_t extra_len, + const char *qname, size_t qname_len, + int flag, + int rname, // Ref ID + int pos, + int end, // aligned start/end coords + int mapq, + uint32_t ncigar, const uint32_t *cigar, + int mrnm, // Mate Ref ID + int mpos, + int isize, + int len, + const char *seq, + const char *qual); + +#ifdef __cplusplus +} +#endif + +#endif /* _CRAM_SAMTOOLS_H_ */ diff --git a/src/cram/pooled_alloc.h b/src/cram/pooled_alloc.h new file mode 100755 index 0000000..e19e320 --- /dev/null +++ b/src/cram/pooled_alloc.h @@ -0,0 +1,64 @@ +/* +Copyright (c) 2009 Genome Research Ltd. +Author: Rob Davies + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + + 2. 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. + + 3. Neither the names Genome Research Ltd and Wellcome Trust Sanger +Institute 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 GENOME RESEARCH LTD AND CONTRIBUTORS "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 GENOME RESEARCH LTD OR CONTRIBUTORS 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. +*/ + +#ifndef _POOLED_ALLOC_H_ +#define _POOLED_ALLOC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Implements a pooled block allocator where all items are the same size, + * but we need many of them. + */ +typedef struct { + void *pool; + size_t used; +} pool_t; + +typedef struct { + size_t dsize; + size_t psize; + size_t npools; + pool_t *pools; + void *free; +} pool_alloc_t; + +pool_alloc_t *pool_create(size_t dsize); +void pool_destroy(pool_alloc_t *p); +void *pool_alloc(pool_alloc_t *p); +void pool_free(pool_alloc_t *p, void *ptr); + +#ifdef __cplusplus +} +#endif + +#endif /*_POOLED_ALLOC_H_*/ diff --git a/src/cram/sam_header.h b/src/cram/sam_header.h new file mode 100755 index 0000000..e312df4 --- /dev/null +++ b/src/cram/sam_header.h @@ -0,0 +1,459 @@ +/* +Copyright (c) 2013-2014 Genome Research Ltd. +Author: James Bonfield + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + + 2. 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. + + 3. Neither the names Genome Research Ltd and Wellcome Trust Sanger +Institute 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 GENOME RESEARCH LTD AND CONTRIBUTORS "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 GENOME RESEARCH LTD OR CONTRIBUTORS 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. +*/ + +/*! \file + * SAM header parsing. + * + * These functions can be shared between SAM, BAM and CRAM file + * formats as all three internally use the same string encoding for + * header fields. + */ + +/* + * TODO. + * + * - Sort order (parse to struct, enum type, updating funcs) + * - Removal of lines. + * - Updating of lines + */ + +#ifndef _SAM_HDR_H_ +#define _SAM_HDR_H_ + +#include + +#include "cram/string_alloc.h" +#include "cram/pooled_alloc.h" + +#include "htslib/khash.h" +#include "htslib/kstring.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// For structure assignment. Eg kstring_t s = KS_INITIALIZER; +#define KS_INITIALIZER {0,0,0} + +// For initialisation elsewhere. Eg KS_INIT(x->str); +#define KS_INIT(ks) ((ks)->l = 0, (ks)->m = 0, (ks)->s = NULL) + +// Frees the string subfield only. Assumes 's' itself is static. +#define KS_FREE(ks) do { if ((ks)->s) free((ks)->s); } while(0) + +/* + * Proposed new SAM header parsing + +1 @SQ ID:foo LN:100 +2 @SQ ID:bar LN:200 +3 @SQ ID:ram LN:300 UR:xyz +4 @RG ID:r ... +5 @RG ID:s ... + +Hash table for 2-char @keys without dup entries. +If dup lines, we form a circular linked list. Ie hash keys = {RG, SQ}. + +HASH("SQ")--\ + | + (3) <-> 1 <-> 2 <-> 3 <-> (1) + +HASH("RG")--\ + | + (5) <-> 4 <-> 5 <-> (4) + +Items stored in the hash values also form their own linked lists: +Ie SQ->ID(foo)->LN(100) + SQ->ID(bar)->LN(200) + SQ->ID(ram)->LN(300)->UR(xyz) + RG->ID(r) + */ + +/*! A single key:value pair on a header line + * + * These form a linked list and hold strings. The strings are + * allocated from a string_alloc_t pool referenced in the master + * SAM_hdr structure. Do not attempt to free, malloc or manipulate + * these strings directly. + */ +typedef struct SAM_hdr_tag_s { + struct SAM_hdr_tag_s *next; + char *str; + int len; +} SAM_hdr_tag; + +/*! The parsed version of the SAM header string. + * + * Each header type (SQ, RG, HD, etc) points to its own SAM_hdr_type + * struct via the main hash table h in the SAM_hdr struct. + * + * These in turn consist of circular bi-directional linked lists (ie + * rings) to hold the multiple instances of the same header type + * code. For example if we have 5 \@SQ lines the primary hash table + * will key on \@SQ pointing to the first SAM_hdr_type and that in turn + * will be part of a ring of 5 elements. + * + * For each SAM_hdr_type structure we also point to a SAM_hdr_tag + * structure which holds the tokenised attributes; the tab separated + * key:value pairs per line. + */ +typedef struct SAM_hdr_item_s { + struct SAM_hdr_item_s *next; // cirular + struct SAM_hdr_item_s *prev; + SAM_hdr_tag *tag; // first tag + int order; // 0 upwards +} SAM_hdr_type; + +/*! Parsed \@SQ lines */ +typedef struct { + char *name; + uint32_t len; + SAM_hdr_type *ty; + SAM_hdr_tag *tag; +} SAM_SQ; + +/*! Parsed \@RG lines */ +typedef struct { + char *name; + SAM_hdr_type *ty; + SAM_hdr_tag *tag; + int name_len; + int id; // numerical ID +} SAM_RG; + +/*! Parsed \@PG lines */ +typedef struct { + char *name; + SAM_hdr_type *ty; + SAM_hdr_tag *tag; + int name_len; + int id; // numerical ID + int prev_id; // -1 if none +} SAM_PG; + +/*! Sort order parsed from @HD line */ +enum sam_sort_order { + ORDER_UNKNOWN =-1, + ORDER_UNSORTED = 0, + ORDER_NAME = 1, + ORDER_COORD = 2, + //ORDER_COLLATE = 3 // maybe one day! +}; + +KHASH_MAP_INIT_INT(sam_hdr, SAM_hdr_type*) +KHASH_MAP_INIT_STR(m_s2i, int) + +/*! Primary structure for header manipulation + * + * The initial header text is held in the text kstring_t, but is also + * parsed out into SQ, RG and PG arrays. These have a hash table + * associated with each to allow lookup by ID or SN fields instead of + * their numeric array indices. Additionally PG has an array to hold + * the linked list start points (the last in a PP chain). + * + * Use the appropriate sam_hdr_* functions to edit the header, and + * call sam_hdr_rebuild() any time the textual form needs to be + * updated again. + */ +typedef struct { + kstring_t text; //!< concatenated text, indexed by SAM_hdr_tag + khash_t(sam_hdr) *h; + string_alloc_t *str_pool; //!< Pool of SAM_hdr_tag->str strings + pool_alloc_t *type_pool;//!< Pool of SAM_hdr_type structs + pool_alloc_t *tag_pool; //!< Pool of SAM_hdr_tag structs + + // @SQ lines / references + int nref; //!< Number of \@SQ lines + SAM_SQ *ref; //!< Array of parsed \@SQ lines + khash_t(m_s2i) *ref_hash; //!< Maps SQ SN field to sq[] index + + // @RG lines / read-groups + int nrg; //!< Number of \@RG lines + SAM_RG *rg; //!< Array of parsed \@RG lines + khash_t(m_s2i) *rg_hash; //!< Maps RG ID field to rg[] index + + // @PG lines / programs + int npg; //!< Number of \@PG lines + int npg_end; //!< Number of terminating \@PG lines + int npg_end_alloc; //!< Size of pg_end field + SAM_PG *pg; //!< Array of parsed \@PG lines + khash_t(m_s2i) *pg_hash; //!< Maps PG ID field to pg[] index + int *pg_end; //!< \@PG chain termination IDs + + // @HD data + enum sam_sort_order sort_order; //!< @HD SO: field + + // @cond internal + char ID_buf[1024]; // temporary buffer + int ID_cnt; + int ref_count; // number of uses of this SAM_hdr + // @endcond +} SAM_hdr; + +/*! Creates an empty SAM header, ready to be populated. + * + * @return + * Returns a SAM_hdr struct on success (free with sam_hdr_free()) + * NULL on failure + */ +SAM_hdr *sam_hdr_new(void); + +/*! Tokenises a SAM header into a hash table. + * + * Also extracts a few bits on specific data types, such as @RG lines. + * + * @return + * Returns a SAM_hdr struct on success (free with sam_hdr_free()); + * NULL on failure + */ +SAM_hdr *sam_hdr_parse_(const char *hdr, int len); + + +/*! Produces a duplicate copy of hdr and returns it. + * @return + * Returns NULL on failure + */ +SAM_hdr *sam_hdr_dup(SAM_hdr *hdr); + + +/*! Increments a reference count on hdr. + * + * This permits multiple files to share the same header, all calling + * sam_hdr_free when done, without causing errors for other open files. + */ +void sam_hdr_incr_ref(SAM_hdr *hdr); + + +/*! Increments a reference count on hdr. + * + * This permits multiple files to share the same header, all calling + * sam_hdr_free when done, without causing errors for other open files. + * + * If the reference count hits zero then the header is automatically + * freed. This makes it a synonym for sam_hdr_free(). + */ +void sam_hdr_decr_ref(SAM_hdr *hdr); + + +/*! Deallocates all storage used by a SAM_hdr struct. + * + * This also decrements the header reference count. If after decrementing + * it is still non-zero then the header is assumed to be in use by another + * caller and the free is not done. + * + * This is a synonym for sam_hdr_dec_ref(). + */ +void sam_hdr_free(SAM_hdr *hdr); + +/*! Returns the current length of the SAM_hdr in text form. + * + * Call sam_hdr_rebuild() first if editing has taken place. + */ +int sam_hdr_length(SAM_hdr *hdr); + +/*! Returns the string form of the SAM_hdr. + * + * Call sam_hdr_rebuild() first if editing has taken place. + */ +char *sam_hdr_str(SAM_hdr *hdr); + +/*! Appends a formatted line to an existing SAM header. + * + * Line is a full SAM header record, eg "@SQ\tSN:foo\tLN:100", with + * optional new-line. If it contains more than 1 line then multiple lines + * will be added in order. + * + * Input text is of maximum length len or as terminated earlier by a NUL. + * Len may be 0 if unknown, in which case lines must be NUL-terminated. + * + * @return + * Returns 0 on success; + * -1 on failure + */ +int sam_hdr_add_lines(SAM_hdr *sh, const char *lines, int len); + +/*! Adds a single line to a SAM header. + * + * Specify type and one or more key,value pairs, ending with the NULL key. + * Eg. sam_hdr_add(h, "SQ", "ID", "foo", "LN", "100", NULL). + * + * @return + * Returns 0 on success; + * -1 on failure + */ +int sam_hdr_add(SAM_hdr *sh, const char *type, ...); + +/*! Adds a single line to a SAM header. + * + * This is much like sam_hdr_add() but with the additional va_list + * argument. This is followed by specifying type and one or more + * key,value pairs, ending with the NULL key. + * + * Eg. sam_hdr_vadd(h, "SQ", args, "ID", "foo", "LN", "100", NULL). + * + * The purpose of the additional va_list parameter is to permit other + * varargs functions to call this while including their own additional + * parameters; an example is in sam_hdr_add_PG(). + * + * Note: this function invokes va_arg at least once, making the value + * of ap indeterminate after the return. The caller should call + * va_start/va_end before/after calling this function or use va_copy. + * + * @return + * Returns 0 on success; + * -1 on failure + */ +int sam_hdr_vadd(SAM_hdr *sh, const char *type, va_list ap, ...); + +/*! + * @return + * Returns the first header item matching 'type'. If ID is non-NULL it checks + * for the tag ID: and compares against the specified ID. + * + * Returns NULL if no type/ID is found + */ +SAM_hdr_type *sam_hdr_find(SAM_hdr *hdr, char *type, + char *ID_key, char *ID_value); + +/*! + * + * As per SAM_hdr_type, but returns a complete line of formatted text + * for a specific head type/ID combination. If ID is NULL then it returns + * the first line of the specified type. + * + * The returned string is malloced and should be freed by the calling + * function with free(). + * + * @return + * Returns NULL if no type/ID is found. + */ +char *sam_hdr_find_line(SAM_hdr *hdr, char *type, + char *ID_key, char *ID_value); + +/*! Looks for a specific key in a single sam header line. + * + * If prev is non-NULL it also fills this out with the previous tag, to + * permit use in key removal. *prev is set to NULL when the tag is the first + * key in the list. When a tag isn't found, prev (if non NULL) will be the last + * tag in the existing list. + * + * @return + * Returns the tag pointer on success; + * NULL on failure + */ +SAM_hdr_tag *sam_hdr_find_key(SAM_hdr *sh, + SAM_hdr_type *type, + char *key, + SAM_hdr_tag **prev); + +/*! Adds or updates tag key,value pairs in a header line. + * + * Eg for adding M5 tags to @SQ lines or updating sort order for the + * @HD line (although use the sam_hdr_sort_order() function for + * HD manipulation, which is a wrapper around this funuction). + * + * Specify multiple key,value pairs ending in NULL. + * + * @return + * Returns 0 on success; + * -1 on failure + */ +int sam_hdr_update(SAM_hdr *hdr, SAM_hdr_type *type, ...); + +/*! Returns the sort order from the @HD SO: field */ +enum sam_sort_order sam_hdr_sort_order(SAM_hdr *hdr); + +/*! Reconstructs the kstring from the header hash table. + * @return + * Returns 0 on success; + * -1 on failure + */ +int sam_hdr_rebuild(SAM_hdr *hdr); + +/*! Looks up a reference sequence by name and returns the numerical ID. + * @return + * Returns -1 if unknown reference. + */ +int sam_hdr_name2ref(SAM_hdr *hdr, const char *ref); + +/*! Looks up a read-group by name and returns a pointer to the start of the + * associated tag list. + * + * @return + * Returns NULL on failure + */ +SAM_RG *sam_hdr_find_rg(SAM_hdr *hdr, const char *rg); + +/*! Fixes any PP links in @PG headers. + * + * If the entries are in order then this doesn't need doing, but incase + * our header is out of order this goes through the sh->pg[] array + * setting the prev_id field. + * + * @return + * Returns 0 on sucess; + * -1 on failure (indicating broken PG/PP records) + */ +int sam_hdr_link_pg(SAM_hdr *hdr); + + +/*! Add an @PG line. + * + * If we wish complete control over this use sam_hdr_add() directly. This + * function uses that, but attempts to do a lot of tedious house work for + * you too. + * + * - It will generate a suitable ID if the supplied one clashes. + * - It will generate multiple @PG records if we have multiple PG chains. + * + * Call it as per sam_hdr_add() with a series of key,value pairs ending + * in NULL. + * + * @return + * Returns 0 on success; + * -1 on failure + */ +int sam_hdr_add_PG(SAM_hdr *sh, const char *name, ...); + +/*! + * A function to help with construction of CL tags in @PG records. + * Takes an argc, argv pair and returns a single space-separated string. + * This string should be deallocated by the calling function. + * + * @return + * Returns malloced char * on success; + * NULL on failure + */ +char *stringify_argv(int argc, char *argv[]); + +#ifdef __cplusplus +} +#endif + +#endif /* _SAM_HDR_H_ */ diff --git a/src/cram/string_alloc.h b/src/cram/string_alloc.h new file mode 100755 index 0000000..e044673 --- /dev/null +++ b/src/cram/string_alloc.h @@ -0,0 +1,68 @@ +/* +Copyright (c) 2010 Genome Research Ltd. +Author: Andrew Whitwham + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + + 2. 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. + + 3. Neither the names Genome Research Ltd and Wellcome Trust Sanger +Institute 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 GENOME RESEARCH LTD AND CONTRIBUTORS "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 GENOME RESEARCH LTD OR CONTRIBUTORS 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. +*/ + +#ifndef _STRING_ALLOC_H_ +#define _STRING_ALLOC_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A pooled string allocator intended to cut down on the + * memory overhead of many small string allocations. + * + * Andrew Whitwham, September 2010. + */ + +typedef struct { + char *str; + size_t used; +} string_t; + +typedef struct { + size_t max_length; + size_t nstrings; + string_t *strings; +} string_alloc_t; + +string_alloc_t *string_pool_create(size_t max_length); +void string_pool_destroy(string_alloc_t *a_str); +char *string_alloc(string_alloc_t *a_str, size_t length); +char *string_dup(string_alloc_t *a_str, char *instr); +char *string_ndup(string_alloc_t *a_str, char *instr, size_t len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/decode.c b/src/decode.c similarity index 98% rename from decode.c rename to src/decode.c index cb7eb96..cda8fcf 100644 --- a/decode.c +++ b/src/decode.c @@ -105,7 +105,7 @@ void bc_push(bc_array_t *bc, bc_details_t *bcd) if (bc->end == bc->max) { // expand the array bc->max *= 2; - bc->entries = realloc(bc->entries, bc->max * sizeof(bc_details_t)); + bc->entries = realloc(bc->entries, bc->max * sizeof(bc_details_t *)); } bc->entries[bc->end] = bcd; bc->end++; @@ -133,7 +133,7 @@ bc_array_t *bc_init(void) bc->end = 0; bc->max = 100; bc->tag_len = 0; - bc->entries = calloc(bc->max, sizeof(bc_details_t)); + bc->entries = calloc(bc->max, sizeof(bc_details_t *)); // initialise first entry for null metrics bc_details_t *bcd = calloc(1, sizeof(bc_details_t)); @@ -342,8 +342,8 @@ int writeMetrics(bc_array_t *barcodeArray, opts_t *opts) int total_reads = bcd->reads; int total_pf_reads = bcd->pf_reads; int total_pf_reads_assigned = 0; - int max_reads = bcd->reads; - int max_pf_reads = bcd->pf_reads; + int max_reads = 0; + int max_pf_reads = 0; int nReads = 0; int n; @@ -754,10 +754,13 @@ int processRecord(samFile *input_file, bam_hdr_t *input_header, samFile *output_ newseq = checkBarcodeQuality(seq,qual,opts->max_low_quality_to_convert); } } + if (strlen(seq) > barcodeArray->tag_len) { + newseq[barcodeArray->tag_len] = 0; // truncate seq to barcode length + } name = findBarcodeName(newseq,barcodeArray,opts,!(file_read->core.flag & BAM_FQCFAIL)); if (!name) name = "0"; char * newtag = makeNewTag(file_read,"RG",name); - bam_aux_update_str(file_read,"RG",strlen(newtag)+1,(uint8_t*)newtag); + bam_aux_update_str(file_read,"RG",strlen(newtag)+1, newtag); free(newtag); if (opts->change_read_name) add_suffix(file_read, name); free(newseq); @@ -772,7 +775,7 @@ int processRecord(samFile *input_file, bam_hdr_t *input_header, samFile *output_ r = sam_read1(input_file, input_header, paired_read); if (p) { char *newtag = makeNewTag(paired_read,"RG",name); - bam_aux_update_str(paired_read,"RG",strlen(newtag)+1,(uint8_t*)newtag); + bam_aux_update_str(paired_read,"RG",strlen(newtag)+1,newtag); free(newtag); } if (opts->change_read_name) add_suffix(paired_read, name); @@ -867,7 +870,7 @@ static int decode(opts_t* opts) /* * Process each BAM record, collecting metrics as we go */ - while (0 == processRecord(input_file, input_header, output_file, output_header, barcodeArray, opts)) + while (0 == processRecord(input_file, input_header, output_file, output_header, barcodeArray, opts)); /* * And finally.....the metrics diff --git a/src/filterfile.c b/src/filterfile.c new file mode 100644 index 0000000..d1dfb48 --- /dev/null +++ b/src/filterfile.c @@ -0,0 +1,87 @@ +/* filterfile.c + + Functions to read and parse an Illumina filter file. + + Copyright (C) 2016 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 +#include +#include +#include + +#include "filterfile.h" + +filter_t *filter_open(char *fname) +{ + uint32_t empty; + + filter_t *filter = calloc(1, sizeof(filter_t)); + filter->total_clusters = 0; + filter->current_cluster = 0; + filter->current_pf_cluster = 0; + filter->fhandle = open(fname,O_RDONLY); + if (filter->fhandle == -1) { + filter->errmsg = strdup(strerror(errno)); + } else { + int n; + n = read(filter->fhandle,(void *)&empty,4); + n = read(filter->fhandle,(void *)&filter->version,4); + n = read(filter->fhandle,(void *)&filter->total_clusters,4); + if (n<0) { + fprintf(stderr,"failed to read header from %s\n", fname); + exit(1); + } + } + return filter; +} + +void filter_close(filter_t *filter) +{ + close(filter->fhandle); + free(filter); +} + +void filter_seek(filter_t *filter, int cluster) +{ + off_t pos = 12 + cluster; + off_t n =lseek(filter->fhandle, pos, SEEK_SET); + if (n != pos) { + fprintf(stderr,"filter_seek(%d) failed: returned %d instead of %d\n", cluster, (int)n, (int)pos); + exit(1); + } +} + +int filter_next(filter_t *filter) +{ + unsigned char next; + + if (read(filter->fhandle, (void *)&next, 1) != 1) { + return -1; + } + + filter->current_cluster++; + next = next & 0x01; + if (next == 1) filter->current_pf_cluster++; + return next; +} + diff --git a/src/filterfile.h b/src/filterfile.h new file mode 100644 index 0000000..fc6a8f0 --- /dev/null +++ b/src/filterfile.h @@ -0,0 +1,41 @@ +/* filter.h + + Copyright (C) 2016 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 . +*/ + +#ifndef __FILTERFILE_H__ +#define __FILTERFILE_H__ + +#include + +typedef struct { + int fhandle; + char *errmsg; + uint32_t version; + uint32_t total_clusters; + int current_cluster; + int current_pf_cluster; +} filter_t; + +filter_t *filter_open(char *fname); +int filter_next(filter_t *filter); +void filter_close(filter_t *filter); +void filter_seek(filter_t *filter, int cluster); + +#endif + diff --git a/hts_addendum.c b/src/hts_addendum.c similarity index 90% rename from hts_addendum.c rename to src/hts_addendum.c index fcdfd90..8602dc3 100644 --- a/hts_addendum.c +++ b/src/hts_addendum.c @@ -25,9 +25,11 @@ along with this program. If not, see . #include #include +#include "bambi.h" #include "hts_addendum.h" -int bam_aux_update_str(bam1_t *b, const char tag[2], int len, uint8_t *data) +#ifndef HAVE_BAM_AUX_UPDATE_STR +int bam_aux_update_str(bam1_t *b, const char tag[2], int len, const char *data) { uint8_t *s = bam_aux_get(b,tag); if (!s) return -1; @@ -40,9 +42,11 @@ int bam_aux_update_str(bam1_t *b, const char tag[2], int len, uint8_t *data) b->l_data += 3 + len; if (b->m_data < b->l_data) { + ptrdiff_t s_offset = (ptrdiff_t) (s - b->m_data); b->m_data = b->l_data; kroundup32(b->m_data); b->data = (uint8_t*)realloc(b->data, b->m_data); + s = (uint8_t *) (b->m_data + s_offset); } memmove(s+3+len, s, l_aux - (s - aux)); s[0] = tag[0]; @@ -51,7 +55,7 @@ int bam_aux_update_str(bam1_t *b, const char tag[2], int len, uint8_t *data) memmove(s+3,data,len); return 0; } - +#endif SAM_hdr *sam_hdr_del(SAM_hdr *hdr, char *type, char *ID_key, char *ID_value) { int i,n; diff --git a/hts_addendum.h b/src/hts_addendum.h similarity index 89% rename from hts_addendum.h rename to src/hts_addendum.h index e78f8c2..dc14221 100644 --- a/hts_addendum.h +++ b/src/hts_addendum.h @@ -25,8 +25,9 @@ along with this program. If not, see . #include "htslib/sam.h" #include "cram/sam_header.h" +#include "cram/cram_samtools.h" -int bam_aux_update_str(bam1_t *b, const char tag[2], int len, uint8_t *data); +int bam_aux_update_str(bam1_t *b, const char tag[2], int len, const char *data); SAM_hdr * sam_hdr_del(SAM_hdr *hdr, char *type, char *ID_key, char *ID_value); #endif diff --git a/src/i2b.c b/src/i2b.c new file mode 100644 index 0000000..7cafd4d --- /dev/null +++ b/src/i2b.c @@ -0,0 +1,1508 @@ +/* i2b.c -- index i2br subcommand. + + Copyright (C) 2016 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. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ + +#include "bambi.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "posfile.h" +#include "filterfile.h" +#include "bclfile.h" + +#define DEFAULT_BARCODE_TAG "BC" +#define DEFAULT_QUALITY_TAG "QT" + +char *strptime(const char *s, const char *format, struct tm *tm); + +/* + * index array type + */ +typedef struct { + int end; + int max; + int *entries; +} ia_t; + +/* + * structure to hold options + */ +typedef struct { + int verbose; + char *argv_list; + char *run_folder; + char *intensity_dir; + char *basecalls_dir; + int lane; + char *output_file; + char *output_fmt; + char compression_level; + bool generate_secondary_basecalls; + bool no_filter; + char *read_group_id; + char *sample_alias; + char *library_name; + char *study_name; + char *platform_unit; + char *run_start_date; + char *sequencing_centre; + char *platform; + int first_tile; + int tile_limit; + char *barcode_tag; + char *quality_tag; + char *barcode_tag2; + char *quality_tag2; + int bc_read; + int sec_bc_read; + ia_t *first_cycle; + ia_t *final_cycle; + ia_t *first_index_cycle; + ia_t *final_index_cycle; + bool add_cluster_index_tag; + xmlDocPtr intensityConfig; + xmlDocPtr basecallsConfig; + xmlDocPtr parametersConfig; + xmlDocPtr runinfoConfig; +} opts_t; + + +// +// TODO +// These array handling functions really need to go into a separate module, with seperate tests +// + +/* + * integer array functions + */ + +int ia_compare(const void *ia1, const void *ia2) +{ + return *(int *)ia1 - *(int *)ia2; +} + +void ia_sort(ia_t *ia) +{ + qsort(ia->entries, ia->end, sizeof(int), ia_compare); +} + +bool ia_isEmpty(ia_t *ia) { + return (ia->end == 0); +} + +void ia_push(ia_t *ia, int i) +{ + if (ia->end == ia->max) { + // expand the array + ia->max *= 2; + ia->entries = realloc(ia->entries, ia->max * sizeof(int)); + } + ia->entries[ia->end] = i; + ia->end++; +} + +void ia_free(ia_t *ia) +{ + free(ia->entries); + free(ia); +} + +ia_t *ia_init(int max) +{ + ia_t *ia = calloc(1, sizeof(ia_t)); + ia->end = 0; + ia->max = max; + ia->entries = calloc(ia->max, sizeof(int)); + return ia; +} + +/* + * Cycle range array + */ + +typedef struct { + char *readname; + int first, last; +} cycleRangeEntry_t; + +void freeCycleRange(void *ent) +{ + cycleRangeEntry_t *cr = (cycleRangeEntry_t *)ent; + free(cr->readname); + free(cr); +} + +/* + * generic arrays + * TODO: this should probably go into a seperate module + */ +typedef struct { + int end; + int max; + void (*free_entry)(void *); + void **entries; +} va_t; + +va_t *va_init(int max, void(*free_entry)(void*)) +{ + va_t *va = calloc(1,sizeof(va_t)); + va->end = 0; + va->max = max; + va->free_entry = free_entry; + va->entries = calloc(va->max, sizeof(void *)); + return va; +} + +void va_push(va_t *va, void *ent) +{ + if (va->end == va->max) { + // expand the array + va->max *= 2; + va->entries = realloc(va->entries, va->max * sizeof(void *)); + } + va->entries[va->end] = ent; + va->end++; +} + +bool va_isEmpty(va_t *va) +{ + return va->end == 0; +} + +void va_free(va_t *va) +{ + int n; + if (!va) return; + for (n=0; n < va->end; n++) { + va->free_entry(va->entries[n]); + } + free(va->entries); + free(va); +} + +/* + * BCL Read and File arrays + */ +typedef struct { + char *readname; + va_t *bclFileArray; + va_t *sclFileArray; +} bclReadArrayEntry_t; + +typedef struct { + bclfile_t *bcl; +} bclFileArrayEntry_t; + +void freeBCLFileArray(void *ent) +{ + bclfile_t *bcl = (bclfile_t *)ent; + bclfile_close(bcl); +} + +void freeBCLReadArray(void *ent) +{ + bclReadArrayEntry_t *ra = (bclReadArrayEntry_t *)ent; + free(ra->readname); + va_free(ra->bclFileArray); + va_free(ra->sclFileArray); + free(ra); +} + +typedef struct { + int tile; + int clusters; +} tileIndexEntry_t; + +void freetileIndexArray(void *ent) +{ + free(ent); +} + +/* + * Release all the options + */ + +static void free_opts(opts_t* opts) +{ + if (!opts) return; + free(opts->run_folder); + free(opts->intensity_dir); + free(opts->basecalls_dir); + free(opts->argv_list); + free(opts->output_file); + free(opts->output_fmt); + free(opts->read_group_id); + free(opts->sample_alias); + free(opts->library_name); + free(opts->study_name); + free(opts->platform_unit); + free(opts->run_start_date); + free(opts->sequencing_centre); + free(opts->platform); + free(opts->barcode_tag); + free(opts->quality_tag); + free(opts->barcode_tag2); + free(opts->quality_tag2); + ia_free(opts->first_cycle); + ia_free(opts->final_cycle); + ia_free(opts->first_index_cycle); + ia_free(opts->final_index_cycle); + xmlFreeDoc(opts->intensityConfig); + xmlFreeDoc(opts->basecallsConfig); + xmlFreeDoc(opts->parametersConfig); + xmlFreeDoc(opts->runinfoConfig); + free(opts); +} + +/* + * do something clever with an XML document + */ +xmlXPathObjectPtr getnodeset(xmlDocPtr doc, char *xpath) +{ + xmlXPathContextPtr context; + xmlXPathObjectPtr result; + + context = xmlXPathNewContext(doc); + if (context == NULL) { + fprintf(stderr,"Error in xmlXPathNewContext\n"); + return NULL; + } + result = xmlXPathEvalExpression((xmlChar *)xpath, context); + xmlXPathFreeContext(context); + if (result == NULL) { + fprintf(stderr,"Error in xmlXPathEvalExpression\n"); + return NULL; + } + if(xmlXPathNodeSetIsEmpty(result->nodesetval)){ + xmlXPathFreeObject(result); + return NULL; + } + return result; +} +/* + * Read an attribute for an xpath from an XML doc + */ +static char *getXMLAttr(xmlDocPtr doc, char *node, char *attr) +{ + char *v = NULL; + xmlNodeSetPtr nodeset; + xmlXPathObjectPtr result; + + if (!doc) return v; + result = getnodeset(doc, node); + if (result) { + nodeset = result->nodesetval; + v = (char *)xmlGetProp(nodeset->nodeTab[0], (xmlChar *)attr); + xmlXPathFreeObject (result); + } + return v; +} + +static int getXMLAttr_int(xmlDocPtr doc, char *node, char *attr) +{ + int n = 0; + char *v = getXMLAttr(doc,node,attr); + if (v) { + n = atoi(v); + free(v); + } + return n; +} + +static int xmlGetProp_int(xmlNodePtr node, char *tag) +{ + int n=0; + char *v = (char*)xmlGetProp(node,(xmlChar*)tag); + if (v) { + n = atoi(v); + free(v); + } + return n; +} + +/* + * Read the value for an xpath for a given XML doc + */ +static char *getXMLVal(xmlDocPtr doc, char *xpath) +{ + char *val = NULL; + + if (!doc) return val; + xmlXPathObjectPtr ptr = getnodeset(doc, xpath); + + if (ptr && ptr->nodesetval) { + val = strdup((char *)ptr->nodesetval->nodeTab[0]->children->content); + } + xmlXPathFreeObject(ptr); + return val; +} + +/* + * Load an XML file into a xmlDoc pointer + */ +xmlDocPtr loadXML(char *dir, char *fname, int verbose) +{ + xmlDocPtr doc; + char *tmp = calloc(1, strlen(dir) + strlen(fname) + 2); + sprintf(tmp, "%s/%s", dir, fname); + doc = xmlReadFile(tmp, NULL, XML_PARSE_NOWARNING); + if (!doc) { + if (verbose) fprintf(stderr, "WARNING: Failed to parse %s/%s\n", dir, fname); + } else { + if (verbose) fprintf(stderr, "Opened XML file: %s/%s\n", dir, fname); + } + free(tmp); + return doc; +} + +/* + * display usage information + */ +static void usage(FILE *write_to) +{ + fprintf(write_to, +"Usage: bambi i2b [options]\n" +"\n" +"Options:\n" +" -r --run-folder Illumina runfolder directory including runParameters xml file under it.\n" +" [default: two levels up from Intensities directory]\n" +" -i --intensity-dir Illumina intensities directory including config xml file, and clocs,\n" +" locs or pos files under lane directory. Required\n" +" -b --basecalls-dir Illumina basecalls directory including config xml file, and filter files,\n" +" bcl, maybe scl files under lane cycle directory\n" +" [default: BaseCalls directory under intensities]\n" +" -l --lane Lane number. Required\n" +" -o --output-file Output file name. May be '-' for stdout. Required\n" +" --generate-secondary-basecalls Including second base call or not [default: false]\n" +" --no-filter Do not filter cluster [default: false]\n" +" --read-group-id ID used to link RG header record with RG tag in SAM record. [default: '1']\n" +" --library-name The name of the sequenced library. [default: 'unknown']\n" +" --sample-alias The name of the sequenced sample. [default: same as library name]\n" +" --study-name The name of the study. [default: none]\n" +" --platform-unit The platform unit. [default: runfolder name plus lane number]\n" +" --run-start-date The start date of the run [default: read from config file]\n" +" --sequencing-centre Sequencing Centre. [default: 'SC']\n" +" --platform Sequencing technology used. [default: 'ILLUMINA']\n" +" --first-tile First tile to be processed. This is normally only used for testing and\n" +" debugging. [default: null]\n" +" --tile-limit Number of tiles to process. Normally only used for testing and\n" +" debugging. [default: all tiles]\n" +" --barcode-tag Tag name for barcode sequence. [default: " DEFAULT_BARCODE_TAG "]\n" +" --quality-tag Tag name for barcode quality. [default: " DEFAULT_QUALITY_TAG "]\n" +" --sec-barcode-tag Tag name for second barcode sequence. [default: null]\n" +" --sec-quality-tag Tag name for second barcode quality. [default: null]\n" +" --bc-read Which read (1 or 2) should the barcode sequence and quality be added to?\n" +" [default: 1]\n" +" --sec-bc-read Which read (1 or 2) should the second barcode sequence and quality be added to?\n" +" [default: bc-read]\n" +" --first-cycle First cycle for each standard (non-index) read. Can be specified 0 or more times.\n" +" --final-cycle Last cycle for each standard (non-index) read. Can be specified 0 or more times.\n" +" --first-index-cycle First cycle for each index read. Can be specified 0 or more times.\n" +" --final-index-cycle Last cycle for each index read. Can be specified 0 or more times.\n" +" --add-cluster-index-tag Add cluster index tag [default: false]\n" +" -v --verbose verbose output\n" +" --output-fmt [sam/bam/cram] [default: bam]\n" +" --compression-level [0..9]\n" +); +} + +/* + * Takes the command line options and turns them into something we can understand + */ +opts_t* i2b_parse_args(int argc, char *argv[]) +{ + if (argc == 1) { usage(stdout); return NULL; } + + const char* optstring = "vr:i:b:l:o:"; + + static const struct option lopts[] = { + { "verbose", 0, 0, 'v' }, + { "run-folder", 1, 0, 'r' }, + { "intensity-dir", 1, 0, 'i' }, + { "basecalls-dir", 1, 0, 'b' }, + { "lane", 1, 0, 'l' }, + { "output-file", 1, 0, 'o' }, + { "generate-secondary-basecalls", 0, 0, 0 }, + { "no-filter", 0, 0, 0 }, + { "read-group-id", 1, 0, 0 }, + { "output-fmt", 1, 0, 0 }, + { "compression-level", 1, 0, 0 }, + { "library-name", 1, 0, 0 }, + { "sample-alias", 1, 0, 0 }, + { "study-name", 1, 0, 0 }, + { "platform-unit", 1, 0, 0 }, + { "run-start-date", 1, 0, 0 }, + { "sequencing-centre", 1, 0, 0 }, + { "sequencing-center", 1, 0, 0 }, + { "platform", 1, 0, 0 }, + { "first-tile", 1, 0, 0 }, + { "tile-limit", 1, 0, 0 }, + { "barcode-tag", 1, 0, 0 }, + { "quality-tag", 1, 0, 0 }, + { "sec-barcode-tag", 1, 0, 0 }, + { "sec-quality-tag", 1, 0, 0 }, + { "bc-read", 1, 0, 0 }, + { "sec-bc-read", 1, 0, 0 }, + { "first-cycle", 1, 0, 0 }, + { "final-cycle", 1, 0, 0 }, + { "first-index-cycle", 1, 0, 0 }, + { "final-index-cycle", 1, 0, 0 }, + { "add-cluster-index-tag", 0, 0, 0 }, + { NULL, 0, NULL, 0 } + }; + + opts_t* opts = calloc(sizeof(opts_t), 1); + if (!opts) { perror("cannot allocate option parsing memory"); return NULL; } + + opts->argv_list = stringify_argv(argc+1, argv-1); + if (opts->argv_list[strlen(opts->argv_list)-1] == ' ') opts->argv_list[strlen(opts->argv_list)-1] = 0; + + opts->first_cycle = ia_init(5); + opts->final_cycle = ia_init(5); + opts->first_index_cycle = ia_init(5); + opts->final_index_cycle = ia_init(5); + + int opt; + int option_index = 0; + while ((opt = getopt_long(argc, argv, optstring, lopts, &option_index)) != -1) { + const char *arg; + switch (opt) { + case 'r': opts->run_folder = strdup(optarg); + break; + case 'i': opts->intensity_dir = strdup(optarg); + break; + case 'b': opts->basecalls_dir = strdup(optarg); + break; + case 'o': opts->output_file = strdup(optarg); + break; + case 'l': opts->lane = atoi(optarg); + break; + case 'v': opts->verbose++; + break; + case 0: arg = lopts[option_index].name; + if (strcmp(arg, "output-fmt") == 0) opts->output_fmt = strdup(optarg); + else if (strcmp(arg, "compression-level") == 0) opts->compression_level = *optarg; + else if (strcmp(arg, "generate-secondary-basecalls") == 0) opts->generate_secondary_basecalls = true; + else if (strcmp(arg, "no-filter") == 0) opts->no_filter = true; + else if (strcmp(arg, "read-group-id") == 0) opts->read_group_id = strdup(optarg); + else if (strcmp(arg, "library-name") == 0) opts->library_name = strdup(optarg); + else if (strcmp(arg, "sample-alias") == 0) opts->sample_alias = strdup(optarg); + else if (strcmp(arg, "study-name") == 0) opts->study_name = strdup(optarg); + else if (strcmp(arg, "platform-unit") == 0) opts->platform_unit = strdup(optarg); + else if (strcmp(arg, "run-start-date") == 0) opts->run_start_date = strdup(optarg); + else if (strcmp(arg, "sequencing-centre") == 0) opts->sequencing_centre = strdup(optarg); + else if (strcmp(arg, "sequencing-center") == 0) opts->sequencing_centre = strdup(optarg); + else if (strcmp(arg, "platform") == 0) opts->platform = strdup(optarg); + else if (strcmp(arg, "first-tile") == 0) opts->first_tile = atoi(optarg); + else if (strcmp(arg, "tile-limit") == 0) opts->tile_limit = atoi(optarg); + else if (strcmp(arg, "barcode-tag") == 0) opts->barcode_tag = strdup(optarg); + else if (strcmp(arg, "quality-tag") == 0) opts->quality_tag = strdup(optarg); + else if (strcmp(arg, "sec-barcode-tag") == 0) opts->barcode_tag2 = strdup(optarg); + else if (strcmp(arg, "sec-quality-tag") == 0) opts->quality_tag2 = strdup(optarg); + else if (strcmp(arg, "bc-read") == 0) opts->bc_read = atoi(optarg); + else if (strcmp(arg, "sec-bc-read") == 0) opts->sec_bc_read = atoi(optarg); + else if (strcmp(arg, "first-cycle") == 0) ia_push(opts->first_cycle,atoi(optarg)); + else if (strcmp(arg, "final-cycle") == 0) ia_push(opts->final_cycle,atoi(optarg)); + else if (strcmp(arg, "first-index-cycle") == 0) ia_push(opts->first_index_cycle,atoi(optarg)); + else if (strcmp(arg, "final-index-cycle") == 0) ia_push(opts->final_index_cycle,atoi(optarg)); + else if (strcmp(arg, "add-cluster-index-tag") == 0) opts->add_cluster_index_tag = true; + else { + fprintf(stderr,"\nUnknown option: %s\n\n", arg); + usage(stdout); free_opts(opts); + return NULL; + } + break; + default: fprintf(stderr,"Unknown option: '%c'\n", opt); + /* else fall-through */ + case '?': usage(stdout); free_opts(opts); return NULL; + } + } + + argc -= optind; + argv += optind; + + //if (argc > 0) opts->input_name = strdup(argv[0]); + optind = 0; + + // some validation and tidying + if (!opts->intensity_dir) { + fprintf(stderr,"You must specify an intensity directory (-i or --intensity-dir)\n"); + usage(stderr); return NULL; + } + + if (opts->lane <= 0) { + fprintf(stderr,"You must specify a lane number (-l or --lane)\n"); + usage(stderr); return NULL; + } + + if (opts->lane > 999) { + fprintf(stderr,"I can't handle a lane number greater than 999\n"); + usage(stderr); return NULL; + } + + if (!opts->output_file) { + fprintf(stderr,"You must specify an output file (-o or --output-file)\n"); + usage(stderr); return NULL; + } + + if (opts->compression_level && !isdigit(opts->compression_level)) { + fprintf(stderr, "compression-level must be a digit in the range [0..9], not '%c'\n", opts->compression_level); + usage(stderr); return NULL; + } + + // Set defaults + if (!opts->read_group_id) opts->read_group_id = strdup("1"); + if (!opts->library_name) opts->library_name = strdup("unknown"); + if (!opts->sample_alias) opts->sample_alias = strdup(opts->library_name); + if (!opts->sequencing_centre) opts->sequencing_centre = strdup("SC"); + if (!opts->barcode_tag) opts->barcode_tag = strdup(DEFAULT_BARCODE_TAG); + if (!opts->quality_tag) opts->quality_tag = strdup(DEFAULT_QUALITY_TAG); + if (!opts->bc_read) opts->bc_read = 1; + if (!opts->sec_bc_read) opts->sec_bc_read = opts->bc_read; + if (!opts->platform) opts->platform = strdup("ILLUMINA"); + + if (!opts->run_folder) { + // default is two levels up from intensity dierectory + opts->run_folder = calloc(1, strlen(opts->intensity_dir) + 7); + sprintf(opts->run_folder, "%s/../..", opts->intensity_dir); + } + + if (!opts->basecalls_dir) { + opts->basecalls_dir = calloc(1, strlen(opts->intensity_dir) + strlen("/BaseCalls") + 1); + sprintf(opts->basecalls_dir, "%s/%s", opts->intensity_dir, "BaseCalls"); + } + + // rationalise directories + char *tmp; + tmp = opts->intensity_dir; + opts->intensity_dir = realpath(tmp, NULL); + if (!opts->intensity_dir) { + fprintf(stderr,"Can't open directory: %s\n", tmp); + perror("intensity-dir"); + return NULL; + } + free(tmp); + + tmp = opts->basecalls_dir; + opts->basecalls_dir = realpath(tmp, NULL); + if (!opts->basecalls_dir) { perror("basecalls-dir"); return NULL; } + free(tmp); + + tmp = opts->run_folder; + opts->run_folder = realpath(tmp, NULL); + if (!opts->run_folder) { perror("run_folder"); return NULL; } + free(tmp); + + if (!opts->platform_unit) { + // default is runfolder + lane + char *rf = basename(opts->run_folder); + opts->platform_unit = calloc(1, strlen(rf) + 5); + sprintf(opts->platform_unit, "%s_%d", rf, opts->lane); + } + + // read XML files + opts->intensityConfig = loadXML(opts->intensity_dir, "config.xml", opts->verbose); + opts->basecallsConfig = loadXML(opts->basecalls_dir, "config.xml", opts->verbose); + opts->parametersConfig = loadXML(opts->run_folder, "runParameters.xml", opts->verbose); + if (!opts->parametersConfig) opts->parametersConfig = loadXML(opts->run_folder, "RunParameters.xml", opts->verbose); + opts->runinfoConfig = loadXML(opts->run_folder, "RunInfo.xml", opts->verbose); + + if (!opts->run_start_date) { + opts->run_start_date = getXMLVal(opts->intensityConfig, "//RunParameters/RunFolderDate"); + } + if (!opts->run_start_date) { + opts->run_start_date = getXMLVal(opts->parametersConfig, "//Setup/RunStartDate"); + } + if (!opts->run_start_date) { + opts->run_start_date = getXMLVal(opts->parametersConfig, "//RunParameters/RunStartDate"); + } + + if (!opts->run_start_date) { + fprintf(stderr, "No run-start-date given, and none found in config files\n"); + return NULL; + } + + // reformat date from yymmdd to YYYY-mm-dd + if (strlen(opts->run_start_date) == 6) { + char *tmp = calloc(1,64); + struct tm tm; + memset(&tm, 0, sizeof(struct tm)); + strptime(opts->run_start_date, "%y%m%d", &tm); + strftime(tmp, 63, "%Y-%m-%dT00:00:00+0000", &tm); + free(opts->run_start_date); + opts->run_start_date = tmp; + } + + return opts; +} + +/* + * convert SAM_hdr to bam_hdr + */ +void sam_hdr_unparse(SAM_hdr *sh, bam_hdr_t *h) +{ + free(h->text); + sam_hdr_rebuild(sh); + h->text = strdup(sam_hdr_str(sh)); + h->l_text = sam_hdr_length(sh); + sam_hdr_free(sh); +} + +/* + * Add the header lines to the BAM file + */ +int addHeader(samFile *output_file, bam_hdr_t *output_header, opts_t *opts) +{ + SAM_hdr *sh = sam_hdr_parse_(output_header->text,output_header->l_text); + char *version = NULL; + char *pname = NULL; + + pname = getXMLAttr(opts->parametersConfig, "/ImageAnalysis/Run/Software", "Name"); + if (!pname) pname = getXMLAttr(opts->intensityConfig, "/ImageAnalysis/Run/Software", "Name"); + if (!pname) pname = getXMLVal(opts->parametersConfig, "//ApplicationName"); + if (!pname) { fprintf(stderr,"Can't find program name anywhere\n"); return 1; } + + version = getXMLAttr(opts->parametersConfig, "/ImageAnalysis/Run/Software", "Version"); + if (!version) version = getXMLAttr(opts->intensityConfig, "/ImageAnalysis/Run/Software", "Version"); + if (!version) version = getXMLVal(opts->parametersConfig, "//ApplicationVersion"); + if (!version) { fprintf(stderr,"Can't find program version anywhere\n"); return 1; } + + // Add header line + sam_hdr_add(sh, "HD", "VN", "1.5", "SO", "unsorted", NULL, NULL); + + // Add RG line + sam_hdr_add(sh, "RG", "ID", opts->read_group_id, + "DT", opts->run_start_date, + "PU", opts->platform_unit, + "LB", opts->library_name, + "PG", "SCS", + "SM", opts->sample_alias, + "CN", opts->sequencing_centre, + "PL", opts->platform, + (opts->study_name ? "DS": NULL), (opts->study_name ? opts->study_name: NULL), + NULL, NULL); + + // Add PG lines + version = getXMLAttr(opts->parametersConfig, "/ImageAnalysis/Run/Software", "Version"); + if (!version) version = getXMLAttr(opts->intensityConfig, "/ImageAnalysis/Run/Software", "Version"); + if (!version) version = getXMLVal(opts->parametersConfig, "//Setup/ApplicationVersion"); + if (!version) { fprintf(stderr, "Can't find program version\n"); exit(1); } + pname = getXMLAttr(opts->parametersConfig, "/ImageAnalysis/Run/Software", "Name"); + if (!pname) pname = getXMLAttr(opts->intensityConfig, "/ImageAnalysis/Run/Software", "Name"); + if (!pname) pname = getXMLVal(opts->parametersConfig, "//Setup/ApplicationName"); + if (!pname) { fprintf(stderr, "Can't find program name\n"); exit(1); } + sam_hdr_add(sh, "PG", + "ID", "SCS", + "VN", version, + "PN", pname, + "DS", "Controlling software on instrument", + NULL, NULL); + free(pname); free(version); + + version = getXMLAttr(opts->basecallsConfig, "/BaseCallAnalysis/Run/Software", "Version"); + pname = getXMLAttr(opts->basecallsConfig, "/BaseCallAnalysis/Run/Software", "Name"); + sam_hdr_add(sh, "PG", + "ID", "basecalling", + "PP", "SCS", + "VN", version ? version : "Unknown", + "PN", pname ? pname : "Unknown", + "DS", "Basecalling Package", + NULL, NULL); + free(pname); free(version); + + sam_hdr_add(sh, "PG", + "ID", "bambi", + "PP", "basecalling", + "VN", bambi_version(), + "CL", opts->argv_list, + "PN", "bambi", + "DS", "Convert Illumina BCL to BAM or SAM file", + NULL, NULL); + + sam_hdr_unparse(sh,output_header); + if (sam_hdr_write(output_file, output_header) != 0) { + fprintf(stderr, "Could not write output file header\n"); + return 1; + } + return 0; +} + +/* + * Get an ID - depending on what config files we have and what is in them + * this is either instrument_runid or computer_experiment + */ +char *getId(opts_t *opts) +{ + xmlDocPtr doc; + char *runid = NULL; + char *instrument = NULL; + char *experiment = NULL; + char *computer = NULL; + char *id = NULL; + + doc = opts->basecallsConfig ? opts->basecallsConfig : opts->intensityConfig; + + runid = getXMLVal(doc, "//RunParameters/RunFolderId"); + instrument = getXMLVal(doc, "//RunParameters/Instrument"); + + if (instrument && runid) { + id = calloc(1, strlen(instrument) + strlen(runid) + 2); + sprintf(id, "%s_%s", instrument, runid); + } + + if (!id) { + experiment = getXMLVal(opts->parametersConfig, "//Setup/ExperimentName"); + computer = getXMLVal(opts->parametersConfig, "//Setup/ComputerName"); + if (experiment && computer) { + id = calloc(1, strlen(experiment) + strlen(computer) + 2); + sprintf(id, "%s_%s", computer, experiment); + } + } + + free(instrument); free(runid); free(experiment); free(computer); + + return id; +} + +/* + * Load the tile index array (the BCI file) + * This is only for NextSeq + */ +va_t *getTileIndex(opts_t *opts) +{ + va_t *tileIndex = NULL; + char *fname = calloc(1,strlen(opts->basecalls_dir)+64); + sprintf(fname, "%s/L%03d/s_%d.bci", opts->basecalls_dir, opts->lane, opts->lane); + int fhandle = open(fname,O_RDONLY); + if (fhandle < 0) { + if (opts->verbose) fprintf(stderr,"Can't open BCI file %s\n", fname); + } else { + tileIndex = va_init(100,freetileIndexArray); + int n; + do { + tileIndexEntry_t *ti = calloc(1, sizeof(tileIndexEntry_t)); + n = read(fhandle, &ti->tile, 4); + n = read(fhandle, &ti->clusters, 4); + if (n == 4) { + va_push(tileIndex,ti); + } + } while (n == 4); + close(fhandle); + } + return tileIndex; +} + +/* + * load tile list from basecallsConfig or intensityConfig + */ +ia_t *getTileList(opts_t *opts) +{ + ia_t *tiles = ia_init(100); + xmlXPathObjectPtr ptr; + char *xpath = calloc(1,64); + xmlDocPtr doc; + + doc = opts->basecallsConfig ? opts->basecallsConfig : opts->intensityConfig; + + sprintf(xpath, "//TileSelection/Lane[@Index=\"%d\"]/Tile", opts->lane); + assert(strlen(xpath) < 64); + ptr = getnodeset(doc, xpath); + free(xpath); + + if (ptr && ptr->nodesetval) { + int n; + for (n=0; n < ptr->nodesetval->nodeNr; n++) { + char *t = (char *)ptr->nodesetval->nodeTab[n]->children->content; + if (t) ia_push(tiles,atoi(t)); + } + xmlXPathFreeObject(ptr); + } else { + // Maybe this is a NewSeq run? + ptr = getnodeset(opts->parametersConfig, "//SelectedTiles/Tile"); + if (ptr && ptr->nodesetval) { + int n; + for (n=0; n < ptr->nodesetval->nodeNr; n++) { + char *t = (char *)ptr->nodesetval->nodeTab[n]->children->content; + char *saveptr; + char *lane = strtok_r(t, "_", &saveptr); + char *tileno = strtok_r(NULL, "_", &saveptr); + if (lane && tileno) { + if (atoi(lane) == opts->lane) { + ia_push(tiles,atoi(tileno)); + } + } + } + } + } + + if (ia_isEmpty(tiles)) { + int numSurfaces = getXMLAttr_int(opts->runinfoConfig, "//FlowcellLayout", "SurfaceCount"); + int numSwaths = getXMLAttr_int(opts->runinfoConfig, "//FlowcellLayout", "SwathCount"); + int numTilesPerSwath = getXMLAttr_int(opts->runinfoConfig, "//FlowcellLayout", "TileCount"); + if (numSurfaces && numSwaths && numTilesPerSwath) { + int isur, isw, itile; + for (isur = 1; isur <= numSurfaces; isur++) { + for (isw = 1; isw <= numSwaths; isw++) { + for (itile = 1; itile <= numTilesPerSwath; itile++) { + ia_push(tiles, 1000 * isur + 100 * isw + itile); + } + } + } + } + } + + + if (ia_isEmpty(tiles)) return tiles; + + ia_sort(tiles); + + // Filter tile list by command line options (mainly used for testing) + if (opts->tile_limit && opts->first_tile==0) opts->first_tile = tiles->entries[0]; + + if (opts->first_tile != 0) { + int n; + ia_t *new_tiles = ia_init(100); + for (n=0; n < tiles->end; n++) { + if (tiles->entries[n] == opts->first_tile) { + int i, tl; + tl = opts->tile_limit ? opts->tile_limit : tiles->end; + for (i=n; i < n+tl; i++) { + if (i < tiles->end) { + ia_push(new_tiles,tiles->entries[i]); + } + } + } + } + ia_free(tiles); + tiles = new_tiles; + if (ia_isEmpty(tiles)) { + fprintf(stderr,"No tiles to process\n"); + exit(1); + } + } + + return tiles; +} + +char *getCycleName(int readCount, bool isIndex) +{ + // implements naming convention used by earlier versions of Lane.java + char *cycleName = calloc(1,16); +; + if (isIndex) { + if (readCount==1) { strcpy(cycleName,"readIndex"); } + else { sprintf(cycleName,"readIndex%d",readCount); } + } else { + sprintf(cycleName,"read%d",readCount); + } + return cycleName; +} + +void getCycleRangeFromFile(va_t *cycleRange, xmlDocPtr doc) +{ + xmlXPathObjectPtr ptr; + int readCount = 1; + int cycleCount = 1; + int indexCount = 1; + int n; + + if (!doc) return; + ptr = getnodeset(doc,"/RunInfo/Run/Reads/Read"); + if (!ptr || !ptr->nodesetval) ptr = getnodeset(doc, "/RunParameters/Setup/Reads/Read"); + if (!ptr || !ptr->nodesetval) ptr = getnodeset(doc, "/RunParameters/Reads/RunInfoRead"); + if (!ptr || !ptr->nodesetval) return; // still can't find them. Give up. + + for (n=0; n < ptr->nodesetval->nodeNr; n++) { + xmlNodePtr np = ptr->nodesetval->nodeTab[n]; + cycleRangeEntry_t *cr = calloc(1,sizeof(cycleRangeEntry_t)); + int numCycles = xmlGetProp_int(np,"NumCycles"); + char *p = (char *)xmlGetProp(np,(xmlChar *)"IsIndexedRead"); + bool isIndexedRead = ('Y' == *p || 'y' == *p); + free(p); + cr->readname = getCycleName(isIndexedRead ? indexCount++ : readCount++, isIndexedRead); + cr->first = cycleCount; + cr->last = cycleCount + numCycles - 1; + va_push(cycleRange,cr); + cycleCount += numCycles; + } +} + +/* + * Try to find a cycle range from somewhere + */ +va_t *getCycleRange(opts_t *opts) +{ + va_t *cycleRange = va_init(100, freeCycleRange); + xmlDocPtr doc; + xmlXPathObjectPtr ptr = NULL; + int n; + + // + // read from command line options + // + if (!ia_isEmpty(opts->first_cycle)) { + for (n=0; n < opts->first_cycle->end; n++) { + cycleRangeEntry_t *cr = calloc(1,sizeof(cycleRangeEntry_t)); + cr->readname = getCycleName(n+1,false); + cr->first = opts->first_cycle->entries[n]; + cr->last = opts->final_cycle->entries[n]; + va_push(cycleRange,cr); + } + for (n=0; n < opts->first_index_cycle->end; n++) { + cycleRangeEntry_t *cr = calloc(1,sizeof(cycleRangeEntry_t)); + cr->readname = getCycleName(n+1,true); + cr->first = opts->first_index_cycle->entries[n]; + cr->last = opts->final_index_cycle->entries[n]; + va_push(cycleRange,cr); + } + } + + if (va_isEmpty(cycleRange)) getCycleRangeFromFile(cycleRange, opts->runinfoConfig); + if (va_isEmpty(cycleRange)) getCycleRangeFromFile(cycleRange, opts->parametersConfig); + + // TODO what if there is a barCodeCycleList ? + + if (va_isEmpty(cycleRange)) { + doc = opts->basecallsConfig ? opts->basecallsConfig : opts->intensityConfig; + ptr = getnodeset(doc, "//RunParameters/Reads"); + if (ptr && ptr->nodesetval) { + int n; + for (n=0; n < ptr->nodesetval->nodeNr; n++) { + xmlNodePtr np = ptr->nodesetval->nodeTab[n]; + char name[64]; + cycleRangeEntry_t *cr = calloc(1,sizeof(cycleRangeEntry_t)); + int readIndex = xmlGetProp_int(np,"Index"); + sprintf(name,"read%d",readIndex); + cr->readname = strdup(name); + np = np->children; + while (np->next) { + if (strcmp((char*)np->name,"FirstCycle") == 0) { + cr->first = atoi((char*)np->children->content); + } + if (strcmp((char*)np->name,"LastCycle") == 0) { + cr->last = atoi((char*)np->children->content); + } + np = np->next; + } + va_push(cycleRange, cr); + } + } + } + + if (ptr) xmlXPathFreeObject(ptr); + return cycleRange; +} + +/* + * Find cluster number for a given tile + * Abort if tile not found + */ +int findClusterNumber(int tile, va_t *tileIndex) +{ + int n; + int clusterNumber = 0; + for (n=0; n < tileIndex->end; n++) { + tileIndexEntry_t *ti = (tileIndexEntry_t *)tileIndex->entries[n]; + if (ti->tile == tile) + return clusterNumber; + clusterNumber += ti->clusters; + } + fprintf(stderr,"findClusterNumber(%d) : no such tile\n", tile); + exit(1); +} + +int findClusters(int tile, va_t *tileIndex) +{ + int n; + for (n=0; n < tileIndex->end; n++) { + tileIndexEntry_t *ti = (tileIndexEntry_t *)tileIndex->entries[n]; + if (ti->tile == tile) + return ti->clusters; + } + fprintf(stderr,"findClusters(%d) : no such tile\n", tile); + exit(1); +} + +/* + * Open the position file + * + * Try looking for _pos.txt, .clocs, locs files in that order + * + * Open and return the first one found, or NULL if not found. + */ + +posfile_t *openPositionFile(int tile, va_t *tileIndex, opts_t *opts) +{ + posfile_t *posfile = NULL; + + char *fname = calloc(1, strlen(opts->intensity_dir)+64); + + sprintf(fname, "%s/s_%d_%04d_pos.txt", opts->intensity_dir, opts->lane, tile); + posfile = posfile_open(fname); + if (opts->verbose && !posfile->errmsg) fprintf(stderr,"Opened %s\n", fname); + + if (posfile->errmsg) { + sprintf(fname, "%s/L%03d/s_%d_%04d.clocs", opts->intensity_dir, opts->lane, opts->lane, tile); + free(posfile->errmsg); free(posfile); + posfile = posfile_open(fname); + if (opts->verbose && !posfile->errmsg) fprintf(stderr,"Opened %s\n", fname); + } + + if (posfile->errmsg) { + sprintf(fname, "%s/L%03d/s_%d_%04d.locs", opts->intensity_dir, opts->lane, opts->lane, tile); + free(posfile->errmsg); free(posfile); + posfile = posfile_open(fname); + if (opts->verbose && !posfile->errmsg) fprintf(stderr,"Opened %s\n", fname); + } + + if (posfile->errmsg) { + sprintf(fname, "%s/s.locs", opts->intensity_dir); + free(posfile->errmsg); free(posfile); + posfile = posfile_open(fname); + if (opts->verbose && !posfile->errmsg) fprintf(stderr,"Opened %s\n", fname); + } + + // if still not found, try NewSeq format files + if (posfile->errmsg) { + sprintf(fname, "%s/s_%d_pos.txt", opts->intensity_dir, opts->lane); + posfile = posfile_open(fname); + if (opts->verbose && !posfile->errmsg) fprintf(stderr,"Opened %s\n", fname); + + if (posfile->errmsg) { + sprintf(fname, "%s/L%03d/s_%d.clocs", opts->intensity_dir, opts->lane, opts->lane); + posfile = posfile_open(fname); + if (opts->verbose && !posfile->errmsg) fprintf(stderr,"Opened %s\n", fname); + } + + if (posfile->errmsg) { + sprintf(fname, "%s/L%03d/s_%d.locs", opts->intensity_dir, opts->lane, opts->lane); + posfile = posfile_open(fname); + if (opts->verbose && !posfile->errmsg) fprintf(stderr,"Opened %s\n", fname); + } + + if (!posfile->errmsg) { + if (tileIndex) { + posfile_seek(posfile,findClusterNumber(tile,tileIndex)); + } else { + fprintf(stderr,"Trying to open %s with no tile index\n", fname); + posfile->errmsg = strdup("Trying to open position file with no tile index"); + } + } + } + + free(fname); + return posfile; + +} + +/* + * find and open the filter file + */ +filter_t *openFilterFile(int tile, va_t *tileIndex, opts_t *opts) +{ + filter_t *filter = NULL; + char *fname = calloc(1,strlen(opts->basecalls_dir)+128); // a bit arbitrary :-( + + sprintf(fname, "%s/L%03d/s_%d_%04d.filter", opts->basecalls_dir, opts->lane, opts->lane, tile); + filter = filter_open(fname); + if (filter->errmsg) { + sprintf(fname, "%s/s_%d_%04d.filter", opts->basecalls_dir, opts->lane, tile); + filter = filter_open(fname); + } + if (filter->errmsg) { + sprintf(fname, "%s/L%03d/s_%d.filter", opts->basecalls_dir, opts->lane, opts->lane); + filter = filter_open(fname); + } + + if (opts->verbose && !filter->errmsg) fprintf(stderr,"Opened filter file %s\n", fname); + + if (tileIndex) filter_seek(filter,findClusterNumber(tile,tileIndex)); + + free(fname); + return filter; +} + +/* + * Open a single bcl (or scl) file + */ +bclfile_t *openBclFile(char *basecalls, int lane, int tile, int cycle, char *ext, va_t *tileIndex) +{ + char *fname = calloc(1, strlen(basecalls)+128); + if (tileIndex) { // NextSeq format + sprintf(fname, "%s/L%03d/%04d.%s", basecalls, lane, cycle, ext); + } else { + sprintf(fname, "%s/L%03d/C%d.1/s_%d_%04d.%s", basecalls, lane, cycle, lane, tile, ext); + } + bclfile_t *bcl = bclfile_open(fname); + if (bcl->errmsg) { + fprintf(stderr,"Can't open %s\n%s\n", fname, bcl->errmsg); + return NULL; + } + + free(fname); + + if (tileIndex) bclfile_seek(bcl, findClusterNumber(tile,tileIndex)); + + return bcl; +} + +/* + * Find and open all the relevant bcl and scl files + */ +va_t *openBclFiles(va_t *cycleRange, opts_t *opts, int tile, va_t *tileIndex) +{ + int n, cycle, nCycles; + + va_t *bclReadArray = va_init(5,freeBCLReadArray); + + for (n=0; n < cycleRange->end; n++) { + cycleRangeEntry_t *cr = cycleRange->entries[n]; + bclReadArrayEntry_t *ra = calloc(1, sizeof(bclReadArrayEntry_t)); + ra->readname = strdup(cr->readname); + nCycles = cr->last - cr->first + 1; + ra->bclFileArray = va_init(nCycles, freeBCLFileArray); + ra->sclFileArray = va_init(nCycles, freeBCLFileArray); + + for (cycle = cr->first; cycle <= cr->last; cycle++) { + bclfile_t *bcl = openBclFile(opts->basecalls_dir, opts->lane, tile, cycle, "bcl", tileIndex); + va_push(ra->bclFileArray, bcl); + + if (opts->generate_secondary_basecalls) { + bclfile_t *bcl = openBclFile(opts->basecalls_dir, opts->lane, tile, cycle, "scl", tileIndex); + va_push(ra->sclFileArray, bcl); + } + } + va_push(bclReadArray,ra); + } + + return bclReadArray; +} + +/* + * calculate and return the readname + */ +char *getReadName(char *id, int lane, int tile, int x, int y) +{ + char *readName = calloc(1, 128); + + if (id && *id) { + sprintf(readName, "%s:%d:%d:%d:%d", id, lane, tile, x, y); + } else { + sprintf(readName, "%d:%d:%d:%d", lane, tile, x, y); + } + if (strlen(readName) > 127) { + fprintf(stderr,"readName too long: %s\n", readName); + exit(1); + } + return readName; +} + +bool readArrayContains(va_t *bclReadArray, char *readname) +{ + int n; + for (n=0; n < bclReadArray->end; n++) { + bclReadArrayEntry_t *ra = bclReadArray->entries[n]; + if (strcmp(readname, ra->readname) == 0) return true; + } + return false; +} + +/* + * read all the bases and qualities for a given read name ("read1" or "read2") + */ +void getBases(va_t *bclReadArray, char *readname, char **bases, char **qualities, bool convert_qual) +{ + int n; + *bases = NULL; *qualities = NULL; + for (n=0; n < bclReadArray->end; n++) { + bclReadArrayEntry_t *ra = bclReadArray->entries[n]; + if (strcmp(ra->readname, readname) == 0) { + *bases = calloc(1, ra->bclFileArray->end+1); + *qualities = calloc(1, ra->bclFileArray->end+1); + int i; + for (i=0; i < ra->bclFileArray->end; i++) { + bclfile_t *b = ra->bclFileArray->entries[i]; + if (bclfile_next(b) < 0) { + fprintf(stderr,"Failed to read bcl file\n"); + exit(1); + } + (*bases)[i] = b->base; + (*qualities)[i] = b->quality + (convert_qual ? 33 : 0); + } + break; + } + } +} + +/* + * set the BAM flag + */ +int setFlag(bool second, bool filtered, bool ispaired) +{ + int flags = 0; + + flags |= BAM_FUNMAP; + if (filtered) flags |= BAM_FQCFAIL; + if (ispaired) { + flags |= BAM_FPAIRED; + flags |= BAM_FMUNMAP; + if (second) flags |= BAM_FREAD2; + else flags |= BAM_FREAD1; + } + return flags; +} + +/* + * Write a BAM record + */ +void writeRecord(int flags, opts_t *opts, char *readName, + char *bases, char *qualities, char *ib, char *iq, char *ib2, char *iq2, + samFile *output_file, bam_hdr_t *output_header) +{ + bam1_t *bam = bam_init1(); + + int r = bam_construct_seq(&bam, 0, readName, strlen(readName), + flags, -1, 0, 0, 0, 0, (uint32_t*)"", -1, 0, 0, strlen(bases), bases, qualities); + if (r) { + fprintf(stderr,"bam_construct_seq() failed\n"); + exit(1); + } + + if (ib) { + bam_aux_append(bam, opts->barcode_tag, 'Z', strlen(ib)+1, (uint8_t *)ib); + } + + bam_aux_append(bam, "RG", 'Z', strlen(opts->read_group_id)+1, (uint8_t *)opts->read_group_id); + + if (ib) { + bam_aux_append(bam, opts->quality_tag, 'Z', strlen(iq)+1, (uint8_t *)iq); + } + + if (ib2) { + bam_aux_append(bam, opts->barcode_tag2, 'Z', strlen(ib2)+1, (uint8_t *)ib2); + bam_aux_append(bam, opts->quality_tag2, 'Z', strlen(iq2)+1, (uint8_t *)iq2); + } + + r = sam_write1(output_file, output_header, bam); + if (r <= 0) { + fprintf(stderr, "Problem writing record %s : r=%d\n", readName,r); + exit(1); + } + bam_destroy1(bam); +} + +/* + * Write all the BAM records for a given tile + */ +int processTile(int tile, samFile *output_file, bam_hdr_t *output_header, va_t *cycleRange, va_t *tileIndex, opts_t *opts) +{ + va_t *bclReadArray; + int filtered; + int max_cluster = 0; + int nRecords = 0; + + if (opts->verbose) fprintf(stderr,"Processing Tile %d\n", tile); + posfile_t *posfile = openPositionFile(tile, tileIndex, opts); + if (posfile->errmsg) { + fprintf(stderr,"Can't find position file for Tile %d\n%s\n", tile, posfile->errmsg); + return 1; + } + + filter_t *filter = openFilterFile(tile,tileIndex,opts); + if (filter->errmsg) { + fprintf(stderr,"Can't find filter file for tile %d\n%s\n", tile, filter->errmsg); + return 1; + } + + if (tileIndex) max_cluster = findClusters(tile, tileIndex); + + bclReadArray = openBclFiles(cycleRange, opts, tile, tileIndex); + char *id = getId(opts); + + bool ispaired = readArrayContains(bclReadArray, "read2"); + bool isindexed = readArrayContains(bclReadArray, "readIndex"); + bool isdual = readArrayContains(bclReadArray, "readIndex2"); + + // TODO: is this right? Should we abort, or give a warning here? + if (!opts->barcode_tag2 || !opts->quality_tag2) isdual = false; + + // + // write all the records + // + while ( (filtered = filter_next(filter)) >= 0) { + if (tileIndex && filter->current_cluster > max_cluster) break; + filtered = !filtered; // don't ask + posfile_next(posfile); + char *readName = getReadName(id, opts->lane, tile, posfile->x, posfile->y); + char *bases=NULL, *qualities=NULL, *bases2=NULL, *qualities2=NULL; + char *bases_index=NULL, *qualities_index=NULL, *bases_index2=NULL, *qualities_index2=NULL; + + getBases(bclReadArray, "read1", &bases, &qualities, false); + if (ispaired) getBases(bclReadArray, "read2", &bases2, &qualities2, false); + if (isindexed) getBases(bclReadArray, "readIndex", &bases_index, &qualities_index, true); + if (isdual) getBases(bclReadArray, "readIndex2", &bases_index2, &qualities_index2, true); + + // Which reads do we attach the indexes to? + char *r1_bi=NULL, *r1_qi=NULL, *r1_bi2=NULL, *r1_qi2 = NULL; + char *r2_bi=NULL, *r2_qi=NULL, *r2_bi2=NULL, *r2_qi2 = NULL; + if (opts->bc_read == 1) { r1_bi = bases_index; r1_qi = qualities_index; } + else { r2_bi = bases_index; r2_qi = qualities_index; } + + if (opts->sec_bc_read == 1) { r1_bi2 = bases_index2; r1_qi2 = qualities_index2; } + else { r2_bi2 = bases_index2; r2_qi2 = qualities_index2; } + + if (opts->no_filter || !filtered) { + int flags; + flags = setFlag(false,filtered,ispaired); + writeRecord(flags, opts, readName, bases, qualities, r1_bi, r1_qi, r1_bi2, r1_qi2, output_file, output_header); + if (ispaired) { + flags = setFlag(true,filtered,ispaired); + writeRecord(flags, opts, readName, bases2, qualities2, r2_bi, r2_qi, r2_bi2, r2_qi2, output_file, output_header); + } + nRecords++; + } + + free(bases); free(qualities); + free(bases2); free(qualities2); + free(bases_index); free(qualities_index); + free(bases_index2); free(qualities_index2); + free(readName); + } + + free(id); + va_free(bclReadArray); + filter_close(filter); + posfile_close(posfile); + + if (opts->verbose) fprintf(stderr,"%d records written\n", nRecords); + + return 0; +} + +/* + * process all the tiles and write all the BAM records + */ +void createBAM(samFile *output_file, bam_hdr_t *output_header, opts_t *opts) +{ + ia_t *tiles = getTileList(opts); + va_t *cycleRange = getCycleRange(opts);; + va_t *tileIndex = getTileIndex(opts); + + int n; + + for (n=0; n < cycleRange->end; n++) { + cycleRangeEntry_t *cr = (cycleRangeEntry_t *)cycleRange->entries[n]; + if (opts->verbose) fprintf(stderr,"CycleRange: %s\t%d\t%d\n", cr->readname, cr->first, cr->last); + } + + if (tiles->end == 0) fprintf(stderr, "There are no tiles to process\n"); + + for (n=0; n < tiles->end; n++) { + if (processTile(tiles->entries[n], output_file, output_header, cycleRange, tileIndex, opts)) { + fprintf(stderr,"Error processing tile %d\n", tiles->entries[n]); + break; + } + } + + va_free(cycleRange); + ia_free(tiles); +} + +/* + * Main code + */ +static int i2b(opts_t* opts) +{ + int retcode = 1; + samFile *output_file = NULL; + bam_hdr_t *output_header = NULL; + htsFormat *out_fmt = NULL; + char mode[] = "wbC"; + + while (1) { + + /* + * Open output file and header + */ + if (opts->output_fmt) { + out_fmt = calloc(1,sizeof(htsFormat)); + if (hts_parse_format(out_fmt, opts->output_fmt) < 0) { + fprintf(stderr,"Unknown output format: %s\n", opts->output_fmt); + break; + } + } + mode[2] = opts->compression_level ? opts->compression_level : '\0'; + output_file = hts_open_format(opts->output_file, mode, out_fmt); + free(out_fmt); + if (!output_file) { + fprintf(stderr, "Could not open output file (%s)\n", opts->output_file); + break; + } + + output_header = bam_hdr_init(); + output_header->text = calloc(1,1); output_header->l_text=0; + + if (!output_header) { + fprintf(stderr, "Failed to initialise output header\n"); + break; + } + + addHeader(output_file, output_header, opts); + createBAM(output_file, output_header, opts); + + retcode = 0; + break; + } + + // tidy up after us + if (output_header) bam_hdr_destroy(output_header); + if (output_file) sam_close(output_file); + + return retcode; +} + +/* + * called from bambi to perform Illumina to BAM conversion + * + * Parse the command line arguments, then call the main i2b function + * + * returns 0 on success, 1 if there was a problem + */ +int main_i2b(int argc, char *argv[]) +{ + int ret = 1; + opts_t* opts = i2b_parse_args(argc, argv); + if (opts) ret = i2b(opts); + free_opts(opts); + return ret; +} diff --git a/src/posfile.c b/src/posfile.c new file mode 100644 index 0000000..a290af2 --- /dev/null +++ b/src/posfile.c @@ -0,0 +1,166 @@ +/* posfile.c + + Functions to read and parse an Illumina pos, locs, or clocs file. + + Copyright (C) 2016 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 +#include +#include +#include +#include + +#include "posfile.h" + +posfile_t *posfile_open(char *fname) +{ + posfile_t *posfile = calloc(1, sizeof(posfile_t)); + posfile->current_block = 0; + posfile->errmsg = NULL; + posfile->file_type = UNKNOWN_POS; + + // Should we handle compressed (.gz) files? + + char *base = basename(fname); + char *ext = rindex(base,'.'); + if (ext) ext++; + if (ext) { + if (strcmp(ext,"clocs")==0) posfile->file_type = CLOCS; + if (strcmp(ext,"locs")==0) posfile->file_type = LOCS; + } + if (posfile->file_type == UNKNOWN_POS) { + posfile->errmsg = strdup("posfile_open(): Unknown file type\n"); + return posfile; + } + posfile->fhandle = open(fname,O_RDONLY); + + if (posfile->fhandle == -1) { + posfile->errmsg = strdup(strerror(errno)); + return posfile; + } + + if (posfile->file_type == CLOCS) { + int n; + n = read(posfile->fhandle,(void *)&posfile->version,1); + n = read(posfile->fhandle,(void *)&posfile->total_blocks,4); + n = read(posfile->fhandle,(void *)&posfile->unread_clusters,1); + if (n<0) { + fprintf(stderr,"failed to read header from %s\n", fname); + exit(1); + } + posfile->current_block++; + } + + if (posfile->file_type == LOCS) { + int n; + // first 8 bytes are unused + n = read(posfile->fhandle,(void *)&posfile->total_blocks,4); + n = read(posfile->fhandle,(void *)&posfile->total_blocks,4); + n = read(posfile->fhandle,(void *)&posfile->total_blocks,4); + if (n<0) { + fprintf(stderr,"failed to read header from %s\n", fname); + exit(1); + } + } + + return posfile; +} + +/* + * seek to a given cluster number + */ +void posfile_seek(posfile_t *posfile, int cluster) +{ + off_t pos = 12 + cluster * 8; + if (posfile->file_type != LOCS) { + fprintf(stderr,"Can only handle NextSeq pos files of type LOC\n"); + exit(1); + } + + off_t r = lseek(posfile->fhandle, pos, SEEK_SET); + if (r != pos) { + fprintf(stderr,"Trying to seek to %d (cluster %d) but returned %d\n", (int)pos, cluster, (int)r); + perror("posfile_seek() failed"); + } +} + +void posfile_close(posfile_t *posfile) +{ + free(posfile->errmsg); + if (posfile->fhandle >= 0) close(posfile->fhandle); + free(posfile); +} + +static int locs_next(posfile_t *posfile) +{ + float dx, dy; + + if (posfile->current_block >= posfile->total_blocks) return -1; + posfile->current_block++; + + int n; + n = read(posfile->fhandle, (void *)&dx, 4); + n = read(posfile->fhandle, (void *)&dy, 4); + if (n<0) { + fprintf(stderr,"something has gone wrong in locs_next()\n"); + exit(1); + } + + posfile->x = 10 * dx + 1000.5; + posfile->y = 10 * dy + 1000.5; + + return 0; +} + +static int clocs_next(posfile_t *posfile) +{ + unsigned char dx, dy; + + while (posfile->unread_clusters == 0 && (posfile->current_block < posfile->total_blocks)) { + if (read(posfile->fhandle, (void *)&posfile->unread_clusters, 1) != 1) return -1; + posfile->current_block++; + } + + if (posfile->unread_clusters == 0) return -1; + posfile->unread_clusters--; + + int n; + n = read(posfile->fhandle, (void *)&dx, 1); + n = read(posfile->fhandle, (void *)&dy, 1); + if (n<0) { + fprintf(stderr,"something has gone wrong in clocs_next()\n"); + exit(1); + } + + posfile->x = 10 * CLOCS_BLOCK_SIZE * ((posfile->current_block - 1) % CLOCS_BLOCKS_PER_LINE) + dx + 1000; + posfile->y = 10 * CLOCS_BLOCK_SIZE * ((posfile->current_block - 1) / CLOCS_BLOCKS_PER_LINE) + dy + 1000; + return 0; +} + +int posfile_next(posfile_t *posfile) +{ + if (posfile->file_type == CLOCS) return clocs_next(posfile); + if (posfile->file_type == LOCS) return locs_next(posfile); + return -1; +} + diff --git a/src/posfile.h b/src/posfile.h new file mode 100644 index 0000000..186b653 --- /dev/null +++ b/src/posfile.h @@ -0,0 +1,52 @@ +/* posfile.h + + Copyright (C) 2016 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 . +*/ + +#ifndef __POSFILE_H__ +#define __POSFILE_H__ + +#include + +#define CLOCS_BLOCK_SIZE 25 +#define CLOCS_IMAGE_WIDTH 2048 +#define CLOCS_BLOCKS_PER_LINE ((CLOCS_IMAGE_WIDTH + CLOCS_BLOCK_SIZE - 1) / CLOCS_BLOCK_SIZE) + +typedef enum { UNKNOWN_POS, POS, LOCS, CLOCS } POS_FILE_TYPE; + +typedef struct { + POS_FILE_TYPE file_type; + int fhandle; + char *errmsg; + uint8_t version; + uint32_t total_blocks; + int current_block; + uint8_t unread_clusters; + int x,y; +} posfile_t; + +posfile_t *posfile_open(char *fname); +int posfile_next(posfile_t *posfile); +void posfile_close(posfile_t *posfile); +void posfile_seek(posfile_t *posfile, int cluster); + +static inline int posfile_get_x(posfile_t *posfile) { return posfile->x; } +static inline int posfile_get_y(posfile_t *posfile) { return posfile->y; } + +#endif + diff --git a/test/bclfile/Makefile.am b/test/bclfile/Makefile.am new file mode 100644 index 0000000..03eade2 --- /dev/null +++ b/test/bclfile/Makefile.am @@ -0,0 +1,4 @@ +bin_PROGRAMS = t_bclfile +t_bclfile_SOURCES = t_bclfile.c +t_bclfile_CFLAGS = -DDATA_DIR=$(abs_srcdir) +t_bclfile_LDADD = -lz -ldl -lxml2 -lpthread diff --git a/test/bclfile/t_bclfile.c b/test/bclfile/t_bclfile.c new file mode 100644 index 0000000..ad2c562 --- /dev/null +++ b/test/bclfile/t_bclfile.c @@ -0,0 +1,131 @@ +/* test/i2b/bclfile.c -- bclfile test cases. + + Copyright (C) 2016 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 "../../src/bclfile.c" +#include +#include +#include +#include + +#define xMKNAME(d,f) #d f +#define MKNAME(d,f) xMKNAME(d,f) + +int verbose = 0; + +int success = 0; +int failure = 0; + +void checkLike(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strstr(actual, expected) == NULL) { + fprintf(stderr, "%s: Expected: %s \tGot: %s\n", name, expected, actual); + failure++; + } +} + +void checkEqual(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strcmp(expected, actual)) { + fprintf(stderr, "%s: Expected: %s \tGot: %s\n", name, expected, actual); + failure++; + } +} + +void ccheckEqual(char *name, char expected, char actual) +{ + if (expected != actual) { + fprintf(stderr, "%s: Expected: '%c' \tGot: '%c'\n", name, expected, actual); + failure++; + } +} + +void icheckEqual(char *name, int expected, int actual) +{ + if (expected != actual) { + fprintf(stderr, "%s: Expected: %d \tGot: %d\n", name, expected, actual); + failure++; + } +} + +int main(int argc, char**argv) +{ + int n; + + bclfile_t *bclfile; + + // BCL tests + + bclfile = bclfile_open(MKNAME(DATA_DIR,"/../i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl")); + if (bclfile->errmsg) { + fprintf(stderr,"Error opening file: %s\n", bclfile->errmsg); + failure++; + } + icheckEqual("Total clusters", 2609912, bclfile->total_clusters); + icheckEqual("Current cluster", 0, bclfile->current_cluster); + + bclfile_next(bclfile); + ccheckEqual("Base", 'N', bclfile->base); + icheckEqual("Quality", 0, bclfile->quality); + icheckEqual("current cluster", 1, bclfile->current_cluster); + + for (n=0; n<306; n++) { + bclfile_next(bclfile); + } + ccheckEqual("307 Base", 'A', bclfile->base); + icheckEqual("307 Quality", 30, bclfile->quality); + icheckEqual("307 current cluster", 307, bclfile->current_cluster); + icheckEqual("307 Total clusters", 2609912, bclfile->total_clusters); + + while (bclfile_next(bclfile) == 0); + ccheckEqual("last Base", 'G', bclfile->base); + icheckEqual("last Quality", 20, bclfile->quality); + icheckEqual("last current cluster", 2609912, bclfile->current_cluster); + icheckEqual("last Total clusters", 2609912, bclfile->total_clusters); + + bclfile_close(bclfile); + + // SCL tests + + bclfile = bclfile_open(MKNAME(DATA_DIR,"/../i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.scl")); + if (bclfile->errmsg) { + fprintf(stderr,"Error opening file: %s\n", bclfile->errmsg); + failure++; + } + icheckEqual("SCL File Type", SCL, bclfile->file_type); + icheckEqual("SCL Total clusters", 2609912, bclfile->total_clusters); + icheckEqual("SCL Current cluster", 0, bclfile->current_cluster); + + bclfile_next(bclfile); + ccheckEqual("SCL First Base", 'A', bclfile->base); + + for (n=0; n<306; n++) { + bclfile_next(bclfile); + } + ccheckEqual("SCL 307 Base", 'T', bclfile->base); + + while (bclfile_next(bclfile) == 0); + ccheckEqual("SCL Last Base", 'C', bclfile->base); + + printf("bclfile tests: %s\n", failure ? "FAILED" : "Passed"); + return failure ? EXIT_FAILURE : EXIT_SUCCESS; +} diff --git a/test/decode/Makefile.am b/test/decode/Makefile.am new file mode 100644 index 0000000..a3abf99 --- /dev/null +++ b/test/decode/Makefile.am @@ -0,0 +1,7 @@ +AM_CPPFLAGS = $(HTSLIB_CPPFLAGS) +AM_LDFLAGS = $(HTSLIB_LDFLAGS) + +bin_PROGRAMS = t_decode +t_decode_SOURCES = t_decode.c +t_decode_CFLAGS = -I$(top_srcdir)/src -DDATA_DIR=$(abs_srcdir) +t_decode_LDADD = $(HTSLIB_HOME)/lib/libhts.a -ldl -lxml2 -lz -llzma -lbz2 -lpthread diff --git a/test/decode/decode.c b/test/decode/t_decode.c similarity index 84% rename from test/decode/decode.c rename to test/decode/t_decode.c index 8a8f024..25e9449 100644 --- a/test/decode/decode.c +++ b/test/decode/t_decode.c @@ -18,13 +18,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -#include +#include "../../src/hts_addendum.c" +#include "../../src/decode.c" -#include "bambi.h" -#include "../../decode.c" #include #include -#include "version.h" +#include + +#define xMKNAME(d,f) #d f +#define MKNAME(d,f) xMKNAME(d,f) const char * bambi_version(void) { @@ -41,17 +43,17 @@ void setup_test_1(int* argc, char*** argv) (*argv)[0] = strdup("bambi"); (*argv)[1] = strdup("decode"); (*argv)[2] = strdup("-i"); - (*argv)[3] = strdup("test/decode/6383_9.sam"); + (*argv)[3] = strdup(MKNAME(DATA_DIR,"/6383_9.sam")); (*argv)[4] = strdup("-o"); - (*argv)[5] = strdup("test/decode/out/xxx.sam"); + (*argv)[5] = strdup(MKNAME(DATA_DIR,"/out/xxx.sam")); (*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("test/decode/6383_8.tag"); + (*argv)[11] = strdup(MKNAME(DATA_DIR,"/6383_8.tag")); (*argv)[12] = strdup("--metrics-file"); - (*argv)[13] = strdup("test/decode/out/6383_9.metrics"); + (*argv)[13] = strdup(MKNAME(DATA_DIR,"/out/6383_9.metrics")); (*argv)[14] = strdup("--barcode-tag-name"); (*argv)[15] = strdup("RT"); } @@ -63,19 +65,19 @@ void setup_test_2(int* argc, char*** argv) (*argv)[0] = strdup("bambi"); (*argv)[1] = strdup("decode"); (*argv)[2] = strdup("-i"); - (*argv)[3] = strdup("test/decode/6383_8.sam"); + (*argv)[3] = strdup(MKNAME(DATA_DIR,"/6383_8.sam")); (*argv)[4] = strdup("-o"); - (*argv)[5] = strdup("test/decode/out/xxx.sam"); + (*argv)[5] = strdup(MKNAME(DATA_DIR,"/out/xxx.sam")); (*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("test/decode/6383_8.tag"); + (*argv)[11] = strdup(MKNAME(DATA_DIR,"/6383_8.tag")); (*argv)[12] = strdup("--convert-low-quality"); (*argv)[13] = strdup("--change-read-name"); (*argv)[14] = strdup("--metrics-file"); - (*argv)[15] = strdup("test/decode/out/6383_8.metrics"); + (*argv)[15] = strdup(MKNAME(DATA_DIR,"/out/6383_8.metrics")); (*argv)[16] = strdup("--barcode-tag-name"); (*argv)[17] = strdup("RT"); } @@ -157,7 +159,7 @@ int main(int argc, char**argv) setup_test_1(&argc_1, &argv_1); main_decode(argc_1-1, argv_1+1); - int result = system("diff test/decode/out/xxx.sam test/decode/out/6383_9_nosplit_nochange.sam"); + int result = system("diff -I ID:bambi " MKNAME(DATA_DIR,"/out/xxx.sam") " " MKNAME(DATA_DIR,"/out/6383_9_nosplit_nochange.sam")); if (result) { fprintf(stderr, "test 1 failed\n"); failure++; @@ -171,7 +173,7 @@ int main(int argc, char**argv) setup_test_2(&argc_2, &argv_2); main_decode(argc_2-1, argv_2+1); - result = system("diff test/decode/out/xxx.sam test/decode/out/6383_8_nosplitN.sam"); + result = system("diff -I ID:bambi " MKNAME(DATA_DIR,"/out/xxx.sam") " " MKNAME(DATA_DIR,"/out/6383_8_nosplitN.sam")); if (result) { fprintf(stderr, "test 2 failed\n"); failure++; diff --git a/test/filterfile/Makefile.am b/test/filterfile/Makefile.am new file mode 100644 index 0000000..0ee3385 --- /dev/null +++ b/test/filterfile/Makefile.am @@ -0,0 +1,4 @@ +bin_PROGRAMS = t_filterfile +t_filterfile_SOURCES = t_filterfile.c +t_filterfile_CFLAGS = -DDATA_DIR=$(abs_srcdir) +AM_COLOR_TESTS=always diff --git a/test/filterfile/t_filterfile.c b/test/filterfile/t_filterfile.c new file mode 100644 index 0000000..1866994 --- /dev/null +++ b/test/filterfile/t_filterfile.c @@ -0,0 +1,97 @@ +/* test/i2b/filterfile.c -- filterfile test cases. + + Copyright (C) 2016 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 "../../src/filterfile.c" +#include +#include +#include +#include + +#define xMKNAME(d,f) #d f +#define MKNAME(d,f) xMKNAME(d,f) + +int verbose = 0; + +int success = 0; +int failure = 0; + +void checkLike(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strstr(actual, expected) == NULL) { + fprintf(stderr, "%s\n" "Expected: %s\n" "Got: %s\n", name, expected, actual); + failure++; + } +} + +void checkEqual(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strcmp(expected, actual)) { + fprintf(stderr, "%s\n" "Expected: %s\n" "Got: %s\n", name, expected, actual); + failure++; + } +} + +void icheckEqual(char *name, int expected, int actual) +{ + if (expected != actual) { + fprintf(stderr, "%s\n" "Expected: %d\n" "Got: %d\n", name, expected, actual); + failure++; + } +} + +int main(int argc, char**argv) +{ + int n, f; + + filter_t *filter; + + filter = filter_open(MKNAME(DATA_DIR,"/../i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/s_1_1101.filter")); + if (filter->errmsg) { + fprintf(stderr,"Error opening file '%s': %s\n", MKNAME(DATA_DIR,"/../i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/s_1_1101.filter"), filter->errmsg); + failure++; + } + icheckEqual("Version", 3, filter->version); + icheckEqual("Total clusters", 2609912, filter->total_clusters); + icheckEqual("Current cluster", 0, filter->current_cluster); + + f = filter_next(filter); + icheckEqual("Next Current cluster", 1, filter->current_cluster); + icheckEqual("Next Current PF clusters", 0, filter->current_pf_cluster); + icheckEqual("First entry", 0, f); + + for (n=0; n<318; n++) { + f = filter_next(filter); + } + icheckEqual("319 entry", 1, f); + icheckEqual("319 Current cluster", 319, filter->current_cluster); + icheckEqual("319 Current PF clusters", 264, filter->current_pf_cluster); + icheckEqual("319 Total clusters", 2609912, filter->total_clusters); + + while (filter_next(filter) != -1); + icheckEqual("Last Current cluster", 2609912, filter->current_cluster); + icheckEqual("Last Current PF clusters", 2425954, filter->current_pf_cluster); + icheckEqual("Last Total clusters", 2609912, filter->total_clusters); + + printf("filter tests: %s\n", failure ? "FAILED" : "Passed"); + return failure ? EXIT_FAILURE : EXIT_SUCCESS; +} diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl.gz b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl.gz new file mode 100644 index 0000000..2dd4f3e Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl.gz differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.scl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.scl new file mode 100644 index 0000000..6241205 Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.scl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101_uncompressed.bcl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101_uncompressed.bcl new file mode 100644 index 0000000..941c13d Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101_uncompressed.bcl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl new file mode 100644 index 0000000..579b89c Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.scl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.scl new file mode 100644 index 0000000..bea5a2c Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.scl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl new file mode 100644 index 0000000..db0dc48 Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.scl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.scl new file mode 100644 index 0000000..d53333f Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.scl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl new file mode 100644 index 0000000..85ea508 Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.scl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.scl new file mode 100644 index 0000000..9120a81 Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.scl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl new file mode 100644 index 0000000..b859fb7 Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.scl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.scl new file mode 100644 index 0000000..3b51d8e Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.scl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl new file mode 100644 index 0000000..b859fb7 Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.scl b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.scl new file mode 100644 index 0000000..3b51d8e Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.scl differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/s_1_1101.filter new file mode 100644 index 0000000..aa1016d Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/L001/s_1_1101.filter differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/config.xml b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/config.xml new file mode 100644 index 0000000..398ee90 --- /dev/null +++ b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/config.xml @@ -0,0 +1,373 @@ + + + + + 0.6 + + 2 + 0 + 1 + 0 + 1 + 50 + 1 + + + 2 + 0 + 51 + 0 + 51 + 100 + 2 + + + 2 + 0 + 2 + 1 + 1 + 50 + 1 + 0 + 0 + + + 2 + 0 + 52 + 1 + 51 + 100 + 2 + 0 + 0 + + 0 + failed-chastity + le + 1.0 + + + + + 0 + 0 + 0 + 0 + 0 + + 1 + 50 + + + 51 + 100 + 110323_HS13_06000_B_B039WABXX + + HS13 + 0 + 0 + 0 + 0 + + 1 + 2 + + + 51 + 52 + 110323_HS13_06000_B_B039WABXX + + 110323_HS13_06000_B_B039WABXX + 110323 + 6000 + PL14 + + + + + s + 1102 + 1103 + 1101 + 1104 + 1106 + 1105 + 1107 + 1108 + 1201 + 1202 + 1204 + 1203 + 1206 + 1205 + 1208 + 1207 + 2101 + 2102 + 2104 + 2103 + 2105 + 2106 + 2108 + 2107 + 2201 + 2202 + 2203 + 2204 + 2206 + 2205 + 2207 + 2208 + + + s + 1101 + 1102 + 1104 + 1103 + 1105 + 1106 + 1107 + 1108 + 1201 + 1202 + 1203 + 1204 + 1206 + 1205 + 1207 + 1208 + 2102 + 2101 + 2103 + 2104 + 2105 + 2106 + 2107 + 2108 + 2201 + 2202 + 2205 + 2203 + 2206 + 2204 + 2207 + 2208 + + + s + 1101 + 1102 + 1103 + 1105 + 1106 + 1104 + 1107 + 1201 + 1202 + 1108 + 1205 + 1203 + 1206 + 1204 + 2101 + 1207 + 2102 + 1208 + 2105 + 2106 + 2103 + 2104 + 2201 + 2202 + 2107 + 2108 + 2205 + 2206 + 2203 + 2204 + 2207 + 2208 + + + s + 1101 + 1102 + 1105 + 1106 + 1103 + 1201 + 1104 + 1202 + 1107 + 1205 + 1108 + 1206 + 1203 + 2101 + 2102 + 1204 + 1207 + 2105 + 2106 + 1208 + 2103 + 2201 + 2202 + 2107 + 2205 + 2104 + 2206 + 2203 + 2108 + 2207 + 2204 + 2208 + + + s + 1101 + 1105 + 1102 + 1201 + 1106 + 1103 + 1205 + 1202 + 1107 + 1104 + 1206 + 2101 + 1203 + 1108 + 2102 + 2105 + 1207 + 2106 + 1204 + 2201 + 2103 + 2202 + 2205 + 1208 + 2107 + 2206 + 2104 + 2203 + 2108 + 2207 + 2204 + 2208 + + + s + 1101 + 1102 + 1105 + 1106 + 1201 + 1103 + 1202 + 1205 + 1107 + 1104 + 1206 + 2101 + 1203 + 1108 + 2105 + 2102 + 1207 + 2106 + 2201 + 1204 + 2103 + 2205 + 2202 + 1208 + 2107 + 2206 + 2104 + 2203 + 2108 + 2207 + 2204 + 2208 + + + s + 1101 + 1105 + 1102 + 1201 + 1106 + 1205 + 1202 + 1103 + 2101 + 1206 + 1107 + 2105 + 2102 + 1203 + 2201 + 1104 + 2106 + 1207 + 2205 + 1108 + 2202 + 2103 + 1204 + 2206 + 2107 + 1208 + 2203 + 2104 + 2207 + 2108 + 2204 + 2208 + + + s + 1101 + 1105 + 1102 + 1201 + 1106 + 1205 + 1202 + 1103 + 2101 + 1206 + 1107 + 2105 + 2102 + 1203 + 1104 + 2201 + 2106 + 1207 + 1108 + 2205 + 2202 + 2103 + 1204 + 2206 + 2107 + 1208 + 2203 + 2104 + 2207 + 2108 + 2204 + 2208 + + + + diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/L001/s_1_1101.clocs b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/L001/s_1_1101.clocs new file mode 100644 index 0000000..f17b55d Binary files /dev/null and b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/L001/s_1_1101.clocs differ diff --git a/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/config.xml b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/config.xml new file mode 100755 index 0000000..3c652dc --- /dev/null +++ b/test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/config.xml @@ -0,0 +1,334 @@ + + + + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + 1 + 50 + 110323_HS13_06000_B_B039WABXX + + + 51 + 100 + 110323_HS13_06000_B_B039WABXX + + HS13 + 0 + 0 + 0 + 0 + + 1 + 50 + 110323_HS13_06000_B_B039WABXX + + + 51 + 100 + 110323_HS13_06000_B_B039WABXX + + 110323_HS13_06000_B_B039WABXX + 110323 + 6000 + PL14 + + + + + s + 1102 + 1103 + 1101 + 1104 + 1107 + 1106 + 1105 + 1108 + 1201 + 1204 + 1203 + 1202 + 1205 + 1208 + 1207 + 2103 + 2104 + 2101 + 1206 + 2107 + 2108 + 2102 + 2105 + 2203 + 2204 + 2201 + 2106 + 2207 + 2208 + 2202 + 2205 + 2206 + + + s + 1104 + 1103 + 1101 + 1108 + 1107 + 1102 + 1105 + 1203 + 1204 + 1106 + 1201 + 1202 + 1207 + 1208 + 1205 + 2103 + 1206 + 2104 + 2107 + 2101 + 2102 + 2203 + 2108 + 2106 + 2207 + 2105 + 2204 + 2202 + 2201 + 2208 + 2206 + 2205 + + + s + 1103 + 1107 + 1104 + 1203 + 1102 + 1108 + 1101 + 1106 + 1204 + 1207 + 1105 + 1202 + 2103 + 1208 + 1201 + 1206 + 2104 + 2107 + 1205 + 2102 + 2203 + 2108 + 2101 + 2204 + 2207 + 2105 + 2106 + 2208 + 2201 + 2202 + 2206 + 2205 + + + s + 1103 + 1104 + 1107 + 1108 + 1102 + 1101 + 1203 + 1207 + 1105 + 1204 + 1106 + 1208 + 2103 + 1201 + 1202 + 2104 + 2107 + 1205 + 1206 + 2108 + 2102 + 2203 + 2204 + 2101 + 2106 + 2207 + 2202 + 2208 + 2105 + 2206 + 2201 + 2205 + + + s + 1103 + 1104 + 1108 + 1107 + 1102 + 1204 + 1203 + 1106 + 1207 + 1208 + 1101 + 1202 + 1105 + 2103 + 2104 + 1206 + 1201 + 2107 + 2108 + 2102 + 1205 + 2203 + 2204 + 2106 + 2101 + 2208 + 2207 + 2202 + 2105 + 2201 + 2206 + 2205 + + + s + 1104 + 1103 + 1107 + 1108 + 1203 + 1102 + 1204 + 1101 + 1106 + 1208 + 1202 + 1207 + 1105 + 2104 + 2103 + 1206 + 1201 + 2108 + 2102 + 1205 + 2204 + 2106 + 2107 + 2202 + 2101 + 2208 + 2203 + 2105 + 2206 + 2201 + 2207 + 2205 + + + s + 1104 + 1102 + 1103 + 1108 + 1106 + 1101 + 1107 + 1204 + 1202 + 1203 + 1105 + 1206 + 1208 + 2102 + 2104 + 1201 + 1207 + 2108 + 2204 + 2106 + 2208 + 1205 + 2103 + 2202 + 2101 + 2206 + 2107 + 2105 + 2203 + 2207 + 2201 + 2205 + + + s + 1104 + 1108 + 1204 + 1102 + 1208 + 1106 + 2104 + 1202 + 2108 + 1206 + 1103 + 2204 + 1107 + 2102 + 1101 + 2208 + 2106 + 1203 + 1105 + 1207 + 2202 + 1201 + 2206 + 2103 + 1205 + 2107 + 2101 + 2105 + 2203 + 2207 + 2201 + 2205 + + + + diff --git a/test/i2b/111014_M00119_0028_AMS0001310-00300/Data/Intensities/L001/s_1_1.locs b/test/i2b/111014_M00119_0028_AMS0001310-00300/Data/Intensities/L001/s_1_1.locs new file mode 100755 index 0000000..9d344ef Binary files /dev/null and b/test/i2b/111014_M00119_0028_AMS0001310-00300/Data/Intensities/L001/s_1_1.locs differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete.txt new file mode 100755 index 0000000..79a6ab4 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete.txt @@ -0,0 +1 @@ +6/25/2014,02:49:01.615,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read1.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read1.txt new file mode 100755 index 0000000..aca2b73 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read1.txt @@ -0,0 +1 @@ +6/24/2014,19:08:44.528,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read2.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read2.txt new file mode 100755 index 0000000..8868eff --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read2.txt @@ -0,0 +1 @@ +6/24/2014,20:18:46.734,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read3.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read3.txt new file mode 100755 index 0000000..f344f09 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read3.txt @@ -0,0 +1 @@ +6/24/2014,21:12:17.107,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read4.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read4.txt new file mode 100755 index 0000000..79cab3f --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Basecalling_Netcopy_complete_Read4.txt @@ -0,0 +1 @@ +6/25/2014,02:49:01.625,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/Effective.cfg b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/Effective.cfg new file mode 100755 index 0000000..6ebec3c --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/Effective.cfg @@ -0,0 +1,1279 @@ +; C:\Illumina\MiSeq Control Software\MiSeqSoftware.Hardware.cfg +; #include (InstrumentType).cfg +C:\Illumina\MiSeq Control Software\Configs\Instruments\Shock.cfg +; ShockProto.cfg +; MiSeq.cfg +; MiSeqPilot.cfg +; ..\MiSeqCommon.cfg +; FPGA.cfg +; YMotor_FPGAStepper.cfg +; ZMotor_PI_300um.cfg +; ExcitationLEDs.cfg +; SipperMotor.cfg +; Fluidics.cfg +; Sensors.cfg +; StatusLights.cfg +; BurnInTest.cfg +; ..\SonyCamera.cfg +; ..\Compensator.cfg +; C:\MiSeqOverride.cfg + + +[_fileinfo] +overrideversion = 1.0.10_Shock 5/24/2012 5:15 PM ; MiSeqOverride.cfg + +[_notes] +instrumenttypedescription = Shock ; Shock.cfg + +[burnintest.bubble] +numberofcycles = 1 ; BurnInTest.cfg +percenterrorsthreshold = 20 ; BurnInTest.cfg +triespersolution = 3 ; BurnInTest.cfg + +[burnintest.chiller] +chillerlowerbounddegreesc = 3.5 ; BurnInTest.cfg +chillerramprateminutes = 180 ; BurnInTest.cfg +chillersetpointdegreesc = 4 ; BurnInTest.cfg +chillerupperbounddegreesc = 6 ; BurnInTest.cfg + +[burnintest.compensator] +gonumberofcyclesinsteadofruntime = false ; BurnInTest.cfg +numberofcycles = 10 ; BurnInTest.cfg +timemsbetweenmoves = 1000 ; BurnInTest.cfg + +[burnintest.fctec] +hightempholdtimesecs = 120 ; BurnInTest.cfg +hightempramptimeallowedsecs = 40 ; BurnInTest.cfg +hightempsetpointdegreesc = 70 ; BurnInTest.cfg +lowtempholdtimesecs = 60 ; BurnInTest.cfg +lowtempramptimeallowedsecs = 30 ; BurnInTest.cfg +lowtempsetpointdegreesc = 22 ; BurnInTest.cfg +tolerancedegreesc = 0.5 ; BurnInTest.cfg + +[burnintest.fluidicscommon] +afterprimingrefillwithpr2 = true ; BurnInTest.cfg +bubbletestquarter = 3 ; BurnInTest.cfg +pumpandvalvetestquarter = 2 ; BurnInTest.cfg +sippertestquarter = 1 ; BurnInTest.cfg +volumetestquarter = 4 ; BurnInTest.cfg + +[burnintest.led] +ledofftimems = 2000 ; BurnInTest.cfg +ledontimems = 1000 ; BurnInTest.cfg +photodiodepercentchangeallowed = 10 ; BurnInTest.cfg + +[burnintest.led.green] +numvalues = 4 ; BurnInTest.cfg +testcurrentma1 = 2000 ; BurnInTest.cfg +testcurrentma2 = 4000 ; BurnInTest.cfg +testcurrentma3 = 6000 ; BurnInTest.cfg +testcurrentma4 = 7000 ; BurnInTest.cfg + +[burnintest.led.red] +numvalues = 4 ; BurnInTest.cfg +testcurrentma1 = 375 ; BurnInTest.cfg +testcurrentma2 = 750 ; BurnInTest.cfg +testcurrentma3 = 1125 ; BurnInTest.cfg +testcurrentma4 = 1500 ; BurnInTest.cfg + +[burnintest.lightbar] +displaydelayms = 1000 ; BurnInTest.cfg + +[burnintest.mirror] ; BurnInTest.cfg + +[burnintest.pumpandvalve] +cycleapumpstowaste = false ; BurnInTest.cfg +cyclearepeatduringobcg = 30 ; BurnInTest.cfg +cyclearepeatduringsbs = 302 ; BurnInTest.cfg +cyclebrepeatduringobcg = 15 ; BurnInTest.cfg +cyclebrepeatduringsbs = 151 ; BurnInTest.cfg +enablecyclea = true ; BurnInTest.cfg +enablecycleb = false ; BurnInTest.cfg +ignoretimelimit = false ; BurnInTest.cfg +primeaspiraterateulperminute = 2000 ; BurnInTest.cfg +primedispenserateulperminute = 2500 ; BurnInTest.cfg +primevolumeul = 1500 ; BurnInTest.cfg +testaspiraterateulperminute = 2000 ; BurnInTest.cfg +testaspiratevolumeul = 50 ; BurnInTest.cfg +testaspiratevolumeulcycleb = 50 ; BurnInTest.cfg +testdelaymsafteraspirate = 500 ; BurnInTest.cfg +testdelaymsafterdispense = 500 ; BurnInTest.cfg +testdelaymsbetweenadjacentvalvemoves = 500 ; BurnInTest.cfg +testdispenserateulperminute = 2500 ; BurnInTest.cfg +testnumberofruncycles = 12 ; BurnInTest.cfg +valvepositionsperpumptest = 1 ; BurnInTest.cfg + +[burnintest.rfid] +maxallowedblockreaderrorratepercent = 1 ; BurnInTest.cfg +readtagrepeats = 25 ; BurnInTest.cfg +retriesperblock = 5 ; BurnInTest.cfg +stopiferror = false ; BurnInTest.cfg + +[burnintest.sipper] +downwaittimems = 40000 ; BurnInTest.cfg +upwaittimems = 40000 ; BurnInTest.cfg + +[burnintest.ste.settings] +testtimeminutes = 1 ; BurnInTest.cfg +usestesettings = false ; BurnInTest.cfg + +[burnintest.volume] +numberofcycles = 1 ; BurnInTest.cfg +percenterrorsthreshold = 10 ; BurnInTest.cfg + +[burnintest.ystage] +cyclesperhomingoperation = 300 ; BurnInTest.cfg +percenterrorsthreshold = 10 ; BurnInTest.cfg + +[burnintest.zstage] +cyclesperhomingoperation = 300 ; BurnInTest.cfg +percenterrorsthreshold = 1.33 ; BurnInTest.cfg +testpositionmm1 = -0.145 ; BurnInTest.cfg +testpositionmm2 = -0.155 ; BurnInTest.cfg + +[calibration] +flowcell1xoffset = 0 ; MiSeqCommon.cfg +flowcell1yoffset = 0 ; MiSeqCommon.cfg +flowcell2xoffset = 0 ; MiSeqCommon.cfg +flowcell2yoffset = 0 ; MiSeqCommon.cfg + +[cavrolanepump] +bypassvalve = BypassValve ; Fluidics.cfg +reagentvalve = RheodyneSelectorValve ; Fluidics.cfg + +[chillerdooropensensor] ; Sensors.cfg + +[chillertemperaturecontroller] +chillerinnertecblock = ChillerInnerTECBlock ; Fluidics.cfg + +[cloud] +performcloudtest = true ; MiSeqCommon.cfg + +[exception illumina.instrument.bolt.logic.incompatiblefirmwareversion] +fatal = true ; MiSeqCommon.cfg +retryable = false ; MiSeqCommon.cfg + +[exception illumina.instrument.bolt.logic.movestoppedbecausedoorisopenexception] +fatal = false ; MiSeqCommon.cfg +retryable = true ; MiSeqCommon.cfg + +[exception illumina.instrument.bolt.logic.serialportreceiverexception] +fatal = true ; MiSeqCommon.cfg +retryable = false ; MiSeqCommon.cfg + +[excitationled] +allowbothledsonatsametime = false ; ExcitationLEDs.cfg +dacoffset = 0 ; ExcitationLEDs.cfg +measurepower = false ; ExcitationLEDs.cfg + +[flowcellcartridgerfidsensor] ; Sensors.cfg + +[flowcellclampclosedsensor] ; Sensors.cfg + +[flowcellfluidics] +cosmeticname = FlowCellFluidics ; Fluidics.cfg +flowcelltemperaturecontroller = FlowCellTemperatureController ; Fluidics.cfg +flowsensor = FlowSensor ; Fluidics.cfg +lanepump = CavroLanePump ; Fluidics.cfg + +[flowsensor] ; Fluidics.cfg + +[fluidics] +chillertemperaturecontroller = ChillerTemperatureController ; Fluidics.cfg +flowcellfluidics = FlowCellFluidics ; Fluidics.cfg + +[focus params] +analyzeimages = true ; MiSeqCommon.cfg +channeltouse = Focus T ; MiSeqCommon.cfg +coarsefocuscenterz = -0.17759 ; MiSeqOverride.cfg +coarsefocusnumsteps = 41 ; MiSeqCommon.cfg +coarsefocusstepsize = 0.002 ; MiSeqCommon.cfg +darksamplecontrastthreshold = 20 ; MiSeqCommon.cfg +focusmirrorzoffset = -0.007 ; MiSeqOverride.cfg +imagebottomsurfacefirst = false ; MiSeqCommon.cfg +lowsnrcontrastthreshold = 40 ; MiSeqCommon.cfg +lowsnrexposuretimeboostfactor = 1.5 ; MiSeqCommon.cfg +maxautofocusexposuretimems = 1000 ; MiSeqCommon.cfg +minimagespasssnrthresh = 0 ; MiSeqCommon.cfg +scanbottomsurfaceonly = false ; MiSeqCommon.cfg +skipautofocusmaxzcorrection = 0.0005 ; MiSeqOverride.cfg +skipautofocusnoskipcycles = 5 ; MiSeqOverride.cfg +skipautofocusntiles = 4 ; MiSeqOverride.cfg +throughfocuscenterz = -0.17759 ; MiSeqOverride.cfg +throughfocusmetric = Brenner ; MiSeqCommon.cfg +throughfocusnumsteps = 41 ; MiSeqCommon.cfg +throughfocusstepsize = 0.0005 ; MiSeqCommon.cfg +tiltuntiltfocuscenterz = -0.17759 ; MiSeqOverride.cfg +tiltuntiltfocusnumsteps = 41 ; MiSeqCommon.cfg +tiltuntiltfocusstepsize = 0.0005 ; MiSeqCommon.cfg +usepiecewiselinearfocusmodel = true ; MiSeqCommon.cfg +usepredictiveoptimization = true ; MiSeqCommon.cfg +zoffsettofocusled = -0.000746 ; MiSeqOverride.cfg + +[fpga features v3] +array_height_sensor = 0.0 ; FPGA.cfg +camera_selection = 0.5 ; FPGA.cfg +deinterlace = 0.0 ; FPGA.cfg +door_s_cmds = 0.24 ; FPGA.cfg +doorsenrd = 0.32 ; FPGA.cfg +doorsstate = 0.29 ; FPGA.cfg +dynamic_focus = 0.0 ; FPGA.cfg +ejen = 0.0 ; FPGA.cfg +filterslider_separate_speeds = 0.0 ; FPGA.cfg +free_run = 0.0 ; FPGA.cfg +hm2 = 0.0 ; FPGA.cfg +hw_zramp_zvelctrl_and_more = 0.1 ; FPGA.cfg +index_counter = 0.0 ; FPGA.cfg +laser_pwr = 0.0 ; FPGA.cfg +laserpb = 0.27 ; FPGA.cfg +laserset = 0.0 ; FPGA.cfg +led_cmds = 0.0 ; FPGA.cfg +ledbar_ms_timing = 0.26 ; FPGA.cfg +ledbarswap = 0.26 ; FPGA.cfg +ledharm = 0.26 ; FPGA.cfg +ledmodepb = 0.18 ; FPGA.cfg +ledmodepwr = 0.33 ; FPGA.cfg +lsen = 0.0 ; FPGA.cfg +miscrvc = 0.0 ; FPGA.cfg +msgsen = 0.29 ; FPGA.cfg +pwrben = 0.33 ; FPGA.cfg +short_cmds = 0.0 ; FPGA.cfg +sw_bruno = 0.0 ; FPGA.cfg +sw_ylck = 0.15 ; FPGA.cfg +swbeadchip = 0.25 ; FPGA.cfg +swbeadcompat = 0.37 ; FPGA.cfg +swceiling = 0.33 ; FPGA.cfg +swcvdbg = 0.0 ; FPGA.cfg +swdbugpxlx2 = 0.23 ; FPGA.cfg +swdith_igain = 0.33 ; FPGA.cfg +swdith_ihist = 0.33 ; FPGA.cfg +swdith_size = 0.33 ; FPGA.cfg +swftlsr = 0.16 ; FPGA.cfg +swlsrshut = 0.15 ; FPGA.cfg +swsig_tower = 0.0 ; FPGA.cfg +swtgimage = 0.37 ; FPGA.cfg +swtime = 0.19 ; FPGA.cfg +swvix = 0.0 ; FPGA.cfg +swyz_pos = 0.0 ; FPGA.cfg +swzlag = 0.15 ; FPGA.cfg +t1moveto = 0.16x ; FPGA.cfg +tdibb = 0.16 ; FPGA.cfg +tdiclines = 0.16x ; FPGA.cfg +tdimask = 0.13 ; FPGA.cfg +tdipulses = 0.16z15 ; FPGA.cfg +tdiyarm3 = 0.16z ; FPGA.cfg +tdiyarm4 = 0.36 ; FPGA.cfg +tdiystart = 0.36 ; FPGA.cfg +tld = 0.16z ; FPGA.cfg +zarm = 0.0 ; FPGA.cfg +zmvmathfix = 0.27 ; FPGA.cfg +zspec = 0.16z ; FPGA.cfg + +[fpga features v4] +array_height_sensor = 0.0 ; FPGA.cfg +deinterlace = 0.0 ; FPGA.cfg +dynamic_focus = 0.0 ; FPGA.cfg +ejen = 0.0 ; FPGA.cfg +filterslider_separate_speeds = 0.0 ; FPGA.cfg +free_run = 0.0 ; FPGA.cfg +hm2 = 0.0 ; FPGA.cfg +hw_zramp_zvelctrl_and_more = 0.1 ; FPGA.cfg +index_counter = 0.0 ; FPGA.cfg +laser_pwr = 0.0 ; FPGA.cfg +laserset = 0.0 ; FPGA.cfg +led_cmds = 0.0 ; FPGA.cfg +lsen = 0.0 ; FPGA.cfg +short_cmds = 0.0 ; FPGA.cfg +sw_bruno = 0.0 ; FPGA.cfg +swceiling = 0.18 ; FPGA.cfg +swcvdbg = 0.0 ; FPGA.cfg +swdith_igain = 0.19 ; FPGA.cfg +swdith_ihist = 0.19 ; FPGA.cfg +swdith_size = 0.15 ; FPGA.cfg +swgrp_size = 0.15 ; FPGA.cfg +swsig_tower = 0.0 ; FPGA.cfg +swtime = 99.99 ; FPGA.cfg +swvix = 0.0 ; FPGA.cfg +swyz_pos = 0.0 ; FPGA.cfg +swzlag = 0.4 ; FPGA.cfg +t1moveto = 0.4 ; FPGA.cfg +tdimask = 0.4 ; FPGA.cfg +zarm = 0.20 ; FPGA.cfg + +[fpga features v6] +camdblsnap_zdelay = 1.0 ; FPGA.cfg +camdly = 1.0 ; FPGA.cfg +dummy = 0.0 ; FPGA.cfg +emdly = 0.52 ; FPGA.cfg +flashwr = 0.45 ; FPGA.cfg +flow1arm_with_t1_response = 0.67 ; FPGA.cfg +flow1dly = 1.0 ; FPGA.cfg +focmrrdly = 0.52 ; FPGA.cfg +focmrrfoc_focmrrimg = 0.14 ; FPGA.cfg +minimum_required_version = 1.13 ; FPGA.cfg +prototype_instrument = 0.0 ; FPGA.cfg +thermal_control_protocol_v2 = 0.49 ; FPGA.cfg +yhcur = 0.73 ; FPGA.cfg +yhome_enc = 0.12 ; FPGA.cfg +ymvto_returns_steps = 0.67 ; FPGA.cfg +yprof_0_1 = 1.2 ; FPGA.cfg +yvelus = 0.73 ; FPGA.cfg +yvprofrd = 0.80 ; FPGA.cfg + +[fpga features v8] +~lightbar = 0.15 ; FPGA.cfg +camdblsnap_zdelay = 0.6 ; FPGA.cfg +camdly = 0.6 ; FPGA.cfg +dummy = 0.0 ; FPGA.cfg +emdly = 0.0 ; FPGA.cfg +emin_emout = 0.14 ; FPGA.cfg +flashwr = 0.0 ; FPGA.cfg +flow1arm_with_t1_response = 0.7 ; FPGA.cfg +flow1dly = 0.6 ; FPGA.cfg +focmrrdly = 0.0 ; FPGA.cfg +focmrrfoc_focmrrimg = 0.0 ; FPGA.cfg +lightbar = 0.7 ; FPGA.cfg +minimum_required_version = 0.18 ; FPGA.cfg +pilot_instrument = 0.0 ; FPGA.cfg +thermal_control_protocol_v2 = 0.0 ; FPGA.cfg +thermal_control_protocol_v3 = 0.14 ; FPGA.cfg +yhcur = 0.2 ; FPGA.cfg +yhome_enc = 0.0 ; FPGA.cfg +ymvto_returns_steps = 0.0 ; FPGA.cfg +yprof_0_1 = 0.7 ; FPGA.cfg +yvelus = 0.2 ; FPGA.cfg +yvprofrd = 0.6 ; FPGA.cfg +zmv_zstep_zclk = 0.0 ; FPGA.cfg + +[fpga features v9] +buben2 = 5.12 ; FPGA.cfg +camdblsnap_zdelay = 0.0 ; FPGA.cfg +camdly = 0.0 ; FPGA.cfg +diffcompcur = 5.8 ; FPGA.cfg +dummy = 0.0 ; FPGA.cfg +emdly = 0.1 ; FPGA.cfg +emin_emout = 3.0 ; FPGA.cfg +flashwr = 0.0 ; FPGA.cfg +flow1arm_with_t1_response = 0.0 ; FPGA.cfg +flow1dly = 0.0 ; FPGA.cfg +focmrrdly = 0.0 ; FPGA.cfg +focmrrfoc_focmrrimg = 0.0 ; FPGA.cfg +lightbar = 0.3 ; FPGA.cfg +minimum_required_version = 1.6 ; FPGA.cfg +otled = 1.4 ; FPGA.cfg +production_instrument = 0.0 ; FPGA.cfg +sipcur = 0.0 ; FPGA.cfg +sipvel = 0.0 ; FPGA.cfg +supports_96c_and_tec2tcirc = 2.5 ; FPGA.cfg +swcampwrdn = 1.0 ; FPGA.cfg +swfx2reset = 1.0 ; FPGA.cfg +thermal_control_protocol_v2 = 0.0 ; FPGA.cfg +thermal_control_protocol_v3 = 1.7 ; FPGA.cfg +yhcur = 0.0 ; FPGA.cfg +yhome_enc = 0.0 ; FPGA.cfg +ymvto_returns_steps = 0.0 ; FPGA.cfg +yprof_0_1 = 0.0 ; FPGA.cfg +ytablemove = 0.6 ; FPGA.cfg +yvelus = 0.0 ; FPGA.cfg +yvprofrd = 0.0 ; FPGA.cfg +zfltacquire = 2.2 ; FPGA.cfg +zmv_zstep_zclk = 0.0 ; FPGA.cfg + +[fpga initialization] +command1 = SIPCUR 0 ; FPGA.cfg +command2 = SIPVEL 0 ; FPGA.cfg + +[instrument] +balance = MettlerToledo ; Fluidics.cfg +camera = SonyCamera ; SonyCamera.cfg +compensator = Compensator ; Compensator.cfg +excitationled = ExcitationLED ; ExcitationLEDs.cfg +fluidics = Fluidics ; Fluidics.cfg +focusmirror = FocusMirror ; MiSeqCommon.cfg +fpga = FPGA ; FPGA.cfg +sensors = Sensors ; Sensors.cfg +sippermotor = SipperMotor ; SipperMotor.cfg +statuslights = StatusLights ; StatusLights.cfg +ymotor = YMotor_FPGAStepper ; YMotor_FPGAStepper.cfg +zmotor = ZMotor_PI_300um ; ZMotor_PI_300um.cfg + +[instrument.compensator] +currentpercentin = 80 ; Compensator.cfg +currentpercentout = 80 ; Compensator.cfg +delaycurrentpercentin = 40 ; Compensator.cfg +delaycurrentpercentout = 70 ; Compensator.cfg +delayms = 500 ; Compensator.cfg +ignoresensorerrors = false ; Compensator.cfg +moveindelayms = 20 ; Compensator.cfg +moveoutdelayms = 20 ; Compensator.cfg +setcurrentcommand = EMCUR ; Compensator.cfg +setdelaycommand = EMDLY ; Compensator.cfg +stopcurrentpercentin = 60 ; Compensator.cfg +stopcurrentpercentout = 75 ; Compensator.cfg +zoffsetmm = 0.035 ; Compensator.cfg + +[instrument.compensator.retry] +currentpercentin = 80 ; Compensator.cfg +currentpercentout = 80 ; Compensator.cfg +delaycurrentpercentin = 40 ; Compensator.cfg +delaycurrentpercentout = 75 ; Compensator.cfg +delayms = 1000 ; Compensator.cfg +moveindelayms = 40 ; Compensator.cfg +moveoutdelayms = 40 ; Compensator.cfg +numretries = 3 ; Compensator.cfg +stopcurrentpercentin = 60 ; Compensator.cfg +stopcurrentpercentout = 75 ; Compensator.cfg + +[instrument.excitationled1] +calibrationdrivecurrentma1 = 750 ; MiSeqOverride.cfg +calibrationdrivecurrentma2 = 1000 ; MiSeqOverride.cfg +calibrationdrivecurrentma3 = 1250 ; MiSeqOverride.cfg +calibrationdrivecurrentma4 = 1500 ; MiSeqOverride.cfg +calibrationdrivecurrentma5 = 1750 ; MiSeqOverride.cfg +calibrationdrivecurrentma6 = 2000 ; MiSeqOverride.cfg +calibrationphotodiodeadc1 = 7595 ; MiSeqOverride.cfg +calibrationphotodiodeadc2 = 10359 ; MiSeqOverride.cfg +calibrationphotodiodeadc3 = 13214 ; MiSeqOverride.cfg +calibrationphotodiodeadc4 = 15945 ; MiSeqOverride.cfg +calibrationphotodiodeadc5 = 18558 ; MiSeqOverride.cfg +calibrationphotodiodeadc6 = 21189 ; MiSeqOverride.cfg +calibrationpowermetermw1 = 90.84 ; MiSeqOverride.cfg +calibrationpowermetermw2 = 122.8 ; MiSeqOverride.cfg +calibrationpowermetermw3 = 150.1 ; MiSeqOverride.cfg +calibrationpowermetermw4 = 170.2 ; MiSeqOverride.cfg +calibrationpowermetermw5 = 181.3 ; MiSeqOverride.cfg +calibrationpowermetermw6 = 185.3 ; MiSeqOverride.cfg +color = Red ; ExcitationLEDs.cfg +cosmeticname = RedLED ; ExcitationLEDs.cfg +currentmaperdacunit = 2.2393 ; MiSeq.cfg +enablepolling = false ; ExcitationLEDs.cfg +enablepowermode = true ; MiSeq.cfg +ledcontinuouscurrentma = 1500 ; MiSeq.cfg +ledcontinuouspowermw = 160 ; MiSeq.cfg +ledsnapcurrentma = 1500 ; MiSeq.cfg +ledsnappowermw = 205 ; MiSeq.cfg +maxledcontinuouscurrentma = 1500 ; MiSeq.cfg +maxledcontinuouspowermw = 160 ; MiSeq.cfg +maxledsnapcurrentma = 2050 ; MiSeq.cfg +maxledsnappowermw = 205 ; MiSeq.cfg +minledcontinuouspowermw = 0 ; MiSeq.cfg +minledcurrentma = 0 ; ExcitationLEDs.cfg +minledsnappowermw = 0 ; MiSeq.cfg +numcalibrationpoints = 6 ; MiSeqOverride.cfg +overtemperaturelimitadc = 0 ; ExcitationLEDs.cfg +pollinglogintervalms = 10000 ; ExcitationLEDs.cfg +powermwfortile1 = 205 ; MiSeq.cfg +powermwfortile2 = 205 ; MiSeq.cfg +powermwfortile3 = 205 ; MiSeq.cfg +powermwfortile4 = 205 ; MiSeq.cfg +powermwfortile5 = 205 ; MiSeq.cfg +powermwfortile6 = 205 ; MiSeq.cfg +powermwfortile7 = 205 ; MiSeq.cfg +powermwfortile8 = 205 ; MiSeq.cfg +powermwfortile9 = 205 ; MiSeq.cfg +powermwfortile10 = 205 ; MiSeq.cfg +powermwfortile11 = 205 ; MiSeq.cfg +powermwfortile12 = 205 ; MiSeq.cfg +powermwfortile13 = 205 ; MiSeq.cfg +powermwfortile14 = 205 ; MiSeq.cfg +powerpertilenumtiles = 14 ; MiSeq.cfg +usepowerpertilemode = false ; MiSeq.cfg +wavelength = 660 ; ExcitationLEDs.cfg + +[instrument.excitationled2] +calibrationdrivecurrentma1 = 2000 ; MiSeqOverride.cfg +calibrationdrivecurrentma2 = 3000 ; MiSeqOverride.cfg +calibrationdrivecurrentma3 = 4000 ; MiSeqOverride.cfg +calibrationdrivecurrentma4 = 5000 ; MiSeqOverride.cfg +calibrationdrivecurrentma5 = 6000 ; MiSeqOverride.cfg +calibrationdrivecurrentma6 = 7000 ; MiSeqOverride.cfg +calibrationphotodiodeadc1 = 921 ; MiSeqOverride.cfg +calibrationphotodiodeadc2 = 1249 ; MiSeqOverride.cfg +calibrationphotodiodeadc3 = 1544 ; MiSeqOverride.cfg +calibrationphotodiodeadc4 = 1815 ; MiSeqOverride.cfg +calibrationphotodiodeadc5 = 2071 ; MiSeqOverride.cfg +calibrationphotodiodeadc6 = 2307 ; MiSeqOverride.cfg +calibrationpowermetermw1 = 78.39 ; MiSeqOverride.cfg +calibrationpowermetermw2 = 105.7 ; MiSeqOverride.cfg +calibrationpowermetermw3 = 128.6 ; MiSeqOverride.cfg +calibrationpowermetermw4 = 148.3 ; MiSeqOverride.cfg +calibrationpowermetermw5 = 165.5 ; MiSeqOverride.cfg +calibrationpowermetermw6 = 180.4 ; MiSeqOverride.cfg +color = Green ; ExcitationLEDs.cfg +cosmeticname = GreenLED ; ExcitationLEDs.cfg +currentmaperdacunit = 2.2393 ; MiSeq.cfg +enablepolling = false ; ExcitationLEDs.cfg +enablepowermode = true ; MiSeq.cfg +ledcontinuouscurrentma = 2000 ; MiSeq.cfg +ledcontinuouspowermw = 75 ; MiSeq.cfg +ledsnapcurrentma = 6500 ; MiSeq.cfg +ledsnappowermw = 180 ; MiSeq.cfg +maxledcontinuouscurrentma = 2000 ; MiSeq.cfg +maxledcontinuouspowermw = 75 ; MiSeq.cfg +maxledsnapcurrentma = 7000 ; MiSeq.cfg +maxledsnappowermw = 185 ; MiSeq.cfg +minledcontinuouspowermw = 0 ; MiSeq.cfg +minledcurrentma = 0 ; ExcitationLEDs.cfg +minledsnappowermw = 0 ; MiSeq.cfg +numcalibrationpoints = 6 ; MiSeqOverride.cfg +overtemperaturelimitadc = 3000 ; ExcitationLEDs.cfg +pollinglogintervalms = 10000 ; ExcitationLEDs.cfg +powermwfortile1 = 180 ; MiSeq.cfg +powermwfortile2 = 180 ; MiSeq.cfg +powermwfortile3 = 180 ; MiSeq.cfg +powermwfortile4 = 180 ; MiSeq.cfg +powermwfortile5 = 180 ; MiSeq.cfg +powermwfortile6 = 180 ; MiSeq.cfg +powermwfortile7 = 180 ; MiSeq.cfg +powermwfortile8 = 180 ; MiSeq.cfg +powermwfortile9 = 180 ; MiSeq.cfg +powermwfortile10 = 180 ; MiSeq.cfg +powermwfortile11 = 180 ; MiSeq.cfg +powermwfortile12 = 180 ; MiSeq.cfg +powermwfortile13 = 180 ; MiSeq.cfg +powermwfortile14 = 180 ; MiSeq.cfg +powerpertilenumtiles = 14 ; MiSeq.cfg +usepowerpertilemode = false ; MiSeq.cfg +wavelength = 532 ; ExcitationLEDs.cfg + +[instrument.fluidics] ; Fluidics.cfg + +[instrument.fluidics.chillertemperaturecontroller] +calibrationhighmeasured = 28 ; Fluidics.cfg +calibrationhightarget = 28 ; Fluidics.cfg +calibrationlowmeasured = 4 ; Fluidics.cfg +calibrationlowtarget = 4 ; Fluidics.cfg +coolingderivativeterm = 0 ; Fluidics.cfg +coolingestimatedundershoot = 1 ; Fluidics.cfg +coolingfeedforwardstepsize = 6.0 ; Fluidics.cfg +coolingfeedforwardthreshold = 6.0 ; Fluidics.cfg +coolingintegralterm = 0.1 ; Fluidics.cfg +coolingmaxvoltage = 1.8 ; Fluidics.cfg +coolingproportionalterm = 10.0 ; Fluidics.cfg +cosmeticname = ChillerTempControl ; Fluidics.cfg +detailedlogging = false ; Fluidics.cfg +enablepolling = true ; Fluidics.cfg +floattointegerscale = 1000000 ; Fluidics.cfg +heatingderivativeterm = 0.0 ; Fluidics.cfg +heatingestimatedovershoot = 1 ; Fluidics.cfg +heatingfeedforwardstepsize = 2.5 ; Fluidics.cfg +heatingfeedforwardthreshold = 10.0 ; Fluidics.cfg +heatingintegralterm = 0.1 ; Fluidics.cfg +heatingmaxvoltage = 1.8315 ; Fluidics.cfg +heatingproportionalterm = 10.0 ; Fluidics.cfg +initialintegralwhenswitching = 1 ; Fluidics.cfg +innerouterloop = 1 ; Fluidics.cfg +loggingrateseconds = 60 ; Fluidics.cfg +lowerbound = 0.1 ; Fluidics.cfg +maxtemp = 30 ; Fluidics.cfg +mintemp = 1 ; Fluidics.cfg +samplerateseconds = 1 ; Fluidics.cfg +samplingrateseconds = 5 ; Fluidics.cfg +startteconinit = true ; Fluidics.cfg +targettemponinit = 4 ; Fluidics.cfg +tecnumber = 1 ; Fluidics.cfg +useambientmode = false ; Fluidics.cfg + +[instrument.fluidics.chillertemperaturecontroller.chillerinnertecblock] +coolingderivativeterm = 0.0 ; Fluidics.cfg +coolingestimatedundershoot = 1 ; Fluidics.cfg +coolingfeedforwardstepsize = 2.2727 ; Fluidics.cfg +coolingfeedforwardthreshold = 6.0 ; Fluidics.cfg +coolingintegralterm = 0.01 ; Fluidics.cfg +coolingmaxvoltage = 2.2727 ; Fluidics.cfg +coolingproportionalterm = 1.0 ; Fluidics.cfg +floattointegerscale = 1000000 ; Fluidics.cfg +heatingderivativeterm = 0.0 ; Fluidics.cfg +heatingestimatedovershoot = 1 ; Fluidics.cfg +heatingfeedforwardstepsize = 2.5 ; Fluidics.cfg +heatingfeedforwardthreshold = 10.0 ; Fluidics.cfg +heatingintegralterm = 0.01 ; Fluidics.cfg +heatingmaxvoltage = 2.2727 ; Fluidics.cfg +heatingproportionalterm = 1.0 ; Fluidics.cfg +initialintegralwhenswitching = 0.0 ; Fluidics.cfg +innerouterloop = 0 ; Fluidics.cfg +maxtemp = 30 ; Fluidics.cfg +mintemp = 1 ; Fluidics.cfg +samplerateseconds = 1 ; Fluidics.cfg +tecnumber = 1 ; Fluidics.cfg +useambientmode = false ; Fluidics.cfg + +[instrument.fluidics.flowcellfluidics1] +cosmeticname = FlowCell ; Fluidics.cfg + +[instrument.fluidics.flowcellfluidics1.cavrolanepump] +allowdispensetobypass = false ; Fluidics.cfg +asyncdeliverydelay = true ; Fluidics.cfg +baudrate = 9600 ; Fluidics.cfg +comportname = COM5 ; Fluidics.cfg +cosmeticname = LanePump ; Fluidics.cfg +delaymsbetweendispenseandsolenoid = 2 ; Fluidics.cfg +delaymsbetweenreagentvalveandaspirate = 100 ; Fluidics.cfg +delaymsforsolution1 = 2000 ; Fluidics.cfg +delaymsforsolution2 = 2000 ; Fluidics.cfg +delaymsforsolution3 = 2000 ; Fluidics.cfg +delaymsforsolution4 = 2000 ; Fluidics.cfg +delaymsforsolution5 = 2000 ; Fluidics.cfg +delaymsforsolution6 = 2000 ; Fluidics.cfg +delaymsforsolution7 = 2000 ; Fluidics.cfg +delaymsforsolution8 = 2000 ; Fluidics.cfg +delaymsforsolution9 = 2000 ; Fluidics.cfg +delaymsforsolution10 = 2000 ; Fluidics.cfg +delaymsforsolution11 = 2000 ; Fluidics.cfg +delaymsforsolution12 = 2000 ; Fluidics.cfg +delaymsforsolution13 = 2000 ; Fluidics.cfg +delaymsforsolution14 = 2000 ; Fluidics.cfg +delaymsforsolution15 = 2000 ; Fluidics.cfg +delaymsforsolution16 = 2000 ; Fluidics.cfg +delaymsforsolution17 = 2000 ; Fluidics.cfg +delaymsforsolution18 = 2000 ; Fluidics.cfg +delaymsforsolution19 = 2000 ; Fluidics.cfg +delaymsforsolution20 = 2000 ; Fluidics.cfg +delaymsforsolution21 = 2000 ; Fluidics.cfg +delaymsforsolution22 = 2000 ; Fluidics.cfg +delaymsforsolution23 = 2000 ; Fluidics.cfg +delaymsforsolution24 = 2000 ; Fluidics.cfg +delaymsforsolution25 = 2000 ; Fluidics.cfg +flushandwarn = true ; Fluidics.cfg +fpgacommandprefix = P1 ; Fluidics.cfg +handshake = None ; Fluidics.cfg +maxvelocityulperminute = 7500 ; Fluidics.cfg +minvelocityulperminute = 13 ; Fluidics.cfg +movetostartspeedulpermin = 2500 ; Fluidics.cfg +multiaspirate = true ; Fluidics.cfg +speedcommand = V ; Fluidics.cfg +stepsperfullstroke = 3000 ; Fluidics.cfg +syringevolumeul = 500 ; Shock.cfg + +[instrument.fluidics.flowcellfluidics1.cavrolanepump.rheodyneselectorvalve] +airposition = 23 ; Fluidics.cfg +avoidposition = 18 ; Fluidics.cfg +baudrate = 19200 ; Fluidics.cfg +comportname = COM6 ; Fluidics.cfg +controllerbusypollrate = 420 ; Fluidics.cfg +controllerbusytimeoutms = 60000 ; Fluidics.cfg +cosmeticname = ReagentValve ; Fluidics.cfg +flushandwarn = false ; Fluidics.cfg +flushdelaybetweenchars = 20 ; Fluidics.cfg +fpgacommandprefix = P2 ; Fluidics.cfg +handshake = None ; Fluidics.cfg +hometimeoutms = 60000 ; Fluidics.cfg +initialposition = 24 ; Fluidics.cfg +numberofports = 24 ; Fluidics.cfg +numberofretries = 4 ; Fluidics.cfg +plugposition = 24 ; Fluidics.cfg + +[instrument.fluidics.flowcellfluidics1.cavrolanepump.viciselectorvalve] +airposition = 23 ; Fluidics.cfg +avoidposition = 18 ; Fluidics.cfg +baudrate = 9600 ; Fluidics.cfg +comportname = COM2 ; Fluidics.cfg +cosmeticname = ReagentValve ; Fluidics.cfg +flushandwarn = false ; Fluidics.cfg +flushdelaybetweenchars = 20 ; Fluidics.cfg +handshake = None ; Fluidics.cfg +initialposition = 24 ; Fluidics.cfg +numberofports = 24 ; Fluidics.cfg +numberofretries = 10 ; Fluidics.cfg +plugposition = 24 ; Fluidics.cfg + +[instrument.fluidics.flowcellfluidics1.flowcelltemperaturecontroller] +ambientmodedeadband = 2.0 ; Fluidics.cfg +calibrationhighmeasured = 91.4 ; MiSeqOverride.cfg +calibrationhightarget = 96 ; MiSeqOverride.cfg +calibrationlowmeasured = 16.7 ; MiSeqOverride.cfg +calibrationlowtarget = 16 ; MiSeqOverride.cfg +commandforoldcomboboard70c = TEC2TCIRC 4990 10000 1500 31600 3976 ; Fluidics.cfg +coolingderivativeterm = 0.0 ; Fluidics.cfg +coolingestimatedundershoot = 1 ; Fluidics.cfg +coolingfeedforwardstepsize = 6.0 ; Fluidics.cfg +coolingfeedforwardthreshold = 6.0 ; Fluidics.cfg +coolingintegralterm = 0 ; Fluidics.cfg +coolingmaxvoltage = 1.2000 ; Fluidics.cfg +coolingproportionalterm = 1.0 ; Fluidics.cfg +cosmeticname = FlowCellTempControl ; Fluidics.cfg +detailedlogging = false ; Fluidics.cfg +enablehighspeedpolling = true ; Fluidics.cfg +enablepolling = true ; Fluidics.cfg +floattointegerscale = 1000000 ; Fluidics.cfg +heatingderivativeterm = 0.0 ; Fluidics.cfg +heatingestimatedovershoot = 1 ; Fluidics.cfg +heatingfeedforwardstepsize = 2.5 ; Fluidics.cfg +heatingfeedforwardthreshold = 10.0 ; Fluidics.cfg +heatingintegralterm = 0.05 ; Fluidics.cfg +heatingmaxvoltage = 2.25 ; Fluidics.cfg +heatingproportionalterm = 0.25 ; Fluidics.cfg +highspeedpollingratems = 1000 ; Fluidics.cfg +initialintegralwhenswitching = 1 ; Fluidics.cfg +innerouterloop = 0 ; Fluidics.cfg +loggingrateseconds = 30 ; Fluidics.cfg +maxtemp = 96.5 ; MiSeq.cfg +mintemp = 10 ; Fluidics.cfg +samplerateseconds = 1 ; Fluidics.cfg +samplingrateseconds = 5 ; Fluidics.cfg +startteconinit = false ; Fluidics.cfg +supports96c = true ; MiSeq.cfg +targettemponinit = 25 ; Fluidics.cfg +tecnumber = 2 ; Fluidics.cfg +useambientmode = true ; Fluidics.cfg + +[instrument.fluidics.flowcellfluidics1.flowsensor] +bubbleburstmaxedgespertimespan = 50 ; Fluidics.cfg +bubbleburstminallowedtimespanms = 500 ; Fluidics.cfg +bubblereportintervalms = 5000 ; Fluidics.cfg +calculatesimfpgaresponse = true ; Fluidics.cfg +commandedbubblevolumeul = 10 ; Fluidics.cfg +commandedflowrateulpermin = 2000 ; Fluidics.cfg +debugforcebubblesenabled = false ; Fluidics.cfg +debugforcebubblesintervalms = 10 ; Fluidics.cfg +debugforcebubblesperinterval = 1 ; Fluidics.cfg +errorthresholdpercent = 20 ; Fluidics.cfg +firstsensortimeoutms = 15000 ; Fluidics.cfg +fpgacommandtimeoutms = 20000 ; Fluidics.cfg +intialprimevolume = 1000 ; Fluidics.cfg +lastcalibrated = 5/16/2013 9:47:30 AM ; MiSeqOverride.cfg +maxbubblesallowedperreportinterval = 250 ; Fluidics.cfg +maxcorrelation = 0.3 ; Fluidics.cfg +measureflowratefpgacommand = FLOW2ARM ; Fluidics.cfg +monitorbubblesduringrun = true ; Fluidics.cfg +onlyonebubbleratewarningperrun = true ; Fluidics.cfg +simulatedfpgaresponse = t1=9000,tof=3000,bl=500,trp=1 ; Fluidics.cfg +solution = 3 ; Fluidics.cfg +volumebetweensensorsul = 20.13 ; Fluidics.cfg +volumereagentvalvetofirstsensorul = 200 ; Fluidics.cfg + +[instrument.focusmirror] +currentpercentnormal = 80 ; MiSeqCommon.cfg +currentpercenttiltfocus = 80 ; MiSeqCommon.cfg +delayms = 200 ; MiSeqCommon.cfg +ignoresensorerrors = false ; MiSeqCommon.cfg +setcurrentcommand = FOCMRRCUR ; MiSeqCommon.cfg +setdelaycommand = FOCMRRDLY ; MiSeqCommon.cfg + +[instrument.fpga] +baudrate = 115200 ; FPGA.cfg +command_delay = 1 ; FPGA.cfg +commandcomportname = COM3 ; FPGA.cfg +commandhandshake = none ; FPGA.cfg +requiredfpgaversionprefix = 9 ; MiSeq.cfg +resettimeoutms = 15000 ; FPGA.cfg +response_receiverpollingintervalms = 0 ; FPGA.cfg +responsecomportname = COM4 ; FPGA.cfg +responsehandshake = none ; FPGA.cfg +simulatedversion = 9.99.99 ; MiSeq.cfg + +[instrument.sensors] ; Sensors.cfg + +[instrument.sensors.chillerdooropensensor] +invertsensor = false ; Sensors.cfg +simulatedsensorstate = false ; Sensors.cfg +statusparamtag = CD ; Sensors.cfg + +[instrument.sensors.flowcellclampclosedsensor] +invertsensor = false ; Sensors.cfg +readsensorcommand = TEC2CLMP? ; Sensors.cfg +simulatedsensorstate = true ; Sensors.cfg + +[instrument.sensors.reagenttraypresentsensor] +invertsensor = true ; Sensors.cfg +simulatedsensorstate = true ; Sensors.cfg +statusparamtag = RP ; Sensors.cfg + +[instrument.sensors.rfid] ; Sensors.cfg + +[instrument.sensors.rfid.flowcellcartridgerfidsensor] +rfiddevicenumber = 1 ; Sensors.cfg +simulatedexpirationdate = Oct 1, 2099 ; Sensors.cfg +simulatedlotnumber = 9999999 ; Sensors.cfg +simulatednumberofcycles = 350 ; Sensors.cfg +simulatednumberofruns = 1 ; Sensors.cfg +simulatednumberoftiles = 28 ; Sensors.cfg +simulatedpairedend = true ; Sensors.cfg +simulatedpartnumber = 1111111111 ; Sensors.cfg +simulatedpartnumberrevision = C ; Sensors.cfg +simulatedreaderror = false ; Sensors.cfg +simulatedreagentcartridgeversion = 1 ; Sensors.cfg +simulatedrunid = This is run ID 123.456.78911111119 ; Sensors.cfg +simulatedserialnumber = FC1234567-ABCDE ; Sensors.cfg +simulatedsignature = AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD EEEEEEEE ; Sensors.cfg +simulateduid = E007ABAC 0BCD975E ; Sensors.cfg +simulatedwriteerror = false ; Sensors.cfg + +[instrument.sensors.rfid.pr2rfidsensor] +rfiddevicenumber = 3 ; Sensors.cfg +simulatedexpirationdate = Oct 1, 2099 ; Sensors.cfg +simulatedlotnumber = 9999999 ; Sensors.cfg +simulatednumberofcycles = 350 ; Sensors.cfg +simulatednumberofruns = 1 ; Sensors.cfg +simulatednumberoftiles = 28 ; Sensors.cfg +simulatedpairedend = true ; Sensors.cfg +simulatedpartnumber = 3333333333 ; Sensors.cfg +simulatedpartnumberrevision = B ; Sensors.cfg +simulatedreaderror = false ; Sensors.cfg +simulatedreagentcartridgeversion = 1 ; Sensors.cfg +simulatedrunid = This is run ID 123.456.78911111119 ; Sensors.cfg +simulatedserialnumber = PR1234567-ABCDE ; Sensors.cfg +simulatedsignature = AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD EEEEEEEE ; Sensors.cfg +simulateduid = E0041234 ABCD1234 ; Sensors.cfg +simulatedwriteerror = false ; Sensors.cfg + +[instrument.sensors.rfid.reagentrfidsensor] +rfiddevicenumber = 2 ; Sensors.cfg +simulatedexpirationdate = Oct 1, 2099 ; Sensors.cfg +simulatedlotnumber = 9999999 ; Sensors.cfg +simulatednumberofcycles = 350 ; Sensors.cfg +simulatednumberofruns = 1 ; Sensors.cfg +simulatednumberoftiles = 28 ; Sensors.cfg +simulatedpairedend = true ; Sensors.cfg +simulatedpartnumber = 2222222222 ; Sensors.cfg +simulatedpartnumberrevision = A ; Sensors.cfg +simulatedreaderror = false ; Sensors.cfg +simulatedreagentcartridgeversion = 1 ; Sensors.cfg +simulatedrunid = This is run ID 123.456.78911111119 ; Sensors.cfg +simulatedserialnumber = RG1234567-00CDE ; Sensors.cfg +simulatedsignature = AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD EEEEEEEE ; Sensors.cfg +simulateduid = E0071234 A0A0A0A0 ; Sensors.cfg +simulatedwriteerror = false ; Sensors.cfg + +[instrument.sensors.sampledooropensensor] +invertsensor = true ; Sensors.cfg +simulatedsensorstate = false ; Sensors.cfg +statusparamtag = SD ; Sensors.cfg + +[instrument.sensors.wasteandpr2sipperdownsensor] +invertsensor = true ; Sensors.cfg +simulatedsensorstate = true ; Sensors.cfg +statusparamtag = WS ; Sensors.cfg + +[instrument.sensors.wastebottlefullsensor] +invertsensor = false ; Sensors.cfg +simulatedsensorstate = false ; Sensors.cfg +statusparamtag = WF ; Sensors.cfg + +[instrument.sensors.wastebottleinstalledsensor] +invertsensor = false ; Sensors.cfg +simulatedsensorstate = true ; Sensors.cfg +statusparamtag = WI ; Sensors.cfg + +[instrument.sippermotor] +currentpercent = 70 ; MiSeqOverride.cfg +movedowncommand = SIPDOWN ; SipperMotor.cfg +moveupcommand = SIPUP ; SipperMotor.cfg +readdownsensorcommand = SIPDNSNSRRD ; SipperMotor.cfg +readupsensorcommand = SIPUPSNSRRD ; SipperMotor.cfg +setcurrentcommand = SIPCUR ; SipperMotor.cfg +setvelocitycommand = SIPVEL ; SipperMotor.cfg +velocitypercent = 30 ; SipperMotor.cfg + +[instrument.sonycamera] +cosmeticname = Camera ; SonyCamera.cfg +enablefpgaledexposurecontrol = true ; SonyCamera.cfg +extradelaybeforereturnms = 0 ; SonyCamera.cfg +maxretries = 3 ; SonyCamera.cfg +numsensors = 2 ; MiSeqPilot.cfg +simulatedpath = D:\Simulator\Illunis ; SonyCamera.cfg +skipsimulationimaging = false ; SonyCamera.cfg +triggermode = HardwareTrigger ; MiSeqPilot.cfg +uselegacydriver = false ; MiSeqPilot.cfg +waittimebeforeinitializeafterpowercycle = 20000 ; SonyCamera.cfg +warningifdurationms = 2000 ; SonyCamera.cfg + +[instrument.statuslights] ; StatusLights.cfg + +[instrument.statuslights.ledbars] ; StatusLights.cfg + +[instrument.statuslights.ledbars.ledbar1] ; StatusLights.cfg + +[instrument.statuslights.ledbars.ledbar2] ; StatusLights.cfg + +[instrument.ymotor_fpgastepper] +accelcontrolunitspermm2 = 1600 ; YMotor_FPGAStepper.cfg +accelerationmmpersecsquared = 1 ; YMotor_FPGAStepper.cfg +applicationmaxvelocitymmpersec = 10 ; YMotor_FPGAStepper.cfg +applicationminvelocitymmpersec = 0 ; YMotor_FPGAStepper.cfg +backlashcorrectionmm = 0.01 ; YMotor_FPGAStepper.cfg +closedloopprofilecommand = YVPROF 3 ; YMotor_FPGAStepper.cfg +closedloopusage = Auto ; YMotor_FPGAStepper.cfg +controllermaxvelocitycontrolunitspersec = 28800 ; YMotor_FPGAStepper.cfg +controllerminvelocitycontrolunitspersec = 48 ; YMotor_FPGAStepper.cfg +cosmeticname = Y Motor ; YMotor_FPGAStepper.cfg +defaultmotortimeoutms = 60000 ; YMotor_FPGAStepper.cfg +defaulttilemovetablenumber = 2 ; YMotor_FPGAStepper.cfg +dooropenpollingintervalms = 1000 ; YMotor_FPGAStepper.cfg +encodercountspermm = 2048 ; YMotor_FPGAStepper.cfg +encodertestmovesizemm = 1.000 ; YMotor_FPGAStepper.cfg +encodertestonlyifautodetect = true ; YMotor_FPGAStepper.cfg +encodertestsettlingdelayms = 10 ; YMotor_FPGAStepper.cfg +encodertesttolerancepercent = 3 ; YMotor_FPGAStepper.cfg +encodertestusestablebasedmoves = true ; YMotor_FPGAStepper.cfg +extramotiontimeoutms = 60000 ; YMotor_FPGAStepper.cfg +failifsampledooropenduringymove = false ; MiSeqSoftware.Hardware.cfg +forceclosedloopmovetotile1 = false ; YMotor_FPGAStepper.cfg +holdcurrentpercent = 50 ; YMotor_FPGAStepper.cfg +homerequiredeveninunsafemode = false ; YMotor_FPGAStepper.cfg +homevelocitymmpersec = 10 ; MiSeq.cfg +homingtimeoutms = 60000 ; YMotor_FPGAStepper.cfg +magnetunderobjectivepositionmm = 0 ; YMotor_FPGAStepper.cfg +maxaccelerationmmpersecsquared = 10 ; YMotor_FPGAStepper.cfg +maxburnindutycycle = 50 ; YMotor_FPGAStepper.cfg +maxflightrecordersamplesperread = 5 ; YMotor_FPGAStepper.cfg +maxhomeattempts = 5 ; YMotor_FPGAStepper.cfg +maxtolerancemm = 1 ; YMotor_FPGAStepper.cfg +minaccelerationmmpersecsquared = 0.1 ; YMotor_FPGAStepper.cfg +mintolerancemm = 0.001 ; YMotor_FPGAStepper.cfg +movecurrentpercent = 100 ; YMotor_FPGAStepper.cfg +numberoftilemovetables = 2 ; YMotor_FPGAStepper.cfg +numretries = 2 ; YMotor_FPGAStepper.cfg +openloopdeadzoneprofilecommand = YVPROF 3 ; YMotor_FPGAStepper.cfg +openloopnoencoderprofilecommand = YVPROF 0 ; YMotor_FPGAStepper.cfg +positionpollinginterval = 0 ; YMotor_FPGAStepper.cfg +retractforchemistrydistancefrompositivesoftlimitmm = 0.2 ; YMotor_FPGAStepper.cfg +reversedirection = false ; YMotor_FPGAStepper.cfg +settlingtimems = 3000 ; YMotor_FPGAStepper.cfg +shortmovevelocitymmpersec = 2 ; YMotor_FPGAStepper.cfg +softlimitnegativemm = 0.0 ; YMotor_FPGAStepper.cfg +softlimitpositivemm = 75.25507 ; MiSeqOverride.cfg +softlimitsdefinedinconfigfile = true ; YMotor_FPGAStepper.cfg +statuspollinginterval = 50 ; YMotor_FPGAStepper.cfg +stepspermm = 1600 ; YMotor_FPGAStepper.cfg +tablebasedmovesettlingtimems = 800 ; MiSeqOverride.cfg +tablebasedmovesettlingtimems2 = 1100 ; YMotor_FPGAStepper.cfg +tablebasedtilemovefilepath = Configs\Y Tile Move Tables\1693steps_J32e5_Shaped85Hz_times.txt ; YMotor_FPGAStepper.cfg +tablebasedtilemovefilepath2 = Configs\Y Tile Move Tables\1328steps_J32e5_Shaped85Hz_times.txt ; YMotor_FPGAStepper.cfg +tablebasedtilemovetolerancemm = 0.5 ; YMotor_FPGAStepper.cfg +tablebasedtilemovetriggertolerancesteps = 3 ; YMotor_FPGAStepper.cfg +tolerancemm = 0.01 ; YMotor_FPGAStepper.cfg +uselimitsensors = false ; YMotor_FPGAStepper.cfg +velocitycontrolunitspermm = 1600 ; YMotor_FPGAStepper.cfg +velocitygranularitycontrolunitspersec = 1 ; YMotor_FPGAStepper.cfg +velocitymmpersecond = 2 ; YMotor_FPGAStepper.cfg + +[instrument.zmotor_pi_300um] +accelcontrolunitspermm2 = 1 ; ZMotor_PI_300um.cfg +accelerationmmpersecsquared = 1 ; ZMotor_PI_300um.cfg +adc_vmax = 12 ; ZMotor_PI_300um.cfg +adc_vmin = -2 ; ZMotor_PI_300um.cfg +adcdacvoltageerrorlimit = 1.00 ; ZMotor_PI_300um.cfg +adcdacvoltagewarninglimit = 0.300 ; ZMotor_PI_300um.cfg +adcnoiseerrorlimit = 3277 ; ZMotor_PI_300um.cfg +adcnoisewarninglimit = 655 ; ZMotor_PI_300um.cfg +applicationmaxvelocitymmpersec = 1 ; ZMotor_PI_300um.cfg +applicationminvelocitymmpersec = 0 ; ZMotor_PI_300um.cfg +backlashcorrectionmm = 0 ; ZMotor_PI_300um.cfg +calibratedlinearitytesttolerancemm = 0.0001 ; ZMotor_PI_300um.cfg +calibrationadcreads = 50 ; ZMotor_PI_300um.cfg +calibrationsettlingtimems = 1500 ; ZMotor_PI_300um.cfg +controllermaxvelocitycontrolunitspersec = 1 ; ZMotor_PI_300um.cfg +controllerminvelocitycontrolunitspersec = 1 ; ZMotor_PI_300um.cfg +cosmeticname = Z Motor ; ZMotor_PI_300um.cfg +dac_calibrationv1 = 2 ; ZMotor_PI_300um.cfg +dac_calibrationv2 = 8 ; ZMotor_PI_300um.cfg +dac_vmax = 10 ; ZMotor_PI_300um.cfg +dac_vmin = 0 ; ZMotor_PI_300um.cfg +defaultmotortimeoutms = 60000 ; ZMotor_PI_300um.cfg +extramotiontimeoutms = 0 ; ZMotor_PI_300um.cfg +findsoftlimitsnumadcreads = 15 ; ZMotor_PI_300um.cfg +findsoftlimitssettlingtimems = 500 ; ZMotor_PI_300um.cfg +homerequiredeveninunsafemode = true ; ZMotor_PI_300um.cfg +homingtimeoutms = 30000 ; ZMotor_PI_300um.cfg +limitsactivehigh = false ; ZMotor_PI_300um.cfg +linearitytestnumadcreads = 10 ; ZMotor_PI_300um.cfg +linearitytestsettlingtimems = 600 ; ZMotor_PI_300um.cfg +linearityteststepmm = 0.008 ; ZMotor_PI_300um.cfg +logdatafromallmoves = false ; ZMotor_PI_300um.cfg +logstacktraceofmoves = false ; ZMotor_PI_300um.cfg +longmovedistanceum = 40 ; ZMotor_PI_300um.cfg +longmovesettlingtimems = 500 ; ZMotor_PI_300um.cfg +magnetunderobjectivepositionmm = 0 ; ZMotor_PI_300um.cfg +marginum = 1 ; ZMotor_PI_300um.cfg +maxaccelerationmmpersecsquared = 1 ; ZMotor_PI_300um.cfg +maxactualpositionreadtimems = 150 ; ZMotor_PI_300um.cfg +maxburnindutycycle = 50 ; ZMotor_PI_300um.cfg +maxflightrecordersamplesperread = 5 ; ZMotor_PI_300um.cfg +maxtolerancemm = 0.2999 ; ZMotor_PI_300um.cfg +minaccelerationmmpersecsquared = 1 ; ZMotor_PI_300um.cfg +minallowedsoftlimitspanum = 280 ; ZMotor_PI_300um.cfg +mintolerancemm = 0.00001 ; ZMotor_PI_300um.cfg +moveadcreads = 10 ; ZMotor_PI_300um.cfg +moveyzlegacylogic = false ; ZMotor_PI_300um.cfg +numretries = 10 ; ZMotor_PI_300um.cfg +piezooverloadmarginvolts = 0.1 ; ZMotor_PI_300um.cfg +positionpollinginterval = 0 ; ZMotor_PI_300um.cfg +rangemmaccordingtopi = 0.300 ; ZMotor_PI_300um.cfg +reversedirection = true ; ZMotor_PI_300um.cfg +safenegativelimitmarginum = 5 ; ZMotor_PI_300um.cfg +safenegativelimitstepum = 3 ; ZMotor_PI_300um.cfg +safepositivelimitmarginum = 5 ; ZMotor_PI_300um.cfg +safepositivelimitstepum = 3 ; ZMotor_PI_300um.cfg +settlingtimems = 150 ; ZMotor_PI_300um.cfg +softlimitnegativemm = -0.290 ; ZMotor_PI_300um.cfg +softlimitpositivemm = -0.010 ; ZMotor_PI_300um.cfg +softlimitsdefinedinconfigfile = false ; ZMotor_PI_300um.cfg +statuspollinginterval = 50 ; ZMotor_PI_300um.cfg +stepspermm = 163837.5 ; ZMotor_PI_300um.cfg +tolerancemm = 0.004 ; ZMotor_PI_300um.cfg +uncalibratedlinearitytesttolerancemm = 0.006 ; ZMotor_PI_300um.cfg +useadcreadouts = true ; ZMotor_PI_300um.cfg +usesoftlimitsfromcfg = false ; ZMotor_PI_300um.cfg +usezmvduringhoming = false ; ZMotor_PI_300um.cfg +velocitycontrolunitspermm = 1 ; ZMotor_PI_300um.cfg +velocitygranularitycontrolunitspersec = 1 ; ZMotor_PI_300um.cfg +velocitymmpersecond = 1 ; ZMotor_PI_300um.cfg + +[instrument.zmotor_pi_300um.settlingtimetest] +endholdtimems = 1000 ; ZMotor_PI_300um.cfg +finalpositionwindowms = 100 ; ZMotor_PI_300um.cfg +flightrecordersampleperiodus = 1000 ; ZMotor_PI_300um.cfg +hysteresisfactor = 0.8 ; ZMotor_PI_300um.cfg +maxallowedrisetimems = 100 ; ZMotor_PI_300um.cfg +maxallowedsettlingtimems = 150 ; ZMotor_PI_300um.cfg +maxallowedtimebetweensamplesms = 30 ; ZMotor_PI_300um.cfg +maxfinalerrorum = 0.1 ; ZMotor_PI_300um.cfg +maxfinalpeaknoiseum = 10 ; ZMotor_PI_300um.cfg +maxfinalstddeviationum = 1 ; ZMotor_PI_300um.cfg +maxovershootum = 10 ; ZMotor_PI_300um.cfg +maxtestattemptsforoksampledelays = 5 ; ZMotor_PI_300um.cfg +minallowedrisetimems = 0 ; ZMotor_PI_300um.cfg +numteststothrowout = 1 ; ZMotor_PI_300um.cfg +overshootwindowms = 100 ; ZMotor_PI_300um.cfg +preconditionatend = false ; ZMotor_PI_300um.cfg +preconditionatendholdtimems = 1000 ; ZMotor_PI_300um.cfg +settlingtoleranceplusminusum = 0.15 ; ZMotor_PI_300um.cfg +settlingwindowms = 200 ; ZMotor_PI_300um.cfg +startholdtimems = 1000 ; ZMotor_PI_300um.cfg +startsamplingatexistingposition = false ; ZMotor_PI_300um.cfg +startsamplingatexistingpositionholdtimems = 1000 ; ZMotor_PI_300um.cfg +targetendum = -180 ; ZMotor_PI_300um.cfg +targetstartum = -150 ; ZMotor_PI_300um.cfg +usehysteresisfactor = true ; ZMotor_PI_300um.cfg + +[ledbar] +blinkdacstepsize = 983 ; MiSeqPilot.cfg +blinkratems = 255 ; StatusLights.cfg +bluedac = 983 ; MiSeqPilot.cfg +greendac = 983 ; MiSeqPilot.cfg +maxbluedac = 983 ; MiSeqPilot.cfg +maxgreendac = 983 ; MiSeqPilot.cfg +maxyellowdac = 1638 ; MiSeqPilot.cfg +yellowdac = 1638 ; MiSeqPilot.cfg + +[ledbars] +ledbar = LEDBar ; StatusLights.cfg + +[lightbartesting] +autodisplaydelayms = 3000 ; MiSeqCommon.cfg + +[mettlertoledo] +baudrate = 9600 ; Fluidics.cfg +comportname = COM2 ; Fluidics.cfg +cosmeticname = Balance ; Fluidics.cfg +flushandwarn = false ; Fluidics.cfg +handshake = None ; Fluidics.cfg +simulated = true ; Fluidics.cfg + +[miseqsoftware] +initialcompensatorposition = IntoPath ; MiSeqSoftware.Hardware.cfg +maxlogfilesize = 5000000 ; MiSeqSoftware.Hardware.cfg +maxnumlogfiles = 30 ; MiSeqSoftware.Hardware.cfg + +[multiimageprocessor] +enabled = false ; MiSeqCommon.cfg +tilescongfigstring = 0-0.001-2:1-0.001-2:2-0.001-2 ; MiSeqCommon.cfg + +[per tile focus params] +tile10deltaz = 0 ; MiSeqCommon.cfg +tile11deltaz = 0 ; MiSeqCommon.cfg +tile12deltaz = 0 ; MiSeqCommon.cfg +tile1deltaz = 0 ; MiSeqCommon.cfg +tile2deltaz = 0 ; MiSeqCommon.cfg +tile3deltaz = 0 ; MiSeqCommon.cfg +tile4deltaz = 0 ; MiSeqCommon.cfg +tile5deltaz = 0 ; MiSeqCommon.cfg +tile6deltaz = 0 ; MiSeqCommon.cfg +tile7deltaz = 0 ; MiSeqCommon.cfg +tile8deltaz = 0 ; MiSeqCommon.cfg +tile9deltaz = 0 ; MiSeqCommon.cfg + +[pr2rfidsensor] ; Sensors.cfg + +[predictive ydrift settings] +camerapixelsizeinmicrons = 5.49 ; MiSeqCommon.cfg +numcyclebeforeanalysis = 10 ; MiSeqCommon.cfg +numcyclesanalyze = 5 ; MiSeqCommon.cfg +opticalmagnification = 16.25 ; MiSeqCommon.cfg + +[reagentrfidsensor] ; Sensors.cfg + +[reagenttraypresentsensor] ; Sensors.cfg + +[rfid] +allowedblockreaderrorratepercent = 1.0 ; Sensors.cfg +flowcellcartridgerfidsensor = FlowcellCartridgeRFIDSensor ; Sensors.cfg +functionaltestnumretries = 2 ; Sensors.cfg +functionaltestrepeats = 10 ; Sensors.cfg +functionaltestrepeatwritemode = false ; Sensors.cfg +functionalteststopiferror = true ; Sensors.cfg +pr2rfidsensor = PR2RFIDSensor ; Sensors.cfg +readblocknumretries = 20 ; Sensors.cfg +readuidhardwaretimeoutms = 1000 ; Sensors.cfg +readuidnumretries = 8 ; Sensors.cfg +reagentrfidsensor = ReagentRFIDSensor ; Sensors.cfg +writeblocknumretries = 30 ; Sensors.cfg + +[rfid.tagtype.4] +lockblockhardwaretimeoutms = 5000 ; Sensors.cfg +maxsupportedblocknumber = 27 ; Sensors.cfg +minsupportedblocknumber = 0 ; Sensors.cfg +optionflag = 0 ; Sensors.cfg +readblockhardwaretimeoutms = 5000 ; Sensors.cfg +readuidhardwaretimeoutms = 5000 ; Sensors.cfg +tagtypename = NXP ; Sensors.cfg +writeblockhardwaretimeoutms = 5000 ; Sensors.cfg + +[rfid.tagtype.7] +lockblockhardwaretimeoutms = 5000 ; Sensors.cfg +maxsupportedblocknumber = 63 ; Sensors.cfg +minsupportedblocknumber = 0 ; Sensors.cfg +optionflag = 1 ; Sensors.cfg +readblockhardwaretimeoutms = 5000 ; Sensors.cfg +readuidhardwaretimeoutms = 5000 ; Sensors.cfg +tagtypename = TI ; Sensors.cfg +writeblockhardwaretimeoutms = 5000 ; Sensors.cfg + +[rheodyneselectorvalve] ; Fluidics.cfg + +[sampledooropensensor] ; Sensors.cfg + +[sensors] +chillerdooropensensor = ChillerDoorOpenSensor ; Sensors.cfg +flowcellclampclosedsensor = FlowcellClampClosedSensor ; Sensors.cfg +reagenttraypresentsensor = ReagentTrayPresentSensor ; Sensors.cfg +rfid = RFID ; Sensors.cfg +sampledooropensensor = SampleDoorOpenSensor ; Sensors.cfg +wasteandpr2sipperdownsensor = WasteAndPR2SipperDownSensor ; Sensors.cfg +wastebottlefullsensor = WasteBottleFullSensor ; Sensors.cfg +wastebottleinstalledsensor = WasteBottleInstalledSensor ; Sensors.cfg + +[sequencing channel a] +cameraintegrationtimems = 200 ; MiSeqCommon.cfg +flipimagehorizontally = true ; MiSeqCommon.cfg +index = 0 ; MiSeqCommon.cfg +ledpath = 0 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 1 ; MiSeqCommon.cfg + +[sequencing channel c] +cameraintegrationtimems = 200 ; MiSeqCommon.cfg +flipimagehorizontally = false ; MiSeqCommon.cfg +index = 3 ; MiSeqCommon.cfg +ledpath = 0 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 0 ; MiSeqCommon.cfg + +[sequencing channel focus a] +cameraintegrationtimems = 200 ; MiSeqCommon.cfg +flipimagehorizontally = true ; MiSeqCommon.cfg +index = 0 ; MiSeqCommon.cfg +ledpath = 0 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 1 ; MiSeqCommon.cfg + +[sequencing channel focus c] +cameraintegrationtimems = 450 ; MiSeqCommon.cfg +index = 3 ; MiSeqCommon.cfg +ledpath = 0 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 0 ; MiSeqCommon.cfg + +[sequencing channel focus g] +cameraintegrationtimems = 200 ; MiSeqCommon.cfg +flipimagehorizontally = true ; MiSeqCommon.cfg +index = 1 ; MiSeqCommon.cfg +ledpath = 1 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 1 ; MiSeqCommon.cfg + +[sequencing channel focus t] +cameraintegrationtimems = 200 ; MiSeqCommon.cfg +index = 2 ; MiSeqCommon.cfg +ledpath = 1 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 0 ; MiSeqCommon.cfg + +[sequencing channel g] +cameraintegrationtimems = 200 ; MiSeqCommon.cfg +flipimagehorizontally = true ; MiSeqCommon.cfg +index = 1 ; MiSeqCommon.cfg +ledpath = 1 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 1 ; MiSeqCommon.cfg + +[sequencing channel t] +cameraintegrationtimems = 200 ; MiSeqCommon.cfg +flipimagehorizontally = false ; MiSeqCommon.cfg +index = 2 ; MiSeqCommon.cfg +ledpath = 1 ; MiSeqCommon.cfg +ledpower = 100 ; MiSeqCommon.cfg +sensorpath = 0 ; MiSeqCommon.cfg + +[sequencing channels] +channel1 = A ; MiSeqCommon.cfg +channel2 = G ; MiSeqCommon.cfg +channel3 = T ; MiSeqCommon.cfg +channel4 = C ; MiSeqCommon.cfg + +[stagesafety] +unsafemovesallowed = false ; MiSeqCommon.cfg + +[statuslights] +ledbars = LEDBars ; StatusLights.cfg + +[system] +cloudservice = Illumina BaseSpace Broker ; MiSeqCommon.cfg +defaultflowcell = MiSeq14Tiles ; ShockProto.cfg +defaulttimeoutms = 60000 ; MiSeqCommon.cfg +diagnosticsfolder = D:\DiagResults ; MiSeqCommon.cfg +fastsimulation = true ; MiSeqCommon.cfg +firsttimesetupfile = D:\MiSeqFirstTimeSetup.xml ; MiSeqCommon.cfg +fpgaflashdefaultfolder = D:\ ; MiSeqCommon.cfg +initializeallinserial = false ; MiSeqCommon.cfg +instrumenttype = Shock ; MiSeqOverride.cfg +logsleepbetweenmax = 700 ; MiSeqCommon.cfg +logsleepbetweenmin = 150 ; MiSeqCommon.cfg +logsleepmaxdepth = 10 ; MiSeqCommon.cfg +logsleepmode = LogIfTooLong ; MiSeqCommon.cfg +logsleeptoolongmargin = 1000 ; MiSeqCommon.cfg +maintenancelogsfolder = D:\Illumina Maintenance Logs ; MiSeqCommon.cfg +name = M02069 ; MiSeqOverride.cfg +priorityclass = High ; MiSeqCommon.cfg +reportdevicesections = true ; MiSeqCommon.cfg +reporterservice = MiSeqReporter ; MiSeqCommon.cfg +scancounterfile = D:\ScanCounter.txt ; MiSeqCommon.cfg +serverconfigbackupenabled = true ; MiSeqCommon.cfg +serverconfigbackuprootfolder = D:\Illumina Maintenance Logs\OverrideBackups ; MiSeqCommon.cfg +showsplashscreen = true ; MiSeqCommon.cfg +traceiffnotsimulated = false ; MiSeqCommon.cfg + +[system measurements] +actualedgeofslide = 56.08547 ; MiSeqOverride.cfg +ystagehometoedgeofslide = 52.68547 ; MiSeqOverride.cfg + +[thermalsettlingtest] +firsttargettemperature = 16 ; MiSeqCommon.cfg +fourthtargettemperature = 96 ; MiSeqCommon.cfg +secondtargettemperature = 65 ; MiSeqCommon.cfg +thirdtargettemperature = 16 ; MiSeqCommon.cfg + +[user_notification] +level = 1 ; MiSeqCommon.cfg +type = Warning ; MiSeqCommon.cfg + +[viciselectorvalve] +firmwaremodelvalidprefix1 = I-PD-AMHX ; Fluidics.cfg +firmwaremodelvalidprefix2 = I-PD-AMTX ; Fluidics.cfg + +[wasteandpr2sipperdownsensor] ; Sensors.cfg + +[wastebottlefullsensor] ; Sensors.cfg + +[wastebottleinstalledsensor] ; Sensors.cfg diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/MiSeqOverride.cfg b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/MiSeqOverride.cfg new file mode 100755 index 0000000..83c650b --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/MiSeqOverride.cfg @@ -0,0 +1,99 @@ +;Override Version 1.0.10_Shock + +[_FileInfo] +OverrideVersion = 1.0.10_Shock 5/24/2012 5:15 PM + +[system] +Name = M02069; *********** System Specific - Entered by OP400 (also stored in NVRAM) ************ +InstrumentType = Shock + +[System Measurements] +YStageHomeToEdgeOfSlide = 52.68547 ;update by OP600 on 5/17/2013 15034365 rev B +actualedgeofslide = 56.08547 ;update by OP600 on 5/17/2013 15034365 rev B + +[Focus Params] +ZOffsetToFocusLED = -0.000746 ;update by OP600 on 5/20/2013 by Dong Diep +FocusMirrorZOffset = -0.007 ;update by OP600 on 5/20/2013 by Dong Diep +coarsefocuscenterz = -0.17759 ;update by OP600 on 5/20/2013 by Dong Diep +throughfocuscenterz = -0.17759 ;update by OP600 on 5/20/2013 by Dong Diep +tiltuntiltfocuscenterz = -0.17759 ;update by OP600 on 5/20/2013 by Dong Diep +skipautofocusmaxzcorrection = 0.0005 ; Only for Shock +skipautofocusnoskipcycles = 5 ; Only for Shock +skipautofocusntiles = 4 ; Only for Shock + +[Instrument.ExcitationLED1] +NumCalibrationPoints = 6 +CalibrationDriveCurrentMa1 = 750 +CalibrationDriveCurrentMa2 = 1000 +CalibrationDriveCurrentMa3 = 1250 +CalibrationDriveCurrentMa4 = 1500 +CalibrationDriveCurrentMa5 = 1750 +CalibrationDriveCurrentMa6 = 2000 + +CalibrationPhotodiodeADC1 = 7595 +CalibrationPhotodiodeADC2 = 10359 +CalibrationPhotodiodeADC3 = 13214 +CalibrationPhotodiodeADC4 = 15945 +CalibrationPhotodiodeADC5 = 18558 +CalibrationPhotodiodeADC6 = 21189 + +CalibrationPowerMeterMw1 = 90.84 +CalibrationPowerMeterMw2 = 122.8 +CalibrationPowerMeterMw3 = 150.1 +CalibrationPowerMeterMw4 = 170.2 +CalibrationPowerMeterMw5 = 181.3 +CalibrationPowerMeterMw6 = 185.3 + + + + + +[Instrument.ExcitationLED2] +NumCalibrationPoints = 6 +CalibrationDriveCurrentMa1 = 2000 +CalibrationDriveCurrentMa2 = 3000 +CalibrationDriveCurrentMa3 = 4000 +CalibrationDriveCurrentMa4 = 5000 +CalibrationDriveCurrentMa5 = 6000 +CalibrationDriveCurrentMa6 = 7000 + +CalibrationPhotodiodeADC1 = 921 +CalibrationPhotodiodeADC2 = 1249 +CalibrationPhotodiodeADC3 = 1544 +CalibrationPhotodiodeADC4 = 1815 +CalibrationPhotodiodeADC5 = 2071 +CalibrationPhotodiodeADC6 = 2307 + +CalibrationPowerMeterMw1 = 78.39 +CalibrationPowerMeterMw2 = 105.7 +CalibrationPowerMeterMw3 = 128.6 +CalibrationPowerMeterMw4 = 148.3 +CalibrationPowerMeterMw5 = 165.5 +CalibrationPowerMeterMw6 = 180.4 + + + + +[Instrument.Fluidics.FlowcellFluidics1.FlowCellTemperatureController] +CalibrationLowTarget = 16 +CalibrationLowMeasured = 16.7 +CalibrationHighTarget = 96 +CalibrationHighMeasured = 91.4 + + +[Instrument.SipperMotor] +CurrentPercent = 70 ; *********** System Specific in some cases ************ + +[Instrument.YMotor_FPGAStepper] +SoftLimitPositiveMm = 75.25507 ;update by OP600 on 5/17/2013 15034365 rev B +tablebasedmovesettlingtimems = 800; 800 for 12mm Z stage ; 1400 for 6mm Z stage *********** System Specific (but all new systems use this value) *********** + + +[Instrument.Fluidics.FlowCellFluidics1] +;Simulated = true ; Set "simulated = true" for a mock run. + + + + +[Instrument.Fluidics.FlowCellFluidics1.FlowSensor] +LastCalibrated=5/16/2013 9:47:30 AM diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/RTAStart.bat b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/RTAStart.bat new file mode 100755 index 0000000..6af3a80 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Config/RTAStart.bat @@ -0,0 +1,3 @@ +title RTA 1.18.54 - D:\Illumina\MiSeqTemp\140624_MS6_13349_A_MS2639979-300V2 +pushd "C:\Illumina\RTA" +"C:\Illumina\RTA\RTA.exe" "D:\Illumina\MiSeqTemp\140624_MS6_13349_A_MS2639979-300V2\Images " "Y:\ILorHSorMS_sf49\incoming " Read=All ControlLane=0 Threads=2 CopyIntensityFilesToNetwork=1 instrumentType=miseq \ No newline at end of file diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/ImageSize.dat b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/ImageSize.dat new file mode 100755 index 0000000..13b6b61 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/ImageSize.dat differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl new file mode 100644 index 0000000..afb4459 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C1.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl new file mode 100644 index 0000000..6ff54a1 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C10.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl new file mode 100644 index 0000000..c84528c Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C100.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl new file mode 100644 index 0000000..2addd37 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C101.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl new file mode 100644 index 0000000..5588553 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C102.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl new file mode 100644 index 0000000..211c775 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C103.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl new file mode 100644 index 0000000..bc37e1e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C104.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl new file mode 100644 index 0000000..85d2a02 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C105.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl new file mode 100644 index 0000000..a4f4a74 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C106.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl new file mode 100644 index 0000000..ea96b1c Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C107.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl new file mode 100644 index 0000000..fa41861 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C108.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl new file mode 100644 index 0000000..523cc1f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C109.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl new file mode 100644 index 0000000..b11622a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C11.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl new file mode 100644 index 0000000..b685488 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C110.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl new file mode 100644 index 0000000..d9d8fb9 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C111.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl new file mode 100644 index 0000000..ca5e16a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C112.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl new file mode 100644 index 0000000..5d68565 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C113.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl new file mode 100644 index 0000000..53d4d0d Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C114.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl new file mode 100644 index 0000000..196e6b7 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C115.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl new file mode 100644 index 0000000..0807b5e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C116.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl new file mode 100644 index 0000000..1d8450f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C117.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl new file mode 100644 index 0000000..cc904ea Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C118.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl new file mode 100644 index 0000000..cd3a633 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C119.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl new file mode 100644 index 0000000..1139c0f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C12.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl new file mode 100644 index 0000000..9c3d397 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C120.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl new file mode 100644 index 0000000..55b9cd9 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C121.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl new file mode 100644 index 0000000..afc36b9 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C122.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl new file mode 100644 index 0000000..f76ec31 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C123.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl new file mode 100644 index 0000000..b5366b0 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C124.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl new file mode 100644 index 0000000..bec2b53 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C125.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl new file mode 100644 index 0000000..30e364c Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C126.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl new file mode 100644 index 0000000..905f050 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C127.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl new file mode 100644 index 0000000..80fefe1 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C128.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl new file mode 100644 index 0000000..b4ba42a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C129.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl new file mode 100644 index 0000000..7f5e0f8 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C13.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl new file mode 100644 index 0000000..e026945 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C130.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl new file mode 100644 index 0000000..793b28f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C131.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl new file mode 100644 index 0000000..244e5c3 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C132.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl new file mode 100644 index 0000000..cb32a27 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C133.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl new file mode 100644 index 0000000..47abe53 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C134.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl new file mode 100644 index 0000000..d3c9030 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C135.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl new file mode 100644 index 0000000..d1dadea Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C136.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl new file mode 100644 index 0000000..998107f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C137.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl new file mode 100644 index 0000000..ed64201 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C138.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl new file mode 100644 index 0000000..011e46b Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C139.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl new file mode 100644 index 0000000..9fc7472 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C14.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl new file mode 100644 index 0000000..ed73ae4 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C140.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl new file mode 100644 index 0000000..80dc86f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C141.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl new file mode 100644 index 0000000..3bbfccf Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C142.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl new file mode 100644 index 0000000..7cc4bba Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C143.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl new file mode 100644 index 0000000..b5422ad Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C144.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl new file mode 100644 index 0000000..976f53b Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C145.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl new file mode 100644 index 0000000..0a8c87d Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C146.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl new file mode 100644 index 0000000..05830b9 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C147.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl new file mode 100644 index 0000000..cc2df1e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C148.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl new file mode 100644 index 0000000..f732975 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C149.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl new file mode 100644 index 0000000..d116f5e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C15.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl new file mode 100644 index 0000000..2d4f483 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C150.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl new file mode 100644 index 0000000..9ad1c66 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C151.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl new file mode 100644 index 0000000..76a90a1 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C152.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl new file mode 100644 index 0000000..8147b84 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C153.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl new file mode 100644 index 0000000..122eb0b Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C154.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl new file mode 100644 index 0000000..a841d11 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C155.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl new file mode 100644 index 0000000..d4208e1 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C156.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl new file mode 100644 index 0000000..37fb0d5 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C157.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl new file mode 100644 index 0000000..4100f66 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C158.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl new file mode 100644 index 0000000..7c5e820 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C159.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl new file mode 100644 index 0000000..d107aa2 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C16.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl new file mode 100644 index 0000000..63c2904 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C160.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl new file mode 100644 index 0000000..52db87c Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C161.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl new file mode 100644 index 0000000..0374963 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C162.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl new file mode 100644 index 0000000..e0ec853 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C163.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl new file mode 100644 index 0000000..c63e844 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C164.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl new file mode 100644 index 0000000..a0dc39d Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C165.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl new file mode 100644 index 0000000..e16922b Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C166.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl new file mode 100644 index 0000000..b604ba2 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C167.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl new file mode 100644 index 0000000..3c003be Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C168.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl new file mode 100644 index 0000000..cb546e3 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C169.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl new file mode 100644 index 0000000..bcc1989 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C17.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl new file mode 100644 index 0000000..716047d Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C170.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl new file mode 100644 index 0000000..cf44336 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C18.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl new file mode 100644 index 0000000..c210d79 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C19.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl new file mode 100644 index 0000000..30f7a5b Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C2.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl new file mode 100644 index 0000000..053d3a8 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C20.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl new file mode 100644 index 0000000..3263fa4 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C21.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl new file mode 100644 index 0000000..cec6290 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C22.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl new file mode 100644 index 0000000..552b03c Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C23.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl new file mode 100644 index 0000000..87ac44f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C24.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl new file mode 100644 index 0000000..9d5a78a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C25.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl new file mode 100644 index 0000000..29a99cf Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C26.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl new file mode 100644 index 0000000..aea857f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C27.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl new file mode 100644 index 0000000..cf7039e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C28.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl new file mode 100644 index 0000000..2d1f23b Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C29.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl new file mode 100644 index 0000000..ed4a763 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C3.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl new file mode 100644 index 0000000..157aa95 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C30.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl new file mode 100644 index 0000000..eac5662 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C31.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl new file mode 100644 index 0000000..8884d66 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C32.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl new file mode 100644 index 0000000..0c287ab Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C33.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl new file mode 100644 index 0000000..192aacf Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C34.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl new file mode 100644 index 0000000..bc0f3e1 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C35.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl new file mode 100644 index 0000000..2e1b6e9 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C36.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl new file mode 100644 index 0000000..a6d4543 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C37.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl new file mode 100644 index 0000000..065d009 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C38.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl new file mode 100644 index 0000000..4b2316e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C39.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl new file mode 100644 index 0000000..1ee03c1 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C4.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl new file mode 100644 index 0000000..5285e81 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C40.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl new file mode 100644 index 0000000..9cc438b Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C41.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl new file mode 100644 index 0000000..2ecc08d Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C42.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl new file mode 100644 index 0000000..e92989e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C43.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl new file mode 100644 index 0000000..bf08b23 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C44.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl new file mode 100644 index 0000000..db01a8e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C45.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl new file mode 100644 index 0000000..4734f33 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C46.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl new file mode 100644 index 0000000..643b72c Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C47.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl new file mode 100644 index 0000000..183a628 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C48.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl new file mode 100644 index 0000000..a44369a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C49.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl new file mode 100644 index 0000000..74e9533 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C5.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl new file mode 100644 index 0000000..dbeab86 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C50.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl new file mode 100644 index 0000000..45a1285 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C51.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl new file mode 100644 index 0000000..05220d0 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C52.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl new file mode 100644 index 0000000..1afd9e3 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C53.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl new file mode 100644 index 0000000..908911c Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C54.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl new file mode 100644 index 0000000..7396522 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C55.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl new file mode 100644 index 0000000..1f10382 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C56.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl new file mode 100644 index 0000000..6e4066f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C57.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl new file mode 100644 index 0000000..e8a2a1a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C58.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl new file mode 100644 index 0000000..7cf11cc Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C59.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl new file mode 100644 index 0000000..2626b34 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C6.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl new file mode 100644 index 0000000..84aad12 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C60.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl new file mode 100644 index 0000000..6490d13 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C61.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl new file mode 100644 index 0000000..c632e44 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C62.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl new file mode 100644 index 0000000..8c69640 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C63.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl new file mode 100644 index 0000000..dfc1582 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C64.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl new file mode 100644 index 0000000..fb48544 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C65.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl new file mode 100644 index 0000000..bd53ac2 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C66.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl new file mode 100644 index 0000000..8fcbc0f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C67.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl new file mode 100644 index 0000000..c9d271f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C68.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl new file mode 100644 index 0000000..a3c5817 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C69.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl new file mode 100644 index 0000000..2562fe3 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C7.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl new file mode 100644 index 0000000..84b93d0 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C70.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl new file mode 100644 index 0000000..0d2a958 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C71.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl new file mode 100644 index 0000000..10be6f1 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C72.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl new file mode 100644 index 0000000..8fe7bd4 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C73.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl new file mode 100644 index 0000000..8827427 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C74.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl new file mode 100644 index 0000000..0ba8f2d Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C75.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl new file mode 100644 index 0000000..fe7b127 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C76.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl new file mode 100644 index 0000000..aa002a4 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C77.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl new file mode 100644 index 0000000..2271105 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C78.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl new file mode 100644 index 0000000..c6f2df5 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C79.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl new file mode 100644 index 0000000..0f30bc8 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C8.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl new file mode 100644 index 0000000..f664e2e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C80.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl new file mode 100644 index 0000000..0c26042 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C81.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl new file mode 100644 index 0000000..efaad83 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C82.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl new file mode 100644 index 0000000..b67e847 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C83.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl new file mode 100644 index 0000000..f5fc808 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C84.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl new file mode 100644 index 0000000..c1ac2f6 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C85.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl new file mode 100644 index 0000000..58fb344 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C86.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl new file mode 100644 index 0000000..6f0066a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C87.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl new file mode 100644 index 0000000..d924afe Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C88.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl new file mode 100644 index 0000000..06d6586 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C89.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl new file mode 100644 index 0000000..22b037a Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C9.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl new file mode 100644 index 0000000..265c360 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C90.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl new file mode 100644 index 0000000..88f023e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C91.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl new file mode 100644 index 0000000..0ee0197 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C92.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl new file mode 100644 index 0000000..f55408f Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C93.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl new file mode 100644 index 0000000..c724617 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C94.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl new file mode 100644 index 0000000..c7a0adc Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C95.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl new file mode 100644 index 0000000..af57aa0 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C96.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl new file mode 100644 index 0000000..0042431 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C97.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl new file mode 100644 index 0000000..c7bd981 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C98.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl new file mode 100644 index 0000000..35d316e Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/C99.1/s_1_1101.bcl differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/s_1_1101.control b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/s_1_1101.control new file mode 100755 index 0000000..0ec9619 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/s_1_1101.control differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/s_1_1101.filter b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/s_1_1101.filter new file mode 100755 index 0000000..cf1e8f5 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/L001/s_1_1101.filter differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/SampleSheet.csv b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/SampleSheet.csv new file mode 100755 index 0000000..1597629 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/SampleSheet.csv @@ -0,0 +1,114 @@ +[Header],,,, +Investigator Name,sh2,,, +Project Name,Transposon Based Genetic Screening in Mice,,, +Experiment Name,13349,,, +Date,2014-06-24T11:51:11,,, +Workflow,LibraryQC,,, +Chemistry,Transposon_Eukaryotic,,, +,,,, +[Reads],,,, +75,,,, +75,,,, +,,,, +[Settings],,,, +,,,, +[Manifests],,,, +,,,, +[Data],,,, +Sample_ID,Sample_Name,GenomeFolder,Index,Index2 +10589429,PAZC_8_5c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGCTTGT +10589430,PAZC_9_1a_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,CGATGTTT +10589431,PAZC_7_4d_throat_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCCAATGT +10589432,PAZC_9_2c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,ACAGTGGT +10589433,PAZC_1_1c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,ATCACGTT +10589434,PAZC_1_1c_lung,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATCAGCG +10589435,PAZC_7_5f_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,CAGATCTG +10589436,PAZC_8_7f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTAGGCAT +10589437,PAZC_9_1g_Skin_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGCTACAG +10589438,PAZC_8_4c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,CTTGTACT +10589439,PAZC_9_10f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,ACTTGATG +10589440,PAZC_8_4j_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGACCACT +10589441,PAZC_6_4f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGGTTGTT +10589442,PAZC_8_2f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTCGGTT +10589443,PAZC_6_4d_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAAGCGTT +10589444,PAZC_8_1d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCCGTCTT +10589445,PAZC_7_6e_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTACCTT +10589446,PAZC_7_6a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTCTGTGT +10589447,PAZC_8_3a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTGCTGT +10589448,PAZC_7_2f_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGGAGGT +10589449,PAZC_8_1b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCGAGCGT +10589450,PAZC_8_7b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGATACGT +10589451,PAZC_7_1e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCATAGT +10589452,PAZC_6_6d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGACTCT +10589453,PAZC_8_7c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCGATCT +10589454,PAZC_7_1a_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGTGACT +10589455,PAZC_8_2b_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACAGGAT +10589456,PAZC_9_2a_lung,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCCTCAAT +10589457,PAZC_9_2a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTGGTTG +10589458,PAZC_8_1c_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGTCTTG +10589459,PAZC_9_8d_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCGAAGTG +10589460,PAZC_8_3f_thorax_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAACGCTG +10589461,PAZC_8_3f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGGTATG +10589462,PAZC_6_8e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGAACTGG +10589463,PAZC_9_6a_lung,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACTTCGG +10589464,PAZC_7_5e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTCACGG +10589465,PAZC_7_5e_si_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCAGGAGG +10589466,PAZC_6_4c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAAGTTCG +10589467,PAZC_8_6f_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCCAGTCG +10589468,PAZC_6_8d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTATGCG +10589469,PAZC_8_7a_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCATTGAG +10589470,PAZC_6_3b_liver,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGGCTCAG +10589471,PAZC_9_6g_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TATGCCAG +10589472,PAZC_9_7f_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCAGATTC +10589473,PAZC_9_8e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACTAGTC +10589474,PAZC_6_6e_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTCAGCTC +10589475,PAZC_8_6c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTCTATC +10589476,PAZC_7_8c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TATGTGGC +10589477,PAZC_6_7c_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTACTCGC +10589478,PAZC_9_5e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCGTTAGC +10589479,PAZC_8_4e_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACCGAGC +10589480,PAZC_9_11b_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTTCTCC +10589481,PAZC_7_8b_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTCGCACC +10589482,PAZC_8_2d_lung_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGCGTAC +10589483,PAZC_9_11c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTACGAC +10589484,MONE_1_14c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGACAGAC +10589485,PAZC_7_5i_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGAACAC +10589486,PAZC_14_2e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCATCCTA +10589487,PAZC_15_3i_lumber_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCTGATA +10589488,PAZC_9_6b_lung_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGACGGA +10589489,PAZC_15_4h_Tail,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTGAAGA +10589490,PAZC_15_4h_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTCTTCA +10589491,PAZC_15_4h_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGTTCCA +10589492,PAZC_15_4h_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGAAGCCA +10589493,PAZC_15_2b_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACCACCA +10589494,PAZC_15_2h_mass,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCGTGAA +10589495,PAZC_15_2h_Ovary,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGTGAGTT +10589496,PAZC_14_2a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATCTCTT +10589497,PAZC_15_4b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTGTCCTT +10589498,PAZC_15_4i_lumber_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GACGGATT +10589499,PAZC_14_4a_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCAACATT +10589500,PAZC_15_4c_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGTCGTGT +10589501,PAZC_15_4d_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAATCTGT +10589502,WONE_2_1c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTACATCT +10589503,WONE_2_1j_Mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAGGTGCT +10589504,WONE_2_2a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCATGGCT +10589505,WONE_2_1s_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTTAGCCT +10589506,WONE_143488_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTCGCTAT +10589507,WONE_2_5g_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGAATGAT +10589508,WONE_2_2m_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAGCCAAT +10589509,WONE_2_1p_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCTCCTTG +10589510,WONE_2_1i_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTAAGGTG +10589511,WONE_2_8a_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAGGATGG +10589512,WONE_20_6c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTTGTCGG +10589513,WONE_2_2c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATAGAGG +10589514,WONE_2_8d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GACCTTAG +10589515,WONE_2_8b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCCTGTTC +10589516,PAZE_2_6e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCACTGTC +10589517,PAZB_2_2e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCTAACTC +10589518,PAZB_2_2g_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATTCATC +10589519,PAZB_2_2g_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTCTTGGC +10589520,PAZB_2_2a_Tail,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTAGAAGC +10589521,PAZB_2_2a_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATGGTCC +10589522,PAZB_2_2a_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTGCTACC +10589523,PAZB_2_2a_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCGATTAC +10589524,PAZB_2_7h_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGTTGGAC diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/config.xml b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/config.xml new file mode 100755 index 0000000..293a0e8 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/BaseCalls/config.xml @@ -0,0 +1,207 @@ + + + + + 0.6 + + 2 + 0 + 1 + 0 + 1 + 75 + 1 + + + 2 + 0 + 76 + 0 + 76 + 87 + 2 + + + 2 + 0 + 88 + 0 + 88 + 95 + 3 + + + 2 + 0 + 96 + 0 + 96 + 170 + 4 + + + 2 + 0 + 2 + 1 + 1 + 75 + 1 + 0 + 0 + + + 2 + 0 + 77 + 1 + 76 + 87 + 2 + 0 + 0 + + + 2 + 0 + 89 + 1 + 88 + 95 + 3 + 0 + 0 + + + 2 + 0 + 97 + 1 + 96 + 170 + 4 + 0 + 0 + + 0 + failed-chastity + le + 1.0 + + + + + 0 + 0 + 0 + 0 + 0 + + 1 + 75 + + + 76 + 87 + 140624_MS6_13349_A_MS2639979-300V2 + + + 88 + 95 + 140624_MS6_13349_A_MS2639979-300V2 + + + 96 + 170 + 140624_MS6_13349_A_MS2639979-300V2 + + MS6 + 0 + 0 + 0 + 0 + + 1 + 75 + + + 76 + 87 + 140624_MS6_13349_A_MS2639979-300V2 + + + 88 + 95 + 140624_MS6_13349_A_MS2639979-300V2 + + + 96 + 170 + 140624_MS6_13349_A_MS2639979-300V2 + + 140624_MS6_13349_A_MS2639979-300V2 + 140624 + 13349 + 000000000-A9RLY + + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + + V6 + + + + + s + 2105 + 2106 + 2103 + 2104 + 2101 + 2102 + 2108 + 2107 + 2114 + 2113 + 2112 + 2111 + 2110 + 2109 + 1106 + 1105 + 1104 + 1103 + 1102 + 1101 + 1108 + 1107 + 1113 + 1114 + 1112 + 1111 + 1110 + 1109 + + + + \ No newline at end of file diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/L001/s_1_1101.locs b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/L001/s_1_1101.locs new file mode 100755 index 0000000..09a8f00 Binary files /dev/null and b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/L001/s_1_1101.locs differ diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/RTAConfiguration.xml b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/RTAConfiguration.xml new file mode 100755 index 0000000..e1ca789 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/RTAConfiguration.xml @@ -0,0 +1,181 @@ + + + Data\Intensities + Data\Intensities\BaseCalls + Data\Intensities\Offsets + HiSeq.Configuration.xml + GA.Configuration.xml + HiSeq.Configuration.xml + MiSeq.Configuration.xml + HiSeq.Configuration.xml + SampleSheet.csv + 5 + true + true + false + false + false + MS6 + 0 + false + 512 + 2 + 8 + false + 0 + Lane + 5 + false + 1 + + + true + 0 + MiSeq + + + + + Short + + true + true + true + false + 5242880 + true + 13 + 1 + false + true + false + false + false + 10000000 + 1 + v6 + true + HCSFourDigit + + 1000 + 1000 + + true + 5 + 1.75 + true + 1400 + 1.8 + 1 + 4 + 3.5 + 3.5 + 1.5 + 1.25 + false + true + false + 0 + false + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 250000 + + + 2.5 + + 5 + 5 + 1000 + 1.14244E-07 + MexicanHat + ThreePixel + Otsu + 64 + 64 + + + + 12 + false + 2 + 2.5 + false + false + 1 + 25 + 52 + controls.fasta + true + + PhiX.fasta + D:\Illumina\MiSeqAnalysis\140624_MS6_13349_A_MS2639979-300V2 + Y:\ILorHSorMS_sf49\incoming\140624_MS6_13349_A_MS2639979-300V2 + + D:\Illumina\MiSeqTemp\140624_MS6_13349_A_MS2639979-300V2\Images + false + 0 + false + true + false + true + true + true + false + false + false + false + true + true + true + true + false + true + false + false + true + false + 246,658,0 + 246,658,0 + -1,-1 + true + false + 512 + 512 + 4 + 257 + 2293 + v2 + true + false + false + false + false + 4 + false + false + false + square + false + false + 8 + false + -1 + -1 + true + 0.1 + + + .locs + \ No newline at end of file diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/config.xml b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/config.xml new file mode 100755 index 0000000..64d0ce0 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities/config.xml @@ -0,0 +1,128 @@ + + + + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + 1 + 75 + 140624_MS6_13349_A_MS2639979-300V2 + + + 76 + 87 + 140624_MS6_13349_A_MS2639979-300V2 + + + 88 + 95 + 140624_MS6_13349_A_MS2639979-300V2 + + + 96 + 170 + 140624_MS6_13349_A_MS2639979-300V2 + + MS6 + 0 + 0 + 0 + 0 + + 1 + 75 + 140624_MS6_13349_A_MS2639979-300V2 + + + 76 + 87 + 140624_MS6_13349_A_MS2639979-300V2 + + + 88 + 95 + 140624_MS6_13349_A_MS2639979-300V2 + + + 96 + 170 + 140624_MS6_13349_A_MS2639979-300V2 + + 140624_MS6_13349_A_MS2639979-300V2 + 140624 + 13349 + 000000000-A9RLY + + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + + V6 + + + + + s + 1101 + 1102 + 1103 + 1104 + 1105 + 1106 + 1107 + 1108 + 1109 + 1110 + 1111 + 1112 + 1113 + 1114 + 2101 + 2102 + 2103 + 2104 + 2105 + 2106 + 2107 + 2108 + 2109 + 2110 + 2111 + 2112 + 2113 + 2114 + + + + \ No newline at end of file diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete.txt new file mode 100755 index 0000000..479abc7 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete.txt @@ -0,0 +1 @@ +6/25/2014,02:48:51.555,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read1.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read1.txt new file mode 100755 index 0000000..555e70b --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read1.txt @@ -0,0 +1 @@ +6/24/2014,19:08:36.928,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read2.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read2.txt new file mode 100755 index 0000000..64a7c15 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read2.txt @@ -0,0 +1 @@ +6/24/2014,20:18:40.724,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read3.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read3.txt new file mode 100755 index 0000000..571ea06 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read3.txt @@ -0,0 +1 @@ +6/24/2014,21:12:10.767,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read4.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read4.txt new file mode 100755 index 0000000..5a5cda1 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/ImageAnalysis_Netcopy_complete_Read4.txt @@ -0,0 +1 @@ +6/25/2014,02:48:51.565,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/RTAComplete.txt b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/RTAComplete.txt new file mode 100755 index 0000000..a4d64dc --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/RTAComplete.txt @@ -0,0 +1 @@ +6/25/2014,02:49:01.645,Illumina RTA 1.18.54 diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Recipe/MS2639979-300V2.xml b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Recipe/MS2639979-300V2.xml new file mode 100755 index 0000000..f276957 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Recipe/MS2639979-300V2.xml @@ -0,0 +1,501 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Recipe/RunState.xml b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Recipe/RunState.xml new file mode 100755 index 0000000..663fb34 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/Recipe/RunState.xml @@ -0,0 +1,8 @@ + + + 28 + 170 + 170 + 0 + 3 + \ No newline at end of file diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/RunInfo.xml b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/RunInfo.xml new file mode 100755 index 0000000..bb73edc --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/RunInfo.xml @@ -0,0 +1,15 @@ + + + + 000000000-A9RLY + M02069 + 140624 + + + + + + + + + \ No newline at end of file diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/SampleSheet.csv b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/SampleSheet.csv new file mode 100755 index 0000000..1597629 --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/SampleSheet.csv @@ -0,0 +1,114 @@ +[Header],,,, +Investigator Name,sh2,,, +Project Name,Transposon Based Genetic Screening in Mice,,, +Experiment Name,13349,,, +Date,2014-06-24T11:51:11,,, +Workflow,LibraryQC,,, +Chemistry,Transposon_Eukaryotic,,, +,,,, +[Reads],,,, +75,,,, +75,,,, +,,,, +[Settings],,,, +,,,, +[Manifests],,,, +,,,, +[Data],,,, +Sample_ID,Sample_Name,GenomeFolder,Index,Index2 +10589429,PAZC_8_5c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGCTTGT +10589430,PAZC_9_1a_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,CGATGTTT +10589431,PAZC_7_4d_throat_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCCAATGT +10589432,PAZC_9_2c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,ACAGTGGT +10589433,PAZC_1_1c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,ATCACGTT +10589434,PAZC_1_1c_lung,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATCAGCG +10589435,PAZC_7_5f_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,CAGATCTG +10589436,PAZC_8_7f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTAGGCAT +10589437,PAZC_9_1g_Skin_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGCTACAG +10589438,PAZC_8_4c_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,CTTGTACT +10589439,PAZC_9_10f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,ACTTGATG +10589440,PAZC_8_4j_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGACCACT +10589441,PAZC_6_4f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGGTTGTT +10589442,PAZC_8_2f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTCGGTT +10589443,PAZC_6_4d_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAAGCGTT +10589444,PAZC_8_1d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCCGTCTT +10589445,PAZC_7_6e_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTACCTT +10589446,PAZC_7_6a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTCTGTGT +10589447,PAZC_8_3a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTGCTGT +10589448,PAZC_7_2f_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGGAGGT +10589449,PAZC_8_1b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCGAGCGT +10589450,PAZC_8_7b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGATACGT +10589451,PAZC_7_1e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCATAGT +10589452,PAZC_6_6d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGACTCT +10589453,PAZC_8_7c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCGATCT +10589454,PAZC_7_1a_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGTGACT +10589455,PAZC_8_2b_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACAGGAT +10589456,PAZC_9_2a_lung,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCCTCAAT +10589457,PAZC_9_2a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTGGTTG +10589458,PAZC_8_1c_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGTCTTG +10589459,PAZC_9_8d_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCGAAGTG +10589460,PAZC_8_3f_thorax_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAACGCTG +10589461,PAZC_8_3f_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGGTATG +10589462,PAZC_6_8e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGAACTGG +10589463,PAZC_9_6a_lung,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACTTCGG +10589464,PAZC_7_5e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTCACGG +10589465,PAZC_7_5e_si_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCAGGAGG +10589466,PAZC_6_4c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAAGTTCG +10589467,PAZC_8_6f_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCCAGTCG +10589468,PAZC_6_8d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTATGCG +10589469,PAZC_8_7a_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCATTGAG +10589470,PAZC_6_3b_liver,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGGCTCAG +10589471,PAZC_9_6g_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TATGCCAG +10589472,PAZC_9_7f_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCAGATTC +10589473,PAZC_9_8e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACTAGTC +10589474,PAZC_6_6e_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTCAGCTC +10589475,PAZC_8_6c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTCTATC +10589476,PAZC_7_8c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TATGTGGC +10589477,PAZC_6_7c_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTACTCGC +10589478,PAZC_9_5e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCGTTAGC +10589479,PAZC_8_4e_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACCGAGC +10589480,PAZC_9_11b_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTTCTCC +10589481,PAZC_7_8b_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTCGCACC +10589482,PAZC_8_2d_lung_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGCGTAC +10589483,PAZC_9_11c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTACGAC +10589484,MONE_1_14c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGACAGAC +10589485,PAZC_7_5i_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGAACAC +10589486,PAZC_14_2e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCATCCTA +10589487,PAZC_15_3i_lumber_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCTGATA +10589488,PAZC_9_6b_lung_tu,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TAGACGGA +10589489,PAZC_15_4h_Tail,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGTGAAGA +10589490,PAZC_15_4h_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TCTCTTCA +10589491,PAZC_15_4h_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TTGTTCCA +10589492,PAZC_15_4h_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGAAGCCA +10589493,PAZC_15_2b_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TACCACCA +10589494,PAZC_15_2h_mass,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,TGCGTGAA +10589495,PAZC_15_2h_Ovary,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGTGAGTT +10589496,PAZC_14_2a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATCTCTT +10589497,PAZC_15_4b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTGTCCTT +10589498,PAZC_15_4i_lumber_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GACGGATT +10589499,PAZC_14_4a_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCAACATT +10589500,PAZC_15_4c_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGTCGTGT +10589501,PAZC_15_4d_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAATCTGT +10589502,WONE_2_1c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTACATCT +10589503,WONE_2_1j_Mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAGGTGCT +10589504,WONE_2_2a_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCATGGCT +10589505,WONE_2_1s_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTTAGCCT +10589506,WONE_143488_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTCGCTAT +10589507,WONE_2_5g_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGAATGAT +10589508,WONE_2_2m_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAGCCAAT +10589509,WONE_2_1p_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCTCCTTG +10589510,WONE_2_1i_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTAAGGTG +10589511,WONE_2_8a_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GAGGATGG +10589512,WONE_20_6c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTTGTCGG +10589513,WONE_2_2c_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATAGAGG +10589514,WONE_2_8d_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GACCTTAG +10589515,WONE_2_8b_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCCTGTTC +10589516,PAZE_2_6e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCACTGTC +10589517,PAZB_2_2e_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCTAACTC +10589518,PAZB_2_2g_cer_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATTCATC +10589519,PAZB_2_2g_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTCTTGGC +10589520,PAZB_2_2a_Tail,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTAGAAGC +10589521,PAZB_2_2a_Thymus,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GATGGTCC +10589522,PAZB_2_2a_Spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GTGCTACC +10589523,PAZB_2_2a_mes_LN,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GCGATTAC +10589524,PAZB_2_7h_spleen,C:\Illumina\MiSeq Reporter\Genomes\WTSI_references\Mus_musculus\NCBIm37\all\fasta\,TAGGGTTAANNN,GGTTGGAC diff --git a/test/i2b/140624_MS6_13349_A_MS2639979-300V2/runParameters.xml b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/runParameters.xml new file mode 100755 index 0000000..30137cd --- /dev/null +++ b/test/i2b/140624_MS6_13349_A_MS2639979-300V2/runParameters.xml @@ -0,0 +1,74 @@ + + + false + true + + 000000000-A9RLY + 15028382 + 2015-04-16T00:00:00 + + + MS2306658-00PR2 + 15041807 + 2015-04-24T00:00:00 + + + MS2639979-300V2 + 15033572 + 2015-02-08T00:00:00 + + true + + Post-Run Wash + + true + 2.4.1.3 + 14 + 1 + 1 + MiSeq Control Software + + 140624_MS6_13349_A_MS2639979-300V2 + M02069 + 133 + 9.5.12 + 2.4.1.3 + 1.18.54 + 000000000-A9RLY + MS2306658-00PR2 + 15033572 + Version2 + MS2639979-300V2 + + + 13349 + Transposon_Eukaryotic + sbsuser + + LibraryQC + + false + + + + + + + D:\Illumina\MiSeqTemp\140624_MS6_13349_A_MS2639979-300V2 + D:\Illumina\MiSeqAnalysis\140624_MS6_13349_A_MS2639979-300V2 + 140624 + PostRun + D:\Illumina\MiSeq Control Software\CustomRecipe + C:\Illumina\MiSeq Control Software\Recipe + MS2639979-300V2 + Y:\ILorHSorMS_sf49\samplesheets + D:\Illumina\MiSeq Control Software\Manifests + Y:\ILorHSorMS_sf49\incoming\140624_MS6_13349_A_MS2639979-300V2 + AutoFocus + Both + true + true + + Standalone + false + \ No newline at end of file diff --git a/test/i2b/Makefile.am b/test/i2b/Makefile.am new file mode 100644 index 0000000..ff9de66 --- /dev/null +++ b/test/i2b/Makefile.am @@ -0,0 +1,7 @@ +AM_CPPFLAGS = $(HTSLIB_CPPFLAGS) +AM_LDFLAGS = $(HTSLIB_LDFLAGS) + +bin_PROGRAMS = t_i2b +t_i2b_SOURCES = t_i2b.c ../../src/posfile.c ../../src/bclfile.c ../../src/filterfile.c +t_i2b_CFLAGS = -I$(top_srcdir)/src -I/usr/include/libxml2 -DDATA_DIR=$(abs_srcdir) +t_i2b_LDADD = $(HTSLIB_HOME)/lib/libhts.a -ldl -lxml2 -lz -llzma -lbz2 -lpthread diff --git a/test/i2b/out/test1.bam b/test/i2b/out/test1.bam new file mode 100644 index 0000000..c08221c Binary files /dev/null and b/test/i2b/out/test1.bam differ diff --git a/test/i2b/out/test2.bam b/test/i2b/out/test2.bam new file mode 100644 index 0000000..432a0ad Binary files /dev/null and b/test/i2b/out/test2.bam differ diff --git a/test/i2b/out/test4.bam b/test/i2b/out/test4.bam new file mode 100644 index 0000000..9588d1b Binary files /dev/null and b/test/i2b/out/test4.bam differ diff --git a/test/i2b/out/test5.bam b/test/i2b/out/test5.bam new file mode 100644 index 0000000..fe52cda Binary files /dev/null and b/test/i2b/out/test5.bam differ diff --git a/test/i2b/out/test6.bam b/test/i2b/out/test6.bam new file mode 100644 index 0000000..7d9ea2a Binary files /dev/null and b/test/i2b/out/test6.bam differ diff --git a/test/i2b/t_i2b.c b/test/i2b/t_i2b.c new file mode 100644 index 0000000..2913c9f --- /dev/null +++ b/test/i2b/t_i2b.c @@ -0,0 +1,463 @@ +/* test/i2b/i2b.c -- i2b test cases. + + Copyright (C) 2016 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 "bambi.h" +#include "../../src/i2b.c" +#include +#include + +#define xMKNAME(d,f) #d f +#define MKNAME(d,f) xMKNAME(d,f) + +int verbose = 0; + +const char * bambi_version(void) +{ + return "12.34"; +} + +int success = 0; +int failure = 0; + +void setup_param_test(int* argc, char*** argv) +{ + *argc = 0; + *argv = (char**)calloc(sizeof(char*), 100); + (*argv)[(*argc)++] = strdup("bambi"); + (*argv)[(*argc)++] = strdup("i2b"); + (*argv)[(*argc)++] = strdup("-i"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/110323_HS13_06000_B_B039WABXX/Data/Intensities")); + (*argv)[(*argc)++] = strdup("-o"); + (*argv)[(*argc)++] = strdup("test/i2b/out/xxx.sam"); + (*argv)[(*argc)++] = strdup("--output-fmt"); + (*argv)[(*argc)++] = strdup("sam"); + (*argv)[(*argc)++] = strdup("--lane"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--first-tile"); + (*argv)[(*argc)++] = strdup("1101"); + (*argv)[(*argc)++] = strdup("--tile-limit"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--library-name"); + (*argv)[(*argc)++] = strdup("testlibrary"); + (*argv)[(*argc)++] = strdup("--run-folder"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/110323_HS13_06000_B_B039WABXX/")); + (*argv)[(*argc)++] = strdup("--study-name"); + (*argv)[(*argc)++] = strdup("teststudy"); + (*argv)[(*argc)++] = strdup("--basecalls-dir"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls/")); + (*argv)[(*argc)++] = strdup("--generate-secondary-basecalls"); + (*argv)[(*argc)++] = strdup("--no-filter"); + (*argv)[(*argc)++] = strdup("--sequencing-centre"); + (*argv)[(*argc)++] = strdup("XY"); + (*argv)[(*argc)++] = strdup("--platform"); + (*argv)[(*argc)++] = strdup("Illumina"); + (*argv)[(*argc)++] = strdup("--first-tile"); + (*argv)[(*argc)++] = strdup("1103"); + (*argv)[(*argc)++] = strdup("--tile-limit"); + (*argv)[(*argc)++] = strdup("5"); + (*argv)[(*argc)++] = strdup("--barcode-tag"); + (*argv)[(*argc)++] = strdup("AB"); + (*argv)[(*argc)++] = strdup("--quality-tag"); + (*argv)[(*argc)++] = strdup("CD"); + (*argv)[(*argc)++] = strdup("--sec-barcode-tag"); + (*argv)[(*argc)++] = strdup("WX"); + (*argv)[(*argc)++] = strdup("--sec-quality-tag"); + (*argv)[(*argc)++] = strdup("YZ"); + (*argv)[(*argc)++] = strdup("--bc-read"); + (*argv)[(*argc)++] = strdup("2"); + (*argv)[(*argc)++] = strdup("--first-cycle"); + (*argv)[(*argc)++] = strdup("7"); + (*argv)[(*argc)++] = strdup("--first-cycle"); + (*argv)[(*argc)++] = strdup("17"); + (*argv)[(*argc)++] = strdup("--first-cycle"); + (*argv)[(*argc)++] = strdup("70"); + (*argv)[(*argc)++] = strdup("--final-cycle"); + (*argv)[(*argc)++] = strdup("9"); + (*argv)[(*argc)++] = strdup("--final-index-cycle"); + (*argv)[(*argc)++] = strdup("9"); + (*argv)[(*argc)++] = strdup("--add-cluster-index-tag"); + + assert(*argc<100); +} + +void setup_test_1(int* argc, char*** argv) +{ + *argc = 0; + *argv = (char**)calloc(sizeof(char*), 100); + (*argv)[(*argc)++] = strdup("bambi"); + (*argv)[(*argc)++] = strdup("i2b"); + (*argv)[(*argc)++] = strdup("-i"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/110323_HS13_06000_B_B039WABXX/Data/Intensities")); + (*argv)[(*argc)++] = strdup("-o"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/out/xxx.bam")); + (*argv)[(*argc)++] = strdup("--lane"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--first-tile"); + (*argv)[(*argc)++] = strdup("1101"); + (*argv)[(*argc)++] = strdup("--tile-limit"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--library-name"); + (*argv)[(*argc)++] = strdup("Test library"); + (*argv)[(*argc)++] = strdup("--sample-alias"); + (*argv)[(*argc)++] = strdup("Test Sample"); + (*argv)[(*argc)++] = strdup("--study-name"); + (*argv)[(*argc)++] = strdup("Study testStudy"); + (*argv)[(*argc)++] = strdup("--run-start-date"); + (*argv)[(*argc)++] = strdup("2011-03-23T00:00:00+0000"); +// (*argv)[(*argc)++] = strdup("--generate-secondary-basecalls"); + (*argv)[(*argc)++] = strdup("--verbose"); + + assert(*argc<100); +} + +void setup_test_2(int* argc, char*** argv) +{ + *argc = 0; + *argv = (char**)calloc(sizeof(char*), 100); + (*argv)[(*argc)++] = strdup("bambi"); + (*argv)[(*argc)++] = strdup("i2b"); + (*argv)[(*argc)++] = strdup("-i"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/110323_HS13_06000_B_B039WABXX/Data/Intensities")); + (*argv)[(*argc)++] = strdup("-o"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/out/xxx.bam")); + (*argv)[(*argc)++] = strdup("--lane"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--first-tile"); + (*argv)[(*argc)++] = strdup("1101"); + (*argv)[(*argc)++] = strdup("--tile-limit"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--library-name"); + (*argv)[(*argc)++] = strdup("Test library"); + (*argv)[(*argc)++] = strdup("--sample-alias"); + (*argv)[(*argc)++] = strdup("Test Sample"); + (*argv)[(*argc)++] = strdup("--study-name"); + (*argv)[(*argc)++] = strdup("Study testStudy"); + (*argv)[(*argc)++] = strdup("--run-start-date"); + (*argv)[(*argc)++] = strdup("2011-03-23T00:00:00+0000"); + (*argv)[(*argc)++] = strdup("--generate-secondary-basecalls"); + (*argv)[(*argc)++] = strdup("--verbose"); + (*argv)[(*argc)++] = strdup("--read-group-id"); + (*argv)[(*argc)++] = strdup("6000_1"); + + assert(*argc<100); +} + +void setup_test_4(int* argc, char*** argv) +{ + *argc = 0; + *argv = (char**)calloc(sizeof(char*), 100); + (*argv)[(*argc)++] = strdup("bambi"); + (*argv)[(*argc)++] = strdup("i2b"); + (*argv)[(*argc)++] = strdup("-i"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/110323_HS13_06000_B_B039WABXX/Data/Intensities")); + (*argv)[(*argc)++] = strdup("-o"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/out/xxx.bam")); + (*argv)[(*argc)++] = strdup("--lane"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--first-tile"); + (*argv)[(*argc)++] = strdup("1101"); + (*argv)[(*argc)++] = strdup("--tile-limit"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--library-name"); + (*argv)[(*argc)++] = strdup("TestLibrary"); + (*argv)[(*argc)++] = strdup("--sample-alias"); + (*argv)[(*argc)++] = strdup("TestSample"); + (*argv)[(*argc)++] = strdup("--study-name"); + (*argv)[(*argc)++] = strdup("Study TestStudy"); + (*argv)[(*argc)++] = strdup("--run-start-date"); + (*argv)[(*argc)++] = strdup("2011-03-23T00:00:00+0000"); + (*argv)[(*argc)++] = strdup("--verbose"); + (*argv)[(*argc)++] = strdup("--first-cycle"); + (*argv)[(*argc)++] = strdup("50"); + (*argv)[(*argc)++] = strdup("--final-cycle"); + (*argv)[(*argc)++] = strdup("51"); + + assert(*argc<100); +} + +void setup_test_5(int* argc, char*** argv) +{ + *argc = 0; + *argv = (char**)calloc(sizeof(char*), 100); + (*argv)[(*argc)++] = strdup("bambi"); + (*argv)[(*argc)++] = strdup("i2b"); + (*argv)[(*argc)++] = strdup("-i"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/110323_HS13_06000_B_B039WABXX/Data/Intensities")); + (*argv)[(*argc)++] = strdup("-o"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/out/xxx.bam")); + (*argv)[(*argc)++] = strdup("--lane"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--first-tile"); + (*argv)[(*argc)++] = strdup("1101"); + (*argv)[(*argc)++] = strdup("--tile-limit"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--library-name"); + (*argv)[(*argc)++] = strdup("TestLibrary"); + (*argv)[(*argc)++] = strdup("--sample-alias"); + (*argv)[(*argc)++] = strdup("TestSample"); + (*argv)[(*argc)++] = strdup("--study-name"); + (*argv)[(*argc)++] = strdup("Study TestStudy"); + (*argv)[(*argc)++] = strdup("--run-start-date"); + (*argv)[(*argc)++] = strdup("2011-03-23T00:00:00+0000"); + (*argv)[(*argc)++] = strdup("--verbose"); + (*argv)[(*argc)++] = strdup("--first-cycle"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--final-cycle"); + (*argv)[(*argc)++] = strdup("2"); + (*argv)[(*argc)++] = strdup("--first-cycle"); + (*argv)[(*argc)++] = strdup("52"); + (*argv)[(*argc)++] = strdup("--final-cycle"); + (*argv)[(*argc)++] = strdup("53"); + (*argv)[(*argc)++] = strdup("--first-index-cycle"); + (*argv)[(*argc)++] = strdup("50"); + (*argv)[(*argc)++] = strdup("--final-index-cycle"); + (*argv)[(*argc)++] = strdup("51"); + (*argv)[(*argc)++] = strdup("--bc-read"); + (*argv)[(*argc)++] = strdup("2"); + + assert(*argc<100); +} + +void setup_test_6(int* argc, char*** argv) +{ + *argc = 0; + *argv = (char**)calloc(sizeof(char*), 100); + (*argv)[(*argc)++] = strdup("bambi"); + (*argv)[(*argc)++] = strdup("i2b"); + (*argv)[(*argc)++] = strdup("-i"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/140624_MS6_13349_A_MS2639979-300V2/Data/Intensities")); + (*argv)[(*argc)++] = strdup("-o"); + (*argv)[(*argc)++] = strdup(MKNAME(DATA_DIR,"/out/xxx.bam")); + (*argv)[(*argc)++] = strdup("--lane"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--first-tile"); + (*argv)[(*argc)++] = strdup("1101"); + (*argv)[(*argc)++] = strdup("--tile-limit"); + (*argv)[(*argc)++] = strdup("1"); + (*argv)[(*argc)++] = strdup("--library-name"); + (*argv)[(*argc)++] = strdup("TestLibrary"); + (*argv)[(*argc)++] = strdup("--sample-alias"); + (*argv)[(*argc)++] = strdup("TestSample"); + (*argv)[(*argc)++] = strdup("--study-name"); + (*argv)[(*argc)++] = strdup("Study TestStudy"); + (*argv)[(*argc)++] = strdup("--run-start-date"); + (*argv)[(*argc)++] = strdup("2011-03-23T00:00:00+0000"); + (*argv)[(*argc)++] = strdup("--verbose"); + (*argv)[(*argc)++] = strdup("--no-filter"); + (*argv)[(*argc)++] = strdup("--barcode-tag"); + (*argv)[(*argc)++] = strdup("tr"); + (*argv)[(*argc)++] = strdup("--quality-tag"); + (*argv)[(*argc)++] = strdup("tq"); + (*argv)[(*argc)++] = strdup("--sec-barcode-tag"); + (*argv)[(*argc)++] = strdup("BC"); + (*argv)[(*argc)++] = strdup("--sec-quality-tag"); + (*argv)[(*argc)++] = strdup("QT"); + + assert(*argc<100); +} + +void checkLike(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strstr(actual, expected) == NULL) { + fprintf(stderr, "%s\n" "Expected: %s\n" "Got: %s\n", name, expected, actual); + failure++; + } +} + +void checkEqual(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strcmp(expected, actual)) { + fprintf(stderr, "%s\n" "Expected: %s\n" "Got: %s\n", name, expected, actual); + failure++; + } +} + +void icheckEqual(char *name, int expected, int actual) +{ + if (expected != actual) { + fprintf(stderr, "%s\n" "Expected: %d\n" "Got: %d\n", name, expected, actual); + failure++; + } +} + +void test_paramaters(void) +{ + // minimal options + int argc_1; + char** argv_1; + setup_param_test(&argc_1, &argv_1); + opts_t *opts = i2b_parse_args(argc_1-1, argv_1+1); + + if (verbose) printf("Testing paramaters\n"); + + if (!opts) { + fprintf(stderr, "parse_args failed\n"); + failure++; + return; + } + + checkLike("options: intensity-dir", "test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities", opts->intensity_dir); + checkEqual("options: output-file", "test/i2b/out/xxx.sam", opts->output_file); + checkEqual("options: sample-alias", "testlibrary", opts->sample_alias); + checkEqual("options: study-name", "teststudy", opts->study_name); + checkLike("options: run-folder", "test/i2b/110323_HS13_06000_B_B039WABXX", opts->run_folder); + checkLike("options: basecalls-dir", "test/i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/BaseCalls", opts->basecalls_dir); + icheckEqual("options: lane", 1, opts->lane); + icheckEqual("options: generate-secondary-basecalls", 1, opts->generate_secondary_basecalls); + icheckEqual("options: no-filter", 1, opts->no_filter); + checkEqual("options: read-group-id", "1", opts->read_group_id); + checkEqual("options: sequencing-centre", "XY", opts->sequencing_centre); + checkEqual("options: platform", "Illumina", opts->platform); + icheckEqual("options: first-tile", 1103, opts->first_tile); + icheckEqual("options: tile-limit", 5, opts->tile_limit); + checkEqual("options: barcode-tag", "AB", opts->barcode_tag); + checkEqual("options: quality-tag", "CD", opts->quality_tag); + checkEqual("options: sec-barcode-tag", "WX", opts->barcode_tag2); + checkEqual("options: sec-quality-tag", "YZ", opts->quality_tag2); + icheckEqual("options: sec-bc-read", 2, opts->sec_bc_read); + icheckEqual("options: first-cycle", 3, opts->first_cycle->end); + icheckEqual("options: first-cycle[0]", 7, opts->first_cycle->entries[0]); + icheckEqual("options: first-cycle[1]", 17, opts->first_cycle->entries[1]); + icheckEqual("options: first-cycle[2]", 70, opts->first_cycle->entries[2]); + icheckEqual("options: final-cycle", 1, opts->final_cycle->end); + icheckEqual("options: final-index-cycle", 1, opts->final_index_cycle->end); + icheckEqual("options: final-cycle[0]", 9, opts->final_cycle->entries[0]); + icheckEqual("options: add-cluster-index-tag", 1, opts->add_cluster_index_tag); +} + +void checkFiles(char *name, char *fname) +{ + char command[256]; + + sprintf(command,"samtools view -H %s | grep @RG > /tmp/got.txt", MKNAME(DATA_DIR,"/out/xxx.bam")); + if (system(command)) { fprintf(stderr,"samtools failed\n"); failure++; } + sprintf(command, "samtools view -H %s | grep @RG > /tmp/expected.txt", fname); + if (system(command)) { fprintf(stderr,"samtools failed\n"); failure++; } + int result = system("diff /tmp/got.txt /tmp/expected.txt"); + if (result) { + fprintf(stderr, "%s: test 1 failed\n", name); + failure++; + } else { + success++; + } + + sprintf(command,"samtools view %s | head | perl -n -e 'chomp; @x=split /\t/;@y=sort @x; print join \",\",@y; print \"\n\";' > /tmp/got.txt",MKNAME(DATA_DIR,"/out/xxx.bam")); + if (system(command)) { fprintf(stderr,"samtools failed\n"); failure++; } + sprintf(command,"samtools view %s | head | perl -n -e 'chomp; @x=split /\t/;@y=sort @x; print join \",\",@y; print \"\n\";' > /tmp/expected.txt", fname); + if (system(command)) { fprintf(stderr,"samtools failed\n"); failure++; } + result = system("diff /tmp/got.txt /tmp/expected.txt"); + if (result) { + fprintf(stderr, "%s: test 2 failed\n", name); + failure++; + } else { + success++; + } + + sprintf(command,"samtools view %s | tail | perl -n -e 'chomp; @x=split /\t/;@y=sort @x; print join \",\",@y; print \"\n\";' > /tmp/got.txt", MKNAME(DATA_DIR,"/out/xxx.bam")); + if (system(command)) { fprintf(stderr,"samtools failed\n"); failure++; } + sprintf(command,"samtools view %s | tail | perl -n -e 'chomp; @x=split /\t/;@y=sort @x; print join \",\",@y; print \"\n\";' > /tmp/expected.txt", fname); + if (system(command)) { fprintf(stderr,"samtools failed\n"); failure++; } + result = system("diff /tmp/got.txt /tmp/expected.txt"); + if (result) { + fprintf(stderr, "%s: test 3 failed\n", name); + failure++; + } else { + success++; + } +} + +int main(int argc, char**argv) +{ + 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; + + int argc_1; + char** argv_1; + + // check if we have samtools + if (system("which samtools") != 0) { + fprintf(stderr,"samtools not found. Tests cannot be run\n"); + return EXIT_FAILURE; + } + + // + // test that we can read the command line paramaters + // + test_paramaters(); + + + // + // simple test + // + + setup_test_1(&argc_1, &argv_1); + main_i2b(argc_1-1, argv_1+1); + checkFiles("Simple test", MKNAME(DATA_DIR,"/out/test1.bam")); + + + // + // Test with non-standard read group ID + // + + setup_test_2(&argc_1, &argv_1); + main_i2b(argc_1-1,argv_1+1); + checkFiles("Read Group ID test", MKNAME(DATA_DIR,"/out/test2.bam")); + + // + // cycle range test + // + setup_test_4(&argc_1, &argv_1); + main_i2b(argc_1-1,argv_1+1); + checkFiles("Cycle Range test", MKNAME(DATA_DIR,"/out/test4.bam")); + + // + // bc-read test + // + setup_test_5(&argc_1, &argv_1); + main_i2b(argc_1-1,argv_1+1); + checkFiles("BC_READ test", MKNAME(DATA_DIR,"/out/test5.bam")); + + // + // dual index run + // + setup_test_6(&argc_1, &argv_1); + main_i2b(argc_1-1,argv_1+1); + checkFiles("Dual Index test", MKNAME(DATA_DIR,"/out/test6.bam")); + + + printf("i2b tests: %s\n", failure ? "FAILED" : "Passed"); + return failure ? EXIT_FAILURE : EXIT_SUCCESS; +} diff --git a/test/posfile/Makefile.am b/test/posfile/Makefile.am new file mode 100644 index 0000000..10356b5 --- /dev/null +++ b/test/posfile/Makefile.am @@ -0,0 +1,3 @@ +bin_PROGRAMS = t_posfile +t_posfile_SOURCES = t_posfile.c +t_posfile_CFLAGS = -DDATA_DIR=$(abs_srcdir) diff --git a/test/posfile/t_posfile.c b/test/posfile/t_posfile.c new file mode 100644 index 0000000..b733a47 --- /dev/null +++ b/test/posfile/t_posfile.c @@ -0,0 +1,120 @@ +/* test/i2b/posfile.c -- posfile test cases. + + Copyright (C) 2016 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 "../../src/posfile.c" +#include +#include +#include +#include + +#define xMKNAME(d,f) #d f +#define MKNAME(d,f) xMKNAME(d,f) + +int verbose = 0; + +int success = 0; +int failure = 0; + +void checkLike(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strstr(actual, expected) == NULL) { + fprintf(stderr, "%s\n" "Expected: %s\n" "Got: %s\n", name, expected, actual); + failure++; + } +} + +void checkEqual(char *name, char *expected, char *actual) +{ + if (actual == NULL) actual = ""; + if (strcmp(expected, actual)) { + fprintf(stderr, "%s\n" "Expected: %s\n" "Got: %s\n", name, expected, actual); + failure++; + } +} + +void icheckEqual(char *name, int expected, int actual) +{ + if (expected != actual) { + fprintf(stderr, "%s\n" "Expected: %d\n" "Got: %d\n", name, expected, actual); + failure++; + } +} + +int main(int argc, char**argv) +{ + int n; + + posfile_t *posfile; + + /* + * clocs file + */ + posfile = posfile_open(MKNAME(DATA_DIR,"/../i2b/110323_HS13_06000_B_B039WABXX/Data/Intensities/L001/s_1_1101.clocs")); + if (posfile->errmsg) { + fprintf(stderr,"Error opening file: %s\n", posfile->errmsg); + failure++; + } + icheckEqual("Version", 1, posfile->version); + icheckEqual("Total blocks", 65600, posfile->total_blocks); + + posfile_next(posfile); + icheckEqual("next X", 1235, posfile_get_x(posfile)); + icheckEqual("next Y", 1989, posfile_get_y(posfile)); + icheckEqual("current block", 247, posfile->current_block); + + for (n=0; n<306; n++) { + posfile_next(posfile); + } + icheckEqual("307 x", 1279, posfile_get_x(posfile)); + icheckEqual("307 y", 2120, posfile_get_y(posfile)); + icheckEqual("307 block", 330, posfile->current_block); + + while (posfile_next(posfile) == 0); + posfile_close(posfile); + + /* + * locs file + */ + posfile = posfile_open(MKNAME(DATA_DIR,"/../i2b/111014_M00119_0028_AMS0001310-00300/Data/Intensities/L001/s_1_1.locs")); + if (posfile->errmsg) { + fprintf(stderr,"Error opening file: %s\n", posfile->errmsg); + failure++; + } + + icheckEqual("LOCS: Total blocks", 235085, posfile->total_blocks); + icheckEqual("LOCS: current block", 0, posfile->current_block); + + posfile_next(posfile); + icheckEqual("LOCS: first X", 16440, posfile_get_x(posfile)); + icheckEqual("LOCS: first Y", 1321, posfile_get_y(posfile)); + icheckEqual("LOCS: current block (2)", 1, posfile->current_block); + + while (posfile_next(posfile)==0); + + icheckEqual("LOCS: last x", 15605, posfile_get_x(posfile)); + icheckEqual("LOCS: last y", 29408, posfile_get_y(posfile)); + + posfile_close(posfile); + + printf("posfile tests: %s\n", failure ? "FAILED" : "Passed"); + return failure ? EXIT_FAILURE : EXIT_SUCCESS; +}