望洋の猫

分からなくて右往左往してる猫が同じような猫に共有するためのブログ

fastqからplinkで解析できるまでのツール全部載せin docker@windowsPC

はじめに

  • NGSの解析ってmac持ってないと話にならない感ある。

  • でもwiondowsしか持ってない人もいると思うし、dockerでできるようにした。

  • 簡単に言うと、linux環境を作ってそこにいろいろツールをぶち込んで、全部jupyter notebook*1で動くようにする。bashコマンドも入れるから、bash-python間でデータをそのまま受け渡すこともできる。

  • vscodeでも動く*2

  • 何もわからず聞く人もいなく右往左往したため、同じような人のために分からないながら書きましたという腰の低い気持ちでここに記す。


環境構築編

  1. windows版のdockerデスクトップをダウンロードする。 www.docker.com
  2. 下記のページの、「開発環境」「Dockerfile」「docker-compose.yml」「グラフの日本語化」までをすべて真似する。 www.ritolab.com
  3. Dockerfileを開き(右クリック→編集)、最後に以下のコードを付け足す。
    #ここから付け足し
    # python ライブラリのインストール
    RUN python -m pip install pandas
    RUN python -m pip install numpy
    RUN python -m pip install matplotlib
    RUN python -m pip install jupyterlab
    RUN python -m pip install notebook
    RUN python -m pip install tqdm
    RUN python -m pip install ipywidgets widgetsnbextension
    RUN python -m pip install seaborn
    RUN python -m pip install openpyxl
    RUN python -m pip install japanize_matplotlib
    RUN python -m pip install gpboost
    RUN python -m pip install patsy
    RUN python -m pip install statsmodels
    RUN python -m pip install seaborn
    
    
    #bioinfo用
    ##マンハッタンプロット書くやつ
    RUN git clone https://github.com/Pudkip/Pyhattan
    RUN python -m pip install ../Pyhattan/dist/Pyhattan-0.1-py2.py3-none-any.whl
    
    ##bashを使えるようにできるやつ
    RUN pip install bash_kernel
    RUN python -m bash_kernel.install
    
    ##QC & トリミングツール
    RUN wget http://opengene.org/fastp/fastp
    RUN chmod a+x ./fastp
    
    ##エラーコレクションツール
    RUN git clone https://github.com/emarinier/pollux.git
    RUN cd /pollux && make
    
    ##マッピング
    RUN git clone https://github.com/lh3/bwa.git
    RUN cd bwa && make
    
    ##samtools, bcftools
    RUN git clone https://github.com/samtools/htslib.git
    RUN cd /htslib && autoreconf -i && git submodule update --init --recursive && make && make install
    RUN git clone https://github.com/samtools/samtools.git
    RUN cd /samtools && autoheader && autoconf -Wno-syntax && make && make install
    RUN git clone https://github.com/samtools/bcftools.git
    RUN cd /bcftools && apt-get update && make
    
    ##忘れた
    RUN apt install \
        build-essential g++ \
        cmake \
        git-all \
        liblzma-dev \
        zlib1g-dev \
        libbz2-dev \
        liblzma-dev \
        libboost-date-time-dev \
        libboost-program-options-dev \
        libboost-system-dev \
        libboost-filesystem-dev \
        libboost-iostreams-dev \
        -y
    
    ##QCツール(マッピング後に使ってる)
    RUN git clone --recursive https://github.com/tobiasrausch/alfred.git
    RUN cd alfred/ && make all && make install
    
    ##vcftools
    RUN git clone https://github.com/vcftools/vcftools.git
    RUN cd /vcftools && ./autogen.sh && ./configure && make && make install
    
    
    #JAVAが入っていない場合?
    RUN apt-get install default-jdk -y
    
    ##VariantBam
    RUN git clone --recursive https://github.com/jwalabroad/VariantBam.git 
    RUN cd /VariantBam && ./configure && make
    

  4. 以下のツールは実物(?)を入れるほうが簡単。 製作者のHP等でダウンロードする。


最終的なフォルダ構成


使い方編

  1. powershellを開いて、Dockerfileが置いてある場所にcd
    ※hogenv内にdockerfileが置いてあって、そのなかのsrc>PJTフォルダ内にデータやnotebookを置いている。
    ※3行目でdocker内に入っている。jupyter notebook --allow-root --ip=0.0.0.0 --port 8080部分は右クリックしてペースト。
    cd C:/Users/.../hogeenv
    docker build -t bioinfotools .
    docker run --rm  -p 8080:8080  -v $PWD/src:/home/ --name bioinfoju  -it bioinfotools bash
    jupyter notebook --allow-root --ip=0.0.0.0 --port 8080

  2. 最後のjupyter notebookコマンドを入れると、ブラウザが立ち上がるまたはURLが表示される。
    URLの場合は、一番下のものをchromeなどのアドレスバーにコピペする。

  3. 出てきたファイル一覧の中に"Home"があるが、そこをクリックした先 イコール hogeenv/src となる。
    (つまり、上記のファイル構成においては、"PJT"フォルダが見えている状態)
    右上あたりにファイルを作成するボタンがあるので、そこからnotebookを作成し、1_jupyterフォルダ下などに置く。


  • pythonをベースにし*5、例えばfastqのちょっと上のほうだけ切り取ろう(?)というコード*6

  • pythonをベースにした上で、plinkやsamtoolsを動かすコマンド。
    このように"!"をつけると、上記のnotebookと同じノートで使用可*7
    ディレクトリ(どの場所にソフトが置いてあるか)に注意。


補足

上述したように、jupyter notebookは開発向きで、fastqが100個ありますというような場合はvscode等を使ってぐるぐる回すのが良い。
そのうち別記事で紹介するかも。
とはいえ、それでもだいたいは重い処理なため並列処理をする必要があるが私にはできないため、スペックの良いPCを用意し、dockerを複数立てて同時に回すという頭の悪い方法を取っている。
間違い、質問等あればコメントください。

*1:コードと処理の結果をノートのように記述できるツール。やったことのログとして非常に便利。

*2:jupyterのほうが処理は早いと感じる。なお、jupyterをvscode内で動かすこともできるが、2022/11/23現在重すぎて使い物にならない。jupyterで開発やテストを実施し、多数のファイルに同じループ処理をする場合は.pyと.shを組み合わせてvscodeに移植するのがいいと思う。

*3:ファイル操作とかQCはたしかできないが、kingという他のツール(⇐親子判定とかできる)が入っている。kingはwindowsだと動かない。結局dockerだと動くけど。

*4:jupyter notebookの場合、admixture32でないとメモリ不足で止まることがあった。

*5:上部メニュー→カーネルからpythonbashかという言語を選べる。が、!コマンドを使えるのでpythonでよい。

*6:後でもっとかっこいいコードに差し替えるかも。

*7:これすごいメリットだと思う