Dockerを使用した生物情報パイプライン

この記事では、Dockerを使用して生物医学データを分析するパイプラインを開発した経験を共有したいと思います。 おそらく、ある読者は生物情報パイプライン自体に興味があり、誰かのために-Dockerを使用しているので、記事を2つの部分に分けます。



パート1.バイオインフォマティックパイプライン、または私たちが行ったこととその理由



生物のDNAシーケンスを読み取るための技術は、徐々に進化しています。 科学者は、DNAのどの部分が体にどのような影響をどのように与えるのかについて、ますます明らかにしています。 これらの作品はすべて、大きな医学的可能性を秘めています。 老化、癌、遺伝病-DNA配列分析は、それらとの戦いにおいて強力なツールとなります。 私たちは、人のDNAのいくつかのセクションのシーケンスを分析し、彼が遺伝的に決定された心臓病である心筋症を発症するかどうかを予測するパイプラインを構築しました。



なぜDNAの一部だけが取られるのですか? すべてのDNA(32億ヌクレオチドまたは「文字」)を読み取るには、さらに多くのコストがかかります。 そして、特定の人が1つまたは別の「遺伝的に決定された」病気につながる「間違い」を持っているかどうかを理解するには、いわばこれらの病気の発症に影響するセクションだけを読むだけで十分です。 そして、これははるかに安いです。



科学者はどのDNAセクションを読むべきかをどのように知るのですか? ここでの答えは、健康な人と病気の人のゲノムを比較することです。 これらのデータは非常に信頼できます。今日、世界中の千人以上の人々のゲノムが人類に知られているからです。



必要なDNAサイトの読み取り値を受け取ったら、病気が所有者を待っているかどうかを予測する必要があります。 つまり、健康な人など、これらの領域のシーケンスを理解するために、または病気の人に発生する異常があります。



そのような研究は非常に多いので、これを行う方法に関するベストプラクティスがあります。 彼らは、クリアされたデータを参照ゲノム(つまり、特定の抽象的な健康な人のゲノム)に合わせる方法、それらの間の「1文字」の違いを見つける方法を詳細に説明し、これらの違いを分析します:意図的に重要でないものを取り除き、生物医学データベースで他を検索します。 これらすべてのアクションのために、バイオインフォマティクスコミュニティは多くのプログラムを開発しました:bwa、gatk、annovarなど。 パイプラインは、目的の結果が得られるまで、目的のプログラムの出力が次に入力されるように配置されます。 優れたコース「 コンピューティング管理 」に触発されて、私たちの仕事にはパイプラインを実装する多くの方法があり、snakemakeを使用しました。



バイオパイプライン



パイプラインを使用して、1人の家族のデータを分析しました。その家族の一部は心筋症と診断されました(図では赤枠で示されています)。 医学データベースによると、この疾患を持つ人々に見られる変異(すなわち、参照ゲノムからの逸脱)が発見されました(図では青と緑で示されています)。



画像



このすべてからどのような結論を引き出すことができますか? 予想どおり、パイプライン自体を診断することはできません。 彼は、特定の人にとってリスクが大きいかどうかを医師が判断するための情報のみを提供できます。 このあいまいさは、遺伝的要因と外的要因の両方に依存して、心筋症が複雑な病気であるという事実に関連しています。 その発生の生化学的メカニズムは知られていない(これはすべて困難である)ため、どのバリエーションのセットが病気につながるかを正確に言うことは不可能です。 病気と健康に関する統計のみであるため、医師は病気の可能性を評価し、必要に応じて時間通りに治療を開始できます。



また、パイプラインの品質を評価することも試みました。 上記のように、パイプラインはバリエーションを見つけます-参照ゲノムからの調査された人のDNAシーケンスの「単一文字」偏差。 次に、彼はそれらを分析し、生物医学データベースでそれらに関する情報を検索します。 微調整を必要とする最も物議を醸すステップは、これらのバリエーションを見つけることです。 ここでは、冗長性のバランスを見つける必要があります-バリエーションが多すぎてほとんどがゴミである場合、および不十分である場合-バリエーションが厳しく選択されて必要な情報が失われる場合。 そのため、パイプラインが「正しい答え」を知っているデータの変化をパイプラインがどのように見つけるかをチェックすることに品質管理が行き着きました。 瓶の中のゲノムは、このデータとして取得されました。特定のヒトゲノムは、可能な限り正確に読み取られ、それに応じて、変動に関する信頼できるデータがあります。 品質管理の結果、85%の一致が得られましたが、これはかなり良好です。



パート2. Dockerの使用



この記事の主なアイデアを1つの文で表現すると、「パイプラインでDockerを使用してください。Dockerを使用するとはるかに便利です」のようになります。 実際、パイプラインの使用を検討している人々は通常どのような問題に直面していますか? パイプラインが使用中のコンピューター上にある場合、使用しているプログラムの環境または依存関係を誤って変更することができます。自動更新が可能です。これにより、パイプラインが以前と少し異なるか、エラーを生成し始める可能性があります。 新しいコンピューターへのパイプラインの展開にも問題がある場合があります。すべてのプログラムをインストールし、再度バージョンと依存関係を監視し、オペレーティングシステムを検討する必要があります。 Dockerを使用してもこれらの問題はすべて発生しません。また、新しいコンピューターでパイプラインを実行するために、何もインストールする必要はありません(Dockerを除く)。



Dockerの考え方は、パイプラインで使用される各プログラムが、開発者が必要な依存関係と環境を構築する隔離されたコンテナーで実行されるということです。 彼が必要とするものはすべて、対応するDockerfileに記述されています。その後、docker buildコマンドを使用して、dockerhubにアップロードできるコンテナーのイメージをビルドします。 誰か(パイプラインまたは別のユーザー)がこれらの依存関係でこのプログラムを使用したい場合、希望するイメージをdockerhubからダウンロードし、docker createコマンドを使用して必要なコンテナーをコンピューターに作成します。



ドッカー



Dockerを使用したパイプラインはgithubで利用できます。 プログラムを呼び出すたびに、パイプラインは対応するコンテナーを実行し、必要なパラメーターをそれに渡し、計算が進行中です。 実際、プログラマーのすべての作業は、コンテナーごとにDockerfileを作成することでした。 ベースイメージ(FROM)、指定されたイメージで実行するコマンド(RUN)、または追加するファイル(ADD)を示します。作業ディレクトリ(WORKDIR)を指定できます。作業ディレクトリ(WORKDIR)には、コンテナーの起動時に、計算​​に必要なデータを含むフォルダーがマウントされます。 Dockerfileに基づいて、イメージが作成されます。



$ docker build -t imagename .
      
      





そして、 dockerhub.comなどのリポジトリにロードします。



パイプラインの典型的な例をいくつか説明しましょう。 Dockerfileの詳細については、 公式Webサイトをご覧ください



リポジトリからインストールされた標準プログラム(picard-toolsなど)を実行する必要があります。 Dockerfileは次のようになります。



 FROM ubuntu:14.04 RUN apt-get update && apt-get install -y picard-tools \ && mkdir /home/source WORKDIR /root/source
      
      





 $ docker run -it --rm -v $(pwd):/root/source picard-tools picard-tools MarkDuplicates INPUT={input} OUTPUT={output[0]} METRICS_FILE={output[1]}
      
      





シェルスクリプト、annotation_parser.shを実行して、ファイルを解析する必要があります。 これを行うには、標準のUbuntu Dockerイメージを使用できます。



 $ docker run -it --rm -v $(pwd):/root/source -w="/root/source" ubuntu:16.04 /bin/sh scripts/annotation_parser.sh {input} {output}
      
      





標準リポジトリにないスクリプトを実行する必要があります。 Dockerfile:



 FROM ubuntu:16.04 RUN apt-get update && apt-get install -y perl && apt-get install -y wget \ && mkdir /root/source ADD annovar /root/annovar ENV PATH="/root/annovar:${PATH}" WORKDIR "/root/source"
      
      





 $ docker run -it --rm -v $(pwd):/root/source annovar table_annovar.pl {input} reference/humandb/ -buildver hg38 -out {params.name} -remove -protocol refGene,cytoBand,exac03,avsnp147,dbnsfp30a -operation gx,r,f,f,f -nastring . -vcfinput
      
      





Javaアプリケーションを実行する必要があります。 ここでは、 ENTRYPOINT (https://docs.docker.com/engine/reference/builder/#entrypoint)を使用します。これにより、コンテナーを実行可能ファイルとして実行できます。



 FROM ubuntu:16.04 RUN apt-get update && apt-get install -y default-jre \ && mkdir /home/source ADD GenomeAnalysisTK.jar /root/GenomeAnalysisTK.jar WORKDIR "/root/source" ENTRYPOINT ["/usr/bin/java", "-jar", "/root/GenomeAnalysisTK.jar"]
      
      





 $ docker run -it --rm -v $(pwd):/root/source gatk -R {input[0]} -T HaplotypeCaller -I {input[1]} -o {output}
      
      






All Articles