AzharDNA 新生物信息学程序 (DNA 翻译)






4.21/5 (7投票s)
DNA 翻译的基本工具
引言
在分子生物学和遗传学中,翻译是蛋白质生物合成的第三个阶段(是基因表达的整体过程的一部分)。在翻译过程中,通过转录产生的信使 RNA (mRNA)被核糖体解码,从而产生特定的氨基酸链,或多肽,然后它将折叠成一个活性蛋白质。在细菌中,翻译发生在细胞的细胞质中,在那里核糖体的大亚基和小亚基位于,并与 mRNA 结合。在真核生物中,翻译发生在内质网的膜上,这个过程被称为定向合成。核糖体通过诱导tRNA与 mRNA 的互补反密码子序列结合,从而促进解码。tRNA 携带特定的氨基酸,这些氨基酸被连接成多肽,因为 mRNA 通过核糖体并被核糖体“读取”,这个方式类似于股票行情收录机和行情纸带。
背景
每个氨基酸由三联体核苷酸密码编码,例如 M(甲硫氨酸)由 (atg) 三联体密码编码,并且有 64 种组合编码 21 种氨基酸。
翻译方法
这种方法负责将 DNA 切割成多个三联体密码,每个三联体密码由三个核苷酸组成,然后代码会询问数据库中由这个特定三联体密码编码的氨基酸,我们必须知道一个氨基酸有很多三联体密码,但每个三联体密码只有一个氨基酸,该方法需要序列和数据库连接,它会返回一系列氨基酸。
public static string Translate(string seq, SqlConnection DnaPro)
{
string Translation = "";
using (SqlConnection cn = new SqlConnection(DnaPro.ConnectionString))
{
cn.Open();
for (int x = 0; x < seq.Length / 3; x++)
{
int g = x * 3;
string h = seq.Substring(g, 3);
string cm = "select aminoacid from dnapro where dna='" + h + "'";
SqlCommand cmd = new SqlCommand(cm, cn);
Translation += cmd.ExecuteScalar();
}
return (string)Translation;
}
}
序列框架和翻译的可能性
如果序列中的第一个核苷酸不是翻译中的第一个核苷酸怎么办?如果前两个核苷酸没有整合到翻译过程中会怎么样?这将使序列有三种翻译可能性,总而言之,如果翻译过程从相反的方向开始会怎么样?这将留下另外三种可能性(框架),这意味着主序列有六个框架(可能性)将进入翻译过程。
//One DIRECTION
string frame1 = Translation.Translate(seq, DNAPro.Connection);
string frame2 = Translation.Translate(seq.Substring(1), DNAPro.Connection);
string frame3 = Translation.Translate(seq.Substring(2), DNAPro.Connection);
//Opposite DIRECTION
string Revseq = Main_Operations.Reversion(seq);
string frame4 = Translation.Translate(Revseq, DNAPro.Connection);
string frame5 = Translation.Translate(Revseq.Substring(1), DNAPro.Connection);
string frame6 = Translation.Translate(Revseq.Substring(2), DNAPro.Connection);
在窗体上绘制结果
首先定义每个框架将在图片框上绘制的位置或其位置
Translation.Frame1_Pos = 100;
Translation.Frame2_Pos = 110;
Translation.Frame3_Pos = 120;
Translation.Frame4_Pos = 155;
Translation.Frame5_Pos = 165;
Translation.Frame6_Pos = 175;
然后我们将计算将在此图像中的序列,因为每个图像必须包含 50 个核苷酸。
double images = Main_Operations.How_Many_Images(seq);
在循环中
for (int image_No = 0; image_No < images; image_No++)
{
//creating Bitmap image with specific dimensions
Image image = new Bitmap(500, 200);
Graphics pic = Graphics.FromImage(image);
//painting the reverse sequence
string RevSeq = Main_Operations.Reversion(seq);
Main_Operations.draw_Seq_On_Image(seq, image_No, pic, 85);
Main_Operations.draw_Seq_On_Image(Revseq, image_No, pic, 145);
Main_Operations.draw_SeqCount_On_Image(seq, Revseq, image_No, pic);
//painting frames
Translation.Draw_Trans_Result_Image(seq, Revseq, image_No, pic,
frame1, frame2, frame3, frame4, frame5, frame6, 70);
//Processes
//to paint the images at specific positions on form
Draw_Box_With_This_Image(image_No, image);
}
public void Draw_Box_With_This_Image(int im, Image image)
{
PictureBox p = new PictureBox();
p.Location = new Point(0, im * 200);
p.Image = image;
p.Size = image.Size;
Controls.Add(p);
}
这是将框架绘制在图像上的方法
public static void Draw_Trans_Result_Image(string seq, string Revseq,
int image_No, System.Drawing.Graphics pic, string frame1,
string frame2, string frame3, string frame4, string frame5,
string frame6, int level)
{
//painting Of the sequence of DNA Nu which are exists in this image.
string subframe1 = "";
string subframe2 = "";
string subframe3 = "";
string subframe4 = "";
string subframe5 = "";
string subframe6 = "";
double MyNumber = Main_Operations.How_Many_Images(seq)-1;
if (image_No < MyNumber )
{
subframe1 = frame1.Substring(image_No * 16 + image_No / 2, 16);
subframe2 = frame2.Substring(image_No * 16 + image_No / 2, 16);
subframe3 = frame3.Substring(image_No * 16 + image_No / 2, 16);
subframe4 = frame4.Substring(image_No * 16 + image_No / 2, 16);
subframe5 = frame5.Substring(image_No * 16 + image_No / 2, 16);
subframe6 = frame6.Substring(image_No * 16 + image_No / 2, 16);
}
else
{
subframe1 = frame1.Substring(frame1.Length - frame1.Length % 16 + image_No / 2);
subframe2 = frame2.Substring(frame2.Length - frame2.Length % 16 + image_No / 2);
subframe3 = frame3.Substring(frame3.Length - frame3.Length % 16 + image_No / 2);
subframe4 = frame4.Substring(frame4.Length - frame4.Length % 16 + image_No / 2);
subframe5 = frame5.Substring(frame5.Length - frame5.Length % 16 + image_No / 2);
subframe6 = frame6.Substring(frame6.Length - frame6.Length % 16 + image_No / 2);
}
for (int t = 0; t < seq.Length; t++)
{
if (t == 2 || (t - 2) % 3 == 0)
{
if (subframe1.Length > (t - 2) / 3)
pic.DrawString(subframe1[(t - 2) / 3].ToString(),
new Font("italic", 8, FontStyle.Bold),
Brushes.DarkOrange, new PointF(t * 8 + 15, Frame1_Pos));
if (subframe2.Length > (t - 2) / 3)
pic.DrawString(subframe2[(t - 2) / 3].ToString(),
new Font("italic", 8, FontStyle.Bold),
Brushes.Purple, new PointF(t * 8 + 8 + 15, Frame2_Pos));
if (subframe3.Length > (t - 2) / 3)
pic.DrawString(subframe3[(t - 2) / 3].ToString(),
new Font("italic", 8, FontStyle.Bold),
Brushes.Blue, new PointF(t * 8 + 15 + 15, Frame3_Pos));
if (subframe4.Length > (t - 2) / 3)
pic.DrawString(subframe4[(t - 2) / 3].ToString(),
new Font("italic", 8, FontStyle.Bold),
Brushes.Red, new PointF(t * 8 + 15, Frame4_Pos));
if (subframe5.Length > (t - 2) / 3)
pic.DrawString(subframe5[(t - 2) / 3].ToString(),
new Font("italic", 8, FontStyle.Bold),
Brushes.Green, new PointF(t * 8 + 8 + 15, Frame5_Pos));
if (subframe6.Length > (t - 2) / 3)
pic.DrawString(subframe6[(t - 2) / 3].ToString(),
new Font("italic", 8, FontStyle.Bold),
Brushes.Brown, new PointF(t * 8 + 15 + 15, Frame6_Pos));
}
}
}
注意
我知道当我使用 PictureBox
来显示翻译结果时很烦人,我真的很想在 RichTextBox
上绘制结果,如果有人可以帮助我使用这种方法,将会非常有帮助。 我很抱歉我的代码不够专业,但我能做的比我不能做的更好。
历史
此代码与 AzharDNA 新生物信息学程序(DNA 翻译的基本工具)相关。