Functions
copy_geom ()
struct detector *
copy_geom (const struct detector *in);
fill_in_values ()
void
fill_in_values (struct detector *det,
struct hdfile *f,
struct event *ev);
free_detector_geometry ()
void
free_detector_geometry (struct detector *det);
get_detector_geometry ()
struct detector *
get_detector_geometry (const char *filename,
struct beam_params *beam);
write_detector_geometry ()
int
write_detector_geometry (const char *geometry_filename,
const char *output_filename,
struct detector *det);
write_detector_geometry_2 ()
int
write_detector_geometry_2 (const char *geometry_filename,
const char *output_filename,
struct detector *det,
const char *additional_comment,
int write_panel_coffset);
find_panel ()
struct panel *
find_panel (struct detector *det,
double fs,
double ss);
find_panel_by_name ()
struct panel *
find_panel_by_name (struct detector *det,
const char *name);
find_panel_number ()
signed int
find_panel_number (struct detector *det,
double fs,
double ss);
simple_geometry ()
struct detector *
simple_geometry (const struct image *image);
record_image ()
void
record_image (struct image *image,
int do_poisson,
double background,
gsl_rng *rng,
double beam_radius,
double nphotons);
get_pixel_extents ()
void
get_pixel_extents (struct detector *det,
double *min_x,
double *min_y,
double *max_x,
double *max_y);
get_q ()
struct rvec
get_q (struct image *image,
double fs,
double ss,
double *ttp,
double k);
get_q_for_panel ()
struct rvec
get_q_for_panel (struct panel *p,
double fs,
double ss,
double *ttp,
double k);
get_tt ()
double
get_tt (struct image *image,
double xs,
double ys,
int *err);
smallest_q ()
double
smallest_q (struct image *image);
reverse_2d_mapping ()
int
reverse_2d_mapping (double x,
double y,
double *pfs,
double *pss,
struct detector *det);
largest_q ()
double
largest_q (struct image *image);
in_bad_region ()
int
in_bad_region (struct detector *det,
double fs,
double ss);
mark_resolution_range_as_bad ()
void
mark_resolution_range_as_bad (struct image *image,
double min,
double max);
Flags, in the bad pixel mask for image
, every pixel whose resolution is
between min
and max
.
find_orig_panel ()
struct panel *
find_orig_panel (struct detector *det,
double fs,
double ss);
panel_is_in_rigid_group ()
int
panel_is_in_rigid_group (const struct rigid_group *rg,
struct panel *p);
rigid_group_is_in_collection ()
int
rigid_group_is_in_collection (struct rg_collection *c,
struct rigid_group *rg);
single_panel_data_source ()
int
single_panel_data_source (struct detector *det,
const char *element);
find_rigid_group_collection_by_name ()
struct rg_collection *
find_rigid_group_collection_by_name (struct detector *det,
const char *name);
detector_has_clen_references ()
int
detector_has_clen_references (struct detector *det);
Types and Values
struct detector
struct detector {
struct panel *panels;
int n_panels;
int max_fs;
int max_ss; /* Size of overall array needed, minus 1 */
struct badregion *bad;
int n_bad;
unsigned int mask_bad;
unsigned int mask_good;
struct rigid_group **rigid_groups;
int n_rigid_groups;
struct rg_collection **rigid_group_collections;
int n_rg_collections;
/* Location of the pixel furthest away from the beam position, which
* will have the largest value of 2theta regardless of camera length
* and wavelength */
struct panel *furthest_out_panel;
double furthest_out_fs;
double furthest_out_ss;
/* As above, but for the smallest 2theta */
struct panel *furthest_in_panel;
double furthest_in_fs;
double furthest_in_ss;
int path_dim;
int dim_dim;
struct panel defaults;
};
struct panel
struct panel {
char name[1024]; /* Name for this panel */
/* Position of panel in the data block in memory (see below) */
int min_fs; /* Smallest FS value considered to be in the panel */
int max_fs; /* Largest FS value considered to be in this panel */
int min_ss; /* ... and so on */
int max_ss;
double cnx; /* Location of corner (min_fs,min_ss) in pixels */
double cny;
double coffset;
double clen; /* Camera length in metres */
char *clen_from;
char *mask;
char *mask_file;
double res; /* Resolution in pixels per metre */
char badrow; /* 'x' or 'y' */
int no_index; /* Don't index peaks in this panel if non-zero */
double adu_per_eV; /* Number of ADU per eV */
double max_adu; /* Treat pixel as unreliable if higher than this */
char *data;
struct dim_structure *dim_structure;
double fsx;
double fsy;
double ssx;
double ssy;
double xfs;
double yfs;
double xss;
double yss;
/* Position of the panel in the data block in the file. The panels may
* get moved around when the file is loaded (see hdf5_read2()),
* especially if the panels come from different HDF5 elements. */
int orig_min_fs;
int orig_max_fs;
int orig_min_ss;
int orig_max_ss;
int w; /* Width, calculated as max_fs-min_fs+1 */
int h; /* Height, calculated as max_ss-min_ss+1 */
};
struct badregion
struct badregion {
char name[1024];
int is_fsss;
char *panel;
double min_x;
double max_x;
double min_y;
double max_y;
/* Specified INCLUSIVELY */
int min_fs;
int max_fs;
int min_ss;
int max_ss;
};
struct rigid_group
struct rigid_group {
char *name;
struct panel **panels;
int n_panels;
/* Updates to panel position calculated during integration */
double d_fsx;
double d_ssx;
double d_cnx;
double d_fsy;
double d_ssy;
double d_cny;
int have_deltas;
};
struct rg_collection
struct rg_collection {
char *name;
struct rigid_group **rigid_groups;
int n_rigid_groups;
};