Commit c22082a5 authored by root's avatar root
parents 88e02973 d25841ae
......@@ -46,6 +46,7 @@
</ul>
</li>
<li><a href="#authors">AUTHORS</a></li>
<li><a href="#credits">CREDITS</a></li>
</ul>
</li>
</ul>
......@@ -296,3 +297,9 @@ produces a tabullated file with the following structure:
* corinne.rancurel@sophia.inra.fr
* bbric.contact@toulouse.inra.fr - [ <a href="https://bbric.toulouse.inra.fr">BBRIC Network</a> ]
## CREDITS ##
* O. Tange (2011): GNU Parallel - The Command-Line Power Tool, The USENIX Magazine, February 2011:42-47.
* B. Buchfink, Xie C., D. Huson, "Fast and sensitive protein alignment using DIAMOND", Nature Methods 12, 59-60 (2015).
#!/usr/bin/perl
use strict;
use Bio::SearchIO;
use Storable;
use FindBin;
MAIN:
{
my $blastfile = $ARGV[0];
my $seqlen_storable = $ARGV[1];
my %blast_flag = %{retrieve ($ARGV[2])}; ;
my $pv_cutoff = $ARGV[3];
my %seq_len = %{retrieve ($seqlen_storable)};
my $parseoutfile = "$blastfile.parse";
open (PARSEOUT,">$parseoutfile");
my $searchio = Bio::SearchIO->new(-file => $blastfile,
-format => $blast_flag{'format'}) or die("Blast parsing failed!");
while (my $result = $searchio->next_result()) {
my $queryid=$result->query_name;
my $querylen;
if (defined $seq_len{$queryid}) {
$querylen=$seq_len{$queryid};
} else {
$querylen=$result->query_length; # query length is not stored in BLAST m8 format, so querylen will be 0
}
while( my $hit = $result->next_hit ) {
next unless numeric_pvalue($hit->significance) <= $pv_cutoff;
my $subjectid=$hit->name;
my $subjectlen;
if (defined $seq_len{$subjectid}) {
$subjectlen=$seq_len{$subjectid};
} else {
$subjectlen=$hit->length; # subject length is not stored in BLAST m8 format, so querylen will be 0
}
my $pvalue=numeric_pvalue($hit->significance);
if ($blast_flag{'hsp'}) {
my $simspanid=1;
my $simspan='';
my (@percentidentity,@hsplength);
while( my $hsp = $hit->next_hsp ) {
my $querystart=$hsp->start('query');
my $queryend=$hsp->end('query');
my $subjectstart=$hsp->start('sbjct');
my $subjectend=$hsp->end('sbjct');
$percentidentity[$simspanid]=$hsp->percent_identity;
$hsplength[$simspanid]=$hsp->length('hit');
$simspan.="$simspanid:$querystart-$queryend:$subjectstart-$subjectend.";
$simspanid++;
}
my $sum_identical=0;
my $sum_length=0;
for (my $i=1;$i<$simspanid;$i++) {
$sum_identical+=$percentidentity[$i]*$hsplength[$i];
$sum_length+=$hsplength[$i];
}
my $percentIdent=int($sum_identical/$sum_length);
print PARSEOUT "$queryid;$querylen;$subjectid;$subjectlen;$pvalue;$percentIdent;$simspan\n";
} else {
print PARSEOUT "$queryid;$querylen;$subjectid;$subjectlen;$pvalue;0;NULL\n";
}
}
}
close(PARSEOUT);
}
# Make pvalue numeric, used by subroutine blast_parse
# One Arguments:
# 1. String Variable: pvalue
# Last modified: 07/19/04
sub numeric_pvalue {
my $p=$_[0];
if ($p=~/^e-(\d+)/) {return "1e-".$1;}
else {return $p}
} # numeric_pvalue
......@@ -19,6 +19,7 @@ use lib "$FindBin::RealBin";
use Getopt::Long;
use File::Basename;
use Storable;
use orthomcl_module;
......@@ -85,13 +86,13 @@ elsif ($mode == 2) {
} else {dieWithUnexpectedError("In Mode 2, FORMER RUN DIRECTORY needs to be given!");}
}
elsif ($mode == 3) {
if ((defined $usr_blast_file) && (defined $usr_gg_file)) {
if ((defined $usr_blast_file)) {
&constructDirectory($starttime);
$all_fa_file = 'N/A';
$genome_gene_file = $usr_gg_file;
read_ggfile($genome_gene_file);
my %seq_len=%{constructAllFasta($fa_files,$all_fa_file)}; #construct all.fa file
#~ $genome_gene_file = $usr_gg_file;
#~ read_ggfile($genome_gene_file);
$blast_file = $usr_blast_file;
&blast_parse($blast_file,$bpo_file,$pv_cutoff,{},\%blast_flag) unless (-e $bpo_file);
&blast_parse($blast_file,$bpo_file,$pv_cutoff,\%seq_len,\%blast_flag) unless (-e $bpo_file);
} else {dieWithUnexpectedError("In Mode 3, BLAST OUT FILE and GENOME-GENE FILE are required!");}
}
elsif ($mode == 4) {
......
......@@ -80,6 +80,8 @@ our $BLAST_FORMAT = "compact"; # "compact" corresponds t
# "full" corresponds to NCBI-BLAST's -m 0
# for WU-BLAST, make changes on subroutine executeBLASTALL
our $BLAST_NOCPU = 4; # Useful when running BLAST on multi-processor machine
$BLAST_NOCPU = $ENV{'BLAST_NOCPU'} if (defined $ENV{'BLAST_NOCPU'});
our $FORMATDB = $FindBin::RealBin . '/bin/makeblastdb';
our $MCL = $FindBin::RealBin . '/bin/mcl';
......@@ -503,59 +505,49 @@ sub blast_parse {
my %seq_len = %{$_[3]};
my %blast_flag = %{$_[4]};
open (PARSEOUT,">$parseoutfile");
write_log("\nParsing blast result!\n");
my $searchio = Bio::SearchIO->new(-file => $blastfile,
-format => $blast_flag{'format'}) or dieWithUnexpectedError("Blast parsing failed!");
store (\%seq_len, "$parseoutfile.seqlen");
store (\%blast_flag, "$parseoutfile.blast_flag");
my $split_cmd = "split -d -n l/$BLAST_NOCPU $blastfile $blastfile.split.";
system ($split_cmd);
my @a_split_files = `ls $blastfile.split.*`;
chomp @a_split_files;
#PARALELLISER:
# splitter le $blastfile en NB CPUS $BLAST_NOCPU
# ecrire un utils.pl pour faire ce filtre en ligne de commande sur chaque tranche
# merger les fichiers filtrés en ajoutant le $similarityid
my $parse_cmd_file = "$parseoutfile.cmd";
open (CMD,">$parse_cmd_file");
foreach my $splitfile ( @a_split_files )
{
print CMD "$FindBin::RealBin/orthomcl-parseblast.pl $splitfile $parseoutfile.seqlen $parseoutfile.blast_flag $pv_cutoff \n";
}
close (CMD);
system ("(cat $parseoutfile.cmd | parallel -j $BLAST_NOCPU > $parseoutfile.cmd.out ) 2> $parseoutfile.cmd.err");
my $similarityid=1;
while (my $result = $searchio->next_result()) {
my $queryid=$result->query_name;
my $querylen;
if (defined $seq_len{$queryid}) {
$querylen=$seq_len{$queryid};
} else {
$querylen=$result->query_length; # query length is not stored in BLAST m8 format, so querylen will be 0
}
while( my $hit = $result->next_hit ) {
next unless numeric_pvalue($hit->significance) <= $pv_cutoff;
my $subjectid=$hit->name;
my $subjectlen;
if (defined $seq_len{$subjectid}) {
$subjectlen=$seq_len{$subjectid};
} else {
$subjectlen=$hit->length; # subject length is not stored in BLAST m8 format, so querylen will be 0
}
my $pvalue=numeric_pvalue($hit->significance);
if ($blast_flag{'hsp'}) {
my $simspanid=1;
my $simspan='';
my (@percentidentity,@hsplength);
while( my $hsp = $hit->next_hsp ) {
my $querystart=$hsp->start('query');
my $queryend=$hsp->end('query');
my $subjectstart=$hsp->start('sbjct');
my $subjectend=$hsp->end('sbjct');
$percentidentity[$simspanid]=$hsp->percent_identity;
$hsplength[$simspanid]=$hsp->length('hit');
$simspan.="$simspanid:$querystart-$queryend:$subjectstart-$subjectend.";
$simspanid++;
}
my $sum_identical=0;
my $sum_length=0;
for (my $i=1;$i<$simspanid;$i++) {
$sum_identical+=$percentidentity[$i]*$hsplength[$i];
$sum_length+=$hsplength[$i];
}
my $percentIdent=int($sum_identical/$sum_length);
print PARSEOUT "$similarityid;$queryid;$querylen;$subjectid;$subjectlen;$pvalue;$percentIdent;$simspan\n";
} else {
print PARSEOUT "$similarityid;$queryid;$querylen;$subjectid;$subjectlen;$pvalue;0;NULL\n";
}
open (PARSEOUT,">$parseoutfile");
foreach my $splitfile ( @a_split_files )
{
open (INFILE, "$splitfile.parse");
while (my $line = <INFILE>)
{
print PARSEOUT "$similarityid;$line";
$similarityid++;
}
close (INFILE);
}
#orthomcl-parseblast.pl $splitfile $parseoutfile.seqlen $blast_flag{'format'}
write_log("Parsing blast file finished\n");
close(PARSEOUT);
} ## blast_parse
......
File added
#!/usr/bin/perl
use strict;
use FindBin;
use lib "$FindBin::RealBin/../../lib/int/";
use lib "$FindBin::RealBin/../../lib/ext/lipmutils";
use General;
use ParamParser;
use GeneralBioinfo;
use Storable;
require 'FamilyCompanion.pl';
our $WORKDIR;
MAIN:
{
my $o_param = New ParamParser('GETOPTLONG', \&Usage, 'workdir=s', 'start=i', 'size=i');
$o_param->AssertDirExists('workdir');
$o_param->AssertDefined('start','size');
$WORKDIR = $o_param->Get('workdir');
my $start = $o_param->Get('start');
my $size = $o_param->Get('size');
my $rh_homologygroups = retrieve ("$WORKDIR/rh_homologygroups");
my $rh_species = retrieve ("$WORKDIR/rh_species");
my $rh_seqidspeciescode = retrieve ("$WORKDIR/rh_seqidspeciescode");
my $rh_analysis_params = retrieve ("$WORKDIR/rh_analysis_params");
&GetPanProteomeIds($rh_homologygroups, $rh_species, $rh_analysis_params, $start,$size);
}
sub Usage
{
}
sub GetPanProteomeIds
{
my ($rh_homologygroups, $rh_species, $rh_analysis_params, $start,$size) = @_;
my $refexist;
my @a_references = ();
my @a_seqs1 = ();
my @a_allseqs1 = ();
my %h_list_group_select_seqid_code = ();
my %h_nb_repre_group_by_proteome = ();
foreach my $code (keys %{$rh_analysis_params->{'proteomes'}})
{
if ( $rh_analysis_params->{'proteomes'}->{$code}->{'reference'} eq 'true'
or $rh_analysis_params->{'proteomes'}->{$code}->{'reference'} == &TRUE)
{
push(@a_references, $code);
}
$h_nb_repre_group_by_proteome{$code} = 0;
}
#paralelliser la recherche de sequence representative
# utils.pl avec des objets storage rh_homologygroups rh_species en splitant le nombres de clés de rh_homologous et --startid=trancheX
my @a_groupids = sort (keys %{$rh_homologygroups});
my $end = $start + $size;
$end = scalar @a_groupids if ($end > scalar @a_groupids);
for (my $i = $start; $i < $end; $i ++)
{
my $groupid = $a_groupids[$i];
@a_allseqs1 = ();
foreach my $code (keys %{$rh_homologygroups->{$groupid}})
{
foreach my $seqid (@{$rh_homologygroups->{$groupid}->{$code}})
{
@a_seqs1 = ();
push(@a_seqs1, $code, $seqid);
push(@a_allseqs1, [@a_seqs1]);
}
}
$h_list_group_select_seqid_code{$groupid} = &SelectSequenceRepGroupe($rh_species, \@a_allseqs1, \@a_references);
}
store (\%h_list_group_select_seqid_code, "$WORKDIR/h_list_group_select_seqid_code.$start");
return;
}
=head3 function SelectSequenceRepGroupe
Title : SelectSequenceRepGroupe
Usage : @selec = &SelectSequenceRepGroupe($rh_species,\@a_allseqs1);
Prerequisite : none
Function : Select representative sequence [longest from cdhit 50 cluster]
Returns : array of [code,seqid]
Args : hash of species, array of array of [code,seqid]
Globals : none
=cut
sub SelectSequenceRepGroupe
{
my ($rh_species, $ra_species_seqid_list, $ra_reference) = @_;
my $selecSeqid = "";
my $selecCode = "";
my $id = 0;
my ($fh_tmp, $tmpfile) = File::Temp::tempfile(UNLINK => 1);
foreach my $ra_species_seqid (@{$ra_species_seqid_list})
{
my $species_code = $ra_species_seqid->[0];
my $seqid = $ra_species_seqid->[1];
my $sequence = $rh_species->{$species_code}->{'sequences'}->{$seqid}->{'sequence'};
print $fh_tmp <<END;
>$id $species_code|$seqid acc=$seqid sp=$species_code
$sequence
END
$id++;
}
$fh_tmp->close();
#Calcul de la matrice de distance sur alignement du groupe
my $distance_cmd = "mafft --thread 2 --auto --quiet $tmpfile | fprotdist -sequence stdin -out stdout -auto -noprogress";
&Log("CMD - $distance_cmd");
my @a_distance_lines = `$distance_cmd`;
chomp @a_distance_lines;
#Calcul de la somme par ligne de la matrice de distance (score distance globale de chaque proteine avec les autres)
foreach my $line (@a_distance_lines)
{
if ($line =~ /^\d+\s+\d\.\d+/)
{
my ($id, @a_distances) = split(/\s+/, $line);
my $score = eval join '+', @a_distances;
push(@{$ra_species_seqid_list->[$id]}, $score);
}
}
#Tri sur ce score: la proteine avec le plus petit score (1ere du tri) ou la premiere protein issue d'une proteome de reference est choisie
my @a_representative = ();
foreach my $ra_species_seqid (sort {$a->[2] <=> $b->[2]} @{$ra_species_seqid_list})
{
my $species_code = $ra_species_seqid->[0];
my $seqid = $ra_species_seqid->[1];
@a_representative = ($seqid, $species_code) if (scalar @a_representative == 0);
my $score = $ra_species_seqid->[2];
if (grep (/^$species_code$/, @{$ra_reference}))
{
@a_representative = ($seqid, $species_code);
last;
}
}
&System ("rm -f $tmpfile");
return \@a_representative;
}
......@@ -5,6 +5,7 @@ use FindBin;
use lib "$FindBin::RealBin/../../lib/int/";
use lib "$FindBin::RealBin/../../lib/ext/lipmutils";
use General;
use ParamParser;
use GeneralBioinfo;
......@@ -33,6 +34,9 @@ our $MAFFT;
our $DATE;
our $WORKDIR;
#our $ALIGNER = 'blast';
our $ALIGNER = 'diamond';
=head1 NAME
bbric_family-companion.pl - Family companion tool
......@@ -90,6 +94,7 @@ our $WORKDIR;
our @A_OUTPUT_DATA = ();
our $OUTDIR;
our $O_CONF;
our $THREADS = 4;
MAIN:
{
......@@ -112,6 +117,7 @@ MAIN:
$fh_pid->close;
&SetGlobals();
$THREADS = $O_CONF->Get('threads') if ($O_CONF->IsDefined('threads'));
my $rh_analysis_params = &ValidAnalysisFile($o_param->Get('analysis_cfg'));
&ConfigureWorkdir($rh_analysis_params);
......@@ -137,6 +143,11 @@ MAIN:
$rh_analysis_params->{'homologygroups'}->{'version'},
$rh_seqidspeciescode);
store $rh_homologygroups, "$WORKDIR/rh_homologygroups";
store $rh_species, "$WORKDIR/rh_species";
store $rh_seqidspeciescode, "$WORKDIR/rh_seqidspeciescode";
store $rh_analysis_params, "$WORKDIR/rh_analysis_params";
my ($rh_count_proteins_in_group_by_code, $rh_count_inparalogs_by_code, $rh_count_specific_inparalogs_by_code) =
&CheckProteomeCodesConsistency($rh_species, $rh_homologygroups);
my $rh_specific_proteins = &GetSpecificProteins($rh_homologygroups, $rh_species);
......@@ -177,11 +188,14 @@ MAIN:
sub RunOrthomcl
{
my $rh_analysis_params = shift;
RunBlast($rh_analysis_params);
my $cmd =
"( cd $WORKDIR; $ORTHOMCL"
. ' --mode 1 --fa_files '
"( cd $WORKDIR; export BLAST_NOCPU=$THREADS; $ORTHOMCL"
. ' --mode 3 --fa_files '
. join('.fasta,', keys %{$rh_analysis_params->{'proteomes'}})
. '.fasta ';
. '.fasta --blast_file all.blast ';
my $parameters = $rh_analysis_params->{'homologygroups'}->{'parameters'};
$cmd .= " $parameters ";
......@@ -207,6 +221,54 @@ sub RunOrthomcl
return;
}
sub RunBlast
{
my $rh_analysis_params = shift;
my $cmd =
"( cd $WORKDIR; cat "
. join('.fasta ', keys %{$rh_analysis_params->{'proteomes'}}) . '.fasta > all.fasta;'
. "$FindBin::RealBin/../ext/ncbi-blast/makeblastdb -in $WORKDIR/all.fasta -parse_seqids -dbtype prot 2>$WORKDIR/all.fasta.makeudb.log)";
if ($ALIGNER eq 'diamond')
{
$cmd =
"( cd $WORKDIR; cat "
. join('.fasta ', keys %{$rh_analysis_params->{'proteomes'}}) . '.fasta > all.fasta;'
. "$FindBin::RealBin/../ext/diamond makedb --in $WORKDIR/all.fasta --db $WORKDIR/all.fasta.diamond 2>$WORKDIR/all.fasta.diamond.log)";
}
&System($cmd);
my $parameters = $rh_analysis_params->{'homologygroups'}->{'parameters'};
my ( $evalue ) = ($parameters =~ /pv_cutoff=(\S+)/);
my $fh_cmd_blast = &GetStreamOut("$WORKDIR/cmd.blast");
foreach my $proteome (keys %{$rh_analysis_params->{'proteomes'}})
{
#~ print $fh_cmd_blast "nice $FindBin::RealBin/../ext/usearch -ublast $WORKDIR/$proteome.fasta -db $WORKDIR/all.fasta.udb -evalue 1 -blast6out $WORKDIR/all.fasta.$proteome.blast\n";
#~ print $fh_cmd_blast
my $cmd = "nice $FindBin::RealBin/../ext/ncbi-blast/blastp -query $WORKDIR/$proteome.fasta -db $WORKDIR/all.fasta -evalue $evalue -out $WORKDIR/all.fasta.$proteome.blast -outfmt '6 std' -num_threads 2 -max_target_seqs 1000";
if ($ALIGNER eq 'diamond')
{
$cmd = "nice $FindBin::RealBin/../ext/diamond blastp --sensitive --query $WORKDIR/$proteome.fasta --db $WORKDIR/all.fasta.diamond --evalue $evalue --out $WORKDIR/all.fasta.$proteome.blast --threads 2 --max-target-seqs 1000";
}
print $fh_cmd_blast "$cmd\n";
}
$fh_cmd_blast->close();
$cmd = "(cat $WORKDIR/cmd.blast | parallel -j $THREADS > $WORKDIR/cmd.blast.out ) 2> $WORKDIR/cmd.blast.err";
&System($cmd);
$cmd = "( cd $WORKDIR; cat all.fasta.*.blast > all.blast)";
&System($cmd);
return;
}
=head2 procedure RunOrthoFinder
Title : RunOrthoFinder
......
......@@ -19,8 +19,6 @@ sub CreatePanProteome
my $refexist;
my @a_references = ();
my @a_seqs1 = ();
my @a_allseqs1 = ();
my %h_list_group_select_seqid_code = ();
my %h_nb_repre_group_by_proteome = ();
......@@ -36,101 +34,44 @@ sub CreatePanProteome
$h_nb_repre_group_by_proteome{$code} = 0;
}
foreach my $groupid (keys %{$rh_homologygroups})
{
@a_allseqs1 = ();
foreach my $code (keys %{$rh_homologygroups->{$groupid}})
{
foreach my $seqid (@{$rh_homologygroups->{$groupid}->{$code}})
{
@a_seqs1 = ();
push(@a_seqs1, $code, $seqid);
push(@a_allseqs1, [@a_seqs1]);
}
}
$h_list_group_select_seqid_code{$groupid} = &SelectSequenceRepGroupe($rh_species, \@a_allseqs1, \@a_references);
}
#paralelliser la recherche de sequence representative
# utils.pl avec des objets storage rh_homologygroups rh_species en splitant le nombres de clés de rh_homologous et --start=trancheX
my @a_groupids = sort (keys %{$rh_homologygroups});
my $slice_size = int (scalar @a_groupids / $THREADS) + 1;
my $fh_select_cmd = &GetStreamOut("$WORKDIR/cmd.selectrep");
for (my $i = 0; $i < $THREADS; $i ++)
{
my $start = $i * $slice_size;
print $fh_select_cmd "nice $FindBin::RealBin/bbric_family-companion-select_representative_prot.pl --workdir $WORKDIR --start $start --size $slice_size\n";
}
$fh_select_cmd->close();
&System("(cat $WORKDIR/cmd.selectrep | parallel -j $THREADS > $WORKDIR/cmd.selectrep.out ) 2> $WORKDIR/cmd.selectrep.err");
&Log("INFO - Merge Select representative slices");
for (my $i = 0; $i < $THREADS; $i ++)
{
my $start = $i * $slice_size;
my $rh_list_group_select_seqid_code_slice = retrieve ("$WORKDIR/h_list_group_select_seqid_code.$start");
foreach my $k (keys %{$rh_list_group_select_seqid_code_slice})
{
$h_list_group_select_seqid_code{$k} = $rh_list_group_select_seqid_code_slice->{$k};
}
}
&PrintPanProteome($outdir, $rh_specific, \%h_list_group_select_seqid_code,
$rh_species, \%h_nb_repre_group_by_proteome);
return;
}
=head3 function SelectSequenceRepGroupe
Title : SelectSequenceRepGroupe
Usage : @selec = &SelectSequenceRepGroupe($rh_species,\@a_allseqs1);
Prerequisite : none
Function : Select representative sequence [longest from cdhit 50 cluster]
Returns : array of [code,seqid]
Args : hash of species, array of array of [code,seqid]
Globals : none
=cut
sub SelectSequenceRepGroupe
{
my ($rh_species, $ra_species_seqid_list, $ra_reference) = @_;
my $selecSeqid = "";
my $selecCode = "";
my $id = 0;
my ($fh_tmp, $tmpfile) = File::Temp::tempfile(UNLINK => 1);
foreach my $ra_species_seqid (@{$ra_species_seqid_list})
{
my $species_code = $ra_species_seqid->[0];
my $seqid = $ra_species_seqid->[1];
my $sequence = $rh_species->{$species_code}->{'sequences'}->{$seqid}->{'sequence'};
print $fh_tmp <<END;
>$id $species_code|$seqid acc=$seqid sp=$species_code
$sequence
END
$id++;
}
$fh_tmp->close();
#Calcul de la matrice de distance sur alignement du groupe
my $distance_cmd = "mafft --auto --quiet $tmpfile | fprotdist -sequence stdin -out stdout -auto -noprogress";
&Log("CMD - $distance_cmd");
my @a_distance_lines = `$distance_cmd`;
chomp @a_distance_lines;
#Calcul de la somme par ligne de la matrice de distance (score distance globale de chaque proteine avec les autres)
foreach my $line (@a_distance_lines)
{
if ($line =~ /^\d+\s+\d\.\d+/)
{
my ($id, @a_distances) = split(/\s+/, $line);
my $score = eval join '+', @a_distances;
push(@{$ra_species_seqid_list->[$id]}, $score);
}
}
#Tri sur ce score: la proteine avec le plus petit score (1ere du tri) ou la premiere protein issue d'une proteome de reference est choisie
my @a_representative = ();
foreach my $ra_species_seqid (sort {$a->[2] <=> $b->[2]} @{$ra_species_seqid_list})
{
my $species_code = $ra_species_seqid->[0];
my $seqid = $ra_species_seqid->[1];
@a_representative = ($seqid, $species_code) if (scalar @a_representative == 0);
my $score = $ra_species_seqid->[2];
if (grep (/^$species_code$/, @{$ra_reference}))
{
@a_representative = ($seqid, $species_code);
last;
}
}
return \@a_representative;
return;
}
=head3 function PrintPanProteome
Title : PrintPanProteome
......
......@@ -594,7 +594,7 @@ END
#C'EST TROP GROS POUR LE JS - TROP DE TERMES EN ORDONNEE
#if ($suffix ne 'proteome')
#{
&__BuildIprscanDBJSdata(\%h_count,$code, $outdir, $suffix);
# &__BuildIprscanDBJSdata(\%h_count,$code, $outdir, $suffix);
#}
return;
}
......
......@@ -10,7 +10,7 @@ portal_install_dir=/var/www/family-companion/
admin_mail=
threads=4
tmpdir=/tmp
......
......@@ -9,7 +9,7 @@ portal_http_root=/family-companion
portal_install_dir=/var/www/family-companion/
admin_mail=
threads=4
tmpdir=/tmp
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment