diff --git a/workflow/conf/biohpc.config b/workflow/conf/biohpc.config index 07407ef8c8d5c3b4f34f0ade0b9ff2c8d78b69ce..739fce695526dc7434cd5cbc0b42c38e4ed32bd1 100644 --- a/workflow/conf/biohpc.config +++ b/workflow/conf/biohpc.config @@ -60,7 +60,14 @@ process { module = ['python/3.6.1-2-anaconda', 'meme/4.11.1-gcc-openmpi', 'bedtools/2.26.0'] cpus = 32 } - + withName: softwareVersions { + module = ['python/3.6.1-2-anaconda'] + executor = 'local' + } + withName: softwareReport { + module = ['python/3.6.1-2-anaconda'] + executor = 'local' + } } params { diff --git a/workflow/main.nf b/workflow/main.nf index ceed1c12bc6a9dd939199e32e7197bffc6df8db2..513c4b55164881a06eb256de0e79d766352fd973 100644 --- a/workflow/main.nf +++ b/workflow/main.nf @@ -47,6 +47,7 @@ cutoffRatio = params.cutoffRatio outDir = params.outDir extendReadsLen = params.extendReadsLen topPeakCount = params.topPeakCount +references = params.references // Check design file for errors process checkDesignFile { @@ -478,7 +479,7 @@ process diffPeaks { } // Collect Software Versions and references -process softwareVersions { +process softwareReport { input: @@ -495,10 +496,12 @@ process softwareVersions { experimentQCVersions output: - file 'software_versions_mqc.yaml' into softwareVersions + file '*_mqc.yaml' into softwareVersions + file '*_mqc.yaml' into softwareReferences script: """ - software_report.py > software_versions_mqc.yaml + python3 $baseDir/scripts/software_report.py -o software_versions + python3 $baseDir/scripts/generate_references.py -r $references -o software_references """ } diff --git a/workflow/scripts/software_report.py b/workflow/scripts/software_report.py index 5f9abe1aed34ba27b9d5aba0ed334533497a554a..2823bcef1518ed511a68faf215b818a65f14f7a1 100644 --- a/workflow/scripts/software_report.py +++ b/workflow/scripts/software_report.py @@ -6,9 +6,22 @@ from __future__ import print_function from collections import OrderedDict import re +import logging +import argparse +EPILOG = ''' +For more details: + %(prog)s --help +''' -software_regex = { +# SETTINGS + +logger = logging.getLogger(__name__) +logger.addHandler(logging.NullHandler()) +logger.propagate = False +logger.setLevel(logging.INFO) + +SOFTWARE_REGEX = { 'Trim Galore!': ['version_trimgalore.txt', r"version (\S+)"], 'Cutadapt': ['version_cutadapt.txt', r"Version (\S+)"], 'BWA': ['version_bwa.txt', r"Version: (\S+)"], @@ -25,45 +38,72 @@ software_regex = { 'deepTools': ['version_deeptools.txt', r"deeptools (\S+)"], } -results = OrderedDict() -results['Trim Galore!'] = '<span style="color:#999999;\">N/A</span>' -results['Cutadapt'] = '<span style="color:#999999;\">N/A</span>' -results['BWA'] = '<span style="color:#999999;\">N/A</span>' -results['Trim Galore!'] = '<span style="color:#999999;\">N/A</span>' -results['Cutadapt'] = '<span style="color:#999999;\">N/A</span>' -results['BWA'] = '<span style="color:#999999;\">N/A</span>' -results['Samtools'] = '<span style="color:#999999;\">N/A</span>' -results['Sambamba'] = '<span style="color:#999999;\">N/A</span>' -results['BEDTools'] = '<span style="color:#999999;\">N/A</span>' -results['R'] = '<span style="color:#999999;\">N/A</span>' -results['SPP'] = '<span style="color:#999999;\">N/A</span>' -results['MACS2'] = '<span style="color:#999999;\">N/A</span>' -results['bedGraphToBigWig'] = '<span style="color:#999999;\">N/A</span>' -results['ChIPseeker'] = '<span style="color:#999999;\">N/A</span>' -results['MEME-ChIP'] = '<span style="color:#999999;\">N/A</span>' -results['DiffBind'] = '<span style="color:#999999;\">N/A</span>' -results['deepTools'] = '<span style="color:#999999;\">N/A</span>' - -# Search each file using its regex -for k, v in software_regex.items(): - with open(v[0]) as x: - versions = x.read() - match = re.search(v[1], versions) - if match: - results[k] = "v{}".format(match.group(1)) - -# Dump to YAML -print( - ''' - id: 'Software Versions' - section_name: 'Software Versions' - section_href: 'https://git.biohpc.swmed.edu/BICF/Astrocyte/chipseq_analysis/' - plot_type: 'html' - description: 'are collected at run time from the software output.' - data: | - <dl class="dl-horizontal"> - ''' -) -for k, v in results.items(): - print(" <dt>{}</dt><dd>{}</dd>".format(k, v)) -print(" </dl>") + +def get_args(): + '''Define arguments.''' + + parser = argparse.ArgumentParser( + description=__doc__, epilog=EPILOG, + formatter_class=argparse.RawDescriptionHelpFormatter) + + parser.add_argument('-o', '--output', + help="The out file name.", + required=True) + + args = parser.parse_args() + return args + + +def main(): + args = get_args() + output = args.output + + out_filename = output + '_mqc.yaml' + + results = OrderedDict() + results['Trim Galore!'] = '<span style="color:#999999;\">N/A</span>' + results['Cutadapt'] = '<span style="color:#999999;\">N/A</span>' + results['BWA'] = '<span style="color:#999999;\">N/A</span>' + results['Trim Galore!'] = '<span style="color:#999999;\">N/A</span>' + results['Cutadapt'] = '<span style="color:#999999;\">N/A</span>' + results['BWA'] = '<span style="color:#999999;\">N/A</span>' + results['Samtools'] = '<span style="color:#999999;\">N/A</span>' + results['Sambamba'] = '<span style="color:#999999;\">N/A</span>' + results['BEDTools'] = '<span style="color:#999999;\">N/A</span>' + results['R'] = '<span style="color:#999999;\">N/A</span>' + results['SPP'] = '<span style="color:#999999;\">N/A</span>' + results['MACS2'] = '<span style="color:#999999;\">N/A</span>' + results['bedGraphToBigWig'] = '<span style="color:#999999;\">N/A</span>' + results['ChIPseeker'] = '<span style="color:#999999;\">N/A</span>' + results['MEME-ChIP'] = '<span style="color:#999999;\">N/A</span>' + results['DiffBind'] = '<span style="color:#999999;\">N/A</span>' + results['deepTools'] = '<span style="color:#999999;\">N/A</span>' + + # Search each file using its regex + for k, v in SOFTWARE_REGEX.items(): + with open(v[0]) as x: + versions = x.read() + match = re.search(v[1], versions) + if match: + results[k] = "v{}".format(match.group(1)) + + # Dump to YAML + print( + ''' + id: 'Software Versions' + section_name: 'Software Versions' + section_href: 'https://git.biohpc.swmed.edu/BICF/Astrocyte/chipseq_analysis/' + plot_type: 'html' + description: 'are collected at run time from the software output.' + data: | + <dl class="dl-horizontal"> + ''' + , file = open(out_filename, "w")) + + for k, v in results.items(): + print(" <dt>{}</dt><dd>{}</dd>".format(k, v), file = open(out_filename, "a")) + print(" </dl>", file = open(out_filename, "a")) + + +if __name__ == '__main__': + main()