diff --git a/conf/hicstuff.config b/conf/hicstuff.config deleted file mode 100644 index 55f6a237b70f04dca2f026b5e272bb42369cfec3..0000000000000000000000000000000000000000 --- a/conf/hicstuff.config +++ /dev/null @@ -1,402 +0,0 @@ -params { - - // Input options - input = null - - - // References - genome = null - igenomes_base = 's3://ngi-igenomes/igenomes' - igenomes_ignore = false - chromosome_size = null - restriction_fragments = null - save_reference = false - - // Mapping - split_fastq = false - fastq_chunks_size = 20000000 - save_interaction_bam = false - save_aligned_intermediates = false - bwt2_opts_end2end = '--very-sensitive -L 30 --score-min L,-0.6,-0.2 --end-to-end --reorder' - bwt2_opts_trimmed = '--very-sensitive -L 20 --score-min L,-0.6,-0.2 --end-to-end --reorder' - keep_dups = false - keep_multi = false - min_mapq = 10 - - // Digestion Hi-C - digestion = null - ligation_site = null - restriction_site = null - digest { - 'hindiii'{ - restriction_site='A^AGCTT' - ligation_site='AAGCTAGCTT' - } - 'mboi' { - restriction_site='^GATC' - ligation_site='GATCGATC' - } - 'dpnii' { - restriction_site='^GATC' - ligation_site='GATCGATC' - } - 'arima' { - restriction_site='^GATC,G^ANTC' - ligation_site='GATCGATC,GATCANTC,GANTGATC,GANTANTC' - } - } - - min_restriction_fragment_size = 0 - max_restriction_fragment_size = 0 - min_insert_size = 0 - max_insert_size = 0 - save_pairs_intermediates = false - - // Dnase Hi-C - dnase = false - min_cis_dist = 0 - - // Contact maps - save_raw_maps = false - bin_size = '1000000' - res_zoomify = null - hicpro_maps = false - ice_max_iter = 100 - ice_filter_low_count_perc = 0.02 - ice_filter_high_count_perc = 0 - ice_eps = 0.1 - - // Downstream Analysis - res_dist_decay = '250000' - tads_caller = 'insulation' - res_tads = '40000' - res_compartments = '250000' - - // Workflow - skip_maps = false - skip_balancing = false - skip_mcool = false - skip_dist_decay = false - skip_compartments = false - skip_tads = false - skip_multiqc = false - - // MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' - multiqc_methods_description = null - - // Boilerplate options - outdir = '${params.outdir}' - tracedir = "${params.outdir}/pipeline_info" - publish_dir_mode = 'copy' - email = null - email_on_fail = null - plaintext_email = false - monochrome_logs = false - hook_url = null - help = false - version = false - validate_params = true - show_hidden_params = false - schema_ignore_params = 'genomes,digest' - - // Config options - custom_config_version = 'master' - custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - config_profile_description = null - config_profile_contact = null - config_profile_url = null - config_profile_name = null - - - // Max resource options - // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - - // Hicstuff - hicstuff_bwt2_align_opts = '--very-sensitive-local' - hicstuff_min_size = 0 - hicstuff_circular = 'false' - hicstuff_output_contigs = 'info_contigs.txt' - hicstuff_output_frags = 'fragments_list.txt' - hicstuff_frags_plot = 'false' - hicstuff_frags_plot_path = 'frags_hist.pdf' - hicstuff_valid_pairs = 'valid.pairs' - hicstuff_valid_idx = 'valid_idx.pairs' - hicstuff_min_qual = 30 - hicstuff_matrix = 'abs_fragments_contacts_weighted.txt' - hicstuff_bin = 10000 - hicstuff_valid_idx_filtered = 'valid_idx_filtered.pairs' - hicstuff_plot_events = 'false' - hicstuff_pie_plot = 'distrib' - hicstuff_dist_plot = 'dist' - hicstuff_centro_file = 'None' //give absolute path or 'None' - hicstuff_base = 1.1 - hicstuff_distance_out_file = 'distance_law.txt' - hicstuff_rm_centro = 'None' //int or 'None' - hicstuff_distance_plot = 'false' - hicstuff_distance_out_plot = 'plot_distance_law.pdf' - hicstuff_filter_pcr_out_file = 'valid_idx_pcrfree.pairs' - - //Hicstuff optional modules - filter_event = false - distance_law = false - filter_pcr = false - filter_pcr_picard = true - - workflow = 'hicstuff' -} - -process { - //Default - publishDir = [ - path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: 'copy', - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - - withName: 'BOWTIE2_ALIGNMENT' { - ext.prefix = { "${meta.id}_${meta.chunk}_${meta.mates}" } - ext.args = params.hicstuff_bwt2_align_opts - publishDir = [ - path: { "${params.outdir}/hicstuff/reads"}, - mode: 'copy' - ] - } - - withName: 'FRAGMENT_ENZYME' { - ext.args = { [ - " -m ${params.hicstuff_min_size}", - " -c ${params.hicstuff_circular}", - " -o ${params.hicstuff_output_contigs}", - " -f ${params.hicstuff_output_frags}", - " -p ${params.hicstuff_frags_plot}", - " -g ${params.hicstuff_frags_plot_path}" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/hicstuff/fragment_enzyme" }, - mode: 'copy' - ] - } - - withName: 'BAM2PAIRS' { - ext.pairs = params.hicstuff_valid_pairs - ext.index = params.hicstuff_valid_idx - ext.args = { [ - " -q ${params.hicstuff_min_qual}", - " -c ${params.hicstuff_circular}" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/hicstuff/pairs" }, - mode: 'copy' - ] - } - - withName: 'FILTER_EVENT' { - ext.args = { [ - " -o ${params.hicstuff_valid_idx_filtered}", - " --plot ${params.hicstuff_plot_events}", - " -d ${params.hicstuff_dist_plot}", - " -q ${params.hicstuff_pie_plot}" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/hicstuff/pairs" }, - mode: 'copy' - ] - } - - withName: 'DISTANCE_LAW' { - ext.args = { [ - " -c ${params.hicstuff_centro_file}", - " -b ${params.hicstuff_base}", - " -o ${params.hicstuff_distance_out_file}", - " -u ${params.hicstuff_circular}", - " -r ${params.hicstuff_rm_centro}", - " -l ${params.hicstuff_distance_plot}", - " -d ${params.hicstuff_distance_out_plot}" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/hicstuff/pairs" }, - mode: 'copy' - ] - } - - withName: 'FILTER_PCR' { - ext.args = { [ - "-o ${params.hicstuff_filter_pcr_out_file}" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/hicstuff/pairs" }, - mode: 'copy' - ] - } - - withName: 'GATK4_MARKDUPLICATES' { - ext.prefix = { "${meta.id}_${meta.chunk}_${meta.mates}.bam" } - ext.args = { [ - "--REMOVE_DUPLICATES true" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/gatk4/bam" }, - mode: 'copy' - ] - } - - withName: 'PICARD_MARKDUPLICATES' { - ext.prefix = { "${meta.id}_${meta.chunk}_${meta.mates}" } - ext.args = { [ - "--REMOVE_DUPLICATES true" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/picard/bam" }, - mode: 'copy' - ] - } - - withName: 'SAMTOOLS_SORT' { - ext.prefix = { "${meta.id}_${meta.chunk}_${meta.mates}_sorted" } - ext.args = { [ - "" - ].join('').trim() } - } - - withName: 'SAMTOOLS_SORT_N' { - ext.prefix = { "${meta.id}_${meta.chunk}_${meta.mates}_nsorted" } - ext.args = { [ - "-n" - ].join('').trim() } - publishDir = [ - path: { "${params.outdir}/gatk4/bam" }, - mode: 'copy' - ] - } - - withName: 'SAMTOOLS_INDEX' { - ext.args = { [ - "" - ].join('').trim() } - } - - withName: 'BUILD_MATRIX' { - ext.args = params.hicstuff_matrix - publishDir = [ - path: { "${params.outdir}/hicstuff/matrix" }, - mode: 'copy' - ] - } - withName: 'BUILD_MATRIX_COOL' { - ext.args = params.hicstuff_matrix - publishDir = [ - path: { "${params.outdir}/hicstuff/matrix" }, - mode: 'copy' - ] - } - withName: 'BUILD_MATRIX_COOL_ALT' { - ext.outname = params.hicstuff_matrix - ext.bin = params.hicstuff_bin - ext.args = {"-c1 2 -p1 3 -p2 4 -c2 5"} - publishDir = [ - path: { "${params.outdir}/hicstuff/matrix" }, - mode: 'copy' - ] - } - - //********************************************** - // PREPARE_GENOME - withName: 'BOWTIE2_BUILD' { - publishDir = [ - path: { "${params.outdir}/genome/bowtie2_index" }, - mode: 'copy' - ] - } - - withName: 'CUSTOM_GETCHROMSIZES' { - publishDir = [ - path: { "${params.outdir}/genome" }, - mode: 'copy' - ] - } - - withName: 'GET_RESTRICTION_FRAGMENTS' { - publishDir = [ - path: { "${params.outdir}/genome" }, - mode: 'copy' - ] - } - -} - -profiles { - debug { process.beforeScript = 'echo $HOSTNAME' } - conda { - conda.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - mamba { - conda.enabled = true - conda.useMamba = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - docker { - docker.enabled = true - docker.registry = 'quay.io' - docker.userEmulation = true - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - arm { - docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' - } - singularity { - singularity.enabled = true - singularity.autoMounts = true - docker.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - podman { - podman.enabled = true - docker.enabled = false - singularity.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - shifter { - shifter.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - charliecloud.enabled = false - } - charliecloud { - charliecloud.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - } - gitpod { - executor.name = 'local' - executor.cpus = 16 - executor.memory = 60.GB - } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } -} -includeConfig 'base.config' diff --git a/main.nf b/main.nf index 942feda8495cb7decfaafdb3d01163461d4cbab9..82aaf0f200b77db6710472f821c715376d2e5668 100644 --- a/main.nf +++ b/main.nf @@ -35,18 +35,12 @@ WorkflowMain.initialise(workflow, params, log) */ include { HIC } from './workflows/hic' -include { HICSTUFF } from './workflows/hicstuff' // // WORKFLOW: Run main nf-core/hic analysis pipeline // workflow NFCORE_HIC { - if (params.workflow == "hicpro" ){ - HIC () - } - else if ( params.workflow == "hicstuff") { - HICSTUFF () - } + HIC () } /* diff --git a/subworkflows/local/hicstuff_sub.nf b/subworkflows/local/hicstuff.nf similarity index 97% rename from subworkflows/local/hicstuff_sub.nf rename to subworkflows/local/hicstuff.nf index b3070d5bfa2726b7683d3cb5d2bed1d266072613..d9c60abaaa47d6d04750c7072305497bcd384367 100644 --- a/subworkflows/local/hicstuff_sub.nf +++ b/subworkflows/local/hicstuff.nf @@ -31,7 +31,7 @@ def singleToPair(row){ return [ meta, row[1] ] } -workflow HICSTUFF_SUB { +workflow HICSTUFF { take: reads @@ -128,7 +128,6 @@ workflow HICSTUFF_SUB { ch_idx_pairs ) - HIC_PLOT_MATRIX( - BUILD_MATRIX_COOL_ALT.out.matrix - ) + emit: + cool = BUILD_MATRIX_COOL_ALT.out.matrix } diff --git a/workflows/hic.nf b/workflows/hic.nf index 67ccd439ba8a57240f7a70fe08238043c852883f..70c1f8d671574d8da3aadd6710e41fe9eabd7164 100644 --- a/workflows/hic.nf +++ b/workflows/hic.nf @@ -109,6 +109,7 @@ include { MULTIQC } from '../modules/local/multiqc' // include { INPUT_CHECK } from '../subworkflows/local/input_check' include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' +include { HICSTUFF } from '../subworkflows/local/hicstuff' include { HICPRO } from '../subworkflows/local/hicpro' include { COOLER } from '../subworkflows/local/cooler' include { COMPARTMENTS } from '../subworkflows/local/compartments' @@ -177,17 +178,18 @@ workflow HIC { // // SUB-WORFLOW: HiC-Pro // - INPUT_CHECK.out.reads.view() - HICPRO ( - INPUT_CHECK.out.reads, - PREPARE_GENOME.out.index, - PREPARE_GENOME.out.res_frag, - PREPARE_GENOME.out.chromosome_size, - ch_ligation_site, - ch_map_res, - ch_fasta - ) - ch_versions = ch_versions.mix(HICPRO.out.versions) + if (params.workflow == "hicpro"){ + HICPRO ( + INPUT_CHECK.out.reads, + PREPARE_GENOME.out.index, + PREPARE_GENOME.out.res_frag, + PREPARE_GENOME.out.chromosome_size, + ch_ligation_site, + ch_map_res, + ch_fasta + ) + ch_mqc = HICPRO.out.mqc + ch_versions = ch_versions.mix(HICPRO.out.versions) // // SUB-WORKFLOW: COOLER @@ -214,13 +216,28 @@ workflow HIC { ) ch_versions = ch_versions.mix(HIC_PLOT_DIST_VS_COUNTS.out.versions) } + ch_cool = COOLER.out.cool +} + + else { + HICSTUFF( + INPUT_CHECK.out.reads, + PREPARE_GENOME.out.index, + ch_ligation_site, + params.digestion, //str enzyme + ch_fasta, + PREPARE_GENOME.out.chromosome_size + ) + ch_cool = HICSTUFF.out.cool + ch_mqc = Channel.empty() + } // // MODULE: HICEXPLORER/HIC_PLOT_MATRIX // if (!params.skip_plot_matrix){ HIC_PLOT_MATRIX( - COOLER.out.cool + ch_cool ) ch_versions = ch_versions.mix(HIC_PLOT_MATRIX.out.versions) } @@ -229,7 +246,7 @@ workflow HIC { // SUB-WORKFLOW: COMPARTMENT CALLING // if (!params.skip_compartments){ - COOLER.out.cool + ch_cool .combine(ch_comp_res) .filter{ it[0].resolution == it[2] } .map { it -> [it[0], it[1], it[2]]} @@ -247,7 +264,7 @@ workflow HIC { // SUB-WORKFLOW : TADS CALLING // if (!params.skip_tads){ - COOLER.out.cool + ch_cool .combine(ch_tads_res) .filter{ it[0].resolution == it[2] } .map { it -> [it[0], it[1]]} @@ -277,14 +294,14 @@ workflow HIC { ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.map{it->it[1]}) - ch_multiqc_files = ch_multiqc_files.mix(HICPRO.out.mqc) + ch_multiqc_files = ch_multiqc_files.mix(ch_mqc) MULTIQC ( ch_multiqc_config, ch_multiqc_custom_config.collect().ifEmpty([]), ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), FASTQC.out.zip.map{it->it[1]}, - HICPRO.out.mqc.collect() + ch_mqc.collect() ) multiqc_report = MULTIQC.out.report.toList() } diff --git a/workflows/hicstuff.nf b/workflows/hicstuff.nf deleted file mode 100644 index 8263bd3db82361774f74c84884e373cdc8d51a7c..0000000000000000000000000000000000000000 --- a/workflows/hicstuff.nf +++ /dev/null @@ -1,45 +0,0 @@ -def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) -// Validate input parameters -WorkflowHic.initialise(params, log) -// Check mandatory parameters -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -// Digestion parameters -if (params.digestion){ - restriction_site = params.digestion ? params.digest[ params.digestion ].restriction_site ?: false : false - ch_restriction_site = Channel.value(restriction_site) //str seq avec ^ pour cut - ligation_site = params.digestion ? params.digest[ params.digestion ].ligation_site ?: false : false - ch_ligation_site = Channel.value(ligation_site) //str seq -}else if (params.dnase){ - ch_restriction_site = Channel.empty() - ch_ligation_site = Channel.empty() -}else{ - exit 1, "Ligation motif not found. Please either use the `--digestion` parameters or specify the `--restriction_site` and `--ligation_site`. For DNase Hi-C, please use '--dnase' option" -} - -Channel.fromPath( params.fasta ) - .ifEmpty { exit 1, "Genome index: Fasta file not found: ${params.fasta}" } - .map{it->[[:],it]} - .set { ch_fasta } - - -include { INPUT_CHECK } from '../subworkflows/local/input_check' -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' -include { HICSTUFF_SUB } from '../subworkflows/local/hicstuff_sub' - -workflow HICSTUFF { - INPUT_CHECK ( - ch_input - ) - PREPARE_GENOME( - ch_fasta, - ch_restriction_site - ) - HICSTUFF_SUB( - INPUT_CHECK.out.reads, - PREPARE_GENOME.out.index, - ch_ligation_site, - params.digestion, //str enzyme - ch_fasta, - PREPARE_GENOME.out.chromosome_size - ) -}