C#,生信软件实践(01)——DNA序列数据库FASTA文件合并工具的源代码

news2024/11/23 11:40:59

1 生物信息学简介

生物信息学(BioInformatics)是研究生物信息的采集、处理、存储、传播,分析和解释等各方面的学科,也是随着生命科学和计算机科学的迅猛发展,生命科学和计算机科学相结合形成的一门新学科。它通过综合利用生物学,计算机科学和信息技术而揭示大量而复杂的生物数据所赋有的生物学奥秘。

生物信息学是建立在分子生物学的基础上的,因此,要了解生物信息学,就必须先对分子生物学的发展有一个简单的了解。研究生物细胞的生物大分子的结构与功能很早就已经开始,1866年孟德尔从实验上提出了假设:遗传因子是以生物成分存在,1871年Miescher从死的白细胞核中分离出脱氧核糖核酸(DNA),在Avery和McCarty于1944年证明了DNA是生命器官的遗传物质以前,人们仍然认为染色体蛋白质携带基因,而DNA是一个次要的角色。1944年Chargaff发现了著名的Chargaff规律,即DNA中鸟嘌呤的量与胞嘧定的量总是相等,腺嘌呤与胸腺嘧啶的量相等。与此同时,Wilkins与Franklin用X射线衍射技术测定了DNA纤维的结构。1953年James Watson和Francis Crick在Nature杂志上推测出DNA的三维结构(双螺旋)。DNA以磷酸糖链形成发双股螺旋,脱氧核糖上的碱基按Chargaff规律构成双股磷酸糖链之间的碱基对。这个模型表明DNA具有自身互补的结构,根据碱基对原则,DNA中贮存的遗传信息可以精确地进行复制。他们的理论奠定了分子生物学的基础。DNA双螺旋模型已经预示出了DNA复制的规则,Kornberg于1956年从大肠杆菌(E.coli)中分离出DNA聚合酶I(DNA polymerase I),能使4种dNTP连接成DNA。DNA的复制需要一个DNA作为模板。Meselson与Stahl(1958)用实验方法证明了DNA复制是一种半保留复制。Crick于1954年提出了遗传信息传递的规律,DNA是合成RNA的模板,RNA又是合成蛋白质的模板,称之为中心法则(Central dogma),这一中心法则对以后分子生物学和生物信息学的发展都起到了极其重要的指导作用。经过Nirenberg和Matthai(1963)的努力研究,编码20氨基酸的遗传密码得到了破译。限制性内切酶的发现和重组DNA的克隆(clone)奠定了基因工程的技术基础。正是由于分子生物学的研究对生命科学的发展有巨大的推动作用,生物信息学的出现也就成了一种必然。2001年2月,人类基因组工程测序的完成,使生物信息学走向了一个高潮。由于DNA自动测序技术的快速发展,DNA数据库中的核酸序列公共数据量以每天106bp速度增长,生物信息迅速地膨胀成数据的海洋。毫无疑问,我们正从一个积累数据向解释数据的时代转变,数据量的巨大积累往往蕴含着潜在突破性发现的可能,“生物信息学”正是从这一前提产生的交叉学科。粗略地说,该领域的核心内容是研究如何通过对DNA序列的统计计算分析,更加深入地理解DNA序列,结构,演化及其与生物功能之间的关系,其研究课题涉及到分子生物学,分子演化及结构生物学,统计学及计算机科学等许多领域。生物信息学是内涵非常丰富的学科,其核心是基因组信息学,包括基因组信息的获取,处理,存储,分配和解释。基因组信息学的关键是“读懂”基因组的核苷酸顺序,即全部基因在染色体上的确切位置以及各DNA片段的功能;同时在发现了新基因信息之后进行蛋白质空间结构模拟和预测,然后依据特定蛋白质的功能进行药物设计。了解基因表达的调控机理也是生物信息学的重要内容,根据生物分子在基因调控中的作用,描述人类疾病的诊断,治疗内在规律。它的研究目标是揭示“基因组信息结构的复杂性及遗传语言的根本规律”,解释生命的遗传语言。生物信息学已成为整个生命科学发展的重要组成部分,成为生命科学研究的前沿。

2 生物信息学研究方向

生物信息学在短短十几年间,已经形成了多个研究方向,以下简要介绍一些主要的研究重点。

2.1 序列比对

序列比对(Sequence Alignment)的基本问题是比较两个或两个以上符号序列的相似性或不相似性。从生物学的初衷来看,这一问题包含了以下几个意义:从相互重叠的序列片断中重构DNA的完整序列。在各种试验条件下从探测数据(probe data)中决定物理和基因图存贮,遍历和比较数据库中的DNA序列,比较两个或多个序列的相似性,在数据库中搜索相关序列和子序列,寻找核苷酸(nucleotides)的连续产生模式,找出蛋白质和DNA序列中的信息成分。序列比对考虑了DNA序列的生物学特性,如序列局部发生的插入,删除(前两种简称为indel)和替代,序列的目标函数获得序列之间突变集最小距离加权和或最大相似性和,对齐的方法包括全局对齐,局部对齐,代沟惩罚等。两个序列比对常采用动态规划算法,这种算法在序列长度较小时适用,然而对于海量基因序列(如人的DNA序列高达10^9bp),这一方法就不太适用,甚至采用算法复杂性为线性的也难以奏效。因此,启发式方法的引入势在必然,著名的BLAST和FASTA算法及相应的改进方法均是从此前提出发的。

2.2 蛋白质比对

基本问题是比较两个或两个以上蛋白质分子空间结构的相似性或不相似性。蛋白质的结构与功能是密切相关的,一般认为,具有相似功能的蛋白质结构一般相似。蛋白质是由氨基酸组成的长链,长度从50到1000~3000AA(Amino Acids),蛋白质具有多种功能,如酶,物质的存贮和运输,信号传递,抗体等等。氨基酸的序列内在的决定了蛋白质的3维结构。一般认为,蛋白质有四级不同的结构。研究蛋白质结构和预测的理由是:医药上可以理解生物的功能,寻找dockingdrugs的目标,农业上获得更好的农作物的基因工程,工业上有利用酶的合成。直接对蛋白质结构进行比对的原因是由于蛋白质的3维结构比其一级结构在进化中更稳定的保留,同时也包含了较AA序列更多的信息。蛋白质3维结构研究的前提假设是内在的氨基酸序列与3维结构一一对应(不一定全真),物理上可用最小能量来解释。从观察和总结已知结构的蛋白质结构规律出发来预测未知蛋白质的结构。同源建模(homology modeling)和指认(Threading)方法属于这一范畴。同源建模用于寻找具有高度相似性的蛋白质结构(超过30%氨基酸相同),后者则用于比较进化族中不同的蛋白质结构。然而,蛋白结构预测研究现状还远远不能满足实际需要。

2.3 基因识别分析

基因识别的基本问题是给定基因组序列后,正确识别基因的范围和在基因组序列中的精确位置。非编码区由内含子组成(introns),一般在形成蛋白质后被丢弃,但从实验中,如果去除非编码区,又不能完成基因的复制。显然,DNA序列作为一种遗传语言,既包含在编码区,又隐含在非编码序列中。分析非编码区DNA序列没有一般性的指导方法。在人类基因组中,并非所有的序列均被编码,即是某种蛋白质的模板,已完成编码部分仅占人类基因总序列的3~5%,显然,手工的搜索如此大的基因序列是难以想象的。侦测密码区的方法包括测量密码区密码子(codon)的频率,一阶和二阶马尔可夫链,ORF(Open Reading Frames),启动子(promoter)识别,HMM(Hidden Markov Model)和GENSCAN,Splice Alignment等等。

2.4 分子进化

分子进化是利用不同物种中同一基因序列的异同来研究生物的进化,构建进化树。既可以用DNA序列也可以用其编码的氨基酸序列来做,甚至于可通过相关蛋白质的结构比对来研究分子进化,其前提假定是相似种族在基因上具有相似性。通过比较可以在基因组层面上发现哪些是不同种族中共同的,哪些是不同的。早期研究方法常采用外在的因素,如大小,肤色,肢体的数量等等作为进化的依据。较多模式生物基因组测序任务的完成,人们可从整个基因组的角度来研究分子进化。在匹配不同种族的基因时,一般须处理三种情况:Orthologous:不同种族,相同功能的基因;Paralogous:相同种族,不同功能的基因;Xenologs:有机体间采用其他方式传递的基因,如被病毒注入的基因。这一领域常采用的方法是构造进化树,通过基于特征(即DNA序列或蛋白质中的氨基酸的碱基的特定位置)和基于距离(对齐的分数)的方法和一些传统的聚类方法(如UPGMA)来实现。

2.5 序列重叠群(Contigs)装配

根据现行的测序技术,每次反应只能测出500或更多一些碱基对的序列,如人类基因的测量就采用了短枪(shortgun)方法,这就要求把大量的较短的序列全体构成了重叠群(Contigs)。逐步把它们拼接起来形成序列更长的重叠群,直至得到完整序列的过程称为重叠群装配。从算法层次来看,序列的重叠群是一个NP-完全问题。

2.6 遗传密码

通常对遗传密码的研究认为,密码子与氨基酸之间的关系是生物进化历史上一次偶然的事件而造成的,并被固定在现代生物的共同祖先里,一直延续至今。不同于这种“冻结”理论,有人曾分别提出过选择优化,化学和历史等三种学说来解释遗传密码。随着各种生物基因组测序任务的完成,为研究遗传密码的起源和检验上述理论的真伪提供了新的素材。

2.7 药物设计

人类基因工程的目的之一是要了解人体内约10万种蛋白质的结构,功能,相互作用以及与各种人类疾病之间的关系,寻求各种治疗和预防方法,包括药物治疗。基于生物大分子结构及小分子结构的药物设计是生物信息学中的极为重要的研究领域。为了抑制某些酶或蛋白质的活性,在已知其蛋白质3级结构的基础上,可以利用分子对齐算法,在计算机上设计抑制剂分子,作为候选药物。这一领域目的是发现新的基因药物,有着巨大的经济效益。

2.8 生物系统

随着大规模实验技术的发展和数据累积,从全局和系统水平研究和分析生物学系统,揭示其发展规律已经成为后基因组时代的另外一个研究热点-系统生物学。目前来看,其研究内容包括生物系统的模拟(Curr Opin Rheumatol,2007,463-70),系统稳定性分析(Nonlinear Dynamics Psychol Life Sci,2007,413-33),系统鲁棒性分析(Ernst Schering Res Found Workshop, 2007,69-88)等方面。以SBML(Bioinformatics,2007,1297-8)为代表的建模语言在迅速发展之中,以布尔网络 (PLoS Comput Biol,2007,e163)、微分方程(Mol Biol Cell,2004,3841-62)、随机过程(Neural Comput,2007,3262-92)、离散动态事件系统等(Bioinformatics,2007,336-43)方法在系统分析中已经得到应用。很多模型的建立借鉴了电路和其它物理系统建模的方法,很多研究试图从信息流、熵和能量流等宏观分析思想来解决系统的复杂性问题(Anal Quant Cytol Histol,2007,296-308)。当然,建立生物系统的理论模型还需要很长时间的努力,实验观测数据虽然在海量增加,但是生物系统的模型辨识所需要的数据远远超过了数据的产出能力。例如,对于时间序列的芯片数据,采样点的数量还不足以使用传统的时间序列建模方法,巨大的实验代价是系统建模主要困难。系统描述和建模方法也需要开创性的发展。

2.9 技术方法

生物信息学不仅仅是生物学知识的简单整理和数学、物理学、信息科学等学科知识的简单应用。海量数据和复杂的背景导致机器学习、统计数据分析和系统描述等方法需要在生物信息学所面临的背景之中迅速发展。巨大的计算量、复杂的噪声模式、海量的时变数据给传统的统计分析带来了巨大的困难,需要像非参数统计(BMC Bioinformatics,2007,339)、聚类分析(Qual Life Res,2007,1655-63)等更加灵活的数据分析技术。高维数据的分析需要偏最小二乘(partial least squares,PLS)等特征空间的压缩技术。在计算机算法的开发中,需要充分考虑算法的时间和空间复杂度,使用并行计算、网格计算等技术来拓展算法的可实现性。

2.10 其他

如基因表达谱分析,代谢网络分析;基因芯片设计和蛋白质组学数据分析等,逐渐成为生物信息学中新兴的重要研究领域;在学科方面,由生物信息学衍生的学科包括结构基因组学,功能基因组学,比较基因组学,蛋白质学,药物基因组学,中药基因组学,肿瘤基因组学,分子流行病学和环境基因组学,成为系统生物学的重要研究方法。从发展不难看出,基因工程已经进入了后基因组时代。我们也有应对与生物信息学密切相关的如机器学习,和数学中可能存在的误导有一个清楚的认识。

3 序列文件(如FASTA)合并工具开发实践

文件合并,比如fasta文件的合并,经常有于进行密码子使用频率的计算。

另外,合并Dataframe在生信分析项目开发中也经常会用到,以合并多个样本的的两种.tsv文件结果为例,演示如何进行tsv文件内容的读取,并且合并为一个Dataframe,然后保存。

分别比对每个 read group 然后将得到的比对文件合并为一个等等。

3.1 文件合并工具功能需求

1、合并指定的一系列文件,成为一个大文件;

2、或 合并指定文件夹下的所有文件,成为一个大文件;这种方式更好;

3、能合并大量的文件,比如1000个 或更多;

4、能看到运行的进度,不能只看到等待鼠标状态;

5、尽可能自动化,比如自动后缀,自动合并文件名等等;

6、软件要稳定可靠;

3.2 核心代码

using System;
using System.IO;
using System.Text;
using System.Linq;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;

namespace Legal.BIOG
{
    public static partial class Tools
    {
        /// <summary>
        /// 合并文件(支持超多、超大文件)
        /// </summary>
        /// <param name="sourceFiles">要合并的文件集合</param>
        /// <param name="combinedFIle">合并后的文件名称</param>
        private static void CombineFiles(string[] sourceFiles, string combinedFIle)
        {
            FileStream src = new FileStream(combinedFIle, FileMode.Append);
            BinaryWriter sw = new BinaryWriter(src);
            for (int i = 0; i < sourceFiles.Length; i++)
            {
                FileStream dst = new FileStream(sourceFiles[i].ToString(), FileMode.Open);
                BinaryReader dr = new BinaryReader(dst);
                sw.Write(dr.ReadBytes((int)dst.Length));
                dr.Close();
                dst.Close();
            }
            sw.Close();
            src.Close();
        }
    }
}

3.3 运行效果

文件合并工具是北京联高软件开发有限公司出品的生信初级软件 BIOG 的功能之一。

BIOG 基本功能:

文件合并实例:

(上面图片为模拟数据,慢速运行,实际速度快很多) 

3.4 桌面软件与在线软件的一些区别

不少 生信软件(工具型,规模小的)以在线模式提供,其优点是:
(1)无需安装,直接使用;
(2)永远是最新版本;
(3)问题与反馈及时;

但也存在明显的缺陷
(1)无法处理大量的或大的数据;
(2)处理进程无法获得及时响应,往往不知道处理到哪个进度了;
(3)有很多不便利之处;

手边有一个桌面型生信软件作为辅助工具,不失为一个选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/490453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb ( 四 ) JavaEE

2.JavaEE 2.1.Java版本 J2SE : 适用于桌面系统的Java 2平台标准版&#xff08;Java 2 Platform Standard Edition&#xff0c;J2SE&#xff09; J2EE : 适用于创建服务器应用程序和服务的Java 2平台企业版&#xff08;Java 2 Platform Enterprise Edition&#xff0c;J2EE&a…

学企业管理

工业社会的代表产品是交通运输设备&#xff0c;如火车/高铁、汽车、飞机/火箭、船舶/航母&#xff0c;其核心是发动机。信息社会的代表产品是计算设备&#xff0c;如大型机小型机、工作站/PC台式机电脑/PC笔记本电脑/PC平板电脑、智能手机。 汽车这个产品&#xff0c;既属于高精…

调试别人的API,一般有哪些步骤?

当我们使用了一些由别人实现的API接口时&#xff0c;该如何进行调试呢&#xff1f;当我们使用的API返回一些意想不到错误时&#xff0c;该怎么办呢?这个问题可能是由于用户输入或者API本身&#xff0c;或者其他完全无关的内容等引起的。调试是我们进行定位并修复由单个API调用…

漫天花雨HTML特效+3D相册

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

软件工程期末复习(背题家速成)

文章目录 前言一、选择题1、第一章 软件工程综述2、第二章 软件过程3、第三章 可行性研究4、第四章 结构化需求分析5、第五章 结构化软件设计6、第六章 面向对象的需求分析7、第七章 第7章面向对象设计8、第八章 基于构件的开发9、第九章 软件项目的测试10、第十章 软件实施、维…

每天一道算法练习题--Day2 第一章 --算法专题 --- ----------位运算

我这里总结了几道位运算的题目分享给大家&#xff0c;分别是 136 和 137&#xff0c; 260 和 645&#xff0c; 总共加起来四道题。 四道题全部都是位运算的套路&#xff0c;如果你想练习位运算的话&#xff0c;不要错过哦&#xff5e;&#xff5e; 前菜 开始之前我们先了解下…

Umi 插件实战教程

引言 笔者最近开发了一款 umi 插件&#xff1a;plugin-umi-cmdk[1],该插件的功能主要是&#xff1a;在 umi 项目里可以方便的集成 cmd k &#xff0c;实现菜单等搜索。 主体功能并不复杂&#xff0c;但是在集成作为 umi 插件过程中踩了不少坑&#xff0c;主要是 umi 官方文档的…

【计算机网络】面试高频问题汇总及详细解答

【C语言部分】面试高频问题汇总及详细解答 【操作系统(Linux)】面试高频问题汇总及详细解答 【数据库】面试高频问题汇总及详细解答 本文目录 1. 简述网络七层参考模型及每一层的作用2. 简述静态路由和动态路由3. 说说有哪些路由协议&#xff0c;都是如何更新的4. 简述域名解析…

PostgreSQL Explain 复杂执行计划怎么看 --- 逐个分解PG执行计划的那些操作

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Codeforces-Round-805-Div-3-E-Split-Into-Two-Sets

title: Codeforces Round 805 (Div. 3) E. Split Into Two Sets date: 2023-04-25 18:14:41 categories: AlgorithmCodeforces tags:codeforces并查集1600 E. Split Into Two Sets 题目大意 给你n组数&#xff0c;每组里面有两个数字&#xff0c;问你能不能把这n组数分为两组…

【数据架构系列-06】一文搞懂数据模型的3种类型——概念模型、逻辑模型、物理模型

数据模型就是模拟现实世界的方法论&#xff0c;是通向智慧世界的基石&#xff01; 从现实世界发展到智慧世界&#xff0c;要数经历现实世界、信息世界、计算机世界、数据世界、智慧世界五个不同的世界&#xff0c;我们天生具有从混沌的世界抽象信息变为信息世界的能力&#xff…

基于jenkinsfile布置java工程

需求 通过jenkins发布java项目到服务器 预备环境 项目地址&#xff1a; https://gitee.com/asaland/sb-docker-appJenkins 2.387.3 通过Jenkinsfile实现方式 jenkins ui 配置pipeline 什么是pipeline? 直接看注释吧&#xff0c;简单点就是编排可以多个跨时间的构建代理…

JavaScript全解析——canvas 绘制变换和渐变

绘制变换 ●在 cancas 内, 也可以向 css 中一样, 出现一些 2d 变换的效果 ●先来绘制一个基本矩形 // 0. 获取到页面上的 canvas 标签元素节点 const canvasEle document.querySelector(#canvas)// 1. 获取当前这个画布的工具箱 const ctx canvasEle.getContext(2d)// 2. 绘…

ip数据报计算首部检验和

当我们在使用互联网进行数据传输时&#xff0c;数据可能会被篡改或者损坏。为了保证数据传输的可靠性和完整性&#xff0c;计算IP数据包首部检验和是一种非常重要的校验机制。本文将会介绍计算IP数据包首部检验和的方法。 IP数据包首部 首先&#xff0c;我们需要了解IP数据包…

5 系统数据文件和信息

5.1 口令文件 口令文件包含了下表中所示的各字段&#xff0c;这些字段包含在<pwd.h>中定义的passwd结构中。 /etc/passwd文件中的字段 说 明struct passwd 成员用户名char *pw_name加密口令char *pw_passwd数值用户IDuid_t pw_uid数值组IDgid_t pw_gid注释字段char *pw_g…

Unity实现GPU Cull渲染

前言 开放世界游戏中植被和物件的数量往往是巨大, 而传统组织大量植被渲染的方式是利用QuadTree/Octree/Kd-Tree等数据结构对植被Intance数据进行预先生成一个个Cluster&#xff0c;然后在运行时进行FrustumCull,收集可视的所有Cluster&#xff0c;最后进行DrawInstance. 这…

Yolov1 源码讲解 loss.py

结构 1.lt rb我觉得不是很合适 正确来说是lb rt 因为比较出来的都是左下和右上坐标 比如前两个&#xff0c;都是max出来的 选两个box左下坐标中最大的&#xff0c; 后两个则是右上坐标中最小的 那也就形成了交集面积 但是代码中仍然是lt rb我也就直接这样说 而算出lt和r…

zynq基于XDMA实现PCIE X8视频采集HDMI输出 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、基于zynq架构的PCIE4、总体设计思路和方案视频输入通路PCIE数据缓存通路视频输出通路 5、vivado工程详解6、SDK 工程详解7、驱动安装8、QT上位机软件9、上板调试验证10、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Expre…

二叉树的实现

二叉树 文章目录 二叉树背景二叉树的概念遍历方式代码实现 背景 数组存储方式的分析 优点&#xff1a;通过下标方式访问元素&#xff0c;速度快。对于有序数组&#xff0c;还可使用二分查找提高检索速度。 缺点&#xff1a;如果要检索具体某个值&#xff0c;或者插入值(按一…

linux中使用docker部署微服务

目录 一、制作jar包&#xff08;如果看一眼很简单&#xff0c;可以直接使用结尾的jar&#xff09; 1.首先创建一个微服务 demo2 2.启动微服务&#xff08;在DemoApplication上右键执行启动就行&#xff09; 注意&#xff1a;其他操作导致的 可能遇到的报错 3.修改端口 4.新…