批量预测蛋白质理化性质

原来用perl的LWP::UserAgent模块用在expasy批量做过一批蛋白理化性质预测,但不知为什么现在下载不了啦,决定改用python。一开始用的 urllib.request 模块,能做一部分,但总是会莫名奇妙的断掉,显示是“$HOME/anaconda3/lib/python3.6/http/client.py”文件中有问题,尝试了很多方法均没有解决,最后在网上看到这样一句话,如果 urllib.request 中的问题不能解决的话为什么要用它,而更高级一点的 requests是对urllib的进一步封装,因此在使用上显得更加的便捷,实际应用当中尽量使用requests 。更换成 requests 后显然解决了问题。

想到源代码的话给我留言。

Bioperl的简单快速安装

Bioperl 由于涉及到的包太多,需要超过12000的单独的检测,安装起来比较麻烦,而且很多检测都通不过,对于新手过于繁杂,现在bioperl官网介绍了一种简单快速安装的方法————用第三方工具进行安装,经亲自测试,效果非常好,现简要介绍而下。
1 安装perlbrew(https://perlbrew.pl/)
在终端输入

curl -L https://install.perlbrew.pl | bash

如果系统没有curl命令
对于linux系统

wget -O - https://install.perlbrew.pl | bash

FreeBSD系统

fetch -o- https://install.perlbrew.pl | sh

也可以用cpan安装,在终端输入(注意不需要先打开cpan)

1
2
sudo cpan App::perlbrew
perlbrew init

如果是用cpan安装,perlbrew程序安装在/usr/bin/perlbrew 或者 /usr/local/bin/perlbrew,默认的perlbrew的根目录是~/perl5/perlbrew 。

2 安装cpanm

perlbrew install-cpanm

3 安装Bio::perl

cpanm Bio::Perl

如果找不到cpanm,就输入cpanm的绝对路径

/root/perl5/perlbrew/bin/cpanm Bio::Perl

如果其中报错缺少哪个模块或者哪个模块版本太老,就先安装报错的模块,我的显示是 Test::More 模块版本太老,我就用cpan “install Test::More”就好了。如果正确安装会显示

–> Working on Bio::Perl
Fetching http://www.cpan.org/authors/id/C/CJ/CJFIELDS/BioPerl-1.007001.tar.gz … OK
Configuring BioPerl-1.007001 … OK
Building and testing BioPerl-1.007001 … OK
Successfully installed BioPerl-1.007001
1 distribution installed

一般在第一步“Working on Bio::Perl”会等一段时间,因为是要下载安装包,只要没有报错,等着就可以了。

Xming + PuTTY 在Windows终端运行图形界面的程序

有些程序需要运行图形界面,特别是用java写的程序,例如R,试着用Xming + PuTTY可以实现。
1、下载xming
这个百度一下吧,我忘了在哪里下了,好像网上介绍的网址有些不对,多试一下就可以。
2、登录xming
第一次登录用XLaunch,一路默认就可以,再点xming运行xming服务。
3、修改putty
Connection\SSH\X11:Enable X11 Forwarding前加对勾,X display Location设为127.0.0.1:0,这里的 0 就是配置 Xming X server 时指定的 Display Number,127.0.0.1是localhost地址,最好写这个IP地址,而不是像网上介绍的写“localhost”。
4、修改SSH配置文件
切换到根用户,vim /etc/ssh/sshd_config
AllowTcpForwarding yes
X11Forwarding yes
如果有“X11Forwarding no”就把它注释掉。
5、安装x11
yum -y install xorg-x11-xauth
6、重启服务器,登录putty后,在终端运行”xterm”就可以了。

TGICL安装和使用

TGI Clustering tools(简称TGICL),是对大量EST或者转录本数据进行快速聚类的软件,也就是将序列进行组装拼接。原理是先用NCBI的megablast先粗略进行聚类,然后用CAP3进行组装。
1、下载
TGICL在sourceforge网站可以下载到(TGICL-2.1.tar.gz),我这里是下载的是最新的2.1版。
2、安装
$tar zxvf TGICL-2.1.tar.gz
$cd TGICL-2.1

$perl Makefile.PL
$make
$make test
$make install
完成

或者
perl Build.PL
./Build
./Build test
./Build install

tgicl就安在用户目录上了,可将刚安装好的perl包和程序分别拷贝到/usr/local/lib64/perl5/ 和/usr/local/bin/perl5/中。
用的时候调用此程序就可以了,如
/usr/local/bin/perl5/tgicl -F /home/用户/all.contigs.fasta

3、安装存在的问题及解决方法
(1)Can’t locate TGI/Mailer.pm in @INC (@INC contains:
那是找不到Mailer.pm,将TGICL-2.1/lib里的文件拷贝到/usr/local/lib64/perl5/中去就可以了。
(2)Can’t locate File/HomeDir.pm in @INC (@INC contains:
那是缺少perl的File/HomeDir.pm包,进入cpan,install File::HomeDir.pm
(3)Package main, File ./tgicl, Line 27 == Failed to find tgicl.cfg config file in
那是因为tgicl.cfg配置文件没有找到,将TGICL-2.1/conf/tgicl.cfg拷贝到tgicl所在的目录,如/usr/local/bin/perl5/。
(4)Use of :locked is deprecated at ……/TGI/DBDrv.pm line 36.
打开此文件,在our $VERSION = ‘0.01’;这句的下面加上一行,
no warnings ‘deprecated’;
###直接忽略掉deprecated警告
(5)运行时产生错误err_tgicl_all_contigs.fa.log文件显示不能运行formatdb程序,因为tgicl是32 bit系统的程序,在64位系统不能运行,要安装32位运行库glibc.i686和libstdc++.i686。直接yum install glibc.i686和yum install libstdc++.i686
(6)error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
安装zlib.i686
sudo yum install zlib.i686

CentOS7 安装php5.6+nginx1.7.5

由于版本的变化最新的php和nginx安装与配置和前面版本的有稍许差异,首先卸载旧版本,下载最新的软件的软体安装包,安装方法可以参照centos 7 min 编译安装php5.6+nginx1.7.5 笔记这里主要补充一点,就是怎样在nginx中运行php的问题。如果是想单独建一个www的用户的话,上面的安装的基础上需要做如下修改。
1、创建www用户
groupadd www
useradd -g www www -s /bin/false
2、修改nginx.conf配置文件
vi /usr/local/nginx/conf/nginx.conf
user www www; #首行user去掉注释,修改Nginx运行组为www www;必须与/usr/local/php/etc/php-fpm.conf中的user,group配置相同,否则php运行出错,具体方法是打开php-fpm.conf文件,如果在上面路径中找不到这个文件,就在安装包里面找到复制到这里,找到有user和group的行,去掉前面的;号,将nobody改为www。
3、重启nginx和php-fpm
nginx -s reload
/usr/local/php/sbin/php-fpm
4、测试
在www用户目录下创建test.php文件,输入;在浏览器中找开就可以看到PHP配置情况。

centOS7 安装mysql5.6

因为mysql被Oracle收购后会逐渐走向收费,为避免以后的版权纠纷,centos7已经不支持mysql,而是内部集成mariadb代替,而安装mysql的话会和mariadb产生文件冲突,所以安装mysql前要先卸载mariadb。
1、卸载mariadb
rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
###会提示错误:依赖检测失败
###加上–nodeps参数强制卸载
rpm -e –nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
如果找不到就用yum -y remove mariadb-libs.x86_64
2、下载mysql5.6
centos7等同与Red Hat7,下载此版本下的MySQL-client-5.6.21-1.el7.x86_64 .rpm MySQL-server-5.6.21-1.el7.x86_64.rpm就可以了,如果点击Download会提示你要先登录Oracle帐户,如果没有帐户或者不想登录,在其它地方下载相同的包也可以,如果不想在其它地方找又没有Oracle帐户,顺便注册一个就可以了。
如果嫌麻烦,也可一个FTP站点下载,里面包含了几乎所有的mysql版本。
3、安装mysql
进入到安装包所在目录
rpm -ivh MySQL-client-5.6.21-1.el7.x86_64.rpm
rpm -ivh MySQL-server-5.6.21-1.el7.x86_64.rpm
也可从源代码安装,不过先得安装cmake,软件包为mysql-5.6.24.tar.gz
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc
make
make install
4、生成mysql系统数据库
如果你马上登录mysql会提示找不到/var/lib/mysql/下的sock文件,因为还没有生成系统数据库。
mysql_install_db –user=mysql –basedir=/usr/share/mysql
###生成mysql系统数据库
5、登录mysql
mysql_install_db –random-passwords
###生成随机密码
随机密码保存在$HOME/.mysql_secret文件中,打开这个文件,找到密码。
mysql -u=root -p
###登录mysql,输入随机密码
6、修改root密码
mysql> SET PASSWORD FOR root@localhost=PASSWORD(‘yourpassword’);
###这时不要想着运行其它语句,初次登录时只能改密码
退出mysql
7、添加用户和数据库
用新密码重新登录数据库,创建用户和数据库

基因注释

很多人觉得基因注释很高深,特别对于那些不太懂编程的来说,感到无从下手,去年我也折腾了差不多半年,最后发现也就那么回事。一开始我是找各种基因注释的工具,例如研究geneontology自带的perl程序,里面涉及了众多模板,而且是模块里面又有模块,运行时不是少了这个模块就是那个模块有问题,最后折腾了两三个月也没有得到理想结果。后来用了blast2go这个程序用起来是没有问题,可实在是太慢,几个小时下去,泡都不冒一个。最后默默在躺在床上反思,我的目的是什么,注释的原理是什么。按照这个思路,慢慢的去找这些问题的答案,最后终于开窍了,想明白了真的好简单,现将思路简单归纳如下:
1、基因注释方法
1)根据已注释的信息,利用序列相似性原则,去注释未知序列。
2)查找文献资料注释基因功能。
基因批量注释的话都是采用第一种。
2、所需资料
1)将需要注释的序列翻译成氨基酸序列;
2)下载现有的已注释的蛋白序列(uniprot_sprot.fasta.gz,文件大小为78MB);
3)下载联系蛋白序号和注释号(GO的accession)的文件(idmapping.td.gz,文件大小为2.17G);
4)下载最新的GO数据库文件assocdb-data.gz
3、注释方法
1)利用formatdb格式化已注释的蛋白序列为blast库;
2)将需要注释的序列与blast库做blast;
3)找到与需注释序列相似度高的蛋白序列号;
4)找到这些蛋白序列号对应的注释号(GO号);
5)用GO号在GO数据库文件中的term表中找到注释信息或者在geneontology官网用GO号就可以查到详细的注释信息;

如果用NCBI数据库,方法也差不多,先下载已注释的蛋白序列,格式化数据成blast库,将需注释的序列与这个blast库比对,找到相似度高的已注释的蛋白序列号,用此序列号用NCBI中gene_info.gz和gene2access找到蛋白序列的gene号,然后将此号用gene2go数据找到go号,最后用go号找到其注释信息就行了。

如果按照以上方法操作的话,其实基因注释非常简单,几乎只要做个blast,然后将信息对应过来就可以了,远没有那么复杂。

Perl输出函数传递的二维数组

最近用DBI模块写个了mysql接入函数,但得到的return一直不能输出结果,后来经过思考,原来是二维数组传递的问题,终于解决了,特此为记。

下面这个是mysql接入函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub mysql_connect(){
        use DBI;
	my ($sql,$db)=@_;
	my $usr="selectonly";
	my $passwd="yuyin_110";
	my $dbh=DBI->connect("DBI:mysql:$db",$usr,$passwd);
 
	if(!$dbh){
		print "connect lost\n";
	}else{
		my $sth=$dbh->prepare($sql)or die "Can’t prepare $sql: $dbh->errstr\n";
		$sth->execute()or die "Can’t execute the query: $sth->errstr";
		my $data=$sth->fetchall_arrayref();
		$sth->finish;
		return $data;
	}
}

现在的问题是输出$data的内容,而$data返回的是一个二维数组的引用地址,可以用以下方法分层输出这个数组:

1
2
3
4
5
6
7
8
9
10
11
	my $sql="select * from test limit 1000";
	my $b=mysql_connect($sql,"test");
	my @r=@$b;    #####因为$b获得的只是一个引用地址,可以用@变成数组,这个数组这储存了一系列一维数组地址
	foreach(@r){
		my @each=@$_;            ######道理与获得二维地址一样
		foreach(@each){
			print  $_."\t";
		}
		print  "\n";
 
	}

Bioperl的简单安装

按照Bioperl上介绍的方法在linux下安装Bioperl老是安不上,或者是安装上了,但不能用,上面介绍的几种方法都试了,全不行,后面自己想了个办法,就是利用cpan只对要用到的模块进行单独安装,简单适应,如果你和我碰到了同样的问题不妨试试。
0、用root用户登录,不能由于权限问题,安装不上去。
1、确定cpan能用。
>perl -MCPAN -e shell
cpan>install Bundle::CPAN
cpan>q
2、升级cpan,保证安装的模块是最新的。
>cpan
cpan>install Module::Build
cpan>o conf prefer_installer MB
cpan>o conf commit
cpan>q
3、安装Bioperl最重要的模块SeqIO(该模块可以实现文件格式转换,计算序列长度,blast信息提取等),中间会有些选项要求选择,一路回车采用默认的就行了。
cpan>install Bio::SeqIO
4、安装SeqFeature模块(序列特征信息的获取或解析)。
cpan>install Bio::SeqFeature
5、安装GenBank模块
cpan>install Bio::GenBank
6、安装AlignIO和AlignI模块(数据格式格式转换)。
cpan>install Bio::AlignIO
cpan>install Bio::AlignI
7、安装DNAstatistics模块(序列统计分析,进化距离计算)。
cpan>install Bio::DNAstatistics

上面是一引起常用的模块,至于其它的一些模块如果要用到就按这种方法安装就行了。
利用cpan安装的模块默认路径是当前用户的perl5/lib/perl5目录下面,如/root/perl5/lib/perl5/,如果运行perl -e “use Bio::SeqIO”还是找不到该模块的话,可以将 /当前用户/perl5/lib/perl5/下的文件拷贝到@INC目录中,如/usr/local/lib64/perl5/中,最好也将/当前用户/perl5/bin/中的文件拷贝到/usr/local/bin/perl5中,以后可在那里调用。

PHP中的$_SERVER

$_SERVER[‘PHP_SELF’] 当前正在执行脚本的文件名,与 document root相关。
$_SERVER[‘argv’] 传递给该脚本的参数。
$_SERVER[‘argc’] 包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER[‘GATEWAY_INTERFACE’] 服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER[‘SERVER_NAME’] 当前运行脚本所在服务器主机的名称。
$_SERVER[‘SERVER_SOFTWARE’] 服务器标识的字串,在响应请求时的头部中给出。
$_SERVER[‘SERVER_PROTOCOL’] 请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER[‘REQUEST_METHOD’] 访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER[‘QUERY_STRING’] 查询(query)的字符串。
$_SERVER[‘DOCUMENT_ROOT’] 当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER[‘HTTP_ACCEPT’] 当前请求的 Accept: 头部的内容。
$_SERVER[‘HTTP_ACCEPT_CHARSET’] 当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER[‘HTTP_ACCEPT_ENCODING’] 当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER[‘HTTP_ACCEPT_LANGUAGE’] 当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER[‘HTTP_CONNECTION’] 当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER[‘HTTP_HOST’] 当前请求的 Host: 头部的内容。
$_SERVER[‘HTTP_REFERER’] 链接到当前页面的前一页面的 URL 地址。
$_SERVER[‘HTTP_USER_AGENT’] 当前请求的 User_Agent: 头部的内容。
$_SERVER[‘HTTPS’] 如果通过https访问,则被设为一个非空的值(on),否则返回off
$_SERVER[‘REMOTE_ADDR’] 正在浏览当前页面用户的 IP 地址。
$_SERVER[‘REMOTE_HOST’] 正在浏览当前页面用户的主机名。
$_SERVER[‘REMOTE_PORT’] 用户连接到服务器时所使用的端口。
$_SERVER[‘SCRIPT_FILENAME’] 当前执行脚本的绝对路径名。
$_SERVER[‘SERVER_ADMIN’] 管理员信息
$_SERVER[‘SERVER_PORT’] 服务器所使用的端口
$_SERVER[‘SERVER_SIGNATURE’] 包含服务器版本和虚拟主机名的字符串。
$_SERVER[‘PATH_TRANSLATED’] 当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER[‘SCRIPT_NAME’] 包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER[‘REQUEST_URI’] 访问此页面所需的 URI。例如,“/index.html”。
$_SERVER[‘PHP_AUTH_USER’] 当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER[‘PHP_AUTH_PW’] 当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER[‘AUTH_TYPE’] 当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。