CommonWL for practical use 3

作成したCWL ツール・ワークフローを実際に動かしてみた(その3)

stringtie-mergeができたものとして、次なるプロセスがmergeされたGFFから該当するFASTAファイルを作成すること。 このプロセスをやってくれるツールがgffreadである。 そこで、これを2019年CWL advent calendarの7日目でも紹介されているzatsu-cwl-generatorを使ってCWL化してみた。

まずはGTFをGFFに直すところから。

#!/bin/sh

docker run --rm ttanjo/zatsu-cwl-generator:latest \
"gffread -E my.gtf -g my_genome.fa -o my.gff3" \
> gtf2gff.cwl

手元のMacBookPro(10.14.6)では無事実行できたが、なぜかマシン(10.13.6と10.15.2)では実行できず。 仕方がないので手元で実行してサーバーにはそれをコピーして使わせてもらった。

また、--containerオプションはDocker版では動かなかったので、後から追記するやり方に(というか、オプションをDockerに引き渡すところが失敗していて、そのやり方を私が知らないというオチだと思われる)。

できたCWLファイルのoutputsのところをコメントアウトされているところを有効にして、逆にコメントされてなかったところをコメントアウトした。 そして、以下のDockerで動かすための情報(最後の3行)を書き加えた。

#!/usr/bin/env cwl-runner
# Generated from: gffread -E my.gtf -g my_genome.fasta -o my.gff3
class: CommandLineTool
cwlVersion: v1.0
baseCommand: gffread
arguments:
  - -E
  - $(inputs.E)
  - -g
  - $(inputs.g)
  - -o
  - $(inputs.o_name)
inputs:
  - id: E
    type: File
  - id: g
    type: File
  - id: o_name
    type: string
outputs:
#  - id: all-for-debugging
#    type:
#      type: array
#      items: [File, Directory]
#    outputBinding:
#      glob: "*"
  - id: o
    type: File
    outputBinding:
      glob: "$(inputs.o_name)"
hints:
  - class: DockerRequirement
    dockerPull: quay.io/biocontainers/gffread:0.11.6--h8b12597_0

そうすると以下のコマンドでちゃんと動いた。

#!/bin/sh

cwltool cwl-live-coding-2019-12-16/cwl/gtf2gff.cwl \
-E my.gtf -g fa/my_genome.fa --o_name my.gff

こちらは動いたのだが、肝心のGFFからFASTAを生成するコマンドのCWL

#!/bin/sh

docker run --rm ttanjo/zatsu-cwl-generator:latest \
"gffread -g my_genome.fasta -w exon.fa my.gff3" \
> gff2fasta.cwl

は、上述のDockerで動かすための3行を加えて

#!/bin/sh

cwltool cwl-live-coding-2019-12-16/cwl/gff2fasta.cwl \
-g fa/my_genome.fa -w out.fa --my_gff3 my.gff

としても動かなかった。 そこで、前のgtf2gff.cwlを参考に以下のように書き換えてみると

#!/usr/bin/env cwl-runner
# Generated from: gffread -g my_genome.fasta -w exon.fa my.gff3
class: CommandLineTool
cwlVersion: v1.0
baseCommand: gffread
arguments:
  - -g
  - $(inputs.g)
  - -w
  - $(inputs.w_name)
  - $(inputs.my_gff3)
inputs:
  - id: g
    type: File
  - id: my_gff3
    type: File
  - id: w_name
    type: string
outputs:
  - id: w
    type: File
    outputBinding:
      glob: "$(inputs.w_name)"
hints:
  - class: DockerRequirement
    dockerPull: quay.io/biocontainers/gffread:0.11.6--h8b12597_0

ちゃんとvalidなCWLになって、

#!/bin/sh

cwltool cwl-live-coding-2019-12-16/cwl/gff2fasta.cwl \
-g fa/my_genome.fa --w_name out.fa --my_gff3 my.gff 

としたら、バッチリ目的のFASTAファイルができた。

残るは、stringtie-mergeのCWL化!


Written by Hidemasa Bono in IT4BDA on 土 28 12月 2019.