1from pymol.wizard import Wizard 2from pymol import cmd 3 4saved = {} 5 6 7class Demo(Wizard): 8 9 def launch(self,name): 10 return None 11 12 def __init__(self,name=None,_self=cmd): 13 Wizard.__init__(self,_self) 14 self.message = [] 15 self.last = None 16 if 'last' in saved: 17 self.last = saved['last'] 18 if name is not None: 19 demo = DemoInfo(_self=_self) 20 if self.last: 21 if hasattr(demo,self.last): 22 getattr(demo,self.last)(cleanup=1) 23 if hasattr(demo,name): 24 self.last = name 25 demo_fn = getattr(demo,name) 26 t = threading.Thread(target=demo_fn) 27 t.setDaemon(1) 28 t.start() 29 self.message = demo.message_dict.get(name,None) 30 else: 31 self.last = None 32 saved['last']=self.last 33 34 def get_prompt(self): 35 saved['last']=self.last 36 self.prompt = self.message 37 return self.prompt 38 39 def get_panel(self): 40 return [ 41 [ 1, 'Demonstrations', '' ], 42 [ 2, 'Representations', 'replace_wizard demo,reps'], 43 [ 2, 'Cartoon Ribbons', 'replace_wizard demo,cartoon'], 44 [ 2, 'Roving Detail', 'replace_wizard demo,roving'], 45 [ 2, 'Roving Density', 'replace_wizard demo,roving_density'], 46 [ 2, 'Transparency', 'replace_wizard demo,trans'], 47 [ 2, 'Ray Tracing', 'replace_wizard demo,ray'], 48 [ 2, 'Sculpting', 'replace_wizard demo,sculpt'], 49 [ 2, 'Scripted Animation', 'replace_wizard demo,anime'], 50 [ 2, 'Electrostatics', 'replace_wizard demo,elec'], 51 [ 2, 'CGOs', 'replace_wizard demo,cgo'], 52 [ 2, 'Molscript/R3D Input', 'replace_wizard demo,raster3d'], 53 [ 2, 'End Demonstration', 'replace_wizard demo,finish' ] 54 ] 55 56from pymol.vfont import plain 57from pymol.cgo import measure_text, wire_text 58import traceback 59from pymol import util 60import threading 61 62class DemoInfo: 63 64 def __init__(self,_self=cmd): 65 self.cmd=_self 66 67 message_dict = { 68 'roving' : [ 69 "Middle-Click to rove... CTRL-SHIFT-Middle-Click to center...",], 70 'roving_density' : [ 71 "Middle-Click to rove... CTRL-SHIFT-Middle-Click to center...",], 72 'elec' : [ 73 "CTRL-Middle-Click on color bar to change levels...",], 74 'sculpt' : [ 75 "CTRL-Left-Click to drag atoms... CTRL-Right-Click to rotate bonds...",], 76 } 77 78 def rep_old(self,cleanup=0): 79 if not cleanup: 80 try: 81 self.cmd.set("suspend_updates",1,quiet=1) 82 self.cmd.disable() 83 self.cmd.delete("pept") 84 self.cmd.delete("pept_dist") 85 self.cmd.load("$PYMOL_DATA/demo/pept.pdb") 86 self.cmd.hide("everything", "pept") 87 self.cmd.show("sticks","(pept and not i;5:7)") 88 self.cmd.show("surface","(pept and i;5,6)") 89 self.cmd.show("mesh","(pept and i;1,11,12,13)") 90 self.cmd.show("spheres","(?pept & resi 2+12+9+4 &! name C+N+O+CA)") 91 self.cmd.show("dots","(i;8)") 92 self.cmd.dist("pept_dist","(pept and i;1&n;OD2)","(pept and i;13&n;OG1)") 93 self.cmd.set("dot_width","2"); 94 finally: 95 self.cmd.set("suspend_updates",0,quiet=1) 96 else: 97 self.cmd.delete("pept") 98 self.cmd.delete("pept_dist") 99 100 def reps(self,cleanup=0): 101 rep_list = [ "lines","sticks","spheres","surface","mesh","dots","ribbon","cartoon" ] 102 try: 103 if not cleanup: 104 self.cmd.disable() 105 self.cmd.set("suspend_updates",1,quiet=1) 106 self.cmd.mset() 107 self.cmd.set("movie_panel", 0) 108 self.cmd.load("$PYMOL_DATA/demo/pept.pdb","rep1") 109 self.cmd.alter("rep1///1-5+8-13/","ss='S'") 110 self.cmd.cartoon("auto") 111 self.cmd.hide("everything","rep1") 112 for a in range(2,9): 113 self.cmd.create("rep%d"%a,"rep1") 114 for y, x in enumerate(rep_list, 1): 115 self.cmd.show(x, "rep%d" % y) 116 self.cmd.reset() 117 self.cmd.zoom("rep1",24) 118 util.cbay("rep2",_self=self.cmd) 119 util.cbac("rep3",_self=self.cmd) 120 util.cbas("rep4",_self=self.cmd) 121 util.cbab("rep5",_self=self.cmd) 122 util.cbaw("rep6",_self=self.cmd) 123 util.cbay("rep8",_self=self.cmd) 124 125 126 self.cmd.set("suspend_updates",0,quiet=1) 127 scale=0.5 128 for b in range(1,20): 129 self.cmd.set("suspend_updates",0,quiet=1) 130 self.cmd.refresh() 131 self.cmd.set("suspend_updates",1,quiet=1) 132 xt=-3.2 133 yt=1.6 134 for a in range(1,5): 135 self.cmd.translate([xt*scale,yt*scale,0],object="rep%d"%a,camera=0) 136 xt=xt+2 137 yt=-yt 138 xt=-3.2 139 for a in range(5,9): 140 self.cmd.translate([xt*scale,yt*scale,0],object="rep%d"%a,camera=0) 141 xt=xt+2 142 for a in range(1,9): 143 self.cmd.origin("rep%d"%a,object="rep%d"%a) 144 self.cmd.mset("1") 145 st = ' '.join("rotate angle=-3,object=rep%d,axis=%s;" % (x, 'yx'[x % 2]) for x in range(1, 9)) 146 self.cmd.mdo(1,st) 147 self.cmd.set("suspend_updates",0,quiet=1) 148 self.cmd.mplay() 149 150 cgo = [] 151 axes = [[4.5,0.0,0.0],[0.0,3.0,0.0],[0.0,0.0,3.0]] 152 153 c = 1 154 for a in rep_list: 155 ext = self.cmd.get_extent("rep%d"%c) 156 pos = [(ext[0][0]+ext[1][0])/2, 157 (ext[0][1]+ext[1][1])/2+14, 158 (ext[0][2]+ext[1][2])/2] 159 c = c + 1 160 pos[0]=pos[0]-(measure_text(plain,a,axes)/2) 161 wire_text(cgo,plain,pos,a,axes) 162 self.cmd.set("cgo_line_width",1.5) 163 self.cmd.set("auto_zoom",0) 164 self.cmd.load_cgo(cgo,'reps') 165 self.cmd.set("auto_zoom",1) 166 else: 167 self.cmd.delete("rep*") 168 self.cmd.mset() 169 self.cmd.mstop() 170 self.cmd.set("movie_panel",1) 171 except: 172 traceback.print_exc() 173 174 def raster3d(self,cleanup=0): 175 if not cleanup: 176 self.cmd.disable() 177 178 self.cmd.set_view( (\ 179 0.269525230, -0.492282957, 0.827655137,\ 180 -0.158114254, -0.870419860, -0.466229916,\ 181 0.949923635, -0.005200397, -0.312437057,\ 182 -0.000086844, 0.000019042, -133.217041016,\ 183 11.377667427, 21.768899918, 9.270449638,\ 184 105.029335022, 169.626159668, 0.000000000 )) 185 self.cmd.load("$PYMOL_DATA/demo/1hpv.r3d","cgo1") 186 self.cmd.zoom("cgo1") 187 else: 188 self.cmd.delete("cgo1") 189 190 def cgo(self,cleanup=0): 191 if not cleanup: 192 self.cmd.disable() 193 try: 194 self.cmd.set("suspend_updates",1,quiet=1) 195 self.cmd.do("run $PYMOL_DATA/demo/cgo03.py") 196 finally: 197 self.cmd.set("suspend_updates",0,quiet=1) 198 else: 199 self.cmd.delete("cgo03") 200 self.cmd.mset() 201 self.cmd.mstop() 202 self.cmd.rewind() 203 204 def anime_old(self,cleanup=0): 205 if not cleanup: 206 self.cmd.disable() 207 self.cmd.delete("arg") 208 self.cmd.fragment("arg") 209 self.cmd.zoom("arg",2) 210 self.cmd.show("sticks","arg") 211 self.cmd.feedback('dis','sel','res') 212 for a in range(1,181): 213 try: 214 self.cmd.set("suspend_updates",1,quiet=1) 215 self.cmd.edit("(arg & name CD)","(arg & name CG)",quiet=1) 216 self.cmd.torsion("6") 217 self.cmd.unpick() 218 self.cmd.edit("(arg & name CB)","(arg & name CA)",quiet=1) 219 self.cmd.torsion("2") 220 self.cmd.unpick() 221 finally: 222 self.cmd.set("suspend_updates",0,quiet=1) 223 self.cmd.refresh() 224 self.cmd.feedback('ena','sel','res') 225 else: 226 self.cmd.delete("arg") 227 228 def anime(self,cleanup=0): 229 if not cleanup: 230 try: 231 self.cmd.set("suspend_updates",1,quiet=1) 232 self.cmd.disable() 233 self.cmd.load("$TUT/1hpv.pdb") 234 util.chainbow("1hpv",_self=self.cmd) 235 self.cmd.hide("everything","1hpv") 236 self.cmd.show("cartoon","1hpv") 237 self.cmd.show("sticks","1hpv///200/") 238 self.cmd.create("1hpv_a","1hpv//A//") 239 self.cmd.set("cartoon_smooth_loops",0,"1hpv_a") 240 self.cmd.create("1hpv_b","1hpv//B//") 241 self.cmd.set("cartoon_smooth_loops",0,"1hpv_b") 242 self.cmd.create("1hpv_l","1hpv///200/") 243 util.cbay("1hpv_l",_self=self.cmd) 244 self.cmd.delete("1hpv") 245 self.cmd.set_view ((\ 246 0.374249548, -0.517475128, 0.769516647,\ 247 -0.214397043, -0.855623126, -0.471108317,\ 248 0.902203023, 0.011330833, -0.431161582,\ 249 -0.000023194, -0.000007302, -125.089942932,\ 250 11.953758240, 20.323493958, 8.406080246,\ 251 75.304412842, 189.396347046, 0.000000000 )) 252 self.cmd.translate([-20,0,0],object="1hpv_a") 253 self.cmd.translate([20,0,0],object="1hpv_b") 254 self.cmd.zoom("center",30) 255 self.cmd.translate([0,10,00],object="1hpv_l") 256 finally: 257 self.cmd.set("suspend_updates",0,quiet=1) 258 self.cmd.refresh() 259 for a in range(1,21): 260 try: 261 self.cmd.set("suspend_updates",1,quiet=1) 262 self.cmd.translate([1,0,0],object="1hpv_a") 263 self.cmd.translate([-1,0,0],object="1hpv_b") 264 self.cmd.translate([0,-0.5,0],object="1hpv_l") 265 finally: 266 self.cmd.set("suspend_updates",0,quiet=1) 267 self.cmd.refresh() 268 for a in range(1,62): 269 self.cmd.turn("y",6) 270 self.cmd.move('z',2) 271 self.cmd.move('y',-0.12) 272 self.cmd.refresh() 273 274 else: 275 self.cmd.delete("1hpv_*") 276 277 def roving(self,cleanup=0): 278 if not cleanup: 279 try: 280 self.cmd.set("suspend_updates",1,quiet=1) 281 self.cmd.load("$PYMOL_DATA/demo/il2.pdb") 282 self.cmd.hide("everything", "il2") 283 self.cmd.remove("hydro") 284 self.cmd.disable() 285 self.cmd.enable("il2") 286 self.cmd.set("ribbon_color","blue","il2") 287 self.cmd.set("roving_detail",1) 288 self.cmd.set("roving_origin",1) 289 self.cmd.set("stick_radius",0.12,"il2") 290# self.cmd.zoom("/il2///16/O") 291# self.cmd.zoom("center",12) 292 self.cmd.set_view ((\ 293 0.132852688, -0.729740858, 0.670686543,\ 294 -0.228543565, 0.635894477, 0.737154961,\ 295 -0.964425683, -0.251212329, -0.082298420,\ 296 0.000062190, 0.000183226, -58.861488342,\ 297 13.349151611, -1.565427899, 22.383148193,\ 298 55.259441376, 63.259449005, 0.000000000 )) 299 finally: 300 self.cmd.set("suspend_updates", 0) 301 self.cmd.refresh() 302 else: 303 self.cmd.delete("il2") 304 self.cmd.set("roving_detail",0) 305 self.cmd.refresh() 306 self.cmd.delete("rov_*") 307 308 def roving_density(self,cleanup=0): 309 if not cleanup: 310 try: 311 self.cmd.set("suspend_updates",1,quiet=1) 312 self.cmd.load("$PYMOL_DATA/demo/il2.pdb") 313 self.cmd.hide("everything", "il2") 314 self.cmd.remove("hydro") 315 self.cmd.disable() 316 self.cmd.enable("il2") 317 self.cmd.map_new("map","gaussian","0.75","il2") 318 self.cmd.set("ribbon_color","purple","il2") 319 self.cmd.set("roving_detail",1) 320 self.cmd.set("roving_origin",1) 321 self.cmd.set("stick_radius",0.12,"il2") 322 self.cmd.set("roving_sticks",0) 323 self.cmd.set("roving_polar_contacts",0) 324 self.cmd.set("line_width","3") 325 self.cmd.set("roving_map1_name","map") 326 self.cmd.isomesh("rov_m1","map",9999.0,"il2") 327 self.cmd.color("density","rov_m1") 328 329 self.cmd.set_view ((\ 330 0.132852688, -0.729740858, 0.670686543,\ 331 -0.228543565, 0.635894477, 0.737154961,\ 332 -0.964425683, -0.251212329, -0.082298420,\ 333 0.000062190, 0.000183226, -58.861488342,\ 334 13.349151611, -1.565427899, 22.383148193,\ 335 55.259441376, 63.259449005, 0.000000000 )) 336 finally: 337 self.cmd.set("suspend_updates",0,quiet=1) 338 self.cmd.refresh() 339 else: 340 self.cmd.set("roving_detail",0) 341 self.cmd.set("roving_map1_name","") 342 self.cmd.set("roving_polar_contacts",7) 343 self.cmd.set("roving_sticks",6) 344 self.cmd.delete("il2") 345 self.cmd.delete("map") 346 self.cmd.set("line_width",1.5) 347 self.cmd.refresh() 348 self.cmd.set("roving_detail",0) 349 self.cmd.delete("rov_*") 350 self.cmd.sync() 351 352 def cartoon(self,cleanup=0): 353 if not cleanup: 354 try: 355 self.cmd.set("suspend_updates",1,quiet=1) 356 self.cmd.disable() 357 self.cmd.delete("1tii") 358 self.cmd.load("$PYMOL_DATA/demo/1tii.pdb") 359 self.cmd.hide("(1tii)") 360 self.cmd.show("cartoon","1tii") 361 self.cmd.zoom("1tii") 362 self.cmd.spectrum("count","rainbow","1tii////CA") 363 self.cmd.set("cartoon_highlight_color","grey50","1tii") 364 self.cmd.set("cartoon_fancy_helices",1,"1tii") 365 finally: 366 self.cmd.set("suspend_updates",0,quiet=1) 367 self.cmd.refresh() 368 else: 369 self.cmd.delete("1tii") 370 371 def elec(self,cleanup=0): 372 if not cleanup: 373 self.cmd.config_mouse('three_button_viewing') 374 self.cmd.disable() 375 self.cmd.delete("pept") 376 self.cmd.delete("e_pot") 377 self.cmd.delete("e_lvl") 378 self.cmd.load("$PYMOL_DATA/demo/pept.pkl") 379 self.cmd.hide("(pept)") 380 self.cmd.show("surface","pept") 381 self.cmd.set("coulomb_dielectric",80.0) 382 self.cmd.map_new("e_pot","coulomb",1.0,"pept",5) 383 self.cmd.ramp_new("e_lvl","e_pot",[-3.6,-1.6,0.4]) 384 self.cmd.set("surface_color","e_lvl","pept") 385 self.cmd.refresh() 386 else: 387 self.cmd.delete("pept") 388 self.cmd.delete("e_pot") 389 self.cmd.delete("e_lvl") 390 391 def trans(self,cleanup=0): 392 if not cleanup: 393 try: 394 self.cmd.set("suspend_updates",1,quiet=1) 395 self.cmd.disable() 396 self.cmd.delete("trans") 397 self.cmd.load("$PYMOL_DATA/demo/pept.pdb","trans") 398 self.cmd.hide("(trans)") 399 self.cmd.show("surface","trans") 400 self.cmd.show("sticks","trans") 401 self.cmd.set("surface_color","white","trans") 402 self.cmd.set("transparency",0.5,"trans") 403 self.cmd.zoom("trans") 404 finally: 405 self.cmd.set("suspend_updates",0,quiet=1) 406 self.cmd.refresh() 407 else: 408 self.cmd.delete("trans") 409 410 def ray(self,cleanup=0): 411 if not cleanup: 412 self.cmd.set("suspend_updates",1,quiet=1) 413 self.cmd.disable() 414 self.cmd.delete("ray") 415 self.cmd.load("$PYMOL_DATA/demo/il2.pdb","ray") 416 self.cmd.remove("(ray and hydro)") 417 self.cmd.hide("everything","ray") 418 self.cmd.show("spheres","ray") 419 self.cmd.orient("ray") 420 self.cmd.turn("x",90) 421 util.ray_shadows('heavy',_self=self.cmd) 422 self.cmd.set("suspend_updates",0,quiet=1) 423 self.cmd.refresh() 424 self.cmd.do("ray") 425 else: 426 self.cmd.delete("ray") 427 428 def finish(self,cleanup=0): 429 self.cmd.do("_ wizard") 430 431 def sculpt(self,cleanup=0): 432 if not cleanup: 433 self.cmd.set("suspend_updates",1,quiet=1) 434 self.cmd.disable() 435 self.cmd.delete("sculpt") 436 self.cmd.load("$PYMOL_DATA/demo/pept.pdb","sculpt") 437 self.cmd.hide("everything","sculpt") 438 self.cmd.show("sticks","sculpt") 439 if self.cmd.get_setting_boolean("use_shaders"): 440 self.cmd.show("spheres","sculpt") 441 self.cmd.set("sphere_transparency","0.75","sculpt") 442 self.cmd.set("sphere_color","grey","sculpt") 443 self.cmd.frame(1) 444 self.cmd.set("auto_sculpt",1) 445 self.cmd.set("sculpting",1) 446 self.cmd.sculpt_activate("sculpt") 447 self.cmd.do("edit_mode") 448 self.cmd.set("valence","0.05") 449 self.cmd.set("suspend_updates",0,quiet=0) 450 self.cmd.unpick() 451 else: 452 self.cmd.set("valence","0") 453 self.cmd.set("sculpting",0) 454 self.cmd.set("auto_sculpt",0) 455 self.cmd.delete("sculpt") 456 self.cmd.mouse() 457