<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>ZEK&amp;YL&#39;s blog</title>
  
  
  <link href="http://example.com/atom.xml" rel="self"/>
  
  <link href="http://example.com/"/>
  <updated>2026-04-13T19:00:30.143Z</updated>
  <id>http://example.com/</id>
  
  <author>
    <name>ZEK YL</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Bacteria isolates的分析步骤</title>
    <link href="http://example.com/2026/04/13/bacteria%20isolates%E7%9A%84%E5%88%86%E6%9E%90%E6%AD%A5%E9%AA%A4/"/>
    <id>http://example.com/2026/04/13/bacteria%20isolates%E7%9A%84%E5%88%86%E6%9E%90%E6%AD%A5%E9%AA%A4/</id>
    <published>2026-04-12T23:00:00.000Z</published>
    <updated>2026-04-13T19:00:30.143Z</updated>
    
    <content type="html"><![CDATA[<h1 id="bacteria-isolates的分析步骤"><a href="#bacteria-isolates的分析步骤" class="headerlink" title="bacteria isolates的分析步骤"></a>bacteria isolates的分析步骤</h1><p>结果储存在/data/Food/analysis/R0987_nextgen/Erkang.Zhang/combined_analysis/中</p><h2 id="anvio-pangenome分析"><a href="#anvio-pangenome分析" class="headerlink" title="anvio-pangenome分析"></a>anvio-pangenome分析</h2><h2 id="METABOLIC分析结果（pathway-热图）"><a href="#METABOLIC分析结果（pathway-热图）" class="headerlink" title="METABOLIC分析结果（pathway 热图）"></a>METABOLIC分析结果（pathway 热图）</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/sh</span></span><br><span class="line"><span class="comment">#SBATCH --error /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/logfile/err_metabolictest_20260325</span></span><br><span class="line"><span class="comment">#SBATCH --output /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/logfile/out_metabolictest_20260325</span></span><br><span class="line"><span class="comment">#SBATCH --job-name metabolictest_20260325</span></span><br><span class="line"><span class="comment">#SBATCH --mail-user Erkang.Zhang@teagasc.ie</span></span><br><span class="line"><span class="comment">#SBATCH --mail-type END,FAIL</span></span><br><span class="line"><span class="comment">#SBATCH --cpus-per-task=20</span></span><br><span class="line"><span class="comment">#SBATCH -p Priority</span></span><br><span class="line"><span class="comment">#SBATCH -N 1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">perl /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/food_bins_overall_METABOLIC/METABOLIC/METABOLIC/METABOLIC-G.pl \</span><br><span class="line">     -in-gn /data/Food/analysis/R0987_nextgen/Erkang.Zhang/<span class="built_in">test</span>/KLI1101_hybrid_test_2 \</span><br><span class="line">     -o /data/Food/analysis/R0987_nextgen/Erkang.Zhang/<span class="built_in">test</span>/metabolic_test_KLI1101_2 -p single</span><br></pre></td></tr></table></figure><h2 id="Antismash的次级代谢物预测"><a href="#Antismash的次级代谢物预测" class="headerlink" title="Antismash的次级代谢物预测"></a>Antismash的次级代谢物预测</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/sh</span></span><br><span class="line"><span class="comment">#SBATCH --error /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/logfile/err_antismashtest_20260326</span></span><br><span class="line"><span class="comment">#SBATCH --output /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/logfile/out_antismashtest_20260326</span></span><br><span class="line"><span class="comment">#SBATCH --job-name antismashtest_20260326</span></span><br><span class="line"><span class="comment">#SBATCH --mail-user Erkang.Zhang@teagasc.ie</span></span><br><span class="line"><span class="comment">#SBATCH --mail-type END,FAIL</span></span><br><span class="line"><span class="comment">#SBATCH --cpus-per-task=20</span></span><br><span class="line"><span class="comment">#SBATCH -p Priority</span></span><br><span class="line"><span class="comment">#SBATCH -N 1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">antismash KLA1304.fasta --genefinding-tool prodigal --output-dir KLA1304 --output-basename KLA1304 --cc-mibig --cb-knownclusters --cb-general --cb-subclusters -v --logfile KLA1304/KLA1304_log.txt</span><br><span class="line"></span><br><span class="line">antismash KLS1202.fasta --genefinding-tool prodigal --output-dir KLS1202 --output-basename KLS1202 --cc-mibig --cb-knownclusters --cb-general --cb-subclusters -v --logfile KLS1202/KLS1202_log.txt</span><br></pre></td></tr></table></figure><h2 id="antibiotic-resistance-genes的注释"><a href="#antibiotic-resistance-genes的注释" class="headerlink" title="antibiotic resistance genes的注释"></a>antibiotic resistance genes的注释</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/sh</span></span><br><span class="line"><span class="comment">#SBATCH --error /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/logfile/err_rgi_20260407</span></span><br><span class="line"><span class="comment">#SBATCH --output /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/logfile/out_rgi_20260407</span></span><br><span class="line"><span class="comment">#SBATCH --job-name rgi_20260407</span></span><br><span class="line"><span class="comment">#SBATCH --mail-user Erkang.Zhang@teagasc.ie</span></span><br><span class="line"><span class="comment">#SBATCH --mail-type END,FAIL</span></span><br><span class="line"><span class="comment">#SBATCH --cpus-per-task=10</span></span><br><span class="line"><span class="comment">#SBATCH -p Priority</span></span><br><span class="line"><span class="comment">#SBATCH -N 1</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">rgi load --card_json /data/Food/analysis/R0987_nextgen/Erkang.Zhang/AAB/CARD_database/card.json --<span class="built_in">local</span></span><br><span class="line"></span><br><span class="line">rgi main --input_sequence /data/Food/analysis/R0987_nextgen/Erkang.Zhang/combined_analysis/gluconobacter_potus/KLA1304.fasta \</span><br><span class="line">         --output_file /data/Food/analysis/R0987_nextgen/Erkang.Zhang/combined_analysis/gluconobacter_potus/rgi_result/KLA1304_rgi --<span class="built_in">local</span> --clean </span><br><span class="line"></span><br><span class="line">rgi main --input_sequence /data/Food/analysis/R0987_nextgen/Erkang.Zhang/combined_analysis/gluconobacter_potus/KLS1202.fasta \</span><br><span class="line">         --output_file /data/Food/analysis/R0987_nextgen/Erkang.Zhang/combined_analysis/gluconobacter_potus/rgi_result/KLS1202_rgi --<span class="built_in">local</span> --clean </span><br></pre></td></tr></table></figure><p>或者使用rgi网站上的注释，或者使用abricate</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#或者使用abricate注释，可以使用不同的数据库（-db）</span></span><br><span class="line">abricate KLS1202.fasta &gt;abricate_result/KLS1202.txt</span><br></pre></td></tr></table></figure><h2 id="horizontal-gene-transfer的分析"><a href="#horizontal-gene-transfer的分析" class="headerlink" title="horizontal gene transfer的分析"></a>horizontal gene transfer的分析</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#建立database有点麻烦，程序自带的脚本有问题，需要手动从他们提供的网盘下载（github网页上有），然后手动使用diamond建立database</span></span><br><span class="line"><span class="comment">#数据库在/data/Food/primary/R0987_nextgen/Erkang.Zhang/hgtdb_20230102</span></span><br><span class="line"><span class="comment">#输入文件是faa，要先预测，可以先运行metabolic，会生成faa文件</span></span><br><span class="line"></span><br><span class="line">hgtector search -i /data/Food/primary/R0987_nextgen/Erkang.Zhang/o55h7.faa.gz -o . -m diamond -p 16 -d /data/Food/primary/R0987_nextgen/Erkang.Zhang/ref107/diamond/db -t /data/Food/primary/R0987_nextgen/Erkang.Zhang/ref107/taxdump</span><br><span class="line"></span><br><span class="line">hgtector analyze -i o55h7.tsv -o . -t /data/Food/primary/R0987_nextgen/Erkang.Zhang/ref107/taxdump --donor-name</span><br><span class="line"><span class="comment">#似乎不使用grid的效果好一些</span></span><br></pre></td></tr></table></figure><ul><li><p>One can force the potential donors to be reported at a certain rank using the <code>--donor-rank</code> parameter (e.g., “genus”). Donors below this rank will be raised to this rank (e.g., “<em>E. coli</em>“ becomes “<em>Escherichia</em>“), however donors above this rank will be discarded. Since it is not uncommon that the true donor cannot be accurately determined using the taxonomy of extant organisms, we recommend not using this parameter, or setting it to a high rank (e.g., “phylum”).</p></li><li><p>完成后的tsv文件可以使用taxonkit重新获取taxid以及物种分类</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat KLA1304/hgts/assembly.txt | taxonkit name2taxid --data-dir /data/Food/primary/R0987_nextgen/Erkang.Zhang/taxonkit_database --name-field 3 --show-rank -o test.tsv</span><br></pre></td></tr></table></figure></li></ul>]]></content>
    
    
    <summary type="html">对于kombucha的分离株混合组装后的基因组分析流程</summary>
    
    
    
    <category term="2026" scheme="http://example.com/categories/2026/"/>
    
    
    <category term="菌株基因组分析流程" scheme="http://example.com/tags/%E8%8F%8C%E6%A0%AA%E5%9F%BA%E5%9B%A0%E7%BB%84%E5%88%86%E6%9E%90%E6%B5%81%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>Yeast isolates的分析步骤</title>
    <link href="http://example.com/2026/04/13/yeast%20isolates%E7%9A%84%E5%88%86%E6%9E%90%E6%AD%A5%E9%AA%A4/"/>
    <id>http://example.com/2026/04/13/yeast%20isolates%E7%9A%84%E5%88%86%E6%9E%90%E6%AD%A5%E9%AA%A4/</id>
    <published>2026-04-12T23:00:00.000Z</published>
    <updated>2026-04-13T19:01:03.688Z</updated>
    
    <content type="html"><![CDATA[<h1 id="yeast-isolates的分析步骤"><a href="#yeast-isolates的分析步骤" class="headerlink" title="yeast isolates的分析步骤"></a>yeast isolates的分析步骤</h1><h2 id="Funannotate分析-只做eggnog和antismash"><a href="#Funannotate分析-只做eggnog和antismash" class="headerlink" title="Funannotate分析(只做eggnog和antismash)"></a>Funannotate分析(只做eggnog和antismash)</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#数据库建立，记得使用-w来用wget下载，不然报错</span></span><br><span class="line">funannotate setup -d /data/Food/primary/R0987_nextgen/Erkang.Zhang/funannotate_db -w</span><br><span class="line"></span><br><span class="line"><span class="comment">#mask</span></span><br><span class="line">funannotate mask -i KLI1401.fasta --cpus 12 -o KLI1401_mask.fasta</span><br><span class="line"></span><br><span class="line"><span class="comment">#修改序列名称，16字符之内不然下一步报错，并且记得指定--min，不然这一步报错</span></span><br><span class="line">funannotate sort -i KLI1401_mask.fasta -o KLI1401_mask_sort.fasta  --minlen 1</span><br><span class="line"></span><br><span class="line"><span class="comment">#predict,--names KLI1401不然会locus_tag一样，compare时报错</span></span><br><span class="line">funannotate predict -i KLI1401_mask_sort.fasta -o KLI1401_fun \</span><br><span class="line">    --species <span class="string">&quot;Brettanomyces bruxellensis&quot;</span> --strain KLI1401 \</span><br><span class="line">    --cpus 12 --names KLI1401</span><br><span class="line"><span class="comment">########################</span></span><br><span class="line"><span class="comment">#运行完predict后需要使用多个工具来生成对gene的注释</span></span><br><span class="line"><span class="comment">########################</span></span><br><span class="line">conda init</span><br><span class="line"><span class="built_in">source</span> ~/.bashrc</span><br><span class="line"><span class="built_in">source</span> ~/.bash_profile</span><br><span class="line"><span class="comment">#########################</span></span><br><span class="line">conda activate eggnog</span><br><span class="line"></span><br><span class="line">mkdir KLI1401_fun/eggnog_output</span><br><span class="line"></span><br><span class="line">emapper.py --data_dir /data/Food/primary/R0987_nextgen/Erkang.Zhang/eggnog_db \</span><br><span class="line">           -i KLI1401_fun/predict_results/Brettanomyces_bruxellensis_KLI1401.proteins.fa \</span><br><span class="line">           -o KLI1401_fun/eggnog_output/KLI1401 -m diamond --cpu 16</span><br><span class="line"></span><br><span class="line">conda deactivate</span><br><span class="line"><span class="comment">#######################</span></span><br><span class="line"><span class="comment">#genefinding-tool_none不然报错</span></span><br><span class="line">conda activate antismash</span><br><span class="line"></span><br><span class="line">antismash KLI1401_fun/predict_results/Brettanomyces_bruxellensis_KLI1401.gbk --output-dir KLI1401_fun/antismash_output \</span><br><span class="line">                        --output-basename KLI1401 --cc-mibig --cb-knownclusters -t fungi \</span><br><span class="line">                        --cb-general --cb-subclusters --genefinding-tool none \</span><br><span class="line">                        -v --logfile KLI1401_fun/antismash_output/KLI1401_log.txt</span><br><span class="line"></span><br><span class="line">conda deactivate</span><br><span class="line"><span class="comment">###########################可以选择不做</span></span><br><span class="line"><span class="comment">#conda activate funannotate</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#funannotate remote -i KLI1401_fun -o KLI1401_fun/phobius_output -m phobius -e erkang.zhang@teagasc.ie</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#conda deactivate</span></span><br><span class="line"><span class="comment">###########################</span></span><br><span class="line"></span><br><span class="line"><span class="comment">########再运行annotate，将之前的数据传过来#########</span></span><br><span class="line">conda activate funannotate</span><br><span class="line"></span><br><span class="line">funannotate annotate -i KLI1401_fun --species <span class="string">&quot;Brettanomyces bruxellensis&quot;</span> \</span><br><span class="line">                     -o KLI1401_fun_annotate \</span><br><span class="line">                     --eggnog KLI1401_fun/eggnog_output/KLI1401.emapper.annotations \</span><br><span class="line">                     --antismash KLI1401_fun/antismash_output/KLI1401.gbk --isolate KLI1401 --cpus 20</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">funannotate annotate -i KLI1405_fun --species <span class="string">&quot;Brettanomyces bruxellensis&quot;</span> \</span><br><span class="line">                     -o KLI1405_fun_annotate \</span><br><span class="line">                     --eggnog KLI1405_fun/eggnog_output/KLI1405.emapper.annotations \</span><br><span class="line">                     --antismash KLI1405_fun/antismash_output/KLI1405.gbk --isolate KLI1405 --cpus 20</span><br><span class="line">                     </span><br><span class="line">conda deactivate                           </span><br><span class="line"><span class="comment">##############################</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#####运行compare，生成网页，有一些图可以用#############</span></span><br><span class="line">funannotate compare -i KLI1401_fun/annotate_results/Brettanomyces_bruxellensis_KLI1401_newlocus.gbk KLI1405_fun/annotate_results/Brettanomyces_bruxellensis_KLI1405_newlocus.gbk -o funannotate_compare_KLI1401_KLI1405 --cpus 5</span><br><span class="line"></span><br></pre></td></tr></table></figure><ul><li><p>如果predict忘了–name，可以手动修改输入给compare的gbk文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sed <span class="string">&#x27;s/FUN_/KLI1405_/g&#x27;</span> KLI1405_fun/annotate_results/Brettanomyces_bruxellensis_KLI1405.gbk &gt;KLI1405_fun/annotate_results/Brettanomyces_bruxellensis_</span><br><span class="line">KLI1405_newlocus.gbk</span><br></pre></td></tr></table></figure></li></ul>]]></content>
    
    
    <summary type="html">对于kombucha的分离株混合组装后的基因组分析流程</summary>
    
    
    
    <category term="2026" scheme="http://example.com/categories/2026/"/>
    
    
    <category term="菌株基因组分析流程" scheme="http://example.com/tags/%E8%8F%8C%E6%A0%AA%E5%9F%BA%E5%9B%A0%E7%BB%84%E5%88%86%E6%9E%90%E6%B5%81%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>anvio的pangenome分析使用步骤</title>
    <link href="http://example.com/2026/03/30/anvio_pangenome/"/>
    <id>http://example.com/2026/03/30/anvio_pangenome/</id>
    <published>2026-03-29T23:00:00.000Z</published>
    <updated>2026-03-30T19:08:51.366Z</updated>
    
    <content type="html"><![CDATA[<h1 id="anvio的pangenome分析使用步骤"><a href="#anvio的pangenome分析使用步骤" class="headerlink" title="anvio的pangenome分析使用步骤"></a>anvio的pangenome分析使用步骤</h1><h2 id="1-检查fasta文件的contig名字是否唯一，可以使用anvi-script-reformat-fasta命令来重命名"><a href="#1-检查fasta文件的contig名字是否唯一，可以使用anvi-script-reformat-fasta命令来重命名" class="headerlink" title="1. 检查fasta文件的contig名字是否唯一，可以使用anvi-script-reformat-fasta命令来重命名"></a>1. 检查fasta文件的contig名字是否唯一，可以使用anvi-script-reformat-fasta命令来重命名</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">anvi-script-reformat-fasta fasta \</span><br><span class="line">                          -o contigs-fasta \</span><br><span class="line">                          --simplify-names \</span><br><span class="line">                          --report-file contig-rename-report-txt</span><br></pre></td></tr></table></figure><h2 id="2-建立contig-database"><a href="#2-建立contig-database" class="headerlink" title="2. 建立contig database"></a>2. 建立contig database</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">anvi-gen-contigs-database -f Patient_6557_E_faecalis_cultivar.fa \</span><br><span class="line">                          --project-name E_faecalis_P6557 \</span><br><span class="line">                          -o E_faecalis_P6557.db</span><br></pre></td></tr></table></figure><h2 id="3-使用不同的数据库来注释contig-database"><a href="#3-使用不同的数据库来注释contig-database" class="headerlink" title="3. 使用不同的数据库来注释contig database"></a>3. 使用不同的数据库来注释contig database</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">anvi-run-kegg-kofams -c <span class="variable">$i</span> --kegg-data-dir /data/Food/analysis/R0987_nextgen/Erkang.Zhang/anvio_database/kegg_database</span><br><span class="line"></span><br><span class="line">anvi-run-ncbi-cogs -c <span class="variable">$i</span> --cog-data-dir /data/Food/analysis/R0987_nextgen/Erkang.Zhang/anvio_database/COG_database</span><br></pre></td></tr></table></figure><p>这会直接在database文件中加入注释信息</p><h2 id="4-建立external-contig-db的路径信息txt"><a href="#4-建立external-contig-db的路径信息txt" class="headerlink" title="4. 建立external contig db的路径信息txt"></a>4. 建立external contig db的路径信息txt</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(<span class="built_in">echo</span> -e <span class="string">&quot;name\tcontigs_db_path&quot;</span>; find /data/Food/analysis/R0987_nextgen/Erkang.Zhang/anvio_pangenome/gluconobacter_potus -name <span class="string">&quot;*_rename.fasta.db&quot;</span> | awk -F<span class="string">&#x27;/&#x27;</span> <span class="string">&#x27;&#123;file=$NF; split(file,a,&quot;.&quot;); print a[1]&quot;\t&quot;$0&#125;&#x27;</span>) &gt;Gluconobacter_potus_external_genomes.txt</span><br></pre></td></tr></table></figure><h2 id="5-利用contig-db建立genomes-storage"><a href="#5-利用contig-db建立genomes-storage" class="headerlink" title="5. 利用contig db建立genomes storage"></a>5. 利用contig db建立genomes storage</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">anvi-gen-genomes-storage -e external-genomes.txt \</span><br><span class="line">                         -o PROCHLORO-GENOMES.db</span><br></pre></td></tr></table></figure><h2 id="6-进行pangenome的分析"><a href="#6-进行pangenome的分析" class="headerlink" title="6. 进行pangenome的分析"></a>6. 进行pangenome的分析</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">anvi-pan-genome -g PROCHLORO-GENOMES.db \</span><br><span class="line">                --project-name <span class="string">&quot;Prochlorococcus_Pan&quot;</span> \</span><br><span class="line">                --output-dir PROCHLORO \</span><br><span class="line">                --num-threads 6</span><br></pre></td></tr></table></figure><h2 id="7-建立可交互式网页"><a href="#7-建立可交互式网页" class="headerlink" title="7. 建立可交互式网页"></a>7. 建立可交互式网页</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">anvi-display-pan -p PROJECT-PAN.db -g PROJECT-PAN-GENOMES.db</span><br></pre></td></tr></table></figure><h2 id="8-在teagasc的hpc上建立网页"><a href="#8-在teagasc的hpc上建立网页" class="headerlink" title="8. 在teagasc的hpc上建立网页"></a>8. 在teagasc的hpc上建立网页</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#在电脑terminal上登陆</span></span><br><span class="line">ssh -J erkang.zhang@hcux401.teagasc.net     -L 5555:localhost:5555     erkang.zhang@compute09</span><br><span class="line"><span class="comment">#然后conda激活环境，并运行</span></span><br><span class="line">anvi-display-pan -p Gluconobacter_potus_Pan/Gluconobacter_potus_Pan-PAN.db -g Gluconobacter_potus-GENOMES.db --server-only -P 5555</span><br></pre></td></tr></table></figure><h2 id="9-可以计算genome之间的ANI并将数据储存到pan-db中"><a href="#9-可以计算genome之间的ANI并将数据储存到pan-db中" class="headerlink" title="9. 可以计算genome之间的ANI并将数据储存到pan db中"></a>9. 可以计算genome之间的ANI并将数据储存到pan db中</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">anvi-compute-genome-similarity --external-genomes Gluconobacter_potus_external_genomes.txt \</span><br><span class="line">                               --program pyANI \</span><br><span class="line">                               --output-dir ANI \</span><br><span class="line">                               --num-threads 12 \</span><br><span class="line">                               --pan-db Gluconobacter_potus_Pan/Gluconobacter_potus_Pan-PAN.db</span><br></pre></td></tr></table></figure><h2 id="10-最外层有function注释的图"><a href="#10-最外层有function注释的图" class="headerlink" title="10. 最外层有function注释的图"></a>10. 最外层有function注释的图</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">anvi-display-functions --external-genomes Gluconobacter_potus_external_genomes.txt --annotation-source COG24_FUNCTION --profile-db COG24-PROFILE.db</span><br><span class="line"></span><br><span class="line">anvi-interactive -p COG24-PROFILE.db --server-only -P 5555 --manual</span><br></pre></td></tr></table></figure><h2 id="11-计算rarefaction"><a href="#11-计算rarefaction" class="headerlink" title="11. 计算rarefaction"></a>11. 计算rarefaction</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">anvi-compute-rarefaction-curves -p Gluconobacter_potus_Pan/Gluconobacter_potus_Pan-PAN.db --iterations 100 -O rarefaction.svg</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">anvio pangenome 分析流程</summary>
    
    
    
    <category term="2026" scheme="http://example.com/categories/2026/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>R语言中的数据框处理</title>
    <link href="http://example.com/2023/04/03/R%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E6%A1%86%E5%A4%84%E7%90%86/"/>
    <id>http://example.com/2023/04/03/R%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E6%A1%86%E5%A4%84%E7%90%86/</id>
    <published>2023-04-02T23:00:00.000Z</published>
    <updated>2023-04-04T14:28:14.632Z</updated>
    
    <content type="html"><![CDATA[<h1 id="R语言中的数据框处理"><a href="#R语言中的数据框处理" class="headerlink" title="R语言中的数据框处理"></a>R语言中的数据框处理</h1><h2 id="dplyr包"><a href="#dplyr包" class="headerlink" title="dplyr包"></a>dplyr包</h2><h3 id="处理变量的函数（处理列）"><a href="#处理变量的函数（处理列）" class="headerlink" title="处理变量的函数（处理列）"></a>处理变量的函数（处理列）</h3><h4 id="select"><a href="#select" class="headerlink" title="select"></a>select</h4><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">data1 &lt;- starwars %&gt;% select(name,height,mass,sex,species,films) <span class="comment">#名字全列出来</span></span><br><span class="line">data2 &lt;- starwars %&gt;% select(name:mass)  <span class="comment">#直接选取范围</span></span><br><span class="line">data3 &lt;- starwars %&gt;% select(<span class="number">1</span>:<span class="number">6</span>)</span><br><span class="line">data4 &lt;- starwars %&gt;% select(<span class="number">1</span>:<span class="number">3</span>,<span class="number">7</span>:<span class="number">8</span>)</span><br><span class="line">data5 &lt;- starwars %&gt;% select(name, species, contains(<span class="string">&quot;color&quot;</span>))  <span class="comment">#按照字符的包含条件筛选</span></span><br><span class="line">data6 &lt;- starwars %&gt;% select(name, height, weight = mass)   <span class="comment">#还可以选取的同时直接重命名，注意新旧名字的前后顺序</span></span><br></pre></td></tr></table></figure><p>可以根据变量的名字筛选，或者对变量重新命名。</p><h4 id="mutate"><a href="#mutate" class="headerlink" title="mutate"></a>mutate</h4><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">data13 &lt;- data1 %&gt;% mutate(BMI = mass/((height/<span class="number">100</span>)^<span class="number">2</span>)) %&gt;% arrange(-BMI)</span><br></pre></td></tr></table></figure><p>可以新增加一个变量追加到数据框的最后一列，也就是新建一列。</p><h3 id="筛选个案（处理行）"><a href="#筛选个案（处理行）" class="headerlink" title="筛选个案（处理行）"></a>筛选个案（处理行）</h3><h4 id="filter"><a href="#filter" class="headerlink" title="filter"></a>filter</h4><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">data8 &lt;- starwars %&gt;% select(name,height,mass,sex,species) %&gt;% filter(species == <span class="string">&quot;Droid&quot;</span>) %&gt;% arrange(height)  </span><br><span class="line">data9 &lt;- starwars %&gt;% select(name,height,mass,sex,species) %&gt;% filter((species == <span class="string">&quot;Human&quot;</span> | species == <span class="string">&quot;Droid&quot;</span>) &amp; height &lt; <span class="number">200</span>) %&gt;% arrange(height) <span class="comment"># “|”表示或者，“,“和“&amp;”表示且</span></span><br><span class="line">data9 &lt;- starwars %&gt;% select(name,height,mass,sex,species) %&gt;% filter((species %in% <span class="built_in">c</span>(<span class="string">&quot;Human&quot;</span>,<span class="string">&quot;Droid&quot;</span>)) &amp; height &lt; <span class="number">200</span>) %&gt;% arrange(height) <span class="comment"># %in%也可以达到上面相同的效果</span></span><br><span class="line">data9 &lt;- starwars %&gt;% select(name,height,mass,sex,species) %&gt;% filter(!<span class="built_in">is.na</span>(height)) %&gt;% arrange(height)  <span class="comment">#&quot;!&quot;表示取相反的，所以这项命令通过filter保留了没有NA的行</span></span><br></pre></td></tr></table></figure><p>可以根据变量的结果筛选个案，也就是通过列来筛选行。</p><h4 id="arrange"><a href="#arrange" class="headerlink" title="arrange"></a>arrange</h4><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">data8 &lt;- starwars %&gt;% select(name,height,mass,sex,species) %&gt;% filter(species == <span class="string">&quot;Droid&quot;</span>) %&gt;% arrange(-height)  <span class="comment">#降序</span></span><br></pre></td></tr></table></figure><p>同上，可以通过某变量的值来排序，调整个案的顺序，也就是通过列的值来排序行。</p><h3 id="处理单元格数据"><a href="#处理单元格数据" class="headerlink" title="处理单元格数据"></a>处理单元格数据</h3><h4 id="if-else"><a href="#if-else" class="headerlink" title="if_else"></a>if_else</h4><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">data14 &lt;- data13 %&gt;% drop_na(mass) %&gt;% mutate(weight_size = if_else(mass &gt; <span class="number">100</span> , </span><br><span class="line">                                                          <span class="string">&quot;large&quot;</span>,</span><br><span class="line">                                                          <span class="string">&quot;small&quot;</span>))   <span class="comment">#drop_na把有mass列中NA的行删掉了</span></span><br></pre></td></tr></table></figure><p>可以根据变量的数值来进行条件转换，比如上面的例子就是检测mass是否大于100，如果大于就在新增加的一列weight_size中命名为large，否则则为small。</p><h4 id="recode"><a href="#recode" class="headerlink" title="recode"></a>recode</h4><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">data15 &lt;- data14 %&gt;% mutate(weight_size = recode(weight_size, <span class="string">&quot;large&quot;</span>=<span class="number">1</span> ,</span><br><span class="line">                            <span class="string">&quot;small&quot;</span>=<span class="number">2</span>))</span><br></pre></td></tr></table></figure><p>可以根据单元格中的内容成组转换，比如将large体型转化为1，small体型转化为2。</p><h2 id="reshape2包"><a href="#reshape2包" class="headerlink" title="reshape2包"></a>reshape2包</h2><h3 id="melt"><a href="#melt" class="headerlink" title="melt"></a>melt</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">melt(MASS::ships, id.vars = <span class="built_in">c</span>(<span class="string">&quot;type&quot;</span>,<span class="string">&quot;year&quot;</span>))</span><br></pre></td></tr></table></figure><p>将宽数据框转化为长数据。</p><ul><li>Id.vars 标识变量，也就是不想变的列名（不想变的变量）</li><li>measure.vars 度量变量，也就是要展开的列名（如果不特殊指定的话就是上面id.vars的补集）</li><li>variable.name 对度量变量那一列变换后的命名，默认为variable</li><li>na.rm 是否删除缺失值</li><li>value.name 对度量变量值那一列的命名，默认为value</li></ul><p>其实就是把measure.vars中的多个列合成一个列。m列n行的数据框，如果指定一个量度变量那么最后的长数据表就会是3列n(m-1)行，指定两个就会是4列n(m-2)行。</p><h3 id="cast"><a href="#cast" class="headerlink" title="cast"></a>cast</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ships_melt_dcast &lt;- dcast(ships_melt, year + variable ~ type, fun.aggregate = mean)</span><br></pre></td></tr></table></figure><p>将长数据转化为宽数据。</p><ul><li>formula 描述最后想要的结果, a + b …. ~ c + d …..   a和b定义了确定各行内容，c和d确定了各列的内容</li><li>fun.aggregate 数据整合函数，平均值等</li><li> value.var 指定储存value的那一列，默认是剩下的最后一个列</li></ul><p>其实相当于减少了一个或多个变量（一个列），将一列拆分成了多个列，也就是a、b不懂，将c、d两列拆分为多个列。主要还是要看将数据框变形的目的是什么，是为了看什么数值之间的关系。</p><h2 id="tidyr包"><a href="#tidyr包" class="headerlink" title="tidyr包"></a>tidyr包</h2><h3 id="gather"><a href="#gather" class="headerlink" title="gather"></a>gather</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">data &lt;- data.frame(Patient = <span class="built_in">c</span>(<span class="string">&quot;Patient1&quot;</span>,<span class="string">&quot;Patient2&quot;</span>,<span class="string">&quot;Patient3&quot;</span>,<span class="string">&quot;Patient4&quot;</span>),</span><br><span class="line">                               t0 = <span class="built_in">c</span>(<span class="number">189</span>,<span class="number">170</span>,<span class="number">135</span>,<span class="number">145</span>), t1 = <span class="built_in">c</span>(<span class="number">160</span>,<span class="number">140</span>,<span class="number">127</span>,<span class="number">120</span>),</span><br><span class="line">                               t2 = <span class="built_in">c</span>(<span class="number">156</span>,<span class="number">145</span>,<span class="number">133</span>,<span class="number">140</span>), t3 = <span class="built_in">c</span>(<span class="number">160</span>,<span class="number">155</span>,<span class="number">140</span>,<span class="number">120</span>))</span><br><span class="line"></span><br><span class="line">data1 &lt;- gather(data, key = <span class="string">&quot;time&quot;</span>, value = SPB, t0,t1,t2,t3)</span><br></pre></td></tr></table></figure><p>将宽数据转化为长数据</p><ul><li>key 表示合并后的列的名字</li><li>value 表示合并后储存值的那一列的名字</li><li>t0 - t3 表示需要合并的列</li></ul><h3 id="spread"><a href="#spread" class="headerlink" title="spread"></a>spread</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">data2 &lt;- spread(data1, key = time, value = SPB)</span><br></pre></td></tr></table></figure><p>将长数据转化为宽数据</p><ul><li>key 表示需要被拆分为多个列的那一列列名</li><li>value 表示指定储存值的一列</li></ul><h3 id="unite"><a href="#unite" class="headerlink" title="unite"></a>unite</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">data3 &lt;- unite(data = data1, col = ptime, Patient, time, SPB, remove = <span class="built_in">F</span>, sep = <span class="string">&quot;-&quot;</span>)</span><br></pre></td></tr></table></figure><p>可以将多列的数据合并为一列</p><ul><li>col 表示新合成的列的名字</li><li>Patient, time, SPB 表示需要合成的列</li><li>remove 表示合成后是否需要删除用来合成的列</li><li>sep 表示多列合成中所使用的间隔符</li></ul><h3 id="separate"><a href="#separate" class="headerlink" title="separate"></a>separate</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">data4 &lt;- separate(data = data3, col = ptime, sep = <span class="string">&quot;-&quot;</span>, into = <span class="built_in">c</span>(<span class="string">&quot;patient&quot;</span>,<span class="string">&quot;time&quot;</span>), remove = <span class="built_in">F</span>)</span><br></pre></td></tr></table></figure><p>可以将一列拆分成多列</p><ul><li>col 表示接受拆分的列</li><li>sep 表示根据什么字符来拆分</li><li>into 表示拆分后的列名叫什么，输入向量可以表示多个列名极其顺序</li><li>remove 表示拆分后是否保留原始被拆分的列</li></ul><h3 id="pivot-longer"><a href="#pivot-longer" class="headerlink" title="pivot_longer"></a>pivot_longer</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">data2 %&gt;% pivot_longer(cols = t0:t3, </span><br><span class="line">                                names_to = <span class="string">&quot;time&quot;</span>,</span><br><span class="line">                                values_to = <span class="string">&quot;SPB&quot;</span></span><br><span class="line">                                     )</span><br></pre></td></tr></table></figure><p>可以将宽数据转化为长数据，貌似这个函数比上面提到的几个都要好用</p><ul><li>data 表示输入的数据框</li><li>cols 表示需要合并的列是那些</li><li>names_to 表示合并后的列名</li><li>values_to 表示合并后保留值的那一列的名称</li></ul><h3 id="pivot-wider"><a href="#pivot-wider" class="headerlink" title="pivot_wider"></a>pivot_wider</h3><figure class="highlight r"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">population %&gt;% pivot_wider(id_cols = year, </span><br><span class="line">                           names_from = country, </span><br><span class="line">                           values_from = population)</span><br></pre></td></tr></table></figure><ul><li>id_cols 表示不动的列，即用什么个案来识别不同的观测</li><li>names_from 表示要展开成多列的列名</li><li>values_from 表示展开后的值是由哪一列中提取的value</li><li>values_fn 表示如果值不唯一，用什么函数进行计算（mean、sum等）</li></ul>]]></content>
    
    
    <summary type="html">关于R处理数据框会使用到的一些函数</summary>
    
    
    
    <category term="2023" scheme="http://example.com/categories/2023/"/>
    
    
    <category term="R学习笔记" scheme="http://example.com/tags/R%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>基因组序列比对原理及软件</title>
    <link href="http://example.com/2023/01/18/%E5%9F%BA%E5%9B%A0%E5%BA%8F%E5%88%97%E6%AF%94%E5%AF%B9/"/>
    <id>http://example.com/2023/01/18/%E5%9F%BA%E5%9B%A0%E5%BA%8F%E5%88%97%E6%AF%94%E5%AF%B9/</id>
    <published>2023-01-18T00:00:00.000Z</published>
    <updated>2023-01-26T20:08:03.096Z</updated>
    
    <content type="html"><![CDATA[<h1 id="基因组序列比对原理及软件"><a href="#基因组序列比对原理及软件" class="headerlink" title="基因组序列比对原理及软件"></a>基因组序列比对原理及软件</h1><p>进行基因的序列比对首先要了解两个概念：</p><ul><li>同源（homology）：两段序列来自于同一个祖先，在后来进化的分化过程中慢慢地各自发生了一些替换或者插入缺失突变，也就是说两段序列不再完全精确的相同。</li><li>相似（similarity）：单纯地指两段序列碱基排序相同，但不具有生物学意义。</li></ul><p><em><strong>同源的序列一定是相似的，但相似的序列不一定是同源的。</strong></em></p><p><em><strong>如果能事先确定两条序列的同源性再决定是否比对，这样得到的结果会更有意义。</strong></em></p><p>序列比对软件算法分支：</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/dshfuk.png" alt="dshfuk" style="zoom: 50%;" /><h2 id="局部比对"><a href="#局部比对" class="headerlink" title="局部比对"></a>局部比对</h2><p>两条亲缘关系较远的核酸序列可能只在一些片段上相似，局部比对就可以找到这些局部相似的片段。局部比对允许两条序列不必完整的找到最佳比对方式，只需要使用序列中的某些部分获得最佳匹配得分即可。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/7836591.png" alt="7836591" style="zoom: 50%;" /><p><em><strong>局部比对算法更关注于两条序列的相同点，也就是说我们在寻找两条序列的相似性时通常使用局部比对算法（物种分类、基因注释）。</strong></em></p><h3 id="Blast"><a href="#Blast" class="headerlink" title="Blast"></a>Blast</h3><p>使用的就是局部比对算法，可以在线比对。常用的功能如下：</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/948578.png" alt="948578" style="zoom: 50%;" /><p>Blast比对最主要的应用就是物种鉴定和基因功能注释。</p><h4 id="物种鉴定"><a href="#物种鉴定" class="headerlink" title="物种鉴定"></a>物种鉴定</h4><p>拿到一条未知的序列可以直接前往nt库或者nr进行比对来鉴定。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#数据库写前缀就可以</span></span><br><span class="line">blastn -db database/nt -query test.fasta -out blastn.out -outfmt <span class="number">6</span> -evalue <span class="number">1</span>e-<span class="number">5</span> -num_threads <span class="number">12</span></span><br></pre></td></tr></table></figure><h4 id="基因功能注释"><a href="#基因功能注释" class="headerlink" title="基因功能注释"></a>基因功能注释</h4><p>原理也是通过比对已知的序列信息来得到未知的序列中可能包含的信息。所以可以看出比对时所使用的数据库很重要，如果数据库有错误那么比对的结果就也会出错。一般使用nr、COG等数据库。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">blastx -db database/nr -query gene.fa -out blastx.out</span><br></pre></td></tr></table></figure><h3 id="Diamond"><a href="#Diamond" class="headerlink" title="Diamond"></a>Diamond</h3><p>与blast类似，diamond也是应用于序列比对方面的工具，比对完成之后可以直接导入megan软件进行物种分类以及数据可视化。相比较于blast，diamond的运行速度更快但是只能进行氨基酸水平的比对，不能进行核酸水平的比对。</p><p><em><strong>要注意diamond库与diamond软件的匹配。</strong></em></p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#diamond物种鉴定</span></span><br><span class="line">diamond blastx -<span class="keyword">q</span> test.fastq --db database/nr -o test -p <span class="number">12</span> -f <span class="number">100</span></span><br><span class="line"><span class="comment">#利用blastp比对两条氨基酸序列</span></span><br><span class="line">diamond makedb --in ref.faa --db <span class="keyword">ref</span></span><br><span class="line">diamond blastp -<span class="keyword">q</span> query.faa -d <span class="keyword">ref</span> -o blastp.txt -p <span class="number">12</span> -f <span class="number">6</span></span><br></pre></td></tr></table></figure><h2 id="全局比对"><a href="#全局比对" class="headerlink" title="全局比对"></a>全局比对</h2><p>衡量两条序列的整体相似性，不关注于局部。全局比对尝试获得两条完整序列之间的最佳比对。</p><p>全局比对主要用于比较两个基因组之间的同源性，绘制共线性图等等，也常用于基因组结构变异的检测。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/74365.png" alt="74365" style="zoom: 50%;" /><p><em><strong>全局比对更加关注于找到两条序列的差异，所以在比较两条序列的差异时我们常使用全局比对。</strong></em></p><h3 id="Mummer（Maximal-Unique-Matcher）"><a href="#Mummer（Maximal-Unique-Matcher）" class="headerlink" title="Mummer（Maximal Unique Matcher）"></a>Mummer（Maximal Unique Matcher）</h3><p>全局比对软件。该软件集合了一系列功能，例如基因组比对、共线性分析、同源序列查找等。</p><h4 id="比对"><a href="#比对" class="headerlink" title="比对"></a>比对</h4><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#比对</span></span><br><span class="line">nucmer ref.fna qd23.fna</span><br><span class="line"><span class="comment">#过滤delta结果</span></span><br><span class="line">delta-filter -<span class="number">1</span> -<span class="keyword">q</span> -r out.delta &gt;out.filter</span><br></pre></td></tr></table></figure><p>-q -r参数分别表示仅保留query或者ref上的最佳位置，允许多条ref或者query在另一条上堆叠。-1 则表示取两者的交集（好像得到的结果和-q -r同时输入结果一样）。如下图，-q则保留左2，-r保留右3。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/shighi.png" alt="shighi" style="zoom: 67%;" /><h4 id="显示比对差异"><a href="#显示比对差异" class="headerlink" title="显示比对差异"></a>显示比对差异</h4><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#显示比对结果 需要给出两条序列在文件中的编号</span></span><br><span class="line"><span class="keyword">grep</span> <span class="string">&quot;&gt;&quot;</span> out.filter</span><br><span class="line">show-aligns out.filter NC_016846.<span class="number">1</span> contig_1_pilon</span><br><span class="line"><span class="comment">#显示差异(分别以q和r为准)</span></span><br><span class="line">show-diff out.filter -<span class="keyword">q</span></span><br><span class="line">show-diff out.filter -r</span><br><span class="line"><span class="comment">#显示突变位点</span></span><br><span class="line">show-snps -C -H -I -T -r -<span class="number">1</span> out.filter &gt;out.snp</span><br><span class="line"><span class="comment">#显示变异坐标</span></span><br><span class="line">show-coords out.filter -r &gt;out.coords</span><br><span class="line"><span class="comment">#mummerplot绘图(共线性结果图)</span></span><br><span class="line">mummerplot -p p1 out.filter --png</span><br></pre></td></tr></table></figure><h2 id="测序数据比对"><a href="#测序数据比对" class="headerlink" title="测序数据比对"></a>测序数据比对</h2><p>高通量的测序数据分析一般有两条途径，一条就是将reads拼接得到相对较长的序列，另一条是不经过拼接直接与参考序列比对。由于拼接基因组会消耗较多的计算资源，目前很多分析都是直接使用测序数据比对的方式来分析数据。</p><p>测序数据比对的意义：</p><ol><li>得到每个位点的细节信息：参考序列上的某个位点是否被覆盖到，有多少reads覆盖。</li></ol><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/dsfhas.png" alt="dsfhas" style="zoom: 33%;" /><ol start="2"><li>变异检测：比较参考序列与测序样品覆盖位点是否一致，如果不一致那么就有可能是潜在的变异位点。</li></ol><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/sduhfajk.png" alt="sduhfajk" style="zoom: 33%;" /><ol start="3"><li><p>基因表达量计算：将RNAseq测序数据与参考序列进行比较。如两个相同长度的基因A和B，在相同实验测序深度的情况下，A的基因覆盖度100X而B只有50X，则两者基因表达差异为2倍，A基因为高表达。</p></li><li><p>计算覆盖深度：根据计算每个位点比对上的reads数目可以得到覆盖深度。将全部比对数据除以基因组总长就可以平均覆盖深度。如人基因组中某个染色体的基因覆盖深度出奇的高那么就有可能具有某种染色体疾病（21三体综合症）。</p></li><li><p>计算覆盖比例：将参考序列被reads覆盖的位点除以位点总数，即可得到覆盖比例。覆盖比例越高证明两者之间的亲缘关系越近。</p></li><li><p>计算reads利用率：将比对上的reads数除以总reads数。利用率越高说明测序错误越少，样品与参考基因之间的亲缘关系越近。</p></li><li><p>组装结果纠错：reads与拼接结果比对就是纠错，reads与参考序列比对就是找突变位点。</p></li><li><p>微生物鉴定：得到测序数据后可以不经过拼接直接与物种分类数据库进行比对用于鉴定微生物。</p></li><li><p>基因组成环鉴定：如果测序数据可以比对上基因组的首尾两端，则认为基因组成环，成环是细菌基因组是否为完成图的重要标志。</p></li><li><p>reads之间的overlap关系：三代测序reads与reads之间直接进行比对就可以得到reads之间的overlap关系，用于基因组的拼接。</p></li></ol><h3 id="短序列比对（二代测序）"><a href="#短序列比对（二代测序）" class="headerlink" title="短序列比对（二代测序）"></a>短序列比对（二代测序）</h3><p>短序列比对的特点：</p><ol><li>比对结果是整条比对得上或者比对不上，不能像blast一样分开比对</li><li>比对仅能允许一定数目的错配和空位</li><li>序列太短，会出现一条序列比对到多个位置的情况</li><li>数据量较大时比对比较耗时</li></ol><p>比对结果（pair end）：</p><ul><li>reads比对不上</li><li>reads比对上<ul><li>单个比对上（或者两者比对上的位置不在正常的insert size 下）</li><li>双端都能比对上<ul><li>一对一，无错配</li><li>一对一，有错配</li><li>一对多，无错配</li><li>一对多，有错配</li></ul></li></ul></li></ul><h4 id="bwa（bwa-mem2）比对"><a href="#bwa（bwa-mem2）比对" class="headerlink" title="bwa（bwa-mem2）比对"></a>bwa（bwa-mem2）比对</h4><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#参考序列建立索引</span></span><br><span class="line">bwa <span class="keyword">index</span> ref.fa</span><br><span class="line"><span class="comment">#bwa比对</span></span><br><span class="line">bwa mem ref.fa illumina_1.fastq.gz illumina_2.fastq.gz &gt;test.sam</span><br><span class="line"><span class="comment">#sam转bam</span></span><br><span class="line">samtools <span class="keyword">sort</span> -O bam -o test.sorted.bam test.sam </span><br></pre></td></tr></table></figure><h3 id="长序列比对（三代测序）"><a href="#长序列比对（三代测序）" class="headerlink" title="长序列比对（三代测序）"></a>长序列比对（三代测序）</h3><p>随着三代测序技术的发展，目前已经开发出多款适用于三代测序数据的比对软件，如minimap2等。</p><h4 id="Minimap2"><a href="#Minimap2" class="headerlink" title="Minimap2"></a>Minimap2</h4><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#minimap2建立索引</span></span><br><span class="line">minimap2 ref.fa -d ref.min</span><br><span class="line"><span class="comment">#nanopore数据比对</span></span><br><span class="line">minimap2 -ax <span class="keyword">map</span>-ont ref.fa ../nanopore.fastq.gz -t <span class="number">12</span> -o test.nano.sam</span><br><span class="line"><span class="comment">#pacbio数据比对</span></span><br><span class="line">minimap2 -ax <span class="keyword">map</span>-pb ref.fa ../pacbio.fastq.gz -t <span class="number">12</span> -o test.pac.sam</span><br><span class="line"><span class="comment">#reads直接比对找overlap</span></span><br><span class="line">minimap2 -<span class="keyword">x</span> ava-ont ../nanopore.fastq.gz ../nanopore.fastq.gz &gt;overlap.paf</span><br></pre></td></tr></table></figure><p>有一个<a href="https://tom-poorten.shinyapps.io/dotplotly_shiny/">在线网站</a>可以查看paf文件。<a href="https://github.com/lh3/miniasm/blob/master/PAF.md">paf文件介绍网站</a>。</p>]]></content>
    
    
    <summary type="html">整理基因序列比对中会使用到的软件及其基本的比对原理</summary>
    
    
    
    <category term="2023" scheme="http://example.com/categories/2023/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>宏基因组基因预测及功能注释</title>
    <link href="http://example.com/2023/01/16/%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E5%9F%BA%E5%9B%A0%E9%A2%84%E6%B5%8B%E5%8F%8A%E5%8A%9F%E8%83%BD%E6%B3%A8%E9%87%8A/"/>
    <id>http://example.com/2023/01/16/%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E5%9F%BA%E5%9B%A0%E9%A2%84%E6%B5%8B%E5%8F%8A%E5%8A%9F%E8%83%BD%E6%B3%A8%E9%87%8A/</id>
    <published>2023-01-16T00:00:00.000Z</published>
    <updated>2023-01-18T20:34:55.655Z</updated>
    
    <content type="html"><![CDATA[<h1 id="宏基因组基因预测及功能注释"><a href="#宏基因组基因预测及功能注释" class="headerlink" title="宏基因组基因预测及功能注释"></a>宏基因组基因预测及功能注释</h1><h2 id="基因预测（Predict）"><a href="#基因预测（Predict）" class="headerlink" title="基因预测（Predict）"></a>基因预测（Predict）</h2><h3 id="开放阅读框（Open-reading-frame）"><a href="#开放阅读框（Open-reading-frame）" class="headerlink" title="开放阅读框（Open reading frame）"></a>开放阅读框（Open reading frame）</h3><p>一个起始密码子到一个终止密码子之间的基因部分就叫做一个开放阅读框。ORF不一定是基因，但基因一定是ORF。</p><p>每一段序列都有6种读取方式（正链3种，负链3种），其中有的属于开放阅读框而有的则不能编码。</p><h3 id="Prodigal"><a href="#Prodigal" class="headerlink" title="Prodigal"></a>Prodigal</h3><p>该软件可以快速预测<strong>原核生物</strong>的基因信息。默认密码子表是第11套（支原体用第4套）。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">prodigal -i test.fa -d test.ffn -a test.faa -o test.gff -f gff</span><br></pre></td></tr></table></figure><ul><li><p>ffn文件是基因的核酸序列。</p></li><li><p>faa文件是翻译过后的基因氨基酸序列。</p></li><li><p>gff(gene feature file)文件是一种列表格式，记录一段序列起始和结束的位点，表示基因的坐标（sanger定义的一种格式）。</p></li></ul><p><em><strong>通过计算可以发现原核生物基因组中基因所占的部分较高，说明重复序列较少（存储效率高）。</strong></em></p><h3 id="Glimmer"><a href="#Glimmer" class="headerlink" title="Glimmer"></a>Glimmer</h3><p>也可以快速预测原核生物的基因信息，但不如prodigal方便，不能直接输出核酸序列，需要从列表里提取。不建议使用。</p><h2 id="基因功能注释（Annotation）"><a href="#基因功能注释（Annotation）" class="headerlink" title="基因功能注释（Annotation）"></a>基因功能注释（Annotation）</h2><h3 id="功能注释数据库"><a href="#功能注释数据库" class="headerlink" title="功能注释数据库"></a>功能注释数据库</h3><ul><li><p>NR数据库：非冗余的蛋白数据库。已发表的基因转录出的功能蛋白都收录，大而全，但准确性存疑。</p></li><li><p>UniProt：比较精确，其中的蛋白序列都是经过验证的，但数据库较小。</p></li><li><p>Gene Ontology：为了统一相同序列在不同数据库中名称不同而建立的库，使用统一的语言描述功能。</p></li><li><p>CARD数据库</p></li><li><p>KEGG数据库：基因的代谢信息，通路中的基因信息比较丰富。</p></li><li><p>COG数据库</p></li><li><p>CAZy数据库</p></li></ul><h3 id="Eggnog-mapper"><a href="#Eggnog-mapper" class="headerlink" title="Eggnog-mapper"></a>Eggnog-mapper</h3><p>Eggnog-mapper是一个基因功能注释流程，可以自动完成基因的功能注释，其内置了COG、KOG、KEGG、GO、BiGG等数据库（KEGG数据库是免费版本）。调用的是Diamond进行比对。</p><p><em><strong>由于python版本问题，最好在虚拟环境中运行。</strong></em></p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">emapper.py -i test.faa --output test.annotation -m diamond</span><br></pre></td></tr></table></figure><p>输入数据可以是faa氨基酸序列，也可以输入基因序列，但建议还是输入氨基酸序列。–data_dir还可以指定数据库的位置。</p><p>生成两个文件 .annotations和.seed_orthologs。比较重要的就是第一列和最后一列。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/dshfu.png" alt="dshfu" style="zoom:67%;" /><p>这个软件也提供一个在线的比对<a href="http://eggnog-mapper.embl.de/">网站</a>。</p>]]></content>
    
    
    <summary type="html">分析和预测宏基因组中的基因并且注释其功能</summary>
    
    
    
    <category term="2023" scheme="http://example.com/categories/2023/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>多样性指数</title>
    <link href="http://example.com/2023/01/09/Alpha%E5%92%8CBeta%E5%A4%9A%E6%A0%B7%E6%80%A7/"/>
    <id>http://example.com/2023/01/09/Alpha%E5%92%8CBeta%E5%A4%9A%E6%A0%B7%E6%80%A7/</id>
    <published>2023-01-09T00:00:00.000Z</published>
    <updated>2023-01-11T12:18:53.104Z</updated>
    
    <content type="html"><![CDATA[<h1 id="多样性指数"><a href="#多样性指数" class="headerlink" title="多样性指数"></a>多样性指数</h1><h2 id="Alpha多样性指数"><a href="#Alpha多样性指数" class="headerlink" title="Alpha多样性指数"></a>Alpha多样性指数</h2><p>Alpha多样性指数是用于观测单一种群内生物种类数量以及物种间相对多度的一种指数。有以下三个基本概念：</p><ol><li>丰富度（Richness）：群落内物种的数量。</li><li>丰度（Abundance）：物种所包含的个体数量。</li><li>均匀度（Evenness）：样本内不同物种所包含的个体数量的一致程度。</li></ol><p>这里主要介绍Chao1指数、Shannon指数、Simpson指数。</p><h3 id="Chao1指数"><a href="#Chao1指数" class="headerlink" title="Chao1指数"></a>Chao1指数</h3><p>$$<br>S_1=S_{obs}+\frac{F^2_1}{2F_2}<br>$$</p><p><strong>公式：</strong>S<sub>obs</sub>为观察到的物种数，F<sub>1</sub>为只出现一次的物种数，F<sub>2</sub>为出现两次的物种数。</p><p><strong>定义解释：</strong>在对群落样本进行抽样的时候如果还有没有被发现的物种，那么抽样的结果中就一直会存在只出现一次的物种，一直抽样直到没有只出现一次的物种时（也就是观察到的物种至少出现两次）就可以认为此时的被抽出的物种数目最接近样本的理论最高值。</p><p><em><strong>Chao1指数越大，样本内的物种种类也就越多，Alpha多样性越高。</strong></em></p><h3 id="Shannon指数"><a href="#Shannon指数" class="headerlink" title="Shannon指数"></a>Shannon指数</h3><p>$$<br>H=-\sum(P_i)(\log_2P_i)<br>$$</p><p>$$<br>P_i=\frac{n_i}{N}<br>$$</p><p><strong>公式：</strong>P<sub>i</sub>为第i种物种的个体数占总个体数N的比例。</p><p><strong>定义解释：</strong>对整个群落的样本进行抽样，预测下一个抽到的物种是什么，该指数反映的就是抽取到的物种的不确定性。</p><p><em><strong>群落的丰富度越高，且不同物种分布越均匀，那么就越难预测下个采集的物种是什么，不确定性也就越高，Shannon指数也就越大，Alpha多样性越高。</strong></em></p><h3 id="Simpson指数"><a href="#Simpson指数" class="headerlink" title="Simpson指数"></a>Simpson指数</h3><p>$$<br>D_s=1-\sum^s_{i=1}p_i^2<br>$$</p><p><strong>公式：</strong>P<sub>i</sub>为第i种物种的个体数占总个体数的比例。</p><p><strong>定义解释：</strong>在足够大的样本中，有放回的先后抽取两个样本，抽到同一个物种的概率就是P<sub>i</sub><sup>2</sup>，再将所有物种的概率相加并被1减去就得到了Simpson指数。也可以看出Simpson系数的范围在0-1之间。</p><p><em><strong>群落的丰富度越高，且不同物种分布越均匀，Simpson指数也就越大，越接近于1，也就代表着Alpha多样性越高。</strong></em></p><h2 id="Beta多样性指数"><a href="#Beta多样性指数" class="headerlink" title="Beta多样性指数"></a>Beta多样性指数</h2><p>Beta多样性反映的是不同种群间生物多样性的比较。要想得到Beta多样性指数，首先要从得到不同样品之间的距离矩阵开始。</p><h3 id="距离矩阵算法"><a href="#距离矩阵算法" class="headerlink" title="距离矩阵算法"></a>距离矩阵算法</h3><table><thead><tr><th></th><th>基于独立OTU</th><th>基于系统发育树</th></tr></thead><tbody><tr><td>加权</td><td>Bray-curtis</td><td>weighted unifrac</td></tr><tr><td>非加权</td><td>Jaccard</td><td>Unweighted unifrac</td></tr></tbody></table><p>距离矩阵的算法主要就是以上这四种，通过这些算法来得到样本间的距离最后得到距离矩阵。加权和不加权的区别在于是否不仅考虑物种的有无还要考虑物种间丰度的距离。基于OTU的算法是根据<strong>不同物种</strong>在不同样品中的分布不同（加权或不加权）来计算距离的，而基于系统发育树的算法则考虑的是<strong>不同样品间的物种进化关系</strong>。</p><p>一般来说基于OTU和系统发育树的计算方法都要使用。对于选择加权算法还是非加权算法，加权算法对于丰度较高的物种敏感性更高，非加权算法对稀有物种的敏感性更高。</p><h3 id="PCA分析"><a href="#PCA分析" class="headerlink" title="PCA分析"></a>PCA分析</h3><p>主成分分析(Principal componentanalysis)。PCA采用降维的思想，将组成复杂的数据信息（样本中包含大量物种信息，没有已知的坐标轴可以解释分布）进行降维排序，寻找能最大程度反应规律的坐标系。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/12314.png" alt="12314" style="zoom:67%;" /><p>最后得到的结果横纵轴分别代表第一第二主成分，并且会标注该主成分对样品OTU差异的贡献比例。同组样品的距离远近说明样品的重复性强弱，不同组样本的远近就反映了组间的群落差异。</p><p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/7387.png" alt="7387"></p><h3 id="PCoA分析"><a href="#PCoA分析" class="headerlink" title="PCoA分析"></a>PCoA分析</h3><p>主坐标分析(Principal co-ordinates analysis)。PCoA分析同样采用降维的思想对样本关系进行低维平面的投影，不同的是，PCA分析是对样本中物种丰度数据的直接投影，而PCoA则是将样本数据经过不同距离算法获得样本距离矩阵的投影，在图形中样本点的距离等于距离矩阵中的差异数据距离。</p><p>将样品间的距离在坐标轴上进行不同角度投影，找到最能够反映原始距离分布的前两个坐标轴进行数据输出。 与PCA不同，PCoA是对样品间距离（连线）的投影，在二维平面上展示的是样品间距离的信息，而不是样品的位置信息（也就是说其实PCoA在多维得到的并不是一个有位置信息的图，点之间的位置关系都是相对存在的）。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/783758.png" alt="783758" style="zoom:67%;" /><p>PCoA的结果图选择输入不同的相似距离矩阵（算法）得到的结果存在一定程度的差异。最后得到的结果横纵轴分别代表第一第二主坐标，并且会标注该主坐标对样品距离矩阵差异的贡献比例。同组样品的距离远近说明样品的重复性强弱，不同组样本的远近就反映了组间的样本距离差异。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/2843758.png" alt="2843758" style="zoom:67%;" /><h3 id="UMDS分析"><a href="#UMDS分析" class="headerlink" title="UMDS分析"></a>UMDS分析</h3><p>非量度多维标度分析法(Non-metric multidimensional scaling)。NMDS分析与PCoA分析的相同点在于两者都使用样本相似性距离矩阵进行降维排序分析，从而在二维平面上对样本关系做出判断。不同于PCoA分析，NMDS弱化了对实际距离数值的依赖，更加强调数值间的排名（秩次），例如三个样本的两两相似性距离为（1,2,3）或（10,20,30）在NMDS分析上的排序一致，所呈现的效果相同。</p><p>有一个stress值专门用来评价UMDS的结果图降维效果，越接近于0说明越能反映数据排序的真实情况，一般要求&lt;0.1。</p><p>选择不同的距离矩阵算法同样也会对UMDS结果图产生影响。同组样本点距离远近说明了样本的重复性强弱，不同组样本的远近则反应了组间样本距离在秩次（数据排名）上的差异。另外，NMDS是距离值的秩次（数据排名）信息的评估，图形上样本信息仅反映样本间数据秩次信息的远近，而不反映真实的数值差异，横纵坐标轴并无权重意义，横轴不一定比纵轴更加重要。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/48258.png" alt="48258" style="zoom:67%;" /><h3 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h3><table><thead><tr><th align="center"></th><th align="center">PCA</th><th align="center">PCoA</th><th align="center">NMDS</th></tr></thead><tbody><tr><td align="center">输入数据</td><td align="center">OTU丰度表</td><td align="center">相似性距离表</td><td align="center">相似性距离表</td></tr><tr><td align="center">常见分析点</td><td align="center">OTU分析</td><td align="center">Beta多样性分析</td><td align="center">Beta多样性分析</td></tr><tr><td align="center">分析信息</td><td align="center">原始OTU数据</td><td align="center">原始相似性距离</td><td align="center">相似性距离数值排序</td></tr><tr><td align="center">是否含stress值</td><td align="center">否</td><td align="center">否</td><td align="center">是</td></tr><tr><td align="center">坐标是否有权重意义</td><td align="center">是</td><td align="center">是</td><td align="center">否</td></tr></tbody></table>]]></content>
    
    
    <summary type="html">描述微生物群落的多样性指数</summary>
    
    
    
    <category term="2023" scheme="http://example.com/categories/2023/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>宏基因组测序及分析流程整理</title>
    <link href="http://example.com/2023/01/04/%E4%BA%8C%E4%BB%A3%E3%80%81%E4%B8%89%E4%BB%A3%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E6%B5%8B%E5%BA%8F%E5%8F%8A%E5%88%86%E6%9E%90%E6%B5%81%E7%A8%8B/"/>
    <id>http://example.com/2023/01/04/%E4%BA%8C%E4%BB%A3%E3%80%81%E4%B8%89%E4%BB%A3%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E6%B5%8B%E5%BA%8F%E5%8F%8A%E5%88%86%E6%9E%90%E6%B5%81%E7%A8%8B/</id>
    <published>2023-01-04T00:00:00.000Z</published>
    <updated>2023-01-12T16:57:35.454Z</updated>
    
    <content type="html"><![CDATA[<h1 id="宏基因组测序及分析流程"><a href="#宏基因组测序及分析流程" class="headerlink" title="宏基因组测序及分析流程"></a>宏基因组测序及分析流程</h1><h2 id="二代测序数据拼接"><a href="#二代测序数据拼接" class="headerlink" title="二代测序数据拼接"></a>二代测序数据拼接</h2><p>质控完成之后，宏基因组二代测序的数据拼接软件使用基本和单菌拼接保持一致，目前大部分软件都支持宏基因组的拼接模式。</p><h3 id="SPAdes"><a href="#SPAdes" class="headerlink" title="SPAdes"></a>SPAdes</h3><p>该软件支持宏基因组的拼接模式，<strong>只需要加上参数–meta即可</strong>。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">spades.py --meta -<span class="number">1</span> read_1.fastq.gz -<span class="number">2</span> read_2.fastq.gz -o spades_result -t <span class="number">24</span></span><br></pre></td></tr></table></figure><h3 id="megahit"><a href="#megahit" class="headerlink" title="megahit"></a>megahit</h3><p>该软件运行速度快于SPAdes且占用的计算资源也比较少，<strong>但组装效果不如前者</strong>。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">megahit -o megahit -<span class="number">1</span> read_1.fastq.gz -<span class="number">2</span> read_2.fastq.gz -t <span class="number">24</span></span><br></pre></td></tr></table></figure><h2 id="三代测序数据拼接"><a href="#三代测序数据拼接" class="headerlink" title="三代测序数据拼接"></a>三代测序数据拼接</h2><h3 id="flye"><a href="#flye" class="headerlink" title="flye"></a>flye</h3><p>质控后，三代测序宏基因组数据仍然可以使用flye进行组装，它其中有一个metaflye的模块专门用来组装宏基因组数据。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flye --nano-raw nano.fastq.gz -g <span class="number">5</span>m -t <span class="number">12</span> -o metaflye_result --meta</span><br></pre></td></tr></table></figure><p><strong>值得注意的是在进行完数据拼接后还可以使用纠错软件进行纠错（pilon、racon等），这里可能会涉及到使用二代测序数据辅助纠错</strong>。</p><h2 id="二代三代软件拼接结果对比"><a href="#二代三代软件拼接结果对比" class="headerlink" title="二代三代软件拼接结果对比"></a>二代三代软件拼接结果对比</h2><p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/image.png"></p><p>这里可以很明显的看到同为二代测序拼接，megahit所拼接出的contigs不如SPAdes长。Nanopore三代测序在读长方面的优势还是比较明显的。</p><h2 id="宏基因组物种分类"><a href="#宏基因组物种分类" class="headerlink" title="宏基因组物种分类"></a>宏基因组物种分类</h2><h3 id="物种分类数据库"><a href="#物种分类数据库" class="headerlink" title="物种分类数据库"></a>物种分类数据库</h3><p>当前宏基因组物种分类的方法主要就是使用NCBI的物种分类数据库进行比对分类。将测序得到的序列和数据库（如nt库、nr库、refseq库）中的序列进行比对，如果两者具有很好的相似性则认为两者为同源序列，具有共同的祖先。</p><ul><li>nt库为Nucleotide Sequence Database，即核酸序列数据库，其中含有所有目前已知的核酸序列（基因组），是有冗余的。</li><li>nr库为Non-Redundant Protein Sequence Database，即非冗余蛋白库（只包含基因预测的蛋白而不是基因组）。一般DIAMOND比对使用这个数据库。</li><li>refseq库是NCBI官方验证的可以代表某个物种的参考序列所组成的数据库，是非冗余的，<strong>一般物种分类就是使用这个</strong>。</li><li>taxonomy数据库。这个库里的内容主要是物种的名字和种系，这些物种都至少在遗传数据库中有一条核酸或蛋白序列。其目的是为序列数据库建立一个一致的种系发生分类学，<strong>物种分类也需要这个</strong>。</li></ul><h3 id="物种鉴定软件"><a href="#物种鉴定软件" class="headerlink" title="物种鉴定软件"></a>物种鉴定软件</h3><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/111.png" style="zoom:67%;" /><p>基本常用的软件都在上图中。一般DNA核酸比对还是使用<strong>Kraken2</strong>比较多，蛋白质一般使用<strong>DIAMOND</strong>和<strong>kauju</strong>，<strong>MetaPhlAn2</strong>也比较常用。</p><p><em><strong>可以使用mock数据集进行测试。</strong></em></p><h3 id="三代测序数据处理"><a href="#三代测序数据处理" class="headerlink" title="三代测序数据处理"></a>三代测序数据处理</h3><h4 id="Centrifuge"><a href="#Centrifuge" class="headerlink" title="Centrifuge"></a>Centrifuge</h4><p>这里主要介绍一下centrifuge软件，物种鉴定使用方式如下</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">centrifuge -<span class="keyword">x</span> centrifuge_h+p+v_20200318/hpv -U nanopore.fastq.gz --report-file report.tsv -S result.tsv -p <span class="number">64</span> &gt;centrifuge.log</span><br></pre></td></tr></table></figure><p>会输出两个结果</p><ol><li><p>按照reads进行结果统计的结果centrifuge_output.tsv</p><p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/image2.png" alt="image2"></p></li></ol><p>一共是八列，从左到右分别是reads ID、比对上的序列的Accession ID、物种分类ID、序列比对评分、第二比对结果的评分、比对上的部分的序列长度、总reads长度、该reads比对上的物种序列个数。</p><ol start="2"><li>按照比对上的物种进行的统计centrifuge_report.tsv</li></ol><p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/image%20(1).png" alt="image (1)"></p><p>一共是七列，从左到右分别是比对上的物种名字、物种分类ID、物种层级、基因组大小、比对上的reads数量（每一个reads可以比对上多个物种）、唯一比对上该物种的reads数量、丰度（比对上的区域/整个基因组的长度）。</p><p>在得到了结果之后就可以使用R等方式对tsv表格进行过滤。比如一条reads会比对到数据库中的多个物种，通常我们需要选择每条reads最优的比对，并且还要去除掉比对上的reads太少的物种。当然，命令行也能进行结果筛选。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk -F <span class="string">&quot;\t&quot;</span> <span class="string">&#x27;&#123;if ($3==&quot;species&quot; &amp;&amp; $6 &gt;5) print $1&quot;\t&quot;$6&#125;&#x27;</span> <span class="number">0</span>.<span class="number">01_</span>report.tsv &gt;<span class="number">0</span>.<span class="number">01</span>.txt</span><br></pre></td></tr></table></figure><p><em><strong>这里标记一篇文章，<a href="https://www.nature.com/articles/s41587-019-0156-5">Nanopore metagenomics enables rapid clinical diagnosis of bacterial lower respiratory infection</a>，这篇文章中有40个潜在肺炎病人肺部宏基因组测序的结果，可以通过Centrifuge比对的方式得到样品中占决定性多数的细菌种类，如果该细菌与肺炎有关那么就判定该患者有较大可能患有肺炎。该文章证明利用纳米孔基因组测序和宏基因组分析可以快速地进行临床诊断下呼吸道感染。其中的数据可以用来练习宏基因组物种分类。</strong></em></p><h3 id="二代测序数据处理"><a href="#二代测序数据处理" class="headerlink" title="二代测序数据处理"></a>二代测序数据处理</h3><p>这一部分的几个软件或流程基本都来自于<strong>Biobakery workflow</strong>。这个流程来自于哈佛的Huttenhower团队。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/32535.png" style="zoom:50%;" /><ol><li>数据质控：使用Kneaddata，该软件先调用Trimmomatic过滤数据，然后利用bowtie2或bmtagger比对去除宿主数据。</li><li>如果不拼接数据，则可以直接使用MetaPhlAn2或者Kraken2实现序列的物种分类及物种丰度分析。功能鉴定则可以使用Humann完成。</li><li>也可以先对Reads进行拼接（Megahit、Metaspades等软件），然后使用Prokka软件从组装好的Contig或者Scafford预测基因，并使用cd-hit构建非冗余基因集。然后利用Nr、COG、GO、KEGG等数据库对基因进行注释。</li><li>如果有多样品则可以进行分组统计，将得到的物种/基因/功能表格利用R或者STAMP等软件在这三个层次进行分析。</li></ol><h4 id="Kneaddata"><a href="#Kneaddata" class="headerlink" title="Kneaddata"></a>Kneaddata</h4><p>Kneaddata是一个数据质控过滤流程，整合了Fasqc质控，Trimmomatic数据过滤，Bowtie2比对数据库过滤宿主等功能。输入原始数据后就可以得到Cleandata。默认集成了人、小鼠、rRNA等数据库。如果是其他宿主，可以自行建库。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kneaddata -i reads_1.fastq.gz -i reads_2.fastq.gz -db path\Homo_sapiens -o kneaddata_output --remove-intermediate-output -v -t <span class="number">12</span> --trimmomatic-options <span class="string">&#x27;ILLUMINACLIP:~/miniconda3/envs/biobakery/share/trimmomatic/adapters/TruSeq3-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50&#x27;</span> --reorder --bowtie2-options <span class="string">&#x27;--very-sensitive --dovetail&#x27;</span> --run-fastqc-start --run-fastqc-end</span><br></pre></td></tr></table></figure><p><em><strong>DB：/data/Food/primary/R0987_nextgen/Erkang.Zhang/20221130_course/course_4_meta/kneadData_database/</strong></em></p><h4 id="MetaPhlAn"><a href="#MetaPhlAn" class="headerlink" title="MetaPhlAn"></a>MetaPhlAn</h4><p>MetaPhlan是用于二代测序物种分类的工具，利用快速比对工具Bowtie2与Marker基因集比对（非全基因组），所以运行速度非常的快。输入Kneaddata过滤后的数据就可以快速得到微生物群体中的物种组成。</p><p>MetaPhlAn调用Bowtie2比对，可以输入多种格式fasta、fastq、bowtie2out、sam等。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">metaphlan --input_type fastq --nproc <span class="number">12</span> --bowtie2out metagenome.bowtie2.bz2 reads_filter.<span class="number">1</span>.fastq.gz,reads_filter.<span class="number">2</span>.fastq.gz -o SRS011243_abundance_table.txt</span><br></pre></td></tr></table></figure><p>结果导出的表格分为两列，第一列为物种分类，按照层级从大到小排列。第二列是物种的相对丰度，每一层级加起来都是100%，有些软件输出的则是reads数目。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/4375.png" alt="4375" style="zoom:50%;" /><p><em><strong>DB：/data/Food/primary/R0987_nextgen/Erkang.Zhang/20221130_course/course_4_meta/metaphlan_database/</strong></em></p><h4 id="HUMAnN"><a href="#HUMAnN" class="headerlink" title="HUMAnN"></a>HUMAnN</h4><p>HUMAnN不仅可以通过调用MetaPhlAn完成物种组成部分还可以准确地获得微生物代谢途径和功能模块信息。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">humann --input-<span class="keyword">format</span> fastq --input reads_filter.<span class="number">1</span>.fastq.gz --input reads_filter.<span class="number">2</span>.fastq.gz --output result --threads <span class="number">12</span> --search-mode uniref9<span class="number">0</span></span><br></pre></td></tr></table></figure><p>结果会输出三个文件。</p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/452415.png" alt="452415" style="zoom:67%;" /><ol><li>基因家族文件（genefamilies）：群体中每个基因家族的丰度。基因家族是一组进化上相关的编码蛋白质序列，通常具有相似的功能。基因家族的丰度采用RPK表示（每kb的reads中该基因家族的含量），以此来标准化不同长度的基因家族的丰度。</li><li>通路丰度文件（pathabundance）：代表群体中通路的丰度。</li><li>通路覆盖文件（pathcoverage）</li></ol><p>另外，HUMAnM还支持比对到其他蛋白数据库的注释结果，以及对RPK的标准化/归一化处理，<a href="https://zhuanlan.zhihu.com/p/240910229">见该网站</a>。</p><p><em><strong>DB：/data/Food/primary/R0987_nextgen/Erkang.Zhang/20221130_course/course_4_meta/humann_database/</strong></em></p><h3 id="最终结果的可视化"><a href="#最终结果的可视化" class="headerlink" title="最终结果的可视化"></a>最终结果的可视化</h3><h4 id="Pavian可视化"><a href="#Pavian可视化" class="headerlink" title="Pavian可视化"></a>Pavian可视化</h4><p>Pavian是一款R包，<a href="https://fbreitwieser.shinyapps.io/pavian/">但也有网页形式</a>。可以用来可视化Kraken、MetaPhlAn、Centrifuge等软件的结果。如果要可视化Centrifuge的结果，需要先将其转化为Kraken的结果格式。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">centrifuge-kreport -<span class="keyword">x</span> centrifuge_p/p_compressed result_log.tsv &gt;kraken_result_log.tsv</span><br></pre></td></tr></table></figure><p>然后将其上传到网页上即可，可以绘制桑基图等。</p><h4 id="Megan-可视化"><a href="#Megan-可视化" class="headerlink" title="Megan 可视化"></a>Megan 可视化</h4><p>Megan是一款综合性的微生物物种分类工具，除了支持物种分类还支持功能分析（KEGG数据库使用的是免费版本，付费版Megan可以使用全数据库）。支持多种格式输入，diamond比对的daa格式、blast比对格式、sam、biom等等。也可以用最简单的tsv、csv，两列即可，第一列物种名称、第二列物种丰度信息或reads数目。</p><h4 id="GraPhlAn"><a href="#GraPhlAn" class="headerlink" title="GraPhlAn"></a>GraPhlAn</h4><p>也在Biobakery中，输入MetaPhlAn的结果可以直接绘制。</p><h2 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h2><ul><li>现在的宏基因组分析流程基本都是<strong>先拼接生成Contig</strong>再继续分析物种、基因。</li></ul>]]></content>
    
    
    <summary type="html">宏基因测序软件使用记录</summary>
    
    
    
    <category term="2023" scheme="http://example.com/categories/2023/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>二代、三代测序软件及分析流程整理</title>
    <link href="http://example.com/2022/12/09/%E5%9F%BA%E5%9B%A0%E6%B5%8B%E5%BA%8F%E5%88%86%E6%9E%90%E8%BD%AF%E4%BB%B6%E5%8F%8A%E6%B5%81%E7%A8%8B%EF%BC%88%E9%9D%9Emeta%EF%BC%89/"/>
    <id>http://example.com/2022/12/09/%E5%9F%BA%E5%9B%A0%E6%B5%8B%E5%BA%8F%E5%88%86%E6%9E%90%E8%BD%AF%E4%BB%B6%E5%8F%8A%E6%B5%81%E7%A8%8B%EF%BC%88%E9%9D%9Emeta%EF%BC%89/</id>
    <published>2022-12-09T00:00:00.000Z</published>
    <updated>2023-01-04T14:46:25.083Z</updated>
    
    <content type="html"><![CDATA[<h1 id="二代、三代测序软件及分析流程整理"><a href="#二代、三代测序软件及分析流程整理" class="headerlink" title="二代、三代测序软件及分析流程整理"></a>二代、三代测序软件及分析流程整理</h1><h2 id="二代测序拼接软件"><a href="#二代测序拼接软件" class="headerlink" title="二代测序拼接软件"></a>二代测序拼接软件</h2><h3 id="SPAdes"><a href="#SPAdes" class="headerlink" title="SPAdes"></a>SPAdes</h3><p>该软件是最常用的二代测序拼接软件。速度虽然没有soapdenovo快，但是结果似乎更加可靠，并且考虑到SOAPdenovo多年没有更新，SPAdes应该为首选。</p><p>另外，SPAdes 软件不仅支持 illumina 测序数据，还可用于Ion Torrent测序数据，PacBio测序数据、sanger 数据，Nanopore数据。并且可以加入其它拼接结果以作为辅助拼接（Hybrid）。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">spades.py -<span class="number">1</span> illumina_ninanjie_1_clean.fastq.gz -<span class="number">2</span> illumina_ninanjie_2_clean.fastq.gz -o spades_illumina -t <span class="number">24</span></span><br></pre></td></tr></table></figure><h3 id="SOAPdenovo"><a href="#SOAPdenovo" class="headerlink" title="SOAPdenovo"></a>SOAPdenovo</h3><p>SOAPdenovo 是由华大基因开发的 SOAP 软件包的一部分，主要用于短序列 reads 拼接，尤其是 illumina 测序数据。但已长时间无人维护。</p><h2 id="二代测序流程"><a href="#二代测序流程" class="headerlink" title="二代测序流程"></a>二代测序流程</h2><ol><li>获取测序数据</li><li>fastqc 质控</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fastqc -f fastq -o illumina_qc/ illumina_ninanjie_1.fastq.gz illumina_ninanjie_2.fastq.gz</span><br></pre></td></tr></table></figure><ol start="3"><li>fastp去除质量不好的位点</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fastp -i ../illumina_ninanjie_1.fastq.gz -o ../illumina_ninanjie_1_clean.fastq.gz -I ../illumina_ninanjie_2.fastq.gz -O ../illumina_ninanjie_2_clean.fastq.gz -z <span class="number">4</span> -<span class="keyword">q</span> <span class="number">20</span> -u <span class="number">30</span> -n <span class="number">10</span> -f <span class="number">20</span> -t <span class="number">10</span> -F <span class="number">20</span> -T <span class="number">10</span> -h clean.html</span><br></pre></td></tr></table></figure><ol start="4"><li>再次fastqc质控得到clean的数据</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fastqc -f fastq -o illumina_clean_qc/ illumina_ninanjie_1_clean.fastq.gz illumina_ninanjie_2_clean.fastq.gz</span><br></pre></td></tr></table></figure><ol start="5"><li>使用二代测序拼接软件对clean数据进行拼接</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">spades.py -<span class="number">1</span> illumina_ninanjie_1_clean.fastq.gz -<span class="number">2</span> illumina_ninanjie_2_clean.fastq.gz -o spades_illumina -t <span class="number">24</span></span><br></pre></td></tr></table></figure><ol start="6"><li>纠错</li></ol><h2 id="三代测序拼接软件"><a href="#三代测序拼接软件" class="headerlink" title="三代测序拼接软件"></a>三代测序拼接软件</h2><h3 id="flye（适合Pacbio和Nanopore）"><a href="#flye（适合Pacbio和Nanopore）" class="headerlink" title="flye（适合Pacbio和Nanopore）"></a>flye（适合Pacbio和Nanopore）</h3><p>flye 原来叫做abruijn，是一款适合单分子测序的拼接软件，适合处理Pacbio与Nanopore数据。flye 适合拼接多种数据集，从小的细菌基因组到很大的哺乳动物基因组都可以完成。</p><p>flye 其实是一个完整的拼接流程，原始测序数据作为输入，最后就可以直接输出经过纠错校正的基因组序列，同时，flye 也有一个独立的模块可以用来拼接宏基因组。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flye --nano-raw nanopore_ninanjie.fastq.gz -g <span class="number">120</span>m -t <span class="number">12</span> -o flye_nano</span><br></pre></td></tr></table></figure><h3 id="canu（适合Pacbio和Nanopore）"><a href="#canu（适合Pacbio和Nanopore）" class="headerlink" title="canu（适合Pacbio和Nanopore）"></a>canu（适合Pacbio和Nanopore）</h3><p>canu 是一款三代测序数据拼接软件，适用于 Pacbio 与 Nanopore 测序数据。canu 软件其实具有悠久的历史，虽然只发表于 2017 年，但其源于著名的 Celera Assembler。Celera Assembler 主要用于一代测序，现在已不再更新。canu 延续了Celera Assembler工具的组装原理，专门用于三代长读长以及错误率较高的测序的结果组装。canu软件缺点是非常消耗资源，拼接比较耗时，默认会使用所有 CPU。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">canu -d canu -p canu genomeSize=<span class="number">5.4</span>m maxThreads=<span class="number">24</span> -nanopore-raw ../data/clean.filtlong.fq.gz</span><br></pre></td></tr></table></figure><h3 id="wtdbg2（适合Pacbio和Nanopore）"><a href="#wtdbg2（适合Pacbio和Nanopore）" class="headerlink" title="wtdbg2（适合Pacbio和Nanopore）"></a>wtdbg2（适合Pacbio和Nanopore）</h3><p>wtdbg2是阮珏写的另外一个拼接软件，可以用于 PacBio 或Nanopore的数据拼接，该软件无需纠错直接进行拼接，然后生成一致性序列。wtdbg2运行速度比 canu 和 falcon 都要快很多。能够拼接人全基因组序列，甚至是32Gb的蝾螈基因组。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wtdbg2.pl -t <span class="number">12</span> -<span class="keyword">x</span> ont -g <span class="number">5.4</span>m -o wtdbg2 ../data/clean.filtlong.fq.gz</span><br></pre></td></tr></table></figure><h2 id="三代测序流程"><a href="#三代测序流程" class="headerlink" title="三代测序流程"></a>三代测序流程</h2><ol><li>获取测序数据</li><li>质控（Nanopore使用nanoplot进行质控）</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">NanoPlot --fastq nanopore.fastq.gz -o nanoplot</span><br></pre></td></tr></table></figure><ol start="3"><li>过滤数据</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">filtlong --min_length <span class="number">2000</span> --min_mean_q <span class="number">90</span> nanopore.fastq.gz | gzip &gt;clean.filtlong.fq.gz</span><br></pre></td></tr></table></figure><ol start="4"><li>再质控</li></ol><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">NanoPlot --fastq clean.filtlong.fq.gz -o nanoplot_clean</span><br></pre></td></tr></table></figure><ol start="5"><li>使用三代测序软件进行拼接（flye、canu、wtbdg2等）</li><li>纠错</li></ol><h2 id="拼接结果优化"><a href="#拼接结果优化" class="headerlink" title="拼接结果优化"></a>拼接结果优化</h2><p>拼接结果优化，也就是纠错（polishing）。</p><h3 id="Medeka"><a href="#Medeka" class="headerlink" title="Medeka"></a>Medeka</h3><p>Medaka是由 Oxford Nanopore 开发的开源软件。<strong>使用时最好创建虚拟环境，否则容易报错。</strong></p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#进入虚拟环境运行</span></span><br><span class="line">conda activate medaka</span><br><span class="line"><span class="comment">#运行软件</span></span><br><span class="line">READ=../data/nanopore.sra.fastq.gz</span><br><span class="line">medaka_consensus -i $READ -d assembly.fasta -o medaka_result -m r941_min_high_g36<span class="number">0</span> -v medaka.vcf -t <span class="number">24</span> &gt;medaka.log</span><br></pre></td></tr></table></figure><h3 id="Pilon"><a href="#Pilon" class="headerlink" title="Pilon"></a>Pilon</h3><p>Pilon 是由 broadinstitute 研究所开发的纠错工具，输入拼接结果（三代）以及原始测序数据（二代）比对到拼接结果（三代）的bam 文件即可。 输入的 bam 可以来自于二代测序数据的比对，也可以来自于三代测序数据比对得到的 bam，注意bam 文件需要排序并建立索引。<strong>并且Pilon在使用时要注意java使用的内存空间，修改Pilon.jar来增加上限，否则报错。</strong></p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#bwa建立索引</span></span><br><span class="line">bwa <span class="keyword">index</span> medaka.fasta</span><br><span class="line"><span class="comment">#使用bwa mem和illumina的测序结果比对得到sam文件</span></span><br><span class="line">READ1=<span class="regexp">/ifs1/</span>TestDatas/nanopore7/data/MGH78578/illumina.sra_1.fastq.gz READ2=<span class="regexp">/ifs1/</span>TestDatas/nanopore7/data/MGH78578/illumina.sra_2.fastq.gz</span><br><span class="line">bwa mem -t <span class="number">4</span> -R <span class="string">&#x27;@RG\tID:foo\tSM:bar:\tPL:ILLUMINA&#x27;</span> medaka.fasta $READ1 $READ2 &gt;illumina.sam</span><br><span class="line"><span class="comment">#samtools排序并建立索引且转化为bam格式节省空间</span></span><br><span class="line">samtools <span class="keyword">sort</span> -@ <span class="number">4</span> -O bam -o illumina.sorted.bam illumina.sam</span><br><span class="line">samtools <span class="keyword">index</span> illumina.sorted.bam</span><br><span class="line"><span class="comment">#Pilon</span></span><br><span class="line">java -Xmx32G -jar /ifs1/Software/biosoft/pilon/pilon-<span class="number">1.23</span>.jar --genome medaka.fasta --fix all --changes --frags illumina.sorted.bam --output pilon</span><br><span class="line">--outdir pilon_result --threads <span class="number">24</span> --vcf <span class="number">2</span>&gt; pilon.log</span><br></pre></td></tr></table></figure><h3 id="Racon"><a href="#Racon" class="headerlink" title="Racon"></a>Racon</h3><p>Racon 是基于 minimap 和 miniasm 构建一致性序列(consensus)的一款软件，也可以用于纠错。既可以用于三代数据也可以用于二代数据。输入数据需要三个，首先是 contig，然后是测序的 reads，以及前面二者比对的结果，这个比对结果是 MHAP， PAF，SAM 三种格式当中的一种即可。数据结果为纠错后的 contig 序列。 Racon 纠错一般都会进行多轮。</p><figure class="highlight perl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#连接原始拼接结果</span></span><br><span class="line">DRAFT=../pilon/pilon_result/pilon.fasta READ=<span class="regexp">/ifs1/</span>TestDatas/nanopore7/data/MGH78578/clean.filtlong.fq.gz</span><br><span class="line"><span class="comment">#minimap2 比对(bwa比对也可以)</span></span><br><span class="line">minimap2 -t <span class="number">4</span> $&#123;DRAFT&#125; $&#123;READ&#125; &gt; round_1.paf</span><br><span class="line"><span class="comment">#racon 进行纠错</span></span><br><span class="line">racon -t <span class="number">4</span> $&#123;READ&#125; round_1.paf $&#123;DRAFT&#125; &gt; racon_round1.fasta</span><br><span class="line"><span class="comment">#第二轮纠错</span></span><br><span class="line">minimap2 -t <span class="number">4</span> racon_round1.fasta $&#123;READ&#125; &gt; round_2.paf</span><br><span class="line">racon -t <span class="number">4</span> $&#123;READ&#125; round_2.paf racon_round1.fasta&gt; racon_round2.fasta</span><br><span class="line"><span class="comment">#第三轮纠错</span></span><br><span class="line">minimap2 -t <span class="number">4</span> racon_round2.fasta $&#123;READ&#125; &gt; round_3.paf</span><br><span class="line">racon -t <span class="number">4</span> $&#123;READ&#125; round_3.paf racon_round2.fasta&gt; racon_round3.fasta</span><br></pre></td></tr></table></figure><h2 id="特别注意"><a href="#特别注意" class="headerlink" title="特别注意"></a>特别注意</h2><ul><li>一定要注意软件使用的范围，比如unicycler就只能拼接比较小的基因组比如细菌完成图</li></ul>]]></content>
    
    
    <summary type="html">测序软件使用记录</summary>
    
    
    
    <category term="2022" scheme="http://example.com/categories/2022/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>关于统计检验的一些知识笔记</title>
    <link href="http://example.com/2022/12/08/test.method/"/>
    <id>http://example.com/2022/12/08/test.method/</id>
    <published>2022-12-08T00:00:00.000Z</published>
    <updated>2023-04-12T19:31:05.046Z</updated>
    
    <content type="html"><![CDATA[<h1 id="关于统计检验的一些知识笔记（还需补充）"><a href="#关于统计检验的一些知识笔记（还需补充）" class="headerlink" title="关于统计检验的一些知识笔记（还需补充）"></a>关于统计检验的一些知识笔记（还需补充）</h1><h2 id="总览"><a href="#总览" class="headerlink" title="总览"></a>总览</h2><p>总的来说，统计检验是为了回答以下几个问题</p><ul><li>独不独立？<ul><li>如果独立，那么就证明两种处理之间不相关</li><li>如果不独立，那么就证明两种处理之间相关，则需要继续回答下一个问题<ul><li>它们之间存在怎么样的关联？并继续下一个问题<ul><li>它们之间的这种关联有多大的可信度？</li></ul></li></ul></li></ul></li></ul><h2 id="独不独立？"><a href="#独不独立？" class="headerlink" title="独不独立？"></a>独不独立？</h2><p>要检测独不独立，则又要回答几个问题</p><ul><li>数据之间是连续型还是离散型？<ul><li>如果是离散型（使用卡方检验或者Fisher’s exact test）<ul><li>单因素卡方检验（卡方拟合度检验 chi-square goodness of fit test）</li><li>多因素卡方检验 （卡方独立性检验 chis-square test of independence）</li></ul></li><li>如果是连续型（使用t检验或者wilcox检验）<ul><li>连续型数据且数据分布符合正态分布，那么使用t检验（当然如果组比较多那么就使用ANOVA也就是多重t检验）<ul><li>如果观测对象相互之间独立，比如A1，B1，C1，那么使用普通t检验</li><li>如果观测对象之间有联系，比如需要对比A1在接受某处理前后的数据，那么使用配对t检验</li></ul></li><li>连续型数据但数据不符合正态分布，那么使用wilcox test</li></ul></li></ul></li></ul><h3 id="卡方检验"><a href="#卡方检验" class="headerlink" title="卡方检验"></a>卡方检验</h3><p>#离散型数据 </p><p>卡方检验用于检测观察到的类别变量的分布是否与期望的不同，也就是期望值和观测值是否有显著差异。首先需要确定零假设：期望值和观测值之间没有差异。那么通过计算得到的假设成立可能性很低就说明期望值和观测值之间有差异（也就是p&lt;0.05）。如果检测样本只受到一种因素而影响分布那么就使用单因素卡方检验，如果是两种或多种就使用多因素卡方检验。df为自由度（单因素=x-1，多因素=(x-1)(y-1)）。</p><p>例子：判断一个骰子是否被人动了手脚。那么就是要判断骰子的观测值和期望值是否有差距，所以是单因素。</p><p>判断男生和女生对于体育喜爱程度（是否喜爱）是否有差异，就是多因素。</p><h3 id="t检验"><a href="#t检验" class="headerlink" title="t检验"></a>t检验</h3><p>#连续性数据 #组别小于等于2</p><p>t检验用于检测两组是否符合同一个正态分布，也就是没有差距（这就是假设前提）。</p><p>唯一需要注意的是是否需要使用配对t检验，如果不同组使用的是同一观测对象，那么就需要使用配对t检验。</p><h3 id="ANOVA检验-（方差分析）"><a href="#ANOVA检验-（方差分析）" class="headerlink" title="ANOVA检验 （方差分析）"></a>ANOVA检验 （方差分析）</h3><p>#连续性数据 #组别大于2 #消除误差 #多重t检验</p><p>这里又要分为one-way ANOVA 和 two-way ANOVA 以及多因素方差分析</p><p>单因素方差分析：不同职业群体（职业分组大于2）收入的差异。</p><p>双因素方差分析：同一学历时,不同性别是否有着网购满意度差异性（x定类数据有两个：学历和性别）。</p><p>多因素方差分析：比如研究者测试某新药对于胆固醇水平是否有疗效；研究者共招募72名被试，男女分别为36名，以及男女分别再细分使用新药和普通药物；同时高血压患者对于新药可能有干扰，因而研究者将被试是否患高血压也纳入考虑范畴中。因而最终，X共分为三个，分别是药物(旧药和新药)、性别，是否患高血压；Y为胆固醇水平。</p><h3 id="上述三种方法的区别"><a href="#上述三种方法的区别" class="headerlink" title="上述三种方法的区别"></a>上述三种方法的区别</h3><table><thead><tr><th align="center">X数据类型</th><th align="center">X组别数</th><th align="center">Y数据类型</th><th align="center">分析方法</th></tr></thead><tbody><tr><td align="center">定类</td><td align="center">2或更多</td><td align="center">定量</td><td align="center">方差分析</td></tr><tr><td align="center">定类</td><td align="center">2</td><td align="center">定量</td><td align="center">t检验</td></tr><tr><td align="center">定类</td><td align="center">任意</td><td align="center">定类</td><td align="center">卡方检验</td></tr></tbody></table><h2 id="什么关联？多大关联？"><a href="#什么关联？多大关联？" class="headerlink" title="什么关联？多大关联？"></a>什么关联？多大关联？</h2><h3 id="相关性检验"><a href="#相关性检验" class="headerlink" title="相关性检验"></a>相关性检验</h3><p>检验两组数据之间是否具有相关性，如果有，那么是正相关还是负相关，相关强度有多少？</p><p>相关系数[-1,1]，从极其负相关到极其正相关。并且经过相关性检验还会得到p值来判断结论的可信程度。</p><p><img src="https://raw.githubusercontent.com/Zhang-EK/blog_img/main/2023-04-12%2020.29.49.png"></p>]]></content>
    
    
    <summary type="html">R学习笔记</summary>
    
    
    
    <category term="2022" scheme="http://example.com/categories/2022/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>Unix 操作系统入门</title>
    <link href="http://example.com/2022/12/01/Unix_intro/"/>
    <id>http://example.com/2022/12/01/Unix_intro/</id>
    <published>2022-12-01T00:00:00.000Z</published>
    <updated>2023-01-04T14:46:33.996Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Unix-操作系统入门"><a href="#Unix-操作系统入门" class="headerlink" title="Unix 操作系统入门"></a>Unix 操作系统入门</h1><p>本笔记主要是整理梳理学习Unix基本操作的心得。</p><h2 id="基本概念与操作"><a href="#基本概念与操作" class="headerlink" title="基本概念与操作"></a>基本概念与操作</h2><ul><li>mac电脑可以直接在终端上操作</li><li>基本的概念和其他的语言差不多，都是函数加上参数</li><li>要注意当前工作的路径</li></ul><hr><table><thead><tr><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>date</code></td><td align="center">输出目前的时间</td></tr><tr><td align="center"><code>head</code></td><td align="center">输出目标文件的前几行，可以通过设定参数改变输出的数量</td></tr><tr><td align="center"><code>pwd</code></td><td align="center">输出目前的工作路径</td></tr><tr><td align="center"><code>ls</code></td><td align="center">输出目前文件夹下的文件名称</td></tr><tr><td align="center"><code>cd</code></td><td align="center">改变工作路径</td></tr></tbody></table><h2 id="对于文件的基本操作"><a href="#对于文件的基本操作" class="headerlink" title="对于文件的基本操作"></a>对于文件的基本操作</h2><ul><li><p><code>head</code> <code>tail</code> <code>less</code> 三个命令可以快速查看文件</p></li><li><p>复制、创建、移动文件会覆盖掉重名的文件，一定要注意</p><ul><li><p><code>cp</code> 第一个参数是想要复制的文件名，第二个参数是复制后的路径以及新文件名称，默认复制到当前文件夹下</p></li><li><p>如果想要将其他地方的文件复制到本工作路径下，并保留原始的名称，用点代替即可</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp experiment/notes.txt . </span><br></pre></td></tr></table></figure></li><li><p><code>mv</code> 指令也差不多，但也可以用来改名字</p></li></ul></li><li><p><code>nano</code> 命令可以创建文件，并打开编辑窗口，需要给出新文件名字</p></li><li><p><code>mkdir</code> <code>rmdir</code> 可以创建或者删除文件夹，如果文件夹不为空会报错</p></li></ul><hr><table><thead><tr><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>tail</code></td><td align="center">输出文件最后几行</td></tr><tr><td align="center"><code>less</code></td><td align="center">允许我们浏览文件（q键退出）</td></tr><tr><td align="center"><code>wc</code></td><td align="center">输出文件中的行数、字数、字符数</td></tr><tr><td align="center"><code>cp</code></td><td align="center">复制目标文件或文件夹（-r可以复制文件夹）</td></tr><tr><td align="center"><code>mv</code></td><td align="center">移动目标文件或文件夹</td></tr><tr><td align="center"><code>rm</code></td><td align="center">删除目标文件或文件夹</td></tr><tr><td align="center"><code>mkdir</code></td><td align="center">创建新的文件夹</td></tr><tr><td align="center"><code>rmdir</code></td><td align="center">删除<strong>空</strong>文件夹</td></tr><tr><td align="center"><code>nano</code></td><td align="center">创建或者编辑纯文本文件</td></tr></tbody></table><hr><table><thead><tr><th align="center">命令</th><th align="center">代表含义</th></tr></thead><tbody><tr><td align="center"><code>.</code></td><td align="center">代表目前的工作路径</td></tr></tbody></table><h2 id="重定向符和通配符"><a href="#重定向符和通配符" class="headerlink" title="重定向符和通配符"></a>重定向符和通配符</h2><ul><li>重定向符 <code>|</code> 是将上一个的结果作为输入输入到下一个命令中</li><li><code>*</code> 和<code>?</code> 的区别，第一个允许字符出现无数次，而第二个只允许出现一次</li></ul><hr><table><thead><tr><th align="center">字符</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>｜</code></td><td align="center">连接不同命令</td></tr><tr><td align="center"><code>&gt;</code></td><td align="center">将输出结果导出到一个文件（会覆盖）</td></tr><tr><td align="center"><code>&gt;&gt;</code></td><td align="center">将输出结果导出到一个文件（会增加而不是覆盖）</td></tr><tr><td align="center"><code>*</code></td><td align="center">可以代表出现任意次数的任意字符</td></tr><tr><td align="center"><code>？</code></td><td align="center">代表只出现一次的任意字符</td></tr></tbody></table><h2 id="六个重要指令"><a href="#六个重要指令" class="headerlink" title="六个重要指令"></a>六个重要指令</h2><table><thead><tr><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>cut</code></td><td align="center">可以从表格中选取列</td></tr><tr><td align="center"><code>grep</code></td><td align="center">寻找符合的文本并返回整行内容</td></tr><tr><td align="center"><code>paste</code></td><td align="center">将不同的列或者文档横向连接起来</td></tr><tr><td align="center"><code>sed</code></td><td align="center">寻找并替换</td></tr><tr><td align="center"><code>awk</code></td><td align="center">用于筛选和计算（例如某列中大于某数）</td></tr><tr><td align="center"><code>tr</code></td><td align="center">将制定字符替换为其他字符</td></tr></tbody></table><h2 id="循环"><a href="#循环" class="headerlink" title="循环"></a>循环</h2><ul><li>可以用<code>cat</code> 提取出文件中的所用元素，而不用一个个赋值</li><li><code>echo</code> 指输出所有结果</li></ul>]]></content>
    
    
    <summary type="html">Unix 学习笔记</summary>
    
    
    
    <category term="2022" scheme="http://example.com/categories/2022/"/>
    
    
    <category term="生信软件学习笔记" scheme="http://example.com/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>生，死，生死，生活</title>
    <link href="http://example.com/2022/04/27/%E7%94%9F%EF%BC%8C%E6%AD%BB%EF%BC%8C%E7%94%9F%E6%AD%BB%EF%BC%8C%E7%94%9F%E6%B4%BB/"/>
    <id>http://example.com/2022/04/27/%E7%94%9F%EF%BC%8C%E6%AD%BB%EF%BC%8C%E7%94%9F%E6%AD%BB%EF%BC%8C%E7%94%9F%E6%B4%BB/</id>
    <published>2022-04-26T23:00:00.000Z</published>
    <updated>2022-04-27T02:34:12.532Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">  <script id="hbeData" type="hbeData" data-hmacdigest="3bf275fe12f2eb252bdd063fafa7507ed72e5047565b1f73d320fb0e3c97ad8e">d0cc450fdd5fa39b8b0c66e3a5b4d3c4c5c4826a02a52251e94a85b3a20d8d6680e8680dd27b71709808ba60d3b4e6a4d651788fd82ef6b267594abb57c2f20b8a8734632c6f3522f33ce4b7682e5ba969425c845e56eeb71367950d112ebe80b2309041889ae146966d1e4353cdc240c80425594c7fd733dda4b4fda00df3d6248dbcb4be28bffc7202b048b6848550bb77149748580bac3c842fbc2ec858c86578ee88f87daa4f3d482d16205e8be3b4fa0bdbfb2f448cf119209b299b0c16f4550fc5e7f3fe46fcac0d702323a6abe8d3d5816eb82ada1e643bead9845ea217b8a66a8f07718b8584d153028fe2fb4b90f50fe20984ed982114a63a120edb93c899151bb1b57f607c6361a73886387489dfd28d3a975bbdb18dc98dae03d926d66dfce893d0faa47d86898dbdb14449800d41983fc38481908b807c0dbd15cce51940121c4bb32c690e1721c3039c832b35d309dcb5b9c4fccee002047aa45ddaca6ee632c6d47614b4ef78c425d5db596aae9cbafd5e5267756a3fb503b4e12195a1ccbec6d50a5fdafa8bbf5287a624ea0effbd6729ade1fa03061ebe7319a50127c202cfdaa5d3e22c750a4a2f1219e4bd47a6aa998df3dde845435c729caf10e8b2fd6552565c99f8652020ccba510fa5a08d06312c74021fb63e88b927d5138f29da459ae5a16d535f49f498b028b30c42a9ef727ffa73f7022cc58ec288f53ff4a90f99327f7d3e48d1a81d041934edf8b25e98efb501d5a2efbcbd06bed6b11be0a63ea59f36bd9893897d51ff3e4029e5203eae59685ea44d29ec687deef13c0e7d2c460a4075101e76512ace3ae193e4d163c076bf4203f6cb784e16dca47988697df84e3b897cad05a6cdb43f472a0dce1fe6164189848e464b51b26d1f95bf14afaa37e360b1587ac100abbe48830f756e3b624cc1e2df05d9789f5965d71914ce1c50e267940ca1ada4baf358f8151a5d5cd627b2e4f9738b1e77235c512c5adfc8d7053840522ad70ecc34fab6a798b733e22e8c6350e2413d9488d2c51d947c9f3826cd89091b5f657f1f29710565e955cc6f644321dcfd013eab99b585905863ffdcca69e8050dab12203e5fb15804373394f48910272c0a4ac380555496ab007c936dd3e7e45b7f4d4a31452b40df1a9d2595ac4da8419d421dd480b13a4813c4772103dd79939609fb7114b1f338cdf5998fdf58d92cbdaf418254bedda9aebe0a34ec48d2776b72a6c07120d9d75e9bffa59433a06d08ab591b69215fc0afaf0157d05073b56f28846e744ab3d46032f290bc288ffad016e8fa2df45bf9c49d2bb67268daca48e13666e586c52dbe1a9c4ac9f4cb411d0dc2357da9f317deaca95466138a71bd31944861de46b8c5c8d154be5a203a9faa3563649dcf956bd41f024ec5f5955f524c7d2df346bd33218ca50b5258e583239e088529c1a074cc042c70b5ef146c27d76e2efeec7b775cfb35e89c46f692943d31f3e6e82dde749cb3382f85e508a4f9d1e400e5c5eca02889dc7d273d8e6fa6d046c7235154ff66fb1b20c709e07343dfc41c2ed90b76eeffab6209d78afd745a031a6894dda92a7f11f424ca571611202b3b636bbd646d92f2fade3d0e73b4dbfd52b765bcb784b88ac3bcfad5dd83ff59a02a69191964b689f55e5d2367ae61b3d2e68349b7c91c729b348e1871a977e414eb4a48c967d83a815a4114b0e47239305f59258cc3acdf8037a4dbae6fe2a08ec3a3618fd3aa31c8ea3b16741acb3989cd15be7cd55dfcc3d45b925c8651a6820cee7008bf4285cb11d086780253100bdde48636fde53872b5f23511a8424939bab69f92d65c1cf46cb08fdc19d541eef25e7717858bca3ca210d6e0c2c44bdf88b0e85350f209725f113f8775f3a711d64f3c9ed96379abcf81e4c22623df4be35b70fed303d1fa7f0eb1927e8991bc84aa6dc743c473d0ac3cb412f6eb1a7aeca3e0ee8e302057a04b454a5c377b51c65d256036f9df5da6914f1f02735b947a7e579e4c3eac467b093b0bfae225450f71a59129d2c9d38e646cd0e69686c86852984972c56d54219f988929084b257342708b36b886befe1de7dbc39fcee171c006bbcf5d6eb0b1f31c1938c7b38ba8d5cb08668db89bca016fe57f295c764c6ed4b6e18c5ea38973fc0af29306a9a8891d9252aa124ac4aabf203deb26ffb1d83b388c72a804cb04dfd69d1082ef1b688656a8c725f58df0fd6be3d1c4f562a6e089e4be0b467bb09a29152f349bf5b58020970354c26658832cc39dcf72346fe58ef19eda50cc83e58edfa22cbb26192c499335ae6adba77dfbd16feb7bdde6808b50962d10e6b96dca48cc93b1adcff30640e6517537fc786345f705cbd3b77c5aa0f4a3d88cfc8d4b79261e03248c2f1ef2bec51a9e0f929b02eb016e611913b22ee6721eaa7f43e5095253a595392179d800301c8c0779d991ae24ddaafc4d99a625db42624dfa5dd8b1e5ffacd67fd5bf3c3126965b4ca0b2f456d29491fbc5d30742335b856ae7aea3198522abbd04838cb750100f3a3272398947129725292794751dc645fc5d8516436d7b0a0f4bb2eeb9bc0c95364559612cb92ef7a7fdd1e5804126d0fbf983266553b448eb29764f2e6c5a89568c5fff8196a31de4dbef839089fe12d01ac5b8d3cdd10c731e5ba13c792327fdd6d033422a516b375d1ed3d3cec7d11887cbfa2a876219613206861d7f1fa8ad3fe8c50a1a32d4ff0211ea583398b10718ef56f9400f4a178637564fb37efd63c46f31e14ace542fb9e7213cc594f483be6b2ba72dbc68b7225c2b8722e22068cb582db7ab2b8752086c5120566de4cd9be836d49ca3e557620fd0581ab53bacf8788c4f59f44db932194de800d81ad6601a40bb72c3195a6c0edab26ce233f598acf105bbb41277949cdeadb0337100049413e5a028f8ca0cf4039942e8a0436a3b1bd8c668c93a5cd06945fe416907c2a9a5540ae1d04067554736e79725aab25409242ed8b16098ad1dd7cfbe1baee6c5ce8d731da7de600aac94df6367a8223ee17c6f8cd0dc059030809bf37bb373b5bf6d8c995ce17f178e7ed70f6dcdd182062a583c1754e0e03eba87ab8a0aa59929e75fde89a8c81804e46f5e26b71740c199d039eaa4b234764ad4f546b71d811e33b041f41a4e5e3dc32017ae9677b3ff0c02b393534735abe26f9cd8a569c5bb3d9663a76f589c79f0de619349c0ae4c877cb0f03236240117d1242a6c423c4ea8bedc0f52622c9466018ce843b4f643ec4d20be08a03b7213756452cebdce01d980e985f4bead71a112500e22c6f6152ac5ba2e1c41d3a2be9e8e0c84abffe42626d095facf03338aa59aab308ad7e064b98fd2109c26308e94d9143e9934842755334a5287278d2f36f73c69ed2fa93fe5872a9b884ce7550230f53268a0a6e226000ba80c02c4e7d525ec9b722dc00fcbf98e5d3ff40ce45e65c80e9d86c89d4e4a053571de7396518c0b39dad57098846e27286c4b25c10318b5936fc15e038d4af6abfb6ea92a4e606177cc59d9e1e5da5e55a0bc7e1adc63c3d2041674bd71bd37417e37b4d4b03a5376949e863fdd22d1fb2f10c637b7cd06cdc45bd452818bd372298416bb71e187b8e37c37860048c4e5bb3eea32fec9ff6a0ad53acb43d8114488462d784e6af3161dcfadeecb621695a601561fdc6ec9e4f9c0816110610d31604ae89e03cfb453756aaed527c8a50067413f7be17003d250433df22de572ed5805158bd1f1b7c7ef4476cf3829d0dc03132eba660c4b416e62462ca2adeb4cd249ffef0b9ca9ca2c64c5c4ce20726c4d70eb3c5b3fb31180ccc46531b8caf136f2194d9be22767d58a0bf722ef094cc2d5d4407afa09ee15bdf80c74c8ae5110cacaff061c886d25fb34c339287618b38956790b9ea3e786369e81b92c175618b8d1cf575aa6abb26f1299e4d3523486eaa01ddfd659188fd909ec7334b6e27fbaf0c1bf223174577ca53f129ae27319daddcf5618fba5b1041df61f968ce49a5ad18e1c903f42cdcedb241457bae1e665b46a0cb5d73d5a613e5b924f5710dd8bec9a315d503c218a057dd6813416a86ce478a5a8912395948c1f4107a11f7f04b4c669a9bd98aa62e8576b6b183becbeb875cdd7fc98b8fb84ce23f6027f9ea05792faecd94cd99f2e22881c1f91e76de59375f76f3ef94bcef0cff2dfd0f99ca2d0e5e8db381c93368c568e941aa6cef5a4534f6802f6d729a78403799202ff9d12b96d3e1413ef49ea973ec8a1104d848c48af9f79c98af23bf185f0b397b21c74739e9108b0d609d569d4bc383f1a70db2fc798be34e13fd670a55f6e336a0c45d1f0ecf32b28b92b1760c0c23f17e66bbfe8e8d85490987d5db100869ff3d84667a2ee9cc5b7b59efc8846bedfe438592d542f1eb94565b2112965b9222800cd72c8e73fe3d106e0b03a06233df5d4f66cde94cac70b778ba42d8adde6264d5f0eb4317541d9e1dabb0dd96ac2725230174536f83e1a437b0cbf0274e2c394b797e81f7a125dbbe8b1ea694c18e7f05c78d8e3ca89fcde3ad5ce9b79a0a50c62bbbe1a90e6bbf5fa88253c3d3ea96e2c2bcd514bbf8afc9d12516e28caa01b79bc736edb33121ae83dc106a7de3346484064286c0d9ac6ebee32f73b5aefbbd14cb93ef8106e75f903185ea29ec858dfbbf95e7f2e488afc82e19b701e8651505f56b41d9c239cf791e46e6dbd5b83772d951ba32cdf2126bc460672486032cb4f0b44602c6ab265ad3af62a81182f65e85a03ca022991fb2fda0e819c3168379ac627a991a3b70477c76c4421b7eddf355bdb12fe166865df6f1eae2b69849258bd789b99e957ead3cf5931bb1e1bd1670c47129d6aca1b1c2223775ec7ba4694c6f829c4d51e5d6017c9c82691170050155cf4e1003774840ca4dd222a947d8ba0135b12ff09d5c784e7ad10bc3a4f55b25da7093a7265156e3d5537afc6cebeaff047e93c956b28f5670c8a45fc65b2e7d80a9c1c6d4a2aad9e9bb1d35e4879f2e3ed739c0ad8852b0c658604c8c885d0480183bf4d57abb2eb40a1b9b0499c9b1e8d41a02c3ab300b29faa910f65016cedf9e5f7b37c4bbd72c8f2b519975c1c4750c98c52bbcc08d7f725c6504814a130df6ae92f25429668f8d76b1990a55061b52a3a0ad520a09b86beb49084ca9b84cb4d421999f12a75b4846bb413778ea219cc27ffbb3ec2fff5649d6107576c1f995ee28c5ee73914ce4d8868c8625b7ad15e3d690debf1f56c1afdaa996162566d61d14f3096896a908d7d10c8d76f0dd976aa23a10574d99b4d41573351ea850316d46d90479a97307e94d3da909eeaaaf04ee9f89642067c65d5b0296fb2f7a084e865c306ce240c1d86347f286b34c2544b1b7ae0aa74757419a764ac6d8c8a64bfa35880bbca24c13815429b6e93574aa02e25bde243db6cd32d21d4a78caa3a730f99a2998fcf164f0bf2e279aa4da0e506fcef44c5e25a517a840efc37be90cb16175357e08aa57ab5d8fbb729f21ae74374da813d4c80c6521bfe52182720624c7815a4d7948f6448616d6113e62daeb52b70f9603096a067d250fbb077a6effc2cfbd291f78c95b3d9c0ef9c77236bcc4e1d333246e0829d85eb1d7d4dc49046e27db922c9755fe7ffdd467be6404cd18b7ceca7960ec8f5be3301f958b093b70a69794134d2e5a9de6e82996f2787c6682dd3abaf1ad59288621b06e58fdfd970918043beca72e06fa5a7579f5bb3e88324cd666065360cd663a9a57212e40386712964d4ef4d26a462823be9305f300e536d896fab8d3792340eaf680b1ac52938fae90fe01a11148291dce37f1c621af6e82bc7e0c690dd3ce4dff97174446d3a835bbf6ef3ecf35a893c072c8a6bd33a0998778dc783ccf2f1782a8e8ec550501016c6961b19b6aab35844c397d40da0dacb7743d57fc9a5bdc7f5c4b04368377104f3c631a41c065df39a48263ec6ff50d67c8b5fe0b0afd3e282faeae86b93904a846a0163dd3518b41d5c4d69265e4cead593975bfc4403cebec5754651057050db4f86d5cbf5a3aa029034f2f2577fcdcd40d19336fe987977ae616e0866e644b303c29c5babc71573a0d2b0de1b0e775beb697a936388313697c4deb6012b86c5697fe5f19e95c8f240ef47dab64f9138f2284d03a8d2e28f7a2b2efae1584085fd50a75982ec9ad7cd82111eb5bcfa50cc585ea6a55b66679579a51b74b2b1a8fae6faddc20e98efcd1727774140690a9129c166e1b998824e8ac822e14ba3bb48a7b7e80adea78f95622b0bdf2f5e07a8641f280356525194558c1cd2403b2f55f9c2bbefd92a2b1cd2ec941d5cc708da85b6496fb7d09c94cf79a4010c44426d040268e5dde7f5b123be8905314e7d995f96b8c4df096ad2db603bbac34ddfe6f5ae9af1989fe3f79098e15689946302d12d842f352e2ce7453443ba7e765f832a009bad815474c7ba6e60a2977b7f0cfd6a51e8c7a8e8f0548abcba021cc65a1bb880d5bf75e46f21cec7de5bd6e33b8ed34a5f1532cb8fca4c92a8f28866843415828c39bcc24a14c91415ea4d995d06820ebb948e76b5af135da76b8c93bcb2423c0832c23ae88a09877a38303af56f7d12ad1cb0c04241d97dae702304df909b6b862fe768143e34d22a4484fc972f9ab3f70792d75e19c6eb6a01ffdd9332130ce742806ee42c09945ff61cc3c5382e3dbb394c78150200dab930f1500907ea7811311bbc5da08d12a6054bace3e6d0a26e6167fc8260b1cba1ace9c7ef65d0b212d457aac14b971158548150f874db6d72a76a423c1d8a33c79228b92b6055a3093c8eaf3a4945ac0693c695fac851b9f2fc836cf901c67796f3c4f93c25f9e2e4c14c980cce013bb8c662151ddc6ff4758a3ae3432f5b668f87471e7d27634d5991124becec03c847c7d56cc60a1be5e8766f8f191b00426376961bc1b64142f82b3dc3da358fe27004c47eb420a63743a686722b322f65b4e8db91528992c0f69098e9e9ce711a6bd04314eda6345cac935cd9a09ef4fa6561ef02a5ef7d46b68a47e57dc805fb916853ab70f385d1ad911ac3ec0a8856d0f47c96a5f30dc1655bc69319573533cdf4d59d6e0684ca546df1460e6e9790cb2dba830a5238f75ce42687eb8cc87b31dbab94189c83d02d1fc7a67b5de8db37cd30041b26b3172c5b9edd0f68f6355bc1fa7bb42fcf0d32cd7e39a1547b83ad0a8ea1b698109f9a0298e08f6ac017c2aa7dbd3ab72fbb63f174e04962f1b8385ea3a313768279890a0868be22a2930666fc5e30808b9c65d144ec05534ed6f171b5c21ed8eb8452761b103e7b1fbda94afa3de7a2e615e12234207c96f312bd85cb16c4fd577afc94bb12c3197db570e82c5e13c0e71f7b6595e7d511a8b8acc69341e95d49e55602e0da47cbb76bde3d1dc27d3b8ef29efd0691dcf1f2eef3198cdae4518f31da7a66f67a23364df232d0527cb1dcd37a1920d9e3ae7d580bda01894bd38e6b551b159c095d74b4a8e4d340703e1c1dafe835f7ff84ef7df1ef380211fb55d6cc8951e43a6aaaa8a19b2b634ddadca94ff7db20e27b6ad6e59fb30ed52861e66ee75485f19722c57bf06da94cd87b9194c337afaeceac61aed8d6ffcebea8864a4ca95c43355fc5cf19c86a5cf5781b614e87403be9bbd3bf64ca101c3ce7628c551a3adbe303c68a7d3d21e0319b875da382a767abc38ff8ced9effeac996e5c67e2f10a0e3c9f6258081b26070524cf8acf07242914e7d5e64524cc777802f5883acfc329f38a52d8e54a68c58ed29150a829db5c05923d56973415814259e1185a89fbe89c6956fc8dcdcdcc3035db8c8d27b145ba81ead1139ef2a87e4e1785cb33ade8d299e70c293c487a95bdf78ada8b53d33bd0155430087ffb2611cc4c079e732935ec14fff85ea685c16516affc845f48d61b590fd292c2d92d1910c1394c2588a891ea221415e617cfa62e23d7d96d1349eaa0ca13bb32b8145760f7ee5cad23c1753798edd50c8e0c438464841721e7caf7a604294b8792144335732ff46826dd96a11dd9ce020aaec421c6b48c172e790a1e57d742419e5c225cc04eb0bd7c26dec95915f720f72106465839e03011287f55e1f3825c8451579f19e8a4519c6cda1e8213658f544bb92f4789d98abe048bf991be554c330a0391f77a3af9689b0827ee72b2d42247d33f2b5936de1b9d82b63a91c186cf004f639da220388bc1a2b85d5242fc16371f45072720f4400c4e3f8cfd090bd1d83d082859a03a5f7d08c9a15ca9eca194d235ea78376e1ca0f6616f10265ebebb8f9a539192b0ecf9a3719e0a14b5e6df9de76bd4df3863ad6f87fff47cd2691426f38185636a79ee7492268f7fa84e722418b67ace30b5922b816e13303f0c12a766efd075d51e5d7df2fe0ce1181117ff02de4d8c5e2b2fe1c7eff768fdbd0344cb38f1a6b3c34c2a78f04363ee2bb10a08bc4adae17705b688317815200811b36f3b44c01fae4abf40fc1fc1bbe9388f94b8a5375e8acc49bb3d93dc3a026464ece9a1c0e2c178dc5e9e23eddab0eab94e6c491b4b5bfbeeffbc2c8f7338ed05e8292458560cdacab1d6d991fd224a900b29dd0bdf3515a642dc88973d130ee0ddc601aa4d24a2a550e2bacdad44882cd95a3ba2bb306d475135f77b38a6dc2f68ff9788b4a016055810e882a4cf55adc65a1a1d81bf025abc4e98151f2ed6c0a560ca875c9e8548e9380c0804ed6051aa31ed5de9b23f9e2721b861484cf576150c9e718231dbbab6afb5628b9f4d3ced8b85f211d1ba9362b1d5872a05d02a0bacee8aa5201222695195e467c81d17a8cc34566cbdf944b156a074e7a9763da6fdf9a1dddfff0fb76fa990919dfb3f17698fa6655f76a119f2dddb33cb7c49a104db404ebbae4a674a6f7b5cb226f8cef5662bfb64fa393331191d88a83c720bec0b5eecefa20fc3b46dce7171f974075d2043a83b8fec4a6d806ef9c1ef850451c2e589b6413ac414ca7ced2cb47d7c50f3b66ee3fe9cf8202d14e308a0eeaa6a1b24e545a0030accd96f6bf313658fcc54ad23092a24f2567b9f81d27a98cff4c8bd91b4aa118e8ff2ba6472140b9270179292114a1c2871c2d3dd3b2dfb88ea7f6e4426050eb6ada97d5ea2d4556684147bf3aa1dd719d0010adbbf05a4dd7e4338958cf9255b46dce553acad27878ee538b17347bb28e936a4ef3ddca10a454813f827a7d5ce00e3a6be8597ca0df3f6002afa67dbe4618ce59cefa2c1b74d0cd602c3adf96fa33b3db3bfbfd185e1b39cd2fcd88ae5f8fe55cd14f10173a5934f48a617407fe4441570e29ca985d53399965b508f9f07b1ed5a440b06690b29076230349e5a3476e10356028447b1da19358db9ab614d6f63476e6fbfdecdc4b1c8729f4df335a74007afdabb944d2dbb4618211b4aff093c7212981a5bb6e311dad8971742f16bef655102f904c5e1a781dfc8a96dacb1eecf7e5af085c42469ec0978c112ad8ff4ca288cf800340d7a33588cda12d18204dd5e28631359b90fc10dcb43a9d1e0d78bd8c5c96ba730ea8f82a678d5d448c4b5aa2883d20b5a0f9eebdfc19ab7953f14bc837036a9d8800477be0596780d192182c2fc8a3ac4e92de17f1d97cbe963ed7a22c4b382e3f3dbc83b284819550f9e4457a556305d909f74f19a422632c87475937b46d13f084f953247f193efce2cbaa0c06707ed41428237ed23d04afc58d420f4c9191503b8f68d0d80853aad4ae25c77896b1f5a8d23fbc7bde9c139e51d0fab4bf30638d16dcfcfb31122bcde6d676d0890794fa5225745d459ca2ad0964dc941ac0f4974eeedc1271ca3e830c2395b5862eab708098910663c807e0e48fa685a2c73408cf33f718074db0889db0b14fb4668413e82a625907a5b3b51d4de76b8e7f869cdbc01d4e8eff296def1655e6789a77da2646abe86e6938e8d184bc55d99ad4b31c689dab4ec619043e090006b9ec05c4b52a198fc04e550ed013f8c67eb2029e344c0c8bae47e773871e2ff83b1b0b3e214bf50bfb5d276ef49160d2b2db56b9d927b6184ed6f625a58a980e7f7a25bd2cc6334dcae465abf5f44691db83ccf487549044130c39091414024d88b0cf4c1f07b57f85cda4a3568dee42400bddd74539dac3b35e0cbe87300b37e57e1168bc6e001774337b4e366eb05e6ce3b53912dece728a9bf3eaff9cb786bfc0632a93777cd13797a6a20e08f538bff966591fb25d9b770eb422553ae1c73e701ea6d39f5992173adc07ee6468ab85c4e8b2700fd35017e978fb195ec67b0d259786e02f2066c3b48daa6965313682d6d4b8e295415d1f0027bd7720fa9d8d0885007b1a2dcd676d46335397b2168d3b5e6bfdb6bb1a60b9bee1e85fcf1fe687c5fb9154d665ce8a9bc9ec939ed577cab92e5d393f1a90869f8578ff11090abcab5230f3e15a95892ad13f1e0ae3b1bd4a5c21bcfe6bde7d255f9dcacf040a0ffcb9608e94b0349e0448837dc0320c6998f55e8f3979a18fccf9eaacaebc63de22f20e015b204101a3cbeeb2cbdab6d9a16871d98d23925925f5ba9188ecd17e4e494e9f58e0cf95e1eb0b676ee84cdd5feebd59016213a2e9208a37c79910f0aa586dccd0c538106e5b6400feb49ecde4f0849ebb559df18871fd3ad5177fb276d8fa7c722ee168d00757be810d77c445ed858bcae1ad8da9473639d2825dd448013199266e9b8a9c06dc66fd92f27ec4fa0fe5bc4891557d6bb87ebe6233f8d8c75e976426bd2df05899718818f0d45a113f4cb4983a4b2c054ffc8430f4f5ff8b0e2ecc560b6d78e0edbe24c91c92bac74e15cbdd4e4abefd7a98a8059a2f0f3d3343d7362ad0043067b214f4be85dc7027d249b8e73ce159c4ab7ea09d41d75f968042dcb36ccc54f05aa3e8677ee0a51249b5cb0599f53deb36c736876c0916b876ec88dd95631a0e30ffbf09a25582926833cfbc5cc2cfddcd09610eedf3fc0dc4db8d616914bb98cf930c7713d</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-default">      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-default">输入密码，查看文章</span>      </label>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">莫言的小说一向争议很大，《生死疲劳》虽然是一本在情节上不能称得上是完美的小说，但本书在其他方面还是给我留下了很深的印象</summary>
    
    
    
    <category term="2022" scheme="http://example.com/categories/2022/"/>
    
    
    <category term="读后感" scheme="http://example.com/tags/%E8%AF%BB%E5%90%8E%E6%84%9F/"/>
    
  </entry>
  
  <entry>
    <title>LaTeX入门</title>
    <link href="http://example.com/2022/03/01/LaTeX%E5%85%A5%E9%97%A8/"/>
    <id>http://example.com/2022/03/01/LaTeX%E5%85%A5%E9%97%A8/</id>
    <published>2022-03-01T00:00:00.000Z</published>
    <updated>2022-12-08T22:28:55.854Z</updated>
    
    <content type="html"><![CDATA[<h1 id="LaTeX入门"><a href="#LaTeX入门" class="headerlink" title="LaTeX入门"></a>LaTeX入门</h1><h2 id="什么是LaTeX"><a href="#什么是LaTeX" class="headerlink" title="什么是LaTeX"></a>什么是LaTeX</h2><ul><li>LaTeX是一种排版系统，它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单信件到完整书籍的所有其他种类的文档。</li><li> <em>利用编写程序代码的方式写作</em>。</li><li> 目前比较方便的windows下的使用环境是<em>TeXLive+vscode</em>，安装方法百度。</li><li> 可以先用<em>Markdown</em>写点内容试试，两种语言的基本逻辑差不多，<em>Markdown</em>更轻量，网络博客中的文章基本都是用这个语法写成的。</li></ul><h2 id="为什么使用LaTeX"><a href="#为什么使用LaTeX" class="headerlink" title="为什么使用LaTeX"></a>为什么使用LaTeX</h2><ul><li>在写作SCI论文时，杂志社有可能<em>不会提供</em>word格式的模版，但一定会有LaTeX的模版。</li><li>LaTeX排版整洁，不会像word那样发生不可预料的<em>变化</em>。</li><li>当在不同杂志社的模版之间<em>切换</em>时LaTeX更简洁、简单，因为代码是通用的。</li><li>使用LaTeX写作科技论文时可以生成比较复杂的数学公式（现在word也可以办到）。</li><li>使用LaTeX写作<em>可能</em>会在评审时给论文加分。</li></ul><h2 id="怎么使用LaTeX"><a href="#怎么使用LaTeX" class="headerlink" title="怎么使用LaTeX"></a>怎么使用LaTeX</h2><h3 id="文章基本结构"><a href="#文章基本结构" class="headerlink" title="文章基本结构"></a>文章基本结构</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">\documentclass&#123;article&#125; %除了article之外还有book、report、beamer</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line">Hello world!</span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><p>如果要输入中文</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125; %ctex+article</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line">你好！</span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><ul><li>所有位于\begin{document}之前的内容是前言，在这里制定文档页面大小、尺寸、也可以指定需要倒入的宏包</li><li>begin和end之间的才是正文，这里的内容会被排版生成到文档中</li></ul><p>例如要给文章设置标题：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\title&#123;你好，world!&#125;</span><br><span class="line">\author&#123;张尔康&#125;</span><br><span class="line">\date&#123;\today&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line">\maketitle</span><br><span class="line">你好，world!</span><br><span class="line">\end&#123;document&#125; </span><br></pre></td></tr></table></figure><h3 id="文章的章节"><a href="#文章的章节" class="headerlink" title="文章的章节"></a>文章的章节</h3><p>LaTeX的章节生成十分的方便</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;article&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line"></span><br><span class="line">\section&#123;Introduction&#125;       %第一章</span><br><span class="line">Microneedles is a .......</span><br><span class="line"></span><br><span class="line">\section&#123;Methods&#125;         %第二章</span><br><span class="line">\subsection&#123;Fabrication of microneedles&#125;    </span><br><span class="line">\subsubsection&#123;Fabrication of the molds of microneedles&#125;</span><br><span class="line"></span><br><span class="line">\section&#123;Results&#125;        %第三章</span><br><span class="line"></span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><h3 id="文章中字体的调节"><a href="#文章中字体的调节" class="headerlink" title="文章中字体的调节"></a>文章中字体的调节</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line">\textbf&#123;hi&#125;，我是张尔康      %加粗，boldfont</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">\textit&#123;hi&#125;，我是张尔康      %斜体，italic</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">\underline&#123;hi&#125;，我是张尔康        %下划线</span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><h3 id="插入图片"><a href="#插入图片" class="headerlink" title="插入图片"></a>插入图片</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\usepackage&#123;hyperref&#125;</span><br><span class="line">\hypersetup&#123;hypertex=true,</span><br><span class="line">            colorlinks=true,</span><br><span class="line">            linkcolor=blue,</span><br><span class="line">            anchorcolor=blue,</span><br><span class="line">            citecolor=blue&#125;</span><br><span class="line">\usepackage&#123;graphicx&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line"></span><br><span class="line">下面我将插入一张图片(Figure \ref&#123;Figure 1&#125;)</span><br><span class="line"></span><br><span class="line">\begin&#123;figure&#125;[htb]   %开始图片环境</span><br><span class="line">\centering      %居中</span><br><span class="line">\includegraphics[width=0.5\textwidth]&#123;Jupiter&#125;     %图片大小及图片名字，要使用png格式</span><br><span class="line">\caption&#123;Jupiter is a ......&#125;         %图题</span><br><span class="line">\label&#123;Figure 1&#125;      %引用的名字</span><br><span class="line">\end&#123;figure&#125;        %结束图片环境</span><br><span class="line"></span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><h3 id="插入表格、列表"><a href="#插入表格、列表" class="headerlink" title="插入表格、列表"></a>插入表格、列表</h3><ul><li>无序列表</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;itemize&#125;</span><br><span class="line">\item 第一点</span><br><span class="line">\item 第二点</span><br><span class="line">\item 第三点</span><br><span class="line">\end&#123;itemize&#125;</span><br><span class="line"></span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><ul><li>数字列表</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;enumerate&#125;</span><br><span class="line">\item 第一点</span><br><span class="line">\item 第二点</span><br><span class="line">\item 第三点</span><br><span class="line">\end&#123;enumerate&#125;</span><br><span class="line"></span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><ul><li>表格</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;tabular&#125;&#123;c c c&#125;     %三列，居中。l左对齐，r右对齐</span><br><span class="line">过敏组 &amp; 对照组 &amp; 治疗组 \\</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\       %行之间用\\隔开</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 </span><br><span class="line">\end&#123;tabular&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;tabular&#125;&#123; |c|c|c| &#125;        %用竖线加表格边框，也可以|c||c|双边框</span><br><span class="line">\hline                               %\hline加上边框,也可以再加一个\hline添加双横线</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\</span><br><span class="line">\hline</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\ </span><br><span class="line">\hline</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\</span><br><span class="line">\hline</span><br><span class="line">\end&#123;tabular&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;tabular&#125;&#123; |p&#123;2cm&#125;|c|c| &#125;        %paragraph,手动设置列宽</span><br><span class="line">\hline                               </span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\</span><br><span class="line">\hline</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\ </span><br><span class="line">\hline</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\</span><br><span class="line">\hline</span><br><span class="line">\end&#123;tabular&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;table&#125;[htb]</span><br><span class="line">\center                     %居中</span><br><span class="line">\begin&#123;tabular&#125;&#123; |p&#123;2cm&#125;|c|c| &#125;       </span><br><span class="line">\hline                               </span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\</span><br><span class="line">\hline</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\ </span><br><span class="line">\hline</span><br><span class="line">单元格 &amp; 单元格 &amp; 单元格 \\</span><br><span class="line">\hline</span><br><span class="line">\end&#123;tabular&#125;</span><br><span class="line">\caption&#123;体重表&#125;                %添加表题</span><br><span class="line">\end&#123;table&#125;</span><br><span class="line"></span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><h3 id="插入公式"><a href="#插入公式" class="headerlink" title="插入公式"></a>插入公式</h3><ul><li>这个功能可能有的时候没有word方便</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line"></span><br><span class="line">爱因斯坦的质能方程：$E=mc^2$      %行内公式</span><br><span class="line"></span><br><span class="line">\begin&#123;equation&#125;</span><br><span class="line">E=mc^2</span><br><span class="line">\end&#123;equation&#125;       %行间公式</span><br><span class="line"></span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><ul><li>复杂一点的公式</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">\documentclass[UTF8]&#123;ctexart&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;document&#125;</span><br><span class="line"></span><br><span class="line">\begin&#123;equation&#125;</span><br><span class="line">d=&#123;k \varphi(n)+1&#125; \over e</span><br><span class="line">\end&#123;equation&#125;      </span><br><span class="line"></span><br><span class="line">\end&#123;document&#125;</span><br></pre></td></tr></table></figure><h3 id="插入参考文献"><a href="#插入参考文献" class="headerlink" title="插入参考文献"></a>插入参考文献</h3><ul><li>LaTex参考文献的插入和endnote等软件不一样</li><li>下载文献时点击bibtex，网页会显示出以下内容：</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">@article&#123;jones2017epicutaneous,</span><br><span class="line">  title=&#123;Epicutaneous immunotherapy for the treatment of peanut allergy in children and young adults&#125;,</span><br><span class="line">  author=&#123;Jones, Stacie M and Sicherer, Scott H and Burks, A Wesley and Leung, Donald YM and Lindblad, Robert W and Dawson, Peter and Henning, Alice K and Berin, M Cecilia and Chiang, David and Vickery, Brian P and others&#125;,</span><br><span class="line">  journal=&#123;Journal of Allergy and Clinical Immunology&#125;,</span><br><span class="line">  volume=&#123;139&#125;,</span><br><span class="line">  number=&#123;4&#125;,</span><br><span class="line">  pages=&#123;1242--1252&#125;,</span><br><span class="line">  year=&#123;2017&#125;,</span><br><span class="line">  publisher=&#123;Elsevier&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>​    这就是Latex中的参考文献格式</p><ul><li>使用时，首先在Latex文件的文件夹下创建一个新的bib文件（可以用记事本打开），并把上面的引用信息复制进去。（也可以使用别的管理文献的工具将end文件转化为bibtex文件，endnote等软件均有此功能）</li><li>jones2017epicutaneous，就是引用文献的label，在文章中输入\cite{li1999murine}来引用</li></ul>]]></content>
    
    
    <summary type="html">组会LaTeX教学</summary>
    
    
    
    <category term="2022" scheme="http://example.com/categories/2022/"/>
    
    
    <category term="软件笔记" scheme="http://example.com/tags/%E8%BD%AF%E4%BB%B6%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>易宏基因组流程</title>
    <link href="http://example.com/2022/02/21/%E6%98%93%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E6%B5%81%E7%A8%8B/"/>
    <id>http://example.com/2022/02/21/%E6%98%93%E5%AE%8F%E5%9F%BA%E5%9B%A0%E7%BB%84%E6%B5%81%E7%A8%8B/</id>
    <published>2022-02-21T00:00:00.000Z</published>
    <updated>2023-02-21T21:08:58.911Z</updated>
    
    <content type="html"><![CDATA[<p>[TOC] </p><h1 id="易宏基因组流程EasyMetagenomePipeline"><a href="#易宏基因组流程EasyMetagenomePipeline" class="headerlink" title="易宏基因组流程EasyMetagenomePipeline"></a>易宏基因组流程EasyMetagenomePipeline</h1><pre><code># 版本: 1.14, 2022/3/25# 测试环境为Linux Ubuntu 20.04 / CentOS 7.7</code></pre><h1 id="一、数据预处理-Data-preprocessing"><a href="#一、数据预处理-Data-preprocessing" class="headerlink" title="一、数据预处理 Data preprocessing"></a>一、数据预处理 Data preprocessing</h1><h2 id="1-1-准备工作-Prepare"><a href="#1-1-准备工作-Prepare" class="headerlink" title="1.1 准备工作 Prepare"></a>1.1 准备工作 Prepare</h2><ol><li>首次使用请参照<code>0Install.sh</code>脚本，安装软件和数据库(大约1-3天，仅一次)</li><li>易宏基因组(EasyMetagenome)流程<code>1Pipeline.sh</code>复制到项目文件夹，如本次为meta</li><li>项目文件夹准备测序数据(seq/*.fq.gz)和样本元数据(result/metadata.txt)</li></ol><h3 id="1-1-1-环境变量设置-每次开始分析前必须运行"><a href="#1-1-1-环境变量设置-每次开始分析前必须运行" class="headerlink" title="1.1.1 环境变量设置(每次开始分析前必须运行)"></a>1.1.1 环境变量设置(每次开始分析前必须运行)</h3><p>设置数据库、软件和工作目录</p><pre><code># Conda软件software安装目录，`conda env list`命令查看，如~/miniconda3soft=/conda2# 公共数据库database(db)位置，如管理员设置/db，个人下载至~/db，并添加其中linux目录中程序至环境变量db=/db# 设置工作目录work directory(wd)，如metawd=~/meta# 添加分析所需的软件、脚本至环境变量，添加至~/.bashrc中自动加载PATH=$db/EasyMicrobiome/linux:$db/EasyMicrobiome/script:$PATH# 创建并进入工作目录mkdir -p $wd &amp;&amp; cd $wd# 指定某个R语言环境(可选windows下本地运行)alias Rscript=&quot;/anaconda2/bin/Rscript --vanilla&quot;</code></pre><h3 id="1-1-2-起始文件——序列和元数据"><a href="#1-1-2-起始文件——序列和元数据" class="headerlink" title="1.1.2 起始文件——序列和元数据"></a>1.1.2 起始文件——序列和元数据</h3><pre><code># 创建3个常用子目录：序列，临时文件和结果mkdir -p seq temp result# 上传元数据metadata.txt至result目录，此处下载并重命名wget http://210.75.224.110/github/EasyMetagenome/result/metadata2.txtmv metadata2.txt result/metadata.txt# 检查文件格式，^I为制表符，$为Linux换行，^M$为Windows回车，^M为Mac换行符cat -A result/metadata.txt# 转换Windows回车为Linux换行sed -i &#39;s/\r//&#39; result/metadata.txtcat -A result/metadata.txt</code></pre><p>用户使用filezilla上传测序文件至seq目录，本次从其它位置复制，或从网络下载测试数据(多种方法任选其一)</p><pre><code># 方法1. 网络下载测试数据cd seq/awk &#39;&#123;system(&quot;wget -c http://210.75.224.110/github/EasyMetagenome/seq/&quot;$1&quot;_1.fq.gz&quot;)&#125;&#39; \  &lt;(tail -n+2 ../result/metadata.txt)awk &#39;&#123;system(&quot;wget -c http://210.75.224.110/github/EasyMetagenome/seq/&quot;$1&quot;_2.fq.gz&quot;)&#125;&#39; \  &lt;(tail -n+2 ../result/metadata.txt)cd ..# 方法2. 从其它目录复制测序数据# cp -rf /db/meta/seq/*.gz seq/# 查看文件大小ls -lsh seq# -l 列出详细信息 (l: list)# -sh 显示人类可读方式文件大小 (s: size; h: human readable)    </code></pre><h3 id="1-1-3-了解工作目录和文件"><a href="#1-1-3-了解工作目录和文件" class="headerlink" title="1.1.3 了解工作目录和文件"></a>1.1.3 了解工作目录和文件</h3><p>显示文件结构</p><pre><code># Ubuntu下安装tree命令# sudo apt install tree# 无法安装请更新软件列表 sudo apt updatetree -L 2# .# ├── pipeline.sh# ├── result# │   └── metadata.txt# ├── seq# │   ├── C1_1.fq.gz# │   ├── C1_2.fq.gz# │   ├── N1_1.fq.gz# │   └── N1_2.fq.gz# └── temp</code></pre><ul><li>1pipeline.sh是分析流程代码；</li><li>seq目录中有2个样本Illumina双端测序，4个序列文件；</li><li>temp是临时文件夹，存储分析中间文件，结束可全部删除节约空间</li><li>result是重要节点文件和整理化的分析结果图表，<ul><li>实验设计metadata.txt也在此</li></ul></li></ul><h2 id="1-2-可选-FastQC质量评估"><a href="#1-2-可选-FastQC质量评估" class="headerlink" title="1.2 (可选)FastQC质量评估"></a>1.2 (可选)FastQC质量评估</h2><pre><code># (可选)使用指定位置的(别人安装的)condasource /home/liuyongxin/miniconda2/bin/activate# 启动软件环境conda activate meta# 第一次使用软件要记录软件版本，文章方法中必须写清楚fastqc --version # 0.11.9# time统计运行时间，fastqc质量评估# *.gz为原始数据，-t指定多线程time fastqc seq/*.gz -t 2</code></pre><p>质控报告见<code>seq</code>目录，详细解读请阅读<a href="https://mp.weixin.qq.com/s/tDMih7ISLJcL4F4sWBq3Vw">《数据的质量控制软件——FastQC》</a>。</p><p>multiqc将fastqc的多个报告生成单个整合报告，方法批量查看和比较</p><pre><code># 记录软件版本multiqc --version # 1.8# 整理seq目录下fastqc报告，输出multiqc_report.html至result/qc目录multiqc -d seq/ -o result/qc</code></pre><p>查看右侧result/qc目录中multiqc_report.html，单击，选择<code>View in Web Browser</code>查看可交互式报告。</p><h2 id="1-3-质量控制"><a href="#1-3-质量控制" class="headerlink" title="1.3 质量控制"></a>1.3 质量控制</h2><pre><code>mkdir -p temp/qc</code></pre><h3 id="1-3-1-Fastp质量控制环境样品"><a href="#1-3-1-Fastp质量控制环境样品" class="headerlink" title="1.3.1 Fastp质量控制环境样品"></a>1.3.1 Fastp质量控制环境样品</h3><p>适用于无宿主污染的环境样品，质控速度快，自动识别接头和低质量，详见：<a href="http://mp.weixin.qq.com/s/u3U-AJW7oRYTx5h13c19UQ">极速的FASTQ文件质控+过滤+校正fastp</a></p><pre><code># 单样本质控i=C1fastp -i seq/$&#123;i&#125;_1.fq.gz -o temp/qc/$&#123;i&#125;_1.fastq -I seq/$&#123;i&#125;_2.fq.gz -O temp/qc/$&#123;i&#125;_2.fastq # 多样本并行tail -n+2 result/metadata.txt|cut -f1|rush -j 2 \  &quot;fastp -i seq/&#123;1&#125;_1.fq.gz -o temp/qc/&#123;1&#125;_1.fastq -I seq/&#123;1&#125;_2.fq.gz -O temp/qc/&#123;1&#125;_2.fastq&quot;</code></pre><h3 id="1-3-2-KneadData质控和去宿主"><a href="#1-3-2-KneadData质控和去宿主" class="headerlink" title="1.3.2 KneadData质控和去宿主"></a>1.3.2 KneadData质控和去宿主</h3><p>kneaddata是流程，它主要依赖trimmomatic质控和去接头，bowtie2比对宿主，然后筛选非宿主序列用于下游分析 。</p><p>详细教程和常见问题，阅读：<a href="https://mp.weixin.qq.com/s/ovL4TwalqZvwx5qWb5fsYA">MPB：随机宏基因组测序数据质量控制和去宿主的分析流程和常见问题</a></p><pre><code># 记录核心软件版本kneaddata --version # 0.7.4trimmomatic -version # 0.39bowtie2 --version # 2.3.5.1# 可只选一行中部分代码点击Run，如选中下行中#号后面命令查看程序帮助# kneaddata -h # 显示帮助</code></pre><p>检查点：zless/zcat查看可压缩文件，检查序列质量格式(质量值大写字母为标准Phred33格式，小写字母为Phred64，需参考附录：质量值转换)；检查双端序列ID是否重复，如果重名需要在质控前改名更正。参考<strong>附录，质控kneaddata，去宿主后双端不匹配——序列改名</strong>。</p><pre><code># 设置某个样本名为变量i，以后再无需修改i=C1# zless查看压缩文件，空格翻页，按q退出。zless seq/$&#123;i&#125;_1.fq.gz | head -n4# zcat显示压缩文件，head指定显示行数zcat seq/$&#123;i&#125;_2.fq.gz | head -n4</code></pre><ul><li>“|” 为管道符，上一个命令的输出，传递给下一个命令做输入</li><li>gzip: stdout: Broken pipe：管道断开。这里是人为断开，不是错误</li><li>运行过程中需要仔细阅读屏幕输出的信息</li></ul><p>如果序列双端名称一致，改名参见下方代码</p><p>(可选) 序列改名，解决NCBI SRA数据双端ID重名问题，详见<a href="https://mp.weixin.qq.com/s/ovL4TwalqZvwx5qWb5fsYA">《MPB：随机宏基因组测序数据质量控制和去宿主的分析流程和常见问题》</a>。</p><pre><code>gunzip seq/*.gzsed -i &#39;1~4 s/$/\\1/g&#39; seq/*_1.fqsed -i &#39;1~4 s/$/\\2/g&#39; seq/*_2.fq# 再次核对样本是否标签有重复head seq/C2_1.fqhead seq/C2_2.fq# 结果压缩节省空间gzip seq/*.fq# pigz是并行版的gzip，没装可使用为gzip# pigz seq/*.fq</code></pre><h4 id="可选-单样品质控"><a href="#可选-单样品质控" class="headerlink" title="(可选)单样品质控"></a>(可选)单样品质控</h4><p>若一条代码分割在多行显示时，最好全部选中运行，多行分割的代码行末有一个 “\” 。多行注释命令运行，可全选，按Ctrl+Shift+C进行注释的取消和添加。</p><ul><li>以metadata中<code>C1</code>样品本质控为例</li></ul><ol><li>输入文件：双端FASTQ测序数据，提供给参数-i，seq/${i}_1.fq.gz和 seq/${i}_2.fq.gz</li><li>参考数据库：宿主基因组索引 -db ${db}/kneaddata/human_genome/hg37dec_v0.1</li><li>输出文件：质控后的FASTQ测序数据，在目录temp/qc下面，${i}_1_kneaddata_paired_1.fastq和${i}_1_kneaddata_paired_1.fastq，用于后续分析</li><li>软件位置：<code>conda env list</code>查看软件安装位置，请务必根据自己软件和数据库安装位置，修改软件trimmomatic和接头文件位置。</li></ol><p>(可选)手动设置trimmomatic程序和接头位置</p><pre><code>程序目录：$&#123;soft&#125;/envs/meta/share/trimmomatic/# 查看multiqc结果中接头污染最严重的C2_1样本，再到fastqc报告中查看接头序列，复制前20个碱基检索确定接头文件grep &#39;AGATCGGAAGAGCGTCGTGTAGGGAAA&#39; $&#123;soft&#125;/envs/meta/share/trimmomatic/adapters/*# 根据实际情况选择单端SE或双端PE，与原序列比较确定为 TruSeq2-PE.fa，目前多为TruSeq3-PE-2.fa，更准确的是问测序公司要接头文件</code></pre><p>100万条序列8线程质控和去宿主，耗时~2m。</p><pre><code>i=C1# kneaddata位于liuyongxin中的meta环境，基因组名称为Homo_sapiens或hg37dec_v0.1# soft=/home/liuyongxin/miniconda2/kneaddata -i seq/$&#123;i&#125;_1.fq.gz -i seq/$&#123;i&#125;_2.fq.gz \  -o temp/qc -v -t 8 --remove-intermediate-output \  --trimmomatic $&#123;soft&#125;/envs/meta/share/trimmomatic/ \  --trimmomatic-options &quot;ILLUMINACLIP:$&#123;soft&#125;/envs/meta/share/trimmomatic/adapters/TruSeq2-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50&quot; \  --reorder --bowtie2-options &quot;--very-sensitive --dovetail&quot; \  -db $&#123;db&#125;/kneaddata/human_genome/hg37dec_v0.1# 查看质控后的结果文件大小，确保不是0ls -shtr temp/qc/$&#123;i&#125;_1_kneaddata_paired_?.fastq</code></pre><h4 id="多样品并行质控"><a href="#多样品并行质控" class="headerlink" title="多样品并行质控"></a>多样品并行质控</h4><p>方法1. rush并行管理：注释修改trimmomatic为绝对路径，即修改/home/liuyongxin/miniconda2为你设置的soft变量完整路径，自己用户安装的soft为~/miniconda3(注：存在单引号的代码内不支持变量)</p><pre><code>tail -n+2 result/metadata.txt|cut -f1|rush -j 2 \  &quot;kneaddata -i seq/&#123;1&#125;_1.fq.gz -i seq/&#123;1&#125;_2.fq.gz \  -o temp/qc -v -t 3 --remove-intermediate-output \  --trimmomatic $soft/envs/meta/share/trimmomatic/ \  --trimmomatic-options &#39;ILLUMINACLIP:/home/liuyongxin/miniconda2/envs/meta/share/trimmomatic/adapters/TruSeq2-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50&#39; \  --reorder --bowtie2-options &#39;--very-sensitive --dovetail&#39; \  -db $&#123;db&#125;/kneaddata/human_genome/hg37dec_v0.1&quot;</code></pre><p>(可选)方法2. parallel并行质控和去宿主</p><pre><code># 记录软件版本parallel --version # 20160222# 打will cite承诺引用并行软件parallelparallel --citation # parallel软件说明和使用实例# 根据样本列表`:::`并行处理，并行j=2个任务，每个任务t=3个线程，2~7m# 运行下面这行，体会下parallel的工作原理# ::: 表示传递参数；第一个::: 后面为第一组参数，对应于&#123;1&#125;;# 第二个::: 后面为第二组参数，对应于&#123;2&#125;，依次替换parallel -j 3 --xapply &quot;echo &#123;1&#125; &#123;2&#125;&quot; ::: seq/*_1.fq.gz ::: seq/*_2.fq.gz# --xapply保持文件成对，否则将为两两组合，显示如下：parallel -j 2 &quot;echo &#123;1&#125; &#123;2&#125;&quot; ::: seq/*_1.fq.gz ::: seq/*_2.fq.gz# 从文件列表使用parallel -j 3 --xapply &quot;echo seq/&#123;1&#125;_1.fq.gz seq/&#123;1&#125;_2.fq.gz&quot; ::: `tail -n+2 result/metadata.txt|cut -f1`# 单样本运行成功，且参数设置绝对路径。出现错误`Unrecognized option: -d64`参考**附录，质控Kneaddata，Java版本不匹配——重装Java运行环境**。# 每步分析产生多个文件时新建子文件夹# 每个线程处理百万序列约10分钟，多线程可加速 j x t 倍# 注意此处引物文件必须填写绝对路径，否则无法使用time parallel -j 2 --xapply \  &quot;kneaddata -i seq/&#123;1&#125;_1.fq.gz \  -i seq/&#123;1&#125;_2.fq.gz \  -o temp/qc -v -t 3 --remove-intermediate-output \  --trimmomatic /home/liuyongxin/miniconda2/envs/meta/share/trimmomatic/ \  --trimmomatic-options &#39;ILLUMINACLIP:/home/liuyongxin/miniconda2/envs/meta/share/trimmomatic/adapters/TruSeq2-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50&#39; \  --reorder --bowtie2-options &#39;--very-sensitive --dovetail&#39; \  -db $&#123;db&#125;/kneaddata/human_genome/Homo_sapiens&quot; \  ::: `tail -n+2 result/metadata.txt|cut -f1`</code></pre><h4 id="质控结果改名、临时文件删除和统计"><a href="#质控结果改名、临时文件删除和统计" class="headerlink" title="质控结果改名、临时文件删除和统计"></a>质控结果改名、临时文件删除和统计</h4><p>大文件清理，高宿主含量样本可节约&gt;90%空间</p><pre><code>rm -rf temp/qc/*contam* temp/qc/*unmatched*  temp/qc/*.fqls -l temp/qc/</code></pre><p><strong>结果文件链接为新名</strong>：awk的system命令批处理系统命令，s为软链(快捷方式)、f为强制(force)</p><pre><code>awk &#39;&#123;system(&quot;ln -sf `pwd`/temp/qc/&quot;$1&quot;_1_kneaddata_paired_1.fastq temp/qc/&quot;$1&quot;_1.fastq&quot;)&#125;&#39; &lt;(tail -n+2 result/metadata.txt)awk &#39;&#123;system(&quot;ln -sf `pwd`/temp/qc/&quot;$1&quot;_1_kneaddata_paired_2.fastq temp/qc/&quot;$1&quot;_2.fastq&quot;)&#125;&#39; &lt;(tail -n+2 result/metadata.txt)ls -l temp/qc/</code></pre><p>质控结果汇总</p><pre><code># 采用kneaddata附属工具kneaddata_read_count_tablekneaddata_read_count_table --input temp/qc \  --output temp/kneaddata.txt# 筛选重点结果列cut -f 1,2,4,12,13 temp/kneaddata.txt | sed &#39;s/_1_kneaddata//&#39; &gt; result/qc/sum.txtcat result/qc/sum.txt# 用R代码统计下质控结果，可在本地运行Rscript -e &quot;data=read.table(&#39;result/qc/sum.txt&#39;, header=T, row.names=1, sep=&#39;\t&#39;); summary(data)&quot;# R转换宽表格为长表格Rscript -e &quot;library(reshape2); data=read.table(&#39;result/qc/sum.txt&#39;, header=T,row.names=1, sep=&#39;\t&#39;); write.table(melt(data), file=&#39;result/qc/sum_long.txt&#39;,sep=&#39;\t&#39;, quote=F, col.names=T, row.names=F)&quot;cat result/qc/sum_long.txt# 可用 http://www.ehbio.com/ImageGP/ 绘图展示</code></pre><h2 id="1-4-可选-质控后质量评估"><a href="#1-4-可选-质控后质量评估" class="headerlink" title="1.4 (可选)质控后质量评估"></a>1.4 (可选)质控后质量评估</h2><p>整理bowtie2, trimmomatic, fastqc报告，接头和PCR污染率一般小于1%。结果见：result/qc/multiqc_report_1.html</p><pre><code># 1-2mfastqc temp/qc/*_1_kneaddata_paired_*.fastq -t 2multiqc -d temp/qc/ -o result/qc/# v1.7以后开始使用Python3，v1.8+缺少bowtie2比对结果的统计</code></pre><h1 id="二、基于读长分析-Read-based-HUMAnN2"><a href="#二、基于读长分析-Read-based-HUMAnN2" class="headerlink" title="二、基于读长分析 Read-based (HUMAnN2)"></a>二、基于读长分析 Read-based (HUMAnN2)</h1><h2 id="2-1-准备HUMAnN2输入文件"><a href="#2-1-准备HUMAnN2输入文件" class="headerlink" title="2.1 准备HUMAnN2输入文件"></a>2.1 准备HUMAnN2输入文件</h2><p>小技巧：循环批量处理样本列表</p><pre><code># 基于样本元数据提取样本列表命令解析# 去掉表头tail -n+2 result/metadata.txt# 提取第一列样本名tail -n+2 result/metadata.txt|cut -f1# 循环处理样本for i in `tail -n+2 result/metadata.txt|cut -f1`;do echo &quot;Processing &quot;$i; done# ` 反引号为键盘左上角Esc键下面的按键，一般在数字1的左边，代表运行命令返回结果</code></pre><p>HUMAnN2要求双端序列合并的文件作为输入，for循环根据实验设计样本名批量双端序列合并。<br>注意星号和问号，分别代表多个和单个字符。当然大家更不能溜号~~~行分割的代码行末有一个 \ </p><pre><code>mkdir -p temp/concat# 双端合并为单个文件for i in `tail -n+2 result/metadata.txt|cut -f1`;do   cat temp/qc/$&#123;i&#125;_?.fastq \  &gt; temp/concat/$&#123;i&#125;.fq; done# 查看样品数量和大小ls -shl temp/concat/*.fq# 数据太大，计算时间长，可用head对单端分析截取20M序列，即3G，则为80M行，详见附录：HUMAnN2减少输出文件加速</code></pre><h2 id="2-2-HUMAnN2计算物种和功能组成"><a href="#2-2-HUMAnN2计算物种和功能组成" class="headerlink" title="2.2 HUMAnN2计算物种和功能组成"></a>2.2 HUMAnN2计算物种和功能组成</h2><ul><li>物种组成调用MetaPhlAn2, bowtie2比对至核酸序列，解决有哪些微生物存在的问题；</li><li>功能组成为humann2调用diamond比对至蛋白库11Gb，解决这些微生物参与哪些功能通路的问题；</li><li>输入文件：temp/concat/*.fq 每个样品质控后双端合并后的fastq序列</li><li>输出文件：temp/humann2/ 目录下<ul><li>C1_pathabundance.tsv</li><li>C1_pathcoverage.tsv</li><li>C1_genefamilies.tsv</li></ul></li><li>整合后的输出：<ul><li>result/metaphlan2/taxonomy.tsv 物种丰度表</li><li>result/metaphlan2/taxonomy.spf 物种丰度表（用于stamp分析）</li><li>result/humann2/pathabundance_relab_unstratified.tsv 通路丰度表</li><li>result/humann2/pathabundance_relab_stratified.tsv 通路物种组成丰度表</li><li>stratified(每个菌对此功能通路组成的贡献)和unstratified(功能组成)</li></ul></li></ul><p>启动humann2环境：仅humann2布置于自定义环境下使用</p><pre><code># 方法1. conda加载环境conda activate humann2# 方法2. source加载指定# source /home/liuyongxin/miniconda2/envs/humann2/bin/activate</code></pre><p>检查数据库配置是否正确</p><pre><code>humann2 --version # v2.8.1humann2_configmkdir -p temp/humann2</code></pre><p>单样本1.25M PE150运行测试，8p，2.5M，1~2h；0.2M, 34m；0.1M，30m；0.01M，25m；16p，18m</p><pre><code># CRITICAL ERROR: Can not call software version for bowtie2，见&quot;Perl环境&quot;i=C1# memusg -t humann2 --input temp/concat/$&#123;i&#125;.fq       --output temp/humann2 --threads 16</code></pre><p>多样本并行计算，测试数据约30m，系统耗时12小时</p><pre><code>tail -n+2 result/metadata.txt|cut -f1|rush -j 2 \  &#39;humann2 --input temp/concat/&#123;1&#125;.fq  \  --output temp/humann2/&#39;# (可选)大文件清理，humann2临时文件可达原始数据30~40倍# 链接重要文件至humann2目录for i in `tail -n+2 result/metadata.txt|cut -f1`;do    ln temp/humann2/$&#123;i&#125;_humann2_temp/$&#123;i&#125;_metaphlan_bugs_list.tsv temp/humann2/done    # 删除临时文件rm -rf temp/concat/* temp/humann2/*_humann2_temp</code></pre><h2 id="2-3-物种组成表"><a href="#2-3-物种组成表" class="headerlink" title="2.3 物种组成表"></a>2.3 物种组成表</h2><h3 id="2-3-1-样品结果合并"><a href="#2-3-1-样品结果合并" class="headerlink" title="2.3.1 样品结果合并"></a>2.3.1 样品结果合并</h3><pre><code>mkdir -p result/metaphlan2# 合并、修正样本名、预览merge_metaphlan_tables.py temp/humann2/*_metaphlan_bugs_list.tsv | \  sed &#39;s/_metaphlan_bugs_list//g&#39; &gt; result/metaphlan2/taxonomy.tsvhead -n5 result/metaphlan2/taxonomy.tsv</code></pre><h3 id="2-3-2-转换为stamp的spf格式"><a href="#2-3-2-转换为stamp的spf格式" class="headerlink" title="2.3.2 转换为stamp的spf格式"></a>2.3.2 转换为stamp的spf格式</h3><pre><code>metaphlan_to_stamp.pl result/metaphlan2/taxonomy.tsv \  &gt; result/metaphlan2/taxonomy.spfhead -n5 result/metaphlan2/taxonomy.spf# 下载metadata.txt和taxonomy.spf使用stamp分析# 网络分析见附录 metaphlan2-共有或特有物种网络图</code></pre><h3 id="2-3-3-可选-Python绘制热图"><a href="#2-3-3-可选-Python绘制热图" class="headerlink" title="2.3.3 (可选)Python绘制热图"></a>2.3.3 (可选)Python绘制热图</h3><pre><code># c设置颜色方案，top设置物种数量，minv最小相对丰度，s标准化方法，log为取10为底对数，xy为势图宽和高，图片可选pdf/png/svg格式metaphlan_hclust_heatmap.py \  --in result/metaphlan2/taxonomy.tsv \  --out result/metaphlan2/heatmap.pdf \  -c jet --top 30 --minv 0.1 \  -s log -x 0.4 -y 0.2# 报错解决详见附录：### metaphlan_hclust_heatmap.py报错AttributeError: Unknown property axisbg# 帮助见 metaphlan_hclust_heatmap.py -h# 更多绘制见3StatPlot.sh</code></pre><h2 id="2-4-功能组成分析"><a href="#2-4-功能组成分析" class="headerlink" title="2.4 功能组成分析"></a>2.4 功能组成分析</h2><h3 id="2-4-1-功能组成合并、标准化和分层"><a href="#2-4-1-功能组成合并、标准化和分层" class="headerlink" title="2.4.1 功能组成合并、标准化和分层"></a>2.4.1 功能组成合并、标准化和分层</h3><p>合并通路丰度(pathabundance)，含功能和对应物种组成。<br>可选基因家族(genefamilies 太多)，通路覆盖度(pathcoverage)。<br>注意看屏幕输出<code># Gene table created: result/humann2/pathabundance.tsv</code></p><pre><code>mkdir -p result/humann2humann2_join_tables \  --input temp/humann2 \  --file_name pathabundance \  --output result/humann2/pathabundance.tsv# 样本名调整：删除列名多余信息head result/humann2/pathabundance.tsvsed -i &#39;s/_Abundance//g&#39; result/humann2/pathabundance.tsv# 预览和统计head result/humann2/pathabundance.tsvcsvtk -t stat result/humann2/pathabundance.tsv</code></pre><p>标准化为相对丰度relab(1)或百万比cpm(1,000,000)</p><pre><code>humann2_renorm_table \  --input result/humann2/pathabundance.tsv \  --units relab \  --output result/humann2/pathabundance_relab.tsvhead -n5 result/humann2/pathabundance_relab.tsv</code></pre><p>分层结果：功能和对应物种表(stratified)和功能组成表(unstratified)</p><pre><code>humann2_split_stratified_table \  --input result/humann2/pathabundance_relab.tsv \  --output result/humann2/ # 可以使用stamp进行统计分析</code></pre><h3 id="2-4-2-差异比较和柱状图"><a href="#2-4-2-差异比较和柱状图" class="headerlink" title="2.4.2 差异比较和柱状图"></a>2.4.2 差异比较和柱状图</h3><p>两样本无法组间比较，在pcl层面替换为HMP数据进行统计和可视化。</p><p>参考 <a href="https://bitbucket.org/biobakery/humann2/wiki/Home#markdown-header-standard-workflow">https://bitbucket.org/biobakery/humann2/wiki/Home#markdown-header-standard-workflow</a></p><ul><li>输入数据：通路丰度表格 result/humann2/pathabundance.tsv</li><li>输入数据：实验设计信息 result/metadata.txt</li><li>中间数据：包含分组信息的通路丰度表格文件 result/humann2/pathabundance.pcl </li><li>输出结果：result/humann2/associate.txt</li></ul><p>在通路丰度中添加分组</p><pre><code>## 提取样品列表head -n1 result/humann2/pathabundance.tsv | sed &#39;s/# Pathway/SampleID/&#39; | tr &#39;\t&#39; &#39;\n&#39; &gt; temp/header## 对应分组，本示例分组为第2列($2)，根据实际情况修改awk &#39;BEGIN&#123;FS=OFS=&quot;\t&quot;&#125;NR==FNR&#123;a[$1]=$2&#125;NR&gt;FNR&#123;print a[$1]&#125;&#39; result/metadata.txt temp/header | tr &#39;\n&#39; &#39;\t&#39;|sed &#39;s/\t$/\n/&#39; &gt; temp/group# 合成样本、分组+数据cat &lt;(head -n1 result/humann2/pathabundance.tsv) temp/group &lt;(tail -n+2 result/humann2/pathabundance.tsv) \  &gt; result/humann2/pathabundance.pclhead -n5 result/humann2/pathabundance.pcl</code></pre><p>组间比较，样本量少无差异，结果为4列的文件：通路名字，通路在各个分组的丰度，差异P-value，校正后的Q-value。<br>演示数据2样本无法统计，此处替换为HMP的结果演示统计和绘图(上传hmp_pathabund.pcl，替换pathabundance.pcl为hmp_pathabund.pcl)。</p><pre><code>wget http://210.75.224.110/db/train/meta/result/humann2/hmp_pathabund.pcl# cp /db/humann2/hmp_pathabund.pcl ./mv hmp_pathabund.pcl result/humann2/# 设置输入文件名pcl=result/humann2/hmp_pathabund.pcl# 统计表格行、列数量csvtk -t stat $&#123;pcl&#125;head -n2 $&#123;pcl&#125; |cut -f 1-5# 按分组KW检验，注意第二列的分组列名humann2_associate --input $&#123;pcl&#125; \    --focal-metadatum Group --focal-type categorical \    --last-metadatum Group --fdr 0.05 \    --output result/humann2/associate.txtwc -l result/humann2/associate.txthead -n5 result/humann2/associate.txt</code></pre><p>barplot展示通路的物种组成，如：腺苷核苷酸合成</p><pre><code># --sort sum metadata 按丰度和分组排序# 指定差异通路，如 P163-PWY / PWY-3781 / PWY66-409 / PWY1F-823path=PWY-3781humann2_barplot --sort sum metadata \    --input $&#123;pcl&#125; --focal-feature $&#123;path&#125; \    --focal-metadatum Group --last-metadatum Group \    --output result/humann2/barplot_$&#123;path&#125;.pdf</code></pre><h3 id="2-4-3-转换为KEGG注释"><a href="#2-4-3-转换为KEGG注释" class="headerlink" title="2.4.3 转换为KEGG注释"></a>2.4.3 转换为KEGG注释</h3><p>需要下载utility_mapping数据库并配置成功才可以使用。详见软件和数据库安装1soft_db.sh。</p><p>支持GO、PFAM、eggNOG、level4ec、KEGG的D级KO等注释，详见<code>humann2_regroup_table -h</code>。</p><pre><code># 转换基因家族为KO(uniref90_ko)，可选eggNOG(uniref90_eggnog)或酶(uniref90_level4ec)for i in `tail -n+2 result/metadata.txt|cut -f1`;do  humann2_regroup_table \    -i temp/humann2/$&#123;i&#125;_genefamilies.tsv \    -g uniref90_ko \    -o temp/humann2/$&#123;i&#125;_ko.tsvdone# 合并，并修正样本名humann2_join_tables \  --input temp/humann2/ \  --file_name ko \  --output result/humann2/ko.tsvsed -i &#39;1s/_Abundance-RPKs//g&#39; result/humann2/ko.tsvtail result/humann2/ko.tsv# 与pathabundance类似，可进行标准化renorm、分层stratified、柱状图barplot等操作</code></pre><h2 id="2-5-GraPhlAn图"><a href="#2-5-GraPhlAn图" class="headerlink" title="2.5 GraPhlAn图"></a>2.5 GraPhlAn图</h2><pre><code># metaphlan2 to graphlanexport2graphlan.py --skip_rows 1,2 -i result/metaphlan2/taxonomy.tsv \  --tree temp/merged_abundance.tree.txt \  --annotation temp/merged_abundance.annot.txt \  --most_abundant 1000 --abundance_threshold 20 --least_biomarkers 10 \  --annotations 3,4 --external_annotations 7# 参数说明见PPT，或运行 export2graphlan.py --help# graphlan annotationgraphlan_annotate.py --annot temp/merged_abundance.annot.txt \  temp/merged_abundance.tree.txt  temp/merged_abundance.xml# output PDF figure, annoat and legendgraphlan.py temp/merged_abundance.xml result/metaphlan2/graphlan.pdf \  --external_legends </code></pre><h2 id="2-6-LEfSe差异分析物种"><a href="#2-6-LEfSe差异分析物种" class="headerlink" title="2.6 LEfSe差异分析物种"></a>2.6 LEfSe差异分析物种</h2><ul><li>输入文件：物种丰度表result/metaphlan2/taxonomy.tsv</li><li>输入文件：样品分组信息 result/metadata.txt</li><li>中间文件：整合后用于LefSe分析的文件 result/metaphlan2/lefse.txt，这个文件可以提供给<a href="http://www.ehbio.com/ImageGP">www.ehbio.com/ImageGP</a> 用于在线LefSE分析</li><li>LefSe结果输出：result/metaphlan2/目录下lefse开头和feature开头的文件</li></ul><p>前面演示数据仅有2个样本，无法进行差异比较。下面使用result12目录中由12个样本生成的结果表进行演示</p><pre><code># 设置结果目录，自己的数据使用result，演示用result12result=result12# 下载演示数据# wget http://210.75.224.110/db/EasyMetagenome/result12.zip &amp;&amp; unzip result12.zip</code></pre><p>准备输入文件，修改样本品为组名(可手动修改)</p><pre><code># 预览输出数据head -n3 $result/metaphlan2/taxonomy.tsv# 提取样本行，替换为每个样本一行，修改ID为SampleIDhead -n1 $result/metaphlan2/taxonomy.tsv|tr &#39;\t&#39; &#39;\n&#39;|sed &#39;1 s/ID/SampleID/&#39; &gt;temp/sampleidhead -n3 temp/sampleid# 提取SampleID对应的分组Group(假设为metadata.txt中第二列$2)，替换换行\n为制表符\t，再把行末制表符\t替换回换行awk &#39;BEGIN&#123;OFS=FS=&quot;\t&quot;&#125;NR==FNR&#123;a[$1]=$2&#125;NR&gt;FNR&#123;print a[$1]&#125;&#39; $result/metadata.txt temp/sampleid|tr &#39;\n&#39; &#39;\t&#39;|sed &#39;s/\t$/\n/&#39; &gt;groupidcat groupid# 合并分组和数据(替换表头)cat groupid &lt;(tail -n+2 $result/metaphlan2/taxonomy.tsv) &gt; $result/metaphlan2/lefse.txthead -n3 $result/metaphlan2/lefse.txt</code></pre><p>方法1. 推荐在线 <a href="http://www.ehbio.com/ImageGP">http://www.ehbio.com/ImageGP</a> 中LEfSe一键分析 </p><p>方法2. (可选)LEfSe命令行分析代码供参考</p><pre><code># 格式转换为lefse内部格式lefse-format_input.py \  $result/metaphlan2/lefse.txt \  temp/input.in -c 1 -o 1000000# 运行lefse(样本无重复、分组将报错)run_lefse.py temp/input.in \  temp/input.res# 绘制物种树注释差异lefse-plot_cladogram.py temp/input.res \  result/metaphlan2/lefse_cladogram.pdf --format pdf# 绘制所有差异features柱状图lefse-plot_res.py temp/input.res \  $result/metaphlan2/lefse_res.pdf --format pdf    # 绘制单个features柱状图# 查看显著差异features，按丰度排序grep -v &#39;-&#39; temp/input.res | sort -k3,3n # 手动选择指定feature绘图，如Firmicuteslefse-plot_features.py -f one \  --feature_name &quot;k__Bacteria.p__Firmicutes&quot; \  --format pdf \  temp/input.in temp/input.res \  $result/metaphlan2/lefse_Firmicutes.pdf# 批量绘制所有差异features柱状图lefse-plot_features.py -f diff \  --archive none --format pdf \  temp/input.in temp/input.res \  $result/metaphlan2/lefse_</code></pre><h2 id="2-7-Kraken2物种注释"><a href="#2-7-Kraken2物种注释" class="headerlink" title="2.7 Kraken2物种注释"></a>2.7 Kraken2物种注释</h2><p>Kraken2可以快速完成读长(read)层面的物种注释和定量，还可以进行重叠群(contig)、基因(gene)、宏基因组组装基因组(MAG/bin)层面的序列物种注释。</p><pre><code># 方法1.启动kraken2工作环境conda activate kraken2# 方法2.启动指定位置的环境# source /conda2/envs/kraken2/bin/activate# 记录软件版本kraken2 --version # 2.1.1</code></pre><h3 id="2-7-1-Kraken2物种注释"><a href="#2-7-1-Kraken2物种注释" class="headerlink" title="2.7.1 Kraken2物种注释"></a>2.7.1 Kraken2物种注释</h3><ul><li><p>{1}代表样本名字</p></li><li><p>输入：temp/qc/{1}_1_kneaddata_paired*.fastq 质控后的FASTQ数据</p></li><li><p>参考数据库：-db ${db}/kraken2/mini/，默认标准数据库&gt;50GB，这里使用8GB迷你数据库。</p></li><li><p>输出结果：每个样本单独输出，temp/kraken2/{1}_report和temp/kraken2/{1}_output</p></li><li><p>整合后的输出结果： result/kraken2/taxonomy_count.txt 物种丰度表</p><p>  mkdir -p temp/kraken2</p></li></ul><p>(可选) 单样本注释，5m</p><pre><code>i=C1# 1m，--use-mpa-style可直接输出metphlan格式，但bracken无法处理# 2020/12/02版，65K双端序列，38.58%可注释，61.42%未注释，耗时5s，内存峰值8G# 2021/04/23版，65K双端序列，52.17%可注释，52.17%未注释，耗时5s，内存峰值8G# 内存8G的PC可运行，需要与硬盘交换，需3m，内存峰值4.5Gkraken2 --db $&#123;db&#125;/kraken2/mini/ --paired temp/qc/$&#123;i&#125;_?.fastq \  --threads 8 --use-names --report-zero-counts \  --report temp/kraken2/$&#123;i&#125;.report \  --output temp/kraken2/$&#123;i&#125;.output</code></pre><p>多样本并行生成report，1样本8线程，内存大但速度快，内存不多不建议用多线程</p><pre><code>tail -n+2 result/metadata.txt|cut -f1|rush -j 2 \  &quot;kraken2 --db $&#123;db&#125;/kraken2/mini --paired temp/qc/&#123;1&#125;_?.fastq \  --threads 8 --use-names --report-zero-counts \  --report temp/kraken2/&#123;1&#125;.report \  --output temp/kraken2/&#123;1&#125;.output&quot;</code></pre><p>使用krakentools转换report为mpa格式</p><pre><code>for i in `tail -n+2 result/metadata.txt|cut -f1`;do  kreport2mpa.py -r temp/kraken2/$&#123;i&#125;.report \    --display-header \    -o temp/kraken2/$&#123;i&#125;.mpa;done</code></pre><p>合并样本为表格</p><pre><code>mkdir -p result/kraken2# 输出结果行数相同，但不一定顺序一致，要重新排序tail -n+2 result/metadata.txt|cut -f1|rush -j 1 \  &#39;tail -n+2 temp/kraken2/&#123;1&#125;.mpa | LC_ALL=C sort | cut -f 2 | sed &quot;1 s/^/&#123;1&#125;\n/&quot; &gt; temp/kraken2/&#123;1&#125;_count &#39;# 提取第一样本品行名为表行名header=`tail -n 1 result/metadata.txt | cut -f 1`echo $headertail -n+2 temp/kraken2/$&#123;header&#125;.mpa | LC_ALL=C sort | cut -f 1 | \  sed &quot;1 s/^/Taxonomy\n/&quot; &gt; temp/kraken2/0header_counthead -n3 temp/kraken2/0header_count# paste合并样本为表格ls temp/kraken2/*countpaste temp/kraken2/*count &gt; result/kraken2/tax_count.mpa# 检查表格及统计csvtk -t stat result/kraken2/tax_count.mpa</code></pre><h3 id="2-7-2-Bracken估计丰度"><a href="#2-7-2-Bracken估计丰度" class="headerlink" title="2.7.2 Bracken估计丰度"></a>2.7.2 Bracken估计丰度</h3><p>参数简介：</p><ul><li>-d为数据库，与kraken2一致</li><li>-i为输入kraken2报告文件</li><li>r是读长，此处为100，通常为150</li><li>l为分类级，本次种级别(S)丰度估计，可选域、门、纲、目、科、属、种：D,P,C,O,F,G,S</li><li>t是阈值，默认为0，越大越可靠，但可用数据越少</li><li>-o 输出重新估计的值</li></ul><p>循环重新估计每个样品的丰度</p><pre><code># 设置估算的分类级别D,P,C,O,F,G,S，常用 P和Stax=Pmkdir -p temp/brackenfor i in `tail -n+2 result/metadata.txt|cut -f1`;do    # i=C1    bracken -d $&#123;db&#125;/kraken2/mini \      -i temp/kraken2/$&#123;i&#125;.report \      -r 100 -l $&#123;tax&#125; -t 0 \      -o temp/bracken/$&#123;i&#125;;done</code></pre><p>结果描述：共7列，分别为物种名、ID、分类级、读长计数、补充读长计数、<strong>总数、百分比</strong></p><pre><code>name    taxonomy_id     taxonomy_lvl    kraken_assigned_reads   added_reads     new_est_reads        fraction_total_readsCapnocytophaga sputigena        1019    S       4798    996     5794    0.23041Capnocytophaga sp. oral taxon 878       1316596 S       239     21      260     0.01034</code></pre><p>bracken结果合并成表</p><pre><code># 输出结果行数相同，但不一定顺序一致，要去年表头重新排序# 仅提取第6列reads count，并添加样本名tail -n+2 result/metadata.txt|cut -f1|rush -j 1 \  &#39;tail -n+2 temp/bracken/&#123;1&#125; | LC_ALL=C sort | cut -f6 | sed &quot;1 s/^/&#123;1&#125;\n/&quot; &gt; temp/bracken/&#123;1&#125;.count &#39;# 提取第一样本品行名为表行名h=`tail -n1 result/metadata.txt|cut -f1`tail -n+2 temp/bracken/$&#123;h&#125;|sort|cut -f1 | \  sed &quot;1 s/^/Taxonomy\n/&quot; &gt; temp/bracken/0header.count# 检查文件数，为n+1ls temp/bracken/*count | wc# paste合并样本为表格，并删除非零行paste temp/bracken/*count &gt; result/kraken2/bracken.$&#123;tax&#125;.txt# 统计行列，默认去除表头csvtk -t stat result/kraken2/bracken.$&#123;tax&#125;.txt</code></pre><p>结果筛选</p><pre><code># 需要指定安装R的位置和脚本位置# alias Rscript=&quot;/anaconda2/bin/Rscript --vanilla&quot;sd=/db/EasyMicrobiome/script# microbiome_helper按频率过滤，-r可标准化，-e过滤Rscript $sd/filter_feature_table.R \  -i result/kraken2/bracken.$&#123;tax&#125;.txt \  -p 0.01 \  -o result/kraken2/bracken.$&#123;tax&#125;.0.01# &gt; 0.01(1%)的样本在出现，数量会明显减少csvtk -t stat result/kraken2/bracken.$&#123;tax&#125;.0.01# 门水平去除脊索动物grep &#39;Chordata&#39; result/kraken2/bracken.P.0.01grep -v &#39;Chordata&#39; result/kraken2/bracken.P.0.01 &gt; result/kraken2/bracken.P.0.01-H# 按物种名手动去除宿主污染，以人为例(需按种水平计算相关结果)# 种水平去除人类P:Chordata,S:Homo sapiensgrep &#39;Homo sapiens&#39; result/kraken2/bracken.S.0.01grep -v &#39;Homo sapiens&#39; result/kraken2/bracken.S.0.01 &gt; result/kraken2/bracken.S.0.01-H</code></pre><p>分析后清理每条序列的注释大文件</p><pre><code># rm -rf temp/kraken2/*.output</code></pre><p>多样性分析/物种组成，详见3StatPlot.sh，Kraken2结果筛选序列见附录</p><h1 id="三、组装分析流程-Assemble-based"><a href="#三、组装分析流程-Assemble-based" class="headerlink" title="三、组装分析流程 Assemble-based"></a>三、组装分析流程 Assemble-based</h1><h2 id="3-1-拼接-Assembly"><a href="#3-1-拼接-Assembly" class="headerlink" title="3.1 拼接 Assembly"></a>3.1 拼接 Assembly</h2><h3 id="3-1-1-MEGAHIT拼接"><a href="#3-1-1-MEGAHIT拼接" class="headerlink" title="3.1.1 MEGAHIT拼接"></a>3.1.1 MEGAHIT拼接</h3><pre><code># 启动工作环境conda activate meta# 删除旧文件夹，否则megahit无法运行rm -rf temp/megahit# 组装，10~30m，TB级数据需几天至几周megahit -t 6 \    -1 `tail -n+2 result/metadata.txt|cut -f1|sed &#39;s/^/temp\/qc\//;s/$/_1.fastq/&#39;|tr &#39;\n&#39; &#39;,&#39;|sed &#39;s/,$//&#39;` \    -2 `tail -n+2 result/metadata.txt|cut -f1|sed &#39;s/^/temp\/qc\//;s/$/_2.fastq/&#39;|tr &#39;\n&#39; &#39;,&#39;|sed &#39;s/,$//&#39;` \    -o temp/megahit # 统计大小通常300M~5G，如果contigs太多，可以按长度筛选，降低数据量，提高基因完整度，详见附录megahitseqkit stat temp/megahit/final.contigs.fa# 预览重叠群最前6行，前60列字符head -n6 temp/megahit/final.contigs.fa | cut -c1-60# 备份重要结果mkdir -p result/megahit/ln -f temp/megahit/final.contigs.fa result/megahit/# 删除临时文件rm -rf temp/megahit/intermediate_contigs/</code></pre><h3 id="3-1-2-可选-metaSPAdes精细拼接"><a href="#3-1-2-可选-metaSPAdes精细拼接" class="headerlink" title="3.1.2 (可选) metaSPAdes精细拼接"></a>3.1.2 (可选) metaSPAdes精细拼接</h3><pre><code># 精细但使用内存和时间更多，15~65mmemusg -t metaspades.py -t 3 -m 100 \  `tail -n+2 result/metadata.txt|cut -f1|sed &#39;s/^/temp\/qc\//;s/$/_1.fastq/&#39;|sed &#39;s/^/-1 /&#39;| tr &#39;\n&#39; &#39; &#39;` \  `tail -n+2 result/metadata.txt|cut -f1|sed &#39;s/^/temp\/qc\//;s/$/_2.fastq/&#39;|sed &#39;s/^/-2 /&#39;| tr &#39;\n&#39; &#39; &#39;` \  -o temp/metaspades# 23M，contigs体积更大seqkit stat temp/metaspades/contigs.fasta# 备份重要结果mkdir -p result/metaspades/ln -f temp/metaspades/contigs.fasta result/metaspades/# 删除临时文件rm -rf temp/metaspades</code></pre><p>注：metaSPAdes支持二、三代混合组装，见附录，此外还有OPERA-MS组装二、三代方案</p><h3 id="3-1-3-QUAST评估"><a href="#3-1-3-QUAST评估" class="headerlink" title="3.1.3 QUAST评估"></a>3.1.3 QUAST评估</h3><pre><code>quast.py result/megahit/final.contigs.fa -o result/megahit/quast -t 2# 生成report文本tsv/txt、网页html、PDF等格式报告# (可选) megahit和metaspades比较quast.py --label &quot;megahit,metapasdes&quot; \    result/megahit/final.contigs.fa \    result/metaspades/contigs.fasta \    -o result/quast# (可选)metaquast评估，更全面，但需下载相关数据库，受网速影响可能时间很长(我很少成功)# metaquast based on silva, and top 50 species genome to accesstime metaquast.py result/megahit/final.contigs.fa -o result/megahit/metaquast</code></pre><h2 id="3-2-基因预测、去冗余和定量"><a href="#3-2-基因预测、去冗余和定量" class="headerlink" title="3.2 基因预测、去冗余和定量"></a>3.2 基因预测、去冗余和定量</h2><pre><code># Gene prediction, cluster &amp; quantitfy</code></pre><h3 id="3-2-1-metaProdigal基因预测"><a href="#3-2-1-metaProdigal基因预测" class="headerlink" title="3.2.1 metaProdigal基因预测"></a>3.2.1 metaProdigal基因预测</h3><pre><code># 输入文件：拼装好的序列文件 result/megahit/final.contigs.fa# 输出文件：prodigal预测的基因序列 temp/prodigal/gene.fa# 基因文件大，可参考附录prodigal拆分基因文件，并行计算mkdir -p temp/prodigal# prodigal的meta模式预测基因，35s，&gt;和2&gt;&amp;1记录分析过程至gene.logprodigal -i result/megahit/final.contigs.fa \    -d temp/prodigal/gene.fa \    -o temp/prodigal/gene.gff \    -p meta -f gff &gt; temp/prodigal/gene.log 2&gt;&amp;1 # 查看日志是否运行完成，有无错误tail temp/prodigal/gene.log# 统计基因数量seqkit stat temp/prodigal/gene.fa # 统计完整基因数量，数据量大可只用完整基因部分grep -c &#39;partial=00&#39; temp/prodigal/gene.fa # 提取完整基因(完整片段获得的基因全为完整，如成环的细菌基因组)grep &#39;partial=00&#39; temp/prodigal/gene.fa | cut -f1 -d &#39; &#39;| sed &#39;s/&gt;//&#39; &gt; temp/prodigal/full_length.idseqkit grep -f temp/prodigal/full_length.id temp/prodigal/gene.fa &gt; temp/prodigal/full_length.faseqkit stat temp/prodigal/full_length.fa</code></pre><h3 id="3-2-2-基因聚类-去冗余cd-hit"><a href="#3-2-2-基因聚类-去冗余cd-hit" class="headerlink" title="3.2.2 基因聚类/去冗余cd-hit"></a>3.2.2 基因聚类/去冗余cd-hit</h3><pre><code># 输入文件：prodigal预测的基因序列 temp/prodigal/gene.fa# 输出文件：去冗余后的基因和蛋白序列：result/NR/nucleotide.fa, result/NR/protein.famkdir -p result/NR# aS覆盖度，c相似度，G局部比对，g最优解，T多线程，M内存0不限制# 2万基因2m，2千万需要2000h，多线程可加速cd-hit-est -i temp/prodigal/gene.fa \    -o result/NR/nucleotide.fa \    -aS 0.9 -c 0.95 -G 0 -g 0 -T 0 -M 0# 统计非冗余基因数量，单次拼接结果数量下降不大，多批拼接冗余度高grep -c &#39;&gt;&#39; result/NR/nucleotide.fa# 翻译核酸为对应蛋白序列, --trim去除结尾的*seqkit translate --trim result/NR/nucleotide.fa \    &gt; result/NR/protein.fa # 两批数据去冗余使用cd-hit-est-2d加速，见附录</code></pre><h3 id="3-2-3-基因定量salmon"><a href="#3-2-3-基因定量salmon" class="headerlink" title="3.2.3 基因定量salmon"></a>3.2.3 基因定量salmon</h3><pre><code># 输入文件：去冗余后的基因和蛋白序列：result/NR/nucleotide.fa# 输出文件：Salmon定量后的结果：result/salmon/gene.count, gene.TPMmkdir -p temp/salmonsalmon -v # 1.4.0# 建索引, -t序列, -i 索引，10ssalmon index \  -t result/NR/nucleotide.fa \  -p 9 \  -i temp/salmon/index # 定量，l文库类型自动选择，p线程，--meta宏基因组模式, 2个任务并行2个样# 注意parallel中待并行的命令必须是双引号，内部变量需要使用原始绝对路径 tail -n+2 result/metadata.txt|cut -f1|rush -j 2 \  &quot;salmon quant \    -i temp/salmon/index -l A -p 3 --meta \    -1 temp/qc/&#123;1&#125;_1.fastq \    -2 temp/qc/&#123;1&#125;_2.fastq \    -o temp/salmon/&#123;1&#125;.quant&quot;# 合并mkdir -p result/salmonsalmon quantmerge --quants temp/salmon/*.quant \    -o result/salmon/gene.TPMsalmon quantmerge --quants temp/salmon/*.quant \    --column NumReads -o result/salmon/gene.countsed -i &#39;1 s/.quant//g&#39; result/salmon/gene.*# 预览结果表格head -n3 result/salmon/gene.*</code></pre><h2 id="3-3-功能基因注释"><a href="#3-3-功能基因注释" class="headerlink" title="3.3 功能基因注释"></a>3.3 功能基因注释</h2><pre><code># 输入数据：上一步预测的蛋白序列 result/NR/protein.fa# 中间结果：temp/eggnog/protein.emapper.seed_orthologs#           temp/eggnog/output.emapper.annotations#           temp/eggnog/output# COG定量表：result/eggnog/cogtab.count#            result/eggnog/cogtab.count.spf (用于STAMP)# KO定量表：result/eggnog/kotab.count#           result/eggnog/kotab.count.spf  (用于STAMP)# CAZy碳水化合物注释和定量：result/dbcan2/cazytab.count#                           result/dbcan2/cazytab.count.spf (用于STAMP)# 抗生素抗性：result/resfam/resfam.count#             result/resfam/resfam.count.spf (用于STAMP)# 这部分可以拓展到其它数据库</code></pre><h3 id="3-3-1-基因注释eggNOG-COG-KEGG-CAZy"><a href="#3-3-1-基因注释eggNOG-COG-KEGG-CAZy" class="headerlink" title="3.3.1 基因注释eggNOG(COG/KEGG/CAZy)"></a>3.3.1 基因注释eggNOG(COG/KEGG/CAZy)</h3><pre><code># https://github.com/eggnogdb/eggnog-mapper/wiki/eggNOG-mapper-v2# 记录软件版本conda activate eggnogemapper.py --version # 2.1.6# diamond比对基因至eggNOG 5.0数据库, 9p11m, 1~9h，默认diamond 1e-3mkdir -p temp/eggnogtime emapper.py --no_annot --no_file_comments --override \  --data_dir $&#123;db&#125;/eggnog \  -i result/NR/protein.fa \  --cpu 9 -m diamond \  -o temp/eggnog/protein# 比对结果功能注释, 1h # sqlite3.OperationalError: no such table: prots是数据库不配套，重新下载即可emapper.py \  --annotate_hits_table temp/eggnog/protein.emapper.seed_orthologs \  --data_dir $&#123;db&#125;/eggnog \  --cpu 9 --no_file_comments --override \  -o temp/eggnog/output# 2.1较2.0结果又有新变化，添加了#号表头，减少了列sed &#39;1 s/^#//&#39; temp/eggnog/output.emapper.annotations \  &gt; temp/eggnog/outputcsvtk -t headers -v temp/eggnog/output</code></pre><p>summarizeAbundance生成COG/KO/CAZy丰度汇总表</p><pre><code>mkdir -p result/eggnog# 显示帮助，需要Python3环境，可修改软件第一行指定python位置，如指定某Python执行脚本 /mnt/bai/yongxin/miniconda2/envs/humann3/bin/python3 /db/EasyMicrobiome/script/summarizeAbundance.pysummarizeAbundance.py -h# 汇总，7列COG_category按字母分隔，12列KEGG_ko和19列CAZy按逗号分隔，原始值累加# 指定humann3中的Python 3.7.6运行正常，qiime2中的Python 3.6.13报错summarizeAbundance.py \  -i result/salmon/gene.TPM \  -m temp/eggnog/output \  -c &#39;7,12,19&#39; -s &#39;*+,+,&#39; -n raw \  -o result/eggnog/eggnogsed -i &#39;s/^ko://&#39; result/eggnog/eggnog.KEGG_ko.raw.txtsed -i &#39;/^-/d&#39; result/eggnog/eggnog*# eggnog.CAZy.raw.txt  eggnog.COG_category.raw.txt  eggnog.KEGG_ko.raw.txt# 添加注释生成STAMP的spf格式，结合metadata.txt进行差异比较awk &#39;BEGIN&#123;FS=OFS=&quot;\t&quot;&#125; NR==FNR&#123;a[$1]=$2&#125; NR&gt;FNR&#123;print a[$1],$0&#125;&#39; \  /db/EasyMicrobiome/kegg/KO_description.txt \  result/eggnog/eggnog.KEGG_ko.raw.txt | \  sed &#39;s/^\t/Unannotated\t/&#39; \  &gt; result/eggnog/eggnog.KEGG_ko.TPM.spf# KO to level 1/2/3summarizeAbundance.py \  -i result/eggnog/eggnog.KEGG_ko.raw.txt \  -m /db/EasyMicrobiome/kegg/KO1-4.txt \  -c 2,3,4 -s &#39;,+,+,&#39; -n raw \  -o result/eggnog/KEGG # CAZyawk &#39;BEGIN&#123;FS=OFS=&quot;\t&quot;&#125; NR==FNR&#123;a[$1]=$2&#125; NR&gt;FNR&#123;print a[$1],$0&#125;&#39; \   /db/EasyMicrobiome/dbcan2/CAZy_description.txt result/eggnog/eggnog.CAZy.raw.txt | \  sed &#39;s/^\t/Unannotated\t/&#39; &gt; result/eggnog/eggnog.CAZy.TPM.spf# COGawk &#39;BEGIN&#123;FS=OFS=&quot;\t&quot;&#125; NR==FNR&#123;a[$1]=$2&quot;\t&quot;$3&#125; NR&gt;FNR&#123;print a[$1],$0&#125;&#39; \  /db/EasyMicrobiome/eggnog/COG.anno result/eggnog/eggnog.COG_category.raw.txt &gt; \  result/eggnog/eggnog.COG_category.TPM.spf</code></pre><h3 id="3-3-2-可选-碳水化合物dbCAN2"><a href="#3-3-2-可选-碳水化合物dbCAN2" class="headerlink" title="3.3.2 (可选)碳水化合物dbCAN2"></a>3.3.2 (可选)碳水化合物dbCAN2</h3><pre><code># 比对CAZy数据库, 用时2~18mmkdir -p temp/dbcan2# --sensitive慢10倍，dbCAN2推荐e值为1e-102，此处结果3条太少，以1e-3为例演示diamond blastp \  --db /db/dbcan2/CAZyDB.09242021 \  --query result/NR/protein.fa \  --threads 9 -e 1e-3 --outfmt 6 --max-target-seqs 1 --quiet \  --out temp/dbcan2/gene_diamond.f6wc -l temp/dbcan2/gene_diamond.f6# 整理比对数据为表格 mkdir -p result/dbcan2# 提取基因与dbcan分类对应表format_dbcan2list.pl \  -i temp/dbcan2/gene_diamond.f6 \  -o temp/dbcan2/gene.list # 按对应表累计丰度，依赖summarizeAbundance.py \  -i result/salmon/gene.TPM \  -m temp/dbcan2/gene.list \  -c 2 -s &#39;,&#39; -n raw \  -o result/dbcan2/TPM# 添加注释生成STAMP的spf格式，结合metadata.txt进行差异比较awk &#39;BEGIN&#123;FS=OFS=&quot;\t&quot;&#125; NR==FNR&#123;a[$1]=$2&#125; NR&gt;FNR&#123;print a[$1],$0&#125;&#39; \   /db/EasyMicrobiome/dbcan2/CAZy_description.txt result/dbcan2/TPM.CAZy.raw.txt | \  sed &#39;s/^\t/Unannotated\t/&#39; &gt; result/dbcan2/TPM.CAZy.raw.spf# 检查未注释数量，有则需要检查原因# grep &#39;Unannotated&#39; result/dbcan2/TPM.CAZy.raw.spf|wc -l</code></pre><h3 id="3-3-3-抗生素抗性CARD"><a href="#3-3-3-抗生素抗性CARD" class="headerlink" title="3.3.3 抗生素抗性CARD"></a>3.3.3 抗生素抗性CARD</h3><p>数据库：<a href="https://card.mcmaster.ca/">https://card.mcmaster.ca/</a> ，有在线分析平台，本地代码供参考</p><pre><code># 参考文献：http://doi.org/10.1093/nar/gkz935# 软件使用Github: https://github.com/arpcard/rgi# 启动rgi环境conda activate rgirgi -h # 5.2.1# 蛋白注释mkdir -p result/cardcut -f 1 -d &#39; &#39; result/NR/protein.fa &gt; temp/protein.fargi main -i temp/protein.fa -t protein \  -n 9 -a DIAMOND --include_loose --clean \  -o result/card/protein</code></pre><p>结果说明：</p><ul><li>protein.json，在线可视化</li><li>protein.txt，注释基因列表</li></ul><h2 id="3-4-基因物种注释"><a href="#3-4-基因物种注释" class="headerlink" title="3.4 基因物种注释"></a>3.4 基因物种注释</h2><pre><code># Generate report in default taxid outputconda activate metamemusg -t kraken2 --db /db/kraken2/mini \  result/NR/nucleotide.fa \  --threads 3 \  --report temp/NRgene.report \  --output temp/NRgene.output# Genes &amp; taxid listgrep &#39;^C&#39; temp/NRgene.output|cut -f 2,3|sed &#39;1 i Name\ttaxid&#39; \  &gt; temp/NRgene.taxid# Add taxonomyawk &#39;BEGIN&#123;FS=OFS=&quot;\t&quot;&#125; NR==FNR&#123;a[$1]=$0&#125; NR&gt;FNR&#123;print $1,a[$2]&#125;&#39; \  /db/EasyMicrobiome/kraken2/taxonomy.txt \  temp/NRgene.taxid \  &gt; result/NR/nucleotide.taxmemusg -t /conda2/envs/humann3/bin/python3 /db/EasyMicrobiome/script/summarizeAbundance.py \  -i result/salmon/gene.TPM \  -m result/NR/nucleotide.tax \  -c &#39;2,3,4,5,6,7,8,9&#39; -s &#39;,+,+,+,+,+,+,+,&#39; -n raw \  -o result/NR/taxwc -l result/NR/tax*|sort -n</code></pre><h1 id="四、挖掘单菌基因组-分箱-Binning"><a href="#四、挖掘单菌基因组-分箱-Binning" class="headerlink" title="四、挖掘单菌基因组/分箱(Binning)"></a>四、挖掘单菌基因组/分箱(Binning)</h1><h2 id="4-1-MetaWRAP"><a href="#4-1-MetaWRAP" class="headerlink" title="4.1 MetaWRAP"></a>4.1 MetaWRAP</h2><pre><code># 主要使用MetaWRAP，演示基于官方测试数据# 主页：https://github.com/bxlab/metaWRAP# 挖掘单菌基因组，需要研究对象复杂度越低、测序深度越大，结果质量越好。要求单样本6GB+，复杂样本如土壤推荐数据量30GB+，至少3个样本# 上面的演示数据12个样仅140MB，无法获得单菌基因组，这里使用官方测序数据演示讲解# 软件和数据库布置需2-3天，演示数据分析过程超10h，标准30G样也需3-30天，由服务器性能决定。</code></pre><h3 id="4-1-1-准备数据和环境变量"><a href="#4-1-1-准备数据和环境变量" class="headerlink" title="4.1.1 准备数据和环境变量"></a>4.1.1 准备数据和环境变量</h3><pre><code># 流程: https://github.com/bxlab/metaWRAP/blob/master/Usage_tutorial.md&gt; # 输入数据：质控后的FASTQ序列，文件名格式必须为*_1.fastq和*_2.fastq#           C1_1_kneaddata_paired_1.fastq  -&gt; C1_1_1.fq#           C1_1_kneaddata_paired_2.fastq  -&gt; C1_1_2.fq#           放置到 binning/temp/qc 目录下# 拼装获得的contig文件：result/megahit/final.contigs.fa#           放置到 binning/temp/megahit 目录下#        # 中间输出文件：#     Binning结果：binning/temp/binning#     提纯后的Bin统计结果：binning/temp/bin_refinement/metawrap_50_10_bins.stats#     Bin定量结果文件：binning/temp/bin_quant/bin_abundance_heatmap.png#                      binning/temp/bin_quant/bin_abundance_table.tab (数据表)#     Bin物种注释结果：binning/temp/bin_classify/bin_taxonomy.tab#     Prokka基因预测结果：binning/temp/bin_annotate/prokka_out/bin.10.ffn 核酸序列#     Bin可视化结果：binning/temp/bloblogy/final.contigs.binned.blobplot (数据表)#                    binning/temp/bloblogy/blobplot_figures (可视化图)# 准备原始数据从头分析，详见公众号或官网教程# 这里我们从质控后数据和拼接结果开始cd $&#123;wd&#125;mkdir -p binning &amp;&amp; cd binningmkdir -p temp &amp;&amp; cd temp# 这里基于质控clean数据和拼接好的contigs，自己链接自上游分析# 7G质控数据，输入数据文件名格式必须为*_1.fastq和*_2.fastqmkdir -p seqcd seq# 方法1. 下载测序数据# for i in `seq 7 9`;do#    wget -c http://210.75.224.110/share/meta/metawrap/ERR01134$&#123;i&#125;_1.fastq.gz#    wget -c http://210.75.224.110/share/meta/metawrap/ERR01134$&#123;i&#125;_2.fastq.gz# done# gunzip *.gz # 解压文件# rename .fq .fastq *.fq # 批量修改扩展名# 方法2. 复制准备好的数据ln -sf $&#123;db&#125;/metawrap/*.fastq ./cd ..# megahit拼接结果mkdir -p megahitcd megahit# wget -c http://210.75.224.110/share/meta/metawrap/final.contigs.fa.gz# gunzip *.gzln -s $&#123;db&#125;/metawrap/*.fa ./cd ../..# 加载运行环境cd $&#123;wd&#125;/binningconda activate metawrap</code></pre><h3 id="4-1-2-运行三种分箱软件"><a href="#4-1-2-运行三种分箱软件" class="headerlink" title="4.1.2 运行三种分箱软件"></a>4.1.2 运行三种分箱软件</h3><pre><code>metawrap -v# 输入文件为contig和clean reads# 调用三大主流binning程序cococt, maxbin2, metabat2# 8p线程2h，24p耗时1h# nohup 和 &amp; 保证任务在后台不被中断，且记录输出内容到 nohup.out(可选)nohup metawrap binning -o temp/binning -t 1 -a temp/megahit/final.contigs.fa \  --metabat2 --maxbin2 --concoct temp/seq/ERR*.fastq &amp;# 用自己的文件，替换输出文件名为 *1_kneaddata_paired*.fastq # 如果想接上上面的流程使用自己的文件做分析，则把ERR*.fastq替换为 *1_kneaddata_paired*.fastq# 输出文件夹 temp/binning 包括3种软件结果和中间文件</code></pre><h3 id="4-1-3-Bin提纯"><a href="#4-1-3-Bin提纯" class="headerlink" title="4.1.3 Bin提纯"></a>4.1.3 Bin提纯</h3><pre><code># 8线程2h， 24p 1hcd $&#123;wd&#125;/binning# rm -rf temp/bin_refinementmetawrap bin_refinement \  -o temp/bin_refinement \  -A temp/binning/metabat2_bins/ \  -B temp/binning/maxbin2_bins/ \  -C temp/binning/concoct_bins/ \  -c 50 -x 10 -t 2# 查看高质量Bin的数量，10个，见temp/bin_refinement/metawrap_50_10_bins.stats目录wc -l temp/bin_refinement/metawrap_50_10_bins.stats# 结果改进程度见temp/bin_refinement/figures/目录</code></pre><h3 id="4-1-4-Bin定量"><a href="#4-1-4-Bin定量" class="headerlink" title="4.1.4 Bin定量"></a>4.1.4 Bin定量</h3><pre><code># 使用salmon计算每个bin在样本中相对丰度# 耗时3m，系统用时10m，此处可设置线程，但salmon仍调用全部资源# 需要指定输出文件夹，包括4.3中的参数的输出目录metawrap quant_bins -b temp/bin_refinement/metawrap_50_10_bins -t 8 \  -o temp/bin_quant -a temp/megahit/final.contigs.fa temp/seq/ERR*.fastq# 文件名字改变# 结果包括bin丰度热图`temp/bin_quant/bin_abundance_heatmap.png`# 如果想自己画图，原始数据位于`temp/bin_quant/bin_abundance_table.tab`ls -l temp/bin_quant/bin_abundance_heatmap.png</code></pre><h3 id="4-1-5-Bin注释"><a href="#4-1-5-Bin注释" class="headerlink" title="4.1.5 Bin注释"></a>4.1.5 Bin注释</h3><pre><code># Taxator-tk对每条contig物种注释，再估计bin整体的物种，11m (用时66 min)metawrap classify_bins -b temp/bin_refinement/metawrap_50_10_bins \  -o temp/bin_classify -t 2 &amp;# 注释结果见`temp/bin_classify/bin_taxonomy.tab`# export LD_LIBRARY_PATH=/conda2/envs/metagenome_env/lib/:$&#123;LD_LIBRARY_PATH&#125; # 这是动态链接库找不到时的一个简单的应急策略ln -s /conda2/envs/metagenome_env/lib/libssl.so.1.0.0 .ln -s /conda2/envs/metagenome_env/lib/libcrypto.so.1.0.0 .# 基于prokka基因注释，4mmetaWRAP annotate_bins -o temp/bin_annotate \  -b temp/bin_refinement/metawrap_50_10_bins  -t 1# 每个bin基因注释的gff文件bin_funct_annotations, # 核酸ffn文件bin_untranslated_genes，# 蛋白faa文件bin_translated_genes</code></pre><h2 id="可选-MetaWRAP单样本分别组装和分箱"><a href="#可选-MetaWRAP单样本分别组装和分箱" class="headerlink" title="(可选)MetaWRAP单样本分别组装和分箱"></a>(可选)MetaWRAP单样本分别组装和分箱</h2><p>多样本受硬件、计算时间限制无法完成时，需要单样本组装、分析。或想进一步提高组装质量，减少污染和杂合度，也可以单样本组装。</p><h3 id="参数设定"><a href="#参数设定" class="headerlink" title="参数设定"></a>参数设定</h3><pre><code># 样本名i=ERR011347# 线程数p=1# 任务数j=2# 定义完整度和污染率的阈值(50, 5; Finn NBT 2020; 50, 10, Bowers NBT 2017)c=50x=10</code></pre><p>输和文件在seq目录</p><pre><code>mkdir -p seqln -s `pwd`/temp/seq/*.fastq seq/</code></pre><h3 id="1-megahit组装"><a href="#1-megahit组装" class="headerlink" title="1 megahit组装"></a>1 megahit组装</h3><p>单样本并行组装，13m，314m</p><pre><code>rm -rf temp/megahit_*time parallel -j $&#123;j&#125; \&quot;metawrap assembly \    -1 seq/&#123;&#125;_1.fastq \    -2 seq/&#123;&#125;_2.fastq \    -o temp/megahit_&#123;&#125; \    -m 100 -t $&#123;p&#125; --megahit&quot; \ ::: `ls seq/|cut -f1 -d &#39;_&#39;|uniq`  </code></pre><h3 id="2-运行三种bin软件"><a href="#2-运行三种bin软件" class="headerlink" title="2 运行三种bin软件"></a>2 运行三种bin软件</h3><pre><code># 192p, 15m (concoct会使用所有线程)parallel -j $&#123;j&#125; \&quot;metawrap binning \    -o temp/binning_&#123;&#125; -t $&#123;p&#125; \    -a temp/megahit_&#123;&#125;/final_assembly.fasta \    --metabat2 --maxbin2 --concoct \    seq/&#123;&#125;_*.fastq&quot; \::: `ls seq/|cut -f1 -d &#39;_&#39;|uniq`</code></pre><h3 id="3-Bin提纯"><a href="#3-Bin提纯" class="headerlink" title="3 Bin提纯"></a>3 Bin提纯</h3><pre><code># 24p，10hparallel -j $&#123;j&#125; \&quot;metawrap bin_refinement \  -o temp/bin_refinement_&#123;&#125; -t $&#123;p&#125; \  -A temp/binning_&#123;&#125;/metabat2_bins/ \  -B temp/binning_&#123;&#125;/maxbin2_bins/ \  -C temp/binning_&#123;&#125;/concoct_bins/ \  -c $&#123;c&#125; -x $&#123;x&#125;&quot; \::: `ls seq/|cut -f1 -d &#39;_&#39;|uniq`</code></pre><h2 id="4-2-dRep去冗余种-株基因组集"><a href="#4-2-dRep去冗余种-株基因组集" class="headerlink" title="4.2 dRep去冗余种/株基因组集"></a>4.2 dRep去冗余种/株基因组集</h2><pre><code># 进入虚拟环境，没有用conda安装# conda activate drepsource $&#123;soft&#125;/bin/activate drepcd $&#123;wd&#125;/binning</code></pre><p>合并所有bin至同一目录</p><pre><code>mkdir -p temp/drep_in# 混合组装分箱并重命名ln -s `pwd`/temp/bin_refinement/metawrap_50_10_bins/bin.* temp/drep_in/rename &#39;bin&#39; &#39;mix_all&#39; temp/drep_in/bin.*# 单样品组装分箱结果重命名for i in `ls seq/|cut -f1 -d &#39;_&#39;|uniq`;do   ln -s `pwd`/temp/bin_refinement_$&#123;i&#125;/metawrap_50_10_bins/bin.* temp/drep_in/   rename &quot;bin.&quot; &quot;s_$&#123;i&#125;&quot; temp/drep_in/bin.*done# 统计混合和单样本来源数据，10个混，5个单ls temp/drep_in/|cut -f 1 -d &#39;_&#39;|uniq -c# 统计混合批次/单样本来源ls temp/drep_in/|cut -f 2 -d &#39;_&#39;|cut -f 1 -d &#39;.&#39; |uniq -c</code></pre><p>按种水平去冗余：15个为10个，8个来自混拼，2个来自单拼</p><pre><code>mkdir -p temp/drep95# 15个，40mindRep dereplicate temp/drep95/ \  -g temp/drep_in/*.fa \  -sa 0.95 -nc 0.30 -comp 50 -con 10 -p 3</code></pre><p>主要结果：</p><ul><li>非冗余基因组集：dereplicated_genomes/*.fa</li><li>聚类信息表：data_tables/Cdb.csv</li><li>聚类和质量图：firgures/<em>clustering</em></li></ul><p>(可选)按株水平汇总</p><pre><code># 20-30minmkdir -p temp/drep95dRep dereplicate temp/drep95/ \  -g temp/drep_in/*.fa \  -sa 0.99 -nc 0.30 -comp 50 -con 10 -p 24</code></pre><h2 id="4-3-GTDB-tk物种注释和进化树"><a href="#4-3-GTDB-tk物种注释和进化树" class="headerlink" title="4.3 GTDB-tk物种注释和进化树"></a>4.3 GTDB-tk物种注释和进化树</h2><p>启动软件所在虚拟环境</p><pre><code># gtdbtk与drep安装在了同一个环境# conda activate gtdbtk</code></pre><p>细菌基因组物种注释</p><p>以上面鉴定的10个种为例，注意扩展名要与输入文件一致，可使用压缩格式gz。主要结果文件描述：此9个细菌基因组，结果位于tax.bac120开头的文件，如物种注释 tax.bac120.summary.tsv。古菌结果位于tax.ar122开头的文件中。</p><pre><code>mkdir -p temp/gtdb_classify# 10个基因组，24p，100min 152 G内存gtdbtk classify_wf \    --genome_dir temp/drep95/dereplicated_genomes \    --out_dir temp/gtdb_classify \    --extension fa \    --prefix tax \    --cpus 10</code></pre><p>多序列对齐结果建树</p><pre><code># 以9个细菌基因组的120个单拷贝基因建树，1smkdir -p temp/gtdb_infergtdbtk infer \    --msa_file temp/gtdb_classify/tax.bac120.user_msa.fasta \    --out_dir temp/gtdb_infer \    --prefix tax \    --cpus 2</code></pre><p>树文件可使用iTOL在线美化，也可使用GraphLan本地美化。</p><h2 id="4-4-table2itol制作树注释文件"><a href="#4-4-table2itol制作树注释文件" class="headerlink" title="4.4 table2itol制作树注释文件"></a>4.4 table2itol制作树注释文件</h2><p>以gtdb-tk物种注释(tax.bac120.summary.tsv)和drep基因组评估(Widb.csv)信息为注释信息</p><pre><code>mkdir -p result/itol# 制作分类学表tail -n+2 temp/gtdb_classify/tax.bac120.summary.tsv|cut -f 1-2|sed &#39;s/;/\t/g&#39;|sed &#39;1 s/^/ID\tDomain\tPhylum\tClass\tOrder\tFamily\tGenus\tSpecies\n/&#39; \  &gt; result/itol/tax.txt# 基因组评估信息sed &#39;s/,/\t/g;s/.fa//&#39; temp/drep95/data_tables/Widb.csv|cut -f 1-7,11|sed &#39;1 s/genome/ID/&#39; \  &gt; result/itol/genome.txt# 整合注释文件awk &#39;BEGIN&#123;OFS=FS=&quot;\t&quot;&#125; NR==FNR&#123;a[$1]=$0&#125; NR&gt;FNR&#123;print $0,a[$1]&#125;&#39; result/itol/genome.txt result/itol/tax.txt|cut -f 1-8,10- &gt; result/itol/annotation.txt</code></pre><p>table2itol制作注释文件</p><pre><code>cd result/itol/# 设置脚本位置db=/disk1/db/script/table2itol/#db=/db## 方案1. 分类彩带、数值热图、种标签# -a 找不到输入列将终止运行（默认不执行）-c 将整数列转换为factor或具有小数点的数字，-t 偏离提示标签时转换ID列，-w 颜色带，区域宽度等， -D输出目录，-i OTU列名，-l 种标签替换ID# Fatal error: ??????&#39;./table2itol-master/table2itol.R&#39;: ?????????Rscript $&#123;db&#125;/table2itol.R -a -c double -D plan1 -i ID -l Species -t %s -w 0.5 annotation.txt# 生成注释文件中每列为单独一个文件## 方案2. 数值柱形图，树门背景色，属标签Rscript $&#123;db&#125;/table2itol.R -a -d -c none -D plan2 -b Phylum -i ID -l Genus -t %s -w 0.5 annotation.txt## 方案3.分类彩带、整数为柱、小数为热图Rscript $&#123;db&#125;/table2itol.R -c keep -D plan3 -i ID -t %s annotation.txt## 方案4. 将整数转化成因子生成注释文件Rscript $&#123;db&#125;/table2itol.R -a -c factor -D plan4 -i ID -l Genus -t %s -w 0 annotation.txt</code></pre><h2 id="4-5-PROKKA单菌基因组功能注释"><a href="#4-5-PROKKA单菌基因组功能注释" class="headerlink" title="4.5 PROKKA单菌基因组功能注释"></a>4.5 PROKKA单菌基因组功能注释</h2><pre><code>conda activate metawrapexport PERL_5LIB=$&#123;PERL5LIB&#125;:$&#123;soft&#125;/envs/metawrap/lib/perl5/site_perl/5.22.0/i=bin1time prokka result/contig/$&#123;db&#125;.fa \  --kingdom Archaea,Bacteria --cpus 9 \  --outdir temp/prokka/$&#123;db&#125; </code></pre><h1 id="附录：常见分析问题和经验"><a href="#附录：常见分析问题和经验" class="headerlink" title="附录：常见分析问题和经验"></a>附录：常见分析问题和经验</h1><h2 id="质控KneadData"><a href="#质控KneadData" class="headerlink" title="质控KneadData"></a>质控KneadData</h2><h3 id="双端序列质控后是否配对的检查"><a href="#双端序列质控后是否配对的检查" class="headerlink" title="双端序列质控后是否配对的检查"></a>双端序列质控后是否配对的检查</h3><p>双端序列质控后序列数量不一致是肯定出错了。但即使序列数量一致，也可能序列不对。在运行metawrap分箱时会报错。可以kneaddata运行时添加–reorder来尝试解决。以下提供了检查双端序列ID是否配对的比较代码</p><pre><code># 文件i=sample1seqkit seq -n -i temp/qc/$&#123;i&#125;_1_kneaddata_paired_1.fastq|cut -f 1 -d &#39;/&#39; | head &gt; temp/header_$&#123;i&#125;_1seqkit seq -n -i temp/qc/$&#123;i&#125;_1_kneaddata_paired_2.fastq|cut -f 1 -d &#39;/&#39; | head &gt; temp/header_$&#123;i&#125;_2cmp temp/header_$&#123;i&#125;_?</code></pre><h3 id="Perl环境不匹配"><a href="#Perl环境不匹配" class="headerlink" title="Perl环境不匹配"></a>Perl环境不匹配</h3><p>报错’perl binaries are mismatched’的解决</p><pre><code>e=~/miniconda3/envs/metaPERL5LIB=$&#123;e&#125;/lib/5.26.2:$&#123;e&#125;/lib/5.26.2/x86_64-linux-thread-multi</code></pre><h3 id="Java不匹配——重装Java运行环境"><a href="#Java不匹配——重装Java运行环境" class="headerlink" title="Java不匹配——重装Java运行环境"></a>Java不匹配——重装Java运行环境</h3><p>若出现错误 Unrecognized option: -d64，则安装java解决：</p><pre><code>conda install -c cyclus java-jdk</code></pre><h2 id="读长分析HUMAnN2"><a href="#读长分析HUMAnN2" class="headerlink" title="读长分析HUMAnN2"></a>读长分析HUMAnN2</h2><h3 id="HUMAnN2减少输出文件加速"><a href="#HUMAnN2减少输出文件加速" class="headerlink" title="HUMAnN2减少输出文件加速"></a>HUMAnN2减少输出文件加速</h3><p>HUMAnN2是计算非常耗时的步骤，如果上百个10G+的样本，有时需要几周至几月的分析。以下介绍两种快速完成分析，而且结果变化不大的方法。替换下面for循环为原文中的“双端合并为单个文件”部分代码</p><p>方法1. 软件分析不考虑双端信息，只用一端可获得相近结果，且速度提高1倍。链接质控结果左端高质量至合并目录</p><pre><code>for i in `tail -n+2 result/metadata.txt|cut -f1`;do   ln -sf `pwd`/temp/qc/$&#123;i&#125;_1_kneaddata_paired_1.fastq temp/concat/$&#123;i&#125;.fqdone</code></pre><p>方法2. 控制标准样比对时间。测序数据量通常为6<del>50G，同一样本分析时间可达10h</del>100h，严重浪费时间而浪费硬盘空间。<br>可用head对单端分析截取20M序列，即3G，则为80M行</p><pre><code>for i in `tail -n+2 result/metadata.txt|cut -f1`;do    head -n80000000 temp/qc/$&#123;i&#125;_1_kneaddata_paired_1.fastq  &gt; temp/concat/$&#123;i&#125;.fqdone</code></pre><h3 id="metaphlan2无法找到数据库"><a href="#metaphlan2无法找到数据库" class="headerlink" title="metaphlan2无法找到数据库"></a>metaphlan2无法找到数据库</h3><p>正常在首次运行时，会自动下载数据库。有时会失败，解决方法：</p><p>方法1. 使用软件安装的用户运行一下程序即可下载成功</p><p>方法2. 将我们预下载好的数据索引文件,链接到软件安装目录</p><pre><code>db=~/dbsoft=~/miniconda2mkdir -p $&#123;soft&#125;/bin/db_v20ln -s $&#123;db&#125;/metaphlan2/* $&#123;soft&#125;/bin/db_v20/mkdir -p $&#123;soft&#125;/bin/databasesln -s $&#123;db&#125;/metaphlan2/* $&#123;soft&#125;/bin/databases/</code></pre><h3 id="CRITICAL-ERROR-Can-not-call-software-version-for-bowtie2"><a href="#CRITICAL-ERROR-Can-not-call-software-version-for-bowtie2" class="headerlink" title="CRITICAL ERROR: Can not call software version for bowtie2"></a>CRITICAL ERROR: Can not call software version for bowtie2</h3><p>解决问题思路：</p><p>查看文件位置是否处在conda环境中：<code>type bowtie2</code>。如果不在需要手动设置环境变量的顺序，如果位置正确如在(~/miniconda2/envs/humann2/bin/bowtie2)，请往下看；</p><p>检测bowtie2运行情况：<code>bowtie2 -h</code>，报错<code>wd.c: loadable library and perl binaries are mismatched (got handshake key 0xde00080, needed 0xed00080)</code>。 错误原因为Perl库版本错误，检查Perl库位置：<code>echo $PERL5LIB</code>，错误原因没有指向环境，并手动修改perl库位置</p><pre><code># 设置你环境变量位置，最好用绝对路径e=~/miniconda2/envs/humann2PERL5LIB=$&#123;e&#125;/lib/5.26.2:$&#123;e&#125;/lib/5.26.2/x86_64-linux-thread-multi</code></pre><h3 id="metaphlan-hclust-heatmap-py报错AttributeError-Unknown-property-axisbg"><a href="#metaphlan-hclust-heatmap-py报错AttributeError-Unknown-property-axisbg" class="headerlink" title="metaphlan_hclust_heatmap.py报错AttributeError: Unknown property axisbg"></a>metaphlan_hclust_heatmap.py报错AttributeError: Unknown property axisbg</h3><p>在网上搜索，axisbg和axis_bgcolor为过时的函数，新版为facecolor，修改为新名称即可 (参考：<a href="https://blog.csdn.net/qq_41185868/article/details/81842971">https://blog.csdn.net/qq_41185868/article/details/81842971</a>)</p><pre><code># 定位文件绝对路径file=`type metaphlan_hclust_heatmap.py|cut -f 2 -d &#39;(&#39;|sed &#39;s/)//&#39;`# 替换函数名称为新版sed -i &#39;s/axisbg/facecolor/g&#39; $file</code></pre><h3 id="metaphlan2-共有或特有物种网络图"><a href="#metaphlan2-共有或特有物种网络图" class="headerlink" title="metaphlan2-共有或特有物种网络图"></a>metaphlan2-共有或特有物种网络图</h3><pre><code>awk &#39;BEGIN&#123;OFS=FS=&quot;\t&quot;&#125;&#123;if(FNR==1) &#123;for(i=9;i&lt;=NF;i++) a[i]=$i; print &quot;Tax\tGroup&quot;&#125; \   else &#123;for(i=9;i&lt;=NF;i++) if($i&gt;0.05) print &quot;Tax_&quot;FNR, a[i];&#125;&#125;&#39; \   result/metaphlan2/taxonomy.spf &gt; result/metaphlan2/taxonomy_highabundance.tsv   awk &#39;BEGIN&#123;OFS=FS=&quot;\t&quot;&#125;&#123;if(FNR==1) &#123;print &quot;Tax\tGrpcombine&quot;;&#125; else a[$1]=a[$1]==&quot;&quot;?$2:a[$1]$2;&#125;END&#123;for(i in a) print i,a[i]&#125;&#39; \   result/metaphlan2/taxonomy_highabundance.tsv &gt; result/metaphlan2/taxonomy_group.tsvcut -f 2 result/metaphlan2/taxonomy_group.tsv | tail -n +2 | sort -u &gt;groupfor i in `cat group`; do printf &quot;#%02x%02x%02x\n&quot; $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)); done &gt;colorcodepaste group colorcode &gt;group_colorcodeawk &#39;BEGIN&#123;OFS=FS=&quot;\t&quot;&#125;ARGIND==1&#123;a[$1]=$2;&#125;ARGIND==2&#123;if(FNR==1) &#123;print $0, &quot;Grpcombinecolor&quot;&#125; else print $0,a[$2]&#125;&#39; \   group_colorcode result/metaphlan2/taxonomy_group.tsv &gt; result/metaphlan2/taxonomy_group2.tsvawk &#39;BEGIN&#123;OFS=FS=&quot;\t&quot;&#125;&#123;if(FNR==1) &#123;print &quot;Tax&quot;,$1,$2,$3,$4, $5, $6, $7, $8 &#125; else print &quot;Tax_&quot;FNR, $1,$2,$3,$4, $5,$6, $7, $8&#125;&#39; \   result/metaphlan2/taxonomy.spf &gt; result/metaphlan2/taxonomy_anno.tsv</code></pre><h2 id="生物标志鉴定LEfSe"><a href="#生物标志鉴定LEfSe" class="headerlink" title="生物标志鉴定LEfSe"></a>生物标志鉴定LEfSe</h2><h3 id="lefse-plot-cladogram-py：Unknown-property-axis-bgcolor"><a href="#lefse-plot-cladogram-py：Unknown-property-axis-bgcolor" class="headerlink" title="lefse-plot_cladogram.py：Unknown property axis_bgcolor"></a>lefse-plot_cladogram.py：Unknown property axis_bgcolor</h3><p>若出现错误 Unknown property axis_bgcolor，则修改<code>lefse-plot_cladogram.py</code>里的<code>ax_bgcolor</code>替换成<code>facecolor</code>即可。</p><pre><code># 查看脚本位置，然后使用RStudio或Vim修改type lefse-plot_cladogram.py</code></pre><h2 id="物种分类Kraken2"><a href="#物种分类Kraken2" class="headerlink" title="物种分类Kraken2"></a>物种分类Kraken2</h2><h3 id="合并样本为表格combine-mpa-py"><a href="#合并样本为表格combine-mpa-py" class="headerlink" title="合并样本为表格combine_mpa.py"></a>合并样本为表格combine_mpa.py</h3><p>krakentools中combine_mpa.py，需手动安装脚本，且结果还需调整样本名</p><pre><code>combine_mpa.py \  -i `tail -n+2 result/metadata.txt|cut -f1|sed &#39;s/^/temp\/kraken2\//;s/$/.mpa/&#39;|tr &#39;\n&#39; &#39; &#39;` \  -o temp/kraken2/combined_mpa</code></pre><h3 id="序列筛选-去宿主extract-kraken-reads-py"><a href="#序列筛选-去宿主extract-kraken-reads-py" class="headerlink" title="序列筛选/去宿主extract_kraken_reads.py"></a>序列筛选/去宿主extract_kraken_reads.py</h3><p>提取非植物33090和动物(人)33208序列、选择细菌2和古菌2157</p><pre><code>mkdir -p temp/kraken2_qcparallel -j 3 \  &quot;/db/script/extract_kraken_reads.py \  -k temp/kraken2/&#123;1&#125;.output \  -r temp/kraken2/&#123;1&#125;.report \  -1 temp/qc/&#123;1&#125;_1_kneaddata_paired_1.fastq \  -2 temp/qc/&#123;1&#125;_1_kneaddata_paired_2.fastq \  -t 33090 33208 --include-children --exclude \  --max 20000000 --fastq-output \  -o temp/kraken2_qc/&#123;1&#125;_1.fq \  -o2 temp/kraken2_qc/&#123;1&#125;_2.fq&quot; \  ::: `tail -n+2 result/metadata.txt|cut -f1`</code></pre><h2 id="组装Megahit"><a href="#组装Megahit" class="headerlink" title="组装Megahit"></a>组装Megahit</h2><h3 id="序列长度筛选"><a href="#序列长度筛选" class="headerlink" title="序列长度筛选"></a>序列长度筛选</h3><p>megahit默认&gt;200，可选 &gt; 500 / 1000 bp，并统计前后变化；如此处筛选 &gt; 500 bp，序列从15万变为3.5万条，总长度从7M下降到3M</p><pre><code>mv temp/megahit/final.contigs.fa temp/megahit/raw.contigs.faseqkit seq -m 500 temp/megahit/raw.contigs.fa &gt; temp/megahit/final.contigs.faseqkit stat temp/megahit/raw.contigs.faseqkit stat temp/megahit/final.contigs.fa</code></pre><h3 id="数据太大导致程序中断"><a href="#数据太大导致程序中断" class="headerlink" title="数据太大导致程序中断"></a>数据太大导致程序中断</h3><p>报错信息：126 - Too many vertices in the unitig graph (8403694648 &gt;= 4294967294), you may increase the kmer size to remove tons</p><p>解决方法：需要增加k-mer，如最小k-mer改为29，不行继续增加或将数据分批次组装</p><p>添加参数： –k-min 29 –k-max 141 –k-step 20</p><h2 id="组装MetaSpdades"><a href="#组装MetaSpdades" class="headerlink" title="组装MetaSpdades"></a>组装MetaSpdades</h2><h3 id="二三代混合组装"><a href="#二三代混合组装" class="headerlink" title="二三代混合组装"></a>二三代混合组装</h3><pre><code># 3G数据，耗时3hi=SampleAtime metaspades.py -t 48 -m 500 \  -1 seq/$&#123;i&#125;_1.fastq -2 seq/$&#123;i&#125;L_2.fastq \  --nanopore seq/$&#123;i&#125;.fastq \  -o temp/metaspades_$&#123;i&#125;</code></pre><h2 id="二三代混合组装OPERA-MS"><a href="#二三代混合组装OPERA-MS" class="headerlink" title="二三代混合组装OPERA-MS"></a>二三代混合组装OPERA-MS</h2><p>结果卡在第9步polishing，可添加–no-polishing参数跳过此步；短序列只支持成对文件，多个文件需要cat合并</p><h3 id="二三代混合组装-1"><a href="#二三代混合组装-1" class="headerlink" title="二三代混合组装"></a>二三代混合组装</h3><pre><code>perl ../OPERA-MS.pl \    --short-read1 R1.fastq.gz \    --short-read2 R2.fastq.gz \    --long-read long_read.fastq \    --no-ref-clustering \    --num-processors 32 \    --out-dir RESULTS</code></pre><h3 id="二代组装-三代优化"><a href="#二代组装-三代优化" class="headerlink" title="二代组装+三代优化"></a>二代组装+三代优化</h3><pre><code>perl ~/soft/OPERA-MS/OPERA-MS.pl \    --contig-file temp/megahit/final.contigs.fa \    --short-read1 R1.fastq.gz \    --short-read2 R2.fastq.gz \    --long-read long_read.fastq \    --num-processors 32 \    --no-ref-clustering \    --no-strain-clustering \    --no-polishing \    --out-dir temp/opera</code></pre><p>结果可用quast或seqkit stat统计对二代组装的改进效果</p><h2 id="基因序列prodigal"><a href="#基因序列prodigal" class="headerlink" title="基因序列prodigal"></a>基因序列prodigal</h2><h3 id="序列拆分并行预测基因"><a href="#序列拆分并行预测基因" class="headerlink" title="序列拆分并行预测基因"></a>序列拆分并行预测基因</h3><p>(可选)以上注释大约1小时完成1M个基因的预测。加速可将contigs拆分，并行基因预测后再合并。</p><pre><code># 拆分contigs，按1M条每个文件n=10000seqkit split result/megahit/final.contigs.fa -s $n# 生成拆分文件序列列表ls result/megahit/final.contigs.fa.split/final.contigs.part_*.fa|cut -f 2 -d &#39;_&#39;|cut -f 1 -d &#39;.&#39; \  &gt; temp/split.list# 9线程并行基因预测，此步只用单线程且读写强度不大time parallel -j 9 \  &quot;prodigal -i result/megahit/final.contigs.fa.split/final.contigs.part_&#123;&#125;.fa \  -d temp/gene&#123;&#125;.fa  \  -o temp/gene&#123;&#125;.gff -p meta -f gff \  &gt; temp/gene&#123;&#125;.log 2&gt;&amp;1 &quot; \  ::: `cat temp/split.list`# 合并预测基因和gff注释文件cat temp/gene*.fa &gt; temp/prodigal/gene.facat temp/gene*.gff &gt; temp/prodigal/gene.gff</code></pre><h2 id="基因去冗余cd-hit"><a href="#基因去冗余cd-hit" class="headerlink" title="基因去冗余cd-hit"></a>基因去冗余cd-hit</h2><h3 id="两批基因合并cd-hit-est-2d"><a href="#两批基因合并cd-hit-est-2d" class="headerlink" title="两批基因合并cd-hit-est-2d"></a>两批基因合并cd-hit-est-2d</h3><p>cd-hit-est-2d 两批次构建非冗余基因集</p><p>A和B基因集，分别有M和N个非冗余基因，两批数据合并后用cd-hit-est去冗余，计算量是(M + N) X (M + N -1)</p><p>cd-hit-est-2d比较，只有M X N的计算量</p><pre><code># 计算B中特有的基因cd-hit-est-2d -i A.fa -i2 B.fa -o B.uni.fa \    -aS 0.9 -c 0.95 -G 0 -g 0 \    -T 96 -M 0 -d 0# 合并为非冗余基因集cat A.fa B.uni.fa &gt; NR.fa</code></pre><h3 id="cd-hit合并多批基因salmon索引时提示ID重复"><a href="#cd-hit合并多批基因salmon索引时提示ID重复" class="headerlink" title="cd-hit合并多批基因salmon索引时提示ID重复"></a>cd-hit合并多批基因salmon索引时提示ID重复</h3><pre><code># [error] In FixFasta, two references with the same name but different sequences: k141_2390219_1. We require that all input records have a unique name up to the first whitespace (or user-provided separator) character.# 错误解决mv temp/NRgene/gene.fa temp/NRgene/gene.fa.bak# 15G,2m,4Gseqkit rename temp/NRgene/gene.fa.bak -o temp/NRgene/gene.fa</code></pre><h2 id="基因定量salmon"><a href="#基因定量salmon" class="headerlink" title="基因定量salmon"></a>基因定量salmon</h2><h3 id="找不到库文件liblzma-so-0"><a href="#找不到库文件liblzma-so-0" class="headerlink" title="找不到库文件liblzma.so.0"></a>找不到库文件liblzma.so.0</h3><ul><li>报错信息：error while loading shared libraries: liblzma.so.0</li><li>问题描述：直接运行salmon报告，显示找不到lib库，</li><li>解决方法：可使用程序完整路径解决问题，<code>alias salmon=&quot;$&#123;soft&#125;/envs/metagenome_env/share/salmon/bin/salmon&quot;</code></li></ul><h2 id="基因功能数据库"><a href="#基因功能数据库" class="headerlink" title="基因功能数据库"></a>基因功能数据库</h2><h3 id="综合功能注释KEGG描述整理"><a href="#综合功能注释KEGG描述整理" class="headerlink" title="综合功能注释KEGG描述整理"></a>综合功能注释KEGG描述整理</h3><p>脚本位于 /db/script 目录，<a href="https://www.kegg.jp/kegg-bin/show_brite?ko00001.keg">https://www.kegg.jp/kegg-bin/show_brite?ko00001.keg</a> 下载htext，即为最新输入文件 ko00001.keg</p><pre><code>kegg_ko00001_htext2tsv.pl -i ko00001.keg -o ko00001.tsv</code></pre><h3 id="抗生素抗性CARD"><a href="#抗生素抗性CARD" class="headerlink" title="抗生素抗性CARD"></a>抗生素抗性CARD</h3><pre><code># 使用3.1.0和3.1.2均有警告，修改序列名至纯字母数数字也无效# WARNING 2021-07-08 08:58:00,478 : Exception : &lt;class &#39;KeyError&#39;&gt; -&gt; &#39;5141&#39; -&gt; Model(1692) missing in database. Please generate new database.# WARNING 2021-07-08 08:58:00,478 : Exception : &lt;class &#39;KeyError&#39;&gt; -&gt; &#39;5141&#39; -&gt; Model(1692)# WARNING 2021-07-08 08:58:00,479 : tetM ---&gt; hsp.bits: 60.8 &lt;class &#39;float&#39;&gt; ? &lt;class &#39;str&#39;&gt;</code></pre><h3 id="抗生素抗性ResFam"><a href="#抗生素抗性ResFam" class="headerlink" title="抗生素抗性ResFam"></a>抗生素抗性ResFam</h3><p>数据库：<a href="http://www.dantaslab.org/resfams">http://www.dantaslab.org/resfams</a></p><p>参考文献：<a href="http://doi.org/10.1038/ismej.2014.106">http://doi.org/10.1038/ismej.2014.106</a></p><pre><code>mkdir -p temp/resfam result/resfam# 比对至抗生素数据库 1mtime diamond blastp \  --db $&#123;db&#125;/resfam/Resfams-proteins \  --query result/NR/protein.fa \  --threads 9 --outfmt 6 --sensitive \  -e 1e-5 --max-target-seqs 1 --quiet \  --out temp/resfam/gene_diamond.f6# 提取基因对应抗性基因列表cut -f 1,2 temp/resfam/gene_diamond.f6 | uniq | \  sed &#39;1 i Name\tResGeneID&#39; &gt; temp/resfam/gene_fam.list# 统计注释基因的比例, 488/19182=2.5%wc -l temp/resfam/gene_fam.list  result/salmon/gene.count # 按列表累计丰度summarizeAbundance.py \  -i result/salmon/gene.TPM \  -m temp/resfam/gene_fam.list \  -c 2 -s &#39;,&#39; -n raw \  -o result/resfam/TPM# 结果中添加FAM注释，spf格式用于stamp分析awk &#39;BEGIN&#123;FS=OFS=&quot;\t&quot;&#125; NR==FNR&#123;a[$1]=$4&quot;\t&quot;$3&quot;\t&quot;$2&#125; NR&gt;FNR&#123;print a[$1],$0&#125;&#39; \  $&#123;db&#125;/resfam/Resfams-proteins_class.tsv  result/resfam/TPM.ResGeneID.raw.txt \  &gt; result/resfam/TPM.ResGeneID.raw.spf</code></pre><h2 id="细菌基因组物种注释GTDB"><a href="#细菌基因组物种注释GTDB" class="headerlink" title="细菌基因组物种注释GTDB"></a>细菌基因组物种注释GTDB</h2><p>菌的文件名不要存在非字母数字的符号，否则运行会报错。</p><pre><code># ERROR: [&#39;BMN5&#39;] are not present in the input list of genome to process，但并无此菌，可能是名称 中存在&quot;-&quot;或&quot;.&quot;，替换为i# 修改metadatased &#39;s/-/i/;s/\./i/&#39; result/metadatab.txt &gt; result/metadata.txt# 修改文件名awk &#39;BEGIN&#123;OFS=FS=&quot;\t&quot;&#125;&#123;system(&quot;mv temp/antismash/&quot;$1&quot;.fna temp/antismash/&quot;$2&quot;.fna&quot;)ll &#125;&#39; &lt;(paste result/metadatab.txt result/metadata.txt|tail -n+2)</code></pre><h1 id="版本更新记录"><a href="#版本更新记录" class="headerlink" title="版本更新记录"></a>版本更新记录</h1><h2 id="1-08-2020-7-20"><a href="#1-08-2020-7-20" class="headerlink" title="1.08 2020.7.20"></a>1.08 2020.7.20</h2><ol><li>KneadData提供数据预处理双端标签唯一命令，兼容最新版；</li><li>提供HUMAnN3测试版的安装和分析流程(附录1)；</li><li>eggNOG升级为emapper 2.0和eggNOG 5.0流程，结果列表从13列变为22列，新增CAZy注释。emapper 1.0版本见附录2。</li></ol><h2 id="1-09-2020-10-16"><a href="#1-09-2020-10-16" class="headerlink" title="1.09 2020.10.16"></a>1.09 2020.10.16</h2><ol><li>新增二、三代混合组装OPERA-MS软件使用 (31Megahit)</li><li>新增eggNOG-mapper结果COG/KO/CAZy整理脚本summarizeAbundance.py，删除旧版Shell+R代码 (32Annotation)</li><li>新增MetaWRAP单样本分箱流程 (33Binning)</li><li>新增dRep实现基因组去冗余 (34Genomes)</li><li>新增GTDB-Tk基因组物种注释和进化树构建 (34Genomes)</li></ol><h2 id="1-10-2021-1-22"><a href="#1-10-2021-1-22" class="headerlink" title="1.10 2021.1.22"></a>1.10 2021.1.22</h2><ol><li>增加删除中间文件部分，节约空间，防止硬盘写满；</li><li>正文的补充分析方法、常见问题移至附录，按软件名、问题/方法分级索引；</li><li>软件使用前，增加检查软件版本命令，方便文章方法中撰写准确版本；</li><li>删除不稳定的humann3、过时的eggnog版本教程；</li><li>增加kraken2新环境, 增加bracken, krakentools新工具；</li><li>kraken2结果新增beta多样性PCoA，物种组成堆叠柱状图；</li><li>增metaspades二、三代组装代码示例；</li><li>新增KEGG层级注释整理代码；</li><li>更新dbCAN2中2018版为2020版；</li><li>新增CARD本地分析流程；</li></ol><h2 id="1-11-2021-5-7"><a href="#1-11-2021-5-7" class="headerlink" title="1.11 2021.5.7"></a>1.11 2021.5.7</h2><ol><li>增加prodigal基因预测并行版方法，使用seqkit split拆分后并行，数10倍加速单线程基因预测步骤；</li><li>增加megahit拼装结果片段大小选择步骤，使用seqkit -m按长度筛选，并统计筛选前后变化；</li><li>不常用或可选代码调整到附录</li><li>两批数据快速合并去冗余cd-hit-est-2d</li><li>二三代混合组装OPERA-MS的混装和3代优化代码</li></ol><h4 id="1-12-2021-8-20"><a href="#1-12-2021-8-20" class="headerlink" title="1.12 2021.8.20"></a>1.12 2021.8.20</h4><ol><li>新增并行管理软件rush，比parallel更易安装，绿色版无依赖关系，整合在db/linux/目录中</li><li>新增seqkit，可以统计序列数据量，支持序列长度过滤，格式转换等；</li><li>新增质控软件fastp，软件fastqc更快，适合单独质控不去宿主；</li><li>kraken2新数据库，同样大小下注释率提高明显；</li><li>eggNOG软件和数据库配套升级</li><li>GTDB-tk软件和数据库需要配套重新才可使用新版25万基因组数据库</li></ol><h4 id="1-13-2021-11-19"><a href="#1-13-2021-11-19" class="headerlink" title="1.13 2021.11.19"></a>1.13 2021.11.19</h4><ol><li>陈同参与EasyMicrobiome的更新，并提交了mac版本代码</li><li>新增humann2运行bowtie2出错的解决方案</li></ol><h4 id="1-14-2022-3-25"><a href="#1-14-2022-3-25" class="headerlink" title="1.14 2022.3.25"></a>1.14 2022.3.25</h4><ol><li>EasyMicrobiome升级为1.14</li><li>升级miniconda2为miniconda3</li><li>dbcan2从2020/7/31的808M更新为2021/9/24版1016M，格式变化，配套format_dbcan2list.pl更新</li><li>新增eggnog环境，包含emapper 2.1.6，summarizeAbundance.py含pandas (conda install sklearn-pandas)，配套更新数据库</li><li>rgi更新到最新版及配套代码</li></ol>]]></content>
    
    
    <summary type="html">folk的微生物所刘永鑫写的基本宏基因组分析流程</summary>
    
    
    
    <category term="2023" scheme="http://example.com/categories/2023/"/>
    
    
    <category term="生物信息软件流程" scheme="http://example.com/tags/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF%E8%BD%AF%E4%BB%B6%E6%B5%81%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>这是最好的时代，也是最坏的时代</title>
    <link href="http://example.com/2022/02/18/%E8%BF%99%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84%E6%97%B6%E4%BB%A3%EF%BC%8C%E4%B9%9F%E6%98%AF%E6%9C%80%E5%9D%8F%E7%9A%84%E6%97%B6%E4%BB%A3/"/>
    <id>http://example.com/2022/02/18/%E8%BF%99%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84%E6%97%B6%E4%BB%A3%EF%BC%8C%E4%B9%9F%E6%98%AF%E6%9C%80%E5%9D%8F%E7%9A%84%E6%97%B6%E4%BB%A3/</id>
    <published>2022-02-18T00:00:00.000Z</published>
    <updated>2022-03-03T02:03:32.000Z</updated>
    
    <content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">  <script id="hbeData" type="hbeData" data-hmacdigest="fa64f6c8c98488b62ca9ee636e04994e8a6a135ad6d3d9deb2526d046c6039f6">d0cc450fdd5fa39b8b0c66e3a5b4d3c4c5c4826a02a52251e94a85b3a20d8d6644afc2e835642a2fd054b4efe03c1c3c23232f37a442b83b18873f009c9ded095dc51aa28494db3f22fe596c5c13f7f6df45b4c852ec39b181ff97ac5979a171c99b276f57e8cd67273b4545dcb8b8ee056d11326cc55a93760e78077d1694395df5e237b042ce15e9f302079252a62a9106d540e98c66db3e1f2f06550263c4e8a38051fec00f9fcb23378567b6929cfa2fb63678e7652f2cfde18c254e2e54bb289f954bbd9900bafe8ed1105cf1ae4f5f7bdd4d21cadfa98999c22014732e0f92b7e50e19e921309759cd266552983f878bfba457b5a321edae96c12b0b601a8fa1e0f4835336cd9a4b586d476cc9853911062e5a80452cf0ad221d36805c0fe9d3fd4592885a98d1aa5bcce3ab6ca85a41baa920dca75d07e1fe078cfa09e78ae92fdeeec4fc132742d907d67e85f687219fdb43f67b3d4815fcf1abaa53d83f0e8072ab365350468faa962c9cd54b5b1082a7905c00170ca9120da57eeab91ce141479aaa2003f274165e0942c6f04398ec467c5ba57f0032d22a71fbde8580acb361ab2268485899808c4744d2ae12adeab8e57d526c0e4202310b22cb15a3bc98c527101a5e3d16cbf615ee663804acad9fccf0b87a944f95d8cdff298ced125c474df44a5e6e8cd4b01bc5683e9f422ffba5ed6d7111e0c7a1a5a5b895ffd906af8f15e8e1313f0906bfc234abbed737729aa7e48987214aa6853453cf2c1f4041599e4187577589a086a2a61fa20f37c2332837571eebac320717c3cf7b87e81590da3601f57145676233d592c8935981bd263c58f6d8ce3a8fcb4fadb0789f85f53e129073d2c4b7d34802c61cbab2e6f191b2e0e804a37203858f133b14fa4fe69d62289eda608979e62474f7e7a9a35ca14fcf009e78dae51be9f3f9736d17d5fe318ad590cdc2e7d48ea342a666962905262571947f029e1dae6df02e05fafccf7d0e652b27eb76c74bf2d1f9e3a5f84e16a3293dd899e2ccf64a887ba0f0567b6c7a599aebafeef3dd978a6ef6b3f52eb6d661d411e180c1e6536582077293fa28480310819579bb62923578f29b00d9335e78ce8e39ae50743d85bf33c9c0ad36373566dacdcaeb051c0acf39650d49fbbaf1b51a1d30d9d5989601caab84f88c1840090f7451863d5595dee4aab29142c1904ed7c56608a4d4ad955a32cebb1374fafbfa9d871c64ad1586f7d60684d8b5dd1ddc6c19c98cb580636dc6717c36463a50ce71983763d4fe5a95a6fb5335a63505973ba3c6a1fafb7ec7b53eb512ae045411a5352bc9ab60a8157734fd3ef067c1b6bc4541a632adda48e597a1ba82d761190dbd51055d00bdfc16e0aac33afde1b36df3ae34bb5494ae03788018054dd5c2a603731a6b50e680e3b07fe0820355f6470a8e7ee0228c9236c6aef84c1430411443f1cbf57ef5d9cbde19b847831e11949f21d9126f3b1b6e04d4f943ba0ac4365cbd037f4513adff03c90d9650affeeb56a8a6865eddb92a9ff30a0bab058bb0ec80c140fe172e97a779711fa777fca8a8eb73783422c1a8c3083ba2f42771d3ce755100dd0dcb85c3883a2f3936baa107a7f95871af926ea54f681989baafe91dcc4a2b100bce1ff326445d780b61c37b62f202cef9b2d09f1721be6fa9b435c7abe5c119ec9295362cc61a153482619dcdb269fe63ef928f9a1f13147e01abd6ff93b24fbad6d9262e5ace8c29f6f271652ffb4567b9fa66d22dd7ed6109c9488a2819c1e84743d5c4392eb905a0044a723456361cdc164410ce15cde7f252e7e2a5ce9e089fbd1d16af08a8ecbbbe5e351d18470ebaeba8b386eb0db5edb306d9273fe9ae6c781add3870747271439e33e5bbd7108afa14c8a1971708cb0135689031df09fd89d28b776fe2d71bca7312f524a4d8d2f9018055e45c1557e56673a83cde93aba13d77d17cd4d97b6e8984aef92f7febbb067150e58ef86c4328b5ad4d5032c08139615bb6e1b30a167d37ee35cd13c62520d2497cf94702b279172de46c0648de15e7d01ecd5ef3bf13ffe2ced73d7bc20c0c07fd7554fea766605558ab024cbeb541ba1e97b680443ab165b56b773285311c1aba6420e37bb6e25f3aa3a6f47644184483361146f0e3cb16bf5c2b3e1fb535c3f6735a130f7cd58ca3d3ab1fc49d7a0d6eb8fcf76777c4bbe08fcefa1220fef15df189fad9c1edcfcf6b61900ed09c548126a86ddd884abf3812cb7d92ebecd726e4303db5ea1ae02fb6600e746cb02b3d80adc89e5e69e7e5a4935172bf1abab56bff08cc55238fe386cd2c27a9b2d3e282571c0739e79382e873eb320e37e33e9c6f1c9881afda7cd2a32bd2b8aaeae80dd50d25b397528d30b7092f6bb8e564065892a71b9301ea2a6cf21fbf29926fddade5f2119d295d14dc997727c8e38c00718211b8aa305ff643026ac279e1128f327db6d938d9503c702713f6470bee5e193626f2eca256aa5e435e8fedfe7e653a1903593a4f282d65f41689c76587be479a5becb86889245d1be36d388ed5c70e670a76cf1bf684fa1ed6ff8c35046ca38702fa96f4a9c6772ec55054298e184539f29d7d5735d5cedee101987e5b63e627d1a27361522aa7465dc477a3f794940eb77f46163da6da979a9166ddd093103e7b503f9fdffb700d5cbb85e7aaf3acb22e4d4e8d8365e87982fbab7c243edaa4c384c8be1e51585cc5d2688a3212160174be754c501c62384a5cdf18c7a72221fbf7a11e8dabf3458954e927ab00209090a4c42a8e3bef726745797c3c2644c600db77dda13b17920e79c13b00121187406afa559171cbee8d84ef4aa710202c89d743e1287a785faab9be958b68327e2ce39af0bd22e809f35a4608f1be56ab8d3c8036fc588d387ab17b92a5e256e8628586b6490224a1533204b3c332d290bad2bf2b5c23c90b9708e50409a6ac1b32e790903ca781c695f975ffa015e5bac29b2ce77f5b3b28691bd6615f1cb12a4a8c04f781041022c2dcfc2ba3ef38246d99582c6b51568fc564de94bf06eb6e72c0343c1c14700c582424f9aed4bb758464d8b993d55e1247d70bb78485fa3f6bcac7cb782ce2e353442e0f2a132ae54868ba96cce83b33419e1e2c980bccd04bb53327221ebc6d82936cce3b915836aa863b68f520c3469986704e2b8c931a91b06266f05d3316acc9a3f444f4349bd18c5fe60207ea2efb8efa0f61349cb617e51684657798394e1872da53719ddaadbbf8c1a0569b8b7022d5910f93ac125cea569b1f1c280ca53bfe8cd49e341b3d7454875d751221e2b9444c970ea6143cfda885643f94c20dee75fbdb5eedd6e512ecfa3c694fa5117e8a66e9f6f9307a7370a2b59eed7494b4561f5ae886474391e127e38e4e5bc381ed043b16433faea07820a5d73b78b194ad7fa204086b4f3a3a71287a96a4afd374e7e4e7dbba02dec7d81b7add25c868177af2292eb56ef5fa607992872c49f47eb5f219549784f5c9646b43e6b92fa0ea0728f86f6dce24a028b5d866de10eed00242b0a38dd40608a896814b1a7c142cd78f77f12fd9a1a271e40aa18bf50f1dd0be7355f61ed143b3e5ad7a7fb11cec200520608dfeab559a2f29bd3916b3e5e69ad2054ad963923ef5978393a435f7d68f7677d85b29e0a0f2e1108bdf2217756213e94d826cd00d79741dd31fbd5647a9e67831585ea8f9ced6314a084f86e8745a198163067fac7494a512a69409bb4a9ea254acc047a689e796acd38cda13c134c1acf5bda175646317d6a5b15b2e5ec7444e8b2c54f4ee4e26a129be131c625e7863c322b86153effc9170fdb57677f55da256be32d9a96b180559b9b1557341670ee569a143277a7716585aba42580b21b34dbc235cdb22e7554cc8b9a68d2b4c221d0e8ab12e2498496f1dc7ca4131e69c99dee43ba60702991824b6c81fbbbaecaa3719ff82b3d8ee69ba72ef60dbcb4ef27338cc7d56201c36537d324e92aed03cf182a14a599167bdef2145ba1563749af5f06b4126f694cf9d3b291e3911b507bbd64f2330ac84980bb7f1b25ce69cc38b7d92eb89ba702ce062aa5dfef26b905500cc92a6465ddcd79edd01293fda62b6d057ba331e8d8e33829646542327c76e781e614125ad1da603da0a0e3b12f7bd22ff75d6d80ee56eb29c277d12849ead62a9e9660b9446287dca63d4a437719949aea9c37f0ccf5f3058665fbdea6b36a01d9e735f493073aed79e024984cd0e78ed62e44fafaa532c11950a678faf5a1368084d80cba311c5737ca6cb9ca1fda42d03bbaae1f7f674b5b1519a1088e4f4f110729ef76d73433c209c8040660d15b006e12176a2bf27ab160629045bf702e8d7892ae15f0c6e1ed313014b75fa55b471973aa4e19b9a13f2d00f2d1ef635707bd2cbe7e208b69fef445fe99e2db9aa481e1d8825fc7fda236a14d950876fb1c4ef7683bc78142b4439dd2409ce3a8cc20041bb84bef27e3ec73cec7a7cab36e2f7b23a3564e9fbe51d589862197bedf97e386586a7d39f7fb86f4dd9171e5a9196012bcfbc32a9e060d9eb57162d097fc8be3e84ec93cf82f69dc49a74bf82efbc829caaac7ed94af8508a4e2082869d4f68d7cb32239b0471b6bc22e199985484d7a10b053cd6d5df2122bf34d16e715d995c74415a94a344cf196214c244ba64f072a73f2d824fae43e32ebf47c5f47f6512bd3682b08ddb3d94ce6f9e291cf8570fb5fce13487069985f6e0999845e43c1befbe5a868fd8ff3c14726edb54919dd60de907dc7acf2ff8b0f9651170695ba55cc5ff6954268259bce838c388d1ba2fe58b677d19ab685ea1a28a1af4a18376a457ea4eabcb3a9da81b7cc693af5e71810d18003873e27146983ea49ef9290644a896d1a627712503a0cf140e085b6a1f7ce71bc10f61d8bd9af8b912bdc391a26f081e6e716daf6840dd38c85d0fe23e50c7964635377d0eb60473f8e337ead8f07c9694c6fe98319e37f2409e5e4eee2378389c5b77cac1f3099ad96a153f957be9915dba782e6f8fefa067f624f938d8eb85464296dc0fc066adc17ef6a4e4935524d06a996808eef37cc73c0200a0845611fb78ed3de8d16619f22a2e974ed954405e11b6b572a090b18d722833eb5cae67731c0a1f21446853abe8df4a100795070037d1e14136f7b75031fa6c2a6591c9652045d593e51fe4d2bbf997ace87ff235a6b3c4eea1ec99442d86a379b4695cf83fd0190499f028bb2191fac39ee015f2575be721241de2114b70ef1a03448ebe2f5021af63e875a1eff56623f53007029d03018fa92815b16195f07636cfdcad0beeee56435edb4af34522ab7b65ed085e336742d0f46b0541b93d714b42e238b28b2aca02387eb6fe502a9c37c00d82c7b65a7cdc389fd74478fe95c52cfed3ec84f087d233e917117ac39c4c49f7eaaba8b2a4ed2bce248e18e6f768d0603d630ef2a06b59ad81b184c020f4ad141f25e242f7e1d69639d837632170cca2813ba8ee89b965635c1391800f8c240db79a4a43c642db852186aee4bfe6df837ea5f7300718762cd61a10f245d8a325e069c94eee44f2c958bfcc15cb645ba6cb62f1ec25fa0847dac650c0eb2903d76f81b9eea55058bcaba2e5a1d70f227b841c4f457be1bab512a4e4638c2672605aee0253c9fa5a91e8fe92f63e8fb23e117edec54d931e05150eaad807a6aa4a1258a56fc82f877854333e5a5a1152185197e91db382469811c06147c72cdeadae5527c2296a6389454a700c0f47dd37c409a5ed9f83b3815739931ed6ba1d9b1cd92574e7587fffbaf11baf754ad13786d5994fdcaa34b1a112d9fffebd350c4611d681eeb81871bf0e1eb03abbe594263bf8bab00f0d8250eb345d1a8db3e3cb71b93b85a009eada72bbc2ab77916dc362d190bd27ada8647b70be562a53acfc41494ef18bf03f74a1adf472b377cc31ae9cf284e57f1ce23567e4c5fb21c970c318749c309fbbe13d8b16b630cc9cca79bced64fcd29705baab21a8d6727a0511b71e607a036c45db3ef49c66a4663ae3d3262ecefa3a2b3c6f9f69a188ee131d6b5a078d515ae11defa8b4b1d948e30a237c1302a4822fa2c883cface5364560036e055c86fd312523b121fec45fe8bea2bee86bc045ca0cf32fe39886d69b157d3e0bfebc3a8b04a80143c43a8001f81f449d628e833b807ef4dd76de984326897e4d138f35feecb6f01b40f70abce1f52fba18a457810c10183cb7fa57e9702b3f3debb3c7733a8c820f0171ffcabbbf10d59e8258fbb7aed2b4fbf2b0603b9cb6a56d5d52314003ee780af88fdf6341950bc232f30f0bf98db474397ae4e5eb615916e6c25c029f187e9cfb671938f84bc086dd31f3f4fe077b3e8e14d22c11a13015c4dbe7796040a253ae9cd3ed2f5b47eba4b4612c65288055ec46a65e10cc7a323c787ad3ee8f1b9781930bd4a651e0f834cc307ff1cb9e401070a06c1e4a21bf9d32f0dba02d8eb606d203e591f7bd8feccca5c7c8a85c74ee4858ed0bdfec30cfa1f5f63f6fe84bdc140811672915cf84fe0dcd7608716dd0e0561dc525fe374a5ed4be2a3ac7bf31e19ec615493f902e7630ebf8a97b266ceb76e31e73ec68709a2e81d04c814fa05ba22e2bedeaa87e08905fa59b4807bf992fd58b9942ab55bb1da92c9cfd5c263dbb920bdd05ace6c8abc6892946038a265f4a617836f27c0f7e127d2907629a89cebbc14aaacb5ca60a4d157b590a1b86debd0c750e41ec5a1d7c5fa4c6db8ff35e55570528fd59f1eb7f1c2fcff1d52c0b3c2a590a3a94ca6101113e33e40e7169f81c5909e1e986ba5474ef9140d7c6d1f61c47cd249cc16a218a32ff910e0ae605cc0f6b47eb5fd369f7510de95f61477d73cded2fe5f65d4582dfba3aef06361bd9a27a8e3fa31cd3d119f426af378e553e1f46bc2d1571352ea58f037bb48bcfcdcdd86c8cb3e2823f100161869071e6c4ebc906545b3f89c20c8a8c6c655d26997681b0319f9d2a9b4c691de8b4c634414a50093cfb96ffc0612e7be1126acedd3ef6f83d9ab33506558d0927e5bbf531c2dbdc2c4ac4b38504222c480660595f76999a4fe8f9148e24aefd82e447dafbd0c977c49d559e6a48a5f27acac17837b2cf1014c0289ec00ae1a0d9ee2f3d85cd60fdfd0d6a878531ca747184cbf76d85dfababfb113120c35e808e50a8dfb020b314b544d295429c5621cc627bff729584fd34d9ccb22f65c9e15b64d23b7479ecaaf7762e0abfb5193e7db40f0deb3ca49b54ead46f912be030b293f28033b0eea9c064871ffdd8dd434887e9df1d7e05344ad82d15fa1db920fc0df9ea3f4f846d9a9e8f0991020e5ef25d182e936624791f41632f2a9c0045e198c0bbcd1c41e0446bb70b124a333df4ccf44aa019c3469e2fd3f0914ecec50f1e9beeec278f19d9b06eb0f0371b25bdb058fad18a2d9b5819f56860858210e99916703434db3ce793ed77bad1454b535035323fc5a0ca5b22b55a1b27882134f6bb87fc182d499966da3f6bc57f10b9cc910512e3d3f85d97652279c9b198b26988262ace3c595d1743d5481fa26ec3bde74a33e65b2c6f130ed7ef8f74cb576cff3a86e9772b59fec286b1c09087ca7bb5dc353a0cbef13f1ca3d21c3949c9e475b526bb66879ca7a4ebdbaaf3da32bc36d39e42791675aa5c546e73675d6cbb42665afe1f58cac24aeeef7bdcbe6092c0a76e5a3033852dabf259fd22a061df64139ea6bd1d98486f3d66cb6103b4fedfabb04499389f35f7b0a60e66cc849612f28346a51c53a3921f60e48a16dfa39b66f2a3cb700b313c72748eb0095a3eb32b1889c87c8ba048e1c4031ddf56b1ae0ff57c97fbd2cb5d8a19290320675dc7f89bcfac4ef97583fd0a7d589a081a05d4e616a88083b10e4974eca44b8c502fbd0bdc4c32cc10b4f57e2cbcc75a07568f8b5015e979cd4f6bf40620acbaec9536bcecb58b31c904aa5bbf22ac3a531a37b6441cea9fe398dc8d1bd9ab193da16b34323ed6ac7e51d851fa8e1bfa0d0c4e1f67fff1e0b353788950872b1a7ff65065cbc443154dbdc663818b8a6bb672653c3274bb22db3139f6749d53f96db9833cc22b2f134de82655cedc031d6f0869ee6c44868f2ba9d8c9d8325fefaefb52785e31fccf070873c5c6d673550d6e818ef24224c0ad974ce3194815c208076092a6af940492d7789947d9a0db71a818263752905bad9f7fcb7ad8d17a3433c0a4d3819ad823cd18126c338745a1b7d2ed0732aa42b73723adc66b66763a84ccde769cb89fb720a8e204f8fbf7395e4960d30fbb6ee22f03dadbcbfc7dbcdd2eec952c9142dc32b36163f1de154c02cfd7d34e7ee3af05c98fdc35fe69169733293b609adc7c4072d10ac8e14ffcceae7c6c7789fa7f55d253228e7dd69a4eca6f9311e5892d6b436f4b1d97d103ea240790730bf69b42d8f5e7a0ae1ec79431b81d69f0bd357ce547c0c04e2bcea73ac89c45a9ba0c0c79455b1ce80a284d663af7f2009e6c2a50927ba710c8352d7a8c246fe973e732f5e680963eb5af2ebba7113a76714b841b92ceb188d27f7e9e9348112ab64bc1c8795421371c774bcf7011f327e2ebc94db7f05610468641a4278c0545e983d80be349c31c4c681ec887dc12bba0a29161f1043652a238a8eae4b5e548ef6602d2a01114836070de77d5f1ed72adc041b20daaf7a73529268b62c4e4df220531453d34d4be7d238236c8ce867c56d28987de2e88ea63c6067538ad6de5d6eb3554e91691105a1b41d37657011ef7e23dee0517418e3c2ccc9530af4fcff898183a04527c65a11a3d60330408ef010a66c3cecaaac6278e024ae1f4cee347cbdf78403e3d8071c0d118858bb574d5b3a4ae20363d40c84ad5f7a8f0a390438b332fdf78fca16aff893355041a6e52b97893cddcd9c6c3726e23186abca208eca4841b0b0c2b5e40b339757e16cfe7f10b4402089f3f951f0659a5dbb589366c0d5f1ce90cd2ce0e0bf6bdceea1b5e0cdc670a7cfd09cf54f9552141ea25cdb4ac2d4ce04aa0ac7b7ca3d33f98e40a8fd2a6e6594f3ef72402545d43dfc72f32301ecfa988a1f6b9e54e2e86204d7711cb7a2f0aff184c73f2c1863df5e346eae313213b4584eac5324b49ebd682337a43bf7f8b4be577635bed09966225c07de115f94baf2d24d9efc3174c7ab3bcd4e23ca1d5c74b58cf89ddba7b31857a5cc63bbde588bc9d7579cedc52ce14298d789999011ea8a12cebaaeb95a695235e08a82c3228ce2daba206295b9c7d44cf2037aaa9e6f7307d929c2af8953b302122a15a807b66784bd595069b0d7874439bb903533ca4e55d809764546fb4595981cc7d94f29532f71318a411de01ee03ce7b4c6eb67be08ce56810ec591f782c0ee151fa51b3ed7e108ac83282c5d08e5c350220cdecd62171e4df2916111f34fc6c3fe999cad5c61d18970c8d2468bdc168220abf4f24ee18eea12193055d9fba42034edb1dea21655889b905e22396e4d50f6f916eee12f90070e78f1fa68fbfc87edcdece993f8f07dc9013e92b81e321cbeef0c90fcad38f2640e7bc745872ef38dea28f423b70123e0ece4c866b755a35305421ab758d74006c9e5058f0f03848fccd0bda6e8cb615a8f28ce5aeb2d20288f74eb783cf5f2042e39281cacec0ed6426c3cb794c3ca14962866ba24ab4975ee08c0204d960a5aad8953d41de6e4fd80990d3b06cce206e68c540e4390c05de394b8020cb4584ffa9c73a0725b55f982e8cbe9c8082c03e2285789107e2b563d089ae0a5c13b223a88ce3fb8598e788ec337844b2a1cf6496b63c700dde04d769e53bc745f47a33e849a897522f77a6222d29dc6adb74fcfab37e0d774dd22350156ee921eed1e2f974707f0f2ed76c6315ab1fd29ee573233409072657b3f935cf42fe161dc393679b71900a707103bb13e464e6c6785fa55d75373157e0422b307bb577b658e44d612e34cbe870e5f7fd50432f842a33335215430781de3e73d6f19f27688af9388f1cd0cfcbe75cc5cf596a4225febc4a7b01cc4345442acfdbdb9cfce2bb20abcd7125f8f874eba3b34a2341713a2f9ba58576a607f83888c5c7bfebeb47fd8d404e9e60de133ca2497ea74ec5d6a5c0401d160f76e740e32353b71018eff718c83a3db69da9269e8117a984e28425b539f4c6ba0cb422c55fe2117aa29f5882e0c35c73ce073188c70a357d9b37b600b6f231f1dd5f4decddd64f3d7affb4b39b36efabbee6dcfcce48aac85915ef10c78c24eb0f88992018e4cf6a838fcbc18ada2bbd64d5c779c6f721bad5062e0e6f7b26bc7811f6a24d8c4c1db2b8887e37c03d8fc3a11d63950e613d6b2d0ece6e4e6d6cd6b1d6800ba0c1af3f231e8e94ddc7a1668251b69e31f61263627c62274ea0e0c78f84a2a0aa1c30ddf4f31f3617248e3283e74f7316afbdd7fbd9266a40dff947d623ac7aabcf8a77b0abb8fb3e7e2cf9f633c65fa4d09f3b0874f427d782ffed48619665195a7f86dda37147af423afc6cddcda2db85f6a9fa607df3754a7876897e8517013989d47412ca523840bfd255618e6630eaac0330cc6de1ef1789c70cd18351d95aa0dca81d535f2d6dc92d0641508722a1692796fc1af8a95cef61561867e6ac448b7be3edac4ec86eb69656555a3f57eea7d73d30c24e2179c484dcd43bdfb561710ce48c0346144d986ebf791d87af901dd84c2921e72d0eb1c46c4c0c5169f3c0d08007d84ee43033f3a7def44a7e8a1c06814d16ecda3708aca3bd5ca898c7f12f2fd9c2f2b3c0eb6eabe42e3cd6b4c46158483924d58424a8aa9c0a8d3072b1a9a793335265197d04c33c9d2873b79bafb868371248da994ed0ac862f0d10bbe126aa8d9c99d4ca38616515adb9892db6e6570cfb4f6efa2cca6d706d280ff15468837e261f407be68a605afd49c9720afd5fd1256e4de53b6ab7d2c2de6850f39fe90663017de1ff4e3a44252f5f1ee748801859098284e3b0cffb352b7202b025b8596c6a0c1d95522f1f2782d505b2681813f5920eee2034b4bc325707e604d092a1e3347dc3ee83e2883a5382b54533eabefcc6380dc3acd6c4da88163f2d4aeb0eae2a49d004abf31f8d2d7189e5f0cf119b511f321c5ffcadb52020ea9b0b668fd713fda4844e5cb73d974ff77eff9b4fdfb407e96e1fcd8478fc35844ec9f08cba5e7f5f6958c7e486f442624dbc147a4a533edd33e25b4f90286e0b8a4592b4cd3741fd470117f6855a7e8f97926bfc912792bf46fd3dec3c60216e94f9222ef305a5a6a71b4f4c7f752f55ace5dfa34eede7cb681b6f3d21c47fbdfbcd6335a27f79ba4efacc71776801a8bd66ad9cad73adfcbcf0268983d58e8cb00bed9061ee455135daab732bc433a2a8d7cb5f3d94c7a801f98b65f18451d2c6ce633a9c218c414ca229f9fbf7e2226373dc3142ef27b14254edaa8db12ce70ad3c1e1b675c6a0846589ff54ecca1d1e6f4880380ff83ca8789c223ce5d1fbef834a0d93612ad9af88721725970c429596f44be863bc948c5de64e906740e1f360e9a3e9337780f5aad9c01cf34de1194c2772aa3473fa65d561d434fb3140196652a1d9b52ad419d3d752de8ee72267281d66f8b1cd35de2cdd27d855f00efbb505fff0e70d962a6fffd8d213caf06dec7756a0c3548c29328fb2cc7cf5ceac8c067976da9cc65533649f3f856b09cdfe274f1249f6f66a95fc8cf6c9ea2e2ae2f8d2f2ec827e6911def8f89ce89b77d06cefa3e254903502caec260f1c4b9aad892fecdf2ddd8a09522c9155790ec9f5d7b6015e539fbdc788db6e7e52bd2970772c2535e1ce5632f31073e0c139ca3db896ce97af08f8116f11a0fcf74c1336f160d586dc1866bd38502564b04a7713e2d4eed5ed355561b2f1411db6ec0565fa16cdf3b923deeacf2f19a1ef4922c697f3d03b4154469aef07c1bb3212727b6c0607e355bacd91066e24a53d8a7db9036e8bff377b02c52d7e59feffb6d38eac63e1a3149a4f0de0370d786198a8c868322d747fefa5744feaa2143d400ed2e6fd738113f29dd962cef1c3bafff614df88f1575880c74434bd9f25558a805bfeb99f14fd4dc984fbba74ee2a5c46f7abd2d34d9586e661616c7232fcf33ff92b9b865ce3abd4575befdb060fdd6229be8135d784a53c004622c719f9eefe773e9d6f1746f4223ce7805a4bd3ab71507cefb1a125c83f0c4192be766c7aaaa9b0a6a108a28ff2cf1a83572a5825da079b0542f059572b6670e2c13d0177ddeffe1df28cd2ce2920eca550defaff0b024b6a1bb42a36d63d39b5ba3dc8ce98bf40355541cfb04f341fea4f205866f7f0e5e43245bcdab9107eacb43a26825f3aa5f0662c88aa574840ac5eba061e17015a4232d56fc9f4052a538d1830987c274ead0bcd6690ebc4de3052246199c54f1ff3366c31291111bebd1cfbe335d6996a85020c1fc1b1922a310ee5f2462ad0a9ee28241f897b94e5812d89ed31031b9d6265413b3649f8871437415981eca240281c0ec62ed3f341acb8295b02ce1f18b80fbbe9320c498d1901ee86eedf2299485b2398d57b9b25b2f213c1b532e927d1df07d7604174c9b423e42835fdcaef36f31ebb35067c90dd00d7264eab236643e8035e4917006df5c806affe051b2d969084fddc132dcb771d2af7f1d36bf3175d9b976e7ae6096f5dd2288ca3f5d54474ed8464c0592cc4ae7e52b7d59f96a82f4027f58dc564874bca8eb163dd559559944521c018434382db75cea94f14d37c9c1feb9094cb8de5679cd0e2ed1af7a5ca6808cbec3c1f2f5047f7c16b5d891b174a9b9a3a9a20d1d16cc9bb51ebb5e0501a4b2e707e6b0709ca50843a7842467822ed327ae2a87b34e15b65ff9c98c19bd544b4acd24a2c9ca0ed98f3dbd905c40d72cdd2251c2c5ee946d4f58ee24797306ce9c9f4bcfb5fc7d25f54ae8157bf32f55c30153704e280ea04483bdd9318d6014518d4ee5677a7d5ac585fd4220090359f30f33fe57bfbb91999760f1e2570d62d2a1075881301ad83569b7a71bd3a634b97882e0f908553f4c4160565793bdef6b7813d84b660f1ea163d705c7be65e8f776c30f3bcb4708fec62cc9802f9ec5223b9b2dd450276d1f37bcc2a45dd464836d96d0d1bd81ddb62e9ea50e5c922ed462a9eeb618418c0aea127c0f1a9465a815016fa9579030a2fcfdeaef90bd1d58e830250be21d57a2fe28f48da2df0e08b2c064631712981fe49d4ed7bee10d53fc623234e7e2d177441eaa45796a0fbd56448060eeed05b5663686efc1cc064e6163fbe5d193409c3796aff01af75ba9297fdaf4d91bb8c0d0c8afcca9991060eb47d3707da35b8164554179ccbc8e6c6ab5d5e25501c61b9cc65c42b0a905809ae0e14a7b6f24bb18479203f458db779ef74f8615a348344e409ed57e4344ab76857897be39f4ec336e30a8e679d6cc9531f02aa8c8b604f7fcf560bd96ba2bbabb82c2b76b4894407fe6995ca626ea61f4e347670929b31f6d006a52e1dd293817d6bd92339834355afe9a44f7b0064269450641b9131beae2e8d0e77bda61e32b183470a087f8e8d5ebad0a006dd9757e7b7ddcfc8eef6704e3ff5d97756b2e3eba609adfd6520177179c04993522199521f42cee2615d1fd4d12f69df13ec62583747c9c9721615e690e0dcfa209e34fc49d7a0f344885dabc788ffb31fbce62bcc268ea69beaf772669d4d0e01ae4ac3b1b322ff5ae09b65e0b78c833818287a66500084a7da3c2dd9f30a52e6b0f41f4982adad58442c4532b1b07c5c78b7819500a37a2190e55736ad7bcb9a8a3aeae3b62fb48839456cc9f9d70ec011a31bc530ee2ecefafea01c0465b9f854cea762226df5780179a5ffa24bd4113f376b8e3c621e895db45643b4a38f4d8ace261c67b56144c50d89c31a529486a69bfabf34d8f353bb7d92e3dbbc98375d83806f3b60fc3f797d4adcda8bdf7e603aee55f25c15f67b373d0fd51925e13172ddcfa90632d02791ebbe65541a01f4c312c0db3dc14fb2821b8d93d6fbe5d052889da270b2b2dd9a701c6151660fb984655400446d8621840e5dbee39c680088981215bd6f44218f1dde1db680dc5bb78a2eceeeef92d521bb999d76cf333d89475ca2b201990d3323cfe557eb148b9a6b2836c094b202263676091d5781671bc8c166f41a606a57545e9ca3ddbbf4e2621f39ca8b8edc036e2ee69188be04a598468580948e53da25fb43edac8916699864cbf09c5524abb89f36ed6c984586533edcb836d0fab847f596a17d7afb1697b68e7709b8a90babce1fbb84e67090dc2aec45a1cc12a296daa3d30a02fc76d25f7c0bc5204c73cfd67a41cba6fe2b4a428e0036a458e4369b398c1b5d75c2a163eec59ecc6e2fedea1b8e840c69b15e82e1e9119c4050b8d01f632bff3aaaa0ad3410ef3743ecbad85209a6088a1e2797e04a946e5b93b2e3a88c7582dc10ec77d54223124476da88abc020919520de0af961063281b07ac238b630588e808498d2ad192557df5c9a20a51134ae32e75fcb4bbd0b514e74d78efa2dc57a584f72a46c8b42734f25ec076d769dfbc5ed956215597b29683961f521330f5e028b81b31e2623576568127d30bb310a97fdd721ba31f80fff1ca643a9a643ce69df2e4ac5197b3b6e21edcffdf71a3becb57cc0626c8c3f044cf450e26895eab702ce01fee76a6b75e32313fe96294a0acd19ad0c61ec3685a3969f1f74405e5435253d5c9ab3ee90cfdf451ebbe9ddc78f586e483fad37c569e2b015ee7460ca6eb35f3d67bba17f24ad674062bc4836ec9ab019536c38aa67c14f015c8a739fa322c1a901340c5028cbe614d03d4b0f75de419c3027917e79e57a1597e226e449bbb14744b0de06d29c41e0be0419f0f52404c88b37e0947208ce53de7887bd31e23c032b64addedcc4387d2929d7c33e717e7536e093a99314f3919f19c4961432e883f6bf7a700fe68d1586ecee2639a4796abe390c92c824669f8af6b5a20de73b17bdc058e2de2954157795824282b66e81ebf273fa0330db768ed331115abcac2a12192722d9d56e6bc531ffb0d0a08043a6090b3cefb89386c9bce5417e911fba4bb26c83fc2082ba7501d09f2518a133025f8afb912650b0b76f811c0712a6b9a4b3df7e3a45d5786c512e0bd652a8d21740d13ef591976e3fddf6907d54b6f72efd3288916d9be064a192d22146c6a53f04aacd55d4638163b8b7c0122611ec12030034c129d452238343c546fedde6654a9680e1c302e39560ac0f706c41edc1751577fc19b49695b1534bcd0626d8806f8a26cdb7b42bd04561c27fb531f3b9e0cf81a681e8297604cab0a1f9903321b141b1cf1a4402e1616790c47468926e3b37414330e3cfcf2fa1d3b2650b8123adeddfb18b704f61fd3b28ccd5d5fde2c31df64bd0f4a6ff62c49e76af52a772700b1d384d94e24e4d9fa607eee9675ae8bf173b22ed7ee886d2ae1f1282302f0dba5681d090d77590e339479089984bfe17193c8440b94a5ff301c8e17ed71f9e42ffe202bb75ed113587b0214db782b798f7c844b8fe42ce46ce27d92a28371592acfeb67a7b9e1b2cbadf3550665b7f40ef338d66e88116038007dac2de776f559821ef8e3a75e7b345341a233e84e958b081f6152d764db60301c2d64e70ce24fc75235d113115d838754a25a591b9fc013718b21812d7423a8f66fefa831bee03a8462e2443204b76791ac81c802f51b00089e6b944907a2d58ce20b56bb9a57e30505e8887e80177f73d350474634387f7ca27b39f4c891b6c2af5d9b1b0bdb63673a49371db37e934152ba7674a1503a232b96e6b0e68741cbc405c65065baf7008e9ed8720b732a6efb6cebe8388518ff9dfb6d96459c5eaebf1c49ade3c6613e0498bed1d4894b9da97ba3413776e258ae4f0609105c0544bd63f63f6791a392560d59cfd6cf64f65f6e3571465df3e336e4c7112a149a46ce9f757d4c3bb4bbbf98051089e42d8930408c37351c491f283091058b78377869a8eeb3a5d4f9dd673d68489b012303597936c2a736b901842bf989637410251840e838e6642d06b05698276b0fd77c2e80049d8689296b049ef098201ddb7f195b6183989e0c506dbbf06b6e85f52861ee0f553d7a6b2108e8dee3e1d0a32100bc3338990aee0fcbc56fa0a7ae1273e5b37b129cb0a944cb547f3bafb32922e7f614c6f245c0c82f12d7cc409abb7f79d6f053c09e062eec403979801d3c575b3a58be30e411c06f20910d141835c89c46a15fde3ae96a2f0e29e59f1a5f911a299339d999ad39343e835bf2320f80701332499b0026613941d5cbe0ed2d978be68301ac2d2053082c34f5a88d7efc57d47bfdba8e67339c9a7cbf3da2f8af7ed3cef8fb600e9578f5dc35232a418a7209a69afc63005c9255e3ec544172c3c59781814e465f9531cc782b80fa542cc6790f763cf8cb0542052309eac721dc3b7e00442278fc346d339e53d37379b908763f58b515bc39383b8b14d92a7262ae6d7f27278070e6476fc4b3d8c9395def2e4cb4b1da14a1da09493f226f1ef4656288cce5274b86ca8b185b48503c1d428cd41ed69814640eddfbf2c8d2a1c5939c13aae0c5c5dd49a559e2421bb469c02c882fafc78a147efaf324ac2aa52584e906502df0a771627197cafda12f58e23d7b81a627d406c25a74793accd8841dc05e1dadce0490083b7e1179309176b2ae511e5be90b6e8ff937adc021a667719a756e3bc738539fa877e1b2bd00e1c947ce5ce8cf66c72936e92bf0787299fa19481fa8f39b1342925a13650b6433f5386dca16a96f87d2d5d048b56be1f85b53ab6021b5043b91df751ee5a461d37ec41a9a4fc5f28f77c11f4cfb14f851928da831b2a16f74d329db5a87733243f67c7eb6772da3662f11942980d274b325dd22cd3c4096fb772764d08c1f48690fa94b0906c110ebcab859a5bfa98df6db8ffabc6be658c8dcee974bbbb980af7f076e1ea9dc936c63c1f3ee8f4c98ba773127b702a310e14ab98b050d118643c0ca7514973ee0d713a2707f136dd40563a39f68e4620d05e50461cddb269acd4a40bdf6ffa5073061465473b3b7425031b1a1942c67d211c6de64eb59e4a6c0e17a1be7efd32a90663107d2a0cc70dc585a1423da15fce00f6fcef7556eb6e5aa3b94d1c3c83a847007ca5892d98089da48797bb330841586de3bb3a91daae94cd0e9333881c89906c33aab125da2abe065593d67fd942784181ced2028b8df1a8984bd492cef5d46d597da9da92c3defb3d5ebc193e5b3432334e489f1c6da7c80dbd216f2da594a63a2ae1be959042c4ad248a2e763bb9faff3d7151e3eacac01f22e4b40857a758713223be1682129ae23f9f59596fb114de97994d604a5484a2a20f09311ececc9442c893b59f339cd3ea72ecf374c8d0293a2b2a6aed4be5ad782957590c63f74be0f1d07abfea8660d96b4c0e701ebf33b34b4413955a194da313a7a9443209a6e32c2570897ca9d5a8d441b7ed9774fe00c6585cc661f0a9d20e1990ba0cf79ff2442f68ae9041a90cc0d71869c8f57dd93550db2fd133f4d723b9f14afa8b427831fedca5128fe4f5894b13e602fbcdda99bed22bbe92485b7088a8477cc5bcf3011ae616ae1016662e0c8ecb5bb04c780545fd1bae2527dd86d594955330e181102253c2e9477d169cbe97a29713caf9aa7edc30551c335dec40408502f2ae4d251464d41d383e1064e965d877d068e2dd87a0870f950ae99a0abd10f8a408506060a9dfdf4aef2ea705000cba01dab3481ad4b877d908fb973db2ca9353e06868b915caed8c551fe6c283fbac36b5fa53fc8bd5ac1047b63ab06a151e73c688c2fb260012ba087389f477756c94bafc91f14d6860483d294df57f63707e5f37335e705a202067bb0d85c1bee6e1c786a82b194f9265d309b8049d444dc9f340acca7e09c518d23eb18af3c718c4d59ee49fcea7614ba0cffdc666aed2216ab7d46a6977cbabe8d8978392ded35e283fd4e62f6c40943d7f2a068d08e09753fa2827e9940b2236076fa983a6c4c7351909e09a761a43179d40347dd8c84988ccd686ec204876618573c68a2f48044d95e6cb6e1b736d690d11e67b9129442648f1d8a12d520011222e1deba1bb3afa3e81230b4adb9fdf494097ae0a6467fb1f87e3d725137c014f334eac9e37fce0f9380ad945803bf7bc768ad2e2a29d74dbec70f9cce889fd7eecd3655c1025ebb08a274d441336fdb382cd5d2bfb032c323582afd2d94a831e64ee69974b31ab10c667f7a627369c34a960166c6b1a55f376ab3a51041b88fe033c945480436d0895476cf76f16839b029ab73e4cf47048519c2a58a986ae87edc80f65d226fa980f94c5343024cd8202f75b47ece31ff40b7188eeaae13aea4118c3ac2f781a5871f79b998640772c8ae546494badf9d0ee406f8722646c1f89e13438f5c9c6cb80a4ff8812fa882d8539a41cfffb00fad3d3d475d7e7868b7943e3fcc1f099db85f0f668dd8aed0bee2a2ea4e13e23dab5d4d1a9bda6ee3b349dcb17565aa99a24cb5c1f1a8c8ba865a76c8102ec8f383539336cc7843c443884649ff587c968c6f8218e469d753af22473a931b9ba5a79bc06054f1cb971e8808e988105169a244ade6d19e180903fbec78cf43877ceb43bc76be0b519f632f0c5d2bd8e261c9c73bbb0e4fbf3ce144a9b6d5adf55b7b0c5b88e6b2ae40fea4eda5bc28028a44d71ed1309229a7672f06a382cc283f789eb2857eca255bcbd281b2dbbe785ff9ddcf598d94c8fa93d1c4f0062f42df00562f9ab5d510a53b2deaa0b1d6981ceb270cd629860f96b11fb1cc298adb6035dd41f1ab2563f34ea8cade2b0b4740e3e851a350b68db394c3714c883fe8d10b09d64f262548d4511ef1e52a182054c99c82f2ef6fb5f3f1a141a55b6b20a12c1a84a16d8c8da6fde00db71ef7dd97f49154b7019269c409af0f3b41898cd73adc1bc75bcb4fbce05f5d4663b88fb9a43c2478da036b45bea7b6d7e94eec4eada2f83ec7bc1f3fb096948e17de5ce62b1f1bff88f3895a4428368cc3fe999c5a1668502e34bf0c62136baef4a07088088d6b99f9ce48fa3e5507fc57145c6d0bb1e97f7bbe4d9477ecc816af5c0e2ae4a2ba79c8d95585d42540a486dcdfa907cea7b6e2835ee67263b52dae6b6d33eca2b9573439c44c18b499d2e1d4ad22d1138e3e40cef13f130504b0ac229c62b45e695b38c80e210c673c04c50e984c46be9afb44536a584259257dc4c5e909910982d6b4933d05f5d3254e429fb8f22ebb36390f7daec6f5d12d924be0e9b87b4112cdac6b6edb71eb2da84f6d6fd607d2aeea43e870efb98fbe64da5c0f008a1ecdc6aa7619e60fc434e90045d35c750bdfae501ae611b6224596e9f75f039b6f7f7e99cfe0a63f041d92d9891dbe1d1fe8fe4a434af846034186ecf049e6d5519f1bf3c80315e458aa1ab848ba22a2d6ff9ee3f3dff18ad72cc0484ba8ea9115dfb0e5ec845605cc3a608a407f41613d6a13b5ccc2b8d10b1f409f69b6046ae2e1f0bb647e6d6ab6f47abb673143ef303a9bf4307532aeaef5ceb1a0ea1e5087e6af8accd55888a7bb14dee4595e4a1215e92e26423423bbb52c914a0c55c2825ec1259853ff48c2330c98bc5248130ceeb6d8917273f95fc6908d3dedd3d1da269ed7d0faa93f58a63c6f32351cee1d021a5da58b5cd93e63ac5842c0b1aa5f27722cb082477dace7fb45e7dd2eff71f27f900dee7d897f43134e6712484417b040fd384df49d39d598a62ecfb444b38c1d5e55ac52c771467584ee25252b23aa7f7dc8a95e13348948dfc8f5d75447c4d370afa289f6b2e2fbbac25e2dabf0c49a5d8e324b70d3e6665f4871bf17faa9efb573598eb3917732808d4565faf2834d3c16235a00edbcb0a005582242de80b935474dc308951a52e6b9c28a62658cbf08e83049e78ef7a2edd5ac8fce3ad0851adb620f31bf3b213ff5387a3a4a901edba8ac385ccf93ce10ef19f90b554b46d5b3582904be75699ce6e16deb7eac8057fa1fc6ac3f550b13ebffea6cd9d991b727a4e28785f8089e21c53fb35d1bd601b4a9f3ec3b6c7b9eba93f25acd71db5906005a518157b0e28be8550cd44c676104d45f0e32f799a529b694e17471ed2b01b4178c2176d9abc0b4989cc79c68248f6766667c56a1153d067c038ff5a9d85111a56e697295ebc93de01d25e6e665dbe943f8f1e1590e424aa179dd66a454730bbf7688f5a35d8a0a508e802f5ca8384779576075cb1b5677e5fa17ae6bc49ae369a1e568e1edd70ef922dc60e226adc4e2792b0a1167d2776a2c168c91a0027de912aed09da204cff5b307db9ebb31aec86b8b2b35577550444e6cd2115e40e0babe45d2d352f98086644a490409893646455005d1381691575231b7f72c172549ce87e80603363fe2c1505b3fa7f4e19e72eaf478c67be79bc808e7abb4f2912df34a058d54731dde905ef296251c8d1ab50863638fe71d654a15bf7596902e11b5d53bad5d8b756da1f0291fb64402035c867cec19d14d7bb8e360eee54344caa663f7dd91435a9c46e2b8672cab41629d013f4b7f159050c6011dcab9e8798efb967858dd40fa97adf7ffe695f75d072704e84b44a3621b7c26ff833aa015c70797df2cd2e672760481b6f5ee1a4a52b69a18000fcfb05ba1d019277891d9afb3dbbfac2a1e3afb1d0804982f5fb43d36db2776809c21d8a1b24a685661a41399e31b83378817f51c54ed6d98d030fa33ec525802f376305b7ffeb146c69ab09532d954d016b614de4d29690d4a06cf183cd6fc348f4344f42d4c0f1a52ccc37c819788f672631da4d62998062d8fd919a573fb5afe009e1719e951b8ac148ea3ca074dc36e1e4dbbece0f5ac626ffb4302fce5398cca1e3077f070844f03ac084a8621ed36931bef529cdc890424282cea5969ebfdb8718f6dbed23dbce4a1d313818394dc68ec4d7182dcecee8357687c0d062bba0c7</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-default">      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-default">输入密码，查看文章</span>      </label>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">前两天完成了《万历十五年》的阅读，觉得有些想法应该记录下来，于是有了写这篇读后感的想法</summary>
    
    
    
    <category term="2022" scheme="http://example.com/categories/2022/"/>
    
    
    <category term="读后感" scheme="http://example.com/tags/%E8%AF%BB%E5%90%8E%E6%84%9F/"/>
    
  </entry>
  
</feed>
