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