<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>迷途知返 &#187; BIO</title>
	<atom:link href="http://pwwang.com/category/technology/bio/feed/" rel="self" type="application/rss+xml" />
	<link>http://pwwang.com</link>
	<description>专注技术,用心生活!</description>
	<lastBuildDate>Fri, 11 Nov 2011 11:29:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>蛋白质结构位点预测方法及应用</title>
		<link>http://pwwang.com/2009/11/03/protein_binding_site_prediction/</link>
		<comments>http://pwwang.com/2009/11/03/protein_binding_site_prediction/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 08:44:58 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[SVM]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=788</guid>
		<description><![CDATA[&#160;

摘要　蛋白质功能通过与其他蛋白质和生物分子相互作用而实现其功能。蛋白质相互作用包含了一些蛋白功能分子机制的关键信息。过去的几年里人们在界面残基预测方面做出了大量的努力。现在界面预测和它的应用和发展前景状况良好。

界面预测方法依赖大范围的序列，结构以及物理性质来区别界面残基和非界面残基。输入的数据经过计算得到一个数值或者代表一个残基在蛋白界面内部的潜在可能性。对于在PDB中能够很好表示的复合物形式的蛋白，预测还是比较令人满意的，但是那些表示不太好的则不太令人满意。将来的发展方向主要是解决一些问题，如为多组分结构复合物建立结构模型。

<span class="readmore"><a href="http://pwwang.com/2009/11/03/protein_binding_site_prediction/" title="蛋白质结构位点预测方法及应用">Read More: 11596 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div align="center"><b>摘要</b>　蛋白质功能通过与其他蛋白质和生物分子相互作用而实现其功能。蛋白质相互作用包含了一些蛋白功能分子机制的关键信息。过去的几年里人们在界面残基预测方面做出了大量的努力。现在界面预测和它的应用和发展前景状况良好。</div>
<div>界面预测方法依赖大范围的序列，结构以及物理性质来区别界面残基和非界面残基。输入的数据经过计算得到一个数值或者代表一个残基在蛋白界面内部的潜在可能性。对于在PDB中能够很好表示的复合物形式的蛋白，预测还是比较令人满意的，但是那些表示不太好的则不太令人满意。将来的发展方向主要是解决一些问题，如为多组分结构复合物建立结构模型。</div>
<div><b>关键词：</b>蛋白－蛋白相互作用，结构位点预测，DNA结合位点预测，功能位点，对接</div>
<div><span id="more-788"></span></div>
<div><b>前言</b>　蛋白质相互作用是蛋白质功能的核心。相互作用发生在复合物的形成时期，不论是短暂的还是长时间的。RNA复制子就是一个很好的例子。RNA聚合酶、剪接子、核糖体、分子伴侣和一些其他的复合物在信号转导途径和酶催化和受抑制期间形成。这些复合物一般含有多种组分。蛋白质复合物通常是理解蛋白质功能的基础，它们结构的预测充满了技术难题，并且远远赶不上蛋白质单体以及蛋白质结构域的结构预测。CASP（http://predictioncenter.gc.ucdavis.edu/）是每两年举行的评估单体蛋白和蛋白质结构域预测的比赛，现在有近100个目标蛋白。CAPRI（http://capri.ebi.ac.uk/）对蛋白向复合物的对接方法进行了评估，在过去的6年里CAPRI在竞赛中总共使用了25个蛋白及复合物。对于在现在PDB（http://www.rcsb.org/pdb）里表示很好的单结构域蛋白的结构还有些争议。国际上研究结构基因组的学者们一直很关注单体蛋白和蛋白结构域，现在才刚刚开始关注蛋白质复合物。</div>
<div>这种情况下，蛋白质复合物结构提供的信息就很有价值。蛋白质复合物的界面信息就是一种分类标准。这种信息的重要性使得Jones和Thornton在和界面交迭的表面块的预测中做出了努力。2001年，一种预测蛋白－蛋白界面的单个残基的方法发表了。从那以后，至少20篇论文提出了不同的预测方法。</div>
<div>&nbsp;</div>
<div><b>界面残基的性质</b></div>
<div>界面的预测依赖于蛋白质复合物界面上残基的性质。通过界面和非界面的比较认识，更加强了我们对于蛋白质整体上的了解。这些重要的性质包括：</div>
<div><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>序列保守性。相对非界面的表面残基来说，界面残基要保守得多(Zhou and Shan, 2001)。保守性可能是由于功能或者结构上的需要(Lichtarge et al., 1996)。</div>
<div><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>20种氨基酸的分布。在蛋白－蛋白界面上，疏水（和芳香）残基以及精氨酸富集，而其他带电氨基酸分布较少(Conte et al., 1999; Zhou and Shan, 2001)。精氨酸的富集是由于阳离子－&pi;反应的需要(Crowley and Golovin, 2005)。界面上疏水残基的分布密度相对非界面来说也比较大(Neuvirth et al., 2004)。</div>
<div><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>二级结构。&beta;－片层结构更适合于界面，而&alpha;－螺旋而不太适合。界面上的环结构也总是较长。(Neuvirth et al., 2004)</div>
<div><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>溶剂可接近性。界面残基的溶剂接近性比非界面残基的溶剂可接近性要高(Jones and Thornton, 1997; Chen and Zhou, 2005)。由于非界面残基没有分子间的相互作用受体，这样就容易将分子内的相互作用极大化，于是就减小了它们的溶剂可接近性。溶剂可接近性可以从蛋白质序列来进行预测；这些方法在一些粗略没有被很好表示出来的残基中通过数据集进行训练，这样就使得界面残基的溶剂可接近性不能被很好的预测了。研究发现，预测的溶剂可接近性和实际的溶剂可接近性的差别比实际的溶剂可接近性还大(Porollo and Meller, 2007)。对于每一种氨基酸，将来根据二级结构对溶剂可接近性的分类可以提高溶剂可接近性的判别能力(Hoskins et al., 2006)。</div>
<div><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>侧链构象熵。界面残基不太倾向于选择另一种可供选择的旋光异构体(Cole and Warwicker, 2002; Liang et al., 2006)，这可能是由于在复合物形成时需要减小熵的消耗。</div>
<div>对于以上所有的性质，和蛋白结构相关的性质对于伴随着复合物形成的局部构象变化不是特别敏感。需要注意的是，很多蛋白质表面是一些抗原决定簇，这些抗原决定簇是抗体在成熟时的结合部位。所以抗原是界面预测中不太合适的目标物。</div>
<div>&nbsp;</div>
<div><b>界面预测方法</b></div>
<div>用来区分界面残基的性质很少。多种残基的多种输入数据需要将单个残基归为界面残基或者非界面残基类别。从空间邻位的残基形成界面以后，通常考虑的是典型的空间邻位的多种残基。广泛来说，界面预测可分为基于数值和概率的。两类方法都依赖于数据集的训练。通常情况下，只有表面残基才被考虑来做界面残基的预测。</div>
<div>在第一种方法中，输入数据<i>x</i><i><sub>i</sub></i>是预测对象，相应的，<i>x</i><i><sub>j</sub></i>是空间近邻的残基<i>j</i>，<i>j</i><i>&isin;n</i><i><sub>i</sub></i><i>，n</i><i><sub>i</sub></i>是残基<i>i</i>的近邻列表。用这几个参数来定义一个函数：</div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Si = &nbsp;f(Xi,Xj,c)<span lang="EN-US" style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;"><span style="position: relative; top: 7pt;"><v:shapetype coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f" id="_x0000_t75">&nbsp;</v:shapetype></span></span>&nbsp;(1)</span></div>
<div><i>c</i>是通过训练得到的系数的集合。残基<i>i</i>的&ldquo;状态&rdquo;可以是I，即界面残基，也可以是N，即非界面残基，它是由<i>Si</i>的值决定的。例如，如果<i>Si</i>大于一个极限值则预测为I，否则就预测为N。训练的目的是为了将训练集中预测的和实际的状态差异最小化。</div>
<div>基于数值的方法细节上是很广泛的。下面就是这些方法的优势和局限性：</div>
<div><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>线性回归(Li et al., 2006; Kufareva et al., 2007)。在这种方法中，等式（1）是一个关于输入数据的线性函数，比如溶剂可接近性，c是系数。这种方法的优势是简单，并且实用。例如，对于界面预测的输入数据的筛选优化。线性回归的效果在整体上不如其他方法。</div>
<div><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>打分函数(Landau et al., 2005; de Vries et al., 2006)。打分函数是在半经验能量函数的基地上建立起来的，对于不同的输入数据的不同的贡献，具有不同的形式。函数的形式也通常比线性的要复杂很多，这样就使用辨别能力更好，但是打分函数的引入需要有一些物理的背景。</div>
<div><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>支持向量机(Koike and Takagi, 2004; Yan et al., 2004)。在这种方法中，输入数据在特定空间里是一个非线性映射，在这个空间里得到一个超平面，这个平面将一点数据点优化地将I状态的点和N状态的点分开。比起线性回归，这种方法的准确性高，但是代价是失去了透明性。</div>
<div><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>神经网络(Zhou and Shan, 2001; Fariselli et al., 2002)。这里输入数据线性连结成为一个节点，转换成为一个非线性的形式。一般有一个隐藏的媒介层，它的输出数据会提供给最终的数据输出节点。将输入数据线性连结成为节点的系数，或者叫做权，在一个训练集上进行优化来使得预测输出值（如从0到1来分级）和实际状态下的值（1＝I，0＝N）的差别最小化。同样，这里的准确性也以透明度作为了代价。</div>
<div>&nbsp;</div>
<div>概率方法的目的是找到一个条件概率p(s|xi,..,xk)，其中<i>s</i>=<i>I</i>或<i>N</i>，xi,xk是预测残基的输入数据。比如，如果大于一个极限值，那么就预测为界面残基。可以从不同的水平来从训练集中得到这个条件概率：</div>
<div><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>朴素贝叶斯(Neuvirth et al., 2004)。在这种方法中，不同的输入数据<i>x</i><i><sub>1</sub></i>到<i>x</i><i><sub>k</sub></i>是独立的<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)<br />
<i>p</i>(<i>s</i>)</span>是状态s在训练集中的部分，<i>p</i>(<i>x</i><i><sub>i</sub></i>)是<i>x</i><sub>i</sub>在整个数据集中的概率密度，<i>p</i>(<i>x</i><i><sub>i</sub></i>|<i>s</i>)是给定状态<i>s</i>子集中相应的量。</div>
<div><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>贝叶斯网络(Bradford et al., 2006)。如果两个输入数据（<i>x</i><i><sub>1</sub>,x</i><i><sub>2</sub></i>）是独立的，<i>p</i>(<i>s|x</i><i><sub>1</sub>,&hellip;,x</i><i><sub>k</sub></i>)贡献因子不再是<i>p</i>(<i>x</i><i><sub>1</sub></i>|<i>s</i>)p(<i>x</i><i><sub>2</sub></i>|<i>s</i>)，而是联合概率<i>p</i>(<i>x</i><i><sub>1</sub>,x</i><i><sub>2</sub></i>|<i>s</i>)。</div>
<div><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>隐马尔科夫模型(Friedrich et al., 2006)。这种方法是关于一条状态链的，比如&ldquo;在多序列比对中对I位置的匹配&rdquo;，&ldquo;对N位置的匹配&rdquo;，插入以及删除。每一个状态都可以用表示氨基酸的20个字母来表示，或者是一种沉默状态（就像删除状态一样）。这种状态链是隐藏的，但是氨基酸链，如蛋白质序列是可见的。隐马尔科夫模型给出了残基<i>i</i>在蛋白质序列<i>a</i>中是否处理界面状态的概率<i>p</i>(<i>s</i><i><sub>i</sub>=</i>I|<i>a</i>)</div>
<div><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>条件随机场(Li et al., 2007)。在这种方法中，蛋白质序列的每一个位置都被一个状态所标记，即I或者N。假设蛋白质序列为<i>a</i>，状态序列为<i>s</i>，那么概率可表示为：<br />
<span>&nbsp;(3)<br />
</span>特征函数<i>f</i><i><sub>l</sub></i>和<i>g</i><i><sub>l</sub></i>可以看作是残基<i>i</i>（和<i>i-1</i>）在序列a中被标记为<i>s</i><i><sub>i</sub></i>（和<i>s</i><i><sub>i-1</sub></i>）的贡献分数。在训练中对权<i>&gamma;</i><i><sub>l</sub></i>和<i>&mu;</i><i><sub>l</sub></i>进行调整，完成训练之后，状态标记序列可被预测为那些使<i>p</i>(<i>s</i>|<i>a</i>)具有最大值的序列。</div>
<div>&nbsp;</div>
<div>一种聚类处理常被用来筛选残基。这种可以清除那些孤立的残基，并且选择概率最大的聚类作为最后的预测结果。</div>
<div>不同的方法适合于不同的输入数据；实际上，不同的数据已经包含在了它们的补充部分。这样就可以通过结合不同的预测方法的结果来提高预测的效果。一些研究已经表明这种多方法结合的方法具有很大的优势。值得一提的是，最后一种方法是从蛋白－蛋白对接中发展起来的，现在也被用于界面的预测。这是界面预测辅助解决对接问题的反向应用。</div>
<div>&nbsp;</div>
<div><b>网站服务器</b></div>
<div>很多方法学研究者都建立了网站服务器，允许用户从提交的蛋白质结构来预测界面残基。有些服务器还支持多种方法的对比。</div>
<div>界面预测有两个竞争性的要求。预测需要尽量覆盖更多的真实的界面残基，但同时又尽可能减少假阳性的情况。两个要求可以分别用覆盖率和准确性来度量。如果真实的界面残基是RI，在所有的界面残基预测中，真阳性和假阳性分别是TP和NP，那么覆盖率：</div>
<div>Cov＝TP/RI<span>&nbsp;&nbsp; &nbsp;&nbsp;</span>（4）</div>
<div>准确性：</div>
<div>Acc=TP/(TP+FP) （5）</div>
<div>在文献中，覆盖率通常和敏感性同时提及，准确性通常和精度或者特异性相关。在一些研究中，一些预测的评价通常也和非界面残基的预测有关。由于真实的界面残基数目相比于非界面残基的数目常常被测量得过大，因此这样的评价偏向于阳性数目很小的预测方法，但是是不推荐这样做的(Zhou and Qin, 2007)。</div>
<div>下面是一些网站服务器：</div>
<div><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>cons-PPISP(http://pipe.scs.fsu.edu/ppisp.html)。这种方法使用了神经网络，使用的数据是PSI-Blast序列文档和溶剂可接近性(Chen and Zhou, 2005)。</div>
<div><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Promate(http://bioportal.weizman)。一种基于二级结构，原子分布，氨基酸配对及序列保守性等性质的朴素贝叶斯方法(Neuvirth et al., 2004)。</div>
<div><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>PINUP(http://sparks.informatics.iupui.edu/PINUP/)一种基于半经验的打分函数的方法。包括侧链能量，溶剂可接近面积分布和序列保守性(Liang et al., 2006)。</div>
<div><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>PPI-Pred(http://bioinformatics.leeds.ac.uk/ppi-pred)，采用了六种性质（包括表面形状，电势等）作为输入数据的支持向量机方法(Bradford and Westhead, 2005)。</div>
<div><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>SPPIDER(http://sppider.cchmc.org/)，一种包含溶剂可接近性预测的神经网络方法(Porollo and Meller, 2007)。</div>
<div><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Meta-PPISP(http://pipe.scs.fsu.edu/meta-ppisp.html)，是基于cons-PPISP，Promate和PINUP的复合网络服务器(Qin and Zhou, 2007a)。</div>
<div>&nbsp;</div>
<div><b>应用</b></div>
<div>蛋白质界面预测方法学的研究和预测的结果在很多重要问题上都有应用。</div>
<div><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>DNA结合位点<br />
预测蛋白－蛋白界面的基本原理对于预测蛋白质与DNA相互作用的DNA的结合位点也是可行的。关于后者的一些问题已经由前面提到的方法解决，如神经网络(Ahmad et al., 2004; Tjong and Zhou, 2007)和支持向量机(Wang and Brown, 2006; Kuznetsov et al., 2006)。用于区分DNA结合位点和非DNA结合位点的性质似乎比区分蛋白－蛋白相互作用位点的性质更明显(Tjong and Zhou, 2007)。例如，DNA结合位点富集带正电荷的精氨酸和赖氨酸残基，而带负电荷的天冬氨酸和谷氨酸则很少。现在DNA结合位点的预测成为了各种不同方法学测试的一个很好的环境。</div>
<div><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>功能位点<br />
蛋白质相互作用位点常常几乎可以等同于功能位点。在相互作用位点预测中，采用的是结构和物理性质。在功能位点的预测中，常常强调的是与进化相关的性质，就像系统进化树所表示的那样(Res et al., 2005; Landau et al., 2005)。更好的利用进化关系将会改进界面预测，而结构和物理性质的结合将促进功能位点的预测。<br />
引起疾病的突变常发生在蛋白质相互作用期间(Zhou, 2004; Toomes et al., 2004)。界面预测可以直接理解病理机制并辅助药物设计。</div>
<div><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>对接<br />
从未结合蛋白亚基形成蛋白复合物结构的这个过程就是对接。无论是局部还是大范围的构象变化都是很复杂的。搜索空间过大和对接分级是两个主要的问题，界面预测在两个问题上都能有所应用(Qin and Zhou, 2007b)。界面残基预测可以将起始搜索局限在一个范围内，这是对前一个问题的应用；另外界面残基预测可以对对接结构进行打分，这是对后一个问题的解决。界面预测在对接中的地位就好像二级结构预测在单体蛋白和蛋白结构域的预测中的地位一样。相应于从局部的序列来预测二级结构，界面残基的预测不依赖于与它结合的蛋白。<br />
界面预测对两个问题的解决都将界面预测引入到对接的研究中(van Dijk et al., 2005; Tress et al., 2005)。前者应用的优势是搜索空间在一开始就得到了限制；缺点是对接可能被本来就不准确的界面预测所有误导。另一方面，在一种非偏见的搜索之后，后者应用允许预测界面残基结合其他分数（如基于反应能量的分数）来对对接结果进行分级，这更容易被不准确性所包容。对于界面预测的把握，是一个在对接中是否采用前者应用和后者应用的因素。</div>
<div>&nbsp;</div>
<div><b>讨论</b></div>
<div>在过去几年里，界面预测方法学得到了很大的发展。现在已经能够很好的预测在PDB中表示很好的蛋白复合物（如小分子或者一般的酶及抑制剂），但是对于不能很好表示的复合物（如大蛋白）的预测还是很困难的。这样看起来似乎在未来几年里，随着PDB中蛋白质复合物结构的丰富，现在的预测方法将就得到很大的提高。同时在方法上也有很多需要解决的问题：</div>
<div><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>大规模的构象改变。就像前面提到的一样，现在的预测方法可以处理一些局部的构象改变。但是对于大规模的构象改变，如一些相关的域和域之间的重新分布，是很影响预测结果的。例如，天然复合物中的界面残基会散布在未结合的结构中，这个会在聚类的过程中消除。似乎界面预测和预测域重新分布的方法可以相互辅助来达到它们各自的目的(Zhou and Qin, 2007)。</div>
<div><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>一个蛋白，多个受体（配体）。一个蛋白可以和很多其他蛋白相互作用，并且界面在表面的不同的部分。这种情况下，需要对不同的结合块进行预测，并且还需要不同受体（配体）的生化数据。预测两个相互作用蛋白界面残基关系的方法是很有用的。一个蛋白可能结合另一个蛋白和DNA，可以在同一个块，也可以在两个不同的块，有趣的是，到底是蛋白－蛋白界面预测方法还是DNA结合位点预测能够正确的识别第一种情况下的同一个块还是第二种情况下的不同的块(Tjong et al., 2007)。</div>
<div><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>多组分复合物。很多蛋白质功能都和具有两个以上组分的大型蛋白有关。有时大型蛋白可以看作是每次增加一个组分而形成的。这种情况下，我们可以依次地对界面进行预测(Tjong et al., 2007)。我们需要看一看这种方法的通用性如何，其他方法也需要尝试。</div>
<div>&nbsp;</div>
<div>界面预测越来越成功。结合其他计算工具有实验数据，蛋白－蛋白相互作用的界面预测将会得到更好的发展。</div>
<div>&nbsp;</div>
<div><b>参考文献：</b></div>
<div align="left">Ahmad, S., Gromiha, M.M. and Sarai, A. (2004) Analysis and prediction of DNAbinding proteins and their binding residues based on composition, sequence and structural information, <i>Bioinformatics</i>, <b>20</b>, 477-486.</div>
<div align="left">Bradford, J.R., Needham, C.J., Bulpitt, A.J. and Westhead, D.R. (2006) Insights into protein&ndash;protein interfaces using a Bayesian network prediction method, <i>J. Mol. Biol.</i>, <b>362</b>, 365-386.</div>
<div align="left">Bradford, J.R. and Westhead, D.R. (2005) Improved prediction of protein-protein binding sites using a support vector machines approach, <i>Bioinformatics</i>, <b>21</b>, 1487-1494.</div>
<div align="left">Chen, H. and Zhou, H.-X. (2005) Prediction of interface residues in protein-protein complexes by a consensus neural network method: Test against NMR data, <i>Proteins</i>, <b>61</b>, 21-35.</div>
<div align="left">Cole, C. and Warwicker, J. (2002) Side-chain conformational entropy at protein&ndash;protein interfaces, <i>Protein Sci.</i>, <b>11</b>, 2860-2870.</div>
<div align="left">Conte, L.L., Chothia, C. and Janin, J. (1999) The atomic structure of protein-protein recognition sites, <i>J. Mol. Biol.</i>, <b>285</b>, 2177-2198.</div>
<div align="left">Crowley, P.B. and Golovin, A. (2005) Cation-&pi; interactions in protein-protein interfaces, <i>Proteins</i>, <b>59</b>, 231-239.</div>
<div align="left">de Vries, S.J., van Dijk, A.D.J. and Bonvin, A. (2006) WHISCY: What information does surface conservation yield? Application to data-driven docking, <i>Proteins</i>, <b>63</b>, 479-489.</div>
<div align="left">Fariselli, P., Pazos, F., Valencia, A. and Casadio, R. (2002) Prediction of proteinprotein interaction sites in heterocomplexes with neural networks, <i>Eur. J. Biochemistry</i>, <b>269</b>, 1356-1361.</div>
<div align="left">Hoskins, J., Lovell, S. and Blundell, T.M. (2006) An algorithm for predicting protein&ndash;protein interaction sites: abnormally exposed amino acid residues and secondary structure elements, <i>Protein Sci.</i>, <b>15</b>, 1017-1029.</div>
<div align="left">Jones, S. and Thornton, J.M. (1997) Prediction of protein&ndash;protein interaction sites using patch analysis, <i>J. Mol. Biol.</i>, <b>272</b>, 133&ndash;143.</div>
<div align="left">Koike, A. and Takagi, T. (2004) Prediction of protein-protein interaction sites using support vector machines, <i>Prot. Eng. Des. Sel.</i>, <b>17</b>, 165-173.</div>
<div align="left">Kufareva, I., Budagyan, L., Raush, E., Totrov, M. and Abagyan, R. (2007) PIER:Protein interface recognition for structural proteomics, <i>Proteins</i>, <b>67</b>, 400-417.</div>
<div align="left">Kuznetsov, I.B., Gou, Z., Li, R. and Hwang, S. (2006) Using evolutionary and structural information to predict DNA-binding sites on DNA-binding proteins, <i>Proteins</i>, <b>64</b>, 19-27.</div>
<div align="left">Landau, M., Mayrose, I., Rosenberg, Y., Glaser, F., Martz, E., Pupko, T. and Ben-Tal, N. (2005) ConSurf 2005: the projection of evolutionary conservation scores of residues on protein structures, <i>Nucl. Acids Res.</i>, <b>33</b>, W299-W302.</div>
<div align="left">Li, J.J., Huang, D.S., Wang, B. and Chen, P. (2006) Identifying protein-protein interfacial residues in heterocomplexes using residue conservation scores, <i>Int. J. Biol. Macromol.</i>, <b>38</b>, 241-247.</div>
<div align="left">Li, M.H., Lin, L., Wang, X.L. and Liu, T. (2007) Protein-protein interaction site prediction based on conditional random fields, <i>Bioinformatics</i>, <b>23</b>, 597-604.</div>
<div align="left">Liang, S., Zhang, C., Liu, S. and Zhou, Y. (2006) Protein binding site prediction using an empirical scoring function, <i>Nucl. Acids Res.</i>, <b>34</b>, 3698-3707.</div>
<div align="left">Lichtarge, O., Bourne, H.R. and Cohen, F.E. (1996) An evolutionary trace method defines binding surfaces common to protein families, <i>J. Mol. Biol.</i>, <b>257</b>, 342-358.</div>
<div align="left">Mintseris, J., Wiehe, K., Pierce, B., Anderson, R., Chen, R., Janin, J. and Weng, Z. (2005) Protein-protein docking benchmark 2.0: an update, <i>Proteins</i>, <b>60</b>, 214-216.</div>
<div align="left">Neuvirth, H., Raz, R. and Schreiber, G. (2004) ProMate: A structure based prediction program to identify the location of protein-protein binding sites, <i>J. Mol. Biol.</i>, <b>338</b>, 181-199.</div>
<div align="left">Porollo, A. and Meller, J. (2007) Prediction-based fingerprints of protein-protein interactions, <i>Proteins</i>, <b>66</b>, 630-645.</div>
<div align="left">Qin, S.B. and Zhou, H.-X. (2007a) meta-PPISP: a meta web server for protein-protein interaction site prediction, <i>Bioinformatics</i>, submitted.</div>
<div align="left">Qin, S.B. and Zhou, H.-X. (2007b) A holistic approach to protein docking, <i>Proteins</i>, submitted. Res, I., Mihalek, I. and Lichtarge, O. (2005) An evolution based classifier for prediction of protein interfaces without using protein structures, <i>Bioinformatics</i>, <b>21</b>, 2496-2501.</div>
<div align="left">Tjong, H. and Zhou, H.-X. (2007) DISPLAR: an accurate method for predicting DNA-binding sites on protein surfaces, <i>Nucl. Acids Res.</i>, <b>35</b>, 1465-1477.</div>
<div align="left">Toomes, C., Bottomley, H.M., Jackson, R.M., Towns, K.V., Scott, S., Mackey, D.A., Craig, J.E., Jiang, L., Yang, Z., Trembath, R., Woodruff, G., Gregory-Evans, C.Y., Gregory-Evans, K., Parker, M.J., Black, G.C., Downey, L.M., Zhang, K. and Inglehearn, C.F. (2004) Mutations in <i>LRP5 </i>or <i>FZD4 </i>underlie the common familial exudative vitreoretinopathy locus on chromosome 11q, <i>Am. J. Hum. Genet.</i>, <b>74</b>, 721-730.</div>
<div align="left">Tress, M., de Juan, D., Grana, O., Gomez, M.J., Gomez-Puertas, P., Gonzalez, J.M., Lopez, G. and Valencia, A. (2005) Scoring docking models with evolutionary information, <i>Proteins</i>, <b>60</b>, 275-280.</div>
<div align="left">van Dijk, A.D.J., de Vries, S.J., Dominguez, C., Chen, H., Zhou, H.-X. and Bonvin, A.M.J.J. (2005) Data-driven docking: HADDOCK&#8217;s adventures in CAPRI, <i>Proteins</i>, <b>60</b>, 232-238.</div>
<div align="left">Wang, L. and Brown, S.J. (2006) BindN: a web-based tool for efficient prediction of DNA and RNA binding sites in amino acid sequences, <i>Nucl. Acids Res.</i>, <b>34</b>, W243-W248.</div>
<div align="left">Yan, C.H., Honavar, V. and Dobbs, D. (2004) Identification of interface residues in protease-inhibitor and antigen-antibody complexes: a support vector machine approach, <i>Neural Comput. Appl.</i>, <b>13</b>, 123-129.</div>
<div align="left">Zhou, H.-X. (2004) Improving the understanding of human genetic diseases through predictions of protein structures and protein-protein interaction sites, <i>Curr. Med. Chem.</i>, <b>11</b>, 539-549.</div>
<div align="left">Zhou, H.-X. and Shan, Y. (2001) Prediction of protein interaction sites from sequence profile and residue neighbor list, <i>Proteins</i>, <b>44</b>, 336-343.</div>
<div>Zhou, H.-X. and Qin, S.B. (2007) Interaction-Site Prediction for Protein Complexes: a Critical Assessment, <i>Bioinformatics</i>, <b>23</b>, 2203-2209.</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/11/03/protein_binding_site_prediction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>libsvm-2.88中文文档/tools</title>
		<link>http://pwwang.com/2009/05/05/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3tools/</link>
		<comments>http://pwwang.com/2009/05/05/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3tools/#comments</comments>
		<pubDate>Tue, 05 May 2009 09:50:25 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[SVM]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=613</guid>
		<description><![CDATA[&#160;

前面对libsvm-2.88目录下的README进行了部分翻译, 似乎需要的朋友比较多, 这下对tools目录下的README进行了翻译. 给需要的朋友.

&#160;这个目录中包括一些有用的程序:

<span class="readmore"><a href="http://pwwang.com/2009/05/05/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3tools/" title="libsvm-2.88中文文档/tools">Read More: 2528 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>前面对<a target="_blank" href="http://pwwang.com/?p=256">libsvm-2.88目录下的README</a>进行了部分翻译, 似乎需要的朋友比较多, 这下对tools目录下的README进行了翻译. 给需要的朋友.</p>
<p>&nbsp;这个目录中包括一些有用的程序:<br />
1. 子集选择工具<br />
2. 参数选择工具<br />
3. LIBSVM格式检查工具</p>
<p><span id="more-613"></span></p>
<p><b>第一部分: 子集选择工具</b></p>
<p>介绍<br />
==============</p>
<p>训练大量的数据需要消耗大量的时间. 有时你需要先对一个小的子集进行训练. python脚本subset.py可以随机地选择一个特定数目的样本. 对于分类数据, 我们提供一个分层选择来保证相同的类在一个子集中.</p>
<p>用法: subset.py [options] dataset number [output1] [output2]</p>
<p>这个脚本从给定的数据集中选择一个子集.</p>
<p>选项:<br />
-s method: 选择的方式(默认 0)<br />
&nbsp;0 &#8212; 分层选择(只用于分类)<br />
&nbsp;1 &#8212; 随机选择<br />
&nbsp;<br />
output1: 子集(可选)<br />
output2: 余下的数据(可选)</p>
<p>如果output1未选, 那么子集将在屏幕上打印出来.</p>
<p>例子<br />
===============</p>
<p>&gt;python subset.py heart_scale 100 file1 file2</p>
<p>从heart_scale中随机选择100个样本保存到file1中,而剩余的实例保存到file2中.</p>
<p><b>第二部分: 参数选择工具</b></p>
<p>介绍<br />
===============</p>
<p>grid.py是一个参数选择工具, 这个工具是用于采用RBF(径向基函数)核的C-SVM分类的. 它采用CV(交叉验证)技术来估计特定范围内每一个联合参数的准确性并且帮助你选择一个适合你问题的最佳参数.</p>
<p>grid.py为交叉验证直接执行libsvm二进制文件(不需要python的结合)并且用gnuplot来画CV准确性的轮廓. 在使用之前, 你必须事先安装libsvm和gnuplot. gnuplot可以在这里下载: <a href="http://www.gnuplot.info/">http://www.gnuplot.info/</a></p>
<p>
在苹果系统中, 预编译的gnuplot文件需要Aquarterm库的支持, 这个库也需要安装. 另外, 这个版本的gnuplot不支持png, 所以你需要修改&quot;set term png transparent small&quot;并使用其他图片格式. 例如你可以设定为&quot;set term pbm small color&quot;.</p>
<p>用法: grid.py [-log2c begin,end,step] [-log2g begin,end,step] [-v fold]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [-svmtrain pathname] [-gnuplot pathname] [-out pathname] [-png pathname]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [additional parameters for svm-train] dataset</p>
<p>这个程序处理v-fold交叉验证的时候采用的参数C(和gamma) = 2^begin, 2^(begin+step), &#8230;, 2^end.</p>
<p>你可以采用-svmtrain和-gnuplot参数来指定libsvm和gnuplot的位置.</p>
<p>对于windows用户, 请使用gnuplot.exe. 如果你正在使用gnuplot 3.7.1版本, 请升级到3.7.3或更高版本. 3.7.1有一个bug. 如果你使用的是windows下的<br />
cygwin, 请使用gunplot-x11.</p>
<p>例子<br />
===============</p>
<p>&gt; python grid.py -log2c -5,5,1 -log2g -4,0,1 -v 5 -m 300 heart_scale</p>
<p>用户(特别是MS Windows用户)可能需要指定可执行文件的路径. 你既可以在grid.py的开头修改路径,也可以在命令行中指定它们. 例如,</p>
<p>&gt; grid.py -log2c -5,5,1 -svmtrain c:\libsvm\windows\svm-train.exe -gnuplot c:\tmp\gnuplot\bin\pgnuplot.exe -v 10 heart_scale</p>
<p>Output: 两个文件<br />
dataset.png: gnuplot生成的CV准确性轮廓图<br />
dataset.out: 每一个(log2(C),log2(gamma))的CV准确性</p>
<p>并行网格搜索<br />
===============</p>
<p>把工作分离到一个共享相同文件系统的计算机集群, 你可以处理一个并行的网格搜索. 首先, 在grid.py中添加机器名字:</p>
<p>ssh_workers = [&quot;linux1&quot;, &quot;linux5&quot;, &quot;linux5&quot;]</p>
<p>然后设定你的ssh, 使得授权工作不需要询问密码.</p>
<p>如果一台机器有多个CPU或者更多的RAM, 相同的机器(例如这里的linux5)可以列出不只一次. 如果本地机器是最好的, 你也可以扩大nr_local_worker, 例如,</p>
<p>nr_local_worker = 2</p>
<p>例子:</p>
<p>&gt; python grid.py heart_scale<br />
[local] -1 -1 78.8889&nbsp; (best c=0.5, g=0.5, rate=78.8889)<br />
[linux5] -1 -7 83.3333&nbsp; (best c=0.5, g=0.0078125, rate=83.3333)<br />
[linux5] 5 -1 77.037&nbsp; (best c=0.5, g=0.0078125, rate=83.3333)<br />
[linux1] 5 -7 83.3333&nbsp; (best c=0.5, g=0.0078125, rate=83.3333)<br />
.<br />
.<br />
.</p>
<p>如果 -log2c, -log2g, 或 -v 没有指定, 则使用默认值.</p>
<p>如果你的系统使用telnet代替ssh, 你应该把你的机器名字在telnet_workers列出.</p>
<p><strong>第三部分: LIBSVM格式检查工具</strong></p>
<p>介绍<br />
=================</p>
<p>`svm-train&#8217;只是对输入数据进行简单的检查. 要做更详细的检查, 我们提供一个python脚本 `checkdata.py&#8217;.</p>
<p>用法: checkdata.py dataset</p>
<p>这个工具的作者是台湾大学的Rong-En Fan.</p>
<p>例子<br />
==================</p>
<p>&gt; cat bad_data<br />
1 3:1 2:4<br />
&gt; python checkdata.py bad_data<br />
line 1: feature indices must be in an ascending order, previous/current features 3:1 2:4<br />
Found 1 lines with error.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/05/05/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3tools/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>用Perl来Post网页数据</title>
		<link>http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/</link>
		<comments>http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 08:57:46 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=585</guid>
		<description><![CDATA[&#160;

我只能说，How 强大 Perl is！

我用过不同的方法来实现网页的post，但是perl是最方便最好用的！

<span class="readmore"><a href="http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/" title="用Perl来Post网页数据">Read More: 1509 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>我只能说，How 强大 Perl is！</p>
<p>我用过不同的方法来实现网页的post，但是perl是最方便最好用的！</p>
<p>废话不多说，看代码(这是一段实际工作中用到的代码，也可以修改一下用作其他用途，严禁做坏事：）） )：</p>
<p><span id="more-585"></span></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Panwen Wang, April 7th, 2009</span>
<span style="color: #666666; font-style: italic;"># Submit a query to http://consurf.tau.ac.il/</span>
<span style="color: #666666; font-style: italic;"># to get conservation scores of each residue.</span>
<span style="color: #666666; font-style: italic;">#</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> URI<span style="color: #339933;">::</span><span style="color: #006600;">Escape</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">Simple</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span><span style="color: #339933;">::</span><span style="color: #006600;">Common</span> <span style="color: #000066;">qw</span><span style="color: #009900;">&#40;</span>POST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ua</span> <span style="color: #339933;">=</span> LWP<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> $0: <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>Panwen Wang, April 7th, 2009&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>Submit a query to http://consurf.tau.ac.il/ <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>to get conservation scores of each residue.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> Parameters:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-p &lt;pdb_ID&gt;         pdb id in four letters<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-c &lt;chain&gt;          chain label of given pdb<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-a &lt;algorithm&gt;      Bayes/LikelihoodML<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT:Bayes<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-m &lt;MSAprogram&gt;     MUSCLE/CLUSTALW<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: MUSCLE<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-d &lt;DATABASE&gt;       the Homologues database, SWISS-PROT/Uniprot<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: SWISS-PROT<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-n &lt;MAX_NUM_HOMOL&gt;  Max. Number of Homologues<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: 50<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-i &lt;ITERATIONS&gt;     No. of PSI-BLAST Iterations<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: 1<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-e &lt;ESCORE&gt;         PSI-BLAST E-value Cutoff<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>DEFAULT: 0.001<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-s &lt;MATRIX&gt;         Model of substitution for proteins<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>JTT(DEFAULT)/mtREV(for mitochondrial proteins)/cpREV(for chloroplasts proteins)/WAG/Dayhoff<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-l &lt;email&gt;          user's email<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>-o &lt;output folder&gt;  where the result files(1A0O_A.score) restore<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span> Usage:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>$0 -p 2UUY -c A -l xxx<span style="color: #000099; font-weight: bold;">\@</span>xxx.com -o ./conservation<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>$0 -p 2UUY -c A -l xxx<span style="color: #000099; font-weight: bold;">\@</span>xxx.com -o ./conservation -a LikelihoodML ...<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$pdb_ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$chain</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$user_email</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$ALGORITHM</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$MSAprogram</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$DATABASE</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$MAX_NUM_HOMOL</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$ITERATIONS</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$ESCORE</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$MATRIX</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$out_dir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #000000; font-weight: bold;">ARGV</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #0000ff;">$temp</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-p&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$pdb_ID</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-c&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$chain</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-a&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ALGORITHM</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-m&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$MSAprogram</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-d&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$DATABASE</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-n&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$MAX_NUM_HOMOL</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-i&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ITERATIONS</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-e&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$ESCORE</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-s&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$MATRIX</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-l&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$user_email</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$temp</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;-o&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$out_dir</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;Warning: argument $temp igorned.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-p' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$pdb_ID</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-c' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$chain</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-l' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$user_email</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;Error: argument '-o' is essential.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$out_dir</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$ALGORITHM</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;Bayes&quot;</span>                       <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ALGORITHM</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$MSAprogram</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;MUSCLE&quot;</span>                     <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$MSAprogram</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$DATABASE</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;SWISS-PROT&quot;</span>                   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$DATABASE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$MAX_NUM_HOMOL</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;50&quot;</span>                      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$MAX_NUM_HOMOL</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$ITERATIONS</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;1&quot;</span>                          <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ITERATIONS</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$ESCORE</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;0.001&quot;</span>                          <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ESCORE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$MATRIX</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;JTT&quot;</span>                            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$MATRIX</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># end of handling parameters</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># read and encode the queries</span>
<span style="color: #666666; font-style: italic;">#my $encoded_query;</span>
<span style="color: #666666; font-style: italic;">##foreach my $query (@ARGV)</span>
<span style="color: #666666; font-style: italic;">##    {</span>
<span style="color: #666666; font-style: italic;">##    open(QUERY,$query);</span>
<span style="color: #666666; font-style: italic;">##    while(&lt;QUERY&gt;)</span>
<span style="color: #666666; font-style: italic;">##        {</span>
<span style="color: #666666; font-style: italic;">##        $encoded_query = $encoded_query . uri_escape($_);</span>
<span style="color: #666666; font-style: italic;">##        }</span>
<span style="color: #666666; font-style: italic;"># }</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># build the request</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$args</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;pdb_ID=$pdb_ID&amp;chain=$chain&amp;user_email=$user_email&amp;ALGORITHM=$ALGORITHM&amp;MSAprogram=$MSAprogram&amp;DATABASE=$DATABASE&amp;MAX_NUM_HOMOL=$MAX_NUM_HOMOL&amp;ITERATIONS=$ITERATIONS&amp;ESCORE=$ESCORE&amp;MATRIX=$MATRIX&amp;send_user_mail=yes&amp;BayesInterval=3&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Querying ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$req</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span> POST <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'http://consurf.tau.ac.il/cgi-bin/consurf.cgi'</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$req</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content_type</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'application/x-www-form-urlencoded'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$req</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># get the response</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$req</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># parse out the request id</span>
<span style="color: #0000ff;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/The document has moved &lt;a href=\&quot;(.+)\&quot;&gt;here/</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$result_page</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Waiting ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">sleep</span> <span style="color: #cc66cc;">25</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># poll for results</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">;;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">sleep</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$req</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTTP<span style="color: #339933;">::</span><span style="color: #006600;">Request</span> GET <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$result_page</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">request</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$req</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$content</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">content</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$content</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/ConSurf calculation is finished/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Getting result ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$prefix_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$result_page</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/(.+)output\.html/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$result_file</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;${prefix_url}pdb&quot;</span><span style="color: #339933;">.</span><span style="color: #000066;">lc</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$pdb_ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;.gradesPE&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Saving result ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        getstore<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$result_file</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;$out_dir/${pdb_ID}_$chain.score&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">#my $req1 = new HTTP::Request GET =&gt; $result_file;</span>
        <span style="color: #666666; font-style: italic;">#my $response1 = $ua-&gt;request($req1);</span>
        <span style="color: #666666; font-style: italic;">#open(OUT,&quot;&gt;$out_dir/${pdb_ID}_$chain.score&quot;);</span>
        <span style="color: #666666; font-style: italic;">#print OUT  $response1-&gt;content;</span>
        <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$content</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/For assistance please/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ERROR! ConSurf session has been terminated.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Waiting ...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">next</span><span style="color: #339933;">;</span>    
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Sth. unexpected happened.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;"># end poll loop</span></pre></div></div>

<p>这个例子稍复杂了点，但是个比较全面的例子了，也可以post文件，但需要中间那段uri_escape.另外，我在考虑一个问题，这样post后，页面接收到的$_SERVER[&quot;HTTP_REFERER&quot;](以php为例)会是什么呢？只是觉得很奇怪，但是没有实验过，哪天有时间实验一下，再把结果贴出来。 </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/04/14/%e7%94%a8perl%e6%9d%a5post%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>操作pdb文件的类Perl版</title>
		<link>http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/</link>
		<comments>http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 06:50:28 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[pdb]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=548</guid>
		<description><![CDATA[&#160;

前面写过一个C++的版本, 功能写得非常的简单, 并且没有考虑到有MODEL的情况.

终于下定决心用Perl来重写这个类. 主要是由于以前没有用过Perl的面向对象写东西,很生疏,怕写不好,但是真正写起来却发现是那么地顺手

<span class="readmore"><a href="http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/" title="操作pdb文件的类Perl版">Read More: 7315 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>前面写过一个<a href="http://pwwang.com/?p=18" target="_blank">C++的版本</a>, 功能写得非常的简单, 并且没有考虑到有MODEL的情况.</p>
<p>终于下定决心用Perl来重写这个类. 主要是由于以前没有用过Perl的面向对象写东西,很生疏,怕写不好,但是真正写起来却发现是那么地顺手</p>
<p>perl不用费尽心思一个个地写函数的重载, 正则表达式比substr更好用. 甚至get和set可以写在一个函数里.</p>
<p>包括5个pm,放在目录pdbClass目录下, 所以每个pm里都是use pdbClass::</p>
<p>(pdbClass父目录下的perl文件)调用的时候use pdbClass::Pdb就行了.</p>
<p><span id="more-548"></span><b>Atom.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Atom<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>    <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        SERIAL        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;"># id of the atom</span>
        NAME         <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># full name of the atom, like CA</span>
        RESNAME        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># name of the residue of the atom</span>
        CHAINID        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># chain label of the atom</span>
        RESSEQ        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># residue id of the atom</span>
        X            <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># x</span>
        Y            <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># y</span>
        Z            <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># z</span>
        OCCUPANCY    <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># occupancy</span>
        TEMPFACTOR    <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>    <span style="color: #666666; font-style: italic;"># temperature factor</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Parameters: - / $line </span>
<span style="color: #666666; font-style: italic;"># Get information from an atom text line </span>
<span style="color: #666666; font-style: italic;"># or return an atom text line</span>
<span style="color: #000000; font-weight: bold;">sub</span> line<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$line</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/^ATOM\s+(\d+)\s+([A-Z0-9]+)\s*([A-Z]{3})\s+([A-Z0-9]{1})\s*([a-z0-9]+)\s+([0-9.-]+)\s+([0-9.-]+)\s+([0-9.-]+)\s+([0-9.-]+)\s+([0-9.-]+).+$/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #666666; font-style: italic;"># ATOM   2843  C   ASN C 124     143.867  14.117  34.756  1.00 39.65</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span>     <span style="color: #000066;">sprintf</span><span style="color: #009900;">&#40;</span>
                <span style="color: #ff0000;">&quot;ATOM  %5d  %-3s %-3s %s%4s    %8.3f%8.3f%8.3f%6.2f%6.2f&quot;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
                <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get serial of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> serial<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>SERIAL<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get name of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> name<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>NAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get resName of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> resName<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESNAME<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get chainId of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> chainId<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINID<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># set or get resSeq of this atom</span>
<span style="color: #000000; font-weight: bold;">sub</span> resSeq<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESSEQ<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get x</span>
<span style="color: #000000; font-weight: bold;">sub</span> x<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get y</span>
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000066;">y</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get z</span>
<span style="color: #000000; font-weight: bold;">sub</span> z<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get occupancy</span>
<span style="color: #000000; font-weight: bold;">sub</span> occupancy<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>OCCUPANCY<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#set or get temperature factor</span>
<span style="color: #000000; font-weight: bold;">sub</span> tempFactor<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>TEMPFACTOR<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#calculate the distance from this atom to another </span>
<span style="color: #000000; font-weight: bold;">sub</span> distanceFrom<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$atom</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">sqrt</span><span style="color: #009900;">&#40;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">x</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>X<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">x</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Y<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>
        <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">z</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>Z<span style="color: #009900;">&#125;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">z</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Residue.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Residue<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Atom</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        ATOMS    <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: atoms </span>
<span style="color: #666666; font-style: italic;">#        atoms($subscript)</span>
<span style="color: #666666; font-style: italic;">#        atoms($serial,1)</span>
<span style="color: #666666; font-style: italic;"># return all atoms or an atom by subscript</span>
<span style="color: #666666; font-style: italic;"># or an atom by its serial/id.</span>
<span style="color: #000000; font-weight: bold;">sub</span> atoms<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ATOMS: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;ATOMS: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> name<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get residue name</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resName</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> chainId<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># get chain id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> seq<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># get residue id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resSeq</span><span style="color: #339933;">;</span>    
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> ca<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;"># get atom CA</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$atom</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">name</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;CA&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #000066;">return</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addAtom<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add atom to this residue</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># amount of atoms</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> abbr<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># get abbreviation name</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">%aa</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #ff0000;">'ALA'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'A'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'GLY'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'G'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'LEU'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'L'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ILE'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'I'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'MET'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'M'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'SER'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'S'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'THR'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'T'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'TYR'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'Y'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'PHE'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'F'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ASP'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'D'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ASN'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'N'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'GLU'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'E'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'GLN'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'Q'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'ARG'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'R'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'HIS'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'H'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'CYS'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'C'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'TRP'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'W'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'VAL'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'V'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'LYS'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'K'</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">'PRO'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'P'</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$aa</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ATOMS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resName</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Chain.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Chain<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Residue</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        RESIDUES<span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: residues </span>
<span style="color: #666666; font-style: italic;">#        residues($subscript)</span>
<span style="color: #666666; font-style: italic;">#        residues($id,1)</span>
<span style="color: #666666; font-style: italic;"># return all residues or a residue by subscript</span>
<span style="color: #666666; font-style: italic;"># or a residue by its id.</span>
<span style="color: #000000; font-weight: bold;">sub</span> residues<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;RESIDUES: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;RESIDUES: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> id<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get chain id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addResidue<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add residue to this chain</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># how many residues this chain contains</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># get a sequence by abbreviation of residues' name</span>
<span style="color: #000000; font-weight: bold;">sub</span> sequence<span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$seq</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$residue</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>RESIDUES<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$seq</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">$residue</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">abbr</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$seq</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Model.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Model<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Chain</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        CHAINS    <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        ID        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: chains </span>
<span style="color: #666666; font-style: italic;">#        chains($subscript)</span>
<span style="color: #666666; font-style: italic;">#        chains($label,1)</span>
<span style="color: #666666; font-style: italic;"># return all chains or a chain by subscript</span>
<span style="color: #666666; font-style: italic;"># or a chain by its label.</span>
<span style="color: #000000; font-weight: bold;">sub</span> chains<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;CHAINS: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;CHAINS: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> id<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get model id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addChain<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add chain to this model</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># amount of chains</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CHAINS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p><b>Pdb.pm</b></p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">package</span> Pdb<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> pdbClass<span style="color: #339933;">::</span><span style="color: #006600;">Model</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span>     <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span>    <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        MODELS    <span style="color: #339933;">=&gt;</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
        ID        <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;"># like 1A0O</span>
        CLASH    <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">undef</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;"># like 1A0O_AB  (comes from 1A0O_AB.pdb)</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">bless</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># load pdb from a pdb file</span>
<span style="color: #000000; font-weight: bold;">sub</span> load<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Pdb file name needed!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #000066;">rindex</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CLASH<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #000066;">rindex</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$file</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,-</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$modelFlag</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$chainFlag</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$residueFlag</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$atom</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$residue</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$chain</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$model</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span>FILE<span style="color: #339933;">,</span><span style="color: #0000ff;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$line</span> <span style="color: #339933;">=</span> <span style="color: #009999;">&lt;FILE&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">m/^MODEL\s+(.+)$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;"># if contains models</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$modelFlag</span> <span style="color: #b1b100;">ne</span> <span style="color: #0000ff;">$1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
                <span style="color: #0000ff;">$modelFlag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
                <span style="color: #0000ff;">$model</span> <span style="color: #339933;">=</span> Model<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
                <span style="color: #0000ff;">$model</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$modelFlag</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$model</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">m/^ATOM.+$/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$atom</span> <span style="color: #339933;">=</span> Atom<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
            <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">line</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$line</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$model</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   <span style="color: #666666; font-style: italic;"># if not contains models,</span>
                <span style="color: #0000ff;">$model</span> <span style="color: #339933;">=</span> Model<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;"># define one, and set id 0</span>
                <span style="color: #0000ff;">$model</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$model</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$chainFlag</span> <span style="color: #b1b100;">ne</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$chainFlag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">chainId</span><span style="color: #339933;">;</span> 
                <span style="color: #0000ff;">$chain</span> <span style="color: #339933;">=</span> Chain<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span>
                <span style="color: #0000ff;">$model</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addChain</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$chain</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$residueFlag</span> <span style="color: #b1b100;">ne</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resSeq</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #0000ff;">$residueFlag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$atom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">resSeq</span><span style="color: #339933;">;</span>    
                <span style="color: #0000ff;">$residue</span> <span style="color: #339933;">=</span> Residue<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #339933;">;</span> 
                <span style="color: #0000ff;">$chain</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addResidue</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$residue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>    
            <span style="color: #0000ff;">$residue</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">addAtom</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$atom</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span>FILE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># get or set clash</span>
<span style="color: #000000; font-weight: bold;">sub</span> clash<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CLASH<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>CLASH<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># usage: models </span>
<span style="color: #666666; font-style: italic;">#        models($subscript)</span>
<span style="color: #666666; font-style: italic;">#        models($label,1)</span>
<span style="color: #666666; font-style: italic;"># return all models or a model by subscript</span>
<span style="color: #666666; font-style: italic;"># or a model by its label.</span>
<span style="color: #000000; font-weight: bold;">sub</span> models<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">&lt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">id</span> <span style="color: #b1b100;">eq</span> <span style="color: #0000ff;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #0000ff;">$i</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$j</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">last</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$j</span> <span style="color: #339933;">==</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;MODELS: label not exists!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elsif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&gt;@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">die</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;MODELS: subscript out of range!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> id<span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">#get pdb id</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@_</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">return</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ID<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> addModel<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">#add models</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">push</span> <span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> size<span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;"># amount of models</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">return</span> <span style="color: #000066;">scalar</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">@</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>MODELS<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/03/18/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bbperl%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>libsvm-2.88中文文档</title>
		<link>http://pwwang.com/2008/12/17/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3readme/</link>
		<comments>http://pwwang.com/2008/12/17/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3readme/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 08:48:50 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[SVM]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=256</guid>
		<description><![CDATA[&#160;

最近的工作要用到支持向量机(SVM), 对算法不是很懂, 但是总要把用法弄明白吧, 于是就想把它的文档翻译一下, 自己弄明白吧, 也给其他人带来点方便

先给出libsvm的下载地址:&#160;&#160; 要下载就点我吧

<span class="readmore"><a href="http://pwwang.com/2008/12/17/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3readme/" title="libsvm-2.88中文文档">Read More: 4902 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>最近的工作要用到支持向量机(SVM), 对算法不是很懂, 但是总要把用法弄明白吧, 于是就想把它的文档翻译一下, 自己弄明白吧, 也给其他人带来点方便</p>
<p>先给出libsvm的下载地址:&nbsp;&nbsp; <a target="_blank" href="http://pwwang.com/wp-content/uploads/2008/12/libsvm-2.88.rar">要下载就点我吧</a></p>
<p>英文文档请见压缩包内的 README 文件(用写字板打开就可以看到内容了)<span style="color: rgb(255,0,0)"><strong><br />
</strong></span></p>
<p>其中, tools目录下的README的翻译在<a target="_blank" href="http://pwwang.com/?p=613">这里</a>.</p>
<hr />
<p><span style="font-size: medium"><strong>libsvm-2.88中文文档</strong></span></p>
<p><span style="color: rgb(128,0,0)"><strong>中文文档由 pwwang 翻译, 欢迎转载, 转载请注明出处!</strong></span></p>
<p><span id="more-256"></span></p>
<p>&nbsp;</p>
<p>Libsvm是一个简单、易用、有效的SVM分类和回归软件。它解决了C-SVM分类、nu-SVM分类、one-class-SVM、epsilon-SVM回归和nu-SVM回归。它还为C-SVM提供了一个自动模型选择工具。这个文档将解释libsvm的用法。</p>
<p>Libsvm可以从这里得到：http://www.csie.ntu.edu.tw/~cjlin/libsvm<br />
在使用libsvm之前先阅读COPYRIGHT文件。</p>
<p><strong>目录</strong><br />
=================</p>
<p>－快速开始<br />
－安装和数据格式<br />
－&ldquo;svm-train&rdquo;的用法<br />
－&ldquo;svm-predict&rdquo;的用法<br />
－&ldquo;svm-scale&rdquo;的用法<br />
－实际使用技巧<br />
－例子<br />
（后面的部分不作翻译）</p>
<p>&nbsp;</p>
<p><strong>快速开始</strong><br />
=================</p>
<p>如果你是SVM的一个新手，并且数据不大，那么在安装完成之后请打开tools目录使用easy.py。它将把一切全自动化，从数据规化到参数选择。</p>
<p>用法：easy.py training_file [test_file]</p>
<p>你可以在&ldquo;tools/README&rdquo;中找到关于参数选择的更多信息。</p>
<p>&nbsp;</p>
<p><strong>安装和数据格式</strong><br />
=================</p>
<p>在Unix系统中，输入make来生成&ldquo;svm-train&rdquo;和&ldquo;svm-predict&rdquo;程序。不带参数地运行它们可以显示他们的用法。</p>
<p>在其他系统中，参考&ldquo;Makefile&rdquo;来生成它们（例如：你可以参数这篇文档中的&ldquo;生成Windows可执行文件&rdquo;）或者使用预生成二进制文件（Windows二进制文件在&rdquo;windows&ldquo;目录中）</p>
<p>训练和测试数据文件中的格式是：</p>
<p>&lt;label&gt; &lt;index1&gt;:&lt;value1&gt; &lt;index2&gt;:&lt;value2&gt; &#8230;<br />
.<br />
.<br />
.</p>
<p>每行包含一个实例，并且以&ldquo;n&rdquo;（译者注：换行符）结束。对于分类来说，&lt;label&gt;是一个指向该类标志的整数（支持多类）。对于回归来说，&lt;label&gt;是一个可为任何实数的目标值。对于one-class-SVM来说，它不会被用到，所以可以为任何数值。除非使用预先计算的核（将在另一节介绍），&lt;index&gt;:&lt;value&gt;给出了一个特性（属性）值。&lt;index&gt;是一个从1开始的整数，&lt;value&gt;是一个实数。索引必须按<strong>升序</strong>排列。标签在测试文件中只被用来计算精确度或者错误。如果它们是未知的，把第一列赋任意值。</p>
<p>这个包内的一个分类数据的例子是&ldquo;heart_scale&rdquo;。可以使用&ldquo;tools/checkdata.py&rdquo;来检测你数据格式是否正确。（详见&ldquo;tools/README&rdquo;）。</p>
<p>输入&ldquo;svm-train heart_scale&rdquo;，程序将读取训练数据并输出模型文件&ldquo;hear_scale.model&rdquo;。如果你有一个测试集叫&ldquo;heart_scale.t&rdquo;，那么输入&ldquo;svm-predict heart_scale.t heart_scale.model output&rdquo; 来检查预测的准确性。&ldquo;output&rdquo;文件包含了预测的类标签。</p>
<p>这个包里还有一些其他的有用的程序：</p>
<p>svm-scale：</p>
<p style="margin-left: 40px">规化你的输入数据文件</p>
<p>svm-toy：</p>
<p style="margin-left: 40px">这是一个简单的图形界面，它将在一个面板上显示SVM如果分离数据。你可以在窗口里单击来画数据点。使用&ldquo;change&rdquo;按钮来选择类1,2或者3（例如：一直到3个类都是支持的），&ldquo;load&rdquo;按钮用来从文件里装入数据，&ldquo;save&rdquo;按钮用来保存数据到一个文件，&ldquo;run&rdquo;按钮用来获取一个SVM模型，&ldquo;clear&rdquo;按钮用来清除窗口。</p>
<p style="margin-left: 40px">你可以窗口的底部输入选项，选项的符号规则和&ldquo;svm-train&rdquo;一样。</p>
<p style="margin-left: 40px">注意&ldquo;load&rdquo;和&ldquo;save&rdquo;只考虑了分类情况下的数据，而没有考虑回归的情况。每一个数据库有一个标签（颜色），它必须是1，2或者3，并且两个属性（x和y值）范围必须是[0，1]。</p>
<p style="margin-left: 40px">在各个目录中输入make来生成它们。</p>
<p style="margin-left: 40px">你需要Qt库来生成Qt版本（可以在这里得到：http://www.trolltech.com）</p>
<p style="margin-left: 40px">你需要GTK+库来生成GTK版本（可以在这里得到：http://www.gtk.org）</p>
<p style="margin-left: 40px">预生成的Windows二进制文件可&ldquo;Windows&rdquo;目录中。我们使用的是32-位机上的Visual C++，所以最大缓存是2GB。</p>
<p style="margin-left: 40px">&nbsp;</p>
<p><strong>&ldquo;svm-train&rdquo;的用法 </strong><br />
=================</p>
<p>用法：svm-train [options] training_set_file [model_file]<br />
选项：<br />
-s svm_type : 设定SVM的类型 (default 0)<br />
&nbsp;&nbsp;&nbsp; 0 &#8212; C-SVC<br />
&nbsp;&nbsp;&nbsp; 1 &#8212; nu-SVC<br />
&nbsp;&nbsp;&nbsp; 2 &#8212; one-class SVM<br />
&nbsp;&nbsp;&nbsp; 3 &#8212; epsilon-SVR<br />
&nbsp;&nbsp;&nbsp; 4 &#8212; nu-SVR<br />
-t kernel_type : 设定核函数的类型 (default 2)<br />
&nbsp;&nbsp;&nbsp; 0 &#8212; linear: u&#8217;*v<br />
&nbsp;&nbsp;&nbsp; 1 &#8212; polynomial: (gamma*u&#8217;*v + coef0)^degree<br />
&nbsp;&nbsp;&nbsp; 2 &#8212; radial basis function: exp(-gamma*|u-v|^2)<br />
&nbsp;&nbsp;&nbsp; 3 &#8212; sigmoid: tanh(gamma*u&#8217;*v + coef0)<br />
&nbsp;&nbsp;&nbsp; 4 &#8212; precomputed kernel (kernel values in training_set_file)<br />
-d degree : set degree in kernel function (default 3)<br />
-g gamma : set gamma in kernel function (default 1/k)<br />
-r coef0 : set coef0 in kernel function (default 0)<br />
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)<br />
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)<br />
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)<br />
-m cachesize : set cache memory size in MB (default 100)<br />
-e epsilon : set tolerance of termination criterion (default 0.001)<br />
-h shrinking: whether to use the shrinking heuristics, 0 or 1 (default 1)<br />
-b probability_estimates: whether to train an SVC or SVR model for probability estimates, 0 or 1 (default 0)<br />
-wi weight: set the parameter C of class i to weight*C in C-SVC (default 1)<br />
-v n: n-fold cross validation mode</p>
<p>-g中的k表示输入数据中属性的数目。</p>
<p>-v选项把数据随机分成n个部分，并计算它们的交叉验证accuracy/mean方差（不知道这个数学术语怎么翻译）</p>
<p>通过libsvm FAQ来查看输出文件的含义。</p>
<p>&nbsp;</p>
<p><strong>&ldquo;svm-predict&rdquo;的用法 </strong><br />
=================</p>
<p>用法： svm-predict [options] test_file model_file output_file<br />
选项：<br />
-b probability_estimates: 是否预测概率估计, 0 或 1 (默认 0); one-class SVM只支持0</p>
<p>model_file是svm-train生成的model文件.<br />
test_file 是你想预测的数据.<br />
svm-predict 将把结果输出到output_file.</p>
<p><strong>&quot;svm-scale&quot; Usage</strong><br />
=================</p>
<p>用法： svm-scale [options] data_filename<br />
选项：<br />
-l lower : x 规化的最小值 (默认 -1)<br />
-u upper : x 规化的最大值 (默认 +1)<br />
-y y_lower y_upper : y 规化的限定 (默认: 不规化y)<br />
-s save_filename : 保存规化参数到 save_filename<br />
-r restore_filename : 从restore_filename恢复规化参数</p>
<p>查看这个文档的&#8217;Examples&#8217; 来获取例子。</p>
<p>&nbsp;</p>
<p><strong>实际使用技巧</strong><br />
=================</p>
<p>* 你的数据的规化。例如，规化每一个属性到[0,1]或[-1,+1]。<br />
* 对于C-SVC，考虑使用tools目录中的模型选择工具。<br />
*&nbsp;nu in nu-SVC/one-class-SVM/nu-SVR approximates the fraction of training&nbsp; errors and support vectors.&nbsp;<br />
* 如果分类数据不平衡（如太多正数，极少负数），使用-wi尝试一个不同的罚分参数C。<br />
* 为大的问题指定更大的缓存大小（如 larger -m）</p>
<p>Examples<br />
========</p>
<p>&gt; svm-scale -l -1 -u 1 -s range train &gt; train.scale<br />
&gt; svm-scale -r range test &gt; test.scale</p>
<p>Scale each feature of the training data to be in [-1,1]. Scaling factors are stored in the file range and then used for scaling the test data.</p>
<p>&gt; svm-train -s 0 -c 5 -t 2 -g 0.5 -e 0.1 data_file</p>
<p>Train a classifier with RBF kernel exp(-0.5|u-v|^2), C=10, and stopping tolerance 0.1.</p>
<p>&gt; svm-train -s 3 -p 0.1 -t 0 data_file</p>
<p>Solve SVM regression with linear kernel u&#8217;v and epsilon=0.1 in the loss function.</p>
<p>&gt; svm-train -c 10 -w1 1 -w-1 5 data_file</p>
<p>Train a classifier with penalty 10 = 1 * 10 for class 1 and penalty 50 = 5 * 50 for class -1.</p>
<p>&gt; svm-train -s 0 -c 100 -g 0.1 -v 5 data_file</p>
<p>Do five-fold cross validation for the classifier using the parameters C = 100 and gamma = 0.1</p>
<p>&gt; svm-train -s 0 -b 1 data_file<br />
&gt; svm-predict -b 1 test_file data_file.model output_file</p>
<p>Obtain a model with probability information and predict test data with probability estimates</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2008/12/17/libsvm-288%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3readme/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>操作pdb文件的类C++版</title>
		<link>http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/</link>
		<comments>http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 16:47:49 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=18</guid>
		<description><![CDATA[有时候总需要对一些pdb文件进行操作，特别是读数据，所以就写了这个库文件但是这个只是个比较粗略的，一时也不能补得很全，只是仅仅对ATOM的行进行了操作并进行了归类，其他的行暂时还没有进行操作，这些等到实际用到时，再进行补充吧 另外，关于atom_id和chain_id发现有些不是整型，因为在x-ray或者mnr测结构时无法确定而加的abcd之类的也没有考虑在内，如果要考虑这个的话，我想是否可以用map将id与整个原子的信息对应起来。 代码



#ifndef _PDB_H_  

<span class="readmore"><a href="http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/" title="操作pdb文件的类C++版">Read More: 1865 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>有时候总需要对一些pdb文件进行操作，特别是读数据，所以就写了这个库文件但是这个只是个比较粗略的，一时也不能补得很全，只是仅仅对ATOM的行进行了操作并进行了归类，其他的行暂时还没有进行操作，这些等到实际用到时，再进行补充吧 另外，关于atom_id和chain_id发现有些不是整型，因为在x-ray或者mnr测结构时无法确定而加的abcd之类的也没有考虑在内，如果要考虑这个的话，我想是否可以用map将id与整个原子的信息对应起来。 代码</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#ifndef _PDB_H_  </span>
<span style="color: #339933;">#define _PDB_H_ </span>
&nbsp;
<span style="color: #339933;">#include&lt;iostream&gt; </span>
<span style="color: #339933;">#include&lt;fstream&gt; </span>
<span style="color: #339933;">#include&lt;cstdio&gt; </span>
<span style="color: #339933;">#include&lt;string&gt;  </span>
<span style="color: #339933;">#include&lt;vector&gt;  </span>
&nbsp;
<span style="color: #339933;">#define atoms vector&lt;atom&gt;  </span>
<span style="color: #339933;">#define chains vector&lt;chain&gt;  </span>
<span style="color: #339933;">#define aint vector&lt;atom&gt;::size_type  </span>
<span style="color: #339933;">#define cint vector&lt;chain&gt;::size_type   </span>
&nbsp;
using namespace std<span style="color: #339933;">;</span>   
&nbsp;
class atom<span style="color: #009900;">&#123;</span>   
private<span style="color: #339933;">:</span>   
    <span style="color: #993333;">short</span> atom_id<span style="color: #339933;">;</span>   
    string atom_nick<span style="color: #339933;">;</span>   
    string atom_res<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> atom_chain<span style="color: #339933;">;</span>   
    <span style="color: #993333;">short</span> atom_res_id<span style="color: #339933;">;</span>   
    <span style="color: #993333;">float</span> atom_x<span style="color: #339933;">,</span> atom_y<span style="color: #339933;">,</span> atom_z<span style="color: #339933;">,</span> atom_w<span style="color: #339933;">,</span> atom_bfactor<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> atom_name<span style="color: #339933;">;</span>   
&nbsp;
public<span style="color: #339933;">:</span>   
    atom<span style="color: #009900;">&#40;</span><span style="color: #993333;">short</span><span style="color: #339933;">,</span> string<span style="color: #339933;">,</span> string<span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #339933;">,</span> <span style="color: #993333;">short</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom<span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    string line<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
atom<span style="color: #339933;">::</span><span style="color: #202020;">atom</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">short</span> a_id<span style="color: #339933;">,</span>   
            string a_nick<span style="color: #339933;">,</span>   
            string r<span style="color: #339933;">,</span>   
            <span style="color: #993333;">char</span> c<span style="color: #339933;">,</span>   
            <span style="color: #993333;">short</span> r_id<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_x<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_y<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_z<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_w<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> b<span style="color: #339933;">,</span>   
            <span style="color: #993333;">char</span> a_name<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    atom_id <span style="color: #339933;">=</span> a_id<span style="color: #339933;">;</span>   
    atom_nick <span style="color: #339933;">=</span> a_nick<span style="color: #339933;">;</span>   
    atom_res <span style="color: #339933;">=</span> r<span style="color: #339933;">;</span>   
    atom_chain <span style="color: #339933;">=</span> c<span style="color: #339933;">;</span>   
    atom_res_id <span style="color: #339933;">=</span> r_id<span style="color: #339933;">;</span>   
    atom_x <span style="color: #339933;">=</span> a_x<span style="color: #339933;">;</span>   
    atom_y <span style="color: #339933;">=</span> a_y<span style="color: #339933;">;</span>   
    atom_z <span style="color: #339933;">=</span> a_z<span style="color: #339933;">;</span>   
    atom_w <span style="color: #339933;">=</span> a_w<span style="color: #339933;">;</span>   
    atom_bfactor <span style="color: #339933;">=</span> b<span style="color: #339933;">;</span>   
    atom_name <span style="color: #339933;">=</span> a_name<span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
atom<span style="color: #339933;">::</span><span style="color: #202020;">atom</span><span style="color: #009900;">&#40;</span>string l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    atom_id <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_nick <span style="color: #339933;">=</span> l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">13</span><span style="color: #339933;">,</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_res <span style="color: #339933;">=</span> l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">17</span><span style="color: #339933;">,</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_chain <span style="color: #339933;">=</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">21</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
    atom_res_id <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">22</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_x <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">30</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_y <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">38</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_z <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">46</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_w <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">54</span><span style="color: #339933;">,</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_bfactor <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">60</span><span style="color: #339933;">,</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_name <span style="color: #339933;">=</span> l.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #0000dd;">77</span> <span style="color: #339933;">?</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">77</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">' '</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
string atom<span style="color: #339933;">::</span><span style="color: #202020;">line</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #993333;">char</span> line<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>sprintf<span style="color: #009900;">&#40;</span>  line<span style="color: #339933;">,</span>   
                    <span style="color: #ff0000;">&quot;ATOM  %5u  %-3s %-3s %c%4u    %8.3f%8.3f%8.3f%6.2f%6.2f           %c&quot;</span><span style="color: #339933;">,</span>   
                    atom_id<span style="color: #339933;">,</span>   
                    atom_nick.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>   
                    atom_res.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>   
                    atom_chain<span style="color: #339933;">,</span>   
                    atom_res_id<span style="color: #339933;">,</span>   
                    atom_x<span style="color: #339933;">,</span>   
                    atom_y<span style="color: #339933;">,</span>   
                    atom_z<span style="color: #339933;">,</span>   
                    atom_w<span style="color: #339933;">,</span>   
                    atom_bfactor<span style="color: #339933;">,</span>   
                    atom_name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">return</span> string<span style="color: #009900;">&#40;</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//===============================================   </span>
class chain<span style="color: #009900;">&#123;</span>   
private<span style="color: #339933;">:</span>   
    atoms chain_atms<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> chain_label<span style="color: #339933;">;</span>   
public<span style="color: #339933;">:</span>   
    chain<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #993333;">void</span> addAtom<span style="color: #009900;">&#40;</span>atom<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #993333;">void</span> saveToFile<span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    aint size<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> label<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom operator<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>aint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
chain<span style="color: #339933;">::</span><span style="color: #202020;">chain</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> chain_label <span style="color: #339933;">=</span> l<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>   
&nbsp;
aint chain<span style="color: #339933;">::</span><span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">return</span> chain_atms.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
atom chain<span style="color: #339933;">::</span><span style="color: #202020;">operator</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>aint i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">0</span> and i<span style="color: #339933;">&lt;</span>chain_atms.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>   
        <span style="color: #b1b100;">return</span> chain_atms<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #993333;">char</span> chain<span style="color: #339933;">::</span><span style="color: #202020;">label</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">return</span> chain_label<span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #993333;">void</span> chain<span style="color: #339933;">::</span><span style="color: #202020;">addAtom</span><span style="color: #009900;">&#40;</span>atom a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    chain_atms.<span style="color: #202020;">push_back</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #993333;">void</span> chain<span style="color: #339933;">::</span><span style="color: #202020;">saveToFile</span><span style="color: #009900;">&#40;</span>string f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    ofstream in<span style="color: #009900;">&#40;</span>f.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>cint i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>chain_atms.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
        in <span style="color: #339933;">&lt;&lt;</span> chain_atms<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">line</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> endl<span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
    in <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;TER&quot;</span> <span style="color: #339933;">&lt;&lt;</span> endl<span style="color: #339933;">;</span>   
    in.<span style="color: #202020;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//===============================================   </span>
class pdb<span style="color: #009900;">&#123;</span>   
private<span style="color: #339933;">:</span>   
    chains pdb_chns<span style="color: #339933;">;</span>   
&nbsp;
public<span style="color: #339933;">:</span>   
    pdb<span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    cint size<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    chain operator<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>cint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
cint pdb<span style="color: #339933;">::</span><span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">return</span> pdb_chns.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
chain pdb<span style="color: #339933;">::</span><span style="color: #202020;">operator</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>cint i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">0</span> and i<span style="color: #339933;">&lt;</span>pdb_chns.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> pdb_chns<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
pdb<span style="color: #339933;">::</span><span style="color: #202020;">pdb</span><span style="color: #009900;">&#40;</span>string pdbfile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    string l<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> flag<span style="color: #339933;">,</span> chain_label<span style="color: #339933;">;</span>   
    ifstream out1<span style="color: #009900;">&#40;</span>pdbfile.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>getline<span style="color: #009900;">&#40;</span>out1<span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>    <span style="color: #666666; font-style: italic;">//get the chain labels first   </span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #ff0000;">&quot;ATOM&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
            chain_label <span style="color: #339933;">=</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">21</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>flag <span style="color: #339933;">!=</span> chain_label<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
                chain chn<span style="color: #009900;">&#40;</span>chain_label<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                pdb_chns.<span style="color: #202020;">push_back</span><span style="color: #009900;">&#40;</span>chn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                flag <span style="color: #339933;">=</span> chain_label<span style="color: #339933;">;</span>   
            <span style="color: #009900;">&#125;</span>   
        <span style="color: #009900;">&#125;</span>   
    <span style="color: #009900;">&#125;</span>   
    out1.<span style="color: #202020;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    ifstream out2<span style="color: #009900;">&#40;</span>pdbfile.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>getline<span style="color: #009900;">&#40;</span>out2<span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #ff0000;">&quot;ATOM&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
            atom atm<span style="color: #009900;">&#40;</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
            chain_label <span style="color: #339933;">=</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">21</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>cint i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>pdb_chns.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>chain_label <span style="color: #339933;">==</span> pdb_chns<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">label</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>   
                    pdb_chns<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">addAtom</span><span style="color: #009900;">&#40;</span>atm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
            <span style="color: #009900;">&#125;</span>   
        <span style="color: #009900;">&#125;</span>   
    <span style="color: #009900;">&#125;</span>   
    out2.<span style="color: #202020;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>  
<span style="color: #339933;">#endif</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

