From 0e764604b51609f50801108c8789ced0d310000e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 20 Dec 2022 14:40:43 +0100 Subject: CrystFELFoMGraph: Adjust y-axis for FoMs that don't have a sensible range --- src/crystfelfomgraph.c | 66 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/crystfelfomgraph.c b/src/crystfelfomgraph.c index 62a8075f..a80b3012 100644 --- a/src/crystfelfomgraph.c +++ b/src/crystfelfomgraph.c @@ -99,25 +99,51 @@ static void fom_colour(enum fom_type t, double *col) } -static void fom_range(enum fom_type t, double *min, double *max) +static void fom_range(enum fom_type t, double *vals, int n_shells, + double *min, double *max) { + double cmin, cmax; + switch ( t ) { - case FOM_R1I: *min = 0.0; *max = 0.8; break; - case FOM_R1F: *min = 0.0; *max = 0.8; break; - case FOM_R2: *min = 0.0; *max = 0.8; break; - case FOM_RSPLIT: *min = 0.0; *max = 0.8; break; - case FOM_CC: *min = 0.9; *max = 1.0; break; - case FOM_CCSTAR: *min = 0.9; *max = 1.0; break; - case FOM_CCANO: *min = 0.9; *max = 1.0; break; - case FOM_CRDANO: *min = 0.9; *max = 1.0; break; - case FOM_RANO: *min = 0.0; *max = 0.7; break; - case FOM_RANORSPLIT: *min = 0.0; *max = 8.0; break; - case FOM_D1SIG: *min = 0.0; *max = 1.0; break; - case FOM_D2SIG: *min = 0.0; *max = 1.0; break; - case FOM_REDUNDANCY: *min = 0.0; *max = 100; break; - case FOM_SNR: *min = 0.0; *max = 10.0; break; - case FOM_COMPLETENESS: *min = 0.0; *max = 1.0; break; - default: *min = 0.0; *max = 1.0; break; + case FOM_R1I: cmin = 0.0; cmax = 0.8; break; + case FOM_R1F: cmin = 0.0; cmax = 0.8; break; + case FOM_R2: cmin = 0.0; cmax = 0.8; break; + case FOM_RSPLIT: cmin = 0.0; cmax = 0.8; break; + case FOM_CC: cmin = 0.9; cmax = 1.0; break; + case FOM_CCSTAR: cmin = 0.9; cmax = 1.0; break; + case FOM_CCANO: cmin = 0.9; cmax = 1.0; break; + case FOM_CRDANO: cmin = 0.5; cmax = 1.0; break; + case FOM_RANO: cmin = 0.0; cmax = 0.8; break; + case FOM_RANORSPLIT: cmin = NAN; cmax = NAN; break; + case FOM_D1SIG: cmin = 0.0; cmax = 1.0; break; + case FOM_D2SIG: cmin = 0.0; cmax = 1.0; break; + case FOM_REDUNDANCY: cmin = 0.0; cmax = NAN; break; + case FOM_SNR: cmin = 0.0; cmax = NAN; break; + case FOM_COMPLETENESS: cmin = 0.0; cmax = 1.0; break; + default: cmin = 0.0; cmax = 1.0; break; + } + + if ( isnan(cmin) || isnan(cmax) ) { + int i; + double vmin = INFINITY; + double vmax = -INFINITY; + for ( i=0; i vmax ) vmax = vals[i]; + } + if ( isnan(cmin) ) { + *min = vmin; + } else { + *min = cmin; + } + if ( isnan(cmax) ) { + *max = vmax; + } else { + *max = cmax; + } + } else { + *min = cmin; + *max = cmax; } } @@ -248,7 +274,8 @@ static gint draw_sig(GtkWidget *window, cairo_t *cr, CrystFELFoMGraph *fg) double col[3]; double y1, y2; fom_colour(fg->fom_types[j], col); - fom_range(fg->fom_types[j], &y1, &y2); + fom_range(fg->fom_types[j], fg->fom_values[j], fg->n_shells, + &y1, &y2); cairo_set_source_rgb(cr, col[0], col[1], col[2]); draw_y_axis(cr, h, axsp, y1, y2, fom_name(fg->fom_types[j])); ox += yaxsp; @@ -274,7 +301,8 @@ static gint draw_sig(GtkWidget *window, cairo_t *cr, CrystFELFoMGraph *fg) double col[3]; double y1, y2; int split = 1; - fom_range(fg->fom_types[j], &y1, &y2); + fom_range(fg->fom_types[j], fg->fom_values[j], fg->n_shells, + &y1, &y2); for ( i=0; in_shells; i++ ) { double fv = fg->fom_values[j][i]; if ( !isnan(fv) ) { -- cgit v1.2.3