aboutsummaryrefslogtreecommitdiff
path: root/src/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test.c')
-rw-r--r--src/test.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/test.c b/src/test.c
index dddf235..a3f98a9 100644
--- a/src/test.c
+++ b/src/test.c
@@ -1227,6 +1227,139 @@ int test_norm_cdf(char *err)
return 0;
}
+static double gsl_time_pdf(double x, void *params)
+{
+ double mu_noise, mu_indirect, mu_direct, mu_shower, ts, ts_shower, tmean, tsigma, ts_sigma;
+
+ double *pars = (double *) params;
+
+ mu_noise = pars[0];
+ mu_indirect = pars[1];
+ mu_direct = pars[2];
+ mu_shower = pars[3];
+ ts = pars[4];
+ ts_shower = pars[5];
+ tmean = pars[6];
+ tsigma = pars[7];
+ ts_sigma = pars[8];
+
+ return time_pdf(x,mu_noise,mu_indirect,&mu_direct,&mu_shower,1,&ts,&ts_shower,tmean,tsigma,&ts_sigma);
+}
+
+int test_time_pdf_norm(char *err)
+{
+ /* Tests the time_pdf() function. */
+ size_t i;
+ gsl_integration_cquad_workspace *w;
+ gsl_function F;
+ double result, error;
+ int status;
+ size_t nevals;
+ double params[9];
+ double expected;
+
+ w = gsl_integration_cquad_workspace_alloc(100);
+
+ params[0] = 0.1;
+ params[1] = 0.5;
+ params[2] = 1.0;
+ params[3] = 1.0;
+ params[4] = 100.0;
+ params[5] = 120.0;
+ params[6] = 100.0;
+ params[7] = PMT_TTS;
+ params[8] = 10.0;
+
+ F.function = &gsl_time_pdf;
+ F.params = params;
+
+ init_genrand(0);
+
+ for (i = 0; i < 100; i++) {
+ params[0] = genrand_real2();
+ params[1] = genrand_real2();
+ params[2] = genrand_real2();
+ params[3] = genrand_real2();
+
+ status = gsl_integration_cquad(&F, 0, GTVALID, 0, 1e-9, w, &result, &error, &nevals);
+
+ if (status) {
+ sprintf(err, "error integrating time PDF: %s\n", gsl_strerror(status));
+ goto err;
+ }
+
+ expected = 1.0;
+
+ if (!isclose(result, expected, 1e-2, 0)) {
+ sprintf(err, "integral of time_pdf = %.5f, but expected %.5f", result, expected);
+ return 1;
+ }
+ }
+
+ return 0;
+
+err:
+ return 1;
+}
+
+int test_time_cdf(char *err)
+{
+ /* Tests the time_cdf() function. */
+ size_t i;
+ gsl_integration_cquad_workspace *w;
+ gsl_function F;
+ double result, error;
+ int status;
+ size_t nevals;
+ double params[9];
+ double expected;
+
+ w = gsl_integration_cquad_workspace_alloc(100);
+
+ params[0] = 0.1;
+ params[1] = 0.5;
+ params[2] = 1.0;
+ params[3] = 1.0;
+ params[4] = 100.0;
+ params[5] = 120.0;
+ params[6] = 100.0;
+ params[7] = PMT_TTS;
+ params[8] = 10.0;
+
+ F.function = &gsl_time_pdf;
+ F.params = params;
+
+ init_genrand(0);
+
+ for (i = 0; i < 100; i++) {
+ params[0] = genrand_real2();
+ params[1] = genrand_real2();
+ params[2] = genrand_real2();
+ params[3] = genrand_real2();
+
+ double t = genrand_real2()*GTVALID;
+
+ status = gsl_integration_cquad(&F, 0, t, 0, 1e-9, w, &result, &error, &nevals);
+
+ if (status) {
+ sprintf(err, "error integrating time PDF: %s\n", gsl_strerror(status));
+ goto err;
+ }
+
+ expected = time_cdf(t,params[0],params[1],&params[2],&params[3],1,&params[4],&params[5],params[6],params[7],&params[8]);
+
+ if (!isclose(result, expected, 1e-2, 0)) {
+ sprintf(err, "integral of time_pdf = %.5f, but expected %.5f", result, expected);
+ return 1;
+ }
+ }
+
+ return 0;
+
+err:
+ return 1;
+}
+
struct tests {
testFunction *test;
char *name;
@@ -1263,6 +1396,8 @@ struct tests {
{test_solid_angle_fast, "test_solid_angle_fast"},
{test_norm, "test_norm"},
{test_norm_cdf, "test_norm_cdf"},
+ {test_time_pdf_norm, "test_time_pdf_norm"},
+ {test_time_cdf, "test_time_cdf"},
};
int main(int argc, char **argv)