Commit c253b180 authored by Thomas White's avatar Thomas White
Browse files

Macros for status and error messages

parent ef92cb3e
......@@ -76,13 +76,6 @@ static void cell_update_crystallographic(UnitCell *cell)
cell->cx, cell->cy, cell->cz);
cell->gamma = angle_between(cell->ax, cell->ay, cell->az,
cell->bx, cell->by, cell->bz);
printf("a=%f nm\n", cell->a/1e9);
printf("b=%f nm\n", cell->b/1e9);
printf("c=%f nm\n", cell->c/1e9);
printf("alpha = %f deg\n", rad2deg(cell->alpha));
printf(" beta = %f deg\n", rad2deg(cell->beta));
printf("gamma = %f deg\n", rad2deg(cell->gamma));
}
......
......@@ -155,7 +155,7 @@ void record_image(struct image *image)
total_energy = FLUENCE * image->xray_energy;
energy_density = total_energy / area;
ph_per_e = (FLUENCE/area) * pow(THOMSON_LENGTH, 2.0);
printf("Fluence = %8.2e photons, "
STATUS("Fluence = %8.2e photons, "
"Energy density = %5.3f kJ/cm^2, "
"Total energy = %5.3f microJ\n",
FLUENCE, energy_density/1e7, total_energy*1e6);
......
......@@ -94,7 +94,7 @@ void get_ewald(struct image *image)
if ( (x==0) && (y==(int)image->y_centre) ) {
double s;
s = 1.0e-9*modulus(qx, qy, qz)/2.0;
printf("At left edge: 2theta = %5.3f deg,"
STATUS("At left edge: 2theta = %5.3f deg,"
" sin(theta)/lambda = %5.3f nm^-1,"
" d = %5.3f nm\n",
rad2deg(twotheta), s, 1.0/(2.0*s));
......@@ -102,7 +102,7 @@ void get_ewald(struct image *image)
if ( (x==0) && (y==0) ) {
double s;
s = 1.0e-9*modulus(qx, qy, qz)/2.0;
printf(" At corner: 2theta = %5.3f deg,"
STATUS(" At corner: 2theta = %5.3f deg,"
" sin(theta)/lambda = %5.3f nm^-1,"
" d = %5.3f nm\n",
rad2deg(twotheta), s, 1.0/(2.0*s));
......
......@@ -33,13 +33,13 @@ int hdf5_write(const char *filename, const uint16_t *data,
fh = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
if ( fh < 0 ) {
fprintf(stderr, "Couldn't create file: %s\n", filename);
ERROR("Couldn't create file: %s\n", filename);
return 1;
}
gh = H5Gcreate(fh, "data", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if ( gh < 0 ) {
fprintf(stderr, "Couldn't create group\n");
ERROR("Couldn't create group\n");
H5Fclose(fh);
return 1;
}
......@@ -53,18 +53,18 @@ int hdf5_write(const char *filename, const uint16_t *data,
dh = H5Dcreate(gh, "data", H5T_NATIVE_UINT16, sh,
H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if ( dh < 0 ) {
fprintf(stderr, "Couldn't create dataset\n");
ERROR("Couldn't create dataset\n");
H5Fclose(fh);
return 1;
}
/* Muppet check */
H5Sget_simple_extent_dims(sh, size, max_size);
r = H5Dwrite(dh, H5T_NATIVE_UINT16, H5S_ALL,
H5S_ALL, H5P_DEFAULT, data);
if ( r < 0 ) {
fprintf(stderr, "Couldn't write data\n");
ERROR("Couldn't write data\n");
H5Dclose(dh);
H5Fclose(fh);
return 1;
......@@ -89,20 +89,20 @@ int hdf5_read(struct image *image, const char *filename)
fh = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
if ( fh < 0 ) {
/* TODO: Try other formats here. */
fprintf(stderr, "Couldn't open file: %s\n", filename);
ERROR("Couldn't open file: %s\n", filename);
return 1;
}
dh = H5Dopen(fh, "/data/data", H5P_DEFAULT);
if ( dh < 0 ) {
fprintf(stderr, "Couldn't open dataset\n");
ERROR("Couldn't open dataset\n");
H5Fclose(fh);
return 1;
}
sh = H5Dget_space(dh);
if ( H5Sget_simple_extent_ndims(sh) != 2 ) {
fprintf(stderr, "Dataset is not two-dimensional\n");
ERROR("Dataset is not two-dimensional\n");
H5Fclose(fh);
return 1;
}
......@@ -113,7 +113,7 @@ int hdf5_read(struct image *image, const char *filename)
r = H5Dread(dh, H5T_NATIVE_UINT16, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
if ( r < 0 ) {
fprintf(stderr, "Couldn't read data\n");
ERROR("Couldn't read data\n");
H5Dclose(dh);
H5Fclose(fh);
return 1;
......
......@@ -121,7 +121,7 @@ static struct quaternion read_quaternion()
return quat;
} else {
fprintf(stderr, "Invalid rotation '%s'\n", line);
ERROR("Invalid rotation '%s'\n", line);
}
} while ( 1 );
......@@ -198,7 +198,7 @@ int main(int argc, char *argv[])
image.molecule = NULL;
/* Splurge a few useful numbers */
printf("Wavelength is %f nm\n", image.lambda/1.0e-9);
STATUS("Wavelength is %f nm\n", image.lambda/1.0e-9);
do {
......@@ -210,7 +210,7 @@ int main(int argc, char *argv[])
}
if ( quaternion_valid(image.orientation) ) {
fprintf(stderr, "Orientation modulus is not zero!\n");
ERROR("Orientation modulus is not zero!\n");
return 1;
}
......
......@@ -86,8 +86,7 @@ void get_reflections(struct image *image, UnitCell *cell, double smax)
res_max = sqrt(w2 + h2) / image->resolution;
res_max *= (wavenumber / image->camera_len);
} else {
fprintf(stderr,
"Unrecognised formulation mode in get_reflections"
ERROR("Unrecognised formulation mode in get_reflections"
" (resolution cutoff calculation)\n");
return;
}
......@@ -172,9 +171,8 @@ void get_reflections(struct image *image, UnitCell *cell, double smax)
x /= image->pixel_size;
y /= image->pixel_size;
} else {
fprintf(stderr,
"Unrecognised formulation mode "
"in get_reflections\n");
ERROR("Unrecognised formulation mode "
"in get_reflections\n");
return;
}
......
......@@ -49,7 +49,7 @@ static double complex get_f1f2(const char *n, double en)
snprintf(filename, 63, "scattering-factors/%s.nff", n);
fh = fopen(filename, "r");
if ( fh == NULL ) {
fprintf(stderr, "Couldn't open file '%s'\n", filename);
ERROR("Couldn't open file '%s'\n", filename);
return 0.0;
}
......@@ -71,7 +71,7 @@ static double complex get_f1f2(const char *n, double en)
r = sscanf(line, "%f %f %f", &E_f, &f1_f, &f2_f);
if ( r != 3 ) {
fprintf(stderr, "WTF?\n");
ERROR("WTF?\n");
abort();
}
/* Promote to double precision */
......@@ -112,8 +112,7 @@ static double complex get_f1f2(const char *n, double en)
fclose(fh);
fprintf(stderr, "Couldn't find scattering factors for '%s' at %f eV!\n",
n, en);
ERROR("Couldn't find scattering factors for '%s' at %f eV!\n", n, en);
return 0.0;
}
......@@ -173,7 +172,7 @@ static double get_waas_kirf(const char *n, double s)
fh = fopen("scattering-factors/f0_WaasKirf.dat", "r");
if ( fh == NULL ) {
fprintf(stderr, "Couldn't open f0_WaasKirf.dat\n");
ERROR("Couldn't open f0_WaasKirf.dat\n");
return 0.0;
}
......@@ -202,8 +201,8 @@ static double get_waas_kirf(const char *n, double s)
&a1, &a2, &a3, &a4, &a5, &c,
&b1, &b2, &b3, &b4, &b5);
if ( r != 11 ) {
fprintf(stderr, "Couldn't read scattering "
"factors (WaasKirf)\n");
ERROR("Couldn't read scattering "
"factors (WaasKirf)\n");
return 0.0;
}
......@@ -304,7 +303,7 @@ static void centre_molecule(struct molecule *mol)
}
printf("Molecule was shifted by %5.3f, %5.3f, %5.3f nm\n",
STATUS("Molecule was shifted by %5.3f, %5.3f, %5.3f nm\n",
mol->xc*1e9, mol->yc*1e9, mol->zc*1e9);
}
......@@ -334,7 +333,7 @@ struct molecule *load_molecule()
fh = fopen("molecule.pdb", "r");
if ( fh == NULL ) {
fprintf(stderr, "Couldn't open file\n");
ERROR("Couldn't open file\n");
return NULL;
}
......@@ -366,7 +365,7 @@ struct molecule *load_molecule()
coords = line + 29;
r = sscanf(coords, "%f %f %f %f %f", &xf, &yf, &zf, &occf, &Bf);
if ( r != 5 ) {
fprintf(stderr, "WTF?\n");
ERROR("WTF?\n");
abort();
}
/* Promote to double precision */
......@@ -421,9 +420,9 @@ struct molecule *load_molecule()
centre_molecule(mol);
printf("There are %i species\n", mol->n_species);
STATUS("There are %i species\n", mol->n_species);
for ( i=0; i<mol->n_species; i++ ) {
printf("%3s : %6i\n", mol->species[i]->species,
STATUS("%3s : %6i\n", mol->species[i]->species,
mol->species[i]->n_atoms);
}
......@@ -504,7 +503,7 @@ double complex *get_reflections(struct molecule *mol, double en)
"Calculating structure factors");
}
}
//printf("Total scattered = %f, F000 = %f\n", tscat, F00);
//STATUS("Total scattered = %f, F000 = %f\n", tscat, F00);
return reflections;
}
......@@ -520,37 +519,37 @@ void get_reflections_cached(struct molecule *mol, double en)
snprintf(s, 1023, "reflections-%ieV.cache", (int)(J_to_eV(en)+0.5));
fh = fopen(s, "rb");
if ( fh == NULL ) {
printf("No cache file found (looked for %s)\n", s);
STATUS("No cache file found (looked for %s)\n", s);
goto calc;
}
mol->reflections = new_list_sfac();
r = fread(mol->reflections, sizeof(double complex), IDIM*IDIM*IDIM, fh);
if ( r < IDIM*IDIM*IDIM ) {
printf("Found cache file (%s), but failed to read.\n", s);
STATUS("Found cache file (%s), but failed to read.\n", s);
goto calc;
}
printf("Read structure factors (at Bragg positions) from %s\n", s);
STATUS("Read structure factors (at Bragg positions) from %s\n", s);
return;
calc:
printf("Calculating structure factors at Bragg positions...\n");
STATUS("Calculating structure factors at Bragg positions...\n");
mol->reflections = get_reflections(mol, en);
fh = fopen(s, "wb");
if ( fh == NULL ) {
printf("Failed to write cache file (%s)\n", s);
STATUS("Failed to write cache file (%s)\n", s);
return;
}
r = fwrite(mol->reflections, sizeof(double complex),
IDIM*IDIM*IDIM, fh);
if ( r < IDIM*IDIM*IDIM ) {
printf("Failed to write cache file (%s)\n", s);
STATUS("Failed to write cache file (%s)\n", s);
return;
}
fclose(fh);
printf("Successfully saved structure factors at Bragg positions to"
STATUS("Successfully saved structure factors at Bragg positions to"
" file %s\n", s);
}
......@@ -66,9 +66,9 @@ void progress_bar(int val, int total, const char *text)
for ( i=0; i<n; i++ ) s[i] = '=';
for ( i=n; i<width; i++ ) s[i] = '.';
s[width] = '\0';
printf("\r%s: |%s|", text, s);
STATUS("\r%s: |%s|", text, s);
if ( val == total ) printf("\n");
if ( val == total ) STATUS("\n");
fflush(stdout);
}
......
......@@ -146,4 +146,11 @@ static inline double distance3d(double x1, double y1, double z1,
#define TYPE unsigned int
#include "list_tmp.h"
/* ------------------------------ Message macros ---------------------------- */
#define ERROR(...) fprintf(stderr, __VA_ARGS__)
#define STATUS(...) fprintf(stderr, __VA_ARGS__)
#endif /* UTILS_H */
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment