Author: bugman Date: Sun Oct 29 08:42:32 2006 New Revision: 2700 URL: http://svn.gna.org/viewcvs/relax?rev=2700&view=rev Log: Created the user function 'molmol.tensor_pdb()' for displaying the diffusion tensor in Molmol. The function takes the pre-generated diffusion tensor PDB file, created with the user function 'pdb.create_tensor_pdb()', and displays it in Molmol over the loaded structure. Modified: branches/tensor_pdb/generic_fns/molmol.py branches/tensor_pdb/prompt/molmol.py Modified: branches/tensor_pdb/generic_fns/molmol.py URL: http://svn.gna.org/viewcvs/relax/branches/tensor_pdb/generic_fns/molmol.py?rev=2700&r1=2699&r2=2700&view=diff ============================================================================== --- branches/tensor_pdb/generic_fns/molmol.py (original) +++ branches/tensor_pdb/generic_fns/molmol.py Sun Oct 29 08:42:32 2006 @@ -21,6 +21,7 @@ ############################################################################### from os import popen +from string import split class Molmol: @@ -190,6 +191,44 @@ self.pipe_write("XMacStand ribbon.mac") + def tensor_pdb(self, run=None, file=None): + """Display the diffusion tensor geometric structure.""" + + # Arguments. + self.run = run + + # Test if the run exists. + if not self.run in self.relax.data.run_names: + raise RelaxNoRunError, self.run + + # To overlay the structure with the diffusion tensor, select all and reorient to the PDB frame. + self.pipe_write("SelectAtom ''") + self.pipe_write("SelectBond ''") + self.pipe_write("SelectAngle ''") + self.pipe_write("SelectDist ''") + self.pipe_write("SelectPrim ''") + self.pipe_write("RotateInit") + self.pipe_write("MoveInit") + + # Read in the tensor PDB file and force Molmol to recognise the CONECT records (not that it will show the bonds)! + self.pipe_write("ReadPdb " + file) + file_parts = split(file, '.') + self.pipe_write("SelectMol '@" + file_parts[0] + "'") + self.pipe_write("CalcBond 1 1 1") + + # Apply the 'ball/stick' style to the tensor. + self.pipe_write("SelectAtom '0'") + self.pipe_write("SelectBond '0'") + self.pipe_write("SelectAtom ':TNS'") + self.pipe_write("SelectBond ':TNS'") + self.pipe_write("XMacStand ball_stick.mac") + + # Touch up. + self.pipe_write("RadiusAtom 1") + self.pipe_write("SelectAtom ':TNS@C*'") + self.pipe_write("RadiusAtom 1.5") + + def view(self, run=None): """Function for running Molmol.""" Modified: branches/tensor_pdb/prompt/molmol.py URL: http://svn.gna.org/viewcvs/relax/branches/tensor_pdb/prompt/molmol.py?rev=2700&r1=2699&r2=2700&view=diff ============================================================================== --- branches/tensor_pdb/prompt/molmol.py (original) +++ branches/tensor_pdb/prompt/molmol.py Sun Oct 29 08:42:32 2006 @@ -241,6 +241,80 @@ # Execute the functional code. self.__relax__.generic.molmol.ribbon(run=run) + + + def tensor_pdb(self, run=None, file=None): + """Function displaying the diffusion tensor PDB geometric object over the loaded PDB. + + Keyword Arguments + ~~~~~~~~~~~~~~~~~ + + run: The name of the run. + + file: The name of the PDB file containing the tensor geometric object. + + + Description + ~~~~~~~~~~~ + + In executing this user function, a PDB file must have previously been loaded into this run, + a geometric object or polygon representing the Brownian rotational diffusion tensor will be + overlain with the loaded PDB file and displayed within Molmol. The PDB file containing the + geometric object must be created using the complementary 'pdb.create_tensor_pdb()' user + function. + + To display the diffusion tensor, the multiple commands will be executed. To overlay the + structure with the diffusion tensor, everything will be selected and reoriented and moved to + their original PDB frame positions: + + SelectAtom '' + SelectBond '' + SelectAngle '' + SelectDist '' + SelectPrim '' + RotateInit + MoveInit + + Next the tensor PDB file is read in, selected, and the covalent bonds of the PDB CONECT + records calculated: + + ReadPdb file + SelectMol '@file' + CalcBond 1 1 1 + + Then only the atoms and bonds of the geometric object are selected and the 'ball/stick' + style applied: + + SelectAtom '0' + SelectBond '0' + SelectAtom ':TNS' + SelectBond ':TNS' + XMacStand ball_stick.mac + + The appearance is finally touched up: + + RadiusAtom 1 + SelectAtom ':TNS@C*' + RadiusAtom 1.5 + """ + + # Function intro text. + if self.__relax__.interpreter.intro: + text = sys.ps3 + "molmol.tensor_pdb(" + text = text + "run=" + `run` + text = text + ", file=" + `file` + ")" + print text + + # The run name. + if type(run) != str: + raise RelaxStrError, ('run', run) + + # The file name. + if type(file) != str: + raise RelaxStrError, ('file name', file) + + # Execute the functional code. + self.__relax__.generic.molmol.tensor_pdb(run=run, file=file) def view(self, run=None):