comparison base/LogRange.cpp @ 1387:9b52f1a952b5

merge
author Chris Cannam
date Thu, 23 Feb 2017 17:05:26 +0000
parents b061b9f8fca5
children 667e369cfeab
comparison
equal deleted inserted replaced
1386:0d45fff7ccd1 1387:9b52f1a952b5
21 #include <cmath> 21 #include <cmath>
22 22
23 void 23 void
24 LogRange::mapRange(double &min, double &max, double logthresh) 24 LogRange::mapRange(double &min, double &max, double logthresh)
25 { 25 {
26 // ensure that max > min:
26 if (min > max) std::swap(min, max); 27 if (min > max) std::swap(min, max);
27 if (max == min) max = min + 1; 28 if (max == min) max = min + 1;
28 29
29 // cerr << "LogRange::mapRange: min = " << min << ", max = " << max << endl; 30 // cerr << "LogRange::mapRange: min = " << min << ", max = " << max << endl;
30 31
31 if (min >= 0.f) { 32 if (min >= 0.0) {
32 33
33 max = log10(max); // we know max != 0 34 // and max > min, so we know min >= 0 and max > 0
35
36 max = log10(max);
34 37
35 if (min == 0.f) min = std::min(logthresh, max); 38 if (min == 0.0) min = std::min(logthresh, max);
36 else min = log10(min); 39 else min = log10(min);
37 40
38 // cerr << "LogRange::mapRange: positive: min = " << min << ", max = " << max << endl; 41 // cerr << "LogRange::mapRange: positive: min = " << min << ", max = " << max << endl;
39 42
40 } else if (max <= 0.f) { 43 } else if (max <= 0.0) {
44
45 // and max > min, so we know min < 0 and max <= 0
41 46
42 min = log10(-min); // we know min != 0 47 min = log10(-min);
43 48
44 if (max == 0.f) max = std::min(logthresh, min); 49 if (max == 0.0) max = std::min(logthresh, min);
45 else max = log10(-max); 50 else max = log10(-max);
46 51
47 std::swap(min, max); 52 std::swap(min, max);
48 53
49 // cerr << "LogRange::mapRange: negative: min = " << min << ", max = " << max << endl; 54 // cerr << "LogRange::mapRange: negative: min = " << min << ", max = " << max << endl;
62 } 67 }
63 68
64 double 69 double
65 LogRange::map(double value, double thresh) 70 LogRange::map(double value, double thresh)
66 { 71 {
67 if (value == 0.f) return thresh; 72 if (value == 0.0) return thresh;
68 return log10(fabs(value)); 73 return log10(fabs(value));
69 } 74 }
70 75
71 double 76 double
72 LogRange::unmap(double value) 77 LogRange::unmap(double value)
75 } 80 }
76 81
77 static double 82 static double
78 sd(const std::vector<double> &values, int start, int n) 83 sd(const std::vector<double> &values, int start, int n)
79 { 84 {
80 double sum = 0.f, mean = 0.f, variance = 0.f; 85 double sum = 0.0, mean = 0.0, variance = 0.0;
81 for (int i = 0; i < n; ++i) { 86 for (int i = 0; i < n; ++i) {
82 sum += values[start + i]; 87 sum += values[start + i];
83 } 88 }
84 mean = sum / n; 89 mean = sum / n;
85 for (int i = 0; i < n; ++i) { 90 for (int i = 0; i < n; ++i) {