summaryrefslogtreecommitdiff
path: root/Documentation/sphinx/source/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/sphinx/source/test.py')
-rw-r--r--Documentation/sphinx/source/test.py264
1 files changed, 264 insertions, 0 deletions
diff --git a/Documentation/sphinx/source/test.py b/Documentation/sphinx/source/test.py
new file mode 100644
index 0000000..f040b9a
--- /dev/null
+++ b/Documentation/sphinx/source/test.py
@@ -0,0 +1,264 @@
+# -*- encoding: utf-8 -*-
+"""
+This file is part of the hkl library.
+
+The hkl library is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+The hkl library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the hkl library. If not, see <http://www.gnu.org/licenses/>.
+
+Copyright (C) 2011-2013 Synchrotron SOLEIL
+ L'Orme des Merisiers Saint-Aubin
+ BP 48 91192 GIF-sur-YVETTE CEDEX
+Authors: Picca Frédéric-Emmanuel <picca@synchrotron-soleil.fr>
+"""
+import math
+from gi.repository import Hkl
+
+"""
+static int test_engine(struct hkl_test *test,
+ HklEngine *engine, HklGeometry *geometry,
+ HklDetector *detector, HklSample *sample)
+{
+ size_t i, j, k, f_idx;
+ double *values = alloca(HKL_LIST_LEN(engine->pseudoAxes) * sizeof(*values));
+ int miss = 0;
+
+ /* randomize the geometry */
+ hkl_geometry_randomize(geometry);
+
+ for(f_idx=0; f_idx<HKL_LIST_LEN(engine->modes); ++f_idx) {
+ hkl_engine_current_mode_set(engine, f_idx);
+ /* for now unactive the eulerians check */
+ if(!strcmp(engine->mode->name, "eulerians"))
+ continue;
+ miss = 0;
+ for(i=0;i<N;++i) {
+ int res;
+ size_t len = HKL_LIST_LEN(engine->pseudoAxes);
+
+ /* randomize the pseudoAxes values */
+ for(j=0; j<len; ++j) {
+ HklParameter *parameter = (HklParameter *)(engine->pseudoAxes[j]);
+ hkl_parameter_randomize(parameter);
+
+ values[j] = parameter->value;
+ }
+
+ /* randomize the parameters */
+ for(j=0; j<HKL_LIST_LEN(engine->mode->parameters); ++j)
+ hkl_parameter_randomize(&engine->mode->parameters[j]);
+
+ /* pseudo -> geometry */
+ hkl_engine_initialize(engine, NULL);
+ /* hkl_engine_fprintf(stderr, engine); */
+ res = hkl_engine_set(engine, NULL);
+
+ /* geometry -> pseudo */
+ if (res == HKL_SUCCESS) {
+ size_t g_len = hkl_geometry_list_len(engine->engines->geometries);
+ /* check all finded geometries */
+ /* hkl_engine_fprintf(stderr, engine); */
+
+ for(j=0; j<g_len; ++j) {
+ /* first modify the pseudoAxes values */
+ /* to be sure that the result is the */
+ /* computed result. */
+ for(k=0; k<len; ++k)
+ ((HklParameter *)engine->pseudoAxes[k])->value = 0.;
+
+ hkl_geometry_init_geometry(geometry,
+ engine->engines->geometries->items[j]->geometry);
+ hkl_engine_get(engine, NULL);
+
+ for(k=0; k<len; ++k) {
+ HKL_ASSERT_DOUBLES_EQUAL(values[k],
+ ((HklParameter *)engine->pseudoAxes[k])->value,
+ HKL_EPSILON);
+ }
+ }
+ } else
+ miss++;
+ }
+
+#if with_log
+ fprintf(stderr, "\n\"%s\" \"%s\" missed : %d",
+ engine->geometry->name,
+ engine->mode->name, miss);
+#endif
+
+ }
+
+#if with_log
+ fprintf(stderr, "\n");
+#endif
+
+ return HKL_TEST_PASS;
+}
+
+#define test_engines(test, engines) do{ \
+ size_t i; \
+ for(i=0; i<HKL_LIST_LEN(engines->engines); ++i){ \
+ if (!test_engine(test, engines->engines[i], \
+ engines->geometry, \
+ engines->detector, \
+ engines->sample)) \
+ return HKL_TEST_FAIL; \
+ } \
+ }while(0)
+"""
+
+
+def test_all():
+ detector = Hkl.Detector().factory_new(getattr(Hkl.DetectorType, '0D'))
+
+ # attache to the second holder
+ detector.idx = 1
+
+ # create the right diffractometer geometry
+ config = Hkl.Geometry.factory_get_config_from_type(Hkl.GeometryType.KAPPA6C)
+ geometry = Hkl.Geometry.factory_newv(config, [50. * math.pi / 180.])
+ geometry.source.wave_length = 1.54
+
+ # configure the sample
+ sample = Hkl.Sample.new("toto")
+ sample.set_lattice(1.54, 1.54, 1.54, 90., 90., 90.)
+
+ # create the Engines
+ engines = Hkl.engine_list_factory(config)
+ for engine in engines.engines:
+ print engine
+
+test_all()
+"""
+ const HklGeometryConfig *config;
+ HklGeometry *geometry = NULL;
+ HklDetector *detector = hkl_detector_factory_new(HKL_DETECTOR_TYPE_0D);
+ HklSample *sample = hkl_sample_new("test", HKL_SAMPLE_TYPE_MONOCRYSTAL);
+ HklEngineList *engines;
+
+ /* attach to the second holder */
+ detector->idx = 1;
+
+ /* test all E4CV engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_EULERIAN4C_VERTICAL);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all E6C HKL engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_EULERIAN6C);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all K4CV HKL engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_KAPPA4C_VERTICAL);
+ geometry = hkl_geometry_factory_new(config, 50 * HKL_DEGTORAD);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all K6C engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_KAPPA6C);
+ geometry = hkl_geometry_factory_new(config, 50 * HKL_DEGTORAD);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all ZAXIS engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_ZAXIS);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all SOLEIL SIXS MED 2+2 engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_2_2);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all SOLEIL MARS engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_SOLEIL_MARS);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all SOLEIL SIXS MED 1+2 engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_1_2);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all PETRA3 P09 EH2 engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_PETRA3_P09_EH2);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_engine_list_factory(config);
+ hkl_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_engine_list_free(engines);
+
+ /* test all SOLEIL SIXS MED 2+3 engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_SOLEIL_SIXS_MED_2_3);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_pseudo_axis_engine_list_factory(config);
+ hkl_pseudo_axis_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_pseudo_axis_engine_list_free(engines);
+
+ /* test all SOLEIL SIRIUS TURRET engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_SOLEIL_SIRIUS_TURRET);
+ geometry = hkl_geometry_factory_new(config);
+ engines = hkl_pseudo_axis_engine_list_factory(config);
+ hkl_pseudo_axis_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_pseudo_axis_engine_list_free(engines);
+
+ /* test all SOLEIL SIRIUS KAPPA engines */
+ config = hkl_geometry_factory_get_config_from_type(HKL_GEOMETRY_TYPE_SOLEIL_SIRIUS_KAPPA);
+ geometry = hkl_geometry_factory_new(config, 50 * HKL_DEGTORAD);
+ engines = hkl_pseudo_axis_engine_list_factory(config);
+ hkl_pseudo_axis_engine_list_init(engines, geometry, detector, sample);
+ test_engines(test, engines);
+ hkl_geometry_free(geometry);
+ hkl_pseudo_axis_engine_list_free(engines);
+
+ hkl_detector_free(detector);
+ hkl_sample_free(sample);
+
+ return HKL_TEST_PASS;
+}
+"""