comparison pangenomeCogAnalysis_V1.pl @ 12:b36506d26a43 draft

Uploaded
author mgarnier
date Tue, 06 Jul 2021 15:51:16 +0000
parents ccb38fd085b2
children
comparison
equal deleted inserted replaced
11:9ac1a58fda89 12:b36506d26a43
91 my %specificgenes = (); # HASH -> key: gene ; val: orthogroupe (pour gènes spécifiques) 91 my %specificgenes = (); # HASH -> key: gene ; val: orthogroupe (pour gènes spécifiques)
92 my %accessorygenes = (); # HASH -> key: gene ; val: orthogroupe (pour génome accessoire) 92 my %accessorygenes = (); # HASH -> key: gene ; val: orthogroupe (pour génome accessoire)
93 93
94 my $coregene_line; 94 my $coregene_line;
95 my %coregenes2 = (); # HASH -> key1: colonne i ; key2: gène ; val: orthogroupe 95 my %coregenes2 = (); # HASH -> key1: colonne i ; key2: gène ; val: orthogroupe
96 my %specificgenes2 = (); # HASH -> key1: colonne i ; key2: gène ; val: orthogroupe
96 97
97 my %Genes_of_OG = (); # HASH -> key1: orthogroupe ; key2: colonne i ; val: gène 98 my %Genes_of_OG = (); # HASH -> key1: orthogroupe ; key2: colonne i ; val: gène
98 99
99 100
100 while(<M>) { 101 while(<M>) {
107 my $first_column = $infos[1]; # ici on récupère les gènes de la première colonne qui vont nous servir pour le core-génome 108 my $first_column = $infos[1]; # ici on récupère les gènes de la première colonne qui vont nous servir pour le core-génome
108 my $combi_prs = ""; 109 my $combi_prs = "";
109 my $combi_abs = ""; 110 my $combi_abs = "";
110 my $val; 111 my $val;
111 my $gene_random; 112 my $gene_random;
113 my $unique_col_detected;
112 114
113 115
114 for (my $i=1; $i <= $#infos; $i++){ # on travaille par ligne puis dans chaque ligne (while(<M>)), cellule par cellule (cette boucle for) 116 for (my $i=1; $i <= $#infos; $i++){ # on travaille par ligne puis dans chaque ligne (while(<M>)), cellule par cellule (cette boucle for)
115 117
116 $val = $infos[$i]; # on récupère l'information contenue dans la case $i 118 $val = $infos[$i]; # on récupère l'information contenue dans la case $i
117 119
118 if ($val =~/\w/){ # s'il cette cellule contient qq chose... 120 if ($val =~/\w/){ # s'il cette cellule contient qq chose...
119 $combi_prs .= "_".$i; # ...on va concaténer notre chaine $combi_prs pour que cela forme une combinaison 121 $combi_prs .= "_".$i; # ...on va concaténer notre chaine $combi_prs pour que cela forme une combinaison
120 $nb_found++; # on incrémente le compteur qui permet de savoir cb de fois notre orthogroupe est présent (le but sera de l'utiliser quand nb_found == 9) 122 $nb_found++; # on incrémente le compteur qui permet de savoir cb de fois notre orthogroupe est présent (le but sera de l'utiliser quand nb_found == 9)
121 $gene_random=$val; # on récupère la valeur de la case (les gènes) 123 $gene_random=$val; # on récupère la valeur de la case (les gènes)
124 $unique_col_detected = $i;
122 125
123 my @table_genes = split (',', $val); 126 my @table_genes = split (',', $val);
124 my $premier_gene = $table_genes[0]; 127 my $premier_gene = $table_genes[0];
125 $Genes_of_OG{$i}{$orthogroup} = $premier_gene; # pour chaque orthorgoupe de chaque colonne, on récupère le premier gène 128 $Genes_of_OG{$i}{$orthogroup} = $premier_gene; # pour chaque orthorgoupe de chaque colonne, on récupère le premier gène
126 } 129 }
143 for (my $i=1; $i <= $#infos; $i++){ 146 for (my $i=1; $i <= $#infos; $i++){
144 my @list_of_genes = split (',', $infos[$i]); # ici va séparer tous les gènes (qui se présentent comme une liste, séparés par des ',') 147 my @list_of_genes = split (',', $infos[$i]); # ici va séparer tous les gènes (qui se présentent comme une liste, séparés par des ',')
145 my $first_gene = $list_of_genes[0]; # prend la valeur du premier gène uniquement ! 148 my $first_gene = $list_of_genes[0]; # prend la valeur du premier gène uniquement !
146 $coregenes{$first_gene}= $orthogroup; # on va récupérer ce premier gène qu'on met dans un hash (pour y avoir accès facilement, d'où val = 1, ici ça n'a pas d'importance) 149 $coregenes{$first_gene}= $orthogroup; # on va récupérer ce premier gène qu'on met dans un hash (pour y avoir accès facilement, d'où val = 1, ici ça n'a pas d'importance)
147 $coregenes2{$i}{$first_gene}= $orthogroup; 150 $coregenes2{$i}{$first_gene}= $orthogroup;
148 151
149
150
151
152 } 152 }
153 if (!$coregene_line){ 153 if (!$coregene_line){
154 $coregene_line = $line; 154 $coregene_line = $line;
155 } 155 }
156 } 156 }
157 elsif ($nb_found == 1) { # si on a un gène spé 157 elsif ($nb_found == 1) { # si on a un gène spé
158
159 # print "$gene_random\n";
160 # print "$line\n";
161 # print "$unique_col_detected\n";
162
163
164
158 my @list_of_genes = split (',', $gene_random); # idem, on ne veut qu'un seul gène donc on crée la liste 165 my @list_of_genes = split (',', $gene_random); # idem, on ne veut qu'un seul gène donc on crée la liste
159 my $first_gene = $list_of_genes[0]; # on ne prend que le premier 166 my $first_gene = $list_of_genes[0]; # on ne prend que le premier
167 # print "$first_gene\n";
168 # exit;
160 $specificgenes{$first_gene}= $orthogroup; # et pareil on crée la table de hash 169 $specificgenes{$first_gene}= $orthogroup; # et pareil on crée la table de hash
170 $specificgenes2{$unique_col_detected}{$first_gene}= $orthogroup;
161 } 171 }
162 172
163 else { # là c'est le génome accessoire, i.e tout le reste ! 173 else { # là c'est le génome accessoire, i.e tout le reste !
164 my @list_of_genes = split (',', $gene_random); 174 my @list_of_genes = split (',', $gene_random);
165 my $first_gene = $list_of_genes[0]; 175 my $first_gene = $list_of_genes[0];
187 } 197 }
188 # print "$result_grep\n"; 198 # print "$result_grep\n";
189 } 199 }
190 } 200 }
191 # exit; 201 # exit;
192 # foreach my $i (sort keys (%coregenes2)){ # parcours de la table %hCount2 au niveau des catégories 202 # foreach my $i (sort keys (%specificgenes2)){ # parcours de la table %hCount2 au niveau des catégories
193 # foreach my $gene (keys %{$coregenes2{$i} }){ # parcours de la table %hCount2 au niveau des espèces 203 # foreach my $gene (keys %{$specificgenes2{$i} }){ # parcours de la table %hCount2 au niveau des espèces
194 # print "$i\t$gene\t".$coregenes2{$i}{$gene}."\n"; 204 # print "$i\t$gene\t".$specificgenes2{$i}{$gene}."\n";
195 # } 205 # }
196 # } 206 # }
197 207 # exit;
198 # while (my ($k,$v) = each(%strain_specie)) { 208 # while (my ($k,$v) = each(%strain_specie)) {
199 # print "i=$k strain=$v\n"; 209 # print "i=$k strain=$v\n";
200 # } 210 # }
201 # exit; 211 # exit;
202 # foreach my $oups (keys (%coregenes)) { 212 # foreach my $oups (keys (%coregenes)) {
476 my ($g,$o); 486 my ($g,$o);
477 487
478 my %hgff_order = (); #HASH -> key: un fichier GFF ; val: un nom de souche (ces 2 données sont entrées en input = $annotation_GFF et $order_GFF) 488 my %hgff_order = (); #HASH -> key: un fichier GFF ; val: un nom de souche (ces 2 données sont entrées en input = $annotation_GFF et $order_GFF)
479 my %Gene_position = (); 489 my %Gene_position = ();
480 my %Cat_genes = (); 490 my %Cat_genes = ();
491 my %Cat_genes2 = ();
481 492
482 my %hash_of_genes = (); 493 my %hash_of_genes = ();
483 494
484 495
485 foreach $g (@list_gff){ 496 foreach $g (@list_gff){
493 my $end = $table_gff[4]; 504 my $end = $table_gff[4];
494 my $gene_name = $table_gff[8]; 505 my $gene_name = $table_gff[8];
495 my $type = $table_gff[2]; 506 my $type = $table_gff[2];
496 507
497 508
498 509 #or $type eq "CDS"
499 if ($type && ($type eq "mRNA" or $type eq "CDS") && $gene_name =~ /ID=([^;]+);/){ 510 if ($type && $type eq "mRNA" && $gene_name =~ /ID=([^;]+);/){
500 my $gene = $1; 511 my $gene = $1;
501 # print $gene."\n"; 512 # print $gene."\n";
502 # exit; 513 # exit;
503 $hash_of_genes{$gene}=1; 514 $hash_of_genes{$gene}=1;
504 515
505 foreach my $cog (keys (%hCore_Cat)){ 516 foreach my $cog (keys (%hCore_Cat)){
506 if ($hCore_Cat{$cog} eq $gene){ 517 if ($hCore_Cat{$cog} eq $gene){
507 $Cat_genes{$gene}=$cog; 518 $Cat_genes{$gene}=$cog;
508 } 519 }
509 } 520 }
510 521 foreach my $cog_bis (keys (%hSpecific_Cat)){
522 if ($hSpecific_Cat{$cog_bis} eq $gene){
523 $Cat_genes2{$gene}=$cog_bis;
524 }
525 }
526
511 $Gene_position{$gene}="$chr\t$start\t$end"; 527 $Gene_position{$gene}="$chr\t$start\t$end";
512 } 528 }
513 529
514 # foreach my $gene (keys (%hash_of_genes)){ 530 # foreach my $gene (keys (%hash_of_genes)){
515 # my $orthogrp = $hGene_OG{$gene}; 531 # my $orthogrp = $hGene_OG{$gene};
559 } 575 }
560 576
561 close (OUT5); 577 close (OUT5);
562 } 578 }
563 579
580 mkdir("StrainSpecific");
581 foreach my $i (keys (%specificgenes2)){
582
583 if (!$hCol_Annotated{$i}) { # si le fichier GFF n'existe pas
584 next;
585 }
586
587
588 my $strain_name = $hCol_Annotated{$i};
589
590 my $specie_name = $hSpecies{$strain_name};
591
592
593
594 open (OUT7, "> StrainSpecific/$strain_name.$specie_name.txt") or die "Cannot create file $!\n";
595 print OUT7 "Orthogroup\tGene\tChromosome\tStart\tEnd\tCOG categories\tNumber assigned\n";
596
597 my $refspecificgenes2 = $specificgenes2{$i};
598 my %subhash = %$refspecificgenes2;
599 foreach my $gene (keys (%subhash)){
600 # print "$gene\n"; exit;
601 my $cat = "unknown";
602 if ($Cog_of_gene{$gene}){
603 $cat = $Cog_of_gene{$gene};
604 }
605 # if (!$Gene_position{$gene}){
606 # print "$gene\n coucou"; exit;
607 # }
608
609 # if (!$subhash{$gene}){
610 # print "$gene\n";
611 # }
612 print OUT7 $subhash{$gene}."\t"."$gene\t".$Gene_position{$gene}."\t".$cat."\t".$Hash_Convert{$cat}."\n";
613
614 }
615
616 close (OUT7);
617 }
618
564 619
565 mkdir("GroupSpecific"); 620 mkdir("GroupSpecific");
566 foreach my $i (keys (%Genes_of_OG)){ 621 foreach my $i (keys (%Genes_of_OG)){
567 if (!$hCol_Annotated{$i}) { # si le fichier GFF n'existe pas 622 if (!$hCol_Annotated{$i}) { # si le fichier GFF n'existe pas
568 next; 623 next;