Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 33 - (hide 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 rtomiyasu 33 // 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