1from pymol.wizard import Wizard 2from pymol import cmd 3import pymol 4import types 5 6saved = {} 7 8class Stereodemo(Wizard): 9 10 def launch(self,name,pretty_name=None): 11 demo = DemoInfo() 12 if self.last: 13 if hasattr(demo,self.last): 14 getattr(demo,self.last)(cleanup=1) 15 if hasattr(demo,name): 16 cmd.delete("all") 17 if pretty_name is not None: 18 cmd.do("_ wizard message, Please wait while the %s example loads..., dismiss=0"%pretty_name) 19 self.message = demo.message_dict.get(name,None) 20 cmd.refresh_wizard() 21 self.last = name 22 demo_fn = getattr(demo,name) 23 t = threading.Thread(target=demo_fn) 24 t.setDaemon(1) 25 t.start() 26 else: 27 self.last = None 28 saved['last']=self.last 29 30 def __init__(self,*arg,**kw): 31 _self=kw.get('_self',cmd) 32 Wizard.__init__(self,_self) 33 self.message = [] 34 self.last = None 35 cmd.full_screen("off") 36 if not ("mono" in list(kw.keys())): 37 cmd.stereo("on") 38 cmd.set("sphere_mode","5") 39 if 'last' in saved: 40 self.last = saved['last'] 41 if len(arg): 42 self.launch(arg[0]) 43 else: 44 self.launch("cartoon") 45 46 def get_prompt(self): 47 saved['last']=self.last 48 self.prompt = self.message 49 return self.prompt 50 51 def get_panel(self): 52 return [ 53 [ 1, 'Structural Biology', '' ], 54 [ 2, 'X-ray Crystallography', 'cmd.get_wizard().launch("roving_density")'], 55 [ 2, 'Electron Tomography', 56 'cmd.get_wizard().launch("electomo", "Electron Tomography")'], 57 [ 1, 'Drug Discovery', '' ], 58 [ 2, 'Medicinal Chemistry', 59 'cmd.get_wizard().launch("medchem","Medicinal Chemistry")'], 60 [ 2, 'Computational Chemistry', 'cmd.get_wizard().launch("electro","Computational Chemistry")'], 61 [ 1, 'Presentation Graphics', '' ], 62 [ 2, 'Molecular Animation', 'cmd.get_wizard().launch("animate","Molecular Animation")'], 63 [ 2, 'Multiprocessor Raytracing', 'cmd.get_wizard().launch("ray")'], 64 [ 1, 'Bioinformatics', ''], 65 [ 2, 'Structure Alignments', 'cmd.get_wizard().launch("structure","Structure Alignment")'], 66 [ 2, 'Homology Modeling', 67 'cmd.get_wizard().launch("homology","Homology Modeling")'], 68 [ 1, 'Science Education', ''], 69 [ 2, 'Interactive Modeling', 'cmd.get_wizard().launch("sculpt")'], 70 [ 1, 'Configuration', ''], 71 [ 2, 'Toggle Fullscreen', 72 'cmd.full_screen()'], 73 [ 2, 'Toggle Stereo 3D', 74 'cmd.stereo("off" if cmd.get_setting_int("stereo") else "on")'], 75# [ 2, 'End Demonstration', 'cmd.get_wizard().launch("finish")' ], 76# [ 2, 'Swap Left/Right Stereo', 'stereo swap'], 77 ] 78 79from pymol.vfont import plain 80from pymol.cgo import * 81import traceback 82from pymol import util 83import threading 84 85class DemoInfo: 86 87 message_dict = { 88 'roving' : [ 89 "Middle-click-and-drag to move...",], 90 'roving_density' : [ 91 "Middle-click-and-drag to move..."], 92 'elec' : [ 93 "CTRL-Middle-Click on color bar to change levels...",], 94 'sculpt' : [ 95 "Control-left-click-and-drag on atom centers to drag atoms...",], 96 } 97 98 def get_sess(self,file): 99 from chempy import io 100 file = cmd.exp_path(file) 101 sess = io.pkl.fromFile(file) 102 del sess['wizard'] 103 del sess['main'] 104 return sess 105 106 def homology(self,cleanup=0): 107 if not cleanup: 108 cmd.set_session(self.get_sess("$PYMOL_DATA/big_demo/homology.pse")) 109 cmd.do("replace_wizard toggle, Homology Modeling") 110 111 def structure(self,cleanup=0): 112 if not cleanup: 113 cmd.set_session(self.get_sess("$PYMOL_DATA/big_demo/structure.pse")) 114 cmd.do("replace_wizard toggle, Structure Alignment") 115 cmd.set("seq_view_label_mode",1) 116 cmd.set("seq_view",1) 117 else: 118 cmd.set("seq_view_label_mode",0) 119 cmd.set("seq_view",0) 120 121 def medchem(self,cleanup=0): 122 if not cleanup: 123 cmd.set_session(self.get_sess("$PYMOL_DATA/big_demo/drugdisc.pse")) 124 cmd.do("replace_wizard toggle, Medicinal Chemistry") 125 else: 126 cmd.set("sphere_scale",1.0) 127 128 def electomo(self,cleanup=0): 129 if not cleanup: 130 cmd.feedback("disable","objectsurface","actions") 131 cmd.set_session(self.get_sess("$PYMOL_DATA/big_demo/flagellar.pse")) 132 cmd.set("sweep_mode",3) 133 cmd.set("sweep_angle",3) 134 cmd.rock() 135 cmd.do("replace_wizard toggle, Electron Tomography") 136 else: 137 cmd.mstop() 138 cmd.rock(0) 139 140 def electro(self,cleanup=0): 141 if not cleanup: 142 cmd.set_session(self.get_sess("$PYMOL_DATA/big_demo/electro.pse")) 143 cmd.do("replace_wizard toggle, Computational Chemistry (Electrostatics)") 144 cmd.rock(1) 145 else: 146 cmd.rock(0) 147 148 def animate(self,cleanup=0): 149 if not cleanup: 150 cmd.set("security",0) 151 cmd.set_session(self.get_sess("$PYMOL_DATA/big_demo/animate.pse")) 152 cmd.rock(1) 153 cmd.set("field_of_view",23) 154 cmd.rock(1) 155 cmd.set("sweep_mode",3) 156 cmd.set("sweep_angle",10) 157 cmd.set("sphere_mode",5) 158 cmd.do("replace_wizard toggle, Molecular Animation") 159 else: 160 cmd.set("mesh_width",1) 161 cmd.set("field_of_view",20) 162 cmd.rock(0) 163 cmd.mset() 164 cmd.mstop() 165 166 def rep_old(self,cleanup=0): 167 if not cleanup: 168 try: 169 cmd.set("suspend_updates",1,quiet=1) 170 cmd.disable() 171 cmd.delete("pept") 172 cmd.delete("pept_dist") 173 cmd.load("$PYMOL_DATA/demo/pept.pdb") 174 cmd.show("sticks","(pept and not i;5:7)") 175 cmd.show("surface","(pept and i;5,6)") 176 cmd.show("mesh","(pept and i;1,11,12,13)") 177 cmd.show("spheres","(?pept & resi 2+12+9+4 &! name C+N+O+CA)") 178 cmd.show("dots","(i;8)") 179 cmd.dist("pept_dist","(pept and i;1&n;OD2)","(pept and i;13&n;OG1)") 180 cmd.set("dot_width","2"); 181 finally: 182 cmd.set("suspend_updates",0,quiet=1) 183 else: 184 cmd.delete("pept") 185 cmd.delete("pept_dist") 186 187 def reps(self,cleanup=0): 188 rep_list = [ "lines","sticks","spheres","surface","mesh","dots","ribbon","cartoon" ] 189 try: 190 if not cleanup: 191 cmd.disable() 192 cmd.set("suspend_updates",1,quiet=1) 193 cmd.load("$PYMOL_DATA/demo/pept.pdb","rep1") 194 cmd.alter("rep1///1-5+8-13/","ss='S'") 195 cmd.cartoon("auto") 196 cmd.hide("everything","rep1") 197 for a in range(2,9): 198 cmd.create("rep%d"%a,"rep1") 199 for x, y in enumerate(rep_list, 1): 200 cmd.show(x, "rep%d" % y) 201 cmd.reset() 202 cmd.zoom("rep1",24) 203 util.cbay("rep2") 204 util.cbac("rep3") 205 util.cbas("rep4") 206 util.cbab("rep5") 207 util.cbaw("rep6") 208 util.cbay("rep8") 209 210 211 cmd.set("suspend_updates",0,quiet=1) 212 scale=0.5 213 for b in range(1,20): 214 cmd.set("suspend_updates",0,quiet=1) 215 cmd.refresh() 216 cmd.set("suspend_updates",1,quiet=1) 217 xt=-3.2 218 yt=1.6 219 for a in range(1,5): 220 cmd.translate([xt*scale,yt*scale,0],object="rep%d"%a,camera=0) 221 xt=xt+2 222 yt=-yt 223 xt=-3.2 224 for a in range(5,9): 225 cmd.translate([xt*scale,yt*scale,0],object="rep%d"%a,camera=0) 226 xt=xt+2 227 for a in range(1,9): 228 cmd.origin("rep%d"%a,object="rep%d"%a) 229 cmd.mset("1") 230 st = ' '.join(map(lambda x,y:"rotate angle=-3,object=rep%d,axis=%s;"%(x,y),list(range(1,9)), 231 ['x','y','x','y','x','y','x','y'])) 232 cmd.mdo(1,st) 233 cmd.set("suspend_updates",0,quiet=1) 234 cmd.mplay() 235 236 cgo = [] 237 axes = [[4.5,0.0,0.0],[0.0,3.0,0.0],[0.0,0.0,3.0]] 238 239 c = 1 240 for a in rep_list: 241 ext = cmd.get_extent("rep%d"%c) 242 pos = [(ext[0][0]+ext[1][0])/2, 243 (ext[0][1]+ext[1][1])/2+14, 244 (ext[0][2]+ext[1][2])/2] 245 c = c + 1 246 pos[0]=pos[0]-(measure_text(plain,a,axes)/2) 247 wire_text(cgo,plain,pos,a,axes) 248 cmd.set("cgo_line_width",1.5) 249 cmd.set("auto_zoom",0) 250 cmd.load_cgo(cgo,'reps') 251 cmd.set("auto_zoom",1) 252 else: 253 cmd.delete("rep*") 254 cmd.mset() 255 cmd.mstop() 256 except: 257 traceback.print_exc() 258 259 260 def roving(self,cleanup=0): 261 if not cleanup: 262 cmd.load("$PYMOL_DATA/demo/il2.pdb") 263 cmd.remove("hydro") 264 cmd.disable() 265 cmd.enable("il2") 266 cmd.set("ribbon_color","blue","il2") 267 cmd.set("roving_detail",1) 268 cmd.set("roving_origin",1) 269 cmd.set("stick_radius",0.12,"il2") 270# cmd.zoom("/il2///16/O") 271# cmd.zoom("center",12) 272 cmd.set_view ((\ 273 0.132852688, -0.729740858, 0.670686543,\ 274 -0.228543565, 0.635894477, 0.737154961,\ 275 -0.964425683, -0.251212329, -0.082298420,\ 276 0.000062190, 0.000183226, -58.861488342,\ 277 13.349151611, -1.565427899, 22.383148193,\ 278 55.259441376, 63.259449005, 0.000000000 )) 279 else: 280 cmd.delete("il2") 281 cmd.set("roving_detail",0) 282 cmd.refresh() 283 cmd.delete("rov_*") 284 285 def roving_density(self,cleanup=0): 286 if not cleanup: 287 try: 288 cmd.load("$PYMOL_DATA/demo/il2.pdb") 289 cmd.set("suspend_updates",1,quiet=1) 290 cmd.remove("hydro") 291 cmd.disable() 292 cmd.enable("il2") 293 cmd.map_new("map","gaussian","0.75","il2") 294 cmd.feedback("disable","objectmesh","actions") 295 cmd.set("ribbon_color","purple","il2") 296 cmd.set("roving_detail",1) 297 cmd.set("roving_origin",1) 298 cmd.set("stick_radius",0.12,"il2") 299 cmd.set("roving_sticks",0) 300 cmd.set("roving_polar_contacts",0) 301 cmd.set("line_width","3") 302 cmd.set("roving_map1_name","map") 303 cmd.isomesh("rov_m1","map",9999.0,"il2") 304 cmd.color("density","rov_m1") 305 306 cmd.set_view ((\ 307 0.132852688, -0.729740858, 0.670686543,\ 308 -0.228543565, 0.635894477, 0.737154961,\ 309 -0.964425683, -0.251212329, -0.082298420,\ 310 0.000062190, 0.000183226, -58.861488342,\ 311 13.349151611, -1.565427899, 22.383148193,\ 312 55.259441376, 63.259449005, 0.000000000 )) 313 finally: 314 cmd.set("suspend_updates",0,quiet=1) 315 cmd.refresh() 316 else: 317 cmd.set("roving_detail",0) 318 cmd.set("roving_map1_name","") 319 cmd.set("roving_polar_contacts",7) 320 cmd.set("roving_sticks",6) 321 cmd.delete("il2") 322 cmd.delete("map") 323 cmd.set("line_width",1.5) 324 cmd.refresh() 325 cmd.set("roving_detail",0) 326 cmd.delete("rov_*") 327 cmd.sync() 328 329 def cartoon(self,cleanup=0): 330 if not cleanup: 331 try: 332 cmd.set("suspend_updates",1,quiet=1) 333 cmd.disable() 334 cmd.delete("1tii") 335 cmd.load("$PYMOL_DATA/demo/1tii.pdb") 336 cmd.hide("(1tii)") 337 cmd.show("cartoon","1tii") 338 cmd.zoom("1tii") 339 cmd.spectrum("count","rainbow","1tii////ca") 340 cmd.set("cartoon_highlight_color","grey50","1tii") 341 cmd.set("cartoon_fancy_helices",1,"1tii") 342 finally: 343 cmd.set("suspend_updates",0,quiet=1) 344 cmd.refresh() 345 else: 346 cmd.delete("1tii") 347 348 def elec(self,cleanup=0): 349 if not cleanup: 350 cmd.disable() 351 cmd.delete("pept") 352 cmd.delete("e_pot") 353 cmd.delete("e_lvl") 354 cmd.load("$PYMOL_DATA/demo/pept.pkl") 355 cmd.hide("(pept)") 356 cmd.show("surface","pept") 357 cmd.set("coulomb_dielectric",80.0) 358 cmd.map_new("e_pot","coulomb",1.0,"pept",5) 359 cmd.ramp_new("e_lvl","e_pot",[-3.6,-1.6,0.4]) 360 cmd.set("surface_color","e_lvl","pept") 361 cmd.refresh() 362 else: 363 cmd.delete("pept") 364 cmd.delete("e_pot") 365 cmd.delete("e_lvl") 366 367 def trans(self,cleanup=0): 368 if not cleanup: 369 try: 370 cmd.set("suspend_updates",1,quiet=1) 371 cmd.disable() 372 cmd.delete("trans") 373 cmd.load("$PYMOL_DATA/demo/pept.pdb","trans") 374 cmd.hide("(trans)") 375 cmd.show("surface","trans") 376 cmd.show("sticks","trans") 377 cmd.set("surface_color","white","trans") 378 cmd.set("transparency",0.5,"trans") 379 cmd.zoom("trans") 380 finally: 381 cmd.set("suspend_updates",0,quiet=1) 382 cmd.refresh() 383 else: 384 cmd.delete("trans") 385 386 def ray(self,cleanup=0): 387 if not cleanup: 388 cmd.set("suspend_updates",1,quiet=1) 389 cmd.disable() 390 cmd.delete("ray") 391 cmd.set("sphere_mode",5) 392 cmd.set("sphere_scale",1.0) 393 cmd.load("$PYMOL_DATA/demo/il2.pdb","ray") 394 cmd.remove("(ray and hydro)") 395 cmd.hide("lines","ray") 396 cmd.show("spheres","ray") 397 cmd.orient("ray") 398 cmd.turn("x",90) 399 util.ray_shadows('heavy') 400 cmd.mstop() 401 cmd.rock(0) 402 cmd.set("suspend_updates",0,quiet=1) 403 cmd.refresh() 404 cmd.do("ray") 405 else: 406 cmd.delete("ray") 407 408 def finish(self,cleanup=0): 409 cmd.do("_ wizard") 410 411 def sculpt(self,cleanup=0): 412 if not cleanup: 413 cmd.set("suspend_updates",1,quiet=1) 414 cmd.disable() 415 cmd.delete("sculpt") 416 cmd.set("sphere_scale","1.0") 417 cmd.set("sphere_mode",5) 418 cmd.load("$PYMOL_DATA/demo/pept.pdb","sculpt") 419 cmd.hide("lines","sculpt") 420# cmd.show("sticks","sculpt") 421 cmd.show("spheres","sculpt") 422# cmd.set("sphere_transparency","0.75","sculpt") 423# cmd.set("sphere_color","grey","sculpt") 424 cmd.frame(1) 425 cmd.set("auto_sculpt",1) 426 cmd.set("sculpting",1) 427 cmd.sculpt_activate("sculpt") 428 cmd.set("sculpting_cycles","100") 429 cmd.do("edit_mode") 430 cmd.set("valence","0.05") 431 cmd.set("suspend_updates",0,quiet=0) 432 cmd.sculpt_iterate("sculpt") 433 cmd.alter_state(1,"sculpt","x=x*1.5;y=y*0.1;z=z*1.5") 434 cmd.zoom() 435 436 cmd.unpick() 437 else: 438 cmd.set("valence","0") 439 cmd.set("sculpting",0) 440 cmd.set("auto_sculpt",0) 441 cmd.delete("sculpt") 442 cmd.mouse() 443 444 445if __name__=='pymol': 446 pymol.wizard.stereodemo = Stereodemo() 447 cmd.set_wizard(pymol.wizard.stereodemo) 448 cmd.stereo("on") 449 cmd.set("max_threads",4) 450