美文网首页NLR相关知识库
全基因组水平上NLR pair鉴定

全基因组水平上NLR pair鉴定

作者: 无言_俗人 | 来源:发表于2022-01-13 09:24 被阅读0次

    1 NLR pair定义

    NLR pair(NLR 功能对),是在染色体上有着明显“头对头”排列特征,两个基因协同调控免疫反应,其中起识别效应蛋白作用的基因称为Sensor,而起激活下游免疫反应的基因称为Helper。(注:通过生信手段鉴定到的NLR Pair不一定是具有功能的NLR pair)

    具体鉴定标准如下:

    头对头NLR标准分为以下两种:

    • 严格的头对头,即紧挨在一起的两个NLR基因,中间不存在其他非NLR基因,且一个处在正链,一个处在负链
      非严格定义的头对头,挨得很近的两个NLR基因,但中间可以有不超过两个的非NLR基因,一个正链一个负链

    2 脚本实现

    脚本实现前思维

    • 首先我们必须要有已经鉴定到的NLR基因列表 (可通过NLR-Parser3, NLRtracker等软件实现)
    • 提取gff3注释文件中第3列只含’gene‘的行,并按照染色体的位置顺序给每个基因编一个序号(eg:第一个基因编为序号1,第二个...编为2......)
    • 根据自己的NLR gene列表,从上一步中提取只含NLR gene的注释信息
    • 根据上一步所得结果,编写脚本实现获得相邻NLR基因且一个是正链,一个是负链的NLR pair

    具体实现如下:

    a.按染色体位置给基因编号

    #筛选gff文件中第三列只含gene,保留染色体,基因起始、终止位置,正负链,基因id列
    # 按在染色体的位置排序所有注释的基因并根据排列顺序给每个基因后面按排列顺序添加一个数
    awk 'BEGIN{OFS="\t";} $3 == "gene" {print $1,$4,$5,$7,$9;}' annotated_genes.gff3| sort -k1,1 -k2,3n | awk '{print $0,NR;}' > annotated_genes.ordered.csv
    

    annotated_genes.ordered.csv大致长这样:

    chr1A   24951   41873   -       TraesFLD1A01G000100     1
    chr1A   49788   50175   -       TraesFLD1A01G000200     2
    chr1A   59334   59594   -       TraesFLD1A01G000300     3
    chr1A   67857   68174   +       TraesFLD1A01G000400     4
    chr1A   101890  102186  +       TraesFLD1A01G000500     5
    

    b.获得含有代表基因位置顺序序号的NLR基因注释信息

    # 编写perl脚本get_nlr_gene_annotation_by_gff.pl根据自己的NLR 基因ID从annotated_genes.ordered.csv提取出仅含NLR基因的行
    #!/usr/bin/perl -w
         # perl $0 NLR_gene.list annotated_genes.ordered.csv annotated__NLR_genes.ordered.csv
        open IN,"$ARGV[0]" or die;
        open IN1,"$ARGV[1]" or die;
        open OU,">$ARGV[1]" or die;
        my %hash;
        while(<IN>){
        chomp;
        $hash{$_}=1}
        while(<IN1>){
        chomp;
        my @a=split/\t/,$_;
        if(exists $hash{$a[4]}){
        print OU $_,"\n" }
                            }
        close IN;
        close IN1
        close OU;
    
    #运行perl脚本从annotated_genes.ordered.csv文件中提取只含NLR基因的行
    perl get_nlr_gene_annotation_by_gff.pl  NLR_gene.list annotated_genes.ordered.csv annotated__NLR_genes.ordered.csv
    

    c. 筛选鉴定NLR pair

    perl脚本seach_NLR_pair.pl如下:

    #!/usr/bin/perl -w
    if(@ARGV != 6 ){print "usage:\nperl $0 1 2 3 4 5 6\n1:inputfile\n2:coloum of geneid -1\n3:coloum of chromo -1\n4:coloum of gene_orde -1\n5:coloum of strand -1\n6:output\n"}
    my $max_sep_genes=0;
    my %gene_orders = ();
    my %gene_strand = ();
    open IN,"$ARGV[0]" or die;
    open OU,">$ARGV[5]" or die;
    while(<IN>){
    chomp;
    next if (/^\#/ || /^\s+$/);
    my @a=split/\s+/,$_;
    my $gene_id=$a[$ARGV[1]];
    my $chrom=$a[$ARGV[2]];
    my $order=$a[$ARGV[3]];
    my $strand=$a[$ARGV[4]];
    $gene_orders{$chrom}->{$gene_id} = $order;
    $gene_strand{$chrom}->{$gene_id} = $strand;
    }
    print OU "#gene1_id\tgene2_id\tchrom\tgene1_order\tgene2_order\tgene1_strand\tgene2_strand\tseperated_numbers\torientation\n";
    for my $chrom (sort keys %gene_orders){
    my @genes_sorted=sort {$gene_orders{$chrom}->{$a} <=>
                                     $gene_orders{$chrom}->{$b}} keys %{$gene_orders{$chrom}};
     for (my $i=1; $i<=$#genes_sorted; $i++)
            {my $prev_gene_order = $gene_orders{$chrom}->{$genes_sorted[$i-1]};
             my $curr_gene_order = $gene_orders{$chrom}->{$genes_sorted[$i]};
             my $sep_genes = $curr_gene_order - $prev_gene_order - 1;
             my $prev_gene_strand = $gene_strand{$chrom}->{$genes_sorted[$i-1]};
             my $curr_gene_strand = $gene_strand{$chrom}->{$genes_sorted[$i]};
             my $orient = ($prev_gene_strand eq "-" && $curr_gene_strand eq "+") ? "pair" : "NA";
            if($sep_genes <= $max_sep_genes){
            print OU "$genes_sorted[$i-1]\t$genes_sorted[$i]\t$chrom\t$prev_gene_order\t$curr_gene_order\t$prev_gene_strand\t$curr_gene_strand\t$sep_genes\t$orient\n";
    }
    else{};
    
    }
    }
    close IN;
    close OU;
    
    #perl脚本运行
    perl search_NLR_pair.pl NLR_geneordered_csv 4 0 5 3 fielder_NLR_pair
    # 4 0 5 3分别代表着基因,染色体,序号,正负链所在列-1
    

    所得结果如下:

    #gene1_id       gene2_id        chrom   gene1_order     gene2_order     gene1_strand gene2_strand    seperated_numbers       orientation
    TraesFLD1A01G008100     TraesFLD1A01G008200     chr1A   72      73      -       +       0       pair
    TraesFLD1A01G008200     TraesFLD1A01G008400     chr1A   73      74      +       +       0       NA
    

    后续只要筛选含有pair的即可,注意此处鉴定到底是严格意义的pair,若要搜索非严格意义的则只需将seach_NLR_pair.pl脚本中的my max_sep_genes=0改成mymax_sep_genes=2即可。

    3. 参考资料

    Tetep_Genome/NLR_pair-identification.md at master · wl13/Tetep_Genome · GitHub

    相关文章

      网友评论

        本文标题:全基因组水平上NLR pair鉴定

        本文链接:https://www.haomeiwen.com/subject/cglicrtx.html