diff options
author | Thomas White <taw@physics.org> | 2009-11-12 18:50:14 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2009-11-12 18:50:14 +0100 |
commit | 857cc8c991a5ee4e717d01822da271ae34f5adaa (patch) | |
tree | 891d9f6e63370871726fe78d23d8b6e3796d92fc /src | |
parent | c9a551b872ae4eb16a606d46a7cf118af24f75f5 (diff) |
Add 'detector' module
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/detector.c | 42 | ||||
-rw-r--r-- | src/detector.h | 23 | ||||
-rw-r--r-- | src/hdf5-file.c | 6 | ||||
-rw-r--r-- | src/hdf5-file.h | 2 | ||||
-rw-r--r-- | src/main.c | 4 |
6 files changed, 73 insertions, 6 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index f5ce4e6c..c224a2b0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,5 +3,5 @@ bin_PROGRAMS = pattern_sim AM_CFLAGS = -Wall -g @CFLAGS@ pattern_sim_SOURCES = main.c diffraction.c utils.c image.c cell.c hdf5-file.c \ - ewald.c + ewald.c detector.c pattern_sim_LDADD = @LIBS@ diff --git a/src/detector.c b/src/detector.c new file mode 100644 index 00000000..ebcbb814 --- /dev/null +++ b/src/detector.c @@ -0,0 +1,42 @@ +/* + * detector.c + * + * Detector properties + * + * (c) 2007-2009 Thomas White <thomas.white@desy.de> + * + * pattern_sim - Simulate diffraction patterns from small crystals + * + */ + + +#include <stdlib.h> +#include <math.h> +#include <stdio.h> + +#include "image.h" + + +void record_image(struct image *image) +{ + int x, y; + + image->data = malloc(image->width * image->height * sizeof(uint16_t)); + + for ( x=0; x<image->width; x++ ) { + for ( y=0; y<image->height; y++ ) { + + uint16_t counts; + double val; + double intensity; + + val = image->sfacs[x + image->width*y]; + + intensity = pow(val, 2.0); + counts = intensity*16; + + image->data[x + image->width*y] = counts; + + } + } +} diff --git a/src/detector.h b/src/detector.h new file mode 100644 index 00000000..2f6680c4 --- /dev/null +++ b/src/detector.h @@ -0,0 +1,23 @@ +/* + * detector.h + * + * Detector properties + * + * (c) 2007-2009 Thomas White <thomas.white@desy.de> + * + * pattern_sim - Simulate diffraction patterns from small crystals + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifndef DETECTOR_H +#define DETECTOR_H + +#include "image.h" + +extern void record_image(struct image *image); + +#endif /* DETECTOR_H */ diff --git a/src/hdf5-file.c b/src/hdf5-file.c index 6eb84aeb..459f285c 100644 --- a/src/hdf5-file.c +++ b/src/hdf5-file.c @@ -22,7 +22,7 @@ #include "image.h" -int hdf5_write(const char *filename, const double *data, +int hdf5_write(const char *filename, const uint16_t *data, int width, int height) { hid_t fh, gh, sh, dh; /* File, group, dataspace and data handles */ @@ -49,7 +49,7 @@ int hdf5_write(const char *filename, const double *data, max_size[1] = height; sh = H5Screate_simple(2, size, max_size); - dh = H5Dcreate(gh, "data", H5T_NATIVE_FLOAT, sh, + dh = H5Dcreate(gh, "data", H5T_NATIVE_UINT16, sh, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); if ( dh < 0 ) { fprintf(stderr, "Couldn't create dataset\n"); @@ -63,7 +63,7 @@ int hdf5_write(const char *filename, const double *data, (int)size[1], (int)size[0], (int)max_size[1], (int)max_size[0]); - r = H5Dwrite(dh, H5T_NATIVE_DOUBLE, H5S_ALL, + r = H5Dwrite(dh, H5T_NATIVE_UINT16, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); if ( r < 0 ) { fprintf(stderr, "Couldn't write data\n"); diff --git a/src/hdf5-file.h b/src/hdf5-file.h index 7f74efa3..a263368a 100644 --- a/src/hdf5-file.h +++ b/src/hdf5-file.h @@ -18,7 +18,7 @@ #include <stdint.h> -extern int hdf5_write(const char *filename, const double *data, +extern int hdf5_write(const char *filename, const uint16_t *data, int width, int height); extern int hdf5_read(struct image *image, const char *filename); @@ -23,6 +23,7 @@ #include "cell.h" #include "utils.h" #include "hdf5-file.h" +#include "detector.h" /* Crystal size in metres */ @@ -80,9 +81,10 @@ int main(int argc, char *argv[]) image.data = NULL; get_diffraction(&image, cell); + record_image(&image); /* Write the output file */ - hdf5_write("results/sim.h5", image.sfacs, image.width, image.height); + hdf5_write("results/sim.h5", image.data, image.width, image.height); return 0; } |