本文的背景是粒子辐照对生物体内DNA破坏的研究,以原子核、原子层面上的粒子相互作用为物理基础,采用西欧核子中心(CERN)开发的基于蒙特卡洛方法的粒子输运软件Geant4,进行模拟研究。Geant4开发组为DNA和蛋白质的辐照损伤研究专门成立了一个称为DNA Project的项目组(http://geant4-dna.in2p3.fr/index.html ),在基本的水辐解过程(water radiolysis)、DNA几何建模、蛋白质几何建模、数据基本处理等方向进行了大量尝试,并公布了一批程序作为示例,包括水辐解物理过程展示、DNA几何结构搭建、蛋白质几何结构搭建。 本文围绕DNA几何结构搭建程序展开,使用其几何构建的数据在blender中重新搭建DNA。该程序的几何结构中,最基本的单位是磷酸糖和碱基,首先构建核小体,再利用核小体构建更加复杂的结构,如30nm纤丝、染色质丝等。在blender中仅重新构建核小体。 首先在Geant4中将DNA双链的每一条链上的所有磷酸糖和碱基的坐标都输出并保存为文本,再用python编写读取文本的代码,并在blender中针对每一个磷酸糖和碱基按照Geant4输出的坐标进行摆放。最终结果见下图。
附录-Python脚本文件
import bpy from bpy import context
#------------------------------------------------ def creatSphere(name = 'nothing', x = 0, y = 0, z = 0): """creating a new sphere representing a sugarphosphate or base""" dimensions = (1,1,1)
bpy.ops.mesh.primitive_uv_sphere_add() ob = bpy.context.active_object ob.location = (x,y,z)
if(name == 'sugar'): dimensions = (0.96, 0.96, 0.96)
#bpy.ops.mesh.primitive_uv_sphere_add() #ob = bpy.context.active_object #ob.location = (x,y,z) ob.dimensions = dimensions
if(name == 'base'): dimensions = (0.34, 0.34, 0.34) ob.dimensions = dimensions
#------------------------------------------------ # main if __name__ == "__main__": print("DNA Project") print("Nancy, Pascal")
# reading data file datafile = open("/Users/pascal/research-2016-harbin/dna/blender/dnaData.dat") list_all_lines = datafile.readlines()
for line in list_all_lines: print(line) values = line.split('|') print("{} {} {} {}".format(values[0], values[1], values[2], values[3])) creatSphere(name = values[0], x = float(values[1]), y = float(values[2]), z = float(values[3]))
#bpy.ops.mesh.primitive_uv_sphere_add() #ob = bpy.context.active_object #ob.location = (3,3,5)
datafile.close()
|