【3.3】gromacs操作心得

一、进行模拟的基本步骤行

以下是进行分子动力学模拟的最基本步骤,来自Gromacs维基。具体的步骤可能会因为模拟目标的不同而存在差异,这里只做基本的概述。

十分清楚要什么样的模拟系统性质和现象,明白模拟的目标。

选择适当的工具以实现模拟目标。这需要熟知其他研究人员对相似模拟系统的模拟方法等资料,要好好读别人的论文,主要包括:

  • 模拟使用的软件,当然还要考虑使用的力场,有时因为力场关系,需要更改使用的软件。
  • 力场描述了系统中原子的性质和相互作用,选择一个适合自己研究目标的力场至关重要,还是需要多看论文。根据sensenbobo血泪史和别人的经验,模拟核酸的话,可以采用amber力场,水分子可以使用TIP3P;模拟蛋白质的话,可以采用OPLS-AA,水分子使用TIP4P(重申一下,我本人没有跑过测试)。
  • 获取模拟分子的坐标文件(PDB),或者自己生成一个。自己生成很好啊,强烈鼓励,但是要十分明白有一定的危险性,要明白每一步模拟系统的现象是为什么。
  • 根据模拟软件,生成模拟系统初步坐标文件。
  • 获取或者生成系统的拓扑文件,比如Gromacs的pdb2gmx命令,或者使用网络服务器PRODRG(google一下这几个字母),amber的leap命令和antechamber,NAMD的psfgen或者VMD。请参考相关手册。
  • 给模拟系统添加一个盒子(盒子的翻译方法我十分不喜欢,箱子显得太大,边界显得太难理解,但是盒子听起来想到蛋糕,我们是严肃的科学家。娃哈哈。)在盒子中添加水分子,添加离子如NA和CL之类(添油加醋,生活就是这样进行的)。添加任何东西到你的系统中,就要相应的修改一下拓扑文件,以保持与系统对应,不然会出错哦。

  • 进行能量最优话。这样做是消去系统中原子之间距离太近造成的高能量。必要的时候,分子可以现在真空中能量最优话,然后再做溶剂环境中能量最优话。

  • 选择恰当的模拟参数模拟平衡模拟系统。需要慎重考虑力场的作用,必要的时候保持系统体积温度不变(NVT系综)进行位置限制性平衡系统,然后在保持系统温度压强不变(NPT系综)修正系统的密度。然后再选择正确的系综(NPT,NVT,NET,BT??)进行数据收集。(真烦!)

  • 跑足够长时间的模拟,使系统达到理想的平衡。使用模拟软件的工具或者其他软件观察系统的性质,如温度,能量瞪瞪。 使用适当的参数进行数据采集模拟,注意模拟衔接过程中各个系统性质保持不变,如果原子速度之类。这里还要考虑力场的作用,同时要考虑怎么测量描述模拟目标。

  • 模拟足够长的时间使模拟目标明显出现(可能也出现跟你期望相反的结果,出现率应该百分之五十,加上个人感情因素,可能会达到百分之八十。保重!)。

  • 分析模拟结果,解释得到结果。要好好利用视图工具,同时要十分注意漂亮的三维图说明不了什么问题。图表,比较,统计,一个都不能少。 就这样吧。

二、Gromacs使用-新手入门篇

其实gromacs的思路比较简单,大体就是以下的流程,在此先对em进行一下总结:

2.1 convert the pdb-file to a gromacs structure file(.gro / .pdb) and a gromacs topology file(.top)

这一步需要gromacs的预处理程序pdb2gmx 标准的输入命令应该是:

pdb2gmx -ignh -f speptide.pdb -p speptide.top -o speptide.gro

这个命令之后有一个force field的选择 系统给出了11种力场,具体以后实际计算中如何选择力场还是应该多参阅文献和gromacs说明书的。 这步之后可以在屏幕看到:

--------- PLEASE NOTE ------------
You have succesfully generated a topology from: speptide.pdb.
The G43a1 force field and the spc water model are used.
Note that the default mechanism for selecting a force fields has
changed, starting from GROMACS version 3.2.0
--------- ETON ESAELP ------------

至此,完成了从pdb到gro和top的转变。另外,我也看过有的作这一步命令时候并不进行top文件的转换,因为在genbox(对盒子加水溶剂化时还要对top文件进行修改)

2.2 solvate the peptide in water

这一步需要用到editconf和genbox两个程序,命令的标准书写应该是:

editconf -bt cubic -f speptide.gro -o speptide_box.gro -c -d 0.5

可以在屏幕上看到

Read 191 atoms
Volume: 8.17315 nm^3, corresponds to roughly 3600 electrons
No velocities found

system size :
1.774
3.372
1.367 (nm)

diameter
:
3.517
(nm)

center
:
2.650
1.453
2.417 (nm)

box vectors :
1.774
3.372
1.366 (nm)

box angles
:
90.00
90.00
90.00 (degrees)

box volume
:
8.17
(nm^3)

shift
: -0.391
0.806 -0.158 (nm)
new center
:
2.259
2.259
2.259 (nm)
new box vectors :
4.517
4.517
4.517 (nm)
new box angles
:
90.00
90.00
90.00 (degrees)
new box volume
:
92.18
(nm^3)

因为程序的默认,所以这一步命令可以写作:

editconf –f speptide –o –d 0.5

这里-f之后的sp文件是默认gro文件或者pdb文件,-o后面生成的output file是放入盒子的体系的gro文件 按照这样的格式,输出的文件被默认命名为-out.gro

体系放入盒子之后在盒子中注入水

genbox -cp speptide_box.gro -cs -p speptide.top -o speptide_water.gro

也可简写为 :

genbox –cp out –cs –p sprptide –o b4em

Screen--
Output configuration contains 9035 atoms in 2967 residues
Volume
:
92.1813 (nm^3)
Density
:
994.449 (g/l)
Number of SOL molecules:
2948

之后看加水之后的top文件

用命令

tail speptide.top

可以看到

[ system ]
; Name
Protein in water

[ molecules ]
; Compound
#mols
Protein
1
SOL
2948

其中SOL后面的数字2948就是genbox加入盒子的水分子的数目。

Editconf程序的另一个用途是讲gro文件转化回pdb这时可以讲speptide_water.gro转化回pdb观察

editconf –f speptide_water.gro –o speptide.pdb

拖回本机 用spbdv或者vmd观察 。

The next step is to generate index file . in the tutor of gromacs , we are told that there are a set of index groups to select, unfortunately, I didi not find them ,so I have to use make_ndx to generate one .

make_ndx –f b4em

2.3 perform an enery minimization of the peptide in solvent

Now the simulation system is almost ready. Before we can start the dynamics, we must perform an energy minimization, to alleviate any bad contacts (atoms overlapping such that a significant repulsion would result, causing numerical problems in the simulation) that might be present in the system.

grompp –v –f em.mdp –c speptide_water.gro –p speptide.top –o speptide_em.tpr

Or use this command for short:

grompp –v –f em –c b4em –p speptide –o em

After this command ,the bad contacs have been removed .so we can do enery minimization now.

mdrun –v –s speptide_em.tpr –o speptide_em.trr –c after_em.gro –g emlog.log

Or

mdrun –v –s em –o em –c after_em –g emlog

From screen ,we can see these ——

Steepest Descents:

Tolerance (Fmax)
=
2.00000e+03
Number of steps
=
100
Step=
0, Dmax= 1.0e-02 nm, Epot= -8.02562e+04 Fmax= 2.70468e+04, atom= 6792
Step=
1, Dmax= 1.0e-02 nm, Epot= -8.69641e+04 Fmax= 1.24531e+04, atom= 6657
Step=
2, Dmax= 1.2e-02 nm, Epot= -9.48067e+04 Fmax= 5.54072e+03, atom= 9009
Step=
3, Dmax= 1.4e-02 nm, Epot= -1.02743e+05 Fmax= 2.86957e+03, atom= 8766
Step=
4, Dmax= 1.7e-02 nm, Epot= -1.08941e+05 Fmax= 1.53075e+04, atom= 150
Step=
5, Dmax= 2.1e-02 nm, Epot= -1.10083e+05 Fmax= 1.31653e+04, atom= 150
Step=
6, Dmax= 2.5e-02 nm, Epot= -1.10564e+05 Fmax= 2.16454e+04, atom= 150
Step=
7, Dmax= 3.0e-02 nm, Epot= -1.11528e+05 Fmax= 1.82398e+04, atom= 150
Step=
9, Dmax= 1.8e-02 nm, Epot= -1.12767e+05 Fmax= 3.87548e+03, atom= 120
Step=
11, Dmax= 1.1e-02 nm, Epot= -1.13598e+05 Fmax= 1.23013e+04, atom= 120
Step=
12, Dmax= 1.3e-02 nm, Epot= -1.14464e+05 Fmax= 5.37656e+03, atom= 120
Step=
13, Dmax= 1.5e-02 nm, Epot= -1.14787e+05 Fmax= 1.74494e+04, atom= 120
Step=
14, Dmax= 1.9e-02 nm, Epot= -1.15874e+05 Fmax= 8.35820e+03, atom= 120
Step=
16, Dmax= 1.1e-02 nm, Epot= -1.16420e+05 Fmax= 6.65421e+03, atom= 120
Step=
17, Dmax= 1.3e-02 nm, Epot= -1.16807e+05 Fmax= 1.08106e+04, atom= 120
Step=
18, Dmax= 1.6e-02 nm, Epot= -1.17248e+05 Fmax= 1.12834e+04, atom= 120
Step=
19, Dmax= 1.9e-02 nm, Epot= -1.17425e+05 Fmax= 1.45145e+04, atom= 120
Step=
20, Dmax= 2.3e-02 nm, Epot= -1.17590e+05 Fmax= 1.67089e+04, atom= 120
Step=
22, Dmax= 1.4e-02 nm, Epot= -1.18845e+05 Fmax= 2.65542e+03, atom= 121
Step=
23, Dmax= 1.7e-02 nm, Epot= -1.19198e+05 Fmax= 2.39072e+04, atom= 120
Step=
24, Dmax= 2.0e-02 nm, Epot= -1.20588e+05 Fmax= 6.17310e+03, atom= 120
Step=
26, Dmax= 1.2e-02 nm, Epot= -1.20901e+05 Fmax= 1.04224e+04, atom= 120
Step=
27, Dmax= 1.4e-02 nm, Epot= -1.21229e+05 Fmax= 8.89909e+03, atom= 120
Step=
28, Dmax= 1.7e-02 nm, Epot= -1.21346e+05 Fmax= 1.51125e+04, atom= 120
Step=
29, Dmax= 2.1e-02 nm, Epot= -1.21686e+05 Fmax= 1.29390e+04, atom= 120
Step=
31, Dmax= 1.2e-02 nm, Epot= -1.22216e+05 Fmax= 3.21419e+03, atom= 120
Step=
33, Dmax= 7.5e-03 nm, Epot= -1.22523e+05 Fmax= 6.52631e+03, atom= 120
Step=
34, Dmax= 8.9e-03 nm, Epot= -1.22796e+05 Fmax= 6.31916e+03, atom= 120
Step=
35, Dmax= 1.1e-02 nm, Epot= -1.22998e+05 Fmax= 8.04922e+03, atom= 120
Step=
36, Dmax= 1.3e-02 nm, Epot= -1.23167e+05 Fmax= 9.93619e+03, atom= 120
Step=
37, Dmax= 1.5e-02 nm, Epot= -1.23317e+05 Fmax= 1.10029e+04, atom= 120
Step=
39, Dmax= 9.3e-03 nm, Epot= -1.23857e+05 Fmax= 1.88770e+03, atom= 810
writing lowest energy coordinates.
Steepest Descents converged to Fmax < 2000 in 40 steps
Potential Energy
= -1.2385705e+05
Maximum force
=
1.8876959e+03 on atom 81
Norm of force
=
1.3663420e+04
NOTICE!!!!!!!!!
If the potential enery after minimization is lower than -1.1e+05kJ/mol, it is acceptable and the structure can be used for MD caculations

三、gromac的一些笔记

用了一个星期,基本操作差不多了。套路自顶向下大概是这样:

1.核心步骤当然是mdrun了,当然后续的数据分析才是对理论水平的要求,先不讨论。这里需要一个tpr输入文件——由grompp生成的计算体系和计算控制详细信息的二进制文件。计算生成trr轨迹文件、xtc压缩的轨道文件、edr能量等状态参量记录文件、log计算记录等。后续处理靠这些输出文件和 gmx提供的命令。

2.grompp预处理文件,将三种文件整合到一个tpr文件作为mdrun的输入。分别是:

  • mdp文件:计算控制文件,里面要给md模拟时的计算参数加以描述,控制时间、精度、温度什么的。
  • gro文件:分子坐标文件,记录要模拟的体系中全部(要计算的)原子的坐标、名称等。
  • top文件:力场参数文件。记录gro文件中的原子之间相互作用立场参数和原子分子类别信息的文件。

3.mdp文件一般可以看手册根据需要自己填写,或者看模版。

4.gro、top文件,用editconf加周期边界元胞,genbox加溶剂。那么最初的gro、top文件如何得到呢?

  • 如果是从网站上直接当下来的pdb文件,用pdb2gmx转化。(有时需要先去掉里面的水,有时需要加-ignh不考虑多余的氢,有时需要加一些离子(genion)来平衡蛋白质上的电荷)

  • 要是还要加入自己的分子,比如在MS什么的软件中先画了一个,存成pdb文件,这时不能直接转,因为残基gmx不认识,立场库里面没有描述,需要自己写top文件。不过这很累,还要自己计算,又不会,怎么办呢,网上推荐用ProDrg软件(只找到网络版的网址google一下就有),把pdb文件 copy进去,run一下就出来gro,和itp文件了(还有其他的一坨,用不到)。把自己gro文件里的内容copy到转出来的gro里,总原子数和序号改一下,再把itp文件include到老top文件中,[ molecules ] 标签下面添上加入的分子名和数,就可以grompp了。

四、其他人的总结

gromacs基础知识

Gromacs的pdb2gmx命令使用gromacs做分子动力学模拟时,第一个要用到的命令一般都是pdb2gmx。这个命令吧pdb分子文件转化成gromacs独特的gro分子结构文件类型,同时产生分子拓扑文件。

Gromacs是典型的GPL软件,每一个命令都有很多命令参数。这对熟悉windows环境的人来说有一点烦,但是如果熟悉了Linux环境,也就慢慢喜欢啦。(建议多使用命令,就像VMD, Pymol,rasmol和Chimera等等分子可视化软件,如果接合命令使用,功能都非常强大。另外一个比较bt的软件叫做WHATIF的,完全建立在bt的命令菜单上,心理承受能力不强者多半吐血而终。

使用“pdb2gmx -h”可以得到pdb2gmx的所有参数及简单说明(gromacs的任何命令都可以使用-h参数得到类似帮助)。pdb2gmx的参数很多,但是常用的只有以下几个:

-f    指定你的坐标文件,可以是pdb、gro、tpr等等包含有分子坐标的文件;
-o    输出文件,也就是处理过的分子坐标文件,同样可以是pdb、gro、g96等文件类型;
-p    输出拓扑文件。pdb2gmx读入力场文件,根据坐标文件建立分子系统的拓扑;
-water    指定使用的水模型,使用pdb2gmx的时候最好加这个参数,不然后面会吃苦头。它会提前在拓扑文件中添加水分子模型文件;
-ff    指定力场文件(下文讨论),也可以不用这个参数,再自行选择;
-ignh    舍弃分子文件中的H原子,因为H原子命名规则多,有的力场不认;
-his    独个指定HIS残基的质子化位置。

其他的参数还不少,可以好好看一个pdb2gmx的帮助文件,一般的pdb2gmx的执行格式如下(假设你的分子坐标文件为sen.pdb):

pdb2gmx -f sen.pdb -o sen.gro -p sen.top -water tip4p -ignh -his

该命令读入分子文件,使用tipp水模型,等等,然后pdb2gmx会让你选择力场文件。然后它就很聪明的帮你建立初始模拟系统啦。

gromacs自带的力场有很多:

0: GROMOS96 43a1 force field
1: GROMOS96 43b1 vacuum force field
2: GROMOS96 43a2 force field (improved alkane dihedrals)
3: GROMOS96 45a3 force field (Schuler JCC 2001 22 1205)
4: GROMOS96 53a5 force field (JCC 2004 vol 25 pag 1656)
5: GROMOS96 53a6 force field (JCC 2004 vol 25 pag 1656)
6: OPLS-AA/L all-atom force field (2001 aminoacid dihedrals)
7: [DEPRECATED] Gromacs force field (see manual)
8: [DEPRECATED] Gromacs force field with hydrogens for NMR
9: Encad all-atom force field, using scaled-down vacuum charges
10: Encad all-atom force field, using full solvent charges

本人建议使用OPLS力场和tip4p水模型。tip4p水有四个粒子,分别是两个氢原子,一个氧原子和一个没有质量的电粒子。这个电粒子在其他三个原子中间靠近氧原子。tip4p水模型多了一个粒子,模拟代价高一点,但是结果要好一点。但是最近有报道说使用spce水模型和GROMOS力场的计算结果最好,嘿嘿,好一个百家争鸣的学术氛围啊,我真的号感动哦。Gromacs也可以使用其他力场,如AMBER力场等,使用方法请参考google。

pdb2gmx的输出基本可以做真空中模拟了,现在对MD模拟的要求高,一般都要有点水。为分子系统添加水环境和离子环境需要其他命令,要慢慢来。

Gromacs的editconf命令在使用pdb2gmx创建模拟分子系统之后,可以使用editconf为你的分子画一个盒子。也可以认为使用editconf把分子放进一个盒子中,这样,你就可以往盒子里面添加水分子,离子,或者其他溶剂等等了。 使用“ eidtconf -h ”可以看到editconf的参数,其中比较常用的有以下几个:

-f    指定你的坐标文件。
-n    分子系统的索引文件。索引文件是gromacs一个十分突出的功能,刚接触有点复杂,但是功能相当强大。
-o    输出文件,即放进盒子里面的分子系统。
-bt    盒子类型,有正方型,长方形,八面型等等,看个人需要跟癖好啦。
-box    自定义盒子大小,需要三个长度,即X、Y、Z三个方向的长度。
-d    分子离盒子表面的最短距离。这个跟-bt一起使用,基本就足够了;如果蛋白在模拟过程尺寸变化很大,那就用-box吧。
-center    确定哪一部分分子放在盒子中心,如果和索引文件一起使用,可以非常详细的定义分子的位置。
-translate    平移分子,跟X、Y、Z三个方向,随便移动。可以参考我前面一篇关于加大盒子的e文文章,练习e文,不好意思。
-rotate    转动分子,还是三个方向。我觉得editconf开发者太有才,什么都想到了,我想要什么,他就有什么,以后遇到他,我会让他给我签名。
-princ    这个参数可以用来对齐分子,比如使分子沿X轴对齐。举一个例子吧,比如你想将分子中两个残基沿Y轴对齐,那么就在索引文件中将这俩个残基标记以下,然后使用-princ,根据提示走就能对齐分子啦。

由于gromacs的很多命令都可以接受不同的文件类型,editconf也有其他功能,如和trjconv一样进行gro和pdb的转化:

editconf -f sen.pdb -o sen.gro

或者

editconf -f sen.gro -o sen.pdb

使用tpbconv重启gromacs模拟在使用gromacs的mdrun进行模拟计算过程中,很多因素可以是模拟计算终止。比如突然断电,断网或者磁盘空间满,或者windows死机(^_^)等等。重启gromacs模拟计算是一件十分方便的事情,因为gromacs众多的程序里面就有一个专门(或者吧)用来修改tpr文件的,就是tpbconv。

gromacs把模拟需要的所以文件都打包成一个tpr二进制文件,里面包含了分子坐标,各个原子在给定温度下速度和能量的分布。当模拟突然终止时,只要将终止时候系统的状态,即各个原子的位置、速度、坐标等装入tpr文件即可。tpbconv的参数也不少,可以使用”tpbconv -h “查看,但是制作一个重启tpr文件的参数和格式一般如下:

tpbconv -s topol.tpr -f traj.trr -e ener.edr -o newtopol.tpr

其中topol.tpr为原来的tpr文件,traj.trr为双精度坐标文件(不要用xtc文件,因为精度不够),ener.edr为系统能量输出文件,newtopol.tpr是重启模拟文件。以上的命令得到的是在计算突然终止前一个系统构象的信息。也可以在命令中加上一个”-time “参数来指定从那一个时间重新开始,如一下指定从一纳秒处重新开始模拟:

tpbconv -s topol.tpr -f traj.trr -e ener.edr -time 1000 -o newtopol.tpr

同时,如果模拟正常结束,而模拟时间让人觉得不够长时,可以使用tpbconv写一个延长模拟的tpr文件,一般格式如下:

tpbconv -s topol.tpr -f traj.trr -e ener.edr -extend 1000 -o newtopol.tpr

其中”-extend 1000”表示延长1000ps的模拟时间。呵呵,非常好用。 这样断了又开始,就会产生很多轨迹文件,分析的时候非常不方便,gromacs有其他常用的命令把坐标文件,能量文件连接成一个文件,其中比较常用的如trjcat和eneconv,格式分别如下:

trjcat -f traj1.trr traj2.trr.... -o traj_all.trr
eneconv -f ener1.edr ener2.edr... -o ener_all.edr

即使用”-f “读入所有轨迹或者能量文件,使用”-o “输出完整的轨迹和能量文件。

最后说说一个tpbconv的弱点。tpbconv不能更改你原来tpr文件中并行计算的节点数,比如你原来的tpr文件是8个节点的,那么使用tpbconv得到的重启tpr文件也是8个节点的。如果想更改使用节点数,那只能用grompp重新做一个了。但是使用grompp做重启模拟文件时,就算你指定了原来的轨迹文件和能量文件,它还是会根据麦克斯韦分布重新给各个原子指定速度,真气人。

嗯,如果你觉得这是一个大问题,那就伸长脖子等gromcas新版

使用genbox命令为Gromacs模拟分子添加水环境使用editconf把分子放进一个盒子之后,接下来要做的就是往盒子里面添加水分子。Gromacs中添加水环境的命令是genbox,这是一个较其他命令简单一点的命令,因为参数不多。

通常用到的genbox参数有一下几个:

-cp :带盒子参数的分子坐标文件,也就是editconf的输出文件;
-cs :添加的水分子模型,如spc216、spce、tip3p、tip4p等,关于各个模型的区别,请参考scholar google;
-o :输出坐标文件,就是添加水分子之后的分子坐标文件,默认是.gro文件,但是也可以输出其他文件格式,如pdb;
-p :系统拓扑文件,genbox会往里面写入添加水分子的个数,这个不要忘记,不然在进行下一步计算时,会出现坐标文件和拓扑文件原子数不一致的错误;
-ci :索引文件,genbox可以为分子特定部位添加水环境,这样可以减少原子数,只有研究的分子部位添加水环境,节省计算时间。
-seed :随机种子数,添加水分子时,各个水分子的位置是随机的,可以改变这个随机数子使水分子重新分布。添加水分子后可以用VMD等软件看看结果,一般完成这个之后事情开始变得复杂。比如某一个水分子出现在蛋白结构中,而这个位置本来就是不希望水分子一开始就存在,那么可以找出这个水分的残基标号,进行删除,同时删除拓扑文件中水分子的数目等。

使用grompp提取上一次模拟最后速度和能量在上面提到的使用gromacs程序包中tpbconv命令制作新的tpr文件中,最后提到新制作的.tpr文件只能使用跟原来.tpr文件一样多的CPU数目。还抱怨说这是tpbconv一个不足的地方。使用grompp可以制作一个新的.tpr文件,从上一步模拟的轨迹文件中提取速度,并从上一步能量文件中提取能量,也可以无缝的链接重启模拟计算。 要做到从上一步的最后的一个系统状态开始新的模拟计算。首先要在.mdp文件中把“ gen_vel ”参数定义为” no “,这样做是为了告诉grompp不要重新为系统中的原子指定随机速度。指定新模拟开始的时间,即修改” tinit “参数。然后可以使用一下命令制作一个从上一步模拟文件中提取速度和能量的.tpr文件:

grompp -f [.mdp文件] -c [上一步模拟最后的系统坐标文件] -p [拓扑文件] -t [上一步的trr轨迹文件] -e [上一步能量文件] -time [坐标文件对应的模拟时间] -o [输出tpr文件] -np [CPU数目]

提取上一步模拟系统的速度时使用trr文件,是因为xtc为单精度,没有trr文件精确。” -time “参数告诉grompp在上一步模拟文件中提取该时间的能量和速度,所以该时间要和系统的坐标文件相一致。 看起来好像要比tpbconv命令复杂一点,但是可以改变CPU数目,还算十分灵活。Gromacs是灵活的人的MD工具

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学