diff --git a/.github/workflows/qiita-plugin-ci.yml b/.github/workflows/qiita-plugin-ci.yml index 4b6e0a03..d23eba74 100644 --- a/.github/workflows/qiita-plugin-ci.yml +++ b/.github/workflows/qiita-plugin-ci.yml @@ -79,7 +79,8 @@ jobs: # seqtk is a conda-installed requirement for metapool and isn't # installed automatically by its setup.py. conda config --add channels bioconda - conda create -q --yes -n klp python=3.9 seqtk + conda create -q --yes -n klp python=3.9 'seqtk>=1.4' + conda activate klp export QIITA_SERVER_CERT=`pwd`/qiita-dev/qiita_core/support_files/server.crt diff --git a/pyproject.toml b/pyproject.toml index e1447ea5..ceb448c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ dependencies = [ "pandas", "qiita-files@https://github.com/qiita-spots/qiita-files/archive/master.zip", "qiita_client@https://github.com/qiita-spots/qiita_client/archive/master.zip", - "sequence-processing-pipeline@https://github.com/biocore/mg-scripts/archive/master.zip", + "sequence-processing-pipeline@https://github.com/biocore/mg-scripts/archive/master.zip" ] [project.scripts] configure_klp = "qp_klp.scripts.configure_klp:config" diff --git a/qp_klp/Amplicon.py b/qp_klp/Amplicon.py deleted file mode 100644 index b7166f97..00000000 --- a/qp_klp/Amplicon.py +++ /dev/null @@ -1,128 +0,0 @@ -from os import listdir, makedirs -from os.path import join, isfile, basename -from shutil import copyfile -from qp_klp.Step import Step - - -class Amplicon(Step): - def __init__(self, pipeline, master_qiita_job_id, - status_update_callback=None, - lane_number=None, is_restart=False): - super().__init__(pipeline, - master_qiita_job_id, - status_update_callback, - lane_number, - is_restart=is_restart) - - if pipeline.pipeline_type != Step.AMPLICON_TYPE: - raise ValueError("Cannot create an Amplicon run using a " - f"{pipeline.pipeline_type}-configured Pipeline.") - - def convert_bcl_to_fastq(self): - # The 'bcl2fastq' key is a convention hard-coded into mg-scripts and - # qp-klp projects. By design and history, amplicon jobs use EMP primers - # and are demuxed downstream of qp-klp by Qiita. This necessitates the - # use of bcl2fastq and a 'dummy' sample-sheet to avoid the - # demultiplexing that otherwise occurs at this stage. The name and - # path of the executable, the resource requirements to instantiate a - # SLURM job with, etc. are stored in configuration['bcl2fastq']. - config = self.pipeline.config_profile['profile']['configuration'] - super()._convert_bcl_to_fastq(config['bcl2fastq'], - self.pipeline.sample_sheet) - - def quality_control(self): - # Quality control for Amplicon runs occurs downstream. - # Do not perform QC at this time. - - # Simulate NuQCJob's output directory for use as input into FastQCJob. - projects = self.pipeline.get_project_info() - projects = [x['project_name'] for x in projects] - - for project_name in projects: - # copy the files from ConvertJob output to faked NuQCJob output - # folder: $WKDIR/$RUN_ID/NuQCJob/$PROJ_NAME/amplicon - output_folder = join(self.pipeline.output_path, - 'NuQCJob', - project_name, - # for legacy purposes, output folders are - # either 'trimmed_sequences', 'amplicon', or - # 'filtered_sequences'. Hence, this folder - # is not defined using AMPLICON_TYPE as that - # value may or may not equal the needed value. - 'amplicon') - - makedirs(output_folder) - - raw_fastq_files_path = join(self.pipeline.output_path, - 'ConvertJob') - - # get list of all raw output files to be copied. - job_output = [join(raw_fastq_files_path, x) for x in - listdir(raw_fastq_files_path)] - job_output = [x for x in job_output if isfile(x)] - job_output = [x for x in job_output if x.endswith('fastq.gz')] - # Undetermined files are very small and should be filtered from - # results. - job_output = [x for x in job_output if - not basename(x).startswith('Undetermined')] - - # copy the file - for fastq_file in job_output: - new_path = join(output_folder, basename(fastq_file)) - copyfile(fastq_file, new_path) - - # FastQC expects the ConvertJob output to also be organized by - # project. Since this would entail running the same ConvertJob - # multiple times on the same input with just a name-change in - # the dummy sample-sheet, we instead perform ConvertJob once - # and copy the output from ConvertJob's output folder into - # ConvertJob's output folder/project1, project2 ... projectN. - output_folder = join(raw_fastq_files_path, project_name) - makedirs(output_folder) - - job_output = [join(raw_fastq_files_path, x) for x in - listdir(raw_fastq_files_path)] - job_output = [x for x in job_output if isfile(x) and x.endswith( - 'fastq.gz') and not basename(x).startswith('Undetermined')] - - for raw_fastq_file in job_output: - new_path = join(output_folder, basename(raw_fastq_file)) - copyfile(raw_fastq_file, new_path) - - def generate_reports(self): - super()._generate_reports() - return None # amplicon doesn't need project names - - def get_data_type(self, prep_file_path): - metadata = Step.parse_prep_file(prep_file_path, convert_to_dict=False) - - if 'target_gene' in metadata.columns: - target_genes = metadata.target_gene.unique() - else: - target_genes = [] - - if target_genes: - if len(target_genes) != 1: - raise ValueError("More than one value for target_gene") - - for key in Step.AMPLICON_SUB_TYPES: - if key in target_genes[0]: - return key - - raise ValueError(f"'{target_genes[0]}' is not a valid type - valid" - f" data-types are {Step.AMPLICON_SUB_TYPES}") - else: - raise ValueError("'target_gene' column not present in " - "generated prep-files") - - def generate_prep_file(self): - config = self.pipeline.config_profile['profile']['configuration'] - seqpro_path = config['seqpro']['seqpro_path'].replace('seqpro', - 'seqpro_mf') - - job = super()._generate_prep_file(config['seqpro'], - self.pipeline.mapping_file_path, - seqpro_path) - - self.prep_file_paths = job.prep_file_paths - self.has_replicates = job.has_replicates diff --git a/qp_klp/Assays.py b/qp_klp/Assays.py new file mode 100644 index 00000000..7a202d55 --- /dev/null +++ b/qp_klp/Assays.py @@ -0,0 +1,511 @@ +from os import listdir, makedirs +from os.path import isfile +from shutil import copyfile +from sequence_processing_pipeline.NuQCJob import NuQCJob +from sequence_processing_pipeline.FastQCJob import FastQCJob +from sequence_processing_pipeline.GenPrepFileJob import GenPrepFileJob +from os.path import join +import pandas as pd +from json import dumps +from collections import defaultdict +from os.path import basename, dirname + + +ASSAY_NAME_NONE = "Assay" +ASSAY_NAME_AMPLICON = "Amplicon" +ASSAY_NAME_METAGENOMIC = "Metagenomic" +ASSAY_NAME_METATRANSCRIPTOMIC = "Metatranscriptomic" +METAOMIC_ASSAY_NAMES = [ASSAY_NAME_METAGENOMIC, ASSAY_NAME_METATRANSCRIPTOMIC] + +ARTIFACT_TYPE_AMPLICON = "FASTQ" +ARTIFACT_TYPE_METAOMICS = "per_sample_FASTQ" + + +class Assay(): + """ + Assay encapsulate Job()s and other functionality that varies on the + assay-type of the run. All Assays are mixins for Workflow() classes + and shouldn't define their own initialization. + + Functionality specific to one assay-type is assigned to a specific + type. Functionality used by more than one Assay is defined in the base + Assay() class with a unique name and wrapped by the child classes that + use it. Functionality used by all children is defined in Assay() class + w/the name meant to be shared by all and used by the user. Helper + methods used by other functions in Assay() or its children begin + w/'_'. + """ + assay_type = ASSAY_NAME_NONE + + @classmethod + def _replace_tube_ids_w_sample_names(cls, prep_file_path, tube_id_map): + """ + Helper method for overwrite_prep_files(). + :param prep_file_path: The path to a generated prep-info file. + :param tube_id_map: A mapping (dict) of sample-names to tube-ids . + :return: None + """ + # reversed_map maps tube-ids to sample-names + reversed_map = {tube_id_map[k]: k for k in tube_id_map} + + # passing tube_id_map as a parameter allows for easier testing. + df = pd.read_csv(prep_file_path, sep='\t', dtype=str, index_col=False) + # save copy of sample_name column as 'old_sample_name' + df['old_sample_name'] = df['sample_name'] + for i in df.index: + sample_name = df.at[i, "sample_name"] + # blanks do not get their names swapped. + if sample_name.startswith('BLANK'): + continue + + # remove leading zeroes if they exist to match Qiita results. + sample_name = sample_name.lstrip('0') + + if sample_name in reversed_map: + df.at[i, "sample_name"] = reversed_map[sample_name] + + df.to_csv(prep_file_path, index=False, sep="\t") + + def overwrite_prep_files(self, prep_file_paths): + """ + Replace tube-ids in prep-info files w/sample-names. + :param prep_file_paths: A list of generated prep-info files. + :return: None + """ + # replace tube-ids in prep-info files w/sample-names. + if self.tube_id_map is None: + raise ValueError("get_tube_ids_from_qiita() was not called") + + projects = self.pipeline.get_project_info(short_names=True) + + for project in projects: + project_name = project['project_name'] + qiita_id = str(project['qiita_id']) + + if qiita_id not in self.tube_id_map: + continue + + # prep files are named in the following form: + # 20220423_FS10001773_12_BRB11603-0615.Matrix_Tube_LBM_14332.1.tsv + fqp_name = "%s_%s" % (project_name, qiita_id) + matching_files = [prep_file for prep_file in prep_file_paths if + fqp_name in prep_file] + + if len(matching_files) == 0: + continue + + for matching_file in matching_files: + Assay._replace_tube_ids_w_sample_names(matching_file, + self.tube_id_map[ + qiita_id]) + + @classmethod + def _parse_prep_file(cls, prep_file_path, convert_to_dict=True): + """ + Helper method for update_prep_templates(). + :param prep_file_path: The path to a generated prep-info file. + :param convert_to_dict: If True, a dict() is returned. + :return: A DataFrame() is returned, unless convert_to_dict is True. + """ + metadata = pd.read_csv(prep_file_path, + dtype=str, + delimiter='\t', + # forces Pandas to not make the first column + # the index even when the values appear numeric. + index_col=False) + + if metadata is None: + raise ValueError(f"{prep_file_path} does not exist.") + + metadata.set_index('sample_name', inplace=True) + + if convert_to_dict: + return metadata.to_dict('index') + else: + return metadata + + def _generate_artifact_name(self, prep_file_path): + """ + Helper method for update_prep_templates(). + :param prep_file_path: The path to a generated prep-info file. + :return: If prep is a replicate, returns artifact-name, repl-number, + and True. Otherwise, returns artifact-name and False. + """ + a_name = f'{self.pipeline.run_id}_{self.lane_number}' + repl_num = basename(dirname(prep_file_path)) + + if self.has_replicates is True: + # this is a replicate sheet file. + # append a replication number to each name to + # make it unique from other replicates. + # return ('%s_r%s' % (a_name, result[1]), True) + return ('%s_r%s' % (a_name, repl_num), True) + else: + # this is a normal pre-prep or sample-sheet. + return (a_name, False) + + +class Amplicon(Assay): + AMPLICON_TYPE = 'Amplicon' + AMPLICON_SUB_TYPES = {'16S', '18S', 'ITS'} + assay_type = ASSAY_NAME_AMPLICON + + def post_process_raw_fastq_output(self): + """ + Post-process ConvertJob output into correct form for FastQCJob. + """ + # Since demuxing and thus quality control occurs downstream of SPP + # for amplicon runs, there is no QC to be performed at this time. + # However, we do want to fake 'QCJob' output so that downstream Jobs() + # can act on the results of ConvertJob() w/out modification. + + # Simulate NuQCJob's output directory for use as input into FastQCJob. + projects = self.pipeline.get_project_info() + + projects = [x['project_name'] for x in projects] + + for project_name in projects: + # copy the files from ConvertJob output to faked NuQCJob output + # folder: $WKDIR/$RUN_ID/NuQCJob/$PROJ_NAME/amplicon + output_folder = join(self.pipeline.output_path, + 'NuQCJob', + project_name, + # for legacy purposes, output folders are + # either 'trimmed_sequences', 'amplicon', or + # 'filtered_sequences'. Hence, this folder + # is not defined using AMPLICON_TYPE as that + # value may or may not equal the needed value. + 'amplicon') + + makedirs(output_folder) + + # get list of all raw output files to be copied. + job_output = [join(self.raw_fastq_files_path, x) for x in + listdir(self.raw_fastq_files_path)] + + job_output = [x for x in job_output if isfile(x)] + job_output = [x for x in job_output if x.endswith('fastq.gz')] + + # NB: In this case, ensure the ONLY files that get copied are + # Undetermined files, and this is what we expect for 16S runs. + job_output = [x for x in job_output if + basename(x).startswith('Undetermined')] + + # copy the file + for fastq_file in job_output: + new_path = join(output_folder, basename(fastq_file)) + copyfile(fastq_file, new_path) + + # FastQC expects the ConvertJob output to also be organized by + # project. Since this would entail running the same ConvertJob + # multiple times on the same input with just a name-change in + # the dummy sample-sheet, we instead perform ConvertJob once + # and copy the output from ConvertJob's output folder into + # ConvertJob's output folder/project1, project2 ... projectN. + output_folder = join(self.raw_fastq_files_path, project_name) + makedirs(output_folder) + + job_output = [join(self.raw_fastq_files_path, x) for x in + listdir(self.raw_fastq_files_path)] + job_output = [x for x in job_output if isfile(x) and x.endswith( + 'fastq.gz') and not basename(x).startswith('Undetermined')] + + for raw_fastq_file in job_output: + new_path = join(output_folder, basename(raw_fastq_file)) + copyfile(raw_fastq_file, new_path) + + def generate_reports(self): + config = self.pipeline.get_software_configuration('fastqc') + job = FastQCJob(self.pipeline.run_dir, + self.pipeline.output_path, + self.raw_fastq_files_path, + join(self.pipeline.output_path, 'NuQCJob'), + config['nprocs'], + config['nthreads'], + config['fastqc_executable_path'], + config['modules_to_load'], + self.master_qiita_job_id, + config['queue'], + config['nodes'], + config['wallclock_time_in_minutes'], + config['job_total_memory_limit'], + config['job_pool_size'], + config['multiqc_config_file_path'], + config['job_max_array_length'], + True) + + if 'FastQCJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + def generate_prep_file(self): + config = self.pipeline.get_software_configuration('seqpro') + + # NB: For amplicon runs, the executable used is currently a variant + # of seqpro called 'seqpro_mf'. It is stored in the same location as + # 'seqpro'. + seqpro_path = config['seqpro_path'].replace('seqpro', 'seqpro_mf') + + job = GenPrepFileJob(self.pipeline.run_dir, + self.raw_fastq_files_path, + join(self.pipeline.output_path, 'NuQCJob'), + self.pipeline.output_path, + self.pipeline.input_file_path, + seqpro_path, + config['modules_to_load'], + self.master_qiita_job_id, + join(self.pipeline.output_path, 'ConvertJob'), + is_amplicon=True) + + if 'GenPrepFileJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + self.prep_file_paths = job.prep_file_paths + self.has_replicates = job.has_replicates + + def update_prep_templates(self): + """ + Update prep-template info in Qiita. Get dict of prep-ids by study-id. + :return: A dict of lists of prep-ids, keyed by study-id. + """ + results = defaultdict(list) + + for study_id in self.prep_file_paths: + for prep_fp in self.prep_file_paths[study_id]: + metadata = Assay._parse_prep_file(prep_fp) + afact_name, is_repl = self._generate_artifact_name(prep_fp) + data = {'prep_info': dumps(metadata), + 'study': study_id, + 'data_type': None, + 'job-id': self.master_qiita_job_id, + 'name': afact_name} + + if 'target_gene' in metadata[list(metadata.keys())[0]]: + tg = metadata[list(metadata.keys())[0]]['target_gene'] + for key in Amplicon.AMPLICON_SUB_TYPES: + if key in tg: + data['data_type'] = key + + if data['data_type'] is None: + raise ValueError("data_type could not be " + "determined from target_gene " + "column") + else: + raise ValueError("target_gene must be specified for " + "amplicon type") + + reply = self.qclient.post('/qiita_db/prep_template/', + data=data) + prep_id = reply['prep'] + results[study_id].append((prep_id, afact_name, is_repl)) + self.run_prefixes[prep_id] = [metadata[sample]['run_prefix'] + for sample in metadata] + + self.touched_studies_prep_info = results + return results + + def load_preps_into_qiita(self): + data = [] + for project, _, qiita_id in self.special_map: + fastq_files = self._get_postqc_fastq_files( + self.pipeline.output_path, project) + + for vals in self.touched_studies_prep_info[qiita_id]: + prep_id, artifact_name, is_repl = vals + if is_repl: + # for Amplicon runs, each prep needs a copy of the + # entire set of fastq files, because demuxing samples + # happens downstream. If we don't make copies of the + # files, Qiita will move the files when loading the + # first prep and they won't be available for the + # second prep and after. + # Note that this will leave the original files present + # in the working directory after processing instead of + # being moved. + working_set = self._copy_files(fastq_files) + else: + working_set = fastq_files + + data.append(self._load_prep_into_qiita( + self.qclient, prep_id, artifact_name, qiita_id, project, + working_set, ARTIFACT_TYPE_AMPLICON)) + + df = pd.DataFrame(data) + opath = join(self.pipeline.output_path, 'touched_studies.html') + with open(opath, 'w') as f: + f.write(df.to_html(border=2, index=False, justify="left", + render_links=True, escape=False)) + + return df + + +class MetaOmic(Assay): + """ + MetaOmic() is a base class for Metagenomic() and Metatranscriptomic(), + which are currently identical in functionality. + """ + # MetaOmic does not have an assay_type of its own. It is defined by its + # children. + + def quality_control(self): + # because this is a mixin, assume containing object will contain + # a pipeline object. + config = self.pipeline.get_software_configuration('nu-qc') + + # base quality control used by multiple Assay types. + job = NuQCJob(self.raw_fastq_files_path, + self.pipeline.output_path, + self.pipeline.sample_sheet.path, + config['minimap2_databases'], + config['queue'], + config['nodes'], + config['wallclock_time_in_minutes'], + config['job_total_memory_limit'], + config['fastp_executable_path'], + config['minimap2_executable_path'], + config['samtools_executable_path'], + config['modules_to_load'], + self.master_qiita_job_id, + config['job_max_array_length'], + config['known_adapters_path'], + config['movi_executable_path'], + config['gres_value'], + config['pmls_path'], + config['additional_fastq_tags'], + bucket_size=config['bucket_size'], + length_limit=config['length_limit'], + cores_per_task=config['cores_per_task']) + + if 'NuQCJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + # audit the results to determine which samples failed to convert + # properly. Append these to the failed-samples report and also + # return the list directly to the caller. + failed_samples = job.audit(self.pipeline.get_sample_ids()) + if hasattr(self, 'fsr'): + self.fsr.write(failed_samples, job.__class__.__name__) + return failed_samples + + def generate_reports(self): + config = self.pipeline.get_software_configuration('fastqc') + job = FastQCJob(self.pipeline.run_dir, + self.pipeline.output_path, + self.raw_fastq_files_path, + join(self.pipeline.output_path, 'NuQCJob'), + config['nprocs'], + config['nthreads'], + config['fastqc_executable_path'], + config['modules_to_load'], + self.master_qiita_job_id, + config['queue'], + config['nodes'], + config['wallclock_time_in_minutes'], + config['job_total_memory_limit'], + config['job_pool_size'], + config['multiqc_config_file_path'], + config['job_max_array_length'], + False) + + if 'FastQCJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + failed_samples = job.audit(self.pipeline.get_sample_ids()) + if hasattr(self, 'fsr'): + self.fsr.write(failed_samples, job.__class__.__name__) + return failed_samples + + def generate_prep_file(self): + config = self.pipeline.get_software_configuration('seqpro') + + if 'ConvertJob' in self.raw_fastq_files_path: + reports_dir = join(self.pipeline.output_path, 'ConvertJob') + elif 'TRIntegrateJob' in self.raw_fastq_files_path: + reports_dir = join(self.pipeline.output_path, 'SeqCountsJob') + + job = GenPrepFileJob(self.pipeline.run_dir, + self.raw_fastq_files_path, + join(self.pipeline.output_path, 'NuQCJob'), + self.pipeline.output_path, + self.pipeline.input_file_path, + config['seqpro_path'], + config['modules_to_load'], + self.master_qiita_job_id, + reports_dir) + + if 'GenPrepFileJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + self.prep_file_paths = job.prep_file_paths + self.has_replicates = job.has_replicates + + def update_prep_templates(self): + """ + Update prep-template info in Qiita. Get dict of prep-ids by study-id. + :return: A dict of lists of prep-ids, keyed by study-id. + """ + results = defaultdict(list) + + for study_id in self.prep_file_paths: + for prep_fp in self.prep_file_paths[study_id]: + metadata = Assay._parse_prep_file(prep_fp) + afact_name, is_repl = self._generate_artifact_name(prep_fp) + data = {'prep_info': dumps(metadata), + 'study': study_id, + 'job-id': self.master_qiita_job_id, + 'name': afact_name, + 'data_type': self.pipeline.pipeline_type} + + # since all Assays are mixins for Workflows, assume + # self.qclient exists and available. + reply = self.qclient.post('/qiita_db/prep_template/', + data=data) + prep_id = reply['prep'] + results[study_id].append((prep_id, afact_name, is_repl)) + self.run_prefixes[prep_id] = [metadata[sample]['run_prefix'] + for sample in metadata] + + self.touched_studies_prep_info = results + return results + + def load_preps_into_qiita(self): + data = [] + for project, _, qiita_id in self.special_map: + fastq_files = self._get_postqc_fastq_files( + self.pipeline.output_path, project) + + for vals in self.touched_studies_prep_info[qiita_id]: + prep_id, artifact_name, is_repl = vals + # for meta*omics, generate the subset of files used by + # this prep only. + working_set = {} + for key in fastq_files: + working_set[key] = [] + for run_prefix in self.run_prefixes[prep_id]: + working_set[key] += [fastq for fastq in + fastq_files[key] if + run_prefix in fastq] + + if is_repl: + working_set = self._copy_files(working_set) + + data.append(self._load_prep_into_qiita( + self.qclient, prep_id, artifact_name, qiita_id, project, + working_set, ARTIFACT_TYPE_METAOMICS)) + + df = pd.DataFrame(data) + opath = join(self.pipeline.output_path, 'touched_studies.html') + with open(opath, 'w') as f: + f.write(df.to_html(border=2, index=False, justify="left", + render_links=True, escape=False)) + + return df + + +class Metagenomic(MetaOmic): + METAGENOMIC_TYPE = 'Metagenomic' + assay_type = ASSAY_NAME_METAGENOMIC + + +class Metatranscriptomic(MetaOmic): + METATRANSCRIPTOMIC_TYPE = 'Metatranscriptomic' + assay_type = ASSAY_NAME_METATRANSCRIPTOMIC diff --git a/qp_klp/FailedSamplesRecord.py b/qp_klp/FailedSamplesRecord.py new file mode 100644 index 00000000..73e0153b --- /dev/null +++ b/qp_klp/FailedSamplesRecord.py @@ -0,0 +1,70 @@ +from json import dumps, load +from os.path import join, exists +import pandas as pd + + +class FailedSamplesRecord: + def __init__(self, output_dir, samples): + # because we want to write out the list of samples that failed after + # each Job is run, and we want to organize that output by project, we + # need to keep a running state of failed samples, and reuse the method + # to reorganize the running-results and write them out to disk. + self.output_path = join(output_dir, 'failed_samples.json') + self.report_path = join(output_dir, 'failed_samples.html') + + # create an initial dictionary with sample-ids as keys and their + # associated project-name and status as values. Afterwards, we'll + # filter out the sample-ids w/no status (meaning they were + # successfully processed) before writing the failed entries out to + # file. + self.sample_state = {x.Sample_ID: None for x in samples} + self.project_map = {x.Sample_ID: x.Sample_Project for x in samples} + + def dump(self): + output = {'sample_state': self.sample_state, + 'project_map': self.project_map} + + with open(self.output_path, 'w') as f: + f.write(dumps(output, indent=2, sort_keys=True)) + + def load(self): + # if recorded state exists, overwrite initial state. + if exists(self.output_path): + with open(self.output_path, 'r') as f: + state = load(f) + + self.sample_state = state['sample_state'] + self.project_map = state['project_map'] + + def update(self, failed_ids, job_name): + # as a rule, if a failed_id were to appear in more than one + # audit(), preserve the earliest failure, rather than the + # latest one. + for failed_id in failed_ids: + if self.sample_state[failed_id] is None: + self.sample_state[failed_id] = job_name + + def write(self, failed_ids, job_name): + # a convenience method to support legacy behavior. + # specifically, reload recorded state, if it exists. + # then update state before recording to file. + self.load() + self.update(failed_ids, job_name) + self.dump() + + def generate_report(self): + # filter out the sample-ids w/out a failure status + filtered_fails = {x: self.sample_state[x] for x in self.sample_state if + self.sample_state[x] is not None} + + data = [] + for sample_id in filtered_fails: + data.append({'Project': filtered_fails[sample_id], + 'Sample ID': sample_id, + 'Failed at': self.project_map[sample_id] + }) + df = pd.DataFrame(data) + + with open(self.report_path, 'w') as f: + f.write(df.to_html(border=2, index=False, justify="left", + render_links=True, escape=False)) diff --git a/qp_klp/Metagenomic.py b/qp_klp/Metagenomic.py deleted file mode 100644 index 9652c7fb..00000000 --- a/qp_klp/Metagenomic.py +++ /dev/null @@ -1,62 +0,0 @@ -from qp_klp.Step import FailedSamplesRecord, Step - - -class Metagenomic(Step): - def __init__(self, pipeline, master_qiita_job_id, - status_update_callback=None, lane_number=None, - is_restart=False): - super().__init__(pipeline, - master_qiita_job_id, - status_update_callback, - lane_number, - is_restart) - - if pipeline.pipeline_type not in Step.META_TYPES: - raise ValueError("Cannot instantiate Metagenomic object from " - f"pipeline of type '{pipeline.pipeline_type}'") - - # Note: FailedSamplesRecord is not used when processing amplicon as the - # samples are processed as a single fastq file and hence that info - # is not available. - self.fsr = FailedSamplesRecord(self.pipeline.output_path, - pipeline.sample_sheet.samples) - - def convert_bcl_to_fastq(self): - # The 'bcl-convert' key is a convention hard-coded into mg-scripts and - # qp-klp projects. Currently meta*omic jobs use bcl-convert for its - # improved performance over bcl2fastq. The name and path of the - # executable, the resource requirements to instantiate a SLURM job - # with, etc. are stored in configuration['bcl-convert'']. - config = self.pipeline.config_profile['profile']['configuration'] - job = super()._convert_bcl_to_fastq(config['bcl-convert'], - self.pipeline.sample_sheet.path) - self.fsr.write(job.audit(self.pipeline.get_sample_ids()), 'ConvertJob') - - def quality_control(self): - config = self.pipeline.config_profile['profile']['configuration'] - job = super()._quality_control(config['nu-qc'], - self.pipeline.sample_sheet.path) - self.fsr.write(job.audit(self.pipeline.get_sample_ids()), 'NuQCJob') - - def generate_reports(self): - job = super()._generate_reports() - self.fsr.write(job.audit(self.pipeline.get_sample_ids()), 'FastQCJob') - - # as generate_reports is the final step that updates self.fsr, - # we can generate the final human-readable report following this step. - self.fsr.generate_report() - - def get_data_type(self, prep_file_path): - # prep_file_path is unused. It's kept for compatability with Amplicon - # and Step. - return self.pipeline.pipeline_type - - def generate_prep_file(self): - config = self.pipeline.config_profile['profile']['configuration'] - - job = super()._generate_prep_file(config['seqpro'], - self.pipeline.sample_sheet.path, - config['seqpro']['seqpro_path']) - - self.prep_file_paths = job.prep_file_paths - self.has_replicates = job.has_replicates diff --git a/qp_klp/Protocol.py b/qp_klp/Protocol.py new file mode 100644 index 00000000..ae6422b6 --- /dev/null +++ b/qp_klp/Protocol.py @@ -0,0 +1,295 @@ +from sequence_processing_pipeline.ConvertJob import ConvertJob +from sequence_processing_pipeline.TellReadJob import TellReadJob +from sequence_processing_pipeline.SeqCountsJob import SeqCountsJob +from sequence_processing_pipeline.TRIntegrateJob import TRIntegrateJob +from sequence_processing_pipeline.PipelineError import PipelineError +from os.path import join, split +from re import match +from os import makedirs, rename, walk +from metapool import load_sample_sheet + + +PROTOCOL_NAME_NONE = "None" +PROTOCOL_NAME_ILLUMINA = "Illumina" +PROTOCOL_NAME_TELLSEQ = "TellSeq" + + +class Protocol(): + """ + Protocols encapsulate Job()s and other functionality that vary on + the nature of the Instrument used to create the raw data. All Instruments + are mixins for Workflow() classes and shouldn't define their own + initialization. + """ + protocol_type = PROTOCOL_NAME_NONE + + +class Illumina(Protocol): + protocol_type = PROTOCOL_NAME_ILLUMINA + + def convert_raw_to_fastq(self): + def get_config(command): + try: + return self.pipeline.get_software_configuration(command) + except PipelineError as e: + if str(e) != f"'{command}' is not defined in configuration": + # re-raise the Error if it's not the one we are expecting + # and can properly handle here. + raise PipelineError(e) + + # The choice to use either bcl2fastq or bcl-convert is set in the + # configuration file that matches the parameters of the sequencing + # run found in the user input file. The Pipeline object is smart + # enough to select the right configuration file based on the + # sample sheet passed to it. + + # However in this mixin, we don't know which configuration file we + # will get and thus we must check for the presence or absence of + # both dictionaries in the configuration file at run-time and make + # a determination based on that. + bcl2fastq_conf = get_config('bcl2fastq') + bclcnvrt_conf = get_config('bcl-convert') + + if bclcnvrt_conf is None and bcl2fastq_conf is None: + raise PipelineError("bcl-convert and bcl2fastq sections not " + "defined in configuation profile.") + + # if both are defined, we will use bcl-convert by default. + config = bcl2fastq_conf if bclcnvrt_conf is None else bclcnvrt_conf + + job = ConvertJob(self.pipeline.run_dir, + self.pipeline.output_path, + # for amplicon runs, get_sample_sheet_path() will + # return the path for a generated dummy sheet. + self.pipeline.get_sample_sheet_path(), + config['queue'], + config['nodes'], + config['nprocs'], + config['wallclock_time_in_minutes'], + config['per_process_memory_limit'], + config['executable_path'], + config['modules_to_load'], + self.master_qiita_job_id) + + self.raw_fastq_files_path = join(self.pipeline.output_path, + 'ConvertJob') + + if 'ConvertJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + # audit the results to determine which samples failed to convert + # properly. Append these to the failed-samples report and also + # return the list directly to the caller. + failed_samples = job.audit(self.pipeline.get_sample_ids()) + if hasattr(self, 'fsr'): + self.fsr.write(failed_samples, job.__class__.__name__) + + return failed_samples + + +class TellSeq(Protocol): + protocol_type = PROTOCOL_NAME_TELLSEQ + + def convert_raw_to_fastq(self): + config = self.pipeline.get_software_configuration('tell-seq') + + job = TellReadJob(self.pipeline.run_dir, + self.pipeline.output_path, + self.pipeline.input_file_path, + config['queue'], + config['nodes'], + config['wallclock_time_in_minutes'], + config['tellread_mem_limit'], + config['modules_to_load'], + self.master_qiita_job_id, + config['reference_base'], + config['reference_map'], + config['sing_script_path'], + config['tellread_cores']) + + self.raw_fastq_files_path = join(self.pipeline.output_path, + 'TellReadJob', 'Full') + self.my_sil_path = join(self.pipeline.output_path, + 'TellReadJob', + 'sample_index_list_TellReadJob.txt') + + # if TellReadJob already completed, then skip the over the time- + # consuming portion but populate the needed member variables. + if 'TellReadJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + self.pipeline.get_sample_ids() + failed_samples = [] + if hasattr(self, 'fsr'): + # NB 16S does not require a failed samples report and + # it is not performed by SPP. + self.fsr.write(failed_samples, job.__class__.__name__) + + return failed_samples + + def generate_sequence_counts(self): + config = self.pipeline.get_software_configuration('tell-seq') + + job = SeqCountsJob(self.pipeline.run_dir, + self.pipeline.output_path, + self.pipeline.input_file_path, + config['queue'], + config['nodes'], + config['wallclock_time_in_minutes'], + config['normcount_mem_limit'], + config['modules_to_load'], + self.master_qiita_job_id, + '', + config['integrate_script_path'], + self.pipeline.qiita_job_id) + + if 'SeqCountsJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + # audit the results to determine which samples failed to convert + # properly. Append these to the failed-samples report and also + # return the list directly to the caller. + failed_samples = job.audit_me(self.pipeline.get_sample_ids()) + if hasattr(self, 'fsr'): + # NB 16S does not require a failed samples report and + # it is not performed by SPP. + self.fsr.write(failed_samples, job.__class__.__name__) + + return failed_samples + + def integrate_results(self): + config = self.pipeline.get_software_configuration('tell-seq') + + # after the primary job and the optional counts job is completed, + # the job to integrate results and add metadata to the fastq files + # is performed. + + job = TRIntegrateJob(self.pipeline.run_dir, + self.pipeline.output_path, + self.pipeline.input_file_path, + config['queue'], + config['nodes'], + config['wallclock_time_in_minutes'], + config['integrate_mem_limit'], + config['modules_to_load'], + self.master_qiita_job_id, + "foo", + config['integrate_script_path'], + # NB: sample_index_list used may vary + # from project to project in the future. + # If so replace config entry with a user + # supplied entry or an entry in the sample + # sheet. + + # NB: the version of the sil needed is the one + # generated by TellReadJob(), not the master + # sil. The former will account for a set of + # barcode_ids that don't begin at C501 and/or + # skip over some values like C509. + self.my_sil_path, + self.raw_fastq_files_path, + "", + "", + config['integrate_cores']) + + if 'TRIntegrateJob' not in self.skip_steps: + job.run(callback=self.job_callback) + + # raw_fastq_files_path is used by downstream processes to know + # where to locate 'raw' fastq files. Before we could assume that + # it would always be in ConvertJob's working directory but now + # this is no longer the case. Currently used by NuQCJob. + self.raw_fastq_files_path = join(self.pipeline.output_path, + 'TRIntegrateJob', + 'integrated') + + if 'TRIJ_Post_Processing' in self.skip_steps: + # if 'post_processing_completed' is found in the same location, + # this means the steps below were already completed. + return + + # post-processing the results is a relatively trivial task in terms + # of time. It also relies on metadata stored in the job object. + # Hence, it is performed here. + mapping = self._generate_mapping() + + # rename the files and move them into project directories. + for root, dirs, files in walk(self.raw_fastq_files_path): + for _file in files: + fastq_file = join(root, _file) + self._post_process_file(fastq_file, + mapping, + self.lane_number) + + # audit the results to determine which samples failed to convert + # properly. Append these to the failed-samples report and also + # return the list directly to the caller. + failed_samples = job.audit_me(self.pipeline.get_sample_ids()) + + if hasattr(self, 'fsr'): + # NB 16S does not require a failed samples report and + # it is not performed by SPP. + self.fsr.write(failed_samples, job.__class__.__name__) + + return failed_samples + + def _generate_mapping(self): + # NB: This method should only be implemented for tellseq-related + # SequencingTech() objects where a barcode_id column can be expected + # to exist and a mapping is needed. + sheet = load_sample_sheet(self.pipeline.get_sample_sheet_path()) + + results = {} + + count = 1 + for sample in sheet.samples: + barcode_id = sample['barcode_id'] + results[barcode_id] = {'sample_name': sample['Sample_Name'], + 'sample_id': sample['Sample_ID'], + 'sample_index': count, + 'project_name': sample['Sample_Project']} + count += 1 + return results + + def _post_process_file(self, fastq_file, mapping, lane): + # generate names of the form generated by bcl-convert/bcl2fastq: + # _S#_L00#__001.fastq.gz + # see: + # https://help.basespace.illumina.com/files-used-by-basespace/ + # fastq-files + _dir, _file = split(fastq_file) + + # ex: integrated/C544.R2.fastq.gz + m = match(r"(C5\d\d)\.([R,I]\d)\.fastq.gz", _file) + + if m is None: + raise ValueError(f"The filename '{_file}' is not of a " + "recognizable form") + + barcode_id = m[1] + read_type = m[2] + + if barcode_id not in mapping: + raise ValueError(f"{barcode_id} is not present in sample-sheet") + + sample_id = mapping[barcode_id]['sample_id'] + project_name = mapping[barcode_id]['project_name'] + sample_index = mapping[barcode_id]['sample_index'] + + # generate the new filename for the fastq file, and reorganize the + # files by project. + new_name = "%s_S%d_%s_%s_001.fastq.gz" % (sample_id, + sample_index, + "L%s" % str(lane).zfill(3), + read_type) + + # ensure that the project directory exists before we rename and move + # the file to that location. + makedirs(join(_dir, project_name), exist_ok=True) + + # if there's an error renaming and moving the file, let it pass up to + # the user. + final_path = join(_dir, project_name, new_name) + rename(fastq_file, final_path) + + return final_path diff --git a/qp_klp/StandardAmpliconWorkflow.py b/qp_klp/StandardAmpliconWorkflow.py new file mode 100644 index 00000000..75768526 --- /dev/null +++ b/qp_klp/StandardAmpliconWorkflow.py @@ -0,0 +1,185 @@ +from .Protocol import Illumina +from os.path import join, abspath, exists +from os import walk +from shutil import rmtree +from sequence_processing_pipeline.Pipeline import Pipeline +from .Assays import Amplicon +from .Assays import ASSAY_NAME_AMPLICON +from .Workflows import Workflow + + +class StandardAmpliconWorkflow(Workflow, Amplicon, Illumina): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self.mandatory_attributes = ['qclient', 'uif_path', + 'lane_number', 'config_fp', + 'run_identifier', 'output_dir', 'job_id', + 'lane_number', 'is_restart'] + + self.confirm_mandatory_attributes() + + # second stage initializer that could conceivably be pushed down into + # specific children requiring specific parameters. + self.qclient = self.kwargs['qclient'] + + self.pipeline = Pipeline(self.kwargs['config_fp'], + self.kwargs['run_identifier'], + self.kwargs['uif_path'], + self.kwargs['output_dir'], + self.kwargs['job_id'], + ASSAY_NAME_AMPLICON, + # amplicon runs always use lane 1. + lane_number=1) + + # NB: Amplicon workflows don't have failed samples records because + # the fastq files are not demultiplexed. + + self.master_qiita_job_id = None + + self.lane_number = self.kwargs['lane_number'] + self.is_restart = bool(self.kwargs['is_restart']) + + if self.is_restart is True: + self.determine_steps_to_skip() + + # this is a convenience member to allow testing w/out updating Qiita. + self.update = True + + if 'update_qiita' in kwargs: + if not isinstance(kwargs['update_qiita'], bool): + raise ValueError("value for 'update_qiita' must be of " + "type bool") + + self.update = kwargs['update_qiita'] + + def determine_steps_to_skip(self): + out_dir = self.pipeline.output_path + + # Although amplicon runs don't perform host-filtering, + # the output from ConvertJob is still copied and organized into + # a form suitable for FastQCJob to process. Hence the presence or + # absence of a 'NuQCJob' directory is still a thing (for now) + directories_to_check = ['ConvertJob', 'NuQCJob', + 'FastQCJob', 'GenPrepFileJob'] + + for directory in directories_to_check: + if exists(join(out_dir, directory)): + if exists(join(out_dir, directory, 'job_completed')): + # this step completed successfully. + self.skip_steps.append(directory) + else: + # work stopped before this job could be completed. + rmtree(join(out_dir, directory)) + + def execute_pipeline(self): + ''' + Executes steps of pipeline in proper sequence. + :return: None + ''' + if not self.is_restart: + self.pre_check() + + # this is performed even in the event of a restart. + self.generate_special_map() + + # even if a job is being skipped, it's being skipped because it was + # determined that it already completed successfully. Hence, + # increment the status because we are still iterating through them. + + self.update_status("Converting data", 1, 9) + if "ConvertJob" not in self.skip_steps: + # converting raw data to fastq depends heavily on the instrument + # used to generate the run_directory. Hence this method is + # supplied by the instrument mixin. + self.convert_raw_to_fastq() + + self.update_status("Post-processing raw fasq output", 2, 9) + if "NuQCJob" not in self.skip_steps: + # there is no failed samples reporting for amplicon runs. + self.post_process_raw_fastq_output() + + self.update_status("Generating reports", 3, 9) + if "FastQCJob" not in self.skip_steps: + # reports are currently implemented by the assay mixin. This is + # only because metagenomic runs currently require a failed-samples + # report to be generated. This is not done for amplicon runs since + # demultiplexing occurs downstream of SPP. + self.generate_reports() + + self.update_status("Generating preps", 4, 9) + if "GenPrepFileJob" not in self.skip_steps: + # preps are currently associated with array mixin, but only + # because there are currently some slight differences in how + # FastQCJob gets instantiated(). This could get moved into a + # shared method, but probably still in Assay. + self.generate_prep_file() + + # moved final component of genprepfilejob outside of object. + # obtain the paths to the prep-files generated by GenPrepFileJob + # w/out having to recover full state. + tmp = join(self.pipeline.output_path, 'GenPrepFileJob', 'PrepFiles') + + self.has_replicates = False + + prep_paths = [] + self.prep_file_paths = {} + + for root, dirs, files in walk(tmp): + for _file in files: + # breakup the prep-info-file into segments + # (run-id, project_qid, other) and cleave + # the qiita-id from the project_name. + qid = _file.split('.')[1].split('_')[-1] + + if qid not in self.prep_file_paths: + self.prep_file_paths[qid] = [] + + _path = abspath(join(root, _file)) + if _path.endswith('.tsv'): + prep_paths.append(_path) + self.prep_file_paths[qid].append(_path) + + for _dir in dirs: + if _dir == '1': + # if PrepFiles contains the '1' directory, then it's a + # given that this sample-sheet contains replicates. + self.has_replicates = True + + # currently imported from Assay although it is a base method. it + # could be imported into Workflows potentially, since it is a post- + # processing step. All pairings of assay and instrument type need to + # generate prep-info files in the same format. + self.overwrite_prep_files(prep_paths) + + # for now, simply re-run any line below as if it was a new job, even + # for a restart. functionality is idempotent, except for the + # registration of new preps in Qiita. These will simply be removed + # manually. + + # post-processing steps are by default associated with the Workflow + # class, since they deal with fastq files and Qiita, and don't depend + # on assay or instrument type. + self.update_status("Generating sample information", 5, 9) + self.sifs = self.generate_sifs() + + # post-processing step. + self.update_status("Registering blanks in Qiita", 6, 9) + if self.update: + self.update_blanks_in_qiita() + + self.update_status("Loading preps into Qiita", 7, 9) + if self.update: + self.update_prep_templates() + + # before we load preps into Qiita we need to copy the fastq + # files n times for n preps and correct the file-paths each + # prep is pointing to. + self.load_preps_into_qiita() + + self.update_status("Generating packaging commands", 8, 9) + self.generate_commands() + + self.update_status("Packaging results", 9, 9) + if self.update: + self.execute_commands() diff --git a/qp_klp/StandardMetagenomicWorkflow.py b/qp_klp/StandardMetagenomicWorkflow.py new file mode 100644 index 00000000..e9d9b494 --- /dev/null +++ b/qp_klp/StandardMetagenomicWorkflow.py @@ -0,0 +1,183 @@ +from .Protocol import Illumina +from os.path import join, abspath, exists +from os import walk +from shutil import rmtree +from sequence_processing_pipeline.Pipeline import Pipeline +from .Assays import Metagenomic +from .Assays import ASSAY_NAME_METAGENOMIC +from .FailedSamplesRecord import FailedSamplesRecord +from .Workflows import Workflow + + +class StandardMetagenomicWorkflow(Workflow, Metagenomic, Illumina): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self.mandatory_attributes = ['qclient', 'uif_path', + 'lane_number', 'config_fp', + 'run_identifier', 'output_dir', 'job_id', + 'lane_number', 'is_restart'] + + self.confirm_mandatory_attributes() + + # second stage initializer that could conceivably be pushed down into + # specific children requiring specific parameters. + self.qclient = self.kwargs['qclient'] + + self.pipeline = Pipeline(self.kwargs['config_fp'], + self.kwargs['run_identifier'], + self.kwargs['uif_path'], + self.kwargs['output_dir'], + self.kwargs['job_id'], + ASSAY_NAME_METAGENOMIC, + lane_number=self.kwargs['lane_number']) + + self.fsr = FailedSamplesRecord(self.kwargs['output_dir'], + self.pipeline.sample_sheet.samples) + + self.master_qiita_job_id = None + + self.lane_number = self.kwargs['lane_number'] + self.is_restart = bool(self.kwargs['is_restart']) + + if self.is_restart is True: + self.determine_steps_to_skip() + + # this is a convenience member to allow testing w/out updating Qiita. + self.update = True + + if 'update_qiita' in kwargs: + if not isinstance(kwargs['update_qiita'], bool): + raise ValueError("value for 'update_qiita' must be of " + "type bool") + + self.update = kwargs['update_qiita'] + + def determine_steps_to_skip(self): + out_dir = self.pipeline.output_path + + directories_to_check = ['ConvertJob', 'NuQCJob', + 'FastQCJob', 'GenPrepFileJob'] + + for directory in directories_to_check: + if exists(join(out_dir, directory)): + if exists(join(out_dir, directory, 'job_completed')): + # this step completed successfully. + self.skip_steps.append(directory) + else: + # work stopped before this job could be completed. + rmtree(join(out_dir, directory)) + + def execute_pipeline(self): + ''' + Executes steps of pipeline in proper sequence. + :return: None + ''' + if not self.is_restart: + self.pre_check() + + # this is performed even in the event of a restart. + self.generate_special_map() + + # even if a job is being skipped, it's being skipped because it was + # determined that it already completed successfully. Hence, + # increment the status because we are still iterating through them. + + self.update_status("Converting data", 1, 9) + if "ConvertJob" not in self.skip_steps: + # converting raw data to fastq depends heavily on the instrument + # used to generate the run_directory. Hence this method is + # supplied by the instrument mixin. + # NB: convert_raw_to_fastq() now generates fsr on its own. + self.convert_raw_to_fastq() + + self.update_status("Performing quality control", 2, 9) + if "NuQCJob" not in self.skip_steps: + # quality_control generates its own fsr now + self.quality_control(self.pipeline) + + self.update_status("Generating reports", 3, 9) + if "FastQCJob" not in self.skip_steps: + # reports are currently implemented by the assay mixin. This is + # only because metagenomic runs currently require a failed-samples + # report to be generated. This is not done for amplicon runs since + # demultiplexing occurs downstream of SPP. + results = self.generate_reports() + self.fsr_write(results, 'FastQCJob') + + self.update_status("Generating preps", 4, 9) + if "GenPrepFileJob" not in self.skip_steps: + # preps are currently associated with array mixin, but only + # because there are currently some slight differences in how + # FastQCJob gets instantiated(). This could get moved into a + # shared method, but probably still in Assay. + self.generate_prep_file() + + # moved final component of genprepfilejob outside of object. + # obtain the paths to the prep-files generated by GenPrepFileJob + # w/out having to recover full state. + tmp = join(self.pipeline.output_path, 'GenPrepFileJob', 'PrepFiles') + + self.has_replicates = False + + prep_paths = [] + self.prep_file_paths = {} + + for root, dirs, files in walk(tmp): + for _file in files: + # breakup the prep-info-file into segments + # (run-id, project_qid, other) and cleave + # the qiita-id from the project_name. + qid = _file.split('.')[1].split('_')[-1] + + if qid not in self.prep_file_paths: + self.prep_file_paths[qid] = [] + + _path = abspath(join(root, _file)) + if _path.endswith('.tsv'): + prep_paths.append(_path) + self.prep_file_paths[qid].append(_path) + + for _dir in dirs: + if _dir == '1': + # if PrepFiles contains the '1' directory, then it's a + # given that this sample-sheet contains replicates. + self.has_replicates = True + + # currently imported from Assay although it is a base method. it + # could be imported into Workflows potentially, since it is a post- + # processing step. All pairings of assay and instrument type need to + # generate prep-info files in the same format. + self.overwrite_prep_files(prep_paths) + + # for now, simply re-run any line below as if it was a new job, even + # for a restart. functionality is idempotent, except for the + # registration of new preps in Qiita. These will simply be removed + # manually. + + # post-processing steps are by default associated with the Workflow + # class, since they deal with fastq files and Qiita, and don't depend + # on assay or instrument type. + self.update_status("Generating sample information", 5, 9) + self.sifs = self.generate_sifs() + + # post-processing step. + self.update_status("Registering blanks in Qiita", 6, 9) + if self.update: + self.update_blanks_in_qiita() + + self.update_status("Loading preps into Qiita", 7, 9) + if self.update: + self.update_prep_templates() + + # before we load preps into Qiita we need to copy the fastq + # files n times for n preps and correct the file-paths each + # prep is pointing to. + self.load_preps_into_qiita() + + self.update_status("Generating packaging commands", 8, 9) + self.generate_commands() + + self.update_status("Packaging results", 9, 9) + if self.update: + self.execute_commands() diff --git a/qp_klp/StandardMetatranscriptomicWorkflow.py b/qp_klp/StandardMetatranscriptomicWorkflow.py new file mode 100644 index 00000000..43c14c38 --- /dev/null +++ b/qp_klp/StandardMetatranscriptomicWorkflow.py @@ -0,0 +1,184 @@ +from .Protocol import Illumina +from os.path import join, abspath, exists +from os import walk +from shutil import rmtree +from sequence_processing_pipeline.Pipeline import Pipeline +from .Assays import Metatranscriptomic +from .Assays import ASSAY_NAME_METATRANSCRIPTOMIC +from .FailedSamplesRecord import FailedSamplesRecord +from .Workflows import Workflow + + +class StandardMetatranscriptomicWorkflow(Workflow, Metatranscriptomic, + Illumina): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self.mandatory_attributes = ['qclient', 'uif_path', + 'lane_number', 'config_fp', + 'run_identifier', 'output_dir', 'job_id', + 'lane_number', 'is_restart'] + + self.confirm_mandatory_attributes() + + # second stage initializer that could conceivably be pushed down into + # specific children requiring specific parameters. + self.qclient = self.kwargs['qclient'] + + self.pipeline = Pipeline(self.kwargs['config_fp'], + self.kwargs['run_identifier'], + self.kwargs['uif_path'], + self.kwargs['output_dir'], + self.kwargs['job_id'], + ASSAY_NAME_METATRANSCRIPTOMIC, + lane_number=self.kwargs['lane_number']) + + self.fsr = FailedSamplesRecord(self.kwargs['output_dir'], + self.pipeline.sample_sheet.samples) + + self.master_qiita_job_id = None + + self.lane_number = self.kwargs['lane_number'] + self.is_restart = bool(self.kwargs['is_restart']) + + if self.is_restart is True: + self.determine_steps_to_skip() + + # this is a convenience member to allow testing w/out updating Qiita. + self.update = True + + if 'update_qiita' in kwargs: + if not isinstance(kwargs['update_qiita'], bool): + raise ValueError("value for 'update_qiita' must be of " + "type bool") + + self.update = kwargs['update_qiita'] + + def determine_steps_to_skip(self): + out_dir = self.pipeline.output_path + + directories_to_check = ['ConvertJob', 'NuQCJob', + 'FastQCJob', 'GenPrepFileJob'] + + for directory in directories_to_check: + if exists(join(out_dir, directory)): + if exists(join(out_dir, directory, 'job_completed')): + # this step completed successfully. + self.skip_steps.append(directory) + else: + # work stopped before this job could be completed. + rmtree(join(out_dir, directory)) + + def execute_pipeline(self): + ''' + Executes steps of pipeline in proper sequence. + :return: None + ''' + if not self.is_restart: + self.pre_check() + + # this is performed even in the event of a restart. + self.generate_special_map() + + # even if a job is being skipped, it's being skipped because it was + # determined that it already completed successfully. Hence, + # increment the status because we are still iterating through them. + + self.update_status("Converting data", 1, 9) + if "ConvertJob" not in self.skip_steps: + # converting raw data to fastq depends heavily on the instrument + # used to generate the run_directory. Hence this method is + # supplied by the instrument mixin. + # NB: convert_raw_to_fastq() now generates fsr on its own + results = self.convert_raw_to_fastq() + + self.update_status("Performing quality control", 2, 9) + if "NuQCJob" not in self.skip_steps: + # NB: quality_control generates its own fsr + self.quality_control(self.pipeline) + + self.update_status("Generating reports", 3, 9) + if "FastQCJob" not in self.skip_steps: + # reports are currently implemented by the assay mixin. This is + # only because metaranscriptomic runs currently require a failed- + # samples report to be generated. This is not done for amplicon + # runs since demultiplexing occurs downstream of SPP. + results = self.generate_reports() + self.fsr_write(results, 'FastQCJob') + + self.update_status("Generating preps", 4, 9) + if "GenPrepFileJob" not in self.skip_steps: + # preps are currently associated with array mixin, but only + # because there are currently some slight differences in how + # FastQCJob gets instantiated(). This could get moved into a + # shared method, but probably still in Assay. + self.generate_prep_file() + + # moved final component of genprepfilejob outside of object. + # obtain the paths to the prep-files generated by GenPrepFileJob + # w/out having to recover full state. + tmp = join(self.pipeline.output_path, 'GenPrepFileJob', 'PrepFiles') + + self.has_replicates = False + + prep_paths = [] + self.prep_file_paths = {} + + for root, dirs, files in walk(tmp): + for _file in files: + # breakup the prep-info-file into segments + # (run-id, project_qid, other) and cleave + # the qiita-id from the project_name. + qid = _file.split('.')[1].split('_')[-1] + + if qid not in self.prep_file_paths: + self.prep_file_paths[qid] = [] + + _path = abspath(join(root, _file)) + if _path.endswith('.tsv'): + prep_paths.append(_path) + self.prep_file_paths[qid].append(_path) + + for _dir in dirs: + if _dir == '1': + # if PrepFiles contains the '1' directory, then it's a + # given that this sample-sheet contains replicates. + self.has_replicates = True + + # currently imported from Assay although it is a base method. it + # could be imported into Workflows potentially, since it is a post- + # processing step. All pairings of assay and instrument type need to + # generate prep-info files in the same format. + self.overwrite_prep_files(prep_paths) + + # for now, simply re-run any line below as if it was a new job, even + # for a restart. functionality is idempotent, except for the + # registration of new preps in Qiita. These will simply be removed + # manually. + + # post-processing steps are by default associated with the Workflow + # class, since they deal with fastq files and Qiita, and don't depend + # on assay or instrument type. + self.update_status("Generating sample information", 5, 9) + self.sifs = self.generate_sifs() + + # post-processing step. + self.update_status("Registering blanks in Qiita", 6, 9) + if self.update: + self.update_blanks_in_qiita() + + self.update_status("Loading preps into Qiita", 7, 9) + if self.update: + self.update_prep_templates() + + # before we load preps into Qiita we need to copy the fastq + # files n times for n preps and correct the file-paths each + # prep is pointing to. + self.load_preps_into_qiita() + + self.update_status("Generating packaging commands", 8, 9) + self.generate_commands() + + self.update_status("Packaging results", 9, 9) + if self.update: + self.execute_commands() diff --git a/qp_klp/Step.py b/qp_klp/Step.py deleted file mode 100644 index f5a0de4b..00000000 --- a/qp_klp/Step.py +++ /dev/null @@ -1,1099 +0,0 @@ -from collections import defaultdict -from json import dumps, load -from metapool import load_sample_sheet -from os import makedirs, walk, listdir -from os.path import join, exists, split, basename, dirname, abspath -from sequence_processing_pipeline.ConvertJob import ConvertJob -from sequence_processing_pipeline.FastQCJob import FastQCJob -from sequence_processing_pipeline.GenPrepFileJob import GenPrepFileJob -from sequence_processing_pipeline.PipelineError import PipelineError -from sequence_processing_pipeline.Pipeline import Pipeline -from sequence_processing_pipeline.NuQCJob import NuQCJob -from subprocess import Popen, PIPE -import pandas as pd -from glob import glob -from shutil import copyfile - - -class FailedSamplesRecord: - def __init__(self, output_dir, samples): - # because we want to write out the list of samples that failed after - # each Job is run, and we want to organize that output by project, we - # need to keep a running state of failed samples, and reuse the method - # to reorganize the running-results and write them out to disk. - self.output_path = join(output_dir, 'failed_samples.json') - self.report_path = join(output_dir, 'failed_samples.html') - - # create an initial dictionary with sample-ids as keys and their - # associated project-name and status as values. Afterwards, we'll - # filter out the sample-ids w/no status (meaning they were - # successfully processed) before writing the failed entries out to - # file. - self.sample_state = {x.Sample_ID: None for x in samples} - self.project_map = {x.Sample_ID: x.Sample_Project for x in samples} - - def dump(self): - output = {'sample_state': self.sample_state, - 'project_map': self.project_map} - - with open(self.output_path, 'w') as f: - f.write(dumps(output, indent=2, sort_keys=True)) - - def load(self): - # if recorded state exists, overwrite initial state. - if exists(self.output_path): - with open(self.output_path, 'r') as f: - state = load(f) - - self.sample_state = state['sample_state'] - self.project_map = state['project_map'] - - def update(self, failed_ids, job_name): - # as a rule, if a failed_id were to appear in more than one - # audit(), preserve the earliest failure, rather than the - # latest one. - for failed_id in failed_ids: - if self.sample_state[failed_id] is None: - self.sample_state[failed_id] = job_name - - def write(self, failed_ids, job_name): - # a convenience method to support legacy behavior. - # specifically, reload recorded state, if it exists. - # then update state before recording to file. - self.load() - self.update(failed_ids, job_name) - self.dump() - - def generate_report(self): - # filter out the sample-ids w/out a failure status - filtered_fails = {x: self.sample_state[x] for x in self.sample_state if - self.sample_state[x] is not None} - - data = [] - for sample_id in filtered_fails: - data.append({'Project': filtered_fails[sample_id], - 'Sample ID': sample_id, - 'Failed at': self.project_map[sample_id] - }) - df = pd.DataFrame(data) - - with open(self.report_path, 'w') as f: - f.write(df.to_html(border=2, index=False, justify="left", - render_links=True, escape=False)) - - -class Step: - ''' - The base Step class wraps the creation and running of the Job classes - that are common to both Amplicon and Metagenomic Pipeline. Functionality - specific to one pipeline or the other is handled in the appropriate - subclass and makes calls to this base class as needed. In this way the - codebase is kept DRY. - ''' - - AMPLICON_TYPE = 'Amplicon' - METAGENOMIC_TYPE = 'Metagenomic' - METATRANSCRIPTOMIC_TYPE = 'Metatranscriptomic' - META_TYPES = {METAGENOMIC_TYPE, METATRANSCRIPTOMIC_TYPE} - ALL_TYPES = META_TYPES.union(AMPLICON_TYPE) - AMPLICON_SUB_TYPES = {'16S', '18S', 'ITS'} - - def __init__(self, pipeline, master_qiita_job_id, - status_update_callback=None, - lane_number=None, is_restart=False): - if pipeline is None: - raise ValueError("A pipeline object is needed to initialize Step") - - if master_qiita_job_id is None: - raise ValueError("A Qiita job-id is needed to initialize Step") - - self.pipeline = pipeline - self.lane_number = lane_number - self.generated_artifact_name = \ - f'{self.pipeline.run_id}_{self.lane_number}' - self.master_qiita_job_id = master_qiita_job_id - - self.is_restart = is_restart - - if status_update_callback is not None: - self.update_callback = status_update_callback.update_job_status - else: - self.update_callback = None - - # for now, hardcode this at the legacy value, since we've never - # changed it. - self.job_pool_size = 30 - - # initialize other member variables so that they're always present, - # even when the step that populates them hasn't been run yet. - self.project_names = None - self.cmds = None - self.cmds_log_path = None - # set by child classes for use in parent class - self.prep_file_paths = None - # set by child classes for use in parent class - self.has_replicates = None - self.sifs = None - self.tube_id_map = None - self.samples_in_qiita = None - self.output_path = None - self.sample_state = None - self.special_map = None - self.touched_studies_prep_info = None - self.run_prefixes = {} - self.prep_copy_index = 0 - - @classmethod - def generate_pipeline(cls, pipeline_type, input_file_path, lane_number, - config_fp, - run_identifier, out_dir, job_id): - if pipeline_type in Step.META_TYPES: - cls.update_sample_sheet(input_file_path, lane_number) - return Pipeline(config_fp, run_identifier, input_file_path, None, - out_dir, job_id, pipeline_type) - elif pipeline_type == Step.AMPLICON_TYPE: - return Pipeline(config_fp, run_identifier, None, input_file_path, - out_dir, job_id, pipeline_type) - else: - raise PipelineError( - f"'{pipeline_type}' is not a valid Pipeline type.") - - @classmethod - def update_sample_sheet(cls, sample_sheet_path, lane_number): - # use KLSampleSheet functionality to add/overwrite lane number. - sheet = load_sample_sheet(sample_sheet_path) - for sample in sheet: - sample['Lane'] = f'{lane_number}' - - with open(sample_sheet_path, 'w') as f: - sheet.write(f) - - @classmethod - def parse_prep_file(cls, prep_file_path, convert_to_dict=True): - metadata = pd.read_csv(prep_file_path, - dtype=str, - delimiter='\t', - # forces Pandas to not make the first column - # the index even when the values appear numeric. - index_col=False) - - if metadata is None: - raise ValueError(f"{prep_file_path} does not exist.") - - metadata.set_index('sample_name', inplace=True) - - if convert_to_dict: - return metadata.to_dict('index') - else: - return metadata - - def generate_artifact_name(self, prep_file_path): - a_name = f'{self.pipeline.run_id}_{self.lane_number}' - repl_num = basename(dirname(prep_file_path)) - - if self.has_replicates is True: - # this is a replicate sheet file. - # append a replication number to each name to - # make it unique from other replicates. - # return ('%s_r%s' % (a_name, result[1]), True) - return ('%s_r%s' % (a_name, repl_num), True) - else: - # this is a normal pre-prep or sample-sheet. - return (a_name, False) - - def generate_special_map(self, qclient): - # this function should be able to be tested by passing in simulated = - # results from qclient. - - # trimmed files are stored by qiita_id. Find the qiita_id - # associated with each project and ensure a subdirectory exists - # for when it comes time to move the trimmed files. - - special_map = [] - results = qclient.get("/qiita_db/artifacts/types/") - projects = self.pipeline.get_project_info() - for project in projects: - upload_path = join(results['uploads'], project['qiita_id']) - makedirs(upload_path, exist_ok=True) - special_map.append((project['project_name'], upload_path, - project['qiita_id'])) - - self.special_map = special_map - - def get_data_type(self, prep_file_path): - raise ValueError("get_data_type() not implemented for base-class.") - - def update_prep_templates(self, qclient): - ''' - Update prep-template info in Qiita. Get dict of prep-ids by study-id. - :param qclient: - :return: A dict of lists of prep-ids, keyed by study-id. - ''' - results = defaultdict(list) - - for study_id in self.prep_file_paths: - for prep_fp in self.prep_file_paths[study_id]: - metadata = Step.parse_prep_file(prep_fp) - afact_name, is_repl = self.generate_artifact_name(prep_fp) - data = {'prep_info': dumps(metadata), - 'study': study_id, - 'data_type': None, - 'job-id': self.master_qiita_job_id, - 'name': afact_name} - if self.pipeline.pipeline_type in Step.META_TYPES: - data['data_type'] = self.pipeline.pipeline_type - elif self.pipeline.pipeline_type == Step.AMPLICON_TYPE: - if 'target_gene' in metadata[list(metadata.keys())[0]]: - tg = metadata[list(metadata.keys())[0]]['target_gene'] - for key in Step.AMPLICON_SUB_TYPES: - if key in tg: - data['data_type'] = key - - if data['data_type'] is None: - raise ValueError("data_type could not be " - "determined from target_gene " - "column") - else: - raise ValueError("target_gene must be specified for " - "amplicon type") - else: - raise ValueError(f"'{self.pipeline.pipeline_type}' is not " - " a valid pipeline type") - - reply = qclient.post('/qiita_db/prep_template/', data=data) - prep_id = reply['prep'] - results[study_id].append((prep_id, afact_name, is_repl)) - self.run_prefixes[prep_id] = [metadata[sample]['run_prefix'] - for sample in metadata] - - self.touched_studies_prep_info = results - return results - - @classmethod - def get_samples_in_qiita(cls, qclient, qiita_id): - ''' - Obtain lists for sample-names and tube-ids registered in Qiita. - :param qclient: QiitaClient object - :param qiita_id: Qiita ID for the project in question. - :return: a tuple of lists, one for sample-names, another for tube-ids. - ''' - samples = qclient.get(f'/api/v1/study/{qiita_id}/samples') - - # remove Qiita ID as a prefix from the sample-names. - samples = {x.replace(f'{qiita_id}.', '') for x in samples} - - # find out if tube-ids are registered in the study. - categories = qclient.get(f'/api/v1/study/{qiita_id}' - '/samples/info')['categories'] - - if 'tube_id' in categories: - tids = qclient.get(f'/api/v1/study/{qiita_id}/samples/' - 'categories=tube_id')['samples'] - else: - tids = None - - return (samples, tids) - - def _convert_bcl_to_fastq(self, config, input_file_path): - convert_job = ConvertJob(self.pipeline.run_dir, - self.pipeline.output_path, - input_file_path, - config['queue'], - config['nodes'], - config['nprocs'], - config['wallclock_time_in_minutes'], - config['per_process_memory_limit'], - config['executable_path'], - config['modules_to_load'], - self.master_qiita_job_id) - - convert_job.run(callback=self.update_callback) - - return convert_job - - def _quality_control(self, config, input_file_path): - nuqc_job = NuQCJob(join(self.pipeline.output_path, 'ConvertJob'), - self.pipeline.output_path, - input_file_path, - config['minimap2_databases'], - config['queue'], - config['nodes'], - config['wallclock_time_in_minutes'], - config['job_total_memory_limit'], - config['fastp_executable_path'], - config['minimap2_executable_path'], - config['samtools_executable_path'], - config['modules_to_load'], - self.master_qiita_job_id, - config['job_max_array_length'], - config['known_adapters_path'], - bucket_size=config['bucket_size'], - length_limit=config['length_limit'], - cores_per_task=config['cores_per_task'], - movi_path=config['movi_executable_path'], - gres_value=config['gres_value'], - pmls_path=config['pmls_path']) - - nuqc_job.run(callback=self.update_callback) - - return nuqc_job - - def _generate_reports(self): - config = self.pipeline.config_profile['profile']['configuration'] - is_amplicon = self.pipeline.pipeline_type == Step.AMPLICON_TYPE - fastqc_job = FastQCJob(self.pipeline.run_dir, - self.pipeline.output_path, - join(self.pipeline.output_path, 'ConvertJob'), - join(self.pipeline.output_path, 'NuQCJob'), - config['fastqc']['nprocs'], - config['fastqc']['nthreads'], - config['fastqc']['fastqc_executable_path'], - config['fastqc']['modules_to_load'], - self.master_qiita_job_id, - config['fastqc']['queue'], - config['fastqc']['nodes'], - config['fastqc']['wallclock_time_in_minutes'], - config['fastqc']['job_total_memory_limit'], - self.job_pool_size, - config['fastqc']['multiqc_config_file_path'], - config['fastqc']['job_max_array_length'], - is_amplicon) - - fastqc_job.run(callback=self.update_callback) - - return fastqc_job - - def _generate_prep_file(self, config, input_file_path, seqpro_path): - is_amplicon = self.pipeline.pipeline_type == Step.AMPLICON_TYPE - - gpf_job = GenPrepFileJob( - self.pipeline.run_dir, - join(self.pipeline.output_path, 'ConvertJob'), - join(self.pipeline.output_path, 'NuQCJob'), - self.pipeline.output_path, - input_file_path, - seqpro_path, - config['modules_to_load'], - self.master_qiita_job_id, - is_amplicon=is_amplicon) - - gpf_job.run(callback=self.update_callback) - - return gpf_job - - def _helper_process_fastp_report_dirs(self): - report_dirs = [] - - for root, dirs, files in walk(self.pipeline.output_path): - for dir_name in dirs: - if dir_name == 'fastp_reports_dir': - # generate the full path for this directory before - # truncating everything up to the NuQCJob directory. - full_path = join(root, dir_name).split('NuQCJob/') - report_dirs.append(join('NuQCJob', full_path[1])) - - if report_dirs: - report_dirs.sort() - return 'tar zcvf reports-NuQCJob.tgz ' + ' '.join(report_dirs) - else: - # It is okay to return an empty list of commands if reports_dirs - # is empty. Some pipelines do not generate fastp reports. - return [] - - def _helper_process_blanks(self): - results = [x for x in listdir(self.pipeline.output_path) if - x.endswith('_blanks.tsv')] - - results.sort() - - if len(results) > 0: - return 'tar zcvf sample-files.tgz' + ' ' + ' '.join(results) - - def _helper_process_operations(self): - RESULTS_DIR = 'final_results' - TAR_CMD = 'tar zcvf' - LOG_PREFIX = 'logs' - REPORT_PREFIX = 'reports' - PREP_PREFIX = 'prep-files' - CONVERT_JOB = 'ConvertJob' - QC_JOB = 'NuQCJob' - FASTQC_JOB = 'FastQCJob' - PREPFILE_JOB = 'GenPrepFileJob' - TAR_EXT = 'tgz' - - op_meta = [(['ConvertJob/logs'], TAR_CMD, - f'{LOG_PREFIX}-{CONVERT_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), - - (['ConvertJob/Reports', 'ConvertJob/logs'], TAR_CMD, - f'{REPORT_PREFIX}-{CONVERT_JOB}.{TAR_EXT}', - 'OUTPUT_FIRST'), - - (['NuQCJob/logs'], TAR_CMD, - f'{LOG_PREFIX}-{QC_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), - - (['FastQCJob/logs'], TAR_CMD, - f'{LOG_PREFIX}-{FASTQC_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), - - (['FastQCJob/fastqc'], TAR_CMD, - f'{REPORT_PREFIX}-{FASTQC_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), - - (['GenPrepFileJob/logs'], TAR_CMD, - f'{LOG_PREFIX}-{PREPFILE_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), - - (['GenPrepFileJob/PrepFiles'], TAR_CMD, - f'{PREP_PREFIX}.{TAR_EXT}', 'OUTPUT_FIRST'), - - (['failed_samples.html', 'touched_studies.html'], - 'mv', RESULTS_DIR, 'INPUTS_FIRST'), - - (['FastQCJob/multiqc'], 'mv', RESULTS_DIR, 'INPUTS_FIRST')] - - cmds = [] - - for inputs, action, output, order in op_meta: - confirmed_inputs = [] - for input in inputs: - if exists(join(self.pipeline.output_path, input)): - # it's expected that some inputs may not exist due to - # different pipeline types. If one or more inputs do not - # exist, do not include them in the command-line as they - # may cause an error. - confirmed_inputs.append(input) - - # do not add the command to the list unless at least one of - # the inputs exists. It's okay for a command to go unprocessed. - if confirmed_inputs: - # convert to string form before using. - confirmed_inputs = ' '.join(confirmed_inputs) - if order == 'OUTPUT_FIRST': - cmds.append(f'{action} {output} {confirmed_inputs}') - elif order == 'INPUTS_FIRST': - cmds.append(f'{action} {confirmed_inputs} {output}') - else: - raise ValueError(f"'{order}' is not a defined order of " - "operations") - - return cmds - - def generate_commands(self): - cmds = self._helper_process_operations() - - result = self._helper_process_fastp_report_dirs() - - if result: - cmds.append(result) - - result = self._helper_process_blanks() - - if result: - cmds.append(result) - - # if one or more tar-gzip files are found (which we expect there to - # be), move them into the 'final_results' directory. However, if none - # are present, don't raise an error. - cmds.append('(find *.tgz -maxdepth 1 -type f | xargs mv -t ' - 'final_results) || true') - - # prepend each command with a change-directory to the correct - # location. - cmds = [f'cd {self.pipeline.output_path}; {cmd}' for cmd in cmds] - - self.cmds = cmds - - self.write_commands_to_output_path() - - def _get_postqc_fastq_files(self, out_dir, project): - af = None - sub_folders = ['amplicon', 'filtered_sequences', 'trimmed_sequences'] - for sub_folder in sub_folders: - sf = f'{out_dir}/NuQCJob/{project}/{sub_folder}' - if exists(sf): - af = [f for f in glob(f'{sf}/*.fastq.gz')] - break - if af is None or not af: - raise PipelineError("NuQCJob output not in expected location") - - files = {'raw_barcodes': [], 'raw_forward_seqs': [], - 'raw_reverse_seqs': []} - - for fastq_file in af: - if '_I1_' in fastq_file or '_I2_' in fastq_file: - files['raw_barcodes'].append(fastq_file) - elif '_R1_' in fastq_file: - files['raw_forward_seqs'].append(fastq_file) - elif '_R2_' in fastq_file: - files['raw_reverse_seqs'].append(fastq_file) - else: - raise ValueError(f"Unrecognized file: {fastq_file}") - - files['raw_barcodes'].sort() - files['raw_forward_seqs'].sort() - files['raw_reverse_seqs'].sort() - - # Amplicon runs should contain raw_barcodes/I1 files. - # Meta*omics files doesn't use them. - if self.pipeline.pipeline_type != Step.AMPLICON_TYPE: - del (files['raw_barcodes']) - - # confirm expected lists of reads are not empty. - for f_type in files: - if not files[f_type]: - # if one or more of the expected list of reads is empty, - # raise an Error. - raise ValueError(f"'{f_type}' is empty") - - return files - - def _load_prep_into_qiita(self, qclient, prep_id, artifact_name, - qiita_id, project, fastq_files, atype): - surl = f'{qclient._server_url}/study/description/{qiita_id}' - prep_url = (f'{qclient._server_url}/study/description/' - f'{qiita_id}?prep_id={prep_id}') - - # ideally we would use the email of the user that started the SPP - # run but at this point there is no easy way to retrieve it - pdata = {'user_email': 'qiita.help@gmail.com', - 'prep_id': prep_id, - 'artifact_type': atype, - 'command_artifact_name': artifact_name, - 'add_default_workflow': True, - 'files': dumps(fastq_files)} - - job_id = qclient.post('/qiita_db/artifact/', data=pdata)['job_id'] - - return {'Project': project, 'Qiita Study ID': qiita_id, - 'Qiita Prep ID': prep_id, 'Qiita URL': surl, - 'Artifact Name': artifact_name, - 'Prep URL': prep_url, 'Linking JobID': job_id} - - def _copy_files(self, files): - # increment the prep_copy_index before generating a new set of copies. - self.prep_copy_index += 1 - new_files = {} - for key in files: - new_files[key] = [] - for some_path in files[key]: - path_name, file_name = split(some_path) - path_name = join(path_name, f'copy{self.prep_copy_index}') - makedirs(path_name, exist_ok=True) - new_files[key].append(join(path_name, file_name)) - - for key in files: - for src, dst in zip(files[key], new_files[key]): - copyfile(src, dst) - return new_files - - def load_preps_into_qiita(self, qclient): - atype = 'per_sample_FASTQ' - if self.pipeline.pipeline_type == Step.AMPLICON_TYPE: - atype = 'FASTQ' - - data = [] - for project, _, qiita_id in self.special_map: - fastq_files = self._get_postqc_fastq_files( - self.pipeline.output_path, project) - - for vals in self.touched_studies_prep_info[qiita_id]: - prep_id, artifact_name, is_repl = vals - if self.pipeline.pipeline_type == Step.AMPLICON_TYPE: - if is_repl: - # for Amplicon runs, each prep needs a copy of the - # entire set of fastq files, because demuxing samples - # happens downstream. If we don't make copies of the - # files, Qiita will move the files when loading the - # first prep and they won't be available for the - # second prep and after. - # Note that this will leave the original files present - # in the working directory after processing instead of - # being moved. - working_set = self._copy_files(fastq_files) - else: - working_set = fastq_files - else: - # for meta*omics, generate the subset of files used by - # this prep only. - working_set = {} - for key in fastq_files: - working_set[key] = [] - for run_prefix in self.run_prefixes[prep_id]: - working_set[key] += [fastq for fastq in - fastq_files[key] if - run_prefix in fastq] - - if is_repl: - working_set = self._copy_files(working_set) - - data.append(self._load_prep_into_qiita( - qclient, prep_id, artifact_name, qiita_id, project, - working_set, atype)) - - df = pd.DataFrame(data) - opath = join(self.pipeline.output_path, 'touched_studies.html') - with open(opath, 'w') as f: - f.write(df.to_html(border=2, index=False, justify="left", - render_links=True, escape=False)) - - return df - - def write_commands_to_output_path(self): - self.cmds_log_path = join(self.pipeline.output_path, 'cmds.log') - with open(self.cmds_log_path, 'w') as f: - for cmd in self.cmds: - f.write(f'{cmd}\n') - - def execute_commands(self): - # execute the list of commands in order - for cmd in self.cmds: - p = Popen(cmd, universal_newlines=True, shell=True, - stdout=PIPE, stderr=PIPE) - std_out, std_err = p.communicate() - return_code = p.returncode - - if return_code != 0: - # during testing, ignore processes that fail and continue - # to test other commands. - raise PipelineError(f"'{cmd}' returned {return_code}") - - def generate_sifs(self, qclient): - from_qiita = {} - - for study_id in self.prep_file_paths: - samples = list(qclient.get(f'/api/v1/study/{study_id}/samples')) - from_qiita[study_id] = samples - - add_sif_info = [] - - qid_pn_map = {proj['qiita_id']: proj['project_name'] for - proj in self.pipeline.get_project_info()} - - # in case we really do need to query for samples again: - # assume set of valid study_ids can be determined from prep_file_paths. - for study_id in from_qiita: - samples = from_qiita[study_id] - # generate a list of (sample-name, project-name) pairs. - project_name = qid_pn_map[study_id] - samples = [(x, project_name) for x in samples] - add_sif_info.append(pd.DataFrame(data=samples, - columns=['sample_name', - 'project_name'])) - - # convert the list of dataframes into a single dataframe. - add_sif_info = pd.concat(add_sif_info, - ignore_index=True).drop_duplicates() - - # generate SIF files with add_sif_info as additional metadata input. - # duplicate sample-names and non-blanks will be handled properly. - self.sifs = self.pipeline.generate_sample_info_files(add_sif_info) - - return self.sifs - - def get_prep_file_paths(self): - return self.prep_file_paths - - def _get_tube_ids_from_qiita(self, qclient): - # Update get_project_info() so that it can return a list of - # samples in projects['samples']. Include blanks in projects['blanks'] - # just in case there are duplicate qiita_ids - qiita_ids = [proj['qiita_id'] for proj in - self.pipeline.get_project_info(short_names=True)] - - tids_by_qiita_id = {} - sample_names_by_qiita_id = {} - - for qiita_id in qiita_ids: - # Qiita returns a set of sample-ids in qsam and a dictionary where - # sample-names are used as keys and tube-ids are their values. - qsam, tids = self.get_samples_in_qiita(qclient, qiita_id) - - sample_names_by_qiita_id[str(qiita_id)] = qsam - - if tids is not None: - # fix values in tids to be a string instead of a list of one. - # also, remove the qiita_id prepending each sample-name. - tids = {k.replace(f'{qiita_id}.', ''): tids[k][0] for k in - tids} - - # the values Qiita returns for tids seems like it can include - # empty strings if there is no tube-id associated with a - # sample-name. For now assume it doesn't happen in production - # and if prep-files have empty sample-names we'll know. - tids_by_qiita_id[str(qiita_id)] = tids - - # use empty dict {} as an indication that get_tube_ids_from_qiita was - # called but no tube-ids were found for any project. - # to clarify, self.tube_id_map maps sample-names to tube-ids. - self.tube_id_map = tids_by_qiita_id - # should samples_in_qiita be none if tube_id_map is not? - self.samples_in_qiita = sample_names_by_qiita_id - - def _compare_samples_against_qiita(self, qclient): - projects = self.pipeline.get_project_info(short_names=True) - - results = [] - for project in projects: - msgs = [] - self._get_tube_ids_from_qiita(qclient) - p_name = project['project_name'] - qiita_id = str(project['qiita_id']) - contains_replicates = project['contains_replicates'] - - # get list of samples as presented by the sample-sheet or mapping - # file and confirm that they are all registered in Qiita. - if contains_replicates: - # don't match against sample-names with a trailing well-id - # if project contains replicates. - msgs.append("This sample-sheet contains replicates. sample-" - "names will be sourced from orig_name column.") - samples = set(self.pipeline.get_orig_names_from_sheet(p_name)) - else: - samples = set(self.pipeline.get_sample_names(p_name)) - - # do not include BLANKs. If they are unregistered, we will add - # them downstream. - samples = {smpl for smpl in samples - if not smpl.startswith('BLANK')} - - msgs.append(f"The total number of samples found in {p_name} that " - f"aren't BLANK is: {len(samples)}") - - results_sn = self._process_sample_names(p_name, qiita_id, - samples) - - msgs.append("Number of values in sheet that aren't sample-names in" - " Qiita: %s" % len(results_sn[0])) - - use_tids = False - - if len(results_sn[0]) == 0: - msgs.append(f"All values in sheet matched sample-names " - f"registered with {p_name}") - else: - # not all values were matched to sample-names. - # check for possible match w/tube-ids, if defined in project. - results_tid = self._process_tube_ids(p_name, qiita_id, - samples) - if results_tid: - msgs.append("Number of values in sheet that aren't " - "tube-ids in Qiita: %s" % len(results_tid[0])) - - if len(results_tid[0]) == 0: - # all values were matched to tube-ids. - use_tids = True - msgs.append(f"All values in sheet matched tube-ids " - f"registered with {p_name}") - else: - # we have sample-names and tube-ids and neither is - # a perfect match. - if len(results_tid[0]) < len(results_sn[0]): - # more tube-ids matched than sample-names. - use_tids = True - msgs.append(f"More values in sheet matched tube-" - f"ids than sample-names with {p_name}") - elif len(results_tid[0]) == len(results_sn[0]): - msgs.append("Sample-names and tube-ids were " - "equally non-represented in the " - "sample-sheet") - else: - msgs.append(f"More values in sheet matched sample-" - f"names than tube-ids with {p_name}") - else: - msgs.append("there are no tube-ids registered with " - f"{p_name}") - - if use_tids: - not_in_qiita = results_tid[0] - examples = results_tid[1] - total_in_qiita = results_tid[2] - else: - not_in_qiita = results_sn[0] - examples = results_sn[1] - total_in_qiita = results_sn[2] - - # return an entry for all projects, even when samples_not_in_qiita - # is an empty list, as the information is still valuable. - results.append({'samples_not_in_qiita': not_in_qiita, - 'examples_in_qiita': examples, - 'project_name': p_name, - 'total_in_qiita': total_in_qiita, - 'used_tids': use_tids, - 'messages': msgs}) - - return results - - def _process_sample_names(self, project_name, qiita_id, samples): - not_in_qiita = samples - set(self.samples_in_qiita[qiita_id]) - examples = list(samples)[:5] - - # convert to strings before returning - examples = [str(example) for example in examples] - - number_in_project = len(set(self.samples_in_qiita[qiita_id])) - - return not_in_qiita, examples, number_in_project - - def _process_tube_ids(self, project_name, qiita_id, samples): - if qiita_id in self.tube_id_map: - tids = [self.tube_id_map[qiita_id][sample] for sample in - self.tube_id_map[qiita_id]] - - not_in_qiita = samples - set(tids) - - if not_in_qiita: - # strip any leading zeroes from the sample-ids. Note that - # if a sample-id has more than one leading zero, all of - # them will be removed. - not_in_qiita = set([x.lstrip('0') for x in samples]) - \ - set(tids) - - # convert examples to strings before returning - examples = [str(example) for example in tids[:5]] - - number_in_project = len(set(tids)) - - return not_in_qiita, examples, number_in_project - - # return None otherwise - - @classmethod - def _replace_tube_ids_w_sample_names(cls, prep_file_path, tube_id_map): - # reversed_map maps tube-ids to sample-names - reversed_map = {tube_id_map[k]: k for k in tube_id_map} - - # passing tube_id_map as a parameter allows for easier testing. - df = pd.read_csv(prep_file_path, sep='\t', dtype=str, index_col=False) - # save copy of sample_name column as 'old_sample_name' - df['old_sample_name'] = df['sample_name'] - for i in df.index: - sample_name = df.at[i, "sample_name"] - # blanks do not get their names swapped. - if sample_name.startswith('BLANK'): - continue - - # remove leading zeroes if they exist to match Qiita results. - sample_name = sample_name.lstrip('0') - - if sample_name in reversed_map: - df.at[i, "sample_name"] = reversed_map[sample_name] - - df.to_csv(prep_file_path, index=False, sep="\t") - - def _overwrite_prep_files(self, prep_file_paths): - # replace tube-ids in prep-info files w/sample-names. - if self.tube_id_map is None: - raise ValueError("get_tube_ids_from_qiita() was not called") - - projects = self.pipeline.get_project_info(short_names=True) - - for project in projects: - project_name = project['project_name'] - qiita_id = str(project['qiita_id']) - - if qiita_id not in self.tube_id_map: - continue - - # prep files are named in the form: - # 20220423_FS10001773_12_BRB11603-0615.Matrix_Tube_LBM_14332.1.tsv - fqp_name = "%s_%s" % (project_name, qiita_id) - matching_files = [prep_file for prep_file in prep_file_paths if - fqp_name in prep_file] - - if len(matching_files) == 0: - continue - - for matching_file in matching_files: - Step._replace_tube_ids_w_sample_names(matching_file, - self.tube_id_map[ - qiita_id]) - - def update_blanks_in_qiita(self, qclient): - for sif_path in self.sifs: - # get study_id from sif_file_name ...something_14385_blanks.tsv - study_id = sif_path.split('_')[-2] - - df = pd.read_csv(sif_path, delimiter='\t', dtype=str) - - # Prepend study_id to make them compatible w/list from Qiita. - df['sample_name'] = f'{study_id}.' + df['sample_name'].astype(str) - - # SIFs only contain BLANKs. Get the list of potentially new BLANKs. - blank_ids = [i for i in df['sample_name'] if 'blank' in i.lower()] - blanks = df[df['sample_name'].isin(blank_ids)]['sample_name'] - if len(blanks) == 0: - # we have nothing to do so let's return early - return - - # Get list of BLANKs already registered in Qiita. - from_qiita = qclient.get(f'/api/v1/study/{study_id}/samples') - from_qiita = [x for x in from_qiita if - x.startswith(f'{study_id}.BLANK')] - - # Generate list of BLANKs that need to be ADDED to Qiita. - new_blanks = (set(blanks) | set(from_qiita)) - set(from_qiita) - - if len(new_blanks): - # Generate dummy entries for each new BLANK, if any. - categories = qclient.get(f'/api/v1/study/{study_id}/samples/' - 'info')['categories'] - - # initialize payload w/required dummy categories - data = {i: {c: 'control sample' for c in categories} for i in - new_blanks} - - # populate payload w/additional columns and/or overwrite - # existing columns w/metadata from SIF file. - sif_data = df.set_index('sample_name').T.to_dict() - for new_blank in new_blanks: - for column in sif_data[new_blank]: - data[new_blank][column] = sif_data[new_blank][column] - - # http_patch will raise Error if insert failed. - qclient.http_patch(f'/api/v1/study/{study_id}/samples', - data=dumps(data)) - - def _project_metadata_check(self, qclient): - # Let Pipeline() retrieve the needed qiita study ids from the user - # input while this plugin queries for the existing set of column - # names in each project's sample metadata. We'll let Pipeline() - # decide (using its metapool dependency) which column names are - # reserved. - qiita_ids = [x['qiita_id'] for x in self.pipeline.get_project_info()] - - results = [] - - for qiita_id in qiita_ids: - categories = qclient.get(f"/api/v1/study/{qiita_id}/samples/info")[ - "categories"] - - res = self.pipeline.identify_reserved_words(categories) - - # if any reserved words were identified, generate an appropriate - # error message for it and add it to the list of error messages - # to return to the user. - res = [f"'{x}' exists in Qiita study {qiita_id}'s sample metadata" - for x in res] - - results += res - - if results: - # return any error messages generated across all the projects. - raise PipelineError("\n".join(results)) - - def precheck(self, qclient): - # since one of the objectives of SPP is to generate prep-info files - # and automatically load them into Qiita, confirm that all studies - # mentioned in the sample-sheet/pre-prep do not contain sample - # metadata that would cause an error in the pipeline after processing - # has already completed but the results have not yet been loaded. - self._project_metadata_check(qclient) - - # compare sample-ids/tube-ids in sample-sheet/mapping file - # against what's in Qiita. Results are a list of dictionaries, one - # per project. - results = self._compare_samples_against_qiita(qclient) - - # obtain a list of non-zero counts of samples missing in Qiita, one - # for each project. The names of the projects are unimportant. We - # want to abort early if any project in the sample-sheet/pre-prep file - # contains samples that aren't registered in Qiita. - tmp = [len(project['samples_not_in_qiita']) for project in results] - missing_counts = [count for count in tmp if count != 0] - - if missing_counts: - msgs = [] - for result in results: - msgs += result['messages'] - - if msgs: - raise PipelineError('\n'.join(msgs)) - - def execute_pipeline(self, qclient, increment_status, update=True, - skip_steps=[]): - ''' - Executes steps of pipeline in proper sequence. - :param qclient: Qiita client library or equivalent. - :param increment_status: callback function to increment status. - :param update: Set False to prevent updates to Qiita. - :return: None - ''' - # this is performed even in the event of a restart. - self.generate_special_map(qclient) - - # even if a job is being skipped, it's being skipped because it was - # determined that it already completed successfully. Hence, - # increment the status because we are still iterating through them. - - increment_status() - if "ConvertJob" not in skip_steps: - self.convert_bcl_to_fastq() - - increment_status() - if "NuQCJob" not in skip_steps: - self.quality_control() - - increment_status() - if "FastQCJob" not in skip_steps: - self.generate_reports() - - increment_status() - if "GenPrepFileJob" not in skip_steps: - self.generate_prep_file() - - # moved final component of genprepfilejob outside of object. - # obtain the paths to the prep-files generated by GenPrepFileJob - # w/out having to recover full state. - tmp = join(self.pipeline.output_path, 'GenPrepFileJob', 'PrepFiles') - - self.has_replicates = False - - prep_paths = [] - self.prep_file_paths = {} - - for root, dirs, files in walk(tmp): - for _file in files: - # breakup the prep-info-file into segments - # (run-id, project_qid, other) and cleave - # the qiita-id from the project_name. - qid = _file.split('.')[1].split('_')[-1] - - if qid not in self.prep_file_paths: - self.prep_file_paths[qid] = [] - - _path = abspath(join(root, _file)) - if _path.endswith('.tsv'): - prep_paths.append(_path) - self.prep_file_paths[qid].append(_path) - - for _dir in dirs: - if _dir == '1': - # if PrepFiles contains the '1' directory, then it's a - # given that this sample-sheet contains replicates. - self.has_replicates = True - - self._overwrite_prep_files(prep_paths) - - # for now, simply re-run any line below as if it was a new job, even - # for a restart. functionality is idempotent, except for the - # registration of new preps in Qiita. These will simply be removed - # manually. - increment_status() - self.sifs = self.generate_sifs(qclient) - - increment_status() # increment status regardless of update - if update: - self.update_blanks_in_qiita(qclient) - - increment_status() # status encompasses multiple operations - if update: - self.update_prep_templates(qclient) - - # before we load preps into Qiita we need to copy the fastq - # files n times for n preps and correct the file-paths each - # prep is pointing to. - self.load_preps_into_qiita(qclient) - - increment_status() - self.generate_commands() - - increment_status() - if update: - self.execute_commands() diff --git a/qp_klp/TellseqMetagenomicWorkflow.py b/qp_klp/TellseqMetagenomicWorkflow.py new file mode 100644 index 00000000..72bc1006 --- /dev/null +++ b/qp_klp/TellseqMetagenomicWorkflow.py @@ -0,0 +1,181 @@ +from .Protocol import TellSeq +from os.path import join, abspath, exists +from os import walk +from sequence_processing_pipeline.Pipeline import Pipeline, InstrumentUtils +from .Assays import Metagenomic +from .Assays import ASSAY_NAME_METAGENOMIC +from .Workflows import Workflow +from .FailedSamplesRecord import FailedSamplesRecord +from collections import defaultdict + + +class TellSeqMetagenomicWorkflow(Workflow, Metagenomic, TellSeq): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + self.mandatory_attributes = ['qclient', 'uif_path', 'config_fp', + 'run_identifier', 'output_dir', 'job_id', + 'is_restart'] + + self.confirm_mandatory_attributes() + + # second stage initializer that could conceivably be pushed down into + # specific children requiring specific parameters. + self.qclient = self.kwargs['qclient'] + + run_id = self.kwargs['run_identifier'] + + self.pipeline = Pipeline(self.kwargs['config_fp'], + run_id, + self.kwargs['uif_path'], + self.kwargs['output_dir'], + self.kwargs['job_id'], + ASSAY_NAME_METAGENOMIC, + lane_number=self.kwargs['lane_number']) + + self.fsr = FailedSamplesRecord(self.kwargs['output_dir'], + self.pipeline.sample_sheet.samples) + + # given run_id, Pipeline should have found the appropriate run_dir. + type = InstrumentUtils.get_instrument_type(self.pipeline.run_dir) + + self.iseq_run = True if type == 'iSeq' else False + + self.master_qiita_job_id = None + + self.lane_number = self.kwargs['lane_number'] + self.is_restart = bool(self.kwargs['is_restart']) + + if self.is_restart is True: + self.determine_steps_to_skip() + + self.update = True + + if 'update_qiita' in kwargs: + if not isinstance(kwargs['update_qiita'], bool): + raise ValueError("value for 'update_qiita' must be of " + "type bool") + + self.update = kwargs['update_qiita'] + + def determine_steps_to_skip(self): + out_dir = self.pipeline.output_path + + directories_to_check = ['TellReadJob', 'TRIntegrateJob', 'NuQCJob', + 'FastQCJob', 'GenPrepFileJob'] + + for directory in directories_to_check: + if exists(join(out_dir, directory)): + if exists(join(out_dir, directory, 'job_completed')): + # this step completed successfully. + self.skip_steps.append(directory) + if exists(join(out_dir, directory, + 'post_processing_completed')): + self.skip_steps.append('TRIJ_Post_Processing') + else: + # work stopped before this job could be completed. + msg = "%s doesn't have job completed" % join(out_dir, + directory) + raise ValueError(msg) + + def execute_pipeline(self): + ''' + Executes steps of pipeline in proper sequence. + :return: None + ''' + + # perform some (re)initialization steps on (re)startup. + self.pre_check() + + # this is performed even in the event of a restart. + self.generate_special_map() + + # even if a job is being skipped, it's being skipped because it was + # determined that it already completed successfully. Hence, + # increment the status because we are still iterating through them. + + self.update_status("Converting data", 1, 9) + + # convert_raw_to_fastq() now performs its own checking of skip_steps. + # convert_raw_to_fastq() now performs its own write to fsr reports. + # This means fsr reports will be accurate even on restarts. + self.convert_raw_to_fastq() + + self.generate_sequence_counts() + + self.integrate_results() + + self.update_status("Performing quality control", 2, 9) + self.quality_control() + + self.update_status("Generating reports", 3, 9) + self.generate_reports() + + self.update_status("Generating preps", 4, 9) + self.generate_prep_file() + + # moved final component of genprepfilejob outside of object. + # obtain the paths to the prep-files generated by GenPrepFileJob + # w/out having to recover full state. + tmp = join(self.pipeline.output_path, 'GenPrepFileJob', 'PrepFiles') + + self.has_replicates = False + + prep_paths = [] + self.prep_file_paths = defaultdict(list) + + for root, dirs, files in walk(tmp): + for _file in files: + # breakup the prep-info-file into segments + # (run-id, project_qid, other) and cleave + # the qiita-id from the project_name. + qid = _file.split('.')[1].split('_')[-1] + + if _file.endswith('.tsv'): + _path = abspath(join(root, _file)) + prep_paths.append(_path) + self.prep_file_paths[qid].append(_path) + + for _dir in dirs: + if _dir == '1': + # if PrepFiles contains the '1' directory, then it's a + # given that this sample-sheet contains replicates. + self.has_replicates = True + + # currently imported from Assay although it is a base method. it + # could be imported into Workflows potentially, since it is a post- + # processing step. All pairings of assay and instrument type need to + # generate prep-info files in the same format. + self.overwrite_prep_files(prep_paths) + + # for now, simply re-run any line below as if it was a new job, even + # for a restart. functionality is idempotent, except for the + # registration of new preps in Qiita. These will simply be removed + # manually. + + # post-processing steps are by default associated with the Workflow + # class, since they deal with fastq files and Qiita, and don't depend + # on assay or instrument type. + self.update_status("Generating sample information", 5, 9) + self.sifs = self.generate_sifs() + + # post-processing step. + self.update_status("Registering blanks in Qiita", 6, 9) + if self.update: + self.update_blanks_in_qiita() + + self.update_status("Loading preps into Qiita", 7, 9) + if self.update: + self.update_prep_templates() + + # before we load preps into Qiita we need to copy the fastq + # files n times for n preps and correct the file-paths each + # prep is pointing to. + self.load_preps_into_qiita() + + self.update_status("Generating packaging commands", 8, 9) + self.generate_commands() + + self.update_status("Packaging results", 9, 9) + if self.update: + self.execute_commands() diff --git a/qp_klp/WorkflowFactory.py b/qp_klp/WorkflowFactory.py new file mode 100644 index 00000000..c5837d92 --- /dev/null +++ b/qp_klp/WorkflowFactory.py @@ -0,0 +1,96 @@ +from .StandardAmpliconWorkflow import StandardAmpliconWorkflow +from .StandardMetagenomicWorkflow import StandardMetagenomicWorkflow +from .StandardMetatranscriptomicWorkflow import \ + StandardMetatranscriptomicWorkflow +from .TellseqMetagenomicWorkflow import TellSeqMetagenomicWorkflow +from sequence_processing_pipeline.Pipeline import Pipeline +from metapool import load_sample_sheet +from .Assays import METAOMIC_ASSAY_NAMES, ASSAY_NAME_AMPLICON +from .Protocol import PROTOCOL_NAME_ILLUMINA, PROTOCOL_NAME_TELLSEQ +from .Workflows import WorkflowError + + +class WorkflowFactory(): + WORKFLOWS = [StandardMetagenomicWorkflow, + StandardMetatranscriptomicWorkflow, + StandardAmpliconWorkflow, + TellSeqMetagenomicWorkflow] + + ST_TO_IN_MAP = {PROTOCOL_NAME_ILLUMINA: ['standard_metag', + 'standard_metat', + 'absquant_metag', + 'absquant_metat'], + PROTOCOL_NAME_TELLSEQ: ['tellseq_metag', + 'tellseq_absquant']} + + @classmethod + def _get_instrument_type(cls, sheet): + for instrument_type in cls.ST_TO_IN_MAP: + if sheet.Header['SheetType'] in cls.ST_TO_IN_MAP[instrument_type]: + return instrument_type + + @classmethod + def generate_workflow(cls, **kwargs): + msg = "kwargs must not be None and must define 'uif_path'" + + if not kwargs: + # if kwargs is None or {}, raise an Error + raise ValueError(msg) + + if 'uif_path' not in kwargs: + raise ValueError(msg) + + if Pipeline.is_sample_sheet(kwargs['uif_path']): + # NB: The Pipeline() determines an input-file is a sample-sheet + # if the first line begins with "[Header]" followed by any number + # of ','. A file that begins this way but fails to load + # successfully because of an undefined SheetType and/or + # SheetVersion will raise a ValueError() here, w/the message + # "'{sheet}' doesn't appear to be a valid sample-sheet." + + sheet = load_sample_sheet(kwargs['uif_path']) + + # if we do not validate the sample-sheet now, it will be validated + # downstream when we attempt to instantiate a Workflow(), which in + # turn will attempt to instantiate a Pipeline(), which will load + # and validate the sample-sheet on its own. This is an early + # abort. Expect the user/caller to diagnose the sample-sheet in a + # notebook or by other means. + if sheet.validate_and_scrub_sample_sheet(): + assay_type = sheet.Header['Assay'] + if assay_type not in METAOMIC_ASSAY_NAMES: + # NB: This Error is not likely to be raised unless an + # assay type is defined in metapool but not in Assays. + raise WorkflowError("Can't determine workflow from assay " + "type: %s" % assay_type) + instrument_type = cls._get_instrument_type(sheet) + else: + raise WorkflowError(f"'{kwargs['uif_path']} doesn't appear to " + "be a valid sample-sheet.") + elif Pipeline.is_mapping_file(kwargs['uif_path']): + # if file is readable as a basic TSV and contains all the required + # headers, then treat this as a mapping file, even if it's an + # invalid one. + assay_type = ASSAY_NAME_AMPLICON + # for Amplicon runs, the lane_number is always one, even if the + # user supplies another value in the UI. + kwargs['lane_number'] = 1 + # NB: For now, let's assume all Amplicon runs are Illumina, since + # the entire Amplicon pipeline assumes as much. + instrument_type = 'Illumina' + else: + raise ValueError("Your uploaded file doesn't appear to be a " + "sample-sheet or a mapping-file.") + + for workflow in WorkflowFactory.WORKFLOWS: + if workflow.assay_type == assay_type: + if workflow.protocol_type == instrument_type: + # return instantiated workflow object + return workflow(**kwargs) + + # This Error will only be raised if a sample-sheet passes metapool's + # validation method but a Workflow() for its instrument-type and + # assay-type doesn't exist. + raise ValueError(f"Assay type '{assay_type}' and Instrument type " + f"'{instrument_type}' did not match any known " + "workflow configuration") diff --git a/qp_klp/Workflows.py b/qp_klp/Workflows.py new file mode 100644 index 00000000..0b8a608f --- /dev/null +++ b/qp_klp/Workflows.py @@ -0,0 +1,716 @@ +from os.path import join, exists, split +from os import walk, makedirs, listdir +import pandas as pd +from json import dumps +from subprocess import Popen, PIPE +from glob import glob +from shutil import copyfile +import logging +from .Assays import ASSAY_NAME_AMPLICON + + +class WorkflowError(Exception): + def __init__(self, message=None): + self.message = message + super().__init__(self.message) + + +class Workflow(): + def __init__(self, **kwargs): + """ + base initializer allows WorkflowFactory to return the correct + Workflow() type w/out having to include all possible starting + parameters needed for each Workflow type. + """ + self.kwargs = kwargs + + # initializing member variables known to be used in class and/or in + # mixins. + self.cmds_log_path = None + self.cmds = None + self.has_replicates = None + self.job_pool_size = None + self.mandatory_attributes = [] + self.master_qiita_job_id = None + self.output_path = None + self.pipeline = None + self.prep_copy_index = 0 + self.prep_file_paths = None + self.qclient = None + self.run_prefixes = {} + self.samples_in_qiita = None + self.sample_state = None + self.sifs = None + self.skip_steps = [] + self.special_map = None + self.status_msg = '' + self.touched_studies_prep_info = None + self.tube_id_map = None + + if 'status_update_callback' in kwargs: + self.status_update_callback = kwargs['status_update_callback'] + else: + self.status_update_callback = None + + def confirm_mandatory_attributes(self): + """ + Confirms that all mandatory attributes are present in kwargs. + """ + absent_list = [] + + for attribute in self.mandatory_attributes: + if attribute not in self.kwargs: + absent_list.append(attribute) + + if absent_list: + raise ValueError(f"The following values must also be defined in " + f"kwargs for {self.__class__.__name__} workflows" + + ": " + ', '.join(absent_list)) + + def job_callback(self, jid, status): + """ + Update main status message w/current child job status. + """ + if self.status_update_callback: + self.status_update_callback(self.status_msg + + f" ({jid}: {status})") + + def update_status(self, msg, step_number, total_steps): + """ + Prettify status message before updating. + """ + + # When this method is called, a new status message is created. + # This is saved so that child jobs can use job_callback() to update + # this message. + + # set self.status_msg even if self.status_update_callback() is None. + msg = "Step %d of %d: %s" % (step_number, total_steps, msg) + self.status_msg = msg + + if self.status_update_callback: + self.status_update_callback(self.status_msg) + + def what_am_i(self): + """ + Returns text description of Workflow's Instrument & Assay mixins. + """ + return (f"Instrument: {self.protocol_type}" + "\t" + + f"Assay: {self.assay_type}") + + def pre_check(self): + if self.is_restart: + self._get_tube_ids_from_qiita() + else: + # since one of the objectives of SPP is to generate prep-info files + # and automatically load them into Qiita, confirm that all studies + # mentioned in the sample-sheet/pre-prep do not contain sample + # metadata that would cause an error in the pipeline after + # processing has already completed but the results have not yet + # been loaded. + self._project_metadata_check() + + # compare sample-ids/tube-ids in sample-sheet/mapping file + # against what's in Qiita. Results are a list of dictionaries, one + # per project. + results = self._compare_samples_against_qiita() + + # obtain a list of non-zero counts of samples missing in Qiita, one + # for each project. The names of the projects are unimportant. We + # want to abort early if any project in the sample-sheet/pre-prep + # file contains samples that aren't registered in Qiita. + tmp = [len(project['samples_not_in_qiita']) for project in results] + missing_counts = [count for count in tmp if count != 0] + + if missing_counts: + msgs = [] + for result in results: + msgs += result['messages'] + + if msgs: + raise WorkflowError('\n'.join(msgs)) + + def generate_special_map(self): + """ + Generates a list of tuples to support pipeline processing. + :return: A list of triplets. + """ + # trimmed files are stored by qiita_id. Find the qiita_id + # associated with each project and ensure a subdirectory exists + # for when it comes time to move the trimmed files. + + special_map = [] + results = self.qclient.get("/qiita_db/artifacts/types/") + projects = self.pipeline.get_project_info() + for project in projects: + upload_path = join(results['uploads'], project['qiita_id']) + makedirs(upload_path, exist_ok=True) + special_map.append((project['project_name'], + upload_path, + project['qiita_id'])) + + self.special_map = special_map + + def generate_sifs(self): + """ + Generates sample-info files for each project, containing + metadata on BLANKS. + """ + from_qiita = {} + + for study_id in self.prep_file_paths: + url = f'/api/v1/study/{study_id}/samples' + logging.debug(url) + samples = list(self.qclient.get(url)) + from_qiita[study_id] = samples + + add_sif_info = [] + + qid_pn_map = {proj['qiita_id']: proj['project_name'] for + proj in self.pipeline.get_project_info()} + + # in case we really do need to query for samples again: + # assume set of valid study_ids can be determined from prep_file_paths. + for study_id in from_qiita: + samples = from_qiita[study_id] + # generate a list of (sample-name, project-name) pairs. + project_name = qid_pn_map[study_id] + samples = [(x, project_name) for x in samples] + add_sif_info.append(pd.DataFrame(data=samples, + columns=['sample_name', + 'project_name'])) + + # convert the list of dataframes into a single dataframe. + add_sif_info = pd.concat(add_sif_info, + ignore_index=True).drop_duplicates() + + # generate SIF files with add_sif_info as additional metadata input. + # duplicate sample-names and non-blanks will be handled properly. + self.sifs = self.pipeline.generate_sample_info_files(add_sif_info) + + return self.sifs + + def update_blanks_in_qiita(self): + """ + Updates the blanks registered in a given project in Qiita. + :return: + """ + + for sif_path in self.sifs: + # get study_id from sif_file_name ...something_14385_blanks.tsv + study_id = sif_path.split('_')[-2] + + df = pd.read_csv(sif_path, delimiter='\t', dtype=str) + + # Prepend study_id to make them compatible w/list from Qiita. + df['sample_name'] = f'{study_id}.' + df['sample_name'].astype(str) + + # SIFs only contain BLANKs. Get the list of potentially new BLANKs. + blank_ids = [i for i in df['sample_name'] if 'blank' in i.lower()] + blanks = df[df['sample_name'].isin(blank_ids)]['sample_name'] + if len(blanks) == 0: + # we have nothing to do so let's return early + return + + # Get list of BLANKs already registered in Qiita. + from_qiita = self.qclient.get(f'/api/v1/study/{study_id}/samples') + from_qiita = [x for x in from_qiita if + x.startswith(f'{study_id}.BLANK')] + + # Generate list of BLANKs that need to be ADDED to Qiita. + new_blanks = (set(blanks) | set(from_qiita)) - set(from_qiita) + + if len(new_blanks): + # Generate dummy entries for each new BLANK, if any. + url = f'/api/v1/study/{study_id}/samples/info' + logging.debug(url) + categories = self.qclient.get(url)['categories'] + + # initialize payload w/required dummy categories + data = {i: {c: 'control sample' for c in categories} for i in + new_blanks} + + # populate payload w/additional columns and/or overwrite + # existing columns w/metadata from SIF file. + sif_data = df.set_index('sample_name').T.to_dict() + for new_blank in new_blanks: + for column in sif_data[new_blank]: + data[new_blank][column] = sif_data[new_blank][column] + + # http_patch will raise Error if insert failed. + self.qclient.http_patch(f'/api/v1/study/{study_id}/samples', + data=dumps(data)) + + def _helper_process_operations(self): + """ + Helper method for generate_commands() + :return: + """ + RESULTS_DIR = 'final_results' + TAR_CMD = 'tar zcvf' + LOG_PREFIX = 'logs' + REPORT_PREFIX = 'reports' + PREP_PREFIX = 'prep-files' + CONVERT_JOB = 'ConvertJob' + QC_JOB = 'NuQCJob' + FASTQC_JOB = 'FastQCJob' + PREPFILE_JOB = 'GenPrepFileJob' + TAR_EXT = 'tgz' + + op_meta = [(['ConvertJob/logs'], TAR_CMD, + f'{LOG_PREFIX}-{CONVERT_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), + + (['ConvertJob/Reports', 'ConvertJob/logs'], TAR_CMD, + f'{REPORT_PREFIX}-{CONVERT_JOB}.{TAR_EXT}', + 'OUTPUT_FIRST'), + + (['NuQCJob/logs'], TAR_CMD, + f'{LOG_PREFIX}-{QC_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), + + (['FastQCJob/logs'], TAR_CMD, + f'{LOG_PREFIX}-{FASTQC_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), + + (['FastQCJob/fastqc'], TAR_CMD, + f'{REPORT_PREFIX}-{FASTQC_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), + + (['GenPrepFileJob/logs'], TAR_CMD, + f'{LOG_PREFIX}-{PREPFILE_JOB}.{TAR_EXT}', 'OUTPUT_FIRST'), + + (['GenPrepFileJob/PrepFiles'], TAR_CMD, + f'{PREP_PREFIX}.{TAR_EXT}', 'OUTPUT_FIRST'), + + (['failed_samples.html', 'touched_studies.html'], + 'mv', RESULTS_DIR, 'INPUTS_FIRST'), + + (['FastQCJob/multiqc'], 'mv', RESULTS_DIR, 'INPUTS_FIRST')] + + cmds = [] + + for inputs, action, output, order in op_meta: + confirmed_inputs = [] + for input in inputs: + if exists(join(self.pipeline.output_path, input)): + # it's expected that some inputs may not exist due to + # different pipeline types. If one or more inputs do not + # exist, do not include them in the command-line as they + # may cause an error. + confirmed_inputs.append(input) + + # do not add the command to the list unless at least one of + # the inputs exists. It's okay for a command to go unprocessed. + if confirmed_inputs: + # convert to string form before using. + confirmed_inputs = ' '.join(confirmed_inputs) + if order == 'OUTPUT_FIRST': + cmds.append(f'{action} {output} {confirmed_inputs}') + elif order == 'INPUTS_FIRST': + cmds.append(f'{action} {confirmed_inputs} {output}') + else: + raise ValueError(f"'{order}' is not a defined order of " + "operations") + + return cmds + + def _process_blanks(self): + """ + Helper method for generate_commands(). + :return: + """ + results = [x for x in listdir(self.pipeline.output_path) if + x.endswith('_blanks.tsv')] + + results.sort() + + if len(results) > 0: + return 'tar zcvf sample-files.tgz' + ' ' + ' '.join(results) + + def _process_fastp_report_dirs(self): + """ + Helper method for generate_commands(). + :return: + """ + report_dirs = [] + + for root, dirs, files in walk(self.pipeline.output_path): + for dir_name in dirs: + if dir_name == 'fastp_reports_dir': + # generate the full path for this directory before + # truncating everything up to the NuQCJob directory. + full_path = join(root, dir_name).split('NuQCJob/') + report_dirs.append(join('NuQCJob', full_path[1])) + + if report_dirs: + report_dirs.sort() + return 'tar zcvf reports-NuQCJob.tgz ' + ' '.join(report_dirs) + else: + # It is okay to return an empty list of commands if reports_dirs + # is empty. Some pipelines do not generate fastp reports. + return [] + + def _write_commands_to_output_path(self): + """ + Helper method for generate_commands(). + :return: + """ + self.cmds_log_path = join(self.pipeline.output_path, 'cmds.log') + with open(self.cmds_log_path, 'w') as f: + for cmd in self.cmds: + f.write(f'{cmd}\n') + + def generate_commands(self): + cmds = self._helper_process_operations() + + result = self._process_fastp_report_dirs() + + if result: + cmds.append(result) + + result = self._process_blanks() + + if result: + cmds.append(result) + + # if one or more tar-gzip files are found (which we expect there to + # be), move them into the 'final_results' directory. However, if none + # are present, don't raise an error. + cmds.append('(find *.tgz -maxdepth 1 -type f | xargs mv -t ' + 'final_results) || true') + + # prepend each command with a change-directory to the correct + # location. + cmds = [f'cd {self.pipeline.output_path}; {cmd}' for cmd in cmds] + + self.cmds = cmds + + self._write_commands_to_output_path() + + def execute_commands(self): + # execute the list of commands in order + for cmd in self.cmds: + p = Popen(cmd, + universal_newlines=True, + shell=True, + stdout=PIPE, + stderr=PIPE) + _, _ = p.communicate() + return_code = p.returncode + + if return_code != 0: + # during testing, ignore processes that fail and continue + # to test other commands. + raise WorkflowError(f"'{cmd}' returned {return_code}") + + def _project_metadata_check(self): + """ + Helper method for pre_check() + :return: + """ + # Let Pipeline() retrieve the needed qiita study ids from the user + # input while this plugin queries for the existing set of column + # names in each project's sample metadata. We'll let Pipeline() + # decide (using its metapool dependency) which column names are + # reserved. + qiita_ids = [x['qiita_id'] for x in self.pipeline.get_project_info()] + + results = [] + + for qiita_id in qiita_ids: + url = f"/api/v1/study/{qiita_id}/samples/info" + logging.debug(f"URL: {url}") + categories = self.qclient.get(url)["categories"] + + res = self.pipeline.identify_reserved_words(categories) + + # if any reserved words were identified, generate an appropriate + # error message for it and add it to the list of error messages + # to return to the user. + res = [f"'{x}' exists in Qiita study {qiita_id}'s sample metadata" + for x in res] + + results += res + + if results: + # return any error messages generated across all the projects. + raise WorkflowError("\n".join(results)) + + def _process_tube_ids(self, qiita_id, samples): + """ + Helper method for _compare_samples_against_qiita(). + :param qiita_id: + :param samples: + :return: + """ + if qiita_id in self.tube_id_map: + tids = [self.tube_id_map[qiita_id][sample] for sample in + self.tube_id_map[qiita_id]] + + not_in_qiita = samples - set(tids) + + if not_in_qiita: + # strip any leading zeroes from the sample-ids. Note that + # if a sample-id has more than one leading zero, all of + # them will be removed. + not_in_qiita = set([x.lstrip('0') for x in samples]) - \ + set(tids) + + # convert examples to strings before returning + examples = [str(example) for example in tids[:5]] + + number_in_project = len(set(tids)) + + return not_in_qiita, examples, number_in_project + + # return None otherwise + + def _compare_samples_against_qiita(self): + """ + Helper method for pre_check(). + :return: + """ + projects = self.pipeline.get_project_info(short_names=True) + + results = [] + for project in projects: + msgs = [] + self._get_tube_ids_from_qiita() + p_name = project['project_name'] + qiita_id = str(project['qiita_id']) + contains_replicates = project['contains_replicates'] + + # get list of samples as presented by the sample-sheet or mapping + # file and confirm that they are all registered in Qiita. + if contains_replicates: + # don't match against sample-names with a trailing well-id + # if project contains replicates. + msgs.append("This sample-sheet contains replicates. sample-" + "names will be sourced from orig_name column.") + samples = set(self.pipeline.get_orig_names_from_sheet(p_name)) + else: + samples = set(self.pipeline.get_sample_names(p_name)) + + # do not include BLANKs. If they are unregistered, we will add + # them downstream. + samples = {smpl for smpl in samples + if not smpl.startswith('BLANK')} + + msgs.append(f"The total number of samples found in {p_name} that " + f"aren't BLANK is: {len(samples)}") + + results_sn = self._process_sample_names(p_name, qiita_id, + samples) + + msgs.append("Number of values in sheet that aren't sample-names in" + " Qiita: %s" % len(results_sn[0])) + + use_tids = False + + if len(results_sn[0]) == 0: + msgs.append(f"All values in sheet matched sample-names " + f"registered with {p_name}") + else: + # not all values were matched to sample-names. + # check for possible match w/tube-ids, if defined in project. + results_tid = self._process_tube_ids(qiita_id, samples) + if results_tid: + msgs.append("Number of values in sheet that aren't " + "tube-ids in Qiita: %s" % len(results_tid[0])) + + if len(results_tid[0]) == 0: + # all values were matched to tube-ids. + use_tids = True + msgs.append(f"All values in sheet matched tube-ids " + f"registered with {p_name}") + else: + # we have sample-names and tube-ids and neither is + # a perfect match. + if len(results_tid[0]) < len(results_sn[0]): + # more tube-ids matched than sample-names. + use_tids = True + msgs.append(f"More values in sheet matched tube-" + f"ids than sample-names with {p_name}") + elif len(results_tid[0]) == len(results_sn[0]): + msgs.append("Sample-names and tube-ids were " + "equally non-represented in the " + "sample-sheet") + else: + msgs.append(f"More values in sheet matched sample-" + f"names than tube-ids with {p_name}") + else: + msgs.append("there are no tube-ids registered with " + f"{p_name}") + + if use_tids: + not_in_qiita = results_tid[0] + examples = results_tid[1] + total_in_qiita = results_tid[2] + else: + not_in_qiita = results_sn[0] + examples = results_sn[1] + total_in_qiita = results_sn[2] + + # return an entry for all projects, even when samples_not_in_qiita + # is an empty list, as the information is still valuable. + results.append({'samples_not_in_qiita': not_in_qiita, + 'examples_in_qiita': examples, + 'project_name': p_name, + 'total_in_qiita': total_in_qiita, + 'used_tids': use_tids, + 'messages': msgs}) + + return results + + @classmethod + def get_samples_in_qiita(cls, qclient, qiita_id): + ''' + Obtain lists for sample-names and tube-ids registered in Qiita. + :param qclient: QiitaClient object + :param qiita_id: Qiita ID for the project in question. + :return: a tuple of lists, one for sample-names, another for tube-ids. + ''' + samples = qclient.get(f'/api/v1/study/{qiita_id}/samples') + + # remove Qiita ID as a prefix from the sample-names. + samples = {x.replace(f'{qiita_id}.', '') for x in samples} + + # find out if tube-ids are registered in the study. + categories = qclient.get(f'/api/v1/study/{qiita_id}' + '/samples/info')['categories'] + + if 'tube_id' in categories: + tids = qclient.get(f'/api/v1/study/{qiita_id}/samples/' + 'categories=tube_id')['samples'] + else: + tids = None + + return (samples, tids) + + def _get_postqc_fastq_files(self, out_dir, project): + af = None + sub_folders = ['amplicon', 'filtered_sequences', 'trimmed_sequences'] + for sub_folder in sub_folders: + sf = join(out_dir, 'NuQCJob', project, sub_folder) + if exists(sf): + af = [f for f in glob(join(sf, '*.fastq.gz'))] + break + if af is None or not af: + raise WorkflowError("NuQCJob output not in expected location") + + files = {'raw_barcodes': [], 'raw_forward_seqs': [], + 'raw_reverse_seqs': []} + + for fastq_file in af: + if '_I1_' in fastq_file or '_I2_' in fastq_file: + files['raw_barcodes'].append(fastq_file) + elif '_R1_' in fastq_file: + files['raw_forward_seqs'].append(fastq_file) + elif '_R2_' in fastq_file: + files['raw_reverse_seqs'].append(fastq_file) + else: + raise ValueError(f"Unrecognized file: {fastq_file}") + + files['raw_barcodes'].sort() + files['raw_forward_seqs'].sort() + files['raw_reverse_seqs'].sort() + + # Amplicon runs should contain raw_barcodes/I1 files. + # Meta*omics files doesn't use them. + if self.pipeline.pipeline_type != ASSAY_NAME_AMPLICON: + del (files['raw_barcodes']) + + # confirm expected lists of reads are not empty. + for f_type in files: + if not files[f_type]: + # if one or more of the expected list of reads is empty, + # raise an Error. + raise ValueError(f"'{f_type}' is empty") + + return files + + def _load_prep_into_qiita(self, qclient, prep_id, artifact_name, + qiita_id, project, fastq_files, atype): + surl = f'{qclient._server_url}/study/description/{qiita_id}' + prep_url = (f'{qclient._server_url}/study/description/' + f'{qiita_id}?prep_id={prep_id}') + + # ideally we would use the email of the user that started the SPP + # run but at this point there is no easy way to retrieve it + pdata = {'user_email': 'qiita.help@gmail.com', + 'prep_id': prep_id, + 'artifact_type': atype, + 'command_artifact_name': artifact_name, + 'add_default_workflow': True, + 'files': dumps(fastq_files)} + + job_id = qclient.post('/qiita_db/artifact/', data=pdata)['job_id'] + + return {'Project': project, 'Qiita Study ID': qiita_id, + 'Qiita Prep ID': prep_id, 'Qiita URL': surl, + 'Artifact Name': artifact_name, + 'Prep URL': prep_url, 'Linking JobID': job_id} + + def _copy_files(self, files): + # increment the prep_copy_index before generating a new set of copies. + self.prep_copy_index += 1 + new_files = {} + for key in files: + new_files[key] = [] + for some_path in files[key]: + path_name, file_name = split(some_path) + path_name = join(path_name, f'copy{self.prep_copy_index}') + makedirs(path_name, exist_ok=True) + new_files[key].append(join(path_name, file_name)) + + for key in files: + for src, dst in zip(files[key], new_files[key]): + copyfile(src, dst) + return new_files + + def get_prep_file_paths(self): + return self.prep_file_paths + + def _get_tube_ids_from_qiita(self): + # Update get_project_info() so that it can return a list of + # samples in projects['samples']. Include blanks in projects['blanks'] + # just in case there are duplicate qiita_ids + qiita_ids = [proj['qiita_id'] for proj in + self.pipeline.get_project_info(short_names=True)] + + tids_by_qiita_id = {} + sample_names_by_qiita_id = {} + + for qiita_id in qiita_ids: + # Qiita returns a set of sample-ids in qsam and a dictionary where + # sample-names are used as keys and tube-ids are their values. + qsam, tids = self.get_samples_in_qiita(self.qclient, qiita_id) + + sample_names_by_qiita_id[str(qiita_id)] = qsam + + if tids is not None: + # fix values in tids to be a string instead of a list of one. + # also, remove the qiita_id prepending each sample-name. + tids = {k.replace(f'{qiita_id}.', ''): tids[k][0] for k in + tids} + + # the values Qiita returns for tids seems like it can include + # empty strings if there is no tube-id associated with a + # sample-name. For now assume it doesn't happen in production + # and if prep-files have empty sample-names we'll know. + tids_by_qiita_id[str(qiita_id)] = tids + + # use empty dict {} as an indication that get_tube_ids_from_qiita was + # called but no tube-ids were found for any project. + # to clarify, self.tube_id_map maps sample-names to tube-ids. + self.tube_id_map = tids_by_qiita_id + # should samples_in_qiita be none if tube_id_map is not? + self.samples_in_qiita = sample_names_by_qiita_id + + def _process_sample_names(self, project_name, qiita_id, samples): + not_in_qiita = samples - set(self.samples_in_qiita[qiita_id]) + examples = list(samples)[:5] + + # convert to strings before returning + examples = [str(example) for example in examples] + + number_in_project = len(set(self.samples_in_qiita[qiita_id])) + + return not_in_qiita, examples, number_in_project diff --git a/qp_klp/__init__.py b/qp_klp/__init__.py index 2997c1ad..5da12746 100644 --- a/qp_klp/__init__.py +++ b/qp_klp/__init__.py @@ -13,7 +13,7 @@ class QiitaPluginAdmin(QiitaPlugin): _plugin_type = "private" -__version__ = '2023.05' +__version__ = '2024.11' plugin = QiitaPluginAdmin('qp-klp', __version__, 'Knight Lab Processing') diff --git a/qp_klp/klp.py b/qp_klp/klp.py index 12d7eb14..ca6c015f 100644 --- a/qp_klp/klp.py +++ b/qp_klp/klp.py @@ -8,49 +8,25 @@ from functools import partial from os import environ from qiita_client import ArtifactInfo -from qp_klp.Amplicon import Amplicon -from qp_klp.Metagenomic import Metagenomic -from qp_klp.Step import Step from os import makedirs -from os.path import join, split, exists -from sequence_processing_pipeline.Pipeline import Pipeline +from os.path import join, exists from sequence_processing_pipeline.PipelineError import PipelineError -from sequence_processing_pipeline.ConvertJob import ConvertJob from metapool import load_sample_sheet +from .Workflows import WorkflowError +from .WorkflowFactory import WorkflowFactory CONFIG_FP = environ["QP_KLP_CONFIG_FP"] class StatusUpdate(): - def __init__(self, qclient, job_id, msgs): + def __init__(self, qclient, job_id): self.qclient = qclient self.job_id = job_id self.msg = '' - self.current_step = 0 - self.step_count = len(msgs) - self.msgs = msgs - def update_job_status(self, status, jid): - # internal function implements a callback function for Pipeline.run(). - # :param id: PBS/Torque/or some other informative and current job id. - # :param status: status message - self.qclient.update_job_step(self.job_id, - self.msg + f" ({jid}: {status})") - - def update_current_message(self, include_step=True): - # internal function that sets current_message to the new value before - # updating the job step in the UI. - if include_step: - msg = "Step %d of %d: " % (self.current_step + 1, self.step_count) - else: - msg = "" - - self.msg = msg + self.msgs[self.current_step] - - self.current_step += 1 - - self.qclient.update_job_step(self.job_id, self.msg) + def update_job_status(self, msg): + self.qclient.update_job_step(self.job_id, msg) def sequence_processing_pipeline(qclient, job_id, parameters, out_dir): @@ -72,25 +48,35 @@ def sequence_processing_pipeline(qclient, job_id, parameters, out_dir): bool, list, str The results of the job """ - # Assume that for a job to be considered a restart, there must be work - # performed worth re-starting for. Since the working directory for each - # step is created only if the previous steps were successful, testing - # for the presence of them ensures that n-1 steps exist and were - # successful. - - # at minimum, ConvertJob needs to have been successful. + status_line = StatusUpdate(qclient, job_id) + + # NB: RESTART FUNCTIONALITY: + # To restart a job that's failed, simply create a ProcessingJob() object + # in Qiita's interpreter using the Qiita Job ID aka the name of the + # working directory. _set_status("in construction") and then call + # submit(). New SPP jobs will record all the information needed to perform + # a restart should it fail. out_path = partial(join, out_dir) - is_restart = True if exists(out_path('NuQCJob')) else False + is_restart = True if exists(out_path('restart_me')) else False if is_restart: - # Assume ConvertJob directory exists and parse the job-script found - # there. If this is a restart, we won't be given the run-identifier, - # the lane number, and the sample-sheet as input parameters. - some_path = join(out_dir, 'ConvertJob', 'ConvertJob.sh') - result = ConvertJob.parse_job_script(some_path) - run_identifier = split(result['run_directory'])[-1] - uif_path = result['sample_sheet_path'] + status_line.update_job_status("Restarting pipeline") + with open(out_path('restart_me'), 'r') as f: + lines = f.readlines() + lines = [x.strip() for x in lines] + lines = [x for x in lines if x != ''] + if len(lines) != 2: + raise ValueError(f"{out_path('restart_me')} can only contain " + "the run-identifier on line 1 and the name " + "of the user input file on line 2") + run_identifier = lines[0] + uif_path = out_path(lines[1]) + + if not exists(uif_path): + raise ValueError(f"{uif_path} does not exist") + sheet = load_sample_sheet(uif_path) + # on Amplicon runs, lane_number is always 1, and this will be # properly reflected in the dummy sample-sheet as well. lane_number = sheet.get_lane_number() @@ -108,12 +94,28 @@ def sequence_processing_pipeline(qclient, job_id, parameters, out_dir): f.write("This job was restarted.\n" "failed_samples.html may contain incorrect data.\n") else: + # This is a new, fresh SPP job. Get the parameters from the user and + # create a 'restart_me' file in the working directory. + + status_line.update_job_status("Setting up pipeline") + # available fields for parameters are: # run_identifier, sample_sheet, content_type, filename, lane_number + run_identifier = parameters.pop('run_identifier') user_input_file = parameters.pop('sample_sheet') lane_number = parameters.pop('lane_number') + # the run_identifier must be saved because it is not always preserved + # in a dependable location downstream. The user input file must be + # saved because it is always a unique name and it cannot be guaranteed + # to be the only .csv or .txt file at the root level of the working + # directory. The Lane number is not needed because it is written into + # the user_input file on the first run. + restart_file_path = out_path('restart_me') + with open(restart_file_path, 'w') as f: + f.write(f"{run_identifier}\n{user_input_file}") + if {'body', 'content_type', 'filename'} != set(user_input_file): return False, None, ("This doesn't appear to be a valid sample " "sheet or mapping file; please review.") @@ -125,105 +127,33 @@ def sequence_processing_pipeline(qclient, job_id, parameters, out_dir): final_results_path = out_path('final_results') makedirs(final_results_path, exist_ok=True) - if Pipeline.is_sample_sheet(uif_path): - with open(uif_path, 'r') as f: - assay = [x for x in f.readlines() if 'Assay' in x] - - if len(assay) == 0: - return False, None, ("Assay type is not defined in the " - "sample-sheet") - - if len(assay) > 1: - return False, None, ("Assay type is defined multiple times " - "within the sample-sheet") - - pipeline_type = None - for p_type in Step.META_TYPES: - if p_type in assay[0]: - pipeline_type = p_type - - if pipeline_type is None: - msg = [f"'{x}'" for x in Step.META_TYPES] - return False, None, ("The following Assay types are valid within" - " a sample-sheet: %s" % ', '.join(msg)) - - elif Pipeline.is_mapping_file(uif_path): - # if file is readable as a basic TSV and contains all the required - # headers, then treat this as a mapping file, even if it's an invalid - # one. - pipeline_type = Step.AMPLICON_TYPE - lane_number = 1 - else: - # file doesn't look like a sample-sheet, or a valid mapping file. - return False, None, ("Your uploaded file doesn't appear to be a sample" - "-sheet or a mapping-file.") - - msgs = ["Setting up pipeline", "Getting project information", - "Converting data", "Performing quality control", - "Generating reports", "Generating preps", - "Generating sample information ", "Registering blanks in Qiita", - "Loading preps into Qiita", "Generating packaging commands", - "Packaging results", "SPP finished"] - - status_line = StatusUpdate(qclient, job_id, msgs) - status_line.update_current_message() + try: + kwargs = {'qclient': qclient, + 'uif_path': uif_path, + 'lane_number': lane_number, + 'config_fp': CONFIG_FP, + 'run_identifier': run_identifier, + 'output_dir': out_dir, + 'job_id': job_id, + 'status_update_callback': status_line.update_job_status, + # set 'update_qiita' to False to avoid updating Qiita DB + # and copying files into uploads dir. Useful for testing. + 'update_qiita': True, + 'is_restart': is_restart} - skip_steps = [] - if is_restart: - # figure out what actually needs to be skipped if restarting: - if exists(join(out_dir, 'NuQCJob')): - skip_steps.append('ConvertJob') + workflow = WorkflowFactory().generate_workflow(**kwargs) - if exists(join(out_dir, 'FastQCJob')): - skip_steps.append('NuQCJob') + status_line.update_job_status("Getting project information") - if exists(join(out_dir, 'GenPrepFileJob')): - skip_steps.append('FastQCJob') + workflow.execute_pipeline() - # it doesn't matter if cmds.log is a valid cmds.log or just - # an empty file. The cmds.log will get overwritten downstream. - if exists(join(out_dir, 'cmds.log')): - skip_steps.append('GenPrepFileJob') + status_line.update_job_status("SPP finished") - try: - pipeline = Step.generate_pipeline(pipeline_type, - uif_path, - lane_number, - CONFIG_FP, - run_identifier, - out_dir, - job_id) - except PipelineError as e: + except (PipelineError, WorkflowError) as e: # assume AttributeErrors are issues w/bad sample-sheets or # mapping-files. return False, None, str(e) - try: - if pipeline.pipeline_type in Step.META_TYPES: - step = Metagenomic( - pipeline, job_id, status_line, lane_number, - is_restart=is_restart) - else: - step = Amplicon( - pipeline, job_id, status_line, lane_number, - is_restart=is_restart) - - status_line.update_current_message() - - step.precheck(qclient) - - # set update=False to prevent updating Qiita database and copying - # files into uploads directory. Useful for testing. - step.execute_pipeline(qclient, - status_line.update_current_message, - update=True, - skip_steps=skip_steps) - - status_line.update_current_message() - - except PipelineError as e: - return False, None, str(e) - # return success, ainfo, and the last status message. paths = [(f'{final_results_path}/', 'directory')] return (True, [ArtifactInfo('output', 'job-output-folder', paths)], diff --git a/qp_klp/tests/data/configuration_profiles/iseq_metagenomic.json b/qp_klp/tests/data/configuration_profiles/iseq_metagenomic.json index cba9b72b..81ead765 100644 --- a/qp_klp/tests/data/configuration_profiles/iseq_metagenomic.json +++ b/qp_klp/tests/data/configuration_profiles/iseq_metagenomic.json @@ -3,6 +3,25 @@ "instrument_type": "iseq", "assay_type": "Metagenomic", "configuration": { + "tell-seq": { + "integrate_cores": "1", + "integrate_mem_limit": "8", + "integrate_script_path": "/home/user/integrate-indices-np.py", + "label": "my_label", + "lane": 1, + "modules_to_load": ["singularity_3.6.4"], + "nodes": 1, + "normcount_cores": "1", + "normcount_mem_limit": "8", + "queue": "qiita", + "reference_base": "", + "reference_map": "", + "sample_index_list": "/home/user/sample_index_list_1.txt", + "sing_script_path": "/home/user/tellread-release-novaseqX/run_tellread_sing.sh", + "tellread_cores": "4", + "tellread_mem_limit": "16", + "wallclock_time_in_minutes": 1440 + }, "bcl2fastq": { "nodes": 1, "nprocs": 16, diff --git a/qp_klp/tests/data/configuration_profiles/miseq_metagenomic.json b/qp_klp/tests/data/configuration_profiles/miseq_metagenomic.json index 91c33196..c43d20a3 100644 --- a/qp_klp/tests/data/configuration_profiles/miseq_metagenomic.json +++ b/qp_klp/tests/data/configuration_profiles/miseq_metagenomic.json @@ -3,6 +3,25 @@ "instrument_type": "MiSeq", "assay_type": "Metagenomic", "configuration": { + "tell-seq": { + "integrate_cores": "1", + "integrate_mem_limit": "8", + "integrate_script_path": "/home/user/integrate-indices-np.py", + "label": "my_label", + "lane": 1, + "modules_to_load": ["singularity_3.6.4"], + "nodes": 1, + "normcount_cores": "1", + "normcount_mem_limit": "8", + "queue": "qiita", + "reference_base": "", + "reference_map": "", + "sample_index_list": "/home/user/sample_index_list_1.txt", + "sing_script_path": "/home/user/tellread-release-novaseqX/run_tellread_sing.sh", + "tellread_cores": "4", + "tellread_mem_limit": "16", + "wallclock_time_in_minutes": 1440 + }, "bcl-convert": { "nodes": 1, "nprocs": 16, @@ -42,11 +61,12 @@ "job_total_memory_limit": "20", "job_max_array_length": 1000, "known_adapters_path": "fastp_known_adapters_formatted.fna", - "bucket_size": 8, + "bucket_size": 2, "length_limit": 100, "cores_per_task": 2, "movi_executable_path": "/home/user/user_dir/Movi/build/movi-default", "gres_value": 2, + "additional_fastq_tags": ["BX"], "pmls_path": "/home/user/user_dir/human_host_filtration/scripts/qiita_filter_pmls.py" }, "seqpro": { @@ -64,7 +84,7 @@ ], "fastqc_executable_path": "fastqc", "multiqc_executable_path": "multiqc", - "multiqc_config_file_path": "sequence_processing_pipeline/multiqc-bclconvert-config.yaml", + "multiqc_config_file_path": "/home/user/qp_klp/tests/data/multiqc-bclconvert-config.yaml", "job_total_memory_limit": "20gb", "job_pool_size": 120, "job_max_array_length": 2000 diff --git a/qp_klp/tests/data/configuration_profiles/miseq_metatranscriptomic.json b/qp_klp/tests/data/configuration_profiles/miseq_metatranscriptomic.json index b227cb4b..c7dbc9ed 100644 --- a/qp_klp/tests/data/configuration_profiles/miseq_metatranscriptomic.json +++ b/qp_klp/tests/data/configuration_profiles/miseq_metatranscriptomic.json @@ -47,6 +47,7 @@ "cores_per_task": 2, "movi_executable_path": "/home/user/user_dir/Movi/build/movi-default", "gres_value": 4, + "additional_fastq_tags": ["BX"], "pmls_path": "/home/user/user_dir/human_host_filtration/scripts/qiita_filter_pmls.py" }, "seqpro": { diff --git a/qp_klp/tests/data/configuration_profiles/novaseq_metagenomic.json b/qp_klp/tests/data/configuration_profiles/novaseq_metagenomic.json index d17dab1e..75c98a9c 100644 --- a/qp_klp/tests/data/configuration_profiles/novaseq_metagenomic.json +++ b/qp_klp/tests/data/configuration_profiles/novaseq_metagenomic.json @@ -3,6 +3,25 @@ "instrument_type": "NovaSeq 6000", "assay_type": "Metagenomic", "configuration": { + "tell-seq": { + "integrate_cores": "1", + "integrate_mem_limit": "8", + "integrate_script_path": "/home/user/integrate-indices-np.py", + "label": "my_label", + "lane": 1, + "modules_to_load": ["singularity_3.6.4"], + "nodes": 1, + "normcount_cores": "1", + "normcount_mem_limit": "8", + "queue": "qiita", + "reference_base": "", + "reference_map": "", + "sample_index_list": "/home/user/sample_index_list_1.txt", + "sing_script_path": "/home/user/tellread-release-novaseqX/run_tellread_sing.sh", + "tellread_cores": "4", + "tellread_mem_limit": "16", + "wallclock_time_in_minutes": 1440 + }, "bcl-convert": { "nodes": 1, "nprocs": 16, diff --git a/qp_klp/tests/data/multiqc-bclconvert-config.yaml b/qp_klp/tests/data/multiqc-bclconvert-config.yaml new file mode 100644 index 00000000..4dd1ef75 --- /dev/null +++ b/qp_klp/tests/data/multiqc-bclconvert-config.yaml @@ -0,0 +1 @@ +This is a file. diff --git a/qp_klp/tests/data/good-mapping-file.txt b/qp_klp/tests/data/pre-preps/good_pre_prep1.txt similarity index 52% rename from qp_klp/tests/data/good-mapping-file.txt rename to qp_klp/tests/data/pre-preps/good_pre_prep1.txt index c8410489..71a46370 100644 --- a/qp_klp/tests/data/good-mapping-file.txt +++ b/qp_klp/tests/data/pre-preps/good_pre_prep1.txt @@ -1,25 +1,25 @@ sample_name barcode center_name center_project_name experiment_design_description extraction_robot extractionkit_lot instrument_model library_construction_protocol linker mastermix_lot orig_name pcr_primers platform plating primer primer_date primer_plate processing_robot project_name qiita_prep_id run_center run_date run_prefix runid sample_plate sequencing_meth target_gene target_subfragment tm1000_8_tool tm300_8_tool tm50_8_tool water_lot well_description well_id_96 tm10_8_tool well_id_384 -SKM7.640188 TATGCCAGAGAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.1.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.1.21.RK.FH_C4 C4 -SKD9.640182 ATCTAGTGGCAA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.1.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.1.21.RK.LH_D4 D4 -SKM8.640201 TTCCTTAGTAGT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.1.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.1.21.RK.RH_B4 B4 -SKB8.640193 GTGGAGTCTCAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.10.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.10.21.RK.FH_D1 D1 -SKD2.640178 TGATGTGCTAAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.10.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.10.21.RK.LH_E1 E1 -SKM3.640197 TGACTAATGGCC UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.10.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.10.21.RK.RH_C1 C1 -SKM4.640180 GTAGTAGACCAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.12.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.12.21.RK.FH_E2 E2 -SKB9.640200 CCGGACAAGAAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.12.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.12.21.RK.LH_F2 F2 -SKB4.640189 ACCTTACACCTT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.12.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.12.21.RK.RH_D2 D2 -SKB5.640181 CGCGCCTTAAAC UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.13.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.13.21.RK.FH_A5 A5 -SKB6.640176 CGTCCGTATGAA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.13.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.13.21.RK.LH_B5 B5 -SKM2.640199 GACTCTGCTCAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.13.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.13.21.RK.RH_H4 H4 -SKM5.640177 TCCATACCGGAA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.17.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.17.21.RK.FH_A2 A2 -SKD8.640184 CGGGACACCCGA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.17.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.17.21.RK.RH_C2 C2 -SKD4.640185 TGTGCACGCCAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.2.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.2.21.RK.FH_F1 F1 -SKB3.640195 CTATGTATTAGT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.2.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.2.21.RK.LH_H1 H1 -SKB7.640196 TAAATATACCCT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.3.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.3.21.RK.FH_G2 G2 -SKD3.640198 ACTCCCGTGTGA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.3.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.3.21.RK.LH_H2 H2 -SKD7.640191 CCTAACGGTCCA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.3.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.3.21.RK.RH_A4 A4 -SKD6.640190 CTCGCCCTCGCC UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.4.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.4.21.RK.FH_E4 E4 -SKB2.640194 TACTAACGCGGT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.4.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.4.21.RK.LH_F4 F4 -SKM9.640192 GTCGTCCAAATG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.4.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.4.21.RK.RH_G4 G4 -SKM6.640187 GTCATGCTCCAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.5.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.5.21.RK.FH_H5 H5 -SKD5.640186 GCGATCACACCT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.5.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 Feist_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.5.21.RK.LH_F5 F5 +SKM7.640188 TATGCCAGAGAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.1.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.1.21.RK.FH_C4 C4 +SKD9.640182 ATCTAGTGGCAA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.1.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.1.21.RK.LH_D4 D4 +SKM8.640201 TTCCTTAGTAGT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.1.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.1.21.RK.RH_B4 B4 +SKB8.640193 GTGGAGTCTCAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.10.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.10.21.RK.FH_D1 D1 +SKD2.640178 TGATGTGCTAAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.10.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.10.21.RK.LH_E1 E1 +SKM3.640197 TGACTAATGGCC UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.10.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.10.21.RK.RH_C1 C1 +SKM4.640180 GTAGTAGACCAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.12.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.12.21.RK.FH_E2 E2 +SKB9.640200 CCGGACAAGAAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.12.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.12.21.RK.LH_F2 F2 +SKB4.640189 ACCTTACACCTT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.12.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.12.21.RK.RH_D2 D2 +SKB5.640181 CGCGCCTTAAAC UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.13.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.13.21.RK.FH_A5 A5 +SKB6.640176 CGTCCGTATGAA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.13.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.13.21.RK.LH_B5 B5 +SKM2.640199 GACTCTGCTCAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.13.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.13.21.RK.RH_H4 H4 +SKM5.640177 TCCATACCGGAA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.17.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.17.21.RK.FH_A2 A2 +SKD8.640184 CGGGACACCCGA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.17.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.17.21.RK.RH_C2 C2 +SKD4.640185 TGTGCACGCCAT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.2.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.2.21.RK.FH_F1 F1 +SKB3.640195 CTATGTATTAGT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.2.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.2.21.RK.LH_H1 H1 +SKB7.640196 TAAATATACCCT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.3.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.3.21.RK.FH_G2 G2 +SKD3.640198 ACTCCCGTGTGA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.3.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.3.21.RK.LH_H2 H2 +SKD7.640191 CCTAACGGTCCA UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.3.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.3.21.RK.RH_A4 A4 +SKD6.640190 CTCGCCCTCGCC UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.4.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.4.21.RK.FH_E4 E4 +SKB2.640194 TACTAACGCGGT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.4.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.4.21.RK.LH_F4 F4 +SKM9.640192 GTCGTCCAAATG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.4.21.RK.RH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.4.21.RK.RH_G4 G4 +SKM6.640187 GTCATGCTCCAG UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.5.21.RK.FH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_1 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.5.21.RK.FH_H5 H5 +SKD5.640186 GCGATCACACCT UCSDMI Knight_ABTX Samples from ABTX NA NA Illumina MiSeq Illumina EMP protocol 515fbc, 806r amplification of 16S rRNA V4 GT 1331807 11.5.21.RK.LH FWD:GTGYCAGCMGCCGCGGTAA; REV:GGACTACNVGGGTWTCTAAT Illumina LNH GTGTGYCAGCMGCCGCGGTAA 122822 1 Echo 550 TestProj_2 14339 UCSDMI 2/7/23 ABTX_Plates_238_239_240_242_S1_L001 230207_M05314_0346_000000000-KVMGL ABTX_20230208_1_Plate_238 Sequencing by synthesis 16S rRNA V4 108379Z NA NA 1317793 ABTX_20230208_1_Plate_238_11.5.21.RK.LH_F5 F5 diff --git a/qp_klp/tests/data/pre_prep_w_replicates.csv b/qp_klp/tests/data/pre-preps/good_pre_prep_w_replicates.csv similarity index 100% rename from qp_klp/tests/data/pre_prep_w_replicates.csv rename to qp_klp/tests/data/pre-preps/good_pre_prep_w_replicates.csv diff --git a/qp_klp/tests/data/sample-sheets/metagenomic/illumina/bad_sheet1.csv b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/bad_sheet1.csv new file mode 100644 index 00000000..39fb8711 --- /dev/null +++ b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/bad_sheet1.csv @@ -0,0 +1,816 @@ +[Header],,,,,,,,,,, +IEMFileVersion,4,,,,,,,,,, +SheetType,not_a_metag,,,,,,,,,, +SheetVersion,100,,,,,,,,,, +Investigator Name,Knight,,,,,,,,,, +Experiment Name,RKL0042,,,,,,,,,, +Date,2020-02-26,,,,,,,,,, +Workflow,GenerateFASTQ,,,,,,,,,, +Application,FASTQ Only,,,,,,,,,, +Assay,Metagenomic,,,,,,,,,, +Description,,,,,,,,,,, +Chemistry,Default,,,,,,,,,, +,,,,,,,,,,, +[Reads],,,,,,,,,,, +150,,,,,,,,,,, +150,,,,,,,,,,, +,,,,,,,,,,, +[Settings],,,,,,,,,,, +ReverseComplement,0,,,,,,,,,, +,,,,,,,,,,, +[Data],,,,,,,,,,, +Lane,Sample_ID,Sample_Name,Sample_Plate,well_id_384,I7_Index_ID,index,I5_Index_ID,index2,Sample_Project,syndna_pool_number,Well_description +1,CDPH-SAL_Salmonella_Typhi_MDL-143,CDPH-SAL.Salmonella.Typhi.MDL-143,Feist_11661_P40,A1,iTru7_107_07,CCGACTAT,iTru5_01_A,ACCGACAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-143 +1,CDPH-SAL_Salmonella_Typhi_MDL-144,CDPH-SAL.Salmonella.Typhi.MDL-144,Feist_11661_P40,C1,iTru7_107_08,CCGACTAT,iTru5_02_A,CTTCGCAA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-144 +1,CDPH-SAL_Salmonella_Typhi_MDL-145,CDPH-SAL.Salmonella.Typhi.MDL-145,Feist_11661_P40,E1,iTru7_107_09,GCCTTGTT,iTru5_03_A,AACACCAC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-145 +1,CDPH-SAL_Salmonella_Typhi_MDL-146,CDPH-SAL.Salmonella.Typhi.MDL-146,Feist_11661_P40,G1,iTru7_107_10,AACTTGCC,iTru5_04_A,CGTATCTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-146 +1,CDPH-SAL_Salmonella_Typhi_MDL-147,CDPH-SAL.Salmonella.Typhi.MDL-147,Feist_11661_P40,I1,iTru7_107_11,CAATGTGG,iTru5_05_A,GGTACGAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-147 +1,CDPH-SAL_Salmonella_Typhi_MDL-148,CDPH-SAL.Salmonella.Typhi.MDL-148,Feist_11661_P40,K1,iTru7_107_12,AAGGCTGA,iTru5_06_A,CGATCGAT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-148 +1,CDPH-SAL_Salmonella_Typhi_MDL-149,CDPH-SAL.Salmonella.Typhi.MDL-149,Feist_11661_P40,M1,iTru7_108_01,TTACCGAG,iTru5_07_A,AAGACACC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-149 +1,CDPH-SAL_Salmonella_Typhi_MDL-150,CDPH-SAL.Salmonella.Typhi.MDL-150,Feist_11661_P40,O1,iTru7_108_02,GTCCTAAG,iTru5_08_A,CATCTGCT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-150 +1,CDPH-SAL_Salmonella_Typhi_MDL-151,CDPH-SAL.Salmonella.Typhi.MDL-151,Feist_11661_P40,A3,iTru7_108_03,GAAGGTTC,iTru5_09_A,CTCTCAGA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-151 +1,CDPH-SAL_Salmonella_Typhi_MDL-152,CDPH-SAL.Salmonella.Typhi.MDL-152,Feist_11661_P40,C3,iTru7_108_04,GAAGAGGT,iTru5_10_A,TCGTCTGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-152 +1,CDPH-SAL_Salmonella_Typhi_MDL-153,CDPH-SAL.Salmonella.Typhi.MDL-153,Feist_11661_P40,E3,iTru7_108_05,TCTGAGAG,iTru5_11_A,CAATAGCC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-153 +1,CDPH-SAL_Salmonella_Typhi_MDL-154,CDPH-SAL.Salmonella.Typhi.MDL-154,Feist_11661_P40,G3,iTru7_108_06,ACCGCATA,iTru5_12_A,CATTCGTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-154 +1,CDPH-SAL_Salmonella_Typhi_MDL-155,CDPH-SAL.Salmonella.Typhi.MDL-155,Feist_11661_P40,I3,iTru7_108_07,GAAGTACC,iTru5_01_B,AGTGGCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-155 +1,CDPH-SAL_Salmonella_Typhi_MDL-156,CDPH-SAL.Salmonella.Typhi.MDL-156,Feist_11661_P40,K3,iTru7_108_08,CAGGTATC,iTru5_02_B,GTGGTATG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-156 +1,CDPH-SAL_Salmonella_Typhi_MDL-157,CDPH-SAL.Salmonella.Typhi.MDL-157,Feist_11661_P40,M3,iTru7_108_09,TCTCTAGG,iTru5_03_B,TGAGCTGT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-157 +1,CDPH-SAL_Salmonella_Typhi_MDL-158,CDPH-SAL.Salmonella.Typhi.MDL-158,Feist_11661_P40,O3,iTru7_108_10,AAGCACTG,iTru5_04_B,CGTCAAGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-158 +1,CDPH-SAL_Salmonella_Typhi_MDL-159,CDPH-SAL.Salmonella.Typhi.MDL-159,Feist_11661_P40,A5,iTru7_108_11,CCAAGCAA,iTru5_05_B,AAGCATCG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-159 +1,CDPH-SAL_Salmonella_Typhi_MDL-160,CDPH-SAL.Salmonella.Typhi.MDL-160,Feist_11661_P40,C5,iTru7_108_12,TGTTCGAG,iTru5_06_B,TACTCCAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-160 +1,CDPH-SAL_Salmonella_Typhi_MDL-161,CDPH-SAL.Salmonella.Typhi.MDL-161,Feist_11661_P40,E5,iTru7_109_01,CTCGTCTT,iTru5_07_B,GATACCTG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-161 +1,CDPH-SAL_Salmonella_Typhi_MDL-162,CDPH-SAL.Salmonella.Typhi.MDL-162,Feist_11661_P40,G5,iTru7_109_02,CGAACTGT,iTru5_08_B,ACCTCTTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-162 +1,CDPH-SAL_Salmonella_Typhi_MDL-163,CDPH-SAL.Salmonella.Typhi.MDL-163,Feist_11661_P40,I5,iTru7_109_03,CATTCGGT,iTru5_09_B,ACGGACTT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-163 +1,CDPH-SAL_Salmonella_Typhi_MDL-164,CDPH-SAL.Salmonella.Typhi.MDL-164,Feist_11661_P40,K5,iTru7_109_04,TCGGTTAC,iTru5_10_B,CATGTGTG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-164 +1,CDPH-SAL_Salmonella_Typhi_MDL-165,CDPH-SAL.Salmonella.Typhi.MDL-165,Feist_11661_P40,M5,iTru7_109_05,AAGTCGAG,iTru5_11_B,TGCCTCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-165 +1,CDPH-SAL_Salmonella_Typhi_MDL-166,CDPH-SAL.Salmonella.Typhi.MDL-166,Feist_11661_P40,O5,iTru7_109_06,TATCGGTC,iTru5_12_B,ATCTGACC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-166 +1,CDPH-SAL_Salmonella_Typhi_MDL-167,CDPH-SAL.Salmonella.Typhi.MDL-167,Feist_11661_P40,A7,iTru7_109_07,TATTCGCC,iTru5_01_C,CACAGACT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-167 +1,CDPH-SAL_Salmonella_Typhi_MDL-168,CDPH-SAL.Salmonella.Typhi.MDL-168,Feist_11661_P40,C7,iTru7_109_08,GTATTGGC,iTru5_02_C,CACTGTAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-168 +1,P21_E_coli_ELI344,P21.E.coli.ELI344,Feist_11661_P40,E7,iTru7_109_09,AGTCGCTT,iTru5_03_C,CACAGGAA,Feist_11661,pool1,P21_E. coli_ELI344 +1,P21_E_coli_ELI345,P21.E.coli.ELI345,Feist_11661_P40,G7,iTru7_109_10,TGGCACTA,iTru5_04_C,CCATGAAC,Feist_11661,pool2,P21_E. coli_ELI345 +1,P21_E_coli_ELI347,P21.E.coli.ELI347,Feist_11661_P40,I7,iTru7_109_11,GGTTGTCA,iTru5_05_C,GCCAATAC,Feist_11661,pool1,P21_E. coli_ELI347 +1,P21_E_coli_ELI348,P21.E.coli.ELI348,Feist_11661_P40,K7,iTru7_109_12,AACCTCCT,iTru5_06_C,AGCTACCA,Feist_11661,pool2,P21_E. coli_ELI348 +1,P21_E_coli_ELI349,P21.E.coli.ELI349,Feist_11661_P40,M7,iTru7_110_01,ATGACCAG,iTru5_07_C,AACCGAAC,Feist_11661,pool1,P21_E. coli_ELI349 +1,P21_E_coli_ELI350,P21.E.coli.ELI350,Feist_11661_P40_diluted,O7,iTru7_110_02,AACCGTTC,iTru5_08_C,ATCGCAAC,Feist_11661,pool2,P21_E. coli_ELI350 +1,P21_E_coli_ELI351,P21.E.coli.ELI351,Feist_11661_P40,A9,iTru7_110_03,TCCAATCG,iTru5_09_C,GTTGCTGT,Feist_11661,pool1,P21_E. coli_ELI351 +1,P21_E_coli_ELI352,P21.E.coli.ELI352,Feist_11661_P40,C9,iTru7_110_04,CTGCACTT,iTru5_10_C,TCTAGTCC,Feist_11661,pool2,P21_E. coli_ELI352 +1,P21_E_coli_ELI353,P21.E.coli.ELI353,Feist_11661_P40,E9,iTru7_110_05,CGCTTAAC,iTru5_11_C,GACGAACT,Feist_11661,pool1,P21_E. coli_ELI353 +1,P21_E_coli_ELI354,P21.E.coli.ELI354,Feist_11661_P40,G9,iTru7_110_06,CACCACTA,iTru5_12_C,TTCGTACG,Feist_11661,pool2,P21_E. coli_ELI354 +1,P21_E_coli_ELI355,P21.E.coli.ELI355,Feist_11661_P40,I9,iTru7_110_07,ACAGCAAC,iTru5_01_D,CGACACTT,Feist_11661,pool1,P21_E. coli_ELI355 +1,P21_E_coli_ELI357,P21.E.coli.ELI357,Feist_11661_P40,K9,iTru7_110_08,GGAAGGAT,iTru5_02_D,AGACGCTA,Feist_11661,pool2,P21_E. coli_ELI357 +1,P21_E_coli_ELI358,P21.E.coli.ELI358,Feist_11661_P40_diluted,M9,iTru7_110_09,GGCGTTAT,iTru5_03_D,TGACAACC,Feist_11661,pool1,P21_E. coli_ELI358 +1,P21_E_coli_ELI359,P21.E.coli.ELI359,Feist_11661_P40,O9,iTru7_110_10,CTGTTGAC,iTru5_04_D,GGTACTTC,Feist_11661,pool2,P21_E. coli_ELI359 +1,P21_E_coli_ELI361,P21.E.coli.ELI361,Feist_11661_P40_diluted,A11,iTru7_110_11,GTCATCGA,iTru5_05_D,CTGTATGC,Feist_11661,pool1,P21_E. coli_ELI361 +1,P21_E_coli_ELI362,P21.E.coli.ELI362,Feist_11661_P40,C11,iTru7_110_12,TGACTTCG,iTru5_06_D,TCGACAAG,Feist_11661,pool2,P21_E. coli_ELI362 +1,P21_E_coli_ELI363,P21.E.coli.ELI363,Feist_11661_P40_diluted,E11,iTru7_111_01,CGATAGAG,iTru5_07_D,GCTGAATC,Feist_11661,pool1,P21_E. coli_ELI363 +1,P21_E_coli_ELI364,P21.E.coli.ELI364,Feist_11661_P40,G11,iTru7_111_02,TTCGTTGG,iTru5_08_D,AGTTGTGC,Feist_11661,pool2,P21_E. coli_ELI364 +1,P21_E_coli_ELI365,P21.E.coli.ELI365,Feist_11661_P40,I11,iTru7_111_03,TGGAGAGT,iTru5_09_D,TGTCGACT,Feist_11661,pool1,P21_E. coli_ELI365 +1,P21_E_coli_ELI366,P21.E.coli.ELI366,Feist_11661_P40_diluted,K11,iTru7_111_04,TCAGACGA,iTru5_10_D,AAGGCTCT,Feist_11661,pool2,P21_E. coli_ELI366 +1,P21_E_coli_ELI367,P21.E.coli.ELI367,Feist_11661_P40_diluted,M11,iTru7_111_05,GACGAATG,iTru5_11_D,CCTAACAG,Feist_11661,pool1,P21_E. coli_ELI367 +1,P21_E_coli_ELI368,P21.E.coli.ELI368,Feist_11661_P40,O11,iTru7_111_06,CATGAGGA,iTru5_12_D,AAGACGAG,Feist_11661,pool2,P21_E. coli_ELI368 +1,P21_E_coli_ELI369,P21.E.coli.ELI369,Feist_11661_P40,A13,iTru7_111_07,CGGTTGTT,iTru5_01_E,GACTTGTG,Feist_11661,pool1,P21_E. coli_ELI369 +1,stALE_E_coli_A1_F21_I1_R1,stALE.E.coli.A1.F21.I1.R1,Feist_11661_P40,C13,iTru7_111_08,TCCGTATG,iTru5_02_E,CAACTCCA,Feist_11661,pool2,stALE_E. coli_A1.F21.I1.R1 +1,stALE_E_coli_A2_F21_I1_R1,stALE.E.coli.A2.F21.I1.R1,Feist_11661_P40,E13,iTru7_111_09,TGTGGTAC,iTru5_03_E,TGTTCCGT,Feist_11661,pool1,stALE_E. coli_A2.F21.I1.R1 +1,stALE_E_coli_A3_F18_I1_R1,stALE.E.coli.A3.F18.I1.R1,Feist_11661_P40,G13,iTru7_111_10,AGAACGAG,iTru5_04_E,ACCGCTAT,Feist_11661,pool2,stALE_E. coli_A3.F18.I1.R1 +1,stALE_E_coli_A3_F40_I1_R1,stALE.E.coli.A3.F40.I1.R1,Feist_11661_P40,I13,iTru7_111_11,CTTCGTTC,iTru5_05_E,CTTAGGAC,Feist_11661,pool1,stALE_E. coli_A3.F40.I1.R1 +1,stALE_E_coli_A4_F21_I1_R1,stALE.E.coli.A4.F21.I1.R1,Feist_11661_P40,K13,iTru7_111_12,CCAATAGG,iTru5_06_E,TATGACCG,Feist_11661,pool2,stALE_E. coli_A4.F21.I1.R1 +1,stALE_E_coli_A4_F21_I1_R2,stALE.E.coli.A4.F21.I1.R2,Feist_11661_P40,M13,iTru7_112_01,ACCATCCA,iTru5_07_E,AGCTAGTG,Feist_11661,pool1,stALE_E. coli_A4.F21.I1.R2 +1,stALE_E_coli_A4_F42_I1_R1,stALE.E.coli.A4.F42.I1.R1,Feist_11661_P40,O13,iTru7_112_02,CACACATG,iTru5_08_E,GAACGAAG,Feist_11661,pool2,stALE_E. coli_A4.F42.I1.R1 +1,stALE_E_coli_A5_F21_I1_R1,stALE.E.coli.A5.F21.I1.R1,Feist_11661_P40,A15,iTru7_112_03,CTTGTCGA,iTru5_09_E,CGTCTAAC,Feist_11661,pool1,stALE_E. coli_A5.F21.I1.R1 +1,stALE_E_coli_A5_F42_I1_R1,stALE.E.coli.A5.F42.I1.R1,Feist_11661_P40,C15,iTru7_112_04,AGTCTCAC,iTru5_10_E,AACCAGAG,Feist_11661,pool2,stALE_E. coli_A5.F42.I1.R1 +1,stALE_E_coli_A6_F21_I1_R1,stALE.E.coli.A6.F21.I1.R1,Feist_11661_P40,E15,iTru7_112_05,AGTTGGCT,iTru5_11_E,CGCCTTAT,Feist_11661,pool1,stALE_E. coli_A6.F21.I1.R1 +1,stALE_E_coli_A6_F43_I1_R1,stALE.E.coli.A6.F43.I1.R1,Feist_11661_P40,G15,iTru7_112_06,CCGGAATT,iTru5_12_E,CTCGTTCT,Feist_11661,pool2,stALE_E. coli_A6.F43.I1.R1 +1,stALE_E_coli_A7_F21_I1_R1,stALE.E.coli.A7.F21.I1.R1,Feist_11661_P40,I15,iTru7_112_07,CAGTGAAG,iTru5_01_F,GTGAGACT,Feist_11661,pool1,stALE_E. coli_A7.F21.I1.R1 +1,stALE_E_coli_A7_F42_I1_R1,stALE.E.coli.A7.F42.I1.R1,Feist_11661_P40,K15,iTru7_112_08,CCTACTGA,iTru5_02_F,AACACGCT,Feist_11661,pool2,stALE_E. coli_A7.F42.I1.R1 +1,stALE_E_coli_A8_F20_I1_R1,stALE.E.coli.A8.F20.I1.R1,Feist_11661_P40,M15,iTru7_112_09,TGTGAAGC,iTru5_03_F,CCTAGAGA,Feist_11661,pool1,stALE_E. coli_A8.F20.I1.R1 +1,stALE_E_coli_A8_F42_I1_R1,stALE.E.coli.A8.F42.I1.R1,Feist_11661_P40,O15,iTru7_112_10,GTCTGATC,iTru5_04_F,TTCCAGGT,Feist_11661,pool2,stALE_E. coli_A8.F42.I1.R1 +1,stALE_E_coli_A9_F21_I1_R1,stALE.E.coli.A9.F21.I1.R1,Feist_11661_P40,A17,iTru7_112_11,TTCAGGAG,iTru5_05_F,TCAGCCTT,Feist_11661,pool1,stALE_E. coli_A9.F21.I1.R1 +1,stALE_E_coli_A9_F44_I1_R1,stALE.E.coli.A9.F44.I1.R1,Feist_11661_P40,C17,iTru7_112_12,ACGATGAC,iTru5_06_F,AGCCAACT,Feist_11661,pool2,stALE_E. coli_A9.F44.I1.R1 +1,stALE_E_coli_A10_F21_I1_R1,stALE.E.coli.A10.F21.I1.R1,Feist_11661_P40,E17,iTru7_113_01,CGTTATGC,iTru5_07_F,CTAGCTCA,Feist_11661,pool1,stALE_E. coli_A10.F21.I1.R1 +1,stALE_E_coli_A10_F43_I1_R1,stALE.E.coli.A10.F43.I1.R1,Feist_11661_P40,G17,iTru7_113_02,GATACTGG,iTru5_08_F,GGAAGAGA,Feist_11661,pool2,stALE_E. coli_A10.F43.I1.R1 +1,stALE_E_coli_A10_F131_I1_R1,stALE.E.coli.A10.F131.I1.R1,Feist_11661_P40,I17,iTru7_113_03,CTACTTGG,iTru5_09_F,AACACTGG,Feist_11661,pool1,stALE_E. coli_A10.F131.I1.R1 +1,stALE_E_coli_A11_F21_I1_R1,stALE.E.coli.A11.F21.I1.R1,Feist_11661_P40,K17,iTru7_113_04,CATACCAC,iTru5_10_F,ACTATCGC,Feist_11661,pool2,stALE_E. coli_A11.F21.I1.R1 +1,stALE_E_coli_A11_F43_I1_R1,stALE.E.coli.A11.F43.I1.R1,Feist_11661_P40,M17,iTru7_113_05,ACATTGCG,iTru5_11_F,ACAACAGC,Feist_11661,pool1,stALE_E. coli_A11.F43.I1.R1 +1,stALE_E_coli_A11_F119_I1_R1,stALE.E.coli.A11.F119.I1.R1,Feist_11661_P40,O17,iTru7_113_06,TGATCGGA,iTru5_12_F,TGTGGCTT,Feist_11661,pool2,stALE_E. coli_A11.F119.I1.R1 +1,stALE_E_coli_A12_F21_I1_R1,stALE.E.coli.A12.F21.I1.R1,Feist_11661_P40,A19,iTru7_113_07,AAGTGTCG,iTru5_01_G,GTTCCATG,Feist_11661,pool1,stALE_E. coli_A12.F21.I1.R1 +1,stALE_E_coli_A12_F43_I1_R1,stALE.E.coli.A12.F43.I1.R1,Feist_11661_P40,C19,iTru7_113_08,GAACGCTT,iTru5_02_G,TGGATGGT,Feist_11661,pool2,stALE_E. coli_A12.F43.I1.R1 +1,stALE_E_coli_A12_F136_I1_R1,stALE.E.coli.A12.F136.I1.R1,Feist_11661_P40,E19,iTru7_113_09,TCAAGGAC,iTru5_03_G,GCATAACG,Feist_11661,pool1,stALE_E. coli_A12.F136.I1.R1 +1,stALE_E_coli_A13_F20_I1_R1,stALE.E.coli.A13.F20.I1.R1,Feist_11661_P40,G19,iTru7_113_10,TCAACTGG,iTru5_04_G,TCGAACCT,Feist_11661,pool2,stALE_E. coli_A13.F20.I1.R1 +1,stALE_E_coli_A13_F42_I1_R1,stALE.E.coli.A13.F42.I1.R1,Feist_11661_P40,I19,iTru7_113_11,GGTTGATG,iTru5_05_G,ACATGCCA,Feist_11661,pool1,stALE_E. coli_A13.F42.I1.R1 +1,stALE_E_coli_A13_F121_I1_R1,stALE.E.coli.A13.F121.I1.R1,Feist_11661_P40,K19,iTru7_113_12,AAGGACAC,iTru5_06_G,GATCTTGC,Feist_11661,pool2,stALE_E. coli_A13.F121.I1.R1 +1,stALE_E_coli_A14_F20_I1_R1,stALE.E.coli.A14.F20.I1.R1,Feist_11661_P40,M19,iTru7_114_01,TTGATCCG,iTru5_07_G,GTTAAGCG,Feist_11661,pool1,stALE_E. coli_A14.F20.I1.R1 +1,stALE_E_coli_A14_F42_I1_R1,stALE.E.coli.A14.F42.I1.R1,Feist_11661_P40,O19,iTru7_114_02,GGTGATTC,iTru5_08_G,GTCATCGT,Feist_11661,pool2,stALE_E. coli_A14.F42.I1.R1 +1,stALE_E_coli_A14_F133_I1_R1,stALE.E.coli.A14.F133.I1.R1,Feist_11661_P40,A21,iTru7_114_03,GATTGCTC,iTru5_09_G,TCAGACAC,Feist_11661,pool1,stALE_E. coli_A14.F133.I1.R1 +1,stALE_E_coli_A15_F21_I1_R1,stALE.E.coli.A15.F21.I1.R1,Feist_11661_P40,C21,iTru7_114_04,ACCTGGAA,iTru5_10_G,GTCCTAAG,Feist_11661,pool2,stALE_E. coli_A15.F21.I1.R1 +1,stALE_E_coli_A15_F42_I1_R1,stALE.E.coli.A15.F42.I1.R1,Feist_11661_P40,E21,iTru7_114_05,CATCTACG,iTru5_11_G,AGACCTTG,Feist_11661,pool1,stALE_E. coli_A15.F42.I1.R1 +1,stALE_E_coli_A15_F117_I1_R1,stALE.E.coli.A15.F117.I1.R1,Feist_11661_P40,G21,iTru7_114_06,CCGTATCT,iTru5_12_G,AGACATGC,Feist_11661,pool2,stALE_E. coli_A15.F117.I1.R1 +1,stALE_E_coli_A16_F20_I1_R1,stALE.E.coli.A16.F20.I1.R1,Feist_11661_P40,I21,iTru7_114_07,CGGAATAC,iTru5_01_H,TAGCTGAG,Feist_11661,pool1,stALE_E. coli_A16.F20.I1.R1 +1,stALE_E_coli_A16_F42_I1_R1,stALE.E.coli.A16.F42.I1.R1,Feist_11661_P40,K21,iTru7_114_08,CTCCTAGA,iTru5_02_H,TTCGAAGC,Feist_11661,pool2,stALE_E. coli_A16.F42.I1.R1 +1,stALE_E_coli_A16_F134_I1_R1,stALE.E.coli.A16.F134.I1.R1,Feist_11661_P40,M21,iTru7_114_09,TGGTAGCT,iTru5_03_H,CAGTGCTT,Feist_11661,pool1,stALE_E. coli_A16.F134.I1.R1 +1,stALE_E_coli_A17_F21_I1_R1,stALE.E.coli.A17.F21.I1.R1,Feist_11661_P40,O21,iTru7_114_10,TCGAAGGT,iTru5_04_H,TAGTGCCA,Feist_11661,pool2,stALE_E. coli_A17.F21.I1.R1 +1,stALE_E_coli_A17_F118_I1_R1,stALE.E.coli.A17.F118.I1.R1,Feist_11661_P40,A23,iTru7_114_11,ACATAGGC,iTru5_05_H,GATGGAGT,Feist_11661,pool1,stALE_E. coli_A17.F118.I1.R1 +1,stALE_E_coli_A18_F18_I1_R1,stALE.E.coli.A18.F18.I1.R1,Feist_11661_P40,C23,iTru7_114_12,CTCAGAGT,iTru5_06_H,CCTCGTTA,Feist_11661,pool2,stALE_E. coli_A18.F18.I1.R1 +1,stALE_E_coli_A18_F39_I1_R1,stALE.E.coli.A18.F39.I1.R1,Feist_11661_P40,E23,iTru7_201_01,CTTGGATG,iTru5_07_H,CGATTGGA,Feist_11661,pool1,stALE_E. coli_A18.F39.I1.R1 +1,stALE_E_coli_A18_F130_I1_R1,stALE.E.coli.A18.F130.I1.R1,Feist_11661_P40,G23,iTru7_201_02,CAGTTGGA,iTru5_08_H,CCAACGAA,Feist_11661,pool2,stALE_E. coli_A18.F130.I1.R1 +1,3A,3A,Gerwick_tubes,I23,iTru7_201_03,GATAGGCT,iTru5_09_H,AGAAGGAC,Gerwick_6123,pool1,3A +1,4A,4A,Gerwick_tubes,K23,iTru7_201_04,TTGACAGG,iTru5_10_H,TGACCGTT,Gerwick_6123,pool2,4A +1,BLANK_40_12G,BLANK.40.12G,Feist_11661_P40,M23,iTru7_201_05,AGAATGCC,iTru5_11_H,GCGTTAGA,Feist_11661,pool1,BLANK.40.12G +1,BLANK_40_12H,BLANK.40.12H,Feist_11661_P40,O23,iTru7_201_06,CTACATCC,iTru5_12_H,TCTAGGAG,Feist_11661,pool2,BLANK.40.12H +1,Pputida_JBEI__HGL_Pputida_107_BP6,Pputida.JBEI.HGL.Pputida.107.BP6,Feist_11661_P41,A2,iTru7_201_07,TCATGGTG,iTru5_13_A,GGTATAGG,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_107_BP6 +1,Pputida_JBEI__HGL_Pputida_108_BP7,Pputida.JBEI.HGL.Pputida.108.BP7,Feist_11661_P41,C2,iTru7_201_08,TACACGCT,iTru5_14_A,TCCGATCA,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_108_BP7 +1,Pputida_JBEI__HGL_Pputida_109_BP8,Pputida.JBEI.HGL.Pputida.109.BP8,Feist_11661_P41,E2,iTru7_201_09,TACGGTTG,iTru5_15_A,CGACCTAA,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_109_BP8 +1,Pputida_JBEI__HGL_Pputida_110_M2,Pputida.JBEI.HGL.Pputida.110.M2,Feist_11661_P41,G2,iTru7_201_10,GGATACCA,iTru5_16_A,GACATCTC,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_110_M2 +1,Pputida_JBEI__HGL_Pputida_111_M5,Pputida.JBEI.HGL.Pputida.111.M5,Feist_11661_P41,I2,iTru7_201_11,TCGACATC,iTru5_17_A,CCAGTATC,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_111_M5 +1,Pputida_TALE__HGL_Pputida_112,Pputida.TALE.HGL.Pputida.112,Feist_11661_P41,K2,iTru7_201_12,GTTGTAGC,iTru5_18_A,ACGCTTCT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_112 +1,Pputida_TALE__HGL_Pputida_113,Pputida.TALE.HGL.Pputida.113,Feist_11661_P41,M2,iTru7_202_01,ATACGACC,iTru5_19_A,AACGCACA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_113 +1,Pputida_TALE__HGL_Pputida_114,Pputida.TALE.HGL.Pputida.114,Feist_11661_P41,O2,iTru7_202_02,TTCCAAGG,iTru5_20_A,TGATCACG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_114 +1,Pputida_TALE__HGL_Pputida_115,Pputida.TALE.HGL.Pputida.115,Feist_11661_P41,A4,iTru7_202_03,TTGCAGAC,iTru5_21_A,GCGTATCA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_115 +1,Pputida_TALE__HGL_Pputida_116,Pputida.TALE.HGL.Pputida.116,Feist_11661_P41,C4,iTru7_202_04,TGCCATTC,iTru5_22_A,GTGTCCTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_116 +1,Pputida_TALE__HGL_Pputida_117,Pputida.TALE.HGL.Pputida.117,Feist_11661_P41,E4,iTru7_202_05,GATGTGTG,iTru5_23_A,GGTAACGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_117 +1,Pputida_TALE__HGL_Pputida_118,Pputida.TALE.HGL.Pputida.118,Feist_11661_P41,G4,iTru7_202_06,ACTCTCGA,iTru5_24_A,CGAGAGAA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_118 +1,Pputida_TALE__HGL_Pputida_119,Pputida.TALE.HGL.Pputida.119,Feist_11661_P41,I4,iTru7_202_07,GAGTCTCT,iTru5_13_B,CATTGACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_119 +1,Pputida_TALE__HGL_Pputida_120,Pputida.TALE.HGL.Pputida.120,Feist_11661_P41,K4,iTru7_202_08,CAACACCT,iTru5_14_B,GGTGATGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_120 +1,Pputida_TALE__HGL_Pputida_121,Pputida.TALE.HGL.Pputida.121,Feist_11661_P41,M4,iTru7_202_09,CAGTCTTC,iTru5_15_B,AACCGTGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_121 +1,Pputida_TALE__HGL_Pputida_122,Pputida.TALE.HGL.Pputida.122,Feist_11661_P41,O4,iTru7_202_10,GGACTGTT,iTru5_16_B,CCTATTGG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_122 +1,Pputida_TALE__HGL_Pputida_123,Pputida.TALE.HGL.Pputida.123,Feist_11661_P41,A6,iTru7_202_11,CTTAGTGG,iTru5_17_B,TCAGTAGG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_123 +1,Pputida_TALE__HGL_Pputida_124,Pputida.TALE.HGL.Pputida.124,Feist_11661_P41,C6,iTru7_202_12,ATTGCGTG,iTru5_18_B,TATGCGGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_124 +1,Pputida_TALE__HGL_Pputida_125,Pputida.TALE.HGL.Pputida.125,Feist_11661_P41,E6,iTru7_203_01,GTAACGAC,iTru5_19_B,ATGCCTAG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_125 +1,Pputida_TALE__HGL_Pputida_126,Pputida.TALE.HGL.Pputida.126,Feist_11661_P41,G6,iTru7_203_02,CTTGCTGT,iTru5_20_B,CTAGCAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_126 +1,Pputida_TALE__HGL_Pputida_127,Pputida.TALE.HGL.Pputida.127,Feist_11661_P41,I6,iTru7_203_03,GTTGTTCG,iTru5_21_B,AGGTCAAC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_127 +1,Pputida_TALE__HGL_Pputida_128,Pputida.TALE.HGL.Pputida.128,Feist_11661_P41,K6,iTru7_203_04,CGTTGAGT,iTru5_22_B,GAACGTGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_128 +1,Pputida_TALE__HGL_Pputida_129,Pputida.TALE.HGL.Pputida.129,Feist_11661_P41,M6,iTru7_203_05,TCGAACCA,iTru5_23_B,ATCATGCG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_129 +1,Pputida_TALE__HGL_Pputida_130,Pputida.TALE.HGL.Pputida.130,Feist_11661_P41,O6,iTru7_203_06,AGACCGTA,iTru5_24_B,CAACGAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_130 +1,Pputida_TALE__HGL_Pputida_131,Pputida.TALE.HGL.Pputida.131,Feist_11661_P41,A8,iTru7_203_07,CAGAGTGT,iTru5_13_C,CGCAATGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_131 +1,Pputida_TALE__HGL_Pputida_132,Pputida.TALE.HGL.Pputida.132,Feist_11661_P41,C8,iTru7_203_08,GACAAGAG,iTru5_14_C,AACAAGGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_132 +1,Pputida_TALE__HGL_Pputida_133,Pputida.TALE.HGL.Pputida.133,Feist_11661_P41,E8,iTru7_203_09,GAACACAC,iTru5_15_C,ACCATGTC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_133 +1,Pputida_TALE__HGL_Pputida_134,Pputida.TALE.HGL.Pputida.134,Feist_11661_P41,G8,iTru7_203_10,GCTTAGCT,iTru5_16_C,AATCCAGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_134 +1,Pputida_TALE__HGL_Pputida_135,Pputida.TALE.HGL.Pputida.135,Feist_11661_P41,I8,iTru7_203_11,GAAGGAAG,iTru5_17_C,TTGCAACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_135 +1,Pputida_TALE__HGL_Pputida_136,Pputida.TALE.HGL.Pputida.136,Feist_11661_P41,K8,iTru7_203_12,CAGTTCTG,iTru5_18_C,ACCTTCGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_136 +1,Pputida_TALE__HGL_Pputida_137,Pputida.TALE.HGL.Pputida.137,Feist_11661_P41,M8,iTru7_204_01,CAGGAGAT,iTru5_19_C,CATACGGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_137 +1,Pputida_TALE__HGL_Pputida_138,Pputida.TALE.HGL.Pputida.138,Feist_11661_P41,O8,iTru7_204_02,GTAGCATC,iTru5_20_C,GACCGATA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_138 +1,Pputida_TALE__HGL_Pputida_139,Pputida.TALE.HGL.Pputida.139,Feist_11661_P41,A10,iTru7_204_03,TCGTTCGT,iTru5_21_C,AAGCTGGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_139 +1,Pputida_TALE__HGL_Pputida_140,Pputida.TALE.HGL.Pputida.140,Feist_11661_P41,C10,iTru7_204_04,GGCAAGTT,iTru5_22_C,ACACCTCA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_140 +1,Pputida_TALE__HGL_Pputida_141,Pputida.TALE.HGL.Pputida.141,Feist_11661_P41,E10,iTru7_204_05,ACCATGTG,iTru5_23_C,CGGAGTAT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_141 +1,Pputida_TALE__HGL_Pputida_142,Pputida.TALE.HGL.Pputida.142,Feist_11661_P41,G10,iTru7_204_06,CAACGGAT,iTru5_24_C,CTCGACTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_142 +1,Pputida_TALE__HGL_Pputida_143,Pputida.TALE.HGL.Pputida.143,Feist_11661_P41,I10,iTru7_204_07,CAATCGAC,iTru5_13_D,ATCCACGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_143 +1,Pputida_TALE__HGL_Pputida_144,Pputida.TALE.HGL.Pputida.144,Feist_11661_P41,K10,iTru7_204_08,GTGTTCCT,iTru5_14_D,ACAGTTCG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_144 +1,Pputida_PALE__HGL_Pputida_145,Pputida.PALE.HGL.Pputida.145,Feist_11661_P41_diluted,M10,iTru7_204_09,AGGAACCT,iTru5_15_D,ACAAGACG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_145 +1,Pputida_PALE__HGL_Pputida_146,Pputida.PALE.HGL.Pputida.146,Feist_11661_P41_diluted,O10,iTru7_204_10,ACCTTCTC,iTru5_16_D,ATCGTGGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_146 +1,Pputida_PALE__HGL_Pputida_147,Pputida.PALE.HGL.Pputida.147,Feist_11661_P41_diluted,A12,iTru7_204_11,CCGTAAGA,iTru5_17_D,AGTCAGGT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_147 +1,Pputida_PALE__HGL_Pputida_148,Pputida.PALE.HGL.Pputida.148,Feist_11661_P41_diluted,C12,iTru7_204_12,ATCGGTGT,iTru5_18_D,CATCAACC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_148 +1,Pputida_PALE__HGL_Pputida_149,Pputida.PALE.HGL.Pputida.149,Feist_11661_P41_diluted,E12,iTru7_205_01,AGCTCCTA,iTru5_19_D,GGTCACTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_149 +1,Pputida_PALE__HGL_Pputida_150,Pputida.PALE.HGL.Pputida.150,Feist_11661_P41,G12,iTru7_205_02,CCTTGATC,iTru5_20_D,CGGCATTA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_150 +1,Pputida_PALE__HGL_Pputida_151,Pputida.PALE.HGL.Pputida.151,Feist_11661_P41_diluted,I12,iTru7_205_03,CCATTCAC,iTru5_21_D,ACTCGATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_151 +1,Pputida_PALE__HGL_Pputida_152,Pputida.PALE.HGL.Pputida.152,Feist_11661_P41,K12,iTru7_205_04,GGACAATC,iTru5_22_D,ATAGGTCC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_152 +1,Pputida_PALE__HGL_Pputida_153,Pputida.PALE.HGL.Pputida.153,Feist_11661_P41,M12,iTru7_205_05,AAGGCGTT,iTru5_23_D,CAGTCACA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_153 +1,Pputida_PALE__HGL_Pputida_154,Pputida.PALE.HGL.Pputida.154,Feist_11661_P41_diluted,O12,iTru7_205_06,GCCATAAC,iTru5_24_D,TAGTGGTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_154 +1,Pputida_PALE__HGL_Pputida_155,Pputida.PALE.HGL.Pputida.155,Feist_11661_P41_diluted,A14,iTru7_205_07,GAAGTTGG,iTru5_13_E,CTCCTGAA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_155 +1,Pputida_PALE__HGL_Pputida_156,Pputida.PALE.HGL.Pputida.156,Feist_11661_P41_diluted,C14,iTru7_205_08,AGCCAAGT,iTru5_14_E,AATCGCTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_156 +1,Pputida_PALE__HGL_Pputida_157,Pputida.PALE.HGL.Pputida.157,Feist_11661_P41,E14,iTru7_205_09,TGACTGAC,iTru5_15_E,TGATAGGC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_157 +1,Pputida_PALE__HGL_Pputida_158,Pputida.PALE.HGL.Pputida.158,Feist_11661_P41_diluted,G14,iTru7_205_10,CACCTGTT,iTru5_16_E,ATGCGTCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_158 +1,Pputida_PALE__HGL_Pputida_159,Pputida.PALE.HGL.Pputida.159,Feist_11661_P41,I14,iTru7_205_11,ATCCGGTA,iTru5_17_E,CAGCATAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_159 +1,Pputida_PALE__HGL_Pputida_160,Pputida.PALE.HGL.Pputida.160,Feist_11661_P41,K14,iTru7_205_12,ATCTGTCC,iTru5_18_E,AAGTGCAG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_160 +1,Pputida_PALE__HGL_Pputida_161,Pputida.PALE.HGL.Pputida.161,Feist_11661_P41_diluted,M14,iTru7_206_01,CCAAGACT,iTru5_19_E,GTATTCCG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_161 +1,Pputida_PALE__HGL_Pputida_162,Pputida.PALE.HGL.Pputida.162,Feist_11661_P41_diluted,O14,iTru7_206_02,ATGGCGAA,iTru5_20_E,GTGATCCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_162 +1,Pputida_PALE__HGL_Pputida_163,Pputida.PALE.HGL.Pputida.163,Feist_11661_P41_diluted,A16,iTru7_206_03,GGTAGTGT,iTru5_21_E,TATGGCAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_163 +1,Pputida_PALE__HGL_Pputida_164,Pputida.PALE.HGL.Pputida.164,Feist_11661_P41,C16,iTru7_206_04,TCGCTGTT,iTru5_22_E,ACCATAGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_164 +1,Pputida_PALE__HGL_Pputida_165,Pputida.PALE.HGL.Pputida.165,Feist_11661_P41_diluted,E16,iTru7_206_05,AACGTGGA,iTru5_23_E,CTCCAATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_165 +1,Pputida_PALE__HGL_Pputida_166,Pputida.PALE.HGL.Pputida.166,Feist_11661_P41,G16,iTru7_206_06,AACGACGT,iTru5_24_E,AGATACGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_166 +1,Pputida_PALE__HGL_Pputida_167,Pputida.PALE.HGL.Pputida.167,Feist_11661_P41,I16,iTru7_206_07,AACAGGAC,iTru5_13_F,TCGATGAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_167 +1,Pputida_PALE__HGL_Pputida_168,Pputida.PALE.HGL.Pputida.168,Feist_11661_P41,K16,iTru7_206_08,AAGCGCAT,iTru5_14_F,CCAACACT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_168 +1,Pputida_PALE__HGL_Pputida_169,Pputida.PALE.HGL.Pputida.169,Feist_11661_P41,M16,iTru7_206_09,CACTGACA,iTru5_15_F,CTTCACTG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_169 +1,Pputida_PALE__HGL_Pputida_170,Pputida.PALE.HGL.Pputida.170,Feist_11661_P41,O16,iTru7_206_10,AGGTCACT,iTru5_16_F,CGATGTTC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_170 +1,Pputida_PALE__HGL_Pputida_171,Pputida.PALE.HGL.Pputida.171,Feist_11661_P41,A18,iTru7_206_11,GTCACTGT,iTru5_17_F,ACCGGTTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_171 +1,Pputida_PALE__HGL_Pputida_172,Pputida.PALE.HGL.Pputida.172,Feist_11661_P41,C18,iTru7_206_12,ATGCCAAC,iTru5_18_F,CTTACAGC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_172 +1,Pputida_PALE__HGL_Pputida_173,Pputida.PALE.HGL.Pputida.173,Feist_11661_P41,E18,iTru7_207_01,CACGTTGT,iTru5_19_F,TGGCTCTT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_173 +1,Pputida_PALE__HGL_Pputida_174,Pputida.PALE.HGL.Pputida.174,Feist_11661_P41_diluted,G18,iTru7_207_02,TATTCCGG,iTru5_20_F,AAGACCGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_174 +1,Pputida_PALE__HGL_Pputida_175,Pputida.PALE.HGL.Pputida.175,Feist_11661_P41,I18,iTru7_207_03,TGCTTCCA,iTru5_21_F,GGACATCA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_175 +1,Pputida_PALE__HGL_Pputida_176,Pputida.PALE.HGL.Pputida.176,Feist_11661_P41_diluted,K18,iTru7_207_04,GTCTAGGT,iTru5_22_F,TTGGTGCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_176 +1,JM-Metabolic__GN0_2005,JM-Metabolic.GN0.2005,Feist_11661_P41,M18,iTru7_207_05,GTTCAACC,iTru5_23_F,AAGCGTTC,Feist_11661,pool1,JM-Metabolic__GN0_2005 +1,JM-Metabolic__GN0_2007,JM-Metabolic.GN0.2007,Feist_11661_P41,O18,iTru7_207_06,CGCAATCT,iTru5_24_F,ACTCTCCA,Feist_11661,pool2,JM-Metabolic__GN0_2007 +1,JM-Metabolic__GN0_2009,JM-Metabolic.GN0.2009,Feist_11661_P41,A20,iTru7_207_07,TTAAGCGG,iTru5_13_G,GAACCTTC,Feist_11661,pool1,JM-Metabolic__GN0_2009 +1,JM-Metabolic__GN0_2094,JM-Metabolic.GN0.2094,Feist_11661_P41_diluted,C20,iTru7_207_08,TGCTTGGT,iTru5_14_G,GGAACATG,Feist_11661,pool2,JM-Metabolic__GN0_2094 +1,JM-Metabolic__GN0_2099,JM-Metabolic.GN0.2099,Feist_11661_P41_diluted,E20,iTru7_207_09,ACACACTC,iTru5_15_G,GCCTATGT,Feist_11661,pool1,JM-Metabolic__GN0_2099 +1,JM-Metabolic__GN0_2148,JM-Metabolic.GN0.2148,Feist_11661_P41_diluted,G20,iTru7_207_10,CCACTTCT,iTru5_16_G,CCGTAACT,Feist_11661,pool2,JM-Metabolic__GN0_2148 +1,JM-Metabolic__GN0_2165,JM-Metabolic.GN0.2165,Feist_11661_P41_diluted,I20,iTru7_207_11,TTGGTCTC,iTru5_17_G,CGGATCAA,Feist_11661,pool1,JM-Metabolic__GN0_2165 +1,JM-Metabolic__GN0_2169,JM-Metabolic.GN0.2169,Feist_11661_P41,K20,iTru7_207_12,CTCATCAG,iTru5_18_G,CCACATTG,Feist_11661,pool2,JM-Metabolic__GN0_2169 +1,JM-Metabolic__GN0_2172,JM-Metabolic.GN0.2172,Feist_11661_P41,M20,iTru7_208_01,ATGACGTC,iTru5_19_G,CTCTATCG,Feist_11661,pool1,JM-Metabolic__GN0_2172 +1,JM-Metabolic__GN0_2175,JM-Metabolic.GN0.2175,Feist_11661_P41,O20,iTru7_208_02,AACCTTGG,iTru5_20_G,TGTGTCAG,Feist_11661,pool2,JM-Metabolic__GN0_2175 +1,JM-Metabolic__GN0_2183,JM-Metabolic.GN0.2183,Feist_11661_P41_diluted,A22,iTru7_208_03,GTCTTGCA,iTru5_21_G,CGCAACTA,Feist_11661,pool1,JM-Metabolic__GN0_2183 +1,JM-Metabolic__GN0_2215,JM-Metabolic.GN0.2215,Feist_11661_P41_diluted,C22,iTru7_208_04,CAAGTGCA,iTru5_22_G,GATCAGAC,Feist_11661,pool2,JM-Metabolic__GN0_2215 +1,JM-Metabolic__GN0_2254,JM-Metabolic.GN0.2254,Feist_11661_P41_diluted,E22,iTru7_208_05,TCCGAGTT,iTru5_23_G,ATTCCGCT,Feist_11661,pool1,JM-Metabolic__GN0_2254 +1,JM-Metabolic__GN0_2277,JM-Metabolic.GN0.2277,Feist_11661_P41_diluted,G22,iTru7_208_06,ACCTAAGG,iTru5_24_G,ATCCTTCC,Feist_11661,pool2,JM-Metabolic__GN0_2277 +1,JM-Metabolic__GN0_2290,JM-Metabolic.GN0.2290,Feist_11661_P41,I22,iTru7_208_07,TTGGACGT,iTru5_13_H,GCTTCACA,Feist_11661,pool1,JM-Metabolic__GN0_2290 +1,JM-Metabolic__GN0_2337,JM-Metabolic.GN0.2337,Feist_11661_P41_diluted,K22,iTru7_208_08,GATAGCGA,iTru5_14_H,CTTCGGTT,Feist_11661,pool2,JM-Metabolic__GN0_2337 +1,JM-Metabolic__GN0_2317,JM-Metabolic.GN0.2317,Feist_11661_P41_diluted,M22,iTru7_208_09,TTGGTGAG,iTru5_15_H,CATGGATC,Feist_11661,pool1,JM-Metabolic__GN0_2317 +1,JM-Metabolic__GN0_2354,JM-Metabolic.GN0.2354,Feist_11661_P41_diluted,O22,iTru7_208_10,AACTGGTG,iTru5_16_H,GTCAACAG,Feist_11661,pool2,JM-Metabolic__GN0_2354 +1,JM-Metabolic__GN0_2375,JM-Metabolic.GN0.2375,Feist_11661_P41_diluted,A24,iTru7_208_11,TAGCCGAA,iTru5_17_H,AATTCCGG,Feist_11661,pool1,JM-Metabolic__GN0_2375 +1,JM-Metabolic__GN0_2380,JM-Metabolic.GN0.2380,Feist_11661_P41_diluted,C24,iTru7_208_12,TGCGAACT,iTru5_18_H,GGCGAATA,Feist_11661,pool2,JM-Metabolic__GN0_2380 +1,JM-Metabolic__GN0_2393,JM-Metabolic.GN0.2393,Feist_11661_P41_diluted,E24,iTru7_209_01,GACTTAGG,iTru5_19_H,AGGAGGTT,Feist_11661,pool1,JM-Metabolic__GN0_2393 +1,JM-Metabolic__GN0_2404,JM-Metabolic.GN0.2404,Feist_11661_P41_diluted,G24,iTru7_209_02,ACACCAGT,iTru5_20_H,ACTCTGAG,Feist_11661,pool2,JM-Metabolic__GN0_2404 +1,5B,5B,Gerwick_tubes,I24,iTru7_209_03,CCTGATTG,iTru5_21_H,GCCTTCTT,Gerwick_6123,pool1,5B +1,6A,6A,Gerwick_tubes,K24,iTru7_209_04,TTGTGTGC,iTru5_22_H,TGGACCAT,Gerwick_6123,pool2,6A +1,BLANK_41_12G,BLANK.41.12G,Feist_11661_P41,M24,iTru7_209_05,TACCACAG,iTru5_23_H,GCATAGTC,Gerwick_6123,pool1,BLANK.41.12G +1,BLANK_41_12H,BLANK.41.12H,Feist_11661_P41,O24,iTru7_209_06,ATTCGAGG,iTru5_24_H,TACACACG,Feist_11661,pool2,BLANK.41.12H +1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_14,Deoxyribose.PALE.ALE.MG1655.BOP27.4.14,Feist_11661_P42,B1,iTru7_209_07,GCACGTAA,iTru5_101_A,AACAACCG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_14 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_23,Deoxyribose.PALE.ALE.MG1655.BOP27.4.23,Feist_11661_P42,D1,iTru7_209_08,GTGTGACA,iTru5_102_A,AAGCCTGA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_4_23 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_48,Deoxyribose.PALE.ALE.MG1655.BOP27.4.48,Feist_11661_P42,F1,iTru7_209_09,CTGGTTCT,iTru5_103_A,AAGGACCA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_48 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_6_21,Deoxyribose.PALE.ALE.MG1655.BOP27.6.21,Feist_11661_P42,H1,iTru7_209_10,ACTGTGTC,iTru5_104_A,ACAACGTG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_6_21 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_6_35,Deoxyribose.PALE.ALE.MG1655.BOP27.6.35,Feist_11661_P42,J1,iTru7_209_11,CCATACGT,iTru5_105_A,ACGAACGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_6_35 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_13,Deoxyribose.PALE.ALE.MG1655.BOP27.10.13,Feist_11661_P42,L1,iTru7_209_12,GGTACTAC,iTru5_106_A,ACGTCCAA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_13 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_28,Deoxyribose.PALE.ALE.MG1655.BOP27.10.28,Feist_11661_P42,N1,iTru7_210_01,CAGTCCAA,iTru5_107_A,ACTGGTGT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_10_28 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_51,Deoxyribose.PALE.ALE.MG1655.BOP27.10.51,Feist_11661_P42,P1,iTru7_210_02,TCGTAGTC,iTru5_108_A,AGATCGTC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_51 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_19,Deoxyribose.PALE.ALE.MG1655.Lib4.18.19,Feist_11661_P42,B3,iTru7_210_03,TCGAGTGA,iTru5_109_A,AGCGAGAT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_19 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_59,Deoxyribose.PALE.ALE.MG1655.Lib4.18.59,Feist_11661_P42,D3,iTru7_210_04,TGTAGCCA,iTru5_110_A,AGGATAGC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_18_59 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_35,Deoxyribose.PALE.ALE.MG1655.Lib4.18.35,Feist_11661_P42,F3,iTru7_210_05,TGCAGGTA,iTru5_111_A,AGGTGTTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_35 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_16,Deoxyribose.PALE.ALE.MG1655.Lib4.20.16,Feist_11661_P42,H3,iTru7_210_06,CTAGGTGA,iTru5_112_A,AGTCTTGG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_16 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_43,Deoxyribose.PALE.ALE.MG1655.Lib4.20.43,Feist_11661_P42,J3,iTru7_210_07,CTCCATGT,iTru5_101_B,GGTTGGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_20_43 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_71,Deoxyribose.PALE.ALE.MG1655.Lib4.20.71,Feist_11661_P42,L3,iTru7_210_08,CTTACAGC,iTru5_102_B,GGAGGAAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_71 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_16,Deoxyribose.PALE.ALE.MG1655.Lib4.22.16,Feist_11661_P42,N3,iTru7_210_09,CGTATTCG,iTru5_103_B,GTAAGGTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_16 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_28,Deoxyribose.PALE.ALE.MG1655.Lib4.22.28,Feist_11661_P42,P3,iTru7_210_10,ATTCTGGC,iTru5_104_B,GGTGTACA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_22_28 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_52,Deoxyribose.PALE.ALE.MG1655.Lib4.22.52,Feist_11661_P42,B5,iTru7_210_11,TACCAGGA,iTru5_105_B,GGATGTAG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_52 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_9,Deoxyribose.PALE.ALE.MG1655.Lib4.24.9,Feist_11661_P42,D5,iTru7_210_12,TACATCGG,iTru5_106_B,GTCCTGTT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_9 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_24,Deoxyribose.PALE.ALE.MG1655.Lib4.24.24,Feist_11661_P42,F5,iTru7_301_01,GTGGTGTT,iTru5_107_B,GTACCACA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_24_24 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_52,Deoxyribose.PALE.ALE.MG1655.Lib4.24.52,Feist_11661_P42,H5,iTru7_301_02,CGCATGAT,iTru5_108_B,GATCTCAG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_52 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_6,Deoxyribose.PALE.ALE.MG1655.Lib4.26.6,Feist_11661_P42,J5,iTru7_301_03,AGTCGACA,iTru5_109_B,GAGCTCTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_6 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_27,Deoxyribose.PALE.ALE.MG1655.Lib4.26.27,Feist_11661_P42,L5,iTru7_301_04,GTGAGCTT,iTru5_110_B,TACTAGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_26_27 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_69,Deoxyribose.PALE.ALE.MG1655.Lib4.26.69,Feist_11661_P42,N5,iTru7_301_05,GACATTCC,iTru5_111_B,GCACACAA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_69 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_13,Deoxyribose.PALE.ALE.MG1655.Lib4.28.13,Feist_11661_P42,P5,iTru7_301_06,AGTTCGTC,iTru5_112_B,GAATCACC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_13 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_28,Deoxyribose.PALE.ALE.MG1655.Lib4.28.28,Feist_11661_P42,B7,iTru7_301_07,TAATGCCG,iTru5_101_C,AACAGCGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_28_28 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_53,Deoxyribose.PALE.ALE.MG1655.Lib4.28.53,Feist_11661_P42,D7,iTru7_301_08,CGACCATT,iTru5_102_C,AAGCGACT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_53 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_7,Deoxyribose.PALE.ALE.MG1655.Lib4.30.7,Feist_11661_P42,F7,iTru7_301_09,CTGAAGCT,iTru5_103_C,AAGGCGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_7 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_22,Deoxyribose.PALE.ALE.MG1655.Lib4.30.22,Feist_11661_P42,H7,iTru7_301_10,TTGAGGCA,iTru5_104_C,ACACCGAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_30_22 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_60,Deoxyribose.PALE.ALE.MG1655.Lib4.30.60,Feist_11661_P42,J7,iTru7_301_11,GATCGAGT,iTru5_105_C,ACGAATCC,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_60 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_6,Deoxyribose.PALE.ALE.MG1655.Lib4.32.6,Feist_11661_P42,L7,iTru7_301_12,ATACTCCG,iTru5_106_C,ACTACGGT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_6 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_20,Deoxyribose.PALE.ALE.MG1655.Lib4.32.20,Feist_11661_P42,N7,iTru7_302_01,AAGTCCGT,iTru5_107_C,AGAAGCCT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_32_20 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_56,Deoxyribose.PALE.ALE.MG1655.Lib4.32.56,Feist_11661_P42,P7,iTru7_302_02,TAGCGTCT,iTru5_108_C,AGATTGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_56 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_24,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.1.24,Feist_11661_P42,B9,iTru7_302_03,TGACGCAT,iTru5_109_C,AGCGTGTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_24 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_57,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.1.57,Feist_11661_P42,D9,iTru7_302_04,AGCGTGTT,iTru5_110_C,AGGCTGAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_57 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_69,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.1.69,Feist_11661_P42,F9,iTru7_302_05,TGCACCAA,iTru5_111_C,AGGTTCCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_69 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_23,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.3.23,Feist_11661_P42,H9,iTru7_302_06,ATCACACG,iTru5_112_C,AGTGACCT,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_23 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_50,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.3.50,Feist_11661_P42,J9,iTru7_302_07,ATGCCTGT,iTru5_101_D,GGTTAGCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_50 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_61,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.3.61,Feist_11661_P42,L9,iTru7_302_08,ACCTGACT,iTru5_102_D,GTAGCGTA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_61 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_22,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.5.22,Feist_11661_P42,N9,iTru7_302_09,GCTTCGAA,iTru5_103_D,GGACTACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_22 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_36,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.5.36,Feist_11661_P42,P9,iTru7_302_10,CGGTCATA,iTru5_104_D,TGGTTCGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_36 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_46,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.5.46,Feist_11661_P42,B11,iTru7_302_11,GTTAGACG,iTru5_105_D,GGAGTCTT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_46 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_23,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.7.23,Feist_11661_P42,D11,iTru7_302_12,TCTAACGC,iTru5_106_D,GGATTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_23 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_41,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.7.41,Feist_11661_P42,F11,iTru7_303_01,ATAGCGGT,iTru5_107_D,TCGGATTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_41 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_51,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.7.51,Feist_11661_P42,H11,iTru7_303_02,GGACCTAT,iTru5_108_D,GAGCAATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_51 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_25,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.17.25,Feist_11661_P42,J11,iTru7_303_03,CGATGCTT,iTru5_109_D,GATCCACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_25 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_58,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.17.58,Feist_11661_P42,L11,iTru7_303_04,GAGCTTGT,iTru5_110_D,GAAGACTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_58 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_64,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.17.64,Feist_11661_P42,N11,iTru7_303_05,GTGAAGTG,iTru5_111_D,GCCACTTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_64 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_25,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.19.25,Feist_11661_P42,P11,iTru7_303_06,GAGTGGTT,iTru5_112_D,TCCATTGC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_25 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_55,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.19.55,Feist_11661_P42,B13,iTru7_303_07,TGATACGC,iTru5_101_E,AACAGTCC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_55 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_63,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.19.63,Feist_11661_P42,D13,iTru7_303_08,AGCAGATG,iTru5_102_E,AAGCTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_63 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_23,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.21.23,Feist_11661_P42,F13,iTru7_303_09,CCAGTGTT,iTru5_103_E,AAGTCCTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_23 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_46,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.21.46,Feist_11661_P42,H13,iTru7_303_10,ATTCCTCC,iTru5_104_E,ACACTCTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_46 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_51,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.21.51,Feist_11661_P42,J13,iTru7_303_11,CTAACTCG,iTru5_105_E,ACGGTACA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_51 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_25,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.29.25,Feist_11661_P42,L13,iTru7_303_12,GATGAGAC,iTru5_106_E,ACTCCTAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_25 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_49,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.29.49,Feist_11661_P42,N13,iTru7_304_01,TCAGGCTT,iTru5_107_E,AGAGGATG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_49 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_57,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.29.57,Feist_11661_P42,P13,iTru7_304_02,GTTCTCGT,iTru5_108_E,AGCCGTAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_57 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_24,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.31.24,Feist_11661_P42,B15,iTru7_304_03,ATCGATCG,iTru5_109_E,AGCTTCAG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_24 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_42,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.31.42,Feist_11661_P42,D15,iTru7_304_04,CCTCAGTT,iTru5_110_E,AGGTAGGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_42 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_62,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.31.62,Feist_11661_P42,F15,iTru7_304_05,ACTGCTAG,iTru5_111_E,AGTACACG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_62 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_21,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.33.21,Feist_11661_P42,H15,iTru7_304_06,TCCGTGAA,iTru5_112_E,AGTGCATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_21 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_41,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.33.41,Feist_11661_P42,J15,iTru7_304_07,GGATTCGT,iTru5_101_F,TTGGACTG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_41 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_50,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.33.50,Feist_11661_P42,L15,iTru7_304_08,GGTCAGAT,iTru5_102_F,GTCGATTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_50 +1,JM-Metabolic__GN02514,JM-Metabolic.GN02514,Feist_11661_P42,N15,iTru7_304_09,TCGTGGAT,iTru5_103_F,GGCATTCT,Feist_11661,pool1,JM-Metabolic__GN02514 +1,JM-Metabolic__GN02529,JM-Metabolic.GN02529,Feist_11661_P42_diluted,P15,iTru7_304_10,CGTGTGTA,iTru5_104_F,TGGTATCC,Feist_11661,pool2,JM-Metabolic__GN02529 +1,JM-Metabolic__GN02531,JM-Metabolic.GN02531,Feist_11661_P42_diluted,B17,iTru7_304_11,GTGTCTGA,iTru5_105_F,GGCAAGTT,Feist_11661,pool1,JM-Metabolic__GN02531 +1,JM-Metabolic__GN02567,JM-Metabolic.GN02567,Feist_11661_P42,D17,iTru7_304_12,GAATCGTG,iTru5_106_F,GTCTGAGT,Feist_11661,pool2,JM-Metabolic__GN02567 +1,JM-Metabolic__GN02590,JM-Metabolic.GN02590,Feist_11661_P42_diluted,F17,iTru7_305_01,GCGATAGT,iTru5_107_F,TCTACGCA,Feist_11661,pool1,JM-Metabolic__GN02590 +1,JM-Metabolic__GN02657,JM-Metabolic.GN02657,Feist_11661_P42_diluted,H17,iTru7_305_02,GGCTATTG,iTru5_108_F,GAGGCATT,Feist_11661,pool2,JM-Metabolic__GN02657 +1,JM-Metabolic__GN02748,JM-Metabolic.GN02748,Feist_11661_P42,J17,iTru7_305_03,AGTTACGG,iTru5_109_F,GCTAAGGA,Feist_11661,pool1,JM-Metabolic__GN02748 +1,JM-Metabolic__GN02766,JM-Metabolic.GN02766,Feist_11661_P42_diluted,L17,iTru7_305_04,CGTACGAA,iTru5_110_F,GCCAGAAT,Feist_11661,pool2,JM-Metabolic__GN02766 +1,JM-Metabolic__GN02769,JM-Metabolic.GN02769,Feist_11661_P42_diluted,N17,iTru7_305_05,ACCACGAT,iTru5_111_F,TAAGTGGC,Feist_11661,pool1,JM-Metabolic__GN02769 +1,JM-Metabolic__GN02787,JM-Metabolic.GN02787,Feist_11661_P42_diluted,P17,iTru7_305_06,GATTACCG,iTru5_112_F,GCAATGAG,Feist_11661,pool2,JM-Metabolic__GN02787 +1,JM-Metabolic__GN03132,JM-Metabolic.GN03132,Feist_11661_P42,B19,iTru7_305_07,GAGATACG,iTru5_101_G,AACTGAGG,Feist_11661,pool1,JM-Metabolic__GN03132 +1,JM-Metabolic__GN03218,JM-Metabolic.GN03218,Feist_11661_P42_diluted,D19,iTru7_305_08,CGACGTTA,iTru5_102_G,AAGGAAGG,Feist_11661,pool2,JM-Metabolic__GN03218 +1,JM-Metabolic__GN03252,JM-Metabolic.GN03252,Feist_11661_P42_diluted,F19,iTru7_305_09,GAGATGTC,iTru5_103_G,AATGGTCG,Feist_11661,pool1,JM-Metabolic__GN03252 +1,JM-Metabolic__GN03409,JM-Metabolic.GN03409,Feist_11661_P42_diluted,H19,iTru7_305_10,GATTGGAG,iTru5_104_G,ACAGCAAG,Feist_11661,pool2,JM-Metabolic__GN03409 +1,JM-Metabolic__GN04014,JM-Metabolic.GN04014,Feist_11661_P42_diluted,J19,iTru7_305_11,GCAATTCG,iTru5_105_G,ACGTATGG,Feist_11661,pool1,JM-Metabolic__GN04014 +1,JM-Metabolic__GN04094,JM-Metabolic.GN04094,Feist_11661_P42_diluted,L19,iTru7_305_12,CGTCAATG,iTru5_106_G,ACTGCACT,Feist_11661,pool2,JM-Metabolic__GN04094 +1,JM-Metabolic__GN04255,JM-Metabolic.GN04255,Feist_11661_P42_diluted,N19,iTru7_401_01,ATGCACGA,iTru5_107_G,AGAGTCCA,Feist_11661,pool1,JM-Metabolic__GN04255 +1,JM-Metabolic__GN04306,JM-Metabolic.GN04306,Feist_11661_P42_diluted,P19,iTru7_401_02,ATCGCCAT,iTru5_108_G,AGCCTATC,Feist_11661,pool2,JM-Metabolic__GN04306 +1,JM-Metabolic__GN04428,JM-Metabolic.GN04428,Feist_11661_P42_diluted,B21,iTru7_401_03,TCTCGCAA,iTru5_109_G,AGGAACAC,Feist_11661,pool1,JM-Metabolic__GN04428 +1,JM-Metabolic__GN04488,JM-Metabolic.GN04488,Feist_11661_P42_diluted,D21,iTru7_401_04,ACGACAGA,iTru5_110_G,AGGTCTGT,Feist_11661,pool2,JM-Metabolic__GN04488 +1,JM-Metabolic__GN04540,JM-Metabolic.GN04540,Feist_11661_P42_diluted,F21,iTru7_401_05,TTACGGCT,iTru5_111_G,AGTATGCC,Feist_11661,pool1,JM-Metabolic__GN04540 +1,JM-Metabolic__GN04563,JM-Metabolic.GN04563,Feist_11661_P42_diluted,H21,iTru7_401_06,GAGGACTT,iTru5_112_G,AGTTCGCA,Feist_11661,pool2,JM-Metabolic__GN04563 +1,JM-Metabolic__GN04612,JM-Metabolic.GN04612,Feist_11661_P42_diluted,J21,iTru7_401_07,GGCATACT,iTru5_101_H,TGGAAGCA,Feist_11661,pool1,JM-Metabolic__GN04612 +1,JM-Metabolic__GN04665,JM-Metabolic.GN04665,Feist_11661_P42_diluted,L21,iTru7_401_08,CGTAGGTT,iTru5_102_H,GTCAGTCA,Feist_11661,pool2,JM-Metabolic__GN04665 +1,JM-Metabolic__GN04682,JM-Metabolic.GN04682,Feist_11661_P42_diluted,N21,iTru7_401_09,ATATGCGC,iTru5_103_H,GTAACCGA,Feist_11661,pool1,JM-Metabolic__GN04682 +1,JM-Metabolic__GN05002,JM-Metabolic.GN05002,Feist_11661_P42_diluted,P21,iTru7_401_10,GGATGTAG,iTru5_104_H,GTTATGGC,Feist_11661,pool2,JM-Metabolic__GN05002 +1,JM-Metabolic__GN05109,JM-Metabolic.GN05109,Feist_11661_P42_diluted,B23,iTru7_401_11,CCTGTCAT,iTru5_105_H,GTAAGCAC,Feist_11661,pool1,JM-Metabolic__GN05109 +1,JM-Metabolic__GN05128,JM-Metabolic.GN05128,Feist_11661_P42_diluted,D23,iTru7_401_12,TGCTCATG,iTru5_106_H,GGAATGTC,Feist_11661,pool2,JM-Metabolic__GN05128 +1,JM-Metabolic__GN05367,JM-Metabolic.GN05367,Feist_11661_P42_diluted,F23,iTru7_402_01,TGAAGACG,iTru5_107_H,GAGAAGGT,Feist_11661,pool1,JM-Metabolic__GN05367 +1,JM-Metabolic__GN05377,JM-Metabolic.GN05377,Feist_11661_P42_diluted,H23,iTru7_402_02,GTTACGCA,iTru5_108_H,GAGTAGAG,Feist_11661,pool2,JM-Metabolic__GN05377 +1,7A,7A,Gerwick_tubes,J23,iTru7_402_03,ACTCAGAC,iTru5_109_H,GCATTGGT,Gerwick_6123,pool1,7A +1,8A,8A,Gerwick_tubes,L23,iTru7_402_04,GTCCACAT,iTru5_110_H,TCCAGCAA,Gerwick_6123,pool2,8A +1,BLANK_42_12G,BLANK.42.12G,Feist_11661_P42,N23,iTru7_402_05,CGCTAGTA,iTru5_111_H,GAATCCGT,Feist_11661,pool1,BLANK.42.12G +1,BLANK_42_12H,BLANK.42.12H,Feist_11661_P42,P23,iTru7_402_06,GAATCCGA,iTru5_112_H,TACATCGG,Feist_11661,pool2,BLANK.42.12H +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0326,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0326,Feist_11661_P43,B2,iTru7_402_07,GAGACGAT,iTru5_113_A,ATAACGCC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0326 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0327,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0327,Feist_11661_P43,D2,iTru7_402_08,TAAGTGGC,iTru5_114_A,ATGACAGG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0327 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0328,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0328,Feist_11661_P43,F2,iTru7_402_09,ACTGAGGT,iTru5_115_A,CAACACAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0328 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0329,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0329,Feist_11661_P43,H2,iTru7_402_10,TGTACCGT,iTru5_116_A,CACCAGTT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0329 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0330,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0330,Feist_11661_P43,J2,iTru7_402_11,AGCAAGCA,iTru5_117_A,CAGAGTGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0330 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0352,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0352,Feist_11661_P43,L2,iTru7_402_12,TCTCGTGT,iTru5_118_A,CCGATGTA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0352 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0353,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0353,Feist_11661_P43,N2,iTru7_115_01,CAAGGTCT,iTru5_119_A,CCTTCCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0353 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0354,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0354,Feist_11661_P43,P2,iTru7_115_02,TAGACGTG,iTru5_120_A,CGGTAATC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0354 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0355,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0355,Feist_11661_P43,B4,iTru7_115_03,TGAGCTAG,iTru5_121_A,CTAGGTTG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0355 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0356,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0356,Feist_11661_P43,D4,iTru7_115_04,CTGACACA,iTru5_122_A,CTCGGTAA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0356 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0357,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0357,Feist_11661_P43,F4,iTru7_115_05,ACGGTCTT,iTru5_123_A,CTGTGGTA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0357 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0364,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0364,Feist_11661_P43,H4,iTru7_115_06,GCTGTTGT,iTru5_124_A,GTACGATC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0364 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0366,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0366,Feist_11661_P43,J4,iTru7_115_07,CACTAGCT,iTru5_113_B,TCTGTCGT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0366 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0367,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0367,Feist_11661_P43,L4,iTru7_115_08,TGGTACAG,iTru5_114_B,GAATGGCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0367 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0368,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0368,Feist_11661_P43,N4,iTru7_115_09,AGCACTTC,iTru5_115_B,GTGTGTTC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0368 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0369,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0369,Feist_11661_P43,P4,iTru7_115_10,GCATACAG,iTru5_116_B,GGTTGAAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0369 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0370,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0370,Feist_11661_P43,B6,iTru7_115_11,CTTAGGAC,iTru5_117_B,GGCTCAAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0370 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0371,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0371,Feist_11661_P43,D6,iTru7_211_01,GCTTCTTG,iTru5_118_B,TTCGCCAT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0371 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0372,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0372,Feist_11661_P43,F6,iTru7_101_01,ACGTTACC,iTru5_119_B,GTCCTTGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0372 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0373,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0373,Feist_11661_P43,H6,iTru7_101_02,CTGTGTTG,iTru5_120_B,TAACGTCG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0373 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0374,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0374,Feist_11661_P43,J6,iTru7_101_03,TGAGGTGT,iTru5_121_B,GAGACCAA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0374 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0375,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0375,Feist_11661_P43,L6,iTru7_101_04,GATCCATG,iTru5_122_B,GATCAAGG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0375 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0376,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0376,Feist_11661_P43,N6,iTru7_101_05,GCCTATCA,iTru5_123_B,GCAACCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0376 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0377,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0377,Feist_11661_P43,P6,iTru7_101_06,AACAACCG,iTru5_124_B,AAGGAGAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0377 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0378,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0378,Feist_11661_P43,B8,iTru7_101_07,ACTCGTTG,iTru5_113_C,ATCGGAGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0378 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0380,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0380,Feist_11661_P43,D8,iTru7_101_08,CCTATGGT,iTru5_114_C,ATGCGCTT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0380 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0381,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0381,Feist_11661_P43,F8,iTru7_101_09,TGTACACC,iTru5_115_C,CAACCGTA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0381 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0382,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0382,Feist_11661_P43,H8,iTru7_101_10,GTATGCTG,iTru5_116_C,CACTTCAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0382 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0383,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0383,Feist_11661_P43,J8,iTru7_101_11,TGATGTCC,iTru5_117_C,CAGCTAGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0383 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0384,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0384,Feist_11661_P43,L8,iTru7_101_12,GTCCTTCT,iTru5_118_C,CCGTTATG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0384 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0385,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0385,Feist_11661_P43,N8,iTru7_102_01,ATAAGGCG,iTru5_119_C,CGAACAAC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0385 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0386,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0386,Feist_11661_P43,P8,iTru7_102_02,CTTACCTG,iTru5_120_C,CGTAGATG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0386 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0387,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0387,Feist_11661_P43,B10,iTru7_102_03,CGTTGCAA,iTru5_121_C,CTATGCCT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0387 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0388,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0388,Feist_11661_P43,D10,iTru7_102_04,GATTCAGC,iTru5_122_C,CTGATGAG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0388 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0389,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0389,Feist_11661_P43,F10,iTru7_102_05,TCACGTTC,iTru5_123_C,CTTCCTTC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0389 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0390,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0390,Feist_11661_P43,H10,iTru7_102_06,TGTGCGTT,iTru5_124_C,GTCTCATC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0390 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0391,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0391,Feist_11661_P43,J10,iTru7_102_07,TAGTTGCG,iTru5_113_D,GCGCATAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0391 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0392,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0392,Feist_11661_P43,L10,iTru7_102_08,AAGAGCCA,iTru5_114_D,GAAGATCC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0392 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0393,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0393,Feist_11661_P43,N10,iTru7_102_09,ACAGCTCA,iTru5_115_D,GTTGGCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0393 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0394,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0394,Feist_11661_P43,P10,iTru7_102_10,GTTAAGGC,iTru5_116_D,GTGAATGG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0394 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0395,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0395,Feist_11661_P43,B12,iTru7_102_11,AAGCCACA,iTru5_117_D,GTATCGAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0395 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0396,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0396,Feist_11661_P43,D12,iTru7_102_12,ACACGGTT,iTru5_118_D,TGCAAGAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0396 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0397,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0397,Feist_11661_P43,F12,iTru7_103_01,CAGCGATT,iTru5_119_D,GAGTGTGT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0397 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0398,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0398,Feist_11661_P43,H12,iTru7_103_02,TAGTGACC,iTru5_120_D,TAAGCGCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0398 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0399,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0399,Feist_11661_P43,J12,iTru7_103_03,CGAGACTA,iTru5_121_D,TAGCAGGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0399 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0400,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0400,Feist_11661_P43,L12,iTru7_103_04,GACATGGT,iTru5_122_D,GACTACGA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0400 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0401,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0401,Feist_11661_P43,N12,iTru7_103_05,GCATGTCT,iTru5_123_D,GACGTCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0401 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0402,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0402,Feist_11661_P43,P12,iTru7_103_06,ACTCCATC,iTru5_124_D,AAGAGGCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0402 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0403,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0403,Feist_11661_P43,B14,iTru7_103_07,TGTGACTG,iTru5_113_E,ATCGTCTC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0403 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0404,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0404,Feist_11661_P43,D14,iTru7_103_08,CGAAGAAC,iTru5_114_E,ATGGCGAT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0404 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0405,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0405,Feist_11661_P43,F14,iTru7_103_09,GGTGTCTT,iTru5_115_E,CAAGAAGC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0405 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0406,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0406,Feist_11661_P43,H14,iTru7_103_10,AAGAAGGC,iTru5_116_E,CAGAACTG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0406 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0407,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0407,Feist_11661_P43,J14,iTru7_103_11,AGGTTCGA,iTru5_117_E,CAGGTAAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0407 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0408,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0408,Feist_11661_P43,L14,iTru7_103_12,CATGTTCC,iTru5_118_E,CCTACCTA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0408 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0409,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0409,Feist_11661_P43,N14,iTru7_104_01,GTGCCATA,iTru5_119_E,CGAAGTCA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0409 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0417,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0417,Feist_11661_P43,P14,iTru7_104_02,CCTTGTAG,iTru5_120_E,CGTCTTCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0417 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0418,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0418,Feist_11661_P43,B16,iTru7_104_03,GCTGGATT,iTru5_121_E,CTCAAGCT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0418 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0419,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0419,Feist_11661_P43,D16,iTru7_104_04,TAACGAGG,iTru5_122_E,CTGCCATA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0419 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0420,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0420,Feist_11661_P43,F16,iTru7_104_05,ATGGTTGC,iTru5_123_E,CTTGCTAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0420 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0421,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0421,Feist_11661_P43,H16,iTru7_104_06,CCTATACC,iTru5_124_E,GTCTGCAA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0421 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0473,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0473,Feist_11661_P43,J16,iTru7_104_07,TTAGGTCG,iTru5_113_F,GCTACTCT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0473 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0474,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0474,Feist_11661_P43,L16,iTru7_104_08,GCAAGATC,iTru5_114_F,TACAGAGC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0474 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0483,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0483,Feist_11661_P43,N16,iTru7_104_09,AGAGCCTT,iTru5_115_F,GGTCGTAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0483 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0484,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0484,Feist_11661_P43,P16,iTru7_104_10,GCAATGGA,iTru5_116_F,GTCGTTAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0484 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0485,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0485,Feist_11661_P43,B18,iTru7_104_11,CTGGAGTA,iTru5_117_F,TTCACGGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0485 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0486,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0486,Feist_11661_P43,D18,iTru7_104_12,GAACATCG,iTru5_118_F,TGCTTGCT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0486 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0516,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0516,Feist_11661_P43,F18,iTru7_105_01,GCACAACT,iTru5_119_F,TCTTACGG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0516 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0517,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0517,Feist_11661_P43,H18,iTru7_105_02,TTCTCTCG,iTru5_120_F,TCCTCATG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0517 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0518,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0518,Feist_11661_P43,J18,iTru7_105_03,AACGGTCA,iTru5_121_F,GATGTCGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0518 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0519,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0519,Feist_11661_P43,L18,iTru7_105_04,ACAGACCT,iTru5_122_F,GAAGTGCT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0519 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0520,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0520,Feist_11661_P43,N18,iTru7_105_05,TCTCTTCC,iTru5_123_F,TCACTCGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0520 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0521,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0521,Feist_11661_P43,P18,iTru7_105_06,AGTGTTGG,iTru5_124_F,ACGCAGTA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0521 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0522,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0522,Feist_11661_P43,B20,iTru7_105_07,TGGCATGT,iTru5_113_G,ATCTCCTG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0522 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0523,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0523,Feist_11661_P43,D20,iTru7_105_08,AGAAGCGT,iTru5_114_G,ATGTGGAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0523 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0524,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0524,Feist_11661_P43,F20,iTru7_105_09,AGCGGAAT,iTru5_115_G,CAAGCCAA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0524 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0525,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0525,Feist_11661_P43,H20,iTru7_105_10,TAACCGGT,iTru5_116_G,CAGACGTT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0525 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R08624,JM-MEC.Staphylococcus.aureusstrain.BERTI-R08624,Feist_11661_P43,J20,iTru7_105_11,CATGGAAC,iTru5_117_G,CATACTCG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R08624 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R08704,JM-MEC.Staphylococcus.aureusstrain.BERTI-R08704,Feist_11661_P43,L20,iTru7_105_12,ATGGTCCA,iTru5_118_G,CCTGTCAA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R08704 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R10727,JM-MEC.Staphylococcus.aureusstrain.BERTI-R10727,Feist_11661_P43,N20,iTru7_106_01,CTTCTGAG,iTru5_119_G,CGAGTTAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R10727 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11044,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11044,Feist_11661_P43,P20,iTru7_106_02,AACCGAAG,iTru5_120_G,CTAACCTG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11044 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11078,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11078,Feist_11661_P43,B22,iTru7_106_03,TTCGTACC,iTru5_121_G,CTCCTAGT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11078 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11101,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11101,Feist_11661_P43,D22,iTru7_106_04,CTGTTAGG,iTru5_122_G,CTGTACCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11101 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11102,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11102,Feist_11661_P43,F22,iTru7_106_05,CACAAGTC,iTru5_123_G,GCTACAAC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11102 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11103,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11103,Feist_11661_P43,H22,iTru7_106_06,TCTTGACG,iTru5_124_G,GTTCTTCG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11103 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11135,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11135,Feist_11661_P43,J22,iTru7_106_07,CGTCTTGT,iTru5_113_H,GAGAGTAC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11135 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11153,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11153,Feist_11661_P43,L22,iTru7_106_08,CGTGATCA,iTru5_114_H,GACACAGT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11153 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11154,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11154,Feist_11661_P43,N22,iTru7_106_09,CCAAGTTG,iTru5_115_H,TTGCTTGG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11154 +1,JM-Metabolic__GN02424,JM-Metabolic.GN02424,Feist_11661_P43,P22,iTru7_106_10,GTACCTTG,iTru5_116_H,GTAGTACC,Feist_11661,pool2,JM-Metabolic__GN02424 +1,JM-Metabolic__GN02446,JM-Metabolic.GN02446,Feist_11661_P43,B24,iTru7_106_11,GACTATGC,iTru5_117_H,TTCGGCTA,Feist_11661,pool1,JM-Metabolic__GN02446 +1,JM-Metabolic__GN02449,JM-Metabolic.GN02449,Feist_11661_P43,D24,iTru7_106_12,TGGATCAC,iTru5_118_H,TGCACTTG,Feist_11661,pool2,JM-Metabolic__GN02449 +1,JM-Metabolic__GN02487,JM-Metabolic.GN02487,Feist_11661_P43_diluted,F24,iTru7_107_01,CTCTGGTT,iTru5_119_H,TAGAACGC,Feist_11661,pool1,JM-Metabolic__GN02487 +1,JM-Metabolic__GN02501,JM-Metabolic.GN02501,Feist_11661_P43,H24,iTru7_107_02,GTTCATGG,iTru5_120_H,GATTGTCC,Feist_11661,pool2,JM-Metabolic__GN02501 +1,ISB,ISB,Gerwick_tubes,J24,iTru7_107_03,GCTGTAAG,iTru5_121_H,GATGCTAC,Gerwick_6123,pool1,ISB +1,GFR,GFR,Gerwick_tubes,L24,iTru7_107_04,GTCGAAGA,iTru5_122_H,GAACGGTT,Gerwick_6123,pool2,GFR +1,BLANK_43_12G,BLANK.43.12G,Feist_11661_P43,N24,iTru7_107_05,GAGCTCAA,iTru5_123_H,CTCTTGTC,Feist_11661,pool1,BLANK.43.12G +1,BLANK_43_12H,BLANK.43.12H,Feist_11661_P43,P24,iTru7_107_06,TGAACCTG,iTru5_124_H,AACGCCTT,Feist_11661,pool2,BLANK.43.12H +1,RMA_KHP_rpoS_Mage_Q97D,RMA.KHP.rpoS.Mage.Q97D,,,12,CTTGTAAT,U1,TATAGCGT,Feist_11661,pool1,RMA_KHP_rpoS Mage Q97D +1,RMA_KHP_rpoS_Mage_Q97L,RMA.KHP.rpoS.Mage.Q97L,,,13,AGTCAAAT,U1,TATAGCGT,Feist_11661,pool2,RMA_KHP_rpoS Mage Q97L +1,RMA_KHP_rpoS_Mage_Q97N,RMA.KHP.rpoS.Mage.Q97N,,,14,AGTTCCAT,U1,TATAGCGT,Feist_11661,pool1,RMA_KHP_rpoS Mage Q97N +1,RMA_KHP_rpoS_Mage_Q97E,RMA.KHP.rpoS.Mage.Q97E,,,15,ATGTCAAT,U1,TATAGCGT,Feist_11661,pool2,RMA_KHP_rpoS Mage Q97E +1,JBI_KHP_HGL_021,JBI.KHP.HGL.021,,,1,ATCACGAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_021 +1,JBI_KHP_HGL_022,JBI.KHP.HGL.022,,,2,CGATGTAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_022 +1,JBI_KHP_HGL_023,JBI.KHP.HGL.023,,,3,TTAGGCAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_023 +1,JBI_KHP_HGL_024,JBI.KHP.HGL.024,,,4,TGACCAAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_024 +1,JBI_KHP_HGL_025,JBI.KHP.HGL.025,,,5,ACAGTGAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_025 +1,JBI_KHP_HGL_026,JBI.KHP.HGL.026,,,6,GCCAATAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_026 +1,JBI_KHP_HGL_027,JBI.KHP.HGL.027,,,7,CAGATCAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_027 +1,JBI_KHP_HGL_028_Amitesh_soxR,JBI.KHP.HGL.028.Amitesh.soxR,,,8,ACTTGAAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_028_Amitesh_soxR +1,JBI_KHP_HGL_029_Amitesh_oxyR,JBI.KHP.HGL.029.Amitesh.oxyR,,,9,GATCAGAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_029_Amitesh_oxyR +1,JBI_KHP_HGL_030_Amitesh_soxR_oxyR,JBI.KHP.HGL.030.Amitesh.soxR.oxyR,,,10,TAGCTTAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_030_Amitesh_soxR_oxyR +1,JBI_KHP_HGL_031_Amitesh_rpoS,JBI.KHP.HGL.031.Amitesh.rpoS,,,11,GGCTACAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_031_Amitesh_rpoS +1,BLANK1_1A,BLANK1.1A,NYU_BMS_Melanoma_13059_P1,A1,iTru7_107_09,GCCTTGTT,iTru5_01_A,ACCGACAA,NYU_BMS_Melanoma_13059,pool2,BLANK1.1A +1,BLANK1_1B,BLANK1.1B,NYU_BMS_Melanoma_13059_P1,C1,iTru7_107_10,AACTTGCC,iTru5_02_A,CTTCGCAA,NYU_BMS_Melanoma_13059,pool1,BLANK1.1B +1,BLANK1_1C,BLANK1.1C,NYU_BMS_Melanoma_13059_P1,E1,iTru7_107_11,CAATGTGG,iTru5_03_A,AACACCAC,NYU_BMS_Melanoma_13059,pool2,BLANK1.1C +1,BLANK1_1D,BLANK1.1D,NYU_BMS_Melanoma_13059_P1,G1,iTru7_107_12,AAGGCTGA,iTru5_04_A,CGTATCTC,NYU_BMS_Melanoma_13059,pool1,BLANK1.1D +1,BLANK1_1E,BLANK1.1E,NYU_BMS_Melanoma_13059_P1,I1,iTru7_108_01,TTACCGAG,iTru5_05_A,GGTACGAA,NYU_BMS_Melanoma_13059,pool2,BLANK1.1E +1,BLANK1_1F,BLANK1.1F,NYU_BMS_Melanoma_13059_P1,K1,iTru7_108_02,GTCCTAAG,iTru5_06_A,CGATCGAT,NYU_BMS_Melanoma_13059,pool1,BLANK1.1F +1,BLANK1_1G,BLANK1.1G,NYU_BMS_Melanoma_13059_P1,M1,iTru7_108_03,GAAGGTTC,iTru5_07_A,AAGACACC,NYU_BMS_Melanoma_13059,pool2,BLANK1.1G +1,BLANK1_1H,BLANK1.1H,NYU_BMS_Melanoma_13059_P1,O1,iTru7_108_04,GAAGAGGT,iTru5_08_A,CATCTGCT,NYU_BMS_Melanoma_13059,pool1,BLANK1.1H +1,AP581451B02,AP581451B02,NYU_BMS_Melanoma_13059_P1,A3,iTru7_108_05,TCTGAGAG,iTru5_09_A,CTCTCAGA,NYU_BMS_Melanoma_13059,pool2,AP581451B02 +1,EP256645B01,EP256645B01,NYU_BMS_Melanoma_13059_P1,C3,iTru7_108_06,ACCGCATA,iTru5_10_A,TCGTCTGA,NYU_BMS_Melanoma_13059,pool1,EP256645B01 +1,EP112567B02,EP112567B02,NYU_BMS_Melanoma_13059_P1,E3,iTru7_108_07,GAAGTACC,iTru5_11_A,CAATAGCC,NYU_BMS_Melanoma_13059,pool2,EP112567B02 +1,EP337425B01,EP337425B01,NYU_BMS_Melanoma_13059_P1,G3,iTru7_108_08,CAGGTATC,iTru5_12_A,CATTCGTC,NYU_BMS_Melanoma_13059,pool1,EP337425B01 +1,LP127890A01,LP127890A01,NYU_BMS_Melanoma_13059_P1,I3,iTru7_108_09,TCTCTAGG,iTru5_01_B,AGTGGCAA,NYU_BMS_Melanoma_13059,pool2,LP127890A01 +1,EP159692B04,EP159692B04,NYU_BMS_Melanoma_13059_P1,K3,iTru7_108_10,AAGCACTG,iTru5_02_B,GTGGTATG,NYU_BMS_Melanoma_13059,pool1,EP159692B04 +1,EP987683A01,EP987683A01,NYU_BMS_Melanoma_13059_P1,M3,iTru7_108_11,CCAAGCAA,iTru5_03_B,TGAGCTGT,NYU_BMS_Melanoma_13059,pool2,EP987683A01 +1,AP959450A03,AP959450A03,NYU_BMS_Melanoma_13059_P1,O3,iTru7_108_12,TGTTCGAG,iTru5_04_B,CGTCAAGA,NYU_BMS_Melanoma_13059,pool1,AP959450A03 +1,SP464350A04,SP464350A04,NYU_BMS_Melanoma_13059_P1,A5,iTru7_109_01,CTCGTCTT,iTru5_05_B,AAGCATCG,NYU_BMS_Melanoma_13059,pool2,SP464350A04 +1,C9,C9,NYU_BMS_Melanoma_13059_P1,C5,iTru7_109_02,CGAACTGT,iTru5_06_B,TACTCCAG,NYU_BMS_Melanoma_13059,pool1,C9 +1,ep256643b01,ep256643b01,NYU_BMS_Melanoma_13059_P1,E5,iTru7_109_03,CATTCGGT,iTru5_07_B,GATACCTG,NYU_BMS_Melanoma_13059,pool2,ep256643b01 +1,EP121011B01,EP121011B-1,NYU_BMS_Melanoma_13059_P1,G5,iTru7_109_04,TCGGTTAC,iTru5_08_B,ACCTCTTC,NYU_BMS_Melanoma_13059,pool1,EP121011B-1 +1,AP616837B04,AP616837B04,NYU_BMS_Melanoma_13059_P1,I5,iTru7_109_05,AAGTCGAG,iTru5_09_B,ACGGACTT,NYU_BMS_Melanoma_13059,pool2,AP616837B04 +1,SP506933A04,SP506933A04,NYU_BMS_Melanoma_13059_P1,K5,iTru7_109_06,TATCGGTC,iTru5_10_B,CATGTGTG,NYU_BMS_Melanoma_13059,pool1,SP506933A04 +1,EP159695B01,EP159695B01,NYU_BMS_Melanoma_13059_P1,M5,iTru7_109_07,TATTCGCC,iTru5_11_B,TGCCTCAA,NYU_BMS_Melanoma_13059,pool2,EP159695B01 +1,EP256644B01,EP256644B01,NYU_BMS_Melanoma_13059_P1,O5,iTru7_109_08,GTATTGGC,iTru5_12_B,ATCTGACC,NYU_BMS_Melanoma_13059,pool1,EP256644B01 +1,SP511289A02,SP511289A02,NYU_BMS_Melanoma_13059_P1,A7,iTru7_109_09,AGTCGCTT,iTru5_01_C,CACAGACT,NYU_BMS_Melanoma_13059,pool2,SP511289A02 +1,EP305735B04,EP305735B04,NYU_BMS_Melanoma_13059_P1,C7,iTru7_109_10,TGGCACTA,iTru5_02_C,CACTGTAG,NYU_BMS_Melanoma_13059,pool1,EP305735B04 +1,SP415030A01,SP415030A01,NYU_BMS_Melanoma_13059_P1,E7,iTru7_109_11,GGTTGTCA,iTru5_03_C,CACAGGAA,NYU_BMS_Melanoma_13059,pool2,SP415030A01 +1,AP549681B02,AP549681B02,NYU_BMS_Melanoma_13059_P1,G7,iTru7_109_12,AACCTCCT,iTru5_04_C,CCATGAAC,NYU_BMS_Melanoma_13059,pool1,AP549681B02 +1,AP549678B01,AP549678B01,NYU_BMS_Melanoma_13059_P1,I7,iTru7_110_01,ATGACCAG,iTru5_05_C,GCCAATAC,NYU_BMS_Melanoma_13059,pool2,AP549678B01 +1,EP260544B04,EP260544B04,NYU_BMS_Melanoma_13059_P1,K7,iTru7_110_02,AACCGTTC,iTru5_06_C,AGCTACCA,NYU_BMS_Melanoma_13059,pool1,EP260544B04 +1,EP202452B01,EP202452B01,NYU_BMS_Melanoma_13059_P1,M7,iTru7_110_03,TCCAATCG,iTru5_07_C,AACCGAAC,NYU_BMS_Melanoma_13059,pool2,EP202452B01 +1,EP282276B04,EP282276B04,NYU_BMS_Melanoma_13059_P1,O7,iTru7_110_04,CTGCACTT,iTru5_08_C,ATCGCAAC,NYU_BMS_Melanoma_13059,pool1,EP282276B04 +1,SP531696A04,SP531696A04,NYU_BMS_Melanoma_13059_P1,A9,iTru7_110_05,CGCTTAAC,iTru5_09_C,GTTGCTGT,NYU_BMS_Melanoma_13059,pool2,SP531696A04 +1,SP515443A04,SP515443A04,NYU_BMS_Melanoma_13059_P1,C9,iTru7_110_06,CACCACTA,iTru5_10_C,TCTAGTCC,NYU_BMS_Melanoma_13059,pool1,SP515443A04 +1,SP515763A04,SP515763A04,NYU_BMS_Melanoma_13059_P1,E9,iTru7_110_07,ACAGCAAC,iTru5_11_C,GACGAACT,NYU_BMS_Melanoma_13059,pool2,SP515763A04 +1,EP184255B04,EP184255B04,NYU_BMS_Melanoma_13059_P1,G9,iTru7_110_08,GGAAGGAT,iTru5_12_C,TTCGTACG,NYU_BMS_Melanoma_13059,pool1,EP184255B04 +1,SP503615A02,SP503615A02,NYU_BMS_Melanoma_13059_P1,I9,iTru7_110_09,GGCGTTAT,iTru5_01_D,CGACACTT,NYU_BMS_Melanoma_13059,pool2,SP503615A02 +1,EP260543B04,EP260543B04,NYU_BMS_Melanoma_13059_P1,K9,iTru7_110_10,CTGTTGAC,iTru5_02_D,AGACGCTA,NYU_BMS_Melanoma_13059,pool1,EP260543B04 +1,EP768748A04,EP768748A04,NYU_BMS_Melanoma_13059_P1,M9,iTru7_110_11,GTCATCGA,iTru5_03_D,TGACAACC,NYU_BMS_Melanoma_13059,pool2,EP768748A04 +1,AP309872B03,AP309872B03,NYU_BMS_Melanoma_13059_P1,O9,iTru7_110_12,TGACTTCG,iTru5_04_D,GGTACTTC,NYU_BMS_Melanoma_13059,pool1,AP309872B03 +1,AP568785B04,AP568785B04,NYU_BMS_Melanoma_13059_P1,A11,iTru7_111_01,CGATAGAG,iTru5_05_D,CTGTATGC,NYU_BMS_Melanoma_13059,pool2,AP568785B04 +1,EP721390A04,EP721390A04,NYU_BMS_Melanoma_13059_P1,C11,iTru7_111_02,TTCGTTGG,iTru5_06_D,TCGACAAG,NYU_BMS_Melanoma_13059,pool1,EP721390A04 +1,EP940013A01,EP940013A01,NYU_BMS_Melanoma_13059_P1,E11,iTru7_111_03,TGGAGAGT,iTru5_07_D,GCTGAATC,NYU_BMS_Melanoma_13059,pool2,EP940013A01 +1,EP291979B04,EP291979B04,NYU_BMS_Melanoma_13059_P1,G11,iTru7_111_04,TCAGACGA,iTru5_08_D,AGTTGTGC,NYU_BMS_Melanoma_13059,pool1,EP291979B04 +1,EP182065B04,EP182065B04,NYU_BMS_Melanoma_13059_P1,I11,iTru7_111_05,GACGAATG,iTru5_09_D,TGTCGACT,NYU_BMS_Melanoma_13059,pool2,EP182065B04 +1,EP128904B02,EP128904B02,NYU_BMS_Melanoma_13059_P1,K11,iTru7_111_06,CATGAGGA,iTru5_10_D,AAGGCTCT,NYU_BMS_Melanoma_13059,pool1,EP128904B02 +1,EP915769A04,EP915769A04,NYU_BMS_Melanoma_13059_P1,M11,iTru7_111_07,CGGTTGTT,iTru5_11_D,CCTAACAG,NYU_BMS_Melanoma_13059,pool2,EP915769A04 +1,SP464352A03,SP464352A03,NYU_BMS_Melanoma_13059_P1,O11,iTru7_111_08,TCCGTATG,iTru5_12_D,AAGACGAG,NYU_BMS_Melanoma_13059,pool1,SP464352A03 +1,SP365864A04,SP365864A04,NYU_BMS_Melanoma_13059_P1,A13,iTru7_111_09,TGTGGTAC,iTru5_01_E,GACTTGTG,NYU_BMS_Melanoma_13059,pool2,SP365864A04 +1,SP511294A04,SP511294A04,NYU_BMS_Melanoma_13059_P1,C13,iTru7_111_10,AGAACGAG,iTru5_02_E,CAACTCCA,NYU_BMS_Melanoma_13059,pool1,SP511294A04 +1,EP061002B01,EP061002B01,NYU_BMS_Melanoma_13059_P1,E13,iTru7_111_11,CTTCGTTC,iTru5_03_E,TGTTCCGT,NYU_BMS_Melanoma_13059,pool2,EP061002B01 +1,SP410793A01,SP410793A01,NYU_BMS_Melanoma_13059_P1,G13,iTru7_111_12,CCAATAGG,iTru5_04_E,ACCGCTAT,NYU_BMS_Melanoma_13059,pool1,SP410793A01 +1,SP232077A04,SP232077A04,NYU_BMS_Melanoma_13059_P1,I13,iTru7_112_01,ACCATCCA,iTru5_05_E,CTTAGGAC,NYU_BMS_Melanoma_13059,pool2,SP232077A04 +1,EP128910B01,EP128910B01,NYU_BMS_Melanoma_13059_P1,K13,iTru7_112_02,CACACATG,iTru5_06_E,TATGACCG,NYU_BMS_Melanoma_13059,pool1,EP128910B01 +1,AP531397B04,AP531397B04,NYU_BMS_Melanoma_13059_P1,M13,iTru7_112_03,CTTGTCGA,iTru5_07_E,AGCTAGTG,NYU_BMS_Melanoma_13059,pool2,AP531397B04 +1,EP043583B01,EP043583B01,NYU_BMS_Melanoma_13059_P1,O13,iTru7_112_04,AGTCTCAC,iTru5_08_E,GAACGAAG,NYU_BMS_Melanoma_13059,pool1,EP043583B01 +1,EP230245B01,EP230245B01,NYU_BMS_Melanoma_13059_P1,A15,iTru7_112_05,AGTTGGCT,iTru5_09_E,CGTCTAAC,NYU_BMS_Melanoma_13059,pool2,EP230245B01 +1,EP606652B04,EP606652B04,NYU_BMS_Melanoma_13059_P1,C15,iTru7_112_06,CCGGAATT,iTru5_10_E,AACCAGAG,NYU_BMS_Melanoma_13059,pool1,EP606652B04 +1,EP207041B01,EP207041B01,NYU_BMS_Melanoma_13059_P1,E15,iTru7_112_07,CAGTGAAG,iTru5_11_E,CGCCTTAT,NYU_BMS_Melanoma_13059,pool2,EP207041B01 +1,EP727972A04,EP727972A04,NYU_BMS_Melanoma_13059_P1,G15,iTru7_112_08,CCTACTGA,iTru5_12_E,CTCGTTCT,NYU_BMS_Melanoma_13059,pool1,EP727972A04 +1,EP291980B04,EP291980B04,NYU_BMS_Melanoma_13059_P1,I15,iTru7_112_09,TGTGAAGC,iTru5_01_F,GTGAGACT,NYU_BMS_Melanoma_13059,pool2,EP291980B04 +1,EP087938B02,EP087938B02,NYU_BMS_Melanoma_13059_P1,K15,iTru7_112_10,GTCTGATC,iTru5_02_F,AACACGCT,NYU_BMS_Melanoma_13059,pool1,EP087938B02 +1,SP471496A04,SP471496A04,NYU_BMS_Melanoma_13059_P1,M15,iTru7_112_11,TTCAGGAG,iTru5_03_F,CCTAGAGA,NYU_BMS_Melanoma_13059,pool2,SP471496A04 +1,SP573823A04,SP573823A04,NYU_BMS_Melanoma_13059_P1,O15,iTru7_112_12,ACGATGAC,iTru5_04_F,TTCCAGGT,NYU_BMS_Melanoma_13059,pool1,SP573823A04 +1,EP393718B01,EP393718B01,NYU_BMS_Melanoma_13059_P1,A17,iTru7_113_01,CGTTATGC,iTru5_05_F,TCAGCCTT,NYU_BMS_Melanoma_13059,pool2,EP393718B01 +1,SP612496A01,SP612496A01,NYU_BMS_Melanoma_13059_P1,C17,iTru7_113_02,GATACTGG,iTru5_06_F,AGCCAACT,NYU_BMS_Melanoma_13059,pool1,SP612496A01 +1,EP032410B02,EP032410B02,NYU_BMS_Melanoma_13059_P1,E17,iTru7_113_03,CTACTTGG,iTru5_07_F,CTAGCTCA,NYU_BMS_Melanoma_13059,pool2,EP032410B02 +1,EP073216B01,EP073216B01,NYU_BMS_Melanoma_13059_P1,G17,iTru7_113_04,CATACCAC,iTru5_08_F,GGAAGAGA,NYU_BMS_Melanoma_13059,pool1,EP073216B01 +1,EP410046B01,EP410046B01,NYU_BMS_Melanoma_13059_P1,I17,iTru7_113_05,ACATTGCG,iTru5_09_F,AACACTGG,NYU_BMS_Melanoma_13059,pool2,EP410046B01 +1,SP561451A04,SP561451A04,NYU_BMS_Melanoma_13059_P1,K17,iTru7_113_06,TGATCGGA,iTru5_10_F,ACTATCGC,NYU_BMS_Melanoma_13059,pool1,SP561451A04 +1,EP320438B01,EP320438B01,NYU_BMS_Melanoma_13059_P1,M17,iTru7_113_07,AAGTGTCG,iTru5_11_F,ACAACAGC,NYU_BMS_Melanoma_13059,pool2,EP320438B01 +1,SP612495A04,SP612495A04,NYU_BMS_Melanoma_13059_P1,O17,iTru7_113_08,GAACGCTT,iTru5_12_F,TGTGGCTT,NYU_BMS_Melanoma_13059,pool1,SP612495A04 +1,EP446604B03,EP446604B03,NYU_BMS_Melanoma_13059_P1,A19,iTru7_113_09,TCAAGGAC,iTru5_01_G,GTTCCATG,NYU_BMS_Melanoma_13059,pool2,EP446604B03 +1,EP446602B01,EP446602B-1,NYU_BMS_Melanoma_13059_P1,C19,iTru7_113_10,TCAACTGG,iTru5_02_G,TGGATGGT,NYU_BMS_Melanoma_13059,pool1,EP446602B-1 +1,EP182243B02,EP182243B02,NYU_BMS_Melanoma_13059_P1,E19,iTru7_113_11,GGTTGATG,iTru5_03_G,GCATAACG,NYU_BMS_Melanoma_13059,pool2,EP182243B02 +1,EP333541B04,EP333541B04,NYU_BMS_Melanoma_13059_P1,G19,iTru7_113_12,AAGGACAC,iTru5_04_G,TCGAACCT,NYU_BMS_Melanoma_13059,pool1,EP333541B04 +1,EP238034B01,EP238034B01,NYU_BMS_Melanoma_13059_P1,I19,iTru7_114_01,TTGATCCG,iTru5_05_G,ACATGCCA,NYU_BMS_Melanoma_13059,pool2,EP238034B01 +1,AP298002B02,AP298002B02,NYU_BMS_Melanoma_13059_P1,K19,iTru7_114_02,GGTGATTC,iTru5_06_G,GATCTTGC,NYU_BMS_Melanoma_13059,pool1,AP298002B02 +1,EP455759B04,EP455759B04,NYU_BMS_Melanoma_13059_P1,M19,iTru7_114_03,GATTGCTC,iTru5_07_G,GTTAAGCG,NYU_BMS_Melanoma_13059,pool2,EP455759B04 +1,EP207042B04,EP207042B04,NYU_BMS_Melanoma_13059_P1,O19,iTru7_114_04,ACCTGGAA,iTru5_08_G,GTCATCGT,NYU_BMS_Melanoma_13059,pool1,EP207042B04 +1,LP128479A01,LP128479A01,NYU_BMS_Melanoma_13059_P1,A21,iTru7_114_05,CATCTACG,iTru5_09_G,TCAGACAC,NYU_BMS_Melanoma_13059,pool2,LP128479A01 +1,LP128476A01,LP128476A01,NYU_BMS_Melanoma_13059_P1,C21,iTru7_114_06,CCGTATCT,iTru5_10_G,GTCCTAAG,NYU_BMS_Melanoma_13059,pool1,LP128476A01 +1,EP316863B03,EP316863B03,NYU_BMS_Melanoma_13059_P1,E21,iTru7_114_07,CGGAATAC,iTru5_11_G,AGACCTTG,NYU_BMS_Melanoma_13059,pool2,EP316863B03 +1,C20,C20,NYU_BMS_Melanoma_13059_P1,G21,iTru7_114_08,CTCCTAGA,iTru5_12_G,AGACATGC,NYU_BMS_Melanoma_13059,pool1,C20 +1,lp127896a01,lp127896a01,NYU_BMS_Melanoma_13059_P1,I21,iTru7_114_09,TGGTAGCT,iTru5_01_H,TAGCTGAG,NYU_BMS_Melanoma_13059,pool2,lp127896a01 +1,SP491907A02,SP491907A02,NYU_BMS_Melanoma_13059_P1,K21,iTru7_114_10,TCGAAGGT,iTru5_02_H,TTCGAAGC,NYU_BMS_Melanoma_13059,pool1,SP491907A02 +1,EP182060B03,EP182060B03,NYU_BMS_Melanoma_13059_P1,M21,iTru7_114_11,ACATAGGC,iTru5_03_H,CAGTGCTT,NYU_BMS_Melanoma_13059,pool2,EP182060B03 +1,EP422407B01,EP422407B01,NYU_BMS_Melanoma_13059_P1,O21,iTru7_114_12,CTCAGAGT,iTru5_04_H,TAGTGCCA,NYU_BMS_Melanoma_13059,pool1,EP422407B01 +1,SP573859A04,SP573859A04,NYU_BMS_Melanoma_13059_P1,A23,iTru7_201_01,CTTGGATG,iTru5_05_H,GATGGAGT,NYU_BMS_Melanoma_13059,pool2,SP573859A04 +1,SP584547A02,SP584547A02,NYU_BMS_Melanoma_13059_P1,C23,iTru7_201_02,CAGTTGGA,iTru5_06_H,CCTCGTTA,NYU_BMS_Melanoma_13059,pool1,SP584547A02 +1,EP182346B04,EP182346B04,NYU_BMS_Melanoma_13059_P1,E23,iTru7_201_03,GATAGGCT,iTru5_07_H,CGATTGGA,NYU_BMS_Melanoma_13059,pool2,EP182346B04 +1,AP668631B04,AP668631B04,NYU_BMS_Melanoma_13059_P1,G23,iTru7_201_04,TTGACAGG,iTru5_08_H,CCAACGAA,NYU_BMS_Melanoma_13059,pool1,AP668631B04 +1,EP451428B04,EP451428B04,NYU_BMS_Melanoma_13059_P1,I23,iTru7_201_05,AGAATGCC,iTru5_09_H,AGAAGGAC,NYU_BMS_Melanoma_13059,pool2,EP451428B04 +1,LP128538A01,LP128538A01,NYU_BMS_Melanoma_13059_P1,K23,iTru7_201_06,CTACATCC,iTru5_10_H,TGACCGTT,NYU_BMS_Melanoma_13059,pool1,LP128538A01 +1,SP490298A02,SP490298A02,NYU_BMS_Melanoma_13059_P1,M23,iTru7_201_07,TCATGGTG,iTru5_11_H,GCGTTAGA,NYU_BMS_Melanoma_13059,pool2,SP490298A02 +1,SP573860A01,SP573860A01,NYU_BMS_Melanoma_13059_P1,O23,iTru7_201_08,TACACGCT,iTru5_12_H,TCTAGGAG,NYU_BMS_Melanoma_13059,pool1,SP573860A01 +1,EP032412B02,EP032412B02,NYU_BMS_Melanoma_13059_P2,A2,iTru7_201_09,TACGGTTG,iTru5_13_A,GGTATAGG,NYU_BMS_Melanoma_13059,pool2,EP032412B02 +1,EP163771B01,EP163771B01,NYU_BMS_Melanoma_13059_P2,C2,iTru7_201_10,GGATACCA,iTru5_14_A,TCCGATCA,NYU_BMS_Melanoma_13059,pool1,EP163771B01 +1,LP169879A01,LP169879A01,NYU_BMS_Melanoma_13059_P2,E2,iTru7_201_11,TCGACATC,iTru5_15_A,CGACCTAA,NYU_BMS_Melanoma_13059,pool2,LP169879A01 +1,EP729433A02,EP729433A02,NYU_BMS_Melanoma_13059_P2,G2,iTru7_201_12,GTTGTAGC,iTru5_16_A,GACATCTC,NYU_BMS_Melanoma_13059,pool1,EP729433A02 +1,EP447940B04,EP447940B04,NYU_BMS_Melanoma_13059_P2,I2,iTru7_202_01,ATACGACC,iTru5_17_A,CCAGTATC,NYU_BMS_Melanoma_13059,pool2,EP447940B04 +1,SP584551A08,SP584551A08,NYU_BMS_Melanoma_13059_P2,K2,iTru7_202_02,TTCCAAGG,iTru5_18_A,ACGCTTCT,NYU_BMS_Melanoma_13059,pool1,SP584551A08 +1,EP216516B04,EP216516B04,NYU_BMS_Melanoma_13059_P2,M2,iTru7_202_03,TTGCAGAC,iTru5_19_A,AACGCACA,NYU_BMS_Melanoma_13059,pool2,EP216516B04 +1,EP023808B02,EP023808B02,NYU_BMS_Melanoma_13059_P2,O2,iTru7_202_04,TGCCATTC,iTru5_20_A,TGATCACG,NYU_BMS_Melanoma_13059,pool1,EP023808B02 +1,BLANK2_2A,BLANK2.2A,NYU_BMS_Melanoma_13059_P2,A4,iTru7_202_05,GATGTGTG,iTru5_21_A,GCGTATCA,NYU_BMS_Melanoma_13059,pool2,BLANK2.2A +1,BLANK2_2B,BLANK2.2B,NYU_BMS_Melanoma_13059_P2,C4,iTru7_202_06,ACTCTCGA,iTru5_22_A,GTGTCCTT,NYU_BMS_Melanoma_13059,pool1,BLANK2.2B +1,BLANK2_2C,BLANK2.2C,NYU_BMS_Melanoma_13059_P2,E4,iTru7_202_07,GAGTCTCT,iTru5_23_A,GGTAACGT,NYU_BMS_Melanoma_13059,pool2,BLANK2.2C +1,BLANK2_2D,BLANK2.2D,NYU_BMS_Melanoma_13059_P2,G4,iTru7_202_08,CAACACCT,iTru5_24_A,CGAGAGAA,NYU_BMS_Melanoma_13059,pool1,BLANK2.2D +1,BLANK2_2E,BLANK2.2E,NYU_BMS_Melanoma_13059_P2,I4,iTru7_202_09,CAGTCTTC,iTru5_13_B,CATTGACG,NYU_BMS_Melanoma_13059,pool2,BLANK2.2E +1,BLANK2_2F,BLANK2.2F,NYU_BMS_Melanoma_13059_P2,K4,iTru7_202_10,GGACTGTT,iTru5_14_B,GGTGATGA,NYU_BMS_Melanoma_13059,pool1,BLANK2.2F +1,BLANK2_2G,BLANK2.2G,NYU_BMS_Melanoma_13059_P2,M4,iTru7_202_11,CTTAGTGG,iTru5_15_B,AACCGTGT,NYU_BMS_Melanoma_13059,pool2,BLANK2.2G +1,BLANK2_2H,BLANK2.2H,NYU_BMS_Melanoma_13059_P2,O4,iTru7_202_12,ATTGCGTG,iTru5_16_B,CCTATTGG,NYU_BMS_Melanoma_13059,pool1,BLANK2.2H +1,SP573843A04,SP573843A04,NYU_BMS_Melanoma_13059_P2,A6,iTru7_203_01,GTAACGAC,iTru5_17_B,TCAGTAGG,NYU_BMS_Melanoma_13059,pool2,SP573843A04 +1,EP683835A01,EP683835A01,NYU_BMS_Melanoma_13059_P2,C6,iTru7_203_02,CTTGCTGT,iTru5_18_B,TATGCGGT,NYU_BMS_Melanoma_13059,pool1,EP683835A01 +1,SP573824A04,SP573824A04,NYU_BMS_Melanoma_13059_P2,E6,iTru7_203_03,GTTGTTCG,iTru5_19_B,ATGCCTAG,NYU_BMS_Melanoma_13059,pool2,SP573824A04 +1,SP335002A04,SP335002A04,NYU_BMS_Melanoma_13059_P2,G6,iTru7_203_04,CGTTGAGT,iTru5_20_B,CTAGCAGT,NYU_BMS_Melanoma_13059,pool1,SP335002A04 +1,SP478193A02,SP478193A02,NYU_BMS_Melanoma_13059_P2,I6,iTru7_203_05,TCGAACCA,iTru5_21_B,AGGTCAAC,NYU_BMS_Melanoma_13059,pool2,SP478193A02 +1,SP232311A04,SP232311A04,NYU_BMS_Melanoma_13059_P2,K6,iTru7_203_06,AGACCGTA,iTru5_22_B,GAACGTGA,NYU_BMS_Melanoma_13059,pool1,SP232311A04 +1,SP415021A02,SP415021A02,NYU_BMS_Melanoma_13059_P2,M6,iTru7_203_07,CAGAGTGT,iTru5_23_B,ATCATGCG,NYU_BMS_Melanoma_13059,pool2,SP415021A02 +1,SP231630A02,SP231630A02,NYU_BMS_Melanoma_13059_P2,O6,iTru7_203_08,GACAAGAG,iTru5_24_B,CAACGAGT,NYU_BMS_Melanoma_13059,pool1,SP231630A02 +1,SP641029A02,SP641029A02,NYU_BMS_Melanoma_13059_P2,A8,iTru7_203_09,GAACACAC,iTru5_13_C,CGCAATGT,NYU_BMS_Melanoma_13059,pool2,SP641029A02 +1,SP232310A04,SP232310A04,NYU_BMS_Melanoma_13059_P2,C8,iTru7_203_10,GCTTAGCT,iTru5_14_C,AACAAGGC,NYU_BMS_Melanoma_13059,pool1,SP232310A04 +1,EP617442B01,EP617442B01,NYU_BMS_Melanoma_13059_P2,E8,iTru7_203_11,GAAGGAAG,iTru5_15_C,ACCATGTC,NYU_BMS_Melanoma_13059,pool2,EP617442B01 +1,EP587478B04,EP587478B04,NYU_BMS_Melanoma_13059_P2,G8,iTru7_203_12,CAGTTCTG,iTru5_16_C,AATCCAGC,NYU_BMS_Melanoma_13059,pool1,EP587478B04 +1,EP447928B04,EP447928B04,NYU_BMS_Melanoma_13059_P2,I8,iTru7_204_01,CAGGAGAT,iTru5_17_C,TTGCAACG,NYU_BMS_Melanoma_13059,pool2,EP447928B04 +1,EP587475B04,EP587475B04,NYU_BMS_Melanoma_13059_P2,K8,iTru7_204_02,GTAGCATC,iTru5_18_C,ACCTTCGA,NYU_BMS_Melanoma_13059,pool1,EP587475B04 +1,EP675042B01,EP675042B01,NYU_BMS_Melanoma_13059_P2,M8,iTru7_204_03,TCGTTCGT,iTru5_19_C,CATACGGA,NYU_BMS_Melanoma_13059,pool2,EP675042B01 +1,EP554513B02,EP554513B02,NYU_BMS_Melanoma_13059_P2,O8,iTru7_204_04,GGCAAGTT,iTru5_20_C,GACCGATA,NYU_BMS_Melanoma_13059,pool1,EP554513B02 +1,EP702221B04,EP702221B04,NYU_BMS_Melanoma_13059_P2,A10,iTru7_204_05,ACCATGTG,iTru5_21_C,AAGCTGGT,NYU_BMS_Melanoma_13059,pool2,EP702221B04 +1,AP568787B02,AP568787B02,NYU_BMS_Melanoma_13059_P2,C10,iTru7_204_06,CAACGGAT,iTru5_22_C,ACACCTCA,NYU_BMS_Melanoma_13059,pool1,AP568787B02 +1,EP054632B01,EP054632B01,NYU_BMS_Melanoma_13059_P2,E10,iTru7_204_07,CAATCGAC,iTru5_23_C,CGGAGTAT,NYU_BMS_Melanoma_13059,pool2,EP054632B01 +1,EP121013B01,EP121013B01,NYU_BMS_Melanoma_13059_P2,G10,iTru7_204_08,GTGTTCCT,iTru5_24_C,CTCGACTT,NYU_BMS_Melanoma_13059,pool1,EP121013B01 +1,EP649418A02,EP649418A02,NYU_BMS_Melanoma_13059_P2,I10,iTru7_204_09,AGGAACCT,iTru5_13_D,ATCCACGA,NYU_BMS_Melanoma_13059,pool2,EP649418A02 +1,EP573313B01,EP573313B01,NYU_BMS_Melanoma_13059_P2,K10,iTru7_204_10,ACCTTCTC,iTru5_14_D,ACAGTTCG,NYU_BMS_Melanoma_13059,pool1,EP573313B01 +1,LP154981A01,LP154981A01,NYU_BMS_Melanoma_13059_P2,M10,iTru7_204_11,CCGTAAGA,iTru5_15_D,ACAAGACG,NYU_BMS_Melanoma_13059,pool2,LP154981A01 +1,AP470859B01,AP470859B01,NYU_BMS_Melanoma_13059_P2,O10,iTru7_204_12,ATCGGTGT,iTru5_16_D,ATCGTGGT,NYU_BMS_Melanoma_13059,pool1,AP470859B01 +1,LP154986A01,LP154986A01,NYU_BMS_Melanoma_13059_P2,A12,iTru7_205_01,AGCTCCTA,iTru5_17_D,AGTCAGGT,NYU_BMS_Melanoma_13059,pool2,LP154986A01 +1,AP732307B04,AP732307B04,NYU_BMS_Melanoma_13059_P2,C12,iTru7_205_02,CCTTGATC,iTru5_18_D,CATCAACC,NYU_BMS_Melanoma_13059,pool1,AP732307B04 +1,EP533426B03,EP533426B03,NYU_BMS_Melanoma_13059_P2,E12,iTru7_205_03,CCATTCAC,iTru5_19_D,GGTCACTA,NYU_BMS_Melanoma_13059,pool2,EP533426B03 +1,EP587476B04,EP587476B04,NYU_BMS_Melanoma_13059_P2,G12,iTru7_205_04,GGACAATC,iTru5_20_D,CGGCATTA,NYU_BMS_Melanoma_13059,pool1,EP587476B04 +1,AP696363B02,AP696363B02,NYU_BMS_Melanoma_13059_P2,I12,iTru7_205_05,AAGGCGTT,iTru5_21_D,ACTCGATC,NYU_BMS_Melanoma_13059,pool2,AP696363B02 +1,EP587477B04,EP587477B04,NYU_BMS_Melanoma_13059_P2,K12,iTru7_205_06,GCCATAAC,iTru5_22_D,ATAGGTCC,NYU_BMS_Melanoma_13059,pool1,EP587477B04 +1,SP683466A02,SP683466A02,NYU_BMS_Melanoma_13059_P2,M12,iTru7_205_07,GAAGTTGG,iTru5_23_D,CAGTCACA,NYU_BMS_Melanoma_13059,pool2,SP683466A02 +1,EP554518B04,EP554518B04,NYU_BMS_Melanoma_13059_P2,O12,iTru7_205_08,AGCCAAGT,iTru5_24_D,TAGTGGTG,NYU_BMS_Melanoma_13059,pool1,EP554518B04 +1,EP533429B04,EP533429B04,NYU_BMS_Melanoma_13059_P2,A14,iTru7_205_09,TGACTGAC,iTru5_13_E,CTCCTGAA,NYU_BMS_Melanoma_13059,pool2,EP533429B04 +1,EP431570B01,EP431570B01,NYU_BMS_Melanoma_13059_P2,C14,iTru7_205_10,CACCTGTT,iTru5_14_E,AATCGCTG,NYU_BMS_Melanoma_13059,pool1,EP431570B01 +1,EP202095B04,EP202095B04,NYU_BMS_Melanoma_13059_P2,E14,iTru7_205_11,ATCCGGTA,iTru5_15_E,TGATAGGC,NYU_BMS_Melanoma_13059,pool2,EP202095B04 +1,EP504030B04,EP504030B04,NYU_BMS_Melanoma_13059_P2,G14,iTru7_205_12,ATCTGTCC,iTru5_16_E,ATGCGTCA,NYU_BMS_Melanoma_13059,pool1,EP504030B04 +1,EP207036B01,EP207036B01,NYU_BMS_Melanoma_13059_P2,I14,iTru7_206_01,CCAAGACT,iTru5_17_E,CAGCATAC,NYU_BMS_Melanoma_13059,pool2,EP207036B01 +1,EP393717B01,EP393717B01,NYU_BMS_Melanoma_13059_P2,K14,iTru7_206_02,ATGGCGAA,iTru5_18_E,AAGTGCAG,NYU_BMS_Melanoma_13059,pool1,EP393717B01 +1,SP491898A02,SP491898A02,NYU_BMS_Melanoma_13059_P2,M14,iTru7_206_03,GGTAGTGT,iTru5_19_E,GTATTCCG,NYU_BMS_Melanoma_13059,pool2,SP491898A02 +1,EP484973B04,EP484973B04,NYU_BMS_Melanoma_13059_P2,O14,iTru7_206_04,TCGCTGTT,iTru5_20_E,GTGATCCA,NYU_BMS_Melanoma_13059,pool1,EP484973B04 +1,EP479794B02,EP479794B02,NYU_BMS_Melanoma_13059_P2,A16,iTru7_206_05,AACGTGGA,iTru5_21_E,TATGGCAC,NYU_BMS_Melanoma_13059,pool2,EP479794B02 +1,EP554515B04,EP554515B04,NYU_BMS_Melanoma_13059_P2,C16,iTru7_206_06,AACGACGT,iTru5_22_E,ACCATAGG,NYU_BMS_Melanoma_13059,pool1,EP554515B04 +1,SP631994A04,SP631994A04,NYU_BMS_Melanoma_13059_P2,E16,iTru7_206_07,AACAGGAC,iTru5_23_E,CTCCAATC,NYU_BMS_Melanoma_13059,pool2,SP631994A04 +1,EP921593A04,EP921593A04,NYU_BMS_Melanoma_13059_P2,G16,iTru7_206_08,AAGCGCAT,iTru5_24_E,AGATACGG,NYU_BMS_Melanoma_13059,pool1,EP921593A04 +1,AP787247B04,AP787247B04,NYU_BMS_Melanoma_13059_P2,I16,iTru7_206_09,CACTGACA,iTru5_13_F,TCGATGAC,NYU_BMS_Melanoma_13059,pool2,AP787247B04 +1,EP090129B04,EP090129B04,NYU_BMS_Melanoma_13059_P2,K16,iTru7_206_10,AGGTCACT,iTru5_14_F,CCAACACT,NYU_BMS_Melanoma_13059,pool1,EP090129B04 +1,EP447975B02,EP447975B02,NYU_BMS_Melanoma_13059_P2,M16,iTru7_206_11,GTCACTGT,iTru5_15_F,CTTCACTG,NYU_BMS_Melanoma_13059,pool2,EP447975B02 +1,EP212214B01,EP212214B01,NYU_BMS_Melanoma_13059_P2,O16,iTru7_206_12,ATGCCAAC,iTru5_16_F,CGATGTTC,NYU_BMS_Melanoma_13059,pool1,EP212214B01 +1,EP410042B01,EP410042B01,NYU_BMS_Melanoma_13059_P2,A18,iTru7_207_01,CACGTTGT,iTru5_17_F,ACCGGTTA,NYU_BMS_Melanoma_13059,pool2,EP410042B01 +1,SP404409A02,SP404409A02,NYU_BMS_Melanoma_13059_P2,C18,iTru7_207_02,TATTCCGG,iTru5_18_F,CTTACAGC,NYU_BMS_Melanoma_13059,pool1,SP404409A02 +1,SP247340A04,SP247340A04,NYU_BMS_Melanoma_13059_P2,E18,iTru7_207_03,TGCTTCCA,iTru5_19_F,TGGCTCTT,NYU_BMS_Melanoma_13059,pool2,SP247340A04 +1,AP029018B01,AP029018B01,NYU_BMS_Melanoma_13059_P2,G18,iTru7_207_04,GTCTAGGT,iTru5_20_F,AAGACCGT,NYU_BMS_Melanoma_13059,pool1,AP029018B01 +1,EP872341A01,EP872341A01,NYU_BMS_Melanoma_13059_P2,I18,iTru7_207_05,GTTCAACC,iTru5_21_F,GGACATCA,NYU_BMS_Melanoma_13059,pool2,EP872341A01 +1,AP062219B03,AP062219B03,NYU_BMS_Melanoma_13059_P2,K18,iTru7_207_06,CGCAATCT,iTru5_22_F,TTGGTGCA,NYU_BMS_Melanoma_13059,pool1,AP062219B03 +1,EP790020A02,EP790020A02,NYU_BMS_Melanoma_13059_P2,M18,iTru7_207_07,TTAAGCGG,iTru5_23_F,AAGCGTTC,NYU_BMS_Melanoma_13059,pool2,EP790020A02 +1,EP808112A04,EP808112A04,NYU_BMS_Melanoma_13059_P2,O18,iTru7_207_08,TGCTTGGT,iTru5_24_F,ACTCTCCA,NYU_BMS_Melanoma_13059,pool1,EP808112A04 +1,SP404403A02,SP404403A02,NYU_BMS_Melanoma_13059_P2,A20,iTru7_207_09,ACACACTC,iTru5_13_G,GAACCTTC,NYU_BMS_Melanoma_13059,pool2,SP404403A02 +1,EP073160B01,EP073160B01,NYU_BMS_Melanoma_13059_P2,C20,iTru7_207_10,CCACTTCT,iTru5_14_G,GGAACATG,NYU_BMS_Melanoma_13059,pool1,EP073160B01 +1,EP012991B03,EP012991B03,NYU_BMS_Melanoma_13059_P2,E20,iTru7_207_11,TTGGTCTC,iTru5_15_G,GCCTATGT,NYU_BMS_Melanoma_13059,pool2,EP012991B03 +1,SP317297A02,SP317297A02,NYU_BMS_Melanoma_13059_P2,G20,iTru7_207_12,CTCATCAG,iTru5_16_G,CCGTAACT,NYU_BMS_Melanoma_13059,pool1,SP317297A02 +1,EP656055A04,EP656055A04,NYU_BMS_Melanoma_13059_P2,I20,iTru7_208_01,ATGACGTC,iTru5_17_G,CGGATCAA,NYU_BMS_Melanoma_13059,pool2,EP656055A04 +1,EP649623A01,EP649623A01,NYU_BMS_Melanoma_13059_P2,K20,iTru7_208_02,AACCTTGG,iTru5_18_G,CCACATTG,NYU_BMS_Melanoma_13059,pool1,EP649623A01 +1,EP790019A01,EP790019A01,NYU_BMS_Melanoma_13059_P2,M20,iTru7_208_03,GTCTTGCA,iTru5_19_G,CTCTATCG,NYU_BMS_Melanoma_13059,pool2,EP790019A01 +1,SP257519A04,SP257519A04,NYU_BMS_Melanoma_13059_P2,O20,iTru7_208_04,CAAGTGCA,iTru5_20_G,TGTGTCAG,NYU_BMS_Melanoma_13059,pool1,SP257519A04 +1,EP808104A01,EP808104A01,NYU_BMS_Melanoma_13059_P2,A22,iTru7_208_05,TCCGAGTT,iTru5_21_G,CGCAACTA,NYU_BMS_Melanoma_13059,pool2,EP808104A01 +1,EP808106A01,EP808106A01,NYU_BMS_Melanoma_13059_P2,C22,iTru7_208_06,ACCTAAGG,iTru5_22_G,GATCAGAC,NYU_BMS_Melanoma_13059,pool1,EP808106A01 +1,SP231629A02,SP231629A02,NYU_BMS_Melanoma_13059_P2,E22,iTru7_208_07,TTGGACGT,iTru5_23_G,ATTCCGCT,NYU_BMS_Melanoma_13059,pool2,SP231629A02 +1,EP675044A01,EP675044A01,NYU_BMS_Melanoma_13059_P2,G22,iTru7_208_08,GATAGCGA,iTru5_24_G,ATCCTTCC,NYU_BMS_Melanoma_13059,pool1,EP675044A01 +1,EP657260A01,EP657260A01,NYU_BMS_Melanoma_13059_P2,I22,iTru7_208_09,TTGGTGAG,iTru5_13_H,GCTTCACA,NYU_BMS_Melanoma_13059,pool2,EP657260A01 +1,EP808110A04,EP808110A04,NYU_BMS_Melanoma_13059_P2,K22,iTru7_208_10,AACTGGTG,iTru5_14_H,CTTCGGTT,NYU_BMS_Melanoma_13059,pool1,EP808110A04 +1,AP032413B04,AP032413B04,NYU_BMS_Melanoma_13059_P2,M22,iTru7_208_11,TAGCCGAA,iTru5_15_H,CATGGATC,NYU_BMS_Melanoma_13059,pool2,AP032413B04 +1,EP843906A04,EP843906A04,NYU_BMS_Melanoma_13059_P2,O22,iTru7_208_12,TGCGAACT,iTru5_16_H,GTCAACAG,NYU_BMS_Melanoma_13059,pool1,EP843906A04 +1,AP173305B04,AP173305B04,NYU_BMS_Melanoma_13059_P2,A24,iTru7_209_01,GACTTAGG,iTru5_17_H,AATTCCGG,NYU_BMS_Melanoma_13059,pool2,AP173305B04 +1,SP231628A02,SP231628A02,NYU_BMS_Melanoma_13059_P2,C24,iTru7_209_02,ACACCAGT,iTru5_18_H,GGCGAATA,NYU_BMS_Melanoma_13059,pool1,SP231628A02 +1,AP173301B04,AP173301B04,NYU_BMS_Melanoma_13059_P2,E24,iTru7_209_03,CCTGATTG,iTru5_19_H,AGGAGGTT,NYU_BMS_Melanoma_13059,pool2,AP173301B04 +1,SP404405A02,SP404405A02,NYU_BMS_Melanoma_13059_P2,G24,iTru7_209_04,TTGTGTGC,iTru5_20_H,ACTCTGAG,NYU_BMS_Melanoma_13059,pool1,SP404405A02 +1,EP649653A04,EP649653A04,NYU_BMS_Melanoma_13059_P2,I24,iTru7_209_05,TACCACAG,iTru5_21_H,GCCTTCTT,NYU_BMS_Melanoma_13059,pool2,EP649653A04 +1,EP718687A04,EP718687A04,NYU_BMS_Melanoma_13059_P2,K24,iTru7_209_06,ATTCGAGG,iTru5_22_H,TGGACCAT,NYU_BMS_Melanoma_13059,pool1,EP718687A04 +1,AP905750A02,AP905750A02,NYU_BMS_Melanoma_13059_P2,M24,iTru7_209_07,GCACGTAA,iTru5_23_H,GCATAGTC,NYU_BMS_Melanoma_13059,pool2,AP905750A02 +1,EP738468A01,EP738468A01,NYU_BMS_Melanoma_13059_P2,O24,iTru7_209_08,GTGTGACA,iTru5_24_H,TACACACG,NYU_BMS_Melanoma_13059,pool1,EP738468A01 +1,C6,C6,NYU_BMS_Melanoma_13059_P3,B1,iTru7_209_09,CTGGTTCT,iTru5_101_A,AACAACCG,NYU_BMS_Melanoma_13059,pool2,C6 +1,EP890157A02,EP890157A02,NYU_BMS_Melanoma_13059_P3,D1,iTru7_209_10,ACTGTGTC,iTru5_102_A,AAGCCTGA,NYU_BMS_Melanoma_13059,pool1,EP890157A02 +1,SP353893A02,SP353893A02,NYU_BMS_Melanoma_13059_P3,F1,iTru7_209_11,CCATACGT,iTru5_103_A,AAGGACCA,NYU_BMS_Melanoma_13059,pool2,SP353893A02 +1,EP944059A02,EP944059A02,NYU_BMS_Melanoma_13059_P3,H1,iTru7_209_12,GGTACTAC,iTru5_104_A,ACAACGTG,NYU_BMS_Melanoma_13059,pool1,EP944059A02 +1,EP970005A01,EP970005A01,NYU_BMS_Melanoma_13059_P3,J1,iTru7_210_01,CAGTCCAA,iTru5_105_A,ACGAACGA,NYU_BMS_Melanoma_13059,pool2,EP970005A01 +1,EP927461A04,EP927461A04,NYU_BMS_Melanoma_13059_P3,L1,iTru7_210_02,TCGTAGTC,iTru5_106_A,ACGTCCAA,NYU_BMS_Melanoma_13059,pool1,EP927461A04 +1,EP808111A03,EP808111A03,NYU_BMS_Melanoma_13059_P3,N1,iTru7_210_03,TCGAGTGA,iTru5_107_A,ACTGGTGT,NYU_BMS_Melanoma_13059,pool2,EP808111A03 +1,EP927459A04,EP927459A04,NYU_BMS_Melanoma_13059_P3,P1,iTru7_210_04,TGTAGCCA,iTru5_108_A,AGATCGTC,NYU_BMS_Melanoma_13059,pool1,EP927459A04 +1,SP317293A02,SP317293A02,NYU_BMS_Melanoma_13059_P3,B3,iTru7_210_05,TGCAGGTA,iTru5_109_A,AGCGAGAT,NYU_BMS_Melanoma_13059,pool2,SP317293A02 +1,SP235186A04,SP235186A04,NYU_BMS_Melanoma_13059_P3,D3,iTru7_210_06,CTAGGTGA,iTru5_110_A,AGGATAGC,NYU_BMS_Melanoma_13059,pool1,SP235186A04 +1,SP399724A04,SP399724A04,NYU_BMS_Melanoma_13059_P3,F3,iTru7_210_07,CTCCATGT,iTru5_111_A,AGGTGTTG,NYU_BMS_Melanoma_13059,pool2,SP399724A04 +1,EP738469A01,EP738469A01,NYU_BMS_Melanoma_13059_P3,H3,iTru7_210_08,CTTACAGC,iTru5_112_A,AGTCTTGG,NYU_BMS_Melanoma_13059,pool1,EP738469A01 +1,SP284095A03,SP284095A03,NYU_BMS_Melanoma_13059_P3,J3,iTru7_210_09,CGTATTCG,iTru5_101_B,GGTTGGTA,NYU_BMS_Melanoma_13059,pool2,SP284095A03 +1,C5,C5,NYU_BMS_Melanoma_13059_P3,L3,iTru7_210_10,ATTCTGGC,iTru5_102_B,GGAGGAAT,NYU_BMS_Melanoma_13059,pool1,C5 +1,EP337325B04,EP337325B04,NYU_BMS_Melanoma_13059_P3,N3,iTru7_210_11,TACCAGGA,iTru5_103_B,GTAAGGTG,NYU_BMS_Melanoma_13059,pool2,EP337325B04 +1,EP759450A04,EP759450A04,NYU_BMS_Melanoma_13059_P3,P3,iTru7_210_12,TACATCGG,iTru5_104_B,GGTGTACA,NYU_BMS_Melanoma_13059,pool1,EP759450A04 +1,BLANK3_3A,BLANK3.3A,NYU_BMS_Melanoma_13059_P3,B5,iTru7_301_01,GTGGTGTT,iTru5_105_B,GGATGTAG,NYU_BMS_Melanoma_13059,pool2,BLANK3.3A +1,BLANK3_3B,BLANK3.3B,NYU_BMS_Melanoma_13059_P3,D5,iTru7_301_02,CGCATGAT,iTru5_106_B,GTCCTGTT,NYU_BMS_Melanoma_13059,pool1,BLANK3.3B +1,BLANK3_3C,BLANK3.3C,NYU_BMS_Melanoma_13059_P3,F5,iTru7_301_03,AGTCGACA,iTru5_107_B,GTACCACA,NYU_BMS_Melanoma_13059,pool2,BLANK3.3C +1,BLANK3_3D,BLANK3.3D,NYU_BMS_Melanoma_13059_P3,H5,iTru7_301_04,GTGAGCTT,iTru5_108_B,GATCTCAG,NYU_BMS_Melanoma_13059,pool1,BLANK3.3D +1,BLANK3_3E,BLANK3.3E,NYU_BMS_Melanoma_13059_P3,J5,iTru7_301_05,GACATTCC,iTru5_109_B,GAGCTCTA,NYU_BMS_Melanoma_13059,pool2,BLANK3.3E +1,BLANK3_3F,BLANK3.3F,NYU_BMS_Melanoma_13059_P3,L5,iTru7_301_06,AGTTCGTC,iTru5_110_B,TACTAGCG,NYU_BMS_Melanoma_13059,pool1,BLANK3.3F +1,BLANK3_3G,BLANK3.3G,NYU_BMS_Melanoma_13059_P3,N5,iTru7_301_07,TAATGCCG,iTru5_111_B,GCACACAA,NYU_BMS_Melanoma_13059,pool2,BLANK3.3G +1,BLANK3_3H,BLANK3.3H,NYU_BMS_Melanoma_13059_P3,P5,iTru7_301_08,CGACCATT,iTru5_112_B,GAATCACC,NYU_BMS_Melanoma_13059,pool1,BLANK3.3H +1,AP006367B02,AP006367B02,NYU_BMS_Melanoma_13059_P3,B7,iTru7_301_09,CTGAAGCT,iTru5_101_C,AACAGCGA,NYU_BMS_Melanoma_13059,pool2,AP006367B02 +1,EP929277A02,EP929277A02,NYU_BMS_Melanoma_13059_P3,D7,iTru7_301_10,TTGAGGCA,iTru5_102_C,AAGCGACT,NYU_BMS_Melanoma_13059,pool1,EP929277A02 +1,AP324642B04,AP324642B04,NYU_BMS_Melanoma_13059_P3,F7,iTru7_301_11,GATCGAGT,iTru5_103_C,AAGGCGTA,NYU_BMS_Melanoma_13059,pool2,AP324642B04 +1,EP786631A04,EP786631A04,NYU_BMS_Melanoma_13059_P3,H7,iTru7_301_12,ATACTCCG,iTru5_104_C,ACACCGAT,NYU_BMS_Melanoma_13059,pool1,EP786631A04 +1,EP657385A04,EP657385A04,NYU_BMS_Melanoma_13059_P3,J7,iTru7_302_01,AAGTCCGT,iTru5_105_C,ACGAATCC,NYU_BMS_Melanoma_13059,pool2,EP657385A04 +1,SP235189A01,SP235189A01,NYU_BMS_Melanoma_13059_P3,L7,iTru7_302_02,TAGCGTCT,iTru5_106_C,ACTACGGT,NYU_BMS_Melanoma_13059,pool1,SP235189A01 +1,EP448041B04,EP448041B04,NYU_BMS_Melanoma_13059_P3,N7,iTru7_302_03,TGACGCAT,iTru5_107_C,AGAAGCCT,NYU_BMS_Melanoma_13059,pool2,EP448041B04 +1,SP231631A02,SP231631A02,NYU_BMS_Melanoma_13059_P3,P7,iTru7_302_04,AGCGTGTT,iTru5_108_C,AGATTGCG,NYU_BMS_Melanoma_13059,pool1,SP231631A02 +1,SP280481A02,SP280481A02,NYU_BMS_Melanoma_13059_P3,B9,iTru7_302_05,TGCACCAA,iTru5_109_C,AGCGTGTA,NYU_BMS_Melanoma_13059,pool2,SP280481A02 +1,AP032412B04,AP032412B04,NYU_BMS_Melanoma_13059_P3,D9,iTru7_302_06,ATCACACG,iTru5_110_C,AGGCTGAA,NYU_BMS_Melanoma_13059,pool1,AP032412B04 +1,EP649737A03,EP649737A03,NYU_BMS_Melanoma_13059_P3,F9,iTru7_302_07,ATGCCTGT,iTru5_111_C,AGGTTCCT,NYU_BMS_Melanoma_13059,pool2,EP649737A03 +1,AP967057A04,AP967057A04,NYU_BMS_Melanoma_13059_P3,H9,iTru7_302_08,ACCTGACT,iTru5_112_C,AGTGACCT,NYU_BMS_Melanoma_13059,pool1,AP967057A04 +1,EP876243A04,EP876243A04,NYU_BMS_Melanoma_13059_P3,J9,iTru7_302_09,GCTTCGAA,iTru5_101_D,GGTTAGCT,NYU_BMS_Melanoma_13059,pool2,EP876243A04 +1,SP229387A04,SP229387A04,NYU_BMS_Melanoma_13059_P3,L9,iTru7_302_10,CGGTCATA,iTru5_102_D,GTAGCGTA,NYU_BMS_Melanoma_13059,pool1,SP229387A04 +1,EP667743A04,EP667743A04,NYU_BMS_Melanoma_13059_P3,N9,iTru7_302_11,GTTAGACG,iTru5_103_D,GGACTACT,NYU_BMS_Melanoma_13059,pool2,EP667743A04 +1,SP246941A01,SP246941A01,NYU_BMS_Melanoma_13059_P3,P9,iTru7_302_12,TCTAACGC,iTru5_104_D,TGGTTCGA,NYU_BMS_Melanoma_13059,pool1,SP246941A01 +1,AP745799A04,AP745799A04,NYU_BMS_Melanoma_13059_P3,B11,iTru7_303_01,ATAGCGGT,iTru5_105_D,GGAGTCTT,NYU_BMS_Melanoma_13059,pool2,AP745799A04 +1,SP205732A02,SP205732A02,NYU_BMS_Melanoma_13059_P3,D11,iTru7_303_02,GGACCTAT,iTru5_106_D,GGATTCAC,NYU_BMS_Melanoma_13059,pool1,SP205732A02 +1,SP230382A04,SP230382A04,NYU_BMS_Melanoma_13059_P3,F11,iTru7_303_03,CGATGCTT,iTru5_107_D,TCGGATTC,NYU_BMS_Melanoma_13059,pool2,SP230382A04 +1,SP230380A02,SP230380A02,NYU_BMS_Melanoma_13059_P3,H11,iTru7_303_04,GAGCTTGT,iTru5_108_D,GAGCAATC,NYU_BMS_Melanoma_13059,pool1,SP230380A02 +1,SP230381A01,SP230381A01,NYU_BMS_Melanoma_13059_P3,J11,iTru7_303_05,GTGAAGTG,iTru5_109_D,GATCCACT,NYU_BMS_Melanoma_13059,pool2,SP230381A01 +1,SP205754A01,SP205754A01,NYU_BMS_Melanoma_13059_P3,L11,iTru7_303_06,GAGTGGTT,iTru5_110_D,GAAGACTG,NYU_BMS_Melanoma_13059,pool1,SP205754A01 +1,EP606662B04,EP606662B04,NYU_BMS_Melanoma_13059_P3,N11,iTru7_303_07,TGATACGC,iTru5_111_D,GCCACTTA,NYU_BMS_Melanoma_13059,pool2,EP606662B04 +1,AP780167B02,AP780167B02,NYU_BMS_Melanoma_13059_P3,P11,iTru7_303_08,AGCAGATG,iTru5_112_D,TCCATTGC,NYU_BMS_Melanoma_13059,pool1,AP780167B02 +1,EP447927B04,EP447927B04,NYU_BMS_Melanoma_13059_P3,B13,iTru7_303_09,CCAGTGTT,iTru5_101_E,AACAGTCC,NYU_BMS_Melanoma_13059,pool2,EP447927B04 +1,C18,C18,NYU_BMS_Melanoma_13059_P3,D13,iTru7_303_10,ATTCCTCC,iTru5_102_E,AAGCTCAC,NYU_BMS_Melanoma_13059,pool1,C18 +1,LP191039A01,LP191039A01,NYU_BMS_Melanoma_13059_P3,F13,iTru7_303_11,CTAACTCG,iTru5_103_E,AAGTCCTC,NYU_BMS_Melanoma_13059,pool2,LP191039A01 +1,EP606663B04,EP606663B04,NYU_BMS_Melanoma_13059_P3,H13,iTru7_303_12,GATGAGAC,iTru5_104_E,ACACTCTG,NYU_BMS_Melanoma_13059,pool1,EP606663B04 +1,EP573296B01,EP573296B01,NYU_BMS_Melanoma_13059_P3,J13,iTru7_304_01,TCAGGCTT,iTru5_105_E,ACGGTACA,NYU_BMS_Melanoma_13059,pool2,EP573296B01 +1,EP447926B04,EP447926B04,NYU_BMS_Melanoma_13059_P3,L13,iTru7_304_02,GTTCTCGT,iTru5_106_E,ACTCCTAC,NYU_BMS_Melanoma_13059,pool1,EP447926B04 +1,LP127767A01,LP127767A01,NYU_BMS_Melanoma_13059_P3,N13,iTru7_304_03,ATCGATCG,iTru5_107_E,AGAGGATG,NYU_BMS_Melanoma_13059,pool2,LP127767A01 +1,EP479266B04,EP479266B04,NYU_BMS_Melanoma_13059_P3,P13,iTru7_304_04,CCTCAGTT,iTru5_108_E,AGCCGTAA,NYU_BMS_Melanoma_13059,pool1,EP479266B04 +1,LP128543A01,LP128543A01,NYU_BMS_Melanoma_13059_P3,B15,iTru7_304_05,ACTGCTAG,iTru5_109_E,AGCTTCAG,NYU_BMS_Melanoma_13059,pool2,LP128543A01 +1,EP479270B03,EP479270B03,NYU_BMS_Melanoma_13059_P3,D15,iTru7_304_06,TCCGTGAA,iTru5_110_E,AGGTAGGA,NYU_BMS_Melanoma_13059,pool1,EP479270B03 +1,EP921594A04,EP921594A04,NYU_BMS_Melanoma_13059_P3,F15,iTru7_304_07,GGATTCGT,iTru5_111_E,AGTACACG,NYU_BMS_Melanoma_13059,pool2,EP921594A04 +1,EP554501B04,EP554501B04,NYU_BMS_Melanoma_13059_P3,H15,iTru7_304_08,GGTCAGAT,iTru5_112_E,AGTGCATC,NYU_BMS_Melanoma_13059,pool1,EP554501B04 +1,EP542577B04,EP542577B04,NYU_BMS_Melanoma_13059_P3,J15,iTru7_304_09,TCGTGGAT,iTru5_101_F,TTGGACTG,NYU_BMS_Melanoma_13059,pool2,EP542577B04 +1,EP487995B04,EP487995B04,NYU_BMS_Melanoma_13059_P3,L15,iTru7_304_10,CGTGTGTA,iTru5_102_F,GTCGATTG,NYU_BMS_Melanoma_13059,pool1,EP487995B04 +1,EP542578B04,EP542578B-4,NYU_BMS_Melanoma_13059_P3,N15,iTru7_304_11,GTGTCTGA,iTru5_103_F,GGCATTCT,NYU_BMS_Melanoma_13059,pool2,EP542578B-4 +1,EP573310B01,EP573310B01,NYU_BMS_Melanoma_13059_P3,P15,iTru7_304_12,GAATCGTG,iTru5_104_F,TGGTATCC,NYU_BMS_Melanoma_13059,pool1,EP573310B01 +1,EP244366B01,EP244366B01,NYU_BMS_Melanoma_13059_P3,B17,iTru7_305_01,GCGATAGT,iTru5_105_F,GGCAAGTT,NYU_BMS_Melanoma_13059,pool2,EP244366B01 +1,EP533389B03,EP533389B03,NYU_BMS_Melanoma_13059_P3,D17,iTru7_305_02,GGCTATTG,iTru5_106_F,GTCTGAGT,NYU_BMS_Melanoma_13059,pool1,EP533389B03 +1,EP244360B01,EP244360B01,NYU_BMS_Melanoma_13059_P3,F17,iTru7_305_03,AGTTACGG,iTru5_107_F,TCTACGCA,NYU_BMS_Melanoma_13059,pool2,EP244360B01 +1,AP911328B01,AP911328B01,NYU_BMS_Melanoma_13059_P3,H17,iTru7_305_04,CGTACGAA,iTru5_108_F,GAGGCATT,NYU_BMS_Melanoma_13059,pool1,AP911328B01 +1,AP481403B02,AP481403B02,NYU_BMS_Melanoma_13059_P3,J17,iTru7_305_05,ACCACGAT,iTru5_109_F,GCTAAGGA,NYU_BMS_Melanoma_13059,pool2,AP481403B02 +1,22_001_801_552_503_00,22.001.801.552.503.00,NYU_BMS_Melanoma_13059_P3,L17,iTru7_305_06,GATTACCG,iTru5_110_F,GCCAGAAT,NYU_BMS_Melanoma_13059,pool1,22_001_801_552_503_00 +1,EP372981B04,EP372981B04,NYU_BMS_Melanoma_13059_P3,N17,iTru7_305_07,GAGATACG,iTru5_111_F,TAAGTGGC,NYU_BMS_Melanoma_13059,pool2,EP372981B04 +1,EP447929B04,EP447929B04,NYU_BMS_Melanoma_13059_P3,P17,iTru7_305_08,CGACGTTA,iTru5_112_F,GCAATGAG,NYU_BMS_Melanoma_13059,pool1,EP447929B04 +1,SP573849A04,SP573849A04,NYU_BMS_Melanoma_13059_P3,B19,iTru7_305_09,GAGATGTC,iTru5_101_G,AACTGAGG,NYU_BMS_Melanoma_13059,pool2,SP573849A04 +1,SP577399A02,SP577399A02,NYU_BMS_Melanoma_13059_P3,D19,iTru7_305_10,GATTGGAG,iTru5_102_G,AAGGAAGG,NYU_BMS_Melanoma_13059,pool1,SP577399A02 +1,EP606656B03,EP606656B03,NYU_BMS_Melanoma_13059_P3,F19,iTru7_305_11,GCAATTCG,iTru5_103_G,AATGGTCG,NYU_BMS_Melanoma_13059,pool2,EP606656B03 +1,LP166715A01,LP166715A01,NYU_BMS_Melanoma_13059_P3,H19,iTru7_305_12,CGTCAATG,iTru5_104_G,ACAGCAAG,NYU_BMS_Melanoma_13059,pool1,LP166715A01 +1,AP668628B04,AP668628B04,NYU_BMS_Melanoma_13059_P3,J19,iTru7_401_01,ATGCACGA,iTru5_105_G,ACGTATGG,NYU_BMS_Melanoma_13059,pool2,AP668628B04 +1,C14,C14,NYU_BMS_Melanoma_13059_P3,L19,iTru7_401_02,ATCGCCAT,iTru5_106_G,ACTGCACT,NYU_BMS_Melanoma_13059,pool1,C14 +1,EP446610B02,EP446610B02,NYU_BMS_Melanoma_13059_P3,N19,iTru7_401_03,TCTCGCAA,iTru5_107_G,AGAGTCCA,NYU_BMS_Melanoma_13059,pool2,EP446610B02 +1,EP339061B02,EP339061B02,NYU_BMS_Melanoma_13059_P3,P19,iTru7_401_04,ACGACAGA,iTru5_108_G,AGCCTATC,NYU_BMS_Melanoma_13059,pool1,EP339061B02 +1,SP681591A04,SP681591A04,NYU_BMS_Melanoma_13059_P3,B21,iTru7_401_05,TTACGGCT,iTru5_109_G,AGGAACAC,NYU_BMS_Melanoma_13059,pool2,SP681591A04 +1,EP393712B02,EP393712B02,NYU_BMS_Melanoma_13059_P3,D21,iTru7_401_06,GAGGACTT,iTru5_110_G,AGGTCTGT,NYU_BMS_Melanoma_13059,pool1,EP393712B02 +1,EP410041B01,EP410041B01,NYU_BMS_Melanoma_13059_P3,F21,iTru7_401_07,GGCATACT,iTru5_111_G,AGTATGCC,NYU_BMS_Melanoma_13059,pool2,EP410041B01 +1,SP453872A01,SP453872A01,NYU_BMS_Melanoma_13059_P3,H21,iTru7_401_08,CGTAGGTT,iTru5_112_G,AGTTCGCA,NYU_BMS_Melanoma_13059,pool1,SP453872A01 +1,22_001_710_503_791_00,22.001.710.503.791.00,NYU_BMS_Melanoma_13059_P3,J21,iTru7_401_09,ATATGCGC,iTru5_101_H,TGGAAGCA,NYU_BMS_Melanoma_13059,pool2,22_001_710_503_791_00 +1,LP128540A01,LP128540A01,NYU_BMS_Melanoma_13059_P3,L21,iTru7_401_10,GGATGTAG,iTru5_102_H,GTCAGTCA,NYU_BMS_Melanoma_13059,pool1,LP128540A01 +1,EP339053B02,EP339053B02,NYU_BMS_Melanoma_13059_P3,N21,iTru7_401_11,CCTGTCAT,iTru5_103_H,GTAACCGA,NYU_BMS_Melanoma_13059,pool2,EP339053B02 +1,EP617443B01,EP617443B01,NYU_BMS_Melanoma_13059_P3,P21,iTru7_401_12,TGCTCATG,iTru5_104_H,GTTATGGC,NYU_BMS_Melanoma_13059,pool1,EP617443B01 +1,EP190307B01,EP190307B01,NYU_BMS_Melanoma_13059_P3,B23,iTru7_402_01,TGAAGACG,iTru5_105_H,GTAAGCAC,NYU_BMS_Melanoma_13059,pool2,EP190307B01 +1,AP795068B04,AP795068B04,NYU_BMS_Melanoma_13059_P3,D23,iTru7_402_02,GTTACGCA,iTru5_106_H,GGAATGTC,NYU_BMS_Melanoma_13059,pool1,AP795068B04 +1,LP128541A01,LP128541A01,NYU_BMS_Melanoma_13059_P3,F23,iTru7_402_03,ACTCAGAC,iTru5_107_H,GAGAAGGT,NYU_BMS_Melanoma_13059,pool2,LP128541A01 +1,EP584756B04,EP584756B04,NYU_BMS_Melanoma_13059_P3,H23,iTru7_402_04,GTCCACAT,iTru5_108_H,GAGTAGAG,NYU_BMS_Melanoma_13059,pool1,EP584756B04 +1,SP284096A02,SP284096A02,NYU_BMS_Melanoma_13059_P3,J23,iTru7_402_05,CGCTAGTA,iTru5_109_H,GCATTGGT,NYU_BMS_Melanoma_13059,pool2,SP284096A02 +1,EP431562B04,EP431562B04,NYU_BMS_Melanoma_13059_P3,L23,iTru7_402_06,GAATCCGA,iTru5_110_H,TCCAGCAA,NYU_BMS_Melanoma_13059,pool1,EP431562B04 +1,EP685640B01,EP685640B01,NYU_BMS_Melanoma_13059_P3,N23,iTru7_402_07,GAGACGAT,iTru5_111_H,GAATCCGT,NYU_BMS_Melanoma_13059,pool2,EP685640B01 +1,EP339059B02,EP339059B02,NYU_BMS_Melanoma_13059_P3,P23,iTru7_402_08,TAAGTGGC,iTru5_112_H,TACATCGG,NYU_BMS_Melanoma_13059,pool1,EP339059B02 +1,EP431575B01,EP431575B01,NYU_BMS_Melanoma_13059_P4,B2,iTru7_402_09,ACTGAGGT,iTru5_113_A,ATAACGCC,NYU_BMS_Melanoma_13059,pool2,EP431575B01 +1,EP379938B01,EP379938B01,NYU_BMS_Melanoma_13059_P4,D2,iTru7_402_10,TGTACCGT,iTru5_114_A,ATGACAGG,NYU_BMS_Melanoma_13059,pool1,EP379938B01 +1,EP529635B02,EP529635B02,NYU_BMS_Melanoma_13059_P4,F2,iTru7_402_11,AGCAAGCA,iTru5_115_A,CAACACAG,NYU_BMS_Melanoma_13059,pool2,EP529635B02 +1,EP554506B04,EP554506B04,NYU_BMS_Melanoma_13059_P4,H2,iTru7_402_12,TCTCGTGT,iTru5_116_A,CACCAGTT,NYU_BMS_Melanoma_13059,pool1,EP554506B04 +1,EP455757B04,EP455757B04,NYU_BMS_Melanoma_13059_P4,J2,iTru7_115_01,CAAGGTCT,iTru5_117_A,CAGAGTGA,NYU_BMS_Melanoma_13059,pool2,EP455757B04 +1,SP491900A02,SP491900A02,NYU_BMS_Melanoma_13059_P4,L2,iTru7_115_02,TAGACGTG,iTru5_118_A,CCGATGTA,NYU_BMS_Melanoma_13059,pool1,SP491900A02 +1,LP196272A01,LP196272A01,NYU_BMS_Melanoma_13059_P4,N2,iTru7_115_03,TGAGCTAG,iTru5_119_A,CCTTCCAT,NYU_BMS_Melanoma_13059,pool2,LP196272A01 +1,SP704319A04,SP704319A04,NYU_BMS_Melanoma_13059_P4,P2,iTru7_115_04,CTGACACA,iTru5_120_A,CGGTAATC,NYU_BMS_Melanoma_13059,pool1,SP704319A04 +1,EP617441B01,EP617441B01,NYU_BMS_Melanoma_13059_P4,B4,iTru7_115_05,ACGGTCTT,iTru5_121_A,CTAGGTTG,NYU_BMS_Melanoma_13059,pool2,EP617441B01 +1,AP687591B04,AP687591B04,NYU_BMS_Melanoma_13059_P4,D4,iTru7_115_06,GCTGTTGT,iTru5_122_A,CTCGGTAA,NYU_BMS_Melanoma_13059,pool1,AP687591B04 +1,SP640978A02,SP640978A02,NYU_BMS_Melanoma_13059_P4,F4,iTru7_115_07,CACTAGCT,iTru5_123_A,CTGTGGTA,NYU_BMS_Melanoma_13059,pool2,SP640978A02 +1,EP981129A02,EP981129A02,NYU_BMS_Melanoma_13059_P4,H4,iTru7_115_08,TGGTACAG,iTru5_124_A,GTACGATC,NYU_BMS_Melanoma_13059,pool1,EP981129A02 +1,EP455763B04,EP455763B04,NYU_BMS_Melanoma_13059_P4,J4,iTru7_115_09,AGCACTTC,iTru5_113_B,TCTGTCGT,NYU_BMS_Melanoma_13059,pool2,EP455763B04 +1,EP339057B02,EP339057B02,NYU_BMS_Melanoma_13059_P4,L4,iTru7_115_10,GCATACAG,iTru5_114_B,GAATGGCA,NYU_BMS_Melanoma_13059,pool1,EP339057B02 +1,SP491897A02,SP491897A02,NYU_BMS_Melanoma_13059_P4,N4,iTru7_115_11,CTTAGGAC,iTru5_115_B,GTGTGTTC,NYU_BMS_Melanoma_13059,pool2,SP491897A02 +1,EP980752B04,EP980752B04,NYU_BMS_Melanoma_13059_P4,P4,iTru7_211_01,GCTTCTTG,iTru5_116_B,GGTTGAAC,NYU_BMS_Melanoma_13059,pool1,EP980752B04 +1,LP128539A01,LP128539A01,NYU_BMS_Melanoma_13059_P4,B6,iTru7_101_01,ACGTTACC,iTru5_117_B,GGCTCAAT,NYU_BMS_Melanoma_13059,pool2,LP128539A01 +1,EP996831B04,EP996831B04,NYU_BMS_Melanoma_13059_P4,D6,iTru7_101_02,CTGTGTTG,iTru5_118_B,TTCGCCAT,NYU_BMS_Melanoma_13059,pool1,EP996831B04 +1,EP273332B04,EP273332B04,NYU_BMS_Melanoma_13059_P4,F6,iTru7_101_03,TGAGGTGT,iTru5_119_B,GTCCTTGA,NYU_BMS_Melanoma_13059,pool2,EP273332B04 +1,EP483291B04,EP483291B04,NYU_BMS_Melanoma_13059_P4,H6,iTru7_101_04,GATCCATG,iTru5_120_B,TAACGTCG,NYU_BMS_Melanoma_13059,pool1,EP483291B04 +1,EP393715B01,EP393715B01,NYU_BMS_Melanoma_13059_P4,J6,iTru7_101_05,GCCTATCA,iTru5_121_B,GAGACCAA,NYU_BMS_Melanoma_13059,pool2,EP393715B01 +1,EP617440B01,EP617440B01,NYU_BMS_Melanoma_13059_P4,L6,iTru7_101_06,AACAACCG,iTru5_122_B,GATCAAGG,NYU_BMS_Melanoma_13059,pool1,EP617440B01 +1,EP729434A01,EP729434A01,NYU_BMS_Melanoma_13059_P4,N6,iTru7_101_07,ACTCGTTG,iTru5_123_B,GCAACCAT,NYU_BMS_Melanoma_13059,pool2,EP729434A01 +1,SP645141A03,SP645141A03,NYU_BMS_Melanoma_13059_P4,P6,iTru7_101_08,CCTATGGT,iTru5_124_B,AAGGAGAC,NYU_BMS_Melanoma_13059,pool1,SP645141A03 +1,BLANK4_4A,BLANK4.4A,NYU_BMS_Melanoma_13059_P4,B8,iTru7_101_09,TGTACACC,iTru5_113_C,ATCGGAGA,NYU_BMS_Melanoma_13059,pool2,BLANK4.4A +1,BLANK4_4B,BLANK4.4B,NYU_BMS_Melanoma_13059_P4,D8,iTru7_101_10,GTATGCTG,iTru5_114_C,ATGCGCTT,NYU_BMS_Melanoma_13059,pool1,BLANK4.4B +1,BLANK4_4C,BLANK4.4C,NYU_BMS_Melanoma_13059_P4,F8,iTru7_101_11,TGATGTCC,iTru5_115_C,CAACCGTA,NYU_BMS_Melanoma_13059,pool2,BLANK4.4C +1,BLANK4_4D,BLANK4.4D,NYU_BMS_Melanoma_13059_P4,H8,iTru7_101_12,GTCCTTCT,iTru5_116_C,CACTTCAC,NYU_BMS_Melanoma_13059,pool1,BLANK4.4D +1,BLANK4_4E,BLANK4.4E,NYU_BMS_Melanoma_13059_P4,J8,iTru7_102_01,ATAAGGCG,iTru5_117_C,CAGCTAGA,NYU_BMS_Melanoma_13059,pool2,BLANK4.4E +1,BLANK4_4F,BLANK4.4F,NYU_BMS_Melanoma_13059_P4,L8,iTru7_102_02,CTTACCTG,iTru5_118_C,CCGTTATG,NYU_BMS_Melanoma_13059,pool1,BLANK4.4F +1,BLANK4_4G,BLANK4.4G,NYU_BMS_Melanoma_13059_P4,N8,iTru7_102_03,CGTTGCAA,iTru5_119_C,CGAACAAC,NYU_BMS_Melanoma_13059,pool2,BLANK4.4G +1,BLANK4_4H,BLANK4.4H,NYU_BMS_Melanoma_13059_P4,P8,iTru7_102_04,GATTCAGC,iTru5_120_C,CGTAGATG,NYU_BMS_Melanoma_13059,pool1,BLANK4.4H +1,SP232114A04,SP232114A04,NYU_BMS_Melanoma_13059_P4,B10,iTru7_102_05,TCACGTTC,iTru5_121_C,CTATGCCT,NYU_BMS_Melanoma_13059,pool2,SP232114A04 +1,EP393714B01,EP393714B01,NYU_BMS_Melanoma_13059_P4,D10,iTru7_102_06,TGTGCGTT,iTru5_122_C,CTGATGAG,NYU_BMS_Melanoma_13059,pool1,EP393714B01 +1,EP533388B01,EP533388B01,NYU_BMS_Melanoma_13059_P4,F10,iTru7_102_07,TAGTTGCG,iTru5_123_C,CTTCCTTC,NYU_BMS_Melanoma_13059,pool2,EP533388B01 +1,EP724905B01,EP724905B01,NYU_BMS_Melanoma_13059_P4,H10,iTru7_102_08,AAGAGCCA,iTru5_124_C,GTCTCATC,NYU_BMS_Melanoma_13059,pool1,EP724905B01 +1,EP282108B01,EP282108B01,NYU_BMS_Melanoma_13059_P4,J10,iTru7_102_09,ACAGCTCA,iTru5_113_D,GCGCATAT,NYU_BMS_Melanoma_13059,pool2,EP282108B01 +1,EP282107B01,EP282107B01,NYU_BMS_Melanoma_13059_P4,L10,iTru7_102_10,GTTAAGGC,iTru5_114_D,GAAGATCC,NYU_BMS_Melanoma_13059,pool1,EP282107B01 +1,EP001625B01,EP001625B01,NYU_BMS_Melanoma_13059_P4,N10,iTru7_102_11,AAGCCACA,iTru5_115_D,GTTGGCAT,NYU_BMS_Melanoma_13059,pool2,EP001625B01 +1,EP073209B02,EP073209B02,NYU_BMS_Melanoma_13059_P4,P10,iTru7_102_12,ACACGGTT,iTru5_116_D,GTGAATGG,NYU_BMS_Melanoma_13059,pool1,EP073209B02 +1,SP232079A01,SP232079A01,NYU_BMS_Melanoma_13059_P4,B12,iTru7_103_01,CAGCGATT,iTru5_117_D,GTATCGAG,NYU_BMS_Melanoma_13059,pool2,SP232079A01 +1,EP772145A02,EP772145A02,NYU_BMS_Melanoma_13059_P4,D12,iTru7_103_02,TAGTGACC,iTru5_118_D,TGCAAGAC,NYU_BMS_Melanoma_13059,pool1,EP772145A02 +1,AP771472A04,AP771472A04,NYU_BMS_Melanoma_13059_P4,F12,iTru7_103_03,CGAGACTA,iTru5_119_D,GAGTGTGT,NYU_BMS_Melanoma_13059,pool2,AP771472A04 +1,AP223470B01,AP223470B01,NYU_BMS_Melanoma_13059_P4,H12,iTru7_103_04,GACATGGT,iTru5_120_D,TAAGCGCA,NYU_BMS_Melanoma_13059,pool1,AP223470B01 +1,SP404412A02,SP404412A02,NYU_BMS_Melanoma_13059_P4,J12,iTru7_103_05,GCATGTCT,iTru5_121_D,TAGCAGGA,NYU_BMS_Melanoma_13059,pool2,SP404412A02 +1,EP772143A02,EP772143A02,NYU_BMS_Melanoma_13059_P4,L12,iTru7_103_06,ACTCCATC,iTru5_122_D,GACTACGA,NYU_BMS_Melanoma_13059,pool1,EP772143A02 +1,SP408629A01,SP408629A01,NYU_BMS_Melanoma_13059_P4,N12,iTru7_103_07,TGTGACTG,iTru5_123_D,GACGTCAT,NYU_BMS_Melanoma_13059,pool2,SP408629A01 +1,EP749735A07,EP749735A07,NYU_BMS_Melanoma_13059_P4,P12,iTru7_103_08,CGAAGAAC,iTru5_124_D,AAGAGGCA,NYU_BMS_Melanoma_13059,pool1,EP749735A07 +1,EP846485A01,EP846485A01,NYU_BMS_Melanoma_13059_P4,B14,iTru7_103_09,GGTGTCTT,iTru5_113_E,ATCGTCTC,NYU_BMS_Melanoma_13059,pool2,EP846485A01 +1,EP808109A01,EP808109A01,NYU_BMS_Melanoma_13059_P4,D14,iTru7_103_10,AAGAAGGC,iTru5_114_E,ATGGCGAT,NYU_BMS_Melanoma_13059,pool1,EP808109A01 +1,SP416130A04,SP416130A04,NYU_BMS_Melanoma_13059_P4,F14,iTru7_103_11,AGGTTCGA,iTru5_115_E,CAAGAAGC,NYU_BMS_Melanoma_13059,pool2,SP416130A04 +1,EP882752A01,EP882752A01,NYU_BMS_Melanoma_13059_P4,H14,iTru7_103_12,CATGTTCC,iTru5_116_E,CAGAACTG,NYU_BMS_Melanoma_13059,pool1,EP882752A01 +1,AP953594A02,AP953594A02,NYU_BMS_Melanoma_13059_P4,J14,iTru7_104_01,GTGCCATA,iTru5_117_E,CAGGTAAG,NYU_BMS_Melanoma_13059,pool2,AP953594A02 +1,AP046324B02,AP046324B02,NYU_BMS_Melanoma_13059_P4,L14,iTru7_104_02,CCTTGTAG,iTru5_118_E,CCTACCTA,NYU_BMS_Melanoma_13059,pool1,AP046324B02 +1,AP891020A04,AP891020A04,NYU_BMS_Melanoma_13059_P4,N14,iTru7_104_03,GCTGGATT,iTru5_119_E,CGAAGTCA,NYU_BMS_Melanoma_13059,pool2,AP891020A04 +1,EP790023A01,EP790023A01,NYU_BMS_Melanoma_13059_P4,P14,iTru7_104_04,TAACGAGG,iTru5_120_E,CGTCTTCA,NYU_BMS_Melanoma_13059,pool1,EP790023A01 +1,EP657386A01,EP657386A01,NYU_BMS_Melanoma_13059_P4,B16,iTru7_104_05,ATGGTTGC,iTru5_121_E,CTCAAGCT,NYU_BMS_Melanoma_13059,pool2,EP657386A01 +1,EP805337A01,EP805337A01,NYU_BMS_Melanoma_13059_P4,D16,iTru7_104_06,CCTATACC,iTru5_122_E,CTGCCATA,NYU_BMS_Melanoma_13059,pool1,EP805337A01 +1,EP927458A04,EP927458A04,NYU_BMS_Melanoma_13059_P4,F16,iTru7_104_07,TTAGGTCG,iTru5_123_E,CTTGCTAG,NYU_BMS_Melanoma_13059,pool2,EP927458A04 +1,AP173299B04,AP173299B04,NYU_BMS_Melanoma_13059_P4,H16,iTru7_104_08,GCAAGATC,iTru5_124_E,GTCTGCAA,NYU_BMS_Melanoma_13059,pool1,AP173299B04 +1,EP768164A02,EP768164A02,NYU_BMS_Melanoma_13059_P4,J16,iTru7_104_09,AGAGCCTT,iTru5_113_F,GCTACTCT,NYU_BMS_Melanoma_13059,pool2,EP768164A02 +1,EP886422A01,EP886422A01,NYU_BMS_Melanoma_13059_P4,L16,iTru7_104_10,GCAATGGA,iTru5_114_F,TACAGAGC,NYU_BMS_Melanoma_13059,pool1,EP886422A01 +1,AP103463B01,AP103463B01,NYU_BMS_Melanoma_13059_P4,N16,iTru7_104_11,CTGGAGTA,iTru5_115_F,GGTCGTAT,NYU_BMS_Melanoma_13059,pool2,AP103463B01 +1,AP744361A02,AP744361A02,NYU_BMS_Melanoma_13059_P4,P16,iTru7_104_12,GAACATCG,iTru5_116_F,GTCGTTAC,NYU_BMS_Melanoma_13059,pool1,AP744361A02 +1,AP065292B01,AP065292B01,NYU_BMS_Melanoma_13059_P4,B18,iTru7_105_01,GCACAACT,iTru5_117_F,TTCACGGA,NYU_BMS_Melanoma_13059,pool2,AP065292B01 +1,SP257517A04,SP257517A04,NYU_BMS_Melanoma_13059_P4,D18,iTru7_105_02,TTCTCTCG,iTru5_118_F,TGCTTGCT,NYU_BMS_Melanoma_13059,pool1,SP257517A04 +1,EP790021A04,EP790021A04,NYU_BMS_Melanoma_13059_P4,F18,iTru7_105_03,AACGGTCA,iTru5_119_F,TCTTACGG,NYU_BMS_Melanoma_13059,pool2,EP790021A04 +1,EP675075A04,EP675075A04,NYU_BMS_Melanoma_13059_P4,H18,iTru7_105_04,ACAGACCT,iTru5_120_F,TCCTCATG,NYU_BMS_Melanoma_13059,pool1,EP675075A04 +1,SP388683A02,SP388683A02,NYU_BMS_Melanoma_13059_P4,J18,iTru7_105_05,TCTCTTCC,iTru5_121_F,GATGTCGA,NYU_BMS_Melanoma_13059,pool2,SP388683A02 +1,SP232309A01,SP232309A01,NYU_BMS_Melanoma_13059_P4,L18,iTru7_105_06,AGTGTTGG,iTru5_122_F,GAAGTGCT,NYU_BMS_Melanoma_13059,pool1,SP232309A01 +1,EP899038A04,EP899038A04,NYU_BMS_Melanoma_13059_P4,N18,iTru7_105_07,TGGCATGT,iTru5_123_F,TCACTCGA,NYU_BMS_Melanoma_13059,pool2,EP899038A04 +1,EP636802A01,EP636802A-1,NYU_BMS_Melanoma_13059_P4,P18,iTru7_105_08,AGAAGCGT,iTru5_124_F,ACGCAGTA,NYU_BMS_Melanoma_13059,pool1,EP636802A-1 +1,AP046327B02,AP046327B02,NYU_BMS_Melanoma_13059_P4,B20,iTru7_105_09,AGCGGAAT,iTru5_113_G,ATCTCCTG,NYU_BMS_Melanoma_13059,pool2,AP046327B02 +1,EP905975A04,EP905975A04,NYU_BMS_Melanoma_13059_P4,D20,iTru7_105_10,TAACCGGT,iTru5_114_G,ATGTGGAC,NYU_BMS_Melanoma_13059,pool1,EP905975A04 +1,SP410796A02,SP410796A02,NYU_BMS_Melanoma_13059_P4,F20,iTru7_105_11,CATGGAAC,iTru5_115_G,CAAGCCAA,NYU_BMS_Melanoma_13059,pool2,SP410796A02 +1,EP784608A01,EP784608A01,NYU_BMS_Melanoma_13059_P4,H20,iTru7_105_12,ATGGTCCA,iTru5_116_G,CAGACGTT,NYU_BMS_Melanoma_13059,pool1,EP784608A01 +1,EP808105A01,EP808105A01,NYU_BMS_Melanoma_13059_P4,J20,iTru7_106_01,CTTCTGAG,iTru5_117_G,CATACTCG,NYU_BMS_Melanoma_13059,pool2,EP808105A01 +1,SP331134A04,SP331134A04,NYU_BMS_Melanoma_13059_P4,L20,iTru7_106_02,AACCGAAG,iTru5_118_G,CCTGTCAA,NYU_BMS_Melanoma_13059,pool1,SP331134A04 +1,EP718688A01,EP718688A01,NYU_BMS_Melanoma_13059_P4,N20,iTru7_106_03,TTCGTACC,iTru5_119_G,CGAGTTAG,NYU_BMS_Melanoma_13059,pool2,EP718688A01 +1,SP232270A02,SP232270A02,NYU_BMS_Melanoma_13059_P4,P20,iTru7_106_04,CTGTTAGG,iTru5_120_G,CTAACCTG,NYU_BMS_Melanoma_13059,pool1,SP232270A02 +1,EP970001A01,EP970001A01,NYU_BMS_Melanoma_13059_P4,B22,iTru7_106_05,CACAAGTC,iTru5_121_G,CTCCTAGT,NYU_BMS_Melanoma_13059,pool2,EP970001A01 +1,EP001624B01,EP001624B01,NYU_BMS_Melanoma_13059_P4,D22,iTru7_106_06,TCTTGACG,iTru5_122_G,CTGTACCA,NYU_BMS_Melanoma_13059,pool1,EP001624B01 +1,EP868682A01,EP868682A01,NYU_BMS_Melanoma_13059_P4,F22,iTru7_106_07,CGTCTTGT,iTru5_123_G,GCTACAAC,NYU_BMS_Melanoma_13059,pool2,EP868682A01 +1,EP927462A02,EP927462A02,NYU_BMS_Melanoma_13059_P4,H22,iTru7_106_08,CGTGATCA,iTru5_124_G,GTTCTTCG,NYU_BMS_Melanoma_13059,pool1,EP927462A02 +1,C3,C3,NYU_BMS_Melanoma_13059_P4,J22,iTru7_106_09,CCAAGTTG,iTru5_113_H,GAGAGTAC,NYU_BMS_Melanoma_13059,pool2,C3 +1,EP890158A02,EP890158A02,NYU_BMS_Melanoma_13059_P4,L22,iTru7_106_10,GTACCTTG,iTru5_114_H,GACACAGT,NYU_BMS_Melanoma_13059,pool1,EP890158A02 +1,EP023801B04,EP023801B04,NYU_BMS_Melanoma_13059_P4,N22,iTru7_106_11,GACTATGC,iTru5_115_H,TTGCTTGG,NYU_BMS_Melanoma_13059,pool2,EP023801B04 +1,EP400447B04,EP400447B04,NYU_BMS_Melanoma_13059_P4,P22,iTru7_106_12,TGGATCAC,iTru5_116_H,GTAGTACC,NYU_BMS_Melanoma_13059,pool1,EP400447B04 +1,EP385379B01,EP385379B01,NYU_BMS_Melanoma_13059_P4,B24,iTru7_107_01,CTCTGGTT,iTru5_117_H,TTCGGCTA,NYU_BMS_Melanoma_13059,pool2,EP385379B01 +1,EP385387B01,EP385387B01,NYU_BMS_Melanoma_13059_P4,D24,iTru7_107_02,GTTCATGG,iTru5_118_H,TGCACTTG,NYU_BMS_Melanoma_13059,pool1,EP385387B01 +1,EP385384B01,EP385384B01,NYU_BMS_Melanoma_13059_P4,F24,iTru7_107_03,GCTGTAAG,iTru5_119_H,TAGAACGC,NYU_BMS_Melanoma_13059,pool2,EP385384B01 +1,SP754514A04,SP754514A04,NYU_BMS_Melanoma_13059_P4,H24,iTru7_107_04,GTCGAAGA,iTru5_120_H,GATTGTCC,NYU_BMS_Melanoma_13059,pool1,SP754514A04 +1,SP415025A01,SP415025A01,NYU_BMS_Melanoma_13059_P4,J24,iTru7_107_05,GAGCTCAA,iTru5_121_H,GATGCTAC,NYU_BMS_Melanoma_13059,pool2,SP415025A01 +1,SP415023A02,SP415023A02,NYU_BMS_Melanoma_13059_P4,L24,iTru7_107_06,TGAACCTG,iTru5_122_H,GAACGGTT,NYU_BMS_Melanoma_13059,pool1,SP415023A02 +1,EP400448B04,EP400448B04,NYU_BMS_Melanoma_13059_P4,N24,iTru7_107_07,CCGACTAT,iTru5_123_H,CTCTTGTC,NYU_BMS_Melanoma_13059,pool2,EP400448B04 +1,EP479894B04,EP479894B04,NYU_BMS_Melanoma_13059_P4,P24,iTru7_107_08,AGCTAACC,iTru5_124_H,AACGCCTT,NYU_BMS_Melanoma_13059,pool1,EP479894B04 +,,,,,,,,,,, +[Bioinformatics],,,,,,,,,,, +Sample_Project,QiitaID,BarcodesAreRC,ForwardAdapter,ReverseAdapter,HumanFiltering,library_construction_protocol,experiment_design_description,,,, +NYU_BMS_Melanoma_13059,13059,False,AACC,GGTT,False,Nextera,Equipment,,,, +Feist_11661,11661,False,AACC,GGTT,False,Nextera,Equipment,,,, +Gerwick_6123,6123,False,AACC,GGTT,True,Nextera,Equipment,,,, +,,,,,,,,,,, +[Contact],,,,,,,,,,, +Email,Sample_Project,,,,,,,,,, +test@lol.com,Feist_11661,,,,,,,,,, +,,,,,,,,,,, diff --git a/qp_klp/tests/data/sample-sheets/metagenomic/illumina/bad_sheet2.csv b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/bad_sheet2.csv new file mode 100644 index 00000000..7941e7da --- /dev/null +++ b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/bad_sheet2.csv @@ -0,0 +1,816 @@ +[Header],,,,,,,,,,, +IEMFileVersion,4,,,,,,,,,, +SheetType,standard_metag,,,,,,,,,, +SheetVersion,100,,,,,,,,,, +Investigator Name,Knight,,,,,,,,,, +Experiment Name,RKL0042,,,,,,,,,, +Date,2020-02-26,,,,,,,,,, +Workflow,GenerateFASTQ,,,,,,,,,, +Application,FASTQ Only,,,,,,,,,, +Assay,NotMetagenomic,,,,,,,,,, +Description,,,,,,,,,,, +Chemistry,Default,,,,,,,,,, +,,,,,,,,,,, +[Reads],,,,,,,,,,, +150,,,,,,,,,,, +150,,,,,,,,,,, +,,,,,,,,,,, +[Settings],,,,,,,,,,, +ReverseComplement,0,,,,,,,,,, +,,,,,,,,,,, +[Data],,,,,,,,,,, +Lane,Sample_ID,Sample_Name,Sample_Plate,well_id_384,I7_Index_ID,index,I5_Index_ID,index2,Sample_Project,syndna_pool_number,Well_description +1,CDPH-SAL_Salmonella_Typhi_MDL-143,CDPH-SAL.Salmonella.Typhi.MDL-143,Feist_11661_P40,A1,iTru7_107_07,CCGACTAT,iTru5_01_A,ACCGACAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-143 +1,CDPH-SAL_Salmonella_Typhi_MDL-144,CDPH-SAL.Salmonella.Typhi.MDL-144,Feist_11661_P40,C1,iTru7_107_08,CCGACTAT,iTru5_02_A,CTTCGCAA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-144 +1,CDPH-SAL_Salmonella_Typhi_MDL-145,CDPH-SAL.Salmonella.Typhi.MDL-145,Feist_11661_P40,E1,iTru7_107_09,GCCTTGTT,iTru5_03_A,AACACCAC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-145 +1,CDPH-SAL_Salmonella_Typhi_MDL-146,CDPH-SAL.Salmonella.Typhi.MDL-146,Feist_11661_P40,G1,iTru7_107_10,AACTTGCC,iTru5_04_A,CGTATCTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-146 +1,CDPH-SAL_Salmonella_Typhi_MDL-147,CDPH-SAL.Salmonella.Typhi.MDL-147,Feist_11661_P40,I1,iTru7_107_11,CAATGTGG,iTru5_05_A,GGTACGAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-147 +1,CDPH-SAL_Salmonella_Typhi_MDL-148,CDPH-SAL.Salmonella.Typhi.MDL-148,Feist_11661_P40,K1,iTru7_107_12,AAGGCTGA,iTru5_06_A,CGATCGAT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-148 +1,CDPH-SAL_Salmonella_Typhi_MDL-149,CDPH-SAL.Salmonella.Typhi.MDL-149,Feist_11661_P40,M1,iTru7_108_01,TTACCGAG,iTru5_07_A,AAGACACC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-149 +1,CDPH-SAL_Salmonella_Typhi_MDL-150,CDPH-SAL.Salmonella.Typhi.MDL-150,Feist_11661_P40,O1,iTru7_108_02,GTCCTAAG,iTru5_08_A,CATCTGCT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-150 +1,CDPH-SAL_Salmonella_Typhi_MDL-151,CDPH-SAL.Salmonella.Typhi.MDL-151,Feist_11661_P40,A3,iTru7_108_03,GAAGGTTC,iTru5_09_A,CTCTCAGA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-151 +1,CDPH-SAL_Salmonella_Typhi_MDL-152,CDPH-SAL.Salmonella.Typhi.MDL-152,Feist_11661_P40,C3,iTru7_108_04,GAAGAGGT,iTru5_10_A,TCGTCTGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-152 +1,CDPH-SAL_Salmonella_Typhi_MDL-153,CDPH-SAL.Salmonella.Typhi.MDL-153,Feist_11661_P40,E3,iTru7_108_05,TCTGAGAG,iTru5_11_A,CAATAGCC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-153 +1,CDPH-SAL_Salmonella_Typhi_MDL-154,CDPH-SAL.Salmonella.Typhi.MDL-154,Feist_11661_P40,G3,iTru7_108_06,ACCGCATA,iTru5_12_A,CATTCGTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-154 +1,CDPH-SAL_Salmonella_Typhi_MDL-155,CDPH-SAL.Salmonella.Typhi.MDL-155,Feist_11661_P40,I3,iTru7_108_07,GAAGTACC,iTru5_01_B,AGTGGCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-155 +1,CDPH-SAL_Salmonella_Typhi_MDL-156,CDPH-SAL.Salmonella.Typhi.MDL-156,Feist_11661_P40,K3,iTru7_108_08,CAGGTATC,iTru5_02_B,GTGGTATG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-156 +1,CDPH-SAL_Salmonella_Typhi_MDL-157,CDPH-SAL.Salmonella.Typhi.MDL-157,Feist_11661_P40,M3,iTru7_108_09,TCTCTAGG,iTru5_03_B,TGAGCTGT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-157 +1,CDPH-SAL_Salmonella_Typhi_MDL-158,CDPH-SAL.Salmonella.Typhi.MDL-158,Feist_11661_P40,O3,iTru7_108_10,AAGCACTG,iTru5_04_B,CGTCAAGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-158 +1,CDPH-SAL_Salmonella_Typhi_MDL-159,CDPH-SAL.Salmonella.Typhi.MDL-159,Feist_11661_P40,A5,iTru7_108_11,CCAAGCAA,iTru5_05_B,AAGCATCG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-159 +1,CDPH-SAL_Salmonella_Typhi_MDL-160,CDPH-SAL.Salmonella.Typhi.MDL-160,Feist_11661_P40,C5,iTru7_108_12,TGTTCGAG,iTru5_06_B,TACTCCAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-160 +1,CDPH-SAL_Salmonella_Typhi_MDL-161,CDPH-SAL.Salmonella.Typhi.MDL-161,Feist_11661_P40,E5,iTru7_109_01,CTCGTCTT,iTru5_07_B,GATACCTG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-161 +1,CDPH-SAL_Salmonella_Typhi_MDL-162,CDPH-SAL.Salmonella.Typhi.MDL-162,Feist_11661_P40,G5,iTru7_109_02,CGAACTGT,iTru5_08_B,ACCTCTTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-162 +1,CDPH-SAL_Salmonella_Typhi_MDL-163,CDPH-SAL.Salmonella.Typhi.MDL-163,Feist_11661_P40,I5,iTru7_109_03,CATTCGGT,iTru5_09_B,ACGGACTT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-163 +1,CDPH-SAL_Salmonella_Typhi_MDL-164,CDPH-SAL.Salmonella.Typhi.MDL-164,Feist_11661_P40,K5,iTru7_109_04,TCGGTTAC,iTru5_10_B,CATGTGTG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-164 +1,CDPH-SAL_Salmonella_Typhi_MDL-165,CDPH-SAL.Salmonella.Typhi.MDL-165,Feist_11661_P40,M5,iTru7_109_05,AAGTCGAG,iTru5_11_B,TGCCTCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-165 +1,CDPH-SAL_Salmonella_Typhi_MDL-166,CDPH-SAL.Salmonella.Typhi.MDL-166,Feist_11661_P40,O5,iTru7_109_06,TATCGGTC,iTru5_12_B,ATCTGACC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-166 +1,CDPH-SAL_Salmonella_Typhi_MDL-167,CDPH-SAL.Salmonella.Typhi.MDL-167,Feist_11661_P40,A7,iTru7_109_07,TATTCGCC,iTru5_01_C,CACAGACT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-167 +1,CDPH-SAL_Salmonella_Typhi_MDL-168,CDPH-SAL.Salmonella.Typhi.MDL-168,Feist_11661_P40,C7,iTru7_109_08,GTATTGGC,iTru5_02_C,CACTGTAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-168 +1,P21_E_coli_ELI344,P21.E.coli.ELI344,Feist_11661_P40,E7,iTru7_109_09,AGTCGCTT,iTru5_03_C,CACAGGAA,Feist_11661,pool1,P21_E. coli_ELI344 +1,P21_E_coli_ELI345,P21.E.coli.ELI345,Feist_11661_P40,G7,iTru7_109_10,TGGCACTA,iTru5_04_C,CCATGAAC,Feist_11661,pool2,P21_E. coli_ELI345 +1,P21_E_coli_ELI347,P21.E.coli.ELI347,Feist_11661_P40,I7,iTru7_109_11,GGTTGTCA,iTru5_05_C,GCCAATAC,Feist_11661,pool1,P21_E. coli_ELI347 +1,P21_E_coli_ELI348,P21.E.coli.ELI348,Feist_11661_P40,K7,iTru7_109_12,AACCTCCT,iTru5_06_C,AGCTACCA,Feist_11661,pool2,P21_E. coli_ELI348 +1,P21_E_coli_ELI349,P21.E.coli.ELI349,Feist_11661_P40,M7,iTru7_110_01,ATGACCAG,iTru5_07_C,AACCGAAC,Feist_11661,pool1,P21_E. coli_ELI349 +1,P21_E_coli_ELI350,P21.E.coli.ELI350,Feist_11661_P40_diluted,O7,iTru7_110_02,AACCGTTC,iTru5_08_C,ATCGCAAC,Feist_11661,pool2,P21_E. coli_ELI350 +1,P21_E_coli_ELI351,P21.E.coli.ELI351,Feist_11661_P40,A9,iTru7_110_03,TCCAATCG,iTru5_09_C,GTTGCTGT,Feist_11661,pool1,P21_E. coli_ELI351 +1,P21_E_coli_ELI352,P21.E.coli.ELI352,Feist_11661_P40,C9,iTru7_110_04,CTGCACTT,iTru5_10_C,TCTAGTCC,Feist_11661,pool2,P21_E. coli_ELI352 +1,P21_E_coli_ELI353,P21.E.coli.ELI353,Feist_11661_P40,E9,iTru7_110_05,CGCTTAAC,iTru5_11_C,GACGAACT,Feist_11661,pool1,P21_E. coli_ELI353 +1,P21_E_coli_ELI354,P21.E.coli.ELI354,Feist_11661_P40,G9,iTru7_110_06,CACCACTA,iTru5_12_C,TTCGTACG,Feist_11661,pool2,P21_E. coli_ELI354 +1,P21_E_coli_ELI355,P21.E.coli.ELI355,Feist_11661_P40,I9,iTru7_110_07,ACAGCAAC,iTru5_01_D,CGACACTT,Feist_11661,pool1,P21_E. coli_ELI355 +1,P21_E_coli_ELI357,P21.E.coli.ELI357,Feist_11661_P40,K9,iTru7_110_08,GGAAGGAT,iTru5_02_D,AGACGCTA,Feist_11661,pool2,P21_E. coli_ELI357 +1,P21_E_coli_ELI358,P21.E.coli.ELI358,Feist_11661_P40_diluted,M9,iTru7_110_09,GGCGTTAT,iTru5_03_D,TGACAACC,Feist_11661,pool1,P21_E. coli_ELI358 +1,P21_E_coli_ELI359,P21.E.coli.ELI359,Feist_11661_P40,O9,iTru7_110_10,CTGTTGAC,iTru5_04_D,GGTACTTC,Feist_11661,pool2,P21_E. coli_ELI359 +1,P21_E_coli_ELI361,P21.E.coli.ELI361,Feist_11661_P40_diluted,A11,iTru7_110_11,GTCATCGA,iTru5_05_D,CTGTATGC,Feist_11661,pool1,P21_E. coli_ELI361 +1,P21_E_coli_ELI362,P21.E.coli.ELI362,Feist_11661_P40,C11,iTru7_110_12,TGACTTCG,iTru5_06_D,TCGACAAG,Feist_11661,pool2,P21_E. coli_ELI362 +1,P21_E_coli_ELI363,P21.E.coli.ELI363,Feist_11661_P40_diluted,E11,iTru7_111_01,CGATAGAG,iTru5_07_D,GCTGAATC,Feist_11661,pool1,P21_E. coli_ELI363 +1,P21_E_coli_ELI364,P21.E.coli.ELI364,Feist_11661_P40,G11,iTru7_111_02,TTCGTTGG,iTru5_08_D,AGTTGTGC,Feist_11661,pool2,P21_E. coli_ELI364 +1,P21_E_coli_ELI365,P21.E.coli.ELI365,Feist_11661_P40,I11,iTru7_111_03,TGGAGAGT,iTru5_09_D,TGTCGACT,Feist_11661,pool1,P21_E. coli_ELI365 +1,P21_E_coli_ELI366,P21.E.coli.ELI366,Feist_11661_P40_diluted,K11,iTru7_111_04,TCAGACGA,iTru5_10_D,AAGGCTCT,Feist_11661,pool2,P21_E. coli_ELI366 +1,P21_E_coli_ELI367,P21.E.coli.ELI367,Feist_11661_P40_diluted,M11,iTru7_111_05,GACGAATG,iTru5_11_D,CCTAACAG,Feist_11661,pool1,P21_E. coli_ELI367 +1,P21_E_coli_ELI368,P21.E.coli.ELI368,Feist_11661_P40,O11,iTru7_111_06,CATGAGGA,iTru5_12_D,AAGACGAG,Feist_11661,pool2,P21_E. coli_ELI368 +1,P21_E_coli_ELI369,P21.E.coli.ELI369,Feist_11661_P40,A13,iTru7_111_07,CGGTTGTT,iTru5_01_E,GACTTGTG,Feist_11661,pool1,P21_E. coli_ELI369 +1,stALE_E_coli_A1_F21_I1_R1,stALE.E.coli.A1.F21.I1.R1,Feist_11661_P40,C13,iTru7_111_08,TCCGTATG,iTru5_02_E,CAACTCCA,Feist_11661,pool2,stALE_E. coli_A1.F21.I1.R1 +1,stALE_E_coli_A2_F21_I1_R1,stALE.E.coli.A2.F21.I1.R1,Feist_11661_P40,E13,iTru7_111_09,TGTGGTAC,iTru5_03_E,TGTTCCGT,Feist_11661,pool1,stALE_E. coli_A2.F21.I1.R1 +1,stALE_E_coli_A3_F18_I1_R1,stALE.E.coli.A3.F18.I1.R1,Feist_11661_P40,G13,iTru7_111_10,AGAACGAG,iTru5_04_E,ACCGCTAT,Feist_11661,pool2,stALE_E. coli_A3.F18.I1.R1 +1,stALE_E_coli_A3_F40_I1_R1,stALE.E.coli.A3.F40.I1.R1,Feist_11661_P40,I13,iTru7_111_11,CTTCGTTC,iTru5_05_E,CTTAGGAC,Feist_11661,pool1,stALE_E. coli_A3.F40.I1.R1 +1,stALE_E_coli_A4_F21_I1_R1,stALE.E.coli.A4.F21.I1.R1,Feist_11661_P40,K13,iTru7_111_12,CCAATAGG,iTru5_06_E,TATGACCG,Feist_11661,pool2,stALE_E. coli_A4.F21.I1.R1 +1,stALE_E_coli_A4_F21_I1_R2,stALE.E.coli.A4.F21.I1.R2,Feist_11661_P40,M13,iTru7_112_01,ACCATCCA,iTru5_07_E,AGCTAGTG,Feist_11661,pool1,stALE_E. coli_A4.F21.I1.R2 +1,stALE_E_coli_A4_F42_I1_R1,stALE.E.coli.A4.F42.I1.R1,Feist_11661_P40,O13,iTru7_112_02,CACACATG,iTru5_08_E,GAACGAAG,Feist_11661,pool2,stALE_E. coli_A4.F42.I1.R1 +1,stALE_E_coli_A5_F21_I1_R1,stALE.E.coli.A5.F21.I1.R1,Feist_11661_P40,A15,iTru7_112_03,CTTGTCGA,iTru5_09_E,CGTCTAAC,Feist_11661,pool1,stALE_E. coli_A5.F21.I1.R1 +1,stALE_E_coli_A5_F42_I1_R1,stALE.E.coli.A5.F42.I1.R1,Feist_11661_P40,C15,iTru7_112_04,AGTCTCAC,iTru5_10_E,AACCAGAG,Feist_11661,pool2,stALE_E. coli_A5.F42.I1.R1 +1,stALE_E_coli_A6_F21_I1_R1,stALE.E.coli.A6.F21.I1.R1,Feist_11661_P40,E15,iTru7_112_05,AGTTGGCT,iTru5_11_E,CGCCTTAT,Feist_11661,pool1,stALE_E. coli_A6.F21.I1.R1 +1,stALE_E_coli_A6_F43_I1_R1,stALE.E.coli.A6.F43.I1.R1,Feist_11661_P40,G15,iTru7_112_06,CCGGAATT,iTru5_12_E,CTCGTTCT,Feist_11661,pool2,stALE_E. coli_A6.F43.I1.R1 +1,stALE_E_coli_A7_F21_I1_R1,stALE.E.coli.A7.F21.I1.R1,Feist_11661_P40,I15,iTru7_112_07,CAGTGAAG,iTru5_01_F,GTGAGACT,Feist_11661,pool1,stALE_E. coli_A7.F21.I1.R1 +1,stALE_E_coli_A7_F42_I1_R1,stALE.E.coli.A7.F42.I1.R1,Feist_11661_P40,K15,iTru7_112_08,CCTACTGA,iTru5_02_F,AACACGCT,Feist_11661,pool2,stALE_E. coli_A7.F42.I1.R1 +1,stALE_E_coli_A8_F20_I1_R1,stALE.E.coli.A8.F20.I1.R1,Feist_11661_P40,M15,iTru7_112_09,TGTGAAGC,iTru5_03_F,CCTAGAGA,Feist_11661,pool1,stALE_E. coli_A8.F20.I1.R1 +1,stALE_E_coli_A8_F42_I1_R1,stALE.E.coli.A8.F42.I1.R1,Feist_11661_P40,O15,iTru7_112_10,GTCTGATC,iTru5_04_F,TTCCAGGT,Feist_11661,pool2,stALE_E. coli_A8.F42.I1.R1 +1,stALE_E_coli_A9_F21_I1_R1,stALE.E.coli.A9.F21.I1.R1,Feist_11661_P40,A17,iTru7_112_11,TTCAGGAG,iTru5_05_F,TCAGCCTT,Feist_11661,pool1,stALE_E. coli_A9.F21.I1.R1 +1,stALE_E_coli_A9_F44_I1_R1,stALE.E.coli.A9.F44.I1.R1,Feist_11661_P40,C17,iTru7_112_12,ACGATGAC,iTru5_06_F,AGCCAACT,Feist_11661,pool2,stALE_E. coli_A9.F44.I1.R1 +1,stALE_E_coli_A10_F21_I1_R1,stALE.E.coli.A10.F21.I1.R1,Feist_11661_P40,E17,iTru7_113_01,CGTTATGC,iTru5_07_F,CTAGCTCA,Feist_11661,pool1,stALE_E. coli_A10.F21.I1.R1 +1,stALE_E_coli_A10_F43_I1_R1,stALE.E.coli.A10.F43.I1.R1,Feist_11661_P40,G17,iTru7_113_02,GATACTGG,iTru5_08_F,GGAAGAGA,Feist_11661,pool2,stALE_E. coli_A10.F43.I1.R1 +1,stALE_E_coli_A10_F131_I1_R1,stALE.E.coli.A10.F131.I1.R1,Feist_11661_P40,I17,iTru7_113_03,CTACTTGG,iTru5_09_F,AACACTGG,Feist_11661,pool1,stALE_E. coli_A10.F131.I1.R1 +1,stALE_E_coli_A11_F21_I1_R1,stALE.E.coli.A11.F21.I1.R1,Feist_11661_P40,K17,iTru7_113_04,CATACCAC,iTru5_10_F,ACTATCGC,Feist_11661,pool2,stALE_E. coli_A11.F21.I1.R1 +1,stALE_E_coli_A11_F43_I1_R1,stALE.E.coli.A11.F43.I1.R1,Feist_11661_P40,M17,iTru7_113_05,ACATTGCG,iTru5_11_F,ACAACAGC,Feist_11661,pool1,stALE_E. coli_A11.F43.I1.R1 +1,stALE_E_coli_A11_F119_I1_R1,stALE.E.coli.A11.F119.I1.R1,Feist_11661_P40,O17,iTru7_113_06,TGATCGGA,iTru5_12_F,TGTGGCTT,Feist_11661,pool2,stALE_E. coli_A11.F119.I1.R1 +1,stALE_E_coli_A12_F21_I1_R1,stALE.E.coli.A12.F21.I1.R1,Feist_11661_P40,A19,iTru7_113_07,AAGTGTCG,iTru5_01_G,GTTCCATG,Feist_11661,pool1,stALE_E. coli_A12.F21.I1.R1 +1,stALE_E_coli_A12_F43_I1_R1,stALE.E.coli.A12.F43.I1.R1,Feist_11661_P40,C19,iTru7_113_08,GAACGCTT,iTru5_02_G,TGGATGGT,Feist_11661,pool2,stALE_E. coli_A12.F43.I1.R1 +1,stALE_E_coli_A12_F136_I1_R1,stALE.E.coli.A12.F136.I1.R1,Feist_11661_P40,E19,iTru7_113_09,TCAAGGAC,iTru5_03_G,GCATAACG,Feist_11661,pool1,stALE_E. coli_A12.F136.I1.R1 +1,stALE_E_coli_A13_F20_I1_R1,stALE.E.coli.A13.F20.I1.R1,Feist_11661_P40,G19,iTru7_113_10,TCAACTGG,iTru5_04_G,TCGAACCT,Feist_11661,pool2,stALE_E. coli_A13.F20.I1.R1 +1,stALE_E_coli_A13_F42_I1_R1,stALE.E.coli.A13.F42.I1.R1,Feist_11661_P40,I19,iTru7_113_11,GGTTGATG,iTru5_05_G,ACATGCCA,Feist_11661,pool1,stALE_E. coli_A13.F42.I1.R1 +1,stALE_E_coli_A13_F121_I1_R1,stALE.E.coli.A13.F121.I1.R1,Feist_11661_P40,K19,iTru7_113_12,AAGGACAC,iTru5_06_G,GATCTTGC,Feist_11661,pool2,stALE_E. coli_A13.F121.I1.R1 +1,stALE_E_coli_A14_F20_I1_R1,stALE.E.coli.A14.F20.I1.R1,Feist_11661_P40,M19,iTru7_114_01,TTGATCCG,iTru5_07_G,GTTAAGCG,Feist_11661,pool1,stALE_E. coli_A14.F20.I1.R1 +1,stALE_E_coli_A14_F42_I1_R1,stALE.E.coli.A14.F42.I1.R1,Feist_11661_P40,O19,iTru7_114_02,GGTGATTC,iTru5_08_G,GTCATCGT,Feist_11661,pool2,stALE_E. coli_A14.F42.I1.R1 +1,stALE_E_coli_A14_F133_I1_R1,stALE.E.coli.A14.F133.I1.R1,Feist_11661_P40,A21,iTru7_114_03,GATTGCTC,iTru5_09_G,TCAGACAC,Feist_11661,pool1,stALE_E. coli_A14.F133.I1.R1 +1,stALE_E_coli_A15_F21_I1_R1,stALE.E.coli.A15.F21.I1.R1,Feist_11661_P40,C21,iTru7_114_04,ACCTGGAA,iTru5_10_G,GTCCTAAG,Feist_11661,pool2,stALE_E. coli_A15.F21.I1.R1 +1,stALE_E_coli_A15_F42_I1_R1,stALE.E.coli.A15.F42.I1.R1,Feist_11661_P40,E21,iTru7_114_05,CATCTACG,iTru5_11_G,AGACCTTG,Feist_11661,pool1,stALE_E. coli_A15.F42.I1.R1 +1,stALE_E_coli_A15_F117_I1_R1,stALE.E.coli.A15.F117.I1.R1,Feist_11661_P40,G21,iTru7_114_06,CCGTATCT,iTru5_12_G,AGACATGC,Feist_11661,pool2,stALE_E. coli_A15.F117.I1.R1 +1,stALE_E_coli_A16_F20_I1_R1,stALE.E.coli.A16.F20.I1.R1,Feist_11661_P40,I21,iTru7_114_07,CGGAATAC,iTru5_01_H,TAGCTGAG,Feist_11661,pool1,stALE_E. coli_A16.F20.I1.R1 +1,stALE_E_coli_A16_F42_I1_R1,stALE.E.coli.A16.F42.I1.R1,Feist_11661_P40,K21,iTru7_114_08,CTCCTAGA,iTru5_02_H,TTCGAAGC,Feist_11661,pool2,stALE_E. coli_A16.F42.I1.R1 +1,stALE_E_coli_A16_F134_I1_R1,stALE.E.coli.A16.F134.I1.R1,Feist_11661_P40,M21,iTru7_114_09,TGGTAGCT,iTru5_03_H,CAGTGCTT,Feist_11661,pool1,stALE_E. coli_A16.F134.I1.R1 +1,stALE_E_coli_A17_F21_I1_R1,stALE.E.coli.A17.F21.I1.R1,Feist_11661_P40,O21,iTru7_114_10,TCGAAGGT,iTru5_04_H,TAGTGCCA,Feist_11661,pool2,stALE_E. coli_A17.F21.I1.R1 +1,stALE_E_coli_A17_F118_I1_R1,stALE.E.coli.A17.F118.I1.R1,Feist_11661_P40,A23,iTru7_114_11,ACATAGGC,iTru5_05_H,GATGGAGT,Feist_11661,pool1,stALE_E. coli_A17.F118.I1.R1 +1,stALE_E_coli_A18_F18_I1_R1,stALE.E.coli.A18.F18.I1.R1,Feist_11661_P40,C23,iTru7_114_12,CTCAGAGT,iTru5_06_H,CCTCGTTA,Feist_11661,pool2,stALE_E. coli_A18.F18.I1.R1 +1,stALE_E_coli_A18_F39_I1_R1,stALE.E.coli.A18.F39.I1.R1,Feist_11661_P40,E23,iTru7_201_01,CTTGGATG,iTru5_07_H,CGATTGGA,Feist_11661,pool1,stALE_E. coli_A18.F39.I1.R1 +1,stALE_E_coli_A18_F130_I1_R1,stALE.E.coli.A18.F130.I1.R1,Feist_11661_P40,G23,iTru7_201_02,CAGTTGGA,iTru5_08_H,CCAACGAA,Feist_11661,pool2,stALE_E. coli_A18.F130.I1.R1 +1,3A,3A,Gerwick_tubes,I23,iTru7_201_03,GATAGGCT,iTru5_09_H,AGAAGGAC,Gerwick_6123,pool1,3A +1,4A,4A,Gerwick_tubes,K23,iTru7_201_04,TTGACAGG,iTru5_10_H,TGACCGTT,Gerwick_6123,pool2,4A +1,BLANK_40_12G,BLANK.40.12G,Feist_11661_P40,M23,iTru7_201_05,AGAATGCC,iTru5_11_H,GCGTTAGA,Feist_11661,pool1,BLANK.40.12G +1,BLANK_40_12H,BLANK.40.12H,Feist_11661_P40,O23,iTru7_201_06,CTACATCC,iTru5_12_H,TCTAGGAG,Feist_11661,pool2,BLANK.40.12H +1,Pputida_JBEI__HGL_Pputida_107_BP6,Pputida.JBEI.HGL.Pputida.107.BP6,Feist_11661_P41,A2,iTru7_201_07,TCATGGTG,iTru5_13_A,GGTATAGG,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_107_BP6 +1,Pputida_JBEI__HGL_Pputida_108_BP7,Pputida.JBEI.HGL.Pputida.108.BP7,Feist_11661_P41,C2,iTru7_201_08,TACACGCT,iTru5_14_A,TCCGATCA,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_108_BP7 +1,Pputida_JBEI__HGL_Pputida_109_BP8,Pputida.JBEI.HGL.Pputida.109.BP8,Feist_11661_P41,E2,iTru7_201_09,TACGGTTG,iTru5_15_A,CGACCTAA,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_109_BP8 +1,Pputida_JBEI__HGL_Pputida_110_M2,Pputida.JBEI.HGL.Pputida.110.M2,Feist_11661_P41,G2,iTru7_201_10,GGATACCA,iTru5_16_A,GACATCTC,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_110_M2 +1,Pputida_JBEI__HGL_Pputida_111_M5,Pputida.JBEI.HGL.Pputida.111.M5,Feist_11661_P41,I2,iTru7_201_11,TCGACATC,iTru5_17_A,CCAGTATC,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_111_M5 +1,Pputida_TALE__HGL_Pputida_112,Pputida.TALE.HGL.Pputida.112,Feist_11661_P41,K2,iTru7_201_12,GTTGTAGC,iTru5_18_A,ACGCTTCT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_112 +1,Pputida_TALE__HGL_Pputida_113,Pputida.TALE.HGL.Pputida.113,Feist_11661_P41,M2,iTru7_202_01,ATACGACC,iTru5_19_A,AACGCACA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_113 +1,Pputida_TALE__HGL_Pputida_114,Pputida.TALE.HGL.Pputida.114,Feist_11661_P41,O2,iTru7_202_02,TTCCAAGG,iTru5_20_A,TGATCACG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_114 +1,Pputida_TALE__HGL_Pputida_115,Pputida.TALE.HGL.Pputida.115,Feist_11661_P41,A4,iTru7_202_03,TTGCAGAC,iTru5_21_A,GCGTATCA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_115 +1,Pputida_TALE__HGL_Pputida_116,Pputida.TALE.HGL.Pputida.116,Feist_11661_P41,C4,iTru7_202_04,TGCCATTC,iTru5_22_A,GTGTCCTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_116 +1,Pputida_TALE__HGL_Pputida_117,Pputida.TALE.HGL.Pputida.117,Feist_11661_P41,E4,iTru7_202_05,GATGTGTG,iTru5_23_A,GGTAACGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_117 +1,Pputida_TALE__HGL_Pputida_118,Pputida.TALE.HGL.Pputida.118,Feist_11661_P41,G4,iTru7_202_06,ACTCTCGA,iTru5_24_A,CGAGAGAA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_118 +1,Pputida_TALE__HGL_Pputida_119,Pputida.TALE.HGL.Pputida.119,Feist_11661_P41,I4,iTru7_202_07,GAGTCTCT,iTru5_13_B,CATTGACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_119 +1,Pputida_TALE__HGL_Pputida_120,Pputida.TALE.HGL.Pputida.120,Feist_11661_P41,K4,iTru7_202_08,CAACACCT,iTru5_14_B,GGTGATGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_120 +1,Pputida_TALE__HGL_Pputida_121,Pputida.TALE.HGL.Pputida.121,Feist_11661_P41,M4,iTru7_202_09,CAGTCTTC,iTru5_15_B,AACCGTGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_121 +1,Pputida_TALE__HGL_Pputida_122,Pputida.TALE.HGL.Pputida.122,Feist_11661_P41,O4,iTru7_202_10,GGACTGTT,iTru5_16_B,CCTATTGG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_122 +1,Pputida_TALE__HGL_Pputida_123,Pputida.TALE.HGL.Pputida.123,Feist_11661_P41,A6,iTru7_202_11,CTTAGTGG,iTru5_17_B,TCAGTAGG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_123 +1,Pputida_TALE__HGL_Pputida_124,Pputida.TALE.HGL.Pputida.124,Feist_11661_P41,C6,iTru7_202_12,ATTGCGTG,iTru5_18_B,TATGCGGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_124 +1,Pputida_TALE__HGL_Pputida_125,Pputida.TALE.HGL.Pputida.125,Feist_11661_P41,E6,iTru7_203_01,GTAACGAC,iTru5_19_B,ATGCCTAG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_125 +1,Pputida_TALE__HGL_Pputida_126,Pputida.TALE.HGL.Pputida.126,Feist_11661_P41,G6,iTru7_203_02,CTTGCTGT,iTru5_20_B,CTAGCAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_126 +1,Pputida_TALE__HGL_Pputida_127,Pputida.TALE.HGL.Pputida.127,Feist_11661_P41,I6,iTru7_203_03,GTTGTTCG,iTru5_21_B,AGGTCAAC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_127 +1,Pputida_TALE__HGL_Pputida_128,Pputida.TALE.HGL.Pputida.128,Feist_11661_P41,K6,iTru7_203_04,CGTTGAGT,iTru5_22_B,GAACGTGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_128 +1,Pputida_TALE__HGL_Pputida_129,Pputida.TALE.HGL.Pputida.129,Feist_11661_P41,M6,iTru7_203_05,TCGAACCA,iTru5_23_B,ATCATGCG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_129 +1,Pputida_TALE__HGL_Pputida_130,Pputida.TALE.HGL.Pputida.130,Feist_11661_P41,O6,iTru7_203_06,AGACCGTA,iTru5_24_B,CAACGAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_130 +1,Pputida_TALE__HGL_Pputida_131,Pputida.TALE.HGL.Pputida.131,Feist_11661_P41,A8,iTru7_203_07,CAGAGTGT,iTru5_13_C,CGCAATGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_131 +1,Pputida_TALE__HGL_Pputida_132,Pputida.TALE.HGL.Pputida.132,Feist_11661_P41,C8,iTru7_203_08,GACAAGAG,iTru5_14_C,AACAAGGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_132 +1,Pputida_TALE__HGL_Pputida_133,Pputida.TALE.HGL.Pputida.133,Feist_11661_P41,E8,iTru7_203_09,GAACACAC,iTru5_15_C,ACCATGTC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_133 +1,Pputida_TALE__HGL_Pputida_134,Pputida.TALE.HGL.Pputida.134,Feist_11661_P41,G8,iTru7_203_10,GCTTAGCT,iTru5_16_C,AATCCAGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_134 +1,Pputida_TALE__HGL_Pputida_135,Pputida.TALE.HGL.Pputida.135,Feist_11661_P41,I8,iTru7_203_11,GAAGGAAG,iTru5_17_C,TTGCAACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_135 +1,Pputida_TALE__HGL_Pputida_136,Pputida.TALE.HGL.Pputida.136,Feist_11661_P41,K8,iTru7_203_12,CAGTTCTG,iTru5_18_C,ACCTTCGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_136 +1,Pputida_TALE__HGL_Pputida_137,Pputida.TALE.HGL.Pputida.137,Feist_11661_P41,M8,iTru7_204_01,CAGGAGAT,iTru5_19_C,CATACGGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_137 +1,Pputida_TALE__HGL_Pputida_138,Pputida.TALE.HGL.Pputida.138,Feist_11661_P41,O8,iTru7_204_02,GTAGCATC,iTru5_20_C,GACCGATA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_138 +1,Pputida_TALE__HGL_Pputida_139,Pputida.TALE.HGL.Pputida.139,Feist_11661_P41,A10,iTru7_204_03,TCGTTCGT,iTru5_21_C,AAGCTGGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_139 +1,Pputida_TALE__HGL_Pputida_140,Pputida.TALE.HGL.Pputida.140,Feist_11661_P41,C10,iTru7_204_04,GGCAAGTT,iTru5_22_C,ACACCTCA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_140 +1,Pputida_TALE__HGL_Pputida_141,Pputida.TALE.HGL.Pputida.141,Feist_11661_P41,E10,iTru7_204_05,ACCATGTG,iTru5_23_C,CGGAGTAT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_141 +1,Pputida_TALE__HGL_Pputida_142,Pputida.TALE.HGL.Pputida.142,Feist_11661_P41,G10,iTru7_204_06,CAACGGAT,iTru5_24_C,CTCGACTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_142 +1,Pputida_TALE__HGL_Pputida_143,Pputida.TALE.HGL.Pputida.143,Feist_11661_P41,I10,iTru7_204_07,CAATCGAC,iTru5_13_D,ATCCACGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_143 +1,Pputida_TALE__HGL_Pputida_144,Pputida.TALE.HGL.Pputida.144,Feist_11661_P41,K10,iTru7_204_08,GTGTTCCT,iTru5_14_D,ACAGTTCG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_144 +1,Pputida_PALE__HGL_Pputida_145,Pputida.PALE.HGL.Pputida.145,Feist_11661_P41_diluted,M10,iTru7_204_09,AGGAACCT,iTru5_15_D,ACAAGACG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_145 +1,Pputida_PALE__HGL_Pputida_146,Pputida.PALE.HGL.Pputida.146,Feist_11661_P41_diluted,O10,iTru7_204_10,ACCTTCTC,iTru5_16_D,ATCGTGGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_146 +1,Pputida_PALE__HGL_Pputida_147,Pputida.PALE.HGL.Pputida.147,Feist_11661_P41_diluted,A12,iTru7_204_11,CCGTAAGA,iTru5_17_D,AGTCAGGT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_147 +1,Pputida_PALE__HGL_Pputida_148,Pputida.PALE.HGL.Pputida.148,Feist_11661_P41_diluted,C12,iTru7_204_12,ATCGGTGT,iTru5_18_D,CATCAACC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_148 +1,Pputida_PALE__HGL_Pputida_149,Pputida.PALE.HGL.Pputida.149,Feist_11661_P41_diluted,E12,iTru7_205_01,AGCTCCTA,iTru5_19_D,GGTCACTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_149 +1,Pputida_PALE__HGL_Pputida_150,Pputida.PALE.HGL.Pputida.150,Feist_11661_P41,G12,iTru7_205_02,CCTTGATC,iTru5_20_D,CGGCATTA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_150 +1,Pputida_PALE__HGL_Pputida_151,Pputida.PALE.HGL.Pputida.151,Feist_11661_P41_diluted,I12,iTru7_205_03,CCATTCAC,iTru5_21_D,ACTCGATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_151 +1,Pputida_PALE__HGL_Pputida_152,Pputida.PALE.HGL.Pputida.152,Feist_11661_P41,K12,iTru7_205_04,GGACAATC,iTru5_22_D,ATAGGTCC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_152 +1,Pputida_PALE__HGL_Pputida_153,Pputida.PALE.HGL.Pputida.153,Feist_11661_P41,M12,iTru7_205_05,AAGGCGTT,iTru5_23_D,CAGTCACA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_153 +1,Pputida_PALE__HGL_Pputida_154,Pputida.PALE.HGL.Pputida.154,Feist_11661_P41_diluted,O12,iTru7_205_06,GCCATAAC,iTru5_24_D,TAGTGGTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_154 +1,Pputida_PALE__HGL_Pputida_155,Pputida.PALE.HGL.Pputida.155,Feist_11661_P41_diluted,A14,iTru7_205_07,GAAGTTGG,iTru5_13_E,CTCCTGAA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_155 +1,Pputida_PALE__HGL_Pputida_156,Pputida.PALE.HGL.Pputida.156,Feist_11661_P41_diluted,C14,iTru7_205_08,AGCCAAGT,iTru5_14_E,AATCGCTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_156 +1,Pputida_PALE__HGL_Pputida_157,Pputida.PALE.HGL.Pputida.157,Feist_11661_P41,E14,iTru7_205_09,TGACTGAC,iTru5_15_E,TGATAGGC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_157 +1,Pputida_PALE__HGL_Pputida_158,Pputida.PALE.HGL.Pputida.158,Feist_11661_P41_diluted,G14,iTru7_205_10,CACCTGTT,iTru5_16_E,ATGCGTCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_158 +1,Pputida_PALE__HGL_Pputida_159,Pputida.PALE.HGL.Pputida.159,Feist_11661_P41,I14,iTru7_205_11,ATCCGGTA,iTru5_17_E,CAGCATAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_159 +1,Pputida_PALE__HGL_Pputida_160,Pputida.PALE.HGL.Pputida.160,Feist_11661_P41,K14,iTru7_205_12,ATCTGTCC,iTru5_18_E,AAGTGCAG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_160 +1,Pputida_PALE__HGL_Pputida_161,Pputida.PALE.HGL.Pputida.161,Feist_11661_P41_diluted,M14,iTru7_206_01,CCAAGACT,iTru5_19_E,GTATTCCG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_161 +1,Pputida_PALE__HGL_Pputida_162,Pputida.PALE.HGL.Pputida.162,Feist_11661_P41_diluted,O14,iTru7_206_02,ATGGCGAA,iTru5_20_E,GTGATCCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_162 +1,Pputida_PALE__HGL_Pputida_163,Pputida.PALE.HGL.Pputida.163,Feist_11661_P41_diluted,A16,iTru7_206_03,GGTAGTGT,iTru5_21_E,TATGGCAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_163 +1,Pputida_PALE__HGL_Pputida_164,Pputida.PALE.HGL.Pputida.164,Feist_11661_P41,C16,iTru7_206_04,TCGCTGTT,iTru5_22_E,ACCATAGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_164 +1,Pputida_PALE__HGL_Pputida_165,Pputida.PALE.HGL.Pputida.165,Feist_11661_P41_diluted,E16,iTru7_206_05,AACGTGGA,iTru5_23_E,CTCCAATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_165 +1,Pputida_PALE__HGL_Pputida_166,Pputida.PALE.HGL.Pputida.166,Feist_11661_P41,G16,iTru7_206_06,AACGACGT,iTru5_24_E,AGATACGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_166 +1,Pputida_PALE__HGL_Pputida_167,Pputida.PALE.HGL.Pputida.167,Feist_11661_P41,I16,iTru7_206_07,AACAGGAC,iTru5_13_F,TCGATGAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_167 +1,Pputida_PALE__HGL_Pputida_168,Pputida.PALE.HGL.Pputida.168,Feist_11661_P41,K16,iTru7_206_08,AAGCGCAT,iTru5_14_F,CCAACACT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_168 +1,Pputida_PALE__HGL_Pputida_169,Pputida.PALE.HGL.Pputida.169,Feist_11661_P41,M16,iTru7_206_09,CACTGACA,iTru5_15_F,CTTCACTG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_169 +1,Pputida_PALE__HGL_Pputida_170,Pputida.PALE.HGL.Pputida.170,Feist_11661_P41,O16,iTru7_206_10,AGGTCACT,iTru5_16_F,CGATGTTC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_170 +1,Pputida_PALE__HGL_Pputida_171,Pputida.PALE.HGL.Pputida.171,Feist_11661_P41,A18,iTru7_206_11,GTCACTGT,iTru5_17_F,ACCGGTTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_171 +1,Pputida_PALE__HGL_Pputida_172,Pputida.PALE.HGL.Pputida.172,Feist_11661_P41,C18,iTru7_206_12,ATGCCAAC,iTru5_18_F,CTTACAGC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_172 +1,Pputida_PALE__HGL_Pputida_173,Pputida.PALE.HGL.Pputida.173,Feist_11661_P41,E18,iTru7_207_01,CACGTTGT,iTru5_19_F,TGGCTCTT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_173 +1,Pputida_PALE__HGL_Pputida_174,Pputida.PALE.HGL.Pputida.174,Feist_11661_P41_diluted,G18,iTru7_207_02,TATTCCGG,iTru5_20_F,AAGACCGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_174 +1,Pputida_PALE__HGL_Pputida_175,Pputida.PALE.HGL.Pputida.175,Feist_11661_P41,I18,iTru7_207_03,TGCTTCCA,iTru5_21_F,GGACATCA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_175 +1,Pputida_PALE__HGL_Pputida_176,Pputida.PALE.HGL.Pputida.176,Feist_11661_P41_diluted,K18,iTru7_207_04,GTCTAGGT,iTru5_22_F,TTGGTGCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_176 +1,JM-Metabolic__GN0_2005,JM-Metabolic.GN0.2005,Feist_11661_P41,M18,iTru7_207_05,GTTCAACC,iTru5_23_F,AAGCGTTC,Feist_11661,pool1,JM-Metabolic__GN0_2005 +1,JM-Metabolic__GN0_2007,JM-Metabolic.GN0.2007,Feist_11661_P41,O18,iTru7_207_06,CGCAATCT,iTru5_24_F,ACTCTCCA,Feist_11661,pool2,JM-Metabolic__GN0_2007 +1,JM-Metabolic__GN0_2009,JM-Metabolic.GN0.2009,Feist_11661_P41,A20,iTru7_207_07,TTAAGCGG,iTru5_13_G,GAACCTTC,Feist_11661,pool1,JM-Metabolic__GN0_2009 +1,JM-Metabolic__GN0_2094,JM-Metabolic.GN0.2094,Feist_11661_P41_diluted,C20,iTru7_207_08,TGCTTGGT,iTru5_14_G,GGAACATG,Feist_11661,pool2,JM-Metabolic__GN0_2094 +1,JM-Metabolic__GN0_2099,JM-Metabolic.GN0.2099,Feist_11661_P41_diluted,E20,iTru7_207_09,ACACACTC,iTru5_15_G,GCCTATGT,Feist_11661,pool1,JM-Metabolic__GN0_2099 +1,JM-Metabolic__GN0_2148,JM-Metabolic.GN0.2148,Feist_11661_P41_diluted,G20,iTru7_207_10,CCACTTCT,iTru5_16_G,CCGTAACT,Feist_11661,pool2,JM-Metabolic__GN0_2148 +1,JM-Metabolic__GN0_2165,JM-Metabolic.GN0.2165,Feist_11661_P41_diluted,I20,iTru7_207_11,TTGGTCTC,iTru5_17_G,CGGATCAA,Feist_11661,pool1,JM-Metabolic__GN0_2165 +1,JM-Metabolic__GN0_2169,JM-Metabolic.GN0.2169,Feist_11661_P41,K20,iTru7_207_12,CTCATCAG,iTru5_18_G,CCACATTG,Feist_11661,pool2,JM-Metabolic__GN0_2169 +1,JM-Metabolic__GN0_2172,JM-Metabolic.GN0.2172,Feist_11661_P41,M20,iTru7_208_01,ATGACGTC,iTru5_19_G,CTCTATCG,Feist_11661,pool1,JM-Metabolic__GN0_2172 +1,JM-Metabolic__GN0_2175,JM-Metabolic.GN0.2175,Feist_11661_P41,O20,iTru7_208_02,AACCTTGG,iTru5_20_G,TGTGTCAG,Feist_11661,pool2,JM-Metabolic__GN0_2175 +1,JM-Metabolic__GN0_2183,JM-Metabolic.GN0.2183,Feist_11661_P41_diluted,A22,iTru7_208_03,GTCTTGCA,iTru5_21_G,CGCAACTA,Feist_11661,pool1,JM-Metabolic__GN0_2183 +1,JM-Metabolic__GN0_2215,JM-Metabolic.GN0.2215,Feist_11661_P41_diluted,C22,iTru7_208_04,CAAGTGCA,iTru5_22_G,GATCAGAC,Feist_11661,pool2,JM-Metabolic__GN0_2215 +1,JM-Metabolic__GN0_2254,JM-Metabolic.GN0.2254,Feist_11661_P41_diluted,E22,iTru7_208_05,TCCGAGTT,iTru5_23_G,ATTCCGCT,Feist_11661,pool1,JM-Metabolic__GN0_2254 +1,JM-Metabolic__GN0_2277,JM-Metabolic.GN0.2277,Feist_11661_P41_diluted,G22,iTru7_208_06,ACCTAAGG,iTru5_24_G,ATCCTTCC,Feist_11661,pool2,JM-Metabolic__GN0_2277 +1,JM-Metabolic__GN0_2290,JM-Metabolic.GN0.2290,Feist_11661_P41,I22,iTru7_208_07,TTGGACGT,iTru5_13_H,GCTTCACA,Feist_11661,pool1,JM-Metabolic__GN0_2290 +1,JM-Metabolic__GN0_2337,JM-Metabolic.GN0.2337,Feist_11661_P41_diluted,K22,iTru7_208_08,GATAGCGA,iTru5_14_H,CTTCGGTT,Feist_11661,pool2,JM-Metabolic__GN0_2337 +1,JM-Metabolic__GN0_2317,JM-Metabolic.GN0.2317,Feist_11661_P41_diluted,M22,iTru7_208_09,TTGGTGAG,iTru5_15_H,CATGGATC,Feist_11661,pool1,JM-Metabolic__GN0_2317 +1,JM-Metabolic__GN0_2354,JM-Metabolic.GN0.2354,Feist_11661_P41_diluted,O22,iTru7_208_10,AACTGGTG,iTru5_16_H,GTCAACAG,Feist_11661,pool2,JM-Metabolic__GN0_2354 +1,JM-Metabolic__GN0_2375,JM-Metabolic.GN0.2375,Feist_11661_P41_diluted,A24,iTru7_208_11,TAGCCGAA,iTru5_17_H,AATTCCGG,Feist_11661,pool1,JM-Metabolic__GN0_2375 +1,JM-Metabolic__GN0_2380,JM-Metabolic.GN0.2380,Feist_11661_P41_diluted,C24,iTru7_208_12,TGCGAACT,iTru5_18_H,GGCGAATA,Feist_11661,pool2,JM-Metabolic__GN0_2380 +1,JM-Metabolic__GN0_2393,JM-Metabolic.GN0.2393,Feist_11661_P41_diluted,E24,iTru7_209_01,GACTTAGG,iTru5_19_H,AGGAGGTT,Feist_11661,pool1,JM-Metabolic__GN0_2393 +1,JM-Metabolic__GN0_2404,JM-Metabolic.GN0.2404,Feist_11661_P41_diluted,G24,iTru7_209_02,ACACCAGT,iTru5_20_H,ACTCTGAG,Feist_11661,pool2,JM-Metabolic__GN0_2404 +1,5B,5B,Gerwick_tubes,I24,iTru7_209_03,CCTGATTG,iTru5_21_H,GCCTTCTT,Gerwick_6123,pool1,5B +1,6A,6A,Gerwick_tubes,K24,iTru7_209_04,TTGTGTGC,iTru5_22_H,TGGACCAT,Gerwick_6123,pool2,6A +1,BLANK_41_12G,BLANK.41.12G,Feist_11661_P41,M24,iTru7_209_05,TACCACAG,iTru5_23_H,GCATAGTC,Gerwick_6123,pool1,BLANK.41.12G +1,BLANK_41_12H,BLANK.41.12H,Feist_11661_P41,O24,iTru7_209_06,ATTCGAGG,iTru5_24_H,TACACACG,Feist_11661,pool2,BLANK.41.12H +1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_14,Deoxyribose.PALE.ALE.MG1655.BOP27.4.14,Feist_11661_P42,B1,iTru7_209_07,GCACGTAA,iTru5_101_A,AACAACCG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_14 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_23,Deoxyribose.PALE.ALE.MG1655.BOP27.4.23,Feist_11661_P42,D1,iTru7_209_08,GTGTGACA,iTru5_102_A,AAGCCTGA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_4_23 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_48,Deoxyribose.PALE.ALE.MG1655.BOP27.4.48,Feist_11661_P42,F1,iTru7_209_09,CTGGTTCT,iTru5_103_A,AAGGACCA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_48 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_6_21,Deoxyribose.PALE.ALE.MG1655.BOP27.6.21,Feist_11661_P42,H1,iTru7_209_10,ACTGTGTC,iTru5_104_A,ACAACGTG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_6_21 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_6_35,Deoxyribose.PALE.ALE.MG1655.BOP27.6.35,Feist_11661_P42,J1,iTru7_209_11,CCATACGT,iTru5_105_A,ACGAACGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_6_35 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_13,Deoxyribose.PALE.ALE.MG1655.BOP27.10.13,Feist_11661_P42,L1,iTru7_209_12,GGTACTAC,iTru5_106_A,ACGTCCAA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_13 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_28,Deoxyribose.PALE.ALE.MG1655.BOP27.10.28,Feist_11661_P42,N1,iTru7_210_01,CAGTCCAA,iTru5_107_A,ACTGGTGT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_10_28 +1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_51,Deoxyribose.PALE.ALE.MG1655.BOP27.10.51,Feist_11661_P42,P1,iTru7_210_02,TCGTAGTC,iTru5_108_A,AGATCGTC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_51 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_19,Deoxyribose.PALE.ALE.MG1655.Lib4.18.19,Feist_11661_P42,B3,iTru7_210_03,TCGAGTGA,iTru5_109_A,AGCGAGAT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_19 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_59,Deoxyribose.PALE.ALE.MG1655.Lib4.18.59,Feist_11661_P42,D3,iTru7_210_04,TGTAGCCA,iTru5_110_A,AGGATAGC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_18_59 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_35,Deoxyribose.PALE.ALE.MG1655.Lib4.18.35,Feist_11661_P42,F3,iTru7_210_05,TGCAGGTA,iTru5_111_A,AGGTGTTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_35 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_16,Deoxyribose.PALE.ALE.MG1655.Lib4.20.16,Feist_11661_P42,H3,iTru7_210_06,CTAGGTGA,iTru5_112_A,AGTCTTGG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_16 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_43,Deoxyribose.PALE.ALE.MG1655.Lib4.20.43,Feist_11661_P42,J3,iTru7_210_07,CTCCATGT,iTru5_101_B,GGTTGGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_20_43 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_71,Deoxyribose.PALE.ALE.MG1655.Lib4.20.71,Feist_11661_P42,L3,iTru7_210_08,CTTACAGC,iTru5_102_B,GGAGGAAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_71 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_16,Deoxyribose.PALE.ALE.MG1655.Lib4.22.16,Feist_11661_P42,N3,iTru7_210_09,CGTATTCG,iTru5_103_B,GTAAGGTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_16 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_28,Deoxyribose.PALE.ALE.MG1655.Lib4.22.28,Feist_11661_P42,P3,iTru7_210_10,ATTCTGGC,iTru5_104_B,GGTGTACA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_22_28 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_52,Deoxyribose.PALE.ALE.MG1655.Lib4.22.52,Feist_11661_P42,B5,iTru7_210_11,TACCAGGA,iTru5_105_B,GGATGTAG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_52 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_9,Deoxyribose.PALE.ALE.MG1655.Lib4.24.9,Feist_11661_P42,D5,iTru7_210_12,TACATCGG,iTru5_106_B,GTCCTGTT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_9 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_24,Deoxyribose.PALE.ALE.MG1655.Lib4.24.24,Feist_11661_P42,F5,iTru7_301_01,GTGGTGTT,iTru5_107_B,GTACCACA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_24_24 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_52,Deoxyribose.PALE.ALE.MG1655.Lib4.24.52,Feist_11661_P42,H5,iTru7_301_02,CGCATGAT,iTru5_108_B,GATCTCAG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_52 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_6,Deoxyribose.PALE.ALE.MG1655.Lib4.26.6,Feist_11661_P42,J5,iTru7_301_03,AGTCGACA,iTru5_109_B,GAGCTCTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_6 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_27,Deoxyribose.PALE.ALE.MG1655.Lib4.26.27,Feist_11661_P42,L5,iTru7_301_04,GTGAGCTT,iTru5_110_B,TACTAGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_26_27 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_69,Deoxyribose.PALE.ALE.MG1655.Lib4.26.69,Feist_11661_P42,N5,iTru7_301_05,GACATTCC,iTru5_111_B,GCACACAA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_69 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_13,Deoxyribose.PALE.ALE.MG1655.Lib4.28.13,Feist_11661_P42,P5,iTru7_301_06,AGTTCGTC,iTru5_112_B,GAATCACC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_13 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_28,Deoxyribose.PALE.ALE.MG1655.Lib4.28.28,Feist_11661_P42,B7,iTru7_301_07,TAATGCCG,iTru5_101_C,AACAGCGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_28_28 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_53,Deoxyribose.PALE.ALE.MG1655.Lib4.28.53,Feist_11661_P42,D7,iTru7_301_08,CGACCATT,iTru5_102_C,AAGCGACT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_53 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_7,Deoxyribose.PALE.ALE.MG1655.Lib4.30.7,Feist_11661_P42,F7,iTru7_301_09,CTGAAGCT,iTru5_103_C,AAGGCGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_7 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_22,Deoxyribose.PALE.ALE.MG1655.Lib4.30.22,Feist_11661_P42,H7,iTru7_301_10,TTGAGGCA,iTru5_104_C,ACACCGAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_30_22 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_60,Deoxyribose.PALE.ALE.MG1655.Lib4.30.60,Feist_11661_P42,J7,iTru7_301_11,GATCGAGT,iTru5_105_C,ACGAATCC,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_60 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_6,Deoxyribose.PALE.ALE.MG1655.Lib4.32.6,Feist_11661_P42,L7,iTru7_301_12,ATACTCCG,iTru5_106_C,ACTACGGT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_6 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_20,Deoxyribose.PALE.ALE.MG1655.Lib4.32.20,Feist_11661_P42,N7,iTru7_302_01,AAGTCCGT,iTru5_107_C,AGAAGCCT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_32_20 +1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_56,Deoxyribose.PALE.ALE.MG1655.Lib4.32.56,Feist_11661_P42,P7,iTru7_302_02,TAGCGTCT,iTru5_108_C,AGATTGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_56 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_24,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.1.24,Feist_11661_P42,B9,iTru7_302_03,TGACGCAT,iTru5_109_C,AGCGTGTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_24 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_57,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.1.57,Feist_11661_P42,D9,iTru7_302_04,AGCGTGTT,iTru5_110_C,AGGCTGAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_57 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_69,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.1.69,Feist_11661_P42,F9,iTru7_302_05,TGCACCAA,iTru5_111_C,AGGTTCCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_69 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_23,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.3.23,Feist_11661_P42,H9,iTru7_302_06,ATCACACG,iTru5_112_C,AGTGACCT,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_23 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_50,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.3.50,Feist_11661_P42,J9,iTru7_302_07,ATGCCTGT,iTru5_101_D,GGTTAGCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_50 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_61,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.3.61,Feist_11661_P42,L9,iTru7_302_08,ACCTGACT,iTru5_102_D,GTAGCGTA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_61 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_22,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.5.22,Feist_11661_P42,N9,iTru7_302_09,GCTTCGAA,iTru5_103_D,GGACTACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_22 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_36,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.5.36,Feist_11661_P42,P9,iTru7_302_10,CGGTCATA,iTru5_104_D,TGGTTCGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_36 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_46,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.5.46,Feist_11661_P42,B11,iTru7_302_11,GTTAGACG,iTru5_105_D,GGAGTCTT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_46 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_23,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.7.23,Feist_11661_P42,D11,iTru7_302_12,TCTAACGC,iTru5_106_D,GGATTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_23 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_41,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.7.41,Feist_11661_P42,F11,iTru7_303_01,ATAGCGGT,iTru5_107_D,TCGGATTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_41 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_51,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.7.51,Feist_11661_P42,H11,iTru7_303_02,GGACCTAT,iTru5_108_D,GAGCAATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_51 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_25,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.17.25,Feist_11661_P42,J11,iTru7_303_03,CGATGCTT,iTru5_109_D,GATCCACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_25 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_58,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.17.58,Feist_11661_P42,L11,iTru7_303_04,GAGCTTGT,iTru5_110_D,GAAGACTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_58 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_64,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.17.64,Feist_11661_P42,N11,iTru7_303_05,GTGAAGTG,iTru5_111_D,GCCACTTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_64 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_25,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.19.25,Feist_11661_P42,P11,iTru7_303_06,GAGTGGTT,iTru5_112_D,TCCATTGC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_25 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_55,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.19.55,Feist_11661_P42,B13,iTru7_303_07,TGATACGC,iTru5_101_E,AACAGTCC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_55 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_63,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.19.63,Feist_11661_P42,D13,iTru7_303_08,AGCAGATG,iTru5_102_E,AAGCTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_63 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_23,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.21.23,Feist_11661_P42,F13,iTru7_303_09,CCAGTGTT,iTru5_103_E,AAGTCCTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_23 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_46,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.21.46,Feist_11661_P42,H13,iTru7_303_10,ATTCCTCC,iTru5_104_E,ACACTCTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_46 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_51,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.21.51,Feist_11661_P42,J13,iTru7_303_11,CTAACTCG,iTru5_105_E,ACGGTACA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_51 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_25,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.29.25,Feist_11661_P42,L13,iTru7_303_12,GATGAGAC,iTru5_106_E,ACTCCTAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_25 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_49,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.29.49,Feist_11661_P42,N13,iTru7_304_01,TCAGGCTT,iTru5_107_E,AGAGGATG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_49 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_57,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.29.57,Feist_11661_P42,P13,iTru7_304_02,GTTCTCGT,iTru5_108_E,AGCCGTAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_57 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_24,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.31.24,Feist_11661_P42,B15,iTru7_304_03,ATCGATCG,iTru5_109_E,AGCTTCAG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_24 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_42,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.31.42,Feist_11661_P42,D15,iTru7_304_04,CCTCAGTT,iTru5_110_E,AGGTAGGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_42 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_62,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.31.62,Feist_11661_P42,F15,iTru7_304_05,ACTGCTAG,iTru5_111_E,AGTACACG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_62 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_21,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.33.21,Feist_11661_P42,H15,iTru7_304_06,TCCGTGAA,iTru5_112_E,AGTGCATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_21 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_41,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.33.41,Feist_11661_P42,J15,iTru7_304_07,GGATTCGT,iTru5_101_F,TTGGACTG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_41 +1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_50,AB5075.AZM.TALE.in.MHB.A.baumannii.AB5075.WT.33.50,Feist_11661_P42,L15,iTru7_304_08,GGTCAGAT,iTru5_102_F,GTCGATTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_50 +1,JM-Metabolic__GN02514,JM-Metabolic.GN02514,Feist_11661_P42,N15,iTru7_304_09,TCGTGGAT,iTru5_103_F,GGCATTCT,Feist_11661,pool1,JM-Metabolic__GN02514 +1,JM-Metabolic__GN02529,JM-Metabolic.GN02529,Feist_11661_P42_diluted,P15,iTru7_304_10,CGTGTGTA,iTru5_104_F,TGGTATCC,Feist_11661,pool2,JM-Metabolic__GN02529 +1,JM-Metabolic__GN02531,JM-Metabolic.GN02531,Feist_11661_P42_diluted,B17,iTru7_304_11,GTGTCTGA,iTru5_105_F,GGCAAGTT,Feist_11661,pool1,JM-Metabolic__GN02531 +1,JM-Metabolic__GN02567,JM-Metabolic.GN02567,Feist_11661_P42,D17,iTru7_304_12,GAATCGTG,iTru5_106_F,GTCTGAGT,Feist_11661,pool2,JM-Metabolic__GN02567 +1,JM-Metabolic__GN02590,JM-Metabolic.GN02590,Feist_11661_P42_diluted,F17,iTru7_305_01,GCGATAGT,iTru5_107_F,TCTACGCA,Feist_11661,pool1,JM-Metabolic__GN02590 +1,JM-Metabolic__GN02657,JM-Metabolic.GN02657,Feist_11661_P42_diluted,H17,iTru7_305_02,GGCTATTG,iTru5_108_F,GAGGCATT,Feist_11661,pool2,JM-Metabolic__GN02657 +1,JM-Metabolic__GN02748,JM-Metabolic.GN02748,Feist_11661_P42,J17,iTru7_305_03,AGTTACGG,iTru5_109_F,GCTAAGGA,Feist_11661,pool1,JM-Metabolic__GN02748 +1,JM-Metabolic__GN02766,JM-Metabolic.GN02766,Feist_11661_P42_diluted,L17,iTru7_305_04,CGTACGAA,iTru5_110_F,GCCAGAAT,Feist_11661,pool2,JM-Metabolic__GN02766 +1,JM-Metabolic__GN02769,JM-Metabolic.GN02769,Feist_11661_P42_diluted,N17,iTru7_305_05,ACCACGAT,iTru5_111_F,TAAGTGGC,Feist_11661,pool1,JM-Metabolic__GN02769 +1,JM-Metabolic__GN02787,JM-Metabolic.GN02787,Feist_11661_P42_diluted,P17,iTru7_305_06,GATTACCG,iTru5_112_F,GCAATGAG,Feist_11661,pool2,JM-Metabolic__GN02787 +1,JM-Metabolic__GN03132,JM-Metabolic.GN03132,Feist_11661_P42,B19,iTru7_305_07,GAGATACG,iTru5_101_G,AACTGAGG,Feist_11661,pool1,JM-Metabolic__GN03132 +1,JM-Metabolic__GN03218,JM-Metabolic.GN03218,Feist_11661_P42_diluted,D19,iTru7_305_08,CGACGTTA,iTru5_102_G,AAGGAAGG,Feist_11661,pool2,JM-Metabolic__GN03218 +1,JM-Metabolic__GN03252,JM-Metabolic.GN03252,Feist_11661_P42_diluted,F19,iTru7_305_09,GAGATGTC,iTru5_103_G,AATGGTCG,Feist_11661,pool1,JM-Metabolic__GN03252 +1,JM-Metabolic__GN03409,JM-Metabolic.GN03409,Feist_11661_P42_diluted,H19,iTru7_305_10,GATTGGAG,iTru5_104_G,ACAGCAAG,Feist_11661,pool2,JM-Metabolic__GN03409 +1,JM-Metabolic__GN04014,JM-Metabolic.GN04014,Feist_11661_P42_diluted,J19,iTru7_305_11,GCAATTCG,iTru5_105_G,ACGTATGG,Feist_11661,pool1,JM-Metabolic__GN04014 +1,JM-Metabolic__GN04094,JM-Metabolic.GN04094,Feist_11661_P42_diluted,L19,iTru7_305_12,CGTCAATG,iTru5_106_G,ACTGCACT,Feist_11661,pool2,JM-Metabolic__GN04094 +1,JM-Metabolic__GN04255,JM-Metabolic.GN04255,Feist_11661_P42_diluted,N19,iTru7_401_01,ATGCACGA,iTru5_107_G,AGAGTCCA,Feist_11661,pool1,JM-Metabolic__GN04255 +1,JM-Metabolic__GN04306,JM-Metabolic.GN04306,Feist_11661_P42_diluted,P19,iTru7_401_02,ATCGCCAT,iTru5_108_G,AGCCTATC,Feist_11661,pool2,JM-Metabolic__GN04306 +1,JM-Metabolic__GN04428,JM-Metabolic.GN04428,Feist_11661_P42_diluted,B21,iTru7_401_03,TCTCGCAA,iTru5_109_G,AGGAACAC,Feist_11661,pool1,JM-Metabolic__GN04428 +1,JM-Metabolic__GN04488,JM-Metabolic.GN04488,Feist_11661_P42_diluted,D21,iTru7_401_04,ACGACAGA,iTru5_110_G,AGGTCTGT,Feist_11661,pool2,JM-Metabolic__GN04488 +1,JM-Metabolic__GN04540,JM-Metabolic.GN04540,Feist_11661_P42_diluted,F21,iTru7_401_05,TTACGGCT,iTru5_111_G,AGTATGCC,Feist_11661,pool1,JM-Metabolic__GN04540 +1,JM-Metabolic__GN04563,JM-Metabolic.GN04563,Feist_11661_P42_diluted,H21,iTru7_401_06,GAGGACTT,iTru5_112_G,AGTTCGCA,Feist_11661,pool2,JM-Metabolic__GN04563 +1,JM-Metabolic__GN04612,JM-Metabolic.GN04612,Feist_11661_P42_diluted,J21,iTru7_401_07,GGCATACT,iTru5_101_H,TGGAAGCA,Feist_11661,pool1,JM-Metabolic__GN04612 +1,JM-Metabolic__GN04665,JM-Metabolic.GN04665,Feist_11661_P42_diluted,L21,iTru7_401_08,CGTAGGTT,iTru5_102_H,GTCAGTCA,Feist_11661,pool2,JM-Metabolic__GN04665 +1,JM-Metabolic__GN04682,JM-Metabolic.GN04682,Feist_11661_P42_diluted,N21,iTru7_401_09,ATATGCGC,iTru5_103_H,GTAACCGA,Feist_11661,pool1,JM-Metabolic__GN04682 +1,JM-Metabolic__GN05002,JM-Metabolic.GN05002,Feist_11661_P42_diluted,P21,iTru7_401_10,GGATGTAG,iTru5_104_H,GTTATGGC,Feist_11661,pool2,JM-Metabolic__GN05002 +1,JM-Metabolic__GN05109,JM-Metabolic.GN05109,Feist_11661_P42_diluted,B23,iTru7_401_11,CCTGTCAT,iTru5_105_H,GTAAGCAC,Feist_11661,pool1,JM-Metabolic__GN05109 +1,JM-Metabolic__GN05128,JM-Metabolic.GN05128,Feist_11661_P42_diluted,D23,iTru7_401_12,TGCTCATG,iTru5_106_H,GGAATGTC,Feist_11661,pool2,JM-Metabolic__GN05128 +1,JM-Metabolic__GN05367,JM-Metabolic.GN05367,Feist_11661_P42_diluted,F23,iTru7_402_01,TGAAGACG,iTru5_107_H,GAGAAGGT,Feist_11661,pool1,JM-Metabolic__GN05367 +1,JM-Metabolic__GN05377,JM-Metabolic.GN05377,Feist_11661_P42_diluted,H23,iTru7_402_02,GTTACGCA,iTru5_108_H,GAGTAGAG,Feist_11661,pool2,JM-Metabolic__GN05377 +1,7A,7A,Gerwick_tubes,J23,iTru7_402_03,ACTCAGAC,iTru5_109_H,GCATTGGT,Gerwick_6123,pool1,7A +1,8A,8A,Gerwick_tubes,L23,iTru7_402_04,GTCCACAT,iTru5_110_H,TCCAGCAA,Gerwick_6123,pool2,8A +1,BLANK_42_12G,BLANK.42.12G,Feist_11661_P42,N23,iTru7_402_05,CGCTAGTA,iTru5_111_H,GAATCCGT,Feist_11661,pool1,BLANK.42.12G +1,BLANK_42_12H,BLANK.42.12H,Feist_11661_P42,P23,iTru7_402_06,GAATCCGA,iTru5_112_H,TACATCGG,Feist_11661,pool2,BLANK.42.12H +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0326,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0326,Feist_11661_P43,B2,iTru7_402_07,GAGACGAT,iTru5_113_A,ATAACGCC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0326 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0327,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0327,Feist_11661_P43,D2,iTru7_402_08,TAAGTGGC,iTru5_114_A,ATGACAGG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0327 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0328,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0328,Feist_11661_P43,F2,iTru7_402_09,ACTGAGGT,iTru5_115_A,CAACACAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0328 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0329,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0329,Feist_11661_P43,H2,iTru7_402_10,TGTACCGT,iTru5_116_A,CACCAGTT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0329 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0330,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0330,Feist_11661_P43,J2,iTru7_402_11,AGCAAGCA,iTru5_117_A,CAGAGTGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0330 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0352,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0352,Feist_11661_P43,L2,iTru7_402_12,TCTCGTGT,iTru5_118_A,CCGATGTA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0352 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0353,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0353,Feist_11661_P43,N2,iTru7_115_01,CAAGGTCT,iTru5_119_A,CCTTCCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0353 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0354,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0354,Feist_11661_P43,P2,iTru7_115_02,TAGACGTG,iTru5_120_A,CGGTAATC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0354 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0355,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0355,Feist_11661_P43,B4,iTru7_115_03,TGAGCTAG,iTru5_121_A,CTAGGTTG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0355 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0356,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0356,Feist_11661_P43,D4,iTru7_115_04,CTGACACA,iTru5_122_A,CTCGGTAA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0356 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0357,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0357,Feist_11661_P43,F4,iTru7_115_05,ACGGTCTT,iTru5_123_A,CTGTGGTA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0357 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0364,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0364,Feist_11661_P43,H4,iTru7_115_06,GCTGTTGT,iTru5_124_A,GTACGATC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0364 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0366,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0366,Feist_11661_P43,J4,iTru7_115_07,CACTAGCT,iTru5_113_B,TCTGTCGT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0366 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0367,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0367,Feist_11661_P43,L4,iTru7_115_08,TGGTACAG,iTru5_114_B,GAATGGCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0367 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0368,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0368,Feist_11661_P43,N4,iTru7_115_09,AGCACTTC,iTru5_115_B,GTGTGTTC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0368 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0369,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0369,Feist_11661_P43,P4,iTru7_115_10,GCATACAG,iTru5_116_B,GGTTGAAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0369 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0370,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0370,Feist_11661_P43,B6,iTru7_115_11,CTTAGGAC,iTru5_117_B,GGCTCAAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0370 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0371,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0371,Feist_11661_P43,D6,iTru7_211_01,GCTTCTTG,iTru5_118_B,TTCGCCAT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0371 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0372,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0372,Feist_11661_P43,F6,iTru7_101_01,ACGTTACC,iTru5_119_B,GTCCTTGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0372 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0373,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0373,Feist_11661_P43,H6,iTru7_101_02,CTGTGTTG,iTru5_120_B,TAACGTCG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0373 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0374,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0374,Feist_11661_P43,J6,iTru7_101_03,TGAGGTGT,iTru5_121_B,GAGACCAA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0374 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0375,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0375,Feist_11661_P43,L6,iTru7_101_04,GATCCATG,iTru5_122_B,GATCAAGG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0375 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0376,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0376,Feist_11661_P43,N6,iTru7_101_05,GCCTATCA,iTru5_123_B,GCAACCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0376 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0377,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0377,Feist_11661_P43,P6,iTru7_101_06,AACAACCG,iTru5_124_B,AAGGAGAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0377 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0378,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0378,Feist_11661_P43,B8,iTru7_101_07,ACTCGTTG,iTru5_113_C,ATCGGAGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0378 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0380,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0380,Feist_11661_P43,D8,iTru7_101_08,CCTATGGT,iTru5_114_C,ATGCGCTT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0380 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0381,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0381,Feist_11661_P43,F8,iTru7_101_09,TGTACACC,iTru5_115_C,CAACCGTA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0381 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0382,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0382,Feist_11661_P43,H8,iTru7_101_10,GTATGCTG,iTru5_116_C,CACTTCAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0382 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0383,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0383,Feist_11661_P43,J8,iTru7_101_11,TGATGTCC,iTru5_117_C,CAGCTAGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0383 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0384,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0384,Feist_11661_P43,L8,iTru7_101_12,GTCCTTCT,iTru5_118_C,CCGTTATG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0384 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0385,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0385,Feist_11661_P43,N8,iTru7_102_01,ATAAGGCG,iTru5_119_C,CGAACAAC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0385 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0386,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0386,Feist_11661_P43,P8,iTru7_102_02,CTTACCTG,iTru5_120_C,CGTAGATG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0386 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0387,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0387,Feist_11661_P43,B10,iTru7_102_03,CGTTGCAA,iTru5_121_C,CTATGCCT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0387 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0388,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0388,Feist_11661_P43,D10,iTru7_102_04,GATTCAGC,iTru5_122_C,CTGATGAG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0388 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0389,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0389,Feist_11661_P43,F10,iTru7_102_05,TCACGTTC,iTru5_123_C,CTTCCTTC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0389 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0390,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0390,Feist_11661_P43,H10,iTru7_102_06,TGTGCGTT,iTru5_124_C,GTCTCATC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0390 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0391,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0391,Feist_11661_P43,J10,iTru7_102_07,TAGTTGCG,iTru5_113_D,GCGCATAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0391 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0392,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0392,Feist_11661_P43,L10,iTru7_102_08,AAGAGCCA,iTru5_114_D,GAAGATCC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0392 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0393,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0393,Feist_11661_P43,N10,iTru7_102_09,ACAGCTCA,iTru5_115_D,GTTGGCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0393 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0394,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0394,Feist_11661_P43,P10,iTru7_102_10,GTTAAGGC,iTru5_116_D,GTGAATGG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0394 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0395,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0395,Feist_11661_P43,B12,iTru7_102_11,AAGCCACA,iTru5_117_D,GTATCGAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0395 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0396,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0396,Feist_11661_P43,D12,iTru7_102_12,ACACGGTT,iTru5_118_D,TGCAAGAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0396 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0397,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0397,Feist_11661_P43,F12,iTru7_103_01,CAGCGATT,iTru5_119_D,GAGTGTGT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0397 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0398,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0398,Feist_11661_P43,H12,iTru7_103_02,TAGTGACC,iTru5_120_D,TAAGCGCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0398 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0399,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0399,Feist_11661_P43,J12,iTru7_103_03,CGAGACTA,iTru5_121_D,TAGCAGGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0399 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0400,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0400,Feist_11661_P43,L12,iTru7_103_04,GACATGGT,iTru5_122_D,GACTACGA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0400 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0401,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0401,Feist_11661_P43,N12,iTru7_103_05,GCATGTCT,iTru5_123_D,GACGTCAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0401 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0402,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0402,Feist_11661_P43,P12,iTru7_103_06,ACTCCATC,iTru5_124_D,AAGAGGCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0402 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0403,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0403,Feist_11661_P43,B14,iTru7_103_07,TGTGACTG,iTru5_113_E,ATCGTCTC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0403 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0404,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0404,Feist_11661_P43,D14,iTru7_103_08,CGAAGAAC,iTru5_114_E,ATGGCGAT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0404 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0405,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0405,Feist_11661_P43,F14,iTru7_103_09,GGTGTCTT,iTru5_115_E,CAAGAAGC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0405 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0406,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0406,Feist_11661_P43,H14,iTru7_103_10,AAGAAGGC,iTru5_116_E,CAGAACTG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0406 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0407,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0407,Feist_11661_P43,J14,iTru7_103_11,AGGTTCGA,iTru5_117_E,CAGGTAAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0407 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0408,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0408,Feist_11661_P43,L14,iTru7_103_12,CATGTTCC,iTru5_118_E,CCTACCTA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0408 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0409,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0409,Feist_11661_P43,N14,iTru7_104_01,GTGCCATA,iTru5_119_E,CGAAGTCA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0409 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0417,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0417,Feist_11661_P43,P14,iTru7_104_02,CCTTGTAG,iTru5_120_E,CGTCTTCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0417 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0418,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0418,Feist_11661_P43,B16,iTru7_104_03,GCTGGATT,iTru5_121_E,CTCAAGCT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0418 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0419,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0419,Feist_11661_P43,D16,iTru7_104_04,TAACGAGG,iTru5_122_E,CTGCCATA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0419 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0420,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0420,Feist_11661_P43,F16,iTru7_104_05,ATGGTTGC,iTru5_123_E,CTTGCTAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0420 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0421,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0421,Feist_11661_P43,H16,iTru7_104_06,CCTATACC,iTru5_124_E,GTCTGCAA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0421 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0473,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0473,Feist_11661_P43,J16,iTru7_104_07,TTAGGTCG,iTru5_113_F,GCTACTCT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0473 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0474,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0474,Feist_11661_P43,L16,iTru7_104_08,GCAAGATC,iTru5_114_F,TACAGAGC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0474 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0483,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0483,Feist_11661_P43,N16,iTru7_104_09,AGAGCCTT,iTru5_115_F,GGTCGTAT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0483 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0484,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0484,Feist_11661_P43,P16,iTru7_104_10,GCAATGGA,iTru5_116_F,GTCGTTAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0484 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0485,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0485,Feist_11661_P43,B18,iTru7_104_11,CTGGAGTA,iTru5_117_F,TTCACGGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0485 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0486,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0486,Feist_11661_P43,D18,iTru7_104_12,GAACATCG,iTru5_118_F,TGCTTGCT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0486 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0516,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0516,Feist_11661_P43,F18,iTru7_105_01,GCACAACT,iTru5_119_F,TCTTACGG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0516 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0517,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0517,Feist_11661_P43,H18,iTru7_105_02,TTCTCTCG,iTru5_120_F,TCCTCATG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0517 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0518,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0518,Feist_11661_P43,J18,iTru7_105_03,AACGGTCA,iTru5_121_F,GATGTCGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0518 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0519,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0519,Feist_11661_P43,L18,iTru7_105_04,ACAGACCT,iTru5_122_F,GAAGTGCT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0519 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0520,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0520,Feist_11661_P43,N18,iTru7_105_05,TCTCTTCC,iTru5_123_F,TCACTCGA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0520 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0521,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0521,Feist_11661_P43,P18,iTru7_105_06,AGTGTTGG,iTru5_124_F,ACGCAGTA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0521 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0522,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0522,Feist_11661_P43,B20,iTru7_105_07,TGGCATGT,iTru5_113_G,ATCTCCTG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0522 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0523,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0523,Feist_11661_P43,D20,iTru7_105_08,AGAAGCGT,iTru5_114_G,ATGTGGAC,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0523 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0524,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0524,Feist_11661_P43,F20,iTru7_105_09,AGCGGAAT,iTru5_115_G,CAAGCCAA,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-B0524 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-B0525,JM-MEC.Staphylococcus.aureusstrain.BERTI-B0525,Feist_11661_P43,H20,iTru7_105_10,TAACCGGT,iTru5_116_G,CAGACGTT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-B0525 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R08624,JM-MEC.Staphylococcus.aureusstrain.BERTI-R08624,Feist_11661_P43,J20,iTru7_105_11,CATGGAAC,iTru5_117_G,CATACTCG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R08624 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R08704,JM-MEC.Staphylococcus.aureusstrain.BERTI-R08704,Feist_11661_P43,L20,iTru7_105_12,ATGGTCCA,iTru5_118_G,CCTGTCAA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R08704 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R10727,JM-MEC.Staphylococcus.aureusstrain.BERTI-R10727,Feist_11661_P43,N20,iTru7_106_01,CTTCTGAG,iTru5_119_G,CGAGTTAG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R10727 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11044,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11044,Feist_11661_P43,P20,iTru7_106_02,AACCGAAG,iTru5_120_G,CTAACCTG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11044 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11078,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11078,Feist_11661_P43,B22,iTru7_106_03,TTCGTACC,iTru5_121_G,CTCCTAGT,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11078 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11101,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11101,Feist_11661_P43,D22,iTru7_106_04,CTGTTAGG,iTru5_122_G,CTGTACCA,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11101 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11102,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11102,Feist_11661_P43,F22,iTru7_106_05,CACAAGTC,iTru5_123_G,GCTACAAC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11102 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11103,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11103,Feist_11661_P43,H22,iTru7_106_06,TCTTGACG,iTru5_124_G,GTTCTTCG,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11103 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11135,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11135,Feist_11661_P43,J22,iTru7_106_07,CGTCTTGT,iTru5_113_H,GAGAGTAC,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11135 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11153,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11153,Feist_11661_P43,L22,iTru7_106_08,CGTGATCA,iTru5_114_H,GACACAGT,Feist_11661,pool2,JM-MEC__Staphylococcus aureusstrain BERTI-R11153 +1,JM-MEC__Staphylococcus_aureusstrain_BERTI-R11154,JM-MEC.Staphylococcus.aureusstrain.BERTI-R11154,Feist_11661_P43,N22,iTru7_106_09,CCAAGTTG,iTru5_115_H,TTGCTTGG,Feist_11661,pool1,JM-MEC__Staphylococcus aureusstrain BERTI-R11154 +1,JM-Metabolic__GN02424,JM-Metabolic.GN02424,Feist_11661_P43,P22,iTru7_106_10,GTACCTTG,iTru5_116_H,GTAGTACC,Feist_11661,pool2,JM-Metabolic__GN02424 +1,JM-Metabolic__GN02446,JM-Metabolic.GN02446,Feist_11661_P43,B24,iTru7_106_11,GACTATGC,iTru5_117_H,TTCGGCTA,Feist_11661,pool1,JM-Metabolic__GN02446 +1,JM-Metabolic__GN02449,JM-Metabolic.GN02449,Feist_11661_P43,D24,iTru7_106_12,TGGATCAC,iTru5_118_H,TGCACTTG,Feist_11661,pool2,JM-Metabolic__GN02449 +1,JM-Metabolic__GN02487,JM-Metabolic.GN02487,Feist_11661_P43_diluted,F24,iTru7_107_01,CTCTGGTT,iTru5_119_H,TAGAACGC,Feist_11661,pool1,JM-Metabolic__GN02487 +1,JM-Metabolic__GN02501,JM-Metabolic.GN02501,Feist_11661_P43,H24,iTru7_107_02,GTTCATGG,iTru5_120_H,GATTGTCC,Feist_11661,pool2,JM-Metabolic__GN02501 +1,ISB,ISB,Gerwick_tubes,J24,iTru7_107_03,GCTGTAAG,iTru5_121_H,GATGCTAC,Gerwick_6123,pool1,ISB +1,GFR,GFR,Gerwick_tubes,L24,iTru7_107_04,GTCGAAGA,iTru5_122_H,GAACGGTT,Gerwick_6123,pool2,GFR +1,BLANK_43_12G,BLANK.43.12G,Feist_11661_P43,N24,iTru7_107_05,GAGCTCAA,iTru5_123_H,CTCTTGTC,Feist_11661,pool1,BLANK.43.12G +1,BLANK_43_12H,BLANK.43.12H,Feist_11661_P43,P24,iTru7_107_06,TGAACCTG,iTru5_124_H,AACGCCTT,Feist_11661,pool2,BLANK.43.12H +1,RMA_KHP_rpoS_Mage_Q97D,RMA.KHP.rpoS.Mage.Q97D,,,12,CTTGTAAT,U1,TATAGCGT,Feist_11661,pool1,RMA_KHP_rpoS Mage Q97D +1,RMA_KHP_rpoS_Mage_Q97L,RMA.KHP.rpoS.Mage.Q97L,,,13,AGTCAAAT,U1,TATAGCGT,Feist_11661,pool2,RMA_KHP_rpoS Mage Q97L +1,RMA_KHP_rpoS_Mage_Q97N,RMA.KHP.rpoS.Mage.Q97N,,,14,AGTTCCAT,U1,TATAGCGT,Feist_11661,pool1,RMA_KHP_rpoS Mage Q97N +1,RMA_KHP_rpoS_Mage_Q97E,RMA.KHP.rpoS.Mage.Q97E,,,15,ATGTCAAT,U1,TATAGCGT,Feist_11661,pool2,RMA_KHP_rpoS Mage Q97E +1,JBI_KHP_HGL_021,JBI.KHP.HGL.021,,,1,ATCACGAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_021 +1,JBI_KHP_HGL_022,JBI.KHP.HGL.022,,,2,CGATGTAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_022 +1,JBI_KHP_HGL_023,JBI.KHP.HGL.023,,,3,TTAGGCAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_023 +1,JBI_KHP_HGL_024,JBI.KHP.HGL.024,,,4,TGACCAAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_024 +1,JBI_KHP_HGL_025,JBI.KHP.HGL.025,,,5,ACAGTGAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_025 +1,JBI_KHP_HGL_026,JBI.KHP.HGL.026,,,6,GCCAATAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_026 +1,JBI_KHP_HGL_027,JBI.KHP.HGL.027,,,7,CAGATCAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_027 +1,JBI_KHP_HGL_028_Amitesh_soxR,JBI.KHP.HGL.028.Amitesh.soxR,,,8,ACTTGAAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_028_Amitesh_soxR +1,JBI_KHP_HGL_029_Amitesh_oxyR,JBI.KHP.HGL.029.Amitesh.oxyR,,,9,GATCAGAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_029_Amitesh_oxyR +1,JBI_KHP_HGL_030_Amitesh_soxR_oxyR,JBI.KHP.HGL.030.Amitesh.soxR.oxyR,,,10,TAGCTTAT,U2,ATAGAGGT,Feist_11661,pool2,JBI_KHP_HGL_030_Amitesh_soxR_oxyR +1,JBI_KHP_HGL_031_Amitesh_rpoS,JBI.KHP.HGL.031.Amitesh.rpoS,,,11,GGCTACAT,U2,ATAGAGGT,Feist_11661,pool1,JBI_KHP_HGL_031_Amitesh_rpoS +1,BLANK1_1A,BLANK1.1A,NYU_BMS_Melanoma_13059_P1,A1,iTru7_107_09,GCCTTGTT,iTru5_01_A,ACCGACAA,NYU_BMS_Melanoma_13059,pool2,BLANK1.1A +1,BLANK1_1B,BLANK1.1B,NYU_BMS_Melanoma_13059_P1,C1,iTru7_107_10,AACTTGCC,iTru5_02_A,CTTCGCAA,NYU_BMS_Melanoma_13059,pool1,BLANK1.1B +1,BLANK1_1C,BLANK1.1C,NYU_BMS_Melanoma_13059_P1,E1,iTru7_107_11,CAATGTGG,iTru5_03_A,AACACCAC,NYU_BMS_Melanoma_13059,pool2,BLANK1.1C +1,BLANK1_1D,BLANK1.1D,NYU_BMS_Melanoma_13059_P1,G1,iTru7_107_12,AAGGCTGA,iTru5_04_A,CGTATCTC,NYU_BMS_Melanoma_13059,pool1,BLANK1.1D +1,BLANK1_1E,BLANK1.1E,NYU_BMS_Melanoma_13059_P1,I1,iTru7_108_01,TTACCGAG,iTru5_05_A,GGTACGAA,NYU_BMS_Melanoma_13059,pool2,BLANK1.1E +1,BLANK1_1F,BLANK1.1F,NYU_BMS_Melanoma_13059_P1,K1,iTru7_108_02,GTCCTAAG,iTru5_06_A,CGATCGAT,NYU_BMS_Melanoma_13059,pool1,BLANK1.1F +1,BLANK1_1G,BLANK1.1G,NYU_BMS_Melanoma_13059_P1,M1,iTru7_108_03,GAAGGTTC,iTru5_07_A,AAGACACC,NYU_BMS_Melanoma_13059,pool2,BLANK1.1G +1,BLANK1_1H,BLANK1.1H,NYU_BMS_Melanoma_13059_P1,O1,iTru7_108_04,GAAGAGGT,iTru5_08_A,CATCTGCT,NYU_BMS_Melanoma_13059,pool1,BLANK1.1H +1,AP581451B02,AP581451B02,NYU_BMS_Melanoma_13059_P1,A3,iTru7_108_05,TCTGAGAG,iTru5_09_A,CTCTCAGA,NYU_BMS_Melanoma_13059,pool2,AP581451B02 +1,EP256645B01,EP256645B01,NYU_BMS_Melanoma_13059_P1,C3,iTru7_108_06,ACCGCATA,iTru5_10_A,TCGTCTGA,NYU_BMS_Melanoma_13059,pool1,EP256645B01 +1,EP112567B02,EP112567B02,NYU_BMS_Melanoma_13059_P1,E3,iTru7_108_07,GAAGTACC,iTru5_11_A,CAATAGCC,NYU_BMS_Melanoma_13059,pool2,EP112567B02 +1,EP337425B01,EP337425B01,NYU_BMS_Melanoma_13059_P1,G3,iTru7_108_08,CAGGTATC,iTru5_12_A,CATTCGTC,NYU_BMS_Melanoma_13059,pool1,EP337425B01 +1,LP127890A01,LP127890A01,NYU_BMS_Melanoma_13059_P1,I3,iTru7_108_09,TCTCTAGG,iTru5_01_B,AGTGGCAA,NYU_BMS_Melanoma_13059,pool2,LP127890A01 +1,EP159692B04,EP159692B04,NYU_BMS_Melanoma_13059_P1,K3,iTru7_108_10,AAGCACTG,iTru5_02_B,GTGGTATG,NYU_BMS_Melanoma_13059,pool1,EP159692B04 +1,EP987683A01,EP987683A01,NYU_BMS_Melanoma_13059_P1,M3,iTru7_108_11,CCAAGCAA,iTru5_03_B,TGAGCTGT,NYU_BMS_Melanoma_13059,pool2,EP987683A01 +1,AP959450A03,AP959450A03,NYU_BMS_Melanoma_13059_P1,O3,iTru7_108_12,TGTTCGAG,iTru5_04_B,CGTCAAGA,NYU_BMS_Melanoma_13059,pool1,AP959450A03 +1,SP464350A04,SP464350A04,NYU_BMS_Melanoma_13059_P1,A5,iTru7_109_01,CTCGTCTT,iTru5_05_B,AAGCATCG,NYU_BMS_Melanoma_13059,pool2,SP464350A04 +1,C9,C9,NYU_BMS_Melanoma_13059_P1,C5,iTru7_109_02,CGAACTGT,iTru5_06_B,TACTCCAG,NYU_BMS_Melanoma_13059,pool1,C9 +1,ep256643b01,ep256643b01,NYU_BMS_Melanoma_13059_P1,E5,iTru7_109_03,CATTCGGT,iTru5_07_B,GATACCTG,NYU_BMS_Melanoma_13059,pool2,ep256643b01 +1,EP121011B01,EP121011B-1,NYU_BMS_Melanoma_13059_P1,G5,iTru7_109_04,TCGGTTAC,iTru5_08_B,ACCTCTTC,NYU_BMS_Melanoma_13059,pool1,EP121011B-1 +1,AP616837B04,AP616837B04,NYU_BMS_Melanoma_13059_P1,I5,iTru7_109_05,AAGTCGAG,iTru5_09_B,ACGGACTT,NYU_BMS_Melanoma_13059,pool2,AP616837B04 +1,SP506933A04,SP506933A04,NYU_BMS_Melanoma_13059_P1,K5,iTru7_109_06,TATCGGTC,iTru5_10_B,CATGTGTG,NYU_BMS_Melanoma_13059,pool1,SP506933A04 +1,EP159695B01,EP159695B01,NYU_BMS_Melanoma_13059_P1,M5,iTru7_109_07,TATTCGCC,iTru5_11_B,TGCCTCAA,NYU_BMS_Melanoma_13059,pool2,EP159695B01 +1,EP256644B01,EP256644B01,NYU_BMS_Melanoma_13059_P1,O5,iTru7_109_08,GTATTGGC,iTru5_12_B,ATCTGACC,NYU_BMS_Melanoma_13059,pool1,EP256644B01 +1,SP511289A02,SP511289A02,NYU_BMS_Melanoma_13059_P1,A7,iTru7_109_09,AGTCGCTT,iTru5_01_C,CACAGACT,NYU_BMS_Melanoma_13059,pool2,SP511289A02 +1,EP305735B04,EP305735B04,NYU_BMS_Melanoma_13059_P1,C7,iTru7_109_10,TGGCACTA,iTru5_02_C,CACTGTAG,NYU_BMS_Melanoma_13059,pool1,EP305735B04 +1,SP415030A01,SP415030A01,NYU_BMS_Melanoma_13059_P1,E7,iTru7_109_11,GGTTGTCA,iTru5_03_C,CACAGGAA,NYU_BMS_Melanoma_13059,pool2,SP415030A01 +1,AP549681B02,AP549681B02,NYU_BMS_Melanoma_13059_P1,G7,iTru7_109_12,AACCTCCT,iTru5_04_C,CCATGAAC,NYU_BMS_Melanoma_13059,pool1,AP549681B02 +1,AP549678B01,AP549678B01,NYU_BMS_Melanoma_13059_P1,I7,iTru7_110_01,ATGACCAG,iTru5_05_C,GCCAATAC,NYU_BMS_Melanoma_13059,pool2,AP549678B01 +1,EP260544B04,EP260544B04,NYU_BMS_Melanoma_13059_P1,K7,iTru7_110_02,AACCGTTC,iTru5_06_C,AGCTACCA,NYU_BMS_Melanoma_13059,pool1,EP260544B04 +1,EP202452B01,EP202452B01,NYU_BMS_Melanoma_13059_P1,M7,iTru7_110_03,TCCAATCG,iTru5_07_C,AACCGAAC,NYU_BMS_Melanoma_13059,pool2,EP202452B01 +1,EP282276B04,EP282276B04,NYU_BMS_Melanoma_13059_P1,O7,iTru7_110_04,CTGCACTT,iTru5_08_C,ATCGCAAC,NYU_BMS_Melanoma_13059,pool1,EP282276B04 +1,SP531696A04,SP531696A04,NYU_BMS_Melanoma_13059_P1,A9,iTru7_110_05,CGCTTAAC,iTru5_09_C,GTTGCTGT,NYU_BMS_Melanoma_13059,pool2,SP531696A04 +1,SP515443A04,SP515443A04,NYU_BMS_Melanoma_13059_P1,C9,iTru7_110_06,CACCACTA,iTru5_10_C,TCTAGTCC,NYU_BMS_Melanoma_13059,pool1,SP515443A04 +1,SP515763A04,SP515763A04,NYU_BMS_Melanoma_13059_P1,E9,iTru7_110_07,ACAGCAAC,iTru5_11_C,GACGAACT,NYU_BMS_Melanoma_13059,pool2,SP515763A04 +1,EP184255B04,EP184255B04,NYU_BMS_Melanoma_13059_P1,G9,iTru7_110_08,GGAAGGAT,iTru5_12_C,TTCGTACG,NYU_BMS_Melanoma_13059,pool1,EP184255B04 +1,SP503615A02,SP503615A02,NYU_BMS_Melanoma_13059_P1,I9,iTru7_110_09,GGCGTTAT,iTru5_01_D,CGACACTT,NYU_BMS_Melanoma_13059,pool2,SP503615A02 +1,EP260543B04,EP260543B04,NYU_BMS_Melanoma_13059_P1,K9,iTru7_110_10,CTGTTGAC,iTru5_02_D,AGACGCTA,NYU_BMS_Melanoma_13059,pool1,EP260543B04 +1,EP768748A04,EP768748A04,NYU_BMS_Melanoma_13059_P1,M9,iTru7_110_11,GTCATCGA,iTru5_03_D,TGACAACC,NYU_BMS_Melanoma_13059,pool2,EP768748A04 +1,AP309872B03,AP309872B03,NYU_BMS_Melanoma_13059_P1,O9,iTru7_110_12,TGACTTCG,iTru5_04_D,GGTACTTC,NYU_BMS_Melanoma_13059,pool1,AP309872B03 +1,AP568785B04,AP568785B04,NYU_BMS_Melanoma_13059_P1,A11,iTru7_111_01,CGATAGAG,iTru5_05_D,CTGTATGC,NYU_BMS_Melanoma_13059,pool2,AP568785B04 +1,EP721390A04,EP721390A04,NYU_BMS_Melanoma_13059_P1,C11,iTru7_111_02,TTCGTTGG,iTru5_06_D,TCGACAAG,NYU_BMS_Melanoma_13059,pool1,EP721390A04 +1,EP940013A01,EP940013A01,NYU_BMS_Melanoma_13059_P1,E11,iTru7_111_03,TGGAGAGT,iTru5_07_D,GCTGAATC,NYU_BMS_Melanoma_13059,pool2,EP940013A01 +1,EP291979B04,EP291979B04,NYU_BMS_Melanoma_13059_P1,G11,iTru7_111_04,TCAGACGA,iTru5_08_D,AGTTGTGC,NYU_BMS_Melanoma_13059,pool1,EP291979B04 +1,EP182065B04,EP182065B04,NYU_BMS_Melanoma_13059_P1,I11,iTru7_111_05,GACGAATG,iTru5_09_D,TGTCGACT,NYU_BMS_Melanoma_13059,pool2,EP182065B04 +1,EP128904B02,EP128904B02,NYU_BMS_Melanoma_13059_P1,K11,iTru7_111_06,CATGAGGA,iTru5_10_D,AAGGCTCT,NYU_BMS_Melanoma_13059,pool1,EP128904B02 +1,EP915769A04,EP915769A04,NYU_BMS_Melanoma_13059_P1,M11,iTru7_111_07,CGGTTGTT,iTru5_11_D,CCTAACAG,NYU_BMS_Melanoma_13059,pool2,EP915769A04 +1,SP464352A03,SP464352A03,NYU_BMS_Melanoma_13059_P1,O11,iTru7_111_08,TCCGTATG,iTru5_12_D,AAGACGAG,NYU_BMS_Melanoma_13059,pool1,SP464352A03 +1,SP365864A04,SP365864A04,NYU_BMS_Melanoma_13059_P1,A13,iTru7_111_09,TGTGGTAC,iTru5_01_E,GACTTGTG,NYU_BMS_Melanoma_13059,pool2,SP365864A04 +1,SP511294A04,SP511294A04,NYU_BMS_Melanoma_13059_P1,C13,iTru7_111_10,AGAACGAG,iTru5_02_E,CAACTCCA,NYU_BMS_Melanoma_13059,pool1,SP511294A04 +1,EP061002B01,EP061002B01,NYU_BMS_Melanoma_13059_P1,E13,iTru7_111_11,CTTCGTTC,iTru5_03_E,TGTTCCGT,NYU_BMS_Melanoma_13059,pool2,EP061002B01 +1,SP410793A01,SP410793A01,NYU_BMS_Melanoma_13059_P1,G13,iTru7_111_12,CCAATAGG,iTru5_04_E,ACCGCTAT,NYU_BMS_Melanoma_13059,pool1,SP410793A01 +1,SP232077A04,SP232077A04,NYU_BMS_Melanoma_13059_P1,I13,iTru7_112_01,ACCATCCA,iTru5_05_E,CTTAGGAC,NYU_BMS_Melanoma_13059,pool2,SP232077A04 +1,EP128910B01,EP128910B01,NYU_BMS_Melanoma_13059_P1,K13,iTru7_112_02,CACACATG,iTru5_06_E,TATGACCG,NYU_BMS_Melanoma_13059,pool1,EP128910B01 +1,AP531397B04,AP531397B04,NYU_BMS_Melanoma_13059_P1,M13,iTru7_112_03,CTTGTCGA,iTru5_07_E,AGCTAGTG,NYU_BMS_Melanoma_13059,pool2,AP531397B04 +1,EP043583B01,EP043583B01,NYU_BMS_Melanoma_13059_P1,O13,iTru7_112_04,AGTCTCAC,iTru5_08_E,GAACGAAG,NYU_BMS_Melanoma_13059,pool1,EP043583B01 +1,EP230245B01,EP230245B01,NYU_BMS_Melanoma_13059_P1,A15,iTru7_112_05,AGTTGGCT,iTru5_09_E,CGTCTAAC,NYU_BMS_Melanoma_13059,pool2,EP230245B01 +1,EP606652B04,EP606652B04,NYU_BMS_Melanoma_13059_P1,C15,iTru7_112_06,CCGGAATT,iTru5_10_E,AACCAGAG,NYU_BMS_Melanoma_13059,pool1,EP606652B04 +1,EP207041B01,EP207041B01,NYU_BMS_Melanoma_13059_P1,E15,iTru7_112_07,CAGTGAAG,iTru5_11_E,CGCCTTAT,NYU_BMS_Melanoma_13059,pool2,EP207041B01 +1,EP727972A04,EP727972A04,NYU_BMS_Melanoma_13059_P1,G15,iTru7_112_08,CCTACTGA,iTru5_12_E,CTCGTTCT,NYU_BMS_Melanoma_13059,pool1,EP727972A04 +1,EP291980B04,EP291980B04,NYU_BMS_Melanoma_13059_P1,I15,iTru7_112_09,TGTGAAGC,iTru5_01_F,GTGAGACT,NYU_BMS_Melanoma_13059,pool2,EP291980B04 +1,EP087938B02,EP087938B02,NYU_BMS_Melanoma_13059_P1,K15,iTru7_112_10,GTCTGATC,iTru5_02_F,AACACGCT,NYU_BMS_Melanoma_13059,pool1,EP087938B02 +1,SP471496A04,SP471496A04,NYU_BMS_Melanoma_13059_P1,M15,iTru7_112_11,TTCAGGAG,iTru5_03_F,CCTAGAGA,NYU_BMS_Melanoma_13059,pool2,SP471496A04 +1,SP573823A04,SP573823A04,NYU_BMS_Melanoma_13059_P1,O15,iTru7_112_12,ACGATGAC,iTru5_04_F,TTCCAGGT,NYU_BMS_Melanoma_13059,pool1,SP573823A04 +1,EP393718B01,EP393718B01,NYU_BMS_Melanoma_13059_P1,A17,iTru7_113_01,CGTTATGC,iTru5_05_F,TCAGCCTT,NYU_BMS_Melanoma_13059,pool2,EP393718B01 +1,SP612496A01,SP612496A01,NYU_BMS_Melanoma_13059_P1,C17,iTru7_113_02,GATACTGG,iTru5_06_F,AGCCAACT,NYU_BMS_Melanoma_13059,pool1,SP612496A01 +1,EP032410B02,EP032410B02,NYU_BMS_Melanoma_13059_P1,E17,iTru7_113_03,CTACTTGG,iTru5_07_F,CTAGCTCA,NYU_BMS_Melanoma_13059,pool2,EP032410B02 +1,EP073216B01,EP073216B01,NYU_BMS_Melanoma_13059_P1,G17,iTru7_113_04,CATACCAC,iTru5_08_F,GGAAGAGA,NYU_BMS_Melanoma_13059,pool1,EP073216B01 +1,EP410046B01,EP410046B01,NYU_BMS_Melanoma_13059_P1,I17,iTru7_113_05,ACATTGCG,iTru5_09_F,AACACTGG,NYU_BMS_Melanoma_13059,pool2,EP410046B01 +1,SP561451A04,SP561451A04,NYU_BMS_Melanoma_13059_P1,K17,iTru7_113_06,TGATCGGA,iTru5_10_F,ACTATCGC,NYU_BMS_Melanoma_13059,pool1,SP561451A04 +1,EP320438B01,EP320438B01,NYU_BMS_Melanoma_13059_P1,M17,iTru7_113_07,AAGTGTCG,iTru5_11_F,ACAACAGC,NYU_BMS_Melanoma_13059,pool2,EP320438B01 +1,SP612495A04,SP612495A04,NYU_BMS_Melanoma_13059_P1,O17,iTru7_113_08,GAACGCTT,iTru5_12_F,TGTGGCTT,NYU_BMS_Melanoma_13059,pool1,SP612495A04 +1,EP446604B03,EP446604B03,NYU_BMS_Melanoma_13059_P1,A19,iTru7_113_09,TCAAGGAC,iTru5_01_G,GTTCCATG,NYU_BMS_Melanoma_13059,pool2,EP446604B03 +1,EP446602B01,EP446602B-1,NYU_BMS_Melanoma_13059_P1,C19,iTru7_113_10,TCAACTGG,iTru5_02_G,TGGATGGT,NYU_BMS_Melanoma_13059,pool1,EP446602B-1 +1,EP182243B02,EP182243B02,NYU_BMS_Melanoma_13059_P1,E19,iTru7_113_11,GGTTGATG,iTru5_03_G,GCATAACG,NYU_BMS_Melanoma_13059,pool2,EP182243B02 +1,EP333541B04,EP333541B04,NYU_BMS_Melanoma_13059_P1,G19,iTru7_113_12,AAGGACAC,iTru5_04_G,TCGAACCT,NYU_BMS_Melanoma_13059,pool1,EP333541B04 +1,EP238034B01,EP238034B01,NYU_BMS_Melanoma_13059_P1,I19,iTru7_114_01,TTGATCCG,iTru5_05_G,ACATGCCA,NYU_BMS_Melanoma_13059,pool2,EP238034B01 +1,AP298002B02,AP298002B02,NYU_BMS_Melanoma_13059_P1,K19,iTru7_114_02,GGTGATTC,iTru5_06_G,GATCTTGC,NYU_BMS_Melanoma_13059,pool1,AP298002B02 +1,EP455759B04,EP455759B04,NYU_BMS_Melanoma_13059_P1,M19,iTru7_114_03,GATTGCTC,iTru5_07_G,GTTAAGCG,NYU_BMS_Melanoma_13059,pool2,EP455759B04 +1,EP207042B04,EP207042B04,NYU_BMS_Melanoma_13059_P1,O19,iTru7_114_04,ACCTGGAA,iTru5_08_G,GTCATCGT,NYU_BMS_Melanoma_13059,pool1,EP207042B04 +1,LP128479A01,LP128479A01,NYU_BMS_Melanoma_13059_P1,A21,iTru7_114_05,CATCTACG,iTru5_09_G,TCAGACAC,NYU_BMS_Melanoma_13059,pool2,LP128479A01 +1,LP128476A01,LP128476A01,NYU_BMS_Melanoma_13059_P1,C21,iTru7_114_06,CCGTATCT,iTru5_10_G,GTCCTAAG,NYU_BMS_Melanoma_13059,pool1,LP128476A01 +1,EP316863B03,EP316863B03,NYU_BMS_Melanoma_13059_P1,E21,iTru7_114_07,CGGAATAC,iTru5_11_G,AGACCTTG,NYU_BMS_Melanoma_13059,pool2,EP316863B03 +1,C20,C20,NYU_BMS_Melanoma_13059_P1,G21,iTru7_114_08,CTCCTAGA,iTru5_12_G,AGACATGC,NYU_BMS_Melanoma_13059,pool1,C20 +1,lp127896a01,lp127896a01,NYU_BMS_Melanoma_13059_P1,I21,iTru7_114_09,TGGTAGCT,iTru5_01_H,TAGCTGAG,NYU_BMS_Melanoma_13059,pool2,lp127896a01 +1,SP491907A02,SP491907A02,NYU_BMS_Melanoma_13059_P1,K21,iTru7_114_10,TCGAAGGT,iTru5_02_H,TTCGAAGC,NYU_BMS_Melanoma_13059,pool1,SP491907A02 +1,EP182060B03,EP182060B03,NYU_BMS_Melanoma_13059_P1,M21,iTru7_114_11,ACATAGGC,iTru5_03_H,CAGTGCTT,NYU_BMS_Melanoma_13059,pool2,EP182060B03 +1,EP422407B01,EP422407B01,NYU_BMS_Melanoma_13059_P1,O21,iTru7_114_12,CTCAGAGT,iTru5_04_H,TAGTGCCA,NYU_BMS_Melanoma_13059,pool1,EP422407B01 +1,SP573859A04,SP573859A04,NYU_BMS_Melanoma_13059_P1,A23,iTru7_201_01,CTTGGATG,iTru5_05_H,GATGGAGT,NYU_BMS_Melanoma_13059,pool2,SP573859A04 +1,SP584547A02,SP584547A02,NYU_BMS_Melanoma_13059_P1,C23,iTru7_201_02,CAGTTGGA,iTru5_06_H,CCTCGTTA,NYU_BMS_Melanoma_13059,pool1,SP584547A02 +1,EP182346B04,EP182346B04,NYU_BMS_Melanoma_13059_P1,E23,iTru7_201_03,GATAGGCT,iTru5_07_H,CGATTGGA,NYU_BMS_Melanoma_13059,pool2,EP182346B04 +1,AP668631B04,AP668631B04,NYU_BMS_Melanoma_13059_P1,G23,iTru7_201_04,TTGACAGG,iTru5_08_H,CCAACGAA,NYU_BMS_Melanoma_13059,pool1,AP668631B04 +1,EP451428B04,EP451428B04,NYU_BMS_Melanoma_13059_P1,I23,iTru7_201_05,AGAATGCC,iTru5_09_H,AGAAGGAC,NYU_BMS_Melanoma_13059,pool2,EP451428B04 +1,LP128538A01,LP128538A01,NYU_BMS_Melanoma_13059_P1,K23,iTru7_201_06,CTACATCC,iTru5_10_H,TGACCGTT,NYU_BMS_Melanoma_13059,pool1,LP128538A01 +1,SP490298A02,SP490298A02,NYU_BMS_Melanoma_13059_P1,M23,iTru7_201_07,TCATGGTG,iTru5_11_H,GCGTTAGA,NYU_BMS_Melanoma_13059,pool2,SP490298A02 +1,SP573860A01,SP573860A01,NYU_BMS_Melanoma_13059_P1,O23,iTru7_201_08,TACACGCT,iTru5_12_H,TCTAGGAG,NYU_BMS_Melanoma_13059,pool1,SP573860A01 +1,EP032412B02,EP032412B02,NYU_BMS_Melanoma_13059_P2,A2,iTru7_201_09,TACGGTTG,iTru5_13_A,GGTATAGG,NYU_BMS_Melanoma_13059,pool2,EP032412B02 +1,EP163771B01,EP163771B01,NYU_BMS_Melanoma_13059_P2,C2,iTru7_201_10,GGATACCA,iTru5_14_A,TCCGATCA,NYU_BMS_Melanoma_13059,pool1,EP163771B01 +1,LP169879A01,LP169879A01,NYU_BMS_Melanoma_13059_P2,E2,iTru7_201_11,TCGACATC,iTru5_15_A,CGACCTAA,NYU_BMS_Melanoma_13059,pool2,LP169879A01 +1,EP729433A02,EP729433A02,NYU_BMS_Melanoma_13059_P2,G2,iTru7_201_12,GTTGTAGC,iTru5_16_A,GACATCTC,NYU_BMS_Melanoma_13059,pool1,EP729433A02 +1,EP447940B04,EP447940B04,NYU_BMS_Melanoma_13059_P2,I2,iTru7_202_01,ATACGACC,iTru5_17_A,CCAGTATC,NYU_BMS_Melanoma_13059,pool2,EP447940B04 +1,SP584551A08,SP584551A08,NYU_BMS_Melanoma_13059_P2,K2,iTru7_202_02,TTCCAAGG,iTru5_18_A,ACGCTTCT,NYU_BMS_Melanoma_13059,pool1,SP584551A08 +1,EP216516B04,EP216516B04,NYU_BMS_Melanoma_13059_P2,M2,iTru7_202_03,TTGCAGAC,iTru5_19_A,AACGCACA,NYU_BMS_Melanoma_13059,pool2,EP216516B04 +1,EP023808B02,EP023808B02,NYU_BMS_Melanoma_13059_P2,O2,iTru7_202_04,TGCCATTC,iTru5_20_A,TGATCACG,NYU_BMS_Melanoma_13059,pool1,EP023808B02 +1,BLANK2_2A,BLANK2.2A,NYU_BMS_Melanoma_13059_P2,A4,iTru7_202_05,GATGTGTG,iTru5_21_A,GCGTATCA,NYU_BMS_Melanoma_13059,pool2,BLANK2.2A +1,BLANK2_2B,BLANK2.2B,NYU_BMS_Melanoma_13059_P2,C4,iTru7_202_06,ACTCTCGA,iTru5_22_A,GTGTCCTT,NYU_BMS_Melanoma_13059,pool1,BLANK2.2B +1,BLANK2_2C,BLANK2.2C,NYU_BMS_Melanoma_13059_P2,E4,iTru7_202_07,GAGTCTCT,iTru5_23_A,GGTAACGT,NYU_BMS_Melanoma_13059,pool2,BLANK2.2C +1,BLANK2_2D,BLANK2.2D,NYU_BMS_Melanoma_13059_P2,G4,iTru7_202_08,CAACACCT,iTru5_24_A,CGAGAGAA,NYU_BMS_Melanoma_13059,pool1,BLANK2.2D +1,BLANK2_2E,BLANK2.2E,NYU_BMS_Melanoma_13059_P2,I4,iTru7_202_09,CAGTCTTC,iTru5_13_B,CATTGACG,NYU_BMS_Melanoma_13059,pool2,BLANK2.2E +1,BLANK2_2F,BLANK2.2F,NYU_BMS_Melanoma_13059_P2,K4,iTru7_202_10,GGACTGTT,iTru5_14_B,GGTGATGA,NYU_BMS_Melanoma_13059,pool1,BLANK2.2F +1,BLANK2_2G,BLANK2.2G,NYU_BMS_Melanoma_13059_P2,M4,iTru7_202_11,CTTAGTGG,iTru5_15_B,AACCGTGT,NYU_BMS_Melanoma_13059,pool2,BLANK2.2G +1,BLANK2_2H,BLANK2.2H,NYU_BMS_Melanoma_13059_P2,O4,iTru7_202_12,ATTGCGTG,iTru5_16_B,CCTATTGG,NYU_BMS_Melanoma_13059,pool1,BLANK2.2H +1,SP573843A04,SP573843A04,NYU_BMS_Melanoma_13059_P2,A6,iTru7_203_01,GTAACGAC,iTru5_17_B,TCAGTAGG,NYU_BMS_Melanoma_13059,pool2,SP573843A04 +1,EP683835A01,EP683835A01,NYU_BMS_Melanoma_13059_P2,C6,iTru7_203_02,CTTGCTGT,iTru5_18_B,TATGCGGT,NYU_BMS_Melanoma_13059,pool1,EP683835A01 +1,SP573824A04,SP573824A04,NYU_BMS_Melanoma_13059_P2,E6,iTru7_203_03,GTTGTTCG,iTru5_19_B,ATGCCTAG,NYU_BMS_Melanoma_13059,pool2,SP573824A04 +1,SP335002A04,SP335002A04,NYU_BMS_Melanoma_13059_P2,G6,iTru7_203_04,CGTTGAGT,iTru5_20_B,CTAGCAGT,NYU_BMS_Melanoma_13059,pool1,SP335002A04 +1,SP478193A02,SP478193A02,NYU_BMS_Melanoma_13059_P2,I6,iTru7_203_05,TCGAACCA,iTru5_21_B,AGGTCAAC,NYU_BMS_Melanoma_13059,pool2,SP478193A02 +1,SP232311A04,SP232311A04,NYU_BMS_Melanoma_13059_P2,K6,iTru7_203_06,AGACCGTA,iTru5_22_B,GAACGTGA,NYU_BMS_Melanoma_13059,pool1,SP232311A04 +1,SP415021A02,SP415021A02,NYU_BMS_Melanoma_13059_P2,M6,iTru7_203_07,CAGAGTGT,iTru5_23_B,ATCATGCG,NYU_BMS_Melanoma_13059,pool2,SP415021A02 +1,SP231630A02,SP231630A02,NYU_BMS_Melanoma_13059_P2,O6,iTru7_203_08,GACAAGAG,iTru5_24_B,CAACGAGT,NYU_BMS_Melanoma_13059,pool1,SP231630A02 +1,SP641029A02,SP641029A02,NYU_BMS_Melanoma_13059_P2,A8,iTru7_203_09,GAACACAC,iTru5_13_C,CGCAATGT,NYU_BMS_Melanoma_13059,pool2,SP641029A02 +1,SP232310A04,SP232310A04,NYU_BMS_Melanoma_13059_P2,C8,iTru7_203_10,GCTTAGCT,iTru5_14_C,AACAAGGC,NYU_BMS_Melanoma_13059,pool1,SP232310A04 +1,EP617442B01,EP617442B01,NYU_BMS_Melanoma_13059_P2,E8,iTru7_203_11,GAAGGAAG,iTru5_15_C,ACCATGTC,NYU_BMS_Melanoma_13059,pool2,EP617442B01 +1,EP587478B04,EP587478B04,NYU_BMS_Melanoma_13059_P2,G8,iTru7_203_12,CAGTTCTG,iTru5_16_C,AATCCAGC,NYU_BMS_Melanoma_13059,pool1,EP587478B04 +1,EP447928B04,EP447928B04,NYU_BMS_Melanoma_13059_P2,I8,iTru7_204_01,CAGGAGAT,iTru5_17_C,TTGCAACG,NYU_BMS_Melanoma_13059,pool2,EP447928B04 +1,EP587475B04,EP587475B04,NYU_BMS_Melanoma_13059_P2,K8,iTru7_204_02,GTAGCATC,iTru5_18_C,ACCTTCGA,NYU_BMS_Melanoma_13059,pool1,EP587475B04 +1,EP675042B01,EP675042B01,NYU_BMS_Melanoma_13059_P2,M8,iTru7_204_03,TCGTTCGT,iTru5_19_C,CATACGGA,NYU_BMS_Melanoma_13059,pool2,EP675042B01 +1,EP554513B02,EP554513B02,NYU_BMS_Melanoma_13059_P2,O8,iTru7_204_04,GGCAAGTT,iTru5_20_C,GACCGATA,NYU_BMS_Melanoma_13059,pool1,EP554513B02 +1,EP702221B04,EP702221B04,NYU_BMS_Melanoma_13059_P2,A10,iTru7_204_05,ACCATGTG,iTru5_21_C,AAGCTGGT,NYU_BMS_Melanoma_13059,pool2,EP702221B04 +1,AP568787B02,AP568787B02,NYU_BMS_Melanoma_13059_P2,C10,iTru7_204_06,CAACGGAT,iTru5_22_C,ACACCTCA,NYU_BMS_Melanoma_13059,pool1,AP568787B02 +1,EP054632B01,EP054632B01,NYU_BMS_Melanoma_13059_P2,E10,iTru7_204_07,CAATCGAC,iTru5_23_C,CGGAGTAT,NYU_BMS_Melanoma_13059,pool2,EP054632B01 +1,EP121013B01,EP121013B01,NYU_BMS_Melanoma_13059_P2,G10,iTru7_204_08,GTGTTCCT,iTru5_24_C,CTCGACTT,NYU_BMS_Melanoma_13059,pool1,EP121013B01 +1,EP649418A02,EP649418A02,NYU_BMS_Melanoma_13059_P2,I10,iTru7_204_09,AGGAACCT,iTru5_13_D,ATCCACGA,NYU_BMS_Melanoma_13059,pool2,EP649418A02 +1,EP573313B01,EP573313B01,NYU_BMS_Melanoma_13059_P2,K10,iTru7_204_10,ACCTTCTC,iTru5_14_D,ACAGTTCG,NYU_BMS_Melanoma_13059,pool1,EP573313B01 +1,LP154981A01,LP154981A01,NYU_BMS_Melanoma_13059_P2,M10,iTru7_204_11,CCGTAAGA,iTru5_15_D,ACAAGACG,NYU_BMS_Melanoma_13059,pool2,LP154981A01 +1,AP470859B01,AP470859B01,NYU_BMS_Melanoma_13059_P2,O10,iTru7_204_12,ATCGGTGT,iTru5_16_D,ATCGTGGT,NYU_BMS_Melanoma_13059,pool1,AP470859B01 +1,LP154986A01,LP154986A01,NYU_BMS_Melanoma_13059_P2,A12,iTru7_205_01,AGCTCCTA,iTru5_17_D,AGTCAGGT,NYU_BMS_Melanoma_13059,pool2,LP154986A01 +1,AP732307B04,AP732307B04,NYU_BMS_Melanoma_13059_P2,C12,iTru7_205_02,CCTTGATC,iTru5_18_D,CATCAACC,NYU_BMS_Melanoma_13059,pool1,AP732307B04 +1,EP533426B03,EP533426B03,NYU_BMS_Melanoma_13059_P2,E12,iTru7_205_03,CCATTCAC,iTru5_19_D,GGTCACTA,NYU_BMS_Melanoma_13059,pool2,EP533426B03 +1,EP587476B04,EP587476B04,NYU_BMS_Melanoma_13059_P2,G12,iTru7_205_04,GGACAATC,iTru5_20_D,CGGCATTA,NYU_BMS_Melanoma_13059,pool1,EP587476B04 +1,AP696363B02,AP696363B02,NYU_BMS_Melanoma_13059_P2,I12,iTru7_205_05,AAGGCGTT,iTru5_21_D,ACTCGATC,NYU_BMS_Melanoma_13059,pool2,AP696363B02 +1,EP587477B04,EP587477B04,NYU_BMS_Melanoma_13059_P2,K12,iTru7_205_06,GCCATAAC,iTru5_22_D,ATAGGTCC,NYU_BMS_Melanoma_13059,pool1,EP587477B04 +1,SP683466A02,SP683466A02,NYU_BMS_Melanoma_13059_P2,M12,iTru7_205_07,GAAGTTGG,iTru5_23_D,CAGTCACA,NYU_BMS_Melanoma_13059,pool2,SP683466A02 +1,EP554518B04,EP554518B04,NYU_BMS_Melanoma_13059_P2,O12,iTru7_205_08,AGCCAAGT,iTru5_24_D,TAGTGGTG,NYU_BMS_Melanoma_13059,pool1,EP554518B04 +1,EP533429B04,EP533429B04,NYU_BMS_Melanoma_13059_P2,A14,iTru7_205_09,TGACTGAC,iTru5_13_E,CTCCTGAA,NYU_BMS_Melanoma_13059,pool2,EP533429B04 +1,EP431570B01,EP431570B01,NYU_BMS_Melanoma_13059_P2,C14,iTru7_205_10,CACCTGTT,iTru5_14_E,AATCGCTG,NYU_BMS_Melanoma_13059,pool1,EP431570B01 +1,EP202095B04,EP202095B04,NYU_BMS_Melanoma_13059_P2,E14,iTru7_205_11,ATCCGGTA,iTru5_15_E,TGATAGGC,NYU_BMS_Melanoma_13059,pool2,EP202095B04 +1,EP504030B04,EP504030B04,NYU_BMS_Melanoma_13059_P2,G14,iTru7_205_12,ATCTGTCC,iTru5_16_E,ATGCGTCA,NYU_BMS_Melanoma_13059,pool1,EP504030B04 +1,EP207036B01,EP207036B01,NYU_BMS_Melanoma_13059_P2,I14,iTru7_206_01,CCAAGACT,iTru5_17_E,CAGCATAC,NYU_BMS_Melanoma_13059,pool2,EP207036B01 +1,EP393717B01,EP393717B01,NYU_BMS_Melanoma_13059_P2,K14,iTru7_206_02,ATGGCGAA,iTru5_18_E,AAGTGCAG,NYU_BMS_Melanoma_13059,pool1,EP393717B01 +1,SP491898A02,SP491898A02,NYU_BMS_Melanoma_13059_P2,M14,iTru7_206_03,GGTAGTGT,iTru5_19_E,GTATTCCG,NYU_BMS_Melanoma_13059,pool2,SP491898A02 +1,EP484973B04,EP484973B04,NYU_BMS_Melanoma_13059_P2,O14,iTru7_206_04,TCGCTGTT,iTru5_20_E,GTGATCCA,NYU_BMS_Melanoma_13059,pool1,EP484973B04 +1,EP479794B02,EP479794B02,NYU_BMS_Melanoma_13059_P2,A16,iTru7_206_05,AACGTGGA,iTru5_21_E,TATGGCAC,NYU_BMS_Melanoma_13059,pool2,EP479794B02 +1,EP554515B04,EP554515B04,NYU_BMS_Melanoma_13059_P2,C16,iTru7_206_06,AACGACGT,iTru5_22_E,ACCATAGG,NYU_BMS_Melanoma_13059,pool1,EP554515B04 +1,SP631994A04,SP631994A04,NYU_BMS_Melanoma_13059_P2,E16,iTru7_206_07,AACAGGAC,iTru5_23_E,CTCCAATC,NYU_BMS_Melanoma_13059,pool2,SP631994A04 +1,EP921593A04,EP921593A04,NYU_BMS_Melanoma_13059_P2,G16,iTru7_206_08,AAGCGCAT,iTru5_24_E,AGATACGG,NYU_BMS_Melanoma_13059,pool1,EP921593A04 +1,AP787247B04,AP787247B04,NYU_BMS_Melanoma_13059_P2,I16,iTru7_206_09,CACTGACA,iTru5_13_F,TCGATGAC,NYU_BMS_Melanoma_13059,pool2,AP787247B04 +1,EP090129B04,EP090129B04,NYU_BMS_Melanoma_13059_P2,K16,iTru7_206_10,AGGTCACT,iTru5_14_F,CCAACACT,NYU_BMS_Melanoma_13059,pool1,EP090129B04 +1,EP447975B02,EP447975B02,NYU_BMS_Melanoma_13059_P2,M16,iTru7_206_11,GTCACTGT,iTru5_15_F,CTTCACTG,NYU_BMS_Melanoma_13059,pool2,EP447975B02 +1,EP212214B01,EP212214B01,NYU_BMS_Melanoma_13059_P2,O16,iTru7_206_12,ATGCCAAC,iTru5_16_F,CGATGTTC,NYU_BMS_Melanoma_13059,pool1,EP212214B01 +1,EP410042B01,EP410042B01,NYU_BMS_Melanoma_13059_P2,A18,iTru7_207_01,CACGTTGT,iTru5_17_F,ACCGGTTA,NYU_BMS_Melanoma_13059,pool2,EP410042B01 +1,SP404409A02,SP404409A02,NYU_BMS_Melanoma_13059_P2,C18,iTru7_207_02,TATTCCGG,iTru5_18_F,CTTACAGC,NYU_BMS_Melanoma_13059,pool1,SP404409A02 +1,SP247340A04,SP247340A04,NYU_BMS_Melanoma_13059_P2,E18,iTru7_207_03,TGCTTCCA,iTru5_19_F,TGGCTCTT,NYU_BMS_Melanoma_13059,pool2,SP247340A04 +1,AP029018B01,AP029018B01,NYU_BMS_Melanoma_13059_P2,G18,iTru7_207_04,GTCTAGGT,iTru5_20_F,AAGACCGT,NYU_BMS_Melanoma_13059,pool1,AP029018B01 +1,EP872341A01,EP872341A01,NYU_BMS_Melanoma_13059_P2,I18,iTru7_207_05,GTTCAACC,iTru5_21_F,GGACATCA,NYU_BMS_Melanoma_13059,pool2,EP872341A01 +1,AP062219B03,AP062219B03,NYU_BMS_Melanoma_13059_P2,K18,iTru7_207_06,CGCAATCT,iTru5_22_F,TTGGTGCA,NYU_BMS_Melanoma_13059,pool1,AP062219B03 +1,EP790020A02,EP790020A02,NYU_BMS_Melanoma_13059_P2,M18,iTru7_207_07,TTAAGCGG,iTru5_23_F,AAGCGTTC,NYU_BMS_Melanoma_13059,pool2,EP790020A02 +1,EP808112A04,EP808112A04,NYU_BMS_Melanoma_13059_P2,O18,iTru7_207_08,TGCTTGGT,iTru5_24_F,ACTCTCCA,NYU_BMS_Melanoma_13059,pool1,EP808112A04 +1,SP404403A02,SP404403A02,NYU_BMS_Melanoma_13059_P2,A20,iTru7_207_09,ACACACTC,iTru5_13_G,GAACCTTC,NYU_BMS_Melanoma_13059,pool2,SP404403A02 +1,EP073160B01,EP073160B01,NYU_BMS_Melanoma_13059_P2,C20,iTru7_207_10,CCACTTCT,iTru5_14_G,GGAACATG,NYU_BMS_Melanoma_13059,pool1,EP073160B01 +1,EP012991B03,EP012991B03,NYU_BMS_Melanoma_13059_P2,E20,iTru7_207_11,TTGGTCTC,iTru5_15_G,GCCTATGT,NYU_BMS_Melanoma_13059,pool2,EP012991B03 +1,SP317297A02,SP317297A02,NYU_BMS_Melanoma_13059_P2,G20,iTru7_207_12,CTCATCAG,iTru5_16_G,CCGTAACT,NYU_BMS_Melanoma_13059,pool1,SP317297A02 +1,EP656055A04,EP656055A04,NYU_BMS_Melanoma_13059_P2,I20,iTru7_208_01,ATGACGTC,iTru5_17_G,CGGATCAA,NYU_BMS_Melanoma_13059,pool2,EP656055A04 +1,EP649623A01,EP649623A01,NYU_BMS_Melanoma_13059_P2,K20,iTru7_208_02,AACCTTGG,iTru5_18_G,CCACATTG,NYU_BMS_Melanoma_13059,pool1,EP649623A01 +1,EP790019A01,EP790019A01,NYU_BMS_Melanoma_13059_P2,M20,iTru7_208_03,GTCTTGCA,iTru5_19_G,CTCTATCG,NYU_BMS_Melanoma_13059,pool2,EP790019A01 +1,SP257519A04,SP257519A04,NYU_BMS_Melanoma_13059_P2,O20,iTru7_208_04,CAAGTGCA,iTru5_20_G,TGTGTCAG,NYU_BMS_Melanoma_13059,pool1,SP257519A04 +1,EP808104A01,EP808104A01,NYU_BMS_Melanoma_13059_P2,A22,iTru7_208_05,TCCGAGTT,iTru5_21_G,CGCAACTA,NYU_BMS_Melanoma_13059,pool2,EP808104A01 +1,EP808106A01,EP808106A01,NYU_BMS_Melanoma_13059_P2,C22,iTru7_208_06,ACCTAAGG,iTru5_22_G,GATCAGAC,NYU_BMS_Melanoma_13059,pool1,EP808106A01 +1,SP231629A02,SP231629A02,NYU_BMS_Melanoma_13059_P2,E22,iTru7_208_07,TTGGACGT,iTru5_23_G,ATTCCGCT,NYU_BMS_Melanoma_13059,pool2,SP231629A02 +1,EP675044A01,EP675044A01,NYU_BMS_Melanoma_13059_P2,G22,iTru7_208_08,GATAGCGA,iTru5_24_G,ATCCTTCC,NYU_BMS_Melanoma_13059,pool1,EP675044A01 +1,EP657260A01,EP657260A01,NYU_BMS_Melanoma_13059_P2,I22,iTru7_208_09,TTGGTGAG,iTru5_13_H,GCTTCACA,NYU_BMS_Melanoma_13059,pool2,EP657260A01 +1,EP808110A04,EP808110A04,NYU_BMS_Melanoma_13059_P2,K22,iTru7_208_10,AACTGGTG,iTru5_14_H,CTTCGGTT,NYU_BMS_Melanoma_13059,pool1,EP808110A04 +1,AP032413B04,AP032413B04,NYU_BMS_Melanoma_13059_P2,M22,iTru7_208_11,TAGCCGAA,iTru5_15_H,CATGGATC,NYU_BMS_Melanoma_13059,pool2,AP032413B04 +1,EP843906A04,EP843906A04,NYU_BMS_Melanoma_13059_P2,O22,iTru7_208_12,TGCGAACT,iTru5_16_H,GTCAACAG,NYU_BMS_Melanoma_13059,pool1,EP843906A04 +1,AP173305B04,AP173305B04,NYU_BMS_Melanoma_13059_P2,A24,iTru7_209_01,GACTTAGG,iTru5_17_H,AATTCCGG,NYU_BMS_Melanoma_13059,pool2,AP173305B04 +1,SP231628A02,SP231628A02,NYU_BMS_Melanoma_13059_P2,C24,iTru7_209_02,ACACCAGT,iTru5_18_H,GGCGAATA,NYU_BMS_Melanoma_13059,pool1,SP231628A02 +1,AP173301B04,AP173301B04,NYU_BMS_Melanoma_13059_P2,E24,iTru7_209_03,CCTGATTG,iTru5_19_H,AGGAGGTT,NYU_BMS_Melanoma_13059,pool2,AP173301B04 +1,SP404405A02,SP404405A02,NYU_BMS_Melanoma_13059_P2,G24,iTru7_209_04,TTGTGTGC,iTru5_20_H,ACTCTGAG,NYU_BMS_Melanoma_13059,pool1,SP404405A02 +1,EP649653A04,EP649653A04,NYU_BMS_Melanoma_13059_P2,I24,iTru7_209_05,TACCACAG,iTru5_21_H,GCCTTCTT,NYU_BMS_Melanoma_13059,pool2,EP649653A04 +1,EP718687A04,EP718687A04,NYU_BMS_Melanoma_13059_P2,K24,iTru7_209_06,ATTCGAGG,iTru5_22_H,TGGACCAT,NYU_BMS_Melanoma_13059,pool1,EP718687A04 +1,AP905750A02,AP905750A02,NYU_BMS_Melanoma_13059_P2,M24,iTru7_209_07,GCACGTAA,iTru5_23_H,GCATAGTC,NYU_BMS_Melanoma_13059,pool2,AP905750A02 +1,EP738468A01,EP738468A01,NYU_BMS_Melanoma_13059_P2,O24,iTru7_209_08,GTGTGACA,iTru5_24_H,TACACACG,NYU_BMS_Melanoma_13059,pool1,EP738468A01 +1,C6,C6,NYU_BMS_Melanoma_13059_P3,B1,iTru7_209_09,CTGGTTCT,iTru5_101_A,AACAACCG,NYU_BMS_Melanoma_13059,pool2,C6 +1,EP890157A02,EP890157A02,NYU_BMS_Melanoma_13059_P3,D1,iTru7_209_10,ACTGTGTC,iTru5_102_A,AAGCCTGA,NYU_BMS_Melanoma_13059,pool1,EP890157A02 +1,SP353893A02,SP353893A02,NYU_BMS_Melanoma_13059_P3,F1,iTru7_209_11,CCATACGT,iTru5_103_A,AAGGACCA,NYU_BMS_Melanoma_13059,pool2,SP353893A02 +1,EP944059A02,EP944059A02,NYU_BMS_Melanoma_13059_P3,H1,iTru7_209_12,GGTACTAC,iTru5_104_A,ACAACGTG,NYU_BMS_Melanoma_13059,pool1,EP944059A02 +1,EP970005A01,EP970005A01,NYU_BMS_Melanoma_13059_P3,J1,iTru7_210_01,CAGTCCAA,iTru5_105_A,ACGAACGA,NYU_BMS_Melanoma_13059,pool2,EP970005A01 +1,EP927461A04,EP927461A04,NYU_BMS_Melanoma_13059_P3,L1,iTru7_210_02,TCGTAGTC,iTru5_106_A,ACGTCCAA,NYU_BMS_Melanoma_13059,pool1,EP927461A04 +1,EP808111A03,EP808111A03,NYU_BMS_Melanoma_13059_P3,N1,iTru7_210_03,TCGAGTGA,iTru5_107_A,ACTGGTGT,NYU_BMS_Melanoma_13059,pool2,EP808111A03 +1,EP927459A04,EP927459A04,NYU_BMS_Melanoma_13059_P3,P1,iTru7_210_04,TGTAGCCA,iTru5_108_A,AGATCGTC,NYU_BMS_Melanoma_13059,pool1,EP927459A04 +1,SP317293A02,SP317293A02,NYU_BMS_Melanoma_13059_P3,B3,iTru7_210_05,TGCAGGTA,iTru5_109_A,AGCGAGAT,NYU_BMS_Melanoma_13059,pool2,SP317293A02 +1,SP235186A04,SP235186A04,NYU_BMS_Melanoma_13059_P3,D3,iTru7_210_06,CTAGGTGA,iTru5_110_A,AGGATAGC,NYU_BMS_Melanoma_13059,pool1,SP235186A04 +1,SP399724A04,SP399724A04,NYU_BMS_Melanoma_13059_P3,F3,iTru7_210_07,CTCCATGT,iTru5_111_A,AGGTGTTG,NYU_BMS_Melanoma_13059,pool2,SP399724A04 +1,EP738469A01,EP738469A01,NYU_BMS_Melanoma_13059_P3,H3,iTru7_210_08,CTTACAGC,iTru5_112_A,AGTCTTGG,NYU_BMS_Melanoma_13059,pool1,EP738469A01 +1,SP284095A03,SP284095A03,NYU_BMS_Melanoma_13059_P3,J3,iTru7_210_09,CGTATTCG,iTru5_101_B,GGTTGGTA,NYU_BMS_Melanoma_13059,pool2,SP284095A03 +1,C5,C5,NYU_BMS_Melanoma_13059_P3,L3,iTru7_210_10,ATTCTGGC,iTru5_102_B,GGAGGAAT,NYU_BMS_Melanoma_13059,pool1,C5 +1,EP337325B04,EP337325B04,NYU_BMS_Melanoma_13059_P3,N3,iTru7_210_11,TACCAGGA,iTru5_103_B,GTAAGGTG,NYU_BMS_Melanoma_13059,pool2,EP337325B04 +1,EP759450A04,EP759450A04,NYU_BMS_Melanoma_13059_P3,P3,iTru7_210_12,TACATCGG,iTru5_104_B,GGTGTACA,NYU_BMS_Melanoma_13059,pool1,EP759450A04 +1,BLANK3_3A,BLANK3.3A,NYU_BMS_Melanoma_13059_P3,B5,iTru7_301_01,GTGGTGTT,iTru5_105_B,GGATGTAG,NYU_BMS_Melanoma_13059,pool2,BLANK3.3A +1,BLANK3_3B,BLANK3.3B,NYU_BMS_Melanoma_13059_P3,D5,iTru7_301_02,CGCATGAT,iTru5_106_B,GTCCTGTT,NYU_BMS_Melanoma_13059,pool1,BLANK3.3B +1,BLANK3_3C,BLANK3.3C,NYU_BMS_Melanoma_13059_P3,F5,iTru7_301_03,AGTCGACA,iTru5_107_B,GTACCACA,NYU_BMS_Melanoma_13059,pool2,BLANK3.3C +1,BLANK3_3D,BLANK3.3D,NYU_BMS_Melanoma_13059_P3,H5,iTru7_301_04,GTGAGCTT,iTru5_108_B,GATCTCAG,NYU_BMS_Melanoma_13059,pool1,BLANK3.3D +1,BLANK3_3E,BLANK3.3E,NYU_BMS_Melanoma_13059_P3,J5,iTru7_301_05,GACATTCC,iTru5_109_B,GAGCTCTA,NYU_BMS_Melanoma_13059,pool2,BLANK3.3E +1,BLANK3_3F,BLANK3.3F,NYU_BMS_Melanoma_13059_P3,L5,iTru7_301_06,AGTTCGTC,iTru5_110_B,TACTAGCG,NYU_BMS_Melanoma_13059,pool1,BLANK3.3F +1,BLANK3_3G,BLANK3.3G,NYU_BMS_Melanoma_13059_P3,N5,iTru7_301_07,TAATGCCG,iTru5_111_B,GCACACAA,NYU_BMS_Melanoma_13059,pool2,BLANK3.3G +1,BLANK3_3H,BLANK3.3H,NYU_BMS_Melanoma_13059_P3,P5,iTru7_301_08,CGACCATT,iTru5_112_B,GAATCACC,NYU_BMS_Melanoma_13059,pool1,BLANK3.3H +1,AP006367B02,AP006367B02,NYU_BMS_Melanoma_13059_P3,B7,iTru7_301_09,CTGAAGCT,iTru5_101_C,AACAGCGA,NYU_BMS_Melanoma_13059,pool2,AP006367B02 +1,EP929277A02,EP929277A02,NYU_BMS_Melanoma_13059_P3,D7,iTru7_301_10,TTGAGGCA,iTru5_102_C,AAGCGACT,NYU_BMS_Melanoma_13059,pool1,EP929277A02 +1,AP324642B04,AP324642B04,NYU_BMS_Melanoma_13059_P3,F7,iTru7_301_11,GATCGAGT,iTru5_103_C,AAGGCGTA,NYU_BMS_Melanoma_13059,pool2,AP324642B04 +1,EP786631A04,EP786631A04,NYU_BMS_Melanoma_13059_P3,H7,iTru7_301_12,ATACTCCG,iTru5_104_C,ACACCGAT,NYU_BMS_Melanoma_13059,pool1,EP786631A04 +1,EP657385A04,EP657385A04,NYU_BMS_Melanoma_13059_P3,J7,iTru7_302_01,AAGTCCGT,iTru5_105_C,ACGAATCC,NYU_BMS_Melanoma_13059,pool2,EP657385A04 +1,SP235189A01,SP235189A01,NYU_BMS_Melanoma_13059_P3,L7,iTru7_302_02,TAGCGTCT,iTru5_106_C,ACTACGGT,NYU_BMS_Melanoma_13059,pool1,SP235189A01 +1,EP448041B04,EP448041B04,NYU_BMS_Melanoma_13059_P3,N7,iTru7_302_03,TGACGCAT,iTru5_107_C,AGAAGCCT,NYU_BMS_Melanoma_13059,pool2,EP448041B04 +1,SP231631A02,SP231631A02,NYU_BMS_Melanoma_13059_P3,P7,iTru7_302_04,AGCGTGTT,iTru5_108_C,AGATTGCG,NYU_BMS_Melanoma_13059,pool1,SP231631A02 +1,SP280481A02,SP280481A02,NYU_BMS_Melanoma_13059_P3,B9,iTru7_302_05,TGCACCAA,iTru5_109_C,AGCGTGTA,NYU_BMS_Melanoma_13059,pool2,SP280481A02 +1,AP032412B04,AP032412B04,NYU_BMS_Melanoma_13059_P3,D9,iTru7_302_06,ATCACACG,iTru5_110_C,AGGCTGAA,NYU_BMS_Melanoma_13059,pool1,AP032412B04 +1,EP649737A03,EP649737A03,NYU_BMS_Melanoma_13059_P3,F9,iTru7_302_07,ATGCCTGT,iTru5_111_C,AGGTTCCT,NYU_BMS_Melanoma_13059,pool2,EP649737A03 +1,AP967057A04,AP967057A04,NYU_BMS_Melanoma_13059_P3,H9,iTru7_302_08,ACCTGACT,iTru5_112_C,AGTGACCT,NYU_BMS_Melanoma_13059,pool1,AP967057A04 +1,EP876243A04,EP876243A04,NYU_BMS_Melanoma_13059_P3,J9,iTru7_302_09,GCTTCGAA,iTru5_101_D,GGTTAGCT,NYU_BMS_Melanoma_13059,pool2,EP876243A04 +1,SP229387A04,SP229387A04,NYU_BMS_Melanoma_13059_P3,L9,iTru7_302_10,CGGTCATA,iTru5_102_D,GTAGCGTA,NYU_BMS_Melanoma_13059,pool1,SP229387A04 +1,EP667743A04,EP667743A04,NYU_BMS_Melanoma_13059_P3,N9,iTru7_302_11,GTTAGACG,iTru5_103_D,GGACTACT,NYU_BMS_Melanoma_13059,pool2,EP667743A04 +1,SP246941A01,SP246941A01,NYU_BMS_Melanoma_13059_P3,P9,iTru7_302_12,TCTAACGC,iTru5_104_D,TGGTTCGA,NYU_BMS_Melanoma_13059,pool1,SP246941A01 +1,AP745799A04,AP745799A04,NYU_BMS_Melanoma_13059_P3,B11,iTru7_303_01,ATAGCGGT,iTru5_105_D,GGAGTCTT,NYU_BMS_Melanoma_13059,pool2,AP745799A04 +1,SP205732A02,SP205732A02,NYU_BMS_Melanoma_13059_P3,D11,iTru7_303_02,GGACCTAT,iTru5_106_D,GGATTCAC,NYU_BMS_Melanoma_13059,pool1,SP205732A02 +1,SP230382A04,SP230382A04,NYU_BMS_Melanoma_13059_P3,F11,iTru7_303_03,CGATGCTT,iTru5_107_D,TCGGATTC,NYU_BMS_Melanoma_13059,pool2,SP230382A04 +1,SP230380A02,SP230380A02,NYU_BMS_Melanoma_13059_P3,H11,iTru7_303_04,GAGCTTGT,iTru5_108_D,GAGCAATC,NYU_BMS_Melanoma_13059,pool1,SP230380A02 +1,SP230381A01,SP230381A01,NYU_BMS_Melanoma_13059_P3,J11,iTru7_303_05,GTGAAGTG,iTru5_109_D,GATCCACT,NYU_BMS_Melanoma_13059,pool2,SP230381A01 +1,SP205754A01,SP205754A01,NYU_BMS_Melanoma_13059_P3,L11,iTru7_303_06,GAGTGGTT,iTru5_110_D,GAAGACTG,NYU_BMS_Melanoma_13059,pool1,SP205754A01 +1,EP606662B04,EP606662B04,NYU_BMS_Melanoma_13059_P3,N11,iTru7_303_07,TGATACGC,iTru5_111_D,GCCACTTA,NYU_BMS_Melanoma_13059,pool2,EP606662B04 +1,AP780167B02,AP780167B02,NYU_BMS_Melanoma_13059_P3,P11,iTru7_303_08,AGCAGATG,iTru5_112_D,TCCATTGC,NYU_BMS_Melanoma_13059,pool1,AP780167B02 +1,EP447927B04,EP447927B04,NYU_BMS_Melanoma_13059_P3,B13,iTru7_303_09,CCAGTGTT,iTru5_101_E,AACAGTCC,NYU_BMS_Melanoma_13059,pool2,EP447927B04 +1,C18,C18,NYU_BMS_Melanoma_13059_P3,D13,iTru7_303_10,ATTCCTCC,iTru5_102_E,AAGCTCAC,NYU_BMS_Melanoma_13059,pool1,C18 +1,LP191039A01,LP191039A01,NYU_BMS_Melanoma_13059_P3,F13,iTru7_303_11,CTAACTCG,iTru5_103_E,AAGTCCTC,NYU_BMS_Melanoma_13059,pool2,LP191039A01 +1,EP606663B04,EP606663B04,NYU_BMS_Melanoma_13059_P3,H13,iTru7_303_12,GATGAGAC,iTru5_104_E,ACACTCTG,NYU_BMS_Melanoma_13059,pool1,EP606663B04 +1,EP573296B01,EP573296B01,NYU_BMS_Melanoma_13059_P3,J13,iTru7_304_01,TCAGGCTT,iTru5_105_E,ACGGTACA,NYU_BMS_Melanoma_13059,pool2,EP573296B01 +1,EP447926B04,EP447926B04,NYU_BMS_Melanoma_13059_P3,L13,iTru7_304_02,GTTCTCGT,iTru5_106_E,ACTCCTAC,NYU_BMS_Melanoma_13059,pool1,EP447926B04 +1,LP127767A01,LP127767A01,NYU_BMS_Melanoma_13059_P3,N13,iTru7_304_03,ATCGATCG,iTru5_107_E,AGAGGATG,NYU_BMS_Melanoma_13059,pool2,LP127767A01 +1,EP479266B04,EP479266B04,NYU_BMS_Melanoma_13059_P3,P13,iTru7_304_04,CCTCAGTT,iTru5_108_E,AGCCGTAA,NYU_BMS_Melanoma_13059,pool1,EP479266B04 +1,LP128543A01,LP128543A01,NYU_BMS_Melanoma_13059_P3,B15,iTru7_304_05,ACTGCTAG,iTru5_109_E,AGCTTCAG,NYU_BMS_Melanoma_13059,pool2,LP128543A01 +1,EP479270B03,EP479270B03,NYU_BMS_Melanoma_13059_P3,D15,iTru7_304_06,TCCGTGAA,iTru5_110_E,AGGTAGGA,NYU_BMS_Melanoma_13059,pool1,EP479270B03 +1,EP921594A04,EP921594A04,NYU_BMS_Melanoma_13059_P3,F15,iTru7_304_07,GGATTCGT,iTru5_111_E,AGTACACG,NYU_BMS_Melanoma_13059,pool2,EP921594A04 +1,EP554501B04,EP554501B04,NYU_BMS_Melanoma_13059_P3,H15,iTru7_304_08,GGTCAGAT,iTru5_112_E,AGTGCATC,NYU_BMS_Melanoma_13059,pool1,EP554501B04 +1,EP542577B04,EP542577B04,NYU_BMS_Melanoma_13059_P3,J15,iTru7_304_09,TCGTGGAT,iTru5_101_F,TTGGACTG,NYU_BMS_Melanoma_13059,pool2,EP542577B04 +1,EP487995B04,EP487995B04,NYU_BMS_Melanoma_13059_P3,L15,iTru7_304_10,CGTGTGTA,iTru5_102_F,GTCGATTG,NYU_BMS_Melanoma_13059,pool1,EP487995B04 +1,EP542578B04,EP542578B-4,NYU_BMS_Melanoma_13059_P3,N15,iTru7_304_11,GTGTCTGA,iTru5_103_F,GGCATTCT,NYU_BMS_Melanoma_13059,pool2,EP542578B-4 +1,EP573310B01,EP573310B01,NYU_BMS_Melanoma_13059_P3,P15,iTru7_304_12,GAATCGTG,iTru5_104_F,TGGTATCC,NYU_BMS_Melanoma_13059,pool1,EP573310B01 +1,EP244366B01,EP244366B01,NYU_BMS_Melanoma_13059_P3,B17,iTru7_305_01,GCGATAGT,iTru5_105_F,GGCAAGTT,NYU_BMS_Melanoma_13059,pool2,EP244366B01 +1,EP533389B03,EP533389B03,NYU_BMS_Melanoma_13059_P3,D17,iTru7_305_02,GGCTATTG,iTru5_106_F,GTCTGAGT,NYU_BMS_Melanoma_13059,pool1,EP533389B03 +1,EP244360B01,EP244360B01,NYU_BMS_Melanoma_13059_P3,F17,iTru7_305_03,AGTTACGG,iTru5_107_F,TCTACGCA,NYU_BMS_Melanoma_13059,pool2,EP244360B01 +1,AP911328B01,AP911328B01,NYU_BMS_Melanoma_13059_P3,H17,iTru7_305_04,CGTACGAA,iTru5_108_F,GAGGCATT,NYU_BMS_Melanoma_13059,pool1,AP911328B01 +1,AP481403B02,AP481403B02,NYU_BMS_Melanoma_13059_P3,J17,iTru7_305_05,ACCACGAT,iTru5_109_F,GCTAAGGA,NYU_BMS_Melanoma_13059,pool2,AP481403B02 +1,22_001_801_552_503_00,22.001.801.552.503.00,NYU_BMS_Melanoma_13059_P3,L17,iTru7_305_06,GATTACCG,iTru5_110_F,GCCAGAAT,NYU_BMS_Melanoma_13059,pool1,22_001_801_552_503_00 +1,EP372981B04,EP372981B04,NYU_BMS_Melanoma_13059_P3,N17,iTru7_305_07,GAGATACG,iTru5_111_F,TAAGTGGC,NYU_BMS_Melanoma_13059,pool2,EP372981B04 +1,EP447929B04,EP447929B04,NYU_BMS_Melanoma_13059_P3,P17,iTru7_305_08,CGACGTTA,iTru5_112_F,GCAATGAG,NYU_BMS_Melanoma_13059,pool1,EP447929B04 +1,SP573849A04,SP573849A04,NYU_BMS_Melanoma_13059_P3,B19,iTru7_305_09,GAGATGTC,iTru5_101_G,AACTGAGG,NYU_BMS_Melanoma_13059,pool2,SP573849A04 +1,SP577399A02,SP577399A02,NYU_BMS_Melanoma_13059_P3,D19,iTru7_305_10,GATTGGAG,iTru5_102_G,AAGGAAGG,NYU_BMS_Melanoma_13059,pool1,SP577399A02 +1,EP606656B03,EP606656B03,NYU_BMS_Melanoma_13059_P3,F19,iTru7_305_11,GCAATTCG,iTru5_103_G,AATGGTCG,NYU_BMS_Melanoma_13059,pool2,EP606656B03 +1,LP166715A01,LP166715A01,NYU_BMS_Melanoma_13059_P3,H19,iTru7_305_12,CGTCAATG,iTru5_104_G,ACAGCAAG,NYU_BMS_Melanoma_13059,pool1,LP166715A01 +1,AP668628B04,AP668628B04,NYU_BMS_Melanoma_13059_P3,J19,iTru7_401_01,ATGCACGA,iTru5_105_G,ACGTATGG,NYU_BMS_Melanoma_13059,pool2,AP668628B04 +1,C14,C14,NYU_BMS_Melanoma_13059_P3,L19,iTru7_401_02,ATCGCCAT,iTru5_106_G,ACTGCACT,NYU_BMS_Melanoma_13059,pool1,C14 +1,EP446610B02,EP446610B02,NYU_BMS_Melanoma_13059_P3,N19,iTru7_401_03,TCTCGCAA,iTru5_107_G,AGAGTCCA,NYU_BMS_Melanoma_13059,pool2,EP446610B02 +1,EP339061B02,EP339061B02,NYU_BMS_Melanoma_13059_P3,P19,iTru7_401_04,ACGACAGA,iTru5_108_G,AGCCTATC,NYU_BMS_Melanoma_13059,pool1,EP339061B02 +1,SP681591A04,SP681591A04,NYU_BMS_Melanoma_13059_P3,B21,iTru7_401_05,TTACGGCT,iTru5_109_G,AGGAACAC,NYU_BMS_Melanoma_13059,pool2,SP681591A04 +1,EP393712B02,EP393712B02,NYU_BMS_Melanoma_13059_P3,D21,iTru7_401_06,GAGGACTT,iTru5_110_G,AGGTCTGT,NYU_BMS_Melanoma_13059,pool1,EP393712B02 +1,EP410041B01,EP410041B01,NYU_BMS_Melanoma_13059_P3,F21,iTru7_401_07,GGCATACT,iTru5_111_G,AGTATGCC,NYU_BMS_Melanoma_13059,pool2,EP410041B01 +1,SP453872A01,SP453872A01,NYU_BMS_Melanoma_13059_P3,H21,iTru7_401_08,CGTAGGTT,iTru5_112_G,AGTTCGCA,NYU_BMS_Melanoma_13059,pool1,SP453872A01 +1,22_001_710_503_791_00,22.001.710.503.791.00,NYU_BMS_Melanoma_13059_P3,J21,iTru7_401_09,ATATGCGC,iTru5_101_H,TGGAAGCA,NYU_BMS_Melanoma_13059,pool2,22_001_710_503_791_00 +1,LP128540A01,LP128540A01,NYU_BMS_Melanoma_13059_P3,L21,iTru7_401_10,GGATGTAG,iTru5_102_H,GTCAGTCA,NYU_BMS_Melanoma_13059,pool1,LP128540A01 +1,EP339053B02,EP339053B02,NYU_BMS_Melanoma_13059_P3,N21,iTru7_401_11,CCTGTCAT,iTru5_103_H,GTAACCGA,NYU_BMS_Melanoma_13059,pool2,EP339053B02 +1,EP617443B01,EP617443B01,NYU_BMS_Melanoma_13059_P3,P21,iTru7_401_12,TGCTCATG,iTru5_104_H,GTTATGGC,NYU_BMS_Melanoma_13059,pool1,EP617443B01 +1,EP190307B01,EP190307B01,NYU_BMS_Melanoma_13059_P3,B23,iTru7_402_01,TGAAGACG,iTru5_105_H,GTAAGCAC,NYU_BMS_Melanoma_13059,pool2,EP190307B01 +1,AP795068B04,AP795068B04,NYU_BMS_Melanoma_13059_P3,D23,iTru7_402_02,GTTACGCA,iTru5_106_H,GGAATGTC,NYU_BMS_Melanoma_13059,pool1,AP795068B04 +1,LP128541A01,LP128541A01,NYU_BMS_Melanoma_13059_P3,F23,iTru7_402_03,ACTCAGAC,iTru5_107_H,GAGAAGGT,NYU_BMS_Melanoma_13059,pool2,LP128541A01 +1,EP584756B04,EP584756B04,NYU_BMS_Melanoma_13059_P3,H23,iTru7_402_04,GTCCACAT,iTru5_108_H,GAGTAGAG,NYU_BMS_Melanoma_13059,pool1,EP584756B04 +1,SP284096A02,SP284096A02,NYU_BMS_Melanoma_13059_P3,J23,iTru7_402_05,CGCTAGTA,iTru5_109_H,GCATTGGT,NYU_BMS_Melanoma_13059,pool2,SP284096A02 +1,EP431562B04,EP431562B04,NYU_BMS_Melanoma_13059_P3,L23,iTru7_402_06,GAATCCGA,iTru5_110_H,TCCAGCAA,NYU_BMS_Melanoma_13059,pool1,EP431562B04 +1,EP685640B01,EP685640B01,NYU_BMS_Melanoma_13059_P3,N23,iTru7_402_07,GAGACGAT,iTru5_111_H,GAATCCGT,NYU_BMS_Melanoma_13059,pool2,EP685640B01 +1,EP339059B02,EP339059B02,NYU_BMS_Melanoma_13059_P3,P23,iTru7_402_08,TAAGTGGC,iTru5_112_H,TACATCGG,NYU_BMS_Melanoma_13059,pool1,EP339059B02 +1,EP431575B01,EP431575B01,NYU_BMS_Melanoma_13059_P4,B2,iTru7_402_09,ACTGAGGT,iTru5_113_A,ATAACGCC,NYU_BMS_Melanoma_13059,pool2,EP431575B01 +1,EP379938B01,EP379938B01,NYU_BMS_Melanoma_13059_P4,D2,iTru7_402_10,TGTACCGT,iTru5_114_A,ATGACAGG,NYU_BMS_Melanoma_13059,pool1,EP379938B01 +1,EP529635B02,EP529635B02,NYU_BMS_Melanoma_13059_P4,F2,iTru7_402_11,AGCAAGCA,iTru5_115_A,CAACACAG,NYU_BMS_Melanoma_13059,pool2,EP529635B02 +1,EP554506B04,EP554506B04,NYU_BMS_Melanoma_13059_P4,H2,iTru7_402_12,TCTCGTGT,iTru5_116_A,CACCAGTT,NYU_BMS_Melanoma_13059,pool1,EP554506B04 +1,EP455757B04,EP455757B04,NYU_BMS_Melanoma_13059_P4,J2,iTru7_115_01,CAAGGTCT,iTru5_117_A,CAGAGTGA,NYU_BMS_Melanoma_13059,pool2,EP455757B04 +1,SP491900A02,SP491900A02,NYU_BMS_Melanoma_13059_P4,L2,iTru7_115_02,TAGACGTG,iTru5_118_A,CCGATGTA,NYU_BMS_Melanoma_13059,pool1,SP491900A02 +1,LP196272A01,LP196272A01,NYU_BMS_Melanoma_13059_P4,N2,iTru7_115_03,TGAGCTAG,iTru5_119_A,CCTTCCAT,NYU_BMS_Melanoma_13059,pool2,LP196272A01 +1,SP704319A04,SP704319A04,NYU_BMS_Melanoma_13059_P4,P2,iTru7_115_04,CTGACACA,iTru5_120_A,CGGTAATC,NYU_BMS_Melanoma_13059,pool1,SP704319A04 +1,EP617441B01,EP617441B01,NYU_BMS_Melanoma_13059_P4,B4,iTru7_115_05,ACGGTCTT,iTru5_121_A,CTAGGTTG,NYU_BMS_Melanoma_13059,pool2,EP617441B01 +1,AP687591B04,AP687591B04,NYU_BMS_Melanoma_13059_P4,D4,iTru7_115_06,GCTGTTGT,iTru5_122_A,CTCGGTAA,NYU_BMS_Melanoma_13059,pool1,AP687591B04 +1,SP640978A02,SP640978A02,NYU_BMS_Melanoma_13059_P4,F4,iTru7_115_07,CACTAGCT,iTru5_123_A,CTGTGGTA,NYU_BMS_Melanoma_13059,pool2,SP640978A02 +1,EP981129A02,EP981129A02,NYU_BMS_Melanoma_13059_P4,H4,iTru7_115_08,TGGTACAG,iTru5_124_A,GTACGATC,NYU_BMS_Melanoma_13059,pool1,EP981129A02 +1,EP455763B04,EP455763B04,NYU_BMS_Melanoma_13059_P4,J4,iTru7_115_09,AGCACTTC,iTru5_113_B,TCTGTCGT,NYU_BMS_Melanoma_13059,pool2,EP455763B04 +1,EP339057B02,EP339057B02,NYU_BMS_Melanoma_13059_P4,L4,iTru7_115_10,GCATACAG,iTru5_114_B,GAATGGCA,NYU_BMS_Melanoma_13059,pool1,EP339057B02 +1,SP491897A02,SP491897A02,NYU_BMS_Melanoma_13059_P4,N4,iTru7_115_11,CTTAGGAC,iTru5_115_B,GTGTGTTC,NYU_BMS_Melanoma_13059,pool2,SP491897A02 +1,EP980752B04,EP980752B04,NYU_BMS_Melanoma_13059_P4,P4,iTru7_211_01,GCTTCTTG,iTru5_116_B,GGTTGAAC,NYU_BMS_Melanoma_13059,pool1,EP980752B04 +1,LP128539A01,LP128539A01,NYU_BMS_Melanoma_13059_P4,B6,iTru7_101_01,ACGTTACC,iTru5_117_B,GGCTCAAT,NYU_BMS_Melanoma_13059,pool2,LP128539A01 +1,EP996831B04,EP996831B04,NYU_BMS_Melanoma_13059_P4,D6,iTru7_101_02,CTGTGTTG,iTru5_118_B,TTCGCCAT,NYU_BMS_Melanoma_13059,pool1,EP996831B04 +1,EP273332B04,EP273332B04,NYU_BMS_Melanoma_13059_P4,F6,iTru7_101_03,TGAGGTGT,iTru5_119_B,GTCCTTGA,NYU_BMS_Melanoma_13059,pool2,EP273332B04 +1,EP483291B04,EP483291B04,NYU_BMS_Melanoma_13059_P4,H6,iTru7_101_04,GATCCATG,iTru5_120_B,TAACGTCG,NYU_BMS_Melanoma_13059,pool1,EP483291B04 +1,EP393715B01,EP393715B01,NYU_BMS_Melanoma_13059_P4,J6,iTru7_101_05,GCCTATCA,iTru5_121_B,GAGACCAA,NYU_BMS_Melanoma_13059,pool2,EP393715B01 +1,EP617440B01,EP617440B01,NYU_BMS_Melanoma_13059_P4,L6,iTru7_101_06,AACAACCG,iTru5_122_B,GATCAAGG,NYU_BMS_Melanoma_13059,pool1,EP617440B01 +1,EP729434A01,EP729434A01,NYU_BMS_Melanoma_13059_P4,N6,iTru7_101_07,ACTCGTTG,iTru5_123_B,GCAACCAT,NYU_BMS_Melanoma_13059,pool2,EP729434A01 +1,SP645141A03,SP645141A03,NYU_BMS_Melanoma_13059_P4,P6,iTru7_101_08,CCTATGGT,iTru5_124_B,AAGGAGAC,NYU_BMS_Melanoma_13059,pool1,SP645141A03 +1,BLANK4_4A,BLANK4.4A,NYU_BMS_Melanoma_13059_P4,B8,iTru7_101_09,TGTACACC,iTru5_113_C,ATCGGAGA,NYU_BMS_Melanoma_13059,pool2,BLANK4.4A +1,BLANK4_4B,BLANK4.4B,NYU_BMS_Melanoma_13059_P4,D8,iTru7_101_10,GTATGCTG,iTru5_114_C,ATGCGCTT,NYU_BMS_Melanoma_13059,pool1,BLANK4.4B +1,BLANK4_4C,BLANK4.4C,NYU_BMS_Melanoma_13059_P4,F8,iTru7_101_11,TGATGTCC,iTru5_115_C,CAACCGTA,NYU_BMS_Melanoma_13059,pool2,BLANK4.4C +1,BLANK4_4D,BLANK4.4D,NYU_BMS_Melanoma_13059_P4,H8,iTru7_101_12,GTCCTTCT,iTru5_116_C,CACTTCAC,NYU_BMS_Melanoma_13059,pool1,BLANK4.4D +1,BLANK4_4E,BLANK4.4E,NYU_BMS_Melanoma_13059_P4,J8,iTru7_102_01,ATAAGGCG,iTru5_117_C,CAGCTAGA,NYU_BMS_Melanoma_13059,pool2,BLANK4.4E +1,BLANK4_4F,BLANK4.4F,NYU_BMS_Melanoma_13059_P4,L8,iTru7_102_02,CTTACCTG,iTru5_118_C,CCGTTATG,NYU_BMS_Melanoma_13059,pool1,BLANK4.4F +1,BLANK4_4G,BLANK4.4G,NYU_BMS_Melanoma_13059_P4,N8,iTru7_102_03,CGTTGCAA,iTru5_119_C,CGAACAAC,NYU_BMS_Melanoma_13059,pool2,BLANK4.4G +1,BLANK4_4H,BLANK4.4H,NYU_BMS_Melanoma_13059_P4,P8,iTru7_102_04,GATTCAGC,iTru5_120_C,CGTAGATG,NYU_BMS_Melanoma_13059,pool1,BLANK4.4H +1,SP232114A04,SP232114A04,NYU_BMS_Melanoma_13059_P4,B10,iTru7_102_05,TCACGTTC,iTru5_121_C,CTATGCCT,NYU_BMS_Melanoma_13059,pool2,SP232114A04 +1,EP393714B01,EP393714B01,NYU_BMS_Melanoma_13059_P4,D10,iTru7_102_06,TGTGCGTT,iTru5_122_C,CTGATGAG,NYU_BMS_Melanoma_13059,pool1,EP393714B01 +1,EP533388B01,EP533388B01,NYU_BMS_Melanoma_13059_P4,F10,iTru7_102_07,TAGTTGCG,iTru5_123_C,CTTCCTTC,NYU_BMS_Melanoma_13059,pool2,EP533388B01 +1,EP724905B01,EP724905B01,NYU_BMS_Melanoma_13059_P4,H10,iTru7_102_08,AAGAGCCA,iTru5_124_C,GTCTCATC,NYU_BMS_Melanoma_13059,pool1,EP724905B01 +1,EP282108B01,EP282108B01,NYU_BMS_Melanoma_13059_P4,J10,iTru7_102_09,ACAGCTCA,iTru5_113_D,GCGCATAT,NYU_BMS_Melanoma_13059,pool2,EP282108B01 +1,EP282107B01,EP282107B01,NYU_BMS_Melanoma_13059_P4,L10,iTru7_102_10,GTTAAGGC,iTru5_114_D,GAAGATCC,NYU_BMS_Melanoma_13059,pool1,EP282107B01 +1,EP001625B01,EP001625B01,NYU_BMS_Melanoma_13059_P4,N10,iTru7_102_11,AAGCCACA,iTru5_115_D,GTTGGCAT,NYU_BMS_Melanoma_13059,pool2,EP001625B01 +1,EP073209B02,EP073209B02,NYU_BMS_Melanoma_13059_P4,P10,iTru7_102_12,ACACGGTT,iTru5_116_D,GTGAATGG,NYU_BMS_Melanoma_13059,pool1,EP073209B02 +1,SP232079A01,SP232079A01,NYU_BMS_Melanoma_13059_P4,B12,iTru7_103_01,CAGCGATT,iTru5_117_D,GTATCGAG,NYU_BMS_Melanoma_13059,pool2,SP232079A01 +1,EP772145A02,EP772145A02,NYU_BMS_Melanoma_13059_P4,D12,iTru7_103_02,TAGTGACC,iTru5_118_D,TGCAAGAC,NYU_BMS_Melanoma_13059,pool1,EP772145A02 +1,AP771472A04,AP771472A04,NYU_BMS_Melanoma_13059_P4,F12,iTru7_103_03,CGAGACTA,iTru5_119_D,GAGTGTGT,NYU_BMS_Melanoma_13059,pool2,AP771472A04 +1,AP223470B01,AP223470B01,NYU_BMS_Melanoma_13059_P4,H12,iTru7_103_04,GACATGGT,iTru5_120_D,TAAGCGCA,NYU_BMS_Melanoma_13059,pool1,AP223470B01 +1,SP404412A02,SP404412A02,NYU_BMS_Melanoma_13059_P4,J12,iTru7_103_05,GCATGTCT,iTru5_121_D,TAGCAGGA,NYU_BMS_Melanoma_13059,pool2,SP404412A02 +1,EP772143A02,EP772143A02,NYU_BMS_Melanoma_13059_P4,L12,iTru7_103_06,ACTCCATC,iTru5_122_D,GACTACGA,NYU_BMS_Melanoma_13059,pool1,EP772143A02 +1,SP408629A01,SP408629A01,NYU_BMS_Melanoma_13059_P4,N12,iTru7_103_07,TGTGACTG,iTru5_123_D,GACGTCAT,NYU_BMS_Melanoma_13059,pool2,SP408629A01 +1,EP749735A07,EP749735A07,NYU_BMS_Melanoma_13059_P4,P12,iTru7_103_08,CGAAGAAC,iTru5_124_D,AAGAGGCA,NYU_BMS_Melanoma_13059,pool1,EP749735A07 +1,EP846485A01,EP846485A01,NYU_BMS_Melanoma_13059_P4,B14,iTru7_103_09,GGTGTCTT,iTru5_113_E,ATCGTCTC,NYU_BMS_Melanoma_13059,pool2,EP846485A01 +1,EP808109A01,EP808109A01,NYU_BMS_Melanoma_13059_P4,D14,iTru7_103_10,AAGAAGGC,iTru5_114_E,ATGGCGAT,NYU_BMS_Melanoma_13059,pool1,EP808109A01 +1,SP416130A04,SP416130A04,NYU_BMS_Melanoma_13059_P4,F14,iTru7_103_11,AGGTTCGA,iTru5_115_E,CAAGAAGC,NYU_BMS_Melanoma_13059,pool2,SP416130A04 +1,EP882752A01,EP882752A01,NYU_BMS_Melanoma_13059_P4,H14,iTru7_103_12,CATGTTCC,iTru5_116_E,CAGAACTG,NYU_BMS_Melanoma_13059,pool1,EP882752A01 +1,AP953594A02,AP953594A02,NYU_BMS_Melanoma_13059_P4,J14,iTru7_104_01,GTGCCATA,iTru5_117_E,CAGGTAAG,NYU_BMS_Melanoma_13059,pool2,AP953594A02 +1,AP046324B02,AP046324B02,NYU_BMS_Melanoma_13059_P4,L14,iTru7_104_02,CCTTGTAG,iTru5_118_E,CCTACCTA,NYU_BMS_Melanoma_13059,pool1,AP046324B02 +1,AP891020A04,AP891020A04,NYU_BMS_Melanoma_13059_P4,N14,iTru7_104_03,GCTGGATT,iTru5_119_E,CGAAGTCA,NYU_BMS_Melanoma_13059,pool2,AP891020A04 +1,EP790023A01,EP790023A01,NYU_BMS_Melanoma_13059_P4,P14,iTru7_104_04,TAACGAGG,iTru5_120_E,CGTCTTCA,NYU_BMS_Melanoma_13059,pool1,EP790023A01 +1,EP657386A01,EP657386A01,NYU_BMS_Melanoma_13059_P4,B16,iTru7_104_05,ATGGTTGC,iTru5_121_E,CTCAAGCT,NYU_BMS_Melanoma_13059,pool2,EP657386A01 +1,EP805337A01,EP805337A01,NYU_BMS_Melanoma_13059_P4,D16,iTru7_104_06,CCTATACC,iTru5_122_E,CTGCCATA,NYU_BMS_Melanoma_13059,pool1,EP805337A01 +1,EP927458A04,EP927458A04,NYU_BMS_Melanoma_13059_P4,F16,iTru7_104_07,TTAGGTCG,iTru5_123_E,CTTGCTAG,NYU_BMS_Melanoma_13059,pool2,EP927458A04 +1,AP173299B04,AP173299B04,NYU_BMS_Melanoma_13059_P4,H16,iTru7_104_08,GCAAGATC,iTru5_124_E,GTCTGCAA,NYU_BMS_Melanoma_13059,pool1,AP173299B04 +1,EP768164A02,EP768164A02,NYU_BMS_Melanoma_13059_P4,J16,iTru7_104_09,AGAGCCTT,iTru5_113_F,GCTACTCT,NYU_BMS_Melanoma_13059,pool2,EP768164A02 +1,EP886422A01,EP886422A01,NYU_BMS_Melanoma_13059_P4,L16,iTru7_104_10,GCAATGGA,iTru5_114_F,TACAGAGC,NYU_BMS_Melanoma_13059,pool1,EP886422A01 +1,AP103463B01,AP103463B01,NYU_BMS_Melanoma_13059_P4,N16,iTru7_104_11,CTGGAGTA,iTru5_115_F,GGTCGTAT,NYU_BMS_Melanoma_13059,pool2,AP103463B01 +1,AP744361A02,AP744361A02,NYU_BMS_Melanoma_13059_P4,P16,iTru7_104_12,GAACATCG,iTru5_116_F,GTCGTTAC,NYU_BMS_Melanoma_13059,pool1,AP744361A02 +1,AP065292B01,AP065292B01,NYU_BMS_Melanoma_13059_P4,B18,iTru7_105_01,GCACAACT,iTru5_117_F,TTCACGGA,NYU_BMS_Melanoma_13059,pool2,AP065292B01 +1,SP257517A04,SP257517A04,NYU_BMS_Melanoma_13059_P4,D18,iTru7_105_02,TTCTCTCG,iTru5_118_F,TGCTTGCT,NYU_BMS_Melanoma_13059,pool1,SP257517A04 +1,EP790021A04,EP790021A04,NYU_BMS_Melanoma_13059_P4,F18,iTru7_105_03,AACGGTCA,iTru5_119_F,TCTTACGG,NYU_BMS_Melanoma_13059,pool2,EP790021A04 +1,EP675075A04,EP675075A04,NYU_BMS_Melanoma_13059_P4,H18,iTru7_105_04,ACAGACCT,iTru5_120_F,TCCTCATG,NYU_BMS_Melanoma_13059,pool1,EP675075A04 +1,SP388683A02,SP388683A02,NYU_BMS_Melanoma_13059_P4,J18,iTru7_105_05,TCTCTTCC,iTru5_121_F,GATGTCGA,NYU_BMS_Melanoma_13059,pool2,SP388683A02 +1,SP232309A01,SP232309A01,NYU_BMS_Melanoma_13059_P4,L18,iTru7_105_06,AGTGTTGG,iTru5_122_F,GAAGTGCT,NYU_BMS_Melanoma_13059,pool1,SP232309A01 +1,EP899038A04,EP899038A04,NYU_BMS_Melanoma_13059_P4,N18,iTru7_105_07,TGGCATGT,iTru5_123_F,TCACTCGA,NYU_BMS_Melanoma_13059,pool2,EP899038A04 +1,EP636802A01,EP636802A-1,NYU_BMS_Melanoma_13059_P4,P18,iTru7_105_08,AGAAGCGT,iTru5_124_F,ACGCAGTA,NYU_BMS_Melanoma_13059,pool1,EP636802A-1 +1,AP046327B02,AP046327B02,NYU_BMS_Melanoma_13059_P4,B20,iTru7_105_09,AGCGGAAT,iTru5_113_G,ATCTCCTG,NYU_BMS_Melanoma_13059,pool2,AP046327B02 +1,EP905975A04,EP905975A04,NYU_BMS_Melanoma_13059_P4,D20,iTru7_105_10,TAACCGGT,iTru5_114_G,ATGTGGAC,NYU_BMS_Melanoma_13059,pool1,EP905975A04 +1,SP410796A02,SP410796A02,NYU_BMS_Melanoma_13059_P4,F20,iTru7_105_11,CATGGAAC,iTru5_115_G,CAAGCCAA,NYU_BMS_Melanoma_13059,pool2,SP410796A02 +1,EP784608A01,EP784608A01,NYU_BMS_Melanoma_13059_P4,H20,iTru7_105_12,ATGGTCCA,iTru5_116_G,CAGACGTT,NYU_BMS_Melanoma_13059,pool1,EP784608A01 +1,EP808105A01,EP808105A01,NYU_BMS_Melanoma_13059_P4,J20,iTru7_106_01,CTTCTGAG,iTru5_117_G,CATACTCG,NYU_BMS_Melanoma_13059,pool2,EP808105A01 +1,SP331134A04,SP331134A04,NYU_BMS_Melanoma_13059_P4,L20,iTru7_106_02,AACCGAAG,iTru5_118_G,CCTGTCAA,NYU_BMS_Melanoma_13059,pool1,SP331134A04 +1,EP718688A01,EP718688A01,NYU_BMS_Melanoma_13059_P4,N20,iTru7_106_03,TTCGTACC,iTru5_119_G,CGAGTTAG,NYU_BMS_Melanoma_13059,pool2,EP718688A01 +1,SP232270A02,SP232270A02,NYU_BMS_Melanoma_13059_P4,P20,iTru7_106_04,CTGTTAGG,iTru5_120_G,CTAACCTG,NYU_BMS_Melanoma_13059,pool1,SP232270A02 +1,EP970001A01,EP970001A01,NYU_BMS_Melanoma_13059_P4,B22,iTru7_106_05,CACAAGTC,iTru5_121_G,CTCCTAGT,NYU_BMS_Melanoma_13059,pool2,EP970001A01 +1,EP001624B01,EP001624B01,NYU_BMS_Melanoma_13059_P4,D22,iTru7_106_06,TCTTGACG,iTru5_122_G,CTGTACCA,NYU_BMS_Melanoma_13059,pool1,EP001624B01 +1,EP868682A01,EP868682A01,NYU_BMS_Melanoma_13059_P4,F22,iTru7_106_07,CGTCTTGT,iTru5_123_G,GCTACAAC,NYU_BMS_Melanoma_13059,pool2,EP868682A01 +1,EP927462A02,EP927462A02,NYU_BMS_Melanoma_13059_P4,H22,iTru7_106_08,CGTGATCA,iTru5_124_G,GTTCTTCG,NYU_BMS_Melanoma_13059,pool1,EP927462A02 +1,C3,C3,NYU_BMS_Melanoma_13059_P4,J22,iTru7_106_09,CCAAGTTG,iTru5_113_H,GAGAGTAC,NYU_BMS_Melanoma_13059,pool2,C3 +1,EP890158A02,EP890158A02,NYU_BMS_Melanoma_13059_P4,L22,iTru7_106_10,GTACCTTG,iTru5_114_H,GACACAGT,NYU_BMS_Melanoma_13059,pool1,EP890158A02 +1,EP023801B04,EP023801B04,NYU_BMS_Melanoma_13059_P4,N22,iTru7_106_11,GACTATGC,iTru5_115_H,TTGCTTGG,NYU_BMS_Melanoma_13059,pool2,EP023801B04 +1,EP400447B04,EP400447B04,NYU_BMS_Melanoma_13059_P4,P22,iTru7_106_12,TGGATCAC,iTru5_116_H,GTAGTACC,NYU_BMS_Melanoma_13059,pool1,EP400447B04 +1,EP385379B01,EP385379B01,NYU_BMS_Melanoma_13059_P4,B24,iTru7_107_01,CTCTGGTT,iTru5_117_H,TTCGGCTA,NYU_BMS_Melanoma_13059,pool2,EP385379B01 +1,EP385387B01,EP385387B01,NYU_BMS_Melanoma_13059_P4,D24,iTru7_107_02,GTTCATGG,iTru5_118_H,TGCACTTG,NYU_BMS_Melanoma_13059,pool1,EP385387B01 +1,EP385384B01,EP385384B01,NYU_BMS_Melanoma_13059_P4,F24,iTru7_107_03,GCTGTAAG,iTru5_119_H,TAGAACGC,NYU_BMS_Melanoma_13059,pool2,EP385384B01 +1,SP754514A04,SP754514A04,NYU_BMS_Melanoma_13059_P4,H24,iTru7_107_04,GTCGAAGA,iTru5_120_H,GATTGTCC,NYU_BMS_Melanoma_13059,pool1,SP754514A04 +1,SP415025A01,SP415025A01,NYU_BMS_Melanoma_13059_P4,J24,iTru7_107_05,GAGCTCAA,iTru5_121_H,GATGCTAC,NYU_BMS_Melanoma_13059,pool2,SP415025A01 +1,SP415023A02,SP415023A02,NYU_BMS_Melanoma_13059_P4,L24,iTru7_107_06,TGAACCTG,iTru5_122_H,GAACGGTT,NYU_BMS_Melanoma_13059,pool1,SP415023A02 +1,EP400448B04,EP400448B04,NYU_BMS_Melanoma_13059_P4,N24,iTru7_107_07,CCGACTAT,iTru5_123_H,CTCTTGTC,NYU_BMS_Melanoma_13059,pool2,EP400448B04 +1,EP479894B04,EP479894B04,NYU_BMS_Melanoma_13059_P4,P24,iTru7_107_08,AGCTAACC,iTru5_124_H,AACGCCTT,NYU_BMS_Melanoma_13059,pool1,EP479894B04 +,,,,,,,,,,, +[Bioinformatics],,,,,,,,,,, +Sample_Project,QiitaID,BarcodesAreRC,ForwardAdapter,ReverseAdapter,HumanFiltering,library_construction_protocol,experiment_design_description,,,, +NYU_BMS_Melanoma_13059,13059,False,AACC,GGTT,False,Nextera,Equipment,,,, +Feist_11661,11661,False,AACC,GGTT,False,Nextera,Equipment,,,, +Gerwick_6123,6123,False,AACC,GGTT,True,Nextera,Equipment,,,, +,,,,,,,,,,, +[Contact],,,,,,,,,,, +Email,Sample_Project,,,,,,,,,, +test@lol.com,Feist_11661,,,,,,,,,, +,,,,,,,,,,, diff --git a/qp_klp/tests/data/good-sample-sheet.csv b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet1.csv similarity index 100% rename from qp_klp/tests/data/good-sample-sheet.csv rename to qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet1.csv diff --git a/qp_klp/tests/data/another-good-sample-sheet.csv b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet2.csv similarity index 100% rename from qp_klp/tests/data/another-good-sample-sheet.csv rename to qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet2.csv diff --git a/qp_klp/tests/data/mini-sample-sheet.csv b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet_mini.csv similarity index 100% rename from qp_klp/tests/data/mini-sample-sheet.csv rename to qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet_mini.csv diff --git a/qp_klp/tests/data/good_sheet_w_replicates.csv b/qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet_w_replicates.csv similarity index 100% rename from qp_klp/tests/data/good_sheet_w_replicates.csv rename to qp_klp/tests/data/sample-sheets/metagenomic/illumina/good_sheet_w_replicates.csv diff --git a/qp_klp/tests/data/sample-sheets/metagenomic/tellseq/good_sheet1.csv b/qp_klp/tests/data/sample-sheets/metagenomic/tellseq/good_sheet1.csv new file mode 100644 index 00000000..dccf189d --- /dev/null +++ b/qp_klp/tests/data/sample-sheets/metagenomic/tellseq/good_sheet1.csv @@ -0,0 +1,136 @@ +[Header],,,,,,,, +IEMFileVersion,1,,,,,,, +SheetType,tellseq_metag,,,,,,, +SheetVersion,10,,,,,,, +Investigator Name,Knight,,,,,,, +Experiment Name,RKLtest,,,,,,, +Date,5/6/24,,,,,,, +Workflow,GenerateFASTQ,,,,,,, +Application,FASTQ Only,,,,,,, +Assay,Metagenomic,,,,,,, +Description,,,,,,,, +Chemistry,Default,,,,,,, +,,,,,,,, +[Reads],,,,,,,, +151,,,,,,,, +151,,,,,,,, +,,,,,,,, +[Settings],,,,,,,, +ReverseComplement,0,,,,,,, +,,,,,,,, +[Data],,,,,,,, +Sample_ID,Sample_Name,Sample_Plate,well_id_384,barcode_id,Sample_Project,Well_description,Lane, +Test_8_10_2013_example,Test.8.10.2013.example,Test_Donor_SS_Samples_P1,A1,C501,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.8.10.2013.example,4, +Test_12_17_2014_example,Test.12.17.2014.example,Test_Donor_SS_Samples_P1,B1,C509,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.12.17.2014.example,4, +Test_4_4_2015_example,Test.4.4.2015.example,Test_Donor_SS_Samples_P1,C1,C502,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.4.4.2015.example,4, +Test_2_23_2015_example,Test.2.23.2015.example,Test_Donor_SS_Samples_P1,D1,C510,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.2.23.2015.example,4, +Test_9_28_2014_example,Test.9.28.2014.example,Test_Donor_SS_Samples_P1,E1,C503,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.9.28.2014.example,4, +Test_12_14_2013_example,Test.12.14.2013.example,Test_Donor_SS_Samples_P1,F1,C511,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.12.14.2013.example,4, +Test_4_7_2013_example,Test.4.7.2013.example,Test_Donor_SS_Samples_P1,G1,C504,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.4.7.2013.example,4, +Test_7_14_2013_example,Test.7.14.2013.example,Test_Donor_SS_Samples_P1,H1,C512,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.7.14.2013.example,4, +Test_10_27_2013_example,Test.10.27.2013.example,Test_Donor_SS_Samples_P1,I1,C505,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.10.27.2013.example,4, +Test_1_19_2014_example,Test.1.19.2014.example,Test_Donor_SS_Samples_P1,J1,C513,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.1.19.2014.example,4, +Test_9_3_2013_example,Test.9.3.2013.example,Test_Donor_SS_Samples_P1,K1,C506,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.9.3.2013.example,4, +Test_2_25_2013_example,Test.2.25.2013.example,Test_Donor_SS_Samples_P1,L1,C514,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.2.25.2013.example,4, +Test_7_26_2015_example,Test.7.26.2015.example,Test_Donor_SS_Samples_P1,M1,C507,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.7.26.2015.example,4, +Test_2_17_2014_example,Test.2.17.2014.example,Test_Donor_SS_Samples_P1,N1,C515,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.2.17.2014.example,4, +Test_6_29_2015_example,Test.6.29.2015.example,Test_Donor_SS_Samples_P1,O1,C508,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.6.29.2015.example,4, +Test_3_24_2015_example,Test.3.24.2015.example,Test_Donor_SS_Samples_P1,P1,C516,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.3.24.2015.example,4, +Test_1_6_2015_example,Test.1.6.2015.example,Test_Donor_SS_Samples_P1,A2,C517,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.1.6.2015.example,4, +T_Test_7_15_15B_example,T.Test.7.15.15B.example,Test_Donor_SS_Samples_P1,B2,C525,Tellseq_Shortread_Metagenomic_Analysis_00000,T.Test.7.15.15B.example,4, +Test_6_9_2013_example,Test.6.9.2013.example,Test_Donor_SS_Samples_P1,C2,C518,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.6.9.2013.example,4, +example_A_example,example.A.example,Test_Donor_SS_Samples_P1,D2,C526,Tellseq_Shortread_Metagenomic_Analysis_00000,example.A.example,4, +Test_8_22_2014_R2_example,Test.8.22.2014.R2.example,Test_Donor_SS_Samples_P1,E2,C519,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.8.22.2014.R2.example,4, +example_B_example,example.B.example,Test_Donor_SS_Samples_P1,F2,C527,Tellseq_Shortread_Metagenomic_Analysis_00000,example.B.example,4, +Test_8_22_2014_R1_example,Test.8.22.2014.R1.example,Test_Donor_SS_Samples_P1,G2,C520,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.8.22.2014.R1.example,4, +example_C_example,example.C.example,Test_Donor_SS_Samples_P1,H2,C528,Tellseq_Shortread_Metagenomic_Analysis_00000,example.C.example,4, +Test_12_28_2011_example,Test.12.28.2011.example,Test_Donor_SS_Samples_P1,I2,C521,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.12.28.2011.example,4, +example_D_example,example.D.example,Test_Donor_SS_Samples_P1,J2,C529,Tellseq_Shortread_Metagenomic_Analysis_00000,example.D.example,4, +Test_5_4_2014_example,Test.5.4.2014.example,Test_Donor_SS_Samples_P1,K2,C522,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.5.4.2014.example,4, +45208_1_1,45208.1.1,UROBIOME_TEST_MF_SAMPLES_P2,L2,C530,Tellseq_Shortread_Metagenomic_Analysis_00000,45208.1.1,4, +Test_11_6_2012_example,Test.11.6.2012.example,Test_Donor_SS_Samples_P1,M2,C523,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.11.6.2012.example,4, +45248_2_2,45248.2.2,UROBIOME_TEST_MF_SAMPLES_P2,N2,C531,Tellseq_Shortread_Metagenomic_Analysis_00000,45248.2.2,4, +Test_4_3_2012_example,Test.4.3.2012.example,Test_Donor_SS_Samples_P1,O2,C524,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.4.3.2012.example,4, +45261_2_1,45261.2.1,UROBIOME_TEST_MF_SAMPLES_P2,P2,C532,Tellseq_Shortread_Metagenomic_Analysis_00000,45261.2.1,4, +45272_11_2,45272.11.2,UROBIOME_TEST_MF_SAMPLES_P2,A3,C533,Tellseq_Shortread_Metagenomic_Analysis_00000,45272.11.2,4, +T_Test_7_12_15A,T.Test.7.12.15A,Example_Plus_Donor_Samples_P3,B3,C541,Tellseq_Shortread_Metagenomic_Analysis_00000,T.Test.7.12.15A,4, +45316_8_1,45316.8.1,UROBIOME_TEST_MF_SAMPLES_P2,C3,C534,Tellseq_Shortread_Metagenomic_Analysis_00000,45316.8.1,4, +T_Test_7_8_15A,T.Test.7.8.15A,Example_Plus_Donor_Samples_P3,D3,C542,Tellseq_Shortread_Metagenomic_Analysis_00000,T.Test.7.8.15A,4, +45327_7_2,45327.7.2,UROBIOME_TEST_MF_SAMPLES_P2,E3,C535,Tellseq_Shortread_Metagenomic_Analysis_00000,45327.7.2,4, +Test_8_10_2013,Test.8.10.2013,Test_Time_Series_ABSQ_P4,F3,C543,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.8.10.2013,4, +45272_1_swab_2,45272.1.swab.2,UROBIOME_TEST_MF_SAMPLES_P2,G3,C536,Tellseq_Shortread_Metagenomic_Analysis_00000,45272.1.swab.2,4, +Test_6_29_2015,Test.6.29.2015,Test_Time_Series_ABSQ_P4,H3,C544,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.6.29.2015,4, +45326_1_swab_2,45326.1.swab.2,UROBIOME_TEST_MF_SAMPLES_P2,I3,C537,Tellseq_Shortread_Metagenomic_Analysis_00000,45326.1.swab.2,4, +Test_3_8_2015,Test.3.8.2015,Test_Time_Series_ABSQ_P4,J3,C545,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.3.8.2015,4, +T_Test_7_19_15A,T.Test.7.19.15A,Example_Plus_Donor_Samples_P3,K3,C538,Tellseq_Shortread_Metagenomic_Analysis_00000,T.Test.7.19.15A,4, +Test_4_29_2013,Test.4.29.2013,Test_Time_Series_ABSQ_P4,L3,C546,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.4.29.2013,4, +T_Test_7_15_15B,T.Test.7.15.15B,Example_Plus_Donor_Samples_P3,M3,C539,Tellseq_Shortread_Metagenomic_Analysis_00000,T.Test.7.15.15B,4, +Test_11_16_2014,Test.11.16.2014,Test_Time_Series_ABSQ_P4,N3,C547,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.11.16.2014,4, +T_Test_7_19_15B,T.Test.7.19.15B,Example_Plus_Donor_Samples_P3,O3,C540,Tellseq_Shortread_Metagenomic_Analysis_00000,T.Test.7.19.15B,4, +Test_1_19_2014,Test.1.19.2014,Test_Time_Series_ABSQ_P4,P3,C548,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.1.19.2014,4, +Test_3_24_2015,Test.3.24.2015,Test_Time_Series_ABSQ_P4,A4,C549,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.3.24.2015,4, +Test_2_8_2013,Test.2.8.2013,Test_Time_Series_ABSQ_P4,B4,C557,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.2.8.2013,4, +Test_11_10_2013,Test.11.10.2013,Test_Time_Series_ABSQ_P4,C4,C550,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.11.10.2013,4, +Marine_Sediment_0_2cm_R1,Marine.Sediment.0.2cm.R1,MarineSediment_Donor_Test_NoProK_P5,D4,C558,Tellseq_Shortread_Metagenomic_Analysis_00000,Marine.Sediment.0.2cm.R1,4, +Test_3_23_2014,Test.3.23.2014,Test_Time_Series_ABSQ_P4,E4,C551,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.3.23.2014,4, +Marine_Sediment_5_7cm_R1,Marine.Sediment.5.7cm.R1,MarineSediment_Donor_Test_NoProK_P5,F4,C559,Tellseq_Shortread_Metagenomic_Analysis_00000,Marine.Sediment.5.7cm.R1,4, +Test_1_14_2015,Test.1.14.2015,Test_Time_Series_ABSQ_P4,G4,C552,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.1.14.2015,4, +Marine_Sediment_10_12cm_R2,Marine.Sediment.10.12cm.R2,MarineSediment_Donor_Test_NoProK_P5,H4,C560,Tellseq_Shortread_Metagenomic_Analysis_00000,Marine.Sediment.10.12cm.R2,4, +Test_8_25_2014,Test.8.25.2014,Test_Time_Series_ABSQ_P4,I4,C553,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.8.25.2014,4, +Marine_Sediment_15_17cm_R1,Marine.Sediment.15.17cm.R1,MarineSediment_Donor_Test_NoProK_P5,J4,C561,Tellseq_Shortread_Metagenomic_Analysis_00000,Marine.Sediment.15.17cm.R1,4, +Test_1_26_2013,Test.1.26.2013,Test_Time_Series_ABSQ_P4,K4,C554,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.1.26.2013,4, +Marine_Sediment_20_22cm_R1,Marine.Sediment.20.22cm.R1,MarineSediment_Donor_Test_NoProK_P5,L4,C562,Tellseq_Shortread_Metagenomic_Analysis_00000,Marine.Sediment.20.22cm.R1,4, +Test_6_16_2014,Test.6.16.2014,Test_Time_Series_ABSQ_P4,M4,C555,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.6.16.2014,4, +Marine_Sediment_25_27cm_R2,Marine.Sediment.25.27cm.R2,MarineSediment_Donor_Test_NoProK_P5,N4,C563,Tellseq_Shortread_Metagenomic_Analysis_00000,Marine.Sediment.25.27cm.R2,4, +Test_7_27_2014,Test.7.27.2014,Test_Time_Series_ABSQ_P4,O4,C556,Tellseq_Shortread_Metagenomic_Analysis_00000,Test.7.27.2014,4, +Marine_Sediment_30_32cm_R3,Marine.Sediment.30.32cm.R3,MarineSediment_Donor_Test_NoProK_P5,P4,C564,Tellseq_Shortread_Metagenomic_Analysis_00000,Marine.Sediment.30.32cm.R3,4, +example_A_R3,example.A.R3,MarineSediment_Donor_Test_NoProK_P5,A5,C565,Tellseq_Shortread_Metagenomic_Analysis_00000,example.A.R3,4, +Soil_Test_T4_2_Tube5,Soil.Test.T4.2.Tube5,16_member_community_native_soil_P6,B5,C573,Tellseq_Shortread_Metagenomic_Analysis_00000,Soil.Test.T4.2.Tube5,4, +example_B_R2,example.B.R2,MarineSediment_Donor_Test_NoProK_P5,C5,C566,Tellseq_Shortread_Metagenomic_Analysis_00000,example.B.R2,4, +A21,A21,Tumor_Community_P7,D5,C574,Tellseq_Shortread_Metagenomic_Analysis_00000,A21,4, +example_C_R4,example.C.R4,MarineSediment_Donor_Test_NoProK_P5,E5,C567,Tellseq_Shortread_Metagenomic_Analysis_00000,example.C.R4,4, +A23,A23,Tumor_Community_P7,F5,C575,Tellseq_Shortread_Metagenomic_Analysis_00000,A23,4, +example_D_R2,example.D.R2,MarineSediment_Donor_Test_NoProK_P5,G5,C568,Tellseq_Shortread_Metagenomic_Analysis_00000,example.D.R2,4, +A27,A27,Tumor_Community_P7,H5,C576,Tellseq_Shortread_Metagenomic_Analysis_00000,A27,4, +Soil_Test_T1_2_Tube1,Soil.Test.T1.2.Tube1,16_member_community_native_soil_P6,I5,C569,Tellseq_Shortread_Metagenomic_Analysis_00000,Soil.Test.T1.2.Tube1,4, +A30,A30,Tumor_Community_P7,J5,C577,Tellseq_Shortread_Metagenomic_Analysis_00000,A30,4, +Soil_Test_T2_2_Tube2,Soil .Test.T2.2.Tube2,16_member_community_native_soil_P6,K5,C570,Tellseq_Shortread_Metagenomic_Analysis_00000,Soil.Test.T2.2.Tube2,4, +A31,A31,Tumor_Community_P7,L5,C578,Tellseq_Shortread_Metagenomic_Analysis_00000,A31,4, +Soil_Test_T3_2_Tube3,Soil.Test.T3.2.Tube3,16_member_community_native_soil_P6,M5,C571,Tellseq_Shortread_Metagenomic_Analysis_00000,Soil.Test.T3.2.Tube3,4, +Test1_T1_A,Test1.T1.A,Tumor_Community_P7,N5,C579,Tellseq_Shortread_Metagenomic_Analysis_00000,Test1.T1.A,4, +Soil_Test_T4_1_Tube4,Soil.Test.T4.1.Tube4,16_member_community_native_soil_P6,O5,C572,Tellseq_Shortread_Metagenomic_Analysis_00000,Soil.Test.T4.1.Tube4,4, +Test2_T1_B_A,Test2.T1.B.A,Tumor_Community_P7,P5,C580,Tellseq_Shortread_Metagenomic_Analysis_00000,Test2.T1.B.A,4, +Test2_T1_01BH1_Y_A,Test2.T1.01BH1.Y.A,Tumor_Community_P7,A6,C581,Tellseq_Shortread_Metagenomic_Analysis_00000,Test2.T1.01BH1.Y.A,4, +Test1_T1_1test_A,Test1.T1.1test.A,Tumor_Community_P7,B6,C589,Tellseq_Shortread_Metagenomic_Analysis_00000,Test1.T1.1test.A,4, +Test2_MT1_1ex_Y_A,Test2.MT1.1ex.Y.A,Tumor_Community_P7,C6,C582,Tellseq_Shortread_Metagenomic_Analysis_00000,Test2.MT1.1ex.Y.A,4, +Test1_M1_B_1test_A,Test1.M1.B.1test.A,Tumor_Community_P7,D6,C590,Tellseq_Shortread_Metagenomic_Analysis_00000,Test1.M1.B.1test.A,4, +Test1_T1_B_Sample_A,Test1.T1.B.Sample.A,Tumor_Community_P7,E6,C583,Tellseq_Shortread_Metagenomic_Analysis_00000,Test1.T1.B.Sample.A,4, +BLANK_K15_test,BLANK.K15.test,Tumor_Community_P7,F6,C591,Tellseq_Shortread_Metagenomic_Analysis_00000,BLANK.K15.test,4, +Test2_MT1_Sample_A,Test2.MT1.Sample.A,Tumor_Community_P7,G6,C584,Tellseq_Shortread_Metagenomic_Analysis_00000,Test2.MT1.Sample.A,4, +BLANK_M15_test,BLANK.M15.test,Tumor_Community_P7,H6,C592,Tellseq_Shortread_Metagenomic_Analysis_00000,BLANK.M15.test,4, +Test2_T1_A,Test2.T1.A,Tumor_Community_P7,I6,C585,Tellseq_Shortread_Metagenomic_Analysis_00000,Test2.T1.A,4, +BLANK_O15_test,BLANK.O15.test,Tumor_Community_P7,J6,C593,Tellseq_Shortread_Metagenomic_Analysis_00000,BLANK.O15.test,4, +1test_M_CNTL_A,1test.M.CNTL.A,Tumor_Community_P7,K6,C586,Tellseq_Shortread_Metagenomic_Analysis_00000,1test.M.CNTL.A,4, +BLANK_A17_test,BLANK.A17.test,Tumor_Community_P7,L6,C594,Tellseq_Shortread_Metagenomic_Analysis_00000,BLANK.A17.test,4, +1test_G_CNTL_A,1test.G.CNTL.A,Tumor_Community_P7,M6,C587,Tellseq_Shortread_Metagenomic_Analysis_00000,1test.G.CNTL.A,4, +BLANK_C17_test,BLANK.C17.test,Tumor_Community_P7,N6,C595,Tellseq_Shortread_Metagenomic_Analysis_00000,BLANK.C17.test,4, +GC_2atest_A,GC.2atest.A,Tumor_Community_P7,O6,C588,Tellseq_Shortread_Metagenomic_Analysis_00000,GC.2atest.A,4, +BLANK_E17_test,BLANK.E17.test,Tumor_Community_P7,P6,C596,Tellseq_Shortread_Metagenomic_Analysis_00000,BLANK.E17.test,4, +,,,,,,,, +[Bioinformatics],,,,,,,, +Sample_Project,QiitaID,BarcodesAreRC,ForwardAdapter,ReverseAdapter,HumanFiltering,library_construction_protocol,experiment_design_description,contains_replicates +Tellseq_Shortread_Metagenomic_Analysis_00000,00000,True,GATCGGAAGAGCACACGTCTGAACTCCAGTCAC,GATCGGAAGAGCGTCGTGTAGGGAAAGGAGTGT,True,tellseq,tellseq metagenomics,False +,,,,,,,, +[Contact],,,,,,,, +Sample_Project,Email,,,,,,, +Tellseq_Shortread_Metagenomic_Analysis_00000,test@gmail.com,,,,,,, +,,,,,,,, +[SampleContext],,,,,,,, +sample_name,sample_type,primary_qiita_study,secondary_qiita_studies,,,,, +BLANK.K15.test,control blank,00000,,,,,, +BLANK.M15.test,control blank,00000,,,,,, +BLANK.O15.test,control blank,00000,,,,,, +BLANK.A17.test,control blank,00000,,,,,, +BLANK.C17.test,control blank,00000,,,,,, +BLANK.E17.test,control blank,00000,,,,,, +,,,,,,,, diff --git a/qp_klp/tests/data/sample-sheets/metagenomic/tellseq/good_sheet_absquant1.csv b/qp_klp/tests/data/sample-sheets/metagenomic/tellseq/good_sheet_absquant1.csv new file mode 100644 index 00000000..538a73dc --- /dev/null +++ b/qp_klp/tests/data/sample-sheets/metagenomic/tellseq/good_sheet_absquant1.csv @@ -0,0 +1,124 @@ +[Header],,,,,,,,,,, +IEMFileVersion,1,,,,,,,,,, +SheetType,tellseq_absquant,,,,,,,,,, +SheetVersion,10,,,,,,,,,, +Investigator Name,Knight,,,,,,,,,, +Experiment Name,RKLtest,,,,,,,,,, +,,,,,,,,,,, +Date,5/6/24,,,,,,,,,, +Workflow,GenerateFASTQ,,,,,,,,,, +Application,FASTQ Only,,,,,,,,,, +Assay,Metagenomic,,,,,,,,,, +Description,,,,,,,,,,, +Chemistry,Default,,,,,,,,,, +,,,,,,,,,,, +[Reads],,,,,,,,,,, +151,,,,,,,,,,, +151,,,,,,,,,,, +,,,,,,,,,,, +[Settings],,,,,,,,,,, +ReverseComplement,0,,,,,,,,,, +,,,,,,,,,,, +[Data],,,,,,,,,,, +Sample_ID,Sample_Name,Sample_Plate,well_id_384,Sample_Project,barcode_id,syndna_pool_number,mass_syndna_input_ng,extracted_gdna_concentration_ng_ul,vol_extracted_elution_ul,Well_description,Lane +Test_1_14_2015_Rep2,Test.1.14.2015.Rep2,MarineSediment_Donor_Test_NoProK_P5,G4,TELLSeq_March_MetaG_Run_55555,C552,1,0.3753295,1.501318,169.0673423,MarineSediment_Donor_Test_NoProK_P5.Test.1.14.2015.Rep2.G4,1 +Test_1_19_2014_Rep2,Test.1.19.2014.Rep2,Test_Time_Series_ABSQ_P4,P3,TELLSeq_March_MetaG_Run_55555,C548,1,0.37216725,1.488669,167.6429054,Test_Time_Series_ABSQ_P4.Test.1.19.2014.Rep2.P3,1 +Test_1_19_2014_Rep2_example,Test.1.19.2014.Rep2.example,Test_Donor_SS_Samples_P1,J1,TELLSeq_March_MetaG_Run_55555,C513,1,0.374207625,1.4968305,168.5619932,Test_Donor_SS_Samples_P1.Test.1.19.2014.Rep2.example.J1,1 +Test_1_26_2013_Rep2,Test.1.26.2013.Rep2,MarineSediment_Donor_Test_NoProK_P5,K4,TELLSeq_March_MetaG_Run_55555,C554,1,0.37522725,1.500909,169.0212838,MarineSediment_Donor_Test_NoProK_P5.Test.1.26.2013.Rep2.K4,1 +Test_1_6_2015_Rep1_example,Test.1.6.2015.Rep1.example,Test_Donor_SS_Samples_P1,A2,TELLSeq_March_MetaG_Run_55555,C517,1,0.375190625,1.5007625,169.004786,Test_Donor_SS_Samples_P1.Test.1.6.2015.Rep1.example.A2,1 +Test_1_6_2015_Rep2,Test.1.6.2015.Rep2,Plate_1,P1,Test_Timeseries_TellSeq_00000,C516,1,0.3750125,1.50005,168.9245495,Plate_1.Test.1.6.2015.Rep2.P1,1 +Test_10_27_2013_Rep2,Test.10.27.2013.Rep2,Plate_1,G1,Test_Timeseries_TellSeq_00000,C504,1,0.3751475,1.50059,168.9853604,Plate_1.Test.10.27.2013.Rep2.G1,1 +Test_10_27_2013_Rep2_example,Test.10.27.2013.Rep2.example,Test_Donor_SS_Samples_P1,I1,TELLSeq_March_MetaG_Run_55555,C505,1,0.37514813,1.5005925,168.9856419,Test_Donor_SS_Samples_P1.Test.10.27.2013.Rep2.example.I1,1 +Test_11_10_2013_Rep1,Test.11.10.2013.Rep1,Test_Time_Series_ABSQ_P4,C4,TELLSeq_March_MetaG_Run_55555,C550,1,0.37699275,1.507971,169.8165541,Test_Time_Series_ABSQ_P4.Test.11.10.2013.Rep1.C4,1 +Test_11_16_2014_Rep1,Test.11.16.2014.Rep1,Test_Plus_Donor_Samples_P3,N3,TELLSeq_March_MetaG_Run_55555,C547,1,0.375608625,1.5024345,169.1930743,Test_Plus_Donor_Samples_P3.Test.11.16.2014.Rep1.N3,1 +Test_11_6_2012_Rep1_example,Test.11.6.2012.Rep1.example,Test_Donor_SS_Samples_P1,M2,TELLSeq_March_MetaG_Run_55555,C523,1,0.37514813,1.5005925,168.9856419,Test_Donor_SS_Samples_P1.Test.11.6.2012.Rep1.example.M2,1 +Test_11_6_2012_Rep2,Test.11.6.2012.Rep2,Plate_1,O2,Test_Timeseries_TellSeq_00000,C524,1,0.37498875,1.499955,168.9138514,Plate_1.Test.11.6.2012.Rep2.O2,1 +Test_12_14_2013_Rep1,Test.12.14.2013.Rep1,Plate_1,J2,Test_Timeseries_TellSeq_00000,C529,1,0.37506,1.50024,168.9459459,Plate_1.Test.12.14.2013.Rep1.J2,1 +Test_12_14_2013_Rep1_SS,Test.12.14.2013.Rep1.SS,Plate_1,H5,Test_Timeseries_TellSeq_00000,C576,1,0.2975,1.19,134.009009,Plate_1.Test.12.14.2013.Rep1.SS.H5,1 +Test_12_14_2013_Rep2,Test.12.14.2013.Rep2,Plate_1,D1,Test_Timeseries_TellSeq_00000,C510,1,0.37506,1.50024,168.9459459,Plate_1.Test.12.14.2013.Rep2.D1,1 +Test_12_14_2013_Rep2_example,Test.12.14.2013.Rep2.example,Test_Donor_SS_Samples_P1,F1,TELLSeq_March_MetaG_Run_55555,C511,1,0.3744185,1.497674,168.656982,Test_Donor_SS_Samples_P1.Test.12.14.2013.Rep2.example.F1,1 +Test_12_17_2014_Rep1,Test.12.17.2014.Rep1,Plate_1,O1,Test_Timeseries_TellSeq_00000,C508,1,0.374945,1.49978,168.8941441,Plate_1.Test.12.17.2014.Rep1.O1,1 +Test_12_17_2014_Rep1_example,Test.12.17.2014.Rep1.example,Test_Donor_SS_Samples_P1,B1,TELLSeq_March_MetaG_Run_55555,C509,1,0.374828,1.499312,168.8414414,Test_Donor_SS_Samples_P1.Test.12.17.2014.Rep1.example.B1,1 +Test_12_28_2011_Rep1_example,Test.12.28.2011.Rep1.example,Test_Donor_SS_Samples_P1,I2,TELLSeq_March_MetaG_Run_55555,C521,1,0.375,1.5,168.9189189,Test_Donor_SS_Samples_P1.Test.12.28.2011.Rep1.example.I2,1 +Test_12_28_2011_Rep2,Test.12.28.2011.Rep2,Plate_1,I2,Test_Timeseries_TellSeq_00000,C521,1,0.37485,1.4994,168.8513514,Plate_1.Test.12.28.2011.Rep2.I2,1 +Test_12_7_2014_Rep1,Test.12.7.2014.Rep1,Plate_1,D2,Test_Timeseries_TellSeq_00000,C526,1,0.37511625,1.500465,168.9712838,Plate_1.Test.12.7.2014.Rep1.D2,1 +Test_12_7_2014_Rep1_SS,Test.12.7.2014.Rep1.SS,Plate_1,E6,Test_Timeseries_TellSeq_00000,C583,1,0.09175,0.367,41.32882883,Plate_1.Test.12.7.2014.Rep1.SS.E6,1 +Test_2_17_2014_Rep2,Test.2.17.2014.Rep2,Plate_1,N1,Test_Timeseries_TellSeq_00000,C515,1,0.37487125,1.499485,168.8609234,Plate_1.Test.2.17.2014.Rep2.N1,1 +Test_2_17_2014_Rep2_example,Test.2.17.2014.Rep2.example,Test_Donor_SS_Samples_P1,N1,TELLSeq_March_MetaG_Run_55555,C515,1,0.375111,1.500444,168.9689189,Test_Donor_SS_Samples_P1.Test.2.17.2014.Rep2.example.N1,1 +Test_2_17_2014_Rep2_SS,Test.2.17.2014.Rep2.SS,Plate_1,N5,Test_Timeseries_TellSeq_00000,C579,1,0.199,0.796,89.63963964,Plate_1.Test.2.17.2014.Rep2.SS.N5,1 +Test_2_23_2015_Rep2,Test.2.23.2015.Rep2,Plate_1,B1,Test_Timeseries_TellSeq_00000,C509,1,0.375095,1.50038,168.9617117,Plate_1.Test.2.23.2015.Rep2.B1,1 +Test_2_23_2015_Rep2_example,Test.2.23.2015.Rep2.example,Test_Donor_SS_Samples_P1,D1,TELLSeq_March_MetaG_Run_55555,C510,1,0.37509813,1.5003925,168.9631194,Test_Donor_SS_Samples_P1.Test.2.23.2015.Rep2.example.D1,1 +Test_2_25_2013_Rep1,Test.2.25.2013.Rep1,Plate_1,L1,Test_Timeseries_TellSeq_00000,C514,1,0.375,1.5,168.9189189,Plate_1.Test.2.25.2013.Rep1.L1,1 +Test_2_25_2013_Rep2_example,Test.2.25.2013.Rep2.example,Test_Donor_SS_Samples_P1,L1,TELLSeq_March_MetaG_Run_55555,C514,1,0.37501875,1.500075,168.9273649,Test_Donor_SS_Samples_P1.Test.2.25.2013.Rep2.example.L1,1 +Test_2_8_2013_Rep1,Test.2.8.2013.Rep1,Test_Time_Series_ABSQ_P4,B4,TELLSeq_March_MetaG_Run_55555,C557,1,0.37613513,1.5045405,169.4302365,Test_Time_Series_ABSQ_P4.Test.2.8.2013.Rep1.B4,1 +Test_2_8_2015_Rep2,Test.2.8.2015.Rep2,Plate_1,E2,Test_Timeseries_TellSeq_00000,C519,1,0.37507625,1.500305,168.9532658,Plate_1.Test.2.8.2015.Rep2.E2,1 +Test_2_8_2015_Rep2_SS,Test.2.8.2015.Rep2.SS,Plate_1,A6,Test_Timeseries_TellSeq_00000,C581,1,0.138,0.552,62.16216216,Plate_1.Test.2.8.2015.Rep2.SS.A6,1 +Test_3_23_2014_Rep1,Test.3.23.2014.Rep1,Test_Time_Series_ABSQ_P4,E4,TELLSeq_March_MetaG_Run_55555,C551,1,0.374352,1.497408,168.627027,Test_Time_Series_ABSQ_P4.Test.3.23.2014.Rep1.E4,1 +Test_3_24_2013_Rep2,Test.3.24.2013.Rep2,Plate_1,F2,Test_Timeseries_TellSeq_00000,C527,1,0.37493125,1.499725,168.8879505,Plate_1.Test.3.24.2013.Rep2.F2,1 +Test_3_24_2013_Rep2_SS,Test.3.24.2013.Rep2.SS,Plate_1,F5,Test_Timeseries_TellSeq_00000,C575,1,0.013775,0.0551,6.204954955,Plate_1.Test.3.24.2013.Rep2.SS.F5,1 +Test_3_24_2015_Rep1_example,Test.3.24.2015.Rep1.example,Test_Time_Series_ABSQ_P4,A4,TELLSeq_March_MetaG_Run_55555,C549,1,0.37497925,1.499917,168.9095721,Test_Time_Series_ABSQ_P4.Test.3.24.2015.Rep1.example.A4,1 +Test_3_24_2015_Rep2,Test.3.24.2015.Rep2,Test_Donor_SS_Samples_P1,P1,TELLSeq_March_MetaG_Run_55555,C516,1,0.374922,1.499688,168.8837838,Test_Donor_SS_Samples_P1.Test.3.24.2015.Rep2.P1,1 +Test_3_8_2015_Rep2,Test.3.8.2015.Rep2,Test_Plus_Donor_Samples_P3,J3,TELLSeq_March_MetaG_Run_55555,C545,1,0.375046,1.500184,168.9396396,Test_Plus_Donor_Samples_P3.Test.3.8.2015.Rep2.J3,1 +Test_4_19_2015_Rep2,Test.4.19.2015.Rep2,Plate_1,C1,Test_Timeseries_TellSeq_00000,C502,1,0.37491875,1.499675,168.8823198,Plate_1.Test.4.19.2015.Rep2.C1,1 +Test_4_19_2015_Rep2_SS,Test.4.19.2015.Rep2.SS,Plate_1,G6,Test_Timeseries_TellSeq_00000,C584,1,0.07375,0.295,33.22072072,Plate_1.Test.4.19.2015.Rep2.SS.G6,1 +Test_4_29_2013_Rep1,Test.4.29.2013.Rep1,Test_Time_Series_ABSQ_P4,L3,TELLSeq_March_MetaG_Run_55555,C546,1,0.375064,1.500256,168.9477477,Test_Time_Series_ABSQ_P4.Test.4.29.2013.Rep1.L3,1 +Test_4_3_2012_Rep1_example,Test.4.3.2012.Rep1.example,Test_Donor_SS_Samples_P1,O2,TELLSeq_March_MetaG_Run_55555,C524,1,0.37508775,1.500351,168.9584459,Test_Donor_SS_Samples_P1.Test.4.3.2012.Rep1.example.O2,1 +Test_4_3_2012_Rep2,Test.4.3.2012.Rep2,Plate_1,B2,Test_Timeseries_TellSeq_00000,C525,1,0.3749675,1.49987,168.9042793,Plate_1.Test.4.3.2012.Rep2.B2,1 +Test_4_4_2015_Rep2,Test.4.4.2015.Rep2,Plate_1,A1,Test_Timeseries_TellSeq_00000,C501,1,0.365,1.46,164.4144144,Plate_1.Test.4.4.2015.Rep2.A1,1 +Test_4_4_2015_Rep2_example,Test.4.4.2015.Rep2.example,Test_Donor_SS_Samples_P1,C1,TELLSeq_March_MetaG_Run_55555,C502,1,0.3751125,1.50045,168.9695946,Test_Donor_SS_Samples_P1.Test.4.4.2015.Rep2.example.C1,1 +Test_4_7_2013_Rep1,Test.4.7.2013.Rep1,Plate_1,E1,Test_Timeseries_TellSeq_00000,C503,1,0.37502,1.50008,168.9279279,Plate_1.Test.4.7.2013.Rep1.E1,1 +Test_4_7_2013_Rep2_example,Test.4.7.2013.Rep2.example,Test_Donor_SS_Samples_P1,G1,TELLSeq_March_MetaG_Run_55555,C504,1,0.375022,1.500088,168.9288288,Test_Donor_SS_Samples_P1.Test.4.7.2013.Rep2.example.G1,1 +Test_5_31_2015_Rep1,Test.5.31.2015.Rep1,Plate_1,C2,Test_Timeseries_TellSeq_00000,C518,1,0.37511875,1.500475,168.9724099,Plate_1.Test.5.31.2015.Rep1.C2,1 +Test_5_31_2015_Rep1_SS,Test.5.31.2015.Rep1.SS,Plate_1,B5,Test_Timeseries_TellSeq_00000,C573,1,0.19,0.76,85.58558559,Plate_1.Test.5.31.2015.Rep1.SS.B5,1 +Test_5_4_2014_Rep1_example,Test.5.4.2014.Rep1.example,Test_Donor_SS_Samples_P1,K2,TELLSeq_March_MetaG_Run_55555,C522,1,0.375666,1.502664,169.2189189,Test_Donor_SS_Samples_P1.Test.5.4.2014.Rep1.example.K2,1 +Test_5_4_2014_Rep2,Test.5.4.2014.Rep2,Plate_1,M2,Test_Timeseries_TellSeq_00000,C523,1,0.3751,1.5004,168.963964,Plate_1.Test.5.4.2014.Rep2.M2,1 +Test_6_14_2015_Rep1,Test.6.14.2015.Rep1,Plate_1,I1,Test_Timeseries_TellSeq_00000,C505,1,0.3751,1.5004,168.963964,Plate_1.Test.6.14.2015.Rep1.I1,1 +Test_6_14_2015_Rep1_SS,Test.6.14.2015.Rep1.SS,Plate_1,P5,Test_Timeseries_TellSeq_00000,C580,1,0.374915,1.49966,168.8806306,Plate_1.Test.6.14.2015.Rep1.SS.P5,1 +Test_6_16_2014_Rep1,Test.6.16.2014.Rep1,Test_Time_Series_ABSQ_P4,M4,TELLSeq_March_MetaG_Run_55555,C555,1,0.3782025,1.51281,170.3614865,Test_Time_Series_ABSQ_P4.Test.6.16.2014.Rep1.M4,1 +Test_6_29_2015_Rep1,Test.6.29.2015.Rep1,Test_Time_Series_ABSQ_P4,H3,TELLSeq_March_MetaG_Run_55555,C544,1,0.37487625,1.499505,168.8631757,Test_Time_Series_ABSQ_P4.Test.6.29.2015.Rep1.H3,1 +Test_6_29_2015_Rep2_example,Test.6.29.2015.Rep2.example,Test_Donor_SS_Samples_P1,O1,TELLSeq_March_MetaG_Run_55555,C508,1,0.37509813,1.5003925,168.9631194,Test_Donor_SS_Samples_P1.Test.6.29.2015.Rep2.example.O1,1 +Test_6_9_2013_Rep1,Test.6.9.2013.Rep1,Plate_1,A2,Test_Timeseries_TellSeq_00000,C517,1,0.37502,1.50008,168.9279279,Plate_1.Test.6.9.2013.Rep1.A2,1 +Test_6_9_2013_Rep1_example,Test.6.9.2013.Rep1.example,Test_Donor_SS_Samples_P1,C2,TELLSeq_March_MetaG_Run_55555,C518,1,0.3725,1.49,167.7927928,Test_Donor_SS_Samples_P1.Test.6.9.2013.Rep1.example.C2,1 +Test_7_11_2015_Rep1,Test.7.11.2015.Rep1,Plate_1,J1,Test_Timeseries_TellSeq_00000,C513,1,0.37497,1.49988,168.9054054,Plate_1.Test.7.11.2015.Rep1.J1,1 +Test_7_14_2013_Rep1,Test.7.14.2013.Rep1,Plate_1,F1,Test_Timeseries_TellSeq_00000,C511,1,0.375,1.5,168.9189189,Plate_1.Test.7.14.2013.Rep1.F1,1 +Test_7_14_2013_Rep2_example,Test.7.14.2013.Rep2.example,Test_Donor_SS_Samples_P1,H1,TELLSeq_March_MetaG_Run_55555,C512,1,0.375293,1.501172,169.0509009,Test_Donor_SS_Samples_P1.Test.7.14.2013.Rep2.example.H1,1 +Test_7_26_2015_Rep1,Test.7.26.2015.Rep1,Plate_1,H2,Test_Timeseries_TellSeq_00000,C528,1,0.37493125,1.499725,168.8879505,Plate_1.Test.7.26.2015.Rep1.H2,1 +Test_7_26_2015_Rep1_SS,Test.7.26.2015.Rep1.SS,Plate_1,D5,Test_Timeseries_TellSeq_00000,C574,1,0.2525,1.01,113.7387387,Plate_1.Test.7.26.2015.Rep1.SS.D5,1 +Test_7_26_2015_Rep2,Test.7.26.2015.Rep2,Plate_1,M1,Test_Timeseries_TellSeq_00000,C507,1,0.37493125,1.499725,168.8879505,Plate_1.Test.7.26.2015.Rep2.M1,1 +Test_7_26_2015_Rep2_example,Test.7.26.2015.Rep2.example,Test_Donor_SS_Samples_P1,M1,TELLSeq_March_MetaG_Run_55555,C507,1,0.37512125,1.500485,168.973536,Test_Donor_SS_Samples_P1.Test.7.26.2015.Rep2.example.M1,1 +Test_7_27_2014_Rep1,Test.7.27.2014.Rep1,MarineSediment_Donor_Test_NoProK_P5,O4,TELLSeq_March_MetaG_Run_55555,C556,1,0.3759,1.5036,169.3243243,MarineSediment_Donor_Test_NoProK_P5.Test.7.27.2014.Rep1.O4,1 +Test_8_10_2013_Rep2,Test.8.10.2013.Rep2,Test_Plus_Donor_Samples_P3,F3,TELLSeq_March_MetaG_Run_55555,C543,1,0.375293,1.501172,169.0509009,Test_Plus_Donor_Samples_P3.Test.8.10.2013.Rep2.F3,1 +Test_8_10_2013_Rep2_example,Test.8.10.2013.Rep2.example,Test_Donor_SS_Samples_P1,A1,TELLSeq_March_MetaG_Run_55555,C501,1,0.28075,1.123,126.463964,Test_Donor_SS_Samples_P1.Test.8.10.2013.Rep2.example.A1,1 +Test_8_22_2014_Rep1,Test.8.22.2014.Rep1,Plate_1,G2,Test_Timeseries_TellSeq_00000,C520,1,0.375375,1.5015,169.0878378,Plate_1.Test.8.22.2014.Rep1.G2,1 +Test_8_22_2014_Rep1_example,Test.8.22.2014.Rep1.example,Test_Donor_SS_Samples_P1,G2,TELLSeq_March_MetaG_Run_55555,C520,1,0.375009375,1.5000375,168.9231419,Test_Donor_SS_Samples_P1.Test.8.22.2014.Rep1.example.G2,1 +Test_8_22_2014_Rep1_SS,Test.8.22.2014.Rep1.SS,Plate_1,C6,Test_Timeseries_TellSeq_00000,C582,1,0.37504625,1.500185,168.9397523,Plate_1.Test.8.22.2014.Rep1.SS.C6,1 +Test_8_22_2014_Rep2_example,Test.8.22.2014.Rep2.example,Test_Donor_SS_Samples_P1,E2,TELLSeq_March_MetaG_Run_55555,C519,1,0.375009375,1.5000375,168.9231419,Test_Donor_SS_Samples_P1.Test.8.22.2014.Rep2.example.E2,1 +Test_8_25_2014_Rep1,Test.8.25.2014.Rep1,Test_Time_Series_ABSQ_P4,I4,TELLSeq_March_MetaG_Run_55555,C553,1,0.3750525,1.50021,168.9425676,Test_Time_Series_ABSQ_P4.Test.8.25.2014.Rep1.I4,1 +Test_8_7_2012_Rep1,Test.8.7.2012.Rep1,Plate_1,K2,Test_Timeseries_TellSeq_00000,C522,1,0.374865,1.49946,168.8581081,Plate_1.Test.8.7.2012.Rep1.K2,1 +Test_9_24_2013_Rep1_SS,Test.9.24.2013.Rep1.SS,Plate_1,J5,Test_Timeseries_TellSeq_00000,C577,1,0.12125,0.485,54.61711712,Plate_1.Test.9.24.2013.Rep1.SS.J5,1 +Test_9_24_2013_Rep2,Test.9.24.2013.Rep2,Plate_1,H1,Test_Timeseries_TellSeq_00000,C512,1,0.37503875,1.500155,168.9363739,Plate_1.Test.9.24.2013.Rep2.H1,1 +Test_9_28_2014_Rep1_example,Test.9.28.2014.Rep1.example,Test_Donor_SS_Samples_P1,E1,TELLSeq_March_MetaG_Run_55555,C503,1,0.37462688,1.4985075,168.7508446,Test_Donor_SS_Samples_P1.Test.9.28.2014.Rep1.example.E1,1 +Test_9_28_2014_Rep2,Test.9.28.2014.Rep2,Plate_1,L2,Test_Timeseries_TellSeq_00000,C530,1,0.376875,1.5075,169.7635135,Plate_1.Test.9.28.2014.Rep2.L2,1 +Test_9_28_2014_Rep2_SS,Test.9.28.2014.Rep2.SS,Plate_1,L5,Test_Timeseries_TellSeq_00000,C578,1,0.375081,1.500324,168.9554054,Plate_1.Test.9.28.2014.Rep2.SS.L5,1 +Test_9_3_2013_Rep1_example,Test.9.3.2013.Rep1.example,Test_Donor_SS_Samples_P1,K1,TELLSeq_March_MetaG_Run_55555,C506,1,0.374995,1.49998,168.9166667,Test_Donor_SS_Samples_P1.Test.9.3.2013.Rep1.example.K1,1 +Test_9_3_2013_Rep2,Test.9.3.2013.Rep2,Plate_1,K1,Test_Timeseries_TellSeq_00000,C506,1,0.37503,1.50012,168.9324324,Plate_1.Test.9.3.2013.Rep2.K1,1 +T_Test_7_12_15A,T.Test.7.12.15A,UROBIOME_TEST_MF_SAMPLES_P2,B3,TELLSeq_March_MetaG_Run_55555,C541,1,0.37512125,1.500485,168.973536,UROBIOME_TEST_MF_SAMPLES_P2.T.Test.7.12.15A.B3,1 +T_Test_7_15_15B,T.Test.7.15.15B,UROBIOME_TEST_MF_SAMPLES_P2,M3,TELLSeq_March_MetaG_Run_55555,C539,1,0.375022,1.500088,168.9288288,UROBIOME_TEST_MF_SAMPLES_P2.T.Test.7.15.15B.M3,1 +T_Test_7_15_15B_example,T.Test.7.15.15B.example,Test_Donor_SS_Samples_P1,B2,TELLSeq_March_MetaG_Run_55555,C525,1,0.375028125,1.5001125,168.9315878,Test_Donor_SS_Samples_P1.T.Test.7.15.15B.example.B2,1 +T_Test_7_19_15A,T.Test.7.19.15A,Test_Time_Series_ABSQ_P4,K3,TELLSeq_March_MetaG_Run_55555,C538,1,0.28075,1.123,126.463964,Test_Time_Series_ABSQ_P4.T.Test.7.19.15A.K3,1 +BLANK_03,BLANK.O3,Test_Time_Series_ABSQ_P4,O3,TELLSeq_March_MetaG_Run_55555,C540,1,0.374806,1.499224,168.8315315,Test_Time_Series_ABSQ_P4.BLANK.O3,1 +T_Test_7_8_15A,T.Test.7.8.15A,Test_Time_Series_ABSQ_P4,D3,TELLSeq_March_MetaG_Run_55555,C542,1,0.3750915,1.500366,168.9601351,Test_Time_Series_ABSQ_P4.T.Test.7.8.15A.D3,1 +,,,,,,,,,,, +[Bioinformatics],,,,,,,,,,, +Sample_Project,QiitaID,BarcodesAreRC,ForwardAdapter,ReverseAdapter,HumanFiltering,library_construction_protocol,experiment_design_description,contains_replicates,,, +TELLSeq_March_MetaG_Run_55555,55555,TRUE,GATCGGAAGAGCACACGTCTGAACTCCAGTCAC,GATCGGAAGAGCGTCGTGTAGGGAAAGGAGTGT,TRUE,tellseq,tellseq metagenomics,FALSE,,, +Test_Timeseries_TellSeq_00000,00000,TRUE,GATCGGAAGAGCACACGTCTGAACTCCAGTCAC,GATCGGAAGAGCGTCGTGTAGGGAAAGGAGTGT,TRUE,tellseq,tellseq metagenomics,FALSE,,, +,,,,,,,,,,, +[Contact],,,,,,,,,,, +Sample_Project,Email,,,,,,,,,, +TELLSeq_March_MetaG_Run_55555,test@gmail.com,,,,,,,,,, +Test_Timeseries_TellSeq_00000,test@gmail.com,,,,,,,,,, +,,,,,,,,,,, +[SampleContext],,,,,,,,,,, +sample_name,sample_type,primary_qiita_study,secondary_qiita_studies,,,,,,,, +BLANK.O3,control blank,55555,00000,,,,,,,, diff --git a/qp_klp/tests/data/good-sample-sheet-transcriptomics.csv b/qp_klp/tests/data/sample-sheets/metatranscriptomic/illumina/good_sheet1.csv similarity index 55% rename from qp_klp/tests/data/good-sample-sheet-transcriptomics.csv rename to qp_klp/tests/data/sample-sheets/metatranscriptomic/illumina/good_sheet1.csv index 9c555036..06308e1a 100644 --- a/qp_klp/tests/data/good-sample-sheet-transcriptomics.csv +++ b/qp_klp/tests/data/sample-sheets/metatranscriptomic/illumina/good_sheet1.csv @@ -20,294 +20,294 @@ ReverseComplement,0,,,,,,,,,, ,,,,,,,,,,, [Data],,,,,,,,,,, Lane,Sample_ID,Sample_Name,Sample_Plate,well_id_384,I7_Index_ID,index,I5_Index_ID,index2,Sample_Project,syndna_pool_number,Well_description -1,CDPH-SAL_Salmonella_Typhi_MDL-143,CDPH-SAL_Salmonella_Typhi_MDL-143,Feist_11661_P40,A1,iTru7_107_07,CCGACTAT,iTru5_01_A,ACCGACAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-143 -1,CDPH-SAL_Salmonella_Typhi_MDL-144,CDPH-SAL_Salmonella_Typhi_MDL-144,Feist_11661_P40,C1,iTru7_107_08,CCGACTAT,iTru5_02_A,CTTCGCAA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-144 -1,CDPH-SAL_Salmonella_Typhi_MDL-145,CDPH-SAL_Salmonella_Typhi_MDL-145,Feist_11661_P40,E1,iTru7_107_09,GCCTTGTT,iTru5_03_A,AACACCAC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-145 -1,CDPH-SAL_Salmonella_Typhi_MDL-146,CDPH-SAL_Salmonella_Typhi_MDL-146,Feist_11661_P40,G1,iTru7_107_10,AACTTGCC,iTru5_04_A,CGTATCTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-146 -1,CDPH-SAL_Salmonella_Typhi_MDL-147,CDPH-SAL_Salmonella_Typhi_MDL-147,Feist_11661_P40,I1,iTru7_107_11,CAATGTGG,iTru5_05_A,GGTACGAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-147 -1,CDPH-SAL_Salmonella_Typhi_MDL-148,CDPH-SAL_Salmonella_Typhi_MDL-148,Feist_11661_P40,K1,iTru7_107_12,AAGGCTGA,iTru5_06_A,CGATCGAT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-148 -1,CDPH-SAL_Salmonella_Typhi_MDL-149,CDPH-SAL_Salmonella_Typhi_MDL-149,Feist_11661_P40,M1,iTru7_108_01,TTACCGAG,iTru5_07_A,AAGACACC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-149 -1,CDPH-SAL_Salmonella_Typhi_MDL-150,CDPH-SAL_Salmonella_Typhi_MDL-150,Feist_11661_P40,O1,iTru7_108_02,GTCCTAAG,iTru5_08_A,CATCTGCT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-150 -1,CDPH-SAL_Salmonella_Typhi_MDL-151,CDPH-SAL_Salmonella_Typhi_MDL-151,Feist_11661_P40,A3,iTru7_108_03,GAAGGTTC,iTru5_09_A,CTCTCAGA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-151 -1,CDPH-SAL_Salmonella_Typhi_MDL-152,CDPH-SAL_Salmonella_Typhi_MDL-152,Feist_11661_P40,C3,iTru7_108_04,GAAGAGGT,iTru5_10_A,TCGTCTGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-152 -1,CDPH-SAL_Salmonella_Typhi_MDL-153,CDPH-SAL_Salmonella_Typhi_MDL-153,Feist_11661_P40,E3,iTru7_108_05,TCTGAGAG,iTru5_11_A,CAATAGCC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-153 -1,CDPH-SAL_Salmonella_Typhi_MDL-154,CDPH-SAL_Salmonella_Typhi_MDL-154,Feist_11661_P40,G3,iTru7_108_06,ACCGCATA,iTru5_12_A,CATTCGTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-154 -1,CDPH-SAL_Salmonella_Typhi_MDL-155,CDPH-SAL_Salmonella_Typhi_MDL-155,Feist_11661_P40,I3,iTru7_108_07,GAAGTACC,iTru5_01_B,AGTGGCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-155 -1,CDPH-SAL_Salmonella_Typhi_MDL-156,CDPH-SAL_Salmonella_Typhi_MDL-156,Feist_11661_P40,K3,iTru7_108_08,CAGGTATC,iTru5_02_B,GTGGTATG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-156 -1,CDPH-SAL_Salmonella_Typhi_MDL-157,CDPH-SAL_Salmonella_Typhi_MDL-157,Feist_11661_P40,M3,iTru7_108_09,TCTCTAGG,iTru5_03_B,TGAGCTGT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-157 -1,CDPH-SAL_Salmonella_Typhi_MDL-158,CDPH-SAL_Salmonella_Typhi_MDL-158,Feist_11661_P40,O3,iTru7_108_10,AAGCACTG,iTru5_04_B,CGTCAAGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-158 -1,CDPH-SAL_Salmonella_Typhi_MDL-159,CDPH-SAL_Salmonella_Typhi_MDL-159,Feist_11661_P40,A5,iTru7_108_11,CCAAGCAA,iTru5_05_B,AAGCATCG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-159 -1,CDPH-SAL_Salmonella_Typhi_MDL-160,CDPH-SAL_Salmonella_Typhi_MDL-160,Feist_11661_P40,C5,iTru7_108_12,TGTTCGAG,iTru5_06_B,TACTCCAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-160 -1,CDPH-SAL_Salmonella_Typhi_MDL-161,CDPH-SAL_Salmonella_Typhi_MDL-161,Feist_11661_P40,E5,iTru7_109_01,CTCGTCTT,iTru5_07_B,GATACCTG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-161 -1,CDPH-SAL_Salmonella_Typhi_MDL-162,CDPH-SAL_Salmonella_Typhi_MDL-162,Feist_11661_P40,G5,iTru7_109_02,CGAACTGT,iTru5_08_B,ACCTCTTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-162 -1,CDPH-SAL_Salmonella_Typhi_MDL-163,CDPH-SAL_Salmonella_Typhi_MDL-163,Feist_11661_P40,I5,iTru7_109_03,CATTCGGT,iTru5_09_B,ACGGACTT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-163 -1,CDPH-SAL_Salmonella_Typhi_MDL-164,CDPH-SAL_Salmonella_Typhi_MDL-164,Feist_11661_P40,K5,iTru7_109_04,TCGGTTAC,iTru5_10_B,CATGTGTG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-164 -1,CDPH-SAL_Salmonella_Typhi_MDL-165,CDPH-SAL_Salmonella_Typhi_MDL-165,Feist_11661_P40,M5,iTru7_109_05,AAGTCGAG,iTru5_11_B,TGCCTCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-165 -1,CDPH-SAL_Salmonella_Typhi_MDL-166,CDPH-SAL_Salmonella_Typhi_MDL-166,Feist_11661_P40,O5,iTru7_109_06,TATCGGTC,iTru5_12_B,ATCTGACC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-166 -1,CDPH-SAL_Salmonella_Typhi_MDL-167,CDPH-SAL_Salmonella_Typhi_MDL-167,Feist_11661_P40,A7,iTru7_109_07,TATTCGCC,iTru5_01_C,CACAGACT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-167 -1,CDPH-SAL_Salmonella_Typhi_MDL-168,CDPH-SAL_Salmonella_Typhi_MDL-168,Feist_11661_P40,C7,iTru7_109_08,GTATTGGC,iTru5_02_C,CACTGTAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-168 -1,P21_E_coli_ELI344,P21_E_coli_ELI344,Feist_11661_P40,E7,iTru7_109_09,AGTCGCTT,iTru5_03_C,CACAGGAA,Feist_11661,pool1,P21_E. coli_ELI344 -1,P21_E_coli_ELI345,P21_E_coli_ELI345,Feist_11661_P40,G7,iTru7_109_10,TGGCACTA,iTru5_04_C,CCATGAAC,Feist_11661,pool2,P21_E. coli_ELI345 -1,P21_E_coli_ELI347,P21_E_coli_ELI347,Feist_11661_P40,I7,iTru7_109_11,GGTTGTCA,iTru5_05_C,GCCAATAC,Feist_11661,pool1,P21_E. coli_ELI347 -1,P21_E_coli_ELI348,P21_E_coli_ELI348,Feist_11661_P40,K7,iTru7_109_12,AACCTCCT,iTru5_06_C,AGCTACCA,Feist_11661,pool2,P21_E. coli_ELI348 -1,P21_E_coli_ELI349,P21_E_coli_ELI349,Feist_11661_P40,M7,iTru7_110_01,ATGACCAG,iTru5_07_C,AACCGAAC,Feist_11661,pool1,P21_E. coli_ELI349 -1,P21_E_coli_ELI350,P21_E_coli_ELI350,Feist_11661_P40_diluted,O7,iTru7_110_02,AACCGTTC,iTru5_08_C,ATCGCAAC,Feist_11661,pool2,P21_E. coli_ELI350 -1,P21_E_coli_ELI351,P21_E_coli_ELI351,Feist_11661_P40,A9,iTru7_110_03,TCCAATCG,iTru5_09_C,GTTGCTGT,Feist_11661,pool1,P21_E. coli_ELI351 -1,P21_E_coli_ELI352,P21_E_coli_ELI352,Feist_11661_P40,C9,iTru7_110_04,CTGCACTT,iTru5_10_C,TCTAGTCC,Feist_11661,pool2,P21_E. coli_ELI352 -1,P21_E_coli_ELI353,P21_E_coli_ELI353,Feist_11661_P40,E9,iTru7_110_05,CGCTTAAC,iTru5_11_C,GACGAACT,Feist_11661,pool1,P21_E. coli_ELI353 -1,P21_E_coli_ELI354,P21_E_coli_ELI354,Feist_11661_P40,G9,iTru7_110_06,CACCACTA,iTru5_12_C,TTCGTACG,Feist_11661,pool2,P21_E. coli_ELI354 -1,P21_E_coli_ELI355,P21_E_coli_ELI355,Feist_11661_P40,I9,iTru7_110_07,ACAGCAAC,iTru5_01_D,CGACACTT,Feist_11661,pool1,P21_E. coli_ELI355 -1,P21_E_coli_ELI357,P21_E_coli_ELI357,Feist_11661_P40,K9,iTru7_110_08,GGAAGGAT,iTru5_02_D,AGACGCTA,Feist_11661,pool2,P21_E. coli_ELI357 -1,P21_E_coli_ELI358,P21_E_coli_ELI358,Feist_11661_P40_diluted,M9,iTru7_110_09,GGCGTTAT,iTru5_03_D,TGACAACC,Feist_11661,pool1,P21_E. coli_ELI358 -1,P21_E_coli_ELI359,P21_E_coli_ELI359,Feist_11661_P40,O9,iTru7_110_10,CTGTTGAC,iTru5_04_D,GGTACTTC,Feist_11661,pool2,P21_E. coli_ELI359 -1,P21_E_coli_ELI361,P21_E_coli_ELI361,Feist_11661_P40_diluted,A11,iTru7_110_11,GTCATCGA,iTru5_05_D,CTGTATGC,Feist_11661,pool1,P21_E. coli_ELI361 -1,P21_E_coli_ELI362,P21_E_coli_ELI362,Feist_11661_P40,C11,iTru7_110_12,TGACTTCG,iTru5_06_D,TCGACAAG,Feist_11661,pool2,P21_E. coli_ELI362 -1,P21_E_coli_ELI363,P21_E_coli_ELI363,Feist_11661_P40_diluted,E11,iTru7_111_01,CGATAGAG,iTru5_07_D,GCTGAATC,Feist_11661,pool1,P21_E. coli_ELI363 -1,P21_E_coli_ELI364,P21_E_coli_ELI364,Feist_11661_P40,G11,iTru7_111_02,TTCGTTGG,iTru5_08_D,AGTTGTGC,Feist_11661,pool2,P21_E. coli_ELI364 -1,P21_E_coli_ELI365,P21_E_coli_ELI365,Feist_11661_P40,I11,iTru7_111_03,TGGAGAGT,iTru5_09_D,TGTCGACT,Feist_11661,pool1,P21_E. coli_ELI365 -1,P21_E_coli_ELI366,P21_E_coli_ELI366,Feist_11661_P40_diluted,K11,iTru7_111_04,TCAGACGA,iTru5_10_D,AAGGCTCT,Feist_11661,pool2,P21_E. coli_ELI366 -1,P21_E_coli_ELI367,P21_E_coli_ELI367,Feist_11661_P40_diluted,M11,iTru7_111_05,GACGAATG,iTru5_11_D,CCTAACAG,Feist_11661,pool1,P21_E. coli_ELI367 -1,P21_E_coli_ELI368,P21_E_coli_ELI368,Feist_11661_P40,O11,iTru7_111_06,CATGAGGA,iTru5_12_D,AAGACGAG,Feist_11661,pool2,P21_E. coli_ELI368 -1,P21_E_coli_ELI369,P21_E_coli_ELI369,Feist_11661_P40,A13,iTru7_111_07,CGGTTGTT,iTru5_01_E,GACTTGTG,Feist_11661,pool1,P21_E. coli_ELI369 -1,stALE_E_coli_A1_F21_I1_R1,stALE_E_coli_A1_F21_I1_R1,Feist_11661_P40,C13,iTru7_111_08,TCCGTATG,iTru5_02_E,CAACTCCA,Feist_11661,pool2,stALE_E. coli_A1.F21.I1.R1 -1,stALE_E_coli_A2_F21_I1_R1,stALE_E_coli_A2_F21_I1_R1,Feist_11661_P40,E13,iTru7_111_09,TGTGGTAC,iTru5_03_E,TGTTCCGT,Feist_11661,pool1,stALE_E. coli_A2.F21.I1.R1 -1,stALE_E_coli_A3_F18_I1_R1,stALE_E_coli_A3_F18_I1_R1,Feist_11661_P40,G13,iTru7_111_10,AGAACGAG,iTru5_04_E,ACCGCTAT,Feist_11661,pool2,stALE_E. coli_A3.F18.I1.R1 -1,stALE_E_coli_A3_F40_I1_R1,stALE_E_coli_A3_F40_I1_R1,Feist_11661_P40,I13,iTru7_111_11,CTTCGTTC,iTru5_05_E,CTTAGGAC,Feist_11661,pool1,stALE_E. coli_A3.F40.I1.R1 -1,stALE_E_coli_A4_F21_I1_R1,stALE_E_coli_A4_F21_I1_R1,Feist_11661_P40,K13,iTru7_111_12,CCAATAGG,iTru5_06_E,TATGACCG,Feist_11661,pool2,stALE_E. coli_A4.F21.I1.R1 -1,stALE_E_coli_A4_F21_I1_R2,stALE_E_coli_A4_F21_I1_R2,Feist_11661_P40,M13,iTru7_112_01,ACCATCCA,iTru5_07_E,AGCTAGTG,Feist_11661,pool1,stALE_E. coli_A4.F21.I1.R2 -1,stALE_E_coli_A4_F42_I1_R1,stALE_E_coli_A4_F42_I1_R1,Feist_11661_P40,O13,iTru7_112_02,CACACATG,iTru5_08_E,GAACGAAG,Feist_11661,pool2,stALE_E. coli_A4.F42.I1.R1 -1,stALE_E_coli_A5_F21_I1_R1,stALE_E_coli_A5_F21_I1_R1,Feist_11661_P40,A15,iTru7_112_03,CTTGTCGA,iTru5_09_E,CGTCTAAC,Feist_11661,pool1,stALE_E. coli_A5.F21.I1.R1 -1,stALE_E_coli_A5_F42_I1_R1,stALE_E_coli_A5_F42_I1_R1,Feist_11661_P40,C15,iTru7_112_04,AGTCTCAC,iTru5_10_E,AACCAGAG,Feist_11661,pool2,stALE_E. coli_A5.F42.I1.R1 -1,stALE_E_coli_A6_F21_I1_R1,stALE_E_coli_A6_F21_I1_R1,Feist_11661_P40,E15,iTru7_112_05,AGTTGGCT,iTru5_11_E,CGCCTTAT,Feist_11661,pool1,stALE_E. coli_A6.F21.I1.R1 -1,stALE_E_coli_A6_F43_I1_R1,stALE_E_coli_A6_F43_I1_R1,Feist_11661_P40,G15,iTru7_112_06,CCGGAATT,iTru5_12_E,CTCGTTCT,Feist_11661,pool2,stALE_E. coli_A6.F43.I1.R1 -1,stALE_E_coli_A7_F21_I1_R1,stALE_E_coli_A7_F21_I1_R1,Feist_11661_P40,I15,iTru7_112_07,CAGTGAAG,iTru5_01_F,GTGAGACT,Feist_11661,pool1,stALE_E. coli_A7.F21.I1.R1 -1,stALE_E_coli_A7_F42_I1_R1,stALE_E_coli_A7_F42_I1_R1,Feist_11661_P40,K15,iTru7_112_08,CCTACTGA,iTru5_02_F,AACACGCT,Feist_11661,pool2,stALE_E. coli_A7.F42.I1.R1 -1,stALE_E_coli_A8_F20_I1_R1,stALE_E_coli_A8_F20_I1_R1,Feist_11661_P40,M15,iTru7_112_09,TGTGAAGC,iTru5_03_F,CCTAGAGA,Feist_11661,pool1,stALE_E. coli_A8.F20.I1.R1 -1,stALE_E_coli_A8_F42_I1_R1,stALE_E_coli_A8_F42_I1_R1,Feist_11661_P40,O15,iTru7_112_10,GTCTGATC,iTru5_04_F,TTCCAGGT,Feist_11661,pool2,stALE_E. coli_A8.F42.I1.R1 -1,stALE_E_coli_A9_F21_I1_R1,stALE_E_coli_A9_F21_I1_R1,Feist_11661_P40,A17,iTru7_112_11,TTCAGGAG,iTru5_05_F,TCAGCCTT,Feist_11661,pool1,stALE_E. coli_A9.F21.I1.R1 -1,stALE_E_coli_A9_F44_I1_R1,stALE_E_coli_A9_F44_I1_R1,Feist_11661_P40,C17,iTru7_112_12,ACGATGAC,iTru5_06_F,AGCCAACT,Feist_11661,pool2,stALE_E. coli_A9.F44.I1.R1 -1,stALE_E_coli_A10_F21_I1_R1,stALE_E_coli_A10_F21_I1_R1,Feist_11661_P40,E17,iTru7_113_01,CGTTATGC,iTru5_07_F,CTAGCTCA,Feist_11661,pool1,stALE_E. coli_A10.F21.I1.R1 -1,stALE_E_coli_A10_F43_I1_R1,stALE_E_coli_A10_F43_I1_R1,Feist_11661_P40,G17,iTru7_113_02,GATACTGG,iTru5_08_F,GGAAGAGA,Feist_11661,pool2,stALE_E. coli_A10.F43.I1.R1 -1,stALE_E_coli_A10_F131_I1_R1,stALE_E_coli_A10_F131_I1_R1,Feist_11661_P40,I17,iTru7_113_03,CTACTTGG,iTru5_09_F,AACACTGG,Feist_11661,pool1,stALE_E. coli_A10.F131.I1.R1 -1,stALE_E_coli_A11_F21_I1_R1,stALE_E_coli_A11_F21_I1_R1,Feist_11661_P40,K17,iTru7_113_04,CATACCAC,iTru5_10_F,ACTATCGC,Feist_11661,pool2,stALE_E. coli_A11.F21.I1.R1 -1,stALE_E_coli_A11_F43_I1_R1,stALE_E_coli_A11_F43_I1_R1,Feist_11661_P40,M17,iTru7_113_05,ACATTGCG,iTru5_11_F,ACAACAGC,Feist_11661,pool1,stALE_E. coli_A11.F43.I1.R1 -1,stALE_E_coli_A11_F119_I1_R1,stALE_E_coli_A11_F119_I1_R1,Feist_11661_P40,O17,iTru7_113_06,TGATCGGA,iTru5_12_F,TGTGGCTT,Feist_11661,pool2,stALE_E. coli_A11.F119.I1.R1 -1,stALE_E_coli_A12_F21_I1_R1,stALE_E_coli_A12_F21_I1_R1,Feist_11661_P40,A19,iTru7_113_07,AAGTGTCG,iTru5_01_G,GTTCCATG,Feist_11661,pool1,stALE_E. coli_A12.F21.I1.R1 -1,stALE_E_coli_A12_F43_I1_R1,stALE_E_coli_A12_F43_I1_R1,Feist_11661_P40,C19,iTru7_113_08,GAACGCTT,iTru5_02_G,TGGATGGT,Feist_11661,pool2,stALE_E. coli_A12.F43.I1.R1 -1,stALE_E_coli_A12_F136_I1_R1,stALE_E_coli_A12_F136_I1_R1,Feist_11661_P40,E19,iTru7_113_09,TCAAGGAC,iTru5_03_G,GCATAACG,Feist_11661,pool1,stALE_E. coli_A12.F136.I1.R1 -1,stALE_E_coli_A13_F20_I1_R1,stALE_E_coli_A13_F20_I1_R1,Feist_11661_P40,G19,iTru7_113_10,TCAACTGG,iTru5_04_G,TCGAACCT,Feist_11661,pool2,stALE_E. coli_A13.F20.I1.R1 -1,stALE_E_coli_A13_F42_I1_R1,stALE_E_coli_A13_F42_I1_R1,Feist_11661_P40,I19,iTru7_113_11,GGTTGATG,iTru5_05_G,ACATGCCA,Feist_11661,pool1,stALE_E. coli_A13.F42.I1.R1 -1,stALE_E_coli_A13_F121_I1_R1,stALE_E_coli_A13_F121_I1_R1,Feist_11661_P40,K19,iTru7_113_12,AAGGACAC,iTru5_06_G,GATCTTGC,Feist_11661,pool2,stALE_E. coli_A13.F121.I1.R1 -1,stALE_E_coli_A14_F20_I1_R1,stALE_E_coli_A14_F20_I1_R1,Feist_11661_P40,M19,iTru7_114_01,TTGATCCG,iTru5_07_G,GTTAAGCG,Feist_11661,pool1,stALE_E. coli_A14.F20.I1.R1 -1,stALE_E_coli_A14_F42_I1_R1,stALE_E_coli_A14_F42_I1_R1,Feist_11661_P40,O19,iTru7_114_02,GGTGATTC,iTru5_08_G,GTCATCGT,Feist_11661,pool2,stALE_E. coli_A14.F42.I1.R1 -1,stALE_E_coli_A14_F133_I1_R1,stALE_E_coli_A14_F133_I1_R1,Feist_11661_P40,A21,iTru7_114_03,GATTGCTC,iTru5_09_G,TCAGACAC,Feist_11661,pool1,stALE_E. coli_A14.F133.I1.R1 -1,stALE_E_coli_A15_F21_I1_R1,stALE_E_coli_A15_F21_I1_R1,Feist_11661_P40,C21,iTru7_114_04,ACCTGGAA,iTru5_10_G,GTCCTAAG,Feist_11661,pool2,stALE_E. coli_A15.F21.I1.R1 -1,stALE_E_coli_A15_F42_I1_R1,stALE_E_coli_A15_F42_I1_R1,Feist_11661_P40,E21,iTru7_114_05,CATCTACG,iTru5_11_G,AGACCTTG,Feist_11661,pool1,stALE_E. coli_A15.F42.I1.R1 -1,stALE_E_coli_A15_F117_I1_R1,stALE_E_coli_A15_F117_I1_R1,Feist_11661_P40,G21,iTru7_114_06,CCGTATCT,iTru5_12_G,AGACATGC,Feist_11661,pool2,stALE_E. coli_A15.F117.I1.R1 -1,stALE_E_coli_A16_F20_I1_R1,stALE_E_coli_A16_F20_I1_R1,Feist_11661_P40,I21,iTru7_114_07,CGGAATAC,iTru5_01_H,TAGCTGAG,Feist_11661,pool1,stALE_E. coli_A16.F20.I1.R1 -1,stALE_E_coli_A16_F42_I1_R1,stALE_E_coli_A16_F42_I1_R1,Feist_11661_P40,K21,iTru7_114_08,CTCCTAGA,iTru5_02_H,TTCGAAGC,Feist_11661,pool2,stALE_E. coli_A16.F42.I1.R1 -1,stALE_E_coli_A16_F134_I1_R1,stALE_E_coli_A16_F134_I1_R1,Feist_11661_P40,M21,iTru7_114_09,TGGTAGCT,iTru5_03_H,CAGTGCTT,Feist_11661,pool1,stALE_E. coli_A16.F134.I1.R1 -1,stALE_E_coli_A17_F21_I1_R1,stALE_E_coli_A17_F21_I1_R1,Feist_11661_P40,O21,iTru7_114_10,TCGAAGGT,iTru5_04_H,TAGTGCCA,Feist_11661,pool2,stALE_E. coli_A17.F21.I1.R1 -1,stALE_E_coli_A17_F118_I1_R1,stALE_E_coli_A17_F118_I1_R1,Feist_11661_P40,A23,iTru7_114_11,ACATAGGC,iTru5_05_H,GATGGAGT,Feist_11661,pool1,stALE_E. coli_A17.F118.I1.R1 -1,stALE_E_coli_A18_F18_I1_R1,stALE_E_coli_A18_F18_I1_R1,Feist_11661_P40,C23,iTru7_114_12,CTCAGAGT,iTru5_06_H,CCTCGTTA,Feist_11661,pool2,stALE_E. coli_A18.F18.I1.R1 -1,stALE_E_coli_A18_F39_I1_R1,stALE_E_coli_A18_F39_I1_R1,Feist_11661_P40,E23,iTru7_201_01,CTTGGATG,iTru5_07_H,CGATTGGA,Feist_11661,pool1,stALE_E. coli_A18.F39.I1.R1 -1,stALE_E_coli_A18_F130_I1_R1,stALE_E_coli_A18_F130_I1_R1,Feist_11661_P40,G23,iTru7_201_02,CAGTTGGA,iTru5_08_H,CCAACGAA,Feist_11661,pool2,stALE_E. coli_A18.F130.I1.R1 -1,3A,3A,Gerwick_tubes,I23,iTru7_201_03,GATAGGCT,iTru5_09_H,AGAAGGAC,Gerwick_6123,pool1,3A -1,4A,4A,Gerwick_tubes,K23,iTru7_201_04,TTGACAGG,iTru5_10_H,TGACCGTT,Gerwick_6123,pool2,4A -1,BLANK_40_12G,BLANK_40_12G,Feist_11661_P40,M23,iTru7_201_05,AGAATGCC,iTru5_11_H,GCGTTAGA,Feist_11661,pool1,BLANK.40.12G -1,BLANK_40_12H,BLANK_40_12H,Feist_11661_P40,O23,iTru7_201_06,CTACATCC,iTru5_12_H,TCTAGGAG,Feist_11661,pool2,BLANK.40.12H -1,Pputida_JBEI__HGL_Pputida_107_BP6,Pputida_JBEI__HGL_Pputida_107_BP6,Feist_11661_P41,A2,iTru7_201_07,TCATGGTG,iTru5_13_A,GGTATAGG,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_107_BP6 -1,Pputida_JBEI__HGL_Pputida_108_BP7,Pputida_JBEI__HGL_Pputida_108_BP7,Feist_11661_P41,C2,iTru7_201_08,TACACGCT,iTru5_14_A,TCCGATCA,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_108_BP7 -1,Pputida_JBEI__HGL_Pputida_109_BP8,Pputida_JBEI__HGL_Pputida_109_BP8,Feist_11661_P41,E2,iTru7_201_09,TACGGTTG,iTru5_15_A,CGACCTAA,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_109_BP8 -1,Pputida_JBEI__HGL_Pputida_110_M2,Pputida_JBEI__HGL_Pputida_110_M2,Feist_11661_P41,G2,iTru7_201_10,GGATACCA,iTru5_16_A,GACATCTC,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_110_M2 -1,Pputida_JBEI__HGL_Pputida_111_M5,Pputida_JBEI__HGL_Pputida_111_M5,Feist_11661_P41,I2,iTru7_201_11,TCGACATC,iTru5_17_A,CCAGTATC,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_111_M5 -1,Pputida_TALE__HGL_Pputida_112,Pputida_TALE__HGL_Pputida_112,Feist_11661_P41,K2,iTru7_201_12,GTTGTAGC,iTru5_18_A,ACGCTTCT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_112 -1,Pputida_TALE__HGL_Pputida_113,Pputida_TALE__HGL_Pputida_113,Feist_11661_P41,M2,iTru7_202_01,ATACGACC,iTru5_19_A,AACGCACA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_113 -1,Pputida_TALE__HGL_Pputida_114,Pputida_TALE__HGL_Pputida_114,Feist_11661_P41,O2,iTru7_202_02,TTCCAAGG,iTru5_20_A,TGATCACG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_114 -1,Pputida_TALE__HGL_Pputida_115,Pputida_TALE__HGL_Pputida_115,Feist_11661_P41,A4,iTru7_202_03,TTGCAGAC,iTru5_21_A,GCGTATCA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_115 -1,Pputida_TALE__HGL_Pputida_116,Pputida_TALE__HGL_Pputida_116,Feist_11661_P41,C4,iTru7_202_04,TGCCATTC,iTru5_22_A,GTGTCCTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_116 -1,Pputida_TALE__HGL_Pputida_117,Pputida_TALE__HGL_Pputida_117,Feist_11661_P41,E4,iTru7_202_05,GATGTGTG,iTru5_23_A,GGTAACGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_117 -1,Pputida_TALE__HGL_Pputida_118,Pputida_TALE__HGL_Pputida_118,Feist_11661_P41,G4,iTru7_202_06,ACTCTCGA,iTru5_24_A,CGAGAGAA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_118 -1,Pputida_TALE__HGL_Pputida_119,Pputida_TALE__HGL_Pputida_119,Feist_11661_P41,I4,iTru7_202_07,GAGTCTCT,iTru5_13_B,CATTGACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_119 -1,Pputida_TALE__HGL_Pputida_120,Pputida_TALE__HGL_Pputida_120,Feist_11661_P41,K4,iTru7_202_08,CAACACCT,iTru5_14_B,GGTGATGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_120 -1,Pputida_TALE__HGL_Pputida_121,Pputida_TALE__HGL_Pputida_121,Feist_11661_P41,M4,iTru7_202_09,CAGTCTTC,iTru5_15_B,AACCGTGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_121 -1,Pputida_TALE__HGL_Pputida_122,Pputida_TALE__HGL_Pputida_122,Feist_11661_P41,O4,iTru7_202_10,GGACTGTT,iTru5_16_B,CCTATTGG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_122 -1,Pputida_TALE__HGL_Pputida_123,Pputida_TALE__HGL_Pputida_123,Feist_11661_P41,A6,iTru7_202_11,CTTAGTGG,iTru5_17_B,TCAGTAGG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_123 -1,Pputida_TALE__HGL_Pputida_124,Pputida_TALE__HGL_Pputida_124,Feist_11661_P41,C6,iTru7_202_12,ATTGCGTG,iTru5_18_B,TATGCGGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_124 -1,Pputida_TALE__HGL_Pputida_125,Pputida_TALE__HGL_Pputida_125,Feist_11661_P41,E6,iTru7_203_01,GTAACGAC,iTru5_19_B,ATGCCTAG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_125 -1,Pputida_TALE__HGL_Pputida_126,Pputida_TALE__HGL_Pputida_126,Feist_11661_P41,G6,iTru7_203_02,CTTGCTGT,iTru5_20_B,CTAGCAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_126 -1,Pputida_TALE__HGL_Pputida_127,Pputida_TALE__HGL_Pputida_127,Feist_11661_P41,I6,iTru7_203_03,GTTGTTCG,iTru5_21_B,AGGTCAAC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_127 -1,Pputida_TALE__HGL_Pputida_128,Pputida_TALE__HGL_Pputida_128,Feist_11661_P41,K6,iTru7_203_04,CGTTGAGT,iTru5_22_B,GAACGTGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_128 -1,Pputida_TALE__HGL_Pputida_129,Pputida_TALE__HGL_Pputida_129,Feist_11661_P41,M6,iTru7_203_05,TCGAACCA,iTru5_23_B,ATCATGCG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_129 -1,Pputida_TALE__HGL_Pputida_130,Pputida_TALE__HGL_Pputida_130,Feist_11661_P41,O6,iTru7_203_06,AGACCGTA,iTru5_24_B,CAACGAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_130 -1,Pputida_TALE__HGL_Pputida_131,Pputida_TALE__HGL_Pputida_131,Feist_11661_P41,A8,iTru7_203_07,CAGAGTGT,iTru5_13_C,CGCAATGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_131 -1,Pputida_TALE__HGL_Pputida_132,Pputida_TALE__HGL_Pputida_132,Feist_11661_P41,C8,iTru7_203_08,GACAAGAG,iTru5_14_C,AACAAGGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_132 -1,Pputida_TALE__HGL_Pputida_133,Pputida_TALE__HGL_Pputida_133,Feist_11661_P41,E8,iTru7_203_09,GAACACAC,iTru5_15_C,ACCATGTC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_133 -1,Pputida_TALE__HGL_Pputida_134,Pputida_TALE__HGL_Pputida_134,Feist_11661_P41,G8,iTru7_203_10,GCTTAGCT,iTru5_16_C,AATCCAGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_134 -1,Pputida_TALE__HGL_Pputida_135,Pputida_TALE__HGL_Pputida_135,Feist_11661_P41,I8,iTru7_203_11,GAAGGAAG,iTru5_17_C,TTGCAACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_135 -1,Pputida_TALE__HGL_Pputida_136,Pputida_TALE__HGL_Pputida_136,Feist_11661_P41,K8,iTru7_203_12,CAGTTCTG,iTru5_18_C,ACCTTCGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_136 -1,Pputida_TALE__HGL_Pputida_137,Pputida_TALE__HGL_Pputida_137,Feist_11661_P41,M8,iTru7_204_01,CAGGAGAT,iTru5_19_C,CATACGGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_137 -1,Pputida_TALE__HGL_Pputida_138,Pputida_TALE__HGL_Pputida_138,Feist_11661_P41,O8,iTru7_204_02,GTAGCATC,iTru5_20_C,GACCGATA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_138 -1,Pputida_TALE__HGL_Pputida_139,Pputida_TALE__HGL_Pputida_139,Feist_11661_P41,A10,iTru7_204_03,TCGTTCGT,iTru5_21_C,AAGCTGGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_139 -1,Pputida_TALE__HGL_Pputida_140,Pputida_TALE__HGL_Pputida_140,Feist_11661_P41,C10,iTru7_204_04,GGCAAGTT,iTru5_22_C,ACACCTCA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_140 -1,Pputida_TALE__HGL_Pputida_141,Pputida_TALE__HGL_Pputida_141,Feist_11661_P41,E10,iTru7_204_05,ACCATGTG,iTru5_23_C,CGGAGTAT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_141 -1,Pputida_TALE__HGL_Pputida_142,Pputida_TALE__HGL_Pputida_142,Feist_11661_P41,G10,iTru7_204_06,CAACGGAT,iTru5_24_C,CTCGACTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_142 -1,Pputida_TALE__HGL_Pputida_143,Pputida_TALE__HGL_Pputida_143,Feist_11661_P41,I10,iTru7_204_07,CAATCGAC,iTru5_13_D,ATCCACGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_143 -1,Pputida_TALE__HGL_Pputida_144,Pputida_TALE__HGL_Pputida_144,Feist_11661_P41,K10,iTru7_204_08,GTGTTCCT,iTru5_14_D,ACAGTTCG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_144 -1,Pputida_PALE__HGL_Pputida_145,Pputida_PALE__HGL_Pputida_145,Feist_11661_P41_diluted,M10,iTru7_204_09,AGGAACCT,iTru5_15_D,ACAAGACG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_145 -1,Pputida_PALE__HGL_Pputida_146,Pputida_PALE__HGL_Pputida_146,Feist_11661_P41_diluted,O10,iTru7_204_10,ACCTTCTC,iTru5_16_D,ATCGTGGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_146 -1,Pputida_PALE__HGL_Pputida_147,Pputida_PALE__HGL_Pputida_147,Feist_11661_P41_diluted,A12,iTru7_204_11,CCGTAAGA,iTru5_17_D,AGTCAGGT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_147 -1,Pputida_PALE__HGL_Pputida_148,Pputida_PALE__HGL_Pputida_148,Feist_11661_P41_diluted,C12,iTru7_204_12,ATCGGTGT,iTru5_18_D,CATCAACC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_148 -1,Pputida_PALE__HGL_Pputida_149,Pputida_PALE__HGL_Pputida_149,Feist_11661_P41_diluted,E12,iTru7_205_01,AGCTCCTA,iTru5_19_D,GGTCACTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_149 -1,Pputida_PALE__HGL_Pputida_150,Pputida_PALE__HGL_Pputida_150,Feist_11661_P41,G12,iTru7_205_02,CCTTGATC,iTru5_20_D,CGGCATTA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_150 -1,Pputida_PALE__HGL_Pputida_151,Pputida_PALE__HGL_Pputida_151,Feist_11661_P41_diluted,I12,iTru7_205_03,CCATTCAC,iTru5_21_D,ACTCGATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_151 -1,Pputida_PALE__HGL_Pputida_152,Pputida_PALE__HGL_Pputida_152,Feist_11661_P41,K12,iTru7_205_04,GGACAATC,iTru5_22_D,ATAGGTCC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_152 -1,Pputida_PALE__HGL_Pputida_153,Pputida_PALE__HGL_Pputida_153,Feist_11661_P41,M12,iTru7_205_05,AAGGCGTT,iTru5_23_D,CAGTCACA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_153 -1,Pputida_PALE__HGL_Pputida_154,Pputida_PALE__HGL_Pputida_154,Feist_11661_P41_diluted,O12,iTru7_205_06,GCCATAAC,iTru5_24_D,TAGTGGTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_154 -1,Pputida_PALE__HGL_Pputida_155,Pputida_PALE__HGL_Pputida_155,Feist_11661_P41_diluted,A14,iTru7_205_07,GAAGTTGG,iTru5_13_E,CTCCTGAA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_155 -1,Pputida_PALE__HGL_Pputida_156,Pputida_PALE__HGL_Pputida_156,Feist_11661_P41_diluted,C14,iTru7_205_08,AGCCAAGT,iTru5_14_E,AATCGCTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_156 -1,Pputida_PALE__HGL_Pputida_157,Pputida_PALE__HGL_Pputida_157,Feist_11661_P41,E14,iTru7_205_09,TGACTGAC,iTru5_15_E,TGATAGGC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_157 -1,Pputida_PALE__HGL_Pputida_158,Pputida_PALE__HGL_Pputida_158,Feist_11661_P41_diluted,G14,iTru7_205_10,CACCTGTT,iTru5_16_E,ATGCGTCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_158 -1,Pputida_PALE__HGL_Pputida_159,Pputida_PALE__HGL_Pputida_159,Feist_11661_P41,I14,iTru7_205_11,ATCCGGTA,iTru5_17_E,CAGCATAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_159 -1,Pputida_PALE__HGL_Pputida_160,Pputida_PALE__HGL_Pputida_160,Feist_11661_P41,K14,iTru7_205_12,ATCTGTCC,iTru5_18_E,AAGTGCAG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_160 -1,Pputida_PALE__HGL_Pputida_161,Pputida_PALE__HGL_Pputida_161,Feist_11661_P41_diluted,M14,iTru7_206_01,CCAAGACT,iTru5_19_E,GTATTCCG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_161 -1,Pputida_PALE__HGL_Pputida_162,Pputida_PALE__HGL_Pputida_162,Feist_11661_P41_diluted,O14,iTru7_206_02,ATGGCGAA,iTru5_20_E,GTGATCCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_162 -1,Pputida_PALE__HGL_Pputida_163,Pputida_PALE__HGL_Pputida_163,Feist_11661_P41_diluted,A16,iTru7_206_03,GGTAGTGT,iTru5_21_E,TATGGCAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_163 -1,Pputida_PALE__HGL_Pputida_164,Pputida_PALE__HGL_Pputida_164,Feist_11661_P41,C16,iTru7_206_04,TCGCTGTT,iTru5_22_E,ACCATAGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_164 -1,Pputida_PALE__HGL_Pputida_165,Pputida_PALE__HGL_Pputida_165,Feist_11661_P41_diluted,E16,iTru7_206_05,AACGTGGA,iTru5_23_E,CTCCAATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_165 -1,Pputida_PALE__HGL_Pputida_166,Pputida_PALE__HGL_Pputida_166,Feist_11661_P41,G16,iTru7_206_06,AACGACGT,iTru5_24_E,AGATACGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_166 -1,Pputida_PALE__HGL_Pputida_167,Pputida_PALE__HGL_Pputida_167,Feist_11661_P41,I16,iTru7_206_07,AACAGGAC,iTru5_13_F,TCGATGAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_167 -1,Pputida_PALE__HGL_Pputida_168,Pputida_PALE__HGL_Pputida_168,Feist_11661_P41,K16,iTru7_206_08,AAGCGCAT,iTru5_14_F,CCAACACT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_168 -1,Pputida_PALE__HGL_Pputida_169,Pputida_PALE__HGL_Pputida_169,Feist_11661_P41,M16,iTru7_206_09,CACTGACA,iTru5_15_F,CTTCACTG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_169 -1,Pputida_PALE__HGL_Pputida_170,Pputida_PALE__HGL_Pputida_170,Feist_11661_P41,O16,iTru7_206_10,AGGTCACT,iTru5_16_F,CGATGTTC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_170 -1,Pputida_PALE__HGL_Pputida_171,Pputida_PALE__HGL_Pputida_171,Feist_11661_P41,A18,iTru7_206_11,GTCACTGT,iTru5_17_F,ACCGGTTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_171 -1,Pputida_PALE__HGL_Pputida_172,Pputida_PALE__HGL_Pputida_172,Feist_11661_P41,C18,iTru7_206_12,ATGCCAAC,iTru5_18_F,CTTACAGC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_172 -1,Pputida_PALE__HGL_Pputida_173,Pputida_PALE__HGL_Pputida_173,Feist_11661_P41,E18,iTru7_207_01,CACGTTGT,iTru5_19_F,TGGCTCTT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_173 -1,Pputida_PALE__HGL_Pputida_174,Pputida_PALE__HGL_Pputida_174,Feist_11661_P41_diluted,G18,iTru7_207_02,TATTCCGG,iTru5_20_F,AAGACCGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_174 -1,Pputida_PALE__HGL_Pputida_175,Pputida_PALE__HGL_Pputida_175,Feist_11661_P41,I18,iTru7_207_03,TGCTTCCA,iTru5_21_F,GGACATCA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_175 -1,Pputida_PALE__HGL_Pputida_176,Pputida_PALE__HGL_Pputida_176,Feist_11661_P41_diluted,K18,iTru7_207_04,GTCTAGGT,iTru5_22_F,TTGGTGCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_176 -1,JM-Metabolic__GN0_2005,JM-Metabolic__GN0_2005,Feist_11661_P41,M18,iTru7_207_05,GTTCAACC,iTru5_23_F,AAGCGTTC,Feist_11661,pool1,JM-Metabolic__GN0_2005 -1,JM-Metabolic__GN0_2007,JM-Metabolic__GN0_2007,Feist_11661_P41,O18,iTru7_207_06,CGCAATCT,iTru5_24_F,ACTCTCCA,Feist_11661,pool2,JM-Metabolic__GN0_2007 -1,JM-Metabolic__GN0_2009,JM-Metabolic__GN0_2009,Feist_11661_P41,A20,iTru7_207_07,TTAAGCGG,iTru5_13_G,GAACCTTC,Feist_11661,pool1,JM-Metabolic__GN0_2009 -1,JM-Metabolic__GN0_2094,JM-Metabolic__GN0_2094,Feist_11661_P41_diluted,C20,iTru7_207_08,TGCTTGGT,iTru5_14_G,GGAACATG,Feist_11661,pool2,JM-Metabolic__GN0_2094 -1,JM-Metabolic__GN0_2099,JM-Metabolic__GN0_2099,Feist_11661_P41_diluted,E20,iTru7_207_09,ACACACTC,iTru5_15_G,GCCTATGT,Feist_11661,pool1,JM-Metabolic__GN0_2099 -1,JM-Metabolic__GN0_2148,JM-Metabolic__GN0_2148,Feist_11661_P41_diluted,G20,iTru7_207_10,CCACTTCT,iTru5_16_G,CCGTAACT,Feist_11661,pool2,JM-Metabolic__GN0_2148 -1,JM-Metabolic__GN0_2165,JM-Metabolic__GN0_2165,Feist_11661_P41_diluted,I20,iTru7_207_11,TTGGTCTC,iTru5_17_G,CGGATCAA,Feist_11661,pool1,JM-Metabolic__GN0_2165 -1,JM-Metabolic__GN0_2169,JM-Metabolic__GN0_2169,Feist_11661_P41,K20,iTru7_207_12,CTCATCAG,iTru5_18_G,CCACATTG,Feist_11661,pool2,JM-Metabolic__GN0_2169 -1,JM-Metabolic__GN0_2172,JM-Metabolic__GN0_2172,Feist_11661_P41,M20,iTru7_208_01,ATGACGTC,iTru5_19_G,CTCTATCG,Feist_11661,pool1,JM-Metabolic__GN0_2172 -1,JM-Metabolic__GN0_2175,JM-Metabolic__GN0_2175,Feist_11661_P41,O20,iTru7_208_02,AACCTTGG,iTru5_20_G,TGTGTCAG,Feist_11661,pool2,JM-Metabolic__GN0_2175 -1,JM-Metabolic__GN0_2183,JM-Metabolic__GN0_2183,Feist_11661_P41_diluted,A22,iTru7_208_03,GTCTTGCA,iTru5_21_G,CGCAACTA,Feist_11661,pool1,JM-Metabolic__GN0_2183 -1,JM-Metabolic__GN0_2215,JM-Metabolic__GN0_2215,Feist_11661_P41_diluted,C22,iTru7_208_04,CAAGTGCA,iTru5_22_G,GATCAGAC,Feist_11661,pool2,JM-Metabolic__GN0_2215 -1,JM-Metabolic__GN0_2254,JM-Metabolic__GN0_2254,Feist_11661_P41_diluted,E22,iTru7_208_05,TCCGAGTT,iTru5_23_G,ATTCCGCT,Feist_11661,pool1,JM-Metabolic__GN0_2254 -1,JM-Metabolic__GN0_2277,JM-Metabolic__GN0_2277,Feist_11661_P41_diluted,G22,iTru7_208_06,ACCTAAGG,iTru5_24_G,ATCCTTCC,Feist_11661,pool2,JM-Metabolic__GN0_2277 -1,JM-Metabolic__GN0_2290,JM-Metabolic__GN0_2290,Feist_11661_P41,I22,iTru7_208_07,TTGGACGT,iTru5_13_H,GCTTCACA,Feist_11661,pool1,JM-Metabolic__GN0_2290 -1,JM-Metabolic__GN0_2337,JM-Metabolic__GN0_2337,Feist_11661_P41_diluted,K22,iTru7_208_08,GATAGCGA,iTru5_14_H,CTTCGGTT,Feist_11661,pool2,JM-Metabolic__GN0_2337 -1,JM-Metabolic__GN0_2317,JM-Metabolic__GN0_2317,Feist_11661_P41_diluted,M22,iTru7_208_09,TTGGTGAG,iTru5_15_H,CATGGATC,Feist_11661,pool1,JM-Metabolic__GN0_2317 -1,JM-Metabolic__GN0_2354,JM-Metabolic__GN0_2354,Feist_11661_P41_diluted,O22,iTru7_208_10,AACTGGTG,iTru5_16_H,GTCAACAG,Feist_11661,pool2,JM-Metabolic__GN0_2354 -1,JM-Metabolic__GN0_2375,JM-Metabolic__GN0_2375,Feist_11661_P41_diluted,A24,iTru7_208_11,TAGCCGAA,iTru5_17_H,AATTCCGG,Feist_11661,pool1,JM-Metabolic__GN0_2375 -1,JM-Metabolic__GN0_2380,JM-Metabolic__GN0_2380,Feist_11661_P41_diluted,C24,iTru7_208_12,TGCGAACT,iTru5_18_H,GGCGAATA,Feist_11661,pool2,JM-Metabolic__GN0_2380 -1,JM-Metabolic__GN0_2393,JM-Metabolic__GN0_2393,Feist_11661_P41_diluted,E24,iTru7_209_01,GACTTAGG,iTru5_19_H,AGGAGGTT,Feist_11661,pool1,JM-Metabolic__GN0_2393 -1,JM-Metabolic__GN0_2404,JM-Metabolic__GN0_2404,Feist_11661_P41_diluted,G24,iTru7_209_02,ACACCAGT,iTru5_20_H,ACTCTGAG,Feist_11661,pool2,JM-Metabolic__GN0_2404 -1,5B,5B,Gerwick_tubes,I24,iTru7_209_03,CCTGATTG,iTru5_21_H,GCCTTCTT,Gerwick_6123,pool1,5B -1,6A,6A,Gerwick_tubes,K24,iTru7_209_04,TTGTGTGC,iTru5_22_H,TGGACCAT,Gerwick_6123,pool2,6A -1,BLANK_41_12G,BLANK_41_12G,Feist_11661_P41,M24,iTru7_209_05,TACCACAG,iTru5_23_H,GCATAGTC,Gerwick_6123,pool1,BLANK.41.12G -1,BLANK_41_12H,BLANK_41_12H,Feist_11661_P41,O24,iTru7_209_06,ATTCGAGG,iTru5_24_H,TACACACG,Feist_11661,pool2,BLANK.41.12H -1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_14,Deoxyribose_PALE_ALE__MG1655_BOP27_4_14,Feist_11661_P42,B1,iTru7_209_07,GCACGTAA,iTru5_101_A,AACAACCG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_14 -1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_23,Deoxyribose_PALE_ALE__MG1655_BOP27_4_23,Feist_11661_P42,D1,iTru7_209_08,GTGTGACA,iTru5_102_A,AAGCCTGA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_4_23 -1,Deoxyribose_PALE_ALE__MG1655_BOP27_4_48,Deoxyribose_PALE_ALE__MG1655_BOP27_4_48,Feist_11661_P42,F1,iTru7_209_09,CTGGTTCT,iTru5_103_A,AAGGACCA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_48 -1,Deoxyribose_PALE_ALE__MG1655_BOP27_6_21,Deoxyribose_PALE_ALE__MG1655_BOP27_6_21,Feist_11661_P42,H1,iTru7_209_10,ACTGTGTC,iTru5_104_A,ACAACGTG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_6_21 -1,Deoxyribose_PALE_ALE__MG1655_BOP27_6_35,Deoxyribose_PALE_ALE__MG1655_BOP27_6_35,Feist_11661_P42,J1,iTru7_209_11,CCATACGT,iTru5_105_A,ACGAACGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_6_35 -1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_13,Deoxyribose_PALE_ALE__MG1655_BOP27_10_13,Feist_11661_P42,L1,iTru7_209_12,GGTACTAC,iTru5_106_A,ACGTCCAA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_13 -1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_28,Deoxyribose_PALE_ALE__MG1655_BOP27_10_28,Feist_11661_P42,N1,iTru7_210_01,CAGTCCAA,iTru5_107_A,ACTGGTGT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_10_28 -1,Deoxyribose_PALE_ALE__MG1655_BOP27_10_51,Deoxyribose_PALE_ALE__MG1655_BOP27_10_51,Feist_11661_P42,P1,iTru7_210_02,TCGTAGTC,iTru5_108_A,AGATCGTC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_51 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_19,Deoxyribose_PALE_ALE__MG1655_Lib4_18_19,Feist_11661_P42,B3,iTru7_210_03,TCGAGTGA,iTru5_109_A,AGCGAGAT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_19 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_59,Deoxyribose_PALE_ALE__MG1655_Lib4_18_59,Feist_11661_P42,D3,iTru7_210_04,TGTAGCCA,iTru5_110_A,AGGATAGC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_18_59 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_18_35,Deoxyribose_PALE_ALE__MG1655_Lib4_18_35,Feist_11661_P42,F3,iTru7_210_05,TGCAGGTA,iTru5_111_A,AGGTGTTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_35 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_16,Deoxyribose_PALE_ALE__MG1655_Lib4_20_16,Feist_11661_P42,H3,iTru7_210_06,CTAGGTGA,iTru5_112_A,AGTCTTGG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_16 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_43,Deoxyribose_PALE_ALE__MG1655_Lib4_20_43,Feist_11661_P42,J3,iTru7_210_07,CTCCATGT,iTru5_101_B,GGTTGGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_20_43 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_20_71,Deoxyribose_PALE_ALE__MG1655_Lib4_20_71,Feist_11661_P42,L3,iTru7_210_08,CTTACAGC,iTru5_102_B,GGAGGAAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_71 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_16,Deoxyribose_PALE_ALE__MG1655_Lib4_22_16,Feist_11661_P42,N3,iTru7_210_09,CGTATTCG,iTru5_103_B,GTAAGGTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_16 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_28,Deoxyribose_PALE_ALE__MG1655_Lib4_22_28,Feist_11661_P42,P3,iTru7_210_10,ATTCTGGC,iTru5_104_B,GGTGTACA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_22_28 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_22_52,Deoxyribose_PALE_ALE__MG1655_Lib4_22_52,Feist_11661_P42,B5,iTru7_210_11,TACCAGGA,iTru5_105_B,GGATGTAG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_52 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_9,Deoxyribose_PALE_ALE__MG1655_Lib4_24_9,Feist_11661_P42,D5,iTru7_210_12,TACATCGG,iTru5_106_B,GTCCTGTT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_9 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_24,Deoxyribose_PALE_ALE__MG1655_Lib4_24_24,Feist_11661_P42,F5,iTru7_301_01,GTGGTGTT,iTru5_107_B,GTACCACA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_24_24 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_24_52,Deoxyribose_PALE_ALE__MG1655_Lib4_24_52,Feist_11661_P42,H5,iTru7_301_02,CGCATGAT,iTru5_108_B,GATCTCAG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_52 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_6,Deoxyribose_PALE_ALE__MG1655_Lib4_26_6,Feist_11661_P42,J5,iTru7_301_03,AGTCGACA,iTru5_109_B,GAGCTCTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_6 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_27,Deoxyribose_PALE_ALE__MG1655_Lib4_26_27,Feist_11661_P42,L5,iTru7_301_04,GTGAGCTT,iTru5_110_B,TACTAGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_26_27 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_26_69,Deoxyribose_PALE_ALE__MG1655_Lib4_26_69,Feist_11661_P42,N5,iTru7_301_05,GACATTCC,iTru5_111_B,GCACACAA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_69 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_13,Deoxyribose_PALE_ALE__MG1655_Lib4_28_13,Feist_11661_P42,P5,iTru7_301_06,AGTTCGTC,iTru5_112_B,GAATCACC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_13 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_28,Deoxyribose_PALE_ALE__MG1655_Lib4_28_28,Feist_11661_P42,B7,iTru7_301_07,TAATGCCG,iTru5_101_C,AACAGCGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_28_28 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_28_53,Deoxyribose_PALE_ALE__MG1655_Lib4_28_53,Feist_11661_P42,D7,iTru7_301_08,CGACCATT,iTru5_102_C,AAGCGACT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_53 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_7,Deoxyribose_PALE_ALE__MG1655_Lib4_30_7,Feist_11661_P42,F7,iTru7_301_09,CTGAAGCT,iTru5_103_C,AAGGCGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_7 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_22,Deoxyribose_PALE_ALE__MG1655_Lib4_30_22,Feist_11661_P42,H7,iTru7_301_10,TTGAGGCA,iTru5_104_C,ACACCGAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_30_22 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_30_60,Deoxyribose_PALE_ALE__MG1655_Lib4_30_60,Feist_11661_P42,J7,iTru7_301_11,GATCGAGT,iTru5_105_C,ACGAATCC,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_60 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_6,Deoxyribose_PALE_ALE__MG1655_Lib4_32_6,Feist_11661_P42,L7,iTru7_301_12,ATACTCCG,iTru5_106_C,ACTACGGT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_6 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_20,Deoxyribose_PALE_ALE__MG1655_Lib4_32_20,Feist_11661_P42,N7,iTru7_302_01,AAGTCCGT,iTru5_107_C,AGAAGCCT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_32_20 -1,Deoxyribose_PALE_ALE__MG1655_Lib4_32_56,Deoxyribose_PALE_ALE__MG1655_Lib4_32_56,Feist_11661_P42,P7,iTru7_302_02,TAGCGTCT,iTru5_108_C,AGATTGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_56 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_24,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_24,Feist_11661_P42,B9,iTru7_302_03,TGACGCAT,iTru5_109_C,AGCGTGTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_24 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_57,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_57,Feist_11661_P42,D9,iTru7_302_04,AGCGTGTT,iTru5_110_C,AGGCTGAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_57 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_69,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_69,Feist_11661_P42,F9,iTru7_302_05,TGCACCAA,iTru5_111_C,AGGTTCCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_69 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_23,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_23,Feist_11661_P42,H9,iTru7_302_06,ATCACACG,iTru5_112_C,AGTGACCT,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_23 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_50,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_50,Feist_11661_P42,J9,iTru7_302_07,ATGCCTGT,iTru5_101_D,GGTTAGCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_50 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_61,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_61,Feist_11661_P42,L9,iTru7_302_08,ACCTGACT,iTru5_102_D,GTAGCGTA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_61 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_22,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_22,Feist_11661_P42,N9,iTru7_302_09,GCTTCGAA,iTru5_103_D,GGACTACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_22 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_36,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_36,Feist_11661_P42,P9,iTru7_302_10,CGGTCATA,iTru5_104_D,TGGTTCGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_36 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_46,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_46,Feist_11661_P42,B11,iTru7_302_11,GTTAGACG,iTru5_105_D,GGAGTCTT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_46 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_23,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_23,Feist_11661_P42,D11,iTru7_302_12,TCTAACGC,iTru5_106_D,GGATTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_23 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_41,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_41,Feist_11661_P42,F11,iTru7_303_01,ATAGCGGT,iTru5_107_D,TCGGATTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_41 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_51,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_51,Feist_11661_P42,H11,iTru7_303_02,GGACCTAT,iTru5_108_D,GAGCAATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_51 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_25,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_25,Feist_11661_P42,J11,iTru7_303_03,CGATGCTT,iTru5_109_D,GATCCACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_25 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_58,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_58,Feist_11661_P42,L11,iTru7_303_04,GAGCTTGT,iTru5_110_D,GAAGACTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_58 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_64,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_64,Feist_11661_P42,N11,iTru7_303_05,GTGAAGTG,iTru5_111_D,GCCACTTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_64 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_25,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_25,Feist_11661_P42,P11,iTru7_303_06,GAGTGGTT,iTru5_112_D,TCCATTGC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_25 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_55,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_55,Feist_11661_P42,B13,iTru7_303_07,TGATACGC,iTru5_101_E,AACAGTCC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_55 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_63,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_63,Feist_11661_P42,D13,iTru7_303_08,AGCAGATG,iTru5_102_E,AAGCTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_63 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_23,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_23,Feist_11661_P42,F13,iTru7_303_09,CCAGTGTT,iTru5_103_E,AAGTCCTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_23 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_46,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_46,Feist_11661_P42,H13,iTru7_303_10,ATTCCTCC,iTru5_104_E,ACACTCTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_46 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_51,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_51,Feist_11661_P42,J13,iTru7_303_11,CTAACTCG,iTru5_105_E,ACGGTACA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_51 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_25,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_25,Feist_11661_P42,L13,iTru7_303_12,GATGAGAC,iTru5_106_E,ACTCCTAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_25 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_49,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_49,Feist_11661_P42,N13,iTru7_304_01,TCAGGCTT,iTru5_107_E,AGAGGATG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_49 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_57,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_57,Feist_11661_P42,P13,iTru7_304_02,GTTCTCGT,iTru5_108_E,AGCCGTAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_57 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_24,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_24,Feist_11661_P42,B15,iTru7_304_03,ATCGATCG,iTru5_109_E,AGCTTCAG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_24 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_42,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_42,Feist_11661_P42,D15,iTru7_304_04,CCTCAGTT,iTru5_110_E,AGGTAGGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_42 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_62,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_62,Feist_11661_P42,F15,iTru7_304_05,ACTGCTAG,iTru5_111_E,AGTACACG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_62 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_21,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_21,Feist_11661_P42,H15,iTru7_304_06,TCCGTGAA,iTru5_112_E,AGTGCATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_21 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_41,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_41,Feist_11661_P42,J15,iTru7_304_07,GGATTCGT,iTru5_101_F,TTGGACTG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_41 -1,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_50,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_50,Feist_11661_P42,L15,iTru7_304_08,GGTCAGAT,iTru5_102_F,GTCGATTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_50 -1,JM-Metabolic__GN02514,JM-Metabolic__GN02514,Feist_11661_P42,N15,iTru7_304_09,TCGTGGAT,iTru5_103_F,GGCATTCT,Feist_11661,pool1,JM-Metabolic__GN02514 -1,JM-Metabolic__GN02529,JM-Metabolic__GN02529,Feist_11661_P42_diluted,P15,iTru7_304_10,CGTGTGTA,iTru5_104_F,TGGTATCC,Feist_11661,pool2,JM-Metabolic__GN02529 -1,JM-Metabolic__GN02531,JM-Metabolic__GN02531,Feist_11661_P42_diluted,B17,iTru7_304_11,GTGTCTGA,iTru5_105_F,GGCAAGTT,Feist_11661,pool1,JM-Metabolic__GN02531 -1,JM-Metabolic__GN02567,JM-Metabolic__GN02567,Feist_11661_P42,D17,iTru7_304_12,GAATCGTG,iTru5_106_F,GTCTGAGT,Feist_11661,pool2,JM-Metabolic__GN02567 -1,JM-Metabolic__GN02590,JM-Metabolic__GN02590,Feist_11661_P42_diluted,F17,iTru7_305_01,GCGATAGT,iTru5_107_F,TCTACGCA,Feist_11661,pool1,JM-Metabolic__GN02590 -1,JM-Metabolic__GN02657,JM-Metabolic__GN02657,Feist_11661_P42_diluted,H17,iTru7_305_02,GGCTATTG,iTru5_108_F,GAGGCATT,Feist_11661,pool2,JM-Metabolic__GN02657 -1,JM-Metabolic__GN02748,JM-Metabolic__GN02748,Feist_11661_P42,J17,iTru7_305_03,AGTTACGG,iTru5_109_F,GCTAAGGA,Feist_11661,pool1,JM-Metabolic__GN02748 -1,JM-Metabolic__GN02766,JM-Metabolic__GN02766,Feist_11661_P42_diluted,L17,iTru7_305_04,CGTACGAA,iTru5_110_F,GCCAGAAT,Feist_11661,pool2,JM-Metabolic__GN02766 -1,JM-Metabolic__GN02769,JM-Metabolic__GN02769,Feist_11661_P42_diluted,N17,iTru7_305_05,ACCACGAT,iTru5_111_F,TAAGTGGC,Feist_11661,pool1,JM-Metabolic__GN02769 -1,JM-Metabolic__GN02787,JM-Metabolic__GN02787,Feist_11661_P42_diluted,P17,iTru7_305_06,GATTACCG,iTru5_112_F,GCAATGAG,Feist_11661,pool2,JM-Metabolic__GN02787 -1,JM-Metabolic__GN03132,JM-Metabolic__GN03132,Feist_11661_P42,B19,iTru7_305_07,GAGATACG,iTru5_101_G,AACTGAGG,Feist_11661,pool1,JM-Metabolic__GN03132 -1,JM-Metabolic__GN03218,JM-Metabolic__GN03218,Feist_11661_P42_diluted,D19,iTru7_305_08,CGACGTTA,iTru5_102_G,AAGGAAGG,Feist_11661,pool2,JM-Metabolic__GN03218 -1,JM-Metabolic__GN03252,JM-Metabolic__GN03252,Feist_11661_P42_diluted,F19,iTru7_305_09,GAGATGTC,iTru5_103_G,AATGGTCG,Feist_11661,pool1,JM-Metabolic__GN03252 -1,JM-Metabolic__GN03409,JM-Metabolic__GN03409,Feist_11661_P42_diluted,H19,iTru7_305_10,GATTGGAG,iTru5_104_G,ACAGCAAG,Feist_11661,pool2,JM-Metabolic__GN03409 -1,JM-Metabolic__GN04014,JM-Metabolic__GN04014,Feist_11661_P42_diluted,J19,iTru7_305_11,GCAATTCG,iTru5_105_G,ACGTATGG,Feist_11661,pool1,JM-Metabolic__GN04014 -1,JM-Metabolic__GN04094,JM-Metabolic__GN04094,Feist_11661_P42_diluted,L19,iTru7_305_12,CGTCAATG,iTru5_106_G,ACTGCACT,Feist_11661,pool2,JM-Metabolic__GN04094 -1,JM-Metabolic__GN04255,JM-Metabolic__GN04255,Feist_11661_P42_diluted,N19,iTru7_401_01,ATGCACGA,iTru5_107_G,AGAGTCCA,Feist_11661,pool1,JM-Metabolic__GN04255 -1,JM-Metabolic__GN04306,JM-Metabolic__GN04306,Feist_11661_P42_diluted,P19,iTru7_401_02,ATCGCCAT,iTru5_108_G,AGCCTATC,Feist_11661,pool2,JM-Metabolic__GN04306 -1,JM-Metabolic__GN04428,JM-Metabolic__GN04428,Feist_11661_P42_diluted,B21,iTru7_401_03,TCTCGCAA,iTru5_109_G,AGGAACAC,Feist_11661,pool1,JM-Metabolic__GN04428 -1,JM-Metabolic__GN04488,JM-Metabolic__GN04488,Feist_11661_P42_diluted,D21,iTru7_401_04,ACGACAGA,iTru5_110_G,AGGTCTGT,Feist_11661,pool2,JM-Metabolic__GN04488 -1,JM-Metabolic__GN04540,JM-Metabolic__GN04540,Feist_11661_P42_diluted,F21,iTru7_401_05,TTACGGCT,iTru5_111_G,AGTATGCC,Feist_11661,pool1,JM-Metabolic__GN04540 -1,JM-Metabolic__GN04563,JM-Metabolic__GN04563,Feist_11661_P42_diluted,H21,iTru7_401_06,GAGGACTT,iTru5_112_G,AGTTCGCA,Feist_11661,pool2,JM-Metabolic__GN04563 -1,JM-Metabolic__GN04612,JM-Metabolic__GN04612,Feist_11661_P42_diluted,J21,iTru7_401_07,GGCATACT,iTru5_101_H,TGGAAGCA,Feist_11661,pool1,JM-Metabolic__GN04612 -1,JM-Metabolic__GN04665,JM-Metabolic__GN04665,Feist_11661_P42_diluted,L21,iTru7_401_08,CGTAGGTT,iTru5_102_H,GTCAGTCA,Feist_11661,pool2,JM-Metabolic__GN04665 -1,JM-Metabolic__GN04682,JM-Metabolic__GN04682,Feist_11661_P42_diluted,N21,iTru7_401_09,ATATGCGC,iTru5_103_H,GTAACCGA,Feist_11661,pool1,JM-Metabolic__GN04682 -1,JM-Metabolic__GN05002,JM-Metabolic__GN05002,Feist_11661_P42_diluted,P21,iTru7_401_10,GGATGTAG,iTru5_104_H,GTTATGGC,Feist_11661,pool2,JM-Metabolic__GN05002 -1,JM-Metabolic__GN05109,JM-Metabolic__GN05109,Feist_11661_P42_diluted,B23,iTru7_401_11,CCTGTCAT,iTru5_105_H,GTAAGCAC,Feist_11661,pool1,JM-Metabolic__GN05109 -1,JM-Metabolic__GN05128,JM-Metabolic__GN05128,Feist_11661_P42_diluted,D23,iTru7_401_12,TGCTCATG,iTru5_106_H,GGAATGTC,Feist_11661,pool2,JM-Metabolic__GN05128 -1,JM-Metabolic__GN05367,JM-Metabolic__GN05367,Feist_11661_P42_diluted,F23,iTru7_402_01,TGAAGACG,iTru5_107_H,GAGAAGGT,Feist_11661,pool1,JM-Metabolic__GN05367 -1,JM-Metabolic__GN05377,JM-Metabolic__GN05377,Feist_11661_P42_diluted,H23,iTru7_402_02,GTTACGCA,iTru5_108_H,GAGTAGAG,Feist_11661,pool2,JM-Metabolic__GN05377 -1,7A,7A,Gerwick_tubes,J23,iTru7_402_03,ACTCAGAC,iTru5_109_H,GCATTGGT,Gerwick_6123,pool1,7A -1,8A,8A,Gerwick_tubes,L23,iTru7_402_04,GTCCACAT,iTru5_110_H,TCCAGCAA,Gerwick_6123,pool2,8A -1,BLANK_42_12G,BLANK_42_12G,Feist_11661_P42,N23,iTru7_402_05,CGCTAGTA,iTru5_111_H,GAATCCGT,Feist_11661,pool1,BLANK.42.12G -1,BLANK_42_12H,BLANK_42_12H,Feist_11661_P42,P23,iTru7_402_06,GAATCCGA,iTru5_112_H,TACATCGG,Feist_11661,pool2,BLANK.42.12H +2,CDPH-SAL_Salmonella_Typhi_MDL-143,CDPH-SAL_Salmonella_Typhi_MDL-143,Feist_11661_P40,A1,iTru7_107_07,CCGACTAT,iTru5_01_A,ACCGACAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-143 +2,CDPH-SAL_Salmonella_Typhi_MDL-144,CDPH-SAL_Salmonella_Typhi_MDL-144,Feist_11661_P40,C1,iTru7_107_08,CCGACTAT,iTru5_02_A,CTTCGCAA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-144 +2,CDPH-SAL_Salmonella_Typhi_MDL-145,CDPH-SAL_Salmonella_Typhi_MDL-145,Feist_11661_P40,E1,iTru7_107_09,GCCTTGTT,iTru5_03_A,AACACCAC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-145 +2,CDPH-SAL_Salmonella_Typhi_MDL-146,CDPH-SAL_Salmonella_Typhi_MDL-146,Feist_11661_P40,G1,iTru7_107_10,AACTTGCC,iTru5_04_A,CGTATCTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-146 +2,CDPH-SAL_Salmonella_Typhi_MDL-147,CDPH-SAL_Salmonella_Typhi_MDL-147,Feist_11661_P40,I1,iTru7_107_11,CAATGTGG,iTru5_05_A,GGTACGAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-147 +2,CDPH-SAL_Salmonella_Typhi_MDL-148,CDPH-SAL_Salmonella_Typhi_MDL-148,Feist_11661_P40,K1,iTru7_107_12,AAGGCTGA,iTru5_06_A,CGATCGAT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-148 +2,CDPH-SAL_Salmonella_Typhi_MDL-149,CDPH-SAL_Salmonella_Typhi_MDL-149,Feist_11661_P40,M1,iTru7_108_01,TTACCGAG,iTru5_07_A,AAGACACC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-149 +2,CDPH-SAL_Salmonella_Typhi_MDL-150,CDPH-SAL_Salmonella_Typhi_MDL-150,Feist_11661_P40,O1,iTru7_108_02,GTCCTAAG,iTru5_08_A,CATCTGCT,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-150 +2,CDPH-SAL_Salmonella_Typhi_MDL-151,CDPH-SAL_Salmonella_Typhi_MDL-151,Feist_11661_P40,A3,iTru7_108_03,GAAGGTTC,iTru5_09_A,CTCTCAGA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-151 +2,CDPH-SAL_Salmonella_Typhi_MDL-152,CDPH-SAL_Salmonella_Typhi_MDL-152,Feist_11661_P40,C3,iTru7_108_04,GAAGAGGT,iTru5_10_A,TCGTCTGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-152 +2,CDPH-SAL_Salmonella_Typhi_MDL-153,CDPH-SAL_Salmonella_Typhi_MDL-153,Feist_11661_P40,E3,iTru7_108_05,TCTGAGAG,iTru5_11_A,CAATAGCC,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-153 +2,CDPH-SAL_Salmonella_Typhi_MDL-154,CDPH-SAL_Salmonella_Typhi_MDL-154,Feist_11661_P40,G3,iTru7_108_06,ACCGCATA,iTru5_12_A,CATTCGTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-154 +2,CDPH-SAL_Salmonella_Typhi_MDL-155,CDPH-SAL_Salmonella_Typhi_MDL-155,Feist_11661_P40,I3,iTru7_108_07,GAAGTACC,iTru5_01_B,AGTGGCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-155 +2,CDPH-SAL_Salmonella_Typhi_MDL-156,CDPH-SAL_Salmonella_Typhi_MDL-156,Feist_11661_P40,K3,iTru7_108_08,CAGGTATC,iTru5_02_B,GTGGTATG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-156 +2,CDPH-SAL_Salmonella_Typhi_MDL-157,CDPH-SAL_Salmonella_Typhi_MDL-157,Feist_11661_P40,M3,iTru7_108_09,TCTCTAGG,iTru5_03_B,TGAGCTGT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-157 +2,CDPH-SAL_Salmonella_Typhi_MDL-158,CDPH-SAL_Salmonella_Typhi_MDL-158,Feist_11661_P40,O3,iTru7_108_10,AAGCACTG,iTru5_04_B,CGTCAAGA,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-158 +2,CDPH-SAL_Salmonella_Typhi_MDL-159,CDPH-SAL_Salmonella_Typhi_MDL-159,Feist_11661_P40,A5,iTru7_108_11,CCAAGCAA,iTru5_05_B,AAGCATCG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-159 +2,CDPH-SAL_Salmonella_Typhi_MDL-160,CDPH-SAL_Salmonella_Typhi_MDL-160,Feist_11661_P40,C5,iTru7_108_12,TGTTCGAG,iTru5_06_B,TACTCCAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-160 +2,CDPH-SAL_Salmonella_Typhi_MDL-161,CDPH-SAL_Salmonella_Typhi_MDL-161,Feist_11661_P40,E5,iTru7_109_01,CTCGTCTT,iTru5_07_B,GATACCTG,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-161 +2,CDPH-SAL_Salmonella_Typhi_MDL-162,CDPH-SAL_Salmonella_Typhi_MDL-162,Feist_11661_P40,G5,iTru7_109_02,CGAACTGT,iTru5_08_B,ACCTCTTC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-162 +2,CDPH-SAL_Salmonella_Typhi_MDL-163,CDPH-SAL_Salmonella_Typhi_MDL-163,Feist_11661_P40,I5,iTru7_109_03,CATTCGGT,iTru5_09_B,ACGGACTT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-163 +2,CDPH-SAL_Salmonella_Typhi_MDL-164,CDPH-SAL_Salmonella_Typhi_MDL-164,Feist_11661_P40,K5,iTru7_109_04,TCGGTTAC,iTru5_10_B,CATGTGTG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-164 +2,CDPH-SAL_Salmonella_Typhi_MDL-165,CDPH-SAL_Salmonella_Typhi_MDL-165,Feist_11661_P40,M5,iTru7_109_05,AAGTCGAG,iTru5_11_B,TGCCTCAA,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-165 +2,CDPH-SAL_Salmonella_Typhi_MDL-166,CDPH-SAL_Salmonella_Typhi_MDL-166,Feist_11661_P40,O5,iTru7_109_06,TATCGGTC,iTru5_12_B,ATCTGACC,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-166 +2,CDPH-SAL_Salmonella_Typhi_MDL-167,CDPH-SAL_Salmonella_Typhi_MDL-167,Feist_11661_P40,A7,iTru7_109_07,TATTCGCC,iTru5_01_C,CACAGACT,Feist_11661,pool1,CDPH-SAL_Salmonella Typhi_MDL-167 +2,CDPH-SAL_Salmonella_Typhi_MDL-168,CDPH-SAL_Salmonella_Typhi_MDL-168,Feist_11661_P40,C7,iTru7_109_08,GTATTGGC,iTru5_02_C,CACTGTAG,Feist_11661,pool2,CDPH-SAL_Salmonella Typhi_MDL-168 +2,P21_E_coli_ELI344,P21_E_coli_ELI344,Feist_11661_P40,E7,iTru7_109_09,AGTCGCTT,iTru5_03_C,CACAGGAA,Feist_11661,pool1,P21_E. coli_ELI344 +2,P21_E_coli_ELI345,P21_E_coli_ELI345,Feist_11661_P40,G7,iTru7_109_10,TGGCACTA,iTru5_04_C,CCATGAAC,Feist_11661,pool2,P21_E. coli_ELI345 +2,P21_E_coli_ELI347,P21_E_coli_ELI347,Feist_11661_P40,I7,iTru7_109_11,GGTTGTCA,iTru5_05_C,GCCAATAC,Feist_11661,pool1,P21_E. coli_ELI347 +2,P21_E_coli_ELI348,P21_E_coli_ELI348,Feist_11661_P40,K7,iTru7_109_12,AACCTCCT,iTru5_06_C,AGCTACCA,Feist_11661,pool2,P21_E. coli_ELI348 +2,P21_E_coli_ELI349,P21_E_coli_ELI349,Feist_11661_P40,M7,iTru7_110_01,ATGACCAG,iTru5_07_C,AACCGAAC,Feist_11661,pool1,P21_E. coli_ELI349 +2,P21_E_coli_ELI350,P21_E_coli_ELI350,Feist_11661_P40_diluted,O7,iTru7_110_02,AACCGTTC,iTru5_08_C,ATCGCAAC,Feist_11661,pool2,P21_E. coli_ELI350 +2,P21_E_coli_ELI351,P21_E_coli_ELI351,Feist_11661_P40,A9,iTru7_110_03,TCCAATCG,iTru5_09_C,GTTGCTGT,Feist_11661,pool1,P21_E. coli_ELI351 +2,P21_E_coli_ELI352,P21_E_coli_ELI352,Feist_11661_P40,C9,iTru7_110_04,CTGCACTT,iTru5_10_C,TCTAGTCC,Feist_11661,pool2,P21_E. coli_ELI352 +2,P21_E_coli_ELI353,P21_E_coli_ELI353,Feist_11661_P40,E9,iTru7_110_05,CGCTTAAC,iTru5_11_C,GACGAACT,Feist_11661,pool1,P21_E. coli_ELI353 +2,P21_E_coli_ELI354,P21_E_coli_ELI354,Feist_11661_P40,G9,iTru7_110_06,CACCACTA,iTru5_12_C,TTCGTACG,Feist_11661,pool2,P21_E. coli_ELI354 +2,P21_E_coli_ELI355,P21_E_coli_ELI355,Feist_11661_P40,I9,iTru7_110_07,ACAGCAAC,iTru5_01_D,CGACACTT,Feist_11661,pool1,P21_E. coli_ELI355 +2,P21_E_coli_ELI357,P21_E_coli_ELI357,Feist_11661_P40,K9,iTru7_110_08,GGAAGGAT,iTru5_02_D,AGACGCTA,Feist_11661,pool2,P21_E. coli_ELI357 +2,P21_E_coli_ELI358,P21_E_coli_ELI358,Feist_11661_P40_diluted,M9,iTru7_110_09,GGCGTTAT,iTru5_03_D,TGACAACC,Feist_11661,pool1,P21_E. coli_ELI358 +2,P21_E_coli_ELI359,P21_E_coli_ELI359,Feist_11661_P40,O9,iTru7_110_10,CTGTTGAC,iTru5_04_D,GGTACTTC,Feist_11661,pool2,P21_E. coli_ELI359 +2,P21_E_coli_ELI361,P21_E_coli_ELI361,Feist_11661_P40_diluted,A11,iTru7_110_11,GTCATCGA,iTru5_05_D,CTGTATGC,Feist_11661,pool1,P21_E. coli_ELI361 +2,P21_E_coli_ELI362,P21_E_coli_ELI362,Feist_11661_P40,C11,iTru7_110_12,TGACTTCG,iTru5_06_D,TCGACAAG,Feist_11661,pool2,P21_E. coli_ELI362 +2,P21_E_coli_ELI363,P21_E_coli_ELI363,Feist_11661_P40_diluted,E11,iTru7_111_01,CGATAGAG,iTru5_07_D,GCTGAATC,Feist_11661,pool1,P21_E. coli_ELI363 +2,P21_E_coli_ELI364,P21_E_coli_ELI364,Feist_11661_P40,G11,iTru7_111_02,TTCGTTGG,iTru5_08_D,AGTTGTGC,Feist_11661,pool2,P21_E. coli_ELI364 +2,P21_E_coli_ELI365,P21_E_coli_ELI365,Feist_11661_P40,I11,iTru7_111_03,TGGAGAGT,iTru5_09_D,TGTCGACT,Feist_11661,pool1,P21_E. coli_ELI365 +2,P21_E_coli_ELI366,P21_E_coli_ELI366,Feist_11661_P40_diluted,K11,iTru7_111_04,TCAGACGA,iTru5_10_D,AAGGCTCT,Feist_11661,pool2,P21_E. coli_ELI366 +2,P21_E_coli_ELI367,P21_E_coli_ELI367,Feist_11661_P40_diluted,M11,iTru7_111_05,GACGAATG,iTru5_11_D,CCTAACAG,Feist_11661,pool1,P21_E. coli_ELI367 +2,P21_E_coli_ELI368,P21_E_coli_ELI368,Feist_11661_P40,O11,iTru7_111_06,CATGAGGA,iTru5_12_D,AAGACGAG,Feist_11661,pool2,P21_E. coli_ELI368 +2,P21_E_coli_ELI369,P21_E_coli_ELI369,Feist_11661_P40,A13,iTru7_111_07,CGGTTGTT,iTru5_01_E,GACTTGTG,Feist_11661,pool1,P21_E. coli_ELI369 +2,stALE_E_coli_A1_F21_I1R1,stALE_E_coli_A1_F21_I1R1,Feist_11661_P40,C13,iTru7_111_08,TCCGTATG,iTru5_02_E,CAACTCCA,Feist_11661,pool2,stALE_E. coli_A1.F21.I1.R1 +2,stALE_E_coli_A2_F21_I1R1,stALE_E_coli_A2_F21_I1R1,Feist_11661_P40,E13,iTru7_111_09,TGTGGTAC,iTru5_03_E,TGTTCCGT,Feist_11661,pool1,stALE_E. coli_A2.F21.I1.R1 +2,stALE_E_coli_A3_F18_I1R1,stALE_E_coli_A3_F18_I1R1,Feist_11661_P40,G13,iTru7_111_10,AGAACGAG,iTru5_04_E,ACCGCTAT,Feist_11661,pool2,stALE_E. coli_A3.F18.I1.R1 +2,stALE_E_coli_A3_F40_I1R1,stALE_E_coli_A3_F40_I1R1,Feist_11661_P40,I13,iTru7_111_11,CTTCGTTC,iTru5_05_E,CTTAGGAC,Feist_11661,pool1,stALE_E. coli_A3.F40.I1.R1 +2,stALE_E_coli_A4_F21_I1R1,stALE_E_coli_A4_F21_I1R1,Feist_11661_P40,K13,iTru7_111_12,CCAATAGG,iTru5_06_E,TATGACCG,Feist_11661,pool2,stALE_E. coli_A4.F21.I1.R1 +2,stALE_E_coli_A4_F21_I1R2,stALE_E_coli_A4_F21_I1R2,Feist_11661_P40,M13,iTru7_112_01,ACCATCCA,iTru5_07_E,AGCTAGTG,Feist_11661,pool1,stALE_E. coli_A4.F21.I1.R2 +2,stALE_E_coli_A4_F42_I1R1,stALE_E_coli_A4_F42_I1R1,Feist_11661_P40,O13,iTru7_112_02,CACACATG,iTru5_08_E,GAACGAAG,Feist_11661,pool2,stALE_E. coli_A4.F42.I1.R1 +2,stALE_E_coli_A5_F21_I1R1,stALE_E_coli_A5_F21_I1R1,Feist_11661_P40,A15,iTru7_112_03,CTTGTCGA,iTru5_09_E,CGTCTAAC,Feist_11661,pool1,stALE_E. coli_A5.F21.I1.R1 +2,stALE_E_coli_A5_F42_I1R1,stALE_E_coli_A5_F42_I1R1,Feist_11661_P40,C15,iTru7_112_04,AGTCTCAC,iTru5_10_E,AACCAGAG,Feist_11661,pool2,stALE_E. coli_A5.F42.I1.R1 +2,stALE_E_coli_A6_F21_I1R1,stALE_E_coli_A6_F21_I1R1,Feist_11661_P40,E15,iTru7_112_05,AGTTGGCT,iTru5_11_E,CGCCTTAT,Feist_11661,pool1,stALE_E. coli_A6.F21.I1.R1 +2,stALE_E_coli_A6_F43_I1R1,stALE_E_coli_A6_F43_I1R1,Feist_11661_P40,G15,iTru7_112_06,CCGGAATT,iTru5_12_E,CTCGTTCT,Feist_11661,pool2,stALE_E. coli_A6.F43.I1.R1 +2,stALE_E_coli_A7_F21_I1R1,stALE_E_coli_A7_F21_I1R1,Feist_11661_P40,I15,iTru7_112_07,CAGTGAAG,iTru5_01_F,GTGAGACT,Feist_11661,pool1,stALE_E. coli_A7.F21.I1.R1 +2,stALE_E_coli_A7_F42_I1R1,stALE_E_coli_A7_F42_I1R1,Feist_11661_P40,K15,iTru7_112_08,CCTACTGA,iTru5_02_F,AACACGCT,Feist_11661,pool2,stALE_E. coli_A7.F42.I1.R1 +2,stALE_E_coli_A8_F20_I1R1,stALE_E_coli_A8_F20_I1R1,Feist_11661_P40,M15,iTru7_112_09,TGTGAAGC,iTru5_03_F,CCTAGAGA,Feist_11661,pool1,stALE_E. coli_A8.F20.I1.R1 +2,stALE_E_coli_A8_F42_I1R1,stALE_E_coli_A8_F42_I1R1,Feist_11661_P40,O15,iTru7_112_10,GTCTGATC,iTru5_04_F,TTCCAGGT,Feist_11661,pool2,stALE_E. coli_A8.F42.I1.R1 +2,stALE_E_coli_A9_F21_I1R1,stALE_E_coli_A9_F21_I1R1,Feist_11661_P40,A17,iTru7_112_11,TTCAGGAG,iTru5_05_F,TCAGCCTT,Feist_11661,pool1,stALE_E. coli_A9.F21.I1.R1 +2,stALE_E_coli_A9_F44_I1R1,stALE_E_coli_A9_F44_I1R1,Feist_11661_P40,C17,iTru7_112_12,ACGATGAC,iTru5_06_F,AGCCAACT,Feist_11661,pool2,stALE_E. coli_A9.F44.I1.R1 +2,stALE_E_coli_A10_F21_I1R1,stALE_E_coli_A10_F21_I1R1,Feist_11661_P40,E17,iTru7_113_01,CGTTATGC,iTru5_07_F,CTAGCTCA,Feist_11661,pool1,stALE_E. coli_A10.F21.I1.R1 +2,stALE_E_coli_A10_F43_I1R1,stALE_E_coli_A10_F43_I1R1,Feist_11661_P40,G17,iTru7_113_02,GATACTGG,iTru5_08_F,GGAAGAGA,Feist_11661,pool2,stALE_E. coli_A10.F43.I1.R1 +2,stALE_E_coli_A10_F131_I1R1,stALE_E_coli_A10_F131_I1R1,Feist_11661_P40,I17,iTru7_113_03,CTACTTGG,iTru5_09_F,AACACTGG,Feist_11661,pool1,stALE_E. coli_A10.F131.I1.R1 +2,stALE_E_coli_A11_F21_I1R1,stALE_E_coli_A11_F21_I1R1,Feist_11661_P40,K17,iTru7_113_04,CATACCAC,iTru5_10_F,ACTATCGC,Feist_11661,pool2,stALE_E. coli_A11.F21.I1.R1 +2,stALE_E_coli_A11_F43_I1R1,stALE_E_coli_A11_F43_I1R1,Feist_11661_P40,M17,iTru7_113_05,ACATTGCG,iTru5_11_F,ACAACAGC,Feist_11661,pool1,stALE_E. coli_A11.F43.I1.R1 +2,stALE_E_coli_A11_F119_I1R1,stALE_E_coli_A11_F119_I1R1,Feist_11661_P40,O17,iTru7_113_06,TGATCGGA,iTru5_12_F,TGTGGCTT,Feist_11661,pool2,stALE_E. coli_A11.F119.I1.R1 +2,stALE_E_coli_A12_F21_I1R1,stALE_E_coli_A12_F21_I1R1,Feist_11661_P40,A19,iTru7_113_07,AAGTGTCG,iTru5_01_G,GTTCCATG,Feist_11661,pool1,stALE_E. coli_A12.F21.I1.R1 +2,stALE_E_coli_A12_F43_I1R1,stALE_E_coli_A12_F43_I1R1,Feist_11661_P40,C19,iTru7_113_08,GAACGCTT,iTru5_02_G,TGGATGGT,Feist_11661,pool2,stALE_E. coli_A12.F43.I1.R1 +2,stALE_E_coli_A12_F136_I1R1,stALE_E_coli_A12_F136_I1R1,Feist_11661_P40,E19,iTru7_113_09,TCAAGGAC,iTru5_03_G,GCATAACG,Feist_11661,pool1,stALE_E. coli_A12.F136.I1.R1 +2,stALE_E_coli_A13_F20_I1R1,stALE_E_coli_A13_F20_I1R1,Feist_11661_P40,G19,iTru7_113_10,TCAACTGG,iTru5_04_G,TCGAACCT,Feist_11661,pool2,stALE_E. coli_A13.F20.I1.R1 +2,stALE_E_coli_A13_F42_I1R1,stALE_E_coli_A13_F42_I1R1,Feist_11661_P40,I19,iTru7_113_11,GGTTGATG,iTru5_05_G,ACATGCCA,Feist_11661,pool1,stALE_E. coli_A13.F42.I1.R1 +2,stALE_E_coli_A13_F121_I1R1,stALE_E_coli_A13_F121_I1R1,Feist_11661_P40,K19,iTru7_113_12,AAGGACAC,iTru5_06_G,GATCTTGC,Feist_11661,pool2,stALE_E. coli_A13.F121.I1.R1 +2,stALE_E_coli_A14_F20_I1R1,stALE_E_coli_A14_F20_I1R1,Feist_11661_P40,M19,iTru7_114_01,TTGATCCG,iTru5_07_G,GTTAAGCG,Feist_11661,pool1,stALE_E. coli_A14.F20.I1.R1 +2,stALE_E_coli_A14_F42_I1R1,stALE_E_coli_A14_F42_I1R1,Feist_11661_P40,O19,iTru7_114_02,GGTGATTC,iTru5_08_G,GTCATCGT,Feist_11661,pool2,stALE_E. coli_A14.F42.I1.R1 +2,stALE_E_coli_A14_F133_I1R1,stALE_E_coli_A14_F133_I1R1,Feist_11661_P40,A21,iTru7_114_03,GATTGCTC,iTru5_09_G,TCAGACAC,Feist_11661,pool1,stALE_E. coli_A14.F133.I1.R1 +2,stALE_E_coli_A15_F21_I1R1,stALE_E_coli_A15_F21_I1R1,Feist_11661_P40,C21,iTru7_114_04,ACCTGGAA,iTru5_10_G,GTCCTAAG,Feist_11661,pool2,stALE_E. coli_A15.F21.I1.R1 +2,stALE_E_coli_A15_F42_I1R1,stALE_E_coli_A15_F42_I1R1,Feist_11661_P40,E21,iTru7_114_05,CATCTACG,iTru5_11_G,AGACCTTG,Feist_11661,pool1,stALE_E. coli_A15.F42.I1.R1 +2,stALE_E_coli_A15_F117_I1R1,stALE_E_coli_A15_F117_I1R1,Feist_11661_P40,G21,iTru7_114_06,CCGTATCT,iTru5_12_G,AGACATGC,Feist_11661,pool2,stALE_E. coli_A15.F117.I1.R1 +2,stALE_E_coli_A16_F20_I1R1,stALE_E_coli_A16_F20_I1R1,Feist_11661_P40,I21,iTru7_114_07,CGGAATAC,iTru5_01_H,TAGCTGAG,Feist_11661,pool1,stALE_E. coli_A16.F20.I1.R1 +2,stALE_E_coli_A16_F42_I1R1,stALE_E_coli_A16_F42_I1R1,Feist_11661_P40,K21,iTru7_114_08,CTCCTAGA,iTru5_02_H,TTCGAAGC,Feist_11661,pool2,stALE_E. coli_A16.F42.I1.R1 +2,stALE_E_coli_A16_F134_I1R1,stALE_E_coli_A16_F134_I1R1,Feist_11661_P40,M21,iTru7_114_09,TGGTAGCT,iTru5_03_H,CAGTGCTT,Feist_11661,pool1,stALE_E. coli_A16.F134.I1.R1 +2,stALE_E_coli_A17_F21_I1R1,stALE_E_coli_A17_F21_I1R1,Feist_11661_P40,O21,iTru7_114_10,TCGAAGGT,iTru5_04_H,TAGTGCCA,Feist_11661,pool2,stALE_E. coli_A17.F21.I1.R1 +2,stALE_E_coli_A17_F118_I1R1,stALE_E_coli_A17_F118_I1R1,Feist_11661_P40,A23,iTru7_114_11,ACATAGGC,iTru5_05_H,GATGGAGT,Feist_11661,pool1,stALE_E. coli_A17.F118.I1.R1 +2,stALE_E_coli_A18_F18_I1R1,stALE_E_coli_A18_F18_I1R1,Feist_11661_P40,C23,iTru7_114_12,CTCAGAGT,iTru5_06_H,CCTCGTTA,Feist_11661,pool2,stALE_E. coli_A18.F18.I1.R1 +2,stALE_E_coli_A18_F39_I1R1,stALE_E_coli_A18_F39_I1R1,Feist_11661_P40,E23,iTru7_201_01,CTTGGATG,iTru5_07_H,CGATTGGA,Feist_11661,pool1,stALE_E. coli_A18.F39.I1.R1 +2,stALE_E_coli_A18_F130_I1R1,stALE_E_coli_A18_F130_I1R1,Feist_11661_P40,G23,iTru7_201_02,CAGTTGGA,iTru5_08_H,CCAACGAA,Feist_11661,pool2,stALE_E. coli_A18.F130.I1.R1 +2,3A,3A,Gerwick_tubes,I23,iTru7_201_03,GATAGGCT,iTru5_09_H,AGAAGGAC,Gerwick_6123,pool1,3A +2,4A,4A,Gerwick_tubes,K23,iTru7_201_04,TTGACAGG,iTru5_10_H,TGACCGTT,Gerwick_6123,pool2,4A +2,BLANK_40_12G,BLANK_40_12G,Feist_11661_P40,M23,iTru7_201_05,AGAATGCC,iTru5_11_H,GCGTTAGA,Feist_11661,pool1,BLANK.40.12G +2,BLANK_40_12H,BLANK_40_12H,Feist_11661_P40,O23,iTru7_201_06,CTACATCC,iTru5_12_H,TCTAGGAG,Feist_11661,pool2,BLANK.40.12H +2,Pputida_JBEI__HGL_Pputida_107_BP6,Pputida_JBEI__HGL_Pputida_107_BP6,Feist_11661_P41,A2,iTru7_201_07,TCATGGTG,iTru5_13_A,GGTATAGG,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_107_BP6 +2,Pputida_JBEI__HGL_Pputida_108_BP7,Pputida_JBEI__HGL_Pputida_108_BP7,Feist_11661_P41,C2,iTru7_201_08,TACACGCT,iTru5_14_A,TCCGATCA,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_108_BP7 +2,Pputida_JBEI__HGL_Pputida_109_BP8,Pputida_JBEI__HGL_Pputida_109_BP8,Feist_11661_P41,E2,iTru7_201_09,TACGGTTG,iTru5_15_A,CGACCTAA,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_109_BP8 +2,Pputida_JBEI__HGL_Pputida_110_M2,Pputida_JBEI__HGL_Pputida_110_M2,Feist_11661_P41,G2,iTru7_201_10,GGATACCA,iTru5_16_A,GACATCTC,Feist_11661,pool2,Pputida_JBEI__HGL_Pputida_110_M2 +2,Pputida_JBEI__HGL_Pputida_111_M5,Pputida_JBEI__HGL_Pputida_111_M5,Feist_11661_P41,I2,iTru7_201_11,TCGACATC,iTru5_17_A,CCAGTATC,Feist_11661,pool1,Pputida_JBEI__HGL_Pputida_111_M5 +2,Pputida_TALE__HGL_Pputida_112,Pputida_TALE__HGL_Pputida_112,Feist_11661_P41,K2,iTru7_201_12,GTTGTAGC,iTru5_18_A,ACGCTTCT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_112 +2,Pputida_TALE__HGL_Pputida_113,Pputida_TALE__HGL_Pputida_113,Feist_11661_P41,M2,iTru7_202_01,ATACGACC,iTru5_19_A,AACGCACA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_113 +2,Pputida_TALE__HGL_Pputida_114,Pputida_TALE__HGL_Pputida_114,Feist_11661_P41,O2,iTru7_202_02,TTCCAAGG,iTru5_20_A,TGATCACG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_114 +2,Pputida_TALE__HGL_Pputida_115,Pputida_TALE__HGL_Pputida_115,Feist_11661_P41,A4,iTru7_202_03,TTGCAGAC,iTru5_21_A,GCGTATCA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_115 +2,Pputida_TALE__HGL_Pputida_116,Pputida_TALE__HGL_Pputida_116,Feist_11661_P41,C4,iTru7_202_04,TGCCATTC,iTru5_22_A,GTGTCCTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_116 +2,Pputida_TALE__HGL_Pputida_117,Pputida_TALE__HGL_Pputida_117,Feist_11661_P41,E4,iTru7_202_05,GATGTGTG,iTru5_23_A,GGTAACGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_117 +2,Pputida_TALE__HGL_Pputida_118,Pputida_TALE__HGL_Pputida_118,Feist_11661_P41,G4,iTru7_202_06,ACTCTCGA,iTru5_24_A,CGAGAGAA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_118 +2,Pputida_TALE__HGL_Pputida_119,Pputida_TALE__HGL_Pputida_119,Feist_11661_P41,I4,iTru7_202_07,GAGTCTCT,iTru5_13_B,CATTGACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_119 +2,Pputida_TALE__HGL_Pputida_120,Pputida_TALE__HGL_Pputida_120,Feist_11661_P41,K4,iTru7_202_08,CAACACCT,iTru5_14_B,GGTGATGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_120 +2,Pputida_TALE__HGL_Pputida_121,Pputida_TALE__HGL_Pputida_121,Feist_11661_P41,M4,iTru7_202_09,CAGTCTTC,iTru5_15_B,AACCGTGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_121 +2,Pputida_TALE__HGL_Pputida_122,Pputida_TALE__HGL_Pputida_122,Feist_11661_P41,O4,iTru7_202_10,GGACTGTT,iTru5_16_B,CCTATTGG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_122 +2,Pputida_TALE__HGL_Pputida_123,Pputida_TALE__HGL_Pputida_123,Feist_11661_P41,A6,iTru7_202_11,CTTAGTGG,iTru5_17_B,TCAGTAGG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_123 +2,Pputida_TALE__HGL_Pputida_124,Pputida_TALE__HGL_Pputida_124,Feist_11661_P41,C6,iTru7_202_12,ATTGCGTG,iTru5_18_B,TATGCGGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_124 +2,Pputida_TALE__HGL_Pputida_125,Pputida_TALE__HGL_Pputida_125,Feist_11661_P41,E6,iTru7_203_01,GTAACGAC,iTru5_19_B,ATGCCTAG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_125 +2,Pputida_TALE__HGL_Pputida_126,Pputida_TALE__HGL_Pputida_126,Feist_11661_P41,G6,iTru7_203_02,CTTGCTGT,iTru5_20_B,CTAGCAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_126 +2,Pputida_TALE__HGL_Pputida_127,Pputida_TALE__HGL_Pputida_127,Feist_11661_P41,I6,iTru7_203_03,GTTGTTCG,iTru5_21_B,AGGTCAAC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_127 +2,Pputida_TALE__HGL_Pputida_128,Pputida_TALE__HGL_Pputida_128,Feist_11661_P41,K6,iTru7_203_04,CGTTGAGT,iTru5_22_B,GAACGTGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_128 +2,Pputida_TALE__HGL_Pputida_129,Pputida_TALE__HGL_Pputida_129,Feist_11661_P41,M6,iTru7_203_05,TCGAACCA,iTru5_23_B,ATCATGCG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_129 +2,Pputida_TALE__HGL_Pputida_130,Pputida_TALE__HGL_Pputida_130,Feist_11661_P41,O6,iTru7_203_06,AGACCGTA,iTru5_24_B,CAACGAGT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_130 +2,Pputida_TALE__HGL_Pputida_131,Pputida_TALE__HGL_Pputida_131,Feist_11661_P41,A8,iTru7_203_07,CAGAGTGT,iTru5_13_C,CGCAATGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_131 +2,Pputida_TALE__HGL_Pputida_132,Pputida_TALE__HGL_Pputida_132,Feist_11661_P41,C8,iTru7_203_08,GACAAGAG,iTru5_14_C,AACAAGGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_132 +2,Pputida_TALE__HGL_Pputida_133,Pputida_TALE__HGL_Pputida_133,Feist_11661_P41,E8,iTru7_203_09,GAACACAC,iTru5_15_C,ACCATGTC,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_133 +2,Pputida_TALE__HGL_Pputida_134,Pputida_TALE__HGL_Pputida_134,Feist_11661_P41,G8,iTru7_203_10,GCTTAGCT,iTru5_16_C,AATCCAGC,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_134 +2,Pputida_TALE__HGL_Pputida_135,Pputida_TALE__HGL_Pputida_135,Feist_11661_P41,I8,iTru7_203_11,GAAGGAAG,iTru5_17_C,TTGCAACG,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_135 +2,Pputida_TALE__HGL_Pputida_136,Pputida_TALE__HGL_Pputida_136,Feist_11661_P41,K8,iTru7_203_12,CAGTTCTG,iTru5_18_C,ACCTTCGA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_136 +2,Pputida_TALE__HGL_Pputida_137,Pputida_TALE__HGL_Pputida_137,Feist_11661_P41,M8,iTru7_204_01,CAGGAGAT,iTru5_19_C,CATACGGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_137 +2,Pputida_TALE__HGL_Pputida_138,Pputida_TALE__HGL_Pputida_138,Feist_11661_P41,O8,iTru7_204_02,GTAGCATC,iTru5_20_C,GACCGATA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_138 +2,Pputida_TALE__HGL_Pputida_139,Pputida_TALE__HGL_Pputida_139,Feist_11661_P41,A10,iTru7_204_03,TCGTTCGT,iTru5_21_C,AAGCTGGT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_139 +2,Pputida_TALE__HGL_Pputida_140,Pputida_TALE__HGL_Pputida_140,Feist_11661_P41,C10,iTru7_204_04,GGCAAGTT,iTru5_22_C,ACACCTCA,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_140 +2,Pputida_TALE__HGL_Pputida_141,Pputida_TALE__HGL_Pputida_141,Feist_11661_P41,E10,iTru7_204_05,ACCATGTG,iTru5_23_C,CGGAGTAT,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_141 +2,Pputida_TALE__HGL_Pputida_142,Pputida_TALE__HGL_Pputida_142,Feist_11661_P41,G10,iTru7_204_06,CAACGGAT,iTru5_24_C,CTCGACTT,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_142 +2,Pputida_TALE__HGL_Pputida_143,Pputida_TALE__HGL_Pputida_143,Feist_11661_P41,I10,iTru7_204_07,CAATCGAC,iTru5_13_D,ATCCACGA,Feist_11661,pool1,Pputida_TALE__HGL_Pputida_143 +2,Pputida_TALE__HGL_Pputida_144,Pputida_TALE__HGL_Pputida_144,Feist_11661_P41,K10,iTru7_204_08,GTGTTCCT,iTru5_14_D,ACAGTTCG,Feist_11661,pool2,Pputida_TALE__HGL_Pputida_144 +2,Pputida_PALE__HGL_Pputida_145,Pputida_PALE__HGL_Pputida_145,Feist_11661_P41_diluted,M10,iTru7_204_09,AGGAACCT,iTru5_15_D,ACAAGACG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_145 +2,Pputida_PALE__HGL_Pputida_146,Pputida_PALE__HGL_Pputida_146,Feist_11661_P41_diluted,O10,iTru7_204_10,ACCTTCTC,iTru5_16_D,ATCGTGGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_146 +2,Pputida_PALE__HGL_Pputida_147,Pputida_PALE__HGL_Pputida_147,Feist_11661_P41_diluted,A12,iTru7_204_11,CCGTAAGA,iTru5_17_D,AGTCAGGT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_147 +2,Pputida_PALE__HGL_Pputida_148,Pputida_PALE__HGL_Pputida_148,Feist_11661_P41_diluted,C12,iTru7_204_12,ATCGGTGT,iTru5_18_D,CATCAACC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_148 +2,Pputida_PALE__HGL_Pputida_149,Pputida_PALE__HGL_Pputida_149,Feist_11661_P41_diluted,E12,iTru7_205_01,AGCTCCTA,iTru5_19_D,GGTCACTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_149 +2,Pputida_PALE__HGL_Pputida_150,Pputida_PALE__HGL_Pputida_150,Feist_11661_P41,G12,iTru7_205_02,CCTTGATC,iTru5_20_D,CGGCATTA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_150 +2,Pputida_PALE__HGL_Pputida_151,Pputida_PALE__HGL_Pputida_151,Feist_11661_P41_diluted,I12,iTru7_205_03,CCATTCAC,iTru5_21_D,ACTCGATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_151 +2,Pputida_PALE__HGL_Pputida_152,Pputida_PALE__HGL_Pputida_152,Feist_11661_P41,K12,iTru7_205_04,GGACAATC,iTru5_22_D,ATAGGTCC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_152 +2,Pputida_PALE__HGL_Pputida_153,Pputida_PALE__HGL_Pputida_153,Feist_11661_P41,M12,iTru7_205_05,AAGGCGTT,iTru5_23_D,CAGTCACA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_153 +2,Pputida_PALE__HGL_Pputida_154,Pputida_PALE__HGL_Pputida_154,Feist_11661_P41_diluted,O12,iTru7_205_06,GCCATAAC,iTru5_24_D,TAGTGGTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_154 +2,Pputida_PALE__HGL_Pputida_155,Pputida_PALE__HGL_Pputida_155,Feist_11661_P41_diluted,A14,iTru7_205_07,GAAGTTGG,iTru5_13_E,CTCCTGAA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_155 +2,Pputida_PALE__HGL_Pputida_156,Pputida_PALE__HGL_Pputida_156,Feist_11661_P41_diluted,C14,iTru7_205_08,AGCCAAGT,iTru5_14_E,AATCGCTG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_156 +2,Pputida_PALE__HGL_Pputida_157,Pputida_PALE__HGL_Pputida_157,Feist_11661_P41,E14,iTru7_205_09,TGACTGAC,iTru5_15_E,TGATAGGC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_157 +2,Pputida_PALE__HGL_Pputida_158,Pputida_PALE__HGL_Pputida_158,Feist_11661_P41_diluted,G14,iTru7_205_10,CACCTGTT,iTru5_16_E,ATGCGTCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_158 +2,Pputida_PALE__HGL_Pputida_159,Pputida_PALE__HGL_Pputida_159,Feist_11661_P41,I14,iTru7_205_11,ATCCGGTA,iTru5_17_E,CAGCATAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_159 +2,Pputida_PALE__HGL_Pputida_160,Pputida_PALE__HGL_Pputida_160,Feist_11661_P41,K14,iTru7_205_12,ATCTGTCC,iTru5_18_E,AAGTGCAG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_160 +2,Pputida_PALE__HGL_Pputida_161,Pputida_PALE__HGL_Pputida_161,Feist_11661_P41_diluted,M14,iTru7_206_01,CCAAGACT,iTru5_19_E,GTATTCCG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_161 +2,Pputida_PALE__HGL_Pputida_162,Pputida_PALE__HGL_Pputida_162,Feist_11661_P41_diluted,O14,iTru7_206_02,ATGGCGAA,iTru5_20_E,GTGATCCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_162 +2,Pputida_PALE__HGL_Pputida_163,Pputida_PALE__HGL_Pputida_163,Feist_11661_P41_diluted,A16,iTru7_206_03,GGTAGTGT,iTru5_21_E,TATGGCAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_163 +2,Pputida_PALE__HGL_Pputida_164,Pputida_PALE__HGL_Pputida_164,Feist_11661_P41,C16,iTru7_206_04,TCGCTGTT,iTru5_22_E,ACCATAGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_164 +2,Pputida_PALE__HGL_Pputida_165,Pputida_PALE__HGL_Pputida_165,Feist_11661_P41_diluted,E16,iTru7_206_05,AACGTGGA,iTru5_23_E,CTCCAATC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_165 +2,Pputida_PALE__HGL_Pputida_166,Pputida_PALE__HGL_Pputida_166,Feist_11661_P41,G16,iTru7_206_06,AACGACGT,iTru5_24_E,AGATACGG,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_166 +2,Pputida_PALE__HGL_Pputida_167,Pputida_PALE__HGL_Pputida_167,Feist_11661_P41,I16,iTru7_206_07,AACAGGAC,iTru5_13_F,TCGATGAC,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_167 +2,Pputida_PALE__HGL_Pputida_168,Pputida_PALE__HGL_Pputida_168,Feist_11661_P41,K16,iTru7_206_08,AAGCGCAT,iTru5_14_F,CCAACACT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_168 +2,Pputida_PALE__HGL_Pputida_169,Pputida_PALE__HGL_Pputida_169,Feist_11661_P41,M16,iTru7_206_09,CACTGACA,iTru5_15_F,CTTCACTG,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_169 +2,Pputida_PALE__HGL_Pputida_170,Pputida_PALE__HGL_Pputida_170,Feist_11661_P41,O16,iTru7_206_10,AGGTCACT,iTru5_16_F,CGATGTTC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_170 +2,Pputida_PALE__HGL_Pputida_171,Pputida_PALE__HGL_Pputida_171,Feist_11661_P41,A18,iTru7_206_11,GTCACTGT,iTru5_17_F,ACCGGTTA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_171 +2,Pputida_PALE__HGL_Pputida_172,Pputida_PALE__HGL_Pputida_172,Feist_11661_P41,C18,iTru7_206_12,ATGCCAAC,iTru5_18_F,CTTACAGC,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_172 +2,Pputida_PALE__HGL_Pputida_173,Pputida_PALE__HGL_Pputida_173,Feist_11661_P41,E18,iTru7_207_01,CACGTTGT,iTru5_19_F,TGGCTCTT,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_173 +2,Pputida_PALE__HGL_Pputida_174,Pputida_PALE__HGL_Pputida_174,Feist_11661_P41_diluted,G18,iTru7_207_02,TATTCCGG,iTru5_20_F,AAGACCGT,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_174 +2,Pputida_PALE__HGL_Pputida_175,Pputida_PALE__HGL_Pputida_175,Feist_11661_P41,I18,iTru7_207_03,TGCTTCCA,iTru5_21_F,GGACATCA,Feist_11661,pool1,Pputida_PALE__HGL_Pputida_175 +2,Pputida_PALE__HGL_Pputida_176,Pputida_PALE__HGL_Pputida_176,Feist_11661_P41_diluted,K18,iTru7_207_04,GTCTAGGT,iTru5_22_F,TTGGTGCA,Feist_11661,pool2,Pputida_PALE__HGL_Pputida_176 +2,JM-Metabolic__GN0_2005,JM-Metabolic__GN0_2005,Feist_11661_P41,M18,iTru7_207_05,GTTCAACC,iTru5_23_F,AAGCGTTC,Feist_11661,pool1,JM-Metabolic__GN0_2005 +2,JM-Metabolic__GN0_2007,JM-Metabolic__GN0_2007,Feist_11661_P41,O18,iTru7_207_06,CGCAATCT,iTru5_24_F,ACTCTCCA,Feist_11661,pool2,JM-Metabolic__GN0_2007 +2,JM-Metabolic__GN0_2009,JM-Metabolic__GN0_2009,Feist_11661_P41,A20,iTru7_207_07,TTAAGCGG,iTru5_13_G,GAACCTTC,Feist_11661,pool1,JM-Metabolic__GN0_2009 +2,JM-Metabolic__GN0_2094,JM-Metabolic__GN0_2094,Feist_11661_P41_diluted,C20,iTru7_207_08,TGCTTGGT,iTru5_14_G,GGAACATG,Feist_11661,pool2,JM-Metabolic__GN0_2094 +2,JM-Metabolic__GN0_2099,JM-Metabolic__GN0_2099,Feist_11661_P41_diluted,E20,iTru7_207_09,ACACACTC,iTru5_15_G,GCCTATGT,Feist_11661,pool1,JM-Metabolic__GN0_2099 +2,JM-Metabolic__GN0_2148,JM-Metabolic__GN0_2148,Feist_11661_P41_diluted,G20,iTru7_207_10,CCACTTCT,iTru5_16_G,CCGTAACT,Feist_11661,pool2,JM-Metabolic__GN0_2148 +2,JM-Metabolic__GN0_2165,JM-Metabolic__GN0_2165,Feist_11661_P41_diluted,I20,iTru7_207_11,TTGGTCTC,iTru5_17_G,CGGATCAA,Feist_11661,pool1,JM-Metabolic__GN0_2165 +2,JM-Metabolic__GN0_2169,JM-Metabolic__GN0_2169,Feist_11661_P41,K20,iTru7_207_12,CTCATCAG,iTru5_18_G,CCACATTG,Feist_11661,pool2,JM-Metabolic__GN0_2169 +2,JM-Metabolic__GN0_2172,JM-Metabolic__GN0_2172,Feist_11661_P41,M20,iTru7_208_01,ATGACGTC,iTru5_19_G,CTCTATCG,Feist_11661,pool1,JM-Metabolic__GN0_2172 +2,JM-Metabolic__GN0_2175,JM-Metabolic__GN0_2175,Feist_11661_P41,O20,iTru7_208_02,AACCTTGG,iTru5_20_G,TGTGTCAG,Feist_11661,pool2,JM-Metabolic__GN0_2175 +2,JM-Metabolic__GN0_2183,JM-Metabolic__GN0_2183,Feist_11661_P41_diluted,A22,iTru7_208_03,GTCTTGCA,iTru5_21_G,CGCAACTA,Feist_11661,pool1,JM-Metabolic__GN0_2183 +2,JM-Metabolic__GN0_2215,JM-Metabolic__GN0_2215,Feist_11661_P41_diluted,C22,iTru7_208_04,CAAGTGCA,iTru5_22_G,GATCAGAC,Feist_11661,pool2,JM-Metabolic__GN0_2215 +2,JM-Metabolic__GN0_2254,JM-Metabolic__GN0_2254,Feist_11661_P41_diluted,E22,iTru7_208_05,TCCGAGTT,iTru5_23_G,ATTCCGCT,Feist_11661,pool1,JM-Metabolic__GN0_2254 +2,JM-Metabolic__GN0_2277,JM-Metabolic__GN0_2277,Feist_11661_P41_diluted,G22,iTru7_208_06,ACCTAAGG,iTru5_24_G,ATCCTTCC,Feist_11661,pool2,JM-Metabolic__GN0_2277 +2,JM-Metabolic__GN0_2290,JM-Metabolic__GN0_2290,Feist_11661_P41,I22,iTru7_208_07,TTGGACGT,iTru5_13_H,GCTTCACA,Feist_11661,pool1,JM-Metabolic__GN0_2290 +2,JM-Metabolic__GN0_2337,JM-Metabolic__GN0_2337,Feist_11661_P41_diluted,K22,iTru7_208_08,GATAGCGA,iTru5_14_H,CTTCGGTT,Feist_11661,pool2,JM-Metabolic__GN0_2337 +2,JM-Metabolic__GN0_2317,JM-Metabolic__GN0_2317,Feist_11661_P41_diluted,M22,iTru7_208_09,TTGGTGAG,iTru5_15_H,CATGGATC,Feist_11661,pool1,JM-Metabolic__GN0_2317 +2,JM-Metabolic__GN0_2354,JM-Metabolic__GN0_2354,Feist_11661_P41_diluted,O22,iTru7_208_10,AACTGGTG,iTru5_16_H,GTCAACAG,Feist_11661,pool2,JM-Metabolic__GN0_2354 +2,JM-Metabolic__GN0_2375,JM-Metabolic__GN0_2375,Feist_11661_P41_diluted,A24,iTru7_208_11,TAGCCGAA,iTru5_17_H,AATTCCGG,Feist_11661,pool1,JM-Metabolic__GN0_2375 +2,JM-Metabolic__GN0_2380,JM-Metabolic__GN0_2380,Feist_11661_P41_diluted,C24,iTru7_208_12,TGCGAACT,iTru5_18_H,GGCGAATA,Feist_11661,pool2,JM-Metabolic__GN0_2380 +2,JM-Metabolic__GN0_2393,JM-Metabolic__GN0_2393,Feist_11661_P41_diluted,E24,iTru7_209_01,GACTTAGG,iTru5_19_H,AGGAGGTT,Feist_11661,pool1,JM-Metabolic__GN0_2393 +2,JM-Metabolic__GN0_2404,JM-Metabolic__GN0_2404,Feist_11661_P41_diluted,G24,iTru7_209_02,ACACCAGT,iTru5_20_H,ACTCTGAG,Feist_11661,pool2,JM-Metabolic__GN0_2404 +2,5B,5B,Gerwick_tubes,I24,iTru7_209_03,CCTGATTG,iTru5_21_H,GCCTTCTT,Gerwick_6123,pool1,5B +2,6A,6A,Gerwick_tubes,K24,iTru7_209_04,TTGTGTGC,iTru5_22_H,TGGACCAT,Gerwick_6123,pool2,6A +2,BLANK_41_12G,BLANK_41_12G,Feist_11661_P41,M24,iTru7_209_05,TACCACAG,iTru5_23_H,GCATAGTC,Gerwick_6123,pool1,BLANK.41.12G +2,BLANK_41_12H,BLANK_41_12H,Feist_11661_P41,O24,iTru7_209_06,ATTCGAGG,iTru5_24_H,TACACACG,Feist_11661,pool2,BLANK.41.12H +2,Deoxyribose_PALE_ALE__MG1655_BOP27_4_14,Deoxyribose_PALE_ALE__MG1655_BOP27_4_14,Feist_11661_P42,B1,iTru7_209_07,GCACGTAA,iTru5_101_A,AACAACCG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_14 +2,Deoxyribose_PALE_ALE__MG1655_BOP27_4_23,Deoxyribose_PALE_ALE__MG1655_BOP27_4_23,Feist_11661_P42,D1,iTru7_209_08,GTGTGACA,iTru5_102_A,AAGCCTGA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_4_23 +2,Deoxyribose_PALE_ALE__MG1655_BOP27_4_48,Deoxyribose_PALE_ALE__MG1655_BOP27_4_48,Feist_11661_P42,F1,iTru7_209_09,CTGGTTCT,iTru5_103_A,AAGGACCA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_4_48 +2,Deoxyribose_PALE_ALE__MG1655_BOP27_6_21,Deoxyribose_PALE_ALE__MG1655_BOP27_6_21,Feist_11661_P42,H1,iTru7_209_10,ACTGTGTC,iTru5_104_A,ACAACGTG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_6_21 +2,Deoxyribose_PALE_ALE__MG1655_BOP27_6_35,Deoxyribose_PALE_ALE__MG1655_BOP27_6_35,Feist_11661_P42,J1,iTru7_209_11,CCATACGT,iTru5_105_A,ACGAACGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_6_35 +2,Deoxyribose_PALE_ALE__MG1655_BOP27_10_13,Deoxyribose_PALE_ALE__MG1655_BOP27_10_13,Feist_11661_P42,L1,iTru7_209_12,GGTACTAC,iTru5_106_A,ACGTCCAA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_13 +2,Deoxyribose_PALE_ALE__MG1655_BOP27_10_28,Deoxyribose_PALE_ALE__MG1655_BOP27_10_28,Feist_11661_P42,N1,iTru7_210_01,CAGTCCAA,iTru5_107_A,ACTGGTGT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_BOP27_10_28 +2,Deoxyribose_PALE_ALE__MG1655_BOP27_10_51,Deoxyribose_PALE_ALE__MG1655_BOP27_10_51,Feist_11661_P42,P1,iTru7_210_02,TCGTAGTC,iTru5_108_A,AGATCGTC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_BOP27_10_51 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_18_19,Deoxyribose_PALE_ALE__MG1655_Lib4_18_19,Feist_11661_P42,B3,iTru7_210_03,TCGAGTGA,iTru5_109_A,AGCGAGAT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_19 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_18_59,Deoxyribose_PALE_ALE__MG1655_Lib4_18_59,Feist_11661_P42,D3,iTru7_210_04,TGTAGCCA,iTru5_110_A,AGGATAGC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_18_59 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_18_35,Deoxyribose_PALE_ALE__MG1655_Lib4_18_35,Feist_11661_P42,F3,iTru7_210_05,TGCAGGTA,iTru5_111_A,AGGTGTTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_18_35 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_20_16,Deoxyribose_PALE_ALE__MG1655_Lib4_20_16,Feist_11661_P42,H3,iTru7_210_06,CTAGGTGA,iTru5_112_A,AGTCTTGG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_16 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_20_43,Deoxyribose_PALE_ALE__MG1655_Lib4_20_43,Feist_11661_P42,J3,iTru7_210_07,CTCCATGT,iTru5_101_B,GGTTGGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_20_43 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_20_71,Deoxyribose_PALE_ALE__MG1655_Lib4_20_71,Feist_11661_P42,L3,iTru7_210_08,CTTACAGC,iTru5_102_B,GGAGGAAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_20_71 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_22_16,Deoxyribose_PALE_ALE__MG1655_Lib4_22_16,Feist_11661_P42,N3,iTru7_210_09,CGTATTCG,iTru5_103_B,GTAAGGTG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_16 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_22_28,Deoxyribose_PALE_ALE__MG1655_Lib4_22_28,Feist_11661_P42,P3,iTru7_210_10,ATTCTGGC,iTru5_104_B,GGTGTACA,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_22_28 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_22_52,Deoxyribose_PALE_ALE__MG1655_Lib4_22_52,Feist_11661_P42,B5,iTru7_210_11,TACCAGGA,iTru5_105_B,GGATGTAG,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_22_52 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_24_9,Deoxyribose_PALE_ALE__MG1655_Lib4_24_9,Feist_11661_P42,D5,iTru7_210_12,TACATCGG,iTru5_106_B,GTCCTGTT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_9 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_24_24,Deoxyribose_PALE_ALE__MG1655_Lib4_24_24,Feist_11661_P42,F5,iTru7_301_01,GTGGTGTT,iTru5_107_B,GTACCACA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_24_24 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_24_52,Deoxyribose_PALE_ALE__MG1655_Lib4_24_52,Feist_11661_P42,H5,iTru7_301_02,CGCATGAT,iTru5_108_B,GATCTCAG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_24_52 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_26_6,Deoxyribose_PALE_ALE__MG1655_Lib4_26_6,Feist_11661_P42,J5,iTru7_301_03,AGTCGACA,iTru5_109_B,GAGCTCTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_6 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_26_27,Deoxyribose_PALE_ALE__MG1655_Lib4_26_27,Feist_11661_P42,L5,iTru7_301_04,GTGAGCTT,iTru5_110_B,TACTAGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_26_27 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_26_69,Deoxyribose_PALE_ALE__MG1655_Lib4_26_69,Feist_11661_P42,N5,iTru7_301_05,GACATTCC,iTru5_111_B,GCACACAA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_26_69 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_28_13,Deoxyribose_PALE_ALE__MG1655_Lib4_28_13,Feist_11661_P42,P5,iTru7_301_06,AGTTCGTC,iTru5_112_B,GAATCACC,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_13 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_28_28,Deoxyribose_PALE_ALE__MG1655_Lib4_28_28,Feist_11661_P42,B7,iTru7_301_07,TAATGCCG,iTru5_101_C,AACAGCGA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_28_28 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_28_53,Deoxyribose_PALE_ALE__MG1655_Lib4_28_53,Feist_11661_P42,D7,iTru7_301_08,CGACCATT,iTru5_102_C,AAGCGACT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_28_53 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_30_7,Deoxyribose_PALE_ALE__MG1655_Lib4_30_7,Feist_11661_P42,F7,iTru7_301_09,CTGAAGCT,iTru5_103_C,AAGGCGTA,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_7 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_30_22,Deoxyribose_PALE_ALE__MG1655_Lib4_30_22,Feist_11661_P42,H7,iTru7_301_10,TTGAGGCA,iTru5_104_C,ACACCGAT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_30_22 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_30_60,Deoxyribose_PALE_ALE__MG1655_Lib4_30_60,Feist_11661_P42,J7,iTru7_301_11,GATCGAGT,iTru5_105_C,ACGAATCC,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_30_60 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_32_6,Deoxyribose_PALE_ALE__MG1655_Lib4_32_6,Feist_11661_P42,L7,iTru7_301_12,ATACTCCG,iTru5_106_C,ACTACGGT,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_6 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_32_20,Deoxyribose_PALE_ALE__MG1655_Lib4_32_20,Feist_11661_P42,N7,iTru7_302_01,AAGTCCGT,iTru5_107_C,AGAAGCCT,Feist_11661,pool1,Deoxyribose PALE ALE _MG1655_Lib4_32_20 +2,Deoxyribose_PALE_ALE__MG1655_Lib4_32_56,Deoxyribose_PALE_ALE__MG1655_Lib4_32_56,Feist_11661_P42,P7,iTru7_302_02,TAGCGTCT,iTru5_108_C,AGATTGCG,Feist_11661,pool2,Deoxyribose PALE ALE _MG1655_Lib4_32_56 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_24,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_24,Feist_11661_P42,B9,iTru7_302_03,TGACGCAT,iTru5_109_C,AGCGTGTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_24 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_57,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_57,Feist_11661_P42,D9,iTru7_302_04,AGCGTGTT,iTru5_110_C,AGGCTGAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_57 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_69,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_1_69,Feist_11661_P42,F9,iTru7_302_05,TGCACCAA,iTru5_111_C,AGGTTCCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_1_69 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_23,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_23,Feist_11661_P42,H9,iTru7_302_06,ATCACACG,iTru5_112_C,AGTGACCT,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_23 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_50,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_50,Feist_11661_P42,J9,iTru7_302_07,ATGCCTGT,iTru5_101_D,GGTTAGCT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_50 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_61,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_3_61,Feist_11661_P42,L9,iTru7_302_08,ACCTGACT,iTru5_102_D,GTAGCGTA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_3_61 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_22,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_22,Feist_11661_P42,N9,iTru7_302_09,GCTTCGAA,iTru5_103_D,GGACTACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_22 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_36,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_36,Feist_11661_P42,P9,iTru7_302_10,CGGTCATA,iTru5_104_D,TGGTTCGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_36 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_46,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_5_46,Feist_11661_P42,B11,iTru7_302_11,GTTAGACG,iTru5_105_D,GGAGTCTT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_5_46 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_23,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_23,Feist_11661_P42,D11,iTru7_302_12,TCTAACGC,iTru5_106_D,GGATTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_23 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_41,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_41,Feist_11661_P42,F11,iTru7_303_01,ATAGCGGT,iTru5_107_D,TCGGATTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_41 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_51,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_7_51,Feist_11661_P42,H11,iTru7_303_02,GGACCTAT,iTru5_108_D,GAGCAATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_7_51 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_25,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_25,Feist_11661_P42,J11,iTru7_303_03,CGATGCTT,iTru5_109_D,GATCCACT,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_25 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_58,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_58,Feist_11661_P42,L11,iTru7_303_04,GAGCTTGT,iTru5_110_D,GAAGACTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_58 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_64,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_17_64,Feist_11661_P42,N11,iTru7_303_05,GTGAAGTG,iTru5_111_D,GCCACTTA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_17_64 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_25,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_25,Feist_11661_P42,P11,iTru7_303_06,GAGTGGTT,iTru5_112_D,TCCATTGC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_25 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_55,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_55,Feist_11661_P42,B13,iTru7_303_07,TGATACGC,iTru5_101_E,AACAGTCC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_55 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_63,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_19_63,Feist_11661_P42,D13,iTru7_303_08,AGCAGATG,iTru5_102_E,AAGCTCAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_19_63 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_23,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_23,Feist_11661_P42,F13,iTru7_303_09,CCAGTGTT,iTru5_103_E,AAGTCCTC,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_23 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_46,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_46,Feist_11661_P42,H13,iTru7_303_10,ATTCCTCC,iTru5_104_E,ACACTCTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_46 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_51,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_21_51,Feist_11661_P42,J13,iTru7_303_11,CTAACTCG,iTru5_105_E,ACGGTACA,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_21_51 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_25,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_25,Feist_11661_P42,L13,iTru7_303_12,GATGAGAC,iTru5_106_E,ACTCCTAC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_25 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_49,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_49,Feist_11661_P42,N13,iTru7_304_01,TCAGGCTT,iTru5_107_E,AGAGGATG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_49 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_57,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_29_57,Feist_11661_P42,P13,iTru7_304_02,GTTCTCGT,iTru5_108_E,AGCCGTAA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_29_57 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_24,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_24,Feist_11661_P42,B15,iTru7_304_03,ATCGATCG,iTru5_109_E,AGCTTCAG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_24 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_42,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_42,Feist_11661_P42,D15,iTru7_304_04,CCTCAGTT,iTru5_110_E,AGGTAGGA,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_42 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_62,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_31_62,Feist_11661_P42,F15,iTru7_304_05,ACTGCTAG,iTru5_111_E,AGTACACG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_31_62 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_21,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_21,Feist_11661_P42,H15,iTru7_304_06,TCCGTGAA,iTru5_112_E,AGTGCATC,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_21 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_41,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_41,Feist_11661_P42,J15,iTru7_304_07,GGATTCGT,iTru5_101_F,TTGGACTG,Feist_11661,pool1,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_41 +2,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_50,AB5075_AZM_TALE_in_MHB_A_baumannii_AB5075_WT_33_50,Feist_11661_P42,L15,iTru7_304_08,GGTCAGAT,iTru5_102_F,GTCGATTG,Feist_11661,pool2,AB5075 AZM TALE in MHB_A. baumannii AB5075_WT_33_50 +2,JM-Metabolic__GN02514,JM-Metabolic__GN02514,Feist_11661_P42,N15,iTru7_304_09,TCGTGGAT,iTru5_103_F,GGCATTCT,Feist_11661,pool1,JM-Metabolic__GN02514 +2,JM-Metabolic__GN02529,JM-Metabolic__GN02529,Feist_11661_P42_diluted,P15,iTru7_304_10,CGTGTGTA,iTru5_104_F,TGGTATCC,Feist_11661,pool2,JM-Metabolic__GN02529 +2,JM-Metabolic__GN02531,JM-Metabolic__GN02531,Feist_11661_P42_diluted,B17,iTru7_304_11,GTGTCTGA,iTru5_105_F,GGCAAGTT,Feist_11661,pool1,JM-Metabolic__GN02531 +2,JM-Metabolic__GN02567,JM-Metabolic__GN02567,Feist_11661_P42,D17,iTru7_304_12,GAATCGTG,iTru5_106_F,GTCTGAGT,Feist_11661,pool2,JM-Metabolic__GN02567 +2,JM-Metabolic__GN02590,JM-Metabolic__GN02590,Feist_11661_P42_diluted,F17,iTru7_305_01,GCGATAGT,iTru5_107_F,TCTACGCA,Feist_11661,pool1,JM-Metabolic__GN02590 +2,JM-Metabolic__GN02657,JM-Metabolic__GN02657,Feist_11661_P42_diluted,H17,iTru7_305_02,GGCTATTG,iTru5_108_F,GAGGCATT,Feist_11661,pool2,JM-Metabolic__GN02657 +2,JM-Metabolic__GN02748,JM-Metabolic__GN02748,Feist_11661_P42,J17,iTru7_305_03,AGTTACGG,iTru5_109_F,GCTAAGGA,Feist_11661,pool1,JM-Metabolic__GN02748 +2,JM-Metabolic__GN02766,JM-Metabolic__GN02766,Feist_11661_P42_diluted,L17,iTru7_305_04,CGTACGAA,iTru5_110_F,GCCAGAAT,Feist_11661,pool2,JM-Metabolic__GN02766 +2,JM-Metabolic__GN02769,JM-Metabolic__GN02769,Feist_11661_P42_diluted,N17,iTru7_305_05,ACCACGAT,iTru5_111_F,TAAGTGGC,Feist_11661,pool1,JM-Metabolic__GN02769 +2,JM-Metabolic__GN02787,JM-Metabolic__GN02787,Feist_11661_P42_diluted,P17,iTru7_305_06,GATTACCG,iTru5_112_F,GCAATGAG,Feist_11661,pool2,JM-Metabolic__GN02787 +2,JM-Metabolic__GN03132,JM-Metabolic__GN03132,Feist_11661_P42,B19,iTru7_305_07,GAGATACG,iTru5_101_G,AACTGAGG,Feist_11661,pool1,JM-Metabolic__GN03132 +2,JM-Metabolic__GN03218,JM-Metabolic__GN03218,Feist_11661_P42_diluted,D19,iTru7_305_08,CGACGTTA,iTru5_102_G,AAGGAAGG,Feist_11661,pool2,JM-Metabolic__GN03218 +2,JM-Metabolic__GN03252,JM-Metabolic__GN03252,Feist_11661_P42_diluted,F19,iTru7_305_09,GAGATGTC,iTru5_103_G,AATGGTCG,Feist_11661,pool1,JM-Metabolic__GN03252 +2,JM-Metabolic__GN03409,JM-Metabolic__GN03409,Feist_11661_P42_diluted,H19,iTru7_305_10,GATTGGAG,iTru5_104_G,ACAGCAAG,Feist_11661,pool2,JM-Metabolic__GN03409 +2,JM-Metabolic__GN04014,JM-Metabolic__GN04014,Feist_11661_P42_diluted,J19,iTru7_305_11,GCAATTCG,iTru5_105_G,ACGTATGG,Feist_11661,pool1,JM-Metabolic__GN04014 +2,JM-Metabolic__GN04094,JM-Metabolic__GN04094,Feist_11661_P42_diluted,L19,iTru7_305_12,CGTCAATG,iTru5_106_G,ACTGCACT,Feist_11661,pool2,JM-Metabolic__GN04094 +2,JM-Metabolic__GN04255,JM-Metabolic__GN04255,Feist_11661_P42_diluted,N19,iTru7_401_01,ATGCACGA,iTru5_107_G,AGAGTCCA,Feist_11661,pool1,JM-Metabolic__GN04255 +2,JM-Metabolic__GN04306,JM-Metabolic__GN04306,Feist_11661_P42_diluted,P19,iTru7_401_02,ATCGCCAT,iTru5_108_G,AGCCTATC,Feist_11661,pool2,JM-Metabolic__GN04306 +2,JM-Metabolic__GN04428,JM-Metabolic__GN04428,Feist_11661_P42_diluted,B21,iTru7_401_03,TCTCGCAA,iTru5_109_G,AGGAACAC,Feist_11661,pool1,JM-Metabolic__GN04428 +2,JM-Metabolic__GN04488,JM-Metabolic__GN04488,Feist_11661_P42_diluted,D21,iTru7_401_04,ACGACAGA,iTru5_110_G,AGGTCTGT,Feist_11661,pool2,JM-Metabolic__GN04488 +2,JM-Metabolic__GN04540,JM-Metabolic__GN04540,Feist_11661_P42_diluted,F21,iTru7_401_05,TTACGGCT,iTru5_111_G,AGTATGCC,Feist_11661,pool1,JM-Metabolic__GN04540 +2,JM-Metabolic__GN04563,JM-Metabolic__GN04563,Feist_11661_P42_diluted,H21,iTru7_401_06,GAGGACTT,iTru5_112_G,AGTTCGCA,Feist_11661,pool2,JM-Metabolic__GN04563 +2,JM-Metabolic__GN04612,JM-Metabolic__GN04612,Feist_11661_P42_diluted,J21,iTru7_401_07,GGCATACT,iTru5_101_H,TGGAAGCA,Feist_11661,pool1,JM-Metabolic__GN04612 +2,JM-Metabolic__GN04665,JM-Metabolic__GN04665,Feist_11661_P42_diluted,L21,iTru7_401_08,CGTAGGTT,iTru5_102_H,GTCAGTCA,Feist_11661,pool2,JM-Metabolic__GN04665 +2,JM-Metabolic__GN04682,JM-Metabolic__GN04682,Feist_11661_P42_diluted,N21,iTru7_401_09,ATATGCGC,iTru5_103_H,GTAACCGA,Feist_11661,pool1,JM-Metabolic__GN04682 +2,JM-Metabolic__GN05002,JM-Metabolic__GN05002,Feist_11661_P42_diluted,P21,iTru7_401_10,GGATGTAG,iTru5_104_H,GTTATGGC,Feist_11661,pool2,JM-Metabolic__GN05002 +2,JM-Metabolic__GN05109,JM-Metabolic__GN05109,Feist_11661_P42_diluted,B23,iTru7_401_11,CCTGTCAT,iTru5_105_H,GTAAGCAC,Feist_11661,pool1,JM-Metabolic__GN05109 +2,JM-Metabolic__GN05128,JM-Metabolic__GN05128,Feist_11661_P42_diluted,D23,iTru7_401_12,TGCTCATG,iTru5_106_H,GGAATGTC,Feist_11661,pool2,JM-Metabolic__GN05128 +2,JM-Metabolic__GN05367,JM-Metabolic__GN05367,Feist_11661_P42_diluted,F23,iTru7_402_01,TGAAGACG,iTru5_107_H,GAGAAGGT,Feist_11661,pool1,JM-Metabolic__GN05367 +2,JM-Metabolic__GN05377,JM-Metabolic__GN05377,Feist_11661_P42_diluted,H23,iTru7_402_02,GTTACGCA,iTru5_108_H,GAGTAGAG,Feist_11661,pool2,JM-Metabolic__GN05377 +2,7A,7A,Gerwick_tubes,J23,iTru7_402_03,ACTCAGAC,iTru5_109_H,GCATTGGT,Gerwick_6123,pool1,7A +2,8A,8A,Gerwick_tubes,L23,iTru7_402_04,GTCCACAT,iTru5_110_H,TCCAGCAA,Gerwick_6123,pool2,8A +2,BLANK_42_12G,BLANK_42_12G,Feist_11661_P42,N23,iTru7_402_05,CGCTAGTA,iTru5_111_H,GAATCCGT,Feist_11661,pool1,BLANK.42.12G +2,BLANK_42_12H,BLANK_42_12H,Feist_11661_P42,P23,iTru7_402_06,GAATCCGA,iTru5_112_H,TACATCGG,Feist_11661,pool2,BLANK.42.12H ,,,,,,,,,,, [Bioinformatics],,,,,,,,,,, Sample_Project,QiitaID,BarcodesAreRC,ForwardAdapter,ReverseAdapter,HumanFiltering,library_construction_protocol,experiment_design_description,,,, diff --git a/qp_klp/tests/data/tellread_test.sbatch b/qp_klp/tests/data/tellread_test.sbatch new file mode 100644 index 00000000..82c79e0a --- /dev/null +++ b/qp_klp/tests/data/tellread_test.sbatch @@ -0,0 +1,47 @@ +#!/bin/bash -l +#SBATCH -J tellread +#SBATCH -p qiita +#SBATCH -N 1 +#SBATCH -c 4 +#SBATCH --mem 16G +#SBATCH --time 1440 + +#SBATCH --output /home/runner/qp-knight-lab-processing/qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/TellReadJob/logs/tellread_%x-%A.out +#SBATCH --error /home/runner/qp-knight-lab-processing/qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/TellReadJob/logs/tellread_%x-%A.err + +set -x + +module load singularity_3.6.4 +/home/user/tellread-release-novaseqX/run_tellread_sing.sh \ + -i qp_klp/tests/data/211021_A00000_0000_SAMPLE \ + -o /home/runner/qp-knight-lab-processing/qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/TellReadJob \ + -s $(echo C501,C509,C502,C510,C503,C511,C504,C512,C505,C513,C506,C514,C507,C515,C508,C516,C517,C525,C518,C526,C519,C527,C520,C528,C521,C529,C522,C530,C523,C531,C524,C532,C533,C541,C534,C542,C535,C543,C536,C544,C537,C545,C538,C546,C539,C547,C540,C548,C549,C557,C550,C558,C551,C559,C552,C560,C553,C561,C554,C562,C555,C563,C556,C564,C565,C573,C566,C574,C567,C575,C568,C576,C569,C577,C570,C578,C571,C579,C572,C580,C581,C589,C582,C590,C583,C591,C584,C592,C585,C593,C586,C594,C587,C595,C588,C596 | tr -d '"') \ + -g $(echo NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE | tr -d '"') \ + -j ${SLURM_JOB_CPUS_PER_NODE} \ + -l s_4 + +# get the timestamp for the most recently changed file in directory '.' + +# hard-limit for wait time set to ~ 8 hours. +# (4 checks per hour, for 8 hours equals 32 iterations) +for i in $(seq 1 32); +do + before="$(find /home/runner/qp-knight-lab-processing/qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/TellReadJob/Full -type f -printf '%T@\n' | sort -n | tail -1)" + # assume TellReadJob is finished if ctime hasn't changed in 15 minutes + # for any fastq file in the directory. + sleep 900 + after="$(find /home/runner/qp-knight-lab-processing/qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/TellReadJob/Full -type f -printf '%T@\n' | sort -n | tail -1)" + + echo "$before $after" + + if [[ "$before" == "$after" ]]; then + echo "DONE" + exit 0 + else + echo "NOT DONE" + fi +done + +# if we've reached this point then we've exceeded our hard-limit for waiting. +# return w/an error. +exit 1 diff --git a/qp_klp/tests/test_WorkflowFactory.py b/qp_klp/tests/test_WorkflowFactory.py new file mode 100644 index 00000000..51c42b98 --- /dev/null +++ b/qp_klp/tests/test_WorkflowFactory.py @@ -0,0 +1,176 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2014--, The Qiita Development Team. +# +# Distributed under the terms of the BSD 3-clause License. +# +# The full license is in the file LICENSE, distributed with this software. +# ----------------------------------------------------------------------------- +from qp_klp.WorkflowFactory import WorkflowFactory +from unittest import TestCase +from os import makedirs +from qp_klp.Protocol import (PROTOCOL_NAME_ILLUMINA, + PROTOCOL_NAME_TELLSEQ) +from qp_klp.Assays import (ASSAY_NAME_METAGENOMIC, + ASSAY_NAME_METATRANSCRIPTOMIC, + ASSAY_NAME_AMPLICON) +from shutil import rmtree + + +class WorkflowFactoryTests(TestCase): + def setUp(self): + self.remove_these = [] + + def tearDown(self): + for fp in self.remove_these: + rmtree(fp) + + def _create_directory(self, fp): + makedirs(fp, exist_ok=True) + self.remove_these.append(fp) + + def test_no_parameters(self): + # confirm factory doesn't create workflows when given no parameters. + msg = "kwargs must not be None and must define 'uif_path'" + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow() + + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow(**{}) + + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow(**{"foo": "bar"}) + + def test_workflow_performs_parameter_checking(self): + # confirm that once factory is given enough information to select a + # Workflow() class, the class itself confirms that it has all the + # parameters it needs. + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/metagenomic/" + "illumina/good_sheet1.csv"} + + msg = ("The following values must also be defined in kwargs for " + "StandardMetagenomicWorkflow workflows: qclient, lane_number," + " config_fp, run_identifier, output_dir, job_id, lane_number," + " is_restart") + + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow(**kwargs) + + kwargs = {"uif_path": "qp_klp/tests/data/pre-preps/good_pre_prep1.txt"} + + msg = ("The following values must also be defined in kwargs for " + "StandardAmpliconWorkflow workflows: qclient, config_fp, " + "run_identifier, output_dir, job_id, is_restart") + + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow(**kwargs) + + def test_invalid_sample_sheets(self): + # confirm an otherwise good-sample-sheet w/a bad SheetType is going + # fail because it doesn't pass validation. SheetType directly + # determines the Instrument Mixin to be used. + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/metagenomic/" + "illumina/bad_sheet1.csv"} + + msg = ("'qp_klp/tests/data/sample-sheets/metagenomic/illumina/" + "bad_sheet1.csv' does not appear to be a valid sample-sheet.") + + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow(**kwargs) + + # confirm an otherwise good-sample-sheet w/a bad Assay value is going + # to fail because it doesn't pass validation. + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/metagenomic/" + "illumina/bad_sheet2.csv"} + + msg = ("'qp_klp/tests/data/sample-sheets/metagenomic/illumina/" + "bad_sheet2.csv' does not appear to be a valid sample-sheet.") + + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow(**kwargs) + + # confirm a file that is obviously not a mapping-file or sample-sheet + # file will not follow through. + kwargs = {"uif_path": "qp_klp/tests/data/Demultiplex_Stats.csv"} + + msg = ("Your uploaded file doesn't appear to be a sample-sheet or a " + "mapping-file.") + with self.assertRaisesRegex(ValueError, msg): + WorkflowFactory.generate_workflow(**kwargs) + + def test_metagenomic_workflow_creation(self): + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/metagenomic/" + "illumina/good_sheet1.csv", + "qclient": None, + "lane_number": "1", + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": "211021_A00000_0000_SAMPLE", + "output_dir": "qp_klp/tests/test_output", + "job_id": "78901", + "is_restart": False + } + + self._create_directory(kwargs['output_dir']) + + wf = WorkflowFactory.generate_workflow(**kwargs) + + # confirm that the proper type of workflow was generated. + self.assertEqual(wf.protocol_type, PROTOCOL_NAME_ILLUMINA) + self.assertEqual(wf.assay_type, ASSAY_NAME_METAGENOMIC) + + def test_metatranscriptomic_workflow_creation(self): + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/" + "metatranscriptomic/illumina/good_sheet1.csv", + "qclient": None, + "lane_number": "1", + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": "211021_A00000_0000_SAMPLE", + "output_dir": "qp_klp/tests/test_output", + "job_id": "78901", + "is_restart": False + } + + self._create_directory(kwargs['output_dir']) + + wf = WorkflowFactory.generate_workflow(**kwargs) + + # confirm that the proper type of workflow was generated. + self.assertEqual(wf.protocol_type, PROTOCOL_NAME_ILLUMINA) + self.assertEqual(wf.assay_type, ASSAY_NAME_METATRANSCRIPTOMIC) + + def test_amplicon_workflow_creation(self): + kwargs = {"uif_path": "qp_klp/tests/data/pre-preps/good_pre_prep1.txt", + "qclient": None, + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": "211021_A00000_0000_SAMPLE", + "output_dir": "qp_klp/tests/test_output", + "job_id": "78901", + "is_restart": False + } + + self._create_directory(kwargs['output_dir']) + + wf = WorkflowFactory.generate_workflow(**kwargs) + + # confirm that the proper type of workflow was generated. + self.assertEqual(wf.protocol_type, PROTOCOL_NAME_ILLUMINA) + self.assertEqual(wf.assay_type, ASSAY_NAME_AMPLICON) + + def test_tellseq_workflow_creation(self): + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/metagenomic/" + "tellseq/good_sheet1.csv", + "qclient": None, + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": "211021_A00000_0000_SAMPLE", + "output_dir": "qp_klp/tests/test_output", + "job_id": "78901", + "lane_number": "1", + "is_restart": False + } + + self._create_directory(kwargs['output_dir']) + + wf = WorkflowFactory.generate_workflow(**kwargs) + + # confirm that the proper type of workflow was generated. + self.assertEqual(wf.protocol_type, PROTOCOL_NAME_TELLSEQ) + self.assertEqual(wf.assay_type, ASSAY_NAME_METAGENOMIC) diff --git a/qp_klp/tests/test_amplicon_step.py b/qp_klp/tests/test_amplicon_step.py deleted file mode 100644 index 8d964013..00000000 --- a/qp_klp/tests/test_amplicon_step.py +++ /dev/null @@ -1,53 +0,0 @@ -# ----------------------------------------------------------------------------- -# Copyright (c) 2014--, The Qiita Development Team. -# -# Distributed under the terms of the BSD 3-clause License. -# -# The full license is in the file LICENSE, distributed with this software. -# ----------------------------------------------------------------------------- -from sequence_processing_pipeline.Pipeline import Pipeline -from os.path import join, abspath -from qp_klp.tests.test_step import BaseStepTests -from qp_klp.Amplicon import Amplicon - - -class AmpliconTests(BaseStepTests): - def setUp(self): - super().setUp() - self.good_mapping_file = join(abspath('./qp_klp'), 'tests', 'data', - 'good-mapping-file.txt') - - def test_amplicon_creation(self): - # Test base-class creation method, even though base-class will never - # be instantiated by itself in normal usage. - - with self.assertRaisesRegex(ValueError, "A pipeline object is needed" - " to initialize Step"): - Amplicon(None, self.qiita_id, None) - - # create amplicon pipeline for failure tests. - amplicon_pipeline = Pipeline('qp_klp/tests/data/configuration.json', - self.good_run_id, - None, - self.good_mapping_file, - self.output_file_path, - self.qiita_id, - Amplicon.AMPLICON_TYPE) - - with self.assertRaisesRegex(ValueError, "A Qiita job-id is needed to " - "initialize Step"): - Amplicon(amplicon_pipeline, None, None) - - # create meta*omic pipeline for final test. - metagenomic_pipeline = Pipeline('qp_klp/tests/data/configuration.json', - self.good_run_id, - self.good_sample_sheet_path, - None, - self.output_file_path, - self.qiita_id, - Amplicon.METAGENOMIC_TYPE) - - with self.assertRaisesRegex(ValueError, "Cannot create an Amplicon run" - " using a Metagenomic-" - "configured Pipeline."): - Amplicon(metagenomic_pipeline, self.qiita_id, None) diff --git a/qp_klp/tests/test_helpers.py b/qp_klp/tests/test_helpers.py new file mode 100644 index 00000000..286484e7 --- /dev/null +++ b/qp_klp/tests/test_helpers.py @@ -0,0 +1,404 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2014--, The Qiita Development Team. +# +# Distributed under the terms of the BSD 3-clause License. +# +# The full license is in the file LICENSE, distributed with this software. +# ----------------------------------------------------------------------------- +from unittest import TestCase +from os.path import join, abspath, exists +from os import makedirs +from shutil import rmtree +from os import remove, getcwd +from qp_klp.Workflows import WorkflowError +from qp_klp.WorkflowFactory import WorkflowFactory +from qp_klp.FailedSamplesRecord import FailedSamplesRecord +from copy import deepcopy +from tempfile import TemporaryDirectory + + +class FakeClient(): + def __init__(self): + self.cwd = getcwd() + self.base_path = join(self.cwd, 'qp_klp/tests/data/QDir') + self.qdirs = {'Demultiplexed': 'Demultiplexed', + 'beta_div_plots': 'analysis/beta_div_plots', + 'rarefaction_curves': 'analysis/rarefaction_curves', + 'taxa_summary': 'analysis/taxa_summary', + 'q2_visualization': 'working_dir', + 'distance_matrix': 'working_dir', + 'ordination_results': 'working_dir', + 'alpha_vector': 'working_dir', + 'FASTQ': 'FASTQ', + 'BIOM': 'BIOM', + 'per_sample_FASTQ': 'per_sample_FASTQ', + 'SFF': 'SFF', + 'FASTA': 'FASTA', + 'FASTA_Sanger': 'FASTA_Sanger', + 'FeatureData': 'FeatureData', + 'job-output-folder': 'job-output-folder', + 'BAM': 'BAM', + 'VCF': 'VCF', + 'SampleData': 'SampleData', + 'uploads': 'uploads'} + + self.samples_in_13059 = ['13059.SP331130A04', '13059.AP481403B02', + '13059.LP127829A02', '13059.BLANK3.3B', + '13059.EP529635B02', '13059.EP542578B04', + '13059.EP446602B01', '13059.EP121011B01', + '13059.EP636802A01', '13059.SP573843A04'] + + # note these samples have known tids, but aren't in good-sample-sheet. + self.samples_in_11661 = ['11661.1.24', '11661.1.57', '11661.1.86', + '11661.10.17', '11661.10.41', '11661.10.64', + '11661.11.18', '11661.11.43', '11661.11.64', + '11661.12.15'] + + self.samples_in_6123 = ['3A', '4A', '5B', '6A', 'BLANK.41.12G', '7A', + '8A', 'ISB', 'GFR', '6123'] + + self.info_in_11661 = {'number-of-samples': 10, + 'categories': ['sample_type', 'tube_id']} + + self.info_in_13059 = {'number-of-samples': 10, + 'categories': ['anonymized_name', + 'collection_timestamp', + 'description', + 'dna_extracted', + 'elevation', 'empo_1', + 'empo_2', 'empo_3', + 'env_biome', 'env_feature', + 'env_material', + 'env_package', + 'geo_loc_name', 'host_age', + 'host_age_units', + 'host_body_habitat', + 'host_body_mass_index', + 'host_body_product', + 'host_body_site', + 'host_common_name', + 'host_height', + 'host_height_units', + 'host_life_stage', + 'host_scientific_name', + 'host_subject_id', + 'host_taxid', 'host_weight', + 'host_weight_units', + 'latitude', 'longitude', + 'nyuid', + 'physical_specimen_location', + 'physical_specimen_remaining', + 'predose_time', + 'sample_type', + 'scientific_name', 'sex', + 'subject_id', 'taxon_id', + 'title', 'tube_id']} + + # Study not in qiita-rc. Faking results. + self.info_in_6123 = {'number-of-samples': 10, + 'categories': ['sample_type', 'subject_id', + 'title']} + + self.tids_13059 = {"header": ["tube_id"], + "samples": {'13059.SP331130A04': ['SP331130A-4'], + '13059.AP481403B02': ['AP481403B-2'], + '13059.LP127829A02': ['LP127829A-2'], + '13059.BLANK3.3B': ['BLANK3.3B'], + '13059.EP529635B02': ['EP529635B-2'], + '13059.EP542578B04': ['EP542578B-4'], + '13059.EP446602B01': ['EP446602B-1'], + '13059.EP121011B01': ['EP121011B-1'], + '13059.EP636802A01': ['EP636802A-1'], + '13059.SP573843A04': ['SP573843A-4']}} + + self.tids_11661 = {"header": ["tube_id"], + "samples": {"11661.1.24": ["1.24"], + "11661.1.57": ["1.57"], + "11661.1.86": ["1.86"], + "11661.10.17": ["10.17"], + "11661.10.41": ["10.41"], + "11661.10.64": ["10.64"], + "11661.11.18": ["11.18"], + "11661.11.43": ["11.43"], + "11661.11.64": ["11.64"], + "11661.12.15": ["12.15"]}} + + for key in self.qdirs: + self.qdirs[key] = join(self.base_path, self.qdirs[key]) + + for qdir in self.qdirs: + makedirs(self.qdirs[qdir], exist_ok=True) + + self.fake_id = 1000 + self._server_url = "some.server.url" + self.saved_posts = {} + + def get(self, url): + m = {'/api/v1/study/11661/samples': self.samples_in_11661, + '/api/v1/study/11661/samples/categories=tube_id': self.tids_11661, + '/api/v1/study/11661/samples/info': self.info_in_11661, + '/api/v1/study/13059/samples': self.samples_in_13059, + '/api/v1/study/13059/samples/categories=tube_id': self.tids_13059, + '/api/v1/study/13059/samples/info': self.info_in_13059, + '/api/v1/study/6123/samples': self.samples_in_6123, + '/api/v1/study/6123/samples/info': self.info_in_6123, + '/qiita_db/artifacts/types/': self.qdirs} + + if url in m: + return m[url] + + return None + + def post(self, url, data=None): + if '/qiita_db/prep_template/' == url: + self.fake_id += 1 + return {'prep': self.fake_id} + elif '/qiita_db/artifact/' == url: + self.saved_posts[str(self.fake_id)] = data + self.fake_id += 1 + return {'job_id': self.fake_id} + else: + raise ValueError("Unsupported URL") + + +class AnotherFakeClient(): + def __init__(self): + self.cwd = getcwd() + self.base_path = join(self.cwd, 'qp_klp/tests/data/QDir') + self.qdirs = {'Demultiplexed': 'Demultiplexed', + 'beta_div_plots': 'analysis/beta_div_plots', + 'rarefaction_curves': 'analysis/rarefaction_curves', + 'taxa_summary': 'analysis/taxa_summary', + 'q2_visualization': 'working_dir', + 'distance_matrix': 'working_dir', + 'ordination_results': 'working_dir', + 'alpha_vector': 'working_dir', + 'FASTQ': 'FASTQ', + 'BIOM': 'BIOM', + 'per_sample_FASTQ': 'per_sample_FASTQ', + 'SFF': 'SFF', + 'FASTA': 'FASTA', + 'FASTA_Sanger': 'FASTA_Sanger', + 'FeatureData': 'FeatureData', + 'job-output-folder': 'job-output-folder', + 'BAM': 'BAM', + 'VCF': 'VCF', + 'SampleData': 'SampleData', + 'uploads': 'uploads'} + + self.samples_in_99999 = ['99999.AAAAAAAAAAA', + '99999.BBBBBBBBBBB', + '99999.CCCCCCCCCCC', + '99999.BLANK1.1BCD'] + + self.info_in_99999 = {'number-of-samples': 10, + 'categories': ['column1', 'column2', 'tube_id']} + + self.tids_99999 = {"header": ["tube_id"], + "samples": {'99999.AAAAAAAAAAA': ['1234567890a'], + '99999.BBBBBBBBBBB': ['234567890ab'], + '99999.CCCCCCCCCCC': ['34567890abc'], + '99999.BLANK1.1BCD': ['BLANK1.1BCD']}} + + for key in self.qdirs: + self.qdirs[key] = join(self.base_path, self.qdirs[key]) + + for qdir in self.qdirs: + makedirs(self.qdirs[qdir], exist_ok=True) + + def get(self, url): + m = {'/api/v1/study/99999/samples': self.samples_in_99999, + '/api/v1/study/99999/samples/categories=tube_id': self.tids_99999, + '/api/v1/study/99999/samples/info': self.info_in_99999, + '/qiita_db/artifacts/types/': self.qdirs} + + if url in m: + return m[url] + + return None + + +class TestHelpers(TestCase): + def setUp(self): + self.fake_bin_path = "" + self.delete_these_files = [] + self.delete_these_dirs = [] + # self.fake_bin_path = self.get_searchable_path() + + # self.output_dir represents a qiita working directory. + package_root = abspath('./qp_klp/tests/data') + self.output_dir = join(package_root, + "077c4da8-74eb-4184-8860-0207f53623be") + self.delete_these_dirs = [self.output_dir] + + # We want a clean directory, nothing from leftover runs + makedirs(self.output_dir, exist_ok=False) + + self.debug = False + self.fake_client = FakeClient() + self.kwargs = { + "uif_path": "qp_klp/tests/data/sample-sheets/metagenomic/" + "illumina/good_sheet1.csv", + "qclient": self.fake_client, + "lane_number": "1", + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": '211021_A00000_0000_SAMPLE', + "output_dir": self.output_dir, + "job_id": "077c4da8-74eb-4184-8860-0207f53623be", + "is_restart": False + } + + def tearDown(self): + if not self.debug: + rmtree(self.output_dir) + + for fp in self.delete_these_files: + if exists(fp): + remove(fp) + + def test_generate_special_map(self): + wf = WorkflowFactory.generate_workflow(**self.kwargs) + wf.generate_special_map() + + obs = wf.special_map + exp = [('NYU_BMS_Melanoma_13059', + join(self.fake_client.base_path, 'uploads/13059'), '13059'), + ('Feist_11661', + join(self.fake_client.base_path, 'uploads/11661'), '11661'), + ('Gerwick_6123', + join(self.fake_client.base_path, 'uploads/6123'), '6123')] + + self.assertEqual(obs, exp) + + def test_get_project_info(self): + wf = WorkflowFactory.generate_workflow(**self.kwargs) + wf.generate_special_map() + obs = wf.pipeline.get_project_info() + + exp = [{'project_name': 'NYU_BMS_Melanoma_13059', 'qiita_id': '13059', + 'contains_replicates': False}, + {'project_name': 'Feist_11661', 'qiita_id': '11661', + 'contains_replicates': False}, + {'project_name': 'Gerwick_6123', 'qiita_id': '6123', + 'contains_replicates': False}] + + self.assertEqual(obs, exp) + + def test_get_samples_in_qiita(self): + wf = WorkflowFactory.generate_workflow(**self.kwargs) + obs_samples, obs_tids = wf.get_samples_in_qiita(self.fake_client, + '13059') + + exp_samples = {'EP121011B01', 'EP529635B02', 'EP542578B04', + 'SP573843A04', 'SP331130A04', 'EP446602B01', + 'BLANK3.3B', 'AP481403B02', 'LP127829A02', + 'EP636802A01'} + + exp_tids = {'13059.SP331130A04': ['SP331130A-4'], + '13059.AP481403B02': ['AP481403B-2'], + '13059.LP127829A02': ['LP127829A-2'], + '13059.BLANK3.3B': ['BLANK3.3B'], + '13059.EP529635B02': ['EP529635B-2'], + '13059.EP542578B04': ['EP542578B-4'], + '13059.EP446602B01': ['EP446602B-1'], + '13059.EP121011B01': ['EP121011B-1'], + '13059.EP636802A01': ['EP636802A-1'], + '13059.SP573843A04': ['SP573843A-4']} + + self.assertEqual(obs_samples, exp_samples) + self.assertDictEqual(obs_tids, exp_tids) + + def test_get_tube_ids_from_qiita(self): + wf = WorkflowFactory.generate_workflow(**self.kwargs) + wf._get_tube_ids_from_qiita() + + obs = wf.tube_id_map + exp = {'13059': {'SP331130A04': 'SP331130A-4', + 'AP481403B02': 'AP481403B-2', + 'LP127829A02': 'LP127829A-2', + 'BLANK3.3B': 'BLANK3.3B', + 'EP529635B02': 'EP529635B-2', + 'EP542578B04': 'EP542578B-4', + 'EP446602B01': 'EP446602B-1', + 'EP121011B01': 'EP121011B-1', + 'EP636802A01': 'EP636802A-1', + 'SP573843A04': 'SP573843A-4'}, + '11661': {'1.24': '1.24', '1.57': '1.57', '1.86': '1.86', + '10.17': '10.17', '10.41': '10.41', '10.64': '10.64', + '11.18': '11.18', '11.43': '11.43', '11.64': '11.64', + '12.15': '12.15'}} + + self.assertDictEqual(obs, exp) + + def test_project_metadata_check(self): + wf = WorkflowFactory.generate_workflow(**self.kwargs) + + # _project_metadata_check() should return w/out raising an Error if + # step and fake_client is used. + wf._project_metadata_check() + + self.fake_client.info_in_11661['categories'].append('well_id_384') + self.fake_client.info_in_13059['categories'].append('well_id_384') + + msg = ("'well_id_384' exists in Qiita study 13059's sample metadata" + "\n'well_id_384' exists in Qiita study 11661's sample metadata") + with self.assertRaisesRegex(WorkflowError, msg): + wf._project_metadata_check() + + +class FailedSamplesRecordTests(TestCase): + def setUp(self): + class MockSample(): + def __init__(self, sample_id, project_name): + self.Sample_ID = sample_id + self.Sample_Project = project_name + + self.samples = [MockSample('A', 'ProjectOne'), + MockSample('B', 'ProjectTwo'), + MockSample('C', 'ProjectThree'), + MockSample('D', 'ProjectFour')] + + self.output = TemporaryDirectory() + + def test_failed_samples_record(self): + fsr = FailedSamplesRecord(self.output.name, self.samples) + + # assert that a state file doesn't already exist and attempt to load() + # it. State should remain unchanged. + exp = deepcopy(fsr.sample_state) + self.assertFalse(exists(fsr.output_path)) + fsr.load() + self.assertEqual(fsr.sample_state, exp) + + # confirm that dump() creates the appropriate file. + self.assertFalse(exists(fsr.output_path)) + fsr.dump() + self.assertTrue(exists(fsr.output_path)) + + # load the dumped() file, and confirm that nothing changed since + # the state wasn't update()d. + fsr.load() + self.assertEqual(fsr.sample_state, exp) + + # assert samples A and C failed at the ConvertJob stage, assert + # state changed. dump() state and load() it. Confirm state on disk + # reflects changes. + fsr.update(['A', 'C'], 'ConvertJob') + self.assertNotEqual(fsr.sample_state, exp) + fsr.dump() + fsr.load() + exp = {'A': 'ConvertJob', 'B': None, 'C': 'ConvertJob', 'D': None} + self.assertEqual(fsr.sample_state, exp) + + # B should be failed at FastQCJob but A and C should still be + # failed at ConvertJob + fsr.update(['A', 'B', 'C'], "FastQCJob") + exp = {'A': 'ConvertJob', 'B': 'FastQCJob', + 'C': 'ConvertJob', 'D': None} + self.assertEqual(fsr.sample_state, exp) + + # confirm html file exists. Assume pandas DataFrame.to_html() works + # as intended. + self.assertFalse(exists(fsr.report_path)) + fsr.generate_report() + self.assertTrue(exists(fsr.report_path)) diff --git a/qp_klp/tests/test_metagenomic_step.py b/qp_klp/tests/test_metagenomic_step.py deleted file mode 100644 index d92b5717..00000000 --- a/qp_klp/tests/test_metagenomic_step.py +++ /dev/null @@ -1,228 +0,0 @@ -# ----------------------------------------------------------------------------- -# Copyright (c) 2014--, The Qiita Development Team. -# -# Distributed under the terms of the BSD 3-clause License. -# -# The full license is in the file LICENSE, distributed with this software. -# ----------------------------------------------------------------------------- -from qp_klp.tests.test_step import BaseStepTests -from qp_klp.Metagenomic import Metagenomic -from sequence_processing_pipeline.Pipeline import Pipeline -from os import makedirs -from os.path import join, split, exists, basename, dirname -from random import randrange, randint, choices -from glob import glob -from shutil import copyfile -import sys -import re - - -class MetagenomicTests(BaseStepTests): - def setUp(self): - super().setUp() - - def test_metagenomic_creation(self): - # Test base-class creation method, even though base-class will never - # be instantiated by itself in normal usage. - - with self.assertRaisesRegex(ValueError, "A pipeline object is needed" - " to initialize Step"): - Metagenomic(None, self.qiita_id, None) - - with self.assertRaisesRegex(ValueError, "A Qiita job-id is needed to " - "initialize Step"): - Metagenomic(self.pipeline, None, None) - - step = Metagenomic(self.pipeline, self.qiita_id, None) - - self.assertIsNotNone(step) - - makedirs(self.output_file_path, exist_ok=True) - - trans_pipeline = Pipeline('qp_klp/tests/data/configuration.json', - self.good_run_id, - self.good_transcript_sheet_path, - None, - self.output_file_path, - self.qiita_id, - Metagenomic.METATRANSCRIPTOMIC_TYPE) - - step = Metagenomic(trans_pipeline, self.qiita_id, None) - - self.assertIsNotNone(step) - - def test_metagenomic_convert_bcl_to_fastq(self): - self._create_test_input(1) - - step = Metagenomic(self.pipeline, self.qiita_id, None) - step.convert_bcl_to_fastq() - - def _generate_fake_fastq_files(self, output_path, file_count, - max_fastq_size_in_mb): - if not exists(output_path): - raise ValueError("%s doesn't exist" % output_path) - - makedirs(output_path, exist_ok=True) - - # generate a random subset of file_count files to be 'small-ones' that - # fail zero-length threshold. Select no more than 1/3rd of the files - # requested and return the filenames to the user for testing. - small_ones = choices(range(1, file_count), k=randint(1, file_count//3)) - return_these = [] - - for i in range(1, file_count): - forward_read_fp = join(output_path, - "SAMPLE%d_L001_R1_001.fastq.gz" % i) - reverse_read_fp = join(output_path, - "SAMPLE%d_L001_R2_001.fastq.gz" % i) - - if i in small_ones: - # NuQC's minimum threshold for moving files to zero-files - # directory is under 3100 bytes. - file_size = randrange(1024, 3099) - else: - # where 1048576 equals 1MB in bytes - file_size = randrange(1048576, max_fastq_size_in_mb * 1048576) - - if file_size < 3100: - return_these.append(forward_read_fp) - return_these.append(reverse_read_fp) - - with open(forward_read_fp, 'w') as f: - # assume 'A' is one byte in size on disk. - f.write("A" * file_size) - - # for convenience, let reverse read be equal in size to forward - # read. - with open(reverse_read_fp, 'w') as f: - f.write("A" * file_size) - - return return_these - - def test_metagenomic_quality_control(self): - self._create_test_input(2) - - metadata = {'NYU_BMS_Melanoma_13059': {'needs_filtering': False, - 'samples': []}, - 'Feist_11661': {'needs_filtering': False, 'samples': []}, - 'Gerwick_6123': {'needs_filtering': True, 'samples': []}} - - # since Slurm isn't available for tests, and process_all_fastq_files.sh - # can't actually be executed, generate a fake set of raw fastq files - # in a 'ConvertJob' directory. In place of actual trimmed/filtered - # files, copy the faked files into their expected location under - # 'NuQCJob'. - # This allows us to still confirm that the run() method and functions - # like zero-length file filtering still work as intended. We can also - # still confirm that process_all_fastq_files.sh is created and looks - # as expected. - - small_ones = [] - for project_name in metadata: - small_ones += self._generate_fake_fastq_files( - join(self.output_file_path, 'ConvertJob', project_name), 25, - 10) - - step = Metagenomic(self.pipeline, self.qiita_id, None) - - for project_name in metadata: - # after initialization of step object but before run() is called, - # copy the raw files and rename them into QC'ed files. - src = join(self.output_file_path, 'ConvertJob', project_name) - sub_dir = 'filtered_sequences' if metadata[project_name][ - 'needs_filtering'] else 'trimmed_sequences' - dst = join(self.output_file_path, 'NuQCJob', project_name, sub_dir) - - makedirs(dst, exist_ok=True) - - faked_files = glob(src + '/SAMPLE*.fastq.gz') - for fp in faked_files: - _, file_name = split(fp) - file_path = join(dst, file_name.replace('.fastq.gz', - '.trimmed.fastq.gz')) - copyfile(fp, file_path) - - # Since the 'sbatch' and 'sacct' commands don't exist in the testing - # environment, fake them by creating fakes that will output to stdout - # the metadata needed to keep run() working as intended. These faked - # binary files overwrite the versions created by test_step.py and are - # automatically deleted after testing. test_step.py sets chmod for us. - with open(join(dirname(sys.executable), 'sbatch'), 'w') as f: - # code will extract 777 for use as the fake job-id in slurm. - f.write("echo Hello 777") - - with open(join(dirname(sys.executable), 'sacct'), 'w') as f: - # fake sacct will return job-id 777 completed successfully. - # faked output files created in test method() will generate - # faked results. - f.write("echo \"777|cc_fake_job.sh|COMPLETED|00:10:00|0:0\"") - - # execute the quality_control() method, which will in turn call NuQC's - # run() method. - step.quality_control() - - # after step.quality_control() executes, process_all_fastq_files.sh - # should be created. Confirm the output of this file is as expected. - with open(self.process_shell_script, 'r') as f: - exp = f.readlines() - exp = [line.rstrip() for line in exp] - - with open(join(self.output_file_path, 'NuQCJob', - 'process_all_fastq_files.sh')) as f: - obs = f.readlines() - obs = [line.rstrip() for line in obs] - with open('tmpfoobar', 'w') as foo: - for line in obs: - foo.write("%s\n" % line) - - # remove part of the absolute path so that comparison test is - # valid across multiple installations. - patterns = [ - re.compile(r"^\s+\-\-html (.*)/qp-knight-lab-processing/" - r"qp_klp/tests/data/output_dir/NuQCJob/fastp_" - r"reports_dir/html/\${html_name} \\$"), - - re.compile(r"^\s+\-\-json (.*)/qp-knight-lab-processing/" - r"qp_klp/tests/data/output_dir/NuQCJob/fastp_" - r"reports_dir/json/\${json_name} \\$"), - - re.compile(r"^\s+python (.*/bin)/demux \\"), - - re.compile(r" (.*)/sequence_processing_pipeline/scripts" - r"/splitter "), - - re.compile(r"^\s+mv \$\{jobd}/seqs.movi.txt.gz (.*)/qp-knight" - r"-lab-processing") - ] - - for pattern in patterns: - for i in range(0, len(obs)): - m = pattern.match((obs[i])) - if m: - obs[i] = obs[i].replace(m[1], 'REMOVED') - - for obs_line, exp_line in zip(obs, exp): - self.assertEqual(obs_line, exp_line) - - # Lastly, for the random subset of zero-length files 'small_ones', - # generate a list of files that run() failed and moved into the - # zero_files sub-folder and compare them for equality. - zf_files = [] - for project_name in metadata: - zf_path = join(self.output_file_path, 'NuQCJob', project_name, - 'zero_files') - zf_files += glob(join(zf_path, 'SAMPLE*.fastq.gz')) - - # small_ones lists the original raw files when they were created. - # However, zf_files contains files that have been QC'ed. For - # comparison purposes, remove the .trimmed or .filtered substring - # from the names. - small_ones = [basename(fp) for fp in small_ones] - zf_files = [ - basename(fp).replace('.trimmed.', '.').replace('.filtered.', '.') - for fp in zf_files] - - self.assertEqual(set(small_ones), set(zf_files)) - - # if end of this function is reached without an Error raised, then - # run() ran correctly. diff --git a/qp_klp/tests/test_step.py b/qp_klp/tests/test_step.py deleted file mode 100644 index 9e9edc87..00000000 --- a/qp_klp/tests/test_step.py +++ /dev/null @@ -1,1403 +0,0 @@ -# ----------------------------------------------------------------------------- -# Copyright (c) 2014--, The Qiita Development Team. -# -# Distributed under the terms of the BSD 3-clause License. -# -# The full license is in the file LICENSE, distributed with this software. -# ----------------------------------------------------------------------------- -from unittest import TestCase -from qp_klp.Step import Step, FailedSamplesRecord -from sequence_processing_pipeline.Pipeline import Pipeline, PipelineError -from os.path import join, abspath, exists, dirname -from functools import partial -from os import makedirs, chmod, access, W_OK -from shutil import rmtree, copy, which, copytree -from os import environ, remove, getcwd -import pandas as pd -from metapool import parse_prep -import re -from copy import deepcopy -from tempfile import TemporaryDirectory - - -class FakeClient(): - def __init__(self): - self.cwd = getcwd() - self.base_path = join(self.cwd, 'qp_klp/tests/data/QDir') - self.qdirs = {'Demultiplexed': 'Demultiplexed', - 'beta_div_plots': 'analysis/beta_div_plots', - 'rarefaction_curves': 'analysis/rarefaction_curves', - 'taxa_summary': 'analysis/taxa_summary', - 'q2_visualization': 'working_dir', - 'distance_matrix': 'working_dir', - 'ordination_results': 'working_dir', - 'alpha_vector': 'working_dir', - 'FASTQ': 'FASTQ', - 'BIOM': 'BIOM', - 'per_sample_FASTQ': 'per_sample_FASTQ', - 'SFF': 'SFF', - 'FASTA': 'FASTA', - 'FASTA_Sanger': 'FASTA_Sanger', - 'FeatureData': 'FeatureData', - 'job-output-folder': 'job-output-folder', - 'BAM': 'BAM', - 'VCF': 'VCF', - 'SampleData': 'SampleData', - 'uploads': 'uploads'} - - self.samples_in_13059 = ['13059.SP331130A04', '13059.AP481403B02', - '13059.LP127829A02', '13059.BLANK3.3B', - '13059.EP529635B02', '13059.EP542578B04', - '13059.EP446602B01', '13059.EP121011B01', - '13059.EP636802A01', '13059.SP573843A04'] - - # note these samples have known tids, but aren't in good-sample-sheet. - self.samples_in_11661 = ['11661.1.24', '11661.1.57', '11661.1.86', - '11661.10.17', '11661.10.41', '11661.10.64', - '11661.11.18', '11661.11.43', '11661.11.64', - '11661.12.15'] - - self.samples_in_6123 = ['3A', '4A', '5B', '6A', 'BLANK.41.12G', '7A', - '8A', 'ISB', 'GFR', '6123'] - - self.info_in_11661 = {'number-of-samples': 10, - 'categories': ['sample_type', 'tube_id']} - - self.info_in_13059 = {'number-of-samples': 10, - 'categories': ['anonymized_name', - 'collection_timestamp', - 'description', - 'dna_extracted', - 'elevation', 'empo_1', - 'empo_2', 'empo_3', - 'env_biome', 'env_feature', - 'env_material', - 'env_package', - 'geo_loc_name', 'host_age', - 'host_age_units', - 'host_body_habitat', - 'host_body_mass_index', - 'host_body_product', - 'host_body_site', - 'host_common_name', - 'host_height', - 'host_height_units', - 'host_life_stage', - 'host_scientific_name', - 'host_subject_id', - 'host_taxid', 'host_weight', - 'host_weight_units', - 'latitude', 'longitude', - 'nyuid', - 'physical_specimen_location', - 'physical_specimen_remaining', - 'predose_time', - 'sample_type', - 'scientific_name', 'sex', - 'subject_id', 'taxon_id', - 'title', 'tube_id']} - - # Study not in qiita-rc. Faking results. - self.info_in_6123 = {'number-of-samples': 10, - 'categories': ['sample_type', 'subject_id', - 'title']} - - self.tids_13059 = {"header": ["tube_id"], - "samples": {'13059.SP331130A04': ['SP331130A-4'], - '13059.AP481403B02': ['AP481403B-2'], - '13059.LP127829A02': ['LP127829A-2'], - '13059.BLANK3.3B': ['BLANK3.3B'], - '13059.EP529635B02': ['EP529635B-2'], - '13059.EP542578B04': ['EP542578B-4'], - '13059.EP446602B01': ['EP446602B-1'], - '13059.EP121011B01': ['EP121011B-1'], - '13059.EP636802A01': ['EP636802A-1'], - '13059.SP573843A04': ['SP573843A-4']}} - - self.tids_11661 = {"header": ["tube_id"], - "samples": {"11661.1.24": ["1.24"], - "11661.1.57": ["1.57"], - "11661.1.86": ["1.86"], - "11661.10.17": ["10.17"], - "11661.10.41": ["10.41"], - "11661.10.64": ["10.64"], - "11661.11.18": ["11.18"], - "11661.11.43": ["11.43"], - "11661.11.64": ["11.64"], - "11661.12.15": ["12.15"]}} - - for key in self.qdirs: - self.qdirs[key] = join(self.base_path, self.qdirs[key]) - - for qdir in self.qdirs: - makedirs(self.qdirs[qdir], exist_ok=True) - - self.fake_id = 1000 - self._server_url = "some.server.url" - self.saved_posts = {} - - def get(self, url): - m = {'/api/v1/study/11661/samples': self.samples_in_11661, - '/api/v1/study/11661/samples/categories=tube_id': self.tids_11661, - '/api/v1/study/11661/samples/info': self.info_in_11661, - '/api/v1/study/13059/samples': self.samples_in_13059, - '/api/v1/study/13059/samples/categories=tube_id': self.tids_13059, - '/api/v1/study/13059/samples/info': self.info_in_13059, - '/api/v1/study/6123/samples': self.samples_in_6123, - '/api/v1/study/6123/samples/info': self.info_in_6123, - '/qiita_db/artifacts/types/': self.qdirs} - - if url in m: - return m[url] - - return None - - def post(self, url, data=None): - if '/qiita_db/prep_template/' == url: - self.fake_id += 1 - return {'prep': self.fake_id} - elif '/qiita_db/artifact/' == url: - self.saved_posts[str(self.fake_id)] = data - self.fake_id += 1 - return {'job_id': self.fake_id} - else: - raise ValueError("Unsupported URL") - - -class AnotherFakeClient(): - def __init__(self): - self.cwd = getcwd() - self.base_path = join(self.cwd, 'qp_klp/tests/data/QDir') - self.qdirs = {'Demultiplexed': 'Demultiplexed', - 'beta_div_plots': 'analysis/beta_div_plots', - 'rarefaction_curves': 'analysis/rarefaction_curves', - 'taxa_summary': 'analysis/taxa_summary', - 'q2_visualization': 'working_dir', - 'distance_matrix': 'working_dir', - 'ordination_results': 'working_dir', - 'alpha_vector': 'working_dir', - 'FASTQ': 'FASTQ', - 'BIOM': 'BIOM', - 'per_sample_FASTQ': 'per_sample_FASTQ', - 'SFF': 'SFF', - 'FASTA': 'FASTA', - 'FASTA_Sanger': 'FASTA_Sanger', - 'FeatureData': 'FeatureData', - 'job-output-folder': 'job-output-folder', - 'BAM': 'BAM', - 'VCF': 'VCF', - 'SampleData': 'SampleData', - 'uploads': 'uploads'} - - self.samples_in_99999 = ['99999.AAAAAAAAAAA', - '99999.BBBBBBBBBBB', - '99999.CCCCCCCCCCC', - '99999.BLANK1.1BCD'] - - self.info_in_99999 = {'number-of-samples': 10, - 'categories': ['column1', 'column2', 'tube_id']} - - self.tids_99999 = {"header": ["tube_id"], - "samples": {'99999.AAAAAAAAAAA': ['1234567890a'], - '99999.BBBBBBBBBBB': ['234567890ab'], - '99999.CCCCCCCCCCC': ['34567890abc'], - '99999.BLANK1.1BCD': ['BLANK1.1BCD']}} - - for key in self.qdirs: - self.qdirs[key] = join(self.base_path, self.qdirs[key]) - - for qdir in self.qdirs: - makedirs(self.qdirs[qdir], exist_ok=True) - - def get(self, url): - m = {'/api/v1/study/99999/samples': self.samples_in_99999, - '/api/v1/study/99999/samples/categories=tube_id': self.tids_99999, - '/api/v1/study/99999/samples/info': self.info_in_99999, - '/qiita_db/artifacts/types/': self.qdirs} - - if url in m: - return m[url] - - return None - - -class BaseStepTests(TestCase): - ''' - BaseStepTests contains all the configuration information and helper - functions used by every child StepTests class. This class does not - include any tests. All tests defined in this class will be inherited by - every child and will consequently be run multiple times. Hence, general - functionality is instead tested by BasicStepSteps class. - ''' - - def setUp(self): - package_root = abspath('./qp_klp') - cc_path = partial(join, package_root, 'tests', 'data') - self.good_config_file = join(package_root, 'configuration.json') - self.good_run_id = '211021_A00000_0000_SAMPLE' - self.good_sample_sheet_path = cc_path('good-sample-sheet.csv') - self.another_good_sample_sheet_path = cc_path('another-good-sample-' - 'sheet.csv') - self.sheet_w_replicates_path = cc_path('good_sheet_w_replicates.csv') - self.good_mapping_file_path = cc_path('good-mapping-file.txt') - self.good_prep_info_file_path = cc_path('good-sample-prep.tsv') - self.good_transcript_sheet_path = cc_path('good-sample-sheet-' - 'transcriptomics.csv') - self.output_file_path = cc_path('output_dir') - self.process_shell_script = cc_path('process_all_fastq_files.sh') - self.master_config_path = cc_path('configuration.json') - self.dummy_fastq_file = cc_path('dummy.fastq.gz') - self.mini_sheet_path = cc_path('mini-sample-sheet.csv') - self.qiita_id = '077c4da8-74eb-4184-8860-0207f53623be' - makedirs(self.output_file_path, exist_ok=True) - - self.pipeline = Pipeline(self.master_config_path, - self.good_run_id, - self.good_sample_sheet_path, None, - self.output_file_path, self.qiita_id, - Step.METAGENOMIC_TYPE) - - self.pipeline_mini = Pipeline(self.master_config_path, - self.good_run_id, - self.mini_sheet_path, None, - self.output_file_path, self.qiita_id, - Step.METAGENOMIC_TYPE) - - self.another_pipeline = Pipeline(self.master_config_path, - self.good_run_id, - self.another_good_sample_sheet_path, - None, self.output_file_path, - self.qiita_id, Step.METAGENOMIC_TYPE) - - self.pipeline_replicates = Pipeline(self.master_config_path, - self.good_run_id, - self.sheet_w_replicates_path, None, - self.output_file_path, - self.qiita_id, - Step.METAGENOMIC_TYPE) - - self.amplicon_pipeline = Pipeline(self.master_config_path, - self.good_run_id, None, - self.good_mapping_file_path, - self.output_file_path, - self.qiita_id, - Step.AMPLICON_TYPE) - - self.fake_bin_path = self._get_searchable_path() - - self.delete_these = [] - - def tearDown(self): - if exists(self.output_file_path): - rmtree(self.output_file_path) - for fake_bin in self.delete_these: - if exists(fake_bin): - remove(fake_bin) - if exists('tmp.config'): - remove('tmp.config') - - def _get_searchable_path(self): - searchable_paths = [] - - if 'CONDA_PREFIX' in environ: - # create fake binaries in bin directory of Conda environment - searchable_paths.append(environ['CONDA_PREFIX'] + '/bin') - else: - # if CONDA_PREFIX doesn't exist, select a path from a list of - # searchable paths that contains 'env' and assume it's writable. - tmp = environ['PATH'] - searchable_paths += tmp.split(':') - - for a_path in searchable_paths: - if access(a_path, W_OK): - return a_path - - def _create_fake_bin(self, name, content): - tmp = join(self.fake_bin_path, name) - with open(tmp, 'w') as f: - f.write(f"#!/bin/sh\n{content}\n") - chmod(tmp, 0o777) - self.delete_these.append(tmp) - return tmp - - def _create_fake_file(self, path): - with open(path, 'w') as f: - f.write("This is a file.") - - def _create_test_input(self, stage): - if stage >= 1: - # create an empty ConvertJob directory to test initialization - # with. Create fake binaries to test job submission. - fake_path = join(self.output_file_path, 'ConvertJob', 'logs') - makedirs(fake_path, exist_ok=True) - fake_path = join(self.output_file_path, 'ConvertJob', 'Reports') - makedirs(fake_path, exist_ok=True) - - self._create_fake_bin('sbatch', "echo 'Submitted " - "batch job 9999999'") - - self._create_fake_bin('sacct', "echo '9999999|99999999-9999-9999" - "-9999-999999999999.txt|COMPLETED" - "|09:53:41|0:0'") - - if stage >= 2: - # generate dummy fastq files in ConvertJob and create an empty - # NuQCJob directory to use for testing NuQCJob initialization. - fake_path = join(self.output_file_path, 'NuQCJob', 'logs') - makedirs(fake_path, exist_ok=True) - - exp = {'Feist_11661': ['CDPH-SAL_Salmonella_Typhi_MDL-143', - 'CDPH-SAL_Salmonella_Typhi_MDL-144', - 'CDPH-SAL_Salmonella_Typhi_MDL-145', - 'CDPH-SAL_Salmonella_Typhi_MDL-146', - 'CDPH-SAL_Salmonella_Typhi_MDL-147'], - 'Gerwick_6123': ['3A', '4A', '5B', '6A', '7A'], - 'NYU_BMS_Melanoma_13059': ['AP581451B02', 'EP256645B01', - 'EP112567B02', 'EP337425B01', - 'LP127890A01']} - for project in exp: - fake_path = join(self.output_file_path, 'ConvertJob', project) - makedirs(fake_path, exist_ok=True) - - for sample in exp[project]: - r1 = join(fake_path, f'{sample}_SXXX_L001_R1_001.fastq.gz') - r2 = join(fake_path, f'{sample}_SXXX_L001_R2_001.fastq.gz') - - for file_path in [r1, r2]: - self._create_fake_file(file_path) - - if stage >= 3: - # create a fake GenPrepFileJob directory. - fake_path = join(self.output_file_path, 'GenPrepFileJob', - 'PrepFiles') - makedirs(fake_path, exist_ok=True) - names = ['NYU_BMS_Melanoma_13059.1.tsv', 'Feist_11661.1.tsv', - 'Gerwick_6123.1.tsv'] - - for name in names: - self._create_fake_file(join(fake_path, name)) - - fake_paths = [join(self.output_file_path, 'NuQCJob', - 'NYU_BMS_Melanoma_13059', 'fastp_reports_dir'), - join(self.output_file_path, 'NuQCJob', - 'Feist_11661', 'fastp_reports_dir'), - join(self.output_file_path, 'NuQCJob', - 'Gerwick_6123', 'fastp_reports_dir') - ] - - for fake_path in fake_paths: - makedirs(fake_path, exist_ok=True) - self._create_fake_file(join(fake_path, 'a_file')) - - names = ['NYU_BMS_Melanoma_13059', 'Feist_11661', - 'Gerwick_6123'] - - for project in names: - file_name = f'{self.good_run_id}_{project}_blanks.tsv' - fake_path = join(self.output_file_path, file_name) - self._create_fake_file(fake_path) - - tarballs = ['logs-ConvertJob.tgz', 'logs-FastQCJob.tgz', - 'logs-GenPrepFileJob.tgz', 'logs-QCJob.tgz', - 'prep-files.tgz', 'reports-ConvertJob.tgz', - 'reports-FastQCJob.tgz', 'reports-QCJob.tgz', - 'sample-files.tgz'] - - for file_name in tarballs: - fake_path = join(self.output_file_path, file_name) - self._create_fake_file(fake_path) - - suffixes = ['o1611416-26', 'e1611416-26'] - for file_name in suffixes: - file_name = f'{self.good_run_id}_FastQCJob.{file_name}' - fake_path = join(self.output_file_path, 'FastQCJob', 'logs') - makedirs(fake_path, exist_ok=True) - self._create_fake_file(join(fake_path, file_name)) - - # we're just going to create a directory for FastQC results and - # create a single file. We aren't going to replicate the entire - # directory structure for now. - fake_path = join(self.output_file_path, 'FastQCJob', 'fastqc') - makedirs(fake_path, exist_ok=True) - self._create_fake_file(join(fake_path, 'a_file.txt')) - - fake_path = join(self.output_file_path, 'GenPrepFileJob', 'logs') - makedirs(fake_path, exist_ok=True) - self._create_fake_file(join(fake_path, 'a_file.txt')) - - fake_path = join(self.output_file_path, 'failed_samples.html') - self._create_fake_file(fake_path) - - def _create_alternate_test_input(self): - exp = {'Feist_11661': ['CDPH-SAL_Salmonella_Typhi_MDL-143', - 'CDPH-SAL_Salmonella_Typhi_MDL-144', - 'CDPH-SAL_Salmonella_Typhi_MDL-145', - 'CDPH-SAL_Salmonella_Typhi_MDL-146', - 'CDPH-SAL_Salmonella_Typhi_MDL-147'], - 'Gerwick_6123': ['3A', '4A', '5B', '6A', '7A'], - 'NYU_BMS_Melanoma_13059': ['AP581451B02', 'EP256645B01', - 'EP112567B02', 'EP337425B01', - 'LP127890A01']} - - for project in exp: - trimmed_files_path = join(self.output_file_path, 'NuQCJob', - project, 'filtered_sequences') - empty_files_path = join(self.output_file_path, 'NuQCJob', - project, 'zero_files') - adapter_trimmed_files_path = join(self.output_file_path, - 'NuQCJob', - 'only-adapter-filtered', - project) - - fake_paths = [trimmed_files_path, empty_files_path, - adapter_trimmed_files_path] - - for fake_path in fake_paths: - makedirs(fake_path, exist_ok=True) - - empty_files = { - 'Feist_11661': [ - 'CDPH-SAL_Salmonella_Typhi_MDL-150', - 'CDPH-SAL_Salmonella_Typhi_MDL-151' - ], - 'Gerwick_6123': ['8A', '9A', '10A'], - 'NYU_BMS_Melanoma_13059': ['XX581451B02', 'XY256645B01', - 'XZ112567B02' - ]} - - f_list = [] - for sample in exp[project]: - f_list += [ - join(trimmed_files_path, - f'{sample}_SXXX_L001_R1_001.trimmed.fastq.gz'), - join(trimmed_files_path, - f'{sample}_SXXX_L001_R2_001.trimmed.fastq.gz'), - join(trimmed_files_path, - f'{sample}_SXXX_L001_I1_001.trimmed.fastq.gz'), - join(trimmed_files_path, - f'{sample}_SXXX_L001_I2_001.trimmed.fastq.gz'), - join(adapter_trimmed_files_path, - f'{sample}_SXXX_L001_R1_001.fastq.gz'), - join(adapter_trimmed_files_path, - f'{sample}_SXXX_L001_R2_001.fastq.gz') - ] - - for sample in empty_files[project]: - f_list += [ - join(trimmed_files_path, - f'{sample}_SXXX_L001_R1_001.trimmed.fastq.gz'), - join(trimmed_files_path, - f'{sample}_SXXX_L001_R2_001.trimmed.fastq.gz') - ] - - for file_path in f_list: - self._create_fake_file(file_path) - - -class BasicStepTests(BaseStepTests): - def test_creation(self): - # Test base-class creation method, even though base-class will never - # be instantiated by itself in normal usage. - - with self.assertRaisesRegex(ValueError, "A pipeline object is needed" - " to initialize Step"): - Step(None, self.qiita_id, None) - - with self.assertRaisesRegex(ValueError, "A Qiita job-id is needed to " - "initialize Step"): - Step(self.pipeline, None, None) - - step = Step(self.pipeline, self.qiita_id, None) - - self.assertIsNotNone(step) - - def test_convert_bcl_to_fastq(self): - self._create_test_input(1) - - step = Step(self.pipeline, self.qiita_id, None) - - fake_path = join(self.output_file_path, 'ConvertJob', 'logs') - makedirs(fake_path, exist_ok=True) - - config = self.pipeline.config_profile['profile']['configuration'] - step._convert_bcl_to_fastq(config['bcl-convert'], - self.good_sample_sheet_path) - - def test_quality_control(self): - self._create_test_input(2) - - fake_path = join(self.output_file_path, 'NuQCJob', 'logs') - makedirs(fake_path, exist_ok=True) - - exp = {'Feist_11661': (['CDPH-SAL_Salmonella_Typhi_MDL-143', - 'CDPH-SAL_Salmonella_Typhi_MDL-144', - 'CDPH-SAL_Salmonella_Typhi_MDL-145', - 'CDPH-SAL_Salmonella_Typhi_MDL-146', - 'CDPH-SAL_Salmonella_Typhi_MDL-147'], False), - 'Gerwick_6123': (['3A', '4A', '5B', '6A', '7A'], True), - 'NYU_BMS_Melanoma_13059': (['AP581451B02', 'EP256645B01', - 'EP112567B02', 'EP337425B01', - 'LP127890A01'], False)} - for project in exp: - fake_path = join(self.output_file_path, 'ConvertJob', project) - fake_path2 = join(self.output_file_path, 'NuQCJob', project) - makedirs(fake_path, exist_ok=True) - if exp[project][1]: - makedirs(join(fake_path2, 'filtered_sequences'), exist_ok=True) - else: - makedirs(join(fake_path2, 'trimmed_sequences'), exist_ok=True) - - for sample in exp[project][0]: - r1 = join(fake_path, f'{sample}_SXXX_L001_R1_001.fastq.gz') - r2 = join(fake_path, f'{sample}_SXXX_L001_R2_001.fastq.gz') - - for file_path in [r1, r2]: - self._create_fake_file(file_path) - - step = Step(self.pipeline, self.qiita_id, None) - config = self.pipeline.config_profile['profile']['configuration'] - step._quality_control(config['nu-qc'], - self.good_sample_sheet_path) - - def test_generate_pipeline(self): - pipeline = Step.generate_pipeline(Step.METAGENOMIC_TYPE, - self.good_sample_sheet_path, - 1, - self.master_config_path, - self.good_run_id, - self.output_file_path, - self.qiita_id) - - self.assertIsNotNone(pipeline) - - pipeline = Step.generate_pipeline(Step.AMPLICON_TYPE, - self.good_mapping_file_path, - 1, - self.master_config_path, - self.good_run_id, - self.output_file_path, - self.qiita_id) - - self.assertIsNotNone(pipeline) - - pipeline = Step.generate_pipeline(Step.METATRANSCRIPTOMIC_TYPE, - self.good_transcript_sheet_path, - 1, - self.master_config_path, - self.good_run_id, - self.output_file_path, - self.qiita_id) - - self.assertIsNotNone(pipeline) - - def test_get_project_info(self): - obs = self.pipeline.get_project_info() - - exp = [{'project_name': 'NYU_BMS_Melanoma_13059', 'qiita_id': '13059', - 'contains_replicates': False}, - {'project_name': 'Feist_11661', 'qiita_id': '11661', - 'contains_replicates': False}, - {'project_name': 'Gerwick_6123', 'qiita_id': '6123', - 'contains_replicates': False}] - - self.assertEqual(obs, exp) - - def test_parse_prep_file(self): - good_prep_file = join('qp_klp', 'tests', 'good-prep-file-small.txt') - - obs = Step.parse_prep_file(good_prep_file) - - # assert that prep-files that begin with sample-names of the form - # '363192526', '1e-3', and '123.000' are parsed as strings instead of - # numeric values. - exp = {'363192526': {'experiment_design_description': 'sample project', - 'library_construction_protocol': ('Knight Lab Kap' - 'a HyperPlus'), - 'platform': 'Illumina', 'run_center': 'KLM', - 'run_date': '2022-04-18', - 'run_prefix': '363192526_S9_L001', - 'sequencing_meth': 'sequencing by synthesis', - 'center_name': 'UCSD', - 'center_project_name': 'Sample_Project', - 'instrument_model': 'Illumina iSeq', - 'runid': '20220101_FS10001776_07_ABC12345-4567', - 'lane': '1', 'sample project': 'Sample_Project', - 'well_description': ('Sample_Project_99999_1-' - '4.363192526.A3'), - 'i5_index_id': 'iTru5_09_A', - 'sample_plate': 'Sample_Project_99999_1-4', - 'index2': 'TCTGAGAG', 'index': 'CATCTACG', - 'sample_well': 'A3', - 'i7_index_id': 'iTru7_114_05', - 'raw_reads_r1r2': '10749', - 'quality_filtered_reads_r1r2': '1', - 'non_host_reads': '4'}, - '363192073': {'experiment_design_description': 'sample project', - 'library_construction_protocol': ('Knight Lab Ka' - 'pa HyperPlus'), - 'platform': 'Illumina', 'run_center': 'KLM', - 'run_date': '2022-04-18', - 'run_prefix': '363192073_S195_L001', - 'sequencing_meth': 'sequencing by synthesis', - 'center_name': 'UCSD', - 'center_project_name': 'Sample_Project', - 'instrument_model': 'Illumina iSeq', - 'runid': '20220101_FS10001776_07_ABC12345-4567', - 'lane': '1', 'sample project': 'Sample_Project', - 'well_description': ('Sample_Project_99999_1-' - '4.363192073.F1'), - 'i5_index_id': 'iTru5_103_A', - 'sample_plate': 'Sample_Project_99999_1-4', - 'index2': 'TGGTCCTT', 'index': 'GCAATTCG', - 'sample_well': 'F1', - 'i7_index_id': 'iTru7_305_11', - 'raw_reads_r1r2': '16435', - 'quality_filtered_reads_r1r2': '2', - 'non_host_reads': '5'}, - '363193755': {'experiment_design_description': 'sample project', - 'library_construction_protocol': ('Knight Lab Ka' - 'pa HyperPlus'), - 'platform': 'Illumina', 'run_center': 'KLM', - 'run_date': '2022-04-18', - 'run_prefix': '363193755_S7_L001', - 'sequencing_meth': 'sequencing by synthesis', - 'center_name': 'UCSD', - 'center_project_name': 'Sample_Project', - 'instrument_model': 'Illumina iSeq', - 'runid': '20220101_FS10001776_07_ABC12345-4567', - 'lane': '1', 'sample project': 'Sample_Project', - 'well_description': ('Sample_Project_99999_1-' - '4.363193755.M1'), - 'i5_index_id': 'iTru5_07_A', - 'sample_plate': 'Sample_Project_99999_1-4', - 'index2': 'GGTGTCTT', 'index': 'GATTGCTC', - 'sample_well': 'M1', - 'i7_index_id': 'iTru7_114_03', - 'raw_reads_r1r2': '14303', - 'quality_filtered_reads_r1r2': '3', - 'non_host_reads': '6'}, - '1e-3': {'experiment_design_description': 'sample project', - 'library_construction_protocol': ('Knight Lab Kapa ' - 'HyperPlus'), - 'platform': 'Illumina', 'run_center': 'KLM', - 'run_date': '2022-04-18', - 'run_prefix': '363192073_S195_L001', - 'sequencing_meth': 'sequencing by synthesis', - 'center_name': 'UCSD', - 'center_project_name': 'Sample_Project', - 'instrument_model': 'Illumina iSeq', - 'runid': '20220101_FS10001776_07_ABC12345-4567', - 'lane': '1', 'sample project': 'Sample_Project', - 'well_description': ('Sample_Project_99999_1-' - '4.363192073.F1'), - 'i5_index_id': 'iTru5_103_A', - 'sample_plate': 'Sample_Project_99999_1-4', - 'index2': 'TGGTCCTT', 'index': 'GCAATTCG', - 'sample_well': 'F1', 'i7_index_id': 'iTru7_305_11', - 'raw_reads_r1r2': '16435', - 'quality_filtered_reads_r1r2': '11', - 'non_host_reads': '13'}, - '123.000': {'experiment_design_description': 'sample project', - 'library_construction_protocol': ('Knight Lab Kapa' - ' HyperPlus'), - 'platform': 'Illumina', 'run_center': 'KLM', - 'run_date': '2022-04-18', - 'run_prefix': '363193755_S7_L001', - 'sequencing_meth': 'sequencing by synthesis', - 'center_name': 'UCSD', - 'center_project_name': 'Sample_Project', - 'instrument_model': 'Illumina iSeq', - 'runid': '20220101_FS10001776_07_ABC12345-4567', - 'lane': '1', 'sample project': 'Sample_Project', - 'well_description': ('Sample_Project_99999_1-' - '4.363193755.M1'), - 'i5_index_id': 'iTru5_07_A', - 'sample_plate': 'Sample_Project_99999_1-4', - 'index2': 'GGTGTCTT', 'index': 'GATTGCTC', - 'sample_well': 'M1', 'i7_index_id': 'iTru7_114_03', - 'raw_reads_r1r2': '14303', - 'quality_filtered_reads_r1r2': '12', - 'non_host_reads': '14'}} - - self.assertDictEqual(obs, exp) - - # simply confirm that a DataFrame is returned when convert_to_dict is - # False. We already know that the contents of obs will be correct. - obs = Step.parse_prep_file(good_prep_file, convert_to_dict=False) - self.assertIsInstance(obs, pd.DataFrame) - - def test_generate_special_map(self): - fake_client = FakeClient() - step = Step(self.pipeline, self.qiita_id, None) - step.generate_special_map(fake_client) - obs = step.special_map - - exp = [('NYU_BMS_Melanoma_13059', - join(fake_client.base_path, 'uploads/13059'), '13059'), - ('Feist_11661', - join(fake_client.base_path, 'uploads/11661'), '11661'), - ('Gerwick_6123', - join(fake_client.base_path, 'uploads/6123'), '6123')] - - self.assertEquals(obs, exp) - - def test_get_samples_in_qiita(self): - fake_client = FakeClient() - step = Step(self.pipeline, self.qiita_id, None) - obs_samples, obs_tids = step.get_samples_in_qiita(fake_client, '13059') - - exp_samples = {'EP121011B01', 'EP529635B02', 'EP542578B04', - 'SP573843A04', 'SP331130A04', 'EP446602B01', - 'BLANK3.3B', 'AP481403B02', 'LP127829A02', - 'EP636802A01'} - - exp_tids = {'13059.SP331130A04': ['SP331130A-4'], - '13059.AP481403B02': ['AP481403B-2'], - '13059.LP127829A02': ['LP127829A-2'], - '13059.BLANK3.3B': ['BLANK3.3B'], - '13059.EP529635B02': ['EP529635B-2'], - '13059.EP542578B04': ['EP542578B-4'], - '13059.EP446602B01': ['EP446602B-1'], - '13059.EP121011B01': ['EP121011B-1'], - '13059.EP636802A01': ['EP636802A-1'], - '13059.SP573843A04': ['SP573843A-4']} - - self.assertEqual(obs_samples, exp_samples) - self.assertDictEqual(obs_tids, exp_tids) - - def test_get_tube_ids_from_qiita(self): - fake_client = FakeClient() - step = Step(self.pipeline, self.qiita_id, None) - step._get_tube_ids_from_qiita(fake_client) - obs = step.tube_id_map - - exp = {'13059': {'SP331130A04': 'SP331130A-4', - 'AP481403B02': 'AP481403B-2', - 'LP127829A02': 'LP127829A-2', - 'BLANK3.3B': 'BLANK3.3B', - 'EP529635B02': 'EP529635B-2', - 'EP542578B04': 'EP542578B-4', - 'EP446602B01': 'EP446602B-1', - 'EP121011B01': 'EP121011B-1', - 'EP636802A01': 'EP636802A-1', - 'SP573843A04': 'SP573843A-4'}, - '11661': {'1.24': '1.24', '1.57': '1.57', '1.86': '1.86', - '10.17': '10.17', '10.41': '10.41', '10.64': '10.64', - '11.18': '11.18', '11.43': '11.43', '11.64': '11.64', - '12.15': '12.15'}} - - self.assertDictEqual(obs, exp) - - def test_compare_samples_against_qiita(self): - fake_client = FakeClient() - step = Step(self.pipeline_mini, self.qiita_id, None) - results = step._compare_samples_against_qiita(fake_client) - - # confirm projects in results match what's expected - obs = [project['project_name'] for project in results] - exp = ["NYU_BMS_Melanoma", "Gerwick"] - - self.assertEqual(obs, exp) - - # confirm projects using tube-ids match what's expected - - # results are a list of project dicts, rather than a dict of dicts. - # however they are faked and can be expected to be returned in a - # fixed order. Assert the order is as expected so the following tests - # will be meaningful. - - # good_sample_sheet.csv will have some but not all sample-names - # exchanged for tube-ids. - self.assertCountEqual([proj['project_name'] for proj in results], - ['NYU_BMS_Melanoma', 'Gerwick']) - - # since Gerwick doesn't have tube-ids, it should always use sample- - # names. NYU has tube-id in FakeQiita() so it's possible to test - # tube-ids. - self.assertCountEqual([proj['used_tids'] for proj in results], - [True, False]) - - # 'NOTINQIITA1' is a sample-name from the sample-sheet and should not - # be in fake-Qiita, as defined in FakeQiita() class. Therefore, it - # should appear in the 'samples_not_in_qiita' list. - self.assertIn('NOTINQIITA1', results[0]['samples_not_in_qiita']) - - # 'BLANK3.3B' is defined in the sample-sheet and also in FakeQiita, - # both as a sample-name and as a tube-id (One of the few to be so - # named). It shouldn't appear in 'samples_not_in_qiita' list. - self.assertNotIn('BLANK3.3B', results[0]['samples_not_in_qiita']) - - # 'SP331130A-4' is a tube-id in qiita and should be present in the - # 'examples_in_qiita' list - # the tube-ids in 'examples_in_qiita' list should be a subset of all - # the tube-ids in FakeQiita(). - exp = {'SP331130A-4', 'AP481403B-2', 'LP127829A-2', 'BLANK3.3B', - 'EP529635B-2', 'EP542578B-4', 'EP446602B-1', 'EP121011B-1', - 'EP636802A-1', 'SP573843A-4'} - - self.assertTrue(set(results[0]['examples_in_qiita']).issubset(exp)) - - # Gerwick has a small number of samples in the sample-sheet, and all - # of which are in FakeQiita(). - self.assertEqual(results[1]['samples_not_in_qiita'], set()) - - def test_generate_commands(self): - self._create_test_input(3) - - fake_client = FakeClient() - - # self.pipeline represents a metagenomic pathway. - step = Step(self.pipeline, self.qiita_id, None) - - # need to generate some metadata in order to generate commands. - step.generate_special_map(fake_client) - - # test base _generate_commands() method; contains only commands used - # across all pipeline types. - step.generate_commands() - - exp = [ - (f'cd {self.output_file_path}; ' - 'tar zcvf logs-ConvertJob.tgz ConvertJob/logs'), - (f'cd {self.output_file_path}; ' - 'tar zcvf reports-ConvertJob.tgz ConvertJob/Reports ' - 'ConvertJob/logs'), - (f'cd {self.output_file_path}; ' - 'tar zcvf logs-NuQCJob.tgz NuQCJob/logs'), - (f'cd {self.output_file_path}; ' - 'tar zcvf logs-FastQCJob.tgz FastQCJob/logs'), - (f'cd {self.output_file_path}; ' - 'tar zcvf reports-FastQCJob.tgz FastQCJob/fastqc'), - (f'cd {self.output_file_path}; ' - 'tar zcvf logs-GenPrepFileJob.tgz GenPrepFileJob/logs'), - (f'cd {self.output_file_path}; ' - 'tar zcvf prep-files.tgz GenPrepFileJob/PrepFiles'), - (f'cd {self.output_file_path}; ' - 'mv failed_samples.html final_results'), - (f'cd {self.output_file_path}; ' - 'tar zcvf reports-NuQCJob.tgz NuQCJob/Feist_11661/' - 'fastp_reports_dir ' - 'NuQCJob/Gerwick_6123/fastp_reports_dir ' - 'NuQCJob/NYU_BMS_Melanoma_13059/fastp_reports_dir'), - (f'cd {self.output_file_path}; ' - 'tar zcvf sample-files.tgz 211021_A00000_0000_SAMPLE_Feist_11661' - '_blanks.tsv 211021_A00000_0000_SAMPLE_Gerwick_6123_blanks.tsv ' - '211021_A00000_0000_SAMPLE_NYU_BMS_Melanoma_13059_blanks.tsv'), - (f'cd {self.output_file_path}; (find *.tgz -maxdepth 1 -type f ' - '| xargs mv -t final_results) || true')] - - # replace unique string w/the base-directory path in the expected - # output. - for i in range(0, len(exp)): - exp[i] = exp[i].replace('BASE_DIRECTORY', getcwd()) - - self.assertEqual(step.cmds, exp) - - def test_overwrite_prep_files(self): - # use a prep-file specifically for modification by the - # _overwrite_prep_files() method. - fake_client = FakeClient() - step = Step(self.pipeline, self.qiita_id, None) - - # copy the file so that we do not overwrite the original, which is - # useful for other tests. - - sample_path = join(dirname(self.good_prep_info_file_path), - ('20230101_XX99999999_99_LOL99999-9999.' - 'NYU_BMS_Melanoma_13059.1.tsv')) - - copy(self.good_prep_info_file_path, sample_path) - - # needed to prep for _overwrite_prep_files() - step._get_tube_ids_from_qiita(fake_client) - step._overwrite_prep_files([sample_path]) - - # read in the changed prep-file and confirm that the sample_name - # column contains sample-names instead of tube-ids and that the - # tube-ids have been moved to a new column named 'old_sample_name'. - df = pd.read_csv(sample_path, sep='\t', dtype=str, index_col=False) - - new_sample_names = set(df['sample_name']) - - # use the list of sample-names for the project stored in FakeClient() - # as the expected set of metadata. - exp = set([sample_name.replace('13059.', '') for sample_name in - fake_client.samples_in_13059]) - self.assertEqual(new_sample_names, exp) - - # confirm tids are where they're expected to be as well - new_old_sample_names = set(df['old_sample_name']) - tids = fake_client.tids_13059['samples'] - exp = set([tids[t][0] for t in tids]) - self.assertEqual(new_old_sample_names, exp) - - def test_compare_samples_against_qiita_error_handling(self): - fake_client = AnotherFakeClient() - - # In addition to the samples in AnotherFakeClient(), - # another-good-sample-sheet.csv has an unregistered BLANK: - # 'BLANK_UNREG'. _compare_samples_against_qiita() should detect - # that it is a 'new BLANK', and not include it in the value for - # 'samples_not_in_qiita.' - - # another-good-sample-sheet.csv contains one sample with a sample-name - # corresponding to a registered tube-id, but with a leading zero: - # '034567890abc'. We want to show that _compare_samples_against_qiita() - # is able to resolve '034567890abc' to '34567890abc' and doesn't - # return it in 'samples_not_in_qiita'. - - # another-good-sample-sheet.csv contains one sample that is truly - # unregistered with AnotherFakeQiita(): '4567890abcd'. We want to - # demonstrate that after checking for leading zeroes that the function - # decides this is still an unregistered sample and returns it in - # 'samples_not_in_qiita'. - - # self.pipeline represents a metagenomic pathway. - step = Step(self.another_pipeline, self.qiita_id, None) - - obs = step._compare_samples_against_qiita(fake_client) - - exp = [{'samples_not_in_qiita': {'4567890abcd'}, - 'examples_in_qiita': ['1234567890a', '234567890ab', - '34567890abc', 'BLANK1.1BCD'], - 'project_name': 'TestProject', 'total_in_qiita': 4, - 'used_tids': True, - 'messages': [ - "The total number of samples found in TestProject that" - " aren't BLANK is: 4", - "Number of values in sheet that aren't sample-names in" - " Qiita: 4", - "Number of values in sheet that aren't tube-ids in " - "Qiita: 1", - "More values in sheet matched tube-ids than sample-names" - " with TestProject"]}] - - self.assertEqual(obs, exp) - - def test_precheck(self): - fake_client = AnotherFakeClient() - - # test that Step.precheck() raises a PipelineError with the correct - # message, given the configuration of Step() and AnotherFakeClient(). - - step = Step(self.another_pipeline, self.qiita_id, None) - - msg = ("The total number of samples found in TestProject that aren't" - " BLANK is: 4\nNumber of values in sheet that aren't sample-" - "names in Qiita: 4\nNumber of values in sheet that aren't tube" - "-ids in Qiita: 1\nMore values in sheet matched tube-ids than" - " sample-names with TestProject") - - with self.assertRaisesRegex(PipelineError, msg): - step.precheck(fake_client) - - def test_project_metadata_check(self): - fake_client = FakeClient() - - # self.pipeline represents a metagenomic pathway. - step = Step(self.pipeline, self.qiita_id, None) - - # _project_metadata_check() should return w/out raising an Error if - # step and fake_client is used. - step._project_metadata_check(fake_client) - - fake_client.info_in_11661['categories'].append('well_id_384') - fake_client.info_in_13059['categories'].append('well_id_384') - - msg = ("'well_id_384' exists in Qiita study 13059's sample metadata" - "\n'well_id_384' exists in Qiita study 11661's sample metadata") - with self.assertRaisesRegex(PipelineError, msg): - step._project_metadata_check(fake_client) - - def test_conditional_fastqc_finder(self): - self._create_alternate_test_input() - - # For a metagenomic pipeline, we expect indexed files to be removed - # from the results. We also expect only trimmed files from Feist_11661 - # retrieved, and none from other projects, adapter-trimmed-only files, - # or zero-length files. - step = Step(self.pipeline_replicates, self.qiita_id, None) - results = step._get_postqc_fastq_files(self.output_file_path, - 'Feist_11661') - - exp = { - "raw_forward_seqs": [ - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-143_SXXX_L001_R1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-144_SXXX_L001_R1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-145_SXXX_L001_R1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-146_SXXX_L001_R1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-147_SXXX_L001_R1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-150_SXXX_L001_R1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-151_SXXX_L001_R1_001.trimmed.fastq.gz" - ], - "raw_reverse_seqs": [ - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-143_SXXX_L001_R2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-144_SXXX_L001_R2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-145_SXXX_L001_R2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-146_SXXX_L001_R2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-147_SXXX_L001_R2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-150_SXXX_L001_R2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-151_SXXX_L001_R2_001.trimmed.fastq.gz" - ] - } - - # metagenomic runs shouldn't return a set of data like exp above. - # It shouldn't include I1 and I2 files. - self.assertEqual(set(results.keys()), {'raw_forward_seqs', - 'raw_reverse_seqs'}) - for key in results.keys(): - # remove base output_file_path from the results. - obs = [x.replace(self.output_file_path, '') - for x in results[key]] - self.assertEqual(set(obs), set(exp[key])) - - # Hack an amplicon pipeline. reuse project-names, sample-names and - # qiita-ids. Expected results should be just as they are for - # metagenomic pipelines, except the index files are included. - step = Step(self.amplicon_pipeline, self.qiita_id, None) - - exp['raw_barcodes'] = [ - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-143_SXXX_L001_I1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-143_SXXX_L001_I2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-144_SXXX_L001_I1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-144_SXXX_L001_I2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-145_SXXX_L001_I1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-145_SXXX_L001_I2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-146_SXXX_L001_I1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-146_SXXX_L001_I2_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-147_SXXX_L001_I1_001.trimmed.fastq.gz", - "/NuQCJob/Feist_11661/filtered_sequences/CDPH-SAL_Salmonella" - "_Typhi_MDL-147_SXXX_L001_I2_001.trimmed.fastq.gz" - ] - - results = step._get_postqc_fastq_files(self.output_file_path, - 'Feist_11661') - - self.assertEqual(set(results.keys()), {'raw_barcodes', - 'raw_forward_seqs', - 'raw_reverse_seqs'}) - for key in results.keys(): - obs = [x.replace(self.output_file_path, '') - for x in results[key]] - self.assertEqual(set(obs), set(exp[key])) - - -class ReplicateTests(BaseStepTests): - def setUp(self): - super().setUp() - - self._create_test_input(3) - - # Fake enough of a run so that GenPrepFileJob can generate - # prep-info files based on real input. - - # seqpro path - self.seqpro_path = which('seqpro') - - self.project_list = ['Feist_11661', 'NYU_BMS_Melanoma_13059'] - - # create Job working directories as needed. - data_dir = partial(join, 'qp_klp', 'tests', 'data') - self.output_dir = partial(data_dir, 'output_dir') - run_dir = partial(self.output_dir, 'GenPrepFileJob', - '211021_A00000_0000_SAMPLE') - - demultiplex_stats_path = data_dir('Demultiplex_Stats.csv') - fastp_stats_path = data_dir('sample_fastp.json') - - convert_job_reports_dir = self.output_dir('ConvertJob', 'Reports') - qc_job_reports_dir = self.output_dir('NuQCJob', 'Feist_11661', - 'fastp_reports_dir', 'json') - - run_dir_stats_dir = run_dir('Stats') - json_dir_13059 = run_dir('NYU_BMS_Melanoma_13059', 'json') - self.fastq_dir_11661 = run_dir('Feist_11661', 'filtered_sequences') - self.fastq_dir_13059 = run_dir('NYU_BMS_Melanoma_13059', - 'filtered_sequences') - - self.qc_fastq_dir_11661 = self.output_dir('NuQCJob', 'Feist_11661', - 'filtered_sequences') - - self.qc_fastq_dir_13059 = self.output_dir('NuQCJob', - 'NYU_BMS_Melanoma_13059', - 'filtered_sequences') - - create_these = [run_dir_stats_dir, convert_job_reports_dir, - qc_job_reports_dir, json_dir_13059, - self.fastq_dir_11661, self.fastq_dir_13059] - - for some_dir in create_these: - makedirs(some_dir, exist_ok=True) - - # Copy pre-made files containing numbers of reads for each sample - # into place. - - copy(demultiplex_stats_path, - self.output_dir('ConvertJob', 'Reports', 'Demultiplex_Stats.csv')) - - samples_11661 = ['BLANK_43_12H_A4', 'JBI_KHP_HGL_022_A16', - 'BLANK_43_12G_B2', 'JBI_KHP_HGL_023_B18', - 'RMA_KHP_rpoS_Mage_Q97N_A9', 'JBI_KHP_HGL_023_A18', - 'RMA_KHP_rpoS_Mage_Q97L_B8', 'JBI_KHP_HGL_022_B16', - 'JBI_KHP_HGL_022_A15', 'RMA_KHP_rpoS_Mage_Q97E_A12', - 'RMA_KHP_rpoS_Mage_Q97L_A8', - 'RMA_KHP_rpoS_Mage_Q97N_A10', 'JBI_KHP_HGL_021_B14', - 'BLANK_43_12G_A1', 'BLANK_43_12H_B4', - 'RMA_KHP_rpoS_Mage_Q97N_B10', 'JBI_KHP_HGL_024_A19', - 'RMA_KHP_rpoS_Mage_Q97D_B6', - 'RMA_KHP_rpoS_Mage_Q97D_A6', 'JBI_KHP_HGL_023_A17', - 'RMA_KHP_rpoS_Mage_Q97E_A11', 'BLANK_43_12G_A2', - 'RMA_KHP_rpoS_Mage_Q97D_A5', 'JBI_KHP_HGL_024_A20', - 'JBI_KHP_HGL_024_B20', 'RMA_KHP_rpoS_Mage_Q97L_A7', - 'JBI_KHP_HGL_021_A14', 'RMA_KHP_rpoS_Mage_Q97E_B12', - 'BLANK_43_12H_A3', 'JBI_KHP_HGL_021_A13'] - - samples_13059 = ['AP581451B02_A21', 'EP256645B01_A23', - 'EP112567B02_C1', 'EP337425B01_C3', - 'LP127890A01_C5', 'EP159692B04_C7', - 'EP987683A01_C9', 'AP959450A03_C11', - 'SP464350A04_C13', 'EP121011B01_C15', - 'AP581451B02_A22', 'EP256645B01_A24', - 'EP112567B02_C2', 'EP337425B01_C4', - 'LP127890A01_C6', 'EP159692B04_C8', - 'EP987683A01_C10', 'AP959450A03_C12', - 'SP464350A04_C14', 'EP121011B01_C16', - 'AP581451B02_B22', 'EP256645B01_B24', - 'EP112567B02_D2', 'EP337425B01_D4', - 'LP127890A01_D6', 'EP159692B04_D8', - 'EP987683A01_D10', 'AP959450A03_D12', - 'SP464350A04_D14', 'EP121011B01_D16'] - - for sample in samples_11661: - copy(fastp_stats_path, join(qc_job_reports_dir, - f'{sample}_S270_L001_R1_001.json')) - - for sample in samples_13059: - copy(fastp_stats_path, join(json_dir_13059, - f'{sample}_S270_L001_R1_001.json')) - - # create fake fastq files. Metapool checks to confirm that they are - # gzipped, hence we copy a small dummy fastq.gz file w/countable - # sequences here. - - for name in samples_11661: - for n_file in [f"{name}_S270_L001_R1_001.trimmed.fastq.gz", - f"{name}_S270_L001_R2_001.trimmed.fastq.gz"]: - copy(self.dummy_fastq_file, join(self.fastq_dir_11661, n_file)) - - for name in samples_13059: - for n_file in [f"{name}_S270_L001_R1_001.trimmed.fastq.gz", - f"{name}_S270_L001_R2_001.trimmed.fastq.gz"]: - copy(self.dummy_fastq_file, join(self.fastq_dir_13059, n_file)) - - def tearDown(self): - if exists(self.output_file_path): - rmtree(self.output_file_path) - - def test_replicates(self): - self.maxDiff = None - - # Create run_dir_stats_dir Step object and generate prep-files. - step = Step(self.pipeline_replicates, self.qiita_id, None) - - # Fake an empty tube-id map so that _generate_prep_file() doesn't - # abort early. - step.tube_id_map = {} - - config = self.pipeline.config_profile['profile']['configuration'] - - job = step._generate_prep_file(config['seqpro'], - self.sheet_w_replicates_path, - self.seqpro_path) - - # Metagenomic.generate_prep_file() and Amplicon.generate_prep_file() - # both perform self.prep_file_paths = job.prep_file_paths after the - # above completes. Recreate that behavior here. - step.prep_file_paths = job.prep_file_paths - - prep_output_path = self.output_dir('GenPrepFileJob', 'PrepFiles') - - # Confirm that the generated prep-info files are found in the - # correct location w/the correct names. For testing purposes, remove - # the absolute path up to 'qp_klp' and test against relative paths - # found in exp. - - obs = step.prep_file_paths - - for qiita_id in obs: - obs[qiita_id] = [re.sub(r"^.*?\/qp_klp\/", "qp_klp/", x) for x in - obs[qiita_id]] - - # _generate_prep_file() should have created a prep-info file for each - # of the three replicates and two projects defined in the original - # sample-sheet, for a total of six files. When replicates are defined, - # prep_output_path should contain numerically named directories, one - # for each replicate, containing the prep-info files for that - # replicate. - - exp = { - "11661": [ - join(prep_output_path, "1", - "211021_A00000_0000_SAMPLE.Feist_11661.1.tsv"), - join(prep_output_path, "2", - "211021_A00000_0000_SAMPLE.Feist_11661.1.tsv"), - join(prep_output_path, "3", - "211021_A00000_0000_SAMPLE.Feist_11661.1.tsv") - ], - "13059": [ - join(prep_output_path, "1", - "211021_A00000_0000_SAMPLE.NYU_BMS_Melanoma_13059.1.tsv"), - join(prep_output_path, "2", - "211021_A00000_0000_SAMPLE.NYU_BMS_Melanoma_13059.1.tsv"), - join(prep_output_path, "3", - "211021_A00000_0000_SAMPLE.NYU_BMS_Melanoma_13059.1.tsv") - ] - } - - self.assertDictEqual(obs, exp) - - # verify each prep_info_file contains the expected number of rows and - # more importantly are not empty. - for qiita_id in obs: - for prep_info_file in obs[qiita_id]: - df = parse_prep(prep_info_file) - self.assertEqual(10, df.shape[0]) - - # Now, let's fake enough of the later steps to test the loading of - # each prep-info file into Qiita and ensure that each post is unique - # from a unique file. - - fake_client = FakeClient() - step.update_prep_templates(fake_client) - step.generate_special_map(fake_client) - - # Since load_preps_into_qiita() relies on the hierarchy of files in - # NuQCJob()'s output to do it's work, copy the faked fastq files made - # for GenPrepFileJob() into the right location in NuQCJob's output. - # (We are skipping a number of steps, hence the need to do this. - # Ordinarily, the data would be created in NuQCJob() and migrated - # through the pipeline to GenPrepFileJob(), not the other way around.) - copytree(self.fastq_dir_13059, self.qc_fastq_dir_13059) - copytree(self.fastq_dir_11661, self.qc_fastq_dir_11661) - results = step.load_preps_into_qiita(fake_client) - - obs = { - 'RMA_KHP_rpoS_Mage_Q97L_A7_S270_L001_R1_001.trimmed.fastq.gz': 0, - 'RMA_KHP_rpoS_Mage_Q97E_A12_S270_L001_R2_001.trimmed.fastq.gz': 0, - 'JBI_KHP_HGL_022_B16_S270_L001_R2_001.trimmed.fastq.gz': 0, - 'AP581451B02_A21_S270_L001_R2_001.trimmed.fastq.gz': 0, - 'EP159692B04_C8_S270_L001_R1_001.trimmed.fastq.gz': 0, - 'LP127890A01_D6_S270_L001_R1_001.trimmed.fastq.gz': 0} - - # take advantage of the posted-files listing being in string format - # and test for the appearance of specific individual file names in - # each post. Each fastq file should only appear in one and only one - # post. - for prep_id in fake_client.saved_posts: - posted_files_listing = fake_client.saved_posts[prep_id]['files'] - for fastq in obs: - if fastq in posted_files_listing: - obs[fastq] += 1 - - exp = { - 'RMA_KHP_rpoS_Mage_Q97L_A7_S270_L001_R1_001.trimmed.fastq.gz': 1, - 'RMA_KHP_rpoS_Mage_Q97E_A12_S270_L001_R2_001.trimmed.fastq.gz': 1, - 'JBI_KHP_HGL_022_B16_S270_L001_R2_001.trimmed.fastq.gz': 1, - 'AP581451B02_A21_S270_L001_R2_001.trimmed.fastq.gz': 1, - 'EP159692B04_C8_S270_L001_R1_001.trimmed.fastq.gz': 1, - 'LP127890A01_D6_S270_L001_R1_001.trimmed.fastq.gz': 1} - - self.assertDictEqual(obs, exp) - - # confirm that six preps were created by confirming that - # load_preps_into_qiita() returned six unique prep-ids, and six - # unique job-ids. - self.assertEqual(len(results['Linking JobID'].unique()), 6) - self.assertEqual(len(results['Qiita Prep ID'].unique()), 6) - - # confirm that three of the preps belong to the Feist project, while - # the other three belong to NYU. - projects = ['Feist_11661', 'NYU_BMS_Melanoma_13059'] - for project in projects: - self.assertEqual(results['Project'].value_counts()[project], 3) - - -class FailedSamplesRecordTests(TestCase): - def setUp(self): - class MockSample(): - def __init__(self, sample_id, project_name): - self.Sample_ID = sample_id - self.Sample_Project = project_name - - self.samples = [MockSample('A', 'ProjectOne'), - MockSample('B', 'ProjectTwo'), - MockSample('C', 'ProjectThree'), - MockSample('D', 'ProjectFour')] - - self.output = TemporaryDirectory() - - def test_failed_samples_record(self): - fsr = FailedSamplesRecord(self.output.name, self.samples) - - # assert that a state file doesn't already exist and attempt to load() - # it. State should remain unchanged. - exp = deepcopy(fsr.sample_state) - self.assertFalse(exists(fsr.output_path)) - fsr.load() - self.assertEqual(fsr.sample_state, exp) - - # confirm that dump() creates the appropriate file. - self.assertFalse(exists(fsr.output_path)) - fsr.dump() - self.assertTrue(exists(fsr.output_path)) - - # load the dumped() file, and confirm that nothing changed since - # the state wasn't update()d. - fsr.load() - self.assertEqual(fsr.sample_state, exp) - - # assert samples A and C failed at the ConvertJob stage, assert - # state changed. dump() state and load() it. Confirm state on disk - # reflects changes. - fsr.update(['A', 'C'], 'ConvertJob') - self.assertNotEqual(fsr.sample_state, exp) - fsr.dump() - fsr.load() - exp = {'A': 'ConvertJob', 'B': None, 'C': 'ConvertJob', 'D': None} - self.assertEqual(fsr.sample_state, exp) - - # B should be failed at FastQCJob but A and C should still be - # failed at ConvertJob - fsr.update(['A', 'B', 'C'], "FastQCJob") - exp = {'A': 'ConvertJob', 'B': 'FastQCJob', - 'C': 'ConvertJob', 'D': None} - self.assertEqual(fsr.sample_state, exp) - - # confirm html file exists. Assume pandas DataFrame.to_html() works - # as intended. - self.assertFalse(exists(fsr.report_path)) - fsr.generate_report() - self.assertTrue(exists(fsr.report_path)) diff --git a/qp_klp/tests/test_workflows.py b/qp_klp/tests/test_workflows.py new file mode 100644 index 00000000..b2cd39d4 --- /dev/null +++ b/qp_klp/tests/test_workflows.py @@ -0,0 +1,892 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2014--, The Qiita Development Team. +# +# Distributed under the terms of the BSD 3-clause License. +# +# The full license is in the file LICENSE, distributed with this software. +# ----------------------------------------------------------------------------- +from unittest import TestCase +from os.path import join, abspath, exists, split +from os import makedirs, chmod, access, W_OK, walk +from shutil import rmtree +from os import environ, remove, getcwd +import re +from qp_klp.WorkflowFactory import WorkflowFactory +from metapool import load_sample_sheet +from collections import defaultdict +from random import randint +from platform import system as get_operating_system_type + + +class FakeClient(): + def __init__(self): + self.cwd = getcwd() + self.base_path = join(self.cwd, 'qp_klp/tests/data/QDir') + self.qdirs = {'Demultiplexed': 'Demultiplexed', + 'beta_div_plots': 'analysis/beta_div_plots', + 'rarefaction_curves': 'analysis/rarefaction_curves', + 'taxa_summary': 'analysis/taxa_summary', + 'q2_visualization': 'working_dir', + 'distance_matrix': 'working_dir', + 'ordination_results': 'working_dir', + 'alpha_vector': 'working_dir', + 'FASTQ': 'FASTQ', + 'BIOM': 'BIOM', + 'per_sample_FASTQ': 'per_sample_FASTQ', + 'SFF': 'SFF', + 'FASTA': 'FASTA', + 'FASTA_Sanger': 'FASTA_Sanger', + 'FeatureData': 'FeatureData', + 'job-output-folder': 'job-output-folder', + 'BAM': 'BAM', + 'VCF': 'VCF', + 'SampleData': 'SampleData', + 'uploads': 'uploads'} + + self.samples_in_13059 = ['13059.SP331130A04', '13059.AP481403B02', + '13059.LP127829A02', '13059.BLANK3.3B', + '13059.EP529635B02', '13059.EP542578B04', + '13059.EP446602B01', '13059.EP121011B01', + '13059.EP636802A01', '13059.SP573843A04'] + + # note these samples have known tids, but aren't in good-sample-sheet. + self.samples_in_11661 = ['11661.1.24', '11661.1.57', '11661.1.86', + '11661.10.17', '11661.10.41', '11661.10.64', + '11661.11.18', '11661.11.43', '11661.11.64', + '11661.12.15'] + + self.samples_in_6123 = ['3A', '4A', '5B', '6A', 'BLANK.41.12G', '7A', + '8A', 'ISB', 'GFR', '6123'] + + self.info_in_11661 = {'number-of-samples': 10, + 'categories': ['sample_type', 'tube_id']} + + self.info_in_13059 = {'number-of-samples': 10, + 'categories': ['anonymized_name', + 'collection_timestamp', + 'description', + 'dna_extracted', + 'elevation', 'empo_1', + 'empo_2', 'empo_3', + 'env_biome', 'env_feature', + 'env_material', + 'env_package', + 'geo_loc_name', 'host_age', + 'host_age_units', + 'host_body_habitat', + 'host_body_mass_index', + 'host_body_product', + 'host_body_site', + 'host_common_name', + 'host_height', + 'host_height_units', + 'host_life_stage', + 'host_scientific_name', + 'host_subject_id', + 'host_taxid', 'host_weight', + 'host_weight_units', + 'latitude', 'longitude', + 'nyuid', + 'physical_specimen_location', + 'physical_specimen_remaining', + 'predose_time', + 'sample_type', + 'scientific_name', 'sex', + 'subject_id', 'taxon_id', + 'title', 'tube_id']} + + # Study not in qiita-rc. Faking results. + self.info_in_6123 = {'number-of-samples': 10, + 'categories': ['sample_type', 'subject_id', + 'title']} + + self.tids_13059 = {"header": ["tube_id"], + "samples": {'13059.SP331130A04': ['SP331130A-4'], + '13059.AP481403B02': ['AP481403B-2'], + '13059.LP127829A02': ['LP127829A-2'], + '13059.BLANK3.3B': ['BLANK3.3B'], + '13059.EP529635B02': ['EP529635B-2'], + '13059.EP542578B04': ['EP542578B-4'], + '13059.EP446602B01': ['EP446602B-1'], + '13059.EP121011B01': ['EP121011B-1'], + '13059.EP636802A01': ['EP636802A-1'], + '13059.SP573843A04': ['SP573843A-4']}} + + self.tids_11661 = {"header": ["tube_id"], + "samples": {"11661.1.24": ["1.24"], + "11661.1.57": ["1.57"], + "11661.1.86": ["1.86"], + "11661.10.17": ["10.17"], + "11661.10.41": ["10.41"], + "11661.10.64": ["10.64"], + "11661.11.18": ["11.18"], + "11661.11.43": ["11.43"], + "11661.11.64": ["11.64"], + "11661.12.15": ["12.15"]}} + + for key in self.qdirs: + self.qdirs[key] = join(self.base_path, self.qdirs[key]) + + for qdir in self.qdirs: + makedirs(self.qdirs[qdir], exist_ok=True) + + self.fake_id = 1000 + self._server_url = "some.server.url" + self.saved_posts = {} + + def get(self, url): + m = {'/api/v1/study/11661/samples': self.samples_in_11661, + '/api/v1/study/11661/samples/categories=tube_id': self.tids_11661, + '/api/v1/study/11661/samples/info': self.info_in_11661, + '/api/v1/study/13059/samples': self.samples_in_13059, + '/api/v1/study/13059/samples/categories=tube_id': self.tids_13059, + '/api/v1/study/13059/samples/info': self.info_in_13059, + '/api/v1/study/6123/samples': self.samples_in_6123, + '/api/v1/study/6123/samples/info': self.info_in_6123, + '/qiita_db/artifacts/types/': self.qdirs} + + if url in m: + return m[url] + + return None + + def post(self, url, data=None): + if '/qiita_db/prep_template/' == url: + self.fake_id += 1 + return {'prep': self.fake_id} + elif '/qiita_db/artifact/' == url: + self.saved_posts[str(self.fake_id)] = data + self.fake_id += 1 + return {'job_id': self.fake_id} + else: + raise ValueError("Unsupported URL") + + +class TestWorkflows(TestCase): + def setUp(self): + self.fake_bin_path = "" + self.delete_these_files = [] + self.delete_these_dirs = [] + self.fake_bin_path = self.get_searchable_path() + + # self.output_dir represents a qiita working directory. + package_root = abspath('./qp_klp/tests/data') + self.output_dir = join(package_root, + "077c4da8-74eb-4184-8860-0207f53623be") + self.delete_these_dirs = [self.output_dir] + + # We want a clean directory, nothing from leftover runs + makedirs(self.output_dir, exist_ok=False) + + self.debug = False + + def tearDown(self): + if not self.debug: + rmtree(self.output_dir) + + for fp in self.delete_these_files: + if exists(fp): + remove(fp) + + def create_fake_bin(self, name, content, chain_cmd=None): + tmp = join(self.fake_bin_path, name) + + if chain_cmd: + # if chain_cmd is true, there will be a second + # binary file written named "{name}.2" in the same + # location. The final command of this fake bin will + # be to overwrite itself with "{name}.2" so that + # the next invocation of the the command e.g. 'sbatch' + # will do different things. + tmp2 = join(self.fake_bin_path, chain_cmd) + content += f"\nmv {tmp2} {tmp}\n" + + with open(tmp, 'w') as f: + f.write(f"#!/bin/sh\n{content}\n") + chmod(tmp, 0o777) + self.delete_these_files.append(tmp) + return tmp + + def create_fake_file(self, fp): + with open(fp, 'w') as f: + f.write("This is a file.") + + def get_searchable_path(self): + searchable_paths = [] + + if 'CONDA_PREFIX' in environ: + # create fake binaries in bin directory of Conda environment + searchable_paths.append(environ['CONDA_PREFIX'] + '/bin') + else: + # if CONDA_PREFIX doesn't exist, select a path from a list of + # searchable paths that contains 'env' and assume it's writable. + tmp = environ['PATH'] + searchable_paths += tmp.split(':') + + for a_path in searchable_paths: + if access(a_path, W_OK): + return a_path + + def _generate_empty_file_cmd(self, file_path, size): + # the dd command takes slightly different parameters if the platform + # is Linux vs MacOS (Darwin). This allows for testing to run + # correctly on both platforms + types = {'Linux': 'MB', 'Darwin': 'm'} + + type = get_operating_system_type() + if type in types: + return (f"dd if=/dev/zero of={file_path} bs={size}{types[type]} " + "count=1 2>/dev/null") + else: + raise ValueError(f"Platform '{type}' is not supported.") + + def test_partial_metagenomic_pipeline(self): + # Tests convert_raw_to_fastq() and quality_control() steps of + # StandardMetagenomicWorkflow(), which in turn exercises + # FailedSamplesRecord, Metagenomic and Illumina mixins, and the + # base Workflow class. + + # create a shell-script mimicking what the real sbatch prints to + # stdout. The code in Job() will extract the job-id (9999999) which + # it will poll for using our fake squeue script. + # + # after printing to stdout, our fake sbatch will simulate the results + # of bcl-convert generating fastqs by creating a directory full of + # fastq files for each project. + + # the line returning the fake Slurm job-id. + cmds = ["echo 'Submitted batch job 9999999'"] + + # the lines to recreate the directories a standard Job() object + # creates. + cmds.append("mkdir -p %s" % join(self.output_dir, 'ConvertJob', + 'logs')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'ConvertJob', + 'Reports')) + + # use the list of sample_ids found in the sample-sheet to generate + # fake fastq files for convert_raw_to_fastq() to find and manipulate. + sheet = load_sample_sheet("qp_klp/tests/data/sample-sheets/metagenomic" + "/illumina/good_sheet1.csv") + exp = defaultdict(list) + for sample in sheet.samples: + sample = sample.to_json() + exp[sample['Sample_Project']].append(sample['Sample_ID']) + + # in order to test post-process auditing, we will manually remove a + # single sample_id from each project in order to simulate failed + # conversions. + simulated_failed_samples = [] + + for project in exp: + # sort the list so that files are created in a predictable order. + exp[project].sort() + + simulated_failed_samples.append(exp[project].pop()) + + fake_path = join(self.output_dir, 'ConvertJob', project) + cmds.append(f"mkdir -p {fake_path}") + + for sample in exp[project]: + r1 = join(fake_path, f'{sample}_S123_L001_R1_001.fastq.gz') + r2 = join(fake_path, f'{sample}_S123_L001_R2_001.fastq.gz') + + # let r1 and r2 be the same size. + size = randint(1, 5) + for file_path in [r1, r2]: + cmds.append(self._generate_empty_file_cmd(file_path, size)) + + # write all the statements out into a bash-script named 'sbatch' and + # place it somewhere in the PATH. (It will be removed on tearDown()). + self.create_fake_bin('sbatch', "\n".join(cmds)) + + # create fake squeue binary that writes to stdout what Job() needs to + # see to think that bcl-convert has completed successfully. + self.create_fake_bin('squeue', "echo 'JOBID,STATE\n" + "9999999,COMPLETED'") + + # Create a Workflow object using WorkflowFactory(). No need to confirm + # it is the correct one; that is confirmed in other tests. Run + # convert_raw_to_fastq() and confirm that the directory structure and + # the audit results match what is expected. + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/metagenomic/" + "illumina/good_sheet1.csv", + "qclient": FakeClient(), + "lane_number": "1", + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": '211021_A00000_0000_SAMPLE', + "output_dir": self.output_dir, + "job_id": "077c4da8-74eb-4184-8860-0207f53623be", + "is_restart": False + } + + wf = WorkflowFactory.generate_workflow(**kwargs) + + # Illumina.convert_raw_to_fastq() calls Job.audit() after bcl-convert + # exists and will identify the samples that failed to process. Confirm + # the values are correct here. + audit_results = sorted(wf.convert_raw_to_fastq()) + + self.assertEqual(audit_results, sorted(simulated_failed_samples)) + + # NB: bcl-convert's presence in ConvertJob.sh confirms it is getting + # path and binary name from the correct configuration file. Note it + # doesn't check to see that the binary exists because where Job() runs + # is not the same location as where bcl-convert will run (compute- + # node.) + + # confirm ConvertJob.sh Slurm job script looks exactly as intended by + # confirming its digest. + + exp = ['#!/bin/bash', + '#SBATCH --job-name None_ConvertJob', + '#SBATCH -p qiita', + '#SBATCH -N 1', + '#SBATCH -n 16', + '#SBATCH --time 216', + '#SBATCH --mail-type=ALL', + '#SBATCH --mail-user qiita.help@gmail.com', + '#SBATCH --mem-per-cpu 10gb', + 'set -x', + 'date', + 'hostname', + 'cd qp_klp/tests/data/211021_A00000_0000_SAMPLE', + 'module load bclconvert_3.7.5', + 'bcl-convert --sample-sheet "qp_klp/tests/data/sample-sheets/' + 'metagenomic/illumina/good_sheet1.csv" --output-directory ' + 'qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/' + 'ConvertJob --bcl-input-directory . --bcl-num-decompression-' + 'threads 16 --bcl-num-conversion-threads 16 --bcl-num-' + 'compression-threads 16 --bcl-num-parallel-tiles 16 ' + '--bcl-sampleproject-subdirectories true --force'] + + with open("qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/" + "ConvertJob/ConvertJob.sh", 'r') as f: + obs = f.readlines() + obs = [x.strip() for x in obs] + obs = [re.sub('-directory .*?/qp_klp', + '-directory qp_klp', x) for x in obs] + + self.assertEqual(obs, exp) + + # ConvertJob successful. + cmds = [] + + # the lines to recreate the directories a standard Job() object + # creates. + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'logs')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'only-adapter-filtered')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'fastp_reports_dir', 'html')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'fastp_reports_dir', 'json')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', 'tmp')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'tmp.564341')) + + # simulate host-filtering scripts by scanning contents of ConvertJob + # directory and copying the files into the expected location for post- + # processing. + for root, _, files in walk(join(self.output_dir, 'ConvertJob')): + for _file in files: + # don't process anything from ConvertJob directory that isn't + # a simulated fastq file. Since these are fake files we can + # assume 'Undetermined' fastq files are not present. + if not _file.endswith('.fastq.gz'): + continue + + raw_file = join(root, _file) + _, project_name = split(root) + + new_name = _file.replace('.fastq.gz', '.interleave.fastq.gz') + file_path = join(self.output_dir, 'NuQCJob', + 'only-adapter-filtered', new_name) + cmds.append(f"cp {raw_file} {file_path}") + + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + project_name, + 'filtered_sequences')) + + file_path = join(self.output_dir, 'NuQCJob', project_name, + 'filtered_sequences', _file) + cmds.append(f"cp {raw_file} {file_path}") + + new_name = _file.replace('.fastq.gz', '.html') + file_path = join(self.output_dir, 'NuQCJob', + 'fastp_reports_dir', 'html', new_name) + cmds.append(f"echo 'This is an html file.' > {file_path}") + + new_name = _file.replace('.fastq.gz', '.json') + file_path = join(self.output_dir, 'NuQCJob', + 'fastp_reports_dir', 'json', new_name) + cmds.append(f"echo 'This is a json file.' > {file_path}") + + cmds.append("echo 'Submitted batch job 9999999'") + # write all the statements out into a bash-script named 'sbatch' and + # place it somewhere in the PATH. (It will be removed on tearDown()). + self.create_fake_bin('sbatch', "\n".join(cmds)) + audit_results = sorted(wf.quality_control()) + + # add tests to test audit results, modify test to introduce some + # 'zero-length' files. add some assertions to show that the post- + # processing step is munging the correct directory structure needed + # for subsequent steps. + + # NuQCJob successful. + + def test_partial_metatranscriptomic_pipeline(self): + # Tests convert_raw_to_fastq() and quality_control() steps of + # StandardMetatranscriptomicWorkflow(), which in turn exercises + # FailedSamplesRecord, Metagenomic and Illumina mixins, and the + # base Workflow class. + + # create a shell-script mimicking what the real sbatch prints to + # stdout. The code in Job() will extract the job-id (9999999) which + # it will poll for using our fake squeue script. + # + # after printing to stdout, our fake sbatch will simulate the results + # of bcl-convert generating fastqs by creating a directory full of + # fastq files for each project. + + # the line returning the fake Slurm job-id. + cmds = ["echo 'Submitted batch job 9999999'"] + + # the lines to recreate the directories a standard Job() object + # creates. + cmds.append("mkdir -p %s" % join(self.output_dir, 'ConvertJob', + 'logs')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'ConvertJob', + 'Reports')) + + # use the list of sample_ids found in the sample-sheet to generate + # fake fastq files for convert_raw_to_fastq() to find and manipulate. + sheet = load_sample_sheet("qp_klp/tests/data/sample-sheets/meta" + "transcriptomic/illumina/good_sheet1.csv") + + exp = defaultdict(list) + + for sample in sheet.samples: + sample = sample.to_json() + exp[sample['Sample_Project']].append(sample['Sample_ID']) + + # in order to test post-process auditing, we will manually remove a + # single sample_id from each project in order to simulate failed + # conversions. + simulated_failed_samples = [] + + for project in exp: + # sort the list so that files are created in a predictable order. + exp[project].sort() + + simulated_failed_samples.append(exp[project].pop()) + + fake_path = join(self.output_dir, 'ConvertJob', project) + cmds.append(f"mkdir -p {fake_path}") + + for sample in exp[project]: + r1 = join(fake_path, f'{sample}_S123_L001_R1_001.fastq.gz') + r2 = join(fake_path, f'{sample}_S123_L001_R2_001.fastq.gz') + + # let r1 and r2 be the same size. + size = randint(1, 5) + for file_path in [r1, r2]: + cmds.append(self._generate_empty_file_cmd(file_path, size)) + + # write all the statements out into a bash-script named 'sbatch' and + # place it somewhere in the PATH. (It will be removed on tearDown()). + self.create_fake_bin('sbatch', "\n".join(cmds)) + + # create fake squeue binary that writes to stdout what Job() needs to + # see to think that bcl-convert has completed successfully. + self.create_fake_bin('squeue', "echo 'JOBID,STATE\n" + "9999999,COMPLETED'") + + # Create a Workflow object using WorkflowFactory(). No need to confirm + # it is the correct one; that is confirmed in other tests. Run + # convert_raw_to_fastq() and confirm that the directory structure and + # the audit results match what is expected. + kwargs = {"uif_path": "qp_klp/tests/data/sample-sheets/metatranscript" + "omic/illumina/good_sheet1.csv", + "qclient": FakeClient(), + "lane_number": "2", + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": '211021_A00000_0000_SAMPLE', + "output_dir": self.output_dir, + "job_id": "077c4da8-74eb-4184-8860-0207f53623be", + "is_restart": False + } + + wf = WorkflowFactory.generate_workflow(**kwargs) + + # Illumina.convert_raw_to_fastq() calls Job.audit() after bcl-convert + # exists and will identify the samples that failed to process. Confirm + # the values are correct here. + audit_results = sorted(wf.convert_raw_to_fastq()) + + self.assertEqual(audit_results, sorted(simulated_failed_samples)) + + # NB: bcl-convert's presence in ConvertJob.sh confirms it is getting + # path and binary name from the correct configuration file. Note it + # doesn't check to see that the binary exists because where Job() runs + # is not the same location as where bcl-convert will run (compute- + # node.) + + # confirm ConvertJob.sh Slurm job script looks exactly as intended by + # confirming its digest. + exp = [ + "#!/bin/bash", + "#SBATCH --job-name None_ConvertJob", + "#SBATCH -p qiita", + "#SBATCH -N 1", + "#SBATCH -n 16", + "#SBATCH --time 216", + "#SBATCH --mail-type=ALL", + "#SBATCH --mail-user qiita.help@gmail.com", + "#SBATCH --mem-per-cpu 10gb", + "set -x", + "date", + "hostname", + "cd qp_klp/tests/data/211021_A00000_0000_SAMPLE", + "module load bclconvert_3.7.5", + "bcl-convert --sample-sheet \"qp_klp/tests/data/sample-sheets/" + "metatranscriptomic/illumina/good_sheet1.csv\" --output-directory" + " qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/" + "ConvertJob --bcl-input-directory . --bcl-num-decompression-" + "threads 16 --bcl-num-conversion-threads 16 --bcl-num-compression" + "-threads 16 --bcl-num-parallel-tiles 16 --bcl-sampleproject-" + "subdirectories true --force" + ] + + with open("qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/" + "ConvertJob/ConvertJob.sh", 'r') as f: + obs = f.readlines() + obs = [x.strip() for x in obs] + obs = [re.sub('-directory .*?/qp_klp', + '-directory qp_klp', x) for x in obs] + + self.assertEqual(obs, exp) + + # ConvertJob successful. + cmds = [] + + # the lines to recreate the directories a standard Job() object + # creates. + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'logs')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'only-adapter-filtered')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'fastp_reports_dir', 'html')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'fastp_reports_dir', 'json')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'tmp')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'NuQCJob', + 'tmp.564341')) + + # simulate host-filtering scripts by scanning contents of ConvertJob + # directory and copying the files into the expected location for post- + # processing. + for root, _, files in walk(join(self.output_dir, 'ConvertJob')): + for _file in files: + # don't process anything from ConvertJob directory that isn't + # a simulated fastq file. Since these are fake files we can + # assume 'Undetermined' fastq files are not present. + if not _file.endswith('.fastq.gz'): + continue + + raw_file = join(root, _file) + _, project_name = split(root) + + new_name = _file.replace('.fastq.gz', '.interleave.fastq.gz') + file_path = join(self.output_dir, 'NuQCJob', + 'only-adapter-filtered', new_name) + cmds.append(f"cp {raw_file} {file_path}") + + cmds.append("mkdir -p %s" % join(self.output_dir, + 'NuQCJob', + project_name, + 'filtered_sequences')) + + file_path = join(self.output_dir, 'NuQCJob', project_name, + 'filtered_sequences', _file) + cmds.append(f"cp {raw_file} {file_path}") + + new_name = _file.replace('.fastq.gz', '.html') + file_path = join(self.output_dir, + 'NuQCJob', + 'fastp_reports_dir', + 'html', + new_name) + cmds.append(f"echo 'This is an html file.' > {file_path}") + + new_name = _file.replace('.fastq.gz', '.json') + file_path = join(self.output_dir, + 'NuQCJob', + 'fastp_reports_dir', + 'json', + new_name) + cmds.append(f"echo 'This is a json file.' > {file_path}") + + cmds.append("echo 'Submitted batch job 9999999'") + # write all the statements out into a bash-script named 'sbatch' and + # place it somewhere in the PATH. (It will be removed on tearDown()). + self.create_fake_bin('sbatch', "\n".join(cmds)) + audit_results = sorted(wf.quality_control()) + + # NuQCJob successful. + + def test_partial_amplicon_pipeline(self): + # Tests convert_raw_to_fastq() and quality_control() steps of + # StandardAmpliconWorkflow(), which in turn exercises + # Amplicon and Illumina mixins, and the base Workflow class. + + # create a shell-script mimicking what the real sbatch prints to + # stdout. The code in Job() will extract the job-id (9999999) which + # it will poll for using our fake squeue script. + # + # after printing to stdout, our fake sbatch will simulate the results + # of bcl-convert generating fastqs by creating a directory full of + # fastq files for each project. + + # the line returning the fake Slurm job-id. + cmds = ["echo 'Submitted batch job 9999999'"] + + # the lines to recreate the directories a standard Job() object + # creates. + cmds.append("mkdir -p %s" % join(self.output_dir, 'ConvertJob', + 'logs')) + cmds.append("mkdir -p %s" % join(self.output_dir, 'ConvertJob', + 'Reports')) + + r1 = join(join(self.output_dir, 'ConvertJob'), + 'Undetermined_S0_L001_R1_001.fastq.gz') + r2 = join(join(self.output_dir, 'ConvertJob'), + 'Undetermined_S0_L001_R2_001.fastq.gz') + + # let r1 and r2 be the same size. + size = randint(1, 5) + for file_path in [r1, r2]: + cmds.append(self._generate_empty_file_cmd(file_path, size)) + + # write all the statements out into a bash-script named 'sbatch' and + # place it somewhere in the PATH. (It will be removed on tearDown()). + self.create_fake_bin('sbatch', "\n".join(cmds)) + + # create fake squeue binary that writes to stdout what Job() needs to + # see to think that bcl-convert has completed successfully. + self.create_fake_bin('squeue', "echo 'JOBID,STATE\n" + "9999999,COMPLETED'") + + # Create a Workflow object using WorkflowFactory(). No need to confirm + # it is the correct one; that is confirmed in other tests. Run + # convert_raw_to_fastq() and confirm that the directory structure and + # the audit results match what is expected. + kwargs = {"uif_path": "qp_klp/tests/data/pre-preps/good_pre_prep1.txt", + "qclient": FakeClient(), + "lane_number": "1", + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": '211021_A00000_0000_SAMPLE', + "output_dir": self.output_dir, + "job_id": "077c4da8-74eb-4184-8860-0207f53623be", + "is_restart": False + } + + wf = WorkflowFactory.generate_workflow(**kwargs) + + # Amplicon (16S) workflow doesn't demux samples, hence there is + # nothing to audit. Just run convert_raw_to_fastq(). + + wf.convert_raw_to_fastq() + + # NB: bcl2fastq's presence in ConvertJob.sh confirms it is getting + # path and binary name from the correct configuration file. Note it + # doesn't check to see that the binary exists because where Job() runs + # is not the same location as where bcl-convert will run (compute- + # node.) + + # confirm ConvertJob.sh Slurm job script looks exactly as intended by + # confirming its digest. + + # confirm ConvertJob.sh Slurm job script looks exactly as intended by + # confirming its digest. + exp = ["#!/bin/bash", + "#SBATCH --job-name None_ConvertJob", + "#SBATCH -p qiita", + "#SBATCH -N 2", + "#SBATCH -n 62", + "#SBATCH --time 1022", + "#SBATCH --mail-type=ALL", + "#SBATCH --mail-user qiita.help@gmail.com", + "#SBATCH --mem-per-cpu 100gb", + "set -x", + "date", + "hostname", + "cd qp_klp/tests/data/211021_A00000_0000_SAMPLE", + "module load bcl2fastq_2.20.0.222", + "bcl2fastq --sample-sheet \"qp_klp/tests/data/077c4da8-74eb" + "-4184-8860-0207f53623be/dummy_sample_sheet.csv\" --minimum-" + "trimmed-read-length 1 " + "--mask-short-adapter-reads 1 -R . -o qp_klp/tests/data/" + "077c4da8-74eb-4184-8860-0207f53623be/ConvertJob " + "--loading-threads 16 --processing-threads 16 --writing-" + "threads 16 --create-fastq-for-index-reads --ignore-missing-" + "positions"] + + with open("qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be/" + "ConvertJob/ConvertJob.sh", 'r') as f: + obs = f.readlines() + obs = [x.strip() for x in obs] + obs = [re.sub('bcl2fastq --sample-sheet ".*?qp_klp', + 'bcl2fastq --sample-sheet "qp_klp', x) for x in obs] + obs = [re.sub('-o .*?/qp_klp', '-o qp_klp', x) for x in obs] + + self.assertEqual(obs, exp) + + # ConvertJob successful. + + # NB: Since Amplicon workflows do not demux samples into individual + # fastq files and there is no adapter-trimming, there is nothing for + # the traditional 'quality-control' step to do. The only thing for + # quality control to do is post-process the results of ConvertJob and + # copy them into a structure that FastQCJob expects. + + # Hence, we do not recreate the structure of NuQCJob here and write + # it into a bash script. Instead we'll run quality_control() and + # confirm that Amplicon.quality_control() copies the results from + # ConvertJob() into a faked NuQCJob structure for FastQCJob to find. + + # With multiple projects and multiplexed fastq files, it's not + # possible to sort them by project, but all downstream processes + # expect this, including prep-info file generation and loading of them + # into Qiita. + + # To support these downstream processes, Amplicon.quality_control() + # creates project directories for as many projects are listed in the + # pre-prep file, and copies _all_ of the Undetermined fastq files into + # _each_ project directory. + + wf.post_process_raw_fastq_output() + + base_path = "qp_klp/tests/data/077c4da8-74eb-4184-8860-0207f53623be" + + exp = [join(base_path, 'NuQCJob'), + join(base_path, 'NuQCJob', 'TestProj_1'), + join(base_path, 'NuQCJob', 'TestProj_2'), + join(base_path, 'NuQCJob', 'TestProj_1', 'amplicon'), + join(base_path, 'NuQCJob', 'TestProj_2', 'amplicon'), + join(base_path, 'NuQCJob', 'TestProj_1', 'amplicon', + 'Undetermined_S0_L001_R1_001.fastq.gz'), + join(base_path, 'NuQCJob', 'TestProj_1', 'amplicon', + 'Undetermined_S0_L001_R2_001.fastq.gz'), + join(base_path, 'NuQCJob', 'TestProj_2', 'amplicon', + 'Undetermined_S0_L001_R1_001.fastq.gz'), + join(base_path, 'NuQCJob', 'TestProj_1', 'amplicon', + 'Undetermined_S0_L001_R2_001.fastq.gz')] + + for _path in exp: + self.assertTrue(exists(_path)) + + # Post-processing for absent Quality Control successful. + + def test_partial_tellseq_pipeline(self): + # substitute for UI callback function. + def call_me_back(status): + with open("callback.log", 'a') as f: + print(f"LOG: {status}", file=f) + + # emulate TellReadJob output + + cmds = ["echo 'Submitted batch job 9999990'"] + output_dir = join(join(self.output_dir, 'TellReadJob', 'output')) + cmds.append("mkdir -p %s" % join(output_dir, '1_demult', 'Raw')) + cmds.append("mkdir -p %s" % join(self.output_dir, + 'TellReadJob', 'logs')) + + # create output we expect to see from tellread. + barcode_ids = ['C591', 'C550', 'C503', 'C566', + 'C556', 'C578', 'C592'] + + files = [] + for file_type in ['I1', 'R1', 'R2']: + files += [f'project_{file_type}_{x}_raw.fastq.gz' + for x in barcode_ids] + + for _file in files: + cmds.append(f"touch {join(output_dir, '1_demult', 'Raw', _file)}") + + # write all the statements out into a bash-script named 'sbatch' and + # place it somewhere in the PATH. (It will be removed on tearDown()). + self.create_fake_bin('sbatch', "\n".join(cmds), chain_cmd='sbatch.2') + + # create fake squeue binary that writes to stdout what Job() needs to + # see to think that tell-read has completed successfully. + self.create_fake_bin('squeue', "echo 'JOBID,STATE\n" + "9999990,COMPLETED'", chain_cmd='squeue.2') + + # emulate TRIntegrateJob output + + cmds = ["echo 'Submitted batch job 9999991'"] + # intentionally let's not create a separate output dir. + output_dir = join(join(self.output_dir, 'TRIntegrateJob', + 'integrated')) + cmds.append("mkdir -p %s" % output_dir) + cmds.append("mkdir -p %s" % join(self.output_dir, + 'TRIntegrateJob', 'logs')) + + files = [] + for file_type in ['I1', 'R1', 'R2']: + files += [f'project_{file_type}_{x}.fastq.gz' + for x in barcode_ids] + + for _file in files: + # cmds.append(f"touch {join(output_dir, 'integrated', _file)}") + cmds.append(f"touch {join(output_dir, _file)}") + + self.create_fake_bin('sbatch.2', "\n".join(cmds)) + self.create_fake_bin('squeue.2', "echo 'JOBID,STATE\n" + "9999991,COMPLETED'") + + kwargs = {"uif_path": ("qp_klp/tests/data/sample-sheets/metagenomic" + "/tellseq/good_sheet1.csv"), + "qclient": FakeClient(), + "lane_number": "4", + "config_fp": "qp_klp/tests/data/configuration.json", + "run_identifier": '211021_A00000_0000_SAMPLE', + "output_dir": self.output_dir, + "job_id": "077c4da8-74eb-4184-8860-0207f53623be", + "status_update_callback": call_me_back, + "is_restart": False + } + + wf = WorkflowFactory.generate_workflow(**kwargs) + wf.convert_raw_to_fastq() + + # verify job script was properly created + trjob_dir = join(self.output_dir, 'TellReadJob') + self.assertTrue(exists(trjob_dir)) + trjob_script = join(trjob_dir, 'tellread_test.sbatch') + self.assertTrue(exists(trjob_script)) + + def open_job_script(script_path): + with open(script_path, 'r') as f: + obs = f.readlines() + obs = [x.strip() for x in obs] + obs = [re.sub('-directory .*?/qp_klp', + '-directory qp_klp', x) for x in obs] + obs = [re.sub('--output .*?/qp_klp', '--output qp_klp', + x) for x in obs] + obs = [re.sub('--error .*?/qp_klp', '--error qp_klp', + x) for x in obs] + obs = [re.sub('find .*?/qp_klp', 'find qp_klp', + x) for x in obs] + obs = [re.sub('-o .*?/qp_klp', '-o qp_klp', + x) for x in obs] + return obs + + obs = open_job_script(trjob_script) + exp = open_job_script("qp_klp/tests/data/tellread_test.sbatch") + + self.assertEqual(obs, exp)