aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/datatemplate.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel/src/datatemplate.c')
-rw-r--r--libcrystfel/src/datatemplate.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/libcrystfel/src/datatemplate.c b/libcrystfel/src/datatemplate.c
index 76a61893..18b09c12 100644
--- a/libcrystfel/src/datatemplate.c
+++ b/libcrystfel/src/datatemplate.c
@@ -466,6 +466,25 @@ int set_dim(struct panel_template *panel, int dimension,
}
+static int add_flag_value(struct panel_template *p,
+ float val,
+ enum flag_value_type type)
+{
+ int i;
+
+ for ( i=0; i<MAX_FLAG_VALUES; i++ ) {
+ if ( p->flag_types[i] == FLAG_NOTHING ) {
+ p->flag_types[i] = type;
+ p->flag_values[i] = val;
+ return 0;
+ }
+ }
+
+ ERROR("Too many flag values.\n");
+ return 1;
+}
+
+
static int parse_field_for_panel(struct panel_template *panel, const char *key,
const char *val, DataTemplate *det)
{
@@ -531,6 +550,20 @@ static int parse_field_for_panel(struct panel_template *panel, const char *key,
panel->pixel_pitch = 1.0/atof(val);
} else if ( strcmp(key, "max_adu") == 0 ) {
panel->max_adu = atof(val);
+
+ } else if ( strcmp(key, "flag_equal") == 0 ) {
+ if ( add_flag_value(panel, atof(val), FLAG_EQUAL) ) {
+ reject = -1;
+ }
+ } else if ( strcmp(key, "flag_lessthan") == 0 ) {
+ if ( add_flag_value(panel, atof(val), FLAG_LESSTHAN) ) {
+ reject = -1;
+ }
+ } else if ( strcmp(key, "flag_morethan") == 0 ) {
+ if ( add_flag_value(panel, atof(val), FLAG_MORETHAN) ) {
+ reject = -1;
+ }
+
} else if ( strcmp(key, "badrow_direction") == 0 ) {
ERROR("WARNING 'badrow_direction' is ignored in this version.\n");
} else if ( strcmp(key, "no_index") == 0 ) {
@@ -915,6 +948,8 @@ DataTemplate *data_template_new_from_string(const char *string_in)
defaults.clen_for_centering = NAN;
defaults.adu_scale = NAN;
defaults.adu_scale_unit = ADU_PER_PHOTON;
+ for ( i=0; i<MAX_FLAG_VALUES; i++ ) defaults.flag_values[i] = 0;
+ for ( i=0; i<MAX_FLAG_VALUES; i++ ) defaults.flag_types[i] = FLAG_NOTHING;
defaults.max_adu = +INFINITY;
defaults.mask = NULL;
defaults.mask_file = NULL;