removing tcoffee to update
[jabaws.git] / binaries / src / tcoffee / t_coffee_source / perl_header_lib.h
diff --git a/binaries/src/tcoffee/t_coffee_source/perl_header_lib.h b/binaries/src/tcoffee/t_coffee_source/perl_header_lib.h
deleted file mode 100644 (file)
index 68711d6..0000000
+++ /dev/null
@@ -1,5955 +0,0 @@
-char *PerlScriptName[]={"rec_sum.pl","count.pl","p\
-rocess_list.pl","make_license.pl","CCsed.script","\
-msa2bootstrap.pl","t_coffee_dpa","t_coffee_dpa2","\
-tc_generic_method.pl","generic_method.tc_method","\
-clustalw_method.tc_method","extract_from_pdb","ins\
-tall.pl","clean_cache.pl","mocca","dalilite.pl","w\
-ublast.pl","blastpgp.pl","RNAplfold2tclib.pl","fas\
-ta_seq2RNAplfold_templatefile.pl","fasta_seq2hmmto\
-p_fasta.pl","fasta_seq2consan_aln.pl","clustalw_al\
-n2fasta_aln.pl","msf_aln2fasta_aln.pl","blast_aln2\
-fasta_aln.pl","blast_xml2fasta_aln.pl","fasta_aln2\
-fasta_aln_unique_name.pl","newick2name_list.pl","e\
-xcel2fasta.pl","any_file2unix_file.pl","EndList"};\
-char *PerlScriptFile[]={"use File::Copy;\nuse Env \
-qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\n$\
-x_field=0;\n$y_field=1;\n$interval=0;\n$file=\"std\
-in\";\n$print_avg=1;\n$print_sd=0;\n$print_sum=0;\\
-n$print_n=0;\nforeach $value ( @ARGV)\n    {\n if \
-($value ne $ARGV[$np]) \n          {\n     ;\n     }\n \
-elsif($value eq \"-print_all\")\n          {\n     $pri\
-nt_sd=$print_avg=$print_n=$print_sum=1;\n          $np+\
-+;\n       }\n elsif($value eq \"-print_sum\")\n          \
- {\n       $print_sum=1;\n         $print_avg=0;\n         $\
-np++;\n            }\n elsif($value eq \"-print_n\")\n   \
-  {\n      $print_n=1;\n           $print_avg=0;\n         $n\
-p++;\n     }\n elsif($value eq \"-print_avg\")\n        \
-   {\n     $print_avg=1;\n         $print_avg=0;\n        \
- $np++;\n          }\n elsif($value eq \"-sd\")\n          {\
-\n         $print_sd=1;\n          $print_avg=0;\n         $np+\
-+;\n       }\n elsif($value eq \"-h\")\n           {\n    \
- $header=1;\n      $np++;\n        }\n elsif ($value e\
-q \"-i\")\n        {\n     $interval= $ARGV[++$np];\n\
-           $np++;\n                }\n elsif ($value eq \"-r\")\
-\n         {\n     $min= $ARGV[++$np];\n           $max= $AR\
-GV[++$np];\n       $np++;\n                }\n \n      elsif ($v\
-alue eq \"-x\")\n          {\n     $x_field= $ARGV[++$n\
-p]-1;\n            $np++;\n                }\n elsif ($value eq \
-\"-y\")\n          {\n       \n            while ($ARGV[$np+1]\
- && !($ARGV[$np+1]=~/\\-/))\n        {\n               $y_field[\
-$nyf++]=$ARGV[++$np]-1;\n              $y_field_set=1;\n            \
- }\n\n     $np++;\n                }\n elsif ($value eq \\
-"-file\")\n        {\n     $file= $ARGV[++$np];\n         \
- $file_set=1;\n            $np++;\n                }       \n  el\
-sif ( $value eq \"h\" ||  $value eq \"-h\" || $val\
-ue eq \"-H\" || $value eq \"-help\" || $value eq \\
-"help\")\n       {\n       print STDOUT \"data_analyse: \
-Analyse and discretization of data\\n\";\n         pri\
-nt STDOUT \"       -file:    <file containing the \
-data to analyze>,.<def=STDIN>\\n\";\n      print ST\
-DOUT \"       -x: <field containing the X>,.......\
-........<Def=0>\\n\";\n            print STDOUT \"       \
--y: <field containing the Y>,...............<Def=1\
->\\n\";\n          print STDOUT \"       -i:<Interval s\
-ize on the X>,...............<Def=0>\\n\";\n       p\
-rint STDOUT \"       -i:<0:only one interval>\\n\"\
-;\n        print STDOUT \"       -r:<Range of the X>\\
-\n\";\n            print STDOUT \"       -sd: print stand\
-ard deviation on the Y\";\n        print STDOUT \"   \
-    -h  : print column header \\n\";\n     exit (0\
-);\n     }\n   elsif ($value=~/-/)\n     {\n       print \\
-"$value is not a valid FLAG[FATAL]\\n\";\n         exi\
-t (0);\n          } \n elsif ($list eq \"\") \n            {\n \
-    $file=$ARGV[$np];\n            $np++;\n        }\n \n      \n\
-      }\n\n\n\n\n\nif ($file eq \"stdin\")\n   {\n     $\
-remove_file=1;\n       $file=\"tmp$$\";\n      open (F, \">$f\
-ile\");\n      while (<STDIN>)\n               {\n             print F $_;\n           }\
-\n     close (F);\n     \n     ;}\n\n\nopen(F,$file);\n\nif (\
-$interval)\n  {\n    $interval_size=($max-$min)/$i\
-nterval;\n  }\nwhile (<F>)\n  {\n    $line=$_;\n  \
-  if (!/\\S/){next;}\n    @list=($line=~/(\\S+)/g)\
-;\n    \n    if ($interval==0){$bin=0;}\n    else{\
-$bin=int (($list[$x_field]-$min)/($interval_size))\
-;}\n\n    \n    if ($bin && $bin==$interval){$bin-\
--;}\n    for ( $a=0; $a<$nyf; $a++)\n      {\n $su\
-m{$a}{$bin}+=$list[$y_field[$a]];\n    $sum2{$a}{$bin\
-}+=$list[$y_field[$a]]*$list[$y_field[$a]];\n  $n{$\
-a}{$bin}++;\n      }\n  }\n\nif (!$interval){$inte\
-rval=1;}\nfor ( $a=0; $a<$interval; $a++)\n  {\n  \
-  printf ( \"%3d %3d \", $interval_size*$a, $inter\
-val_size*($a+1));\n    for ( $b=0; $b<$nyf; $b++)      \
-\n      {\n    $i=$interval*$a;\n      if ( $n{$b}{$a}==0)\
-\n       {\n       $avg=0;\n       $sd=0;\n      }\n   else\n   \
- {\n       $avg=$sum{$b}{$a}/$n{$b}{$a};\n         $sd=s\
-qrt($sum2{$b}{$a}*$n{$b}{$a}-$sum{$b}{$a}*$sum{$b}\
-{$a})/($n{$b}{$a}*$n{$b}{$a});\n         }\n   if ($print_\
-n) {printf \"%10.4f \", $n{$b}{$a};}\n if ($print_\
-sum){printf \"%10.4f \", $sum{$b}{$a};}\n      if ($pri\
-nt_avg){printf \"%10.4f \", $avg}\n    if ($print_sd)\
- {printf \"%10.4f \", $sd;}\n      }\n    printf (\
-\"\\n\");\n  }\n\n\nif ( $remove_file){unlink $fil\
-e;}\n","use File::Copy;\nuse Env qw(HOST);\nuse En\
-v qw(HOME);\nuse Env qw(USER);\n\nforeach $v (@ARG\
-V){$cl.=$v;}\n\n\nif ( $cl=~/-k(\\d+)/){$k=$1;}\ne\
-lse {$k=1;}\nif ( $cl=~/-w(\\d+)/){$w=$1;}\nelse {\
-$w=-1;}\nif ( $cl=~/-p(\\d+)/){$p=$1;}\nelse {$p=-\
-1;}\n\nwhile (<STDIN>)\n  {\n    @l=($_=~/(\\S+)/g\
-);\n    $v=$l[$k-1];\n    if ( !$h{$v}){@ll=($v, @\
-ll);}\n    \n    if ( $w==-1)\n      {$h{$v}++;}\n\
-    else\n      {$h{$v}+=$l[$w-1];}\n\n    if ($p!\
-=-1){$print{$v}=$l[$p-1];}\n\n  }\nforeach $v (@ll\
-)\n  {\n    print \"$v $print{$v} $h{$v}\\n\";\n  \
-}\n","\nuse Env qw(HOST);\nuse Env qw(HOME);\nuse \
-Env qw(USER);\n$random_tag=int (rand 10000)+1;\n$u\
-nique_prefix=\"$$.$HOST.$random_tag\";\n$queue=\"d\
-istillery.and.mid\";\n$monitor=0;\n$stderr_file=\"\
-/dev/null\";\n$stdio_file=\"/dev/null\";\n$log_fil\
-e=\"/dev/null\";\n$pause_time=0;\n$max_sub_jobs=60\
-;\n$min_sub_jobs=30;\n$output_all=0;\n$var='\\$';\\
-n\nforeach $value ( @ARGV)\n    {\n    if ($value ne \
-$ARGV[$np]) \n     {\n     ;\n     }\n elsif ($val\
-ue eq \"-max_sub_jobs\")\n         {\n     $max_sub_jo\
-bs= $ARGV[++$np];\n        $np++;\n                }   \n      elsi\
-f ($value eq \"-min_sub_jobs\" )\n         {\n     $mi\
-n_sub_jobs= $ARGV[++$np];\n        $np++;\n                }\
-\n     elsif ($value eq \"-para\")\n       {\n     $para\
-=1;\n      $monitor=1;\n           $np++;\n                }\n e\
-lsif ($value eq \"-monitor\") \n           {\n     $moni\
-tor=1;\n           $np++;\n        }\n elsif ($value eq \"-\
-no_monitor\") \n           {\n     $monitor=0;\n           $np\
-++;\n      }\n elsif ($value eq \"-queue\")\n      {\
-\n         $queue=$ARGV[++$np];\n          $np++;\n        }   \\
-n      elsif ($value eq \"-stderr_file\")\n        {\n    \
- $stderr_file=$ARGV[++$np];\n      $np++;\n        }\n\
-       elsif ($value eq \"-stdio_file\")\n         {\n     $\
-stdio_file=$ARGV[++$np];\n         $np++;\n        }\n el\
-sif ($value eq \"-output_all\")\n          {\n     $out\
-put_all=1;\n       $np++;\n        }\n elsif ($value eq\
- \"-pause\") \n            {\n     $pause_time=$ARGV[++$n\
-p];\n      $np++;\n        }\n elsif ($value eq \"-log\
-\")\n        {\n              $log=1;\n               \n              \
-if ($ARGV[$np+1]=~/\\-\\S+/) \n                  {\n             $\
-log_file=\"stderr\";\n           }\n          else \\
-n                {\n             $log_file=$ARGV[++$np]; \n              +\
-+$np;\n                 \n               }\n         }\n       elsif ( $valu\
-e eq \"-com\")\n           {\n         \n              if (!$ARGV[$np+1]=~/\
-^\\'/) { $com=$ARGV[++$np];}\n         else {$com=$ARGV[+\
-+$np];}\n\n         $np++;\n       }\n elsif ( $value e\
-q \"-check\")\n          {\n       \n      if (!$ARGV[$np+1]\
-=~/^\\'/) { $check=$ARGV[++$np];}\n        else {$che\
-ck=$ARGV[++$np];}\n        $np++;\n      }\n   elsif ($com\
- eq \"\") \n       {\n     $com_set=1;\n           $com=$A\
-RGV[$np];\n        \n      $np++;\n        }\n elsif ($li\
-st eq \"\") \n     {\n     $list_set=1;\n          $lis\
-t=$ARGV[$np];\n            $np++;\n        }\n elsif ( $var_\
-set eq \"\")\n     {\n     $var_set=1;\n           $var=\
-$ARGV[$np];\n      $np++;\n        }\n }\n\n\n\n\nif (\
- $com eq \"\"){print \"You Need to Provide a Comma\
-nd [FATAL]\\n\";\n           die;\n         }\n\n\n\nif (\
-$list_set==0) \n    {\n    $x= int (rand 100000)+1\
-;\n    $tmp_file_name=\"tmp_file_$x\";\n    open (\
- TMP, \">$tmp_file_name\");\n    while (<STDIN>)\n\
-      {\n      print TMP $_;\n      }\n    close (TMP);\
-\n    open (F, $tmp_file_name);\n    }\nelse \n   \
- {\n    open (F, $list);\n    }\n\nif ($para==0) \\
-n    {\n\n     @tc_list= <F>;\n     close (F); \n \
-    \n     foreach $val(@tc_list) \n       {\n      \
- \n          \n              \n              $loc_com=$com;\n       \
- if ($check){$loc_check=$check;}\n           \n              \
-@i_val=($val=~/([^\\s]+)/g);\n       \n              if (\
- $#i_val==0)\n         {\n               if ($check){$loc_check=~s/$\
-var/$i_val[0]/g;}\n              $loc_com=~s/$var/$i_val[0]/\
-g;\n           }\n           else\n            {\n               for ($n=1; $n<=$#i_\
-val+1;$n++ )\n             {\n               \n                      $sub=\"$v\
-ar$n\";\n                    \n                      $loc_com=~s/$sub/$i_val\
-[$n-1]/g;\n                  if ($check){$loc_check=~s/$var/\
-$i_val[0]/g;}\n                    }\n         }\n           if ( $check &&\
- -e $loc_check)\n              {\n               print STDERR \"skipping \
-$loc_com...\\n\";\n              }\n         else\n            {\n               sy\
-stem \"$loc_com\";\n           }\n         }\n    exit;\n    }\\
-n\nelsif ($para==1) \n    {\n    print STDERR \"do\
- parallel execution of: \\\"$com $list\\\"\\n\";\n\
-    \n    if ($log==1) \n      {\n     if ($log_file eq \"s\
-tdout\" || $log_file eq \"stderr\" ) \n                {\n             $log\
-_file=\"\";\n          }\n\n        else \n            {\n             s\
-ystem \"echo LOG FILE> $log_file\";\n          \n              \
-}\n    }\n    else     \n      {\n     open ( OUT, \">/dev/null\")\
-;\n    }\n     \n    \n    $id=0;\n    $n_sub=0;\n    whi\
-le ($val=<F>) \n           {               \n      $job_log[$i\
-d]=\"$HOME/tmp/$unique_prefix.$id.log_file\";\n          \
-  \n       $job=$unique_prefix.\"_$id\";\n         open \
-(JOB, \">$job\");\n        \n      $loc_com=$com;\n      \
-  chop $val;\n\n           $loc_com=~s/\\$/$val/g;\n    \n\
-           print JOB \"#!/bin/csh\\n\";\n          print JOB \
-\"#\\$ -cwd\\n\";\n        print JOB \"#\\$ -N $uniqu\
-e_prefix\\n\";\n           if ($queue && !($queue eq \" \
-\")) {print JOB \"#\\$ -l $queue\\n\";}\n          prin\
-t JOB \"#\\n\";            \n            print JOB \"$loc\
-_com\\n\";\n       print JOB \"echo FINISHED  >> $jo\
-b_log[$id]\\n\";\n         print JOB \"pwd\\n\";\n        \
- \n        close (JOB);\n          if ( $output_all==1)\n      \
-       {\n             system \"qsub $job >  $unique_prefix\";         \n      \
-        }\n        else\n              {system \"qsub $job -e $st\
-derr_file -o $stdio_file >$unique_prefix\";          \
-  \n           } \n\n\n\n          print STDERR \"$id: $o\
-utput_all\\n\";\n          $n_sub++;\n     if ( $max_su\
-b_jobs && $n_sub==$max_sub_jobs) \n            {\n             $n_sub=m\
-onitor_process($min_sub_jobs,@job_log);                 \n             \n      \
-        }      \n         \n            unlink $unique_prefi\
-x;\n       sleep $pause_time;\n            $id++;\n        }\n\
-\n    close (OUT);\n    close (F);\n\n    print ST\
-DERR \"Your $id Jobs Have Been Submited (NAME=$uni\
-que_prefix)\\n\";\n    monitor_process (0, @job_lo\
-g);\n    foreach $file(@job_log) {if (-e $file) {u\
-nlink($file);}}\n    \n    }\n\nsub monitor_proces\
-s ( @job_list)\n    {\n    my (@job_list)=@_;\n   \
- my $min_sub_jobs=shift (@job_list);\n    my $n_su\
-b_jobs;\n    my $finished;\n    my $n=0;\n\n    $n\
-_sub_jobs=-1;\n    $finished=0;\n    print STDERR \
-\"\\nMonitor Batch: [$min_sub_jobs]\";\n       \n \
-   while (!$finished && (($n_sub_jobs>$min_sub_job\
-s)|| $n_sub_jobs==-1) ) \n     {\n     $finished=1;\n  $n_s\
-ub_jobs=0;\n   $n=0;\n foreach $file (@job_list)\n      \
-       {\n     \n              if (-e $file){;}\n              else \n             {\\
-n                  $finished=0; $n_sub_jobs++;\n                   }\
-\n             }\n     system \"sleep 1\";\n        }\n   \
- \n    return $n_sub_jobs;\n    }\n    \n    \nif \
-($tmp_file_name){unlink($tmp_file_name);}\n","\n\n\
-foreach ($np=0; $np<=$#ARGV; $np++)\n    {\n    $v\
-alue=$ARGV[$np];\n\n    if ($value eq \"-file\")\n\
-      {\n      $file= $ARGV[++$np];\n      }\n    \
-elsif ($value eq \"-type\")\n      {\n        $typ\
-e= $ARGV[++$np];\n      }\n    elsif ($value eq \"\
--institute\")\n      {\n        $institute= $ARGV[\
-++$np];\n      }\n    elsif ($value eq \"-author\"\
-)\n      {\n        $author= $ARGV[++$np];\n      \
-}\n    elsif ($value eq \"-date\")\n      {\n     \
-   $date= $ARGV[++$np];\n      }\n     elsif ($val\
-ue eq \"-program\")\n      {\n        $program= $A\
-RGV[++$np];\n      }\n    elsif ($value eq \"-emai\
-l\")\n      {\n        $email= $ARGV[++$np];\n    \
-  }\n    else\n      {\n       print \"$value is an unko\
-wn argument[FATAL]\\n\";\n     exit (1);\n      }\n  }\
-\n\n\n\nopen F, $file || die;\nprint $INSTITUTE;\n\
-if ( $type eq \"c\"){print \"/********************\
-*************COPYRIGHT NOTICE*********************\
-*************/\\n\";}\nif ( $type eq \"perl\"){pri\
-nt \"#################################COPYRIGHT NO\
-TICE#################################/\\n\";}\nif \
-( $type eq \"txt\"){print \"----------------------\
-------------COPYRIGHT NOTICE----------------------\
------------/\\n\";}\n\n\nwhile (<F>)\n  {\n  s/\\$\
-INSTITUTE/$institute/g;\n  s/\\$AUTHOR/$author/g;\\
-n  s/\\$DATE/$date/g;\n  s/\\$PROGRAM/$program/g; \
- \n  s/\\$EMAIL/$email/g;  \n  if ( $type eq \"txt\
-\"){print $_;}\n  elsif ($type eq \"c\"){chop $_; \
-print \"\\/*$_*\\/\\n\";}\n  elsif ($type eq \"per\
-l\"){print \"\\#$_\";}\n}\nclose (F);\nif ( $type \
-eq \"c\"){print \"/*******************************\
-**COPYRIGHT NOTICE********************************\
-**/\\n\";}\nif ( $type eq \"perl\"){print \"######\
-###########################COPYRIGHT NOTICE#######\
-##########################/\\n\";}\nif ( $type eq \
-\"txt\"){print \"---------------------------------\
--COPYRIGHT NOTICE---------------------------------\
-/\\n\";}\n\n","\nwhile (<>)    \n      {\n     s/\\=cc/1234567\
-89/g;\n        s/\\bcc/\\$\\(CC\\)/g;\n        s/123456789/\\=cc\
-/g;\n  print $_;\n     }\n\n","$version=\"1.00\";\n$rse\
-ed= int(rand(100000))+1;\n\n\nif ( $#ARGV==-1)\n  \
-{\n    print \"msa2bootstrap -i <input_file> -o <o\
-ut_file> -input <seq|msa|matrix|tree> -n <N-Boostr\
-ap> -o <outtree> -tmode <nj|upgma|parsimony|ml> -d\
-mode <kimura> -alignpg <t_coffee | muscle | clusta\
-lw> -rtree <file> -stype <prot|cdna|dna> -recomput\
-e -system <cygwin|unix>\";\n    print \"\\n\\t-i: \
-input file, can be sequneces, msa, matrix, trees, \
-type is specified via -input\";\n    print \"\\n\\\
-t-input: Type of input data\";\n    print \"\\n\\t\
-\\tmsa: msa in fasta format\";\n    print \"\\n\\t\
-\\tseq: compute an msa with -alignpg\";\n    print\
- \"\\n\\t\\tmatrix: phylipp distance matrix fed di\
-rectly to method -tmode [caveat: tmode=nj or upgma\
-]\";\n    print \"\\n\\t\\ttree: list of newick tr\
-ees directly fed to consence in order to generate \
-a bootstraped tree\";\n    \n    print \"\\n\\t-n:\
- number of bootstrap replicates\";\n    print \"\\\
-n\\t-o: name of the output tree. Files are not ove\
-rwritten. Use -recompute to overwrite existing fil\
-e\";\n    print \"\\n\\t-tmode: tree mode: nj|upgm\
-a|parsimony|ml\";\n    print \"\\n\\t-dmode: dista\
-nce mode\";\n    print \"\\n\\t-alignpg: program f\
-or aligning sequences (t_coffee=default)\";\n    p\
-rint \"\\n\\t-rtree: replicate tree file (default:\
- no file)\";\n    print \"\\n\\t-rmsa: replicate m\
-sa file (default: no file)\";\n    print \"\\n\\t-\
-rmat: replicate matrix file (default: no file)\";\\
-n    print \"\\n\\t-stype: sequence type: protein,\
- dna or cdna\";\n    print \"\\n\\t-recompute: for\
-ce files to be overwritten\";\n    print \"\\n\\t-\
-system: cygwin|unix\";\n      \n\n    \n    &my_ex\
-it (EXIT_FAILURE);\n  }\nforeach $arg (@ARGV){$com\
-mand.=\"$arg \";}\n\nprint \"CLINE: $command\\n\";\
-\n$threshold=100;\n$trim_msa=0;\n$stype=\"prot\";\\
-nprint \"msa2bootstrap \";\n\n$system=\"cygwin\";\\
-nif(($command=~/\\-system (\\S+)/))\n  {\n    $sys\
-tem=$1;\n    if ( $system eq \"cygwin\")\n      {\\
-n      $exec_extension=\".exe\";\n      }\n    elsif ( \
-$system eq \"unix\")\n      {\n        $exec_extension=\"\
-\";\n  print \"system=Unix\";die;\n      }\n    els\
-e\n      {\n   print \"msa2boostrap: -system=$system\
- is an unknown mode [FATAL]\\n\"; die;\n      }\n \
-   \n    print \"-system $system \";\n  }\nif(($co\
-mmand=~/\\-stype (\\S+)/))\n  {\n    $stype=$1;\n \
- }\nprint \"-stype=$stype \";\n\n\n\nif(($command=\
-~/\\-i (\\S+)/))\n  {\n    $msa=$1;\n    print \"-\
-i $msa \";\n  }\n\nif(($command=~/\\-rtree (\\S+)/\
-))\n  {\n    $rtree=$1;\n    print \"-rtree=$rtree\
- \";\n  }\n\nif(($command=~/\\-rmsa (\\S+)/))\n  {\
-\n    $rmsa=$1;\n  }\nif(($command=~/\\-rmat (\\S+\
-)/))\n  {\n    $rmat=$1;\n  }\n$input=\"seq\";\nif\
-(($command=~/\\-input (\\S+)/))\n  {\n    $input=$\
-1;\n  }\nprint \"-input=$input \";\n\n$dmode=\"kim\
-ura\";\nif(($command=~/\\-dmode (\\S+)/))\n  {\n  \
-  $dmode=$1;\n  }\nprint \"-dmode=$dmode \";\n$ali\
-gnpg=\"muscle\";\nif(($command=~/\\-alignpg (\\S+)\
-/))\n  {\n    $alignpg=$1;\n  }\nprint \"-alignpg=\
-$dmode \";\n\n$tmode=\"nj\";\nif(($command=~/\\-tm\
-ode (\\S+)/))\n  {\n    $tmode=$1;\n  }\nprint \"-\
-tmode=$tmode \";\n$recompute=0;\nif(($command=~/\\\
--recompute/))\n  {\n    $recompute=1;\n    print \\
-"-recompute \";\n  }\n\n$out=$msa;\n$out=~s/\\..*/\
-/;\n$out.=\".bph\";\nif(($command=~/\\-o (\\S+)/))\
-\n  {\n    $out=$1;\n    \n  }\nprint \"-out=$out \
-\";\nif (-e $out && !$recompute)\n  {\n    print \\
-"\\nNo Computation Required $out already exists\\n\
-\";\n    &my_exit (EXIT_SUCCESS);\n    \n  }\n\n$n\
-=100;\nif(($command=~/\\-n (\\d+)/))\n  {\n    $n=\
-$1;\n  }\nprint \"-n=$n \";\n$seed=3;\nif(($comman\
-d=~/\\-s (\\d+)/))\n  {\n    $seed=$1;\n  }\nprint\
- \"-s=$seed\";\n\nif(($command=~/\\-run_name (\\d+\
-)/))\n  {\n    $suffix=$1;\n  }\nelse\n  {\n    $m\
-sa=~/([^.]+)/;\n    $suffix=$1;\n  }\nprint \"-run\
-_name=$suffix\";\n\n\nif ( $input eq \"seq\")\n  {\
-\n    $seq=$msa;\n    $msa=\"$suffix.prot_msa\";\n\
-    \n    if ($stype eq \"cdna\")\n      {\n   $cdna\
-_seq=$seq;\n   $clean_cdna_seq=&vtmpnam();\n   $seq=&v\
-tmpnam();\n    `t_coffee -other_pg seq_reformat -in $\
-cdna_seq -action +clean_cdna >$clean_cdna_seq`;\n      \
-`t_coffee -other_pg seq_reformat -in $clean_cdna_s\
-eq -action +translate >$seq`;\n        \n      }\n\n    i\
-f (!-e $msa || $recompute)\n      {\n  print \"\\n#\
-####   Compute an MSA With $alignpg\\n\";\n    \n      if \
-( $alignpg eq \"t_coffee\")\n    {`$alignpg $seq -o\
-utfile=$msa >/dev/null 2>/dev/null`;}\n        elsif ( $a\
-lignpg eq \"muscle\")\n          {\n       `$alignpg -in $s\
-eq > $msa 2>/dev/null`;\n        }\n   elsif ( $alignpg e\
-q \"clustalw\")\n        {\n       `$alignpg -infile=$seq\
- -outfile=$msa -quicktree >/dev/null 2>/dev/null`;\
-\n       }\n   elsif ( $align eq \"mafft\")\n    {\n       \
-`$alignpg $seq > $msa >/dev/null 2>/dev/null`;\n        \
- }\n   else\n    {\n       `$alignpg -in=$seq -outfile=\
-$msa`;\n         }\n      }\n    if (!-e $msa)\n      {\\
-n      print \"\\nError: $alignpg Could Not produce the\
- MSA $msa [FATAL]\\n\";\n      }\n\n    if ($stype\
- eq \"cdna\")\n      {\n       $msa2=\"$suffix.cdna_msa\\
-";\n   `t_coffee -other_pg seq_reformat -in $clean_c\
-dna_seq -in2 $msa -action +thread_dna_on_prot_aln \
--output fasta_aln  >$msa2`;\n  $msa=$msa2;\n      }\
-\n    \n    $input=\"msa\";\n  }\n\n\n\n$seqboot_o\
-=&vtmpnam();\n$seqboot_c=&vtmpnam();\n\n$protdist_\
-o=&vtmpnam();\n$protdist_c=&vtmpnam();\nif ( $inpu\
-t eq \"msa\")\n  {\n    if ($tmode eq \"nj\" || $t\
-mode eq \"upgma\"){$input=\"matrix\";}\n    \n    \
-$lmsa= &vtmpnam ();\n    `t_coffee -other_pg seq_r\
-eformat -in $msa -output phylip_aln > $lmsa`;\n   \
- \n    if ( -e \"outfile\"){unlink (\"outfile\");}\
-\n    # run seqboot\n  \n    if ( $n>1)\n      {\n\
-       print \"Run SeqBoot .....\";\n  open (F, \">$seqbo\
-ot_c\");\n     print F \"$lmsa\\nR\\n$n\\nY\\n$seed\\n\
-\";\n  close (F);\n    `seqboot$exec_extension  < $seq\
-boot_c`;\n     if ( -e \"outfile\"){ print \"[OK]\\n\"\
-;}\n   else { print \"[FAILED]\\n\";&my_exit (EXIT_F\
-AILURE);}\n    `mv outfile $seqboot_o`;\n      }\n   \
- else\n      {\n       `cp $lmsa $seqboot_o`;\n      }\n\
-\n    if ($rmsa){`cp $seqboot_o $rmsa`;}\n    \n  \
-  if ($tmode eq \"nj\" || $tmode eq \"upgma\")\n  \
-    {\n        if ( $stype eq \"prot\")\n        {\n       # run\
- protdist\n        print \"Run Protdist [dmode=$dmode\
-]\";\n     if ($dmode eq \"kimura\")\n       {\n               \
-$dmode=\"P\\nP\\nP\";\n              }\n           else\n           \
- {\n           print \"\\n$dmode is an unknown mode for Pro\
-tdist [FATAL:msa2bootstrap.pl]\\n\";\n         &my_exit (\
-EXIT_FAILURE);\n             }\n           open (F, \">$protdi\
-st_c\");\n         if ($n>1){print F \"$seqboot_o\\n$d\
-mode\\nM\\nD\\n$n\\nY\\n\";}\n     else {printf F \
-\"$seqboot_o\\n$dmode\\nY\\n\";}\n         close (F);\\
-n          `cp $protdist_c pd_comm`;\n     `protdist$ex\
-ec_extension  < $protdist_c`;\n            if ( -e \"outf\
-ile\"){ print \"[OK]\\n\";}\n      else { print \"[\
-FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n           `mv o\
-utfile $protdist_o`;\n  \n       }\n   elsif ( $stype eq\
- \"cdna\" || $stype eq \"dna\")\n        {\n       print \
-\"Run dnadist [dmode=default\";\n          open (F, \">\
-$protdist_c\");\n          if ($n>1){print F \"$seqboot\
-_o\\nM\\nD\\n$n\\nY\\n\";}\n       else {printf F \"\
-$seqboot_o\\nY\\n\";}\n            close (F);\n            `prot\
-dist$exec_extension  < $protdist_c`;\n     if ( -e\
- \"outfile\"){ print \"[OK]\\n\";}\n       else { pr\
-int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n          \
-  `mv outfile $protdist_o`;\n    }\n      }\n  }\ne\
-lsif ( $input eq \"matrix\")\n  {\n    $protdist_o\
-=&vtmpnam();\n    print \"MSA: $msa\\n\";\n    `cp\
- $msa $protdist_o`;\n    $n=1;\n  }\n\n\n\n\n\n$nb\
-_o=&vtmpnam();\n$nb_c=&vtmpnam();\nif ($input eq \\
-"matrix\" && $tmode ne \"parsimony\" && $tmode ne \
-\"ml\")\n  {\n    print \"Run neighbor [tmode=$tmo\
-de]\";\n\n    if ($tmode eq \"nj\")\n      {\n $tm\
-ode=\"\\nN\\nN\";\n      }\n    elsif ( $tmode eq \
-\"upgma\")\n      {\n  $tmode = \"\\nN\";\n      }\\
-n    else\n      {\n   print \"\\n ERROR: $tmode is \
-an unknown tree computation mode\\n\";\n       &my_exit \
-(EXIT_FAILURE);\n      }\n\n    open (F, \">$nb_c\\
-");\n    if ($n>1){print F \"$protdist_o$tmode\\nM\
-\\n$n\\n$seed\\nY\\n\";}\n    else {print F \"$pro\
-tdist_o$tmode\\nY\\n\";}\n    close (F);\n\n    `n\
-eighbor$exec_extension  < $nb_c`;\n    if ( -e \"o\
-uttree\"){ print \"[Neighbor OK]\\n\";}\n    else \
-{ print \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\\
-n    `mv outtree $nb_o`;\n    unlink (\"outfile\")\
-;\n  }\nelsif ($input eq \"msa\" && $tmode eq \"pa\
-rsimony\")\n  {\n    if ( -e \"outfile\"){unlink (\
-\"outfile\");}\n    if ( -e \"outtree\"){unlink (\\
-"outtree\");}\n    \n    if ($stype eq \"prot\")\n\
-      {\n      print \"Run protpars [tmode=$tmode]\";\n\
-       open (F, \">$nb_c\");\n if ($n>1){print F \"$seqb\
-oot_o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n   else \
-{print F \"$seqboot_o\\nY\\n\";}\n     close (F);\n    `p\
-rotpars$exec_extension  < $nb_c`;\n      }\n    el\
-sif ( $stype eq \"dna\" || $stype eq \"cdna\")\n  \
-    {\n        print \"Run dnapars [tmode=$tmode]\";\n op\
-en (F, \">$nb_c\");\n  if ($n>1){print F \"$seqboot\
-_o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n      else {pr\
-int F \"$seqboot_o\\nY\\n\";}\n        close (F);\n    `dnap\
-ars$exec_extension  < $nb_c`;\n      }\n    if ( -\
-e \"outtree\"){ print \"[OK]\\n\";}\n    else { pr\
-int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n   \
- `mv outtree $nb_o`;\n   unlink (\"outfile\");\n  \
-}\nelsif ($input eq \"msa\" && $tmode eq \"ml\")\n\
-  {\n    if ( -e \"outfile\"){unlink (\"outfile\")\
-;}\n    if ( -e \"outtree\"){unlink (\"outtree\");\
-}\n    \n    if ($stype eq \"prot\")\n      {\n        pr\
-int \"Error: ML impossible with Protein Sequences \
-[ERROR]\";\n   &my_exit (EXIT_FAILURE);\n      }\n  \
-  elsif ( $stype eq \"dna\" || $stype eq \"cdna\")\
-\n      {\n    print \"Run dnaml [tmode=$tmode]\";\n   \
-open (F, \">$nb_c\");\n        if ($n>1){print F \"$seqbo\
-ot_o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n    else {\
-print F \"$seqboot_o\\nY\\n\";}\n      close (F);\n    `dn\
-aml$exec_extension  < $nb_c`;\n      }\n    if ( -\
-e \"outtree\"){ print \"[OK]\\n\";}\n    else { pr\
-int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n   \
- `mv outtree $nb_o`;\n   unlink (\"outfile\");\n  \
-}\n\n\nelse\n  {\n    `cp $msa $nb_o`;\n    $n=2;\\
-n  }\n\nif ($rmsa && -e $seqboot_o){print \"\\nOut\
-put List of $n Replicate MSA: $rmsa\\n\";`cp $seqb\
-oot_o $rmsa`;}\nif ($rmat && -e $protdist_o){print\
- \"\\nOutput List of $n Replicate MATRICES: $rmat\\
-\n\";`cp $protdist_o $rmat`;}\nif ($rtree && -e $n\
-b_o){print \"\\nOutput List of $n Replicate TREES:\
- $rtree\\n\";`cp $nb_o $rtree`;}\n\n\n\n$con_o=&vt\
-mpnam();\n$con_c=&vtmpnam();\nif ($n >1)\n  {\n   \
- print \"Run Consense.....\";\n    open (F, \">$co\
-n_c\");\n    print F \"$nb_o\\nY\\n\";\n    close \
-(F);\n    `consense$exec_extension  < $con_c`;\n  \
-  if ( -e \"outfile\"){ print \"[OK]\\n\";}\n    e\
-lse { print \"[FAILED]\\n\";&my_exit (EXIT_FAILURE\
-);}\n    `mv outtree $con_o`;\n    unlink (\"outfi\
-le\");\n  }\nelse\n  {\n    `cp $nb_o $con_o`;\n  \
-}\n\n\n`cp $con_o $out`;\nif ( !-e $out)\n  {\n   \
- print \"Tree Computation failed [FAILED]\\n\";\n \
-   &my_exit (EXIT_FAILURE);\n  }\nelsif ($n>1)\n  \
-{\n    print \"\\nOutput Bootstrapped Tree: $out\\\
-n\";\n    $avg=`t_coffee -other_pg seq_reformat -i\
-n $out -action +avg_bootstrap`;\n    $avg=~s/\\n//\
-g;\n    print \"$avg\\n\";\n  }\nelse\n  {\n    pr\
-int \"\\nOutput Tree: $out\\n\";\n  }\n\nopen (F, \
-\"$out\");\nwhile (<F>)\n  {\n    \n    $tree.=$_;\
-\n  }\nclose (F);\n$tree=~s/\\n//g;\nprint \"BPH: \
-$tree\\n\";\n\n\n&my_exit (EXIT_SUCCESS);\n\nsub m\
-y_exit \n  {\n    my $m=@_[0];\n    &clean_vtmpnam\
-();\n    exit ($m);\n  }\nsub vtmpnam \n  {\n    m\
-y $file;\n\n\n    $ntmp++;\n    $file=\"tmp4msa2bo\
-otstrap.$rseed.$$.$ntmp\";\n    \n    push (@tmpfi\
-le, $file);\n    return $file;\n  }\nsub clean_vtm\
-pnam \n  {\n    my $t;\n    foreach $t (@tmpfile)\\
-n      {\n     if ( -e $t){unlink ($t)};\n      }\n  }\
-\n","use Env;\n$seq_reformat=\"t_coffee -other_pg \
-seq_reformat \";\n$VersionTag=\"1.00\";\n$step=1;\\
-n$unset=\"\";\n$scoreT1=$scoreT2=$nseqT=$dp_limit=\
-$unset;\n@tl=();\nchomp($tc_version=`t_coffee -ver\
-sion`);$tc_version=~s/PROGRAM: //;\n\n\nprint STDE\
-RR \"\\n******************************************\
-***********************\";\nprint STDERR \"\\n*   \
-        HIGH LEVEL PROGRAM: T-COFFEE_DPA Version $\
-VersionTag\";\nprint STDERR \"\\n*           LOW  \
-LEVEL PROGRAM: $tc_version \";\nprint STDERR \"\\n\
-**************************************************\
-***************\";\n\nif (!@ARGV)\n  {\n    print \
-\"t_coffee_dpa accepts every t_coffee_flag.\\nType\
- t_coffee to obtain a list\\n\";\n    print \"Requ\
-ires $TC_VERSION\\n\";\n    print \"Requires \";\n\
-    print \"t_coffee_dpa specific flags:\\n\";\n  \
-  print \"\\t-dpa_master_aln....................Ma\
-ster alignment: provided OR computed\\n\";\n    pr\
-int \"\\t-dpa_master_aln....................By def\
-ault, Computed with t_coffee -very_fast\\n\";\n   \
- print \"\\t-dpa_master_aln=<file>.............Use\
- file, (must be an aln in Fasta or ClustalW\\n\";\\
-n    print \"\\t-dpa_master_aln=<program>.........\
-.Compute aln with pg -in seq -out aln`\\n\";\n    \
-print \"\\t-dpa_maxnseq.......................Maxi\
-mum number of sequences in subgroups\\n\";\n    pr\
-int \"\\t-dpa_min_score1....................Minimu\
-m Id for two sequences to be grouped in ref_aln\\n\
-\";\n    print \"\\t-dpa_min_score2...............\
-.....Minimum Id within a subgroup\\n\";\n    print\
- \"\\t-dpa_debug.........................Keep Tmp \
-File (for debug purpose)\\n\\n\";\n    \n    exit \
-(0);\n  }\nforeach $arg (@ARGV)\n  {\n    $arg_lis\
-t.=\" $arg\";\n  }\n$arg_list=~s/[=,;]/ /g;\n\n\n(\
-$seq0, $arg_list)=&extract_val_from_arg_list(\"^\"\
-,$arg_list, \"SPLICE\",\"unset\");\n($seq1, $arg_l\
-ist)=&extract_val_from_arg_list(\"-seq\",$arg_list\
-, \"SPLICE\",\"unset\");\n($seq2, $arg_list)=&extr\
-act_val_from_arg_list(\"-in\",$arg_list, \"KEEP\",\
-\"unset\");\n($seq3, $arg_list)=&extract_val_from_\
-arg_list(\"-infile\",$arg_list, \"SPLICE\",\"unset\
-\");\n($prf,  $arg_list)=&extract_val_from_arg_lis\
-t(\"-profile\",$arg_list, \"SPLICE\",\"unset\");\n\
-\n$gl{'Seq'}=$seq=&vtmpnam();#file containing all \
-the sequences\n\n   #1-remove sequences from -in\n\
-if ( $arg_list =~/\\-in\\b/)\n  {\n    my $save, $\
-name;\n    while($arg_list=~/\\-in\\b[^-]+(\\bS[\\\
-w.]+)/)\n      {\n     $name=$1;$name=~s/^.//;\n       if ( \
-!-e $name){$save.=\" S$name \";}\n\n   $arg_list=~s/\
-S$name/ /;\n      }\n    $arg_list=~s/\\-in\\b/\\-\
-in $save /;\n  }\n   #2-prepare \n\nif (!($arg_lis\
-t=~/\\-outorder/))\n  {\n    \n    $output_cl .=\"\
- -outorder=$seq\";\n  }\n@output_flag=(\"-output\"\
-,\"-outfile\", \"-run_name\", \"-outorder\"); \nfo\
-reach $v1 (@output_flag)\n  {\n    ($v2, $arg_list\
-)=&extract_val_from_arg_list($v1,$arg_list, \"SPLI\
-CE\",\"unset\");\n    if ($v2 ne \"\")\n      {\n\\
-n      if ($v1 eq \"-run_name\"){$run_name=$v2;$output_\
-cl .=\" $v1 $v2 \";}\n elsif ( $v1 eq \"-outorder\\
-")\n     {\n       if ( $v2 eq \"input\"){$v2=$seq;}\n\
-           $outorder=$v2;$output_cl .=\" $v1 $v2 \";\n  \
- }\n   else\n    {\n       $output_cl .=\" $v1 $v2 \";\\
-n        }\n      }\n }\n\n\n($dpa_master_aln, $arg_lis\
-t)  =&extract_val_from_arg_list(\"-dpa_master_aln\\
-",$arg_list, \"SPLICE\", \"t_coffee\");\n$dpa_mast\
-er_aln=~s/\\s//g;\n($nseqT, $arg_list)           =\
-&extract_val_from_arg_list(\"-dpa_maxnseq\",$arg_l\
-ist, \"SPLICE\", 30);\n($scoreT1, $arg_list)      \
-   =&extract_val_from_arg_list(\"-dpa_min_score1\"\
-,$arg_list, \"SPLICE\", 80);\n($scoreT2, $arg_list\
-)         =&extract_val_from_arg_list(\"-dpa_min_s\
-core2\"    ,$arg_list, \"SPLICE\", 30);\n($dpa_lim\
-it, $arg_list)       =&extract_val_from_arg_list(\\
-"-dpa_limit\"        ,$arg_list, \"SPLICE\", 0);\n\
-($dpa_delta_id, $arg_list)    =&extract_val_from_a\
-rg_list(\"-dpa_delta_id\"        ,$arg_list, \"SPL\
-ICE\", 1);\n($dpa_debug, $arg_list)       =&extrac\
-t_val_from_arg_list(\"-dpa_debug\"           ,$arg\
-_list, \"SPLICE\", 0);\n\n\n$in_seq=$seq0.\" \".$s\
-eq1.\" \".$seq2.\" \".$seq3;\n$in_prf=(($prf ne $u\
-nset)?\"$prf \":\"\");\n&exit_dpa (($in_seq eq \"\\
-" && $in_prf eq \"\")?1:0, \"ERROR: You did not Pr\
-ovide any sequences. Use the -seq flag [FATAL: t_c\
-offee_dpa]\\n\", EXIT_FAILURE);\n\n\nprint STDERR \
-\"\\nSTART DPA COMPUTATION\";\n\n\n\nif ($in_seq=~\
-/\\S+/)\n  {\n    \n    print STDERR \"\\n Step $s\
-tep: Gather all the sequences into the tmp file: [\
-$seq]\";$step++;       \n    &my_system (\"t_coffee $in_\
-seq -convert -quiet -output fasta_seq -outfile=$se\
-q -maxnseq 0\");\n  }\n\nif ( !-e $seq){$seq=\"\";\
-}\n\nif ($in_prf=~/\\S+/)\n  {\n    $seq_in_type=\\
-"profile\"; \n    $seq.= $in_prf; \n  }\nif ($seq \
-eq \"\"){ &exit_dpa (1, \"\\nERROR: No Sequence FO\
-und. Provide Sequences with the -seq flag [FATAL: \
-t_coffee_dpa]\", EXIT_FAILURE);}\n\n \n\nif ( $run\
-_name)\n  {\n    $suffix=$run_name;\n  }\nelsif ($\
-in_seq=~/\\b(S[\\w.]+\\b)/)\n  {\n    my $suffix1,\
- $sufffix2;\n    $suffix1=$suffix2=$1;\n    $suffi\
-x2=~s/^S//;\n    if ( -e $suffix1){$suffix=$suffix\
-1;}\n    elsif ( -e $suffix2){$suffix=$suffix2;}\n\
-    else\n      {\n    $suffix=&vtmpnam();     \n      }\\
-n    $suffix=~s/\\.\\w+//;\n  }\n\nelse\n  {\n    \
-$suffix=&vtmpnam();\n  }\n\n\nif (!$run_name){$out\
-put_cl.=\" -run_name $suffix \";}\n\n\n$gl{'Tree'}\
-=&seq2dpa_tree ($seq, \"$suffix.dpadnd\");\n\nprin\
-t STDERR \"\\n Step $step: Prepare guide tree: $gl\
-{'Tree'}\";$step++;\n\nprint STDERR \"\\n Step $st\
-ep: Identify and Align Closely Related Groups\";$s\
-tep++;\n%gl=&make_one_pass (0, $scoreT1,\"Align\",\
-%gl);\n\nprint STDERR \"\\n Step $step: Make Multi\
-ple Group Alignment\";$step++;\nwhile (!%gl ||$gl{\
-'Ng'}>$nseqT)\n  {\n    %gl=&make_one_pass ($nseqT\
-, $scoreT2,\"t_coffee\",%gl);\n    if ( $gl{'Newgr\
-oups'}==0){$scoreT2--;}    \n  }\nprint STDERR \"\\
-\n Step $step: Make The Final Alignment\";$step++;\
-\n\n\n$arg_list .=$output_cl;\n\n\n%gl=&tree2group\
- (0,0, %gl);\n$gl{$gl{'0'}{'File'}}{'Output'}=\"\"\
-;\n$a=0;\n&align_groups (\"t_coffee\",'0', $arg_li\
-st, \" \", %gl);\n\n\n\nif ( !$dpa_keep_tmpfile){&\
-clean_tmp_file (@tl);}\n\n\n\nsub seq2dpa_tree \n \
- {\n    my $seq=@_[0];\n    my $newtree=@_[1];\n  \
-  my $aln=&vtmpnam ();\n\n    &my_system (\"t_coff\
-ee -special_mode quickaln -in $seq -outfile $aln -\
-quiet\");\n    &my_system (\"$seq_reformat -in $al\
-n -action +aln2tree +tree2dpatree -output newick >\
-$newtree\");\n    return $newtree;\n  }        \nsub seq2\
-dpa_tree_old \n  {\n    my $aln=@_[0];\n    my $ne\
-wtree=@_[1];\n    \n    \n    &my_system(\"$seq_re\
-format -in $aln -action +seq2dpatree -output newic\
-k > $newtree\");\n    return $newtree;\n  }\nsub a\
-ln2dpa_tree \n  {\n    my $aln=@_[0];\n    my $new\
-tree=&vtmpnam();\n    \n    &my_system(\"$seq_refo\
-rmat -in $aln -action +aln2tree +tree2dpatree -out\
-put newick > $newtree\");\n    return $newtree;\n \
- }\nsub group_file2ngroups\n  {\n    my $file=@_[0\
-];\n    my $n;\n    \n    open ( F, $file);\n    w\
-hile (<F>)\n      {\n  $n+=/\\>/;\n      }\n    clo\
-se (F);\n    return $n;\n  }\n\nsub make_one_pass\\
-n  {\n    my ($N, $ID,$pg, %gl)=@_;\n    my $a;\n\\
-n    %gl=&tree2group ($N,$ID,%gl);\n    if (!$gl{'\
-Newgroups'}){return %gl;}\n    else\n      {\n for\
- ( $a=0; $a< $ng; $a++)\n        {\n       if ($gl{$gl{$a\
-}{'File'}}{'Ng'}>1){&display_group($a, %gl);}\n          \
-  &align_groups ($pg, $a, $arg_list, \" -quiet=qui\
-et \", %gl);\n   }\n   return %gl;\n      }\n  }\n\n\
-sub tree2group \n  {\n    my ($N, $ID, %gl)=@_;\n \
-   my $prefix=&vtmpnam();\n    my $group_file=&vtm\
-pnam();\n    my $file;\n    my $oldtree=&vtmpnam()\
-;\n    my $n;\n    my $tree;\n\n\n    if ( $gl{'Ng\
-'}==1){return %gl;}\n    $tree=$gl{'Tree'}; \n    \
-\n    #1 extract the groups\n    &my_system (\"$se\
-q_reformat -in $tree -action +tree2group $N $ID $p\
-refix > $group_file\");\n    $n=group_file2ngroups\
-($group_file);\n    \n    \n    $gl{'Newgroups'}=1\
-;\n    if ( $n==$gl{'Ng'})\n      {\n  $gl{'Newgrou\
-ps'}=0;\n      return %gl;\n      }\n    $gl{'Iteration\
-'}++;\n    $gl{'MaxNseq'}=$N;$gl{'MinID'}=$ID;\n  \
-  $gl{'GroupFile'}=$group_file;$gl{'Ng'}=$ng=0;\n \
-   #2 Process the group list into the hash\n    op\
-en (F, $group_file);\n    while (<F>)\n      {\n       $\
-gl{'File'}.=$_;\n      if (/\\>/)\n      {\n       $line=$_;\
-\n         $line=~s/\\>//;\n       @list=($line=~/(\\S+)\
-/g);\n     $file=$gl{$ng}{'File'}=shift @list;\n        \
-   $gl{$file}{'Output'}=$file;\n           \n      $gl{$f\
-ile}{'Ng'}=$#list+1;\n     if ($gl{$file}{'Ng'}>1)\
-{ $gl{$file}{'Tlist'}=$gl{$file}{'Alist'}=\"(\";}\\
-n          foreach $l (@list)\n              {\n       \n              $gl{$file\
-}{'List'}.=\" $l \";\n         \n              if (!$gl{$l}{'Tlist'})\
-\n               {\n               $gl{$l}{'Tlist'}=\"$l\";\n              $gl\
-{$l}{'Alist'}=\"$l\";\n                    $gl{$l}{'Nseq'}=1;\n        \
-           $gl{$l}{'Ng'}=1;\n            }\n           $gl{$file}{'Tlist'\
-}.=\"$gl{$l}{'Tlist'},\";\n            $gl{$file}{'Alist'}.=\
-\"$gl{$l}{'Tlist'}|\";\n               $gl{$file}{'Nseq'}+=$gl{\
-$l}{'Nseq'};\n       }\n           \n\n            chop($gl{$fi\
-le}{'Tlist'});chop($gl{$file}{'Alist'});\n         if \
-($gl{$file}{'Ng'}>1){$gl{$file}{'Tlist'}.=\")\"; $\
-gl{$file}{'Alist'}.=\");\";}\n     $ng++;\n      }     \n\
-      }\n    $gl{'Ng'}=$ng;\n    close (F);\n    \\
-n    #3 Update the old tree with the new groups\n \
-   $gl{'Tree'}=&vtmpnam();\n    &my_system (\"$seq\
-_reformat -in $tree -action +collapse_tree $group_\
-file -output newick > $gl{'Tree'}\");\n    \n    r\
-eturn %gl;\n  }\n\nsub display_group \n  {\n    my\
- ($g,%gl)=@_;\n    my $f;\n    \n    if ( $g==-1)\\
-n      {\n     print STDERR \"\\nIteration $gl{'Iterat\
-ion'} [MaxN=$gl{'MaxNseq'}][MinID=$gl{'MinID'}]\";\
-\n      }\n    else\n      {\n\n       $f=$gl{$g}{'File'\
-};\n   $action=($gl{$f}{'Ng'}==1 || $gl{'Iteration'}\
-==1)?\"KEEP  \":\"ALIGN \";\n        print STDERR \
-\"\\n\\t[$action][MaxN=$gl{'MaxNseq'}][MinID=$gl{'\
-MinID'}][File $f][Nseq=$gl{$f}{'Nseq'}][Ngroups=$g\
-l{$f}{'Ng'}][$gl{$f}{'Alist'}]\";\n      }\n  }\n \
-     \n\n\nsub align_groups\n  {\n    my ($pg, $g,\
- $arg, $extra_arg,%gl)=@_;\n    my $f;\n    my $Ou\
-tput,$Outflag;\n    \n    \n    $f=$gl{$g}{'File'}\
-;\n    $Output=($gl{$f}{'Output'});\n    \n    if \
-( $pg eq \"Align\")\n      {\n if ( !-e $f)\n    {\\
-n          $command=\"$seq_reformat -in $gl{'Seq'}  -ac\
-tion +extract_aln $gl{'GroupFile'}\";\n            if ($g\
-l{$f}{'Ng'}>1)\n             {\n               &my_system ($command);\
-\n             $command=\"t_coffee -special_mode quick_aln  S\
-$f -outfile=$Output -quiet\";\n              }\n         }\n   el\
-se \n    {$command=\"\";}\n      }\n    elsif ( -e \
-$f)\n      {   \n      $Outflag=($Output)?\"-outfile=$Out\
-put\":\"\";\n  $command=\"$pg -infile $f $Outflag -\
-quiet stdout $arg $extra_arg -maxnseq 0 -convert -\
-quiet stdout\";\n      }\n    elsif ( $gl{$f}{'Ng'\
-}==1)\n      {\n       $action=($dpa_debug)?\"cp\":\"mv\\
-";\n   $command=\"$action $gl{$f}{'List'} $Output\";\
-\n      }\n    else\n      {\n $Outflag=($Output)?\
-\"-outfile=$Output\":\"\";\n   $command=\"$pg -profi\
-le $gl{$f}{'List'} $Outflag $arg $extra_arg -maxns\
-eq 0\";\n      }\n    \n    &my_system ($command);\
-\n    return $outfile;\n  }\n    \nsub my_system \\
-n  {\n    my $command=@_[0];\n    my $force=@_[1];\
-\n    my $status;\n\n    if ( $dpa_debug) {print S\
-TDERR \"\\nCOMMAND: $command\";}\n    $status=syst\
-em ($command);\n\n    if (!$force)\n       {\n  &e\
-xit_dpa (($status==1), \"Failed in Command:\\n$com\
-mand\\n[FATAL: t_coffee_dpa]\\n\", EXIT_FAILURE);\\
-n       }\n    \n    return $status;\n  }\n\nsub v\
-tmpnam\n  {\n    my $prefix=@_[0];\n    my $tmp_fi\
-le_name;\n\n    $tmp_prefix=($prefix)?$prefix:\"dp\
-a_tmp_file_$$\";\n   \n    $tmp_count++;\n    $tmp\
-_file_name=\"$tmp_prefix\".\"$tmp_count\";\n    $t\
-l[$#tl+1]=$tmp_file_name;\n    return $tmp_file_na\
-me;\n  }\n\nsub clean_tmp_file\n  {\n\n    my $lis\
-t;\n    my $file;\n    \n    if ($dpa_debug){retur\
-n;}\n    $list=vtmpnam();\n    `ls -1 | grep $tmp_\
-prefix>$list`;\n    \n    open (F,$list);\n    whi\
-le ( <F>)\n      {\n   $file=$_;\n     chop $file;\n   if \
-( -e $file){unlink $file;}\n      }\n    close (F)\
-;\n    unlink $list;\n  }\n\n\nsub exit_dpa\n  {\n\
-  my $condition=@_[0];\n  my $error_msg=@_[1];\n  \
-my $exit_value=@_[2];\n  if ( $condition)\n    {\n\
-      print \"$error_msg\\n\";\n      exit ($exit_\
-value);\n    }\n  else\n    {\n      return;\n    \
-}\n  \n}\nsub extract_val_from_arg_list\n  {\n    \
-my $arg=@_[0];\n    my $arg_list=@_[1];\n    my $k\
-eep_flag=@_[2];\n    my $default_value=@_[3];\n   \
- my $val=\"\";\n    \n    #protect\n    $arg_list=\
-~s/\\s-/ \\@/g;\n    $arg=~s/-/\\@/g;\n    \n    #\
-search\n    if ($arg eq \"^\")\n      {\n      $arg_lis\
-t=~/^([^@]*)/;\n       $val=$1;\n      }\n    else\n    \
-  {$arg_list=~/$arg ([^@]*)/;$val=$1;}\n    \n    \
-#remove trailing spaces\n    $val=~s/\\s*$//;\n   \
- \n    #remove the parsed sequence if needed\n    \
-if (($val ne \"\") && $keep_flag ne \"KEEP\")\n   \
-   {\n if ( $arg eq \"^\"){$arg_list=~s/$val/ /;}\\
-n      else {$arg_list=~s/($arg [^@]*)/ /;}\n      }\n \
-\n    #unprotect\n    $arg_list=~s/\\@/-/g;\n    $\
-arg=~s/\\@/-/g;\n    \n    if (($val eq \"\") && $\
-default_value ne \"unset\"){$val=$default_value;}\\
-n    \n    return $val, $arg_list;\n  }\n$program=\
-\"T-COFFEE (Version_7.90)\";\\n\n","\n$DEBUG=1;\n$\
-dpa_nseq=10;\n$dpa_sim=0;\nif (!@ARGV)\n  {\n    `\
-t_coffee`;\n    exit (0);\n  }\nforeach $arg (@ARG\
-V)\n  {\n    $arg_list.=\" $arg\";\n  }\n$max_nseq\
-=10;\n($seq0, $arg_list)=&extract_val_from_arg_lis\
-t(\"^\",$arg_list);\n($seq1, $arg_list)=&extract_v\
-al_from_arg_list(\"-seq\",$arg_list);\n($seq2, $ar\
-g_list)=&extract_val_from_arg_list(\"-in\",$arg_li\
-st, \"KEEP\");\n($seq3, $arg_list)=&extract_val_fr\
-om_arg_list(\"-infile\",$arg_list);\n$in_seq=$seq0\
-.\" \".$seq1.\" \".$seq2.\" \".$seq3;\n\n$seq=vtmp\
-nam();\n`t_coffee $in_seq -convert -output fasta_s\
-eq -outfile=$seq`;\n\n\n($dpa_nseq, $arg_list)=&ex\
-tract_val_from_arg_list(\"-dpa_nseq\",$arg_list);\\
-n($master_aln, $arg_list)=&extract_val_from_arg_li\
-st(\"-master_aln\",$arg_list);\n($sim_matrix, $arg\
-_list)=&extract_val_from_arg_list(\"-sim_matrix\",\
-$arg_list);\n($core_seq, $arg_list)=&extract_val_f\
-rom_arg_list(\"-core_seq\",$arg_list);\n($dpa_sim,\
- $arg_list)=&extract_val_from_arg_list(\"-dpa_sim\\
-",$arg_list);\n($run_name, $arg_list)=&extract_val\
-_from_arg_list(\"-run_name\",$arg_list);\n($output\
-, $arg_list)=&extract_val_from_arg_list(\"-output\\
-",$arg_list);\n\n\n\nif (!$sim_mat && !$master_aln\
-)#Compute the fast alignment\n  {\n    $ref_aln=vt\
-mpnam();\n    `t_coffee -seq=$seq -very_fast -outf\
-ile=$ref_aln -quiet`;\n    \n  }\n\nif (!$sim_mat)\
-\n  {\n    $sim_mat=vtmpnam();\n    `seq_reformat \
--in $ref_aln -output sim > $sim_mat`;\n  }\n\nif (\
- !$core_seq)\n  {\n    $core_seq=vtmpnam();\n    `\
-seq_reformat -in $ref_aln -action +trimTC N$max_ns\
-eq -output fasta_seq > $core_seq`;\n  }\n@core_nam\
-e=`seq_reformat -in $core_seq -output name `; \n\n\
-@tot_name=`seq_reformat -in $seq -output name `;\n\
-\nforeach $s (@core_name){$s=~s/\\s//g;$hcore{$s}=\
-1;}\nforeach $s (@tot_name){$s=~s/\\s//g;}\nprint \
-STDERR \"T-Coffee_dpa:\\n\";\nprint STDERR \"\\tTO\
-TAL  SEQ: @tot_name\\n\";\nprint STDERR \"\\tCHOSE\
-N SEQ: @core_name\\n\";\n\n\n\nopen (F, $sim_mat);\
-\nwhile ( <F>)\n  {\n    @l=($_=~/(\\b[\\S]+\\b)/g\
-);\n    if (($l[0] eq \"TOP\" || $l[0] eq \"BOT\")\
-)\n      {\n   $s1=$l[1];$s2=$l[2];$v=$l[3];\n if ($\
-hcore{$s1} && !$hcore{$s2})\n    {\n       if (!$hseq\
-{$s2}{\"sim\"} || $v>$hseq{$s2}{\"sim\"})\n          \
-{\n            $hseq{$s2}{\"sim\"}=$v;$hseq{$s2}{\"seq\"}=$s\
-1;\n         }\n         }\n      }\n  }\nclose (F);\nfore\
-ach $s (@tot_name)\n  {\n\n    if ( !$hseq{$s}{\"s\
-eq\"}){;}\n    else\n      {\n $s2=$hseq{$s}{\"seq\
-\"};\n $v=$hseq{$s}{\"sim\"};\n                \n      if ($v>$dpa_si\
-m)\n     {\n       $hseq{$s}{'used'}=1;\n          $seq_lis\
-t{$s2}{$seq_list{$s2}{'nseq'}++}=$s;\n   }\n      \
-}\n  }\nforeach $s (@core_name){$seq_list{$s}{$seq\
-_list{$s}{'nseq'}++}=$s;$hseq{$s}{'used'}=1;}\nfor\
-each $s (@tot_name){if (!$hseq{$s}{'used'}){$seq_l\
-ist{'unused'}{$seq_list{'unused'}{'nseq'}++}=$s;}}\
-\n\n\n$n=0;\nforeach $s (@core_name)\n  {\n    $ng\
-++;\n    $n=$seq_list{$s}{'nseq'};\n    for (@g_li\
-st=(), $a=0; $a<$n; $a++){@g_list=(@g_list,$seq_li\
-st{$s}{$a});}\n\n    $g_seq=vtmpnam();\n    $g_aln\
-=vtmpnam();\n    \n    print STDERR \"Group $ng: $\
-#g_list Seq: @g_list: \";\n    \n    \n    `seq_re\
-format -in $seq -action +lower +keep_name +extract\
-_seq  @g_list -output fasta_seq > $g_seq`;\n    \n\
-    \n    if ( $#g_list==0)\n      {\n print STDER\
-R \"[No aln]\\n\";\n   $g_aln=$g_seq;\n      }\n    \
-elsif ($#g_list<$max_nseq) \n      {\n print STDER\
-R \"[t_coffee]\\n\";\n `t_coffee $g_seq -outfile=$\
-g_aln -quiet $arg_list`;\n      }\n    else\n     \
- {\n   print STDERR \"[t_coffee_dpa]\\n\";\n   `t_coff\
-ee_dpa2 $g_seq -outfile=$g_aln $arg_list -sim_matr\
-ix $sim_matrix -dpa_nseq $dpa_nseq`;\n      }\n   \
- @profile_list=(@profile_list, $g_aln);\n  }\n\n\n\
-print \"UNUSED $seq_list{'unused'}{'nseq'}\";\n\ni\
-f ($seq_list{'unused'}{'nseq'})\n    {\n      $prf\
-=vtmpnam();\n      \n      `t_coffee -profile @pro\
-file_list $arg_list -outfile=$prf -quiet`;\n      \
-$n=$seq_list{\"unused\"}{'nseq'};\n      $new_seq=\
-vtmpnam();\n      $new_prf=vtmpnam();\n      for (\
-$a=0; $a<$n-1; $a++)\n {\n       $s=$seq_list{\"unused\
-\"}{$a};\n       print STDERR \"\\nADD Sequence $s\";\\
-n        \n      `seq_reformat -in $seq -action +lower +ke\
-ep_name +extract_seq $s  -output fasta_seq > $new_\
-seq`;\n          `t_coffee -profile $prf $new_seq $arg_li\
-st -outfile=$new_prf`;\n         `cp $new_prf $prf`;\n }\
-\n      $s=$seq_list{\"unused\"}{$a};\n      `seq_\
-reformat -in $seq -action +lower +keep_name +extra\
-ct_seq $s  -output fasta_seq > $new_seq`;\n      @\
-profile_list=($prf, $new_seq);\n    }\n    \n     \
- \nif ($run_name){$arg_list.=\" -run_name $run_nam\
-e\";}\nelse \n  {\n    $in_seq=~/([\\w-]+)/;\n    \
-$arg_list.=\" -run_name $1\";\n  }\nif ( $output){\
-$arg_list.=\" -output $output \";}\n\n`t_coffee -p\
-rofile @profile_list $arg_list`;\n\n\n&clean (@tmp\
-_file_list);\n\n\nsub vtmpnam\n  {\n    my $tmp_fi\
-le_name;\n    $tmp_name_counter++;\n    $tmp_file_\
-name=\"tmp_file_$tmp_name_counter\\_Pid$$\";\n    \
-$tmp_file_list[$ntmp_file++]=$tmp_file_name;\n    \
-return $tmp_file_name;\n  }\nsub clean\n  {\n  my \
-@fl=@_;\n  my $file;\n  return;\n\n  foreach $file\
- ( @fl)\n    {\n      if ( -e $file){unlink($file)\
-;}\n    }\n}\nsub extract_val_from_arg_list\n  {\n\
-    my $arg=@_[0];\n    my $arg_list=@_[1];\n    m\
-y $keep_flag=@_[2];\n    #protect\n    $arg_list=~\
-s/\\s-/ \\@/g;\n    $arg=~s/-/\\@/g;\n    \n    #s\
-earch\n    if ($arg eq \"^\")\n      {\n       $arg_list\
-=~/^([^@]*)/;\n        $val=$1;\n      }\n    else\n     \
- {$arg_list=~/$arg ([^@]*)/;$val=$1;}\n    \n    #\
-remove the parsed sequence if needed\n    if ($val\
- && $keep_flag ne \"KEEP\")\n      {\n if ( $arg e\
-q \"^\"){$arg_list=~s/$val/ /;}\n      else {$arg_list=\
-~s/($arg [^@]*)/ /;}\n      }\n        \n    #unprotect\n\
-    $arg_list=~s/\\@/-/g;\n    $arg=~s/\\@/-/g;\n \
-   \n    return $val, $arg_list;\n  }\n\n","use En\
-v;\n\n$BLAST_MAX_NRUNS=2;\n$EXIT_SUCCESS=0;\n$EXIT\
-_FAILURE=1;\n\nuse Cwd;\n$REF_EMAIL=\"\";\n\n\n$tm\
-p_dir=\"\";\n$init_dir=\"\";\n$program=\"tc_generi\
-c_method.pl\";\n\n$test=0;\nif ($test==1)\n  {\n  \
-  $SERVER=\"NCBI\";\n    $query=$ARGV[0];\n    $hi\
-tf=$ARGV[1];\n    %s=read_fasta_seq($query);\n    \
-@sl=keys(%s);\n    &blast_xml2profile (\"xx\", $s{\
-$sl[0]}{seq},$maxid,$minid,$mincov, $hitf);\n    m\
-yexit ($EXIT_FAILURE);\n  }\n\nforeach $v(@ARGV){$\
-cl.=\"$v \";}\n($mode)=&my_get_opt ( $cl, \"-mode=\
-\",1,0);\n\n($A)=(&my_get_opt ( $cl, \"-name1=\",0\
-,0));\n($B)=(&my_get_opt ( $cl, \"-name2=\",0,0));\
-\n($TMPDIR)=(&my_get_opt ( $cl, \"-tmpdir=\",0,0))\
-;\n($CACHE)=(&my_get_opt ( $cl, \"-cache=\",0,0));\
-\n($SERVER)=((&my_get_opt ( $cl, \"-server=\",0,0)\
-));\n($EMAIL)=((&my_get_opt ( $cl, \"-email=\",0,0\
-)));\n\nif (!$A){$A=\"A\";}\nif (!$B){$B=\"B\";}\n\
-\n\nif (!$TMPDIR)\n  {\n    $HOME=$ENV{HOME};\n   \
- if ($ENV{TMP_4_TCOFFEE}){$TMPDIR=$ENV{TMP_4_TCOFF\
-EE};}\n    else{$TMPDIR=\"$HOME/.t_coffee/tmp/\";}\
-\n  }\nif ( ! -d $TMPDIR)\n  {\n    mkdir $TMPDIR;\
-\n  }\nif ( ! -d $TMPDIR)\n  {\n    print \"ERROR:\
- Could not create temporary dir: $TMPDIR\\n\";\n  \
-  myexit ($EXIT_FAILURE);\n  }\n\n$EMAIL=~s/XEMAIL\
-X/\\@/g;\nif (!$EMAIL)\n  {\n    if ($ENV{EMAIL_4_\
-TCOFFEE}){$EMAIL=$ENV{EMAIL_4_TCOFFEE};}\n    elsi\
-f ($ENV{EMAIL}){$EMAIL=$ENV{EMAIL};}\n    else {$E\
-MAIL=$REF_EMAIL;}\n  }\n\n($maxid,$minid,$mincov)=\
-(&my_get_opt ( $cl, \"-maxid=\",0,0, \"-minid=\",0\
-,0,\"-mincov=\",0,0));\nif (!$cl=~/\\-maxid\\=/){$\
-maxid=95;}\nif (!$cl=~/\\-minid\\=/){$minid=35;}\n\
-if (!$cl=~/\\-mincov\\=/){$mincov=80;}\n\n\n\nif (\
-$mode eq \"seq_msa\")\n  {\n    &seq2msa($mode,&my\
-_get_opt ( $cl, \"-infile=\",1,1, \"-method=\",1,2\
-, \"-param=\",0,0, \"-outfile=\",1,0));\n  }\n\nel\
-sif ( $mode eq \"thread_pair\")\n  {\n    &seq2thr\
-ead_pair($mode,&my_get_opt ( $cl, \"-infile=\",1,1\
-, \"-pdbfile1=\",1,1, \"-method=\",1,2,\"-param=\"\
-,0,0, \"-outfile=\",1,0, ));\n  }\nelsif ( $mode e\
-q \"pdbid_pair\")\n  {\n    &seq2pdbid_pair($mode,\
-&my_get_opt ( $cl, \"-pdbfile1=\",1,0, \"-pdbfile2\
-=\",1,0, \"-method=\",1,2,\"-param=\",0,0, \"-outf\
-ile=\",1,0, ));\n  }\nelsif ( $mode eq \"pdb_pair\\
-")\n  {\n    &seq2pdb_pair($mode,&my_get_opt ( $cl\
-, \"-pdbfile1=\",1,1, \"-pdbfile2=\",1,1, \"-metho\
-d=\",1,2,\"-param=\",0,0, \"-outfile=\",1,0, ));\n\
-  }\nelsif ( $mode eq \"profile_pair\")\n  {\n    \
- &seq2profile_pair($mode,&my_get_opt ( $cl, \"-pro\
-file1=\",1,1, \"-profile2=\",1,1, \"-method=\",1,2\
-,\"-param=\",0,0, \"-outfile=\",1,0, ));\n  }\nels\
-if ( $mode eq \"pdb_template\")\n  {\n    &blast2p\
-db_template ($mode,&my_get_opt ( $cl, \"-infile=\"\
-,1,1, \"-database=\",1,0, \"-method=\",1,0, \"-out\
-file=\",1,0));\n  }\nelsif ( $mode eq \"profile_te\
-mplate\")\n  {\n    &psiblast2profile_template ($m\
-ode,&my_get_opt ( $cl, \"-infile=\",1,1, \"-databa\
-se=\",1,0, \"-method=\",1,0, \"-outfile=\",1,0));\\
-n  }\nelsif ( $mode eq \"psiprofile_template\")\n \
- {\n    &psiblast2profile_template ($mode,&my_get_\
-opt ( $cl, \"-infile=\",1,1, \"-database=\",1,0, \\
-"-method=\",1,0, \"-outfile=\",1,0));\n  }\nelsif \
-( $mode eq \"RNA_template\")\n  {\n    &seq2RNA_te\
-mplate ($mode,&my_get_opt ( $cl, \"-infile=\",1,1,\
- \"-outfile=\",1,0));\n  }\nelsif ( $mode eq \"tm_\
-template\")\n  {\n    &seq2tm_template ($mode,&my_\
-get_opt ( $cl, \"-infile=\",1,1,\"-arch=\",1,1,\"-\
-psv=\",1,1, \"-outfile=\",1,0,));\n  }\nelsif ( $m\
-ode eq \"psitm_template\")\n  {\n    &seq2tm_templ\
-ate ($mode,&my_get_opt ( $cl, \"-infile=\",1,1,\"-\
-arch=\",1,1,\"-psv=\",1,1, \"-outfile=\",1,0,));\n\
-  }\nelsif ( $mode eq \"ssp_template\")\n  {\n    \
-&seq2ssp_template ($mode,&my_get_opt ( $cl, \"-inf\
-ile=\",1,1,\"-seq=\",1,1,\"-obs=\",1,1, \"-outfile\
-=\",1,0));\n  }\nelsif ( $mode eq \"psissp_templat\
-e\")\n  {\n    &seq2ssp_template ($mode,&my_get_op\
-t ( $cl, \"-infile=\",1,1,\"-seq=\",1,1,\"-obs=\",\
-1,1, \"-outfile=\",1,0));\n  }\nelsif ( $mode eq \\
-"rna_pair\")\n{\n    &seq2rna_pair($mode,&my_get_o\
-pt ( $cl, \"-pdbfile1=\",1,1, \"-pdbfile2=\",1,1, \
-\"-method=\",1,2,\"-param=\",0,0, \"-outfile=\",1,\
-0, ));\n}elsif ( $mode eq \"calc_rna_template\")\n\
-{\n    &calc_rna_template($mode,&my_get_opt ( $cl,\
- \"-infile=\",1,1,\"-pdbfile=\",1,1, \"-outfile=\"\
-,1,0));\n}\nelse\n  {\n    print STDERR \"$mode is\
- an unknown mode of tc_generic_method.pl [FATAL]\\\
-n\";\n  }\nmyexit ($EXIT_SUCCESS);\nsub seq2ssp_te\
-mplate\n  {\n  my ($mode, $infile,$gor_seq,$gor_ob\
-s,$outfile)=@_;\n  my %s, %h;\n  my $result;\n  my\
- (@profiles);\n  &set_temporary_dir (\"set\",$infi\
-le,\"seq.pep\");\n  %s=read_fasta_seq (\"seq.pep\"\
-);\n\n  \n  open (R, \">result.aln\");\n  \n  #pri\
-nt stdout \"\\n\";\n  foreach $seq (keys(%s))\n   \
- {\n      \n      open (F, \">seqfile\");\n      $\
-s{$seq}{seq}=uc$s{$seq}{seq};\n      print (F \">$\
-s{$seq}{name}\\n$s{$seq}{seq}\\n\");\n      close \
-(F);\n      $lib_name=\"$s{$seq}{name}.ssp\";\n   \
-   $lib_name=&clean_file_name ($lib_name);\n      \
-\n      if ($mode eq \"ssp_template\"){&seq2gor_pr\
-ediction ($s{$seq}{name},$s{$seq}{seq}, \"seqfile\\
-", $lib_name,$gor_seq, $gor_obs);}\n      elsif ($\
-mode eq \"psissp_template\")\n {\n       &seq2msa_gor_\
-prediction ($s{$seq}{name},$s{$seq}{seq},\"seqfile\
-\", $lib_name,$gor_seq, $gor_obs);\n   }\n    \n    \
-  if ( !-e $lib_name)\n        {\n       print STDERR (\"GORI\
-V failed to compute the secondary structure of $s{\
-$seq}{name} [FATAL:$mode/$method/$program]\\n\");\\
-n        myexit ($EXIT_FAILURE);\n     }\n      else\n {\n     \
-  print stdout \"\\tProcess: >$s{$seq}{name} _E_ $\
-lib_name \\n\";\n        print R \">$s{$seq}{name} _E_ \
-$lib_name\\n\";\n      }\n      unshift (@profiles, $li\
-b_name);\n    }\n  close (R);\n  &set_temporary_di\
-r (\"unset\",$mode, $method,\"result.aln\",$outfil\
-e, @profiles);\n}\n\nsub seq2tm_template\n  {\n  m\
-y ($mode, $infile,$arch,$psv,$outfile)=@_;\n  my %\
-s, %h;\n  my $result;\n  my (@profiles);\n  &set_t\
-emporary_dir (\"set\",$infile,\"seq.pep\");\n  %s=\
-read_fasta_seq (\"seq.pep\");\n\n  \n  open (R, \"\
->result.aln\");\n  \n  #print stdout \"\\n\";\n  f\
-oreach $seq (keys(%s))\n    {\n      open (F, \">s\
-eqfile\");\n      print (F \">$s{$seq}{name}\\n$s{\
-$seq}{seq}\\n\");\n      close (F);\n      $lib_na\
-me=\"$s{$seq}{name}.tmp\";\n      $lib_name=&clean\
-_file_name ($lib_name);\n\n      if ($mode eq \"tm\
-_template\")\n {\n       &safe_system (\"t_coffee -oth\
-er_pg fasta_seq2hmmtop_fasta.pl -in=seqfile -out=$\
-lib_name -arch=$arch -psv=$psv\");\n   }\n      elsi\
-f ( $mode eq \"psitm_template\")\n     {\n       &seq2msa_\
-tm_prediction ($s{$seq}{name},$s{$seq}{seq},\"seqf\
-ile\", $lib_name,$arch, $psv);\n       }\n      if ( !-e\
- $lib_name)\n  {\n       print STDERR (\"RNAplfold fail\
-ed to compute the secondary structure of $s{$seq}{\
-name} [FATAL:$mode/$method/$program]\\n\");\n    my\
-exit ($EXIT_FAILURE);\n        }\n      else\n {\n       prin\
-t stdout \"\\tProcess: >$s{$seq}{name} _T_ $lib_na\
-me\\n\";\n       print R \">$s{$seq}{name} _T_ $lib_na\
-me\\n\";\n     }\n      unshift (@profiles, $lib_name)\
-;\n    }\n  close (R);\n  &set_temporary_dir (\"un\
-set\",$mode, $method,\"result.aln\",$outfile, @pro\
-files);\n}\n\nsub seq2RNA_template\n  {\n  my ($mo\
-de, $infile,$outfile)=@_;\n  my %s, %h, ;\n  my $r\
-esult;\n  my (@profiles);\n  &set_temporary_dir (\\
-"set\",$infile,\"seq.pep\");\n  %s=read_fasta_seq \
-(\"seq.pep\");\n\n  \n  open (R, \">result.aln\");\
-\n  \n  #print stdout \"\\n\";\n  foreach $seq (ke\
-ys(%s))\n    {\n      open (F, \">seqfile\");\n   \
-   print (F \">$s{$seq}{name}\\n$s{$seq}{seq}\\n\"\
-);\n      close (F);\n      $lib_name=\"$s{$seq}{n\
-ame}.rfold\";\n      $lib_name=&clean_file_name ($\
-lib_name);\n      &safe_system (\"t_coffee -other_\
-pg RNAplfold2tclib.pl -in=seqfile -out=$lib_name\"\
-);\n      \n      if ( !-e $lib_name)\n        {\n       prin\
-t STDERR (\"RNAplfold failed to compute the second\
-ary structure of $s{$seq}{name} [FATAL:$mode/$meth\
-od/$program]\\n\");\n    myexit ($EXIT_FAILURE);\n     \
-}\n      else\n        {\n       print stdout \"\\tProcess: >\
-$s{$seq}{name} _F_ $lib_name\\n\";\n     print R \">\
-$s{$seq}{name} _F_ $lib_name\\n\";\n   }\n      unsh\
-ift (@profiles, $lib_name);\n    }\n  close (R);\n\
-  &set_temporary_dir (\"unset\",$mode, $method,\"r\
-esult.aln\",$outfile, @profiles);\n}\n\nsub psibla\
-st2profile_template \n  {\n  my ($mode, $infile, $\
-db, $method, $outfile)=@_;\n  my %s, %h, ;\n  my (\
-$result,$psiblast_output,$profile_name,@profiles);\
-\n  \n  &set_temporary_dir (\"set\",$infile,\"seq.\
-pep\");\n  %s=read_fasta_seq (\"seq.pep\");\n  ope\
-n (R, \">result.aln\");\n  \n  #print stdout \"\\n\
-\";\n  foreach $seq (keys(%s))\n    {\n      open \
-(F, \">seqfile\");\n      print (F \">$A\\n$s{$seq\
-}{seq}\\n\");\n      close (F);\n      $psiblast_o\
-utput=&run_blast ($s{$seq}{name},$method, $db, \"s\
-eqfile\",\"outfile\");\n      if ( -e $psiblast_ou\
-tput)\n        {\n       %profile=blast_xml2profile($s{$seq}{\
-name}, $s{$seq}{seq},$maxid, $minid,$mincov,$psibl\
-ast_output);\n   unlink ($psiblast_output);\n    \n\
-         $profile_name=\"$s{$seq}{name}.prf\";\n         $prof\
-ile_name=&clean_file_name ($profile_name);\n     uns\
-hift (@profiles, $profile_name);\n       output_profil\
-e ($profile_name, %profile);\n   print stdout \"\\\
-tProcess: >$s{$seq}{name} _R_ $profile_name [$prof\
-ile{n} Seq.] [$SERVER/blast/$db][$CACHE_STATUS]\\n\
-\";\n    print R \">$s{$seq}{name} _R_ $profile_nam\
-e\\n\";\n      }\n    }\n  close (R);\n  &set_temporary\
-_dir (\"unset\",$mode, $method,\"result.aln\",$out\
-file, @profiles);\n}\n\nsub blast2pdb_template \n \
- {\n  my ($mode, $infile, $db, $method, $outfile)=\
-@_;\n  my %s, %h, ;\n  my ($result,$blast_output);\
-\n  &set_temporary_dir (\"set\",$infile,\"seq.pep\\
-");\n  %s=read_fasta_seq (\"seq.pep\");\n  open (R\
-, \">result.aln\");\n  \n \n  #print stdout \"\\n\\
-";\n  foreach $seq (keys(%s))\n    {\n      open (\
-F, \">seqfile\");\n      print (F \">$A\\n$s{$seq}\
-{seq}\\n\");\n      close (F);\n      \n      $bla\
-st_output=&run_blast ($s{$seq}{name},$method, $db,\
- \"seqfile\",\"outfile\");\n      %p=blast_xml2pro\
-file($s{$seq}{name}, $s{$seq}{seq},$maxid, $minid,\
-$mincov,$blast_output);\n      unlink ($blast_outp\
-ut);\n      if ($p{n}>1)\n     {\n       $pdbid=id2pdbid($\
-p{1}{identifyer});\n     if ( length ($pdbid)>5){$pd\
-bid=id2pdbid($p{1}{definition});}\n      \n      print R\
- \">$s{$seq}{name} _P_ $pdbid\\n\";\n    print stdo\
-ut \"\\tProcess: >$s{$seq}{name} _P_ $pdbid [$SERV\
-ER/blast/$db][$CACHE_STATUS]\\n\";\n   }\n      else\
-\n     {\n       print R \">$s{$seq}{name}\\n\";\n       print\
- stdout \"\\tProcess: >$s{$seq}{name} _P_ No Templ\
-ate Found [$SERVER/blast/$db][$CACHE_STATUS]\\n\";\
-\n     }\n    }\n  close (R);\n  &set_temporary_dir (\\
-"unset\",$mode, $method,\"result.aln\",$outfile);\\
-n}\nsub blast_msa\n  {\n    my ($infile,$outfile)=\
-@_;\n    my ($a, %seq);\n    %s1=&read_fasta_seq (\
-$infile);\n    foreach $s (keys (%s1))\n      {\n      \
-$i=$s1{$s}{order};\n   $s{$i}{name}=$s;\n      $s{$i}{seq\
-}=$s1{$s}{seq};\n      $s{$i}{len}=length( $s{$i}{seq})\
-;\n    $s{n}++;\n      }\n    `formatdb -i $infile`;\\
-n    `blastpgp -i $infile -d $infile -m7 -j4 > io`\
-;\n    &set_blast_type (\"io\");\n    \n    %FB=&x\
-ml2tag_list (\"io\", \"BlastOutput\");\n    \n    \
-open (F, \">$outfile\");\n    print F \"! TC_LIB_F\
-ORMAT_01\\n\";\n    print F \"$s{n}\\n\";\n    for\
- ( $a=0; $a<$s{n}; $a++)\n      {\n    print F \"$s{$\
-a}{name} $s{$a}{len} $s{$a}{seq}\\n\";\n      }\n \
-   for ( $a=0; $a<$FB{n}; $a++)\n      {\n     %p=blas\
-t_xml2profile ($s{$a}{name}, $s{$a}{seq},100, 0, 0\
-, $FB{$a}{body});\n    for ($b=1; $b<$p{n}; $b++)\n     \
- {\n       my $l=length ($p{$b}{Qseq});\n          my $hi\
-t=$p{$b}{definition};\n            my $Qstart=$p{$b}{Qsta\
-rt};\n     my $Hstart=$p{$b}{Hstart};\n            my $id\
-entity=$p{$b}{identity};\n         my @lrQ=split (//,$\
-p{$b}{Qseq});\n            my @lrH=split (//,$p{$b}{Hseq}\
-);\n       my $i= $s1{$s{$a}{name}}{order}+1;\n            \
-my $j= $s1{$hit}{order}+1;\n       #if ( $j==$i){nex\
-t;}\n      printf F \"# %d %d\\n\", $i, $j;\n      #\
-  print  F \"\\n$p{$b}{Qseq} ($Qstart)\\n$p{$b}{Hs\
-eq} ($Hstart)\";\n         for ($c=0; $c<$l; $c++)\n    \
-     {\n               my $rQ=$lrQ[$c];\n              my $rH=$lrH[$c];\n              \
-my $n=0;\n             \n              if ($rQ ne \"-\"){$n++, $Qstart++;\
-}\n            if ($rH ne \"-\"){$n++; $Hstart++;}\n           \n              if\
- ( $n==2)\n              {\n               printf F \"\\t%d %d %d\\n\\
-", $Qstart-1, $Hstart-1,$identity;\n             }\n         \
-}\n      }\n      }\n    print F \"! SEQ_1_TO_N\\n\";\
-\n    close (F);\n    return $output;\n  \n  }\n\n\
-sub seq2msa\n  {\n    my ($mode, $infile, $method,\
- $param, $outfile)=@_;\n    &set_temporary_dir (\"\
-set\",$infile,\"seq.pep\");\n    $param.=\" >/dev/\
-null 2>&1 \";\n    \n    #make sure test.pep is in\
- FASTA\n    &safe_system (\"t_coffee -other_pg seq\
-_reformat -in seq.pep -output fasta_seq > x\");\n \
-   `mv x seq.pep`;\n    \n    if ( $method eq \"bl\
-astpgp\")\n      {\n   &blast_msa (\"seq.pep\", \"re\
-sult.aln\");\n      }\n    elsif ( $method eq \"mu\
-scle\")\n      {\n     `muscle -in seq.pep -out result\
-.aln $param`;\n      }\n    elsif ( $method eq \"p\
-robcons\")\n      {\n  `probcons seq.pep >result.al\
-n 2>/dev/null`;\n      }\n    elsif ( $method eq \\
-"mafft\")\n      {\n   `mafft --quiet --localpair --\
-maxiterate 1000 seq.pep> result.aln  2>/dev/null`\\
-n      }\n    elsif ( $method=~/prank/)\n      {\n\
-       `$method -d=seq.pep -o=result.aln -quiet 2>/dev/n\
-ull`;\n        `mv result.aln.1.fas result.aln`;\n      }\
-\n    else\n      {\n  `$method -infile=seq.pep -ou\
-tfile=result.aln`;\n      }\n    \n    &set_tempor\
-ary_dir (\"unset\",$mode, $method,\"result.aln\",$\
-outfile);\n    myexit ($EXIT_SUCCESS);\n  }\n\nsub\
- seq2thread_pair\n  {\n    my ($mode, $infile, $pd\
-bfile1, $method, $param, $outfile)=@_;\n    &set_t\
-emporary_dir (\"set\",$infile,\"seq.pep\",$pdbfile\
-1,\"struc.pdb\");\n    if ($method eq \"fugueali\"\
-)\n      {\n   #Env Variable that need to be defined\
- for Fugue\n   if (!$ENV{FUGUE_LIB_LIST}){$ENV{FUGUE\
-_LIB_LIST}=\"DUMMY\";}\n       if (!$ENV{HOMSTRAD_PATH})\
-  {$ENV{HOMSTRAD_PATH}=\"DUMMY\";}\n   if (!$ENV{HOM\
-S_PATH}){$ENV{HOMS_PATH}=\"DUMMY\";}\n \n      `joy str\
-uc.pdb >x 2>x`;\n      &check_file(\"struc.tem\", \"Joy\
- failed [FATAL:$program/$method]\");\n `melody -t \
-struc.tem >x 2>x`;\n   &check_file(\"struc.tem\", \"\
-Melody failed [FATAL:$program/$method]\");\n   `fugu\
-eali -seq seq.pep -prf struc.fug -print > tmp_resu\
-lt.aln`;\n     \n      &check_file(\"tmp_result.aln\", \"Fu\
-gue failed [FATAL:$program/$method]\");\n      &safe_sy\
-stem (\"t_coffee -other_pg seq_reformat -in tmp_re\
-sult.aln -output fasta_aln >result.aln\");\n      \
-}\n    elsif ( $method eq \"t_coffee\")\n      {\n\
-       &safe_system (\"t_coffee -in Pstruc.pdb Sseq.pep \
-Mslow_pair -outfile result.aln -quiet\");\n      }\
-\n    else\n      {\n  &safe_system (\"$method -inf\
-ile=seq.pep -pdbfile1=struc.pdb -outfile=result.al\
-n $param>x 2>x\");\n      }\n    &set_temporary_di\
-r (\"unset\",$mode,$method,\"result.aln\",$outfile\
-);\n    myexit ($EXIT_SUCCESS);\n  }\nsub seq2pdbi\
-d_pair\n  {\n    my ($mode, $pdbfile1, $pdbfile2, \
-$method, $param, $outfile)=@_;\n    my ($name);\n\\
-n    \n    &set_temporary_dir (\"set\");\n    $nam\
-e=$pdbfile1.\" \".$pdbfile2;\n\n    if (    &cache\
-_file(\"GET\",\"\",\"$name\",\"$method\",\"dali\",\
-$outfile,\"EBI\"))\n      {return $outfile;}\n    \
-else\n      {\n        if ($method eq \"dalilite\")\n    {\
-\n         $pdbfile1=~/(....)(.)/;\n       $id1=$1; $c1=\
-$2;\n      \n      $pdbfile2=~/(....)(.)/;\n       $id\
-2=$1; $c2=$2;\n            \n      $command=\"t_coffee -ot\
-her_pg dalilite.pl --pdb1 $id1 --chainid1 $c1 --pd\
-b2 $id2 --chainid2 $c2 --email=$EMAIL  >dali_stder\
-r 2>dali_stderr\";\n       $dali=`$command`;\n     \\
-n          open (F, \"dali_stderr\");\n            while (<F>)\
-\n           {\n               if ( /JobId: dalilite-(\\S+)/)\n                {\\
-n                $jobid=$1;\n          }\n           }\n           close (F);\n        \
-    unlink (\"dali_stderr\");\n            \n      $output\
-1=\"dalilite-$jobid.txt\";\n       if ( -e $output1)\
-\n           {\n               unlink ($output1);\n            &url2file (\"h\
-ttp://www.ebi.ac.uk/Tools/es/cgi-bin/jobresults.cg\
-i/dalilite/dalilite-$jobid/aln.html\", \"output2\"\
-);\n           \n              if ( -e \"output2\")\n            {\n               my ($\
-seq1, $seq2);\n                    $seq1=$seq2=\"\";\n             \n          \
-    open (F, \"output2\");\n               while (<F>)\n                \
-     {\n                       $l=$_;\n                        if ( $l=~/Query\\s+(\\S+)/)\\
-n                        {\n                       $seq1.=$1;\n                          }\n                   elsif ( $l=\
-~/Sbjct\\s+(\\S+)/)\n                    {\n                       $seq2.=$1;\n                \
-         }\n                 }\n                   close (F);\n                    unlink (\\
-"output2\");\n             if ($seq1 ne \"\" && $seq2 ne \
-\"\")\n                      {\n                       $output3=\">$A\\n$seq1\\n>$B\\
-\n$seq2\\n\";\n                        $output3=~s/\\./-/g;\n                  open (F\
-, \">result.aln\");\n                  print F \"$output3\";\n                 \
-close (F);\n                 }\n                 }\n         }\n         }\n    \
-  }\n    &cache_file(\"SET\",\"\",\"$name\",\"$met\
-hod\",\"dali\",\"result.aln\",\"EBI\");\n    &set_\
-temporary_dir (\"unset\",$mode, $method, \"result.\
-aln\",$outfile);\n    myexit ($EXIT_SUCCESS);\n  }\
-\nsub seq2pdb_pair\n  {\n    my ($mode, $pdbfile1,\
- $pdbfile2, $method, $param, $outfile)=@_;\n    \n\
-    &set_temporary_dir (\"set\",$pdbfile1,\"pdb1.p\
-db\",$pdbfile2,\"pdb2.pdb\");\n    if ($method eq \
-\"t_coffee\")\n      {\n       &safe_system (\"t_coffee \
--in Ppdb1.pdb Ppdb2.pdb -quiet -outfile=result.aln\
-\");\n      }\n    elsif ( $method eq \"TMalign\")\
-\n      {\n    if ( &safe_system (\"TMalign pdb1.pdb \
-pdb2.pdb >tmp1\")==$EXIT_SUCCESS)\n      {\n       `tai\
-l -4 tmp1 > tmp2`;\n       \n      open (F, \"tmp2\")\
-;\n        while (<F>)\n             {\n               unshift(@l, $_);\\
-n            }\n           close (F);\n            open (F, \">resul\
-t.aln\");\n        $l[3]=~s/[^a-zA-Z0-9-]/\\-/g;\n       \
-  $l[1]=~s/[^a-zA-Z0-9-]/\\-/g;\n          print F \">$\
-A\\n$l[3]\\n>$B\\n$l[1]\\n\";\n            close (F);\n         \
- }\n   else\n    {\n       print \"ERROR: TMalign faile\
-d to align the considered structures[tc_generic_me\
-thod.pl]\\n\";\n           `rm result.aln >/dev/null 2>/\
-dev/null`;\n     }\n      }\n    elsif ( $method eq \
-\"mustang\")\n      {\n        if ( &safe_system (\"musta\
-ng -i pdb1.pdb pdb2.pdb -F fasta >/dev/null 2>/dev\
-/null\")==$EXIT_SUCCESS)\n       {\n       `mv results.a\
-fasta result.aln`;\n     }\n   else\n    {\n       print \
-\"ERROR: mustang failed to align the considered st\
-ructures[tc_generic_method.pl]\\n\";\n     `rm res\
-ult.aln >/dev/null 2>/dev/null`;\n       }\n      }\n \
-   else\n      {\n     if ( &safe_system (\"$method -p\
-dbfile1=pdb1.pep -pdbfile2=pdb2.pdb -outfile=resul\
-t.aln $param>x 2>x\")==$EXIT_SUCCESS)\n          {\n       \
-`mv results.afasta result.aln`;\n        }\n   else\n    {\
-\n         print \"ERROR: $method failed to align the \
-considered structures[tc_generic_method.pl]\\n\";\\
-n          `rm result.aln >/dev/null 2>/dev/null`;\n     \
-}\n      }\n    &set_temporary_dir (\"unset\",$mod\
-e, $method, \"result.aln\",$outfile);\n    myexit \
-($EXIT_SUCCESS);\n  }\n\nsub seq2profile_pair\n  {\
-\n    my ($mode, $profile1, $profile2, $method, $p\
-aram, $outfile)=@_;\n    \n    \n    if ($method e\
-q \"clustalw\")\n      {\n     &set_temporary_dir (\"s\
-et\",$profile1,\"prf1.aln\",$profile2,\"prf2.aln\"\
-);\n   `clustalw -profile1=prf1.aln -profile2=prf2.a\
-ln -outfile=result.aln`;\n     &set_temporary_dir (\"u\
-nset\",$mode, $method, \"result.aln\",$outfile);\n\
-      }\n    elsif ( $method eq \"hhalign\")\n    \
-  {\n  hhalign ( $profile1,$profile2,$outfile,$para\
-m);\n      }\n    else\n      {\n      \n      `$method -pro\
-file1=prf1.aln -profile2=prf2.aln -outfile=result.\
-aln $param>x 2>x`;\n      }\n   \n    myexit ($EXI\
-T_SUCCESS);\n  }\n\nsub pg_is_installed\n  {\n    \
-my @ml=@_;\n    my $r, $p, $m;\n    my $supported=\
-0;\n    \n    my $p=shift (@ml);\n    $r=`which $p\
- 2>/dev/null`;\n    if ($r eq \"\"){return 0;}\n  \
-  else {return 1;}\n  }\nsub check_pg_is_installed\
-\n  {\n    my @ml=@_;\n    my $r=&pg_is_installed \
-(@ml);\n    if (!$r)\n      {\n        print STDERR \"\\n\
-Program $p Supported but Not Installed on your sys\
-tem [FATAL:tc_generic_method]\\n\";\n  myexit ($EXI\
-T_FAILURE);\n      }\n    else\n      {\n      return 1\
-;\n      }\n  }\nsub set_temporary_dir\n  {\n    m\
-y @list=@_;\n    my $dir_mode, $a, $mode, $method;\
-\n\n    $dir_mode=shift (@list);\n\n    \n    if (\
- $dir_mode eq \"set\")\n      {\n      $initial_dir=cwd\
-();\n  if ( !$tmp_dir)\n         {\n       srand;\n        $ra\
-nd=rand (100000);\n        $tmp_dir=\"$TMPDIR/tmp4tco\
-ffee_profile_pair_dir_$$_P_$rand\";\n    }\n   if ( !\
--d $tm_dir)\n    {\n       `mkdir $tmp_dir`;\n   }\n   \
-\n     for ( $a=0; $a<=$#list; $a+=2)\n              {\n               `cp\
- $list[$a] $tmp_dir/$list[$a+1]`;\n          }\n       chdi\
-r $tmp_dir;\n      }\n    elsif ( $dir_mode eq \"u\
-nset\")\n      {\n     $mode=shift (@list);\n  $method=\
-shift (@list);\n       \n      if (!-e $list[0])\n       {\n       \
-print STDERR (\"Program $method failed to produce \
-$list[1] [FATAL:$mode/$method/$program]\\n\");\n        \
-   myexit ($EXIT_FAILURE);\n     }\n   else\n    {\n     \
-  chdir $initial_dir;\n            # `t_coffee -other_pg \
-seq_reformat -in $tmp_dir/$list[0] -output fasta_a\
-ln -out $tmp_dir/result2.aln`;\n           `cp $tmp_dir/\
-$list[0] $tmp_dir/result2.aln`;\n          if ( $list[1\
-] eq \"stdout\")\n           {\n               open (F, \"$tmp_dir/\
-result2.aln\");\n              while (<F>){print $_;}close(F);\
-\n           }\n           else\n            {\n               `mv $tmp_dir/re\
-sult2.aln $list[1]`;\n       }\n           shift (@list)\
-; shift (@list);\n         foreach $f (@list)\n              \
-{\n            `mv $tmp_dir/$f .`;\n         }\n         }\n      }\\
-n  }\nsub clean_dir\n  {\n    my $dir=@_[0];\n    \
-if ( !-d $dir){return ;}\n    elsif (!($dir=~/tmp/\
-)){return ;}#safety check 1\n    elsif (($dir=~/\\\
-*/)){return ;}#safety check 2\n    else\n      {\n\
-       `rm -rf $dir`;\n      }\n    return;\n  }\n\nsub \
-myexit\n  {\n    my $code=@_[0];\n    &clean_dir (\
-$tmp_dir);\n    exit ($code);\n  }\n\nsub my_get_o\
-pt\n  {\n    my @list=@_;\n    my $cl, $a, $argv, \
-@argl;\n    \n    @argl=();\n    $cl=shift @list;\\
-n    for ( $a=0; $a<=$#list; $a+=3)\n      {\n $op\
-tion=$list[$a];\n      $optional=$list[$a+1];\n        $status\
-=$list[$a+2];\n        $argv=\"\";\n   if ($cl=~/$option(\\\
-S+)/){$argv=$1;}\n     @argl=(@argl,$argv);\n  \n      \n      #$\
-optional:0=>optional\n #$optional:1=>must be set\n\
-       #$status: 0=>no requirement\n   #$status: 1=>must b\
-e an existing file\n   #$status: 2=>must be an insta\
-lled package\n \n\n    if ($optional==0){;}\n  elsif (\
- $optional==1 && $argv eq \"\")\n        {\n       print \
-STDERR \"ERROR: Option $option must be set [FATAL:\
-$program/$mode/$method]\\n\";\n            myexit ($EXIT_\
-FAILURE);\n      }\n   if ($status==0){;}\n    elsif ($sta\
-tus ==1 && $argv ne \"\" && !-e $argv)\n         {\n      \
- print STDERR \"ERROR: File $argv must exist [FATA\
-L:$program/$mode/$method]\\n\";\n          myexit ($EXI\
-T_FAILURE);\n    }\n   elsif ( $status==2 && $argv ne\
- \"\" && &check_pg_is_installed ($argv)==0)\n    {\\
-n          print STDERR \"ERROR: $argv is not installed\
- [FATAL:$program/$mode/$method]\\n\";\n            myexit\
- ($EXIT_FAILURE);\n      }\n      }\n\n    return @ar\
-gl;\n    }\n\nsub check_file \n  {\n    my ($file,\
- $msg)=@_;\n\n    if ( !-e $file)\n      {\n   print\
- \"\\n$msg\\n\";\n     myexit ($EXIT_FAILURE);\n      \
-}\n    }\nsub hhalign\n  {\n    my ($aln1, $aln2, \
-$outfile, $param)=@_;\n    my $h1, $h2;\n    \n   \
- $h{0}{index}=0;\n    $h{1}{index}=1;\n    \n    $\
-h{0}{aln}=$aln1;\n    $h{1}{aln}=$aln2;\n\n   \n\n\
-    %{$h{0}}=aln2psi_profile (%{$h{0}});\n    %{$h\
-{1}}=aln2psi_profile (%{$h{1}});\n\n    $param=~s/\
-#S/ /g;\n    $param=~s/#M/\\-/g;\n    $param=~s/#E\
-/\\=/g;\n    \n\n    \n    $command=\"hhalign -i $\
-h{0}{a3m} -t $h{1}{a3m} -tc $outfile.tmp -rank 1 -\
-mapt 0 $param\";\n    `$command`;\n    \n  #  `hha\
-lign -i $h{0}{a3m} -t $h{1}{a3m} -tc $outfile.tmp \
--rank 1 -mapt 0 -gapf 0.8 -gapg 0.8`;\n    \n\n   \
- # To run global use the following\n    \n    open\
- (I, \"$outfile.tmp\");\n    open (O, \">$outfile\\
-");\n    $h{0}{cons}=s/\\./x/g;\n    $h{1}{cons}=s\
-/\\./x/g;\n\n    print O \"! TC_LIB_FORMAT_01\\n2\\
-\n$h{0}{name} $h{0}{len} $h{0}{seq}\\n$h{1}{name} \
-$h{1}{len} $h{1}{seq}\\n#1 2\\n\";\n    \n    whil\
-e (<I>)\n      {\n     if (/(\\d+)\\s+(\\d+)\\s+(\\d+)\
-/)\n     {\n       print O \"\\t$h{0}{$1}\\t$h{1}{$2}\\
-\t$3\\n\";\n     }\n      }\n    print O \"! SEQ_1_T\
-O_N\\n\";\n\n    close (O);\n    close (I);\n  }\n\
-\nsub aln2psi_profile\n  {\n    my (%h)=@_;\n    m\
-y ($aln,$i,$hv, $a, @c, $n);\n   \n    $i=$h{index\
-};\n    $aln=$h{aln};\n\n    `cp $aln $$.hhh_aln`;\
-\n    $command=\"t_coffee -other_pg seq_reformat -\
-in $aln -output hasch\";\n    $hv=`$command`;chomp\
- ($hv);\n    \n    $h{a2m}=\"$tmp/$hv.tmp4hhpred.a\
-2m\";\n    $h{a3m}=\"$tmp/$hv.tmp4hhpred.a3m\";\n \
-   if ( -e $h{a3m}){;}\n    else\n      {\n    `hhcon\
-sensus  -M 50 -i $h{aln} -oa2m $h{a2m}`;\n     if (!-e\
- $h{a2m})\n      {\n       print STDERR \"Program tc_ge\
-neric_method.pl FAILED to run:\\n\\thhconsensus  -\
-M 50 -i $h{aln} -oa2m $h{a2m}\";\n         myexit ($EX\
-IT_FAILURE);\n   }\n   \n      `hhconsensus  -M 50 -i $h{\
-aln} -oa3m $h{a3m}`;\n if (!-e $h{a3m})\n        {\n     \
-  print STDERR \"Program tc_generic_method.pl FAIL\
-ED to run:\\n\\thhconsensus  -M 50 -i $h{aln} -oa3\
-m $h{a3m}\";\n     myexit ($EXIT_FAILURE);\n     }\n\
-       `buildali.pl $h{a3m} -n 1`;\n      }\n    \\
-n    \n    $h{a2m_seq}=`head -n 2 $h{a2m} | grep -\
-v \">\"`;chomp ($h{a2m_seq});\n    $h{a3m_seq}=`he\
-ad -n 2 $h{a3m} | grep -v \">\"`;chomp ($h{a3m_seq\
-});\n    $h{cons}=$h{a2m_seq};\n    $h{seq}=`head \
--n 2 $h{aln} | grep -v \">\"`;chomp ($h{seq});\n  \
-  \n    \n\n    @c=split (//, $h{cons});\n    $h{l\
-en}=$#c+1;\n    for ($n=0,$a=0, $b=0; $a<$h{len};$\
-a++)\n      {\n        if ( $c[$a]=~/[A-Z]/)\n   {\n       \
-$h{++$n}=++$b;\n\n       }\n   elsif ( $c[$a]=~/[a-z\\.]\
-/)\n     {\n       ++$b;\n       }\n      }\n    \n    $na\
-me=`head -n 2 $h{aln} | grep \">\"`;\n    $name=~/\
-\\>(\\S+)/;\n    $h{name}=$1;\n    \n    `cp $h{a2\
-m} $i.a2m`;\n    `cp $h{a3m} $i.a3m`;\n    `cp $h{\
-aln} $i.hh_aln`;\n    \n    return %h;\n  }\n\nsub\
- read_fasta_seq \n  {\n    my $f=@_[0];\n    my %h\
-seq;\n    my (@seq, @com, @name);\n    my ($a, $s,\
-$nseq);\n\n    open (F, $f);\n    while (<F>)\n   \
-   {\n $s.=$_;\n      }\n    close (F);\n\n    \n \
-   @name=($s=~/>(\\S*).*\\n[^>]*/g);\n    \n    @s\
-eq =($s=~/>.*.*\\n([^>]*)/g);\n    @com =($s=~/>\\\
-S*(.*)\\n([^>]*)/g);\n\n    \n    $nseq=$#name+1;\\
-n    \n    for ($a=0; $a<$nseq; $a++)\n      {\n       m\
-y $s;\n        my $n=$name[$a];\n      $hseq{$n}{name}=$n;\n   $\
-seq[$a]=~s/[^A-Za-z]//g;\n     $hseq{$n}{order}=$a;\n  \
-$hseq{$n}{seq}=$seq[$a];\n     $hseq{$n}{com}=$com[$a]\
-;\n    \n      }\n    return %hseq;\n  }\n\nsub file_\
-contains \n  {\n    my ($file, $tag, $max)=(@_);\n\
-    my ($n);\n    $n=0;\n    \n    if ( !-e $file \
-&& ($file =~/$tag/)) {return 1;}\n    elsif ( !-e \
-$file){return 0;}\n    else \n      {\n        open (FC, \
-\"$file\");\n  while ( <FC>)\n   {\n       if ( ($_=~\
-/$tag/))\n           {\n               close (FC);\n           return 1;\n      \
-     }\n           elsif ($max && $n>$max)\n         {\n               \
-close (FC);\n          return 0;\n           }\n           $n++;\n      \
- }\n      }\n    close (FC);\n    return 0;\n  }\n\
-           \n    \nsub file2string\n  {\n    my $f=@_[0];\
-\n    my $string, $l;\n    open (F,\"$f\");\n    w\
-hile (<F>)\n      {\n\n        $l=$_;\n        #chomp ($l);\n  $s\
-tring.=$l;\n      }\n    close (F);\n    $string=~\
-s/\\r\\n//g;\n    $string=~s/\\n//g;\n    return $\
-string;\n  }\n\n\nsub my_get_opt\n  {\n    my @lis\
-t=@_;\n    my $cl, $a, $argv, @argl;\n    \n    @a\
-rgl=();\n    $cl=shift @list;\n    for ( $a=0; $a<\
-=$#list; $a+=3)\n      {\n     $option=$list[$a];\n    $o\
-ptional=$list[$a+1];\n $status=$list[$a+2];\n  $arg\
-v=\"\";\n      if ($cl=~/$option(\\S+)/){$argv=$1;}\n  @\
-argl=(@argl,$argv);\n  \n      \n      #$optional:0=>optional\
-\n     #$optional:1=>must be set\n     #$status: 0=>no req\
-uirement\n     #$status: 1=>must be an existing file\n\
-       #$status: 2=>must be an installed package\n     \n\n    \
-if ($optional==0){;}\n elsif ( $optional==1 && $ar\
-gv eq \"\")\n    {\n       print STDERR \"ERROR: Opti\
-on $option must be set [FATAL:$program/$mode/$meth\
-od]\\n\";\n        myexit ($EXIT_FAILURE);\n     }\n   if\
- ($status==0){;}\n     elsif ($status ==1 && $argv ne \
-\"\" && !-e $argv)\n     {\n       print STDERR \"ERRO\
-R: File $argv must exist [FATAL:$program/$mode/$me\
-thod]\\n\";\n      myexit ($EXIT_FAILURE);\n     }\n   \
-elsif ( $status==2 && $argv ne \"\" && &check_pg_i\
-s_installed ($argv)==0)\n        {\n       print STDERR \\
-"ERROR: $argv is not installed [FATAL:$program/$mo\
-de/$method]\\n\";\n        myexit ($EXIT_FAILURE);\n   \
-  }\n      }\n\n    return @argl;\n    }\n\nsub ta\
-g2value \n  {\n    \n    my $tag=(@_[0]);\n    my \
-$word=(@_[1]);\n    my $return;\n    \n    $tag=~/\
-$word=\"([^\"]+)\"/;\n    $return=$1;\n    return \
-$return;\n  }\n      \nsub hit_tag2pdbid\n  {\n   \
- my $tag=(@_[0]);\n    my $pdbid;\n       \n    $t\
-ag=~/id=\"(\\S+)\"/;\n    $pdbid=$1;\n    $pdbid=~\
-s/_//;\n    return $pdbid;\n  }\nsub id2pdbid \n  \
-{\n    my $in=@_[0];\n    my $id;\n    \n    $in=~\
-/(\\S+)/;\n    $id=$in;\n    \n    if ($id =~/pdb/\
-)\n      {\n   $id=~/pdb(.*)/;\n       $id=$1;\n      }\n \
-   $id=~s/[|��_]//g;\n    return $id;\n  }\nsu\
-b set_blast_type \n  {\n    my $file =@_[0];\n    \
-if (&file_contains ($file,\"EBIApplicationResult\"\
-,100)){$BLAST_TYPE=\"EBI\";}\n    elsif (&file_con\
-tains ($file,\"NCBI_BlastOutput\",100)) {$BLAST_TY\
-PE=\"NCBI\";}\n    else\n      {\n     $BLAST_TYPE=\"\\
-";\n      }\n    return $BLAST_TYPE;\n  }\nsub bla\
-st_xml2profile \n  {\n    my ($name,$seq,$maxid, $\
-minid, $mincov, $file)=(@_);\n    my (%p, $a, $str\
-ing, $n);\n    \n\n\n    if ($BLAST_TYPE eq \"EBI\\
-" || &file_contains ($file,\"EBIApplicationResult\\
-",100)){%p=ebi_blast_xml2profile(@_);}\n    elsif \
-($BLAST_TYPE eq \"NCBI\" || &file_contains ($file,\
-\"NCBI_BlastOutput\",100)){%p=ncbi_blast_xml2profi\
-le(@_);}\n    else \n      {\n print \"***********\
-* ERROR: Blast Returned an unknown XML Format ****\
-******************\";\n        myexit ($EXIT_FAILURE);\n \
-     }\n    for ($a=0; $a<$p{n}; $a++)\n      {\n      \
-my $name=$p{$a}{name};\n       $p{$name}{seq}=$p{$a}{seq\
-};\n      }\n    return %p;\n  }\nsub ncbi_blast_x\
-ml2profile \n  {\n    my ($name,$seq,$maxid, $mini\
-d, $mincov, $string)=(@_);\n    my ($L,$l, $a,$b,$\
-c,$d,$nhits,@identifyerL);\n    \n    \n    $seq=~\
-s/[^a-zA-Z]//g;\n    $L=length ($seq);\n    \n    \
-%hit=&xml2tag_list ($string, \"Hit\");\n    \n    \
-\n    for ($nhits=0,$a=0; $a<$hit{n}; $a++)\n     \
- {\n   my ($ldb,$id, $identity, $expectation, $start\
-, $end, $coverage, $r);\n      my (%ID,%DE,%HSP);\n    \n      \
-$ldb=\"\";\n\n %ID=&xml2tag_list ($hit{$a}{body}, \
-\"Hit_id\");\n $identifyer=$ID{0}{body};\n     \n      %DE=\
-&xml2tag_list ($hit{$a}{body}, \"Hit_def\");\n $de\
-finition=$DE{0}{body};\n       \n      %HSP=&xml2tag_list ($h\
-it{$a}{body}, \"Hsp\");\n      for ($b=0; $b<$HSP{n}; $\
-b++)\n   {\n       my (%START,%END,%E,%I,%Q,%M);\n\n\
-        \n         %START=&xml2tag_list ($HSP{$b}{body}, \"H\
-sp_query-from\");\n        %HSTART=&xml2tag_list ($HS\
-P{$b}{body}, \"Hsp_hit-from\");\n          \n      %LEN=\
-  &xml2tag_list ($HSP{$b}{body}, \"Hsp_align-len\"\
-);\n       %END=  &xml2tag_list ($HSP{$b}{body}, \"H\
-sp_query-to\");\n          %HEND=  &xml2tag_list ($HSP{\
-$b}{body}, \"Hsp_hit-to\");\n      %E=&xml2tag_list\
-     ($HSP{$b}{body}, \"Hsp_evalue\");\n           %I=&x\
-ml2tag_list     ($HSP{$b}{body}, \"Hsp_identity\")\
-;\n        %Q=&xml2tag_list     ($HSP{$b}{body}, \"Hs\
-p_qseq\");\n       %M=&xml2tag_list     ($HSP{$b}{bo\
-dy}, \"Hsp_hseq\");\n      \n      for ($e=0; $e<$Q{\
-n}; $e++)\n\n        {\n               $qs=$Q{$e}{body};\n             $ms=\
-$M{$e}{body};\n                \n              $expectation=$E{$e}{body};\n    \
-       $identity=($LEN{$e}{body}==0)?0:$I{$e}{body}/$LEN\
-{$e}{body}*100;\n              $start=$START{$e}{body};\n              $en\
-d=$END{$e}{body};\n            $Hstart=$HSTART{$e}{body};\n    \
-       $Hend=$HEND{$e}{body};\n        \n              $coverage=(($end-$st\
-art)*100)/$L;\n\n      \n              if ($identity>$maxid || $ide\
-ntity<$minid || $coverage<$mincov){next;}\n            @lr1=\
-(split (//,$qs));\n            @lr2=(split (//,$ms));\n                $l=\
-$#lr1+1;\n             for ($c=0;$c<$L;$c++){$p[$nhits][$c]=\\
-"-\";}\n               for ($d=0,$c=0; $c<$l; $c++)\n            {\n            \
-   $r=$lr1[$c];\n                  if ( $r=~/[A-Za-z]/)\n                 \
-   {\n                 \n                      $p[$nhits][$d + $start-1]=$lr2[$c];\\
-n                      $d++;\n               }\n                 }\n           $Qseq[$nhits]=$qs;\\
-n              $Hseq[$nhits]=$ms;\n            $QstartL[$nhits]=$start;\\
-n              $HstartL[$nhits]=$Hstart;\n             $identityL[$nhits]\
-=$identity;\n          $endL[$nhits]=$end;\n           $definitionL\
-[$nhits]=$definition;\n                $identifyerL[$nhits]=$ide\
-ntifyer;\n             $comment[$nhits]=\"$ldb|$identifyer [E\
-val=$expectation][id=$identity%][start=$Hstart end\
-=$Hend]\";\n           $nhits++;\n           }\n         }\n      }\n\
-    \n    $profile{n}=0;\n    $profile{$profile{n}\
-}{name}=$name;\n    $profile{$profile{n}}{seq}=$se\
-q;\n    $profile {n}++;\n    \n    for ($a=0; $a<$\
-nhits; $a++)\n      {\n        $n=$a+1;\n      \n      $profile{$n}\
-{name}=\"$name\\_$a\";\n       $profile{$n}{seq}=\"\";\n\
-       $profile{$n}{Qseq}=$Qseq[$a];\n $profile{$n}{Hseq\
-}=$Hseq[$a];\n $profile{$n}{Qstart}=$QstartL[$a];\\
-n      $profile{$n}{Hstart}=$HstartL[$a];\n    $profile{$n\
-}{identity}=$identityL[$a];\n  $profile{$n}{definit\
-ion}=$definitionL[$a];\n       $profile{$n}{identifyer}=\
-$identifyerL[$a];\n    $profile{$n}{comment}=$comment\
-[$a];\n        for ($b=0; $b<$L; $b++)\n         {\n       if ($p\
-[$a][$b])\n          {\n               $profile{$n}{seq}.=$p[$a][$\
-b];\n        }\n           else\n            {\n               $profile{$n}\
-{seq}.=\"-\";\n              }\n         }\n      }\n    \n    \
-$profile{n}=$nhits+1;\n    return %profile;\n  }\n\
-sub ebi_blast_xml2profile \n  {\n    my ($name,$se\
-q,$maxid, $minid, $mincov, $string)=(@_);\n    my \
-($L,$l, $a,$b,$c,$d,$nhits,@identifyerL,$identifye\
-r);\n    \n\n    \n    $seq=~s/[^a-zA-Z]//g;\n    \
-$L=length ($seq);\n    %hit=&xml2tag_list ($string\
-, \"hit\");\n    \n    for ($nhits=0,$a=0; $a<$hit\
-{n}; $a++)\n      {\n  my ($ldb,$id, $identity, $ex\
-pectation, $start, $end, $coverage, $r);\n     my (%Q,\
-%M,%E,%I);\n   \n      $ldb=&tag2value ($hit{$a}{open}, \\
-"database\");\n        $identifyer=&tag2value ($hit{$a}{o\
-pen}, \"id\");\n\n     $description=&tag2value ($hit{$\
-a}{open}, \"description\");\n  \n      %Q=&xml2tag_list \
-($hit{$a}{body}, \"querySeq\");\n      %M=&xml2tag_list\
- ($hit{$a}{body}, \"matchSeq\");\n     %E=&xml2tag_lis\
-t ($hit{$a}{body}, \"expectation\");\n %I=&xml2tag\
-_list ($hit{$a}{body}, \"identity\");\n        \n\n    for (\
-$b=0; $b<$Q{n}; $b++)\n          {\n\n     $qs=$Q{$b}{bod\
-y};\n      $ms=$M{$b}{body};\n     \n      $expectat\
-ion=$E{$b}{body};\n        $identity=$I{$b}{body};\n   \
-    \n             \n      $start=&tag2value ($Q{$b}{o\
-pen}, \"start\");\n        $end=&tag2value ($Q{$b}{op\
-en}, \"end\");\n           $startM=&tag2value ($M{$b}{op\
-en}, \"start\");\n         $endM=&tag2value ($M{$b}{op\
-en}, \"end\");\n           $coverage=(($end-$start)*100)\
-/$L;\n     \n     # print \"$id: ID: $identity COV:\
- $coverage [$start $end]\\n\";\n           \n      \n     \
- if ($identity>$maxid || $identity<$minid || $cove\
-rage<$mincov){next;}\n     # print \"KEEP\\n\";\n\\
-n          \n      @lr1=(split (//,$qs));\n        @lr2=(sp\
-lit (//,$ms));\n           $l=$#lr1+1;\n           for ($c=0;$\
-c<$L;$c++){$p[$nhits][$c]=\"-\";}\n        for ($d=0,\
-$c=0; $c<$l; $c++)\n         {\n               $r=$lr1[$c];\n          if\
- ( $r=~/[A-Za-z]/)\n             {\n               \n              $p[$nhits\
-][$d + $start-1]=$lr2[$c];\n               $d++;\n               }\n    \
-     }\n         \n        \n      $identifyerL[$nhits]=$ide\
-ntifyer;\n         $comment[$nhits]=\"$ldb|$identifyer\
- [Eval=$expectation][id=$identity%][start=$startM \
-end=$endM]\";\n            $nhits++;\n   }\n      }\n    \
-\n    $profile{n}=0;\n    $profile{$profile{n}}{na\
-me}=$name;\n    $profile{$profile{n}}{seq}=$seq;\n\
-    $profile {n}++;\n    \n    for ($a=0; $a<$nhit\
-s; $a++)\n      {\n    $n=$a+1;\n      $profile{$n}{name}=\
-\"$name\\_$a\";\n      $profile{$n}{seq}=\"\";\n       $profi\
-le{$n}{identifyer}=$identifyerL[$a];\n \n      $profile\
-{$n}{comment}=$comment[$a];\n  for ($b=0; $b<$L; $b\
-++)\n    {\n       if ($p[$a][$b])\n         {\n               $prof\
-ile{$n}{seq}.=$p[$a][$b];\n          }\n           else\n       \
-     {\n               $profile{$n}{seq}.=\"-\";\n           }\n         \
-}\n      }\n    $profile{n}=$nhits+1;\n    \n    r\
-eturn %profile;\n  }\nsub output_profile\n  {\n   \
- my ($name,%profile)=(@_);\n    my ($a);\n    open\
- (P, \">$name\");\n    for ($a=0; $a<$profile{n}; \
-$a++)\n      {\n       print P \">$profile{$a}{name} $pr\
-ofile{$a}{comment}\\n$profile{$a}{seq}\\n\";\n    \
-  }\n    close (P);\n    return;\n  }\nsub blast_x\
-ml2hit_list\n  {\n    my $string=(@_[0]);\n    ret\
-urn &xml2tag_list ($string, \"hit\");\n  }\nsub xm\
-l2tag_list  \n  {\n    my ($string_in,$tag)=@_;\n \
-   my $tag_in, $tag_out;\n    my %tag;\n    \n    \
-if (-e $string_in)\n      {\n  $string=&file2string\
- ($string_in);\n      }\n    else\n      {\n   $stri\
-ng=$string_in;\n      }\n    $tag_in1=\"<$tag \";\\
-n    $tag_in2=\"<$tag>\";\n    $tag_out=\"/$tag>\"\
-;\n    $string=~s/>/>##1/g;\n    $string=~s/</##2<\
-/g;\n    $string=~s/##1/<#/g;\n    $string=~s/##2/\
-#>/g;\n    @l=($string=~/(\\<[^>]+\\>)/g);\n    $t\
-ag{n}=0;\n    $in=0;$n=-1;\n  \n \n\n    foreach $\
-t (@l)\n      {\n\n    $t=~s/<#//;\n   $t=~s/#>//;\n   \n\
-       if ( $t=~/$tag_in1/ || $t=~/$tag_in2/)\n          {\n    \\
-n          $in=1;\n        $tag{$tag{n}}{open}=$t;\n       $\
-n++;\n     \n    }\n   elsif ($t=~/$tag_out/)\n          {\n\
-           \n\n            $tag{$tag{n}}{close}=$t;\n      $tag{\
-n}++;\n            $in=0;\n      }\n   elsif ($in)\n     {\n      \
-\n         $tag{$tag{n}}{body}.=$t;\n    }\n      }\n  \
-\n    return %tag;\n  }\n\n\nsub seq2gor_predictio\
-n \n  {\n    my ($name, $seq,$infile, $outfile, $g\
-or_seq, $gor_obs)=(@_);\n    my ($l);\n    \n    `\
-gorIV -prd $infile -seq $gor_seq -obs $gor_obs > g\
-or_tmp`;\n    open (GR, \">$outfile\");\n    open \
-(OG, \"gor_tmp\");\n\n    while (<OG>)\n      {\n      \
-\n     $l=$_;\n        if ($l=~/\\>/){print GR \"$l\";}\n      els\
-if ( $l=~/Predicted Sec. Struct./)\n     {\n       $l=\
-~s/Predicted Sec. Struct\\.//;\n           print GR \"$l\
-\";\n    }\n      }\n    close (GR);\n    close (OG\
-);\n    return;\n  }\nsub seq2msa_tm_prediction \n\
-  {\n    my ($name, $seq,$infile, $outfile, $arch,\
- $psv)=(@_);\n    my (%p,%gseq,%R, $blast_output, \
-%s, $l);\n    \n    $blast_output=&run_blast ($nam\
-e,\"blastp\", \"uniprot\", $infile, \"outfile\");\\
-n    \n    \n    %p=blast_xml2profile($name,$seq,$\
-maxid, $minid,$mincov,$blast_output);\n    \n    \\
-n    open (F, \">tm_input\");\n    for ($a=0; $a<$\
-p{n}; $a++)\n      {\n my $s;\n        \n      $s=$p{$a}{seq};\
-\n     $s=uc($s);\n    print F \">$p{$a}{name}\\n$s\\n\";\
-\n     #print stdout \">$p{$a}{name}\\n$s\\n\";\n     \
- }\n    close (F);\n    print \"\\tPSITM: kept  $p\
-{n} Homologues for Sequence $p{0}{name}\\n\";\n   \
- &safe_system (\"t_coffee -other_pg fasta_seq2hmmt\
-op_fasta.pl -in=tm_input -out=tm_output -arch=$arc\
-h -psv=$psv\");\n    unlink (\"tm_input\");\n    %\
-gs=read_fasta_seq(\"tm_output\");\n    foreach $s \
-(keys(%gs))\n      {\n my (@list, $seq, @plist, @p\
-seq, $L, $PL);\n       \n      \n      #Prediction\n   $seq=$gs{$s}{\
-seq};\n        $seq=uc($seq);\n        $L=length($seq);\n      @list=\
-split //, $seq;\n      \n      #Original Profile Sequence\n    \
-$pseq=$p{$s}{seq};\n   $pseq=uc($pseq);\n      $PL=length\
-($pseq);\n     @plist=split //, $pseq;\n       \n      for ($c=0,\
-$b=0; $b<$PL; $b++)\n    {\n       my $r=$plist[$b];\\
-n          if($r ne \"-\" && $r ne \"X\")\n          {\n               \
-$r=$plist[$b]=$list[$c++];\n         }\n         }\n   \n      if\
- ($c!=$L)\n      {\n       print \"ERROR: Could Not Thr\
-ead the Prediction Back [FATAL:tc_generic_method.p\
-l]\\n\";\n         myexit ($EXIT_FAILURE);\n     }\n   for\
- ($b=0;$b<$PL; $b++)\n   {\n       my $r=$plist[$b];\
-\n         if ( $r ne \"-\" && $r ne \"X\")\n        {\\
-n              $R{$b}{$r}++;\n      }\n          }\n      }\n    $L=l\
-ength ($p{0}{seq});\n    open (R2, \">$outfile\");\
-\n    print R2 \">$name\\n\";\n    \n    for ($a=0\
-; $a<$L; $a++)\n      {\n      \n      my ($v,$v_max,$r,$r_m\
-ax, @rl);\n    \n      $v=$v_max=0;\n  @rl=keys (%{$R{$a}})\
-;\n    foreach $r (@rl)\n        {\n\n     $v=$R{$a}{$r};\\
-n          if ($v>=$v_max)\n         {\n               $v_max=$v;\n            $\
-r_max=$r;\n          }\n         }\n   print R2 \"$r_max\";\n\
-      }\n    print R2 \"\\n\";\n    close (R2);\n \
-   return;\n  }\nsub seq2msa_gor_prediction \n  {\\
-n    my ($name, $seq,$infile, $outfile, $gor_seq, \
-$gor_obs)=(@_);\n    my (%p,%gseq,%R, $blast_outpu\
-t, %s, $l);\n    \n    \n    $blast_output=&run_bl\
-ast ($name,\"blastp\", \"uniprot\", $infile, \"out\
-file\");\n    %p=blast_xml2profile($name,$seq,$max\
-id, $minid,$mincov,$blast_output);\n    \n    open\
- (F, \">gor_input\");\n    for ($a=0; $a<$p{n}; $a\
-++)\n      {\n my $s;\n        \n      $s=$p{$a}{seq};\n       $s=~s\
-/\\-//g;\n     $s=~s/X//g;\n   \n      $s=uc($s);\n    print F \\
-">$p{$a}{name}\\n$s\\n\";\n      }\n    close (F);\
-\n    print \"\\tPSIGOR: kept  $p{n} Homologues fo\
-r Sequence $p{0}{name}\\n\";\n    \n    `gorIV -pr\
-d gor_input -seq $gor_seq -obs $gor_obs > gor_tmp`\
-;\n    unlink (\"gor_input\");\n    \n    open (GR\
-, \">gor_output\");\n    open (OG, \"gor_tmp\");\n\
-    \n    while (<OG>)\n      {\n      \n      my $l;\n        $l=$\
-_;\n   \n      if ($l=~/\\>/){print GR \"$l\";}\n      elsif (\
- $l=~/Predicted Sec. Struct./)\n         {\n       $l=~s/P\
-redicted Sec. Struct\\.//;\n       print GR \"$l\";\\
-n        }\n      }\n    close (GR);\n    close (OG);\n\
-    \n\n    %gs=read_fasta_seq(\"gor_output\");\n \
-    foreach $s (keys(%gs))\n      {\n  my (@list, $\
-seq, @plist, @pseq, $L, $PL);\n        \n      \n      #Prediction\\
-n      $seq=$gs{$s}{seq};\n    $seq=uc($seq);\n        $L=length(\
-$seq);\n       @list=split //, $seq;\n \n      #Original Prof\
-ile Sequence\n $pseq=$p{$s}{seq};\n    $pseq=uc($pseq\
-);\n   $PL=length($pseq);\n    @plist=split //, $pseq;\\
-n      \n      $tseq=\"\";\n   for ($c=0,$b=0; $b<$PL; $b++)\n\
-         {\n       my $r=$plist[$b];\n     if($r ne \"-\" \
-&& $r ne \"X\")\n            {\n               $r=$plist[$b]=$list[$\
-c++];\n              }\n           $tseq.=$r;\n          }\n   \n      if ($c\
-!=$L)\n          {\n       print \"ERROR: Could Not Thread \
-the Prediction Back [FATAL:tc_generic_method.pl]\\\
-n\";\n     print \"SEQ:$seq\\nPSEQ:$pseq\\nTSEQ:$t\
-seq\";\n           \n      myexit ($EXIT_FAILURE);\n     }\\
-n      for ($b=0;$b<$PL; $b++)\n         {\n       my $r=$plist\
-[$b];\n            if ( $r ne \"-\" && $r ne \"X\")\n     \
-   {\n         $R{$b}{$r}++;\n      }\n          }\n      }\n   \
-\n    $L=length ($p{0}{seq});\n    open (R2, \">$o\
-utfile\");\n    print R2 \">$name\\n\";\n    \n   \
- for ($a=0; $a<$L; $a++)\n      {\n    \n      my ($v,$v_m\
-ax,$r,$r_max, @rl);\n  \n      $v=$v_max=0;\n  @rl=keys (\
-%{$R{$a}});\n  foreach $r (@rl)\n        {\n\n     $v=$R\
-{$a}{$r};\n        if ($v>=$v_max)\n         {\n               $v_ma\
-x=$v;\n                $r_max=$r;\n          }\n         }\n   print R2 \"$\
-r_max\";\n      }\n    print R2 \"\\n\";\n    clos\
-e (R2);\n    return;\n  }\n\nsub run_blast\n  {\n \
-   my ($name, $method, $db,$infile, $outfile, $run\
-)=(@_);\n    if (!$run){$run=1;}\n    \n    \n    \
-if (&cache_file(\"GET\",$infile,$name,$method,$db,\
-$outfile,$SERVER)){return $outfile;}\n    else\n  \
-    {\n        \n      if ( $SERVER eq \"EBI\")\n        {\n       $c\
-l_method=$method;\n        if ($cl_method =~/wu/)\n     \
-     {\n               $cl_method=~s/wu//;\n           if ( $cl_method e\
-q \"psiblast\")\n                {\n               print STDERR \"\\n**\
-*************WARNING: PSI BLAST cannot be used wit\
-h the NCBI BLAST Client. Use server=EBI Or server=\
-LOCAL. blastp will be used instead***********\\n\"\
-;\n                $cl_method=\"blastp\";\n              }\n           \n              $com\
-mand=\"t_coffee -other_pg wublast.pl --email $EMAI\
-L $infile -D $db -p $cl_method --outfile $outfile \
--o xml>/dev/null 2>/dev/null\";\n              &safe_system ( \
-$command);\n           if (-e \"$outfile.xml\") {`mv $outfi\
-le.xml $outfile`;}\n         }\n           else\n            {\\
-n              if ($cl_method eq \"psiblast\"){$cl_method =\"b\
-lastp -j5\";}\n                \n              $command=\"t_coffee -other_pg\
- blastpgp.pl --email $EMAIL $infile -d $db --outfi\
-le $outfile -p $cl_method --mode PSI-Blast>/dev/nu\
-ll 2>/dev/null\";\n            &safe_system ( $command);\n             \
-\n             if (-e \"$outfile.xml\") {`mv $outfile.xml $ou\
-tfile`;}\n           }\n         }\n   elsif ($SERVER eq \"NCB\
-I\")\n   {\n       if ($db eq \"uniprot\"){$cl_db=\"\
-nr\";}\n           else {$cl_db=$db;}\n            \n      if ( \
-$method eq \"psiblast\")\n           {\n               print STDERR\
- \"\\n***************WARNING: PSI BLAST cannot be \
-used with the NCBI BLAST Client. Use server=EBI Or\
- server=LOCAL. blastp will be used instead********\
-***\\n\";\n            $cl_method=\"blastp\";\n              }\n         \
-  else\n             {\n               $cl_method=$method;\n         }\\
-n          $command=\"blastcl3 -p $cl_method -d $cl_db \
--i $infile -o $outfile -m 7\";\n           &mysystem ($c\
-ommand);\n       }\n   elsif ($SERVER =~/CLIENT_(.*)/)\n\
-         {\n       my $client=$1;\n        $command=\"$client\
- -p $method -d $db -i $infile -o $outfile -m 7\";\\
-n          &mysystem ($command);\n       }\n   elsif ( $SERVE\
-R eq \"LOCAL_blastall\")\n       {\n       if ($method e\
-q \"blastp\")\n              {\n               $command=\"blastall -d \
-$db -i $infile -o $outfile -m7 -p blastp\";\n      \
-  }\n      &mysystem ($command);\n       }\n   elsif ( $S\
-ERVER eq \"LOCAL\")\n    {\n\n     if ($ENV{\"BLAST\
-_DB_DIR\"})\n        {\n               $x=$ENV{\"BLAST_DB_DIR\"}\
-;\n            $cl_db=\"$x$db\";\n           }\n           else\n          \
-  {\n          $cl_db=$db;\n         }\n           \n      if ($met\
-hod eq \"blastp\")\n         {\n               $command=\"blastpg\
-p -d $cl_db -i $infile -o $outfile -m7 -j1\";\n          \
-    }\n            elsif ($method eq \"psiblast\")\n       \
-  {\n          $command=\"blastpgp -d $cl_db -i $infile -o\
- $outfile -m7 -j5\";\n       }\n               elsif ($method e\
-q \"blastn\")\n                {\n                     $command=\"blastall -p blas\
-tn -d $cl_db -i $infile -o $outfile -m7 -W6\";\n               \
-}      \n          &mysystem ($command);\n       }\n   else\n    {\\
-n          print (\"*************** ERROR: $SERVER is a\
-n Unknown Server***********\");\n        }\n   \n      if ( !-\
-e $outfile)\n    {\n       \n      if ( $run==$BLAST_M\
-AX_NRUNS)\n          {\n               print STDERR \"COM: $comman\
-d\\n\";\n              print STDERR (\"BLAST failed against $n\
-ame [FATAL:$mode/$method/$program]\\n\");\n            if  (\
- $SERVER eq \"EBI\" && !($method=~/wu/))\n               {\n   \
-           print STDERR (\"Try WuBlast instead\");\n             \
-  return run_blast ($name,\"wublastp\", $db,$infil\
-e, $outfile);\n                  }\n         }\n           else\n            \
-{\n            print STDERR \"(Blast for $name failed  [$com\
-mand][Attempt $run/$BLAST_MAX_NRUNS] [Try again]\\\
-n\";\n         return run_blast ($name, $method, $db,$inf\
-ile, $outfile, $run+1);\n            }\n         }\n\n &cache\
-_file(\"SET\",$infile,$name,$method,$db,$outfile,$\
-SERVER);\n     return $outfile;\n      }\n  }\nsub mys\
-ystem \n  {\n    my $command=@_[0];\n    my $count\
-=0;\n    my $r;\n    \n    while (($r=&safe_system\
-($command))!=$EXIT_SUCCESS && $count<5)\n      {\n\
-       print \"\\nCOMMAND $command Failed. Will try agai\
-n\\n\";\n      $count++;\n      }\n    return $r;\n  }\\
-nsub cache_file\n  {\n    my ($cache_mode,$infile,\
-$name,$method,$db, $outfile,$server)=(@_);\n    my\
- $cache_file;\n    #Protect names so that they can\
- be turned into legal filenames\n    $name=&clean_\
-file_name ($name);\n\n    if ($db=~/\\//)\n      {\
-\n     $db=~/([^\\/]+)$/;\n    $db=$1;\n      }\n    $cac\
-he_file_sh=\"$name.$method.$db.$server.tmp\";\n   \
- $cache_file=\"$CACHE/$name.$method.$db.$server.tm\
-p\";\n    \n    if ($infile ne \"\")\n      {\n        $c\
-ache_file_infile_sh=\"$name.$method.$db.$server.in\
-file.tmp\";\n  $cache_file_infile=\"$CACHE/$name.$m\
-ethod.$db.$server.infile.tmp\";\n      }\n    \n  \
-  if ($cache_mode eq \"GET\")\n      {\n       if ($CACH\
-E eq \"\" || $CACHE eq \"no\" || $CACHE eq \"ignor\
-e\"  || $CACHE eq \"local\" || $CACHE eq \"update\\
-"){return 0;}\n        elsif ( !-d $CACHE)\n     {\n       pr\
-int STDERR \"ERROR: Cache Dir: $CACHE Does not Exi\
-st\";\n            return 0;\n   }\n   else\n    {\n       if \
-( -e $cache_file && &fasta_file1_eq_fasta_file2($i\
-nfile,$cache_file_infile)==1)\n              {\n               `cp $ca\
-che_file $outfile`;\n          $CACHE_STATUS=\"READ CACHE\\
-";\n           return 1;\n           }\n         }\n      }\n    elsi\
-f ($cache_mode eq \"SET\")\n      {\n  if ($CACHE e\
-q \"\" || $CACHE eq \"no\" || $CACHE eq \"ignore\"\
-  || $CACHE eq \"local\" || $CACHE eq \"update\"){\
-return 0;}\n   elsif ( !-d $CACHE)\n     {\n       print\
- STDERR \"ERROR: Cache Dir: $CACHE Does not Exist\\
-";\n       return 0;\n   }\n   elsif (-e $outfile)\n    \
- {\n       `cp $outfile $cache_file`;\n            if ($cac\
-he_file_infile ne \"\"){ `cp $infile $cache_file_i\
-nfile`;}\n\n       #functions for updating the cache\
-\n         #`t_coffee -other_pg clean_cache.pl -file $\
-cache_file_sh -dir $CACHE`;\n      #`t_coffee -othe\
-r_pg clean_cache.pl -file $cache_file_infile_sh -d\
-ir $CACHE`;\n      return 1;\n   }\n      }\n    $C\
-ACHE_STATUS=\"COMPUTE CACHE\";\n    return 0;\n  }\
-\nsub file1_eq_file2\n  {\n    my ($f1, $f2)=@_;\n\
-    if ( $f1 eq \"\"){return 1;}\n    elsif ( $f2 \
-eq \"\"){return 1;}\n    elsif ( !-e $f1){return 0\
-;}\n    elsif ( !-e $f2){return 0;}\n    elsif ($f\
-1 eq \"\" || $f2 eq \"\" || `diff $f1 $f2` eq \"\"\
-){return 1;}\n    \n    return 0;\n  }\nsub clean_\
-file_name \n  {\n    my $name=@_[0];\n    \n    $n\
-ame=~s/[^A-Za-z1-9.-]/_/g;\n    return $name;\n  }\
-\nsub url2file\n  {\n    my ($address, $out)=(@_);\
-\n    \n    if (&pg_is_installed (\"wget\"))\n {\n\
-         return &safe_system (\"wget $address -O$out >/d\
-ev/null 2>/dev/null\");\n      }\n    elsif (&pg_is_ins\
-talled (\"curl\"))\n      {\n  return &safe_system \
-(\"curl $address -o$out >/dev/null 2>/dev/null\");\
-\n      }\n    else\n      {\n print stderr \"ERRO\
-R: neither curl nor wget are installed. Imnpossibl\
-e to fectch remote file [FATAL]\\n\";\n        exit ($EXI\
-T_FAILURE);\n      }\n  }\nsub fasta_file1_eq_fast\
-a_file2\n  {\n    my ($f1, $f2)=@_;\n    my (%s1, \
-%s2);\n    my @names;\n    %s1=read_fasta_seq (%f1\
-);\n    %s2=read_fasta_seq (%f2);\n\n    @names=(k\
-eys (%s1));\n    \n    foreach $n (keys(%s1))\n   \
-   {\n if ($s1{$n}{seq} ne $s2{$n}{seq}){return 0;\
-}\n      } \n    \n    foreach $n (keys(%s2))\n   \
-   {\n if ($s1{$n}{seq} ne $s2{$n}{seq}){return 0;\
-}\n      }\n    return 1;\n  }\n       \nsub safe_system\
- \n{\n  my $com=@_[0];\n  my $pid;\n  my $status;\\
-n  if ($com eq \"\"){return 1;}\n\n\n  if (($pid =\
- fork ()) < 0){return (-1);}\n  if ($pid == 0)\n  \
-  {\n      exec ($com);\n    }\n  else\n      {\n      \
-$PIDCHILD=$pid;\n      }\n  \n  waitpid ($pid,WTER\
-MSIG);\n  return $?; #contains the status of the e\
-xit\n}\nEND {\n  kill ($PIDCHILD);\n}\n\n\nsub rea\
-d_template_file\n{\n   my $pdb_templates = @_[0];\n    \
-open (TEMP, \"<$pdb_templates\");\n    my %temp_h;\n   \
-while (<TEMP>)\n{\n            $line = $_;\n           $line =~/(\\S\
-+)\\s(\\S+)/;\n                $temp_h{$1}= $2;\n}\n   close(TEMP\
-);\n   return %temp_h;\n}\n\nsub calc_rna_template\n\
-{\n    my ($mode, $infile, $pdbfile, $outfile)=@_;\n   \
-my %s, %h ;\n  my $result;\n   my (@profiles);\n       &set\
-_temporary_dir (\"set\",$infile,\"seq.pep\");\n        %s\
-=read_fasta_seq (\"seq.pep\");\n       \n      %pdb_template_\
-h = &read_template_file($pdbfile);\n   my $pdb_chain\
-;\n    open (R, \">result.aln\");\n\n\n        #print stdout\
- \"\\n\";\n    foreach $seq (keys(%s))\n       {\n             if ($pd\
-b_template_h{$seq} eq \"\")\n          {\n                     next;\n         }\n     \
-       open (F, \">seqfile\");\n               print (F \">$s{$seq}{n\
-ame}\\n$s{$seq}{seq}\\n\");\n          close (F);\n            $pdb_\
-chain = $pdb_template_h{$seq};\n               $lib_name=\"$s{$\
-seq}{name}.rfold\";\n          $lib_name=&clean_file_name \
-($lib_name);\n         safe_system (\"t_coffee -other_pg \
-RNAplfold2tclib.pl -in=seqfile -out=$lib_name\");\\
-n              \n              safe_system (\"secondary_struc.py seqfile \
-$CACHE$pdb_chain  $lib_name\");\n              \n              if ( !-e $l\
-ib_name)\n             {\n                     print STDERR (\"RNAplfold failed\
- to compute the secondary structure of $s{$seq}{na\
-me} [FATAL:$mode/$method/$program]\\n\");\n                    myex\
-it ($EXIT_FAILURE);\n          }\n             else\n          {\n                     print st\
-dout \"\\tProcess: >$s{$seq}{name} _F_ $lib_name\\\
-n\";\n                 print R \">$s{$seq}{name} _F_ $lib_name\\\
-n\";\n         }\n             unshift (@profiles, $lib_name);\n       }\n\
-       close (R);\n    &set_temporary_dir (\"unset\",$mode,\
- $method,\"result.aln\",$outfile, @profiles);\n}\n\
-\n\n\nsub seq2rna_pair{\n      my ($mode, $pdbfile1, $p\
-dbfile2, $method, $param, $outfile)=@_;\n\n    if ($m\
-ethod eq \"runsara.py\")\n     {\n             open(TMP,\"<$pdbfi\
-le1\");\n              my $count = 0;\n                my $line;\n             while (<\
-TMP>)\n                {\n                     $line = $_;\n                   if ($count ==1)\n               \
-       {\n                             last;\n                 }\n                     $count += 1;\n          }\n     \n              my\
- $y = length($line);\n\n               $chain1 = substr($line,l\
-ength($line)-3,1);\n           close TMP;\n            open(TMP,\"<$p\
-dbfile2\");\n          my $count = 0;\n                while (<TMP>)\n         \
-{\n                    $line = $_;\n                   if ($count ==1)\n                       {\n                             l\
-ast;\n                 }\n                     $count += 1;\n          }\n             $chain2 = subs\
-tr($line,length($line)-3,1);\n         close TMP;\n            \n              \
-\n             system(\"runsara.py $pdbfile1 $chain1 $pdbfile\
-2 $chain2 -s -o tmp >/dev/null 2>/dev/null\");\n               \
-open(TMP,\"<tmp\") or die \"cannot open the sara t\
-mp file:$!\\n\";\n             open(OUT,\">$outfile\") or die\
- \"cannot open the $outfile file:$!\\n\";\n\n          my \
-$switch = 0;\n         my $seqNum = 0;\n               foreach my $lin\
-e (<TMP>)\n            {\n                     next unless ($line=~/SARAALI/);\
-\n                     if ($line=~/>/)\n                       {\n                             $switch =0;\n                           p\
-rint OUT \">seq$seqNum\\n\";\n                         $seqNum++;                              \n\
-                       }\n                     if ($switch < 2){\n                             $switch++;\n                            ne\
-xt;\n                  }\n     \n                      if ($line =~/REMARK\\s+SARAALI\\s\
-+([^\\*]+)\\*/)\n                      {\n                             my $string = $1;\n                              p\
-rint OUT \"$string\\n\";\n                     }\n             }\n             close TMP; \
-\n             close OUT;\n    }\n}$program=\"T-COFFEE (Version_\
-8.07)\";\\n\n","*TC_METHOD_FORMAT_01\n************\
-******generic_method.tc_method*************\n*\n* \
-      Incorporating new methods in T-Coffee\n*    \
-   Cedric Notredame 26/08/08\n*\n*****************\
-**************************************\n*This file\
- is a method file\n*Copy it and adapt it to your n\
-eed so that the method \n*you want to use can be i\
-ncorporated within T-Coffee\n*********************\
-**********************************\n*             \
-     USAGE                              *\n*******\
-************************************************\n\
-*This file is passed to t_coffee via -in:\n*\n*        t_\
-coffee -in Mgeneric_method.method\n*\n*        The method\
- is passed to the shell using the following\n*call\
-:\n*<EXECUTABLE><PARAM1><IN_FLAG><seq_file><PARAM2\
-><OUT_FLAG><outname><PARAM>\n*\n*Conventions:\n*<F\
-LAG_NAME>      <TYPE>          <VALUE>\n*<VALUE>:      no_name         <=>\
- Replaced with a space\n*<VALUE>:      &nbsp   <=> Replac\
-ed with a space\n*\n******************************\
-*************************\n*                  ALN_\
-MODE                           *\n****************\
-***************************************\n*pairwise\
-   ->all Vs all (no self )[(n2-n)/2aln]\n*m_pairwi\
-se ->all Vs all (no self)[n^2-n]^2\n*s_pairwise ->\
-all Vs all (self): [n^2-n]/2 + n\n*multiple   ->Al\
-l the sequences in one go\n*\nALN_MODE         pairwise\n\
-*\n***********************************************\
-********\n*                  OUT_MODE             \
-              *\n*********************************\
-**********************\n* mode for the output:\n*E\
-xternal methods: \n* aln -> alignmnent File (Fasta\
- or ClustalW Format)\n* lib-> Lib file (TC_LIB_FOR\
-MAT_01)\n*Internal Methods:\n* fL -> Internal Func\
-tion returning a List (Librairie)\n* fA -> Interna\
-l Function returning an Alignmnent\n*\nOUT_MODE                a\
-ln\n**********************************************\
-*********\n*                  SEQ_TYPE            \
-               *\n********************************\
-***********************\n*G: Genomic, S: Sequence,\
- P: PDB, R: Profile\n*Examples:\n*SEQTYPE      S       sequen\
-ces against sequences (default)\n*SEQTYPE      S_P     sequ\
-ence against structure\n*SEQTYPE       P_P     structure aga\
-inst structure\n*SEQTYPE       PS      mix of sequences and s\
-tructure       \n*\nSEQ_TYPE   S\n*\n\n*******************\
-************************************\n*           \
-     COMMAND LINE                         *\n*EXEC\
-UTABLE PARAM1 IN_FLAG OUT_FLAG PARAM             *\
-\n************************************************\
-*******\n*****************************************\
-**************\n*                  EXECUTABLE     \
-                    *\n***************************\
-****************************\n*name of the executa\
-ble\n*passed to the shell: executable\n*       \nEXECUTA\
-BLE    tc_generic_method.pl\n*\n*********************\
-**********************************\n*             \
-     IN_FLAG                             *\n******\
-*************************************************\\
-n*IN_FLAG\n*flag indicating the name of the in com\
-ing sequences\n*IN_FLAG S no_name ->no flag\n*IN_F\
-LAG S &bnsp-in&bnsp -> \" -in \"\n*\nIN_FLAG           -inf\
-ile=\n*\n*****************************************\
-**************\n*                  OUT_FLAG       \
-                    *\n***************************\
-****************************\n*OUT_FLAG\n*flag ind\
-icating the name of the out-coming data\n*same con\
-ventions as IN_FLAG\n*OUT_FLAG S no_name ->no flag\
-\n*if you want to redirect, pass the parameters vi\
-a PARAM1\n*set OUT_FLAG to >\n*\nOUT_FLAG              -outfil\
-e=\n*\n*******************************************\
-************\n*                  PARAM_1          \
-                    *\n***************************\
-****************************\n*<EXECUTABLE><PARAM1\
-><IN_FLAG><seq_file><PARAM2><OUT_FLAG><outname><PA\
-RAM>\n*Parameters sent to the EXECUTABLE and speci\
-fied *before* IN_FLAG \n*If there is more than 1 P\
-ARAM line, the lines are\n*concatenated\n*Command_\
-line: @EP@PARAM@-gapopen%e10%s-gapext%e20\n*   %s wh\
-ite space\n*   %e equal sign\n*\n*PARAM1       \n*\n*\n*\n\
-**************************************************\
-*****\n*                  PARAM_2                 \
-             *\n**********************************\
-*********************\n*<EXECUTABLE><PARAM1><IN_FL\
-AG><seq_file><PARAM2><OUT_FLAG><outname><PARAM>\n*\
-Parameters sent to the EXECUTABLE and specified \n\
-*after* IN_FLAG and *before* OUT_FLAG\n*If there i\
-s more than 1 PARAM line, the lines are\n*concaten\
-ated\n*\n*PARAM1       \n*\n*\n*************************\
-******************************\n*                 \
- PARAM                              *\n***********\
-********************************************\n*<EX\
-ECUTABLE><PARAM1><IN_FLAG><seq_file><PARAM2><OUT_F\
-LAG><outname><PARAM>\n*Parameters sent to the EXEC\
-UTABLE and specified *after* OUT_FLAG\n*If there i\
-s more than 1 PARAM line, the lines are\n*concaten\
-ated\n*\nPARAM -mode=seq_msa -method=clustalw\nPAR\
-AM   -OUTORDER=INPUT -NEWTREE=core -align -gapopen\
-=-15\n*\n*****************************************\
-**************\n*                  END            \
-                    *\n***************************\
-****************************\n","*TC_METHOD_FORMAT\
-_01\n***************clustalw_method.tc_method*****\
-****\nEXECUTABLE       clustalw\nALN_MODE              pairwise\nIN_\
-FLAG           -INFILE=\nOUT_FLAG              -OUTFILE=\nOUT_MODE             aln\
-\nPARAM                -gapopen=-10\nSEQ_TYPE          S\n**************\
-***********************************\n","$VersionTa\
-g =                                               \
-                                                  \
-                                  2.43;\n$SILENT=\\
-" >/dev/null 2>/dev/null\";\n$EXIT_SUCCESS=0;\n$EX\
-IT_FAILURE=1;\n$INTERNET=-1;\n\n\n\n\n\nuse FileHa\
-ndle;\nuse Env qw(HOME);\n\nmy %onelett_prot=&fill\
-_onelett_prot();\nmy %threelett_prot=&fill_threele\
-tt_prot();\nmy %onelett_RNA=&fill_onelett_RNA();\n\
-my %threelett_RNA=&fill_threelett_RNA();\nmy %onel\
-ett_DNA=&fill_onelett_DNA();\nmy %threelett_DNA=&f\
-ill_threelett_DNA();\n\n\n\n\n\nmy %onelett = (\n'\
-P' => \\%onelett_prot,\n'D' => \\%onelett_DNA,\n'R\
-' => \\%onelett_RNA\n);\n\n\nmy %threelett = (\n'P\
-' => \\%threelett_prot,\n'D' => \\%threelett_DNA,\\
-n'R' => \\%threelett_RNA\n);\n\n\n\n\n\n\n\nif($AR\
-GV[0]=~/help/ ||$ARGV[0]=~/man/ || $ARGV[0]=~/HELP\
-/ || $ARGV[0]=~/Man/ || $ARGV[0] eq \"-h\"  || $AR\
-GV[0] eq \"-H\"  )\n{die \"SYNTAX: extract_from_pd\
-b Version $VersionTag  \n      Minimum:             [ext\
-ract_from_pdb file] \n                    OR \n                             [... | ex\
-tract_from_pdb]\n      Flags (Default setting on the f\
-irst line)\n      -version...................[Return\
-s the Version Number]\n           -force..........\
-...........[Forces the file to be treated like a P\
-DB file]\n                                      [R\
-egenerates the header and SEQRES fields]\n        \
-   -force_name................[Forces the file to \
-be named after name]]\n           -infile.....file\
-...........[Flag can be omited]\n                                    \
-[File must be pdb or fro pgm]\n                   \
-                   [File can also be compressed Z \
-or gz]\n                                      [In \
-the case of a compressed file, you can omit the gz\
-|Z extension]\n           -netfile................\
-...[File will be fetch from the net using wget]\n \
-                                     [wget or curl\
- must be installed]\n                             \
-         [ftp://ftp.gnu.org/pub/gnu/wget/]\n      \
-                                [http://curl.haxx.\
-se/]\n                                      [Must \
-also be used to retrieve the file from a local pdb\
- copy (cf netaddress)]\n           -netaddress....\
-............[Address used for the retrieving the n\
-etfile]\n                                      [ht\
-tp://www.rcsb.org/pdb/cgi/export.cgi/%%.pdb.gz?for\
-mat=PDB&pdbId=%%&compression=gz]\n                \
-                      [http://www.expasy.ch/cgi-bi\
-n/get-pdb-entry.pl?%%]\n                          \
-            [local -> will get the file from pdb_d\
-ir (see pdb_dir)]\n           -netcompression.....\
-.......[Extension if the netfile comes compressed]\
-\n                                      [gz]\n    \
-       -pdb_dir...................[address of the \
-repertory where the pdb is installed]\n           \
-                           [Supports standard ftp \
-style installation OR every stru in DIR]\n        \
-                              [Give the ..../pdb/s\
-tructure/ dir]\n                                  \
-    [If value omitted, the pg gets it from the env\
- variable PDB_DIR]\n           -netcompression_pg.\
-........[gunzip]\n           -is_pdb_name........n\
-ame...[Returns 1 if the name is a PDB ID, 0 otherw\
-ise]\n           -get_pdb_chains.....name...[Retur\
-ns the list of chains corresponding to the entry]\\
-n           -get_pdb_id.........name...[Returns th\
-e PDB id within the provided pdb file]\n          \
- -get_fugue_name.....name...[Turns a name into a n\
-ame valid for fugue]\n                            \
-          [Uses the netaddress to do so]\n        -cha\
-in......FIRST..........[Extract the first chain on\
-ly]\n                 A B C..........[Extract Several chai\
-ns if needed]\n                       ALL............[Extract al\
-l the chains]  \n           -ligand.....ALL........\
-....[Extract the ligands in the chain (HETATM)]\n \
-                      <name1>,<name2>[Extract All \
-the named lignds]\n       -ligand_only...............\
-[Extract only the ligands]\n           -ligand_lis\
-t...............[Extract the list of ligands]\n          \
- -coor.......<start>..<end>.[Coordinates of the fr\
-agment to extract]\n                                 [Omit end to \
-include the Cter]\n           -num........absolute\
-.......[absolute: relative to the seq] \n         \
-              file...........[file: relative to fi\
-le]\n           -num_out....new............[new: s\
-tart 1->L]\n                       old............\
-[old: keep the file coordinates]\n           -dele\
-te.....<start>..<end>.[Delete from residue start t\
-o residue end]\n          -atom.......CA.............[At\
-oms to include, ALL for all of them]\n                CA \
-O N.........[Indicate several atoms if needed]\n        \
-  -code.......3..............[Use the 1 letter cod\
-e or the 3 letters code]\n        -mode.......raw.....\
-.......[Output original pdb file]\n               \
-        pdb............[Output something that look\
-s like pdb]\n                 fasta..........[Output the s\
-equences in fasta format]\n                   simple........\
-.[Output a format easy to parse in C ]\n          \
-  -seq_field..ATOM...........[Field used to extrac\
-t the sequence]\n                     SEQRES.........[Use the \
-complete sequence]\n      -seq......................\
-.[Equivalent to  -mode fasta]\n           -model......1..\
-............[Chosen Model in an NMR file]\n       \
-    -nodiagnostic..............[Switches Error Mes\
-sages off]\n           -debug.....................\
-[Sets the DEBUG ON]\n           -no_remote_pdb_dir\
-.........[Do not look for a remote file]\n        \
-   -cache_pdb.................[Cache Value, defaul\
-t is $HOME/.t_coffee/cache, other values: NO<=> No\
- cache]\n\n      Environement Variables\n         \
-  These variables can be set from the environement\
-\n           Command line values with the correspo\
-nding flag superseed evironement value\n          \
- NO_REMOTE_PDB_DIR..........[Prevents the program \
-from searching remote file: faster]\n           PD\
-B_DIR....................[Indicates where PDB file\
- must be fetched (localy)]\n\n  PROBLEMS: please c\
-ontact cedric.notredame\\@europe.com\\n\";\n    exit\
- ($EXIT_SUCCESS);\n}\n\n$np=0;\n$n_para=$#ARGV;\n$\
-model=1;\n$pdb_dir=$ENV{'PDB_DIR'};if ($pdb_dir){$\
-pdb_dir.=\"/\";}\n$debug=$ENV{'DEBUG_EXTRACT_FROM_\
-PDB'};\n\n$no_remote_pdb_dir=$ENV{NO_REMOTE_PDB_DI\
-R};\n$HOME=$ENV{'HOME'};\nif ( $ENV{CACHE_4_TCOFFE\
-E})\n{$cache=$ENV{CACHE_4_TCOFFEE};}\nelse\n{\n   \
- $cache=\"$HOME/.t_coffee/cache/\";\n}\n\n   \n$ne\
-taddress=\"http://www.rcsb.org/pdb/files/%%.pdb.gz\
-\";\n$netcompression_pg=\"gunzip\";\n$netcompressi\
-on=\"gz\";\n\n  foreach ($np=0; $np<=$n_para; $np+\
-+)\n{        \n    $value=$ARGV[$np];\n    \n    i\
-f  ($np==0 && !($value=~/^-.*/))\n{ \n       $pdb_\
-file= $ARGV[$np];\n}\n    elsif ( !($value=~/^-.*/\
-))\n{\n        print \"@ARGV\";\n      die;\n} \n    \n    els\
-if ($value eq \"-nodiagnostic\"){$nodiagnostic=1;}\
-\n    elsif ($value eq \"-force\")\n{\n        $force_pdb\
-=1;\n}\n    elsif ($value eq \"-force_name\")\n{\n\
-       $force_name=$ARGV[++$np];\n     $force_pdb=1;\n}\n   \
- \n    elsif ($value eq \"-is_pdb_name\")\n{\n $pd\
-b_file= $ARGV[++$np];\n        \n      $is_pdb_name=1;\n       \n} \\
-n    elsif ($value eq \"-debug\")\n{\n $debug=1;\n\
-}\n    elsif ($value eq \"-get_pdb_chains\")\n{\n      \
-$pdb_file= $ARGV[++$np];\n     $get_pdb_chains=1;\n}\n\
-    elsif ($value eq \"-get_pdb_ligands\")\n{\n        $g\
-et_pdb_ligands=1;\n}\n    \n    elsif ($value eq \\
-"-get_pdb_id\")\n{\n   $pdb_file= $ARGV[++$np];\n      $g\
-et_pdb_id=1;\n \n}\n    \n    elsif ( $value eq \"\
--get_fugue_name\")\n{\n        $pdb_file= $ARGV[++$np];\n\
-       $get_fugue_name=1;\n}\n    elsif ( $value eq \"-i\
-nfile\")\n{\n       $pdb_file= $ARGV[++$np];\n} \n\
-    elsif ($value eq \"-netfile\")\n{\n        $netfile=1\
-;\n    if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_file= $ARGV\
-[++$np];}\n}\n    elsif (  $value eq \"-num\")\n{\\
-n       $numbering= $ARGV[++$np];\n}\n    elsif ( \
- $value eq \"-num_out\")\n{\n       $numbering_out\
-= $ARGV[++$np];\n}\n    elsif ( $value eq \"-netad\
-dress\")\n{\n  $netadress=$ARGV[++$np];\n}\n     \n\
-    elsif ( $value eq \"-netcompression\")\n{\n         $\
-netcompression=$ARGV[++$np];\n}\n    elsif ( $valu\
-e eq \"-pdb_dir\")\n{\n         if ( !($ARGV[$np+1]=~/^-.\
-*/)){$pdb_dir= \"$ARGV[++$np]/\";}\n}\n     elsif \
-( $value eq \"-no_remote_pdb_dir\")\n{\n       $no_remot\
-e_pdb_dir=1;\n if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_\
-dir= \"$ARGV[++$np]/\";}\n}\n    elsif ( $value eq\
- \"-cache\")\n{\n      $cache=$ARGV[++$np];\n}\n    \n \
-   elsif ($value eq \"-netcompression_pg\")\n{\n        \
- $netcompression_pg=$ARGV[++$np];\n}\n     elsif (\
-$value eq \"-mode\")\n{\n       $MODE=$ARGV[++$np]\
-;\n}\n\n    elsif ( $value eq \"-model\")\n{\n    \
-   $model= $ARGV[++$np];\n}\n    elsif ($value eq \
-\"-seq_field\" )\n{\n       $seq_field= $ARGV[++$n\
-p];\n}   \n    elsif ($value eq \"-coor\" )\n{\n  \
-     $start= $ARGV[++$np];\n  \n       if (($ARGV[\
-$np+1] eq \"\") ||($ARGV[$np+1]=~/^-.*/)){$end=\"*\
-\";} \n       else {$end=   $ARGV[++$np];}     \n \
-      $coor_set=1;\n}\n    elsif ($value eq \"-del\
-ete\" )\n{\n       $delete_start= $ARGV[++$np];\n \
-      $delete_end= $ARGV[++$np];\n       $delete_s\
-et=1;\n}\n    elsif  ($value eq \"-code\")\n{\n   \
-    $code= $ARGV[++$np];\n}\n    elsif  ($value eq\
- \"-no_hetatm\")\n{\n       $no_hetatm=1;\n}\n    \
-elsif ($value eq \"-chain\")\n{\n       while (!($\
-ARGV[$np+1] eq \"\") &&!($ARGV[$np+1]=~/^-.*/))\n{\
-\n           ++$np;\n        @c_chain=(@chain,  $ARGV[$\
-np]);\n              $hc_chain{$ARGV[$np]}=$#c_chain+1;\n\
-}           \n}\n    elsif ($value eq \"-atom\")\n\
-{\n\n       while (!($ARGV[$np+1] eq \"\") && !($A\
-RGV[$np+1]=~/^-.*/))\n{\n            ++$np;\n        $at\
-om[$n_atom++]=  $ARGV[$np];\n        $atom_list{$AR\
-GV[$np]}=1;          \n} \n       \n}\n    elsif ( $v\
-alue eq \"-unfold\")\n{\n      $unfold=1;\n}\n    elsif\
- ($value eq \"-seq\" ||$value eq \"-fasta\" )\n{\n\
-       $MODE=\"fasta\";\n}\n    elsif ( $value eq \
-\"-version\")\n{\n     print STDERR  \"\\nextract_from\
-_pdb: Version $VersionTag\\n\";\n      &myexit ($EXIT_S\
-UCCESS);\n}\n    elsif ( $value eq \"-ligand\")\n{\
-\n     while (!($ARGV[$np+1] eq \"\") && !($ARGV[$np+1\
-]=~/^-.*/))\n{\n           ++$np;\n        $ligand=1;\n           \
- $ligand_list{$ARGV[$np]}=1;         \n} \n    $hc_chai\
-n{'LIGAND'}=1;\n}\n    elsif ( $value eq \"-ligand\
-_only\")\n{\n  $ligand_only=1;\n}\n}\nif ( $debug)\\
-n{\n    print STDERR \"\\n[DEBUG:extract_from_pdb]\
- NO_REMOTE_PDB_DIR: $no_remote_pdb_dir\\n\";\n    \
-print STDERR \"\\n[DEBUG:extract_from_pdb] PDB_DIR\
-: $pdb_dir\\n\";\n}\n\nif ( $is_pdb_name)\n{\n    \
-if (remote_is_pdb_name($pdb_file, $netaddress))\n{\
-\n     print \"1\";\n}\n    else\n{\n  print \"0\";\n}\\
-n    exit ($EXIT_SUCCESS);\n}\n    \n\nif (!$force\
-_name)\n{\n    $pdb_file=~/([^\\/]*)$/;\n    $forc\
-e_name=$1;\n}\n\n$local_pdb_file=$pdb_file;\n\nif \
-( $debug){print STDERR \"\\n[DEBUG: extract_from_p\
-db] Scan For $local_pdb_file\\n\";}\n\n$mem=$no_re\
-mote_pdb_dir;\n$no_remote_pdb_dir=1;\n$tmp_pdb_fil\
-e=get_pdb_file ($local_pdb_file);\n\nif ( !-e $tmp\
-_pdb_file || $tmp_pdb_file eq \"\")\n{\n    $local\
-_pdb_file=$pdb_file;\n    ($local_pdb_file, $suffi\
-x_chain)=&pdb_name2name_and_chain($local_pdb_file)\
-;\n\n    if ($local_pdb_file)\n{\n     if ( $debug){pr\
-int STDERR \"\\nSplit $pdb_file into $local_pdb_fi\
-le and $suffix_chain \\n\";}\n $tmp_pdb_file=get_p\
-db_file ($local_pdb_file);\n   if ( $tmp_pdb_file ne\
- \"\")\n{\n        @c_chain=();\n          @c_chain=($suff\
-ix_chain);\n       %hc_chain=();\n         $hc_chain{$su\
-ffix_chain}=1;\n}\n}\n}\n\n$no_remote_pdb_dir=$mem\
-;\nif ($no_remote_pdb_dir==0)\n{\n    if ( !-e $tm\
-p_pdb_file || $tmp_pdb_file eq \"\")\n{\n      \n      $loca\
-l_pdb_file=$pdb_file;\n        ($local_pdb_file, $suffix_\
-chain)=&pdb_name2name_and_chain($local_pdb_file);\\
-n      if ($local_pdb_file)\n{\n           if ( $debug){print\
- STDERR \"\\nSplit $pdb_file into $local_pdb_file \
-and $suffix_chain \\n\";}\n        $tmp_pdb_file=get_\
-pdb_file ($local_pdb_file);    \n          if ( $tmp_pd\
-b_file ne \"\")\n{\n           @c_chain=();\n          @c_chain=($s\
-uffix_chain);\n                %hc_chain=();\n         $hc_chain{$suffi\
-x_chain}=1;\n}\n}\n}\n}\n\nif ( $debug){print STDE\
-RR \"\\n$pdb_file copied into ##$tmp_pdb_file##\\n\
-\";}\n\n\nif ( !-e $tmp_pdb_file || $tmp_pdb_file \
-eq \"\")\n{\n  if ($is_pdb_name)\n{\n      print \"0\
-\\n\"; exit ($EXIT_SUCCESS);\n}\n      else\n{\n       \n         \
- print \"\\nEXTRACT_FROM_PDB: NO RESULT for $pdb_f\
-ile [FATAL:EXTRACT_FROM_PDB Version $VersionTag]\\\
-n\";\n     &myexit ($EXIT_FAILURE);    \n}\n}\n\n\n\n\
-\n%molecule_type=&pdbfile2chaintype($tmp_pdb_file)\
-;\n\n$pdb_id=&get_pdb_id ($tmp_pdb_file);\n\nif ( \
-$pdb_id eq \"\"){$pdb_id=$force_name;}\n\n@f_chain\
-=&get_chain_list ($tmp_pdb_file);\n\n\n\nif ( $get\
-_pdb_chains)\n{\n    print \"@f_chain\\n\";\n    &\
-myexit ($EXIT_SUCCESS);\n}\nif ( $get_pdb_ligands)\
-\n{\n    %complete_ligand_list=&get_ligand_list ($\
-tmp_pdb_file);\n    print $complete_ligand_list{\"\
-result\"};\n    &myexit ($EXIT_SUCCESS);\n}\n\nels\
-if ( $get_pdb_id ||$get_fugue_name )\n{\n    if   \
- (@c_chain && $c_chain[0] eq \"FIRST\"){$pdb_id=$p\
-db_id.$f_chain[0];}\n    elsif (@c_chain && $c_cha\
-in[0] ne \" \"){$pdb_id=$pdb_id.$c_chain[0];}\n   \
- \n    print \"$pdb_id\\n\";\n    &myexit ($EXIT_S\
-UCCESS);\n    \n}\nelsif ( $is_pdb_name)\n{\n    p\
-rintf \"1\\n\";\n    &myexit ($EXIT_SUCCESS);\n}\n\
-  \n\n$structure_file=vtmpnam();\n\n\n$INFILE=vfop\
-en (\"$tmp_pdb_file\", \"r\"); \n$TMP=vfopen (\"$s\
-tructure_file\", \"w\");\n\n$print_model=1;\n$in_m\
-odel=0;\nwhile ( <$INFILE>)\n{\n  $line=$_;\n  if \
-($line =~/^MODEL\\s*(\\d*)/)\n{\n      if ($1==$model)\\
-n{\n       $in_model=1;\n          $print_model=1;\n       \
-$is_nmr=1;\n}\n        elsif ( $in_model==0)\n{\n          $pr\
-int_model=0;\n}\n      elsif ( $in_model==1)\n{\n          l\
-ast;\n}\n}\n  if ($print_model){print $TMP $line;}\
-  \n\n}\nclose ($TMP);\nclose ($INFILE);\n\n   \n\n \
- if ($numbering eq \"\"){$numbering=\"absolute\";}\
-\n  if ($numbering_out eq \"\"){$numbering_out=\"n\
-ew\";}\n\n  if ( $delete_set && $coor_set) {die \"\
--delete and -coor are mutually exclusive, sorry\\n\
-\";}\n  if ( $n_atom==0){$atom_list[$n_atom++]=\"A\
-LL\";$atom_list{$atom_list[0]}=1;}\n  if ( $seq_fi\
-eld eq \"\"){$seq_field=\"ATOM\";}\n  \n  if ( $MO\
-DE eq \"\"){$MODE=\"pdb\";}\n  elsif ( $MODE eq \"\
-simple\" && $code==0){$code=1;}\n\n  if ( $code==0\
-){$code=3;}\n\n\nif ($f_chain[0] eq \" \"){$hc_cha\
-in{' '}=1;$c_chain[0]=\" \";}\nelsif (!@c_chain){$\
-hc_chain{FIRST}=1;$c_chain[0]=\"FIRST\";}#make sur\
-e the first chain is taken by default\n\nif    ($h\
-c_chain{ALL}) \n{\n      @c_chain=@f_chain;\n     \
- foreach $e (@c_chain){$hc_chain{$e}=1;}\n}\nelsif\
-($hc_chain{FIRST})\n{\n        @c_chain=($f_chain[0]);\n       \
-$hc_chain{$f_chain[0]}=1;\n}\n\n\n$MAIN_HOM_CODE=&\
-get_main_hom_code ($structure_file);\n$INFILE=vfop\
-en ($structure_file, \"r\");\n\n\nif ( $MODE eq \"\
-raw_pdb\" || $MODE eq \"raw\")\n{\n    while (<$IN\
-FILE>)\n{      print \"$_\";}\n    close ( $INFILE);\n \
-   &myexit($EXIT_SUCCESS);\n}    \nif ( $MODE eq \\
-"raw4fugue\" )\n{\n    while (<$INFILE>)\n{    \n      $l=\
-$_;\n  if ($l=~/^SEQRES/)\n{\n     \n      $c= subst\
-r($l,11,1);\n      if ($hc_chain {$c}){print \"$l\"\
-;}\n}\n        elsif ( $l=~/^ATOM/)\n{\n           $c=substr($l\
-,21,1);\n          if ($hc_chain {$c}){print \"$l\";}\n\
-}\n}\n    close ( $INFILE);\n    &myexit($EXIT_SUC\
-CESS);\n}    \n\nif ( $MODE eq \"pdb\")\n{\n\n    \
-$read_header=0;\n    while (<$INFILE>) \n{\n       $\
-line=$_;\n         if    ($line =~ /^HEADER/){print \"\
-$line\";$read_header=1;}\n}\n    close ($INFILE);\\
-n\n    if (!$read_header)\n{\n print \"HEADER    U\
-NKNOWN                                 00-JAN-00  \
- $force_name\\n\";\n}\n\n    $INFILE=vfopen ($stru\
-cture_file, \"r\");\n    \n    print \"COMPND   1 \
-CHAIN:\";\n    $last=pop(@c_chain);\n    foreach $\
-c ( @c_chain){ print \" $c,\";}\n    if ( $last eq\
- \" \"){print \" NULL;\\n\";}\n    else \n{\n     \
- print \" $last;\\n\";\n}\n    @c_chain=(@c_chain,\
- $last);\n    \n    print \"REMARK Output of the p\
-rogram extract_from_pdb (Version $VersionTag)\\n\"\
-;\n    print \"REMARK Legal PDB format not Guarant\
-eed\\n\";\n    print \"REMARK This format is not m\
-eant to be used in place of the PDB format\\n\";\n\
-    print \"REMARK The header refers to the origin\
-al entry\\n\";\n    print \"REMARK The sequence fr\
-om the original file has been taken in the field: \
-$seq_field\\n\";\n    print \"REMARK extract_from_\
-pdb, 2001, 2002, 2003, 2004, 2005 2006 (c) CNRS an\
-d Cedric Notredame\\n\";   \n    if ( $coor_set)\n\
-{\n       print \"REMARK Partial chain: Start $sta\
-rt End $end\\n\";\n}\n    if ( $is_nmr)\n{\n      \
- print \"REMARK NMR structure: MODEL $model\\n\";\\
-n}\n   \n    if ( $n_atom!=0)\n{\n       print \"R\
-EMARK Contains Coordinates of: \";\n       foreach\
- $a (@atom){print \"$a \";}\n       print \"\\n\";\
-\n}  \n}\n\n\n\n\nmy $residue_index = -999;\nmy $o\
-ld_c = \"TemporaryChain\";\n\nwhile (<$INFILE>) \n\
-{\n    $line=$_;\n\n\n if ($line =~ /^SEQRES/)\n{\n\n\
-               @field=/(\\S*)\\s*/g;\n \n      \n              $c= substr($_,11,\
-1);\n\n                \n              $l=$#field;\n           for ($a=4; $a<$#field \
-;)\n{\n                        if (!$onelett{$molecule_type{$c}}->{$fie\
-ld[$a]})\n{\n                          splice @field, $a, 1;\n}\n                      else\
- \n{\n                         $a++;\n}\n}\n   \n              if ( $c ne $in_chain)\\
-n{\n                   $pdb_chain_list[$n_pdb_chains]=$c;\n                    $pdb\
-_chain_len [$n_pdb_chains]=$len;\n                     $in_chain=$c;\
-\n                     $n_pdb_chains++;\n}\n   \n              for ( $a=4; $a<$#fi\
-eld;$a++)\n{\n                 @{$complete_seq{$c}}->[$complete_\
-seq_len{$c}++]=$field[$a];\n}\n}\n    elsif ( $lin\
-e=~/^ATOM/ || ($line=~/^HETATM/ && &is_aa(substr($\
-line,17,3),substr($line,21,1)) && !$no_hetatm))\n{\
-\n\n    \n    $RAW_AT_ID=$AT_ID=substr($line,12,4);\\
-n      $RES_ID=&is_aa(substr($line,17,3),substr($line,2\
-1,1));\n       $CHAIN=substr($line,21,1);\n\n    $RES_NO\
-=substr($line,22,4);\n $HOM_CODE=substr ($line, 26\
-, 1);\n        $TEMP=substr($line,60,6);\n     \n      $TEMP=~s/\\\
-s//g;\n        $AT_ID=~s/\\s//g;\n     $RES_ID=~s/\\s/\
-/g;\n        $RES_NO=~s/\\s//g;\n              \n      if ( $HOM_CO\
-DE ne $MAIN_HOM_CODE){next;}\n elsif ( $already_re\
-ad2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO}){next;}\n        el\
-se{$already_read2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO\
-}=1;}\n        \n      \n      if ($coor_set && $numbering eq \"fil\
-e\" && $residue_index ne $RES_NO)\n{\n     \n      \
-if ( $RES_NO<=$start){$real_start{$CHAIN}++;}\n          \
-  if ( $RES_NO<=$end){$real_end{$CHAIN}++;}\n}\n       e\
-lsif ($numbering eq \"absolute\")\n{\n     $real_s\
-tart{$CHAIN}=$start;\n     $real_end{$CHAIN}=$end;\
-\n}\n\n        $KEY=\"ALL\";\n        if ( $CHAIN \
-ne $in_atom_chain)\n{\n            \n    $pdb_atom_chain_l\
-ist[$n_pdb_atom_chains]=$c;\n    $pdb_atom_chain_le\
-n [$n_pdb_atom_chains]=$len;\n   $in_atom_chain=$c\
-;\n      $n_pdb_atom_chains++;\n}\n    \n      if ( $residue_\
-index ne $RES_NO)\n{\n      $residue_index = $RES_\
-NO;\n       @{$atom_seq{$CHAIN}}->[$atom_seq_len{$C\
-HAIN}++]=$RES_ID;;\n}\n}\n\n}\nclose ($INFILE);\n\\
-n\n\n\n\n\n$INFILE=vfopen ($structure_file, \"r\")\
-;\nforeach $c (@c_chain)\n{\n  if    ( $seq_field e\
-q \"SEQRES\"){@pdb_seq=@{$complete_seq{$c}};}\n        el\
-sif ( $seq_field eq \"ATOM\")  {@pdb_seq=@{$atom_s\
-eq{$c}};}\n    \n\n    $full_length=$l=$#pdb_seq+1;\n          \\
-n      if ( $real_end{$c}==\"*\"){$real_end{$c}=$full_l\
-ength;}\n      if ( $coor_set)\n{         \n\n    if ( $real\
-_end{$c} < $l){splice @pdb_seq, $real_end{$c}, $l;\
-}\n       if ( $real_start{$c} < $l){splice @pdb_seq,\
- 0, $real_start{$c}-1;}                   \n      $l=$#pdb_seq;\\
-n}\n\n elsif ( $delete_set)\n{\n          splice @pdb_se\
-q, $delete_start, $delete_end-$delete_start+1;\n        \
-  $l=$#pdb_seq;\n}\n   \n      $new_fasta_name=\"$pdb_id$\
-c\";\n if ( $coor_set)\n{\n       if ( $n_pdb_chains=\
-=0){$new_fasta_name=\"$new_fasta_name$c\";}\n     $\
-new_fasta_name= $new_fasta_name.\"\\_$start\\_$end\
-\";\n}\n          \n   if ( $MODE eq \"pdb\")\n{\n        $nl=\
-1;\n      $n=0;\n         \n      foreach $res ( @pdb_seq)\\
-n              {\n             if ( !$n)\n             {\n             \n               printf \"SEQRES  %2\
-d %1s %4d  \", $nl,$c, $l;\n            $nl++;\n       }\n          $\
-res=~s/\\s//g;\n            \n      if ($code==1){ print\
-f \"%3s \",$onelett{$molecule_type{$c}}->{$res};}\\
-n           elsif  ($code==3){ printf \"%3s \",$res};\n\
-            \n      $n++;                \n         if ( $n==13){$n=0;p\
-rint \"\\n\";}\n}\n      if ( $n!=0){print \"\\n\"; $\
-n=0;}\n}\n     elsif ( $MODE eq \"simple\")\n{\n         pri\
-nt \"# SIMPLE_PDB_FORMAT\\n\";\n         if ( $new_fasta\
-_name eq \" \"){$new_fasta_name=\"dummy_name\";}\n\
-         print \">$new_fasta_name\\n\";\n\n      foreach $r\
-es ( @pdb_seq)\n{\n          print \"$onelett{$molecu\
-le_type{$c}}->{$res}\";\n}\n     print \"\\n\";\n}\n\
-       elsif ( $MODE eq \"fasta\")\n{\n          $n=0;\n         prin\
-t \">$new_fasta_name\\n\";\n     \n      foreach $res (\
- @pdb_seq)\n{\n\n            print \"$onelett{$molecule\
-_type{$c}}->{$res}\";\n              $n++;\n        \
- if ( $n==60){print \"\\n\"; $n=0;}\n}\n         print \\
-"\\n\"; \n}\n}\n\nif ( $MODE eq \"fasta\")\n{\n   \
-  &myexit($EXIT_SUCCESS);\n  \n}\n\n  \n  $charcou\
-nt=0;\n  $inchain=\"BEGIN\";\n  $n=0;\n  while (<$\
-INFILE>) \n{\n    $line=$_;\n     \n    if ($line \
-=~/^ATOM/  ||  ($line=~/^HETATM/))\n{\n        $line_head\
-er=\"UNKNWN\";\n       $RES_ID=substr($line,17,3);\n   $ch\
-ain = substr($line,21,1);\n\n  if ($line =~/^ATOM/)\
-\n{\n      $line_header=\"ATOM\";\n        $RES_ID=(&i\
-s_aa($RES_ID,$chain))?&is_aa($RES_ID,$chain):$RES_\
-ID;\n}\n       elsif ($line=~/^HETATM/ && ($ligand_list \
-{$RES_ID} ||$ligand_list {'ALL'} || !&is_aa($RES_I\
-D,$chain)))\n{\n           $line_header=\"HETATM\";\n}\n\
-       elsif ($line=~/^HETATM/ && (&is_aa($RES_ID,$chain\
-) && !$no_hetatm))\n{\n            $line_header=\"ATOM\";\
-\n         $RES_ID=&is_aa($RES_ID,$chain);\n}\n        else\n\
-{\n        next;\n}\n\n        \n\n    $X=substr($line,30,8);  \
-   \n  $Y=substr($line,38,8);\n        $Z=substr($line,46,\
-8);\n  $TEMP=substr($line,60,6);\n     \n      $RAW_AT_ID=$A\
-T_ID=substr($line,12,4);\n     $CHAIN=substr($line,21,\
-1);\n  $RES_NO=substr($line,22,4);\n   $HOM_CODE=subs\
-tr ($line, 26, 1);\n   \n      $X=~s/\\s//g;\n $Y=~s/\\s/\
-/g;\n  $Z=~s/\\s//g;\n $TEMP=~s/\\s//g;\n      \n      $AT_ID\
-=~s/\\s//g;\n  $RES_ID=~s/\\s//g;\n    $RES_NO=~s/\\s/\
-/g;\n\n        \n      if ( $HOM_CODE ne $MAIN_HOM_CODE){next;\
-}\n    elsif ( $already_read{$CHAIN}{$RES_ID}{$AT_ID}\
-{$RES_NO}){next;}\n    else{$already_read{$CHAIN}{$RE\
-S_ID}{$AT_ID}{$RES_NO}=1;}\n   \n      $KEY=\"ALL\";\n\n \
-       if ( $RES_NO ==0){$start_at_zero=1;}\n\n        $RE\
-S_NO+=$start_at_zero;    \n    \n      if ( $current_chain\
- ne $CHAIN)\n{\n           $current_chain=$CHAIN;\n        \
-$pos=$current_residue=0;\n         $offset=($coor_set)\
-?($real_start{$CHAIN}-1):0;\n      if    ( $seq_fie\
-ld eq \"SEQRES\"){@ref_seq=@{$complete_seq{$CHAIN}\
-};}\n      elsif ( $seq_field eq \"ATOM\")  {@ref_s\
-eq=@{$atom_seq{$CHAIN}};}\n}\n \n      if ($current_res\
-idue != $RES_NO)\n{\n      $current_residue=$RES_NO\
-;\n        if    ( $seq_field eq \"SEQRES\"){$pos=$cu\
-rrent_residue;}\n          elsif ( $seq_field eq \"ATOM\
-\"){$pos++;}\n}\n      \n      \n      if ($n_atom==0 || $atom_li\
-st{$AT_ID}==1 || $atom_list{$KEY}==1)\n{       \n          \\
-n          $do_it=(!@c_chain || $hc_chain{$CHAIN} ||$hc\
-_chain{'LIGAND'} );\n      \n      $do_it= ($do_it==\
-1) && ($coor_set==0 ||($pos>=$real_start{$CHAIN} &\
-& $pos<=$real_end{$CHAIN}));\n     $do_it= ($do_it\
-==1) && ($delete_set==0 || $pos<$delete_start ||$p\
-os>$delete_end );\n        if ($ligand==0 && $line_he\
-ader eq \"HETATM\" ){$do_it=0;}\n          if ($ligand_\
-only==1 && $line_header eq \"ATOM\" ){$do_it=0;}\n\
-           if ($ligand==1 && $line_header eq \"HETATM\" \
-&& $ligand_list{$RES_ID}==0 && $ligand_list{\"ALL\\
-"}==0){$do_it=0;} \n       \n      \n      if ( $do_it\
-)\n{\n         $n++;\n         $out_pos=$pos;\n                \n             if ( \
-$delete_set)\n{\n                if ( $out_pos< $delete_start)\
-{;}\n            else {$offset=$delete_end-$delete_start;}\
-\n}       \n          \n              if ( $numbering_out \
-eq \"new\"){$out_pos-=$offset;}\n             elsif ( $\
-numbering_out eq \"old\"){$out_pos=$RES_NO;}\n    \
-    \n       \n               \n              if ( $code==1){$R\
-ES_ID=$onelett{$molecule_type{$c}}->{$RES_ID};}\n      \
-    \n        if ($unfold)\n{\n                   $unfolded_x+=5\
-;\n               $X=$unfolded_x;\n               $Y=0;\n                 $Z=0;\n      \
-          $float=1;\n}\n              else\n{\n                   $float=3;\\
-n}\n\n        if ( $MODE eq \"pdb\")\n{\n                 prin\
-tf \"%-6s%5d %-4s %3s %s%4d    %8.3f%8.3f%8.3f  1.\
-00 %5.2f\\n\",$line_header, $n, $RAW_AT_ID,$RES_ID\
-,$CHAIN,$out_pos, $X, $Y, $Z,$TEMP;              \n}\n      \
-  elsif ( $MODE eq \"simple\")\n{\n                if ( $RES\
-_ID eq \"\"){$RES_ID=\"X\";}\n           printf \"%-6s %5\
-s %s %2s %4d    %8.3f %8.3f %8.3f\\n\",$line_heade\
-r, $AT_ID, $RES_ID,($CHAIN eq\"\" || $CHAIN eq \" \
-\")?\"A\":$CHAIN,$out_pos, $X, $Y, $Z,$TEMP;\n}\n\\
-n}\n}\n}\n}\nprint \"\\n\";\nclose($INFILE);\n\n\n\
-if ( $error ne \"\") \n{$error=$error.\"\\nDiagnos\
-tic:    SEQRES and the residues in ATOM are probab\
-ly Incompatible\\n\";\n    $error=$error.  \"Recom\
-endation: Rerun with '-fix 1' in order to ignore t\
-he SEQRES sequences\\n\";\n}\nif (!$nodiagnostic){\
-print STDERR $error;}\n&myexit ( $EXIT_SUCCESS);\n\
-\nsub remote_is_pdb_name \n{\n    my $in=@_[0];\n \
-   my $netaddress=@_[1];\n    my $ref_file, $pdb;\\
-n    my $value;\n\n    if ( $in=~/[^\\w\\d\\:\\_]/\
-){return 0;}\n    \n    \n    $ref_file=\"$cache/p\
-db_entry_type.txt\";\n    \n    if ( !-e $ref_file\
- || (-M $ref_file)>2 || -z $ref_file)\n{\n     &url2fi\
-le(\"ftp://ftp.wwpdb.org/pub/pdb/derived_data/pdb_\
-entry_type.txt\", $ref_file);\n}\n \n    $pdb=subs\
-tr ($in,0, 4);\n    \n    \n    $value=`grep -c $p\
-db $ref_file`;\n    return $value;\n}\n      \nsub\
- is_pdb_file\n{\n    my @arg=@_;\n\n    if ( !-e $\
-arg[0]){return 0;}\n    \n    $F=vfopen ($arg[0], \
-\"r\");\n    while ( <$F>)\n{\n        if (/^HEADER/)\n{\\
-n          close $F;\n     return 1;\n}\n      elsif ( /^SEQ\
-RES/)\n{\n         close $F;\n     return 1;\n}\n      elsi\
-f ( /^ATOM/)\n{\n          close $F;\n     return 1;\n}\
-\n}\n    return 0;\n}\nsub get_pdb_id\n{\n    my $\
-header_file=@_[0];\n    my $id;\n    \n\n    $F=vf\
-open (\"$header_file\", \"r\");\n\n    while ( <$F\
->)\n{\n        \n      if ( /HEADER/)\n{\n         $id=substr($_,6\
-2,4 );\n           return $id;\n}\n}\n    close ($F);\n \
-   \n    return \"\";\n}\n\nsub get_ligand_list\n{\
-\n    my $pdb_file=@_[0];\n    my $chain;\n    my \
-$ligand;\n    my %complete_ligand_list;\n    \n\n \
-   $F=vfopen ($pdb_file, \"r\");\n    while ( <$F>\
-)\n{\n if ( /^HETATM/)\n{\n        $line=$_;\n     $c\
-hain=substr($line,21,1);\n         $ligand=substr($lin\
-e,17,3);\n         \n      if (!$complete_ligand_list{$\
-chain}{$ligand})\n{\n          \n              $complete_ligand_list{\\
-"result\"}.=\"CHAIN $chain LIGAND $ligand\\n\";\n      \
-       $complete_ligand_list{$chain}{$ligand}=1;\n}\n}\n\
-}\n    close ($F);\n    return %complete_ligand_li\
-st;\n}\n\nsub get_chain_list \n{\n    my $header_f\
-ile;\n    my @chain_list;\n    my @list;\n    my $\
-n_chains;\n    my %chain_hasch;\n    my $pdb_file=\
-@_[0];\n    my $c;\n    my %hasch;\n    my $chain;\
-\n  \n    \n    $F=vfopen ($pdb_file, \"r\");\n   \
- while ( <$F>)\n{\n\n\n        if (/SEQRES\\s+\\d+\\s+(\\\
-S+)/)\n{\n         $chain = substr($_,11,1);$chain=~s/\
-\\s//g;if ( $chain eq \"\"){$chain=\" \";}\n      \n\
-           \n      if ($chain && !$hasch{$chain}){$hasch{\
-$chain}=1;push @chain_list, $chain;}\n}\n      if (/^AT\
-OM/ || /^HETATM/)\n{\n     $chain = substr($_,21,1\
-); $chain=~s/\\s//g;if ( $chain eq \"\"){$chain=\"\
- \";}\n            if ($chain && !$hasch{$chain}){$hasch{\
-$chain}=1;push @chain_list, $chain;}\n}\n}\n    \n\
-   \n    close ($F);\n    if (!@chain_list)\n{\n       @\
-chain_list=(\"A\");\n}\n    return @chain_list;\n}\
-\n\nsub token_is_in_list\n{\n\n    my @list=@_;\n \
-   my $a;\n    \n    for ($a=1; $a<=$#list; $a++)\\
-n{\n   if ( $list[$a] eq $list[0]){return $a;}\n}\n}\
-\n\nsub pdb_name2name_and_chain \n{\n    my $pdb_f\
-ile=@_[0];\n    my $pdb_file_in;\n    my @array;\n\
-    my $chain;\n    my $c;\n\n    $pdb_file_in=$pd\
-b_file;\n\n    $pdb_file=~/^(.{4})/;$pdb_id=$1;\n \
-   @array=($pdb_file=~/([\\w])/g);\n  \n  \n    $c\
-hain=uc ($array[4]);\n    $chain=($chain eq \"\")?\
-\"FIRST\":$chain;\n    \n    return ( $pdb_id, $ch\
-ain);\n\n    if ( $#array==3){return ($pdb_id, \"F\
-IRST\");}\n    elsif ( $#array<4){ return ($pdb_id\
-, \"\");}\n    else {return ( $pdb_id, $chain);}\n\
-      \n    \n    \n}\nsub get_main_hom_code \n{\n\
-    my $pdb_file=@_[0];\n    my %hom, $n, $best, $\
-best_h;\n    open (F, $pdb_file);\n    while (<F>)\
-\n{\n  if ( $_=~/^ATOM/)\n{\n      $h=substr ($_,26,\
- 1);\n     $n=++$hom{$h};\n        if ($n>$best)\n{\n\
-               $best=$n;\n             $best_h=$h;\n}\n}\n}\n    close (F)\
-;\n    return $best_h;\n}\n\n\nsub get_pdb_file \n\
-{\n    my ($pdb_file_in)=(@_);\n    my $result;\n \
-   my @letter;\n    my @chain;\n    my $v;\n    my\
- $pdb_file=$pdb_file_in;\n\n    $pdb_file=($pdb_fi\
-le_in=~/\\S+_S_(\\S+)/)?$1:$pdb_file_in;\n\n    if\
- ($no_remote_pdb_dir==0)\n{\n  $no_remote_pdb_dir=1\
-;\n    $result=get_pdb_file3 ($pdb_file);\n    $no_remot\
-e_pdb_dir=0;\n if ( $result){return $result;}\n        el\
-se\n{\n            \n      lc ($pdb_file);\n       $result=g\
-et_pdb_file3($pdb_file);\n         return  $result;\n}\
-\n}\n    else\n{\n     return get_pdb_file3 ($pdb_file\
-);\n}\n    \n}\n\nsub get_pdb_file3 \n{\n    my $p\
-db_file_in=@_[0];\n    my $result;\n    my @letter\
-;\n    my @chain;\n    my $lcfile;\n    my $ucfile\
-;\n    my $pdb_file=$pdb_file_in;\n    \n    $lcfi\
-le=lc $pdb_file;\n    $ucfile=uc $pdb_file;\n\n   \
- if ( ($result=get_pdb_file2 ($pdb_file))){return \
-$result;}\n    \n\n    if ($lcfile ne $pdb_file &&\
- ($result=get_pdb_file2 ($lcfile))){return $result\
-;}\n    if ($ucfile ne $pdb_file && ($result=get_p\
-db_file2 ($ucfile))){return $result;}\n    \n   \n\
-    \n    return \"\";\n}\nsub get_pdb_file2\n{\n \
-   my $pdb_file=@_[0];\n    my $return_value;\n   \
- \n    $return_value=\"\";\n    \n    if ( ($resul\
-t=get_pdb_file1 ($pdb_file))){$return_value=$resul\
-t;}\n    elsif ( !($pdb_file=~/\\.pdb/) && !($pdb_\
-file=~/\\.PDB/))\n{\n  if ( ($result=get_pdb_file1 \
-(\"$pdb_file.pdb\"))){$return_value=$result;}\n        el\
-sif ( ($result=get_pdb_file1 (\"$pdb_file.PDB\")))\
-{$return_value=$result;}\n\n   elsif ( ($result=get_\
-pdb_file1 (\"pdb$pdb_file.pdb\"))){$return_value=$\
-result;}       \n      elsif ( ($result=get_pdb_file1 (\"pdb$\
-pdb_file.PDB\"))){$return_value=$result;}\n    elsif \
-( ($result=get_pdb_file1 (\"PDB$pdb_file.PDB\"))){\
-$return_value=$result;}\n      elsif ( ($result=get_pdb\
-_file1 (\"PDB$pdb_file.pdb\"))){$return_value=$res\
-ult;}\n        \n      \n      elsif ( ($result=get_pdb_file1 (\"$p\
-db_file.ent\"))){$return_value=$result;}\n     elsif (\
- ($result=get_pdb_file1 (\"pdb$pdb_file.ent\"))){$\
-return_value=$result;}\n       elsif ( ($result=get_pdb_\
-file1 (\"PDB$pdb_file.ent\"))){$return_value=$resu\
-lt;}\n\n       elsif ( ($result=get_pdb_file1 (\"$pdb_fi\
-le.ENT\"))){$return_value=$result;}\n  elsif ( ($re\
-sult=get_pdb_file1 (\"pdb$pdb_file.ENT\"))){$retur\
-n_value=$result;}\n    elsif ( ($result=get_pdb_file1\
- (\"PDB$pdb_file.ENT\"))){$return_value=$result;}\\
-n      \n      \n      \n}\n    return $return_value;\n}\n    \ns\
-ub get_pdb_file1\n{\n    my ($pdb_file)=(@_);\n   \
- my $return_value;\n    \n\n    $return_value=\"\"\
-;\n    if ( ($result=get_pdb_file0 ($pdb_file))){$\
-return_value=$result;}\n    elsif ( ($result=get_p\
-db_file0 (\"$pdb_file.Z\"))){$return_value=$result\
-;}\n    elsif ( ($result=get_pdb_file0 (\"$pdb_fil\
-e.gz\"))){$return_value=$result;}\n    elsif ( ($r\
-esult=get_pdb_file0 (\"$pdb_file.GZ\"))){$return_v\
-alue=$result;}\n    return $return_value;\n}\nsub \
-get_pdb_file0 \n{ \n    my ($pdb_file, $attempt)=(\
-@_);\n    my $pdb_file=@_[0];\n    my $tmp_pdb_fil\
-e;    \n    my $return_value;\n\n    if ( !$attemp\
-t){$attempt=1;}\n    \n    $local_pdb_file=\"$pdb_\
-file\";\n    if ( $local_pdb_file eq \"\")\n{\n        $t\
-mp_pdb_file=vtmpnam();\n       open F, \">$tmp_pdb_file\\
-";\n   \n      while (<STDIN>){print F \"$_\";}\n      close (\
-F);\n  \n      if (-e $tmp_pdb_file && &is_pdb_file ( $l\
-ocal_pdb_file))\n{return $tmp_pdb_file;}\n}\n\n   \
- $local_pdb_file=\"$pdb_file\";\n    &debug_print \
-(\"\\nTry access local file: $local_pdb_file\");\n\
-    \n    $local_pdb_file=&check_pdb_file4compress\
-ion ($local_pdb_file);\n    if ( -e $local_pdb_fil\
-e && (&is_pdb_file ($local_pdb_file) || $force_pdb\
-))\n{\n        &debug_print ( \"\\n\\tIs in Current Dir\"\
-);\n   $tmp_pdb_file=vtmpnam();\n      `cp $local_pdb_fil\
-e $tmp_pdb_file`;\n    return $tmp_pdb_file;\n}\n    \
-else\n{\n      &debug_print (\"\\n\\tFile Not in Curren\
-t Dir\");\n}\n\n    if ($pdb_file=~/^pdb/||$pdb_fi\
-le=~/^PDB/){$pdb_div=substr ($pdb_file, 4, 2);}\n \
-   else\n{\n     $pdb_div=substr ($pdb_file, 1, 2);\\
-n}\n    $local_pdb_file=\"$pdb_dir/$pdb_div/$pdb_f\
-ile\";\n    $local_pdb_file=&check_pdb_file4compre\
-ssion ( $local_pdb_file);\n    &debug_print (\"\\n\
-Try access file From PDB_DIR: $local_pdb_file\");\\
-n    if ($pdb_dir && -e $local_pdb_file && &is_pdb\
-_file ($local_pdb_file))\n{\n  &debug_print ( \"\\n\
-\\tIs in Local PDB DIR\");\n   $tmp_pdb_file=vtmpnam\
-();\n  `cp $local_pdb_file $tmp_pdb_file`;\n   return\
- $tmp_pdb_file;\n}\n\n    $local_pdb_file=\"$pdb_d\
-ir/$pdb_file\";\n    $local_pdb_file=&check_pdb_fi\
-le4compression ( $local_pdb_file);\n    &debug_pri\
-nt (\"\\nTry access file From PDB_DIR: local_pdb_f\
-ile\");\n    if ($pdb_dir && -e $local_pdb_file &&\
- &is_pdb_file ($local_pdb_file))\n{\n  &debug_print\
- ( \"\\n\\tIs in Local PDB DIR\");\n   $tmp_pdb_file\
-=vtmpnam();\n  `cp $local_pdb_file $tmp_pdb_file`;\\
-n      return $tmp_pdb_file;\n}\n\n    $local_pdb_file=\
-\"$pdb_dir$pdb_file\";\n    $local_pdb_file=&check\
-_pdb_file4compression ( $local_pdb_file);\n    &de\
-bug_print (\"\\nTry access file From PDB_DIR: $loc\
-al_pdb_file\");\n    if ($pdb_dir && -e $local_pdb\
-_file && &is_pdb_file ($local_pdb_file))\n{\n  &deb\
-ug_print ( \"\\n\\tIs in Local PDB DIR\");\n   $tmp_\
-pdb_file=vtmpnam();\n  `cp $local_pdb_file $tmp_pdb\
-_file`;\n      return $tmp_pdb_file;\n}\n    else\n{&de\
-bug_print ( \"\\n\\tNot In Local Pdb Dir\");}\n\n \
-   if ($cache ne \"NO\" && $cache ne \"no\")\n{\n\\
-n      $local_pdb_file=\"$cache/$pdb_file\";\n $local_p\
-db_file=&check_pdb_file4compression ( $local_pdb_f\
-ile);\n        &debug_print(\"\\nTry access file From Cac\
-he: $local_pdb_file\");\n      if (-e $local_pdb_file &\
-& &is_pdb_file ($local_pdb_file))\n{\n     &debug_\
-print ( \"\\n\\tIs in T-Coffee Cache\");\n         $tm\
-p_pdb_file=vtmpnam();\n            `cp $local_pdb_file $t\
-mp_pdb_file`;\n            return $tmp_pdb_file;\n}\n  els\
-e{&debug_print ( \"\\n\\tNot in Cache Dir\");}\n}\\
-n\n    if (!$no_remote_pdb_dir) \n{\n\n        my $return\
-_value=\"\";\n if ( &remote_is_pdb_name ($pdb_file\
-, $netaddress)==1)\n{\n            &debug_print (\"\\n***\
-**************************************************\
-**\\nTry Remote Access for $pdb_file\");\n         $tm\
-p_pdb_file=vtmpnam();\n            $netcommand=$netaddres\
-s;\n       $netcommand=~s/%%/$pdb_file/g;\n        &url\
-2file(\"$netcommand\", \"$tmp_pdb_file.$netcompres\
-sion\");\n         &debug_print(\"\\nREMOTE: $netcomma\
-nd\\n\");\n       \n       $compressed_tmp_file_name=\"\
-$tmp_pdb_file.$netcompression\";\n         \n      if (\
-$netcompression && -B $compressed_tmp_file_name)\n\
-{\n            my $r;\n                &debug_print (\"\\n\\tFile Found Re\
-motely\");\n           if (($r=safe_system ( \"$netcompress\
-ion_pg $compressed_tmp_file_name\")!=$EXIT_SUCCESS\
-) && $attempts<5)\n{\n             &debug_print (\"\\n\\t\
-Proper Download Failed Try again\");\n             unlink\
- $compressed_tmp_file_name;\n              print \"\\nFail\
-ed to Download $compressed_tmp_file_name. New Atte\
-mpt $attempt/5\\n\";\n             return &get_pdb_file0(\
-$pdb_file, $attempt+1);\n}\n           elsif ($r== $EXIT_SU\
-CCESS)\n{\n                &debug_print (\"\\n\\tProper Down\
-load Succeeded \");\n              $return_value=$tmp_pdb_\
-file;\n}\n             else\n{\n                   &debug_print (\"\\n\\tP\
-roper Download Failed \");\n               &debug_print (\"\
-\\nFile Not Found Remotely\");\n                   unlink $comp\
-ressed_tmp_file_name;\n}\n}\n      else\n{\n           &debu\
-g_print (\"\\nFile Not Found Remotely\");\n            unlin\
-k $compressed_tmp_file_name;\n}\n          if ($cache n\
-e \"no\" && $cache ne \"update\" && -e $return_val\
-ue)\n{\n               `cp $return_value $cache/$pdb_file.pdb`;\
-\n}\n}\n       &debug_print (\"\\nRemote Download Finish\
-ed\");\n       return $return_value;\n}\n    return \"\"\
-;\n}\n\nsub check_pdb_file4compression \n{\n    my\
- $file=@_[0];\n    my $tmp;\n    my $r;\n    \n   \
- $tmp=&vtmpnam();\n    if (-e $tmp){unlink $tmp;}\\
-n    \n    $file=~s/\\/\\//\\//g;\n    if    (-B $\
-file && ($file=~/\\.Z/)) {`cp $file $tmp.Z`;`rm $t\
-mp`;`gunzip $tmp.Z $SILENT`;$r=$tmp;}\n    elsif (\
--B $file && ($file=~/\\.gz/)){`cp $file $tmp.gz`;`\
-gunzip $tmp.gz $SILENT`;return $r=$tmp;}\n    elsi\
-f (-B $file ){`cp $file $tmp.gz`;`gunzip $tmp.gz $\
-SILENT`;$r=$tmp;}\n    elsif ( -e $file ) {$r= $fi\
-le;}\n    elsif ( -e \"$file.gz\" ){ `cp $file.gz \
-$tmp.gz`;`gunzip     $tmp.gz $SILENT`;$r=$tmp;}   \
- \n    elsif ( -e \"$file.Z\") {`cp $file.Z  $tmp.\
-Z`; `gunzip $tmp.Z $SILENT`;$r=$tmp;}\n    else  {\
-$r= $file;}\n\n    if ( -e \"$tmp.Z\"){unlink \"$t\
-mp.Z\";}\n    if ( -e \"$tmp.gz\"){unlink \"$tmp.g\
-z\";}\n    \n    return $r;\n    \n}\n\nsub vtmpna\
-m\n{\n    my $tmp_file_name;\n    $tmp_name_counte\
-r++;\n    $tmp_file_name=\"tmp_file_for_extract_fr\
-om_pdb$$.$tmp_name_counter\";\n    $tmp_file_list[\
-$ntmp_file++]=$tmp_file_name;\n    if ( -e $tmp_fi\
-le_name) {return &vtmpnam ();}\n    else {return $\
-tmp_file_name;}\n}\n\n\n\n    \n\n\nsub safe_syste\
-m \n{\n  my $com=@_[0];\n  my $pid;\n  my $status;\
-\n  if ($com eq \"\"){return 1;}\n  if (($pid = fo\
-rk ()) < 0){return (-1);}\n  if ($pid == 0)\n{\n  \
-    exec ($com);\n}\n  else\n{\n       $PIDCHILD=$pid;\n\
-}\n  \n  waitpid ($pid,WTERMSIG);\n  return $?; #c\
-ontains the status of the exit\n}\nEND {\n  kill (\
-$PIDCHILD);\n  clean(@tmp_file_list);\n}\nsub myex\
-it\n{\n    my $exit_status=@_[0];\n    \n    &clea\
-n(@tmp_file_list);\n    exit ( $exit_status);\n}\n\
-\nsub clean\n{\n  my @fl=@_;\n  my $file;\n  \n\n \
-  if ( $debug){print STDERR \"remove $#fl files\\n\
-\";}\n\n  foreach $file ( @fl)\n{\n      if (-e $f\
-ile)\n{\n        if ( $debug){print STDERR \"\\n$file [\
-NOT DELETED]\";}\n       else{unlink ($file);} \n}\n}\\
-n}\nsub vfopen \n{\n    my $file=@_[0];\n    my $m\
-ode=@_[1];\n    my $tmp;\n    my $F = new FileHand\
-le;\n    \n    \n    $tmp=$file;\n     \n    \n    if \
-( $mode eq \"r\" && !-e $file){ die \"Cannot open \
-file $file [FATAL: EXTRACT_FROM_PDB]\\n\";}\n    e\
-lsif ($mode eq \"w\"){$tmp=\">$file\";}\n    elsif\
- ($mode eq \"a\"){$tmp=\">>$file\";}\n    \n    \n\
-    open ($F,$tmp);\n    return $F;\n}\nsub debug_\
-print\n{\n    my $message =@_[0];\n    if ($debug)\
-{print STDERR \"NO_REMOTE_PDB_DIR: $no_remote_pdb_\
-dir - $message [DEBUG:extract_from_pdb]\";}\n    r\
-eturn;\n}\nsub is_aa \n{\n    my ($aa, $chain) =@_\
-;\n\n    my $one;\n    my $trhee;\n    \n    if ( \
-$onelett{$molecule_type{$chain}}->{$aa} eq 'X' || \
-!$onelett{$molecule_type{$chain}}->{$aa} ){return \
-'';}\n    else\n{\n    $one=$onelett{$molecule_type{$\
-chain}}->{$aa};\n\n    $three=$threelett{$molecule_ty\
-pe{$chain}}->{$one};\n \n\n    return $three;\n}\n\n}\
-\nsub pg_is_installed\n{\n    my @ml=@_;\n    my $\
-r, $p, $m;\n    my $supported=0;\n    \n    my $p=\
-shift (@ml);\n    $r=`which $p 2>/dev/null`;\n    \
-if ($r eq \"\"){return 0;}\n    else {return 1;}\n\
-}\nsub check_pg_is_installed\n{\n    my @ml=@_;\n \
-   my $r=&pg_is_installed (@ml);\n    if (!$r)\n{\\
-n      print STDERR \"\\nProgram $p Supported but Not I\
-nstalled on your system [FATAL:tc_generic_method]\\
-\n\";\n        myexit ($EXIT_FAILURE);\n}\n    else\n{\n       \
-return 1;\n}\n}\n\nsub url2file\n{\n    my ($addre\
-ss, $out, $wget_arg, $curl_arg)=(@_);\n    my ($pg\
-, $flag, $r, $arg, $count);\n    \n    if ( $INTER\
-NET==-1)\n{\n  $INTERNET=1;\n  $INTERNET=&check_inte\
-rnet_connection();\n}\n    if ($INTERNET==0){exit(\
-$EXIT_FAILURE);}\n   \n    if (&pg_is_installed (\\
-"wget\"))   {$pg=\"wget\"; $flag=\"-O\";$arg=$wget\
-_arg;}\n    elsif (&pg_is_installed (\"curl\")){$p\
-g=\"curl\"; $flag=\"-o\";$arg=$curl_arg;}\n    els\
-e\n{\n print stderr \"ERROR: neither curl nor wget\
- are installed. Imnpossible to tectch remote file \
-[FATAL]\\n\";\n        exit ($EXIT_FAILURE);\n}\n   \n   \
- $r=safe_system (\"$pg $flag$out $address >/dev/nu\
-ll 2>/dev/null\");\n    if ($r!=$EXIT_SUCCESS)\n{\\
-n      unlink $file;\n}\n    return $r;\n}\n\n\n\nsub c\
-heck_internet_connection\n{\n    my $internet;\n  \
-  \n    if ( -e \"x\"){unlink (\"x\");}\n    url2f\
-ile(\"www.google.com\", \"x\");\n    \n    if ( !-\
-e \"x\" || -s \"x\" < 10){$internet=0;}\n    else \
-{$internet=1;}\n    if (-e \"x\"){unlink \"x\";}\n\
-    return $internet;\n}\n\n\n\nsub pdbfile2chaint\
-ype\n  {\n    my $file=@_[0];\n    my %ct;\n    my\
- $F;\n    \n    $F=vfopen ($file, \"r\");\n    whi\
-le (<$F>)\n      {\n   my $line=$_;\n  if ($line =~/^\
-ATOM/)\n         {\n       my $C=substr($line,21,1);\n    \
- if (!$ct{$C})\n             { \n              my $r=substr($line,17\
-,3);\n         $r=~s/\\s+//;\n         if (length ($r)==1){$ct{$\
-C}=\"R\";}\n           elsif (length ($r)==2){$ct{$C}=\"D\"\
-;}\n           elsif (length ($r)==3){$ct{$C}=\"P\";}\n                el\
-se \n            {\n               print \"ERROR: Could not read RE\
-S_ID field in file $file [FATAL:extract_from_pdb]\\
-\n\";die;\n              }\n         }\n         }\n      }\n    clo\
-se ($F);\n    return %ct;\n  }\n   \n    \n\n\n\ns\
-ub fill_threelett_RNA\n{\n\n   my %threelett=(\n       'A'\
-, '  A',\n     'T', '  T',\n   'U', '  U',\n   'C', '  C',\
-\n     'G', '  G',\n   'I', '  I', #Inosine\n  );\n    \n      re\
-turn %threelett;\n\n}\n\n\nsub fill_onelett_RNA\n{\
-\n     my   %onelett=(\n       '  A' => 'A',\n '  T' => 'T',\
-\n     '  U' => 'U',\n '  C' => 'C',\n '  G' => 'G',\n\
-       'CSL' => 'X',\n 'UMS' => 'X',\n '  I' => 'I',\n '\
-A' => 'A',\n   'T' => 'T',\n   'U' => 'U',\n   'C' => 'C\
-',\n   'G' => 'G',\n   'I' => 'I',\n   );\n\n  return %on\
-elett;\n\n}\n\n\nsub fill_onelett_DNA\n{\n     my   %o\
-nelett=(\n     ' DA', 'A',\n   ' DT', 'T',\n   ' DC', 'C',\
-\n     ' DG', 'G',\n   'DA', 'A',\n    'DT', 'T',\n    'DC', '\
-C',\n  'DG', 'G',\n    );\n\n  return %onelett;\n\n}\n\\
-nsub fill_threelett_DNA\n{\n\n my %threelett=(\n       '\
-A', ' DA',\n   'T', ' DT',\n   'C', ' DC',\n   'G', ' DG\
-',\n   );\n\n  return %threelett;\n\n}\n\n\n\n\nsub f\
-ill_threelett_prot\n{  \n  my %threelett;\n\n  %th\
-reelett=(\n'A', 'ALA',\n'C', 'CYS',\n'D', 'ASP',\n\
-'E', 'GLU',\n'F', 'PHE',\n'G', 'GLY',\n'H', 'HIS',\
-\n'I', 'ILE',\n'K', 'LYS',\n'L', 'LEU',\n'N', 'ASN\
-',\n'M', 'MET',\n'P', 'PRO',\n'Q', 'GLN',\n'R', 'A\
-RG',\n'S', 'SER',\n'T', 'THR',\n'V', 'VAL',\n'W', \
-'TRP',\n'Y', 'TYR',\n);\n\nreturn %threelett;\n\n\\
-n}\n\nsub fill_onelett_prot\n{\n    my %onelett;\n\
-    \n    %onelett=(\n\n'10A', 'X',\n'11O', 'X',\n\
-'12A', 'X',\n'13P', 'X',\n'13R', 'X',\n'13S', 'X',\
-\n'14W', 'X',\n'15P', 'X',\n'16A', 'X',\n'16G', 'X\
-',\n'1AN', 'X',\n'1AP', 'X',\n'1AR', 'X',\n'1BH', \
-'X',\n'1BO', 'X',\n'1C5', 'X',\n'1CU', 'X',\n'1DA'\
-, 'X',\n'1GL', 'X',\n'1GN', 'X',\n'1IN', 'X',\n'1L\
-U', 'L',\n'1MA', 'X',\n'1MC', 'X',\n'1MG', 'X',\n'\
-1MZ', 'X',\n'1NA', 'X',\n'1NB', 'X',\n'1NI', 'X',\\
-n'1PA', 'A',\n'1PC', 'X',\n'1PE', 'X',\n'1PG', 'X'\
-,\n'1PI', 'A',\n'1PM', 'X',\n'1PN', 'X',\n'1PU', '\
-X',\n'1PY', 'X',\n'1UN', 'X',\n'24T', 'X',\n'25T',\
- 'X',\n'26P', 'X',\n'2AB', 'X',\n'2AM', 'X',\n'2AN\
-', 'X',\n'2AP', 'X',\n'2AR', 'X',\n'2AS', 'D',\n'2\
-BL', 'X',\n'2BM', 'X',\n'2CP', 'X',\n'2DA', 'X',\n\
-'2DG', 'X',\n'2DP', 'X',\n'2DT', 'X',\n'2EP', 'X',\
-\n'2EZ', 'X',\n'2FG', 'X',\n'2FL', 'X',\n'2FP', 'X\
-',\n'2FU', 'X',\n'2GL', 'X',\n'2GP', 'X',\n'2HP', \
-'X',\n'2IB', 'X',\n'2IP', 'X',\n'2LU', 'L',\n'2MA'\
-, 'X',\n'2MD', 'X',\n'2ME', 'X',\n'2MG', 'X',\n'2M\
-L', 'L',\n'2MO', 'X',\n'2MR', 'R',\n'2MU', 'X',\n'\
-2MZ', 'X',\n'2NO', 'X',\n'2NP', 'X',\n'2OG', 'X',\\
-n'2PA', 'X',\n'2PC', 'X',\n'2PE', 'X',\n'2PG', 'X'\
-,\n'2PH', 'X',\n'2PI', 'X',\n'2PL', 'X',\n'2PP', '\
-X',\n'2PU', 'X',\n'2SI', 'X',\n'2TB', 'X',\n'34C',\
- 'X',\n'35G', 'X',\n'3AA', 'X',\n'3AD', 'X',\n'3AH\
-', 'H',\n'3AN', 'X',\n'3AP', 'X',\n'3AT', 'X',\n'3\
-BT', 'X',\n'3CH', 'X',\n'3CN', 'X',\n'3CO', 'X',\n\
-'3CP', 'X',\n'3DR', 'X',\n'3EP', 'X',\n'3FM', 'X',\
-\n'3GA', 'X',\n'3GP', 'X',\n'3HB', 'X',\n'3HC', 'X\
-',\n'3HP', 'X',\n'3IB', 'X',\n'3ID', 'X',\n'3IN', \
-'X',\n'3MA', 'X',\n'3MB', 'X',\n'3MC', 'X',\n'3MD'\
-, 'D',\n'3MF', 'X',\n'3MP', 'X',\n'3MT', 'X',\n'3O\
-L', 'X',\n'3PA', 'X',\n'3PG', 'X',\n'3PO', 'X',\n'\
-3PP', 'X',\n'3PY', 'X',\n'49A', 'X',\n'4AB', 'X',\\
-n'4AM', 'X',\n'4AN', 'X',\n'4AP', 'X',\n'4BA', 'X'\
-,\n'4BT', 'X',\n'4CA', 'X',\n'4CO', 'X',\n'4HP', '\
-X',\n'4IP', 'X',\n'4MO', 'X',\n'4MV', 'X',\n'4MZ',\
- 'X',\n'4NC', 'X',\n'4NP', 'X',\n'4OX', 'X',\n'4PB\
-', 'X',\n'4PN', 'X',\n'4PP', 'X',\n'4SC', 'X',\n'4\
-SU', 'X',\n'4TB', 'X',\n'55C', 'X',\n'5AD', 'X',\n\
-'5AN', 'X',\n'5AT', 'X',\n'5CM', 'X',\n'5GP', 'X',\
-\n'5HP', 'E',\n'5HT', 'X',\n'5IT', 'X',\n'5IU', 'X\
-',\n'5MB', 'X',\n'5MC', 'X',\n'5MD', 'X',\n'5MP', \
-'X',\n'5MU', 'X',\n'5NC', 'X',\n'5OB', 'X',\n'5PA'\
-, 'X',\n'5PV', 'X',\n'6AB', 'X',\n'6CT', 'X',\n'6H\
-A', 'X',\n'6HC', 'X',\n'6HG', 'X',\n'6HT', 'X',\n'\
-6IN', 'X',\n'6MO', 'X',\n'6MP', 'X',\n'6PG', 'X',\\
-n'6WO', 'X',\n'70U', 'X',\n'7DG', 'X',\n'7HP', 'X'\
-,\n'7I2', 'X',\n'7MG', 'X',\n'7MQ', 'X',\n'7NI', '\
-X',\n'87Y', 'X',\n'8AD', 'X',\n'8BR', 'X',\n'8IG',\
- 'X',\n'8IN', 'X',\n'8OG', 'X',\n'95A', 'X',\n'9AD\
-', 'X',\n'9AM', 'X',\n'9AP', 'X',\n'9DG', 'X',\n'9\
-DI', 'X',\n'9HX', 'X',\n'9OH', 'X',\n'9TA', 'X',\n\
-'A12', 'X',\n'A15', 'X',\n'A23', 'X',\n'A24', 'X',\
-\n'A26', 'X',\n'A2G', 'X',\n'A2P', 'X',\n'A32', 'X\
-',\n'A3P', 'X',\n'A4P', 'X',\n'A5P', 'X',\n'A70', \
-'X',\n'A76', 'X',\n'A77', 'X',\n'A78', 'X',\n'A79'\
-, 'X',\n'A80', 'X',\n'A85', 'X',\n'A88', 'X',\n'A9\
-A', 'X',\n'AA3', 'X',\n'AA4', 'X',\n'AA6', 'X',\n'\
-AAA', 'X',\n'AAB', 'X',\n'AAC', 'X',\n'AAE', 'X',\\
-n'AAG', 'R',\n'AAH', 'X',\n'AAM', 'X',\n'AAN', 'X'\
-,\n'AAP', 'X',\n'AAR', 'R',\n'AAS', 'X',\n'AAT', '\
-X',\n'ABA', 'X',\n'ABC', 'X',\n'ABD', 'X',\n'ABE',\
- 'X',\n'ABH', 'X',\n'ABI', 'X',\n'ABK', 'X',\n'ABM\
-', 'X',\n'ABN', 'X',\n'ABP', 'X',\n'ABR', 'X',\n'A\
-BS', 'X',\n'ABU', 'X',\n'AC1', 'X',\n'AC2', 'X',\n\
-'ACA', 'X',\n'ACB', 'D',\n'ACC', 'C',\n'ACD', 'X',\
-\n'ACE', 'X',\n'ACH', 'X',\n'ACI', 'X',\n'ACL', 'R\
-',\n'ACM', 'X',\n'ACN', 'X',\n'ACO', 'X',\n'ACP', \
-'X',\n'ACQ', 'X',\n'ACR', 'X',\n'ACS', 'X',\n'ACT'\
-, 'X',\n'ACV', 'V',\n'ACX', 'X',\n'ACY', 'X',\n'AD\
-2', 'X',\n'AD3', 'X',\n'ADC', 'X',\n'ADD', 'X',\n'\
-ADE', 'X',\n'ADH', 'X',\n'ADI', 'X',\n'ADM', 'X',\\
-n'ADN', 'X',\n'ADP', 'X',\n'ADQ', 'X',\n'ADR', 'X'\
-,\n'ADS', 'X',\n'ADT', 'X',\n'ADU', 'X',\n'ADW', '\
-X',\n'ADX', 'X',\n'AE2', 'X',\n'AEA', 'X',\n'AEB',\
- 'X',\n'AEI', 'D',\n'AEN', 'X',\n'AET', 'T',\n'AF1\
-', 'X',\n'AF3', 'X',\n'AFA', 'D',\n'AFP', 'X',\n'A\
-G7', 'X',\n'AGB', 'X',\n'AGF', 'X',\n'AGL', 'X',\n\
-'AGM', 'R',\n'AGN', 'X',\n'AGP', 'X',\n'AGS', 'X',\
-\n'AGU', 'X',\n'AH0', 'X',\n'AH1', 'X',\n'AHA', 'X\
-',\n'AHB', 'D',\n'AHC', 'X',\n'AHF', 'X',\n'AHG', \
-'X',\n'AHH', 'X',\n'AHM', 'X',\n'AHO', 'X',\n'AHP'\
-, 'X',\n'AHS', 'X',\n'AHT', 'Y',\n'AHU', 'X',\n'AH\
-X', 'X',\n'AI1', 'X',\n'AI2', 'X',\n'AIB', 'X',\n'\
-AIC', 'X',\n'AIM', 'X',\n'AIP', 'X',\n'AIQ', 'X',\\
-n'AIR', 'X',\n'AJ3', 'X',\n'AKB', 'X',\n'AKG', 'X'\
-,\n'AKR', 'X',\n'AL1', 'X',\n'AL2', 'X',\n'AL3', '\
-X',\n'AL4', 'X',\n'AL5', 'X',\n'AL6', 'X',\n'AL7',\
- 'X',\n'AL8', 'X',\n'AL9', 'X',\n'ALA', 'A',\n'ALB\
-', 'X',\n'ALC', 'X',\n'ALD', 'L',\n'ALE', 'X',\n'A\
-LF', 'X',\n'ALG', 'X',\n'ALL', 'X',\n'ALM', 'A',\n\
-'ALN', 'A',\n'ALO', 'T',\n'ALP', 'X',\n'ALQ', 'X',\
-\n'ALR', 'X',\n'ALS', 'X',\n'ALT', 'A',\n'ALY', 'K\
-',\n'ALZ', 'X',\n'AMA', 'X',\n'AMB', 'X',\n'AMC', \
-'X',\n'AMD', 'X',\n'AMG', 'X',\n'AMH', 'X',\n'AMI'\
-, 'X',\n'AML', 'X',\n'AMN', 'X',\n'AMO', 'X',\n'AM\
-P', 'X',\n'AMQ', 'X',\n'AMR', 'X',\n'AMS', 'X',\n'\
-AMT', 'X',\n'AMU', 'X',\n'AMW', 'X',\n'AMX', 'X',\\
-n'AMY', 'X',\n'ANA', 'X',\n'ANB', 'X',\n'ANC', 'X'\
-,\n'AND', 'X',\n'ANE', 'X',\n'ANI', 'X',\n'ANL', '\
-X',\n'ANO', 'X',\n'ANP', 'X',\n'ANS', 'X',\n'ANT',\
- 'X',\n'AOE', 'X',\n'AOP', 'X',\n'AP1', 'X',\n'AP2\
-', 'X',\n'AP3', 'X',\n'AP4', 'X',\n'AP5', 'X',\n'A\
-P6', 'X',\n'APA', 'X',\n'APB', 'X',\n'APC', 'X',\n\
-'APE', 'F',\n'APF', 'X',\n'APG', 'X',\n'APH', 'A',\
-\n'API', 'X',\n'APL', 'X',\n'APM', 'X',\n'APN', 'G\
-',\n'APP', 'X',\n'APQ', 'X',\n'APR', 'X',\n'APS', \
-'X',\n'APT', 'X',\n'APU', 'X',\n'APX', 'X',\n'APY'\
-, 'X',\n'APZ', 'X',\n'AQS', 'X',\n'AR1', 'X',\n'AR\
-2', 'X',\n'ARA', 'X',\n'ARB', 'X',\n'ARC', 'X',\n'\
-ARD', 'X',\n'ARG', 'R',\n'ARH', 'X',\n'ARI', 'X',\\
-n'ARM', 'R',\n'ARN', 'X',\n'ARO', 'R',\n'ARP', 'X'\
-,\n'ARQ', 'X',\n'ARS', 'X',\n'AS1', 'R',\n'AS2', '\
-X',\n'ASA', 'D',\n'ASB', 'D',\n'ASC', 'X',\n'ASD',\
- 'X',\n'ASE', 'X',\n'ASF', 'X',\n'ASI', 'X',\n'ASK\
-', 'D',\n'ASL', 'X',\n'ASM', 'N',\n'ASO', 'X',\n'A\
-SP', 'D',\n'ASQ', 'X',\n'ASU', 'X',\n'ATA', 'X',\n\
-'ATC', 'X',\n'ATD', 'X',\n'ATF', 'X',\n'ATG', 'X',\
-\n'ATH', 'X',\n'ATM', 'X',\n'ATO', 'X',\n'ATP', 'X\
-',\n'ATQ', 'X',\n'ATR', 'X',\n'ATT', 'X',\n'ATY', \
-'X',\n'ATZ', 'X',\n'AUC', 'X',\n'AUR', 'X',\n'AVG'\
-, 'X',\n'AXP', 'X',\n'AYA', 'A',\n'AZ2', 'X',\n'AZ\
-A', 'X',\n'AZC', 'X',\n'AZD', 'X',\n'AZE', 'X',\n'\
-AZI', 'X',\n'AZL', 'X',\n'AZM', 'X',\n'AZR', 'X',\\
-n'AZT', 'X',\n'B12', 'X',\n'B1F', 'F',\n'B2A', 'A'\
-,\n'B2F', 'F',\n'B2I', 'I',\n'B2V', 'V',\n'B3I', '\
-X',\n'B3P', 'X',\n'B7G', 'X',\n'B96', 'X',\n'B9A',\
- 'X',\n'BA1', 'X',\n'BAA', 'X',\n'BAB', 'X',\n'BAC\
-', 'X',\n'BAF', 'X',\n'BAH', 'X',\n'BAI', 'X',\n'B\
-AK', 'X',\n'BAL', 'A',\n'BAM', 'X',\n'BAO', 'X',\n\
-'BAP', 'X',\n'BAR', 'X',\n'BAS', 'X',\n'BAT', 'F',\
-\n'BAY', 'X',\n'BAZ', 'X',\n'BB1', 'X',\n'BB2', 'X\
-',\n'BBA', 'X',\n'BBH', 'X',\n'BBS', 'X',\n'BBT', \
-'X',\n'BBZ', 'X',\n'BCA', 'X',\n'BCB', 'X',\n'BCC'\
-, 'X',\n'BCD', 'X',\n'BCL', 'X',\n'BCN', 'X',\n'BC\
-R', 'X',\n'BCS', 'C',\n'BCT', 'X',\n'BCY', 'X',\n'\
-BCZ', 'X',\n'BDA', 'X',\n'BDG', 'X',\n'BDK', 'X',\\
-n'BDM', 'X',\n'BDN', 'X',\n'BDS', 'X',\n'BE1', 'X'\
-,\n'BE2', 'X',\n'BEA', 'X',\n'BEF', 'X',\n'BEN', '\
-X',\n'BEO', 'X',\n'BEP', 'X',\n'BER', 'X',\n'BES',\
- 'X',\n'BET', 'X',\n'BEZ', 'X',\n'BF2', 'X',\n'BFA\
-', 'X',\n'BFD', 'X',\n'BFP', 'X',\n'BFS', 'X',\n'B\
-FU', 'X',\n'BG6', 'X',\n'BGF', 'X',\n'BGG', 'X',\n\
-'BGL', 'X',\n'BGN', 'X',\n'BGP', 'X',\n'BGX', 'X',\
-\n'BH4', 'X',\n'BHA', 'X',\n'BHC', 'X',\n'BHD', 'D\
-',\n'BHO', 'X',\n'BHS', 'X',\n'BIC', 'X',\n'BIN', \
-'X',\n'BIO', 'X',\n'BIP', 'X',\n'BIS', 'X',\n'BIZ'\
-, 'X',\n'BJH', 'X',\n'BJI', 'X',\n'BJP', 'X',\n'BL\
-A', 'X',\n'BLB', 'X',\n'BLE', 'L',\n'BLG', 'P',\n'\
-BLI', 'X',\n'BLM', 'X',\n'BLV', 'X',\n'BLY', 'K',\\
-n'BM1', 'X',\n'BM2', 'X',\n'BM5', 'X',\n'BM9', 'X'\
-,\n'BMA', 'X',\n'BMD', 'X',\n'BME', 'X',\n'BMP', '\
-X',\n'BMQ', 'X',\n'BMS', 'X',\n'BMT', 'T',\n'BMU',\
- 'X',\n'BMY', 'X',\n'BMZ', 'X',\n'BNA', 'X',\n'BNG\
-', 'X',\n'BNI', 'X',\n'BNN', 'F',\n'BNO', 'L',\n'B\
-NS', 'X',\n'BNZ', 'X',\n'BO3', 'X',\n'BO4', 'X',\n\
-'BOC', 'X',\n'BOG', 'X',\n'BOM', 'X',\n'BOT', 'X',\
-\n'BOX', 'X',\n'BOZ', 'X',\n'BPA', 'X',\n'BPB', 'X\
-',\n'BPD', 'X',\n'BPG', 'X',\n'BPH', 'X',\n'BPI', \
-'X',\n'BPJ', 'X',\n'BPM', 'X',\n'BPN', 'X',\n'BPO'\
-, 'X',\n'BPP', 'X',\n'BPT', 'X',\n'BPY', 'X',\n'BR\
-B', 'X',\n'BRC', 'X',\n'BRE', 'X',\n'BRI', 'X',\n'\
-BRL', 'X',\n'BRM', 'X',\n'BRN', 'X',\n'BRO', 'X',\\
-n'BRS', 'X',\n'BRU', 'X',\n'BRZ', 'X',\n'BSB', 'X'\
-,\n'BSI', 'X',\n'BSP', 'X',\n'BT1', 'X',\n'BT2', '\
-X',\n'BT3', 'X',\n'BTA', 'L',\n'BTB', 'X',\n'BTC',\
- 'C',\n'BTD', 'X',\n'BTN', 'X',\n'BTP', 'X',\n'BTR\
-', 'W',\n'BU1', 'X',\n'BUA', 'X',\n'BUB', 'X',\n'B\
-UC', 'X',\n'BUG', 'X',\n'BUL', 'X',\n'BUM', 'X',\n\
-'BUQ', 'X',\n'BUT', 'X',\n'BVD', 'X',\n'BX3', 'X',\
-\n'BYS', 'X',\n'BZ1', 'X',\n'BZA', 'X',\n'BZB', 'X\
-',\n'BZC', 'X',\n'BZD', 'X',\n'BZF', 'X',\n'BZI', \
-'X',\n'BZM', 'X',\n'BZO', 'X',\n'BZP', 'X',\n'BZQ'\
-, 'X',\n'BZS', 'X',\n'BZT', 'X',\n'C02', 'X',\n'C1\
-1', 'X',\n'C1O', 'X',\n'C20', 'X',\n'C24', 'X',\n'\
-C2F', 'X',\n'C2O', 'X',\n'C2P', 'X',\n'C3M', 'X',\\
-n'C3P', 'X',\n'C3X', 'X',\n'C48', 'X',\n'C4M', 'X'\
-,\n'C4X', 'X',\n'C5C', 'X',\n'C5M', 'X',\n'C5P', '\
-X',\n'C5X', 'X',\n'C60', 'X',\n'C6C', 'X',\n'C6M',\
- 'X',\n'C78', 'X',\n'C8E', 'X',\n'CA3', 'X',\n'CA5\
-', 'X',\n'CAA', 'X',\n'CAB', 'X',\n'CAC', 'X',\n'C\
-AD', 'X',\n'CAF', 'C',\n'CAG', 'X',\n'CAH', 'X',\n\
-'CAL', 'X',\n'CAM', 'X',\n'CAN', 'X',\n'CAO', 'X',\
-\n'CAP', 'X',\n'CAQ', 'X',\n'CAR', 'X',\n'CAS', 'C\
-',\n'CAT', 'X',\n'CAV', 'X',\n'CAY', 'C',\n'CAZ', \
-'X',\n'CB3', 'X',\n'CB4', 'X',\n'CBA', 'X',\n'CBD'\
-, 'X',\n'CBG', 'X',\n'CBI', 'X',\n'CBL', 'X',\n'CB\
-M', 'X',\n'CBN', 'X',\n'CBO', 'X',\n'CBP', 'X',\n'\
-CBS', 'X',\n'CBX', 'X',\n'CBZ', 'X',\n'CC0', 'X',\\
-n'CC1', 'X',\n'CCC', 'X',\n'CCH', 'X',\n'CCI', 'X'\
-,\n'CCM', 'X',\n'CCN', 'X',\n'CCO', 'X',\n'CCP', '\
-X',\n'CCR', 'X',\n'CCS', 'C',\n'CCV', 'X',\n'CCY',\
- 'X',\n'CD1', 'X',\n'CDC', 'X',\n'CDE', 'X',\n'CDF\
-', 'X',\n'CDI', 'X',\n'CDL', 'X',\n'CDM', 'X',\n'C\
-DP', 'X',\n'CDR', 'X',\n'CDU', 'X',\n'CE1', 'X',\n\
-'CEA', 'C',\n'CEB', 'X',\n'CEC', 'X',\n'CED', 'X',\
-\n'CEF', 'X',\n'CEH', 'X',\n'CEM', 'X',\n'CEO', 'X\
-',\n'CEP', 'X',\n'CEQ', 'X',\n'CER', 'X',\n'CES', \
-'G',\n'CET', 'X',\n'CFC', 'X',\n'CFF', 'X',\n'CFM'\
-, 'X',\n'CFO', 'X',\n'CFP', 'X',\n'CFS', 'X',\n'CF\
-X', 'X',\n'CGN', 'X',\n'CGP', 'X',\n'CGS', 'X',\n'\
-CGU', 'E',\n'CH2', 'X',\n'CH3', 'X',\n'CHA', 'X',\\
-n'CHB', 'X',\n'CHD', 'X',\n'CHF', 'X',\n'CHG', 'G'\
-,\n'CHI', 'X',\n'CHN', 'X',\n'CHO', 'X',\n'CHP', '\
-G',\n'CHR', 'X',\n'CHS', 'F',\n'CHT', 'X',\n'CHX',\
- 'X',\n'CIC', 'X',\n'CIN', 'X',\n'CIP', 'X',\n'CIR\
-', 'X',\n'CIT', 'X',\n'CIU', 'X',\n'CKI', 'X',\n'C\
-L1', 'X',\n'CL2', 'X',\n'CLA', 'X',\n'CLB', 'A',\n\
-'CLC', 'S',\n'CLD', 'A',\n'CLE', 'L',\n'CLF', 'X',\
-\n'CLK', 'S',\n'CLL', 'X',\n'CLM', 'X',\n'CLN', 'X\
-',\n'CLO', 'X',\n'CLP', 'X',\n'CLQ', 'X',\n'CLR', \
-'X',\n'CLS', 'X',\n'CLT', 'X',\n'CLX', 'X',\n'CLY'\
-, 'X',\n'CMA', 'R',\n'CMC', 'X',\n'CMD', 'X',\n'CM\
-E', 'C',\n'CMG', 'X',\n'CMK', 'X',\n'CMN', 'X',\n'\
-CMO', 'X',\n'CMP', 'X',\n'CMR', 'X',\n'CMS', 'X',\\
-n'CMT', 'C',\n'CMX', 'X',\n'CNA', 'X',\n'CNC', 'X'\
-,\n'CND', 'X',\n'CNH', 'X',\n'CNM', 'X',\n'CNN', '\
-X',\n'CNO', 'X',\n'CNP', 'X',\n'CO2', 'X',\n'CO3',\
- 'X',\n'CO5', 'X',\n'CO8', 'X',\n'COA', 'X',\n'COB\
-', 'X',\n'COC', 'X',\n'COD', 'X',\n'COE', 'X',\n'C\
-OF', 'X',\n'COH', 'X',\n'COI', 'X',\n'COJ', 'X',\n\
-'COL', 'X',\n'COM', 'X',\n'CON', 'X',\n'COP', 'X',\
-\n'COR', 'X',\n'COS', 'X',\n'COT', 'X',\n'COY', 'X\
-',\n'CP1', 'G',\n'CP2', 'X',\n'CP4', 'X',\n'CPA', \
-'X',\n'CPB', 'X',\n'CPC', 'X',\n'CPD', 'X',\n'CPG'\
-, 'X',\n'CPH', 'X',\n'CPI', 'X',\n'CPM', 'X',\n'CP\
-N', 'G',\n'CPO', 'X',\n'CPP', 'X',\n'CPQ', 'X',\n'\
-CPR', 'X',\n'CPS', 'X',\n'CPT', 'X',\n'CPU', 'X',\\
-n'CPV', 'X',\n'CPY', 'X',\n'CR1', 'X',\n'CR6', 'X'\
-,\n'CRA', 'X',\n'CRB', 'X',\n'CRC', 'X',\n'CRG', '\
-X',\n'CRH', 'X',\n'CRO', 'T',\n'CRP', 'X',\n'CRQ',\
- 'X',\n'CRS', 'X',\n'CRT', 'X',\n'CRY', 'X',\n'CSA\
-', 'C',\n'CSB', 'X',\n'CSD', 'C',\n'CSE', 'C',\n'C\
-SH', 'X',\n'CSI', 'X',\n'CSN', 'X',\n'CSO', 'C',\n\
-'CSP', 'C',\n'CSR', 'C',\n'CSS', 'C',\n'CST', 'X',\
-\n'CSW', 'C',\n'CSX', 'C',\n'CSY', 'X',\n'CSZ', 'C\
-',\n'CT3', 'X',\n'CTA', 'X',\n'CTB', 'X',\n'CTC', \
-'X',\n'CTD', 'X',\n'CTH', 'T',\n'CTO', 'X',\n'CTP'\
-, 'X',\n'CTR', 'X',\n'CTS', 'X',\n'CTT', 'X',\n'CT\
-Y', 'X',\n'CTZ', 'X',\n'CU1', 'X',\n'CUA', 'X',\n'\
-CUC', 'X',\n'CUL', 'X',\n'CUO', 'X',\n'CUZ', 'X',\\
-n'CVI', 'X',\n'CXF', 'X',\n'CXL', 'X',\n'CXM', 'M'\
-,\n'CXN', 'X',\n'CXP', 'X',\n'CXS', 'X',\n'CY1', '\
-C',\n'CY3', 'X',\n'CYB', 'X',\n'CYC', 'X',\n'CYF',\
- 'C',\n'CYG', 'C',\n'CYH', 'X',\n'CYL', 'X',\n'CYM\
-', 'C',\n'CYN', 'X',\n'CYO', 'X',\n'CYP', 'X',\n'C\
-YQ', 'C',\n'CYS', 'C',\n'CYU', 'X',\n'CYY', 'X',\n\
-'CYZ', 'X',\n'CZH', 'X',\n'CZZ', 'C',\n'D12', 'X',\
-\n'D13', 'X',\n'D16', 'X',\n'D18', 'X',\n'D19', 'X\
-',\n'D1P', 'X',\n'D24', 'X',\n'D34', 'X',\n'D35', \
-'X',\n'D4D', 'X',\n'D4T', 'X',\n'D6G', 'X',\n'DA2'\
-, 'R',\n'DA3', 'X',\n'DA6', 'X',\n'DA7', 'X',\n'DA\
-A', 'X',\n'DAB', 'X',\n'DAC', 'X',\n'DAD', 'X',\n'\
-DAE', 'X',\n'DAF', 'X',\n'DAG', 'X',\n'DAH', 'A',\\
-n'DAJ', 'X',\n'DAK', 'X',\n'DAL', 'A',\n'DAM', 'A'\
-,\n'DAN', 'X',\n'DAO', 'X',\n'DAP', 'X',\n'DAQ', '\
-X',\n'DAR', 'R',\n'DAS', 'D',\n'DAT', 'X',\n'DAU',\
- 'X',\n'DAV', 'X',\n'DBA', 'X',\n'DBD', 'X',\n'DBF\
-', 'X',\n'DBG', 'X',\n'DBI', 'X',\n'DBV', 'X',\n'D\
-BY', 'Y',\n'DCA', 'X',\n'DCB', 'X',\n'DCE', 'X',\n\
-'DCF', 'X',\n'DCG', 'X',\n'DCH', 'X',\n'DCI', 'I',\
-\n'DCL', 'X',\n'DCM', 'X',\n'DCP', 'X',\n'DCS', 'X\
-',\n'DCT', 'X',\n'DCY', 'C',\n'DCZ', 'X',\n'DDA', \
-'X',\n'DDB', 'X',\n'DDC', 'X',\n'DDF', 'X',\n'DDG'\
-, 'X',\n'DDH', 'X',\n'DDL', 'X',\n'DDM', 'X',\n'DD\
-O', 'L',\n'DDP', 'X',\n'DDQ', 'X',\n'DDT', 'Y',\n'\
-DDU', 'X',\n'DEA', 'X',\n'DEB', 'X',\n'DEC', 'X',\\
-n'DEF', 'X',\n'DEL', 'X',\n'DEM', 'X',\n'DEN', 'X'\
-,\n'DEP', 'X',\n'DEQ', 'X',\n'DES', 'X',\n'DET', '\
-X',\n'DFC', 'X',\n'DFG', 'X',\n'DFI', 'X',\n'DFL',\
- 'X',\n'DFO', 'X',\n'DFP', 'X',\n'DFR', 'X',\n'DFT\
-', 'X',\n'DFV', 'X',\n'DFX', 'X',\n'DG2', 'X',\n'D\
-G3', 'X',\n'DG6', 'X',\n'DGA', 'X',\n'DGD', 'X',\n\
-'DGG', 'X',\n'DGL', 'E',\n'DGN', 'Q',\n'DGP', 'X',\
-\n'DGT', 'X',\n'DGX', 'X',\n'DH2', 'X',\n'DHA', 'A\
-',\n'DHB', 'X',\n'DHC', 'X',\n'DHD', 'X',\n'DHE', \
-'X',\n'DHF', 'X',\n'DHG', 'X',\n'DHI', 'H',\n'DHL'\
-, 'X',\n'DHM', 'X',\n'DHN', 'V',\n'DHP', 'X',\n'DH\
-Q', 'X',\n'DHR', 'X',\n'DHS', 'X',\n'DHT', 'X',\n'\
-DHU', 'X',\n'DHY', 'X',\n'DHZ', 'X',\n'DI2', 'X',\\
-n'DI3', 'G',\n'DI4', 'X',\n'DI5', 'X',\n'DIA', 'X'\
-,\n'DIC', 'X',\n'DIF', 'X',\n'DIG', 'X',\n'DII', '\
-X',\n'DIL', 'I',\n'DIM', 'X',\n'DIO', 'X',\n'DIP',\
- 'X',\n'DIQ', 'X',\n'DIS', 'X',\n'DIT', 'X',\n'DIV\
-', 'V',\n'DIX', 'X',\n'DIY', 'X',\n'DKA', 'X',\n'D\
-LA', 'X',\n'DLE', 'L',\n'DLF', 'X',\n'DLS', 'K',\n\
-'DLY', 'K',\n'DM1', 'X',\n'DM2', 'X',\n'DM3', 'X',\
-\n'DM4', 'X',\n'DM5', 'X',\n'DM6', 'X',\n'DM7', 'X\
-',\n'DM8', 'X',\n'DM9', 'X',\n'DMA', 'X',\n'DMB', \
-'X',\n'DMC', 'X',\n'DMD', 'X',\n'DME', 'X',\n'DMF'\
-, 'X',\n'DMG', 'G',\n'DMH', 'N',\n'DMI', 'X',\n'DM\
-J', 'X',\n'DML', 'X',\n'DMM', 'X',\n'DMN', 'X',\n'\
-DMO', 'X',\n'DMP', 'X',\n'DMQ', 'X',\n'DMR', 'X',\\
-n'DMS', 'X',\n'DMT', 'X',\n'DMV', 'X',\n'DMY', 'X'\
-,\n'DNC', 'X',\n'DND', 'X',\n'DNH', 'X',\n'DNJ', '\
-X',\n'DNN', 'X',\n'DNP', 'X',\n'DNQ', 'X',\n'DNR',\
- 'X',\n'DO2', 'X',\n'DO3', 'X',\n'DOA', 'X',\n'DOB\
-', 'X',\n'DOC', 'X',\n'DOH', 'D',\n'DOM', 'X',\n'D\
-OS', 'X',\n'DOX', 'X',\n'DP5', 'X',\n'DP7', 'X',\n\
-'DPA', 'X',\n'DPC', 'X',\n'DPD', 'X',\n'DPE', 'X',\
-\n'DPG', 'X',\n'DPH', 'F',\n'DPM', 'X',\n'DPN', 'F\
-',\n'DPO', 'X',\n'DPP', 'X',\n'DPR', 'P',\n'DPS', \
-'X',\n'DPT', 'X',\n'DPX', 'X',\n'DPY', 'X',\n'DPZ'\
-, 'X',\n'DQH', 'X',\n'DQN', 'X',\n'DR1', 'X',\n'DR\
-B', 'X',\n'DRC', 'X',\n'DRI', 'X',\n'DRP', 'X',\n'\
-DRT', 'X',\n'DRU', 'X',\n'DSA', 'X',\n'DSB', 'X',\\
-n'DSC', 'X',\n'DSD', 'X',\n'DSE', 'S',\n'DSI', 'X'\
-,\n'DSN', 'S',\n'DSP', 'D',\n'DSR', 'X',\n'DSS', '\
-X',\n'DSX', 'X',\n'DSY', 'X',\n'DTB', 'X',\n'DTD',\
- 'X',\n'DTH', 'T',\n'DTN', 'X',\n'DTO', 'X',\n'DTP\
-', 'X',\n'DTQ', 'X',\n'DTR', 'W',\n'DTT', 'X',\n'D\
-TY', 'Y',\n'DUD', 'X',\n'DUO', 'X',\n'DUR', 'X',\n\
-'DUT', 'X',\n'DVA', 'V',\n'DVR', 'X',\n'DX9', 'X',\
-\n'DXA', 'X',\n'DXB', 'X',\n'DXC', 'X',\n'DXG', 'X\
-',\n'DXX', 'X',\n'DZF', 'X',\n'E09', 'X',\n'E20', \
-'X',\n'E2P', 'X',\n'E3G', 'X',\n'E4N', 'X',\n'E4P'\
-, 'X',\n'E64', 'X',\n'E6C', 'X',\n'E96', 'X',\n'E9\
-7', 'X',\n'EA2', 'X',\n'EAA', 'X',\n'EAP', 'X',\n'\
-EBP', 'X',\n'EBW', 'X',\n'ECO', 'X',\n'EDA', 'X',\\
-n'EDC', 'X',\n'EDE', 'X',\n'EDO', 'X',\n'EDR', 'X'\
-,\n'EEB', 'X',\n'EEE', 'X',\n'EFC', 'X',\n'EFZ', '\
-X',\n'EG1', 'X',\n'EG2', 'X',\n'EG3', 'X',\n'EGC',\
- 'X',\n'EGL', 'X',\n'EHP', 'A',\n'EIC', 'X',\n'EJT\
-', 'X',\n'ELA', 'X',\n'EMB', 'X',\n'EMC', 'X',\n'E\
-MD', 'X',\n'EMM', 'X',\n'EMO', 'X',\n'EMP', 'X',\n\
-'EMR', 'X',\n'ENA', 'X',\n'ENC', 'X',\n'ENH', 'X',\
-\n'ENO', 'X',\n'ENP', 'X',\n'EOA', 'X',\n'EOH', 'X\
-',\n'EOT', 'X',\n'EOX', 'X',\n'EPA', 'X',\n'EPE', \
-'X',\n'EPH', 'X',\n'EPI', 'X',\n'EPN', 'X',\n'EPO'\
-, 'X',\n'EPT', 'X',\n'EPU', 'X',\n'EPX', 'X',\n'EP\
-Y', 'X',\n'EQI', 'X',\n'EQP', 'X',\n'EQU', 'X',\n'\
-ERG', 'X',\n'ERI', 'X',\n'ERY', 'X',\n'ESC', 'X',\\
-n'ESD', 'X',\n'ESI', 'X',\n'ESO', 'X',\n'ESP', 'X'\
-,\n'EST', 'X',\n'ESX', 'X',\n'ETA', 'X',\n'ETC', '\
-X',\n'ETD', 'X',\n'ETF', 'X',\n'ETH', 'X',\n'ETI',\
- 'X',\n'ETN', 'X',\n'ETO', 'X',\n'ETP', 'X',\n'ETR\
-', 'X',\n'ETS', 'X',\n'ETY', 'X',\n'EU3', 'X',\n'E\
-UG', 'X',\n'EYS', 'C',\n'F09', 'X',\n'F2B', 'X',\n\
-'F3S', 'X',\n'F42', 'X',\n'F43', 'X',\n'F4S', 'X',\
-\n'F6B', 'X',\n'F6P', 'X',\n'F89', 'X',\n'FA1', 'X\
-',\n'FA5', 'F',\n'FAA', 'X',\n'FAB', 'X',\n'FAC', \
-'X',\n'FAD', 'X',\n'FAF', 'X',\n'FAG', 'X',\n'FAM'\
-, 'X',\n'FAR', 'X',\n'FAS', 'X',\n'FAT', 'X',\n'FB\
-A', 'X',\n'FBE', 'X',\n'FBI', 'X',\n'FBP', 'X',\n'\
-FBQ', 'X',\n'FBS', 'X',\n'FBT', 'X',\n'FBU', 'X',\\
-n'FCA', 'X',\n'FCB', 'X',\n'FCI', 'X',\n'FCN', 'X'\
-,\n'FCO', 'X',\n'FCR', 'X',\n'FCT', 'X',\n'FCX', '\
-X',\n'FCY', 'C',\n'FD1', 'F',\n'FD2', 'F',\n'FD3',\
- 'F',\n'FD4', 'F',\n'FDA', 'X',\n'FDC', 'X',\n'FDI\
-', 'X',\n'FDP', 'X',\n'FDS', 'X',\n'FE2', 'X',\n'F\
-EA', 'X',\n'FEL', 'X',\n'FEM', 'X',\n'FEN', 'X',\n\
-'FEO', 'X',\n'FEP', 'X',\n'FER', 'X',\n'FES', 'X',\
-\n'FFB', 'X',\n'FFC', 'X',\n'FFF', 'X',\n'FFO', 'X\
-',\n'FGL', 'G',\n'FHB', 'X',\n'FHC', 'X',\n'FHP', \
-'X',\n'FHU', 'X',\n'FID', 'X',\n'FII', 'X',\n'FIP'\
-, 'X',\n'FK5', 'X',\n'FKA', 'X',\n'FKI', 'X',\n'FK\
-P', 'X',\n'FL2', 'X',\n'FL9', 'X',\n'FLA', 'A',\n'\
-FLC', 'X',\n'FLD', 'X',\n'FLE', 'L',\n'FLF', 'X',\\
-n'FLO', 'X',\n'FLP', 'X',\n'FLT', 'Y',\n'FLU', 'X'\
-,\n'FLX', 'X',\n'FM1', 'X',\n'FM2', 'X',\n'FMA', '\
-X',\n'FMB', 'X',\n'FMC', 'X',\n'FME', 'M',\n'FMN',\
- 'X',\n'FMP', 'X',\n'FMR', 'X',\n'FMS', 'X',\n'FMT\
-', 'X',\n'FNE', 'X',\n'FNP', 'X',\n'FNS', 'X',\n'F\
-OC', 'X',\n'FOE', 'X',\n'FOG', 'F',\n'FOH', 'X',\n\
-'FOK', 'X',\n'FOL', 'X',\n'FON', 'X',\n'FOP', 'X',\
-\n'FOR', 'X',\n'FOS', 'X',\n'FPA', 'X',\n'FPC', 'X\
-',\n'FPI', 'X',\n'FPO', 'X',\n'FPP', 'X',\n'FPT', \
-'X',\n'FQP', 'X',\n'FRA', 'X',\n'FRD', 'F',\n'FRU'\
-, 'X',\n'FS3', 'X',\n'FS4', 'X',\n'FSB', 'X',\n'FS\
-O', 'X',\n'FSX', 'X',\n'FTC', 'X',\n'FTP', 'X',\n'\
-FTR', 'W',\n'FTT', 'X',\n'FTY', 'Y',\n'FUA', 'X',\\
-n'FUC', 'X',\n'FUM', 'X',\n'FUP', 'X',\n'FVF', 'X'\
-,\n'FXP', 'X',\n'FXV', 'X',\n'FYA', 'F',\n'G16', '\
-X',\n'G1P', 'X',\n'G20', 'X',\n'G21', 'X',\n'G23',\
- 'X',\n'G26', 'X',\n'G28', 'X',\n'G2F', 'X',\n'G37\
-', 'X',\n'G39', 'X',\n'G3H', 'X',\n'G3P', 'X',\n'G\
-4D', 'X',\n'G6D', 'X',\n'G6P', 'X',\n'G6Q', 'X',\n\
-'G7M', 'X',\n'GA2', 'X',\n'GAA', 'X',\n'GAB', 'X',\
-\n'GAC', 'X',\n'GAI', 'X',\n'GAL', 'X',\n'GAM', 'X\
-',\n'GAN', 'X',\n'GAO', 'X',\n'GAP', 'X',\n'GAR', \
-'G',\n'GAS', 'X',\n'GAT', 'X',\n'GBC', 'X',\n'GBI'\
-, 'X',\n'GBP', 'X',\n'GBS', 'X',\n'GBX', 'X',\n'GC\
-4', 'X',\n'GCA', 'X',\n'GCD', 'X',\n'GCG', 'G',\n'\
-GCH', 'G',\n'GCK', 'X',\n'GCL', 'X',\n'GCM', 'X',\\
-n'GCN', 'X',\n'GCO', 'X',\n'GCP', 'X',\n'GCR', 'X'\
-,\n'GCS', 'X',\n'GCU', 'X',\n'GD3', 'X',\n'GDB', '\
-X',\n'GDM', 'X',\n'GDN', 'X',\n'GDP', 'X',\n'GDS',\
- 'X',\n'GDU', 'X',\n'GE1', 'X',\n'GE2', 'X',\n'GE3\
-', 'X',\n'GEA', 'X',\n'GEL', 'X',\n'GEM', 'X',\n'G\
-EN', 'X',\n'GEP', 'X',\n'GER', 'X',\n'GFP', 'X',\n\
-'GGB', 'X',\n'GGL', 'E',\n'GGP', 'X',\n'GHP', 'G',\
-\n'GIP', 'X',\n'GIS', 'X',\n'GKR', 'X',\n'GL2', 'X\
-',\n'GL3', 'G',\n'GL4', 'X',\n'GL5', 'X',\n'GL7', \
-'X',\n'GL9', 'X',\n'GLA', 'X',\n'GLB', 'X',\n'GLC'\
-, 'X',\n'GLD', 'X',\n'GLE', 'X',\n'GLF', 'X',\n'GL\
-G', 'X',\n'GLH', 'Q',\n'GLI', 'X',\n'GLL', 'X',\n'\
-GLM', 'G',\n'GLN', 'Q',\n'GLO', 'X',\n'GLP', 'X',\\
-n'GLR', 'X',\n'GLS', 'X',\n'GLT', 'X',\n'GLU', 'E'\
-,\n'GLV', 'X',\n'GLW', 'X',\n'GLY', 'G',\n'GLZ', '\
-X',\n'GM1', 'X',\n'GMA', 'X',\n'GMC', 'X',\n'GMH',\
- 'X',\n'GMP', 'X',\n'GMY', 'X',\n'GN7', 'X',\n'GNA\
-', 'X',\n'GNB', 'X',\n'GNH', 'X',\n'GNP', 'X',\n'G\
-NT', 'X',\n'GOA', 'X',\n'GOL', 'X',\n'GOX', 'X',\n\
-'GP1', 'X',\n'GP3', 'X',\n'GP4', 'X',\n'GP6', 'X',\
-\n'GP8', 'X',\n'GPB', 'E',\n'GPC', 'X',\n'GPE', 'X\
-',\n'GPG', 'X',\n'GPI', 'X',\n'GPJ', 'X',\n'GPL', \
-'K',\n'GPM', 'X',\n'GPN', 'G',\n'GPP', 'X',\n'GPR'\
-, 'X',\n'GPS', 'X',\n'GPX', 'X',\n'GR1', 'X',\n'GR\
-3', 'X',\n'GR4', 'X',\n'GSA', 'X',\n'GSB', 'X',\n'\
-GSC', 'G',\n'GSE', 'S',\n'GSH', 'X',\n'GSP', 'X',\\
-n'GSR', 'X',\n'GSS', 'X',\n'GT9', 'C',\n'GTA', 'X'\
-,\n'GTB', 'X',\n'GTD', 'X',\n'GTE', 'X',\n'GTH', '\
-T',\n'GTN', 'X',\n'GTO', 'X',\n'GTP', 'X',\n'GTR',\
- 'X',\n'GTS', 'X',\n'GTT', 'X',\n'GTX', 'X',\n'GTZ\
-', 'X',\n'GU7', 'X',\n'GUA', 'X',\n'GUD', 'X',\n'G\
-UM', 'X',\n'GUN', 'X',\n'GUP', 'X',\n'GUR', 'X',\n\
-'GW3', 'X',\n'GZZ', 'X',\n'H2B', 'X',\n'H2P', 'H',\
-\n'H2S', 'X',\n'H2U', 'X',\n'H4B', 'X',\n'H5M', 'P\
-',\n'H5P', 'X',\n'HAA', 'X',\n'HAB', 'X',\n'HAC', \
-'A',\n'HAD', 'X',\n'HAE', 'X',\n'HAG', 'X',\n'HAI'\
-, 'X',\n'HAM', 'X',\n'HAP', 'X',\n'HAQ', 'X',\n'HA\
-R', 'R',\n'HAS', 'X',\n'HAV', 'V',\n'HAX', 'X',\n'\
-HAZ', 'X',\n'HBA', 'X',\n'HBC', 'X',\n'HBD', 'X',\\
-n'HBI', 'X',\n'HBO', 'X',\n'HBU', 'X',\n'HBY', 'X'\
-,\n'HC0', 'X',\n'HC1', 'X',\n'HC4', 'X',\n'HCA', '\
-X',\n'HCC', 'X',\n'HCI', 'X',\n'HCS', 'X',\n'HDA',\
- 'X',\n'HDD', 'X',\n'HDF', 'X',\n'HDN', 'X',\n'HDS\
-', 'X',\n'HDZ', 'X',\n'HE1', 'X',\n'HE6', 'X',\n'H\
-EA', 'X',\n'HEB', 'X',\n'HEC', 'X',\n'HED', 'X',\n\
-'HEE', 'X',\n'HEF', 'X',\n'HEG', 'X',\n'HEM', 'X',\
-\n'HEN', 'X',\n'HEO', 'X',\n'HEP', 'X',\n'HEU', 'X\
-',\n'HEV', 'X',\n'HEX', 'X',\n'HEZ', 'X',\n'HF1', \
-'X',\n'HFA', 'X',\n'HFP', 'X',\n'HGA', 'Q',\n'HGB'\
-, 'X',\n'HGC', 'X',\n'HGI', 'X',\n'HGU', 'X',\n'HH\
-O', 'X',\n'HHP', 'X',\n'HIB', 'X',\n'HIC', 'H',\n'\
-HII', 'X',\n'HIN', 'X',\n'HIO', 'X',\n'HIP', 'H',\\
-n'HIS', 'H',\n'HLE', 'X',\n'HLT', 'X',\n'HMA', 'A'\
-,\n'HMB', 'X',\n'HMC', 'X',\n'HMD', 'X',\n'HMF', '\
-A',\n'HMG', 'X',\n'HMH', 'X',\n'HMI', 'L',\n'HMM',\
- 'X',\n'HMN', 'X',\n'HMO', 'X',\n'HMP', 'X',\n'HMR\
-', 'R',\n'HNI', 'X',\n'HNP', 'X',\n'HOA', 'X',\n'H\
-OE', 'X',\n'HOH', 'X',\n'HOM', 'X',\n'HOP', 'X',\n\
-'HOQ', 'X',\n'HP1', 'A',\n'HP2', 'A',\n'HP3', 'X',\
-\n'HPA', 'X',\n'HPB', 'X',\n'HPC', 'X',\n'HPD', 'X\
-',\n'HPE', 'A',\n'HPG', 'X',\n'HPH', 'F',\n'HPP', \
-'X',\n'HPQ', 'F',\n'HPR', 'X',\n'HPT', 'X',\n'HPY'\
-, 'X',\n'HQO', 'X',\n'HQQ', 'X',\n'HQU', 'X',\n'HR\
-G', 'R',\n'HRI', 'X',\n'HSA', 'X',\n'HSE', 'S',\n'\
-HSF', 'X',\n'HSM', 'X',\n'HSO', 'H',\n'HSP', 'X',\\
-n'HT1', 'X',\n'HT2', 'X',\n'HTA', 'X',\n'HTL', 'X'\
-,\n'HTO', 'X',\n'HTP', 'X',\n'HTR', 'W',\n'HUP', '\
-X',\n'HUX', 'X',\n'HV5', 'A',\n'HV7', 'X',\n'HV8',\
- 'X',\n'HXA', 'X',\n'HXC', 'X',\n'HXP', 'X',\n'HY1\
-', 'X',\n'HYA', 'X',\n'HYB', 'X',\n'HYD', 'X',\n'H\
-YG', 'X',\n'HYP', 'P',\n'I06', 'X',\n'I10', 'X',\n\
-'I11', 'X',\n'I17', 'X',\n'I2P', 'X',\n'I3N', 'X',\
-\n'I3P', 'X',\n'I40', 'X',\n'I48', 'X',\n'I4B', 'X\
-',\n'I52', 'X',\n'I5P', 'X',\n'I84', 'G',\n'IAG', \
-'G',\n'IAS', 'X',\n'IB2', 'X',\n'IBB', 'X',\n'IBP'\
-, 'X',\n'IBR', 'X',\n'IBS', 'X',\n'IBZ', 'X',\n'IC\
-1', 'X',\n'ICA', 'X',\n'ICI', 'X',\n'ICL', 'X',\n'\
-ICP', 'X',\n'ICT', 'X',\n'ICU', 'X',\n'ID2', 'X',\\
-n'IDC', 'X',\n'IDG', 'X',\n'IDH', 'X',\n'IDM', 'X'\
-,\n'IDO', 'X',\n'IDP', 'X',\n'IDR', 'X',\n'IDS', '\
-X',\n'IDT', 'X',\n'IDU', 'X',\n'IFG', 'X',\n'IFP',\
- 'X',\n'IGL', 'X',\n'IGN', 'X',\n'IGP', 'X',\n'IGU\
-', 'X',\n'IH1', 'X',\n'IH2', 'X',\n'IH3', 'X',\n'I\
-HB', 'X',\n'IHN', 'X',\n'IHP', 'X',\n'IIC', 'X',\n\
-'IIL', 'I',\n'IIP', 'X',\n'IK2', 'X',\n'IKT', 'X',\
-\n'ILA', 'I',\n'ILE', 'I',\n'ILG', 'X',\n'ILO', 'X\
-',\n'ILX', 'I',\n'IM1', 'X',\n'IM2', 'X',\n'IMC', \
-'X',\n'IMD', 'X',\n'IME', 'X',\n'IMF', 'X',\n'IMG'\
-, 'X',\n'IMH', 'X',\n'IMI', 'X',\n'IML', 'I',\n'IM\
-M', 'X',\n'IMN', 'X',\n'IMO', 'X',\n'IMP', 'X',\n'\
-IMR', 'X',\n'IMU', 'X',\n'IN0', 'D',\n'IN1', 'R',\\
-n'IN2', 'K',\n'IN3', 'L',\n'IN4', 'X',\n'IN5', 'A'\
-,\n'IN6', 'L',\n'IN7', 'X',\n'IN8', 'X',\n'IN9', '\
-X',\n'INA', 'L',\n'INB', 'X',\n'INC', 'X',\n'IND',\
- 'X',\n'INE', 'X',\n'INF', 'F',\n'ING', 'F',\n'INH\
-', 'R',\n'INI', 'X',\n'INJ', 'X',\n'INK', 'X',\n'I\
-NL', 'X',\n'INM', 'X',\n'INN', 'A',\n'INO', 'X',\n\
-'INP', 'X',\n'INQ', 'X',\n'INR', 'X',\n'INS', 'X',\
-\n'INT', 'V',\n'INU', 'X',\n'INV', 'X',\n'INW', 'X\
-',\n'INX', 'X',\n'INY', 'X',\n'INZ', 'X',\n'IOA', \
-'X',\n'IOB', 'X',\n'IOC', 'X',\n'IOD', 'X',\n'IOE'\
-, 'X',\n'IOF', 'X',\n'IOH', 'X',\n'IOL', 'X',\n'IO\
-P', 'X',\n'IP1', 'X',\n'IP2', 'X',\n'IP3', 'X',\n'\
-IP4', 'X',\n'IPA', 'X',\n'IPB', 'X',\n'IPD', 'X',\\
-n'IPG', 'G',\n'IPH', 'X',\n'IPL', 'X',\n'IPM', 'X'\
-,\n'IPN', 'X',\n'IPO', 'F',\n'IPP', 'X',\n'IPS', '\
-X',\n'IPT', 'X',\n'IPU', 'X',\n'IPY', 'A',\n'IQB',\
- 'X',\n'IQP', 'X',\n'IQS', 'X',\n'IR3', 'X',\n'IRI\
-', 'X',\n'IRP', 'X',\n'ISA', 'X',\n'ISF', 'X',\n'I\
-SO', 'X',\n'ISP', 'X',\n'ISQ', 'X',\n'ISU', 'X',\n\
-'ITM', 'X',\n'ITP', 'X',\n'ITR', 'W',\n'ITS', 'X',\
-\n'ITU', 'X',\n'IU5', 'X',\n'IUM', 'X',\n'IUR', 'X\
-',\n'IVA', 'X',\n'IYG', 'G',\n'IYR', 'Y',\n'J77', \
-'X',\n'J78', 'X',\n'J80', 'X',\n'JE2', 'X',\n'JEN'\
-, 'X',\n'JST', 'X',\n'K21', 'X',\n'KAH', 'X',\n'KA\
-I', 'X',\n'KAM', 'X',\n'KAN', 'X',\n'KAP', 'X',\n'\
-KCP', 'X',\n'KCX', 'K',\n'KDO', 'X',\n'KEF', 'X',\\
-n'KET', 'X',\n'KGR', 'X',\n'KH1', 'X',\n'KIF', 'X'\
-,\n'KIV', 'V',\n'KNI', 'X',\n'KPH', 'K',\n'KTH', '\
-X',\n'KTN', 'X',\n'KTP', 'X',\n'KWT', 'X',\n'L04',\
- 'X',\n'L1P', 'X',\n'L24', 'E',\n'L2P', 'X',\n'L34\
-', 'E',\n'L37', 'E',\n'L3P', 'X',\n'L4P', 'X',\n'L\
-75', 'X',\n'LAC', 'X',\n'LAD', 'X',\n'LAK', 'X',\n\
-'LAM', 'X',\n'LAR', 'X',\n'LAT', 'X',\n'LAX', 'X',\
-\n'LCO', 'X',\n'LCP', 'X',\n'LCS', 'X',\n'LDA', 'X\
-',\n'LDO', 'L',\n'LDP', 'X',\n'LEA', 'X',\n'LEO', \
-'X',\n'LEU', 'L',\n'LG2', 'X',\n'LG6', 'X',\n'LGC'\
-, 'X',\n'LGP', 'X',\n'LHG', 'X',\n'LHY', 'F',\n'LI\
-1', 'X',\n'LIG', 'X',\n'LIL', 'X',\n'LIM', 'X',\n'\
-LIN', 'X',\n'LIO', 'X',\n'LIP', 'X',\n'LLA', 'X',\\
-n'LLP', 'K',\n'LLY', 'K',\n'LMG', 'X',\n'LML', 'X'\
-,\n'LMT', 'X',\n'LMU', 'X',\n'LMZ', 'X',\n'LNK', '\
-X',\n'LNL', 'X',\n'LNO', 'X',\n'LOF', 'X',\n'LOL',\
- 'L',\n'LOM', 'X',\n'LOR', 'X',\n'LOS', 'X',\n'LOV\
-', 'L',\n'LOX', 'X',\n'LP1', 'X',\n'LP2', 'R',\n'L\
-PA', 'X',\n'LPC', 'X',\n'LPF', 'X',\n'LPL', 'X',\n\
-'LPM', 'X',\n'LPP', 'X',\n'LRB', 'X',\n'LRU', 'X',\
-\n'LS1', 'X',\n'LS2', 'X',\n'LS3', 'X',\n'LS4', 'X\
-',\n'LS5', 'X',\n'LTA', 'X',\n'LTL', 'X',\n'LTR', \
-'W',\n'LUM', 'X',\n'LVS', 'L',\n'LXC', 'X',\n'LY2'\
-, 'X',\n'LY3', 'X',\n'LYA', 'X',\n'LYB', 'X',\n'LY\
-C', 'X',\n'LYD', 'X',\n'LYM', 'K',\n'LYN', 'X',\n'\
-LYS', 'K',\n'LYT', 'X',\n'LYW', 'X',\n'LYZ', 'K',\\
-n'M1A', 'X',\n'M1G', 'X',\n'M2G', 'X',\n'M3L', 'K'\
-,\n'M6P', 'X',\n'M6T', 'X',\n'M7G', 'X',\n'MA1', '\
-X',\n'MA2', 'X',\n'MA3', 'X',\n'MA4', 'X',\n'MA6',\
- 'X',\n'MAA', 'A',\n'MAB', 'X',\n'MAC', 'X',\n'MAE\
-', 'X',\n'MAG', 'X',\n'MAH', 'X',\n'MAI', 'R',\n'M\
-AK', 'X',\n'MAL', 'X',\n'MAM', 'X',\n'MAN', 'X',\n\
-'MAO', 'X',\n'MAP', 'X',\n'MAR', 'X',\n'MAS', 'X',\
-\n'MAT', 'X',\n'MAU', 'X',\n'MAZ', 'X',\n'MBA', 'X\
-',\n'MBD', 'X',\n'MBG', 'X',\n'MBH', 'X',\n'MBN', \
-'X',\n'MBO', 'X',\n'MBR', 'X',\n'MBS', 'X',\n'MBV'\
-, 'X',\n'MBZ', 'X',\n'MCA', 'X',\n'MCD', 'X',\n'MC\
-E', 'X',\n'MCG', 'G',\n'MCI', 'X',\n'MCN', 'X',\n'\
-MCP', 'X',\n'MCT', 'X',\n'MCY', 'X',\n'MD2', 'X',\\
-n'MDA', 'X',\n'MDC', 'X',\n'MDG', 'X',\n'MDH', 'X'\
-,\n'MDL', 'X',\n'MDM', 'X',\n'MDN', 'X',\n'MDP', '\
-X',\n'ME6', 'X',\n'MEB', 'X',\n'MEC', 'X',\n'MEL',\
- 'X',\n'MEN', 'N',\n'MEP', 'X',\n'MER', 'X',\n'MES\
-', 'X',\n'MET', 'M',\n'MEV', 'X',\n'MF2', 'X',\n'M\
-F3', 'M',\n'MFB', 'X',\n'MFD', 'X',\n'MFU', 'X',\n\
-'MG7', 'X',\n'MGA', 'X',\n'MGB', 'X',\n'MGD', 'X',\
-\n'MGG', 'R',\n'MGL', 'X',\n'MGN', 'Q',\n'MGO', 'X\
-',\n'MGP', 'X',\n'MGR', 'X',\n'MGS', 'X',\n'MGT', \
-'X',\n'MGU', 'X',\n'MGY', 'G',\n'MHB', 'X',\n'MHF'\
-, 'X',\n'MHL', 'L',\n'MHM', 'X',\n'MHO', 'M',\n'MH\
-S', 'H',\n'MHZ', 'X',\n'MIA', 'X',\n'MIC', 'X',\n'\
-MID', 'X',\n'MIL', 'X',\n'MIM', 'X',\n'MIN', 'G',\\
-n'MIP', 'X',\n'MIS', 'S',\n'MIT', 'X',\n'MJI', 'X'\
-,\n'MK1', 'X',\n'MKC', 'X',\n'MLA', 'X',\n'MLC', '\
-X',\n'MLE', 'L',\n'MLN', 'X',\n'MLT', 'X',\n'MLY',\
- 'K',\n'MLZ', 'K',\n'MM3', 'X',\n'MM4', 'X',\n'MMA\
-', 'X',\n'MMC', 'X',\n'MME', 'M',\n'MMO', 'R',\n'M\
-MP', 'X',\n'MMQ', 'X',\n'MMT', 'X',\n'MN1', 'X',\n\
-'MN2', 'X',\n'MN3', 'X',\n'MN5', 'X',\n'MN7', 'X',\
-\n'MN8', 'X',\n'MNA', 'X',\n'MNB', 'X',\n'MNC', 'X\
-',\n'MNG', 'X',\n'MNL', 'L',\n'MNO', 'X',\n'MNP', \
-'X',\n'MNQ', 'X',\n'MNS', 'X',\n'MNT', 'X',\n'MNV'\
-, 'V',\n'MO1', 'X',\n'MO2', 'X',\n'MO3', 'X',\n'MO\
-4', 'X',\n'MO5', 'X',\n'MO6', 'X',\n'MOA', 'X',\n'\
-MOB', 'X',\n'MOC', 'X',\n'MOE', 'X',\n'MOG', 'X',\\
-n'MOH', 'X',\n'MOL', 'X',\n'MOO', 'X',\n'MOP', 'X'\
-,\n'MOR', 'X',\n'MOS', 'X',\n'MOT', 'X',\n'MOX', '\
-X',\n'MP1', 'X',\n'MP3', 'X',\n'MPA', 'X',\n'MPB',\
- 'X',\n'MPC', 'X',\n'MPD', 'X',\n'MPG', 'X',\n'MPH\
-', 'M',\n'MPI', 'X',\n'MPJ', 'M',\n'MPL', 'X',\n'M\
-PN', 'X',\n'MPO', 'X',\n'MPP', 'X',\n'MPQ', 'G',\n\
-'MPR', 'X',\n'MPS', 'X',\n'MQ0', 'X',\n'MQ7', 'X',\
-\n'MQ8', 'X',\n'MQ9', 'X',\n'MQI', 'X',\n'MR2', 'X\
-',\n'MRC', 'X',\n'MRM', 'X',\n'MRP', 'X',\n'MS2', \
-'X',\n'MSA', 'X',\n'MSB', 'X',\n'MSD', 'X',\n'MSE'\
-, 'M',\n'MSF', 'X',\n'MSI', 'X',\n'MSO', 'M',\n'MS\
-Q', 'X',\n'MST', 'X',\n'MSU', 'X',\n'MTA', 'X',\n'\
-MTB', 'X',\n'MTC', 'X',\n'MTD', 'X',\n'MTE', 'X',\\
-n'MTF', 'X',\n'MTG', 'X',\n'MTO', 'X',\n'MTS', 'X'\
-,\n'MTT', 'X',\n'MTX', 'X',\n'MTY', 'Y',\n'MUG', '\
-X',\n'MUP', 'X',\n'MUR', 'X',\n'MVA', 'V',\n'MW1',\
- 'X',\n'MW2', 'X',\n'MXA', 'X',\n'MXY', 'X',\n'MYA\
-', 'X',\n'MYC', 'X',\n'MYG', 'X',\n'MYR', 'X',\n'M\
-YS', 'X',\n'MYT', 'X',\n'MZM', 'X',\n'N1T', 'X',\n\
-'N25', 'X',\n'N2B', 'X',\n'N3T', 'X',\n'N4B', 'X',\
-\n'NA2', 'X',\n'NA5', 'X',\n'NA6', 'X',\n'NAA', 'X\
-',\n'NAB', 'X',\n'NAC', 'X',\n'NAD', 'X',\n'NAE', \
-'X',\n'NAF', 'X',\n'NAG', 'X',\n'NAH', 'X',\n'NAI'\
-, 'X',\n'NAL', 'A',\n'NAM', 'A',\n'NAN', 'X',\n'NA\
-O', 'X',\n'NAP', 'X',\n'NAQ', 'X',\n'NAR', 'X',\n'\
-NAS', 'X',\n'NAU', 'X',\n'NAV', 'X',\n'NAW', 'X',\\
-n'NAX', 'X',\n'NAY', 'X',\n'NBA', 'X',\n'NBD', 'X'\
-,\n'NBE', 'X',\n'NBG', 'X',\n'NBN', 'X',\n'NBP', '\
-X',\n'NBS', 'X',\n'NBU', 'X',\n'NCA', 'X',\n'NCB',\
- 'A',\n'NCD', 'X',\n'NCH', 'X',\n'NCM', 'X',\n'NCN\
-', 'X',\n'NCO', 'X',\n'NCR', 'X',\n'NCS', 'X',\n'N\
-D4', 'X',\n'NDA', 'X',\n'NDC', 'X',\n'NDD', 'X',\n\
-'NDO', 'X',\n'NDP', 'X',\n'NDT', 'X',\n'NEA', 'X',\
-\n'NEB', 'X',\n'NED', 'X',\n'NEM', 'H',\n'NEN', 'X\
-',\n'NEO', 'X',\n'NEP', 'H',\n'NEQ', 'X',\n'NES', \
-'X',\n'NET', 'X',\n'NEV', 'X',\n'NFA', 'F',\n'NFE'\
-, 'X',\n'NFG', 'X',\n'NFP', 'X',\n'NFS', 'X',\n'NG\
-6', 'X',\n'NGA', 'X',\n'NGL', 'X',\n'NGM', 'X',\n'\
-NGO', 'X',\n'NGP', 'X',\n'NGT', 'X',\n'NGU', 'X',\\
-n'NH2', 'X',\n'NH3', 'X',\n'NH4', 'X',\n'NHD', 'X'\
-,\n'NHE', 'X',\n'NHM', 'X',\n'NHP', 'X',\n'NHR', '\
-X',\n'NHS', 'X',\n'NI1', 'X',\n'NI2', 'X',\n'NIC',\
- 'X',\n'NID', 'X',\n'NIK', 'X',\n'NIO', 'X',\n'NIP\
-', 'X',\n'NIT', 'X',\n'NIU', 'X',\n'NIY', 'Y',\n'N\
-LA', 'X',\n'NLE', 'L',\n'NLG', 'X',\n'NLN', 'L',\n\
-'NLP', 'L',\n'NM1', 'X',\n'NMA', 'A',\n'NMB', 'X',\
-\n'NMC', 'G',\n'NMD', 'X',\n'NME', 'X',\n'NMN', 'X\
-',\n'NMO', 'X',\n'NMQ', 'X',\n'NMX', 'X',\n'NMY', \
-'X',\n'NNH', 'R',\n'NNO', 'X',\n'NO2', 'X',\n'NO3'\
-, 'X',\n'NOA', 'X',\n'NOD', 'X',\n'NOJ', 'X',\n'NO\
-N', 'X',\n'NOP', 'X',\n'NOR', 'X',\n'NOS', 'X',\n'\
-NOV', 'X',\n'NOX', 'X',\n'NP3', 'X',\n'NPA', 'X',\\
-n'NPC', 'X',\n'NPD', 'X',\n'NPE', 'X',\n'NPF', 'X'\
-,\n'NPH', 'C',\n'NPI', 'X',\n'NPL', 'X',\n'NPN', '\
-X',\n'NPO', 'X',\n'NPP', 'X',\n'NPT', 'X',\n'NPY',\
- 'X',\n'NRG', 'R',\n'NRI', 'X',\n'NS1', 'X',\n'NS5\
-', 'X',\n'NSP', 'X',\n'NTA', 'X',\n'NTB', 'X',\n'N\
-TC', 'X',\n'NTH', 'X',\n'NTM', 'X',\n'NTP', 'X',\n\
-'NTS', 'X',\n'NTU', 'X',\n'NTZ', 'X',\n'NU1', 'X',\
-\n'NVA', 'V',\n'NVI', 'X',\n'NVP', 'X',\n'NW1', 'X\
-',\n'NYP', 'X',\n'O4M', 'X',\n'OAA', 'X',\n'OAI', \
-'X',\n'OAP', 'X',\n'OAR', 'X',\n'OAS', 'S',\n'OBA'\
-, 'X',\n'OBN', 'X',\n'OC1', 'X',\n'OC2', 'X',\n'OC\
-3', 'X',\n'OC4', 'X',\n'OC5', 'X',\n'OC6', 'X',\n'\
-OC7', 'X',\n'OCL', 'X',\n'OCM', 'X',\n'OCN', 'X',\\
-n'OCO', 'X',\n'OCP', 'X',\n'OCS', 'C',\n'OCT', 'X'\
-,\n'OCV', 'K',\n'OCY', 'C',\n'ODA', 'X',\n'ODS', '\
-X',\n'OES', 'X',\n'OET', 'X',\n'OF1', 'X',\n'OF2',\
- 'X',\n'OF3', 'X',\n'OFL', 'X',\n'OFO', 'X',\n'OHE\
-', 'X',\n'OHO', 'X',\n'OHT', 'X',\n'OIC', 'X',\n'O\
-IP', 'X',\n'OKA', 'X',\n'OLA', 'X',\n'OLE', 'X',\n\
-'OLI', 'X',\n'OLO', 'X',\n'OMB', 'X',\n'OMC', 'X',\
-\n'OMD', 'X',\n'OME', 'X',\n'OMG', 'X',\n'OMP', 'X\
-',\n'OMT', 'M',\n'OMU', 'X',\n'ONE', 'X',\n'ONL', \
-'L',\n'ONP', 'X',\n'OPA', 'X',\n'OPD', 'X',\n'OPE'\
-, 'X',\n'OPG', 'X',\n'OPH', 'X',\n'OPN', 'X',\n'OP\
-P', 'X',\n'OPR', 'R',\n'ORN', 'X',\n'ORO', 'X',\n'\
-ORP', 'X',\n'OSB', 'X',\n'OSS', 'X',\n'OTA', 'X',\\
-n'OTB', 'X',\n'OTE', 'X',\n'OTG', 'X',\n'OUT', 'X'\
-,\n'OVA', 'X',\n'OWQ', 'X',\n'OXA', 'X',\n'OXE', '\
-X',\n'OXI', 'X',\n'OXL', 'X',\n'OXM', 'X',\n'OXN',\
- 'X',\n'OXO', 'X',\n'OXP', 'X',\n'OXS', 'X',\n'OXY\
-', 'X',\n'P11', 'A',\n'P24', 'X',\n'P28', 'X',\n'P\
-2P', 'X',\n'P2U', 'X',\n'P3M', 'X',\n'P4C', 'X',\n\
-'P4P', 'X',\n'P5P', 'X',\n'P6G', 'X',\n'PA1', 'X',\
-\n'PA2', 'X',\n'PA3', 'X',\n'PA4', 'X',\n'PA5', 'X\
-',\n'PAA', 'X',\n'PAB', 'X',\n'PAC', 'X',\n'PAD', \
-'X',\n'PAE', 'X',\n'PAG', 'X',\n'PAH', 'X',\n'PAI'\
-, 'X',\n'PAL', 'D',\n'PAM', 'X',\n'PAN', 'X',\n'PA\
-O', 'X',\n'PAP', 'A',\n'PAQ', 'F',\n'PAR', 'X',\n'\
-PAS', 'X',\n'PAT', 'W',\n'PBA', 'X',\n'PBB', 'X',\\
-n'PBC', 'X',\n'PBF', 'F',\n'PBG', 'X',\n'PBI', 'X'\
-,\n'PBM', 'X',\n'PBN', 'X',\n'PBP', 'X',\n'PBR', '\
-X',\n'PBZ', 'X',\n'PC2', 'X',\n'PCA', 'E',\n'PCB',\
- 'X',\n'PCD', 'X',\n'PCE', 'X',\n'PCG', 'X',\n'PCH\
-', 'X',\n'PCL', 'X',\n'PCM', 'X',\n'PCP', 'X',\n'P\
-CR', 'X',\n'PCS', 'X',\n'PCU', 'X',\n'PCV', 'X',\n\
-'PCY', 'X',\n'PD1', 'X',\n'PDA', 'X',\n'PDC', 'X',\
-\n'PDD', 'A',\n'PDE', 'A',\n'PDI', 'X',\n'PDL', 'A\
-',\n'PDN', 'X',\n'PDO', 'X',\n'PDP', 'X',\n'PDT', \
-'X',\n'PDU', 'X',\n'PE2', 'X',\n'PE6', 'X',\n'PEA'\
-, 'X',\n'PEB', 'X',\n'PEC', 'X',\n'PED', 'X',\n'PE\
-E', 'X',\n'PEF', 'X',\n'PEG', 'X',\n'PEL', 'X',\n'\
-PEO', 'X',\n'PEP', 'X',\n'PEQ', 'X',\n'PER', 'X',\\
-n'PET', 'X',\n'PFB', 'X',\n'PFC', 'X',\n'PFG', 'X'\
-,\n'PFL', 'X',\n'PFM', 'X',\n'PFZ', 'X',\n'PG4', '\
-X',\n'PG5', 'X',\n'PG6', 'X',\n'PGA', 'X',\n'PGC',\
- 'X',\n'PGD', 'X',\n'PGE', 'X',\n'PGG', 'G',\n'PGH\
-', 'X',\n'PGL', 'X',\n'PGO', 'X',\n'PGP', 'X',\n'P\
-GQ', 'X',\n'PGR', 'X',\n'PGS', 'X',\n'PGU', 'X',\n\
-'PGX', 'X',\n'PGY', 'G',\n'PH1', 'X',\n'PH2', 'X',\
-\n'PH3', 'X',\n'PHA', 'F',\n'PHB', 'X',\n'PHC', 'X\
-',\n'PHD', 'X',\n'PHE', 'F',\n'PHG', 'X',\n'PHH', \
-'X',\n'PHI', 'F',\n'PHL', 'F',\n'PHM', 'X',\n'PHN'\
-, 'X',\n'PHO', 'X',\n'PHP', 'X',\n'PHQ', 'X',\n'PH\
-S', 'H',\n'PHT', 'X',\n'PHW', 'P',\n'PHY', 'X',\n'\
-PI1', 'X',\n'PI2', 'X',\n'PI3', 'X',\n'PI4', 'X',\\
-n'PI5', 'X',\n'PI6', 'X',\n'PI7', 'X',\n'PI8', 'X'\
-,\n'PI9', 'X',\n'PIA', 'X',\n'PIB', 'X',\n'PIC', '\
-X',\n'PID', 'X',\n'PIG', 'X',\n'PIH', 'X',\n'PIM',\
- 'X',\n'PIN', 'X',\n'PIO', 'X',\n'PIP', 'X',\n'PIQ\
-', 'X',\n'PIR', 'X',\n'PIV', 'X',\n'PKF', 'X',\n'P\
-L1', 'X',\n'PL9', 'X',\n'PLA', 'D',\n'PLC', 'X',\n\
-'PLE', 'L',\n'PLG', 'G',\n'PLH', 'X',\n'PLM', 'X',\
-\n'PLP', 'X',\n'PLS', 'S',\n'PLT', 'W',\n'PLU', 'L\
-',\n'PLY', 'X',\n'PMA', 'X',\n'PMB', 'X',\n'PMC', \
-'X',\n'PME', 'F',\n'PML', 'X',\n'PMM', 'X',\n'PMO'\
-, 'X',\n'PMP', 'X',\n'PMS', 'X',\n'PMY', 'X',\n'PN\
-2', 'X',\n'PNA', 'X',\n'PNB', 'X',\n'PNC', 'G',\n'\
-PND', 'X',\n'PNE', 'A',\n'PNF', 'X',\n'PNG', 'X',\\
-n'PNI', 'X',\n'PNL', 'X',\n'PNM', 'X',\n'PNN', 'X'\
-,\n'PNO', 'X',\n'PNP', 'X',\n'PNQ', 'X',\n'PNS', '\
-X',\n'PNT', 'X',\n'PNU', 'X',\n'PO2', 'X',\n'PO4',\
- 'X',\n'POB', 'X',\n'POC', 'X',\n'POL', 'X',\n'POM\
-', 'P',\n'PON', 'X',\n'POP', 'X',\n'POR', 'X',\n'P\
-OS', 'X',\n'PP1', 'X',\n'PP2', 'X',\n'PP3', 'A',\n\
-'PP4', 'X',\n'PP5', 'X',\n'PP6', 'X',\n'PP7', 'X',\
-\n'PP8', 'N',\n'PP9', 'X',\n'PPB', 'X',\n'PPC', 'X\
-',\n'PPD', 'X',\n'PPE', 'E',\n'PPG', 'X',\n'PPH', \
-'F',\n'PPI', 'X',\n'PPJ', 'V',\n'PPL', 'X',\n'PPM'\
-, 'X',\n'PPN', 'A',\n'PPO', 'X',\n'PPP', 'X',\n'PP\
-Q', 'X',\n'PPR', 'X',\n'PPS', 'X',\n'PPT', 'X',\n'\
-PPU', 'X',\n'PPX', 'F',\n'PPY', 'X',\n'PPZ', 'X',\\
-n'PQ0', 'X',\n'PQN', 'X',\n'PQQ', 'X',\n'PR1', 'X'\
-,\n'PR2', 'X',\n'PR3', 'X',\n'PRA', 'X',\n'PRB', '\
-X',\n'PRC', 'X',\n'PRD', 'X',\n'PRE', 'X',\n'PRF',\
- 'X',\n'PRH', 'X',\n'PRI', 'P',\n'PRL', 'X',\n'PRN\
-', 'X',\n'PRO', 'P',\n'PRP', 'X',\n'PRR', 'A',\n'P\
-RS', 'P',\n'PRZ', 'X',\n'PS0', 'X',\n'PSA', 'X',\n\
-'PSD', 'X',\n'PSE', 'X',\n'PSF', 'S',\n'PSG', 'X',\
-\n'PSI', 'X',\n'PSO', 'X',\n'PSQ', 'X',\n'PSS', 'X\
-',\n'PST', 'X',\n'PSU', 'X',\n'PT1', 'X',\n'PT3', \
-'X',\n'PTA', 'X',\n'PTC', 'X',\n'PTD', 'X',\n'PTE'\
-, 'X',\n'PTH', 'Y',\n'PTL', 'X',\n'PTM', 'Y',\n'PT\
-N', 'X',\n'PTO', 'X',\n'PTP', 'X',\n'PTR', 'Y',\n'\
-PTS', 'X',\n'PTT', 'X',\n'PTU', 'X',\n'PTY', 'X',\\
-n'PUA', 'X',\n'PUB', 'X',\n'PUR', 'X',\n'PUT', 'X'\
-,\n'PVA', 'X',\n'PVB', 'X',\n'PVH', 'H',\n'PVL', '\
-X',\n'PXA', 'X',\n'PXF', 'X',\n'PXG', 'X',\n'PXP',\
- 'X',\n'PXY', 'X',\n'PXZ', 'X',\n'PY2', 'X',\n'PY4\
-', 'X',\n'PY5', 'X',\n'PY6', 'X',\n'PYA', 'A',\n'P\
-YC', 'X',\n'PYD', 'X',\n'PYE', 'X',\n'PYL', 'X',\n\
-'PYM', 'X',\n'PYO', 'X',\n'PYP', 'X',\n'PYQ', 'X',\
-\n'PYR', 'X',\n'PYS', 'X',\n'PYT', 'X',\n'PYX', 'X\
-',\n'PYY', 'X',\n'PYZ', 'X',\n'PZQ', 'X',\n'Q82', \
-'X',\n'QNC', 'X',\n'QND', 'X',\n'QSI', 'Q',\n'QTR'\
-, 'X',\n'QUA', 'X',\n'QUE', 'X',\n'QUI', 'X',\n'QU\
-O', 'X',\n'R11', 'X',\n'R12', 'X',\n'R13', 'X',\n'\
-R18', 'X',\n'R1P', 'X',\n'R56', 'X',\n'R5P', 'X',\\
-n'RA2', 'X',\n'RAD', 'X',\n'RAI', 'X',\n'RAL', 'X'\
-,\n'RAM', 'X',\n'RAN', 'X',\n'RAP', 'X',\n'RBF', '\
-X',\n'RBU', 'X',\n'RCA', 'X',\n'RCL', 'X',\n'RCO',\
- 'X',\n'RDC', 'X',\n'RDF', 'W',\n'RE9', 'X',\n'REA\
-', 'X',\n'RED', 'K',\n'REO', 'X',\n'REP', 'X',\n'R\
-ET', 'X',\n'RFA', 'X',\n'RFB', 'X',\n'RFL', 'X',\n\
-'RFP', 'X',\n'RG1', 'X',\n'RGS', 'X',\n'RH1', 'X',\
-\n'RHA', 'X',\n'RHC', 'X',\n'RHD', 'X',\n'RHM', 'X\
-',\n'RHO', 'X',\n'RHQ', 'X',\n'RHS', 'X',\n'RIA', \
-'X',\n'RIB', 'X',\n'RIC', 'X',\n'RIF', 'X',\n'RIN'\
-, 'X',\n'RIP', 'X',\n'RIT', 'X',\n'RMB', 'X',\n'RM\
-N', 'X',\n'RMP', 'X',\n'RNG', 'X',\n'RNS', 'X',\n'\
-RNT', 'X',\n'RO2', 'X',\n'RO4', 'X',\n'ROC', 'N',\\
-n'ROI', 'X',\n'ROM', 'X',\n'RON', 'V',\n'ROP', 'X'\
-,\n'ROS', 'X',\n'ROX', 'X',\n'RPA', 'X',\n'RPD', '\
-X',\n'RPH', 'X',\n'RPL', 'X',\n'RPP', 'X',\n'RPR',\
- 'X',\n'RPX', 'X',\n'RQ3', 'X',\n'RR1', 'X',\n'RR6\
-', 'X',\n'RRS', 'X',\n'RS1', 'X',\n'RS2', 'X',\n'R\
-S7', 'X',\n'RSS', 'X',\n'RTA', 'X',\n'RTB', 'X',\n\
-'RTC', 'X',\n'RTL', 'X',\n'RUB', 'X',\n'RUN', 'X',\
-\n'RWJ', 'X',\n'RXP', 'X',\n'S02', 'X',\n'S11', 'X\
-',\n'S1H', 'S',\n'S27', 'X',\n'S2C', 'C',\n'S3P', \
-'X',\n'S4U', 'X',\n'S57', 'X',\n'S58', 'X',\n'S5H'\
-, 'X',\n'S6G', 'X',\n'S80', 'X',\n'SAA', 'X',\n'SA\
-B', 'X',\n'SAC', 'S',\n'SAD', 'X',\n'SAE', 'X',\n'\
-SAF', 'X',\n'SAH', 'C',\n'SAI', 'C',\n'SAL', 'X',\\
-n'SAM', 'M',\n'SAN', 'X',\n'SAP', 'X',\n'SAR', 'X'\
-,\n'SAS', 'X',\n'SB1', 'X',\n'SB2', 'X',\n'SB3', '\
-X',\n'SB4', 'X',\n'SB5', 'X',\n'SB6', 'X',\n'SBA',\
- 'L',\n'SBB', 'X',\n'SBD', 'A',\n'SBI', 'X',\n'SBL\
-', 'A',\n'SBN', 'X',\n'SBO', 'X',\n'SBR', 'X',\n'S\
-BS', 'X',\n'SBT', 'X',\n'SBU', 'X',\n'SBX', 'X',\n\
-'SC4', 'X',\n'SCA', 'X',\n'SCC', 'X',\n'SCD', 'X',\
-\n'SCH', 'C',\n'SCI', 'X',\n'SCL', 'X',\n'SCM', 'X\
-',\n'SCN', 'X',\n'SCO', 'X',\n'SCP', 'S',\n'SCR', \
-'X',\n'SCS', 'X',\n'SCV', 'C',\n'SCY', 'C',\n'SD8'\
-, 'X',\n'SDK', 'X',\n'SDZ', 'X',\n'SE4', 'X',\n'SE\
-A', 'X',\n'SEB', 'S',\n'SEC', 'X',\n'SEG', 'A',\n'\
-SEI', 'X',\n'SEL', 'S',\n'SEM', 'X',\n'SEO', 'X',\\
-n'SEP', 'S',\n'SER', 'S',\n'SES', 'X',\n'SET', 'S'\
-,\n'SEU', 'X',\n'SF4', 'X',\n'SFG', 'X',\n'SFN', '\
-X',\n'SFO', 'X',\n'SGA', 'X',\n'SGC', 'X',\n'SGL',\
- 'X',\n'SGM', 'X',\n'SGN', 'X',\n'SGP', 'X',\n'SHA\
-', 'X',\n'SHC', 'X',\n'SHF', 'X',\n'SHH', 'X',\n'S\
-HP', 'G',\n'SHR', 'E',\n'SHT', 'T',\n'SHU', 'X',\n\
-'SI2', 'X',\n'SIA', 'X',\n'SIF', 'X',\n'SIG', 'X',\
-\n'SIH', 'X',\n'SIM', 'X',\n'SIN', 'X',\n'SKD', 'X\
-',\n'SKF', 'X',\n'SLB', 'X',\n'SLE', 'X',\n'SLZ', \
-'K',\n'SMA', 'X',\n'SMC', 'C',\n'SME', 'M',\n'SML'\
-, 'X',\n'SMM', 'M',\n'SMN', 'X',\n'SMP', 'X',\n'SM\
-S', 'X',\n'SN1', 'X',\n'SN6', 'X',\n'SN7', 'X',\n'\
-SNC', 'C',\n'SNN', 'X',\n'SNP', 'X',\n'SO1', 'X',\\
-n'SO2', 'X',\n'SO3', 'X',\n'SO4', 'X',\n'SOA', 'X'\
-,\n'SOC', 'C',\n'SOM', 'X',\n'SOR', 'X',\n'SOT', '\
-X',\n'SOX', 'X',\n'SPA', 'X',\n'SPB', 'X',\n'SPC',\
- 'X',\n'SPD', 'X',\n'SPE', 'X',\n'SPG', 'X',\n'SPH\
-', 'X',\n'SPI', 'X',\n'SPK', 'X',\n'SPM', 'X',\n'S\
-PN', 'X',\n'SPO', 'X',\n'SPP', 'X',\n'SPS', 'X',\n\
-'SPY', 'X',\n'SQU', 'X',\n'SRA', 'X',\n'SRB', 'X',\
-\n'SRD', 'X',\n'SRL', 'X',\n'SRM', 'X',\n'SRS', 'X\
-',\n'SRY', 'X',\n'SSA', 'X',\n'SSB', 'X',\n'SSG', \
-'X',\n'SSP', 'X',\n'ST1', 'X',\n'ST2', 'X',\n'ST3'\
-, 'X',\n'ST4', 'X',\n'ST5', 'X',\n'ST6', 'X',\n'ST\
-A', 'X',\n'STB', 'X',\n'STE', 'X',\n'STG', 'X',\n'\
-STI', 'X',\n'STL', 'X',\n'STN', 'X',\n'STO', 'X',\\
-n'STP', 'X',\n'STR', 'X',\n'STU', 'X',\n'STY', 'Y'\
-,\n'SU1', 'X',\n'SU2', 'X',\n'SUC', 'X',\n'SUI', '\
-X',\n'SUL', 'X',\n'SUR', 'X',\n'SVA', 'S',\n'SWA',\
- 'X',\n'T16', 'X',\n'T19', 'X',\n'T23', 'X',\n'T29\
-', 'X',\n'T33', 'X',\n'T3P', 'X',\n'T42', 'A',\n'T\
-44', 'X',\n'T5A', 'X',\n'T6A', 'T',\n'T6P', 'X',\n\
-'T80', 'X',\n'T87', 'X',\n'TA1', 'X',\n'TAA', 'X',\
-\n'TAB', 'X',\n'TAC', 'X',\n'TAD', 'X',\n'TAF', 'X\
-',\n'TAM', 'X',\n'TAP', 'X',\n'TAR', 'X',\n'TAS', \
-'X',\n'TAU', 'X',\n'TAX', 'X',\n'TAZ', 'X',\n'TB9'\
-, 'X',\n'TBA', 'X',\n'TBD', 'X',\n'TBG', 'G',\n'TB\
-H', 'X',\n'TBM', 'T',\n'TBO', 'X',\n'TBP', 'X',\n'\
-TBR', 'X',\n'TBS', 'X',\n'TBT', 'X',\n'TBU', 'X',\\
-n'TBZ', 'X',\n'TC4', 'X',\n'TCA', 'X',\n'TCB', 'X'\
-,\n'TCH', 'X',\n'TCK', 'X',\n'TCL', 'X',\n'TCM', '\
-X',\n'TCN', 'X',\n'TCP', 'X',\n'TCR', 'W',\n'TCS',\
- 'X',\n'TCZ', 'X',\n'TDA', 'X',\n'TDB', 'X',\n'TDG\
-', 'X',\n'TDP', 'X',\n'TDR', 'X',\n'TDX', 'X',\n'T\
-EA', 'X',\n'TEM', 'X',\n'TEN', 'X',\n'TEO', 'X',\n\
-'TEP', 'X',\n'TER', 'X',\n'TES', 'X',\n'TET', 'X',\
-\n'TFA', 'X',\n'TFB', 'X',\n'TFH', 'X',\n'TFI', 'X\
-',\n'TFK', 'X',\n'TFP', 'X',\n'THA', 'X',\n'THB', \
-'X',\n'THC', 'T',\n'THD', 'X',\n'THE', 'X',\n'THF'\
-, 'X',\n'THJ', 'X',\n'THK', 'X',\n'THM', 'X',\n'TH\
-N', 'X',\n'THO', 'T',\n'THP', 'X',\n'THQ', 'X',\n'\
-THR', 'T',\n'THS', 'X',\n'THT', 'X',\n'THU', 'X',\\
-n'THX', 'X',\n'THZ', 'X',\n'TI1', 'X',\n'TI2', 'X'\
-,\n'TI3', 'P',\n'TIA', 'X',\n'TIH', 'A',\n'TK4', '\
-X',\n'TLA', 'X',\n'TLC', 'X',\n'TLM', 'X',\n'TLN',\
- 'X',\n'TLX', 'X',\n'TM5', 'X',\n'TM6', 'X',\n'TMA\
-', 'X',\n'TMB', 'T',\n'TMC', 'X',\n'TMD', 'T',\n'T\
-ME', 'X',\n'TMF', 'X',\n'TML', 'K',\n'TMM', 'X',\n\
-'TMN', 'X',\n'TMP', 'X',\n'TMQ', 'X',\n'TMR', 'X',\
-\n'TMT', 'X',\n'TMZ', 'X',\n'TNB', 'C',\n'TND', 'X\
-',\n'TNK', 'X',\n'TNP', 'X',\n'TNT', 'X',\n'TOA', \
-'X',\n'TOB', 'X',\n'TOC', 'X',\n'TOL', 'X',\n'TOP'\
-, 'X',\n'TOS', 'X',\n'TOT', 'X',\n'TP1', 'G',\n'TP\
-2', 'P',\n'TP3', 'E',\n'TP4', 'E',\n'TP7', 'T',\n'\
-TPA', 'X',\n'TPE', 'X',\n'TPF', 'X',\n'TPI', 'X',\\
-n'TPL', 'W',\n'TPM', 'X',\n'TPN', 'G',\n'TPO', 'T'\
-,\n'TPP', 'X',\n'TPQ', 'A',\n'TPR', 'P',\n'TPS', '\
-X',\n'TPT', 'X',\n'TPV', 'X',\n'TPX', 'X',\n'TPY',\
- 'X',\n'TQ3', 'X',\n'TQ4', 'X',\n'TQ5', 'X',\n'TQ6\
-', 'X',\n'TR1', 'X',\n'TRA', 'X',\n'TRB', 'X',\n'T\
-RC', 'X',\n'TRD', 'X',\n'TRE', 'X',\n'TRF', 'W',\n\
-'TRG', 'K',\n'TRH', 'X',\n'TRI', 'X',\n'TRJ', 'X',\
-\n'TRM', 'X',\n'TRN', 'W',\n'TRO', 'W',\n'TRP', 'W\
-',\n'TRQ', 'X',\n'TRS', 'X',\n'TRX', 'W',\n'TRZ', \
-'X',\n'TS2', 'X',\n'TS3', 'X',\n'TS4', 'X',\n'TS5'\
-, 'X',\n'TSA', 'X',\n'TSB', 'X',\n'TSI', 'X',\n'TS\
-M', 'X',\n'TSN', 'X',\n'TSP', 'X',\n'TSU', 'X',\n'\
-TTA', 'X',\n'TTE', 'X',\n'TTN', 'X',\n'TTO', 'X',\\
-n'TTP', 'X',\n'TTX', 'X',\n'TXL', 'X',\n'TYA', 'Y'\
-,\n'TYB', 'Y',\n'TYD', 'X',\n'TYI', 'Y',\n'TYL', '\
-X',\n'TYM', 'W',\n'TYN', 'Y',\n'TYQ', 'Y',\n'TYR',\
- 'Y',\n'TYS', 'Y',\n'TYV', 'X',\n'TYY', 'A',\n'TZB\
-', 'X',\n'TZC', 'X',\n'TZE', 'X',\n'TZL', 'X',\n'T\
-ZO', 'X',\n'TZP', 'X',\n'U01', 'X',\n'U02', 'X',\n\
-'U03', 'X',\n'U04', 'X',\n'U05', 'X',\n'U0E', 'X',\
-\n'U10', 'X',\n'U18', 'X',\n'U2G', 'X',\n'U3P', 'X\
-',\n'U49', 'X',\n'U55', 'X',\n'U5P', 'X',\n'U66', \
-'X',\n'U89', 'X',\n'U8U', 'X',\n'UAA', 'X',\n'UAG'\
-, 'A',\n'UAP', 'X',\n'UAR', 'X',\n'UC1', 'X',\n'UC\
-2', 'X',\n'UC3', 'X',\n'UC4', 'X',\n'UD1', 'X',\n'\
-UD2', 'X',\n'UDP', 'X',\n'UDX', 'X',\n'UFG', 'X',\\
-n'UFM', 'X',\n'UFP', 'X',\n'UGA', 'X',\n'UIN', 'X'\
-,\n'UKP', 'A',\n'UM3', 'X',\n'UMA', 'A',\n'UMG', '\
-X',\n'UMP', 'X',\n'UNA', 'X',\n'UND', 'X',\n'UNI',\
- 'X',\n'UNK', 'X',\n'UNN', 'X',\n'UNX', 'X',\n'UP5\
-', 'X',\n'UP6', 'X',\n'UPA', 'X',\n'UPF', 'X',\n'U\
-PG', 'X',\n'UPP', 'X',\n'UQ1', 'X',\n'UQ2', 'X',\n\
-'UQ6', 'X',\n'UR2', 'X',\n'URA', 'X',\n'URE', 'X',\
-\n'URF', 'X',\n'URI', 'X',\n'URS', 'X',\n'UTP', 'X\
-',\n'UVC', 'X',\n'UVW', 'X',\n'V35', 'X',\n'V36', \
-'X',\n'V4O', 'X',\n'V7O', 'X',\n'VAA', 'V',\n'VAC'\
-, 'X',\n'VAD', 'V',\n'VAF', 'V',\n'VAG', 'X',\n'VA\
-L', 'V',\n'VAN', 'X',\n'VAS', 'X',\n'VAX', 'X',\n'\
-VDX', 'X',\n'VDY', 'X',\n'VG1', 'X',\n'VIB', 'X',\\
-n'VIR', 'X',\n'VIT', 'X',\n'VK3', 'X',\n'VO3', 'X'\
-,\n'VO4', 'X',\n'VS1', 'F',\n'VS2', 'F',\n'VS3', '\
-F',\n'VS4', 'F',\n'VXA', 'X',\n'W01', 'X',\n'W02',\
- 'X',\n'W03', 'X',\n'W11', 'X',\n'W33', 'X',\n'W35\
-', 'X',\n'W42', 'X',\n'W43', 'X',\n'W54', 'X',\n'W\
-56', 'X',\n'W59', 'X',\n'W71', 'X',\n'W84', 'X',\n\
-'W8R', 'X',\n'W91', 'X',\n'WAY', 'X',\n'WCC', 'X',\
-\n'WO2', 'X',\n'WO4', 'X',\n'WRB', 'X',\n'WRR', 'X\
-',\n'WRS', 'X',\n'WW7', 'X',\n'X2F', 'X',\n'X7O', \
-'X',\n'XAA', 'X',\n'XAN', 'X',\n'XAO', 'X',\n'XBB'\
-, 'X',\n'XBP', 'X',\n'XDN', 'X',\n'XDP', 'X',\n'XI\
-F', 'X',\n'XIM', 'X',\n'XK2', 'X',\n'XL1', 'X',\n'\
-XLS', 'X',\n'XMP', 'X',\n'XN1', 'X',\n'XN2', 'X',\\
-n'XN3', 'X',\n'XUL', 'X',\n'XV6', 'X',\n'XYD', 'X'\
-,\n'XYH', 'X',\n'XYL', 'X',\n'XYP', 'X',\n'XYS', '\
-X',\n'YOF', 'Y',\n'YRR', 'X',\n'YT3', 'X',\n'YZ9',\
- 'X',\n'Z34', 'G',\n'Z5A', 'X',\n'ZAF', 'X',\n'ZAP\
-', 'X',\n'ZEB', 'X',\n'ZEN', 'X',\n'ZES', 'X',\n'Z\
-ID', 'X',\n'ZMR', 'X',\n'ZN3', 'X',\n'ZNH', 'X',\n\
-'ZNO', 'X',\n'ZO3', 'X',\n'ZPR', 'P',\n'ZRA', 'A',\
-\n'ZST', 'X',\n'ZYA', 'A',\n\n\n'ASN','N');\n} \n      \
-  \n\n\n","use Cwd;\nuse File::Path;\nuse FileHand\
-le;\nuse strict;\n\n\nour (%MODE, %PG, %ENV_SET, %\
-SUPPORTED_OS);\n\n\nour $EXIT_SUCCESS=0;\nour $EXI\
-T_FAILURE=1;\nour $INTERNET=0;\n\nour $CP=\"cp \";\
- #was causing a crash on MacOSX\nour $SILENT=\">/d\
-ev/null 2>/dev/null\";\nour $WEB_BASE=\"http://www\
-.tcoffee.org\";\nour $TCLINKDB_ADDRESS=\"$WEB_BASE\
-/Resources/tclinkdb.txt\";\nour $OS=get_os();\nour\
- $ROOT=&get_root();\nour $CD=cwd();\nour $CDIR=$CD\
-;\nour $HOME=$ENV{'HOME'};\nour $CXX=\"g++\";\nour\
- $CXXFLAGS=\"\";\n\nour $CPP=\"g++\";\nour $CPPFLA\
-GS=\"\";\n\nour $CC=\"gcc\";\nour $CFLAGS=\"\";\n\\
-nour $FC=\"f77\";\nour $FFLAGS=\"\";\n\nmy $instal\
-l=\"all\";\nmy $default_update_action=\"no_update\\
-";\nmy @required_applications=(\"wget_OR_curl\");\\
-nmy @smode=(\"all\", \"clean\", \"install\");\n\n&\
-initialize_PG();\n\nmy $cl=join( \" \", @ARGV);\ni\
-f ($#ARGV==-1 || ($cl=~/-h/) ||($cl=~/-H/) )\n  {\\
-n     print \"\\n!!!!!!! ./install  t_coffee      \
-       --> installs t_coffee only\";\n     print \\
-"\\n!!!!!!! ./install  all                  --> in\
-stalls all the modes [mcoffee, expresso, psicoffee\
-,rcoffee..]\";\n     print \"\\n!!!!!!! ./install \
- [mcoffee|rcoffee|..] --> installs the specified m\
-ode\";\n     print \"\\n!!!!!!! ./install  -h     \
-              --> print usage\\n\\n\";\n     if ( \
-$#ARGV==-1){exit ($EXIT_FAILURE);}\n   }\n     \ni\
-f (($cl=~/-h/) ||($cl=~/-H/) )\n  {\n    my $m;\n \
-   print \"\\n\\n!!!!!!! advanced mode\\n\";\n    \
-foreach $m ((keys (%MODE)),@smode)\n      {\n  prin\
-t \"!!!!!!!       ./install $m\\n\";\n      }\n   \
- \n    print \"!!!!!!! ./install [target:package|m\
-ode|] [-update|-force|-exec=dir|-dis=dir|-root|-tc\
-linkdb=file|-] [CC=|FCC=|CXX=|CFLAGS=|CXXFLAGS=]\\\
-n\";\n    print \"!!!!!!! ./install clean    [remo\
-ves all executables]\\n\";\n    print \"!!!!!!! ./\
-install [optional:target] -update               [u\
-pdates package already installed]\\n\";\n    print\
- \"!!!!!!! ./install [optional:target] -force     \
-           [Forces recompilation over everything]\\
-\n\";\n    \n    print \"!!!!!!! ./install [option\
-al:target] -root                 [You are running \
-as root]\\n\";\n    print \"!!!!!!! ./install [opt\
-ional:target] -exec=/foo/bar/       [address for t\
-he T-Coffee executable]\\n\";\n    print \"!!!!!!!\
- ./install [optional:target] -dis=/foo/bar/       \
- [Address where distributions should be stored]\\n\
-\";\n    print \"!!!!!!! ./install [optional:targe\
-t] -tclinkdb=foo|update  [file containing all the \
-packages to be installed]\\n\";\n    print \"!!!!!\
-!! ./install [optional:target] -tclinkdb=foo|updat\
-e  [file containing all the packages to be install\
-ed]\\n\";\n    print \"!!!!!!! ./install [optional\
-:target] -clean                [clean everything]\\
-\n\";\n    print \"!!!!!!! ./install [optional:tar\
-get] -plugins              [plugins directory]\\n\\
-";\n    print \"!!!!!!! mode:\";\n    foreach $m (\
-keys(%MODE)){print \"$m \";}\n    print \"\\n\";\n\
-    print \"!!!!!!! Packages:\";\n    foreach $m (\
-keys (%PG)){print \"$m \";}\n    print \"\\n\";\n \
-   \n    print \"\\n\\n\";\n    exit ($EXIT_FAILUR\
-E);\n  }\n\n\n\nmy (@argl)=($cl=~/(\\S+=[^=]+)\\s\\
-\w+=/g);\npush (@argl, ($cl=~/(\\S+=[^=]+\\S)\\s*$\
-/g));\n\nforeach $a (@argl)\n  {\n    if ( ($cl=~/\
-CXX=(.*)/)){$CXX=$1;}\n    if ( ($cl=~/-CC=(.*)/  \
-  )){$CC=$1;}\n    if ( ($cl=~/-FC=(.*)/    )){$FC\
-=$1;}\n    if ( ($cl=~/-CFLAGS=(.*)/)){$CFLAGS=$1;\
-}\n    if ( ($cl=~/-CXXFLAGS=(.*)/)){$CXXFLAGS=$1;\
-}\n  }\nour ($ROOT_INSTALL, $NO_QUESTION, $default\
-_update_action,$BINARIES_ONLY,$force, $default_upd\
-ate_action, $INSTALL_DIR, $PLUGINS_DIR, $DISTRIBUT\
-IONS,$tclinkdb, $proxy, $clean);\nif ( ($cl=~/-roo\
-t/)){$ROOT_INSTALL=1;}\nif ( ($cl=~/-no_question/)\
-){$NO_QUESTION=1;}\nif ( ($cl=~/-update/)){$defaul\
-t_update_action=\"update\";}\nif ( ($cl=~/-binarie\
-s/)){$BINARIES_ONLY=1;}\nif ( ($cl=~/-force/)){$fo\
-rce=1;$default_update_action=\"update\"}\nif ( ($c\
-l=~/-exec=\\s*(\\S+)/)){$INSTALL_DIR=$1;}\nif ( ($\
-cl=~/-plugins=\\s*(\\S+)/)){$PLUGINS_DIR=$1;}\nif \
-( ($cl=~/-dis=\\s*(\\S+)/)){$DISTRIBUTIONS=$1;}\n\\
-nif ( ($cl=~/-tclinkdb=\\s*(\\S+)/)){$tclinkdb=$1;\
-}\nif ( ($cl=~/-proxy=\\s*(\\S+)/)){$proxy=$1;}\ni\
-f ( ($cl=~/-clean/)){$clean=1;}\nif ($tclinkdb){&u\
-pdate_tclinkdb ($tclinkdb);}\n\nour $TCDIR=$ENV{DI\
-R_4_TCOFFEE};\nour $TCCACHE=$ENV{CACHE_4_TCOFFEE};\
-\nour $TCTMP=$ENV{CACHE_4_TCOFFEE};\nour $TCM=$ENV\
-{MCOFFEE_4_TCOFFEE};\nour $TCMETHODS=$ENV{METHODS_\
-4_TCOFFEE};\nour $TCPLUGINS=$ENV{PLUGINS_4_TCOFFEE\
-};\nour $PLUGINS_DIR=\"\";\nour $INSTALL_DIR=\"\";\
-\n\n&add_dir ($TCDIR=\"$HOME/.t_coffee\");\n&add_d\
-ir ($TCCACHE=\"$TCDIR/cache\");\n&add_dir ($TCTMP=\
-\"$CDIR/tmp\");\n&add_dir ($TCM=\"$TCDIR/mcoffee\"\
-);\n&add_dir ($TCMETHODS=\"$TCDIR/methods\");\n&ad\
-d_dir ($TCPLUGINS=\"$TCDIR/plugins/$OS\");\n\n\nou\
-r $BASE=\"$CD/bin\";\nour $BIN=\"$BASE/binaries/$O\
-S\";\nour $DOWNLOAD_DIR=\"$BASE/download\";\nour $\
-DOWNLOAD_FILE=\"$DOWNLOAD_DIR/files\";\nour $TMP=\\
-"$BASE/tmp\";\n\n&add_dir($BASE);\n&add_dir($BIN);\
-\n&add_dir($DOWNLOAD_DIR);\n&add_dir($DOWNLOAD_FIL\
-E);\nif (!$DISTRIBUTIONS){$DISTRIBUTIONS=\"$DOWNLO\
-AD_DIR/distributions\";}\n&add_dir ($DISTRIBUTIONS\
-);\n&add_dir ($TMP);\n\n\nif    (!$PLUGINS_DIR && \
-!$ROOT_INSTALL){$PLUGINS_DIR=$TCPLUGINS;}\nelsif (\
-!$PLUGINS_DIR &&  $ROOT_INSTALL){$PLUGINS_DIR=\"/u\
-sr/local/bin/\";}\n\nif    (!$INSTALL_DIR && !$ROO\
-T_INSTALL){$INSTALL_DIR=\"$HOME/bin/\";mkpath ($IN\
-STALL_DIR);}\nelsif (!$INSTALL_DIR &&  $ROOT_INSTA\
-LL){$INSTALL_DIR=\"/usr/local/bin/\";}\n\nif (-d \\
-"mcoffee\"){`cp mcoffee/* $TCM`;}\n\n\nour $ENV_FI\
-LE=\"$TCDIR/t_coffee_env\";\n&env_file2putenv ($EN\
-V_FILE);\n&set_proxy($proxy);\nmy ($target, $p, $r\
-);\n$target=$p;\n\nforeach $p (  ((keys (%PG)),(ke\
-ys(%MODE)),(@smode)) )\n  {\n    if ($ARGV[0] eq $\
-p && $target eq \"\"){$target=$p;}\n  }\nif ($targ\
-et eq \"\"){exit ($EXIT_FAILURE);}\n\n\nforeach $r\
- (@required_applications)\n  {\n    my @app_list;\\
-n    my $i;\n    $i=0;\n    \n    @app_list=split \
-(/_OR_/, $r);\n    foreach my $pg (@app_list)\n   \
-   {\n $i+=&pg_is_installed ($pg);\n      }\n    i\
-f ($i==0)\n      {\n      print \"One of the follo\
-wing packages must be installed to proceed: \";\n \
-     foreach my $pg (@app_list)\n      {\n       print (\"$\
-pg \");\n      }\n      die;\n    }\n  }\n\n\n\n\n\n\n&\
-sign_license_ni();\n\n\n$PG{C}{compiler}=get_C_com\
-piler($CC);\n$PG{Fortran}{compiler}=get_F_compiler\
-($FC);\n$PG{CXX}{compiler}=$PG{CPP}{compiler}=$PG{\
-GPP}{compiler}=get_CXX_compiler($CXX);\nif ($CXXFL\
-AGS){$PG{CPP}{options}=$PG{GPP}{options}=$PG{CXX}{\
-options}=$CXXFLAGS;}\nif ($CFLAGS){$PG{C}{options}\
-=$CFLAGS;}\nforeach my $c (keys(%PG))\n  {\n    my\
- $arguments;\n    if ($PG{$c}{compiler})\n      {\\
-n      $arguments=\"$PG{$c}{compiler_flag}=$PG{$c}{comp\
-iler} \";\n    if ($PG{$c}{options})\n   {\n       $arg\
-uments.=\"$PG{$c}{options_flag}=$PG{$c}{options} \\
-";\n     }\n   $PG{$c}{arguments}=$arguments;\n      }\
-\n  }\n\nif ($PG{$target}){$PG{$target}{install}=1\
-;}\nelse\n  {\n    foreach my $pg (keys(%PG))\n   \
-   {\n if ( $target eq \"all\" || ($PG{$pg}{mode}=\
-~/$target/))\n   {\n       $PG{$pg} {install}=1;\n      \
- }\n      }\n  }\n\nforeach my $pg (keys(%PG))\n  \
-{\n    if (!$PG{$pg}{update_action}){$PG{$pg}{upda\
-te_action}=$default_update_action;}\n    elsif ($P\
-G{$pg}{update_action} eq \"never\"){$PG{$pg}{insta\
-ll}=0;}\n    if ( $force && $PG{$pg}{install})\n  \
-    {\n        `rm $BIN/$pg $BIN/$pg.exe $SILENT`;\n     \
- }\n    if ($PG{$pg}{update_action} eq \"update\" \
-&& $PG{$pg}{install}){$PG{$pg}{update}=1;}\n  }\n\\
-nif (($target=~/clean/))\n  {\n    print \"-------\
- cleaning executables -----\\n\";\n    `rm bin/* $\
-SILENT`;\n    exit ($EXIT_SUCCESS);\n  }\n\nif ( !\
-$PG{$target}){print \"------- Installing T-Coffee \
-Modes\\n\";}\n\nforeach my $m (keys(%MODE))\n  {\n\
-    if ( $target eq \"all\" || $target eq $m)\n   \
-   {\n print \"\\n------- The installer will now i\
-nstall the $m components $MODE{$m}{description}\\n\
-\";\n  foreach my $pg (keys(%PG))\n      {\n       if ( \
-$PG{$pg}{mode} =~/$m/ && $PG{$pg}{install})\n      \
-  {\n          if ($PG{$pg}{touched}){print \"------- $PG{\
-$pg}{dname}: already processed\\n\";}\n                else {$PG\
-{$pg}{success}=&install_pg($pg);$PG{$pg}{touched}=\
-1;}\n        }\n         }\n      }\n  }\n\nif ( $PG{$tar\
-get}){print \"------- Installing Individual Packag\
-e\\n\";}\nforeach my $pg (keys (%PG))\n  {\n    \n\
-    if ( $PG{$pg}{install} && !$PG{$pg}{touched})\\
-n      {\n     print \"\\n------- Install $pg\\n\";\n  \
-$PG{$pg}{success}=&install_pg($pg);$PG{$pg}{touche\
-d}=1;\n      }\n  }\nprint \"------- Finishing The\
- installation\\n\";\nmy $final_report=&install ($I\
-NSTALL_DIR);\n\nprint \"\\n\";\nprint \"**********\
-**************************************************\
-*********\\n\";\nprint \"********              INS\
-TALLATION SUMMARY          *****************\\n\";\
-\nprint \"****************************************\
-*****************************\\n\";\nprint \"-----\
--- SUMMARY package Installation:\\n\";\nforeach my\
- $pg (keys(%PG))\n  {\n    if ( $PG{$pg}{install})\
-\n      {\n    my $bin_status=($PG{$pg}{from_binary} \
-&& $PG{$pg}{success})?\"[from binary]\":\"\";\n        if\
-     ( $PG{$pg}{new} && !$PG{$pg}{old})           \
-          {print \"*------        $PG{$pg}{dname}:\
- installed $bin_status\\n\"; $PG{$pg}{status}=1;}\\
-n      elsif  ( $PG{$pg}{new} &&  $PG{$pg}{old})       \
-              {print \"*------        $PG{$pg}{dna\
-me}: updated $bin_status\\n\"  ; $PG{$pg}{status}=\
-1;} \n elsif  (!$PG{$pg}{new} &&  $PG{$pg}{old} &&\
- !$PG{$pg}{update}){print \"*------        $PG{$pg\
-}{dname}: previous\\n\" ; $PG{$pg}{status}=1;}\n       e\
-lsif  (!$PG{$pg}{new} &&  $PG{$pg}{old} &&  $PG{$p\
-g}{update}){print \"*------        $PG{$pg}{dname}\
-: failed update (previous installation available)\\
-\n\";$PG{$pg}{status}=0;}\n    else                  \
-                                        {print \"*\
-------        $PG{$pg}{dname}: failed installation\
-\";$PG{$pg}{status}=0;}\n      }\n  }\n\nif ( !$PG\
-{$target}){print \"*------ SUMMARY mode Installati\
-on:\\n\";}\nforeach my $m (keys(%MODE))\n  {\n    \
-if ( $target eq \"all\" || $target eq $m)\n      {\
-\n     my $succesful=1;\n      foreach my $pg (keys(%PG))\n\
-         {\n       if (($PG{$pg}{mode}=~/$m/) && $PG{$pg}{\
-install} && $PG{$pg}{status}==0)\n           {\n               $suc\
-cesful=0;\n            print \"*!!!!!!       $PG{$pg}{dname}\
-: Missing\\n\";\n            }\n         }\n   if ( $succesful)\
-\n       {\n       $MODE{$m}{status}=1;\n          print \"*-\
------       MODE $MODE{$m}{dname} SUCCESFULY insta\
-lled\\n\";\n     }\n   else\n    {\n       $MODE{$m}{stat\
-us}=0;\n           print \"*!!!!!!       MODE $MODE{$m}{\
-dname} UNSUCCESFULY installed\\n\";\n    }\n      }\
-\n  }\n\nif ($clean==1 && ($BASE=~/install4tcoffee\
-/) ){print \"*------ Clean Installation Directory:\
- $BASE\\n\";`rm -rf $BASE`;}\nforeach my $pg (keys\
-(%PG)){if ($PG{$pg}{install} && $PG{$pg}{status}==\
-0){exit ($EXIT_FAILURE);}}\nexit ($EXIT_SUCCESS); \
- \n\nsub get_CXX_compiler\n  {\n    my $c=@_[0];\n\
-    my (@clist)=(\"g++\");\n    \n    return get_c\
-ompil ($c, @clist);\n }\nsub get_C_compiler\n  {\n\
-    my $c=@_[0];\n    my (@clist)=(\"gcc\", \"cc\"\
-, \"icc\");\n    \n    return get_compil ($c, @cli\
-st);\n }\n\nsub get_F_compiler\n  {\n    my ($c)=@\
-_[0];\n    my @clist=(\"f77\", \"g77\", \"gfortran\
-\", \"ifort\");\n    return get_compil ($c, @clist\
-);\n  } \n       \nsub get_compil\n  {\n    my ($f\
-av,@clist)=(@_);\n    \n    #return the first comp\
-iler found installed in the system. Check first th\
-e favorite\n    foreach my $c ($fav,@clist)\n     \
- {\n   if  (&pg_is_installed ($c)){return $c;}\n    \
-  }\n    return \"\";\n  }\nsub exit_if_pg_not_ins\
-talled\n  {\n    my (@arg)=(@_);\n    \n    foreac\
-h my $p (@arg)\n      {\n      if ( !&pg_is_installed (\
-$p))\n   {\n       print \"!!!!!!!! The $p utility m\
-ust be installed for this installation to proceed \
-[FATAL]\\n\";\n            die;\n        }\n      }\n    retur\
-n 1;\n  }\nsub set_proxy\n  {\n    my ($proxy)=(@_\
-);\n    my (@list,$p);\n    \n    @list= (\"HTTP_p\
-roxy\", \"http_proxy\", \"HTTP_PROXY\", \"ALL_prox\
-y\", \"all_proxy\",\"HTTP_proxy_4_TCOFFEE\",\"http\
-_proxy_4_TCOFFEE\");\n    \n    if (!$proxy)\n    \
-  {\n  foreach my $p (@list)\n   {\n       if ( ($ENV\
-_SET{$p}) || $ENV{$p}){$proxy=$ENV{$p};}\n       }\n  \
-    }\n    foreach my $p(@list){$ENV{$p}=$proxy;}\\
-n  }\n \nsub check_internet_connection\n  {\n    m\
-y $internet;\n    \n    if ( -e \"x\"){unlink (\"x\
-\");}\n    if     (&pg_is_installed    (\"wget\"))\
-{`wget www.google.com -Ox >/dev/null 2>/dev/null`;\
-}\n    elsif  (&pg_is_installed    (\"curl\")){`cu\
-rl www.google.com -ox >/dev/null 2>/dev/null`;}\n \
-   else\n      {\n     printf stderr \"\\nERROR: No pg\
- for remote file fetching [wget or curl][FATAL]\\n\
-\";\n  exit ($EXIT_FAILURE);\n      }\n    \n    if\
- ( !-e \"x\" || -s \"x\" < 10){$internet=0;}\n    \
-else {$internet=1;}\n    if (-e \"x\"){unlink \"x\\
-";}\n    return $internet;\n  }\nsub url2file\n  {\
-\n    my ($cmd, $file,$wget_arg, $curl_arg)=(@_);\\
-n    my ($exit,$flag, $pg, $arg);\n    \n    if ($\
-INTERNET || check_internet_connection ()){$INTERNE\
-T=1;}\n    else\n      {\n     print STDERR \"ERROR: N\
-o Internet Connection [FATAL:install.pl]\\n\";\n       e\
-xit ($EXIT_FAILURE);\n      }\n    \n    if     (&\
-pg_is_installed    (\"wget\")){$pg=\"wget\"; $flag\
-=\"-O\";$arg=$wget_arg;}\n    elsif  (&pg_is_insta\
-lled    (\"curl\")){$pg=\"curl\"; $flag=\"-o\";$ar\
-g=$curl_arg;}\n    else\n      {\n     printf stderr \\
-"\\nERROR: No pg for remote file fetching [wget or\
- curl][FATAL]\\n\";\n  exit ($EXIT_FAILURE);\n     \
- }\n    \n    \n    if (-e $file){unlink($file);}\\
-n    $exit=system \"$pg $cmd $flag$file $arg\";\n \
-   return $exit;\n  }\n\nsub pg_is_installed\n  {\\
-n    my ($p, $dir)=(@_);\n    my ($r,$m);\n    my \
-($supported, $language, $compil);\n    \n    if ( \
-$PG{$p})\n      {\n    $language=$PG{$p}{language2};\\
-n      $compil=$PG{$language}{compiler};\n      }\n    \
-\n    if ( $compil eq \"CPAN\")\n      {\n     if ( sy\
-stem (\"perl -M$p -e 1\")==$EXIT_SUCCESS){return 1\
-;}\n   else {return 0;}\n      }\n    elsif ($dir)\n\
-      {\n      if (-e \"$dir/$p\" || -e \"$dir/$p\\.exe\
-\"){return 1;}\n       else {return 0;}\n      }\n    el\
-sif (-e \"$PLUGINS_DIR/$p\" || -e \"$PLUGINS_DIR/$\
-p.exe\"){return 1;}\n    else\n      {\n       $r=`which\
- $p 2>/dev/null`;\n    if ($r eq \"\"){return 0;}\n    e\
-lse {return 1;}\n      }\n    return 0;\n  }\nsub \
-install\n  {\n    my ($new_bin)=(@_);\n    my ($co\
-pied, $report);\n\n    \n    if (!$ROOT_INSTALL)\n\
-      {\n      \n      if (-e \"$BIN/t_coffee\"){`$CP $BIN/t\
-_coffee $INSTALL_DIR`};\n      `cp $BIN/* $PLUGINS_DIR`\
-;\n    $copied=1;\n      }\n    else\n      {\n        $copi\
-ed=&root_run (\"You must be root to finalize the i\
-nstallation\", \"$CP $BIN/* $INSTALL_DIR $SILENT\"\
-);\n      }\n    \n     \n  if ( !$copied)\n    {\\
-n      $report=\"*!!!!!! Installation unsuccesful.\
- The executables have been left in $BASE/bin\\n\";\
-\n    }\n  elsif ( $copied && $ROOT)\n    {\n     \
- $report=\"*------ Installation succesful. Your ex\
-ecutables have been copied in $new_bin and are on \
-your PATH\\n\";\n    }\n  elsif ( $copied && !$ROO\
-T)\n    {\n      $report= \"*!!!!!! T-Coffee and a\
-ssociated packages have been copied in: $new_bin\\\
-n\";\n      $report.=\"*!!!!!! This address is NOT\
- in your PATH sytem variable\\n\";\n      $report.\
-=\"*!!!!!! You can do so by adding the following l\
-ine in your ~/.bashrc file:\\n\";\n      $report.=\
-\"*!!!!!! export PATH=$new_bin:\\$PATH\\n\";\n    \
-}\n  return $report;\n}\n\nsub sign_license_ni\n  \
-{\n    my $F=new FileHandle;\n    open ($F, \"lice\
-nse.txt\");\n    while (<$F>)\n      {\n       print \"$\
-_\";\n      }\n    close ($F);\n    \n    return;\\
-n  }\n\nsub install_pg\n  {\n    my ($pg)=(@_);\n \
-   my ($report, $previous, $language, $compiler, $\
-return);\n    \n    if (!$PG{$pg}{install}){return\
- 1;}\n    \n    $previous=&pg_is_installed ($pg);\\
-n    \n    if ($PG{$pg}{update_action} eq \"no_upd\
-ate\" && $previous)\n      {\n $PG{$pg}{old}=1;\n      \
-$PG{$pg}{new}=0;\n     $return=1;\n      }\n    else\n\
-      {\n      $PG{$pg}{old}=$previous;\n      \n      if ($PG{$p\
-g} {language2} eq \"Perl\"){&install_perl_package \
-($pg);}\n      elsif ($BINARIES_ONLY && &install_binary\
-_package ($pg)){$PG{$pg}{from_binary}=1;}\n    elsif \
-(&install_source_package ($pg)){;}\n   else \n   {\n\
-           \n      if (!&supported_os($OS))\n        {\n               \
-print \"!!!!!!!! $pg compilation failed, binary un\
-supported for $OS\\n\"; \n           }\n           elsif (!(\
-$PG{$pg}{from_binary}=&install_binary_package ($pg\
-)))\n        {\n               print \"!!!!!!!! $pg compilation \
-and  binary installation failed\\n\";\n              }\n       \
-  }\n  $PG{$pg}{new}=$return=&pg_is_installed ($pg,\
-$BIN);\n      }\n\n    \n    return $return;\n  }\\
-nsub install_perl_package\n  {\n    my ($pg)=(@_);\
-\n    my ($report, $language, $compiler);\n    \n \
-   $language=$PG{$pg} {language2};\n    $compiler=\
-$PG{$language}{compiler};\n    \n    if (!&pg_is_i\
-nstalled ($pg))\n      {\n     if ( $OS eq \"windows\"\
-){`perl -M$compiler -e 'install $pg'`;}\n      elsif ( \
-$ROOT eq \"sudo\"){system (\"sudo perl -M$compiler\
- -e 'install $pg'\");}\n       else {system (\"su root -\
-c perl -M$compiler -e 'install $pg'\");}\n      }\\
-n    return &pg_is_installed ($pg);\n  }\n\n\n\nsu\
-b install_source_package\n  {\n    my ($pg)=(@_);\\
-n    my ($report, $download, $arguments, $language\
-, $address, $name, $ext, $main_dir, $distrib);\n  \
-  my $wget_tmp=\"$TMP/wget.tmp\";\n    my (@fl);\n\
-    if ( -e \"$BIN/$pg\" || -e \"$BIN/$pg.exe\"){r\
-eturn 1;}\n    \n    if ($pg eq \"t_coffee\")  {re\
-turn   &install_t_coffee ($pg);}\n    elsif ($pg e\
-q \"TMalign\"){return   &install_TMalign ($pg);}\n\
-    \n    chdir $DISTRIBUTIONS;\n    \n    $downlo\
-ad=$PG{$pg}{source};\n    \n    if (($download =~/\
-tgz/))\n      {\n      ($address,$name,$ext)=($download\
-=~/(.+\\/)([^\\/]+)(\\.tgz)/);\n      }\n    elsif\
- (($download=~/tar\\.gz/))\n      {\n  ($address,$n\
-ame,$ext)=($download=~/(.+\\/)([^\\/]+)(\\.tar\\.g\
-z)/);\n      }\n    elsif (($download=~/tar/))\n  \
-    {\n        ($address,$name,$ext)=($download=~/(.+\\/)\
-([^\\/]+)(\\.tar)/);\n      }\n    else\n      {\n\
-       ($address,$name)=($download=~/(.+\\/)([^\\/]+)/);\
-\n     $ext=\"\";\n      }\n    $distrib=\"$name$ext\"\
-;\n    \n    if ( !-d $pg){mkdir $pg;}\n    chdir \
-$pg;\n   \n    #get the distribution if available\\
-n    if ( -e \"$DOWNLOAD_DIR/$distrib\")\n      {\\
-n      `$CP $DOWNLOAD_DIR/$distrib .`;\n      }\n    #U\
-NTAR and Prepare everything\n    if (!-e \"$name.t\
-ar\" && !-e \"$name\")\n      {\n      &check_rm ($wget\
-_tmp);\n       print \"\\n------- Downloading/Installing\
- $pg\\n\";\n   if (!-e $distrib && &url2file (\"$dow\
-nload\", \"$wget_tmp\")==$EXIT_SUCCESS)\n        {\n     \
-  \n       `mv $wget_tmp $distrib`;\n      `$CP $dist\
-rib $DOWNLOAD_DIR/`;\n   }\n\n if (!-e $distrib)\n\
-         {\n       print \"!!!!!!! Download of $pg distrib\
-ution failed\\n\";\n       print \"!!!!!!! Check Add\
-ress: $PG{$pg}{source}\\n\";\n     return 0;\n   }\
-\n     print \"\\n------- unzipping/untaring $name\\n\\
-";\n   if (($ext =~/z/))\n       { \n      &flush_command\
- (\"gunzip $name$ext\");\n         \n    }\n   if (($ext \
-=~/tar/) || ($ext =~/tgz/))\n    {\n       &flush_com\
-mand(\"tar -xvf $name.tar\");\n          }\n      }\n    \
-#Guess and enter the distribution directory\n    @\
-fl=ls($p);\n    foreach my $f (@fl)\n      {\n if \
-(-d $f)\n        {\n       $main_dir=$f;\n       }\n      }\n\
-    if (-d $main_dir)\n          {chdir $main_dir;}\n    \
-\n    print \"\\n------- Compiling/Installing $pg\\
-\n\";\n    `make clean $SILENT`;\n    #sap\n    if\
- ($pg eq \"sap\")\n      {\n   `rm *.o sap  sap.exe \
-./util/aa/*.o  ./util/wt/.o $SILENT`;\n        &flush_com\
-mand (\"make $arguments sap\");\n      &check_cp ($pg, \
-\"$BIN\");\n      }\n    elsif ($pg eq \"clustalw2\
-\")\n      {\n &flush_command(\"./configure\");\n      \
-&flush_command(\"make $arguments\");\n &check_cp (\
-\"./src/$pg\", \"$BIN\");\n    \n      }\n    elsif (\
-$pg eq \"clustalw\")\n      {\n        &flush_command(\"m\
-ake $arguments clustalw\");\n  `$CP $pg $BIN $SILEN\
-T`;\n      }\n    \n    elsif ($pg eq \"mafft\")\n\
-      {\n      my $base=cwd();\n       my $c;\n        \n      #compile c\
-ore\n  mkpath (\"./mafft/bin\");\n     mkpath (\"./maff\
-t/lib\");\n    chdir \"$base/core\";\n `make clean $S\
-ILENT`;\n      &flush_command (\"make $arguments\");\n \
-&flush_command (\"make install LIBDIR=../mafft/lib\
- BINDIR=../mafft/bin\");\n     \n      #compile extension\n\
-       chdir \"$base/extensions\";\n   `make clean $SILENT\
-`;\n   &flush_command (\"make $arguments\");\n &flus\
-h_command (\"make install LIBDIR=../mafft/lib BIND\
-IR=../mafft/bin\");\n  \n      #put everything in mafft \
-and copy the coompiled stuff in bin\n  chdir \"$bas\
-e\";\n if ($ROOT_INSTALL)\n      {\n       &root_run (\\
-"You Must be Roor to Install MAFFT\\n\", \"mkdir /\
-usr/local/mafft/;$CP mafft/lib/* /usr/local/mafft;\
-$CP mafft/lib/mafft* /usr/local/bin ;$CP mafft/bin\
-/mafft /usr/local/bin/; \");\n   }\n   else\n    {\n   \
-    `$CP mafft/lib/*  $BIN`;\n     `$CP mafft/bin/\
-mafft  $BIN`;\n          }\n   `tar -cvf mafft.tar mafft`;\\
-n      `gzip mafft.tar`;\n     `mv mafft.tar.gz $BIN`;\n   \
-   }\n    elsif ( $pg eq \"dialign-tx\")\n      {\\
-n      my $f;\n        my $base=cwd();\n\n     chdir \"./source\";\
-\n     &flush_command (\" make CPPFLAGS='-O3 -funroll-\
-loops' all\");\n       \n      chdir \"..\";\n &check_cp (\".\
-/source/$pg\", \"$BIN\");\n    &check_cp (\"./source/\
-$pg\", \"$BIN/dialign-t\");\n      }\n    elsif ($\
-pg eq \"poa\")\n      {\n      &flush_command (\"make $\
-arguments poa\");\n    &check_cp (\"$pg\", \"$BIN\");\
-\n      }\n    elsif ( $pg eq \"probcons\")\n     \
- {\n   `rm *.exe $SILENT`;\n   &flush_command (\"make \
-$arguments probcons\");\n      &check_cp(\"$pg\", \"$BI\
-N/$pg\");\n      }\n    elsif ( $pg eq \"probcons\\
-" || $pg eq \"probconsRNA\")\n      {\n        `rm *.exe \
-$SILENT`;\n    &flush_command (\"make $arguments prob\
-cons\");\n     &check_cp(\"probcons\", \"$BIN/$pg\");\\
-n      }\n\n    elsif (  $pg eq \"muscle\")\n     \
- {\n   `rm *.o muscle muscle.exe $SILENT`;\n   &flush_\
-command (\"make $arguments all\");\n   &check_cp(\"$\
-pg\", \"$BIN\");\n      }\n    elsif ( $pg eq \"pc\
-ma\")\n      {\n       &flush_command (\"make $arguments\
- pcma\");\n    &check_cp(\"$pg\", \"$BIN\");\n      }\
-\n    elsif ($pg eq \"kalign\")\n      {\n     &flush_\
-command (\"./configure\");\n   &flush_command(\"make\
- $arguments\");\n      &check_cp (\"$pg\",$BIN);\n     \
- }\n    elsif ( $pg eq \"amap\")\n      {\n    chdir \
-\"align\";\n   `make clean $SILENT`;\n &flush_comman\
-d (\"make $arguments all\");\n &check_cp (\"$pg\",\
- $BIN);\n      }\n    elsif ( $pg eq \"proda\")\n \
-     {\n       &flush_command (\"make $arguments all\");\
-\n     &check_cp (\"$pg\", $BIN);\n      }\n    elsif \
-( $pg eq \"prank\")\n      {\n &flush_command (\"m\
-ake $arguments all\");\n       &check_cp (\"$pg\", $BIN)\
-;\n      }\n    elsif ( $pg eq \"mustang\")\n     \
- {\n   &flush_command (\"make $arguments all\");\n     i\
-f ( $OS=~/windows/){&check_cp(\"./bin/MUSTANG_v.3\\
-", \"$BIN/mustang.exe\");}\n   else {&check_cp(\"./b\
-in/MUSTANG_v.3\", \"$BIN/mustang\");}\n      }\n  \
-  elsif ( $pg eq \"RNAplfold\")\n      {\n     &flush_\
-command(\"./configure\");\n    &flush_command (\"make\
- $arguments all\");\n  &check_cp(\"./Progs/RNAplfol\
-d\", \"$BIN\");\n      }\n    chdir $CDIR;\n    re\
-turn &pg_is_installed ($pg, $BIN);\n  }\n\nsub ins\
-tall_t_coffee\n  {\n    my ($pg)=(@_);\n    my ($r\
-eport,$cflags, $arguments, $language, $compiler) ;\
-\n    #1-Install T-Coffee\n    chdir \"t_coffee_so\
-urce\";\n    &flush_command (\"make clean\");\n   \
- print \"\\n------- Compiling T-Coffee\\n\";\n    \
-$language=$PG{$pg} {language2};\n    $arguments=$P\
-G{$language}{arguments};\n    if (!($arguments =~/\
-CFLAGS/)){$arguments .= \" CFLAGS=-O2 \";}\n\n    \
-if ( $CC ne \"\"){&flush_command (\"make -i $argum\
-ents t_coffee\");}\n    &check_cp ($pg, $BIN);\n  \
-  \n    chdir $CDIR;\n    return &pg_is_installed \
-($pg, $BIN);\n  }\nsub install_TMalign\n  {\n    m\
-y ($pg)=(@_);\n    my $report;\n    chdir \"t_coff\
-ee_source\";\n    print \"\\n------- Compiling TMa\
-lign\\n\";\n    `rm TMalign TMalign.exe $SILENT`;\\
-n    if ( $FC ne \"\"){&flush_command (\"make -i $\
-PG{Fortran}{arguments} TMalign\");}\n    &check_cp\
- ($pg, $BIN);\n    if ( !-e \"$BIN/$pg\" && pg_has\
-_binary_distrib ($pg))\n      {\n      print \"!!!!!!! \
-Compilation of $pg impossible. Will try to install\
- from binary\\n\";\n   return &install_binary_packag\
-e ($pg);\n      }\n    chdir $CDIR;\n    return &p\
-g_is_installed ($pg, $BIN);\n  }\n\nsub pg_has_bin\
-ary_distrib\n  {\n    my ($pg)=(@_);\n    if ($PG{\
-$pg}{windows}){return 1;}\n    elsif ($PG{$pg}{osx\
-}){return 1;}\n    elsif ($PG{$pg}{linux}){return \
-1;}\n    return 0;\n  }\nsub install_binary_packag\
-e\n  {\n    my ($pg)=(@_);\n    my ($base,$report,\
-$name, $download, $arguments, $language, $dir);\n \
-   my $isdir;\n    &input_os();\n    \n    if (!&s\
-upported_os($OS)){return 0;}\n    if ( $PG{$pg}{bi\
-nary}){$name=$PG{$pg}{binary};}\n    else \n      \
-{\n    $name=$pg;\n    if ( $OS eq \"windows\"){$name.=\\
-".exe\";}\n      }\n    \n    $download=\"$WEB_BAS\
-E/Packages/Binaries/$OS/$name\";\n    \n    $base=\
-cwd();\n    chdir $TMP;\n    \n    if (!-e $name)\\
-n      {\n     `rm x $SILENT`;\n       if ( url2file(\"$down\
-load\",\"x\")==$EXIT_SUCCESS)\n          {\n       `mv x $n\
-ame`;\n          }\n      }\n    \n    if (!-e $name)\n  \
-    {\n        print \"!!!!!!! $PG{$pg}{dname}: Download \
-of $pg binary failed\\n\";\n   print \"!!!!!!! $PG{$\
-pg}{dname}: Check Address: $download\\n\";\n   retur\
-n 0;\n      }\n    print \"\\n------- Installing $\
-pg\\n\";\n    \n    if ($name =~/tar\\.gz/)\n     \
- {\n   `gunzip  $name`;\n      `tar -xvf $pg.tar`;\n   chdi\
-r $pg;\n       if ( $pg eq \"mafft\")\n          {\n       if ($R\
-OOT_INSTALL)\n       {\n               &root_run (\"You Must be\
- Roor to Install MAFFT\\n\", \"$CP mafft/bin/* /us\
-r/local/mafft;mkdir /usr/local/mafft/; $CP mafft/l\
-ib/* /usr/local/bin/\");\n           }\n           else\n        \
-    {\n                `$CP $TMP/$pg/bin/* $BIN $SILENT`;\n            `$C\
-P $TMP/$pg/lib/* $BIN $SILENT`;\n            }\n         }\n   \
-else\n   {\n       if (-e \"$TMP/$pg/data\"){`$CP $T\
-MP/$pg/data/* $TCM $SILENT`;}\n            if (!($pg=~/\\\
-*/)){`rm -rf $pg`;}\n    }\n      }\n    else\n    \
-  {\n  &check_cp (\"$pg\", \"$BIN\");\n        `chmod u+x \
-$BIN/$pg`; \n  unlink ($pg);\n      }\n    chdir $b\
-ase;\n    $PG{$pg}{from_binary}=1;\n    return &pg\
-_is_installed ($pg, $BIN);\n  }\n\nsub add_dir \n \
- {\n    my $dir=@_[0];\n    \n    if (!-e $dir && \
-!-d $dir)\n      {\n   return mkpath ($dir);\n      \
-}\n    else\n      {\n return 0;\n      }\n  }\nsu\
-b check_rm \n  {\n    my ($file)=(@_);\n    \n    \
-if ( -e $file)\n      {\n      return unlink($file);\n \
-     }\n    return 0;\n  }\nsub check_cp\n  {\n   \
- my ($from, $to)=(@_);\n    if ( !-e $from && -e \\
-"$from\\.exe\"){$from=\"$from\\.exe\";}\n    if ( \
-!-e $from){return 0;}\n        \n    `$CP $from $t\
-o`;\n    return 1;\n  }\nsub check_file_list_exist\
-s \n  {\n    my ($base, @flist)=(@_);\n    my $f;\\
-n\n    foreach $f (@flist)\n      {\n  if ( !-e \"$\
-base/$f\"){return 0;}\n      }\n    return 1;\n  }\
-\nsub ls\n  {\n    my $f=@_[0];\n    my @fl;\n    \
-chomp(@fl=`ls -1 $f`);\n    return @fl;\n  }\nsub \
-flush_command\n  {\n    my $command=@_[0];\n    my\
- $F=new FileHandle;\n    open ($F, \"$command|\");\
-\n    while (<$F>){print \"    --- $_\";}\n    clo\
-se ($F);\n  }    \n\nsub input_installation_direct\
-ory\n  {\n    my $dir=@_[0];\n    my $new;\n    \n\
-    print \"------- The current installation direc\
-tory is: [$dir]\\n\";\n    print \"??????? Return \
-to keep the default or new value:\";\n   \n    if \
-($NO_QUESTION==0)\n      {\n   chomp ($new=<stdin>);\
-\n     while ( $new ne \"\" && !input_yes (\"You have \
-entered $new. Is this correct? ([y]/n):\"))\n    {\\
-n          print \"???????New installation directory:\"\
-;\n        chomp ($new=<stdin>);\n       }\n   $dir=($new e\
-q \"\")?$dir:$new;\n   $dir=~s/\\/$//;\n      }\n   \
- \n    if ( -d $dir){return $dir;}\n    elsif (&ro\
-ot_run (\"You must be root to create $dir\",\"mkdi\
-r $dir\")==$EXIT_SUCCESS){return $dir;}\n    else\\
-n      {\n     print \"!!!!!!! $dir could not be creat\
-ed\\n\";\n     if ( $NO_QUESTION)\n      {\n       return \\
-"\";\n   }\n   elsif ( &input_yes (\"??????? Do you \
-want to provide a new directory([y]/n)?:\"))\n   {\
-\n         return input_installation_directory ($dir);\
-\n       }\n   else\n    {\n       return \"\";\n        }\n    \
-  }\n    \n  }\nsub input_yes\n  {\n    my $questi\
-on =@_[0];\n    my $answer;\n\n    if ($NO_QUESTIO\
-N==1){return 1;}\n    \n    if ($question eq \"\")\
-{$question=\"??????? Do you wish to proceed ([y]/n\
-)?:\";}\n    print $question;\n    chomp($answer=l\
-c(<STDIN>));\n    if (($answer=~/^y/) || $answer e\
-q \"\"){return 1;}\n    elsif ( ($answer=~/^n/)){r\
-eturn 0;}\n    else\n      {\n return input_yes($q\
-uestion);\n      }\n  }\nsub root_run\n  {\n    my\
- ($txt, $cmd)=(@_);\n    \n    if ( system ($cmd)=\
-=$EXIT_SUCCESS){return $EXIT_SUCCESS;}\n    else \\
-n      {\n     print \"------- $txt\\n\";\n    if ( $ROOT\
- eq \"sudo\"){return system (\"sudo $cmd\");}\n        el\
-se {return system (\"su root -c \\\"$cmd\\\"\");}\\
-n      }\n  }\nsub get_root\n  {\n    if (&pg_is_i\
-nstalled (\"sudo\")){return \"sudo\";}\n    else {\
-return \"su\";}\n  }\n\nsub get_os\n  {\n    my $r\
-aw_os=`uname`;\n    my $os;\n\n    $raw_os=lc ($ra\
-w_os);\n    \n    if ($raw_os =~/cygwin/){$os=\"wi\
-ndows\";}\n    elsif ($raw_os =~/linux/){$os=\"lin\
-ux\";}\n    elsif ($raw_os =~/osx/){$os=\"macosx\"\
-;}\n    elsif ($raw_os =~/darwin/){$os=\"macosx\";\
-}\n    else\n      {\n $os=$raw_os;\n      }\n    \
-return $os;\n  }\nsub input_os\n  {\n    my $answe\
-r;\n    if ($OS) {return $OS;}\n    \n    print \"\
-??????? which os do you use: [w]indows, [l]inux, [\
-m]acosx:?\";\n    $answer=lc(<STDIN>);\n\n    if (\
-($answer=~/^m/)){$OS=\"macosx\";}\n    elsif ( ($a\
-nswer=~/^w/)){$OS=\"windows\";}\n    elsif ( ($ans\
-wer=~/^linux/)){$OS=\"linux\";}\n    \n    else\n \
-     {\n       return &input_os();\n      }\n    return \
-$OS;\n  }\n\nsub supported_os\n  {\n    my ($os)=(\
-@_[0]);\n    return $SUPPORTED_OS{$os};\n  }\n    \
-\n    \n\n\nsub update_tclinkdb \n  {\n    my $fil\
-e =@_[0];\n    my $name;\n    my $F=new FileHandle\
-;\n    my ($download, $address, $name, $l, $db);\n\
-    \n    if ( $file eq \"update\"){$file=$TCLINKD\
-B_ADDRESS;}\n    \n    if ( $file =~/http:\\/\\// \
-|| $file =~/ftp:\\/\\//)\n      {\n    ($address, $na\
-me)=($download=~/(.*)\\/([^\\/]+)$/);\n        `rm x $SIL\
-ENT`;\n        if (&url2file ($file,\"x\")==$EXIT_SUCCESS\
-)\n      {\n       print \"------- Susscessful upload o\
-f $name\";\n       `mv x $name`;\n         $file=$name;\\
-n        }\n      }\n    open ($F, \"$file\");\n    whi\
-le (<$F>)\n      {\n   my $l=$_;\n     if (($l =~/^\\/\\\
-//) || ($db=~/^#/)){;}\n       elsif ( !($l =~/\\w/)){;}\
-\n     else\n    {\n       my @v=split (/\\s+/, $l);\n   \
-  if ( $l=~/^MODE/)\n        {\n               $MODE{$v[1]}{$v[2\
-]}=$v[3];\n          }\n           elsif ($l=~/^PG/)\n     \
-  {\n          $PG{$v[1]}{$v[2]}=$v[3];\n            }\n         }\n \
-     }\n    close ($F);\n    &post_process_PG();\n\
-    return;\n  }\n\n\n\nsub initialize_PG\n  {\n  \
-  \n$PG{\"t_coffee\"}{\"4_TCOFFEE\"}=\"TCOFFEE\";\\
-n$PG{\"t_coffee\"}{\"type\"}=\"sequence_multiple_a\
-ligner\";\n$PG{\"t_coffee\"}{\"ADDRESS\"}=\"http:/\
-/www.tcoffee.org\";\n$PG{\"t_coffee\"}{\"language\\
-"}=\"C\";\n$PG{\"t_coffee\"}{\"language2\"}=\"C\";\
-\n$PG{\"t_coffee\"}{\"source\"}=\"http://www.tcoff\
-ee.org/Packages/T-COFFEE_distribution.tar.gz\";\n$\
-PG{\"t_coffee\"}{\"update_action\"}=\"always\";\n$\
-PG{\"t_coffee\"}{\"mode\"}=\"tcoffee,mcoffee,rcoff\
-ee,expresso,3dcoffee\";\n$PG{\"clustalw2\"}{\"4_TC\
-OFFEE\"}=\"CLUSTALW2\";\n$PG{\"clustalw2\"}{\"type\
-\"}=\"sequence_multiple_aligner\";\n$PG{\"clustalw\
-2\"}{\"ADDRESS\"}=\"http://www.clustal.org\";\n$PG\
-{\"clustalw2\"}{\"language\"}=\"C++\";\n$PG{\"clus\
-talw2\"}{\"language2\"}=\"CXX\";\n$PG{\"clustalw2\\
-"}{\"source\"}=\"http://www.clustal.org/download/2\
-.0.10/clustalw-2.0.10-src.tar.gz\";\n$PG{\"clustal\
-w2\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG{\"clusta\
-lw\"}{\"4_TCOFFEE\"}=\"CLUSTALW\";\n$PG{\"clustalw\
-\"}{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\
-\"clustalw\"}{\"ADDRESS\"}=\"http://www.clustal.or\
-g\";\n$PG{\"clustalw\"}{\"language\"}=\"C\";\n$PG{\
-\"clustalw\"}{\"language2\"}=\"C\";\n$PG{\"clustal\
-w\"}{\"source\"}=\"http://www.clustal.org/download\
-/1.X/ftp-igbmc.u-strasbg.fr/pub/ClustalW/clustalw1\
-.82.UNIX.tar.gz\";\n$PG{\"clustalw\"}{\"mode\"}=\"\
-mcoffee,rcoffee\";\n$PG{\"dialign-t\"}{\"4_TCOFFEE\
-\"}=\"DIALIGNT\";\n$PG{\"dialign-t\"}{\"type\"}=\"\
-sequence_multiple_aligner\";\n$PG{\"dialign-t\"}{\\
-"ADDRESS\"}=\"http://dialign-tx.gobics.de/\";\n$PG\
-{\"dialign-t\"}{\"DIR\"}=\"/usr/share/dialign-tx/\\
-";\n$PG{\"dialign-t\"}{\"language\"}=\"C\";\n$PG{\\
-"dialign-t\"}{\"language2\"}=\"C\";\n$PG{\"dialign\
--t\"}{\"source\"}=\"http://dialign-tx.gobics.de/DI\
-ALIGN-TX_1.0.1.tar.gz\";\n$PG{\"dialign-t\"}{\"mod\
-e\"}=\"mcoffee\";\n$PG{\"dialign-t\"}{\"binary\"}=\
-\"dialign-t\";\n$PG{\"dialign-tx\"}{\"4_TCOFFEE\"}\
-=\"DIALIGNTX\";\n$PG{\"dialign-tx\"}{\"type\"}=\"s\
-equence_multiple_aligner\";\n$PG{\"dialign-tx\"}{\\
-"ADDRESS\"}=\"http://dialign-tx.gobics.de/\";\n$PG\
-{\"dialign-tx\"}{\"DIR\"}=\"/usr/share/dialign-tx/\
-\";\n$PG{\"dialign-tx\"}{\"language\"}=\"C\";\n$PG\
-{\"dialign-tx\"}{\"language2\"}=\"C\";\n$PG{\"dial\
-ign-tx\"}{\"source\"}=\"http://dialign-tx.gobics.d\
-e/DIALIGN-TX_1.0.1.tar.gz\";\n$PG{\"dialign-tx\"}{\
-\"mode\"}=\"mcoffee\";\n$PG{\"dialign-tx\"}{\"bina\
-ry\"}=\"dialign-tx\";\n$PG{\"poa\"}{\"4_TCOFFEE\"}\
-=\"POA\";\n$PG{\"poa\"}{\"type\"}=\"sequence_multi\
-ple_aligner\";\n$PG{\"poa\"}{\"ADDRESS\"}=\"http:/\
-/www.bioinformatics.ucla.edu/poa/\";\n$PG{\"poa\"}\
-{\"language\"}=\"C\";\n$PG{\"poa\"}{\"language2\"}\
-=\"C\";\n$PG{\"poa\"}{\"source\"}=\"http://downloa\
-ds.sourceforge.net/poamsa/poaV2.tar.gz\";\n$PG{\"p\
-oa\"}{\"DIR\"}=\"/usr/share/\";\n$PG{\"poa\"}{\"FI\
-LE1\"}=\"blosum80.mat\";\n$PG{\"poa\"}{\"mode\"}=\\
-"mcoffee\";\n$PG{\"poa\"}{\"binary\"}=\"poa\";\n$P\
-G{\"probcons\"}{\"4_TCOFFEE\"}=\"PROBCONS\";\n$PG{\
-\"probcons\"}{\"type\"}=\"sequence_multiple_aligne\
-r\";\n$PG{\"probcons\"}{\"ADDRESS\"}=\"http://prob\
-cons.stanford.edu/\";\n$PG{\"probcons\"}{\"languag\
-e2\"}=\"CXX\";\n$PG{\"probcons\"}{\"language\"}=\"\
-C++\";\n$PG{\"probcons\"}{\"source\"}=\"http://pro\
-bcons.stanford.edu/probcons_v1_12.tar.gz\";\n$PG{\\
-"probcons\"}{\"mode\"}=\"mcoffee\";\n$PG{\"probcon\
-s\"}{\"binary\"}=\"probcons\";\n$PG{\"mafft\"}{\"4\
-_TCOFFEE\"}=\"MAFFT\";\n$PG{\"mafft\"}{\"type\"}=\\
-"sequence_multiple_aligner\";\n$PG{\"mafft\"}{\"AD\
-DRESS\"}=\"http://align.bmr.kyushu-u.ac.jp/mafft/o\
-nline/server/\";\n$PG{\"mafft\"}{\"language\"}=\"C\
-\";\n$PG{\"mafft\"}{\"language\"}=\"C\";\n$PG{\"ma\
-fft\"}{\"source\"}=\"http://align.bmr.kyushu-u.ac.\
-jp/mafft/software/mafft-6.603-with-extensions-src.\
-tgz\";\n$PG{\"mafft\"}{\"windows\"}=\"http://align\
-.bmr.kyushu-u.ac.jp/mafft/software/mafft-6.603-min\
-gw.tar\";\n$PG{\"mafft\"}{\"mode\"}=\"mcoffee,rcof\
-fee\";\n$PG{\"mafft\"}{\"binary\"}=\"mafft.tar.gz\\
-";\n$PG{\"muscle\"}{\"4_TCOFFEE\"}=\"MUSCLE\";\n$P\
-G{\"muscle\"}{\"type\"}=\"sequence_multiple_aligne\
-r\";\n$PG{\"muscle\"}{\"ADDRESS\"}=\"http://www.dr\
-ive5.com/muscle/\";\n$PG{\"muscle\"}{\"language\"}\
-=\"C++\";\n$PG{\"muscle\"}{\"language2\"}=\"GPP\";\
-\n$PG{\"muscle\"}{\"source\"}=\"http://www.drive5.\
-com/muscle/downloads3.6/muscle3.6_src.tar.gz\";\n$\
-PG{\"muscle\"}{\"windows\"}=\"http://www.drive5.co\
-m/muscle/downloads3.6/muscle3.6_win32.zip\";\n$PG{\
-\"muscle\"}{\"linux\"}=\"http://www.drive5.com/mus\
-cle/downloads3.6/muscle3.6_linux_ia32.tar.gz\";\n$\
-PG{\"muscle\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG\
-{\"pcma\"}{\"4_TCOFFEE\"}=\"PCMA\";\n$PG{\"pcma\"}\
-{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\"p\
-cma\"}{\"ADDRESS\"}=\"ftp://iole.swmed.edu/pub/PCM\
-A/\";\n$PG{\"pcma\"}{\"language\"}=\"C\";\n$PG{\"p\
-cma\"}{\"language2\"}=\"C\";\n$PG{\"pcma\"}{\"sour\
-ce\"}=\"ftp://iole.swmed.edu/pub/PCMA/pcma.tar.gz\\
-";\n$PG{\"pcma\"}{\"mode\"}=\"mcoffee\";\n$PG{\"ka\
-lign\"}{\"4_TCOFFEE\"}=\"KALIGN\";\n$PG{\"kalign\"\
-}{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\"\
-kalign\"}{\"ADDRESS\"}=\"http://msa.cgb.ki.se\";\n\
-$PG{\"kalign\"}{\"language\"}=\"C\";\n$PG{\"kalign\
-\"}{\"language2\"}=\"C\";\n$PG{\"kalign\"}{\"sourc\
-e\"}=\"http://msa.cgb.ki.se/downloads/kalign/curre\
-nt.tar.gz\";\n$PG{\"kalign\"}{\"mode\"}=\"mcoffee\\
-";\n$PG{\"amap\"}{\"4_TCOFFEE\"}=\"AMAP\";\n$PG{\"\
-amap\"}{\"type\"}=\"sequence_multiple_aligner\";\n\
-$PG{\"amap\"}{\"ADDRESS\"}=\"http://bio.math.berke\
-ley.edu/amap/\";\n$PG{\"amap\"}{\"language\"}=\"C+\
-+\";\n$PG{\"amap\"}{\"language2\"}=\"CXX\";\n$PG{\\
-"amap\"}{\"source\"}=\"http://baboon.math.berkeley\
-.edu/amap/download/amap.2.2.tar.gz\";\n$PG{\"amap\\
-"}{\"mode\"}=\"mcoffee\";\n$PG{\"proda\"}{\"4_TCOF\
-FEE\"}=\"PRODA\";\n$PG{\"proda\"}{\"type\"}=\"sequ\
-ence_multiple_aligner\";\n$PG{\"proda\"}{\"ADDRESS\
-\"}=\"http://proda.stanford.edu\";\n$PG{\"proda\"}\
-{\"language\"}=\"C++\";\n$PG{\"proda\"}{\"language\
-2\"}=\"CXX\";\n$PG{\"proda\"}{\"source\"}=\"http:/\
-/proda.stanford.edu/proda_1_0.tar.gz\";\n$PG{\"pro\
-da\"}{\"mode\"}=\"mcoffee\";\n$PG{\"prank\"}{\"4_T\
-COFFEE\"}=\"PRANK\";\n$PG{\"prank\"}{\"type\"}=\"s\
-equence_multiple_aligner\";\n$PG{\"prank\"}{\"ADDR\
-ESS\"}=\"http://www.ebi.ac.uk/goldman-srv/prank/\"\
-;\n$PG{\"prank\"}{\"language\"}=\"C++\";\n$PG{\"pr\
-ank\"}{\"language2\"}=\"CXX\";\n$PG{\"prank\"}{\"s\
-ource\"}=\"http://www.ebi.ac.uk/goldman-srv/prank/\
-src/old/prank.src.081202.tgz\";\n$PG{\"prank\"}{\"\
-mode\"}=\"mcoffee\";\n$PG{\"sap\"}{\"4_TCOFFEE\"}=\
-\"SAP\";\n$PG{\"sap\"}{\"type\"}=\"structure_pairw\
-ise_aligner\";\n$PG{\"sap\"}{\"ADDRESS\"}=\"http:/\
-/mathbio.nimr.mrc.ac.uk/wiki/Software\";\n$PG{\"sa\
-p\"}{\"language\"}=\"C\";\n$PG{\"sap\"}{\"language\
-2\"}=\"C\";\n$PG{\"sap\"}{\"source\"}=\"http://www\
-.tcoffee.org/Packages/sap_distribution_TCC_0.6.tar\
-.gz\";\n$PG{\"sap\"}{\"mode\"}=\"expresso,3dcoffee\
-\";\n$PG{\"TMalign\"}{\"4_TCOFFEE\"}=\"TMALIGN\";\\
-n$PG{\"TMalign\"}{\"type\"}=\"structure_pairwise_a\
-ligner\";\n$PG{\"TMalign\"}{\"ADDRESS\"}=\"http://\
-zhang.bioinformatics.ku.edu/TM-align/TMalign.f\";\\
-n$PG{\"TMalign\"}{\"language\"}=\"Fortran\";\n$PG{\
-\"TMalign\"}{\"language2\"}=\"Fortran\";\n$PG{\"TM\
-align\"}{\"source\"}=\"http://zhang.bioinformatics\
-.ku.edu/TM-align/TMalign.f\";\n$PG{\"TMalign\"}{\"\
-linux\"}=\"http://zhang.bioinformatics.ku.edu/TM-a\
-lign/TMalign_32.gz\";\n$PG{\"TMalign\"}{\"mode\"}=\
-\"expresso,3dcoffee\";\n$PG{\"mustang\"}{\"4_TCOFF\
-EE\"}=\"MUSTANG\";\n$PG{\"mustang\"}{\"type\"}=\"s\
-tructure_pairwise_aligner\";\n$PG{\"mustang\"}{\"A\
-DDRESS\"}=\"http://www.cs.mu.oz.au/~arun/mustang\"\
-;\n$PG{\"mustang\"}{\"language\"}=\"C++\";\n$PG{\"\
-mustang\"}{\"language2\"}=\"CXX\";\n$PG{\"mustang\\
-"}{\"source\"}=\"http://www.cs.mu.oz.au/~arun/must\
-ang/mustang_v.3.tgz\";\n$PG{\"mustang\"}{\"mode\"}\
-=\"expresso,3dcoffee\";\n$PG{\"lsqman\"}{\"4_TCOFF\
-EE\"}=\"LSQMAN\";\n$PG{\"lsqman\"}{\"type\"}=\"str\
-ucture_pairwise_aligner\";\n$PG{\"lsqman\"}{\"ADDR\
-ESS\"}=\"empty\";\n$PG{\"lsqman\"}{\"language\"}=\\
-"empty\";\n$PG{\"lsqman\"}{\"language2\"}=\"empty\\
-";\n$PG{\"lsqman\"}{\"source\"}=\"empty\";\n$PG{\"\
-lsqman\"}{\"update_action\"}=\"never\";\n$PG{\"lsq\
-man\"}{\"mode\"}=\"expresso,3dcoffee\";\n$PG{\"ali\
-gn_pdb\"}{\"4_TCOFFEE\"}=\"ALIGN_PDB\";\n$PG{\"ali\
-gn_pdb\"}{\"type\"}=\"structure_pairwise_aligner\"\
-;\n$PG{\"align_pdb\"}{\"ADDRESS\"}=\"empty\";\n$PG\
-{\"align_pdb\"}{\"language\"}=\"empty\";\n$PG{\"al\
-ign_pdb\"}{\"language2\"}=\"empty\";\n$PG{\"align_\
-pdb\"}{\"source\"}=\"empty\";\n$PG{\"align_pdb\"}{\
-\"update_action\"}=\"never\";\n$PG{\"align_pdb\"}{\
-\"mode\"}=\"expresso,3dcoffee\";\n$PG{\"fugueali\"\
-}{\"4_TCOFFEE\"}=\"FUGUE\";\n$PG{\"fugueali\"}{\"t\
-ype\"}=\"structure_pairwise_aligner\";\n$PG{\"fugu\
-eali\"}{\"ADDRESS\"}=\"http://www-cryst.bioc.cam.a\
-c.uk/fugue/download.html\";\n$PG{\"fugueali\"}{\"l\
-anguage\"}=\"empty\";\n$PG{\"fugueali\"}{\"languag\
-e2\"}=\"empty\";\n$PG{\"fugueali\"}{\"source\"}=\"\
-empty\";\n$PG{\"fugueali\"}{\"update_action\"}=\"n\
-ever\";\n$PG{\"fugueali\"}{\"mode\"}=\"expresso,3d\
-coffee\";\n$PG{\"dalilite.pl\"}{\"4_TCOFFEE\"}=\"D\
-ALILITEc\";\n$PG{\"dalilite.pl\"}{\"type\"}=\"stru\
-cture_pairwise_aligner\";\n$PG{\"dalilite.pl\"}{\"\
-ADDRESS\"}=\"built_in\";\n$PG{\"dalilite.pl\"}{\"A\
-DDRESS2\"}=\"http://www.ebi.ac.uk/Tools/webservice\
-s/services/dalilite\";\n$PG{\"dalilite.pl\"}{\"lan\
-guage\"}=\"Perl\";\n$PG{\"dalilite.pl\"}{\"languag\
-e2\"}=\"Perl\";\n$PG{\"dalilite.pl\"}{\"source\"}=\
-\"empty\";\n$PG{\"dalilite.pl\"}{\"update_action\"\
-}=\"never\";\n$PG{\"dalilite.pl\"}{\"mode\"}=\"exp\
-resso,3dcoffee\";\n$PG{\"probconsRNA\"}{\"4_TCOFFE\
-E\"}=\"PROBCONSRNA\";\n$PG{\"probconsRNA\"}{\"type\
-\"}=\"RNA_multiple_aligner\";\n$PG{\"probconsRNA\"\
-}{\"ADDRESS\"}=\"http://probcons.stanford.edu/\";\\
-n$PG{\"probconsRNA\"}{\"language\"}=\"C++\";\n$PG{\
-\"probconsRNA\"}{\"language2\"}=\"CXX\";\n$PG{\"pr\
-obconsRNA\"}{\"source\"}=\"http://probcons.stanfor\
-d.edu/probconsRNA.tar.gz\";\n$PG{\"probconsRNA\"}{\
-\"mode\"}=\"mcoffee,rcoffee\";\n$PG{\"sfold\"}{\"4\
-_TCOFFEE\"}=\"CONSAN\";\n$PG{\"sfold\"}{\"type\"}=\
-\"RNA_pairwise_aligner\";\n$PG{\"sfold\"}{\"ADDRES\
-S\"}=\"http://selab.janelia.org/software/consan/\"\
-;\n$PG{\"sfold\"}{\"language\"}=\"empty\";\n$PG{\"\
-sfold\"}{\"language2\"}=\"empty\";\n$PG{\"sfold\"}\
-{\"source\"}=\"empty\";\n$PG{\"sfold\"}{\"update_a\
-ction\"}=\"never\";\n$PG{\"sfold\"}{\"mode\"}=\"rc\
-offee\";\n$PG{\"RNAplfold\"}{\"4_TCOFFEE\"}=\"RNAP\
-LFOLD\";\n$PG{\"RNAplfold\"}{\"type\"}=\"RNA_secon\
-darystructure_predictor\";\n$PG{\"RNAplfold\"}{\"A\
-DDRESS\"}=\"http://www.tbi.univie.ac.at/~ivo/RNA/\\
-";\n$PG{\"RNAplfold\"}{\"language\"}=\"C\";\n$PG{\\
-"RNAplfold\"}{\"language2\"}=\"C\";\n$PG{\"RNAplfo\
-ld\"}{\"source\"}=\"http://www.tbi.univie.ac.at/~i\
-vo/RNA/ViennaRNA-1.7.2.tar.gz\";\n$PG{\"RNAplfold\\
-"}{\"mode\"}=\"rcoffee\";\n$PG{\"hmmtop\"}{\"4_TCO\
-FFEE\"}=\"HMMTOP\";\n$PG{\"hmmtop\"}{\"type\"}=\"p\
-rotein_secondarystructure_predictor\";\n$PG{\"hmmt\
-op\"}{\"ADDRESS\"}=\"www.enzim.hu/hmmtop/\";\n$PG{\
-\"hmmtop\"}{\"language\"}=\"C\";\n$PG{\"hmmtop\"}{\
-\"language2\"}=\"C\";\n$PG{\"hmmtop\"}{\"source\"}\
-=\"empty\";\n$PG{\"hmmtop\"}{\"update_action\"}=\"\
-never\";\n$PG{\"hmmtop\"}{\"mode\"}=\"tcoffee\";\n\
-$PG{\"gorIV\"}{\"4_TCOFFEE\"}=\"GOR4\";\n$PG{\"gor\
-IV\"}{\"type\"}=\"protein_secondarystructure_predi\
-ctor\";\n$PG{\"gorIV\"}{\"ADDRESS\"}=\"http://mig.\
-jouy.inra.fr/logiciels/gorIV/\";\n$PG{\"gorIV\"}{\\
-"language\"}=\"C\";\n$PG{\"gorIV\"}{\"language2\"}\
-=\"C\";\n$PG{\"gorIV\"}{\"source\"}=\"http://mig.j\
-ouy.inra.fr/logiciels/gorIV/GOR_IV.tar.gz\";\n$PG{\
-\"gorIV\"}{\"update_action\"}=\"never\";\n$PG{\"go\
-rIV\"}{\"mode\"}=\"tcoffee\";\n$PG{\"wublast.pl\"}\
-{\"4_TCOFFEE\"}=\"EBIWUBLASTc\";\n$PG{\"wublast.pl\
-\"}{\"type\"}=\"protein_homology_predictor\";\n$PG\
-{\"wublast.pl\"}{\"ADDRESS\"}=\"built_in\";\n$PG{\\
-"wublast.pl\"}{\"ADDRESS2\"}=\"http://www.ebi.ac.u\
-k/Tools/webservices/services/wublast\";\n$PG{\"wub\
-last.pl\"}{\"language\"}=\"Perl\";\n$PG{\"wublast.\
-pl\"}{\"language2\"}=\"Perl\";\n$PG{\"wublast.pl\"\
-}{\"source\"}=\"empty\";\n$PG{\"wublast.pl\"}{\"up\
-date_action\"}=\"never\";\n$PG{\"wublast.pl\"}{\"m\
-ode\"}=\"psicoffee,expresso,3dcoffee\";\n$PG{\"bla\
-stpgp.pl\"}{\"4_TCOFFEE\"}=\"EBIBLASTPGPc\";\n$PG{\
-\"blastpgp.pl\"}{\"type\"}=\"protein_homology_pred\
-ictor\";\n$PG{\"blastpgp.pl\"}{\"ADDRESS\"}=\"buil\
-t_in\";\n$PG{\"blastpgp.pl\"}{\"ADDRESS2\"}=\"http\
-://www.ebi.ac.uk/Tools/webservices/services/blastp\
-gp\";\n$PG{\"blastpgp.pl\"}{\"language\"}=\"Perl\"\
-;\n$PG{\"blastpgp.pl\"}{\"language2\"}=\"Perl\";\n\
-$PG{\"blastpgp.pl\"}{\"source\"}=\"empty\";\n$PG{\\
-"blastpgp.pl\"}{\"update_action\"}=\"never\";\n$PG\
-{\"blastpgp.pl\"}{\"mode\"}=\"psicoffee,expresso,3\
-dcoffee\";\n$PG{\"blastcl3\"}{\"4_TCOFFEE\"}=\"NCB\
-IWEBBLAST\";\n$PG{\"blastcl3\"}{\"type\"}=\"protei\
-n_homology_predictor\";\n$PG{\"blastcl3\"}{\"ADDRE\
-SS\"}=\"ftp://ftp.ncbi.nih.gov/blast/executables/L\
-ATEST\";\n$PG{\"blastcl3\"}{\"language\"}=\"C\";\n\
-$PG{\"blastcl3\"}{\"language2\"}=\"C\";\n$PG{\"bla\
-stcl3\"}{\"source\"}=\"empty\";\n$PG{\"blastcl3\"}\
-{\"update_action\"}=\"never\";\n$PG{\"blastcl3\"}{\
-\"mode\"}=\"psicoffee,expresso,3dcoffee\";\n$PG{\"\
-blastpgp\"}{\"4_TCOFFEE\"}=\"NCBIBLAST\";\n$PG{\"b\
-lastpgp\"}{\"type\"}=\"protein_homology_predictor\\
-";\n$PG{\"blastpgp\"}{\"ADDRESS\"}=\"ftp://ftp.ncb\
-i.nih.gov/blast/executables/LATEST\";\n$PG{\"blast\
-pgp\"}{\"language\"}=\"C\";\n$PG{\"blastpgp\"}{\"l\
-anguage2\"}=\"C\";\n$PG{\"blastpgp\"}{\"source\"}=\
-\"empty\";\n$PG{\"blastpgp\"}{\"update_action\"}=\\
-"never\";\n$PG{\"blastpgp\"}{\"mode\"}=\"psicoffee\
-,expresso,3dcoffee\";\n$PG{\"SOAP::Lite\"}{\"4_TCO\
-FFEE\"}=\"SOAPLITE\";\n$PG{\"SOAP::Lite\"}{\"type\\
-"}=\"library\";\n$PG{\"SOAP::Lite\"}{\"ADDRESS\"}=\
-\"http://cpansearch.perl.org/src/MKUTTER/SOAP-Lite\
--0.710.08/Makefile.PL\";\n$PG{\"SOAP::Lite\"}{\"la\
-nguage\"}=\"Perl\";\n$PG{\"SOAP::Lite\"}{\"languag\
-e2\"}=\"Perl\";\n$PG{\"SOAP::Lite\"}{\"source\"}=\\
-"empty\";\n$PG{\"SOAP::Lite\"}{\"mode\"}=\"psicoff\
-ee,expresso,3dcoffee\";\n$MODE{\"tcoffee\"}{\"name\
-\"}=\"tcoffee\";\n$MODE{\"rcoffee\"}{\"name\"}=\"r\
-coffee\";\n$MODE{\"3dcoffee\"}{\"name\"}=\"3dcoffe\
-e\";\n$MODE{\"mcoffee\"}{\"name\"}=\"mcoffee\";\n$\
-MODE{\"expresso\"}{\"name\"}=\"expresso\";\n\n\n$P\
-G{C}{compiler}=\"gcc\";\n$PG{C}{compiler_flag}=\"C\
-C\";\n$PG{C}{options}=\"\";\n$PG{C}{options_flag}=\
-\"CFLAGS\";\n$PG{C}{type}=\"compiler\";\n\n$PG{\"C\
-XX\"}{compiler}=\"g++\";\n$PG{\"CXX\"}{compiler_fl\
-ag}=\"CXX\";\n$PG{\"CXX\"}{options}=\"\";\n$PG{\"C\
-XX\"}{options_flag}=\"CXXFLAGS\";\n$PG{CXX}{type}=\
-\"compiler\";\n\n$PG{\"CPP\"}{compiler}=\"g++\";\n\
-$PG{\"CPP\"}{compiler_flag}=\"CPP\";\n$PG{\"CPP\"}\
-{options}=\"\";\n$PG{\"CPP\"}{options_flag}=\"CPPF\
-LAGS\";\n$PG{CPP}{type}=\"compiler\";\n\n$PG{\"GPP\
-\"}{compiler}=\"g++\";\n$PG{\"GPP\"}{compiler_flag\
-}=\"GPP\";\n$PG{\"GPP\"}{options}=\"\";\n$PG{\"GPP\
-\"}{options_flag}=\"CFLAGS\";\n$PG{GPP}{type}=\"co\
-mpiler\";\n\n$PG{Fortran}{compiler}=\"g77\";\n$PG{\
-Fortran}{compiler_flag}=\"FCC\";\n$PG{Fortran}{typ\
-e}=\"compiler\";\n\n$PG{Perl}{compiler}=\"CPAN\";\\
-n$PG{Perl}{type}=\"compiler\";\n\n$SUPPORTED_OS{ma\
-cox}=\"Macintosh\";\n$SUPPORTED_OS{linux}=\"Linux\\
-";\n$SUPPORTED_OS{windows}=\"Cygwin\";\n\n\n\n$MOD\
-E{t_coffee}{description}=\" for regular multiple s\
-equence alignments\";\n$MODE{rcoffee} {description\
-}=\" for RNA multiple sequence alignments\";\n\n$M\
-ODE{psicoffee} {description}=\" for Homology Exten\
-ded multiple sequence alignments\";\n$MODE{express\
-o}{description}=\" for very accurate structure bas\
-ed multiple sequence alignments\";\n$MODE{\"3dcoff\
-ee\"}{description}=\" for multiple structure align\
-ments\";\n$MODE{mcoffee} {description}=\" for comb\
-ining alternative multiple sequence alignment pack\
-ages\\n------- into a unique meta-package. The ins\
-taller will upload several MSA packages and compil\
-e them\\n\n\";\n\n\n&post_process_PG();\nreturn;\n\
-}\n\nsub post_process_PG\n  {\n    my $p;\n    \n \
-   %PG=&name2dname (%PG);\n    %MODE=&name2dname(%\
-MODE);\n    foreach $p (keys(%PG)){if ( $PG{$p}{ty\
-pe} eq \"compiler\"){$PG{$p}{update_action}=\"neve\
-r\";}}\n    \n  }\n\nsub name2dname\n  {\n    my (\
-%L)=(@_);\n    my ($l, $ml);\n    \n    foreach my\
- $pg (keys(%L))\n      {\n     $l=length ($pg);\n      if (\
- $l>$ml){$ml=$l;}\n      }\n    $ml+=1;\n    forea\
-ch my $pg (keys(%L))\n      {\n        my $name;\n     $l=$ml\
--length ($pg);\n       $name=$pg;\n    for ( $b=0; $b<$l; $\
-b++)\n   {\n       $name .=\" \";\n      }\n   $L{$pg}{dn\
-ame}=$name;\n      }\n    return %L;\n  }\n\nsub e\
-nv_file2putenv\n  {\n    my $f=@_[0];\n    my $F=n\
-ew FileHandle;\n    my $n;\n    \n    open ($F, \"\
-$f\");\n    while (<$F>)\n      {\n    my $line=$_;\n\
-       my($var, $value)=($_=~/(\\S+)\\=(\\S*)/);\n     $ENV{\
-$var}=$value;\n        $ENV_SET{$var}=1;\n     $n++;\n      }\
-\n    close ($F);\n    return $n;\n  }\n\n","use E\
-nv;\nuse Cwd;\n@suffix=(\"tmp\", \"temp\", \"cache\
-\", \"t_coffee\", \"core\", \"tcoffee\");\n\nif ($\
-#ARGV==-1)\n  {\n    print \"clean_cache.pl -file \
-<file to add in -dir> -dir=<dir> -size=<value in M\
-b>\\n0: unlimited -1 always.\\nWill only clean dir\
-ectories matching:[\";\n    foreach $k(@suffix){pr\
-int \"*$k* \";}\n    print \"]\\n\";\n    exit (EX\
-IT_FAILURE);\n  }\n\n$cl=join (\" \",@ARGV);\nif (\
-($cl=~/\\-no_action/))\n  {\n    exit (EXIT_SUCCES\
-S);\n  }\n\nif (($cl=~/\\-debug/))\n  {\n    $DEBU\
-G=1;\n  }\nelse\n  {\n    $DEBUG=0;\n  }\n\nif (($\
-cl=~/\\-dir=(\\S+)/))\n  {\n    $dir=$1;\n  }\nels\
-e\n  {\n    $dir=\"./\";\n  }\n\nif ($cl=~/\\-file\
-=(\\S+)/)\n  {\n    $file=$1;\n  }\nelse\n  {\n   \
- $file=0;\n  }\n\nif ($cl=~/\\-size=(\\S+)/)\n  {\\
-n    $max_size=$1;\n  }\nelse\n  {\n    $max_size=\
-0;#unlimited\n  }\nif ($cl=~/\\-force/)\n  {\n    \
-$force=1;\n  }\nelse\n  {\n    $force=0;\n  }\n\ni\
-f ($cl=~/\\-age=(\\S+)/)\n  {\n    $max_age=$1;\n \
- }\nelse\n  {\n    $max_age=0;#unlimited\n  }\n\n$\
-max_size*=1000000;\nif ( ! -d $dir)\n  {\n    prin\
-t STDERR \"\\nCannot process $dir: does not exist \
-\\n\";\n    exit (EXIT_FAILURE);\n  }\n\nif ( !($d\
-ir=~/^\\//))\n  {\n    $base=cwd();\n    $dir=\"$b\
-ase/$dir\";\n  }\n\n$proceed=0;\nforeach $s (@suff\
-ix)\n  {\n    \n    if (($dir=~/$s/)){$proceed=1;}\
-\n    $s=uc ($s);\n    if (($dir=~/$s/)){$proceed=\
-1;}\n  }\nif ( $proceed==0)\n  {\n    print STDERR\
- \"Clean_cache.pl can only clean directories whose\
- absolute path name contains the following strings\
-:\";\n    foreach $w (@suffix) {print STDERR \"$w \
-\";$w=lc($w); print STDERR \"$w \";}\n    print ST\
-DERR \"\\nCannot process $dir\\n\";\n    exit (EXI\
-T_FAILURE);\n  }\n\n$name_file=\"$dir/name_file.tx\
-t\";\n$size_file=\"$dir/size_file.txt\";\nif ( $fo\
-rce){&create_ref_file ($dir,$name_file,$size_file)\
-;}\nif ($file){&add_file ($dir, $name_file, $size_\
-file, $file);}\n&clean_dir ($dir, $name_file, $siz\
-e_file, $max_size,$max_age);\nexit (EXIT_SUCCESS);\
-\n\nsub clean_dir \n  {\n    my ($dir, $name_file,\
- $size_file, $max_size, $max_age)=@_;\n    my ($to\
-t_size, $size, $f, $s);\n\n  \n    $tot_size=&get_\
-tot_size ($dir, $name_file, $size_file);\n\n    if\
- ( $tot_size<=$max_size){return ;}\n    else {$max\
-_size/=2;}\n    \n    #recreate the name file in c\
-ase some temprary files have not been properly reg\
-istered\n    &create_ref_file ($dir, $name_file, $\
-size_file, $max_age);\n  \n    $new_name_file=&vtm\
-pnam();\n    open (R, \"$name_file\");\n    open (\
-W, \">$new_name_file\");\n    while (<R>)\n      {\
-\n     my $line=$_;\n  \n      ($f, $s)=($line=~/(\\S+) (\\S\
-+)/);\n        if ( !($f=~/\\S/)){next;}\n     \n      elsif ($max\
-_size && $tot_size>=$max_size && !($f=~/name_file/\
-))\n     {\n       remove ( \"$dir/$f\");\n        $tot_s\
-ize-=$s;\n       }\n   elsif ( $max_age && -M(\"$dir/$f\\
-")>=$max_age)\n          {\n       remove ( \"$dir/$f\");\n\
-           $tot_size-=$s;\n      }\n   else\n    {\n       print\
- W \"$f $s\\n\";\n       }\n      }\n    close (R);\n \
-   close (W);\n    open (F, \">$size_file\");\n   \
- print F \"$tot_size\";\n    if ( -e $new_name_fil\
-e){`mv $new_name_file $name_file`;}\n    close (F)\
-;\n  }\nsub get_tot_size\n  {\n    my ($dir, $name\
-_file, $size_file)=@_;\n    my $size;\n    \n    i\
-f ( !-d $dir){return 0;}\n    if ( !-e $name_file)\
-\n      {\n    \n      &create_ref_file ($dir, $name_file,\
- $size_file);\n      }\n    open (F, \"$size_file\\
-");\n    $size=<F>;\n    close (F);\n    chomp ($s\
-ize);\n    return $size;\n  }\nsub size \n  {\n   \
- my $f=@_[0];\n\n    if ( !-d $f){return -s($f);}\\
-n    else {return &dir2size($f);}\n  }\nsub dir2si\
-ze\n  {\n    my $d=@_[0];\n    my ($s, $f);\n    \\
-n    if ( !-d $d) {return 0;}\n    \n    foreach $\
-f (&dir2list ($d))\n      {\n  if ( -d $f){$s+=&dir\
-2size (\"$d/$f\");}\n  else {$s+= -s \"$dir/$f\";}\\
-n      }\n    return $s;\n  }\n\nsub remove \n  {\\
-n    my $file=@_[0];\n    my ($f);\n    \n    debu\
-g_print( \"--- $file ---\\n\");\n    if (($file eq\
- \".\") || ($file eq \"..\") || ($file=~/\\*/)){re\
-turn EXIT_FAILURE;}\n    elsif ( !-d $file)\n     \
- {\n   debug_print (\"unlink $file\\n\");\n    if (-e $\
-file){unlink ($file);}\n      }\n    elsif ( -d $f\
-ile)\n      {\n        debug_print (\"++++++++ $file ++++\
-+++\\n\");\n   foreach $f (&dir2list($file))\n   {\n\
-           &remove (\"$file/$f\");\n     }\n   debug_print (\
-\"rmdir $file\\n\");\n rmdir $file;\n      }\n    \
-else\n      {\n        debug_print (\"????????? $file ???\
-?????\\n\");\n      }\n    return EXIT_SUCCESS;\n \
- }\n\nsub dir2list\n  {\n    my $dir=@_[0];\n    m\
-y (@list1, @list2,@list3, $l);\n\n    opendir (DIR\
-,$dir);\n    @list1=readdir (DIR);\n    closedir (\
-DIR);\n    \n    foreach $l (@list1)\n      {\n        if\
- ( $l ne \".\" && $l ne \"..\"){@list2=(@list2, $l\
-);}\n      }\n    @list3 = sort { (-M \"$dir/$list\
-2[$b]\") <=> (-M \"$dir/$list2[$a]\")} @list2;\n  \
-  return @list3;\n    \n  }\n\nsub debug_print\n  \
-{\n    \n    if ($DEBUG==1){print @_;}\n    \n  }\\
-nsub create_ref_file\n  {\n    my ($dir,$name_file\
-,$size_file)=@_;\n    my ($f, $s, $tot_size, @l);\\
-n    \n    if ( !-d $dir){return;}\n    \n    @l=&\
-dir2list ($dir);\n    open (F, \">$name_file\");\n\
-    foreach $f (@l)\n      {\n $s=&size(\"$dir/$f\\
-");\n  $tot_size+=$s;\n        print F \"$f $s\\n\";\n    \
-  }\n    &myecho ($tot_size, \">$size_file\");\n  \
-  close (F);\n  }\nsub add_file \n  {\n    my ($di\
-r,$name_file,$size_file,$file)=@_;\n    my ($s, $t\
-ot_size);\n    \n    if ( !-d $dir)   {return;}\n \
-   if ( !-e \"$dir/$file\" ) {return;}\n    if ( !\
--e $name_file){&create_ref_file ($dir,$name_file,$\
-size_file);}\n                                     \n    $s=&size(\"$dir/$file\
-\");\n    open (F, \">>$name_file\");\n    print F\
- \"$file\\n\";\n    close (F);\n\n    $tot_size=&g\
-et_tot_size ($dir,$name_file,$size_file);\n    $to\
-t_size+=$s;\n    &myecho ($tot_size, \">$size_file\
-\");\n    \n  }\n      \nsub myecho\n  {\n    my ($stri\
-ng, $file)=@_;\n    open (ECHO, $file) || die;\n  \
-  print ECHO \"$string\";\n    close (ECHO);\n  }\\
-n    \n                \n      \nsub vtmpnam\n  {\n    my $tmp_file_n\
-ame;\n    $tmp_name_counter++;\n    $tmp_file_name\
-=\"tmp_file_for_clean_cache_pdb$$.$tmp_name_counte\
-r\";\n    $tmp_file_list[$ntmp_file++]=$tmp_file_n\
-ame;\n    if ( -e $tmp_file_name) {return &vtmpnam\
- ();}\n    else {return $tmp_file_name;}\n  }\n","\
-\n$t_coffee=\"t_coffee\";\n\nforeach $value ( @ARG\
-V)\n  {\n    $seq_file=$seq_file.\" \".$value;\n  \
-}\n\n$name=$ARGV[0];\n$name=~s/\\.[^\\.]*$//;\n$li\
-b_name=\"$name.mocca_lib\";\n$type=`t_coffee $seq_\
-file -get_type -quiet`;\nchop ($type);\n\nif ( $ty\
-pe eq \"PROTEIN\"){$lib_mode=\"lalign_rs_s_pair -l\
-align_n_top 20\";}\nelsif ( $type eq\"DNA\"){$lib_\
-mode=\"lalign_rs_s_dna_pair -lalign_n_top 40\";}\n\
-\nif ( !(-e $lib_name))\n  {\n   \n  $command=\"$t\
-_coffee -mocca -seq_weight=no -cosmetic_penalty=0 \
--mocca_interactive -in $lib_mode -out_lib $lib_nam\
-e -infile $seq_file\";\n  \n  }\nelsif ( (-e $lib_\
-name))\n  {\n  $command=\"$t_coffee -mocca -seq_we\
-ight=no -cosmetic_penalty=0 -mocca_interactive -in\
- $lib_name -infile $seq_file\";\n  \n  }\n\nsystem\
- ($command);\n\nexit;\n\n","my $WSDL = 'http://www\
-.ebi.ac.uk/Tools/webservices/wsdl/WSDaliLite.wsdl'\
-;\n\nuse SOAP::Lite;\nuse Data::Dumper;\nuse Getop\
-t::Long qw(:config no_ignore_case bundling);\nuse \
-File::Basename;\n\nmy $checkInterval = 5;\n\nmy %p\
-arams=(\n          'async' => '1', # Use async mode and\
- simulate sync mode in client\n            );\nGetOptions\
-(\n    'pdb1=s'     => \\$params{'sequence1'},\n  \
-  'chainid1=s' => \\$params{'chainid1'},\n    'pdb\
-2=s'     => \\$params{'sequence2'},\n    'chainid2\
-=s' => \\$params{'chainid2'},\n    \"help|h\"   => \
-\\$help, # Usage info\n    \"async|a\"  => \\$asyn\
-c, # Asynchronous submission\n    \"polljob\"   => \
-\\$polljob, # Get results\n    \"status\"       => \\$s\
-tatus, # Get status\n    \"jobid|j=s\"  => \\$jobi\
-d, # JobId\n    \"email|S=s\"  => \\$params{email}\
-, # E-mail address\n    \"trace\"      => \\$trace\
-, # SOAP messages\n    \"sequence=s\" => \\$sequen\
-ce, # Input PDB\n    );\n\nmy $scriptName = basena\
-me($0, ());\nif($help) {\n    &usage();\n    exit(\
-0);\n}\n\nif($trace) {\n    print \"Tracing active\
-\\n\";\n    SOAP::Lite->import(+trace => 'debug');\
-\n}\n\nmy $soap = SOAP::Lite\n    ->service($WSDL)\
-\n    ->on_fault(sub {\n        my $soap = shift;\\
-n        my $res = shift;\n        # Throw an exce\
-ption for all faults\n        if(ref($res) eq '') \
-{\n            die($res);\n        } else {\n     \
-       die($res->faultstring);\n        }\n       \
- return new SOAP::SOM;\n    }\n               );\n\
-\nif( !($polljob || $status) &&\n    !( defined($p\
-arams{'sequence1'}) && defined($params{'sequence2'\
-}) )\n    ) {\n    print STDERR 'Error: bad option\
- combination', \"\\n\";\n    &usage();\n    exit(1\
-);\n}\nelsif($polljob && defined($jobid)) {\n    p\
-rint \"Getting results for job $jobid\\n\";\n    g\
-etResults($jobid);\n}\nelsif($status && defined($j\
-obid)) {\n    print STDERR \"Getting status for jo\
-b $jobid\\n\";\n    my $result = $soap->checkStatu\
-s($jobid);\n    print STDOUT \"$result\", \"\\n\";\
-\n    if($result eq 'DONE') {\n        print STDERR \"To \
-get results: $scriptName --polljob --jobid $jobid\\
-\n\";\n    }\n}\nelse {\n    if(-f $params{'sequen\
-ce1'}) {\n     $params{'sequence1'} = read_file($param\
-s{'sequence1'});\n    }\n    if(-f $params{'sequen\
-ce2'}) {\n     $params{'sequence2'} = read_file($param\
-s{'sequence2'});\n    }\n\n    my $jobid;\n    my \
-$paramsData = SOAP::Data->name('params')->type(map\
-=>\\%params);\n    # For SOAP::Lite 0.60 and earli\
-er parameters are passed directly\n    if($SOAP::L\
-ite::VERSION eq '0.60' || $SOAP::Lite::VERSION =~ \
-/0\\.[1-5]/) {\n        $jobid = $soap->runDaliLit\
-e($paramsData);\n    }\n    # For SOAP::Lite 0.69 \
-and later parameter handling is different, so pass\
-\n    # undef's for templated params, and then pas\
-s the formatted args.\n    else {\n        $jobid \
-= $soap->runDaliLite(undef,\n                               $paramsData)\
-;\n    }\n\n    if (defined($async)) {\n       print STD\
-OUT $jobid, \"\\n\";\n        print STDERR \"To ch\
-eck status: $scriptName --status --jobid $jobid\\n\
-\";\n    } else { # Synchronous mode\n        prin\
-t STDERR \"JobId: $jobid\\n\";\n        sleep 1;\n\
-        getResults($jobid);\n    }\n}\n\nsub clien\
-tPoll($) {\n    my $jobid = shift;\n    my $result\
- = 'PENDING';\n    # Check status and wait if not \
-finished\n    #print STDERR \"Checking status: $jo\
-bid\\n\";\n    while($result eq 'RUNNING' || $resu\
-lt eq 'PENDING') {\n        $result = $soap->check\
-Status($jobid);\n        print STDERR \"$result\\n\
-\";\n        if($result eq 'RUNNING' || $result eq\
- 'PENDING') {\n            # Wait before polling a\
-gain.\n            sleep $checkInterval;\n        \
-}\n    }\n}\n\nsub getResults($) {\n    $jobid = s\
-hift;\n    # Check status, and wait if not finishe\
-d\n    clientPoll($jobid);\n    # Use JobId if out\
-put file name is not defined\n    unless(defined($\
-outfile)) {\n        $outfile=$jobid;\n    }\n    \
-# Get list of data types\n    my $resultTypes = $s\
-oap->getResults($jobid);\n    # Get the data and w\
-rite it to a file\n    if(defined($outformat)) { #\
- Specified data type\n        my $selResultType;\n\
-        foreach my $resultType (@$resultTypes) {\n\
-            if($resultType->{type} eq $outformat) \
-{\n                $selResultType = $resultType;\n\
-            }\n        }\n        $res=$soap->poll\
-($jobid, $selResultType->{type});\n        write_f\
-ile($outfile.'.'.$selResultType->{ext}, $res);\n  \
-  } else { # Data types available\n        # Write\
- a file for each output type\n        for my $resu\
-ltType (@$resultTypes){\n            #print \"Gett\
-ing $resultType->{type}\\n\";\n            $res=$s\
-oap->poll($jobid, $resultType->{type});\n         \
-   write_file($outfile.'.'.$resultType->{ext}, $re\
-s);\n        }\n    }\n}\n\nsub read_file($) {\n  \
-  my $filename = shift;\n    open(FILE, $filename)\
-;\n    my $content;\n    my $buffer;\n    while(sy\
-sread(FILE, $buffer, 1024)) {\n        $content.= $buffer\
-;\n    }\n    close(FILE);\n    return $content;\n\
-}\n\nsub write_file($$) {\n    my ($tmp,$entity) =\
- @_;\n    print STDERR \"Creating result file: \".\
-$tmp.\"\\n\";\n    unless(open (FILE, \">$tmp\")) \
-{\n    return 0;\n    }\n    syswrite(FILE, $entity);\
-\n    close (FILE);\n    return 1;\n}\n\nsub usage\
- {\n    print STDERR <<EOF\nDaliLite\n========\n\n\
-Pairwise comparison of protein structures\n\n[Requ\
-ired]\n\n  --pdb1                : str  : PDB ID f\
-or structure 1\n  --pdb2                : str  : P\
-DB ID for structure 2\n\n[Optional]\n\n  --chain1 \
-             : str  : Chain identifer in structure\
- 1\n  --chain2              : str  : Chain identif\
-er in structure 2\n\n[General]\n\n  -h, --help    \
-        :      : prints this help text\n  -S, --em\
-ail           : str  : user email address\n  -a, -\
--async           :      : asynchronous submission\\
-n      --status          :      : poll for the sta\
-tus of a job\n      --polljob         :      : pol\
-l for the results of a job\n  -j, --jobid         \
-  : str  : jobid for an asynchronous job\n  -O, --\
-outfile         : str  : file name for results (de\
-fault is jobid)\n      --trace         :      : sh\
-ow SOAP messages being interchanged \n\nSynchronou\
-s job:\n\n  The results/errors are returned as soo\
-n as the job is finished.\n  Usage: $scriptName --\
-email <your\\@email> [options] pdbFile [--outfile \
-string]\n  Returns: saves the results to disk\n\nA\
-synchronous job:\n\n  Use this if you want to retr\
-ieve the results at a later time. The results \n  \
-are stored for up to 24 hours. \n  The asynchronou\
-s submission mode is recommended when users are su\
-bmitting \n  batch jobs or large database searches\
-       \n  Usage: $scriptName --email <your\\@email> --a\
-sync [options] pdbFile\n  Returns: jobid\n\n  Use \
-the jobid to query for the status of the job. \n  \
-Usage: $scriptName --status --jobid <jobId>\n  Ret\
-urns: string indicating the status of the job:\n  \
-  DONE - job has finished\n    RUNNING - job is ru\
-nning\n    NOT_FOUND - job cannot be found\n    ER\
-ROR - the jobs has encountered an error\n\n  When \
-done, use the jobid to retrieve the status of the \
-job. \n  Usage: $scriptName --polljob --jobid <job\
-Id> [--outfile string]\n\n[Help]\n\n  For more det\
-ailed help information refer to\n  http://www.ebi.\
-ac.uk/DaliLite/\nEOF\n;\n}\n","my $WSDL = 'http://\
-www.ebi.ac.uk/Tools/webservices/wsdl/WSWUBlast.wsd\
-l';\n\nuse strict;\nuse SOAP::Lite;\nuse Getopt::L\
-ong qw(:config no_ignore_case bundling);\nuse File\
-::Basename;\n\nmy $checkInterval = 15;\n\nmy $numO\
-pts = scalar(@ARGV);\nmy ($outfile, $outformat, $h\
-elp, $async, $polljob, $status, $ids, $jobid, $tra\
-ce, $sequence);\nmy %params= ( # Defaults\n          \
-'async' => 1, # Force into async mode\n              'exp\
-' => 10.0, # E-value threshold\n             'numal' => \
-50, # Maximum number of alignments\n         'scores\
-' => 100, # Maximum number of scores\n            \
-);\nGetOptions( # Map the options into variables\n\
-    \"program|p=s\"     => \\$params{program}, # B\
-LAST program\n    \"database|D=s\"    => \\$params\
-{database}, # Search database\n    \"matrix|m=s\" \
-     => \\$params{matrix}, # Scoring matrix\n    \\
-"exp|E=f\"         => \\$params{exp}, # E-value th\
-reshold\n    \"echofilter|e\"    => \\$params{echo\
-filter}, # Display filtered sequence\n    \"filter\
-|f=s\"      => \\$params{filter}, # Low complexity\
- filter name\n    \"alignments|b=i\"  => \\$params\
-{numal}, # Number of alignments\n    \"scores|s=i\\
-"      => \\$params{scores}, # Number of scores\n \
-   \"sensitivity|S=s\" => \\$params{sensitivity}, \
-# Search sensitivity\n    \"sort|t=s\"       => \\\
-$params{sort}, # Sort hits by...\n    \"stats|T=s\\
-"       => \\$params{stats}, # Scoring statistic t\
-o use\n    \"strand|d=s\"      => \\$params{strand\
-}, # Strand to use in DNA vs. DNA search\n    \"to\
-pcombon|c=i\"   => \\$params{topcombon}, # Consist\
-ent sets of HSPs\n    \"outfile=s\"       => \\$ou\
-tfile, # Output file\n    \"outformat|o=s\"   => \\
-\$outformat, # Output format\n    \"help|h\"        \
- => \\$help, # Usage info\n    \"async|a\"           =\
-> \\$async, # Asynchronous mode\n    \"polljob\"        \
-     => \\$polljob, # Get results\n    \"status\"      \
-      => \\$status, # Get job status\n    \"ids\" \
-            => \\$ids, # Get ids from result\n    \
-\"jobid|j=s\"       => \\$jobid, # JobId\n    \"em\
-ail=s\"         => \\$params{email}, # E-mail addr\
-ess\n    \"trace\"           => \\$trace, # SOAP t\
-race\n    \"sequence=s\"      => \\$sequence, # Qu\
-ery sequence\n    );\n\nmy $scriptName = basename(\
-$0, ());\nif($help || $numOpts == 0) {\n    &usage\
-();\n    exit(0);\n}\n\nif($trace){\n    print STD\
-ERR \"Tracing active\\n\";\n    SOAP::Lite->import\
-(+trace => 'debug');\n}\n\nmy $soap = SOAP::Lite\n\
-    ->service($WSDL)\n    ->proxy('http://localhos\
-t/',\n    #proxy => ['http' => 'http://your.proxy.\
-server/'], # HTTP proxy\n    timeout => 600, # HTT\
-P connection timeout\n    )\n    ->on_fault(sub { \
-# SOAP fault handler\n        my $soap = shift;\n \
-       my $res = shift;\n        # Throw an except\
-ion for all faults\n        if(ref($res) eq '') {\\
-n            die($res);\n        } else {\n       \
-     die($res->faultstring);\n        }\n        r\
-eturn new SOAP::SOM;\n    }\n               );\n\n\
-if( !($polljob || $status || $ids) &&\n    !( defi\
-ned($ARGV[0]) || defined($sequence) )\n    ) {\n  \
-  print STDERR 'Error: bad option combination', \"\
-\\n\";\n    &usage();\n    exit(1);\n}\nelsif($pol\
-ljob && defined($jobid)) {\n    print \"Getting re\
-sults for job $jobid\\n\";\n    getResults($jobid)\
-;\n}\nelsif($status && defined($jobid)) {\n    pri\
-nt STDERR \"Getting status for job $jobid\\n\";\n \
-   my $result = $soap->checkStatus($jobid);\n    p\
-rint STDOUT \"$result\\n\";\n    if($result eq 'DO\
-NE') {\n       print STDERR \"To get results: $scriptNam\
-e --polljob --jobid $jobid\\n\";\n    }\n}  \nelsi\
-f($ids && defined($jobid)) {\n    print STDERR \"G\
-etting ids from job $jobid\\n\";\n    getIds($jobi\
-d);\n}\nelse {\n    # Prepare input data\n    my $\
-content;\n    my (@contents) = ();\n    if(-f $ARG\
-V[0] || $ARGV[0] eq '-') {     \n      $content={type=>'seq\
-uence',content=>read_file($ARGV[0])};  \n    }\n   \
- if($sequence) {       \n      if(-f $sequence || $sequence e\
-q '-') {       \n          $content={type=>'sequence',content\
-=>read_file($ARGV[0])};        \n      } else {\n          $content\
-={type=>'sequence',content=>$sequence};\n      }\n    }\
-\n    push @contents, $content;\n\n    # Submit th\
-e job\n    my $paramsData = SOAP::Data->name('para\
-ms')->type(map=>\\%params);\n    my $contentData =\
- SOAP::Data->name('content')->value(\\@contents);\\
-n    # For SOAP::Lite 0.60 and earlier parameters \
-are passed directly\n    if($SOAP::Lite::VERSION e\
-q '0.60' || $SOAP::Lite::VERSION =~ /0\\.[1-5]/) {\
-\n        $jobid = $soap->runWUBlast($paramsData, \
-$contentData);\n    }\n    # For SOAP::Lite 0.69 a\
-nd later parameter handling is different, so pass\\
-n    # undef's for templated params, and then pass\
- the formatted args.\n    else {\n        $jobid =\
- $soap->runWUBlast(undef, undef,\n                                $paramsDa\
-ta, $contentData);\n    }\n\n    # Asynchronous mo\
-de: output jobid and exit.\n    if (defined($async\
-)) {\n print STDOUT $jobid, \"\\n\";\n        prin\
-t STDERR \"To check status: $scriptName --status -\
--jobid $jobid\\n\";\n    }\n    # Synchronous mode\
-: try to get results\n    else {\n        print ST\
-DERR \"JobId: $jobid\\n\";\n        sleep 1;\n    \
-    getResults($jobid);\n    }\n}\n\nsub getIds($)\
- {\n    my $jobid = shift;\n    my $results = $soa\
-p->getIds($jobid);\n    for my $result (@$results)\
-{\n    print \"$result\\n\";\n    }\n}\n\nsub clientP\
-oll($) {\n    my $jobid = shift;\n    my $result =\
- 'PENDING';\n    # Check status and wait if not fi\
-nished\n    while($result eq 'RUNNING' || $result \
-eq 'PENDING') {\n        $result = $soap->checkSta\
-tus($jobid);\n        print STDERR \"$result\\n\";\
-\n        if($result eq 'RUNNING' || $result eq 'P\
-ENDING') {\n            # Wait before polling agai\
-n.\n            sleep $checkInterval;\n        }\n\
-    }\n}\n\nsub getResults($) {\n    my $jobid = s\
-hift;\n    my $res;\n    # Check status, and wait \
-if not finished\n    clientPoll($jobid);\n    # Us\
-e JobId if output file name is not defined\n    un\
-less(defined($outfile)) {\n        $outfile=$jobid\
-;\n    }\n    # Get list of data types\n    my $re\
-sultTypes = $soap->getResults($jobid);\n    # Get \
-the data and write it to a file\n    if(defined($o\
-utformat)) { # Specified data type\n   if($outformat\
- eq 'xml') {$outformat = 'toolxml';}\n if($outform\
-at eq 'txt') {$outformat = 'tooloutput';}\n       \
- my $selResultType;\n        foreach my $resultTyp\
-e (@$resultTypes) {\n            if($resultType->{\
-type} eq $outformat) {\n                $selResult\
-Type = $resultType;\n            }\n        }\n   \
-     $res=$soap->poll($jobid, $selResultType->{typ\
-e});\n if($outfile eq '-') {\n      write_file($ou\
-tfile, $res);\n        } else {\n          write_file($outfile\
-.'.'.$selResultType->{ext}, $res);\n   }\n    } else\
- { # Data types available\n        # Write a file \
-for each output type\n        for my $resultType (\
-@$resultTypes){\n            #print STDERR \"Getti\
-ng $resultType->{type}\\n\";\n            $res=$so\
-ap->poll($jobid, $resultType->{type});\n           if($o\
-utfile eq '-') {\n             write_file($outfile, $res);\n   \
-    } else {\n         write_file($outfile.'.'.$resultTyp\
-e->{ext}, $res);\n         }\n        }\n    }\n}\n\ns\
-ub read_file($) {\n    my $filename = shift;\n    \
-my ($content, $buffer);\n    if($filename eq '-') \
-{\n    while(sysread(STDIN, $buffer, 1024)) {\n            $\
-content .= $buffer;\n  }\n    }\n    else { # File\\
-n      open(FILE, $filename) or die \"Error: unable to \
-open input file\";\n   while(sysread(FILE, $buffer, \
-1024)) {\n         $content .= $buffer;\n      }\n     close(FI\
-LE);\n    }\n    return $content;\n}\n\nsub write_\
-file($$) {\n    my ($filename, $data) = @_;\n    p\
-rint STDERR 'Creating result file: ' . $filename .\
- \"\\n\";\n    if($filename eq '-') {\n        print STDO\
-UT $data;\n    }\n    else {\n open(FILE, \">$file\
-name\") or die \"Error: unable to open output file\
-\";\n  syswrite(FILE, $data);\n        close(FILE);\n    }\
-\n}\n\nsub usage {\n    print STDERR <<EOF\nWU-BLA\
-ST\n========\n\nRapid sequence database search pro\
-grams utilizing the BLAST algorithm.\n   \n[Requir\
-ed]\n\n      --email       : str  : user email add\
-ress \n  -p, --program     : str  : BLAST program \
-to use: blastn, blastp, blastx, \n                \
-             tblastn or tblastx\n  -D, --database \
-   : str  : database to search\n  seqFile         \
-  : file : query sequence data file (\"-\" for STD\
-IN)\n\n[Optional]\n\n  -m, --matrix        : str  : s\
-coring matrix\n  -E, --exp         : real : 0<E<= 1000\
-. Statistical significance threshold\n            \
-                 for reporting database sequence m\
-atches.\n  -e, --echofilter  :      : display the \
-filtered query sequence in the output\n  -f, --fil\
-ter        : str  : activates filtering of the query \
-sequence\n  -b, --alignments  : int  : number of a\
-lignments to be reported\n  -s, --scores           : int\
-  : number of scores to be reported\n  -S, --sensi\
-tivity : str  :\n  -t, --sort      : str  :\n  -T, \
---stats       : str  :\n  -d, --strand      : str \
- : DNA strand to search with in DNA vs. DNA search\
-es \n  -c, --topcombon   :      :\n\n[General] \n\\
-n  -h, --help       :      : prints this help text\
-\n  -a, --async      :      : forces to make an as\
-ynchronous query\n      --status     :      : poll\
- for the status of a job\n      --polljob    :    \
-  : poll for the results of a job\n  -j, --jobid  \
-    : str  : jobid that was returned when an async\
-hronous job \n                            was subm\
-itted.\n  -O, --outfile    : str  : name of the fi\
-le results should be written to \n                \
-            (default is based on the jobid; \"-\" \
-for STDOUT)\n  -o, --outformat  : str  : txt or xm\
-l output (no file is written)\n      --trace      : \
-     : show SOAP messages being interchanged \n\nS\
-ynchronous job:\n\n  The results/errors are return\
-ed as soon as the job is finished.\n  Usage: $scri\
-ptName --email <your\\@email> [options...] seqFile\
-\n  Returns: saves the results to disk\n\nAsynchro\
-nous job:\n\n  Use this if you want to retrieve th\
-e results at a later time. The results \n  are sto\
-red for up to 24 hours. \n  The asynchronous submi\
-ssion mode is recommended when users are submittin\
-g \n  batch jobs or large database searches    \n  Us\
-age: $scriptName --async --email <your\\@email> [o\
-ptions...] seqFile\n  Returns : jobid\n\n  Use the\
- jobid to query for the status of the job. \n  Usa\
-ge: $scriptName --status --jobid <jobId>\n  Return\
-s : string indicating the status of the job:\n    \
-DONE - job has finished\n    RUNNING - job is runn\
-ing\n    NOT_FOUND - job cannot be found\n    ERRO\
-R - the jobs has encountered an error\n\n  When do\
-ne, use the jobid to retrieve the status of the jo\
-b. \n  Usage: $scriptName --polljob --jobid <jobId\
-> [--outfile string]\n  Returns: saves the results\
- to disk\n\n[Help]\n\nFor more detailed help infor\
-mation refer to \nhttp://www.ebi.ac.uk/blast2/WU-B\
-last2_Help_frame.html\n \nEOF\n;\n}\n","\nmy $WSDL\
- = 'http://www.ebi.ac.uk/Tools/webservices/wsdl/WS\
-Blastpgp.wsdl';\n\nuse SOAP::Lite;\nuse Getopt::Lo\
-ng qw(:config no_ignore_case bundling);\nuse File:\
-:Basename;\n\nmy $checkInterval = 15;\n\nmy %param\
-s=(\n      'async' => '1', # Use async mode and sim\
-ulate sync mode in client\n        );\nGetOptions(\n \
-   \"mode=s\"           => \\$params{mode}, # Sear\
-ch mode: PSI-Blast or PHI-Blast\n    \"database|d=\
-s\"     => \\$params{database}, # Database to sear\
-ch\n    \"matrix|M=s\"       => \\$params{matrix},\
-# Scoring maxtrix\n    \"exp|e=f\"          => \\$\
-params{exp}, # E-value\n    \"expmulti|h=f\"     =\
-> \\$params{expmulti}, # E-value\n    \"filter|F=s\
-\"       => \\$params{filter}, # Low complexity fi\
-lter\n    \"dropoff|X=i\"      => \\$params{dropof\
-f}, # Dropoff score\n    \"finaldropoff|Z=i\" => \\
-\$params{finaldropoff}, # Final dropoff score\n   \
- \"scores|v=i\"       => \\$params{scores}, # Max \
-number of scores\n    \"align=i\"          => \\$p\
-arams{align}, # Alignment view\n    \"startregion|\
-S=i\"  => \\$params{startregion}, # Start of regio\
-n in query\n    \"endregion|H=i\"    => \\$params{\
-endregion}, # End of region in query\n    \"maxpas\
-ses|j=i\"    => \\$params{maxpasses}, # Number of \
-PSI iterations\n    \"opengap|G=i\"      => \\$par\
-ams{opengap}, # Gap open penalty\n    \"extendgap|\
-E=i\"    => \\$params{extendgap}, # Gap extension \
-penalty\n    \"pattern=s\"        => \\$params{pat\
-tern}, # PHI-BLAST pattern\n    \"usagemode|p=s\" \
-   => \\$params{usagemode}, # PHI-BLAST program\n \
-   \"appxml=s\"         => \\$params{appxml}, # Ap\
-plication XML\n    \"sequence=s\"       => \\$sequ\
-ence, # Query sequence\n    \"help\"          => \\$\
-help, # Usage info\n    \"polljob\"           => \\$p\
-olljob, # Get results\n    \"status\"         => \\\
-$status, # Get status\n    \"ids\"                    =>\
- \\$ids, # Get ids from result\n    \"jobid=s\"   \
-       => \\$jobid, # JobId\n    \"outfile=s\"    \
-    => \\$outfile, # Output filename\n    \"outfor\
-mat|o=s\"    => \\$outformat, # Output file format\
-\n    \"async|a\"             => \\$async, # Async subm\
-ission\n    \"email=s\"          => \\$params{emai\
-l}, # User e-mail address\n    \"trace\"          \
-  => \\$trace, # Show SOAP messages\n    );\n\nmy \
-$scriptName = basename($0, ());\nif($help) {\n    \
-&usage();\n    exit(0);\n}\n\nif ($trace){\n    pr\
-int \"Tracing active\\n\";\n    SOAP::Lite->import\
-(+trace => 'debug');\n}\n\nmy $soap = SOAP::Lite\n\
-    ->service($WSDL)\n    ->on_fault(sub {\n      \
-  my $soap = shift;\n        my $res = shift;\n   \
-     # Throw an exception for all faults\n        \
-if(ref($res) eq '') {\n            die($res);\n   \
-     } else {\n            die($res->faultstring);\
-\n        }\n        return new SOAP::SOM;\n    }\\
-n               );\n\nif( !($polljob || $status ||\
- $ids) &&\n    !( (defined($ARGV[0]) && -f $ARGV[0\
-]) || defined($sequence) )\n    ) {\n    print STD\
-ERR 'Error: bad option combination', \"\\n\";\n   \
- &usage();\n    exit(1);\n}\nelsif($polljob && def\
-ined($jobid)) {\n    print \"Getting results for j\
-ob $jobid\\n\";\n    getResults($jobid);\n}\nelsif\
-($status && defined($jobid)) {\n    print STDERR \\
-"Getting status for job $jobid\\n\";\n    my $resu\
-lt = $soap->checkStatus($jobid);\n    print STDOUT\
- $result, \"\\n\";\n    if($result eq 'DONE') {\n      \
-print STDERR \"To get results: $scriptName --pollj\
-ob --jobid $jobid\\n\";\n    }\n}  \nelsif($ids &&\
- defined($jobid)) {\n    print STDERR \"Getting id\
-s from job $jobid\\n\";\n    getIds($jobid);\n}\ne\
-lse {\n    if(-f $ARGV[0]) {   \n      $content={type=>'s\
-equence', content=>read_file($ARGV[0])};       \n    }\n\
-    if($sequence) {    \n      if(-f $sequence) {\n        $c\
-ontent={type=>'sequence', content=>read_file($sequ\
-ence)};        \n      } else {\n          $content={type=>'sequenc\
-e', content=>$sequence};\n     }\n    }\n    push @con\
-tent, $content;\n\n    my $jobid;\n    my $paramsD\
-ata = SOAP::Data->name('params')->type(map=>\\%par\
-ams);\n    my $contentData = SOAP::Data->name('con\
-tent')->value(\\@content);\n    # For SOAP::Lite 0\
-.60 and earlier parameters are passed directly\n  \
-  if($SOAP::Lite::VERSION eq '0.60' || $SOAP::Lite\
-::VERSION =~ /0\\.[1-5]/) {\n        $jobid = $soa\
-p->runBlastpgp($paramsData, $contentData);\n    }\\
-n    # For SOAP::Lite 0.69 and later parameter han\
-dling is different, so pass\n    # undef's for tem\
-plated params, and then pass the formatted args.\n\
-    else {\n        $jobid = $soap->runBlastpgp(un\
-def, undef,\n                              $paramsData, $contentData);\n\
-    }\n\n    if (defined($async)) {\n  print STDOUT\
- $jobid, \"\\n\";\n        print STDERR \"To check\
- status: $scriptName --status --jobid $jobid\\n\";\
-\n    } else { # Synchronous mode\n        print S\
-TDERR \"JobId: $jobid\\n\";\n        sleep 1;\n   \
-     getResults($jobid);\n    }\n}\n\nsub getIds($\
-) {\n    $jobid = shift;\n    my $results = $soap-\
->getIds($jobid);\n    for $result (@$results){\n       p\
-rint \"$result\\n\";\n    }\n}\n\nsub clientPoll($\
-) {\n    my $jobid = shift;\n    my $result = 'PEN\
-DING';\n    # Check status and wait if not finishe\
-d\n    #print STDERR \"Checking status: $jobid\\n\\
-";\n    while($result eq 'RUNNING' || $result eq '\
-PENDING') {\n        $result = $soap->checkStatus(\
-$jobid);\n        print STDERR \"$result\\n\";\n  \
-      if($result eq 'RUNNING' || $result eq 'PENDI\
-NG') {\n            # Wait before polling again.\n\
-            sleep $checkInterval;\n        }\n    \
-}\n}\n\nsub getResults($) {\n    $jobid = shift;\n\
-    # Check status, and wait if not finished\n    \
-clientPoll($jobid);\n    # Use JobId if output fil\
-e name is not defined\n    unless(defined($outfile\
-)) {\n        $outfile=$jobid;\n    }\n    # Get l\
-ist of data types\n    my $resultTypes = $soap->ge\
-tResults($jobid);\n    # Get the data and write it\
- to a file\n    if(defined($outformat)) { # Specif\
-ied data type\n        my $selResultType;\n       \
- foreach my $resultType (@$resultTypes) {\n       \
-     if($resultType->{type} eq $outformat) {\n    \
-            $selResultType = $resultType;\n       \
-     }\n        }\n        $res=$soap->poll($jobid\
-, $selResultType->{type});\n        write_file($ou\
-tfile.'.'.$selResultType->{ext}, $res);\n    } els\
-e { # Data types available\n        # Write a file\
- for each output type\n        for my $resultType \
-(@$resultTypes){\n            #print \"Getting $re\
-sultType->{type}\\n\";\n            $res=$soap->po\
-ll($jobid, $resultType->{type});\n            writ\
-e_file($outfile.'.'.$resultType->{ext}, $res);\n  \
-      }\n    }\n}\n\nsub read_file($) {\n    my $f\
-ilename = shift;\n    open(FILE, $filename);\n    \
-my $content;\n    my $buffer;\n    while(sysread(F\
-ILE, $buffer, 1024)) {\n       $content.= $buffer;\n    \
-}\n    close(FILE);  \n    return $content;\n}\n\n\
-sub write_file($$) {\n    my ($tmp,$entity) = @_;\\
-n    print STDERR \"Creating result file: \".$tmp.\
-\"\\n\";\n    unless(open (FILE, \">$tmp\")) {\n       r\
-eturn 0;\n    }\n    syswrite(FILE, $entity);\n   \
- close (FILE);\n    return 1;\n}\n\nsub usage {\n \
-   print STDERR <<EOF\nBlastpgp\n========\n   \nTh\
-e blastpgp program implements the PSI-BLAST and PH\
-I-BLAST variations\nof NCBI BLAST.\n\nFor more det\
-ailed help information refer to\nhttp://www.ebi.ac\
-.uk/blastpgp/blastpsi_help_frame.html\n \nBlastpgp\
- specific options:\n\n[Required]\n\n      --mode  \
-          : str  : search mode to use: PSI-Blast o\
-r PHI-Blast\n  -d, --database        : str  : prot\
-ein database to search\n  seqFile               : \
-file : query sequence\n\n[Optional]\n\n  -M, --mat\
-rix          : str  : scoring matrix\n  -e, --exp \
-            : real : Expectation value\n  -h, --ex\
-pmulti        : real : threshold (multipass model)\
-\n  -F, --filter          : str  : filter query se\
-quence with SEG [T,F]\n  -m, --align           : i\
-nt  : alignment view option:\n                    \
-             0 - pairwise, 1 - M/S identities,\n  \
-                               2 - M/S non-identit\
-ies, 3 - Flat identities,\n                       \
-          4 - Flat non-identities\n  -G, --opengap\
-         : int  : cost to open a gap\n  -E, --exte\
-ndgap       : int  : cost to extend a gap\n  -g, -\
--gapalign        : str  : Gapped [T,F]\n  -v, --sc\
-ores          : int  : number of scores to be repo\
-rted\n  -j, --maxpasses       : int  : number of i\
-terations\n  -X, --dropoff         : int  : Dropof\
-f score\n  -Z, --finaldropoff    : int  : Dropoff \
-for final alignment\n  -S, --startregion     : int\
-  : Start of required region in query\n  -H, --end\
-region       : int  : End of required region in qu\
-ery\n  -k, --pattern         : str  : Hit File (PH\
-I-BLAST only)\n  -p, --usagemode       : str  : Pr\
-ogram option (PHI-BLAST only):\n                  \
-               blastpgp, patseedp, seedp\n\n[Gener\
-al]\n\n      --help            :      : prints thi\
-s help text\n  -a, --async           :      : forc\
-es to make an asynchronous query\n      --status  \
-        :      : poll for the status of a job\n   \
-   --polljob         :      : poll for the results\
- of a job\n      --jobid           : str  : jobid \
-of an asynchronous job\n      --ids             : \
-     : get hit identifiers for result \n  -O, --ou\
-tfile         : str  : name of the file results sh\
-ould be written to\n                              \
-   (default is based on the jobid)\n  -o, --outfor\
-mat       : str  : txt or xml output (no file is w\
-ritten)\n      --trace           :      : show SOA\
-P messages being interchanged\n\nSynchronous job:\\
-n\n  The results/errors are returned as soon as th\
-e job is finished.\n  Usage: blastpgp.pl --email <\
-your@email> [options...] seqfile\n  Returns: saves\
- the results to disk\n\nAsynchronous job:\n\n  Use\
- this if you want to retrieve the results at a lat\
-er time. The results\n  are stored for up to 24 ho\
-urs.\n  The asynchronous submission mode is recomm\
-ended when users are submitting\n  batch jobs or l\
-arge database searches\n  Usage: blastpgp.pl --ema\
-il <your@email> --async [options...] seqFile\n  Re\
-turns: jobid\n\n  Use the jobid to query for the s\
-tatus of the job.\n  Usage: blastpgp.pl --status -\
--jobid <jobId>\n  Returns: string indicating the s\
-tatus of the job\n    DONE - job has finished\n   \
- RUNNING - job is running\n    NOT_FOUND - job can\
-not be found\n    ERROR - the jobs has encountered\
- an error\n\n  When done, use the jobid to retriev\
-e the results of the job.\n  Usage: blastpgp.pl --\
-polljob --jobid <jobId> [--outfile <fileName>]\n  \
-Returns: saves the results to disk\nEOF\n;\n}\n","\
-\n\n\nmy $PROBTRESH = 0.3;# base pairs below this \
-prob threshold will be ignored\nmy $WEIGHT = 100.0\
-; # float!!\nmy $NUCALPH = \"ACGTUNRYMKSWHBVD\";\n\
-use vars qw($NUCALPH $WEIGHT);\n\nmy $myname = bas\
-ename($0);\n\nuse strict;\nuse warnings;\n\nuse Fi\
-le::Basename;\nuse Getopt::Long;\nuse File::Glob '\
-:glob';\nuse File::Spec;\nuse File::Temp qw/ tempf\
-ile tempdir /;\n\n\n\n\nsub tcoffeelib_header($;$)\
-\n{\n    my ($nseq, $fd) = @_;\n    if (! defined(\
-$fd)) {\n        $fd = *STDOUT;\n    }\n    printf\
- $fd \"! TC_LIB_FORMAT_01\\n\";\n    printf $fd \"\
-%d\\n\", $nseq;\n}\n\n\nsub tcoffeelib_header_adds\
-eq($$;$)\n{\n    my ($id, $seq, $fd) = @_;\n    if\
- (! defined($fd)) {\n        $fd = *STDOUT;\n    }\
-\n    printf $fd \"%s %d %s\\n\", $id, length($seq\
-), $seq;\n}\n\n\nsub tcoffeelib_comment($;$)\n{\n \
-   my ($comment, $fd) = @_;\n    if (! defined($fd\
-)) {\n        $fd = *STDOUT;\n    }\n    printf $f\
-d \"!\" . $comment . \"\\n\";\n}\n\n\nsub tcoffeel\
-ib_struct($$$;$)\n{\n    my ($nseq, $len, $bpm, $f\
-d) = @_;\n\n    if (! defined($fd)) {\n        $fd\
- = *STDOUT;\n    }\n\n    # output basepair indice\
-s with fixed weight\n    printf $fd \"#%d %d\\n\",\
- $nseq, $nseq;\n    # output basepairs (only once)\
- and with unit-offset\n    for (my $i=0; $i<$len; \
-$i++) {\n        for (my $j=$i+1; $j<$len; $j++) {\
-\n            if (! defined($bpm->[$i][$j])) {\n  \
-              print STDERR \"ERROR: \\$bpm->[$i][$\
-j] undefined\\n\";\n            }\n            if \
-($bpm->[$i][$j]>0) {\n                print $fd $i\
-+1;\n                print $fd \" \";\n           \
-     print $fd $j+1;\n                print $fd \"\
- \" . $bpm->[$i][$j] . \"\\n\";\n            }\n  \
-      }\n    }\n}\n\n\nsub tcoffeelib_footer(;$)\n\
-{\n    my ($fd) = @_;\n    if (! defined($fd)) {\n\
-        $fd = *STDOUT;\n    }\n    print $fd \"! S\
-EQ_1_TO_N\\n\";\n}\n\n\n    \nsub plfold($$$)\n{  \
-  \n    my ($id, $seq, $probtresh) = @_;\n    my (\
-@struct);# return\n    my ($templ, $fhtmp, $fnamet\
-mp, $cmd, $ctr, $window_size);\n\n    $templ = $my\
-name . \".\" . $id . \".pid-\" . $$ . \".XXXXXX\";\
-\n    ($fhtmp, $fnametmp) = tempfile($templ, UNLIN\
-K => 1); \n    print $fhtmp \">$id\\n$seq\\n\";\n\\
-n    # --- init basepair array\n    #\n    for (my\
- $i=0; $i<length($seq); $i++) {\n        for (my $\
-j=$i+1; $j<length($seq); $j++) {\n            $str\
-uct[$i][$j]=0;\n        }\n    }\n\n\n    # --- ca\
-ll rnaplfold and drop a readme\n    #\n    $window\
-_size=(length($seq)<70)?length($seq):70;\n    $cmd\
- = \"RNAplfold -W $window_size < $fnametmp >/dev/n\
-ull\";\n    system($cmd);\n    \n    if ($? != 0) \
-{\n        printf STDERR \"ERROR: RNAplfold ($cmd)\
- exited with error status %d\\n\", $? >> 8;\n     \
-   return;\n    }\n    #unlink($fnametmp);\n    my\
- $fps = sprintf(\"%s_dp.ps\", $id); # check long n\
-ame\n    \n    if (! -s $fps) {\n      {\n\n   $fps \
-= sprintf(\"%s_dp.ps\", substr($id,0,12)); # check\
- short name\n  if (! -s $fps)\n          {\n       die(\"co\
-uldn't find expected file $fps\\n\");\n            return\
-;\n      }\n      }\n    }\n\n    \n    # --- read ba\
-se pairs from created postscript\n    #\n    open(\
-FH, $fps);\n    while (my $line = <FH>) {\n       \
- my ($nti, $ntj, $prob);\n        chomp($line);   \
-     \n        # line: bp bp sqrt-prob ubox\n     \
-   my @match = ($line =~ m/^([0-9]+) +([0-9]+) +([\
-0-9\\.]+) +ubox$/);\n        if (scalar(@match)) {\
-\n            $nti=$1;\n            $ntj=$2;\n    \
-        $prob=$3*$3;# prob stored as square root\n\
-\n            if ($prob>$probtresh) {\n           \
-     #printf STDERR \"\\$struct[$nti][$ntj] sqrtpr\
-ob=$3 prob=$prob > $probtresh\\n\";\n             \
-   $struct[$nti-1][$ntj-1] = $WEIGHT\n            \
-}\n            # store with zero-offset\n        }\
-\n    }\n    close(FH);\n\n    # remove or gzi pos\
-tscript\n    #\n    unlink($fps);\n    #\n    # or\
- gzip\n    #$cmd = \"gzip -qf $fps\";\n    #system\
-($cmd);\n    #if ($? != 0) {\n    #    printf STDE\
-RR \"ERROR: gzip ($cmd) exited with error status %\
-d\\n\", $? >> 8;\n    #}\n\n    return \\@struct;\\
-n}\n\n\n\n\n\nsub rnaseqfmt($)\n{\n    my ($seq) =\
- @_;\n    # remove gaps\n    $seq =~ s/-//g;\n    \
-# uppercase RNA\n    $seq = uc($seq);\n    # T -> \
-U\n    $seq =~ s/T/U/g;\n    # check for invalid c\
-haraters\n    $_ = $seq;\n    s/[^$NUCALPH]//g;\n \
-   return $_;\n}\n\n\n\n\nsub usage(;$)\n{    \n  \
-  my ($errmsg) = @_;\n    if ($errmsg) {\n        \
-print STDERR \"ERROR: $errmsg\\n\";\n    }\n    pr\
-int STDERR << \"EOF\";\n$myname:\n Creates a T-Cof\
-fee RNA structure library from RNAplfold predictio\
-n.\n See FIXME:citation\nUsage:\n $myname -in seq_\
-file -out tcoffee_lib\nEOF\n    exit(1);\n}\n\nsub\
- read_fasta_seq \n  {\n    my $f=$_[0];\n    my %h\
-seq;\n    my (@seq, @com, @name);\n    my ($a, $s,\
-$nseq);\n\n    open (F, $f);\n    while (<F>)\n   \
-   {\n $s.=$_;\n      }\n    close (F);\n\n    \n \
-   @name=($s=~/>(\\S*).*\\n[^>]*/g);\n    \n    @s\
-eq =($s=~/>.*.*\\n([^>]*)/g);\n    @com =($s=~/>(\\
-\S*)(.*)\\n([^>]*)/g);\n\n\n    $nseq=$#name+1;\n \
- \n    for ($a=0; $a<$nseq; $a++)\n      {\n   my $n\
-=$name[$a];\n  my $s;\n        $hseq{$n}{name}=$n;\n   $s=$s\
-eq[$a];$s=~s/\\s//g;\n \n      $hseq{$n}{seq}=$s;\n    $hs\
-eq{$n}{com}=$com[$a];\n      }\n    return %hseq;\\
-n  }\n\n\n\n\n\n\n\nmy $fmsq = \"\";\nmy $flib = \\
-"\";\nmy %OPTS;\nmy %seq;\nmy ($id, $nseq, $i);\nm\
-y @nl;\n\nGetOptions(\"in=s\" => \\$fmsq, \"out=s\\
-" => \\$flib);\n\nif (! -s $fmsq) {\n    usage(\"e\
-mpty or non-existant file \\\"$fmsq\\\"\")\n}\nif \
-(length($flib)==0) {\n    usage(\"empty out-filena\
-me\")\n}\n\n\n\n\n\n\n%seq=read_fasta_seq($fmsq);\\
-n\n\n@nl=keys(%seq);\n\n$nseq=$#nl+1;\nopen FD_LIB\
-, \">$flib\" or die \"can't open $flib!\";\ntcoffe\
-elib_header($nseq, *FD_LIB);\nforeach $id (keys (%\
-seq))\n  {\n    my ($seq, $fmtseq);\n    \n    $se\
-q = $seq{$id}{seq};\n    \n    $fmtseq = rnaseqfmt\
-($seq);# check here, formatting for folding import\
-ant later\n    if (length($seq)!=length($fmtseq)) \
-{\n        print STDERR \"ERROR: invalid sequence \
-$id is not an RNA sequence. read seq is: $seq\\n\"\
-;\n        exit\n      }\n   \n    tcoffeelib_head\
-er_addseq($id, uc($seq), *FD_LIB);\n  }\ntcoffeeli\
-b_comment(\"generated by $myname on \" . localtime\
-(), *FD_LIB);\n\n\n\n$i=0;\nforeach $id (keys (%se\
-q))\n  {\n    my ($cleanid, $seq, $bpm);\n    $seq\
-=$seq{$id}{seq};\n    $cleanid = $id;\n    $cleani\
-d =~ s,[/ ],_,g;# needed for rnaplfold\n    $seq =\
- rnaseqfmt($seq);\n    \n    $bpm = plfold($cleani\
-d, rnaseqfmt($seq), $PROBTRESH);       \n    \n   \
- tcoffeelib_struct($i+1, length($seq), $bpm, *FD_L\
-IB);\n    $i++;\n}\n\n\ntcoffeelib_footer(*FD_LIB)\
-;\nclose FD_LIB;\nexit (0);\n\n","\n\n\n\n\n$cmd=j\
-oin ' ', @ARGV;\nif ($cmd=~/-infile=(\\S+)/){ $seq\
-file=$1;}\nif ($cmd=~/-outfile=(\\S+)/){ $libfile=\
-$1;}\n\n\n\n%s=read_fasta_seq ($seqfile);\n\nopen \
-(F, \">$libfile\");\nforeach $name (keys (%s))\n  \
-{\n    my $tclib=\"$name.RNAplfold_tclib\";\n    p\
-rint (F \">$name _F_ $tclib\\n\");\n    seq2RNAplf\
-old2tclib ($name, $s{$name}{seq}, $tclib);\n  }\nc\
-lose (F);\nexit (EXIT_SUCCESS);\n\nsub seq2RNAplfo\
-ld2tclib\n  {\n    my ($name, $seq, $tclib)=@_;\n \
-   my ($tmp);\n    $n++;\n    $tmp=\"tmp4seq2RNApl\
-fold_tclib.$$.$n.pep\";\n    open (RF, \">$tmp\");\
-\n    print (RF \">$name\\n$seq\\n\");\n    close \
-(RF);\n    \n    system \"t_coffee -other_pg RNApl\
-fold2tclib.pl -in=$tmp -out=$tclib\";\n    \n    u\
-nlink ($tmp);\n    return $tclib;\n  }\n    \n    \
-\nsub read_fasta_seq \n  {\n    my $f=@_[0];\n    \
-my %hseq;\n    my (@seq, @com, @name);\n    my ($a\
-, $s,$nseq);\n\n    open (F, $f);\n    while (<F>)\
-\n      {\n    $s.=$_;\n      }\n    close (F);\n\n  \
-  \n    @name=($s=~/>(\\S*).*\\n[^>]*/g);\n    \n \
-   @seq =($s=~/>.*.*\\n([^>]*)/g);\n    @com =($s=\
-~/>\\S*(.*)\\n([^>]*)/g);\n\n    \n    $nseq=$#nam\
-e+1;\n    \n    for ($a=0; $a<$nseq; $a++)\n      \
-{\n    my $n=$name[$a];\n      $hseq{$n}{name}=$n;\n   $hseq\
-{$n}{seq}=$seq[$a];\n  $hseq{$n}{com}=$com[$a];\n  \
-    }\n    return %hseq;\n  }\n","use Getopt::Long\
-;\nGetOptions(\"-in=s\" => \\$fmsq1, \"-out=s\" =>\
- \\$outfile, \"-arch=s\" => \\$arch,\"-psv=s\" => \
-\\$psv, \"-hmmtop_home=s\", \\$hmmtop_home );\nope\
-n (O, \">$outfile\");\n\nif (!$hmmtop_home){$hmmto\
-p_home=\"/home/notredame/packages/hmmtop/hmmtop_2.\
-1\";}\nif ($arch){$ENV{'HMMTOP_ARCH'}=$arch;}\nels\
-e {$ENV{'HMMTOP_ARCH'}=\"$hmmtop_home/hmmtop.arch\\
-";}\n\nif ($psv){$ENV{'HMMTOP_PSV'}=$psv;}\nelse{$\
-ENV{'HMMTOP_PSV'}=\"$hmmtop_home/hmmtop.psv\";}\n\\
-n$fmsq=\"seq2convert.$$.tmp\";\nsystem (\"t_coffee\
- -other_pg seq_reformat -in $fmsq1 -output fasta_s\
-eq > $fmsq\");\n%seq=read_fasta_seq($fmsq);\n\n$tm\
-pfile=\"fasta_seq2hmmtop_fasta.$$.tmp\";\nforeach \
-$s (keys (%seq))\n  {\n    \n    open F, \">$tmpfi\
-le\";\n    print F \">seq\\n$seq{$s}{seq}\\n\";\n \
-   close F;\n\n    $result=`hmmtop -if=$tmpfile -s\
-f=FAS -pl 2>/dev/null`;\n    @r=($result=~/(.+)/g)\
-;\n    foreach $l (@r)\n      {\n      \n      if ($l=~/pred\
-(.*)/)\n         {$p.=$1;}\n      }\n    \n    $p=~s/\\s\
-//g;\n    print O \">$seq{$s}{name}\\n$p\\n\";\n  \
-  $p=\"\";\n  }\nunlink \"$tmpfile\";\nunlink \"$f\
-msq\";\nclose (O);\n\nsub read_fasta_seq \n  {\n  \
-  my $f=$_[0];\n    my %hseq;\n    my (@seq, @com,\
- @name);\n    my ($a, $s,$nseq);\n\n    open (F, $\
-f);\n    while (<F>)\n      {\n        $s.=$_;\n      }\n\
-    close (F);\n\n    \n    @name=($s=~/>(.*).*\\n\
-[^>]*/g);\n    \n    @seq =($s=~/>.*.*\\n([^>]*)/g\
-);\n    @com =($s=~/>.*(.*)\\n([^>]*)/g);\n\n\n   \
- $nseq=$#name+1;\n    \n  \n    for ($a=0; $a<$nse\
-q; $a++)\n      {\n    my $n=$name[$a];\n      my $s;\n        $h\
-seq{$n}{name}=$n;\n    $s=$seq[$a];$s=~s/\\s//g;\n     \n\
-       $hseq{$n}{seq}=$s;\n    $hseq{$n}{com}=$com[$a];\n  \
-    }\n    return %hseq;\n  }\n","\n\n\n\n\nmy $FM\
-ODEL =\"\"; \nmy $TMPDIR = \"/tmp\";\n\n\n\n\nmy $\
-NUCALPH = \"ACGTUNRYMKSWHBVD\";\nmy $PRIMNUCALPH =\
- \"ACGTUN\";\nuse vars qw($NUCALPH $PRIMNUCALPH $T\
-MPDIR);\n\n\nmy $errmsg;\nuse vars qw($errmsg);\n\\
-n\n\nuse Getopt::Long;\nuse Cwd;\nuse File::Basena\
-me;\nuse File::Temp qw/ tempfile tempdir /;\nuse F\
-ile::Copy;\nuse File::Path;\n\n\n\nsub usage(;$)\n\
-{\n    my ($errmsg) = @_;\n    my $myname = basena\
-me($0);\n\n    if ($errmsg) {\n        print STDER\
-R \"ERROR: $errmsg\\n\";\n    }\n\n    print STDER\
-R << \"EOF\";\n    \n$myname: align two sequences \
-by means of consan\\'s sfold\nUsage:\n $myname -i \
-file -o file -d path\nOptions:\n -i|--in : pairwis\
-e input sequence file\n -o|--out: output alignment\
-\n -d|--directory containing data\n\nEOF\n}\n\nsub\
- read_stk_aln \n  {\n    my $f=$_[0];\n    my ($se\
-q, $id);\n    \n    my %hseq;\n\n    open (STK, \"\
-$f\");\n    while (<STK>)\n      {\n   if ( /^#/ || \
-/^\\/\\// || /^\\s*$/){;}\n    else\n    {\n       ($id,\
-$seq)=/(\\S+)\\s+(\\S+)/;\n        $hseq{$id}{'seq'}.\
-=$seq;\n         }\n      }\n    close (STK);\n    retur\
-n %hseq;\n  }\nsub read_fasta_seq \n  {\n    my $f\
-=$_[0];\n    my %hseq;\n    my (@seq, @com, @name)\
-;\n    my ($a, $s,$nseq);\n\n    open (F, $f);\n  \
-  while (<F>)\n      {\n       $s.=$_;\n      }\n    clo\
-se (F);\n\n    \n    @name=($s=~/>(.*).*\\n[^>]*/g\
-);\n    \n    @seq =($s=~/>.*.*\\n([^>]*)/g);\n   \
- @com =($s=~/>.*(.*)\\n([^>]*)/g);\n\n    \n    $n\
-seq=$#name+1;\n    \n    for ($a=0; $a<$nseq; $a++\
-)\n      {\n   my $n=$name[$a];\n      $hseq{$n}{name}=$n\
-;\n    $hseq{$n}{seq}=$seq[$a];\n      $hseq{$n}{com}=$com\
-[$a];\n      }\n    return %hseq;\n  }\n\n\n\nsub \
-sfold_parseoutput($$)\n{\n    my ($frawout, $foutf\
-a) = @_;\n    my %haln;\n    my ($fstk, $cmd, $id)\
-;\n    open FOUTFA, \">$foutfa\";\n    \n    $fstk\
- = $frawout . \".stk\";\n    \n    # first line of\
- raw out contains info\n    # remaining stuff is s\
-tockholm formatted\n    $cmd = \"sed -e '1d' $fraw\
-out\";\n    system(\"$cmd > $fstk\");\n    if ($? \
-!= 0) {\n        $errmsg = \"command failed with e\
-xit status $?.\";\n        $errmsg .=  \"Command w\
-as \\\"$cmd\\\"\";\n        return -1;\n    }\n\n \
-   # this gives an error message. just ignore it..\
-.\n    %haln=read_stk_aln ( $fstk);\n    foreach $\
-i (keys (%haln))\n      {\n    my $s;\n        $s=$haln{$i}{\
-'seq'};\n      $s =~ s/\\./-/g;\n      print FOUTFA \">$i\\n\
-$s\\n\";\n      }\n    close FOUTFA;\n    return 0\
-;\n}\n\n\n\n\nsub sfold_wrapper($$$$)\n{\n    \n  \
-  my ($fs1, $fs2, $fmodel, $foutfa) = @_;\n    \n\\
-n    my ($cmd, $frawout, $ferrlog, $freadme, $ftim\
-elog, $fstk);\n\n    # add  basename($fmsqin) (unk\
-nown here!)\n    $frawout = \"sfold.log\";\n    $f\
-errlog = \"sfold.err\";\n    $ftimelog = \"sfold.t\
-ime\";\n    $freadme =  \"sfold.README\";\n    $fs\
-tk = \"sfold.stk\";\n    \n    # prepare execution\
-...\n    #\n    # ./tmp is essential for dswpalign\
-\n    # otherwise you'll get a segfault\n    mkdir\
- \"./tmp\";\n    \n    $cmd = \"sfold -m $fmodel $\
-fs1 $fs2\";\n    open(FREADME,\">$freadme\");\n   \
- print FREADME \"$cmd\\n\"; \n    close(FREADME);\\
-n\n    # and go\n    #\n    system(\"/usr/bin/time\
- -p -o $ftimelog $cmd >$frawout 2>$ferrlog\");\n  \
-  if ($? != 0) {\n        $errmsg = \"command fail\
-ed with exit status $?\";\n        $errmsg .= \"co\
-mmand was \\\"$cmd\\\". See \" . getcwd . \"\\n\";\
-\n        return -1;\n    }\n\n    return sfold_pa\
-rseoutput($frawout, $foutfa);\n}\n\n\n\n\n\n\n\nmy\
- ($help, $fmsqin, $fmsaout);\nGetOptions(\"help\" \
- => \\$help,\n           \"in=s\" => \\$fmsqin,\n \
-          \"out=s\" => \\$fmsaout,\n      \"data=s\"\
- => \\$ref_dir);\n\n\n\nif ($help) {\n    usage();\
-\n    exit(0);\n}\nif (! defined($fmsqin)) {\n    \
-usage('missing input filename');\n    exit(1);\n}\\
-nif (! defined($fmsaout)) {\n    usage('missing ou\
-tput filename');\n    exit(1);\n\n}\nif (scalar(@A\
-RGV)) {\n    usage('Unknown remaining args');\n   \
- exit(1);\n}\n\n$FMODEL = \"$ref_dir/mix80.mod\";\\
-nif (! -e \"$FMODEL\") {\n    die(\"couldn't find \
-sfold grammar model file. Expected $FMODEL\\n\");\\
-n}\n\n\nmy %hseq=read_fasta_seq ($fmsqin);\nmy $id\
-;\n\nforeach $id (keys(%hseq))\n  {\n    push(@seq\
-_array, $hseq{$id});\n  }\n\nif ( scalar(@seq_arra\
-y) != 2 ) {\n    die(\"Need *exactly* two sequence\
-s as input (pairwise alignment!).\")\n}\n\n\n\nmy \
-($sec, $min, $hour, $mday, $mon, $year, $wday, $yd\
-ay, $isdst) = localtime(time);\nmy $datei = sprint\
-f(\"%4d-%02d-%02d\", $year+1900, $mon+1, $mday);\n\
-my $templ = basename($0) . \".\" . $datei . \".pid\
--\" . $$ . \".XXXXXX\";\nmy $wd = tempdir ( $templ\
-, DIR => $TMPDIR);\n\ncopy($fmsqin, \"$wd/\" . bas\
-ename($fmsqin) . \".org\"); # for reproduction\nco\
-py($FMODEL, \"$wd\");\nmy $fmodel = basename($FMOD\
-EL);\nmy $orgwd = getcwd;\nchdir $wd;\n\n\n\nmy @s\
-epseqfiles;\nforeach $id (keys(%hseq)) {\n    my (\
-$seq, $orgseq, $fname, $sout);\n    $seq=$hseq{$id\
-}{'seq'};\n    \n    $fname = basename($fmsqin) . \
-\"_$id.fa\";\n    # replace funnies in file/id nam\
-e (e.g. \"/\" \" \" etc)\n    $fname =~ s,[/ ],_,g\
-;\n    open (PF, \">$fname\");\n    print (PF \">$\
-id\\n$seq\\n\");\n    close (PF);\n\n    push(@sep\
-seqfiles, $fname);\n}\n\nmy ($f1, $f2, $fout);\n$f\
-1 = $sepseqfiles[0];\n$f2 = $sepseqfiles[1];\n$fou\
-t = $wd . basename($fmsqin) . \".out.fa\";\nif (sf\
-old_wrapper($f1, $f2, $fmodel, \"$fout\") != 0) {\\
-n    printf STDERR \"ERROR: See logs in $wd\\n\";\\
-n    exit(1);\n} else {\n    chdir $orgwd;\n    co\
-py($fout, $fmsaout);\n    rmtree($wd);\n   exit(0)\
-;\n}\n","\nuse Env qw(HOST);\nuse Env qw(HOME);\nu\
-se Env qw(USER);\n\n\n$tmp=clean_cr ($ARGV[0]);\no\
-pen (F, $tmp);\n\nwhile ( <F>)\n  {\n    my $l=$_;\
-\n    if ( $l=~/^# STOCKHOLM/){$stockholm=1;}\n   \
- elsif ( $stockholm && $l=~/^#/)\n      {\n    $l=~/^\
-#(\\S+)\\s+(\\S+)\\s+(\\S*)/g;\n       $l=\"_stockholmha\
-sch_$1\\_stockholmspace_$2 $3\\n\";\n      }\n    \
-$file.=$l;\n  }\nclose (F);\nunlink($tmp);\n$file1\
-=$file;\n\n$file=~s/\\#/_hash_symbol_/g;\n$file=~s\
-/\\@/_arobase_symbol_/g;\n\n\n$file=~s/\\n[\\.:*\\\
-s]+\\n/\\n\\n/g;\n\n$file=~s/\\n[ \\t\\r\\f]+(\\b)\
-/\\n\\1/g;\n\n\n$file=~s/(\\n\\S+)(\\s+)(\\S)/\\1_\
-blank_\\3/g;\n\n$file=~s/[ ]//g;\n$file=~s/_blank_\
-/ /g;\n\n\n\n$file =~s/\\n\\s*\\n/#/g;\n\n$file.=\\
-"#\";\n$file =~s/\\n/@/g;\n\n\n\n\n@blocks=split /\
-\\#/, $file;\nshift (@blocks);\n@s=split /\\@/, $b\
-locks[0];\n$nseq=$#s+1;\n\n\n\n$file=join '@', @bl\
-ocks;\n@lines=split /\\@/,$file;\n\n$c=0;\n\nforea\
-ch $l (@lines)\n  {\n    if (!($l=~/\\S/)){next;}\\
-n    elsif ($stockholm && ($l=~/^\\/\\// || $l=~/S\
-TOCKHOLM/)){next;}#get read of STOCHOLM Terminator\
-\n   \n    $l=~/(\\S+)\\s+(\\S*)/g;\n    $n=$1; $s\
-=$2;\n    \n    $seq[$c].=$s;\n    $name[$c]=$n;\n\
-    $c++;\n    \n    if ( $c==$nseq){$c=0;}\n    \\
-n  } \n\nif ( $c!=0)\n      {\n        print STDERR \"ERR\
-OR: $ARGV[0] is NOT an MSA in Clustalw format: mak\
-e sure there is no blank line within a block [ERRO\
-R]\\n\";\n     exit (EXIT_FAILURE);\n      }\n\nfor ($\
-a=0; $a< $nseq; $a++)\n  {\n    $name[$a]=cleanstr\
-ing ($name[$a]);\n    $seq[$a]=cleanstring ($seq[$\
-a]);\n    $seq[$a]=breakstring($seq[$a], 60);\n   \
- \n    $line=\">$name[$a]\\n$seq[$a]\\n\";\n    \n\
-    print \"$line\";\n  }\nexit (EXIT_SUCCESS);\n\\
-nsub cleanstring\n  {\n    my $s=@_[0];\n    $s=~s\
-/_hash_symbol_/\\#/g;\n    $s=~s/_arobase_symbol_/\
-\\@/g;\n    $s=~s/[ \\t]//g;\n    return $s;\n  }\\
-nsub breakstring\n  {\n    my $s=@_[0];\n    my $s\
-ize=@_[1];\n    my @list;\n    my $n,$ns, $symbol;\
-\n    \n    @list=split //,$s;\n    $n=0;$ns=\"\";\
-\n    foreach $symbol (@list)\n      {\n       if ( $n==\
-$size)\n         {\n       $ns.=\"\\n\";\n         $n=0;\n       }\
-\n     $ns.=$symbol;\n $n++;\n      }\n    return $ns;\
-\n    }\n\nsub clean_cr\n  {\n    my $f=@_[0];\n  \
-  my $file;\n    \n    $tmp=\"f$.$$\";\n    \n    \
-\n    open (IN, $f);\n    open (OUT, \">$tmp\");\n\
-    \n    while ( <IN>)\n      {\n     $file=$_;\n     $fi\
-le=~s/\\r\\n/\\n/g;\n  $file=~s/\\n\\r/\\n/g;\n        $fi\
-le=~s/\\r\\r/\\n/g;\n  $file=~s/\\r/\\n/g;\n   print \
-OUT \"$file\";\n      }\n    \n    close (IN);\n  \
-  close (OUT);\n    return $tmp;\n  }\n","use Env \
-qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\n\\
-n\n$query_start=-1;\n$query_end=-1;\n\nwhile (<>)\\
-n  {\n    if ( /\\/\\//){$in_aln=1;}\n    elsif ( \
-$in_aln && /(\\S+)\\s+(.*)/)\n      {\n\n\n    $name=\
-$1;\n  \n\n    $seq=$2;\n      $seq=~s/\\s//g;\n        $se\
-q=~s/\\~/\\-/g;\n      $seq=~s/\\./\\-/g;\n    if ( $list{\
-$n}{'name'} && $list{$n}{'name'} ne $name)\n     {\n\
-           print \"$list{$n}{'name'} Vs $name\";\n         \\
-n          exit (EXIT_FAILURE);\n        }\n   else\n    {\n     \
-  $list{$n}{'name'}= $name;\n    }\n\n $list{$n}{'s\
-eq'}=$list{$n}{'seq'}.$seq;\n  \n      $nseq=++$n;\n   \n \
-     }\n    else\n      {$n=0;}\n  }\n\n\nfor ($a=\
-0; $a<$nseq; $a++)\n  {\n    print \">$list{$a}{'n\
-ame'}\\n$list{$a}{'seq'}\\n\";\n  }\n      \n","\n\
-use Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw(U\
-SER);\n\n                                         \
-               \nuse strict;                      \
-                       \nuse warnings;\nuse diagno\
-stics;\n\nmy $in_hit_list, my $in_aln=0, my(%name_\
-list)=(),my (%list)=(),my $n_seq=0; my $test=0;\nm\
-y($j)=0, my $n=0, my $nom, my $lg_query, my %vu=()\
-;\n\nopen (F, \">tmp\");\n\n$/=\"\\n\";\nwhile (<>\
-)\n{\n    print F $_;\n    if($_ =~ /Query=\\s*(.+\
-?)\\s/i) { $nom=$1;}\n\n    if ( /Sequences produc\
-ing significant alignments/){$in_hit_list=1;}\n   \
- \n    if ($_=~ /^pdb\\|/i) { $_=~ s/pdb\\|//g; }\\
-n    if ($_=~ /^(1_\\d+)\\s+\\d+/) { $_=~ s/$1/QUE\
-RY/;}\n      \n    if ( /^(\\S+).+?\\s+[\\d.]+\\s+\
-([\\de.-]+)\\s+$/ && $in_hit_list)     \n    {\n       my($i\
-d)=$1; # \n    $id=~ s/\\|/_/g; #\n    if ($id =~ /.+_$/\
-) { chop($id) }; #\n   $name_list{$n_seq++}=$id;\n     $\
-name_list{$n_seq-1}=~ s/.*\\|//g;     \n    }\n  \\
-n    if (/query/i) {$in_aln=1;}\n    if ( /^(\\S+)\
-\\s+(\\d+)\\s+([a-zA-Z-]+)\\s+(\\d+)/ || /^(\\S+)(\
-\\s+)(\\-+)(\\s+)/ && ($in_aln == 1))\n    {\n my \
-$name=$1;\n    my $start=$2;\n my $seq=$3;\n   my $end=\
-$4;\n          \n      if ($name =~ /QUERY/i) { $lg_query=lengt\
-h($seq); }\n\n unless ($test > $n) #m\n        {\n         my\
-(@seqq)= split('',$seq);\n         my($gap_missing)= s\
-calar(@seqq);\n            \n      while ($gap_missing != \
-$lg_query)  { unshift (@seqq,\"-\"); $gap_missing=\
- scalar(@seqq); }\n        $seq=join('',@seqq);  #m\n\
-       }\n     \n      if ($name =~ /QUERY/i)\n        {\n         $n=0; %vu\
-=(); $j=0;\n       $list{$n}{'real_name'}=\"$nom\";\\
-n      }       \n      else\n  {\n         unless (exists $vu{$name}) {\
- ++$j;}        \n          $list{$n}{'real_name'}=$name_list{$\
-j-1};\n        }\n             \n      $list{$n}{'name'}=$name;\n\n    $seq=\
-~tr/a-z/A-Z/;\n        $list{$n}{'seq'}=$list{$n}{'seq'};\
-\n     $list{$n}{'seq'}.=$seq;\n\n     $n++;\n $vu{$name}+\
-+;\n   $test++;\n   } \n    \n}\n\nmy @numero=();\n\\
-nfor (my $a=0; $a<$n; $a++) #m\n{\n    my $long=le\
-ngth($list{0}{'seq'});  \n    my $long1= length($l\
-ist{$a}{'seq'});\n  \n    while ($long1 ne $long)\\
-n    {\n       $list{$a}{'seq'}.=\"-\";\n      $long1= length\
- ($list{$a}{'seq'});\n    } \n \n    push (@numero\
-,\"$list{$a}{'name'} $list{$a}{'real_name'}\\n\");\
-\n}\n\nmy %dejavu=();\n\n\nfor (my $i=0; $i<=$#num\
-ero; $i++)\n{\n    my $s=\">$list{$i}{'real_name'}\
-\\n$list{$i}{'seq'}\\n\";\n    my $k=0;\n    \n   \
- if (exists $dejavu{$numero[$i]}) {next;}\n    els\
-e\n    {       \n      for ($j=0; $j<$n ; $j++)\n      {\n         if \
-(\"$numero[$i]\" eq \"$numero[$j]\" && $j != $i )\\
-n          {\n         ++$k;\n         $s .=\">$list{$j}{'real_name'}\
-\\n$list{$j}{'seq'}\\n\";\n        }\n }       \n    }\n   \
- \n    if ($k>0) \n    {\n     my $cons;\n     open (SOR,\\
-">tempo_aln2cons\"); print SOR $s;  close SOR ;\n      \
-open (COM,\"t_coffee -other_pg seq_reformat -in te\
-mpo_aln2cons -action +aln2cons +upper |\") ; \n   \
-       while (<COM>)\n {       \n          if (/^>/) { $cons =\">\
-$list{$i}{'real_name'}\\n\"; next;}\n      $_=~ s/\\
-\n//g;\n           $cons .=$_;\n       }\n     close COM; unlink (\
-\"tempo_aln2cons\");\n print $cons,\"\\n\"; print \
-F $cons,\"\\n\";\n    }        \n    else  { print $s;  p\
-rint F $s; }\n    \n    $dejavu{$numero[$i]}++;\n}\
- #m\n\nexit;\n\n\n\n\n\n\n\n\n\n\n\n","use Env;\n\\
-n\n$tmp_dir=\"\";\n$init_dir=\"\";\n$program=\"tc_\
-generic_method.pl\";\n\n$blast=@ARGV[0];\n\n$name=\
-\"query\";$seq=\"\";\n%p=blast_xml2profile($name,$\
-seq,100, 0, 0, $blast);\n&output_profile (%p);\n\n\
-\nsub output_profile\n  {\n    my (%profile)=(@_);\
-\n    my ($a);\n    for ($a=0; $a<$profile{n}; $a+\
-+)\n      {\n  \n      print \">$profile{$a}{name} $prof\
-ile{$a}{comment}\\n$profile{$a}{seq}\\n\";\n      \
-}\n    return;\n  }\nsub file_contains \n  {\n    \
-my ($file, $tag, $max)=(@_);\n    my ($n);\n    $n\
-=0;\n    \n    if ( !-e $file && ($file =~/$tag/))\
- {return 1;}\n    elsif ( !-e $file){return 0;}\n \
-   else \n      {\n    open (FC, \"$file\");\n while \
-( <FC>)\n        {\n       if ( ($_=~/$tag/))\n              {\n\
-               close (FC);\n           return 1;\n           }\n           elsif (\
-$max && $n>$max)\n           {\n               close (FC);\n           retur\
-n 0;\n       }\n           $n++;\n       }\n      }\n    clo\
-se (FC);\n    return 0;\n  }\n     \n    \nsub file\
-2string\n  {\n    my $f=@_[0];\n    my $string, $l\
-;\n    open (F,\"$f\");\n    while (<F>)\n      {\\
-n\n    $l=$_;\n        #chomp ($l);\n  $string.=$l;\n      }\\
-n    close (F);\n    $string=~s/\\r\\n//g;\n    $s\
-tring=~s/\\n//g;\n    return $string;\n  }\n\n\n\n\
-sub tag2value \n  {\n    \n    my $tag=(@_[0]);\n \
-   my $word=(@_[1]);\n    my $return;\n    \n    $\
-tag=~/$word=\"([^\"]+)\"/;\n    $return=$1;\n    r\
-eturn $return;\n  }\n      \nsub hit_tag2pdbid\n  \
-{\n    my $tag=(@_[0]);\n    my $pdbid;\n       \n\
-    $tag=~/id=\"(\\S+)\"/;\n    $pdbid=$1;\n    $p\
-dbid=~s/_//;\n    return $pdbid;\n  }\nsub id2pdbi\
-d \n  {\n    my $id=@_[0];\n  \n    if ($id =~/pdb\
-/)\n      {\n  $id=~/pdb(.*)/;\n       $id=$1;\n      }\n\
-    $id=~s/[|¦_]//g;\n    return $id;\n  }\nsub se\
-t_blast_type \n  {\n    my $file =@_[0];\n    if (\
-&file_contains ($file,\"EBIApplicationResult\",100\
-)){$BLAST_TYPE=\"EBI\";}\n    elsif (&file_contain\
-s ($file,\"NCBI_BlastOutput\",100)) {$BLAST_TYPE=\\
-"NCBI\";}\n    else\n      {\n $BLAST_TYPE=\"\";\n\
-      }\n    return $BLAST_TYPE;\n  }\nsub blast_x\
-ml2profile \n  {\n    my ($name,$seq,$maxid, $mini\
-d, $mincov, $file)=(@_);\n    my (%p, $a, $string,\
- $n);\n    \n\n\n    if ($BLAST_TYPE eq \"EBI\" ||\
- &file_contains ($file,\"EBIApplicationResult\",10\
-0)){%p=ebi_blast_xml2profile(@_);}\n    elsif ($BL\
-AST_TYPE eq \"NCBI\" || &file_contains ($file,\"NC\
-BI_BlastOutput\",100)){%p=ncbi_blast_xml2profile(@\
-_);}\n    else \n      {\n     print \"************ ER\
-ROR: Blast Returned an unknown XML Format ********\
-**************\";\n    die;\n      }\n    for ($a=0; \
-$a<$p{n}; $a++)\n      {\n     my $name=$p{$a}{name};\\
-n      $p{$name}{seq}=$p{$a}{seq};\n      }\n    return\
- %p;\n  }\nsub ncbi_blast_xml2profile \n  {\n    m\
-y ($name,$seq,$maxid, $minid, $mincov, $string)=(@\
-_);\n    my ($L,$l, $a,$b,$c,$d,$nhits,@identifyer\
-L);\n    \n    \n    $seq=~s/[^a-zA-Z]//g;\n    $L\
-=length ($seq);\n    \n    %hit=&xml2tag_list ($st\
-ring, \"Hit\");\n    \n    \n    for ($nhits=0,$a=\
-0; $a<$hit{n}; $a++)\n      {\n        my ($ldb,$id, $ide\
-ntity, $expectation, $start, $end, $coverage, $r);\
-\n     my (%ID,%DE,%HSP);\n    \n      $ldb=\"\";\n\n  %ID=&xml\
-2tag_list ($hit{$a}{body}, \"Hit_id\");\n      $identif\
-yer=$ID{0}{body};\n    \n      %DE=&xml2tag_list ($hit{$a}\
-{body}, \"Hit_def\");\n        $definition=$DE{0}{body};\\
-n      \n      %HSP=&xml2tag_list ($hit{$a}{body}, \"Hsp\");\
-\n     for ($b=0; $b<$HSP{n}; $b++)\n    {\n       my (%S\
-TART,%END,%E,%I,%Q,%M);\n\n     \n         %START=&xml2ta\
-g_list ($HSP{$b}{body}, \"Hsp_query-from\");\n    \
- %HSTART=&xml2tag_list ($HSP{$b}{body}, \"Hsp_hit-\
-from\");\n         \n      %LEN=  &xml2tag_list ($HSP{$\
-b}{body}, \"Hsp_align-len\");\n            %END=  &xml2ta\
-g_list ($HSP{$b}{body}, \"Hsp_query-to\");\n       %\
-HEND=  &xml2tag_list ($HSP{$b}{body}, \"Hsp_hit-to\
-\");\n     %E=&xml2tag_list     ($HSP{$b}{body}, \\
-"Hsp_evalue\");\n          %I=&xml2tag_list     ($HSP{$\
-b}{body}, \"Hsp_identity\");\n     %Q=&xml2tag_lis\
-t     ($HSP{$b}{body}, \"Hsp_qseq\");\n            %M=&xm\
-l2tag_list     ($HSP{$b}{body}, \"Hsp_hseq\");\n        \
-   \n      for ($e=0; $e<$Q{n}; $e++)\n\n            {\n\
-               $qs=$Q{$e}{body};\n             $ms=$M{$e}{body};\n             if ($s\
-eq eq\"\"){$seq=$qs;$L=length($seq);}\n                \n              $expe\
-ctation=$E{$e}{body};\n                $identity=($LEN{$e}{body}\
-==0)?0:$I{$e}{body}/$LEN{$e}{body}*100;\n              $start=\
-$START{$e}{body};\n            $end=$END{$e}{body};\n          $Hsta\
-rt=$HSTART{$e}{body};\n                $Hend=$HEND{$e}{body};\n        \
-\n             $coverage=(($end-$start)*100)/$L;\n\n   \n              if (\
-$identity>$maxid || $identity<$minid || $coverage<\
-$mincov){next;}\n              @lr1=(split (//,$qs));\n                @lr2=\
-(split (//,$ms));\n            $l=$#lr1+1;\n           for ($c=0;$c<$\
-L;$c++){$p[$nhits][$c]=\"-\";}\n               for ($d=0,$c=0; \
-$c<$l; $c++)\n           {\n               $r=$lr1[$c];\n                  if \
-( $r=~/[A-Za-z]/)\n                  {\n                       \n                      $p[$nhits][$\
-d + $start-1]=$lr2[$c];\n                      $d++;\n               }\n                 \
-}\n            $Qseq[$nhits]=$qs;\n            $Hseq[$nhits]=$ms;\n            $\
-QstartL[$nhits]=$start;\n              $HstartL[$nhits]=$Hstar\
-t;\n           $identityL[$nhits]=$identity;\n         $endL[$nhit\
-s]=$end;\n             $definitionL[$nhits]=$definition;\n             $\
-identifyerL[$nhits]=$identifyer;\n             $comment[$nhit\
-s]=\"$ldb|$identifyer [Eval=$expectation][id=$iden\
-tity%][start=$Hstart end=$Hend]\";\n           $nhits++;\n     \
-      }\n        }\n      }\n    \n    $profile{n}=0;\n\
-    $profile{$profile{n}}{name}=$name;\n    $profi\
-le{$profile{n}}{seq}=$seq;\n    $profile {n}++;\n \
-   \n    for ($a=0; $a<$nhits; $a++)\n      {\n        $n\
-=$a+1;\n       \n      $profile{$n}{name}=\"$name\\_$a\";\n    $\
-profile{$n}{seq}=\"\";\n       $profile{$n}{Qseq}=$Qseq[\
-$a];\n $profile{$n}{Hseq}=$Hseq[$a];\n $profile{$n\
-}{Qstart}=$QstartL[$a];\n      $profile{$n}{Hstart}=$Hs\
-tartL[$a];\n   $profile{$n}{identity}=$identityL[$a]\
-;\n    $profile{$n}{definition}=$definitionL[$a];\n    $\
-profile{$n}{identifyer}=$identifyerL[$a];\n    $profi\
-le{$n}{comment}=$comment[$a];\n        for ($b=0; $b<$L; \
-$b++)\n          {\n       if ($p[$a][$b])\n         {\n               $pr\
-ofile{$n}{seq}.=$p[$a][$b];\n        }\n           else\n\
-             {\n               $profile{$n}{seq}.=\"-\";\n           }\n       \
-  }\n      }\n    \n    $profile{n}=$nhits+1;\n   \
- return %profile;\n  }\nsub ebi_blast_xml2profile \
-\n  {\n    my ($name,$seq,$maxid, $minid, $mincov,\
- $string)=(@_);\n    my ($L,$l, $a,$b,$c,$d,$nhits\
-,@identifyerL,$identifyer);\n    \n\n    \n    $se\
-q=~s/[^a-zA-Z]//g;\n    $L=length ($seq);\n    %hi\
-t=&xml2tag_list ($string, \"hit\");\n    \n    for\
- ($nhits=0,$a=0; $a<$hit{n}; $a++)\n      {\n  my (\
-$ldb,$id, $identity, $expectation, $start, $end, $\
-coverage, $r);\n       my (%Q,%M,%E,%I);\n     \n      $ldb=&tag2\
-value ($hit{$a}{open}, \"database\");\n        $identifye\
-r=&tag2value ($hit{$a}{open}, \"id\");\n\n     $descri\
-ption=&tag2value ($hit{$a}{open}, \"description\")\
-;\n    \n      %Q=&xml2tag_list ($hit{$a}{body}, \"querySe\
-q\");\n        %M=&xml2tag_list ($hit{$a}{body}, \"matchS\
-eq\");\n       %E=&xml2tag_list ($hit{$a}{body}, \"expec\
-tation\");\n   %I=&xml2tag_list ($hit{$a}{body}, \"i\
-dentity\");\n  \n\n    for ($b=0; $b<$Q{n}; $b++)\n      \
-{\n        \n      \n      $qs=$Q{$b}{body};\n     $ms=\
-$M{$b}{body};\n            if ($seq eq\"\"){$seq=$qs;$L=l\
-ength($seq);}\n\n          $expectation=$E{$b}{body};\n\
-           $identity=$I{$b}{body};\n       \n              \n  \
-    $start=&tag2value ($Q{$b}{open}, \"start\");\n\
-           $end=&tag2value ($Q{$b}{open}, \"end\");\n    \
-  $startM=&tag2value ($M{$b}{open}, \"start\");\n      \
-    $endM=&tag2value ($M{$b}{open}, \"end\");\n          \
-  $coverage=(($end-$start)*100)/$L;\n      \n     # \
-print \"$id: ID: $identity COV: $coverage [$start \
-$end]\\n\";\n      \n      \n      if ($identity>$max\
-id || $identity<$minid || $coverage<$mincov){next;\
-}\n        # print \"KEEP\\n\";\n\n        \n      @lr1=(\
-split (//,$qs));\n         @lr2=(split (//,$ms));\n      \
-  $l=$#lr1+1;\n            for ($c=0;$c<$L;$c++){$p[$nhit\
-s][$c]=\"-\";}\n           for ($d=0,$c=0; $c<$l; $c++)\\
-n            {\n               $r=$lr1[$c];\n          if ( $r=~/[A-Za-z]/)\\
-n                {\n               \n              $p[$nhits][$d + $start-1]=$l\
-r2[$c];\n                  $d++;\n               }\n         }\n         \n        \\
-n          $identifyerL[$nhits]=$identifyer;\n     $com\
-ment[$nhits]=\"$ldb|$identifyer [Eval=$expectation\
-][id=$identity%][start=$startM end=$endM]\";\n    \
- $nhits++;\n     }\n      }\n    \n    $profile{n}=0\
-;\n    $profile{$profile{n}}{name}=$name;\n    $pr\
-ofile{$profile{n}}{seq}=$seq;\n    $profile {n}++;\
-\n    \n    for ($a=0; $a<$nhits; $a++)\n      {\n\
-       $n=$a+1;\n      $profile{$n}{name}=\"$name\\_$a\";\n    $\
-profile{$n}{seq}=\"\";\n       $profile{$n}{identifyer}=\
-$identifyerL[$a];\n    \n      $profile{$n}{comment}=$comm\
-ent[$a];\n     for ($b=0; $b<$L; $b++)\n         {\n       if \
-($p[$a][$b])\n       {\n               $profile{$n}{seq}.=$p[$a\
-][$b];\n             }\n           else\n            {\n               $profile{\
-$n}{seq}.=\"-\";\n           }\n         }\n      }\n    $pr\
-ofile{n}=$nhits+1;\n    \n    return %profile;\n  \
-}\n\nsub blast_xml2hit_list\n  {\n    my $string=(\
-@_[0]);\n    return &xml2tag_list ($string, \"hit\\
-");\n  }\nsub xml2tag_list  \n  {\n    my ($string\
-_in,$tag)=@_;\n    my $tag_in, $tag_out;\n    my %\
-tag;\n    \n    if (-e $string_in)\n      {\n  $str\
-ing=&file2string ($string_in);\n      }\n    else\\
-n      {\n     $string=$string_in;\n      }\n    $tag_\
-in1=\"<$tag \";\n    $tag_in2=\"<$tag>\";\n    $ta\
-g_out=\"/$tag>\";\n    $string=~s/>/>##1/g;\n    $\
-string=~s/</##2</g;\n    $string=~s/##1/<#/g;\n   \
- $string=~s/##2/#>/g;\n    @l=($string=~/(\\<[^>]+\
-\\>)/g);\n    $tag{n}=0;\n    $in=0;$n=-1;\n  \n \\
-n\n    foreach $t (@l)\n      {\n\n    $t=~s/<#//;\n   \
-$t=~s/#>//;\n  \n      if ( $t=~/$tag_in1/ || $t=~/$tag_\
-in2/)\n          {\n    \n         $in=1;\n        $tag{$tag{n}}{o\
-pen}=$t;\n         $n++;\n         \n    }\n   elsif ($t=~/$t\
-ag_out/)\n       {\n       \n\n            $tag{$tag{n}}{close}\
-=$t;\n     $tag{n}++;\n            $in=0;\n      }\n   elsif (\
-$in)\n   {\n      \n       $tag{$tag{n}}{body}.=$t;\n  \
-  }\n      }\n  \n    return %tag;\n  }\n\n\n\n\n"\
-,"use Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw\
-(USER);\nwhile (<>)\n  {\n    if ( /^>(\\S+)/)\n  \
-    {\n        if ($list{$1})\n          {\n       print \">$1_$li\
-st{$1}\\n\";\n     $list{$1}++;\n        }\n   else\n    {\
-\n         print $_;\n     $list{$1}=1;\n        }\n      }\
-\n    else\n      {\n  print $_;\n      }\n  }\n   \
-   \n","\n\n\nuse Env qw(HOST);\nuse Env qw(HOME);\
-\nuse Env qw(USER);\n\n\nopen (F,$ARGV[0]);\nwhile\
- ( <>)\n  {\n    @x=/([^:,;\\)\\(\\s]+):[^:,;\\)\\\
-(]*/g;\n    @list=(@list,@x);\n  }\n$n=$#list+1;\n\
-foreach $n(@list){print \">$n\\nsequence\\n\";}\n\\
-n\nclose (F);\n","\nopen (F, $ARGV[0]);\n\nwhile (\
- <F>)\n  {\n    @l=($_=~/(\\S+)/g);\n    \n    $na\
-me=shift @l;\n    \n    print STDOUT \"\\n>$name\\\
-n\";\n    foreach $e (@l){$e=($e eq \"0\")?\"O\":\\
-"I\";print \"$e\";}\n  }\nclose (F);\n\n                      \\
-n    \n","use Env qw(HOST);\nuse Env qw(HOME);\nus\
-e Env qw(USER);\n\n$tmp=\"$ARGV[0].$$\";\nopen (IN\
-, $ARGV[0]);\nopen (OUT, \">$tmp\");\n\nwhile ( <I\
-N>)\n  {\n    $file=$_;\n    $file=~s/\\r\\n/\\n/g\
-;\n    $file=~s/\\n\\r/\\n/g;\n    $file=~s/\\r\\r\
-/\\n/g;\n    $file=~s/\\r/\\n/g;\n    print OUT \"\
-$file\";\n  }\nclose (IN);\nclose (OUT);\n\nopen (\
-OUT, \">$ARGV[0]\");\nopen (IN, \"$tmp\");\n\nwhil\
-e ( <IN>)\n{\n  print OUT \"$_\";\n}\nclose (IN);\\
-nclose (OUT);\nunlink ($tmp);\n\n"};
-/*********************************COPYRIGHT NOTICE**********************************/
-/*© Centro de Regulacio Genomica */
-/*and */
-/*Cedric Notredame */
-/*Tue Oct 27 10:12:26 WEST 2009. */
-/*All rights reserved.*/
-/*This file is part of T-COFFEE.*/
-/**/
-/*    T-COFFEE is free software; you can redistribute it and/or modify*/
-/*    it under the terms of the GNU General Public License as published by*/
-/*    the Free Software Foundation; either version 2 of the License, or*/
-/*    (at your option) any later version.*/
-/**/
-/*    T-COFFEE is distributed in the hope that it will be useful,*/
-/*    but WITHOUT ANY WARRANTY; without even the implied warranty of*/
-/*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the*/
-/*    GNU General Public License for more details.*/
-/**/
-/*    You should have received a copy of the GNU General Public License*/
-/*    along with Foobar; if not, write to the Free Software*/
-/*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/
-/*...............................................                                                                                      |*/
-/*  If you need some more information*/
-/*  cedric.notredame@europe.com*/
-/*...............................................                                                                                                                                     |*/
-/**/
-/**/
-/*     */
-/*********************************COPYRIGHT NOTICE**********************************/