1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SamtoolsのFILTER EXPRESSIONについて(機械翻訳)

Last updated at Posted at 2024-10-29

samtools の FILTER EXPRESSION について、日本語でサクッと見返せるように、マニュアルをChatGPTに日本語に翻訳してもらいました。原文は man samtools もしくは、上のリンクから確認できます。

FILTER EXPRESSIONS(フィルター式)

フィルター式は、SAM、BAM、CRAMレコードを随時チェックし、指定された条件に一致しないレコードを破棄するために使用します。

この言語は主にC言語スタイルに基づいていますが、ビット演算子の優先順位規則に若干の違いがあり、正規表現の一致もサポートしています。

演算子の優先順位

優先順位が高い順から低い順に並べています:

  1. グルーピング (, )
    例: (1 + 2) * 3
  2. : リテラル、変数
    数値、文字列、変数
  3. 単項演算子: +, -, !, ~
    例: -10, +10, !10(論理否定), ~5(ビット否定)
  4. 算術演算子: *, /, %
    乗算、除算、剰余(整数)
  5. 算術演算子: +, -
    加算、減算
  6. ビット単位の演算: &
    ビットAND
  7. ビット単位の演算: ^
    ビットXOR
  8. ビット単位の演算: |
    ビットOR
  9. 条件演算子: >, >=, <, <=
  10. 等価演算子: ==, !=, =~, !~
    =~!~ は正規表現の一致を確認します。
  11. 論理演算子: &&, ||
    論理AND、論理OR

演算の詳細

フィルター式の計算には浮動小数点演算が使用されるため、10 / 42.5 となり、2 ではありません。数値は10進数や16進数(0xを付与)で表現できます。浮動小数点も指数付きで表現可能です。
ただし、整数を要求する演算では暗黙的に型変換が行われます。たとえば、7.9 % 52 となり、7.9 & 4.17 & 4 と等価で 4 になります。
文字列は必ずダブルクォートで囲み、ダブルクォート自体を文字列内に含めるにはバックスラッシュを使用します(例:ab\"c\\dab"c\d)。


比較演算と未定義値の扱い

比較演算は一致した場合 1、不一致の場合 0 を返します。たとえば、(2 > 1) + (3 < 5)2 になります。未定義(null)値を含むすべての比較は偽(false)と見なされます。


変数とSAMフィールド

変数はSAM形式のフィールドを表しており、これを使ってレコードをフィルタリングします。たとえば、高いマッピング品質(mapping quality)かつ非常に大きなインサートサイズを持つペアのアラインメントを探す場合、次の式を使用します:

mapq >= 30 && (tlen >= 100000 || tlen <= -100000)

使用できる変数とそのデータ型を以下に示します:

  • endpos(int): アラインメント終了位置(1-based)
  • flag(int): FLAGフィールド全体
  • flag.paired(int): シングルビット(0 または 1)
  • flag.proper_pair(int): シングルビット(0 または 2)
  • flag.unmap(int): シングルビット(0 または 4)
  • flag.munmap(int): シングルビット(0 または 8)
  • flag.reverse(int): シングルビット(0 または 16)
  • flag.mreverse(int): シングルビット(0 または 32)
  • flag.read1(int): シングルビット(0 または 64)
  • flag.read2(int): シングルビット(0 または 128)
  • flag.secondary(int): シングルビット(0 または 256)
  • flag.qcfail(int): シングルビット(0 または 512)
  • flag.dup(int): シングルビット(0 または 1024)
  • flag.supplementary(int): シングルビット(0 または 2048)
  • hclen(int): ハードクリップされた塩基数
  • library(string): ライブラリ(RGヘッダーのLBフィールド)
  • mapq(int): マッピング品質(mapping quality)
  • mpos(int): pnext の同義語
  • mrefid(int): メイトの参照番号(0-based)
  • mrname(string): rnext の同義語
  • ncigar(int): CIGAR操作の数
  • pnext(int): メイトのアラインメント位置(1-based)
  • pos(int): アラインメント位置(1-based)
  • qlen(int): クエリ塩基数
  • qname(string): クエリ名
  • qual(string): 品質値(0-based)
  • refid(int): 参照番号(0-based)
  • rlen(int): 参照塩基数
  • rname(string): 参照名
  • rnext(string): メイトの参照名
  • sclen(int): ソフトクリップされた塩基数
  • seq(string): 配列
  • tlen(int): テンプレート長(インサートサイズ)
  • [XX](int / string): XXタグの値

補助タグの扱い

タグが存在するかの確認は単にタグ名を記述するだけで行います(例:[NM])。htslib <= 1.15 では、![NM] がタグが存在しない場合や値が0の場合のどちらでも真(true)でしたが、1.16 以降では「存在しない」場合のみ真と判断されるようになりました。


関数

文字列や数値を操作するための関数がいくつか用意されています。

  • length(x):文字列の長さ(null文字を除く)
  • min(x):文字列内の最小バイト値
  • max(x):文字列内の最大バイト値
  • avg(x):文字列内のバイト値の平均

数値専用の関数もあります:

  • sqrt(x):平方根
  • log(x):自然対数
  • pow(x, y)xy
  • exp(x):自然指数関数
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?