# How to find valleys of data using new function in V10 PeakDetect

One of the great new function in V10 is PeakDetect.

It can detect peaks according to desired sharpness as shown in this example:

data = Table[{x, (Sin[10 x] + 2) Exp[-x^2]}, {x, -4, 4, .01}];
peaks = Pick[data, PeakDetect[data[[;; , 2]], .01, .0005], 1];
ListPlot[{data, peaks},
PlotStyle -> {Automatic, Directive[Red, PointSize[0.02]]}]


The question is how to find valleys of the such data using this new function?

-
Apply it to $-f$? –  Mark McClure Jul 14 '14 at 1:04
@MarkMcClure Just saw your comment after I posted it. Yes, that is the first thing I though about also. –  Nasser Jul 14 '14 at 1:08
@MarkMcClure great trick. thanks to you and to Nasser. –  Algohi Jul 14 '14 at 1:09

As has been observed

data = Table[{x, (Sin[10 x] + 2) Exp[-x^2]}, {x, -4, 4, .01}];
peaks = Pick[data, PeakDetect[data[[;; , 2]], .01, .0005], 1];
troughs = Pick[data, PeakDetect[-data[[;; , 2]], .01, .0005], 1];
ListPlot[{data, peaks, troughs},
PlotStyle -> {Automatic, Directive[Red, PointSize[0.02]],
Directive[Green, PointSize[0.02]]}]

-
data = Table[{x, -(Sin[10 x] + 2) Exp[-x^2]}, {x, -4, 4, .01}];
peaks = Pick[data, PeakDetect[data[[;; , 2]], .01, .0005], 1];
ListPlot[{data, peaks}, PlotStyle -> {Automatic, Directive[Red, PointSize[0.02]]}];
Rotate[%, 180 Degree]


Or as Pickett mentioned below, just add - to data as in

data = Table[{x, (Sin[10 x] + 2) Exp[-x^2]}, {x, -4, 4, .01}];
peaks = Pick[data, PeakDetect[-data[[;; , 2]], .01, .0005], 1];
ListPlot[{data, peaks}, PlotStyle -> {Automatic, Directive[Red, PointSize[0.02]]}]

-
It's easier to just add - in front of data[[;;,2]]. This way you don't have to rotate the graph. –  Pickett Jul 14 '14 at 1:12
@Nasser, it would better if you ListPlot[{-data,-peaks},....] –  Algohi Jul 14 '14 at 1:13
@Pickett, sure that is better so no rotation is needed. Thanks. –  Nasser Jul 14 '14 at 1:13