BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1505|回复: 0

在blender中制作DNA分子模型(核小体)

[复制链接]
发表于 2016-5-26 21:35:56 | 显示全部楼层 |阅读模式
  本文的背景是粒子辐照对生物体内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输出的坐标进行摆放。最终结果见下图。

blender截屏.jpg
附录-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()



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-6-21 04:10 , Processed in 0.016575 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表