首先下载并安装GO::TermFinder
perl -MCPAN -e shell
cpan> install GO::TermFinder
安装完成之后,至example下载GoView.conf, *.pl,以及examples.html文件。其实这些也已经安装在了本机,你也可以在安装目录下找到。
这里主要介绍使用batchGOView.pl来直接生成报告文件。我们先看一眼batchGoView.pl的原代码。
#读取配置文件 my $confFile = shift; my $conf = &ReadConfFile($confFile); #依据配置文件高置参数 my $ontology = GO::OntologyProvider::OboParser->new(ontologyFile => $conf->{'ontologyFile'}, aspect => $conf->{'aspect'}); my $annotation = GO::AnnotationProvider::AnnotationParser->new(annotationFile=>$conf->{'annotationFile'}); …… my $termFinder = GO::TermFinder->new(annotationProvider=> $annotation, ontologyProvider => $ontology, aspect => $conf->{'aspect'}, @additionalArgs); #生成报告文件 my $report = GO::TermFinderReport::Html->new(); &GenerateFrameset;#报告文件规范 …… #依次读取文件并分析 foreach my $file (@ARGV){ print "Analyzing $file\n"; # 从文件中读取基因列表,从这个命令中我们可以看出,基因文件的格式必须是每行一个基因名这样的格式,中间无空行。 my @genes = GenesFromFile($file); # 进行从基因名到GO名目的映射。 my @pvalues = $termFinder->findTerms(genes => \@genes, calculateFDR => $conf->{'calculateFDR'}); # 调用GO::View module来生成报告所需的图片。 my $goView = GO::View->new(-ontologyProvider => $ontology, -annotationProvider => $annotation, -termFinder => \@pvalues, -aspect => $conf->{'aspect'}, -configFile => $confFile, -imageDir => $conf->{'outDir'}, -imageLabel => "Batch GO::View", -nodeUrl => $conf->{'goidUrl'}, -geneUrl => $conf->{'geneUrl'}, -pvalueCutOff => $conf->{'pvalueCutOff'}); # 而后将这些结果整合到html中来,以便查看。 my $imageFile; if ($goView->graph) { $imageFile = $goView->showGraph; } my $htmlFile = &GenerateHTMLFile($file, $goView->imageMap, \@pvalues, scalar($termFinder->genesDatabaseIds), "Terms for $file"); print $listFh a({-href => $htmlFile, -target => 'result'}, $htmlFile), br; } ……
[......]
首先声明,这里并不是我用perl来写个算法。如果需要算法相关的东西,得去看文献。
这里,其实只是借对格兰氏阳性细菌蛋白质定位的预测为例,来说明如何利用他人提供的在线查询功能来实现批处理。
假设现在有一个完整的基因组需要您去预测它当中的每一个开放阅读框翻译出来的蛋白质可能的细胞内定位,怎么办呢?手工一个一个提交到网站上去?一共会有四五千个蛋白,等你提交完,你的手和大脑都会不工作了吧?要不自己下载个软件来本地预测吧?我试过去安装那些要求的软件环境,也许是我的系统过新吧,一个c语言库的版本,一个g77让我就头大得不知道该怎么继续下去。于是我还是下定决心,用perl的lwp来伪装成浏览器提交申请,自动批处理吧。也许一觉醒来,全部都做完了。
我们要用到的网站是http://www.psort.org/psortb/。据网站上宣传,Based on a study last performed in 2010, PSORTb v3.0.2 is the most precise bacterial localization prediction tool available. 第二个原因就是can currently submit one or more Gram-positive or Gram-negative bacterial sequences or archaeal sequences in FASTA format。这对于研究格兰氏阳性菌的我来说的确很不错的网站。
最基本的,用lwp来虚拟提交一份表单上去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/usr/bin/perl use LWP::UserAgent; $ua = LWP::UserAgent->new; $ua->agent("Mozilla 8.0 beta"); use HTTP::Request::Common qw(POST); my $req = (POST 'http://www.psort.org/psortb/results.pl', ["seq" => ">$genes{name}\n$genes{translation}", "organism" => "bacteria", "gram"=>"positive", "advancedgram"=>"none", "format"=>"long", "sendresults"=>"display"); $request = $ua->request($req); print $request->as_string; |
结果得到的,怎么都是500 Internal Server Error。于是在网上狂google,也没有找到直接的答案。半夜两点,突然想起,为什么不自己想法来解决问题。于是开始用tcpdump抓包,对比从firefox发送出去的包和perl发送出去的包,具体看看有什么不同。[......]
美国副总统拜登于2010年4月29日在白宫宣布了37项基于振兴基金(总计1亿6百万美金)的平净能源研究项目。负责这笔投资的能源部前沿研究工程局-能源分局(Advanced Research Projects Agency – Energy, ARPA-E)集中了这些比太阳能更有效的可再生电力的生物燃料,价格合理的机动车新型电池,以及降低甚至去除温室气体排放的干净能源研究计划, 希望这37项非常具体竞争力的研究项目从根本上解决日益尖锐的源能问题。同时这有利于美国境加国际竞争力和就业。
美国副总统拜登说:“感谢振兴法案,这些非常前沿的有价值的研究可以开展。我们在能源研究上花钱,不但可以激励美国人的创新精神,而且可以提供持续有效就业机会,提高美国的国际竞争力。”
“美国正在引领一场新的干净能源的工业革命。这对于创造就业,刺激创新,恢复经济,减少二氧化碳排放量都将起到巨大的推动作用。”
“在二战以来的GDP战争中,我们的科学家及工程师在推动美国的发展上取得了巨大的成绩。这批新能源的研究计划必然会让美国在下一个50年保持很强的国际竞争力。”
[......]
什么是正则(Regex)?
正则是一种用于搜索字符的表示标准。Regex就是Regular Expression的缩写,即正则表达式,在计算机科学中,用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。举个例子:
有字符串:NSString *str = @”son father grandfather”;
我们现在想从中找到和father有关的词,正则表达式可以写成:/(grand)?father/ 这一表达式就可以匹配father和grandfather。
再有一例,我们想匹配gray或者grey这两个相同意义,但欧美不同拼写的词,可以使用/gray|grey/或者/gr(a|e)y/这两个正则表达式。
在现在的应用当中,我们有时候需要匹配更多的复杂的语句,比如说整数,我们就可以写成:/[+\-]?[0-9]+/;比如说浮点数:/[+\-]?(?:[0-9]*\.[0-9]+|[0-9]+\.)/;比如说包含科学计数法的数:/([+\-]?(?:[0-9]*\.[0-9]+|[0-9]+\.)(?:[eE][+\-]?[0-9]+)?)/;比如说url:/\b(https?)://(?:(\S+?)(?::(\S+?))?@)?([a-zA-Z0-9\-.]+)(?::(\d+))?((?:/[a-zA-Z0-9\-._?,'+\&%$=~*!():@\\]*)+)?/ ……
什么是RegexKitLite?
这是一个在Xcode编写cocoa应用程序当中为NSString类提供了小量化的正则方法的工具。它的好处就是只需要在编辑的工程中导入RegexKitLite.h和RegexKitLite.m两个文件,然后设置动态链接至/usr/lib/libicucore.dylib即可使用。小量化,但只对NSString起作用。
使用RegexKitLite:
首先下载原文件。
将RegexKitLite.h及RegexKitLite.m两个文件导入到工程当中去:Add->Existing Files…
注意要勾选“Copy items into Destination’s Group Folder(if needed)”
[......]
Tags: cocoa application, objective c, xcode, 科学, 程序, 计算机
这是一个新的时代,是充满资讯的时代。我们通过个人电脑连接internet,从而去了解世界发生了些什么。其实,电脑与网络只是我们了解资讯的一个媒介,其实我们对它们并不关心,我们更关心的还是身边的实事,或者说是八卦。但是电脑商们总是会关心这些东西的,他们需要把电脑和网络做得更好,以适应我们对信息获取的需要。
有人说,下一个十年,互联网最大的变化就是从实体电脑走向无线终端,比如说手机。这方面的应用,在日本和非洲已经比较流行。看过《电车男》的人都会对日本手机互联网有深刻的印象。而在非洲,国为电脑并不普及,于是手机上网成为了更为流行的方式。也就是说,在七大洲里,非洲在这方面走在了前面。下一步的问题是如何减少资费吧。
在日本,手机上都会整合一个扫描二维码的功能。二维码是一个小块的四方的可以为特定程序识别的印刷在平面介质上的信息。一个拇指块大小的二维码,就可以存贮大约1M的数字信息。这些信息可以是任意的文本,也可以是特定元标记的文本,当手机扫描了二维码之后,它就可以显示这些文本,并捕获其中的网址,并引导你通过访问手机互联网获取相关的资讯。于是你拿着超市里的任何物品,你就可以通过手机扫描二维码,去制造商的网站上去了解该商品的相关信息。
然而,这一功能显然是被动的,我们扫描了二维码之后,获得的引导链接是制造商提供的。有些时候,我们需要的是该产品的用户评论,同类产品的横向比较,或者说生活区附近哪家最便宜之类的信息。这对于现在还是没有普及的一项应用。但是在不久的将来,它一定可以。在中国广州创业的黄老板就在着力于这方面服务的开发。
这个星期,由mailOnline和TED发布的消息尤其令人振奋。交互式投影仪,顾名思义,首先它可以投影,这是输出的部分。它还可以输入才可以称得上交互。如何完成输入呢?一般是通过摄像头。一家英国名为亮蓝光学Light Blue Optics的科技公司生产了一种名为Light Touch的交互式投影仪,它可以在任何一个平面上投影出一个10英寸左右的触摸屏。它的触摸输入的实现,通过的是红外扫描功能。
[......]




近期评论