aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-07-11 14:18:47 +0200
committerThomas White <taw@physics.org>2023-07-28 13:22:05 +0200
commit56345fe5b8d0e34e0791f7ef7d0ae22f69bbce01 (patch)
tree21f39875680d0a91be050763d060086610a45430 /libcrystfel/src
parent7e5c548f918da7747cb8f21d52e3a5ac7f799148 (diff)
Add rotation gradients for Mille
Diffstat (limited to 'libcrystfel/src')
-rw-r--r--libcrystfel/src/crystfel-mille.c60
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;
}