upgrading copyright year from 2016 to 2017
[hkl.git] / hkl / hkl-geometry-private.h
blobac138eed5e5469dbee7eaad9225230551934816c
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) 2003-2017 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 #ifndef __HKL_GEOMETRY_PRIVATE_H__
23 #define __HKL_GEOMETRY_PRIVATE_H__
25 #include <stddef.h> // for size_t
26 #include <stdio.h> // for FILE
27 #include "hkl-parameter-private.h" // for darray_parameter
28 #include "hkl-quaternion-private.h" // for _HklQuaternion
29 #include "hkl-source-private.h" // for HklSource
30 #include "hkl-vector-private.h" // for HklQuaternion
31 #include "hkl.h" // for HklGeometry, etc
32 #include "hkl/ccan/darray/darray.h" // for darray
33 #include "hkl/ccan/list/list.h"
35 G_BEGIN_DECLS
37 typedef struct _HklHolder HklHolder;
39 typedef void (* HklGeometryListMultiplyFunction) (HklGeometryList *self,
40 HklGeometryListItem *item);
42 typedef darray(HklHolder *) darray_holder;
44 struct HklHolderConfig {
45 int gc;
46 size_t *idx;
47 size_t len;
50 struct _HklHolder {
51 struct HklHolderConfig *config;
52 HklGeometry *geometry;
53 HklQuaternion q;
56 struct _HklGeometry
58 const HklFactory *factory;
59 HklSource source;
60 darray_parameter axes;
61 darray_holder holders;
64 #define HKL_GEOMETRY_ERROR hkl_geometry_error_quark ()
66 static inline GQuark hkl_geometry_error_quark (void)
68 return g_quark_from_static_string ("hkl-geometry-error-quark");
71 typedef enum {
72 HKL_GEOMETRY_ERROR_AXIS_GET, /* can not get the axis */
73 HKL_GEOMETRY_ERROR_AXIS_SET, /* can not set the axis */
74 } HklGeometryError;
76 struct _HklGeometryList
78 HklGeometryListMultiplyFunction multiply;
79 struct list_head items;
80 size_t n_items;
83 struct _HklGeometryListItem
85 struct list_node list;
86 HklGeometry *geometry;
89 /*************/
90 /* HklHolder */
91 /*************/
93 extern HklParameter *hkl_holder_add_rotation_axis(HklHolder *self,
94 char const *name, double x, double y, double z);
96 extern HklParameter *hkl_holder_add_rotation_axis_with_punit(HklHolder *self,
97 char const *name, double x, double y, double z,
98 const HklUnit *punit);
99 /***************/
100 /* HklGeometry */
101 /***************/
103 extern HklGeometry *hkl_geometry_new(const HklFactory *factory);
105 extern int hkl_geometry_init_geometry(HklGeometry *self,
106 const HklGeometry *src);
108 extern HklHolder *hkl_geometry_add_holder(HklGeometry *self);
110 extern void hkl_geometry_update(HklGeometry *self);
112 extern int hkl_geometry_get_axis_idx_by_name(const HklGeometry *self,
113 const char *name);
115 /* internally require do not use the hkl_geometry_axis_get */
116 extern HklParameter *hkl_geometry_get_axis_by_name(HklGeometry *self,
117 const char *name);
119 extern double hkl_geometry_distance(const HklGeometry *self,
120 const HklGeometry *ref);
122 extern double hkl_geometry_distance_orthodromic(const HklGeometry *self,
123 const HklGeometry *ref);
125 extern int hkl_geometry_closest_from_geometry_with_range(HklGeometry *self,
126 const HklGeometry *ref);
128 extern int hkl_geometry_is_valid(const HklGeometry *self);
130 extern int hkl_geometry_is_valid_range(const HklGeometry *self);
132 /*******************/
133 /* HklGeometryList */
134 /*******************/
136 extern HklGeometryList *hkl_geometry_list_new(void);
138 extern HklGeometryList *hkl_geometry_list_new_copy(const HklGeometryList *self);
140 extern void hkl_geometry_list_add(HklGeometryList *self, HklGeometry *geometry);
142 extern void hkl_geometry_list_reset(HklGeometryList *self);
144 extern void hkl_geometry_list_sort(HklGeometryList *self, HklGeometry *ref);
146 extern void hkl_geometry_list_fprintf(FILE *f, const HklGeometryList *self);
148 extern void hkl_geometry_list_multiply(HklGeometryList *self);
150 extern void hkl_geometry_list_multiply_from_range(HklGeometryList *self);
152 extern void hkl_geometry_list_remove_invalid(HklGeometryList *self);
154 /***********************/
155 /* HklGeometryListItem */
156 /***********************/
158 extern HklGeometryListItem *hkl_geometry_list_item_new(const HklGeometry *geometry);
160 extern HklGeometryListItem *hkl_geometry_list_item_new_copy(const HklGeometryListItem *self);
162 extern void hkl_geometry_list_item_free(HklGeometryListItem *self);
164 G_END_DECLS
166 #endif /* __HKL_GEOMETRY_PRIVATE_H__ */