summaryrefslogtreecommitdiff
path: root/gsl-1.9/doc/examples/ntupler.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/doc/examples/ntupler.c')
-rw-r--r--gsl-1.9/doc/examples/ntupler.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/gsl-1.9/doc/examples/ntupler.c b/gsl-1.9/doc/examples/ntupler.c
new file mode 100644
index 0000000..a926522
--- /dev/null
+++ b/gsl-1.9/doc/examples/ntupler.c
@@ -0,0 +1,72 @@
+#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;
+}