From 8a1898f66575495b9dbb75a7ce1bc6ea26c05cb3 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 22 Feb 2013 11:57:26 +0100 Subject: Move processing pipeline to separate file --- src/im-sandbox.c | 210 +------------------------------------------------------ 1 file changed, 1 insertion(+), 209 deletions(-) (limited to 'src/im-sandbox.c') diff --git a/src/im-sandbox.c b/src/im-sandbox.c index 504c52c4..290f811f 100644 --- a/src/im-sandbox.c +++ b/src/im-sandbox.c @@ -41,8 +41,6 @@ #include #include #include -#include -#include #include #include #include @@ -55,36 +53,14 @@ #include #endif -#include "utils.h" -#include "hdf5-file.h" -#include "index.h" -#include "peaks.h" -#include "detector.h" -#include "filters.h" -#include "thread-pool.h" -#include "beam-parameters.h" -#include "geometry.h" -#include "stream.h" -#include "reflist-utils.h" - #include "im-sandbox.h" +#include "process_image.h" /* Write statistics at APPROXIMATELY this interval */ #define STATS_EVERY_N_SECONDS (5) -/* Information about the indexing process for one pattern */ -struct pattern_args -{ - /* "Input" */ - char *filename; - - /* "Output" */ - int n_crystals; -}; - - struct sb_reader { pthread_mutex_t lock; @@ -194,190 +170,6 @@ static char *get_pattern(FILE *fh, char **use_this_one_instead, } -static void process_image(const struct index_args *iargs, - struct pattern_args *pargs, Stream *st, - int cookie) -{ - float *data_for_measurement; - size_t data_size; - int check; - struct hdfile *hdfile; - struct image image; - int i; - char filename[1024]; - - /* Prefix to jump out of temporary folder */ - if ( pargs->filename[0] != '/' ) { - snprintf(filename, 1023, "../../%s", pargs->filename); - } else { - snprintf(filename, 1023, "%s", pargs->filename); - } - - image.features = NULL; - image.data = NULL; - image.flags = NULL; - image.copyme = iargs->copyme; - image.id = cookie; - image.filename = pargs->filename; /* Relative to top level */ - image.beam = iargs->beam; - image.det = iargs->det; - image.crystals = NULL; - image.n_crystals = 0; - - hdfile = hdfile_open(filename); /* Relative to temporary folder */ - if ( hdfile == NULL ) return; - - if ( iargs->element != NULL ) { - - int r; - r = hdfile_set_image(hdfile, iargs->element); - if ( r ) { - ERROR("Couldn't select path '%s'\n", iargs->element); - hdfile_close(hdfile); - return; - } - - } else { - - int r; - r = hdfile_set_first_image(hdfile, "/"); - if ( r ) { - ERROR("Couldn't select first path\n"); - hdfile_close(hdfile); - return; - } - - } - - check = hdf5_read(hdfile, &image, 1); - if ( check ) { - hdfile_close(hdfile); - return; - } - - if ( (image.width != image.det->max_fs + 1 ) - || (image.height != image.det->max_ss + 1)) - { - ERROR("Image size doesn't match geometry size" - " - rejecting image.\n"); - ERROR("Image size: %i,%i. Geometry size: %i,%i\n", - image.width, image.height, - image.det->max_fs + 1, image.det->max_ss + 1); - hdfile_close(hdfile); - return; - } - - fill_in_values(image.det, hdfile); - fill_in_beam_parameters(image.beam, hdfile); - - image.lambda = ph_en_to_lambda(eV_to_J(image.beam->photon_energy)); - - if ( (image.beam->photon_energy < 0.0) || (image.lambda > 1000) ) { - /* Error message covers a silly value in the beam file or in - * the HDF5 file. */ - ERROR("Nonsensical wavelength (%e m or %e eV) value for %s.\n", - image.lambda, image.beam->photon_energy, image.filename); - hdfile_close(hdfile); - return; - } - - if ( iargs->cmfilter ) filter_cm(&image); - - /* Take snapshot of image after CM subtraction but before - * the aggressive noise filter. */ - data_size = image.width * image.height * sizeof(float); - data_for_measurement = malloc(data_size); - - if ( iargs->noisefilter ) { - filter_noise(&image, data_for_measurement); - } else { - memcpy(data_for_measurement, image.data, data_size); - } - - switch ( iargs->peaks ) { - - case PEAK_HDF5: - // Get peaks from HDF5 - if (get_peaks(&image, hdfile, - iargs->hdf5_peak_path)) { - ERROR("Failed to get peaks from HDF5 file.\n"); - } - if ( !iargs->no_revalidate ) { - validate_peaks(&image, iargs->min_int_snr, - iargs->ir_inn, iargs->ir_mid, - iargs->ir_out, iargs->use_saturated); - } - break; - - case PEAK_ZAEF: - search_peaks(&image, iargs->threshold, - iargs->min_gradient, iargs->min_snr, - iargs->ir_inn, iargs->ir_mid, iargs->ir_out, - iargs->use_saturated); - break; - - } - - /* Get rid of noise-filtered version at this point - * - it was strictly for the purposes of peak detection. */ - free(image.data); - image.data = data_for_measurement; - - /* Index the pattern */ - index_pattern(&image, iargs->indm, iargs->ipriv); - - pargs->n_crystals = image.n_crystals; - - /* Default beam parameters */ - image.div = image.beam->divergence; - image.bw = image.beam->bandwidth; - - /* Integrate each crystal's diffraction spots */ - for ( i=0; iprofile_radius); - - if ( iargs->integrate_found ) { - reflections = select_intersections(&image, - image.crystals[i]); - } else { - reflections = find_intersections(&image, - image.crystals[i]); - } - - crystal_set_reflections(image.crystals[i], reflections); - - } - - /* Integrate all the crystals at once - need all the crystals so that - * overlaps can be detected. */ - integrate_reflections(&image, iargs->closer, - iargs->bgsub, - iargs->min_int_snr, - iargs->ir_inn, - iargs->ir_mid, - iargs->ir_out, - iargs->integrate_saturated, - iargs->res_cutoff); - - write_chunk(st, &image, hdfile, - iargs->stream_peaks, iargs->stream_refls); - - for ( i=0; i