Transform odb

From PyMOLWiki
Revision as of 00:21, 2 August 2005 by Saper (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


"transform_odb" transforms the coordinates of a selection and creates a new object with the transformed coordinates. The transformation matrix is read from a specified "O"-style tranformation matrix file (.odb) written by "O" or by any of the Uppsala Software Factory programs (from Gerard Klegweit) such as LSQMAN.


transform_odb name, (selection), matrix_file [, transpose]
  • name = object to contain transformed coordinates
  • selection = atoms to transform
  • matrix_file = file name or path of .odb file containing a transformation matrix data block
  • transpose (default 0]


transform moved_helix, ( mol1 and resi 200:220 ),  move_helix.odb




from pymol import cmd
import pymol
import os
import re
import string

def __init__(self):
	cmd.extend('transform_odb', transform_odb)

# Creates a new object name from selection after transforming it with O-style matrix
# found in matrix_file
# Author: Mark Saper <>

def transform_odb( name, selection, matrix_file='matrix.odb',  transpose=0):

	# open the file for reading
	matrix_file = os.path.expanduser(matrix_file)
	matrix_file = os.path.expandvars(matrix_file)
	theInFile = open ( matrix_file,"r")
	# what we'll store the results in
	theMatrix = []
	# read every line in the file and ...
	for theCurrLine in theInFile.readlines():
	   if (theCurrLine) and (theCurrLine[0] != '!') and (theCurrLine[0] != '.'):
		  # if the line isn't blank, make a list of items seperated by tabs
		  theNewRow = string.split (theCurrLine)
		  # add it in the matrix
		  theMatrix.extend ( theNewRow )
	# change matrix to pymol unsupported format
	theMatrix = [ theMatrix[0], theMatrix[3], theMatrix[6], theMatrix[9],
					  theMatrix[1], theMatrix[4], theMatrix[7], theMatrix[10],
					  theMatrix [2], theMatrix [5], theMatrix[8], theMatrix[11], 
					  0.0, 0.0, 0.0, 0.0 ]
	theMatrix = [ float(x) for x in theMatrix]	
	# close the file
	theInFile.close ()
	r = cmd.create ( name, selection)
	r = cmd.transform_object( name, theMatrix, transpose=transpose)

	return r

cmd.extend('transform_odb', transform_odb)


transform_selection, transform_object