Mercurial > repos > mgarnier > pangenome_cog_analysis
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; |