diff options
-rw-r--r-- | libcrystfel/src/peaks.h | 32 | ||||
-rw-r--r-- | src/gui_project.c | 4 | ||||
-rw-r--r-- | src/gui_project.h | 21 | ||||
-rw-r--r-- | src/indexamajig.c | 150 | ||||
-rw-r--r-- | src/process_image.c | 74 | ||||
-rw-r--r-- | src/process_image.h | 24 |
6 files changed, 150 insertions, 155 deletions
diff --git a/libcrystfel/src/peaks.h b/libcrystfel/src/peaks.h index d6d5c1f9..89634269 100644 --- a/libcrystfel/src/peaks.h +++ b/libcrystfel/src/peaks.h @@ -58,6 +58,38 @@ enum peak_search_method { PEAK_ERROR }; + +struct peak_params { + + enum peak_search_method method; + + float threshold; /* zaef, pf8 */ + float min_sq_gradient; /* zaef */ + float min_snr; /* zaef, pf8 */ + int min_pix_count; /* pf8 */ + int max_pix_count; /* pf8 */ + int local_bg_radius; /* pf8 */ + int min_res; /* pf8 */ + int max_res; /* pf8 */ + int peakfinder8_fast; /* pf8 */ + + float min_snr_biggest_pix; /* pf9 */ + float min_snr_peak_pix; /* pf9 */ + float min_sig; /* pf9 */ + float min_peak_over_neighbour; /* pf9 */ + + float pk_inn; + float pk_mid; + float pk_out; + int half_pixel_shift; /* cxi, hdf5 */ + int revalidate; + int noisefilter; + int median_filter; + int check_hdf5_snr; + int use_saturated; +}; + + extern const char *str_peaksearch(enum peak_search_method meth); extern enum peak_search_method parse_peaksearch(const char *arg); diff --git a/src/gui_project.c b/src/gui_project.c index 11f27059..32d6473c 100644 --- a/src/gui_project.c +++ b/src/gui_project.c @@ -1259,6 +1259,10 @@ int default_project(struct crystfelproject *proj) proj->peak_search_params.pk_out = 7.0; proj->peak_search_params.half_pixel_shift = 1; proj->peak_search_params.revalidate = 1; + proj->peak_search_params.noisefilter = 0; + proj->peak_search_params.median_filter = 0; + proj->peak_search_params.check_hdf5_snr = 0; + proj->peak_search_params.use_saturated = 1; proj->indexing_params.cell_file = NULL; proj->indexing_params.indexing_methods = NULL; diff --git a/src/gui_project.h b/src/gui_project.h index bbecd0ba..318f9453 100644 --- a/src/gui_project.h +++ b/src/gui_project.h @@ -46,27 +46,6 @@ enum match_type_id MATCH_CBFGZ, }; -struct peak_params { - enum peak_search_method method; - float threshold; /* zaef, pf8 */ - float min_sq_gradient; /* zaef */ - float min_snr; /* zaef, pf8 */ - int min_pix_count; /* pf8 */ - int max_pix_count; /* pf8 */ - int local_bg_radius; /* pf8 */ - int min_res; /* pf8 */ - int max_res; /* pf8 */ - float min_snr_biggest_pix; /* pf9 */ - float min_snr_peak_pix; /* pf9 */ - float min_sig; /* pf9 */ - float min_peak_over_neighbour; /* pf9 */ - float pk_inn; - float pk_mid; - float pk_out; - int half_pixel_shift; /* cxi, hdf5 */ - int revalidate; -}; - struct index_params { /* Indexing */ diff --git a/src/indexamajig.c b/src/indexamajig.c index fa153bf5..bd89db32 100644 --- a/src/indexamajig.c +++ b/src/indexamajig.c @@ -206,27 +206,29 @@ static void write_harvest_file(struct index_args *args, fprintf(fh, " },\n"); fprintf(fh, " \"peaksearch\": {\n"); - write_str(fh, 1, "method", str_peaksearch(args->peaks)); - write_json_radii(fh, "radii", args->pk_inn, args->pk_mid, args->pk_out); - write_bool(fh, 1, "noise_filter", args->noisefilter); - write_int(fh, 1, "median_filter", args->median_filter); - write_float(fh, 1, "threshold_adu", args->threshold); - write_float(fh, 1, "min_squared_gradient_adu2", args->min_sq_gradient); - write_float(fh, 1, "min_snr", args->min_snr); - write_bool(fh, 1, "check_hdf5_snr", args->check_hdf5_snr); - write_bool(fh, 1, "peakfinder8_fast", args->peakfinder8_fast); - write_bool(fh, 1, "half_pixel_shift", args->half_pixel_shift); - write_int(fh, 1, "min_res_px", args->min_res); - write_int(fh, 1, "max_res_px", args->max_res); - write_int(fh, 1, "min_pixel_count", args->min_pix_count); - write_int(fh, 1, "max_pixel_count", args->max_pix_count); - write_int(fh, 1, "local_bg_radius_px", args->local_bg_radius); - write_bool(fh, 1, "use_saturated", args->use_saturated); - write_bool(fh, 1, "revalidate_hdf5", 1-args->no_revalidate); - write_float(fh, 1, "min_snr_of_biggest_pixel", args->min_snr_biggest_pix); - write_float(fh, 1, "min_snr_of_peak_pixel", args->min_snr_peak_pix); - write_float(fh, 1, "min_sig_adu", args->min_sig); - write_float(fh, 0, "min_peak_over_neighbour_adu", args->min_peak_over_neighbour); + write_str(fh, 1, "method", str_peaksearch(args->peak_search.method)); + write_json_radii(fh, "radii", args->peak_search.pk_inn, + args->peak_search.pk_mid, + args->peak_search.pk_out); + write_bool(fh, 1, "noise_filter", args->peak_search.noisefilter); + write_int(fh, 1, "median_filter", args->peak_search.median_filter); + write_float(fh, 1, "threshold_adu", args->peak_search.threshold); + write_float(fh, 1, "min_squared_gradient_adu2", args->peak_search.min_sq_gradient); + write_float(fh, 1, "min_snr", args->peak_search.min_snr); + write_bool(fh, 1, "check_hdf5_snr", args->peak_search.check_hdf5_snr); + write_bool(fh, 1, "peakfinder8_fast", args->peak_search.peakfinder8_fast); + write_bool(fh, 1, "half_pixel_shift", args->peak_search.half_pixel_shift); + write_int(fh, 1, "min_res_px", args->peak_search.min_res); + write_int(fh, 1, "max_res_px", args->peak_search.max_res); + write_int(fh, 1, "min_pixel_count", args->peak_search.min_pix_count); + write_int(fh, 1, "max_pixel_count", args->peak_search.max_pix_count); + write_int(fh, 1, "local_bg_radius_px", args->peak_search.local_bg_radius); + write_bool(fh, 1, "use_saturated", args->peak_search.use_saturated); + write_bool(fh, 1, "revalidate_hdf5", args->peak_search.revalidate); + write_float(fh, 1, "min_snr_of_biggest_pixel", args->peak_search.min_snr_biggest_pix); + write_float(fh, 1, "min_snr_of_peak_pixel", args->peak_search.min_snr_peak_pix); + write_float(fh, 1, "min_sig_adu", args->peak_search.min_sig); + write_float(fh, 0, "min_peak_over_neighbour_adu", args->peak_search.min_peak_over_neighbour); fprintf(fh, " },\n"); fprintf(fh, " \"hitfinding\": {\n"); @@ -453,21 +455,21 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) /* ---------- Peak search ---------- */ case 't' : - args->iargs.threshold = strtof(arg, NULL); + args->iargs.peak_search.threshold = strtof(arg, NULL); break; case 301 : - args->iargs.peaks = parse_peaksearch(arg); - if ( args->iargs.peaks == PEAK_ERROR ) { + args->iargs.peak_search.method = parse_peaksearch(arg); + if ( args->iargs.peak_search.method == PEAK_ERROR ) { ERROR("Unrecognised peak detection method '%s'\n", arg); return EINVAL; } break; case 302 : - r = sscanf(arg, "%f,%f,%f", &args->iargs.pk_inn, - &args->iargs.pk_mid, &args->iargs.pk_out); - if ( (r != 3) || (args->iargs.pk_inn < 0) ) { + r = sscanf(arg, "%f,%f,%f", &args->iargs.peak_search.pk_inn, + &args->iargs.peak_search.pk_mid, &args->iargs.peak_search.pk_out); + if ( (r != 3) || (args->iargs.peak_search.pk_inn < 0) ) { ERROR("Invalid parameters for '--peak-radius'\n"); return EINVAL; } @@ -487,7 +489,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 305 : - if (sscanf(arg, "%d", &args->iargs.median_filter) != 1) + if (sscanf(arg, "%d", &args->iargs.peak_search.median_filter) != 1) { ERROR("Invalid value for --median-filter\n"); return EINVAL; @@ -495,11 +497,11 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 306 : - args->iargs.noisefilter = 1; + args->iargs.peak_search.noisefilter = 1; break; case 307 : - if (sscanf(arg, "%f", &args->iargs.min_sq_gradient) != 1) + if (sscanf(arg, "%f", &args->iargs.peak_search.min_sq_gradient) != 1) { ERROR("Invalid value for --min-squared-gradient\n"); return EINVAL; @@ -507,7 +509,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 308 : - if (sscanf(arg, "%f", &args->iargs.min_snr) != 1) + if (sscanf(arg, "%f", &args->iargs.peak_search.min_snr) != 1) { ERROR("Invalid value for --min-snr\n"); return EINVAL; @@ -515,7 +517,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 309 : - if (sscanf(arg, "%d", &args->iargs.min_pix_count) != 1) + if (sscanf(arg, "%d", &args->iargs.peak_search.min_pix_count) != 1) { ERROR("Invalid value for --min-pix-count\n"); return EINVAL; @@ -523,7 +525,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 310 : - if (sscanf(arg, "%d", &args->iargs.max_pix_count) != 1) + if (sscanf(arg, "%d", &args->iargs.peak_search.max_pix_count) != 1) { ERROR("Invalid value for --max-pix-count\n"); return EINVAL; @@ -531,7 +533,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 311 : - if (sscanf(arg, "%d", &args->iargs.local_bg_radius) != 1) + if (sscanf(arg, "%d", &args->iargs.peak_search.local_bg_radius) != 1) { ERROR("Invalid value for --local-bg-radius\n"); return EINVAL; @@ -539,7 +541,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 312 : - if (sscanf(arg, "%d", &args->iargs.min_res) != 1) + if (sscanf(arg, "%d", &args->iargs.peak_search.min_res) != 1) { ERROR("Invalid value for --min-res\n"); return EINVAL; @@ -547,7 +549,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 313 : - if (sscanf(arg, "%d", &args->iargs.max_res) != 1) + if (sscanf(arg, "%d", &args->iargs.peak_search.max_res) != 1) { ERROR("Invalid value for --max-res\n"); return EINVAL; @@ -555,7 +557,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 314 : - if (sscanf(arg, "%f", &args->iargs.min_snr_biggest_pix) != 1) + if (sscanf(arg, "%f", &args->iargs.peak_search.min_snr_biggest_pix) != 1) { ERROR("Invalid value for --max-snr-biggest-pix\n"); return EINVAL; @@ -563,7 +565,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 315 : - if (sscanf(arg, "%f", &args->iargs.min_snr_peak_pix) != 1) + if (sscanf(arg, "%f", &args->iargs.peak_search.min_snr_peak_pix) != 1) { ERROR("Invalid value for --max-snr-peak-pix\n"); return EINVAL; @@ -571,7 +573,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 316 : - if (sscanf(arg, "%f", &args->iargs.min_sig) != 1) + if (sscanf(arg, "%f", &args->iargs.peak_search.min_sig) != 1) { ERROR("Invalid value for --max-ssig\n"); return EINVAL; @@ -579,7 +581,7 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 317 : - if (sscanf(arg, "%f", &args->iargs.min_peak_over_neighbour) != 1) + if (sscanf(arg, "%f", &args->iargs.peak_search.min_peak_over_neighbour) != 1) { ERROR("Invalid value for --max-peak-over-neighbour\n"); return EINVAL; @@ -587,23 +589,23 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state) break; case 318 : - args->iargs.use_saturated = 0; + args->iargs.peak_search.use_saturated = 0; break; case 319 : - args->iargs.no_revalidate = 1; + args->iargs.peak_search.revalidate = 0; break; case 320 : - args->iargs.half_pixel_shift = 0; + args->iargs.peak_search.half_pixel_shift = 0; break; case 321 : - args->iargs.check_hdf5_snr = 1; + args->iargs.peak_search.check_hdf5_snr = 1; break; case 322: - args->iargs.peakfinder8_fast = 1; + args->iargs.peak_search.peakfinder8_fast = 1; break; /* ---------- Indexing ---------- */ @@ -904,40 +906,40 @@ int main(int argc, char *argv[]) /* Defaults for process_image arguments */ args.iargs.cell = NULL; - args.iargs.noisefilter = 0; - args.iargs.median_filter = 0; + args.iargs.peak_search.noisefilter = 0; + args.iargs.peak_search.median_filter = 0; args.iargs.tols[0] = 0.05; /* frac (not %) */ args.iargs.tols[1] = 0.05; /* frac (not %) */ args.iargs.tols[2] = 0.05; /* frac (not %) */ args.iargs.tols[3] = deg2rad(1.5); /* radians */ args.iargs.tols[4] = deg2rad(1.5); /* radians */ args.iargs.tols[5] = deg2rad(1.5); /* radians */ - args.iargs.threshold = 800.0; - args.iargs.min_sq_gradient = 100000.0; - args.iargs.min_snr = 5.0; - args.iargs.min_pix_count = 2; - args.iargs.max_pix_count = 200; - args.iargs.min_res = 0; - args.iargs.max_res = 1200; - args.iargs.local_bg_radius = 3; - args.iargs.min_snr_biggest_pix = 7.0; /* peak finder 9 */ - args.iargs.min_snr_peak_pix = 6.0; - args.iargs.min_sig = 11.0; - args.iargs.min_peak_over_neighbour = -INFINITY; - args.iargs.check_hdf5_snr = 0; - args.iargs.peakfinder8_fast = 0; + args.iargs.peak_search.threshold = 800.0; + args.iargs.peak_search.min_sq_gradient = 100000.0; + args.iargs.peak_search.min_snr = 5.0; + args.iargs.peak_search.min_pix_count = 2; + args.iargs.peak_search.max_pix_count = 200; + args.iargs.peak_search.min_res = 0; + args.iargs.peak_search.max_res = 1200; + args.iargs.peak_search.local_bg_radius = 3; + args.iargs.peak_search.min_snr_biggest_pix = 7.0; /* peak finder 9 */ + args.iargs.peak_search.min_snr_peak_pix = 6.0; + args.iargs.peak_search.min_sig = 11.0; + args.iargs.peak_search.min_peak_over_neighbour = -INFINITY; + args.iargs.peak_search.check_hdf5_snr = 0; + args.iargs.peak_search.peakfinder8_fast = 0; args.iargs.pf_private = NULL; args.iargs.dtempl = NULL; - args.iargs.peaks = PEAK_ZAEF; - args.iargs.half_pixel_shift = 1; - args.iargs.pk_inn = -1.0; - args.iargs.pk_mid = -1.0; - args.iargs.pk_out = -1.0; + args.iargs.peak_search.method = PEAK_ZAEF; + args.iargs.peak_search.half_pixel_shift = 1; + args.iargs.peak_search.pk_inn = -1.0; + args.iargs.peak_search.pk_mid = -1.0; + args.iargs.peak_search.pk_out = -1.0; args.iargs.ir_inn = -1.0; args.iargs.ir_mid = -1.0; args.iargs.ir_out = -1.0; - args.iargs.use_saturated = 1; - args.iargs.no_revalidate = 0; + args.iargs.peak_search.use_saturated = 1; + args.iargs.peak_search.revalidate = 1; args.iargs.stream_flags = STREAM_PEAKS | STREAM_REFLECTIONS; args.iargs.stream_nonhits = 1; args.iargs.int_diag = INTDIAG_NONE; @@ -1214,10 +1216,10 @@ int main(int argc, char *argv[]) } /* If no peak radii were given, copy the integration radii */ - if ( args.iargs.pk_inn < 0.0 ) { - args.iargs.pk_inn = args.iargs.ir_inn; - args.iargs.pk_mid = args.iargs.ir_mid; - args.iargs.pk_out = args.iargs.ir_out; + if ( args.iargs.peak_search.pk_inn < 0.0 ) { + args.iargs.peak_search.pk_inn = args.iargs.ir_inn; + args.iargs.peak_search.pk_mid = args.iargs.ir_mid; + args.iargs.peak_search.pk_out = args.iargs.ir_out; } /* Load unit cell (if given) */ @@ -1392,9 +1394,9 @@ int main(int argc, char *argv[]) struct pf8_private_data *pf8_data = NULL; struct detgeom *detgeom = NULL; - if ( args.iargs.peaks == PEAK_PEAKFINDER8 ) { + if ( args.iargs.peak_search.method == PEAK_PEAKFINDER8 ) { detgeom = data_template_get_2d_detgeom_if_possible(args.iargs.dtempl); - pf8_data = prepare_peakfinder8(detgeom, args.iargs.peakfinder8_fast); + pf8_data = prepare_peakfinder8(detgeom, args.iargs.peak_search.peakfinder8_fast); args.iargs.pf_private = pf8_data; } diff --git a/src/process_image.c b/src/process_image.c index d8ccca93..5bc527a1 100644 --- a/src/process_image.c +++ b/src/process_image.c @@ -257,7 +257,7 @@ void process_image(const struct index_args *iargs, struct pattern_args *pargs, profile_start("image-filter"); sb_shared->pings[cookie]++; - if ( (iargs->median_filter > 0) || iargs->noisefilter ) { + if ( (iargs->peak_search.median_filter > 0) || iargs->peak_search.noisefilter ) { profile_start("data-backup"); prefilter = backup_image_data(image->dp, image->detgeom); profile_end("data-backup"); @@ -265,14 +265,14 @@ void process_image(const struct index_args *iargs, struct pattern_args *pargs, prefilter = NULL; } - if ( iargs->median_filter > 0 ) { + if ( iargs->peak_search.median_filter > 0 ) { profile_start("median-filter"); - filter_median(image, iargs->median_filter); + filter_median(image, iargs->peak_search.median_filter); profile_end("median-filter"); } - if ( iargs->noisefilter ) { - profile_start("noise-filter"); + if ( iargs->peak_search.noisefilter ) { + profile_start("median-filter"); filter_noise(image); profile_end("noise-filter"); } @@ -284,7 +284,7 @@ void process_image(const struct index_args *iargs, struct pattern_args *pargs, sb_shared->pings[cookie]++; profile_start("peak-search"); - switch ( iargs->peaks ) { + switch ( iargs->peak_search.method ) { case PEAK_HDF5: case PEAK_CXI: @@ -292,38 +292,38 @@ void process_image(const struct index_args *iargs, struct pattern_args *pargs, image->features = image_read_peaks(iargs->dtempl, pargs->filename, pargs->event, - iargs->half_pixel_shift); + iargs->peak_search.half_pixel_shift); if ( image->features == NULL ) { ERROR("Failed to get peaks from HDF5 file.\n"); } - if ( !iargs->no_revalidate ) { - validate_peaks(image, iargs->min_snr, - iargs->pk_inn, iargs->pk_mid, - iargs->pk_out, iargs->use_saturated, - iargs->check_hdf5_snr); + if ( iargs->peak_search.revalidate ) { + validate_peaks(image, iargs->peak_search.min_snr, + iargs->peak_search.pk_inn, iargs->peak_search.pk_mid, + iargs->peak_search.pk_out, iargs->peak_search.use_saturated, + iargs->peak_search.check_hdf5_snr); } break; case PEAK_ZAEF: set_last_task(last_task, "peaksearch:zaef"); - search_peaks(image, iargs->threshold, - iargs->min_sq_gradient, iargs->min_snr, - iargs->pk_inn, iargs->pk_mid, iargs->pk_out, - iargs->use_saturated); + search_peaks(image, iargs->peak_search.threshold, + iargs->peak_search.min_sq_gradient, iargs->peak_search.min_snr, + iargs->peak_search.pk_inn, iargs->peak_search.pk_mid, iargs->peak_search.pk_out, + iargs->peak_search.use_saturated); break; case PEAK_PEAKFINDER8: set_last_task(last_task, "peaksearch:pf8"); if ( search_peaks_peakfinder8(image, 2048, - iargs->threshold, - iargs->min_snr, - iargs->min_pix_count, - iargs->max_pix_count, - iargs->local_bg_radius, - iargs->min_res, - iargs->max_res, - iargs->use_saturated, - iargs->peakfinder8_fast, + iargs->peak_search.threshold, + iargs->peak_search.min_snr, + iargs->peak_search.min_pix_count, + iargs->peak_search.max_pix_count, + iargs->peak_search.local_bg_radius, + iargs->peak_search.min_res, + iargs->peak_search.max_res, + iargs->peak_search.use_saturated, + iargs->peak_search.peakfinder8_fast, iargs->pf_private) ) { ERROR("Failed to find peaks in image %s" "(event %s).\n", @@ -334,12 +334,12 @@ void process_image(const struct index_args *iargs, struct pattern_args *pargs, case PEAK_PEAKFINDER9: set_last_task(last_task, "peaksearch:pf9"); if ( search_peaks_peakfinder9(image, - iargs->min_snr_biggest_pix, - iargs->min_snr_peak_pix, - iargs->min_snr, - iargs->min_sig, - iargs->min_peak_over_neighbour, - iargs->local_bg_radius) ) + iargs->peak_search.min_snr_biggest_pix, + iargs->peak_search.min_snr_peak_pix, + iargs->peak_search.min_snr, + iargs->peak_search.min_sig, + iargs->peak_search.min_peak_over_neighbour, + iargs->peak_search.local_bg_radius) ) { ERROR("Failed to find peaks in image %s" "(event %s).\n", @@ -351,12 +351,12 @@ void process_image(const struct index_args *iargs, struct pattern_args *pargs, image->features = image_msgpack_read_peaks(iargs->dtempl, pargs->zmq_data, pargs->zmq_data_size, - iargs->half_pixel_shift); - if ( !iargs->no_revalidate ) { - validate_peaks(image, iargs->min_snr, - iargs->pk_inn, iargs->pk_mid, - iargs->pk_out, iargs->use_saturated, - iargs->check_hdf5_snr); + iargs->peak_search.half_pixel_shift); + if ( iargs->peak_search.revalidate ) { + validate_peaks(image, iargs->peak_search.min_snr, + iargs->peak_search.pk_inn, iargs->peak_search.pk_mid, + iargs->peak_search.pk_out, iargs->peak_search.use_saturated, + iargs->peak_search.check_hdf5_snr); } break; diff --git a/src/process_image.h b/src/process_image.h index feb3f81c..bb68ce19 100644 --- a/src/process_image.h +++ b/src/process_image.h @@ -59,29 +59,7 @@ struct index_args DataSourceType data_format; /* Peak search */ - enum peak_search_method peaks; - float pk_inn; - float pk_mid; - float pk_out; - int noisefilter; - int median_filter; - float threshold; - float min_sq_gradient; - float min_snr; - int check_hdf5_snr; - int half_pixel_shift; - int min_res; - int max_res; - int min_pix_count; - int max_pix_count; - int local_bg_radius; - int use_saturated; - int no_revalidate; - float min_snr_biggest_pix; - float min_snr_peak_pix; - float min_sig; - float min_peak_over_neighbour; - int peakfinder8_fast; + struct peak_params peak_search; void *pf_private; /* Hit finding */ |