aboutsummaryrefslogtreecommitdiff
path: root/src/control.h
blob: 69d57f6aee972065584be607b58c14615545429e (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
139
140
/*
 * 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 */
	double		omega;		/* Degrees */
	
	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 {
	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 rctx_struct	*reflectionctx;
	
	/* GTK bits */
	GtkWidget		*combo_algorithm;
	GtkWidget		*combo_peaksearch;
	GtkWidget		*checkbox_prealign;
	GtkWidget		*checkbox_savecache;
	GLuint			gl_list_id;
//	GLuint			gl_ref_buffer;
//	GLuint			gl_element_buffer;
	GLfloat			*gl_ref_vertex_array;
	GLuint			*gl_ref_element_array;
	GLsizei			gl_ref_num_vertices;
	
	GLfloat			*gl_marker_vertex_array;
	GLuint			*gl_marker_element_array;
	GLsizei			gl_marker_num_vertices;

	GLfloat			*gl_gen_vertex_array;
	GLuint			*gl_gen_element_array;
	GLsizei			gl_gen_num_vertices;

} ControlContext;

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

#endif	/* CONTROL_H */