From c8693a9af33849be40a94e9c437d87c068fce740 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 10 Jun 2020 15:34:22 +0200 Subject: Update tests for detgeom --- tests/integration_check.c | 44 ++++++++++++----------------- tests/polarisation_check.c | 54 +++++++++++++---------------------- tests/prof2d_check.c | 48 +++++++++++++------------------ tests/ring_check.c | 70 ++++++++++++++++++++-------------------------- 4 files changed, 88 insertions(+), 128 deletions(-) (limited to 'tests') diff --git a/tests/integration_check.c b/tests/integration_check.c index 50e99d65..b7deb5ca 100644 --- a/tests/integration_check.c +++ b/tests/integration_check.c @@ -7,7 +7,7 @@ * a research centre of the Helmholtz Association. * * Authors: - * 2013-2016 Thomas White + * 2013-2020 Thomas White * * This file is part of CrystFEL. * @@ -73,30 +73,24 @@ int main(int argc, char *argv[]) } fclose(fh); - image.beam = NULL; image.lambda = ph_eV_to_lambda(9000.0); - image.det = calloc(1, sizeof(struct detector)); - image.det->n_panels = 1; - image.det->panels = calloc(1, sizeof(struct panel)); - - image.det->panels[0].w = w; - image.det->panels[0].h = h; - image.det->panels[0].fsx = 1.0; - image.det->panels[0].fsy = 0.0; - image.det->panels[0].ssx = 0.0; - image.det->panels[0].ssy = 1.0; - image.det->panels[0].xfs = 1.0; - image.det->panels[0].yfs = 0.0; - image.det->panels[0].xss = 0.0; - image.det->panels[0].yss = 1.0; - image.det->panels[0].cnx = -w/2; - image.det->panels[0].cny = -h/2; - image.det->panels[0].clen = 60.0e-3; - image.det->panels[0].res = 100000; /* 10 px per mm */ - image.det->panels[0].adu_per_eV = NAN; - image.det->panels[0].adu_per_photon = 10; - image.det->panels[0].max_adu = +INFINITY; /* No cutoff */ + image.detgeom = calloc(1, sizeof(struct detgeom)); + image.detgeom->n_panels = 1; + image.detgeom->panels = calloc(1, sizeof(struct detgeom_panel)); + + image.detgeom->panels[0].w = w; + image.detgeom->panels[0].h = h; + image.detgeom->panels[0].fsx = 1.0; + image.detgeom->panels[0].fsy = 0.0; + image.detgeom->panels[0].ssx = 0.0; + image.detgeom->panels[0].ssy = 1.0; + image.detgeom->panels[0].cnx = -w/2; + image.detgeom->panels[0].cny = -h/2; + image.detgeom->panels[0].cnz = 60.0e-3 / 100e-6; + image.detgeom->panels[0].pixel_pitch = 100e-6; /* 10 px per mm */ + image.detgeom->panels[0].adu_per_photon = 10; + image.detgeom->panels[0].max_adu = +INFINITY; /* No cutoff */ image.dp = malloc(sizeof(float *)); image.dp[0] = malloc(w*h*sizeof(float)); @@ -163,9 +157,7 @@ int main(int argc, char *argv[]) histogram_show(hi); histogram_free(hi); - free(image.beam); - free(image.det->panels); - free(image.det); + detgeom_free(image.detgeom); free(image.dp[0]); free(image.dp); diff --git a/tests/polarisation_check.c b/tests/polarisation_check.c index f8660e32..dcad4304 100644 --- a/tests/polarisation_check.c +++ b/tests/polarisation_check.c @@ -7,7 +7,7 @@ * a research centre of the Helmholtz Association. * * Authors: - * 2019 Thomas White + * 2019-2020 Thomas White * * This file is part of CrystFEL. * @@ -71,43 +71,30 @@ int main(int argc, char *argv[]) } fclose(fh); - image.beam = NULL; image.lambda = ph_eV_to_lambda(9000.0); image.bw = 0.000001; image.div = 0.0; image.spectrum = spectrum_generate_gaussian(image.lambda, image.bw); - image.det = calloc(1, sizeof(struct detector)); - image.det->n_panels = 1; - image.det->panels = calloc(1, sizeof(struct panel)); + image.detgeom = calloc(1, sizeof(struct detgeom)); + image.detgeom->n_panels = 1; + image.detgeom->panels = calloc(1, sizeof(struct detgeom_panel)); image.dp = calloc(1, sizeof(float *)); image.bad = calloc(1, sizeof(int *)); - image.det->panels[0].w = w; - image.det->panels[0].h = h; - image.det->panels[0].fsx = 1.0; - image.det->panels[0].fsy = 0.0; - image.det->panels[0].ssx = 0.0; - image.det->panels[0].ssy = 1.0; - image.det->panels[0].xfs = 1.0; - image.det->panels[0].yfs = 0.0; - image.det->panels[0].xss = 0.0; - image.det->panels[0].yss = 1.0; - image.det->panels[0].cnx = -w/2; - image.det->panels[0].cny = -h/2; - image.det->panels[0].clen = 50.0e-3; - image.det->panels[0].res = 10000; /* 10 micron pixels */ - image.det->panels[0].adu_per_eV = 10.0/9000.0; /* 10 adu/ph */ - image.det->panels[0].max_adu = +INFINITY; /* No cutoff */ - image.det->panels[0].orig_min_fs = 0; - image.det->panels[0].orig_min_ss = 0; - image.det->panels[0].orig_max_fs = w-1; - image.det->panels[0].orig_max_ss = h-1; - - image.det->furthest_out_panel = &image.det->panels[0]; - image.det->furthest_out_fs = 0; - image.det->furthest_out_ss = 0; + image.detgeom->panels[0].w = w; + image.detgeom->panels[0].h = h; + image.detgeom->panels[0].fsx = 1.0; + image.detgeom->panels[0].fsy = 0.0; + image.detgeom->panels[0].ssx = 0.0; + image.detgeom->panels[0].ssy = 1.0; + image.detgeom->panels[0].cnx = -w/2; + image.detgeom->panels[0].cny = -h/2; + image.detgeom->panels[0].cnz = 50.0e-3 / 10e-6; + image.detgeom->panels[0].pixel_pitch = 10e-6; + image.detgeom->panels[0].adu_per_photon = 1.0; + image.detgeom->panels[0].max_adu = +INFINITY; /* No cutoff */ image.dp[0] = malloc(w*h*sizeof(float)); memset(image.dp[0], 0, w*h*sizeof(float)); @@ -143,7 +130,8 @@ int main(int argc, char *argv[]) ncell = cell_rotate(cell, random_quaternion(rng)); crystal_set_cell(cr, ncell); - list = predict_to_res(cr, largest_q(&image)); + list = predict_to_res(cr, detgeom_max_resolution(image.detgeom, + image.lambda)); crystal_set_reflections(cr, list); for ( refl = first_refl(list, &iter); @@ -183,11 +171,9 @@ int main(int argc, char *argv[]) image.dp[0][i] = 1000.0 * map[i] / nmap[i]; if ( isnan(image.dp[0][i]) ) image.dp[0][i] = 0.0; } - hdf5_write_image("test.h5", &image, "/data/data"); + //hdf5_write_image("test.h5", &image, "/data/data"); - free(image.beam); - free(image.det->panels); - free(image.det); + detgeom_free(image.detgeom); free(image.dp[0]); free(image.dp); gsl_rng_free(rng); diff --git a/tests/prof2d_check.c b/tests/prof2d_check.c index d6b1d475..3d202d51 100644 --- a/tests/prof2d_check.c +++ b/tests/prof2d_check.c @@ -7,7 +7,7 @@ * a research centre of the Helmholtz Association. * * Authors: - * 2013-2014,2016 Thomas White + * 2013-2020 Thomas White * * This file is part of CrystFEL. * @@ -81,39 +81,30 @@ int main(int argc, char *argv[]) } fclose(fh); - image.beam = NULL; image.lambda = ph_eV_to_lambda(9000.0); image.bw = 0.000001; image.div = 0.0; image.spectrum = spectrum_generate_gaussian(image.lambda, image.bw); - image.det = calloc(1, sizeof(struct detector)); - image.det->n_panels = 1; - image.det->panels = calloc(1, sizeof(struct panel)); + image.detgeom = calloc(1, sizeof(struct detgeom)); + image.detgeom->n_panels = 1; + image.detgeom->panels = calloc(1, sizeof(struct detgeom_panel)); image.dp = calloc(1, sizeof(float *)); image.bad = calloc(1, sizeof(int *)); - image.det->panels[0].w = w; - image.det->panels[0].h = h; - image.det->panels[0].fsx = 1.0; - image.det->panels[0].fsy = 0.0; - image.det->panels[0].ssx = 0.0; - image.det->panels[0].ssy = 1.0; - image.det->panels[0].xfs = 1.0; - image.det->panels[0].yfs = 0.0; - image.det->panels[0].xss = 0.0; - image.det->panels[0].yss = 1.0; - image.det->panels[0].cnx = -w/2; - image.det->panels[0].cny = -h/2; - image.det->panels[0].clen = 60.0e-3; - image.det->panels[0].res = 100000; /* 10 px per mm */ - image.det->panels[0].adu_per_eV = 10.0/9000.0; /* 10 adu/ph */ - image.det->panels[0].max_adu = +INFINITY; /* No cutoff */ - - image.det->furthest_out_panel = &image.det->panels[0]; - image.det->furthest_out_fs = 0; - image.det->furthest_out_ss = 0; + image.detgeom->panels[0].w = w; + image.detgeom->panels[0].h = h; + image.detgeom->panels[0].fsx = 1.0; + image.detgeom->panels[0].fsy = 0.0; + image.detgeom->panels[0].ssx = 0.0; + image.detgeom->panels[0].ssy = 1.0; + image.detgeom->panels[0].cnx = -w/2; + image.detgeom->panels[0].cny = -h/2; + image.detgeom->panels[0].cnz = 60.0e-3 / 100e-6; + image.detgeom->panels[0].pixel_pitch = 100e-6; /* 10 px per mm */ + image.detgeom->panels[0].adu_per_photon = 10.0; + image.detgeom->panels[0].max_adu = +INFINITY; /* No cutoff */ image.dp[0] = malloc(w*h*sizeof(float)); memset(image.dp[0], 0, w*h*sizeof(float)); @@ -137,7 +128,8 @@ int main(int argc, char *argv[]) image.n_crystals = 1; image.crystals = &cr; - list = predict_to_res(cr, largest_q(&image)); + list = predict_to_res(cr, detgeom_max_resolution(image.detgeom, + image.lambda)); crystal_set_reflections(cr, list); for ( fs=0; fspanels); - free(image.det); + detgeom_free(image.detgeom); free(image.dp[0]); free(image.dp); gsl_rng_free(rng); diff --git a/tests/ring_check.c b/tests/ring_check.c index f286d5e7..89978ad8 100644 --- a/tests/ring_check.c +++ b/tests/ring_check.c @@ -7,7 +7,7 @@ * a research centre of the Helmholtz Association. * * Authors: - * 2011-2016 Thomas White + * 2011-2020 Thomas White * 2012 Andrew Martin * * This file is part of CrystFEL. @@ -60,9 +60,9 @@ static void third_integration_check(struct image *image, int n_trials, double fsp, ssp; int r; - for ( fs=0; fsdet->panels[0].w; fs++ ) { - for ( ss=0; ssdet->panels[0].h; ss++ ) { - image->dp[0][fs+image->det->panels[0].w*ss] + for ( fs=0; fsdetgeom->panels[0].w; fs++ ) { + for ( ss=0; ssdetgeom->panels[0].h; ss++ ) { + image->dp[0][fs+image->detgeom->panels[0].w*ss] = poisson_noise(rng, 1000.0); } } @@ -119,9 +119,9 @@ static void fourth_integration_check(struct image *image, int n_trials, double fsp, ssp; int r; - for ( fs=0; fsdet->panels[0].w; fs++ ) { - for ( ss=0; ssdet->panels[0].h; ss++ ) { - int idx = fs+image->det->panels[0].w*ss; + for ( fs=0; fsdetgeom->panels[0].w; fs++ ) { + for ( ss=0; ssdetgeom->panels[0].h; ss++ ) { + int idx = fs+image->detgeom->panels[0].w*ss; image->dp[0][idx] = poisson_noise(rng, 1000.0); if ( (fs-64)*(fs-64) + (ss-64)*(ss-64) > 9*9 ) continue; image->dp[0][idx] += 1000.0; @@ -188,30 +188,24 @@ int main(int argc, char *argv[]) image.dp[0] = malloc(128*128*sizeof(float)); image.bad = malloc(sizeof(uint16_t *)); image.bad[0] = calloc(128*128, sizeof(int)); - image.beam = NULL; image.lambda = ph_eV_to_lambda(1000.0); - image.det = calloc(1, sizeof(struct detector)); - image.det->n_panels = 1; - image.det->panels = calloc(1, sizeof(struct panel)); - - image.det->panels[0].fsx = 1.0; - image.det->panels[0].fsy = 0.0; - image.det->panels[0].ssx = 0.0; - image.det->panels[0].ssy = 1.0; - image.det->panels[0].xfs = 1.0; - image.det->panels[0].yfs = 0.0; - image.det->panels[0].xss = 0.0; - image.det->panels[0].yss = 1.0; - image.det->panels[0].cnx = -64.0; - image.det->panels[0].cny = -64.0; - image.det->panels[0].clen = 1.0; - image.det->panels[0].res = 1.0; - image.det->panels[0].w = 128; - image.det->panels[0].h = 128; - image.det->panels[0].adu_per_eV = NAN; - image.det->panels[0].adu_per_photon = 1.0; - image.det->panels[0].max_adu = +INFINITY; /* No cutoff */ + image.detgeom = calloc(1, sizeof(struct detgeom)); + image.detgeom->n_panels = 1; + image.detgeom->panels = calloc(1, sizeof(struct detgeom_panel)); + + image.detgeom->panels[0].fsx = 1.0; + image.detgeom->panels[0].fsy = 0.0; + image.detgeom->panels[0].ssx = 0.0; + image.detgeom->panels[0].ssy = 1.0; + image.detgeom->panels[0].cnx = -64.0; + image.detgeom->panels[0].cny = -64.0; + image.detgeom->panels[0].cnz = 1.0; + image.detgeom->panels[0].pixel_pitch = 1.0; + image.detgeom->panels[0].w = 128; + image.detgeom->panels[0].h = 128; + image.detgeom->panels[0].adu_per_photon = 1.0; + image.detgeom->panels[0].max_adu = +INFINITY; /* No cutoff */ memset(image.dp[0], 0, 128*128*sizeof(float)); @@ -238,10 +232,10 @@ int main(int argc, char *argv[]) /* Second check: uniform peak gives correct I and low sigma(I) */ npx = 0; - for ( fs=0; fspanels[0].w; fs++ ) { - for ( ss=0; sspanels[0].h; ss++ ) { + for ( fs=0; fspanels[0].w; fs++ ) { + for ( ss=0; sspanels[0].h; ss++ ) { if ( (fs-64)*(fs-64) + (ss-64)*(ss-64) > 9*9 ) continue; - image.dp[0][fs+image.det->panels[0].w*ss] = 1000.0; + image.dp[0][fs+image.detgeom->panels[0].w*ss] = 1000.0; npx++; } } @@ -280,11 +274,11 @@ int main(int argc, char *argv[]) /* Fifth check: uniform peak on uniform background */ npx = 0; - for ( fs=0; fspanels[0].w; fs++ ) { - for ( ss=0; sspanels[0].h; ss++ ) { - image.dp[0][fs+image.det->panels[0].w*ss] = 1000.0; + for ( fs=0; fspanels[0].w; fs++ ) { + for ( ss=0; sspanels[0].h; ss++ ) { + image.dp[0][fs+image.detgeom->panels[0].w*ss] = 1000.0; if ( (fs-64)*(fs-64) + (ss-64)*(ss-64) > 9*9 ) continue; - image.dp[0][fs+image.det->panels[0].w*ss] += 1000.0; + image.dp[0][fs+image.detgeom->panels[0].w*ss] += 1000.0; npx++; } } @@ -315,9 +309,7 @@ int main(int argc, char *argv[]) } - free(image.beam); - free(image.det->panels); - free(image.det); + detgeom_free(image.detgeom); free(image.dp[0]); free(image.dp); gsl_rng_free(rng); -- cgit v1.2.3