peakDetection {nucleR} | R Documentation

## Detect peaks (local maximum) from values series

### Description

This function allows a efficient recognition of the local maximums (peaks) in a given numeric vector.

### Usage

    peakDetection(
      data,
      threshold = 0.25,
      chromosome = NULL,
      width = 1,
      score = TRUE,
      min.cov = 2,
      mc.cores = 1
    )

    ## S4 method for signature 'list'
    peakDetection(
      data,
      threshold = "25%",
      width = 1,
      score = TRUE,
      min.cov = 2,
      mc.cores = 1
    )

    ## S4 method for signature 'numeric'
    peakDetection(
      data,
      threshold = "25%",
      chromosome = NULL,
      width = 1,
      score = TRUE,
      min.cov = 2,
      mc.cores = 1
    )

### Arguments

`data` | Input numeric values, or a list of them
`threshold` | Threshold value from which the peaks will be selected. Can be given as a percentage string (i.e., `"25\\%"` will use the value in the 1st quantile of `data`) or as an absolute coverage numeric value (i.e., `20` will not look for peaks in regions without less than 20 reads (or reads per milion)).
`chromosome` | Optionally specify the name of the chromosome for input data that doesn't specify it.
`width` | If a positive integer > 1 is given, the peaks are returned as a range of the given width centered in the local maximum. Useful for nucleosome calling from a coverage peak in the dyad.
`score` | If TRUE, the results will be scored using `peakScoring()` function.
`min.cov` | Minimum coverage that a peak needs in order to be considered as a nucleosome call.
`mc.cores` | The number of cores to use, i.e. at most how many child processes will be run simultaneously. Parallelization requires at least two cores.

### Details

It's recommended to smooth the input with `filterFFT` prior the detection.

### Value

The type of the return depends on the input parameters:

- `numeric` (or a list of them) if `width==1 & score==FALSE` containing the position of the peaks.

- `data.frame` (or list of them) if `width==1 & score==TRUE` containing a 'peak' column with the position of the peak plus a 'score' column with its score.

- `IRanges` (or `IRangesList`) if `width>1 & score==FALSE` containing the ranges of the peaks.

- `GRanges` if `width>1 & score==TRUE` containing the ranges of the peaks and the assigned score.

### Note

If `width` > 1, those ranges outside the range `1:length(data)` will be skipped.

### Author(s)

Oscar Flores oflores@mmb.pcb.ub.es

### See Also

`filterFFT()`, `peakScoring()`

### Examples

    # Generate a random peaks profile
    reads <- syntheticNucMap(nuc.len=40, lin.len=130)$syn.reads
    cover <- coverage.rpm(reads)

    # Filter them
    cover_fft <- filterFFT(cover)

    # Detect and plot peaks (up a bit the threshold for accounting synthetic
    # data)
    peaks <- peakDetection(cover_fft, threshold="40%", score=TRUE)
    plotPeaks(peaks, cover_fft, threshold="40%", start=10000, end=15000)

    # Now use ranges version, which accounts for fuzziness when scoring
    peaks <- peakDetection(cover_fft, threshold="40%", score=TRUE, width=147)
    plotPeaks(peaks, cover_fft, threshold="40%", start=10000, end=15000)

[Package nucleR version 2.24.0 Index]