aboutsummaryrefslogtreecommitdiff
path: root/src/indexamajig.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-05-03 11:43:00 +0200
committerThomas White <taw@physics.org>2023-05-05 10:59:45 +0200
commit309b65d75993abbc9804b392117baea3a1101e3a (patch)
tree361ca8f1cc935d621e0d3f1a16c6426525490b24 /src/indexamajig.c
parent5c1373e53709bd59403716b497c8c6c94b9143c4 (diff)
Move peak search parameters into separate structure
This change takes the peak parameters structure from gui_project.h, moves it to libcrystfel/peaks.h and uses it everywhere. It should slightly reduce the hassle involved with adding a new parameter. Four parameters (noisefilter, median_filter, check_hdf5_snr, use_saturated) were previously not part of the GUI project structure. Now they are, via the new structure. However, they are not yet exposed via the GUI and just take their default values.
Diffstat (limited to 'src/indexamajig.c')
-rw-r--r--src/indexamajig.c150
1 files changed, 76 insertions, 74 deletions
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;
}