让照片呈现电影胶片效果

其实并不完全是电影胶片效果,准确的说应该是老电影胶片效果,因为真实的电影胶片是相当的清晰和高饱合度的。这里的处理方法更类似于Lomo效果吧。也就是说,处理完以后,会呈现一种有暗角的,色彩更饱合,不是十分清晰的照片。

好了,我们先看一眼处理完成以后的效果对比:

处理前的原片
处理前的原片
处理后效果
处理后效果
处理后修改低光为暖色调
处理后修改低光为暖色调
处理后修改低光为冷色调
处理后修改低光为冷色调

[……]

Read more

如何制作高宽容度(HDR)的照片

首先我想讲一下什么是HDR。HDR,High Dynamic Range的缩写,直译过来就是高动态泛围,而在摄影里,这被称为宽容度。

其实我们容易分不清的有 两个概念,一个是宽容度,一个是爆光宽容度。

宽容度是指,感光材料在摄影过程中按正比关系记录景物亮度反差的暴光量范围。比如说一个感光材料可以分辨出十 一级的光强度差别,那么我们就认为它的宽容度是11。

而爆光宽容度,可以理解成感光材料对错误暴光的容耐范围,主要取决于被摄物体的亮度范围,对于高反差 景物宽容度会低,而对于低反差景物反差会高一些。普通物体的对数亮度范围都小于胶片的有用对数亮度范围,暴光宽容度都较大。如果 一个感光材料的宽容度为7档光圈,而被摄景物亮度只有5档的光圈范围,那么暴光宽容度为2档。

但如果物体的对数亮度范围等于 胶片的有用对数亮度范围,则没有宽容度,即只有一种暴光量。对于对数亮度范围大于感光材料有用对数暴光量范围的场景,无论如何暴光都会损失一些细节。这就是为什么我们在拍风景的时候经常天拍蓝了,风景就暗乎乎 的,而风景拍漂亮了,天就一片惨白。

但是如果我们想改变这种情况,想使用有限的数码器材拍出高宽容度的照片,有没有办法呢?如果有,我们应该怎么做呢?[……]

Read more

GO数据库学习笔记(4)

上一次学习了什么DAGs,这次我想实践一下学习的东西。
题目:对于任意给出的属于某属的多个基因,用树状图表示这些基因的功能所属关系。
实例程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/usr/bin/perl
#使用DBD-mysql联接gene ontology数据库。
use DBI;
$username = 'go_select';$password = 'amigo';$database = 'go_latest';
$hostname = 'mysql.ebi.ac.uk';$port='4085';
$dbh = DBI->connect("dbi:mysql:database=$database;host=$hostname;port=$port", $username, $password) or exit(1);
#随机给出一些基因,基因的列表越长,所需时间自然也就越长,显示结果也需要太多的位置,
#所以这里只示例只有五个基因的情况。
#这些基因都来自酿酒酵母。
@gene_list =('AGA2','AIM1','BUD31','BUD32','BUD4');
#sql语句。从gene_product表(这个表内是基因和基因产物相关的记录)出发,
#以gene_product_id为关键字连接association表(gene_product与term的关系表,表中is_not是很有用的信息,如果它的值为真,则表示这个关系没有有效的证据支持。),
#以species_id为关键字连接species表,用species表中的genus和species项来确认数据是属于酿酒酵母的,
#用gene_product表中的symbol项来匹配基因列表中的基因名,用binary来表示基因名区分大小写,
#返回的结果只提取不重复的symbol(基因名),term_id(GO term ID)和product_count(该属中属于该term ID的所有基因的个数)。
$SQL = "SELECT DISTINCT g.symbol,t.term_id,t.product_count FROM gene_product AS g INNER JOIN association AS a ON (g.id=a.gene_product_id) INNER JOIN gene_product_count AS t ON (a.term_id=t.term_id) INNER JOIN species AS s ON (t.species_id=s.id) WHERE s.genus='Saccharomyces' AND s.species='cerevisiae'  AND a.is_not=0 AND BINARY g.symbol IN ('";
$SQL .=join ("','",@gene_list);
$SQL .= "')";
$sth = $dbh->prepare($SQL);
$sth->execute();
#把返回的结果全部都存到db二维数组当中去。
@db = ();
while (@ary = $sth->fetchrow_array()){
my %gene_entry = ("symbol"=>$ary[0],"term_id"=>$ary[1],"count"=>$ary[2]);
push @db, [$gene_entry{symbol},$gene_entry{term_id},$gene_entry{count}];
}
#对db二维数组当中的数据以term_id为索引做统计。
#用哈希表count_list保存某term_id下返回的基因总数(product_count)
%count_list=();
#用哈希表count保存这次所调查的基因中属于某term_id的基因数。
%count=();
#用哈希表gene_list保存属于某term_id的基因名。
%gene_list=();
$sql = "";
for $aref(@db){
$sql.="'@$aref[1]'," if ($sql !~ /@$aref[1]/);
$count_list{@$aref[1]}=@$aref[2];
$count{@$aref[1]}+=1;
$gene_list{@$aref[1]}.=@$aref[0].",";
}
#建立SQL语句,返回所有term_id对应的term_name。
$sql_t = "SELECT term.id, term.name FROM term WHERE term.id IN (".$sql."'1')";
#建立SQL语句,返回所有term_id的所属关系和步长。
$sql = "SELECT t.term1_id,t.term2_id,t.distance FROM graph_path AS t WHERE t.term1_id IN (".$sql."'1') AND t.term2_id IN (".$sql."'1') AND t.term1_id<>t.term2_id";
$sth_p = $dbh->prepare($sql);
$sth_p->execute();
#将返回的所属关系和步长保存到graph_path二维数组当中。
@graph_path=();
while(@ary=$sth_p->fetchrow_array()){
my %term2term=("term1_id"=>$ary[0],"term2_id"=>$ary[1],"distance"=>$ary[2]);
push @graph_path, [$term2term{term1_id},$term2term{term2_id},$term2term{distance}];
#  print join ("\t",@ary),"\n";
}
#对graph_path二维数组以步长升序排序。
@path_sort = sort {@$a[2] <=> @$b[2]} @graph_path;
$sth_t = $dbh->prepare($sql_t);
$sth_t->execute();
#将返回的term_id和term_name对应列表保存到哈希表term_list当中去。
%term_list=();
while(@ary=$sth_t->fetchrow_array()){
$term_list{$ary[0]}=$ary[1];
}
#对排序后的path_sort列表以term_id为关键字增加term_name,某term_id的基因数,某term_id下返回的基因总数(product_count),某term_id下的基因名,和一个脏标记。
for($i=0;$i<@path_sort;$i++){
$path_sort[$i][3]=$term_list{$path_sort[$i][0]};
$path_sort[$i][4]=$term_list{$path_sort[$i][1]};
$path_sort[$i][5]=$count{$path_sort[$i][1]};
$path_sort[$i][6]=$count_list{$path_sort[$i][1]};
$path_sort[$i][7]=$gene_list{$path_sort[$i][1]};
$path_sort[$i][8]=0;
}
#for $aref(@path_sort){
#   print "@$aref,\n";
#}
#对path_sort二维数组中的数据依据所属关系重新保存到tree_view表当中去
print "\nroot.\n";
&draw_path(1,0,\@path_sort,\@tree_view);
#合并统计相关数据
for $hit(@tree_view){
@daughter_gene_ary = split(/,/,$gene_list{$hit->{this_id}});
@parent_gene_ary = split(/,/,$gene_list{$hit->{parent_id}}) if($hit->{parent_id}!=1);
@parent_gene_ary = (@parent_gene_ary,@daughter_gene_ary);
%screen = ();
@parent_ary = grep (!$screen{$_}++, @parent_gene_ary);
$gene_list{$hit->{parent_id}}= join (",",@parent_ary);
for $par(@tree_view){
if ($par->{this_id}==$hit->{parent_id}){
$par->{genes_name}=$gene_list{$par->{this_id}};
$count{$par->{this_id}}=@parent_ary;
$par->{this_test}=$count{$par->{this_id}};
}
}
}
#画出树状图。
for $hit(@tree_view){
print " " x $hit->{pre_distance};
$temp_l=length($hit->{parent_name})-1;
print " " x $temp_l;
print "|";
print "-" x $hit->{this_distance};
print "$hit->{term_name}(step:$hit->{this_distance})($hit->{this_test}/$hit->{total})($hit->{genes_name})\n";
}
 
$sth_p->finish();
$sth_t->finish();
$sth->finish();
$dbh->disconnect();
print "\n\nthis is the END!";
 
#层进递归生成tree_view数组,用以生成树状图
sub draw_path{
my ($parent,$distance,$path_t,$tree_v)=@_;
my ($sep) = "-";
my ($pre) = $sep x $distance;
for(my $i=0;$i<@$path_t;$i++){
if($$path_t[$i][0]==$parent){
my $flag = 1;
$flag = 0 if(&get_step($$path_t[$i][0],$$path_t[$i][1],0,$$path_t[$i][2],$path_t));
if($flag){
$$path_t[$i][8]=1;
my %tree = ("parent_id"=>$$path_t[$i][0],"this_id"=>$$path_t[$i][1],"pre_distance"=>$distance,"this_distance"=>$$path_t[$i][2],"parent_name"=>$$path_t[$i][3],"term_name"=>$$path_t[$i][4],"this_test"=>$$path_t[$i][5],"total"=>$$path_t[$i][6],"genes_name"=>$$path_t[$i][7]);
push @$tree_v,\%tree;
my $out ="$pre$$path_t[$i][3]";
$out .=  $sep x $$path_t[$i][2];
draw_path($$path_t[$i][1],length($out),$path_t,$tree_v);
}
}
}
}
 
#防止tree_view当中产生重复数据的递归函数。
sub get_step{
my($parent,$daughter,$step,$step_t,$path_t)=@_;
my $flag;
for(my $i=0; $i<@$path_t;$i++){
if($$path_t[$i][8]&&$$path_t[$i][1]==$daughter){
$step += $$path_t[$i][2];
if($$path_t[$i][0]==$parent){
if ($step==$step_t){
return $flag=1;
}#if
else{
$step=0;
next;
}#else
}#if
elsif($$path_t[$i][0]==1){
$step=0;
next;
}#elsif
else{
if(get_step($parent,$$path_t[$i][0],$step,$step_t,$path_t)){
return $flag = 1;
}
else{
$step=0;
next;
}
}#else
}#if
}#for
return $flag;
}

两个递归没把我的头想破了……递归怎么就这么绕呢?从一开始C的时候学递归就学不利索。
现在看一下结果吧:

root.
|-molecular_function(s[……]

Read more

GO数据库学习笔记(3)

为了搞清楚gene ontology database的数据结构,必须得先了解清楚一个概念,什么是Directed Acyclic Graphs (DAG)。这个DAG被翻译成有向无环图,具体是个啥意思呢?
对于一个DAG来讲,有以下两个特征:

  1. 有向。数据间有指向性关系,A属于B,或者说A就是B的一种形式之类的。
  2. 无环。当你从任何一点开始,顺着指向走的话永远不可能走回原点。

下[……]

Read more

GO数据库学习笔记(2)

这次要对数据进行处理了。原代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#!/usr/bin/perl
#从键盘输入数据文件名并打开文件。其中<STDIN>指的就是标准输入设备。
print "please input the file name\n";
$filename = <STDIN>;
open(MICROARRAY, $filename)||die ("Could not open file");
#将文件一次性读入内存。
@whole_file = <MICROARRAY>;
#统计文件一共有多少行
$rows = scalar(@whole_file);
print "there are $rows entries\n";
#统计文件一共有多少以TAB为间隔的列。
$pattern ="\t";
@cells = split(/$pattern/, $whole_file[0]);
$cols = scalar(@cells);
print "there are $cols columns\n";
#设置计入统计的表达差异的比例。
$times = 1;
#设置脏标记用来退出程序。
$flag = 1;
while($flag==1){
#用first_col和second_col来设置需要比较的列。
$first_col=0;
$second_col=0;
print "please set the columns you want to compare\n";
while ($first_col<=0 || $first_col>=$cols){
print "the first column is:\n";
$first_col = <STDIN>;
}
$first_col--;
 
while ($second_col<=0 || $second_col>=$cols){
print "the second column is:\n";
$second_col = <STDIN>;
}
$second_col--;
#
$up_reg = 0;
$down_reg = 0;
@total_hash = ();
@go_hash = ();
$j = 0;
print "gene_name\texp_ratio\n";
#对文件进行逐行处理。
for($i=0;$i<$rows;$i++){
#对每一行的内容按TAB间隔存到数组words当中去。
@words = split(/$pattern/, $whole_file[$i]);
next if($words[$first_col]<=0 || $words[$second_col]<=0);
$ratio = log($words[$first_col])- log( $words[$second_col]);
#比较需要对比的两数据的差异,当差异大于两倍时进行处理。
if(abs($ratio)>=$times){
#对最后一列的注释进行处理,以空隔为分隔把内容存到description数组里去。
#当数据差异大于两倍时分为上调和下调分别进行统计。
@description = split(/\s+/,$words[$cols-1]);
my %reg_gene = ("gene_name"=>$description[2],"exp_ratio"=>$ratio);
push @total_hash, \%reg_gene;
printf ("%s\t%8.4f\n",$reg_gene{gene_name},$reg_gene{exp_ratio});
$j++;
$up_reg++ if($ratio>=$times);
$down_reg++ if($ratio<=-$times);
#查找GO信息,提取goid,并把每一个goid和对应的基因名存入哈希表go_hash当中去。
while($words[$cols-1]=~/\[goid\s(GO:\w+)\]/g){
$go_id = $1;
my %go = ("gene_name"=>$description[2],"exp_ratio"=>$ratio,"go_id"=>$go_id);
push @go_hash, \%go;
}
}
}
print "totally $j genes affected\n";
print $up_reg." genes up regulated. And ".$down_reg." genes down regulated.\n";
 
print "the GO info list as follows\n";
print "go_id\tgene_name\n";
#对存有go_id的哈希表go_hash进行排序,便于统计每个go_id一共有多少基因关联。
@go_sort = sort {$a->{go_id} cmp $b->{go_id}} @go_hash;
#统计一共有多少个go_id。
$sample_n = scalar(@go_sort);
#从GO数据库调取库中酿酒酵母的基因总数
$sample_N = &get_N();
#准备上调基因和下调基因哈希表。
%go_list_up = ();
%go_list_down = ();
#对每一个go_id进行统计
for($i=0;$i<$sample_n;$i++){
$tmp = $go_sort[$i];
%path_t = %$tmp;
#如果是上调,则把它压入上调的哈希统计表当中去,反之亦然。
$go_list_up{$path_t{go_id}} +=1 if ($path_t{exp_ratio}>=$times);
$go_list_down{$path_t{go_id}} +=1 if ($path_t{exp_ratio}<=-$times);
print "$path_t{go_id}\t$path_t{gene_name}\n";
}
#计算并显示所有上调和下调的GO统计。
&go_sql(1,$sample_N,$j,%go_list_up);
&go_sql(0,$sample_N,$j,%go_list_down);
 
print "\n\n0 for exit\n1 for continue\n";
$flag = <STDIN>;
}
 
close(MICROARRAY);
 
print "\nThis is the end!";
#从GO数据库当中调取属于酿酒酵母的基因总数
sub get_N{
use DBI;
$username = 'go_select';$password = 'amigo';$database = 'go_latest';
$hostname = 'mysql.ebi.ac.uk';$port='4085';
$dbh = DBI->connect("dbi:mysql:database=$database;" .
"host=$hostname;port=$port", $username, $password) or exit(1);
#count(*)统计出有多少条记录,把gene_product数据表和species数据表以species_id相连,查找到所有符合种属为酿酒酵母的记录条数。
$SQL = "SELECT count(*) AS n".
" FROM gene_product AS p".
" INNER JOIN species AS s ON (p.species_id=s.id)".
" WHERE s.genus='Saccharomyces'".
" AND s.species='cerevisiae'";
$sth = $dbh->prepare($SQL);
$sth->execute();
$sth->bind_columns(\$sample_no);
while ($sth->fetch()){
$sample_No=$sample_no;
}
$sth->finish();
$dbh->disconnect();
return $sample_No;
}
#查询,计算,并显示统计信息
sub go_sql{
use DBI;
my ($up_or_down,$N,$n,%list_sql)=@_;
$username = 'go_select';$password = 'amigo';$database = 'go_latest';
$hostname = 'mysql.ebi.ac.uk';$port='4085';
$dbh = DBI->connect("dbi:mysql:database=$database;" .
"host=$hostname;port=$port", $username, $password) or exit(1);
if($up_or_down){
print "\n\nup regulated genes\n";
}
else {
print "\n\ndown regulated genes\n";
}
print "\n\ngo_id\tm\tk\tN\tn\tp_value\tterm_type\n";
#对于记录中每条数据,都可以提取到两个数据,一是go_id,二是该go_id下有多少表达差异的基因。
while (($go_id_holder,$record) = each(%list_sql)){
#调取该go_id下属于酿酒酵母的基因总数,同时调取该go_id的注释。
$SQL= "SELECT gene_product_count.product_count, term.name".
" FROM term ".
" INNER JOIN gene_product_count ON (term.id=gene_product_count.term_id)".
" INNER JOIN species ON (gene_product_count.species_id=species.id)".
" WHERE term.acc='$go_id_holder'".
" AND species.genus='Saccharomyces'".
" AND species.species='cerevisiae'";
 
$sth = $dbh->prepare($SQL);
$sth->execute();
$sth->bind_columns(\$product_count,\$term_type);
while($sth->fetch()){
#计算p_value。这个值的计算方法还不确认是否正确,但我们实验室的人以前都是用的这个公式,不过与文献方法还是有差异。实验室的人用的matlab内的库函数实现的,而且调用的是本地数据库,这两方面我都必须换成自己的方式。
$p_value=&phyper($N,$product_count, $n, $record);
print "$go_id_holder\t$product_count\t$record\t$N\t$n\t$p_value\t$term_type\n";
}
$sth->finish();
}
$dbh->disconnect();
}
#超几何统计。超几何统计的原理可以百度google一下。
sub phyper{
($N,$m,$n,$k) = @_;
@x = (0, $m+1, $k+1, $N-$m+1, $n-$k+1, $N+1, $n+1);
if($x[2]>$x[1]){
$e=0;
}
else{
$e = &gammln($x[1]) - &gammln($x[2]) - &gammln($x[1]-$x[2]+1)
+ &gammln($x[3]) - &gammln($x[4]) - &gammln($x[3]-$x[4]+1)
- &gammln($x[5]) + &gammln($x[6]) + &gammln($x[5]-$x[6]+1);
$e = exp($e);
}
return $e;
}
#用于计算大数阶乘的近似算法,原程序来自numerical recipes in C第六单第一节。
sub gammln
{
my ($xx) = @_;
my ($x,$y,$tmp,$ser,$eye)=(0,0,0,0,0);
my @cof = (76.18009172947146,-86.50532032941677,
24.01409824083091,-1.231739572450155,
0.1208650973866179e-1,-0.5395239384953e-5);
$y=$x=$xx;
$tmp = $x+5.5;
$tmp -= ($x+0.5)*log($tmp);
$ser=1.000000000190015;
for ($eye=0;$eye<=5;$eye++){
$ser += $cof[$eye]/++$y;
}
return -$tmp+log(2.506628746310005*$ser/$x);
}

运行以后,得到结果:

please input the file name
c:\\testfile.txt
there are 5716 entries
there are 7 columns
please set the columns you want to com[……]

Read more

GO数据库学习笔记(1)

前几天学习了KEGG API之后,感觉这个数据虽然好,但是还是有些局限性,比如它比较重视代谢途径而会遗漏其它信息。为了找到更完整的基因注解信息,同学为我介绍了GO(the Gene Ontology)数据库。如果想快速了解这个数据库能提供些什么有用的信息,可以去http://www.geneontology.org/GO.teaching.resources.shtml?all下载一些它的PPT来[……]

Read more

KEGG API学习笔记(3)

今天接着昨天的任务继续。昨天已经实现了文件读取了表达差异基因的筛选工作,今天的任务就是把这些基因在代谢途径中显示出来。原代码如下:

#!/usr/bin/perl
use SOAP::Lite;
$wsdl = ‘http://soap.genome.jp/KEGG.wsdl’;
$soap_ser = SOAP::Lite->service($wsdl);

$file[……]

Read more

KEGG API学习笔记(2)

既然已经可以从利用API成功调取数据了,我们应该开始自己的学习过程了。据以前的体会,学习一门语言,必须带着问题去学才能有效果。于是在学习前,为自己留下一个作业,作业题目是,

假设现在有两比较样本的microarray芯片的资料需要分析,资料以列表的形式表示,列表示例如下:

1_Signal 1_Detection 2_Signal 2_Detection Descriptions
1771550_at 66.8 P 67.2 A S. cerevisiae YAL064W-B GEN=SEO1
DB_XREF=GI:6319253
SEG=NC_001133:+12047,12427
DEF=Hypothetical ORF
NOTE=Yal064w-bp; go_component: cellular_component unknown [goid
GO:0008372] [evidence ND]; go_function: molecular_function unknown [goid
GO:0005554] [evidence ND]; go_process: biological_process unknown [goid GO:0000004]
[evidence ND]
1772356_at 23.8 A 13.6 A S. cerevisiae YAL064C-A
GEN=SEO1
DB_XREF=GI:7839146
SEG=NC_001133:-13364,13744
DEF=Hypothetical ORF
NOTE=Yal064c-ap; go_component: cellular_component unknown [goid
GO:0008372] [evidence ND]; go_function: molecular_function unknown [goid
GO:0005554] [evidence ND]; go_process: biological_process unknown [goid GO:0000004]
[evidence ND]
1772528_at 7.3 A 3.2 A S. cerevisiae YAL064W
GEN=SEO1
DB_XREF=GI:6319254
SEG=NC_001133:+21526,21852
DEF=Hypothetical ORF
NOTE=Yal064wp; go_component: cellular_component unknown [goid
GO:0008372] [evidence ND]; go_function: molecular_function unknown [goid
GO:0005554] [evidence ND]; go_process: biological_process unknown [goid
GO:0000004] [evidence ND]
1776321_at 120.9 P 40.3 A S. cerevisiae YAL063C-A
GEN=SEO1
DB_XREF=GI:33438755
SEG=NC_001133:-22397,22687
DEF=Identified by expression profiling and mass spectrometry NOTE=Yal063c-ap; go_component:
cellular_component unknown [goid GO:0008372] [evidence ND]; go_function:
molecular_function unknown [goid GO:0005554] [evidence ND]; go_process:
biological_process unknown [goid GO:0000004] [evidence ND]
1779679_s_at 197.5 P 204.6 P S. cerevisiae YAL063C
GEN=FLO9
DB_XREF=GI:6319255
SEG=NC_001133:-24001,27969
DEF=Lectin-like protein with similarity to Flo1p, thought to be
expressed and involved in flocculation
NOTE=Flo9p; go_component: cell wall (sensu Fungi) [goid GO:0009277]
[evidence ISS] [pmid 7502576]; go_function: mannose binding [goid GO:0005537]
[evidence ISS] [pmid 7502576]; go_process: flocculation (sensu Saccharomyces)
[goid GO:0000501] [evidence IEP,ISS] [pmid 7502576]

列表中第一列为microarray中的序列编号,第二,四列为信号强度,第三,五列信号可识别度,P为良好,A为差,第六列为信息说明。需要比较两次实验中信号良好的两信号差别,差异显著的,使用KEGG的代谢算途径库图象化表示,并提供统计表,清晰描绘两次实验的差异。

先把作业分析一下,大约是要先逐行读取文件,然后依据表格分格符将数据分割成六列,当第三与第五列均为P时比较第二,四列信号强度差距,差别在一个数量级以上时,从最后一列中读取 DB_XREF后的数据库号,通过它在KEGG中查找相应的代谢信息,做形象化处理。
今天要完成的就是数据的读取工作。其余的工作以后几课再做。
设文件名为$filename=”c\TPS1NS.xls”;
程序代码如下: [……]

Read more

KEGG API学习笔记(1)

我写这个东西,就是为了给自己一个激励,防止自己半途而废。KEGG(Kyoto Encyclopedia of Genes and Genomes)写的这个API是基于SOAP的,一开始本来打算用C来学习的,试了两天一直没有搞定SOAP客户端怎么弄,只好发个懒,学习Perl吧,以前因为一些机缘,了解一点正则,深感Perl的方便,也正好是个机会。
先搭建环境,在WindowsXP下,先安装了一个Ac[……]

Read more