Dear Shane, It's not CCP4, but Tom Terwilliger's find_ncs program works conveniently. Like coot, it's only returning 4 decimal places, if that's a problem (though adding a 5th decimal place would only typically change the result of a rotation by hundredths of an Angstrom). I've just tried it:
phenix.find_ncs 1bos.pdb returns a file called find_ncs.ncs_spec, with information like the following: rota_matrix 0.3223 0.7547 -0.5714 rota_matrix -0.7282 0.5833 0.3597 rota_matrix 0.6048 0.3002 0.7376 tran_orth -2.1022 47.6880 -37.6220 center_orth 24.4889 44.5171 9.8888 Best wishes, Randy Read > On 15 Apr 2015, at 17:21, Shane Caldwell <[email protected]> wrote: > > good enough to pass the orthonormal test. > > .. scratch that, it passes sometimes and still fails for other > structures/chains. So I'm still in search of a higher-precision export > > Shane > > On Wed, Apr 15, 2015 at 11:44 AM, Shane Caldwell <[email protected] > <mailto:[email protected]>> wrote: > Hi Bernhard, thanks for the pointer. It looks like most of the coot ncs > functions don't print the matrix values, which made exporting them tricky, > especially because I'm pretty new to scripting in Python. > > I have 4 chains, and > ncs_ghosts(0) just spits out > > result is [['NCS found from matching Chain B onto Chain A', 'B', 'A', False, > False], ['NCS found from matching Chain C onto Chain A', 'C', 'A', False, > False], ['NCS found from matching Chain D onto Chain A', 'D', 'A', False, > False]] > > However, after playing around, I was able to extract the matrix from coot > using single_manual_ncs_ghosts, and while it's still at only limited > precision, it's good enough to pass the orthonormal test. > > Running coot > coot.log and then running the python: > > single_manual_ncs_ghosts(0,start,end,"A","B") > > where start and end were my residue numbers, wrote out : > > INFO:: coordinates transformed by orthonal matrix: > | 0.07272, 0.9909, -0.1131| > | 0.9973, -0.07361, -0.003729| > | -0.01202, -0.1125, -0.9936| > ( 41.44, -39.63, 77.24) > INFO:: fractional coordinates matrix: > | 0.06948, 1.063, -0.4001| > | 0.9013, -0.07361, -0.2467| > | -0.012, -0.1243, -0.9903| > ( 0.6896, -0.3967, 0.8545) > > Which is good enough for now, though it does feel like repairing the dining > room chair with duct tape. If anyone knows a cleaner way to get these values, > It'd be great to know! > > Shane > > On Wed, Apr 8, 2015 at 6:08 AM, B.Lohkamp <[email protected] > <mailto:[email protected]>> wrote: > > Just for completeness, of course (!?) you can get something like this in > Coot. In terms of return value and accuracy (>>3 digits) I would use the > scripting function: > > ncs_ghosts(imol) - pythonic > > (ncs-ghosts imol) - schemey > > imol - your protein with NCS > > > Bernhard > > Alright, thanks! It's a good thing, then, I spent the afternoon brushing > up on matrices. > > I guess the next, probably more general question for the bb is: which > utilities export an NCS transformation matrix with more precision? > *superpose* and *gesamt* only export three decimals, though I'm sure > they use greater precision under the hood. I'm not opposed to exporting > from coot or pymol either, I just haven't figured out how to do this yet > - what would be the simplest way to calculate and export an NCS > transformation matrix? > > Shane > > On Wed, Apr 1, 2015 at 7:34 PM, Dale Tronrud <[email protected] > <mailto:[email protected]> > <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > I think you are on the right track - There are not enough decimal > points in your matrix elements to pass the orthonormal test. This test > checks that the length of each row (x^2+y^2+z^2) is equal to one and the > dot product of each row with every other row is equal to zero. If the > values on your NCS statement are in row order I calculate 0.999337 for > the length of the first row. If the program is testing if this is equal > to one to four decimal points you lose. > > You have to add more digits, but just adding zeros isn't going to > accomplish much. The best solution is to get your ncs program to report > its matrix with more digits -- three is pitiful. Failing that you could > calculate one element of each row from the other two to ensure the > length is equal to one at a higher level of precision and hope this > doesn't mess up the dot product test. You'll end up with one number in > each row having more than three decimal places. > > Dale Tronrud > > On 4/1/2015 2:52 PM, Shane Caldwell wrote: > > Hi ccp4bb, > > > > I'm trying to solve a problem I never quite figured out in the past. I'd > > like to use the *sortwater* utility to send my picked waters to > various > > protein chains, and to give them the same residue number if they are > > NCS-equivalent, as the manual outlines. > > > >http://www.ccp4.ac.uk/html/sortwater.html > <http://www.ccp4.ac.uk/html/sortwater.html> > > > > The first part goes off perfectly, partitioning the waters into their > > respective chains. Where I run into problems is bringing in NCS. I can't > > get the program to recognize the transformation matrix. I can calculate > > the matrix using *superpose*, and manually input these (limited > > precision) values into my script, which looks like: > > > > NCS B C MATRIX 0.072 0.997 -0.012 0.991 -0.073 -0.113 -0.113 -0.004 > > -0.994 37.502 -35.283 81.276 <tel:35.283%2081.276> > > > > and it returns > > > > WARNING: **** Matrix is not orthonormal **** > > > > > > My linear algebra is very limited, and I don't know exactly what this > > means in the context of this program, though I suspect it could be > > either linked to converting to fractional coordinates (I'm in a > > monoclinic system), or a product of the limited precision of the matrix > > values. > > > > Using the identity matrix, like so: > > > > NCS B C MATRIX 1.00000 0.00000 0.00000 0.00000 1.00000 0.00000 0.00000 > > 0.00000 1.00000 0.000 0.000 0.000 > > > > doesn't trigger the warning. These values have more digits, but adding > > extra zeroes to the original matrix as a very crude workaround still > > returns the error. > > > > So, I'm now stuck trying to parse what's going on. I know *sortwater* > > also takes O datablocks as matrix input, and that's something I could > > look into (especially if calculating in a different program might > get me > > better precision). Although, I'm not sure the format is a factor > given > > the identity matrix is accepted as a keyword input. > > > > Skimming the archives, I get the sense this isn't something that many > > users do any more. I have quite a few structures with hundreds of > waters > > each and I'd like to get the waters organized, but doing it by > hand will > > take a very long time. Any help getting this program running would be > > greatly appreciated! > > > > > > Shane Caldwell > > McGill University > > > > > > --- > This email has been checked for viruses by Avast antivirus software. > http://www.avast.com <http://www.avast.com/> > > > ------ Randy J. Read Department of Haematology, University of Cambridge Cambridge Institute for Medical Research Tel: + 44 1223 336500 Wellcome Trust/MRC Building Fax: + 44 1223 336827 Hills Road E-mail: [email protected] Cambridge CB2 0XY, U.K. www-structmed.cimr.cam.ac.uk
