pml基础语法
- 格式:doc
- 大小:52.00 KB
- 文档页数:6
[转载]PyMOL用法(教程二)基础Pymol命令这里主要介绍一下Pymol的一些基本命令操作。
就像Linux 一样,要想更好的操作Pymol,掌握一些常用的命令是必不可少的。
Pymol是区分大小写的,不过目前为止Pymol还是只用小写,所以记住,所有的命令都是使用小写字母的。
当你开始用Pymol来完成一个项目时,你也许想会让Pymol自动保存你所有输入过的命令,以方便日后你再次读取并修改。
这个可以通过创建一个log文件来达到,该文件的后缀名应为.pml,记住,Pymol像Linux一样支持Tab键命令补全:Pymol> log_open log-file-name.pml如果你想终止记录,只需要键入:Pymol> log_close好了,现在载入pdb文件(继续前用的pdb文件):Pymol> load 2vlo.pdb现在Pymol就创建了一个叫2vlo的对象,你可以在内部GUI窗口里面看见这个项目的名字。
但是你也可以自己定义该项目的名字(如test):Pymol> load 2vlo.pdb, test下面说说如何来操作你新建的对象。
首先:Pymol> show representationPymol> hide representation其中representation可以为:cartoon, ribbon,dots, spheres, surface和mesh。
使用这2个命令可以让Pymol以不同的方式显示蛋白质结构。
例如当我们键入:Pymol> hide linesPymol> show ribbon我们将得到如下结果:也许你已经注意到结构中有2个一模一样的蛋白质分子,只是方向不同而已,那么如何让Pymol只显示当中的一个分子呢?首先输入如下命令:Pymol> label all, chains这个命令的作用是让Pymol给蛋白质结构中的“链”编号,你会发现,第一个分子由“链”A-E组成,第二个则由F-J组成。
Perl语法中Perl运算符⽤法指南1.Perl运算符1.1 算数运算符 Perl固然在变量与数据范例都和C⼤不不异,然⽽它的运算符和C险些不异,除了C的范例转换运算符type,指针引⽤运算符*ptr和布局成员选择符,其他C的运算符险些完全呈现在Perl⾥,Perl新增了⼏个新运算符,好⽐在字符处置⽅⾯.◆Perl到今朝撑持的算数运算符有⼀些⼏种:+加法运算符-减法运算符*乘运算符/除运算符(只对浮点数运算)%取模运算符(只对整数运算)下⾯给出Perl算数运算的⼀些实例:$x=2.5;$y=3;print($x+2*$y);print(7/$y);printint(7/$y);print(7%$y);print(7.5%$y);Perl还撑持递增和递减运算符:++递加--递减◆Perl新增了乘⽅运算符:**,请看下⾯的例⼦:$x=2**3;#2的3次⽅$y=2**0.5;#2的平⽅根$z=-2**-3;#成果是:-0.1251.2 Perl语法之位运算符位运算符对⼆进制表达式的整数情势举⾏处置,运算成果为整数.若是位运算符的操纵数是字符串或分数,Perl起⾸把它们转换成整数,并⽤32位长整数情势暗⽰它们.Perl撑持全部的C说话运算符:&位与运算符.位⾮运算符<<位左移运算符>>位右移运算符有关位运算符的具体内容,请参看C说话有关的内容,这⾥我们就未⼏讲了,只举⼏个例⼦:$x=5;$y=3;print$x|$y;#成果是7(⼆进制暗⽰:111)print$x&$y;#成果是1(⼆进制暗⽰:001)print$x<<2;#成果是20(⼆进制暗⽰:10100)print$x>>1;#成果是2(⼆进制暗⽰:10)1.3Perl语法之⽐⼒运算符 ⽐⼒运算符的功效是⽐⼒两个操纵数的值.Perl在举⾏⽐⼒运算前,会先将字符操纵数转换为数字.Perl⽤专门的字符串⽐⼒运算符对纯字符举⾏表运算.1.4Perl语法之逻辑运算符逻辑运算符测试布尔表达式的值,其成果为真或假.Perl以为逻辑运算符的每个操纵数都为布尔值(即真或假).Perl的逻辑运算符包罗:||逻辑或运算符;&&逻辑与运算符.Perl按从左到右的挨次计较逻辑表达式.当逻辑或运算符的⼀个操纵数为真,⼤概当逻辑与运算符的⼀个操纵数为假时,Perl 将停⽌逻辑表达式的计较.Perl操纵这种短回路计值快速计较表达式的值.是以,这两个运算符也叫短回路AND和短回路OR.!负运算符:前提运算符,挨次计值符运算符!否认操纵数的布尔值,相称于逻辑⾮.?:前提运算符,有3个操纵数,表达情势为:condition?true-result:false-result$access=($usereq'流云'?'root':'guest');挨次运算符(,)从严酷意义上讲并不是逻辑运算符,由于它并不查抄操纵数的真假.Perl从左到右的计较逗号运算符,并返回最右边的操纵数,都好运算符是从C连续出来的,详细利⽤可以参考C⾥的⽤法,这⾥我就不累述了.1.5Perl语法之字符运算符因为Perl⾃⼰是为⽂本处置开辟的.是以,它增添很多新的字符串运算符.Perl的字符串运算符包罗:.字符毗连运算符x字符串复制运算符=~将⼀个变量绑定到模式⽴室!~将⼀个变量绑定到模式⽴室,取⾮前两个运算符⽐⼒简略.此刻看看例⼦:print'C'.'a'.'l'x2;#输出成果将是:Call;后两个运算符⾸要⽤于模式⽴室,今后将会有关于模式⽴室的详细解说,这⾥就未⼏说了,我们来看看它们的例⼦,以领会它们的感化:$text='本⽇下⾬了';print($text=~/下⾬/)?'本⽇下⾬了':'本⽇没下⾬';我们看到的例⼦可以发明是否变量中是否包罗我们所必要的字符串.1.6Perl语法之赋值运算符赋值运算符和C说话的赋值运算符差未⼏,以下是各类赋值运算符:=+=-=*=/=%=|=&=^=~=<<=>>=**==.=x=1.7Perl语法之Lvalue 在Perl和C说话中,lvalue暗⽰赋值运算符左边的实体.也便是说,lvalue与变量⼀样,可以给它分派值.⽐⽅在Perl号令⽂件中不克不及向字符串赋值,如"Bob"=32这个语句便是错误的!由于"Bob"不是⼀个lvalue,可是若是对$Bob赋值,如$Bob=32,这个语句便是准确的!由于变量$Bob是⼀个lvalue.在Perl中,任何故意义的lvalue只能暗⽰⼀个实体.⽐⽅下⾯的第⼀个语句列出了表的值(便是数组的值,只不外说法纷歧样⽽已),@color便是⼀个lvalue,第⼆个语句中,将表的值赋值给3个标量变量,3个变量便是lvalue:@color=($r,$g,$b);($r,$g,$b)=@color;Perl的赋值运算符对表举⾏处置时,可以不合错误整个表举⾏处置,⽽只针对表的某⼀个⼤概⼏个元素举⾏赋值:@times[2,5,9]=(20,40,10);($arg1,$arg2,@reset)=@ARGV;1.8Perl语法之表运算符 Perl包罗以下⼀些表运算符,⽽c没有:,表机关符..规模运算符x表复制运算符前⾯我们在先容"标量与数组变量"时,已经计划到了机关符(我以为叫分开符,更轻易明⽩些)规模运算符我们在⽤来建⽴数组下标规模时,也⽤到过!不外,请注重它的功效还远不⽌这个,它还可以⽤来作为返回从左边操纵数到右边操纵数之间挨次整数的规模(包罗摆布双⽅的操纵数).号令⽂件凡是同时操纵规模运算符缔造⼀个持续整数表:@digits=0..9;如许我们就缔造了⼀个表,其值为(0,1,2,3,4,5,6,7,8,9)表复制运算符是⼀个很是风趣的东东,我们来看⼀个例⼦:@copy_3=(1,2,3)x3;这个表有9元素,其值为(1,2,3,1,2,3,1,2,3)怎么样?很便利吧!1.9Perl语法之⽂件运算符Perl⼤⼤扩展了⽂件处置运算符.Perl⾄少有27个运算符在不打开⽂件的环境下,可以或许测试⽂件的信息,可是很不幸,因为Perl在最初是UNIX的东西,以是绝⼤⼤都的运算符在我们风⾏的平台上:WIN9X/NT体系⽆法利⽤.但万幸的是不是全数另有4个运算符绝对可⽤,并且功效不错哦!⼀下便是那4个运算符:-d测试⽂件是不是⼀个⽬次;-e测试⽂件是否存在;-s测试⽂件的巨细;-w测试⽂件是否是可写的;前两个运算符返回的是布尔值(即真或假),第3个运算符返回⽂件的巨细(以字节作为返回体例).下⾯是利⽤⽅式:复制代码代码如下:if(-e'Perl.exe'){print'Filesizeis:'-s'Perl.exe';}else{print'Can\'tfindPerl.exe\n';}(-w'SomeFile')||die"CannotwritetoSomeFile\n";。
简介&安装Pymol是一个开放源码,由使用者赞助的分子三维结构显示软件,由Warren Lyford DeLano编写,并且由DeLano Scientific LLC负责商业发行。
Pymol被用来创作高品质的分子(特别是生物大分子如蛋白质)三维结构。
据软件作者宣称,在所有正式发表的科学论文中的蛋白质结构图像中,有四分之一是使用Pymol来制作的。
Pymol名字的来源:“Py”表示该软件基于python这个计算机语言,“Mol”则是英文分子(molucule)的缩写,表示该软件用来显示分子结构。
由于实验需要,本人正在学习该软件,在这里把学习过程记录下来,希望对有需要的朋友有所帮助。
今天先来说说安装吧。
自2006年8月1日起,DeLano Scientific 对事先编译好的PyMOL执行程序(包括beta版)采取限定下载的措施。
目前,只有付费用户可以取得。
不过源代码目前还是可以免费下载,供使用者编译。
如果你和我一样,不想为此花钱的话:1.如果你是Windows用户,首先下载Pymol的源代码。
然后安装CygWin,并且确保正确安装以下模块:▪C++ (gcc or g++ package name)▪Python▪OpenGL▪PNG然后在源代码目录里面依次运行:2.如果你是Linux用户,首先确保以下东东已安装:▪Python▪Pmw▪OpenGL driver(我用的是NVdia)▪libpng▪Subversion client(下载源代码需要)然后下载Pymol的源代码$ mkdir pymol-src$ svn co https:///svnroot/pymol/trunk/pymolpymol-src然后进入源代码目录# cd pymol-src开始依次编译# python setup.py install# python setup2.py install拷贝执行脚本到某个$PATH,安装就搞定了# cp ./pymol /usr/bin如果运行时得到错误信息"ImportError: No module named Pmw",那么你应该运行# python setup2.py install pmw如果你在使用Gentoo,请确保编译python时添加了tcl/tk支持,否则运行是会提示错误"ImportError: No module named _tkinter"# USE="tcl tk" emerge python好了,下面我们就可以进入Pymol的世界了。
B2WS-6JGH-PV7G-PBKP什么是结构生物学结构生物学(Structural biology)是生物领域里面相对较新的一个分支。
它主要以生物化学和生物物理学方法来研究生物大分子,特别是蛋白质和核酸,的三维结构,以及与结构相对应的功能。
因为几乎所有的细胞内的生命活动都是通过生物大分子来完成的,并且这些大分子完成这些功能的前提是它们必须具有特定的三维结构,因此,对于生物化学家们,这是一个非常具有吸引力的领域。
该领域通常被认为开始于20世纪50年代,Max Perutzhe和Sir John Cowdery Kendrew于1959年各自利用X射线晶体学方法解析了肌红蛋白(Myoglobin)的三维结构,一种在肌肉中运输氧气的蛋白。
他们因此分享了1962年的诺贝尔化学奖,并由此揭开了结构生物学的序幕。
截止到2008年10月28日,已有53917个生物大分子结构在 (蛋白质数据库)登记在案。
目前用于研究生物大分子结构的常用方法有X射线晶体学(X-ray crystallography)、核磁共振(NMR)、电子显微学(electron microscopy)、冷冻电子显微学(electron cryomicroscopy = cryo-EM)、超快激光光谱(ultra fast laser spectroscopy)、双偏振极化干涉(Dual Polarisation Interferometry)以及圆二色谱(circular dichroism)等。
当中又以X射线晶体学和核磁共振最为常用。
图一:肌红蛋白(Myoglobin)的三维结构,世界上第一个由X射线晶体学解出的蛋白质结构,该蛋白在肌肉中传输氧气。
图二:蓝细菌(Cyanobacterium)的光系统II(Photosystem II)的三维结构,该蛋白位于细胞膜内,用以吸收光能参与光合作用。
Pymol学习笔记(一):简介&安装Pymol是一个开放源码,由使用者赞助的分子三维结构显示软件,由Warren Lyford DeLano编写,并且由DeLano Scientific LLC负责商业发行。
PML基础练习⼀个简单的 Macro (1)参数化宏Parameterized Macro (2)变量给属性赋值 (2)字符串⽅法实例 (2)定义函数 (2)练习-新建函数计算园的⾯积,测试函数 (3)条件判断语句(If Construct) (3)练习-条件判断 (3)循环赋值 (4)中断循环 Break (4)⽤skip 跳过奇数 (4)练习-跳转 (5)错误提⽰ (5)错误处理(Error Handling) (5)数组(Array) (6)赋值循环Do value (6)索引循环Do indices (6)管道排序 (6)练习-选择⼀个设备,将所有Nozzle连接的管道添加进来 (6)显⽰输出窗⼝.................................................................................错误!未定义书签。
⼀个简单的对话框(Form) (7)缺省构造⽅法(Constructor method) (7)控件定位 (7)控件定义 (8)设置控件初始值 (8)按钮的应⽤实例 (9)对话框控制属性-Apply (9)多选框的应⽤实例 (10)列表框应⽤实例 (11)Alpha Views (12)V olumn View (13)⽂件处理(Handling Files) (13)练习-⽂件处理 (13)选择⽂件 (13)⼀个简单的 MacroNEW EQUIP /FREDNEW BOXXLEN 300 YLEN 400 ZLEN 600NEW CYL DIA 400 HEI 600CONN P1 TO P2 OF PREV参数化宏Parameterized MacroNEW EQUIP /$1NEW BOXXLEN $2 YLEN $3 ZLEN $4NEW CYL DIA $3 HEI $4CONN P1 TO P2 OF PREV变量给属性赋值New PipeDesc 'My Description'Temp 100Pspec /A3BPurp PIPI!desc = desc!temp = temp!pspec = pspec!purp = purpNew PipeDesc '$!desc'Temp $!temppspec $!pspecpurp $!purp字符串⽅法实例!str = 'hello how are you!'!newstr = !str.after('hello').trim().replace('how', 'where').replace('!', '?') q var !newstr定义函数define function !!Area( !Length is REAL, !Width is REAL ) is REAL !Area = !Length * !Widthreturn !Area $*函数!!Area有两个参数⼀个返回值Endfunction练习-新建函数计算圆的⾯积,测试函数define function !!circleArea( !radius is REAL) is REAL !Area = PI * !Radius.Power(2) return !AreaEndfunction条件判断语句(If Construct)!Type = Type!OwnType = Type of OwnerIF (!Type eq 'BRAN') THEN$P CE is Branch.ELSEIF (!OwnType eq 'BRAN') THEN$P CE is Branch member.ELSE$P CE is $!Type,Pls select Branch.ENDIF练习-条件判断!type = typeadd ceif(!type eq 'BRAN') thenadd hrefadd trefelseif(!type eq 'NOZZ') thenadd crefendif$p Current type = $!type进⼀步判断:打印加⼊的元素个数!n = 0!type = typeadd ceif(!type eq 'BRAN') then!href = href!tref = trefif(!href.set()) then!n = !n + 1add hrefendifif(!tref.set()) then!n = !n + 1add trefendifelseif(!type eq 'NOZZ') then!cref = crefif(!cref.set()) then!n = !n + 1add crefendifendif$p Current type = $!type$p Total $!n reference循环赋值!Total = 0Do !x From 1 To 100 By 1!Total = !Total + !xEnddo中断循环 Break!Total = 0Do !x From 1 To 100!Total = !Total + !xIf(!Total gt 500) thenBreak $*或者Break if(!Total gt 500)EndifEnddo⽤skip 跳过奇数Do !x From 1 To 100If(Int(!x / 2) NE (!x / 2)) thenSkip $*或者Skip If(Int(!x / 2) NE (!x / 2)) Endif !Total = !Total + !xEnddo练习-跳转!n = 0label /start!type = typeif(!type eq 'BRAN') then !href = href!tref = trefif(!href.set()) then!n = !n + 1add hrefendifif(!tref.set()) then!n = !n + 1add trefendifendifif(!type eq 'NOZZ') then !cref = crefif(!cref.set()) then!n = !n + 1add crefgoto crefgolabel /startendifendif$p Total $!n reference错误提⽰Next$p OK错误处理(Error Handling) NextHandle any EndHandle$p OK数组(Array)!Str = 'Benz,Bmw,Audi' !BestCar = !Str.Split(',') Q var ! BestCar!BestCar[5] = 'Cadillac'!BestCar.Append('Lincoln')赋值循环Do valuedo !Name values !BestCar$p Array element is $!NameEnddo索引循环Do indicesdo !n indices !BestCar!Car = !BestCar[!n]$p Array element $!n is $!CarEnddo管道排序Var !Pipes Coll all Pipe for ce!pipename = array()Do !pipe value !pipes$!pipe!name = name!pipename.append(!name)EnddoVar !Names Eval name for all from !Pipes!Names.sort().invert()Do !n indices !Namesreorder $!names[$!n] before $!nEndDo练习-选择⼀个设备,将所有Nozzle连接的管道添加进来Add ceAuto ceVar !nozzles Coll all nozzle for ceVar !Crefs eval cref for all from !nozzlesDo !Cref value !CrefsAdd $!crefEndDo⼀个简单的对话框(Form)setup form !!helloTitle 'Hello'Paragraph .Message text 'Hello world'button .bye 'Goodbye' OKexit缺省构造⽅法(Constructor method)setup form !!helloTitle 'Hello'paragraph .Message text 'Hello world'text .input 'Enter text' width 10 is string $*字符串类型的编辑框button .bye 'Goodbye' OKexitDefine method .hello() $*缺省构造⽅法,与Form同名,不带参数!this.input.callback = ‘!this.doinput()’ $*Callback指明响应操作endmethodDefine method .doinput() $*响应操作!this.message.val = !this.input.val $*!this = !!hello, val 表⽰value endmethod 控件定位setup form !!helloTitle 'Hello'paragraph .Message text 'Hello world'text .input 'Enter text' at x0 ymax width 10 is stringbutton .bye 'Goodbye' at x0 ymax OKexit控件定义setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exit设置控件初始值setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'endmethod按钮的应⽤实例setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'endmethoddefine method .ce()!this.cename.val = fullnameendmethod对话框控制属性-Applysetup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'!this.apply.callback = '!this.apply()' $*不关闭对话框endmethoddefine method .ce()!this.cename.val = fullnameendmethoddefine method .apply()!dist = !this.input.val!name = !this.cename.val$p CE is $!name ,Dist = $!distendmethod多选框的应⽤实例setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'!this.apply.callback = '!this.apply()' $*不关闭对话框endmethoddefine method .ce()!this.cename.val = fullnameendmethoddefine method .apply()!name = !this.cename.val!dist = !this.input.val!elements = array()if(!this.bran.val) thenvar !elements append coll all bran Within Volume $!name $!dist endifif(!this.equi.val) thenvar !elements append coll all equip Within Volume $!name $!dist endifvar !names eval name for all from !elementsdo !element value !elementsadd $!elementenddoendmethod列表框应⽤实例setup form !!addvolumntitle 'Add volumn'button .ce 'CE' at x0 ymax tooltip 'Select pipe'paragraph .cename text 'no name' width 15text .input 'Enter text' at x0 ymax width 10 is stringFrame .frame1 'Include' at x0 ymaxtoggle .bran 'Branch'toggle .equi 'Equipment'Exitlist .list 'Drawlist' at x0 ymax+0.3 width 18 height 5button .ok 'OK' at x0 ymax OKpath rightbutton .apply 'Apply' applybutton .cancel 'Cancel' Cancel!modifyOnIcon = !!pml.getpathname('modmodeon16.png') button .pick pixmap /$!modifyonicon at x0 ymax exitdefine method .addvolumn()!this.bran.val = true!this.input.val = '1500'!this.ce.callback = '!this.ce()'!this.apply.callback = '!this.apply()' $*不关闭对话框!this.list.callback = '!this.doselection()'endmethoddefine method .ce()!this.cename.val = fullnameendmethoddefine method .apply()!name = !this.cename.val!dist = !this.input.val!elements = array()if(!this.bran.val) thenvar !elements append coll all bran Within Volume $!name $!dist endif if(!this.equi.val) thenvar !elements append coll all equip Within Volume $!name $!dist endif var !names eval name for all from !elements!this.list.dtext = !namesdo !element value !elementsadd $!elementenddoendmethoddefine method .doselection()!name = !this.list.selection()$!nameendmethodAlpha ViewsSetup Form !!alphaviewtitle ' Input & Output'view .Input ALPHA hei 10 width 40channel REQUESTSchannel COMMANDSExitbutton .apply 'Apply' at x0 ymax Applybutton .Dismiss 'Cancel' at Xmax form-size CancelExitVolumn Viewsetup form !!poptestview .vol volume width 50 hei 9exitpath downbutton .press 'swap popup' call '!this.popswap()'menu .popmenuadd 'hello' ' 'add 'world' ' 'exitexitdefine method .popswap()!this.vol.popup = !this.popmenuendmethod⽂件处理(Handling Files)!Input = object FILE('%pdmsexe%abc.txt')!Lines = !Input.ReadFile() $* ReadFile将⽂件内容写到字符串数组中!ResultArray = ARRAY() $* 声明新数组do !Line VALUES !Lines!Column1 = !Line.Part(1)!ResultArray.Append( !Column1)Enddo!Output = object FILE('%pdmsexe%def.txt')!Output.WriteFile('WRITE', !ResultArray) $* WriteFile将数组写到⽂件练习-⽂件处理!Input = object FILE('%pdmsexe%abc.txt')!Lines = !Input.ReadFile()do !Line VALUES !Lines$p $!lineEnddo选择⽂件setup form !!findfiletitle 'Find file'text .filename 'File name' at x1 ymax+0.3 width 35 is stringbutton .browser 'Brower'button .ok ' OK ' at x1 ymax+0.3 OKbutton .cancel 'Cancel' at x10 cancelexitdefine method .findfile()!this.browser.callback = |!!filebrowser('%pdmsuser%','*','',true,'!!findfile.filename.val = !!()')|endmethodSYSCOM 'notepad.exe &'后⾯加个&时单独启⽤进程调⽤应⽤程序,PDMS就不会处于停滞模态。
The Communicating Language in EPCglobal: PML物联网中的通信语言:PMLPML:物体标记语言摘要:随着RFID 的大规模应用,EPC 物联网也得到了很大的发展。
在此物联网络中,相互通信的公共语言是PML。
PML是在XML的基础上扩展而来,用于描述自然物体、处理过程及环境情况。
本文详细地讲述了PML 语言的概念、组成、设计,并给出了其应用实例。
EPC的6个组成部件:EPC编码标准EPC标签阅读器SavantONSEPC信息服务器(EPCIS,旧称PML服务器)PML设计现实生活中的产品丰富多样,难以用一个统一的语言来客观的描述每一个物体。
然而,自然物体都有着共同的特性,如体积、重量;企业、个人交易时有着时间、空间上的共性。
例如,苹果、橙子、统一鲜橙多,它们三者都属于食品饮料,而苹果、橙子同属于农作物,鲜橙多又是橙子加工后的商品;人们交易一箱苹果的时间、地点又是相同的。
但是,自然物体的一些相关信息(如生产地、保质期)不会变化。
同时,EPC物联网是建立在现有的互联网上的。
为此,作为描述物体信息载体的PML 语言,其设计有着独特的要求。
(1)开发技术PML 首先使用现有的标准(如XML、TCP/IP)来规范语法和数据传输,并利用现有工具来设计编制PML 应用程序。
PML 需提供一种简单的规范,通过通用默认的方案,使方案无需进行转换,即能可靠传输和翻译。
PML 对所有的数据元素提供单一的表示方法,如有多个对数据类型编码的方法,PML 仅选择其中一种,如日期编码。
(2)数据存储和管理PML 只是用在信息发送时对信息区分的方法,实际内容可以任意格式存放在服务器(SQL 数据库或数据表)中,即不必一定以PML 格式存储信息。
企业应用程序将以现有的格式和程序来维护数据,如Aaplet 可以从互联网上通过ONS来选取必需的数据,为便于传输,数据将按照PML 规范重新进行格式化。
Q abore ------查询元件的公称直径Q aod ------查询元件的外径Q P1 bore ------查询元件P1点的直径,包括设备上的NozzleQ P3 bore ------查询元件P3点的直径,包括设备上的NozzleMark ce ------为当前元素做标记,可以是Pipe,Branch,members, Equipment 等,标记的内容是它本身的名称。
Mark with 'RPE1567' ce ------对当前元素标记’RPE1567’, 引号里面可以是任意内容Q Att ------查询当前元素的参数Q :ims-qcl ------查询Pipe或Branch的等级,当前元素要放在Pipe或Branch层上, Q name ------查询名称,如果知道这个名称,直接敲入命令行就可以找到改元素。
Q lastmodif ------查询最后修改时间Q usermod ------查询最后修改的用户Q usermod :ims-qcl ------查询最后修改:ims-qcl这个参数的用户Q var !!ce.ppos[0].wrt(world) ------查询阀门的设计重心Q var !!ce.ppos[999].wrt(world) ------查询阀门的设计者自己定义的重心Q var !!ce.gcof.wrt(world) ------查询阀门的重心(不考虑负体积如挖孔等)Q var !!ce.ncof.wrt(world) ------查询阀门真正的重心(这是PDMS自带的功能)q var !!ce.poss.wrt(world)Q var !!ce.hstub.attribute(':ep') ------查询branch头部的壁厚,当前元素放在branch上Q var !!ce.lstub.attribute(':ep') ------查询选定元件下面管子的壁厚Q var !!ce.spref.attribute(':ep') 或 Q :ep of spref ------查询所选元件的壁厚上边的:ep可以换成其他的参数,如:de(外径)Q cllength ------查询branch的长度Q var !!ce.spref.attribute(':matiere')[1].name ------查询管道的材料Q spref ------查询元素的制造规格,比如,对于支吊架来说,得出的结果就可能是 spref /MDP/PR09-100Q :mtoarea ------查询安装分区信息Q p1 pos wrt world ------查询元件P1点坐标,例如预埋板Q pos wrt world ------查询元件在世界中的坐标Q poss wrt world ------查询Beam的头部的中心点坐标Q pose wrt world ------查询Beam的尾部的中心点坐标Q :mdsancref ------查询ATTA、STRU以及Anchor plate之间的链接关系Q :prop desc ------查询Beam截面信息Q Dtxr ------查询元件的catalogue详细参数Q Prop code ------查询支吊架的详细类型Q angle/radius ------查询弯头和三通的角度和半径Enhance ce col red ------对当前元素着色,也可以是green,pink , cyan等其他颜色Enhance ce transl >5 ------改透明度Add all within vol ce ------添加当前元素空间内的所有元素Add all STRU within vol ce 300 Col 4 ------添加当前元素周围300空间内的所有 STRU并以yellow显示,其中的STRU、 300和col 4是可变的参数Add ce auto ce ------添加当前元素并居中显示Add href cref ------添加branch头部和尾部相连的管道Add cref ------添加三通相连的管道Add all bran with :ims-ssno eq 'HRA_RPE_03' ------添加具有相同属性的管道,其中的:ims-ssno和HRA_RPE_03是可变参数Add all bran with matchw(:ims-ssno,'HRA_RPE_03') ------添加具有相同属性的管道add all bran with matchwild(:ims-ssno,'HRA_PTR_53') and Hbore gt 50 ------Aid text num 2 (name of owner) at at hpos of owner ------辅助标记,其中的num 2、name of owner和hpos of owner是可变参数,比如改成num 3、TSN、ce/p0等都可以。
简介&安装Pymol是一个开放源码,由使用者赞助的分子三维结构显示软件,由Warren Lyford DeLano编写,并且由DeLano Scientific LLC负责商业发行。
Pymol被用来创作高品质的分子(特别是生物大分子如蛋白质)三维结构。
据软件作者宣称,在所有正式发表的科学论文中的蛋白质结构图像中,有四分之一是使用Pymol来制作的。
Pymol名字的来源:“Py”表示该软件基于python这个计算机语言,“Mol”则是英文分子(molucule)的缩写,表示该软件用来显示分子结构。
由于实验需要,本人正在学习该软件,在这里把学习过程记录下来,希望对有需要的朋友有所帮助。
今天先来说说安装吧。
自2006年8月1日起,DeLano Scientific 对事先编译好的PyMOL执行程序(包括beta版)采取限定下载的措施。
目前,只有付费用户可以取得。
不过源代码目前还是可以免费下载,供使用者编译。
如果你和我一样,不想为此花钱的话:1.如果你是Windows用户,首先下载Pymol的源代码。
然后安装CygWin,并且确保正确安装以下模块:▪C++ (gcc or g++ package name)▪Python▪OpenGL▪PNG然后在源代码目录里面依次运行:2.如果你是Linux用户,首先确保以下东东已安装:▪Python▪Pmw▪OpenGL driver(我用的是NVdia)▪libpng▪Subversion client(下载源代码需要)然后下载Pymol的源代码$ mkdir pymol-src$ svn co https:///svnroot/pymol/trunk/pymol pymol-src然后进入源代码目录# cd pymol-src开始依次编译# python setup.py install# python setup2.py install拷贝执行脚本到某个$PATH,安装就搞定了# cp ./pymol /usr/bin如果运行时得到错误信息"ImportError: No module named Pmw",那么你应该运行# python setup2.py install pmw如果你在使用Gentoo,请确保编译python时添加了tcl/tk支持,否则运行是会提示错误"ImportError: No module named _tkinter"# USE="tcl tk" emerge python好了,下面我们就可以进入Pymol的世界了。
第一部分: 基础知识PML基本概念Programmable Macro Language 可编程宏语言.通常的PML开发包括两部分, 一部分是PML宏,脚本语言; 另一部分是PML2,面向对象的编程语言.1.PML宏(Macro)宏, 就是一系列pml命令的集合.通过$m执行.格式为: $m filename [param1 param2 ….](举例)其中param1为参数, 宏可以参数化.(举例)2.面向对象的PML2PML支持对象(Object),对话框(Form)和菜单(Menu).(举例)一.变量,函数和方法1. 变量的定义及用法在PML2中, 每一个变量都是对象. 变量名以!或者!!开头,例如!weight. !开头的变量为局部变量, !!开头的为全局变量.PML内置了常用的变量类型.(1)Real 实属类型. 提供基本的四则运算操作. 例如!a = 10!b = 10!a = !a + !b$p $!a --输出变量a的值(2)String 字符串类型. 例如!strName = ‘/EQUI-TEST-1’(3)Boolean 用于逻辑表达式. 值只能是true/false(4)Array 数组(5)Position(6)Direction3.变量的创建, 删除, 查看变量可以用赋值来创建. 例如!str = ‘abc’也可以用类型标识来创建.! str = string()! str = ‘abc’删除: ! str.delete()查看:通常使用q var! str 也可以用$p $!str4.方法(method) 和函数(Function)Method是一个对象的子程序. 只有当对象存在,才可以调用对象的方法. 例如!strNum = ‘123’!num = !strNum.Real()$p $!num以上的代码, 调用的string类型的real()方法, 将字符串转换为数字,并输出.函数的用法与方法类似, 同样有参数和返回值. 但函数是独立存在的,全局的. 在任何地方, 都可以调用.二.程序的结构控制1.循环语句(1)Do循环例如:!sum = 0Do !i From 1 To 100 By 1!sum = !sum + !iEnddo其中!i为循环变量, 初始值为1, 终指为100, 步长为1. 当步长为1是,一般省略.(2)中断Break: 中断并跳出最内层循环(3)跳过Skip. 跳过当此存换. 例如!sum = 0Do !i From 1 To 100 By 1Skip if ( int(!i / 2) eq (!i / 2)) $* 跳过所有的偶数!sum = !sum + !iEnddo2.逻辑控制语句格式为if () then … else …其中括号内的必须是表达式.例如:IF (TYPE OF OWNER EQ ‘BRAN’) THEN$P BRANCH $!!ELSEIF (TYPE EQ ‘BRAN’) THEN$P BRANCH $!!ELSE$P NOT BRANCHENDIF其中elseif /else可选, elseif可多个.3.跳转语句定义标记Label /label1跳转Golabel /gol1不建议使用.三.其他相关语句1.数组字符串长度Length()类型转换Real(),Position(),Boolean()大小写转换LowCase(),UpCase()两端截取After(str2),Before(str2),Substring(index)中间截取Substring(index,nchars)替换Replace(str2,str3)匹配Match(str2)分割(返回数组) Split()修剪Trim()2.字符串元素数量Size()追加元素Append(value)追加数组AppendArray(Array)删除全部元素Clear()倒序Invert()搜索Find(value),FindFirst(value)和并重复项Unique()3.表达式(1)算术运算符+ - * /(2)连接运算符&(3)比较运算符LT GT EQ NEQ(4)逻辑运算符AND OR NOT4.计算函数Sqrt(x)Power(x, e)Int(x)Sin(x)Cos(x)5.注释单行注释用—开头. –之前不可出现空格之外的字符单行注释$*. $*之后的内容为注释. $*之前可出现其他字符段落注释. 用$(和$)将注释内容包括进来.(举例)6.打印$p 打印内容例如$p test line打印多行$p line 1 $Line 2输出内容包括变量$p is $!!其中$为转义字符, 如果要输出$, 则使用$$7.异常处理程序运行中, 可能需要意料之中的可能发生的异常/错误, 例如节点创建失败, 遍历子节点时超过最后一个等等. 这时需要捕捉异常,作出相应的处理.(1)异常捕捉例如Site /TEST_SITEHandle (2, 109) $*$p节点不存在Endhandle其中(2, 109)为错误编号. 也可以使用handle any捕捉任意类型的错误.(2)捕捉多个异常Site /TEST_SITEHandle (2, 109) $*$p节点不存在Elsehandle (2, 108)$p /TEST_SITE节点存在, 但不是SITE类型elsehandle none$p Site /TEST_SITE节点存在endhandle其中handle none表示没有遇到错误的情况.四.用户自定义方法/用自定义函数/自定义对象(1)自定义方法Define method .方法名(参数1 is 类型, 参数2 is 类型…) is 返回值类型其中参数可没有返回值可以没有例如Define method .Sum(!a is real, !b is real) is real!sum = !a + !bReturn !numendmethod(2)自定义函数Define function !!sum(!a is real, !b is real) is real!sum = !a + !bReturn !numendFunction与方法类似. 一个文件里只能定义一个函数,扩展名为pmlfnc, 必须放在指定的文件夹下,并执行pml rehash all(3)自定义对象Define object 对象名endobject五.文件处理(1)读取!file = object FILE(‘d:\abc123.txt')!lines = !file.ReadFile()Q var!lines(2)写入!arr = array()!arr.append(‘line1’)!arr.append(‘line1’)!file = object FILE('d:\abc.txt')!file.WriteFile('WRITE', ! arr) $*将数组!arr写入文件其中’Write’可以换成'OVERWRITE'(覆盖)和'APPEND'(追加)六.对话框及菜单1.系统对话框(1)询问!!alert!confirm = !!alert.confirm('确定要删除吗?')if(!confirm neq 'YES') thenreturnendif(2)警告!!alert.message(‘message’)(3)错误提示!!alert.error(‘error’)2.自定义对话框SETUP FORM !!custumFormTITLE '自定义对话框’Text .text1 ‘点击按钮’Button .okExit这是一个最简单的对话框, 显示一个文本框加上按钮, 但是点击按钮不会有任何反应. (截图)3.对话框调用/初始化Pmlhash allPml reload form !!custumFormShow !!custumForm4.默认构造方法/初始化方法每个form初始化时, 会自动调用与其名字相同的方法. 在刚才的代码中加上Define method .custumForm()!this.text1.tag = ‘初始化完成’Endmethod除此以外, 还可以加上默认的初始化函数在开头加上一行!this.initcall = '!this.init()', 调用构造方法结束,显示之前,会自动调用init()方法5.界面消息的响应界面消息的相应, 例如点击按钮, 选择下拉框等, 用callback关联.SETUP FORM !!custumFormTITLE '自定义对话框’Text .text1 ‘点击按钮’Button .ok ‘OK’ExitDefine method .custumForm()!this.text1.tag = ‘初始化完成’!this.ok.callback = ‘!this.ok()’EndmethodDefine method .ok()!!alert.message(‘OK’)Endmethod此时, 点击按钮, 会弹出对话框. (截图)。