| #include <math.h> |
| #include <gsl/gsl_ntuple.h> |
| #include <gsl/gsl_histogram.h> |
| |
| struct data |
| { |
| double x; |
| double y; |
| double z; |
| }; |
| |
| int sel_func (void *ntuple_data, void *params); |
| double val_func (void *ntuple_data, void *params); |
| |
| int |
| main (void) |
| { |
| struct data ntuple_row; |
| |
| gsl_ntuple *ntuple |
| = gsl_ntuple_open ("test.dat", &ntuple_row, |
| sizeof (ntuple_row)); |
| double lower = 1.5; |
| |
| gsl_ntuple_select_fn S; |
| gsl_ntuple_value_fn V; |
| |
| gsl_histogram *h = gsl_histogram_alloc (100); |
| gsl_histogram_set_ranges_uniform(h, 0.0, 10.0); |
| |
| S.function = &sel_func; |
| S.params = &lower; |
| |
| V.function = &val_func; |
| V.params = 0; |
| |
| gsl_ntuple_project (h, ntuple, &V, &S); |
| gsl_histogram_fprintf (stdout, h, "%f", "%f"); |
| gsl_histogram_free (h); |
| gsl_ntuple_close (ntuple); |
| |
| return 0; |
| } |
| |
| int |
| sel_func (void *ntuple_data, void *params) |
| { |
| struct data * data = (struct data *) ntuple_data; |
| double x, y, z, E2, scale; |
| scale = *(double *) params; |
| |
| x = data->x; |
| y = data->y; |
| z = data->z; |
| |
| E2 = x * x + y * y + z * z; |
| |
| return E2 > scale; |
| } |
| |
| double |
| val_func (void *ntuple_data, void *params) |
| { |
| struct data * data = (struct data *) ntuple_data; |
| double x, y, z; |
| |
| x = data->x; |
| y = data->y; |
| z = data->z; |
| |
| return x * x + y * y + z * z; |
| } |