# Lab5: DNA

### 什么是DNA？

DNA是Deoxyribonucleic Acid（脱氧核醣核酸）的缩写，存在于人体细胞之中。它的结构由两螺旋长链组成（如下图），长链上有四种像英文字母一样的「代码」，分别是：A、T、C和G。我们的身体，便是依靠这四种DNA代码（碱基）以不同排序传递遗传讯息。

<img src="/files/1aQCmo7b3m5RJOYIJxIe" alt="" data-size="original">

四种DNA代码A、T、C、G环环相扣，形成DNA长链。不过在整条长链中，只有部分片段携带了遗传讯息，这些片段称为基因(gene)。

基因是遗传的基本单元。在基因中三个代码为一组，称为密码子（codon）。密码子可以编码氨基酸，例如GCU编码丙氨酸，GAA编码谷氨酸。氨基酸是构成蛋白质的基本单位。

基因片段有一个起点，就像程序从main()开始执行一样。基因片段是从**ATG**这个密码子开始的，称作**起始密码子（start codon)**；基因片段以**终止密码子(stop codon)**&#x7ED3;束，终止密码子可以是**TAA, TAG, 或者TGA中的任意一个**。

计算生物学家通过扫描生物的DNA来记录一些特殊指标，其中一个指标叫做**GC含量**。GC含量是指DNA片段中G和C质量之和所占的比率。高GC含量的DNA片段通常意味着携带重要的遗传信息。

### 你的任务

<mark style="color:green;">你有两个任务，完成任务一才可以解锁任务二。</mark>

**任务一**：

你需要读取一个文件（见dna.txt)，该文件包含多条DNA片段。对于每个片段，你的程序需要统计A、T、C、G分别出现的次数。此外，程序还需要计算四种碱基的质量占比。

片段中可能会存在"-"。它们不携带遗传信息，但是它们具有质量。

另外，程序需要记录DNA片段中密码子的信息，来预测该序列是否是可以编码蛋白质的基因(**protein-coding gene**)。在本次任务中，protein-coding gene是一个具有下列特征的字符串：

* 以起始密码子开始（ATG）
* 以终止密码子结束（TAA，TAG或TGA任意一种）
* 包含至少5个密码子（包括起始密码子和终止密码子）
* GC含量不低于30%

（注：上述特征只是为了本次实验而做的近似假设，并非生物学中真实的限定条件）

DNA.txt中包含10个DNA片段。第一行是片段名，第二行为DNA序列。序列中包含A、T、C、G和-。

**注意：碱基可以用大写字母，或者小写字母表示。**

**dna.txt(部分)**

```
protein 1
ATGCTACCATGGTAG
protein 2
ATgCCATGgACAATGGATCCcAtGGATTgA
protein 3
CCATT-AATGATCA-CAGTT
...
```

-代表没有编码功能的片段。绝大部分情况下程序可以忽视它，但是它仍然具有一定质量。

四种碱基，以及“-”的摩尔质量(grams/mol)分别为：

* A: 135.128
* C: 111.103
* G: 151.128
* T：125.107
* -：100.000

{% file src="/files/sQqwDLtTHM3pDuecOB4d" %}

#### 程序输出

程序运行开始后，需要用户提供输入文件和输出文件的名称（或者路径）。你的程序需要读入输入文件，将处理后的结果保存在输出文件里。

程序运行后的结果应该如下所示：

```
This program reports information about DNA
nucleotide sequences that may encode proteins.
Input file name? dna.txt
Output file name? output.txt
```

程序生成的output.txt结果如下所示（部分）：

```
Region Name: protein 1
Nucleotides: ATGCTACCATGGTAG
Nuc. Counts: [4, 3, 4, 4]
Total Mass%: [27.3, 16.8, 30.6, 25.3] of 1978.8
Codons List: [ATG, CTA, CCA, TGG, TAG]
Is Protein?: YES

Region Name: protein 2
Nucleotides: ATGCCATGGACAATGGATCCCATGGATTGA
Nuc. Counts: [9, 6, 8, 7]
Total Mass%: [30.7, 16.8, 30.5, 22.1] of 3967.5
Codons List: [ATG, CCA, TGG, ACA, ATG, GAT, CCC, ATG, GAT, TGA]
Is Protein?: YES

Region Name: protein 3
Nucleotides: CCATTA-ATCATGACA-GTT
Nuc. Counts: [6, 4, 2, 6]
Total Mass%: [32.3, 17.7, 12.1, 29.9] of 2508.1
Codons List: [CCA, TTA, ATC, ATG, ACA, GTT]
Is Protein?: NO
```

* 第一行：片段名
* 第二行：DNA片段（全部为大写字母）
* 第三行：A、C、G、T分别出现的次数
* 第四行：A、C、G、T的质量占比（取一位小数）
* 第五行：片段中出现的所有密码子
* 第六行：是否为protein-coding gene

{% hint style="info" %}
常见问题：

**Q：有没有可能起始密码子（ATG）和终止密码子中间，存在另外的ATG？**

A：有可能，但新的ATG不是起始密码子，而是基因片段的一部分。

**Q：是否可能出现ATG和终止密码子之间只有两个碱基的情况？**

A：从起始密码子开始，每3个碱基为一组。例如ATG-CA-TAG-A...的前三个密码子为ATG，CAT, AGA，这里TAG并不是这个序列的终止密码子。

**Q：我可以用OnlineGDB完成这个Lab吗？**

A：可以。你需要将输入文件放在同一个project下。可以参考下面链接：

<https://www.onlinegdb.com/Hyvi2l-_f>
{% endhint %}

将output.txt生成之后，可以来401办公室验证结果并领取奖品。验证成功可以开始完成任务二。

#### 任务二

果蝇作为遗传学研究的经典模式动物，主要用来研究真核生物遗传学的基本原理以及概念。1910年，摩尔根发现白眼果蝇并将其用于遗传学研究，摩尔根验证了孟德尔学说，发现并解释了伴性遗传，提出了连锁遗传，绘制了果蝇遗传图谱。因此1933年的诺贝尔医学奖授予了摩尔根，以表彰他在研究染色体在遗传方面的功能中所做出的贡献。1946年，摩尔根的学生，被誉为“果蝇的突变大师”的米勒，证明X射线能使果蝇的突变率提高150倍，因而成为诺贝尔奖获得者。

本次任务，你需要下载果蝇的染色体DNA序列，选取Y染色体进行扫描。

果蝇Y染色体DNA序列文件（数据来源：NCBI）：

{% file src="/files/tNauTOp0oVYwAh5oBORx" %}

序列中除了A,T,C,G以外，还有其它字符（例如N），这些非碱基的字符当作"-"来处理。

你的程序需要包含DNA序列中所有可能的protein-encoding gene，每条片段包含：

* 片段的起始位置和结束位置
* GC含量

<pre><code><strong>/*Below is the example output template*/
</strong><strong>Section1: 
</strong>Start Codon Index: 1006
Stop Codon Index: 1895
GC Mass%: 45% 

Section2: 
Start Codon Index: 3948
Stop Codon Index: 4652
GC Mass%: 32% 

...
</code></pre>

将结果保存到output\_y.txt中，可以来401办公室验证结果并领取奖品。

### 提交方式：

* 可以个人参加，也可以组队，最多三人一组。
* 所有任务提交的截止时间为11月25日中午十二点。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://scls-cs.gitbook.io/scls-apcs-lab/lab5-dna.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
