cwlVersion: v1.0 class: Workflow requirements: - class: SubworkflowFeatureRequirement - class: ScatterFeatureRequirement - class: StepInputExpressionRequirement - class: InlineJavascriptRequirement - class: MultipleInputFeatureRequirement 'sd:metadata': - "../metadata/chipseq-header.cwl" 'sd:upstream': genome_indices: "genome-indices.cwl" control_file: "trim-chipseq-pe.cwl" inputs: # MAIN # 1 | 2 | 3 | 4 # --------------------------------------------------------------- #| indices_folder | control_file | # --------------------------------------------------------------- #| broad_peak | | # --------------------------------------------------------------- #| fastq_file_upstream | fastq_file_downstream | # --------------------------------------------------------------- indices_folder: type: Directory 'sd:upstreamSource': "genome_indices/bowtie_indices" label: "Indexed genome folder (bowtie)" doc: "Path to indexed genome folder by **bowtie**" annotation_file: type: File 'sd:upstreamSource': "genome_indices/annotation" label: "Annotation file" format: "http://edamontology.org/format_3475" doc: "Tab-separated annotation file" genome_size: type: string 'sd:upstreamSource': "genome_indices/genome_size" label: "Effective genome size" doc: "MACS2 effective genome size: hs, mm, ce, dm or number, for example 2.7e9" chrom_length: type: File 'sd:upstreamSource': "genome_indices/chrom_length" label: "Chromosomes length file" format: "http://edamontology.org/format_2330" doc: "Chromosomes length file" control_file: type: File? default: null 'sd:upstreamSource': "control_file/bambai_pair" 'sd:localLabel': true label: "Use experiment as a control" format: "http://edamontology.org/format_2572" doc: "Use experiment as a control for MACS2 peak calling" broad_peak: type: boolean label: "Callpeak broad" doc: "Set to call broad peak for MACS2" fastq_file_upstream: type: File label: "FASTQ upstream input file" format: "http://edamontology.org/format_1930" doc: "Upstream reads data in a FASTQ format, received after paired end sequencing" fastq_file_downstream: type: File label: "FASTQ downstream input file" format: "http://edamontology.org/format_1930" doc: "Downstream reads data in a FASTQ format, received after paired end sequencing" # ADVANCED # 1 | 2 | 3 | 4 # --------------------------------------------------------------- #| exp_fragment_size | force_fragment_size | # --------------------------------------------------------------- #| clip_3p_end | clip_5p_end | # --------------------------------------------------------------- #| remove_duplicates | | # --------------------------------------------------------------- exp_fragment_size: type: int? default: 150 'sd:layout': advanced: true label: "Expected fragment size" doc: "Expected fragment size for MACS2" force_fragment_size: type: boolean? default: false 'sd:layout': advanced: true label: "Force fragment size" doc: "Force MACS2 to use exp_fragment_size" clip_3p_end: type: int? default: 0 'sd:layout': advanced: true label: "Clip from 3p end" doc: "Number of bases to clip from the 3p end" clip_5p_end: type: int? default: 0 'sd:layout': advanced: true label: "Clip from 5p end" doc: "Number of bases to clip from the 5p end" remove_duplicates: type: boolean? default: false 'sd:layout': advanced: true label: "Remove duplicates" doc: "Calls samtools rmdup to remove duplicates from sortesd BAM file" # SYSTEM DEPENDENT threads: type: int? default: 2 'sd:layout': advanced: true doc: "Number of threads for those steps that support multithreading" label: "Number of threads" outputs: bigwig: type: File format: "http://edamontology.org/format_3006" label: "BigWig file" doc: "Generated BigWig file" outputSource: bam_to_bigwig/bigwig_file fastx_statistics_upstream: type: File label: "FASTQ upstream statistics" format: "http://edamontology.org/format_2330" doc: "fastx_quality_stats generated upstream FASTQ quality statistics file" outputSource: fastx_quality_stats_upstream/statistics_file 'sd:visualPlugins': - line: Title: 'Base frequency plot' xAxisTitle: 'Nucleotide position' yAxisTitle: 'Frequency' colors: ["#b3de69", "#99c0db", "#fb8072", "#fdc381", "#888888"] data: [$12, $13, $14, $15, $16] fastx_statistics_downstream: type: File label: "FASTQ downstream statistics" format: "http://edamontology.org/format_2330" doc: "fastx_quality_stats generated downstream FASTQ quality statistics file" outputSource: fastx_quality_stats_downstream/statistics_file 'sd:visualPlugins': - line: Title: 'Base frequency plot' xAxisTitle: 'Nucleotide position' yAxisTitle: 'Frequency' colors: ["#b3de69", "#99c0db", "#fb8072", "#fdc381", "#888888"] data: [$12, $13, $14, $15, $16] bowtie_log: type: File label: "BOWTIE alignment log" format: "http://edamontology.org/format_2330" doc: "BOWTIE generated alignment log" outputSource: bowtie_aligner/log_file iaintersect_log: type: File label: "Island intersect log" format: "http://edamontology.org/format_3475" doc: "Iaintersect generated log" outputSource: island_intersect/log_file iaintersect_result: type: File label: "Island intersect results" format: "http://edamontology.org/format_3475" doc: "Iaintersect generated results" outputSource: island_intersect/result_file atdp_log: type: File label: "ATDP log" format: "http://edamontology.org/format_3475" doc: "Average Tag Density generated log" outputSource: average_tag_density/log_file atdp_result: type: File label: "ATDP results" format: "http://edamontology.org/format_3475" doc: "Average Tag Density generated results" outputSource: average_tag_density/result_file samtools_rmdup_log: type: File label: "Remove duplicates log" format: "http://edamontology.org/format_2330" doc: "Samtools rmdup generated log" outputSource: samtools_rmdup/rmdup_log bambai_pair: type: File format: "http://edamontology.org/format_2572" label: "Coordinate sorted BAM alignment file (+index BAI)" doc: "Coordinate sorted BAM file and BAI index file" outputSource: samtools_sort_index_after_rmdup/bam_bai_pair macs2_called_peaks: type: File? label: "Called peaks" format: "http://edamontology.org/format_3468" doc: "XLS file to include information about called peaks" outputSource: macs2_callpeak/peak_xls_file macs2_narrow_peaks: type: File? label: "Narrow peaks" format: "http://edamontology.org/format_3613" doc: "Contains the peak locations together with peak summit, pvalue and qvalue" outputSource: macs2_callpeak/narrow_peak_file macs2_broad_peaks: type: File? label: "Broad peaks" format: "http://edamontology.org/format_3614" doc: "Contains the peak locations together with peak summit, pvalue and qvalue" outputSource: macs2_callpeak/broad_peak_file macs2_peak_summits: type: File? label: "Peak summits" format: "http://edamontology.org/format_3003" doc: "Contains the peak summits locations for every peaks" outputSource: macs2_callpeak/peak_summits_file macs2_moder_r: type: File? label: "MACS2 generated R script" format: "http://edamontology.org/format_2330" doc: "R script to produce a PDF image about the model based on your data" outputSource: macs2_callpeak/moder_r_file macs2_gapped_peak: type: File? label: "Gapped peak" format: "http://edamontology.org/format_3586" doc: "Contains both the broad region and narrow peaks" outputSource: macs2_callpeak/gapped_peak_file macs2_log: type: File? label: "MACS2 log" format: "http://edamontology.org/format_2330" doc: "MACS2 output log" outputSource: macs2_callpeak/macs_log get_stat_log: type: File? label: "Bowtie & Samtools Rmdup combined log" format: "http://edamontology.org/format_2330" doc: "Processed and combined Bowtie aligner and Samtools rmdup log" outputSource: get_stat/output_file 'sd:preview': 'sd:visualPlugins': - pie: colors: ['#b3de69', '#99c0db', '#fb8072', '#fdc381'] data: [$2, $3, $4, $5] macs2_fragment_stat: type: File? label: "FRAGMENT, FRAGMENTE, ISLANDS" format: "http://edamontology.org/format_2330" doc: "fragment, calculated fragment, islands count from MACS2 results" outputSource: macs2_callpeak/macs2_stat_file trim_report_upstream: type: File label: "TrimGalore report Upstream" doc: "TrimGalore generated log for upstream FASTQ" outputSource: trim_fastq/report_file trim_report_downstream: type: File label: "TrimGalore report Downstream" doc: "TrimGalore generated log for downstream FASTQ" outputSource: trim_fastq/report_file_pair steps: extract_fastq_upstream: run: ../tools/extract-fastq.cwl in: compressed_file: fastq_file_upstream out: [fastq_file] extract_fastq_downstream: run: ../tools/extract-fastq.cwl in: compressed_file: fastq_file_downstream out: [fastq_file] trim_fastq: run: ../tools/trimgalore.cwl in: input_file: extract_fastq_upstream/fastq_file input_file_pair: extract_fastq_downstream/fastq_file dont_gzip: default: true length: default: 30 trim1: default: true paired: default: true out: - trimmed_file - trimmed_file_pair - report_file - report_file_pair rename_upstream: run: ../tools/rename.cwl in: source_file: trim_fastq/trimmed_file target_filename: source: extract_fastq_upstream/fastq_file valueFrom: $(self.basename) out: - target_file rename_downstream: run: ../tools/rename.cwl in: source_file: trim_fastq/trimmed_file_pair target_filename: source: extract_fastq_downstream/fastq_file valueFrom: $(self.basename) out: - target_file fastx_quality_stats_upstream: run: ../tools/fastx-quality-stats.cwl in: input_file: rename_upstream/target_file out: [statistics_file] fastx_quality_stats_downstream: run: ../tools/fastx-quality-stats.cwl in: input_file: rename_downstream/target_file out: [statistics_file] bowtie_aligner: run: ../tools/bowtie-alignreads.cwl in: upstream_filelist: rename_upstream/target_file downstream_filelist: rename_downstream/target_file indices_folder: indices_folder clip_3p_end: clip_3p_end clip_5p_end: clip_5p_end v: default: 3 m: default: 1 best: default: true strata: default: true sam: default: true threads: threads q: default: true out: [sam_file, log_file] samtools_sort_index: run: ../tools/samtools-sort-index.cwl in: sort_input: bowtie_aligner/sam_file threads: threads out: [bam_bai_pair] samtools_rmdup: run: ../tools/samtools-rmdup.cwl in: trigger: remove_duplicates bam_file: samtools_sort_index/bam_bai_pair out: [rmdup_output, rmdup_log] samtools_sort_index_after_rmdup: run: ../tools/samtools-sort-index.cwl in: trigger: remove_duplicates sort_input: samtools_rmdup/rmdup_output threads: threads out: [bam_bai_pair] macs2_callpeak: run: ../tools/macs2-callpeak-biowardrobe-only.cwl in: treatment_file: samtools_sort_index_after_rmdup/bam_bai_pair control_file: control_file nolambda: source: control_file valueFrom: $(!self) genome_size: genome_size mfold: default: "4 40" verbose: default: 3 nomodel: force_fragment_size extsize: exp_fragment_size bw: exp_fragment_size broad: broad_peak call_summits: source: broad_peak valueFrom: $(!self) keep_dup: default: auto q_value: default: 0.05 format_mode: default: BAMPE buffer_size: default: 10000 out: - peak_xls_file - narrow_peak_file - peak_summits_file - broad_peak_file - moder_r_file - gapped_peak_file - treat_pileup_bdg_file - control_lambda_bdg_file - macs_log - macs2_stat_file - macs2_fragments_calculated bam_to_bigwig: run: ../subworkflows/bam-bedgraph-bigwig.cwl in: bam_file: samtools_sort_index_after_rmdup/bam_bai_pair chrom_length_file: chrom_length mapped_reads_number: get_stat/mapped_reads fragment_size: macs2_callpeak/macs2_fragments_calculated pairchip: default: true out: [bigwig_file] get_stat: run: ../tools/python-get-stat-chipseq.cwl in: bowtie_log: bowtie_aligner/log_file rmdup_log: samtools_rmdup/rmdup_log out: - output_file - mapped_reads island_intersect: run: ../tools/iaintersect.cwl in: input_filename: macs2_callpeak/peak_xls_file annotation_filename: annotation_file promoter_bp: default: 1000 out: [result_file, log_file] average_tag_density: run: ../tools/atdp.cwl in: input_file: samtools_sort_index_after_rmdup/bam_bai_pair annotation_filename: annotation_file fragmentsize_bp: macs2_callpeak/macs2_fragments_calculated avd_window_bp: default: 5000 avd_smooth_bp: default: 50 ignore_chr: default: chrM double_chr: default: "chrX chrY" avd_heat_window_bp: default: 200 mapped_reads: get_stat/mapped_reads out: [result_file, log_file] $namespaces: s: http://schema.org/ $schemas: - http://schema.org/docs/schema_org_rdfa.html s:name: "Trim Galore ChIP-Seq pipeline paired-end" s:downloadUrl: https://raw.githubusercontent.com/datirium/workflows/master/workflows/datirium/trim-chipseq-pe.cwl s:codeRepository: https://github.com/datirium/workflows s:license: http://www.apache.org/licenses/LICENSE-2.0 s:isPartOf: class: s:CreativeWork s:name: Common Workflow Language s:url: http://commonwl.org/ s:creator: - class: s:Organization s:legalName: "Cincinnati Children's Hospital Medical Center" s:location: - class: s:PostalAddress s:addressCountry: "USA" s:addressLocality: "Cincinnati" s:addressRegion: "OH" s:postalCode: "45229" s:streetAddress: "3333 Burnet Ave" s:telephone: "+1(513)636-4200" s:logo: "https://www.cincinnatichildrens.org/-/media/cincinnati%20childrens/global%20shared/childrens-logo-new.png" s:department: - class: s:Organization s:legalName: "Allergy and Immunology" s:department: - class: s:Organization s:legalName: "Barski Research Lab" s:member: - class: s:Person s:name: Michael Kotliar s:email: mailto:michael.kotliar@cchmc.org s:sameAs: - id: http://orcid.org/0000-0002-6486-3898 doc: > ChIP-Seq basic analysis workflow for a paired-end experiment with Trim Galore. s:about: | The original [BioWardrobe's](https://biowardrobe.com) [PubMed ID:26248465](https://www.ncbi.nlm.nih.gov/pubmed/26248465) **ChIP-Seq** basic analysis workflow for a **paired-end** experiment with Trim Galore. _Trim Galore_ is a wrapper around [Cutadapt](https://github.com/marcelm/cutadapt) and [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) to consistently apply adapter and quality trimming to FastQ files, with extra functionality for RRBS data. A [FASTQ](http://maq.sourceforge.net/fastq.shtml) input file has to be provided. In outputs it returns coordinate sorted BAM file alongside with index BAI file, quality statistics for both the input FASTQ files, reads coverage in a form of BigWig file, peaks calling data in a form of narrowPeak or broadPeak files, islands with the assigned nearest genes and region type, data for average tag density plot (on the base of BAM file). Workflow starts with running fastx_quality_stats (steps fastx_quality_stats_upstream and fastx_quality_stats_downstream) from FASTX-Toolkit to calculate quality statistics for both upstream and downstream input FASTQ files. At the same time Bowtie is used to align reads from input FASTQ files to reference genome (Step bowtie_aligner). The output of this step is unsorted SAM file which is being sorted and indexed by samtools sort and samtools index (Step samtools_sort_index). Depending on workflow’s input parameters indexed and sorted BAM file could be processed by samtools rmdup (Step samtools_rmdup) to remove all possible read duplicates. In a case when removing duplicates is not necessary the step returns original input BAM and BAI files without any processing. If the duplicates were removed the following step (Step samtools_sort_index_after_rmdup) reruns samtools sort and samtools index with BAM and BAI files, if not - the step returns original unchanged input files. Right after that macs2 callpeak performs peak calling (Step macs2_callpeak). On the base of returned outputs the next step (Step macs2_island_count) calculates the number of islands and estimated fragment size. If the last one is less that 80 (hardcoded in a workflow) macs2 callpeak is rerun again with forced fixed fragment size value (Step macs2_callpeak_forced). If at the very beginning it was set in workflow input parameters to force run peak calling with fixed fragment size, this step is skipped and the original peak calling results are saved. In the next step workflow again calculates the number of islands and estimated fragment size (Step macs2_island_count_forced) for the data obtained from macs2_callpeak_forced step. If the last one was skipped the results from macs2_island_count_forced step are equal to the ones obtained from macs2_island_count step. Next step (Step macs2_stat) is used to define which of the islands and estimated fragment size should be used in workflow output: either from macs2_island_count step or from macs2_island_count_forced step. If input trigger of this step is set to True it means that macs2_callpeak_forced step was run and it returned different from macs2_callpeak step results, so macs2_stat step should return [fragments_new, fragments_old, islands_new], if trigger is False the step returns [fragments_old, fragments_old, islands_old], where sufix "old" defines results obtained from macs2_island_count step and sufix "new" - from macs2_island_count_forced step. The following two steps (Step bamtools_stats and bam_to_bigwig) are used to calculate coverage on the base of input BAM file and save it in BigWig format. For that purpose bamtools stats returns the number of mapped reads number which is then used as scaling factor by bedtools genomecov when it performs coverage calculation and saves it in BED format. The last one is then being sorted and converted to BigWig format by bedGraphToBigWig tool from UCSC utilities. Step get_stat is used to return a text file with statistics in a form of [TOTAL, ALIGNED, SUPRESSED, USED] reads count. Step island_intersect assigns genes and regions to the islands obtained from macs2_callpeak_forced. Step average_tag_density is used to calculate data for average tag density plot on the base of BAM file.