Re: Broad Peak Search Algorithm [message #83534 is a reply to message #83533] |
Mon, 11 March 2013 17:59   |
Craig Markwardt
Messages: 1869 Registered: November 1996
|
Senior Member |
|
|
On Monday, March 11, 2013 6:32:16 PM UTC-4, mark...@gmail.com wrote:
> Hi All
>
>
>
> I have a dataset which is noisy, but contains a small number (< 5) broad peaks, much like the data given in http://carlwillis.files.wordpress.com/2011/03/wellrich_spect rum.jpg (just an pictorial example, not the actual data). You'll notice that there is both small amplitude noise throughout the data together with a small number of broad peaks.
>
>
>
> The majority of peak finding routines I've found work on the basis of derivatives/gradients which find hundreds of "local" peaks in the small amplitude noise. I'm interested in tracking the broader, large peaks only. Ideally I'm after a peak finding routine which filters on the basis of peak width and allows some filtering based around amplitude so certain peaks can be selected over others.
>
>
>
> Just to add to make things even more complicated ( :-) ) the data is often quite sparse meaning that while the broad peaks are always present, they may be not be as well formed as in the example image above.
>
>
>
> Can anyone suggest a robust method or existing IDL routine that would help pick out the broad peaks only?
>
>
>
> Any help or advice would be massively appreciated!
I agree with the other posters that smoothing is your first stop.
I'm not sure about FFT though. Your data have a large dynamic range - it's plotted on log scale! - so you are going to get strange aliases. (The FFT assumes your data has circular symmetry, which it obviously doesn't).
You seem to know the approximate width of each of your peaks, about 40 keV. In principle you can make a simple contrast enhancer using that knowledge. In pseudocode it might me,
SMOOTH_SIGNAL = SMOOTH(Y,(40 keV)) - SMOOTH(Y,(160 keV))
Edge effects will need to be dealt with. It looks like the peaks become broader at higher energies, so you might need to write a fancier version of SMOOTH() that is adaptive to energy.
If you know very approximately where the peaks must be found, then you can take the approach of fitting the peak amplitude. If the position is only known approximately, then it's wise to do it iteratively: first fit amplitude only as a rough cut, then allow centroid to vary, then width. Of course this also relies on having a semi-accurate baseline=continuum model.
Craig
|
|
|