aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/image.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-10-26 15:11:43 +0200
committerThomas White <taw@physics.org>2021-10-26 15:11:43 +0200
commit1b0649e5af029970def587d1c6c494d0cae48427 (patch)
treef0b29fb97752ce7c54f42ad5f475fc389d441e21 /libcrystfel/src/image.c
parent40ed4e6a72fd70c487aaafb58bc4c74cfaa6bfa8 (diff)
create_detgeom: Factorise panel template
Diffstat (limited to 'libcrystfel/src/image.c')
-rw-r--r--libcrystfel/src/image.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/libcrystfel/src/image.c b/libcrystfel/src/image.c
index 2250dc42..d31e99b6 100644
--- a/libcrystfel/src/image.c
+++ b/libcrystfel/src/image.c
@@ -613,25 +613,26 @@ int create_detgeom(struct image *image, const DataTemplate *dtempl)
for ( i=0; i<dtempl->n_panels; i++ ) {
struct detgeom_panel *p = &detgeom->panels[i];
+ struct panel_template *tmpl = &dtempl->panels[i];
double shift_x, shift_y;
- p->name = safe_strdup(dtempl->panels[i].name);
+ p->name = safe_strdup(tmpl->name);
- p->pixel_pitch = dtempl->panels[i].pixel_pitch;
+ p->pixel_pitch = tmpl->pixel_pitch;
/* NB cnx,cny are in pixels, cnz is in m */
- p->cnx = dtempl->panels[i].cnx;
- p->cny = dtempl->panels[i].cny;
- if ( im_get_length(image, dtempl->panels[i].cnz_from,
+ p->cnx = tmpl->cnx;
+ p->cny = tmpl->cny;
+ if ( im_get_length(image, tmpl->cnz_from,
1e-3, &p->cnz) )
{
- ERROR("Failed to read length from '%s'\n", dtempl->panels[i].cnz_from);
+ ERROR("Failed to read length from '%s'\n", tmpl->cnz_from);
return 1;
}
/* Apply offset (in m) and then convert cnz from
* m to pixels */
- p->cnz += dtempl->panels[i].cnz_offset;
+ p->cnz += tmpl->cnz_offset;
p->cnz /= p->pixel_pitch;
/* Apply overall shift (already in m) */
@@ -658,38 +659,36 @@ int create_detgeom(struct image *image, const DataTemplate *dtempl)
p->cny += shift_y / p->pixel_pitch;
}
- p->max_adu = dtempl->panels[i].max_adu;
+ p->max_adu = tmpl->max_adu;
- switch ( dtempl->panels[i].adu_scale_unit ) {
+ switch ( tmpl->adu_scale_unit ) {
case ADU_PER_PHOTON:
- p->adu_per_photon = dtempl->panels[i].adu_scale;
+ p->adu_per_photon = tmpl->adu_scale;
break;
case ADU_PER_EV:
- p->adu_per_photon = dtempl->panels[i].adu_scale
+ p->adu_per_photon = tmpl->adu_scale
* ph_lambda_to_eV(image->lambda);
break;
default:
p->adu_per_photon = 1.0;
ERROR("Invalid ADU/ph scale unit (%i)\n",
- dtempl->panels[i].adu_scale_unit);
+ tmpl->adu_scale_unit);
break;
}
- p->w = dtempl->panels[i].orig_max_fs
- - dtempl->panels[i].orig_min_fs + 1;
- p->h = dtempl->panels[i].orig_max_ss
- - dtempl->panels[i].orig_min_ss + 1;
-
- p->fsx = dtempl->panels[i].fsx;
- p->fsy = dtempl->panels[i].fsy;
- p->fsz = dtempl->panels[i].fsz;
- p->ssx = dtempl->panels[i].ssx;
- p->ssy = dtempl->panels[i].ssy;
- p->ssz = dtempl->panels[i].ssz;
+ p->w = tmpl->orig_max_fs - tmpl->orig_min_fs + 1;
+ p->h = tmpl->orig_max_ss - tmpl->orig_min_ss + 1;
+
+ p->fsx = tmpl->fsx;
+ p->fsy = tmpl->fsy;
+ p->fsz = tmpl->fsz;
+ p->ssx = tmpl->ssx;
+ p->ssy = tmpl->ssy;
+ p->ssz = tmpl->ssz;
}