* add the axis source test
[hkl.git] / src / new_diffractometer.c
blob2d4262b21672e343657777d35f3ff9d23bfe9d7c
1 #include "new_diffractometer.h"
3 struct hkl_diffractometer * create_empty_diffractometer(void)
5 diff = malloc(sizeof(struct hkl_diffractometer));
6 if (!diff)
7 die("Can not create an empty diffractometer Oops");
9 diff->geometry = NULL;
12 struct hkl_diffractometer * create_diffractometer(diff_type type, ...)
14 struct hkl_diffractometer * diff = NULL;
15 double alpha;
16 va_list ap;
18 diff = create_empty_diffractometer();
19 switch(type)
21 case DIFF_TYPE_2C: init_2C_diffractometer(diff);
22 break;
23 case DIFF_TYPE_E4CV: init_E4CV_diffractometer(diff);
24 break;
25 case DIFF_TYPE_E6C: init_E6C_diffractometer(diff);
26 break;
27 case DIFF_TYPE_K4CV:
28 va_start(ap, type);
29 alpha = va_arg(ap, double);
30 va_end(ap);
31 init_K4CV_diffractometer(diff, alpha);
32 break;
33 case DIFF_TYPE_K6C:
34 va_start(ap, type);
35 alpha = va_arg(ap, double);
36 va_end(ap);
37 init_K6C_diffractometer(diff, alpha);
38 break;
39 default:
40 die("Not a known diffractometer");
42 return diff;
45 static void free_diffractometer(struct hkl_diffractometer * diff)
47 free_geometry(diff->geometry);
50 struct hkl_diffractometer_config * hkl_diffractometer_get_config(struct hkl_diffractometer * diff)
52 struct hkl_diffractometer_config * config;
54 config = malloc(sizeof(struct hkl_diffractometer_config));
55 if (!config)
56 die("Can not create a diffractometer config");
58 config->geometry = hkl_geometry_get_config(diff->geometry);
60 return config;
63 void hkl_diffractometer_set_config(struct hkl_diffractometer * diff, struct hkl_diffractometer_config const * config)
65 hkl_geometry_set_config(diff->geometry, config->geometry);
68 void free_diffractometer_config(struct hkl_diffractometer_config * config)
70 free_geometry_config(config->geometry);
71 if (config)
72 free(config);
73 config = NULL;