/* * reflections.h * * Data structures in 3D space * * (c) 2007 Thomas White * * dtr - Diffraction Tomography Reconstruction * */ #ifndef REFLECTION_H #define REFLECTION_H #ifdef HAVE_CONFIG_H #include #endif typedef enum { REFLECTION_NORMAL, /* Measured - expressed as x, y, z position */ REFLECTION_CENTRAL, /* The central beam */ REFLECTION_GENERATED, /* Generated and intensity-measured - expressed as h, k, l index */ REFLECTION_MARKER, REFLECTION_VECTOR_MARKER_1, REFLECTION_VECTOR_MARKER_2, REFLECTION_VECTOR_MARKER_3 } ReflectionType; typedef struct reflection_struct { double x; double y; double z; double intensity; signed int h; signed int k; signed int l; ReflectionType type; struct reflection_struct *next; /* MUST BE LAST in order for caching to work */ } Reflection; typedef struct rctx_struct { Reflection *reflections; Reflection *last_reflection; unsigned int n_reflections; unsigned int list_capped; } ReflectionContext; extern ReflectionContext *reflection_init(void); extern void reflection_clear(ReflectionContext *reflectionctx); extern void reflection_clear_markers(ReflectionContext *reflectionctx); extern void reflection_free(ReflectionContext *reflectionctx); extern Reflection *reflection_add(ReflectionContext *reflectionctx, double x, double y, double z, double intensity, ReflectionType type); #include "control.h" extern void reflection_add_from_dp(ControlContext *ctx, double x, double y, ImageRecord imagerecord, double intensity); extern void reflection_add_from_reflection(ReflectionContext *rctx, Reflection *r); #endif /* REFLECTION_H */