Skip to content
Snippets Groups Projects
Verified Commit 66b73182 authored by Mia Croiset's avatar Mia Croiset
Browse files

refactorisation hicstuff

parent 08e5a646
No related branches found
No related tags found
No related merge requests found
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'
......@@ -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 ()
}
/*
......
......@@ -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
}
......@@ -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()
}
......
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
)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment