Extract the space group generators from Bilbao Crystallographic Server.

avi.e.gross at gmail.com avi.e.gross at gmail.com
Thu Jul 14 23:08:29 EDT 2022


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]"

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
THINK you are asking.

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 ...

-----Original Message-----
From: Python-list <python-list-bounces+avi.e.gross=gmail.com at python.org> On
Behalf Of Dan Stromberg
Sent: Thursday, July 14, 2022 10:07 PM
To: hongy... at gmail.com <hongyi.zhao at gmail.com>
Cc: Python List <python-list 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 <hongyi.zhao 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



More information about the Python-list mailing list