aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui_project.c4
-rw-r--r--src/gui_project.h21
-rw-r--r--src/indexamajig.c150
-rw-r--r--src/process_image.c74
-rw-r--r--src/process_image.h24
5 files changed, 118 insertions, 155 deletions
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 */