20210826

20210826

MetaSearchを実行したところ、メール配信用のスクリプトが実行されなかった。以下のエラーを確認。

Traceback (most recent call last):
  File "script/send_mail.py", line 38, in <module>
    send_mail("Your analysis finished", message, email)
  File "script/send_mail.py", line 23, in send_mail
    smtp.login(sender_name, passwd)
  File "/opt/rh/rh-python38/root/usr/lib64/python3.8/smtplib.py", line 723, in login
    (code, resp) = self.auth(
  File "/opt/rh/rh-python38/root/usr/lib64/python3.8/smtplib.py", line 635, in auth
    (code, resp) = self.docmd("AUTH", mechanism + " " + response)
  File "/opt/rh/rh-python38/root/usr/lib64/python3.8/smtplib.py", line 425, in docmd
    return self.getreply()
  File "/opt/rh/rh-python38/root/usr/lib64/python3.8/smtplib.py", line 398, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed

以下の設定を変更することで問題なくメールを送信することができるようになった。

「メール受信箱」⇒「設定・利用規約」⇒「メールの設定」⇒「IMAP/POP/SMTPアクセスとメール転送」⇒「Yahoo! JAPAN公式サービス以外からのアクセスも有効にする」⇒「IMAP」、「POP」、「SMTP」全てを有効にする。

8/10に作成したTaxanomy IDから生物種に変換するスクリプトの結果ファイルから、硬骨魚類(Teleostomi),軟骨魚類(Chondrichthyes)のみを抽出し、差集合を取ることで、各データベース固有の生物種を探索した。

/home/ito.takumi/work/mitosearch/test_data/compare/script/get_onlyNtHit.sh を実行し、硬骨魚類、軟骨魚類の抽出と生物種のダブりを排除した。

bash script/get_onlyNtHit.sh DRR205394(IDを入れる)

get_onlyNtHit.sh

ID=$1

grep "root;cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Deuterostomia;Chordata;Craniata;Vertebrata;Gnathostomata;Teleostomi" only_nt_hit/${ID}_species_mitodb.txt |uniq >> only_nt_hit/${ID}_species_mitodb_fish_uniq.txt
grep "root;cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Deuterostomia;Chordata;Craniata;Vertebrata;Gnathostomata;Chondrichthyes;" only_nt_hit/${ID}_species_mitodb.txt |uniq >> only_nt_hit/${ID}_species_mitodb_fish_uniq.txt

grep "root;cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Deuterostomia;Chordata;Craniata;Vertebrata;Gnathostomata;Teleostomi" only_nt_hit/${ID}_species_nt.txt |grep -v "root;cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Deuterostomia;Chordata;Craniata;Vertebrata;Gnathostomata;Teleostomi;Euteleostomi;Sarcopterygii;"| uniq >> only_nt_hit/${ID}_species_nt_fish_uniq.txt
grep "root;cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Deuterostomia;Chordata;Craniata;Vertebrata;Gnathostomata;Chondrichthyes;" only_nt_hit/${ID}_species_nt.txt |uniq >> only_nt_hit/${ID}_species_nt_fish_uniq.txt
  • TeleostomiだけでGrepしてしまうと、たまたま名前が一致するものも抽出してしまうので、Taxanomyのrootからgrepを行う。
  • Teleostomi以下には哺乳類なども含まれるので、これらを除去してあげる必要がある。(grep -v で哺乳類のタクソノミーを除去)

次に/home/ito.takumi/work/mitosearch/test_data/compare/script/get_onlyNtHit.py を実行し、片方のデータベースのみに存在する生物種を取得。

python script/get_\onlyNtHit.py DRR075196

get_onlyNtHit.py

import sys

def main():
    srrid = sys.argv[1]
    
    mito_f = open("only_nt_hit/" + srrid + "_species_mitodb_fish_uniq.txt")
    nt_f = open("only_nt_hit/" + srrid + "_species_nt_fish_uniq.txt")
    
    mito_rowList = mito_f.readlines()
    nt_rowList = nt_f.readlines()

    mito_rowList = set(mito_rowList)
    nt_rowList = set(nt_rowList)

    diff_onlyMitoDB = mito_rowList - nt_rowList 
    diff_onlyNt = nt_rowList - mito_rowList
    
    mito_w = open("only_nt_hit/" + srrid + "_only_mitodb.txt","w")
    nt_w = open("only_nt_hit/" + srrid + "_only_nt.txt","w")
    
    for living in diff_onlyMitoDB:
        mito_w.write(living)
    
    for living in diff_onlyNt:
        nt_w.write(living)
        
    mito_f.close()
    nt_f.close()
    mito_w.close()
    nt_w.close()
    
if __name__ == "__main__":
    main()

差分の結果は/home/ito.takumi/work/mitosearch/testdata/compare/onlynthit に、${ID}onlymitodb.txt、${ID}only_nt.txt として得られる。

ほとんどのサンプルで、MitoFishデータベースとNTデータベースでの差分は近縁種が別の生物種にヒットしたことによる差分であった。またMitoFishデータベースのヒットしているデータが一部見られた。

Inputファイルとしては、MitoFishデータベースのみを用いることに決定。

http://www.suikou.fs.a.u-tokyo.ac.jp/dokuwiki/doku.php?id=20210803 を参考にフィルタリングをかけたInputファイルを作成。

create_input_ver4.sh

#!/bin/bash

prefix=$1

#create tmp dir
mkdir -p /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}

if [ -e /suikou/files/m512/backup/r311/eDNA/${prefix}_1.fastq.gz -a -e /suikou/files/m512/backup/r311/eDNA/${prefix}_2.fastq.gz ];    then
    #ファイルをコピー(Flashが上手く行かなかった時に使うシーケンスデータ)
    cp /suikou/files/m512/backup/r311/eDNA/${prefix}_1.fastq.gz /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}

    #解凍(Flashが上手く行かなかった時に使うシーケンスデータ)
    gunzip /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/${prefix}_1.fastq.gz

    #ペアエンドのfastqのセットをシングルエンドのfastqに変換。もしエラー(リード数がペアエンド間で異なるなど)の場合は1側のリードを使う。
    flash /suikou/files/m512/backup/r311/eDNA/${prefix}_1.fastq.gz /suikou/files/m512/backup/r311/eDNA/${prefix}_2.fastq.gz -d /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix} -M 300 || mv /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/${prefix}_1.fastq /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fastq

    #fastqファイルをfastaファイルに変換。
    awk '(NR - 1) % 4 < 2' /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fastq | sed 's/@/>/' > /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fasta

    #mitoFishデータベースにBlast検索を行う。
    blastn -num_threads 8 -db /suikou/files/m208/ito.takumi/work/mitosearch/mitofish_db/complete_partial_mitogenomes.fa -query /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fasta -outfmt "6 qseqid sseqid qlen slen pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids stitle" -max_target_seqs 1 -out /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/blast.mitodb.result

    #Inputファイルのヘッダを書き込み(MitoFishデータベースとntデータベースで2つ作成。)
    echo -e "id\t${prefix}.fastq" > /suikou/files/m208/ito.takumi/work/mitosearch/create_input/inputFiles/${prefix}.mitodb.input

    #Inputファイル書き込み
    cat /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/blast.mitodb.result| awk '$3 > 100'|awk '$5 > 90'|awk '$6 / $3 > 0.9'|cut -f 16 |sort |uniq -c |sort -r -n |awk 'BEGIN{OFS="\t"} {c="";for(i=2;i<=NF;i++) c=c $i" "; print c, $1}' >> /suikou/files/m208/ito.takumi/work/mitosearch/create_input/inputFiles/${prefix}.mitodb.input

else
    if [ -e /suikou/files/m512/backup/r311/eDNA/${prefix}_1.fastq.gz ]; then

        #ファイルをコピー
        cp /suikou/files/m512/backup/r311/eDNA/${prefix}_1.fastq.gz /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}

        #解凍
        gunzip /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/${prefix}_1.fastq.gz

        #fastqファイルをfastaファイルに変換。
        awk '(NR - 1) % 4 < 2' /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/${prefix}_1.fastq | sed 's/@/>/' > /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fasta

        #mitoFishデータベースにBlast検索を行う。
        blastn -num_threads 8 -db /suikou/files/m208/ito.takumi/work/mitosearch/mitofish_db/complete_partial_mitogenomes.fa -query /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fasta -outfmt "6 qseqid sseqid qlen slen pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids stitle" -max_target_seqs 1 -out /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/blast.mitodb.result

        #Inputファイルのヘッダを書き込み(MitoFishデータベースとntデータベースで2つ作成。)
        echo -e "id\t${prefix}.fastq" > /suikou/files/m208/ito.takumi/work/mitosearch/create_input/inputFiles/${prefix}.mitodb.input

        #Inputファイル書き込み
        cat /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/blast.mitodb.result| awk '$3 > 100'|awk '$5 > 90'|awk '$6 / $3 > 0.9'|cut -f 16 |sort |uniq -c |sort -r -n |awk 'BEGIN{OFS="\t"} {c="";for(i=2;i<=NF;i++) c=c $i" "; print c, $1}' >> /suikou/files/m208/ito.takumi/work/mitosearch/create_input/inputFiles/${prefix}.mitodb.input
        
    fi

    if [ -e /suikou/files/m512/backup/r311/eDNA/${prefix}_2.fastq.gz ]; then

        #ファイルをコピー
        cp /suikou/files/m512/backup/r311/eDNA/${prefix}_2.fastq.gz /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}

        #解凍
        gunzip /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/${prefix}_2.fastq.gz

        #fastqファイルをfastaファイルに変換。
        awk '(NR - 1) % 4 < 2' /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/${prefix}_2.fastq | sed 's/@/>/' > /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fasta

        #mitoFishデータベースにBlast検索を行う。
        blastn -num_threads 8 -db /suikou/files/m208/ito.takumi/work/mitosearch/mitofish_db/complete_partial_mitogenomes.fa -query /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/out.extendedFrags.fasta -outfmt "6 qseqid sseqid qlen slen pident length mismatch gapopen qstart qend sstart send evalue bitscore staxids stitle" -max_target_seqs 1 -out /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/blast.mitodb.result

        #Inputファイルのヘッダを書き込み(MitoFishデータベースとntデータベースで2つ作成。)
        echo -e "id\t${prefix}.fastq" > /suikou/files/m208/ito.takumi/work/mitosearch/create_input/inputFiles/${prefix}.mitodb.input

        #Inputファイル書き込み
        cat /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}/blast.mitodb.result| awk '$3 > 100'|awk '$5 > 90'|awk '$6 / $3 > 0.9'|cut -f 16 |sort |uniq -c |sort -r -n |awk 'BEGIN{OFS="\t"} {c="";for(i=2;i<=NF;i++) c=c $i" "; print c, $1}' >> /suikou/files/m208/ito.takumi/work/mitosearch/create_input/inputFiles/${prefix}.mitodb.input

    fi

rm -r /suikou/files/m768b/ito.takumi/work/mitosearch/create_input/tmp/${prefix}

fi   

この段階ではまだInputファイルはタクソノミーパスではないので、これを変換する必要がある。(これは後から)

  • 20210826.1629969914.txt.gz
  • 最終更新: 2021/08/26 09:25
  • by 133.11.144.10