#!/igs/local/bin/perl #Perl Wrapper for the html version of T-Coffee #Environement variables $USER_BIN="$HOME/bin/"; #MAIN VARIABLES: use Env qw(HOME); if ( $HOME eq ""){$HOME=`pwd`;chop ($HOME);$HOME=~s/public_html.*//;} $USER_BIN="$HOME/bin/"; $WWW_HOME="http://igs-server.cnrs-mrs.fr/~cnotred/"; $WWW_FILE_HOME="$HOME/public_html/"; $USER_BIN="$HOME/bin/"; $html_page="/t_coffee.html"; $programme="t_coffee"; $SCRATCH_AREA="$WWW_FILE_HOME/tmp/"; $CALLING_PAGE ="$WWW_HOME/$html_page"; #Set the programme so that it uses the right bin #[CUSTOMIZE HERE FOR YOUR ARCHITECTURE] $machine=`/bin/uname -s`; chop ($machine); $ENV{MAC}=$machine; use Env qw(MAC); if ($MAC eq "IRIX64" || $MAC eq "SGI64" || $MAC eq "SGI" || $MAC eq "IRIX") {$ENV{OS}="Irix";} elsif ($MAC eq "SunOS" || $MAC eq "SUN") {$ENV{OS}="Sun";} elsif ($MAC eq "Linux") {$ENV{OS}="Linux";} else { &output_error_page ( "The machine $MAC on which this program should run is unknown[FATAL]\n"); } use Env qw(OS); #Define the Programs and various addresses [CUSTOMIZE HERE] #Your binaries $ENV{USER_BIN}="$HOME/bin/$OS/";#Your binaries $ENV{ALN_TAB}="$USER_BIN"; use Env qw(USER_BIN); use Env qw(PATH); $ENV{PATH}=".:/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11:$USER_BIN"; #The Binary Paths $programme="$programme"; #check the required programs are installed $t_coffee_exec=`which t_coffee`; chop($t_coffee_exec); if ( !(-e $t_coffee_exec)) { &output_error_page ( "$programme is not Installed home=[$HOME] [$t_coffee_exec] Path=[$PATH][FATAL]\n", $CALLING_PAGE); die; } if ($ENV{'REQUEST_METHOD'} eq "GET") { $request=$ENV {'QUERRY_STRING'}; @parameter_list=split(/&/,$request); foreach (@parameter_list) { ($name, $value)=split (/=/); if (!$arg{$name}{number}) {$arg{$name}{number}=0;} $arg{$name}{$arg{$name}{number}}=$value; $arg{$name}{number}++; } $request=$ENV{'QUERRY_STRING'}; } elsif ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $request, $ENV{'CONTENT_LENGTH'}) || output_error_page( "Could not read querry\n", $CALLING_PAGE); @parameter_list=split (/-{2,}\d+.*\n/, $request); foreach $val (@parameter_list) { $val=~s/(Content.*)\n.*\n//g; $param_line=$1; if ($param_line=~/filename/) { $param_line=~/.*name="(.*)"; filename="(.*)".*/; $param_name="$1"; if ($2 ne "" && $2 ne "no_value") { if (($file=&make_random_file($val)) ne "no_file") { $arg{$param_name}{$arg{$param_name}{number}++}=$file; if ( $param_name eq "-in"){$sequence_in=1;} } } } else { $param_line=~/.*name="(.*)".*/; $param_name="$1"; if ($param_name eq "data") { if (($file=&make_random_file($val)) ne "no_file") { $arg{"-in"}{$arg{"-in"}{number}++}=$file; $sequence_in=1; } } elsif ($param_name=~/\B-[^-]*/) { $val=~s/\s//g; if ( !$arg{flag}{$param_name}){$arg{flag}{$param_name}=1;$flag_list[$nflags++]=$param_name;} if ( $val ne "" && $val ne "no_value") { $arg{$param_name}{$arg{$param_name}{number}++}=$val; } } else { $val=~s/\s//g; $arg{$param_name}{0}=$val; } } } } #1 CHECK FOR COMPULSORY PARAMETERS if ( $sequence_in!=1) { &output_error_page ( "You did not provide any Data", $CALLING_PAGE); die; } if ( !$arg{'e-mail'}{0}) { &output_error_page ( "You did not provide your Email", $CALLING_PAGE); die; } #2 Set The Run Name $flag_list[$nflags++]="-run_name"; $arg{-run_name}{number}=1; $arg{-run_name}{0}=&make_random_file_name; $run_name=$arg{-run_name}{0}; #2 PROCESS THE PARAMETER LIST $command="#!\/bin\/sh\/n"; $command=$command."source $HOME/.cshrc\n"; $command=$command.$programme; foreach $flag (@flag_list) { $command="$command $flag="; for ( $a=0; $a<$arg{$flag}{number};$a++) {$command="$command $arg{$flag}{$a}";} } #3 list of the output files $output_file{++$n_output_file}{name}="$run_name"."_result.html"; $output_file{ $n_output_file}{description}="Results"; $output_file{ $n_output_file}{format}="html"; $output_file{++$n_output_file}{name}="$run_name.tc_log"; $output_file{ $n_output_file}{description}="log of t_coffee"; $output_file{ $n_output_file}{format}="ascii"; for ( $a=0; $a< $arg{'-output'}{number}; $a++) { if ($arg{'-output'}{$a} eq "clustalw"){$extention="aln";} else {$extention=$arg{'-output'}{$a}}; $output_file{++$n_output_file}{name}="$run_name.$extention"; $output_file{ $n_output_file}{description}="Multiple Alignment"; $output_file{ $n_output_file}{format}="$extention"; } $output_file{++$n_output_file}{name}="$run_name.dnd"; $output_file{ $n_output_file}{description}="Dendrogram used for Progressive Alignment"; $output_file{ $n_output_file}{format}="Phyllip"; $output_file{n_output_file}=$n_output_file; $output_file{command}=$command; &submit ("$command -out_lib=no -quiet stderr >$run_name.tc_log 2>$run_name.tc_log" ); %output_file=&make_output (%output_file); #Make the Output print "Content-type: text/html\n\n"; print "
The computation is now finished. Click [HERE]to see the results<\/h4><\/td><\/tr><\/table><\/body><\/html>";
#Clean
for ( $a=0; $a<$n_tmp_files; $a++ )
{
unlink ($tmp_files[$a]);
}
sub submit
{
my $command=@_[0];
system $command;
}
sub make_random_file
{
my $content=@_[0];
my $name;
my $cnt;
if (($content=~/\S/g)==0)
{
return "no_file";
}
$rand_number=int(rand 100000)+1 ;
$name= &make_random_file_name();
$name="$name.tcoffee_file";
$tmp_files[$n_tmp_files++]=$name;
open NEW_FILE,">$name";
print NEW_FILE "$content";
close (NEW_FILE);
$cnt=chmod 0777, $name;
return $name;
}
sub make_random_file_name
{
my $name;
my $rand_number;
$rand_number=int(rand 100000)+1 ;
$name="$SCRATCH_AREA/$rand_number"."$$";
return $name;
}
sub output_error_page
{
my $myerror=@_[0];
my $back=@_[1];
print "Content-type: text/html\n\n";
print "\n";
print "\n";
print "ERROR $myerror\n\n |