# CRISPRdirect自動化
[CRISPRdirect](https://crispr.dbcls.jp) には結果をテキスト形式で書き出す機能があり、`curl`や`wget`などのコマンドラインツールと組み合わせれば、ガイドRNAの設計を自動化することができる。
### コマンドラインからCRISPRdirectを使ってみる
例)マウスPzp遺伝子(NM_007376.4)の塩基配列を`NM_007376.4.fa`という名前のFASTAファイルに保存しておく。CRISPRdirectでマウスゲノムmm39を選択し、NM_007376.4を標的とするガイドRNAを設計するには、次のコマンドを実行すればよい。
なお、`@NM_007376.4.fa`のところは`@path/to/NM_007376.4.fa`のようにパスを指定できる。
```
% curl -X POST -F db=mm39 -F format=txt -F upload=@NM_007376.4.fa https://crispr.dbcls.jp/
```
読みにくいので、バックスラッシュ`\`を使い改行を入れてコマンドを実行することにする。
```
% curl -X POST \
-F db=mm39 \
-F format=txt \
-F upload=@NM_007376.4.fa \
https://crispr.dbcls.jp/
```
結果 ==**(A)**==:
```
# [ CRISPRdirect | 2023-04-14 11:37:47 ]
# sequence_name: NM_007376.4 Mus musculus PZP, alpha-2-macroglobulin like (Pzp), mRNA
# pam_sequence: NGG
# specificity_check: Mouse (Mus musculus) genome, GRCm39/mm39 (Jun, 2020)
# start end strand sequence GC Tm TTTT RE_sites hit_20mer hit_12mer hit_8mer
#
4 26 + GGATCAGAGTTCGGGGGCTGAGG 65.00 78.83 0 1 11 14844
5 27 + GATCAGAGTTCGGGGGCTGAGGG 60.00 76.96 0 1 9 9602
40 62 + TCTCTGCCCTCTCCACCATGAGG 60.00 77.23 0 1 122 76542
46 68 - CCCTCTCCACCATGAGGAGAAAC 50.00 71.73 0 1 108 11591
47 69 - CCTCTCCACCATGAGGAGAAACC 55.00 73.58 0 1 30 9285
52 74 - CCACCATGAGGAGAAACCAGCTG 55.00 73.68 0 MspA1I,PvuII 1 30 5968
55 77 - CCATGAGGAGAAACCAGCTGCCC 60.00 78.15 0 MspA1I,PvuII 1 49 7749
68 90 - CCAGCTGCCCACACCAGCTTTTC 60.00 77.65 0 MspA1I,PvuII 1 58 7374
75 97 - CCCACACCAGCTTTTCTTTTACT 35.00 66.17 0 1 39 5821
[以下略]
```
### NCBIから塩基配列を取得する
例)マウスPzp遺伝子(NM_007376.4)の塩基配列をFASTA形式で取得するには、
https://www.ncbi.nlm.nih.gov/sviewer/?report=fasta&retmode=text&val=NM_007376.4
にアクセスすればよい。これを`NM_007376.4.fa`という名前のファイルに保存するには、
```
% curl -s 'https://www.ncbi.nlm.nih.gov/sviewer/?report=fasta&retmode=text&val=NM_007376.4' > NM_007376.4.fa
```
または
```
% curl -s \
-F report=fasta \
-F retmode=text \
-F val=NM_007376.4 \
https://www.ncbi.nlm.nih.gov/sviewer/ \
> NM_007376.4.fa
```
を実行すればよい。
### 上記の2つのステップを合体
bashやzshのプロセス置換`<(command)`を使って合体させると、
```
% curl -s \
-X POST \
-F db=mm39 \
-F format=txt \
-F upload=@<( \
curl -s \
-F report=fasta \
-F retmode=text \
-F val=NM_007376.4 \
https://www.ncbi.nlm.nih.gov/sviewer/ \
) \
https://crispr.dbcls.jp/ \
> NM_007376.4.crispr.txt
```
のように実行でき、 ==**(A)**== と同じ結果をワンステップで得ることができる。
### 結果の絞り込み
オフターゲットサイトの少ない「緑のgRNA」だけを抽出するには、第9列と第10列がどちらも`1`であるものを出力すればよい。
```
% cat NM_007376.4.crispr.txt | awk -F "\t" '$9 == 1 && $10 == 1 { print }'
```
結果 ==**(A1)**==:
```
1237 1259 - CCATTTTTACTACGGATGAGCAT 35.00 65.49 0 1 1 20154
2129 2151 + GTTTCAACACTATCCGGCAATGG 45.00 69.65 0 1 1 425
2130 2152 + TTTCAACACTATCCGGCAATGGG 40.00 68.34 0 1 1 267
2133 2155 + CAACACTATCCGGCAATGGGAGG 55.00 74.31 0 1 1 3868
2210 2232 + AGCAATGGGCGTGCCGATGATGG 60.00 78.89 0 1 1 557
2211 2233 + GCAATGGGCGTGCCGATGATGGG 60.00 77.89 0 1 1 397
3193 3215 + GCAACACTCCGGGAAATACTTGG 50.00 73.03 0 1 1 5255
4391 4413 + CCTCGGTTTCTCCTTCGCGGTGG 65.00 78.04 0 1 1 184
```
### CDSの判別とexon番号の判別(1)
設計されたガイドRNAの位置がCDS上かどうか、また何番目のexonなのかを調べたい。
例)マウスPzp遺伝子(NM_007376.4)の配列情報をGenBank形式で取得すると、CDSの範囲およびexonの範囲が記載されている。
https://www.ncbi.nlm.nih.gov/sviewer/?report=genbank&retmode=text&val=NM_007376.4
```
exon 1..142
/gene="Pzp"
/gene_synonym="A1m; A2m; MAM"
/inference="alignment:Splign:2.1.0"
CDS 57..4544
/gene="Pzp"
/gene_synonym="A1m; A2m; MAM"
/note="alpha 1 macroglobulin; alpha-2-macroglobulin;
alpha-2-M; pregnancy zone protein"
/codon_start=1
[以下略]
```
このような形で範囲が記載されているので、抜き出して利用する。
まず、`curl`コマンドを用いてNM_007376.4の情報をGenBank形式で取得。
```
% curl -s \
-F report=genbank \
-F retmode=text \
-F val=NM_007376.4 \
https://www.ncbi.nlm.nih.gov/sviewer/
```
CDSおよびexonの範囲をfeature tableから抜き出しBED形式に整形。
```
% curl -s \
-F report=genbank \
-F retmode=text \
-F val=NM_007376.4 \
https://www.ncbi.nlm.nih.gov/sviewer/ \
| perl -ne '/^\s+(exon|CDS)\s+(\d+)\.\.(\d+)/ and \
print "NM_007376.4\t$2\t$3\t$1\n"'
```
結果:
```
NM_007376.4 1 142 exon
NM_007376.4 57 4544 CDS
NM_007376.4 143 326 exon
NM_007376.4 327 480 exon
NM_007376.4 481 533 exon
NM_007376.4 534 554 exon
NM_007376.4 555 723 exon
NM_007376.4 724 808 exon
NM_007376.4 809 932 exon
NM_007376.4 933 1047 exon
[以下略]
```
exonの番号を付加。これを`annotation.bed`という名前のファイルに保存しておく。
```
% curl -s \
-F report=genbank \
-F retmode=text \
-F val=NM_007376.4 \
https://www.ncbi.nlm.nih.gov/sviewer/ \
| perl -ne '/^\s+(exon|CDS)\s+(\d+)\.\.(\d+)/ and \
print "NM_007376.4\t$2\t$3\t$1\n"' \
| perl -ne 's/exon$/sprintf("exon_%03d",$count + 1)/e and \
$count ++ ; print' \
> annotation.bed
```
結果 ==**(B)**==:
```
NM_007376.4 1 142 exon_001
NM_007376.4 57 4544 CDS
NM_007376.4 143 326 exon_002
NM_007376.4 327 480 exon_003
NM_007376.4 481 533 exon_004
NM_007376.4 534 554 exon_005
NM_007376.4 555 723 exon_006
NM_007376.4 724 808 exon_007
NM_007376.4 809 932 exon_008
NM_007376.4 933 1047 exon_009
[以下略]
```
CDSとexonの情報を、別のファイルに分けて保存しておく。
CDSを含む行を`cds.bed` ==**(B1)**== 、exonを含む行を`exon.bed` ==**(B2)**== として保存した。
```
grep CDS annotation.bed > cds.bed
grep exon annotation.bed > exon.bed
```
### CDSの判別とexon番号の判別(2)
CRISPRdirectの結果 ==**(A)**== もBED形式にそろえて`crisprdirect.bed`という名前のファイルに保存しておく。
```
% curl -s \
-X POST \
-F db=mm39 \
-F format=txt \
-F upload=@<( \
curl -s \
-F report=fasta \
-F retmode=text \
-F val=NM_007376.4 \
https://www.ncbi.nlm.nih.gov/sviewer/ \
) \
https://crispr.dbcls.jp/ \
| grep -v '^#' \
| grep -v '^$' \
| sed 's/^/NM_007376.4\t/' \
> crisprdirect.bed
```
結果 ==**(A')**==:
```
NM_007376.4 4 26 + GGATCAGAGTTCGGGGGCTGAGG 65.00 78.83 0 1 11 14844
NM_007376.4 5 27 + GATCAGAGTTCGGGGGCTGAGGG 60.00 76.96 0 1 9 9602
NM_007376.4 40 62 + TCTCTGCCCTCTCCACCATGAGG 60.00 77.23 0 1 122 76542
NM_007376.4 46 68 - CCCTCTCCACCATGAGGAGAAAC 50.00 71.73 0 1 108 11591
NM_007376.4 47 69 - CCTCTCCACCATGAGGAGAAACC 55.00 73.58 0 1 30 9285
NM_007376.4 52 74 - CCACCATGAGGAGAAACCAGCTG 55.00 73.68 0 MspA1I,PvuII 1 30 5968
NM_007376.4 55 77 - CCATGAGGAGAAACCAGCTGCCC 60.00 78.15 0 MspA1I,PvuII 1 49 7749
NM_007376.4 68 90 - CCAGCTGCCCACACCAGCTTTTC 60.00 77.65 0 MspA1I,PvuII 1 58 7374
NM_007376.4 75 97 - CCCACACCAGCTTTTCTTTTACT 35.00 66.17 0 1 39 5821
NM_007376.4 76 98 - CCACACCAGCTTTTCTTTTACTG 40.00 65.60 0 1 42 7370
[以下略]
```
同様に、緑のgRNAを抽出した結果 ==**(A1)**== もBED形式にして`crisprdirect_green.bed`に保存。
```
% curl -s \
-X POST \
-F db=mm39 \
-F format=txt \
-F upload=@<( \
curl -s \
-F report=fasta \
-F retmode=text \
-F val=NM_007376.4 \
https://www.ncbi.nlm.nih.gov/sviewer/ \
) \
https://crispr.dbcls.jp/ \
| awk -F "\t" '$9 == 1 && $10 == 1 { print }' \
| sed 's/^/NM_007376.4\t/' \
> crisprdirect_green.bed
```
結果 ==**(A1')**==:
```
NM_007376.4 1237 1259 - CCATTTTTACTACGGATGAGCAT 35.00 65.49 0 1 1 20154
NM_007376.4 2129 2151 + GTTTCAACACTATCCGGCAATGG 45.00 69.65 0 1 1 425
NM_007376.4 2130 2152 + TTTCAACACTATCCGGCAATGGG 40.00 68.34 0 1 1 267
NM_007376.4 2133 2155 + CAACACTATCCGGCAATGGGAGG 55.00 74.31 0 1 1 3868
NM_007376.4 2210 2232 + AGCAATGGGCGTGCCGATGATGG 60.00 78.89 0 1 1 557
NM_007376.4 2211 2233 + GCAATGGGCGTGCCGATGATGGG 60.00 77.89 0 1 1 397
NM_007376.4 3193 3215 + GCAACACTCCGGGAAATACTTGG 50.00 73.03 0 1 1 5255
NM_007376.4 4391 4413 + CCTCGGTTTCTCCTTCGCGGTGG 65.00 78.04 0 1 1 184
```
### CDSの判別とexon番号の判別(3)
==**(A')**== と ==**(B)**== の重なりを`bedtools intersect`を用いて検出する。
```
% bedtools intersect -a crisprdirect.bed -b annotation.bed -wao
```
結果:
```
NM_007376.4 4 26 + GGATCAGAGTTCGGGGGCTGAGG 65.00 78.83 0 1 11 14844 NM_007376.4 1 142 exon_001 22
NM_007376.4 5 27 + GATCAGAGTTCGGGGGCTGAGGG 60.00 76.96 0 1 9 9602 NM_007376.4 1 142 exon_001 22
NM_007376.4 40 62 + TCTCTGCCCTCTCCACCATGAGG 60.00 77.23 0 1 122 76542 NM_007376.4 1 142 exon_001 22
NM_007376.4 40 62 + TCTCTGCCCTCTCCACCATGAGG 60.00 77.23 0 1 122 76542 NM_007376.4 57 4544 CDS 5
NM_007376.4 46 68 - CCCTCTCCACCATGAGGAGAAAC 50.00 71.73 0 1 108 11591 NM_007376.4 1 142 exon_001 22
NM_007376.4 46 68 - CCCTCTCCACCATGAGGAGAAAC 50.00 71.73 0 1 108 11591 NM_007376.4 57 4544 CDS 11
NM_007376.4 47 69 - CCTCTCCACCATGAGGAGAAACC 55.00 73.58 0 1 30 9285 NM_007376.4 1 142 exon_001 22
NM_007376.4 47 69 - CCTCTCCACCATGAGGAGAAACC 55.00 73.58 0 1 30 9285 NM_007376.4 57 4544 CDS 12
NM_007376.4 52 74 - CCACCATGAGGAGAAACCAGCTG 55.00 73.68 0 MspA1I,PvuII 1 30 5968 NM_007376.4 1 142 exon_001 22
NM_007376.4 52 74 - CCACCATGAGGAGAAACCAGCTG 55.00 73.68 0 MspA1I,PvuII 1 30 5968 NM_007376.4 57 4544 CDS 17
[以下略]
```
exonを判別している行とCDSを判別している行とが別々に出力されてしまう。これはわかりにくい。
これを回避するために、二段階に分けて`bedtools intersect`を実行してみる。
一段階目で ==**(A')**== と ==**(B2)**== の重なりを調べることによりexon番号を判別し、二段階目でさらに ==**(B1)**== との重なりを調べることによりCDSを判別する。最後に、不要な列を`cut -f`で削除。
```
% bedtools intersect -wao \
-a <(bedtools intersect -wb \
-a crisprdirect.bed \
-b exon.bed) \
-b cds.bed \
| cut -f 1-12,16,20
```
結果:
```
NM_007376.4 4 26 + GGATCAGAGTTCGGGGGCTGAGG 65.00 78.83 0 1 11 14844 exon_001 .
NM_007376.4 5 27 + GATCAGAGTTCGGGGGCTGAGGG 60.00 76.96 0 1 9 9602 exon_001 .
NM_007376.4 40 62 + TCTCTGCCCTCTCCACCATGAGG 60.00 77.23 0 1 122 76542 exon_001 CDS
NM_007376.4 46 68 - CCCTCTCCACCATGAGGAGAAAC 50.00 71.73 0 1 108 11591 exon_001 CDS
NM_007376.4 47 69 - CCTCTCCACCATGAGGAGAAACC 55.00 73.58 0 1 30 9285 exon_001 CDS
NM_007376.4 52 74 - CCACCATGAGGAGAAACCAGCTG 55.00 73.68 0 MspA1I,PvuII 1 30 5968 exon_001 CDS
NM_007376.4 55 77 - CCATGAGGAGAAACCAGCTGCCC 60.00 78.15 0 MspA1I,PvuII 1 49 7749 exon_001 CDS
NM_007376.4 68 90 - CCAGCTGCCCACACCAGCTTTTC 60.00 77.65 0 MspA1I,PvuII 1 58 7374 exon_001 CDS
NM_007376.4 75 97 - CCCACACCAGCTTTTCTTTTACT 35.00 66.17 0 1 39 5821 exon_001 CDS
NM_007376.4 76 98 - CCACACCAGCTTTTCTTTTACTG 40.00 65.60 0 1 42 7370 exon_001 CDS
[以下略]
```
CRISPRdirectの結果の右に、exon番号の列とCDS判定の列が加わった!
### 多数の遺伝子に対してガイドRNAを設計する
準備中