We fit a kernel density estimator to the cells in the flowFrame and identify the two largest peaks. We then select as the cutpoint the value at which the minimum density is attained between the two peaks of interest.

gate_mindensity(
fr,
channel,
filterId = "",
positive = TRUE,
pivot = FALSE,
gate_range = NULL,
min = NULL,
max = NULL,
peaks = NULL,
...
)

## Arguments

fr a flowFrame object TODO TODO If TRUE, then the gate consists of the entire real line to the right of the cutpoint. Otherwise, the gate is the entire real line to the left of the cutpoint. (Default: TRUE) logical value. If TRUE, we choose as the two peaks the largest peak and its neighboring peak. See details. numeric vector of length 2. If given, this sets the bounds on the gate applied. If no gate is found within this range, we set the gate to the minimum value within this range if positive is TRUE and the maximum value of the range otherwise. a numeric value that sets the lower boundary for data filtering a numeric value that sets the upper boundary for data filtering numeric vector. If not given , then perform peak detection first by .find_peaks Additional arguments for peak detection.

## Value

a rectangleGate object based on the minimum density cutpoint

## Details

In the default case, the two peaks of interest are the two largest peaks obtained from the link{density} function. However, if pivot is TRUE, we choose the largest peak and its neighboring peak as the two peaks of interest. In this case, the neighboring peak is the peak immediately to the left of the largest peak if positive is TRUE. Otherwise, the neighboring peak is selected as the peak to the right.

In the special case that there is only one peak, we are conservative and set the cutpoint as the min(x) if positive is TRUE, and the max(x) otherwise.

## Examples

if (FALSE) {
gate <- gate_mindensity(fr, channel = "APC-A") # fr is a flowFrame
}