* remove the to_pseudoAxes from PseudoAxesEngine.
[hkl.git] / include / hkl / hkl-pseudoaxis-K4CV.h
blob0b77b6c3525479f953b693507628b2cef675537a
1 #ifndef __HKL_PSEUDOAXIS_K4CV_H__
2 #define __HKL_PSEUDOAXIS_K4CV_H__
4 #include <gsl/gsl_math.h>
5 #include <gsl/gsl_vector.h>
6 #include <gsl/gsl_sf_trig.h>
8 #include <hkl/hkl-pseudoaxis.h>
9 #include <hkl/hkl-pseudoaxis-common.h>
11 HKL_BEGIN_DECLS
13 static int K4CV_bissector_f1(const gsl_vector *x, void *params, gsl_vector *f)
15 double komega, tth, kappa, omega;
16 size_t i;
17 HklPseudoAxisEngine *engine;
18 double const *x_data = gsl_vector_const_ptr(x, 0);
19 double *f_data = gsl_vector_ptr(f, 0);
21 engine = params;
23 for(i=0; i<x->size;++i)
24 if (gsl_isnan(x_data[i]))
25 return GSL_ENOMEM;
27 RUBh_minus_Q(x_data, params, f_data);
29 komega = x_data[0];
30 kappa = x_data[1];
31 tth = gsl_sf_angle_restrict_symm(x_data[3]);
33 omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) + M_PI_2;
34 omega = gsl_sf_angle_restrict_symm(omega);
35 //f_data[3] = tth - 2 * fmod(omega,M_PI);
36 f_data[3] = tth - 2*omega;
38 return GSL_SUCCESS;
41 static int K4CV_bissector_f2(const gsl_vector *x, void *params, gsl_vector *f)
43 double komega, tth, kappa, omega;
44 size_t i;
45 HklPseudoAxisEngine *engine;
46 double const *x_data = gsl_vector_const_ptr(x, 0);
47 double *f_data = gsl_vector_ptr(f, 0);
49 engine = params;
51 for(i=0; i<x->size;++i)
52 if (gsl_isnan(x_data[i]))
53 return GSL_ENOMEM;
55 RUBh_minus_Q(x_data, params, f_data);
57 komega = x_data[0];
58 kappa = x_data[1];
59 tth = gsl_sf_angle_restrict_symm(x_data[3]);
61 omega = komega + atan(tan(kappa/2.)*cos(50 * HKL_DEGTORAD)) - M_PI_2;
62 omega = gsl_sf_angle_restrict_symm(omega);
63 //f_data[3] = tth - 2 * fmod(omega,M_PI);
64 f_data[3] = tth - 2*omega;
66 return GSL_SUCCESS;
69 HklPseudoAxisEngine *hkl_pseudoAxisEngine_new_K4CV_HKL(void)
71 HklPseudoAxisEngine *self;
72 HklPseudoAxisEngineFunc *function;
73 HklPseudoAxisEngineGetSet *getset;
75 self = hkl_pseudoAxisEngine_new("hkl", 3, "h", "k", "l");
77 /* hkl get/set bissector */
78 getset = hkl_pseudo_axis_engine_get_set_new(
79 "bissector",
80 hkl_pseudo_axis_engine_getter_func_hkl,
81 NULL,
83 4, "komega", "kappa", "kphi", "tth");
84 hkl_pseudoAxisEngine_add_get_set(self, getset);
86 /* bissector */
87 function = hkl_pseudo_axis_engine_func_new(
88 "bissector",
89 2, K4CV_bissector_f1, K4CV_bissector_f2,
91 4, "komega", "kappa", "kphi", "tth");
92 hkl_pseudoAxisEngine_add_function(self, function);
94 return self;
97 HKL_END_DECLS
99 #endif /* __HKL_PSEUDOAXIS_E4CV_H__ */