From a6cce89634be4694a5a5d56e416d8aa2bd397708 Mon Sep 17 00:00:00 2001 From: Sebastian Proost Date: Fri, 21 Jul 2017 10:07:10 +0200 Subject: [PATCH 01/18] Adding in HISAT2 support --- README.md | 17 +++----- config.template.ini | 84 ++++++++++++++++++++++++++++++--------- pipeline/base.py | 6 ++- pipeline/transcriptome.py | 9 +++-- run.py | 39 ++++++++++++------ 5 files changed, 106 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index 4135c52..259deea 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Configure config.ini and data.ini using the guidelines below ## Configuration of LSTrAP After copying the templates, **config.ini** needs to be set up to run on your system. It requires the path to Trimmomatic's jar and the -modules where Bowtie, Tophat ... are installed in. +modules where Bowtie, Tophat ... are installed in (if the [modules](http://modules.sourceforge.net/) environment is used. The location of the transcriptome data, the refrence genome and a few per-species options need to be defined in **data.ini**. @@ -62,7 +62,7 @@ Options to enable InterProScan and/or OrthoFinder or to skip certain steps of th ## Quality report After running LSTrAP a log file (*lstrap.log*) is written, in which samples which failed a quality measure -are reported. Note that no samples are excluded from the final network. In case certain samples need to be excluded +are reported. Note that __no samples are excluded from the final network__. In case certain samples need to be excluded from the final network remove the htseq file for the sample you which to exclude and re-run the pipeline skipping all steps prior to building the network. @@ -94,16 +94,9 @@ for LSTrAP can be generated. ## Adapting LSTrAP to other cluster managers -LSTrAP is designed and tested on a cluster running the Oracle Grid Engine, though with minimal effort it can be adopted to run on PBS and Torque -based systems (and likely others). First, in the configuration file, check the qsub parameters (e.g. jobs that require multiple -CPUs to run *-pe cores 4*), that differ between systems are set up properly (the nodes and cores on Torque and PBS need to be -set using *-l nodes=4:ppn=2* to request 4 nodes with 2 processes per node). - -Furthermore the submission script might differ, these are located in **./cluster/templates.py** . For PBS based systems some -settings need to be included by adding *#PBS ...*. - -We strive to get LSTrAP running on as many systems as possible. Do not hesitate to contact us in case you experience difficulties -running LSTrAP on your system. +LSTrAP is designed and tested on a cluster running the Oracle Grid Engine (default), PBS/Torque is also supported. + +Though due to differences in parameters ## Contact diff --git a/config.template.ini b/config.template.ini index 302d7dc..824fab0 100644 --- a/config.template.ini +++ b/config.template.ini @@ -1,45 +1,44 @@ [TOOLS] -; In case there is no module load system on the system set the module name to None +; Tool Configuration +; +; Some tools require additional files or might require a hard coded path to the script. +; Please make sure these are set up correctly. + ; Trimmomatic Path +; ADJUST THIS trimmomatic_path=/home/sepro/tools/Trimmomatic-0.36/trimmomatic-0.36.jar -; Module names -bowtie_module=biotools/bowtie2-2.2.6 -samtools_module=biotools/samtools-1.3 -sratoolkit_module=biotools/sratoolkit-2.5.7 -tophat_module=biotools/tophat-2.1.0 - -interproscan_module=biotools/interproscan-5.16-55.0 - -blast_module=biotools/ncbi-blast-2.3.0+ -mcl_module=biotools/mcl-14.137 +; COMMANDS to run tools +; +; Here the commands used to start different steps are defined, ${name} are variables that will be set by LSTrAP for +; each job. -python_module=devel/Python-2.7.10 -python3_module=devel/Python-3.5.1 - -; commands to run tools +; Note that in some cases hard coded paths were required, adjust these to match the location of these files on +; your system bowtie_cmd=bowtie2-build ${in} ${out} +; ADJUST PATHS TO ADAPTERS trimmomatic_se_command=java -jar ${jar} SE -threads 1 ${in} ${out} ILLUMINACLIP:/home/sepro/tools/Trimmomatic-0.36/adapters/TruSeq3-SE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36 trimmomatic_pe_command=java -jar ${jar} PE -threads 1 ${ina} ${inb} ${outap} ${outau} ${outbp} ${outbu} ILLUMINACLIP:/home/sepro/tools/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36 tophat_se_cmd=tophat -p 3 -o ${out} ${genome} ${fq} tophat_pe_cmd=tophat -p 3 -o ${out} ${genome} ${forward},${reverse} -htseq_count_cmd=htseq-count -s no -f bam -t ${feature} -i ${field} ${bam} ${gff} > ${out} +htseq_count_cmd=htseq-count -s no -f ${itype} -t ${feature} -i ${field} ${bam} ${gff} > ${out} interproscan_cmd=interproscan.sh -i ${in_dir}/${in_prefix}${SGE_TASK_ID} -o ${out_dir}/${out_prefix}${SGE_TASK_ID} -f tsv -dp -iprlookup -goterms --tempdir /tmp pcc_cmd=python3 ./scripts/pcc.py ${in} ${out} ${mcl_out} mcl_cmd=mcl ${in} --abc -o ${out} -te 4 +; ADJUST THIS mcxdeblast_cmd=perl /apps/biotools/mcl-14.137/bin/mcxdeblast --m9 --line-mode=abc ${blast_in} > ${abc_out} +; ADJUST THIS orthofinder_cmd=python /home/sepro/OrthoFinder-0.4/orthofinder.py -f ${fasta_dir} -t 8 - -; qsub parameters +; qsub parameters (OGE) qsub_bowtie='' qsub_trimmomatic='' @@ -49,4 +48,51 @@ qsub_interproscan='-pe cores 5' qsub_pcc='' qsub_mcl='-pe cores 4' qsub_orthofinder='-pe cores 8' -qsub_mcxdeblast='' \ No newline at end of file +qsub_mcxdeblast='' + +; qsub parameters (PBS/Torque) + +; qsub_bowtie='' +; qsub_trimmomatic='' +; qsub_tophat='-l nodes=1,ppn=4' +; qsub_htseq_count='' +; qsub_interproscan='-l nodes=1,ppn=5' +; qsub_pcc='' +; qsub_mcl='-l nodes=1,ppn=4' +; qsub_orthofinder='-l nodes=1,ppn=8' +; qsub_mcxdeblast='' + +; qsub parameters (PBS/Torque with walltimes) + +; qsub_bowtie='-l walltime=00:10:00' +; qsub_trimmomatic='-l walltime=00:10:00' +; qsub_tophat='-l nodes=1,ppn=4 -l walltime=00:10:00' +; qsub_htseq_count=' -l walltime=00:02:00' +; qsub_interproscan='-l nodes=1,ppn=5 -l walltime=00:10:00' +; qsub_pcc=' -l walltime=00:10:00' +; qsub_mcl='-l nodes=1,ppn=4 -l walltime=00:10:00' +; qsub_orthofinder='-l nodes=1,ppn=8 -l walltime=01:00:00' +; qsub_mcxdeblast='-l walltime=00:10:00' + +; Module names +; These need to be configured if the required tools are installed in the environment modules. +; You can find the modules installed on your system using +; +; module avail +; +; In case there is no module load system on the system set the module name to None + +bowtie_module=biotools/bowtie2-2.2.6 +samtools_module=biotools/samtools-1.3 +sratoolkit_module=biotools/sratoolkit-2.5.7 +tophat_module=biotools/tophat-2.1.0 + +hisat2_module= + +interproscan_module=biotools/interproscan-5.16-55.0 + +blast_module=biotools/ncbi-blast-2.3.0+ +mcl_module=biotools/mcl-14.137 + +python_module=devel/Python-2.7.10 +python3_module=devel/Python-3.5.1 \ No newline at end of file diff --git a/pipeline/base.py b/pipeline/base.py index 2da5288..89c2926 100644 --- a/pipeline/base.py +++ b/pipeline/base.py @@ -7,11 +7,11 @@ class PipelineBase: - def __init__(self, config, data, enable_log=False): + def __init__(self, config, data, enable_log=False, use_hisat2=False): """ Constructor run with path to ini file with settings - :param config: path to setttings ini file + :param config: path to settings ini file """ self.cp = configparser.ConfigParser() self.cp.read(config) @@ -24,6 +24,7 @@ def __init__(self, config, data, enable_log=False): self.blast_module = None if self.cp['TOOLS']['blast_module'] is 'None' else self.cp['TOOLS']['blast_module'] self.bowtie_module = None if self.cp['TOOLS']['bowtie_module'] is 'None' else self.cp['TOOLS']['bowtie_module'] self.tophat_module = '' if self.cp['TOOLS']['tophat_module'] is 'None' else self.cp['TOOLS']['tophat_module'] + self.hisat2_module = '' if self.cp['TOOLS']['hisat2_module'] is 'None' else self.cp['TOOLS']['hisat2_module'] self.samtools_module = None if self.cp['TOOLS']['samtools_module'] is 'None' else self.cp['TOOLS']['samtools_module'] self.python_module = None if self.cp['TOOLS']['python_module'] is 'None' else self.cp['TOOLS']['python_module'] self.python3_module = None if self.cp['TOOLS']['python3_module'] is 'None' else self.cp['TOOLS']['python3_module'] @@ -57,6 +58,7 @@ def __init__(self, config, data, enable_log=False): self.email = None if self.dp['GLOBAL']['email'] == 'None' else self.cp['DEFAULT']['email'] self.enable_log = enable_log + self.use_hisat2 = use_hisat2 if self.enable_log: self.log = open('lstrap.log', 'w') diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index a1dd12f..5a2aa15 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -248,7 +248,9 @@ def run_htseq_count(self, keep_previous=False): htseq_out = os.path.join(htseq_output, d + '.htseq') print(d, bam_file, htseq_out) - command = ["qsub"] + self.qsub_htseq_count + ["-v", "feature=%s,field=%s,bam=%s,gff=%s,out=%s" % (gff_feature, gff_id, bam_file, gff_file, htseq_out), filename] + command = ["qsub"] + self.qsub_htseq_count + ["-v", "itype=bam,feature=%s,field=%s,bam=%s,gff=%s,out=%s" + % (gff_feature, gff_id, bam_file, gff_file, htseq_out), + filename] subprocess.call(command) # wait for all jobs to complete @@ -426,9 +428,8 @@ def cluster_pcc(self): "cluster_pcc_%d.sh") for g in self.genomes: - # TODO naming convention here is confusing, improve this ! - mcl_out = self.dp[g]['pcc_mcl_output'] - mcl_clusters = self.dp[g]['mcl_cluster_output'] + mcl_out = self.dp[g]['pcc_mcl_output'] # This is the PCC table in mcl format + mcl_clusters = self.dp[g]['mcl_cluster_output'] # Desired path for the clusters command = ["qsub"] + self.qsub_mcl + ["-v", "in=%s,out=%s" % (mcl_out, mcl_clusters), filename] subprocess.call(command) diff --git a/run.py b/run.py index e73a4ec..a5a5407 100755 --- a/run.py +++ b/run.py @@ -16,22 +16,33 @@ def run_pipeline(args): """ if check_sanity_config(args.config) and check_sanity_data(args.data): if args.transcriptomics: - tp = TranscriptomePipeline(args.config, args.data, enable_log=args.enable_log) - - if args.bowtie_build: - tp.prepare_genome() + tp = TranscriptomePipeline(args.config, + args.data, + enable_log=args.enable_log, + use_hisat2=args.use_hisat2) + + if args.indexing: + if args.use_hisat2: + print("alignment using hisat2 not implemented yet!", file=sys.argv) + quit() + else: + tp.prepare_genome() else: - print("Skipping Bowtie-build", file=sys.stderr) + print("Skipping Indexing", file=sys.stderr) if args.trim_fastq: tp.trim_fastq() else: print("Skipping Trimmomatic", file=sys.stderr) - if args.tophat: - tp.run_tophat(keep_previous=args.keep_intermediate) + if args.alignment: + if args.use_hisat2: + print("alignment using hisat2 not implemented yet!", file=sys.argv) + quit() + else: + tp.run_tophat(keep_previous=args.keep_intermediate) else: - print("Skipping Tophat", file=sys.stderr) + print("Skipping Alignment", file=sys.stderr) if args.htseq: tp.run_htseq_count(keep_previous=args.keep_intermediate) @@ -95,9 +106,11 @@ def run_pipeline(args): parser.add_argument('--enable-interpro', dest='interpro', action='store_true', help='Runs InterProScan to detect protein domains and provide functional annotation') parser.add_argument('--enable-orthology', dest='orthology', action='store_true', help='Runs OrhtoFinder and MCL to detect orthogroups, gene families and orthologs') - parser.add_argument('--skip-bowtie-build', dest='bowtie_build', action='store_false', help='add --skip-bowtie-build to skip the step that indexes the genomes using bowtie-build') + parser.add_argument('--use-hisat2', dest='use_hisat2', action='store_true', help='Use HISAT2 to build the index and align reads instead of BowTie2 and TopHat2') + + parser.add_argument('--skip-indexing', dest='indexing', action='store_false', help='add --skip-indexing to skip building an index (for read alignment) on the genome (BowTie2 or HISAT2)') parser.add_argument('--skip-trim-fastq', dest='trim_fastq', action='store_false', help='add --skip-trim-fastq to skip trimming fastq files using trimmomatic') - parser.add_argument('--skip-tophat', dest='tophat', action='store_false', help='add --skip-tophat to skip read mapping with tophat') + parser.add_argument('--skip-alignment', dest='alignment', action='store_false', help='add --skip-alignment to skip the read alignment step (TopHat 2 or HISAT2)') parser.add_argument('--skip-htseq', dest='htseq', action='store_false', help='add --skip-htseq to skip counting reads per gene with htseq-count') parser.add_argument('--skip-qc', dest='qc', action='store_false', help='add --skip-qc to skip quality control of tophat and htseq output') parser.add_argument('--skip-exp-matrix', dest='exp_matrix', action='store_false', help='add --skip-exp-matrix to skip converting htseq files to an expression matrix') @@ -116,10 +129,12 @@ def run_pipeline(args): parser.set_defaults(interpro=False) parser.set_defaults(orthology=False) + parser.set_defaults(use_hisat2=False) + # Flags for individual tools for transcriptomics - parser.set_defaults(bowtie_build=True) + parser.set_defaults(indexing=True) parser.set_defaults(trim_fastq=True) - parser.set_defaults(tophat=True) + parser.set_defaults(alignment=True) parser.set_defaults(htseq=True) parser.set_defaults(qc=True) parser.set_defaults(exp_matrix=True) From 79de4d22204559da697e5d576eb6d63e59dd2b72 Mon Sep 17 00:00:00 2001 From: Sebastian Proost Date: Fri, 21 Jul 2017 11:12:53 +0200 Subject: [PATCH 02/18] gruntwork to support HISAT2 --- .gitignore | 1 + config.template.ini | 7 ++++--- data.template.ini | 2 +- pipeline/base.py | 3 ++- pipeline/check/sanity.py | 4 ++-- pipeline/transcriptome.py | 18 ++++++++++++------ run.py | 6 +----- 7 files changed, 23 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 563f048..73a6536 100644 --- a/.gitignore +++ b/.gitignore @@ -58,5 +58,6 @@ target/ .idea/ .data/ +tmp/ config.ini data.ini \ No newline at end of file diff --git a/config.template.ini b/config.template.ini index 824fab0..ead1a8d 100644 --- a/config.template.ini +++ b/config.template.ini @@ -17,6 +17,7 @@ trimmomatic_path=/home/sepro/tools/Trimmomatic-0.36/trimmomatic-0.36.jar ; Note that in some cases hard coded paths were required, adjust these to match the location of these files on ; your system bowtie_cmd=bowtie2-build ${in} ${out} +hisat2_build_cmd=hisat2-build ${in} ${out} ; ADJUST PATHS TO ADAPTERS trimmomatic_se_command=java -jar ${jar} SE -threads 1 ${in} ${out} ILLUMINACLIP:/home/sepro/tools/Trimmomatic-0.36/adapters/TruSeq3-SE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36 @@ -40,7 +41,7 @@ orthofinder_cmd=python /home/sepro/OrthoFinder-0.4/orthofinder.py -f ${fasta_dir ; qsub parameters (OGE) -qsub_bowtie='' +qsub_indexing='' qsub_trimmomatic='' qsub_tophat='-pe cores 4' qsub_htseq_count='' @@ -52,7 +53,7 @@ qsub_mcxdeblast='' ; qsub parameters (PBS/Torque) -; qsub_bowtie='' +; qsub_indexing='' ; qsub_trimmomatic='' ; qsub_tophat='-l nodes=1,ppn=4' ; qsub_htseq_count='' @@ -64,7 +65,7 @@ qsub_mcxdeblast='' ; qsub parameters (PBS/Torque with walltimes) -; qsub_bowtie='-l walltime=00:10:00' +; qsub_indexing='-l walltime=00:10:00' ; qsub_trimmomatic='-l walltime=00:10:00' ; qsub_tophat='-l nodes=1,ppn=4 -l walltime=00:10:00' ; qsub_htseq_count=' -l walltime=00:02:00' diff --git a/data.template.ini b/data.template.ini index 0b27fc6..e053a3d 100644 --- a/data.template.ini +++ b/data.template.ini @@ -23,7 +23,7 @@ fastq_dir=./data/zma/fastq tophat_cutoff=65 htseq_cutoff=40 -bowtie_output=./output/bowtie-build/zma +indexing_output=./output/bowtie-build/zma trimmomatic_output=./output/trimmed_fastq/zma tophat_output=./output/tophat/zma samtools_output=./output/samtools/zma diff --git a/pipeline/base.py b/pipeline/base.py index 89c2926..5850781 100644 --- a/pipeline/base.py +++ b/pipeline/base.py @@ -32,6 +32,7 @@ def __init__(self, config, data, enable_log=False, use_hisat2=False): self.mcl_module = None if self.cp['TOOLS']['mcl_module'] is 'None' else self.cp['TOOLS']['mcl_module'] self.bowtie_build_cmd = self.cp['TOOLS']['bowtie_cmd'] + self.hisat2_build_cmd = self.cp['TOOLS']['hisat2_build_cmd'] self.trimmomatic_se_cmd = self.cp['TOOLS']['trimmomatic_se_command'] self.trimmomatic_pe_cmd = self.cp['TOOLS']['trimmomatic_pe_command'] self.tophat_se_cmd = self.cp['TOOLS']['tophat_se_cmd'] @@ -44,7 +45,7 @@ def __init__(self, config, data, enable_log=False, use_hisat2=False): self.mcl_cmd = self.cp['TOOLS']['mcl_cmd'] self.mcxdeblast_cmd = self.cp['TOOLS']['mcxdeblast_cmd'] - self.qsub_bowtie = shlex.split(self.cp['TOOLS']['qsub_bowtie'].strip('\'')) + self.qsub_indexing = shlex.split(self.cp['TOOLS']['qsub_indexing'].strip('\'')) self.qsub_trimmomatic = shlex.split(self.cp['TOOLS']['qsub_trimmomatic'].strip('\'')) self.qsub_tophat = shlex.split(self.cp['TOOLS']['qsub_tophat'].strip('\'')) self.qsub_htseq_count = shlex.split(self.cp['TOOLS']['qsub_htseq_count'].strip('\'')) diff --git a/pipeline/check/sanity.py b/pipeline/check/sanity.py index 14f7e1f..4267dcd 100644 --- a/pipeline/check/sanity.py +++ b/pipeline/check/sanity.py @@ -21,7 +21,7 @@ def check_sanity_data(filename): genomes = cp['GLOBAL']['genomes'].split(';') # For each genome test that section required_keys = ['cds_fasta', 'protein_fasta', 'genome_fasta', 'gff_file', 'gff_feature', 'gff_id', - 'fastq_dir', 'bowtie_output', 'trimmomatic_output', 'tophat_output', + 'fastq_dir', 'indexing_output', 'trimmomatic_output', 'tophat_output', 'htseq_output', 'exp_matrix_output', 'exp_matrix_tpm_output', 'exp_matrix_rpkm_output', 'interpro_output', 'pcc_output', 'pcc_mcl_output', 'mcl_cluster_output'] required_paths = ['cds_fasta', 'protein_fasta', 'genome_fasta', 'gff_file', 'fastq_dir'] @@ -69,7 +69,7 @@ def check_sanity_config(filename): 'blast_module', 'mcl_module', 'python_module', 'python3_module', 'bowtie_cmd', 'trimmomatic_se_command', 'trimmomatic_pe_command', 'tophat_se_cmd', 'tophat_pe_cmd', 'htseq_count_cmd', 'interproscan_cmd', 'pcc_cmd', 'mcl_cmd', 'orthofinder_cmd', 'mcxdeblast_cmd', - 'trimmomatic_path', 'qsub_bowtie', 'qsub_trimmomatic', 'qsub_tophat', 'qsub_htseq_count', + 'trimmomatic_path', 'qsub_indexing', 'qsub_trimmomatic', 'qsub_tophat', 'qsub_htseq_count', 'qsub_interproscan', 'qsub_pcc', 'qsub_mcl', 'qsub_orthofinder', 'qsub_mcxdeblast'] required_paths = ['trimmomatic_path'] diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 5a2aa15..926a447 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -17,19 +17,25 @@ def prepare_genome(self): """ Runs bowtie-build for each genome on the cluster. All settings are obtained from the settings fasta file """ - filename, jobname = self.write_submission_script("bowtie_build_%d", - self.bowtie_module, - self.bowtie_build_cmd, - "bowtie_build_%d.sh") + if self.use_hisat2: + filename, jobname = self.write_submission_script("build_index_%d", + self.hisat2_module, + self.hisat2_build_cmd, + "build_index_%d.sh") + else: + filename, jobname = self.write_submission_script("build_index_%d", + self.bowtie_module, + self.bowtie_build_cmd, + "build_index_%d.sh") for g in self.genomes: con_file = self.dp[g]['genome_fasta'] - output = self.dp[g]['bowtie_output'] + output = self.dp[g]['indexing_output'] os.makedirs(os.path.dirname(output), exist_ok=True) shutil.copy(con_file, output + '.fa') - command = ["qsub"] + self.qsub_bowtie + ["-v", "in=" + con_file + ",out=" + output, filename] + command = ["qsub"] + self.qsub_indexing + ["-v", "in=" + con_file + ",out=" + output, filename] subprocess.call(command) diff --git a/run.py b/run.py index a5a5407..2d229dd 100755 --- a/run.py +++ b/run.py @@ -22,11 +22,7 @@ def run_pipeline(args): use_hisat2=args.use_hisat2) if args.indexing: - if args.use_hisat2: - print("alignment using hisat2 not implemented yet!", file=sys.argv) - quit() - else: - tp.prepare_genome() + tp.prepare_genome() else: print("Skipping Indexing", file=sys.stderr) From b8923d66edb0c336634c0bf17c467a83a95b9a70 Mon Sep 17 00:00:00 2001 From: Sebastian Proost Date: Fri, 21 Jul 2017 12:04:16 +0200 Subject: [PATCH 03/18] more gruntwork to support HISAT2 --- config.template.ini | 3 +++ pipeline/base.py | 10 +++++++-- pipeline/check/sanity.py | 3 ++- pipeline/transcriptome.py | 44 +++++++++++++++++++++++++++++++++++++-- run.py | 6 +----- 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/config.template.ini b/config.template.ini index ead1a8d..955a2ab 100644 --- a/config.template.ini +++ b/config.template.ini @@ -26,6 +26,9 @@ trimmomatic_pe_command=java -jar ${jar} PE -threads 1 ${ina} ${inb} ${outap} ${ tophat_se_cmd=tophat -p 3 -o ${out} ${genome} ${fq} tophat_pe_cmd=tophat -p 3 -o ${out} ${genome} ${forward},${reverse} +hisat2_se_cmd=hisat2 -p 3 -x ${genome} -U ${fq} -S ${out} 2> ${stats} +hisat2_pe_cmd=hisat2 -p 3 -x ${genome} -1 ${forward} -2 ${reverse} -S ${out} 2> ${stats} + htseq_count_cmd=htseq-count -s no -f ${itype} -t ${feature} -i ${field} ${bam} ${gff} > ${out} interproscan_cmd=interproscan.sh -i ${in_dir}/${in_prefix}${SGE_TASK_ID} -o ${out_dir}/${out_prefix}${SGE_TASK_ID} -f tsv -dp -iprlookup -goterms --tempdir /tmp diff --git a/pipeline/base.py b/pipeline/base.py index 5850781..e707d3f 100644 --- a/pipeline/base.py +++ b/pipeline/base.py @@ -33,18 +33,24 @@ def __init__(self, config, data, enable_log=False, use_hisat2=False): self.bowtie_build_cmd = self.cp['TOOLS']['bowtie_cmd'] self.hisat2_build_cmd = self.cp['TOOLS']['hisat2_build_cmd'] + self.trimmomatic_se_cmd = self.cp['TOOLS']['trimmomatic_se_command'] self.trimmomatic_pe_cmd = self.cp['TOOLS']['trimmomatic_pe_command'] + self.tophat_se_cmd = self.cp['TOOLS']['tophat_se_cmd'] self.tophat_pe_cmd = self.cp['TOOLS']['tophat_pe_cmd'] + self.hisat2_se_cmd = self.cp['TOOLS']['hisat2_se_cmd'] + self.hisat2_pe_cmd = self.cp['TOOLS']['hisat2_pe_cmd'] + self.htseq_count_cmd = self.cp['TOOLS']['htseq_count_cmd'] - self.interproscan_cmd = self.cp['TOOLS']['interproscan_cmd'] - self.orthofinder_cmd = self.cp['TOOLS']['orthofinder_cmd'] self.pcc_cmd = self.cp['TOOLS']['pcc_cmd'] self.mcl_cmd = self.cp['TOOLS']['mcl_cmd'] self.mcxdeblast_cmd = self.cp['TOOLS']['mcxdeblast_cmd'] + self.interproscan_cmd = self.cp['TOOLS']['interproscan_cmd'] + self.orthofinder_cmd = self.cp['TOOLS']['orthofinder_cmd'] + self.qsub_indexing = shlex.split(self.cp['TOOLS']['qsub_indexing'].strip('\'')) self.qsub_trimmomatic = shlex.split(self.cp['TOOLS']['qsub_trimmomatic'].strip('\'')) self.qsub_tophat = shlex.split(self.cp['TOOLS']['qsub_tophat'].strip('\'')) diff --git a/pipeline/check/sanity.py b/pipeline/check/sanity.py index 4267dcd..686acdc 100644 --- a/pipeline/check/sanity.py +++ b/pipeline/check/sanity.py @@ -70,7 +70,8 @@ def check_sanity_config(filename): 'trimmomatic_pe_command', 'tophat_se_cmd', 'tophat_pe_cmd', 'htseq_count_cmd', 'interproscan_cmd', 'pcc_cmd', 'mcl_cmd', 'orthofinder_cmd', 'mcxdeblast_cmd', 'trimmomatic_path', 'qsub_indexing', 'qsub_trimmomatic', 'qsub_tophat', 'qsub_htseq_count', - 'qsub_interproscan', 'qsub_pcc', 'qsub_mcl', 'qsub_orthofinder', 'qsub_mcxdeblast'] + 'qsub_interproscan', 'qsub_pcc', 'qsub_mcl', 'qsub_orthofinder', 'qsub_mcxdeblast', + 'hisat2_se_cmd', 'hisat2_pe_cmd'] required_paths = ['trimmomatic_path'] if 'TOOLS' in cp: diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 926a447..0134284 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -141,7 +141,7 @@ def trim_fastq(self, overwrite=False): print("Done\n\n") - def run_tophat(self, overwrite=False, keep_previous=False): + def __run_tophat(self, overwrite=False, keep_previous=False): """ Maps the reads from the trimmed fastq files to the bowtie-indexed genome @@ -162,7 +162,7 @@ def run_tophat(self, overwrite=False, keep_previous=False): for g in self.genomes: tophat_output = self.dp[g]['tophat_output'] - bowtie_output = self.dp[g]['bowtie_output'] + bowtie_output = self.dp[g]['indexing_output'] trimmed_fastq_dir = self.dp[g]['trimmomatic_output'] os.makedirs(tophat_output, exist_ok=True) @@ -221,6 +221,46 @@ def run_tophat(self, overwrite=False, keep_previous=False): # remove OUT_ files PipelineBase.clean_out_files(jobname) + def __run_hisat2(self, overwrite=False, keep_previous=False): + """ + Maps the reads from the trimmed fastq files to the bowtie-indexed genome + + :param overwrite: when true the pipeline will start tophat even if the output exists + :param keep_previous: when true trimmed fastq files will not be removed after tophat completes + """ + filename_se, jobname = self.write_submission_script("hisat2_%d", + self.hisat2_module, + self.hisat2_se_cmd, + "hisat2_se_%d.sh") + + filename_pe, jobname = self.write_submission_script("hisat2_%d", + self.hisat2_module, + self.hisat2_pe_cmd, + "hisat2_pe_%d.sh") + + print('Mapping reads with HISAT2...') + + # remove the submission script + os.remove(filename_se) + os.remove(filename_pe) + + # remove OUT_ files + PipelineBase.clean_out_files(jobname) + + def run_alignment(self, overwrite=False, keep_previous=False): + """ + + Determine which aligner to use and align reads to indexed genome + + :param overwrite: will overwrite existing data when True, otherwise existing runs will be skipped + :param keep_previous: will keep trimmed reads upon completion when true, + otherwise the trimmed reads will be deleted + """ + if self.use_hisat2: + self.__run_hisat2(overwrite=overwrite, keep_previous=keep_previous) + else: + self.__run_tophat(overwrite=overwrite, keep_previous=keep_previous) + print("Done\n\n") def run_htseq_count(self, keep_previous=False): diff --git a/run.py b/run.py index 2d229dd..474e040 100755 --- a/run.py +++ b/run.py @@ -32,11 +32,7 @@ def run_pipeline(args): print("Skipping Trimmomatic", file=sys.stderr) if args.alignment: - if args.use_hisat2: - print("alignment using hisat2 not implemented yet!", file=sys.argv) - quit() - else: - tp.run_tophat(keep_previous=args.keep_intermediate) + tp.run_alignment(keep_previous=args.keep_intermediate) else: print("Skipping Alignment", file=sys.stderr) From 21987f04ffbd544372b6547e3ac9ce62d6bb95e8 Mon Sep 17 00:00:00 2001 From: Sebastian Proost Date: Fri, 21 Jul 2017 13:24:27 +0200 Subject: [PATCH 04/18] code to run HISAT2 done --- data.template.ini | 3 +- pipeline/check/sanity.py | 2 +- pipeline/transcriptome.py | 64 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 6 deletions(-) diff --git a/data.template.ini b/data.template.ini index e053a3d..e7e7597 100644 --- a/data.template.ini +++ b/data.template.ini @@ -25,8 +25,7 @@ htseq_cutoff=40 indexing_output=./output/bowtie-build/zma trimmomatic_output=./output/trimmed_fastq/zma -tophat_output=./output/tophat/zma -samtools_output=./output/samtools/zma +alignment_output=./tmp/tophat/zma htseq_output=./output/htseq/zma exp_matrix_output=./output/zma/exp_matrix.txt diff --git a/pipeline/check/sanity.py b/pipeline/check/sanity.py index 686acdc..83f1871 100644 --- a/pipeline/check/sanity.py +++ b/pipeline/check/sanity.py @@ -21,7 +21,7 @@ def check_sanity_data(filename): genomes = cp['GLOBAL']['genomes'].split(';') # For each genome test that section required_keys = ['cds_fasta', 'protein_fasta', 'genome_fasta', 'gff_file', 'gff_feature', 'gff_id', - 'fastq_dir', 'indexing_output', 'trimmomatic_output', 'tophat_output', + 'fastq_dir', 'indexing_output', 'trimmomatic_output', 'alignment_output', 'htseq_output', 'exp_matrix_output', 'exp_matrix_tpm_output', 'exp_matrix_rpkm_output', 'interpro_output', 'pcc_output', 'pcc_mcl_output', 'mcl_cluster_output'] required_paths = ['cds_fasta', 'protein_fasta', 'genome_fasta', 'gff_file', 'fastq_dir'] diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 0134284..92dbf80 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -161,7 +161,7 @@ def __run_tophat(self, overwrite=False, keep_previous=False): print('Mapping reads with tophat...') for g in self.genomes: - tophat_output = self.dp[g]['tophat_output'] + tophat_output = self.dp[g]['alignment_output'] bowtie_output = self.dp[g]['indexing_output'] trimmed_fastq_dir = self.dp[g]['trimmomatic_output'] os.makedirs(tophat_output, exist_ok=True) @@ -240,6 +240,64 @@ def __run_hisat2(self, overwrite=False, keep_previous=False): print('Mapping reads with HISAT2...') + for g in self.genomes: + alignment_output = self.dp[g]['alignment_output'] + indexing_output = self.dp[g]['indexing_output'] + trimmed_fastq_dir = self.dp[g]['trimmomatic_output'] + os.makedirs(alignment_output, exist_ok=True) + + pe_files = [] + se_files = [] + + for file in os.listdir(trimmed_fastq_dir): + if file.endswith('.paired.fq.gz') or file.endswith('.paired.fastq.gz'): + pe_files.append(file) + elif not (file.endswith('.unpaired.fq.gz') or file.endswith('.unpaired.fastq.gz')): + se_files.append(file) + + # sort required to make sure _1 files are before _2 + pe_files.sort() + se_files.sort() + + for pe_file in pe_files: + if '_1.trimmed.paired.' in pe_file: + pair_file = pe_file.replace('_1.trimmed.paired.', '_2.trimmed.paired.') + + output_sam = pe_file.replace('_1.trimmed.paired.fq.gz', '').replace('_1.trimmed.paired.fastq.gz', '') + '.sam' + output_stats = pe_file.replace('_1.trimmed.paired.fq.gz', '').replace('_1.trimmed.paired.fastq.gz', '') + '.stats' + output_sam = os.path.join(alignment_output, output_sam) + output_stats = os.path.join(alignment_output, output_stats) + forward = os.path.join(trimmed_fastq_dir, pe_file) + reverse = os.path.join(trimmed_fastq_dir, pair_file) + if overwrite or not os.path.exists(output_sam): + print('Submitting pair %s, %s' % (pe_file, pair_file)) + command = ["qsub"] + self.qsub_tophat + \ + ["-v", "out=%s,genome=%s,forward=%s,reverse=%s,stats=%s" % + (output_sam, indexing_output, forward, reverse, output_stats), filename_pe] + subprocess.call(command) + else: + print('Output exists, skipping', pe_file) + + for se_file in se_files: + output_sam = se_file.replace('.trimmed.fq.gz', '').replace('.trimmed.fastq.gz', '') + '.sam' + output_sam = os.path.join(alignment_output, output_sam) + output_stats = se_file.replace('.trimmed.fq.gz', '').replace('.trimmed.fastq.gz', '') + '.stats' + output_stats = os.path.join(alignment_output, output_stats) + + if overwrite or not os.path.exists(output_sam): + print('Submitting single %s' % se_file) + command = ["qsub"] + self.qsub_tophat + ["-v", + "out=%s,genome=%s,fq=%s,stats=%s" % + (output_sam, indexing_output, + os.path.join(trimmed_fastq_dir, se_file), output_stats), + filename_se] + subprocess.call(command) + else: + print('Output exists, skipping', se_file) + + # wait for all jobs to complete + wait_for_job(jobname, sleep_time=1) + # remove the submission script os.remove(filename_se) os.remove(filename_pe) @@ -275,7 +333,7 @@ def run_htseq_count(self, keep_previous=False): "htseq_count_%d.sh") for g in self.genomes: - tophat_output = self.dp[g]['tophat_output'] + tophat_output = self.dp[g]['alignment_output'] htseq_output = self.dp[g]['htseq_output'] os.makedirs(htseq_output, exist_ok=True) @@ -306,7 +364,7 @@ def run_htseq_count(self, keep_previous=False): # NOTE: only the large bam file is removed (for now) if not keep_previous: for g in self.genomes: - tophat_output = self.dp[g]['tophat_output'] + tophat_output = self.dp[g]['alignment_output'] dirs = [o for o in os.listdir(tophat_output) if os.path.isdir(os.path.join(tophat_output, o))] for d in dirs: bam_file = os.path.join(tophat_output, d, 'accepted_hits.bam') From 793eb74a84b78b1bc873357bf0e395ecb531059d Mon Sep 17 00:00:00 2001 From: Sebastian Proost Date: Fri, 21 Jul 2017 15:33:32 +0200 Subject: [PATCH 05/18] code connecting htseq-count to hisat2 done --- pipeline/transcriptome.py | 61 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 92dbf80..0525571 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -321,7 +321,7 @@ def run_alignment(self, overwrite=False, keep_previous=False): print("Done\n\n") - def run_htseq_count(self, keep_previous=False): + def __run_htseq_count_tophat(self, keep_previous=False): """ Based on the gff file and sam file counts the number of reads that map to a given gene @@ -377,6 +377,65 @@ def run_htseq_count(self, keep_previous=False): # remove OUT_ files PipelineBase.clean_out_files(jobname) + def __run_htseq_count_hisat2(self, keep_previous=False): + filename, jobname = self.write_submission_script("htseq_count_%d", + (self.samtools_module + '\t' + self.python_module), + self.htseq_count_cmd, + "htseq_count_%d.sh") + for g in self.genomes: + alignment_output = self.dp[g]['alignment_output'] + htseq_output = self.dp[g]['htseq_output'] + os.makedirs(htseq_output, exist_ok=True) + + gff_file = self.dp[g]['gff_file'] + gff_feature = self.dp[g]['gff_feature'] + gff_id = self.dp[g]['gff_id'] + + sam_files = [o for o in os.listdir(alignment_output) if os.path.isfile(os.path.join(alignment_output, o)) and + o.endswith('.sam')] + + for sam_file in sam_files: + htseq_out = os.path.join(htseq_output, sam_file.replace('.sam', '.htseq')) + print(sam_file, htseq_out) + + command = ["qsub"] + self.qsub_htseq_count + ["-v", "itype=sam,feature=%s,field=%s,bam=%s,gff=%s,out=%s" + % (gff_feature, gff_id, + os.path.join(alignment_output, sam_file), + gff_file, htseq_out), + filename] + subprocess.call(command) + + # wait for all jobs to complete + wait_for_job(jobname, sleep_time=1) + + if not keep_previous: + for g in self.genomes: + alignment_output = self.dp[g]['alignment_output'] + sam_files = [os.path.isfile(os.path.join(alignment_output, o)) for o in os.listdir(alignment_output) if + os.path.isfile(os.path.join(alignment_output, o)) and + o.endswith('.sam')] + for sam_file in sam_files: + if os.path.exists(sam_file): + os.remove(sam_file) + + # remove the submission script + os.remove(filename) + + # remove OUT_ files + PipelineBase.clean_out_files(jobname) + + def run_htseq_count(self, keep_previous=False): + """ + Depending on which alinger was used, run htseq-counts to determine expression levels. + + :param keep_previous: when true sam files output will not be removed after htseq-count completes + """ + + if self.use_hisat2: + self.__run_htseq_count_hisat2(keep_previous=keep_previous) + else: + self.__run_htseq_count_tophat(keep_previous=keep_previous) + print("Done\n\n") def check_quality(self): From fa02ac925f18de639139bf9175695946a8e705be Mon Sep 17 00:00:00 2001 From: Sebastian Proost Date: Fri, 21 Jul 2017 17:06:22 +0200 Subject: [PATCH 06/18] updated quality control --- pipeline/check/quality.py | 19 ++++++++++++++++- pipeline/transcriptome.py | 44 +++++++++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index 3f6eff8..ba0bf53 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -25,12 +25,29 @@ def check_tophat(filename, cutoff=0, log=None): return True else: if log is not None: - print('WARNING:', filename, 'didn\'t pass TopHat Quality check!', value, 'reads mapped. Cutoff,', + print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', cutoff, file=log) return False +# TODO implement +def check_hisat2(filename, cutoff=0, log=None): + """ + Checks the alignment summary of TopHat's output, if it passes it returns true, else false + Optionally information can be written to a log file + + :param filename: align_summary.txt to check + :param cutoff: If the percentage of mapped reads is below this the sample won't pass (default= 0, no check) + :param log: filehandle to write log to, set to None for no log + :return: True if the sample passed, false otherwise + """ + + print("NOT IMPLEMENTED !!") + + return False + + def check_htseq(filename, cutoff=0, log=None): """ Checks the mapping statistics in htseq files how many reads map into coding sequences. If the percentage is high diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 0525571..6a17c0a 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -6,7 +6,7 @@ from cluster import wait_for_job from utils.matrix import read_matrix, write_matrix, normalize_matrix_counts, normalize_matrix_length from .base import PipelineBase -from .check.quality import check_tophat, check_htseq +from .check.quality import check_tophat, check_hisat2, check_htseq class TranscriptomePipeline(PipelineBase): @@ -445,26 +445,38 @@ def check_quality(self): """ print("Checking quality of samples based on TopHat and HTSEQ-Count mapping statistics") for g in self.genomes: - tophat_output = self.dp[g]['tophat_output'] + alignment_output = self.dp[g]['alignment_output'] htseq_output = self.dp[g]['htseq_output'] - dirs = [o for o in os.listdir(tophat_output) if os.path.isdir(os.path.join(tophat_output, o))] - summary_files = [] - for d in dirs: - summary_file = os.path.join(tophat_output, d, 'align_summary.txt') - if os.path.exists(summary_file): - summary_files.append((d, summary_file)) - - htseq_files = [os.path.join(htseq_output, f) for f in os.listdir(htseq_output) if f.endswith('.htseq')] + if self.use_hisat2: + stats_files = [os.path.isfile(os.path.join(alignment_output, o)) for o in os.listdir(alignment_output) if + os.path.isfile(os.path.join(alignment_output, o)) and + o.endswith('.stats')] + + for stats_file in stats_files: + cutoff = int(self.dp[g]['tophat_cutoff']) if 'tophat_cutoff' in self.dp[g] else 0 + passed = check_hisat2(stats_file, cutoff=cutoff, log=self.log) + if not passed: + print('WARNING: sample with insufficient quality (HISAT2) detected:', stats_file, file=sys.stderr) + print('WARNING: check the log for additional information', file=sys.stderr) + else: + dirs = [o for o in os.listdir(alignment_output) if os.path.isdir(os.path.join(alignment_output, o))] + summary_files = [] + for d in dirs: + summary_file = os.path.join(alignment_output, d, 'align_summary.txt') + if os.path.exists(summary_file): + summary_files.append((d, summary_file)) - for (d, s) in summary_files: - cutoff = int(self.dp[g]['tophat_cutoff']) if 'tophat_cutoff' in self.dp[g] else 0 - passed = check_tophat(s, cutoff=cutoff, log=self.log) + for (d, s) in summary_files: + cutoff = int(self.dp[g]['tophat_cutoff']) if 'tophat_cutoff' in self.dp[g] else 0 + passed = check_tophat(s, cutoff=cutoff, log=self.log) - if not passed: - print('WARNING: sample with insufficient quality (TopHat) detected:', d, file=sys.stderr) - print('WARNING: check the log for additional information', file=sys.stderr) + if not passed: + print('WARNING: sample with insufficient quality (TopHat) detected:', d, file=sys.stderr) + print('WARNING: check the log for additional information', file=sys.stderr) + # Check HTSeq-Counts + htseq_files = [os.path.join(htseq_output, f) for f in os.listdir(htseq_output) if f.endswith('.htseq')] for h in htseq_files: cutoff = int(self.dp[g]['htseq_cutoff']) if 'htseq_cutoff' in self.dp[g] else 0 passed = check_htseq(h, cutoff=cutoff, log=self.log) From 72a2baf60db797b2ca61702d414a0e3f32538d46 Mon Sep 17 00:00:00 2001 From: Sebastian Proost Date: Fri, 21 Jul 2017 17:13:06 +0200 Subject: [PATCH 07/18] last method updated, still needs to be tested --- pipeline/check/quality.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index ba0bf53..98845ec 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -25,13 +25,12 @@ def check_tophat(filename, cutoff=0, log=None): return True else: if log is not None: - print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', + print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', cutoff, file=log) return False -# TODO implement def check_hisat2(filename, cutoff=0, log=None): """ Checks the alignment summary of TopHat's output, if it passes it returns true, else false @@ -43,7 +42,21 @@ def check_hisat2(filename, cutoff=0, log=None): :return: True if the sample passed, false otherwise """ - print("NOT IMPLEMENTED !!") + # 93.77% overall alignment rate + re_mapped = re.compile('(.*)% overall alignment rate') + + with open(filename, 'r') as f: + lines = '\t'.join(f.readlines()) + hits = re_mapped.search(lines[-1]) + if hits: + value = float(hits.group(1)) + if value >= cutoff: + return True + else: + if log is not None: + print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', + cutoff, file=log) + return False From eea9e28c5598262fc78962b20084aec9ebb7f5b6 Mon Sep 17 00:00:00 2001 From: sepro Date: Mon, 24 Jul 2017 15:54:44 +0200 Subject: [PATCH 08/18] new image for workflow (added HISAT2) --- docs/images/LSTrAP_workflow.png | Bin 77732 -> 113770 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/LSTrAP_workflow.png b/docs/images/LSTrAP_workflow.png index 38d38c1ecf436cdd683ff190137d0fa5822eb622..8fde6e7b7c07633e008e79e1f4249aa44b18ba00 100644 GIT binary patch literal 113770 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 FkuS-qz^>}*qBS1V$sWr<~2E=!Hj>O#ZX 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 literal 77732 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�T0p7VD zsPyHa0+LWXjQBubLKvFpiI0>KWDNzR6_OXhbNcM0M)n?tkU?b_2;REe1ehYd=YLr% zvLRAn!>tsQ>XK*Q(YoU3e;+I;(c(*Pu%M-Zi()vBhw?Y_sVV*fW*O(1QBi6g`NA0S z`PRSoDsY@L8-`f$XM1efEWO~*G%RFhzziqA#K?upvb+HJDJ3wuBPU>T-(dQGOs;O4 z^Z$N7u27i0j%b9rkVuq1sH&&~4KEL_qT9jV4o&9RaCkiiy8#(pHyLND(odv*2N#?s zRI$}F0;cgnQZuD(&R=C{@}9Ynp^S0HdD{FGu_tX-%7B2S01|}P0+9Y1iB5*Gq~C?MsE#hL;h*-L zl(-&pootlHZjKyKADAsp8t+aCFNr3=()&|CAx=?J!Dz%gwZscUCF`UQD^f&`F0K2) zPd4}p-4EgkgbsdVsUERjzeVoVZQ|>w@{H`#I?pA;_boa@B{d%(T~9+0_V3@=XD?@ufAvt16b+UiT{n^ytoPwjFJbytKjWNkMytq%>_U^dCY3Bx^WD#oi`C$kLj#bw~ zqKIZn%^Z65kQPiT&X-(ogdk)}YMqHd1|z<#Gx3-^_WpX#qpQ>#X9g?Dia`kOORYH< zDjUK_94DfA=;4SXo(Wg?3q|G=K@O8Yf+IKN>H>?$JS1c9Hv$!AZ9#F$-JD?mz`B(% zv#nVN(b>iMssyLjWGWFig4=ZoUHJ%jf$1qtjOBg+(Jy7pyd_AHBnKy=HA*gbM^zk!Z0oY;H%wk_R6GR}x*S?x(uT3s-O&k|YPZ3(F}aX^8Gr z4qpFU)tAgiXM%U!>l|{O|d_+PBXhIr7_I^6Sq;vR9O7AFzpPI&II?tTle&tYTVddk*LIn zIkCeBrJBS0(XQR69WR8W?W$!Ee+KWU%?rCxzk;4t<3bC}9p#JoDAV&C1_ zPMyt()jYITt~n9w%W}Brd}+x(5Un_U>NxRO*4@Zj#uBmpVx!%eUexWBIJpwb3M#%n zy~H*pD13Q*FK03XA!@tQFRp@7vTO>XYx=+w#eiPyj8@Zs4nOg*kk~}0sqOKoy)E`-5T^<+m+_A(FGgJNboN}nmxBW*0QW%r_t|okm zJL%%>xNThC^b?2S@$W={H0j8U-T`*UcVT z-6q3*eZvcY(t?EOy2Lo0s>Q0Ds`+5^rQs}C;|p4!@(s(>k@o|?w0s8_WNQIQ!&%Tt zpq%~cayZV z4Wdn$x_h#bQrRQ`Cp8G1&uZSEWLMj0Z;vXPX^gT|*yv8t6!p0+NyL~T#FbF#8l)A? z{S>9R!AKgoF;+$_SiGT1>Gy_@#r1(pTgEq6DUHE2s``Eq@~1m zDqQs&EXs_^HD9GDaL&y%S)Q4l?JAToJ3j6uy;r1?u39&xo7i2_Jo_!2WTHfu_GvIx zKw*Y^Q{}#}M?7QWRENNxEGAs@LN_S&D^3&!$AEK;57xtaSZP>ZB#r30e6%3pJlluV z)VCV@i{wKarXn)D9CLVwhhCCP!byU^&bh7BwH_xUxp3p_T}b+&dXUADaQHNoPwr?U&B ziThJ@cPX!WA24o39B)4a0pD6^Z1>h&XDmIL@9hUp9e8(Qo;}$>$1e>jjW~v|Voq^p zao!FWkoVm0vs8!mRpftg)>iFu(%*jTdb&rNs#wY8e0e44Xuq%Fr1D}<08{CS>@4MG zq!(6DF*&0D;FZZ2?d;X>ux5dl3Qapl5(zjpBtyt3%H;2zP__Qpcr|waO?y*1d@z-m z-y~n4K=jh=2RTL2Ru>hK;E?qzKVzky7KC+v$*^hsINl#iZ;yT8BAWtj7&u-4u5NY? z)133V*iB-W{$X3eSGCbtK^KbriHIPdShtV+A_tekEHm_++v>VsI;K4rd}xjq6&hWU ztPrv$AfbEYF>KlC8w+12zuYE!XXUq*@~o-Qn>)|*fgr2GcETG=n?ZKvhcFv0!4Ek) zZrY#6*v(j>Q}Ngu;m>^V2{Rq{okos`hbuhz#&VhuRap#9dw%9vcAl@`wuy0mwyj=k zWxFvcsbY+kIh@9p(kFCF?8oT`7db8l9v-YUg*o0U;2yDc6Q^B0{dV%}C>_6Vcu;&d2tDgi1wO!D5WjQJU(=k%9@R7y1r18xcs#B zdb~vR;|Bz2rYeXV@US=y*>tn`znn*pKG+TOOx4;`-Jv$CzI}h2YDJZY1XFdg$8&N? z(+5=4PK`C>4~m^0y=|k!?VY|q{L3Q?N`YYM^Dkjq6&@y*a*C91ZtLquS$ZC#jXr*K?o#`3+`QATAMSLWjFLyMZqK)ULq!VD|#V~&8C1`T>|xQ8t8Y&ADfr>b8cE7_nty5^>O76{VwgmH8R~VRMY|# z@0)g|ezF!%b$LDjRc%_8_C{EZh{Kh)G-D0~b&aHo^slokx68^HKuHMA!V7n`^NxVc zB*H5?$)%Ney_`+gsO9)GkNzi!85zg;N?Z%i-qK7&^V8Eh7fC+Wdi+5@TEt1C9cJqY z`(2mVtl!X3Zzzy*OIRvla4KA3BTL}mXvZ?w1v5$YAf0rZ^0%dkS$@vPU?B@4v|&ke zD`uwcu=m`3pg8q;zNi%E-U@erqltVZ;zVMsab9~zQiMCkd`!c0Z6s{1HL>h|6`0 zOlx9i5?4Z&AX@oZUm@b#`Yns||GjiD{D}SQU{cNly_qWjh9c0tSeLye{^>$OdynL# z{sanN=AzTnpYlzfP$i;cZm&%Q&mKoxBsyrj^FB(mnKEDcUKlpc1H~`p2TL1u4Dl=n zWq+I&J!S_htv(Su3$|^VIakEzy}AqaSMR9PKVomla>;gcOtMl6xFK={NO|jX$n>q2 zy2S0e6*8SK2e{kaAfmkQb&Vw`B{y7uW9$naM&d(NfN8(kYkiyJp_krhC>qY`>UF zjDGv~Nlw>yqO#E9+F5vP-rY0Qib$uL8(wy|4xS=gfMv&BE|7+++e3Ea;Pbdg6&AygC*VMUR+E z7*WJ2oBi8ypBUWobQ#IVV=rZCc*rX+*eN|{Lt>9y@t3W8LPK>|CaVrz@680&Cu$c{ zS}nA_3ZUnu=7@2j;n}DV4&=7p);=CCrs8#DP{eg}&T&8LGih^MGk@q_cF&@0uhEP- z%=s603LZLiA^Zkf4V%~4_oJtL>K*HaoA$>+!cu&rH?qVgyncuCiQa!*=7C`q3N=5} zYn8qsm~a+LyUZUrZ$EfDQ9`a_k^RfVp+DPfYi_5#dwH1dU>CEmvNg39xwCcT5^7b~ zKA4i>_i`v)H4cm1Z=`mJ_?XQ4(u`3Bl?Zp&Bk z+q=q9+OUn~;oXUdb2N|92;QI55q!_3?2rAbAA02o)@D* z+TF?8EIjjg%fs@9Fms{&$sa+TqSz}N$W!X=g;s~a!0OVm%Lkihg|8G>ugU8u7{l=J z@N^EAwpP{$W+aI@9~Dr70^%_GI;lX3+2r=znZeixcMDi1fWa?|AAK33`UNTizq#*c zmc8FHXf@)ruT=)kW(-q3+s2pI02J{p=?sLhjU>8_8T??iu(&@wH;i3H zk(~Cs@bD8Av=U}(;cICG=XCo+t4yuT5CP=dwBRq7Fi%}SqvQK_o~^|i>lksLT}Z5N zpz)9Ab;sLu+*dMYADE0SJ=~V&(VBu6%@Kc`^K}Eois8znOB20I=XaMysT?M4=+Wzk zi#MWR6m9{4pO-6*gBatdm!zE;w5ux=rfXMdm`F*g1WpX`*NRosf8D18@c55L-onJF z(=l%}OyqrXu&8HBtP9!BL`>$l+b=F-mQ8?IXUC$M4#HQpg#k=?rqF3cf_8|PT5*3_ zYq~zE;!NM)8!H7RhgIBe8fZ3qi(wzSG*(Pc)ufUNx^rfSv`Uc!c3OKp*!e# z*B184F|dGC9$2B6EvkEg2*rYB&w<&`#DWy-wHyzUJ-5tijXpxu?0iRTl}DPT+>`DE zpWcI8Yae1eP9IlNK(($_iuAD32O*K9&CX2P=V%*#yXh-|)?w}o+)T~2vdDuQsOLShbWUZaaov#CN0Xm|G9o7BcQ;b4EJ^y{jP`=VD2gWr*m#Dim$NfO{v-0lNV2fqwS39txYCC7=+bJ|Ys^etb{97} zD&+*xyf~T08CB>iJ5Cny;BB61m0yrh0ImyZf_`?V58l>_J&}5n5^xXr z-Nb<0Xg`-@PcJJe8H?p4qEM(VwrVi{NTbbG`Z5m-6s={`xK$Vi9gIqB6MrHbl z@?4=jGAj6n!$go%K7~%*N+6Yp?v)leWrFJL7Yfl=m)};mBCHnrsPTtEL9lYHIJLRr z52`LZs&%KhTO;-^=O^!Ld?+@m@TJ~KW&nL!?&W4W$kTe;(OES zxV+<;a*$Ol8J`*ucwAA>={(n`*MkUE)AMIfNJ@LdeQgxoDR0iiNoBR zDH&CF8fB3~o>;DvVWrO@PQ(Td7W+bF`$Up~f~G0Q$8)`%X)SK~QX6$4hE+2FVT}hR z_olIKxF2R>s~i%|d@28Z$?nN2P2xYa0MEFCXn;%xC|5j%WJfKh3NsFq&=Nr$Q3WHr ztNr9W8>xYGAd$&j876J`x}2{p*uA|`)!=~~-)aQI7Y2p*#nqG0>5 z4)U0ji>Llsu)W3vm}p(wa_H7NCRVTagWZbJuzU>D(r{s=^D_sO_dNnq;#P(Cs8m!_ zee4u&nd+p+Ie@Y^>^wkG@??KI?|)~=T|#9zL>EpM6OC@UnVz}$^F+Eb0F3#lo9ph) zH5-K+_sozLR{hGk#gY#b(Fy=H!#_c7_^BHQN?v>?C2Hy@Dod$JyUdvX25-9WLg&L8 zP^TYoOJBkYwUqmnGgQZ&Q()gDc(AcUS*5T~bK@3l`jwrvtotuLrcX1`ksGs3Kda(4 za@N($ttCEXt1cRdsVbGW zKYy(c|D=REakDc^cm*=$lqnSveK+-OZjlI#RZBy>Q0tCt6h(Rdq7zJYcGIQXM56%wbepcDRiuk^fp$qAqwLqIl zAbin5<#|(b`1`ceZ+Mu~1>?NeGj+6fW>ZZYZZ&Lk$_R9$=1|eRyll(^)y$UOUrxloSNLmg&G%}F-FaV5J`^r=NznF+5=*5Q z6C9>Udfd_?jDt>CjO0$q)j27TI9;c)YdgBU{$i)>fT?H_fwB8OI5QhG71mw1***gU z1w#wJ;c*@UL0S)gJhJl2*+?L@s6`&?H~}ioldp=#n{P)q-iH=H=({)eS5R2*;cYQS zm9cePf!QkR0>h7;FUh(i_^n93x$iJqWW1Ih?>E_74Rui~!LP#)10# zf~D{Uy9RW-Ag5j1>VeVz>xXVLRq0G@hY3oJOI?YV@lbQ|+k-4^su@oSA2s6xLzwtT zSeHDN&qf)bD2~WNJip{-;++?&|7L!+uAQzn9^t#$O3J3d7}O(J1*hB$fId6xDa zW0SA&^=4kgjRc-_kgUXa16jJ)8sIty)(&Xh#QD|I3MnWwUa3qO7bs7x7n!;RYQI=) z?QC^Z3hM+7ES~;MFHRB+J}AKpSlK56%Ro)*QdrZ-pO2Ry+Sm#vjl6Vv{$$hy#xW`k1_VU3KRq$$C%KDx6PQz;Ur5sj(5e&YHV z@o#!-lXj`5i=WF?S02xQ8rRa}X4_EEoeTP*fvvW-1^oZ96%v}^Ny?J=RO zf*QnDw_cc1NGOk~nncRP+NREI(n?Nr`?6~@0aTrBUz=2D4m4=0uHaqgAb~rMCDZ#) z>VKeU_M@)=iVi)@oAck;nz%_nRp`Jx^C7BN1TUQZWCcE``)>bB1a`|-In(Oq3+9;G z2+wQeOQMIzvs6RocroVt*JDg}lDLMe78#E0XnrhM!rjrCUh#9Yzc>6vPA-Hl1}V)p zpRBn+Rr5D8=3ftHj(NmZ!9C&b>YmB+yp2;<@#&OW&K3CR^1Y1+Ynoi*yKAvOg9Bq7 zsiH9jb@Z!6aVnwc1LI|vR2A6rO&1$e8yDo<*B3%BLT~^TW_q)eHw|T^-zlOWSx)q< z)6EW)nqKsTxWr&IiWp^dDiO3$Cr-?A{SgI1;HHk~;`aQaA=~E4@8t+iOT`ai*d$^v ze8;tD!WAzu=Ta7usPs9PB4C2cB1CI06{%ua_z-=_f@OY6#e2}pM4HiQ-n2NK({Oc= z)5M*+%As8Rz_J&!RnINAwN)O=C?9j0P(Iw z&eXen(5F(XZd>%H9U=wgC#0WR(E&`T(N7R_=L#U(tKvR?$U-284fwM$M*AYWCZbf8 zzV=EU(G$#J*jwXL`U6ebAcQxO{77QOaAX0wIeyBrQgE^-w$B}Nl>bxx;N-S!45oz# z(I)MH^C6Wtrew(R_%fZ-z46YNKJ1^@xf-CGEd_Wey*F>0rB-^8^}G0YW*E1E-^>M) z#C$W;_Do0&5&e>b#-scGhk9@cSl|@&&LkhcIoX!S(VIZv zD-Zfn0OJ|Sue#a*vY7k^CJMjdbC@>DaJ)&cs5VOC1gD|;vt+L4r~2@I|3kqLpx%rI z3fK0GMctv!ziOEJx<%S-6eU|L5a4WbJOTn7hVQ;|X9Ao$zmVp>e+qCqYu&oJ4*&WT z*Miso)a*d6sACAp34r)TGZ%oJ;gHbd*KjV*KcA43vMX+-GRO)1oU9DTMLnc3HHCRJ zB=(3(-366{g>vUdgFtze^s}MjWT?{kRXzg$(>FuINsY24OS|n&(EMP50q8w;Ny{#i zM#6aOcjD53-Xq3a6Wy3t0GbmZcq)TvNJiqWhG2oz%O40W2xacG!iS2x#D zp6OafE>0x8Z=(baHTv3Qk?Q8N!+E}82>1(F8fvg4651IcZmqD6K@C$5!4!FeoeGVC z&=Yhfn0s`lJ#v2j0w_nC7hW-feIZ5rJFDu$V;!|>rE8Ia3_wBSzo?kQ08Rz!AE zgscBh&6)hoX*u}T=>Hbf2HOO@H~k0S8VE!II#t)%Fd|Vpgg{#PPun*tOh>_s&Lm1xwr%cRT{XOP3;yU^ z#q$h14c}a2xOqci1EY>JXDZL#{yCXP%o$sF2mexK6j$y(7gLwB4 z6WElCXe>}q~uGyF<~e*P{R0hi17o@F7#@OnYo zqZnYvWI*?eo2m9NnTKzO zu7JyDq2Tp3;W!{Pcl~@Oe~iYLZ_FZol_k*T+N^S@?eJ~^=-MoLPQZkqRCtvLC|osi zxI5w^1_YCb3@%_vceqMNy;$@enqVoFM##B>nROAmordwP-Wm*O0~~KLUiLdyw2EZC z>tZ{Q)oK!d{zvZtM=pCyly#lW!gGt%^$C40_}EQBZ6SE2GY@EWE-^I7#PA&>K2%J> z0K$MA-=O-I0qVPg$@JYFN&g2Wjf4x&8{=n8g&KPtLCfw`?Q&kC>vwh9JY1Zh9v+9A z`9_l!Z?f{InuqLewW|0=!b(}IR!KTsLFAVkDKs0L0RwTwYP|5*NF-fIp?WuZ0}zbc zwTx;)b5|dK%OK%~TdTMY(*8JnJX9Q2fP(?!xt_#7_Cfvg^K)i8@RQHZ<*tW$M`7+M zBq0~ue3Kk}VXN={4KuTLsLDfAVC6F8pjKM4yEIiaA z0T=_bvc{tp*Y4YwvaGxgXTXB4E;R<;1m$7H@y6W=BS+7gcA*Md4hrx!sD%WJ{-C!E zu~Z~X!@Gv(#RIt3HCA)l@dA@;tSaf=dJUgURvBq~rNELGs$W58E-&0*iwV%a#>zos zh%_dDeZF zF+`NDH2sp=+kEGVW6%TpWrk|zL%h0u+RiGWQvsKgdA=o$@@Lk8;#f5rvT^EkOjrV|IWz$%^v^EOaxPBB%VDZ04;qA_r3%zLrpd`*#B26 zKw#{@vZ;}rKY#w8TPi}~DmM6UeZorncY%##QxGj^gLE5ZMoBG9dm9xM3>^P|`8b#y zaaSq%l1%vh%zv#|Eih-OWeBhV$~-N*h{KSK?eg`hHp)RCSwYZ$3Kti*U(`aGfekFv zt9!O>WUG{^zFx{n&2; zhL7R@bD<7m-A}}Udc98rGnOi*3hGYt74N=3t8Iow@%{ACybfX%$CsWupwXnWdgo8s zMp^ts1}?e}B>A@`KQTOdqz-3Uj^qVjZ1?rb*oyeimPL#LC6!dSZrvI=eCoTa1i3LY z*z@leS-CUKLp4oXhcnmFxbv!vPq^l>_E-(+D|U0mTYZ zAf|3@){)LGr^Ggbk?t3%g(}y;_>WpJ0?q?8BGnlwFj=Yj(N+X%67=SNe>ni3?M_!= z`yqn3fxw^}KryUbdkJXje}KyGQ~={U>l+%Uhm%*cE^92ew}zl9`6aovLgAiU(6XYBDsTqJ_a7*bpy^Q zHFdBxd*x^*vv@*Jhw6M4LC(-V@t3A+*Uh^Sn^WiA4(BOt0oi{eO*Qj|8yGb=*B%wl zx-&z%2S!##@S5KMulIr!7o7M%S1@eZ6*E0nakqy@AI#&p?XC2KKDOR!Prm+OYrLa{ z13IQZ0JDBvciQb^<4WR>SP)aZGIhvwFLjG&UGH?d&iD6s z9yZ)Mf&)p91|KOQ9@fn$WE!f|R!sdm9ehj z(`UN7#cz)XSvL<+9s}Z`EZQ&^ze#1=rUq*s(T57^NBh$z1EkWIDOA z4}ZVEjc(wg%T1D^0VZOKKxZhYJ^q%k9qtyPOCzJ$@#p=uhX0#`hz;5Mhn<`833q*f zb8K?q{)9MWVK~3NP7#^(gyt^m`X2%^S4gZ_9SacP_Z;cs) zd7B?DQFFz?tK5`x-NB$tA>O;*$jyXU5F~`}T)Oe__q?Q*-Ya=vm7Mk{b*Lr`WE^u1 z8*U$&glf0*t!5khiVqyhY?oyj(d`dNnC>k`-g&O5Fl#o}fK)Gz z6?Cw;@PTa8|C~Rf>I#!KO4M=l+-zeYBN>c$;uDjw-i|pKJ!dkzk|-6-VBZG@qX&Ll z_?TYIa`C1M-tAYS$D6qK;YitU-$YLi82QHux?x9G$q`!|wZFeGei5)U{kV4o!rTu3 zW1fCzp2ee;zNP;d$Hm5ieXwt0gq*0To>s$vL17<%UBaunX*;j>QKnqIrMJ|^XghY_ z{v*!;nENCNvcBc0bMn5%t5BW-5>4qL7r}a54@a{#FcfpyVfpio^Vthp@SGdM|6u{< z2tFpns*^E%^8K%lk#QA+Zf$5y2Bs>xx;B`pDW&3iYZFYH`UHkN#DhDH@=wY@j9|S$ zB{lb(DG+rVKtxaLv9w(EhauyNUW3tv?(JQRX9gE$Yti@UYklJ%w`500;!2BqEQTk= zH4gqJyHXUz^5Vy4DN8V!J{}5+f1UV}H*Nd*TGb*5&m*a$?%iAn_Bqr$p^3crc)>q1 zPq$q?>vg5f;pKZ41 ziF4g|mtJ1Kt59v5YbCZI;Q_*pb;9pJ78AK0l{aD@mW^+Id)evfAk|sa-hBLesP}(br-S<8$DIkqFbcb|zOP7eGqzv6sl0!(hiiC71AV>_ILr6&@0z-~~ zgff8C5JS8NpU?BH>w16x40y>ovt#WQ_qx~GtH2KOqN?%+3RNe-3eHdJ;d(S48LbJP z0~wm>T$uK-EEb{+{8#7T_lEDqCwJy*fCdQ4K##>jXWO6Mqmj2GYt{IMYk9K#hfv&J(fb%@m%-;aySd^53@t*mUrJmjHH=duwj~ABzUu>c()N>uKM=PXLS7OY55! zlVe}KmIJkaYM-F^UZ7MX(*6~&avVmbM8~MzMR=nts52{#M6H|gR(zR%p8GsNYknCM zHaQrB3x5(;EgS_IeCQEY613(`*I0=H~+0GIFGU;GkFasW7(+5C@*hv;s_wBYUo^lu@ND@q$1 z8!8D8IzawotvZ8xLPdy4NCv|(u%47XroTKK5h!K6dzXq1FvdMSQiee`uqZ8#Wcoos zOTX9{ru6=ySs*Vb?!KUs4q0vP0)QQ$!zzwv$3YBK$$P(4QBhJ1h*6^%aDgjeh}+>H zPfIJH3biw77toqws-GQ*UrB6dOUY=)>2?I&URzs=Z}>U7Bj|+tN(O)sL|gL}!WeE_ zEk7Cw(R|3#9fIHg`S(53E$4r^01_OViJ@?LUA}wmV?ew2wP=u)B5;wO*Uup`^3&qs z0uEi8ki)N>dK7fB#*BEffLfd`(<|%U0HXTT$h#ygz~wTeBVB#Xiq?=5%D3#=15_7E zz~RDs`T=Okoh4|4iGKyO`kiKsC%pu&D5Q@erl)zuy2*_5>dp~6>2W^H^}T?e_4o-D z^u-UUpyP+jCFJDfuNA^V<6`d|cvta0tJ|JpZ+6zl##VT_zoJVLyJpVRL$Mw&HS<_j}G>5o|F@~4#C3?PkTJ~6X1_E_i-5kp)H*4fJIiV~Z16yNg7|Y#WAKdWL zdMT^FE{`$v3`61SIL#>bi`P!log-DpaOKZ|o7!>g-wRjcGM(f7E&vY}u%MtP5g0i%Lsyp4$H+Q3 zN%@oNruIX7gBz%z_3_}D^R`k5TGn=eumUb0bc|O3T=zOH=*D16PD(1R_Cl3+gA73c zIp_yj%$UTnCPJbWpPh*6L(o9YwNsV6$w^gq|BwE$5PXK&qDhJ)_WN~CmsC-U34i86 z9y~ytEh5j9(%pa;_xl>SjQJOi8}OD)j+MenVgc1B>aqX zFyWr@Zu&WRX7oLe$7(n0k}>RjlNL26VdA0#N-p2i%af*@sW4ivfDI$5I8YR7iPh(L z_SkMjjIQDU*y`{kyNP)-(b>RuxVzzJVl&2oz~#(4+pWR|<-&lE0}EmfirS<4Sc)Xx znGxRKCyCk~b+MhGO7A(PN=%5y{ew8j|dtn2kiflIup2-$~^@SdIpMNHx z7~H)ZarRM$wEVR&jU6-UeTkZ*QrC6kk8=FJYo{yHwG1LvCL1+n`aYn}b@Ib+xYUuV z`U~Y+=c@BwumZMb@pBC`JT9E&?I40gh~=tShZmou%QmiM#dl+Rd&$>y;qrKFqi!EM zfjZ#rG+v5^;SeDua^Cx|W$nQT}3)3;f=em*m<&T>PxvCXY z9x?O!ZVJ7b*SMR3e0WeIRPq&y^rJ)}gh4UDKe zu|97kYUf2M=cJm&LDnU7J7M@hYTs!9oCsoc#y*!DJMvd7EZx!58KnT#&#OVpJbQ~fZqI?cnnpLA#4(W zyQ^9+P|XDu?oqP=*#7{#;E)`!r-Uv2?f2dRi^2E!PI9j!w1({UQj!Cn69) z6PCxp9_9vMR1zr^Oa44Vx?;0Qlu%;=YeSXe%6Fq$&B0AD4t=ErcTlduL&x_v(^siY{kpv=qd06dNlq!uut3Wgjg z^Olw>*@MOkK)<+AZ3fGx}-h3V3#08C=UK$i*l$P1l`H2DHD0wc!q)cu}^M0_NjEUu{7 z3U?lpH$k05!6%!PRggD7KO-kxfAzTAClxXIY+W!H&T{LK1G%y*VenqYdx5{vn88S< z;@@L7Djt%e&Wio{$M_epb%|Y01NB%Rtccc^hr}!4>b#1){iv3*O!F5gz|^JcPy-Nl zOd!k02Uz-S$;e*gkz0{5^cWmG;PG#lESTJsdVt2Ye|F=+$BMG2n_;BfW6r{x%%%8| z4KW+AEr;JY)fylLoOXf1843z*z+T0Ln^npJgUe)c7_zVwvK~z*saG$_5WtAPsvFPr zcux;X(WA#SHvOWP4gt(Fxoc5tNVfbe!I6=E4j>eBaCG1OCfIhae3GUmxtiLpB|Es4rB8#Dj;`^2Gy` zOGuPB<_euC8?+`@U^IPlGoC6>pqa8Uglt#HG2df6;C`@&Hrw{VNczsb*uxnr$5@SWGa3{ka6^ zEpduH4a+^?MrjX=Z&x2Oq3n%weSNH8BA=KK{T?VWO%kP<5vR=}MWR-Ia9iV6fj<4bVTa z=Sykf^9VXB`EovQ*b#>xW0#GD^h-4L;!8TkWS5O!7^@$31lERUXr1N)siYgLHY81Q z1sLQv`Qy~{{p;8EmeDDp0@knyXi3}Jm{?BhI;$!mMc^(`>e|>{YjOt>lg~pKABE69=K3QbO{9q9 zyEV`Lqf0N2UtopQk&kYJ&Z;jTrb^xKyUzBL5pukiCNG?jM<7_JhBq=2ca8( zpQ!9?&gie_93JxxAX{C99#*qw@FJpiWr&My7tJL7uZ7zZJb77YnMZPJq`?cFr+9o` z-?GWo^yXW*=j1z z5MVx=`*e%Pf*>yTB0FKd(AVrpFVN%_;zgKuKK+tRsFP}03(_u#JLF*Cnl zaL*di{lS8+=#oFd;+dh2W6yRQ3%_lQi#zOH1sv9(`|iF(yJ2=XTc? zlodgCvJF3-HmLW|Q$-|_UOs9_^d#y?w(jF$2v}$+f2@my`{8xn2!Vw3lM5W62onyJ zOyCQ1>P>FcmUt{MYeOCFS?QU~$QZVjcSr0It>CJkl}WRI)y`|U<9PY#tH#HtgVZ(P z8|8W7{22xS4HZWwh;Jun0`a;kG38YD(_5Wm_wZ2*fxZXm=b>xg{%$&CAqs70DIX8f zpHFpD!L+)bhhgc77rpch|5b1N#HSHfrE=5dv&Fy?l&TcjR%#7H`x|;;*MN zVDb?!aunm>W%Lfzc24QDc~?%wS>#1ic<>@@K;VW~b0nZIx1>KC;@tY(mi=<_n68aF zGtn>M>SNxmwGsZVi);?x6)}lr(2ZOhAXHUsDLV6A*YC-UY8|CiPW$Au1#5ZKo3{nZ z6M5dbdF2(;4?FR8QRypULS0qQ*RWO1>m|TXjpjj^U6z?PaVbtZIj=TiC7}EDbz%GR z?%aEnE2LZo@&ZOvgA=MccDCd{J8cK`?G>&PonNePrVWQqy9CIfX}>p4!pbHrqRwy& zL*73+YcdN|*T`vNEA&Trm0On)9Bz)MlnhQhKm7hNv>!G&e4Un+Zw0k(N(IdK&RUOq zzbjUur2vnG<$&>G&l#Ms=PoZEE>D>Y&LursrM`?ul<7rMn~y;PZ;A z?I~BnUYWW6#d&LgXY@9--fB@Mc#qtyiSdzpSKh84Aq`4`4+=Fw(7U24HC<7vepbAk z+0wSuK$oLr;wo42w4nYJ<@35|jX#U2Uk!i;k3AII@X`m>h!$1aY#a~ei^kq~gKGFt z~k~V@Y1?<3v$S z`lbU&`K=0KZeD zm}(0wxkYtnoNALyS}jnx#|N|>pHTvUgGw5%(N`|@K6Y;O)m^>fgqsgs+T|n%&yRld zQ0KQC==4n%lrigOzjK=Ikfxct8MW8FicU0fo`2iY^r*GB+_Ij$biyJ&0+O?Sn7+d= zG(0FE&X5?JFfJF`GgB!s)o_s6pwOF={_PSzQ6j~u2%FMwB&0;!7w3V)0woG&6MRMT z5d`8Au?&sf2j`or;Y&|K;vu)*OP0ihnF`Q4h!|S)NX4Fs-&w%*}&X&RCaeFz^XHmx2PFmLL;o;=6GO1L%r!R?}PXl&n}QCJ_00LCV0@+g*yL2d0n zYvxPjv-xQ=sT7QGrw`M>Lcb$Q5r6Juf5SD>=Jkb$42qb3Hg7%83SHFth~WY5qIY9# zmp-P-#N2!4dOPIXCCH459;K{0vMmLu@BO#ptqQpG)FKajQH1AMI2oeF?ZpzPjpvRP^7x89fsIHx7Xkya_qI}3VlPj7q(6Wkg8l$ty1 z-dL#kRdRN+jeO}EtA%C)!qKHEypmjI_dy4#-n;olF4AKlQKs8CFm8`+oj6G;oX$5S z0kQ!IBvsm%=O@1tc^=!~6M{V)=LhN&1%naAsDV{)#^-P0^6PF>4a zTx;&lZ<1fLqW^V+liqZV_10ok9bCA+Z-|-wD94OyS51E8tHNqG`r3F7_Olm3h-ocv z3WOt06L2v!qnc#@_3wx9rR6~GV;@aH{FYP;`XFEXI}!|r{|XgoQ|pNV=oqNM>t{w8 z{Q*7#L-B+7BWH>LvE@cBBPAon)b`ZFu${18hNm0zm9R-LB=ew6s#g@-`M*qk+VvlL zzpks^QoNwxZzFs7b2x_A6ZYyXIhal1ivF(tDLR#GzL8(}gPu0S)m5wx$37YwHm=@t zDJ58|CvrGdb{8x#_toow9n~*`=`d=Q+@eGQ4V`9qcge)K78F|)@W%hsK3RzalWmMI zl`xoFzS@v**L+s-rhvm{rT1iewn*G829m6-{+O!*8Ju`ByW4)e5>eEpQ+Br?e|e|G zC7p!1V%v-Xi0rhFUnE?K$=PWC%qQF8MrHa&jRERY`$;RGEg6%FclC9XmHazWh+!9c~`$EO{ zQ{qx<-M1WX5<2O4hP<7%AFF9jlcL0LEO&}@zG7wx29h=HOGm-W2P7e=w{tuB5EQk# z39RpWuTz~==8r&vz)>Z&VCdQ-H+TmK3!J?QkFPIZ{6G>EE%6~Xyj$)G0 zWkajbe-9SSZS1-Y8>Hv6Aj?_5cHh0PW+igXVqQXgUK-`01r=B?f1qql(UrDR&7%U9 zq}$obbSo^lp+b(X)oClt7Q!RNa#Mq{}!+nb!zJmopWMvnOPt@Q260D2HO zT2-;neC7f=_ZmmXKPv4(5<(TYt?yF|L~)wUvaV5*a7JE;mYtj)!Ze_8A7#>LMf72@@-J*}Z0%U*ZBs9i^*__|bqFy{^T#*vv~L3wh3 z&=&TY?%MUQfTW{=E-%R0HdVDAS_mE^_)3>n9^72~--+{7b zfWKyAJv9EK+fZ#yFeCpp)$VI9CBAa^G;|sgJ7GKefhf)eO=cA!-4aPxXw9<=<+h?SC1m199s@^SbsZH}+0)#eT!Fs&t20>9QGfKB|M?Lt z`K#^6jro@cytCaS{ny7~CcTS(hwRFR^ZQ&zBg=EhL;^_f^?FuUfZR)@bdn$K%V`O` zmr#NIMF!8R-;|oj=3l~ujjo1|N|SzFCP1vAuoDM|xQYI!%m@R^#Iufp!CIm*QeclZH4YPAoQrG5oeV#G$ zwH|fscz+7EzxlS|3e=o%KHxRmmlW8N@hsL&^qeZ(E7Qn8KI>Op?g+da8GDsnJ77JT zZRa@%yBZX7K)R_!OK8-&#y@a>NN*~LCJ^QDNq_+EPRhhwpkv?DoN885`YF<9^>#0% zX87~d%a40Fp=FpyW@BGk`1arGbKmEL5|L8+EdZ)s7-4|x=8+nXA!FDpJ z`fJ0?d{pt!qc9;FZX+nvbtC>l3gFDSG=2G4&4#*1y~o0s9d$=34+OU z0eg)NGL!RGze>u|*f>Ig(!LL2&8t0M)XR+;nf7i@NvFPK6fSU{zg}y#qY?_`6E4+@ zXYQ&|19oS!*@yCH01t2r1uXo!tGatR_-6I6agl1V3zwL_eLGHd<+^I|bZUQYgG$qj>@}{y$-#3lSm~Jh*i8`SUe1C7Fw{?$l<^lc)T3-s?~b1d#`}G zVC=-92J?0g%b!7WH1Up;ooJRFt zyVd^A{ucvtvrD-^mq_fhmif5f`Nwy0JHhwV+E)e`1wI>L-M2Oy(4+N5%o!sS&!Q+M z-cgTCbt=3643wZ{kPQgms03g6{PqDk@<2WQ2+t_Jvm9+DOZYgpXNl?+r8f$sAdL-o%m zSEsipD{%Xlc=kxh(HkQjW%fZzIJiV-4xefD4yqqR85yz6Sx%FjK$GMd{uH?~~ zEbChb<#uzIJ{`SeDFrr{zjaG%X)4WRlK;Y5rJ*9u!m~>UfsNFWj9l5}NqdsXc#?<8W(KXG z6DN(C`7@$+ivHuLrJzqW04&DZT0mIvDpi3y1-J&X@aBhRRx=aBvhYM6EOWj?yq3aCqc;7I3P1!W8Jag`7_Q1dU?k{%s72~72vfjd~qP4muAD4HA%Tsp=cq2Rpm)bOD> zUSn64ina^xfasSE9tn#J)U)|8atfm(xywb9&p!u5?8swMa#KVC38p9JTS>gSwu=PUwb;#5s_6;}J{MMfv2-70YmpNhj z!{hi`W30(8JrT3FFAl%sG=PYimVYywjPquloq~}|5Go+xUEQo&Ot~9NE3sE-xn<+a z&{}lKxAf$3p?YSJWWe@^5^jMD7t#lbLmnskrG`p6Sq-l(RKUSk+jR`)czZ+J2#qDj z|BdP8%7pb#Wd`fq0^7?2LcV#VfAodA3~tui22&$E-gL2a9Fes6-zfBFZge|5RI`pCP)A(C8rAx|y`Ix7BVo zcLrYPuE5eZo0fo^SzV+&x5_qaP!`(5i~(dZVrf69{mpl`W8!z`-b@8-c^9B`HwyKOI}oCZf7f> z7+zEyeE%nvPwxe+mfd?|d*hX6@9+!w5)hGw4{T-A{tNu5x>f_-;IZ=7`@Az#EoPC7 zQeM={xV+ur)dk@76bg79T9m~sBhv`A#ZqS!-IsnPCG+Csf?o6!7k=QWZU4m=)6QQH z_m+agV`dT+@qC%{gGsCt3W7o&r-xP`Pp!j^{j{F|%}G$4XlLtVb=t&ngyMI-ME&c? z<^%Wikoz&{{d+%$kxu477{$QKclt&yX`35pk^47lkFK5y2(=m403*0_rwoxJ;=A93 z^M~{eBTx;WGIF*092PiT*Ew}E5-|V5s-Ra=#ivvYqdasfNcVW|)6)~n{Wqu$xi#tF z96R=hu82+rbjvb2y+8soOHd>96-{1jxjQ@p~RYyT1EDllZR3IQU_$SP5S~_3J4RXJ&E2TT-WJA2(o_N7_@G zEhnFt4U`y#EIodHn_DJYE;Mf_F+h689WkNu{_4fMZuWp)T(ar#JrQ?le4m6tRrXZIqSv)yiy@*d^U9Mi^(44Rv4}tsX}>Kj5DmU7EzXYv<$xJ4es!{}!FCDBX7tJ2|I$`9NH$+5 z3*p#$Q-kXFi%qe96sz{pDXueyj~yC@>Lp6;3R|CPNNI8g(rQ9&gN0(v8|Q!eDPwP~ z{zpK&a`;NE8zDi#g8-azamAm*?0l44CWgj{gLI`|agq=h*M*%d=!!Z&5!2uHE~+p@ z27gAT79?hAD5PHnpLWWB9_oj|3ntt5CBN4g-~{?O4oPhAG!~%yRp0EPlt%yLNzm^`XSZlWQ9_k-Lcw#Q^f+`dbm&$ zs7Ssy!D{ccImnGwyEiu{*ENy;w6&yDyWGs{iCkj^n#rv9!3fCZqdvccoKy!yS8DM& z;>l8pDF?Z{6WQ-j%Q);$S8)F`mI0ml@_DQT1El{69{_-;;+x#ZI{2x=+*>xj7~RuV z({r)Q`Goi8MkBxkEt$H`%pJOj?~9Zn0o-z>WW6IY61mocxSW}`D$dDPM9Albfcw_Q z!^v4M(_f32b0lTeGPKrpMS1T#mT{v!4J23%F5cDJ2UB0E*E|{qy`9EVoFQnPtoOs| zxOhs_vejpfZbAyI&gP-FC0rb36SS$b?alEOe1o;6-K;{p_cGUo2i>by3uFWul455E{{rN> zuBiT?Yb!Y#{r)cH=GATL71F?!v4rFt3c(;`S6rfpmH^q)r(BtdromnM%R8*WvvWdD za706gn&FD`7%Vd@%IOp}7G;4fkoB|je&TGP?foSF(#ZSCuQ>wF$9X3AYsz71SXw*T zPm5Sy(hX-)5|7;Z@@aua z5@7V)tb^v%(ETA*@@L@py&JCnf=&B#lD?P1(x|*t_uz@by}5mTKQZMtkliB}daE!o zzM!TG#bP9C`6eHaYYwrm5QJ}g{UH77@NE@yyy_=Q@1s#3cUxoAiy)RQUm~^x2uqlTr)poPf1tFVSgvdp@%o+>- zzHJ_>1F*8tb&-Oea<(YfRB51}X!ZW@@JEmN2rhv6;M00r9SDU6udSKv6SaJ+*pPiR z63|jt!~UVvg-5h6)MkDxAdM95;lU%!^SCXdCgs&FB3A_m8I5HXnEXIj;JjEH6}zYj zZ9HXC@vmwMEAd+<(XgAagfZ4{O%jRks=-FXTVXCX#_26}RKCBDM#zqf#xS#j10~50Es%8hXlfUDr78gKYWKVi3bk6m6G{I9M@ZWJ0fUx2tobNitmgorIrRnSJPN=z0p#j{4dvRH^9rYuxGm)S2Q@On z-xoshA39_CpLct@GF8lxjg4qE#i;YMxNHkw-nWX*(3#vE#7La{9ZT}(&lKx1Z6^(u zv`K~=(bgWD7lQ9|!?d{9B-r;HD%!Lsm24AM&1qxV(M_vy(o13fWdkjHo$oPVAkJE0 zFU4!-gJ+J)EzM%v833-t^Ot8ae-|0>@bw^5*JJ)mr!m;#S>i@mBm=m@Xj~VeF|_!; zk*&wIK)_KaI<6q2xJN>-?>bFV6RB{1`uQV%1@sSUO9e4)E#{5%b@X%yWv;YYIAaglvT-^b!yn2mJ5&c4`wDq4{=`?241m{P5$&cVqY~ z^bkWjTmY>Kav@BYuyyRtuOQ3!F_cSfCQ4ywgv03J$*?s5Cy*Cc#YG+I#Cp zQ6T#;pg8*r>;+u-U6_Il?23&fZ}S?B*=pt2(CM_x>^2X<1%ynJ2kmu_biSB(7X(N^ z{7XljYA^zQwp>Gz9_R^yk+L-arrzU}7|}Dm z)gMmdP#D~kj{+SDghvyv&-Y|J2G{|2?|Z`4y-d%d{qh+nL}3(QJsd&O;=D?(Yp#t2 zF|!Ky)swjch5Y+5J}F8|(`2lD5jWdtS=Nn#x8ZovbAR&# zf6|G?Wq;UUrBI`IzBc~?wWgce#cBS9v-f=Iqq!4ErXb_s=Wsqgh2wtT_|?`_yI-q{ zkQ0#YfOnh#3FfP~tF*1^%7Nlb^tZ|;ig?Is%$fm`XX{=(M8QG`yg~}Jnn2jlgq{`O zIT#K7Jnv1Xy`IX{;p|*sv)ln;j2x^|HXUQhZr2T5e@7;HzLS>gb6GVXrYB_$$jMtj!Y~*7;QgUWscq<2l z@c_L!ru$H>G#U^I-II&w5>Qz_N&`jj=8q_h)1_(z@}?nPGYC>AuwA2VmlQMFFy{EwSrE(LFlk_zg?W$;=e>Bom(3&VBYEx~ktGO>wnFnG4cYVYpeBd|5{ z@Y%zAW+B#uQuPjf#f`CKBHol7$LIvBGqF`f-uK5<6NhaLM(Y#@cb+i-;5L3w;6XT# zc$hUT=eo)lO93Q^|i=Un5`n%h7)+I{;_Zjx8%LQyTE^%7WxeVSu}yHVl&{;9SD!=M6Ff1@Gg%#lWor5k)jTg{ z0xs+BIc`?VhSQ_Tn=>~WeIp2;Wx8H@4UB?s{t_tdC8Zm$h^2fwe&HDzqN7_T(s*d| zgZZiBe_5>(-R8~dw(vZGgsWPKcXTnoKmj=db2O`y#w(Hod{rv<@LWm0?*w2(vh2Ur z1L}*@-iW(vC0+T*6KqaIL_o5ct@Dxc3MH|5$-y7|v5}H-G&93*TJ-XM<23w|O=8eF z+=9?jgzZOkqEpy^%Y@}4`M3Jj#7aH6k-$a1?un-)X9*^*!ch1ejlRbO2op$3AC2@~ zql*3lL&#T3y%(mpz)%)PQRE$|?K5&f?SPG|;r%dDQ~X!~@OD%()wdH?I@y=h+H;Jm z0j8Qd`OUO$4^5(@#yCRv$JYr6S`>dpRBeyLi(d=VqKO4mm};)8qPnj`MYX`ef$i_wRfG zoZ4z10`{JL|CC)&EwsM+FFPbza|`s#oH3quh4>@bIwV-stye7w&YN#-ip5#RvC(1C zu~%zyz1-r5h!*iNruzfWr5_GT@lNGu*KNGO+PZ zRa=5NbloG$|Dxvry&MdbWB#!I?yzYh^8B(d8eSVHfZHef1xn#KRp?B|(mt#F{w)rZ z)w@Q>95dblOFra-jnbw_*J!rp5^RjIzH3{38o?ihHSQns5GsJ2 zLJfp0zZ{l8;?274xKZPlzoYKBSDf5ZT>3v-FzbuiQ5T!1vq#X&xbWfcfX}T46Lbej zuWdDTvO4b}{IgeId0*$&JUZ8f639r zo~vBBp!$i=>-&YFcVwH-DF#bSjbdaC!Q_N(si(4G{kLQH4ALaO_OV{jhR?UaJerW_ z3!beZUeTKgq}kSM%>_YE=LL42&Vxjn184&d?ZAh?2C&=cTa@Z)}bD&bHp z{EJ$e=t-EB7l6{kdn(T>Ndh+tWE}UF!?vNFplPah`K9Um8>u2I{nv{?E?0uV_Zg$^ zj%`*p1t$ga^H zC<>M9`NTEDQMAJGQDJQjpFT(&UJHTrEqBf@-KOev;dKxN7U{Wkx($9y<=8!iY30cB zJ^vkm{wqf=u>R&00`yWC1St6h$2*m~?f(0L$#d7nYl=S4yYhilArK}R@fOoNe|n!* zV%9X~PMvyZObX+0EMR9WWDFn{4FbsP-@J$~7J_sTj0o8K^&sMJ#?E0Q!2;PdZS59qNb6Q;XOtZ(hjs>7D;*EbkZNtk zWrwlz`o%wP1YPGt-R6BVGO(q1(AuQ)pWoSS{pKJD%d5lbG|T82{fKt151R3Qoa(hq zUJw;?g)i~A=B4I#Xkl80i1=J>%7LJs6D32dDOXzuXoW>m zWlyUN6l?t5=;^j)Ul z`pGMmCJ9KZgv1;>cc6B4fg9}1k2m;A%K$E|B+bLQvmhVlzcvk^)V%>Hb?4c`eb;y- zd(`w6PxRn$l3V71&&TKzd~6IL4lufnjO)Fl`!4iG$d>B}qu`*y-o{w{sxeXD@>BWV zu*=un)%3W$N)wwO-)!w>)_To3C*?O0dF>8Qmv*48KqV%L-`FmrvOE!C_-zvBq%#V` z(J!wa*iIBBW=%G8yMLDp`b~4iU+k=D7OCL1=kayC(Vm)44nk>L>aJ{f^euo{RTwG5 zjjGa6NW2@-f|xDR%_}C|Hy2z4^dQ@kCNg&5@{xzEkN>oUf?TiGT4Uz7*XcE9#$_7$ zqfTdjN=Svx(dBdP=E=H=N5>w|Xgs^#V?aSyCv6huhV8l#{$P>ZwxD6po zbtdUzX7`SC#+Oj*>hHnZvp%9hex5(<$3lhP39R!nxh=Gjbgo}3UM&>7cAc2AbrcG` z5GMRRO*p8RKbWPk`Gnn?9L-6mfWFYFfH5knY%z8iqSRU2)RoN$epY#EBDJ^TJ#mp< zXD(=<6v1kJ#tOMVtrCJWjE_FqBl%#~II^3C74e!Bz4wH}d*U^ah$0HH4TC2DWWX#| zdb;Qbx2!!9Xiba&aKt#F0vV6u?%siZ=Irp$vDd1KJ@)+yC}*W!?@YyG}7v1x)kdc0_0aQ|E6 zfc7r~t+mjLmnvdB8~4$51)yrVM_Zyb&)~kUrvROcA2su*A9<8$S}o#dgNb|7im~IL zs|F3JDLOe-)vtQ1dpMuDad^J+4|aJ=ryjPjxi_nzc&+ zP?1G4N`hk-hK@YMZ%b=OOgxoSSGuOY<>_%#e(C$9E$H79bd0o`_%(2Zb_2+`juaq? z{IAm)Hh&q$Z5+1@V@z{HbZlQ^cYGS?EgQ<&5;8}|hVt1MeRP0a+O?=hz!vd>sGd=D zjkqHG_m*O>WTBx50847*8`#=i{pn1Kc0il22Q;WMO%B6~JY@HtJYnYtF!bQeX>xIV zC_>fzeyiB@EgO`8$MgEE*Fs3w%nx6M$OO3taF8vZ+Pqhr@gB%IGhst5&mOp9yd_=x zpP6sF|B?Al_YFE<80LFBah(8sghp1B8;C$Bt^wY!<`2E>ru&q`4<7A$@+k49Q&UY7 zX4WiqXB_~1TUF!vutO2xQu7dwC^4zc<1?_KV?PvW`}Wf(b8Q#AMEojvLf0V9^>N?yoF zKo#yZfvbt-a@YPQNdMtA!TT)m=^fY@;%TZS`{XACigfV1Yz;=J>*FC^SU)LV0gYU) z3cE-1oZ`ZP>bK>=)hRh;hki{7;y{JHs;aG2))T~7 zhaIZ|4BGoZR34%UAGVm1Fdt}Q!23rgZGEVaD_9#z5(fhQTVz|4JG;-2cV#-2c2fI8 zCkr=IL?3luf&rq6ro^_p^54zEyXP^04NU$q6IkJmUu9)Z8h*?Wvs08J(?6>!IvgXG zjsH#rC@gv7*jZu+t&!+mg3aP(xkOeEYE_MLr+Q2-#`XgFrV_D-OZi@SuNR*(0pex$ zrWI@^WxpK^AU4wp2Dubn2TTbdzsB_jY(=^cEZA$& zjohA-Mp2Xnb`01$^-6Q}m|hRTV!79&>DLLxXX zDmgqKO?U?*EfG>?#IRiGpA_D%tarzDOItSvh*YovmGGHzc_~*%+=7_%4mRd0kWT|P zUXg&;-?)f$fFv|2hR&rb@kj1QGqP$KBrbZOqSIp!?3>8yW`3l$0fW zTUHBMfr)AYb!k1qCa>~gg)ht5O^^{Hj<2$N3;j#)I(Eq2X<78bh14z;dEmWn6N^51AGOmZ>X`_J+j$s@ zC+}qT!@S@=6Pn81#ef}FVs%#DsvM2G)5_<}je5`HFk1gW$oVU!33MWNibcV}O_^jI z*niv7ljQh*80^e@=Yr|^0#Tb4588v6=Ayf|iYDUrSuWsNwGToMAueAjLBO;4TGvV2 zDkS3ppj-Z&T2dzZ`(2DW;|+V+i|~=E-!b7h{jkc&7>}VBUzF6tmoh{t(WB{woI)D( zzzc4_9RDdn^%;U`a%L423uS9JNU%L6S@iF-NVebd} zp-!pc#ujf9A-g3%AB;tX&)!bB6p73E-~qa)=Y8-LF~&$dWH)A}{cSUi7>a^^;KBbq|M!O} zIfl0TWFuQIo#@|}{`dbqCk6V75Mk!G|KFD#tAtBz|BmNx9{WGiWM2tET9Q9q|9HdEGsZ;@=4OfV|w(;0W}G zIY-62X~>=f>b@Y%2s}_heb*f`bZ;ntyumVmcN!uvz_yX@jlE!RD4%(Y;SEKgHxwT1 zj7Il{Kgb*NUKHI%_eLYg8v-@&W|80xKHwo@iuQ8$bw2i=-b=C{WPaBC<@!Mj13nx7 pPqmHD8RxNA$UUe$koEb%f94m>&9YCXJX^{D1fH&bF6*2UngB^ztn2^) From 3271de19445f1f7e4191ec50b645c2275e6fc206 Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 10:32:54 +0200 Subject: [PATCH 09/18] debugging issue with HISAT2 QC --- docs/configuration.md | 138 ++++++++++++++++++++++---------------- docs/preparation.md | 1 + pipeline/check/quality.py | 2 - pipeline/transcriptome.py | 3 +- 4 files changed, 84 insertions(+), 60 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index cb5efee..f8637c1 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -18,7 +18,9 @@ Additional parameters can be added to the qsub commands at the bottom, this allows users to submit jobs to specific queues, with specific options, ... Furthermore, while the template is designed for Oracle/Sun Grid Engine this can be set up to work with other job management systems -such as PBS and Torque. +such as PBS and Torque. At the bottom section there is an example on how to +set the number of nodes/cores on PBS/Torque and how to add a walltime (if +required). **Match the number of cores** to the number of cores the job needs. When starting TopHat with **-p 3** the job will require 4 cores (3 worker @@ -29,49 +31,52 @@ Example config.ini: ```ini [TOOLS] -; In case there is no module load system on the system set the module name to None - -trimmomatic_path=/home/sepro/tools/Trimmomatic-0.36/trimmomatic-0.36.jar - -; Module names -bowtie_module=biotools/bowtie2-2.2.6 -samtools_module=biotools/samtools-1.3 -sratoolkit_module=biotools/sratoolkit-2.5.7 -tophat_module=biotools/tophat-2.1.0 +; Tool Configuration +; +; Some tools require additional files or might require a hard coded path to the script. +; Please make sure these are set up correctly. -interproscan_module=biotools/interproscan-5.16-55.0 -blast_module=biotools/ncbi-blast-2.3.0+ -mcl_module=biotools/mcl-14.137 +; Trimmomatic Path +; ADJUST THIS +trimmomatic_path=/home/sepro/tools/Trimmomatic-0.36/trimmomatic-0.36.jar -python_module=devel/Python-2.7.10 -python3_module=devel/Python-3.5.1 +; COMMANDS to run tools +; +; Here the commands used to start different steps are defined, ${name} are variables that will be set by LSTrAP for +; each job. -; commands to run tools +; Note that in some cases hard coded paths were required, adjust these to match the location of these files on +; your system bowtie_cmd=bowtie2-build ${in} ${out} +hisat2_build_cmd=hisat2-build ${in} ${out} +; ADJUST PATHS TO ADAPTERS trimmomatic_se_command=java -jar ${jar} SE -threads 1 ${in} ${out} ILLUMINACLIP:/home/sepro/tools/Trimmomatic-0.36/adapters/TruSeq3-SE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36 trimmomatic_pe_command=java -jar ${jar} PE -threads 1 ${ina} ${inb} ${outap} ${outau} ${outbp} ${outbu} ILLUMINACLIP:/home/sepro/tools/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36 tophat_se_cmd=tophat -p 3 -o ${out} ${genome} ${fq} tophat_pe_cmd=tophat -p 3 -o ${out} ${genome} ${forward},${reverse} -samtools_cmd=samtools view -h -o ${out} ${bam} -htseq_count_cmd=htseq-count -s no -t ${feature} -i ${field} ${sam} ${gff} > ${out} +hisat2_se_cmd=hisat2 -p 3 -x ${genome} -U ${fq} -S ${out} 2> ${stats} +hisat2_pe_cmd=hisat2 -p 3 -x ${genome} -1 ${forward} -2 ${reverse} -S ${out} 2> ${stats} + +htseq_count_cmd=htseq-count -s no -f ${itype} -t ${feature} -i ${field} ${bam} ${gff} > ${out} interproscan_cmd=interproscan.sh -i ${in_dir}/${in_prefix}${SGE_TASK_ID} -o ${out_dir}/${out_prefix}${SGE_TASK_ID} -f tsv -dp -iprlookup -goterms --tempdir /tmp pcc_cmd=python3 ./scripts/pcc.py ${in} ${out} ${mcl_out} mcl_cmd=mcl ${in} --abc -o ${out} -te 4 +; ADJUST THIS mcxdeblast_cmd=perl /apps/biotools/mcl-14.137/bin/mcxdeblast --m9 --line-mode=abc ${blast_in} > ${abc_out} +; ADJUST THIS orthofinder_cmd=python /home/sepro/OrthoFinder-0.4/orthofinder.py -f ${fasta_dir} -t 8 +; qsub parameters (OGE) -; qsub parameters - -qsub_bowtie='' +qsub_indexing='' qsub_trimmomatic='' qsub_tophat='-pe cores 4' qsub_htseq_count='' @@ -81,6 +86,53 @@ qsub_mcl='-pe cores 4' qsub_orthofinder='-pe cores 8' qsub_mcxdeblast='' +; qsub parameters (PBS/Torque) + +; qsub_indexing='' +; qsub_trimmomatic='' +; qsub_tophat='-l nodes=1,ppn=4' +; qsub_htseq_count='' +; qsub_interproscan='-l nodes=1,ppn=5' +; qsub_pcc='' +; qsub_mcl='-l nodes=1,ppn=4' +; qsub_orthofinder='-l nodes=1,ppn=8' +; qsub_mcxdeblast='' + +; qsub parameters (PBS/Torque with walltimes) + +; qsub_indexing='-l walltime=00:10:00' +; qsub_trimmomatic='-l walltime=00:10:00' +; qsub_tophat='-l nodes=1,ppn=4 -l walltime=00:10:00' +; qsub_htseq_count=' -l walltime=00:02:00' +; qsub_interproscan='-l nodes=1,ppn=5 -l walltime=00:10:00' +; qsub_pcc=' -l walltime=00:10:00' +; qsub_mcl='-l nodes=1,ppn=4 -l walltime=00:10:00' +; qsub_orthofinder='-l nodes=1,ppn=8 -l walltime=01:00:00' +; qsub_mcxdeblast='-l walltime=00:10:00' + +; Module names +; These need to be configured if the required tools are installed in the environment modules. +; You can find the modules installed on your system using +; +; module avail +; +; In case there is no module load system on the system set the module name to None + +bowtie_module=biotools/bowtie2-2.2.6 +samtools_module=biotools/samtools-1.3 +sratoolkit_module=biotools/sratoolkit-2.5.7 +tophat_module=biotools/tophat-2.1.0 + +hisat2_module= + +interproscan_module=biotools/interproscan-5.16-55.0 + +blast_module=biotools/ncbi-blast-2.3.0+ +mcl_module=biotools/mcl-14.137 + +python_module=devel/Python-2.7.10 +python3_module=devel/Python-3.5.1 + ``` ## data.ini @@ -90,7 +142,7 @@ Example data.ini file: ```ini [GLOBAL] ; add all genomes, use semi-colons to separate multiple cfr. zma;ath -genomes=zma;ath +genomes=zma ; enter email to receive status updates from the cluster ; setting the email to None will disable this @@ -100,10 +152,10 @@ email=None orthofinder_output=./output/orthofinder [zma] -cds_fasta=./data/zma/cds.fasta -protein_fasta=./data/zma/pep.fasta -genome_fasta=./data/zma/genome.fasta -gff_file=./data/zma/genes.gff3 +cds_fasta= +protein_fasta= +genome_fasta= +gff_file= gff_feature=CDS gff_id=Parent @@ -113,10 +165,9 @@ fastq_dir=./data/zma/fastq tophat_cutoff=65 htseq_cutoff=40 -bowtie_output=./output/bowtie-build/zma +indexing_output=./output/bowtie-build/zma trimmomatic_output=./output/trimmed_fastq/zma -tophat_output=./output/tophat/zma -samtools_output=./output/samtools/zma +alignment_output=./tmp/tophat/zma htseq_output=./output/htseq/zma exp_matrix_output=./output/zma/exp_matrix.txt @@ -126,32 +177,5 @@ interpro_output=./output/interpro/zma pcc_output=./output/zma/pcc.std.txt pcc_mcl_output=./output/zma/pcc.mcl.txt - -[ath] -cds_fasta=./data/ath/cds.fasta -protein_fasta=./data/ath/pep.fasta -genome_fasta=./data/ath/genome.fasta -gff_file=./data/ath/genes.gff3 - -gff_feature=CDS -gff_id=Parent - -fastq_dir=./data/ath/fastq - -tophat_cutoff=65 -htseq_cutoff=40 - -bowtie_output=./output/bowtie-build/ath -trimmomatic_output=./output/trimmed_fastq/ath -tophat_output=./output/tophat/ath -samtools_output=./output/samtools/ath -htseq_output=./output/htseq/ath - -exp_matrix_output=./output/ath/exp_matrix.txt -exp_matrix_tpm_output=./output/ath/exp_matrix.tpm.txt -exp_matrix_rpkm_output=./output/ath/exp_matrix.rpkm.txt -interpro_output=./output/interpro/ath - -pcc_output=./output/ath/pcc.std.txt -pcc_mcl_output=./output/ath/pcc.mcl.txt +mcl_cluster_output=./output/zma/mcl.clusters.txt ``` diff --git a/docs/preparation.md b/docs/preparation.md index 0915462..90bffbf 100644 --- a/docs/preparation.md +++ b/docs/preparation.md @@ -7,6 +7,7 @@ When opting for the latter, the configuration file needs to contain the exact na * [Bowtie2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml) * [TopHat](https://ccb.jhu.edu/software/tophat/manual.shtml) + * [HISAT2] * [Samtools](http://www.htslib.org/) * [SRAtools](http://ncbi.github.io/sra-tools/) * [Python 2.7](https://www.python.org/download/releases/2.7/) + [HTSeq](http://www-huber.embl.de/users/anders/HTSeq/doc/index.html) + all dependencies (including [PySam](https://github.com/pysam-developers/pysam)) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index 98845ec..1dc4a82 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -41,8 +41,6 @@ def check_hisat2(filename, cutoff=0, log=None): :param log: filehandle to write log to, set to None for no log :return: True if the sample passed, false otherwise """ - - # 93.77% overall alignment rate re_mapped = re.compile('(.*)% overall alignment rate') with open(filename, 'r') as f: diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 6a17c0a..37ed3d6 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -443,7 +443,7 @@ def check_quality(self): Function that checks tophat and htseq quality and throws warnings if insufficient reads map. If the log file is enabled it writes more detailed statistics there. """ - print("Checking quality of samples based on TopHat and HTSEQ-Count mapping statistics") + print("Checking quality of samples based on TopHat 2/HISAT2 and HTSEQ-Count mapping statistics") for g in self.genomes: alignment_output = self.dp[g]['alignment_output'] htseq_output = self.dp[g]['htseq_output'] @@ -454,6 +454,7 @@ def check_quality(self): o.endswith('.stats')] for stats_file in stats_files: + print(stats_file) cutoff = int(self.dp[g]['tophat_cutoff']) if 'tophat_cutoff' in self.dp[g] else 0 passed = check_hisat2(stats_file, cutoff=cutoff, log=self.log) if not passed: From 459c3ed3d6bbf73490b1e8da34d624c2dcc1d9bc Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 10:34:12 +0200 Subject: [PATCH 10/18] debugging issue with HISAT2 QC --- pipeline/transcriptome.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 37ed3d6..390b303 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -449,7 +449,7 @@ def check_quality(self): htseq_output = self.dp[g]['htseq_output'] if self.use_hisat2: - stats_files = [os.path.isfile(os.path.join(alignment_output, o)) for o in os.listdir(alignment_output) if + stats_files = [os.path.join(alignment_output, o) for o in os.listdir(alignment_output) if os.path.isfile(os.path.join(alignment_output, o)) and o.endswith('.stats')] From b290bfa01553561ef45fce7bef09b5e491769f04 Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 10:36:10 +0200 Subject: [PATCH 11/18] debugging issue with HISAT2 QC --- pipeline/check/quality.py | 1 + pipeline/transcriptome.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index 1dc4a82..97136c6 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -48,6 +48,7 @@ def check_hisat2(filename, cutoff=0, log=None): hits = re_mapped.search(lines[-1]) if hits: value = float(hits.group(1)) + print(value) if value >= cutoff: return True else: diff --git a/pipeline/transcriptome.py b/pipeline/transcriptome.py index 390b303..edccb99 100644 --- a/pipeline/transcriptome.py +++ b/pipeline/transcriptome.py @@ -454,7 +454,6 @@ def check_quality(self): o.endswith('.stats')] for stats_file in stats_files: - print(stats_file) cutoff = int(self.dp[g]['tophat_cutoff']) if 'tophat_cutoff' in self.dp[g] else 0 passed = check_hisat2(stats_file, cutoff=cutoff, log=self.log) if not passed: From 2940d4c96b342fc743568eac348d4987f8b3fe05 Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 10:37:49 +0200 Subject: [PATCH 12/18] debugging issue with HISAT2 QC --- pipeline/check/quality.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index 97136c6..8bd7640 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -45,16 +45,19 @@ def check_hisat2(filename, cutoff=0, log=None): with open(filename, 'r') as f: lines = '\t'.join(f.readlines()) - hits = re_mapped.search(lines[-1]) - if hits: - value = float(hits.group(1)) - print(value) - if value >= cutoff: - return True - else: - if log is not None: - print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', - cutoff, file=log) + for l in lines: + if "overall alignment" in l: + hits = re_mapped.search(l) + print(hits) + if hits: + value = float(hits.group(1)) + print(value) + if value >= cutoff: + return True + else: + if log is not None: + print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', + cutoff, file=log) return False From 2d4b389ba735323b2bdc307226de392bc8e52ee9 Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 10:38:43 +0200 Subject: [PATCH 13/18] debugging issue with HISAT2 QC --- pipeline/check/quality.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index 8bd7640..2cc70e0 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -45,6 +45,7 @@ def check_hisat2(filename, cutoff=0, log=None): with open(filename, 'r') as f: lines = '\t'.join(f.readlines()) + print(lines) for l in lines: if "overall alignment" in l: hits = re_mapped.search(l) From 82b7e81c7698bc2d938fa7c76f0de3ed39564172 Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 10:40:11 +0200 Subject: [PATCH 14/18] debugging issue with HISAT2 QC --- pipeline/check/quality.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index 2cc70e0..0b8c6c6 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -45,8 +45,9 @@ def check_hisat2(filename, cutoff=0, log=None): with open(filename, 'r') as f: lines = '\t'.join(f.readlines()) - print(lines) for l in lines: + l = l.strip() + print(l) if "overall alignment" in l: hits = re_mapped.search(l) print(hits) From 444ea845a89462716e16420f7807cf0a7b420c4d Mon Sep 17 00:00:00 2001 From: proost Date: Tue, 25 Jul 2017 10:47:06 +0200 Subject: [PATCH 15/18] fixed qc for hisat2 --- pipeline/check/quality.py | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/pipeline/check/quality.py b/pipeline/check/quality.py index 0b8c6c6..1097238 100644 --- a/pipeline/check/quality.py +++ b/pipeline/check/quality.py @@ -41,26 +41,19 @@ def check_hisat2(filename, cutoff=0, log=None): :param log: filehandle to write log to, set to None for no log :return: True if the sample passed, false otherwise """ - re_mapped = re.compile('(.*)% overall alignment rate') + re_mapped = re.compile('\t(.*)% overall alignment rate') with open(filename, 'r') as f: lines = '\t'.join(f.readlines()) - for l in lines: - l = l.strip() - print(l) - if "overall alignment" in l: - hits = re_mapped.search(l) - print(hits) - if hits: - value = float(hits.group(1)) - print(value) - if value >= cutoff: - return True - else: - if log is not None: - print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', - cutoff, file=log) - + hits = re_mapped.search(lines) + if hits: + value = float(hits.group(1)) + if value >= cutoff: + return True + else: + if log is not None: + print('WARNING:', filename, 'didn\'t pass alignment check!', value, 'reads mapped. Cutoff,', + cutoff, file=log) return False From a35b62c31eb2e94358e63c012e90cc26076b7fb0 Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 11:57:40 +0200 Subject: [PATCH 16/18] update docs --- README.md | 58 ++++++++++++++++++++++----------------------- docs/helper.md | 9 ++++++- docs/preparation.md | 21 +++++++++------- 3 files changed, 50 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 259deea..dadeb92 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,16 @@ # LSTrAP -LSTrAP, shot for Large Scale Transcriptome Analysis Pipeline, greatly facilitates the construction of co-expression networks from -RNA Seq data. The various tools involved are seamlessly connected and CPU-intensive steps are submitted to a computer cluster +LSTrAP, short for Large Scale Transcriptome Analysis Pipeline, greatly facilitates the construction of co-expression networks from +RNA-Seq data. The various tools involved are seamlessly connected and CPU-intensive steps are submitted to a computer cluster automatically. +## Version 1.3 Changelog + + * Support for [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System) / [Torque](http://www.adaptivecomputing.com/products/open-source/torque/) scheduler (note proper [configuration](./docs/configuration.md) is required) + * [HISAT2](https://ccb.jhu.edu/software/hisat2/index.shtml) can be used as an alternative to [BowTie2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml) and [TopHat 2](https://ccb.jhu.edu/software/tophat/index.shtml) + * Added [helper](./docs/helper.md) script to do PCA on samples + * **Parameter names in data.ini changed** + ## Workflow LSTrAP wraps multiple existing tools into a single workflow. To use LSTrAP the following tools need to be installed @@ -13,13 +20,10 @@ LSTrAP wraps multiple existing tools into a single workflow. To use LSTrAP the f Steps in bold are submitted to a cluster. Optional steps can be enabled by adding the flag *‑‑enable‑interpro* and/or *‑‑enable‑orthology*. -## Preparation - -LSTrAP is designed to run on an [Oracle Grid Engine](https://www.oracle.com/sun/index.html) computer cluster system and requires -all external tools to be installed on the compute nodes. The "module load" system is supported. A comprehensive list of all tools -necessary can be found [here](docs/preparation.md). Instructions to run LSTrAP on other systems are provided below. - ## Installation +Before installing make sure your system meets all requirements. A detailed list of supported systems and required +software can be found [here](docs/preparation.md). + Use git to obtain a copy of the LSTrAP code @@ -31,34 +35,35 @@ Next, move into the directory and copy **config.template.ini** and **data.templa cp config.template.ini config.ini cp data.template.ini data.ini -Configure config.ini and data.ini using the guidelines below - -## Configuration of LSTrAP +Configure config.ini and data.ini using these [guidelines](docs/configuration.md) -After copying the templates, **config.ini** needs to be set up to run on your system. It requires the path to Trimmomatic's jar and the -modules where Bowtie, Tophat ... are installed in (if the [modules](http://modules.sourceforge.net/) environment is used. -The location of the transcriptome data, the refrence genome and a few per-species options need to be defined in **data.ini**. +## Running LSTrAP -Detailed instruction how to set up both configuration files can be found [here](docs/configuration.md) +Once properly configured for your system and data, LSTrAP can be run using a single simple command (that should be +executed on the head node). -## Obtaining and preparing data + ./run.py config.ini data.ini -Scripts to download and prepare data from the [Sequence Read Archive](https://www.ncbi.nlm.nih.gov/sra) are included in -LSTrAP in the folder **helper**. Furthermore, it is recommended to remove splice variants from the GFF3 files, a script -to do that is included there as well. Detailed instructions for each script provided to obtain and prepare data can be -found [here](docs/helper.md) +Run using [HISAT2](https://ccb.jhu.edu/software/hisat2/index.shtml) -## Running LSTrAP + ./run.py --use-hisat2 config.ini data.ini -Once properly configured for your system and data, LSTrAP can be run using a single simple command (that should be executed on the head node) +Run with InterProScan and/or OrthoFinder - ./run.py config.ini data.ini + ./run.py --enable-orthology --enable-interproscan config.ini data.ini -Options to enable InterProScan and/or OrthoFinder or to skip certain steps of the pipeline are included, use the command below for more info +Furthermore, steps can be skipped (to avoid re-running steps unnecessarily). Use the command below for more info. ./run.py -h +## Obtaining and preparing data + +Scripts to download and prepare data from the [Sequence Read Archive](https://www.ncbi.nlm.nih.gov/sra) are included in +LSTrAP in the folder **helper**. Furthermore, it is recommended to remove splice variants from the GFF3 files, a script +to do that is included there as well. Detailed instructions for each script provided to obtain and prepare data can be +found [here](docs/helper.md) + ## Quality report After running LSTrAP a log file (*lstrap.log*) is written, in which samples which failed a quality measure @@ -92,11 +97,6 @@ for LSTrAP can be generated. python3 fasta_to_gff.py /path/to/transcript.cds.fasta > output.gff -## Adapting LSTrAP to other cluster managers - -LSTrAP is designed and tested on a cluster running the Oracle Grid Engine (default), PBS/Torque is also supported. - -Though due to differences in parameters ## Contact diff --git a/docs/helper.md b/docs/helper.md index 8db0ab7..3a01543 100644 --- a/docs/helper.md +++ b/docs/helper.md @@ -82,10 +82,17 @@ on a normalized expression matrix. ![matrix example](images/matrix.png "Sample distance heatmap (with hierarchical clustering)") - + +### pca_plot.py + +Script to perform a PCA analysis on any expression matrix. + + python3 pca_plot.py ./data/sbi.expression.matrix.tpm.txt ### pca_powerlaw.py +*This script and the required data are included to recreate results from the manuscript (Proost et al., under review)* + Script to perform a PCA analysis on the *Sorghum bicolor* data (case study) and draw the node degree distribution. The required data is included here as well. Note that this script requires sklearn and seaborn. diff --git a/docs/preparation.md b/docs/preparation.md index 90bffbf..6b86d93 100644 --- a/docs/preparation.md +++ b/docs/preparation.md @@ -1,24 +1,29 @@ # Preparing your system -LSTrAP is designed to run on the head node of a Oracle Grid Engine cluster. Apart from a running compute cluster, the essential -tools need to be installed. A full list is provided below, tools can be installed on the grid nodes directly or inside modules. -When opting for the latter, the configuration file needs to contain the exact names of the modules containing the tools. +LSTrAP is designed with High Performance Computing in mind and requires a computer cluster running +[Oracle Grid Engine]((https://www.oracle.com/sun/index.html)) or [PBS](https://en.wikipedia.org/wiki/Portable_Batch_System) +/ [Torque](http://www.adaptivecomputing.com/products/open-source/torque/). Furthermore, the essential +tools (see below) need to be installed prior to running LSTrAP. +Using the [Environment modules](http://modules.sourceforge.net/) are supported, in that case the configuration file +needs to contain the exact names of the modules containing the tools. +## Required Tools * [Bowtie2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml) * [TopHat](https://ccb.jhu.edu/software/tophat/manual.shtml) - * [HISAT2] + * [HISAT2](http://ccb.jhu.edu/software/hisat2/index.shtml) * [Samtools](http://www.htslib.org/) * [SRAtools](http://ncbi.github.io/sra-tools/) - * [Python 2.7](https://www.python.org/download/releases/2.7/) + [HTSeq](http://www-huber.embl.de/users/anders/HTSeq/doc/index.html) + all dependencies (including [PySam](https://github.com/pysam-developers/pysam)) + * [HTSeq](http://www-huber.embl.de/users/anders/HTSeq/doc/index.html) + all dependencies (including [PySam](https://github.com/pysam-developers/pysam)) * [Python 3.5](https://www.python.org/download/releases/3.5.1/) + SciPy + [Numpy](http://www.numpy.org/) - * [InterProScan](https://www.ebi.ac.uk/interpro/) - * [OrthoFinder](https://github.com/davidemms/OrthoFinder) * [MCL](http://www.micans.org/mcl/index.html?sec_software) * [Trimmomatic](http://www.usadellab.org/cms/?page=trimmomatic) -Optional tools +## Optional tools + * [InterProScan](https://www.ebi.ac.uk/interpro/) + * [OrthoFinder](https://github.com/davidemms/OrthoFinder) + * [Python 2.7](https://www.python.org/download/releases/2.7/) (for OrthoFinder) * [scikit-learn](http://scikit-learn.org/) for Python 3, required for PCA analysis (helper script) * [seaborn](https://stanford.edu/~mwaskom/software/seaborn/) for Python 3, required for PCA analysis (helper script) * [Aspera connect client](http://downloads.asperasoft.com/en/downloads/2), required for the *get_sra_ip.py* (helper script) \ No newline at end of file From e7f8ddcec2e0741a195d4f6935b71c0b4bcf0265 Mon Sep 17 00:00:00 2001 From: sepro Date: Tue, 25 Jul 2017 12:04:28 +0200 Subject: [PATCH 17/18] update docs --- README.md | 46 ++++++---------------------------------------- docs/helper.md | 5 +++++ 2 files changed, 11 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index dadeb92..cac9d3e 100644 --- a/README.md +++ b/README.md @@ -57,51 +57,17 @@ Furthermore, steps can be skipped (to avoid re-running steps unnecessarily). Use ./run.py -h -## Obtaining and preparing data +## Further reading -Scripts to download and prepare data from the [Sequence Read Archive](https://www.ncbi.nlm.nih.gov/sra) are included in -LSTrAP in the folder **helper**. Furthermore, it is recommended to remove splice variants from the GFF3 files, a script -to do that is included there as well. Detailed instructions for each script provided to obtain and prepare data can be -found [here](docs/helper.md) + * [LSTrAP output](docs/example_output.md) + * [Quality statistics](docs/quality.md): How to check the quality of samples and remove problematic samples + * [Helper Scripts](docs/helper.md): To acquire data from the [Sequence Read Archive](https://www.ncbi.nlm.nih.gov/sra) + and process results. -## Quality report - -After running LSTrAP a log file (*lstrap.log*) is written, in which samples which failed a quality measure -are reported. Note that __no samples are excluded from the final network__. In case certain samples need to be excluded -from the final network remove the htseq file for the sample you which to exclude and re-run the pipeline skipping all -steps prior to building the network. - - ./run.py config.ini data.ini --skip-interpro --skip-orthology --skip-bowtie-build --skip-trim-fastq --skip-tophat --skip-htseq --skip-qc - -More information on how the quality of samples is determined can be found [here](docs/quality.md). - -## Output - -Apart from the output all tools included generate, LSTrAP will generate raw and normalized expression matrices, a -co‑expression network and co‑expression clusters. - -A detailed overview of files produces, including examples, can be found [here](docs/example_output.md). - -## Helper Scripts - -LSTrAP comes with a few additional scripts to assist users to download and process data from the [Sequence Read Archive](http://www.ncbi.nlm.nih.gov/sra), -repeat analyses and the case study reported in the manuscript (Proost et al., *under preparation*). - -Details for each script can be found [here](docs/helper.md) - -## Running LSTrAP on transcriptome data - -To use LSTrAP on a *de novo* assembled transcriptome a little pre-processing is required. Instead of the genome a fasta -file containing **coding** sequences can be used (remove UTRs). Using the helper script fasta_to_gff.py a gff file suited -for LSTrAP can be generated. - - python3 fasta_to_gff.py /path/to/transcript.cds.fasta > output.gff - - ## Contact -LSTrAP was developed by [Sebastian Proost](mailto:proost@mpimp-golm.mpg.de) and [Marek Mutwil](mailto:mutwil@mpimp-golm.mpg.de) at the [Max-Planck Institute for Molecular Plant Physiology](http://www.mpimp-golm.mpg.de/2168/en) +LSTrAP was developed by [Sebastian Proost](mailto:proost@mpimp-golm.mpg.de) and [Marek Mutwil](mailto:mutwil@gmail.com) at the [Max-Planck Institute for Molecular Plant Physiology](http://www.mpimp-golm.mpg.de/2168/en) ## Acknowledgements and Funding diff --git a/docs/helper.md b/docs/helper.md index 3a01543..5d854fb 100644 --- a/docs/helper.md +++ b/docs/helper.md @@ -18,6 +18,11 @@ Script to convert sra files into fastq. Sratools is required. python3 sra_to_fastq.py /sra/files/directory /fastq/output/directory +## Running LSTrAP on transcriptome data + +To use LSTrAP on a *de novo* assembled transcriptome a little pre-processing is required. Instead of the genome a fasta +file containing **coding** sequences can be used (remove UTRs). Using the helper script fasta_to_gff.py a gff file suited +for LSTrAP can be generated. ### parse_gff.py From 6c36e085ec08a3aa6108867cc1d134c3b3b66839 Mon Sep 17 00:00:00 2001 From: sepro Date: Wed, 26 Jul 2017 10:31:00 +0200 Subject: [PATCH 18/18] forcing commit after merge --- cluster/__init__.py | 1 + helper/pca_plot.py | 1 + 2 files changed, 2 insertions(+) diff --git a/cluster/__init__.py b/cluster/__init__.py index bb8bc36..302f089 100644 --- a/cluster/__init__.py +++ b/cluster/__init__.py @@ -12,6 +12,7 @@ def detect_cluster_system(): :return: string "SBE", "PBS" or "other" """ + try: which_output = check_output(["which", "sge_qmaster"], stderr=DEVNULL).decode("utf-8") diff --git a/helper/pca_plot.py b/helper/pca_plot.py index 3444afd..21d5a7e 100644 --- a/helper/pca_plot.py +++ b/helper/pca_plot.py @@ -16,6 +16,7 @@ def run_pca(expression): # Load Expression data + df = pd.read_table(expression, header=0, index_col=0) run_ids = list(df.columns.values) dataMatrix = np.transpose(np.array(df))