0
|
1 |
#include <math.h>
|
|
2 |
#include "histogram.h"
|
|
3 |
#include "tcl_interface.h"
|
|
4 |
|
|
5 |
void Histogram::initialize_mean()
|
|
6 |
{
|
|
7 |
int total_weight = 0;
|
|
8 |
int i;
|
|
9 |
for(i = 0; i < num_rows; i++)
|
|
10 |
{
|
|
11 |
total_weight = total_weight + row_weights[i];
|
|
12 |
}
|
|
13 |
mean = (double) total_weight / (double) num_rows;
|
|
14 |
}
|
|
15 |
|
|
16 |
inline double sqr(double x) {return(x*x);}
|
|
17 |
|
|
18 |
void Histogram::initialize_variance()
|
|
19 |
{
|
|
20 |
double sum = 0;
|
|
21 |
for(int i = 0; i < num_rows; i++)
|
|
22 |
{
|
|
23 |
sum += sqr(row_weights[i] - mean);
|
|
24 |
}
|
|
25 |
variance = (double) sum / (double) num_rows;
|
|
26 |
}
|
|
27 |
|
|
28 |
void Histogram::initialize_standard_dev()
|
|
29 |
{
|
|
30 |
standard_dev = sqrt(variance);
|
|
31 |
}
|
|
32 |
#define SKIP 5
|
|
33 |
/* should get this skip from project.cc (!!) */
|
|
34 |
Histogram::display()
|
|
35 |
{
|
|
36 |
#if 0
|
|
37 |
docommand(".histogram.c delete hist");
|
|
38 |
docommand(".histogram.c create text 275 300 -font -adobe-helvetica-medium-o-normal--34-240-100-100-p-176-iso8859-1 -text \"%.3lf degrees, SD = %.3lf\" -tags hist", cut_angle, standard_dev);
|
|
39 |
for(int i = 0; i < num_rows; i++)
|
|
40 |
{
|
|
41 |
docommand(".histogram.c create line 0 %d %d %d -fill blue -tags {hist} -width %d", i*SKIP, row_weights[i], i*SKIP, SKIP);
|
|
42 |
}
|
|
43 |
docommand("update");
|
|
44 |
#endif
|
|
45 |
}
|
|
46 |
|
|
47 |
Histogram::Histogram(int n_rows, int* r_weights, double c_angle)
|
|
48 |
{
|
|
49 |
num_rows = n_rows;
|
|
50 |
row_weights = r_weights;
|
|
51 |
cut_angle = c_angle;
|
|
52 |
initialize_mean();
|
|
53 |
initialize_variance();
|
|
54 |
initialize_standard_dev();
|
|
55 |
}
|
|
56 |
|
|
57 |
|
|
58 |
|
|
59 |
|
|
60 |
|
|
61 |
|
|
62 |
|
|
63 |
|
|
64 |
|
|
65 |
|
|
66 |
double find_int_sd(int* values, int num_values)
|
|
67 |
/* find the standard deviation of an array of ints */
|
|
68 |
{
|
|
69 |
int total_weight = 0;
|
|
70 |
int i;
|
|
71 |
for(i = 0; i < num_values; i++)
|
|
72 |
{
|
|
73 |
total_weight = total_weight + values[i];
|
|
74 |
}
|
|
75 |
double mean_weight = (double) total_weight / (double) num_values;
|
|
76 |
double standard_sum = 0;
|
|
77 |
for(i = 0; i < num_values; i++)
|
|
78 |
{
|
|
79 |
standard_sum += sqr(values[i] - mean_weight);
|
|
80 |
}
|
|
81 |
standard_sum = standard_sum / (double) num_values;
|
|
82 |
return sqrt(standard_sum);
|
|
83 |
}
|
|
84 |
|