annotate saitools/removepeaks.c @ 0:5242703e91d3 tip

Initial checkin for AIM92 aimR8.2 (last updated May 1997).
author tomwalters
date Fri, 20 May 2011 15:19:45 +0100
parents
children
rev   line source
tomwalters@0 1 /*
tomwalters@0 2 Copyright (c) Applied Psychology Unit, Medical Research Council. 1993
tomwalters@0 3 ===========================================================================
tomwalters@0 4
tomwalters@0 5 Permission to use, copy, modify, and distribute this software without fee
tomwalters@0 6 is hereby granted for research purposes, provided that this copyright
tomwalters@0 7 notice appears in all copies and in all supporting documentation, and that
tomwalters@0 8 the software is not redistributed for any fee (except for a nominal
tomwalters@0 9 shipping charge). Anyone wanting to incorporate all or part of this
tomwalters@0 10 software in a commercial product must obtain a license from the Medical
tomwalters@0 11 Research Council.
tomwalters@0 12
tomwalters@0 13 The MRC makes no representations about the suitability of this
tomwalters@0 14 software for any purpose. It is provided "as is" without express or
tomwalters@0 15 implied warranty.
tomwalters@0 16
tomwalters@0 17 THE MRC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
tomwalters@0 18 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
tomwalters@0 19 THE A.P.U. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
tomwalters@0 20 OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
tomwalters@0 21 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
tomwalters@0 22 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
tomwalters@0 23 SOFTWARE.
tomwalters@0 24 */
tomwalters@0 25
tomwalters@0 26 /*-------------------------------------------------------------------------*/
tomwalters@0 27
tomwalters@0 28 /* removepeaks.c
tomwalters@0 29 * ---------------
tomwalters@0 30 *
tomwalters@0 31 * M.Akeroyd. Summer 1993. Revised Winter 1994.
tomwalters@0 32 */
tomwalters@0 33
tomwalters@0 34
tomwalters@0 35 #include <stdio.h>
tomwalters@0 36 #include <string.h>
tomwalters@0 37 #include <stdlib.h>
tomwalters@0 38
tomwalters@0 39 #include "tip.h"
tomwalters@0 40
tomwalters@0 41
tomwalters@0 42
tomwalters@0 43
tomwalters@0 44 extern struct Peak peak[MAX_PEAKS]; /* all channels */
tomwalters@0 45 extern struct NextEvent nextevent[MAX_PEAKS];
tomwalters@0 46
tomwalters@0 47 extern double removevalue;
tomwalters@0 48 extern inputdata[MAX_DATA];
tomwalters@0 49
tomwalters@0 50
tomwalters@0 51
tomwalters@0 52
tomwalters@0 53 /*-------------------------------------------------------------------------*/
tomwalters@0 54
tomwalters@0 55
tomwalters@0 56
tomwalters@0 57 int removepeaks(int total_peaks)
tomwalters@0 58 {
tomwalters@0 59 /* What this code does:
tomwalters@0 60 *
tomwalters@0 61 * Its purpose is to remove, completely, any peak that is very small,
tomwalters@0 62 * and perhaps shouldn't be regarded as being there. This is because they
tomwalters@0 63 * tend to clutter up tents and glaciers.
tomwalters@0 64 *
tomwalters@0 65 * So, go through each peak. If F(n) < (F[n-1]*removevalue) AND
tomwalters@0 66 * F(n) < (F[n+1]*removevalue), then remove it. Exactly what samples are
tomwalters@0 67 * removed depends on the next events.
tomwalters@0 68 *
tomwalters@0 69 * At the end, call findpeaksreverse again, to reset the nextevent counters.
tomwalters@0 70 * RETURN the new value of total_peaks.
tomwalters@0 71 *
tomwalters@0 72 */
tomwalters@0 73
tomwalters@0 74 int n;
tomwalters@0 75 int sample;
tomwalters@0 76
tomwalters@0 77 /*--------------------------------------*/
tomwalters@0 78
tomwalters@0 79 for (n=2; n<total_peaks; n++)
tomwalters@0 80
tomwalters@0 81 if ((peak[n].mag < (int) (peak[n-1].mag * removevalue)) &&
tomwalters@0 82 (peak[n].mag < (int) (peak[n+1].mag * removevalue))) {
tomwalters@0 83 /* remove peak */
tomwalters@0 84 for (sample = peak[n].sample; sample <= nextevent[n-1].sample; sample++)
tomwalters@0 85 inputdata[sample] = 0;
tomwalters@0 86 for (sample = peak[n].sample; sample >= nextevent[n].sample; sample--)
tomwalters@0 87 inputdata[sample] = 0;
tomwalters@0 88 }
tomwalters@0 89
tomwalters@0 90 /*--------------------------------------*/
tomwalters@0 91
tomwalters@0 92 /* repeat for first and last peaks */
tomwalters@0 93
tomwalters@0 94 if (peak[1].mag < (int) (peak[2].mag * removevalue)) {
tomwalters@0 95 for (sample = peak[1].sample; sample >= nextevent[1].sample; sample--)
tomwalters@0 96 inputdata[sample] = 0;
tomwalters@0 97 }
tomwalters@0 98
tomwalters@0 99 n=total_peaks;
tomwalters@0 100
tomwalters@0 101 if (peak[n].mag < (int) (peak[n-1].mag * removevalue)) {
tomwalters@0 102 for (sample = peak[n].sample; sample <= nextevent[n-1].sample; sample++)
tomwalters@0 103 inputdata[sample] = 0;
tomwalters@0 104 }
tomwalters@0 105
tomwalters@0 106 /*--------------------------------------*/
tomwalters@0 107
tomwalters@0 108 findpeaksreverse();
tomwalters@0 109 return total_peaks;
tomwalters@0 110
tomwalters@0 111 }
tomwalters@0 112
tomwalters@0 113
tomwalters@0 114
tomwalters@0 115
tomwalters@0 116 /* The End */
tomwalters@0 117 /*-------------------------------------------------------------------------*/