diff --git a/conf/modules.config b/conf/modules.config index ff144483df14fede36406729bbfb8541139a9f82..7f4fceaf6bc79b61b4d142dcc4765feb4d13e446 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -100,7 +100,22 @@ process { withName: 'MERGE_VALID_INTERACTION' { publishDir = [ - path: { "${params.outdir}/hicpro/valid_pairs" }, + [ + path: { "${params.outdir}/hicpro/stats/" }, + mode: 'copy', + pattern: "*stat" + ], + [ + path: { "${params.outdir}/hicpro/valid_pairs" }, + mode: 'copy', + pattern: "*Pairs" + ] + ] + } + + withName: 'MERGE_STATS' { + publishDir = [ + path: { "${params.outdir}/hicpro/stats" }, mode: 'copy' ] } diff --git a/modules/local/balance.nf~ b/modules/local/balance.nf~ deleted file mode 100644 index 728a04e10a5816ed6b1f76768e9a16c54cfb4543..0000000000000000000000000000000000000000 --- a/modules/local/balance.nf~ +++ /dev/null @@ -1,31 +0,0 @@ -process COOLER_BALANCE { - tag "$meta.id" - label 'process_high' - - conda (params.enable_conda ? "bioconda::cooler=0.8.11" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cooler:0.8.11--pyh3252c3a_0' : - 'quay.io/biocontainers/cooler:0.8.11--pyh3252c3a_0' }" - - input: - tuple val(meta), path(cool) - - output: - tuple val(meta), path("*.cool"), emit: cool - path "versions.yml" , emit: versions - - script: - def args = task.ext.args ?: '' - """ - cp ${cool} ${cool.baseName}_norm.cool - cooler balance \\ - $args \\ - -p ${task.cpus} \\ - ${cool.baseName}_norm.cool - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cooler: \$(cooler --version 2>&1 | sed 's/cooler, version //') - END_VERSIONS - """ -} diff --git a/modules/local/dnase_mapping_stats.nf b/modules/local/hicpro/dnase_mapping_stats.nf similarity index 100% rename from modules/local/dnase_mapping_stats.nf rename to modules/local/hicpro/dnase_mapping_stats.nf diff --git a/modules/local/hicpro/merge_stats.nf b/modules/local/hicpro/merge_stats.nf new file mode 100644 index 0000000000000000000000000000000000000000..2ef759d1c9aa8b97652aef20e404dc3b65d492ec --- /dev/null +++ b/modules/local/hicpro/merge_stats.nf @@ -0,0 +1,20 @@ +process MERGE_STATS { + label 'process_low' + + input: + tuple val(meta), path(fstat) + + output: + path("stats/"), emit:mqc_mstats + path("*stat"), emit:all_mstats + + script: + if ( (fstat =~ /.mapstat/) ){ ext = "mmapstat" } + if ( (fstat =~ /.pairstat/) ){ ext = "mpairstat" } + if ( (fstat =~ /.RSstat/) ){ ext = "mRSstat" } + """ + merge_statfiles.py -f ${fstat} > ${meta.id}.${ext} + mkdir -p stats/${meta.id} + cp ${meta.id}.${ext} stats/${meta.id}/ + """ +} diff --git a/modules/local/hicpro/merge_valid_interaction.nf b/modules/local/hicpro/merge_valid_interaction.nf index 08196756536ed8a398b17569a97acad85a0aaee2..efc29ba1f65f87edb211acb8252b1f563ae15280 100644 --- a/modules/local/hicpro/merge_valid_interaction.nf +++ b/modules/local/hicpro/merge_valid_interaction.nf @@ -8,7 +8,7 @@ process MERGE_VALID_INTERACTION { output: tuple val(meta), path("*.allValidPairs"), emit: valid_pairs path("stats/"), emit:mqc - path("*mergestat"), emit:stats + tuple val(meta), path("*mergestat"), emit:stats script: prefix = meta.id diff --git a/modules/local/makebins.nf~ b/modules/local/makebins.nf~ deleted file mode 100644 index 4d3f307d404ca52338e3e9b429d6a4261983e53a..0000000000000000000000000000000000000000 --- a/modules/local/makebins.nf~ +++ /dev/null @@ -1,30 +0,0 @@ -process COOLER_MAKEBINS { - tag "$meta.id" - label 'process_low' - - conda (params.enable_conda ? "bioconda::cooler=0.8.11" : null) - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cooler:0.8.11--pyh3252c3a_0' : - 'quay.io/biocontainers/cooler:0.8.11--pyh3252c3a_0' }" - - input: - tuple path(chromsizes), val(cool_bin) - - output: - path ("*.bed") , emit: bed - path "versions.yml", emit: versions - - script: - def args = task.ext.args ?: '' - """ - cooler makebins \\ - $args \\ - ${chromsizes} \\ - ${cool_bin} > cooler_bins_${cool_bin}.bed - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - cooler: \$(cooler --version 2>&1 | sed 's/cooler, version //') - END_VERSIONS - """ -} diff --git a/modules/local/merge_stats.nf b/modules/local/merge_stats.nf deleted file mode 100644 index 336baa3df0ad3226113682a61fb5f9a73517b067..0000000000000000000000000000000000000000 --- a/modules/local/merge_stats.nf +++ /dev/null @@ -1,30 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process merge_stats { - tag "$ext" - label 'process_low' - publishDir "${params.outdir}/hicpro/", mode: params.publish_dir_mode, - saveAs: {filename -> if (filename.endsWith("stat")) "stats/$filename"} - - input: - tuple val(prefix), path(fstat) - - output: - path("stats/"), emit:mqc_mstats - path("*stat"), emit:all_mstats - - script: - sample = prefix.toString() - ~/(_R1|_R2|_val_1|_val_2|_1|_2)/ - if ( (fstat =~ /.mapstat/) ){ ext = "mmapstat" } - if ( (fstat =~ /.pairstat/) ){ ext = "mpairstat" } - if ( (fstat =~ /.RSstat/) ){ ext = "mRSstat" } - """ - merge_statfiles.py -f ${fstat} > ${prefix}.${ext} - mkdir -p stats/${sample} - cp ${prefix}.${ext} stats/${sample}/ - """ -} diff --git a/modules/local/cooler_balance.nf b/modules/local/trash/cooler_balance.nf similarity index 100% rename from modules/local/cooler_balance.nf rename to modules/local/trash/cooler_balance.nf diff --git a/modules/local/cooler_raw.nf b/modules/local/trash/cooler_raw.nf similarity index 100% rename from modules/local/cooler_raw.nf rename to modules/local/trash/cooler_raw.nf diff --git a/modules/local/cooler_zoomify.nf b/modules/local/trash/cooler_zoomify.nf similarity index 100% rename from modules/local/cooler_zoomify.nf rename to modules/local/trash/cooler_zoomify.nf diff --git a/modules/local/makeBowtie2Index.nf b/modules/local/trash/makeBowtie2Index.nf similarity index 100% rename from modules/local/makeBowtie2Index.nf rename to modules/local/trash/makeBowtie2Index.nf diff --git a/nextflow.config b/nextflow.config index 586c6b4ff1a5cda58efb1f5539d409ccb49b3297..1a413b7365ae1222599a798317cd6adb4d049a01 100644 --- a/nextflow.config +++ b/nextflow.config @@ -68,7 +68,7 @@ params { // Contact maps save_raw_maps = false bin_size = '1000000' - res_zoomify = '5000' + res_zoomify = false hicpro_maps = false ice_max_iter = 100 ice_filter_low_count_perc = 0.02 diff --git a/subworkflows/local/cooler.nf b/subworkflows/local/cooler.nf index e24aed4eddb1063285c0df44fba6f0000d5245d0..897b0575e827e731b2e703ea0c73d2f9a2bd470c 100644 --- a/subworkflows/local/cooler.nf +++ b/subworkflows/local/cooler.nf @@ -28,7 +28,8 @@ workflow COOLER { COOLER_MAKEBINS( chromsize.combine(cool_bins) ) - + ch_versions = ch_versions.mix(COOLER_MAKEBINS.out.versions) + //***************************************** // BUILD COOL FILE PER RESOLUTION // [meta, pairs, resolution] @@ -37,14 +38,21 @@ workflow COOLER { pairs.combine(cool_bins), chromsize.collect() ) + ch_versions = ch_versions.mix(COOLER_CLOAD.out.versions) COOLER_BALANCE( COOLER_CLOAD.out.cool ) + ch_versions = ch_versions.mix(COOLER_BALANCE.out.versions) // Zoomify at minimum bin resolution + if (!params.res_zoomify){ + ch_res_zoomify = cool_bins.min() + }else{ + ch_res_zoomify = params.res_zoomify + } COOLER_CLOAD.out.cool - .combine(cool_bins.min()) + .combine(ch_res_zoomify) .filter{ it [1] == it[3] } .map{it->[it[0], it[2]]} .set{ch_cool_zoomify} @@ -52,6 +60,7 @@ workflow COOLER { COOLER_ZOOMIFY( ch_cool_zoomify ) + ch_versions = ch_versions.mix(COOLER_ZOOMIFY.out.versions) //***************************************** // DUMP DATA @@ -60,6 +69,7 @@ workflow COOLER { COOLER_DUMP( COOLER_BALANCE.out.cool.map{[it[0], "", it[2]]} ) + ch_versions = ch_versions.mix(COOLER_DUMP.out.versions) //COOLER_DUMP( // COOLER_ZOOMIFY.out.mcool.combine(cool_bins).map{it->[it[0], it[2], it[1]]} @@ -68,6 +78,7 @@ workflow COOLER { SPLIT_COOLER_DUMP( COOLER_DUMP.out.bedpe ) + ch_versions = ch_versions.mix(SPLIT_COOLER_DUMP.out.versions) emit: versions = ch_versions diff --git a/subworkflows/local/hicpro.nf b/subworkflows/local/hicpro.nf index 7ea1bcceb646c83832706dd6e1c415ddcfe2d2e0..3869d4df9de7538ad3b2fad09296e1cf4e9d9538 100644 --- a/subworkflows/local/hicpro.nf +++ b/subworkflows/local/hicpro.nf @@ -7,6 +7,7 @@ include { HICPRO_MAPPING } from './hicpro_mapping' include { GET_VALID_INTERACTION } from '../../modules/local/hicpro/get_valid_interaction' include { MERGE_VALID_INTERACTION } from '../../modules/local/hicpro/merge_valid_interaction' +include { MERGE_STATS } from '../../modules/local/hicpro/merge_stats' include { HICPRO2PAIRS } from '../../modules/local/hicpro/hicpro2pairs' include { BUILD_CONTACT_MAPS } from '../../modules/local/hicpro/build_contact_maps' include { ICE_NORMALIZATION } from '../../modules/local/hicpro/run_ice' @@ -30,26 +31,39 @@ workflow HICPRO { index, ligation_site ) + ch_versions = ch_versions.mix(HICPRO_MAPPING.out.versions) // get valid interaction GET_VALID_INTERACTION ( HICPRO_MAPPING.out.bam, fragments ) - + //TODO ch_versions = ch_versions.mix(GET_VALID_INTERACTION.out.versions) + // merge valid interactions and remove duplicates MERGE_VALID_INTERACTION ( GET_VALID_INTERACTION.out.valid_pairs ) + // TODO ch_versions = ch_versions.mix(MERGE_VALID_INTERACTION.out.versions) + + // merge stats + HICPRO_MAPPING.out.mapstats.groupTuple() + .concat(HICPRO_MAPPING.out.pairstats.groupTuple(), + GET_VALID_INTERACTION.out.stats.groupTuple()) + .view() + .set{ ch_hicpro_stats } + + MERGE_STATS( + ch_hicpro_stats + ) + //TODO ch_versions = ch_versions.mix(MERGE_STATS.out.versions) // convert to pairs HICPRO2PAIRS ( MERGE_VALID_INTERACTION.out.valid_pairs, chrsize ) - - //merge stats - // TODO + //TODO ch_versions = ch_versions.mix(HICPRO2PAIRS.out.versions) if (params.hicpro_maps){ @@ -58,11 +72,13 @@ workflow HICPRO { MERGE_VALID_INTERACTION.out.valid_pairs.combine(map_res), chrsize.collect() ) - + //TODO ch_versions = ch_versions.mix(BUILD_CONTACT_MAPS.out.versions) + // run_ice ICE_NORMALIZATION( BUILD_CONTACT_MAPS.out.maps ) + //TODO ch_versions = ch_versions.mix(ICE_NORMALIZATION.out.versions) } emit: diff --git a/subworkflows/local/hicpro_mapping.nf b/subworkflows/local/hicpro_mapping.nf index daa53c67306c0e79d7c4ec72ff7dd59394daa97e..0add95df88cd7fdc4bf6ce5538969cf221fcb116 100644 --- a/subworkflows/local/hicpro_mapping.nf +++ b/subworkflows/local/hicpro_mapping.nf @@ -84,6 +84,7 @@ workflow HICPRO_MAPPING { MERGE_BOWTIE2( ch_bowtie2_align ) + //TODO ch_versions = ch_versions.mix(MERGE_BOWTIE2.out.versions) // Combine mates MERGE_BOWTIE2.out.bam @@ -95,8 +96,11 @@ workflow HICPRO_MAPPING { COMBINE_MATES ( ch_bams ) - + //TODO ch_versions = ch_versions.mix(COMBINE_MATES.out.versions) + emit: versions = ch_versions bam = COMBINE_MATES.out.bam + mapstats = MERGE_BOWTIE2.out.stats + pairstats = COMBINE_MATES.out.stats }