Next version of JABA
[jabaws.git] / binaries / src / tcoffee / t_coffee_source / perl_header_lib.h
1 char *PerlScriptName[]={"rec_sum.pl","count.pl","p\
2 rocess_list.pl","make_license.pl","CCsed.script","\
3 msa2bootstrap.pl","t_coffee_dpa","t_coffee_dpa2","\
4 tc_generic_method.pl","generic_method.tc_method","\
5 clustalw_method.tc_method","extract_from_pdb","ins\
6 tall.pl","clean_cache.pl","mocca","dalilite.pl","w\
7 ublast.pl","blastpgp.pl","RNAplfold2tclib.pl","fas\
8 ta_seq2RNAplfold_templatefile.pl","fasta_seq2hmmto\
9 p_fasta.pl","fasta_seq2consan_aln.pl","clustalw_al\
10 n2fasta_aln.pl","msf_aln2fasta_aln.pl","blast_aln2\
11 fasta_aln.pl","blast_xml2fasta_aln.pl","fasta_aln2\
12 fasta_aln_unique_name.pl","newick2name_list.pl","e\
13 xcel2fasta.pl","any_file2unix_file.pl","EndList"};\
14 char *PerlScriptFile[]={"use File::Copy;\nuse Env \
15 qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\n$\
16 x_field=0;\n$y_field=1;\n$interval=0;\n$file=\"std\
17 in\";\n$print_avg=1;\n$print_sd=0;\n$print_sum=0;\\
18 n$print_n=0;\nforeach $value ( @ARGV)\n    {\n  if \
19 ($value ne $ARGV[$np]) \n           {\n     ;\n     }\n \
20 elsif($value eq \"-print_all\")\n           {\n     $pri\
21 nt_sd=$print_avg=$print_n=$print_sum=1;\n           $np+\
22 +;\n        }\n elsif($value eq \"-print_sum\")\n          \
23  {\n        $print_sum=1;\n         $print_avg=0;\n         $\
24 np++;\n     }\n elsif($value eq \"-print_n\")\n   \
25   {\n       $print_n=1;\n           $print_avg=0;\n         $n\
26 p++;\n      }\n elsif($value eq \"-print_avg\")\n        \
27    {\n      $print_avg=1;\n         $print_avg=0;\n        \
28  $np++;\n           }\n elsif($value eq \"-sd\")\n          {\
29 \n          $print_sd=1;\n          $print_avg=0;\n         $np+\
30 +;\n        }\n elsif($value eq \"-h\")\n           {\n    \
31  $header=1;\n       $np++;\n        }\n elsif ($value e\
32 q \"-i\")\n         {\n     $interval= $ARGV[++$np];\n\
33             $np++;\n                }\n elsif ($value eq \"-r\")\
34 \n          {\n     $min= $ARGV[++$np];\n           $max= $AR\
35 GV[++$np];\n        $np++;\n                }\n \n      elsif ($v\
36 alue eq \"-x\")\n           {\n     $x_field= $ARGV[++$n\
37 p]-1;\n     $np++;\n                }\n elsif ($value eq \
38 \"-y\")\n           {\n       \n            while ($ARGV[$np+1]\
39  && !($ARGV[$np+1]=~/\\-/))\n         {\n               $y_field[\
40 $nyf++]=$ARGV[++$np]-1;\n               $y_field_set=1;\n            \
41  }\n\n      $np++;\n                }\n elsif ($value eq \\
42 "-file\")\n         {\n     $file= $ARGV[++$np];\n         \
43  $file_set=1;\n     $np++;\n                }       \n  el\
44 sif ( $value eq \"h\" ||  $value eq \"-h\" || $val\
45 ue eq \"-H\" || $value eq \"-help\" || $value eq \\
46 "help\")\n        {\n       print STDOUT \"data_analyse: \
47 Analyse and discretization of data\\n\";\n          pri\
48 nt STDOUT \"       -file:    <file containing the \
49 data to analyze>,.<def=STDIN>\\n\";\n       print ST\
50 DOUT \"       -x: <field containing the X>,.......\
51 ........<Def=0>\\n\";\n     print STDOUT \"       \
52 -y: <field containing the Y>,...............<Def=1\
53 >\\n\";\n           print STDOUT \"       -i:<Interval s\
54 ize on the X>,...............<Def=0>\\n\";\n        p\
55 rint STDOUT \"       -i:<0:only one interval>\\n\"\
56 ;\n         print STDOUT \"       -r:<Range of the X>\\
57 \n\";\n     print STDOUT \"       -sd: print stand\
58 ard deviation on the Y\";\n         print STDOUT \"   \
59     -h  : print column header \\n\";\n      exit (0\
60 );\n      }\n   elsif ($value=~/-/)\n     {\n       print \\
61 "$value is not a valid FLAG[FATAL]\\n\";\n          exi\
62 t (0);\n           } \n elsif ($list eq \"\") \n            {\n \
63     $file=$ARGV[$np];\n     $np++;\n        }\n \n      \n\
64       }\n\n\n\n\n\nif ($file eq \"stdin\")\n    {\n     $\
65 remove_file=1;\n        $file=\"tmp$$\";\n      open (F, \">$f\
66 ile\");\n       while (<STDIN>)\n               {\n             print F $_;\n           }\
67 \n      close (F);\n     \n     ;}\n\n\nopen(F,$file);\n\nif (\
68 $interval)\n  {\n    $interval_size=($max-$min)/$i\
69 nterval;\n  }\nwhile (<F>)\n  {\n    $line=$_;\n  \
70   if (!/\\S/){next;}\n    @list=($line=~/(\\S+)/g)\
71 ;\n    \n    if ($interval==0){$bin=0;}\n    else{\
72 $bin=int (($list[$x_field]-$min)/($interval_size))\
73 ;}\n\n    \n    if ($bin && $bin==$interval){$bin-\
74 -;}\n    for ( $a=0; $a<$nyf; $a++)\n      {\n  $su\
75 m{$a}{$bin}+=$list[$y_field[$a]];\n     $sum2{$a}{$bin\
76 }+=$list[$y_field[$a]]*$list[$y_field[$a]];\n   $n{$\
77 a}{$bin}++;\n      }\n  }\n\nif (!$interval){$inte\
78 rval=1;}\nfor ( $a=0; $a<$interval; $a++)\n  {\n  \
79   printf ( \"%3d %3d \", $interval_size*$a, $inter\
80 val_size*($a+1));\n    for ( $b=0; $b<$nyf; $b++)       \
81 \n      {\n     $i=$interval*$a;\n      if ( $n{$b}{$a}==0)\
82 \n        {\n       $avg=0;\n       $sd=0;\n      }\n   else\n   \
83  {\n        $avg=$sum{$b}{$a}/$n{$b}{$a};\n         $sd=s\
84 qrt($sum2{$b}{$a}*$n{$b}{$a}-$sum{$b}{$a}*$sum{$b}\
85 {$a})/($n{$b}{$a}*$n{$b}{$a});\n          }\n   if ($print_\
86 n) {printf \"%10.4f \", $n{$b}{$a};}\n  if ($print_\
87 sum){printf \"%10.4f \", $sum{$b}{$a};}\n       if ($pri\
88 nt_avg){printf \"%10.4f \", $avg}\n     if ($print_sd)\
89  {printf \"%10.4f \", $sd;}\n      }\n    printf (\
90 \"\\n\");\n  }\n\n\nif ( $remove_file){unlink $fil\
91 e;}\n","use File::Copy;\nuse Env qw(HOST);\nuse En\
92 v qw(HOME);\nuse Env qw(USER);\n\nforeach $v (@ARG\
93 V){$cl.=$v;}\n\n\nif ( $cl=~/-k(\\d+)/){$k=$1;}\ne\
94 lse {$k=1;}\nif ( $cl=~/-w(\\d+)/){$w=$1;}\nelse {\
95 $w=-1;}\nif ( $cl=~/-p(\\d+)/){$p=$1;}\nelse {$p=-\
96 1;}\n\nwhile (<STDIN>)\n  {\n    @l=($_=~/(\\S+)/g\
97 );\n    $v=$l[$k-1];\n    if ( !$h{$v}){@ll=($v, @\
98 ll);}\n    \n    if ( $w==-1)\n      {$h{$v}++;}\n\
99     else\n      {$h{$v}+=$l[$w-1];}\n\n    if ($p!\
100 =-1){$print{$v}=$l[$p-1];}\n\n  }\nforeach $v (@ll\
101 )\n  {\n    print \"$v $print{$v} $h{$v}\\n\";\n  \
102 }\n","\nuse Env qw(HOST);\nuse Env qw(HOME);\nuse \
103 Env qw(USER);\n$random_tag=int (rand 10000)+1;\n$u\
104 nique_prefix=\"$$.$HOST.$random_tag\";\n$queue=\"d\
105 istillery.and.mid\";\n$monitor=0;\n$stderr_file=\"\
106 /dev/null\";\n$stdio_file=\"/dev/null\";\n$log_fil\
107 e=\"/dev/null\";\n$pause_time=0;\n$max_sub_jobs=60\
108 ;\n$min_sub_jobs=30;\n$output_all=0;\n$var='\\$';\\
109 n\nforeach $value ( @ARGV)\n    {\n     if ($value ne \
110 $ARGV[$np]) \n      {\n     ;\n     }\n elsif ($val\
111 ue eq \"-max_sub_jobs\")\n          {\n     $max_sub_jo\
112 bs= $ARGV[++$np];\n         $np++;\n                }   \n      elsi\
113 f ($value eq \"-min_sub_jobs\" )\n          {\n     $mi\
114 n_sub_jobs= $ARGV[++$np];\n         $np++;\n                }\
115 \n      elsif ($value eq \"-para\")\n       {\n     $para\
116 =1;\n       $monitor=1;\n           $np++;\n                }\n e\
117 lsif ($value eq \"-monitor\") \n            {\n     $moni\
118 tor=1;\n            $np++;\n        }\n elsif ($value eq \"-\
119 no_monitor\") \n            {\n     $monitor=0;\n           $np\
120 ++;\n       }\n elsif ($value eq \"-queue\")\n      {\
121 \n          $queue=$ARGV[++$np];\n          $np++;\n        }   \\
122 n       elsif ($value eq \"-stderr_file\")\n        {\n    \
123  $stderr_file=$ARGV[++$np];\n       $np++;\n        }\n\
124         elsif ($value eq \"-stdio_file\")\n         {\n     $\
125 stdio_file=$ARGV[++$np];\n          $np++;\n        }\n el\
126 sif ($value eq \"-output_all\")\n           {\n     $out\
127 put_all=1;\n        $np++;\n        }\n elsif ($value eq\
128  \"-pause\") \n     {\n     $pause_time=$ARGV[++$n\
129 p];\n       $np++;\n        }\n elsif ($value eq \"-log\
130 \")\n         {\n              $log=1;\n               \n              \
131 if ($ARGV[$np+1]=~/\\-\\S+/) \n           {\n             $\
132 log_file=\"stderr\";\n            }\n          else \\
133 n                 {\n             $log_file=$ARGV[++$np]; \n              +\
134 +$np;\n          \n               }\n         }\n       elsif ( $valu\
135 e eq \"-com\")\n            {\n         \n              if (!$ARGV[$np+1]=~/\
136 ^\\'/) { $com=$ARGV[++$np];}\n          else {$com=$ARGV[+\
137 +$np];}\n\n          $np++;\n       }\n elsif ( $value e\
138 q \"-check\")\n   {\n       \n      if (!$ARGV[$np+1]\
139 =~/^\\'/) { $check=$ARGV[++$np];}\n         else {$che\
140 ck=$ARGV[++$np];}\n         $np++;\n      }\n   elsif ($com\
141  eq \"\") \n        {\n     $com_set=1;\n           $com=$A\
142 RGV[$np];\n         \n      $np++;\n        }\n elsif ($li\
143 st eq \"\") \n      {\n     $list_set=1;\n          $lis\
144 t=$ARGV[$np];\n     $np++;\n        }\n elsif ( $var_\
145 set eq \"\")\n      {\n     $var_set=1;\n           $var=\
146 $ARGV[$np];\n       $np++;\n        }\n }\n\n\n\n\nif (\
147  $com eq \"\"){print \"You Need to Provide a Comma\
148 nd [FATAL]\\n\";\n            die;\n         }\n\n\n\nif (\
149 $list_set==0) \n    {\n    $x= int (rand 100000)+1\
150 ;\n    $tmp_file_name=\"tmp_file_$x\";\n    open (\
151  TMP, \">$tmp_file_name\");\n    while (<STDIN>)\n\
152       {\n       print TMP $_;\n      }\n    close (TMP);\
153 \n    open (F, $tmp_file_name);\n    }\nelse \n   \
154  {\n    open (F, $list);\n    }\n\nif ($para==0) \\
155 n    {\n\n     @tc_list= <F>;\n     close (F); \n \
156     \n     foreach $val(@tc_list) \n        {\n      \
157  \n           \n              \n              $loc_com=$com;\n       \
158  if ($check){$loc_check=$check;}\n            \n              \
159 @i_val=($val=~/([^\\s]+)/g);\n        \n              if (\
160  $#i_val==0)\n          {\n               if ($check){$loc_check=~s/$\
161 var/$i_val[0]/g;}\n               $loc_com=~s/$var/$i_val[0]/\
162 g;\n            }\n           else\n            {\n               for ($n=1; $n<=$#i_\
163 val+1;$n++ )\n              {\n               \n                      $sub=\"$v\
164 ar$n\";\n                     \n                      $loc_com=~s/$sub/$i_val\
165 [$n-1]/g;\n                   if ($check){$loc_check=~s/$var/\
166 $i_val[0]/g;}\n             }\n         }\n           if ( $check &&\
167  -e $loc_check)\n               {\n               print STDERR \"skipping \
168 $loc_com...\\n\";\n               }\n         else\n            {\n               sy\
169 stem \"$loc_com\";\n            }\n         }\n    exit;\n    }\\
170 n\nelsif ($para==1) \n    {\n    print STDERR \"do\
171  parallel execution of: \\\"$com $list\\\"\\n\";\n\
172     \n    if ($log==1) \n       {\n     if ($log_file eq \"s\
173 tdout\" || $log_file eq \"stderr\" ) \n         {\n             $log\
174 _file=\"\";\n           }\n\n        else \n            {\n             s\
175 ystem \"echo LOG FILE> $log_file\";\n           \n              \
176 }\n     }\n    else     \n      {\n     open ( OUT, \">/dev/null\")\
177 ;\n     }\n     \n    \n    $id=0;\n    $n_sub=0;\n    whi\
178 le ($val=<F>) \n            {               \n      $job_log[$i\
179 d]=\"$HOME/tmp/$unique_prefix.$id.log_file\";\n   \
180   \n        $job=$unique_prefix.\"_$id\";\n         open \
181 (JOB, \">$job\");\n         \n      $loc_com=$com;\n      \
182   chop $val;\n\n            $loc_com=~s/\\$/$val/g;\n    \n\
183             print JOB \"#!/bin/csh\\n\";\n          print JOB \
184 \"#\\$ -cwd\\n\";\n         print JOB \"#\\$ -N $uniqu\
185 e_prefix\\n\";\n            if ($queue && !($queue eq \" \
186 \")) {print JOB \"#\\$ -l $queue\\n\";}\n           prin\
187 t JOB \"#\\n\";     \n            print JOB \"$loc\
188 _com\\n\";\n        print JOB \"echo FINISHED  >> $jo\
189 b_log[$id]\\n\";\n          print JOB \"pwd\\n\";\n        \
190  \n         close (JOB);\n          if ( $output_all==1)\n      \
191         {\n             system \"qsub $job >  $unique_prefix\";         \n      \
192         }\n         else\n              {system \"qsub $job -e $st\
193 derr_file -o $stdio_file >$unique_prefix\";           \
194   \n            } \n\n\n\n          print STDERR \"$id: $o\
195 utput_all\\n\";\n           $n_sub++;\n     if ( $max_su\
196 b_jobs && $n_sub==$max_sub_jobs) \n             {\n             $n_sub=m\
197 onitor_process($min_sub_jobs,@job_log);                  \n             \n      \
198         }       \n         \n            unlink $unique_prefi\
199 x;\n        sleep $pause_time;\n            $id++;\n        }\n\
200 \n    close (OUT);\n    close (F);\n\n    print ST\
201 DERR \"Your $id Jobs Have Been Submited (NAME=$uni\
202 que_prefix)\\n\";\n    monitor_process (0, @job_lo\
203 g);\n    foreach $file(@job_log) {if (-e $file) {u\
204 nlink($file);}}\n    \n    }\n\nsub monitor_proces\
205 s ( @job_list)\n    {\n    my (@job_list)=@_;\n   \
206  my $min_sub_jobs=shift (@job_list);\n    my $n_su\
207 b_jobs;\n    my $finished;\n    my $n=0;\n\n    $n\
208 _sub_jobs=-1;\n    $finished=0;\n    print STDERR \
209 \"\\nMonitor Batch: [$min_sub_jobs]\";\n       \n \
210    while (!$finished && (($n_sub_jobs>$min_sub_job\
211 s)|| $n_sub_jobs==-1) ) \n      {\n     $finished=1;\n  $n_s\
212 ub_jobs=0;\n    $n=0;\n foreach $file (@job_list)\n      \
213        {\n      \n              if (-e $file){;}\n              else \n             {\\
214 n                   $finished=0; $n_sub_jobs++;\n                   }\
215 \n              }\n     system \"sleep 1\";\n        }\n   \
216  \n    return $n_sub_jobs;\n    }\n    \n    \nif \
217 ($tmp_file_name){unlink($tmp_file_name);}\n","\n\n\
218 foreach ($np=0; $np<=$#ARGV; $np++)\n    {\n    $v\
219 alue=$ARGV[$np];\n\n    if ($value eq \"-file\")\n\
220       {\n      $file= $ARGV[++$np];\n      }\n    \
221 elsif ($value eq \"-type\")\n      {\n        $typ\
222 e= $ARGV[++$np];\n      }\n    elsif ($value eq \"\
223 -institute\")\n      {\n        $institute= $ARGV[\
224 ++$np];\n      }\n    elsif ($value eq \"-author\"\
225 )\n      {\n        $author= $ARGV[++$np];\n      \
226 }\n    elsif ($value eq \"-date\")\n      {\n     \
227    $date= $ARGV[++$np];\n      }\n     elsif ($val\
228 ue eq \"-program\")\n      {\n        $program= $A\
229 RGV[++$np];\n      }\n    elsif ($value eq \"-emai\
230 l\")\n      {\n        $email= $ARGV[++$np];\n    \
231   }\n    else\n      {\n        print \"$value is an unko\
232 wn argument[FATAL]\\n\";\n      exit (1);\n      }\n  }\
233 \n\n\n\nopen F, $file || die;\nprint $INSTITUTE;\n\
234 if ( $type eq \"c\"){print \"/********************\
235 *************COPYRIGHT NOTICE*********************\
236 *************/\\n\";}\nif ( $type eq \"perl\"){pri\
237 nt \"#################################COPYRIGHT NO\
238 TICE#################################/\\n\";}\nif \
239 ( $type eq \"txt\"){print \"----------------------\
240 ------------COPYRIGHT NOTICE----------------------\
241 -----------/\\n\";}\n\n\nwhile (<F>)\n  {\n  s/\\$\
242 INSTITUTE/$institute/g;\n  s/\\$AUTHOR/$author/g;\\
243 n  s/\\$DATE/$date/g;\n  s/\\$PROGRAM/$program/g; \
244  \n  s/\\$EMAIL/$email/g;  \n  if ( $type eq \"txt\
245 \"){print $_;}\n  elsif ($type eq \"c\"){chop $_; \
246 print \"\\/*$_*\\/\\n\";}\n  elsif ($type eq \"per\
247 l\"){print \"\\#$_\";}\n}\nclose (F);\nif ( $type \
248 eq \"c\"){print \"/*******************************\
249 **COPYRIGHT NOTICE********************************\
250 **/\\n\";}\nif ( $type eq \"perl\"){print \"######\
251 ###########################COPYRIGHT NOTICE#######\
252 ##########################/\\n\";}\nif ( $type eq \
253 \"txt\"){print \"---------------------------------\
254 -COPYRIGHT NOTICE---------------------------------\
255 /\\n\";}\n\n","\nwhile (<>)     \n      {\n     s/\\=cc/1234567\
256 89/g;\n s/\\bcc/\\$\\(CC\\)/g;\n        s/123456789/\\=cc\
257 /g;\n   print $_;\n     }\n\n","$version=\"1.00\";\n$rse\
258 ed= int(rand(100000))+1;\n\n\nif ( $#ARGV==-1)\n  \
259 {\n    print \"msa2bootstrap -i <input_file> -o <o\
260 ut_file> -input <seq|msa|matrix|tree> -n <N-Boostr\
261 ap> -o <outtree> -tmode <nj|upgma|parsimony|ml> -d\
262 mode <kimura> -alignpg <t_coffee | muscle | clusta\
263 lw> -rtree <file> -stype <prot|cdna|dna> -recomput\
264 e -system <cygwin|unix>\";\n    print \"\\n\\t-i: \
265 input file, can be sequneces, msa, matrix, trees, \
266 type is specified via -input\";\n    print \"\\n\\\
267 t-input: Type of input data\";\n    print \"\\n\\t\
268 \\tmsa: msa in fasta format\";\n    print \"\\n\\t\
269 \\tseq: compute an msa with -alignpg\";\n    print\
270  \"\\n\\t\\tmatrix: phylipp distance matrix fed di\
271 rectly to method -tmode [caveat: tmode=nj or upgma\
272 ]\";\n    print \"\\n\\t\\ttree: list of newick tr\
273 ees directly fed to consence in order to generate \
274 a bootstraped tree\";\n    \n    print \"\\n\\t-n:\
275  number of bootstrap replicates\";\n    print \"\\\
276 n\\t-o: name of the output tree. Files are not ove\
277 rwritten. Use -recompute to overwrite existing fil\
278 e\";\n    print \"\\n\\t-tmode: tree mode: nj|upgm\
279 a|parsimony|ml\";\n    print \"\\n\\t-dmode: dista\
280 nce mode\";\n    print \"\\n\\t-alignpg: program f\
281 or aligning sequences (t_coffee=default)\";\n    p\
282 rint \"\\n\\t-rtree: replicate tree file (default:\
283  no file)\";\n    print \"\\n\\t-rmsa: replicate m\
284 sa file (default: no file)\";\n    print \"\\n\\t-\
285 rmat: replicate matrix file (default: no file)\";\\
286 n    print \"\\n\\t-stype: sequence type: protein,\
287  dna or cdna\";\n    print \"\\n\\t-recompute: for\
288 ce files to be overwritten\";\n    print \"\\n\\t-\
289 system: cygwin|unix\";\n      \n\n    \n    &my_ex\
290 it (EXIT_FAILURE);\n  }\nforeach $arg (@ARGV){$com\
291 mand.=\"$arg \";}\n\nprint \"CLINE: $command\\n\";\
292 \n$threshold=100;\n$trim_msa=0;\n$stype=\"prot\";\\
293 nprint \"msa2bootstrap \";\n\n$system=\"cygwin\";\\
294 nif(($command=~/\\-system (\\S+)/))\n  {\n    $sys\
295 tem=$1;\n    if ( $system eq \"cygwin\")\n      {\\
296 n       $exec_extension=\".exe\";\n      }\n    elsif ( \
297 $system eq \"unix\")\n      {\n $exec_extension=\"\
298 \";\n   print \"system=Unix\";die;\n      }\n    els\
299 e\n      {\n    print \"msa2boostrap: -system=$system\
300  is an unknown mode [FATAL]\\n\"; die;\n      }\n \
301    \n    print \"-system $system \";\n  }\nif(($co\
302 mmand=~/\\-stype (\\S+)/))\n  {\n    $stype=$1;\n \
303  }\nprint \"-stype=$stype \";\n\n\n\nif(($command=\
304 ~/\\-i (\\S+)/))\n  {\n    $msa=$1;\n    print \"-\
305 i $msa \";\n  }\n\nif(($command=~/\\-rtree (\\S+)/\
306 ))\n  {\n    $rtree=$1;\n    print \"-rtree=$rtree\
307  \";\n  }\n\nif(($command=~/\\-rmsa (\\S+)/))\n  {\
308 \n    $rmsa=$1;\n  }\nif(($command=~/\\-rmat (\\S+\
309 )/))\n  {\n    $rmat=$1;\n  }\n$input=\"seq\";\nif\
310 (($command=~/\\-input (\\S+)/))\n  {\n    $input=$\
311 1;\n  }\nprint \"-input=$input \";\n\n$dmode=\"kim\
312 ura\";\nif(($command=~/\\-dmode (\\S+)/))\n  {\n  \
313   $dmode=$1;\n  }\nprint \"-dmode=$dmode \";\n$ali\
314 gnpg=\"muscle\";\nif(($command=~/\\-alignpg (\\S+)\
315 /))\n  {\n    $alignpg=$1;\n  }\nprint \"-alignpg=\
316 $dmode \";\n\n$tmode=\"nj\";\nif(($command=~/\\-tm\
317 ode (\\S+)/))\n  {\n    $tmode=$1;\n  }\nprint \"-\
318 tmode=$tmode \";\n$recompute=0;\nif(($command=~/\\\
319 -recompute/))\n  {\n    $recompute=1;\n    print \\
320 "-recompute \";\n  }\n\n$out=$msa;\n$out=~s/\\..*/\
321 /;\n$out.=\".bph\";\nif(($command=~/\\-o (\\S+)/))\
322 \n  {\n    $out=$1;\n    \n  }\nprint \"-out=$out \
323 \";\nif (-e $out && !$recompute)\n  {\n    print \\
324 "\\nNo Computation Required $out already exists\\n\
325 \";\n    &my_exit (EXIT_SUCCESS);\n    \n  }\n\n$n\
326 =100;\nif(($command=~/\\-n (\\d+)/))\n  {\n    $n=\
327 $1;\n  }\nprint \"-n=$n \";\n$seed=3;\nif(($comman\
328 d=~/\\-s (\\d+)/))\n  {\n    $seed=$1;\n  }\nprint\
329  \"-s=$seed\";\n\nif(($command=~/\\-run_name (\\d+\
330 )/))\n  {\n    $suffix=$1;\n  }\nelse\n  {\n    $m\
331 sa=~/([^.]+)/;\n    $suffix=$1;\n  }\nprint \"-run\
332 _name=$suffix\";\n\n\nif ( $input eq \"seq\")\n  {\
333 \n    $seq=$msa;\n    $msa=\"$suffix.prot_msa\";\n\
334     \n    if ($stype eq \"cdna\")\n      {\n    $cdna\
335 _seq=$seq;\n    $clean_cdna_seq=&vtmpnam();\n   $seq=&v\
336 tmpnam();\n     `t_coffee -other_pg seq_reformat -in $\
337 cdna_seq -action +clean_cdna >$clean_cdna_seq`;\n       \
338 `t_coffee -other_pg seq_reformat -in $clean_cdna_s\
339 eq -action +translate >$seq`;\n \n      }\n\n    i\
340 f (!-e $msa || $recompute)\n      {\n   print \"\\n#\
341 ####   Compute an MSA With $alignpg\\n\";\n     \n      if \
342 ( $alignpg eq \"t_coffee\")\n     {`$alignpg $seq -o\
343 utfile=$msa >/dev/null 2>/dev/null`;}\n elsif ( $a\
344 lignpg eq \"muscle\")\n   {\n       `$alignpg -in $s\
345 eq > $msa 2>/dev/null`;\n         }\n   elsif ( $alignpg e\
346 q \"clustalw\")\n         {\n       `$alignpg -infile=$seq\
347  -outfile=$msa -quicktree >/dev/null 2>/dev/null`;\
348 \n        }\n   elsif ( $align eq \"mafft\")\n    {\n       \
349 `$alignpg $seq > $msa >/dev/null 2>/dev/null`;\n         \
350  }\n    else\n    {\n       `$alignpg -in=$seq -outfile=\
351 $msa`;\n          }\n      }\n    if (!-e $msa)\n      {\\
352 n       print \"\\nError: $alignpg Could Not produce the\
353  MSA $msa [FATAL]\\n\";\n      }\n\n    if ($stype\
354  eq \"cdna\")\n      {\n        $msa2=\"$suffix.cdna_msa\\
355 ";\n    `t_coffee -other_pg seq_reformat -in $clean_c\
356 dna_seq -in2 $msa -action +thread_dna_on_prot_aln \
357 -output fasta_aln  >$msa2`;\n   $msa=$msa2;\n      }\
358 \n    \n    $input=\"msa\";\n  }\n\n\n\n$seqboot_o\
359 =&vtmpnam();\n$seqboot_c=&vtmpnam();\n\n$protdist_\
360 o=&vtmpnam();\n$protdist_c=&vtmpnam();\nif ( $inpu\
361 t eq \"msa\")\n  {\n    if ($tmode eq \"nj\" || $t\
362 mode eq \"upgma\"){$input=\"matrix\";}\n    \n    \
363 $lmsa= &vtmpnam ();\n    `t_coffee -other_pg seq_r\
364 eformat -in $msa -output phylip_aln > $lmsa`;\n   \
365  \n    if ( -e \"outfile\"){unlink (\"outfile\");}\
366 \n    # run seqboot\n  \n    if ( $n>1)\n      {\n\
367         print \"Run SeqBoot .....\";\n  open (F, \">$seqbo\
368 ot_c\");\n      print F \"$lmsa\\nR\\n$n\\nY\\n$seed\\n\
369 \";\n   close (F);\n    `seqboot$exec_extension  < $seq\
370 boot_c`;\n      if ( -e \"outfile\"){ print \"[OK]\\n\"\
371 ;}\n    else { print \"[FAILED]\\n\";&my_exit (EXIT_F\
372 AILURE);}\n     `mv outfile $seqboot_o`;\n      }\n   \
373  else\n      {\n        `cp $lmsa $seqboot_o`;\n      }\n\
374 \n    if ($rmsa){`cp $seqboot_o $rmsa`;}\n    \n  \
375   if ($tmode eq \"nj\" || $tmode eq \"upgma\")\n  \
376     {\n if ( $stype eq \"prot\")\n        {\n       # run\
377  protdist\n         print \"Run Protdist [dmode=$dmode\
378 ]\";\n      if ($dmode eq \"kimura\")\n       {\n               \
379 $dmode=\"P\\nP\\nP\";\n       }\n           else\n           \
380  {\n            print \"\\n$dmode is an unknown mode for Pro\
381 tdist [FATAL:msa2bootstrap.pl]\\n\";\n          &my_exit (\
382 EXIT_FAILURE);\n              }\n           open (F, \">$protdi\
383 st_c\");\n          if ($n>1){print F \"$seqboot_o\\n$d\
384 mode\\nM\\nD\\n$n\\nY\\n\";}\n      else {printf F \
385 \"$seqboot_o\\n$dmode\\nY\\n\";}\n          close (F);\\
386 n           `cp $protdist_c pd_comm`;\n     `protdist$ex\
387 ec_extension  < $protdist_c`;\n     if ( -e \"outf\
388 ile\"){ print \"[OK]\\n\";}\n       else { print \"[\
389 FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n            `mv o\
390 utfile $protdist_o`;\n   \n       }\n   elsif ( $stype eq\
391  \"cdna\" || $stype eq \"dna\")\n         {\n       print \
392 \"Run dnadist [dmode=default\";\n           open (F, \">\
393 $protdist_c\");\n           if ($n>1){print F \"$seqboot\
394 _o\\nM\\nD\\n$n\\nY\\n\";}\n        else {printf F \"\
395 $seqboot_o\\nY\\n\";}\n     close (F);\n            `prot\
396 dist$exec_extension  < $protdist_c`;\n      if ( -e\
397  \"outfile\"){ print \"[OK]\\n\";}\n        else { pr\
398 int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n   \
399   `mv outfile $protdist_o`;\n     }\n      }\n  }\ne\
400 lsif ( $input eq \"matrix\")\n  {\n    $protdist_o\
401 =&vtmpnam();\n    print \"MSA: $msa\\n\";\n    `cp\
402  $msa $protdist_o`;\n    $n=1;\n  }\n\n\n\n\n\n$nb\
403 _o=&vtmpnam();\n$nb_c=&vtmpnam();\nif ($input eq \\
404 "matrix\" && $tmode ne \"parsimony\" && $tmode ne \
405 \"ml\")\n  {\n    print \"Run neighbor [tmode=$tmo\
406 de]\";\n\n    if ($tmode eq \"nj\")\n      {\n  $tm\
407 ode=\"\\nN\\nN\";\n      }\n    elsif ( $tmode eq \
408 \"upgma\")\n      {\n   $tmode = \"\\nN\";\n      }\\
409 n    else\n      {\n    print \"\\n ERROR: $tmode is \
410 an unknown tree computation mode\\n\";\n        &my_exit \
411 (EXIT_FAILURE);\n      }\n\n    open (F, \">$nb_c\\
412 ");\n    if ($n>1){print F \"$protdist_o$tmode\\nM\
413 \\n$n\\n$seed\\nY\\n\";}\n    else {print F \"$pro\
414 tdist_o$tmode\\nY\\n\";}\n    close (F);\n\n    `n\
415 eighbor$exec_extension  < $nb_c`;\n    if ( -e \"o\
416 uttree\"){ print \"[Neighbor OK]\\n\";}\n    else \
417 { print \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\\
418 n    `mv outtree $nb_o`;\n    unlink (\"outfile\")\
419 ;\n  }\nelsif ($input eq \"msa\" && $tmode eq \"pa\
420 rsimony\")\n  {\n    if ( -e \"outfile\"){unlink (\
421 \"outfile\");}\n    if ( -e \"outtree\"){unlink (\\
422 "outtree\");}\n    \n    if ($stype eq \"prot\")\n\
423       {\n       print \"Run protpars [tmode=$tmode]\";\n\
424         open (F, \">$nb_c\");\n if ($n>1){print F \"$seqb\
425 oot_o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n    else \
426 {print F \"$seqboot_o\\nY\\n\";}\n      close (F);\n    `p\
427 rotpars$exec_extension  < $nb_c`;\n      }\n    el\
428 sif ( $stype eq \"dna\" || $stype eq \"cdna\")\n  \
429     {\n print \"Run dnapars [tmode=$tmode]\";\n op\
430 en (F, \">$nb_c\");\n   if ($n>1){print F \"$seqboot\
431 _o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n       else {pr\
432 int F \"$seqboot_o\\nY\\n\";}\n close (F);\n    `dnap\
433 ars$exec_extension  < $nb_c`;\n      }\n    if ( -\
434 e \"outtree\"){ print \"[OK]\\n\";}\n    else { pr\
435 int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n   \
436  `mv outtree $nb_o`;\n   unlink (\"outfile\");\n  \
437 }\nelsif ($input eq \"msa\" && $tmode eq \"ml\")\n\
438   {\n    if ( -e \"outfile\"){unlink (\"outfile\")\
439 ;}\n    if ( -e \"outtree\"){unlink (\"outtree\");\
440 }\n    \n    if ($stype eq \"prot\")\n      {\n pr\
441 int \"Error: ML impossible with Protein Sequences \
442 [ERROR]\";\n    &my_exit (EXIT_FAILURE);\n      }\n  \
443   elsif ( $stype eq \"dna\" || $stype eq \"cdna\")\
444 \n      {\n     print \"Run dnaml [tmode=$tmode]\";\n   \
445 open (F, \">$nb_c\");\n if ($n>1){print F \"$seqbo\
446 ot_o\\nM\\nD\\n$n\\n$seed\\n10\\nY\\n\";}\n     else {\
447 print F \"$seqboot_o\\nY\\n\";}\n       close (F);\n    `dn\
448 aml$exec_extension  < $nb_c`;\n      }\n    if ( -\
449 e \"outtree\"){ print \"[OK]\\n\";}\n    else { pr\
450 int \"[FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n   \
451  `mv outtree $nb_o`;\n   unlink (\"outfile\");\n  \
452 }\n\n\nelse\n  {\n    `cp $msa $nb_o`;\n    $n=2;\\
453 n  }\n\nif ($rmsa && -e $seqboot_o){print \"\\nOut\
454 put List of $n Replicate MSA: $rmsa\\n\";`cp $seqb\
455 oot_o $rmsa`;}\nif ($rmat && -e $protdist_o){print\
456  \"\\nOutput List of $n Replicate MATRICES: $rmat\\
457 \n\";`cp $protdist_o $rmat`;}\nif ($rtree && -e $n\
458 b_o){print \"\\nOutput List of $n Replicate TREES:\
459  $rtree\\n\";`cp $nb_o $rtree`;}\n\n\n\n$con_o=&vt\
460 mpnam();\n$con_c=&vtmpnam();\nif ($n >1)\n  {\n   \
461  print \"Run Consense.....\";\n    open (F, \">$co\
462 n_c\");\n    print F \"$nb_o\\nY\\n\";\n    close \
463 (F);\n    `consense$exec_extension  < $con_c`;\n  \
464   if ( -e \"outfile\"){ print \"[OK]\\n\";}\n    e\
465 lse { print \"[FAILED]\\n\";&my_exit (EXIT_FAILURE\
466 );}\n    `mv outtree $con_o`;\n    unlink (\"outfi\
467 le\");\n  }\nelse\n  {\n    `cp $nb_o $con_o`;\n  \
468 }\n\n\n`cp $con_o $out`;\nif ( !-e $out)\n  {\n   \
469  print \"Tree Computation failed [FAILED]\\n\";\n \
470    &my_exit (EXIT_FAILURE);\n  }\nelsif ($n>1)\n  \
471 {\n    print \"\\nOutput Bootstrapped Tree: $out\\\
472 n\";\n    $avg=`t_coffee -other_pg seq_reformat -i\
473 n $out -action +avg_bootstrap`;\n    $avg=~s/\\n//\
474 g;\n    print \"$avg\\n\";\n  }\nelse\n  {\n    pr\
475 int \"\\nOutput Tree: $out\\n\";\n  }\n\nopen (F, \
476 \"$out\");\nwhile (<F>)\n  {\n    \n    $tree.=$_;\
477 \n  }\nclose (F);\n$tree=~s/\\n//g;\nprint \"BPH: \
478 $tree\\n\";\n\n\n&my_exit (EXIT_SUCCESS);\n\nsub m\
479 y_exit \n  {\n    my $m=@_[0];\n    &clean_vtmpnam\
480 ();\n    exit ($m);\n  }\nsub vtmpnam \n  {\n    m\
481 y $file;\n\n\n    $ntmp++;\n    $file=\"tmp4msa2bo\
482 otstrap.$rseed.$$.$ntmp\";\n    \n    push (@tmpfi\
483 le, $file);\n    return $file;\n  }\nsub clean_vtm\
484 pnam \n  {\n    my $t;\n    foreach $t (@tmpfile)\\
485 n      {\n      if ( -e $t){unlink ($t)};\n      }\n  }\
486 \n","use Env;\n$seq_reformat=\"t_coffee -other_pg \
487 seq_reformat \";\n$VersionTag=\"1.00\";\n$step=1;\\
488 n$unset=\"\";\n$scoreT1=$scoreT2=$nseqT=$dp_limit=\
489 $unset;\n@tl=();\nchomp($tc_version=`t_coffee -ver\
490 sion`);$tc_version=~s/PROGRAM: //;\n\n\nprint STDE\
491 RR \"\\n******************************************\
492 ***********************\";\nprint STDERR \"\\n*   \
493         HIGH LEVEL PROGRAM: T-COFFEE_DPA Version $\
494 VersionTag\";\nprint STDERR \"\\n*           LOW  \
495 LEVEL PROGRAM: $tc_version \";\nprint STDERR \"\\n\
496 **************************************************\
497 ***************\";\n\nif (!@ARGV)\n  {\n    print \
498 \"t_coffee_dpa accepts every t_coffee_flag.\\nType\
499  t_coffee to obtain a list\\n\";\n    print \"Requ\
500 ires $TC_VERSION\\n\";\n    print \"Requires \";\n\
501     print \"t_coffee_dpa specific flags:\\n\";\n  \
502   print \"\\t-dpa_master_aln....................Ma\
503 ster alignment: provided OR computed\\n\";\n    pr\
504 int \"\\t-dpa_master_aln....................By def\
505 ault, Computed with t_coffee -very_fast\\n\";\n   \
506  print \"\\t-dpa_master_aln=<file>.............Use\
507  file, (must be an aln in Fasta or ClustalW\\n\";\\
508 n    print \"\\t-dpa_master_aln=<program>.........\
509 .Compute aln with pg -in seq -out aln`\\n\";\n    \
510 print \"\\t-dpa_maxnseq.......................Maxi\
511 mum number of sequences in subgroups\\n\";\n    pr\
512 int \"\\t-dpa_min_score1....................Minimu\
513 m Id for two sequences to be grouped in ref_aln\\n\
514 \";\n    print \"\\t-dpa_min_score2...............\
515 .....Minimum Id within a subgroup\\n\";\n    print\
516  \"\\t-dpa_debug.........................Keep Tmp \
517 File (for debug purpose)\\n\\n\";\n    \n    exit \
518 (0);\n  }\nforeach $arg (@ARGV)\n  {\n    $arg_lis\
519 t.=\" $arg\";\n  }\n$arg_list=~s/[=,;]/ /g;\n\n\n(\
520 $seq0, $arg_list)=&extract_val_from_arg_list(\"^\"\
521 ,$arg_list, \"SPLICE\",\"unset\");\n($seq1, $arg_l\
522 ist)=&extract_val_from_arg_list(\"-seq\",$arg_list\
523 , \"SPLICE\",\"unset\");\n($seq2, $arg_list)=&extr\
524 act_val_from_arg_list(\"-in\",$arg_list, \"KEEP\",\
525 \"unset\");\n($seq3, $arg_list)=&extract_val_from_\
526 arg_list(\"-infile\",$arg_list, \"SPLICE\",\"unset\
527 \");\n($prf,  $arg_list)=&extract_val_from_arg_lis\
528 t(\"-profile\",$arg_list, \"SPLICE\",\"unset\");\n\
529 \n$gl{'Seq'}=$seq=&vtmpnam();#file containing all \
530 the sequences\n\n   #1-remove sequences from -in\n\
531 if ( $arg_list =~/\\-in\\b/)\n  {\n    my $save, $\
532 name;\n    while($arg_list=~/\\-in\\b[^-]+(\\bS[\\\
533 w.]+)/)\n      {\n      $name=$1;$name=~s/^.//;\n       if ( \
534 !-e $name){$save.=\" S$name \";}\n\n    $arg_list=~s/\
535 S$name/ /;\n      }\n    $arg_list=~s/\\-in\\b/\\-\
536 in $save /;\n  }\n   #2-prepare \n\nif (!($arg_lis\
537 t=~/\\-outorder/))\n  {\n    \n    $output_cl .=\"\
538  -outorder=$seq\";\n  }\n@output_flag=(\"-output\"\
539 ,\"-outfile\", \"-run_name\", \"-outorder\"); \nfo\
540 reach $v1 (@output_flag)\n  {\n    ($v2, $arg_list\
541 )=&extract_val_from_arg_list($v1,$arg_list, \"SPLI\
542 CE\",\"unset\");\n    if ($v2 ne \"\")\n      {\n\\
543 n       if ($v1 eq \"-run_name\"){$run_name=$v2;$output_\
544 cl .=\" $v1 $v2 \";}\n  elsif ( $v1 eq \"-outorder\\
545 ")\n      {\n       if ( $v2 eq \"input\"){$v2=$seq;}\n\
546             $outorder=$v2;$output_cl .=\" $v1 $v2 \";\n  \
547  }\n    else\n    {\n       $output_cl .=\" $v1 $v2 \";\\
548 n         }\n      }\n }\n\n\n($dpa_master_aln, $arg_lis\
549 t)  =&extract_val_from_arg_list(\"-dpa_master_aln\\
550 ",$arg_list, \"SPLICE\", \"t_coffee\");\n$dpa_mast\
551 er_aln=~s/\\s//g;\n($nseqT, $arg_list)           =\
552 &extract_val_from_arg_list(\"-dpa_maxnseq\",$arg_l\
553 ist, \"SPLICE\", 30);\n($scoreT1, $arg_list)      \
554    =&extract_val_from_arg_list(\"-dpa_min_score1\"\
555 ,$arg_list, \"SPLICE\", 80);\n($scoreT2, $arg_list\
556 )         =&extract_val_from_arg_list(\"-dpa_min_s\
557 core2\"    ,$arg_list, \"SPLICE\", 30);\n($dpa_lim\
558 it, $arg_list)       =&extract_val_from_arg_list(\\
559 "-dpa_limit\"        ,$arg_list, \"SPLICE\", 0);\n\
560 ($dpa_delta_id, $arg_list)    =&extract_val_from_a\
561 rg_list(\"-dpa_delta_id\"        ,$arg_list, \"SPL\
562 ICE\", 1);\n($dpa_debug, $arg_list)       =&extrac\
563 t_val_from_arg_list(\"-dpa_debug\"           ,$arg\
564 _list, \"SPLICE\", 0);\n\n\n$in_seq=$seq0.\" \".$s\
565 eq1.\" \".$seq2.\" \".$seq3;\n$in_prf=(($prf ne $u\
566 nset)?\"$prf \":\"\");\n&exit_dpa (($in_seq eq \"\\
567 " && $in_prf eq \"\")?1:0, \"ERROR: You did not Pr\
568 ovide any sequences. Use the -seq flag [FATAL: t_c\
569 offee_dpa]\\n\", EXIT_FAILURE);\n\n\nprint STDERR \
570 \"\\nSTART DPA COMPUTATION\";\n\n\n\nif ($in_seq=~\
571 /\\S+/)\n  {\n    \n    print STDERR \"\\n Step $s\
572 tep: Gather all the sequences into the tmp file: [\
573 $seq]\";$step++;        \n    &my_system (\"t_coffee $in_\
574 seq -convert -quiet -output fasta_seq -outfile=$se\
575 q -maxnseq 0\");\n  }\n\nif ( !-e $seq){$seq=\"\";\
576 }\n\nif ($in_prf=~/\\S+/)\n  {\n    $seq_in_type=\\
577 "profile\"; \n    $seq.= $in_prf; \n  }\nif ($seq \
578 eq \"\"){ &exit_dpa (1, \"\\nERROR: No Sequence FO\
579 und. Provide Sequences with the -seq flag [FATAL: \
580 t_coffee_dpa]\", EXIT_FAILURE);}\n\n \n\nif ( $run\
581 _name)\n  {\n    $suffix=$run_name;\n  }\nelsif ($\
582 in_seq=~/\\b(S[\\w.]+\\b)/)\n  {\n    my $suffix1,\
583  $sufffix2;\n    $suffix1=$suffix2=$1;\n    $suffi\
584 x2=~s/^S//;\n    if ( -e $suffix1){$suffix=$suffix\
585 1;}\n    elsif ( -e $suffix2){$suffix=$suffix2;}\n\
586     else\n      {\n     $suffix=&vtmpnam();     \n      }\\
587 n    $suffix=~s/\\.\\w+//;\n  }\n\nelse\n  {\n    \
588 $suffix=&vtmpnam();\n  }\n\n\nif (!$run_name){$out\
589 put_cl.=\" -run_name $suffix \";}\n\n\n$gl{'Tree'}\
590 =&seq2dpa_tree ($seq, \"$suffix.dpadnd\");\n\nprin\
591 t STDERR \"\\n Step $step: Prepare guide tree: $gl\
592 {'Tree'}\";$step++;\n\nprint STDERR \"\\n Step $st\
593 ep: Identify and Align Closely Related Groups\";$s\
594 tep++;\n%gl=&make_one_pass (0, $scoreT1,\"Align\",\
595 %gl);\n\nprint STDERR \"\\n Step $step: Make Multi\
596 ple Group Alignment\";$step++;\nwhile (!%gl ||$gl{\
597 'Ng'}>$nseqT)\n  {\n    %gl=&make_one_pass ($nseqT\
598 , $scoreT2,\"t_coffee\",%gl);\n    if ( $gl{'Newgr\
599 oups'}==0){$scoreT2--;}    \n  }\nprint STDERR \"\\
600 \n Step $step: Make The Final Alignment\";$step++;\
601 \n\n\n$arg_list .=$output_cl;\n\n\n%gl=&tree2group\
602  (0,0, %gl);\n$gl{$gl{'0'}{'File'}}{'Output'}=\"\"\
603 ;\n$a=0;\n&align_groups (\"t_coffee\",'0', $arg_li\
604 st, \" \", %gl);\n\n\n\nif ( !$dpa_keep_tmpfile){&\
605 clean_tmp_file (@tl);}\n\n\n\nsub seq2dpa_tree \n \
606  {\n    my $seq=@_[0];\n    my $newtree=@_[1];\n  \
607   my $aln=&vtmpnam ();\n\n    &my_system (\"t_coff\
608 ee -special_mode quickaln -in $seq -outfile $aln -\
609 quiet\");\n    &my_system (\"$seq_reformat -in $al\
610 n -action +aln2tree +tree2dpatree -output newick >\
611 $newtree\");\n    return $newtree;\n  } \nsub seq2\
612 dpa_tree_old \n  {\n    my $aln=@_[0];\n    my $ne\
613 wtree=@_[1];\n    \n    \n    &my_system(\"$seq_re\
614 format -in $aln -action +seq2dpatree -output newic\
615 k > $newtree\");\n    return $newtree;\n  }\nsub a\
616 ln2dpa_tree \n  {\n    my $aln=@_[0];\n    my $new\
617 tree=&vtmpnam();\n    \n    &my_system(\"$seq_refo\
618 rmat -in $aln -action +aln2tree +tree2dpatree -out\
619 put newick > $newtree\");\n    return $newtree;\n \
620  }\nsub group_file2ngroups\n  {\n    my $file=@_[0\
621 ];\n    my $n;\n    \n    open ( F, $file);\n    w\
622 hile (<F>)\n      {\n   $n+=/\\>/;\n      }\n    clo\
623 se (F);\n    return $n;\n  }\n\nsub make_one_pass\\
624 n  {\n    my ($N, $ID,$pg, %gl)=@_;\n    my $a;\n\\
625 n    %gl=&tree2group ($N,$ID,%gl);\n    if (!$gl{'\
626 Newgroups'}){return %gl;}\n    else\n      {\n  for\
627  ( $a=0; $a< $ng; $a++)\n         {\n       if ($gl{$gl{$a\
628 }{'File'}}{'Ng'}>1){&display_group($a, %gl);}\n   \
629   &align_groups ($pg, $a, $arg_list, \" -quiet=qui\
630 et \", %gl);\n    }\n   return %gl;\n      }\n  }\n\n\
631 sub tree2group \n  {\n    my ($N, $ID, %gl)=@_;\n \
632    my $prefix=&vtmpnam();\n    my $group_file=&vtm\
633 pnam();\n    my $file;\n    my $oldtree=&vtmpnam()\
634 ;\n    my $n;\n    my $tree;\n\n\n    if ( $gl{'Ng\
635 '}==1){return %gl;}\n    $tree=$gl{'Tree'}; \n    \
636 \n    #1 extract the groups\n    &my_system (\"$se\
637 q_reformat -in $tree -action +tree2group $N $ID $p\
638 refix > $group_file\");\n    $n=group_file2ngroups\
639 ($group_file);\n    \n    \n    $gl{'Newgroups'}=1\
640 ;\n    if ( $n==$gl{'Ng'})\n      {\n   $gl{'Newgrou\
641 ps'}=0;\n       return %gl;\n      }\n    $gl{'Iteration\
642 '}++;\n    $gl{'MaxNseq'}=$N;$gl{'MinID'}=$ID;\n  \
643   $gl{'GroupFile'}=$group_file;$gl{'Ng'}=$ng=0;\n \
644    #2 Process the group list into the hash\n    op\
645 en (F, $group_file);\n    while (<F>)\n      {\n        $\
646 gl{'File'}.=$_;\n       if (/\\>/)\n      {\n       $line=$_;\
647 \n          $line=~s/\\>//;\n       @list=($line=~/(\\S+)\
648 /g);\n      $file=$gl{$ng}{'File'}=shift @list;\n        \
649    $gl{$file}{'Output'}=$file;\n            \n      $gl{$f\
650 ile}{'Ng'}=$#list+1;\n      if ($gl{$file}{'Ng'}>1)\
651 { $gl{$file}{'Tlist'}=$gl{$file}{'Alist'}=\"(\";}\\
652 n           foreach $l (@list)\n              {\n       \n              $gl{$file\
653 }{'List'}.=\" $l \";\n          \n              if (!$gl{$l}{'Tlist'})\
654 \n                {\n               $gl{$l}{'Tlist'}=\"$l\";\n              $gl\
655 {$l}{'Alist'}=\"$l\";\n             $gl{$l}{'Nseq'}=1;\n        \
656             $gl{$l}{'Ng'}=1;\n            }\n           $gl{$file}{'Tlist'\
657 }.=\"$gl{$l}{'Tlist'},\";\n             $gl{$file}{'Alist'}.=\
658 \"$gl{$l}{'Tlist'}|\";\n                $gl{$file}{'Nseq'}+=$gl{\
659 $l}{'Nseq'};\n        }\n           \n\n            chop($gl{$fi\
660 le}{'Tlist'});chop($gl{$file}{'Alist'});\n          if \
661 ($gl{$file}{'Ng'}>1){$gl{$file}{'Tlist'}.=\")\"; $\
662 gl{$file}{'Alist'}.=\");\";}\n      $ng++;\n      }     \n\
663       }\n    $gl{'Ng'}=$ng;\n    close (F);\n    \\
664 n    #3 Update the old tree with the new groups\n \
665    $gl{'Tree'}=&vtmpnam();\n    &my_system (\"$seq\
666 _reformat -in $tree -action +collapse_tree $group_\
667 file -output newick > $gl{'Tree'}\");\n    \n    r\
668 eturn %gl;\n  }\n\nsub display_group \n  {\n    my\
669  ($g,%gl)=@_;\n    my $f;\n    \n    if ( $g==-1)\\
670 n      {\n      print STDERR \"\\nIteration $gl{'Iterat\
671 ion'} [MaxN=$gl{'MaxNseq'}][MinID=$gl{'MinID'}]\";\
672 \n      }\n    else\n      {\n\n        $f=$gl{$g}{'File'\
673 };\n    $action=($gl{$f}{'Ng'}==1 || $gl{'Iteration'}\
674 ==1)?\"KEEP  \":\"ALIGN \";\n        print STDERR \
675 \"\\n\\t[$action][MaxN=$gl{'MaxNseq'}][MinID=$gl{'\
676 MinID'}][File $f][Nseq=$gl{$f}{'Nseq'}][Ngroups=$g\
677 l{$f}{'Ng'}][$gl{$f}{'Alist'}]\";\n      }\n  }\n \
678      \n\n\nsub align_groups\n  {\n    my ($pg, $g,\
679  $arg, $extra_arg,%gl)=@_;\n    my $f;\n    my $Ou\
680 tput,$Outflag;\n    \n    \n    $f=$gl{$g}{'File'}\
681 ;\n    $Output=($gl{$f}{'Output'});\n    \n    if \
682 ( $pg eq \"Align\")\n      {\n  if ( !-e $f)\n    {\\
683 n           $command=\"$seq_reformat -in $gl{'Seq'}  -ac\
684 tion +extract_aln $gl{'GroupFile'}\";\n     if ($g\
685 l{$f}{'Ng'}>1)\n              {\n               &my_system ($command);\
686 \n              $command=\"t_coffee -special_mode quick_aln  S\
687 $f -outfile=$Output -quiet\";\n       }\n         }\n   el\
688 se \n     {$command=\"\";}\n      }\n    elsif ( -e \
689 $f)\n      {    \n      $Outflag=($Output)?\"-outfile=$Out\
690 put\":\"\";\n   $command=\"$pg -infile $f $Outflag -\
691 quiet stdout $arg $extra_arg -maxnseq 0 -convert -\
692 quiet stdout\";\n      }\n    elsif ( $gl{$f}{'Ng'\
693 }==1)\n      {\n        $action=($dpa_debug)?\"cp\":\"mv\\
694 ";\n    $command=\"$action $gl{$f}{'List'} $Output\";\
695 \n      }\n    else\n      {\n  $Outflag=($Output)?\
696 \"-outfile=$Output\":\"\";\n    $command=\"$pg -profi\
697 le $gl{$f}{'List'} $Outflag $arg $extra_arg -maxns\
698 eq 0\";\n      }\n    \n    &my_system ($command);\
699 \n    return $outfile;\n  }\n    \nsub my_system \\
700 n  {\n    my $command=@_[0];\n    my $force=@_[1];\
701 \n    my $status;\n\n    if ( $dpa_debug) {print S\
702 TDERR \"\\nCOMMAND: $command\";}\n    $status=syst\
703 em ($command);\n\n    if (!$force)\n       {\n   &e\
704 xit_dpa (($status==1), \"Failed in Command:\\n$com\
705 mand\\n[FATAL: t_coffee_dpa]\\n\", EXIT_FAILURE);\\
706 n       }\n    \n    return $status;\n  }\n\nsub v\
707 tmpnam\n  {\n    my $prefix=@_[0];\n    my $tmp_fi\
708 le_name;\n\n    $tmp_prefix=($prefix)?$prefix:\"dp\
709 a_tmp_file_$$\";\n   \n    $tmp_count++;\n    $tmp\
710 _file_name=\"$tmp_prefix\".\"$tmp_count\";\n    $t\
711 l[$#tl+1]=$tmp_file_name;\n    return $tmp_file_na\
712 me;\n  }\n\nsub clean_tmp_file\n  {\n\n    my $lis\
713 t;\n    my $file;\n    \n    if ($dpa_debug){retur\
714 n;}\n    $list=vtmpnam();\n    `ls -1 | grep $tmp_\
715 prefix>$list`;\n    \n    open (F,$list);\n    whi\
716 le ( <F>)\n      {\n    $file=$_;\n     chop $file;\n   if \
717 ( -e $file){unlink $file;}\n      }\n    close (F)\
718 ;\n    unlink $list;\n  }\n\n\nsub exit_dpa\n  {\n\
719   my $condition=@_[0];\n  my $error_msg=@_[1];\n  \
720 my $exit_value=@_[2];\n  if ( $condition)\n    {\n\
721       print \"$error_msg\\n\";\n      exit ($exit_\
722 value);\n    }\n  else\n    {\n      return;\n    \
723 }\n  \n}\nsub extract_val_from_arg_list\n  {\n    \
724 my $arg=@_[0];\n    my $arg_list=@_[1];\n    my $k\
725 eep_flag=@_[2];\n    my $default_value=@_[3];\n   \
726  my $val=\"\";\n    \n    #protect\n    $arg_list=\
727 ~s/\\s-/ \\@/g;\n    $arg=~s/-/\\@/g;\n    \n    #\
728 search\n    if ($arg eq \"^\")\n      {\n       $arg_lis\
729 t=~/^([^@]*)/;\n        $val=$1;\n      }\n    else\n    \
730   {$arg_list=~/$arg ([^@]*)/;$val=$1;}\n    \n    \
731 #remove trailing spaces\n    $val=~s/\\s*$//;\n   \
732  \n    #remove the parsed sequence if needed\n    \
733 if (($val ne \"\") && $keep_flag ne \"KEEP\")\n   \
734    {\n  if ( $arg eq \"^\"){$arg_list=~s/$val/ /;}\\
735 n       else {$arg_list=~s/($arg [^@]*)/ /;}\n      }\n \
736 \n    #unprotect\n    $arg_list=~s/\\@/-/g;\n    $\
737 arg=~s/\\@/-/g;\n    \n    if (($val eq \"\") && $\
738 default_value ne \"unset\"){$val=$default_value;}\\
739 n    \n    return $val, $arg_list;\n  }\n$program=\
740 \"T-COFFEE (Version_7.90)\";\\n\n","\n$DEBUG=1;\n$\
741 dpa_nseq=10;\n$dpa_sim=0;\nif (!@ARGV)\n  {\n    `\
742 t_coffee`;\n    exit (0);\n  }\nforeach $arg (@ARG\
743 V)\n  {\n    $arg_list.=\" $arg\";\n  }\n$max_nseq\
744 =10;\n($seq0, $arg_list)=&extract_val_from_arg_lis\
745 t(\"^\",$arg_list);\n($seq1, $arg_list)=&extract_v\
746 al_from_arg_list(\"-seq\",$arg_list);\n($seq2, $ar\
747 g_list)=&extract_val_from_arg_list(\"-in\",$arg_li\
748 st, \"KEEP\");\n($seq3, $arg_list)=&extract_val_fr\
749 om_arg_list(\"-infile\",$arg_list);\n$in_seq=$seq0\
750 .\" \".$seq1.\" \".$seq2.\" \".$seq3;\n\n$seq=vtmp\
751 nam();\n`t_coffee $in_seq -convert -output fasta_s\
752 eq -outfile=$seq`;\n\n\n($dpa_nseq, $arg_list)=&ex\
753 tract_val_from_arg_list(\"-dpa_nseq\",$arg_list);\\
754 n($master_aln, $arg_list)=&extract_val_from_arg_li\
755 st(\"-master_aln\",$arg_list);\n($sim_matrix, $arg\
756 _list)=&extract_val_from_arg_list(\"-sim_matrix\",\
757 $arg_list);\n($core_seq, $arg_list)=&extract_val_f\
758 rom_arg_list(\"-core_seq\",$arg_list);\n($dpa_sim,\
759  $arg_list)=&extract_val_from_arg_list(\"-dpa_sim\\
760 ",$arg_list);\n($run_name, $arg_list)=&extract_val\
761 _from_arg_list(\"-run_name\",$arg_list);\n($output\
762 , $arg_list)=&extract_val_from_arg_list(\"-output\\
763 ",$arg_list);\n\n\n\nif (!$sim_mat && !$master_aln\
764 )#Compute the fast alignment\n  {\n    $ref_aln=vt\
765 mpnam();\n    `t_coffee -seq=$seq -very_fast -outf\
766 ile=$ref_aln -quiet`;\n    \n  }\n\nif (!$sim_mat)\
767 \n  {\n    $sim_mat=vtmpnam();\n    `seq_reformat \
768 -in $ref_aln -output sim > $sim_mat`;\n  }\n\nif (\
769  !$core_seq)\n  {\n    $core_seq=vtmpnam();\n    `\
770 seq_reformat -in $ref_aln -action +trimTC N$max_ns\
771 eq -output fasta_seq > $core_seq`;\n  }\n@core_nam\
772 e=`seq_reformat -in $core_seq -output name `; \n\n\
773 @tot_name=`seq_reformat -in $seq -output name `;\n\
774 \nforeach $s (@core_name){$s=~s/\\s//g;$hcore{$s}=\
775 1;}\nforeach $s (@tot_name){$s=~s/\\s//g;}\nprint \
776 STDERR \"T-Coffee_dpa:\\n\";\nprint STDERR \"\\tTO\
777 TAL  SEQ: @tot_name\\n\";\nprint STDERR \"\\tCHOSE\
778 N SEQ: @core_name\\n\";\n\n\n\nopen (F, $sim_mat);\
779 \nwhile ( <F>)\n  {\n    @l=($_=~/(\\b[\\S]+\\b)/g\
780 );\n    if (($l[0] eq \"TOP\" || $l[0] eq \"BOT\")\
781 )\n      {\n    $s1=$l[1];$s2=$l[2];$v=$l[3];\n if ($\
782 hcore{$s1} && !$hcore{$s2})\n     {\n       if (!$hseq\
783 {$s2}{\"sim\"} || $v>$hseq{$s2}{\"sim\"})\n           \
784 {\n             $hseq{$s2}{\"sim\"}=$v;$hseq{$s2}{\"seq\"}=$s\
785 1;\n          }\n         }\n      }\n  }\nclose (F);\nfore\
786 ach $s (@tot_name)\n  {\n\n    if ( !$hseq{$s}{\"s\
787 eq\"}){;}\n    else\n      {\n  $s2=$hseq{$s}{\"seq\
788 \"};\n  $v=$hseq{$s}{\"sim\"};\n                \n      if ($v>$dpa_si\
789 m)\n      {\n       $hseq{$s}{'used'}=1;\n          $seq_lis\
790 t{$s2}{$seq_list{$s2}{'nseq'}++}=$s;\n    }\n      \
791 }\n  }\nforeach $s (@core_name){$seq_list{$s}{$seq\
792 _list{$s}{'nseq'}++}=$s;$hseq{$s}{'used'}=1;}\nfor\
793 each $s (@tot_name){if (!$hseq{$s}{'used'}){$seq_l\
794 ist{'unused'}{$seq_list{'unused'}{'nseq'}++}=$s;}}\
795 \n\n\n$n=0;\nforeach $s (@core_name)\n  {\n    $ng\
796 ++;\n    $n=$seq_list{$s}{'nseq'};\n    for (@g_li\
797 st=(), $a=0; $a<$n; $a++){@g_list=(@g_list,$seq_li\
798 st{$s}{$a});}\n\n    $g_seq=vtmpnam();\n    $g_aln\
799 =vtmpnam();\n    \n    print STDERR \"Group $ng: $\
800 #g_list Seq: @g_list: \";\n    \n    \n    `seq_re\
801 format -in $seq -action +lower +keep_name +extract\
802 _seq  @g_list -output fasta_seq > $g_seq`;\n    \n\
803     \n    if ( $#g_list==0)\n      {\n  print STDER\
804 R \"[No aln]\\n\";\n    $g_aln=$g_seq;\n      }\n    \
805 elsif ($#g_list<$max_nseq) \n      {\n  print STDER\
806 R \"[t_coffee]\\n\";\n  `t_coffee $g_seq -outfile=$\
807 g_aln -quiet $arg_list`;\n      }\n    else\n     \
808  {\n    print STDERR \"[t_coffee_dpa]\\n\";\n   `t_coff\
809 ee_dpa2 $g_seq -outfile=$g_aln $arg_list -sim_matr\
810 ix $sim_matrix -dpa_nseq $dpa_nseq`;\n      }\n   \
811  @profile_list=(@profile_list, $g_aln);\n  }\n\n\n\
812 print \"UNUSED $seq_list{'unused'}{'nseq'}\";\n\ni\
813 f ($seq_list{'unused'}{'nseq'})\n    {\n      $prf\
814 =vtmpnam();\n      \n      `t_coffee -profile @pro\
815 file_list $arg_list -outfile=$prf -quiet`;\n      \
816 $n=$seq_list{\"unused\"}{'nseq'};\n      $new_seq=\
817 vtmpnam();\n      $new_prf=vtmpnam();\n      for (\
818 $a=0; $a<$n-1; $a++)\n  {\n       $s=$seq_list{\"unused\
819 \"}{$a};\n        print STDERR \"\\nADD Sequence $s\";\\
820 n         \n      `seq_reformat -in $seq -action +lower +ke\
821 ep_name +extract_seq $s  -output fasta_seq > $new_\
822 seq`;\n   `t_coffee -profile $prf $new_seq $arg_li\
823 st -outfile=$new_prf`;\n          `cp $new_prf $prf`;\n }\
824 \n      $s=$seq_list{\"unused\"}{$a};\n      `seq_\
825 reformat -in $seq -action +lower +keep_name +extra\
826 ct_seq $s  -output fasta_seq > $new_seq`;\n      @\
827 profile_list=($prf, $new_seq);\n    }\n    \n     \
828  \nif ($run_name){$arg_list.=\" -run_name $run_nam\
829 e\";}\nelse \n  {\n    $in_seq=~/([\\w-]+)/;\n    \
830 $arg_list.=\" -run_name $1\";\n  }\nif ( $output){\
831 $arg_list.=\" -output $output \";}\n\n`t_coffee -p\
832 rofile @profile_list $arg_list`;\n\n\n&clean (@tmp\
833 _file_list);\n\n\nsub vtmpnam\n  {\n    my $tmp_fi\
834 le_name;\n    $tmp_name_counter++;\n    $tmp_file_\
835 name=\"tmp_file_$tmp_name_counter\\_Pid$$\";\n    \
836 $tmp_file_list[$ntmp_file++]=$tmp_file_name;\n    \
837 return $tmp_file_name;\n  }\nsub clean\n  {\n  my \
838 @fl=@_;\n  my $file;\n  return;\n\n  foreach $file\
839  ( @fl)\n    {\n      if ( -e $file){unlink($file)\
840 ;}\n    }\n}\nsub extract_val_from_arg_list\n  {\n\
841     my $arg=@_[0];\n    my $arg_list=@_[1];\n    m\
842 y $keep_flag=@_[2];\n    #protect\n    $arg_list=~\
843 s/\\s-/ \\@/g;\n    $arg=~s/-/\\@/g;\n    \n    #s\
844 earch\n    if ($arg eq \"^\")\n      {\n        $arg_list\
845 =~/^([^@]*)/;\n $val=$1;\n      }\n    else\n     \
846  {$arg_list=~/$arg ([^@]*)/;$val=$1;}\n    \n    #\
847 remove the parsed sequence if needed\n    if ($val\
848  && $keep_flag ne \"KEEP\")\n      {\n  if ( $arg e\
849 q \"^\"){$arg_list=~s/$val/ /;}\n       else {$arg_list=\
850 ~s/($arg [^@]*)/ /;}\n      }\n \n    #unprotect\n\
851     $arg_list=~s/\\@/-/g;\n    $arg=~s/\\@/-/g;\n \
852    \n    return $val, $arg_list;\n  }\n\n","use En\
853 v;\n\n$BLAST_MAX_NRUNS=2;\n$EXIT_SUCCESS=0;\n$EXIT\
854 _FAILURE=1;\n\nuse Cwd;\n$REF_EMAIL=\"\";\n\n\n$tm\
855 p_dir=\"\";\n$init_dir=\"\";\n$program=\"tc_generi\
856 c_method.pl\";\n\n$test=0;\nif ($test==1)\n  {\n  \
857   $SERVER=\"NCBI\";\n    $query=$ARGV[0];\n    $hi\
858 tf=$ARGV[1];\n    %s=read_fasta_seq($query);\n    \
859 @sl=keys(%s);\n    &blast_xml2profile (\"xx\", $s{\
860 $sl[0]}{seq},$maxid,$minid,$mincov, $hitf);\n    m\
861 yexit ($EXIT_FAILURE);\n  }\n\nforeach $v(@ARGV){$\
862 cl.=\"$v \";}\n($mode)=&my_get_opt ( $cl, \"-mode=\
863 \",1,0);\n\n($A)=(&my_get_opt ( $cl, \"-name1=\",0\
864 ,0));\n($B)=(&my_get_opt ( $cl, \"-name2=\",0,0));\
865 \n($TMPDIR)=(&my_get_opt ( $cl, \"-tmpdir=\",0,0))\
866 ;\n($CACHE)=(&my_get_opt ( $cl, \"-cache=\",0,0));\
867 \n($SERVER)=((&my_get_opt ( $cl, \"-server=\",0,0)\
868 ));\n($EMAIL)=((&my_get_opt ( $cl, \"-email=\",0,0\
869 )));\n\nif (!$A){$A=\"A\";}\nif (!$B){$B=\"B\";}\n\
870 \n\nif (!$TMPDIR)\n  {\n    $HOME=$ENV{HOME};\n   \
871  if ($ENV{TMP_4_TCOFFEE}){$TMPDIR=$ENV{TMP_4_TCOFF\
872 EE};}\n    else{$TMPDIR=\"$HOME/.t_coffee/tmp/\";}\
873 \n  }\nif ( ! -d $TMPDIR)\n  {\n    mkdir $TMPDIR;\
874 \n  }\nif ( ! -d $TMPDIR)\n  {\n    print \"ERROR:\
875  Could not create temporary dir: $TMPDIR\\n\";\n  \
876   myexit ($EXIT_FAILURE);\n  }\n\n$EMAIL=~s/XEMAIL\
877 X/\\@/g;\nif (!$EMAIL)\n  {\n    if ($ENV{EMAIL_4_\
878 TCOFFEE}){$EMAIL=$ENV{EMAIL_4_TCOFFEE};}\n    elsi\
879 f ($ENV{EMAIL}){$EMAIL=$ENV{EMAIL};}\n    else {$E\
880 MAIL=$REF_EMAIL;}\n  }\n\n($maxid,$minid,$mincov)=\
881 (&my_get_opt ( $cl, \"-maxid=\",0,0, \"-minid=\",0\
882 ,0,\"-mincov=\",0,0));\nif (!$cl=~/\\-maxid\\=/){$\
883 maxid=95;}\nif (!$cl=~/\\-minid\\=/){$minid=35;}\n\
884 if (!$cl=~/\\-mincov\\=/){$mincov=80;}\n\n\n\nif (\
885 $mode eq \"seq_msa\")\n  {\n    &seq2msa($mode,&my\
886 _get_opt ( $cl, \"-infile=\",1,1, \"-method=\",1,2\
887 , \"-param=\",0,0, \"-outfile=\",1,0));\n  }\n\nel\
888 sif ( $mode eq \"thread_pair\")\n  {\n    &seq2thr\
889 ead_pair($mode,&my_get_opt ( $cl, \"-infile=\",1,1\
890 , \"-pdbfile1=\",1,1, \"-method=\",1,2,\"-param=\"\
891 ,0,0, \"-outfile=\",1,0, ));\n  }\nelsif ( $mode e\
892 q \"pdbid_pair\")\n  {\n    &seq2pdbid_pair($mode,\
893 &my_get_opt ( $cl, \"-pdbfile1=\",1,0, \"-pdbfile2\
894 =\",1,0, \"-method=\",1,2,\"-param=\",0,0, \"-outf\
895 ile=\",1,0, ));\n  }\nelsif ( $mode eq \"pdb_pair\\
896 ")\n  {\n    &seq2pdb_pair($mode,&my_get_opt ( $cl\
897 , \"-pdbfile1=\",1,1, \"-pdbfile2=\",1,1, \"-metho\
898 d=\",1,2,\"-param=\",0,0, \"-outfile=\",1,0, ));\n\
899   }\nelsif ( $mode eq \"profile_pair\")\n  {\n    \
900  &seq2profile_pair($mode,&my_get_opt ( $cl, \"-pro\
901 file1=\",1,1, \"-profile2=\",1,1, \"-method=\",1,2\
902 ,\"-param=\",0,0, \"-outfile=\",1,0, ));\n  }\nels\
903 if ( $mode eq \"pdb_template\")\n  {\n    &blast2p\
904 db_template ($mode,&my_get_opt ( $cl, \"-infile=\"\
905 ,1,1, \"-database=\",1,0, \"-method=\",1,0, \"-out\
906 file=\",1,0));\n  }\nelsif ( $mode eq \"profile_te\
907 mplate\")\n  {\n    &psiblast2profile_template ($m\
908 ode,&my_get_opt ( $cl, \"-infile=\",1,1, \"-databa\
909 se=\",1,0, \"-method=\",1,0, \"-outfile=\",1,0));\\
910 n  }\nelsif ( $mode eq \"psiprofile_template\")\n \
911  {\n    &psiblast2profile_template ($mode,&my_get_\
912 opt ( $cl, \"-infile=\",1,1, \"-database=\",1,0, \\
913 "-method=\",1,0, \"-outfile=\",1,0));\n  }\nelsif \
914 ( $mode eq \"RNA_template\")\n  {\n    &seq2RNA_te\
915 mplate ($mode,&my_get_opt ( $cl, \"-infile=\",1,1,\
916  \"-outfile=\",1,0));\n  }\nelsif ( $mode eq \"tm_\
917 template\")\n  {\n    &seq2tm_template ($mode,&my_\
918 get_opt ( $cl, \"-infile=\",1,1,\"-arch=\",1,1,\"-\
919 psv=\",1,1, \"-outfile=\",1,0,));\n  }\nelsif ( $m\
920 ode eq \"psitm_template\")\n  {\n    &seq2tm_templ\
921 ate ($mode,&my_get_opt ( $cl, \"-infile=\",1,1,\"-\
922 arch=\",1,1,\"-psv=\",1,1, \"-outfile=\",1,0,));\n\
923   }\nelsif ( $mode eq \"ssp_template\")\n  {\n    \
924 &seq2ssp_template ($mode,&my_get_opt ( $cl, \"-inf\
925 ile=\",1,1,\"-seq=\",1,1,\"-obs=\",1,1, \"-outfile\
926 =\",1,0));\n  }\nelsif ( $mode eq \"psissp_templat\
927 e\")\n  {\n    &seq2ssp_template ($mode,&my_get_op\
928 t ( $cl, \"-infile=\",1,1,\"-seq=\",1,1,\"-obs=\",\
929 1,1, \"-outfile=\",1,0));\n  }\nelsif ( $mode eq \\
930 "rna_pair\")\n{\n    &seq2rna_pair($mode,&my_get_o\
931 pt ( $cl, \"-pdbfile1=\",1,1, \"-pdbfile2=\",1,1, \
932 \"-method=\",1,2,\"-param=\",0,0, \"-outfile=\",1,\
933 0, ));\n}elsif ( $mode eq \"calc_rna_template\")\n\
934 {\n    &calc_rna_template($mode,&my_get_opt ( $cl,\
935  \"-infile=\",1,1,\"-pdbfile=\",1,1, \"-outfile=\"\
936 ,1,0));\n}\nelse\n  {\n    print STDERR \"$mode is\
937  an unknown mode of tc_generic_method.pl [FATAL]\\\
938 n\";\n  }\nmyexit ($EXIT_SUCCESS);\nsub seq2ssp_te\
939 mplate\n  {\n  my ($mode, $infile,$gor_seq,$gor_ob\
940 s,$outfile)=@_;\n  my %s, %h;\n  my $result;\n  my\
941  (@profiles);\n  &set_temporary_dir (\"set\",$infi\
942 le,\"seq.pep\");\n  %s=read_fasta_seq (\"seq.pep\"\
943 );\n\n  \n  open (R, \">result.aln\");\n  \n  #pri\
944 nt stdout \"\\n\";\n  foreach $seq (keys(%s))\n   \
945  {\n      \n      open (F, \">seqfile\");\n      $\
946 s{$seq}{seq}=uc$s{$seq}{seq};\n      print (F \">$\
947 s{$seq}{name}\\n$s{$seq}{seq}\\n\");\n      close \
948 (F);\n      $lib_name=\"$s{$seq}{name}.ssp\";\n   \
949    $lib_name=&clean_file_name ($lib_name);\n      \
950 \n      if ($mode eq \"ssp_template\"){&seq2gor_pr\
951 ediction ($s{$seq}{name},$s{$seq}{seq}, \"seqfile\\
952 ", $lib_name,$gor_seq, $gor_obs);}\n      elsif ($\
953 mode eq \"psissp_template\")\n  {\n       &seq2msa_gor_\
954 prediction ($s{$seq}{name},$s{$seq}{seq},\"seqfile\
955 \", $lib_name,$gor_seq, $gor_obs);\n    }\n    \n    \
956   if ( !-e $lib_name)\n {\n       print STDERR (\"GORI\
957 V failed to compute the secondary structure of $s{\
958 $seq}{name} [FATAL:$mode/$method/$program]\\n\");\\
959 n         myexit ($EXIT_FAILURE);\n     }\n      else\n {\n     \
960   print stdout \"\\tProcess: >$s{$seq}{name} _E_ $\
961 lib_name \\n\";\n         print R \">$s{$seq}{name} _E_ \
962 $lib_name\\n\";\n       }\n      unshift (@profiles, $li\
963 b_name);\n    }\n  close (R);\n  &set_temporary_di\
964 r (\"unset\",$mode, $method,\"result.aln\",$outfil\
965 e, @profiles);\n}\n\nsub seq2tm_template\n  {\n  m\
966 y ($mode, $infile,$arch,$psv,$outfile)=@_;\n  my %\
967 s, %h;\n  my $result;\n  my (@profiles);\n  &set_t\
968 emporary_dir (\"set\",$infile,\"seq.pep\");\n  %s=\
969 read_fasta_seq (\"seq.pep\");\n\n  \n  open (R, \"\
970 >result.aln\");\n  \n  #print stdout \"\\n\";\n  f\
971 oreach $seq (keys(%s))\n    {\n      open (F, \">s\
972 eqfile\");\n      print (F \">$s{$seq}{name}\\n$s{\
973 $seq}{seq}\\n\");\n      close (F);\n      $lib_na\
974 me=\"$s{$seq}{name}.tmp\";\n      $lib_name=&clean\
975 _file_name ($lib_name);\n\n      if ($mode eq \"tm\
976 _template\")\n  {\n       &safe_system (\"t_coffee -oth\
977 er_pg fasta_seq2hmmtop_fasta.pl -in=seqfile -out=$\
978 lib_name -arch=$arch -psv=$psv\");\n    }\n      elsi\
979 f ( $mode eq \"psitm_template\")\n      {\n       &seq2msa_\
980 tm_prediction ($s{$seq}{name},$s{$seq}{seq},\"seqf\
981 ile\", $lib_name,$arch, $psv);\n        }\n      if ( !-e\
982  $lib_name)\n   {\n       print STDERR (\"RNAplfold fail\
983 ed to compute the secondary structure of $s{$seq}{\
984 name} [FATAL:$mode/$method/$program]\\n\");\n     my\
985 exit ($EXIT_FAILURE);\n }\n      else\n {\n       prin\
986 t stdout \"\\tProcess: >$s{$seq}{name} _T_ $lib_na\
987 me\\n\";\n        print R \">$s{$seq}{name} _T_ $lib_na\
988 me\\n\";\n      }\n      unshift (@profiles, $lib_name)\
989 ;\n    }\n  close (R);\n  &set_temporary_dir (\"un\
990 set\",$mode, $method,\"result.aln\",$outfile, @pro\
991 files);\n}\n\nsub seq2RNA_template\n  {\n  my ($mo\
992 de, $infile,$outfile)=@_;\n  my %s, %h, ;\n  my $r\
993 esult;\n  my (@profiles);\n  &set_temporary_dir (\\
994 "set\",$infile,\"seq.pep\");\n  %s=read_fasta_seq \
995 (\"seq.pep\");\n\n  \n  open (R, \">result.aln\");\
996 \n  \n  #print stdout \"\\n\";\n  foreach $seq (ke\
997 ys(%s))\n    {\n      open (F, \">seqfile\");\n   \
998    print (F \">$s{$seq}{name}\\n$s{$seq}{seq}\\n\"\
999 );\n      close (F);\n      $lib_name=\"$s{$seq}{n\
1000 ame}.rfold\";\n      $lib_name=&clean_file_name ($\
1001 lib_name);\n      &safe_system (\"t_coffee -other_\
1002 pg RNAplfold2tclib.pl -in=seqfile -out=$lib_name\"\
1003 );\n      \n      if ( !-e $lib_name)\n {\n       prin\
1004 t STDERR (\"RNAplfold failed to compute the second\
1005 ary structure of $s{$seq}{name} [FATAL:$mode/$meth\
1006 od/$program]\\n\");\n     myexit ($EXIT_FAILURE);\n     \
1007 }\n      else\n {\n       print stdout \"\\tProcess: >\
1008 $s{$seq}{name} _F_ $lib_name\\n\";\n      print R \">\
1009 $s{$seq}{name} _F_ $lib_name\\n\";\n    }\n      unsh\
1010 ift (@profiles, $lib_name);\n    }\n  close (R);\n\
1011   &set_temporary_dir (\"unset\",$mode, $method,\"r\
1012 esult.aln\",$outfile, @profiles);\n}\n\nsub psibla\
1013 st2profile_template \n  {\n  my ($mode, $infile, $\
1014 db, $method, $outfile)=@_;\n  my %s, %h, ;\n  my (\
1015 $result,$psiblast_output,$profile_name,@profiles);\
1016 \n  \n  &set_temporary_dir (\"set\",$infile,\"seq.\
1017 pep\");\n  %s=read_fasta_seq (\"seq.pep\");\n  ope\
1018 n (R, \">result.aln\");\n  \n  #print stdout \"\\n\
1019 \";\n  foreach $seq (keys(%s))\n    {\n      open \
1020 (F, \">seqfile\");\n      print (F \">$A\\n$s{$seq\
1021 }{seq}\\n\");\n      close (F);\n      $psiblast_o\
1022 utput=&run_blast ($s{$seq}{name},$method, $db, \"s\
1023 eqfile\",\"outfile\");\n      if ( -e $psiblast_ou\
1024 tput)\n {\n       %profile=blast_xml2profile($s{$seq}{\
1025 name}, $s{$seq}{seq},$maxid, $minid,$mincov,$psibl\
1026 ast_output);\n    unlink ($psiblast_output);\n    \n\
1027           $profile_name=\"$s{$seq}{name}.prf\";\n         $prof\
1028 ile_name=&clean_file_name ($profile_name);\n      uns\
1029 hift (@profiles, $profile_name);\n        output_profil\
1030 e ($profile_name, %profile);\n    print stdout \"\\\
1031 tProcess: >$s{$seq}{name} _R_ $profile_name [$prof\
1032 ile{n} Seq.] [$SERVER/blast/$db][$CACHE_STATUS]\\n\
1033 \";\n     print R \">$s{$seq}{name} _R_ $profile_nam\
1034 e\\n\";\n       }\n    }\n  close (R);\n  &set_temporary\
1035 _dir (\"unset\",$mode, $method,\"result.aln\",$out\
1036 file, @profiles);\n}\n\nsub blast2pdb_template \n \
1037  {\n  my ($mode, $infile, $db, $method, $outfile)=\
1038 @_;\n  my %s, %h, ;\n  my ($result,$blast_output);\
1039 \n  &set_temporary_dir (\"set\",$infile,\"seq.pep\\
1040 ");\n  %s=read_fasta_seq (\"seq.pep\");\n  open (R\
1041 , \">result.aln\");\n  \n \n  #print stdout \"\\n\\
1042 ";\n  foreach $seq (keys(%s))\n    {\n      open (\
1043 F, \">seqfile\");\n      print (F \">$A\\n$s{$seq}\
1044 {seq}\\n\");\n      close (F);\n      \n      $bla\
1045 st_output=&run_blast ($s{$seq}{name},$method, $db,\
1046  \"seqfile\",\"outfile\");\n      %p=blast_xml2pro\
1047 file($s{$seq}{name}, $s{$seq}{seq},$maxid, $minid,\
1048 $mincov,$blast_output);\n      unlink ($blast_outp\
1049 ut);\n      if ($p{n}>1)\n      {\n       $pdbid=id2pdbid($\
1050 p{1}{identifyer});\n      if ( length ($pdbid)>5){$pd\
1051 bid=id2pdbid($p{1}{definition});}\n       \n      print R\
1052  \">$s{$seq}{name} _P_ $pdbid\\n\";\n     print stdo\
1053 ut \"\\tProcess: >$s{$seq}{name} _P_ $pdbid [$SERV\
1054 ER/blast/$db][$CACHE_STATUS]\\n\";\n    }\n      else\
1055 \n      {\n       print R \">$s{$seq}{name}\\n\";\n       print\
1056  stdout \"\\tProcess: >$s{$seq}{name} _P_ No Templ\
1057 ate Found [$SERVER/blast/$db][$CACHE_STATUS]\\n\";\
1058 \n      }\n    }\n  close (R);\n  &set_temporary_dir (\\
1059 "unset\",$mode, $method,\"result.aln\",$outfile);\\
1060 n}\nsub blast_msa\n  {\n    my ($infile,$outfile)=\
1061 @_;\n    my ($a, %seq);\n    %s1=&read_fasta_seq (\
1062 $infile);\n    foreach $s (keys (%s1))\n      {\n       \
1063 $i=$s1{$s}{order};\n    $s{$i}{name}=$s;\n      $s{$i}{seq\
1064 }=$s1{$s}{seq};\n       $s{$i}{len}=length( $s{$i}{seq})\
1065 ;\n     $s{n}++;\n      }\n    `formatdb -i $infile`;\\
1066 n    `blastpgp -i $infile -d $infile -m7 -j4 > io`\
1067 ;\n    &set_blast_type (\"io\");\n    \n    %FB=&x\
1068 ml2tag_list (\"io\", \"BlastOutput\");\n    \n    \
1069 open (F, \">$outfile\");\n    print F \"! TC_LIB_F\
1070 ORMAT_01\\n\";\n    print F \"$s{n}\\n\";\n    for\
1071  ( $a=0; $a<$s{n}; $a++)\n      {\n     print F \"$s{$\
1072 a}{name} $s{$a}{len} $s{$a}{seq}\\n\";\n      }\n \
1073    for ( $a=0; $a<$FB{n}; $a++)\n      {\n      %p=blas\
1074 t_xml2profile ($s{$a}{name}, $s{$a}{seq},100, 0, 0\
1075 , $FB{$a}{body});\n     for ($b=1; $b<$p{n}; $b++)\n     \
1076  {\n        my $l=length ($p{$b}{Qseq});\n          my $hi\
1077 t=$p{$b}{definition};\n     my $Qstart=$p{$b}{Qsta\
1078 rt};\n      my $Hstart=$p{$b}{Hstart};\n            my $id\
1079 entity=$p{$b}{identity};\n          my @lrQ=split (//,$\
1080 p{$b}{Qseq});\n     my @lrH=split (//,$p{$b}{Hseq}\
1081 );\n        my $i= $s1{$s{$a}{name}}{order}+1;\n            \
1082 my $j= $s1{$hit}{order}+1;\n        #if ( $j==$i){nex\
1083 t;}\n       printf F \"# %d %d\\n\", $i, $j;\n      #\
1084   print  F \"\\n$p{$b}{Qseq} ($Qstart)\\n$p{$b}{Hs\
1085 eq} ($Hstart)\";\n          for ($c=0; $c<$l; $c++)\n    \
1086      {\n                my $rQ=$lrQ[$c];\n              my $rH=$lrH[$c];\n              \
1087 my $n=0;\n              \n              if ($rQ ne \"-\"){$n++, $Qstart++;\
1088 }\n             if ($rH ne \"-\"){$n++; $Hstart++;}\n           \n              if\
1089  ( $n==2)\n               {\n               printf F \"\\t%d %d %d\\n\\
1090 ", $Qstart-1, $Hstart-1,$identity;\n              }\n         \
1091 }\n       }\n      }\n    print F \"! SEQ_1_TO_N\\n\";\
1092 \n    close (F);\n    return $output;\n  \n  }\n\n\
1093 sub seq2msa\n  {\n    my ($mode, $infile, $method,\
1094  $param, $outfile)=@_;\n    &set_temporary_dir (\"\
1095 set\",$infile,\"seq.pep\");\n    $param.=\" >/dev/\
1096 null 2>&1 \";\n    \n    #make sure test.pep is in\
1097  FASTA\n    &safe_system (\"t_coffee -other_pg seq\
1098 _reformat -in seq.pep -output fasta_seq > x\");\n \
1099    `mv x seq.pep`;\n    \n    if ( $method eq \"bl\
1100 astpgp\")\n      {\n    &blast_msa (\"seq.pep\", \"re\
1101 sult.aln\");\n      }\n    elsif ( $method eq \"mu\
1102 scle\")\n      {\n      `muscle -in seq.pep -out result\
1103 .aln $param`;\n      }\n    elsif ( $method eq \"p\
1104 robcons\")\n      {\n   `probcons seq.pep >result.al\
1105 n 2>/dev/null`;\n      }\n    elsif ( $method eq \\
1106 "mafft\")\n      {\n    `mafft --quiet --localpair --\
1107 maxiterate 1000 seq.pep> result.aln  2>/dev/null`\\
1108 n      }\n    elsif ( $method=~/prank/)\n      {\n\
1109         `$method -d=seq.pep -o=result.aln -quiet 2>/dev/n\
1110 ull`;\n `mv result.aln.1.fas result.aln`;\n      }\
1111 \n    else\n      {\n   `$method -infile=seq.pep -ou\
1112 tfile=result.aln`;\n      }\n    \n    &set_tempor\
1113 ary_dir (\"unset\",$mode, $method,\"result.aln\",$\
1114 outfile);\n    myexit ($EXIT_SUCCESS);\n  }\n\nsub\
1115  seq2thread_pair\n  {\n    my ($mode, $infile, $pd\
1116 bfile1, $method, $param, $outfile)=@_;\n    &set_t\
1117 emporary_dir (\"set\",$infile,\"seq.pep\",$pdbfile\
1118 1,\"struc.pdb\");\n    if ($method eq \"fugueali\"\
1119 )\n      {\n    #Env Variable that need to be defined\
1120  for Fugue\n    if (!$ENV{FUGUE_LIB_LIST}){$ENV{FUGUE\
1121 _LIB_LIST}=\"DUMMY\";}\n        if (!$ENV{HOMSTRAD_PATH})\
1122   {$ENV{HOMSTRAD_PATH}=\"DUMMY\";}\n    if (!$ENV{HOM\
1123 S_PATH}){$ENV{HOMS_PATH}=\"DUMMY\";}\n  \n      `joy str\
1124 uc.pdb >x 2>x`;\n       &check_file(\"struc.tem\", \"Joy\
1125  failed [FATAL:$program/$method]\");\n  `melody -t \
1126 struc.tem >x 2>x`;\n    &check_file(\"struc.tem\", \"\
1127 Melody failed [FATAL:$program/$method]\");\n    `fugu\
1128 eali -seq seq.pep -prf struc.fug -print > tmp_resu\
1129 lt.aln`;\n      \n      &check_file(\"tmp_result.aln\", \"Fu\
1130 gue failed [FATAL:$program/$method]\");\n       &safe_sy\
1131 stem (\"t_coffee -other_pg seq_reformat -in tmp_re\
1132 sult.aln -output fasta_aln >result.aln\");\n      \
1133 }\n    elsif ( $method eq \"t_coffee\")\n      {\n\
1134         &safe_system (\"t_coffee -in Pstruc.pdb Sseq.pep \
1135 Mslow_pair -outfile result.aln -quiet\");\n      }\
1136 \n    else\n      {\n   &safe_system (\"$method -inf\
1137 ile=seq.pep -pdbfile1=struc.pdb -outfile=result.al\
1138 n $param>x 2>x\");\n      }\n    &set_temporary_di\
1139 r (\"unset\",$mode,$method,\"result.aln\",$outfile\
1140 );\n    myexit ($EXIT_SUCCESS);\n  }\nsub seq2pdbi\
1141 d_pair\n  {\n    my ($mode, $pdbfile1, $pdbfile2, \
1142 $method, $param, $outfile)=@_;\n    my ($name);\n\\
1143 n    \n    &set_temporary_dir (\"set\");\n    $nam\
1144 e=$pdbfile1.\" \".$pdbfile2;\n\n    if (    &cache\
1145 _file(\"GET\",\"\",\"$name\",\"$method\",\"dali\",\
1146 $outfile,\"EBI\"))\n      {return $outfile;}\n    \
1147 else\n      {\n if ($method eq \"dalilite\")\n    {\
1148 \n          $pdbfile1=~/(....)(.)/;\n       $id1=$1; $c1=\
1149 $2;\n       \n      $pdbfile2=~/(....)(.)/;\n       $id\
1150 2=$1; $c2=$2;\n     \n      $command=\"t_coffee -ot\
1151 her_pg dalilite.pl --pdb1 $id1 --chainid1 $c1 --pd\
1152 b2 $id2 --chainid2 $c2 --email=$EMAIL  >dali_stder\
1153 r 2>dali_stderr\";\n        $dali=`$command`;\n     \\
1154 n           open (F, \"dali_stderr\");\n            while (<F>)\
1155 \n            {\n               if ( /JobId: dalilite-(\\S+)/)\n                {\\
1156 n                 $jobid=$1;\n          }\n           }\n           close (F);\n        \
1157     unlink (\"dali_stderr\");\n     \n      $output\
1158 1=\"dalilite-$jobid.txt\";\n        if ( -e $output1)\
1159 \n            {\n               unlink ($output1);\n            &url2file (\"h\
1160 ttp://www.ebi.ac.uk/Tools/es/cgi-bin/jobresults.cg\
1161 i/dalilite/dalilite-$jobid/aln.html\", \"output2\"\
1162 );\n            \n              if ( -e \"output2\")\n            {\n               my ($\
1163 seq1, $seq2);\n             $seq1=$seq2=\"\";\n             \n          \
1164     open (F, \"output2\");\n                while (<F>)\n                \
1165      {\n                        $l=$_;\n                        if ( $l=~/Query\\s+(\\S+)/)\\
1166 n                         {\n                       $seq1.=$1;\n                          }\n                   elsif ( $l=\
1167 ~/Sbjct\\s+(\\S+)/)\n                     {\n                       $seq2.=$1;\n                \
1168           }\n                 }\n                   close (F);\n                    unlink (\\
1169 "output2\");\n              if ($seq1 ne \"\" && $seq2 ne \
1170 \"\")\n               {\n                       $output3=\">$A\\n$seq1\\n>$B\\
1171 \n$seq2\\n\";\n                 $output3=~s/\\./-/g;\n                  open (F\
1172 , \">result.aln\");\n                   print F \"$output3\";\n                 \
1173 close (F);\n                  }\n                 }\n         }\n         }\n    \
1174   }\n    &cache_file(\"SET\",\"\",\"$name\",\"$met\
1175 hod\",\"dali\",\"result.aln\",\"EBI\");\n    &set_\
1176 temporary_dir (\"unset\",$mode, $method, \"result.\
1177 aln\",$outfile);\n    myexit ($EXIT_SUCCESS);\n  }\
1178 \nsub seq2pdb_pair\n  {\n    my ($mode, $pdbfile1,\
1179  $pdbfile2, $method, $param, $outfile)=@_;\n    \n\
1180     &set_temporary_dir (\"set\",$pdbfile1,\"pdb1.p\
1181 db\",$pdbfile2,\"pdb2.pdb\");\n    if ($method eq \
1182 \"t_coffee\")\n      {\n        &safe_system (\"t_coffee \
1183 -in Ppdb1.pdb Ppdb2.pdb -quiet -outfile=result.aln\
1184 \");\n      }\n    elsif ( $method eq \"TMalign\")\
1185 \n      {\n     if ( &safe_system (\"TMalign pdb1.pdb \
1186 pdb2.pdb >tmp1\")==$EXIT_SUCCESS)\n       {\n       `tai\
1187 l -4 tmp1 > tmp2`;\n        \n      open (F, \"tmp2\")\
1188 ;\n         while (<F>)\n             {\n               unshift(@l, $_);\\
1189 n             }\n           close (F);\n            open (F, \">resul\
1190 t.aln\");\n         $l[3]=~s/[^a-zA-Z0-9-]/\\-/g;\n       \
1191   $l[1]=~s/[^a-zA-Z0-9-]/\\-/g;\n           print F \">$\
1192 A\\n$l[3]\\n>$B\\n$l[1]\\n\";\n     close (F);\n         \
1193  }\n    else\n    {\n       print \"ERROR: TMalign faile\
1194 d to align the considered structures[tc_generic_me\
1195 thod.pl]\\n\";\n            `rm result.aln >/dev/null 2>/\
1196 dev/null`;\n      }\n      }\n    elsif ( $method eq \
1197 \"mustang\")\n      {\n if ( &safe_system (\"musta\
1198 ng -i pdb1.pdb pdb2.pdb -F fasta >/dev/null 2>/dev\
1199 /null\")==$EXIT_SUCCESS)\n        {\n       `mv results.a\
1200 fasta result.aln`;\n      }\n   else\n    {\n       print \
1201 \"ERROR: mustang failed to align the considered st\
1202 ructures[tc_generic_method.pl]\\n\";\n      `rm res\
1203 ult.aln >/dev/null 2>/dev/null`;\n        }\n      }\n \
1204    else\n      {\n      if ( &safe_system (\"$method -p\
1205 dbfile1=pdb1.pep -pdbfile2=pdb2.pdb -outfile=resul\
1206 t.aln $param>x 2>x\")==$EXIT_SUCCESS)\n   {\n       \
1207 `mv results.afasta result.aln`;\n         }\n   else\n    {\
1208 \n          print \"ERROR: $method failed to align the \
1209 considered structures[tc_generic_method.pl]\\n\";\\
1210 n           `rm result.aln >/dev/null 2>/dev/null`;\n     \
1211 }\n      }\n    &set_temporary_dir (\"unset\",$mod\
1212 e, $method, \"result.aln\",$outfile);\n    myexit \
1213 ($EXIT_SUCCESS);\n  }\n\nsub seq2profile_pair\n  {\
1214 \n    my ($mode, $profile1, $profile2, $method, $p\
1215 aram, $outfile)=@_;\n    \n    \n    if ($method e\
1216 q \"clustalw\")\n      {\n      &set_temporary_dir (\"s\
1217 et\",$profile1,\"prf1.aln\",$profile2,\"prf2.aln\"\
1218 );\n    `clustalw -profile1=prf1.aln -profile2=prf2.a\
1219 ln -outfile=result.aln`;\n      &set_temporary_dir (\"u\
1220 nset\",$mode, $method, \"result.aln\",$outfile);\n\
1221       }\n    elsif ( $method eq \"hhalign\")\n    \
1222   {\n   hhalign ( $profile1,$profile2,$outfile,$para\
1223 m);\n      }\n    else\n      {\n       \n      `$method -pro\
1224 file1=prf1.aln -profile2=prf2.aln -outfile=result.\
1225 aln $param>x 2>x`;\n      }\n   \n    myexit ($EXI\
1226 T_SUCCESS);\n  }\n\nsub pg_is_installed\n  {\n    \
1227 my @ml=@_;\n    my $r, $p, $m;\n    my $supported=\
1228 0;\n    \n    my $p=shift (@ml);\n    $r=`which $p\
1229  2>/dev/null`;\n    if ($r eq \"\"){return 0;}\n  \
1230   else {return 1;}\n  }\nsub check_pg_is_installed\
1231 \n  {\n    my @ml=@_;\n    my $r=&pg_is_installed \
1232 (@ml);\n    if (!$r)\n      {\n print STDERR \"\\n\
1233 Program $p Supported but Not Installed on your sys\
1234 tem [FATAL:tc_generic_method]\\n\";\n   myexit ($EXI\
1235 T_FAILURE);\n      }\n    else\n      {\n       return 1\
1236 ;\n      }\n  }\nsub set_temporary_dir\n  {\n    m\
1237 y @list=@_;\n    my $dir_mode, $a, $mode, $method;\
1238 \n\n    $dir_mode=shift (@list);\n\n    \n    if (\
1239  $dir_mode eq \"set\")\n      {\n       $initial_dir=cwd\
1240 ();\n   if ( !$tmp_dir)\n         {\n       srand;\n        $ra\
1241 nd=rand (100000);\n         $tmp_dir=\"$TMPDIR/tmp4tco\
1242 ffee_profile_pair_dir_$$_P_$rand\";\n     }\n   if ( !\
1243 -d $tm_dir)\n     {\n       `mkdir $tmp_dir`;\n   }\n   \
1244 \n      for ( $a=0; $a<=$#list; $a+=2)\n              {\n               `cp\
1245  $list[$a] $tmp_dir/$list[$a+1]`;\n           }\n       chdi\
1246 r $tmp_dir;\n      }\n    elsif ( $dir_mode eq \"u\
1247 nset\")\n      {\n      $mode=shift (@list);\n  $method=\
1248 shift (@list);\n        \n      if (!-e $list[0])\n       {\n       \
1249 print STDERR (\"Program $method failed to produce \
1250 $list[1] [FATAL:$mode/$method/$program]\\n\");\n         \
1251    myexit ($EXIT_FAILURE);\n      }\n   else\n    {\n     \
1252   chdir $initial_dir;\n     # `t_coffee -other_pg \
1253 seq_reformat -in $tmp_dir/$list[0] -output fasta_a\
1254 ln -out $tmp_dir/result2.aln`;\n            `cp $tmp_dir/\
1255 $list[0] $tmp_dir/result2.aln`;\n           if ( $list[1\
1256 ] eq \"stdout\")\n            {\n               open (F, \"$tmp_dir/\
1257 result2.aln\");\n               while (<F>){print $_;}close(F);\
1258 \n            }\n           else\n            {\n               `mv $tmp_dir/re\
1259 sult2.aln $list[1]`;\n        }\n           shift (@list)\
1260 ; shift (@list);\n          foreach $f (@list)\n              \
1261 {\n             `mv $tmp_dir/$f .`;\n         }\n         }\n      }\\
1262 n  }\nsub clean_dir\n  {\n    my $dir=@_[0];\n    \
1263 if ( !-d $dir){return ;}\n    elsif (!($dir=~/tmp/\
1264 )){return ;}#safety check 1\n    elsif (($dir=~/\\\
1265 */)){return ;}#safety check 2\n    else\n      {\n\
1266         `rm -rf $dir`;\n      }\n    return;\n  }\n\nsub \
1267 myexit\n  {\n    my $code=@_[0];\n    &clean_dir (\
1268 $tmp_dir);\n    exit ($code);\n  }\n\nsub my_get_o\
1269 pt\n  {\n    my @list=@_;\n    my $cl, $a, $argv, \
1270 @argl;\n    \n    @argl=();\n    $cl=shift @list;\\
1271 n    for ( $a=0; $a<=$#list; $a+=3)\n      {\n  $op\
1272 tion=$list[$a];\n       $optional=$list[$a+1];\n        $status\
1273 =$list[$a+2];\n $argv=\"\";\n   if ($cl=~/$option(\\\
1274 S+)/){$argv=$1;}\n      @argl=(@argl,$argv);\n  \n      \n      #$\
1275 optional:0=>optional\n  #$optional:1=>must be set\n\
1276         #$status: 0=>no requirement\n   #$status: 1=>must b\
1277 e an existing file\n    #$status: 2=>must be an insta\
1278 lled package\n  \n\n    if ($optional==0){;}\n  elsif (\
1279  $optional==1 && $argv eq \"\")\n         {\n       print \
1280 STDERR \"ERROR: Option $option must be set [FATAL:\
1281 $program/$mode/$method]\\n\";\n     myexit ($EXIT_\
1282 FAILURE);\n       }\n   if ($status==0){;}\n    elsif ($sta\
1283 tus ==1 && $argv ne \"\" && !-e $argv)\n          {\n      \
1284  print STDERR \"ERROR: File $argv must exist [FATA\
1285 L:$program/$mode/$method]\\n\";\n           myexit ($EXI\
1286 T_FAILURE);\n     }\n   elsif ( $status==2 && $argv ne\
1287  \"\" && &check_pg_is_installed ($argv)==0)\n     {\\
1288 n           print STDERR \"ERROR: $argv is not installed\
1289  [FATAL:$program/$mode/$method]\\n\";\n     myexit\
1290  ($EXIT_FAILURE);\n       }\n      }\n\n    return @ar\
1291 gl;\n    }\n\nsub check_file \n  {\n    my ($file,\
1292  $msg)=@_;\n\n    if ( !-e $file)\n      {\n    print\
1293  \"\\n$msg\\n\";\n      myexit ($EXIT_FAILURE);\n      \
1294 }\n    }\nsub hhalign\n  {\n    my ($aln1, $aln2, \
1295 $outfile, $param)=@_;\n    my $h1, $h2;\n    \n   \
1296  $h{0}{index}=0;\n    $h{1}{index}=1;\n    \n    $\
1297 h{0}{aln}=$aln1;\n    $h{1}{aln}=$aln2;\n\n   \n\n\
1298     %{$h{0}}=aln2psi_profile (%{$h{0}});\n    %{$h\
1299 {1}}=aln2psi_profile (%{$h{1}});\n\n    $param=~s/\
1300 #S/ /g;\n    $param=~s/#M/\\-/g;\n    $param=~s/#E\
1301 /\\=/g;\n    \n\n    \n    $command=\"hhalign -i $\
1302 h{0}{a3m} -t $h{1}{a3m} -tc $outfile.tmp -rank 1 -\
1303 mapt 0 $param\";\n    `$command`;\n    \n  #  `hha\
1304 lign -i $h{0}{a3m} -t $h{1}{a3m} -tc $outfile.tmp \
1305 -rank 1 -mapt 0 -gapf 0.8 -gapg 0.8`;\n    \n\n   \
1306  # To run global use the following\n    \n    open\
1307  (I, \"$outfile.tmp\");\n    open (O, \">$outfile\\
1308 ");\n    $h{0}{cons}=s/\\./x/g;\n    $h{1}{cons}=s\
1309 /\\./x/g;\n\n    print O \"! TC_LIB_FORMAT_01\\n2\\
1310 \n$h{0}{name} $h{0}{len} $h{0}{seq}\\n$h{1}{name} \
1311 $h{1}{len} $h{1}{seq}\\n#1 2\\n\";\n    \n    whil\
1312 e (<I>)\n      {\n      if (/(\\d+)\\s+(\\d+)\\s+(\\d+)\
1313 /)\n      {\n       print O \"\\t$h{0}{$1}\\t$h{1}{$2}\\
1314 \t$3\\n\";\n      }\n      }\n    print O \"! SEQ_1_T\
1315 O_N\\n\";\n\n    close (O);\n    close (I);\n  }\n\
1316 \nsub aln2psi_profile\n  {\n    my (%h)=@_;\n    m\
1317 y ($aln,$i,$hv, $a, @c, $n);\n   \n    $i=$h{index\
1318 };\n    $aln=$h{aln};\n\n    `cp $aln $$.hhh_aln`;\
1319 \n    $command=\"t_coffee -other_pg seq_reformat -\
1320 in $aln -output hasch\";\n    $hv=`$command`;chomp\
1321  ($hv);\n    \n    $h{a2m}=\"$tmp/$hv.tmp4hhpred.a\
1322 2m\";\n    $h{a3m}=\"$tmp/$hv.tmp4hhpred.a3m\";\n \
1323    if ( -e $h{a3m}){;}\n    else\n      {\n     `hhcon\
1324 sensus  -M 50 -i $h{aln} -oa2m $h{a2m}`;\n      if (!-e\
1325  $h{a2m})\n       {\n       print STDERR \"Program tc_ge\
1326 neric_method.pl FAILED to run:\\n\\thhconsensus  -\
1327 M 50 -i $h{aln} -oa2m $h{a2m}\";\n          myexit ($EX\
1328 IT_FAILURE);\n    }\n   \n      `hhconsensus  -M 50 -i $h{\
1329 aln} -oa3m $h{a3m}`;\n  if (!-e $h{a3m})\n        {\n     \
1330   print STDERR \"Program tc_generic_method.pl FAIL\
1331 ED to run:\\n\\thhconsensus  -M 50 -i $h{aln} -oa3\
1332 m $h{a3m}\";\n      myexit ($EXIT_FAILURE);\n     }\n\
1333        `buildali.pl $h{a3m} -n 1`;\n      }\n    \\
1334 n    \n    $h{a2m_seq}=`head -n 2 $h{a2m} | grep -\
1335 v \">\"`;chomp ($h{a2m_seq});\n    $h{a3m_seq}=`he\
1336 ad -n 2 $h{a3m} | grep -v \">\"`;chomp ($h{a3m_seq\
1337 });\n    $h{cons}=$h{a2m_seq};\n    $h{seq}=`head \
1338 -n 2 $h{aln} | grep -v \">\"`;chomp ($h{seq});\n  \
1339   \n    \n\n    @c=split (//, $h{cons});\n    $h{l\
1340 en}=$#c+1;\n    for ($n=0,$a=0, $b=0; $a<$h{len};$\
1341 a++)\n      {\n if ( $c[$a]=~/[A-Z]/)\n   {\n       \
1342 $h{++$n}=++$b;\n\n        }\n   elsif ( $c[$a]=~/[a-z\\.]\
1343 /)\n      {\n       ++$b;\n       }\n      }\n    \n    $na\
1344 me=`head -n 2 $h{aln} | grep \">\"`;\n    $name=~/\
1345 \\>(\\S+)/;\n    $h{name}=$1;\n    \n    `cp $h{a2\
1346 m} $i.a2m`;\n    `cp $h{a3m} $i.a3m`;\n    `cp $h{\
1347 aln} $i.hh_aln`;\n    \n    return %h;\n  }\n\nsub\
1348  read_fasta_seq \n  {\n    my $f=@_[0];\n    my %h\
1349 seq;\n    my (@seq, @com, @name);\n    my ($a, $s,\
1350 $nseq);\n\n    open (F, $f);\n    while (<F>)\n   \
1351    {\n  $s.=$_;\n      }\n    close (F);\n\n    \n \
1352    @name=($s=~/>(\\S*).*\\n[^>]*/g);\n    \n    @s\
1353 eq =($s=~/>.*.*\\n([^>]*)/g);\n    @com =($s=~/>\\\
1354 S*(.*)\\n([^>]*)/g);\n\n    \n    $nseq=$#name+1;\\
1355 n    \n    for ($a=0; $a<$nseq; $a++)\n      {\n        m\
1356 y $s;\n my $n=$name[$a];\n      $hseq{$n}{name}=$n;\n   $\
1357 seq[$a]=~s/[^A-Za-z]//g;\n      $hseq{$n}{order}=$a;\n  \
1358 $hseq{$n}{seq}=$seq[$a];\n      $hseq{$n}{com}=$com[$a]\
1359 ;\n     \n      }\n    return %hseq;\n  }\n\nsub file_\
1360 contains \n  {\n    my ($file, $tag, $max)=(@_);\n\
1361     my ($n);\n    $n=0;\n    \n    if ( !-e $file \
1362 && ($file =~/$tag/)) {return 1;}\n    elsif ( !-e \
1363 $file){return 0;}\n    else \n      {\n open (FC, \
1364 \"$file\");\n   while ( <FC>)\n   {\n       if ( ($_=~\
1365 /$tag/))\n            {\n               close (FC);\n           return 1;\n      \
1366      }\n            elsif ($max && $n>$max)\n         {\n               \
1367 close (FC);\n           return 0;\n           }\n           $n++;\n      \
1368  }\n      }\n    close (FC);\n    return 0;\n  }\n\
1369             \n    \nsub file2string\n  {\n    my $f=@_[0];\
1370 \n    my $string, $l;\n    open (F,\"$f\");\n    w\
1371 hile (<F>)\n      {\n\n $l=$_;\n        #chomp ($l);\n  $s\
1372 tring.=$l;\n      }\n    close (F);\n    $string=~\
1373 s/\\r\\n//g;\n    $string=~s/\\n//g;\n    return $\
1374 string;\n  }\n\n\nsub my_get_opt\n  {\n    my @lis\
1375 t=@_;\n    my $cl, $a, $argv, @argl;\n    \n    @a\
1376 rgl=();\n    $cl=shift @list;\n    for ( $a=0; $a<\
1377 =$#list; $a+=3)\n      {\n      $option=$list[$a];\n    $o\
1378 ptional=$list[$a+1];\n  $status=$list[$a+2];\n  $arg\
1379 v=\"\";\n       if ($cl=~/$option(\\S+)/){$argv=$1;}\n  @\
1380 argl=(@argl,$argv);\n   \n      \n      #$optional:0=>optional\
1381 \n      #$optional:1=>must be set\n     #$status: 0=>no req\
1382 uirement\n      #$status: 1=>must be an existing file\n\
1383         #$status: 2=>must be an installed package\n     \n\n    \
1384 if ($optional==0){;}\n  elsif ( $optional==1 && $ar\
1385 gv eq \"\")\n     {\n       print STDERR \"ERROR: Opti\
1386 on $option must be set [FATAL:$program/$mode/$meth\
1387 od]\\n\";\n         myexit ($EXIT_FAILURE);\n     }\n   if\
1388  ($status==0){;}\n      elsif ($status ==1 && $argv ne \
1389 \"\" && !-e $argv)\n      {\n       print STDERR \"ERRO\
1390 R: File $argv must exist [FATAL:$program/$mode/$me\
1391 thod]\\n\";\n       myexit ($EXIT_FAILURE);\n     }\n   \
1392 elsif ( $status==2 && $argv ne \"\" && &check_pg_i\
1393 s_installed ($argv)==0)\n         {\n       print STDERR \\
1394 "ERROR: $argv is not installed [FATAL:$program/$mo\
1395 de/$method]\\n\";\n         myexit ($EXIT_FAILURE);\n   \
1396   }\n      }\n\n    return @argl;\n    }\n\nsub ta\
1397 g2value \n  {\n    \n    my $tag=(@_[0]);\n    my \
1398 $word=(@_[1]);\n    my $return;\n    \n    $tag=~/\
1399 $word=\"([^\"]+)\"/;\n    $return=$1;\n    return \
1400 $return;\n  }\n      \nsub hit_tag2pdbid\n  {\n   \
1401  my $tag=(@_[0]);\n    my $pdbid;\n       \n    $t\
1402 ag=~/id=\"(\\S+)\"/;\n    $pdbid=$1;\n    $pdbid=~\
1403 s/_//;\n    return $pdbid;\n  }\nsub id2pdbid \n  \
1404 {\n    my $in=@_[0];\n    my $id;\n    \n    $in=~\
1405 /(\\S+)/;\n    $id=$in;\n    \n    if ($id =~/pdb/\
1406 )\n      {\n    $id=~/pdb(.*)/;\n       $id=$1;\n      }\n \
1407    $id=~s/[|��_]//g;\n    return $id;\n  }\nsu\
1408 b set_blast_type \n  {\n    my $file =@_[0];\n    \
1409 if (&file_contains ($file,\"EBIApplicationResult\"\
1410 ,100)){$BLAST_TYPE=\"EBI\";}\n    elsif (&file_con\
1411 tains ($file,\"NCBI_BlastOutput\",100)) {$BLAST_TY\
1412 PE=\"NCBI\";}\n    else\n      {\n      $BLAST_TYPE=\"\\
1413 ";\n      }\n    return $BLAST_TYPE;\n  }\nsub bla\
1414 st_xml2profile \n  {\n    my ($name,$seq,$maxid, $\
1415 minid, $mincov, $file)=(@_);\n    my (%p, $a, $str\
1416 ing, $n);\n    \n\n\n    if ($BLAST_TYPE eq \"EBI\\
1417 " || &file_contains ($file,\"EBIApplicationResult\\
1418 ",100)){%p=ebi_blast_xml2profile(@_);}\n    elsif \
1419 ($BLAST_TYPE eq \"NCBI\" || &file_contains ($file,\
1420 \"NCBI_BlastOutput\",100)){%p=ncbi_blast_xml2profi\
1421 le(@_);}\n    else \n      {\n  print \"***********\
1422 * ERROR: Blast Returned an unknown XML Format ****\
1423 ******************\";\n myexit ($EXIT_FAILURE);\n \
1424      }\n    for ($a=0; $a<$p{n}; $a++)\n      {\n       \
1425 my $name=$p{$a}{name};\n        $p{$name}{seq}=$p{$a}{seq\
1426 };\n      }\n    return %p;\n  }\nsub ncbi_blast_x\
1427 ml2profile \n  {\n    my ($name,$seq,$maxid, $mini\
1428 d, $mincov, $string)=(@_);\n    my ($L,$l, $a,$b,$\
1429 c,$d,$nhits,@identifyerL);\n    \n    \n    $seq=~\
1430 s/[^a-zA-Z]//g;\n    $L=length ($seq);\n    \n    \
1431 %hit=&xml2tag_list ($string, \"Hit\");\n    \n    \
1432 \n    for ($nhits=0,$a=0; $a<$hit{n}; $a++)\n     \
1433  {\n    my ($ldb,$id, $identity, $expectation, $start\
1434 , $end, $coverage, $r);\n       my (%ID,%DE,%HSP);\n    \n      \
1435 $ldb=\"\";\n\n  %ID=&xml2tag_list ($hit{$a}{body}, \
1436 \"Hit_id\");\n  $identifyer=$ID{0}{body};\n     \n      %DE=\
1437 &xml2tag_list ($hit{$a}{body}, \"Hit_def\");\n  $de\
1438 finition=$DE{0}{body};\n        \n      %HSP=&xml2tag_list ($h\
1439 it{$a}{body}, \"Hsp\");\n       for ($b=0; $b<$HSP{n}; $\
1440 b++)\n    {\n       my (%START,%END,%E,%I,%Q,%M);\n\n\
1441          \n         %START=&xml2tag_list ($HSP{$b}{body}, \"H\
1442 sp_query-from\");\n         %HSTART=&xml2tag_list ($HS\
1443 P{$b}{body}, \"Hsp_hit-from\");\n           \n      %LEN=\
1444   &xml2tag_list ($HSP{$b}{body}, \"Hsp_align-len\"\
1445 );\n        %END=  &xml2tag_list ($HSP{$b}{body}, \"H\
1446 sp_query-to\");\n           %HEND=  &xml2tag_list ($HSP{\
1447 $b}{body}, \"Hsp_hit-to\");\n       %E=&xml2tag_list\
1448      ($HSP{$b}{body}, \"Hsp_evalue\");\n            %I=&x\
1449 ml2tag_list     ($HSP{$b}{body}, \"Hsp_identity\")\
1450 ;\n         %Q=&xml2tag_list     ($HSP{$b}{body}, \"Hs\
1451 p_qseq\");\n        %M=&xml2tag_list     ($HSP{$b}{bo\
1452 dy}, \"Hsp_hseq\");\n       \n      for ($e=0; $e<$Q{\
1453 n}; $e++)\n\n         {\n               $qs=$Q{$e}{body};\n             $ms=\
1454 $M{$e}{body};\n         \n              $expectation=$E{$e}{body};\n    \
1455         $identity=($LEN{$e}{body}==0)?0:$I{$e}{body}/$LEN\
1456 {$e}{body}*100;\n               $start=$START{$e}{body};\n              $en\
1457 d=$END{$e}{body};\n             $Hstart=$HSTART{$e}{body};\n    \
1458         $Hend=$HEND{$e}{body};\n        \n              $coverage=(($end-$st\
1459 art)*100)/$L;\n\n       \n              if ($identity>$maxid || $ide\
1460 ntity<$minid || $coverage<$mincov){next;}\n             @lr1=\
1461 (split (//,$qs));\n             @lr2=(split (//,$ms));\n                $l=\
1462 $#lr1+1;\n              for ($c=0;$c<$L;$c++){$p[$nhits][$c]=\\
1463 "-\";}\n                for ($d=0,$c=0; $c<$l; $c++)\n            {\n            \
1464    $r=$lr1[$c];\n                   if ( $r=~/[A-Za-z]/)\n                 \
1465    {\n                  \n                      $p[$nhits][$d + $start-1]=$lr2[$c];\\
1466 n                       $d++;\n               }\n                 }\n           $Qseq[$nhits]=$qs;\\
1467 n               $Hseq[$nhits]=$ms;\n            $QstartL[$nhits]=$start;\\
1468 n               $HstartL[$nhits]=$Hstart;\n             $identityL[$nhits]\
1469 =$identity;\n           $endL[$nhits]=$end;\n           $definitionL\
1470 [$nhits]=$definition;\n         $identifyerL[$nhits]=$ide\
1471 ntifyer;\n              $comment[$nhits]=\"$ldb|$identifyer [E\
1472 val=$expectation][id=$identity%][start=$Hstart end\
1473 =$Hend]\";\n            $nhits++;\n           }\n         }\n      }\n\
1474     \n    $profile{n}=0;\n    $profile{$profile{n}\
1475 }{name}=$name;\n    $profile{$profile{n}}{seq}=$se\
1476 q;\n    $profile {n}++;\n    \n    for ($a=0; $a<$\
1477 nhits; $a++)\n      {\n $n=$a+1;\n      \n      $profile{$n}\
1478 {name}=\"$name\\_$a\";\n        $profile{$n}{seq}=\"\";\n\
1479         $profile{$n}{Qseq}=$Qseq[$a];\n $profile{$n}{Hseq\
1480 }=$Hseq[$a];\n  $profile{$n}{Qstart}=$QstartL[$a];\\
1481 n       $profile{$n}{Hstart}=$HstartL[$a];\n    $profile{$n\
1482 }{identity}=$identityL[$a];\n   $profile{$n}{definit\
1483 ion}=$definitionL[$a];\n        $profile{$n}{identifyer}=\
1484 $identifyerL[$a];\n     $profile{$n}{comment}=$comment\
1485 [$a];\n for ($b=0; $b<$L; $b++)\n         {\n       if ($p\
1486 [$a][$b])\n           {\n               $profile{$n}{seq}.=$p[$a][$\
1487 b];\n         }\n           else\n            {\n               $profile{$n}\
1488 {seq}.=\"-\";\n       }\n         }\n      }\n    \n    \
1489 $profile{n}=$nhits+1;\n    return %profile;\n  }\n\
1490 sub ebi_blast_xml2profile \n  {\n    my ($name,$se\
1491 q,$maxid, $minid, $mincov, $string)=(@_);\n    my \
1492 ($L,$l, $a,$b,$c,$d,$nhits,@identifyerL,$identifye\
1493 r);\n    \n\n    \n    $seq=~s/[^a-zA-Z]//g;\n    \
1494 $L=length ($seq);\n    %hit=&xml2tag_list ($string\
1495 , \"hit\");\n    \n    for ($nhits=0,$a=0; $a<$hit\
1496 {n}; $a++)\n      {\n   my ($ldb,$id, $identity, $ex\
1497 pectation, $start, $end, $coverage, $r);\n      my (%Q,\
1498 %M,%E,%I);\n    \n      $ldb=&tag2value ($hit{$a}{open}, \\
1499 "database\");\n $identifyer=&tag2value ($hit{$a}{o\
1500 pen}, \"id\");\n\n      $description=&tag2value ($hit{$\
1501 a}{open}, \"description\");\n   \n      %Q=&xml2tag_list \
1502 ($hit{$a}{body}, \"querySeq\");\n       %M=&xml2tag_list\
1503  ($hit{$a}{body}, \"matchSeq\");\n      %E=&xml2tag_lis\
1504 t ($hit{$a}{body}, \"expectation\");\n  %I=&xml2tag\
1505 _list ($hit{$a}{body}, \"identity\");\n \n\n    for (\
1506 $b=0; $b<$Q{n}; $b++)\n   {\n\n     $qs=$Q{$b}{bod\
1507 y};\n       $ms=$M{$b}{body};\n     \n      $expectat\
1508 ion=$E{$b}{body};\n         $identity=$I{$b}{body};\n   \
1509     \n              \n      $start=&tag2value ($Q{$b}{o\
1510 pen}, \"start\");\n         $end=&tag2value ($Q{$b}{op\
1511 en}, \"end\");\n            $startM=&tag2value ($M{$b}{op\
1512 en}, \"start\");\n          $endM=&tag2value ($M{$b}{op\
1513 en}, \"end\");\n            $coverage=(($end-$start)*100)\
1514 /$L;\n      \n     # print \"$id: ID: $identity COV:\
1515  $coverage [$start $end]\\n\";\n            \n      \n     \
1516  if ($identity>$maxid || $identity<$minid || $cove\
1517 rage<$mincov){next;}\n      # print \"KEEP\\n\";\n\\
1518 n           \n      @lr1=(split (//,$qs));\n        @lr2=(sp\
1519 lit (//,$ms));\n            $l=$#lr1+1;\n           for ($c=0;$\
1520 c<$L;$c++){$p[$nhits][$c]=\"-\";}\n         for ($d=0,\
1521 $c=0; $c<$l; $c++)\n          {\n               $r=$lr1[$c];\n          if\
1522  ( $r=~/[A-Za-z]/)\n              {\n               \n              $p[$nhits\
1523 ][$d + $start-1]=$lr2[$c];\n                $d++;\n               }\n    \
1524      }\n          \n        \n      $identifyerL[$nhits]=$ide\
1525 ntifyer;\n          $comment[$nhits]=\"$ldb|$identifyer\
1526  [Eval=$expectation][id=$identity%][start=$startM \
1527 end=$endM]\";\n     $nhits++;\n   }\n      }\n    \
1528 \n    $profile{n}=0;\n    $profile{$profile{n}}{na\
1529 me}=$name;\n    $profile{$profile{n}}{seq}=$seq;\n\
1530     $profile {n}++;\n    \n    for ($a=0; $a<$nhit\
1531 s; $a++)\n      {\n     $n=$a+1;\n      $profile{$n}{name}=\
1532 \"$name\\_$a\";\n       $profile{$n}{seq}=\"\";\n       $profi\
1533 le{$n}{identifyer}=$identifyerL[$a];\n  \n      $profile\
1534 {$n}{comment}=$comment[$a];\n   for ($b=0; $b<$L; $b\
1535 ++)\n     {\n       if ($p[$a][$b])\n         {\n               $prof\
1536 ile{$n}{seq}.=$p[$a][$b];\n           }\n           else\n       \
1537      {\n                $profile{$n}{seq}.=\"-\";\n           }\n         \
1538 }\n      }\n    $profile{n}=$nhits+1;\n    \n    r\
1539 eturn %profile;\n  }\nsub output_profile\n  {\n   \
1540  my ($name,%profile)=(@_);\n    my ($a);\n    open\
1541  (P, \">$name\");\n    for ($a=0; $a<$profile{n}; \
1542 $a++)\n      {\n        print P \">$profile{$a}{name} $pr\
1543 ofile{$a}{comment}\\n$profile{$a}{seq}\\n\";\n    \
1544   }\n    close (P);\n    return;\n  }\nsub blast_x\
1545 ml2hit_list\n  {\n    my $string=(@_[0]);\n    ret\
1546 urn &xml2tag_list ($string, \"hit\");\n  }\nsub xm\
1547 l2tag_list  \n  {\n    my ($string_in,$tag)=@_;\n \
1548    my $tag_in, $tag_out;\n    my %tag;\n    \n    \
1549 if (-e $string_in)\n      {\n   $string=&file2string\
1550  ($string_in);\n      }\n    else\n      {\n    $stri\
1551 ng=$string_in;\n      }\n    $tag_in1=\"<$tag \";\\
1552 n    $tag_in2=\"<$tag>\";\n    $tag_out=\"/$tag>\"\
1553 ;\n    $string=~s/>/>##1/g;\n    $string=~s/</##2<\
1554 /g;\n    $string=~s/##1/<#/g;\n    $string=~s/##2/\
1555 #>/g;\n    @l=($string=~/(\\<[^>]+\\>)/g);\n    $t\
1556 ag{n}=0;\n    $in=0;$n=-1;\n  \n \n\n    foreach $\
1557 t (@l)\n      {\n\n     $t=~s/<#//;\n   $t=~s/#>//;\n   \n\
1558         if ( $t=~/$tag_in1/ || $t=~/$tag_in2/)\n          {\n    \\
1559 n           $in=1;\n        $tag{$tag{n}}{open}=$t;\n       $\
1560 n++;\n      \n    }\n   elsif ($t=~/$tag_out/)\n          {\n\
1561             \n\n            $tag{$tag{n}}{close}=$t;\n      $tag{\
1562 n}++;\n     $in=0;\n      }\n   elsif ($in)\n     {\n      \
1563 \n          $tag{$tag{n}}{body}.=$t;\n    }\n      }\n  \
1564 \n    return %tag;\n  }\n\n\nsub seq2gor_predictio\
1565 n \n  {\n    my ($name, $seq,$infile, $outfile, $g\
1566 or_seq, $gor_obs)=(@_);\n    my ($l);\n    \n    `\
1567 gorIV -prd $infile -seq $gor_seq -obs $gor_obs > g\
1568 or_tmp`;\n    open (GR, \">$outfile\");\n    open \
1569 (OG, \"gor_tmp\");\n\n    while (<OG>)\n      {\n       \
1570 \n      $l=$_;\n        if ($l=~/\\>/){print GR \"$l\";}\n      els\
1571 if ( $l=~/Predicted Sec. Struct./)\n      {\n       $l=\
1572 ~s/Predicted Sec. Struct\\.//;\n            print GR \"$l\
1573 \";\n     }\n      }\n    close (GR);\n    close (OG\
1574 );\n    return;\n  }\nsub seq2msa_tm_prediction \n\
1575   {\n    my ($name, $seq,$infile, $outfile, $arch,\
1576  $psv)=(@_);\n    my (%p,%gseq,%R, $blast_output, \
1577 %s, $l);\n    \n    $blast_output=&run_blast ($nam\
1578 e,\"blastp\", \"uniprot\", $infile, \"outfile\");\\
1579 n    \n    \n    %p=blast_xml2profile($name,$seq,$\
1580 maxid, $minid,$mincov,$blast_output);\n    \n    \\
1581 n    open (F, \">tm_input\");\n    for ($a=0; $a<$\
1582 p{n}; $a++)\n      {\n  my $s;\n        \n      $s=$p{$a}{seq};\
1583 \n      $s=uc($s);\n    print F \">$p{$a}{name}\\n$s\\n\";\
1584 \n      #print stdout \">$p{$a}{name}\\n$s\\n\";\n     \
1585  }\n    close (F);\n    print \"\\tPSITM: kept  $p\
1586 {n} Homologues for Sequence $p{0}{name}\\n\";\n   \
1587  &safe_system (\"t_coffee -other_pg fasta_seq2hmmt\
1588 op_fasta.pl -in=tm_input -out=tm_output -arch=$arc\
1589 h -psv=$psv\");\n    unlink (\"tm_input\");\n    %\
1590 gs=read_fasta_seq(\"tm_output\");\n    foreach $s \
1591 (keys(%gs))\n      {\n  my (@list, $seq, @plist, @p\
1592 seq, $L, $PL);\n        \n      \n      #Prediction\n   $seq=$gs{$s}{\
1593 seq};\n $seq=uc($seq);\n        $L=length($seq);\n      @list=\
1594 split //, $seq;\n       \n      #Original Profile Sequence\n    \
1595 $pseq=$p{$s}{seq};\n    $pseq=uc($pseq);\n      $PL=length\
1596 ($pseq);\n      @plist=split //, $pseq;\n       \n      for ($c=0,\
1597 $b=0; $b<$PL; $b++)\n     {\n       my $r=$plist[$b];\\
1598 n           if($r ne \"-\" && $r ne \"X\")\n          {\n               \
1599 $r=$plist[$b]=$list[$c++];\n          }\n         }\n   \n      if\
1600  ($c!=$L)\n       {\n       print \"ERROR: Could Not Thr\
1601 ead the Prediction Back [FATAL:tc_generic_method.p\
1602 l]\\n\";\n          myexit ($EXIT_FAILURE);\n     }\n   for\
1603  ($b=0;$b<$PL; $b++)\n    {\n       my $r=$plist[$b];\
1604 \n          if ( $r ne \"-\" && $r ne \"X\")\n        {\\
1605 n               $R{$b}{$r}++;\n      }\n          }\n      }\n    $L=l\
1606 ength ($p{0}{seq});\n    open (R2, \">$outfile\");\
1607 \n    print R2 \">$name\\n\";\n    \n    for ($a=0\
1608 ; $a<$L; $a++)\n      {\n       \n      my ($v,$v_max,$r,$r_m\
1609 ax, @rl);\n     \n      $v=$v_max=0;\n  @rl=keys (%{$R{$a}})\
1610 ;\n     foreach $r (@rl)\n        {\n\n     $v=$R{$a}{$r};\\
1611 n           if ($v>=$v_max)\n         {\n               $v_max=$v;\n            $\
1612 r_max=$r;\n           }\n         }\n   print R2 \"$r_max\";\n\
1613       }\n    print R2 \"\\n\";\n    close (R2);\n \
1614    return;\n  }\nsub seq2msa_gor_prediction \n  {\\
1615 n    my ($name, $seq,$infile, $outfile, $gor_seq, \
1616 $gor_obs)=(@_);\n    my (%p,%gseq,%R, $blast_outpu\
1617 t, %s, $l);\n    \n    \n    $blast_output=&run_bl\
1618 ast ($name,\"blastp\", \"uniprot\", $infile, \"out\
1619 file\");\n    %p=blast_xml2profile($name,$seq,$max\
1620 id, $minid,$mincov,$blast_output);\n    \n    open\
1621  (F, \">gor_input\");\n    for ($a=0; $a<$p{n}; $a\
1622 ++)\n      {\n  my $s;\n        \n      $s=$p{$a}{seq};\n       $s=~s\
1623 /\\-//g;\n      $s=~s/X//g;\n   \n      $s=uc($s);\n    print F \\
1624 ">$p{$a}{name}\\n$s\\n\";\n      }\n    close (F);\
1625 \n    print \"\\tPSIGOR: kept  $p{n} Homologues fo\
1626 r Sequence $p{0}{name}\\n\";\n    \n    `gorIV -pr\
1627 d gor_input -seq $gor_seq -obs $gor_obs > gor_tmp`\
1628 ;\n    unlink (\"gor_input\");\n    \n    open (GR\
1629 , \">gor_output\");\n    open (OG, \"gor_tmp\");\n\
1630     \n    while (<OG>)\n      {\n       \n      my $l;\n        $l=$\
1631 _;\n    \n      if ($l=~/\\>/){print GR \"$l\";}\n      elsif (\
1632  $l=~/Predicted Sec. Struct./)\n          {\n       $l=~s/P\
1633 redicted Sec. Struct\\.//;\n        print GR \"$l\";\\
1634 n         }\n      }\n    close (GR);\n    close (OG);\n\
1635     \n\n    %gs=read_fasta_seq(\"gor_output\");\n \
1636     foreach $s (keys(%gs))\n      {\n   my (@list, $\
1637 seq, @plist, @pseq, $L, $PL);\n \n      \n      #Prediction\\
1638 n       $seq=$gs{$s}{seq};\n    $seq=uc($seq);\n        $L=length(\
1639 $seq);\n        @list=split //, $seq;\n \n      #Original Prof\
1640 ile Sequence\n  $pseq=$p{$s}{seq};\n    $pseq=uc($pseq\
1641 );\n    $PL=length($pseq);\n    @plist=split //, $pseq;\\
1642 n       \n      $tseq=\"\";\n   for ($c=0,$b=0; $b<$PL; $b++)\n\
1643           {\n       my $r=$plist[$b];\n     if($r ne \"-\" \
1644 && $r ne \"X\")\n             {\n               $r=$plist[$b]=$list[$\
1645 c++];\n       }\n           $tseq.=$r;\n          }\n   \n      if ($c\
1646 !=$L)\n   {\n       print \"ERROR: Could Not Thread \
1647 the Prediction Back [FATAL:tc_generic_method.pl]\\\
1648 n\";\n      print \"SEQ:$seq\\nPSEQ:$pseq\\nTSEQ:$t\
1649 seq\";\n            \n      myexit ($EXIT_FAILURE);\n     }\\
1650 n       for ($b=0;$b<$PL; $b++)\n         {\n       my $r=$plist\
1651 [$b];\n     if ( $r ne \"-\" && $r ne \"X\")\n     \
1652    {\n          $R{$b}{$r}++;\n      }\n          }\n      }\n   \
1653 \n    $L=length ($p{0}{seq});\n    open (R2, \">$o\
1654 utfile\");\n    print R2 \">$name\\n\";\n    \n   \
1655  for ($a=0; $a<$L; $a++)\n      {\n     \n      my ($v,$v_m\
1656 ax,$r,$r_max, @rl);\n   \n      $v=$v_max=0;\n  @rl=keys (\
1657 %{$R{$a}});\n   foreach $r (@rl)\n        {\n\n     $v=$R\
1658 {$a}{$r};\n         if ($v>=$v_max)\n         {\n               $v_ma\
1659 x=$v;\n         $r_max=$r;\n          }\n         }\n   print R2 \"$\
1660 r_max\";\n      }\n    print R2 \"\\n\";\n    clos\
1661 e (R2);\n    return;\n  }\n\nsub run_blast\n  {\n \
1662    my ($name, $method, $db,$infile, $outfile, $run\
1663 )=(@_);\n    if (!$run){$run=1;}\n    \n    \n    \
1664 if (&cache_file(\"GET\",$infile,$name,$method,$db,\
1665 $outfile,$SERVER)){return $outfile;}\n    else\n  \
1666     {\n \n      if ( $SERVER eq \"EBI\")\n        {\n       $c\
1667 l_method=$method;\n         if ($cl_method =~/wu/)\n     \
1668      {\n                $cl_method=~s/wu//;\n           if ( $cl_method e\
1669 q \"psiblast\")\n                 {\n               print STDERR \"\\n**\
1670 *************WARNING: PSI BLAST cannot be used wit\
1671 h the NCBI BLAST Client. Use server=EBI Or server=\
1672 LOCAL. blastp will be used instead***********\\n\"\
1673 ;\n                 $cl_method=\"blastp\";\n              }\n           \n              $com\
1674 mand=\"t_coffee -other_pg wublast.pl --email $EMAI\
1675 L $infile -D $db -p $cl_method --outfile $outfile \
1676 -o xml>/dev/null 2>/dev/null\";\n               &safe_system ( \
1677 $command);\n            if (-e \"$outfile.xml\") {`mv $outfi\
1678 le.xml $outfile`;}\n          }\n           else\n            {\\
1679 n               if ($cl_method eq \"psiblast\"){$cl_method =\"b\
1680 lastp -j5\";}\n         \n              $command=\"t_coffee -other_pg\
1681  blastpgp.pl --email $EMAIL $infile -d $db --outfi\
1682 le $outfile -p $cl_method --mode PSI-Blast>/dev/nu\
1683 ll 2>/dev/null\";\n             &safe_system ( $command);\n             \
1684 \n              if (-e \"$outfile.xml\") {`mv $outfile.xml $ou\
1685 tfile`;}\n            }\n         }\n   elsif ($SERVER eq \"NCB\
1686 I\")\n    {\n       if ($db eq \"uniprot\"){$cl_db=\"\
1687 nr\";}\n            else {$cl_db=$db;}\n            \n      if ( \
1688 $method eq \"psiblast\")\n            {\n               print STDERR\
1689  \"\\n***************WARNING: PSI BLAST cannot be \
1690 used with the NCBI BLAST Client. Use server=EBI Or\
1691  server=LOCAL. blastp will be used instead********\
1692 ***\\n\";\n             $cl_method=\"blastp\";\n              }\n         \
1693   else\n              {\n               $cl_method=$method;\n         }\\
1694 n           $command=\"blastcl3 -p $cl_method -d $cl_db \
1695 -i $infile -o $outfile -m 7\";\n            &mysystem ($c\
1696 ommand);\n        }\n   elsif ($SERVER =~/CLIENT_(.*)/)\n\
1697           {\n       my $client=$1;\n        $command=\"$client\
1698  -p $method -d $db -i $infile -o $outfile -m 7\";\\
1699 n           &mysystem ($command);\n       }\n   elsif ( $SERVE\
1700 R eq \"LOCAL_blastall\")\n        {\n       if ($method e\
1701 q \"blastp\")\n       {\n               $command=\"blastall -d \
1702 $db -i $infile -o $outfile -m7 -p blastp\";\n       \
1703   }\n       &mysystem ($command);\n       }\n   elsif ( $S\
1704 ERVER eq \"LOCAL\")\n     {\n\n     if ($ENV{\"BLAST\
1705 _DB_DIR\"})\n         {\n               $x=$ENV{\"BLAST_DB_DIR\"}\
1706 ;\n             $cl_db=\"$x$db\";\n           }\n           else\n          \
1707   {\n           $cl_db=$db;\n         }\n           \n      if ($met\
1708 hod eq \"blastp\")\n          {\n               $command=\"blastpg\
1709 p -d $cl_db -i $infile -o $outfile -m7 -j1\";\n   \
1710     }\n     elsif ($method eq \"psiblast\")\n       \
1711   {\n           $command=\"blastpgp -d $cl_db -i $infile -o\
1712  $outfile -m7 -j5\";\n        }\n               elsif ($method e\
1713 q \"blastn\")\n         {\n                     $command=\"blastall -p blas\
1714 tn -d $cl_db -i $infile -o $outfile -m7 -W6\";\n                \
1715 }       \n          &mysystem ($command);\n       }\n   else\n    {\\
1716 n           print (\"*************** ERROR: $SERVER is a\
1717 n Unknown Server***********\");\n         }\n   \n      if ( !-\
1718 e $outfile)\n     {\n       \n      if ( $run==$BLAST_M\
1719 AX_NRUNS)\n           {\n               print STDERR \"COM: $comman\
1720 d\\n\";\n               print STDERR (\"BLAST failed against $n\
1721 ame [FATAL:$mode/$method/$program]\\n\");\n             if  (\
1722  $SERVER eq \"EBI\" && !($method=~/wu/))\n                {\n   \
1723             print STDERR (\"Try WuBlast instead\");\n             \
1724   return run_blast ($name,\"wublastp\", $db,$infil\
1725 e, $outfile);\n           }\n         }\n           else\n            \
1726 {\n             print STDERR \"(Blast for $name failed  [$com\
1727 mand][Attempt $run/$BLAST_MAX_NRUNS] [Try again]\\\
1728 n\";\n          return run_blast ($name, $method, $db,$inf\
1729 ile, $outfile, $run+1);\n             }\n         }\n\n &cache\
1730 _file(\"SET\",$infile,$name,$method,$db,$outfile,$\
1731 SERVER);\n      return $outfile;\n      }\n  }\nsub mys\
1732 ystem \n  {\n    my $command=@_[0];\n    my $count\
1733 =0;\n    my $r;\n    \n    while (($r=&safe_system\
1734 ($command))!=$EXIT_SUCCESS && $count<5)\n      {\n\
1735         print \"\\nCOMMAND $command Failed. Will try agai\
1736 n\\n\";\n       $count++;\n      }\n    return $r;\n  }\\
1737 nsub cache_file\n  {\n    my ($cache_mode,$infile,\
1738 $name,$method,$db, $outfile,$server)=(@_);\n    my\
1739  $cache_file;\n    #Protect names so that they can\
1740  be turned into legal filenames\n    $name=&clean_\
1741 file_name ($name);\n\n    if ($db=~/\\//)\n      {\
1742 \n      $db=~/([^\\/]+)$/;\n    $db=$1;\n      }\n    $cac\
1743 he_file_sh=\"$name.$method.$db.$server.tmp\";\n   \
1744  $cache_file=\"$CACHE/$name.$method.$db.$server.tm\
1745 p\";\n    \n    if ($infile ne \"\")\n      {\n $c\
1746 ache_file_infile_sh=\"$name.$method.$db.$server.in\
1747 file.tmp\";\n   $cache_file_infile=\"$CACHE/$name.$m\
1748 ethod.$db.$server.infile.tmp\";\n      }\n    \n  \
1749   if ($cache_mode eq \"GET\")\n      {\n        if ($CACH\
1750 E eq \"\" || $CACHE eq \"no\" || $CACHE eq \"ignor\
1751 e\"  || $CACHE eq \"local\" || $CACHE eq \"update\\
1752 "){return 0;}\n elsif ( !-d $CACHE)\n     {\n       pr\
1753 int STDERR \"ERROR: Cache Dir: $CACHE Does not Exi\
1754 st\";\n     return 0;\n   }\n   else\n    {\n       if \
1755 ( -e $cache_file && &fasta_file1_eq_fasta_file2($i\
1756 nfile,$cache_file_infile)==1)\n       {\n               `cp $ca\
1757 che_file $outfile`;\n           $CACHE_STATUS=\"READ CACHE\\
1758 ";\n            return 1;\n           }\n         }\n      }\n    elsi\
1759 f ($cache_mode eq \"SET\")\n      {\n   if ($CACHE e\
1760 q \"\" || $CACHE eq \"no\" || $CACHE eq \"ignore\"\
1761   || $CACHE eq \"local\" || $CACHE eq \"update\"){\
1762 return 0;}\n    elsif ( !-d $CACHE)\n     {\n       print\
1763  STDERR \"ERROR: Cache Dir: $CACHE Does not Exist\\
1764 ";\n        return 0;\n   }\n   elsif (-e $outfile)\n    \
1765  {\n        `cp $outfile $cache_file`;\n            if ($cac\
1766 he_file_infile ne \"\"){ `cp $infile $cache_file_i\
1767 nfile`;}\n\n        #functions for updating the cache\
1768 \n          #`t_coffee -other_pg clean_cache.pl -file $\
1769 cache_file_sh -dir $CACHE`;\n       #`t_coffee -othe\
1770 r_pg clean_cache.pl -file $cache_file_infile_sh -d\
1771 ir $CACHE`;\n       return 1;\n   }\n      }\n    $C\
1772 ACHE_STATUS=\"COMPUTE CACHE\";\n    return 0;\n  }\
1773 \nsub file1_eq_file2\n  {\n    my ($f1, $f2)=@_;\n\
1774     if ( $f1 eq \"\"){return 1;}\n    elsif ( $f2 \
1775 eq \"\"){return 1;}\n    elsif ( !-e $f1){return 0\
1776 ;}\n    elsif ( !-e $f2){return 0;}\n    elsif ($f\
1777 1 eq \"\" || $f2 eq \"\" || `diff $f1 $f2` eq \"\"\
1778 ){return 1;}\n    \n    return 0;\n  }\nsub clean_\
1779 file_name \n  {\n    my $name=@_[0];\n    \n    $n\
1780 ame=~s/[^A-Za-z1-9.-]/_/g;\n    return $name;\n  }\
1781 \nsub url2file\n  {\n    my ($address, $out)=(@_);\
1782 \n    \n    if (&pg_is_installed (\"wget\"))\n  {\n\
1783           return &safe_system (\"wget $address -O$out >/d\
1784 ev/null 2>/dev/null\");\n       }\n    elsif (&pg_is_ins\
1785 talled (\"curl\"))\n      {\n   return &safe_system \
1786 (\"curl $address -o$out >/dev/null 2>/dev/null\");\
1787 \n      }\n    else\n      {\n  print stderr \"ERRO\
1788 R: neither curl nor wget are installed. Imnpossibl\
1789 e to fectch remote file [FATAL]\\n\";\n exit ($EXI\
1790 T_FAILURE);\n      }\n  }\nsub fasta_file1_eq_fast\
1791 a_file2\n  {\n    my ($f1, $f2)=@_;\n    my (%s1, \
1792 %s2);\n    my @names;\n    %s1=read_fasta_seq (%f1\
1793 );\n    %s2=read_fasta_seq (%f2);\n\n    @names=(k\
1794 eys (%s1));\n    \n    foreach $n (keys(%s1))\n   \
1795    {\n  if ($s1{$n}{seq} ne $s2{$n}{seq}){return 0;\
1796 }\n      } \n    \n    foreach $n (keys(%s2))\n   \
1797    {\n  if ($s1{$n}{seq} ne $s2{$n}{seq}){return 0;\
1798 }\n      }\n    return 1;\n  }\n        \nsub safe_system\
1799  \n{\n  my $com=@_[0];\n  my $pid;\n  my $status;\\
1800 n  if ($com eq \"\"){return 1;}\n\n\n  if (($pid =\
1801  fork ()) < 0){return (-1);}\n  if ($pid == 0)\n  \
1802   {\n      exec ($com);\n    }\n  else\n      {\n       \
1803 $PIDCHILD=$pid;\n      }\n  \n  waitpid ($pid,WTER\
1804 MSIG);\n  return $?; #contains the status of the e\
1805 xit\n}\nEND {\n  kill ($PIDCHILD);\n}\n\n\nsub rea\
1806 d_template_file\n{\n    my $pdb_templates = @_[0];\n    \
1807 open (TEMP, \"<$pdb_templates\");\n     my %temp_h;\n   \
1808 while (<TEMP>)\n{\n             $line = $_;\n           $line =~/(\\S\
1809 +)\\s(\\S+)/;\n                 $temp_h{$1}= $2;\n}\n   close(TEMP\
1810 );\n    return %temp_h;\n}\n\nsub calc_rna_template\n\
1811 {\n     my ($mode, $infile, $pdbfile, $outfile)=@_;\n   \
1812 my %s, %h ;\n   my $result;\n   my (@profiles);\n       &set\
1813 _temporary_dir (\"set\",$infile,\"seq.pep\");\n %s\
1814 =read_fasta_seq (\"seq.pep\");\n        \n      %pdb_template_\
1815 h = &read_template_file($pdbfile);\n    my $pdb_chain\
1816 ;\n     open (R, \">result.aln\");\n\n\n        #print stdout\
1817  \"\\n\";\n     foreach $seq (keys(%s))\n       {\n             if ($pd\
1818 b_template_h{$seq} eq \"\")\n           {\n                     next;\n         }\n     \
1819         open (F, \">seqfile\");\n               print (F \">$s{$seq}{n\
1820 ame}\\n$s{$seq}{seq}\\n\");\n           close (F);\n            $pdb_\
1821 chain = $pdb_template_h{$seq};\n                $lib_name=\"$s{$\
1822 seq}{name}.rfold\";\n           $lib_name=&clean_file_name \
1823 ($lib_name);\n          safe_system (\"t_coffee -other_pg \
1824 RNAplfold2tclib.pl -in=seqfile -out=$lib_name\");\\
1825 n               \n              safe_system (\"secondary_struc.py seqfile \
1826 $CACHE$pdb_chain  $lib_name\");\n               \n              if ( !-e $l\
1827 ib_name)\n              {\n                     print STDERR (\"RNAplfold failed\
1828  to compute the secondary structure of $s{$seq}{na\
1829 me} [FATAL:$mode/$method/$program]\\n\");\n                     myex\
1830 it ($EXIT_FAILURE);\n           }\n             else\n          {\n                     print st\
1831 dout \"\\tProcess: >$s{$seq}{name} _F_ $lib_name\\\
1832 n\";\n                  print R \">$s{$seq}{name} _F_ $lib_name\\\
1833 n\";\n          }\n             unshift (@profiles, $lib_name);\n       }\n\
1834         close (R);\n    &set_temporary_dir (\"unset\",$mode,\
1835  $method,\"result.aln\",$outfile, @profiles);\n}\n\
1836 \n\n\nsub seq2rna_pair{\n       my ($mode, $pdbfile1, $p\
1837 dbfile2, $method, $param, $outfile)=@_;\n\n     if ($m\
1838 ethod eq \"runsara.py\")\n      {\n             open(TMP,\"<$pdbfi\
1839 le1\");\n               my $count = 0;\n                my $line;\n             while (<\
1840 TMP>)\n         {\n                     $line = $_;\n                   if ($count ==1)\n               \
1841         {\n                             last;\n                 }\n                     $count += 1;\n          }\n     \n              my\
1842  $y = length($line);\n\n                $chain1 = substr($line,l\
1843 ength($line)-3,1);\n            close TMP;\n            open(TMP,\"<$p\
1844 dbfile2\");\n           my $count = 0;\n                while (<TMP>)\n         \
1845 {\n                     $line = $_;\n                   if ($count ==1)\n                       {\n                             l\
1846 ast;\n                  }\n                     $count += 1;\n          }\n             $chain2 = subs\
1847 tr($line,length($line)-3,1);\n          close TMP;\n            \n              \
1848 \n              system(\"runsara.py $pdbfile1 $chain1 $pdbfile\
1849 2 $chain2 -s -o tmp >/dev/null 2>/dev/null\");\n                \
1850 open(TMP,\"<tmp\") or die \"cannot open the sara t\
1851 mp file:$!\\n\";\n              open(OUT,\">$outfile\") or die\
1852  \"cannot open the $outfile file:$!\\n\";\n\n           my \
1853 $switch = 0;\n          my $seqNum = 0;\n               foreach my $lin\
1854 e (<TMP>)\n             {\n                     next unless ($line=~/SARAALI/);\
1855 \n                      if ($line=~/>/)\n                       {\n                             $switch =0;\n                           p\
1856 rint OUT \">seq$seqNum\\n\";\n                          $seqNum++;                              \n\
1857                         }\n                     if ($switch < 2){\n                             $switch++;\n                            ne\
1858 xt;\n                   }\n     \n                      if ($line =~/REMARK\\s+SARAALI\\s\
1859 +([^\\*]+)\\*/)\n                       {\n                             my $string = $1;\n                              p\
1860 rint OUT \"$string\\n\";\n                      }\n             }\n             close TMP; \
1861 \n              close OUT;\n    }\n}$program=\"T-COFFEE (Version_\
1862 8.07)\";\\n\n","*TC_METHOD_FORMAT_01\n************\
1863 ******generic_method.tc_method*************\n*\n* \
1864       Incorporating new methods in T-Coffee\n*    \
1865    Cedric Notredame 26/08/08\n*\n*****************\
1866 **************************************\n*This file\
1867  is a method file\n*Copy it and adapt it to your n\
1868 eed so that the method \n*you want to use can be i\
1869 ncorporated within T-Coffee\n*********************\
1870 **********************************\n*             \
1871      USAGE                              *\n*******\
1872 ************************************************\n\
1873 *This file is passed to t_coffee via -in:\n*\n* t_\
1874 coffee -in Mgeneric_method.method\n*\n* The method\
1875  is passed to the shell using the following\n*call\
1876 :\n*<EXECUTABLE><PARAM1><IN_FLAG><seq_file><PARAM2\
1877 ><OUT_FLAG><outname><PARAM>\n*\n*Conventions:\n*<F\
1878 LAG_NAME>       <TYPE>          <VALUE>\n*<VALUE>:      no_name         <=>\
1879  Replaced with a space\n*<VALUE>:       &nbsp   <=> Replac\
1880 ed with a space\n*\n******************************\
1881 *************************\n*                  ALN_\
1882 MODE                           *\n****************\
1883 ***************************************\n*pairwise\
1884    ->all Vs all (no self )[(n2-n)/2aln]\n*m_pairwi\
1885 se ->all Vs all (no self)[n^2-n]^2\n*s_pairwise ->\
1886 all Vs all (self): [n^2-n]/2 + n\n*multiple   ->Al\
1887 l the sequences in one go\n*\nALN_MODE          pairwise\n\
1888 *\n***********************************************\
1889 ********\n*                  OUT_MODE             \
1890               *\n*********************************\
1891 **********************\n* mode for the output:\n*E\
1892 xternal methods: \n* aln -> alignmnent File (Fasta\
1893  or ClustalW Format)\n* lib-> Lib file (TC_LIB_FOR\
1894 MAT_01)\n*Internal Methods:\n* fL -> Internal Func\
1895 tion returning a List (Librairie)\n* fA -> Interna\
1896 l Function returning an Alignmnent\n*\nOUT_MODE         a\
1897 ln\n**********************************************\
1898 *********\n*                  SEQ_TYPE            \
1899                *\n********************************\
1900 ***********************\n*G: Genomic, S: Sequence,\
1901  P: PDB, R: Profile\n*Examples:\n*SEQTYPE       S       sequen\
1902 ces against sequences (default)\n*SEQTYPE       S_P     sequ\
1903 ence against structure\n*SEQTYPE        P_P     structure aga\
1904 inst structure\n*SEQTYPE        PS      mix of sequences and s\
1905 tructure        \n*\nSEQ_TYPE   S\n*\n\n*******************\
1906 ************************************\n*           \
1907      COMMAND LINE                         *\n*EXEC\
1908 UTABLE PARAM1 IN_FLAG OUT_FLAG PARAM             *\
1909 \n************************************************\
1910 *******\n*****************************************\
1911 **************\n*                  EXECUTABLE     \
1912                     *\n***************************\
1913 ****************************\n*name of the executa\
1914 ble\n*passed to the shell: executable\n*        \nEXECUTA\
1915 BLE     tc_generic_method.pl\n*\n*********************\
1916 **********************************\n*             \
1917      IN_FLAG                             *\n******\
1918 *************************************************\\
1919 n*IN_FLAG\n*flag indicating the name of the in com\
1920 ing sequences\n*IN_FLAG S no_name ->no flag\n*IN_F\
1921 LAG S &bnsp-in&bnsp -> \" -in \"\n*\nIN_FLAG            -inf\
1922 ile=\n*\n*****************************************\
1923 **************\n*                  OUT_FLAG       \
1924                     *\n***************************\
1925 ****************************\n*OUT_FLAG\n*flag ind\
1926 icating the name of the out-coming data\n*same con\
1927 ventions as IN_FLAG\n*OUT_FLAG  S no_name ->no flag\
1928 \n*if you want to redirect, pass the parameters vi\
1929 a PARAM1\n*set OUT_FLAG to >\n*\nOUT_FLAG               -outfil\
1930 e=\n*\n*******************************************\
1931 ************\n*                  PARAM_1          \
1932                     *\n***************************\
1933 ****************************\n*<EXECUTABLE><PARAM1\
1934 ><IN_FLAG><seq_file><PARAM2><OUT_FLAG><outname><PA\
1935 RAM>\n*Parameters sent to the EXECUTABLE and speci\
1936 fied *before* IN_FLAG \n*If there is more than 1 P\
1937 ARAM line, the lines are\n*concatenated\n*Command_\
1938 line: @EP@PARAM@-gapopen%e10%s-gapext%e20\n*    %s wh\
1939 ite space\n*    %e equal sign\n*\n*PARAM1       \n*\n*\n*\n\
1940 **************************************************\
1941 *****\n*                  PARAM_2                 \
1942              *\n**********************************\
1943 *********************\n*<EXECUTABLE><PARAM1><IN_FL\
1944 AG><seq_file><PARAM2><OUT_FLAG><outname><PARAM>\n*\
1945 Parameters sent to the EXECUTABLE and specified \n\
1946 *after* IN_FLAG and *before* OUT_FLAG\n*If there i\
1947 s more than 1 PARAM line, the lines are\n*concaten\
1948 ated\n*\n*PARAM1        \n*\n*\n*************************\
1949 ******************************\n*                 \
1950  PARAM                              *\n***********\
1951 ********************************************\n*<EX\
1952 ECUTABLE><PARAM1><IN_FLAG><seq_file><PARAM2><OUT_F\
1953 LAG><outname><PARAM>\n*Parameters sent to the EXEC\
1954 UTABLE and specified *after* OUT_FLAG\n*If there i\
1955 s more than 1 PARAM line, the lines are\n*concaten\
1956 ated\n*\nPARAM  -mode=seq_msa -method=clustalw\nPAR\
1957 AM   -OUTORDER=INPUT -NEWTREE=core -align -gapopen\
1958 =-15\n*\n*****************************************\
1959 **************\n*                  END            \
1960                     *\n***************************\
1961 ****************************\n","*TC_METHOD_FORMAT\
1962 _01\n***************clustalw_method.tc_method*****\
1963 ****\nEXECUTABLE        clustalw\nALN_MODE              pairwise\nIN_\
1964 FLAG            -INFILE=\nOUT_FLAG              -OUTFILE=\nOUT_MODE             aln\
1965 \nPARAM         -gapopen=-10\nSEQ_TYPE          S\n**************\
1966 ***********************************\n","$VersionTa\
1967 g =                                               \
1968                                                   \
1969                                   2.43;\n$SILENT=\\
1970 " >/dev/null 2>/dev/null\";\n$EXIT_SUCCESS=0;\n$EX\
1971 IT_FAILURE=1;\n$INTERNET=-1;\n\n\n\n\n\nuse FileHa\
1972 ndle;\nuse Env qw(HOME);\n\nmy %onelett_prot=&fill\
1973 _onelett_prot();\nmy %threelett_prot=&fill_threele\
1974 tt_prot();\nmy %onelett_RNA=&fill_onelett_RNA();\n\
1975 my %threelett_RNA=&fill_threelett_RNA();\nmy %onel\
1976 ett_DNA=&fill_onelett_DNA();\nmy %threelett_DNA=&f\
1977 ill_threelett_DNA();\n\n\n\n\n\nmy %onelett = (\n'\
1978 P' => \\%onelett_prot,\n'D' => \\%onelett_DNA,\n'R\
1979 ' => \\%onelett_RNA\n);\n\n\nmy %threelett = (\n'P\
1980 ' => \\%threelett_prot,\n'D' => \\%threelett_DNA,\\
1981 n'R' => \\%threelett_RNA\n);\n\n\n\n\n\n\n\nif($AR\
1982 GV[0]=~/help/ ||$ARGV[0]=~/man/ || $ARGV[0]=~/HELP\
1983 / || $ARGV[0]=~/Man/ || $ARGV[0] eq \"-h\"  || $AR\
1984 GV[0] eq \"-H\"  )\n{die \"SYNTAX: extract_from_pd\
1985 b Version $VersionTag   \n      Minimum:             [ext\
1986 ract_from_pdb file] \n                     OR \n                             [... | ex\
1987 tract_from_pdb]\n       Flags (Default setting on the f\
1988 irst line)\n       -version...................[Return\
1989 s the Version Number]\n           -force..........\
1990 ...........[Forces the file to be treated like a P\
1991 DB file]\n                                      [R\
1992 egenerates the header and SEQRES fields]\n        \
1993    -force_name................[Forces the file to \
1994 be named after name]]\n           -infile.....file\
1995 ...........[Flag can be omited]\n                                     \
1996 [File must be pdb or fro pgm]\n                   \
1997                    [File can also be compressed Z \
1998 or gz]\n                                      [In \
1999 the case of a compressed file, you can omit the gz\
2000 |Z extension]\n           -netfile................\
2001 ...[File will be fetch from the net using wget]\n \
2002                                      [wget or curl\
2003  must be installed]\n                             \
2004          [ftp://ftp.gnu.org/pub/gnu/wget/]\n      \
2005                                 [http://curl.haxx.\
2006 se/]\n                                      [Must \
2007 also be used to retrieve the file from a local pdb\
2008  copy (cf netaddress)]\n           -netaddress....\
2009 ............[Address used for the retrieving the n\
2010 etfile]\n                                      [ht\
2011 tp://www.rcsb.org/pdb/cgi/export.cgi/%%.pdb.gz?for\
2012 mat=PDB&pdbId=%%&compression=gz]\n                \
2013                       [http://www.expasy.ch/cgi-bi\
2014 n/get-pdb-entry.pl?%%]\n                          \
2015             [local -> will get the file from pdb_d\
2016 ir (see pdb_dir)]\n           -netcompression.....\
2017 .......[Extension if the netfile comes compressed]\
2018 \n                                      [gz]\n    \
2019        -pdb_dir...................[address of the \
2020 repertory where the pdb is installed]\n           \
2021                            [Supports standard ftp \
2022 style installation OR every stru in DIR]\n        \
2023                               [Give the ..../pdb/s\
2024 tructure/ dir]\n                                  \
2025     [If value omitted, the pg gets it from the env\
2026  variable PDB_DIR]\n           -netcompression_pg.\
2027 ........[gunzip]\n           -is_pdb_name........n\
2028 ame...[Returns 1 if the name is a PDB ID, 0 otherw\
2029 ise]\n           -get_pdb_chains.....name...[Retur\
2030 ns the list of chains corresponding to the entry]\\
2031 n           -get_pdb_id.........name...[Returns th\
2032 e PDB id within the provided pdb file]\n          \
2033  -get_fugue_name.....name...[Turns a name into a n\
2034 ame valid for fugue]\n                            \
2035           [Uses the netaddress to do so]\n         -cha\
2036 in......FIRST..........[Extract the first chain on\
2037 ly]\n                  A B C..........[Extract Several chai\
2038 ns if needed]\n                ALL............[Extract al\
2039 l the chains]   \n           -ligand.....ALL........\
2040 ....[Extract the ligands in the chain (HETATM)]\n \
2041                       <name1>,<name2>[Extract All \
2042 the named lignds]\n        -ligand_only...............\
2043 [Extract only the ligands]\n           -ligand_lis\
2044 t...............[Extract the list of ligands]\n   \
2045  -coor.......<start>..<end>.[Coordinates of the fr\
2046 agment to extract]\n                                  [Omit end to \
2047 include the Cter]\n           -num........absolute\
2048 .......[absolute: relative to the seq] \n         \
2049               file...........[file: relative to fi\
2050 le]\n           -num_out....new............[new: s\
2051 tart 1->L]\n                       old............\
2052 [old: keep the file coordinates]\n           -dele\
2053 te.....<start>..<end>.[Delete from residue start t\
2054 o residue end]\n           -atom.......CA.............[At\
2055 oms to include, ALL for all of them]\n                 CA \
2056 O N.........[Indicate several atoms if needed]\n         \
2057   -code.......3..............[Use the 1 letter cod\
2058 e or the 3 letters code]\n         -mode.......raw.....\
2059 .......[Output original pdb file]\n               \
2060         pdb............[Output something that look\
2061 s like pdb]\n                  fasta..........[Output the s\
2062 equences in fasta format]\n                    simple........\
2063 .[Output a format easy to parse in C ]\n          \
2064   -seq_field..ATOM...........[Field used to extrac\
2065 t the sequence]\n                      SEQRES.........[Use the \
2066 complete sequence]\n       -seq......................\
2067 .[Equivalent to  -mode fasta]\n    -model......1..\
2068 ............[Chosen Model in an NMR file]\n       \
2069     -nodiagnostic..............[Switches Error Mes\
2070 sages off]\n           -debug.....................\
2071 [Sets the DEBUG ON]\n           -no_remote_pdb_dir\
2072 .........[Do not look for a remote file]\n        \
2073    -cache_pdb.................[Cache Value, defaul\
2074 t is $HOME/.t_coffee/cache, other values: NO<=> No\
2075  cache]\n\n      Environement Variables\n         \
2076   These variables can be set from the environement\
2077 \n           Command line values with the correspo\
2078 nding flag superseed evironement value\n          \
2079  NO_REMOTE_PDB_DIR..........[Prevents the program \
2080 from searching remote file: faster]\n           PD\
2081 B_DIR....................[Indicates where PDB file\
2082  must be fetched (localy)]\n\n   PROBLEMS: please c\
2083 ontact cedric.notredame\\@europe.com\\n\";\n     exit\
2084  ($EXIT_SUCCESS);\n}\n\n$np=0;\n$n_para=$#ARGV;\n$\
2085 model=1;\n$pdb_dir=$ENV{'PDB_DIR'};if ($pdb_dir){$\
2086 pdb_dir.=\"/\";}\n$debug=$ENV{'DEBUG_EXTRACT_FROM_\
2087 PDB'};\n\n$no_remote_pdb_dir=$ENV{NO_REMOTE_PDB_DI\
2088 R};\n$HOME=$ENV{'HOME'};\nif ( $ENV{CACHE_4_TCOFFE\
2089 E})\n{$cache=$ENV{CACHE_4_TCOFFEE};}\nelse\n{\n   \
2090  $cache=\"$HOME/.t_coffee/cache/\";\n}\n\n   \n$ne\
2091 taddress=\"http://www.rcsb.org/pdb/files/%%.pdb.gz\
2092 \";\n$netcompression_pg=\"gunzip\";\n$netcompressi\
2093 on=\"gz\";\n\n  foreach ($np=0; $np<=$n_para; $np+\
2094 +)\n{        \n    $value=$ARGV[$np];\n    \n    i\
2095 f  ($np==0 && !($value=~/^-.*/))\n{ \n       $pdb_\
2096 file= $ARGV[$np];\n}\n    elsif ( !($value=~/^-.*/\
2097 ))\n{\n print \"@ARGV\";\n      die;\n} \n    \n    els\
2098 if ($value eq \"-nodiagnostic\"){$nodiagnostic=1;}\
2099 \n    elsif ($value eq \"-force\")\n{\n $force_pdb\
2100 =1;\n}\n    elsif ($value eq \"-force_name\")\n{\n\
2101         $force_name=$ARGV[++$np];\n     $force_pdb=1;\n}\n   \
2102  \n    elsif ($value eq \"-is_pdb_name\")\n{\n  $pd\
2103 b_file= $ARGV[++$np];\n \n      $is_pdb_name=1;\n       \n} \\
2104 n    elsif ($value eq \"-debug\")\n{\n  $debug=1;\n\
2105 }\n    elsif ($value eq \"-get_pdb_chains\")\n{\n       \
2106 $pdb_file= $ARGV[++$np];\n      $get_pdb_chains=1;\n}\n\
2107     elsif ($value eq \"-get_pdb_ligands\")\n{\n $g\
2108 et_pdb_ligands=1;\n}\n    \n    elsif ($value eq \\
2109 "-get_pdb_id\")\n{\n    $pdb_file= $ARGV[++$np];\n      $g\
2110 et_pdb_id=1;\n  \n}\n    \n    elsif ( $value eq \"\
2111 -get_fugue_name\")\n{\n $pdb_file= $ARGV[++$np];\n\
2112         $get_fugue_name=1;\n}\n    elsif ( $value eq \"-i\
2113 nfile\")\n{\n       $pdb_file= $ARGV[++$np];\n} \n\
2114     elsif ($value eq \"-netfile\")\n{\n $netfile=1\
2115 ;\n     if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_file= $ARGV\
2116 [++$np];}\n}\n    elsif (  $value eq \"-num\")\n{\\
2117 n       $numbering= $ARGV[++$np];\n}\n    elsif ( \
2118  $value eq \"-num_out\")\n{\n       $numbering_out\
2119 = $ARGV[++$np];\n}\n    elsif ( $value eq \"-netad\
2120 dress\")\n{\n   $netadress=$ARGV[++$np];\n}\n     \n\
2121     elsif ( $value eq \"-netcompression\")\n{\n  $\
2122 netcompression=$ARGV[++$np];\n}\n    elsif ( $valu\
2123 e eq \"-pdb_dir\")\n{\n  if ( !($ARGV[$np+1]=~/^-.\
2124 */)){$pdb_dir= \"$ARGV[++$np]/\";}\n}\n     elsif \
2125 ( $value eq \"-no_remote_pdb_dir\")\n{\n        $no_remot\
2126 e_pdb_dir=1;\n  if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_\
2127 dir= \"$ARGV[++$np]/\";}\n}\n    elsif ( $value eq\
2128  \"-cache\")\n{\n       $cache=$ARGV[++$np];\n}\n    \n \
2129    elsif ($value eq \"-netcompression_pg\")\n{\n         \
2130  $netcompression_pg=$ARGV[++$np];\n}\n     elsif (\
2131 $value eq \"-mode\")\n{\n       $MODE=$ARGV[++$np]\
2132 ;\n}\n\n    elsif ( $value eq \"-model\")\n{\n    \
2133    $model= $ARGV[++$np];\n}\n    elsif ($value eq \
2134 \"-seq_field\" )\n{\n       $seq_field= $ARGV[++$n\
2135 p];\n}   \n    elsif ($value eq \"-coor\" )\n{\n  \
2136      $start= $ARGV[++$np];\n  \n       if (($ARGV[\
2137 $np+1] eq \"\") ||($ARGV[$np+1]=~/^-.*/)){$end=\"*\
2138 \";} \n       else {$end=   $ARGV[++$np];}     \n \
2139       $coor_set=1;\n}\n    elsif ($value eq \"-del\
2140 ete\" )\n{\n       $delete_start= $ARGV[++$np];\n \
2141       $delete_end= $ARGV[++$np];\n       $delete_s\
2142 et=1;\n}\n    elsif  ($value eq \"-code\")\n{\n   \
2143     $code= $ARGV[++$np];\n}\n    elsif  ($value eq\
2144  \"-no_hetatm\")\n{\n       $no_hetatm=1;\n}\n    \
2145 elsif ($value eq \"-chain\")\n{\n       while (!($\
2146 ARGV[$np+1] eq \"\") &&!($ARGV[$np+1]=~/^-.*/))\n{\
2147 \n            ++$np;\n        @c_chain=(@chain,  $ARGV[$\
2148 np]);\n       $hc_chain{$ARGV[$np]}=$#c_chain+1;\n\
2149 }           \n}\n    elsif ($value eq \"-atom\")\n\
2150 {\n\n       while (!($ARGV[$np+1] eq \"\") && !($A\
2151 RGV[$np+1]=~/^-.*/))\n{\n             ++$np;\n        $at\
2152 om[$n_atom++]=  $ARGV[$np];\n         $atom_list{$AR\
2153 GV[$np]}=1;           \n} \n       \n}\n    elsif ( $v\
2154 alue eq \"-unfold\")\n{\n       $unfold=1;\n}\n    elsif\
2155  ($value eq \"-seq\" ||$value eq \"-fasta\" )\n{\n\
2156        $MODE=\"fasta\";\n}\n    elsif ( $value eq \
2157 \"-version\")\n{\n      print STDERR  \"\\nextract_from\
2158 _pdb: Version $VersionTag\\n\";\n       &myexit ($EXIT_S\
2159 UCCESS);\n}\n    elsif ( $value eq \"-ligand\")\n{\
2160 \n      while (!($ARGV[$np+1] eq \"\") && !($ARGV[$np+1\
2161 ]=~/^-.*/))\n{\n            ++$np;\n        $ligand=1;\n           \
2162  $ligand_list{$ARGV[$np]}=1;          \n} \n    $hc_chai\
2163 n{'LIGAND'}=1;\n}\n    elsif ( $value eq \"-ligand\
2164 _only\")\n{\n   $ligand_only=1;\n}\n}\nif ( $debug)\\
2165 n{\n    print STDERR \"\\n[DEBUG:extract_from_pdb]\
2166  NO_REMOTE_PDB_DIR: $no_remote_pdb_dir\\n\";\n    \
2167 print STDERR \"\\n[DEBUG:extract_from_pdb] PDB_DIR\
2168 : $pdb_dir\\n\";\n}\n\nif ( $is_pdb_name)\n{\n    \
2169 if (remote_is_pdb_name($pdb_file, $netaddress))\n{\
2170 \n      print \"1\";\n}\n    else\n{\n  print \"0\";\n}\\
2171 n    exit ($EXIT_SUCCESS);\n}\n    \n\nif (!$force\
2172 _name)\n{\n    $pdb_file=~/([^\\/]*)$/;\n    $forc\
2173 e_name=$1;\n}\n\n$local_pdb_file=$pdb_file;\n\nif \
2174 ( $debug){print STDERR \"\\n[DEBUG: extract_from_p\
2175 db] Scan For $local_pdb_file\\n\";}\n\n$mem=$no_re\
2176 mote_pdb_dir;\n$no_remote_pdb_dir=1;\n$tmp_pdb_fil\
2177 e=get_pdb_file ($local_pdb_file);\n\nif ( !-e $tmp\
2178 _pdb_file || $tmp_pdb_file eq \"\")\n{\n    $local\
2179 _pdb_file=$pdb_file;\n    ($local_pdb_file, $suffi\
2180 x_chain)=&pdb_name2name_and_chain($local_pdb_file)\
2181 ;\n\n    if ($local_pdb_file)\n{\n      if ( $debug){pr\
2182 int STDERR \"\\nSplit $pdb_file into $local_pdb_fi\
2183 le and $suffix_chain \\n\";}\n  $tmp_pdb_file=get_p\
2184 db_file ($local_pdb_file);\n    if ( $tmp_pdb_file ne\
2185  \"\")\n{\n         @c_chain=();\n          @c_chain=($suff\
2186 ix_chain);\n        %hc_chain=();\n         $hc_chain{$su\
2187 ffix_chain}=1;\n}\n}\n}\n\n$no_remote_pdb_dir=$mem\
2188 ;\nif ($no_remote_pdb_dir==0)\n{\n    if ( !-e $tm\
2189 p_pdb_file || $tmp_pdb_file eq \"\")\n{\n       \n      $loca\
2190 l_pdb_file=$pdb_file;\n ($local_pdb_file, $suffix_\
2191 chain)=&pdb_name2name_and_chain($local_pdb_file);\\
2192 n       if ($local_pdb_file)\n{\n           if ( $debug){print\
2193  STDERR \"\\nSplit $pdb_file into $local_pdb_file \
2194 and $suffix_chain \\n\";}\n         $tmp_pdb_file=get_\
2195 pdb_file ($local_pdb_file);    \n           if ( $tmp_pd\
2196 b_file ne \"\")\n{\n            @c_chain=();\n          @c_chain=($s\
2197 uffix_chain);\n         %hc_chain=();\n         $hc_chain{$suffi\
2198 x_chain}=1;\n}\n}\n}\n}\n\nif ( $debug){print STDE\
2199 RR \"\\n$pdb_file copied into ##$tmp_pdb_file##\\n\
2200 \";}\n\n\nif ( !-e $tmp_pdb_file || $tmp_pdb_file \
2201 eq \"\")\n{\n   if ($is_pdb_name)\n{\n      print \"0\
2202 \\n\"; exit ($EXIT_SUCCESS);\n}\n       else\n{\n       \n         \
2203  print \"\\nEXTRACT_FROM_PDB: NO RESULT for $pdb_f\
2204 ile [FATAL:EXTRACT_FROM_PDB Version $VersionTag]\\\
2205 n\";\n      &myexit ($EXIT_FAILURE);    \n}\n}\n\n\n\n\
2206 \n%molecule_type=&pdbfile2chaintype($tmp_pdb_file)\
2207 ;\n\n$pdb_id=&get_pdb_id ($tmp_pdb_file);\n\nif ( \
2208 $pdb_id eq \"\"){$pdb_id=$force_name;}\n\n@f_chain\
2209 =&get_chain_list ($tmp_pdb_file);\n\n\n\nif ( $get\
2210 _pdb_chains)\n{\n    print \"@f_chain\\n\";\n    &\
2211 myexit ($EXIT_SUCCESS);\n}\nif ( $get_pdb_ligands)\
2212 \n{\n    %complete_ligand_list=&get_ligand_list ($\
2213 tmp_pdb_file);\n    print $complete_ligand_list{\"\
2214 result\"};\n    &myexit ($EXIT_SUCCESS);\n}\n\nels\
2215 if ( $get_pdb_id ||$get_fugue_name )\n{\n    if   \
2216  (@c_chain && $c_chain[0] eq \"FIRST\"){$pdb_id=$p\
2217 db_id.$f_chain[0];}\n    elsif (@c_chain && $c_cha\
2218 in[0] ne \" \"){$pdb_id=$pdb_id.$c_chain[0];}\n   \
2219  \n    print \"$pdb_id\\n\";\n    &myexit ($EXIT_S\
2220 UCCESS);\n    \n}\nelsif ( $is_pdb_name)\n{\n    p\
2221 rintf \"1\\n\";\n    &myexit ($EXIT_SUCCESS);\n}\n\
2222   \n\n$structure_file=vtmpnam();\n\n\n$INFILE=vfop\
2223 en (\"$tmp_pdb_file\", \"r\"); \n$TMP=vfopen (\"$s\
2224 tructure_file\", \"w\");\n\n$print_model=1;\n$in_m\
2225 odel=0;\nwhile ( <$INFILE>)\n{\n  $line=$_;\n  if \
2226 ($line =~/^MODEL\\s*(\\d*)/)\n{\n       if ($1==$model)\\
2227 n{\n        $in_model=1;\n          $print_model=1;\n       \
2228 $is_nmr=1;\n}\n elsif ( $in_model==0)\n{\n          $pr\
2229 int_model=0;\n}\n       elsif ( $in_model==1)\n{\n          l\
2230 ast;\n}\n}\n  if ($print_model){print $TMP $line;}\
2231   \n\n}\nclose ($TMP);\nclose ($INFILE);\n\n    \n\n \
2232  if ($numbering eq \"\"){$numbering=\"absolute\";}\
2233 \n  if ($numbering_out eq \"\"){$numbering_out=\"n\
2234 ew\";}\n\n  if ( $delete_set && $coor_set) {die \"\
2235 -delete and -coor are mutually exclusive, sorry\\n\
2236 \";}\n  if ( $n_atom==0){$atom_list[$n_atom++]=\"A\
2237 LL\";$atom_list{$atom_list[0]}=1;}\n  if ( $seq_fi\
2238 eld eq \"\"){$seq_field=\"ATOM\";}\n  \n  if ( $MO\
2239 DE eq \"\"){$MODE=\"pdb\";}\n  elsif ( $MODE eq \"\
2240 simple\" && $code==0){$code=1;}\n\n  if ( $code==0\
2241 ){$code=3;}\n\n\nif ($f_chain[0] eq \" \"){$hc_cha\
2242 in{' '}=1;$c_chain[0]=\" \";}\nelsif (!@c_chain){$\
2243 hc_chain{FIRST}=1;$c_chain[0]=\"FIRST\";}#make sur\
2244 e the first chain is taken by default\n\nif    ($h\
2245 c_chain{ALL}) \n{\n      @c_chain=@f_chain;\n     \
2246  foreach $e (@c_chain){$hc_chain{$e}=1;}\n}\nelsif\
2247 ($hc_chain{FIRST})\n{\n @c_chain=($f_chain[0]);\n       \
2248 $hc_chain{$f_chain[0]}=1;\n}\n\n\n$MAIN_HOM_CODE=&\
2249 get_main_hom_code ($structure_file);\n$INFILE=vfop\
2250 en ($structure_file, \"r\");\n\n\nif ( $MODE eq \"\
2251 raw_pdb\" || $MODE eq \"raw\")\n{\n    while (<$IN\
2252 FILE>)\n{       print \"$_\";}\n    close ( $INFILE);\n \
2253    &myexit($EXIT_SUCCESS);\n}    \nif ( $MODE eq \\
2254 "raw4fugue\" )\n{\n    while (<$INFILE>)\n{     \n      $l=\
2255 $_;\n   if ($l=~/^SEQRES/)\n{\n     \n      $c= subst\
2256 r($l,11,1);\n       if ($hc_chain {$c}){print \"$l\"\
2257 ;}\n}\n elsif ( $l=~/^ATOM/)\n{\n           $c=substr($l\
2258 ,21,1);\n           if ($hc_chain {$c}){print \"$l\";}\n\
2259 }\n}\n    close ( $INFILE);\n    &myexit($EXIT_SUC\
2260 CESS);\n}    \n\nif ( $MODE eq \"pdb\")\n{\n\n    \
2261 $read_header=0;\n    while (<$INFILE>) \n{\n        $\
2262 line=$_;\n          if    ($line =~ /^HEADER/){print \"\
2263 $line\";$read_header=1;}\n}\n    close ($INFILE);\\
2264 n\n    if (!$read_header)\n{\n  print \"HEADER    U\
2265 NKNOWN                                 00-JAN-00  \
2266  $force_name\\n\";\n}\n\n    $INFILE=vfopen ($stru\
2267 cture_file, \"r\");\n    \n    print \"COMPND   1 \
2268 CHAIN:\";\n    $last=pop(@c_chain);\n    foreach $\
2269 c ( @c_chain){ print \" $c,\";}\n    if ( $last eq\
2270  \" \"){print \" NULL;\\n\";}\n    else \n{\n     \
2271  print \" $last;\\n\";\n}\n    @c_chain=(@c_chain,\
2272  $last);\n    \n    print \"REMARK Output of the p\
2273 rogram extract_from_pdb (Version $VersionTag)\\n\"\
2274 ;\n    print \"REMARK Legal PDB format not Guarant\
2275 eed\\n\";\n    print \"REMARK This format is not m\
2276 eant to be used in place of the PDB format\\n\";\n\
2277     print \"REMARK The header refers to the origin\
2278 al entry\\n\";\n    print \"REMARK The sequence fr\
2279 om the original file has been taken in the field: \
2280 $seq_field\\n\";\n    print \"REMARK extract_from_\
2281 pdb, 2001, 2002, 2003, 2004, 2005 2006 (c) CNRS an\
2282 d Cedric Notredame\\n\";   \n    if ( $coor_set)\n\
2283 {\n       print \"REMARK Partial chain: Start $sta\
2284 rt End $end\\n\";\n}\n    if ( $is_nmr)\n{\n      \
2285  print \"REMARK NMR structure: MODEL $model\\n\";\\
2286 n}\n   \n    if ( $n_atom!=0)\n{\n       print \"R\
2287 EMARK Contains Coordinates of: \";\n       foreach\
2288  $a (@atom){print \"$a \";}\n       print \"\\n\";\
2289 \n}  \n}\n\n\n\n\nmy $residue_index = -999;\nmy $o\
2290 ld_c = \"TemporaryChain\";\n\nwhile (<$INFILE>) \n\
2291 {\n     $line=$_;\n\n\n if ($line =~ /^SEQRES/)\n{\n\n\
2292                 @field=/(\\S*)\\s*/g;\n \n      \n              $c= substr($_,11,\
2293 1);\n\n         \n              $l=$#field;\n           for ($a=4; $a<$#field \
2294 ;)\n{\n                 if (!$onelett{$molecule_type{$c}}->{$fie\
2295 ld[$a]})\n{\n                           splice @field, $a, 1;\n}\n                      else\
2296  \n{\n                          $a++;\n}\n}\n   \n              if ( $c ne $in_chain)\\
2297 n{\n                    $pdb_chain_list[$n_pdb_chains]=$c;\n                    $pdb\
2298 _chain_len [$n_pdb_chains]=$len;\n                      $in_chain=$c;\
2299 \n                      $n_pdb_chains++;\n}\n   \n              for ( $a=4; $a<$#fi\
2300 eld;$a++)\n{\n                  @{$complete_seq{$c}}->[$complete_\
2301 seq_len{$c}++]=$field[$a];\n}\n}\n    elsif ( $lin\
2302 e=~/^ATOM/ || ($line=~/^HETATM/ && &is_aa(substr($\
2303 line,17,3),substr($line,21,1)) && !$no_hetatm))\n{\
2304 \n\n     \n    $RAW_AT_ID=$AT_ID=substr($line,12,4);\\
2305 n       $RES_ID=&is_aa(substr($line,17,3),substr($line,2\
2306 1,1));\n        $CHAIN=substr($line,21,1);\n\n    $RES_NO\
2307 =substr($line,22,4);\n  $HOM_CODE=substr ($line, 26\
2308 , 1);\n $TEMP=substr($line,60,6);\n     \n      $TEMP=~s/\\\
2309 s//g;\n        $AT_ID=~s/\\s//g;\n      $RES_ID=~s/\\s/\
2310 /g;\n        $RES_NO=~s/\\s//g;\n               \n      if ( $HOM_CO\
2311 DE ne $MAIN_HOM_CODE){next;}\n  elsif ( $already_re\
2312 ad2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO}){next;}\n el\
2313 se{$already_read2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO\
2314 }=1;}\n \n      \n      if ($coor_set && $numbering eq \"fil\
2315 e\" && $residue_index ne $RES_NO)\n{\n      \n      \
2316 if ( $RES_NO<=$start){$real_start{$CHAIN}++;}\n   \
2317   if ( $RES_NO<=$end){$real_end{$CHAIN}++;}\n}\n        e\
2318 lsif ($numbering eq \"absolute\")\n{\n      $real_s\
2319 tart{$CHAIN}=$start;\n      $real_end{$CHAIN}=$end;\
2320 \n}\n\n        $KEY=\"ALL\";\n        if ( $CHAIN \
2321 ne $in_atom_chain)\n{\n     \n    $pdb_atom_chain_l\
2322 ist[$n_pdb_atom_chains]=$c;\n     $pdb_atom_chain_le\
2323 n [$n_pdb_atom_chains]=$len;\n    $in_atom_chain=$c\
2324 ;\n       $n_pdb_atom_chains++;\n}\n    \n      if ( $residue_\
2325 index ne $RES_NO)\n{\n       $residue_index = $RES_\
2326 NO;\n        @{$atom_seq{$CHAIN}}->[$atom_seq_len{$C\
2327 HAIN}++]=$RES_ID;;\n}\n}\n\n}\nclose ($INFILE);\n\\
2328 n\n\n\n\n\n$INFILE=vfopen ($structure_file, \"r\")\
2329 ;\nforeach $c (@c_chain)\n{\n   if    ( $seq_field e\
2330 q \"SEQRES\"){@pdb_seq=@{$complete_seq{$c}};}\n el\
2331 sif ( $seq_field eq \"ATOM\")  {@pdb_seq=@{$atom_s\
2332 eq{$c}};}\n     \n\n    $full_length=$l=$#pdb_seq+1;\n          \\
2333 n       if ( $real_end{$c}==\"*\"){$real_end{$c}=$full_l\
2334 ength;}\n       if ( $coor_set)\n{         \n\n    if ( $real\
2335 _end{$c} < $l){splice @pdb_seq, $real_end{$c}, $l;\
2336 }\n        if ( $real_start{$c} < $l){splice @pdb_seq,\
2337  0, $real_start{$c}-1;}            \n      $l=$#pdb_seq;\\
2338 n}\n\n  elsif ( $delete_set)\n{\n          splice @pdb_se\
2339 q, $delete_start, $delete_end-$delete_start+1;\n         \
2340   $l=$#pdb_seq;\n}\n    \n      $new_fasta_name=\"$pdb_id$\
2341 c\";\n  if ( $coor_set)\n{\n       if ( $n_pdb_chains=\
2342 =0){$new_fasta_name=\"$new_fasta_name$c\";}\n      $\
2343 new_fasta_name= $new_fasta_name.\"\\_$start\\_$end\
2344 \";\n}\n           \n   if ( $MODE eq \"pdb\")\n{\n        $nl=\
2345 1;\n       $n=0;\n         \n      foreach $res ( @pdb_seq)\\
2346 n               {\n             if ( !$n)\n             {\n             \n               printf \"SEQRES  %2\
2347 d %1s %4d  \", $nl,$c, $l;\n             $nl++;\n       }\n          $\
2348 res=~s/\\s//g;\n             \n      if ($code==1){ print\
2349 f \"%3s \",$onelett{$molecule_type{$c}}->{$res};}\\
2350 n            elsif  ($code==3){ printf \"%3s \",$res};\n\
2351              \n      $n++;                \n         if ( $n==13){$n=0;p\
2352 rint \"\\n\";}\n}\n       if ( $n!=0){print \"\\n\"; $\
2353 n=0;}\n}\n      elsif ( $MODE eq \"simple\")\n{\n         pri\
2354 nt \"# SIMPLE_PDB_FORMAT\\n\";\n          if ( $new_fasta\
2355 _name eq \" \"){$new_fasta_name=\"dummy_name\";}\n\
2356           print \">$new_fasta_name\\n\";\n\n      foreach $r\
2357 es ( @pdb_seq)\n{\n           print \"$onelett{$molecu\
2358 le_type{$c}}->{$res}\";\n}\n      print \"\\n\";\n}\n\
2359         elsif ( $MODE eq \"fasta\")\n{\n          $n=0;\n         prin\
2360 t \">$new_fasta_name\\n\";\n      \n      foreach $res (\
2361  @pdb_seq)\n{\n\n             print \"$onelett{$molecule\
2362 _type{$c}}->{$res}\";\n              $n++;\n         \
2363  if ( $n==60){print \"\\n\"; $n=0;}\n}\n          print \\
2364 "\\n\"; \n}\n}\n\nif ( $MODE eq \"fasta\")\n{\n   \
2365   &myexit($EXIT_SUCCESS);\n  \n}\n\n  \n  $charcou\
2366 nt=0;\n  $inchain=\"BEGIN\";\n  $n=0;\n  while (<$\
2367 INFILE>) \n{\n    $line=$_;\n     \n    if ($line \
2368 =~/^ATOM/  ||  ($line=~/^HETATM/))\n{\n $line_head\
2369 er=\"UNKNWN\";\n        $RES_ID=substr($line,17,3);\n   $ch\
2370 ain = substr($line,21,1);\n\n   if ($line =~/^ATOM/)\
2371 \n{\n       $line_header=\"ATOM\";\n        $RES_ID=(&i\
2372 s_aa($RES_ID,$chain))?&is_aa($RES_ID,$chain):$RES_\
2373 ID;\n}\n        elsif ($line=~/^HETATM/ && ($ligand_list \
2374 {$RES_ID} ||$ligand_list {'ALL'} || !&is_aa($RES_I\
2375 D,$chain)))\n{\n            $line_header=\"HETATM\";\n}\n\
2376         elsif ($line=~/^HETATM/ && (&is_aa($RES_ID,$chain\
2377 ) && !$no_hetatm))\n{\n     $line_header=\"ATOM\";\
2378 \n          $RES_ID=&is_aa($RES_ID,$chain);\n}\n        else\n\
2379 {\n         next;\n}\n\n        \n\n    $X=substr($line,30,8);  \
2380    \n   $Y=substr($line,38,8);\n        $Z=substr($line,46,\
2381 8);\n   $TEMP=substr($line,60,6);\n     \n      $RAW_AT_ID=$A\
2382 T_ID=substr($line,12,4);\n      $CHAIN=substr($line,21,\
2383 1);\n   $RES_NO=substr($line,22,4);\n   $HOM_CODE=subs\
2384 tr ($line, 26, 1);\n    \n      $X=~s/\\s//g;\n $Y=~s/\\s/\
2385 /g;\n   $Z=~s/\\s//g;\n $TEMP=~s/\\s//g;\n      \n      $AT_ID\
2386 =~s/\\s//g;\n   $RES_ID=~s/\\s//g;\n    $RES_NO=~s/\\s/\
2387 /g;\n\n \n      if ( $HOM_CODE ne $MAIN_HOM_CODE){next;\
2388 }\n     elsif ( $already_read{$CHAIN}{$RES_ID}{$AT_ID}\
2389 {$RES_NO}){next;}\n     else{$already_read{$CHAIN}{$RE\
2390 S_ID}{$AT_ID}{$RES_NO}=1;}\n    \n      $KEY=\"ALL\";\n\n \
2391         if ( $RES_NO ==0){$start_at_zero=1;}\n\n        $RE\
2392 S_NO+=$start_at_zero;    \n     \n      if ( $current_chain\
2393  ne $CHAIN)\n{\n            $current_chain=$CHAIN;\n        \
2394 $pos=$current_residue=0;\n          $offset=($coor_set)\
2395 ?($real_start{$CHAIN}-1):0;\n       if    ( $seq_fie\
2396 ld eq \"SEQRES\"){@ref_seq=@{$complete_seq{$CHAIN}\
2397 };}\n       elsif ( $seq_field eq \"ATOM\")  {@ref_s\
2398 eq=@{$atom_seq{$CHAIN}};}\n}\n  \n      if ($current_res\
2399 idue != $RES_NO)\n{\n       $current_residue=$RES_NO\
2400 ;\n         if    ( $seq_field eq \"SEQRES\"){$pos=$cu\
2401 rrent_residue;}\n           elsif ( $seq_field eq \"ATOM\
2402 \"){$pos++;}\n}\n       \n      \n      if ($n_atom==0 || $atom_li\
2403 st{$AT_ID}==1 || $atom_list{$KEY}==1)\n{        \n          \\
2404 n           $do_it=(!@c_chain || $hc_chain{$CHAIN} ||$hc\
2405 _chain{'LIGAND'} );\n       \n      $do_it= ($do_it==\
2406 1) && ($coor_set==0 ||($pos>=$real_start{$CHAIN} &\
2407 & $pos<=$real_end{$CHAIN}));\n      $do_it= ($do_it\
2408 ==1) && ($delete_set==0 || $pos<$delete_start ||$p\
2409 os>$delete_end );\n         if ($ligand==0 && $line_he\
2410 ader eq \"HETATM\" ){$do_it=0;}\n           if ($ligand_\
2411 only==1 && $line_header eq \"ATOM\" ){$do_it=0;}\n\
2412             if ($ligand==1 && $line_header eq \"HETATM\" \
2413 && $ligand_list{$RES_ID}==0 && $ligand_list{\"ALL\\
2414 "}==0){$do_it=0;} \n        \n      \n      if ( $do_it\
2415 )\n{\n          $n++;\n         $out_pos=$pos;\n                \n             if ( \
2416 $delete_set)\n{\n                 if ( $out_pos< $delete_start)\
2417 {;}\n             else {$offset=$delete_end-$delete_start;}\
2418 \n}       \n           \n              if ( $numbering_out \
2419 eq \"new\"){$out_pos-=$offset;}\n              elsif ( $\
2420 numbering_out eq \"old\"){$out_pos=$RES_NO;}\n     \
2421     \n       \n        \n              if ( $code==1){$R\
2422 ES_ID=$onelett{$molecule_type{$c}}->{$RES_ID};}\n       \
2423     \n         if ($unfold)\n{\n                   $unfolded_x+=5\
2424 ;\n                $X=$unfolded_x;\n               $Y=0;\n                 $Z=0;\n      \
2425            $float=1;\n}\n              else\n{\n                   $float=3;\\
2426 n}\n\n         if ( $MODE eq \"pdb\")\n{\n                 prin\
2427 tf \"%-6s%5d %-4s %3s %s%4d    %8.3f%8.3f%8.3f  1.\
2428 00 %5.2f\\n\",$line_header, $n, $RAW_AT_ID,$RES_ID\
2429 ,$CHAIN,$out_pos, $X, $Y, $Z,$TEMP;               \n}\n      \
2430   elsif ( $MODE eq \"simple\")\n{\n                 if ( $RES\
2431 _ID eq \"\"){$RES_ID=\"X\";}\n            printf \"%-6s %5\
2432 s %s %2s %4d    %8.3f %8.3f %8.3f\\n\",$line_heade\
2433 r, $AT_ID, $RES_ID,($CHAIN eq\"\" || $CHAIN eq \" \
2434 \")?\"A\":$CHAIN,$out_pos, $X, $Y, $Z,$TEMP;\n}\n\\
2435 n}\n}\n}\n}\nprint \"\\n\";\nclose($INFILE);\n\n\n\
2436 if ( $error ne \"\") \n{$error=$error.\"\\nDiagnos\
2437 tic:    SEQRES and the residues in ATOM are probab\
2438 ly Incompatible\\n\";\n    $error=$error.  \"Recom\
2439 endation: Rerun with '-fix 1' in order to ignore t\
2440 he SEQRES sequences\\n\";\n}\nif (!$nodiagnostic){\
2441 print STDERR $error;}\n&myexit ( $EXIT_SUCCESS);\n\
2442 \nsub remote_is_pdb_name \n{\n    my $in=@_[0];\n \
2443    my $netaddress=@_[1];\n    my $ref_file, $pdb;\\
2444 n    my $value;\n\n    if ( $in=~/[^\\w\\d\\:\\_]/\
2445 ){return 0;}\n    \n    \n    $ref_file=\"$cache/p\
2446 db_entry_type.txt\";\n    \n    if ( !-e $ref_file\
2447  || (-M $ref_file)>2 || -z $ref_file)\n{\n      &url2fi\
2448 le(\"ftp://ftp.wwpdb.org/pub/pdb/derived_data/pdb_\
2449 entry_type.txt\", $ref_file);\n}\n \n    $pdb=subs\
2450 tr ($in,0, 4);\n    \n    \n    $value=`grep -c $p\
2451 db $ref_file`;\n    return $value;\n}\n      \nsub\
2452  is_pdb_file\n{\n    my @arg=@_;\n\n    if ( !-e $\
2453 arg[0]){return 0;}\n    \n    $F=vfopen ($arg[0], \
2454 \"r\");\n    while ( <$F>)\n{\n if (/^HEADER/)\n{\\
2455 n           close $F;\n     return 1;\n}\n      elsif ( /^SEQ\
2456 RES/)\n{\n          close $F;\n     return 1;\n}\n      elsi\
2457 f ( /^ATOM/)\n{\n           close $F;\n     return 1;\n}\
2458 \n}\n    return 0;\n}\nsub get_pdb_id\n{\n    my $\
2459 header_file=@_[0];\n    my $id;\n    \n\n    $F=vf\
2460 open (\"$header_file\", \"r\");\n\n    while ( <$F\
2461 >)\n{\n \n      if ( /HEADER/)\n{\n         $id=substr($_,6\
2462 2,4 );\n            return $id;\n}\n}\n    close ($F);\n \
2463    \n    return \"\";\n}\n\nsub get_ligand_list\n{\
2464 \n    my $pdb_file=@_[0];\n    my $chain;\n    my \
2465 $ligand;\n    my %complete_ligand_list;\n    \n\n \
2466    $F=vfopen ($pdb_file, \"r\");\n    while ( <$F>\
2467 )\n{\n  if ( /^HETATM/)\n{\n        $line=$_;\n     $c\
2468 hain=substr($line,21,1);\n          $ligand=substr($lin\
2469 e,17,3);\n          \n      if (!$complete_ligand_list{$\
2470 chain}{$ligand})\n{\n           \n              $complete_ligand_list{\\
2471 "result\"}.=\"CHAIN $chain LIGAND $ligand\\n\";\n       \
2472         $complete_ligand_list{$chain}{$ligand}=1;\n}\n}\n\
2473 }\n    close ($F);\n    return %complete_ligand_li\
2474 st;\n}\n\nsub get_chain_list \n{\n    my $header_f\
2475 ile;\n    my @chain_list;\n    my @list;\n    my $\
2476 n_chains;\n    my %chain_hasch;\n    my $pdb_file=\
2477 @_[0];\n    my $c;\n    my %hasch;\n    my $chain;\
2478 \n  \n    \n    $F=vfopen ($pdb_file, \"r\");\n   \
2479  while ( <$F>)\n{\n\n\n if (/SEQRES\\s+\\d+\\s+(\\\
2480 S+)/)\n{\n          $chain = substr($_,11,1);$chain=~s/\
2481 \\s//g;if ( $chain eq \"\"){$chain=\" \";}\n       \n\
2482             \n      if ($chain && !$hasch{$chain}){$hasch{\
2483 $chain}=1;push @chain_list, $chain;}\n}\n       if (/^AT\
2484 OM/ || /^HETATM/)\n{\n      $chain = substr($_,21,1\
2485 ); $chain=~s/\\s//g;if ( $chain eq \"\"){$chain=\"\
2486  \";}\n     if ($chain && !$hasch{$chain}){$hasch{\
2487 $chain}=1;push @chain_list, $chain;}\n}\n}\n    \n\
2488    \n    close ($F);\n    if (!@chain_list)\n{\n        @\
2489 chain_list=(\"A\");\n}\n    return @chain_list;\n}\
2490 \n\nsub token_is_in_list\n{\n\n    my @list=@_;\n \
2491    my $a;\n    \n    for ($a=1; $a<=$#list; $a++)\\
2492 n{\n    if ( $list[$a] eq $list[0]){return $a;}\n}\n}\
2493 \n\nsub pdb_name2name_and_chain \n{\n    my $pdb_f\
2494 ile=@_[0];\n    my $pdb_file_in;\n    my @array;\n\
2495     my $chain;\n    my $c;\n\n    $pdb_file_in=$pd\
2496 b_file;\n\n    $pdb_file=~/^(.{4})/;$pdb_id=$1;\n \
2497    @array=($pdb_file=~/([\\w])/g);\n  \n  \n    $c\
2498 hain=uc ($array[4]);\n    $chain=($chain eq \"\")?\
2499 \"FIRST\":$chain;\n    \n    return ( $pdb_id, $ch\
2500 ain);\n\n    if ( $#array==3){return ($pdb_id, \"F\
2501 IRST\");}\n    elsif ( $#array<4){ return ($pdb_id\
2502 , \"\");}\n    else {return ( $pdb_id, $chain);}\n\
2503       \n    \n    \n}\nsub get_main_hom_code \n{\n\
2504     my $pdb_file=@_[0];\n    my %hom, $n, $best, $\
2505 best_h;\n    open (F, $pdb_file);\n    while (<F>)\
2506 \n{\n   if ( $_=~/^ATOM/)\n{\n      $h=substr ($_,26,\
2507  1);\n      $n=++$hom{$h};\n        if ($n>$best)\n{\n\
2508                 $best=$n;\n             $best_h=$h;\n}\n}\n}\n    close (F)\
2509 ;\n    return $best_h;\n}\n\n\nsub get_pdb_file \n\
2510 {\n    my ($pdb_file_in)=(@_);\n    my $result;\n \
2511    my @letter;\n    my @chain;\n    my $v;\n    my\
2512  $pdb_file=$pdb_file_in;\n\n    $pdb_file=($pdb_fi\
2513 le_in=~/\\S+_S_(\\S+)/)?$1:$pdb_file_in;\n\n    if\
2514  ($no_remote_pdb_dir==0)\n{\n   $no_remote_pdb_dir=1\
2515 ;\n     $result=get_pdb_file3 ($pdb_file);\n    $no_remot\
2516 e_pdb_dir=0;\n  if ( $result){return $result;}\n        el\
2517 se\n{\n     \n      lc ($pdb_file);\n       $result=g\
2518 et_pdb_file3($pdb_file);\n          return  $result;\n}\
2519 \n}\n    else\n{\n      return get_pdb_file3 ($pdb_file\
2520 );\n}\n    \n}\n\nsub get_pdb_file3 \n{\n    my $p\
2521 db_file_in=@_[0];\n    my $result;\n    my @letter\
2522 ;\n    my @chain;\n    my $lcfile;\n    my $ucfile\
2523 ;\n    my $pdb_file=$pdb_file_in;\n    \n    $lcfi\
2524 le=lc $pdb_file;\n    $ucfile=uc $pdb_file;\n\n   \
2525  if ( ($result=get_pdb_file2 ($pdb_file))){return \
2526 $result;}\n    \n\n    if ($lcfile ne $pdb_file &&\
2527  ($result=get_pdb_file2 ($lcfile))){return $result\
2528 ;}\n    if ($ucfile ne $pdb_file && ($result=get_p\
2529 db_file2 ($ucfile))){return $result;}\n    \n   \n\
2530     \n    return \"\";\n}\nsub get_pdb_file2\n{\n \
2531    my $pdb_file=@_[0];\n    my $return_value;\n   \
2532  \n    $return_value=\"\";\n    \n    if ( ($resul\
2533 t=get_pdb_file1 ($pdb_file))){$return_value=$resul\
2534 t;}\n    elsif ( !($pdb_file=~/\\.pdb/) && !($pdb_\
2535 file=~/\\.PDB/))\n{\n   if ( ($result=get_pdb_file1 \
2536 (\"$pdb_file.pdb\"))){$return_value=$result;}\n el\
2537 sif ( ($result=get_pdb_file1 (\"$pdb_file.PDB\")))\
2538 {$return_value=$result;}\n\n    elsif ( ($result=get_\
2539 pdb_file1 (\"pdb$pdb_file.pdb\"))){$return_value=$\
2540 result;}        \n      elsif ( ($result=get_pdb_file1 (\"pdb$\
2541 pdb_file.PDB\"))){$return_value=$result;}\n     elsif \
2542 ( ($result=get_pdb_file1 (\"PDB$pdb_file.PDB\"))){\
2543 $return_value=$result;}\n       elsif ( ($result=get_pdb\
2544 _file1 (\"PDB$pdb_file.pdb\"))){$return_value=$res\
2545 ult;}\n \n      \n      elsif ( ($result=get_pdb_file1 (\"$p\
2546 db_file.ent\"))){$return_value=$result;}\n      elsif (\
2547  ($result=get_pdb_file1 (\"pdb$pdb_file.ent\"))){$\
2548 return_value=$result;}\n        elsif ( ($result=get_pdb_\
2549 file1 (\"PDB$pdb_file.ent\"))){$return_value=$resu\
2550 lt;}\n\n        elsif ( ($result=get_pdb_file1 (\"$pdb_fi\
2551 le.ENT\"))){$return_value=$result;}\n   elsif ( ($re\
2552 sult=get_pdb_file1 (\"pdb$pdb_file.ENT\"))){$retur\
2553 n_value=$result;}\n     elsif ( ($result=get_pdb_file1\
2554  (\"PDB$pdb_file.ENT\"))){$return_value=$result;}\\
2555 n       \n      \n      \n}\n    return $return_value;\n}\n    \ns\
2556 ub get_pdb_file1\n{\n    my ($pdb_file)=(@_);\n   \
2557  my $return_value;\n    \n\n    $return_value=\"\"\
2558 ;\n    if ( ($result=get_pdb_file0 ($pdb_file))){$\
2559 return_value=$result;}\n    elsif ( ($result=get_p\
2560 db_file0 (\"$pdb_file.Z\"))){$return_value=$result\
2561 ;}\n    elsif ( ($result=get_pdb_file0 (\"$pdb_fil\
2562 e.gz\"))){$return_value=$result;}\n    elsif ( ($r\
2563 esult=get_pdb_file0 (\"$pdb_file.GZ\"))){$return_v\
2564 alue=$result;}\n    return $return_value;\n}\nsub \
2565 get_pdb_file0 \n{ \n    my ($pdb_file, $attempt)=(\
2566 @_);\n    my $pdb_file=@_[0];\n    my $tmp_pdb_fil\
2567 e;    \n    my $return_value;\n\n    if ( !$attemp\
2568 t){$attempt=1;}\n    \n    $local_pdb_file=\"$pdb_\
2569 file\";\n    if ( $local_pdb_file eq \"\")\n{\n $t\
2570 mp_pdb_file=vtmpnam();\n        open F, \">$tmp_pdb_file\\
2571 ";\n    \n      while (<STDIN>){print F \"$_\";}\n      close (\
2572 F);\n   \n      if (-e $tmp_pdb_file && &is_pdb_file ( $l\
2573 ocal_pdb_file))\n{return $tmp_pdb_file;}\n}\n\n   \
2574  $local_pdb_file=\"$pdb_file\";\n    &debug_print \
2575 (\"\\nTry access local file: $local_pdb_file\");\n\
2576     \n    $local_pdb_file=&check_pdb_file4compress\
2577 ion ($local_pdb_file);\n    if ( -e $local_pdb_fil\
2578 e && (&is_pdb_file ($local_pdb_file) || $force_pdb\
2579 ))\n{\n &debug_print ( \"\\n\\tIs in Current Dir\"\
2580 );\n    $tmp_pdb_file=vtmpnam();\n      `cp $local_pdb_fil\
2581 e $tmp_pdb_file`;\n     return $tmp_pdb_file;\n}\n    \
2582 else\n{\n       &debug_print (\"\\n\\tFile Not in Curren\
2583 t Dir\");\n}\n\n    if ($pdb_file=~/^pdb/||$pdb_fi\
2584 le=~/^PDB/){$pdb_div=substr ($pdb_file, 4, 2);}\n \
2585    else\n{\n      $pdb_div=substr ($pdb_file, 1, 2);\\
2586 n}\n    $local_pdb_file=\"$pdb_dir/$pdb_div/$pdb_f\
2587 ile\";\n    $local_pdb_file=&check_pdb_file4compre\
2588 ssion ( $local_pdb_file);\n    &debug_print (\"\\n\
2589 Try access file From PDB_DIR: $local_pdb_file\");\\
2590 n    if ($pdb_dir && -e $local_pdb_file && &is_pdb\
2591 _file ($local_pdb_file))\n{\n   &debug_print ( \"\\n\
2592 \\tIs in Local PDB DIR\");\n    $tmp_pdb_file=vtmpnam\
2593 ();\n   `cp $local_pdb_file $tmp_pdb_file`;\n   return\
2594  $tmp_pdb_file;\n}\n\n    $local_pdb_file=\"$pdb_d\
2595 ir/$pdb_file\";\n    $local_pdb_file=&check_pdb_fi\
2596 le4compression ( $local_pdb_file);\n    &debug_pri\
2597 nt (\"\\nTry access file From PDB_DIR: local_pdb_f\
2598 ile\");\n    if ($pdb_dir && -e $local_pdb_file &&\
2599  &is_pdb_file ($local_pdb_file))\n{\n   &debug_print\
2600  ( \"\\n\\tIs in Local PDB DIR\");\n    $tmp_pdb_file\
2601 =vtmpnam();\n   `cp $local_pdb_file $tmp_pdb_file`;\\
2602 n       return $tmp_pdb_file;\n}\n\n    $local_pdb_file=\
2603 \"$pdb_dir$pdb_file\";\n    $local_pdb_file=&check\
2604 _pdb_file4compression ( $local_pdb_file);\n    &de\
2605 bug_print (\"\\nTry access file From PDB_DIR: $loc\
2606 al_pdb_file\");\n    if ($pdb_dir && -e $local_pdb\
2607 _file && &is_pdb_file ($local_pdb_file))\n{\n   &deb\
2608 ug_print ( \"\\n\\tIs in Local PDB DIR\");\n    $tmp_\
2609 pdb_file=vtmpnam();\n   `cp $local_pdb_file $tmp_pdb\
2610 _file`;\n       return $tmp_pdb_file;\n}\n    else\n{&de\
2611 bug_print ( \"\\n\\tNot In Local Pdb Dir\");}\n\n \
2612    if ($cache ne \"NO\" && $cache ne \"no\")\n{\n\\
2613 n       $local_pdb_file=\"$cache/$pdb_file\";\n $local_p\
2614 db_file=&check_pdb_file4compression ( $local_pdb_f\
2615 ile);\n &debug_print(\"\\nTry access file From Cac\
2616 he: $local_pdb_file\");\n       if (-e $local_pdb_file &\
2617 & &is_pdb_file ($local_pdb_file))\n{\n      &debug_\
2618 print ( \"\\n\\tIs in T-Coffee Cache\");\n          $tm\
2619 p_pdb_file=vtmpnam();\n     `cp $local_pdb_file $t\
2620 mp_pdb_file`;\n     return $tmp_pdb_file;\n}\n  els\
2621 e{&debug_print ( \"\\n\\tNot in Cache Dir\");}\n}\\
2622 n\n    if (!$no_remote_pdb_dir) \n{\n\n my $return\
2623 _value=\"\";\n  if ( &remote_is_pdb_name ($pdb_file\
2624 , $netaddress)==1)\n{\n     &debug_print (\"\\n***\
2625 **************************************************\
2626 **\\nTry Remote Access for $pdb_file\");\n          $tm\
2627 p_pdb_file=vtmpnam();\n     $netcommand=$netaddres\
2628 s;\n        $netcommand=~s/%%/$pdb_file/g;\n        &url\
2629 2file(\"$netcommand\", \"$tmp_pdb_file.$netcompres\
2630 sion\");\n          &debug_print(\"\\nREMOTE: $netcomma\
2631 nd\\n\");\n        \n       $compressed_tmp_file_name=\"\
2632 $tmp_pdb_file.$netcompression\";\n          \n      if (\
2633 $netcompression && -B $compressed_tmp_file_name)\n\
2634 {\n             my $r;\n                &debug_print (\"\\n\\tFile Found Re\
2635 motely\");\n            if (($r=safe_system ( \"$netcompress\
2636 ion_pg $compressed_tmp_file_name\")!=$EXIT_SUCCESS\
2637 ) && $attempts<5)\n{\n              &debug_print (\"\\n\\t\
2638 Proper Download Failed Try again\");\n              unlink\
2639  $compressed_tmp_file_name;\n               print \"\\nFail\
2640 ed to Download $compressed_tmp_file_name. New Atte\
2641 mpt $attempt/5\\n\";\n              return &get_pdb_file0(\
2642 $pdb_file, $attempt+1);\n}\n            elsif ($r== $EXIT_SU\
2643 CCESS)\n{\n                 &debug_print (\"\\n\\tProper Down\
2644 load Succeeded \");\n               $return_value=$tmp_pdb_\
2645 file;\n}\n              else\n{\n                   &debug_print (\"\\n\\tP\
2646 roper Download Failed \");\n                &debug_print (\"\
2647 \\nFile Not Found Remotely\");\n                    unlink $comp\
2648 ressed_tmp_file_name;\n}\n}\n       else\n{\n           &debu\
2649 g_print (\"\\nFile Not Found Remotely\");\n             unlin\
2650 k $compressed_tmp_file_name;\n}\n           if ($cache n\
2651 e \"no\" && $cache ne \"update\" && -e $return_val\
2652 ue)\n{\n                `cp $return_value $cache/$pdb_file.pdb`;\
2653 \n}\n}\n        &debug_print (\"\\nRemote Download Finish\
2654 ed\");\n        return $return_value;\n}\n    return \"\"\
2655 ;\n}\n\nsub check_pdb_file4compression \n{\n    my\
2656  $file=@_[0];\n    my $tmp;\n    my $r;\n    \n   \
2657  $tmp=&vtmpnam();\n    if (-e $tmp){unlink $tmp;}\\
2658 n    \n    $file=~s/\\/\\//\\//g;\n    if    (-B $\
2659 file && ($file=~/\\.Z/)) {`cp $file $tmp.Z`;`rm $t\
2660 mp`;`gunzip $tmp.Z $SILENT`;$r=$tmp;}\n    elsif (\
2661 -B $file && ($file=~/\\.gz/)){`cp $file $tmp.gz`;`\
2662 gunzip $tmp.gz $SILENT`;return $r=$tmp;}\n    elsi\
2663 f (-B $file ){`cp $file $tmp.gz`;`gunzip $tmp.gz $\
2664 SILENT`;$r=$tmp;}\n    elsif ( -e $file ) {$r= $fi\
2665 le;}\n    elsif ( -e \"$file.gz\" ){ `cp $file.gz \
2666 $tmp.gz`;`gunzip     $tmp.gz $SILENT`;$r=$tmp;}   \
2667  \n    elsif ( -e \"$file.Z\") {`cp $file.Z  $tmp.\
2668 Z`; `gunzip $tmp.Z $SILENT`;$r=$tmp;}\n    else  {\
2669 $r= $file;}\n\n    if ( -e \"$tmp.Z\"){unlink \"$t\
2670 mp.Z\";}\n    if ( -e \"$tmp.gz\"){unlink \"$tmp.g\
2671 z\";}\n    \n    return $r;\n    \n}\n\nsub vtmpna\
2672 m\n{\n    my $tmp_file_name;\n    $tmp_name_counte\
2673 r++;\n    $tmp_file_name=\"tmp_file_for_extract_fr\
2674 om_pdb$$.$tmp_name_counter\";\n    $tmp_file_list[\
2675 $ntmp_file++]=$tmp_file_name;\n    if ( -e $tmp_fi\
2676 le_name) {return &vtmpnam ();}\n    else {return $\
2677 tmp_file_name;}\n}\n\n\n\n    \n\n\nsub safe_syste\
2678 m \n{\n  my $com=@_[0];\n  my $pid;\n  my $status;\
2679 \n  if ($com eq \"\"){return 1;}\n  if (($pid = fo\
2680 rk ()) < 0){return (-1);}\n  if ($pid == 0)\n{\n  \
2681     exec ($com);\n}\n  else\n{\n        $PIDCHILD=$pid;\n\
2682 }\n  \n  waitpid ($pid,WTERMSIG);\n  return $?; #c\
2683 ontains the status of the exit\n}\nEND {\n  kill (\
2684 $PIDCHILD);\n  clean(@tmp_file_list);\n}\nsub myex\
2685 it\n{\n    my $exit_status=@_[0];\n    \n    &clea\
2686 n(@tmp_file_list);\n    exit ( $exit_status);\n}\n\
2687 \nsub clean\n{\n  my @fl=@_;\n  my $file;\n  \n\n \
2688   if ( $debug){print STDERR \"remove $#fl files\\n\
2689 \";}\n\n  foreach $file ( @fl)\n{\n      if (-e $f\
2690 ile)\n{\n         if ( $debug){print STDERR \"\\n$file [\
2691 NOT DELETED]\";}\n        else{unlink ($file);} \n}\n}\\
2692 n}\nsub vfopen \n{\n    my $file=@_[0];\n    my $m\
2693 ode=@_[1];\n    my $tmp;\n    my $F = new FileHand\
2694 le;\n    \n    \n    $tmp=$file;\n      \n    \n    if \
2695 ( $mode eq \"r\" && !-e $file){ die \"Cannot open \
2696 file $file [FATAL: EXTRACT_FROM_PDB]\\n\";}\n    e\
2697 lsif ($mode eq \"w\"){$tmp=\">$file\";}\n    elsif\
2698  ($mode eq \"a\"){$tmp=\">>$file\";}\n    \n    \n\
2699     open ($F,$tmp);\n    return $F;\n}\nsub debug_\
2700 print\n{\n    my $message =@_[0];\n    if ($debug)\
2701 {print STDERR \"NO_REMOTE_PDB_DIR: $no_remote_pdb_\
2702 dir - $message [DEBUG:extract_from_pdb]\";}\n    r\
2703 eturn;\n}\nsub is_aa \n{\n    my ($aa, $chain) =@_\
2704 ;\n\n    my $one;\n    my $trhee;\n    \n    if ( \
2705 $onelett{$molecule_type{$chain}}->{$aa} eq 'X' || \
2706 !$onelett{$molecule_type{$chain}}->{$aa} ){return \
2707 '';}\n    else\n{\n     $one=$onelett{$molecule_type{$\
2708 chain}}->{$aa};\n\n     $three=$threelett{$molecule_ty\
2709 pe{$chain}}->{$one};\n  \n\n    return $three;\n}\n\n}\
2710 \nsub pg_is_installed\n{\n    my @ml=@_;\n    my $\
2711 r, $p, $m;\n    my $supported=0;\n    \n    my $p=\
2712 shift (@ml);\n    $r=`which $p 2>/dev/null`;\n    \
2713 if ($r eq \"\"){return 0;}\n    else {return 1;}\n\
2714 }\nsub check_pg_is_installed\n{\n    my @ml=@_;\n \
2715    my $r=&pg_is_installed (@ml);\n    if (!$r)\n{\\
2716 n       print STDERR \"\\nProgram $p Supported but Not I\
2717 nstalled on your system [FATAL:tc_generic_method]\\
2718 \n\";\n myexit ($EXIT_FAILURE);\n}\n    else\n{\n       \
2719 return 1;\n}\n}\n\nsub url2file\n{\n    my ($addre\
2720 ss, $out, $wget_arg, $curl_arg)=(@_);\n    my ($pg\
2721 , $flag, $r, $arg, $count);\n    \n    if ( $INTER\
2722 NET==-1)\n{\n   $INTERNET=1;\n  $INTERNET=&check_inte\
2723 rnet_connection();\n}\n    if ($INTERNET==0){exit(\
2724 $EXIT_FAILURE);}\n   \n    if (&pg_is_installed (\\
2725 "wget\"))   {$pg=\"wget\"; $flag=\"-O\";$arg=$wget\
2726 _arg;}\n    elsif (&pg_is_installed (\"curl\")){$p\
2727 g=\"curl\"; $flag=\"-o\";$arg=$curl_arg;}\n    els\
2728 e\n{\n  print stderr \"ERROR: neither curl nor wget\
2729  are installed. Imnpossible to tectch remote file \
2730 [FATAL]\\n\";\n exit ($EXIT_FAILURE);\n}\n   \n   \
2731  $r=safe_system (\"$pg $flag$out $address >/dev/nu\
2732 ll 2>/dev/null\");\n    if ($r!=$EXIT_SUCCESS)\n{\\
2733 n       unlink $file;\n}\n    return $r;\n}\n\n\n\nsub c\
2734 heck_internet_connection\n{\n    my $internet;\n  \
2735   \n    if ( -e \"x\"){unlink (\"x\");}\n    url2f\
2736 ile(\"www.google.com\", \"x\");\n    \n    if ( !-\
2737 e \"x\" || -s \"x\" < 10){$internet=0;}\n    else \
2738 {$internet=1;}\n    if (-e \"x\"){unlink \"x\";}\n\
2739     return $internet;\n}\n\n\n\nsub pdbfile2chaint\
2740 ype\n  {\n    my $file=@_[0];\n    my %ct;\n    my\
2741  $F;\n    \n    $F=vfopen ($file, \"r\");\n    whi\
2742 le (<$F>)\n      {\n    my $line=$_;\n  if ($line =~/^\
2743 ATOM/)\n          {\n       my $C=substr($line,21,1);\n    \
2744  if (!$ct{$C})\n              { \n              my $r=substr($line,17\
2745 ,3);\n          $r=~s/\\s+//;\n         if (length ($r)==1){$ct{$\
2746 C}=\"R\";}\n            elsif (length ($r)==2){$ct{$C}=\"D\"\
2747 ;}\n            elsif (length ($r)==3){$ct{$C}=\"P\";}\n                el\
2748 se \n             {\n               print \"ERROR: Could not read RE\
2749 S_ID field in file $file [FATAL:extract_from_pdb]\\
2750 \n\";die;\n               }\n         }\n         }\n      }\n    clo\
2751 se ($F);\n    return %ct;\n  }\n   \n    \n\n\n\ns\
2752 ub fill_threelett_RNA\n{\n\n    my %threelett=(\n       'A'\
2753 , '  A',\n      'T', '  T',\n   'U', '  U',\n   'C', '  C',\
2754 \n      'G', '  G',\n   'I', '  I', #Inosine\n  );\n    \n      re\
2755 turn %threelett;\n\n}\n\n\nsub fill_onelett_RNA\n{\
2756 \n      my   %onelett=(\n       '  A' => 'A',\n '  T' => 'T',\
2757 \n      '  U' => 'U',\n '  C' => 'C',\n '  G' => 'G',\n\
2758         'CSL' => 'X',\n 'UMS' => 'X',\n '  I' => 'I',\n '\
2759 A' => 'A',\n    'T' => 'T',\n   'U' => 'U',\n   'C' => 'C\
2760 ',\n    'G' => 'G',\n   'I' => 'I',\n   );\n\n  return %on\
2761 elett;\n\n}\n\n\nsub fill_onelett_DNA\n{\n      my   %o\
2762 nelett=(\n      ' DA', 'A',\n   ' DT', 'T',\n   ' DC', 'C',\
2763 \n      ' DG', 'G',\n   'DA', 'A',\n    'DT', 'T',\n    'DC', '\
2764 C',\n   'DG', 'G',\n    );\n\n  return %onelett;\n\n}\n\\
2765 nsub fill_threelett_DNA\n{\n\n  my %threelett=(\n       '\
2766 A', ' DA',\n    'T', ' DT',\n   'C', ' DC',\n   'G', ' DG\
2767 ',\n    );\n\n  return %threelett;\n\n}\n\n\n\n\nsub f\
2768 ill_threelett_prot\n{  \n  my %threelett;\n\n  %th\
2769 reelett=(\n'A', 'ALA',\n'C', 'CYS',\n'D', 'ASP',\n\
2770 'E', 'GLU',\n'F', 'PHE',\n'G', 'GLY',\n'H', 'HIS',\
2771 \n'I', 'ILE',\n'K', 'LYS',\n'L', 'LEU',\n'N', 'ASN\
2772 ',\n'M', 'MET',\n'P', 'PRO',\n'Q', 'GLN',\n'R', 'A\
2773 RG',\n'S', 'SER',\n'T', 'THR',\n'V', 'VAL',\n'W', \
2774 'TRP',\n'Y', 'TYR',\n);\n\nreturn %threelett;\n\n\\
2775 n}\n\nsub fill_onelett_prot\n{\n    my %onelett;\n\
2776     \n    %onelett=(\n\n'10A', 'X',\n'11O', 'X',\n\
2777 '12A', 'X',\n'13P', 'X',\n'13R', 'X',\n'13S', 'X',\
2778 \n'14W', 'X',\n'15P', 'X',\n'16A', 'X',\n'16G', 'X\
2779 ',\n'1AN', 'X',\n'1AP', 'X',\n'1AR', 'X',\n'1BH', \
2780 'X',\n'1BO', 'X',\n'1C5', 'X',\n'1CU', 'X',\n'1DA'\
2781 , 'X',\n'1GL', 'X',\n'1GN', 'X',\n'1IN', 'X',\n'1L\
2782 U', 'L',\n'1MA', 'X',\n'1MC', 'X',\n'1MG', 'X',\n'\
2783 1MZ', 'X',\n'1NA', 'X',\n'1NB', 'X',\n'1NI', 'X',\\
2784 n'1PA', 'A',\n'1PC', 'X',\n'1PE', 'X',\n'1PG', 'X'\
2785 ,\n'1PI', 'A',\n'1PM', 'X',\n'1PN', 'X',\n'1PU', '\
2786 X',\n'1PY', 'X',\n'1UN', 'X',\n'24T', 'X',\n'25T',\
2787  'X',\n'26P', 'X',\n'2AB', 'X',\n'2AM', 'X',\n'2AN\
2788 ', 'X',\n'2AP', 'X',\n'2AR', 'X',\n'2AS', 'D',\n'2\
2789 BL', 'X',\n'2BM', 'X',\n'2CP', 'X',\n'2DA', 'X',\n\
2790 '2DG', 'X',\n'2DP', 'X',\n'2DT', 'X',\n'2EP', 'X',\
2791 \n'2EZ', 'X',\n'2FG', 'X',\n'2FL', 'X',\n'2FP', 'X\
2792 ',\n'2FU', 'X',\n'2GL', 'X',\n'2GP', 'X',\n'2HP', \
2793 'X',\n'2IB', 'X',\n'2IP', 'X',\n'2LU', 'L',\n'2MA'\
2794 , 'X',\n'2MD', 'X',\n'2ME', 'X',\n'2MG', 'X',\n'2M\
2795 L', 'L',\n'2MO', 'X',\n'2MR', 'R',\n'2MU', 'X',\n'\
2796 2MZ', 'X',\n'2NO', 'X',\n'2NP', 'X',\n'2OG', 'X',\\
2797 n'2PA', 'X',\n'2PC', 'X',\n'2PE', 'X',\n'2PG', 'X'\
2798 ,\n'2PH', 'X',\n'2PI', 'X',\n'2PL', 'X',\n'2PP', '\
2799 X',\n'2PU', 'X',\n'2SI', 'X',\n'2TB', 'X',\n'34C',\
2800  'X',\n'35G', 'X',\n'3AA', 'X',\n'3AD', 'X',\n'3AH\
2801 ', 'H',\n'3AN', 'X',\n'3AP', 'X',\n'3AT', 'X',\n'3\
2802 BT', 'X',\n'3CH', 'X',\n'3CN', 'X',\n'3CO', 'X',\n\
2803 '3CP', 'X',\n'3DR', 'X',\n'3EP', 'X',\n'3FM', 'X',\
2804 \n'3GA', 'X',\n'3GP', 'X',\n'3HB', 'X',\n'3HC', 'X\
2805 ',\n'3HP', 'X',\n'3IB', 'X',\n'3ID', 'X',\n'3IN', \
2806 'X',\n'3MA', 'X',\n'3MB', 'X',\n'3MC', 'X',\n'3MD'\
2807 , 'D',\n'3MF', 'X',\n'3MP', 'X',\n'3MT', 'X',\n'3O\
2808 L', 'X',\n'3PA', 'X',\n'3PG', 'X',\n'3PO', 'X',\n'\
2809 3PP', 'X',\n'3PY', 'X',\n'49A', 'X',\n'4AB', 'X',\\
2810 n'4AM', 'X',\n'4AN', 'X',\n'4AP', 'X',\n'4BA', 'X'\
2811 ,\n'4BT', 'X',\n'4CA', 'X',\n'4CO', 'X',\n'4HP', '\
2812 X',\n'4IP', 'X',\n'4MO', 'X',\n'4MV', 'X',\n'4MZ',\
2813  'X',\n'4NC', 'X',\n'4NP', 'X',\n'4OX', 'X',\n'4PB\
2814 ', 'X',\n'4PN', 'X',\n'4PP', 'X',\n'4SC', 'X',\n'4\
2815 SU', 'X',\n'4TB', 'X',\n'55C', 'X',\n'5AD', 'X',\n\
2816 '5AN', 'X',\n'5AT', 'X',\n'5CM', 'X',\n'5GP', 'X',\
2817 \n'5HP', 'E',\n'5HT', 'X',\n'5IT', 'X',\n'5IU', 'X\
2818 ',\n'5MB', 'X',\n'5MC', 'X',\n'5MD', 'X',\n'5MP', \
2819 'X',\n'5MU', 'X',\n'5NC', 'X',\n'5OB', 'X',\n'5PA'\
2820 , 'X',\n'5PV', 'X',\n'6AB', 'X',\n'6CT', 'X',\n'6H\
2821 A', 'X',\n'6HC', 'X',\n'6HG', 'X',\n'6HT', 'X',\n'\
2822 6IN', 'X',\n'6MO', 'X',\n'6MP', 'X',\n'6PG', 'X',\\
2823 n'6WO', 'X',\n'70U', 'X',\n'7DG', 'X',\n'7HP', 'X'\
2824 ,\n'7I2', 'X',\n'7MG', 'X',\n'7MQ', 'X',\n'7NI', '\
2825 X',\n'87Y', 'X',\n'8AD', 'X',\n'8BR', 'X',\n'8IG',\
2826  'X',\n'8IN', 'X',\n'8OG', 'X',\n'95A', 'X',\n'9AD\
2827 ', 'X',\n'9AM', 'X',\n'9AP', 'X',\n'9DG', 'X',\n'9\
2828 DI', 'X',\n'9HX', 'X',\n'9OH', 'X',\n'9TA', 'X',\n\
2829 'A12', 'X',\n'A15', 'X',\n'A23', 'X',\n'A24', 'X',\
2830 \n'A26', 'X',\n'A2G', 'X',\n'A2P', 'X',\n'A32', 'X\
2831 ',\n'A3P', 'X',\n'A4P', 'X',\n'A5P', 'X',\n'A70', \
2832 'X',\n'A76', 'X',\n'A77', 'X',\n'A78', 'X',\n'A79'\
2833 , 'X',\n'A80', 'X',\n'A85', 'X',\n'A88', 'X',\n'A9\
2834 A', 'X',\n'AA3', 'X',\n'AA4', 'X',\n'AA6', 'X',\n'\
2835 AAA', 'X',\n'AAB', 'X',\n'AAC', 'X',\n'AAE', 'X',\\
2836 n'AAG', 'R',\n'AAH', 'X',\n'AAM', 'X',\n'AAN', 'X'\
2837 ,\n'AAP', 'X',\n'AAR', 'R',\n'AAS', 'X',\n'AAT', '\
2838 X',\n'ABA', 'X',\n'ABC', 'X',\n'ABD', 'X',\n'ABE',\
2839  'X',\n'ABH', 'X',\n'ABI', 'X',\n'ABK', 'X',\n'ABM\
2840 ', 'X',\n'ABN', 'X',\n'ABP', 'X',\n'ABR', 'X',\n'A\
2841 BS', 'X',\n'ABU', 'X',\n'AC1', 'X',\n'AC2', 'X',\n\
2842 'ACA', 'X',\n'ACB', 'D',\n'ACC', 'C',\n'ACD', 'X',\
2843 \n'ACE', 'X',\n'ACH', 'X',\n'ACI', 'X',\n'ACL', 'R\
2844 ',\n'ACM', 'X',\n'ACN', 'X',\n'ACO', 'X',\n'ACP', \
2845 'X',\n'ACQ', 'X',\n'ACR', 'X',\n'ACS', 'X',\n'ACT'\
2846 , 'X',\n'ACV', 'V',\n'ACX', 'X',\n'ACY', 'X',\n'AD\
2847 2', 'X',\n'AD3', 'X',\n'ADC', 'X',\n'ADD', 'X',\n'\
2848 ADE', 'X',\n'ADH', 'X',\n'ADI', 'X',\n'ADM', 'X',\\
2849 n'ADN', 'X',\n'ADP', 'X',\n'ADQ', 'X',\n'ADR', 'X'\
2850 ,\n'ADS', 'X',\n'ADT', 'X',\n'ADU', 'X',\n'ADW', '\
2851 X',\n'ADX', 'X',\n'AE2', 'X',\n'AEA', 'X',\n'AEB',\
2852  'X',\n'AEI', 'D',\n'AEN', 'X',\n'AET', 'T',\n'AF1\
2853 ', 'X',\n'AF3', 'X',\n'AFA', 'D',\n'AFP', 'X',\n'A\
2854 G7', 'X',\n'AGB', 'X',\n'AGF', 'X',\n'AGL', 'X',\n\
2855 'AGM', 'R',\n'AGN', 'X',\n'AGP', 'X',\n'AGS', 'X',\
2856 \n'AGU', 'X',\n'AH0', 'X',\n'AH1', 'X',\n'AHA', 'X\
2857 ',\n'AHB', 'D',\n'AHC', 'X',\n'AHF', 'X',\n'AHG', \
2858 'X',\n'AHH', 'X',\n'AHM', 'X',\n'AHO', 'X',\n'AHP'\
2859 , 'X',\n'AHS', 'X',\n'AHT', 'Y',\n'AHU', 'X',\n'AH\
2860 X', 'X',\n'AI1', 'X',\n'AI2', 'X',\n'AIB', 'X',\n'\
2861 AIC', 'X',\n'AIM', 'X',\n'AIP', 'X',\n'AIQ', 'X',\\
2862 n'AIR', 'X',\n'AJ3', 'X',\n'AKB', 'X',\n'AKG', 'X'\
2863 ,\n'AKR', 'X',\n'AL1', 'X',\n'AL2', 'X',\n'AL3', '\
2864 X',\n'AL4', 'X',\n'AL5', 'X',\n'AL6', 'X',\n'AL7',\
2865  'X',\n'AL8', 'X',\n'AL9', 'X',\n'ALA', 'A',\n'ALB\
2866 ', 'X',\n'ALC', 'X',\n'ALD', 'L',\n'ALE', 'X',\n'A\
2867 LF', 'X',\n'ALG', 'X',\n'ALL', 'X',\n'ALM', 'A',\n\
2868 'ALN', 'A',\n'ALO', 'T',\n'ALP', 'X',\n'ALQ', 'X',\
2869 \n'ALR', 'X',\n'ALS', 'X',\n'ALT', 'A',\n'ALY', 'K\
2870 ',\n'ALZ', 'X',\n'AMA', 'X',\n'AMB', 'X',\n'AMC', \
2871 'X',\n'AMD', 'X',\n'AMG', 'X',\n'AMH', 'X',\n'AMI'\
2872 , 'X',\n'AML', 'X',\n'AMN', 'X',\n'AMO', 'X',\n'AM\
2873 P', 'X',\n'AMQ', 'X',\n'AMR', 'X',\n'AMS', 'X',\n'\
2874 AMT', 'X',\n'AMU', 'X',\n'AMW', 'X',\n'AMX', 'X',\\
2875 n'AMY', 'X',\n'ANA', 'X',\n'ANB', 'X',\n'ANC', 'X'\
2876 ,\n'AND', 'X',\n'ANE', 'X',\n'ANI', 'X',\n'ANL', '\
2877 X',\n'ANO', 'X',\n'ANP', 'X',\n'ANS', 'X',\n'ANT',\
2878  'X',\n'AOE', 'X',\n'AOP', 'X',\n'AP1', 'X',\n'AP2\
2879 ', 'X',\n'AP3', 'X',\n'AP4', 'X',\n'AP5', 'X',\n'A\
2880 P6', 'X',\n'APA', 'X',\n'APB', 'X',\n'APC', 'X',\n\
2881 'APE', 'F',\n'APF', 'X',\n'APG', 'X',\n'APH', 'A',\
2882 \n'API', 'X',\n'APL', 'X',\n'APM', 'X',\n'APN', 'G\
2883 ',\n'APP', 'X',\n'APQ', 'X',\n'APR', 'X',\n'APS', \
2884 'X',\n'APT', 'X',\n'APU', 'X',\n'APX', 'X',\n'APY'\
2885 , 'X',\n'APZ', 'X',\n'AQS', 'X',\n'AR1', 'X',\n'AR\
2886 2', 'X',\n'ARA', 'X',\n'ARB', 'X',\n'ARC', 'X',\n'\
2887 ARD', 'X',\n'ARG', 'R',\n'ARH', 'X',\n'ARI', 'X',\\
2888 n'ARM', 'R',\n'ARN', 'X',\n'ARO', 'R',\n'ARP', 'X'\
2889 ,\n'ARQ', 'X',\n'ARS', 'X',\n'AS1', 'R',\n'AS2', '\
2890 X',\n'ASA', 'D',\n'ASB', 'D',\n'ASC', 'X',\n'ASD',\
2891  'X',\n'ASE', 'X',\n'ASF', 'X',\n'ASI', 'X',\n'ASK\
2892 ', 'D',\n'ASL', 'X',\n'ASM', 'N',\n'ASO', 'X',\n'A\
2893 SP', 'D',\n'ASQ', 'X',\n'ASU', 'X',\n'ATA', 'X',\n\
2894 'ATC', 'X',\n'ATD', 'X',\n'ATF', 'X',\n'ATG', 'X',\
2895 \n'ATH', 'X',\n'ATM', 'X',\n'ATO', 'X',\n'ATP', 'X\
2896 ',\n'ATQ', 'X',\n'ATR', 'X',\n'ATT', 'X',\n'ATY', \
2897 'X',\n'ATZ', 'X',\n'AUC', 'X',\n'AUR', 'X',\n'AVG'\
2898 , 'X',\n'AXP', 'X',\n'AYA', 'A',\n'AZ2', 'X',\n'AZ\
2899 A', 'X',\n'AZC', 'X',\n'AZD', 'X',\n'AZE', 'X',\n'\
2900 AZI', 'X',\n'AZL', 'X',\n'AZM', 'X',\n'AZR', 'X',\\
2901 n'AZT', 'X',\n'B12', 'X',\n'B1F', 'F',\n'B2A', 'A'\
2902 ,\n'B2F', 'F',\n'B2I', 'I',\n'B2V', 'V',\n'B3I', '\
2903 X',\n'B3P', 'X',\n'B7G', 'X',\n'B96', 'X',\n'B9A',\
2904  'X',\n'BA1', 'X',\n'BAA', 'X',\n'BAB', 'X',\n'BAC\
2905 ', 'X',\n'BAF', 'X',\n'BAH', 'X',\n'BAI', 'X',\n'B\
2906 AK', 'X',\n'BAL', 'A',\n'BAM', 'X',\n'BAO', 'X',\n\
2907 'BAP', 'X',\n'BAR', 'X',\n'BAS', 'X',\n'BAT', 'F',\
2908 \n'BAY', 'X',\n'BAZ', 'X',\n'BB1', 'X',\n'BB2', 'X\
2909 ',\n'BBA', 'X',\n'BBH', 'X',\n'BBS', 'X',\n'BBT', \
2910 'X',\n'BBZ', 'X',\n'BCA', 'X',\n'BCB', 'X',\n'BCC'\
2911 , 'X',\n'BCD', 'X',\n'BCL', 'X',\n'BCN', 'X',\n'BC\
2912 R', 'X',\n'BCS', 'C',\n'BCT', 'X',\n'BCY', 'X',\n'\
2913 BCZ', 'X',\n'BDA', 'X',\n'BDG', 'X',\n'BDK', 'X',\\
2914 n'BDM', 'X',\n'BDN', 'X',\n'BDS', 'X',\n'BE1', 'X'\
2915 ,\n'BE2', 'X',\n'BEA', 'X',\n'BEF', 'X',\n'BEN', '\
2916 X',\n'BEO', 'X',\n'BEP', 'X',\n'BER', 'X',\n'BES',\
2917  'X',\n'BET', 'X',\n'BEZ', 'X',\n'BF2', 'X',\n'BFA\
2918 ', 'X',\n'BFD', 'X',\n'BFP', 'X',\n'BFS', 'X',\n'B\
2919 FU', 'X',\n'BG6', 'X',\n'BGF', 'X',\n'BGG', 'X',\n\
2920 'BGL', 'X',\n'BGN', 'X',\n'BGP', 'X',\n'BGX', 'X',\
2921 \n'BH4', 'X',\n'BHA', 'X',\n'BHC', 'X',\n'BHD', 'D\
2922 ',\n'BHO', 'X',\n'BHS', 'X',\n'BIC', 'X',\n'BIN', \
2923 'X',\n'BIO', 'X',\n'BIP', 'X',\n'BIS', 'X',\n'BIZ'\
2924 , 'X',\n'BJH', 'X',\n'BJI', 'X',\n'BJP', 'X',\n'BL\
2925 A', 'X',\n'BLB', 'X',\n'BLE', 'L',\n'BLG', 'P',\n'\
2926 BLI', 'X',\n'BLM', 'X',\n'BLV', 'X',\n'BLY', 'K',\\
2927 n'BM1', 'X',\n'BM2', 'X',\n'BM5', 'X',\n'BM9', 'X'\
2928 ,\n'BMA', 'X',\n'BMD', 'X',\n'BME', 'X',\n'BMP', '\
2929 X',\n'BMQ', 'X',\n'BMS', 'X',\n'BMT', 'T',\n'BMU',\
2930  'X',\n'BMY', 'X',\n'BMZ', 'X',\n'BNA', 'X',\n'BNG\
2931 ', 'X',\n'BNI', 'X',\n'BNN', 'F',\n'BNO', 'L',\n'B\
2932 NS', 'X',\n'BNZ', 'X',\n'BO3', 'X',\n'BO4', 'X',\n\
2933 'BOC', 'X',\n'BOG', 'X',\n'BOM', 'X',\n'BOT', 'X',\
2934 \n'BOX', 'X',\n'BOZ', 'X',\n'BPA', 'X',\n'BPB', 'X\
2935 ',\n'BPD', 'X',\n'BPG', 'X',\n'BPH', 'X',\n'BPI', \
2936 'X',\n'BPJ', 'X',\n'BPM', 'X',\n'BPN', 'X',\n'BPO'\
2937 , 'X',\n'BPP', 'X',\n'BPT', 'X',\n'BPY', 'X',\n'BR\
2938 B', 'X',\n'BRC', 'X',\n'BRE', 'X',\n'BRI', 'X',\n'\
2939 BRL', 'X',\n'BRM', 'X',\n'BRN', 'X',\n'BRO', 'X',\\
2940 n'BRS', 'X',\n'BRU', 'X',\n'BRZ', 'X',\n'BSB', 'X'\
2941 ,\n'BSI', 'X',\n'BSP', 'X',\n'BT1', 'X',\n'BT2', '\
2942 X',\n'BT3', 'X',\n'BTA', 'L',\n'BTB', 'X',\n'BTC',\
2943  'C',\n'BTD', 'X',\n'BTN', 'X',\n'BTP', 'X',\n'BTR\
2944 ', 'W',\n'BU1', 'X',\n'BUA', 'X',\n'BUB', 'X',\n'B\
2945 UC', 'X',\n'BUG', 'X',\n'BUL', 'X',\n'BUM', 'X',\n\
2946 'BUQ', 'X',\n'BUT', 'X',\n'BVD', 'X',\n'BX3', 'X',\
2947 \n'BYS', 'X',\n'BZ1', 'X',\n'BZA', 'X',\n'BZB', 'X\
2948 ',\n'BZC', 'X',\n'BZD', 'X',\n'BZF', 'X',\n'BZI', \
2949 'X',\n'BZM', 'X',\n'BZO', 'X',\n'BZP', 'X',\n'BZQ'\
2950 , 'X',\n'BZS', 'X',\n'BZT', 'X',\n'C02', 'X',\n'C1\
2951 1', 'X',\n'C1O', 'X',\n'C20', 'X',\n'C24', 'X',\n'\
2952 C2F', 'X',\n'C2O', 'X',\n'C2P', 'X',\n'C3M', 'X',\\
2953 n'C3P', 'X',\n'C3X', 'X',\n'C48', 'X',\n'C4M', 'X'\
2954 ,\n'C4X', 'X',\n'C5C', 'X',\n'C5M', 'X',\n'C5P', '\
2955 X',\n'C5X', 'X',\n'C60', 'X',\n'C6C', 'X',\n'C6M',\
2956  'X',\n'C78', 'X',\n'C8E', 'X',\n'CA3', 'X',\n'CA5\
2957 ', 'X',\n'CAA', 'X',\n'CAB', 'X',\n'CAC', 'X',\n'C\
2958 AD', 'X',\n'CAF', 'C',\n'CAG', 'X',\n'CAH', 'X',\n\
2959 'CAL', 'X',\n'CAM', 'X',\n'CAN', 'X',\n'CAO', 'X',\
2960 \n'CAP', 'X',\n'CAQ', 'X',\n'CAR', 'X',\n'CAS', 'C\
2961 ',\n'CAT', 'X',\n'CAV', 'X',\n'CAY', 'C',\n'CAZ', \
2962 'X',\n'CB3', 'X',\n'CB4', 'X',\n'CBA', 'X',\n'CBD'\
2963 , 'X',\n'CBG', 'X',\n'CBI', 'X',\n'CBL', 'X',\n'CB\
2964 M', 'X',\n'CBN', 'X',\n'CBO', 'X',\n'CBP', 'X',\n'\
2965 CBS', 'X',\n'CBX', 'X',\n'CBZ', 'X',\n'CC0', 'X',\\
2966 n'CC1', 'X',\n'CCC', 'X',\n'CCH', 'X',\n'CCI', 'X'\
2967 ,\n'CCM', 'X',\n'CCN', 'X',\n'CCO', 'X',\n'CCP', '\
2968 X',\n'CCR', 'X',\n'CCS', 'C',\n'CCV', 'X',\n'CCY',\
2969  'X',\n'CD1', 'X',\n'CDC', 'X',\n'CDE', 'X',\n'CDF\
2970 ', 'X',\n'CDI', 'X',\n'CDL', 'X',\n'CDM', 'X',\n'C\
2971 DP', 'X',\n'CDR', 'X',\n'CDU', 'X',\n'CE1', 'X',\n\
2972 'CEA', 'C',\n'CEB', 'X',\n'CEC', 'X',\n'CED', 'X',\
2973 \n'CEF', 'X',\n'CEH', 'X',\n'CEM', 'X',\n'CEO', 'X\
2974 ',\n'CEP', 'X',\n'CEQ', 'X',\n'CER', 'X',\n'CES', \
2975 'G',\n'CET', 'X',\n'CFC', 'X',\n'CFF', 'X',\n'CFM'\
2976 , 'X',\n'CFO', 'X',\n'CFP', 'X',\n'CFS', 'X',\n'CF\
2977 X', 'X',\n'CGN', 'X',\n'CGP', 'X',\n'CGS', 'X',\n'\
2978 CGU', 'E',\n'CH2', 'X',\n'CH3', 'X',\n'CHA', 'X',\\
2979 n'CHB', 'X',\n'CHD', 'X',\n'CHF', 'X',\n'CHG', 'G'\
2980 ,\n'CHI', 'X',\n'CHN', 'X',\n'CHO', 'X',\n'CHP', '\
2981 G',\n'CHR', 'X',\n'CHS', 'F',\n'CHT', 'X',\n'CHX',\
2982  'X',\n'CIC', 'X',\n'CIN', 'X',\n'CIP', 'X',\n'CIR\
2983 ', 'X',\n'CIT', 'X',\n'CIU', 'X',\n'CKI', 'X',\n'C\
2984 L1', 'X',\n'CL2', 'X',\n'CLA', 'X',\n'CLB', 'A',\n\
2985 'CLC', 'S',\n'CLD', 'A',\n'CLE', 'L',\n'CLF', 'X',\
2986 \n'CLK', 'S',\n'CLL', 'X',\n'CLM', 'X',\n'CLN', 'X\
2987 ',\n'CLO', 'X',\n'CLP', 'X',\n'CLQ', 'X',\n'CLR', \
2988 'X',\n'CLS', 'X',\n'CLT', 'X',\n'CLX', 'X',\n'CLY'\
2989 , 'X',\n'CMA', 'R',\n'CMC', 'X',\n'CMD', 'X',\n'CM\
2990 E', 'C',\n'CMG', 'X',\n'CMK', 'X',\n'CMN', 'X',\n'\
2991 CMO', 'X',\n'CMP', 'X',\n'CMR', 'X',\n'CMS', 'X',\\
2992 n'CMT', 'C',\n'CMX', 'X',\n'CNA', 'X',\n'CNC', 'X'\
2993 ,\n'CND', 'X',\n'CNH', 'X',\n'CNM', 'X',\n'CNN', '\
2994 X',\n'CNO', 'X',\n'CNP', 'X',\n'CO2', 'X',\n'CO3',\
2995  'X',\n'CO5', 'X',\n'CO8', 'X',\n'COA', 'X',\n'COB\
2996 ', 'X',\n'COC', 'X',\n'COD', 'X',\n'COE', 'X',\n'C\
2997 OF', 'X',\n'COH', 'X',\n'COI', 'X',\n'COJ', 'X',\n\
2998 'COL', 'X',\n'COM', 'X',\n'CON', 'X',\n'COP', 'X',\
2999 \n'COR', 'X',\n'COS', 'X',\n'COT', 'X',\n'COY', 'X\
3000 ',\n'CP1', 'G',\n'CP2', 'X',\n'CP4', 'X',\n'CPA', \
3001 'X',\n'CPB', 'X',\n'CPC', 'X',\n'CPD', 'X',\n'CPG'\
3002 , 'X',\n'CPH', 'X',\n'CPI', 'X',\n'CPM', 'X',\n'CP\
3003 N', 'G',\n'CPO', 'X',\n'CPP', 'X',\n'CPQ', 'X',\n'\
3004 CPR', 'X',\n'CPS', 'X',\n'CPT', 'X',\n'CPU', 'X',\\
3005 n'CPV', 'X',\n'CPY', 'X',\n'CR1', 'X',\n'CR6', 'X'\
3006 ,\n'CRA', 'X',\n'CRB', 'X',\n'CRC', 'X',\n'CRG', '\
3007 X',\n'CRH', 'X',\n'CRO', 'T',\n'CRP', 'X',\n'CRQ',\
3008  'X',\n'CRS', 'X',\n'CRT', 'X',\n'CRY', 'X',\n'CSA\
3009 ', 'C',\n'CSB', 'X',\n'CSD', 'C',\n'CSE', 'C',\n'C\
3010 SH', 'X',\n'CSI', 'X',\n'CSN', 'X',\n'CSO', 'C',\n\
3011 'CSP', 'C',\n'CSR', 'C',\n'CSS', 'C',\n'CST', 'X',\
3012 \n'CSW', 'C',\n'CSX', 'C',\n'CSY', 'X',\n'CSZ', 'C\
3013 ',\n'CT3', 'X',\n'CTA', 'X',\n'CTB', 'X',\n'CTC', \
3014 'X',\n'CTD', 'X',\n'CTH', 'T',\n'CTO', 'X',\n'CTP'\
3015 , 'X',\n'CTR', 'X',\n'CTS', 'X',\n'CTT', 'X',\n'CT\
3016 Y', 'X',\n'CTZ', 'X',\n'CU1', 'X',\n'CUA', 'X',\n'\
3017 CUC', 'X',\n'CUL', 'X',\n'CUO', 'X',\n'CUZ', 'X',\\
3018 n'CVI', 'X',\n'CXF', 'X',\n'CXL', 'X',\n'CXM', 'M'\
3019 ,\n'CXN', 'X',\n'CXP', 'X',\n'CXS', 'X',\n'CY1', '\
3020 C',\n'CY3', 'X',\n'CYB', 'X',\n'CYC', 'X',\n'CYF',\
3021  'C',\n'CYG', 'C',\n'CYH', 'X',\n'CYL', 'X',\n'CYM\
3022 ', 'C',\n'CYN', 'X',\n'CYO', 'X',\n'CYP', 'X',\n'C\
3023 YQ', 'C',\n'CYS', 'C',\n'CYU', 'X',\n'CYY', 'X',\n\
3024 'CYZ', 'X',\n'CZH', 'X',\n'CZZ', 'C',\n'D12', 'X',\
3025 \n'D13', 'X',\n'D16', 'X',\n'D18', 'X',\n'D19', 'X\
3026 ',\n'D1P', 'X',\n'D24', 'X',\n'D34', 'X',\n'D35', \
3027 'X',\n'D4D', 'X',\n'D4T', 'X',\n'D6G', 'X',\n'DA2'\
3028 , 'R',\n'DA3', 'X',\n'DA6', 'X',\n'DA7', 'X',\n'DA\
3029 A', 'X',\n'DAB', 'X',\n'DAC', 'X',\n'DAD', 'X',\n'\
3030 DAE', 'X',\n'DAF', 'X',\n'DAG', 'X',\n'DAH', 'A',\\
3031 n'DAJ', 'X',\n'DAK', 'X',\n'DAL', 'A',\n'DAM', 'A'\
3032 ,\n'DAN', 'X',\n'DAO', 'X',\n'DAP', 'X',\n'DAQ', '\
3033 X',\n'DAR', 'R',\n'DAS', 'D',\n'DAT', 'X',\n'DAU',\
3034  'X',\n'DAV', 'X',\n'DBA', 'X',\n'DBD', 'X',\n'DBF\
3035 ', 'X',\n'DBG', 'X',\n'DBI', 'X',\n'DBV', 'X',\n'D\
3036 BY', 'Y',\n'DCA', 'X',\n'DCB', 'X',\n'DCE', 'X',\n\
3037 'DCF', 'X',\n'DCG', 'X',\n'DCH', 'X',\n'DCI', 'I',\
3038 \n'DCL', 'X',\n'DCM', 'X',\n'DCP', 'X',\n'DCS', 'X\
3039 ',\n'DCT', 'X',\n'DCY', 'C',\n'DCZ', 'X',\n'DDA', \
3040 'X',\n'DDB', 'X',\n'DDC', 'X',\n'DDF', 'X',\n'DDG'\
3041 , 'X',\n'DDH', 'X',\n'DDL', 'X',\n'DDM', 'X',\n'DD\
3042 O', 'L',\n'DDP', 'X',\n'DDQ', 'X',\n'DDT', 'Y',\n'\
3043 DDU', 'X',\n'DEA', 'X',\n'DEB', 'X',\n'DEC', 'X',\\
3044 n'DEF', 'X',\n'DEL', 'X',\n'DEM', 'X',\n'DEN', 'X'\
3045 ,\n'DEP', 'X',\n'DEQ', 'X',\n'DES', 'X',\n'DET', '\
3046 X',\n'DFC', 'X',\n'DFG', 'X',\n'DFI', 'X',\n'DFL',\
3047  'X',\n'DFO', 'X',\n'DFP', 'X',\n'DFR', 'X',\n'DFT\
3048 ', 'X',\n'DFV', 'X',\n'DFX', 'X',\n'DG2', 'X',\n'D\
3049 G3', 'X',\n'DG6', 'X',\n'DGA', 'X',\n'DGD', 'X',\n\
3050 'DGG', 'X',\n'DGL', 'E',\n'DGN', 'Q',\n'DGP', 'X',\
3051 \n'DGT', 'X',\n'DGX', 'X',\n'DH2', 'X',\n'DHA', 'A\
3052 ',\n'DHB', 'X',\n'DHC', 'X',\n'DHD', 'X',\n'DHE', \
3053 'X',\n'DHF', 'X',\n'DHG', 'X',\n'DHI', 'H',\n'DHL'\
3054 , 'X',\n'DHM', 'X',\n'DHN', 'V',\n'DHP', 'X',\n'DH\
3055 Q', 'X',\n'DHR', 'X',\n'DHS', 'X',\n'DHT', 'X',\n'\
3056 DHU', 'X',\n'DHY', 'X',\n'DHZ', 'X',\n'DI2', 'X',\\
3057 n'DI3', 'G',\n'DI4', 'X',\n'DI5', 'X',\n'DIA', 'X'\
3058 ,\n'DIC', 'X',\n'DIF', 'X',\n'DIG', 'X',\n'DII', '\
3059 X',\n'DIL', 'I',\n'DIM', 'X',\n'DIO', 'X',\n'DIP',\
3060  'X',\n'DIQ', 'X',\n'DIS', 'X',\n'DIT', 'X',\n'DIV\
3061 ', 'V',\n'DIX', 'X',\n'DIY', 'X',\n'DKA', 'X',\n'D\
3062 LA', 'X',\n'DLE', 'L',\n'DLF', 'X',\n'DLS', 'K',\n\
3063 'DLY', 'K',\n'DM1', 'X',\n'DM2', 'X',\n'DM3', 'X',\
3064 \n'DM4', 'X',\n'DM5', 'X',\n'DM6', 'X',\n'DM7', 'X\
3065 ',\n'DM8', 'X',\n'DM9', 'X',\n'DMA', 'X',\n'DMB', \
3066 'X',\n'DMC', 'X',\n'DMD', 'X',\n'DME', 'X',\n'DMF'\
3067 , 'X',\n'DMG', 'G',\n'DMH', 'N',\n'DMI', 'X',\n'DM\
3068 J', 'X',\n'DML', 'X',\n'DMM', 'X',\n'DMN', 'X',\n'\
3069 DMO', 'X',\n'DMP', 'X',\n'DMQ', 'X',\n'DMR', 'X',\\
3070 n'DMS', 'X',\n'DMT', 'X',\n'DMV', 'X',\n'DMY', 'X'\
3071 ,\n'DNC', 'X',\n'DND', 'X',\n'DNH', 'X',\n'DNJ', '\
3072 X',\n'DNN', 'X',\n'DNP', 'X',\n'DNQ', 'X',\n'DNR',\
3073  'X',\n'DO2', 'X',\n'DO3', 'X',\n'DOA', 'X',\n'DOB\
3074 ', 'X',\n'DOC', 'X',\n'DOH', 'D',\n'DOM', 'X',\n'D\
3075 OS', 'X',\n'DOX', 'X',\n'DP5', 'X',\n'DP7', 'X',\n\
3076 'DPA', 'X',\n'DPC', 'X',\n'DPD', 'X',\n'DPE', 'X',\
3077 \n'DPG', 'X',\n'DPH', 'F',\n'DPM', 'X',\n'DPN', 'F\
3078 ',\n'DPO', 'X',\n'DPP', 'X',\n'DPR', 'P',\n'DPS', \
3079 'X',\n'DPT', 'X',\n'DPX', 'X',\n'DPY', 'X',\n'DPZ'\
3080 , 'X',\n'DQH', 'X',\n'DQN', 'X',\n'DR1', 'X',\n'DR\
3081 B', 'X',\n'DRC', 'X',\n'DRI', 'X',\n'DRP', 'X',\n'\
3082 DRT', 'X',\n'DRU', 'X',\n'DSA', 'X',\n'DSB', 'X',\\
3083 n'DSC', 'X',\n'DSD', 'X',\n'DSE', 'S',\n'DSI', 'X'\
3084 ,\n'DSN', 'S',\n'DSP', 'D',\n'DSR', 'X',\n'DSS', '\
3085 X',\n'DSX', 'X',\n'DSY', 'X',\n'DTB', 'X',\n'DTD',\
3086  'X',\n'DTH', 'T',\n'DTN', 'X',\n'DTO', 'X',\n'DTP\
3087 ', 'X',\n'DTQ', 'X',\n'DTR', 'W',\n'DTT', 'X',\n'D\
3088 TY', 'Y',\n'DUD', 'X',\n'DUO', 'X',\n'DUR', 'X',\n\
3089 'DUT', 'X',\n'DVA', 'V',\n'DVR', 'X',\n'DX9', 'X',\
3090 \n'DXA', 'X',\n'DXB', 'X',\n'DXC', 'X',\n'DXG', 'X\
3091 ',\n'DXX', 'X',\n'DZF', 'X',\n'E09', 'X',\n'E20', \
3092 'X',\n'E2P', 'X',\n'E3G', 'X',\n'E4N', 'X',\n'E4P'\
3093 , 'X',\n'E64', 'X',\n'E6C', 'X',\n'E96', 'X',\n'E9\
3094 7', 'X',\n'EA2', 'X',\n'EAA', 'X',\n'EAP', 'X',\n'\
3095 EBP', 'X',\n'EBW', 'X',\n'ECO', 'X',\n'EDA', 'X',\\
3096 n'EDC', 'X',\n'EDE', 'X',\n'EDO', 'X',\n'EDR', 'X'\
3097 ,\n'EEB', 'X',\n'EEE', 'X',\n'EFC', 'X',\n'EFZ', '\
3098 X',\n'EG1', 'X',\n'EG2', 'X',\n'EG3', 'X',\n'EGC',\
3099  'X',\n'EGL', 'X',\n'EHP', 'A',\n'EIC', 'X',\n'EJT\
3100 ', 'X',\n'ELA', 'X',\n'EMB', 'X',\n'EMC', 'X',\n'E\
3101 MD', 'X',\n'EMM', 'X',\n'EMO', 'X',\n'EMP', 'X',\n\
3102 'EMR', 'X',\n'ENA', 'X',\n'ENC', 'X',\n'ENH', 'X',\
3103 \n'ENO', 'X',\n'ENP', 'X',\n'EOA', 'X',\n'EOH', 'X\
3104 ',\n'EOT', 'X',\n'EOX', 'X',\n'EPA', 'X',\n'EPE', \
3105 'X',\n'EPH', 'X',\n'EPI', 'X',\n'EPN', 'X',\n'EPO'\
3106 , 'X',\n'EPT', 'X',\n'EPU', 'X',\n'EPX', 'X',\n'EP\
3107 Y', 'X',\n'EQI', 'X',\n'EQP', 'X',\n'EQU', 'X',\n'\
3108 ERG', 'X',\n'ERI', 'X',\n'ERY', 'X',\n'ESC', 'X',\\
3109 n'ESD', 'X',\n'ESI', 'X',\n'ESO', 'X',\n'ESP', 'X'\
3110 ,\n'EST', 'X',\n'ESX', 'X',\n'ETA', 'X',\n'ETC', '\
3111 X',\n'ETD', 'X',\n'ETF', 'X',\n'ETH', 'X',\n'ETI',\
3112  'X',\n'ETN', 'X',\n'ETO', 'X',\n'ETP', 'X',\n'ETR\
3113 ', 'X',\n'ETS', 'X',\n'ETY', 'X',\n'EU3', 'X',\n'E\
3114 UG', 'X',\n'EYS', 'C',\n'F09', 'X',\n'F2B', 'X',\n\
3115 'F3S', 'X',\n'F42', 'X',\n'F43', 'X',\n'F4S', 'X',\
3116 \n'F6B', 'X',\n'F6P', 'X',\n'F89', 'X',\n'FA1', 'X\
3117 ',\n'FA5', 'F',\n'FAA', 'X',\n'FAB', 'X',\n'FAC', \
3118 'X',\n'FAD', 'X',\n'FAF', 'X',\n'FAG', 'X',\n'FAM'\
3119 , 'X',\n'FAR', 'X',\n'FAS', 'X',\n'FAT', 'X',\n'FB\
3120 A', 'X',\n'FBE', 'X',\n'FBI', 'X',\n'FBP', 'X',\n'\
3121 FBQ', 'X',\n'FBS', 'X',\n'FBT', 'X',\n'FBU', 'X',\\
3122 n'FCA', 'X',\n'FCB', 'X',\n'FCI', 'X',\n'FCN', 'X'\
3123 ,\n'FCO', 'X',\n'FCR', 'X',\n'FCT', 'X',\n'FCX', '\
3124 X',\n'FCY', 'C',\n'FD1', 'F',\n'FD2', 'F',\n'FD3',\
3125  'F',\n'FD4', 'F',\n'FDA', 'X',\n'FDC', 'X',\n'FDI\
3126 ', 'X',\n'FDP', 'X',\n'FDS', 'X',\n'FE2', 'X',\n'F\
3127 EA', 'X',\n'FEL', 'X',\n'FEM', 'X',\n'FEN', 'X',\n\
3128 'FEO', 'X',\n'FEP', 'X',\n'FER', 'X',\n'FES', 'X',\
3129 \n'FFB', 'X',\n'FFC', 'X',\n'FFF', 'X',\n'FFO', 'X\
3130 ',\n'FGL', 'G',\n'FHB', 'X',\n'FHC', 'X',\n'FHP', \
3131 'X',\n'FHU', 'X',\n'FID', 'X',\n'FII', 'X',\n'FIP'\
3132 , 'X',\n'FK5', 'X',\n'FKA', 'X',\n'FKI', 'X',\n'FK\
3133 P', 'X',\n'FL2', 'X',\n'FL9', 'X',\n'FLA', 'A',\n'\
3134 FLC', 'X',\n'FLD', 'X',\n'FLE', 'L',\n'FLF', 'X',\\
3135 n'FLO', 'X',\n'FLP', 'X',\n'FLT', 'Y',\n'FLU', 'X'\
3136 ,\n'FLX', 'X',\n'FM1', 'X',\n'FM2', 'X',\n'FMA', '\
3137 X',\n'FMB', 'X',\n'FMC', 'X',\n'FME', 'M',\n'FMN',\
3138  'X',\n'FMP', 'X',\n'FMR', 'X',\n'FMS', 'X',\n'FMT\
3139 ', 'X',\n'FNE', 'X',\n'FNP', 'X',\n'FNS', 'X',\n'F\
3140 OC', 'X',\n'FOE', 'X',\n'FOG', 'F',\n'FOH', 'X',\n\
3141 'FOK', 'X',\n'FOL', 'X',\n'FON', 'X',\n'FOP', 'X',\
3142 \n'FOR', 'X',\n'FOS', 'X',\n'FPA', 'X',\n'FPC', 'X\
3143 ',\n'FPI', 'X',\n'FPO', 'X',\n'FPP', 'X',\n'FPT', \
3144 'X',\n'FQP', 'X',\n'FRA', 'X',\n'FRD', 'F',\n'FRU'\
3145 , 'X',\n'FS3', 'X',\n'FS4', 'X',\n'FSB', 'X',\n'FS\
3146 O', 'X',\n'FSX', 'X',\n'FTC', 'X',\n'FTP', 'X',\n'\
3147 FTR', 'W',\n'FTT', 'X',\n'FTY', 'Y',\n'FUA', 'X',\\
3148 n'FUC', 'X',\n'FUM', 'X',\n'FUP', 'X',\n'FVF', 'X'\
3149 ,\n'FXP', 'X',\n'FXV', 'X',\n'FYA', 'F',\n'G16', '\
3150 X',\n'G1P', 'X',\n'G20', 'X',\n'G21', 'X',\n'G23',\
3151  'X',\n'G26', 'X',\n'G28', 'X',\n'G2F', 'X',\n'G37\
3152 ', 'X',\n'G39', 'X',\n'G3H', 'X',\n'G3P', 'X',\n'G\
3153 4D', 'X',\n'G6D', 'X',\n'G6P', 'X',\n'G6Q', 'X',\n\
3154 'G7M', 'X',\n'GA2', 'X',\n'GAA', 'X',\n'GAB', 'X',\
3155 \n'GAC', 'X',\n'GAI', 'X',\n'GAL', 'X',\n'GAM', 'X\
3156 ',\n'GAN', 'X',\n'GAO', 'X',\n'GAP', 'X',\n'GAR', \
3157 'G',\n'GAS', 'X',\n'GAT', 'X',\n'GBC', 'X',\n'GBI'\
3158 , 'X',\n'GBP', 'X',\n'GBS', 'X',\n'GBX', 'X',\n'GC\
3159 4', 'X',\n'GCA', 'X',\n'GCD', 'X',\n'GCG', 'G',\n'\
3160 GCH', 'G',\n'GCK', 'X',\n'GCL', 'X',\n'GCM', 'X',\\
3161 n'GCN', 'X',\n'GCO', 'X',\n'GCP', 'X',\n'GCR', 'X'\
3162 ,\n'GCS', 'X',\n'GCU', 'X',\n'GD3', 'X',\n'GDB', '\
3163 X',\n'GDM', 'X',\n'GDN', 'X',\n'GDP', 'X',\n'GDS',\
3164  'X',\n'GDU', 'X',\n'GE1', 'X',\n'GE2', 'X',\n'GE3\
3165 ', 'X',\n'GEA', 'X',\n'GEL', 'X',\n'GEM', 'X',\n'G\
3166 EN', 'X',\n'GEP', 'X',\n'GER', 'X',\n'GFP', 'X',\n\
3167 'GGB', 'X',\n'GGL', 'E',\n'GGP', 'X',\n'GHP', 'G',\
3168 \n'GIP', 'X',\n'GIS', 'X',\n'GKR', 'X',\n'GL2', 'X\
3169 ',\n'GL3', 'G',\n'GL4', 'X',\n'GL5', 'X',\n'GL7', \
3170 'X',\n'GL9', 'X',\n'GLA', 'X',\n'GLB', 'X',\n'GLC'\
3171 , 'X',\n'GLD', 'X',\n'GLE', 'X',\n'GLF', 'X',\n'GL\
3172 G', 'X',\n'GLH', 'Q',\n'GLI', 'X',\n'GLL', 'X',\n'\
3173 GLM', 'G',\n'GLN', 'Q',\n'GLO', 'X',\n'GLP', 'X',\\
3174 n'GLR', 'X',\n'GLS', 'X',\n'GLT', 'X',\n'GLU', 'E'\
3175 ,\n'GLV', 'X',\n'GLW', 'X',\n'GLY', 'G',\n'GLZ', '\
3176 X',\n'GM1', 'X',\n'GMA', 'X',\n'GMC', 'X',\n'GMH',\
3177  'X',\n'GMP', 'X',\n'GMY', 'X',\n'GN7', 'X',\n'GNA\
3178 ', 'X',\n'GNB', 'X',\n'GNH', 'X',\n'GNP', 'X',\n'G\
3179 NT', 'X',\n'GOA', 'X',\n'GOL', 'X',\n'GOX', 'X',\n\
3180 'GP1', 'X',\n'GP3', 'X',\n'GP4', 'X',\n'GP6', 'X',\
3181 \n'GP8', 'X',\n'GPB', 'E',\n'GPC', 'X',\n'GPE', 'X\
3182 ',\n'GPG', 'X',\n'GPI', 'X',\n'GPJ', 'X',\n'GPL', \
3183 'K',\n'GPM', 'X',\n'GPN', 'G',\n'GPP', 'X',\n'GPR'\
3184 , 'X',\n'GPS', 'X',\n'GPX', 'X',\n'GR1', 'X',\n'GR\
3185 3', 'X',\n'GR4', 'X',\n'GSA', 'X',\n'GSB', 'X',\n'\
3186 GSC', 'G',\n'GSE', 'S',\n'GSH', 'X',\n'GSP', 'X',\\
3187 n'GSR', 'X',\n'GSS', 'X',\n'GT9', 'C',\n'GTA', 'X'\
3188 ,\n'GTB', 'X',\n'GTD', 'X',\n'GTE', 'X',\n'GTH', '\
3189 T',\n'GTN', 'X',\n'GTO', 'X',\n'GTP', 'X',\n'GTR',\
3190  'X',\n'GTS', 'X',\n'GTT', 'X',\n'GTX', 'X',\n'GTZ\
3191 ', 'X',\n'GU7', 'X',\n'GUA', 'X',\n'GUD', 'X',\n'G\
3192 UM', 'X',\n'GUN', 'X',\n'GUP', 'X',\n'GUR', 'X',\n\
3193 'GW3', 'X',\n'GZZ', 'X',\n'H2B', 'X',\n'H2P', 'H',\
3194 \n'H2S', 'X',\n'H2U', 'X',\n'H4B', 'X',\n'H5M', 'P\
3195 ',\n'H5P', 'X',\n'HAA', 'X',\n'HAB', 'X',\n'HAC', \
3196 'A',\n'HAD', 'X',\n'HAE', 'X',\n'HAG', 'X',\n'HAI'\
3197 , 'X',\n'HAM', 'X',\n'HAP', 'X',\n'HAQ', 'X',\n'HA\
3198 R', 'R',\n'HAS', 'X',\n'HAV', 'V',\n'HAX', 'X',\n'\
3199 HAZ', 'X',\n'HBA', 'X',\n'HBC', 'X',\n'HBD', 'X',\\
3200 n'HBI', 'X',\n'HBO', 'X',\n'HBU', 'X',\n'HBY', 'X'\
3201 ,\n'HC0', 'X',\n'HC1', 'X',\n'HC4', 'X',\n'HCA', '\
3202 X',\n'HCC', 'X',\n'HCI', 'X',\n'HCS', 'X',\n'HDA',\
3203  'X',\n'HDD', 'X',\n'HDF', 'X',\n'HDN', 'X',\n'HDS\
3204 ', 'X',\n'HDZ', 'X',\n'HE1', 'X',\n'HE6', 'X',\n'H\
3205 EA', 'X',\n'HEB', 'X',\n'HEC', 'X',\n'HED', 'X',\n\
3206 'HEE', 'X',\n'HEF', 'X',\n'HEG', 'X',\n'HEM', 'X',\
3207 \n'HEN', 'X',\n'HEO', 'X',\n'HEP', 'X',\n'HEU', 'X\
3208 ',\n'HEV', 'X',\n'HEX', 'X',\n'HEZ', 'X',\n'HF1', \
3209 'X',\n'HFA', 'X',\n'HFP', 'X',\n'HGA', 'Q',\n'HGB'\
3210 , 'X',\n'HGC', 'X',\n'HGI', 'X',\n'HGU', 'X',\n'HH\
3211 O', 'X',\n'HHP', 'X',\n'HIB', 'X',\n'HIC', 'H',\n'\
3212 HII', 'X',\n'HIN', 'X',\n'HIO', 'X',\n'HIP', 'H',\\
3213 n'HIS', 'H',\n'HLE', 'X',\n'HLT', 'X',\n'HMA', 'A'\
3214 ,\n'HMB', 'X',\n'HMC', 'X',\n'HMD', 'X',\n'HMF', '\
3215 A',\n'HMG', 'X',\n'HMH', 'X',\n'HMI', 'L',\n'HMM',\
3216  'X',\n'HMN', 'X',\n'HMO', 'X',\n'HMP', 'X',\n'HMR\
3217 ', 'R',\n'HNI', 'X',\n'HNP', 'X',\n'HOA', 'X',\n'H\
3218 OE', 'X',\n'HOH', 'X',\n'HOM', 'X',\n'HOP', 'X',\n\
3219 'HOQ', 'X',\n'HP1', 'A',\n'HP2', 'A',\n'HP3', 'X',\
3220 \n'HPA', 'X',\n'HPB', 'X',\n'HPC', 'X',\n'HPD', 'X\
3221 ',\n'HPE', 'A',\n'HPG', 'X',\n'HPH', 'F',\n'HPP', \
3222 'X',\n'HPQ', 'F',\n'HPR', 'X',\n'HPT', 'X',\n'HPY'\
3223 , 'X',\n'HQO', 'X',\n'HQQ', 'X',\n'HQU', 'X',\n'HR\
3224 G', 'R',\n'HRI', 'X',\n'HSA', 'X',\n'HSE', 'S',\n'\
3225 HSF', 'X',\n'HSM', 'X',\n'HSO', 'H',\n'HSP', 'X',\\
3226 n'HT1', 'X',\n'HT2', 'X',\n'HTA', 'X',\n'HTL', 'X'\
3227 ,\n'HTO', 'X',\n'HTP', 'X',\n'HTR', 'W',\n'HUP', '\
3228 X',\n'HUX', 'X',\n'HV5', 'A',\n'HV7', 'X',\n'HV8',\
3229  'X',\n'HXA', 'X',\n'HXC', 'X',\n'HXP', 'X',\n'HY1\
3230 ', 'X',\n'HYA', 'X',\n'HYB', 'X',\n'HYD', 'X',\n'H\
3231 YG', 'X',\n'HYP', 'P',\n'I06', 'X',\n'I10', 'X',\n\
3232 'I11', 'X',\n'I17', 'X',\n'I2P', 'X',\n'I3N', 'X',\
3233 \n'I3P', 'X',\n'I40', 'X',\n'I48', 'X',\n'I4B', 'X\
3234 ',\n'I52', 'X',\n'I5P', 'X',\n'I84', 'G',\n'IAG', \
3235 'G',\n'IAS', 'X',\n'IB2', 'X',\n'IBB', 'X',\n'IBP'\
3236 , 'X',\n'IBR', 'X',\n'IBS', 'X',\n'IBZ', 'X',\n'IC\
3237 1', 'X',\n'ICA', 'X',\n'ICI', 'X',\n'ICL', 'X',\n'\
3238 ICP', 'X',\n'ICT', 'X',\n'ICU', 'X',\n'ID2', 'X',\\
3239 n'IDC', 'X',\n'IDG', 'X',\n'IDH', 'X',\n'IDM', 'X'\
3240 ,\n'IDO', 'X',\n'IDP', 'X',\n'IDR', 'X',\n'IDS', '\
3241 X',\n'IDT', 'X',\n'IDU', 'X',\n'IFG', 'X',\n'IFP',\
3242  'X',\n'IGL', 'X',\n'IGN', 'X',\n'IGP', 'X',\n'IGU\
3243 ', 'X',\n'IH1', 'X',\n'IH2', 'X',\n'IH3', 'X',\n'I\
3244 HB', 'X',\n'IHN', 'X',\n'IHP', 'X',\n'IIC', 'X',\n\
3245 'IIL', 'I',\n'IIP', 'X',\n'IK2', 'X',\n'IKT', 'X',\
3246 \n'ILA', 'I',\n'ILE', 'I',\n'ILG', 'X',\n'ILO', 'X\
3247 ',\n'ILX', 'I',\n'IM1', 'X',\n'IM2', 'X',\n'IMC', \
3248 'X',\n'IMD', 'X',\n'IME', 'X',\n'IMF', 'X',\n'IMG'\
3249 , 'X',\n'IMH', 'X',\n'IMI', 'X',\n'IML', 'I',\n'IM\
3250 M', 'X',\n'IMN', 'X',\n'IMO', 'X',\n'IMP', 'X',\n'\
3251 IMR', 'X',\n'IMU', 'X',\n'IN0', 'D',\n'IN1', 'R',\\
3252 n'IN2', 'K',\n'IN3', 'L',\n'IN4', 'X',\n'IN5', 'A'\
3253 ,\n'IN6', 'L',\n'IN7', 'X',\n'IN8', 'X',\n'IN9', '\
3254 X',\n'INA', 'L',\n'INB', 'X',\n'INC', 'X',\n'IND',\
3255  'X',\n'INE', 'X',\n'INF', 'F',\n'ING', 'F',\n'INH\
3256 ', 'R',\n'INI', 'X',\n'INJ', 'X',\n'INK', 'X',\n'I\
3257 NL', 'X',\n'INM', 'X',\n'INN', 'A',\n'INO', 'X',\n\
3258 'INP', 'X',\n'INQ', 'X',\n'INR', 'X',\n'INS', 'X',\
3259 \n'INT', 'V',\n'INU', 'X',\n'INV', 'X',\n'INW', 'X\
3260 ',\n'INX', 'X',\n'INY', 'X',\n'INZ', 'X',\n'IOA', \
3261 'X',\n'IOB', 'X',\n'IOC', 'X',\n'IOD', 'X',\n'IOE'\
3262 , 'X',\n'IOF', 'X',\n'IOH', 'X',\n'IOL', 'X',\n'IO\
3263 P', 'X',\n'IP1', 'X',\n'IP2', 'X',\n'IP3', 'X',\n'\
3264 IP4', 'X',\n'IPA', 'X',\n'IPB', 'X',\n'IPD', 'X',\\
3265 n'IPG', 'G',\n'IPH', 'X',\n'IPL', 'X',\n'IPM', 'X'\
3266 ,\n'IPN', 'X',\n'IPO', 'F',\n'IPP', 'X',\n'IPS', '\
3267 X',\n'IPT', 'X',\n'IPU', 'X',\n'IPY', 'A',\n'IQB',\
3268  'X',\n'IQP', 'X',\n'IQS', 'X',\n'IR3', 'X',\n'IRI\
3269 ', 'X',\n'IRP', 'X',\n'ISA', 'X',\n'ISF', 'X',\n'I\
3270 SO', 'X',\n'ISP', 'X',\n'ISQ', 'X',\n'ISU', 'X',\n\
3271 'ITM', 'X',\n'ITP', 'X',\n'ITR', 'W',\n'ITS', 'X',\
3272 \n'ITU', 'X',\n'IU5', 'X',\n'IUM', 'X',\n'IUR', 'X\
3273 ',\n'IVA', 'X',\n'IYG', 'G',\n'IYR', 'Y',\n'J77', \
3274 'X',\n'J78', 'X',\n'J80', 'X',\n'JE2', 'X',\n'JEN'\
3275 , 'X',\n'JST', 'X',\n'K21', 'X',\n'KAH', 'X',\n'KA\
3276 I', 'X',\n'KAM', 'X',\n'KAN', 'X',\n'KAP', 'X',\n'\
3277 KCP', 'X',\n'KCX', 'K',\n'KDO', 'X',\n'KEF', 'X',\\
3278 n'KET', 'X',\n'KGR', 'X',\n'KH1', 'X',\n'KIF', 'X'\
3279 ,\n'KIV', 'V',\n'KNI', 'X',\n'KPH', 'K',\n'KTH', '\
3280 X',\n'KTN', 'X',\n'KTP', 'X',\n'KWT', 'X',\n'L04',\
3281  'X',\n'L1P', 'X',\n'L24', 'E',\n'L2P', 'X',\n'L34\
3282 ', 'E',\n'L37', 'E',\n'L3P', 'X',\n'L4P', 'X',\n'L\
3283 75', 'X',\n'LAC', 'X',\n'LAD', 'X',\n'LAK', 'X',\n\
3284 'LAM', 'X',\n'LAR', 'X',\n'LAT', 'X',\n'LAX', 'X',\
3285 \n'LCO', 'X',\n'LCP', 'X',\n'LCS', 'X',\n'LDA', 'X\
3286 ',\n'LDO', 'L',\n'LDP', 'X',\n'LEA', 'X',\n'LEO', \
3287 'X',\n'LEU', 'L',\n'LG2', 'X',\n'LG6', 'X',\n'LGC'\
3288 , 'X',\n'LGP', 'X',\n'LHG', 'X',\n'LHY', 'F',\n'LI\
3289 1', 'X',\n'LIG', 'X',\n'LIL', 'X',\n'LIM', 'X',\n'\
3290 LIN', 'X',\n'LIO', 'X',\n'LIP', 'X',\n'LLA', 'X',\\
3291 n'LLP', 'K',\n'LLY', 'K',\n'LMG', 'X',\n'LML', 'X'\
3292 ,\n'LMT', 'X',\n'LMU', 'X',\n'LMZ', 'X',\n'LNK', '\
3293 X',\n'LNL', 'X',\n'LNO', 'X',\n'LOF', 'X',\n'LOL',\
3294  'L',\n'LOM', 'X',\n'LOR', 'X',\n'LOS', 'X',\n'LOV\
3295 ', 'L',\n'LOX', 'X',\n'LP1', 'X',\n'LP2', 'R',\n'L\
3296 PA', 'X',\n'LPC', 'X',\n'LPF', 'X',\n'LPL', 'X',\n\
3297 'LPM', 'X',\n'LPP', 'X',\n'LRB', 'X',\n'LRU', 'X',\
3298 \n'LS1', 'X',\n'LS2', 'X',\n'LS3', 'X',\n'LS4', 'X\
3299 ',\n'LS5', 'X',\n'LTA', 'X',\n'LTL', 'X',\n'LTR', \
3300 'W',\n'LUM', 'X',\n'LVS', 'L',\n'LXC', 'X',\n'LY2'\
3301 , 'X',\n'LY3', 'X',\n'LYA', 'X',\n'LYB', 'X',\n'LY\
3302 C', 'X',\n'LYD', 'X',\n'LYM', 'K',\n'LYN', 'X',\n'\
3303 LYS', 'K',\n'LYT', 'X',\n'LYW', 'X',\n'LYZ', 'K',\\
3304 n'M1A', 'X',\n'M1G', 'X',\n'M2G', 'X',\n'M3L', 'K'\
3305 ,\n'M6P', 'X',\n'M6T', 'X',\n'M7G', 'X',\n'MA1', '\
3306 X',\n'MA2', 'X',\n'MA3', 'X',\n'MA4', 'X',\n'MA6',\
3307  'X',\n'MAA', 'A',\n'MAB', 'X',\n'MAC', 'X',\n'MAE\
3308 ', 'X',\n'MAG', 'X',\n'MAH', 'X',\n'MAI', 'R',\n'M\
3309 AK', 'X',\n'MAL', 'X',\n'MAM', 'X',\n'MAN', 'X',\n\
3310 'MAO', 'X',\n'MAP', 'X',\n'MAR', 'X',\n'MAS', 'X',\
3311 \n'MAT', 'X',\n'MAU', 'X',\n'MAZ', 'X',\n'MBA', 'X\
3312 ',\n'MBD', 'X',\n'MBG', 'X',\n'MBH', 'X',\n'MBN', \
3313 'X',\n'MBO', 'X',\n'MBR', 'X',\n'MBS', 'X',\n'MBV'\
3314 , 'X',\n'MBZ', 'X',\n'MCA', 'X',\n'MCD', 'X',\n'MC\
3315 E', 'X',\n'MCG', 'G',\n'MCI', 'X',\n'MCN', 'X',\n'\
3316 MCP', 'X',\n'MCT', 'X',\n'MCY', 'X',\n'MD2', 'X',\\
3317 n'MDA', 'X',\n'MDC', 'X',\n'MDG', 'X',\n'MDH', 'X'\
3318 ,\n'MDL', 'X',\n'MDM', 'X',\n'MDN', 'X',\n'MDP', '\
3319 X',\n'ME6', 'X',\n'MEB', 'X',\n'MEC', 'X',\n'MEL',\
3320  'X',\n'MEN', 'N',\n'MEP', 'X',\n'MER', 'X',\n'MES\
3321 ', 'X',\n'MET', 'M',\n'MEV', 'X',\n'MF2', 'X',\n'M\
3322 F3', 'M',\n'MFB', 'X',\n'MFD', 'X',\n'MFU', 'X',\n\
3323 'MG7', 'X',\n'MGA', 'X',\n'MGB', 'X',\n'MGD', 'X',\
3324 \n'MGG', 'R',\n'MGL', 'X',\n'MGN', 'Q',\n'MGO', 'X\
3325 ',\n'MGP', 'X',\n'MGR', 'X',\n'MGS', 'X',\n'MGT', \
3326 'X',\n'MGU', 'X',\n'MGY', 'G',\n'MHB', 'X',\n'MHF'\
3327 , 'X',\n'MHL', 'L',\n'MHM', 'X',\n'MHO', 'M',\n'MH\
3328 S', 'H',\n'MHZ', 'X',\n'MIA', 'X',\n'MIC', 'X',\n'\
3329 MID', 'X',\n'MIL', 'X',\n'MIM', 'X',\n'MIN', 'G',\\
3330 n'MIP', 'X',\n'MIS', 'S',\n'MIT', 'X',\n'MJI', 'X'\
3331 ,\n'MK1', 'X',\n'MKC', 'X',\n'MLA', 'X',\n'MLC', '\
3332 X',\n'MLE', 'L',\n'MLN', 'X',\n'MLT', 'X',\n'MLY',\
3333  'K',\n'MLZ', 'K',\n'MM3', 'X',\n'MM4', 'X',\n'MMA\
3334 ', 'X',\n'MMC', 'X',\n'MME', 'M',\n'MMO', 'R',\n'M\
3335 MP', 'X',\n'MMQ', 'X',\n'MMT', 'X',\n'MN1', 'X',\n\
3336 'MN2', 'X',\n'MN3', 'X',\n'MN5', 'X',\n'MN7', 'X',\
3337 \n'MN8', 'X',\n'MNA', 'X',\n'MNB', 'X',\n'MNC', 'X\
3338 ',\n'MNG', 'X',\n'MNL', 'L',\n'MNO', 'X',\n'MNP', \
3339 'X',\n'MNQ', 'X',\n'MNS', 'X',\n'MNT', 'X',\n'MNV'\
3340 , 'V',\n'MO1', 'X',\n'MO2', 'X',\n'MO3', 'X',\n'MO\
3341 4', 'X',\n'MO5', 'X',\n'MO6', 'X',\n'MOA', 'X',\n'\
3342 MOB', 'X',\n'MOC', 'X',\n'MOE', 'X',\n'MOG', 'X',\\
3343 n'MOH', 'X',\n'MOL', 'X',\n'MOO', 'X',\n'MOP', 'X'\
3344 ,\n'MOR', 'X',\n'MOS', 'X',\n'MOT', 'X',\n'MOX', '\
3345 X',\n'MP1', 'X',\n'MP3', 'X',\n'MPA', 'X',\n'MPB',\
3346  'X',\n'MPC', 'X',\n'MPD', 'X',\n'MPG', 'X',\n'MPH\
3347 ', 'M',\n'MPI', 'X',\n'MPJ', 'M',\n'MPL', 'X',\n'M\
3348 PN', 'X',\n'MPO', 'X',\n'MPP', 'X',\n'MPQ', 'G',\n\
3349 'MPR', 'X',\n'MPS', 'X',\n'MQ0', 'X',\n'MQ7', 'X',\
3350 \n'MQ8', 'X',\n'MQ9', 'X',\n'MQI', 'X',\n'MR2', 'X\
3351 ',\n'MRC', 'X',\n'MRM', 'X',\n'MRP', 'X',\n'MS2', \
3352 'X',\n'MSA', 'X',\n'MSB', 'X',\n'MSD', 'X',\n'MSE'\
3353 , 'M',\n'MSF', 'X',\n'MSI', 'X',\n'MSO', 'M',\n'MS\
3354 Q', 'X',\n'MST', 'X',\n'MSU', 'X',\n'MTA', 'X',\n'\
3355 MTB', 'X',\n'MTC', 'X',\n'MTD', 'X',\n'MTE', 'X',\\
3356 n'MTF', 'X',\n'MTG', 'X',\n'MTO', 'X',\n'MTS', 'X'\
3357 ,\n'MTT', 'X',\n'MTX', 'X',\n'MTY', 'Y',\n'MUG', '\
3358 X',\n'MUP', 'X',\n'MUR', 'X',\n'MVA', 'V',\n'MW1',\
3359  'X',\n'MW2', 'X',\n'MXA', 'X',\n'MXY', 'X',\n'MYA\
3360 ', 'X',\n'MYC', 'X',\n'MYG', 'X',\n'MYR', 'X',\n'M\
3361 YS', 'X',\n'MYT', 'X',\n'MZM', 'X',\n'N1T', 'X',\n\
3362 'N25', 'X',\n'N2B', 'X',\n'N3T', 'X',\n'N4B', 'X',\
3363 \n'NA2', 'X',\n'NA5', 'X',\n'NA6', 'X',\n'NAA', 'X\
3364 ',\n'NAB', 'X',\n'NAC', 'X',\n'NAD', 'X',\n'NAE', \
3365 'X',\n'NAF', 'X',\n'NAG', 'X',\n'NAH', 'X',\n'NAI'\
3366 , 'X',\n'NAL', 'A',\n'NAM', 'A',\n'NAN', 'X',\n'NA\
3367 O', 'X',\n'NAP', 'X',\n'NAQ', 'X',\n'NAR', 'X',\n'\
3368 NAS', 'X',\n'NAU', 'X',\n'NAV', 'X',\n'NAW', 'X',\\
3369 n'NAX', 'X',\n'NAY', 'X',\n'NBA', 'X',\n'NBD', 'X'\
3370 ,\n'NBE', 'X',\n'NBG', 'X',\n'NBN', 'X',\n'NBP', '\
3371 X',\n'NBS', 'X',\n'NBU', 'X',\n'NCA', 'X',\n'NCB',\
3372  'A',\n'NCD', 'X',\n'NCH', 'X',\n'NCM', 'X',\n'NCN\
3373 ', 'X',\n'NCO', 'X',\n'NCR', 'X',\n'NCS', 'X',\n'N\
3374 D4', 'X',\n'NDA', 'X',\n'NDC', 'X',\n'NDD', 'X',\n\
3375 'NDO', 'X',\n'NDP', 'X',\n'NDT', 'X',\n'NEA', 'X',\
3376 \n'NEB', 'X',\n'NED', 'X',\n'NEM', 'H',\n'NEN', 'X\
3377 ',\n'NEO', 'X',\n'NEP', 'H',\n'NEQ', 'X',\n'NES', \
3378 'X',\n'NET', 'X',\n'NEV', 'X',\n'NFA', 'F',\n'NFE'\
3379 , 'X',\n'NFG', 'X',\n'NFP', 'X',\n'NFS', 'X',\n'NG\
3380 6', 'X',\n'NGA', 'X',\n'NGL', 'X',\n'NGM', 'X',\n'\
3381 NGO', 'X',\n'NGP', 'X',\n'NGT', 'X',\n'NGU', 'X',\\
3382 n'NH2', 'X',\n'NH3', 'X',\n'NH4', 'X',\n'NHD', 'X'\
3383 ,\n'NHE', 'X',\n'NHM', 'X',\n'NHP', 'X',\n'NHR', '\
3384 X',\n'NHS', 'X',\n'NI1', 'X',\n'NI2', 'X',\n'NIC',\
3385  'X',\n'NID', 'X',\n'NIK', 'X',\n'NIO', 'X',\n'NIP\
3386 ', 'X',\n'NIT', 'X',\n'NIU', 'X',\n'NIY', 'Y',\n'N\
3387 LA', 'X',\n'NLE', 'L',\n'NLG', 'X',\n'NLN', 'L',\n\
3388 'NLP', 'L',\n'NM1', 'X',\n'NMA', 'A',\n'NMB', 'X',\
3389 \n'NMC', 'G',\n'NMD', 'X',\n'NME', 'X',\n'NMN', 'X\
3390 ',\n'NMO', 'X',\n'NMQ', 'X',\n'NMX', 'X',\n'NMY', \
3391 'X',\n'NNH', 'R',\n'NNO', 'X',\n'NO2', 'X',\n'NO3'\
3392 , 'X',\n'NOA', 'X',\n'NOD', 'X',\n'NOJ', 'X',\n'NO\
3393 N', 'X',\n'NOP', 'X',\n'NOR', 'X',\n'NOS', 'X',\n'\
3394 NOV', 'X',\n'NOX', 'X',\n'NP3', 'X',\n'NPA', 'X',\\
3395 n'NPC', 'X',\n'NPD', 'X',\n'NPE', 'X',\n'NPF', 'X'\
3396 ,\n'NPH', 'C',\n'NPI', 'X',\n'NPL', 'X',\n'NPN', '\
3397 X',\n'NPO', 'X',\n'NPP', 'X',\n'NPT', 'X',\n'NPY',\
3398  'X',\n'NRG', 'R',\n'NRI', 'X',\n'NS1', 'X',\n'NS5\
3399 ', 'X',\n'NSP', 'X',\n'NTA', 'X',\n'NTB', 'X',\n'N\
3400 TC', 'X',\n'NTH', 'X',\n'NTM', 'X',\n'NTP', 'X',\n\
3401 'NTS', 'X',\n'NTU', 'X',\n'NTZ', 'X',\n'NU1', 'X',\
3402 \n'NVA', 'V',\n'NVI', 'X',\n'NVP', 'X',\n'NW1', 'X\
3403 ',\n'NYP', 'X',\n'O4M', 'X',\n'OAA', 'X',\n'OAI', \
3404 'X',\n'OAP', 'X',\n'OAR', 'X',\n'OAS', 'S',\n'OBA'\
3405 , 'X',\n'OBN', 'X',\n'OC1', 'X',\n'OC2', 'X',\n'OC\
3406 3', 'X',\n'OC4', 'X',\n'OC5', 'X',\n'OC6', 'X',\n'\
3407 OC7', 'X',\n'OCL', 'X',\n'OCM', 'X',\n'OCN', 'X',\\
3408 n'OCO', 'X',\n'OCP', 'X',\n'OCS', 'C',\n'OCT', 'X'\
3409 ,\n'OCV', 'K',\n'OCY', 'C',\n'ODA', 'X',\n'ODS', '\
3410 X',\n'OES', 'X',\n'OET', 'X',\n'OF1', 'X',\n'OF2',\
3411  'X',\n'OF3', 'X',\n'OFL', 'X',\n'OFO', 'X',\n'OHE\
3412 ', 'X',\n'OHO', 'X',\n'OHT', 'X',\n'OIC', 'X',\n'O\
3413 IP', 'X',\n'OKA', 'X',\n'OLA', 'X',\n'OLE', 'X',\n\
3414 'OLI', 'X',\n'OLO', 'X',\n'OMB', 'X',\n'OMC', 'X',\
3415 \n'OMD', 'X',\n'OME', 'X',\n'OMG', 'X',\n'OMP', 'X\
3416 ',\n'OMT', 'M',\n'OMU', 'X',\n'ONE', 'X',\n'ONL', \
3417 'L',\n'ONP', 'X',\n'OPA', 'X',\n'OPD', 'X',\n'OPE'\
3418 , 'X',\n'OPG', 'X',\n'OPH', 'X',\n'OPN', 'X',\n'OP\
3419 P', 'X',\n'OPR', 'R',\n'ORN', 'X',\n'ORO', 'X',\n'\
3420 ORP', 'X',\n'OSB', 'X',\n'OSS', 'X',\n'OTA', 'X',\\
3421 n'OTB', 'X',\n'OTE', 'X',\n'OTG', 'X',\n'OUT', 'X'\
3422 ,\n'OVA', 'X',\n'OWQ', 'X',\n'OXA', 'X',\n'OXE', '\
3423 X',\n'OXI', 'X',\n'OXL', 'X',\n'OXM', 'X',\n'OXN',\
3424  'X',\n'OXO', 'X',\n'OXP', 'X',\n'OXS', 'X',\n'OXY\
3425 ', 'X',\n'P11', 'A',\n'P24', 'X',\n'P28', 'X',\n'P\
3426 2P', 'X',\n'P2U', 'X',\n'P3M', 'X',\n'P4C', 'X',\n\
3427 'P4P', 'X',\n'P5P', 'X',\n'P6G', 'X',\n'PA1', 'X',\
3428 \n'PA2', 'X',\n'PA3', 'X',\n'PA4', 'X',\n'PA5', 'X\
3429 ',\n'PAA', 'X',\n'PAB', 'X',\n'PAC', 'X',\n'PAD', \
3430 'X',\n'PAE', 'X',\n'PAG', 'X',\n'PAH', 'X',\n'PAI'\
3431 , 'X',\n'PAL', 'D',\n'PAM', 'X',\n'PAN', 'X',\n'PA\
3432 O', 'X',\n'PAP', 'A',\n'PAQ', 'F',\n'PAR', 'X',\n'\
3433 PAS', 'X',\n'PAT', 'W',\n'PBA', 'X',\n'PBB', 'X',\\
3434 n'PBC', 'X',\n'PBF', 'F',\n'PBG', 'X',\n'PBI', 'X'\
3435 ,\n'PBM', 'X',\n'PBN', 'X',\n'PBP', 'X',\n'PBR', '\
3436 X',\n'PBZ', 'X',\n'PC2', 'X',\n'PCA', 'E',\n'PCB',\
3437  'X',\n'PCD', 'X',\n'PCE', 'X',\n'PCG', 'X',\n'PCH\
3438 ', 'X',\n'PCL', 'X',\n'PCM', 'X',\n'PCP', 'X',\n'P\
3439 CR', 'X',\n'PCS', 'X',\n'PCU', 'X',\n'PCV', 'X',\n\
3440 'PCY', 'X',\n'PD1', 'X',\n'PDA', 'X',\n'PDC', 'X',\
3441 \n'PDD', 'A',\n'PDE', 'A',\n'PDI', 'X',\n'PDL', 'A\
3442 ',\n'PDN', 'X',\n'PDO', 'X',\n'PDP', 'X',\n'PDT', \
3443 'X',\n'PDU', 'X',\n'PE2', 'X',\n'PE6', 'X',\n'PEA'\
3444 , 'X',\n'PEB', 'X',\n'PEC', 'X',\n'PED', 'X',\n'PE\
3445 E', 'X',\n'PEF', 'X',\n'PEG', 'X',\n'PEL', 'X',\n'\
3446 PEO', 'X',\n'PEP', 'X',\n'PEQ', 'X',\n'PER', 'X',\\
3447 n'PET', 'X',\n'PFB', 'X',\n'PFC', 'X',\n'PFG', 'X'\
3448 ,\n'PFL', 'X',\n'PFM', 'X',\n'PFZ', 'X',\n'PG4', '\
3449 X',\n'PG5', 'X',\n'PG6', 'X',\n'PGA', 'X',\n'PGC',\
3450  'X',\n'PGD', 'X',\n'PGE', 'X',\n'PGG', 'G',\n'PGH\
3451 ', 'X',\n'PGL', 'X',\n'PGO', 'X',\n'PGP', 'X',\n'P\
3452 GQ', 'X',\n'PGR', 'X',\n'PGS', 'X',\n'PGU', 'X',\n\
3453 'PGX', 'X',\n'PGY', 'G',\n'PH1', 'X',\n'PH2', 'X',\
3454 \n'PH3', 'X',\n'PHA', 'F',\n'PHB', 'X',\n'PHC', 'X\
3455 ',\n'PHD', 'X',\n'PHE', 'F',\n'PHG', 'X',\n'PHH', \
3456 'X',\n'PHI', 'F',\n'PHL', 'F',\n'PHM', 'X',\n'PHN'\
3457 , 'X',\n'PHO', 'X',\n'PHP', 'X',\n'PHQ', 'X',\n'PH\
3458 S', 'H',\n'PHT', 'X',\n'PHW', 'P',\n'PHY', 'X',\n'\
3459 PI1', 'X',\n'PI2', 'X',\n'PI3', 'X',\n'PI4', 'X',\\
3460 n'PI5', 'X',\n'PI6', 'X',\n'PI7', 'X',\n'PI8', 'X'\
3461 ,\n'PI9', 'X',\n'PIA', 'X',\n'PIB', 'X',\n'PIC', '\
3462 X',\n'PID', 'X',\n'PIG', 'X',\n'PIH', 'X',\n'PIM',\
3463  'X',\n'PIN', 'X',\n'PIO', 'X',\n'PIP', 'X',\n'PIQ\
3464 ', 'X',\n'PIR', 'X',\n'PIV', 'X',\n'PKF', 'X',\n'P\
3465 L1', 'X',\n'PL9', 'X',\n'PLA', 'D',\n'PLC', 'X',\n\
3466 'PLE', 'L',\n'PLG', 'G',\n'PLH', 'X',\n'PLM', 'X',\
3467 \n'PLP', 'X',\n'PLS', 'S',\n'PLT', 'W',\n'PLU', 'L\
3468 ',\n'PLY', 'X',\n'PMA', 'X',\n'PMB', 'X',\n'PMC', \
3469 'X',\n'PME', 'F',\n'PML', 'X',\n'PMM', 'X',\n'PMO'\
3470 , 'X',\n'PMP', 'X',\n'PMS', 'X',\n'PMY', 'X',\n'PN\
3471 2', 'X',\n'PNA', 'X',\n'PNB', 'X',\n'PNC', 'G',\n'\
3472 PND', 'X',\n'PNE', 'A',\n'PNF', 'X',\n'PNG', 'X',\\
3473 n'PNI', 'X',\n'PNL', 'X',\n'PNM', 'X',\n'PNN', 'X'\
3474 ,\n'PNO', 'X',\n'PNP', 'X',\n'PNQ', 'X',\n'PNS', '\
3475 X',\n'PNT', 'X',\n'PNU', 'X',\n'PO2', 'X',\n'PO4',\
3476  'X',\n'POB', 'X',\n'POC', 'X',\n'POL', 'X',\n'POM\
3477 ', 'P',\n'PON', 'X',\n'POP', 'X',\n'POR', 'X',\n'P\
3478 OS', 'X',\n'PP1', 'X',\n'PP2', 'X',\n'PP3', 'A',\n\
3479 'PP4', 'X',\n'PP5', 'X',\n'PP6', 'X',\n'PP7', 'X',\
3480 \n'PP8', 'N',\n'PP9', 'X',\n'PPB', 'X',\n'PPC', 'X\
3481 ',\n'PPD', 'X',\n'PPE', 'E',\n'PPG', 'X',\n'PPH', \
3482 'F',\n'PPI', 'X',\n'PPJ', 'V',\n'PPL', 'X',\n'PPM'\
3483 , 'X',\n'PPN', 'A',\n'PPO', 'X',\n'PPP', 'X',\n'PP\
3484 Q', 'X',\n'PPR', 'X',\n'PPS', 'X',\n'PPT', 'X',\n'\
3485 PPU', 'X',\n'PPX', 'F',\n'PPY', 'X',\n'PPZ', 'X',\\
3486 n'PQ0', 'X',\n'PQN', 'X',\n'PQQ', 'X',\n'PR1', 'X'\
3487 ,\n'PR2', 'X',\n'PR3', 'X',\n'PRA', 'X',\n'PRB', '\
3488 X',\n'PRC', 'X',\n'PRD', 'X',\n'PRE', 'X',\n'PRF',\
3489  'X',\n'PRH', 'X',\n'PRI', 'P',\n'PRL', 'X',\n'PRN\
3490 ', 'X',\n'PRO', 'P',\n'PRP', 'X',\n'PRR', 'A',\n'P\
3491 RS', 'P',\n'PRZ', 'X',\n'PS0', 'X',\n'PSA', 'X',\n\
3492 'PSD', 'X',\n'PSE', 'X',\n'PSF', 'S',\n'PSG', 'X',\
3493 \n'PSI', 'X',\n'PSO', 'X',\n'PSQ', 'X',\n'PSS', 'X\
3494 ',\n'PST', 'X',\n'PSU', 'X',\n'PT1', 'X',\n'PT3', \
3495 'X',\n'PTA', 'X',\n'PTC', 'X',\n'PTD', 'X',\n'PTE'\
3496 , 'X',\n'PTH', 'Y',\n'PTL', 'X',\n'PTM', 'Y',\n'PT\
3497 N', 'X',\n'PTO', 'X',\n'PTP', 'X',\n'PTR', 'Y',\n'\
3498 PTS', 'X',\n'PTT', 'X',\n'PTU', 'X',\n'PTY', 'X',\\
3499 n'PUA', 'X',\n'PUB', 'X',\n'PUR', 'X',\n'PUT', 'X'\
3500 ,\n'PVA', 'X',\n'PVB', 'X',\n'PVH', 'H',\n'PVL', '\
3501 X',\n'PXA', 'X',\n'PXF', 'X',\n'PXG', 'X',\n'PXP',\
3502  'X',\n'PXY', 'X',\n'PXZ', 'X',\n'PY2', 'X',\n'PY4\
3503 ', 'X',\n'PY5', 'X',\n'PY6', 'X',\n'PYA', 'A',\n'P\
3504 YC', 'X',\n'PYD', 'X',\n'PYE', 'X',\n'PYL', 'X',\n\
3505 'PYM', 'X',\n'PYO', 'X',\n'PYP', 'X',\n'PYQ', 'X',\
3506 \n'PYR', 'X',\n'PYS', 'X',\n'PYT', 'X',\n'PYX', 'X\
3507 ',\n'PYY', 'X',\n'PYZ', 'X',\n'PZQ', 'X',\n'Q82', \
3508 'X',\n'QNC', 'X',\n'QND', 'X',\n'QSI', 'Q',\n'QTR'\
3509 , 'X',\n'QUA', 'X',\n'QUE', 'X',\n'QUI', 'X',\n'QU\
3510 O', 'X',\n'R11', 'X',\n'R12', 'X',\n'R13', 'X',\n'\
3511 R18', 'X',\n'R1P', 'X',\n'R56', 'X',\n'R5P', 'X',\\
3512 n'RA2', 'X',\n'RAD', 'X',\n'RAI', 'X',\n'RAL', 'X'\
3513 ,\n'RAM', 'X',\n'RAN', 'X',\n'RAP', 'X',\n'RBF', '\
3514 X',\n'RBU', 'X',\n'RCA', 'X',\n'RCL', 'X',\n'RCO',\
3515  'X',\n'RDC', 'X',\n'RDF', 'W',\n'RE9', 'X',\n'REA\
3516 ', 'X',\n'RED', 'K',\n'REO', 'X',\n'REP', 'X',\n'R\
3517 ET', 'X',\n'RFA', 'X',\n'RFB', 'X',\n'RFL', 'X',\n\
3518 'RFP', 'X',\n'RG1', 'X',\n'RGS', 'X',\n'RH1', 'X',\
3519 \n'RHA', 'X',\n'RHC', 'X',\n'RHD', 'X',\n'RHM', 'X\
3520 ',\n'RHO', 'X',\n'RHQ', 'X',\n'RHS', 'X',\n'RIA', \
3521 'X',\n'RIB', 'X',\n'RIC', 'X',\n'RIF', 'X',\n'RIN'\
3522 , 'X',\n'RIP', 'X',\n'RIT', 'X',\n'RMB', 'X',\n'RM\
3523 N', 'X',\n'RMP', 'X',\n'RNG', 'X',\n'RNS', 'X',\n'\
3524 RNT', 'X',\n'RO2', 'X',\n'RO4', 'X',\n'ROC', 'N',\\
3525 n'ROI', 'X',\n'ROM', 'X',\n'RON', 'V',\n'ROP', 'X'\
3526 ,\n'ROS', 'X',\n'ROX', 'X',\n'RPA', 'X',\n'RPD', '\
3527 X',\n'RPH', 'X',\n'RPL', 'X',\n'RPP', 'X',\n'RPR',\
3528  'X',\n'RPX', 'X',\n'RQ3', 'X',\n'RR1', 'X',\n'RR6\
3529 ', 'X',\n'RRS', 'X',\n'RS1', 'X',\n'RS2', 'X',\n'R\
3530 S7', 'X',\n'RSS', 'X',\n'RTA', 'X',\n'RTB', 'X',\n\
3531 'RTC', 'X',\n'RTL', 'X',\n'RUB', 'X',\n'RUN', 'X',\
3532 \n'RWJ', 'X',\n'RXP', 'X',\n'S02', 'X',\n'S11', 'X\
3533 ',\n'S1H', 'S',\n'S27', 'X',\n'S2C', 'C',\n'S3P', \
3534 'X',\n'S4U', 'X',\n'S57', 'X',\n'S58', 'X',\n'S5H'\
3535 , 'X',\n'S6G', 'X',\n'S80', 'X',\n'SAA', 'X',\n'SA\
3536 B', 'X',\n'SAC', 'S',\n'SAD', 'X',\n'SAE', 'X',\n'\
3537 SAF', 'X',\n'SAH', 'C',\n'SAI', 'C',\n'SAL', 'X',\\
3538 n'SAM', 'M',\n'SAN', 'X',\n'SAP', 'X',\n'SAR', 'X'\
3539 ,\n'SAS', 'X',\n'SB1', 'X',\n'SB2', 'X',\n'SB3', '\
3540 X',\n'SB4', 'X',\n'SB5', 'X',\n'SB6', 'X',\n'SBA',\
3541  'L',\n'SBB', 'X',\n'SBD', 'A',\n'SBI', 'X',\n'SBL\
3542 ', 'A',\n'SBN', 'X',\n'SBO', 'X',\n'SBR', 'X',\n'S\
3543 BS', 'X',\n'SBT', 'X',\n'SBU', 'X',\n'SBX', 'X',\n\
3544 'SC4', 'X',\n'SCA', 'X',\n'SCC', 'X',\n'SCD', 'X',\
3545 \n'SCH', 'C',\n'SCI', 'X',\n'SCL', 'X',\n'SCM', 'X\
3546 ',\n'SCN', 'X',\n'SCO', 'X',\n'SCP', 'S',\n'SCR', \
3547 'X',\n'SCS', 'X',\n'SCV', 'C',\n'SCY', 'C',\n'SD8'\
3548 , 'X',\n'SDK', 'X',\n'SDZ', 'X',\n'SE4', 'X',\n'SE\
3549 A', 'X',\n'SEB', 'S',\n'SEC', 'X',\n'SEG', 'A',\n'\
3550 SEI', 'X',\n'SEL', 'S',\n'SEM', 'X',\n'SEO', 'X',\\
3551 n'SEP', 'S',\n'SER', 'S',\n'SES', 'X',\n'SET', 'S'\
3552 ,\n'SEU', 'X',\n'SF4', 'X',\n'SFG', 'X',\n'SFN', '\
3553 X',\n'SFO', 'X',\n'SGA', 'X',\n'SGC', 'X',\n'SGL',\
3554  'X',\n'SGM', 'X',\n'SGN', 'X',\n'SGP', 'X',\n'SHA\
3555 ', 'X',\n'SHC', 'X',\n'SHF', 'X',\n'SHH', 'X',\n'S\
3556 HP', 'G',\n'SHR', 'E',\n'SHT', 'T',\n'SHU', 'X',\n\
3557 'SI2', 'X',\n'SIA', 'X',\n'SIF', 'X',\n'SIG', 'X',\
3558 \n'SIH', 'X',\n'SIM', 'X',\n'SIN', 'X',\n'SKD', 'X\
3559 ',\n'SKF', 'X',\n'SLB', 'X',\n'SLE', 'X',\n'SLZ', \
3560 'K',\n'SMA', 'X',\n'SMC', 'C',\n'SME', 'M',\n'SML'\
3561 , 'X',\n'SMM', 'M',\n'SMN', 'X',\n'SMP', 'X',\n'SM\
3562 S', 'X',\n'SN1', 'X',\n'SN6', 'X',\n'SN7', 'X',\n'\
3563 SNC', 'C',\n'SNN', 'X',\n'SNP', 'X',\n'SO1', 'X',\\
3564 n'SO2', 'X',\n'SO3', 'X',\n'SO4', 'X',\n'SOA', 'X'\
3565 ,\n'SOC', 'C',\n'SOM', 'X',\n'SOR', 'X',\n'SOT', '\
3566 X',\n'SOX', 'X',\n'SPA', 'X',\n'SPB', 'X',\n'SPC',\
3567  'X',\n'SPD', 'X',\n'SPE', 'X',\n'SPG', 'X',\n'SPH\
3568 ', 'X',\n'SPI', 'X',\n'SPK', 'X',\n'SPM', 'X',\n'S\
3569 PN', 'X',\n'SPO', 'X',\n'SPP', 'X',\n'SPS', 'X',\n\
3570 'SPY', 'X',\n'SQU', 'X',\n'SRA', 'X',\n'SRB', 'X',\
3571 \n'SRD', 'X',\n'SRL', 'X',\n'SRM', 'X',\n'SRS', 'X\
3572 ',\n'SRY', 'X',\n'SSA', 'X',\n'SSB', 'X',\n'SSG', \
3573 'X',\n'SSP', 'X',\n'ST1', 'X',\n'ST2', 'X',\n'ST3'\
3574 , 'X',\n'ST4', 'X',\n'ST5', 'X',\n'ST6', 'X',\n'ST\
3575 A', 'X',\n'STB', 'X',\n'STE', 'X',\n'STG', 'X',\n'\
3576 STI', 'X',\n'STL', 'X',\n'STN', 'X',\n'STO', 'X',\\
3577 n'STP', 'X',\n'STR', 'X',\n'STU', 'X',\n'STY', 'Y'\
3578 ,\n'SU1', 'X',\n'SU2', 'X',\n'SUC', 'X',\n'SUI', '\
3579 X',\n'SUL', 'X',\n'SUR', 'X',\n'SVA', 'S',\n'SWA',\
3580  'X',\n'T16', 'X',\n'T19', 'X',\n'T23', 'X',\n'T29\
3581 ', 'X',\n'T33', 'X',\n'T3P', 'X',\n'T42', 'A',\n'T\
3582 44', 'X',\n'T5A', 'X',\n'T6A', 'T',\n'T6P', 'X',\n\
3583 'T80', 'X',\n'T87', 'X',\n'TA1', 'X',\n'TAA', 'X',\
3584 \n'TAB', 'X',\n'TAC', 'X',\n'TAD', 'X',\n'TAF', 'X\
3585 ',\n'TAM', 'X',\n'TAP', 'X',\n'TAR', 'X',\n'TAS', \
3586 'X',\n'TAU', 'X',\n'TAX', 'X',\n'TAZ', 'X',\n'TB9'\
3587 , 'X',\n'TBA', 'X',\n'TBD', 'X',\n'TBG', 'G',\n'TB\
3588 H', 'X',\n'TBM', 'T',\n'TBO', 'X',\n'TBP', 'X',\n'\
3589 TBR', 'X',\n'TBS', 'X',\n'TBT', 'X',\n'TBU', 'X',\\
3590 n'TBZ', 'X',\n'TC4', 'X',\n'TCA', 'X',\n'TCB', 'X'\
3591 ,\n'TCH', 'X',\n'TCK', 'X',\n'TCL', 'X',\n'TCM', '\
3592 X',\n'TCN', 'X',\n'TCP', 'X',\n'TCR', 'W',\n'TCS',\
3593  'X',\n'TCZ', 'X',\n'TDA', 'X',\n'TDB', 'X',\n'TDG\
3594 ', 'X',\n'TDP', 'X',\n'TDR', 'X',\n'TDX', 'X',\n'T\
3595 EA', 'X',\n'TEM', 'X',\n'TEN', 'X',\n'TEO', 'X',\n\
3596 'TEP', 'X',\n'TER', 'X',\n'TES', 'X',\n'TET', 'X',\
3597 \n'TFA', 'X',\n'TFB', 'X',\n'TFH', 'X',\n'TFI', 'X\
3598 ',\n'TFK', 'X',\n'TFP', 'X',\n'THA', 'X',\n'THB', \
3599 'X',\n'THC', 'T',\n'THD', 'X',\n'THE', 'X',\n'THF'\
3600 , 'X',\n'THJ', 'X',\n'THK', 'X',\n'THM', 'X',\n'TH\
3601 N', 'X',\n'THO', 'T',\n'THP', 'X',\n'THQ', 'X',\n'\
3602 THR', 'T',\n'THS', 'X',\n'THT', 'X',\n'THU', 'X',\\
3603 n'THX', 'X',\n'THZ', 'X',\n'TI1', 'X',\n'TI2', 'X'\
3604 ,\n'TI3', 'P',\n'TIA', 'X',\n'TIH', 'A',\n'TK4', '\
3605 X',\n'TLA', 'X',\n'TLC', 'X',\n'TLM', 'X',\n'TLN',\
3606  'X',\n'TLX', 'X',\n'TM5', 'X',\n'TM6', 'X',\n'TMA\
3607 ', 'X',\n'TMB', 'T',\n'TMC', 'X',\n'TMD', 'T',\n'T\
3608 ME', 'X',\n'TMF', 'X',\n'TML', 'K',\n'TMM', 'X',\n\
3609 'TMN', 'X',\n'TMP', 'X',\n'TMQ', 'X',\n'TMR', 'X',\
3610 \n'TMT', 'X',\n'TMZ', 'X',\n'TNB', 'C',\n'TND', 'X\
3611 ',\n'TNK', 'X',\n'TNP', 'X',\n'TNT', 'X',\n'TOA', \
3612 'X',\n'TOB', 'X',\n'TOC', 'X',\n'TOL', 'X',\n'TOP'\
3613 , 'X',\n'TOS', 'X',\n'TOT', 'X',\n'TP1', 'G',\n'TP\
3614 2', 'P',\n'TP3', 'E',\n'TP4', 'E',\n'TP7', 'T',\n'\
3615 TPA', 'X',\n'TPE', 'X',\n'TPF', 'X',\n'TPI', 'X',\\
3616 n'TPL', 'W',\n'TPM', 'X',\n'TPN', 'G',\n'TPO', 'T'\
3617 ,\n'TPP', 'X',\n'TPQ', 'A',\n'TPR', 'P',\n'TPS', '\
3618 X',\n'TPT', 'X',\n'TPV', 'X',\n'TPX', 'X',\n'TPY',\
3619  'X',\n'TQ3', 'X',\n'TQ4', 'X',\n'TQ5', 'X',\n'TQ6\
3620 ', 'X',\n'TR1', 'X',\n'TRA', 'X',\n'TRB', 'X',\n'T\
3621 RC', 'X',\n'TRD', 'X',\n'TRE', 'X',\n'TRF', 'W',\n\
3622 'TRG', 'K',\n'TRH', 'X',\n'TRI', 'X',\n'TRJ', 'X',\
3623 \n'TRM', 'X',\n'TRN', 'W',\n'TRO', 'W',\n'TRP', 'W\
3624 ',\n'TRQ', 'X',\n'TRS', 'X',\n'TRX', 'W',\n'TRZ', \
3625 'X',\n'TS2', 'X',\n'TS3', 'X',\n'TS4', 'X',\n'TS5'\
3626 , 'X',\n'TSA', 'X',\n'TSB', 'X',\n'TSI', 'X',\n'TS\
3627 M', 'X',\n'TSN', 'X',\n'TSP', 'X',\n'TSU', 'X',\n'\
3628 TTA', 'X',\n'TTE', 'X',\n'TTN', 'X',\n'TTO', 'X',\\
3629 n'TTP', 'X',\n'TTX', 'X',\n'TXL', 'X',\n'TYA', 'Y'\
3630 ,\n'TYB', 'Y',\n'TYD', 'X',\n'TYI', 'Y',\n'TYL', '\
3631 X',\n'TYM', 'W',\n'TYN', 'Y',\n'TYQ', 'Y',\n'TYR',\
3632  'Y',\n'TYS', 'Y',\n'TYV', 'X',\n'TYY', 'A',\n'TZB\
3633 ', 'X',\n'TZC', 'X',\n'TZE', 'X',\n'TZL', 'X',\n'T\
3634 ZO', 'X',\n'TZP', 'X',\n'U01', 'X',\n'U02', 'X',\n\
3635 'U03', 'X',\n'U04', 'X',\n'U05', 'X',\n'U0E', 'X',\
3636 \n'U10', 'X',\n'U18', 'X',\n'U2G', 'X',\n'U3P', 'X\
3637 ',\n'U49', 'X',\n'U55', 'X',\n'U5P', 'X',\n'U66', \
3638 'X',\n'U89', 'X',\n'U8U', 'X',\n'UAA', 'X',\n'UAG'\
3639 , 'A',\n'UAP', 'X',\n'UAR', 'X',\n'UC1', 'X',\n'UC\
3640 2', 'X',\n'UC3', 'X',\n'UC4', 'X',\n'UD1', 'X',\n'\
3641 UD2', 'X',\n'UDP', 'X',\n'UDX', 'X',\n'UFG', 'X',\\
3642 n'UFM', 'X',\n'UFP', 'X',\n'UGA', 'X',\n'UIN', 'X'\
3643 ,\n'UKP', 'A',\n'UM3', 'X',\n'UMA', 'A',\n'UMG', '\
3644 X',\n'UMP', 'X',\n'UNA', 'X',\n'UND', 'X',\n'UNI',\
3645  'X',\n'UNK', 'X',\n'UNN', 'X',\n'UNX', 'X',\n'UP5\
3646 ', 'X',\n'UP6', 'X',\n'UPA', 'X',\n'UPF', 'X',\n'U\
3647 PG', 'X',\n'UPP', 'X',\n'UQ1', 'X',\n'UQ2', 'X',\n\
3648 'UQ6', 'X',\n'UR2', 'X',\n'URA', 'X',\n'URE', 'X',\
3649 \n'URF', 'X',\n'URI', 'X',\n'URS', 'X',\n'UTP', 'X\
3650 ',\n'UVC', 'X',\n'UVW', 'X',\n'V35', 'X',\n'V36', \
3651 'X',\n'V4O', 'X',\n'V7O', 'X',\n'VAA', 'V',\n'VAC'\
3652 , 'X',\n'VAD', 'V',\n'VAF', 'V',\n'VAG', 'X',\n'VA\
3653 L', 'V',\n'VAN', 'X',\n'VAS', 'X',\n'VAX', 'X',\n'\
3654 VDX', 'X',\n'VDY', 'X',\n'VG1', 'X',\n'VIB', 'X',\\
3655 n'VIR', 'X',\n'VIT', 'X',\n'VK3', 'X',\n'VO3', 'X'\
3656 ,\n'VO4', 'X',\n'VS1', 'F',\n'VS2', 'F',\n'VS3', '\
3657 F',\n'VS4', 'F',\n'VXA', 'X',\n'W01', 'X',\n'W02',\
3658  'X',\n'W03', 'X',\n'W11', 'X',\n'W33', 'X',\n'W35\
3659 ', 'X',\n'W42', 'X',\n'W43', 'X',\n'W54', 'X',\n'W\
3660 56', 'X',\n'W59', 'X',\n'W71', 'X',\n'W84', 'X',\n\
3661 'W8R', 'X',\n'W91', 'X',\n'WAY', 'X',\n'WCC', 'X',\
3662 \n'WO2', 'X',\n'WO4', 'X',\n'WRB', 'X',\n'WRR', 'X\
3663 ',\n'WRS', 'X',\n'WW7', 'X',\n'X2F', 'X',\n'X7O', \
3664 'X',\n'XAA', 'X',\n'XAN', 'X',\n'XAO', 'X',\n'XBB'\
3665 , 'X',\n'XBP', 'X',\n'XDN', 'X',\n'XDP', 'X',\n'XI\
3666 F', 'X',\n'XIM', 'X',\n'XK2', 'X',\n'XL1', 'X',\n'\
3667 XLS', 'X',\n'XMP', 'X',\n'XN1', 'X',\n'XN2', 'X',\\
3668 n'XN3', 'X',\n'XUL', 'X',\n'XV6', 'X',\n'XYD', 'X'\
3669 ,\n'XYH', 'X',\n'XYL', 'X',\n'XYP', 'X',\n'XYS', '\
3670 X',\n'YOF', 'Y',\n'YRR', 'X',\n'YT3', 'X',\n'YZ9',\
3671  'X',\n'Z34', 'G',\n'Z5A', 'X',\n'ZAF', 'X',\n'ZAP\
3672 ', 'X',\n'ZEB', 'X',\n'ZEN', 'X',\n'ZES', 'X',\n'Z\
3673 ID', 'X',\n'ZMR', 'X',\n'ZN3', 'X',\n'ZNH', 'X',\n\
3674 'ZNO', 'X',\n'ZO3', 'X',\n'ZPR', 'P',\n'ZRA', 'A',\
3675 \n'ZST', 'X',\n'ZYA', 'A',\n\n\n'ASN','N');\n} \n       \
3676   \n\n\n","use Cwd;\nuse File::Path;\nuse FileHand\
3677 le;\nuse strict;\n\n\nour (%MODE, %PG, %ENV_SET, %\
3678 SUPPORTED_OS);\n\n\nour $EXIT_SUCCESS=0;\nour $EXI\
3679 T_FAILURE=1;\nour $INTERNET=0;\n\nour $CP=\"cp \";\
3680  #was causing a crash on MacOSX\nour $SILENT=\">/d\
3681 ev/null 2>/dev/null\";\nour $WEB_BASE=\"http://www\
3682 .tcoffee.org\";\nour $TCLINKDB_ADDRESS=\"$WEB_BASE\
3683 /Resources/tclinkdb.txt\";\nour $OS=get_os();\nour\
3684  $ROOT=&get_root();\nour $CD=cwd();\nour $CDIR=$CD\
3685 ;\nour $HOME=$ENV{'HOME'};\nour $CXX=\"g++\";\nour\
3686  $CXXFLAGS=\"\";\n\nour $CPP=\"g++\";\nour $CPPFLA\
3687 GS=\"\";\n\nour $CC=\"gcc\";\nour $CFLAGS=\"\";\n\\
3688 nour $FC=\"f77\";\nour $FFLAGS=\"\";\n\nmy $instal\
3689 l=\"all\";\nmy $default_update_action=\"no_update\\
3690 ";\nmy @required_applications=(\"wget_OR_curl\");\\
3691 nmy @smode=(\"all\", \"clean\", \"install\");\n\n&\
3692 initialize_PG();\n\nmy $cl=join( \" \", @ARGV);\ni\
3693 f ($#ARGV==-1 || ($cl=~/-h/) ||($cl=~/-H/) )\n  {\\
3694 n     print \"\\n!!!!!!! ./install  t_coffee      \
3695        --> installs t_coffee only\";\n     print \\
3696 "\\n!!!!!!! ./install  all                  --> in\
3697 stalls all the modes [mcoffee, expresso, psicoffee\
3698 ,rcoffee..]\";\n     print \"\\n!!!!!!! ./install \
3699  [mcoffee|rcoffee|..] --> installs the specified m\
3700 ode\";\n     print \"\\n!!!!!!! ./install  -h     \
3701               --> print usage\\n\\n\";\n     if ( \
3702 $#ARGV==-1){exit ($EXIT_FAILURE);}\n   }\n     \ni\
3703 f (($cl=~/-h/) ||($cl=~/-H/) )\n  {\n    my $m;\n \
3704    print \"\\n\\n!!!!!!! advanced mode\\n\";\n    \
3705 foreach $m ((keys (%MODE)),@smode)\n      {\n   prin\
3706 t \"!!!!!!!       ./install $m\\n\";\n      }\n   \
3707  \n    print \"!!!!!!! ./install [target:package|m\
3708 ode|] [-update|-force|-exec=dir|-dis=dir|-root|-tc\
3709 linkdb=file|-] [CC=|FCC=|CXX=|CFLAGS=|CXXFLAGS=]\\\
3710 n\";\n    print \"!!!!!!! ./install clean    [remo\
3711 ves all executables]\\n\";\n    print \"!!!!!!! ./\
3712 install [optional:target] -update               [u\
3713 pdates package already installed]\\n\";\n    print\
3714  \"!!!!!!! ./install [optional:target] -force     \
3715            [Forces recompilation over everything]\\
3716 \n\";\n    \n    print \"!!!!!!! ./install [option\
3717 al:target] -root                 [You are running \
3718 as root]\\n\";\n    print \"!!!!!!! ./install [opt\
3719 ional:target] -exec=/foo/bar/       [address for t\
3720 he T-Coffee executable]\\n\";\n    print \"!!!!!!!\
3721  ./install [optional:target] -dis=/foo/bar/       \
3722  [Address where distributions should be stored]\\n\
3723 \";\n    print \"!!!!!!! ./install [optional:targe\
3724 t] -tclinkdb=foo|update  [file containing all the \
3725 packages to be installed]\\n\";\n    print \"!!!!!\
3726 !! ./install [optional:target] -tclinkdb=foo|updat\
3727 e  [file containing all the packages to be install\
3728 ed]\\n\";\n    print \"!!!!!!! ./install [optional\
3729 :target] -clean                [clean everything]\\
3730 \n\";\n    print \"!!!!!!! ./install [optional:tar\
3731 get] -plugins              [plugins directory]\\n\\
3732 ";\n    print \"!!!!!!! mode:\";\n    foreach $m (\
3733 keys(%MODE)){print \"$m \";}\n    print \"\\n\";\n\
3734     print \"!!!!!!! Packages:\";\n    foreach $m (\
3735 keys (%PG)){print \"$m \";}\n    print \"\\n\";\n \
3736    \n    print \"\\n\\n\";\n    exit ($EXIT_FAILUR\
3737 E);\n  }\n\n\n\nmy (@argl)=($cl=~/(\\S+=[^=]+)\\s\\
3738 \w+=/g);\npush (@argl, ($cl=~/(\\S+=[^=]+\\S)\\s*$\
3739 /g));\n\nforeach $a (@argl)\n  {\n    if ( ($cl=~/\
3740 CXX=(.*)/)){$CXX=$1;}\n    if ( ($cl=~/-CC=(.*)/  \
3741   )){$CC=$1;}\n    if ( ($cl=~/-FC=(.*)/    )){$FC\
3742 =$1;}\n    if ( ($cl=~/-CFLAGS=(.*)/)){$CFLAGS=$1;\
3743 }\n    if ( ($cl=~/-CXXFLAGS=(.*)/)){$CXXFLAGS=$1;\
3744 }\n  }\nour ($ROOT_INSTALL, $NO_QUESTION, $default\
3745 _update_action,$BINARIES_ONLY,$force, $default_upd\
3746 ate_action, $INSTALL_DIR, $PLUGINS_DIR, $DISTRIBUT\
3747 IONS,$tclinkdb, $proxy, $clean);\nif ( ($cl=~/-roo\
3748 t/)){$ROOT_INSTALL=1;}\nif ( ($cl=~/-no_question/)\
3749 ){$NO_QUESTION=1;}\nif ( ($cl=~/-update/)){$defaul\
3750 t_update_action=\"update\";}\nif ( ($cl=~/-binarie\
3751 s/)){$BINARIES_ONLY=1;}\nif ( ($cl=~/-force/)){$fo\
3752 rce=1;$default_update_action=\"update\"}\nif ( ($c\
3753 l=~/-exec=\\s*(\\S+)/)){$INSTALL_DIR=$1;}\nif ( ($\
3754 cl=~/-plugins=\\s*(\\S+)/)){$PLUGINS_DIR=$1;}\nif \
3755 ( ($cl=~/-dis=\\s*(\\S+)/)){$DISTRIBUTIONS=$1;}\n\\
3756 nif ( ($cl=~/-tclinkdb=\\s*(\\S+)/)){$tclinkdb=$1;\
3757 }\nif ( ($cl=~/-proxy=\\s*(\\S+)/)){$proxy=$1;}\ni\
3758 f ( ($cl=~/-clean/)){$clean=1;}\nif ($tclinkdb){&u\
3759 pdate_tclinkdb ($tclinkdb);}\n\nour $TCDIR=$ENV{DI\
3760 R_4_TCOFFEE};\nour $TCCACHE=$ENV{CACHE_4_TCOFFEE};\
3761 \nour $TCTMP=$ENV{CACHE_4_TCOFFEE};\nour $TCM=$ENV\
3762 {MCOFFEE_4_TCOFFEE};\nour $TCMETHODS=$ENV{METHODS_\
3763 4_TCOFFEE};\nour $TCPLUGINS=$ENV{PLUGINS_4_TCOFFEE\
3764 };\nour $PLUGINS_DIR=\"\";\nour $INSTALL_DIR=\"\";\
3765 \n\n&add_dir ($TCDIR=\"$HOME/.t_coffee\");\n&add_d\
3766 ir ($TCCACHE=\"$TCDIR/cache\");\n&add_dir ($TCTMP=\
3767 \"$CDIR/tmp\");\n&add_dir ($TCM=\"$TCDIR/mcoffee\"\
3768 );\n&add_dir ($TCMETHODS=\"$TCDIR/methods\");\n&ad\
3769 d_dir ($TCPLUGINS=\"$TCDIR/plugins/$OS\");\n\n\nou\
3770 r $BASE=\"$CD/bin\";\nour $BIN=\"$BASE/binaries/$O\
3771 S\";\nour $DOWNLOAD_DIR=\"$BASE/download\";\nour $\
3772 DOWNLOAD_FILE=\"$DOWNLOAD_DIR/files\";\nour $TMP=\\
3773 "$BASE/tmp\";\n\n&add_dir($BASE);\n&add_dir($BIN);\
3774 \n&add_dir($DOWNLOAD_DIR);\n&add_dir($DOWNLOAD_FIL\
3775 E);\nif (!$DISTRIBUTIONS){$DISTRIBUTIONS=\"$DOWNLO\
3776 AD_DIR/distributions\";}\n&add_dir ($DISTRIBUTIONS\
3777 );\n&add_dir ($TMP);\n\n\nif    (!$PLUGINS_DIR && \
3778 !$ROOT_INSTALL){$PLUGINS_DIR=$TCPLUGINS;}\nelsif (\
3779 !$PLUGINS_DIR &&  $ROOT_INSTALL){$PLUGINS_DIR=\"/u\
3780 sr/local/bin/\";}\n\nif    (!$INSTALL_DIR && !$ROO\
3781 T_INSTALL){$INSTALL_DIR=\"$HOME/bin/\";mkpath ($IN\
3782 STALL_DIR);}\nelsif (!$INSTALL_DIR &&  $ROOT_INSTA\
3783 LL){$INSTALL_DIR=\"/usr/local/bin/\";}\n\nif (-d \\
3784 "mcoffee\"){`cp mcoffee/* $TCM`;}\n\n\nour $ENV_FI\
3785 LE=\"$TCDIR/t_coffee_env\";\n&env_file2putenv ($EN\
3786 V_FILE);\n&set_proxy($proxy);\nmy ($target, $p, $r\
3787 );\n$target=$p;\n\nforeach $p (  ((keys (%PG)),(ke\
3788 ys(%MODE)),(@smode)) )\n  {\n    if ($ARGV[0] eq $\
3789 p && $target eq \"\"){$target=$p;}\n  }\nif ($targ\
3790 et eq \"\"){exit ($EXIT_FAILURE);}\n\n\nforeach $r\
3791  (@required_applications)\n  {\n    my @app_list;\\
3792 n    my $i;\n    $i=0;\n    \n    @app_list=split \
3793 (/_OR_/, $r);\n    foreach my $pg (@app_list)\n   \
3794    {\n  $i+=&pg_is_installed ($pg);\n      }\n    i\
3795 f ($i==0)\n      {\n      print \"One of the follo\
3796 wing packages must be installed to proceed: \";\n \
3797      foreach my $pg (@app_list)\n       {\n       print (\"$\
3798 pg \");\n       }\n      die;\n    }\n  }\n\n\n\n\n\n\n&\
3799 sign_license_ni();\n\n\n$PG{C}{compiler}=get_C_com\
3800 piler($CC);\n$PG{Fortran}{compiler}=get_F_compiler\
3801 ($FC);\n$PG{CXX}{compiler}=$PG{CPP}{compiler}=$PG{\
3802 GPP}{compiler}=get_CXX_compiler($CXX);\nif ($CXXFL\
3803 AGS){$PG{CPP}{options}=$PG{GPP}{options}=$PG{CXX}{\
3804 options}=$CXXFLAGS;}\nif ($CFLAGS){$PG{C}{options}\
3805 =$CFLAGS;}\nforeach my $c (keys(%PG))\n  {\n    my\
3806  $arguments;\n    if ($PG{$c}{compiler})\n      {\\
3807 n       $arguments=\"$PG{$c}{compiler_flag}=$PG{$c}{comp\
3808 iler} \";\n     if ($PG{$c}{options})\n   {\n       $arg\
3809 uments.=\"$PG{$c}{options_flag}=$PG{$c}{options} \\
3810 ";\n      }\n   $PG{$c}{arguments}=$arguments;\n      }\
3811 \n  }\n\nif ($PG{$target}){$PG{$target}{install}=1\
3812 ;}\nelse\n  {\n    foreach my $pg (keys(%PG))\n   \
3813    {\n  if ( $target eq \"all\" || ($PG{$pg}{mode}=\
3814 ~/$target/))\n    {\n       $PG{$pg} {install}=1;\n      \
3815  }\n      }\n  }\n\nforeach my $pg (keys(%PG))\n  \
3816 {\n    if (!$PG{$pg}{update_action}){$PG{$pg}{upda\
3817 te_action}=$default_update_action;}\n    elsif ($P\
3818 G{$pg}{update_action} eq \"never\"){$PG{$pg}{insta\
3819 ll}=0;}\n    if ( $force && $PG{$pg}{install})\n  \
3820     {\n `rm $BIN/$pg $BIN/$pg.exe $SILENT`;\n     \
3821  }\n    if ($PG{$pg}{update_action} eq \"update\" \
3822 && $PG{$pg}{install}){$PG{$pg}{update}=1;}\n  }\n\\
3823 nif (($target=~/clean/))\n  {\n    print \"-------\
3824  cleaning executables -----\\n\";\n    `rm bin/* $\
3825 SILENT`;\n    exit ($EXIT_SUCCESS);\n  }\n\nif ( !\
3826 $PG{$target}){print \"------- Installing T-Coffee \
3827 Modes\\n\";}\n\nforeach my $m (keys(%MODE))\n  {\n\
3828     if ( $target eq \"all\" || $target eq $m)\n   \
3829    {\n  print \"\\n------- The installer will now i\
3830 nstall the $m components $MODE{$m}{description}\\n\
3831 \";\n   foreach my $pg (keys(%PG))\n      {\n       if ( \
3832 $PG{$pg}{mode} =~/$m/ && $PG{$pg}{install})\n       \
3833   {\n           if ($PG{$pg}{touched}){print \"------- $PG{\
3834 $pg}{dname}: already processed\\n\";}\n         else {$PG\
3835 {$pg}{success}=&install_pg($pg);$PG{$pg}{touched}=\
3836 1;}\n         }\n         }\n      }\n  }\n\nif ( $PG{$tar\
3837 get}){print \"------- Installing Individual Packag\
3838 e\\n\";}\nforeach my $pg (keys (%PG))\n  {\n    \n\
3839     if ( $PG{$pg}{install} && !$PG{$pg}{touched})\\
3840 n      {\n      print \"\\n------- Install $pg\\n\";\n  \
3841 $PG{$pg}{success}=&install_pg($pg);$PG{$pg}{touche\
3842 d}=1;\n      }\n  }\nprint \"------- Finishing The\
3843  installation\\n\";\nmy $final_report=&install ($I\
3844 NSTALL_DIR);\n\nprint \"\\n\";\nprint \"**********\
3845 **************************************************\
3846 *********\\n\";\nprint \"********              INS\
3847 TALLATION SUMMARY          *****************\\n\";\
3848 \nprint \"****************************************\
3849 *****************************\\n\";\nprint \"-----\
3850 -- SUMMARY package Installation:\\n\";\nforeach my\
3851  $pg (keys(%PG))\n  {\n    if ( $PG{$pg}{install})\
3852 \n      {\n     my $bin_status=($PG{$pg}{from_binary} \
3853 && $PG{$pg}{success})?\"[from binary]\":\"\";\n if\
3854      ( $PG{$pg}{new} && !$PG{$pg}{old})           \
3855           {print \"*------        $PG{$pg}{dname}:\
3856  installed $bin_status\\n\"; $PG{$pg}{status}=1;}\\
3857 n       elsif  ( $PG{$pg}{new} &&  $PG{$pg}{old})       \
3858               {print \"*------        $PG{$pg}{dna\
3859 me}: updated $bin_status\\n\"  ; $PG{$pg}{status}=\
3860 1;} \n  elsif  (!$PG{$pg}{new} &&  $PG{$pg}{old} &&\
3861  !$PG{$pg}{update}){print \"*------        $PG{$pg\
3862 }{dname}: previous\\n\" ; $PG{$pg}{status}=1;}\n        e\
3863 lsif  (!$PG{$pg}{new} &&  $PG{$pg}{old} &&  $PG{$p\
3864 g}{update}){print \"*------        $PG{$pg}{dname}\
3865 : failed update (previous installation available)\\
3866 \n\";$PG{$pg}{status}=0;}\n     else                  \
3867                                         {print \"*\
3868 ------        $PG{$pg}{dname}: failed installation\
3869 \";$PG{$pg}{status}=0;}\n      }\n  }\n\nif ( !$PG\
3870 {$target}){print \"*------ SUMMARY mode Installati\
3871 on:\\n\";}\nforeach my $m (keys(%MODE))\n  {\n    \
3872 if ( $target eq \"all\" || $target eq $m)\n      {\
3873 \n      my $succesful=1;\n      foreach my $pg (keys(%PG))\n\
3874           {\n       if (($PG{$pg}{mode}=~/$m/) && $PG{$pg}{\
3875 install} && $PG{$pg}{status}==0)\n            {\n               $suc\
3876 cesful=0;\n             print \"*!!!!!!       $PG{$pg}{dname}\
3877 : Missing\\n\";\n             }\n         }\n   if ( $succesful)\
3878 \n        {\n       $MODE{$m}{status}=1;\n          print \"*-\
3879 -----       MODE $MODE{$m}{dname} SUCCESFULY insta\
3880 lled\\n\";\n      }\n   else\n    {\n       $MODE{$m}{stat\
3881 us}=0;\n            print \"*!!!!!!       MODE $MODE{$m}{\
3882 dname} UNSUCCESFULY installed\\n\";\n     }\n      }\
3883 \n  }\n\nif ($clean==1 && ($BASE=~/install4tcoffee\
3884 /) ){print \"*------ Clean Installation Directory:\
3885  $BASE\\n\";`rm -rf $BASE`;}\nforeach my $pg (keys\
3886 (%PG)){if ($PG{$pg}{install} && $PG{$pg}{status}==\
3887 0){exit ($EXIT_FAILURE);}}\nexit ($EXIT_SUCCESS); \
3888  \n\nsub get_CXX_compiler\n  {\n    my $c=@_[0];\n\
3889     my (@clist)=(\"g++\");\n    \n    return get_c\
3890 ompil ($c, @clist);\n }\nsub get_C_compiler\n  {\n\
3891     my $c=@_[0];\n    my (@clist)=(\"gcc\", \"cc\"\
3892 , \"icc\");\n    \n    return get_compil ($c, @cli\
3893 st);\n }\n\nsub get_F_compiler\n  {\n    my ($c)=@\
3894 _[0];\n    my @clist=(\"f77\", \"g77\", \"gfortran\
3895 \", \"ifort\");\n    return get_compil ($c, @clist\
3896 );\n  } \n       \nsub get_compil\n  {\n    my ($f\
3897 av,@clist)=(@_);\n    \n    #return the first comp\
3898 iler found installed in the system. Check first th\
3899 e favorite\n    foreach my $c ($fav,@clist)\n     \
3900  {\n    if  (&pg_is_installed ($c)){return $c;}\n    \
3901   }\n    return \"\";\n  }\nsub exit_if_pg_not_ins\
3902 talled\n  {\n    my (@arg)=(@_);\n    \n    foreac\
3903 h my $p (@arg)\n      {\n       if ( !&pg_is_installed (\
3904 $p))\n    {\n       print \"!!!!!!!! The $p utility m\
3905 ust be installed for this installation to proceed \
3906 [FATAL]\\n\";\n     die;\n        }\n      }\n    retur\
3907 n 1;\n  }\nsub set_proxy\n  {\n    my ($proxy)=(@_\
3908 );\n    my (@list,$p);\n    \n    @list= (\"HTTP_p\
3909 roxy\", \"http_proxy\", \"HTTP_PROXY\", \"ALL_prox\
3910 y\", \"all_proxy\",\"HTTP_proxy_4_TCOFFEE\",\"http\
3911 _proxy_4_TCOFFEE\");\n    \n    if (!$proxy)\n    \
3912   {\n   foreach my $p (@list)\n   {\n       if ( ($ENV\
3913 _SET{$p}) || $ENV{$p}){$proxy=$ENV{$p};}\n        }\n  \
3914     }\n    foreach my $p(@list){$ENV{$p}=$proxy;}\\
3915 n  }\n  \nsub check_internet_connection\n  {\n    m\
3916 y $internet;\n    \n    if ( -e \"x\"){unlink (\"x\
3917 \");}\n    if     (&pg_is_installed    (\"wget\"))\
3918 {`wget www.google.com -Ox >/dev/null 2>/dev/null`;\
3919 }\n    elsif  (&pg_is_installed    (\"curl\")){`cu\
3920 rl www.google.com -ox >/dev/null 2>/dev/null`;}\n \
3921    else\n      {\n      printf stderr \"\\nERROR: No pg\
3922  for remote file fetching [wget or curl][FATAL]\\n\
3923 \";\n   exit ($EXIT_FAILURE);\n      }\n    \n    if\
3924  ( !-e \"x\" || -s \"x\" < 10){$internet=0;}\n    \
3925 else {$internet=1;}\n    if (-e \"x\"){unlink \"x\\
3926 ";}\n    return $internet;\n  }\nsub url2file\n  {\
3927 \n    my ($cmd, $file,$wget_arg, $curl_arg)=(@_);\\
3928 n    my ($exit,$flag, $pg, $arg);\n    \n    if ($\
3929 INTERNET || check_internet_connection ()){$INTERNE\
3930 T=1;}\n    else\n      {\n      print STDERR \"ERROR: N\
3931 o Internet Connection [FATAL:install.pl]\\n\";\n        e\
3932 xit ($EXIT_FAILURE);\n      }\n    \n    if     (&\
3933 pg_is_installed    (\"wget\")){$pg=\"wget\"; $flag\
3934 =\"-O\";$arg=$wget_arg;}\n    elsif  (&pg_is_insta\
3935 lled    (\"curl\")){$pg=\"curl\"; $flag=\"-o\";$ar\
3936 g=$curl_arg;}\n    else\n      {\n      printf stderr \\
3937 "\\nERROR: No pg for remote file fetching [wget or\
3938  curl][FATAL]\\n\";\n   exit ($EXIT_FAILURE);\n     \
3939  }\n    \n    \n    if (-e $file){unlink($file);}\\
3940 n    $exit=system \"$pg $cmd $flag$file $arg\";\n \
3941    return $exit;\n  }\n\nsub pg_is_installed\n  {\\
3942 n    my ($p, $dir)=(@_);\n    my ($r,$m);\n    my \
3943 ($supported, $language, $compil);\n    \n    if ( \
3944 $PG{$p})\n      {\n     $language=$PG{$p}{language2};\\
3945 n       $compil=$PG{$language}{compiler};\n      }\n    \
3946 \n    if ( $compil eq \"CPAN\")\n      {\n      if ( sy\
3947 stem (\"perl -M$p -e 1\")==$EXIT_SUCCESS){return 1\
3948 ;}\n    else {return 0;}\n      }\n    elsif ($dir)\n\
3949       {\n       if (-e \"$dir/$p\" || -e \"$dir/$p\\.exe\
3950 \"){return 1;}\n        else {return 0;}\n      }\n    el\
3951 sif (-e \"$PLUGINS_DIR/$p\" || -e \"$PLUGINS_DIR/$\
3952 p.exe\"){return 1;}\n    else\n      {\n        $r=`which\
3953  $p 2>/dev/null`;\n     if ($r eq \"\"){return 0;}\n    e\
3954 lse {return 1;}\n      }\n    return 0;\n  }\nsub \
3955 install\n  {\n    my ($new_bin)=(@_);\n    my ($co\
3956 pied, $report);\n\n    \n    if (!$ROOT_INSTALL)\n\
3957       {\n       \n      if (-e \"$BIN/t_coffee\"){`$CP $BIN/t\
3958 _coffee $INSTALL_DIR`};\n       `cp $BIN/* $PLUGINS_DIR`\
3959 ;\n     $copied=1;\n      }\n    else\n      {\n        $copi\
3960 ed=&root_run (\"You must be root to finalize the i\
3961 nstallation\", \"$CP $BIN/* $INSTALL_DIR $SILENT\"\
3962 );\n      }\n    \n     \n  if ( !$copied)\n    {\\
3963 n      $report=\"*!!!!!! Installation unsuccesful.\
3964  The executables have been left in $BASE/bin\\n\";\
3965 \n    }\n  elsif ( $copied && $ROOT)\n    {\n     \
3966  $report=\"*------ Installation succesful. Your ex\
3967 ecutables have been copied in $new_bin and are on \
3968 your PATH\\n\";\n    }\n  elsif ( $copied && !$ROO\
3969 T)\n    {\n      $report= \"*!!!!!! T-Coffee and a\
3970 ssociated packages have been copied in: $new_bin\\\
3971 n\";\n      $report.=\"*!!!!!! This address is NOT\
3972  in your PATH sytem variable\\n\";\n      $report.\
3973 =\"*!!!!!! You can do so by adding the following l\
3974 ine in your ~/.bashrc file:\\n\";\n      $report.=\
3975 \"*!!!!!! export PATH=$new_bin:\\$PATH\\n\";\n    \
3976 }\n  return $report;\n}\n\nsub sign_license_ni\n  \
3977 {\n    my $F=new FileHandle;\n    open ($F, \"lice\
3978 nse.txt\");\n    while (<$F>)\n      {\n        print \"$\
3979 _\";\n      }\n    close ($F);\n    \n    return;\\
3980 n  }\n\nsub install_pg\n  {\n    my ($pg)=(@_);\n \
3981    my ($report, $previous, $language, $compiler, $\
3982 return);\n    \n    if (!$PG{$pg}{install}){return\
3983  1;}\n    \n    $previous=&pg_is_installed ($pg);\\
3984 n    \n    if ($PG{$pg}{update_action} eq \"no_upd\
3985 ate\" && $previous)\n      {\n  $PG{$pg}{old}=1;\n      \
3986 $PG{$pg}{new}=0;\n      $return=1;\n      }\n    else\n\
3987       {\n       $PG{$pg}{old}=$previous;\n      \n      if ($PG{$p\
3988 g} {language2} eq \"Perl\"){&install_perl_package \
3989 ($pg);}\n       elsif ($BINARIES_ONLY && &install_binary\
3990 _package ($pg)){$PG{$pg}{from_binary}=1;}\n     elsif \
3991 (&install_source_package ($pg)){;}\n    else \n   {\n\
3992             \n      if (!&supported_os($OS))\n        {\n               \
3993 print \"!!!!!!!! $pg compilation failed, binary un\
3994 supported for $OS\\n\"; \n            }\n           elsif (!(\
3995 $PG{$pg}{from_binary}=&install_binary_package ($pg\
3996 )))\n         {\n               print \"!!!!!!!! $pg compilation \
3997 and  binary installation failed\\n\";\n       }\n       \
3998   }\n   $PG{$pg}{new}=$return=&pg_is_installed ($pg,\
3999 $BIN);\n      }\n\n    \n    return $return;\n  }\\
4000 nsub install_perl_package\n  {\n    my ($pg)=(@_);\
4001 \n    my ($report, $language, $compiler);\n    \n \
4002    $language=$PG{$pg} {language2};\n    $compiler=\
4003 $PG{$language}{compiler};\n    \n    if (!&pg_is_i\
4004 nstalled ($pg))\n      {\n      if ( $OS eq \"windows\"\
4005 ){`perl -M$compiler -e 'install $pg'`;}\n       elsif ( \
4006 $ROOT eq \"sudo\"){system (\"sudo perl -M$compiler\
4007  -e 'install $pg'\");}\n        else {system (\"su root -\
4008 c perl -M$compiler -e 'install $pg'\");}\n      }\\
4009 n    return &pg_is_installed ($pg);\n  }\n\n\n\nsu\
4010 b install_source_package\n  {\n    my ($pg)=(@_);\\
4011 n    my ($report, $download, $arguments, $language\
4012 , $address, $name, $ext, $main_dir, $distrib);\n  \
4013   my $wget_tmp=\"$TMP/wget.tmp\";\n    my (@fl);\n\
4014     if ( -e \"$BIN/$pg\" || -e \"$BIN/$pg.exe\"){r\
4015 eturn 1;}\n    \n    if ($pg eq \"t_coffee\")  {re\
4016 turn   &install_t_coffee ($pg);}\n    elsif ($pg e\
4017 q \"TMalign\"){return   &install_TMalign ($pg);}\n\
4018     \n    chdir $DISTRIBUTIONS;\n    \n    $downlo\
4019 ad=$PG{$pg}{source};\n    \n    if (($download =~/\
4020 tgz/))\n      {\n       ($address,$name,$ext)=($download\
4021 =~/(.+\\/)([^\\/]+)(\\.tgz)/);\n      }\n    elsif\
4022  (($download=~/tar\\.gz/))\n      {\n   ($address,$n\
4023 ame,$ext)=($download=~/(.+\\/)([^\\/]+)(\\.tar\\.g\
4024 z)/);\n      }\n    elsif (($download=~/tar/))\n  \
4025     {\n ($address,$name,$ext)=($download=~/(.+\\/)\
4026 ([^\\/]+)(\\.tar)/);\n      }\n    else\n      {\n\
4027         ($address,$name)=($download=~/(.+\\/)([^\\/]+)/);\
4028 \n      $ext=\"\";\n      }\n    $distrib=\"$name$ext\"\
4029 ;\n    \n    if ( !-d $pg){mkdir $pg;}\n    chdir \
4030 $pg;\n   \n    #get the distribution if available\\
4031 n    if ( -e \"$DOWNLOAD_DIR/$distrib\")\n      {\\
4032 n       `$CP $DOWNLOAD_DIR/$distrib .`;\n      }\n    #U\
4033 NTAR and Prepare everything\n    if (!-e \"$name.t\
4034 ar\" && !-e \"$name\")\n      {\n       &check_rm ($wget\
4035 _tmp);\n        print \"\\n------- Downloading/Installing\
4036  $pg\\n\";\n    if (!-e $distrib && &url2file (\"$dow\
4037 nload\", \"$wget_tmp\")==$EXIT_SUCCESS)\n         {\n     \
4038   \n        `mv $wget_tmp $distrib`;\n      `$CP $dist\
4039 rib $DOWNLOAD_DIR/`;\n    }\n\n if (!-e $distrib)\n\
4040           {\n       print \"!!!!!!! Download of $pg distrib\
4041 ution failed\\n\";\n        print \"!!!!!!! Check Add\
4042 ress: $PG{$pg}{source}\\n\";\n      return 0;\n   }\
4043 \n      print \"\\n------- unzipping/untaring $name\\n\\
4044 ";\n    if (($ext =~/z/))\n       { \n      &flush_command\
4045  (\"gunzip $name$ext\");\n          \n    }\n   if (($ext \
4046 =~/tar/) || ($ext =~/tgz/))\n     {\n       &flush_com\
4047 mand(\"tar -xvf $name.tar\");\n   }\n      }\n    \
4048 #Guess and enter the distribution directory\n    @\
4049 fl=ls($p);\n    foreach my $f (@fl)\n      {\n  if \
4050 (-d $f)\n         {\n       $main_dir=$f;\n       }\n      }\n\
4051     if (-d $main_dir)\n   {chdir $main_dir;}\n    \
4052 \n    print \"\\n------- Compiling/Installing $pg\\
4053 \n\";\n    `make clean $SILENT`;\n    #sap\n    if\
4054  ($pg eq \"sap\")\n      {\n    `rm *.o sap  sap.exe \
4055 ./util/aa/*.o  ./util/wt/.o $SILENT`;\n &flush_com\
4056 mand (\"make $arguments sap\");\n       &check_cp ($pg, \
4057 \"$BIN\");\n      }\n    elsif ($pg eq \"clustalw2\
4058 \")\n      {\n  &flush_command(\"./configure\");\n      \
4059 &flush_command(\"make $arguments\");\n  &check_cp (\
4060 \"./src/$pg\", \"$BIN\");\n     \n      }\n    elsif (\
4061 $pg eq \"clustalw\")\n      {\n &flush_command(\"m\
4062 ake $arguments clustalw\");\n   `$CP $pg $BIN $SILEN\
4063 T`;\n      }\n    \n    elsif ($pg eq \"mafft\")\n\
4064       {\n       my $base=cwd();\n       my $c;\n        \n      #compile c\
4065 ore\n   mkpath (\"./mafft/bin\");\n     mkpath (\"./maff\
4066 t/lib\");\n     chdir \"$base/core\";\n `make clean $S\
4067 ILENT`;\n       &flush_command (\"make $arguments\");\n \
4068 &flush_command (\"make install LIBDIR=../mafft/lib\
4069  BINDIR=../mafft/bin\");\n      \n      #compile extension\n\
4070         chdir \"$base/extensions\";\n   `make clean $SILENT\
4071 `;\n    &flush_command (\"make $arguments\");\n &flus\
4072 h_command (\"make install LIBDIR=../mafft/lib BIND\
4073 IR=../mafft/bin\");\n   \n      #put everything in mafft \
4074 and copy the coompiled stuff in bin\n   chdir \"$bas\
4075 e\";\n  if ($ROOT_INSTALL)\n      {\n       &root_run (\\
4076 "You Must be Roor to Install MAFFT\\n\", \"mkdir /\
4077 usr/local/mafft/;$CP mafft/lib/* /usr/local/mafft;\
4078 $CP mafft/lib/mafft* /usr/local/bin ;$CP mafft/bin\
4079 /mafft /usr/local/bin/; \");\n    }\n   else\n    {\n   \
4080     `$CP mafft/lib/*  $BIN`;\n      `$CP mafft/bin/\
4081 mafft  $BIN`;\n   }\n   `tar -cvf mafft.tar mafft`;\\
4082 n       `gzip mafft.tar`;\n     `mv mafft.tar.gz $BIN`;\n   \
4083    }\n    elsif ( $pg eq \"dialign-tx\")\n      {\\
4084 n       my $f;\n        my $base=cwd();\n\n     chdir \"./source\";\
4085 \n      &flush_command (\" make CPPFLAGS='-O3 -funroll-\
4086 loops' all\");\n        \n      chdir \"..\";\n &check_cp (\".\
4087 /source/$pg\", \"$BIN\");\n     &check_cp (\"./source/\
4088 $pg\", \"$BIN/dialign-t\");\n      }\n    elsif ($\
4089 pg eq \"poa\")\n      {\n       &flush_command (\"make $\
4090 arguments poa\");\n     &check_cp (\"$pg\", \"$BIN\");\
4091 \n      }\n    elsif ( $pg eq \"probcons\")\n     \
4092  {\n    `rm *.exe $SILENT`;\n   &flush_command (\"make \
4093 $arguments probcons\");\n       &check_cp(\"$pg\", \"$BI\
4094 N/$pg\");\n      }\n    elsif ( $pg eq \"probcons\\
4095 " || $pg eq \"probconsRNA\")\n      {\n `rm *.exe \
4096 $SILENT`;\n     &flush_command (\"make $arguments prob\
4097 cons\");\n      &check_cp(\"probcons\", \"$BIN/$pg\");\\
4098 n      }\n\n    elsif (  $pg eq \"muscle\")\n     \
4099  {\n    `rm *.o muscle muscle.exe $SILENT`;\n   &flush_\
4100 command (\"make $arguments all\");\n    &check_cp(\"$\
4101 pg\", \"$BIN\");\n      }\n    elsif ( $pg eq \"pc\
4102 ma\")\n      {\n        &flush_command (\"make $arguments\
4103  pcma\");\n     &check_cp(\"$pg\", \"$BIN\");\n      }\
4104 \n    elsif ($pg eq \"kalign\")\n      {\n      &flush_\
4105 command (\"./configure\");\n    &flush_command(\"make\
4106  $arguments\");\n       &check_cp (\"$pg\",$BIN);\n     \
4107  }\n    elsif ( $pg eq \"amap\")\n      {\n     chdir \
4108 \"align\";\n    `make clean $SILENT`;\n &flush_comman\
4109 d (\"make $arguments all\");\n  &check_cp (\"$pg\",\
4110  $BIN);\n      }\n    elsif ( $pg eq \"proda\")\n \
4111      {\n        &flush_command (\"make $arguments all\");\
4112 \n      &check_cp (\"$pg\", $BIN);\n      }\n    elsif \
4113 ( $pg eq \"prank\")\n      {\n  &flush_command (\"m\
4114 ake $arguments all\");\n        &check_cp (\"$pg\", $BIN)\
4115 ;\n      }\n    elsif ( $pg eq \"mustang\")\n     \
4116  {\n    &flush_command (\"make $arguments all\");\n     i\
4117 f ( $OS=~/windows/){&check_cp(\"./bin/MUSTANG_v.3\\
4118 ", \"$BIN/mustang.exe\");}\n    else {&check_cp(\"./b\
4119 in/MUSTANG_v.3\", \"$BIN/mustang\");}\n      }\n  \
4120   elsif ( $pg eq \"RNAplfold\")\n      {\n      &flush_\
4121 command(\"./configure\");\n     &flush_command (\"make\
4122  $arguments all\");\n   &check_cp(\"./Progs/RNAplfol\
4123 d\", \"$BIN\");\n      }\n    chdir $CDIR;\n    re\
4124 turn &pg_is_installed ($pg, $BIN);\n  }\n\nsub ins\
4125 tall_t_coffee\n  {\n    my ($pg)=(@_);\n    my ($r\
4126 eport,$cflags, $arguments, $language, $compiler) ;\
4127 \n    #1-Install T-Coffee\n    chdir \"t_coffee_so\
4128 urce\";\n    &flush_command (\"make clean\");\n   \
4129  print \"\\n------- Compiling T-Coffee\\n\";\n    \
4130 $language=$PG{$pg} {language2};\n    $arguments=$P\
4131 G{$language}{arguments};\n    if (!($arguments =~/\
4132 CFLAGS/)){$arguments .= \" CFLAGS=-O2 \";}\n\n    \
4133 if ( $CC ne \"\"){&flush_command (\"make -i $argum\
4134 ents t_coffee\");}\n    &check_cp ($pg, $BIN);\n  \
4135   \n    chdir $CDIR;\n    return &pg_is_installed \
4136 ($pg, $BIN);\n  }\nsub install_TMalign\n  {\n    m\
4137 y ($pg)=(@_);\n    my $report;\n    chdir \"t_coff\
4138 ee_source\";\n    print \"\\n------- Compiling TMa\
4139 lign\\n\";\n    `rm TMalign TMalign.exe $SILENT`;\\
4140 n    if ( $FC ne \"\"){&flush_command (\"make -i $\
4141 PG{Fortran}{arguments} TMalign\");}\n    &check_cp\
4142  ($pg, $BIN);\n    if ( !-e \"$BIN/$pg\" && pg_has\
4143 _binary_distrib ($pg))\n      {\n       print \"!!!!!!! \
4144 Compilation of $pg impossible. Will try to install\
4145  from binary\\n\";\n    return &install_binary_packag\
4146 e ($pg);\n      }\n    chdir $CDIR;\n    return &p\
4147 g_is_installed ($pg, $BIN);\n  }\n\nsub pg_has_bin\
4148 ary_distrib\n  {\n    my ($pg)=(@_);\n    if ($PG{\
4149 $pg}{windows}){return 1;}\n    elsif ($PG{$pg}{osx\
4150 }){return 1;}\n    elsif ($PG{$pg}{linux}){return \
4151 1;}\n    return 0;\n  }\nsub install_binary_packag\
4152 e\n  {\n    my ($pg)=(@_);\n    my ($base,$report,\
4153 $name, $download, $arguments, $language, $dir);\n \
4154    my $isdir;\n    &input_os();\n    \n    if (!&s\
4155 upported_os($OS)){return 0;}\n    if ( $PG{$pg}{bi\
4156 nary}){$name=$PG{$pg}{binary};}\n    else \n      \
4157 {\n     $name=$pg;\n    if ( $OS eq \"windows\"){$name.=\\
4158 ".exe\";}\n      }\n    \n    $download=\"$WEB_BAS\
4159 E/Packages/Binaries/$OS/$name\";\n    \n    $base=\
4160 cwd();\n    chdir $TMP;\n    \n    if (!-e $name)\\
4161 n      {\n      `rm x $SILENT`;\n       if ( url2file(\"$down\
4162 load\",\"x\")==$EXIT_SUCCESS)\n   {\n       `mv x $n\
4163 ame`;\n   }\n      }\n    \n    if (!-e $name)\n  \
4164     {\n print \"!!!!!!! $PG{$pg}{dname}: Download \
4165 of $pg binary failed\\n\";\n    print \"!!!!!!! $PG{$\
4166 pg}{dname}: Check Address: $download\\n\";\n    retur\
4167 n 0;\n      }\n    print \"\\n------- Installing $\
4168 pg\\n\";\n    \n    if ($name =~/tar\\.gz/)\n     \
4169  {\n    `gunzip  $name`;\n      `tar -xvf $pg.tar`;\n   chdi\
4170 r $pg;\n        if ( $pg eq \"mafft\")\n          {\n       if ($R\
4171 OOT_INSTALL)\n        {\n               &root_run (\"You Must be\
4172  Roor to Install MAFFT\\n\", \"$CP mafft/bin/* /us\
4173 r/local/mafft;mkdir /usr/local/mafft/; $CP mafft/l\
4174 ib/* /usr/local/bin/\");\n            }\n           else\n        \
4175     {\n         `$CP $TMP/$pg/bin/* $BIN $SILENT`;\n            `$C\
4176 P $TMP/$pg/lib/* $BIN $SILENT`;\n             }\n         }\n   \
4177 else\n    {\n       if (-e \"$TMP/$pg/data\"){`$CP $T\
4178 MP/$pg/data/* $TCM $SILENT`;}\n     if (!($pg=~/\\\
4179 */)){`rm -rf $pg`;}\n     }\n      }\n    else\n    \
4180   {\n   &check_cp (\"$pg\", \"$BIN\");\n        `chmod u+x \
4181 $BIN/$pg`; \n   unlink ($pg);\n      }\n    chdir $b\
4182 ase;\n    $PG{$pg}{from_binary}=1;\n    return &pg\
4183 _is_installed ($pg, $BIN);\n  }\n\nsub add_dir \n \
4184  {\n    my $dir=@_[0];\n    \n    if (!-e $dir && \
4185 !-d $dir)\n      {\n    return mkpath ($dir);\n      \
4186 }\n    else\n      {\n  return 0;\n      }\n  }\nsu\
4187 b check_rm \n  {\n    my ($file)=(@_);\n    \n    \
4188 if ( -e $file)\n      {\n       return unlink($file);\n \
4189      }\n    return 0;\n  }\nsub check_cp\n  {\n   \
4190  my ($from, $to)=(@_);\n    if ( !-e $from && -e \\
4191 "$from\\.exe\"){$from=\"$from\\.exe\";}\n    if ( \
4192 !-e $from){return 0;}\n        \n    `$CP $from $t\
4193 o`;\n    return 1;\n  }\nsub check_file_list_exist\
4194 s \n  {\n    my ($base, @flist)=(@_);\n    my $f;\\
4195 n\n    foreach $f (@flist)\n      {\n   if ( !-e \"$\
4196 base/$f\"){return 0;}\n      }\n    return 1;\n  }\
4197 \nsub ls\n  {\n    my $f=@_[0];\n    my @fl;\n    \
4198 chomp(@fl=`ls -1 $f`);\n    return @fl;\n  }\nsub \
4199 flush_command\n  {\n    my $command=@_[0];\n    my\
4200  $F=new FileHandle;\n    open ($F, \"$command|\");\
4201 \n    while (<$F>){print \"    --- $_\";}\n    clo\
4202 se ($F);\n  }    \n\nsub input_installation_direct\
4203 ory\n  {\n    my $dir=@_[0];\n    my $new;\n    \n\
4204     print \"------- The current installation direc\
4205 tory is: [$dir]\\n\";\n    print \"??????? Return \
4206 to keep the default or new value:\";\n   \n    if \
4207 ($NO_QUESTION==0)\n      {\n    chomp ($new=<stdin>);\
4208 \n      while ( $new ne \"\" && !input_yes (\"You have \
4209 entered $new. Is this correct? ([y]/n):\"))\n     {\\
4210 n           print \"???????New installation directory:\"\
4211 ;\n         chomp ($new=<stdin>);\n       }\n   $dir=($new e\
4212 q \"\")?$dir:$new;\n    $dir=~s/\\/$//;\n      }\n   \
4213  \n    if ( -d $dir){return $dir;}\n    elsif (&ro\
4214 ot_run (\"You must be root to create $dir\",\"mkdi\
4215 r $dir\")==$EXIT_SUCCESS){return $dir;}\n    else\\
4216 n      {\n      print \"!!!!!!! $dir could not be creat\
4217 ed\\n\";\n      if ( $NO_QUESTION)\n      {\n       return \\
4218 "\";\n    }\n   elsif ( &input_yes (\"??????? Do you \
4219 want to provide a new directory([y]/n)?:\"))\n    {\
4220 \n          return input_installation_directory ($dir);\
4221 \n        }\n   else\n    {\n       return \"\";\n        }\n    \
4222   }\n    \n  }\nsub input_yes\n  {\n    my $questi\
4223 on =@_[0];\n    my $answer;\n\n    if ($NO_QUESTIO\
4224 N==1){return 1;}\n    \n    if ($question eq \"\")\
4225 {$question=\"??????? Do you wish to proceed ([y]/n\
4226 )?:\";}\n    print $question;\n    chomp($answer=l\
4227 c(<STDIN>));\n    if (($answer=~/^y/) || $answer e\
4228 q \"\"){return 1;}\n    elsif ( ($answer=~/^n/)){r\
4229 eturn 0;}\n    else\n      {\n  return input_yes($q\
4230 uestion);\n      }\n  }\nsub root_run\n  {\n    my\
4231  ($txt, $cmd)=(@_);\n    \n    if ( system ($cmd)=\
4232 =$EXIT_SUCCESS){return $EXIT_SUCCESS;}\n    else \\
4233 n      {\n      print \"------- $txt\\n\";\n    if ( $ROOT\
4234  eq \"sudo\"){return system (\"sudo $cmd\");}\n el\
4235 se {return system (\"su root -c \\\"$cmd\\\"\");}\\
4236 n      }\n  }\nsub get_root\n  {\n    if (&pg_is_i\
4237 nstalled (\"sudo\")){return \"sudo\";}\n    else {\
4238 return \"su\";}\n  }\n\nsub get_os\n  {\n    my $r\
4239 aw_os=`uname`;\n    my $os;\n\n    $raw_os=lc ($ra\
4240 w_os);\n    \n    if ($raw_os =~/cygwin/){$os=\"wi\
4241 ndows\";}\n    elsif ($raw_os =~/linux/){$os=\"lin\
4242 ux\";}\n    elsif ($raw_os =~/osx/){$os=\"macosx\"\
4243 ;}\n    elsif ($raw_os =~/darwin/){$os=\"macosx\";\
4244 }\n    else\n      {\n  $os=$raw_os;\n      }\n    \
4245 return $os;\n  }\nsub input_os\n  {\n    my $answe\
4246 r;\n    if ($OS) {return $OS;}\n    \n    print \"\
4247 ??????? which os do you use: [w]indows, [l]inux, [\
4248 m]acosx:?\";\n    $answer=lc(<STDIN>);\n\n    if (\
4249 ($answer=~/^m/)){$OS=\"macosx\";}\n    elsif ( ($a\
4250 nswer=~/^w/)){$OS=\"windows\";}\n    elsif ( ($ans\
4251 wer=~/^linux/)){$OS=\"linux\";}\n    \n    else\n \
4252      {\n        return &input_os();\n      }\n    return \
4253 $OS;\n  }\n\nsub supported_os\n  {\n    my ($os)=(\
4254 @_[0]);\n    return $SUPPORTED_OS{$os};\n  }\n    \
4255 \n    \n\n\nsub update_tclinkdb \n  {\n    my $fil\
4256 e =@_[0];\n    my $name;\n    my $F=new FileHandle\
4257 ;\n    my ($download, $address, $name, $l, $db);\n\
4258     \n    if ( $file eq \"update\"){$file=$TCLINKD\
4259 B_ADDRESS;}\n    \n    if ( $file =~/http:\\/\\// \
4260 || $file =~/ftp:\\/\\//)\n      {\n     ($address, $na\
4261 me)=($download=~/(.*)\\/([^\\/]+)$/);\n `rm x $SIL\
4262 ENT`;\n if (&url2file ($file,\"x\")==$EXIT_SUCCESS\
4263 )\n       {\n       print \"------- Susscessful upload o\
4264 f $name\";\n        `mv x $name`;\n         $file=$name;\\
4265 n         }\n      }\n    open ($F, \"$file\");\n    whi\
4266 le (<$F>)\n      {\n    my $l=$_;\n     if (($l =~/^\\/\\\
4267 //) || ($db=~/^#/)){;}\n        elsif ( !($l =~/\\w/)){;}\
4268 \n      else\n    {\n       my @v=split (/\\s+/, $l);\n   \
4269   if ( $l=~/^MODE/)\n         {\n               $MODE{$v[1]}{$v[2\
4270 ]}=$v[3];\n           }\n           elsif ($l=~/^PG/)\n     \
4271   {\n           $PG{$v[1]}{$v[2]}=$v[3];\n            }\n         }\n \
4272      }\n    close ($F);\n    &post_process_PG();\n\
4273     return;\n  }\n\n\n\nsub initialize_PG\n  {\n  \
4274   \n$PG{\"t_coffee\"}{\"4_TCOFFEE\"}=\"TCOFFEE\";\\
4275 n$PG{\"t_coffee\"}{\"type\"}=\"sequence_multiple_a\
4276 ligner\";\n$PG{\"t_coffee\"}{\"ADDRESS\"}=\"http:/\
4277 /www.tcoffee.org\";\n$PG{\"t_coffee\"}{\"language\\
4278 "}=\"C\";\n$PG{\"t_coffee\"}{\"language2\"}=\"C\";\
4279 \n$PG{\"t_coffee\"}{\"source\"}=\"http://www.tcoff\
4280 ee.org/Packages/T-COFFEE_distribution.tar.gz\";\n$\
4281 PG{\"t_coffee\"}{\"update_action\"}=\"always\";\n$\
4282 PG{\"t_coffee\"}{\"mode\"}=\"tcoffee,mcoffee,rcoff\
4283 ee,expresso,3dcoffee\";\n$PG{\"clustalw2\"}{\"4_TC\
4284 OFFEE\"}=\"CLUSTALW2\";\n$PG{\"clustalw2\"}{\"type\
4285 \"}=\"sequence_multiple_aligner\";\n$PG{\"clustalw\
4286 2\"}{\"ADDRESS\"}=\"http://www.clustal.org\";\n$PG\
4287 {\"clustalw2\"}{\"language\"}=\"C++\";\n$PG{\"clus\
4288 talw2\"}{\"language2\"}=\"CXX\";\n$PG{\"clustalw2\\
4289 "}{\"source\"}=\"http://www.clustal.org/download/2\
4290 .0.10/clustalw-2.0.10-src.tar.gz\";\n$PG{\"clustal\
4291 w2\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG{\"clusta\
4292 lw\"}{\"4_TCOFFEE\"}=\"CLUSTALW\";\n$PG{\"clustalw\
4293 \"}{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\
4294 \"clustalw\"}{\"ADDRESS\"}=\"http://www.clustal.or\
4295 g\";\n$PG{\"clustalw\"}{\"language\"}=\"C\";\n$PG{\
4296 \"clustalw\"}{\"language2\"}=\"C\";\n$PG{\"clustal\
4297 w\"}{\"source\"}=\"http://www.clustal.org/download\
4298 /1.X/ftp-igbmc.u-strasbg.fr/pub/ClustalW/clustalw1\
4299 .82.UNIX.tar.gz\";\n$PG{\"clustalw\"}{\"mode\"}=\"\
4300 mcoffee,rcoffee\";\n$PG{\"dialign-t\"}{\"4_TCOFFEE\
4301 \"}=\"DIALIGNT\";\n$PG{\"dialign-t\"}{\"type\"}=\"\
4302 sequence_multiple_aligner\";\n$PG{\"dialign-t\"}{\\
4303 "ADDRESS\"}=\"http://dialign-tx.gobics.de/\";\n$PG\
4304 {\"dialign-t\"}{\"DIR\"}=\"/usr/share/dialign-tx/\\
4305 ";\n$PG{\"dialign-t\"}{\"language\"}=\"C\";\n$PG{\\
4306 "dialign-t\"}{\"language2\"}=\"C\";\n$PG{\"dialign\
4307 -t\"}{\"source\"}=\"http://dialign-tx.gobics.de/DI\
4308 ALIGN-TX_1.0.1.tar.gz\";\n$PG{\"dialign-t\"}{\"mod\
4309 e\"}=\"mcoffee\";\n$PG{\"dialign-t\"}{\"binary\"}=\
4310 \"dialign-t\";\n$PG{\"dialign-tx\"}{\"4_TCOFFEE\"}\
4311 =\"DIALIGNTX\";\n$PG{\"dialign-tx\"}{\"type\"}=\"s\
4312 equence_multiple_aligner\";\n$PG{\"dialign-tx\"}{\\
4313 "ADDRESS\"}=\"http://dialign-tx.gobics.de/\";\n$PG\
4314 {\"dialign-tx\"}{\"DIR\"}=\"/usr/share/dialign-tx/\
4315 \";\n$PG{\"dialign-tx\"}{\"language\"}=\"C\";\n$PG\
4316 {\"dialign-tx\"}{\"language2\"}=\"C\";\n$PG{\"dial\
4317 ign-tx\"}{\"source\"}=\"http://dialign-tx.gobics.d\
4318 e/DIALIGN-TX_1.0.1.tar.gz\";\n$PG{\"dialign-tx\"}{\
4319 \"mode\"}=\"mcoffee\";\n$PG{\"dialign-tx\"}{\"bina\
4320 ry\"}=\"dialign-tx\";\n$PG{\"poa\"}{\"4_TCOFFEE\"}\
4321 =\"POA\";\n$PG{\"poa\"}{\"type\"}=\"sequence_multi\
4322 ple_aligner\";\n$PG{\"poa\"}{\"ADDRESS\"}=\"http:/\
4323 /www.bioinformatics.ucla.edu/poa/\";\n$PG{\"poa\"}\
4324 {\"language\"}=\"C\";\n$PG{\"poa\"}{\"language2\"}\
4325 =\"C\";\n$PG{\"poa\"}{\"source\"}=\"http://downloa\
4326 ds.sourceforge.net/poamsa/poaV2.tar.gz\";\n$PG{\"p\
4327 oa\"}{\"DIR\"}=\"/usr/share/\";\n$PG{\"poa\"}{\"FI\
4328 LE1\"}=\"blosum80.mat\";\n$PG{\"poa\"}{\"mode\"}=\\
4329 "mcoffee\";\n$PG{\"poa\"}{\"binary\"}=\"poa\";\n$P\
4330 G{\"probcons\"}{\"4_TCOFFEE\"}=\"PROBCONS\";\n$PG{\
4331 \"probcons\"}{\"type\"}=\"sequence_multiple_aligne\
4332 r\";\n$PG{\"probcons\"}{\"ADDRESS\"}=\"http://prob\
4333 cons.stanford.edu/\";\n$PG{\"probcons\"}{\"languag\
4334 e2\"}=\"CXX\";\n$PG{\"probcons\"}{\"language\"}=\"\
4335 C++\";\n$PG{\"probcons\"}{\"source\"}=\"http://pro\
4336 bcons.stanford.edu/probcons_v1_12.tar.gz\";\n$PG{\\
4337 "probcons\"}{\"mode\"}=\"mcoffee\";\n$PG{\"probcon\
4338 s\"}{\"binary\"}=\"probcons\";\n$PG{\"mafft\"}{\"4\
4339 _TCOFFEE\"}=\"MAFFT\";\n$PG{\"mafft\"}{\"type\"}=\\
4340 "sequence_multiple_aligner\";\n$PG{\"mafft\"}{\"AD\
4341 DRESS\"}=\"http://align.bmr.kyushu-u.ac.jp/mafft/o\
4342 nline/server/\";\n$PG{\"mafft\"}{\"language\"}=\"C\
4343 \";\n$PG{\"mafft\"}{\"language\"}=\"C\";\n$PG{\"ma\
4344 fft\"}{\"source\"}=\"http://align.bmr.kyushu-u.ac.\
4345 jp/mafft/software/mafft-6.603-with-extensions-src.\
4346 tgz\";\n$PG{\"mafft\"}{\"windows\"}=\"http://align\
4347 .bmr.kyushu-u.ac.jp/mafft/software/mafft-6.603-min\
4348 gw.tar\";\n$PG{\"mafft\"}{\"mode\"}=\"mcoffee,rcof\
4349 fee\";\n$PG{\"mafft\"}{\"binary\"}=\"mafft.tar.gz\\
4350 ";\n$PG{\"muscle\"}{\"4_TCOFFEE\"}=\"MUSCLE\";\n$P\
4351 G{\"muscle\"}{\"type\"}=\"sequence_multiple_aligne\
4352 r\";\n$PG{\"muscle\"}{\"ADDRESS\"}=\"http://www.dr\
4353 ive5.com/muscle/\";\n$PG{\"muscle\"}{\"language\"}\
4354 =\"C++\";\n$PG{\"muscle\"}{\"language2\"}=\"GPP\";\
4355 \n$PG{\"muscle\"}{\"source\"}=\"http://www.drive5.\
4356 com/muscle/downloads3.6/muscle3.6_src.tar.gz\";\n$\
4357 PG{\"muscle\"}{\"windows\"}=\"http://www.drive5.co\
4358 m/muscle/downloads3.6/muscle3.6_win32.zip\";\n$PG{\
4359 \"muscle\"}{\"linux\"}=\"http://www.drive5.com/mus\
4360 cle/downloads3.6/muscle3.6_linux_ia32.tar.gz\";\n$\
4361 PG{\"muscle\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG\
4362 {\"pcma\"}{\"4_TCOFFEE\"}=\"PCMA\";\n$PG{\"pcma\"}\
4363 {\"type\"}=\"sequence_multiple_aligner\";\n$PG{\"p\
4364 cma\"}{\"ADDRESS\"}=\"ftp://iole.swmed.edu/pub/PCM\
4365 A/\";\n$PG{\"pcma\"}{\"language\"}=\"C\";\n$PG{\"p\
4366 cma\"}{\"language2\"}=\"C\";\n$PG{\"pcma\"}{\"sour\
4367 ce\"}=\"ftp://iole.swmed.edu/pub/PCMA/pcma.tar.gz\\
4368 ";\n$PG{\"pcma\"}{\"mode\"}=\"mcoffee\";\n$PG{\"ka\
4369 lign\"}{\"4_TCOFFEE\"}=\"KALIGN\";\n$PG{\"kalign\"\
4370 }{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\"\
4371 kalign\"}{\"ADDRESS\"}=\"http://msa.cgb.ki.se\";\n\
4372 $PG{\"kalign\"}{\"language\"}=\"C\";\n$PG{\"kalign\
4373 \"}{\"language2\"}=\"C\";\n$PG{\"kalign\"}{\"sourc\
4374 e\"}=\"http://msa.cgb.ki.se/downloads/kalign/curre\
4375 nt.tar.gz\";\n$PG{\"kalign\"}{\"mode\"}=\"mcoffee\\
4376 ";\n$PG{\"amap\"}{\"4_TCOFFEE\"}=\"AMAP\";\n$PG{\"\
4377 amap\"}{\"type\"}=\"sequence_multiple_aligner\";\n\
4378 $PG{\"amap\"}{\"ADDRESS\"}=\"http://bio.math.berke\
4379 ley.edu/amap/\";\n$PG{\"amap\"}{\"language\"}=\"C+\
4380 +\";\n$PG{\"amap\"}{\"language2\"}=\"CXX\";\n$PG{\\
4381 "amap\"}{\"source\"}=\"http://baboon.math.berkeley\
4382 .edu/amap/download/amap.2.2.tar.gz\";\n$PG{\"amap\\
4383 "}{\"mode\"}=\"mcoffee\";\n$PG{\"proda\"}{\"4_TCOF\
4384 FEE\"}=\"PRODA\";\n$PG{\"proda\"}{\"type\"}=\"sequ\
4385 ence_multiple_aligner\";\n$PG{\"proda\"}{\"ADDRESS\
4386 \"}=\"http://proda.stanford.edu\";\n$PG{\"proda\"}\
4387 {\"language\"}=\"C++\";\n$PG{\"proda\"}{\"language\
4388 2\"}=\"CXX\";\n$PG{\"proda\"}{\"source\"}=\"http:/\
4389 /proda.stanford.edu/proda_1_0.tar.gz\";\n$PG{\"pro\
4390 da\"}{\"mode\"}=\"mcoffee\";\n$PG{\"prank\"}{\"4_T\
4391 COFFEE\"}=\"PRANK\";\n$PG{\"prank\"}{\"type\"}=\"s\
4392 equence_multiple_aligner\";\n$PG{\"prank\"}{\"ADDR\
4393 ESS\"}=\"http://www.ebi.ac.uk/goldman-srv/prank/\"\
4394 ;\n$PG{\"prank\"}{\"language\"}=\"C++\";\n$PG{\"pr\
4395 ank\"}{\"language2\"}=\"CXX\";\n$PG{\"prank\"}{\"s\
4396 ource\"}=\"http://www.ebi.ac.uk/goldman-srv/prank/\
4397 src/old/prank.src.081202.tgz\";\n$PG{\"prank\"}{\"\
4398 mode\"}=\"mcoffee\";\n$PG{\"sap\"}{\"4_TCOFFEE\"}=\
4399 \"SAP\";\n$PG{\"sap\"}{\"type\"}=\"structure_pairw\
4400 ise_aligner\";\n$PG{\"sap\"}{\"ADDRESS\"}=\"http:/\
4401 /mathbio.nimr.mrc.ac.uk/wiki/Software\";\n$PG{\"sa\
4402 p\"}{\"language\"}=\"C\";\n$PG{\"sap\"}{\"language\
4403 2\"}=\"C\";\n$PG{\"sap\"}{\"source\"}=\"http://www\
4404 .tcoffee.org/Packages/sap_distribution_TCC_0.6.tar\
4405 .gz\";\n$PG{\"sap\"}{\"mode\"}=\"expresso,3dcoffee\
4406 \";\n$PG{\"TMalign\"}{\"4_TCOFFEE\"}=\"TMALIGN\";\\
4407 n$PG{\"TMalign\"}{\"type\"}=\"structure_pairwise_a\
4408 ligner\";\n$PG{\"TMalign\"}{\"ADDRESS\"}=\"http://\
4409 zhang.bioinformatics.ku.edu/TM-align/TMalign.f\";\\
4410 n$PG{\"TMalign\"}{\"language\"}=\"Fortran\";\n$PG{\
4411 \"TMalign\"}{\"language2\"}=\"Fortran\";\n$PG{\"TM\
4412 align\"}{\"source\"}=\"http://zhang.bioinformatics\
4413 .ku.edu/TM-align/TMalign.f\";\n$PG{\"TMalign\"}{\"\
4414 linux\"}=\"http://zhang.bioinformatics.ku.edu/TM-a\
4415 lign/TMalign_32.gz\";\n$PG{\"TMalign\"}{\"mode\"}=\
4416 \"expresso,3dcoffee\";\n$PG{\"mustang\"}{\"4_TCOFF\
4417 EE\"}=\"MUSTANG\";\n$PG{\"mustang\"}{\"type\"}=\"s\
4418 tructure_pairwise_aligner\";\n$PG{\"mustang\"}{\"A\
4419 DDRESS\"}=\"http://www.cs.mu.oz.au/~arun/mustang\"\
4420 ;\n$PG{\"mustang\"}{\"language\"}=\"C++\";\n$PG{\"\
4421 mustang\"}{\"language2\"}=\"CXX\";\n$PG{\"mustang\\
4422 "}{\"source\"}=\"http://www.cs.mu.oz.au/~arun/must\
4423 ang/mustang_v.3.tgz\";\n$PG{\"mustang\"}{\"mode\"}\
4424 =\"expresso,3dcoffee\";\n$PG{\"lsqman\"}{\"4_TCOFF\
4425 EE\"}=\"LSQMAN\";\n$PG{\"lsqman\"}{\"type\"}=\"str\
4426 ucture_pairwise_aligner\";\n$PG{\"lsqman\"}{\"ADDR\
4427 ESS\"}=\"empty\";\n$PG{\"lsqman\"}{\"language\"}=\\
4428 "empty\";\n$PG{\"lsqman\"}{\"language2\"}=\"empty\\
4429 ";\n$PG{\"lsqman\"}{\"source\"}=\"empty\";\n$PG{\"\
4430 lsqman\"}{\"update_action\"}=\"never\";\n$PG{\"lsq\
4431 man\"}{\"mode\"}=\"expresso,3dcoffee\";\n$PG{\"ali\
4432 gn_pdb\"}{\"4_TCOFFEE\"}=\"ALIGN_PDB\";\n$PG{\"ali\
4433 gn_pdb\"}{\"type\"}=\"structure_pairwise_aligner\"\
4434 ;\n$PG{\"align_pdb\"}{\"ADDRESS\"}=\"empty\";\n$PG\
4435 {\"align_pdb\"}{\"language\"}=\"empty\";\n$PG{\"al\
4436 ign_pdb\"}{\"language2\"}=\"empty\";\n$PG{\"align_\
4437 pdb\"}{\"source\"}=\"empty\";\n$PG{\"align_pdb\"}{\
4438 \"update_action\"}=\"never\";\n$PG{\"align_pdb\"}{\
4439 \"mode\"}=\"expresso,3dcoffee\";\n$PG{\"fugueali\"\
4440 }{\"4_TCOFFEE\"}=\"FUGUE\";\n$PG{\"fugueali\"}{\"t\
4441 ype\"}=\"structure_pairwise_aligner\";\n$PG{\"fugu\
4442 eali\"}{\"ADDRESS\"}=\"http://www-cryst.bioc.cam.a\
4443 c.uk/fugue/download.html\";\n$PG{\"fugueali\"}{\"l\
4444 anguage\"}=\"empty\";\n$PG{\"fugueali\"}{\"languag\
4445 e2\"}=\"empty\";\n$PG{\"fugueali\"}{\"source\"}=\"\
4446 empty\";\n$PG{\"fugueali\"}{\"update_action\"}=\"n\
4447 ever\";\n$PG{\"fugueali\"}{\"mode\"}=\"expresso,3d\
4448 coffee\";\n$PG{\"dalilite.pl\"}{\"4_TCOFFEE\"}=\"D\
4449 ALILITEc\";\n$PG{\"dalilite.pl\"}{\"type\"}=\"stru\
4450 cture_pairwise_aligner\";\n$PG{\"dalilite.pl\"}{\"\
4451 ADDRESS\"}=\"built_in\";\n$PG{\"dalilite.pl\"}{\"A\
4452 DDRESS2\"}=\"http://www.ebi.ac.uk/Tools/webservice\
4453 s/services/dalilite\";\n$PG{\"dalilite.pl\"}{\"lan\
4454 guage\"}=\"Perl\";\n$PG{\"dalilite.pl\"}{\"languag\
4455 e2\"}=\"Perl\";\n$PG{\"dalilite.pl\"}{\"source\"}=\
4456 \"empty\";\n$PG{\"dalilite.pl\"}{\"update_action\"\
4457 }=\"never\";\n$PG{\"dalilite.pl\"}{\"mode\"}=\"exp\
4458 resso,3dcoffee\";\n$PG{\"probconsRNA\"}{\"4_TCOFFE\
4459 E\"}=\"PROBCONSRNA\";\n$PG{\"probconsRNA\"}{\"type\
4460 \"}=\"RNA_multiple_aligner\";\n$PG{\"probconsRNA\"\
4461 }{\"ADDRESS\"}=\"http://probcons.stanford.edu/\";\\
4462 n$PG{\"probconsRNA\"}{\"language\"}=\"C++\";\n$PG{\
4463 \"probconsRNA\"}{\"language2\"}=\"CXX\";\n$PG{\"pr\
4464 obconsRNA\"}{\"source\"}=\"http://probcons.stanfor\
4465 d.edu/probconsRNA.tar.gz\";\n$PG{\"probconsRNA\"}{\
4466 \"mode\"}=\"mcoffee,rcoffee\";\n$PG{\"sfold\"}{\"4\
4467 _TCOFFEE\"}=\"CONSAN\";\n$PG{\"sfold\"}{\"type\"}=\
4468 \"RNA_pairwise_aligner\";\n$PG{\"sfold\"}{\"ADDRES\
4469 S\"}=\"http://selab.janelia.org/software/consan/\"\
4470 ;\n$PG{\"sfold\"}{\"language\"}=\"empty\";\n$PG{\"\
4471 sfold\"}{\"language2\"}=\"empty\";\n$PG{\"sfold\"}\
4472 {\"source\"}=\"empty\";\n$PG{\"sfold\"}{\"update_a\
4473 ction\"}=\"never\";\n$PG{\"sfold\"}{\"mode\"}=\"rc\
4474 offee\";\n$PG{\"RNAplfold\"}{\"4_TCOFFEE\"}=\"RNAP\
4475 LFOLD\";\n$PG{\"RNAplfold\"}{\"type\"}=\"RNA_secon\
4476 darystructure_predictor\";\n$PG{\"RNAplfold\"}{\"A\
4477 DDRESS\"}=\"http://www.tbi.univie.ac.at/~ivo/RNA/\\
4478 ";\n$PG{\"RNAplfold\"}{\"language\"}=\"C\";\n$PG{\\
4479 "RNAplfold\"}{\"language2\"}=\"C\";\n$PG{\"RNAplfo\
4480 ld\"}{\"source\"}=\"http://www.tbi.univie.ac.at/~i\
4481 vo/RNA/ViennaRNA-1.7.2.tar.gz\";\n$PG{\"RNAplfold\\
4482 "}{\"mode\"}=\"rcoffee\";\n$PG{\"hmmtop\"}{\"4_TCO\
4483 FFEE\"}=\"HMMTOP\";\n$PG{\"hmmtop\"}{\"type\"}=\"p\
4484 rotein_secondarystructure_predictor\";\n$PG{\"hmmt\
4485 op\"}{\"ADDRESS\"}=\"www.enzim.hu/hmmtop/\";\n$PG{\
4486 \"hmmtop\"}{\"language\"}=\"C\";\n$PG{\"hmmtop\"}{\
4487 \"language2\"}=\"C\";\n$PG{\"hmmtop\"}{\"source\"}\
4488 =\"empty\";\n$PG{\"hmmtop\"}{\"update_action\"}=\"\
4489 never\";\n$PG{\"hmmtop\"}{\"mode\"}=\"tcoffee\";\n\
4490 $PG{\"gorIV\"}{\"4_TCOFFEE\"}=\"GOR4\";\n$PG{\"gor\
4491 IV\"}{\"type\"}=\"protein_secondarystructure_predi\
4492 ctor\";\n$PG{\"gorIV\"}{\"ADDRESS\"}=\"http://mig.\
4493 jouy.inra.fr/logiciels/gorIV/\";\n$PG{\"gorIV\"}{\\
4494 "language\"}=\"C\";\n$PG{\"gorIV\"}{\"language2\"}\
4495 =\"C\";\n$PG{\"gorIV\"}{\"source\"}=\"http://mig.j\
4496 ouy.inra.fr/logiciels/gorIV/GOR_IV.tar.gz\";\n$PG{\
4497 \"gorIV\"}{\"update_action\"}=\"never\";\n$PG{\"go\
4498 rIV\"}{\"mode\"}=\"tcoffee\";\n$PG{\"wublast.pl\"}\
4499 {\"4_TCOFFEE\"}=\"EBIWUBLASTc\";\n$PG{\"wublast.pl\
4500 \"}{\"type\"}=\"protein_homology_predictor\";\n$PG\
4501 {\"wublast.pl\"}{\"ADDRESS\"}=\"built_in\";\n$PG{\\
4502 "wublast.pl\"}{\"ADDRESS2\"}=\"http://www.ebi.ac.u\
4503 k/Tools/webservices/services/wublast\";\n$PG{\"wub\
4504 last.pl\"}{\"language\"}=\"Perl\";\n$PG{\"wublast.\
4505 pl\"}{\"language2\"}=\"Perl\";\n$PG{\"wublast.pl\"\
4506 }{\"source\"}=\"empty\";\n$PG{\"wublast.pl\"}{\"up\
4507 date_action\"}=\"never\";\n$PG{\"wublast.pl\"}{\"m\
4508 ode\"}=\"psicoffee,expresso,3dcoffee\";\n$PG{\"bla\
4509 stpgp.pl\"}{\"4_TCOFFEE\"}=\"EBIBLASTPGPc\";\n$PG{\
4510 \"blastpgp.pl\"}{\"type\"}=\"protein_homology_pred\
4511 ictor\";\n$PG{\"blastpgp.pl\"}{\"ADDRESS\"}=\"buil\
4512 t_in\";\n$PG{\"blastpgp.pl\"}{\"ADDRESS2\"}=\"http\
4513 ://www.ebi.ac.uk/Tools/webservices/services/blastp\
4514 gp\";\n$PG{\"blastpgp.pl\"}{\"language\"}=\"Perl\"\
4515 ;\n$PG{\"blastpgp.pl\"}{\"language2\"}=\"Perl\";\n\
4516 $PG{\"blastpgp.pl\"}{\"source\"}=\"empty\";\n$PG{\\
4517 "blastpgp.pl\"}{\"update_action\"}=\"never\";\n$PG\
4518 {\"blastpgp.pl\"}{\"mode\"}=\"psicoffee,expresso,3\
4519 dcoffee\";\n$PG{\"blastcl3\"}{\"4_TCOFFEE\"}=\"NCB\
4520 IWEBBLAST\";\n$PG{\"blastcl3\"}{\"type\"}=\"protei\
4521 n_homology_predictor\";\n$PG{\"blastcl3\"}{\"ADDRE\
4522 SS\"}=\"ftp://ftp.ncbi.nih.gov/blast/executables/L\
4523 ATEST\";\n$PG{\"blastcl3\"}{\"language\"}=\"C\";\n\
4524 $PG{\"blastcl3\"}{\"language2\"}=\"C\";\n$PG{\"bla\
4525 stcl3\"}{\"source\"}=\"empty\";\n$PG{\"blastcl3\"}\
4526 {\"update_action\"}=\"never\";\n$PG{\"blastcl3\"}{\
4527 \"mode\"}=\"psicoffee,expresso,3dcoffee\";\n$PG{\"\
4528 blastpgp\"}{\"4_TCOFFEE\"}=\"NCBIBLAST\";\n$PG{\"b\
4529 lastpgp\"}{\"type\"}=\"protein_homology_predictor\\
4530 ";\n$PG{\"blastpgp\"}{\"ADDRESS\"}=\"ftp://ftp.ncb\
4531 i.nih.gov/blast/executables/LATEST\";\n$PG{\"blast\
4532 pgp\"}{\"language\"}=\"C\";\n$PG{\"blastpgp\"}{\"l\
4533 anguage2\"}=\"C\";\n$PG{\"blastpgp\"}{\"source\"}=\
4534 \"empty\";\n$PG{\"blastpgp\"}{\"update_action\"}=\\
4535 "never\";\n$PG{\"blastpgp\"}{\"mode\"}=\"psicoffee\
4536 ,expresso,3dcoffee\";\n$PG{\"SOAP::Lite\"}{\"4_TCO\
4537 FFEE\"}=\"SOAPLITE\";\n$PG{\"SOAP::Lite\"}{\"type\\
4538 "}=\"library\";\n$PG{\"SOAP::Lite\"}{\"ADDRESS\"}=\
4539 \"http://cpansearch.perl.org/src/MKUTTER/SOAP-Lite\
4540 -0.710.08/Makefile.PL\";\n$PG{\"SOAP::Lite\"}{\"la\
4541 nguage\"}=\"Perl\";\n$PG{\"SOAP::Lite\"}{\"languag\
4542 e2\"}=\"Perl\";\n$PG{\"SOAP::Lite\"}{\"source\"}=\\
4543 "empty\";\n$PG{\"SOAP::Lite\"}{\"mode\"}=\"psicoff\
4544 ee,expresso,3dcoffee\";\n$MODE{\"tcoffee\"}{\"name\
4545 \"}=\"tcoffee\";\n$MODE{\"rcoffee\"}{\"name\"}=\"r\
4546 coffee\";\n$MODE{\"3dcoffee\"}{\"name\"}=\"3dcoffe\
4547 e\";\n$MODE{\"mcoffee\"}{\"name\"}=\"mcoffee\";\n$\
4548 MODE{\"expresso\"}{\"name\"}=\"expresso\";\n\n\n$P\
4549 G{C}{compiler}=\"gcc\";\n$PG{C}{compiler_flag}=\"C\
4550 C\";\n$PG{C}{options}=\"\";\n$PG{C}{options_flag}=\
4551 \"CFLAGS\";\n$PG{C}{type}=\"compiler\";\n\n$PG{\"C\
4552 XX\"}{compiler}=\"g++\";\n$PG{\"CXX\"}{compiler_fl\
4553 ag}=\"CXX\";\n$PG{\"CXX\"}{options}=\"\";\n$PG{\"C\
4554 XX\"}{options_flag}=\"CXXFLAGS\";\n$PG{CXX}{type}=\
4555 \"compiler\";\n\n$PG{\"CPP\"}{compiler}=\"g++\";\n\
4556 $PG{\"CPP\"}{compiler_flag}=\"CPP\";\n$PG{\"CPP\"}\
4557 {options}=\"\";\n$PG{\"CPP\"}{options_flag}=\"CPPF\
4558 LAGS\";\n$PG{CPP}{type}=\"compiler\";\n\n$PG{\"GPP\
4559 \"}{compiler}=\"g++\";\n$PG{\"GPP\"}{compiler_flag\
4560 }=\"GPP\";\n$PG{\"GPP\"}{options}=\"\";\n$PG{\"GPP\
4561 \"}{options_flag}=\"CFLAGS\";\n$PG{GPP}{type}=\"co\
4562 mpiler\";\n\n$PG{Fortran}{compiler}=\"g77\";\n$PG{\
4563 Fortran}{compiler_flag}=\"FCC\";\n$PG{Fortran}{typ\
4564 e}=\"compiler\";\n\n$PG{Perl}{compiler}=\"CPAN\";\\
4565 n$PG{Perl}{type}=\"compiler\";\n\n$SUPPORTED_OS{ma\
4566 cox}=\"Macintosh\";\n$SUPPORTED_OS{linux}=\"Linux\\
4567 ";\n$SUPPORTED_OS{windows}=\"Cygwin\";\n\n\n\n$MOD\
4568 E{t_coffee}{description}=\" for regular multiple s\
4569 equence alignments\";\n$MODE{rcoffee} {description\
4570 }=\" for RNA multiple sequence alignments\";\n\n$M\
4571 ODE{psicoffee} {description}=\" for Homology Exten\
4572 ded multiple sequence alignments\";\n$MODE{express\
4573 o}{description}=\" for very accurate structure bas\
4574 ed multiple sequence alignments\";\n$MODE{\"3dcoff\
4575 ee\"}{description}=\" for multiple structure align\
4576 ments\";\n$MODE{mcoffee} {description}=\" for comb\
4577 ining alternative multiple sequence alignment pack\
4578 ages\\n------- into a unique meta-package. The ins\
4579 taller will upload several MSA packages and compil\
4580 e them\\n\n\";\n\n\n&post_process_PG();\nreturn;\n\
4581 }\n\nsub post_process_PG\n  {\n    my $p;\n    \n \
4582    %PG=&name2dname (%PG);\n    %MODE=&name2dname(%\
4583 MODE);\n    foreach $p (keys(%PG)){if ( $PG{$p}{ty\
4584 pe} eq \"compiler\"){$PG{$p}{update_action}=\"neve\
4585 r\";}}\n    \n  }\n\nsub name2dname\n  {\n    my (\
4586 %L)=(@_);\n    my ($l, $ml);\n    \n    foreach my\
4587  $pg (keys(%L))\n      {\n      $l=length ($pg);\n      if (\
4588  $l>$ml){$ml=$l;}\n      }\n    $ml+=1;\n    forea\
4589 ch my $pg (keys(%L))\n      {\n my $name;\n     $l=$ml\
4590 -length ($pg);\n        $name=$pg;\n    for ( $b=0; $b<$l; $\
4591 b++)\n    {\n       $name .=\" \";\n      }\n   $L{$pg}{dn\
4592 ame}=$name;\n      }\n    return %L;\n  }\n\nsub e\
4593 nv_file2putenv\n  {\n    my $f=@_[0];\n    my $F=n\
4594 ew FileHandle;\n    my $n;\n    \n    open ($F, \"\
4595 $f\");\n    while (<$F>)\n      {\n     my $line=$_;\n\
4596         my($var, $value)=($_=~/(\\S+)\\=(\\S*)/);\n     $ENV{\
4597 $var}=$value;\n $ENV_SET{$var}=1;\n     $n++;\n      }\
4598 \n    close ($F);\n    return $n;\n  }\n\n","use E\
4599 nv;\nuse Cwd;\n@suffix=(\"tmp\", \"temp\", \"cache\
4600 \", \"t_coffee\", \"core\", \"tcoffee\");\n\nif ($\
4601 #ARGV==-1)\n  {\n    print \"clean_cache.pl -file \
4602 <file to add in -dir> -dir=<dir> -size=<value in M\
4603 b>\\n0: unlimited -1 always.\\nWill only clean dir\
4604 ectories matching:[\";\n    foreach $k(@suffix){pr\
4605 int \"*$k* \";}\n    print \"]\\n\";\n    exit (EX\
4606 IT_FAILURE);\n  }\n\n$cl=join (\" \",@ARGV);\nif (\
4607 ($cl=~/\\-no_action/))\n  {\n    exit (EXIT_SUCCES\
4608 S);\n  }\n\nif (($cl=~/\\-debug/))\n  {\n    $DEBU\
4609 G=1;\n  }\nelse\n  {\n    $DEBUG=0;\n  }\n\nif (($\
4610 cl=~/\\-dir=(\\S+)/))\n  {\n    $dir=$1;\n  }\nels\
4611 e\n  {\n    $dir=\"./\";\n  }\n\nif ($cl=~/\\-file\
4612 =(\\S+)/)\n  {\n    $file=$1;\n  }\nelse\n  {\n   \
4613  $file=0;\n  }\n\nif ($cl=~/\\-size=(\\S+)/)\n  {\\
4614 n    $max_size=$1;\n  }\nelse\n  {\n    $max_size=\
4615 0;#unlimited\n  }\nif ($cl=~/\\-force/)\n  {\n    \
4616 $force=1;\n  }\nelse\n  {\n    $force=0;\n  }\n\ni\
4617 f ($cl=~/\\-age=(\\S+)/)\n  {\n    $max_age=$1;\n \
4618  }\nelse\n  {\n    $max_age=0;#unlimited\n  }\n\n$\
4619 max_size*=1000000;\nif ( ! -d $dir)\n  {\n    prin\
4620 t STDERR \"\\nCannot process $dir: does not exist \
4621 \\n\";\n    exit (EXIT_FAILURE);\n  }\n\nif ( !($d\
4622 ir=~/^\\//))\n  {\n    $base=cwd();\n    $dir=\"$b\
4623 ase/$dir\";\n  }\n\n$proceed=0;\nforeach $s (@suff\
4624 ix)\n  {\n    \n    if (($dir=~/$s/)){$proceed=1;}\
4625 \n    $s=uc ($s);\n    if (($dir=~/$s/)){$proceed=\
4626 1;}\n  }\nif ( $proceed==0)\n  {\n    print STDERR\
4627  \"Clean_cache.pl can only clean directories whose\
4628  absolute path name contains the following strings\
4629 :\";\n    foreach $w (@suffix) {print STDERR \"$w \
4630 \";$w=lc($w); print STDERR \"$w \";}\n    print ST\
4631 DERR \"\\nCannot process $dir\\n\";\n    exit (EXI\
4632 T_FAILURE);\n  }\n\n$name_file=\"$dir/name_file.tx\
4633 t\";\n$size_file=\"$dir/size_file.txt\";\nif ( $fo\
4634 rce){&create_ref_file ($dir,$name_file,$size_file)\
4635 ;}\nif ($file){&add_file ($dir, $name_file, $size_\
4636 file, $file);}\n&clean_dir ($dir, $name_file, $siz\
4637 e_file, $max_size,$max_age);\nexit (EXIT_SUCCESS);\
4638 \n\nsub clean_dir \n  {\n    my ($dir, $name_file,\
4639  $size_file, $max_size, $max_age)=@_;\n    my ($to\
4640 t_size, $size, $f, $s);\n\n  \n    $tot_size=&get_\
4641 tot_size ($dir, $name_file, $size_file);\n\n    if\
4642  ( $tot_size<=$max_size){return ;}\n    else {$max\
4643 _size/=2;}\n    \n    #recreate the name file in c\
4644 ase some temprary files have not been properly reg\
4645 istered\n    &create_ref_file ($dir, $name_file, $\
4646 size_file, $max_age);\n  \n    $new_name_file=&vtm\
4647 pnam();\n    open (R, \"$name_file\");\n    open (\
4648 W, \">$new_name_file\");\n    while (<R>)\n      {\
4649 \n      my $line=$_;\n  \n      ($f, $s)=($line=~/(\\S+) (\\S\
4650 +)/);\n if ( !($f=~/\\S/)){next;}\n     \n      elsif ($max\
4651 _size && $tot_size>=$max_size && !($f=~/name_file/\
4652 ))\n      {\n       remove ( \"$dir/$f\");\n        $tot_s\
4653 ize-=$s;\n        }\n   elsif ( $max_age && -M(\"$dir/$f\\
4654 ")>=$max_age)\n   {\n       remove ( \"$dir/$f\");\n\
4655             $tot_size-=$s;\n      }\n   else\n    {\n       print\
4656  W \"$f $s\\n\";\n        }\n      }\n    close (R);\n \
4657    close (W);\n    open (F, \">$size_file\");\n   \
4658  print F \"$tot_size\";\n    if ( -e $new_name_fil\
4659 e){`mv $new_name_file $name_file`;}\n    close (F)\
4660 ;\n  }\nsub get_tot_size\n  {\n    my ($dir, $name\
4661 _file, $size_file)=@_;\n    my $size;\n    \n    i\
4662 f ( !-d $dir){return 0;}\n    if ( !-e $name_file)\
4663 \n      {\n     \n      &create_ref_file ($dir, $name_file,\
4664  $size_file);\n      }\n    open (F, \"$size_file\\
4665 ");\n    $size=<F>;\n    close (F);\n    chomp ($s\
4666 ize);\n    return $size;\n  }\nsub size \n  {\n   \
4667  my $f=@_[0];\n\n    if ( !-d $f){return -s($f);}\\
4668 n    else {return &dir2size($f);}\n  }\nsub dir2si\
4669 ze\n  {\n    my $d=@_[0];\n    my ($s, $f);\n    \\
4670 n    if ( !-d $d) {return 0;}\n    \n    foreach $\
4671 f (&dir2list ($d))\n      {\n   if ( -d $f){$s+=&dir\
4672 2size (\"$d/$f\");}\n   else {$s+= -s \"$dir/$f\";}\\
4673 n      }\n    return $s;\n  }\n\nsub remove \n  {\\
4674 n    my $file=@_[0];\n    my ($f);\n    \n    debu\
4675 g_print( \"--- $file ---\\n\");\n    if (($file eq\
4676  \".\") || ($file eq \"..\") || ($file=~/\\*/)){re\
4677 turn EXIT_FAILURE;}\n    elsif ( !-d $file)\n     \
4678  {\n    debug_print (\"unlink $file\\n\");\n    if (-e $\
4679 file){unlink ($file);}\n      }\n    elsif ( -d $f\
4680 ile)\n      {\n debug_print (\"++++++++ $file ++++\
4681 +++\\n\");\n    foreach $f (&dir2list($file))\n   {\n\
4682             &remove (\"$file/$f\");\n     }\n   debug_print (\
4683 \"rmdir $file\\n\");\n  rmdir $file;\n      }\n    \
4684 else\n      {\n debug_print (\"????????? $file ???\
4685 ?????\\n\");\n      }\n    return EXIT_SUCCESS;\n \
4686  }\n\nsub dir2list\n  {\n    my $dir=@_[0];\n    m\
4687 y (@list1, @list2,@list3, $l);\n\n    opendir (DIR\
4688 ,$dir);\n    @list1=readdir (DIR);\n    closedir (\
4689 DIR);\n    \n    foreach $l (@list1)\n      {\n if\
4690  ( $l ne \".\" && $l ne \"..\"){@list2=(@list2, $l\
4691 );}\n      }\n    @list3 = sort { (-M \"$dir/$list\
4692 2[$b]\") <=> (-M \"$dir/$list2[$a]\")} @list2;\n  \
4693   return @list3;\n    \n  }\n\nsub debug_print\n  \
4694 {\n    \n    if ($DEBUG==1){print @_;}\n    \n  }\\
4695 nsub create_ref_file\n  {\n    my ($dir,$name_file\
4696 ,$size_file)=@_;\n    my ($f, $s, $tot_size, @l);\\
4697 n    \n    if ( !-d $dir){return;}\n    \n    @l=&\
4698 dir2list ($dir);\n    open (F, \">$name_file\");\n\
4699     foreach $f (@l)\n      {\n  $s=&size(\"$dir/$f\\
4700 ");\n   $tot_size+=$s;\n        print F \"$f $s\\n\";\n    \
4701   }\n    &myecho ($tot_size, \">$size_file\");\n  \
4702   close (F);\n  }\nsub add_file \n  {\n    my ($di\
4703 r,$name_file,$size_file,$file)=@_;\n    my ($s, $t\
4704 ot_size);\n    \n    if ( !-d $dir)   {return;}\n \
4705    if ( !-e \"$dir/$file\" ) {return;}\n    if ( !\
4706 -e $name_file){&create_ref_file ($dir,$name_file,$\
4707 size_file);}\n                                      \n    $s=&size(\"$dir/$file\
4708 \");\n    open (F, \">>$name_file\");\n    print F\
4709  \"$file\\n\";\n    close (F);\n\n    $tot_size=&g\
4710 et_tot_size ($dir,$name_file,$size_file);\n    $to\
4711 t_size+=$s;\n    &myecho ($tot_size, \">$size_file\
4712 \");\n    \n  }\n       \nsub myecho\n  {\n    my ($stri\
4713 ng, $file)=@_;\n    open (ECHO, $file) || die;\n  \
4714   print ECHO \"$string\";\n    close (ECHO);\n  }\\
4715 n    \n         \n      \nsub vtmpnam\n  {\n    my $tmp_file_n\
4716 ame;\n    $tmp_name_counter++;\n    $tmp_file_name\
4717 =\"tmp_file_for_clean_cache_pdb$$.$tmp_name_counte\
4718 r\";\n    $tmp_file_list[$ntmp_file++]=$tmp_file_n\
4719 ame;\n    if ( -e $tmp_file_name) {return &vtmpnam\
4720  ();}\n    else {return $tmp_file_name;}\n  }\n","\
4721 \n$t_coffee=\"t_coffee\";\n\nforeach $value ( @ARG\
4722 V)\n  {\n    $seq_file=$seq_file.\" \".$value;\n  \
4723 }\n\n$name=$ARGV[0];\n$name=~s/\\.[^\\.]*$//;\n$li\
4724 b_name=\"$name.mocca_lib\";\n$type=`t_coffee $seq_\
4725 file -get_type -quiet`;\nchop ($type);\n\nif ( $ty\
4726 pe eq \"PROTEIN\"){$lib_mode=\"lalign_rs_s_pair -l\
4727 align_n_top 20\";}\nelsif ( $type eq\"DNA\"){$lib_\
4728 mode=\"lalign_rs_s_dna_pair -lalign_n_top 40\";}\n\
4729 \nif ( !(-e $lib_name))\n  {\n    \n  $command=\"$t\
4730 _coffee -mocca -seq_weight=no -cosmetic_penalty=0 \
4731 -mocca_interactive -in $lib_mode -out_lib $lib_nam\
4732 e -infile $seq_file\";\n  \n  }\nelsif ( (-e $lib_\
4733 name))\n  {\n  $command=\"$t_coffee -mocca -seq_we\
4734 ight=no -cosmetic_penalty=0 -mocca_interactive -in\
4735  $lib_name -infile $seq_file\";\n  \n  }\n\nsystem\
4736  ($command);\n\nexit;\n\n","my $WSDL = 'http://www\
4737 .ebi.ac.uk/Tools/webservices/wsdl/WSDaliLite.wsdl'\
4738 ;\n\nuse SOAP::Lite;\nuse Data::Dumper;\nuse Getop\
4739 t::Long qw(:config no_ignore_case bundling);\nuse \
4740 File::Basename;\n\nmy $checkInterval = 5;\n\nmy %p\
4741 arams=(\n           'async' => '1', # Use async mode and\
4742  simulate sync mode in client\n     );\nGetOptions\
4743 (\n    'pdb1=s'     => \\$params{'sequence1'},\n  \
4744   'chainid1=s' => \\$params{'chainid1'},\n    'pdb\
4745 2=s'     => \\$params{'sequence2'},\n    'chainid2\
4746 =s' => \\$params{'chainid2'},\n    \"help|h\"    => \
4747 \\$help, # Usage info\n    \"async|a\"   => \\$asyn\
4748 c, # Asynchronous submission\n    \"polljob\"    => \
4749 \\$polljob, # Get results\n    \"status\"        => \\$s\
4750 tatus, # Get status\n    \"jobid|j=s\"  => \\$jobi\
4751 d, # JobId\n    \"email|S=s\"  => \\$params{email}\
4752 , # E-mail address\n    \"trace\"      => \\$trace\
4753 , # SOAP messages\n    \"sequence=s\" => \\$sequen\
4754 ce, # Input PDB\n    );\n\nmy $scriptName = basena\
4755 me($0, ());\nif($help) {\n    &usage();\n    exit(\
4756 0);\n}\n\nif($trace) {\n    print \"Tracing active\
4757 \\n\";\n    SOAP::Lite->import(+trace => 'debug');\
4758 \n}\n\nmy $soap = SOAP::Lite\n    ->service($WSDL)\
4759 \n    ->on_fault(sub {\n        my $soap = shift;\\
4760 n        my $res = shift;\n        # Throw an exce\
4761 ption for all faults\n        if(ref($res) eq '') \
4762 {\n            die($res);\n        } else {\n     \
4763        die($res->faultstring);\n        }\n       \
4764  return new SOAP::SOM;\n    }\n               );\n\
4765 \nif( !($polljob || $status) &&\n    !( defined($p\
4766 arams{'sequence1'}) && defined($params{'sequence2'\
4767 }) )\n    ) {\n    print STDERR 'Error: bad option\
4768  combination', \"\\n\";\n    &usage();\n    exit(1\
4769 );\n}\nelsif($polljob && defined($jobid)) {\n    p\
4770 rint \"Getting results for job $jobid\\n\";\n    g\
4771 etResults($jobid);\n}\nelsif($status && defined($j\
4772 obid)) {\n    print STDERR \"Getting status for jo\
4773 b $jobid\\n\";\n    my $result = $soap->checkStatu\
4774 s($jobid);\n    print STDOUT \"$result\", \"\\n\";\
4775 \n    if($result eq 'DONE') {\n print STDERR \"To \
4776 get results: $scriptName --polljob --jobid $jobid\\
4777 \n\";\n    }\n}\nelse {\n    if(-f $params{'sequen\
4778 ce1'}) {\n      $params{'sequence1'} = read_file($param\
4779 s{'sequence1'});\n    }\n    if(-f $params{'sequen\
4780 ce2'}) {\n      $params{'sequence2'} = read_file($param\
4781 s{'sequence2'});\n    }\n\n    my $jobid;\n    my \
4782 $paramsData = SOAP::Data->name('params')->type(map\
4783 =>\\%params);\n    # For SOAP::Lite 0.60 and earli\
4784 er parameters are passed directly\n    if($SOAP::L\
4785 ite::VERSION eq '0.60' || $SOAP::Lite::VERSION =~ \
4786 /0\\.[1-5]/) {\n        $jobid = $soap->runDaliLit\
4787 e($paramsData);\n    }\n    # For SOAP::Lite 0.69 \
4788 and later parameter handling is different, so pass\
4789 \n    # undef's for templated params, and then pas\
4790 s the formatted args.\n    else {\n        $jobid \
4791 = $soap->runDaliLite(undef,\n                                $paramsData)\
4792 ;\n    }\n\n    if (defined($async)) {\n        print STD\
4793 OUT $jobid, \"\\n\";\n        print STDERR \"To ch\
4794 eck status: $scriptName --status --jobid $jobid\\n\
4795 \";\n    } else { # Synchronous mode\n        prin\
4796 t STDERR \"JobId: $jobid\\n\";\n        sleep 1;\n\
4797         getResults($jobid);\n    }\n}\n\nsub clien\
4798 tPoll($) {\n    my $jobid = shift;\n    my $result\
4799  = 'PENDING';\n    # Check status and wait if not \
4800 finished\n    #print STDERR \"Checking status: $jo\
4801 bid\\n\";\n    while($result eq 'RUNNING' || $resu\
4802 lt eq 'PENDING') {\n        $result = $soap->check\
4803 Status($jobid);\n        print STDERR \"$result\\n\
4804 \";\n        if($result eq 'RUNNING' || $result eq\
4805  'PENDING') {\n            # Wait before polling a\
4806 gain.\n            sleep $checkInterval;\n        \
4807 }\n    }\n}\n\nsub getResults($) {\n    $jobid = s\
4808 hift;\n    # Check status, and wait if not finishe\
4809 d\n    clientPoll($jobid);\n    # Use JobId if out\
4810 put file name is not defined\n    unless(defined($\
4811 outfile)) {\n        $outfile=$jobid;\n    }\n    \
4812 # Get list of data types\n    my $resultTypes = $s\
4813 oap->getResults($jobid);\n    # Get the data and w\
4814 rite it to a file\n    if(defined($outformat)) { #\
4815  Specified data type\n        my $selResultType;\n\
4816         foreach my $resultType (@$resultTypes) {\n\
4817             if($resultType->{type} eq $outformat) \
4818 {\n                $selResultType = $resultType;\n\
4819             }\n        }\n        $res=$soap->poll\
4820 ($jobid, $selResultType->{type});\n        write_f\
4821 ile($outfile.'.'.$selResultType->{ext}, $res);\n  \
4822   } else { # Data types available\n        # Write\
4823  a file for each output type\n        for my $resu\
4824 ltType (@$resultTypes){\n            #print \"Gett\
4825 ing $resultType->{type}\\n\";\n            $res=$s\
4826 oap->poll($jobid, $resultType->{type});\n         \
4827    write_file($outfile.'.'.$resultType->{ext}, $re\
4828 s);\n        }\n    }\n}\n\nsub read_file($) {\n  \
4829   my $filename = shift;\n    open(FILE, $filename)\
4830 ;\n    my $content;\n    my $buffer;\n    while(sy\
4831 sread(FILE, $buffer, 1024)) {\n $content.= $buffer\
4832 ;\n    }\n    close(FILE);\n    return $content;\n\
4833 }\n\nsub write_file($$) {\n    my ($tmp,$entity) =\
4834  @_;\n    print STDERR \"Creating result file: \".\
4835 $tmp.\"\\n\";\n    unless(open (FILE, \">$tmp\")) \
4836 {\n     return 0;\n    }\n    syswrite(FILE, $entity);\
4837 \n    close (FILE);\n    return 1;\n}\n\nsub usage\
4838  {\n    print STDERR <<EOF\nDaliLite\n========\n\n\
4839 Pairwise comparison of protein structures\n\n[Requ\
4840 ired]\n\n  --pdb1                : str  : PDB ID f\
4841 or structure 1\n  --pdb2                : str  : P\
4842 DB ID for structure 2\n\n[Optional]\n\n  --chain1 \
4843              : str  : Chain identifer in structure\
4844  1\n  --chain2              : str  : Chain identif\
4845 er in structure 2\n\n[General]\n\n  -h, --help    \
4846         :      : prints this help text\n  -S, --em\
4847 ail           : str  : user email address\n  -a, -\
4848 -async           :      : asynchronous submission\\
4849 n      --status          :      : poll for the sta\
4850 tus of a job\n      --polljob         :      : pol\
4851 l for the results of a job\n  -j, --jobid         \
4852   : str  : jobid for an asynchronous job\n  -O, --\
4853 outfile         : str  : file name for results (de\
4854 fault is jobid)\n      --trace          :      : sh\
4855 ow SOAP messages being interchanged \n\nSynchronou\
4856 s job:\n\n  The results/errors are returned as soo\
4857 n as the job is finished.\n  Usage: $scriptName --\
4858 email <your\\@email> [options] pdbFile [--outfile \
4859 string]\n  Returns: saves the results to disk\n\nA\
4860 synchronous job:\n\n  Use this if you want to retr\
4861 ieve the results at a later time. The results \n  \
4862 are stored for up to 24 hours. \n  The asynchronou\
4863 s submission mode is recommended when users are su\
4864 bmitting \n  batch jobs or large database searches\
4865         \n  Usage: $scriptName --email <your\\@email> --a\
4866 sync [options] pdbFile\n  Returns: jobid\n\n  Use \
4867 the jobid to query for the status of the job. \n  \
4868 Usage: $scriptName --status --jobid <jobId>\n  Ret\
4869 urns: string indicating the status of the job:\n  \
4870   DONE - job has finished\n    RUNNING - job is ru\
4871 nning\n    NOT_FOUND - job cannot be found\n    ER\
4872 ROR - the jobs has encountered an error\n\n  When \
4873 done, use the jobid to retrieve the status of the \
4874 job. \n  Usage: $scriptName --polljob --jobid <job\
4875 Id> [--outfile string]\n\n[Help]\n\n  For more det\
4876 ailed help information refer to\n  http://www.ebi.\
4877 ac.uk/DaliLite/\nEOF\n;\n}\n","my $WSDL = 'http://\
4878 www.ebi.ac.uk/Tools/webservices/wsdl/WSWUBlast.wsd\
4879 l';\n\nuse strict;\nuse SOAP::Lite;\nuse Getopt::L\
4880 ong qw(:config no_ignore_case bundling);\nuse File\
4881 ::Basename;\n\nmy $checkInterval = 15;\n\nmy $numO\
4882 pts = scalar(@ARGV);\nmy ($outfile, $outformat, $h\
4883 elp, $async, $polljob, $status, $ids, $jobid, $tra\
4884 ce, $sequence);\nmy %params= ( # Defaults\n           \
4885 'async' => 1, # Force into async mode\n       'exp\
4886 ' => 10.0, # E-value threshold\n              'numal' => \
4887 50, # Maximum number of alignments\n          'scores\
4888 ' => 100, # Maximum number of scores\n            \
4889 );\nGetOptions( # Map the options into variables\n\
4890     \"program|p=s\"     => \\$params{program}, # B\
4891 LAST program\n    \"database|D=s\"    => \\$params\
4892 {database}, # Search database\n    \"matrix|m=s\" \
4893      => \\$params{matrix}, # Scoring matrix\n    \\
4894 "exp|E=f\"         => \\$params{exp}, # E-value th\
4895 reshold\n    \"echofilter|e\"    => \\$params{echo\
4896 filter}, # Display filtered sequence\n    \"filter\
4897 |f=s\"      => \\$params{filter}, # Low complexity\
4898  filter name\n    \"alignments|b=i\"  => \\$params\
4899 {numal}, # Number of alignments\n    \"scores|s=i\\
4900 "      => \\$params{scores}, # Number of scores\n \
4901    \"sensitivity|S=s\" => \\$params{sensitivity}, \
4902 # Search sensitivity\n    \"sort|t=s\"        => \\\
4903 $params{sort}, # Sort hits by...\n    \"stats|T=s\\
4904 "       => \\$params{stats}, # Scoring statistic t\
4905 o use\n    \"strand|d=s\"      => \\$params{strand\
4906 }, # Strand to use in DNA vs. DNA search\n    \"to\
4907 pcombon|c=i\"   => \\$params{topcombon}, # Consist\
4908 ent sets of HSPs\n    \"outfile=s\"       => \\$ou\
4909 tfile, # Output file\n    \"outformat|o=s\"   => \\
4910 \$outformat, # Output format\n    \"help|h\"         \
4911  => \\$help, # Usage info\n    \"async|a\"            =\
4912 > \\$async, # Asynchronous mode\n    \"polljob\"         \
4913      => \\$polljob, # Get results\n    \"status\"       \
4914       => \\$status, # Get job status\n    \"ids\" \
4915             => \\$ids, # Get ids from result\n    \
4916 \"jobid|j=s\"       => \\$jobid, # JobId\n    \"em\
4917 ail=s\"         => \\$params{email}, # E-mail addr\
4918 ess\n    \"trace\"           => \\$trace, # SOAP t\
4919 race\n    \"sequence=s\"      => \\$sequence, # Qu\
4920 ery sequence\n    );\n\nmy $scriptName = basename(\
4921 $0, ());\nif($help || $numOpts == 0) {\n    &usage\
4922 ();\n    exit(0);\n}\n\nif($trace){\n    print STD\
4923 ERR \"Tracing active\\n\";\n    SOAP::Lite->import\
4924 (+trace => 'debug');\n}\n\nmy $soap = SOAP::Lite\n\
4925     ->service($WSDL)\n    ->proxy('http://localhos\
4926 t/',\n    #proxy => ['http' => 'http://your.proxy.\
4927 server/'], # HTTP proxy\n    timeout => 600, # HTT\
4928 P connection timeout\n    )\n    ->on_fault(sub { \
4929 # SOAP fault handler\n        my $soap = shift;\n \
4930        my $res = shift;\n        # Throw an except\
4931 ion for all faults\n        if(ref($res) eq '') {\\
4932 n            die($res);\n        } else {\n       \
4933      die($res->faultstring);\n        }\n        r\
4934 eturn new SOAP::SOM;\n    }\n               );\n\n\
4935 if( !($polljob || $status || $ids) &&\n    !( defi\
4936 ned($ARGV[0]) || defined($sequence) )\n    ) {\n  \
4937   print STDERR 'Error: bad option combination', \"\
4938 \\n\";\n    &usage();\n    exit(1);\n}\nelsif($pol\
4939 ljob && defined($jobid)) {\n    print \"Getting re\
4940 sults for job $jobid\\n\";\n    getResults($jobid)\
4941 ;\n}\nelsif($status && defined($jobid)) {\n    pri\
4942 nt STDERR \"Getting status for job $jobid\\n\";\n \
4943    my $result = $soap->checkStatus($jobid);\n    p\
4944 rint STDOUT \"$result\\n\";\n    if($result eq 'DO\
4945 NE') {\n        print STDERR \"To get results: $scriptNam\
4946 e --polljob --jobid $jobid\\n\";\n    }\n}  \nelsi\
4947 f($ids && defined($jobid)) {\n    print STDERR \"G\
4948 etting ids from job $jobid\\n\";\n    getIds($jobi\
4949 d);\n}\nelse {\n    # Prepare input data\n    my $\
4950 content;\n    my (@contents) = ();\n    if(-f $ARG\
4951 V[0] || $ARGV[0] eq '-') {      \n      $content={type=>'seq\
4952 uence',content=>read_file($ARGV[0])};   \n    }\n   \
4953  if($sequence) {        \n      if(-f $sequence || $sequence e\
4954 q '-') {        \n          $content={type=>'sequence',content\
4955 =>read_file($ARGV[0])}; \n      } else {\n          $content\
4956 ={type=>'sequence',content=>$sequence};\n       }\n    }\
4957 \n    push @contents, $content;\n\n    # Submit th\
4958 e job\n    my $paramsData = SOAP::Data->name('para\
4959 ms')->type(map=>\\%params);\n    my $contentData =\
4960  SOAP::Data->name('content')->value(\\@contents);\\
4961 n    # For SOAP::Lite 0.60 and earlier parameters \
4962 are passed directly\n    if($SOAP::Lite::VERSION e\
4963 q '0.60' || $SOAP::Lite::VERSION =~ /0\\.[1-5]/) {\
4964 \n        $jobid = $soap->runWUBlast($paramsData, \
4965 $contentData);\n    }\n    # For SOAP::Lite 0.69 a\
4966 nd later parameter handling is different, so pass\\
4967 n    # undef's for templated params, and then pass\
4968  the formatted args.\n    else {\n        $jobid =\
4969  $soap->runWUBlast(undef, undef,\n                                 $paramsDa\
4970 ta, $contentData);\n    }\n\n    # Asynchronous mo\
4971 de: output jobid and exit.\n    if (defined($async\
4972 )) {\n  print STDOUT $jobid, \"\\n\";\n        prin\
4973 t STDERR \"To check status: $scriptName --status -\
4974 -jobid $jobid\\n\";\n    }\n    # Synchronous mode\
4975 : try to get results\n    else {\n        print ST\
4976 DERR \"JobId: $jobid\\n\";\n        sleep 1;\n    \
4977     getResults($jobid);\n    }\n}\n\nsub getIds($)\
4978  {\n    my $jobid = shift;\n    my $results = $soa\
4979 p->getIds($jobid);\n    for my $result (@$results)\
4980 {\n     print \"$result\\n\";\n    }\n}\n\nsub clientP\
4981 oll($) {\n    my $jobid = shift;\n    my $result =\
4982  'PENDING';\n    # Check status and wait if not fi\
4983 nished\n    while($result eq 'RUNNING' || $result \
4984 eq 'PENDING') {\n        $result = $soap->checkSta\
4985 tus($jobid);\n        print STDERR \"$result\\n\";\
4986 \n        if($result eq 'RUNNING' || $result eq 'P\
4987 ENDING') {\n            # Wait before polling agai\
4988 n.\n            sleep $checkInterval;\n        }\n\
4989     }\n}\n\nsub getResults($) {\n    my $jobid = s\
4990 hift;\n    my $res;\n    # Check status, and wait \
4991 if not finished\n    clientPoll($jobid);\n    # Us\
4992 e JobId if output file name is not defined\n    un\
4993 less(defined($outfile)) {\n        $outfile=$jobid\
4994 ;\n    }\n    # Get list of data types\n    my $re\
4995 sultTypes = $soap->getResults($jobid);\n    # Get \
4996 the data and write it to a file\n    if(defined($o\
4997 utformat)) { # Specified data type\n    if($outformat\
4998  eq 'xml') {$outformat = 'toolxml';}\n  if($outform\
4999 at eq 'txt') {$outformat = 'tooloutput';}\n       \
5000  my $selResultType;\n        foreach my $resultTyp\
5001 e (@$resultTypes) {\n            if($resultType->{\
5002 type} eq $outformat) {\n                $selResult\
5003 Type = $resultType;\n            }\n        }\n   \
5004      $res=$soap->poll($jobid, $selResultType->{typ\
5005 e});\n  if($outfile eq '-') {\n      write_file($ou\
5006 tfile, $res);\n } else {\n          write_file($outfile\
5007 .'.'.$selResultType->{ext}, $res);\n    }\n    } else\
5008  { # Data types available\n        # Write a file \
5009 for each output type\n        for my $resultType (\
5010 @$resultTypes){\n            #print STDERR \"Getti\
5011 ng $resultType->{type}\\n\";\n            $res=$so\
5012 ap->poll($jobid, $resultType->{type});\n            if($o\
5013 utfile eq '-') {\n              write_file($outfile, $res);\n   \
5014     } else {\n          write_file($outfile.'.'.$resultTyp\
5015 e->{ext}, $res);\n          }\n        }\n    }\n}\n\ns\
5016 ub read_file($) {\n    my $filename = shift;\n    \
5017 my ($content, $buffer);\n    if($filename eq '-') \
5018 {\n     while(sysread(STDIN, $buffer, 1024)) {\n            $\
5019 content .= $buffer;\n   }\n    }\n    else { # File\\
5020 n       open(FILE, $filename) or die \"Error: unable to \
5021 open input file\";\n    while(sysread(FILE, $buffer, \
5022 1024)) {\n          $content .= $buffer;\n      }\n     close(FI\
5023 LE);\n    }\n    return $content;\n}\n\nsub write_\
5024 file($$) {\n    my ($filename, $data) = @_;\n    p\
5025 rint STDERR 'Creating result file: ' . $filename .\
5026  \"\\n\";\n    if($filename eq '-') {\n print STDO\
5027 UT $data;\n    }\n    else {\n  open(FILE, \">$file\
5028 name\") or die \"Error: unable to open output file\
5029 \";\n   syswrite(FILE, $data);\n        close(FILE);\n    }\
5030 \n}\n\nsub usage {\n    print STDERR <<EOF\nWU-BLA\
5031 ST\n========\n\nRapid sequence database search pro\
5032 grams utilizing the BLAST algorithm.\n   \n[Requir\
5033 ed]\n\n      --email       : str  : user email add\
5034 ress \n  -p, --program      : str  : BLAST program \
5035 to use: blastn, blastp, blastx, \n                \
5036              tblastn or tblastx\n  -D, --database \
5037    : str  : database to search\n  seqFile         \
5038   : file : query sequence data file (\"-\" for STD\
5039 IN)\n\n[Optional]\n\n  -m, --matrix         : str  : s\
5040 coring matrix\n  -E, --exp          : real : 0<E<= 1000\
5041 . Statistical significance threshold\n            \
5042                  for reporting database sequence m\
5043 atches.\n  -e, --echofilter  :      : display the \
5044 filtered query sequence in the output\n  -f, --fil\
5045 ter         : str  : activates filtering of the query \
5046 sequence\n  -b, --alignments  : int  : number of a\
5047 lignments to be reported\n  -s, --scores            : int\
5048   : number of scores to be reported\n  -S, --sensi\
5049 tivity : str  :\n  -t, --sort       : str  :\n  -T, \
5050 --stats       : str  :\n  -d, --strand      : str \
5051  : DNA strand to search with in DNA vs. DNA search\
5052 es \n  -c, --topcombon   :      :\n\n[General]  \n\\
5053 n  -h, --help       :      : prints this help text\
5054 \n  -a, --async      :      : forces to make an as\
5055 ynchronous query\n      --status     :      : poll\
5056  for the status of a job\n      --polljob    :    \
5057   : poll for the results of a job\n  -j, --jobid  \
5058     : str  : jobid that was returned when an async\
5059 hronous job \n                            was subm\
5060 itted.\n  -O, --outfile    : str  : name of the fi\
5061 le results should be written to \n                \
5062             (default is based on the jobid; \"-\" \
5063 for STDOUT)\n  -o, --outformat  : str  : txt or xm\
5064 l output (no file is written)\n      --trace       : \
5065      : show SOAP messages being interchanged \n\nS\
5066 ynchronous job:\n\n  The results/errors are return\
5067 ed as soon as the job is finished.\n  Usage: $scri\
5068 ptName --email <your\\@email> [options...] seqFile\
5069 \n  Returns: saves the results to disk\n\nAsynchro\
5070 nous job:\n\n  Use this if you want to retrieve th\
5071 e results at a later time. The results \n  are sto\
5072 red for up to 24 hours. \n  The asynchronous submi\
5073 ssion mode is recommended when users are submittin\
5074 g \n  batch jobs or large database searches     \n  Us\
5075 age: $scriptName --async --email <your\\@email> [o\
5076 ptions...] seqFile\n  Returns : jobid\n\n  Use the\
5077  jobid to query for the status of the job. \n  Usa\
5078 ge: $scriptName --status --jobid <jobId>\n  Return\
5079 s : string indicating the status of the job:\n    \
5080 DONE - job has finished\n    RUNNING - job is runn\
5081 ing\n    NOT_FOUND - job cannot be found\n    ERRO\
5082 R - the jobs has encountered an error\n\n  When do\
5083 ne, use the jobid to retrieve the status of the jo\
5084 b. \n  Usage: $scriptName --polljob --jobid <jobId\
5085 > [--outfile string]\n  Returns: saves the results\
5086  to disk\n\n[Help]\n\nFor more detailed help infor\
5087 mation refer to \nhttp://www.ebi.ac.uk/blast2/WU-B\
5088 last2_Help_frame.html\n \nEOF\n;\n}\n","\nmy $WSDL\
5089  = 'http://www.ebi.ac.uk/Tools/webservices/wsdl/WS\
5090 Blastpgp.wsdl';\n\nuse SOAP::Lite;\nuse Getopt::Lo\
5091 ng qw(:config no_ignore_case bundling);\nuse File:\
5092 :Basename;\n\nmy $checkInterval = 15;\n\nmy %param\
5093 s=(\n       'async' => '1', # Use async mode and sim\
5094 ulate sync mode in client\n         );\nGetOptions(\n \
5095    \"mode=s\"           => \\$params{mode}, # Sear\
5096 ch mode: PSI-Blast or PHI-Blast\n    \"database|d=\
5097 s\"     => \\$params{database}, # Database to sear\
5098 ch\n    \"matrix|M=s\"       => \\$params{matrix},\
5099 # Scoring maxtrix\n    \"exp|e=f\"          => \\$\
5100 params{exp}, # E-value\n    \"expmulti|h=f\"     =\
5101 > \\$params{expmulti}, # E-value\n    \"filter|F=s\
5102 \"       => \\$params{filter}, # Low complexity fi\
5103 lter\n    \"dropoff|X=i\"      => \\$params{dropof\
5104 f}, # Dropoff score\n    \"finaldropoff|Z=i\" => \\
5105 \$params{finaldropoff}, # Final dropoff score\n   \
5106  \"scores|v=i\"       => \\$params{scores}, # Max \
5107 number of scores\n    \"align=i\"          => \\$p\
5108 arams{align}, # Alignment view\n    \"startregion|\
5109 S=i\"  => \\$params{startregion}, # Start of regio\
5110 n in query\n    \"endregion|H=i\"    => \\$params{\
5111 endregion}, # End of region in query\n    \"maxpas\
5112 ses|j=i\"    => \\$params{maxpasses}, # Number of \
5113 PSI iterations\n    \"opengap|G=i\"      => \\$par\
5114 ams{opengap}, # Gap open penalty\n    \"extendgap|\
5115 E=i\"    => \\$params{extendgap}, # Gap extension \
5116 penalty\n    \"pattern=s\"        => \\$params{pat\
5117 tern}, # PHI-BLAST pattern\n    \"usagemode|p=s\" \
5118    => \\$params{usagemode}, # PHI-BLAST program\n \
5119    \"appxml=s\"         => \\$params{appxml}, # Ap\
5120 plication XML\n    \"sequence=s\"       => \\$sequ\
5121 ence, # Query sequence\n    \"help\"           => \\$\
5122 help, # Usage info\n    \"polljob\"            => \\$p\
5123 olljob, # Get results\n    \"status\"          => \\\
5124 $status, # Get status\n    \"ids\"                     =>\
5125  \\$ids, # Get ids from result\n    \"jobid=s\"   \
5126        => \\$jobid, # JobId\n    \"outfile=s\"    \
5127     => \\$outfile, # Output filename\n    \"outfor\
5128 mat|o=s\"    => \\$outformat, # Output file format\
5129 \n    \"async|a\"              => \\$async, # Async subm\
5130 ission\n    \"email=s\"          => \\$params{emai\
5131 l}, # User e-mail address\n    \"trace\"          \
5132   => \\$trace, # Show SOAP messages\n    );\n\nmy \
5133 $scriptName = basename($0, ());\nif($help) {\n    \
5134 &usage();\n    exit(0);\n}\n\nif ($trace){\n    pr\
5135 int \"Tracing active\\n\";\n    SOAP::Lite->import\
5136 (+trace => 'debug');\n}\n\nmy $soap = SOAP::Lite\n\
5137     ->service($WSDL)\n    ->on_fault(sub {\n      \
5138   my $soap = shift;\n        my $res = shift;\n   \
5139      # Throw an exception for all faults\n        \
5140 if(ref($res) eq '') {\n            die($res);\n   \
5141      } else {\n            die($res->faultstring);\
5142 \n        }\n        return new SOAP::SOM;\n    }\\
5143 n               );\n\nif( !($polljob || $status ||\
5144  $ids) &&\n    !( (defined($ARGV[0]) && -f $ARGV[0\
5145 ]) || defined($sequence) )\n    ) {\n    print STD\
5146 ERR 'Error: bad option combination', \"\\n\";\n   \
5147  &usage();\n    exit(1);\n}\nelsif($polljob && def\
5148 ined($jobid)) {\n    print \"Getting results for j\
5149 ob $jobid\\n\";\n    getResults($jobid);\n}\nelsif\
5150 ($status && defined($jobid)) {\n    print STDERR \\
5151 "Getting status for job $jobid\\n\";\n    my $resu\
5152 lt = $soap->checkStatus($jobid);\n    print STDOUT\
5153  $result, \"\\n\";\n    if($result eq 'DONE') {\n       \
5154 print STDERR \"To get results: $scriptName --pollj\
5155 ob --jobid $jobid\\n\";\n    }\n}  \nelsif($ids &&\
5156  defined($jobid)) {\n    print STDERR \"Getting id\
5157 s from job $jobid\\n\";\n    getIds($jobid);\n}\ne\
5158 lse {\n    if(-f $ARGV[0]) {    \n      $content={type=>'s\
5159 equence', content=>read_file($ARGV[0])};        \n    }\n\
5160     if($sequence) {     \n      if(-f $sequence) {\n        $c\
5161 ontent={type=>'sequence', content=>read_file($sequ\
5162 ence)}; \n      } else {\n          $content={type=>'sequenc\
5163 e', content=>$sequence};\n      }\n    }\n    push @con\
5164 tent, $content;\n\n    my $jobid;\n    my $paramsD\
5165 ata = SOAP::Data->name('params')->type(map=>\\%par\
5166 ams);\n    my $contentData = SOAP::Data->name('con\
5167 tent')->value(\\@content);\n    # For SOAP::Lite 0\
5168 .60 and earlier parameters are passed directly\n  \
5169   if($SOAP::Lite::VERSION eq '0.60' || $SOAP::Lite\
5170 ::VERSION =~ /0\\.[1-5]/) {\n        $jobid = $soa\
5171 p->runBlastpgp($paramsData, $contentData);\n    }\\
5172 n    # For SOAP::Lite 0.69 and later parameter han\
5173 dling is different, so pass\n    # undef's for tem\
5174 plated params, and then pass the formatted args.\n\
5175     else {\n        $jobid = $soap->runBlastpgp(un\
5176 def, undef,\n                               $paramsData, $contentData);\n\
5177     }\n\n    if (defined($async)) {\n   print STDOUT\
5178  $jobid, \"\\n\";\n        print STDERR \"To check\
5179  status: $scriptName --status --jobid $jobid\\n\";\
5180 \n    } else { # Synchronous mode\n        print S\
5181 TDERR \"JobId: $jobid\\n\";\n        sleep 1;\n   \
5182      getResults($jobid);\n    }\n}\n\nsub getIds($\
5183 ) {\n    $jobid = shift;\n    my $results = $soap-\
5184 >getIds($jobid);\n    for $result (@$results){\n        p\
5185 rint \"$result\\n\";\n    }\n}\n\nsub clientPoll($\
5186 ) {\n    my $jobid = shift;\n    my $result = 'PEN\
5187 DING';\n    # Check status and wait if not finishe\
5188 d\n    #print STDERR \"Checking status: $jobid\\n\\
5189 ";\n    while($result eq 'RUNNING' || $result eq '\
5190 PENDING') {\n        $result = $soap->checkStatus(\
5191 $jobid);\n        print STDERR \"$result\\n\";\n  \
5192       if($result eq 'RUNNING' || $result eq 'PENDI\
5193 NG') {\n            # Wait before polling again.\n\
5194             sleep $checkInterval;\n        }\n    \
5195 }\n}\n\nsub getResults($) {\n    $jobid = shift;\n\
5196     # Check status, and wait if not finished\n    \
5197 clientPoll($jobid);\n    # Use JobId if output fil\
5198 e name is not defined\n    unless(defined($outfile\
5199 )) {\n        $outfile=$jobid;\n    }\n    # Get l\
5200 ist of data types\n    my $resultTypes = $soap->ge\
5201 tResults($jobid);\n    # Get the data and write it\
5202  to a file\n    if(defined($outformat)) { # Specif\
5203 ied data type\n        my $selResultType;\n       \
5204  foreach my $resultType (@$resultTypes) {\n       \
5205      if($resultType->{type} eq $outformat) {\n    \
5206             $selResultType = $resultType;\n       \
5207      }\n        }\n        $res=$soap->poll($jobid\
5208 , $selResultType->{type});\n        write_file($ou\
5209 tfile.'.'.$selResultType->{ext}, $res);\n    } els\
5210 e { # Data types available\n        # Write a file\
5211  for each output type\n        for my $resultType \
5212 (@$resultTypes){\n            #print \"Getting $re\
5213 sultType->{type}\\n\";\n            $res=$soap->po\
5214 ll($jobid, $resultType->{type});\n            writ\
5215 e_file($outfile.'.'.$resultType->{ext}, $res);\n  \
5216       }\n    }\n}\n\nsub read_file($) {\n    my $f\
5217 ilename = shift;\n    open(FILE, $filename);\n    \
5218 my $content;\n    my $buffer;\n    while(sysread(F\
5219 ILE, $buffer, 1024)) {\n        $content.= $buffer;\n    \
5220 }\n    close(FILE);  \n    return $content;\n}\n\n\
5221 sub write_file($$) {\n    my ($tmp,$entity) = @_;\\
5222 n    print STDERR \"Creating result file: \".$tmp.\
5223 \"\\n\";\n    unless(open (FILE, \">$tmp\")) {\n        r\
5224 eturn 0;\n    }\n    syswrite(FILE, $entity);\n   \
5225  close (FILE);\n    return 1;\n}\n\nsub usage {\n \
5226    print STDERR <<EOF\nBlastpgp\n========\n   \nTh\
5227 e blastpgp program implements the PSI-BLAST and PH\
5228 I-BLAST variations\nof NCBI BLAST.\n\nFor more det\
5229 ailed help information refer to\nhttp://www.ebi.ac\
5230 .uk/blastpgp/blastpsi_help_frame.html\n \nBlastpgp\
5231  specific options:\n\n[Required]\n\n      --mode  \
5232           : str  : search mode to use: PSI-Blast o\
5233 r PHI-Blast\n  -d, --database        : str  : prot\
5234 ein database to search\n  seqFile               : \
5235 file : query sequence\n\n[Optional]\n\n  -M, --mat\
5236 rix          : str  : scoring matrix\n  -e, --exp \
5237             : real : Expectation value\n  -h, --ex\
5238 pmulti        : real : threshold (multipass model)\
5239 \n  -F, --filter          : str  : filter query se\
5240 quence with SEG [T,F]\n  -m, --align           : i\
5241 nt  : alignment view option:\n                    \
5242              0 - pairwise, 1 - M/S identities,\n  \
5243                                2 - M/S non-identit\
5244 ies, 3 - Flat identities,\n                       \
5245           4 - Flat non-identities\n  -G, --opengap\
5246          : int  : cost to open a gap\n  -E, --exte\
5247 ndgap       : int  : cost to extend a gap\n  -g, -\
5248 -gapalign        : str  : Gapped [T,F]\n  -v, --sc\
5249 ores          : int  : number of scores to be repo\
5250 rted\n  -j, --maxpasses       : int  : number of i\
5251 terations\n  -X, --dropoff         : int  : Dropof\
5252 f score\n  -Z, --finaldropoff    : int  : Dropoff \
5253 for final alignment\n  -S, --startregion     : int\
5254   : Start of required region in query\n  -H, --end\
5255 region       : int  : End of required region in qu\
5256 ery\n  -k, --pattern         : str  : Hit File (PH\
5257 I-BLAST only)\n  -p, --usagemode       : str  : Pr\
5258 ogram option (PHI-BLAST only):\n                  \
5259                blastpgp, patseedp, seedp\n\n[Gener\
5260 al]\n\n      --help            :      : prints thi\
5261 s help text\n  -a, --async           :      : forc\
5262 es to make an asynchronous query\n      --status  \
5263         :      : poll for the status of a job\n   \
5264    --polljob         :      : poll for the results\
5265  of a job\n      --jobid           : str  : jobid \
5266 of an asynchronous job\n      --ids             : \
5267      : get hit identifiers for result \n  -O, --ou\
5268 tfile         : str  : name of the file results sh\
5269 ould be written to\n                              \
5270    (default is based on the jobid)\n  -o, --outfor\
5271 mat       : str  : txt or xml output (no file is w\
5272 ritten)\n      --trace           :      : show SOA\
5273 P messages being interchanged\n\nSynchronous job:\\
5274 n\n  The results/errors are returned as soon as th\
5275 e job is finished.\n  Usage: blastpgp.pl --email <\
5276 your@email> [options...] seqfile\n  Returns: saves\
5277  the results to disk\n\nAsynchronous job:\n\n  Use\
5278  this if you want to retrieve the results at a lat\
5279 er time. The results\n  are stored for up to 24 ho\
5280 urs.\n  The asynchronous submission mode is recomm\
5281 ended when users are submitting\n  batch jobs or l\
5282 arge database searches\n  Usage: blastpgp.pl --ema\
5283 il <your@email> --async [options...] seqFile\n  Re\
5284 turns: jobid\n\n  Use the jobid to query for the s\
5285 tatus of the job.\n  Usage: blastpgp.pl --status -\
5286 -jobid <jobId>\n  Returns: string indicating the s\
5287 tatus of the job\n    DONE - job has finished\n   \
5288  RUNNING - job is running\n    NOT_FOUND - job can\
5289 not be found\n    ERROR - the jobs has encountered\
5290  an error\n\n  When done, use the jobid to retriev\
5291 e the results of the job.\n  Usage: blastpgp.pl --\
5292 polljob --jobid <jobId> [--outfile <fileName>]\n  \
5293 Returns: saves the results to disk\nEOF\n;\n}\n","\
5294 \n\n\nmy $PROBTRESH = 0.3;# base pairs below this \
5295 prob threshold will be ignored\nmy $WEIGHT = 100.0\
5296 ; # float!!\nmy $NUCALPH = \"ACGTUNRYMKSWHBVD\";\n\
5297 use vars qw($NUCALPH $WEIGHT);\n\nmy $myname = bas\
5298 ename($0);\n\nuse strict;\nuse warnings;\n\nuse Fi\
5299 le::Basename;\nuse Getopt::Long;\nuse File::Glob '\
5300 :glob';\nuse File::Spec;\nuse File::Temp qw/ tempf\
5301 ile tempdir /;\n\n\n\n\nsub tcoffeelib_header($;$)\
5302 \n{\n    my ($nseq, $fd) = @_;\n    if (! defined(\
5303 $fd)) {\n        $fd = *STDOUT;\n    }\n    printf\
5304  $fd \"! TC_LIB_FORMAT_01\\n\";\n    printf $fd \"\
5305 %d\\n\", $nseq;\n}\n\n\nsub tcoffeelib_header_adds\
5306 eq($$;$)\n{\n    my ($id, $seq, $fd) = @_;\n    if\
5307  (! defined($fd)) {\n        $fd = *STDOUT;\n    }\
5308 \n    printf $fd \"%s %d %s\\n\", $id, length($seq\
5309 ), $seq;\n}\n\n\nsub tcoffeelib_comment($;$)\n{\n \
5310    my ($comment, $fd) = @_;\n    if (! defined($fd\
5311 )) {\n        $fd = *STDOUT;\n    }\n    printf $f\
5312 d \"!\" . $comment . \"\\n\";\n}\n\n\nsub tcoffeel\
5313 ib_struct($$$;$)\n{\n    my ($nseq, $len, $bpm, $f\
5314 d) = @_;\n\n    if (! defined($fd)) {\n        $fd\
5315  = *STDOUT;\n    }\n\n    # output basepair indice\
5316 s with fixed weight\n    printf $fd \"#%d %d\\n\",\
5317  $nseq, $nseq;\n    # output basepairs (only once)\
5318  and with unit-offset\n    for (my $i=0; $i<$len; \
5319 $i++) {\n        for (my $j=$i+1; $j<$len; $j++) {\
5320 \n            if (! defined($bpm->[$i][$j])) {\n  \
5321               print STDERR \"ERROR: \\$bpm->[$i][$\
5322 j] undefined\\n\";\n            }\n            if \
5323 ($bpm->[$i][$j]>0) {\n                print $fd $i\
5324 +1;\n                print $fd \" \";\n           \
5325      print $fd $j+1;\n                print $fd \"\
5326  \" . $bpm->[$i][$j] . \"\\n\";\n            }\n  \
5327       }\n    }\n}\n\n\nsub tcoffeelib_footer(;$)\n\
5328 {\n    my ($fd) = @_;\n    if (! defined($fd)) {\n\
5329         $fd = *STDOUT;\n    }\n    print $fd \"! S\
5330 EQ_1_TO_N\\n\";\n}\n\n\n    \nsub plfold($$$)\n{  \
5331   \n    my ($id, $seq, $probtresh) = @_;\n    my (\
5332 @struct);# return\n    my ($templ, $fhtmp, $fnamet\
5333 mp, $cmd, $ctr, $window_size);\n\n    $templ = $my\
5334 name . \".\" . $id . \".pid-\" . $$ . \".XXXXXX\";\
5335 \n    ($fhtmp, $fnametmp) = tempfile($templ, UNLIN\
5336 K => 1); \n    print $fhtmp \">$id\\n$seq\\n\";\n\\
5337 n    # --- init basepair array\n    #\n    for (my\
5338  $i=0; $i<length($seq); $i++) {\n        for (my $\
5339 j=$i+1; $j<length($seq); $j++) {\n            $str\
5340 uct[$i][$j]=0;\n        }\n    }\n\n\n    # --- ca\
5341 ll rnaplfold and drop a readme\n    #\n    $window\
5342 _size=(length($seq)<70)?length($seq):70;\n    $cmd\
5343  = \"RNAplfold -W $window_size < $fnametmp >/dev/n\
5344 ull\";\n    system($cmd);\n    \n    if ($? != 0) \
5345 {\n        printf STDERR \"ERROR: RNAplfold ($cmd)\
5346  exited with error status %d\\n\", $? >> 8;\n     \
5347    return;\n    }\n    #unlink($fnametmp);\n    my\
5348  $fps = sprintf(\"%s_dp.ps\", $id); # check long n\
5349 ame\n    \n    if (! -s $fps) {\n      {\n\n    $fps \
5350 = sprintf(\"%s_dp.ps\", substr($id,0,12)); # check\
5351  short name\n   if (! -s $fps)\n          {\n       die(\"co\
5352 uldn't find expected file $fps\\n\");\n     return\
5353 ;\n       }\n      }\n    }\n\n    \n    # --- read ba\
5354 se pairs from created postscript\n    #\n    open(\
5355 FH, $fps);\n    while (my $line = <FH>) {\n       \
5356  my ($nti, $ntj, $prob);\n        chomp($line);   \
5357      \n        # line: bp bp sqrt-prob ubox\n     \
5358    my @match = ($line =~ m/^([0-9]+) +([0-9]+) +([\
5359 0-9\\.]+) +ubox$/);\n        if (scalar(@match)) {\
5360 \n            $nti=$1;\n            $ntj=$2;\n    \
5361         $prob=$3*$3;# prob stored as square root\n\
5362 \n            if ($prob>$probtresh) {\n           \
5363      #printf STDERR \"\\$struct[$nti][$ntj] sqrtpr\
5364 ob=$3 prob=$prob > $probtresh\\n\";\n             \
5365    $struct[$nti-1][$ntj-1] = $WEIGHT\n            \
5366 }\n            # store with zero-offset\n        }\
5367 \n    }\n    close(FH);\n\n    # remove or gzi pos\
5368 tscript\n    #\n    unlink($fps);\n    #\n    # or\
5369  gzip\n    #$cmd = \"gzip -qf $fps\";\n    #system\
5370 ($cmd);\n    #if ($? != 0) {\n    #    printf STDE\
5371 RR \"ERROR: gzip ($cmd) exited with error status %\
5372 d\\n\", $? >> 8;\n    #}\n\n    return \\@struct;\\
5373 n}\n\n\n\n\n\nsub rnaseqfmt($)\n{\n    my ($seq) =\
5374  @_;\n    # remove gaps\n    $seq =~ s/-//g;\n    \
5375 # uppercase RNA\n    $seq = uc($seq);\n    # T -> \
5376 U\n    $seq =~ s/T/U/g;\n    # check for invalid c\
5377 haraters\n    $_ = $seq;\n    s/[^$NUCALPH]//g;\n \
5378    return $_;\n}\n\n\n\n\nsub usage(;$)\n{    \n  \
5379   my ($errmsg) = @_;\n    if ($errmsg) {\n        \
5380 print STDERR \"ERROR: $errmsg\\n\";\n    }\n    pr\
5381 int STDERR << \"EOF\";\n$myname:\n Creates a T-Cof\
5382 fee RNA structure library from RNAplfold predictio\
5383 n.\n See FIXME:citation\nUsage:\n $myname -in seq_\
5384 file -out tcoffee_lib\nEOF\n    exit(1);\n}\n\nsub\
5385  read_fasta_seq \n  {\n    my $f=$_[0];\n    my %h\
5386 seq;\n    my (@seq, @com, @name);\n    my ($a, $s,\
5387 $nseq);\n\n    open (F, $f);\n    while (<F>)\n   \
5388    {\n  $s.=$_;\n      }\n    close (F);\n\n    \n \
5389    @name=($s=~/>(\\S*).*\\n[^>]*/g);\n    \n    @s\
5390 eq =($s=~/>.*.*\\n([^>]*)/g);\n    @com =($s=~/>(\\
5391 \S*)(.*)\\n([^>]*)/g);\n\n\n    $nseq=$#name+1;\n \
5392  \n    for ($a=0; $a<$nseq; $a++)\n      {\n    my $n\
5393 =$name[$a];\n   my $s;\n        $hseq{$n}{name}=$n;\n   $s=$s\
5394 eq[$a];$s=~s/\\s//g;\n  \n      $hseq{$n}{seq}=$s;\n    $hs\
5395 eq{$n}{com}=$com[$a];\n      }\n    return %hseq;\\
5396 n  }\n\n\n\n\n\n\n\nmy $fmsq = \"\";\nmy $flib = \\
5397 "\";\nmy %OPTS;\nmy %seq;\nmy ($id, $nseq, $i);\nm\
5398 y @nl;\n\nGetOptions(\"in=s\" => \\$fmsq, \"out=s\\
5399 " => \\$flib);\n\nif (! -s $fmsq) {\n    usage(\"e\
5400 mpty or non-existant file \\\"$fmsq\\\"\")\n}\nif \
5401 (length($flib)==0) {\n    usage(\"empty out-filena\
5402 me\")\n}\n\n\n\n\n\n\n%seq=read_fasta_seq($fmsq);\\
5403 n\n\n@nl=keys(%seq);\n\n$nseq=$#nl+1;\nopen FD_LIB\
5404 , \">$flib\" or die \"can't open $flib!\";\ntcoffe\
5405 elib_header($nseq, *FD_LIB);\nforeach $id (keys (%\
5406 seq))\n  {\n    my ($seq, $fmtseq);\n    \n    $se\
5407 q = $seq{$id}{seq};\n    \n    $fmtseq = rnaseqfmt\
5408 ($seq);# check here, formatting for folding import\
5409 ant later\n    if (length($seq)!=length($fmtseq)) \
5410 {\n        print STDERR \"ERROR: invalid sequence \
5411 $id is not an RNA sequence. read seq is: $seq\\n\"\
5412 ;\n        exit\n      }\n   \n    tcoffeelib_head\
5413 er_addseq($id, uc($seq), *FD_LIB);\n  }\ntcoffeeli\
5414 b_comment(\"generated by $myname on \" . localtime\
5415 (), *FD_LIB);\n\n\n\n$i=0;\nforeach $id (keys (%se\
5416 q))\n  {\n    my ($cleanid, $seq, $bpm);\n    $seq\
5417 =$seq{$id}{seq};\n    $cleanid = $id;\n    $cleani\
5418 d =~ s,[/ ],_,g;# needed for rnaplfold\n    $seq =\
5419  rnaseqfmt($seq);\n    \n    $bpm = plfold($cleani\
5420 d, rnaseqfmt($seq), $PROBTRESH);       \n    \n   \
5421  tcoffeelib_struct($i+1, length($seq), $bpm, *FD_L\
5422 IB);\n    $i++;\n}\n\n\ntcoffeelib_footer(*FD_LIB)\
5423 ;\nclose FD_LIB;\nexit (0);\n\n","\n\n\n\n\n$cmd=j\
5424 oin ' ', @ARGV;\nif ($cmd=~/-infile=(\\S+)/){ $seq\
5425 file=$1;}\nif ($cmd=~/-outfile=(\\S+)/){ $libfile=\
5426 $1;}\n\n\n\n%s=read_fasta_seq ($seqfile);\n\nopen \
5427 (F, \">$libfile\");\nforeach $name (keys (%s))\n  \
5428 {\n    my $tclib=\"$name.RNAplfold_tclib\";\n    p\
5429 rint (F \">$name _F_ $tclib\\n\");\n    seq2RNAplf\
5430 old2tclib ($name, $s{$name}{seq}, $tclib);\n  }\nc\
5431 lose (F);\nexit (EXIT_SUCCESS);\n\nsub seq2RNAplfo\
5432 ld2tclib\n  {\n    my ($name, $seq, $tclib)=@_;\n \
5433    my ($tmp);\n    $n++;\n    $tmp=\"tmp4seq2RNApl\
5434 fold_tclib.$$.$n.pep\";\n    open (RF, \">$tmp\");\
5435 \n    print (RF \">$name\\n$seq\\n\");\n    close \
5436 (RF);\n    \n    system \"t_coffee -other_pg RNApl\
5437 fold2tclib.pl -in=$tmp -out=$tclib\";\n    \n    u\
5438 nlink ($tmp);\n    return $tclib;\n  }\n    \n    \
5439 \nsub read_fasta_seq \n  {\n    my $f=@_[0];\n    \
5440 my %hseq;\n    my (@seq, @com, @name);\n    my ($a\
5441 , $s,$nseq);\n\n    open (F, $f);\n    while (<F>)\
5442 \n      {\n     $s.=$_;\n      }\n    close (F);\n\n  \
5443   \n    @name=($s=~/>(\\S*).*\\n[^>]*/g);\n    \n \
5444    @seq =($s=~/>.*.*\\n([^>]*)/g);\n    @com =($s=\
5445 ~/>\\S*(.*)\\n([^>]*)/g);\n\n    \n    $nseq=$#nam\
5446 e+1;\n    \n    for ($a=0; $a<$nseq; $a++)\n      \
5447 {\n     my $n=$name[$a];\n      $hseq{$n}{name}=$n;\n   $hseq\
5448 {$n}{seq}=$seq[$a];\n   $hseq{$n}{com}=$com[$a];\n  \
5449     }\n    return %hseq;\n  }\n","use Getopt::Long\
5450 ;\nGetOptions(\"-in=s\" => \\$fmsq1, \"-out=s\" =>\
5451  \\$outfile, \"-arch=s\" => \\$arch,\"-psv=s\" => \
5452 \\$psv, \"-hmmtop_home=s\", \\$hmmtop_home );\nope\
5453 n (O, \">$outfile\");\n\nif (!$hmmtop_home){$hmmto\
5454 p_home=\"/home/notredame/packages/hmmtop/hmmtop_2.\
5455 1\";}\nif ($arch){$ENV{'HMMTOP_ARCH'}=$arch;}\nels\
5456 e {$ENV{'HMMTOP_ARCH'}=\"$hmmtop_home/hmmtop.arch\\
5457 ";}\n\nif ($psv){$ENV{'HMMTOP_PSV'}=$psv;}\nelse{$\
5458 ENV{'HMMTOP_PSV'}=\"$hmmtop_home/hmmtop.psv\";}\n\\
5459 n$fmsq=\"seq2convert.$$.tmp\";\nsystem (\"t_coffee\
5460  -other_pg seq_reformat -in $fmsq1 -output fasta_s\
5461 eq > $fmsq\");\n%seq=read_fasta_seq($fmsq);\n\n$tm\
5462 pfile=\"fasta_seq2hmmtop_fasta.$$.tmp\";\nforeach \
5463 $s (keys (%seq))\n  {\n    \n    open F, \">$tmpfi\
5464 le\";\n    print F \">seq\\n$seq{$s}{seq}\\n\";\n \
5465    close F;\n\n    $result=`hmmtop -if=$tmpfile -s\
5466 f=FAS -pl 2>/dev/null`;\n    @r=($result=~/(.+)/g)\
5467 ;\n    foreach $l (@r)\n      {\n       \n      if ($l=~/pred\
5468 (.*)/)\n          {$p.=$1;}\n      }\n    \n    $p=~s/\\s\
5469 //g;\n    print O \">$seq{$s}{name}\\n$p\\n\";\n  \
5470   $p=\"\";\n  }\nunlink \"$tmpfile\";\nunlink \"$f\
5471 msq\";\nclose (O);\n\nsub read_fasta_seq \n  {\n  \
5472   my $f=$_[0];\n    my %hseq;\n    my (@seq, @com,\
5473  @name);\n    my ($a, $s,$nseq);\n\n    open (F, $\
5474 f);\n    while (<F>)\n      {\n $s.=$_;\n      }\n\
5475     close (F);\n\n    \n    @name=($s=~/>(.*).*\\n\
5476 [^>]*/g);\n    \n    @seq =($s=~/>.*.*\\n([^>]*)/g\
5477 );\n    @com =($s=~/>.*(.*)\\n([^>]*)/g);\n\n\n   \
5478  $nseq=$#name+1;\n    \n  \n    for ($a=0; $a<$nse\
5479 q; $a++)\n      {\n     my $n=$name[$a];\n      my $s;\n        $h\
5480 seq{$n}{name}=$n;\n     $s=$seq[$a];$s=~s/\\s//g;\n     \n\
5481         $hseq{$n}{seq}=$s;\n    $hseq{$n}{com}=$com[$a];\n  \
5482     }\n    return %hseq;\n  }\n","\n\n\n\n\nmy $FM\
5483 ODEL =\"\"; \nmy $TMPDIR = \"/tmp\";\n\n\n\n\nmy $\
5484 NUCALPH = \"ACGTUNRYMKSWHBVD\";\nmy $PRIMNUCALPH =\
5485  \"ACGTUN\";\nuse vars qw($NUCALPH $PRIMNUCALPH $T\
5486 MPDIR);\n\n\nmy $errmsg;\nuse vars qw($errmsg);\n\\
5487 n\n\nuse Getopt::Long;\nuse Cwd;\nuse File::Basena\
5488 me;\nuse File::Temp qw/ tempfile tempdir /;\nuse F\
5489 ile::Copy;\nuse File::Path;\n\n\n\nsub usage(;$)\n\
5490 {\n    my ($errmsg) = @_;\n    my $myname = basena\
5491 me($0);\n\n    if ($errmsg) {\n        print STDER\
5492 R \"ERROR: $errmsg\\n\";\n    }\n\n    print STDER\
5493 R << \"EOF\";\n    \n$myname: align two sequences \
5494 by means of consan\\'s sfold\nUsage:\n $myname -i \
5495 file -o file -d path\nOptions:\n -i|--in : pairwis\
5496 e input sequence file\n -o|--out: output alignment\
5497 \n -d|--directory containing data\n\nEOF\n}\n\nsub\
5498  read_stk_aln \n  {\n    my $f=$_[0];\n    my ($se\
5499 q, $id);\n    \n    my %hseq;\n\n    open (STK, \"\
5500 $f\");\n    while (<STK>)\n      {\n    if ( /^#/ || \
5501 /^\\/\\// || /^\\s*$/){;}\n     else\n    {\n       ($id,\
5502 $seq)=/(\\S+)\\s+(\\S+)/;\n         $hseq{$id}{'seq'}.\
5503 =$seq;\n          }\n      }\n    close (STK);\n    retur\
5504 n %hseq;\n  }\nsub read_fasta_seq \n  {\n    my $f\
5505 =$_[0];\n    my %hseq;\n    my (@seq, @com, @name)\
5506 ;\n    my ($a, $s,$nseq);\n\n    open (F, $f);\n  \
5507   while (<F>)\n      {\n        $s.=$_;\n      }\n    clo\
5508 se (F);\n\n    \n    @name=($s=~/>(.*).*\\n[^>]*/g\
5509 );\n    \n    @seq =($s=~/>.*.*\\n([^>]*)/g);\n   \
5510  @com =($s=~/>.*(.*)\\n([^>]*)/g);\n\n    \n    $n\
5511 seq=$#name+1;\n    \n    for ($a=0; $a<$nseq; $a++\
5512 )\n      {\n    my $n=$name[$a];\n      $hseq{$n}{name}=$n\
5513 ;\n     $hseq{$n}{seq}=$seq[$a];\n      $hseq{$n}{com}=$com\
5514 [$a];\n      }\n    return %hseq;\n  }\n\n\n\nsub \
5515 sfold_parseoutput($$)\n{\n    my ($frawout, $foutf\
5516 a) = @_;\n    my %haln;\n    my ($fstk, $cmd, $id)\
5517 ;\n    open FOUTFA, \">$foutfa\";\n    \n    $fstk\
5518  = $frawout . \".stk\";\n    \n    # first line of\
5519  raw out contains info\n    # remaining stuff is s\
5520 tockholm formatted\n    $cmd = \"sed -e '1d' $fraw\
5521 out\";\n    system(\"$cmd > $fstk\");\n    if ($? \
5522 != 0) {\n        $errmsg = \"command failed with e\
5523 xit status $?.\";\n        $errmsg .=  \"Command w\
5524 as \\\"$cmd\\\"\";\n        return -1;\n    }\n\n \
5525    # this gives an error message. just ignore it..\
5526 .\n    %haln=read_stk_aln ( $fstk);\n    foreach $\
5527 i (keys (%haln))\n      {\n     my $s;\n        $s=$haln{$i}{\
5528 'seq'};\n       $s =~ s/\\./-/g;\n      print FOUTFA \">$i\\n\
5529 $s\\n\";\n      }\n    close FOUTFA;\n    return 0\
5530 ;\n}\n\n\n\n\nsub sfold_wrapper($$$$)\n{\n    \n  \
5531   my ($fs1, $fs2, $fmodel, $foutfa) = @_;\n    \n\\
5532 n    my ($cmd, $frawout, $ferrlog, $freadme, $ftim\
5533 elog, $fstk);\n\n    # add  basename($fmsqin) (unk\
5534 nown here!)\n    $frawout = \"sfold.log\";\n    $f\
5535 errlog = \"sfold.err\";\n    $ftimelog = \"sfold.t\
5536 ime\";\n    $freadme =  \"sfold.README\";\n    $fs\
5537 tk = \"sfold.stk\";\n    \n    # prepare execution\
5538 ...\n    #\n    # ./tmp is essential for dswpalign\
5539 \n    # otherwise you'll get a segfault\n    mkdir\
5540  \"./tmp\";\n    \n    $cmd = \"sfold -m $fmodel $\
5541 fs1 $fs2\";\n    open(FREADME,\">$freadme\");\n   \
5542  print FREADME \"$cmd\\n\"; \n    close(FREADME);\\
5543 n\n    # and go\n    #\n    system(\"/usr/bin/time\
5544  -p -o $ftimelog $cmd >$frawout 2>$ferrlog\");\n  \
5545   if ($? != 0) {\n        $errmsg = \"command fail\
5546 ed with exit status $?\";\n        $errmsg .= \"co\
5547 mmand was \\\"$cmd\\\". See \" . getcwd . \"\\n\";\
5548 \n        return -1;\n    }\n\n    return sfold_pa\
5549 rseoutput($frawout, $foutfa);\n}\n\n\n\n\n\n\n\nmy\
5550  ($help, $fmsqin, $fmsaout);\nGetOptions(\"help\" \
5551  => \\$help,\n           \"in=s\" => \\$fmsqin,\n \
5552           \"out=s\" => \\$fmsaout,\n       \"data=s\"\
5553  => \\$ref_dir);\n\n\n\nif ($help) {\n    usage();\
5554 \n    exit(0);\n}\nif (! defined($fmsqin)) {\n    \
5555 usage('missing input filename');\n    exit(1);\n}\\
5556 nif (! defined($fmsaout)) {\n    usage('missing ou\
5557 tput filename');\n    exit(1);\n\n}\nif (scalar(@A\
5558 RGV)) {\n    usage('Unknown remaining args');\n   \
5559  exit(1);\n}\n\n$FMODEL = \"$ref_dir/mix80.mod\";\\
5560 nif (! -e \"$FMODEL\") {\n    die(\"couldn't find \
5561 sfold grammar model file. Expected $FMODEL\\n\");\\
5562 n}\n\n\nmy %hseq=read_fasta_seq ($fmsqin);\nmy $id\
5563 ;\n\nforeach $id (keys(%hseq))\n  {\n    push(@seq\
5564 _array, $hseq{$id});\n  }\n\nif ( scalar(@seq_arra\
5565 y) != 2 ) {\n    die(\"Need *exactly* two sequence\
5566 s as input (pairwise alignment!).\")\n}\n\n\n\nmy \
5567 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yd\
5568 ay, $isdst) = localtime(time);\nmy $datei = sprint\
5569 f(\"%4d-%02d-%02d\", $year+1900, $mon+1, $mday);\n\
5570 my $templ = basename($0) . \".\" . $datei . \".pid\
5571 -\" . $$ . \".XXXXXX\";\nmy $wd = tempdir ( $templ\
5572 , DIR => $TMPDIR);\n\ncopy($fmsqin, \"$wd/\" . bas\
5573 ename($fmsqin) . \".org\"); # for reproduction\nco\
5574 py($FMODEL, \"$wd\");\nmy $fmodel = basename($FMOD\
5575 EL);\nmy $orgwd = getcwd;\nchdir $wd;\n\n\n\nmy @s\
5576 epseqfiles;\nforeach $id (keys(%hseq)) {\n    my (\
5577 $seq, $orgseq, $fname, $sout);\n    $seq=$hseq{$id\
5578 }{'seq'};\n    \n    $fname = basename($fmsqin) . \
5579 \"_$id.fa\";\n    # replace funnies in file/id nam\
5580 e (e.g. \"/\" \" \" etc)\n    $fname =~ s,[/ ],_,g\
5581 ;\n    open (PF, \">$fname\");\n    print (PF \">$\
5582 id\\n$seq\\n\");\n    close (PF);\n\n    push(@sep\
5583 seqfiles, $fname);\n}\n\nmy ($f1, $f2, $fout);\n$f\
5584 1 = $sepseqfiles[0];\n$f2 = $sepseqfiles[1];\n$fou\
5585 t = $wd . basename($fmsqin) . \".out.fa\";\nif (sf\
5586 old_wrapper($f1, $f2, $fmodel, \"$fout\") != 0) {\\
5587 n    printf STDERR \"ERROR: See logs in $wd\\n\";\\
5588 n    exit(1);\n} else {\n    chdir $orgwd;\n    co\
5589 py($fout, $fmsaout);\n    rmtree($wd);\n   exit(0)\
5590 ;\n}\n","\nuse Env qw(HOST);\nuse Env qw(HOME);\nu\
5591 se Env qw(USER);\n\n\n$tmp=clean_cr ($ARGV[0]);\no\
5592 pen (F, $tmp);\n\nwhile ( <F>)\n  {\n    my $l=$_;\
5593 \n    if ( $l=~/^# STOCKHOLM/){$stockholm=1;}\n   \
5594  elsif ( $stockholm && $l=~/^#/)\n      {\n     $l=~/^\
5595 #(\\S+)\\s+(\\S+)\\s+(\\S*)/g;\n        $l=\"_stockholmha\
5596 sch_$1\\_stockholmspace_$2 $3\\n\";\n      }\n    \
5597 $file.=$l;\n  }\nclose (F);\nunlink($tmp);\n$file1\
5598 =$file;\n\n$file=~s/\\#/_hash_symbol_/g;\n$file=~s\
5599 /\\@/_arobase_symbol_/g;\n\n\n$file=~s/\\n[\\.:*\\\
5600 s]+\\n/\\n\\n/g;\n\n$file=~s/\\n[ \\t\\r\\f]+(\\b)\
5601 /\\n\\1/g;\n\n\n$file=~s/(\\n\\S+)(\\s+)(\\S)/\\1_\
5602 blank_\\3/g;\n\n$file=~s/[ ]//g;\n$file=~s/_blank_\
5603 / /g;\n\n\n\n$file =~s/\\n\\s*\\n/#/g;\n\n$file.=\\
5604 "#\";\n$file =~s/\\n/@/g;\n\n\n\n\n@blocks=split /\
5605 \\#/, $file;\nshift (@blocks);\n@s=split /\\@/, $b\
5606 locks[0];\n$nseq=$#s+1;\n\n\n\n$file=join '@', @bl\
5607 ocks;\n@lines=split /\\@/,$file;\n\n$c=0;\n\nforea\
5608 ch $l (@lines)\n  {\n    if (!($l=~/\\S/)){next;}\\
5609 n    elsif ($stockholm && ($l=~/^\\/\\// || $l=~/S\
5610 TOCKHOLM/)){next;}#get read of STOCHOLM Terminator\
5611 \n   \n    $l=~/(\\S+)\\s+(\\S*)/g;\n    $n=$1; $s\
5612 =$2;\n    \n    $seq[$c].=$s;\n    $name[$c]=$n;\n\
5613     $c++;\n    \n    if ( $c==$nseq){$c=0;}\n    \\
5614 n  } \n\nif ( $c!=0)\n      {\n print STDERR \"ERR\
5615 OR: $ARGV[0] is NOT an MSA in Clustalw format: mak\
5616 e sure there is no blank line within a block [ERRO\
5617 R]\\n\";\n      exit (EXIT_FAILURE);\n      }\n\nfor ($\
5618 a=0; $a< $nseq; $a++)\n  {\n    $name[$a]=cleanstr\
5619 ing ($name[$a]);\n    $seq[$a]=cleanstring ($seq[$\
5620 a]);\n    $seq[$a]=breakstring($seq[$a], 60);\n   \
5621  \n    $line=\">$name[$a]\\n$seq[$a]\\n\";\n    \n\
5622     print \"$line\";\n  }\nexit (EXIT_SUCCESS);\n\\
5623 nsub cleanstring\n  {\n    my $s=@_[0];\n    $s=~s\
5624 /_hash_symbol_/\\#/g;\n    $s=~s/_arobase_symbol_/\
5625 \\@/g;\n    $s=~s/[ \\t]//g;\n    return $s;\n  }\\
5626 nsub breakstring\n  {\n    my $s=@_[0];\n    my $s\
5627 ize=@_[1];\n    my @list;\n    my $n,$ns, $symbol;\
5628 \n    \n    @list=split //,$s;\n    $n=0;$ns=\"\";\
5629 \n    foreach $symbol (@list)\n      {\n        if ( $n==\
5630 $size)\n          {\n       $ns.=\"\\n\";\n         $n=0;\n       }\
5631 \n      $ns.=$symbol;\n $n++;\n      }\n    return $ns;\
5632 \n    }\n\nsub clean_cr\n  {\n    my $f=@_[0];\n  \
5633   my $file;\n    \n    $tmp=\"f$.$$\";\n    \n    \
5634 \n    open (IN, $f);\n    open (OUT, \">$tmp\");\n\
5635     \n    while ( <IN>)\n      {\n      $file=$_;\n     $fi\
5636 le=~s/\\r\\n/\\n/g;\n   $file=~s/\\n\\r/\\n/g;\n        $fi\
5637 le=~s/\\r\\r/\\n/g;\n   $file=~s/\\r/\\n/g;\n   print \
5638 OUT \"$file\";\n      }\n    \n    close (IN);\n  \
5639   close (OUT);\n    return $tmp;\n  }\n","use Env \
5640 qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\n\\
5641 n\n$query_start=-1;\n$query_end=-1;\n\nwhile (<>)\\
5642 n  {\n    if ( /\\/\\//){$in_aln=1;}\n    elsif ( \
5643 $in_aln && /(\\S+)\\s+(.*)/)\n      {\n\n\n     $name=\
5644 $1;\n   \n\n    $seq=$2;\n      $seq=~s/\\s//g;\n        $se\
5645 q=~s/\\~/\\-/g;\n       $seq=~s/\\./\\-/g;\n    if ( $list{\
5646 $n}{'name'} && $list{$n}{'name'} ne $name)\n      {\n\
5647             print \"$list{$n}{'name'} Vs $name\";\n         \\
5648 n           exit (EXIT_FAILURE);\n        }\n   else\n    {\n     \
5649   $list{$n}{'name'}= $name;\n     }\n\n $list{$n}{'s\
5650 eq'}=$list{$n}{'seq'}.$seq;\n   \n      $nseq=++$n;\n   \n \
5651      }\n    else\n      {$n=0;}\n  }\n\n\nfor ($a=\
5652 0; $a<$nseq; $a++)\n  {\n    print \">$list{$a}{'n\
5653 ame'}\\n$list{$a}{'seq'}\\n\";\n  }\n      \n","\n\
5654 use Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw(U\
5655 SER);\n\n                                         \
5656                \nuse strict;                      \
5657                        \nuse warnings;\nuse diagno\
5658 stics;\n\nmy $in_hit_list, my $in_aln=0, my(%name_\
5659 list)=(),my (%list)=(),my $n_seq=0; my $test=0;\nm\
5660 y($j)=0, my $n=0, my $nom, my $lg_query, my %vu=()\
5661 ;\n\nopen (F, \">tmp\");\n\n$/=\"\\n\";\nwhile (<>\
5662 )\n{\n    print F $_;\n    if($_ =~ /Query=\\s*(.+\
5663 ?)\\s/i) { $nom=$1;}\n\n    if ( /Sequences produc\
5664 ing significant alignments/){$in_hit_list=1;}\n   \
5665  \n    if ($_=~ /^pdb\\|/i) { $_=~ s/pdb\\|//g; }\\
5666 n    if ($_=~ /^(1_\\d+)\\s+\\d+/) { $_=~ s/$1/QUE\
5667 RY/;}\n      \n    if ( /^(\\S+).+?\\s+[\\d.]+\\s+\
5668 ([\\de.-]+)\\s+$/ && $in_hit_list)      \n    {\n       my($i\
5669 d)=$1; # \n     $id=~ s/\\|/_/g; #\n    if ($id =~ /.+_$/\
5670 ) { chop($id) }; #\n    $name_list{$n_seq++}=$id;\n     $\
5671 name_list{$n_seq-1}=~ s/.*\\|//g;     \n    }\n  \\
5672 n    if (/query/i) {$in_aln=1;}\n    if ( /^(\\S+)\
5673 \\s+(\\d+)\\s+([a-zA-Z-]+)\\s+(\\d+)/ || /^(\\S+)(\
5674 \\s+)(\\-+)(\\s+)/ && ($in_aln == 1))\n    {\n  my \
5675 $name=$1;\n     my $start=$2;\n my $seq=$3;\n   my $end=\
5676 $4;\n           \n      if ($name =~ /QUERY/i) { $lg_query=lengt\
5677 h($seq); }\n\n  unless ($test > $n) #m\n        {\n         my\
5678 (@seqq)= split('',$seq);\n          my($gap_missing)= s\
5679 calar(@seqq);\n     \n      while ($gap_missing != \
5680 $lg_query)  { unshift (@seqq,\"-\"); $gap_missing=\
5681  scalar(@seqq); }\n         $seq=join('',@seqq);  #m\n\
5682         }\n     \n      if ($name =~ /QUERY/i)\n        {\n         $n=0; %vu\
5683 =(); $j=0;\n        $list{$n}{'real_name'}=\"$nom\";\\
5684 n       }       \n      else\n  {\n         unless (exists $vu{$name}) {\
5685  ++$j;} \n          $list{$n}{'real_name'}=$name_list{$\
5686 j-1};\n }\n             \n      $list{$n}{'name'}=$name;\n\n    $seq=\
5687 ~tr/a-z/A-Z/;\n $list{$n}{'seq'}=$list{$n}{'seq'};\
5688 \n      $list{$n}{'seq'}.=$seq;\n\n     $n++;\n $vu{$name}+\
5689 +;\n    $test++;\n   } \n    \n}\n\nmy @numero=();\n\\
5690 nfor (my $a=0; $a<$n; $a++) #m\n{\n    my $long=le\
5691 ngth($list{0}{'seq'});  \n    my $long1= length($l\
5692 ist{$a}{'seq'});\n  \n    while ($long1 ne $long)\\
5693 n    {\n        $list{$a}{'seq'}.=\"-\";\n      $long1= length\
5694  ($list{$a}{'seq'});\n    } \n \n    push (@numero\
5695 ,\"$list{$a}{'name'} $list{$a}{'real_name'}\\n\");\
5696 \n}\n\nmy %dejavu=();\n\n\nfor (my $i=0; $i<=$#num\
5697 ero; $i++)\n{\n    my $s=\">$list{$i}{'real_name'}\
5698 \\n$list{$i}{'seq'}\\n\";\n    my $k=0;\n    \n   \
5699  if (exists $dejavu{$numero[$i]}) {next;}\n    els\
5700 e\n    {        \n      for ($j=0; $j<$n ; $j++)\n      {\n         if \
5701 (\"$numero[$i]\" eq \"$numero[$j]\" && $j != $i )\\
5702 n           {\n         ++$k;\n         $s .=\">$list{$j}{'real_name'}\
5703 \\n$list{$j}{'seq'}\\n\";\n         }\n }       \n    }\n   \
5704  \n    if ($k>0) \n    {\n      my $cons;\n     open (SOR,\\
5705 ">tempo_aln2cons\"); print SOR $s;  close SOR ;\n       \
5706 open (COM,\"t_coffee -other_pg seq_reformat -in te\
5707 mpo_aln2cons -action +aln2cons +upper |\") ; \n   \
5708         while (<COM>)\n {       \n          if (/^>/) { $cons =\">\
5709 $list{$i}{'real_name'}\\n\"; next;}\n       $_=~ s/\\
5710 \n//g;\n            $cons .=$_;\n       }\n     close COM; unlink (\
5711 \"tempo_aln2cons\");\n  print $cons,\"\\n\"; print \
5712 F $cons,\"\\n\";\n    } \n    else  { print $s;  p\
5713 rint F $s; }\n    \n    $dejavu{$numero[$i]}++;\n}\
5714  #m\n\nexit;\n\n\n\n\n\n\n\n\n\n\n\n","use Env;\n\\
5715 n\n$tmp_dir=\"\";\n$init_dir=\"\";\n$program=\"tc_\
5716 generic_method.pl\";\n\n$blast=@ARGV[0];\n\n$name=\
5717 \"query\";$seq=\"\";\n%p=blast_xml2profile($name,$\
5718 seq,100, 0, 0, $blast);\n&output_profile (%p);\n\n\
5719 \nsub output_profile\n  {\n    my (%profile)=(@_);\
5720 \n    my ($a);\n    for ($a=0; $a<$profile{n}; $a+\
5721 +)\n      {\n   \n      print \">$profile{$a}{name} $prof\
5722 ile{$a}{comment}\\n$profile{$a}{seq}\\n\";\n      \
5723 }\n    return;\n  }\nsub file_contains \n  {\n    \
5724 my ($file, $tag, $max)=(@_);\n    my ($n);\n    $n\
5725 =0;\n    \n    if ( !-e $file && ($file =~/$tag/))\
5726  {return 1;}\n    elsif ( !-e $file){return 0;}\n \
5727    else \n      {\n     open (FC, \"$file\");\n while \
5728 ( <FC>)\n         {\n       if ( ($_=~/$tag/))\n              {\n\
5729                 close (FC);\n           return 1;\n           }\n           elsif (\
5730 $max && $n>$max)\n            {\n               close (FC);\n           retur\
5731 n 0;\n        }\n           $n++;\n       }\n      }\n    clo\
5732 se (FC);\n    return 0;\n  }\n      \n    \nsub file\
5733 2string\n  {\n    my $f=@_[0];\n    my $string, $l\
5734 ;\n    open (F,\"$f\");\n    while (<F>)\n      {\\
5735 n\n     $l=$_;\n        #chomp ($l);\n  $string.=$l;\n      }\\
5736 n    close (F);\n    $string=~s/\\r\\n//g;\n    $s\
5737 tring=~s/\\n//g;\n    return $string;\n  }\n\n\n\n\
5738 sub tag2value \n  {\n    \n    my $tag=(@_[0]);\n \
5739    my $word=(@_[1]);\n    my $return;\n    \n    $\
5740 tag=~/$word=\"([^\"]+)\"/;\n    $return=$1;\n    r\
5741 eturn $return;\n  }\n      \nsub hit_tag2pdbid\n  \
5742 {\n    my $tag=(@_[0]);\n    my $pdbid;\n       \n\
5743     $tag=~/id=\"(\\S+)\"/;\n    $pdbid=$1;\n    $p\
5744 dbid=~s/_//;\n    return $pdbid;\n  }\nsub id2pdbi\
5745 d \n  {\n    my $id=@_[0];\n  \n    if ($id =~/pdb\
5746 /)\n      {\n   $id=~/pdb(.*)/;\n       $id=$1;\n      }\n\
5747     $id=~s/[|¦_]//g;\n    return $id;\n  }\nsub se\
5748 t_blast_type \n  {\n    my $file =@_[0];\n    if (\
5749 &file_contains ($file,\"EBIApplicationResult\",100\
5750 )){$BLAST_TYPE=\"EBI\";}\n    elsif (&file_contain\
5751 s ($file,\"NCBI_BlastOutput\",100)) {$BLAST_TYPE=\\
5752 "NCBI\";}\n    else\n      {\n  $BLAST_TYPE=\"\";\n\
5753       }\n    return $BLAST_TYPE;\n  }\nsub blast_x\
5754 ml2profile \n  {\n    my ($name,$seq,$maxid, $mini\
5755 d, $mincov, $file)=(@_);\n    my (%p, $a, $string,\
5756  $n);\n    \n\n\n    if ($BLAST_TYPE eq \"EBI\" ||\
5757  &file_contains ($file,\"EBIApplicationResult\",10\
5758 0)){%p=ebi_blast_xml2profile(@_);}\n    elsif ($BL\
5759 AST_TYPE eq \"NCBI\" || &file_contains ($file,\"NC\
5760 BI_BlastOutput\",100)){%p=ncbi_blast_xml2profile(@\
5761 _);}\n    else \n      {\n      print \"************ ER\
5762 ROR: Blast Returned an unknown XML Format ********\
5763 **************\";\n     die;\n      }\n    for ($a=0; \
5764 $a<$p{n}; $a++)\n      {\n      my $name=$p{$a}{name};\\
5765 n       $p{$name}{seq}=$p{$a}{seq};\n      }\n    return\
5766  %p;\n  }\nsub ncbi_blast_xml2profile \n  {\n    m\
5767 y ($name,$seq,$maxid, $minid, $mincov, $string)=(@\
5768 _);\n    my ($L,$l, $a,$b,$c,$d,$nhits,@identifyer\
5769 L);\n    \n    \n    $seq=~s/[^a-zA-Z]//g;\n    $L\
5770 =length ($seq);\n    \n    %hit=&xml2tag_list ($st\
5771 ring, \"Hit\");\n    \n    \n    for ($nhits=0,$a=\
5772 0; $a<$hit{n}; $a++)\n      {\n my ($ldb,$id, $ide\
5773 ntity, $expectation, $start, $end, $coverage, $r);\
5774 \n      my (%ID,%DE,%HSP);\n    \n      $ldb=\"\";\n\n  %ID=&xml\
5775 2tag_list ($hit{$a}{body}, \"Hit_id\");\n       $identif\
5776 yer=$ID{0}{body};\n     \n      %DE=&xml2tag_list ($hit{$a}\
5777 {body}, \"Hit_def\");\n $definition=$DE{0}{body};\\
5778 n       \n      %HSP=&xml2tag_list ($hit{$a}{body}, \"Hsp\");\
5779 \n      for ($b=0; $b<$HSP{n}; $b++)\n    {\n       my (%S\
5780 TART,%END,%E,%I,%Q,%M);\n\n      \n         %START=&xml2ta\
5781 g_list ($HSP{$b}{body}, \"Hsp_query-from\");\n     \
5782  %HSTART=&xml2tag_list ($HSP{$b}{body}, \"Hsp_hit-\
5783 from\");\n          \n      %LEN=  &xml2tag_list ($HSP{$\
5784 b}{body}, \"Hsp_align-len\");\n     %END=  &xml2ta\
5785 g_list ($HSP{$b}{body}, \"Hsp_query-to\");\n        %\
5786 HEND=  &xml2tag_list ($HSP{$b}{body}, \"Hsp_hit-to\
5787 \");\n      %E=&xml2tag_list     ($HSP{$b}{body}, \\
5788 "Hsp_evalue\");\n           %I=&xml2tag_list     ($HSP{$\
5789 b}{body}, \"Hsp_identity\");\n      %Q=&xml2tag_lis\
5790 t     ($HSP{$b}{body}, \"Hsp_qseq\");\n     %M=&xm\
5791 l2tag_list     ($HSP{$b}{body}, \"Hsp_hseq\");\n         \
5792    \n       for ($e=0; $e<$Q{n}; $e++)\n\n            {\n\
5793                 $qs=$Q{$e}{body};\n             $ms=$M{$e}{body};\n             if ($s\
5794 eq eq\"\"){$seq=$qs;$L=length($seq);}\n         \n              $expe\
5795 ctation=$E{$e}{body};\n         $identity=($LEN{$e}{body}\
5796 ==0)?0:$I{$e}{body}/$LEN{$e}{body}*100;\n               $start=\
5797 $START{$e}{body};\n             $end=$END{$e}{body};\n          $Hsta\
5798 rt=$HSTART{$e}{body};\n         $Hend=$HEND{$e}{body};\n        \
5799 \n              $coverage=(($end-$start)*100)/$L;\n\n   \n              if (\
5800 $identity>$maxid || $identity<$minid || $coverage<\
5801 $mincov){next;}\n               @lr1=(split (//,$qs));\n                @lr2=\
5802 (split (//,$ms));\n             $l=$#lr1+1;\n           for ($c=0;$c<$\
5803 L;$c++){$p[$nhits][$c]=\"-\";}\n                for ($d=0,$c=0; \
5804 $c<$l; $c++)\n            {\n               $r=$lr1[$c];\n                  if \
5805 ( $r=~/[A-Za-z]/)\n                   {\n                       \n                      $p[$nhits][$\
5806 d + $start-1]=$lr2[$c];\n                       $d++;\n               }\n                 \
5807 }\n             $Qseq[$nhits]=$qs;\n            $Hseq[$nhits]=$ms;\n            $\
5808 QstartL[$nhits]=$start;\n               $HstartL[$nhits]=$Hstar\
5809 t;\n            $identityL[$nhits]=$identity;\n         $endL[$nhit\
5810 s]=$end;\n              $definitionL[$nhits]=$definition;\n             $\
5811 identifyerL[$nhits]=$identifyer;\n              $comment[$nhit\
5812 s]=\"$ldb|$identifyer [Eval=$expectation][id=$iden\
5813 tity%][start=$Hstart end=$Hend]\";\n            $nhits++;\n     \
5814       }\n         }\n      }\n    \n    $profile{n}=0;\n\
5815     $profile{$profile{n}}{name}=$name;\n    $profi\
5816 le{$profile{n}}{seq}=$seq;\n    $profile {n}++;\n \
5817    \n    for ($a=0; $a<$nhits; $a++)\n      {\n $n\
5818 =$a+1;\n        \n      $profile{$n}{name}=\"$name\\_$a\";\n    $\
5819 profile{$n}{seq}=\"\";\n        $profile{$n}{Qseq}=$Qseq[\
5820 $a];\n  $profile{$n}{Hseq}=$Hseq[$a];\n $profile{$n\
5821 }{Qstart}=$QstartL[$a];\n       $profile{$n}{Hstart}=$Hs\
5822 tartL[$a];\n    $profile{$n}{identity}=$identityL[$a]\
5823 ;\n     $profile{$n}{definition}=$definitionL[$a];\n    $\
5824 profile{$n}{identifyer}=$identifyerL[$a];\n     $profi\
5825 le{$n}{comment}=$comment[$a];\n for ($b=0; $b<$L; \
5826 $b++)\n   {\n       if ($p[$a][$b])\n         {\n               $pr\
5827 ofile{$n}{seq}.=$p[$a][$b];\n         }\n           else\n\
5828               {\n               $profile{$n}{seq}.=\"-\";\n           }\n       \
5829   }\n      }\n    \n    $profile{n}=$nhits+1;\n   \
5830  return %profile;\n  }\nsub ebi_blast_xml2profile \
5831 \n  {\n    my ($name,$seq,$maxid, $minid, $mincov,\
5832  $string)=(@_);\n    my ($L,$l, $a,$b,$c,$d,$nhits\
5833 ,@identifyerL,$identifyer);\n    \n\n    \n    $se\
5834 q=~s/[^a-zA-Z]//g;\n    $L=length ($seq);\n    %hi\
5835 t=&xml2tag_list ($string, \"hit\");\n    \n    for\
5836  ($nhits=0,$a=0; $a<$hit{n}; $a++)\n      {\n   my (\
5837 $ldb,$id, $identity, $expectation, $start, $end, $\
5838 coverage, $r);\n        my (%Q,%M,%E,%I);\n     \n      $ldb=&tag2\
5839 value ($hit{$a}{open}, \"database\");\n $identifye\
5840 r=&tag2value ($hit{$a}{open}, \"id\");\n\n      $descri\
5841 ption=&tag2value ($hit{$a}{open}, \"description\")\
5842 ;\n     \n      %Q=&xml2tag_list ($hit{$a}{body}, \"querySe\
5843 q\");\n %M=&xml2tag_list ($hit{$a}{body}, \"matchS\
5844 eq\");\n        %E=&xml2tag_list ($hit{$a}{body}, \"expec\
5845 tation\");\n    %I=&xml2tag_list ($hit{$a}{body}, \"i\
5846 dentity\");\n   \n\n    for ($b=0; $b<$Q{n}; $b++)\n      \
5847 {\n         \n      \n      $qs=$Q{$b}{body};\n     $ms=\
5848 $M{$b}{body};\n     if ($seq eq\"\"){$seq=$qs;$L=l\
5849 ength($seq);}\n\n           $expectation=$E{$b}{body};\n\
5850             $identity=$I{$b}{body};\n       \n              \n  \
5851     $start=&tag2value ($Q{$b}{open}, \"start\");\n\
5852             $end=&tag2value ($Q{$b}{open}, \"end\");\n    \
5853   $startM=&tag2value ($M{$b}{open}, \"start\");\n       \
5854     $endM=&tag2value ($M{$b}{open}, \"end\");\n   \
5855   $coverage=(($end-$start)*100)/$L;\n       \n     # \
5856 print \"$id: ID: $identity COV: $coverage [$start \
5857 $end]\\n\";\n       \n      \n      if ($identity>$max\
5858 id || $identity<$minid || $coverage<$mincov){next;\
5859 }\n         # print \"KEEP\\n\";\n\n        \n      @lr1=(\
5860 split (//,$qs));\n          @lr2=(split (//,$ms));\n      \
5861   $l=$#lr1+1;\n     for ($c=0;$c<$L;$c++){$p[$nhit\
5862 s][$c]=\"-\";}\n            for ($d=0,$c=0; $c<$l; $c++)\\
5863 n             {\n               $r=$lr1[$c];\n          if ( $r=~/[A-Za-z]/)\\
5864 n                 {\n               \n              $p[$nhits][$d + $start-1]=$l\
5865 r2[$c];\n                   $d++;\n               }\n         }\n         \n        \\
5866 n           $identifyerL[$nhits]=$identifyer;\n     $com\
5867 ment[$nhits]=\"$ldb|$identifyer [Eval=$expectation\
5868 ][id=$identity%][start=$startM end=$endM]\";\n     \
5869  $nhits++;\n      }\n      }\n    \n    $profile{n}=0\
5870 ;\n    $profile{$profile{n}}{name}=$name;\n    $pr\
5871 ofile{$profile{n}}{seq}=$seq;\n    $profile {n}++;\
5872 \n    \n    for ($a=0; $a<$nhits; $a++)\n      {\n\
5873         $n=$a+1;\n      $profile{$n}{name}=\"$name\\_$a\";\n    $\
5874 profile{$n}{seq}=\"\";\n        $profile{$n}{identifyer}=\
5875 $identifyerL[$a];\n     \n      $profile{$n}{comment}=$comm\
5876 ent[$a];\n      for ($b=0; $b<$L; $b++)\n         {\n       if \
5877 ($p[$a][$b])\n        {\n               $profile{$n}{seq}.=$p[$a\
5878 ][$b];\n              }\n           else\n            {\n               $profile{\
5879 $n}{seq}.=\"-\";\n            }\n         }\n      }\n    $pr\
5880 ofile{n}=$nhits+1;\n    \n    return %profile;\n  \
5881 }\n\nsub blast_xml2hit_list\n  {\n    my $string=(\
5882 @_[0]);\n    return &xml2tag_list ($string, \"hit\\
5883 ");\n  }\nsub xml2tag_list  \n  {\n    my ($string\
5884 _in,$tag)=@_;\n    my $tag_in, $tag_out;\n    my %\
5885 tag;\n    \n    if (-e $string_in)\n      {\n   $str\
5886 ing=&file2string ($string_in);\n      }\n    else\\
5887 n      {\n      $string=$string_in;\n      }\n    $tag_\
5888 in1=\"<$tag \";\n    $tag_in2=\"<$tag>\";\n    $ta\
5889 g_out=\"/$tag>\";\n    $string=~s/>/>##1/g;\n    $\
5890 string=~s/</##2</g;\n    $string=~s/##1/<#/g;\n   \
5891  $string=~s/##2/#>/g;\n    @l=($string=~/(\\<[^>]+\
5892 \\>)/g);\n    $tag{n}=0;\n    $in=0;$n=-1;\n  \n \\
5893 n\n    foreach $t (@l)\n      {\n\n     $t=~s/<#//;\n   \
5894 $t=~s/#>//;\n   \n      if ( $t=~/$tag_in1/ || $t=~/$tag_\
5895 in2/)\n   {\n    \n         $in=1;\n        $tag{$tag{n}}{o\
5896 pen}=$t;\n          $n++;\n         \n    }\n   elsif ($t=~/$t\
5897 ag_out/)\n        {\n       \n\n            $tag{$tag{n}}{close}\
5898 =$t;\n      $tag{n}++;\n            $in=0;\n      }\n   elsif (\
5899 $in)\n    {\n      \n       $tag{$tag{n}}{body}.=$t;\n  \
5900   }\n      }\n  \n    return %tag;\n  }\n\n\n\n\n"\
5901 ,"use Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw\
5902 (USER);\nwhile (<>)\n  {\n    if ( /^>(\\S+)/)\n  \
5903     {\n if ($list{$1})\n          {\n       print \">$1_$li\
5904 st{$1}\\n\";\n      $list{$1}++;\n        }\n   else\n    {\
5905 \n          print $_;\n     $list{$1}=1;\n        }\n      }\
5906 \n    else\n      {\n   print $_;\n      }\n  }\n   \
5907    \n","\n\n\nuse Env qw(HOST);\nuse Env qw(HOME);\
5908 \nuse Env qw(USER);\n\n\nopen (F,$ARGV[0]);\nwhile\
5909  ( <>)\n  {\n    @x=/([^:,;\\)\\(\\s]+):[^:,;\\)\\\
5910 (]*/g;\n    @list=(@list,@x);\n  }\n$n=$#list+1;\n\
5911 foreach $n(@list){print \">$n\\nsequence\\n\";}\n\\
5912 n\nclose (F);\n","\nopen (F, $ARGV[0]);\n\nwhile (\
5913  <F>)\n  {\n    @l=($_=~/(\\S+)/g);\n    \n    $na\
5914 me=shift @l;\n    \n    print STDOUT \"\\n>$name\\\
5915 n\";\n    foreach $e (@l){$e=($e eq \"0\")?\"O\":\\
5916 "I\";print \"$e\";}\n  }\nclose (F);\n\n                       \\
5917 n    \n","use Env qw(HOST);\nuse Env qw(HOME);\nus\
5918 e Env qw(USER);\n\n$tmp=\"$ARGV[0].$$\";\nopen (IN\
5919 , $ARGV[0]);\nopen (OUT, \">$tmp\");\n\nwhile ( <I\
5920 N>)\n  {\n    $file=$_;\n    $file=~s/\\r\\n/\\n/g\
5921 ;\n    $file=~s/\\n\\r/\\n/g;\n    $file=~s/\\r\\r\
5922 /\\n/g;\n    $file=~s/\\r/\\n/g;\n    print OUT \"\
5923 $file\";\n  }\nclose (IN);\nclose (OUT);\n\nopen (\
5924 OUT, \">$ARGV[0]\");\nopen (IN, \"$tmp\");\n\nwhil\
5925 e ( <IN>)\n{\n  print OUT \"$_\";\n}\nclose (IN);\\
5926 nclose (OUT);\nunlink ($tmp);\n\n"};
5927 /*********************************COPYRIGHT NOTICE**********************************/
5928 /*© Centro de Regulacio Genomica */
5929 /*and */
5930 /*Cedric Notredame */
5931 /*Tue Oct 27 10:12:26 WEST 2009. */
5932 /*All rights reserved.*/
5933 /*This file is part of T-COFFEE.*/
5934 /**/
5935 /*    T-COFFEE is free software; you can redistribute it and/or modify*/
5936 /*    it under the terms of the GNU General Public License as published by*/
5937 /*    the Free Software Foundation; either version 2 of the License, or*/
5938 /*    (at your option) any later version.*/
5939 /**/
5940 /*    T-COFFEE is distributed in the hope that it will be useful,*/
5941 /*    but WITHOUT ANY WARRANTY; without even the implied warranty of*/
5942 /*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the*/
5943 /*    GNU General Public License for more details.*/
5944 /**/
5945 /*    You should have received a copy of the GNU General Public License*/
5946 /*    along with Foobar; if not, write to the Free Software*/
5947 /*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/
5948 /*...............................................                                                                                      |*/
5949 /*  If you need some more information*/
5950 /*  cedric.notredame@europe.com*/
5951 /*...............................................                                                                                                                                     |*/
5952 /**/
5953 /**/
5954 /*      */
5955 /*********************************COPYRIGHT NOTICE**********************************/