C#,生信软件实践(06)——DNA数据库GenBank文件的详解介绍及解释器之完整C#源代码

news2024/11/25 7:20:38

1 GenBank 

1.1 NCBI——美国国家生物技术信息中心(美国国立生物技术信息中心)


        NCBI(美国国立生物技术信息中心)是在NIH的国立医学图书馆(NLM)的一个分支。它的使命包括四项任务:1. 建立关于分子生物学,生物化学,和遗传学知识的存储和分析的自动系统 ;2.实行关于用于分析生物学重要分子和复合物的结构和功能的基于计算机的信息处理的,先进方法的研究;3. 加速生物技术研究者和医药治疗人员对数据库和软件的使用;4. 全世界范围内的生物技术信息收集的合作努力。NCBI数据库由Nucleotide(核苷酸序列数据库)、 Genome(基因组数据库)、Structure(结构数据库或称分子模型数据库)、Taxonomy(生物学门类数据库)、 PopSet几个子库组成。

        美国国立生物技术信息中心(National Center for Biotechnology Information),是由美国国立卫生研究院(NIH)于1988年创办。创办NCBI的初衷是为了给分子生物学家提供一个信息储存和处理的系统。除了建有GenBank核酸序列数据库(该数据库的数据资源来自全球几大DNA数据库,其中包括日本DNA数据库DDBJ、欧洲分子生物学实验室数据库EMBL以及其它几个知名科研机构)之外,NCBI还可以提供众多功能强大的数据检索与分析工具。目前,NCBI提供的资源有Entrez、Entrez Programming Utilities、My NCBI、PubMed、PubMed Central、Entrez Gene、NCBI Taxonomy Browser、BLAST、BLAST Link (BLink)、Electronic PCR等共计36种功能,而且都可以在NCBI的主页www.ncbi.nlm.nih.gov上找到相应链接,其中多半是由BLAST功能发展而来的。

1.2 GenBank DNA数据库


        GenBank是美国国家生物技术信息中心(National Center for Biotechnology Information ,NCBI)建立的DNA序列数据库,从公共资源中获取序列数据,主要是科研人员直接提供或来源于大规模基因组测序计划( Benson等, 1998)。为保证数据尽可能的完全,GenBank与EMBL(欧洲EMBL-DNA数据库)、DDBJ(日本DNA数据库:DNA Data Bank of Japan)建立了相互交换数据的合作关系。


        GenBank文件就是NCBI支持的主要生信格式。读懂 GenBank 后 EMBL 就很简单了。

        GenBank格式是最早和最古老的生物信息学数据格式之一,最初的发明是为了弥补人类可读的表达方式和可被计算机有效处理的表达方式之间的差距,为人类阅读而优化的,不适合大规模的数据处理。该格式有一个所谓的固定宽度格式,前十个字符组成一列,作为一个标识符,其余的行是与该标识符相对应的信息。

2 GenBank Overview

What is GenBank?
GenBank ® is the NIH genetic sequence database, an annotated collection of all publicly available DNA sequences (Nucleic Acids Research, 2013 Jan;41(D1):D36-42). GenBank is part of the International Nucleotide Sequence Database Collaboration, which comprises the DNA DataBank of Japan (DDBJ), the European Nucleotide Archive (ENA), and GenBank at NCBI. These three organizations exchange data on a daily basis.

A GenBank release occurs every two months and is available from the ftp site. The release notes for the current version of GenBank provide detailed information about the release and notifications of upcoming changes to GenBank. Release notes for previous GenBank releases are also available. GenBank growth statistics for both the traditional GenBank divisions and the WGS division are available from each release.

An annotated sample GenBank record for a Saccharomyces cerevisiae gene demonstrates many of the features of the GenBank flat file format.

Access to GenBank
There are several ways to search and retrieve data from GenBank.

Search GenBank for sequence identifiers and annotations with Entrez Nucleotide.
Search and align GenBank sequences to a query sequence using BLAST (Basic Local Alignment Search Tool). See BLAST info for more information about the numerous BLAST databases.
Search, link, and download sequences programatically using NCBI e-utilities.
The ASN.1 and flatfile formats are available at NCBI's anonymous FTP server: ftp://ftp.ncbi.nlm.nih.gov/ncbi-asn1 and ftp://ftp.ncbi.nlm.nih.gov/genbank.

GenBank Data Usage
The GenBank database is designed to provide and encourage access within the scientific community to the most up-to-date and comprehensive DNA sequence information. Therefore, NCBI places no restrictions on the use or distribution of the GenBank data. However, some submitters may claim patent, copyright, or other intellectual property rights in all or a portion of the data they have submitted. NCBI is not in a position to assess the validity of such claims, and therefore cannot provide comment or unrestricted permission concerning the use, copying, or distribution of the information contained in GenBank.

Data Processing, Status and Release
The most important source of new data for GenBank is direct submissions from a variety of individuals, including researchers, using one of our submission tools. Following submission, data are subject to automated and manual processing to ensure data integrity and quality and are subsequently made available to the public. On rare occasions, data may be removed from public view. More details about this process can be found on the NLM GenBank and SRA Data Processing.

Confidentiality
Some authors are concerned that the appearance of their data in GenBank prior to publication will compromise their work. GenBank will, upon request, withhold release of new submissions for a specified period of time. However, if the accession number or sequence data appears in print or online prior to the specified date, your sequence will be released. In order to prevent the delay in the appearance of published sequence data, we urge authors to inform us of the appearance of the published data. As soon as it is available, please send the full publication data--all authors, title, journal, volume, pages and date--to the following address: update@ncbi.nlm.nih.gov

Privacy
If you are submitting human sequences to GenBank, do not include any data that could reveal the personal identity of the source. GenBank assumes that the submitter has received any necessary informed consent authorizations required prior to submitting sequences.

3 GenBank Parser解释器C#源代码

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

namespace Legal.BIOG
{
    [DataContract]
    public class GENBANK_ELEMENT
    {
        [DataMember(Order = 1)]
        public string Name { get; set; } = "";
        [DataMember(Order = 2)]
        public string Content { get; set; } = "";

        public GENBANK_ELEMENT(int position, string buf)
        {
            Name = buf.Substring(0, position).Trim();
            Content = buf.Substring(position).Trim();
        }

        public GENBANK_ELEMENT(string name, string content)
        {
            Name = name;
            Content = content;
        }
    }

    [DataContract]
    public class GENBANK_REFERENCE
    {
        [DataMember(Order = 1)]
        public string Name { get; set; } = "";
        [DataMember(Order = 2)]
        public List<GENBANK_ELEMENT> Items { get; set; } = new List<GENBANK_ELEMENT>();

        public void Append(int position, string buf)
        {
            Items.Add(new GENBANK_ELEMENT(position, buf));
        }

        public void Append(string name, string content)
        {
            Items.Add(new GENBANK_ELEMENT(name, content));
        }

        public GENBANK_ELEMENT Find(string name)
        {
            return Items.Find(t => t.Name == name);
        }
    }

    [DataContract]
    public class GENBANK_FEATURE
    {
        [DataMember(Order = 1)]
        public string Name { get; set; } = "";
        [DataMember(Order = 2)]
        public string Lines { get; set; } = "";

        public GENBANK_FEATURE(string name, string lines)
        {
            Name = name;
            Lines = lines;
        }

        public List<string> FeatureList
        {
            get
            {
                string[] ra = B.S2L(Lines);
                return ra.ToList();
            }
        }

        /// <summary>
        /// 搜索 FEATURE 项目
        /// 比如:/db_xref=
        /// </summary>
        /// <param name="name">db_xref</param>
        /// <param name="branch">db_xref</param>
        /// <returns></returns>
        public string FindBranch(string name, string branch)
        {
            List<string> list = FeatureList;
            if (Name == name)
            {
                foreach (string s in list)
                {
                    if (s.StartsWith("/" + branch + "="))
                    {
                        return s.Substring(branch.Length + 2);
                    }
                }
            }
            return "";
        }

        public string Position
        {
            get
            {
                List<string> list = FeatureList;
                return (list[0].Contains("..")) ? list[0] : "";
            }
        }

        public List<Point> PositionList
        {
            get
            {
                return Utility.PositionList(Position);
            }
        }
    }

    [DataContract]
    public class GENBANK_Item
    {
        [DataMember(Order = 1)]
        public List<GENBANK_ELEMENT> Descriptions { get; set; } = new List<GENBANK_ELEMENT>();
        [DataMember(Order = 2)]
        public List<GENBANK_REFERENCE> References { get; set; } = new List<GENBANK_REFERENCE>();
        [DataMember(Order = 3)]
        public List<GENBANK_REFERENCE> Source { get; set; } = new List<GENBANK_REFERENCE>();
        [DataMember(Order = 4)]
        public List<GENBANK_FEATURE> Features { get; set; } = new List<GENBANK_FEATURE>();

        public string Find(string name)
        {
            GENBANK_ELEMENT de = Descriptions.Find(t => t.Name == name);
            return (de.Name == name) ? de.Content : "";
        }

        public string Sequence
        {
            get
            {
                GENBANK_ELEMENT sq = Descriptions.Find(t => t.Name == "ORIGIN");
                return (sq.Name == "ORIGIN") ? (sq.Content) : "";
            }
        }
    }

    public class GENBANK_File
    {
        public List<GENBANK_Item> Items { get; set; } = new List<GENBANK_Item>();

        public GENBANK_File(string buf)
        {
            try
            {
                string[] xlines = B.S2L(buf);
                GENBANK_Item item = null;
                for (int i = 0; i < xlines.Length; i++)
                {
                    if (xlines[i].StartsWith("LOCUS"))
                    {
                        if (item != null) { Items.Add(item); item = null; }
                        item = new GENBANK_Item();
                        item.Descriptions.Add(new GENBANK_ELEMENT(12, xlines[i]));
                        continue;
                    }
                    if (xlines[i].StartsWith("DEFINITION") ||
                        xlines[i].StartsWith("ACCESSION") ||
                        xlines[i].StartsWith("VERSION") ||
                        xlines[i].StartsWith("KEYWORDS") ||
                        xlines[i].StartsWith("COMMENT"))
                    {
                        string rs = Utility.ReadMultiLines(ref i, xlines, out string kw, 12, " ");
                        item.Descriptions.Add(new GENBANK_ELEMENT(kw, rs));
                        continue;
                    }
                    else if (xlines[i].StartsWith("SOURCE"))
                    {
                        GENBANK_REFERENCE src = new GENBANK_REFERENCE();
                        src.Name = xlines[i].Substring(12).Trim(); i++;
                        while (true)
                        {
                            string rs = Utility.ReadMultiLines(ref i, xlines, out string kw, 12);
                            src.Append(kw, rs);
                            if (xlines[i + 1].Substring(0, 1) != " ") { break; }
                            i++;
                        }
                        item.Source.Add(src);
                        continue;
                    }
                    else if (xlines[i].StartsWith("REFERENCE"))
                    {
                        GENBANK_REFERENCE rfx = new GENBANK_REFERENCE();
                        rfx.Name = xlines[i].Substring(12).Trim(); i++;
                        while (true)
                        {
                            string rs = Utility.ReadMultiLines(ref i, xlines, out string kw, 12);
                            rfx.Append(kw, rs);
                            if (xlines[i + 1].Substring(0, 1) != " ") { break; }
                            i++;
                        }
                        item.References.Add(rfx);
                        continue;
                    }
                    else if (xlines[i].StartsWith("FEATURES"))
                    {
                        item.Descriptions.Add(new GENBANK_ELEMENT("FEATURES", xlines[i].Substring(12).Trim())); i++;
                        while (true)
                        {
                            string rs = Utility.ReadFeatureLines(ref i, xlines, out string kw, 0, 21);
                            GENBANK_FEATURE ef = new GENBANK_FEATURE(kw, rs);
                            item.Features.Add(ef);
                            if (xlines[i + 1].Substring(0, 1) != " ") { break; }
                            i++;
                        }
                        continue;
                    }
                    else if (xlines[i].StartsWith("//"))
                    {
                        if (item != null) { Items.Add(item); item = null; }
                        continue;
                    }
                    else if (xlines[i].StartsWith("ORIGIN"))
                    {
                        i++;
                        string rs = Utility.ReadSequenceLines(ref i, xlines, 10);
                        item.Descriptions.Add(new GENBANK_ELEMENT("ORIGIN", rs));
                        continue;
                    }
                    else
                    {
                        item.Descriptions.Add(new GENBANK_ELEMENT("UNKNOW", xlines[i]));
                        continue;
                    }
                }
                if (item != null)
                {
                    Items.Add(item);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("GENBANK_File() ERROR: " + ex.Message);
            }
        }

        public static GENBANK_File FromFile(string filename)
        {
            try
            {
                string buf = File.ReadAllText(filename);
                return new GENBANK_File(buf);
            }
            catch (Exception ex)
            {
                throw new Exception("GENBANK_File() ERROR: " + ex.Message);
            }
        }

        public void Write_Json(string filename)
        {
            try
            {
                File.WriteAllText(filename, SimpleJson.SerializeObject(Items));
            }
            catch (Exception ex)
            {
                throw new Exception("GENBANK_File.Write_Json ERROR: " + ex.Message);
            }
        }

        public string Fasta_Sequences()
        {
            StringBuilder sb = new StringBuilder();
            foreach (GENBANK_Item item in Items)
            {
                sb.AppendLine(">" + item.Find("DEFINITION"));
                sb.AppendLine(B.BreakTo(item.Sequence));
                sb.AppendLine("");
            }
            return sb.ToString();
        }

        public string Print_Features()
        {
            StringBuilder sb = new StringBuilder();
            foreach (GENBANK_Item item in Items)
            {
                foreach (GENBANK_FEATURE feature in item.Features)
                {
                    if (feature.FeatureList.Count > 1)
                    {
                        sb.AppendLine(">" + feature.Name + " " + feature.FeatureList[1]);
                        sb.AppendLine(B.BreakTo(Utility.SequenceByPosition(item.Sequence, feature.PositionList)));
                        sb.AppendLine("");
                    }
                }
            }
            return sb.ToString();
        }

        public string Protein()
        {
            StringBuilder sb = new StringBuilder();
            foreach (GENBANK_Item item in Items)
            {
                foreach (GENBANK_FEATURE feature in item.Features)
                {
                    string tr = feature.FindBranch("CDS", "translation");
                    if (tr.Length > 0)
                    {
                        sb.AppendLine(">" + feature.Name + " " + feature.FeatureList[1]);
                        sb.AppendLine(B.BreakTo(tr.Replace(" ", "").Replace("\"", "")));
                        sb.AppendLine("");
                    }
                }
            }
            return sb.ToString();
        }

    }
}
 

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

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

相关文章

LIBEVENT 框架

LIBEVENT 框架 LAMPlibevent特点:libevent的功能libevent官网安装步骤Linux下libevent主要API介绍libevent使用步骤libevent 编程案例LAMP 从LAMP说起: 是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件 Linux - 操作系统Apache - 网页服务器MySQL - 数据…

Automatic Prompt Optimization with “Gradient Descent” and Beam Search

在“自然语言域”使用类似梯度下降的方法优化prompt 整篇文章比较精髓的思想在于 利用LLM本身去寻找prompt的瑕疵。将语言模型的输出 y ^ \hat{y} y^​与正确答案&#xff08;label&#xff09; y y y还有prompt p p p 一起送入LLM&#xff0c;并通过类似“What is wrong wi…

如果提取音乐的伴奏和人声,分享两个方法给大家!

音乐中的伴奏提取一直是许多音频爱好者关注的话题。在本文中&#xff0c;我们将介绍两种简单易用的方法&#xff0c;并且特别推荐一款记灵在线工具&#xff0c;它能够帮助你轻松提取音乐伴奏&#xff0c;并且支持批量处理&#xff01; 方法一&#xff1a;Audacity 首先&#…

centos7 编译bluez ARM版本及undefined reference to `g_thread_new‘

在我辛辛苦苦编译成功 glib 库后&#xff08;看我上一篇文章 centos7 glib2.0 arm版本的编译&#xff09;&#xff0c;以为可以顺利编译我的 bluez ARM 版本&#xff0c;结果出现了最后一个错误&#xff08;其中一个是私有库里的&#xff09;&#xff0c;如&#xff1a; 就是这…

英文论文(sci)解读复现【NO.15】学习聚合多尺度背景的实例分割在遥感图像

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

基于customerId来实现

定义两个upstream,他们和service及route的关系如下&#xff1a; 这里我们使用 0、将下面的这个spring boot项目在192.168.19.50上进行部署 KongDemoApplication.java package com.example.kongdemo;import org.springframework.beans.factory.annotation.Value; import org…

8个升级到ChatGPT Plus的理由,不升级你就out了

​关注文章下方公众号&#xff0c;可免费获取AIGC最新学习资料 导读&#xff1a;ChatGPT Plus 是 OpenAI 聊天机器人的高级付费版本。以每月 20 美元的价格&#xff0c;该服务为您提供访问 GPT-4&#xff0c;您可以享有令人难以置信的稳定性和更快的响应时间。 本文字数&#…

i18n(国际化)代码简单实现

目录 i18n&#xff08;国际化&#xff09;是什么&#xff1f;如何实现 i18n&#xff08;国际化&#xff09;是什么&#xff1f; 各个国家都有各个国家的语言&#xff0c;如果网站需要让全世界的人使用&#xff0c;那就需要进行国际化功能开发 国际化我知道的一共有两种&#…

弄懂局部变量

成员变量和局部变量的区别 多个线程调用同一个对象的同一个方法时&#xff1a; 如果方法里无成员变量&#xff0c;那么不受任何影响 如果方法里有成员变量&#xff0c;只有读操作&#xff0c;不受影响 存在写操作&#xff0c;考虑多线程影响值 多线程调用…

【网络原理】网络层 IP 协议

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; 目 录 &#x1f340;一. IP协议报头格式&#x1f33b;二. IP 地址&#x1f33f;三. 路由选择 网络层协议的工作&#xff1a; 地址管理路由选择&#xff08;规划路径&#xff09; …

如何解决多个node版本问题?

1. 安装nvm 1.1 下载nvm&#xff1a;https://github.com/coreybutler/nvm-windows/releases 注意&#xff1a;路径中不得有空格 接着的直接下一步直至安装完成 安装完成后&#xff0c;打开安装目录 打开settings.txt文件&#xff0c;文件内容如下 在文档内容后面加上下面两行代…

朴素贝叶斯算法的介绍

一、朴素贝叶斯算法的介绍 1.什么是朴素贝叶斯算法&#xff1f; 朴素贝叶斯算法&#xff08;Naive Bayes Algorithm&#xff09;是一种基于贝叶斯定理和特征独立性假设的概率分类算法。它被广泛应用于文本分类、垃圾邮件过滤、情感分析等任务。 朴素贝叶斯算法的基本思想是基…

OpenMMLab AI实战营第二期(1)计算机视觉与OpenMMLab概述

通过今天课程的学习&#xff0c;算是比较大的扩展了我的视野&#xff0c;近期主要学一些强化学习的知识&#xff0c;没有想到计算机视觉领域已经发展的这么迅猛&#xff0c;很多以前只是在脑海里想象的计算机视觉应用场景&#xff0c;原来OpenMMLab已经实现了。我比较对目标检测…

人脸识别(Java+ Face++实现)

人脸识别&#xff08;Java Face实现&#xff09; 一. 概述 Face的核心技术是基于深度学习的人脸识别技术&#xff0c;其算法在准确率和速度方面都处于领先地位。该公司的产品和服务包括人脸识别SDK、人脸识别API、人脸比对服务、人脸检测服务、活体检测服务等。这些产品和服务广…

在树莓派3B+上安装Pytorch1.7

在树莓派3B上安装Pytorch1.7(应该是最简单的方法了)_package libopenblas-dev has no installation cand_Chauncey_Wang的博客-CSDN博客由于项目要求&#xff0c;我需要在树莓派上安装pytorch这就有几个问题&#xff0c;首先吧&#xff0c;咱们和外面之间有一道长城&#xff0c…

计算机网络 七大性能指标【速率】【带宽】【吞吐量】【时延】【时延带宽积】【往返时间】【利用率】

计算机网络 速率&#xff08;bit/s 数据的传送速率&#xff09;带宽&#xff08;频域-频带宽度&#xff0c;时域-最高速率&#xff09;吞吐量&#xff08;单位时间的 数据量&#xff09;时延&#xff08;一端传送到另一端所需的时间&#xff09;1. 发送时延&#xff08;发送所用…

来自6种编程语言的祝福:欢乐六一儿童节

六一儿童节的由来是为了纪念在法西斯侵略战争中死难的儿童&#xff0c;反对帝国主义的虐杀和毒害儿童&#xff0c;保障儿童权利。1949年11月&#xff0c;国际民主妇女联合会在莫斯科召开大会&#xff0c;决定每年的6月1日为全世界少年儿童的节日&#xff0c;即国际儿童节。 六一…

RPC(1):软件项目架构变化简述

1单体架构 1.1架构图 单体架构就是一个项目里面包含这个项目中全部代码。一个应用搞定全部功能。 DNS 服务器可以是单映射&#xff0c;也可以配置多个映射。 1.2软件代码结构 在单体架构项目中&#xff0c;团队都是通过包(package)进行区分每个模块。 总体包结构&#xff…

Android进阶 :实现自定义View

Android进阶&#xff1a;实现自定义View 导语 有时候我们会想要实现一些复杂或者是独特的组件效果&#xff0c;这时候系统提供的组件可能不能满足我们的需求&#xff0c;这个时候我们一般就会有两个解决办法&#xff0c;一是上网查找开源的控件库&#xff0c;一些流行的开源库…

【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(夯实功底篇)

手把手零基础带你玩转单元测试&#xff0c;让你的代码更加“强壮” 前言介绍JUnit是什么&#xff1f;JUnit和xUnit之间的关系 JUnit的基本概念JUnit的特点什么是一个单元测试用例 JUnit的用法JUnit的最佳实践案例分析创建一个类创建 Test Case 类创建 Test Runner 类 JUnit总体…