diff options
author | Thomas White <taw@physics.org> | 2023-07-13 15:20:10 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2023-07-28 13:22:05 +0200 |
commit | 2501aedda111feaf139f9d8e94c4ab36926e93e3 (patch) | |
tree | 574491d1ccd540b921e81c224a89ff7cfb676b25 | |
parent | 56345fe5b8d0e34e0791f7ef7d0ae22f69bbce01 (diff) |
Rotation centre coordinates need to be in metres (not pixels)
-rw-r--r-- | libcrystfel/src/predict-refine.c | 11 | ||||
-rw-r--r-- | tests/gradient_check.c | 12 |
2 files changed, 13 insertions, 10 deletions
diff --git a/libcrystfel/src/predict-refine.c b/libcrystfel/src/predict-refine.c index d5838e06..4a228dc1 100644 --- a/libcrystfel/src/predict-refine.c +++ b/libcrystfel/src/predict-refine.c @@ -283,12 +283,12 @@ int fs_ss_gradient_panel(int param, Reflection *refl, UnitCell *cell, } -/* Returns dfs_refl/dP and fss_refl/dP, where P = any parameter - * fs_refl is the fast scan position of refl in panel 'p', +/* Returns the gradient of fs_dev and ss_dev w.r.t. any parameter. + * cx,cy,cz are the rotation axis coordinates (only 2 in use at any time) * in metres (not pixels) */ int fs_ss_gradient(int param, Reflection *refl, UnitCell *cell, struct detgeom_panel *p, gsl_matrix *Minv, - double cx, double cy, double cz, + double cxm, double cym, double czm, float *fsg, float *ssg) { signed int h, k, l; @@ -351,7 +351,10 @@ int fs_ss_gradient(int param, Reflection *refl, UnitCell *cell, } else { return fs_ss_gradient_panel(param, refl, cell, p, Minv, fs, ss, mu, t, - cx, cy, cz, fsg, ssg); + cxm/p->pixel_pitch, + cym/p->pixel_pitch, + czm/p->pixel_pitch, + fsg, ssg); } } diff --git a/tests/gradient_check.c b/tests/gradient_check.c index 7396b8ad..2a8175e1 100644 --- a/tests/gradient_check.c +++ b/tests/gradient_check.c @@ -53,9 +53,9 @@ int main(int argc, char *argv[]) double step; gsl_matrix **panel_matrices; int didsomething = 0; - const double cx = -200.0; - const double cy = +100.0; - const double cz = -50.0; + const double cx = 0.03; /* Detector is a 7.5 cm side length square */ + const double cy = 0.02; + const double cz = 0.01; rps = make_test_image(&n_refls, &image); panel_matrices = make_panel_minvs(image.detgeom); @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) #ifdef ROTATE_PANEL_X struct detgeom_panel *p = &image.detgeom->panels[0]; step = deg2rad(0.01); - rotate2d(&p->cnz, &p->cny, cz, cy, step); + rotate2d(&p->cnz, &p->cny, cz/p->pixel_pitch, cy/p->pixel_pitch, step); rotate2d(&p->fsz, &p->fsy, 0, 0, step); rotate2d(&p->ssz, &p->ssy, 0, 0, step); didsomething = 1; @@ -80,7 +80,7 @@ int main(int argc, char *argv[]) #ifdef ROTATE_PANEL_Y struct detgeom_panel *p = &image.detgeom->panels[0]; step = deg2rad(0.01); - rotate2d(&p->cnx, &p->cnz, cx, cz, step); + rotate2d(&p->cnx, &p->cnz, cx/p->pixel_pitch, cz/p->pixel_pitch, step); rotate2d(&p->fsx, &p->fsz, 0, 0, step); rotate2d(&p->ssx, &p->ssz, 0, 0, step); didsomething = 1; @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) #ifdef ROTATE_PANEL_Z struct detgeom_panel *p = &image.detgeom->panels[0]; step = deg2rad(0.01); - rotate2d(&p->cnx, &p->cny, cx, cy, step); + rotate2d(&p->cnx, &p->cny, cx/p->pixel_pitch, cy/p->pixel_pitch, step); rotate2d(&p->fsx, &p->fsy, 0, 0, step); rotate2d(&p->ssx, &p->ssy, 0, 0, step); didsomething = 1; |