
| 成绩表 | 考核作业成绩(70%) | 回答问题成绩(30%) | 总成绩 |
院 系 部 门:
学 生 专 业:
学 生 学 号:
学 生 姓 名:
2012年1月
课程大作业内容
第一题:请问Bioperl怎样安装和配置,请结合文字图表概述Bioperl的安装、配置与测试,并简述该过程中出现问题解决经历(10分)。
一、安装过程:
Bioperl的安装
(1):安装好active perl 10.1。
(2)、打开ppm,得到如下界面:
3:,选择Edit >> Preferences。得到如下界面:
4:在Preferences添加下面的站点
| Repositories to add | ||
| Name | perl 5.8 | perl 5.10 |
| BioPerl-Regular Releases | http://bioperl.org/DIST | http://bioperl.org/DIST |
| BioPerl-Release Candidates | http://bioperl.org/DIST/RC | http://bioperl.org/DIST/RC |
| Kobes | http://theoryx5.uwinnipeg.ca/ppms | http://cpan.uwinnipeg.ca/PPMPackages/10xx/ |
| Bribes | http://www.Bribes.org/perl/ppm | http://www.Bribes.org/perl/ppm |
| tcool | http://ppm.tcool.org/archives/ | NA |
6:在搜索框输入bioperl得到如下界面:
7:,选择最新版本,右键安装
(需要安装:bioperl;bioperl-db;bioperl-network;bioperl-run)。
8:查看安装是否成功:
查看目录Perl\\lib\\Bio中是否存在Biblio.pm文件,存在则表明安装成功
二:测试
测试代码:
建立一个PL文件:写入以下内容,然后双击文件,会在同目录下生成一个testseq.fsa文件
use Bio::Seq;
use Bio::SeqIO;
# create a sequence object of some DNA
my $seq = Bio::Seq->new(-id => 'testseq', -seq => 'CATGTAGATAG');
# print out some details about it
print "seq is ", $seq->length, " bases long\\n";
print "revcom seq is ", $seq->revcom->seq, "\\n";
# write it to a file in Fasta format
my $out = Bio::SeqIO->new(-file => '>testseq.fsa', -format => 'Fasta');
$out->write_seq($seq);
双击bioperltest.pl,得到
或者在命令处理程序中:
输入:
C:\\Perl>perldoc Bio::Biblio
得到如下:
三、简述该过程中出现问题解决经历
第二题:结合图形和程序回答下面问题
1、编程实现一个DNA序列文件的酶切位点的分析(包括酶切位点统计、酶切位点的标记和计数,以及可视化输出等,不准用模式匹配知识)(10分)。
2、对1中编写的程序采用子程序进行优化,并阐述子程序输入输出和内部算法实现的理由和心得(10分)。
3、进一步完善上面的程序,编写的系列酶切酶管理程序,实现酶切酶信息的添加、删除和修改,并简述理由和心得(20分)。
由于第一问、第二问和第三问是紧密联系的,所以将其联合在一起编辑优化得到以下程序:
具体程序代码如下:
system 'cls';
&choose;
my $slect= chomp($slect); if ($slect eq "search") { &search; } if($slect eq "add") { &add; } if($slect eq "estimate") { &estimate; } if($slect eq "quit") { &quit; } sub choose { $~="heading"; write; format heading = 运行程序选择 =================================================================================== =================================================================================== ======= 在酶切位点中添加新的酶切位点——请输人add ======== ******* 计算整个序列中各碱基所占比例——请输入estimate ******** ******* 寻找基因的酶切位点——请输入search ******** ======= 退去此程序——请输入quit ======== =================================================================================== =================================================================================== . print"\\n\\n 请在这里输入你的选项:"; } sub search { system 'cls'; print "\\n\\n====================================你已进入酶切位点查找程序================================\\n"; print"============================================================================================\\n\\n"; print"请在这里输入目的基因序列:\\n\\n"; my $string= print"\\n请输入酶切位点序列:\\n"; my $dian= chop($dian); #将找到的酶切位点的位置赋值到句柄$positions中 print"\\n基因序列的酶切位点:\\n"; my $foundAt = 0; my $offset = 0; my $label = 1; my %positions; while ( ( $foundAt = index( $string, $dian, $offset ) ) > -1 ) { $positions{ $foundAt } = $label++; $offset = $foundAt + 1; } ###将$string中的基因序列按每10个一组输出 my $n=0; my $number=0; my $c=0; while($c my $n=0; while($n<100) { my $str; $str=substr($string,$n+$c,10); print $str; print " "; $n+=10; } print "\\n"; foreach(0..99) { if(($_+1)%10==0) { print " "; print $positions{$_+$c}?$positions{$_+$c}:" "; } else { print $positions{$_+$c}?$positions{$_+$c}:" "; } } print "\\n"; $c+=100; if((length($string)-$c)>0 && (length($string))-$c<100) { last; } } my $f=$c; foreach($c..length($string)-1) #110 { my $str2; $str2=substr($string,$c,1); print $str2; $c++; if($c%10==0){ print" ";} } print "\\n"; foreach($f..length($string)-1) { print $positions{$f}?$positions{$f}:" "; print" "if($f%10==0); $f++; } print "\\n "; } sub add { system 'cls'; print "\\n\\n==================================你已进入添加酶切位点程序================================\\n"; print"==========================================================================================\\n\\n"; print "请依次输入酶的名称 其识别的序列 酶切的前半部分序列 酶切的后半部分序列,输完后请按Ctrl+Z\\n"; chomp(my @enzyme= open(FILE,">>C:\\\\myperl\\\酶切位点.txt"); print (FILE "@enzyme\\n"); close (FILE); print "\\n此序列以保存到C:\\\\myperl\\\酶切位点.txt\\n\\n"; print "下面输出的是数据库中所保存的所有的酶切位点:\\n\\n"; open(FILE,"C:\\\\myperl\\\酶切位点.txt"); my @array= close(FILE); print @array; print"==========================================================================================\\n"; print"=========================================================================================="; } sub estimate { system 'cls'; print"====================你已进入基因序列各碱基比例统计程序=========================\\n"; print"===============================================================================\\n\\n"; print "请在这里输入基因序列所在的文件位置(如C:\\\\myperl\\\\gene.pl.txt)\\n序列存放位置:"; $file= chomp($file); open(FILEHANDLE,"$file"); $string= close(FILEHANDLE); #将@array中的每一个元数中的内容都赋值到$string中,形成一个字符串 print"\\n从文件中读出的基因序列为:\\n $string"; print "\\n\\n\\n=========================此基因序列碱基分析结果如下===========================\\n\\n\\n"; ($a,$c,$t,$g,$n1)=(0,0,0,0,0); print "基因序列: $string\\n"; #用while循环进行统计 while ($n1<(length($string)-1)) { $y=substr($string,$n1,1); if("$y" eq"A") { $a++; } elsif("$y" eq "C") { $c++; } elsif("$y"eq"T") { $t++; } elsif("$y" eq "G") { $g++; } $n1++; } $n=length($string); #分别计算出a,t,c,g在所给基因中所占的百分比 $ap=$a/$n; $cp=$c/$n; $tp=$t/$n; $gp=$g/$n; print "\\n A碱基所占的百分比为 $ap\\n C碱基所占的百分比为 $cp\\n T碱基所占的百分比为 $tp\\n G碱基所占的百分比为 $gp\\n"; } sub quit { print"\\n 你已退出了该程序"; } 第一步 运行改程序会出现如下选择界面: 第二步 输入add 进入在酶切位点文件中添加新酶切位点的程序,界面如下: 依次输入酶的名称,识别序列,酶切割的前半部分序列,酶切割的后半部分序列,回车后,Ctrl+Z进行酶切位点添加,输出文件中已有的酶切位点。界面如下: 第三步 在程序选择窗口中输入estimate,进入基因序列碱基分析程序,界面如下: 输入自己电脑上存放基因序列文件的位置,回车。得到基因序列原文和对其进行碱基分析的结果。界面如下: 第四步 在程序选择窗口中输入search,进入在基因序列上寻找酶切位点的程序,界面如下: 输入目的基因序列和要寻找酶切序列,回车,运行程序得到酶切位点标记和记数结果。界面如下: 第五步 在程序选择窗口中输入quit,跳出本程序。界面如下: 4、编程实现采用滑动窗口技术实现DNA序列的四种碱基含量变化并可视化输出,并简述理由和心得(10分)。 理由和心得: 可以利用滑动窗口这个结构,很快的找到从第几位开始,接下来的窗口大小内的数据是什么,在研究DNA碱基序列中可以很方便,只需从窗口中取出碱基序列就可以做相应的事情,如果不行,可以将窗口向前移动继续查找。 具体程序代如下: use warnings; use strict; open(FILEHANDLE,"C:\\gene.txt"); my @array= close(FILEHANDLE); my $lengt=@array; my $a; my $string; for($a=0;$a<$lengt;$a++) { chomp($array[$a]); $string.=$array[$a]; } #print $string; my $nu=0; my $nu1=0; my $d={}; while((length($string)-$nu)>9) { my $subseq=substr($string,$nu1,10); my @arrayseq=split//,"$subseq"; foreach(@arrayseq) { $d->{$_}->[$nu]++; } $nu++; $nu1++; } #system 'cls'; my $m=(); &stats("A"); print "\\n\\n\\n\\n ^^^^^^^^^^^^^^^^^A基因的统计结果如下图^^^^^^^^^^^^^^^^^^\\n"; &pri; &stats("G"); print "\\n\\n \\n\\n ^^^^^^^^^^^^^^^^^G基因的统计结果如下图^^^^^^^^^^^^^^^^^^\\n"; &pri; &stats("C"); print "\\n\\n\\n\\n ^^^^^^^^^^^^^^^^^C基因的统计结果如下图^^^^^^^^^^^^^^^^^^\\n"; &pri; &stats("T"); print "\\n\\n \\n\\n ^^^^^^^^^^^^^^^^^T基因的统计结果如下图^^^^^^^^^^^^^^^^^^\\n"; &pri; sub stats { my $sn; my $sn1; for ( $sn=0;$sn<=($nu-1);$sn++) { for( $sn1=0;$sn1<=10;$sn1++) { while(!defined($d->{$_[0]}->[$sn])) { $d->{$_[0]}->[$sn]=0; } if($sn1 == $d->{$_[0]}->[$sn]) { $m->[$sn1]->[$sn]="*"; } else { $m->[$sn1]->[$sn]=qq{ }; } } } } sub pri { print "\\n\\n ^\\n |\\n"; for(my $sn4=10;$sn4>=0;$sn4--) { print " $sn4| "; for(my $sn=0;$sn< $nu;$sn++) { print $m->[$sn4]->[$sn]; } print "\\n"; } print "-"x ($nu+5),">"; } 运行此程序得到存放在C盘gene.text文本文档中的基因序列各个基因的统计图形结果,如下图所示: A基因统计结果: G基因的统计结果: G基因的统计结果: T基因的统计结果: 第三题:结合图形和程序回答下面问题: 编程实现DNA序列向蛋白质序列转换,并可视化输出(20)。 具体程序代码如下: use warnings; use strict; use package1; BEGIN{unshift(@INC,".");} package1::mypackage1; my $file= chomp($file); my $geneseq=&fileopen($file); print"\\n文件中基因序列为:\\n $geneseq\\n"; for (my $j=0;$j<3;) { my @ac; my $i=0; my $ai=0; $ai=$ai+$j; while(1) { $ac[$i++]=substr($geneseq,$ai,3); $ai=$ai+3; last if(length($geneseq)-$ai<3); } my $f=0; foreach(@ac) { for(my $u=0;$u<3;$u++) { if("A" eq substr($_,$u,1)) { substr($ac[$f],$u,1)="T"; } elsif("T" eq substr($_,$u,1)) { substr($ac[$f],$u,1)="A"; } elsif("G" eq substr($_,$u,1)) { substr($ac[$f],$u,1)="C"; } elsif("C" eq substr($_,$u,1)) { substr($ac[$f],$u,1)="G"; } } $f++; } $j++; print "\\n此基因序列的第$j种密码子可能为:\\n @ac\\n"; my $code; foreach(@ac) { if($_=~/TC|AG[TC]/) { $code .= 'S'; } elsif($_=~/CT|TT[AG]/) { $code .= 'L'; } elsif($_=~/CG|AG[AG]/) { $code .= 'R'; } elsif($_=~/GG/) { $code .= 'G'; } elsif($_=~/CC/) { $code .= 'P'; } elsif($_=~/AC/) { $code .= 'T'; } elsif($_=~/GC/) { $code .= 'L'; } elsif($_=~/GT/) { $code .= 'V'; } elsif($_=~/AT[TCA]/) { $code .= 'I'; } elsif($_=~/TT[TC]/) { $code .='F'; } elsif($_=~/TG[TC]/) { $code .= 'C' } elsif($_=~/CA[TC]/) { $code .='H'; } elsif($_=~/TA[TC]/) { $code .= 'Y'; } elsif($_=~/CA[AG]/) { $code .= 'Q'; } elsif($_=~/AA[TC]/) { $code .= 'N'; } elsif($_=~/AA[AG]/) { $code .= 'K'; } elsif($_=~/GA[TC]/) { $code .= 'D'; } elsif($_=~/GA[AG]/) { $code .= 'E'; } elsif($_ eq "ATG") { $code .= 'M'; } elsif($_ eq "TGG") { $code .= 'W'; } } print "这种密码子得到的蛋白质序列如下:\\n $code\\n\\n\\n"; } sub fileopen { my $geneseq; open(FILEHANDLE,"$_[0]"); my @array= close(FILEHANDLE); my $lengt=@array; my $a; for($a=0;$a<$lengt;$a++) { chomp($array[$a]); $geneseq .=$array[$a]; } return $geneseq; } ####package1的内容如下,此包可以创建存放在C:》perl》site》lib》package1.pm里面,所以一下程序可以在创建包的情况下删除 package package1; sub mypackage1 { system 'cls'; print" \\n+++++++++++++++++++++++++++++++++你已进入DNA序列向蛋白质氨基酸序列转化程序+++++++++++++++++++++++++++++++++\\n"; print"============================================================================================================\\n\\n"; print "请在这里输入基因序所在的文件(例如C:\\gene.txt)\\n"; print" 位置:"; } 1; 运行以上程序会进入到基因位置输入窗口,界面如下: 输入基因序列所存放的文件的位置,即可运行程序得到基因序列向蛋白质序列的转化结果。界面如下: 第四题:采用模块知识优化整理第三题程序,并根据自己经验结合图形和程序概述模块应用的好处和不足之处(20)。 运用模块的好处: 运用模块后,其PM文件中的子程序可以被多次重复调用,也可以被不同的程序调用,提高了程序的重复使用率同时也精简了主程序,使程序的可读性提高了。运用模块后,使程序的修改和维护变得简便,容易。模块的调用简单,好用。 模块的不足: 在建立模块时,要建立好几个PM文件,PM文件多了之后不容易管理,容易把PM文件搞混或搞掉。
