aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/beam-parameters.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel/src/beam-parameters.c')
-rw-r--r--libcrystfel/src/beam-parameters.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/libcrystfel/src/beam-parameters.c b/libcrystfel/src/beam-parameters.c
index 4af25261..617f9061 100644
--- a/libcrystfel/src/beam-parameters.c
+++ b/libcrystfel/src/beam-parameters.c
@@ -8,6 +8,7 @@
*
* Authors:
* 2010,2012 Thomas White <taw@physics.org>
+ * 2012 Chunhong Yoon
*
* This file is part of CrystFEL.
*
@@ -35,6 +36,7 @@
#include "beam-parameters.h"
#include "utils.h"
+#include "hdf5-file.h"
struct beam_params *get_beam_parameters(const char *filename)
@@ -86,7 +88,12 @@ struct beam_params *get_beam_parameters(const char *filename)
} else if ( strcmp(bits[0], "beam/radius") == 0 ) {
b->beam_radius = atof(bits[2]);
} else if ( strcmp(bits[0], "beam/photon_energy") == 0 ) {
- b->photon_energy = atof(bits[2]);
+ if ( strncmp(bits[2], "/", 1) == 0 ) {
+ b->photon_energy = 0; // 0 means special case
+ b->photon_energy_from = strdup(bits[2]);
+ } else {
+ b->photon_energy = atof(bits[2]);
+ }
} else if ( strcmp(bits[0], "beam/bandwidth") == 0 ) {
b->bandwidth = atof(bits[2]);
} else if ( strcmp(bits[0], "beam/divergence") == 0 ) {
@@ -113,7 +120,7 @@ struct beam_params *get_beam_parameters(const char *filename)
ERROR("Invalid or unspecified value for 'beam/radius'.\n");
reject = 1;
}
- if ( b->photon_energy < 0.0 ) {
+ if ( b->photon_energy < 0.0 ) { // 0 is ok
ERROR("Invalid or unspecified value for"
" 'beam/photon_energy'.\n");
reject = 1;
@@ -141,3 +148,18 @@ struct beam_params *get_beam_parameters(const char *filename)
return b;
}
+
+
+void free_beam_parameters(struct beam_params *beam)
+{
+ free(beam->photon_energy_from);
+ free(beam);
+}
+
+
+void fill_in_beam_parameters(struct beam_params *beam, struct hdfile *f)
+{
+ if ( beam->photon_energy_from != NULL ) {
+ beam->photon_energy = get_value(f, beam->photon_energy_from);
+ }
+}