Hi Luc,
If I understand correctly, space_group_type lets the user use any space-group in a non-standard setting defined by a special change of basis.
space_group_type determines the change-of-basis matrix from a given setting to the reference setting.
Now your example would require the matrix of change of basis to be rational whereas in the current implementation it can only be integral.
The change_of_basis_op class has both rational rotation and rational translation parts, with a common r_den for the 9 rotation matrix elements, and a common t_den for the 3 translation vector elements. The "r_den" is fixed at 1 only for the space_group class. Since space_group_type operates only on space_group objects, the limitation applies here too, but the resulting change-of-basis rotation parts certainly don't have to be integral (that would be a terrible limitation).
At least as far as I understand, from the code and your comments. Thus, the only place where rational numbers would be necessary is in those matrices of change of basis, isn't it? Now, would it be possible to define a new class space_group_irrational_setting which would provide services very similar to space_group_type but accepting non-integral matrices for the change of basis?
You are correct. If you need to handle space groups with rational rotation matrices, the way forward is to implement a new class similar to space_group (I'd go for space_group_rational) with a little bit of cut-and-paste to replicate the group multiplication. However, I don't think it is worth redoing the entire space_group_type implementation to accommodate rational rotation parts. In fact, I think it would be a bad solution because of the runtime impact. Consider that any space group when transformed to the primitive setting will have only integral rotation matrices. I.e. all you need is an algorithm that figures out an "initial" change-of-basis matrix to a (any) primitive setting. Construct a standard space_group object with the transformed symmetry operations and feed it into space_group_type. Multiply the "initial" change-of-basis with the output of space_group_type, done. This way you get the desired generality with a moderate effort, without impacting the performance of the many established algorithms based on space_group. Cheers, Ralf ____________________________________________________________________________________ Yahoo! Music Unlimited Access over 1 million songs. http://music.yahoo.com/unlimited