Develop and Download Open Source Software

Browse Subversion Repository

Contents of /Conograph/trunk/src/qc/reflection_conditions.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 33 - (show annotations) (download) (as text)
Wed Sep 7 04:38:51 2016 UTC (7 years, 6 months ago) by rtomiyasu
File MIME type: text/x-c++src
File size: 70917 byte(s)
The output format for base-centered monoclinic cells was corrected.
1 // reflection_conditions.cc
2 # include <assert.h>
3 # include "reflection_conditions.hh"
4 # include "../bravais_type/BravaisType.hh"
5 # include "../utility_func/zstring.hh"
6
7
8 bool is_not_extinct_none(const Int4& h, const Int4& k, const Int4& l)
9 {
10 return true;
11 }
12
13 bool is_not_extinct_4h00(const Int4& h, const Int4& k, const Int4& l)
14 {
15 //h00: h=4n, 0k0: k=4n, 00l: l=4n
16 if ( h % 4 != 0 && k == 0 && l == 0 ) return false;
17 if ( h == 0 && k % 4 != 0 && l == 0 ) return false;
18 if ( h == 0 && k == 0 && l % 4 != 0 ) return false;
19 return true;
20 }
21
22 bool is_not_extinct_2h00(const Int4& h, const Int4& k, const Int4& l)
23 {
24 //h00 : h = 2n, 0k0 : k = 2n, 00l : l = 2n
25 if ( h % 2 != 0 && k == 0 && l == 0 ) return false;
26 if ( h == 0 && k % 2 != 0 && l == 0 ) return false;
27 if ( h == 0 && k == 0 && l % 2 != 0 ) return false;
28 return true;
29 }
30
31
32 bool is_not_extinct_4h00_40kl(const Int4& h, const Int4& k, const Int4& l)
33 {
34 //0kl:k+l=4n,h0l:h+l=4n,hk0:h+k=4n,h00:h=4n,0k0:k=4n,00l:l=4n
35 if ( !is_not_extinct_4h00(h, k, l) ) return false;
36 if ( h == 0 && (k + l) % 4 != 0 ) return false;
37 if ( k == 0 && (h + l) % 4 != 0 ) return false;
38 if ( l == 0 && (h + k) % 4 != 0 ) return false;
39 return true;
40 }
41
42 bool is_not_extinct_2h00_20kl(const Int4& h, const Int4& k, const Int4& l)
43 {
44 //0kl : k+l = 2n, h0l : h+l = 2n, hk0 : h+k = 2n, h00 : h = 2n, 0k0 : k = 2n, 00l : l = 2n
45 if ( !is_not_extinct_2h00(h, k, l) ) return false;
46 if ( h == 0 && (k + l) % 2 != 0 ) return false;
47 if ( k == 0 && (h + l) % 2 != 0 ) return false;
48 if ( l == 0 && (h + k) % 2 != 0 ) return false;
49 return true;
50 }
51
52 bool is_not_extinct_2hhl(const Int4& h, const Int4& k, const Int4& l)
53 {
54 //hhl:h,l=2n, hkh:h,k=2n, hkk:h,k=2n
55 if ( k == h && !(h % 2 == 0 && l % 2 == 0 )) return false;
56 if ( l == h && !(h % 2 == 0 && k % 2 == 0 ) ) return false;
57 if ( l == k && !(h % 2 == 0 && k % 2 == 0 ) ) return false;
58 return true;
59 }
60
61 bool is_not_extinct_20kl(const Int4& h, const Int4& k, const Int4& l)
62 {
63 //0kl:k,l=2n, h0l:h,l=2n, hk0:h,k=2n
64 if ( h == 0 && !(k % 2 == 0 && l % 2 == 0 )) return false;
65 if ( k == 0 && !(h % 2 == 0 && l % 2 == 0 )) return false;
66 if ( l == 0 && !(h % 2 == 0 && k % 2 == 0 )) return false;
67 return true;
68 }
69 bool is_not_extinct_40kl_2hhl_4h00(const Int4& h, const Int4& k, const Int4& l)
70 {
71 //0kl:k+l=4n, h0l:h+l=4n, hk0:h+k=4n, hhl:h,l=2n, hkh:h,k=2n, hkk:h,k=2n, h00:h=4n, 0k0:k=4n, 00l:l=4n
72 if ( !is_not_extinct_4h00_40kl(h, k, l) ) return false;
73 if ( !is_not_extinct_2hhl(h, k, l) ) return false;
74 return true;
75 }
76 bool is_not_extinct_4hhl_4h00(const Int4& h, const Int4& k, const Int4& l)
77 {
78 //hhl : 2h+l = 4n, hkh : 2h+k = 4n, hkk : h+2k = 4n, h00 : h = 4n, 0k0 : k = 4n, 00l : l = 4n
79 if ( !is_not_extinct_4h00(h, k, l) ) return false;
80 if ( k == h && (2*h+l) % 4 !=0 ) return false;
81 if ( l == h && (2*h+k) % 4 !=0 ) return false;
82 if ( l == k && (2*k+h) % 4 !=0 ) return false;
83 return true;
84 }
85
86 bool is_not_extinct_2hhl_2h00(const Int4& h, const Int4& k, const Int4& l)
87 {
88 //hhl : l = 2n, hkh : k = 2n, hkk : h = 2n, h00 : h = 2n, 0k0 : k = 2n, 00l : l = 2n
89 if ( !is_not_extinct_2h00(h, k, l) ) return false;
90 if ( k == h && (l) % 2 !=0 ) return false;
91 if ( l == h && (k) % 2 !=0 ) return false;
92 if ( l == k && (h) % 2 !=0 ) return false;
93 return true;
94 }
95 bool is_not_extinct_2hhl_2h00_20kl(const Int4& h, const Int4& k, const Int4& l)
96 {
97 //0kl:k+l=2n, h0l:h+l=2n, hk0:h+k=2n, hhl:l=2n, hkh:k=2n, hkk:h=2n, h00:h=2n, 0k0:k=2n, 00l:l=2n
98 if ( !is_not_extinct_2h00_20kl(h, k, l) ) return false;
99 if ( k == h && (l) % 2 !=0 ) return false;
100 if ( l == h && (k) % 2 !=0 ) return false;
101 if ( l == k && (h) % 2 !=0 ) return false;
102 return true;
103 }
104 bool is_not_extinct_2hk0_2h00(const Int4& h, const Int4& k, const Int4& l)
105 {
106 //hk0 : h = 2n 0kl : k = 2n h0l : l = 2n h00 : h = 2n 0k0 : k = 2n 00l : l = 2n
107 if ( !is_not_extinct_2h00(h, k, l) ) return false;
108 if ( l == 0 && (h) % 2 !=0 ) return false;
109 if ( h == 0 && (k) % 2 !=0 ) return false;
110 if ( k == 0 && (l) % 2 !=0 ) return false;
111 return true;
112 }
113 bool is_not_extinct_2hk0mirror_2h00(const Int4& h, const Int4& k, const Int4& l)
114 {
115 //h00 : h = 2n 0k0 : k = 2n 00l : l = 2n
116 if ( !is_not_extinct_2h00(h, k, l) ) return false;
117 //hk0 : k = 2n 0kl : l = 2n h0l : h = 2n
118 if ( l == 0 && (k) % 2 !=0 ) return false;
119 if ( h == 0 && (l) % 2 !=0 ) return false;
120 if ( k == 0 && (h) % 2 !=0 ) return false;
121 return true;
122 }
123 //Trigonal: tr
124 bool is_not_extinct_tr_3000l(const Int4& h, const Int4& k, const Int4& l)
125 {
126 //000l : l = 3n
127 if ( h == 0 && k == 0 && (l) % 3 !=0 ) return false;
128 return true;
129 }
130 bool is_not_extinct_tr_2hmh0l(const Int4& h, const Int4& k, const Int4& l)
131 {
132 //h-h0l : l = 2n h0-hl : l = 2n 0h-hl : l = 2n
133 if ( k == -h && (l) % 2 !=0 ) return false;
134 if ( k == 0 && (l) % 2 !=0 ) return false;
135 if ( h == 0 && (l) % 2 !=0 ) return false;
136 return true;
137 }
138 //Hexagonal : hex
139 bool is_not_extinct_hex_6000l(const Int4& h, const Int4& k, const Int4& l)
140 {
141 //000l : l = 6n
142 if ( h == 0 && k == 0 && (l) % 6 !=0 ) return false;
143 return true;
144 }
145 bool is_not_extinct_hex_3000l(const Int4& h, const Int4& k, const Int4& l)
146 {
147 //000l : l = 3n
148 if ( h == 0 && k == 0 && (l) % 3 !=0 ) return false;
149 return true;
150 }
151 bool is_not_extinct_hex_2000l(const Int4& h, const Int4& k, const Int4& l)
152 {
153 //000l : l = 2n
154 if ( h == 0 && k == 0 && (l) % 2 !=0 ) return false;
155 return true;
156 }
157 bool is_not_extinct_hex_2hhm2hl_2hmh0l_2000l(const Int4& h, const Int4& k, const Int4& l)
158 {
159 //hh-2hl : l = 2n, h-2hhl : l = 2n, -2hhhl : l = 2n, h-h0l : l = 2n, h0-hl : l = 2n, 0h-hl : l = 2n
160 if ( k == h && (l) % 2 !=0 ) return false;
161 if ( k == (-2 * h) && (l) % 2 !=0 ) return false;
162 if ( h == (-2 * k) && (l) % 2 !=0 ) return false;
163 if ( k == (-h) && (l) % 2 !=0 ) return false;
164 if ( k == 0 && (l) % 2 !=0 ) return false;
165 if ( h == 0 && (l) % 2 !=0 ) return false;
166 return true;
167 }
168 bool is_not_extinct_hex_2hmh0l(const Int4& h, const Int4& k, const Int4& l)
169 {
170 //h-h0l : l = 2n, h0-hl : l = 2n, 0h-hl : l = 2n
171 if ( k == (-h) && (l) % 2 !=0 ) return false;
172 if ( k == 0 && (l) % 2 !=0 ) return false;
173 if ( h == 0 && (l) % 2 !=0 ) return false;
174 return true;
175 }
176 bool is_not_extinct_2hhm2hl(const Int4& h, const Int4& k, const Int4& l)
177 {
178 //hh-2hl : l = 2n, h-2hhl : l = 2n, -2hhhl : l = 2n
179 if ( k == h && (l) % 2 !=0 ) return false;
180 if ( k == (-2 * h) && (l) % 2 !=0 ) return false;
181 if ( h == (-2 * k) && (l) % 2 !=0 ) return false;
182 return true;
183 }
184 //Tetragonal
185 bool is_not_extinct_400l(const Int4& h, const Int4& k, const Int4& l)
186 {
187 //00l:l=4n
188 if ( h == 0 && k == 0 && (l) % 4 !=0 ) return false;
189 return true;
190 }
191
192 bool is_not_extinct_200l(const Int4& h, const Int4& k, const Int4& l)
193 {
194 //00l:l=2n
195 if ( h == 0 && k == 0 && (l) % 2 !=0 ) return false;
196 return true;
197 }
198
199 bool is_not_extinct_2hk0_200l(const Int4& h, const Int4& k, const Int4& l)
200 {
201 //hk0 : h+k = 2n, 00l : l = 2n
202 if ( !is_not_extinct_200l(h, k, l) ) return false;
203 if ( l == 0 && (h + k) % 2 != 0) return false;
204 return true;
205 }
206
207 bool is_not_extinct_2h00_20k0(const Int4& h, const Int4& k, const Int4& l)
208 {
209 //h00 : h = 2n, 0k0 : k = 2n
210 if ( h % 2 != 0 && k == 0 && l == 0 ) return false;
211 if ( h == 0 && k % 2 != 0 && l == 0 ) return false;
212 return true;
213 }
214
215 bool is_not_extinct_400l_2h00_0k0(const Int4& h, const Int4& k, const Int4& l)
216 {
217 //00l : l = 4n, h00 : h = 2n, 0k0 : k = 2n
218 if ( !is_not_extinct_2h00_20k0(h, k, l) ) return false;
219 if ( h == 0 && k == 0 && (l) % 4 !=0 ) return false;
220 return true;
221 }
222 bool is_not_extinct_t_2h0l(const Int4& h, const Int4& k, const Int4& l)
223 {
224 //h0l : l = 2n, 0kl : l = 2n
225 if ( k == 0 && (l) % 2 !=0 ) return false;
226 if ( h == 0 && (l) % 2 !=0 ) return false;
227 return true;
228 }
229 bool is_not_extinct_t_2h0l_2h00(const Int4& h, const Int4& k, const Int4& l)
230 {
231 //h0l : l = 2n, 0kl : l = 2n, h00 : h = 2n, 0k0 : k = 2n
232 if ( !is_not_extinct_t_2h0l(h, k, l) ) return false;
233 if ( k == 0 && l == 0 && (h) % 2 !=0 ) return false;
234 if ( h == 0 && l == 0 && (k) % 2 !=0 ) return false;
235 return true;
236 }
237 bool is_not_extinct_t_2ph0l_2h00(const Int4& h, const Int4& k, const Int4& l)
238 {
239 //h0l : h+l = 2n, 0kl : k+l = 2n ,h00 : h = 2n, 0k0 : k = 2n
240 if ( k == 0 && (h + l) % 2 !=0 ) return false;
241 if ( h == 0 && (k + l) % 2 !=0 ) return false;
242 if ( k == 0 && l == 0 && (h) % 2 !=0 ) return false;
243 if ( h == 0 && l == 0 && (k) % 2 !=0 ) return false;
244 return true;
245 }
246
247 bool is_not_extinct_t_2h0l_2hhl(const Int4& h, const Int4& k, const Int4& l)
248 {
249 //h0l : l = 2n, 0kl : l = 2n, hhl : l = 2
250 if ( !is_not_extinct_t_2h0l(h, k, l) ) return false;
251 if ( k == h && (l) % 2 !=0 ) return false;
252 return true;
253 }
254 bool is_not_extinct_t_2hhl(const Int4& h, const Int4& k, const Int4& l)
255 {
256 //hhl : l = 2n
257 if ( k == h && (l) % 2 !=0 ) return false;
258 return true;
259 }
260
261 bool is_not_extinct_t_2h00_2h0l_2hhl(const Int4& h, const Int4& k, const Int4& l)
262 {
263 //h0l : h = 2n, 0kl : k = 2n, hhl : l = 2n, h00 : h = 2n, 0k0 : k = 2n
264 if ( k == 0 && l == 0 && (h) % 2 !=0 ) return false;
265 if ( h == 0 && l == 0 && (k) % 2 !=0 ) return false;
266 if ( k == 0 && (h) % 2 !=0 ) return false;
267 if ( h == 0 && (k) % 2 !=0 ) return false;
268 if ( k == h && (l) % 2 !=0 ) return false;
269 return true;
270 }
271
272 bool is_not_extinct_t_2h00_2hhl(const Int4& h, const Int4& k, const Int4& l)
273 {
274 //hhl : l = 2n, h00 : h = 2n, 0k0 : k = 2n
275 if ( k == 0 && l == 0 && (h) % 2 !=0 ) return false;
276 if ( h == 0 && l == 0 && (k) % 2 !=0 ) return false;
277 if ( k == h && (l) % 2 !=0 ) return false;
278 return true;
279 }
280 bool is_not_extinct_t_2phk0_2hhl(const Int4& h, const Int4& k, const Int4& l)
281 {
282 //hk0 : h+k = 2n, h0l : h+l = 2n, 0kl : k+l = 2n, hhl : l = 2n
283 if ( l == 0 && (h + k) % 2 !=0 ) return false;
284 if ( k == 0 && (h + l) % 2 !=0 ) return false;
285 if ( h == 0 && (l + k) % 2 !=0 ) return false;
286 if ( k == h && (l) % 2 !=0 ) return false;
287 return true;
288 }
289 bool is_not_extinct_t_2phk0_2h0l(const Int4& h, const Int4& k, const Int4& l)
290 {
291 //hk0 : h+k = 2n, h0l : h = 2n, 0kl : k = 2n
292 if ( l == 0 && (h + k) % 2 !=0 ) return false;
293 if ( k == 0 && (h) % 2 !=0 ) return false;
294 if ( h == 0 && (k) % 2 !=0 ) return false;
295 return true;
296 }
297 bool is_not_extinct_t_2ph0l_2hhl_2h00(const Int4& h, const Int4& k, const Int4& l)
298 {
299 //h0l : h+l = 2n, 0kl : k+l = 2n, hhl : l = 2n, h00 : h = 2n, 0k0 : k = 2n
300 if ( k == 0 && (h + l) % 2 !=0 ) return false;
301 if ( h == 0 && (l + k) % 2 !=0 ) return false;
302 if ( k == h && (l) % 2 !=0 ) return false;
303 if ( k == 0 && l == 0 && (h) % 2 !=0 ) return false;
304 if ( h == 0 && l == 0 && (k) % 2 !=0 ) return false;
305 return true;
306 }
307 bool is_not_extinct_t_2phk0(const Int4& h, const Int4& k, const Int4& l)
308 {
309 //hk0 : h+k = 2n
310 if ( l == 0 && (h + k) % 2 !=0 ) return false;
311 return true;
312 }
313 bool is_not_extinct_t_2phk0_2h0l_2hll(const Int4& h, const Int4& k, const Int4& l)
314 {
315 //hk0 : h+k = 2n, h0l : l = 2n, 0kl : l = 2n, hhl : l = 2n
316 if ( l == 0 && (h + k) % 2 !=0 ) return false;
317 if ( k == 0 && (l ) % 2 !=0 ) return false;
318 if ( h == 0 && (l ) % 2 !=0 ) return false;
319 if ( k == h && (l) % 2 !=0 ) return false;
320 return true;
321 }
322 bool is_not_extinct_t_2phk0_2hll(const Int4& h, const Int4& k, const Int4& l)
323 {
324 //hk0 : h+k = 2n, hhl : l = 2n
325 if ( l == 0 && (h + k) % 2 !=0 ) return false;
326 if ( k == h && (l) % 2 !=0 ) return false;
327 return true;
328 }
329 bool is_not_extinct_t_23phk0(const Int4& h, const Int4& k, const Int4& l)
330 {
331 //hk0 : h+k = 2n, h0l : h+l = 2n, 0kl : k+l = 2n
332 if ( l == 0 && (h + k) % 2 !=0 ) return false;
333 if ( k == 0 && (h + l) % 2 !=0 ) return false;
334 if ( h == 0 && (l + k) % 2 !=0 ) return false;
335 return true;
336 }
337 bool is_not_extinct_t_21phk0_2hhl(const Int4& h, const Int4& k, const Int4& l)
338 {
339 //hk0 : h+k = 2n, hhl : l = 2n
340 if ( l == 0 && (h + k) % 2 !=0 ) return false;
341 if ( k == h && (l) % 2 !=0 ) return false;
342 return true;
343 }
344
345 bool is_not_extinct_t_21phk0_2h0l(const Int4& h, const Int4& k, const Int4& l)
346 {
347 //hk0 : h+k = 2n, h0l : l = 2n, 0kl : l = 2n
348 if ( l == 0 && (h + k) % 2 !=0 ) return false;
349 if ( k == 0 && (l) % 2 !=0 ) return false;
350 if ( h == 0 && (l) % 2 !=0 ) return false;
351 return true;
352 }
353 bool is_not_extinct_t_21hk0_200l(const Int4& h, const Int4& k, const Int4& l)
354 {
355 //hk0 : h,k = 2n, 00l : l = 4n
356 if ( l == 0 && !(h % 2 == 0 && (k) % 2 == 0 ) ) return false;
357 if ( k == 0 && h == 0 && (l) % 4 !=0 ) return false;
358 return true;
359 }
360 bool is_not_extinct_t_2ah0l(const Int4& h, const Int4& k, const Int4& l)
361 {
362 //h0l : h, l = 2n, 0kl : k, l = 2n
363 if ( k == 0 && !(h % 2 == 0 && (l) % 2 == 0 ) ) return false;
364 if ( h == 0 && !(k % 2 == 0 && (l) % 2 == 0 ) ) return false;
365 return true;
366 }
367 bool is_not_extinct_t_4phhl_2hmh0(const Int4& h, const Int4& k, const Int4& l)
368 {
369 //hhl : 2h+l = 4n, h-h0 : h = 2n
370 if ( k == h && (2 * h + l) % 4 !=0 ) return false;
371 if ( l == 0 && k == -h && h % 2 !=0 ) return false;
372 return true;
373 }
374 bool is_not_extinct_t_4phhl_2hmh0_2ah0l(const Int4& h, const Int4& k, const Int4& l)
375 {
376 //hhl : 2h+l = 4n, h-h0 : h = 2n, h0l : h, l = 2n, 0kl : k, l = 2n
377 if ( k == h && (2 * h + l) % 4 !=0 ) return false;
378 if ( l == 0 && k == -h && h % 2 !=0 ) return false;
379 if ( k == 0 && !(h % 2 == 0 && (l) % 2 == 0 ) ) return false;
380 if ( h == 0 && !(k % 2 == 0 && (l) % 2 == 0 ) ) return false;
381 return true;
382 }
383 bool is_not_extinct_t_2hk0_4phhl(const Int4& h, const Int4& k, const Int4& l)
384 {
385 //hk0 : h,k = 2n, hhl : 2h+l = 4n
386 if ( l == 0 && !(h % 2 == 0 && (k) % 2 == 0 ) ) return false;
387 if ( k == h && (2 * h + l) % 4 !=0 ) return false;
388 return true;
389 }
390 bool is_not_extinct_t_23ahk0_4phhl(const Int4& h, const Int4& k, const Int4& l)
391 {
392 //hk0 : h,k = 2n, h0l : h, l = 2n, 0kl : k, l = 2n, hhl : 2h+l = 4n
393 if ( l == 0 && !(h % 2 == 0 && (k) % 2 == 0 ) ) return false;
394 if ( k == 0 && !(h % 2 == 0 && (l) % 2 == 0 ) ) return false;
395 if ( h == 0 && !(l % 2 == 0 && (k) % 2 == 0 ) ) return false;
396 if ( k == h && (2 * h + l) % 4 !=0 ) return false;
397 return true;
398 }
399 bool is_not_extinct_rhom_2hhl(const Int4& h, const Int4& k, const Int4& l)
400 {
401 //hhl : l = 2n, hkh: k = 2n, hkk : h = 2n
402 if ( k == h && l % 2 != 0 ) return false;
403 if ( l == h && k % 2 != 0 ) return false;
404 if ( l == k && h % 2 != 0 ) return false;
405 return true;
406 }
407
408 bool is_not_extinct_rhom_hex_2hmh0l(const Int4& h, const Int4& k, const Int4& l)
409 {
410 // h-h0l : l = 2n, h0-hl : l = 2n, 0h-hl : l = 2n
411 if ( k == - h && l % 2 != 0 ) return false;
412 if ( k == 0 && l % 2 != 0 ) return false;
413 if ( h == 0 && l % 2 != 0 ) return false;
414 return true;
415 }
416
417 //Monoclinic P
418 bool is_not_extinct_mono_2h00(const Int4& h, const Int4& k, const Int4& l)
419 {
420 // h00:h=2n
421 if ( k == 0 && l == 0 && h % 2 != 0 ) return false;
422 return true;
423 }
424 bool is_not_extinct_mono_20k0(const Int4& h, const Int4& k, const Int4& l)
425 {
426 // 0k0:k=2n
427 if ( h == 0 && l == 0 && k % 2 != 0 ) return false;
428 return true;
429 }
430 bool is_not_extinct_mono_200l(const Int4& h, const Int4& k, const Int4& l)
431 {
432 // 00l:l=2n
433 if ( h == 0 && k == 0 && l % 2 != 0 ) return false;
434 return true;
435 }
436 bool is_not_extinct_mono_20kl(const Int4& h, const Int4& k, const Int4& l)
437 {
438 // 0kl:k=2n
439 if ( h == 0 && k % 2 != 0 ) return false;
440 return true;
441 }
442 bool is_not_extinct_mono_2h0l(const Int4& h, const Int4& k, const Int4& l)
443 {
444 // h0l:l=2n
445 if ( k == 0 && l % 2 != 0 ) return false;
446 return true;
447 }
448 bool is_not_extinct_mono_2hk0(const Int4& h, const Int4& k, const Int4& l)
449 {
450 // hk0:h=2n
451 if ( l == 0 && h % 2 != 0 ) return false;
452 return true;
453 }
454 bool is_not_extinct_mono_2l0kl(const Int4& h, const Int4& k, const Int4& l)
455 {
456 // 0kl:l=2n
457 if ( h == 0 && l % 2 != 0 ) return false;
458 return true;
459 }
460 bool is_not_extinct_mono_2hh0l(const Int4& h, const Int4& k, const Int4& l)
461 {
462 // h0l:h=2n
463 if ( k == 0 && h % 2 != 0 ) return false;
464 return true;
465 }
466 bool is_not_extinct_mono_2khk0(const Int4& h, const Int4& k, const Int4& l)
467 {
468 // hk0:k=2n
469 if ( l == 0 && k % 2 != 0 ) return false;
470 return true;
471 }
472 bool is_not_extinct_mono_2hk0_200l(const Int4& h, const Int4& k, const Int4& l)
473 {
474 // hk0:h=2n, 00l : l = 2n
475 if ( l == 0 && h % 2 != 0 ) return false;
476 if ( h == 0 && k == 0 && l % 2 != 0 ) return false;
477 return true;
478 }
479 bool is_not_extinct_mono_2phk0_200l(const Int4& h, const Int4& k, const Int4& l)
480 {
481 // hk0:h+k=2n, 00l : l = 2n
482 if ( l == 0 && ( h + k ) % 2 != 0 ) return false;
483 if ( h == 0 && k == 0 && l % 2 != 0 ) return false;
484 return true;
485 }
486 bool is_not_extinct_mono_2dhk0_200l(const Int4& h, const Int4& k, const Int4& l)
487 {
488 // hk0:k=2n, 00l : l = 2n
489 if ( l == 0 && k % 2 != 0 ) return false;
490 if ( h == 0 && k == 0 && l % 2 != 0 ) return false;
491 return true;
492 }
493 bool is_not_extinct_mono_2p0kl(const Int4& h, const Int4& k, const Int4& l)
494 {
495 // 0kl:k+l=2n
496 if ( h == 0 && (k + l) % 2 != 0 ) return false;
497 return true;
498 }
499 bool is_not_extinct_mono_2ph0l(const Int4& h, const Int4& k, const Int4& l)
500 {
501 // h0l:h+l=2n
502 if ( k == 0 && ( h + l ) % 2 != 0 ) return false;
503 return true;
504 }
505 bool is_not_extinct_mono_2phk0(const Int4& h, const Int4& k, const Int4& l)
506 {
507 // hk0:h+k=2n
508 if ( l == 0 && ( h + k ) % 2 != 0 ) return false;
509 return true;
510 }
511 bool is_not_extinct_mono_2h0l_20k0(const Int4& h, const Int4& k, const Int4& l)
512 {
513 //h0l : l = 2n, 0k0 : k = 2n
514 if ( k == 0 && l % 2 != 0 ) return false;
515 if ( h == 0 && l == 0 && k % 2 != 0 ) return false;
516 return true;
517 }
518 bool is_not_extinct_mono_2ph0l_20k0(const Int4& h, const Int4& k, const Int4& l)
519 {
520 //h0l : h + l = 2n, 0k0 : k = 2n
521 if ( k == 0 && ( h +l ) % 2 != 0 ) return false;
522 if ( h == 0 && l == 0 && k % 2 != 0 ) return false;
523 return true;
524 }
525 bool is_not_extinct_mono_2dh0l_20k0(const Int4& h, const Int4& k, const Int4& l)
526 {
527 //h0l : h = 2n, 0k0 : k = 2n
528 if ( k == 0 && h % 2 != 0 ) return false;
529 if ( h == 0 && l == 0 && k % 2 != 0 ) return false;
530 return true;
531 }
532 bool is_not_extinct_mono_20kl_2h00(const Int4& h, const Int4& k, const Int4& l)
533 {
534 //0kl : k = 2n, h00 : h = 2n
535 if ( h == 0 && k % 2 != 0 ) return false;
536 if ( k == 0 && l == 0 && h % 2 != 0 ) return false;
537 return true;
538 }
539 bool is_not_extinct_mono_2d0kl_2h00(const Int4& h, const Int4& k, const Int4& l)
540 {
541 //0kl : l = 2n, h00 : h = 2n
542 if ( h == 0 && l % 2 != 0 ) return false;
543 if ( k == 0 && l == 0 && h % 2 != 0 ) return false;
544 return true;
545 }
546 bool is_not_extinct_mono_2p0kl_20k0(const Int4& h, const Int4& k, const Int4& l)
547 {
548 //0kl : k + l = 2n, 0k0 : k = 2n
549 if ( h == 0 && ( k + l ) % 2 != 0 ) return false;
550 if ( h == 0 && l == 0 && k % 2 != 0 ) return false;
551 return true;
552 }
553 //Orthorhombic
554 bool is_not_extinct_orth_2dh00(const Int4& h, const Int4& k, const Int4& l)
555 {
556 //h00 : h = 2n, 0k0 : k = 2n, 00l : l = 2n
557 if ( h == 0 && l == 0 && k % 2 != 0 ) return false;
558 if ( k == 0 && l == 0 && h % 2 != 0 ) return false;
559 if ( h == 0 && k == 0 && l % 2 != 0 ) return false;
560 return true;
561 }
562 bool is_not_extinct_orth_23phk0(const Int4& h, const Int4& k, const Int4& l)
563 {
564 //hk0:h+k=2n,h0l:h+l=2n,0kl:k+l=2n
565 if ( l == 0 && ( h + k ) % 2 != 0 ) return false;
566 if ( k == 0 && ( h + l ) % 2 != 0 ) return false;
567 if ( h == 0 && ( k + l ) % 2 != 0 ) return false;
568 return true;
569 }
570 bool is_not_extinct_orth_2d30kl(const Int4& h, const Int4& k, const Int4& l)
571 {
572 //0kl : k = 2n,������ h0l : l = 2n, ������ hk0 : h = 2n
573 if ( h == 0 && k % 2 != 0 ) return false;
574 if ( k == 0 && l % 2 != 0 ) return false;
575 if ( l == 0 && h % 2 != 0 ) return false;
576 return true;
577 }
578 bool standard_function_for_abc(const Int4& h, const Int4& k, const Int4& l)
579 {
580 //0kl:l = 2n, h0l:l=2n, hk0:h+k=2n
581 if ( h == 0 && l % 2 != 0 ) return false;
582 if ( k == 0 && l % 2 != 0 ) return false;
583 if ( l == 0 && ( h + k ) % 2 != 0 ) return false;
584 return true;
585 }
586 bool standard_function2_for_abc(const Int4& h, const Int4& k, const Int4& l)
587 {
588 //h0l:l=2n
589 if ( k == 0 && l % 2 != 0 ) return false;
590 return true;
591 }
592 bool standard_function_for_abc_200l(const Int4& h, const Int4& k, const Int4& l)
593 {
594 //00l:l = 2n
595 if ( h == 0 && k == 0 && l % 2 != 0 ) return false;
596 return true;
597 }
598 bool standard_function_for_abc_22h00(const Int4& h, const Int4& k, const Int4& l)
599 {
600 // h00 : k = 2n, 0k0 : k = 2n.
601 if ( h == 0 && l == 0 && k % 2 != 0 ) return false;
602 if ( k == 0 && l == 0 && h % 2 != 0 ) return false;
603 return true;
604 }
605 bool standard_function_for_abc_220kl(const Int4& h, const Int4& k, const Int4& l)
606 {
607 //0kl : l = 2n, h0l : l = 2n
608 if ( h == 0 && l % 2 != 0 ) return false;
609 if ( k == 0 && l % 2 != 0 ) return false;
610 return true;
611 }
612 bool standard_function_for_abc_2d20kl(const Int4& h, const Int4& k, const Int4& l)
613 {
614 //0kl : k = 2n, h0l : h = 2n
615 if ( h == 0 && k % 2 != 0 ) return false;
616 if ( k == 0 && h % 2 != 0 ) return false;
617 return true;
618 }
619 bool standard_function_for_abc_2p20kl(const Int4& h, const Int4& k, const Int4& l)
620 {
621 //0kl : k+l = 2n h0l : h+l = 2n
622 if ( h == 0 && ( k + l ) % 2 != 0 ) return false;
623 if ( k == 0 && ( h + l ) % 2 != 0 ) return false;
624 return true;
625 }
626 bool standard_function_for_abc_220kl_2phk0(const Int4& h, const Int4& k, const Int4& l)
627 {
628 //0kl : k = 2n, ������������ h0l : h = 2n, ������������ hk0 : h+k = 2n
629 if ( h == 0 && k % 2 != 0 ) return false;
630 if ( k == 0 && h % 2 != 0 ) return false;
631 if ( l == 0 && ( h + k ) % 2 != 0 ) return false;
632 return true;
633 }
634 bool standard_function2_for_abc_22d0kl(const Int4& h, const Int4& k, const Int4& l)
635 {
636 //0kl : l = 2n, h0l : h = 2n
637 if ( h == 0 && l % 2 != 0 ) return false;
638 if ( k == 0 && h % 2 != 0 ) return false;
639 return true;
640 }
641 bool standard_function2_for_abc_22dd0kl(const Int4& h, const Int4& k, const Int4& l)
642 {
643 //0kl : k = 2n, h0l : l = 2n
644 if ( h == 0 && k % 2 != 0 ) return false;
645 if ( k == 0 && l % 2 != 0 ) return false;
646 return true;
647 }
648 bool standard_function2_for_abc_2p0kl_2h0l(const Int4& h, const Int4& k, const Int4& l)
649 {
650 //0kl: k+l=2n , h0l: l=2n
651 if ( h == 0 && ( k + l ) % 2 != 0 ) return false;
652 if ( k == 0 && l % 2 != 0 ) return false;
653 return true;
654 }
655 bool standard_function2_for_abc_2ph0l_2hk0(const Int4& h, const Int4& k, const Int4& l)
656 {
657 //h0l: h+l=2n , hk0: h=2n
658 if ( k == 0 && ( h + l ) % 2 != 0 ) return false;
659 if ( l == 0 && h % 2 != 0 ) return false;
660 return true;
661 }
662 bool standard_function2_for_abc_2ph0l(const Int4& h, const Int4& k, const Int4& l)
663 {
664 //h0l: h+l=2n
665 if ( k == 0 && ( h + l ) % 2 != 0 ) return false;
666 return true;
667 }
668 bool standard_function2_for_abc_2p0kl_2dh0l(const Int4& h, const Int4& k, const Int4& l)
669 {
670 //0kl : k+l = 2n, h0l : h = 2n
671 if ( h == 0 && ( k + l ) % 2 != 0 ) return false;
672 if ( k == 0 && h % 2 != 0 ) return false;
673 return true;
674 }
675 bool standard_function2_for_abc_22p0kl_2hk0(const Int4& h, const Int4& k, const Int4& l)
676 {
677 //0kl : k+l = 2n ,������������ h0l : h+l = 2n, hk0 : h = 2n
678 if ( h == 0 && ( k + l ) % 2 != 0 ) return false;
679 if ( k == 0 && ( h + l ) % 2 != 0 ) return false;
680 if ( l == 0 && h % 2 != 0 ) return false;
681 return true;
682 }
683 bool standard_function2_for_abc_230kl(const Int4& h, const Int4& k, const Int4& l)
684 {
685 //0kl : l = 2, ������������ h0l : l = 2n , ������hk0 : h = 2n
686 if ( h == 0 && l % 2 != 0 ) return false;
687 if ( k == 0 && l % 2 != 0 ) return false;
688 if ( l == 0 && h % 2 != 0 ) return false;
689 return true;
690 }
691 bool standard_function2_for_abc_220kl_2phk0(const Int4& h, const Int4& k, const Int4& l)
692 {
693 //0kl : k = 2n, ������h0l : l = 2n, ������ hk0 : h+k = 2n
694 if ( h == 0 && k % 2 != 0 ) return false;
695 if ( k == 0 && l % 2 != 0 ) return false;
696 if ( l == 0 && ( h + k ) % 2 != 0 ) return false;
697 return true;
698 }
699 bool standard_function_for_abc_210kl(const Int4& h, const Int4& k, const Int4& l)
700 {
701 //0kl : l = 2n
702 if ( h == 0 && l % 2 != 0 ) return false;
703 return true;
704 }
705 bool standard_function_for_abc_2ahk0(const Int4& h, const Int4& k, const Int4& l)
706 {
707 //hk0 : h,k = 2n
708 if ( l == 0 && !( h % 2 == 0 && k % 2 == 0 ) ) return false;
709 return true;
710 }
711 bool standard_function_for_abc_2ahk0_20kl(const Int4& h, const Int4& k, const Int4& l)
712 {
713 //hk0 : h, k = 2n, 0kl : l = 2n
714 if ( l == 0 && !( h % 2 == 0 && k % 2 == 0 ) ) return false;
715 if ( h == 0 && l % 2 != 0 ) return false;
716 return true;
717 }
718 bool standard_function_for_abc_2ahk0_2h0l(const Int4& h, const Int4& k, const Int4& l)
719 {
720 //hk0 : h, k = 2n, h0l : l = 2n
721 if ( l == 0 && !( h % 2 == 0 && k % 2 == 0 ) ) return false;
722 if ( k == 0 && l % 2 != 0 ) return false;
723 return true;
724 }
725 bool standard_function_for_abc_220kl_2ahk0(const Int4& h, const Int4& k, const Int4& l)
726 {
727 //0kl : l = 2n, ������ h0l : l = 2n, hk0 : h,k = 2n
728 if ( h == 0 && l % 2 != 0 ) return false;
729 if ( k == 0 && l % 2 != 0 ) return false;
730 if ( l == 0 && !( h % 2 == 0 && k % 2 == 0 ) ) return false;
731 return true;
732 }
733 bool standard_function_for_abc_42p0kl(const Int4& h, const Int4& k, const Int4& l)
734 {
735 //0kl : k+l = 4n, h0l : h+l = 4n
736 if ( h == 0 && ( k+l) % 4 != 0 ) return false;
737 if ( k == 0 && ( h+l) % 4 != 0 ) return false;
738 return true;
739 }
740 bool standard_function_for_abc_43p0kl(const Int4& h, const Int4& k, const Int4& l)
741 {
742 //0kl : k+l = 4n, h0l : h+l = 4n, hk0 : h+k = 4n
743 if ( h == 0 && ( k+l) % 4 != 0 ) return false;
744 if ( k == 0 && ( h+l) % 4 != 0 ) return false;
745 if ( l == 0 && ( h+k) % 4 != 0 ) return false;
746 return true;
747 }
748 bool standard_function_for_abc_2a0kl(const Int4& h, const Int4& k, const Int4& l)
749 {
750 //0kl : k,l = 2n h0l : h,l = 2n
751 if ( h == 0 && !( k % 2 == 0 && l % 2 == 0 ) ) return false;
752 if ( k == 0 && !( h % 2 == 0 && l % 2 == 0 ) ) return false;
753 return true;
754 }
755 bool standard_function_for_abc_2ah0l(const Int4& h, const Int4& k, const Int4& l)
756 {
757 //h0l : h,l = 2n
758 if ( k == 0 && !( h % 2 == 0 && l % 2 == 0 ) ) return false;
759 return true;
760 }
761 bool standard_function_for_abc_23a0kl(const Int4& h, const Int4& k, const Int4& l)
762 {
763 //0kl : k, l = 2n h0l : h, l = 2n hk0 : h,k = 2n
764 if ( h == 0 && !( k % 2 == 0 && l % 2 == 0 ) ) return false;
765 if ( k == 0 && !( h % 2 == 0 && l % 2 == 0 ) ) return false;
766 if ( l == 0 && !( h % 2 == 0 && k % 2 == 0 ) ) return false;
767 return true;
768 }
769 bool special_reflection_conditions_3h_4phkl(const Int4& h, const Int4& k, const Int4& l)
770 {
771 // (A,face) hkl : h=2n+1 or h+k+l=4n
772 if( (h+k+l-2) % 4 == 0 ) return false;
773 return true;
774 }
775 bool special_reflection_conditions_3l_4p2hl(const Int4& h, const Int4& k, const Int4& l)
776 {
777 // (A,body) hkl : l=2n+1 or 2h+l=4n
778 if( (2*h+l-2) % 4 == 0 ) return false;
779 return true;
780 }
781 bool special_reflection_conditions_3h_6ahkl_4ahkl(const Int4& h, const Int4& k, const Int4& l)
782 {
783 // (B,face) hkl:h=2n+1 or h,k,l=4n+2 or h,k,l=4n
784 if( h % 2 == 0 && !( (h - k) % 4 == 0 && (k - l) % 4 == 0 ) ) return false;
785 return true;
786 }
787 bool special_reflection_conditions_3l_2ahk_4phkl(const Int4& h, const Int4& k, const Int4& l)
788 {
789 // (B,body) hkl : l=2n+1or h,k=2n, h+k+l=4n
790 if( l % 2 == 0 )
791 {
792 if( h % 2 != 0 ) return false;
793 if( (h + k + l) % 4 != 0 ) return false;
794 }
795 return true;
796 }
797 bool special_reflection_conditions_3l_2h(const Int4& h, const Int4& k, const Int4& l)
798 {
799 // (C) hkl : l=2n+1 or h=2n
800 if( h % 2 != 0 && l % 2 == 0 ) return false;
801 return true;
802 }
803 bool special_reflection_conditions_2l_3shk_3s2hk(const Int4& h, const Int4& k, const Int4& l)
804 {
805 // (D) hkil : l=2n or h-k=3n+1 or h-k=3n+2
806 if( (h - k) % 3 == 0 && l % 2 != 0 ) return false;
807 return true;
808 }
809 bool special_reflection_conditions_oddh_oddk_3lhkil(const Int4& h, const Int4& k, const Int4& l)
810 {
811 // (E) hkil : h=2n+1 or k=2n+1 or l=3n
812 if( h % 2 == 0 && k % 2 == 0 && l % 3 != 0 ) return false;
813 return true;
814 }
815 bool special_reflection_conditions_2h_2k_2hhl_2hkh_2hkk(const Int4& h, const Int4& k, const Int4& l)
816 {
817 // (F) hkl: h=2n or k=2n or l=2n, hhl: l=2n, hkh: k=2n, hkk: h=2n
818 if( k == l && h % 2 != 0 ) return false;
819 if( h == l && k % 2 != 0 ) return false;
820 if( h == k && l % 2 != 0 ) return false;
821 if( h % 2 != 0 && k % 2 != 0 && l % 2 != 0 ) return false;
822 return true;
823 }
824 bool special_reflection_conditions_2h_2k_2lhkl(const Int4& h, const Int4& k, const Int4& l)
825 {
826 // (F) hkl: h=2n or k=2n or l=2n
827 if( h % 2 != 0 && k % 2 != 0 && l % 2 != 0 ) return false;
828 return true;
829 }
830 bool special_reflection_conditions_oddh_oddk_oddl_4phkl(const Int4& h, const Int4& k, const Int4& l)
831 {
832 // (F) hkl: h=2n+1 or k=2n+1 or l=2n+1 or h+k+l=4n
833 if( h % 2 == 0 && k % 2 == 0 && l % 2 == 0 && (h+k+l) % 4 != 0) return false;
834 return true;
835 }
836 bool special_reflection_conditions_2phkl_oddhkl_4hkl_6hkl(const Int4& h, const Int4& k, const Int4& l)
837 {
838 // (G) hkl:h+k+l=2n or either one of h, k, l is 2n+1, 4n and 4n+2
839 if( (h+k+l) % 2 != 0 )
840 {
841 if( h % 4 != 0 && k % 4 != 0 && l % 4 != 0 ) return false;
842 if( (h-2) % 4 != 0 && (k-2) % 4 != 0 && (l-2) % 4 != 0 ) return false;
843 }
844 return true;
845 }
846 bool special_reflection_conditions_22hkl_2oddhkl_4k_6l_6ahkl_4hkl(const Int4& h, const Int4& k, const Int4& l)
847 {
848 // (H) hkl: two of h,k,l are odd or either one of h,k,l is 2n+1,k=4n and l=4n+2 or h,k,l=4n+2 or h,k,l=4n
849 const Int4 num_odd = (abs(h) % 2) + (abs(k) % 2) + (abs(l) % 2);
850 if( num_odd < 1 )
851 {
852 if( (h - k) % 4 != 0 || (k - l) % 4 != 0 ) return false;
853 }
854 else if( num_odd < 2 )
855 {
856 if( h % 4 != 0 && k % 4 != 0 && l % 4 != 0 ) return false;
857 if( (h - 2) % 4 != 0 && (k - 2) % 4 != 0 && (l - 2) % 4 != 0 ) return false;
858 }
859 return true;
860 }
861 bool special_reflection_conditions_oddh_6ahkl_4ahkl(const Int4& h, const Int4& k, const Int4& l)
862 {
863 // (I) hkl:h=2n+1 or h,k,l=4n+2 or h,k,l=4n
864 if( h % 2 == 0 && k % 2 == 0 && l % 2 == 0 )
865 {
866 if( (h - k) % 4 != 0 || (k - l) % 4 != 0 ) return false;
867 }
868 return true;
869 }
870 bool special_reflection_conditions_2ahkl_4phkl_8h_12k_6phkl_oddahk_9ahk_4l_11ahk_4l_9h_7k_4l_11h(const Int4& h, const Int4& k, const Int4& l)
871 {
872 // (J) hkl:h,k,l=2n,h+k+l=4n or h=8n, k=8n+4 and h+k+l=4n+2 or h,k=2n+1, l=4n+2 or h,k=8n+1, l=4n or h,k=8n+3,
873 //l=4n or h=8n+1, k=8n-1, l=4n or h=8n+3, k=8n-3, l=4n
874 if( h % 2 == 0 )
875 {
876 if( k % 2 == 0 ) // All even
877 {
878 if( (h + k + l) % 4 != 0 )
879 { // h+k+l = 4n+2
880 if( h % 8 != 0 && k % 8 != 0 && l % 8 != 0 ) return false;
881 if( (h - 4) % 8 != 0 && (k - 4) % 8 != 0 && (l - 4) % 8 != 0 ) return false;
882 }
883 }
884 else // k, l are odd
885 {
886 if( h % 4 == 0 && (k + l) % 8 != 0 && !( (k - l) % 8 == 0 && abs(k) % 8 < 4 ) ) return false;
887 }
888 }
889 else if( k % 2 == 0 ) // h, l are odd
890 {
891 if( k % 4 == 0 && (h + l) % 8 != 0 && !( (h - l) % 8 == 0 && abs(h) % 8 < 4 ) ) return false;
892 }
893 else // h, k are odd
894 {
895 if( l % 4 == 0 && (h + k) % 8 != 0 && !( (h - k) % 8 == 0 && abs(h) % 8 < 4 ) ) return false;
896 }
897
898 return true;
899 }
900 bool special_reflection_conditions_2hk_4phkl_8h_12k_6phkl_oddahk_6l_9h_11k_4l_15h_13k_9h_14k_4l_15h_11k_4l(const Int4& h, const Int4& k, const Int4& l)
901 {
902 // (J2) hkl:h,k=2n,h+k+l=4n or h=8n, k=8n+4 and h+k+l=4n+2 or h,k=2n+1, l=4n+2 or h=8n+1, k=8n+3, l=4n
903 //or h=8n+7, k=8n+5, l=4n or h=8n+1, k=8n+5, l=4n or h=8n+7, k=8n+3, l=4n
904 if( h % 2 == 0 )
905 {
906 if( k % 2 == 0 ) // All even
907 {
908 if( (h + k + l) % 4 != 0 )
909 { // h+k+l = 4n+2
910 if( h % 8 != 0 && k % 8 != 0 && l % 8 != 0 ) return false;
911 if( (h - 4) % 8 != 0 && (k - 4) % 8 != 0 && (l - 4) % 8 != 0 ) return false;
912 }
913 }
914 else // k, l are odd
915 {
916 if( h % 4 == 0 && (k - l - 4) % 8 != 0 && (k + l - 4) % 8 == 0 ) return false;
917 }
918 }
919 else if( k % 2 == 0 ) // h, l are odd
920 {
921 if( k % 4 == 0 && (h - l - 4) % 8 != 0 && (h + l - 4) % 8 != 0 ) return false;
922 }
923 else // h, k are odd
924 {
925 if( l % 4 == 0 && (h - k - 4) % 8 != 0 && (h + k - 4) % 8 != 0 ) return false;
926 }
927 return true;
928 }
929 bool special_reflection_conditions_oddh_4h_oddh_4phkl_hhl(const Int4& h, const Int4& k, const Int4& l)
930 {
931 // (K) hkl: h=2n+1 or h=4n, hhl: h=2n+1 or h+k+l=4n
932 if( h % 2 == 0 && k % 2 == 0 && l % 2 == 0 )
933 {
934 if( ( h == k || k == l || h == l ) && (h + k + l) % 4 != 0 ) return false;
935 if( (h - 2) % 4 == 0 && (k - 2) % 4 == 0 && (l - 2) % 4 == 0 ) return false;
936 }
937 return true;
938 }
939 bool special_reflection_conditions_oddh_oddk_oddl_4hkl(const Int4& h, const Int4& k, const Int4& l)
940 {
941 // (K) hkl: h=2n+1 or k=2n+1 or l=2n+1 or h=4n or k=4n or l=4n
942 if( (h - 2) % 4 == 0 && (k - 2) % 4 == 0 && (l - 2) % 4 == 0 ) return false;
943 return true;
944 }
945 bool special_reflection_conditions_4phl_4pkh_4plk_4plh_4phk_4pkl(const Int4& h, const Int4& k, const Int4& l)
946 {
947 // (L) hkl: 2h+l=4n or 2k+h=4n or 2l+k=4n or 2l+h=4n or 2h+k=4n or 2k+l=4n
948 //(Equivalently, {u_1,u_2,u_3\} mod 4 != {0,1,1}, {0,1,3}, {0,3,3}, {2,2,2})
949 if( h % 2 != 0 )
950 { // two odds and one even
951 if( k % 4 != 0 && l % 4 != 0 ) return false;
952 }
953 else if( k % 2 != 0 )
954 { // only h is even
955 if( h % 4 != 0 ) return false;
956 }
957 else
958 { // all even
959 if( (h - 2) % 4 != 0 || (k - 2) % 4 != 0 || (l - 2) % 4 != 0 ) return false;
960 }
961 return true;
962 }
963 bool special_reflection_conditions_2ahk_4phkl_oddahk_6l_8h_12k_6phkl(const Int4& h, const Int4& k, const Int4& l)
964 {
965 // (M) hkl: h,k=2n, h+k+l=4n or h,k=2n+1, l=4n+2 or h=8n, k=8n+4 and h+k+l=4n+2
966 if( h % 2 != 0 )
967 { // two odds and one even
968 if( (k - 2) % 4 != 0 && (l - 2) % 4 != 0 ) return false;
969 }
970 else if( k % 2 != 0 )
971 { // only h is even
972 if( (h - 2) % 4 != 2 ) return false;
973 }
974 else
975 { // all even
976 if( (h + k + l) % 2 != 0 ) return false;
977 // if( (h + k + l) % 4 != 0 )
978 // {
979 if( h % 8 != 0 && k % 8 != 0 && l % 8 != 0 ) return false;
980 if( (h - 4) % 8 != 0 && (k - 4) % 8 != 0 && (l - 4) % 8 != 0 ) return false;
981 // }
982 }
983
984 return true;
985 }
986 bool special_reflection_conditions_oddahk_6l_4ahkl(const Int4& h, const Int4& k, const Int4& l)
987 {
988 // (N) hkl: h,k=2n+1, l=4n+2 or h,k,l=4n
989 if( h % 2 != 0 )
990 { // two odds and one even
991 if( (k - 2) % 4 != 0 && (l - 2) % 4 != 0 ) return false;
992 }
993 else if( k % 2 != 0 )
994 { // only h is even
995 if( (h - 2) % 4 != 0 ) return false;
996 }
997 else
998 { // all even
999 if( h % 4 != 0 || k % 4 != 0 || l % 4 != 0 ) return false;
1000 }
1001 return true;
1002 }
1003
1004 static const Int4 DATA_NUM_CUBIC_F = 7;
1005 static const Int4 DATA_NUM_CUBIC_I = 13;
1006 static const Int4 DATA_NUM_CUBIC_P = 12;
1007 static const Int4 DATA_NUM_HEXAGONAL = 9;
1008 static const Int4 DATA_NUM_TETRAGONAL_P = 23;
1009 static const Int4 DATA_NUM_TETRAGONAL_I = 11;
1010 static const Int4 DATA_NUM_ORTHORHOMBIC_P =71 ; //95;
1011 static const Int4 DATA_NUM_ORTHORHOMBIC_C =9;
1012 static const Int4 DATA_NUM_ORTHORHOMBIC_F =7;
1013 static const Int4 DATA_NUM_ORTHORHOMBIC_I =8;
1014 static const Int4 DATA_NUM_RHOMBOHEDRAL_RHOM_AXIS = 2;
1015 static const Int4 DATA_NUM_RHOMBOHEDRAL_HEX_AXIS = 2;
1016 static const Int4 DATA_NUM_MONOCLINIC_P_A_AXIS =8;
1017 static const Int4 DATA_NUM_MONOCLINIC_P_B_AXIS =8;
1018 static const Int4 DATA_NUM_MONOCLINIC_P_C_AXIS =8;
1019 static const Int4 DATA_NUM_MONOCLINIC_B_A_AXIS =2;
1020 static const Int4 DATA_NUM_MONOCLINIC_B_B_AXIS =2;
1021 static const Int4 DATA_NUM_MONOCLINIC_B_C_AXIS =2;
1022 static const Int4 DATA_NUM_TRICLINIC =1;
1023
1024
1025 Int4 putNumberOfTypesOfSystematicAbsences(const BravaisType& type)
1026 {
1027 if( type.enumBravaisType() == Cubic_F )
1028 {
1029 return DATA_NUM_CUBIC_F;
1030 }
1031 if( type.enumBravaisType() == Cubic_I )
1032 {
1033 return DATA_NUM_CUBIC_I;
1034 }
1035 if ( type.enumBravaisType() == Cubic_P )
1036 {
1037 return DATA_NUM_CUBIC_P;
1038 }
1039 if ( type.enumBravaisType() == Hexagonal )
1040 {
1041 return DATA_NUM_HEXAGONAL;
1042 }
1043 if ( type.enumBravaisType() == Tetragonal_P )
1044 {
1045 return DATA_NUM_HEXAGONAL;
1046 }
1047 if ( type.enumBravaisType() == Tetragonal_I )
1048 {
1049 return DATA_NUM_HEXAGONAL;
1050 }
1051 if ( type.enumBravaisType() == Rhombohedral )
1052 {
1053 if( type.enumRHaxis() == Rho_Axis )
1054 {
1055 return DATA_NUM_RHOMBOHEDRAL_RHOM_AXIS;
1056 }
1057 if( type.enumRHaxis() == Hex_Axis )
1058 {
1059 return DATA_NUM_RHOMBOHEDRAL_HEX_AXIS;
1060 }
1061 }
1062 if ( type.enumBravaisType() == Orthorhombic_P )
1063 {
1064 return DATA_NUM_ORTHORHOMBIC_P;
1065 }
1066 if ( type.enumBravaisType() == Orthorhombic_C )
1067 {
1068 return DATA_NUM_ORTHORHOMBIC_C;
1069 }
1070 if ( type.enumBravaisType() == Orthorhombic_F )
1071 {
1072 return DATA_NUM_ORTHORHOMBIC_F;
1073 }
1074 if ( type.enumBravaisType() == Orthorhombic_I )
1075 {
1076 return DATA_NUM_ORTHORHOMBIC_I;
1077 }
1078 if ( type.enumBravaisType() == Monoclinic_P )
1079 {
1080 if( type.enumABCaxis() == A_Axis )
1081 {
1082 return DATA_NUM_MONOCLINIC_P_A_AXIS;
1083 }
1084 if( type.enumABCaxis() == B_Axis )
1085 {
1086 return DATA_NUM_MONOCLINIC_P_B_AXIS;
1087 }
1088 if( type.enumABCaxis() == C_Axis )
1089 {
1090 return DATA_NUM_MONOCLINIC_P_C_AXIS;
1091 }
1092 }
1093 if ( type.enumBravaisType() == Monoclinic_B )
1094 {
1095 if( type.enumABCaxis() == A_Axis )
1096 {
1097 return DATA_NUM_MONOCLINIC_B_A_AXIS;
1098 }
1099 if( type.enumABCaxis() == B_Axis )
1100 {
1101 return DATA_NUM_MONOCLINIC_B_B_AXIS;
1102 }
1103 if( type.enumABCaxis() == C_Axis )
1104 {
1105 return DATA_NUM_MONOCLINIC_B_C_AXIS;
1106 }
1107 }
1108 if ( type.enumBravaisType() == Triclinic )
1109 {
1110 return DATA_NUM_TRICLINIC;
1111 }
1112
1113 assert( false );
1114 return -1;
1115 }
1116
1117 const DataReflectionConditions& putInformationOnReflectionConditions(const BravaisType& brav_type, const Int4& irc_type)
1118 {
1119 // static const DataReflectionConditions DATA_NONE("None", "", &is_not_extinct_none);
1120 static const DataReflectionConditions DATA_CUBIC_F[DATA_NUM_CUBIC_F]
1121 = {
1122 DataReflectionConditions("No condition:196,202,209,216,225" , "", &is_not_extinct_none),
1123 DataReflectionConditions("210","h00:h=4n,0k0:k=4n,00l:l=4n", &is_not_extinct_4h00),
1124 DataReflectionConditions("203,227","0kl:k+l=4n,h0l:h+l=4n,hk0:h+k=4n,h00:h=4n,0k0:k=4n,00l:l=4n", &is_not_extinct_4h00_40kl),
1125 DataReflectionConditions("219,226","hhl:h,l=2n,hkh:h,k=2n,hkk:h,k=2n", &is_not_extinct_2hhl),
1126 DataReflectionConditions("228","0kl:k+l=4n,h0l:h+l=4n,hk0:h+k=4n,hhl:h,l=2n,hkh:h,k=2n,hkk:h,k=2n,h00:h=4n,0k0:k=4n,00l:l=4n", &is_not_extinct_40kl_2hhl_4h00),
1127 // A, face
1128 DataReflectionConditions("203f(x,0,0),203b(1/2,1/2,1/2),203a(0,0,0),210f(x,0,0),210b(1/2,1/2,1/2),210a(0,0,0),227f(x,0,0),227b(1/2,1/2,1/2),227a(0,0,0)"
1129 , "hkl:h=2n+1 or h+k+l=4n", &special_reflection_conditions_3h_4phkl),
1130 // B, face
1131 DataReflectionConditions("203d(5/8,5/8,5/8),203c(1/8,1/8,1/8),210d(5/8,5/8,5/8),210c(1/8,1/8,1/8),227d(5/8,5/8,5/8),227c(1/8,1/8,1/8)"
1132 , "hkl:h=2n+1 or h,k,l=4n+2 or h,k,l=4n", &special_reflection_conditions_3h_6ahkl_4ahkl),
1133 };
1134
1135 static const DataReflectionConditions DATA_CUBIC_I[DATA_NUM_CUBIC_I]
1136 = {
1137 DataReflectionConditions("No condition:197,199,204,211,217,229" , "", &is_not_extinct_none),
1138 DataReflectionConditions( "206","0kl:k,l=2n,h0l:h,l=2n,hk0:h,k=2n", &is_not_extinct_20kl ),
1139 DataReflectionConditions( "214","h00:h=4n,0k0:k=4n,00l:l=4n", &is_not_extinct_4h00 ),
1140 DataReflectionConditions( "220,230","hhl:2h+l=4n,hkh:2h+k=4n,hkk:h+2k=4n,h00:h=4n,0k0:k=4n,00l:l=4n", &is_not_extinct_4hhl_4h00 ),
1141 //F
1142 DataReflectionConditions("220c(x,x,x),230e(x,x,x)" , "hkl:h=2n+1 or k=2n+1 or l=2n+1 or h+k+l=4n", &special_reflection_conditions_oddh_oddk_oddl_4phkl),
1143 //I
1144 DataReflectionConditions("214b(7/8,7/8,7/8),214a(1/8,1/8,1/8)" , "hkl:h=2n+1 or h,k,l=4n+2 or h,k,l=4n", &special_reflection_conditions_oddh_6ahkl_4ahkl),
1145 //J
1146 DataReflectionConditions("214d(5/8,0/1/4),214c(1/8,0,1/4)"
1147 , "hkl:h,k,l=2n,h+k+l=4n or h=8n,k=8n+4 and h+k+l=4n+2 or h,k=2n+1,l=4n+2 or h,k=8n+1,l=4n or h,k=8n+3,l=4n or h=8n+1,k=8n-1,l=4n or h=8n+3,k=8n-3,l=4n"
1148 , &special_reflection_conditions_2ahkl_4phkl_8h_12k_6phkl_oddahk_9ahk_4l_11ahk_4l_9h_7k_4l_11h),
1149 //J2
1150 DataReflectionConditions("220b(7/8,0,1/4),220a(3/8,0,1/4)"
1151 , "hkl:h,k=2n,h+k+l=4n or h=8n,k=8n+4 and h+k+l=4n+2 or h,k=2n+1,l=4n+2 or h=8n+1,k=8n+3,l=4n or h=8n+7,k=8n+5,l=4n or h=8n+1,k=8n+5,l=4n or h=8n+7,k=8n+3,l=4n"
1152 , &special_reflection_conditions_2hk_4phkl_8h_12k_6phkl_oddahk_6l_9h_11k_4l_15h_13k_9h_14k_4l_15h_11k_4l),
1153 //K
1154 DataReflectionConditions("214f(x,0,1/4)" , "hkl:h=2n+1 or h=4n,hhl:h=2n+1 or h+k+l=4n", &special_reflection_conditions_oddh_4h_oddh_4phkl_hhl),
1155
1156 DataReflectionConditions("220d(x,0,1/4),230g(1/8,y,-y+1/4)" , "hkl:h=2n+1 or h=4n", &special_reflection_conditions_oddh_oddk_oddl_4hkl),
1157 //L
1158 DataReflectionConditions("230f(x,0,1/4)" , "hkl:2h+l=4n or 2k+h=4n or 2l+k=4n o r2l+h=4n or 2h+k=4n or 2k+l=4n"
1159 , &special_reflection_conditions_4phl_4pkh_4plk_4plh_4phk_4pkl),
1160 //M
1161 DataReflectionConditions("230d(3/8,0,1/4),230c(1/8,0,1/4)" , "hkl:h,k=2n,h+k+l=4n or h,k=2n+1,l=4n+2 or h=8n,k=8n+4 and h+k+l=4n+2"
1162 , &special_reflection_conditions_2ahk_4phkl_oddahk_6l_8h_12k_6phkl),
1163 //N
1164 DataReflectionConditions("230b(1/8,1/8,1/8)" , "hkl:h,k=2n+1,l=4n+2 or h,k,l=4n"
1165 , &special_reflection_conditions_oddahk_6l_4ahkl),
1166
1167 };
1168 static const DataReflectionConditions DATA_CUBIC_P[DATA_NUM_CUBIC_P]
1169 = {
1170 DataReflectionConditions("No condition:195,200,207,215,221" , "", &is_not_extinct_none),
1171 DataReflectionConditions( "198,208","h00:h=2n,0k0:k=2n,00l:l=2n", &is_not_extinct_2h00 ),
1172 DataReflectionConditions( "201,224","h00:h=2n,0k0:k=2n,00l:l=2n,0kl:k+l=2n,h0l:h+l=2n,hk0:h+k=2n", &is_not_extinct_2h00_20kl ),
1173 DataReflectionConditions( "205","hk0:h=2n,0kl:k=2n,h0l:l=2n,h00:h=2n,0k0:k=2n,00l:l=2n", &is_not_extinct_2hk0_2h00 ),
1174 DataReflectionConditions( "205(mirror-reversed)","hk0:k=2n,0kl:l=2n,h0l:h=2n,h00:h=2n,0k0:k=2n,00l:l=2n",&is_not_extinct_2hk0mirror_2h00),
1175 DataReflectionConditions( "212,213","h00:h=4n,0k0:k=4n,00l:l=4n", &is_not_extinct_4h00 ),
1176 DataReflectionConditions( "218,223","hhl:l=2n,hkh:k=2n,hkk:h=2n,h00:h=2n,0k0:k=2n,00l:l=2n", &is_not_extinct_2hhl_2h00 ),
1177 DataReflectionConditions( "222","0kl:k+l=2n,h0l:h+l=2n,hk0:h+k=2n,hhl:l=2n,hkh:k=2n,hkk:h=2n,h00:h=2n,0k0:k=2n,00l:l=2n", &is_not_extinct_2hhl_2h00_20kl ),
1178 //F
1179 DataReflectionConditions("208j(x,1/2,0),208i(x,0,1/2)"
1180 , "hkl:h=2n or k=2n or l=2n,hhl:l=2n,hkh:k=2n,hkk:h=2n", &special_reflection_conditions_2h_2k_2hhl_2hkh_2hkk),
1181 DataReflectionConditions("218h(x,0,1/2),218g(x,1/2,0),223j(1/4,y,y+1/2),223h(x,1/2,0),223g(x,0,1/2)"
1182 , "hkl:h=2n or k=2n or l=2n", &special_reflection_conditions_2h_2k_2lhkl),
1183 //G
1184 DataReflectionConditions("208f(1/4,1/2,0),208e(1/4,0,1/2),218d(1/4,0,1/2),218c(1/4,1/2,0),223d(1/4,1/2,0),223c(1/4,0,1/2)"
1185 , "hkl:h+k+l=2n or either one of h,k,l is 2n+1,4n and 4n+2", &special_reflection_conditions_2phkl_oddhkl_4hkl_6hkl),
1186 //H
1187 DataReflectionConditions("212b(5/8,5/8,5/8),212a(1/8,1/8,1/8),213b(7/8,7/8,7/8),213a(3/8,3/8,3/8)"
1188 , "hkl:two of h,k,l are odd or either one of h,k,l is 2n+1,k=4n and l=4n+2 or h,k,l=4n+2 or h,k,l=4n", &special_reflection_conditions_22hkl_2oddhkl_4k_6l_6ahkl_4hkl),
1189
1190
1191
1192 };
1193 static const DataReflectionConditions DATA_HEXAGONAL[DATA_NUM_HEXAGONAL]
1194 = {
1195 //Hexagonal :hex
1196 DataReflectionConditions("No condition:143,147,149,150,156,157,162,164,168,174,175,177,183,187,189,191" , "", &is_not_extinct_none),
1197 DataReflectionConditions( "144,145,151,152,153,154,171,172,180,181","000l:l=3n", &is_not_extinct_tr_3000l ),
1198 DataReflectionConditions( "158,165,185,188,193","h-h0l:l=2n,h0-hl:l=2n,0h-hl:l=2n", &is_not_extinct_tr_2hmh0l ),
1199 DataReflectionConditions( "159,163,186,190,194","hh-2hl:l=2n,h-2hhl:l=2n,-2hhhl:l=2n", &is_not_extinct_2hhm2hl ),
1200 DataReflectionConditions( "169,170,178,179","000l:l=6n", &is_not_extinct_hex_6000l ),
1201 DataReflectionConditions( "173,176,182","000l:l=2n", &is_not_extinct_hex_2000l ),
1202 DataReflectionConditions( "184,192","hh-2hl:l=2n,h-2hhl:l=2n,-2hhhl:l=2n,h-h0l:l=2n,h0-hl:l=2n,0h-hl:l=2n", &is_not_extinct_hex_2hhm2hl_2hmh0l_2000l ),
1203 //D
1204 DataReflectionConditions("159b(1/3,2/3,z),163f(1/3,2/3,z),163d(2/3,1/3,1/4),163c(1/3,2/3,1/4),173b(1/3,2/3,z),176f(1/3,2/3,z),176d(2/3,1/3,1/4),176c(1/3,2/3,1/4),182f(1/3,2/3,z),182d(1/3,2/3,3/4),182c(1/3,2/3,1/4),186b(1/3,2/3,z),190f(1/3,2/3,z),190d(2/3,1/3,1/4),190c(1/3,2/3,1/4),194f(1/3,2/3,z),194d(1/3,2/3,3/4),194c(1/3,2/3,1/4)"
1205 , "hkil:l=2n or h-k=3n+1 or h-k=3n+2", &special_reflection_conditions_2l_3shk_3s2hk),
1206 //E
1207 DataReflectionConditions("171b(1/2,1/2,z),172b(1/2,1/2,z),180f(1/2,0,z),180d(1/2,0,1/2),180c(1/2,0,0),181f(1/2,0,z),181d(1/2,0,1/2),181c(1/2,0,0)"
1208 , "hkil:h=2n+1 or k=2n+1 or l=3n", &special_reflection_conditions_oddh_oddk_3lhkil)
1209 };
1210 static const DataReflectionConditions DATA_TETRAGONAL_P[DATA_NUM_TETRAGONAL_P]
1211 = {
1212 DataReflectionConditions("No condition:75,81,83,89,99,111,115,123" , "", &is_not_extinct_none),
1213 DataReflectionConditions( "76,78,91,95","00l:l=4n", &is_not_extinct_400l ),
1214 DataReflectionConditions( "77,84,93","00l:l=2n", &is_not_extinct_200l ),
1215 DataReflectionConditions( "86","hk0:h+k=2n,00l:l=2n", &is_not_extinct_2hk0_200l ),
1216 DataReflectionConditions( "90,113","h00:h=2n,0k0:k=2n", &is_not_extinct_2h00_20k0 ),
1217 DataReflectionConditions( "92,96","00l:l=4n,h00:h=2n,0k0:k=2n", &is_not_extinct_400l_2h00_0k0 ),
1218 DataReflectionConditions( "94","h00:h=2n,0k0:k=2n,00l:l=2n", &is_not_extinct_2h00 ),
1219 DataReflectionConditions( "100,117,127","h0l:l=2n,0kl:l=2n,h00:h=2n,0k0:k=2n", &is_not_extinct_t_2h0l_2h00 ),//t:Tetragonal
1220 DataReflectionConditions( "101,116,132","h0l:l=2n,0kl:l=2n", &is_not_extinct_t_2h0l ),
1221 DataReflectionConditions( "102,118,136","h0l:h+l=2n,0kl:k+l=2n,h00:h=2n,0k0:k=2n", &is_not_extinct_t_2ph0l_2h00 ),//p:plush+l=0
1222 DataReflectionConditions( "103,124","h0l:l=2n,0kl:l=2n,hhl:l=2n", &is_not_extinct_t_2h0l_2hhl ),
1223 DataReflectionConditions( "105,112,131","hhl:l=2n", &is_not_extinct_t_2hhl ),
1224 DataReflectionConditions( "106,135","h0l:h=2n,0kl:k=2n,hhl:l=2n,h00:h=2n,0k0:k=2n", &is_not_extinct_t_2h00_2h0l_2hhl ),
1225 DataReflectionConditions( "114","hhl:l=2n,h00:h=2n,0k0:k=2n", &is_not_extinct_t_2h00_2hhl ),
1226 DataReflectionConditions( "125","hk0:h+k=2n,h0l:h=2n,0kl:k=2n", &is_not_extinct_t_2phk0_2h0l ),
1227 DataReflectionConditions( "126","hk0:h+k=2n,h0l:h+l=2n,0kl:k+l=2n,hhl:l=2n", &is_not_extinct_t_2phk0_2hhl ),
1228 DataReflectionConditions( "104,128","h0l:h+l=2n,0kl:k+l=2n,hhl:l=2n,h00:h=2n,0k0:k=2n", &is_not_extinct_t_2ph0l_2hhl_2h00 ),
1229 DataReflectionConditions( "85,129","hk0:h+k=2n", &is_not_extinct_t_2phk0 ),
1230 DataReflectionConditions( "130","hk0:h+k=2n,h0l:l=2n,0kl:l=2n,hhl:l=2n", &is_not_extinct_t_2phk0_2h0l_2hll ),
1231 DataReflectionConditions( "133","hk0:h+k=2n,hhl:l=2n", &is_not_extinct_t_2phk0_2hll ),
1232 DataReflectionConditions( "134","hk0:h+k=2n,h0l:h+l=2n,0kl:k+l=2n", &is_not_extinct_t_23phk0 ),//3:hk0,0kl,h0l
1233 DataReflectionConditions( "137","hk0:h+k=2n,hhl:l=2n", &is_not_extinct_t_21phk0_2hhl ),//1:hk0,no h0k or 0kl
1234 DataReflectionConditions( "138","hk0:h+k=2n,h0l:l=2n,0kl:l=2n", &is_not_extinct_t_21phk0_2h0l ),//if Tetragonal and 2 conditions (h0l,0kl)no 1 or 3
1235 };
1236 static const DataReflectionConditions DATA_TETRAGONAL_I[DATA_NUM_TETRAGONAL_I]
1237 = {
1238 DataReflectionConditions("No condition:79,82,87,97,107,119,121,139" , "", &is_not_extinct_none),
1239 DataReflectionConditions( "80,98","00l:l=4n", &is_not_extinct_400l ),
1240 DataReflectionConditions( "88","hk0:h,k=2n,00l:l=4n", &is_not_extinct_t_21hk0_200l ),
1241 DataReflectionConditions( "108,120,140","h0l:h,l=2n,0kl:k,l=2n", &is_not_extinct_t_2ah0l ),//a:and h,l=2n
1242 DataReflectionConditions( "109,122","hhl:2h+l=4n,h-h0:h=2n", &is_not_extinct_t_4phhl_2hmh0 ),//mh:h-h0
1243 DataReflectionConditions( "110","hhl:2h+l=4n,h-h0:h=2n,h0l:h,l=2n,0kl:k,l=2n", &is_not_extinct_t_4phhl_2hmh0_2ah0l ),
1244 DataReflectionConditions( "141","hk0:h,k=2n,hhl:2h+l=4n", &is_not_extinct_t_2hk0_4phhl ),
1245 DataReflectionConditions( "142","hk0:h,k=2n,hhl:2h+l=4n,h0l:h,l=2n,0kl:k,l=2n", &is_not_extinct_t_23ahk0_4phhl ),
1246
1247 //A,body
1248 DataReflectionConditions("80a(0,0,z),88e(0,0,z),88b(0,0,1/2),88a(0,0,0),98c(0,0,z),98b(0,0,1/2),98a(0,0,0),109a(0,0,z),122c(0,0,z),122b(0,0,1/2),122a(0,0,0),141g(x,x,0),141e(0,0,z),141b(0,0,1/2),141a(0,0,0),142f(x,x,1/4)"
1249 , "hkl:h=2n+1 or 2h+l=4n", &special_reflection_conditions_3l_4p2hl),
1250 //B,body
1251 DataReflectionConditions("88d(0,1/4,5/8),88c(0,1/4,1/8),141d(0,1/4,5/8),141c(0,1/4,1/8)"
1252 , "hkl:l=2n+1 or h,k=2n,h+k+l=4n", &special_reflection_conditions_3l_2ahk_4phkl),
1253 //C
1254 DataReflectionConditions("141f(x,1/4,1/8),142e(1/4,y,1/8)"
1255 , "hkl:l=2n+1 or h=2n", &special_reflection_conditions_3l_2h),
1256 };
1257 static const DataReflectionConditions DATA_RHOMBOHEDRAL_RHOM_AXIS[DATA_NUM_RHOMBOHEDRAL_RHOM_AXIS]
1258 = {
1259 DataReflectionConditions("No condition:146,148,155,160,166" , "", &is_not_extinct_none),
1260 DataReflectionConditions("161,167","hhl:l=2n,hkh:k=2n,hkk:h=2n", &is_not_extinct_rhom_2hhl ),
1261 };
1262
1263 static const DataReflectionConditions DATA_RHOMBOHEDRAL_HEX_AXIS[DATA_NUM_RHOMBOHEDRAL_HEX_AXIS]
1264 = {
1265 DataReflectionConditions("No condition:146,148,155,160,166" , "", &is_not_extinct_none),
1266 DataReflectionConditions("161,167", "h-h0l:l=2n,h0-hl:l=2n,0h-hl:l=2n", &is_not_extinct_rhom_hex_2hmh0l),
1267 };
1268
1269 //Monoclinic P
1270 static const DataReflectionConditions DATA_MONOCLINIC_P_A_AXIS[DATA_NUM_MONOCLINIC_P_A_AXIS]
1271 = {
1272 DataReflectionConditions("No condition:3,6,10" , "", &is_not_extinct_none),
1273 DataReflectionConditions( "4,11","h00:h=2n", &is_not_extinct_mono_2h00 ),
1274 DataReflectionConditions( "7,13","0kl:k=2n", &is_not_extinct_mono_20kl ),
1275 DataReflectionConditions( "7(cell choice 2),13(cell choice 2)","0kl:k+l=2n", &is_not_extinct_mono_2p0kl ),
1276 DataReflectionConditions( "7(cell choice 3),13(cell choice 3)","0kl:l=2n", &is_not_extinct_mono_2l0kl ),//l in 2l:l=2n
1277 DataReflectionConditions( "14","0kl:k=2n,h00:h=2n", &is_not_extinct_mono_20kl_2h00 ),
1278 DataReflectionConditions( "14(cell choice 2)","0kl:k+l=2n,0k0:k=2n", &is_not_extinct_mono_2p0kl_20k0 ),
1279 DataReflectionConditions( "14(cell choice 3)","0kl:l=2n,h00:h=2n", &is_not_extinct_mono_2d0kl_2h00 )
1280 };
1281
1282
1283 static const DataReflectionConditions DATA_MONOCLINIC_P_B_AXIS[DATA_NUM_MONOCLINIC_P_B_AXIS]
1284 ={
1285 DataReflectionConditions("No condition:3,6,10" , "", &is_not_extinct_none),
1286 DataReflectionConditions( "4,11","0k0:k=2n", &is_not_extinct_mono_20k0 ),
1287 DataReflectionConditions( "7,13","h0l:l=2n", &is_not_extinct_mono_2h0l ),
1288 DataReflectionConditions( "7(cell choice 2),13(cell choice 2)","h0l:h+l=2n", &is_not_extinct_mono_2ph0l ),
1289 DataReflectionConditions( "7(cell choice 3),13(cell choice 3)","h0l:h=2n", &is_not_extinct_mono_2hh0l ),
1290 DataReflectionConditions( "14","h0l:l=2n,0k0:h=2n", &is_not_extinct_mono_2h0l_20k0 ),
1291 DataReflectionConditions( "14(cell choice 2)","h0l:h+l=2n,0k0:k=2n", &is_not_extinct_mono_2ph0l_20k0 ),
1292 DataReflectionConditions( "14(cell choice 3)","h0l:h=2n,0k0:l=2n", &is_not_extinct_mono_2dh0l_20k0 )
1293 };
1294
1295 static const DataReflectionConditions DATA_MONOCLINIC_P_C_AXIS[DATA_NUM_MONOCLINIC_P_C_AXIS]
1296 ={
1297 DataReflectionConditions("No condition:3,6,10" , "", &is_not_extinct_none),
1298 DataReflectionConditions( "4,11","00l:l=2n", &is_not_extinct_mono_200l ),
1299 DataReflectionConditions( "7,13","hk0:h=2n", &is_not_extinct_mono_2hk0 ),
1300 DataReflectionConditions( "7(cell choice 2),13(cell choice 2)","hk0:h+k=2n", &is_not_extinct_mono_2phk0 ),
1301 DataReflectionConditions( "7(cell choice 3),13(cell choice 3)","hk0:k=2n", &is_not_extinct_mono_2khk0 ),
1302 DataReflectionConditions( "14","hk0:h=2n,00l:l=2n", &is_not_extinct_mono_2hk0_200l ),
1303 DataReflectionConditions( "14(cell choice 2)","hk0:h+k=2n,00l:k=2n", &is_not_extinct_mono_2phk0_200l ),
1304 DataReflectionConditions( "14(cell choice 3)","hk0:k=2n,00l:l=2n", &is_not_extinct_mono_2dhk0_200l )
1305 };
1306
1307 static const DataReflectionConditions DATA_MONOCLINIC_B_A_AXIS[DATA_NUM_MONOCLINIC_B_A_AXIS]
1308 = {
1309 DataReflectionConditions("No condition:5,8,12" , "", &is_not_extinct_none),
1310 DataReflectionConditions( "9,15", "0kl:k=2n", &is_not_extinct_mono_20kl )
1311 };
1312
1313 static const DataReflectionConditions DATA_MONOCLINIC_B_B_AXIS[DATA_NUM_MONOCLINIC_B_B_AXIS]
1314 = {
1315 DataReflectionConditions("No condition:5,8,12" , "", &is_not_extinct_none),
1316 DataReflectionConditions( "9,15", "h0l:l=2n", &is_not_extinct_mono_2h0l )
1317 };
1318
1319 static const DataReflectionConditions DATA_MONOCLINIC_B_C_AXIS[DATA_NUM_MONOCLINIC_B_C_AXIS]
1320 = {
1321 DataReflectionConditions("No condition:5,8,12" , "", &is_not_extinct_none),
1322 DataReflectionConditions( "9,15", "hk0:h=2n", &is_not_extinct_mono_2hk0 )
1323 };
1324 static const DataReflectionConditions DATA_ORTHORHOMBIC_P[DATA_NUM_ORTHORHOMBIC_P]
1325 = {
1326 DataReflectionConditions("No condition:16,25,47" , "", &is_not_extinct_none),
1327 DataReflectionConditions("19","h00:h=2n,0k0:k=2n,00l:l=2n", &is_not_extinct_orth_2dh00),
1328 DataReflectionConditions("48","hk0:h+k=2n,h0l:h+l=2n,0kl:k+l=2n", &is_not_extinct_orth_23phk0, DataReflectionConditions::AXIS_ABC),
1329 DataReflectionConditions("61","0kl:k=2n,h0l:l=2n,hk0:h=2n", &is_not_extinct_orth_2d30kl),//3:0kl,h0l,hk0
1330 DataReflectionConditions("61(mirror-reversed)","0kl:l=2n,h0l:h=2n,hk0:k=2n", &is_not_extinct_orth_2d30kl, DataReflectionConditions::AXIS_ACB),//3:0kl,h0l,hk0
1331
1332 DataReflectionConditions("17","00l:l=2n", &standard_function_for_abc_200l, DataReflectionConditions::AXIS_ABC),
1333 DataReflectionConditions("17(cab)","h00:h=2n", &standard_function_for_abc_200l, DataReflectionConditions::AXIS_CAB),
1334 DataReflectionConditions("17(bca)","0k0:k=2n", &standard_function_for_abc_200l, DataReflectionConditions::AXIS_BCA),
1335
1336 DataReflectionConditions("18","h00:h=2n,0k0:k=2n", &standard_function_for_abc_22h00, DataReflectionConditions::AXIS_ABC),//2:h00,0k0
1337 DataReflectionConditions("18(cab)","0k0:k=2n,00l:l=2n", &standard_function_for_abc_22h00, DataReflectionConditions::AXIS_CBA),
1338 DataReflectionConditions("18(bca)","00l:l=2n,h00:h=2n", &standard_function_for_abc_22h00, DataReflectionConditions::AXIS_BCA),
1339
1340 DataReflectionConditions("27,49","0kl:l=2n,h0l:l=2n", &standard_function_for_abc_220kl, DataReflectionConditions::AXIS_ABC),//2:0kl,h0l
1341 DataReflectionConditions("27(cab),49(cab)","h0l:h=2n,hk0:h=2n", &standard_function_for_abc_220kl, DataReflectionConditions::AXIS_CBA),
1342 DataReflectionConditions("27(bca),49(bca)","hk0:k=2n,0kl:k=2n", &standard_function_for_abc_220kl, DataReflectionConditions::AXIS_BCA),
1343
1344 DataReflectionConditions("32,55","0kl:k=2n,h0l:h=2n", &standard_function_for_abc_2d20kl, DataReflectionConditions::AXIS_ABC),
1345 DataReflectionConditions("32(cab),55(cab)","h0l:l=2n,hk0:k=2n", &standard_function_for_abc_2d20kl, DataReflectionConditions::AXIS_CBA),
1346 DataReflectionConditions("32(bca),55(bca)","hk0:h=2n,0kl:l=2n", &standard_function_for_abc_2d20kl, DataReflectionConditions::AXIS_BCA),
1347
1348 DataReflectionConditions("34,58","0kl:k+l=2n,h0l:h+l=2n", &standard_function_for_abc_2p20kl, DataReflectionConditions::AXIS_ABC),
1349 DataReflectionConditions("34(cab),58(cab)","h0l:h+l=2n,hk0:h+k=2n", &standard_function_for_abc_2p20kl, DataReflectionConditions::AXIS_ABC),
1350 DataReflectionConditions("34(bca),58(bca)","hk0:k+h=2n,0kl:k+l=2n", &standard_function_for_abc_2p20kl, DataReflectionConditions::AXIS_ABC),
1351
1352 DataReflectionConditions("50","0kl:k=2n,h0l:h=2n,hk0:h+k=2n", &standard_function_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_ABC),
1353 DataReflectionConditions("50(cab)","h0l:l=2n,hk0:k=2n,0kl:k+l=2n", &standard_function_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_CBA),
1354 DataReflectionConditions("50(bca)","hk0:h=2n,0kl:l=2n,h0l:h+l=2n", &standard_function_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_BAC),
1355
1356
1357 DataReflectionConditions("56","0kl:l=2n,h0l:l=2n,hk0:h+k=2n", &standard_function_for_abc, DataReflectionConditions::AXIS_ABC),
1358 DataReflectionConditions("56(cab)","h0l:h=2n,hk0:h=2n,0kl:k+l=2n", &standard_function_for_abc, DataReflectionConditions::AXIS_CAB),
1359 DataReflectionConditions("56(bca)","hk0:k=2n,0kl:k=2n,h0l:h+l=2n", &standard_function_for_abc, DataReflectionConditions::AXIS_BCA),
1360
1361 // case of (abc), the string conditions are different, the function are the same
1362 DataReflectionConditions("26,28(-cba),51(bca)", "h0l:l=2n", &standard_function2_for_abc, DataReflectionConditions::AXIS_ABC),
1363 DataReflectionConditions("26(cab),28(a-cb),51", "hk0:h=2n", &standard_function2_for_abc, DataReflectionConditions::AXIS_CAB),
1364 DataReflectionConditions("26(bca),28(ba-c),51(cab)", "0kl:k=2n", &standard_function2_for_abc, DataReflectionConditions::AXIS_BCA),
1365 DataReflectionConditions("26(ba-c),28(bca),51(-cba)", "0kl:l=2n", &standard_function2_for_abc, DataReflectionConditions::AXIS_BAC),
1366 DataReflectionConditions("26(-cba),28,51(a-cb)", "h0l:h=2n", &standard_function2_for_abc, DataReflectionConditions::AXIS_CBA),
1367 DataReflectionConditions("26(a-cb),28(cab),51(ba-c)", "hk0:k=2n", &standard_function2_for_abc, DataReflectionConditions::AXIS_ACB),
1368
1369 DataReflectionConditions("29,57" , "0kl:l=2n,h0l:h=2n", &standard_function2_for_abc_22d0kl, DataReflectionConditions::AXIS_ABC),
1370 DataReflectionConditions("29(cab),57(cab)" , "h0l:h=2n,hk0:k=2n", &standard_function2_for_abc_22d0kl, DataReflectionConditions::AXIS_CAB),
1371 DataReflectionConditions("29(bca),57(bca)" , "h0l:k=2n,0kl:l=2n", &standard_function2_for_abc_22d0kl, DataReflectionConditions::AXIS_BCA),
1372 DataReflectionConditions("29(ba-c),57(ba-c)" , "h0l:l=2n,0kl:k=2n", &standard_function2_for_abc_22d0kl, DataReflectionConditions::AXIS_BAC),
1373 DataReflectionConditions("29(-cba),57(-cba)" , "hk0:h=2n,h0l:l=2n", &standard_function2_for_abc_22d0kl, DataReflectionConditions::AXIS_CBA),
1374 DataReflectionConditions("29(a-cb),57(a-cb)" , "0kl:k=2n,hk0:h=2n", &standard_function2_for_abc_22d0kl, DataReflectionConditions::AXIS_ACB),
1375
1376 DataReflectionConditions("30,53" , "0kl:k+l=2n,h0l:l=2n", &standard_function2_for_abc_2p0kl_2h0l, DataReflectionConditions::AXIS_ABC),
1377 DataReflectionConditions("30(cab),53(cab)" , "h0l:h+l=2n,hk0:h=2n", &standard_function2_for_abc_2p0kl_2h0l, DataReflectionConditions::AXIS_CAB),
1378 DataReflectionConditions("30(bca),53(bca)" , "hk0:h+k=2n,0kl:k=2n", &standard_function2_for_abc_2p0kl_2h0l, DataReflectionConditions::AXIS_BCA),
1379 DataReflectionConditions("30(ba-c),53(ba-c)" , "h0l:h+l=2n,0kl:l=2n", &standard_function2_for_abc_2p0kl_2h0l, DataReflectionConditions::AXIS_BAC),
1380 DataReflectionConditions("30(-cba),53(-cba)" , "hk0:h+k=2n,h0l:h=2n", &standard_function2_for_abc_2p0kl_2h0l, DataReflectionConditions::AXIS_CBA),
1381 DataReflectionConditions("30(a-cb),53(a-cb)" , "0kl:k+l=2n,hk0:k=2n", &standard_function2_for_abc_2p0kl_2h0l, DataReflectionConditions::AXIS_ACB),
1382
1383 DataReflectionConditions("31,59(bca)" , "h0l:h+l=2n", &standard_function2_for_abc_2ph0l, DataReflectionConditions::AXIS_ABC),
1384 DataReflectionConditions("31(cab),59" , "hk0:h+k=2n", &standard_function2_for_abc_2ph0l, DataReflectionConditions::AXIS_CAB),
1385 DataReflectionConditions("31(bca),59(cab)", "0kl:k+l=2n", &standard_function2_for_abc_2ph0l, DataReflectionConditions::AXIS_BCA),
1386
1387 DataReflectionConditions("33,62" , "0kl:k+l=2n,h0l:h=2n", &standard_function2_for_abc_2p0kl_2dh0l, DataReflectionConditions::AXIS_ABC),
1388 DataReflectionConditions("33(cab),62(cab)" , "h0l:h+l=2n,hk0:k=2n", &standard_function2_for_abc_2p0kl_2dh0l, DataReflectionConditions::AXIS_CAB),
1389 DataReflectionConditions("33(bca),62(bca)" , "hk0:h+k=2n,0kl:l=2n", &standard_function2_for_abc_2p0kl_2dh0l, DataReflectionConditions::AXIS_BCA),
1390 DataReflectionConditions("33(ba-c),62(ba-c)" , "h0l:h+l=2n,0kl:k=2n", &standard_function2_for_abc_2p0kl_2dh0l, DataReflectionConditions::AXIS_BAC),
1391 DataReflectionConditions("33(-cba),62(-cba)" , "hk0:h+k=2n,h0l:l=2n", &standard_function2_for_abc_2p0kl_2dh0l, DataReflectionConditions::AXIS_CBA),
1392 DataReflectionConditions("33(a-cb),62(a-cb)" , "0kl:k+l=2n,hk0:h=2n", &standard_function2_for_abc_2p0kl_2dh0l, DataReflectionConditions::AXIS_ACB),
1393
1394 DataReflectionConditions("52" , "0kl:k+l=2n,h0l:h+l=2n,hk0:h=2n", &standard_function2_for_abc_22p0kl_2hk0, DataReflectionConditions::AXIS_ABC),
1395 DataReflectionConditions("52(cab)" , "h0l:h+l=2n,hk0:h+k=2n,0kl:k=2n", &standard_function2_for_abc_22p0kl_2hk0, DataReflectionConditions::AXIS_CAB),
1396 DataReflectionConditions("52(bca)" , "hk0:h+k=2n,0kl:k+l=2n,h0l:l=2n", &standard_function2_for_abc_22p0kl_2hk0, DataReflectionConditions::AXIS_BCA),
1397 DataReflectionConditions("52(ba-c)" , "h0l:h+l=2n,0kl:k+l=2n,hk0:k=2n", &standard_function2_for_abc_22p0kl_2hk0, DataReflectionConditions::AXIS_BAC),
1398 DataReflectionConditions("52(-cba)" , "hk0:h+k=2n,h0l:h+l=2n,0kl:l=2n", &standard_function2_for_abc_22p0kl_2hk0, DataReflectionConditions::AXIS_CBA),
1399 DataReflectionConditions("52(a-cb)" , "0kl:k+l=2n,hk0:h+k=2n,h0l:h=2n", &standard_function2_for_abc_22p0kl_2hk0, DataReflectionConditions::AXIS_ACB),
1400
1401 DataReflectionConditions("54" , "0kl:l=2n,h0l:l=2n,hk0:h=2n", &standard_function2_for_abc_230kl, DataReflectionConditions::AXIS_ABC),
1402 DataReflectionConditions("54(cab)" , "h0l:h=2n,hk0:h=2n,0kl:k=2n", &standard_function2_for_abc_230kl, DataReflectionConditions::AXIS_CAB),
1403 DataReflectionConditions("54(bca)" , "hk0:k=2n,0kl:k=2n,h0l:l=2n", &standard_function2_for_abc_230kl, DataReflectionConditions::AXIS_BCA),
1404 DataReflectionConditions("54(ba-c)" , "h0l:l=2n,0kl:l=2n,hk0:k=2n", &standard_function2_for_abc_230kl, DataReflectionConditions::AXIS_BAC),
1405 DataReflectionConditions("54(-cba)" , "hk0:h=2n,h0l:h=2n,0kl:l=2n", &standard_function2_for_abc_230kl, DataReflectionConditions::AXIS_CBA),
1406 DataReflectionConditions("54(a-cb)" , "0kl:k=2n,hk0:k=2n,h0l:h=2n", &standard_function2_for_abc_230kl, DataReflectionConditions::AXIS_ACB),
1407
1408 DataReflectionConditions("60" , "0kl:k=2n,h0l:l=2n,hk0:h+k=2n", &standard_function2_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_ABC),
1409 DataReflectionConditions("60(cab)" , "h0l:l=2n,hk0:h=2n,0kl:k+l=2n", &standard_function2_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_CAB),
1410 DataReflectionConditions("60(bca)" , "hk0:h=2n,0kl:k=2n,h0l:h+l=2n", &standard_function2_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_BCA),
1411 DataReflectionConditions("60(ba-c)" , "h0l:h=2n,0kl:l=2n,hk0:h+k=2n", &standard_function2_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_BAC),
1412 DataReflectionConditions("60(-cba)" , "hk0:k=2n,h0l:h=2n,0kl:k+l=2n", &standard_function2_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_CBA),
1413 DataReflectionConditions("60(a-cb)" , "0kl:l=2n,hk0:k=2n,h0l:h+l=2n", &standard_function2_for_abc_220kl_2phk0, DataReflectionConditions::AXIS_ACB),
1414 };
1415 static const DataReflectionConditions DATA_ORTHORHOMBIC_C[DATA_NUM_ORTHORHOMBIC_C]
1416 = {
1417 DataReflectionConditions("No condition:21,35,38,65" , "", &is_not_extinct_none),
1418 DataReflectionConditions("20" , "00l:l=2n", &standard_function_for_abc_200l),
1419 DataReflectionConditions("36,63" , "h0l:l=2n", &standard_function2_for_abc),
1420 DataReflectionConditions("40(bca)" , "0kl:l=2n", &standard_function_for_abc_210kl),
1421 DataReflectionConditions("37,66" , "0kl:l=2n,h0l:l=2n", &standard_function_for_abc_220kl),
1422 DataReflectionConditions("39(bca),67" , "hk0:h,k=2n", &standard_function_for_abc_2ahk0),
1423 DataReflectionConditions("41(bca),64(ba-c)" , "hk0:h,k=2n,0kl:l=2n", &standard_function_for_abc_2ahk0_20kl, DataReflectionConditions::AXIS_BAC),
1424 DataReflectionConditions("41(-cba),64" , "hk0:h,k=2n,h0l:l=2n", &standard_function_for_abc_2ahk0_2h0l, DataReflectionConditions::AXIS_ABC),
1425 DataReflectionConditions("68" , "0kl:l=2n,h0l:l=2n,hk0:h,k=2n", &standard_function_for_abc_220kl_2ahk0),
1426
1427 };
1428 static const DataReflectionConditions DATA_ORTHORHOMBIC_F[DATA_NUM_ORTHORHOMBIC_F]
1429 = {
1430 DataReflectionConditions("No condition:22,42,69" , "", &is_not_extinct_none),
1431 DataReflectionConditions("43" , "0kl:k+l=4n,h0l:h+l=4n", &standard_function_for_abc_42p0kl, DataReflectionConditions::AXIS_ABC),
1432 DataReflectionConditions("43(cab)" , "h0l:h+l=4n,hk0:h+k=4n", &standard_function_for_abc_42p0kl, DataReflectionConditions::AXIS_CAB),
1433 DataReflectionConditions("43(bca)" , "hk0:h+k=4n,0kl:k+l=4n", &standard_function_for_abc_42p0kl, DataReflectionConditions::AXIS_BCA),
1434
1435 DataReflectionConditions("70" , "0kl:k+l=4n,h0l:h+l=4n,hk0:h+k=4n", &standard_function_for_abc_43p0kl),
1436
1437 // A
1438 DataReflectionConditions("43a(0,0,z),70g(0,0,z),70f(0,y,0),70e(x,0,0),70b(0,0,1/2),70a(0,0,0)" , "hkl:h=2n+1 or h+k+l=4n", &special_reflection_conditions_3h_4phkl),
1439
1440 // B
1441 DataReflectionConditions("70d(5/8,5/8,5/8),70c(1/8,1/8,1/8)" , "hkl:h=2n+1 or h,k,l=4n+2 or h,k,l=4n", &special_reflection_conditions_3h_6ahkl_4ahkl),
1442 };
1443
1444 static const DataReflectionConditions DATA_ORTHORHOMBIC_I[DATA_NUM_ORTHORHOMBIC_I]
1445 = {
1446 DataReflectionConditions("No condition:23,24,44,71" , "", &is_not_extinct_none),
1447 DataReflectionConditions("45,72" , "0kl:k,l=2n,h0l:h,l=2n", &standard_function_for_abc_2a0kl, DataReflectionConditions::AXIS_ABC),
1448 DataReflectionConditions("45(cab),72(cab)" , "h0l:h,l=2n,hk0:h,k=2n", &standard_function_for_abc_2a0kl, DataReflectionConditions::AXIS_CAB),
1449 DataReflectionConditions("45(bca),72(bca)" , "hk0:h,k=2n,0kl:k,l=2n", &standard_function_for_abc_2a0kl, DataReflectionConditions::AXIS_BCA),
1450
1451 DataReflectionConditions("46,74" , "h0l:h,l=2n", &standard_function_for_abc_2ah0l, DataReflectionConditions::AXIS_ABC),
1452 DataReflectionConditions("46(cab),74(cab)" , "hk0:h,k=2n", &standard_function_for_abc_2ah0l, DataReflectionConditions::AXIS_CAB),
1453 DataReflectionConditions("46(bca),74(bca)" , "0kl:k,l=2n", &standard_function_for_abc_2ah0l, DataReflectionConditions::AXIS_BCA),
1454
1455 DataReflectionConditions("73" , "0kl:k,l=2n,h0l:h,l=2n,hk0:h,k=2n", &standard_function_for_abc_23a0kl),
1456
1457 };
1458 static const DataReflectionConditions DATA_TRICLINIC[DATA_NUM_TRICLINIC]
1459 = {
1460 DataReflectionConditions("No condition:1,2" , "", &is_not_extinct_none),
1461 };
1462
1463 // if( irc_type < 0 ){ return DATA_NONE; }
1464
1465 if( brav_type.enumBravaisType() == Cubic_F )
1466 {
1467 return DATA_CUBIC_F[(size_t) irc_type];
1468 }
1469 if( brav_type.enumBravaisType() == Cubic_I )
1470 {
1471 return DATA_CUBIC_I[(size_t) irc_type];
1472 }
1473 if ( brav_type.enumBravaisType() == Cubic_P )
1474 {
1475 return DATA_CUBIC_P[(size_t) irc_type];
1476 }
1477 if ( brav_type.enumBravaisType() == Hexagonal )
1478 {
1479 return DATA_HEXAGONAL[(size_t) irc_type];
1480 }
1481 if ( brav_type.enumBravaisType() == Tetragonal_P )
1482 {
1483 return DATA_TETRAGONAL_P[(size_t) irc_type];
1484 }
1485 if ( brav_type.enumBravaisType() == Tetragonal_I )
1486 {
1487 return DATA_TETRAGONAL_I[(size_t) irc_type];
1488 }
1489 if ( brav_type.enumBravaisType() == Rhombohedral )
1490 {
1491 if( brav_type.enumRHaxis() == Rho_Axis )
1492 {
1493 return DATA_RHOMBOHEDRAL_RHOM_AXIS[(size_t) irc_type];
1494 }
1495 if( brav_type.enumRHaxis() == Hex_Axis )
1496 {
1497 return DATA_RHOMBOHEDRAL_HEX_AXIS[(size_t) irc_type];
1498 }
1499 }
1500 if ( brav_type.enumBravaisType() == Orthorhombic_P )
1501 {
1502 return DATA_ORTHORHOMBIC_P[(size_t) irc_type];
1503 }
1504 if ( brav_type.enumBravaisType() == Orthorhombic_C )
1505 {
1506 return DATA_ORTHORHOMBIC_C[(size_t) irc_type];
1507 }
1508 if ( brav_type.enumBravaisType() == Orthorhombic_F )
1509 {
1510 return DATA_ORTHORHOMBIC_F[(size_t) irc_type];
1511 }
1512 if ( brav_type.enumBravaisType() == Orthorhombic_I )
1513 {
1514 return DATA_ORTHORHOMBIC_I[(size_t) irc_type];
1515 }
1516 if ( brav_type.enumBravaisType() == Monoclinic_P )
1517 {
1518 if( brav_type.enumABCaxis() == A_Axis )
1519 {
1520 return DATA_MONOCLINIC_P_A_AXIS[(size_t) irc_type];
1521 }
1522 if( brav_type.enumABCaxis() == B_Axis )
1523 {
1524 return DATA_MONOCLINIC_P_B_AXIS[(size_t) irc_type];
1525 }
1526 if( brav_type.enumABCaxis() == C_Axis )
1527 {
1528 return DATA_MONOCLINIC_P_C_AXIS[(size_t) irc_type];
1529 }
1530 }
1531 if ( brav_type.enumBravaisType() == Monoclinic_B )
1532 {
1533 if( brav_type.enumABCaxis() == A_Axis )
1534 {
1535 return DATA_MONOCLINIC_B_A_AXIS[(size_t) irc_type];
1536 }
1537 if( brav_type.enumABCaxis() == B_Axis )
1538 {
1539 return DATA_MONOCLINIC_B_B_AXIS[(size_t) irc_type];
1540 }
1541 if( brav_type.enumABCaxis() == C_Axis )
1542 {
1543 return DATA_MONOCLINIC_B_C_AXIS[(size_t) irc_type];
1544 }
1545 }
1546 if ( brav_type.enumBravaisType() == Triclinic )
1547 {
1548 return DATA_TRICLINIC[(size_t) irc_type];
1549 }
1550
1551 assert( false );
1552 return DATA_TRICLINIC[0];
1553 }
1554
1555 string DataReflectionConditions::putShortStringType() const
1556 {
1557 string ans;
1558 istringstream iss(type);
1559 ZErrorMessage zerr = getdelim(iss, ans, "(");
1560 if( zerr.putErrorType() == ZErrorDelimiterNotFound || isalpha(*(ans.rbegin()) ) ) return ans;
1561 return type;
1562 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26