生成netMHCpan輸入文件

不能直接輸入vcf真的很煩啊,氨基酸序列fasta太長了還會直接Segmentation Fault

過濾獲得PASS的vcf

我只用了gatk里的af-onl-gnomAD文件過濾應(yīng)該還可以annovar基于篩選的注釋,然后用vcftools之類的東西篩選一下

vcftools --gzvcf /path/to/sample.filter.vcf.gz --remove-filtered-all --recode --stdout | gzip -c > /path/to/sample_PASS_only.vcf.gz

(應(yīng)該還可以annovar基于篩選的注釋再篩選一下,但是那樣就需要把annovar生成的vcf用convert2annovar.pl轉(zhuǎn)換成avinput格式再用annotate_variation.pl進行refGene注釋再coding_change.pl轉(zhuǎn)換成氨基酸序列触菜,配對vcf包含正常組織和腫瘤組織至少2個樣本,convert2annovar.pl會讓選擇全都轉(zhuǎn)換成分開的文件還是只轉(zhuǎn)換第1個杭隙,腫瘤是第2個及以后的放妈,所以如果這樣的話可能需要刪掉正常樣本那一列?)

cat input.vcf |awk -v OFS='\t' '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$11}' > output.vcf

annovar轉(zhuǎn)換成氨基酸fasta

annovartable_annovar.pl注釋的時候不要選--remove湿右,就可以保留中間文件sample.exonic_variant_function

coding_change.pl --includesnp --onlyAltering path/to/sample.exonic_variant_function /path/to/annovar/humandb/hg38_refGene.txt /path/to/annovar/humandb/hg38_refGeneMrna.fa --outfile /path/to/outdir/sample.fasta

轉(zhuǎn)換fasta序列

修改序列ID格式

sed -i 's/>line.*NM_/>NM_/g' /path/to/outdir/*fasta
sed -i 's/ /;/g' /path/to/outdir/*fasta

去掉不需要的序列诅妹,此處參考NeoPredPipe腳本vcf_manipulate.py,不直接用這個軟件是因為報錯太多不想處理了-_- |||

#!/usr/bin/env python
import os
from Bio import SeqIO
# 指定需要處理的文件夾路徑
folder_path = '/path/to/outdir/fastaFiles_1/'
id_list = ['WILDTYPE', 'immediate-stopgain', 'stop-loss']
# 遍歷文件夾中的所有 fasta 文件
for file_name in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file_name)
        # 打開文件并讀取所有序列
        records = list(SeqIO.parse(file_path, 'fasta'))
        # 遍歷每個序列毅人,如果 ID 不包含上述關(guān)鍵詞吭狡,將其保留到新列表中
        filtered_records = []
        for record in records:
                if not any(keyword in record.id for keyword in id_list):
                        filtered_records.append(record)
        # 將篩選后的序列寫回文件
        if len(filtered_records) > 0:  # 如果有篩選結(jié)果才更新文件
                with open(file_path, 'w') as f:
                        SeqIO.write(filtered_records, f, 'fasta')

節(jié)選突變附近的序列,此處參考NeoPredPipe腳本NeoPredPipe.py

#!/usr/bin/env python
import sys
import os
import subprocess
from Bio import SeqIO

folder_path = '/public/home/xieruoqi/data/1.CR/neoantigen/fastaFiles_1/'

def ExtractSeq(record, pos, n, frameshift=False):
    '''
    Extracts the proper range of amino acids from the sequence and the epitope length
    :param seq: Sequence of mutated amino acid sequence.
    :param pos: Location of altered amino acid.
    :param n: Length of epitope for predictions.
    :return: Returns an amino acid sequence of appropriate lengths.
    '''
seq = str(record.seq)
    if pos<n: # Cases where start is less than n
        miniseq = seq[0:pos+(n)]
    elif len(seq)-pos < n: # Cases where end is less than n
        miniseq = seq[pos - (n - 1):len(seq)]
    else:
        miniseq = seq[pos-(n-1):pos+(n)]

    if frameshift:
        if pos<n:
            miniseq = seq[0:len(seq)] # When start is not n away from pos, we go until the end of the sequence
        else:
            miniseq = seq[pos-(n-1):len(seq)] # All other cases, we still go until the end of the sequence

    return(miniseq)

epitopeLens = [8,9,10,11]
for file_name in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file_name)
        eps = {n: 0 for n in epitopeLens}
        epsIndels = {n: 0 for n in epitopeLens}
        for n in epitopeLens:
                mySeqs = []
                mySeqsIndels = []
                for record in SeqIO.parse(file_path, 'fasta'):
                        if 'silent' not in record.id.lower() and 'startloss' not in record.id.lower():
                                try:
                                        pos = int(record.id.replace(";;",";").split(";")[5].split('-')[0])-1
                                except ValueError:
                                        try:
                                                pos = int(record.id.replace(";;",";").split(";")[6].split('-')[0])-1
                                        except IndexError:
                                                sys.exit("ERROR: Could not process fasta line in reformatted fasta: %s" % (record.id))
                                if 'dup' in record.id.lower() or 'del' in record.id.lower() or 'ins' in record.id.lower() or 'fs' in record.id:
                                        miniseq = ExtractSeq(record, pos, n, True)
                                        mySeqsIndels.append(">"+record.id[0:100]+"\n"+miniseq+"\n")
                                else:
                                        miniseq = ExtractSeq(record, pos, n)
                                        mySeqs.append(">"+record.id+"\n"+miniseq+"\n")
                eps[n] = mySeqs
                epsIndels[n] = mySeqsIndels
        tmpFiles = {}
        for n in epitopeLens:
                tmpFasta = file_path.replace(".fasta",".tmp.%s.fasta"%(n))
                tmpFastaIndels = file_path.replace(".fasta",".tmp.%s.Indels.fasta"%(n))
                tmpFiles.update({n:tmpFasta})
                tmpFiles.update({str(n)+'.Indels':tmpFastaIndels})
                with open(tmpFasta, 'w') as outFile:
                        for line in eps[n]:
                                outFile.write(line)
                with open(tmpFastaIndels, 'w') as outFile:
                        for line in epsIndels[n]:
                                outFile.write(line)

HLA分型提取及格式轉(zhuǎn)換

先提取可能包含6號染色體HLA區(qū)域reads丈莺,不要用腫瘤樣本划煮,用正常組織樣本
然后選一個HLA分型預(yù)測軟件,這里用的是OptiType
大多數(shù)軟件都要求輸入fq

samtools view -hb /path/to/sample_blood.final.bam \
                chr6:28510120-33480577 \
                chr6_GL000250v2_alt:1066038-4433734 \
                chr6_GL000251v2_alt:1283988-4540572 \
                chr6_GL000252v2_alt:1063230-4372611 \
                chr6_GL000253v2_alt:1062914-4548533 \
                chr6_GL000254v2_alt:1062887-4416229 \
                chr6_GL000255v2_alt:1063190-4323464 \
                chr6_GL000256v2_alt:1106450-4577757 \
                > /path/to/sample_blood.chr6.bam && \
        samtools view -hb -@ 8 -f 12 /path/to/sample_blood.final.bam \
                > /path/to/sample_blood.unmapped.bam && \
        samtools merge /path/to/sample_blood.merge.bam /path/to/sample_blood.chr6.bam /path/to/sample_blood.unmapped.bam && \
        samtools sort -n /path/to/sample_blood.merge.bam -@ 8 -o /path/to/sample_blood.hla.bam && \
        samtools fastq -@ 8 /path/to/sample_blood.hla.bam \
                -1 /path/to/sample_blood.hla.1.fq \
                -2 /path/to/sample_blood.hla.2.fq \
                -s /dev/null && \
        rm /path/to/sample_blood.chr6.bam /path/to/sample_blood.unmapped.bam /path/to/sample_blood.merge.bam && \
        OptiTypePipeline.py -i /path/to/sample_blood.hla.1.fq /path/to/sample_blood.hla.2.fq --dna -v -o /path/to/sample

然后把輸出的tsv文件轉(zhuǎn)換為netMHCpan需要的格式

cat /path/to/sample/*/*.tsv |awk -v OFS=',' 'NR==2 {print $2,$3,$4,$5,$6,$7}' > /path/to/sample/sample.HLA.txt && \
        sed -i "s/,/,HLA-/g" /path/to/sample/sample.HLA.txt && \
        sed -i "s/*//g" /path/to/sample/sample.HLA.txt && \
        sed -i "s/^/HLA-/g" /path/to/sample/sample.HLA.txt

然后就可以順利運行netMHCpan啦缔俄,不過我還是不太理解為什么netMHCpan預(yù)測的Affinity對不上BindLevel

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弛秋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子俐载,更是在濱河造成了極大的恐慌蟹略,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遏佣,死亡現(xiàn)場離奇詭異挖炬,居然都是意外死亡,警方通過查閱死者的電腦和手機状婶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門意敛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馅巷,“玉大人,你說我怎么就攤上這事草姻〉鲡” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵碴倾,是天一觀的道長逗噩。 經(jīng)常有香客問我,道長跌榔,這世上最難降的妖魔是什么异雁? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮僧须,結(jié)果婚禮上纲刀,老公的妹妹穿的比我還像新娘。我一直安慰自己担平,他們只是感情好示绊,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暂论,像睡著了一般面褐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上取胎,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天展哭,我揣著相機與錄音,去河邊找鬼闻蛀。 笑死匪傍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的觉痛。 我是一名探鬼主播役衡,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薪棒!你這毒婦竟也來了手蝎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盗尸,失蹤者是張志新(化名)和其女友劉穎柑船,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泼各,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡鞍时,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逆巍。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡及塘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锐极,到底是詐尸還是另有隱情笙僚,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布灵再,位于F島的核電站肋层,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏翎迁。R本人自食惡果不足惜栋猖,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汪榔。 院中可真熱鬧蒲拉,春花似錦、人聲如沸痴腌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽士聪。三九已至锦援,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剥悟,已是汗流浹背雨涛。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留懦胞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓凉泄,卻偏偏與公主長得像躏尉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子后众,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一胀糜、簡介 會得到一系列變異數(shù)據(jù),這些變異數(shù)據(jù)只是告訴我們在基因組的某個位置發(fā)生了一段序列的改變蒂誉,至于這個改變會不會...
    生信師姐閱讀 16,840評論 1 38
  • 結(jié)果文件的解讀 輸出文件1:*.variant_function 第一個文件包含所有變異的注釋教藻,方法是在每個輸入行...
    生信師姐閱讀 18,808評論 2 41
  • 一 結(jié)果文件說明 1 VCF (Variant Call Format)是儲存Variation結(jié)果的文件格式 ...
    九月_1012閱讀 27,703評論 4 35
  • annovar是一款常用的注釋軟件,可在其官網(wǎng)注冊后下載右锨。annovar無需安裝括堤,下載后解壓即可直接使用。anno...
    井底蛙蛙呱呱呱閱讀 14,552評論 1 15
  • 上次我們整理到bwa比對后得到bam文件,下一步我們要通過GATK流程從bam文件中call variant悄窃。 一...
    耕讀者閱讀 2,003評論 0 4