diff options
Diffstat (limited to 'src/render_hkl.c')
-rw-r--r-- | src/render_hkl.c | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/src/render_hkl.c b/src/render_hkl.c index fc1c5121..aec6d714 100644 --- a/src/render_hkl.c +++ b/src/render_hkl.c @@ -26,11 +26,12 @@ #endif #include "utils.h" -#include "reflections.h" #include "povray.h" #include "symmetry.h" #include "render.h" #include "render_hkl.h" +#include "reflist.h" +#include "reflist-utils.h" static void show_help(const char *s) @@ -81,8 +82,7 @@ static void show_help(const char *s) static void draw_circles(signed int xh, signed int xk, signed int xl, signed int yh, signed int yk, signed int yl, signed int zh, signed int zk, signed int zl, - double *ref, unsigned int *counts, ReflItemList *items, - const char *sym, + RefList *list, const char *sym, cairo_t *dctx, int wght, double boost, int colscale, UnitCell *cell, double radius, double theta, double as, double bs, double cx, double cy, @@ -98,36 +98,36 @@ static void draw_circles(signed int xh, signed int xk, signed int xl, *max_res = 0.0; *max_ux = 0; *max_uy = 0; } - /* Loop across the two basis directions */ + /* Iterate over possible reflections in this zone */ for ( xi=-INDMAX; xi<INDMAX; xi++ ) { for ( yi=-INDMAX; yi<INDMAX; yi++ ) { double u, v, val, res; signed int h, k, l; - signed int he, ke, le; + Reflection *refl; h = xi*xh + yi*yh; k = xi*xk + yi*yk; l = xi*xl + yi*yl; /* Got this reflection? */ - if ( find_unique_equiv(items, h, k, l, sym, - &he, &ke, &le) == 0 ) continue; + refl = find_refl(list, h, k, l); + if ( refl == NULL ) continue; switch ( wght ) { case WGHT_I : - val = lookup_intensity(ref, he, ke, le); + val = get_intensity(refl); break; case WGHT_SQRTI : - val = lookup_intensity(ref, he, ke, le); + val = get_intensity(refl); val = (val>0.0) ? sqrt(val) : 0.0; break; case WGHT_COUNTS : - val = lookup_count(counts, he, ke, le); - val /= (float)num_equivs(he, ke, le, sym); + val = get_redundancy(refl); + val /= (float)num_equivs(h, k, l, sym); break; case WGHT_RAWCOUNTS : - val = lookup_count(counts, he, ke, le); + val = get_redundancy(refl); break; default : ERROR("Invalid weighting.\n"); @@ -228,8 +228,7 @@ static void render_overlined_indices(cairo_t *dctx, } -static void render_za(UnitCell *cell, ReflItemList *items, - double *ref, unsigned int *counts, +static void render_za(UnitCell *cell, RefList *list, double boost, const char *sym, int wght, int colscale, signed int xh, signed int xk, signed int xl, signed int yh, signed int yk, signed int yl, @@ -284,7 +283,7 @@ static void render_za(UnitCell *cell, ReflItemList *items, scale = 1.0; draw_circles(xh, xk, xl, yh, yk, yl, zh, zk, zl, - ref, counts, items, sym, NULL, wght, boost, colscale, cell, + list, sym, NULL, wght, boost, colscale, cell, 0.0, theta, as, bs, 0.0, 0.0, scale, &max_ux, &max_uy, &max_val, &max_u, &max_v, &max_res); @@ -342,7 +341,7 @@ static void render_za(UnitCell *cell, ReflItemList *items, cy = 512.0 - 20.0; draw_circles(xh, xk, xl, yh, yk, yl, zh, zk, zl, - ref, counts, items, sym, dctx, wght, boost, colscale, cell, + list, sym, dctx, wght, boost, colscale, cell, max_r, theta, as, bs, cx, cy, scale, NULL, NULL, &max_val, NULL, NULL, NULL); @@ -462,8 +461,8 @@ int main(int argc, char *argv[]) { int c; UnitCell *cell; + RefList *list; char *infile; - double *ref; int config_povray = 0; int config_zoneaxis = 0; int config_sqrt = 0; @@ -477,7 +476,6 @@ int main(int argc, char *argv[]) int wght; int colscale; char *cscale = NULL; - unsigned int *cts; signed int dh=1, dk=0, dl=0; signed int rh=0, rk=1, rl=0; char *down = NULL; @@ -613,7 +611,8 @@ int main(int argc, char *argv[]) if ( config_zoneaxis ) { if ( (( down == NULL ) && ( right != NULL )) || (( down != NULL ) && ( right == NULL )) ) { - ERROR("Either specify both 'down' and 'right', or neither.\n"); + ERROR("Either specify both 'down' and 'right'," + " or neither.\n"); return 1; } if ( down != NULL ) { @@ -641,24 +640,22 @@ int main(int argc, char *argv[]) ERROR("Couldn't load unit cell from %s\n", pdb); return 1; } - ref = new_list_intensity(); - cts = new_list_count(); - ReflItemList *items = read_reflections(infile, ref, NULL, cts, NULL); - if ( items == NULL ) { - ERROR("Couldn't open file '%s'\n", infile); + list = read_reflections(infile); + if ( list == NULL ) { + ERROR("Couldn't read file '%s'\n", infile); return 1; } - if ( check_symmetry(items, sym) ) { + if ( check_list_symmetry(list, sym) ) { ERROR("The input reflection list does not appear to" " have symmetry %s\n", sym); return 1; } if ( config_povray ) { - r = povray_render_animation(cell, ref, cts, items, + r = povray_render_animation(cell, list, nproc, sym, wght, boost); } else if ( config_zoneaxis ) { - render_za(cell, items, ref, cts, boost, sym, wght, colscale, + render_za(cell, list, boost, sym, wght, colscale, rh, rk, rl, dh, dk, dl, outfile); } else { ERROR("Try again with either --povray or --zone-axis.\n"); @@ -666,7 +663,7 @@ int main(int argc, char *argv[]) free(pdb); free(sym); - delete_items(items); + reflist_free(list); if ( outfile != NULL ) free(outfile); return r; |