epi2me-labs / wf-human-variation

Other
87 stars 41 forks source link

segfault #144

Open VICTO160 opened 4 months ago

VICTO160 commented 4 months ago

Operating System

CentOS 7

Other Linux

No response

Workflow Version

v1.10.1

Workflow Execution

Command line

EPI2ME Version

No response

CLI command run

$NEXTFLOW -c .threads.txt run epi2me-labs/wf-human-variation -revision v1.10.1 \ -profile singularity \ -w ${OUTPUT}/variation_workspace \ --bam ${SAMPLE}.sorted.aligned.bam \ --ref ${REFS} \ --tr_bed $TRBED \ --sample_name ${SAMPLE} \ --out_dir ${OUTPUT} \ --threads 36 \ --cnv \ --bin_size 1 \ --depth_intervals

Workflow Execution - CLI Execution Profile

None

What happened?

I'm running into two segfault errors. It's consistently happening to two of my samples. I've been able to run the same pipeline, which has worked on other samples with the same options. Also, these two samples have been processed with no errors using larger bin sizes (5 and up). The threads.txt file is limiting the workflow to 36/38 cpus and 480/499 Gb of memory allocated to the VM.

Since doubling the stack size seemed to fix a segmentation fault error while running clair3 in another run using this workflow, here's the original output of ulimit -a on the VM. core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 8252695 max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) 523239424 open files (-n) 32768 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 4096 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

Relevant log output

1st error:
Command error:
 INFO: Environment variable SINGULARITYENV_TMPDIR is set, but APPTAINERENV_TMPDIR is preferred
 INFO: Environment variable SINGULARITYENV_NXF_DEBUG is set, but APPTAINERENV_NXF_DEBUG is preferred
 Loaded bin annotations for genome 'hg19', bin size 1 kbp, and experiment type 'SR50' from annotation package QDNAseq.hg19 v1.28.0
 PAQ19223.sorted.aligned (1 of 1): extracting reads ... binning ...
 Plotting sample PAQ19223.sorted.aligned (19,121,198 reads) (1 of 1) ...
 Highlighted 203,819 bins.
 3,095,689 total bins
 2,881,044 of which in selected chromosomes
 2,684,800 of which with reference sequence
 2,480,981 final bins
 [1] "PAQ19223_raw_bins.bed"
 Plotting sample PAQ19223.sorted.aligned median read counts
 Calculating correction for GC content and mappability
 Calculating fit for sample PAQ19223.sorted.aligned (1 of 1) ...
 Done.
 Note: Residual filter missing for chromosomes: X, Y
 3,095,689 total bins
 3,095,689 of which in selected chromosomes
 2,861,592 of which with reference sequence
 2,655,570 final bins
 Note: Filtering out additional 23 bins due to missing values.
 Applying median normalization ...
 Smoothing outliers ...

 *** caught segfault ***
 address (nil), cause 'unknown'

 Traceback:
 1: diff2(x, differences = diff)
 2: sdDiff(x, ..., trim = trim)
 3: FUN(newX[, i], ...)
 4: apply(copynumber, MARGIN = 2L, FUN = sdFUN, na.rm = TRUE)
 5: .local(x, y = y, ...)
 6: plot(copyNumbersSmooth)
 7: plot(copyNumbersSmooth)
 An irrecoverable exception occurred. R is aborting now ...
 .command.sh: line 2: 37 Segmentation fault run_qdnaseq.r --bam PAQ19223.sorted.aligned.bam --out_prefix PAQ19223 --binsize 1 --reference hg19

Second error:
Command error:
  2,480,981     final bins
  [1] "PAQ46342_raw_bins.bed"
  Plotting sample PAQ46342.sorted.aligned median read counts
  Calculating correction for GC content and mappability

   *** caught segfault ***
  address 0x55f306189770, cause 'memory not mapped'

Command error:
 2,480,981 final bins
 [1] "PAQ46342_raw_bins.bed"
 Plotting sample PAQ46342.sorted.aligned median read counts
 Calculating correction for GC content and mappability

 *** caught segfault ***
 address 0x55f306189770, cause 'memory not mapped'

 Traceback:
 1: diff2(x, differences = diff)
 2: madDiff(residual, na.rm = TRUE)
 3: doTryCatch(return(expr), name, parentenv, handler)
 4: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 5: tryCatchList(expr, classes, parentenv, handlers)
 6: tryCatch(expr, error = function(e) { call <- conditionCall(e) if (!is.null(call)) { if (identical(call[[1L]], quote(doTryCatch))) call <- sys.call(-4L) dcall <- deparse(call, nlines = 1L) prefix <- paste("Error in", dcall, ": ") LONG <- 75L sm <- strsplit(conditionMessage(e), "\n")[[1L]] w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w") if (is.na(w)) w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L], type = "b") if (w > LONG) prefix <- paste0(prefix, "\n ") } else prefix <- "Error : " msg <- paste0(prefix, conditionMessage(e), "\n") .Internal(seterrmessage(msg[1L])) if (!silent && isTRUE(getOption("show.error.messages"))) { cat(msg, file = outFile) .Internal(printDeferredWarnings()) } invisible(structure(msg, class = "try-error", condition = e))})
 7: try({ corvals <- counts[, i] median.counts <- aggregate(counts[condition, i], by = list(gc = gc[condition], mappability = mappability[condition]), FUN = median) rownames(median.counts) <- paste0(median.counts$gc, "-", median.counts$mappability) l <- loess(formula(paste("x ~", paste(variables, collapse = " * "))), data = median.counts, span = span[i], family = family[i], ...) fit <- as.vector(predict(l, all.combinations)) names(fit) <- rownames(all.combinations) residual <- corvals/fit[paste0(gc, "-", mappability)] - 1 cutoffValue <- cutoff * madDiff(residual, na.rm = TRUE) prevGoodBins <- condition goodBins <- binsToUse(object) & !is.na(residual) & abs(residual) <= cutoffValue iter <- 1 while (!identical(goodBins, prevGoodBins) && iter < maxIter) { median.counts2 <- aggregate(counts[goodBins, i], by = list(gc = gc[goodBins], mappability = mappability[goodBins]), FUN = median) rownames(median.counts2) <- paste0(median.counts2$gc, "-", median.counts2$mappability) l2 <- loess(x ~ gc * mappability, data = median.counts2, span = span[i], family = family[i], ...) fit2 <- as.vector(predict(l2, all.combinations)) names(fit2) <- rownames(all.combinations) fit[!is.na(fit2)] <- fit2[!is.na(fit2)] residual <- corvals/fit[paste0(gc, "-", mappability)] - 1 prevGoodBins <- goodBins goodBins <- binsToUse(object) & !is.na(residual) & abs(residual) <= cutoffValue iter <- iter + 1 } loessFit <- fit[paste0(gc, "-", mappability)] attr(loessFit, "used.span") <- span[i] attr(loessFit, "used.family") <- family[i] return(loessFit)}, silent = TRUE)
 8: ...future.FUN(...future.X_jj, ...)
 9: FUN(X[[i]], ...)
 10: lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...)})
 11: (function (...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) }})()
 12: do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) }}, args = future.call.arguments)
 13: eval(quote({ do.call(function(...) { ...future.globals.maxSize.org <- getOption("UN(...future.X_jj, ...)})
 11: (function (...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) }})()
 12: do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) }}, args = future.call.arguments)
 13: eval(quote({ do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) } }, args = future.call.arguments)}), new.env())
 14: eval(quote({ do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) } }, args = future.call.arguments)}), new.env())
 15: eval(expr, p)
 16: eval(expr, p)
 17: eval.parent(substitute(eval(quote(expr), envir)))
 18: base::local({ do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) } }, args = future.call.arguments)})
 19: base::withVisible(base::local({ do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) } }, args = future.call.arguments)}))
 20: base::withCallingHandlers({ ...future.value <- base::withVisible(base::local({ do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) } }, args = future.call.arguments) })) future::FutureResult(value = ...future.value$value, visible = ...future.value$visible, rng = !identical(base::globalenv()$.Random.seed, ...future.rng), globalenv = if (FALSE) list(added = base::setdiff(base::names(base::.GlobalEnv), ...future.globalenv.names)) else NULL, started = ...future.startTime, version = "1.8")}, condition = base::local({ c <- base::c inherits <- base::inherits invokeRestart <- base::invokeRestart length <- base::length list <- base::list seq.int <- base::seq.int signalCondition <- base::signalCondition sys.calls <- base::sys.calls `[[` <- base::`[[` `+` <- base::`+` `<<-` <- base::`<<-` sysCalls <- function(calls = sys.calls(), from = 1L) { calls[seq.int(from = from + 12L, to = length(calls) - 3L)] } function(cond) { is_error <- inherits(cond, "error") ignore <- !is_error && !is.null(NULL) && inherits(cond, NULL) if (is_error) { sessionInformation <- function() { list(r = base::R.Version(), locale = base::Sys.getlocale(), rngkind = base::RNGkind(), namespaces = base::loadedNamespaces(), search = base::search(), system = base::Sys.info()) } ...future.conditions[[length(...future.conditions) + 1L]] <<- list(condition = cond, calls = c(sysCalls(from = ...future.frame), cond$call), session = sessionInformation(), timestamp = base::Sys.time(), signaled = 0L) signalCondition(cond) } else if (!ignore && TRUE && inherits(cond, c("condition", "immediateCondition"))) { signal <- TRUE && inherits(cond, "immediateCondition") ...future.conditions[[length(...future.conditions) + 1L]] <<- list(condition = cond, signaled = base::as.integer(signal)) if (TRUE && !signal) { muffleCondition <- function (cond, pattern = "^muffle") { inherits <- base::inherits invokeRestart <- base::invokeRestart is.null <- base::is.null muffled <- FALSE if (inherits(cond, "message")) { muffled <- grepl(pattern, "muffleMessage") if (muffled) invokeRestart("muffleMessage") } else if (inherits(cond, "warning")) {
 muffled <- grepl(pattern, "muffleWarning") if (muffled) invokeRestart("muffleWarning") } else if (inherits(cond, "condition")) { if (!is.null(pattern)) { computeRestarts <- base::computeRestarts grepl <- base::grepl restarts <- computeRestarts(cond) for (restart in restarts) { name <- restart$name if (is.null(name)) next if (!grepl(pattern, name))
 next invokeRestart(restart) muffled <- TRUE break } } } invisible(muffled) } muffleCondition(cond, pattern = "^muffle") } } else { if (TRUE) { muffleCondition <- function (cond, pattern = "^muffle") { inherits <- base::inherits invokeRestart <- base::invokeRestart is.null <- base::is.null muffled <- FALSE if (inherits(cond, "message")) { muffled <- grepl(pattern, "muffleMessage") if (muffled) invokeRestart("muffleMessage") } else if (inherits(cond, "warning")) { muffled <- grepl(pattern, "muffleWarning")
 if (muffled) invokeRestart("muffleWarning") } else if (inherits(cond, "condition")) { if (!is.null(pattern)) { computeRestarts <- base::computeRestarts grepl <- base::grepl restarts <- computeRestarts(cond) for (restart in restarts) { name <- restart$name if (is.null(name)) next if (!grepl(pattern, name)) next invokeRestart(restart) muffled <- TRUE break } } } invisible(muffled) } muffleCondition(cond, pattern = "^muffle") } } }}))
 21: doTryCatch(return(expr), name, parentenv, handler)
 22: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 23: tryCatchList(expr, classes, parentenv, handlers)
 24: base::tryCatch({ base::withCallingHandlers({ ...future.value <- base::withVisible(base::local({ do.call(function(...) { ...future.globals.maxSize.org <- getOption("future.globals.maxSize") if (!identical(...future.globals.maxSize.org, ...future.globals.maxSize)) { oopts <- options(future.globals.maxSize = ...future.globals.maxSize) on.exit(options(oopts), add = TRUE) } { lapply(seq_along(...future.elements_ii), FUN = function(jj) { ...future.X_jj <- ...future.elements_ii[[jj]] ...future.FUN(...future.X_jj, ...) }) } }, args = future.call.arguments) })) future::FutureResult(value = ...future.value$value, visible = ...future.value$visible, rng = !identical(base::globalenv()$.Random.seed,
 ...future.rng), globalenv = if (FALSE) list(added = base::setdiff(base::names(base::.GlobalEnv), ...future.globalenv.names)) else NULL, started = ...future.startTime, version = "1.8") }, condition = base::local({ c <- base::c inherits <- base::inherits invokeRestart <- base::invokeRestart length <- base::length list <- base::list seq.int <- base::seq.int signalCondition <- base::signalCondition sys.calls <- base::sys.calls `[[` <- base::`[[` `+` <- base::`+` `<<-` <- base::`<<-` sysCalls <- function(calls = sys.calls(), from = 1L) { calls[seq.int(from = from + 12L, to = length(calls) - 3L)] } function(cond) { is_error <- inherits(cond, "error") ignore <- !is_error && !is.null(NULL) && inherits(cond, NULL) if (is_error) {
 sessionInformation <- function() { list(r = base::R.Version(), locale = base::Sys.getlocale(), rngkind = base::RNGkind(), namespaces = base::loadedNamespaces(), search = base::search(), system = base::Sys.info()) } ...future.conditions[[length(...future.conditions) + 1L]] <<- list(condition = cond, calls = c(sysCalls(from = ...future.frame), cond$call), session = sessionInformation(), timestamp = base::Sys.time(), signaled = 0L) signalCondition(cond) } else if (!ignore && TRUE && inherits(cond, c("condition", "immediateCondition"))) { signal <- TRUE && inherits(cond, "immediateCondition") ...future.conditions[[length(...future.conditions) + 1L]] <<- list(condition = cond, signaled = base::as.integer(signal))
 if (TRUE && !signal) { muffleCondition <- function (cond, pattern = "^muffle") { inherits <- base::inherits invokeRestart <- base::invokeRestart is.null <- base::is.null muffled <- FALSE
if (inherits(cond, "message")) { muffled <- grepl(pattern, "muffleMessage") if (muffled) invokeRestart("muffleMessage") } else if (inherits(cond, "warning")) { muffled <- grepl(pattern, "muffleWarning") if (muffled) invokeRestart("muffleWarning") } else if (inherits(cond, "condition")) { if (!is.null(pattern)) { computeRestarts <- base::computeRestarts grepl <- base::grepl restarts <- computeRestarts(cond) for (restart in restarts) { name <- restart$name if (is.null(name)) next if (!grepl(pattern, name)) next invokeRestart(restart) muffled <- TRUE break } } } invisible(muffled) } muffleCondition(cond, pattern = "^muffle") } } else { if (TRUE) { muffleCondition <- function (cond, pattern = "^muffle") { inherits <- base::inherits invokeRestart <- base::invokeRestart is.null <- base::is.null muffled <- FALSE if (inherits(cond, "message")) { muffled <- grepl(pattern, "muffleMessage") if (muffled) invokeRestart("muffleMessage") } else if (inherits(cond, "warning")) { muffled <- grepl(pattern, "muffleWarning") if (muffled) invokeRestart("muffleWarning") } else if (inherits(cond, "condition")) { if (!is.null(pattern)) { computeRestarts <- base::computeRestarts
 grepl <- base::grepl restarts <- computeRestarts(cond) for (restart in restarts) { name <- restart$name if (is.null(name)) next if (!grepl(pattern, name))
 next invokeRestart(restart) muffled <- TRUE break } } } invisible(muffled) } muffleCondition(cond, pattern = "^muffle") } } } }))}, error = function(ex) { base::structure(base::list(value = NULL, visible = NULL, conditions = ...future.conditions, rng = !identical(base::globalenv()$.Random.seed, ...future.rng), started = ...future.startTime, finished = Sys.time(), session_uuid = NA_character_, version = "1.8"), class = "FutureResult")}, finally = { if (!identical(...future.workdir, getwd())) setwd(...future.workdir) { if (identical(getOption("nwarnings"), ...future.oldOptions$nwarnings)) { ...future.oldOptions$nwarnings <- NULL } base::options(...future.oldOptions) if (.Platform$OS.type == "windows") { old_names <- names(...future.oldEnvVars) envs <- base::Sys.getenv() names <- names(envs) common <- intersect(names, old_names) added <- setdiff(names, old_names) removed <- setdiff(old_names, names) changed <- common[...future.oldEnvVars[common] != envs[common]] NAMES <- toupper(changed) args <- list() for (kk in seq_along(NAMES)) { name <- changed[[kk]] NAME <- NAMES[[kk]] if (name != NAME && is.element(NAME, old_names)) next args[[name]] <- ...future.oldEnvVars[[name]] } NAMES <- toupper(added) for (kk in seq_along(NAMES)) { name <- added[[kk]] NAME <- NAMES[[kk]] if (name != NAME && is.element(NAME, old_names)) next args[[name]] <- "" } NAMES <- toupper(removed) for (kk in seq_along(NAMES)) { name <- removed[[kk]] NAME <- NAMES[[kk]] if (name != NAME && is.element(NAME, old_names)) next args[[name]] <- ...future.oldEnvVars[[name]] } if (length(args) > 0) base::do.call(base::Sys.setenv, args = args) args <- names <- old_names <- NAMES <- envs <- common <- added <- removed <- NULL } else { base::do.call(base::Sys.setenv, args = base::as.list(...future.oldEnvVars)) } { if (base::length(...future.futureOptionsAdded) > 0L) { opts <- base::vector("list", length = base::length(...future.futureOptionsAdded)) base::names(opts) <- ...future.futureOptionsAdded base::options(opts) } { { NULL RNGkind("Mersenne-Twister") base::rm(list = ".Random.seed", envir = base::globalenv(), inherits = FALSE) } options(future.plan = NULL) if (is.na(NA_character_)) Sys.unsetenv("R_FUTURE_PLAN") else Sys.setenv(R_FUTURE_PLAN = NA_character_) future::plan(list(function (..., envir = parent.frame()) { future <- SequentialFuture(..., envir = envir) if (!future$lazy)
 future <- run(future) invisible(future) }), .cleanup = FALSE, .init = FALSE) } } }})
 25: eval(expr, envir = envir, enclos = baseenv())
 26: eval(expr, envir = envir, enclos = baseenv())
 27: run.UniprocessFuture(future)
 28: run(future)
 29: run.Future(future)
 30: run(future)
 31: future(expr, substitute = FALSE, envir = future.envir, stdout = future.stdout, conditions = future.conditions, globals = globals_ii, packages = packages_ii, seed = future.seed, label = labels[ii])
 32: future_xapply(FUN = FUN, nX = nX, chunk_args = X, args = list(...), get_chunk = `chunkWith[[`, expr = expr, envir = envir, future.envir = future.envir, future.globals = future.globals, future.packages = future.packages, future.scheduling = future.scheduling, future.chunk.size = future.chunk.size, future.stdout = future.stdout, future.conditions = future.conditions, future.seed = future.seed, future.label = future.label, fcn_name = fcn_name, args_name = args_name, debug = debug)
 33: future_lapply(seq_len(ncol(counts)), FUN = calculateFits, ...)
 34: .local(object, span, family, adjustIncompletes, maxIter, cutoff, variables, ...)
 35: estimateCorrection(autosomalReadCountsFiltered)
 36: estimateCorrection(autosomalReadCountsFiltered)
 An irrecoverable exception occurred. R is aborting now ...
 .command.sh: line 2: 37 Segmentation fault run_qdnaseq.r --bam PAQ46342.sorted.aligned.bam --out_prefix PAQ46342 --binsize 1 --reference hg19

Application activity log entry

No response

Were you able to successfully run the latest version of the workflow with the demo data?

yes

Other demo data information

No response

jennifergribble-nanopore commented 4 months ago

In my experience with R, the first error may be related to the INFO messages of Singularity v. Apptainer. I will need to look into that further to see if we have seen that error on our side. For the second error, I think it's related to package versions (or the version(s) of R present on your cluster). I've seen that error when the wrong versions are grabbed by the environment, or one package/dependency is updated but not another

vlshesketh commented 4 months ago

Hi @VICTO160, as you have been able to use the larger bin sizes successfully for these two samples, it's less likely to be a conflict between package versions and rather that the 1kbp bin size is not compatible with the data you're trying to process. We have published some guidelines here re: bin size, and as I mentioned on the other issue, we are planning to introduce a new CNV caller which may be better suited to your needs, so please keep following for updates.

vlshesketh commented 4 months ago

@VICTO160 something else to note is that the most recent version of the workflow has updated memory requirements for each process, so it's possible that this will allow you to run it successfully with the 1kbp bins, however this is not guaranteed as there may be other factors which will cause the Rscript to error for this particular dataset/bin size combination.

VICTO160 commented 4 months ago

The most recent version of the workflow did not fix either of these issues. I've run this script now with 1000 bp bins on ~66 patient samples. The error that traced back to '7' happened in about 5 samples. Adding 'force=TRUE' to the 'Smooth outliers' line in the ./.nextflow/assets/epi2me-labs/wf-human-variation/bin/run_qdnaseq.r file seemed to fix this issue.

I have not solved the error that traced back to '36', but now two samples had this error.

Neither of these errors seemed to correlate with read-depth, number of reads, or N50s despite the advised minimum number of reads.

vlshesketh commented 2 weeks ago

Hi @VICTO160, I'm really sorry for the delay in responding. There is now a new default CNV caller, Spectre, included in the workflow so please try this out and let us know if you have any feedback.