aboutsummaryrefslogtreecommitdiff
path: root/src/control.h
blob: 5b0d187dc5af0a6b1837755c458946e9d6d5e18e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
 * control.h
 *
 * Common control structure
 *
 * (c) 2007 Thomas White <taw27@cam.ac.uk>
 *
 *  dtr - Diffraction Tomography Reconstruction
 *
 */
 
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifndef CONTROL_H
#define CONTROL_H

#include <gtk/gtk.h>
#include <inttypes.h>
#include <GL/gl.h>

#define MAX_IMAGES 256

typedef enum ift_enum {
	INPUT_NONE,
	INPUT_QDRP,
	INPUT_MRC,
	INPUT_CACHE
} InputFileType;

typedef enum {
	FORMULATION_CLEN,
	FORMULATION_PIXELSIZE
} FormulationMode;

typedef enum {
	PEAKSEARCH_NONE,
	PEAKSEARCH_THRESHOLD,
	PEAKSEARCH_ADAPTIVE_THRESHOLD,
	PEAKSEARCH_LSQ,
	PEAKSEARCH_ZAEFFERER,
	PEAKSEARCH_STAT
} PeakSearchMode;

typedef enum {
	RECONSTRUCTION_MAPPING,
	RECONSTRUCTION_PREDICTION
} ReconstructionMode;

typedef struct imagerecord_struct {

	uint16_t	*image;
	double		tilt;		/* Degrees.  Defines where the pattern lies in reciprocal space */
	double		omega;		/* Degrees.  Defines where the pattern lies in reciprocal space */
	double		slop;		/* Degrees.  Defines where the pattern lies "on the negative" */
	
	FormulationMode fmode;
	double		pixel_size;
	double		camera_len;
	double		lambda;
	double		resolution;
	
	int		width;
	int		height;
	int		x_centre;
	int		y_centre;

} ImageRecord;

typedef struct {
	ImageRecord	*parent;
	int		x;
	int		y;
	double		intensity;
} ImageReflection;

typedef struct cctx_struct {
	
	/* Modes */
	InputFileType			inputfiletype;
	FormulationMode			fmode;
	ReconstructionMode 		rmode;
	PeakSearchMode 			psmode;
	unsigned int			prealign;
	unsigned int			savecache;
	unsigned int			have_centres;
	
	/* Input filename */
	char 				*filename;
	
	/* Basic parameters, stored here solely so they can be copied
	 * into the ImageRecord(s) more easily */
	double				camera_length;
	double				omega;		/* Degrees */
	double				resolution;
	double				lambda;
	double				pixel_size;
	double				x_centre;
	double				y_centre;
	
	/* QDRP Parser flags */
	unsigned int			started;
	unsigned int			camera_length_set;
	unsigned int			omega_set;
	unsigned int			resolution_set;
	unsigned int			lambda_set;
	
	/* The input images */
	int				n_images;
	ImageRecord			images[MAX_IMAGES];
	
	/* Output */
	struct reflectionlist_struct	*reflectionlist;
	struct dw_struct		*dw;
	
	/* GTK bits */
	GtkWidget			*combo_algorithm;
	GtkWidget			*combo_peaksearch;
	GtkWidget			*checkbox_prealign;
	GtkWidget			*checkbox_savecache;
	
	/* IPR stuff */
	int				ipr_cur_image;
	struct imagedisplay_struct	*ipr_id;
	struct reflectionlist_struct	*ipr_lat;
	struct basis_struct		*ipr_basis;

} ControlContext;

extern int control_add_image(ControlContext *ctx, uint16_t *image, int width, int height, double tilt);
extern ControlContext *control_ctx_new(void);
extern double control_min_tilt(ControlContext *ctx);
extern double control_max_tilt(ControlContext *ctx);
extern ImageRecord *control_image_nearest_tilt(ControlContext *ctx, double tilt);

#endif	/* CONTROL_H */