# Extract the space group generators from Bilbao Crystallographic Server.

hongy...@gmail.com hongyi.zhao at gmail.com
Fri Jul 15 05:11:36 EDT 2022

```On Friday, July 15, 2022 at 11:08:55 AM UTC+8, avi.e... at gmail.com wrote:
> I guess Dan, that he may not be seeing what he is working on as a list of
> lists of lists with each terminal sublist being of cardinality 4. Maybe
> Zhao could look up what methods a list object has that allow you to place
> additional items, such as a list of 4 numbers, at the beginning or end or in
> middle and select a method that does what he wants.
>
> But I have to ask where exactly he wants to place this: "[0, 0, 0, 1]"

Yes. This must be appended to each of the subsists to construct an affine transformation matrix, as described here [1-3].

[1] https://www.cryst.ehu.es/cgi-bin/cryst/programs/nph-doc-trmat
[2] https://www.gap-system.org/Manuals/pkg/crystcat/htm/CHAP001.htm#SECT002
[3] https://www.gap-system.org/Manuals/pkg/cryst/htm/CHAP002.htm

> Unfortunately, we got no before and after picture, just after. I will
> explain what that means at the end but for now, I am making believe what you
> show is the before and see what that would mean.
>
> The list seems to be a representation for a matrix that is 8 by 4 by 4.
> Where do you place just the foursome above just once without breaking the
> matrix? I mean you can extend it at the bottom by adding four of the above
> as in
> [ [0, 0, 0, 1],
> [0, 0, 0, 1],
> [0, 0, 0, 1],
> [0, 0, 0, 1] ]
>
> Or you can take each internal four partner like the first one:
> [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0,1, 0], [0, 0, 0, 1]]
> And extend each one at the right end by adding a fifth:
>
> [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0,1, 0], [0, 0, 0, 1], [0, 0, 0, 1]]
>
> I can think of other transformations albeit I have no idea why this is being
> done and what makes sense.
>
> So first he needs to be clear on where and what he is adding and then think
> of a method.
>
> And BTW, this problem may also be looked at under a transformation. If
> allowed to use some modules, it might make sense to feed the data structure
> into something that returns a 3-D matrix directly and then use methods that
> allow you to tack on parts of other matrices of various dimensions including
> one. You can then flip it back into nested list format, if you wish.
>
> OK, as mentioned earlier, if this is the AFTER then I have to look and see
> if it is obvious where the "[0, 0, 0, 1]" was placed to make this:
> [[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0,1, 0], [0, 0, 0, 1]],
> [[-1, 0, 0, 1], [0,-1, 0, 1/2], [0, 0, 1, 1/2], [0, 0, 0, 1]],
> [[-1, 0, 0, 1/2], [0, 1, 0, 1/2], [0, 0,-1, 1], [0, 0, 0, 1]],
> [[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]],
> [[0, 1, 0, 3/4], [1, 0, 0, 1/4], [0, 0, -1, 3/4], [0, 0, 0, 1]],
> [[-1, 0, 0, 1/4], [0, -1, 0, 1/4], [0, 0, -1, 1/4], [0, 0, 0, 1]],
> [[1, 0, 0, 0], [0, 1, 0, 1/2], [0, 0, 1, 1/2], [0, 0, 0, 1 ]],
> [[1, 0, 0, 1/2], [0, 1, 0, 0], [0, 0, 1, 1/2], [0, 0, 0, 1]]]
> It looks like you are adding not once copy but eight copies with one each at
> the end of the lists within the main list.
>
> That makes this easy enough so think about what it means to deal with lists
> and NOT matrices.
>
> Your top list contains what I will call an a,b,c,d,e,f,g,h so if you wrote
> code like
>
> Mylist = [ "a", "b", ..., "g", "h"]
>
> Then you can use a loop to iterate over those or perhaps a construct like
> this:
>
> [ item for item in Mylist ]
>
> Wil gather them together and place them back in a list, which is useless but
> it could be something applied to item like changing to upper case. In your
> case, each item will be something like this:
>
> [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0,1, 0]]
>
> And you want to extend it by attaching this [0, 0, 0, 1]
>
> So how do you attach something to a list? Whatever that method is, call it
> append and look it up and consider a line of code like:
>
> [ item.append(something) for item in Mylist ]
>
> If done right, the above list comprehension loops over one dimension of your
> list version of a matrix and adds [0, 0, 0, 1] to the end and then
> eventually put the a/b/d/..h components back together to look like what I
>
> You can make some of the other possible changes using other tricks and
> gimmicks like a nested comprehension but at some point, if you work well
> with matrices, you may be better off converting your nested list into a
> numpy matrix and make your addition another matrix and then use
> numpy.concatenate, numpy.vstack and numpy.hstack with proper care with
> multiple dimensions to specify what axis they will combine on.
>
> But doing the full (home)work for you is ...

Best,
Zhao

> -----Original Message-----
> From: Python-list <python-list-bounces+avi.e.gross=gmai... at python.org> On
> Behalf Of Dan Stromberg
> Sent: Thursday, July 14, 2022 10:07 PM
> To: hongy... at gmail.com <hongy... at gmail.com>
> Cc: Python List <pytho... at python.org>
> Subject: Re: Extract the space group generators from Bilbao Crystallographic
> Server.
>
> It's good to include what you want to see as output, but it's important to
> also include what you have as input.
>
> It's also good to include what you've coded so far. It's considered good
> etiquette to give it a try yourself before asking the list.
>
> On Thu, Jul 14, 2022 at 1:03 PM hongy... at gmail.com <hongy... at gmail.com>
> wrote:
> > I'm trying to extract the matrix data of "ITA-Setting F d -3 m [origin 1]"
> > listed here [1], and then building an augmented matrix for each of
> > them by adding the last row as "[0, 0, 0, 1]". In short, the following
> > form is the ultimate-desired result:
> >
> > [[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0,1, 0], [0, 0, 0, 1]],
> > [[-1, 0, 0, 1], [0,-1, 0, 1/2], [0, 0, 1, 1/2], [0, 0, 0, 1]],
> > [[-1, 0, 0, 1/2], [0, 1, 0, 1/2], [0, 0,-1, 1], [0, 0, 0, 1]],
> > [[0, 0, 1, 0], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1]],
> > [[0, 1, 0, 3/4], [1, 0, 0, 1/4], [0, 0, -1, 3/4], [0, 0, 0, 1]],
> > [[-1, 0, 0, 1/4], [0, -1, 0, 1/4], [0, 0, -1, 1/4], [0, 0, 0, 1]],
> > [[1, 0, 0, 0], [0, 1, 0, 1/2], [0, 0, 1, 1/2], [0, 0, 0, 1 ]],
> > [[1, 0, 0, 1/2], [0, 1, 0, 0], [0, 0, 1, 1/2], [0, 0, 0, 1]]]
> >
> > Any hints/tips/tricks for achieving this aim will be appreciated.
> >
> > [1]
> > https://www.cryst.ehu.es/cgi-bin/cryst/programs//nph-trgen?gnum=227&wh
> > at=gen&trmat=a-1/8,b-1/8,c-1/8&unconv=F%20d%20-3%20m%20:1&from=ita
> >
> > Regards,
> > Zhao
> > --
> > https://mail.python.org/mailman/listinfo/python-list
> >
> --
> https://mail.python.org/mailman/listinfo/python-list
```