diff options
author | Thomas White <taw@physics.org> | 2023-07-11 14:18:47 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2023-07-28 13:22:05 +0200 |
commit | 56345fe5b8d0e34e0791f7ef7d0ae22f69bbce01 (patch) | |
tree | 21f39875680d0a91be050763d060086610a45430 /libcrystfel/src | |
parent | 7e5c548f918da7747cb8f21d52e3a5ac7f799148 (diff) |
Add rotation gradients for Mille
Diffstat (limited to 'libcrystfel/src')
-rw-r--r-- | libcrystfel/src/crystfel-mille.c | 60 |
1 files changed, 57 insertions, 3 deletions
diff --git a/libcrystfel/src/crystfel-mille.c b/libcrystfel/src/crystfel-mille.c index 93c03028..139f2e9e 100644 --- a/libcrystfel/src/crystfel-mille.c +++ b/libcrystfel/src/crystfel-mille.c @@ -89,7 +89,7 @@ void write_mille(Mille *mille, int n, UnitCell *cell, int j; const struct detgeom_panel_group *group; - /* Local gradients for fs and ss */ + /* Local gradients */ for ( j=0; j<9; j++ ) { fs_ss_gradient(rv[j], rps[i].refl, cell, &image->detgeom->panels[rps[i].peak->pn], @@ -98,21 +98,75 @@ void write_mille(Mille *mille, int n, UnitCell *cell, &local_gradients_ss[j]); } - /* Global gradients for fs and ss */ + /* Global gradients (for each group, at least level of hierarchy) */ j = 0; group = image->detgeom->panels[rps[i].peak->pn].group; while ( group != NULL ) { + double cx, cy, cz; + + detgeom_group_center(group, &cx, &cy, &cz); + fs_ss_gradient(GPARAM_DET_TX, rps[i].refl, cell, &image->detgeom->panels[rps[i].peak->pn], Minvs[rps[i].peak->pn], 0, 0, 0, &global_gradients_fs[j], &global_gradients_ss[j]); - labels[j] = mille_label(group->hierarchy_level, group->member_index, GPARAM_DET_TX); j++; + + fs_ss_gradient(GPARAM_DET_TY, rps[i].refl, cell, + &image->detgeom->panels[rps[i].peak->pn], + Minvs[rps[i].peak->pn], 0, 0, 0, + &global_gradients_fs[j], + &global_gradients_ss[j]); + labels[j] = mille_label(group->hierarchy_level, + group->member_index, + GPARAM_DET_TY); + j++; + + fs_ss_gradient(GPARAM_DET_TZ, rps[i].refl, cell, + &image->detgeom->panels[rps[i].peak->pn], + Minvs[rps[i].peak->pn], 0, 0, 0, + &global_gradients_fs[j], + &global_gradients_ss[j]); + labels[j] = mille_label(group->hierarchy_level, + group->member_index, + GPARAM_DET_TZ); + j++; + + fs_ss_gradient(GPARAM_DET_RX, rps[i].refl, cell, + &image->detgeom->panels[rps[i].peak->pn], + Minvs[rps[i].peak->pn], cx, cy, cz, + &global_gradients_fs[j], + &global_gradients_ss[j]); + labels[j] = mille_label(group->hierarchy_level, + group->member_index, + GPARAM_DET_RX); + j++; + + fs_ss_gradient(GPARAM_DET_RY, rps[i].refl, cell, + &image->detgeom->panels[rps[i].peak->pn], + Minvs[rps[i].peak->pn], cx, cy, cz, + &global_gradients_fs[j], + &global_gradients_ss[j]); + labels[j] = mille_label(group->hierarchy_level, + group->member_index, + GPARAM_DET_RX); + j++; + + fs_ss_gradient(GPARAM_DET_RZ, rps[i].refl, cell, + &image->detgeom->panels[rps[i].peak->pn], + Minvs[rps[i].peak->pn], cx, cy, cz, + &global_gradients_fs[j], + &global_gradients_ss[j]); + labels[j] = mille_label(group->hierarchy_level, + group->member_index, + GPARAM_DET_RZ); + j++; + group = group->parent; } |