comparison Peaks.cpp @ 22:6afcb5edd7ab

Fix compiler warnings, etc
author Chris Cannam
date Wed, 28 Aug 2013 16:50:40 +0100
parents 55969570044e
children
comparison
equal deleted inserted replaced
21:d98bc465a116 22:6afcb5edd7ab
27 while (mid < end) { 27 while (mid < end) {
28 int i = mid - width; 28 int i = mid - width;
29 if (i < 0) 29 if (i < 0)
30 i = 0; 30 i = 0;
31 int stop = mid + width + 1; 31 int stop = mid + width + 1;
32 if (stop > data.size()) 32 if (stop > (int)data.size())
33 stop = data.size(); 33 stop = data.size();
34 maxp = i; 34 maxp = i;
35 for (i++; i < stop; i++) 35 for (i++; i < stop; i++)
36 if (data[i] > data[maxp]) 36 if (data[i] > data[maxp])
37 maxp = i; 37 maxp = i;
38 if (maxp == mid) { 38 if (maxp == mid) {
39 int j; 39 int j;
40 for (j = peakCount; j > 0; j--) { 40 for (j = peakCount; j > 0; j--) {
41 if (data[maxp] <= data[peaks[j-1]]) 41 if (data[maxp] <= data[peaks[j-1]])
42 break; 42 break;
43 else if (j < peaks.size()) 43 else if (j < (int)peaks.size())
44 peaks[j] = peaks[j-1]; 44 peaks[j] = peaks[j-1];
45 } 45 }
46 if (j != peaks.size()) 46 if (j != (int)peaks.size())
47 peaks[j] = maxp; 47 peaks[j] = maxp;
48 if (peakCount != peaks.size()) 48 if (peakCount != (int)peaks.size())
49 peakCount++; 49 peakCount++;
50 } 50 }
51 mid++; 51 mid++;
52 } 52 }
53 return peakCount; 53 return peakCount;
67 av = data[mid]; 67 av = data[mid];
68 int i = mid - width; 68 int i = mid - width;
69 if (i < 0) 69 if (i < 0)
70 i = 0; 70 i = 0;
71 int stop = mid + width + 1; 71 int stop = mid + width + 1;
72 if (stop > data.size()) 72 if (stop > (int)data.size())
73 stop = data.size(); 73 stop = data.size();
74 maxp = i; 74 maxp = i;
75 for (i++; i < stop; i++) 75 for (i++; i < stop; i++)
76 if (data[i] > data[maxp]) 76 if (data[i] > data[maxp])
77 maxp = i; 77 maxp = i;
104 if (isRelative) { 104 if (isRelative) {
105 int iStart = index - pre * width; 105 int iStart = index - pre * width;
106 if (iStart < 0) 106 if (iStart < 0)
107 iStart = 0; 107 iStart = 0;
108 int iStop = index + post * width; 108 int iStop = index + post * width;
109 if (iStop > data.size()) 109 if (iStop > (int)data.size())
110 iStop = data.size(); 110 iStop = data.size();
111 double sum = 0; 111 double sum = 0;
112 int count = iStop - iStart; 112 int count = iStop - iStart;
113 while (iStart < iStop) 113 while (iStart < iStop)
114 sum += data[iStart++]; 114 sum += data[iStart++];
118 } // overThreshold() 118 } // overThreshold()
119 119
120 void Peaks::normalise(vector<double> &data) { 120 void Peaks::normalise(vector<double> &data) {
121 double sx = 0; 121 double sx = 0;
122 double sxx = 0; 122 double sxx = 0;
123 for (int i = 0; i < data.size(); i++) { 123 for (int i = 0; i < (int)data.size(); i++) {
124 sx += data[i]; 124 sx += data[i];
125 sxx += data[i] * data[i]; 125 sxx += data[i] * data[i];
126 } 126 }
127 double mean = sx / data.size(); 127 double mean = sx / data.size();
128 double sd = sqrt((sxx - sx * mean) / data.size()); 128 double sd = sqrt((sxx - sx * mean) / data.size());
129 if (sd == 0) 129 if (sd == 0)
130 sd = 1; // all data[i] == mean -> 0; avoids div by 0 130 sd = 1; // all data[i] == mean -> 0; avoids div by 0
131 for (int i = 0; i < data.size(); i++) { 131 for (int i = 0; i < (int)data.size(); i++) {
132 data[i] = (data[i] - mean) / sd; 132 data[i] = (data[i] - mean) / sd;
133 } 133 }
134 } // normalise() 134 } // normalise()
135 135
136 /** Uses an n-point linear regression to estimate the slope of data. 136 /** Uses an n-point linear regression to estimate the slope of data.
152 sxy += t * data[i]; 152 sxy += t * data[i];
153 } 153 }
154 double delta = n * sxx - sx * sx; 154 double delta = n * sxx - sx * sx;
155 for ( ; j < n / 2; j++) 155 for ( ; j < n / 2; j++)
156 slope[j] = (n * sxy - sx * sy) / delta; 156 slope[j] = (n * sxy - sx * sy) / delta;
157 for ( ; j < data.size() - (n + 1) / 2; j++, i++) { 157 for ( ; j < (int)data.size() - (n + 1) / 2; j++, i++) {
158 slope[j] = (n * sxy - sx * sy) / delta; 158 slope[j] = (n * sxy - sx * sy) / delta;
159 sy += data[i] - data[i - n]; 159 sy += data[i] - data[i - n];
160 sxy += hop * (n * data[i] - sy); 160 sxy += hop * (n * data[i] - sy);
161 } 161 }
162 for ( ; j < data.size(); j++) 162 for ( ; j < (int)data.size(); j++)
163 slope[j] = (n * sxy - sx * sy) / delta; 163 slope[j] = (n * sxy - sx * sy) / delta;
164 } // getSlope() 164 } // getSlope()
165 165
166 int Peaks::imin(const vector<double> &arr) { 166 int Peaks::imin(const vector<double> &arr) {
167 int i = 0; 167 int i = 0;
168 for (int j = 1; j < arr.size(); j++) 168 for (int j = 1; j < (int)arr.size(); j++)
169 if (arr[j] < arr[i]) 169 if (arr[j] < arr[i])
170 i = j; 170 i = j;
171 return i; 171 return i;
172 } // imin() 172 } // imin()
173 173
174 int Peaks::imax(const vector<double> &arr) { 174 int Peaks::imax(const vector<double> &arr) {
175 int i = 0; 175 int i = 0;
176 for (int j = 1; j < arr.size(); j++) 176 for (int j = 1; j < (int)arr.size(); j++)
177 if (arr[j] > arr[i]) 177 if (arr[j] > arr[i])
178 i = j; 178 i = j;
179 return i; 179 return i;
180 } // imax() 180 } // imax()
181 181