From 84be19106e59674af6efc5208493fd9c87924457 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 17 Mar 2025 16:09:29 +0100 Subject: [PATCH 01/19] v1 BindingSiteFinder modules and subworkflow --- .gitignore | 3 +- .../BindingSiteFinder/DefineBindingSites.R | 192 ++++++++++++++++++ modules/local/BindingSiteFinder/main.nf | 44 ++++ modules/local/BindingSiteFinder/test_run.sh | 9 + .../main.nf | 17 ++ .../sortAnnotationForBindingSiteFinder.R | 44 ++++ subworkflows/local/BindingSiteFinder.nf | 42 ++++ 7 files changed, 350 insertions(+), 1 deletion(-) create mode 100644 modules/local/BindingSiteFinder/DefineBindingSites.R create mode 100644 modules/local/BindingSiteFinder/main.nf create mode 100644 modules/local/BindingSiteFinder/test_run.sh create mode 100644 modules/local/sortAnnotationForBindingSiteFinder/main.nf create mode 100644 modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R create mode 100644 subworkflows/local/BindingSiteFinder.nf diff --git a/.gitignore b/.gitignore index 2bb94000..b47b44c0 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ results/ testing/ testing* *.pyc -.nf-test/ \ No newline at end of file +.nf-test/ +*.Rhistory \ No newline at end of file diff --git a/modules/local/BindingSiteFinder/DefineBindingSites.R b/modules/local/BindingSiteFinder/DefineBindingSites.R new file mode 100644 index 00000000..dbb79c2b --- /dev/null +++ b/modules/local/BindingSiteFinder/DefineBindingSites.R @@ -0,0 +1,192 @@ +# ----------------------------- +# Module make binding sites +# ----------------------------- +options(warn = -1) + +# libraries +################ + # Suppress messages +suppressMessages( library(BindingSiteFinder)) +suppressMessages( library(GenomicRanges)) +suppressMessages( library(rtracklayer)) +suppressMessages( library(tidyverse)) +suppressMessages( library(optparse)) + +# Input +################ + +# Specify the input arguments +option_list <- list( + make_option(c("-b", "--bw_files_folder"), type = "character"), + make_option(c("-p", "--peaks"), type = "character"), + make_option(c("-g", "--anno_genes"), type = "character"), + make_option(c("-r", "--anno_regions"), type = "character"), + # output paths + make_option(c("-o", "--output_path"), type = "character", default = "."), + # optional parameters to customize binding sites + make_option(c( "--peak_score_global_cuttoff"), type = "numeric"), + make_option(c( "--bsWidth"), type = "numeric"), + make_option(c( "--peak_score_genewise_cuttoff"), type = "numeric"), + make_option(c( "--minWidth"), type = "numeric"), + make_option(c( "--minCrosslinks"), type = "numeric"), + make_option(c( "--minCLSites"), type = "numeric"), + make_option(c( "--maxBsWidth"), type = "numeric"), + # optional parameters for reproducibility + make_option(c( "--reproducibility_cutoff"), type = "numeric"), + make_option(c( "--reproducibility_nReps"), type = "numeric"), + # optional parameters for gene and region assignment + make_option(c( "--method_gene_overlaps"), type = "character"), + make_option(c( "--rule_gene_overlaps"), type = "character"), + make_option(c( "--method_region_overlaps"), type = "character"), + make_option(c( "--rule_region_overlaps"), type = "character"), + # optional parameters to fit non-standard genomes + make_option(c( "--match_score"), type = "numeric"), + make_option(c( "--match_geneID"), type = "character"), + make_option(c( "--match_geneName"), type = "character"), + make_option(c( "--match_geneType"), type = "character"), + make_option(c( "--match_score_option"), type = "character") +) + +# Parse arguments +parser <- OptionParser(option_list = option_list) +args <- parse_args(parser) + +# Default parameters (NULL means use function defaults) +params.input.output <- list( + bw_files_folder = args$bw_files_folder, + peaks = args$peaks, + anno_genes = args$anno_genes, + anno_regions = args$anno_regions, + output_path = args$output_path) + +params.pureClipGlobalFilter <- list( + cuttoff = args$peak_score_global_cuttoff) + +params.estimateBsWidth <- list( + est.minWidth = args$minWidth, + est.maxBsWidth = args$maxBsWidth) + +params.pureClipGeneWiseFilter <- list( + cutoff = args$peak_score_genewise_cuttoff, + match.score = args$match_score, + match.geneID = args$match_geneID, + overlaps = args$method_gene_overlaps) + +params.makeBindingSites <- list( + minWidth = args$minWidth, + minCrosslinks = args$minCrosslinks, + minClSites = args$minCLSites) + +params.reproducibilityFilter <- list( + cutoff = args$reproducibility_cutoff, + nReps = args$reproducibility_nReps) + +params.assignToGenes <- list( + overlaps = args$method_gene_overlaps, + overlaps.rule = args$rule_gene_overlaps, + match.geneID = args$match_geneID, + match.geneName = args$match_geneName, + match.geneType = args$match_geneType + ) +params.assignToTranscriptRegions <- list( + overlaps = args$method_region_overlaps, + overlaps.rule = args$rule_region_overlaps) + +params.annotateWithScore <- list( + match.score = args$match_score, + match.option = args$match_score_option +) + +# Remove NULL values so function defaults apply +params.pureClipGlobalFilter <- params.pureClipGlobalFilter[!sapply(params.pureClipGlobalFilter, is.null)] +params.estimateBsWidth <- params.estimateBsWidth[!sapply(params.estimateBsWidth, is.null)] +params.pureClipGeneWiseFilter <- params.pureClipGeneWiseFilter[!sapply(params.pureClipGeneWiseFilter, is.null)] +params.makeBindingSites <- params.makeBindingSites[!sapply(params.makeBindingSites, is.null)] +params.reproducibilityFilter <- params.reproducibilityFilter[!sapply(params.reproducibilityFilter, is.null)] +params.assignToGenes <- params.assignToGenes[!sapply(params.assignToGenes, is.null)] +params.assignToTranscriptRegions <- params.assignToTranscriptRegions[!sapply(params.assignToTranscriptRegions, is.null)] +params.annotateWithScore <- params.annotateWithScore[!sapply(params.annotateWithScore, is.null)] + +######################## +# BindingSiteFinder +####################### +# crosslinks +bw_files_names <- list.files(params.input.output$bw_files_folder) + +clipFilesP <- list.files(params.input.output$bw_files_folder, pattern = "plus.bw$", full.names = TRUE) +clipFilesM <- list.files(params.input.output$bw_files_folder, pattern = "minus.bw$", full.names = TRUE) + + +# annotation +gns <- readRDS(params.input.output$anno_genes) +regions <- readRDS(params.input.output$anno_regions) + + +# Peaks from pureclip +peaks = rtracklayer::import(con = params.input.output$peaks, format = "BED", extraCols=c("additionalScores" = "character")) +peaks$additionalScores = NULL +peaks$name = NULL + + + +# Prepare meta data +meta = data.frame( + id = c(1:length(clipFilesP)), + condition = factor(rep("all", length(clipFilesP))), # add option for multiple groups from sample file + clPlus = clipFilesP, + clMinus = clipFilesM) + + +# run BindingSiteFinder +####################### + +cat("############################# \n Running BindingSiteFinder \n############################# \n") +bds = BSFDataSetFromBigWig(ranges = peaks, meta = meta, silent =T) + +cat("\nGlobal filter on peak sites \n \n") +bds = do.call(pureClipGlobalFilter, + c(list(bds), + params.pureClipGlobalFilter)) # param cutoff +cat("\nEstimate binding site width \n \n") +bds = do.call(estimateBsWidth, + c(list(bds, anno.genes = gns), + params.estimateBsWidth)) # optional param: bsWidth + +cat("\nGenewise filter on peak sites \n \n") +bds = do.call(pureClipGeneWiseFilter, + c(list(bds, anno.genes = gns), + params.pureClipGeneWiseFilter)) # param cutoff, overlaps, match score, match geneID + +cat("\nMake binding sites \n \n") +bds = do.call(makeBindingSites, + c(list(bds), + params.makeBindingSites)) # params minWidth, minCrosslinks, minCLSites + + +# bds = do.call(reproducibilityFilter, c(list(bds), params.reproducibilityFilter)) # params cutoff, nReps +cat("\nAssign binding sites to genes \n \n") +bds = do.call(assignToGenes, c(list(bds, anno.genes = gns), + params.assignToGenes)) # params overlaps, overlaps.rule, match.geneID, match.geneName, match.geneType + +cat("\nAssign binding sites to transcript regions \n \n") +bds = do.call(assignToTranscriptRegions, c(list(bds,anno.transcriptRegionList = regions), + params.assignToTranscriptRegions))# params overlaps, overlaps.rule, + +cat("\nAnotate binding scores \n \n") +bds = do.call(annotateWithScore, c(list(bds, peaks),params.annotateWithScore)) #match.score, match.option + +cat("\nSaving bindings sites \n \n") +bs_gr = getRanges(bds) +names(bs_gr) <- 1:NROW(bs_gr) +bs_df <- as.data.frame(bs_gr) + + +# export outputs +######################## + +exportToBED(bds, con = paste0(params.input.output$output_path , "/myBindingSites.bed")) +saveRDS(bds, paste0(params.input.output$output_path ,"/bds_object.rds")) +saveRDS(bs_df, paste0(params.input.output$output_path ,"/bindingSites.rds")) +write.csv(bs_df, file = paste0(params.input.output$output_path,"/bindingSites.csv"), row.names = FALSE) + + diff --git a/modules/local/BindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/main.nf new file mode 100644 index 00000000..74fd7a3d --- /dev/null +++ b/modules/local/BindingSiteFinder/main.nf @@ -0,0 +1,44 @@ +process BindingSiteFinderAnalysis { + container 'melinak/bindingsitefinder:latest' + + input: + path bw_files_folder + path peaks + path genome_annotation + path sample_sheet + + output: + path "binding_sites.rds" + path "binding_sites.csv" + + script: + """ + Rscript DefineBindingSites.R \\ + --bw_files_folder $bw_files_folder \\ + --peaks $peaks \\ + --anno_genes $anno_gns \\ + --anno_regions $anno_regions \\ + --sample_sheet $sample_sheet \\ + --output_path . \\ + --peak_score_global_cuttoff $params.peak_score_global_cuttoff \\ + --bsWidth $params.bsWidth \\ + --peak_score_genewise_cuttoff $params.peak_score_genewise_cuttoff \\ + --minWidth $params.minWidth \\ + --minCrosslinks $params.minCrosslinks \\ + --minCLSites $params.minCLSites \\ + --maxBsWidth $params.maxBsWidth \\ + --reproducibility_cutoff $params.reproducibility_cutoff \\ + --reproducibility_nReps $params.reproducibility_nReps \\ + --method_gene_overlaps $params.method_gene_overlaps \\ + --rule_gene_overlaps $params.rule_gene_overlaps \\ + --method_region_overlaps $params.method_region_overlaps \\ + --rule_region_overlaps $params.rule_region_overlaps \\ + --match_score $params.match_score \\ + --match_geneID $params.match_geneID \\ + --match_geneName $params.match_geneName \\ + --match_geneType $params.match_geneType \\ + --match_score_option $params.match_score_option \\ + binding_sites.rds \\ + binding_sites.csv + """ +} \ No newline at end of file diff --git a/modules/local/BindingSiteFinder/test_run.sh b/modules/local/BindingSiteFinder/test_run.sh new file mode 100644 index 00000000..f3337c74 --- /dev/null +++ b/modules/local/BindingSiteFinder/test_run.sh @@ -0,0 +1,9 @@ +# without nextflow +docker run --rm -it -v /Users/melinaklostermann/Documents/projects:/mnt/ melinak/bindingsitefinder:1.0 bin/bash + +Rscript /mnt/nf-core-clipseq/modules/local/BindingSiteFinder/DefineBindingSites.R \ + --bw_files_folder "/mnt/nf-core-clipseq/devel_folder/example_inputs/AGO_iCLIP" \ + --peaks "/mnt/nf-core-clipseq/devel_folder/example_inputs/AGO_iCLIP/IP_WT_pureclip_sites.bed" \ + --anno_genes "/mnt/nf-core-clipseq/devel_folder/outputs/gns.rds" \ + --anno_regions "/mnt/nf-core-clipseq/devel_folder/outputs/regions.rds" \ + --output_path "/mnt/nf-core-clipseq/devel_folder/outputs" diff --git a/modules/local/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/sortAnnotationForBindingSiteFinder/main.nf new file mode 100644 index 00000000..94bbdc4b --- /dev/null +++ b/modules/local/sortAnnotationForBindingSiteFinder/main.nf @@ -0,0 +1,17 @@ +process sortAnnotationForBindingSiteFinder { + container = 'melinak/bindingsitefinder:latest' + + input: + path gtf_file + output: + path "gns.rds" + path "regions.rds" + + script: + """ + Rscript /home/mek24iv/nfcore-clipseq/devel_BindingSiteFinder/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R \\ + $gtf_file \\ + gns.rds \\ + regions.rds + """ +} \ No newline at end of file diff --git a/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R b/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R new file mode 100644 index 00000000..46f58faf --- /dev/null +++ b/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R @@ -0,0 +1,44 @@ + +# command line arguments +args <- commandArgs(trailingOnly = TRUE) + +print(args) +annoFile = args[1] +out_gns = args[2] +out_regions = args[3] + +# for local tests +#annoFile = "/Users/melinaklostermann/Documents/projects/anno/GENCODEv31-p12/gencode.v31.annotation.gtf" +# out_gns = "/Users/melinaklostermann/Documents/projects/nf-core-clipseq/devel_folder/outputs/gns.rds" +# out_regions = "/Users/melinaklostermann/Documents/projects/nf-core-clipseq/devel_folder/outputs/regions.rds" + +# libraries +library(GenomicFeatures) + + + + +# Make annotation database from gff3 file +annoDb = GenomicFeatures::makeTxDbFromGFF(file = annoFile, format = "gtf") +annoInfo = rtracklayer::import(annoFile, format = "gtf") + + +# Get genes as GRanges +gns = genes(annoDb) +idx = match(gns$gene_id, annoInfo$gene_id) +meta = cbind(elementMetadata(gns), + elementMetadata(annoInfo)[idx,]) +meta = meta[,!duplicated(colnames(meta))] +elementMetadata(gns) = meta + +saveRDS(gns, out_gns) + + +# Get regions as Granges +cdseq = cds(annoDb) +intrns = unlist(intronsByTranscript(annoDb)) +utrs3 = unlist(threeUTRsByTranscript(annoDb)) +utrs5 = unlist(fiveUTRsByTranscript(annoDb)) +regions = GRangesList(CDS = cdseq, Intron = intrns, UTR3 = utrs3, UTR5 = utrs5) + +saveRDS(regions, out_regions) diff --git a/subworkflows/local/BindingSiteFinder.nf b/subworkflows/local/BindingSiteFinder.nf new file mode 100644 index 00000000..dcabb17d --- /dev/null +++ b/subworkflows/local/BindingSiteFinder.nf @@ -0,0 +1,42 @@ +nextflow.enable.dsl = 2 + +include { sortAnnotationForBindingSiteFinder } from '../../modules/local/sortAnnotationForBindingSiteFinder/main.nf' +include { BindingSiteFinderAnalysis } from '../../modules/local/BindingSiteFinder/main.nf' + +workflow BindingSiteFinder{ + take: + gtf_ch + // bw_files_folder + // peaks + + + main: + sorted_ch = sortAnnotationForBindingSiteFinder(gtf_ch) + + // BindingSiteFinderAnalysis( + // bw_files_folder, + // peaks, + // sorted_ch.gns, + // sorted_ch.regions, + // sample_sheet, + // // Here start optional parameters + // peak_score_global_cuttoff, + // bsWidth, + // peak_score_genewise_cuttoff, + // minWidth, + // minCrosslinks, + // minCLSites, + // maxBsWidth, + // reproducibility_cutoff, + // reproducibility_nReps, + // method_gene_overlaps, + // rule_gene_overlaps, + // method_region_overlaps, + // rule_region_overlaps, + // match_score, + // match_geneID, + // match_geneName, + // match_geneType, + // match_score_option + // ) +} From e69c0a5f082ad8d4a8bd47af24d52ad89bd28067 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 24 Mar 2025 09:55:04 +0100 Subject: [PATCH 02/19] issue 122 comment in bindingsitefinder.R script done --- .../DefineBindingSites.R | 43 +++++++++++-------- .../{ => DefineBindingSites}/main.nf | 4 +- .../{ => DefineBindingSites}/test_run.sh | 0 3 files changed, 27 insertions(+), 20 deletions(-) rename modules/local/BindingSiteFinder/{ => DefineBindingSites}/DefineBindingSites.R (80%) rename modules/local/BindingSiteFinder/{ => DefineBindingSites}/main.nf (91%) rename modules/local/BindingSiteFinder/{ => DefineBindingSites}/test_run.sh (100%) diff --git a/modules/local/BindingSiteFinder/DefineBindingSites.R b/modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R similarity index 80% rename from modules/local/BindingSiteFinder/DefineBindingSites.R rename to modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R index dbb79c2b..a4ae19db 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites.R +++ b/modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R @@ -23,28 +23,35 @@ option_list <- list( make_option(c("-r", "--anno_regions"), type = "character"), # output paths make_option(c("-o", "--output_path"), type = "character", default = "."), + # optional parameters to customize binding sites - make_option(c( "--peak_score_global_cuttoff"), type = "numeric"), - make_option(c( "--bsWidth"), type = "numeric"), - make_option(c( "--peak_score_genewise_cuttoff"), type = "numeric"), - make_option(c( "--minWidth"), type = "numeric"), - make_option(c( "--minCrosslinks"), type = "numeric"), - make_option(c( "--minCLSites"), type = "numeric"), - make_option(c( "--maxBsWidth"), type = "numeric"), + #-------------------------------- + # the default values are the ones specified in the Bioconductor package BindingSiteFinder + # https://www.bioconductor.org/packages/release/bioc/manuals/BindingSiteFinder/man/BindingSiteFinder.pdf + # the default values as specified in BindingSiteFinder 2.4.0 are given in the comment after the parameter name + # optional parameters for binding site defnition + make_option(c( "--peak_score_global_cuttoff"), type = "numeric"), # default 0.01 + make_option(c( "--bsWidth"), type = "numeric"), # default automatic estimation + make_option(c( "--peak_score_genewise_cuttoff"), type = "numeric"), # default automatic estimation + make_option(c( "--minWidth"), type = "numeric"), # default 2 + make_option(c( "--minCrosslinks"), type = "numeric"), # default 2 + make_option(c( "--minCLSites"), type = "numeric"), # default 1 + make_option(c( "--maxBsWidth"), type = "numeric"), # default 13 # optional parameters for reproducibility - make_option(c( "--reproducibility_cutoff"), type = "numeric"), - make_option(c( "--reproducibility_nReps"), type = "numeric"), + # make_option(c( "--reproducibility_cutoff"), type = "numeric"), + # make_option(c( "--reproducibility_nReps"), type = "numeric"), # optional parameters for gene and region assignment - make_option(c( "--method_gene_overlaps"), type = "character"), - make_option(c( "--rule_gene_overlaps"), type = "character"), - make_option(c( "--method_region_overlaps"), type = "character"), - make_option(c( "--rule_region_overlaps"), type = "character"), + make_option(c( "--method_gene_overlaps"), type = "character"), # default "frequency" + make_option(c( "--rule_gene_overlaps"), type = "character"), # default NULL (only needed for --method_gene_overlaps "hierarchy") + make_option(c( "--method_region_overlaps"), type = "character"), # default "frequency" + make_option(c( "--rule_region_overlaps"), type = "character"), # default NULL (only needed for --method_region_overlaps "hierarchy") # optional parameters to fit non-standard genomes - make_option(c( "--match_score"), type = "numeric"), - make_option(c( "--match_geneID"), type = "character"), - make_option(c( "--match_geneName"), type = "character"), - make_option(c( "--match_geneType"), type = "character"), - make_option(c( "--match_score_option"), type = "character") + make_option(c( "--match_geneID"), type = "character"), # default "gene_id" + make_option(c( "--match_geneName"), type = "character"), # default "gene_name" + make_option(c( "--match_geneType"), type = "character"), # default "gene_type" + # optional parameters to fit peakcaller scores + make_option(c( "--match_score"), type = "numeric"), # default "score" + make_option(c( "--match_score_option"), type = "character") # default "max" ) # Parse arguments diff --git a/modules/local/BindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf similarity index 91% rename from modules/local/BindingSiteFinder/main.nf rename to modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 74fd7a3d..54291ce3 100644 --- a/modules/local/BindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -27,8 +27,8 @@ process BindingSiteFinderAnalysis { --minCrosslinks $params.minCrosslinks \\ --minCLSites $params.minCLSites \\ --maxBsWidth $params.maxBsWidth \\ - --reproducibility_cutoff $params.reproducibility_cutoff \\ - --reproducibility_nReps $params.reproducibility_nReps \\ + // --reproducibility_cutoff $params.reproducibility_cutoff \\ + // --reproducibility_nReps $params.reproducibility_nReps \\ --method_gene_overlaps $params.method_gene_overlaps \\ --rule_gene_overlaps $params.rule_gene_overlaps \\ --method_region_overlaps $params.method_region_overlaps \\ diff --git a/modules/local/BindingSiteFinder/test_run.sh b/modules/local/BindingSiteFinder/DefineBindingSites/test_run.sh similarity index 100% rename from modules/local/BindingSiteFinder/test_run.sh rename to modules/local/BindingSiteFinder/DefineBindingSites/test_run.sh From 6c56951f909795667866223747aa4bb3c67f9009 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 24 Mar 2025 14:00:18 +0100 Subject: [PATCH 03/19] updated templates for modules --- .../DefineBindingSites/DefineBindingSites.R | 5 ++ .../DefineBindingSites/main.nf | 76 ++++++++++++------- .../main.nf | 35 +++++++++ .../sortAnnotationForBindingSiteFinder.R | 0 .../main.nf | 17 ----- 5 files changed, 88 insertions(+), 45 deletions(-) create mode 100644 modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf rename modules/local/{ => BindingSiteFinder}/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R (100%) delete mode 100644 modules/local/sortAnnotationForBindingSiteFinder/main.nf diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R b/modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R index a4ae19db..626ea83d 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R +++ b/modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R @@ -12,6 +12,11 @@ suppressMessages( library(rtracklayer)) suppressMessages( library(tidyverse)) suppressMessages( library(optparse)) +# print BSF version +################## +cat("BindingSiteFinder version: ", packageVersion("BindingSiteFinder"), "\n") + + # Input ################ diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 54291ce3..79133d3f 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -1,17 +1,50 @@ process BindingSiteFinderAnalysis { - container 'melinak/bindingsitefinder:latest' - + tag "$meta.id" + label 'process_low' + + //conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'docker://melinak/bindingsitefinder:latest': + 'melinak/bindingsitefinder:latest' }" + input: - path bw_files_folder - path peaks - path genome_annotation - path sample_sheet + tuple val(meta), path(bw_files_folder) + tuple val(meta), path(peaks) + tuple val(meta), path(anno_gns) + tuple val(meta), path(anno_regions) output: - path "binding_sites.rds" - path "binding_sites.csv" + tuple val(meta), path("*binding_sites.rds"), emit: binding_sites_rds + tuple val(meta), path("*binding_sites.csv"), emit: binding_sites_csv + + when: + task.ext.when == null || task.ext.when script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + // the bindingSiteFinder sersion number will be printed to the console by the R script + + // optional parameters: + // --peak_score_global_cuttoff $params.peak_score_global_cuttoff \\ + // --bsWidth $params.bsWidth \\ + // --peak_score_genewise_cuttoff $params.peak_score_genewise_cuttoff \\ + // --minWidth $params.minWidth \\ + // --minCrosslinks $params.minCrosslinks \\ + // --minCLSites $params.minCLSites \\ + // --maxBsWidth $params.maxBsWidth \\ + // // --reproducibility_cutoff $params.reproducibility_cutoff \\ + // // --reproducibility_nReps $params.reproducibility_nReps \\ + // --method_gene_overlaps $params.method_gene_overlaps \\ + // --rule_gene_overlaps $params.rule_gene_overlaps \\ + // --method_region_overlaps $params.method_region_overlaps \\ + // --rule_region_overlaps $params.rule_region_overlaps \\ + // --match_score $params.match_score \\ + // --match_geneID $params.match_geneID \\ + // --match_geneName $params.match_geneName \\ + // --match_geneType $params.match_geneType \\ + // --match_score_option $params.match_score_option \\ + """ Rscript DefineBindingSites.R \\ --bw_files_folder $bw_files_folder \\ @@ -20,25 +53,12 @@ process BindingSiteFinderAnalysis { --anno_regions $anno_regions \\ --sample_sheet $sample_sheet \\ --output_path . \\ - --peak_score_global_cuttoff $params.peak_score_global_cuttoff \\ - --bsWidth $params.bsWidth \\ - --peak_score_genewise_cuttoff $params.peak_score_genewise_cuttoff \\ - --minWidth $params.minWidth \\ - --minCrosslinks $params.minCrosslinks \\ - --minCLSites $params.minCLSites \\ - --maxBsWidth $params.maxBsWidth \\ - // --reproducibility_cutoff $params.reproducibility_cutoff \\ - // --reproducibility_nReps $params.reproducibility_nReps \\ - --method_gene_overlaps $params.method_gene_overlaps \\ - --rule_gene_overlaps $params.rule_gene_overlaps \\ - --method_region_overlaps $params.method_region_overlaps \\ - --rule_region_overlaps $params.rule_region_overlaps \\ - --match_score $params.match_score \\ - --match_geneID $params.match_geneID \\ - --match_geneName $params.match_geneName \\ - --match_geneType $params.match_geneType \\ - --match_score_option $params.match_score_option \\ - binding_sites.rds \\ - binding_sites.csv + """ + + stub: + def args = task.ext.args ?: '' + """ + touch binding_sites.rds + touch binding_sites.csv """ } \ No newline at end of file diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf new file mode 100644 index 00000000..779200c6 --- /dev/null +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -0,0 +1,35 @@ +process sortAnnotationForBindingSiteFinder { + tag "$meta.id" + label 'process_low' + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'docker://melinak/bindingsitefinder:latest': + 'melinak/bindingsitefinder:latest' }" + + input: + tuple val(meta), path(gtf_file) + + output: + tuple val(meta), path("*gns.rds"), emit: gns_rds + tuple val(meta), path("*regions.rds"), emit: regions_rds + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + Rscript /home/mek24iv/nfcore-clipseq/devel_BindingSiteFinder/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R \\ + $gtf_file \\ + gns.rds \\ + regions.rds + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch gns.rds + touch regions.rds + """ +} \ No newline at end of file diff --git a/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R similarity index 100% rename from modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R rename to modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R diff --git a/modules/local/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/sortAnnotationForBindingSiteFinder/main.nf deleted file mode 100644 index 94bbdc4b..00000000 --- a/modules/local/sortAnnotationForBindingSiteFinder/main.nf +++ /dev/null @@ -1,17 +0,0 @@ -process sortAnnotationForBindingSiteFinder { - container = 'melinak/bindingsitefinder:latest' - - input: - path gtf_file - output: - path "gns.rds" - path "regions.rds" - - script: - """ - Rscript /home/mek24iv/nfcore-clipseq/devel_BindingSiteFinder/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R \\ - $gtf_file \\ - gns.rds \\ - regions.rds - """ -} \ No newline at end of file From eb35a8ba94f39430149e171d63025492c660124a Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 24 Mar 2025 14:25:57 +0100 Subject: [PATCH 04/19] add version number of bindingSiteFinder --- .../BindingSiteFinder/DefineBindingSites/main.nf | 10 ++++++++++ .../sortAnnotationForBindingSiteFinder/main.nf | 13 +++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 79133d3f..3dc57d67 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -53,6 +53,11 @@ process BindingSiteFinderAnalysis { --anno_regions $anno_regions \\ --sample_sheet $sample_sheet \\ --output_path . \\ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') + END_VERSIONS """ stub: @@ -60,5 +65,10 @@ process BindingSiteFinderAnalysis { """ touch binding_sites.rds touch binding_sites.csv + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') + END_VERSIONS """ } \ No newline at end of file diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf index 779200c6..77956704 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -23,13 +23,22 @@ process sortAnnotationForBindingSiteFinder { $gtf_file \\ gns.rds \\ regions.rds - """ + cat <<-END_VERSIONS > versions.yml + "${task.process}": + \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') + END_VERSIONS + """ stub: - def args = task.ext.args ?: '' + def args = task.ext.a def prefix = task.ext.prefix ?: "${meta.id}" """ touch gns.rds touch regions.rds + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') + END_VERSIONS """ } \ No newline at end of file From 75c3cac237f9650c36ddf1d1f530a5dbf74cdcc4 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 24 Mar 2025 16:41:13 +0100 Subject: [PATCH 05/19] add bfs qc --- .../DefineBindingSites/main.nf | 1 + .../bsfQC/BindingSiteFinderQC.R | 11 ++++ .../bsfQC/BindingSiteFinderQC.qmd | 57 +++++++++++++++++++ modules/local/BindingSiteFinder/bsfQC/main.nf | 42 ++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R create mode 100644 modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.qmd create mode 100644 modules/local/BindingSiteFinder/bsfQC/main.nf diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 3dc57d67..20a860ee 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -16,6 +16,7 @@ process BindingSiteFinderAnalysis { output: tuple val(meta), path("*binding_sites.rds"), emit: binding_sites_rds tuple val(meta), path("*binding_sites.csv"), emit: binding_sites_csv + path "versions.yml", emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R b/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R new file mode 100644 index 00000000..62b60e64 --- /dev/null +++ b/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R @@ -0,0 +1,11 @@ +args <- commandArgs(trailingOnly = TRUE) + +print(args) +bds = args[1] + + +rmarkdown::render(xxreport_tmp_path, + #output_dir = paste0(snakemake@params[[1]], "/results/"), + args = args, + output_format = "html_document" +) \ No newline at end of file diff --git a/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.qmd b/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.qmd new file mode 100644 index 00000000..147ed877 --- /dev/null +++ b/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.qmd @@ -0,0 +1,57 @@ +--- +title: "Quality Control of binding sites from BindingSiteFinder" +format: html +--- + +```{r} +library(BindingSiteFinder) +bds <- readRDS(args[1]) +``` + + +# Overview + +This document describes the (automatically chosen) parameters of used for biding site definition in BindingSiteFinder and provides multiple plots to check the quality of the binding sites on multiple levels. + +```{r} +# Flowchart +processingStepsFlowChart(bds) + +``` + +The flowchart lists all the steps that were performed by BindingSiteFinder. On the left, the number of crosslinks (before the makeBindingSite step) or binding sites (after the makeBindingSite step) is given. On the right, the used parameters from each step are listed. + +# Filtering of peak input signal + +The peaks obtained in peak calls are filtered by their score, removing the peaks with very low binding scores. The following plot shows the distribution of the scores of the peaks before filtering and the chosen cutoff as a line. + +```{r} +# Filtering peak input +pureClipGlobalFilterPlot(bdsOut) + +``` + + +# Estimation of binding sites + +BindingSiteFinder estimates the optimal size of the binding sites from a signal to flank ration. In addition, it tests different genewise filters of crosslinks to reduce influences of background signal. The following plot shows the signal to flank ratio across different binding sites width. Each line stands for another genewise filter. The chosen filter setting and binding site width are shown by the read lines and are also given in the top right corner of the plot. + +```{r} +estimateBsWidthPlot(bdsOut) + +``` + +Whether the chosen binding site width is appropriate can be checked by the following plot. It shows some examples of binding site width (grey boxes) and the summed signal in the binding site region. For an optimal binding site width the peak should be completely within the binding site, but the binding site should not spann further into the background signal. + +```{r} +rangeCoveragePlot(l, width = 20, show.samples = TRUE, subset.chromosome = "chr22") + +``` + +# Reproducibility of crosslink signals from different replicates in binding sites + +Coming soon! + + + + diff --git a/modules/local/BindingSiteFinder/bsfQC/main.nf b/modules/local/BindingSiteFinder/bsfQC/main.nf new file mode 100644 index 00000000..dea29bf0 --- /dev/null +++ b/modules/local/BindingSiteFinder/bsfQC/main.nf @@ -0,0 +1,42 @@ +process bsfQC { + tag "$meta.id" + label 'process_low' + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'docker://melinak/bindingsitefinder:latest': + 'melinak/bindingsitefinder:latest' }" + + input: + tuple val(meta), path(binding_sites_rds) + + output: + tuple val(meta), path("*BindingSiteFinderQC.html"), emit: BindingSiteFinderQC + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + """ + Rscript clipseq/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R \\ + $binding_sites_rds + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') + END_VERSIONS + """ + + stub: + def args = task.ext.a + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch gns.rds + touch regions.rds + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') + END_VERSIONS + """ +} \ No newline at end of file From 085a4f49e7b91d583128bafb8d254787edb1f6a3 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Tue, 25 Mar 2025 08:29:08 +0100 Subject: [PATCH 06/19] bsf change label to process single --- modules/local/BindingSiteFinder/DefineBindingSites/main.nf | 2 +- modules/local/BindingSiteFinder/bsfQC/main.nf | 2 +- .../sortAnnotationForBindingSiteFinder/main.nf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 20a860ee..8f8d1308 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -1,6 +1,6 @@ process BindingSiteFinderAnalysis { tag "$meta.id" - label 'process_low' + label 'process_single' //conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/local/BindingSiteFinder/bsfQC/main.nf b/modules/local/BindingSiteFinder/bsfQC/main.nf index dea29bf0..c1b8589c 100644 --- a/modules/local/BindingSiteFinder/bsfQC/main.nf +++ b/modules/local/BindingSiteFinder/bsfQC/main.nf @@ -1,6 +1,6 @@ process bsfQC { tag "$meta.id" - label 'process_low' + label 'process_single' container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'docker://melinak/bindingsitefinder:latest': diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf index 77956704..3c47f390 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -1,6 +1,6 @@ process sortAnnotationForBindingSiteFinder { tag "$meta.id" - label 'process_low' + label 'process_single' container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'docker://melinak/bindingsitefinder:latest': From 6cdfae9a4ce0d51cdabf93958239089d05319a37 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Tue, 25 Mar 2025 11:20:13 +0100 Subject: [PATCH 07/19] bsf start subworkflow --- .../DefineBindingSites/main.nf | 2 +- subworkflows/local/bindingsitefinder/main.nf | 42 +++++++++++++++ subworkflows/local/bindingsitefinder/meta.yml | 51 +++++++++++++++++++ .../bindingsitefinder/tests/main.nf.test | 45 ++++++++++++++++ 4 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 subworkflows/local/bindingsitefinder/main.nf create mode 100644 subworkflows/local/bindingsitefinder/meta.yml create mode 100644 subworkflows/local/bindingsitefinder/tests/main.nf.test diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 8f8d1308..4ed02daf 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -1,4 +1,4 @@ -process BindingSiteFinderAnalysis { +process defineBindingSites { tag "$meta.id" label 'process_single' diff --git a/subworkflows/local/bindingsitefinder/main.nf b/subworkflows/local/bindingsitefinder/main.nf new file mode 100644 index 00000000..0fd508e2 --- /dev/null +++ b/subworkflows/local/bindingsitefinder/main.nf @@ -0,0 +1,42 @@ + +include { sortAnnotationForBindingSiteFinder } from '../../../modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main' +include { defineBindingSites } from '../../../modules/local/BindingSiteFinder/DefineBindingSites/main' +include { bsfQC } from '../../../modules/local/BindingSiteFinder/bsfQC/main' + +workflow BINDINGSITEFINDER { + + take: + + gtf_ch // channel: [ val(meta), [ gtf ] ] + bw_ch // channel: [ val(meta), [ bigwig ] ] + peak_ch // channel: [ peaks ] + + main: + + ch_versions = Channel.empty() + + // Destructure outputs from sortAnnotationForBindingSiteFinder(gtf_ch) + tuple_ch = sortAnnotationForBindingSiteFinder(gtf_ch) + gns_ch = tuple_ch.gns_rds + regions_ch = tuple_ch.regions_rds + ch_versions = ch_versions.mix(sortAnnotationForBindingSiteFinder.out.versions.first()) + + // Pass annotation outputs, bigwig files and peak file to sortAnnotationForBindingSiteFinder(bw_ch) + bs_ch = defineBindingSites(bw_ch, gns_ch, regions_ch, peak_ch) + ch_versions = ch_versions.mix(defineBindingSites.out.versions.first()) + + // Extract only the rds output from bs_ch + rds_ch = bs_ch.binding_sites_rds + + // Pass the rds output to bsfQC + qc_ch = bsfQC(rds_ch) + ch_versions = ch_versions.mix(bsfQC.out.versions.first()) + + emit: + csv = DefineBindingSites.out.csv // channel: [ val(meta), [ csv ] ] + rds = DefineBindingSites.out.rds // channel: [ val(meta), [ rds ] ] + html = bsfQC.out.html // channel: [ val(meta), [ html ] ] + + versions = ch_versions // channel: [ versions.yml ] +} + diff --git a/subworkflows/local/bindingsitefinder/meta.yml b/subworkflows/local/bindingsitefinder/meta.yml new file mode 100644 index 00000000..2a286607 --- /dev/null +++ b/subworkflows/local/bindingsitefinder/meta.yml @@ -0,0 +1,51 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "bindingsitefinder" +## TODO nf-core: Add a description of the subworkflow and list keywords +description: Sort SAM/BAM/CRAM file +keywords: + - sort + - bam + - sam + - cram +## TODO nf-core: Add a list of the modules and/or subworkflows used in the subworkflow +components: + - samtools/sort + - samtools/index +## TODO nf-core: List all of the channels used as input with a description and their structure +input: + - ch_bam: + type: file + description: | + The input channel containing the BAM/CRAM/SAM files + Structure: [ val(meta), path(bam) ] + pattern: "*.{bam/cram/sam}" +## TODO nf-core: List all of the channels used as output with a descriptions and their structure +output: + - bam: + type: file + description: | + Channel containing BAM files + Structure: [ val(meta), path(bam) ] + pattern: "*.bam" + - bai: + type: file + description: | + Channel containing indexed BAM (BAI) files + Structure: [ val(meta), path(bai) ] + pattern: "*.bai" + - csi: + type: file + description: | + Channel containing CSI files + Structure: [ val(meta), path(csi) ] + pattern: "*.csi" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@MelinaKlostermann" +maintainers: + - "@MelinaKlostermann" diff --git a/subworkflows/local/bindingsitefinder/tests/main.nf.test b/subworkflows/local/bindingsitefinder/tests/main.nf.test new file mode 100644 index 00000000..9141f86d --- /dev/null +++ b/subworkflows/local/bindingsitefinder/tests/main.nf.test @@ -0,0 +1,45 @@ +// TODO nf-core: Once you have added the required tests, please run the following command to build this file: +// nf-core subworkflows test bindingsitefinder +nextflow_workflow { + + name "Test Subworkflow BINDINGSITEFINDER" + script "../main.nf" + workflow "BINDINGSITEFINDER" + + tag "subworkflows" + tag "subworkflows_" + tag "subworkflows/bindingsitefinder" + // TODO nf-core: Add tags for all modules used within this subworkflow. Example: + tag "samtools" + tag "samtools/sort" + tag "samtools/index" + + + // TODO nf-core: Change the test name preferably indicating the test-data and file-format used + test("sarscov2 - bam - single_end") { + + when { + workflow { + """ + // TODO nf-core: define inputs of the workflow here. Example: + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + //TODO nf-core: Add all required assertions to verify the test output. + ) + } + } +} From b42acd18630ed0863894c09ba1512328c1697f82 Mon Sep 17 00:00:00 2001 From: HDash <16350928+HDash@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:38:48 +0000 Subject: [PATCH 08/19] Add tests for sortAnnotationForBindingSiteFinder --- .../sortAnnotationForBindingSiteFinder.R | 9 +-- .../main.nf | 8 +-- .../tests/main.nf.test | 64 +++++++++++++++++++ .../tests/main.nf.test.snap | 14 ++++ 4 files changed, 87 insertions(+), 8 deletions(-) rename {modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder => bin}/sortAnnotationForBindingSiteFinder.R (85%) mode change 100644 => 100755 create mode 100644 modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test create mode 100644 modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R b/bin/sortAnnotationForBindingSiteFinder.R old mode 100644 new mode 100755 similarity index 85% rename from modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R rename to bin/sortAnnotationForBindingSiteFinder.R index 46f58faf..5ce125bd --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R +++ b/bin/sortAnnotationForBindingSiteFinder.R @@ -1,3 +1,4 @@ +#!/usr/bin/env Rscript # command line arguments args <- commandArgs(trailingOnly = TRUE) @@ -35,10 +36,10 @@ saveRDS(gns, out_gns) # Get regions as Granges -cdseq = cds(annoDb) -intrns = unlist(intronsByTranscript(annoDb)) -utrs3 = unlist(threeUTRsByTranscript(annoDb)) -utrs5 = unlist(fiveUTRsByTranscript(annoDb)) +cdseq = cds(annoDb) +intrns = unlist(intronsByTranscript(annoDb)) +utrs3 = unlist(threeUTRsByTranscript(annoDb)) +utrs5 = unlist(fiveUTRsByTranscript(annoDb)) regions = GRangesList(CDS = cdseq, Intron = intrns, UTR3 = utrs3, UTR5 = utrs5) saveRDS(regions, out_regions) diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf index 3c47f390..fc5458f3 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -10,8 +10,8 @@ process sortAnnotationForBindingSiteFinder { tuple val(meta), path(gtf_file) output: - tuple val(meta), path("*gns.rds"), emit: gns_rds - tuple val(meta), path("*regions.rds"), emit: regions_rds + tuple val(meta), path("gns.rds"), emit: gns_rds + tuple val(meta), path("regions.rds"), emit: regions_rds path "versions.yml", emit: versions when: @@ -19,7 +19,7 @@ process sortAnnotationForBindingSiteFinder { script: """ - Rscript /home/mek24iv/nfcore-clipseq/devel_BindingSiteFinder/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R \\ + sortAnnotationForBindingSiteFinder.R \\ $gtf_file \\ gns.rds \\ regions.rds @@ -41,4 +41,4 @@ process sortAnnotationForBindingSiteFinder { \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') END_VERSIONS """ -} \ No newline at end of file +} diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test new file mode 100644 index 00000000..a12d798c --- /dev/null +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test @@ -0,0 +1,64 @@ +// TODO nf-core: Once you have added the required tests, please run the following command to build this file: +// nf-core modules test modules/hirutest +nextflow_process { + + name "Test Process CLIPSEQ_SORTANNOTATIONSFORBINDINGSITEFINDER" + script "../main.nf" + process "sortAnnotationForBindingSiteFinder" + + tag "clipseq" + tag "clipseq_sortannotationsforbindingsitefinder" + tag "sortannotationsforbindingsitefinder" + + test("sortAnnotationsForBindingSiteFinder - gtf") { + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + file('https://raw.githubusercontent.com/nf-core/test-datasets/clipseq/v_2_0/genome/yeast_MitoV_filtered_seg.gtf'), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out.versions).match("versions") } + ) + + // These statements fail inside assertAll (not sure why) + assert new File(process.out.gns_rds[0][1]).exists() + assert new File(process.out.regions_rds[0][1]).exists() + } + + } + + // TODO nf-core: Change the test name preferably indicating the test-data and file-format used but keep the " - stub" suffix. + test("sortAnnotationsForBindingSiteFinder - gtf - stub") { + + options "-stub" + + when { + process { + """ + // TODO nf-core: define inputs of the process here. Example: + + input[0] = [ + [ id:'test' ], // meta map + file('https://raw.githubusercontent.com/nf-core/test-datasets/clipseq/v_2_0/genome/yeast_MitoV_filtered_seg.gtf'), + ] + """ + } + } + + then { + assert process.success + assert new File(process.out.gns_rds[0][1]).exists() + assert new File(process.out.regions_rds[0][1]).exists() + } + + } + +} diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap new file mode 100644 index 00000000..06761a27 --- /dev/null +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap @@ -0,0 +1,14 @@ +{ + "versions": { + "content": [ + [ + "versions.yml:md5,978f7f625274870d4e9dd7d737845e31" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.10.5" + }, + "timestamp": "2025-03-25T10:28:10.976439" + } +} \ No newline at end of file From 38e0b3482f9184851aaa9902ef69e9e5f087db78 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Tue, 25 Mar 2025 13:21:19 +0100 Subject: [PATCH 09/19] bsf repair contantainer command --- .gitignore | 3 ++- modules/local/BindingSiteFinder/DefineBindingSites/main.nf | 5 +---- modules/local/BindingSiteFinder/bsfQC/main.nf | 6 ++---- .../sortAnnotationForBindingSiteFinder/main.nf | 4 +--- subworkflows/local/bindingsitefinder/main.nf | 6 +++--- 5 files changed, 9 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index b47b44c0..055ac835 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ testing/ testing* *.pyc .nf-test/ -*.Rhistory \ No newline at end of file +*.Rhistory +*version?current=* \ No newline at end of file diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 4ed02daf..c9fc4453 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -2,10 +2,7 @@ process defineBindingSites { tag "$meta.id" label 'process_single' - //conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker://melinak/bindingsitefinder:latest': - 'melinak/bindingsitefinder:latest' }" + container "${'melinak/bindingsitefinder:1.1'}" input: tuple val(meta), path(bw_files_folder) diff --git a/modules/local/BindingSiteFinder/bsfQC/main.nf b/modules/local/BindingSiteFinder/bsfQC/main.nf index c1b8589c..cfdf079f 100644 --- a/modules/local/BindingSiteFinder/bsfQC/main.nf +++ b/modules/local/BindingSiteFinder/bsfQC/main.nf @@ -2,15 +2,13 @@ process bsfQC { tag "$meta.id" label 'process_single' - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker://melinak/bindingsitefinder:latest': - 'melinak/bindingsitefinder:latest' }" + container "${'melinak/bindingsitefinder:1.1'}" input: tuple val(meta), path(binding_sites_rds) output: - tuple val(meta), path("*BindingSiteFinderQC.html"), emit: BindingSiteFinderQC + tuple val(meta), path("*BindingSiteFinderQC.html"), emit: bindingSiteFinderQC path "versions.yml", emit: versions when: diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf index 3c47f390..6af2afec 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -2,9 +2,7 @@ process sortAnnotationForBindingSiteFinder { tag "$meta.id" label 'process_single' - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker://melinak/bindingsitefinder:latest': - 'melinak/bindingsitefinder:latest' }" + container "${'melinak/bindingsitefinder:1.1'}" input: tuple val(meta), path(gtf_file) diff --git a/subworkflows/local/bindingsitefinder/main.nf b/subworkflows/local/bindingsitefinder/main.nf index 0fd508e2..9e050cc8 100644 --- a/subworkflows/local/bindingsitefinder/main.nf +++ b/subworkflows/local/bindingsitefinder/main.nf @@ -33,9 +33,9 @@ workflow BINDINGSITEFINDER { ch_versions = ch_versions.mix(bsfQC.out.versions.first()) emit: - csv = DefineBindingSites.out.csv // channel: [ val(meta), [ csv ] ] - rds = DefineBindingSites.out.rds // channel: [ val(meta), [ rds ] ] - html = bsfQC.out.html // channel: [ val(meta), [ html ] ] + csv = defineBindingSites.out.binding_sites_csv // channel: [ val(meta), [ csv ] ] + rds = defineBindingSites.out.binding_sites_rds // channel: [ val(meta), [ rds ] ] + html = bsfQC.out.bindingSiteFinderQC // channel: [ val(meta), [ html ] ] versions = ch_versions // channel: [ versions.yml ] } From 957906230bb43ad17300c6b052afc3799550ef3f Mon Sep 17 00:00:00 2001 From: HDash <16350928+HDash@users.noreply.github.com> Date: Tue, 25 Mar 2025 13:18:34 +0000 Subject: [PATCH 10/19] Add test setup for DefineBindingSites Add bigwig temp testing files. At current state, the R script errors out. --- bin/DefineBindingSites.R | 208 ++++++++++++++++++ .../DefineBindingSites/main.nf | 5 +- .../DefineBindingSites/tests/main.nf.test | 89 ++++++++ .../HNRNPC.genome.xl.bedgraph_minus.bw | Bin 0 -> 26182 bytes .../bigwigs/HNRNPC.genome.xl.bedgraph_plus.bw | Bin 0 -> 26218 bytes .../PHO92_A.genome.xl.bedgraph_minus.bw | Bin 0 -> 26182 bytes .../PHO92_A.genome.xl.bedgraph_plus.bw | Bin 0 -> 26218 bytes .../PHO92_B.genome.xl.bedgraph_minus.bw | Bin 0 -> 26182 bytes .../PHO92_B.genome.xl.bedgraph_plus.bw | Bin 0 -> 26218 bytes .../PHO92_C.genome.xl.bedgraph_minus.bw | Bin 0 -> 26182 bytes .../PHO92_C.genome.xl.bedgraph_plus.bw | Bin 0 -> 26218 bytes 11 files changed, 299 insertions(+), 3 deletions(-) create mode 100755 bin/DefineBindingSites.R create mode 100644 modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test create mode 100644 tests/bigwigs/HNRNPC.genome.xl.bedgraph_minus.bw create mode 100644 tests/bigwigs/HNRNPC.genome.xl.bedgraph_plus.bw create mode 100644 tests/bigwigs/PHO92_A.genome.xl.bedgraph_minus.bw create mode 100644 tests/bigwigs/PHO92_A.genome.xl.bedgraph_plus.bw create mode 100644 tests/bigwigs/PHO92_B.genome.xl.bedgraph_minus.bw create mode 100644 tests/bigwigs/PHO92_B.genome.xl.bedgraph_plus.bw create mode 100644 tests/bigwigs/PHO92_C.genome.xl.bedgraph_minus.bw create mode 100644 tests/bigwigs/PHO92_C.genome.xl.bedgraph_plus.bw diff --git a/bin/DefineBindingSites.R b/bin/DefineBindingSites.R new file mode 100755 index 00000000..8fe5ec7e --- /dev/null +++ b/bin/DefineBindingSites.R @@ -0,0 +1,208 @@ +#!/usr/bin/env Rscript + +# ----------------------------- +# Module make binding sites +# ----------------------------- +options(warn = -1) + +# libraries +################ + # Suppress messages +suppressMessages(library(BindingSiteFinder)) +suppressMessages(library(GenomicRanges)) +suppressMessages(library(rtracklayer)) +suppressMessages(library(tidyverse)) +suppressMessages(library(optparse)) + +# print BSF version +################## +cat("BindingSiteFinder version: ", as.character(packageVersion("BindingSiteFinder")), "\n") + + +# Input +################ + +# Specify the input arguments +option_list <- list( + make_option(c("-b", "--bw_files_folder"), type = "character"), + make_option(c("-p", "--peaks"), type = "character"), + make_option(c("-g", "--anno_genes"), type = "character"), + make_option(c("-r", "--anno_regions"), type = "character"), + # output paths + make_option(c("-o", "--output_path"), type = "character", default = "."), + + # optional parameters to customize binding sites + #-------------------------------- + # the default values are the ones specified in the Bioconductor package BindingSiteFinder + # https://www.bioconductor.org/packages/release/bioc/manuals/BindingSiteFinder/man/BindingSiteFinder.pdf + # the default values as specified in BindingSiteFinder 2.4.0 are given in the comment after the parameter name + # optional parameters for binding site defnition + make_option(c( "--peak_score_global_cuttoff"), type = "numeric"), # default 0.01 + make_option(c( "--bsWidth"), type = "numeric"), # default automatic estimation + make_option(c( "--peak_score_genewise_cuttoff"), type = "numeric"), # default automatic estimation + make_option(c( "--minWidth"), type = "numeric"), # default 2 + make_option(c( "--minCrosslinks"), type = "numeric"), # default 2 + make_option(c( "--minCLSites"), type = "numeric"), # default 1 + make_option(c( "--maxBsWidth"), type = "numeric"), # default 13 + # optional parameters for reproducibility + # make_option(c( "--reproducibility_cutoff"), type = "numeric"), + # make_option(c( "--reproducibility_nReps"), type = "numeric"), + # optional parameters for gene and region assignment + make_option(c( "--method_gene_overlaps"), type = "character"), # default "frequency" + make_option(c( "--rule_gene_overlaps"), type = "character"), # default NULL (only needed for --method_gene_overlaps "hierarchy") + make_option(c( "--method_region_overlaps"), type = "character"), # default "frequency" + make_option(c( "--rule_region_overlaps"), type = "character"), # default NULL (only needed for --method_region_overlaps "hierarchy") + # optional parameters to fit non-standard genomes + make_option(c( "--match_geneID"), type = "character"), # default "gene_id" + make_option(c( "--match_geneName"), type = "character"), # default "gene_name" + make_option(c( "--match_geneType"), type = "character"), # default "gene_type" + # optional parameters to fit peakcaller scores + make_option(c( "--match_score"), type = "numeric"), # default "score" + make_option(c( "--match_score_option"), type = "character") # default "max" +) + +# Parse arguments +parser <- OptionParser(option_list = option_list) +args <- parse_args(parser) + +# Default parameters (NULL means use function defaults) +params.input.output <- list( + bw_files_folder = args$bw_files_folder, + peaks = args$peaks, + anno_genes = args$anno_genes, + anno_regions = args$anno_regions, + output_path = args$output_path) + +params.pureClipGlobalFilter <- list( + cuttoff = args$peak_score_global_cuttoff) + +params.estimateBsWidth <- list( + est.minWidth = args$minWidth, + est.maxBsWidth = args$maxBsWidth) + +params.pureClipGeneWiseFilter <- list( + cutoff = args$peak_score_genewise_cuttoff, + match.score = args$match_score, + match.geneID = args$match_geneID, + overlaps = args$method_gene_overlaps) + +params.makeBindingSites <- list( + minWidth = args$minWidth, + minCrosslinks = args$minCrosslinks, + minClSites = args$minCLSites) + +params.reproducibilityFilter <- list( + cutoff = args$reproducibility_cutoff, + nReps = args$reproducibility_nReps) + +params.assignToGenes <- list( + overlaps = args$method_gene_overlaps, + overlaps.rule = args$rule_gene_overlaps, + match.geneID = args$match_geneID, + match.geneName = args$match_geneName, + match.geneType = args$match_geneType + ) +params.assignToTranscriptRegions <- list( + overlaps = args$method_region_overlaps, + overlaps.rule = args$rule_region_overlaps) + +params.annotateWithScore <- list( + match.score = args$match_score, + match.option = args$match_score_option +) + +# Remove NULL values so function defaults apply +params.pureClipGlobalFilter <- params.pureClipGlobalFilter[!sapply(params.pureClipGlobalFilter, is.null)] +params.estimateBsWidth <- params.estimateBsWidth[!sapply(params.estimateBsWidth, is.null)] +params.pureClipGeneWiseFilter <- params.pureClipGeneWiseFilter[!sapply(params.pureClipGeneWiseFilter, is.null)] +params.makeBindingSites <- params.makeBindingSites[!sapply(params.makeBindingSites, is.null)] +params.reproducibilityFilter <- params.reproducibilityFilter[!sapply(params.reproducibilityFilter, is.null)] +params.assignToGenes <- params.assignToGenes[!sapply(params.assignToGenes, is.null)] +params.assignToTranscriptRegions <- params.assignToTranscriptRegions[!sapply(params.assignToTranscriptRegions, is.null)] +params.annotateWithScore <- params.annotateWithScore[!sapply(params.annotateWithScore, is.null)] + +######################## +# BindingSiteFinder +####################### +# crosslinks +bw_files_names <- list.files(params.input.output$bw_files_folder) + +clipFilesP <- list.files(params.input.output$bw_files_folder, pattern = "plus.bw$", full.names = TRUE) +clipFilesM <- list.files(params.input.output$bw_files_folder, pattern = "minus.bw$", full.names = TRUE) +cat(clipFilesP) +cat(clipFilesM) + + +# annotation +gns <- readRDS(params.input.output$anno_genes) +regions <- readRDS(params.input.output$anno_regions) + + +# Peaks from pureclip +peaks = rtracklayer::import(con = params.input.output$peaks, format = "BED", extraCols=c("additionalScores" = "character")) +peaks$additionalScores = NULL +peaks$name = NULL + + + +# Prepare meta data +meta = data.frame( + id = c(1:length(clipFilesP)), + condition = factor(rep("all", length(clipFilesP))), # add option for multiple groups from sample file + clPlus = clipFilesP, + clMinus = clipFilesM) + + +# run BindingSiteFinder +####################### + +cat("############################# \n Running BindingSiteFinder \n############################# \n") +bds = BSFDataSetFromBigWig(ranges = peaks, meta = meta, silent =T) + +cat("\nGlobal filter on peak sites \n \n") +bds = do.call(pureClipGlobalFilter, + c(list(bds), + params.pureClipGlobalFilter)) # param cutoff +cat("\nEstimate binding site width \n \n") +bds = do.call(estimateBsWidth, + c(list(bds, anno.genes = gns), + params.estimateBsWidth)) # optional param: bsWidth + +cat("\nGenewise filter on peak sites \n \n") +bds = do.call(pureClipGeneWiseFilter, + c(list(bds, anno.genes = gns), + params.pureClipGeneWiseFilter)) # param cutoff, overlaps, match score, match geneID + +cat("\nMake binding sites \n \n") +bds = do.call(makeBindingSites, + c(list(bds), + params.makeBindingSites)) # params minWidth, minCrosslinks, minCLSites + + +# bds = do.call(reproducibilityFilter, c(list(bds), params.reproducibilityFilter)) # params cutoff, nReps +cat("\nAssign binding sites to genes \n \n") +bds = do.call(assignToGenes, c(list(bds, anno.genes = gns), + params.assignToGenes)) # params overlaps, overlaps.rule, match.geneID, match.geneName, match.geneType + +cat("\nAssign binding sites to transcript regions \n \n") +bds = do.call(assignToTranscriptRegions, c(list(bds,anno.transcriptRegionList = regions), + params.assignToTranscriptRegions))# params overlaps, overlaps.rule, + +cat("\nAnotate binding scores \n \n") +bds = do.call(annotateWithScore, c(list(bds, peaks),params.annotateWithScore)) #match.score, match.option + +cat("\nSaving bindings sites \n \n") +bs_gr = getRanges(bds) +names(bs_gr) <- 1:NROW(bs_gr) +bs_df <- as.data.frame(bs_gr) + + +# export outputs +######################## + +exportToBED(bds, con = paste0(params.input.output$output_path , "/myBindingSites.bed")) +saveRDS(bds, paste0(params.input.output$output_path ,"/bds_object.rds")) +saveRDS(bs_df, paste0(params.input.output$output_path ,"/bindingSites.rds")) +write.csv(bs_df, file = paste0(params.input.output$output_path,"/bindingSites.csv"), row.names = FALSE) + + diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 4ed02daf..db2c28f5 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -47,12 +47,11 @@ process defineBindingSites { // --match_score_option $params.match_score_option \\ """ - Rscript DefineBindingSites.R \\ + DefineBindingSites.R \\ --bw_files_folder $bw_files_folder \\ --peaks $peaks \\ --anno_genes $anno_gns \\ --anno_regions $anno_regions \\ - --sample_sheet $sample_sheet \\ --output_path . \\ cat <<-END_VERSIONS > versions.yml @@ -72,4 +71,4 @@ process defineBindingSites { \$(Rscript -e "packageVersion('BindingSiteFinder')" |& sed '1!d ; s/[1] //') END_VERSIONS """ -} \ No newline at end of file +} diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test b/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test new file mode 100644 index 00000000..edd6b13d --- /dev/null +++ b/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test @@ -0,0 +1,89 @@ +// TODO nf-core: Once you have added the required tests, please run the following command to build this file: +// nf-core modules test modules/hirutest +nextflow_process { + + name "Test Process CLIPSEQ_DEFINEBINDINGSITES" + script "../main.nf" + process "defineBindingSites" + + tag "clipseq" + tag "clipseq_definebindingsites" + tag "definebindingsites" + + // Global setup for rds input files + setup { + run("sortAnnotationForBindingSiteFinder", alias: "ANNOTATIONS") { + script "../../sortAnnotationForBindingSiteFinder/main.nf" + process { + """ + input[0] = [ + [ id:'test_sort' ], // meta map + file('https://raw.githubusercontent.com/nf-core/test-datasets/clipseq/v_2_0/genome/yeast_MitoV_filtered_seg.gtf'), + ] + """ + } + } + } + + test("DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds") { + + // TODO nf-core: If you are created a test for a chained module + // (the module requires running more than one process to generate the required output) + // add the 'setup' method here. + // You can find more information about how to use a 'setup' method in the docs (https://nf-co.re/docs/contributing/modules#steps-for-creating-nf-test-for-chained-modules). + + when { + process { + """ + // TODO nf-core: define inputs of the process here. Example: + input[0] = [ + [ id:'test' ], // meta map + file('/Users/hdash/code/public/clipseq/tests/bigwigs', checkIfExists: true), + ] + input[1] = [ + [ id:'test' ], // meta map + file('/Users/hdash/code/public/clipseq/results/05_peakcalling/pureclip/HNRNPC_pureclip_crosslinks.bed', checkIfExists: true), + ] + input[2] = ANNOTATIONS.out[0] + input[3] = ANNOTATIONS.out[1] + """ + } + } + + then { + assertAll( + { assert process.success }, + // { assert snapshot(process.out).match() } + //TODO nf-core: Add all required assertions to verify the test output. + // See https://nf-co.re/docs/contributing/tutorials/nf-test_assertions for more information and examples. + ) + } + + } + + // TODO nf-core: Change the test name preferably indicating the test-data and file-format used but keep the " - stub" suffix. + // test("DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds - stub") { + + // options "-stub" + + // when { + // process { + // """ + // // TODO nf-core: define inputs of the process here. Example: + + // input = ["","","",""] + // """ + // } + // } + + // then { + // assertAll( + // { assert process.success }, + // { assert snapshot(process.out).match() } + // //TODO nf-core: Add all required assertions to verify the test output. + // ) + // } + + // } + +} diff --git a/tests/bigwigs/HNRNPC.genome.xl.bedgraph_minus.bw b/tests/bigwigs/HNRNPC.genome.xl.bedgraph_minus.bw new file mode 100644 index 0000000000000000000000000000000000000000..a136ad2dbfc1f78037d4787c3c1ad0aaf3fadea6 GIT binary patch literal 26182 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 literal 0 HcmV?d00001 diff --git a/tests/bigwigs/PHO92_A.genome.xl.bedgraph_minus.bw b/tests/bigwigs/PHO92_A.genome.xl.bedgraph_minus.bw new file mode 100644 index 0000000000000000000000000000000000000000..a136ad2dbfc1f78037d4787c3c1ad0aaf3fadea6 GIT binary patch literal 26182 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 literal 0 HcmV?d00001 diff --git a/tests/bigwigs/PHO92_B.genome.xl.bedgraph_minus.bw b/tests/bigwigs/PHO92_B.genome.xl.bedgraph_minus.bw new file mode 100644 index 0000000000000000000000000000000000000000..a136ad2dbfc1f78037d4787c3c1ad0aaf3fadea6 GIT binary patch literal 26182 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 literal 0 HcmV?d00001 diff --git a/tests/bigwigs/PHO92_C.genome.xl.bedgraph_minus.bw b/tests/bigwigs/PHO92_C.genome.xl.bedgraph_minus.bw new file mode 100644 index 0000000000000000000000000000000000000000..a136ad2dbfc1f78037d4787c3c1ad0aaf3fadea6 GIT binary patch literal 26182 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 literal 0 HcmV?d00001 From b94d637f4792acd9baf5e213632a086864c6383b Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Tue, 25 Mar 2025 14:21:01 +0100 Subject: [PATCH 11/19] bsf fix docker container --- .../BindingSiteFinder/bsfQC => bin}/BindingSiteFinderQC.R | 0 .../BindingSiteFinder/bsfQC => bin}/BindingSiteFinderQC.qmd | 0 .../DefineBindingSites => bin}/DefineBindingSites.R | 0 .../sortAnnotationForBindingSiteFinder.R | 0 modules/local/BindingSiteFinder/DefineBindingSites/main.nf | 1 - modules/local/BindingSiteFinder/bsfQC/main.nf | 2 +- .../sortAnnotationForBindingSiteFinder/main.nf | 6 +++--- 7 files changed, 4 insertions(+), 5 deletions(-) rename {modules/local/BindingSiteFinder/bsfQC => bin}/BindingSiteFinderQC.R (100%) rename {modules/local/BindingSiteFinder/bsfQC => bin}/BindingSiteFinderQC.qmd (100%) rename {modules/local/BindingSiteFinder/DefineBindingSites => bin}/DefineBindingSites.R (100%) rename {modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder => bin}/sortAnnotationForBindingSiteFinder.R (100%) mode change 100644 => 100755 diff --git a/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R b/bin/BindingSiteFinderQC.R similarity index 100% rename from modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R rename to bin/BindingSiteFinderQC.R diff --git a/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.qmd b/bin/BindingSiteFinderQC.qmd similarity index 100% rename from modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.qmd rename to bin/BindingSiteFinderQC.qmd diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R b/bin/DefineBindingSites.R similarity index 100% rename from modules/local/BindingSiteFinder/DefineBindingSites/DefineBindingSites.R rename to bin/DefineBindingSites.R diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R b/bin/sortAnnotationForBindingSiteFinder.R old mode 100644 new mode 100755 similarity index 100% rename from modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R rename to bin/sortAnnotationForBindingSiteFinder.R diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index c9fc4453..6c115802 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -49,7 +49,6 @@ process defineBindingSites { --peaks $peaks \\ --anno_genes $anno_gns \\ --anno_regions $anno_regions \\ - --sample_sheet $sample_sheet \\ --output_path . \\ cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/BindingSiteFinder/bsfQC/main.nf b/modules/local/BindingSiteFinder/bsfQC/main.nf index cfdf079f..2d88e087 100644 --- a/modules/local/BindingSiteFinder/bsfQC/main.nf +++ b/modules/local/BindingSiteFinder/bsfQC/main.nf @@ -16,7 +16,7 @@ process bsfQC { script: """ - Rscript clipseq/modules/local/BindingSiteFinder/bsfQC/BindingSiteFinderQC.R \\ + Rscript BindingSiteFinderQC.R \\ $binding_sites_rds cat <<-END_VERSIONS > versions.yml diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf index 6af2afec..4169397b 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -5,7 +5,7 @@ process sortAnnotationForBindingSiteFinder { container "${'melinak/bindingsitefinder:1.1'}" input: - tuple val(meta), path(gtf_file) + tuple val(meta), path(gtf) output: tuple val(meta), path("*gns.rds"), emit: gns_rds @@ -17,8 +17,8 @@ process sortAnnotationForBindingSiteFinder { script: """ - Rscript /home/mek24iv/nfcore-clipseq/devel_BindingSiteFinder/modules/local/sortAnnotationForBindingSiteFinder/sortAnnotationForBindingSiteFinder.R \\ - $gtf_file \\ + Rscript ~/nfcore-clipseq/clipseq/bin/sortAnnotationForBindingSiteFinder.R \\ + $gtf \\ gns.rds \\ regions.rds cat <<-END_VERSIONS > versions.yml From 9ff75a00daa563d553c84331344fdd1851bd5ea5 Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Wed, 26 Mar 2025 13:22:06 +0100 Subject: [PATCH 12/19] bsf fix binding site estimation --- bin/DefineBindingSites.R | 7 +++++-- bin/sortAnnotationForBindingSiteFinder.R | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bin/DefineBindingSites.R b/bin/DefineBindingSites.R index 1122cc4c..d4fc3f57 100755 --- a/bin/DefineBindingSites.R +++ b/bin/DefineBindingSites.R @@ -162,8 +162,11 @@ bds = do.call(pureClipGlobalFilter, c(list(bds), params.pureClipGlobalFilter)) # param cutoff cat("\nEstimate binding site width \n \n") -bds = do.call(estimateBsWidth, - c(list(bds, anno.genes = gns), +chr_names <- unique(seqnames(peaks)) +bds = do.call(estimateBsWidth, + c(list(bds, + anno.genes = gns, + est.subsetChromosome = as.character(chr_names[1])), params.estimateBsWidth)) # optional param: bsWidth cat("\nGenewise filter on peak sites \n \n") diff --git a/bin/sortAnnotationForBindingSiteFinder.R b/bin/sortAnnotationForBindingSiteFinder.R index 5ce125bd..3bf72750 100755 --- a/bin/sortAnnotationForBindingSiteFinder.R +++ b/bin/sortAnnotationForBindingSiteFinder.R @@ -9,7 +9,7 @@ out_gns = args[2] out_regions = args[3] # for local tests -#annoFile = "/Users/melinaklostermann/Documents/projects/anno/GENCODEv31-p12/gencode.v31.annotation.gtf" +# annoFile = "/Users/melinaklostermann/Documents/projects/anno/GENCODEv31-p12/gencode.v31.annotation.gtf" # out_gns = "/Users/melinaklostermann/Documents/projects/nf-core-clipseq/devel_folder/outputs/gns.rds" # out_regions = "/Users/melinaklostermann/Documents/projects/nf-core-clipseq/devel_folder/outputs/regions.rds" From f2f0af424c8e771803a795549b9d4284e964086d Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 29 Sep 2025 11:16:40 +0200 Subject: [PATCH 13/19] new branch --- conf/test_full.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index 2531e229..f3b76a26 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -22,8 +22,8 @@ params { // Genome references ncrna_fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/clipseq/v_2_0/genome/homosapiens_smallRNA.fa.gz" - fasta = 's3://ngi-igenomes/test-data/clipseq/input_data/reference/GRCh38.primary_assembly.genome.fa.gz' - gtf = 's3://ngi-igenomes/test-data/clipseq/input_data/reference/gencode.v37.primary_assembly.annotation.gtf.gz' + fasta = '/Users/melinaklostermann/Documents/projects/anno/ensemble_113_hs/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz' + gtf = '/Users/melinaklostermann/Documents/projects/anno/ensemble_113_hs/Homo_sapiens.GRCh38.113.gtf' move_umi = 'NNNNNNNNN' umi_separator = '_' } From ecee2b03527fb45a037df2913a2434925136e9df Mon Sep 17 00:00:00 2001 From: Charlotte Capitanchik Date: Mon, 10 Nov 2025 13:45:29 +0000 Subject: [PATCH 14/19] fix sortannotationforbindingsitefinder nf-test --- .nf-test.log | 28 +++++++++++++------ .../main.nf | 4 +-- .../tests/main.nf.test.snap | 6 ++-- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/.nf-test.log b/.nf-test.log index 50372c0c..84fcf1d3 100644 --- a/.nf-test.log +++ b/.nf-test.log @@ -1,8 +1,20 @@ -Mar-25 12:30:41.801 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 -Mar-25 12:30:41.832 [main] INFO com.askimed.nf.test.App - Arguments: [test, --profile=test,docker, --tap=test.tap, --tag, only_crosslinking_primary, tests/nf_test/test/genome_chromsizes.test, tests/nf_test/test/genome_fasta.test, tests/nf_test/test/genome_gtf.test, tests/nf_test/test/genome_indexes.test, tests/nf_test/test/genome_longest_transcript.test, tests/nf_test/test/genome_preset_genome.test, tests/nf_test/test/test_only_alignment.test, tests/nf_test/test/test_only_crosslinking.test, tests/nf_test/test/test_only_dedup.test, tests/nf_test/test/test_only_input.test, tests/nf_test/test/test_only_peakcalling.test, tests/nf_test/test/test_only_preprocessing.test] -Mar-25 12:30:43.484 [main] INFO com.askimed.nf.test.App - Nextflow Version: 24.10.5 -Mar-25 12:30:43.487 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /Users/capitac/repos/nfcore-clipseq/nf-test.config... -Mar-25 12:30:44.396 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 93 files from directory /Users/capitac/repos/nfcore-clipseq in 0.275 sec -Mar-25 12:30:44.417 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 0 files containing tests. -Mar-25 12:30:44.420 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [] -Mar-25 12:30:44.427 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 0 tests to execute. +Nov-10 13:44:01.654 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 +Nov-10 13:44:01.689 [main] INFO com.askimed.nf.test.App - Arguments: [test, modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test, --profile, docker] +Nov-10 13:44:03.844 [main] INFO com.askimed.nf.test.App - Nextflow Version: 25.04.2 +Nov-10 13:44:03.847 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /Users/capitac/repos/melinas_clipseq/nf-test.config... +Nov-10 13:44:04.506 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/sortAnnotationForBindingSiteFinder/main.nf.nf' not found. +Nov-10 13:44:04.507 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/BindingSiteFinder/main.nf.nf' not found. +Nov-10 13:44:04.673 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 130 files from directory /Users/capitac/repos/melinas_clipseq in 0.193 sec +Nov-10 13:44:04.682 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 1 files containing tests. +Nov-10 13:44:04.684 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test] +Nov-10 13:44:05.159 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 2 tests to execute. +Nov-10 13:44:05.160 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Started test plan +Nov-10 13:44:05.160 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'Test Process CLIPSEQ_SORTANNOTATIONSFORBINDINGSITEFINDER' from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test'. +Nov-10 13:44:05.161 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test 'db7166aa: sortAnnotationsForBindingSiteFinder - gtf'. type: com.askimed.nf.test.lang.process.ProcessTest +Nov-10 13:44:31.492 [main] DEBUG com.askimed.nf.test.lang.extensions.SnapshotFile - Load snapshots from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap' +Nov-10 13:44:31.514 [main] DEBUG com.askimed.nf.test.lang.extensions.Snapshot - Snapshots 'versions' match. +Nov-10 13:44:31.538 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test 'db7166aa: sortAnnotationsForBindingSiteFinder - gtf' finished. status: PASSED +Nov-10 13:44:31.549 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '64edc1bb: sortAnnotationsForBindingSiteFinder - gtf - stub'. type: com.askimed.nf.test.lang.process.ProcessTest +Nov-10 13:44:49.504 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '64edc1bb: sortAnnotationsForBindingSiteFinder - gtf - stub' finished. status: PASSED +Nov-10 13:44:49.505 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'Test Process CLIPSEQ_SORTANNOTATIONSFORBINDINGSITEFINDER' finished. snapshot file: true, skipped tests: false, failed tests: false +Nov-10 13:44:49.505 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Executed 2 tests. 0 tests failed. Done! diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf index 6a944517..3511be4f 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -2,10 +2,10 @@ process sortAnnotationForBindingSiteFinder { tag "$meta.id" label 'process_single' - container "${'melinak/bindingsitefinder:1.1'}" + container "${'docker.io/melinak/bindingsitefinder:1.1'}" input: - tuple val(meta), path(gtf) + tuple val(meta), path(gtf_file) output: tuple val(meta), path("gns.rds"), emit: gns_rds diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap index 06761a27..03cf6c31 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap @@ -2,13 +2,13 @@ "versions": { "content": [ [ - "versions.yml:md5,978f7f625274870d4e9dd7d737845e31" + "versions.yml:md5,daf57731ee0810bf63125ebfd55f2faf" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.5" + "nextflow": "25.04.2" }, - "timestamp": "2025-03-25T10:28:10.976439" + "timestamp": "2025-11-10T13:43:35.310569" } } \ No newline at end of file From 6710d23de0e89c1f845a7d8dd47575f6b816162f Mon Sep 17 00:00:00 2001 From: Charlotte Capitanchik Date: Mon, 10 Nov 2025 15:02:20 +0000 Subject: [PATCH 15/19] updat docker add peaks --- .nf-test.log | 76 ++++++++++++++----- .../DefineBindingSites/main.nf | 2 +- .../DefineBindingSites/tests/main.nf.test | 4 +- modules/local/BindingSiteFinder/bsfQC/main.nf | 2 +- tests/nextflow.config | 0 tests/peaks/HNRNPC_pureclip_peaks.bed | 4 + 6 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 tests/nextflow.config create mode 100644 tests/peaks/HNRNPC_pureclip_peaks.bed diff --git a/.nf-test.log b/.nf-test.log index 84fcf1d3..483203bd 100644 --- a/.nf-test.log +++ b/.nf-test.log @@ -1,20 +1,56 @@ -Nov-10 13:44:01.654 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 -Nov-10 13:44:01.689 [main] INFO com.askimed.nf.test.App - Arguments: [test, modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test, --profile, docker] -Nov-10 13:44:03.844 [main] INFO com.askimed.nf.test.App - Nextflow Version: 25.04.2 -Nov-10 13:44:03.847 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /Users/capitac/repos/melinas_clipseq/nf-test.config... -Nov-10 13:44:04.506 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/sortAnnotationForBindingSiteFinder/main.nf.nf' not found. -Nov-10 13:44:04.507 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/BindingSiteFinder/main.nf.nf' not found. -Nov-10 13:44:04.673 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 130 files from directory /Users/capitac/repos/melinas_clipseq in 0.193 sec -Nov-10 13:44:04.682 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 1 files containing tests. -Nov-10 13:44:04.684 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test] -Nov-10 13:44:05.159 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 2 tests to execute. -Nov-10 13:44:05.160 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Started test plan -Nov-10 13:44:05.160 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'Test Process CLIPSEQ_SORTANNOTATIONSFORBINDINGSITEFINDER' from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test'. -Nov-10 13:44:05.161 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test 'db7166aa: sortAnnotationsForBindingSiteFinder - gtf'. type: com.askimed.nf.test.lang.process.ProcessTest -Nov-10 13:44:31.492 [main] DEBUG com.askimed.nf.test.lang.extensions.SnapshotFile - Load snapshots from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test.snap' -Nov-10 13:44:31.514 [main] DEBUG com.askimed.nf.test.lang.extensions.Snapshot - Snapshots 'versions' match. -Nov-10 13:44:31.538 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test 'db7166aa: sortAnnotationsForBindingSiteFinder - gtf' finished. status: PASSED -Nov-10 13:44:31.549 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '64edc1bb: sortAnnotationsForBindingSiteFinder - gtf - stub'. type: com.askimed.nf.test.lang.process.ProcessTest -Nov-10 13:44:49.504 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '64edc1bb: sortAnnotationsForBindingSiteFinder - gtf - stub' finished. status: PASSED -Nov-10 13:44:49.505 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'Test Process CLIPSEQ_SORTANNOTATIONSFORBINDINGSITEFINDER' finished. snapshot file: true, skipped tests: false, failed tests: false -Nov-10 13:44:49.505 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Executed 2 tests. 0 tests failed. Done! +Nov-10 14:58:20.213 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 +Nov-10 14:58:20.247 [main] INFO com.askimed.nf.test.App - Arguments: [test, modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test, --profile, docker] +Nov-10 14:58:22.318 [main] INFO com.askimed.nf.test.App - Nextflow Version: 25.04.2 +Nov-10 14:58:22.320 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /Users/capitac/repos/melinas_clipseq/nf-test.config... +Nov-10 14:58:22.988 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/sortAnnotationForBindingSiteFinder/main.nf.nf' not found. +Nov-10 14:58:22.988 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/BindingSiteFinder/main.nf.nf' not found. +Nov-10 14:58:23.147 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 130 files from directory /Users/capitac/repos/melinas_clipseq in 0.186 sec +Nov-10 14:58:23.155 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 1 files containing tests. +Nov-10 14:58:23.156 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test] +Nov-10 14:58:23.560 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 1 tests to execute. +Nov-10 14:58:23.561 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Started test plan +Nov-10 14:58:23.561 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test'. +Nov-10 14:58:23.561 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds'. type: com.askimed.nf.test.lang.process.ProcessTest +Nov-10 14:59:01.625 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: 1 of 1 assertions failed + at com.askimed.nf.test.lang.extensions.GlobalMethods.assertAll(GlobalMethods.java:48) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:44) + at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:100) + at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:55) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:217) + at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:231) + at main_nf$_run_closure1$_closure3$_closure7.doCall(main.nf.test:54) + at main_nf$_run_closure1$_closure3$_closure7.doCall(main.nf.test) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.process.ProcessTest.execute(ProcessTest.java:171) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 14:59:01.647 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' finished. snapshot file: false, skipped tests: false, failed tests: true +Nov-10 14:59:01.647 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Executed 1 tests. 1 tests failed. Done! diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf index 6f89406a..023368b0 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/main.nf +++ b/modules/local/BindingSiteFinder/DefineBindingSites/main.nf @@ -2,7 +2,7 @@ process defineBindingSites { tag "$meta.id" label 'process_single' - container "${'melinak/bindingsitefinder:1.1'}" + container "${'docker.io/melinak/bindingsitefinder:1.1'}" input: tuple val(meta), path(bw_files_folder) diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test b/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test index edd6b13d..dab28fd2 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test +++ b/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test @@ -38,11 +38,11 @@ nextflow_process { // TODO nf-core: define inputs of the process here. Example: input[0] = [ [ id:'test' ], // meta map - file('/Users/hdash/code/public/clipseq/tests/bigwigs', checkIfExists: true), + file('${projectDir}/tests/bigwigs', checkIfExists: true), ] input[1] = [ [ id:'test' ], // meta map - file('/Users/hdash/code/public/clipseq/results/05_peakcalling/pureclip/HNRNPC_pureclip_crosslinks.bed', checkIfExists: true), + file('${projectDir}/tests/peaks/HNRNPC_pureclip_peaks.bed', checkIfExists: true), ] input[2] = ANNOTATIONS.out[0] input[3] = ANNOTATIONS.out[1] diff --git a/modules/local/BindingSiteFinder/bsfQC/main.nf b/modules/local/BindingSiteFinder/bsfQC/main.nf index 2d88e087..7919574f 100644 --- a/modules/local/BindingSiteFinder/bsfQC/main.nf +++ b/modules/local/BindingSiteFinder/bsfQC/main.nf @@ -2,7 +2,7 @@ process bsfQC { tag "$meta.id" label 'process_single' - container "${'melinak/bindingsitefinder:1.1'}" + container "${'docker.io/melinak/bindingsitefinder:1.1'}" input: tuple val(meta), path(binding_sites_rds) diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 00000000..e69de29b diff --git a/tests/peaks/HNRNPC_pureclip_peaks.bed b/tests/peaks/HNRNPC_pureclip_peaks.bed new file mode 100644 index 00000000..6b1c0058 --- /dev/null +++ b/tests/peaks/HNRNPC_pureclip_peaks.bed @@ -0,0 +1,4 @@ +V 138782 138783 2.04685; 2.04685 + +V 269911 269912 9.32598; 9.32598 + +V 402293 402297 11.2448;0.568906; 11.8137 + +V 244583 244584 9.32598; 9.32598 - From 0120b2d7e0a22539ffbc94bfe85cad3ff3aa9e70 Mon Sep 17 00:00:00 2001 From: Charlotte Capitanchik Date: Mon, 10 Nov 2025 15:33:29 +0000 Subject: [PATCH 16/19] change test files --- conf/test_full.config | 4 ++-- .../BindingSiteFinder/DefineBindingSites/tests/main.nf.test | 2 +- tests/peaks/HNRNPC_pureclip_crosslinks.bed | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 tests/peaks/HNRNPC_pureclip_crosslinks.bed diff --git a/conf/test_full.config b/conf/test_full.config index f3b76a26..ce8d4a0b 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -22,8 +22,8 @@ params { // Genome references ncrna_fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/clipseq/v_2_0/genome/homosapiens_smallRNA.fa.gz" - fasta = '/Users/melinaklostermann/Documents/projects/anno/ensemble_113_hs/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz' - gtf = '/Users/melinaklostermann/Documents/projects/anno/ensemble_113_hs/Homo_sapiens.GRCh38.113.gtf' + fasta = 'https://ftp.ensembl.org/pub/release-111/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz' + gtf = 'https://ftp.ensembl.org/pub/release-111/gtf/homo_sapiens/Homo_sapiens.GRCh38.111.gtf.gz' move_umi = 'NNNNNNNNN' umi_separator = '_' } diff --git a/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test b/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test index dab28fd2..d56bb739 100644 --- a/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test +++ b/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test @@ -42,7 +42,7 @@ nextflow_process { ] input[1] = [ [ id:'test' ], // meta map - file('${projectDir}/tests/peaks/HNRNPC_pureclip_peaks.bed', checkIfExists: true), + file('${projectDir}/tests/peaks/HNRNPC_pureclip_crosslinks.bed', checkIfExists: true), ] input[2] = ANNOTATIONS.out[0] input[3] = ANNOTATIONS.out[1] diff --git a/tests/peaks/HNRNPC_pureclip_crosslinks.bed b/tests/peaks/HNRNPC_pureclip_crosslinks.bed new file mode 100644 index 00000000..02b14ac7 --- /dev/null +++ b/tests/peaks/HNRNPC_pureclip_crosslinks.bed @@ -0,0 +1,5 @@ +V 138782 138783 3 2.04685 + [score_CL=2.04685;score_E=54.9984;score_B=20.4483;score_UC=2.04685] +V 269911 269912 3 9.32598 + [score_CL=9.32598;score_E=32.3965;score_B=20.6469;score_UC=9.32598] +V 402293 402294 3 11.2448 + [score_CL=11.2448;score_E=58.8501;score_B=39.9819;score_UC=11.2448] +V 402296 402297 3 0.568906 + [score_CL=0.568906;score_E=58.8411;score_B=19.0752;score_UC=0.568906] +V 244583 244584 3 9.32598 - [score_CL=9.32598;score_E=32.3965;score_B=20.6469;score_UC=9.32598] From 05bcdd91ee7b4c3ca65c71c22c3db928ed5d4ca4 Mon Sep 17 00:00:00 2001 From: Charlotte Capitanchik Date: Mon, 10 Nov 2025 15:50:05 +0000 Subject: [PATCH 17/19] add annotation filtering to main pipeline --- .nf-test.log | 32 ++++++------ .../main.nf | 2 +- .../tests/main.nf.test | 2 +- subworkflows/local/prepare_genome.nf | 50 +++++++++++-------- workflows/clipseq.nf | 2 + 5 files changed, 49 insertions(+), 39 deletions(-) diff --git a/.nf-test.log b/.nf-test.log index 483203bd..ec154651 100644 --- a/.nf-test.log +++ b/.nf-test.log @@ -1,17 +1,17 @@ -Nov-10 14:58:20.213 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 -Nov-10 14:58:20.247 [main] INFO com.askimed.nf.test.App - Arguments: [test, modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test, --profile, docker] -Nov-10 14:58:22.318 [main] INFO com.askimed.nf.test.App - Nextflow Version: 25.04.2 -Nov-10 14:58:22.320 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /Users/capitac/repos/melinas_clipseq/nf-test.config... -Nov-10 14:58:22.988 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/sortAnnotationForBindingSiteFinder/main.nf.nf' not found. -Nov-10 14:58:22.988 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/BindingSiteFinder/main.nf.nf' not found. -Nov-10 14:58:23.147 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 130 files from directory /Users/capitac/repos/melinas_clipseq in 0.186 sec -Nov-10 14:58:23.155 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 1 files containing tests. -Nov-10 14:58:23.156 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test] -Nov-10 14:58:23.560 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 1 tests to execute. -Nov-10 14:58:23.561 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Started test plan -Nov-10 14:58:23.561 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test'. -Nov-10 14:58:23.561 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds'. type: com.askimed.nf.test.lang.process.ProcessTest -Nov-10 14:59:01.625 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds' finished. status: FAILED +Nov-10 15:12:43.628 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 +Nov-10 15:12:43.662 [main] INFO com.askimed.nf.test.App - Arguments: [test, modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test, --profile, docker] +Nov-10 15:12:45.838 [main] INFO com.askimed.nf.test.App - Nextflow Version: 25.04.2 +Nov-10 15:12:45.843 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /Users/capitac/repos/melinas_clipseq/nf-test.config... +Nov-10 15:12:46.523 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/sortAnnotationForBindingSiteFinder/main.nf.nf' not found. +Nov-10 15:12:46.524 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/BindingSiteFinder/main.nf.nf' not found. +Nov-10 15:12:46.700 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 130 files from directory /Users/capitac/repos/melinas_clipseq in 0.204 sec +Nov-10 15:12:46.709 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 1 files containing tests. +Nov-10 15:12:46.710 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test] +Nov-10 15:12:47.098 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 1 tests to execute. +Nov-10 15:12:47.099 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Started test plan +Nov-10 15:12:47.099 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test'. +Nov-10 15:12:47.100 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds'. type: com.askimed.nf.test.lang.process.ProcessTest +Nov-10 15:13:25.608 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds' finished. status: FAILED org.codehaus.groovy.runtime.powerassert.PowerAssertionError: 1 of 1 assertions failed at com.askimed.nf.test.lang.extensions.GlobalMethods.assertAll(GlobalMethods.java:48) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) @@ -52,5 +52,5 @@ org.codehaus.groovy.runtime.powerassert.PowerAssertionError: 1 of 1 assertions f at picocli.CommandLine.execute(CommandLine.java:2078) at com.askimed.nf.test.App.run(App.java:39) at com.askimed.nf.test.App.main(App.java:46) -Nov-10 14:59:01.647 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' finished. snapshot file: false, skipped tests: false, failed tests: true -Nov-10 14:59:01.647 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Executed 1 tests. 1 tests failed. Done! +Nov-10 15:13:25.622 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' finished. snapshot file: false, skipped tests: false, failed tests: true +Nov-10 15:13:25.622 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Executed 1 tests. 1 tests failed. Done! diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf index 3511be4f..d441d344 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main.nf @@ -1,4 +1,4 @@ -process sortAnnotationForBindingSiteFinder { +process SORT_ANNOTATION_FOR_BINDING_SITE_FINDER { tag "$meta.id" label 'process_single' diff --git a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test index a12d798c..423b3e69 100644 --- a/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test +++ b/modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/tests/main.nf.test @@ -4,7 +4,7 @@ nextflow_process { name "Test Process CLIPSEQ_SORTANNOTATIONSFORBINDINGSITEFINDER" script "../main.nf" - process "sortAnnotationForBindingSiteFinder" + process "SORT_ANNOTATION_FOR_BINDING_SITE_FINDER" tag "clipseq" tag "clipseq_sortannotationsforbindingsitefinder" diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 45934881..592e7296 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -2,26 +2,27 @@ // Uncompress and prepare reference genome files // -include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/gunzip/main' -include { GUNZIP as GUNZIP_NCRNA_FASTA } from '../../modules/nf-core/gunzip/main' -include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/gunzip/main' -include { UNTAR as UNTAR_BT } from '../../modules/nf-core/untar/main' -include { UNTAR as UNTAR_STAR } from '../../modules/nf-core/untar/main' -include { BOWTIE_BUILD } from '../../modules/nf-core/bowtie/build/main' -include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate/main' -include { SAMTOOLS_FAIDX as GENOME_INDEX } from '../../modules/nf-core/samtools/faidx/main' -include { SAMTOOLS_FAIDX as NCRNA_INDEX } from '../../modules/nf-core/samtools/faidx/main' -include { LINUX_COMMAND as REMOVE_GTF_BRACKETS } from '../../modules/local/linux_command' -include { CUSTOM_GETCHROMSIZES as GENOME_CHROM_SIZE } from '../../modules/nf-core/custom/getchromsizes/main' -include { CUSTOM_GETCHROMSIZES as NCRNA_CHROM_SIZE } from '../../modules/nf-core/custom/getchromsizes/main' -include { FIND_LONGEST_TRANSCRIPT } from '../../modules/local/find_longest_transcript/main' -include { CLIPSEQ_FILTER_GTF } from '../../modules/local/filter_gtf/main' -include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_GTF } from '../../modules/nf-core/icountmini/segment/main' -include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_FILTGTF } from '../../modules/nf-core/icountmini/segment/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED } from '../../modules/local/resolve_unannotated/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_GENIC_OTHER } from '../../modules/local/resolve_unannotated/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_REGIONS } from '../../modules/local/resolve_unannotated/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_GENIC_OTHER_REGIONS } from '../../modules/local/resolve_unannotated/main' +include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/gunzip/main' +include { GUNZIP as GUNZIP_NCRNA_FASTA } from '../../modules/nf-core/gunzip/main' +include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/gunzip/main' +include { UNTAR as UNTAR_BT } from '../../modules/nf-core/untar/main' +include { UNTAR as UNTAR_STAR } from '../../modules/nf-core/untar/main' +include { BOWTIE_BUILD } from '../../modules/nf-core/bowtie/build/main' +include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate/main' +include { SAMTOOLS_FAIDX as GENOME_INDEX } from '../../modules/nf-core/samtools/faidx/main' +include { SAMTOOLS_FAIDX as NCRNA_INDEX } from '../../modules/nf-core/samtools/faidx/main' +include { LINUX_COMMAND as REMOVE_GTF_BRACKETS } from '../../modules/local/linux_command' +include { CUSTOM_GETCHROMSIZES as GENOME_CHROM_SIZE } from '../../modules/nf-core/custom/getchromsizes/main' +include { CUSTOM_GETCHROMSIZES as NCRNA_CHROM_SIZE } from '../../modules/nf-core/custom/getchromsizes/main' +include { FIND_LONGEST_TRANSCRIPT } from '../../modules/local/find_longest_transcript/main' +include { CLIPSEQ_FILTER_GTF } from '../../modules/local/filter_gtf/main' +include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_GTF } from '../../modules/nf-core/icountmini/segment/main' +include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_FILTGTF } from '../../modules/nf-core/icountmini/segment/main' +include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED } from '../../modules/local/resolve_unannotated/main' +include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_GENIC_OTHER } from '../../modules/local/resolve_unannotated/main' +include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_REGIONS } from '../../modules/local/resolve_unannotated/main' +include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_GENIC_OTHER_REGIONS } from '../../modules/local/resolve_unannotated/main' +include { SORT_ANNOTATION_FOR_BINDING_SITE_FINDER } from '../../modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main' workflow PREPARE_GENOME { take: @@ -324,7 +325,12 @@ workflow PREPARE_GENOME { } // EXAMPLE CHANNEL STRUCT: [[meta], gtf] //RESOLVE_UNANNOTATED_GENIC_OTHER_REGIONS.out.gtf | view - + SORT_ANNOTATION_FOR_BINDING_SITE_FINDER ( + ch_filt_gtf + ) + ch_versions = ch_versions.mix(SORT_ANNOTATION_FOR_BINDING_SITE_FINDER.out.versions) + ch_gns_rds = SORT_ANNOTATION_FOR_BINDING_SITE_FINDER.out.gns_rds + ch_regions_rds = SORT_ANNOTATION_FOR_BINDING_SITE_FINDER.out.regions_rds emit: fasta = ch_fasta // channel: [ val(meta), [ fasta ] ] @@ -348,5 +354,7 @@ workflow PREPARE_GENOME { regions_filt_gtf = ch_regions_filt_gtf // channel: [ val(meta), [ gtf ] ] regions_resolved_gtf = ch_regions_resolved_gtf // channel: [ val(meta), [ gtf ] ] regions_resolved_gtf_genic = ch_regions_resolved_gtf_genic // channel: [ val(meta), [ gtf ] ] + gns_rds = ch_gns_rds // channel: [ val(meta), [ rds ] ] + regions_rds = ch_regions_rds // channel: [ val(meta), [ rds ] ] versions = ch_versions // channel: [ versions.yml ] } diff --git a/workflows/clipseq.nf b/workflows/clipseq.nf index ed79ce52..d0d769e2 100644 --- a/workflows/clipseq.nf +++ b/workflows/clipseq.nf @@ -267,6 +267,8 @@ workflow CLIPSEQ { ch_regions_resolved_gtf_genic = PREPARE_GENOME.out.regions_resolved_gtf_genic ch_genome_index = PREPARE_GENOME.out.genome_index ch_ncrna_genome_index = PREPARE_GENOME.out.ncrna_index + ch_gns_rds = PREPARE_GENOME.out.gns_rds + ch_regions_rds = PREPARE_GENOME.out.regions_rds } // From 30c2583058cd5924edc89c694c3cab13e6a7f7dd Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 10 Nov 2025 17:20:50 +0100 Subject: [PATCH 18/19] merging --- workflows/clipseq.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/clipseq.nf b/workflows/clipseq.nf index aae57856..7e2a4831 100644 --- a/workflows/clipseq.nf +++ b/workflows/clipseq.nf @@ -25,7 +25,7 @@ for (param in check_param_list) { } } -// Check non-mandatory input parameters to see if the files exist if they have been specified +// Check non-manditory input parameters to see if the files exist if they have been specified def checkPathParamList = [ params.multiqc_config, params.fasta_fai, From 019a718c346da6332fc739bbda5d3be2c500766b Mon Sep 17 00:00:00 2001 From: MelinaKlostermann Date: Mon, 10 Nov 2025 17:57:05 +0100 Subject: [PATCH 19/19] merging --- .nf-test.log | 287 ++++++++++++++++++++++++--- conf/test_full.config | 9 +- subworkflows/local/prepare_genome.nf | 25 +-- workflows/clipseq.nf | 29 +-- 4 files changed, 265 insertions(+), 85 deletions(-) diff --git a/.nf-test.log b/.nf-test.log index ec154651..e5777346 100644 --- a/.nf-test.log +++ b/.nf-test.log @@ -1,32 +1,268 @@ -Nov-10 15:12:43.628 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 -Nov-10 15:12:43.662 [main] INFO com.askimed.nf.test.App - Arguments: [test, modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test, --profile, docker] -Nov-10 15:12:45.838 [main] INFO com.askimed.nf.test.App - Nextflow Version: 25.04.2 -Nov-10 15:12:45.843 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /Users/capitac/repos/melinas_clipseq/nf-test.config... -Nov-10 15:12:46.523 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/sortAnnotationForBindingSiteFinder/main.nf.nf' not found. -Nov-10 15:12:46.524 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /Users/capitac/repos/melinas_clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/Users/capitac/repos/melinas_clipseq/subworkflows/local/../../modules/local/BindingSiteFinder/main.nf.nf' not found. -Nov-10 15:12:46.700 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 130 files from directory /Users/capitac/repos/melinas_clipseq in 0.204 sec -Nov-10 15:12:46.709 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 1 files containing tests. -Nov-10 15:12:46.710 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test] -Nov-10 15:12:47.098 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 1 tests to execute. -Nov-10 15:12:47.099 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Started test plan -Nov-10 15:12:47.099 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' from file '/Users/capitac/repos/melinas_clipseq/modules/local/BindingSiteFinder/DefineBindingSites/tests/main.nf.test'. -Nov-10 15:12:47.100 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds'. type: com.askimed.nf.test.lang.process.ProcessTest -Nov-10 15:13:25.608 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '795f6278: DefineBindingSites - bw_files_folder, peak_bed, anno_genes_rds, anno_regions_rds' finished. status: FAILED -org.codehaus.groovy.runtime.powerassert.PowerAssertionError: 1 of 1 assertions failed - at com.askimed.nf.test.lang.extensions.GlobalMethods.assertAll(GlobalMethods.java:48) +Nov-10 16:29:20.594 [main] INFO com.askimed.nf.test.App - nf-test 0.9.2 +Nov-10 16:29:20.619 [main] INFO com.askimed.nf.test.App - Arguments: [test, --profile, docker] +Nov-10 16:29:22.592 [main] INFO com.askimed.nf.test.App - Nextflow Version: 25.04.6 +Nov-10 16:29:22.595 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Load config from file /workspaces/clipseq/nf-test.config... +Nov-10 16:29:23.118 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /workspaces/clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/workspaces/clipseq/subworkflows/local/../../modules/local/sortAnnotationForBindingSiteFinder/main.nf.nf' not found. +Nov-10 16:29:23.118 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /workspaces/clipseq/subworkflows/local/BindingSiteFinder.nf: Dependency '/workspaces/clipseq/subworkflows/local/../../modules/local/BindingSiteFinder/main.nf.nf' not found. +Nov-10 16:29:23.126 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /workspaces/clipseq/subworkflows/local/prepare_genome.nf: Dependency '/workspaces/clipseq/subworkflows/local/../../modules/local/find_longest_transcript/main.nf' not found. +Nov-10 16:29:23.127 [main] WARN com.askimed.nf.test.nextflow.NextflowScript - Module /workspaces/clipseq/subworkflows/local/prepare_genome.nf: Dependency '/workspaces/clipseq/subworkflows/local/../../modules/local/filter_gtf/main.nf' not found. +Nov-10 16:29:23.475 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Loaded 155 files from directory /workspaces/clipseq in 0.376 sec +Nov-10 16:29:23.479 [main] INFO com.askimed.nf.test.lang.dependencies.DependencyResolver - Found 12 files containing tests. +Nov-10 16:29:23.480 [main] DEBUG com.askimed.nf.test.lang.dependencies.DependencyResolver - Found files: [/workspaces/clipseq/tests/nf_test/test/genome_preset_genome.nf.test, /workspaces/clipseq/tests/nf_test/test/genome_longest_transcript.nf.test, /workspaces/clipseq/tests/nf_test/test/genome_gtf.nf.test, /workspaces/clipseq/tests/nf_test/test/test_only_crosslinking.nf.test, /workspaces/clipseq/tests/nf_test/test/test_only_preprocessing.nf.test, /workspaces/clipseq/tests/nf_test/test/genome_fasta.nf.test, /workspaces/clipseq/tests/nf_test/test/test_only_input.nf.test, /workspaces/clipseq/tests/nf_test/test/test_only_alignment.nf.test, /workspaces/clipseq/tests/nf_test/test/genome_indexes.nf.test, /workspaces/clipseq/tests/nf_test/test/genome_chromsizes.nf.test, /workspaces/clipseq/tests/nf_test/test/test_only_dedup.nf.test, /workspaces/clipseq/tests/nf_test/test/test_only_peakcalling.nf.test] +Nov-10 16:29:24.875 [main] INFO com.askimed.nf.test.commands.RunTestsCommand - Found 35 tests to execute. +Nov-10 16:29:24.876 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Started test plan +Nov-10 16:29:24.877 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'genome_chrom_sizes' from file '/workspaces/clipseq/tests/nf_test/test/genome_chromsizes.nf.test'. +Nov-10 16:29:24.877 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '232023aa: genome_no_chrom_sizes'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:29:36.292 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '232023aa: genome_no_chrom_sizes' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_chromsizes_nf$_run_closure1$_closure2$_closure4.doCall(genome_chromsizes.nf.test:19) + at genome_chromsizes_nf$_run_closure1$_closure2$_closure4.doCall(genome_chromsizes.nf.test) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:569) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) - at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:44) - at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:100) - at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:55) - at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:217) - at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:231) - at main_nf$_run_closure1$_closure3$_closure7.doCall(main.nf.test:54) - at main_nf$_run_closure1$_closure3$_closure7.doCall(main.nf.test) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 16:29:36.302 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'genome_chrom_sizes' finished. snapshot file: false, skipped tests: false, failed tests: true +Nov-10 16:29:36.302 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'genome_fasta' from file '/workspaces/clipseq/tests/nf_test/test/genome_fasta.nf.test'. +Nov-10 16:29:36.302 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '27d9e694: genome_fasta_raw'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:29:47.133 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '27d9e694: genome_fasta_raw' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_fasta_nf$_run_closure1$_closure2$_closure9.doCall(genome_fasta.nf.test:18) + at genome_fasta_nf$_run_closure1$_closure2$_closure9.doCall(genome_fasta.nf.test) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 16:29:47.134 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '7fbe64f1: genome_fasta_gz'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:29:58.220 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '7fbe64f1: genome_fasta_gz' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_fasta_nf$_run_closure1$_closure3$_closure12.doCall(genome_fasta.nf.test:38) + at genome_fasta_nf$_run_closure1$_closure3$_closure12.doCall(genome_fasta.nf.test) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 16:29:58.222 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test 'ad336d3d: genome_fasta_fai'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:30:09.531 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test 'ad336d3d: genome_fasta_fai' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_fasta_nf$_run_closure1$_closure4$_closure15.doCall(genome_fasta.nf.test:58) + at genome_fasta_nf$_run_closure1$_closure4$_closure15.doCall(genome_fasta.nf.test) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 16:30:09.532 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '7df948b2: genome_ncrna_fasta_gz'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:30:21.167 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '7df948b2: genome_ncrna_fasta_gz' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_fasta_nf$_run_closure1$_closure5$_closure18.doCall(genome_fasta.nf.test:78) + at genome_fasta_nf$_run_closure1$_closure5$_closure18.doCall(genome_fasta.nf.test) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 16:30:21.170 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test 'c3981f66: genome_ncrna_fasta'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:30:32.771 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test 'c3981f66: genome_ncrna_fasta' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_fasta_nf$_run_closure1$_closure6$_closure21.doCall(genome_fasta.nf.test:97) + at genome_fasta_nf$_run_closure1$_closure6$_closure21.doCall(genome_fasta.nf.test) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 16:30:32.774 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '15c423dc: genome_ncrna_fasta_fai'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:30:43.876 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '15c423dc: genome_ncrna_fasta_fai' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_fasta_nf$_run_closure1$_closure7$_closure24.doCall(genome_fasta.nf.test:116) + at genome_fasta_nf$_run_closure1$_closure7$_closure24.doCall(genome_fasta.nf.test) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:569) + at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) + at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) + at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274) + at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1030) + at groovy.lang.Closure.call(Closure.java:427) + at groovy.lang.Closure.call(Closure.java:406) + at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) + at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) + at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) + at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:18) + at picocli.CommandLine.executeUserObject(CommandLine.java:1953) + at picocli.CommandLine.access$1300(CommandLine.java:145) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) + at picocli.CommandLine.execute(CommandLine.java:2078) + at com.askimed.nf.test.App.run(App.java:39) + at com.askimed.nf.test.App.main(App.java:46) +Nov-10 16:30:43.878 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'genome_fasta' finished. snapshot file: false, skipped tests: false, failed tests: true +Nov-10 16:30:43.878 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Running testsuite 'genome_gtf' from file '/workspaces/clipseq/tests/nf_test/test/genome_gtf.nf.test'. +Nov-10 16:30:43.879 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '8cad6f6c: genome_gtf_raw'. type: com.askimed.nf.test.lang.pipeline.PipelineTest +Nov-10 16:30:55.481 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Test '8cad6f6c: genome_gtf_raw' finished. status: FAILED +org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert workflow.success + | | + workflow false + at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:432) + at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:670) + at genome_gtf_nf$_run_closure1$_closure2$_closure12.doCall(genome_gtf.nf.test:18) + at genome_gtf_nf$_run_closure1$_closure2$_closure12.doCall(genome_gtf.nf.test) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) @@ -38,7 +274,7 @@ org.codehaus.groovy.runtime.powerassert.PowerAssertionError: 1 of 1 assertions f at groovy.lang.Closure.call(Closure.java:427) at groovy.lang.Closure.call(Closure.java:406) at com.askimed.nf.test.lang.TestCode.execute(TestCode.java:16) - at com.askimed.nf.test.lang.process.ProcessTest.execute(ProcessTest.java:171) + at com.askimed.nf.test.lang.pipeline.PipelineTest.execute(PipelineTest.java:135) at com.askimed.nf.test.core.TestExecutionEngine.execute(TestExecutionEngine.java:165) at com.askimed.nf.test.commands.RunTestsCommand.execute(RunTestsCommand.java:298) at com.askimed.nf.test.commands.AbstractCommand.call(AbstractCommand.java:43) @@ -52,5 +288,4 @@ org.codehaus.groovy.runtime.powerassert.PowerAssertionError: 1 of 1 assertions f at picocli.CommandLine.execute(CommandLine.java:2078) at com.askimed.nf.test.App.run(App.java:39) at com.askimed.nf.test.App.main(App.java:46) -Nov-10 15:13:25.622 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Testsuite 'Test Process CLIPSEQ_DEFINEBINDINGSITES' finished. snapshot file: false, skipped tests: false, failed tests: true -Nov-10 15:13:25.622 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Executed 1 tests. 1 tests failed. Done! +Nov-10 16:30:55.482 [main] INFO com.askimed.nf.test.core.TestExecutionEngine - Run test '12df768f: genome_gtf_gz'. type: com.askimed.nf.test.lang.pipeline.PipelineTest diff --git a/conf/test_full.config b/conf/test_full.config index 474737fc..a935e311 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -21,13 +21,7 @@ params { source = "fastq" // Genome references -<<<<<<< HEAD - ncrna_fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/clipseq/v_2_0/genome/homosapiens_smallRNA.fa.gz" - fasta = 'https://ftp.ensembl.org/pub/release-111/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz' - gtf = 'https://ftp.ensembl.org/pub/release-111/gtf/homo_sapiens/Homo_sapiens.GRCh38.111.gtf.gz' - move_umi = 'NNNNNNNNN' - umi_separator = '_' -======= + ncrna_fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/clipseq/v_2_0/genome/homosapiens_smallRNA.fa.gz" fasta = 'https://ftp.ensembl.org/pub/release-111/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz' gtf = 'https://ftp.ensembl.org/pub/release-111/gtf/homo_sapiens/Homo_sapiens.GRCh38.111.gtf.gz' @@ -37,5 +31,4 @@ params { umitools_bc_pattern = 'NNNNNNNNN' umitools_umi_separator = '_' skip_umi_extract = false ->>>>>>> feat-2-0 } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 65ea0759..32b65e59 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -5,29 +5,6 @@ import nextflow.util.LoggerHelper // Uncompress and prepare reference genome files // -<<<<<<< HEAD -include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/gunzip/main' -include { GUNZIP as GUNZIP_NCRNA_FASTA } from '../../modules/nf-core/gunzip/main' -include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/gunzip/main' -include { UNTAR as UNTAR_BT } from '../../modules/nf-core/untar/main' -include { UNTAR as UNTAR_STAR } from '../../modules/nf-core/untar/main' -include { BOWTIE_BUILD } from '../../modules/nf-core/bowtie/build/main' -include { STAR_GENOMEGENERATE } from '../../modules/nf-core/star/genomegenerate/main' -include { SAMTOOLS_FAIDX as GENOME_INDEX } from '../../modules/nf-core/samtools/faidx/main' -include { SAMTOOLS_FAIDX as NCRNA_INDEX } from '../../modules/nf-core/samtools/faidx/main' -include { LINUX_COMMAND as REMOVE_GTF_BRACKETS } from '../../modules/local/linux_command' -include { CUSTOM_GETCHROMSIZES as GENOME_CHROM_SIZE } from '../../modules/nf-core/custom/getchromsizes/main' -include { CUSTOM_GETCHROMSIZES as NCRNA_CHROM_SIZE } from '../../modules/nf-core/custom/getchromsizes/main' -include { FIND_LONGEST_TRANSCRIPT } from '../../modules/local/find_longest_transcript/main' -include { CLIPSEQ_FILTER_GTF } from '../../modules/local/filter_gtf/main' -include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_GTF } from '../../modules/nf-core/icountmini/segment/main' -include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_FILTGTF } from '../../modules/nf-core/icountmini/segment/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED } from '../../modules/local/resolve_unannotated/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_GENIC_OTHER } from '../../modules/local/resolve_unannotated/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_REGIONS } from '../../modules/local/resolve_unannotated/main' -include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_GENIC_OTHER_REGIONS } from '../../modules/local/resolve_unannotated/main' -include { SORT_ANNOTATION_FOR_BINDING_SITE_FINDER } from '../../modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main' -======= include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/gunzip/main' include { GUNZIP as GUNZIP_NCRNA_FASTA } from '../../modules/nf-core/gunzip/main' include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/gunzip/main' @@ -44,7 +21,7 @@ include { FILTER_GTF_BY_TRANSCRIPT include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_GTF } from '../../modules/nf-core/icountmini/segment/main' include { ICOUNTMINI_SEGMENT as ICOUNT_SEG_FILTGTF } from '../../modules/nf-core/icountmini/segment/main' include { CLIPSEQ_RESOLVE_UNANNOTATED as RESOLVE_UNANNOTATED_REGIONS } from '../../modules/local/resolve_unannotated/main' ->>>>>>> feat-2-0 +include { SORT_ANNOTATION_FOR_BINDING_SITE_FINDER } from '../../modules/local/BindingSiteFinder/sortAnnotationForBindingSiteFinder/main' workflow PREPARE_GENOME { take: diff --git a/workflows/clipseq.nf b/workflows/clipseq.nf index 7e2a4831..ed452c9e 100644 --- a/workflows/clipseq.nf +++ b/workflows/clipseq.nf @@ -231,32 +231,6 @@ workflow CLIPSEQ { params.skip_filter_gtf, params.skip_transcriptome ) -<<<<<<< HEAD - ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) - ch_fasta = PREPARE_GENOME.out.fasta - ch_fasta_fai = PREPARE_GENOME.out.fasta_fai - ch_gtf = PREPARE_GENOME.out.gtf - ch_filtered_gtf = PREPARE_GENOME.out.filtered_gtf - ch_genome_chrom_sizes = PREPARE_GENOME.out.chrom_sizes - ch_ncrna_fasta = PREPARE_GENOME.out.ncrna_fasta - ch_ncrna_fasta_fai = PREPARE_GENOME.out.ncrna_fasta_fai - ch_ncrna_chrom_sizes = PREPARE_GENOME.out.ncrna_chrom_sizes - ch_longest_transcript = PREPARE_GENOME.out.longest_transcript - ch_longest_transcript_fai = PREPARE_GENOME.out.longest_transcript_fai - ch_longest_transcript_gtf = PREPARE_GENOME.out.longest_transcript_gtf - ch_seg_gtf = PREPARE_GENOME.out.seg_gtf - ch_seg_filt_gtf = PREPARE_GENOME.out.seg_filt_gtf - ch_seg_resolved_gtf = PREPARE_GENOME.out.seg_resolved_gtf - ch_seg_resolved_gtf_genic = PREPARE_GENOME.out.seg_resolved_gtf_genic - ch_regions_gtf = PREPARE_GENOME.out.regions_gtf - ch_regions_filt_gtf = PREPARE_GENOME.out.regions_filt_gtf - ch_regions_resolved_gtf = PREPARE_GENOME.out.regions_resolved_gtf - ch_regions_resolved_gtf_genic = PREPARE_GENOME.out.regions_resolved_gtf_genic - ch_genome_index = PREPARE_GENOME.out.genome_index - ch_ncrna_genome_index = PREPARE_GENOME.out.ncrna_index - ch_gns_rds = PREPARE_GENOME.out.gns_rds - ch_regions_rds = PREPARE_GENOME.out.regions_rds -======= ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) ch_fasta = PREPARE_GENOME.out.fasta.collect() ch_fasta_fai = PREPARE_GENOME.out.fasta_fai.collect() @@ -275,7 +249,8 @@ workflow CLIPSEQ { ch_regions_resolved_gtf = PREPARE_GENOME.out.regions_resolved_gtf.collect() ch_genome_index = PREPARE_GENOME.out.genome_index.collect() ch_ncrna_genome_index = PREPARE_GENOME.out.ncrna_index.collect() ->>>>>>> feat-2-0 + ch_gns_rds = PREPARE_GENOME.out.gns_rds + ch_regions_rds = PREPARE_GENOME.out.regions_rds } //