reinitialize import rotkit fetch 1HP1, async=0 python if 'PYMOL_GIT_MOD' in os.environ: example_dir = os.path.join(os.path.split(os.environ['PYMOL_GIT_MOD'])[0],"files_for_examples") cmd.load(os.path.join(example_dir,"Atto590.pdb")) else: cmd.load("Atto590.pdb") python end # Make sure everything is loaded before we continue cmd.refresh() ### Get the names of the loaded objects protname = cmd.get_names()[0] molname = cmd.get_names()[1] ### Make the names we are going to use protselectCB="%s and resi 308 and name CB"%protname protnameselectCB="K308CB" protselectCA="%s and resi 308 and name CA"%protname protnameselectCA="K308CA" molselect13="%s and id 13"%molname molnameselect13="dyeatom13" molselect12="%s and id 12"%molname molnameselect12="dyeatom12" ### Make some selections cmd.select("%s"%protnameselectCB,"%s"%protselectCB) cmd.select("%s"%protnameselectCA,"%s"%protselectCA) cmd.select("%s"%molnameselect13,"%s"%molselect13) cmd.label("%s"%molnameselect13,"13") cmd.select("%s"%molnameselect12,"%s"%molselect12) cmd.label("%s"%molnameselect12,"12") ### Make nice representations cmd.show_as("cartoon","%s"%protname) cmd.show("sticks","byres %s"%protnameselectCB) ##### PART I: Use of functions ##### ### This view will take you to the first part set_view (\ 0.377224118, 0.880101919, -0.288305759,\ 0.661396861, -0.473919988, -0.581338286,\ -0.648268998, 0.028612033, -0.760871351,\ 0.000000000, 0.000000000, -56.408561707,\ 19.480533600, 34.572898865, 6.978204727,\ 46.615653992, 66.201446533, -20.000001907 ) #### Just unhash each part for itself, as you continue through ### To print a objects TTT matrix in a readable format rotkit.printMat(cmd.get_object_matrix(molname)) ##### We want to move the dye to a desired location, and rotate it to a view we desire ##### First get the vector bewteen the dyeatom and the protein atom diffvector = rotkit.vector("%s"%molselect13,"%s"%protnameselectCB) ##### Then move the dye move = rotkit.transmat(diffvector) ##### print the matrix for fun rotkit.printMat(move) ##### Move the dye cmd.transform_selection("%s"%molname,move) ##### Now we want to displace the dye in the CA-CB bond direction ##### First find the vector/direction to displace it in. From A -> B diffvector = rotkit.vector("%s"%protnameselectCA,"%s"%protnameselectCB) ##### Make the vector so its lenth is equal 1 uvector = rotkit.unitvector(diffvector)[0] ##### Make the move translation matrix, and we multiply the matrix with 3, so it moves 3 Angstrom move = rotkit.transmat(uvector,3) ##### Print the matrix rotkit.printMat(move) ##### Displace it in the CA-CB direction cmd.transform_selection("%s"%molname,move) ##### Now we want to rotate it a single time. We convert 40 degress to radians ##### The input is the angle, the line to rotate around, and a point where the line goes through CBxyz = rotkit.getxyz("%s"%protnameselectCB)[0] rmat = rotkit.rotmat(rotkit.radangle(40),uvector,CBxyz) rotkit.printMat(rmat) ##### Copy paste this line into pymol to see it manually cmd.transform_selection("%s"%molname,rmat) ##### We are not quite satisfied, we want to rotate it around its own bond ##### So we rotate in around its own 13 -> 12 bonds diffvector = rotkit.vector("%s"%molnameselect13,"%s"%molnameselect12) uvector = rotkit.unitvector(diffvector)[0] xyz12 = rotkit.getxyz("%s"%molnameselect12)[0] rmat = rotkit.rotmat(rotkit.radangle(10),uvector,xyz12) ##### Copy paste this line into pymol to see it manually cmd.transform_selection("%s"%molname,rmat) ##### Now, lets make a function that collects all these call in one function ##### We only want to define two positions that defines the line, the angle and the object to rotate rotkit.rotateline("%s"%molnameselect13,"%s"%molnameselect12,180,"%s"%molname) ##### This is made as a pymol command as well. I first print the names that we should write manually in the consol print("rotateline Pos1=%s, Pos2=%s, degangle=15, molecule=%s"%(molnameselect13, molnameselect12, molname)) ##### To illustate best, we create som copies of the dye python anglerange = range(90,360,90) for angle in anglerange: ### Make a suitable name for the new molecule molanglename="%s%s"%(molname,angle) ### Now make a copy cmd.create(molanglename,molname) cmd.label("%s and id 12"%molanglename,"12") cmd.label("%s and id 13"%molanglename,"13") ### Rotate the copy rotkit.rotateline("%s"%protnameselectCB,"%s"%molnameselect13,angle,"%s"%molanglename) python end ####### End of PART I #### ####### PART II: More advanced functions ##### ##### This view will take you to the second part set_view (\ 0.723298192, 0.467510879, 0.508201897,\ 0.371686131, -0.883831143, 0.284063697,\ 0.581970334, -0.016570913, -0.813038886,\ 0.000000000, 0.000000000, -76.609786987,\ 11.790571213, 64.992294312, 20.803859711,\ -31.181428909, 184.401092529, -20.000001907 ) ##### We can fast mutate a protein. frame 1 is the most probable mutation rotkit.mutate(protname, chain="A", resi=513, target="CYS", mutframe=1) ##### The mutate functions take 0.2 seconds, so we put in a refesh command to wait for everything is done cmd.refresh() ##### This is made as a pymol command as well. I first print the names that we should write manually in the consol print("mutate %s, chain=%s, resi=%s, target=CYS, mutframe=1"%(protname, "A", 515)) ##### We now make some selections for this mutation protselectCBcys="%s and resi 513 and name CB"%protname protnameselectCBcys="P513C_CB" protselectCAcys="%s and resi 513 and name CA"%protname protnameselectCAcys="P513C_CA" cmd.select("%s"%protnameselectCBcys,"%s"%protselectCBcys) cmd.select("%s"%protnameselectCAcys,"%s"%protselectCAcys) ##### Now, lets make a function that collects all the commands to put on an atom on the same line defined by two points ##### The input is the two points that define the line, the atom of a molecule to be put on the line, and the distance to move rotkit.toline(protnameselectCAcys,protnameselectCBcys,molnameselect13,molname,3) rotkit.rotateline(protnameselectCAcys,protnameselectCBcys,180,molname) rotkit.rotateline(molnameselect13,molnameselect12,10,molname) print("toline Pos1=%s, Pos2=%s, atom=%s, molecule=%s, dist=%s"%(protnameselectCAcys,protnameselectCBcys,molnameselect13,molname,3)) print("rotateline Pos1=%s, Pos2=%s, degangle=180, molecule=%s"%(protnameselectCAcys, protnameselectCBcys, molname)) print("rotateline Pos1=%s, Pos2=%s, degangle=10, molecule=%s"%(molnameselect13, molnameselect12, molname)) cmd.refresh() ####### End of PART II #### ####### Now we make a cross product #### molselect14="%s and id 14"%molname molnameselect14="dyeatom14" cmd.select("%s"%molnameselect14,"%s"%molselect14) cmd.label("%s"%molnameselect14,"14") cross = rotkit.crossprod(rotkit.vector(molselect13,molselect12),rotkit.vector(molselect13,molselect14)) unity_cross = rotkit.unitvector(cross)[0] point_cross = rotkit.crosspoint(molselect13,cross) rotkit.rotateline(molnameselect13,point_cross,180,molname) print("rotateline Pos1=%s, Pos2=%s, degangle=10, molecule=%s"%(molnameselect13, point_cross, molname))