Bioperl操作指南资料下载.pdf
《Bioperl操作指南资料下载.pdf》由会员分享,可在线阅读,更多相关《Bioperl操作指南资料下载.pdf(29页珍藏版)》请在冰点文库上搜索。
关于怎样安装必须的注册配置文件和获取序列数据已在doc/howto中的BIODATABASE_ACCESS中叙述,这里不再重复。
III.1.1获取远程数据(获取远程数据(Bio:
DB:
GenBank等)等)Bioperl可以直接从主要的分子生物学数据库中获取序列数据。
数据可以通过序列的获取号或id来获得。
生物秀-专心做生物KillerDigitallysignedbyKillerDN:
cn=Killer,o,ou,email=K,c=USDate:
2011.02.2517:
39:
18+0800还可以进行批量获取以方便地获取多重序列。
例如,从genbank中获取数据的代码如下:
$gb=newBio:
GenBank();
#thisreturnsaSeqobject:
$seq1=$gb-get_Seq_by_id(MUSIGHBA1);
$seq2=$gb-get_Seq_by_acc(AF303112);
#thisreturnsaSeqIOobject:
$seqio=$gb-get_Stream_by_id(J00522,AF303112,2981014);
更多信息见III.2.1关于使用SeqIO对象。
Bioperl当前支持从genbank,genpept,Refseq,swissprot和EMBL数据库中获取序列数据。
更多信息见Bio:
GenBankmanpage,theBio:
GenPeptmanpage,theBio:
SwissProtmanpage,theBio:
RefSeqmanpage和theBio:
EMBLmanpage。
用户可以为一个数据库指定不同的数据库镜像特别相关的是SwissProt资源有许多ExPaSy镜像。
还有一些为那些后台防火墙指定本地的代理服务器的配置项。
获取NCBIRefSeqs序列可以通过一个叫Bio:
RefSeq的特定模块来查询EBI服务器。
使用之前可以参考Bio:
RefSeqmanpage,有一些关于获取RefSeq的告诫。
RefSeq在Genbank中的id一般是以NT_,NC_,NG_,NM_,NP_,XM_,XR_,orXP_开头(更多信息见http:
/www.ncbi.nlm.nih.gov/LocusLink/refseq.html)。
严格来说Bio:
GenBank可被用来获取与这些id一致的entries,但是记住它们不是Genbankentries。
关于获取以NT_开头的entries的特定细节见Bio:
GenBankmanpage,这些是经过特别格式化的CONTIGentries。
Bioperl也支持从一个远程Ace数据库中获取序列。
这个功能需要另外的AcePerl模块。
你需要下载并安装aceperl模块,见http:
/stein.cshl.org/AcePerl/。
另一个模块BioFetch,可用于访问远程数据库,它会查询EBI中的dbfetch脚本。
适用数据库如EMBL,GenBank或SWALL,可以通过不同格式如objects或streams(SeqIOobjects),或tempfiles来获取entries。
详细内容见Bio:
BioFetchmanpage。
III.1.2索引和访问本地数据库索引和访问本地数据库(Bio:
Index:
*,bp_index.pl,bp_fetch.pl,Bio:
*)通过Bio:
Index或Bio:
Fasta对象,Bioperl允许索引本地序列文件。
下面的序列数据格式支持Bio:
genbank,swissprot,pfam,embl和fasta。
一旦使用Bio:
Index索引一组序列,就可用与访问远程数据库相似的句法来获取单条序列。
例如,如果想设置一个fasta格式的索引平台文件数据库,并获取一个文件,可以这样写代码:
#script1:
createtheindexuseBio:
Fasta;
#usingfastafileformatusestrict;
#someusershavereportedthatthisisnecessarymy$Index_File_Name=shift;
my$inx=Bio:
Fasta-new(生物秀-专心做生物-filename=$Index_File_Name,-write_flag=1);
$inx-make_index(ARGV);
#script2:
retrievesomefilesuseBio:
usestrict;
Fasta-new($Index_File_Name);
foreachmy$id(ARGV)my$seq=$inx-fetch($id);
#ReturnsBio:
Seqobject#dosomethingwiththesequence为了方便创建和使用更复杂或更灵活的索引系统,bioperl在scripts/index文件夹下分配了两个样本脚本,bp_index.PLS和bp_fetch.PLS。
这些脚本能够被用作模板来发展用户化的本地数据文件索引系统。
Bioperl还提供了Bio:
Fasta作为索引和查询Fasta格式文件的手段。
它与Bio:
Fasta的精髓是一致的但是提供了更多的方法,例如:
useBio:
my$db=Bio:
Fasta-new($file);
#onefileormanyfilesmy$seqstring=$db-seq($id);
#getasequenceasstringmy$seqobj=$db-get_Seq_by_id($id);
#getaPrimarySeqobjmy$desc=$db-header($id);
#gettheheader,ordescriptionline关于这个模块的全部特征的更多信息见Bio:
Fastamanpage。
这两个模块还可以让用户在fasta头文件中指明一个特定字符串作为识别id,如字符串gi|4556644|gb|X45555中的ginumber。
看下面的fasta格式序列,它储存在文件test.fa中:
gi|523232|emb|AAC12345|sp|D12567titinfragmentMHRHHRTGYSAAYGPLKJHGYVHFIMCVVVSWWASDVVTYIPLLLNNSSAGWKRWWWIIFGGEGHGHHRTYSALWWPPLKJHGSKHFILCVKVSWLAKKERTYIPKKILLMMGGWWAAWWWI默认情况下,Bio:
Fasta和Bio:
Fasta会使用他们在fasta头文件中遇到的第一个词作为获取关键词,如本例中的gi|523232|emb|AAC12345|sp|D12567。
一个单独的id作为一个关键词会更有用。
下面的代码将索引test.fa并创建一个索引文件test.fa.idx,其关键词是Swissprot,或sp标识符。
$ENVBIOPERL_INDEX_TYPE=SDBM_File;
#lookfortheindexinthecurrentdirectory$ENVBIOPERL_INDEX=.;
my$file_name=test.fa;
Fasta-new(-filename=$file_name.idx,生物秀-专心做生物-write_flag=1);
#passareferencetothecriticalfunctiontotheBio:
Indexobject$inx-id_parser(&
get_id);
#maketheindex$inx-make_index($file_name);
#hereiswheretheretrievalkeyisspecifiedsubget_idmy$header=shift;
$header=/.*bsp|(A-Zd5b)/;
$1;
这里是关于怎样获取序列的方法,如用一个Bio:
Seq对象:
my$seq=$inx-fetch(D12567);
print$seq-seq;
如果你想用一个Swissprotid或一个ginumber获取一条序列,而fasta头文件实际上是多个gi和Swissprot串联的头文件,该如何操作?
gi|523232|emb|AAC12345|sp|D12567|gi|7744242|sp|V11223titinfragment修改那些传递到id_parser方法的功能:
subget_idmy$header=shift;
my(sps)=$header=/.*bsp|(A-Zd5)b/g;
my(gis)=$header=/gi|(d+)b/g;
return(sps,gis);
Bio:
Fasta模块使用相同的原理,但是句法稍微有所不同,例如:
Fasta-new(test.fa,-makeid=&
make_my_id);
my$seqobj=$db-get_Seq_by_id($id);
submake_my_idmy$description_line=shift;
$description_line=/gi|(d+)|emb|(w+)/;
($1,$2);
bioperl的核心安装文件并不支持访问储存在关系数据库中的序列和数据。
这种功能由附属的bioperl-db文库提供。
更多信息见IV.3节。
III.2转换数据库或文件记录格式转换数据库或文件记录格式生物秀-专心做生物III.2.1转换序列文件转换序列文件(SeqIO)生物信息学的一个普通的任务就是在广泛使用的序列数据格式之间进行转换。
Bioperl的SeqIO对象使这件事变得轻而易举。
SeqIO能够阅读大量的序列格式(在一个或多个文件中):
Fasta,EMBL,GenBank,Swissprot,PIR,GCG,SCF,phd/phred,Ace,fastq,exp,chado,orraw(plainsequence)。
SeqIO也能够分析alf,ztr,abi,ctf,和ctr格式的文件,一旦序列数据被SeqIO读取,就变成bioperl的Seq、PrimarySeq或RichSeq对象所能利用的形式,选用这几个对象要看序列的来源。
此外,序列对象可以任何支持的数据格式被写入另一个文件(也用SeqIO),使数据转换简单并可执行,例如:
SeqIO;
$in=Bio:
SeqIO-new(-file=inputfilename,-format=Fasta);
$out=Bio:
SeqIO-new(-file=outputfilename,-format=EMBL);
while(my$seq=$in-next_seq()$out-write_seq($seq);
另外,perl的tied句柄句法是SeqIO可用的,你可以用standard和打印操作来读写序列对象,例如:
SeqIO-newFh(-file=inputfilename,-format=fasta);
SeqIO-newFh(-format=embl);
print$out$_while;
如果不使用-format语句,Bioperl会依赖于文件后缀来决定格式,这是一个较慢的办法。
如果没有后缀可用,SeqIO会基于实际内容推测序列的格式。
这里是当前通用的一组后缀:
FormatSuffixesCommentfastafasta|fast|seq|fa|fsa|nt|aaFastagenbankgb|gbank|genbank|gbs|gbkGenbankscfscfSCFtracefilepirpirPIRemblembl|ebl|emb|datEMBLrawtxtplaingcggcgGCGaceaceACeDBbsmlbsm|bsmlBSMLXMLgameGAMEXMLswissswiss|spSwissProtphdphd|phredPhredfastqfastqFastqLocuslinkLL_tmplformatqualPhredqualityfilechadoChadoXMLtinyseqNCBITinySeqXMLexpexpStadenexperimentfileabi*abiABItracefile生物秀-专心做生物alf*alfALFtracefilectf*ctfCTFtracefileztr*ztrZTRtracefilepln*plnStadenplaintracefile*这些格式需要bioperl-ext包和来自于Staden包的io_lib文库更多信息见Bio:
SeqIOmanpage或SeqIOHOWTO(http:
/bioperl.org/HOWTOs/html/SeqIO.html)III.2.2转换比对文件转换比对文件(AlignIO)数据文件储存的多序列比对也具有不同的格式。
AlignIO是bioperl中转换比对文件格式的对象。
AlignIO基本用法类似于SeqIO对象,它的许多命令的名字与SeqIO相同。
如在SeqIO和AlignIO对象中都可以用-file和-format来创建文件:
AlignIO;
my$io=Bio:
AlignIO-new(-file=receptors.aln,-format=clustalw);
如果-format语句不起作用,Bioperl就通过文件后缀来决定格式,下面是目前常用的一组后缀:
格式后缀内容bl2seqclustalwalnemboss*water|needlefastafasta|fast|seq|fa|fsa|nt|aamafmafmaseSeaviewmegameg|megamememememetafastamsfmsf|pileup|gcgGCGnexusnexus|nexpfampfam|pfmphylipphylip|phlp|phyl|phy|phy|phinterleavedprodompsipsiPSI-BLASTselexselex|slx|selx|slex|sxHMMERstockholm*water,needle,matcher,stretcher,merger,和supermatcher见IV.2.1的EMBOSS。
与SeqIO不同的是,AlignIO不能创建每种格式的输出文件。
AlignIO当前支持6种输出格式:
fasta,mase,selex,clustalw,msf/gcg和phylip(交叉存取)。
AlignIO与SeqIO的另一个重要区别是AlignIO一次只能操作一个比对IO,而SeqIO.pm可以在单串中操作生物秀-专心做生物多个序列。
AlignIO的句法基本上与SeqIO一致:
AlignIO-new(-file=inputfilename,-format=fasta);
AlignIO-new(-file=outputfilename,-format=pfam);
while(my$aln=$in-next_aln()$out-write_aln($aln);
仅有的区别是返回的对象的条目,$aln,是针对SimpleAlign对象而不是Seq对象。
AlignIO也支持上面描述的SeqIO的tied句柄的句法。
更多关于SimpleAlign的信息见Bio:
AlignIOmanpage,Bio:
SimpleAlignmanpage和III.5。
III.3操作序列操作序列Bioperl包括许多序列分析模块。
如果在bioperl中没有找到你要找的功能,就在EMBOSS或PISE中找,它们可在bioperl-run附加文库中得到(见IV.2.1)。
III.3.1使用使用Seq方法操作序列方法操作序列现在我们知道了如何获取序列并将它们作为序列对象访问。
再来看看怎样使用序列对象去操作我们的序列数据并返回信息。
Seq提供了多种方法来执行许多普通(有时候不普通)的操作序列和返回数据的任务。
这里列了一些最有用的:
这些方法返回字符串或者被用来设定值:
$seqobj-display_id();
#thehumanread-ableidofthesequence$seqobj-seq();
#stringofsequence$seqobj-subseq(5,10);
#partofthesequenceasastring$seqobj-accession_number();
#whenthere,theaccessionnumber$seqobj-alphabet();
#oneofdna,rna,protein$seqobj-primary_id();
#auniqueidforthissequenceirregardless#ofitsdisplay_idoraccessionnumber$seqobj-desc();
#adescriptionofthesequence值得一提的是有些值对应于给定格式的特定区域。
例如,display_id方法返回一个Genbankentry的LOCUS名字,在一个Fasta文件中,(S+)跟随,ID来自于一个SwissProt文件,等等。
desc()方法将返回一个Genbank文件中的DEFINITION行,在Fasta文件中,这一行跟着display_id,SwissProt文件中在DE区。
下面的方法返回一组Bio:
SeqFeature对象:
$seqobj-get_SeqFeatures;
#Thetoplevelsequencefeatures$seqobj-get_all_SeqFeatures;
#Allsequencefeatures,includingsub-#seqfeatures对于一条comment注释,你可以使用:
生物秀-专心做生物useBio:
Annotation:
Comment;
$seq-annotation-add_Annotation(comment,Bio:
Comment-new(-text=somedescription);
对于一条reference注释,可以使用:
Reference;
$seq-annotation-add_Annotation(reference,Bio:
Reference-new(-authors=author1,author2,-title=titleline,-location=locationline,-medline=998122);
序列特征将在III.7的机器可读序列注释中讨论。
对这个对象的总体描述在Bio:
SeqFeature:
Genericmanpage中可以找到,一个相关的高水平的注释描述在Bio:
Collectionmanpage中。
另外的关于获取序列特征的样本代码可在gb2features.pl中找到,它在子文件夹examples/DB下。
最后,还有关于特征和注释的HOWTO(http:
/bioperl.org/HOWTOs/html/Feature-Annotation.html)和一节在FAQ中关于特征的介绍(http:
/bioperl.org/Core/Latest/faq.html#5)。
下面的方法返回新的序列对象,但是并不把起始对象的特征传递到结果特征中:
$seqobj-trunc(5,10);
#truncationfrom5to10asnewobject$seqobj-revcom;
#reversecomplementssequence$seqobj-translate;
#translationofthesequence注意到一些方法返回字符串,一些返回队列,一些返回对象。
Seqmanpage。
许多方法自己都带有注释。
然而,bioperl灵活的方法准许有更多的注释。
生物信息学中的翻译意味着两种稍有不同的事件:
1.从头到尾翻译一段