"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 <firstname.lastname@example.org> 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 != '!') and (theCurrLine != '.'): # 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, theMatrix, theMatrix, theMatrix, theMatrix, theMatrix, theMatrix, theMatrix, theMatrix , theMatrix , theMatrix, theMatrix, 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)