aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2020-07-02 17:17:25 +0200
committerThomas White <taw@physics.org>2020-07-29 18:53:44 +0200
commit3218df045b998c594f36d60348315e31d1693c84 (patch)
tree13991ff7ea5bbc5575d21fd6592c5c831054b45e
parent6d5c80f94fdf613e37559861800600c1bffd5449 (diff)
Fix peak list loading from stream
I don't think this functionality has ever actually been used. It was completely broken.
-rw-r--r--libcrystfel/src/stream.c36
1 files changed, 26 insertions, 10 deletions
diff --git a/libcrystfel/src/stream.c b/libcrystfel/src/stream.c
index 5923af9c..8dfa343d 100644
--- a/libcrystfel/src/stream.c
+++ b/libcrystfel/src/stream.c
@@ -107,17 +107,25 @@ static ImageFeatureList *read_peaks(Stream *st,
char line[1024];
float x, y, d, intensity;
int r, exp_n;
- char *panel_name = NULL;
+ char panel_name[1024];
rval = fgets(line, 1023, st->fh);
st->ln++;
- if ( rval == NULL ) continue;
+ if ( rval == NULL ) {
+ image_feature_list_free(features);
+ return NULL;
+ }
chomp(line);
if ( strcmp(line, STREAM_PEAK_LIST_END_MARKER) == 0 ) {
return features;
}
+ if ( first ) {
+ first = 0;
+ continue;
+ }
+
if ( AT_LEAST_VERSION(st, 2, 3) ) {
r = sscanf(line, "%f %f %f %f %s",
&x, &y, &d, &intensity, panel_name);
@@ -127,19 +135,22 @@ static ImageFeatureList *read_peaks(Stream *st,
&x, &y, &d, &intensity);
exp_n = 4;
}
- if ( (r != exp_n) && (!first) ) {
+
+ if ( r != exp_n ) {
ERROR("Failed to parse peak list line.\n");
ERROR("The failed line was: '%s'\n", line);
image_feature_list_free(features);
return NULL;
}
- first = 0;
- if ( (panel_name != NULL) && (dtempl != NULL) ) {
+ if ( (panel_name[0] != '\0') && (dtempl != NULL) ) {
int pn;
- if ( data_template_panel_name_to_number(dtempl, panel_name, &pn) ) {
+ if ( data_template_panel_name_to_number(dtempl,
+ panel_name,
+ &pn) )
+ {
ERROR("No such panel '%s'\n",
panel_name);
} else {
@@ -167,9 +178,7 @@ static ImageFeatureList *read_peaks(Stream *st,
} while ( rval != NULL );
- /* Got read error of some kind before finding STREAM_PEAK_LIST_END_MARKER */
- image_feature_list_free(features);
- return NULL;
+ return features;
}
@@ -979,11 +988,18 @@ struct image *stream_read_chunk(Stream *st, const DataTemplate *dtempl,
if ( (srf & STREAM_PEAKS)
&& strcmp(line, STREAM_PEAK_LIST_START_MARKER) == 0 ) {
- if ( read_peaks(st, dtempl, image) ) {
+ ImageFeatureList *peaks;
+ peaks = read_peaks(st, dtempl, image);
+
+ if ( peaks == NULL ) {
ERROR("Failed while reading peaks\n");
image_free(image);
return NULL;
}
+
+ image->features = peaks;
+
+
}
if ( (srf & STREAM_CRYSTALS)