-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>:   <=> 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**********************************/