1 /* This file is part of the hkl library.
3 * The hkl library is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
8 * The hkl library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with the hkl library. If not, see <http://www.gnu.org/licenses/>.
16 * Copyright (C) 2011 Synchrotron SOLEIL
17 * L'Orme des Merisiers Saint-Aubin
18 * BP 48 91192 GIF-sur-YVETTE CEDEX
20 * Authors: Picca Frédéric-Emmanuel <picca@synchrotron-soleil.fr>
22 #include <hkl/hkl-pseudoaxis-soleil-sixs-med.h>
23 #include <hkl/hkl-pseudoaxis-common-hkl.h>
25 /**************************/
26 /* MED2+2 PseudoAxeEngine */
27 /**************************/
29 static int reflectivity(const gsl_vector
*x
, void *params
, gsl_vector
*f
)
32 double const *x_data
= gsl_vector_const_ptr(x
, 0);
33 double *f_data
= gsl_vector_ptr(f
, 0);
35 RUBh_minus_Q(x_data
, params
, f_data
);
40 f_data
[3] = gamma
- 2 * mu
;
45 HklPseudoAxisEngine
*hkl_pseudo_axis_engine_soleil_sixs_med_2_2_hkl_new(void)
47 HklPseudoAxisEngine
*self
;
48 HklPseudoAxisEngineMode
*mode
;
50 self
= hkl_pseudo_axis_engine_hkl_new();
53 mode
= hkl_pseudo_axis_engine_mode_new(
56 hkl_pseudo_axis_engine_mode_get_hkl_real
,
57 hkl_pseudo_axis_engine_mode_set_hkl_real
,
60 (size_t)3, "omega", "gamma", "delta");
61 hkl_pseudo_axis_engine_add_mode(self
, mode
);
64 mode
= hkl_pseudo_axis_engine_mode_new(
67 hkl_pseudo_axis_engine_mode_get_hkl_real
,
68 hkl_pseudo_axis_engine_mode_set_hkl_real
,
71 (size_t)4, "mu", "omega", "gamma", "delta");
72 hkl_pseudo_axis_engine_add_mode(self
, mode
);
75 hkl_pseudo_axis_engine_select_mode(self
, 0);
80 /**************************/
81 /* MED1+2 PseudoAxeEngine */
82 /**************************/
84 HklPseudoAxisEngine
*hkl_pseudo_axis_engine_soleil_sixs_med_1_2_hkl_new(void)
86 HklPseudoAxisEngine
*self
;
87 HklPseudoAxisEngineMode
*mode
;
89 self
= hkl_pseudo_axis_engine_hkl_new();
92 mode
= hkl_pseudo_axis_engine_mode_new(
95 hkl_pseudo_axis_engine_mode_get_hkl_real
,
96 hkl_pseudo_axis_engine_mode_set_hkl_real
,
99 (size_t)3, "mu", "gamma", "delta");
100 hkl_pseudo_axis_engine_add_mode(self
, mode
);
102 hkl_pseudo_axis_engine_select_mode(self
, 0);