aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel')
-rw-r--r--libcrystfel/src/integration.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/libcrystfel/src/integration.c b/libcrystfel/src/integration.c
index 16d5710a..3affd1ab 100644
--- a/libcrystfel/src/integration.c
+++ b/libcrystfel/src/integration.c
@@ -199,6 +199,10 @@ struct peak_box
double sigma;
double J; /* Profile scaling factor */
+ /* Offsets to final observed position */
+ double offs_fs;
+ double offs_ss;
+
int rp; /* Reference profile number */
Reflection *refl;
@@ -699,8 +703,8 @@ static void observed_position(struct intcontext *ic, struct peak_box *bx,
if ( bx->bm[p + ic->w*q] != BM_PK ) continue;
bi = boxi(ic, bx, p, q);
- num_p += bi*p;
- num_q += bi*q;
+ num_p += bi*(p - ic->halfw);
+ num_q += bi*(q - ic->halfw);
den += bi;
}
@@ -1099,7 +1103,6 @@ static void measure_all_intensities(IntegrationMethod meth, RefList *list,
refl = next_refl(refl, iter) )
{
double pfs, pss;
- double pos_p, pos_q;
signed int h, k, l;
struct peak_box *bx;
int pn;
@@ -1161,12 +1164,7 @@ static void measure_all_intensities(IntegrationMethod meth, RefList *list,
fit_bg(&ic, bx);
- observed_position(&ic, bx, &pos_p, &pos_q);
- pos_p -= ic.halfw;
- pos_q -= ic.halfw;
- if ( bx->verbose ) {
- STATUS("Position error %f %f\n", pos_p, pos_q);
- }
+ observed_position(&ic, bx, &bx->offs_fs, &bx->offs_ss);
bx->intensity = tentative_intensity(&ic, bx);
set_intensity(refl, bx->intensity);
@@ -1211,9 +1209,19 @@ static void measure_all_intensities(IntegrationMethod meth, RefList *list,
#endif
if ( bg_ok(bx) ) {
+
+ double pfs, pss;
+
set_intensity(bx->refl, bx->intensity);
set_esd_intensity(bx->refl, bx->sigma);
set_redundancy(bx->refl, 1);
+
+ /* Update position */
+ get_detector_pos(refl, &pfs, &pss);
+ pfs += bx->offs_fs;
+ pss += bx->offs_ss;
+ set_detector_pos(refl, 0.0, pfs, pss);
+
}
}
@@ -1482,14 +1490,14 @@ static void integrate_box(struct intcontext *ic, struct peak_box *bx,
bi = boxi(ic, bx, p, q);
pk_counts++;
pk_total += (bi - bg_mean);
- fsct += (bi-bg_mean)*p;
- ssct += (bi-bg_mean)*q;
+ fsct += (bi-bg_mean)*(p - ic->halfw);
+ ssct += (bi-bg_mean)*(q - ic->halfw);
}
}
-// *pfs = ((double)fsct / pk_total) + 0.5;
-// *pss = ((double)ssct / pk_total) + 0.5;
+ bx->offs_fs = (double)fsct / pk_total;
+ bx->offs_ss = (double)ssct / pk_total;
var = pk_counts * bg_var;
var += aduph * pk_total;
@@ -1607,6 +1615,11 @@ static void integrate_rings(IntegrationMethod meth, Crystal *cr,
one_over_d = resolution(cell, h, k, l);
if ( one_over_d > limit ) limit = one_over_d;
+ /* Update position */
+ pfs += bx->offs_fs;
+ pss += bx->offs_ss;
+ set_detector_pos(refl, 0.0, pfs, pss);
+
}
free_intcontext(&ic);