Pffff...this would have been difficult to find out...thanks a lot!!

It seems that a number of linalg methods resort the matrices, which sometimes 
becomes obvious when using a print(np.ravel(tmat, order='K')), sometimes not. 
Havent found a systematic in it, right now I just added a number of 
np.array(tmat, order='C') in the code. Not pretty, but works for me now.

Thanks again,
Th.

Mit freundlichen Grüßen / Kind regards,
Dr. Thomas Fox

Boehringer Ingelheim Pharma GmbH & Co. KG
Medicinal Chemistry
Tel.: +49 (7351) 54-7585
Fax: +49 (7351) 83-7585
mailto:thomas....@boehringer-ingelheim.com<mailto:%7bemail%7d>


Pflichtangaben finden Sie unter: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland
Mandatory information can be found at: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland

Diese E-Mail ist vertraulich zu behandeln. Sie kann besonderem rechtlichem 
Schutz unterliegen. Wenn Sie nicht der richtige Adressat sind, senden Sie bitte 
diese E-Mail an den Absender zurück, löschen die eingegangene E-Mail und geben 
den Inhalt der E-Mail nicht weiter. Jegliche unbefugte Bearbeitung, Nutzung, 
Vervielfältigung oder Verbreitung ist verboten. / This e-mail is confidential 
and may also be legally privileged. If you are not the intended recipient 
please reply to sender, delete the e-mail and do not disclose its contents to 
any person. Any unauthorized review, use, disclosure, copying or distribution 
is strictly prohibited.
Von: Paolo Tosco [mailto:paolo.to...@unito.it]
Gesendet: Dienstag, 17. Oktober 2017 18:44
An: Fox,Dr.,Thomas (RES MedChem) BIP-DE-B
Cc: rdkit-discuss@lists.sourceforge.net
Betreff: Re: [Rdkit-discuss] GetAlignmentTransform


Hi Thomas,

oops, sorry, I gave a quick look at your script and I misinterpreted the 
meaning of the headers without actually reading the code.

TL;DR: the fix is to reshape the numpy array before passing it to 
AllChem.TransformMol:

tmatinv1 = np.array(linalg.inv(tmatinv), order='C')

Boring explanation:

Having investigated this by adding some debugging printout to the C++ code, the 
reason of the odd behaviour is that linalg.inv changes the order in which the 
data is stored in the array from row-major to column-major, so when the C++ 
transConformer() function extracts the raw data from the numpy array, extracts 
it in the wrong order.

inData shows how the data are extracted by the C++ code. This is the output of 
your original script:

<type 'numpy.ndarray'>
<type 'numpy.float64'>
[[ 1.   0.   0.   0.5]
 [ 0.   1.   0.   0. ]
 [ 0.   0.   1.   0. ]
 [ 0.   0.   0.   1. ]]
float64
<type 'numpy.ndarray'>
<type 'numpy.float64'>
[[ 1.   0.   0.  -0.5]
 [ 0.   1.   0.   0. ]
 [ 0.   0.   1.   0. ]
 [ 0.   0.   0.   1. ]]
float64
<type 'numpy.ndarray'>
<type 'numpy.float64'>
[[ 1.  -0.  -0.   0.5]
 [-0.   1.  -0.  -0. ]
 [-0.  -0.   1.  -0. ]
 [-0.  -0.  -0.   1. ]]
float64


original coordinates:

BH
     RDKit          3D

  7  7  0  0  0  0  0  0  0  0999 V2000
    1.2080    0.6971    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.4443    1.4118    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    1.3951    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.2080    0.6981    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.2080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000   -1.3949    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.2080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  1  3  2  0
  1  7  1  0
  3  4  1  0
  4  5  2  0
  5  6  1  0
  6  7  2  0
M  END

nrows = 4
dSize = 16
inData = 1,0,0,-0.5,0,1,0,0,0,0,1,0,0,0,0,1



TransformMol with explicit inverse -> coordinates change:

BH
     RDKit          3D

  7  7  0  0  0  0  0  0  0  0999 V2000
    0.7080    0.6971    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.9443    1.4118    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5000    1.3951    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7080    0.6981    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5000   -1.3949    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.7080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  1  3  2  0
  1  7  1  0
  3  4  1  0
  4  5  2  0
  5  6  1  0
  6  7  2  0
M  END



second TransformMol with calculated inverse -> coordinates dont change:

nrows = 4
dSize = 16
inData = 1,-0,-0,-0,-0,1,-0,-0,-0,-0,1,-0,0.5,-0,-0,1

BH
     RDKit          3D

  7  7  0  0  0  0  0  0  0  0999 V2000
    0.7080    0.6971    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.9443    1.4118    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5000    1.3951    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7080    0.6981    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5000   -1.3949    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.7080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  1  3  2  0
  1  7  1  0
  3  4  1  0
  4  5  2  0
  5  6  1  0
  6  7  2  0
M  END

And this is the expected output after reshaping the array to row-major order, 
by changing

tmatinv1 = linalg.inv(tmatinv)

into

tmatinv1 = np.array(linalg.inv(tmatinv), order='C'):

<type 'numpy.ndarray'>
<type 'numpy.float64'>
[[ 1.   0.   0.   0.5]
 [ 0.   1.   0.   0. ]
 [ 0.   0.   1.   0. ]
 [ 0.   0.   0.   1. ]]
float64
<type 'numpy.ndarray'>
<type 'numpy.float64'>
[[ 1.   0.   0.  -0.5]
 [ 0.   1.   0.   0. ]
 [ 0.   0.   1.   0. ]
 [ 0.   0.   0.   1. ]]
float64
<type 'numpy.ndarray'>
<type 'numpy.float64'>
[[ 1.  -0.  -0.   0.5]
 [-0.   1.  -0.  -0. ]
 [-0.  -0.   1.  -0. ]
 [-0.  -0.  -0.   1. ]]
float64


original coordinates:

BH
     RDKit          3D

  7  7  0  0  0  0  0  0  0  0999 V2000
    1.2080    0.6971    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.4443    1.4118    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    1.3951    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.2080    0.6981    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.2080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000   -1.3949    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.2080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  1  3  2  0
  1  7  1  0
  3  4  1  0
  4  5  2  0
  5  6  1  0
  6  7  2  0
M  END

nrows = 4
dSize = 16
inData = 1,0,0,-0.5,0,1,0,0,0,0,1,0,0,0,0,1



TransformMol with explicit inverse -> coordinates change:

BH
     RDKit          3D

  7  7  0  0  0  0  0  0  0  0999 V2000
    0.7080    0.6971    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.9443    1.4118    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5000    1.3951    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7080    0.6981    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5000   -1.3949    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.7080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  1  3  2  0
  1  7  1  0
  3  4  1  0
  4  5  2  0
  5  6  1  0
  6  7  2  0
M  END



second TransformMol with calculated inverse -> coordinates dont change:

nrows = 4
dSize = 16
inData = 1,-0,-0,0.5,-0,1,-0,-0,-0,-0,1,-0,-0,-0,-0,1

BH
     RDKit          3D

  7  7  0  0  0  0  0  0  0  0999 V2000
    1.2080    0.6971    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.4443    1.4118    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000    1.3951    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.2080    0.6981    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.2080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.0000   -1.3949    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.2080   -0.6979    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  1  3  2  0
  1  7  1  0
  3  4  1  0
  4  5  2  0
  5  6  1  0
  6  7  2  0
M  END

So, the fix is to reshape the numpy array before passing it to 
AllChem.TransformMol.

Cheers,
p.

On 10/17/17 16:35, 
thomas....@boehringer-ingelheim.com<mailto:thomas....@boehringer-ingelheim.com> 
wrote:
Hi Paolo,

thanks for looking into this.

However, when you look into the code (maybe I should have made this clearer) 
the second and third results should *not* be the same. So I 'TranslateMol' the 
compound twice, but only the first TranslateMol has an effect, the second one 
doesn't change the coordinates, although it should.

But good to know that you get the same results as I do - probably should have 
attached my output as well...done now. And a diff with your test.log shows no 
differences...

Best,
Th.

Mit freundlichen Grüßen / Kind regards,
Dr. Thomas Fox

Boehringer Ingelheim Pharma GmbH & Co. KG
Medicinal Chemistry
Tel.: +49 (7351) 54-7585
Fax: +49 (7351) 83-7585
mailto:thomas....@boehringer-ingelheim.com<mailto:%7bemail%7d>


Pflichtangaben finden Sie unter: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland
Mandatory information can be found at: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland

Diese E-Mail ist vertraulich zu behandeln. Sie kann besonderem rechtlichem 
Schutz unterliegen. Wenn Sie nicht der richtige Adressat sind, senden Sie bitte 
diese E-Mail an den Absender zurück, löschen die eingegangene E-Mail und geben 
den Inhalt der E-Mail nicht weiter. Jegliche unbefugte Bearbeitung, Nutzung, 
Vervielfältigung oder Verbreitung ist verboten. / This e-mail is confidential 
and may also be legally privileged. If you are not the intended recipient 
please reply to sender, delete the e-mail and do not disclose its contents to 
any person. Any unauthorized review, use, disclosure, copying or distribution 
is strictly prohibited.
Von: Paolo Tosco [mailto:paolo.to...@unito.it]
Gesendet: Dienstag, 17. Oktober 2017 17:08
An: Fox,Dr.,Thomas (RES MedChem) BIP-DE-B
Betreff: Re: [Rdkit-discuss] GetAlignmentTransform


Dear Thomas,

I have just run your Python script and I get the same output in both cases (see 
attachment). I am not using Anaconda Python though; I wonder if this makes the 
difference.

Cheers,
p.

On 10/17/17 13:48, 
thomas....@boehringer-ingelheim.com<mailto:thomas....@boehringer-ingelheim.com> 
wrote:
Hi,

here's another one, unfortunately wasn't yet able to figure out a solution:

Once I have the transformation matrix from GetAlignmentTransform, I want to use 
it in TransformMol.

So, when I use it as is, things work. When I calculate the inverse of it  with 
linalg.inv and feed the resulting matrix into TransformMol, nothing happens, 
the coordinates stay the same. No error message either...
When I however, print out the inverse matrix and set it explicitly in the code 
(does not make sense for a real-life script, only for testing) the molecule is 
transformed as desired.

In the attached python code I have demonstrated this by using a translation in 
x-direction by 0.5 A.
Explicitly declaring the inverse transformation (ie. Translation by -0.5A) and 
applying it works, feeding the calculated inverse matrix into TransformMol 
results in unchanged atomic positions.

And again, printing out the arrays (and checking the types!) I don't see any 
difference...

Thanks for any help,
Th.

Mit freundlichen Grüßen / Kind regards,
Dr. Thomas Fox

Boehringer Ingelheim Pharma GmbH & Co. KG
Medicinal Chemistry
Tel.: +49 (7351) 54-7585
Fax: +49 (7351) 83-7585
mailto:thomas....@boehringer-ingelheim.com<mailto:%7bemail%7d>


Pflichtangaben finden Sie unter: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland
Mandatory information can be found at: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland

Diese E-Mail ist vertraulich zu behandeln. Sie kann besonderem rechtlichem 
Schutz unterliegen. Wenn Sie nicht der richtige Adressat sind, senden Sie bitte 
diese E-Mail an den Absender zurück, löschen die eingegangene E-Mail und geben 
den Inhalt der E-Mail nicht weiter. Jegliche unbefugte Bearbeitung, Nutzung, 
Vervielfältigung oder Verbreitung ist verboten. / This e-mail is confidential 
and may also be legally privileged. If you are not the intended recipient 
please reply to sender, delete the e-mail and do not disclose its contents to 
any person. Any unauthorized review, use, disclosure, copying or distribution 
is strictly prohibited.
Von: Greg Landrum [mailto:greg.land...@gmail.com]
Gesendet: Dienstag, 17. Oktober 2017 12:40
An: Fox,Dr.,Thomas (RES MedChem) BIP-DE-B; 
rdkit-discuss@lists.sourceforge.net<mailto:rdkit-discuss@lists.sourceforge.net>
Betreff: Re: [Rdkit-discuss] GetAlignmentTransform

I'm glad you were able to track that down, it's an interesting one.

I'll have to look, but we may be able to fix that on the C++ side.

________________________________
From: 
thomas....@boehringer-ingelheim.com<mailto:thomas....@boehringer-ingelheim.com> 
<thomas....@boehringer-ingelheim.com<mailto:thomas....@boehringer-ingelheim.com>>
Sent: Tuesday, October 17, 2017 2:27:39 AM
To: 
rdkit-discuss@lists.sourceforge.net<mailto:rdkit-discuss@lists.sourceforge.net>
Subject: Re: [Rdkit-discuss] GetAlignmentTransform

Ok, mystery solved...argsort returns (at least on my Linux box) an int64, which 
GetAlignmentTransform obviously cant handle.

Best,
Th.

Mit freundlichen Grüßen / Kind regards,
Dr. Thomas Fox

Boehringer Ingelheim Pharma GmbH & Co. KG
Medicinal Chemistry
Tel.: +49 (7351) 54-7585
Fax: +49 (7351) 83-7585
mailto:thomas....@boehringer-ingelheim.com<mailto:%7bemail%7d>


Pflichtangaben finden Sie unter: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland
Mandatory information can be found at: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland

Diese E-Mail ist vertraulich zu behandeln. Sie kann besonderem rechtlichem 
Schutz unterliegen. Wenn Sie nicht der richtige Adressat sind, senden Sie bitte 
diese E-Mail an den Absender zurück, löschen die eingegangene E-Mail und geben 
den Inhalt der E-Mail nicht weiter. Jegliche unbefugte Bearbeitung, Nutzung, 
Vervielfältigung oder Verbreitung ist verboten. / This e-mail is confidential 
and may also be legally privileged. If you are not the intended recipient 
please reply to sender, delete the e-mail and do not disclose its contents to 
any person. Any unauthorized review, use, disclosure, copying or distribution 
is strictly prohibited.
Von: 
thomas....@boehringer-ingelheim.com<mailto:thomas....@boehringer-ingelheim.com> 
[mailto:thomas....@boehringer-ingelheim.com]
Gesendet: Montag, 16. Oktober 2017 16:40
An: 
rdkit-discuss@lists.sourceforge.net<mailto:rdkit-discuss@lists.sourceforge.net>
Betreff: [Rdkit-discuss] GetAlignmentTransform

Hi,
I have a weird problem with the GetAlignmentTransform function when using the 
atomMap argument. Depending how I create the underlying tuples and pass them 
via zip into the function call, I do get back the transformation matrix or the 
error message "cannot extract desired type from sequence".

As you can see in the attached python code snippet, I either collect the atom 
mappings (= atom ids) from  the distance matrix and argsort, by generating two 
lists and transforming them into two tuples, or by explicitly setting the 
tuples. Then I use zip to generate the mappings.
In the latter two cases, things work fine, in the first case they don't. To me, 
the tuples and the list(zip()) look identical, so I do not have an idea why 
GetAlignmentTransform throws up.

I have attached two molecule files (essentially benzene and pyridine), the 
python code test.py and the output test.out

I would be very grateful if anybody could shed some light on this and explain 
what I do wrong.

Best,
Th.


Mit freundlichen Grüßen / Kind regards,
Dr. Thomas Fox

Boehringer Ingelheim Pharma GmbH & Co. KG
Medicinal Chemistry
Tel.: +49 (7351) 54-7585
Fax: +49 (7351) 83-7585
mailto:thomas....@boehringer-ingelheim.com<mailto:%7bemail%7d>


Pflichtangaben finden Sie unter: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland
Mandatory information can be found at: 
https://www.boehringer-ingelheim.de/unser-unternehmen/gesellschaften-in-deutschland

Diese E-Mail ist vertraulich zu behandeln. Sie kann besonderem rechtlichem 
Schutz unterliegen. Wenn Sie nicht der richtige Adressat sind, senden Sie bitte 
diese E-Mail an den Absender zurück, löschen die eingegangene E-Mail und geben 
den Inhalt der E-Mail nicht weiter. Jegliche unbefugte Bearbeitung, Nutzung, 
Vervielfältigung oder Verbreitung ist verboten. / This e-mail is confidential 
and may also be legally privileged. If you are not the intended recipient 
please reply to sender, delete the e-mail and do not disclose its contents to 
any person. Any unauthorized review, use, disclosure, copying or distribution 
is strictly prohibited.





------------------------------------------------------------------------------

Check out the vibrant tech community on one of the world's most

engaging tech sites, Slashdot.org! http://sdm.link/slashdot





_______________________________________________

Rdkit-discuss mailing list

Rdkit-discuss@lists.sourceforge.net<mailto:Rdkit-discuss@lists.sourceforge.net>

https://lists.sourceforge.net/lists/listinfo/rdkit-discuss


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to