new version of tcoffee 8.99 not yet compiled for ia32 linux (currently compiled for...
[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","nature_protocol.pl","mo\
7 cca","dalilite.pl","wublast.pl","blastpgp.pl","ncb\
8 iblast_lwp.pl","wublast_lwp.pl","RNAplfold2tclib.p\
9 l","fasta_seq2RNAplfold_templatefile.pl","fasta_se\
10 q2hmmtop_fasta.pl","fasta_seq2consan_aln.pl","clus\
11 talw_aln2fasta_aln.pl","msf_aln2fasta_aln.pl","bla\
12 st_aln2fasta_aln.pl","blast_xml2fasta_aln.pl","fas\
13 ta_aln2fasta_aln_unique_name.pl","newick2name_list\
14 .pl","excel2fasta.pl","any_file2unix_file.pl","End\
15 List"};char *PerlScriptFile[]={"use File::Copy;\nu\
16 se Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw(US\
17 ER);\n$x_field=0;\n$y_field=1;\n$interval=0;\n$fil\
18 e=\"stdin\";\n$print_avg=1;\n$print_sd=0;\n$print_\
19 sum=0;\n$print_n=0;\nforeach $value ( @ARGV)\n    \
20 {\n     if ($value ne $ARGV[$np]) \n        {\n     ;\n  \
21    }\n  elsif($value eq \"-print_all\")\n           {\n  \
22    $print_sd=$print_avg=$print_n=$print_sum=1;\n         \
23    $np++;\n         }\n elsif($value eq \"-print_sum\"\
24 )\n         {\n     $print_sum=1;\n         $print_avg=0;\\
25 n           $np++;\n        }\n elsif($value eq \"-print_n\\
26 ")\n        {\n     $print_n=1;\n           $print_avg=0;\n\
27             $np++;\n        }\n elsif($value eq \"-print_avg\
28 \")\n       {\n     $print_avg=1;\n         $print_avg=0\
29 ;\n         $np++;\n        }\n elsif($value eq \"-sd\")\\
30 n           {\n     $print_sd=1;\n          $print_avg=0;\n      \
31    $np++;\n         }\n elsif($value eq \"-h\")\n           \
32 {\n         $header=1;\n            $np++;\n        }\n elsif ($\
33 value eq \"-i\")\n          {\n     $interval= $ARGV[++\
34 $np];\n     $np++;\n                }\n elsif ($value eq \
35 \"-r\")\n           {\n     $min= $ARGV[++$np];\n           $m\
36 ax= $ARGV[++$np];\n         $np++;\n                }\n \n      el\
37 sif ($value eq \"-x\")\n            {\n     $x_field= $AR\
38 GV[++$np]-1;\n      $np++;\n                }\n elsif ($va\
39 lue eq \"-y\")\n            {\n       \n            while ($ARGV\
40 [$np+1] && !($ARGV[$np+1]=~/\\-/))\n          {\n               $y\
41 _field[$nyf++]=$ARGV[++$np]-1;\n                $y_field_set=1;\\
42 n             }\n\n         $np++;\n                }\n elsif ($val\
43 ue eq \"-file\")\n          {\n     $file= $ARGV[++$np]\
44 ;\n         $file_set=1;\n          $np++;\n                }     \
45   \n    elsif ( $value eq \"h\" ||  $value eq \"-h\" \
46 || $value eq \"-H\" || $value eq \"-help\" || $val\
47 ue eq \"help\")\n         {\n       print STDOUT \"data_an\
48 alyse: Analyse and discretization of data\\n\";\n       \
49     print STDOUT \"       -file:    <file containi\
50 ng the data to analyze>,.<def=STDIN>\\n\";\n        p\
51 rint STDOUT \"       -x: <field containing the X>,\
52 ...............<Def=0>\\n\";\n      print STDOUT \"\
53        -y: <field containing the Y>,..............\
54 .<Def=1>\\n\";\n            print STDOUT \"       -i:<Int\
55 erval size on the X>,...............<Def=0>\\n\";\\
56 n           print STDOUT \"       -i:<0:only one interva\
57 l>\\n\";\n          print STDOUT \"       -r:<Range of \
58 the X>\\n\";\n      print STDOUT \"       -sd: prin\
59 t standard deviation on the Y\";\n          print STDOU\
60 T \"       -h  : print column header \\n\";\n       \
61 exit (0);\n       }\n   elsif ($value=~/-/)\n     {\n       \
62 print \"$value is not a valid FLAG[FATAL]\\n\";\n       \
63     exit (0);\n    } \n elsif ($list eq \"\") \n         \
64    {\n      $file=$ARGV[$np];\n     $np++;\n        }\\
65 n       \n      \n      }\n\n\n\n\n\nif ($file eq \"stdin\")\\
66 n       {\n     $remove_file=1;\n       $file=\"tmp$$\";\n      open (F\
67 , \">$file\");\n        while (<STDIN>)\n               {\n             print F $\
68 _;\n            }\n     close (F);\n     \n     ;}\n\n\nopen(F,$file);\\
69 n\nif ($interval)\n  {\n    $interval_size=($max-$\
70 min)/$interval;\n  }\nwhile (<F>)\n  {\n    $line=\
71 $_;\n    if (!/\\S/){next;}\n    @list=($line=~/(\\
72 \S+)/g);\n    \n    if ($interval==0){$bin=0;}\n  \
73   else{$bin=int (($list[$x_field]-$min)/($interval\
74 _size));}\n\n    \n    if ($bin && $bin==$interval\
75 ){$bin--;}\n    for ( $a=0; $a<$nyf; $a++)\n      \
76 {\n     $sum{$a}{$bin}+=$list[$y_field[$a]];\n  $sum2{$\
77 a}{$bin}+=$list[$y_field[$a]]*$list[$y_field[$a]];\
78 \n      $n{$a}{$bin}++;\n      }\n  }\n\nif (!$interval\
79 ){$interval=1;}\nfor ( $a=0; $a<$interval; $a++)\n\
80   {\n    printf ( \"%3d %3d \", $interval_size*$a,\
81  $interval_size*($a+1));\n    for ( $b=0; $b<$nyf;\
82  $b++)  \n      {\n     $i=$interval*$a;\n      if ( $n{$b}{\
83 $a}==0)\n         {\n       $avg=0;\n       $sd=0;\n      }\n   e\
84 lse\n     {\n       $avg=$sum{$b}{$a}/$n{$b}{$a};\n       \
85   $sd=sqrt($sum2{$b}{$a}*$n{$b}{$a}-$sum{$b}{$a}*$\
86 sum{$b}{$a})/($n{$b}{$a}*$n{$b}{$a});\n   }\n   if (\
87 $print_n) {printf \"%10.4f \", $n{$b}{$a};}\n   if (\
88 $print_sum){printf \"%10.4f \", $sum{$b}{$a};}\n        i\
89 f ($print_avg){printf \"%10.4f \", $avg}\n      if ($pr\
90 int_sd) {printf \"%10.4f \", $sd;}\n      }\n    p\
91 rintf (\"\\n\");\n  }\n\n\nif ( $remove_file){unli\
92 nk $file;}\n","use File::Copy;\nuse Env qw(HOST);\\
93 nuse Env qw(HOME);\nuse Env qw(USER);\n\nforeach $\
94 v (@ARGV){$cl.=$v;}\n\n\nif ( $cl=~/-k(\\d+)/){$k=\
95 $1;}\nelse {$k=1;}\nif ( $cl=~/-w(\\d+)/){$w=$1;}\\
96 nelse {$w=-1;}\nif ( $cl=~/-p(\\d+)/){$p=$1;}\nels\
97 e {$p=-1;}\n\nwhile (<STDIN>)\n  {\n    @l=($_=~/(\
98 \\S+)/g);\n    $v=$l[$k-1];\n    if ( !$h{$v}){@ll\
99 =($v, @ll);}\n    \n    if ( $w==-1)\n      {$h{$v\
100 }++;}\n    else\n      {$h{$v}+=$l[$w-1];}\n\n    \
101 if ($p!=-1){$print{$v}=$l[$p-1];}\n\n  }\nforeach \
102 $v (@ll)\n  {\n    print \"$v $print{$v} $h{$v}\\n\
103 \";\n  }\n","\nuse Env qw(HOST);\nuse Env qw(HOME)\
104 ;\nuse Env qw(USER);\n$random_tag=int (rand 10000)\
105 +1;\n$unique_prefix=\"$$.$HOST.$random_tag\";\n$qu\
106 eue=\"distillery.and.mid\";\n$monitor=0;\n$stderr_\
107 file=\"/dev/null\";\n$stdio_file=\"/dev/null\";\n$\
108 log_file=\"/dev/null\";\n$pause_time=0;\n$max_sub_\
109 jobs=60;\n$min_sub_jobs=30;\n$output_all=0;\n$var=\
110 '\\$';\n\nforeach $value ( @ARGV)\n    {\n      if ($va\
111 lue ne $ARGV[$np]) \n       {\n     ;\n     }\n elsi\
112 f ($value eq \"-max_sub_jobs\")\n           {\n     $max\
113 _sub_jobs= $ARGV[++$np];\n          $np++;\n                }   \
114 \n      elsif ($value eq \"-min_sub_jobs\" )\n      {\n \
115     $min_sub_jobs= $ARGV[++$np];\n          $np++;\n   \
116             }\n elsif ($value eq \"-para\")\n       {\n   \
117   $para=1;\n        $monitor=1;\n           $np++;\n              \
118   }\n   elsif ($value eq \"-monitor\") \n           {\n   \
119   $monitor=1;\n     $np++;\n        }\n elsif ($value\
120  eq \"-no_monitor\") \n     {\n     $monitor=0;\n       \
121     $np++;\n        }\n elsif ($value eq \"-queue\")\\
122 n           {\n     $queue=$ARGV[++$np];\n          $np++;\n    \
123     }   \n      elsif ($value eq \"-stderr_file\")\n        \
124 {\n         $stderr_file=$ARGV[++$np];\n            $np++;\n    \
125     }\n elsif ($value eq \"-stdio_file\")\n         {\\
126 n           $stdio_file=$ARGV[++$np];\n     $np++;\n       \
127  }\n    elsif ($value eq \"-output_all\")\n         {\n  \
128    $output_all=1;\n         $np++;\n        }\n elsif ($v\
129 alue eq \"-pause\") \n      {\n     $pause_time=$AR\
130 GV[++$np];\n        $np++;\n        }\n elsif ($value eq\
131  \"-log\")\n          {\n              $log=1;\n               \n       \
132        if ($ARGV[$np+1]=~/\\-\\S+/) \n            {\
133 \n                $log_file=\"stderr\";\n                 }\n         \
134  else \n                  {\n             $log_file=$ARGV[++$np]; \
135 \n                ++$np;\n               \n               }\n         }\n       elsif \
136 ( $value eq \"-com\")\n     {\n         \n              if (!$ARGV[$n\
137 p+1]=~/^\\'/) { $com=$ARGV[++$np];}\n           else {$com=\
138 $ARGV[++$np];}\n\n           $np++;\n       }\n elsif ( $\
139 value eq \"-check\")\n    {\n       \n      if (!$ARGV\
140 [$np+1]=~/^\\'/) { $check=$ARGV[++$np];}\n          els\
141 e {$check=$ARGV[++$np];}\n          $np++;\n      }\n   elsi\
142 f ($com eq \"\") \n         {\n     $com_set=1;\n           \
143 $com=$ARGV[$np];\n          \n      $np++;\n        }\n els\
144 if ($list eq \"\") \n       {\n     $list_set=1;\n       \
145    $list=$ARGV[$np];\n      $np++;\n        }\n elsif \
146 ( $var_set eq \"\")\n       {\n     $var_set=1;\n         \
147   $var=$ARGV[$np];\n        $np++;\n        }\n }\n\n\n\\
148 n\nif ( $com eq \"\"){print \"You Need to Provide \
149 a Command [FATAL]\\n\";\n             die;\n         }\n\n\\
150 n\nif ($list_set==0) \n    {\n    $x= int (rand 10\
151 0000)+1;\n    $tmp_file_name=\"tmp_file_$x\";\n   \
152  open ( TMP, \">$tmp_file_name\");\n    while (<ST\
153 DIN>)\n      {\n        print TMP $_;\n      }\n    close\
154  (TMP);\n    open (F, $tmp_file_name);\n    }\nels\
155 e \n    {\n    open (F, $list);\n    }\n\nif ($par\
156 a==0) \n    {\n\n     @tc_list= <F>;\n     close (\
157 F); \n     \n     foreach $val(@tc_list) \n         {\\
158 n             \n              \n              \n              $loc_com=$com;\\
159 n             if ($check){$loc_check=$check;}\n       \n\
160               @i_val=($val=~/([^\\s]+)/g);\n          \n           \
161    if ( $#i_val==0)\n           {\n               if ($check){$loc_che\
162 ck=~s/$var/$i_val[0]/g;}\n                $loc_com=~s/$var/$i_\
163 val[0]/g;\n             }\n           else\n            {\n               for ($n=1; $\
164 n<=$#i_val+1;$n++ )\n               {\n               \n                      $s\
165 ub=\"$var$n\";\n                      \n                      $loc_com=~s/$sub\
166 /$i_val[$n-1]/g;\n                    if ($check){$loc_check=~\
167 s/$var/$i_val[0]/g;}\n              }\n         }\n           if ( $c\
168 heck && -e $loc_check)\n                {\n               print STDERR \"sk\
169 ipping $loc_com...\\n\";\n                }\n         else\n            {\\
170 n                 system \"$loc_com\";\n                }\n         }\n    exit;\\
171 n    }\n\nelsif ($para==1) \n    {\n    print STDE\
172 RR \"do parallel execution of: \\\"$com $list\\\"\\
173 \n\";\n    \n    if ($log==1) \n        {\n     if ($log_file\
174  eq \"stdout\" || $log_file eq \"stderr\" ) \n          {\\
175 n               $log_file=\"\";\n               }\n\n        else \n    \
176         {\n             system \"echo LOG FILE> $log_file\";\n          \n       \
177        }\n      }\n    else     \n      {\n     open ( OUT, \">/dev/\
178 null\");\n      }\n     \n    \n    $id=0;\n    $n_sub=0;\n\
179     while ($val=<F>) \n     {               \n      $job\
180 _log[$id]=\"$HOME/tmp/$unique_prefix.$id.log_file\\
181 ";\n        \n      $job=$unique_prefix.\"_$id\";\n       \
182   open (JOB, \">$job\");\n          \n      $loc_com=$co\
183 m;\n        chop $val;\n\n          $loc_com=~s/\\$/$val/g\
184 ;\n      \n         print JOB \"#!/bin/csh\\n\";\n          pri\
185 nt JOB \"#\\$ -cwd\\n\";\n          print JOB \"#\\$ -N\
186  $unique_prefix\\n\";\n     if ($queue && !($queue\
187  eq \" \")) {print JOB \"#\\$ -l $queue\\n\";}\n         \
188    print JOB \"#\\n\";      \n            print JOB\
189  \"$loc_com\\n\";\n         print JOB \"echo FINISHED \
190  >> $job_log[$id]\\n\";\n           print JOB \"pwd\\n\"\
191 ;\n         \n      close (JOB);\n          if ( $output_all\
192 ==1)\n          {\n             system \"qsub $job >  $unique_prefix\\
193 ";              \n              }\n         else\n              {system \"qsub $job\
194  -e $stderr_file -o $stdio_file >$unique_prefix\";\
195                 \n              } \n\n\n\n          print STDERR \"\
196 $id: $output_all\\n\";\n            $n_sub++;\n     if ( \
197 $max_sub_jobs && $n_sub==$max_sub_jobs) \n              {\n             $\
198 n_sub=monitor_process($min_sub_jobs,@job_log);           \
199 \n              \n              }       \n         \n            unlink $uniqu\
200 e_prefix;\n         sleep $pause_time;\n            $id++;\n    \
201     }\n\n    close (OUT);\n    close (F);\n\n    p\
202 rint STDERR \"Your $id Jobs Have Been Submited (NA\
203 ME=$unique_prefix)\\n\";\n    monitor_process (0, \
204 @job_log);\n    foreach $file(@job_log) {if (-e $f\
205 ile) {unlink($file);}}\n    \n    }\n\nsub monitor\
206 _process ( @job_list)\n    {\n    my (@job_list)=@\
207 _;\n    my $min_sub_jobs=shift (@job_list);\n    m\
208 y $n_sub_jobs;\n    my $finished;\n    my $n=0;\n\\
209 n    $n_sub_jobs=-1;\n    $finished=0;\n    print \
210 STDERR \"\\nMonitor Batch: [$min_sub_jobs]\";\n   \
211     \n    while (!$finished && (($n_sub_jobs>$min_\
212 sub_jobs)|| $n_sub_jobs==-1) ) \n       {\n     $finished=1;\
213 \n      $n_sub_jobs=0;\n        $n=0;\n foreach $file (@job_li\
214 st)\n           {\n     \n              if (-e $file){;}\n              else \n \
215             {\n             $finished=0; $n_sub_jobs++;\n             \
216       }\n               }\n     system \"sleep 1\";\n       \
217  }\n    \n    return $n_sub_jobs;\n    }\n    \n  \
218   \nif ($tmp_file_name){unlink($tmp_file_name);}\n\
219 ","\n\nforeach ($np=0; $np<=$#ARGV; $np++)\n    {\\
220 n    $value=$ARGV[$np];\n\n    if ($value eq \"-fi\
221 le\")\n      {\n      $file= $ARGV[++$np];\n      \
222 }\n    elsif ($value eq \"-type\")\n      {\n     \
223    $type= $ARGV[++$np];\n      }\n    elsif ($valu\
224 e eq \"-institute\")\n      {\n        $institute=\
225  $ARGV[++$np];\n      }\n    elsif ($value eq \"-a\
226 uthor\")\n      {\n        $author= $ARGV[++$np];\\
227 n      }\n    elsif ($value eq \"-date\")\n      {\
228 \n        $date= $ARGV[++$np];\n      }\n     elsi\
229 f ($value eq \"-program\")\n      {\n        $prog\
230 ram= $ARGV[++$np];\n      }\n    elsif ($value eq \
231 \"-email\")\n      {\n        $email= $ARGV[++$np]\
232 ;\n      }\n    else\n      {\n print \"$value is \
233 an unkown argument[FATAL]\\n\";\n       exit (1);\n     \
234  }\n  }\n\n\n\nopen F, $file || die;\nprint $INSTI\
235 TUTE;\nif ( $type eq \"c\"){print \"/*************\
236 *****************COPYRIGHT NOTICE*****************\
237 **************/\\n\";}\nif ( $type eq \"perl\"){pr\
238 int \"##############################COPYRIGHT NOTI\
239 CE##############################/\\n\";}\nif ( $ty\
240 pe eq \"txt\"){print \"---------------------------\
241 ----COPYRIGHT NOTICE------------------------------\
242 /\\n\";}\n\n\nwhile (<F>)\n  {\n  s/\\$INSTITUTE/$\
243 institute/g;\n  s/\\$AUTHOR/$author/g;\n  s/\\$DAT\
244 E/$date/g;\n  s/\\$PROGRAM/$program/g;  \n  s/\\$E\
245 MAIL/$email/g;  \n  if ( $type eq \"txt\"){print $\
246 _;}\n  elsif ($type eq \"c\"){chop $_; print \"\\/\
247 *$_*\\/\\n\";}\n  elsif ($type eq \"perl\"){print \
248 \"\\#$_\";}\n}\nclose (F);\nif ( $type eq \"c\"){p\
249 rint \"/******************************COPYRIGHT NO\
250 TICE*******************************/\\n\";}\nif ( \
251 $type eq \"perl\"){print \"#######################\
252 #######COPYRIGHT NOTICE###########################\
253 ###/\\n\";}\nif ( $type eq \"txt\"){print \"------\
254 -------------------------COPYRIGHT NOTICE---------\
255 ---------------------/\\n\";}\n\n","\nwhile (<>)        \\
256 n       {\n     s/\\=cc/123456789/g;\n  s/\\bcc/\\$\\(CC\\)/g\
257 ;\n     s/123456789/\\=cc/g;\n  print $_;\n     }\n\n","$ve\
258 rsion=\"1.00\";\n$rseed= int(rand(100000))+1;\n\n\\
259 nif ( $#ARGV==-1)\n  {\n    print \"msa2bootstrap \
260 -i <input_file> -input <seq|msa|matrix|tree> -n <N\
261 -Boostrap> -o <outtree> -tmode <nj|upgma|parsimony\
262 |ml> -dmode <kimura> -alignpg <t_coffee | muscle |\
263  clustalw> -rtree <file> -stype <prot|cdna|dna> -r\
264 ecompute -system <cygwin|unix>\";\n    print \"\\n\
265 \\t-i: input file, can be sequneces, msa, matrix, \
266 trees, type is specified via -input\";\n    print \
267 \"\\n\\t-input: Type of input data\";\n    print \\
268 "\\n\\t\\tmsa: msa in fasta format\";\n    print \\
269 "\\n\\t\\tseq: compute an msa with -alignpg\";\n  \
270   print \"\\n\\t\\tmatrix: phylipp distance matrix\
271  fed directly to method -tmode [caveat: tmode=nj o\
272 r upgma]\";\n    print \"\\n\\t\\ttree: list of ne\
273 wick trees directly fed to consence in order to ge\
274 nerate a bootstraped tree\";\n    \n    print \"\\\
275 n\\t-n: number of bootstrap replicates\";\n    pri\
276 nt \"\\n\\t-o: name of the output tree. Files are \
277 not overwritten. Use -recompute to overwrite exist\
278 ing file\";\n    print \"\\n\\t-tmode: tree mode: \
279 nj|upgma|parsimony|ml\";\n    print \"\\n\\t-dmode\
280 : distance mode\";\n    print \"\\n\\t-alignpg: pr\
281 ogram for aligning sequences (t_coffee=default)\";\
282 \n    print \"\\n\\t-rtree: replicate tree file (d\
283 efault: no file)\";\n    print \"\\n\\t-rmsa: repl\
284 icate msa file (default: no file)\";\n    print \"\
285 \\n\\t-rmat: replicate matrix file (default: no fi\
286 le)\";\n    print \"\\n\\t-stype: sequence type: p\
287 rotein, dna or cdna\";\n    print \"\\n\\t-recompu\
288 te: force files to be overwritten\";\n    print \"\
289 \\n\\t-system: cygwin|unix\";\n      \n\n    \n   \
290  &my_exit (EXIT_FAILURE);\n  }\nforeach $arg (@ARG\
291 V){$command.=\"$arg \";}\n\nprint \"CLINE: $comman\
292 d\\n\";\n$threshold=100;\n$trim_msa=0;\n$stype=\"p\
293 rot\";\nprint \"msa2bootstrap \";\n\n$system=\"cyg\
294 win\";\nif(($command=~/\\-system (\\S+)/))\n  {\n \
295    $system=$1;\n    if ( $system eq \"cygwin\")\n \
296      {\n        $exec_extension=\".exe\";\n      }\n    e\
297 lsif ( $system eq \"unix\")\n      {\n  $exec_exten\
298 sion=\"\";\n    print \"system=Unix\";die;\n      }\n\
299     else\n      {\n     print \"msa2boostrap: -system=\
300 $system is an unknown mode [FATAL]\\n\"; die;\n   \
301    }\n    \n    print \"-system $system \";\n  }\n\
302 if(($command=~/\\-stype (\\S+)/))\n  {\n    $stype\
303 =$1;\n  }\nprint \"-stype=$stype \";\n\n\n\nif(($c\
304 ommand=~/\\-i (\\S+)/))\n  {\n    $msa=$1;\n    pr\
305 int \"-i $msa \";\n  }\n\nif(($command=~/\\-rtree \
306 (\\S+)/))\n  {\n    $rtree=$1;\n    print \"-rtree\
307 =$rtree \";\n  }\n\nif(($command=~/\\-rmsa (\\S+)/\
308 ))\n  {\n    $rmsa=$1;\n  }\nif(($command=~/\\-rma\
309 t (\\S+)/))\n  {\n    $rmat=$1;\n  }\n$input=\"seq\
310 \";\nif(($command=~/\\-input (\\S+)/))\n  {\n    $\
311 input=$1;\n  }\nprint \"-input=$input \";\n\n$dmod\
312 e=\"kimura\";\nif(($command=~/\\-dmode (\\S+)/))\n\
313   {\n    $dmode=$1;\n  }\nprint \"-dmode=$dmode \"\
314 ;\n$alignpg=\"muscle\";\nif(($command=~/\\-alignpg\
315  (\\S+)/))\n  {\n    $alignpg=$1;\n  }\nprint \"-a\
316 lignpg=$dmode \";\n\n$tmode=\"nj\";\nif(($command=\
317 ~/\\-tmode (\\S+)/))\n  {\n    $tmode=$1;\n  }\npr\
318 int \"-tmode=$tmode \";\n$recompute=0;\nif(($comma\
319 nd=~/\\-recompute/))\n  {\n    $recompute=1;\n    \
320 print \"-recompute \";\n  }\n\n$out=$msa;\n$out=~s\
321 /\\..*//;\n$out.=\".bph\";\nif(($command=~/\\-o (\\
322 \S+)/))\n  {\n    $out=$1;\n    \n  }\nprint \"-ou\
323 t=$out \";\nif (-e $out && !$recompute)\n  {\n    \
324 print \"\\nNo Computation Required $out already ex\
325 ists\\n\";\n    &my_exit (EXIT_SUCCESS);\n    \n  \
326 }\n\n$n=100;\nif(($command=~/\\-n (\\d+)/))\n  {\n\
327     $n=$1;\n  }\nprint \"-n=$n \";\n$seed=3;\nif((\
328 $command=~/\\-s (\\d+)/))\n  {\n    $seed=$1;\n  }\
329 \nprint \"-s=$seed \";\n\nif(($command=~/\\-run_na\
330 me (\\d+)/))\n  {\n    $suffix=$1;\n  }\nelse\n  {\
331 \n    $msa=~/([^.]+)/;\n    $suffix=$1;\n  }\nprin\
332 t \"-run_name=$suffix\\n\";\n\n\nif ( $input eq \"\
333 seq\")\n  {\n    $seq=$msa;\n    $msa=\"$suffix.pr\
334 ot_msa\";\n    \n    if ($stype eq \"cdna\")\n    \
335   {\n   $cdna_seq=$seq;\n       $clean_cdna_seq=&vtmpnam()\
336 ;\n     $seq=&vtmpnam();\n      `t_coffee -other_pg seq_ref\
337 ormat -in $cdna_seq -action +clean_cdna >$clean_cd\
338 na_seq`;\n      `t_coffee -other_pg seq_reformat -in $c\
339 lean_cdna_seq -action +translate >$seq`;\n      \n     \
340  }\n\n    if (!-e $msa || $recompute)\n      {\n        p\
341 rint \"\\n#####   Compute an MSA With $alignpg\\n\\
342 ";\n    \n      if ( $alignpg eq \"t_coffee\")\n          {`$alig\
343 npg $seq -outfile=$msa >/dev/null 2>/dev/null`;}\n\
344         elsif ( $alignpg eq \"muscle\")\n         {\n       `$ali\
345 gnpg -in $seq > $msa 2>/dev/null`;\n      }\n   elsif (\
346  $alignpg eq \"clustalw\")\n      {\n       `$alignpg -\
347 infile=$seq -outfile=$msa -quicktree >/dev/null 2>\
348 /dev/null`;\n     }\n   elsif ( $align eq \"mafft\")\n\
349           {\n       `$alignpg $seq > $msa >/dev/null 2>/dev\
350 /null`;\n         }\n   else\n    {\n       `$alignpg -in=$se\
351 q -outfile=$msa`;\n       }\n      }\n    if (!-e $msa\
352 )\n      {\n    print \"\\nError: $alignpg Could Not \
353 produce the MSA $msa [FATAL]\\n\";\n      }\n\n   \
354  if ($stype eq \"cdna\")\n      {\n     $msa2=\"$suffi\
355 x.cdna_msa\";\n `t_coffee -other_pg seq_reformat -\
356 in $clean_cdna_seq -in2 $msa -action +thread_dna_o\
357 n_prot_aln -output fasta_aln  >$msa2`;\n        $msa=$msa\
358 2;\n      }\n    \n    $input=\"msa\";\n  }\n\n\n\\
359 n$seqboot_o=&vtmpnam();\n$seqboot_c=&vtmpnam();\n\\
360 n$protdist_o=&vtmpnam();\n$protdist_c=&vtmpnam();\\
361 nif ( $input eq \"msa\")\n  {\n    if ($tmode eq \\
362 "nj\" || $tmode eq \"upgma\"){$input=\"matrix\";}\\
363 n    \n    $lmsa= &vtmpnam ();\n    `t_coffee -oth\
364 er_pg seq_reformat -in $msa -output phylip_aln > $\
365 lmsa`;\n    \n    if ( -e \"outfile\"){unlink (\"o\
366 utfile\");}\n    # run seqboot\n  \n    if ( $n>1)\
367 \n      {\n     print \"Run SeqBoot .....\";\n  open (F\
368 , \">$seqboot_c\");\n   print F \"$lmsa\\nR\\n$n\\nY\
369 \\n$seed\\n\";\n        close (F);\n    `seqboot$exec_extens\
370 ion  < $seqboot_c`;\n   if ( -e \"outfile\"){ print \
371 \"[OK]\\n\";}\n else { print \"[FAILED]\\n\";&my_e\
372 xit (EXIT_FAILURE);}\n  `mv outfile $seqboot_o`;\n \
373      }\n    else\n      {\n     `cp $lmsa $seqboot_o`;\
374 \n      }\n\n    if ($rmsa){`cp $seqboot_o $rmsa`;\
375 }\n    \n    if ($tmode eq \"nj\" || $tmode eq \"u\
376 pgma\")\n      {\n      if ( $stype eq \"prot\")\n        {\\
377 n           # run protdist\n        print \"Run Protdist [d\
378 mode=$dmode]\";\n           if ($dmode eq \"kimura\")\n \
379       {\n               $dmode=\"P\\nP\\nP\";\n       }\n           e\
380 lse\n         {\n               print \"\\n$dmode is an unknown m\
381 ode for Protdist [FATAL:msa2bootstrap.pl]\\n\";\n       \
382         &my_exit (EXIT_FAILURE);\n            }\n           open (F,\
383  \">$protdist_c\");\n       if ($n>1){print F \"$seq\
384 boot_o\\n$dmode\\nM\\nD\\n$n\\nY\\n\";}\n           else\
385  {printf F \"$seqboot_o\\n$dmode\\nY\\n\";}\n       \
386 close (F);\n        `protdist$exec_extension  < $prot\
387 dist_c`;\n          if ( -e \"outfile\"){ print \"[OK]\\
388 \n\";}\n            else { print \"[FAILED]\\n\";&my_exit\
389  (EXIT_FAILURE);}\n         `mv outfile $protdist_o`;\\
390 n        \n       }\n   elsif ( $stype eq \"cdna\" || $stype e\
391 q \"dna\")\n      {\n       print \"Run dnadist [dmode=\
392 default\";\n        open (F, \">$protdist_c\");\n          \
393  if ($n>1){print F \"$seqboot_o\\nM\\nD\\n$n\\nY\\\
394 n\";}\n     else {printf F \"$seqboot_o\\nY\\n\";}\
395 \n          close (F);\n            `protdist$exec_extension  \
396 < $protdist_c`;\n           if ( -e \"outfile\"){ print \
397 \"[OK]\\n\";}\n     else { print \"[FAILED]\\n\";&\
398 my_exit (EXIT_FAILURE);}\n          `mv outfile $protdi\
399 st_o`;\n          }\n      }\n  }\nelsif ( $input eq \"ma\
400 trix\")\n  {\n    $protdist_o=&vtmpnam();\n    pri\
401 nt \"MSA: $msa\\n\";\n    `cp $msa $protdist_o`;\n\
402     $n=1;\n  }\n\n\n\n\n\n$nb_o=&vtmpnam();\n$nb_c\
403 =&vtmpnam();\nif ($input eq \"matrix\" && $tmode n\
404 e \"parsimony\" && $tmode ne \"ml\")\n  {\n    pri\
405 nt \"Run neighbor [tmode=$tmode]\";\n\n    if ($tm\
406 ode eq \"nj\")\n      {\n       $tmode=\"\\nN\\nN\";\n  \
407     }\n    elsif ( $tmode eq \"upgma\")\n      {\n\
408         $tmode = \"\\nN\";\n      }\n    else\n      {\n        \
409 print \"\\n ERROR: $tmode is an unknown tree compu\
410 tation mode\\n\";\n     &my_exit (EXIT_FAILURE);\n    \
411   }\n\n    open (F, \">$nb_c\");\n    if ($n>1){pr\
412 int F \"$protdist_o$tmode\\nM\\n$n\\n$seed\\nY\\n\\
413 ";}\n    else {print F \"$protdist_o$tmode\\nY\\n\\
414 ";}\n    close (F);\n\n    `neighbor$exec_extensio\
415 n  < $nb_c`;\n    if ( -e \"outtree\"){ print \"[N\
416 eighbor OK]\\n\";}\n    else { print \"[FAILED]\\n\
417 \";&my_exit (EXIT_FAILURE);}\n    `mv outtree $nb_\
418 o`;\n    unlink (\"outfile\");\n  }\nelsif ($input\
419  eq \"msa\" && $tmode eq \"parsimony\")\n  {\n    \
420 if ( -e \"outfile\"){unlink (\"outfile\");}\n    i\
421 f ( -e \"outtree\"){unlink (\"outtree\");}\n    \n\
422     if ($stype eq \"prot\")\n      {\n  print \"Run\
423  protpars [tmode=$tmode]\";\n   open (F, \">$nb_c\")\
424 ;\n     if ($n>1){print F \"$seqboot_o\\nM\\nD\\n$n\\n\
425 $seed\\n10\\nY\\n\";}\n else {print F \"$seqboot_o\
426 \\nY\\n\";}\n   close (F);\n    `protpars$exec_extensio\
427 n  < $nb_c`;\n      }\n    elsif ( $stype eq \"dna\
428 \" || $stype eq \"cdna\")\n      {\n    print \"Run d\
429 napars [tmode=$tmode]\";\n      open (F, \">$nb_c\");\n\
430         if ($n>1){print F \"$seqboot_o\\nM\\nD\\n$n\\n$se\
431 ed\\n10\\nY\\n\";}\n    else {print F \"$seqboot_o\\n\
432 Y\\n\";}\n      close (F);\n    `dnapars$exec_extension  <\
433  $nb_c`;\n      }\n    if ( -e \"outtree\"){ print\
434  \"[OK]\\n\";}\n    else { print \"[FAILED]\\n\";&\
435 my_exit (EXIT_FAILURE);}\n    `mv outtree $nb_o`;\\
436 n   unlink (\"outfile\");\n  }\nelsif ($input eq \\
437 "msa\" && $tmode eq \"ml\")\n  {\n    if ( -e \"ou\
438 tfile\"){unlink (\"outfile\");}\n    if ( -e \"out\
439 tree\"){unlink (\"outtree\");}\n    \n    if ($sty\
440 pe eq \"prot\")\n      {\n      print \"Error: ML impos\
441 sible with Protein Sequences [ERROR]\";\n       &my_exit\
442  (EXIT_FAILURE);\n      }\n    elsif ( $stype eq \\
443 "dna\" || $stype eq \"cdna\")\n      {\n        print \"R\
444 un dnaml [tmode=$tmode]\";\n    open (F, \">$nb_c\");\
445 \n      if ($n>1){print F \"$seqboot_o\\nM\\nD\\n$n\\n$\
446 seed\\n10\\nY\\n\";}\n  else {print F \"$seqboot_o\\
447 \nY\\n\";}\n    close (F);\n    `dnaml$exec_extension  <\
448  $nb_c`;\n      }\n    if ( -e \"outtree\"){ print\
449  \"[OK]\\n\";}\n    else { print \"[FAILED]\\n\";&\
450 my_exit (EXIT_FAILURE);}\n    `mv outtree $nb_o`;\\
451 n   unlink (\"outfile\");\n  }\n\n\nelse\n  {\n   \
452  `cp $msa $nb_o`;\n    $n=2;\n  }\n\nif ($rmsa && \
453 -e $seqboot_o){print \"\\nOutput List of $n Replic\
454 ate MSA: $rmsa\\n\";`cp $seqboot_o $rmsa`;}\nif ($\
455 rmat && -e $protdist_o){print \"\\nOutput List of \
456 $n Replicate MATRICES: $rmat\\n\";`cp $protdist_o \
457 $rmat`;}\nif ($rtree && -e $nb_o){print \"\\nOutpu\
458 t List of $n Replicate TREES: $rtree\\n\";`cp $nb_\
459 o $rtree`;}\n\n\n\n$con_o=&vtmpnam();\n$con_c=&vtm\
460 pnam();\nif ($n >1)\n  {\n    print \"Run Consense\
461 .....\";\n    open (F, \">$con_c\");\n    print F \
462 \"$nb_o\\nY\\n\";\n    close (F);\n    `consense$e\
463 xec_extension  < $con_c`;\n    if ( -s \"outtree\"\
464   > 0) { print \"[OK]\\n\";}\n    else { print \"[\
465 FAILED]\\n\";&my_exit (EXIT_FAILURE);}\n    `mv ou\
466 ttree $con_o`;\n    unlink (\"outfile\");\n  }\nel\
467 se\n  {\n    `cp $nb_o $con_o`;\n  }\n\n\n`cp $con\
468 _o $out`;\nif ( !-e $out)\n  {\n    print \"Tree C\
469 omputation failed [FAILED]\\n\";\n    &my_exit (EX\
470 IT_FAILURE);\n  }\nelsif ($n>1)\n  {\n    print \"\
471 \\nOutput Bootstrapped Tree: $out\\n\";\n    $avg=\
472 `t_coffee -other_pg seq_reformat -in $out -action \
473 +avg_bootstrap`;\n    $avg=~s/\\n//g;\n    print \\
474 "$avg\\n\";\n  }\nelse\n  {\n    print \"\\nOutput\
475  Tree: $out\\n\";\n  }\n\nopen (F, \"$out\");\nwhi\
476 le (<F>)\n  {\n    \n    $tree.=$_;\n  }\nclose (F\
477 );\n$tree=~s/\\n//g;\nprint \"BPH: $tree\\n\";\n\n\
478 \n&my_exit (EXIT_SUCCESS);\n\nsub my_exit \n  {\n \
479    my $m=@_[0];\n    &clean_vtmpnam();\n    exit (\
480 $m);\n  }\nsub vtmpnam \n  {\n    my $file;\n\n\n \
481    $ntmp++;\n    $file=\"tmp4msa2bootstrap.$rseed.\
482 $$.$ntmp\";\n    \n    push (@tmpfile, $file);\n  \
483   return $file;\n  }\nsub clean_vtmpnam \n  {\n   \
484  my $t;\n    foreach $t (@tmpfile)\n      {\n   if (\
485  -e $t){unlink ($t)};\n      }\n  }\n","use Env;\n\
486 $seq_reformat=\"t_coffee -other_pg seq_reformat \"\
487 ;\n$VersionTag=\"1.00\";\n$step=1;\n$unset=\"\";\n\
488 $scoreT1=$scoreT2=$nseqT=$dp_limit=$unset;\n@tl=()\
489 ;\nchomp($tc_version=`t_coffee -version`);$tc_vers\
490 ion=~s/PROGRAM: //;\n\n\nprint STDERR \"\\n*******\
491 **************************************************\
492 ********\";\nprint STDERR \"\\n*           HIGH LE\
493 VEL PROGRAM: T-COFFEE_DPA Version $VersionTag\";\n\
494 print STDERR \"\\n*           LOW  LEVEL PROGRAM: \
495 $tc_version \";\nprint STDERR \"\\n***************\
496 **************************************************\
497 \";\n\nif (!@ARGV)\n  {\n    print \"t_coffee_dpa \
498 accepts every t_coffee_flag.\\nType t_coffee to ob\
499 tain a list\\n\";\n    print \"Requires $TC_VERSIO\
500 N\\n\";\n    print \"Requires \";\n    print \"t_c\
501 offee_dpa specific flags:\\n\";\n    print \"\\t-d\
502 pa_master_aln....................Master alignment:\
503  provided OR computed\\n\";\n    print \"\\t-dpa_m\
504 aster_aln....................By default, Computed \
505 with t_coffee -very_fast\\n\";\n    print \"\\t-dp\
506 a_master_aln=<file>.............Use file, (must be\
507  an aln in Fasta or ClustalW\\n\";\n    print \"\\\
508 t-dpa_master_aln=<program>..........Compute aln wi\
509 th pg -in seq -out aln`\\n\";\n    print \"\\t-dpa\
510 _maxnseq.......................Maximum number of s\
511 equences in subgroups\\n\";\n    print \"\\t-dpa_m\
512 in_score1....................Minimum Id for two se\
513 quences to be grouped in ref_aln\\n\";\n    print \
514 \"\\t-dpa_min_score2....................Minimum Id\
515  within a subgroup\\n\";\n    print \"\\t-dpa_debu\
516 g.........................Keep Tmp File (for debug\
517  purpose)\\n\\n\";\n    \n    exit (0);\n  }\nfore\
518 ach $arg (@ARGV)\n  {\n    $arg_list.=\" $arg\";\n\
519   }\n$arg_list=~s/[=,;]/ /g;\n\n\n($seq0, $arg_lis\
520 t)=&extract_val_from_arg_list(\"^\",$arg_list, \"S\
521 PLICE\",\"unset\");\n($seq1, $arg_list)=&extract_v\
522 al_from_arg_list(\"-seq\",$arg_list, \"SPLICE\",\"\
523 unset\");\n($seq2, $arg_list)=&extract_val_from_ar\
524 g_list(\"-in\",$arg_list, \"KEEP\",\"unset\");\n($\
525 seq3, $arg_list)=&extract_val_from_arg_list(\"-inf\
526 ile\",$arg_list, \"SPLICE\",\"unset\");\n($prf,  $\
527 arg_list)=&extract_val_from_arg_list(\"-profile\",\
528 $arg_list, \"SPLICE\",\"unset\");\n\n$gl{'Seq'}=$s\
529 eq=&vtmpnam();#file containing all the sequences\n\
530 \n   #1-remove sequences from -in\nif ( $arg_list \
531 =~/\\-in\\b/)\n  {\n    my $save, $name;\n    whil\
532 e($arg_list=~/\\-in\\b[^-]+(\\bS[\\w.]+)/)\n      \
533 {\n     $name=$1;$name=~s/^.//;\n       if ( !-e $name){$sav\
534 e.=\" S$name \";}\n\n   $arg_list=~s/S$name/ /;\n   \
535    }\n    $arg_list=~s/\\-in\\b/\\-in $save /;\n  \
536 }\n   #2-prepare \n\nif (!($arg_list=~/\\-outorder\
537 /))\n  {\n    \n    $output_cl .=\" -outorder=$seq\
538 \";\n  }\n@output_flag=(\"-output\",\"-outfile\", \
539 \"-run_name\", \"-outorder\"); \nforeach $v1 (@out\
540 put_flag)\n  {\n    ($v2, $arg_list)=&extract_val_\
541 from_arg_list($v1,$arg_list, \"SPLICE\",\"unset\")\
542 ;\n    if ($v2 ne \"\")\n      {\n\n    if ($v1 eq \"\
543 -run_name\"){$run_name=$v2;$output_cl .=\" $v1 $v2\
544  \";}\n elsif ( $v1 eq \"-outorder\")\n   {\n       \
545 if ( $v2 eq \"input\"){$v2=$seq;}\n         $outorder=\
546 $v2;$output_cl .=\" $v1 $v2 \";\n         }\n   else\n    {\
547 \n          $output_cl .=\" $v1 $v2 \";\n         }\n      }\\
548 n }\n\n\n($dpa_master_aln, $arg_list)  =&extract_v\
549 al_from_arg_list(\"-dpa_master_aln\",$arg_list, \"\
550 SPLICE\", \"t_coffee\");\n$dpa_master_aln=~s/\\s//\
551 g;\n($nseqT, $arg_list)           =&extract_val_fr\
552 om_arg_list(\"-dpa_maxnseq\",$arg_list, \"SPLICE\"\
553 , 30);\n($scoreT1, $arg_list)         =&extract_va\
554 l_from_arg_list(\"-dpa_min_score1\",$arg_list, \"S\
555 PLICE\", 80);\n($scoreT2, $arg_list)         =&ext\
556 ract_val_from_arg_list(\"-dpa_min_score2\"    ,$ar\
557 g_list, \"SPLICE\", 30);\n($dpa_limit, $arg_list) \
558       =&extract_val_from_arg_list(\"-dpa_limit\"  \
559       ,$arg_list, \"SPLICE\", 0);\n($dpa_delta_id,\
560  $arg_list)    =&extract_val_from_arg_list(\"-dpa_\
561 delta_id\"        ,$arg_list, \"SPLICE\", 1);\n($d\
562 pa_debug, $arg_list)       =&extract_val_from_arg_\
563 list(\"-dpa_debug\"           ,$arg_list, \"SPLICE\
564 \", 0);\n\n\n$in_seq=$seq0.\" \".$seq1.\" \".$seq2\
565 .\" \".$seq3;\n$in_prf=(($prf ne $unset)?\"$prf \"\
566 :\"\");\n&exit_dpa (($in_seq eq \"\" && $in_prf eq\
567  \"\")?1:0, \"ERROR: You did not Provide any seque\
568 nces. Use the -seq flag [FATAL: t_coffee_dpa]\\n\"\
569 , EXIT_FAILURE);\n\n\nprint STDERR \"\\nSTART DPA \
570 COMPUTATION\";\n\n\n\nif ($in_seq=~/\\S+/)\n  {\n \
571    \n    print STDERR \"\\n Step $step: Gather all\
572  the sequences into the tmp file: [$seq]\";$step++\
573 ;       \n    &my_system (\"t_coffee $in_seq -convert -q\
574 uiet -output fasta_seq -outfile=$seq -maxnseq 0\")\
575 ;\n  }\n\nif ( !-e $seq){$seq=\"\";}\n\nif ($in_pr\
576 f=~/\\S+/)\n  {\n    $seq_in_type=\"profile\"; \n \
577    $seq.= $in_prf; \n  }\nif ($seq eq \"\"){ &exit\
578 _dpa (1, \"\\nERROR: No Sequence FOund. Provide Se\
579 quences with the -seq flag [FATAL: t_coffee_dpa]\"\
580 , EXIT_FAILURE);}\n\n \n\nif ( $run_name)\n  {\n  \
581   $suffix=$run_name;\n  }\nelsif ($in_seq=~/\\b(S[\
582 \\w.]+\\b)/)\n  {\n    my $suffix1, $sufffix2;\n  \
583   $suffix1=$suffix2=$1;\n    $suffix2=~s/^S//;\n  \
584   if ( -e $suffix1){$suffix=$suffix1;}\n    elsif \
585 ( -e $suffix2){$suffix=$suffix2;}\n    else\n     \
586  {\n    $suffix=&vtmpnam();     \n      }\n    $suffix=~s\
587 /\\.\\w+//;\n  }\n\nelse\n  {\n    $suffix=&vtmpna\
588 m();\n  }\n\n\nif (!$run_name){$output_cl.=\" -run\
589 _name $suffix \";}\n\n\n$gl{'Tree'}=&seq2dpa_tree \
590 ($seq, \"$suffix.dpadnd\");\n\nprint STDERR \"\\n \
591 Step $step: Prepare guide tree: $gl{'Tree'}\";$ste\
592 p++;\n\nprint STDERR \"\\n Step $step: Identify an\
593 d Align Closely Related Groups\";$step++;\n%gl=&ma\
594 ke_one_pass (0, $scoreT1,\"Align\",%gl);\n\nprint \
595 STDERR \"\\n Step $step: Make Multiple Group Align\
596 ment\";$step++;\nwhile (!%gl ||$gl{'Ng'}>$nseqT)\n\
597   {\n    %gl=&make_one_pass ($nseqT, $scoreT2,\"t_\
598 coffee\",%gl);\n    if ( $gl{'Newgroups'}==0){$sco\
599 reT2--;}    \n  }\nprint STDERR \"\\n Step $step: \
600 Make The Final Alignment\";$step++;\n\n\n$arg_list\
601  .=$output_cl;\n\n\n%gl=&tree2group (0,0, %gl);\n$\
602 gl{$gl{'0'}{'File'}}{'Output'}=\"\";\n$a=0;\n&alig\
603 n_groups (\"t_coffee\",'0', $arg_list, \" \", %gl)\
604 ;\n\n\n\nif ( !$dpa_keep_tmpfile){&clean_tmp_file \
605 (@tl);}\n\n\n\nsub seq2dpa_tree \n  {\n    my $seq\
606 =@_[0];\n    my $newtree=@_[1];\n    my $aln=&vtmp\
607 nam ();\n\n    &my_system (\"t_coffee -special_mod\
608 e quickaln -in $seq -outfile $aln -quiet\");\n    \
609 &my_system (\"$seq_reformat -in $aln -action +aln2\
610 tree +tree2dpatree -output newick >$newtree\");\n \
611    return $newtree;\n  }        \nsub seq2dpa_tree_old \n\
612   {\n    my $aln=@_[0];\n    my $newtree=@_[1];\n \
613    \n    \n    &my_system(\"$seq_reformat -in $aln\
614  -action +seq2dpatree -output newick > $newtree\")\
615 ;\n    return $newtree;\n  }\nsub aln2dpa_tree \n \
616  {\n    my $aln=@_[0];\n    my $newtree=&vtmpnam()\
617 ;\n    \n    &my_system(\"$seq_reformat -in $aln -\
618 action +aln2tree +tree2dpatree -output newick > $n\
619 ewtree\");\n    return $newtree;\n  }\nsub group_f\
620 ile2ngroups\n  {\n    my $file=@_[0];\n    my $n;\\
621 n    \n    open ( F, $file);\n    while (<F>)\n   \
622    {\n  $n+=/\\>/;\n      }\n    close (F);\n    re\
623 turn $n;\n  }\n\nsub make_one_pass\n  {\n    my ($\
624 N, $ID,$pg, %gl)=@_;\n    my $a;\n\n    %gl=&tree2\
625 group ($N,$ID,%gl);\n    if (!$gl{'Newgroups'}){re\
626 turn %gl;}\n    else\n      {\n for ( $a=0; $a< $n\
627 g; $a++)\n        {\n       if ($gl{$gl{$a}{'File'}}{'Ng'\
628 }>1){&display_group($a, %gl);}\n            &align_groups\
629  ($pg, $a, $arg_list, \" -quiet=quiet \", %gl);\n       \
630   }\n   return %gl;\n      }\n  }\n\nsub tree2group \
631 \n  {\n    my ($N, $ID, %gl)=@_;\n    my $prefix=&\
632 vtmpnam();\n    my $group_file=&vtmpnam();\n    my\
633  $file;\n    my $oldtree=&vtmpnam();\n    my $n;\n\
634     my $tree;\n\n\n    if ( $gl{'Ng'}==1){return %\
635 gl;}\n    $tree=$gl{'Tree'}; \n    \n    #1 extrac\
636 t the groups\n    &my_system (\"$seq_reformat -in \
637 $tree -action +tree2group $N $ID $prefix > $group_\
638 file\");\n    $n=group_file2ngroups($group_file);\\
639 n    \n    \n    $gl{'Newgroups'}=1;\n    if ( $n=\
640 =$gl{'Ng'})\n      {\n  $gl{'Newgroups'}=0;\n   retur\
641 n %gl;\n      }\n    $gl{'Iteration'}++;\n    $gl{\
642 'MaxNseq'}=$N;$gl{'MinID'}=$ID;\n    $gl{'GroupFil\
643 e'}=$group_file;$gl{'Ng'}=$ng=0;\n    #2 Process t\
644 he group list into the hash\n    open (F, $group_f\
645 ile);\n    while (<F>)\n      {\n       $gl{'File'}.=$_;\
646 \n      if (/\\>/)\n      {\n       $line=$_;\n     $line=~s\
647 /\\>//;\n           @list=($line=~/(\\S+)/g);\n     $fil\
648 e=$gl{$ng}{'File'}=shift @list;\n           $gl{$file}{'\
649 Output'}=$file;\n           \n      $gl{$file}{'Ng'}=$#li\
650 st+1;\n     if ($gl{$file}{'Ng'}>1){ $gl{$file}{'T\
651 list'}=$gl{$file}{'Alist'}=\"(\";}\n        foreach $\
652 l (@list)\n           {\n       \n              $gl{$file}{'List'}.=\" $\
653 l \";\n         \n              if (!$gl{$l}{'Tlist'})\n                  {\n               \
654 $gl{$l}{'Tlist'}=\"$l\";\n                  $gl{$l}{'Alist'}=\\
655 "$l\";\n                    $gl{$l}{'Nseq'}=1;\n                    $gl{$l}{'N\
656 g'}=1;\n                  }\n           $gl{$file}{'Tlist'}.=\"$gl{$l}{'T\
657 list'},\";\n            $gl{$file}{'Alist'}.=\"$gl{$l}{'Tlis\
658 t'}|\";\n               $gl{$file}{'Nseq'}+=$gl{$l}{'Nseq'};\n  \
659       }\n           \n\n            chop($gl{$file}{'Tlist'});c\
660 hop($gl{$file}{'Alist'});\n         if ($gl{$file}{'Ng\
661 '}>1){$gl{$file}{'Tlist'}.=\")\"; $gl{$file}{'Alis\
662 t'}.=\");\";}\n     $ng++;\n      }     \n      }\n    $g\
663 l{'Ng'}=$ng;\n    close (F);\n    \n    #3 Update \
664 the old tree with the new groups\n    $gl{'Tree'}=\
665 &vtmpnam();\n    &my_system (\"$seq_reformat -in $\
666 tree -action +collapse_tree $group_file -output ne\
667 wick > $gl{'Tree'}\");\n    \n    return %gl;\n  }\
668 \n\nsub display_group \n  {\n    my ($g,%gl)=@_;\n\
669     my $f;\n    \n    if ( $g==-1)\n      {\n   prin\
670 t STDERR \"\\nIteration $gl{'Iteration'} [MaxN=$gl\
671 {'MaxNseq'}][MinID=$gl{'MinID'}]\";\n      }\n    \
672 else\n      {\n\n       $f=$gl{$g}{'File'};\n   $action=($\
673 gl{$f}{'Ng'}==1 || $gl{'Iteration'}==1)?\"KEEP  \"\
674 :\"ALIGN \";\n        print STDERR \"\\n\\t[$actio\
675 n][MaxN=$gl{'MaxNseq'}][MinID=$gl{'MinID'}][File $\
676 f][Nseq=$gl{$f}{'Nseq'}][Ngroups=$gl{$f}{'Ng'}][$g\
677 l{$f}{'Alist'}]\";\n      }\n  }\n      \n\n\nsub \
678 align_groups\n  {\n    my ($pg, $g, $arg, $extra_a\
679 rg,%gl)=@_;\n    my $f;\n    my $Output,$Outflag;\\
680 n    \n    \n    $f=$gl{$g}{'File'};\n    $Output=\
681 ($gl{$f}{'Output'});\n    \n    if ( $pg eq \"Alig\
682 n\")\n      {\n if ( !-e $f)\n    {\n       $command=\
683 \"$seq_reformat -in $gl{'Seq'}  -action +extract_a\
684 ln $gl{'GroupFile'}\";\n            if ($gl{$f}{'Ng'}>1)\\
685 n             {\n               &my_system ($command);\n                $command=\"\
686 t_coffee -special_mode quick_aln  S$f -outfile=$Ou\
687 tput -quiet\";\n              }\n         }\n   else \n   {$comma\
688 nd=\"\";}\n      }\n    elsif ( -e $f)\n      { \n\
689         $Outflag=($Output)?\"-outfile=$Output\":\"\";\n $\
690 command=\"$pg -infile $f $Outflag -quiet stdout $a\
691 rg $extra_arg -maxnseq 0 -convert -quiet stdout\";\
692 \n      }\n    elsif ( $gl{$f}{'Ng'}==1)\n      {\\
693 n       $action=($dpa_debug)?\"cp\":\"mv\";\n   $command=\\
694 "$action $gl{$f}{'List'} $Output\";\n      }\n    \
695 else\n      {\n $Outflag=($Output)?\"-outfile=$Out\
696 put\":\"\";\n   $command=\"$pg -profile $gl{$f}{'Lis\
697 t'} $Outflag $arg $extra_arg -maxnseq 0\";\n      \
698 }\n    \n    &my_system ($command);\n    return $o\
699 utfile;\n  }\n    \nsub my_system \n  {\n    my $c\
700 ommand=@_[0];\n    my $force=@_[1];\n    my $statu\
701 s;\n\n    if ( $dpa_debug) {print STDERR \"\\nCOMM\
702 AND: $command\";}\n    $status=system ($command);\\
703 n\n    if (!$force)\n       {\n  &exit_dpa (($stat\
704 us==1), \"Failed in Command:\\n$command\\n[FATAL: \
705 t_coffee_dpa]\\n\", EXIT_FAILURE);\n       }\n    \
706 \n    return $status;\n  }\n\nsub vtmpnam\n  {\n  \
707   my $prefix=@_[0];\n    my $tmp_file_name;\n\n   \
708  $tmp_prefix=($prefix)?$prefix:\"dpa_tmp_file_$$\"\
709 ;\n   \n    $tmp_count++;\n    $tmp_file_name=\"$t\
710 mp_prefix\".\"$tmp_count\";\n    $tl[$#tl+1]=$tmp_\
711 file_name;\n    return $tmp_file_name;\n  }\n\nsub\
712  clean_tmp_file\n  {\n\n    my $list;\n    my $fil\
713 e;\n    \n    if ($dpa_debug){return;}\n    $list=\
714 vtmpnam();\n    `ls -1 | grep $tmp_prefix>$list`;\\
715 n    \n    open (F,$list);\n    while ( <F>)\n    \
716   {\n   $file=$_;\n     chop $file;\n   if ( -e $file){unl\
717 ink $file;}\n      }\n    close (F);\n    unlink $\
718 list;\n  }\n\n\nsub exit_dpa\n  {\n  my $condition\
719 =@_[0];\n  my $error_msg=@_[1];\n  my $exit_value=\
720 @_[2];\n  if ( $condition)\n    {\n      print \"$\
721 error_msg\\n\";\n      exit ($exit_value);\n    }\\
722 n  else\n    {\n      return;\n    }\n  \n}\nsub e\
723 xtract_val_from_arg_list\n  {\n    my $arg=@_[0];\\
724 n    my $arg_list=@_[1];\n    my $keep_flag=@_[2];\
725 \n    my $default_value=@_[3];\n    my $val=\"\";\\
726 n    \n    #protect\n    $arg_list=~s/\\s-/ \\@/g;\
727 \n    $arg=~s/-/\\@/g;\n    \n    #search\n    if \
728 ($arg eq \"^\")\n      {\n      $arg_list=~/^([^@]*)/;\\
729 n       $val=$1;\n      }\n    else\n      {$arg_list=~/\
730 $arg ([^@]*)/;$val=$1;}\n    \n    #remove trailin\
731 g spaces\n    $val=~s/\\s*$//;\n    \n    #remove \
732 the parsed sequence if needed\n    if (($val ne \"\
733 \") && $keep_flag ne \"KEEP\")\n      {\n       if ( $ar\
734 g eq \"^\"){$arg_list=~s/$val/ /;}\n    else {$arg_li\
735 st=~s/($arg [^@]*)/ /;}\n      }\n      \n    #unprotec\
736 t\n    $arg_list=~s/\\@/-/g;\n    $arg=~s/\\@/-/g;\
737 \n    \n    if (($val eq \"\") && $default_value n\
738 e \"unset\"){$val=$default_value;}\n    \n    retu\
739 rn $val, $arg_list;\n  }\n$program=\"T-COFFEE (r25\
740 3)\";\n\n","\n$DEBUG=1;\n$dpa_nseq=10;\n$dpa_sim=0\
741 ;\nif (!@ARGV)\n  {\n    `t_coffee`;\n    exit (0)\
742 ;\n  }\nforeach $arg (@ARGV)\n  {\n    $arg_list.=\
743 \" $arg\";\n  }\n$max_nseq=10;\n($seq0, $arg_list)\
744 =&extract_val_from_arg_list(\"^\",$arg_list);\n($s\
745 eq1, $arg_list)=&extract_val_from_arg_list(\"-seq\\
746 ",$arg_list);\n($seq2, $arg_list)=&extract_val_fro\
747 m_arg_list(\"-in\",$arg_list, \"KEEP\");\n($seq3, \
748 $arg_list)=&extract_val_from_arg_list(\"-infile\",\
749 $arg_list);\n$in_seq=$seq0.\" \".$seq1.\" \".$seq2\
750 .\" \".$seq3;\n\n$seq=vtmpnam();\n`t_coffee $in_se\
751 q -convert -output fasta_seq -outfile=$seq`;\n\n\n\
752 ($dpa_nseq, $arg_list)=&extract_val_from_arg_list(\
753 \"-dpa_nseq\",$arg_list);\n($master_aln, $arg_list\
754 )=&extract_val_from_arg_list(\"-master_aln\",$arg_\
755 list);\n($sim_matrix, $arg_list)=&extract_val_from\
756 _arg_list(\"-sim_matrix\",$arg_list);\n($core_seq,\
757  $arg_list)=&extract_val_from_arg_list(\"-core_seq\
758 \",$arg_list);\n($dpa_sim, $arg_list)=&extract_val\
759 _from_arg_list(\"-dpa_sim\",$arg_list);\n($run_nam\
760 e, $arg_list)=&extract_val_from_arg_list(\"-run_na\
761 me\",$arg_list);\n($output, $arg_list)=&extract_va\
762 l_from_arg_list(\"-output\",$arg_list);\n\n\n\nif \
763 (!$sim_mat && !$master_aln)#Compute the fast align\
764 ment\n  {\n    $ref_aln=vtmpnam();\n    `t_coffee \
765 -seq=$seq -very_fast -outfile=$ref_aln -quiet`;\n \
766    \n  }\n\nif (!$sim_mat)\n  {\n    $sim_mat=vtmp\
767 nam();\n    `seq_reformat -in $ref_aln -output sim\
768  > $sim_mat`;\n  }\n\nif ( !$core_seq)\n  {\n    $\
769 core_seq=vtmpnam();\n    `seq_reformat -in $ref_al\
770 n -action +trimTC N$max_nseq -output fasta_seq > $\
771 core_seq`;\n  }\n@core_name=`seq_reformat -in $cor\
772 e_seq -output name `; \n\n@tot_name=`seq_reformat \
773 -in $seq -output name `;\n\nforeach $s (@core_name\
774 ){$s=~s/\\s//g;$hcore{$s}=1;}\nforeach $s (@tot_na\
775 me){$s=~s/\\s//g;}\nprint STDERR \"T-Coffee_dpa:\\\
776 n\";\nprint STDERR \"\\tTOTAL  SEQ: @tot_name\\n\"\
777 ;\nprint STDERR \"\\tCHOSEN SEQ: @core_name\\n\";\\
778 n\n\n\nopen (F, $sim_mat);\nwhile ( <F>)\n  {\n   \
779  @l=($_=~/(\\b[\\S]+\\b)/g);\n    if (($l[0] eq \"\
780 TOP\" || $l[0] eq \"BOT\"))\n      {\n  $s1=$l[1];$\
781 s2=$l[2];$v=$l[3];\n    if ($hcore{$s1} && !$hcore{$s\
782 2})\n     {\n       if (!$hseq{$s2}{\"sim\"} || $v>$hs\
783 eq{$s2}{\"sim\"})\n           {\n               $hseq{$s2}{\"sim\"}\
784 =$v;$hseq{$s2}{\"seq\"}=$s1;\n        }\n         }\n    \
785   }\n  }\nclose (F);\nforeach $s (@tot_name)\n  {\\
786 n\n    if ( !$hseq{$s}{\"seq\"}){;}\n    else\n   \
787    {\n  $s2=$hseq{$s}{\"seq\"};\n       $v=$hseq{$s}{\"si\
788 m\"};\n         \n      if ($v>$dpa_sim)\n        {\n       $hseq{$s}\
789 {'used'}=1;\n       $seq_list{$s2}{$seq_list{$s2}{'n\
790 seq'}++}=$s;\n    }\n      }\n  }\nforeach $s (@cor\
791 e_name){$seq_list{$s}{$seq_list{$s}{'nseq'}++}=$s;\
792 $hseq{$s}{'used'}=1;}\nforeach $s (@tot_name){if (\
793 !$hseq{$s}{'used'}){$seq_list{'unused'}{$seq_list{\
794 'unused'}{'nseq'}++}=$s;}}\n\n\n$n=0;\nforeach $s \
795 (@core_name)\n  {\n    $ng++;\n    $n=$seq_list{$s\
796 }{'nseq'};\n    for (@g_list=(), $a=0; $a<$n; $a++\
797 ){@g_list=(@g_list,$seq_list{$s}{$a});}\n\n    $g_\
798 seq=vtmpnam();\n    $g_aln=vtmpnam();\n    \n    p\
799 rint STDERR \"Group $ng: $#g_list Seq: @g_list: \"\
800 ;\n    \n    \n    `seq_reformat -in $seq -action \
801 +lower +keep_name +extract_seq  @g_list -output fa\
802 sta_seq > $g_seq`;\n    \n    \n    if ( $#g_list=\
803 =0)\n      {\n  print STDERR \"[No aln]\\n\";\n $g_\
804 aln=$g_seq;\n      }\n    elsif ($#g_list<$max_nse\
805 q) \n      {\n  print STDERR \"[t_coffee]\\n\";\n       `\
806 t_coffee $g_seq -outfile=$g_aln -quiet $arg_list`;\
807 \n      }\n    else\n      {\n  print STDERR \"[t_c\
808 offee_dpa]\\n\";\n      `t_coffee_dpa2 $g_seq -outfile=\
809 $g_aln $arg_list -sim_matrix $sim_matrix -dpa_nseq\
810  $dpa_nseq`;\n      }\n    @profile_list=(@profile\
811 _list, $g_aln);\n  }\n\n\nprint \"UNUSED $seq_list\
812 {'unused'}{'nseq'}\";\n\nif ($seq_list{'unused'}{'\
813 nseq'})\n    {\n      $prf=vtmpnam();\n      \n   \
814    `t_coffee -profile @profile_list $arg_list -out\
815 file=$prf -quiet`;\n      $n=$seq_list{\"unused\"}\
816 {'nseq'};\n      $new_seq=vtmpnam();\n      $new_p\
817 rf=vtmpnam();\n      for ($a=0; $a<$n-1; $a++)\n        {\
818 \n        $s=$seq_list{\"unused\"}{$a};\n         print STDER\
819 R \"\\nADD Sequence $s\";\n       \n      `seq_reformat -\
820 in $seq -action +lower +keep_name +extract_seq $s \
821  -output fasta_seq > $new_seq`;\n         `t_coffee -pro\
822 file $prf $new_seq $arg_list -outfile=$new_prf`;\n\
823           `cp $new_prf $prf`;\n }\n      $s=$seq_list{\"u\
824 nused\"}{$a};\n      `seq_reformat -in $seq -actio\
825 n +lower +keep_name +extract_seq $s  -output fasta\
826 _seq > $new_seq`;\n      @profile_list=($prf, $new\
827 _seq);\n    }\n    \n      \nif ($run_name){$arg_l\
828 ist.=\" -run_name $run_name\";}\nelse \n  {\n    $\
829 in_seq=~/([\\w-]+)/;\n    $arg_list.=\" -run_name \
830 $1\";\n  }\nif ( $output){$arg_list.=\" -output $o\
831 utput \";}\n\n`t_coffee -profile @profile_list $ar\
832 g_list`;\n\n\n&clean (@tmp_file_list);\n\n\nsub vt\
833 mpnam\n  {\n    my $tmp_file_name;\n    $tmp_name_\
834 counter++;\n    $tmp_file_name=\"tmp_file_$tmp_nam\
835 e_counter\\_Pid$$\";\n    $tmp_file_list[$ntmp_fil\
836 e++]=$tmp_file_name;\n    return $tmp_file_name;\n\
837   }\nsub clean\n  {\n  my @fl=@_;\n  my $file;\n  \
838 return;\n\n  foreach $file ( @fl)\n    {\n      if\
839  ( -e $file){unlink($file);}\n    }\n}\nsub extrac\
840 t_val_from_arg_list\n  {\n    my $arg=@_[0];\n    \
841 my $arg_list=@_[1];\n    my $keep_flag=@_[2];\n   \
842  #protect\n    $arg_list=~s/\\s-/ \\@/g;\n    $arg\
843 =~s/-/\\@/g;\n    \n    #search\n    if ($arg eq \\
844 "^\")\n      {\n        $arg_list=~/^([^@]*)/;\n        $val=$1;\
845 \n      }\n    else\n      {$arg_list=~/$arg ([^@]\
846 *)/;$val=$1;}\n    \n    #remove the parsed sequen\
847 ce if needed\n    if ($val && $keep_flag ne \"KEEP\
848 \")\n      {\n  if ( $arg eq \"^\"){$arg_list=~s/$v\
849 al/ /;}\n       else {$arg_list=~s/($arg [^@]*)/ /;}\n  \
850     }\n \n    #unprotect\n    $arg_list=~s/\\@/-/g\
851 ;\n    $arg=~s/\\@/-/g;\n    \n    return $val, $a\
852 rg_list;\n  }\n\n","use Env;\nuse FileHandle;\nuse\
853  Cwd;\nuse File::Path;\nuse Sys::Hostname;\n\nour \
854 $PIDCHILD;\nour $ERROR_DONE;\nour @TMPFILE_LIST;\n\
855 our $EXIT_FAILURE=1;\nour $EXIT_SUCCESS=0;\n\nour \
856 $REFDIR=getcwd;\nour $EXIT_SUCCESS=0;\nour $EXIT_F\
857 AILURE=1;\n\nour $PROGRAM=\"tc_generic_method.pl\"\
858 ;\nour $CL=$PROGRAM;\n\nour $CLEAN_EXIT_STARTED;\n\
859 our $debug_lock=$ENV{\"DEBUG_LOCK\"};\nour $debug_\
860 cmd_exec=$ENV{\"DEBUG_CMD_EXEC\"};\nour $LOCKDIR=$\
861 ENV{\"LOCKDIR_4_TCOFFEE\"};\nif (!$LOCKDIR){$LOCKD\
862 IR=getcwd();}\nour $ERRORDIR=$ENV{\"ERRORDIR_4_TCO\
863 FFEE\"};\nour $ERRORFILE=$ENV{\"ERRORFILE_4_TCOFFE\
864 E\"};\n&set_lock ($$);\nif (isshellpid(getppid()))\
865 {lock4tc(getppid(), \"LLOCK\", \"LSET\", \"$$\\n\"\
866 );}\n      \n\n\n\n\nour $BLAST_MAX_NRUNS=2;\nour \
867 $COMMAND;\nour $PIDCHILD;\n\n$REF_EMAIL=\"\";\n$tm\
868 p_dir=\"\";\n$init_dir=\"\";\n\n\n$test=0;\nif ($t\
869 est==1)\n  {\n    $SERVER=\"NCBI\";\n    $query=$A\
870 RGV[0];\n    $hitf=$ARGV[1];\n    %s=read_fasta_se\
871 q($query);\n    @sl=keys(%s);\n    &blast_xml2prof\
872 ile (\"xx\", $s{$sl[0]}{seq},$maxid,$minid,$mincov\
873 , $hitf);\n    myexit ($EXIT_FAILURE);\n  }\n\nfor\
874 each $v(@ARGV){$cl.=\"$v \";}\n$COMMAND=$cl;\n($mo\
875 de)=&my_get_opt ( $cl, \"-mode=\",1,0);\n\n($A)=(&\
876 my_get_opt ( $cl, \"-name1=\",0,0));\n($B)=(&my_ge\
877 t_opt ( $cl, \"-name2=\",0,0));\n($TMPDIR)=(&my_ge\
878 t_opt ( $cl, \"-tmpdir=\",0,0));\n($CACHE)=(&my_ge\
879 t_opt ( $cl, \"-cache=\",0,0));\n($SERVER)=((&my_g\
880 et_opt ( $cl, \"-server=\",0,0)));\n($EMAIL)=((&my\
881 _get_opt ( $cl, \"-email=\",0,0)));\n\nif (!$A){$A\
882 =\"A\";}\nif (!$B){$B=\"B\";}\n\n\nif (!$TMPDIR)\n\
883   {\n    $HOME=$ENV{HOME};\n    if ($ENV{TMP_4_TCO\
884 FFEE}){$TMPDIR=$ENV{TMP_4_TCOFFEE};}\n    else{$TM\
885 PDIR=\"$HOME/.t_coffee/tmp/\";}\n  }\nif ( ! -d $T\
886 MPDIR)\n  {\n    mkdir $TMPDIR;\n  }\nif ( ! -d $T\
887 MPDIR)\n  {\n    print \"ERROR: Could not create t\
888 emporary dir: $TMPDIR\\n\";\n    myexit ($EXIT_FAI\
889 LURE);\n  }\n\n$EMAIL=~s/XEMAILX/\\@/g;\nif (!$EMA\
890 IL)\n  {\n    if ($ENV{EMAIL_4_TCOFFEE}){$EMAIL=$E\
891 NV{EMAIL_4_TCOFFEE};}\n    elsif ($ENV{EMAIL}){$EM\
892 AIL=$ENV{EMAIL};}\n    else {$EMAIL=$REF_EMAIL;}\n\
893   }\n\n($maxid,$minid,$mincov)=(&my_get_opt ( $cl,\
894  \"-maxid=\",0,0, \"-minid=\",0,0,\"-mincov=\",0,0\
895 ));\nif (!$cl=~/\\-maxid\\=/){$maxid=95;}\nif (!$c\
896 l=~/\\-minid\\=/){$minid=35;}\nif (!$cl=~/\\-minco\
897 v\\=/){$mincov=80;}\n\n\n\n\nif ($mode eq \"seq_ms\
898 a\")\n  {\n    &seq2msa($mode,&my_get_opt ( $cl, \\
899 "-infile=\",1,1, \"-method=\",1,2, \"-param=\",0,0\
900 ,\"-outfile=\",1,0, \"-database=\",0,0));\n  }\nel\
901 sif ( $mode eq \"tblastx_msa\")\n  {\n    &seq2tbl\
902 astx_lib ($mode,&my_get_opt ( $cl, \"-infile=\",1,\
903 1, \"-outfile=\",1,0));\n  }\nelsif ( $mode eq \"t\
904 blastpx_msa\")\n  {\n    &seq2tblastpx_lib ($mode,\
905 &my_get_opt ( $cl, \"-infile=\",1,1, \"-outfile=\"\
906 ,1,0));\n  }\nelsif ( $mode eq \"thread_pair\")\n \
907  {\n    &seq2thread_pair($mode,&my_get_opt ( $cl, \
908 \"-infile=\",1,1, \"-pdbfile1=\",1,1, \"-method=\"\
909 ,1,2,\"-param=\",0,0, \"-outfile=\",1,0, ));\n  }\\
910 nelsif ( $mode eq \"pdbid_pair\")\n  {\n    &seq2p\
911 dbid_pair($mode,&my_get_opt ( $cl, \"-pdbfile1=\",\
912 1,0, \"-pdbfile2=\",1,0, \"-method=\",1,2,\"-param\
913 =\",0,0, \"-outfile=\",1,0, ));\n  }\nelsif ( $mod\
914 e eq \"pdb_pair\")\n  {\n    &seq2pdb_pair($mode,&\
915 my_get_opt ( $cl, \"-pdbfile1=\",1,1, \"-pdbfile2=\
916 \",1,1, \"-method=\",1,2,\"-param=\",0,0, \"-outfi\
917 le=\",1,0, ));\n  }\nelsif ( $mode eq \"profile_pa\
918 ir\")\n  {\n     &seq2profile_pair($mode,&my_get_o\
919 pt ( $cl, \"-profile1=\",1,1, \"-profile2=\",1,1, \
920 \"-method=\",1,2,\"-param=\",0,0, \"-outfile=\",1,\
921 0 ));\n  }\nelsif ($mode eq \"pdb_template_test\")\
922 \n  {\n    &blast2pdb_template_test ($mode,&my_get\
923 _opt ( $cl, \"-infile=\",1,1));\n\n  }\nelsif ($mo\
924 de eq \"psi_template_test\")\n  {\n    &psiblast2p\
925 rofile_template_test ($mode,&my_get_opt ( $cl, \"-\
926 seq=\",1,1,\"-blast=\",1,1));\n\n  }\n\nelsif ( $m\
927 ode eq \"pdb_template\")\n  {\n    &blast2pdb_temp\
928 late ($mode,&my_get_opt ( $cl, \"-infile=\",1,1, \\
929 "-database=\",1,0, \"-method=\",1,0, \"-outfile=\"\
930 ,1,0,\"-pdb_type=\",1,0));\n  }\n\nelsif ( $mode e\
931 q \"profile_template\")\n  {\n    \n    &psiblast2\
932 profile_template ($mode,&my_get_opt ( $cl, \"-infi\
933 le=\",1,1, \"-database=\",1,0, \"-method=\",1,0, \\
934 "-outfile=\",1,0));\n  }\nelsif ( $mode eq \"psipr\
935 ofile_template\")\n  {\n    &psiblast2profile_temp\
936 late ($mode,&my_get_opt ( $cl, \"-infile=\",1,1, \\
937 "-database=\",1,0, \"-method=\",1,0, \"-outfile=\"\
938 ,1,0));\n  }\nelsif ( $mode eq \"RNA_template\")\n\
939   {\n    &seq2RNA_template ($mode,&my_get_opt ( $c\
940 l, \"-infile=\",1,1, \"-outfile=\",1,0));\n  }\nel\
941 sif ( $mode eq \"tm_template\")\n  {\n    &seq2tm_\
942 template ($mode, \"\", &my_get_opt ( $cl, \"-infil\
943 e=\",1,1,\"-arch=\",1,1,\"-psv=\",1,1, \"-outfile=\
944 \",1,0,));\n  }\nelsif ( $mode eq \"psitm_template\
945 \")\n  {\n    &seq2tm_template ($mode,&my_get_opt \
946 ( $cl, \"-database=\",1,0, \"-infile=\",1,1, \"-ar\
947 ch=\",1,1,\"-psv=\",1,1, \"-outfile=\",1,0,));\n  \
948 }\nelsif ( $mode eq \"ssp_template\")\n  {\n    &s\
949 eq2ssp_template ($mode,&my_get_opt ( $cl, \"-infil\
950 e=\",1,1,\"-seq=\",1,1,\"-obs=\",1,1, \"-outfile=\\
951 ",1,0));\n  }\nelsif ( $mode eq \"psissp_template\\
952 ")\n  {\n    &seq2ssp_template ($mode,&my_get_opt \
953 ( $cl, \"-infile=\",1,1,\"-seq=\",1,1,\"-obs=\",1,\
954 1, \"-outfile=\",1,0));\n  }\n\nelsif ( $mode eq \\
955 "rna_pair\")\n{\n    &seq2rna_pair($mode,&my_get_o\
956 pt ( $cl, \"-pdbfile1=\",1,1, \"-pdbfile2=\",1,1, \
957 \"-method=\",1,2,\"-param=\",0,0, \"-outfile=\",1,\
958 0, ));\n}\nelsif ( $mode eq \"calc_rna_template\")\
959 \n{\n    &calc_rna_template($mode,&my_get_opt ( $c\
960 l, \"-infile=\",1,1,\"-pdbfile=\",1,1, \"-outfile=\
961 \",1,0));\n}\nelse\n  {\n    myexit(flush_error( \\
962 "$mode is an unknown mode of tc_generic_method.pl\\
963 "));\n  }\nmyexit ($EXIT_SUCCESS);\n\n\nsub seq2ss\
964 p_template\n  {\n  my ($mode, $infile,$gor_seq,$go\
965 r_obs,$outfile)=@_;\n  my %s, %h;\n  my $result;\n\
966   my (@profiles);\n  &set_temporary_dir (\"set\",$\
967 infile,\"seq.pep\");\n  %s=read_fasta_seq (\"seq.p\
968 ep\");\n\n  \n  open (R, \">result.aln\");\n  \n  \
969 #print stdout \"\\n\";\n  foreach $seq (keys(%s))\\
970 n    {\n      \n      open (F, \">seqfile\");\n   \
971    $s{$seq}{seq}=uc$s{$seq}{seq};\n      print (F \
972 \">$s{$seq}{name}\\n$s{$seq}{seq}\\n\");\n      cl\
973 ose (F);\n      $lib_name=\"$s{$seq}{name}.ssp\";\\
974 n      $lib_name=&clean_file_name ($lib_name);\n  \
975     \n      if ($mode eq \"ssp_template\"){&seq2go\
976 r_prediction ($s{$seq}{name},$s{$seq}{seq}, \"seqf\
977 ile\", $lib_name,$gor_seq, $gor_obs);}\n      elsi\
978 f ($mode eq \"psissp_template\")\n      {\n       &seq2msa_\
979 gor_prediction ($s{$seq}{name},$s{$seq}{seq},\"seq\
980 file\", $lib_name,$gor_seq, $gor_obs);\n        }\n    \n\
981       if ( !-e $lib_name)\n     {\n       myexit(flush_err\
982 or(\"GORIV failed to compute the secondary structu\
983 re of $s{$seq}{name}\"));\n       myexit ($EXIT_FAILUR\
984 E);\n   }\n      else\n {\n       print stdout \"\\tProc\
985 ess: >$s{$seq}{name} _E_ $lib_name \\n\";\n       prin\
986 t R \">$s{$seq}{name} _E_ $lib_name\\n\";\n     }\n   \
987    unshift (@profiles, $lib_name);\n    }\n  close\
988  (R);\n  &set_temporary_dir (\"unset\",$mode, $met\
989 hod,\"result.aln\",$outfile, @profiles);\n}\n\nsub\
990  seq2tm_template\n  {\n  my ($mode, $db, $infile,$\
991 arch,$psv,$outfile)=@_;\n  my %s, %h;\n  my $resul\
992 t;\n  my (@profiles);\n  &set_temporary_dir (\"set\
993 \",$infile,\"seq.pep\");\n  %s=read_fasta_seq (\"s\
994 eq.pep\");\n\n  \n  open (R, \">result.aln\");\n  \
995 \n  #print stdout \"\\n\";\n  foreach $seq (keys(%\
996 s))\n    {\n      open (F, \">seqfile\");\n      p\
997 rint (F \">$s{$seq}{name}\\n$s{$seq}{seq}\\n\");\n\
998       close (F);\n      $lib_name=\"$s{$seq}{name}\
999 .tmp\";\n      $lib_name=&clean_file_name ($lib_na\
1000 me);\n\n      if ($mode eq \"tm_template\")\n   {\n     \
1001   &safe_system (\"t_coffee -other_pg fasta_seq2hmm\
1002 top_fasta.pl -in=seqfile -out=$lib_name -arch=$arc\
1003 h -psv=$psv\");\n       }\n      elsif ( $mode eq \"psit\
1004 m_template\")\n {\n       &seq2msa_tm_prediction ($s{$\
1005 seq}{name},$s{$seq}{seq}, $db, \"seqfile\", $lib_n\
1006 ame,$arch, $psv);\n     }\n      if ( !-e $lib_name)\n\
1007         {\n       myexit(flush_error(\"RNAplfold failed to co\
1008 mpute the secondary structure of $s{$seq}{name}\")\
1009 );\n      myexit ($EXIT_FAILURE);\n     }\n      else\n {\
1010 \n        print stdout \"\\tProcess: >$s{$seq}{name} _T\
1011 _ $lib_name\\n\";\n       print R \">$s{$seq}{name} _T\
1012 _ $lib_name\\n\";\n     }\n      unshift (@profiles, $\
1013 lib_name);\n    }\n  close (R);\n  &set_temporary_\
1014 dir (\"unset\",$mode, $method,\"result.aln\",$outf\
1015 ile, @profiles);\n}\n\nsub seq2RNA_template\n  {\n\
1016   my ($mode, $infile,$outfile)=@_;\n  my %s, %h, ;\
1017 \n  my $result;\n  my (@profiles);\n  &set_tempora\
1018 ry_dir (\"set\",$infile,\"seq.pep\");\n  %s=read_f\
1019 asta_seq (\"seq.pep\");\n\n  \n  open (R, \">resul\
1020 t.aln\");\n  \n  #print stdout \"\\n\";\n  foreach\
1021  $seq (keys(%s))\n    {\n      open (F, \">seqfile\
1022 \");\n      print (F \">$s{$seq}{name}\\n$s{$seq}{\
1023 seq}\\n\");\n      close (F);\n      $lib_name=\"$\
1024 s{$seq}{name}.rfold\";\n      $lib_name=&clean_fil\
1025 e_name ($lib_name);\n      &safe_system (\"t_coffe\
1026 e -other_pg RNAplfold2tclib.pl -in=seqfile -out=$l\
1027 ib_name\");\n      \n      if ( !-e $lib_name)\n        {\
1028 \n       myexit(flush_error(\"RNAplfold failed to compu\
1029 te the secondary structure of $s{$seq}{name}\"));\\
1030 n         myexit ($EXIT_FAILURE);\n     }\n      else\n {\n     \
1031   print stdout \"\\tProcess: >$s{$seq}{name} _F_ $\
1032 lib_name\\n\";\n          print R \">$s{$seq}{name} _F_ $\
1033 lib_name\\n\";\n        }\n      unshift (@profiles, $lib\
1034 _name);\n    }\n  close (R);\n  &set_temporary_dir\
1035  (\"unset\",$mode, $method,\"result.aln\",$outfile\
1036 , @profiles);\n}\nsub psiblast2profile_template_te\
1037 st\n  {\n  my ($mode, $seq,$blast)=@_;\n  my %s, %\
1038 h, ;\n  my ($result,$psiblast_output,$profile_name\
1039 ,@profiles);\n  my $trim=0;\n  my $maxid=100;\n  m\
1040 y $minid=0;\n  my $mincov=0;\n  my $maxcov=100;\n \
1041  \n  %s=read_fasta_seq ($seq);\n  open (R, \">resu\
1042 lt.aln\");\n  \n  #print stdout \"\\n\";\n  foreac\
1043 h $seq (keys(%s))\n    {\n      \n      open (F, \\
1044 ">seqfile\");\n      print (F \">$A\\n$s{$seq}{seq\
1045 }\\n\");\n      close (F);\n      $psiblast_output\
1046 =$blast;\n      if ( -e $psiblast_output)\n     {\n       \
1047 %profile=blast_xml2profile($s{$seq}{name}, $s{$seq\
1048 }{seq},$maxid, $minid,$mincov,$psiblast_output);\n\
1049 \n\n      \n      $profile_name=\"$s{$seq}{name}.prf\";\\
1050 n         $profile_name=&clean_file_name ($profile_name)\
1051 ;\n       unshift (@profiles, $profile_name);\n   outp\
1052 ut_profile ($profile_name, \\%profile, $trim);\n         \
1053  print stdout \"\\tProcess: >$s{$seq}{name} _R_ $p\
1054 rofile_name [$profile{n} Seq.] [$SERVER/blast/$db]\
1055 [$CACHE_STATUS]\\n\";\n   print R \">$s{$seq}{name\
1056 } _R_ $profile_name\\n\";\n     }\n    }\n  close (R);\
1057 \n  \n  die;\n}\nsub psiblast2profile_template \n \
1058  {\n  my ($mode, $infile, $db, $method, $outfile)=\
1059 @_;\n  my %s, %h, ;\n  my ($result,$psiblast_outpu\
1060 t,$profile_name,@profiles);\n  my $trim=0;\n  &set\
1061 _temporary_dir (\"set\",$infile,\"seq.pep\");\n  %\
1062 s=read_fasta_seq (\"seq.pep\");\n  open (R, \">res\
1063 ult.aln\");\n  \n  #print stdout \"\\n\";\n  forea\
1064 ch $seq (keys(%s))\n    {\n      open (F, \">seqfi\
1065 le\");\n      print (F \">$A\\n$s{$seq}{seq}\\n\")\
1066 ;\n      close (F);\n      $psiblast_output=&run_b\
1067 last ($s{$seq}{name},$method, $db, \"seqfile\",\"o\
1068 utfile\");\n      \nif ( -e $psiblast_output)\n {\\
1069 n         %profile=blast_xml2profile($s{$seq}{name}, $s{\
1070 $seq}{seq},$maxid, $minid,$mincov,$psiblast_output\
1071 );\n      unlink ($psiblast_output);\n    \n      $profil\
1072 e_name=\"$s{$seq}{name}.prf\";\n          $profile_name=&\
1073 clean_file_name ($profile_name);\n        unshift (@pro\
1074 files, $profile_name);\n          output_profile ($profil\
1075 e_name, \\%profile, $trim);\n     print stdout \"\\t\
1076 Process: >$s{$seq}{name} _R_ $profile_name [$profi\
1077 le{n} Seq.] [$SERVER/blast/$db][$CACHE_STATUS]\\n\\
1078 ";\n      print R \">$s{$seq}{name} _R_ $profile_name\
1079 \\n\";\n        }\n    }\n  close (R);\n  &set_temporary_\
1080 dir (\"unset\",$mode, $method,\"result.aln\",$outf\
1081 ile, @profiles);\n}\nsub blast2pdb_template_test\n\
1082     {\n      my ($mode,$infile)=@_;\n      my ($ma\
1083 xid,$minid,$mincov);\n      $maxid=100;\n      $mi\
1084 nid=0;\n      $mincov=0;\n      \n      print \"$i\
1085 nfile\\n\";\n      \n      %p=blast_xml2profile($s\
1086 {$seq}{name}, $s{$seq}{seq},$maxid, $minid,$mincov\
1087 ,$infile);\n      $c=1;\n      print stdout \"\\tP\
1088 rocess: >$s{$seq}{name} [$SERVER/blast/$db][$CACHE\
1089 _STATUS]\\n\";\n      while (!$found && $c<$p{n})\\
1090 n       {\n       $pdbid=&id2pdbid($p{$c}{identifyer});\n         \
1091 if ( length ($pdbid)>5){$pdbid=id2pdbid($p{$c}{def\
1092 inition});}\n     \n      if ( length ($pdbid)>5)\n        \
1093  {\n          myexit(add_error (EXIT_FAILURE,$$,$$,ge\
1094 tppid(), \"BLAST_FAILURE::Could Not Parse PDBID ($\
1095 p{$c}{identifyer},$p{$c}{definition})\"));\n        }\
1096 \n        \n      \n      if (!&pdb_is_released($pdbid))\n        \
1097   {\n         print stdout \"\\t\\t**$pdbid [PDB NOT\
1098  RELEASED or WITHDRAWN]\\n\";\n       $c++;\n       \
1099 }\n       elsif (!&pdb_has_right_type ($pdbid,$type))\\
1100 n           {\n       my $ptype=&pdb2type ($pdbid);\n     \
1101     my $etype=&type2etype($type);\n           \n             \
1102  print stdout \"\\t\\t**$pdbid [$ptype cannot be u\
1103 sed (expected: $etype)]\\n\";\n       $c++;\n       \
1104 }\n       else\n            {\n       $found=1;\n           }\n }\n\
1105 \n      if ($found)\n   {\n       print stdout \"\\t\\t \
1106 >$s{$seq}{name} _P_ $pdbid\\n\";\n      }\n      else\n\
1107         {\n       print stdout \"\\t\\t >$s{$seq}{name} No Te\
1108 mplate Selected\\n\";\n }\n      die;\n    }\nsub \
1109 blast2pdb_template \n  {\n  my ($mode, $infile, $d\
1110 b, $method, $outfile,$type)=@_;\n  my %s, %h, ;\n \
1111  my ($result,$blast_output);\n  &set_temporary_dir\
1112  (\"set\",$infile,\"seq.pep\");\n  %s=read_fasta_s\
1113 eq (\"seq.pep\");\n  open (R, \">result.aln\");\n \
1114  \n \n  #print stdout \"\\n\";\n  foreach $seq (ke\
1115 ys(%s))\n    {\n      my $c;\n      my $found;\n  \
1116     \n      open (F, \">seqfile\");\n      print (\
1117 F \">$A\\n$s{$seq}{seq}\\n\");\n      close (F);\n\
1118      \n      $blast_output=&run_blast ($s{$seq}{na\
1119 me},$method, $db, \"seqfile\",\"outfile\");\n     \
1120 \n      %p=blast_xml2profile($s{$seq}{name}, $s{$s\
1121 eq}{seq},$maxid, $minid,$mincov,$blast_output);\n \
1122      unlink ($blast_output);\n      \n      $c=1;\\
1123 n      print stdout \"\\tProcess: >$s{$seq}{name} \
1124 [$SERVER/blast/$db][$CACHE_STATUS]\\n\";\n      wh\
1125 ile (!$found && $c<$p{n})\n     {\n       $pdbid=&id2pdbid\
1126 ($p{$c}{identifyer});\n   if ( length ($pdbid)>5){\
1127 $pdbid=id2pdbid($p{$c}{definition});}\n\n         if ( l\
1128 ength ($pdbid)>5)\n         {\n       myexit(add_error\
1129  (EXIT_FAILURE,$$,$$,getppid(), \"BLAST_FAILURE::C\
1130 ould Not Parse PDBID ($p{$c}{identifyer},$p{$c}{de\
1131 finition})\"));\n           }\n   \n\n    if (!&pdb_is_re\
1132 leased($pdbid))\n           {\n       print stdout \"\\t\
1133 \\t**$pdbid [PDB NOT RELEASED or WITHDRAWN]\\n\";\\
1134 n             $c++;\n       }\n   elsif (!&pdb_has_right_t\
1135 ype ($pdbid,$type))\n       {\n       my $ptype=&pdb\
1136 2type ($pdbid);\n             my $etype=&type2etype($typ\
1137 e);\n         \n              print stdout \"\\t\\t**$pdbid\
1138  [$ptype cannot be used (expected: $etype)]\\n\";\\
1139 n             $c++;\n       }\n   else\n            {\n       $fo\
1140 und=1;\n            }\n }\n\n      if ($found)\n        {\n       pr\
1141 int R \">$s{$seq}{name} _P_ $pdbid\\n\";\n        print\
1142  stdout \"\\t\\t >$s{$seq}{name} _P_ $pdbid\\n\";\\
1143 n       }\n      else\n {\n       print R \">$s{$seq}{name}\\
1144 \n\";\n   print stdout \"\\t\\t >$s{$seq}{name} No\
1145  Template Selected\\n\";\n      }\n    }\n  close (R);\\
1146 n  &set_temporary_dir (\"unset\",$mode, $method,\"\
1147 result.aln\",$outfile);\n}\nsub type2etype\n  {\n \
1148    my $type=shift;\n    my $etype;\n    \n    if (\
1149  $type=~/n/){$etype.=\"NMR \";}\n    if ( $type=~/\
1150 d/){$etype.=\"diffraction \";}\n    if ( $type=~/m\
1151 /){$etype.=\"model \";}\n    return $etype;\n  }\n\
1152 sub pdb2type\n  {\n     my $pdb=shift;\n     my $f\
1153 =vtmpnam();\n     \n     my $value= &safe_system (\
1154 \"t_coffee -other_pg extract_from_pdb -model_type \
1155 $pdb > $f\");\n     my $r=&file2string ($f);\n    \
1156  chomp($r);\n     return $r;\n   }\nsub pdb_has_ri\
1157 ght_type\n  {\n    my $pdb=shift;\n    my $type=sh\
1158 ift;\n    \n    my $f=vtmpnam();\n    \n    my $va\
1159 lue= &safe_system (\"t_coffee -other_pg extract_fr\
1160 om_pdb -model_type $pdb > $f\");\n    my $r=&file2\
1161 string ($f);\n    chomp($r);\n\n        \n    if (\
1162  $r eq \"NMR\" && $type=~/n/){return 1;}\n    elsi\
1163 f ( $r eq \"diffraction\" && $type=~/d/){return 1;\
1164 }\n    elsif ( $r eq \"model\" && $type=~/m/){retu\
1165 rn 1;}\n    else {return 0;}\n  }\nsub pdb_is_rele\
1166 ased\n  {\n    my $pdb=shift;\n    my $f=vtmpnam()\
1167 ;\n    \n    $value= &safe_system (\"t_coffee -oth\
1168 er_pg extract_from_pdb -is_released_pdb_name $pdb \
1169 > $f\");\n    my $r=&file2string ($f);\n    chomp(\
1170 $r);\n    return $r;\n  }\nsub blast_msa\n  {\n   \
1171  my ($infile,$db,$outfile)=@_;\n    my ($a, %seq);\
1172 \n    my $seqfile;\n    my $SEQ=new FileHandle;\n \
1173    my $seqfile=\"seqfile\";\n    my @txt;\n    \n \
1174    \n    %s1=&read_fasta_seq ($db);\n    \n    for\
1175 each $s (keys (%s1))\n      {\n $i=$s1{$s}{order};\
1176 \n      $s{$i}{name}=$s;\n      $s{$i}{seq}=$s1{$s}{seq};\n     \
1177 $s{$i}{len}=length( $s{$i}{seq});\n     $s{n}++;\n    \
1178   }\n    \n    &safe_system (\"formatdb -i $db\");\
1179 \n    &safe_system  (\"blastall -i $infile -d $db \
1180 -m7 -p blastp -o io\");\n    &set_blast_type (\"io\
1181 \");\n    \n    %FB=&xml2tag_list (\"io\", \"Itera\
1182 tion\");\n    open (F, \">$outfile\");\n    print \
1183 F \"! TC_LIB_FORMAT_01\\n\";\n    print F \"$s{n}\\
1184 \n\";\n    for ( $a=0; $a<$s{n}; $a++)\n      {\n       \
1185 print F \"$s{$a}{name} $s{$a}{len} $s{$a}{seq}\\n\\
1186 ";\n      }\n\n\n    for ( $a=0; $a<$FB{n}; $a++)\\
1187 n      {\n      %p=blast_xml2profile ($s{$a}{name}, $s{\
1188 $a}{seq},100, 0, 0, $FB{$a}{body});\n   my $query=$p\
1189 {0}{name};\n    my $i= $s1{$query}{order}+1;\n  for ($\
1190 b=1; $b<$p{n}; $b++)\n    {\n       my $l=length ($p{\
1191 $b}{Qseq});\n       my $hit=$p{$b}{definition};\n         \
1192   my $Qstart=$p{$b}{Qstart};\n      my $Hstart=$p{$\
1193 b}{Hstart};\n       my $identity=$p{$b}{identity};\n\
1194             my @lrQ=split (//,$p{$b}{Qseq});\n      my @lr\
1195 H=split (//,$p{$b}{Hseq});\n        \n      my $j= $s1\
1196 {$hit}{order}+1;\n          #if ( $j==$i){next;}\n          \
1197 printf F \"# %d %d\\n\", $i, $j;\n          #  print  F\
1198  \"\\n$p{$b}{Qseq} ($Qstart)\\n$p{$b}{Hseq} ($Hsta\
1199 rt)\";\n            for ($c=0; $c<$l; $c++)\n         {\n               \
1200 my $rQ=$lrQ[$c];\n              my $rH=$lrH[$c];\n              my $n=0;\n\
1201                 \n              if ($rQ ne \"-\"){$n++, $Qstart++;}\n           if ($\
1202 rH ne \"-\"){$n++; $Hstart++;}\n                \n              if ( $n==2)\\
1203 n                 {\n               printf F \"\\t%d %d %d\\n\", $Qstart\
1204 -1, $Hstart-1,$identity;\n                }\n         }\n         }\n \
1205      }\n    print F \"! SEQ_1_TO_N\\n\";\n    clos\
1206 e (F);\n    return $output;\n  \n  }\n\nsub blast_\
1207 msa_old\n  {\n    my ($infile,$outfile)=@_;\n    m\
1208 y ($a, %seq);\n    %s1=&read_fasta_seq ($infile);\\
1209 n    foreach $s (keys (%s1))\n      {\n $i=$s1{$s}\
1210 {order};\n      $s{$i}{name}=$s;\n      $s{$i}{seq}=$s1{$s}{\
1211 seq};\n $s{$i}{len}=length( $s{$i}{seq});\n     $s{n}+\
1212 +;\n      }\n    &safe_system (\"formatdb -i $infi\
1213 le\");\n    &safe_system (\"blastall -i $infile -d\
1214  $infile -m7 -o io\");\n    &set_blast_type (\"io\\
1215 ");\n    \n    %FB=&xml2tag_list (\"io\", \"Iterat\
1216 ion\");\n    \n    open (F, \">$outfile\");\n    p\
1217 rint F \"! TC_LIB_FORMAT_01\\n\";\n    print F \"$\
1218 s{n}\\n\";\n    for ( $a=0; $a<$s{n}; $a++)\n     \
1219  {\n    print F \"$s{$a}{name} $s{$a}{len} $s{$a}{seq\
1220 }\\n\";\n      }\n    for ( $a=0; $a<$FB{n}; $a++)\
1221 \n      {\n     %p=blast_xml2profile ($s{$a}{name}, $s\
1222 {$a}{seq},100, 0, 0, $FB{$a}{body});\n  for ($b=1; \
1223 $b<$p{n}; $b++)\n         {\n       my $l=length ($p{$b}{Q\
1224 seq});\n            my $hit=$p{$b}{definition};\n           my \
1225 $Qstart=$p{$b}{Qstart};\n           my $Hstart=$p{$b}{Hs\
1226 tart};\n            my $identity=$p{$b}{identity};\n        \
1227 my @lrQ=split (//,$p{$b}{Qseq});\n          my @lrH=spl\
1228 it (//,$p{$b}{Hseq});\n     my $i= $s1{$s{$a}{name\
1229 }}{order}+1;\n      my $j= $s1{$hit}{order}+1;\n          \
1230   #if ( $j==$i){next;}\n            printf F \"# %d %d\\n\
1231 \", $i, $j;\n       #  print  F \"\\n$p{$b}{Qseq} ($\
1232 Qstart)\\n$p{$b}{Hseq} ($Hstart)\";\n       for ($c=\
1233 0; $c<$l; $c++)\n             {\n               my $rQ=$lrQ[$c];\n              m\
1234 y $rH=$lrH[$c];\n               my $n=0;\n              \n              if ($rQ ne \"-\\
1235 "){$n++, $Qstart++;}\n          if ($rH ne \"-\"){$n++; $H\
1236 start++;}\n             \n              if ( $n==2)\n             {\n               printf \
1237 F \"\\t%d %d %d\\n\", $Qstart-1, $Hstart-1,$identi\
1238 ty;\n             }\n         }\n         }\n      }\n    print F \\
1239 "! SEQ_1_TO_N\\n\";\n    close (F);\n    return $o\
1240 utput;\n  \n  }\n\nsub seq2msa\n  {\n    my ($mode\
1241 , $infile, $method, $param, $outfile,$database)=@_\
1242 ;\n    &set_temporary_dir (\"set\",$infile,\"seq.p\
1243 ep\", $database, \"db.pep\");\n    $param.=\" >/de\
1244 v/null 2>&1 \";\n    \n    \n    #make sure test.p\
1245 ep is in FASTA\n    &safe_system (\"t_coffee -othe\
1246 r_pg seq_reformat -in seq.pep -output fasta_seq > \
1247 x\");\n    `mv x seq.pep`;\n    \n    if ( $method\
1248  eq \"blastp\")\n      {\n      &blast_msa (\"seq.pep\"\
1249 , \"db.pep\",\"result.aln\");\n      }\n    elsif \
1250 ( $method eq \"muscle\")\n      {\n     `muscle -in se\
1251 q.pep -out result.aln $param`;\n      }\n    elsif\
1252  ( $method eq \"probcons\")\n      {\n  `probcons s\
1253 eq.pep >result.aln 2>/dev/null`;\n      }\n    els\
1254 if ( $method eq \"mafft\")\n      {\n   `mafft --qui\
1255 et --localpair --maxiterate 1000 seq.pep> result.a\
1256 ln  2>/dev/null`\n      }\n    elsif ( $method=~/p\
1257 rank/)\n      {\n       `$method -d=seq.pep -o=result.al\
1258 n -quiet 2>/dev/null`;\n        `mv result.aln.1.fas resu\
1259 lt.aln`;\n      }\n    else\n      {\n  `$method -i\
1260 nfile=seq.pep -outfile=result.aln`;\n      }\n    \
1261 \n    &set_temporary_dir (\"unset\",$mode, $method\
1262 ,\"result.aln\",$outfile);\n    myexit ($EXIT_SUCC\
1263 ESS);\n  }\n\nsub seq2thread_pair\n  {\n    my ($m\
1264 ode, $infile, $pdbfile1, $method, $param, $outfile\
1265 )=@_;\n    &set_temporary_dir (\"set\",$infile,\"s\
1266 eq.pep\",$pdbfile1,\"struc.pdb\");\n    if ($metho\
1267 d eq \"fugueali\")\n      {\n   #Env Variable that n\
1268 eed to be defined for Fugue\n   if (!$ENV{FUGUE_LIB_\
1269 LIST}){$ENV{FUGUE_LIB_LIST}=\"DUMMY\";}\n       if (!$EN\
1270 V{HOMSTRAD_PATH})  {$ENV{HOMSTRAD_PATH}=\"DUMMY\";\
1271 }\n     if (!$ENV{HOMS_PATH}){$ENV{HOMS_PATH}=\"DUMMY\\
1272 ";}\n   \n      `joy struc.pdb >x 2>x`;\n       &check_file(\"s\
1273 truc.tem\", \"Joy failed [FATAL:$PROGRAM/$method]\\
1274 ");\n   `melody -t struc.tem >x 2>x`;\n &check_file(\
1275 \"struc.tem\", \"Melody failed [FATAL:$PROGRAM/$me\
1276 thod]\");\n     `fugueali -seq seq.pep -prf struc.fug \
1277 -print > tmp_result.aln`;\n     \n      &check_file(\"tmp_r\
1278 esult.aln\", \"Fugue failed [FATAL:$PROGRAM/$metho\
1279 d]\");\n        &safe_system (\"t_coffee -other_pg seq_re\
1280 format -in tmp_result.aln -output fasta_aln >resul\
1281 t.aln\");\n      }\n    elsif ( $method eq \"t_cof\
1282 fee\")\n      {\n       &safe_system (\"t_coffee -in Pst\
1283 ruc.pdb Sseq.pep Mslow_pair -outfile result.aln -q\
1284 uiet\");\n      }\n    else\n      {\n  &safe_syste\
1285 m (\"$method -infile=seq.pep -pdbfile1=struc.pdb -\
1286 outfile=result.aln $param>x 2>x\");\n      }\n    \
1287 &set_temporary_dir (\"unset\",$mode,$method,\"resu\
1288 lt.aln\",$outfile);\n    myexit ($EXIT_SUCCESS);\n\
1289   }\nsub seq2pdbid_pair\n  {\n    my ($mode, $pdbf\
1290 ile1, $pdbfile2, $method, $param, $outfile)=@_;\n \
1291    my ($name);\n\n    \n    &set_temporary_dir (\"\
1292 set\");\n    $name=$pdbfile1.\" \".$pdbfile2;\n\n \
1293    if (    &cache_file(\"GET\",\"\",\"$name\",\"$m\
1294 ethod\",\"dali\",$outfile,\"EBI\"))\n      {return\
1295  $outfile;}\n    else\n      {\n        if ($method eq \"\
1296 daliweb\")\n      {\n       $pdbfile1=~/(....)(.)/;\n    \
1297    $id1=$1; $c1=$2;\n       \n      $pdbfile2=~/(....\
1298 )(.)/;\n            $id2=$1; $c2=$2;\n      \n      $comman\
1299 d=\"t_coffee -other_pg dalilite.pl --pdb1 $id1 --c\
1300 hainid1 $c1 --pdb2 $id2 --chainid2 $c2 --email=$EM\
1301 AIL  >dali_stderr 2>dali_stderr\";\n        $dali=`$c\
1302 ommand`;\n          \n      open (F, \"dali_stderr\");\n\
1303             while (<F>)\n             {\n               if ( /JobId: dalilit\
1304 e-(\\S+)/)\n            {\n               $jobid=$1;\n          }\n           }\n        \
1305    close (F);\n     unlink (\"dali_stderr\");\n   \
1306   \n        $output1=\"dalilite-$jobid.txt\";\n     i\
1307 f ( -e $output1)\n            {\n               unlink ($output1);\n\
1308                 &url2file (\"http://www.ebi.ac.uk/Tools/es/cgi-b\
1309 in/jobresults.cgi/dalilite/dalilite-$jobid/aln.htm\
1310 l\", \"output2\");\n            \n              if ( -e \"output2\")\n          \
1311   {\n               my ($seq1, $seq2);\n                    $seq1=$seq2=\\
1312 "\";\n              \n              open (F, \"output2\");\n                \
1313 while (<F>)\n                 {\n                       $l=$_;\n                        if ( $l=~/Qu\
1314 ery\\s+(\\S+)/)\n                         {\n                       $seq1.=$1;\n                          }\
1315 \n                      elsif ( $l=~/Sbjct\\s+(\\S+)/)\n                          {\n                     \
1316   $seq2.=$1;\n                    }\n                 }\n                   close (F);\\
1317 n                   unlink (\"output2\");\n                 if ($seq1 ne \\
1318 "\" && $seq2 ne \"\")\n               {\n                       $output3=\">$\
1319 A\\n$seq1\\n>$B\\n$seq2\\n\";\n                 $output3=~s/\\./\
1320 -/g;\n                  open (F, \">result.aln\");\n                    print F \"\
1321 $output3\";\n                   close (F);\n                  }\n                 }\n      \
1322    }\n    }\n      }\n    &cache_file(\"SET\",\"\",\
1323 \"$name\",\"$method\",\"dali\",\"result.aln\",\"EB\
1324 I\");\n    &set_temporary_dir (\"unset\",$mode, $m\
1325 ethod, \"result.aln\",$outfile);\n    myexit ($EXI\
1326 T_SUCCESS);\n  }\nsub seq2pdb_pair\n  {\n    my ($\
1327 mode, $pdbfile1, $pdbfile2, $method, $param, $outf\
1328 ile)=@_;\n    \n    &set_temporary_dir (\"set\",$p\
1329 dbfile1,\"pdb1.pdb\",$pdbfile2,\"pdb2.pdb\");\n   \
1330  if ($method eq \"t_coffee\")\n      {\n        &safe_sys\
1331 tem (\"t_coffee -in Ppdb1.pdb Ppdb2.pdb -quiet -ou\
1332 tfile=result.aln\");\n      }\n    elsif ( $method\
1333  eq \"DaliLite\")\n      {\n    if ( &safe_system (\"\
1334 DaliLite -pairwise pdb1.pdb pdb2.pdb >tmp1\")==$EX\
1335 IT_SUCCESS)\n     {\n        my ($seq1, $seq2);\n           \
1336  $seq1=$seq2=\"\";\n                \n       open (F, \"tmp1\\
1337 ");\n        while (<F>)\n             {\n               $l=$_;\n                i\
1338 f ( $l=~/Query\\s+(\\S+)/)\n               {\n               $seq1.=\
1339 $1;\n              }\n           elsif ( $l=~/Sbjct\\s+(\\S+)/)\n               \
1340    {\n               $seq2.=$1;\n                  }\n         }\n           \
1341 close (F);\n         unlink (\"tmp1\");\n            if ($s\
1342 eq1 ne \"\" && $seq2 ne \"\")\n        {\n               my $o\
1343 utput3=\">$A\\n$seq1\\n>$B\\n$seq2\\n\";\n               $outp\
1344 ut3=~s/\\./-/g;\n                open (F, \">result.aln\");\n           \
1345  print F \"$output3\";\n                 close (F);\n          }\n\
1346            }\n  else\n    {\n       print \"ERROR: DalLite fa\
1347 iled to align the considered structures[tc_generic\
1348 _method.pl]\\n\";\n       }    \n      }\n    elsif ( \
1349 $method eq \"TMalign\")\n      {\n      if ( &safe_syst\
1350 em (\"TMalign pdb1.pdb pdb2.pdb >tmp1\")==$EXIT_SU\
1351 CCESS)\n          {\n       `tail -4 tmp1 > tmp2`;\n        \n\
1352             open (F, \"tmp2\");\n           while (<F>)\n            \
1353  {\n            unshift(@l, $_);\n            }\n           close (F);\\
1354 n           open (F, \">result.aln\");\n            $l[3]=~s/[^\
1355 a-zA-Z0-9-]/\\-/g;\n        $l[1]=~s/[^a-zA-Z0-9-]/\\\
1356 -/g;\n      print F \">$A\\n$l[3]\\n>$B\\n$l[1]\\n\\
1357 ";\n        close (F);\n          }\n   else\n    {\n       print\
1358  \"ERROR: TMalign failed to align the considered s\
1359 tructures[tc_generic_method.pl]\\n\";\n     `rm re\
1360 sult.aln >/dev/null 2>/dev/null`;\n       }\n      }\n\
1361     elsif ( $method eq \"mustang\")\n      {\n  if \
1362 ( &safe_system (\"mustang -i pdb1.pdb pdb2.pdb -F \
1363 fasta >/dev/null 2>/dev/null\")==$EXIT_SUCCESS)\n       \
1364   {\n       `mv results.afasta result.aln`;\n     }\n   \
1365 else\n    {\n       print \"ERROR: mustang failed to \
1366 align the considered structures[tc_generic_method.\
1367 pl]\\n\";\n         `rm result.aln >/dev/null 2>/dev/n\
1368 ull`;\n   }\n      }\n    else\n      {\n       if ( &sa\
1369 fe_system (\"$method -pdbfile1=pdb1.pep -pdbfile2=\
1370 pdb2.pdb -outfile=result.aln $param>x 2>x\")==$EXI\
1371 T_SUCCESS)\n      {\n       `mv results.afasta result.a\
1372 ln`;\n    }\n   else\n    {\n       print \"ERROR: $meth\
1373 od failed to align the considered structures[tc_ge\
1374 neric_method.pl]\\n\";\n            `rm result.aln >/dev/\
1375 null 2>/dev/null`;\n      }\n      }\n    &set_tempor\
1376 ary_dir (\"unset\",$mode, $method, \"result.aln\",\
1377 $outfile);\n    myexit ($EXIT_SUCCESS);\n  }\n\nsu\
1378 b seq2profile_pair\n  {\n    my ($mode, $profile1,\
1379  $profile2, $method, $param, $outfile)=@_;\n    \n\
1380     \n    if ($method eq \"clustalw\")\n      {\n       \
1381 &set_temporary_dir (\"set\",$profile1,\"prf1.aln\"\
1382 ,$profile2,\"prf2.aln\");\n     `clustalw -profile1=pr\
1383 f1.aln -profile2=prf2.aln -outfile=result.aln`;\n       \
1384 &set_temporary_dir (\"unset\",$mode, $method, \"re\
1385 sult.aln\",$outfile);\n      }\n    elsif ( $metho\
1386 d eq \"hhalign\")\n      {\n    hhalign ( $profile1,$\
1387 profile2,$outfile,$param);\n      }\n    else\n   \
1388    {\n  \n      `$method -profile1=prf1.aln -profile2=pr\
1389 f2.aln -outfile=result.aln $param>x 2>x`;\n      }\
1390 \n   \n    myexit ($EXIT_SUCCESS);\n  }\n\nsub pg_\
1391 is_installed\n  {\n    my @ml=@_;\n    my ($r, $p,\
1392  $m);\n    my $supported=0;\n    \n    my $p=shift\
1393  (@ml);\n    if ($p=~/::/)\n      {\n   if (safe_sys\
1394 tem (\"perl -M$p -e 1\")==$EXIT_SUCCESS){return 1;\
1395 }\n     else {return 0;}\n      }\n    else\n      {\n\
1396         $r=`which $p 2>/dev/null`;\n    if ($r eq \"\"){$r=0\
1397 ;}\n    else {$r=1;}\n  \n      if ($r==0 && is_blast_packa\
1398 ge ($p)){return pg_is_installed (\"legacy_blast.pl\
1399 \");}\n else {return $r;}\n      }\n  }\n\nsub is_\
1400 blast_package\n  {\n    my $p=shift;\n    if ( $p=\
1401 ~/blastp/){return 1;}\n    elsif ($p=~/blastall/){\
1402 return 1;}\n    elsif ($p=~/blastn/){return 1;}\n \
1403    elsif ($p=~/blastx/){return 1;}\n    elsif ($p=\
1404 ~/formatdb/){return 1;}\n    else {return 0;}\n  }\
1405 \n    \nsub check_internet_connection\n  {\n    my\
1406  $internet;\n    my $tmp;\n    &check_configuratio\
1407 n ( \"wget\"); \n    \n    $tmp=&vtmpnam ();\n    \
1408 \n    if     (&pg_is_installed    (\"wget\")){`wge\
1409 t www.google.com -O$tmp >/dev/null 2>/dev/null`;}\\
1410 n    elsif  (&pg_is_installed    (\"curl\")){`curl\
1411  www.google.com -o$tmp >/dev/null 2>/dev/null`;}\n\
1412     \n    if ( !-e $tmp || -s $tmp < 10){$internet\
1413 =0;}\n    else {$internet=1;}\n    if (-e $tmp){un\
1414 link $tmp;}\n\n    return $internet;\n  }\nsub che\
1415 ck_pg_is_installed\n  {\n    my @ml=@_;\n    my $r\
1416 =&pg_is_installed (@ml);\n    if (!$r && $p=~/::/)\
1417 \n      {\n     print STDERR \"\\nYou Must Install the\
1418  perl package $p on your system.\\nRUN:\\n\\tsudo \
1419 perl -MCPAN -e 'install $pg'\\n\";\n      }\n    e\
1420 lsif (!$r)\n      {\n   myexit(flush_error(\"\\nProg\
1421 ram $p Supported but Not Installed on your system\\
1422 "));\n      }\n    else\n      {\n      return 1;\n    \
1423   }\n  }\nsub set_temporary_dir\n  {\n    my @list\
1424 =@_;\n    my $dir_mode, $a, $mode, $method;\n  \n \
1425    $dir_mode=shift (@list);\n\n    \n    if ( $dir\
1426 _mode eq \"set\")\n      {\n    $initial_dir=cwd();\n\
1427         if ( !$tmp_dir)\n         {\n       $rand=rand (100000);\\
1428 n           $tmp_dir=\"$TMPDIR/tmp4tcoffee_profile_pair_\
1429 dir_$$\\_P_$rand\";\n     }\n   if ( !-d $tmp_dir)\n     \
1430  {\n        push (@TMPDIR_LIST, $tmp_dir);\n        `mkd\
1431 ir $tmp_dir`;\n   }\n   \n      for ( $a=0; $a<=$#list; $\
1432 a+=2)\n       {\n               if (-e $list[$a]){ `cp $list[$a\
1433 ] $tmp_dir/$list[$a+1]`;}\n           }\n       chdir $tmp_d\
1434 ir;\n      }\n    elsif ( $dir_mode eq \"unset\")\\
1435 n      {\n      $mode=shift (@list);\n  $method=shift (@\
1436 list);\n        \n      if (!-e $list[0])\n       {\n      myexit(fl\
1437 ush_error(\"Program $method failed to produce $lis\
1438 t[1]\" ));\n        myexit ($EXIT_FAILURE);\n     }\n   e\
1439 lse\n     {\n       chdir $initial_dir;\n           # `t_cof\
1440 fee -other_pg seq_reformat -in $tmp_dir/$list[0] -\
1441 output fasta_aln -out $tmp_dir/result2.aln`;\n     \
1442  `cp $tmp_dir/$list[0] $tmp_dir/result2.aln`;\n   \
1443   if ( $list[1] eq \"stdout\")\n              {\n               open (\
1444 F, \"$tmp_dir/result2.aln\");\n         while (<F>){print\
1445  $_;}close(F);\n              }\n           else\n            {\n               `\
1446 mv $tmp_dir/result2.aln $list[1]`;\n          }\n          \
1447  shift (@list); shift (@list);\n            foreach $f (@\
1448 list)\n       {\n               if (-e (\"$tmp_dir/$f\")){`mv $\
1449 tmp_dir/$f .`;}\n             }\n         }\n      }\n  }\n\n\\
1450 n\n\nsub my_get_opt\n  {\n    my @list=@_;\n    my\
1451  $cl, $a, $argv, @argl;\n    \n    @argl=();\n    \
1452 $cl=shift @list;\n    for ( $a=0; $a<=$#list; $a+=\
1453 3)\n      {\n   $option=$list[$a];\n    $optional=$list\
1454 [$a+1];\n       $status=$list[$a+2];\n  $argv=\"\";\n   if \
1455 ($cl=~/$option(\\S+)/){$argv=$1;}\n     @argl=(@argl,$\
1456 argv);\n        \n      \n      #$optional:0=>optional\n        #$optional\
1457 :1=>must be set\n       #$status: 0=>no requirement\n   #$\
1458 status: 1=>must be an existing file\n   #$status: 2=\
1459 >must be an installed package\n \n\n    if ($optional\
1460 ==0){;}\n       elsif ( $optional==1 && $argv eq \"\")\n\
1461           {\n       myexit(flush_error( \"ERROR: Option $op\
1462 tion must be set\"));\n     myexit ($EXIT_FAILURE)\
1463 ;\n       }\n   if ($status==0){;}\n    elsif ($status ==1 \
1464 && $argv ne \"\" && !-e $argv)\n          {\n       myexit(\
1465 flush_error( \"File $argv must exist\"));\n         my\
1466 exit ($EXIT_FAILURE);\n   }\n   elsif ( $status==2 &\
1467 & $argv ne \"\" && &check_pg_is_installed ($argv)=\
1468 =0)\n     {\n       myexit(flush_error( \" $argv is no\
1469 t installed\"));\n          myexit ($EXIT_FAILURE);\n    \
1470  }\n      }\n\n    return @argl;\n    }\n\nsub che\
1471 ck_file \n  {\n    my ($file, $msg)=@_;\n\n    if \
1472 ( !-e $file)\n      {\n myexit(flush_error(\"$msg\\
1473 "));\n      }\n    }\nsub hhalign\n  {\n    my ($a\
1474 ln1, $aln2, $outfile, $param)=@_;\n    my $h1, $h2\
1475 ;\n    \n    $h{0}{index}=0;\n    $h{1}{index}=1;\\
1476 n    \n    $h{0}{aln}=$aln1;\n    $h{1}{aln}=$aln2\
1477 ;\n\n   \n\n    %{$h{0}}=aln2psi_profile (%{$h{0}}\
1478 );\n    %{$h{1}}=aln2psi_profile (%{$h{1}});\n\n  \
1479   $param=~s/#S/ /g;\n    $param=~s/#M/\\-/g;\n    \
1480 $param=~s/#E/\\=/g;\n    \n\n    \n    $command=\"\
1481 hhalign -i $h{0}{a3m} -t $h{1}{a3m} -tc $outfile.t\
1482 mp -rank 1 -mapt 0 $param\";\n    `$command`;\n   \
1483  \n  #  `hhalign -i $h{0}{a3m} -t $h{1}{a3m} -tc $\
1484 outfile.tmp -rank 1 -mapt 0 -gapf 0.8 -gapg 0.8`;\\
1485 n    \n\n    # To run global use the following\n  \
1486   \n    open (I, \"$outfile.tmp\");\n    open (O, \
1487 \">$outfile\");\n    $h{0}{cons}=s/\\./x/g;\n    $\
1488 h{1}{cons}=s/\\./x/g;\n\n    print O \"! TC_LIB_FO\
1489 RMAT_01\\n2\\n$h{0}{name} $h{0}{len} $h{0}{seq}\\n\
1490 $h{1}{name} $h{1}{len} $h{1}{seq}\\n#1 2\\n\";\n  \
1491   \n    while (<I>)\n      {\n  if (/(\\d+)\\s+(\\d\
1492 +)\\s+(\\d+)/)\n          {\n       print O \"\\t$h{0}{$1}\\
1493 \t$h{1}{$2}\\t$3\\n\";\n          }\n      }\n    print O\
1494  \"! SEQ_1_TO_N\\n\";\n\n    close (O);\n    close\
1495  (I);\n  }\n\nsub aln2psi_profile\n  {\n    my (%h\
1496 )=@_;\n    my ($aln,$i,$hv, $a, @c, $n);\n   \n   \
1497  $i=$h{index};\n    $aln=$h{aln};\n\n    `cp $aln \
1498 $$.hhh_aln`;\n    $command=\"t_coffee -other_pg se\
1499 q_reformat -in $aln -output hasch\";\n    $hv=`$co\
1500 mmand`;chomp ($hv);\n    \n    $h{a2m}=\"$tmp/$hv.\
1501 tmp4hhpred.a2m\";\n    $h{a3m}=\"$tmp/$hv.tmp4hhpr\
1502 ed.a3m\";\n    if ( -e $h{a3m}){;}\n    else\n    \
1503   {\n   `hhconsensus  -M 50 -i $h{aln} -oa2m $h{a2m}\
1504 `;\n    if (!-e $h{a2m})\n        {\n       print STDERR \"P\
1505 rogram tc_generic_method.pl FAILED to run:\\n\\thh\
1506 consensus  -M 50 -i $h{aln} -oa2m $h{a2m}\";\n     \
1507  myexit ($EXIT_FAILURE);\n        }\n   \n      `hhconsensus  \
1508 -M 50 -i $h{aln} -oa3m $h{a3m}`;\n      if (!-e $h{a3m}\
1509 )\n       {\n       print STDERR \"Program tc_generic_me\
1510 thod.pl FAILED to run:\\n\\thhconsensus  -M 50 -i \
1511 $h{aln} -oa3m $h{a3m}\";\n          myexit ($EXIT_FAILU\
1512 RE);\n    }\n       `buildali.pl $h{a3m} -n 1`;\n  \
1513     }\n    \n    \n    $h{a2m_seq}=`head -n 2 $h{a\
1514 2m} | grep -v \">\"`;chomp ($h{a2m_seq});\n    $h{\
1515 a3m_seq}=`head -n 2 $h{a3m} | grep -v \">\"`;chomp\
1516  ($h{a3m_seq});\n    $h{cons}=$h{a2m_seq};\n    $h\
1517 {seq}=`head -n 2 $h{aln} | grep -v \">\"`;chomp ($\
1518 h{seq});\n    \n    \n\n    @c=split (//, $h{cons}\
1519 );\n    $h{len}=$#c+1;\n    for ($n=0,$a=0, $b=0; \
1520 $a<$h{len};$a++)\n      {\n     if ( $c[$a]=~/[A-Z]/)\\
1521 n         {\n       $h{++$n}=++$b;\n\n    }\n   elsif ( $c[$a\
1522 ]=~/[a-z\\.]/)\n          {\n       ++$b;\n       }\n      }\n \
1523    \n    $name=`head -n 2 $h{aln} | grep \">\"`;\n\
1524     $name=~/\\>(\\S+)/;\n    $h{name}=$1;\n    \n \
1525    `cp $h{a2m} $i.a2m`;\n    `cp $h{a3m} $i.a3m`;\\
1526 n    `cp $h{aln} $i.hh_aln`;\n    \n    return %h;\
1527 \n  }\n\nsub read_fasta_seq \n  {\n    my $f=@_[0]\
1528 ;\n    my %hseq;\n    my (@seq, @com, @name);\n   \
1529  my ($a, $s,$nseq);\n\n    open (F, $f);\n    whil\
1530 e (<F>)\n      {\n      $s.=$_;\n      }\n    close (F)\
1531 ;\n\n    \n    @name=($s=~/>(\\S*).*\\n[^>]*/g);\n\
1532     \n    @seq =($s=~/>.*.*\\n([^>]*)/g);\n    @co\
1533 m =($s=~/>\\S*(.*)\\n([^>]*)/g);\n\n    \n    $nse\
1534 q=$#name+1;\n    \n    for ($a=0; $a<$nseq; $a++)\\
1535 n      {\n      my $s;\n        my $n=$name[$a];\n      $hseq{$n}{n\
1536 ame}=$n;\n      $seq[$a]=~s/[^A-Za-z]//g;\n     $hseq{$n}{o\
1537 rder}=$a;\n     $hseq{$n}{seq}=$seq[$a];\n      $hseq{$n}{c\
1538 om}=$com[$a];\n \n      }\n    return %hseq;\n  }\\
1539 n\nsub file_contains \n  {\n    my ($file, $tag, $\
1540 max)=(@_);\n    my ($n);\n    $n=0;\n    \n    if \
1541 ( !-e $file && ($file =~/$tag/)) {return 1;}\n    \
1542 elsif ( !-e $file){return 0;}\n    else \n      {\\
1543 n       open (FC, \"$file\");\n while ( <FC>)\n   {\n     \
1544   if ( ($_=~/$tag/))\n        {\n               close (FC);\n           r\
1545 eturn 1;\n            }\n           elsif ($max && $n>$max)\n\
1546               {\n               close (FC);\n           return 0;\n           }\n        \
1547    $n++;\n        }\n      }\n    close (FC);\n    retu\
1548 rn 0;\n  }\n        \n    \nsub file2string\n  {\n    \
1549 my $f=@_[0];\n    my $string, $l;\n    open (F,\"$\
1550 f\");\n    while (<F>)\n      {\n\n     $l=$_;\n        #chom\
1551 p ($l);\n       $string.=$l;\n      }\n    close (F);\n \
1552    $string=~s/\\r\\n//g;\n    $string=~s/\\n//g;\n\
1553     return $string;\n  }\n\n\nsub my_get_opt\n  {\\
1554 n    my @list=@_;\n    my $cl, $a, $argv, @argl;\n\
1555     \n    @argl=();\n    $cl=shift @list;\n    for\
1556  ( $a=0; $a<=$#list; $a+=3)\n      {\n  $option=$li\
1557 st[$a];\n       $optional=$list[$a+1];\n        $status=$list[$\
1558 a+2];\n $argv=\"\";\n   if ($cl=~/$option(\\S+)/){$a\
1559 rgv=$1;}\n      @argl=(@argl,$argv);\n  \n      \n      #$optional\
1560 :0=>optional\n  #$optional:1=>must be set\n     #$statu\
1561 s: 0=>no requirement\n  #$status: 1=>must be an exi\
1562 sting file\n    #$status: 2=>must be an installed pac\
1563 kage\n  \n\n    if ($optional==0){;}\n  elsif ( $option\
1564 al==1 && $argv eq \"\")\n         {\n\n     myexit(flush\
1565 _error(\"Option $option must be set\"));\n         \n    \
1566  }\n    if ($status==0){;}\n    elsif ($status ==1 && $a\
1567 rgv ne \"\" && !-e $argv)\n       {\n        myexit(flus\
1568 h_error(\"File $argv must exist\"));\n     \n     }\n\
1569         elsif ( $status==2 && $argv ne \"\" && &check_pg_\
1570 is_installed ($argv)==0)\n        {\n       myexit(flush_\
1571 error(\"$argv is not installed\"));\n      \n     }\n \
1572      }\n\n    return @argl;\n    }\n\nsub tag2valu\
1573 e \n  {\n    \n    my $tag=(@_[0]);\n    my $word=\
1574 (@_[1]);\n    my $return;\n    \n    $tag=~/$word=\
1575 \"([^\"]+)\"/;\n    $return=$1;\n    return $retur\
1576 n;\n  }\n      \nsub hit_tag2pdbid\n  {\n    my $t\
1577 ag=(@_[0]);\n    my $pdbid;\n       \n    $tag=~/i\
1578 d=\"(\\S+)\"/;\n    $pdbid=$1;\n    $pdbid=~s/_//;\
1579 \n    return $pdbid;\n  }\nsub id2pdbid\n  {\n    \
1580 my $in=@_[0];\n    my $id;\n    \n    $in=~/(\\S+)\
1581 /;\n    $id=$in;\n    $id=~s/PDB/pdb/g;\n    \n   \
1582  if ($id =~/pdb(.*)/){$id=$1;}\n    elsif ( $id=~/\
1583 (\\S+)\\s+mol:protein/){$id=$1;}\n    $id=~s/[:|ï¿\
1584 ½ï¿½_]//g;\n    return $id;\n  }\nsub set_blast_ty\
1585 pe \n  {\n    my $file =@_[0];\n    if (&file_cont\
1586 ains ($file,\"EBIApplicationResult\",100)){$BLAST_\
1587 TYPE=\"EBI\";}\n    elsif (&file_contains ($file,\\
1588 "NCBI_BlastOutput\",100)) {$BLAST_TYPE=\"NCBI\";}\\
1589 n    else\n      {\n    $BLAST_TYPE=\"\";\n      }\n \
1590    return $BLAST_TYPE;\n  }\nsub is_valid_blast_xm\
1591 l\n    {\n      my $file=shift;\n      my $line;\n\
1592       \n      \n      if ( !-e $file) {return 0;}\\
1593 n      $line=&file2tail ($file,100);\n      if ( $\
1594 line=~/<\\/EBIApplicationResult/ || $line=~/<\\/NC\
1595 BI_BlastOutput/ || $line=~/<\\/BlastOutput/ ){retu\
1596 rn 1;}\n      return 0;\n    }\nsub file2blast_fla\
1597 vor\n      {\n  my $file=shift;\n       if (&file_contain\
1598 s ($file,\"EBIApplicationResult\",100)){return \"E\
1599 BI\";}\n        elsif (&file_contains ($file,\"NCBI_Blast\
1600 Output\",100)){return \"NCBI\";}\n      else {return \"\
1601 UNKNOWN\";}\n      }\nsub blast_xml2profile \n  {\\
1602 n    my ($name,$seq,$maxid, $minid, $mincov, $file\
1603 )=(@_);\n    my (%p, $a, $string, $n);\n    \n    \
1604 \n\n    if ($BLAST_TYPE eq \"EBI\" || &file_contai\
1605 ns ($file,\"EBIApplicationResult\",100)){%p=ebi_bl\
1606 ast_xml2profile(@_);}\n    elsif ($BLAST_TYPE eq \\
1607 "NCBI\" || &file_contains ($file,\"NCBI_BlastOutpu\
1608 t\",100)){%p=ncbi_blast_xml2profile(@_);}\n    els\
1609 e \n      {\n   myexit(add_error ( $$,$$,getppid(), \
1610 \"BLAST_FAILURE::unkown XML\",$CL));\n      }\n   \
1611  for ($a=0; $a<$p{n}; $a++)\n      {\n  my $name=$p\
1612 {$a}{name};\n   $p{$name}{seq}=$p{$a}{seq};\n   $p{$na\
1613 me}{index}=$a;\n      }\n    return %p;\n  }\nsub \
1614 ncbi_tblastx_xml2lib_file \n  {\n    my  ($outlib,\
1615 $string)=(@_);\n    my ($L,$l, $a,$b,$c,$d,$i,$nhi\
1616 ts,@identifyerL);\n    my (%ITERATION);\n      \n \
1617    open (F, \">>$outlib\");\n    \n    $seq=~s/[^a\
1618 -zA-Z]//g;\n    $L=length ($seq);\n    \n    %ITER\
1619 ATION=xml2tag_list ($string, \"Iteration\");\n    \
1620 for ($i=0; $i<$ITERATION{n};$i++)\n      {\n    my ($\
1621 qindex, $qlen, %hit, $string);\n        $string=$ITERATIO\
1622 N{$i}{body};\n\n        $qindex=xmltag2value($string,\"It\
1623 eration_iter-num\");\n  $qlen  =xmltag2value($strin\
1624 g,\"Iteration_query-len\");\n   %hit=&xml2tag_list  \
1625 ($string, \"Hit\");\n\n for ($a=0; $a<$hit{n}; $a+\
1626 +)\n      {\n       my ($string);\n         $string=$hit{$a\
1627 }{body};\n       \n         $hindex=xmltag2value($string,\"\
1628 Hit_accession\")+1;\n       if ($hindex<=$qindex){ne\
1629 xt;}\n      else  {print F  \"# $qindex $hindex\\n\\
1630 ";}\n              \n      \n       $hlen=xmltag2value  ($strin\
1631 g,\"Hit_len\");\n           %HSP=&xml2tag_list  ($string\
1632 , \"Hsp\");\n      \n       for ($b=0; $b<$HSP{n}; $b+\
1633 +)\n          {\n               my ($string, $qs,$qe,$qf,$hs,$he,$\
1634 hf,$s, $d, $e);\n               $string=$HSP{$b}{body};\n       \n              $\
1635 qs=xmltag2value  ($string,\"Hsp_query-from\");\n                \
1636 $qe=xmltag2value  ($string,\"Hsp_query-to\");\n         $\
1637 qf=xmltag2value  ($string,\"Hsp_query-frame\");\n\\
1638 n               $hs=xmltag2value  ($string,\"Hsp_hit-from\");\n\
1639                 $he=xmltag2value  ($string,\"Hsp_hit-to\");\n           $\
1640 hf=xmltag2value  ($string,\"Hsp_hit-frame\");\n         \\
1641 n               $s=xmltag2value  ($string,\"Hsp_identity\");\n  \
1642         $l=xmltag2value  ($string,\"Hsp_align-len\");\n         \
1643 $s=int(($s*100)/$l);\n          \n              if ($qf>0)\n              {$rqs=\
1644 $qs; $rqe=$qe;}\n               else\n            {\n               $rqe=($qlen-\
1645 $qs)+1;\n                   $rqs=($qlen-$qe)+1;\n                 }\n           \n              i\
1646 f ($hf>0)\n               {$rhs=$hs; $rhe=$he;}\n               else\n            \
1647 {\n                 $rhe=($hlen-$hs)+1;\n                   $rhs=($hlen-$h\
1648 e)+1;\n           }\n           for ($d=0,$e=$rqs; $e<$rqe; $e++,$\
1649 d++)\n            {\n               my ($r1,$r2);\n                 $r1=$e;\n   \
1650             $r2=$rhs+$d;\n                  print F \" $r1 $r2 $s 0\\\
1651 n\";\n            }\n         }\n         }\n      }\n    print F \
1652 \"! SEQ_1_TO_N\\n\";\n    \n    close (F);\n    re\
1653 turn %lib;\n  }\n\nsub ncbi_tblastpx_xml2lib_file \
1654 \n  {\n    my  ($outlib,$string,%s)=(@_);\n    my \
1655 ($L,$l, $a,$b,$c,$d,$i,$nhits,@identifyerL);\n    \
1656 my (%ITERATION,%hdes, %qdes);\n      \n    open (F\
1657 , \">>$outlib\");\n    \n    $seq=~s/[^a-zA-Z]//g;\
1658 \n    $L=length ($seq);\n    \n    %ITERATION=xml2\
1659 tag_list ($string, \"Iteration\");\n    for ($i=0;\
1660  $i<$ITERATION{n};$i++)\n      {\n      my ($qindex, $q\
1661 len, %hit, $string);\n  $string=$ITERATION{$i}{body\
1662 };\n\n  $qdef=xmltag2value($string,\"Iteration_quer\
1663 y-def\");\n     %qdes=&tblastpx_name2description($qdef\
1664 ,%s);\n $qlen  =xmltag2value($string,\"Iteration_q\
1665 uery-len\");\n  %hit=&xml2tag_list  ($string, \"Hit\
1666 \");\n\n        for ($a=0; $a<$hit{n}; $a++)\n    {\n       \
1667 my ($string);\n     $string=$hit{$a}{body};\n       \
1668 $hdef=xmltag2value($string,\"Hit_def\");\n          %hd\
1669 es=&tblastpx_name2description($hdef,%s);\n          if \
1670 ($hdes{index}<=$qdes{index}){next;}\n       else  {p\
1671 rint F  \"# $qdes{index} $hdes{index}\\n\";}\n            \
1672  \n        \n       $hlen=xmltag2value  ($string,\"Hit_l\
1673 en\");\n            %HSP=&xml2tag_list  ($string, \"Hsp\"\
1674 );\n       \n       for ($b=0; $b<$HSP{n}; $b++)\n          \
1675   {\n           my ($string, $l,$qs,$qe,$qf,$hs,$he,$hf,$s,\
1676  $d, $e, @s1, @s2);\n           $string=$HSP{$b}{body};\n       \\
1677 n               $qs=xmltag2value  ($string,\"Hsp_query-from\");\
1678 \n              $qe=xmltag2value  ($string,\"Hsp_query-to\");\\
1679 n               $qf=$qdes{frame};\n             $qseq=xmltag2value  ($stri\
1680 ng,\"Hsp_qseq\");\n             \n              $hs=xmltag2value  ($strin\
1681 g,\"Hsp_hit-from\");\n          $he=xmltag2value  ($string\
1682 ,\"Hsp_hit-to\");\n             $hf=$hdes{frame};\n             $hseq=xm\
1683 ltag2value  ($string,\"Hsp_hseq\");\n           \n              $s=xmlt\
1684 ag2value  ($string,\"Hsp_identity\");\n         $l=xmltag\
1685 2value  ($string,\"Hsp_align-len\");\n          $s=int(($s\
1686 *100)/$l);\n            @s1=tblastpx_hsp2coordinates($qseq,$\
1687 qs,$qe,%qdes);\n                @s2=tblastpx_hsp2coordinates($hs\
1688 eq,$hs,$he,%hdes);\n            \n              \n              for ($f=0; $f<=$#s1;\
1689  $f++)\n                  {\n               if ($s1[$f]==-1 || $s2[$f]==-\
1690 1){next;}\n                 else \n                   {\n                       print F \" $\
1691 s1[$f] $s2[$f] $s 0\\n\";\n                   }\n                 }\n       \
1692   }\n     }\n      }\n    print F \"! SEQ_1_TO_N\\n\\
1693 ";\n    \n    close (F);\n    return %lib;\n  }\ns\
1694 ub tblastpx_hsp2coordinates\n  {\n    my ($seq, $s\
1695 , $e, %des)=@_;\n    my @list;\n    my @sa;\n    m\
1696 y @gap=(-1,-1,-1);\n    \n    $s=$des{start}+3*($s\
1697 -1);\n  \n    if ($des{strand} eq \"d\"){;}\n    e\
1698 lse {$s=($des{length}-$s)+1;}\n    \n    foreach $\
1699 c (split (//,$seq))\n      {\n  if ( $c eq '-'){pus\
1700 h (@list,@gap);}\n      elsif ($des{strand} eq \"d\")\n\
1701           {\n       push(@list,$s++,$s++,$s++);\n         }\n   els\
1702 e\n       {\n       push(@list, $s--,$s--,$s--);\n        }\n\
1703       }\n    return @list;\n  }\n\nsub tblastpx_na\
1704 me2description\n  {\n    my ($name, %s)=@_;\n    m\
1705 y @at=split(\"__\", $name);\n    my %des;\n\n    $\
1706 des{name}=$at[0];\n    $des{strand}=$at[1];\n    \\
1707 n    $des{start}=$at[2];\n    $des{end}=$at[3];\n \
1708    $des{length}=$at[4];\n    $des{index}=$s{$at[0]\
1709 }{order}+1;\n    return %des;\n  }  \nsub ncbi_bla\
1710 st_xml2profile \n  {\n    my ($name,$seq,$maxid, $\
1711 minid, $mincov, $string)=(@_);\n    my ($L,$l, $a,\
1712 $b,$c,$d,$nhits,@identifyerL);\n    \n    \n    $s\
1713 eq=~s/[^a-zA-Z]//g;\n    $L=length ($seq);\n   \n \
1714    #This is causing the NCBI parser to fail when I\
1715 teration_query-def is missing \n    #%query=&xml2t\
1716 ag_list ($string, \"Iteration_query-def\");\n    #\
1717 $name=$query{0}{body};\n    \n    %hit=&xml2tag_li\
1718 st ($string, \"Hit\");\n    \n    \n    for ($nhit\
1719 s=0,$a=0; $a<$hit{n}; $a++)\n      {\n  my ($ldb,$i\
1720 d, $identity, $expectation, $start, $end, $coverag\
1721 e, $r);\n       my (%ID,%DE,%HSP);\n    \n      $ldb=\"\";\n\n  %\
1722 ID=&xml2tag_list ($hit{$a}{body}, \"Hit_id\");\n        $\
1723 identifyer=$ID{0}{body};\n      \n      %DE=&xml2tag_list ($\
1724 hit{$a}{body}, \"Hit_def\");\n  $definition=$DE{0}{\
1725 body};\n        \n      %HSP=&xml2tag_list ($hit{$a}{body}, \"\
1726 Hsp\");\n       for ($b=0; $b<$HSP{n}; $b++)\n    {\n      \
1727  my (%START,%END,%E,%I,%Q,%M);\n\n       \n         %START=\
1728 &xml2tag_list ($HSP{$b}{body}, \"Hsp_query-from\")\
1729 ;\n         %HSTART=&xml2tag_list ($HSP{$b}{body}, \"H\
1730 sp_hit-from\");\n           \n      %LEN=  &xml2tag_list \
1731 ($HSP{$b}{body}, \"Hsp_align-len\");\n      %END=  \
1732 &xml2tag_list ($HSP{$b}{body}, \"Hsp_query-to\");\\
1733 n           %HEND=  &xml2tag_list ($HSP{$b}{body}, \"Hsp\
1734 _hit-to\");\n       %E=&xml2tag_list     ($HSP{$b}{b\
1735 ody}, \"Hsp_evalue\");\n            %I=&xml2tag_list     \
1736 ($HSP{$b}{body}, \"Hsp_identity\");\n       %Q=&xml2\
1737 tag_list     ($HSP{$b}{body}, \"Hsp_qseq\");\n     \
1738  %M=&xml2tag_list     ($HSP{$b}{body}, \"Hsp_hseq\\
1739 ");\n       \n      for ($e=0; $e<$Q{n}; $e++)\n\n        \
1740     {\n         $qs=$Q{$e}{body};\n             $ms=$M{$e}{body};\n     \
1741         \n              $expectation=$E{$e}{body};\n            $identity=($LEN\
1742 {$e}{body}==0)?0:$I{$e}{body}/$LEN{$e}{body}*100;\\
1743 n               $start=$START{$e}{body};\n              $end=$END{$e}{body}\
1744 ;\n             $Hstart=$HSTART{$e}{body};\n            $Hend=$HEND{$e}\
1745 {body};\n       \n              $coverage=($L)?(($end-$start)*100)/$\
1746 L:0;\n  \n              if ($identity>$maxid || $identity<$mini\
1747 d || $coverage<$mincov){next;}\n                @lr1=(split (//,\
1748 $qs));\n                @lr2=(split (//,$ms));\n                $l=$#lr1+1;\n   \
1749         for ($c=0;$c<$L;$c++){$p[$nhits][$c]=\"-\";}\n          f\
1750 or ($d=0,$c=0; $c<$l; $c++)\n             {\n               $r=$lr1[\
1751 $c];\n              if ( $r=~/[A-Za-z]/)\n                    {\n                       \n\
1752                         $p[$nhits][$d + $start-1]=$lr2[$c];\n                   $d++;\n\
1753                       }\n                 }\n           $Qseq[$nhits]=$qs;\n            $Hseq[$n\
1754 hits]=$ms;\n            $QstartL[$nhits]=$start;\n              $HstartL\
1755 [$nhits]=$Hstart;\n             $identityL[$nhits]=$identity;\
1756 \n              $endL[$nhits]=$end;\n           $definitionL[$nhits]=$d\
1757 efinition;\n            $identifyerL[$nhits]=$identifyer;\n     \
1758         $comment[$nhits]=\"$ldb|$identifyer [Eval=$expect\
1759 ation][id=$identity%][start=$Hstart end=$Hend]\";\\
1760 n               $nhits++;\n           }\n         }\n      }\n    \n    \\
1761 n    $profile{n}=0;\n    $profile{$profile{n}}{nam\
1762 e}=$name;\n    $profile{$profile{n}}{seq}=$seq;\n \
1763    $profile {n}++;\n    \n    for ($a=0; $a<$nhits\
1764 ; $a++)\n      {\n      $n=$a+1;\n      \n      $profile{$n}{name\
1765 }=\"$name\\_$a\";\n     $profile{$n}{seq}=\"\";\n       $pro\
1766 file{$n}{Qseq}=$Qseq[$a];\n     $profile{$n}{Hseq}=$Hs\
1767 eq[$a];\n       $profile{$n}{Qstart}=$QstartL[$a];\n    $pr\
1768 ofile{$n}{Hstart}=$HstartL[$a];\n       $profile{$n}{ide\
1769 ntity}=$identityL[$a];\n        $profile{$n}{definition}=\
1770 $definitionL[$a];\n     $profile{$n}{identifyer}=$iden\
1771 tifyerL[$a];\n  $profile{$n}{comment}=$comment[$a];\
1772 \n\n    for ($b=0; $b<$L; $b++)\n         {\n       if ($p[$a\
1773 ][$b])\n              {\n               $profile{$n}{seq}.=$p[$a][$b];\
1774 \n            }\n           else\n            {\n               $profile{$n}{se\
1775 q}.=\"-\";\n          }\n         }\n      }\n    \n    $pr\
1776 ofile{n}=$nhits+1;\n    return %profile;\n  }\nsub\
1777  ebi_blast_xml2profile \n  {\n    my ($name,$seq,$\
1778 maxid, $minid, $mincov, $string)=(@_);\n    my ($L\
1779 ,$l, $a,$b,$c,$d,$nhits,@identifyerL,$identifyer);\
1780 \n    \n\n    \n    $seq=~s/[^a-zA-Z]//g;\n    $L=\
1781 length ($seq);\n    %hit=&xml2tag_list ($string, \\
1782 "hit\");\n    \n    for ($nhits=0,$a=0; $a<$hit{n}\
1783 ; $a++)\n      {\n      my ($ldb,$id, $identity, $expec\
1784 tation, $start, $end, $coverage, $r);\n my (%Q,%M,\
1785 %E,%I);\n       \n      $ldb=&tag2value ($hit{$a}{open}, \"da\
1786 tabase\");\n    $identifyer=&tag2value ($hit{$a}{open\
1787 }, \"id\");\n\n $description=&tag2value ($hit{$a}{\
1788 open}, \"description\");\n      \n      %Q=&xml2tag_list ($h\
1789 it{$a}{body}, \"querySeq\");\n  %M=&xml2tag_list ($\
1790 hit{$a}{body}, \"matchSeq\");\n %E=&xml2tag_list (\
1791 $hit{$a}{body}, \"expectation\");\n     %I=&xml2tag_li\
1792 st ($hit{$a}{body}, \"identity\");\n    \n\n    for ($b=\
1793 0; $b<$Q{n}; $b++)\n      {\n\n     $qs=$Q{$b}{body};\
1794 \n          $ms=$M{$b}{body};\n     \n      $expectation\
1795 =$E{$b}{body};\n            $identity=$I{$b}{body};\n      \
1796  \n                 \n      $start=&tag2value ($Q{$b}{open\
1797 }, \"start\");\n            $end=&tag2value ($Q{$b}{open}\
1798 , \"end\");\n       $startM=&tag2value ($M{$b}{open}\
1799 , \"start\");\n     $endM=&tag2value ($M{$b}{open}\
1800 , \"end\");\n       $coverage=(($end-$start)*100)/$L\
1801 ;\n         \n     # print \"$id: ID: $identity COV: $c\
1802 overage [$start $end]\\n\";\n       \n      if ($iden\
1803 tity>$maxid || $identity<$minid || $coverage<$minc\
1804 ov){next;}\n        # print \"KEEP\\n\";\n\n        \n   \
1805    @lr1=(split (//,$qs));\n         @lr2=(split (//,$m\
1806 s));\n      $l=$#lr1+1;\n           for ($c=0;$c<$L;$c++)\
1807 {$p[$nhits][$c]=\"-\";}\n           for ($d=0,$c=0; $c<$\
1808 l; $c++)\n            {\n               $r=$lr1[$c];\n          if ( $r=~/[A\
1809 -Za-z]/)\n                {\n               \n              $p[$nhits][$d + $st\
1810 art-1]=$lr2[$c];\n                  $d++;\n               }\n         }\n        \
1811  \n         $Qseq[$nhits]=$qs;\n            $Hseq[$nhits]=$ms\
1812 ;\n         $QstartL[$nhits]=$start;\n      $HstartL[$n\
1813 hits]=$Hstart;\n            $identityL[$nhits]=$identity;\
1814 \n          $endL[$nhits]=$end;\n           $definitionL[$nhi\
1815 ts]=$definition;\n          $identifyerL[$nhits]=$ident\
1816 ifyer;\n            $comment[$nhits]=\"$ldb|$identifyer [\
1817 Eval=$expectation][id=$identity%][start=$startM en\
1818 d=$endM]\";\n       $nhits++;\n   }\n      }\n    \n\
1819     $profile{n}=0;\n    $profile{$profile{n}}{name\
1820 }=$name;\n    $profile{$profile{n}}{seq}=$seq;\n  \
1821   $profile {n}++;\n    \n    for ($a=0; $a<$nhits;\
1822  $a++)\n      {\n       $n=$a+1;\n      $profile{$n}{name}=\"\
1823 $name\\_$a\";\n $profile{$n}{seq}=\"\";\n       $profile\
1824 {$n}{Qseq}=$Qseq[$a];\n $profile{$n}{Hseq}=$Hseq[$\
1825 a];\n   $profile{$n}{Qstart}=$QstartL[$a];\n    $profil\
1826 e{$n}{Hstart}=$HstartL[$a];\n   $profile{$n}{identit\
1827 y}=$identityL[$a];\n    $profile{$n}{definition}=$def\
1828 initionL[$a];   \n      $profile{$n}{identifyer}=$identif\
1829 yerL[$a];\n     $profile{$n}{comment}=$comment[$a];\n\\
1830 n       for ($b=0; $b<$L; $b++)\n         {\n       if ($p[$a][$\
1831 b])\n         {\n               $profile{$n}{seq}.=$p[$a][$b];\n        \
1832       }\n           else\n            {\n               $profile{$n}{seq}.\
1833 =\"-\";\n             }\n         }\n      }\n    $profile{n}=\
1834 $nhits+1;\n    \n    return %profile;\n  }\nsub ou\
1835 tput_profile\n  {\n    my ($outfile,$profileR, $tr\
1836 im)=(@_);\n    my ($a);\n    my %profile=%$profile\
1837 R;\n    my $P= new FileHandle;\n    my $tmp=vtmpna\
1838 m();\n    \n    open ($P, \">$tmp\");\n    for ($a\
1839 =0; $a<$profile{n}; $a++)\n      {\n    print $P \">$\
1840 profile{$a}{name} $profile{$a}{comment}\\n$profile\
1841 {$a}{seq}\\n\";\n      }\n    close ($P);\n\n    i\
1842 f ( $trim)\n      {\n   &safe_system (\"t_coffee -ot\
1843 her_pg seq_reformat -in $tmp -action +trim _aln_%%\
1844 $trim\\_K1 -output fasta_aln -out $outfile\");\n  \
1845     }\n    else\n      {\n      &safe_system (\"mv $tmp\
1846  $outfile\");\n      }\n    return;\n  }\nsub blas\
1847 t_xml2hit_list\n  {\n    my $string=(@_[0]);\n    \
1848 return &xml2tag_list ($string, \"hit\");\n  }\nsub\
1849  xmltag2value\n  {\n    my ($string_in, $tag)=@_;\\
1850 n    my %TAG;\n    %TAG=xml2tag_list ($string_in, \
1851 $tag);\n    return $TAG{0}{body};\n  }\n      \nsu\
1852 b xml2tag_list  \n  {\n    my ($string_in,$tag)=@_\
1853 ;\n    my $tag_in, $tag_out;\n    my %tag;\n    \n\
1854     if (-e $string_in)\n      {\n       $string=&file2st\
1855 ring ($string_in);\n      }\n    else\n      {\n        $\
1856 string=$string_in;\n      }\n    $tag_in1=\"<$tag \
1857 \";\n    $tag_in2=\"<$tag>\";\n    $tag_out=\"/$ta\
1858 g>\";\n    $string=~s/>/>##1/g;\n    $string=~s/</\
1859 ##2</g;\n    $string=~s/##1/<#/g;\n    $string=~s/\
1860 ##2/#>/g;\n    @l=($string=~/(\\<[^>]+\\>)/g);\n  \
1861   $tag{n}=0;\n    $in=0;$n=-1;\n  \n \n\n    forea\
1862 ch $t (@l)\n      {\n\n $t=~s/<#//;\n   $t=~s/#>//;\\
1863 n       \n      if ( $t=~/$tag_in1/ || $t=~/$tag_in2/)\n          {\\
1864 n        \n         $in=1;\n        $tag{$tag{n}}{open}=$t;\n    \
1865    $n++;\n          \n    }\n   elsif ($t=~/$tag_out/)\n         \
1866  {\n        \n\n            $tag{$tag{n}}{close}=$t;\n      $\
1867 tag{n}++;\n         $in=0;\n      }\n   elsif ($in)\n     {\n\
1868            \n       $tag{$tag{n}}{body}.=$t;\n    }\n      }\
1869 \n  \n    return %tag;\n  }\n\n\nsub seq2gor_predi\
1870 ction \n  {\n    my ($name, $seq,$infile, $outfile\
1871 , $gor_seq, $gor_obs)=(@_);\n    my ($l);\n    \n \
1872    `gorIV -prd $infile -seq $gor_seq -obs $gor_obs\
1873  > gor_tmp`;\n    open (GR, \">$outfile\");\n    o\
1874 pen (OG, \"gor_tmp\");\n\n    while (<OG>)\n      \
1875 {\n     \n      $l=$_;\n        if ($l=~/\\>/){print GR \"$l\";}\n\
1876         elsif ( $l=~/Predicted Sec. Struct./)\n   {\n      \
1877  $l=~s/Predicted Sec. Struct\\.//;\n        print GR \
1878 \"$l\";\n         }\n      }\n    close (GR);\n    close\
1879  (OG);\n    return;\n  }\nsub seq2msa_tm_predictio\
1880 n \n  {\n    my ($name, $seq, $db, $infile, $outfi\
1881 le, $arch, $psv)=(@_);\n    my (%p,%gseq,%R, $blas\
1882 t_output, %s, $l);\n    my $R2=new FileHandle;\n  \
1883   my $db=\"uniprot\";\n    my $method=\"psitm\";\n\
1884     my $SERVER=\"EBI\";\n    \n    $blast_output=&\
1885 run_blast ($name,\"blastp\", $db, $infile, \"outfi\
1886 le\");\n    \n    if (&cache_file(\"GET\",$infile,\
1887 $name,$method,$db,$outfile,$SERVER))\n      {\n pr\
1888 int \"\\tPSITM: USE Cache\\n\";\n       return $outfile;\
1889 \n      }\n    else\n      {\n  $CACHE_STATUS=\"COM\
1890 PUTE CACHE\";\n %p=blast_xml2profile($name,$seq,$m\
1891 axid, $minid,$mincov,$blast_output);\n  \n      \n      open \
1892 (F, \">tm_input\");\n   for (my $a=0; $a<$p{n}; $a++\
1893 )\n       {\n       my $s;\n        \n      $s=$p{$a}{seq};\\
1894 n           $s=uc($s);\n            print F \">$p{$a}{name}\\n$\
1895 s\\n\";\n           #print stdout \">$p{$a}{name}\\n$s\\\
1896 n\";\n    }\n   close (F);\n    print \"\\tPSITM: kept  \
1897 $p{n} Homologues for Sequence $p{0}{name}\\n\";\n       \
1898 &safe_system (\"t_coffee -other_pg fasta_seq2hmmto\
1899 p_fasta.pl -in=tm_input -out=$outfile -output=cons\
1900  -cov=70 -trim=95 -arch=$arch -psv=$psv\");\n   unli\
1901 nk (\"tm_input\");\n    &cache_file(\"SET\",$infile,$\
1902 name,$method,$db,$outfile,$SERVER);\n   return;\n   \
1903    }\n  }\n\n\nsub seq2msa_gor_prediction \n  {\n \
1904    my ($name, $seq,$infile, $outfile, $gor_seq, $g\
1905 or_obs)=(@_);\n    my (%p,%gseq,%R, $blast_output,\
1906  %s, $l);\n    my $R2=new FileHandle;\n    my $db=\
1907 \"uniprot\";\n    my $method=\"psigor\";\n    my $\
1908 SERVER=\"EBI\";\n    \n    $blast_output=&run_blas\
1909 t ($name,\"blastp\", \"uniprot\", $infile, \"outfi\
1910 le\");\n    \n    if (&cache_file(\"GET\",$infile,\
1911 $name,$method,$db,$outfile,$SERVER))\n      {\n pr\
1912 int \"\\tPSIGOR: USE Cache\\n\";\n      return $outfile\
1913 ;\n      }\n    else\n      {\n $CACHE_STATUS=\"CO\
1914 MPUTE CACHE\";\n        %p=blast_xml2profile($name,$seq,$\
1915 maxid, $minid,$mincov,$blast_output);\n \n      \n      open\
1916  (F, \">gor_input\");\n for (my $a=0; $a<$p{n}; $a\
1917 ++)\n     {\n       my $s;\n        \n      $s=$p{$a}{seq}\
1918 ;\n         $s=uc($s);\n            print F \">$p{$a}{name}\\\
1919 n$s\\n\";\n         #print stdout \">$p{$a}{name}\\n$s\
1920 \\n\";\n          }\n   close (F);\n    print \"\\tGORTM: kept\
1921   $p{n} Homologues for Sequence $p{0}{name}\\n\";\\
1922 n       &safe_system (\"t_coffee -other_pg fasta_seq2hmm\
1923 top_fasta.pl -in=gor_input -out=$outfile -output=c\
1924 ons -cov=70 -trim=95 -gor_seq=$gor_seq -gor_obs=$g\
1925 or_obs -mode=gor\");\n  unlink (\"tm_input\");\n        &c\
1926 ache_file(\"SET\",$infile,$name,$method,$db,$outfi\
1927 le,$SERVER);\n  return;\n      }\n  }\n\n\n\nsub ru\
1928 n_blast\n  {\n    my ($name, $method, $db, $infile\
1929 , $outfile, $run)=(@_);\n    if (!$run){$run=1;}\n\
1930     \n    \n    if (&cache_file(\"GET\",$infile,$n\
1931 ame,$method,$db,$outfile,$SERVER) && is_valid_blas\
1932 t_xml ($outfile))\n      {return $outfile;}\n    e\
1933 lse\n      {\n  $CACHE_STATUS=\"COMPUTE CACHE\";\n      \
1934 if ( $SERVER eq \"EBI_SOAP\")\n   {\n       &check_c\
1935 onfiguration (\"EMAIL\",\"SOAP::Light\",\"INTERNET\
1936 \");\n      \n      $cl_method=$method;\n           if ($c\
1937 l_method =~/wu/)\n            {\n               $cl_method=~s/wu//;\\
1938 n               if ( $cl_method eq \"psiblast\")\n                {\n               \
1939 add_warning($$,$$,\"PSI BLAST cannot be used with \
1940 the wuBLAST Client. Use server=EBI Or server=LOCAL\
1941 . blastp will be used instead\");\n                 $cl_metho\
1942 d=\"blastp\";\n           }\n           \n              $command=\"t_coffee -o\
1943 ther_pg wublast.pl --email $EMAIL $infile -D $db -\
1944 p $cl_method --outfile $outfile -o xml>/dev/null 2\
1945 >/dev/null\";\n         &safe_system ( $command);\n             if (\
1946 -e \"$outfile.xml\") {`mv $outfile.xml $outfile`;}\
1947 \n            }\n           else\n            {\n               if ($cl_method \
1948 eq \"psiblast\"){$cl_method =\"blastp -j5\";}\n         \\
1949 n               $command=\"t_coffee -other_pg blastpgp.pl --ema\
1950 il $EMAIL $infile -d $db --outfile $outfile -p $cl\
1951 _method --mode PSI-Blast>/dev/null 2>/dev/null\";\\
1952 n               &safe_system ( $command);\n             \n              if (-e \"$outf\
1953 ile.xml\") {`mv $outfile.xml $outfile`;}\n            }\
1954 \n        }\n   elsif ($SERVER eq \"EBI_REST\" || $SERVER\
1955  eq \"EBI\")\n    {\n      \n       $cl_method=$method;\
1956 \n          &check_configuration(\"EMAIL\",\"XML::Simpl\
1957 e\", \"INTERNET\");\n       if ($db eq \"uniprot\"){\
1958 $db1=\"uniprotkb\";}\n      else {$db1=$db;}\n      \
1959 \n\n        if ($cl_method =~/wu/)\n          {\n               $cl_m\
1960 ethod=~s/wu//;\n                if ( $cl_method eq \"psiblast\")\
1961 {$cl_method=\"blastp\";}\n              \n              $command=\"t_coffe\
1962 e -other_pg wublast_lwp.pl --email $EMAIL -D $db1 \
1963 -p $cl_method --outfile $outfile --align 7 --stype\
1964  protein $infile>/dev/null 2>/dev/null\";\n             \n        \
1965     }\n     else\n            {\n               if ( $cl_method =~/p\
1966 siblast/){$cl_method =\"blastp -j5\";}\n                $command\
1967 =\"t_coffee -other_pg ncbiblast_lwp.pl --email $EM\
1968 AIL -D $db1 -p $cl_method --outfile $outfile --ali\
1969 gn 7 --stype protein $infile>/dev/null 2>/dev/null\
1970 \";\n         }\n           &safe_system ( $command,5);\n       \
1971     if (-e \"$outfile.out.xml\") {`mv $outfile.out\
1972 .xml $outfile`;}\n          elsif (-e \"$outfile.xml.xm\
1973 l\"){`mv $outfile.xml.xml $outfile`;}\n     elsif \
1974 (-e \"$outfile.out..xml\") {`mv $outfile.out..xml \
1975 $outfile`;}\n       elsif (-e \"$outfile.xml..xml\")\
1976 {`mv $outfile.xml..xml $outfile`;}\n      }\n   elsif (\
1977 $SERVER eq \"NCBI\")\n    {\n       &check_configurat\
1978 ion (\"blastcl3\",\"INTERNET\");\n          if ($db eq \
1979 \"uniprot\"){$cl_db=\"nr\";}\n      else {$cl_db=$d\
1980 b;}\n       \n      if ( $method eq \"psiblast\")\n      \
1981      {\n                add_warning($$,$$,\"PSI BLAST cannot be \
1982 used with the NCBI BLAST Client. Use server=EBI Or\
1983  server=LOCAL. blastp will be used instead\");\n                \
1984 $cl_method=\"blastp\";\n              }\n           else\n          \
1985   {\n           $cl_method=$method;\n         }\n           $comman\
1986 d=\"blastcl3 -p $cl_method -d $cl_db -i $infile -o\
1987  $outfile -m 7\";\n         &safe_system ($command);\n\
1988           }\n   elsif ($SERVER =~/CLIENT_(.*)/)\n         {\n      \
1989  my $client=$1;\n           $command=\"$client -p $metho\
1990 d -d $db -i $infile -o $outfile -m 7\";\n           &saf\
1991 e_system ($command);\n    }\n   elsif ( $SERVER eq \"\
1992 LOCAL_blastall\")\n       {\n       &check_configuration\
1993  (\"blastall\");\n          if ($method eq \"blastp\")\\
1994 n             {\n               $command=\"blastall -d $db -i $infile\
1995  -o $outfile -m7 -p blastp\";\n       }\n           &saf\
1996 e_system ($command);\n    }\n   elsif ( $SERVER eq \"\
1997 LOCAL\")\n        {\n       \n      if ($ENV{\"BLAST_DB_DI\
1998 R\"})\n       {\n               $x=$ENV{\"BLAST_DB_DIR\"};\n            $\
1999 cl_db=\"$x$db\";\n            }\n           else\n            {\n       \
2000         $cl_db=$db;\n         }\n           \n      if ($method eq\
2001  \"blastp\")\n        {\n               &check_configuration(\"b\
2002 lastpgp\");\n           $command=\"blastpgp -d $cl_db -i $i\
2003 nfile -o $outfile -m7 -j1\";\n        }\n           elsif\
2004  ($method eq \"psiblast\")\n          {\n               &check_con\
2005 figuration(\"blastpgp\");\n             $command=\"blastpgp -\
2006 d $cl_db -i $infile -o $outfile -m7 -j5\";\n         \
2007  }\n        elsif ($method eq \"blastn\")\n           {\n\
2008                 &check_configuration(\"blastall\");\n           $command=\
2009 \"blastall -p blastn -d $cl_db -i $infile -o $outf\
2010 ile -m7 -W6\";\n              } \n          &safe_system ($com\
2011 mand);\n          }\n   else\n    {\n       \n      myexit(add_\
2012 error (EXIT_FAILURE,$$,$$,getppid(), \"BLAST_FAILU\
2013 RE::UnknownServer\",$CL));\n      }\n   \n      if ( !-e $ou\
2014 tfile || !&is_valid_blast_xml($outfile))\n        {\n    \
2015    \n       if ( -e $outfile)\n       {\n               add_warni\
2016 ng ($$,$$,\"Corrupted Blast Output (Run $run)\");\\
2017 n               unlink($outfile);\n           }\n           \n      if ( $\
2018 run==$BLAST_MAX_NRUNS)\n              {\n       \n              myexit(add_\
2019 error (EXIT_FAILURE,$$,$$,getppid(), \"BLAST_FAILU\
2020 RE::UnknownReason\", \"$command\"));\n        }\n        \
2021    else\n             {\n               my $out;\n              if ($SERVER eq \"\
2022 NCBI\") {$SERVER=\"EBI\"; }\n           elsif ($SERVER eq \\
2023 "EBI\"){$SERVER=\"NCBI\";}\n            add_warning ($$,$$,\\
2024 "Blast for $name failed (Run: $run out of $BLAST_M\
2025 AX_NRUNS. Use $SERVER)\");\n            $out=&run_blast ($na\
2026 me, $method, $db,$infile, $outfile, $run+1);\n          if\
2027  ($SERVER eq \"NCBI\") {$SERVER=\"EBI\"; }\n            elsi\
2028 f ($SERVER eq \"EBI\"){$SERVER=\"NCBI\";}\n             retur\
2029 n $out;\n             }\n         }\n   \n      &cache_file(\"SET\",$\
2030 infile,$name,$method,$db,$outfile,$SERVER);\n   #sys\
2031 tem (\"cp $outfile ~/Dropbox/tmp/cedric.out\");\n       \
2032 #die;\n return $outfile;\n      }\n  }\n\nsub cach\
2033 e_file\n  {\n    my ($cache_mode,$infile,$name,$me\
2034 thod,$db, $outfile,$server)=(@_);\n    my $cache_f\
2035 ile;\n    #Protect names so that they can be turne\
2036 d into legal filenames\n    $name=&clean_file_name\
2037  ($name);\n\n    if ($db=~/\\//)\n      {\n     $db=~/\
2038 ([^\\/]+)$/;\n  $db=$1;\n      }\n    $cache_file_s\
2039 h=\"$name.$method.$db.$server.tmp\";\n    $cache_f\
2040 ile=\"$CACHE/$name.$method.$db.$server.tmp\";\n   \
2041  \n    if ($infile ne \"\")\n      {\n  $cache_file\
2042 _infile_sh=\"$name.$method.$db.$server.infile.tmp\\
2043 ";\n    $cache_file_infile=\"$CACHE/$name.$method.$db\
2044 .$server.infile.tmp\";\n      }\n    \n    if ($ca\
2045 che_mode eq \"GET\")\n      {\n if ($CACHE eq \"\"\
2046  || $CACHE eq \"no\" || $CACHE eq \"ignore\"  || $\
2047 CACHE eq \"local\" || $CACHE eq \"update\"){return\
2048  0;}\n  elsif ( !-d $CACHE)\n     {\n       print STDER\
2049 R \"ERROR: Cache Dir: $CACHE Does not Exist\";\n         \
2050    return 0;\n    }\n   else\n    {\n       if ( -e $cac\
2051 he_file && &fasta_file1_eq_fasta_file2($infile,$ca\
2052 che_file_infile)==1)\n        {\n               `cp $cache_file \
2053 $outfile`;\n            $CACHE_STATUS=\"READ CACHE\";\n         ret\
2054 urn 1;\n              }\n         }\n      }\n    elsif ($cache\
2055 _mode eq \"SET\")\n      {\n    if ($CACHE eq \"\" ||\
2056  $CACHE eq \"no\" || $CACHE eq \"ignore\"  || $CAC\
2057 HE eq \"local\" || $CACHE eq \"update\"){return 0;\
2058 }\n     elsif ( !-d $CACHE)\n     {\n       print STDERR \\
2059 "ERROR: Cache Dir: $CACHE Does not Exist\";\n       \
2060 return 0;\n       }\n   elsif (-e $outfile)\n     {\n       \
2061 `cp $outfile $cache_file`;\n        if ($cache_file_i\
2062 nfile ne \"\"){ `cp $infile $cache_file_infile`;}\\
2063 n\n         #functions for updating the cache\n     #`\
2064 t_coffee -other_pg clean_cache.pl -file $cache_fil\
2065 e_sh -dir $CACHE`;\n        #`t_coffee -other_pg clea\
2066 n_cache.pl -file $cache_file_infile_sh -dir $CACHE\
2067 `;\n        return 1;\n   }\n      }\n    $CACHE_STAT\
2068 US=\"COMPUTE CACHE\";\n    return 0;\n  }\nsub fil\
2069 e1_eq_file2\n  {\n    my ($f1, $f2)=@_;\n    if ( \
2070 $f1 eq \"\"){return 1;}\n    elsif ( $f2 eq \"\"){\
2071 return 1;}\n    elsif ( !-e $f1){return 0;}\n    e\
2072 lsif ( !-e $f2){return 0;}\n    elsif ($f1 eq \"\"\
2073  || $f2 eq \"\" || `diff $f1 $f2` eq \"\"){return \
2074 1;}\n    \n    return 0;\n  }\nsub clean_file_name\
2075  \n  {\n    my $name=@_[0];\n    \n    $name=~s/[^\
2076 A-Za-z1-9.-]/_/g;\n    return $name;\n  }\nsub url\
2077 2file\n  {\n    my ($address, $out)=(@_);\n    \n \
2078    if (&pg_is_installed (\"wget\"))\n   {\n       return\
2079  &safe_system (\"wget $address -O$out >/dev/null 2\
2080 >/dev/null\");\n        }\n    elsif (&pg_is_installed (\\
2081 "curl\"))\n      {\n    return &safe_system (\"curl $\
2082 address -o$out >/dev/null 2>/dev/null\");\n      }\
2083 \n    else\n      {\n   myexit(flus_error(\"neither \
2084 curl nor wget are installed. Imnpossible to fectch\
2085  remote file\"));\n     exit ($EXIT_FAILURE);\n      }\
2086 \n  }\nsub fasta_file1_eq_fasta_file2\n  {\n    my\
2087  ($f1, $f2)=@_;\n    my (%s1, %s2);\n    my @names\
2088 ;\n    %s1=read_fasta_seq ($f1);\n    %s2=read_fas\
2089 ta_seq ($f2);\n\n    @names=(keys (%s1));\n    \n \
2090    foreach $n (keys(%s1))\n      {\n    if ($s1{$n}{s\
2091 eq} ne $s2{$n}{seq}){return 0;}\n      } \n    \n \
2092    foreach $n (keys(%s2))\n      {\n    if ($s1{$n}{s\
2093 eq} ne $s2{$n}{seq}){return 0;}\n      }\n    retu\
2094 rn 1;\n  }\n    \n\n\nsub read_template_file\n{\n       my \
2095 $pdb_templates = @_[0];\n       open (TEMP, \"<$pdb_temp\
2096 lates\");\n     my %temp_h;\n   while (<TEMP>)\n{\n             $li\
2097 ne = $_;\n              $line =~/(\\S+)\\s(\\S+)/;\n            $temp_\
2098 h{$1}= $2;\n}\n close(TEMP);\n  return %temp_h;\n}\\
2099 n\nsub calc_rna_template\n{\n   my ($mode, $infile, \
2100 $pdbfile, $outfile)=@_;\n       my %s, %h ;\n   my $result\
2101 ;\n     my (@profiles);\n       &set_temporary_dir (\"set\",\
2102 $infile,\"seq.pep\");\n %s=read_fasta_seq (\"seq.p\
2103 ep\");\n        \n      %pdb_template_h = &read_template_file(\
2104 $pdbfile);\n    my $pdb_chain;\n        open (R, \">result.a\
2105 ln\");\n\n\n    #print stdout \"\\n\";\n        foreach $seq\
2106  (keys(%s))\n   {\n             if ($pdb_template_h{$seq} eq \"\
2107 \")\n           {\n                     next;\n         }\n             open (F, \">seqfile\");\
2108 \n              print (F \">$s{$seq}{name}\\n$s{$seq}{seq}\\n\\
2109 ");\n           close (F);\n            $pdb_chain = $pdb_template_h{\
2110 $seq};\n                $lib_name=\"$s{$seq}{name}.rfold\";\n           $\
2111 lib_name=&clean_file_name ($lib_name);\n                \n              saf\
2112 e_system (\"secondary_struc.py seqfile $CACHE$pdb_\
2113 chain  $lib_name\");\n          \n              if ( !-e $lib_name)\n   \
2114         {\n             myexit(flush_error(\"RNAplfold failed to com\
2115 pute the secondary structure of $s{$seq}{name}\"))\
2116 ;\n                     myexit ($EXIT_FAILURE);\n               }\n             else\n          {\n     \
2117                 print stdout \"\\tProcess: >$s{$seq}{name} _F_ $\
2118 lib_name\\n\";\n                        print R \">$s{$seq}{name} _F_ $\
2119 lib_name\\n\";\n                }\n             unshift (@profiles, $lib_na\
2120 me);\n  }\n     close (R);\n    &set_temporary_dir (\"unse\
2121 t\",$mode, $method,\"result.aln\",$outfile, @profi\
2122 les);\n}\n\n\n\nsub seq2rna_pair{\n     my ($mode, $pd\
2123 bfile1, $pdbfile2, $method, $param, $outfile)=@_;\\
2124 n       \n      if ($method eq \"runsara.py\")\n        {\n             open(TM\
2125 P,\"<$pdbfile1\");\n            my $count = 0;\n                my $line;\\
2126 n               while (<TMP>)\n         {\n                     $line = $_;\n                   if ($cou\
2127 nt ==1)\n                       {\n                             last;\n                 }\n                     $count += 1;\n  \
2128         }\n\n           \n              $chain1 = substr($line,length($line)-3\
2129 ,1);\n\n                close TMP;\n            open(TMP,\"<$pdbfile2\");\\
2130 n               my $count = 0;\n                while (<TMP>)\n         {\n                     $line \
2131 = $_;\n                 if ($count ==1)\n                       {\n                             last;\n                 }\n\
2132                         $count += 1;\n          }\n             $chain2 = substr($line,len\
2133 gth($line)-3,1);\n              close TMP;\n\n          $tmp_file=&vtm\
2134 pnam();\n       \n              safe_system(\"runsara.py $pdbfile1 $\
2135 chain1 $pdbfile2 $chain2 -s -o $tmp_file --limitat\
2136 ion 5000 > /dev/null 2> /dev/null\") == 0 or die \\
2137 "sara did not work $!\\n\";\n           open(TMP,\"<$tmp_fi\
2138 le\") or die \"cannot open the sara tmp file:$!\\n\
2139 \";\n           open(OUT,\">$outfile\") or die \"cannot ope\
2140 n the $outfile file:$!\\n\";\n\n                my $switch = 0;\\
2141 n               my $seqNum = 0;\n               foreach my $line (<TMP>)\n              \
2142 {\n                     next unless ($line=~/SARAALI/);\n                       if ($lin\
2143 e=~/>/)\n                       {\n                             $switch =0;\n                           print OUT \">s\
2144 eq$seqNum\\n\";\n                               $seqNum++;                              \n                      }\n                     if (\
2145 $switch < 2){\n                         $switch++;\n                            next;\n                 }\n     \\
2146 n                       if ($line =~/REMARK\\s+SARAALI\\s+([^\\*]+)\\*\
2147 /)\n                    {\n                             my $string = $1;\n                              print OUT \"$s\
2148 tring\\n\";\n                   }\n             }\n             close TMP; \n           close OUT\
2149 ;\n             unlink($tmp_file);\n    }\n}\n\nsub seq2tblastx_\
2150 lib\n  {\n    my ($mode, $infile, $outfile)=@_;\n \
2151    my (%s, $method,$nseq);\n\n    $method=$mode;\n\
2152     &set_temporary_dir (\"set\",$infile,\"infile\"\
2153 );\n    %s=read_fasta_seq(\"infile\");\n    \n    \
2154 \n    foreach $seq (keys(%s))\n      {\n        $slist[$s\
2155 {$seq}{order}]=$s{$seq}{seq};\n $sname[$s{$seq}{or\
2156 der}]=$s{$seq}{name};\n $slen[$s{$seq}{order}]=len\
2157 gth ($s{$seq}{seq});\n      }\n    $nseq=$#sname+1\
2158 ;\n    open (F, \">outfile\");\n    print F \"! TC\
2159 _LIB_FORMAT_01\\n\";\n    print F \"$nseq\\n\";\n \
2160    for ($a=0; $a<$nseq;$a++)\n      {\n print F \"\
2161 $sname[$a] $slen[$a]  $slist[$a]\\n\"\n      }\n  \
2162   close (F);\n    &safe_system (\"formatdb -i infi\
2163 le -p F\");\n    &safe_system (\"blastall -p tblas\
2164 tx -i infile -d infile -m 7 -S1>blast.output\");\n\
2165     \n    ncbi_tblastx_xml2lib_file (\"outfile\", \
2166 file2string (\"blast.output\"));\n    &set_tempora\
2167 ry_dir (\"unset\",$mode, $method, \"outfile\",$out\
2168 file);\n    myexit ($EXIT_SUCCESS);\n    }\nsub se\
2169 q2tblastpx_lib\n  {\n    my ($mode, $infile, $outf\
2170 ile)=@_;\n    my (%s, $method,$nseq);\n    $method\
2171 =$mode;\n    &set_temporary_dir (\"set\",$infile,\\
2172 "infile\");\n    %s=read_fasta_seq(\"infile\");\n \
2173    \n    foreach $seq (keys(%s))\n      {\n     $slist\
2174 [$s{$seq}{order}]=$s{$seq}{seq};\n      $sname[$s{$seq}\
2175 {order}]=$s{$seq}{name};\n      $slen[$s{$seq}{order}]=\
2176 length ($s{$seq}{seq});\n      }\n    $nseq=$#snam\
2177 e+1;\n    open (F, \">outfile\");\n    print F \"!\
2178  TC_LIB_FORMAT_01\\n\";\n    print F \"$nseq\\n\";\
2179 \n    for ($a=0; $a<$nseq;$a++)\n      {\n      print F\
2180  \"$sname[$a] $slen[$a]  $slist[$a]\\n\"\n      }\\
2181 n    close (F);\n    &safe_system(\"t_coffee -othe\
2182 r_pg seq_reformat -in infile -output tblastx_db1 >\
2183  tblastxdb\");\n    &safe_system (\"formatdb -i tb\
2184 lastxdb -p T\");\n    &safe_system (\"blastall -p \
2185 blastp -i tblastxdb -d tblastxdb -m7 >blast.output\
2186 \");\n    ncbi_tblastpx_xml2lib_file (\"outfile\",\
2187  file2string (\"blast.output\"), %s);\n    &set_te\
2188 mporary_dir (\"unset\",$mode, $method, \"outfile\"\
2189 ,$outfile);\n    myexit ($EXIT_SUCCESS);\n    }\n\\
2190 n\n    \n\n\n\nsub file2head\n      {\n my $file =\
2191  shift;\n       my $size = shift;\n     my $f= new FileHandl\
2192 e;\n    my $line;\n     open ($f,$file);\n      read ($f,$line\
2193 , $size);\n     close ($f);\n   return $line;\n      }\n\
2194 sub file2tail\n      {\n        my $file = shift;\n     my $s\
2195 ize = shift;\n  my $f= new FileHandle;\n        my $line;\\
2196 n       \n      open ($f,$file);\n      seek ($f,$size*-1, 2);\n        r\
2197 ead ($f,$line, $size);\n        close ($f);\n   return $lin\
2198 e;\n      }\n\n\nsub vtmpnam\n      {\n my $r=rand\
2199 (100000);\n     my $f=\"file.$r.$$\";\n while (-e $f)\\
2200 n         {\n       $f=vtmpnam();\n       }\n   push (@TMPFILE_L\
2201 IST, $f);\n     return $f;\n      }\n\nsub myexit\n  {\
2202 \n    my $code=@_[0];\n    if ($CLEAN_EXIT_STARTED\
2203 ==1){return;}\n    else {$CLEAN_EXIT_STARTED=1;}\n\
2204     ### ONLY BARE EXIT\n    exit ($code);\n  }\nsu\
2205 b set_error_lock\n    {\n      my $name = shift;\n\
2206       my $pid=$$;\n\n      \n      &lock4tc ($$,\"\
2207 LERROR\", \"LSET\", \"$$ -- ERROR: $name $PROGRAM\\
2208 \n\");\n      return;\n    }\nsub set_lock\n  {\n \
2209    my $pid=shift;\n    my $msg= shift;\n    my $p=\
2210 getppid();\n    &lock4tc ($pid,\"LLOCK\",\"LRESET\\
2211 ",\"$p$msg\\n\");\n  }\nsub unset_lock\n   {\n    \
2212  \n    my $pid=shift;\n    &lock4tc ($pid,\"LLOCK\\
2213 ",\"LRELEASE\",\"\");\n  }\nsub shift_lock\n  {\n \
2214    my $from=shift;\n    my $to=shift;\n    my $fro\
2215 m_type=shift;\n    my $to_type=shift;\n    my $act\
2216 ion=shift;\n    my $msg;\n    \n    if (!&lock4tc(\
2217 $from, $from_type, \"LCHECK\", \"\")){return 0;}\n\
2218     $msg=&lock4tc ($from, $from_type, \"LREAD\", \\
2219 "\");\n    &lock4tc ($from, $from_type,\"LRELEASE\\
2220 ", $msg);\n    &lock4tc ($to, $to_type, $action, $\
2221 msg);\n    return;\n  }\nsub isshellpid\n  {\n    \
2222 my $p=shift;\n    if (!lock4tc ($p, \"LLOCK\", \"L\
2223 CHECK\")){return 0;}\n    else\n      {\n       my $c=lo\
2224 ck4tc($p, \"LLOCK\", \"LREAD\");\n      if ( $c=~/-SHEL\
2225 L-/){return 1;}\n      }\n    return 0;\n  }\nsub \
2226 isrootpid\n  {\n    if(lock4tc (getppid(), \"LLOCK\
2227 \", \"LCHECK\")){return 0;}\n    else {return 1;}\\
2228 n  }\nsub lock4tc\n     {\n       my ($pid,$type,$action,$\
2229 value)=@_;\n      my $fname;\n    my $host=hostname;\n\
2230           \n      if ($type eq \"LLOCK\"){$fname=\"$LOCKDIR/\
2231 .$pid.$host.lock4tcoffee\";}\n    elsif ( $type eq \
2232 \"LERROR\"){ $fname=\"$LOCKDIR/.$pid.$host.error4t\
2233 coffee\";}\n      elsif ( $type eq \"LWARNING\"){ $fn\
2234 ame=\"$LOCKDIR/.$pid.$host.warning4tcoffee\";}\n         \
2235  \n       if ($debug_lock)\n        {\n       print STDER\
2236 R \"\\n\\t---lock4tc(tcg): $action => $fname =>$va\
2237 lue (RD: $LOCKDIR)\\n\";\n          }\n\n         if    ($act\
2238 ion eq \"LCHECK\") {return -e $fname;}\n          elsif (\
2239 $action eq \"LREAD\"){return file2string($fname);}\
2240 \n        elsif ($action eq \"LSET\") {return string2fi\
2241 le ($value, $fname, \">>\");}\n   elsif ($action e\
2242 q \"LRESET\") {return string2file ($value, $fname,\
2243  \">\");}\n       elsif ($action eq \"LRELEASE\") \n     \
2244    {\n        if ( $debug_lock)\n               {\n               my $g=new\
2245  FileHandle;\n            open ($g, \">>$fname\");\n              pr\
2246 int $g \"\\nDestroyed by $$\\n\";\n               close ($g);\
2247 \n                safe_system (\"mv $fname $fname.old\");\n             }\
2248 \n            else\n            {\n               unlink ($fname);\n            }\n       \
2249   }\n     return \"\";\n        }\n     \nsub file2string\n     {\n\
2250           my $file=@_[0];\n       my $f=new FileHandle;\n         m\
2251 y $r;\n   open ($f, \"$file\");\n         while (<$f>){$\
2252 r.=$_;}\n         close ($f);\n   return $r;\n  }\nsub st\
2253 ring2file \n    {\n    my ($s,$file,$mode)=@_;\n  \
2254   my $f=new FileHandle;\n    \n    open ($f, \"$mo\
2255 de$file\");\n    print $f  \"$s\";\n    close ($f)\
2256 ;\n  }\n\nBEGIN\n    {\n      srand;\n    \n      \
2257 $SIG{'SIGUP'}='signal_cleanup';\n      $SIG{'SIGIN\
2258 T'}='signal_cleanup';\n      $SIG{'SIGQUIT'}='sign\
2259 al_cleanup';\n      $SIG{'SIGILL'}='signal_cleanup\
2260 ';\n      $SIG{'SIGTRAP'}='signal_cleanup';\n     \
2261  $SIG{'SIGABRT'}='signal_cleanup';\n      $SIG{'SI\
2262 GEMT'}='signal_cleanup';\n      $SIG{'SIGFPE'}='si\
2263 gnal_cleanup';\n      \n      $SIG{'SIGKILL'}='sig\
2264 nal_cleanup';\n      $SIG{'SIGPIPE'}='signal_clean\
2265 up';\n      $SIG{'SIGSTOP'}='signal_cleanup';\n   \
2266    $SIG{'SIGTTIN'}='signal_cleanup';\n      $SIG{'\
2267 SIGXFSZ'}='signal_cleanup';\n      $SIG{'SIGINFO'}\
2268 ='signal_cleanup';\n      \n      $SIG{'SIGBUS'}='\
2269 signal_cleanup';\n      $SIG{'SIGALRM'}='signal_cl\
2270 eanup';\n      $SIG{'SIGTSTP'}='signal_cleanup';\n\
2271       $SIG{'SIGTTOU'}='signal_cleanup';\n      $SI\
2272 G{'SIGVTALRM'}='signal_cleanup';\n      $SIG{'SIGU\
2273 SR1'}='signal_cleanup';\n\n\n      $SIG{'SIGSEGV'}\
2274 ='signal_cleanup';\n      $SIG{'SIGTERM'}='signal_\
2275 cleanup';\n      $SIG{'SIGCONT'}='signal_cleanup';\
2276 \n      $SIG{'SIGIO'}='signal_cleanup';\n      $SI\
2277 G{'SIGPROF'}='signal_cleanup';\n      $SIG{'SIGUSR\
2278 2'}='signal_cleanup';\n\n      $SIG{'SIGSYS'}='sig\
2279 nal_cleanup';\n      $SIG{'SIGURG'}='signal_cleanu\
2280 p';\n      $SIG{'SIGCHLD'}='signal_cleanup';\n    \
2281   $SIG{'SIGXCPU'}='signal_cleanup';\n      $SIG{'S\
2282 IGWINCH'}='signal_cleanup';\n      \n      $SIG{'I\
2283 NT'}='signal_cleanup';\n      $SIG{'TERM'}='signal\
2284 _cleanup';\n      $SIG{'KILL'}='signal_cleanup';\n\
2285       $SIG{'QUIT'}='signal_cleanup';\n      \n    \
2286   our $debug_lock=$ENV{\"DEBUG_LOCK\"};\n      \n \
2287      \n      \n      \n      foreach my $a (@ARGV)\
2288 {$CL.=\" $a\";}\n      if ( $debug_lock ){print ST\
2289 DERR \"\\n\\n\\n********** START PG: $PROGRAM ****\
2290 *********\\n\";}\n      if ( $debug_lock ){print S\
2291 TDERR \"\\n\\n\\n**********(tcg) LOCKDIR: $LOCKDIR\
2292  $$ *************\\n\";}\n      if ( $debug_lock )\
2293 {print STDERR \"\\n --- $$ -- $CL\\n\";}\n      \n\
2294              \n      \n      \n    }\nsub flush_error\n  \
2295 {\n    my $msg=shift;\n    return add_error ($EXIT\
2296 _FAILURE,$$, $$,getppid(), $msg, $CL);\n  }\nsub a\
2297 dd_error \n  {\n    my $code=shift;\n    my $rpid=\
2298 shift;\n    my $pid=shift;\n    my $ppid=shift;\n \
2299    my $type=shift;\n    my $com=shift;\n    \n    \
2300 $ERROR_DONE=1;\n    lock4tc ($rpid, \"LERROR\",\"L\
2301 SET\",\"$pid -- ERROR: $type\\n\");\n    lock4tc (\
2302 $$, \"LERROR\",\"LSET\", \"$pid -- COM: $com\\n\")\
2303 ;\n    lock4tc ($$, \"LERROR\",\"LSET\", \"$pid --\
2304  STACK: $ppid -> $pid\\n\");\n   \n    return $cod\
2305 e;\n  }\nsub add_warning \n  {\n    my $rpid=shift\
2306 ;\n    my $pid =shift;\n    my $command=shift;\n  \
2307   my $msg=\"$$ -- WARNING: $command\\n\";\n    pri\
2308 nt STDERR \"$msg\";\n    lock4tc ($$, \"LWARNING\"\
2309 , \"LSET\", $msg);\n  }\n\nsub signal_cleanup\n  {\
2310 \n    print dtderr \"\\n**** $$ (tcg) was killed\\\
2311 n\";\n    &cleanup;\n    exit ($EXIT_FAILURE);\n  \
2312 }\nsub clean_dir\n  {\n    my $dir=@_[0];\n    if \
2313 ( !-d $dir){return ;}\n    elsif (!($dir=~/tmp/)){\
2314 return ;}#safety check 1\n    elsif (($dir=~/\\*/)\
2315 ){return ;}#safety check 2\n    else\n      {\n `r\
2316 m -rf $dir`;\n      }\n    return;\n  }\nsub clean\
2317 up\n  {\n    #print stderr \"\\n----tc: $$ Kills $\
2318 PIDCHILD\\n\";\n    #kill (SIGTERM,$PIDCHILD);\n  \
2319   my $p=getppid();\n    $CLEAN_EXIT_STARTED=1;\n  \
2320   \n    \n    \n    if (&lock4tc($$,\"LERROR\", \"\
2321 LCHECK\", \"\"))\n      {\n     my $ppid=getppid();\n   \
2322 if (!$ERROR_DONE) \n      {\n       &lock4tc($$,\"LERRO\
2323 R\", \"LSET\", \"$$ -- STACK: $p -> $$\\n\");\n   \
2324   &lock4tc($$,\"LERROR\", \"LSET\", \"$$ -- COM: $\
2325 CL\\n\");\n       }\n      }\n    my $warning=&lock4tc\
2326 ($$, \"LWARNING\", \"LREAD\", \"\");\n    my $erro\
2327 r=&lock4tc($$,  \"LERROR\", \"LREAD\", \"\");\n   \
2328  #release error and warning lock if root\n    \n  \
2329   if (isrootpid() && ($warning || $error) )\n     \
2330  {\n    \n      print STDERR \"**************** Summary **\
2331 ***********\\n$error\\n$warning\\n\";\n\n       &lock4tc\
2332 ($$,\"LERROR\",\"RELEASE\",\"\");\n     &lock4tc($$,\"\
2333 LWARNING\",\"RELEASE\",\"\");\n      } \n    \n   \
2334  \n    foreach my $f (@TMPFILE_LIST)\n      {\n if\
2335  (-e $f){unlink ($f);} \n      }\n    foreach my $\
2336 d (@TMPDIR_LIST)\n      {\n     clean_dir ($d);\n     \
2337  }\n    #No More Lock Release\n    #&lock4tc($$,\"\
2338 LLOCK\",\"LRELEASE\",\"\"); #release lock \n\n    \
2339 if ( $debug_lock ){print STDERR \"\\n\\n\\n*******\
2340 *** END PG: $PROGRAM ($$) *************\\n\";}\n  \
2341   if ( $debug_lock ){print STDERR \"\\n\\n\\n*****\
2342 *****(tcg) LOCKDIR: $LOCKDIR $$ *************\\n\"\
2343 ;}\n  }\nEND \n  {\n    \n    &cleanup();\n  }\n  \
2344  \nsub blast_com2new_blast_com\n    {\n      my $c\
2345 om=shift;\n      if ($ENV{\"NCBI_BLAST_4_TCOFFEE\"\
2346 } eq \"OLD\"){return $com;}\n      elsif (!&pg_is_\
2347 installed(\"legacy_blast.pl\")){return $com;}\n   \
2348    else \n      {\n       if ($com=~/formatdb/)\n           {\n  \
2349      $com=~s/formatdb/makeblastdb/;\n         $com=~\
2350 s/\\-i/\\-in/;\n              if ($com =~/pF/){$com=~s/\\\
2351 -pF/\\-dbtype nucl/;}\n       if ($com =~/p F/){$c\
2352 om=~s/\\-p F/\\-dbtype nucl/;}\n              $com=\"$com\
2353  -logfile /dev/null\";\n              return $com;\n        \
2354 }\n       elsif (&is_blast_package($com))\n         {\n   \
2355     my $path;\n       \n              if ( $ENV{\"NCBI_BI\
2356 N_4_TCOFFEE\"}){$path=$ENV{\"NCBI_BLAST_4_TCOFFEE\\
2357 "};}\n        else\n            {\n               $path=`which legacy_bl\
2358 ast.pl`;\n                $path=~s/\\/legacy_blast\\.pl//;\n            \
2359   chomp ($path);\n              }\n           $path=\"--path $path\
2360 \";\n         if ( $com=~/\\>\\>/){$com=~s/\\>\\>/ $\
2361 path \\>\\>/;}\n              elsif ( $com=~/\\>/){$com=~\
2362 s/\\>/ $path \\>/;}\n         else {$com.=\" $path\"\
2363 ;}\n          $com=\"legacy_blast.pl $com\";\n        \
2364 \n            return $com;\n        }\n }\n    }\nsub safe\
2365 _system \n{\n  my $com=shift;\n  my $ntry=shift;\n\
2366   my $ctry=shift;\n  my $pid;\n  my $status;\n  my\
2367  $ppid=getppid();\n  if ($com eq \"\"){return 1;}\\
2368 n  \n  if ( ($com=~/^blast/) ||($com=~/^formatdb/)\
2369 ){$com=&blast_com2new_blast_com($com);} \n\n  if (\
2370 ($pid = fork ()) < 0){return (-1);}\n  if ($pid ==\
2371  0)\n    {\n      set_lock($$, \" -SHELL- $com (tc\
2372 g)\");\n      if( $debug_cmd_exec ) { printf \"exe\
2373 c: %s\\n\", $com; } \n      exec ($com);\n    }\n \
2374  else\n    {\n      lock4tc ($$, \"LLOCK\", \"LSET\
2375 \", \"$pid\\n\");#update parent\n      $PIDCHILD=$\
2376 pid;\n    }\n  if ($debug_lock){printf STDERR \"\\\
2377 n\\t .... safe_system (fasta_seq2hmm)  p: $$ c: $p\
2378 id COM: $com\\n\";}\n\n  waitpid ($pid,WTERMSIG);\\
2379 n\n  shift_lock ($pid,$$, \"LWARNING\",\"LWARNING\\
2380 ", \"LSET\");\n\n  if ($? == $EXIT_FAILURE || lock\
2381 4tc($pid, \"LERROR\", \"LCHECK\", \"\"))\n    {\n \
2382      if ($ntry && $ctry <$ntry)\n       {\n\n     add_warn\
2383 ing ($$,$$,\"$com failed [retry: $ctry out of $ntr\
2384 y]\");\n          lock4tc ($pid, \"LRELEASE\", \"LERROR\"\
2385 , \"\");\n        #if ($com=~/EBI/){$com=~s/EBI/NCBI/;}\
2386 \n        #elsif ($com=~/NCBI/){$com=~s/NCBI/EBI/;}\n    \
2387  \n       return safe_system ($com, $ntry, ++$ctry);\n\
2388         }\n      elsif ($ntry == -1)\n  {\n       if (!shift_l\
2389 ock ($pid, $$, \"LERROR\", \"LWARNING\", \"LSET\")\
2390 )\n         {\n       add_warning ($$,$$,\"$com failed\
2391 \");\n      }\n   else\n            {\n       lock4tc ($pi\
2392 d, \"LRELEASE\", \"LERROR\", \"\");\n       }\n   re\
2393 turn $?;}\n      else\n {\n       if (!shift_lock ($pi\
2394 d,$$, \"LERROR\",\"LERROR\", \"LSET\"))\n           {\n \
2395       myexit(add_error ($EXIT_FAILURE,$$,$pid,getp\
2396 pid(), \"UNSPECIFIED system\", $com));\n            }\n }\
2397 \n    }\n  return $?;\n}\n\nsub check_configuratio\
2398 n \n    {\n      my @l=@_;\n      my $v;\n      fo\
2399 reach my $p (@l)\n      {\n       \n      if   ( $p eq \"EMAIL\
2400 \")\n       { \n              if ( !($EMAIL=~/@/))\n            {\n             \
2401 add_warning($$,$$,\"Could Not Use EMAIL\");\n           mye\
2402 xit(add_error ($EXIT_FAILURE,$$,$$,getppid(),\"EMA\
2403 IL\",\"$CL\"));\n             }\n           }\n   elsif( $p eq\
2404  \"INTERNET\")\n            {\n       if ( !&check_intern\
2405 et_connection())\n              {\n               myexit(add_error ($EXIT\
2406 _FAILURE,$$,$$,getppid(),\"INTERNET\",\"$CL\"));\n\
2407                 }\n         }\n   elsif( $p eq \"wget\")\n          {\n  \
2408      if (!&pg_is_installed (\"wget\") && !&pg_is_i\
2409 nstalled (\"curl\"))\n          {\n               myexit(add_error ($\
2410 EXIT_FAILURE,$$,$$,getppid(),\"PG_NOT_INSTALLED:wg\
2411 et\",\"$CL\"));\n               }\n         }\n   elsif( !(&pg_is_i\
2412 nstalled ($p)))\n           {\n       myexit(add_error (\
2413 $EXIT_FAILURE,$$,$$,getppid(),\"PG_NOT_INSTALLED:$\
2414 p\",\"$CL\"));\n            }\n }\n      return 1;\n    }\
2415 \n\n$program=\"T-COFFEE (r550)\";\n\n","*TC_METHOD\
2416 _FORMAT_01\n******************generic_method.tc_me\
2417 thod*************\n*\n*       Incorporating new me\
2418 thods in T-Coffee\n*       Cedric Notredame 26/08/\
2419 08\n*\n*******************************************\
2420 ************\n*This file is a method file\n*Copy i\
2421 t and adapt it to your need so that the method \n*\
2422 you want to use can be incorporated within T-Coffe\
2423 e\n***********************************************\
2424 ********\n*                  USAGE                \
2425               *\n*********************************\
2426 **********************\n*This file is passed to t_\
2427 coffee via -in:\n*\n*   t_coffee -in Mgeneric_method\
2428 .method\n*\n*   The method is passed to the shell us\
2429 ing the following\n*call:\n*<EXECUTABLE><PARAM1><I\
2430 N_FLAG><seq_file><PARAM2><OUT_FLAG><outname><PARAM\
2431 >\n*\n*Conventions:\n*<FLAG_NAME>       <TYPE>          <VALUE>\
2432 \n*<VALUE>:     no_name         <=> Replaced with a space\n*<\
2433 VALUE>: &nbsp   <=> Replaced with a space\n*\n******\
2434 *************************************************\\
2435 n*                  ALN_MODE                      \
2436      *\n******************************************\
2437 *************\n*pairwise   ->all Vs all (no self )\
2438 [(n2-n)/2aln]\n*m_pairwise ->all Vs all (no self)[\
2439 n^2-n]^2\n*s_pairwise ->all Vs all (self): [n^2-n]\
2440 /2 + n\n*multiple   ->All the sequences in one go\\
2441 n*\nALN_MODE            pairwise\n*\n***********************\
2442 ********************************\n*               \
2443    OUT_MODE                           *\n*********\
2444 **********************************************\n* \
2445 mode for the output:\n*External methods: \n* aln -\
2446 > alignmnent File (Fasta or ClustalW Format)\n* li\
2447 b-> Lib file (TC_LIB_FORMAT_01)\n*Internal Methods\
2448 :\n* fL -> Internal Function returning a List (Lib\
2449 rairie)\n* fA -> Internal Function returning an Al\
2450 ignmnent\n*\nOUT_MODE           aln\n**********************\
2451 *********************************\n*              \
2452     SEQ_TYPE                           *\n********\
2453 ***********************************************\n*\
2454 G: Genomic, S: Sequence, P: PDB, R: Profile\n*Exam\
2455 ples:\n*SEQTYPE S       sequences against sequences (def\
2456 ault)\n*SEQTYPE S_P     sequence against structure\n*S\
2457 EQTYPE  P_P     structure against structure\n*SEQTYPE   P\
2458 S       mix of sequences and structure  \n*\nSEQ_TYPE   S\n\
2459 *\n\n*********************************************\
2460 **********\n*                COMMAND LINE         \
2461                 *\n*EXECUTABLE PARAM1 IN_FLAG OUT_\
2462 FLAG PARAM             *\n************************\
2463 *******************************\n*****************\
2464 **************************************\n*         \
2465          EXECUTABLE                         *\n***\
2466 **************************************************\
2467 **\n*name of the executable\n*passed to the shell:\
2468  executable\n*  \nEXECUTABLE    tc_generic_method.pl\n\
2469 *\n***********************************************\
2470 ********\n*                  IN_FLAG              \
2471                *\n********************************\
2472 ***********************\n*IN_FLAG\n*flag indicatin\
2473 g the name of the in coming sequences\n*IN_FLAG S \
2474 no_name ->no flag\n*IN_FLAG S &bnsp-in&bnsp -> \" \
2475 -in \"\n*\nIN_FLAG              -infile=\n*\n*****************\
2476 **************************************\n*         \
2477          OUT_FLAG                           *\n***\
2478 **************************************************\
2479 **\n*OUT_FLAG\n*flag indicating the name of the ou\
2480 t-coming data\n*same conventions as IN_FLAG\n*OUT_\
2481 FLAG    S no_name ->no flag\n*if you want to redirect\
2482 , pass the parameters via PARAM1\n*set OUT_FLAG to\
2483  >\n*\nOUT_FLAG         -outfile=\n*\n*******************\
2484 ************************************\n*           \
2485        PARAM_1                              *\n***\
2486 **************************************************\
2487 **\n*<EXECUTABLE><PARAM1><IN_FLAG><seq_file><PARAM\
2488 2><OUT_FLAG><outname><PARAM>\n*Parameters sent to \
2489 the EXECUTABLE and specified *before* IN_FLAG \n*I\
2490 f there is more than 1 PARAM line, the lines are\n\
2491 *concatenated\n*Command_line: @EP@PARAM@-gapopen%e\
2492 10%s-gapext%e20\n*      %s white space\n*       %e equal sign\
2493 \n*\n*PARAM1    \n*\n*\n*\n**************************\
2494 *****************************\n*                  \
2495 PARAM_2                              *\n**********\
2496 *********************************************\n*<E\
2497 XECUTABLE><PARAM1><IN_FLAG><seq_file><PARAM2><OUT_\
2498 FLAG><outname><PARAM>\n*Parameters sent to the EXE\
2499 CUTABLE and specified \n*after* IN_FLAG and *befor\
2500 e* OUT_FLAG\n*If there is more than 1 PARAM line, \
2501 the lines are\n*concatenated\n*\n*PARAM1        \n*\n*\n*\
2502 **************************************************\
2503 ****\n*                  PARAM                    \
2504           *\n*************************************\
2505 ******************\n*<EXECUTABLE><PARAM1><IN_FLAG>\
2506 <seq_file><PARAM2><OUT_FLAG><outname><PARAM>\n*Par\
2507 ameters sent to the EXECUTABLE and specified *afte\
2508 r* OUT_FLAG\n*If there is more than 1 PARAM line, \
2509 the lines are\n*concatenated\n*\nPARAM  -mode=seq_m\
2510 sa -method=clustalw\nPARAM   -OUTORDER=INPUT -NEWT\
2511 REE=core -align -gapopen=-15\n*\n*****************\
2512 **************************************\n*         \
2513          END                                *\n***\
2514 **************************************************\
2515 **\n","*TC_METHOD_FORMAT_01\n***************clusta\
2516 lw_method.tc_method*********\nEXECUTABLE        clustalw\\
2517 nALN_MODE               pairwise\nIN_FLAG               -INFILE=\nOUT_FLAG              \
2518 -OUTFILE=\nOUT_MODE             aln\nPARAM              -gapopen=-10\nSEQ\
2519 _TYPE           S\n****************************************\
2520 *********\n","$VersionTag =                       \
2521                                                   \
2522                                                   \
2523         2.43;\nuse Env;\nuse FileHandle;\nuse Cwd;\
2524 \nuse File::Path;\nuse Sys::Hostname;\nour $PIDCHI\
2525 LD;\nour $ERROR_DONE;\nour @TMPFILE_LIST;\nour $EX\
2526 IT_FAILURE=1;\nour $EXIT_SUCCESS=0;\n\nour $REFDIR\
2527 =getcwd;\nour $EXIT_SUCCESS=0;\nour $EXIT_FAILURE=\
2528 1;\n\nour $PROGRAM=\"extract_from_pdb\";\nour $CL=\
2529 $PROGRAM;\n\nour $CLEAN_EXIT_STARTED;\nour $debug_\
2530 lock=$ENV{\"DEBUG_LOCK\"};\nour $LOCKDIR=$ENV{\"LO\
2531 CKDIR_4_TCOFFEE\"};\nif (!$LOCKDIR){$LOCKDIR=getcw\
2532 d();}\nour $ERRORDIR=$ENV{\"ERRORDIR_4_TCOFFEE\"};\
2533 \nour $ERRORFILE=$ENV{\"ERRORFILE_4_TCOFFEE\"};\n&\
2534 set_lock ($$);\nif (isshellpid(getppid())){lock4tc\
2535 (getppid(), \"LLOCK\", \"LSET\", \"$$\\n\");}\n   \
2536    \nour $SILENT=\" >/dev/null 2>/dev/null\";\nour\
2537  $INTERNET=-1;\n\n\n\n\n\n\n\nour $BLAST_MAX_NRUNS\
2538 =2;\nour $EXIT_SUCCESS=0;\nour $EXIT_FAILURE=1;\no\
2539 ur $CONFIGURATION=-1;\nour $REF_EMAIL=\"\";\nour $\
2540 PROGRAM=\"extract_from_pdb\";\n\n\nmy %onelett_pro\
2541 t=&fill_onelett_prot();\nmy %threelett_prot=&fill_\
2542 threelett_prot();\nmy %onelett_RNA=&fill_onelett_R\
2543 NA();\nmy %threelett_RNA=&fill_threelett_RNA();\nm\
2544 y %onelett_DNA=&fill_onelett_DNA();\nmy %threelett\
2545 _DNA=&fill_threelett_DNA();\n\n\n\n\n\nmy %onelett\
2546  = (\n'P' => \\%onelett_prot,\n'D' => \\%onelett_D\
2547 NA,\n'R' => \\%onelett_RNA\n);\n\n\nmy %threelett \
2548 = (\n'P' => \\%threelett_prot,\n'D' => \\%threelet\
2549 t_DNA,\n'R' => \\%threelett_RNA\n);\n\n\n\n\n\n\n\\
2550 nif($ARGV[0]=~/help/ ||$ARGV[0]=~/man/ || $ARGV[0]\
2551 =~/HELP/ || $ARGV[0]=~/Man/ || $ARGV[0] eq \"-h\" \
2552  || $ARGV[0] eq \"-H\"  )\n{die \"SYNTAX: extract_\
2553 from_pdb Version $VersionTag    \n      Minimum:          \
2554    [extract_from_pdb file] \n                      OR \n                             [.\
2555 .. | extract_from_pdb]\n        Flags (Default setting o\
2556 n the first line)\n        -version...................\
2557 [Returns the Version Number]\n           -force...\
2558 ..................[Forces the file to be treated l\
2559 ike a PDB file]\n                                 \
2560      [Regenerates the header and SEQRES fields]\n \
2561           -force_name................[Forces the f\
2562 ile to be named after name]]\n           -infile..\
2563 ...file...........[Flag can be omited]\n                               \
2564        [File must be pdb or fro pgm]\n            \
2565                           [File can also be compre\
2566 ssed Z or gz]\n                                   \
2567    [In the case of a compressed file, you can omit\
2568  the gz|Z extension]\n           -netfile.........\
2569 ..........[File will be fetch from the net using w\
2570 get]\n                                      [wget \
2571 or curl must be installed]\n                      \
2572                 [ftp://ftp.gnu.org/pub/gnu/wget/]\\
2573 n                                      [http://cur\
2574 l.haxx.se/]\n                                     \
2575  [Must also be used to retrieve the file from a lo\
2576 cal pdb copy (cf netaddress)]\n           -netaddr\
2577 ess................[Address used for the retrievin\
2578 g the netfile]\n                                  \
2579     [http://www.rcsb.org/pdb/cgi/export.cgi/%%.pdb\
2580 .gz?format=PDB&pdbId=%%&compression=gz]\n         \
2581                              [http://www.expasy.ch\
2582 /cgi-bin/get-pdb-entry.pl?%%]\n                   \
2583                    [local -> will get the file fro\
2584 m pdb_dir (see pdb_dir)]\n           -netcompressi\
2585 on............[Extension if the netfile comes comp\
2586 ressed]\n                                      [gz\
2587 ]\n           -pdb_dir...................[address \
2588 of the repertory where the pdb is installed]\n    \
2589                                   [Supports standa\
2590 rd ftp style installation OR every stru in DIR]\n \
2591                                      [Give the ...\
2592 ./pdb/structure/ dir]\n                           \
2593            [If value omitted, the pg gets it from \
2594 the env variable PDB_DIR]\n           -netcompress\
2595 ion_pg.........[gunzip]\n           -is_pdb_name..\
2596 ........name.[Returns 1 if the name is a PDB ID, 0\
2597  otherwise]\n           -model_type...........name\
2598 .[Returns the model type if valid PDB name]\n     \
2599       -is_released_pdb_name name.[Returns 1 if the\
2600  name corresponds to a released PDB file]\n       \
2601     -get_pdb_chains.....name...[Returns the list o\
2602 f chains corresponding to the entry]\n           -\
2603 get_pdb_id.........name...[Returns the PDB id with\
2604 in the provided pdb file]\n           -get_fugue_n\
2605 ame.....name...[Turns a name into a name valid for\
2606  fugue]\n                                      [Us\
2607 es the netaddress to do so]\n      -chain......FIRST\
2608 ..........[Extract the first chain only]\n                    \
2609  A B C..........[Extract Several chains if needed]\
2610 \n                     ALL............[Extract all the chains]\
2611         \n           -ligand.....ALL............[Extract \
2612 the ligands in the chain (HETATM)]\n              \
2613          <name1>,<name2>[Extract All the named lig\
2614 nds]\n     -ligand_only...............[Extract only\
2615  the ligands]\n           -ligand_list............\
2616 ...[Extract the list of ligands]\n         -coor.......\
2617 <start>..<end>.[Coordinates of the fragment to ext\
2618 ract]\n                               [Omit end to include the C\
2619 ter]\n           -num........absolute.......[absol\
2620 ute: relative to the seq] \n                      \
2621  file...........[file: relative to file]\n        \
2622    -num_out....new............[new: start 1->L]\n \
2623                       old............[old: keep th\
2624 e file coordinates]\n           -delete.....<start\
2625 >..<end>.[Delete from residue start to residue end\
2626 ]\n        -atom.......CA.............[Atoms to includ\
2627 e, ALL for all of them]\n                      CA O N.........[\
2628 Indicate several atoms if needed]\n        -code......\
2629 .3..............[Use the 1 letter code or the 3 le\
2630 tters code]\n      -mode.......raw............[Outpu\
2631 t original pdb file]\n                       pdb..\
2632 ..........[Output something that looks like pdb]\n\
2633                        fasta..........[Output the sequences in f\
2634 asta format]\n                 simple.........[Output a fo\
2635 rmat easy to parse in C ]\n            -seq_field.\
2636 .ATOM...........[Field used to extract the sequenc\
2637 e]\n                   SEQRES.........[Use the complete sequ\
2638 ence]\n    -seq.......................[Equivalent \
2639 to  -mode fasta]\n         -model......1..............[\
2640 Chosen Model in an NMR file]\n           -nodiagno\
2641 stic..............[Switches Error Messages off]\n \
2642           -debug.....................[Sets the DEB\
2643 UG ON]\n           -no_remote_pdb_dir.........[Do \
2644 not look for a remote file]\n           -cache_pdb\
2645 .................[Cache Value, default is $HOME/.t\
2646 _coffee/cache, other values: NO<=> No cache]\n\n  \
2647     Environement Variables\n           These varia\
2648 bles can be set from the environement\n           \
2649 Command line values with the corresponding flag su\
2650 perseed evironement value\n           NO_REMOTE_PD\
2651 B_DIR..........[Prevents the program from searchin\
2652 g remote file: faster]\n           PDB_DIR........\
2653 ............[Indicates where PDB file must be fetc\
2654 hed (localy)]\n\n        PROBLEMS: please contact cedric\
2655 .notredame\\@europe.com\\n\";\n  exit ($EXIT_SUCCE\
2656 SS);\n}\n\n$np=0;\n$n_para=$#ARGV;\n$model=1;\n$pd\
2657 b_dir=$ENV{'PDB_DIR'};if ($pdb_dir){$pdb_dir.=\"/\\
2658 ";}\n$debug=$ENV{'DEBUG_EXTRACT_FROM_PDB'};\n\n$no\
2659 _remote_pdb_dir=$ENV{NO_REMOTE_PDB_DIR};\n$HOME=$E\
2660 NV{'HOME'};\nif ( $ENV{CACHE_4_TCOFFEE})\n{$cache=\
2661 $ENV{CACHE_4_TCOFFEE};}\nelse\n{\n    $cache=\"$HO\
2662 ME/.t_coffee/cache/\";\n}\n\n   \n$netaddress=\"ht\
2663 tp://www.rcsb.org/pdb/files/%%.pdb.gz\";\n$netcomp\
2664 ression_pg=\"gunzip\";\n$netcompression=\"gz\";\n\\
2665 nforeach ($np=0; $np<=$n_para; $np++)\n  {        \
2666 \n    $value=$ARGV[$np];\n   \n    if  ($np==0 && \
2667 !($value=~/^-.*/))\n      { \n  $pdb_file= $ARGV[$n\
2668 p];\n      }\n    elsif ( !($value=~/^-.*/))\n    \
2669   {\n   print \"@ARGV\";\n      die;\n      } \n    \n   \
2670  elsif ($value eq \"-nodiagnostic\"){$nodiagnostic\
2671 =1;}\n    elsif ($value eq \"-force\")\n      {\n       \
2672 $force_pdb=1;\n      }\n    elsif ($value eq \"-fo\
2673 rce_name\")\n      {\n  $force_name=$ARGV[++$np];\n\
2674         $force_pdb=1;\n      }\n    \n    elsif ($value e\
2675 q \"-is_pdb_name\")\n      {\n  $pdb_file= $ARGV[++\
2676 $np];   \n      $is_pdb_name=1; \n      } \n    elsif ($v\
2677 alue eq \"-is_released_pdb_name\")\n      {\n   $pdb\
2678 _file= $ARGV[++$np];    \n      $is_released_pdb_name=1;\n\
2679       }\n    elsif ($value eq \"-model_type\")\n  \
2680     {\n $pdb_file= $ARGV[++$np];        \n      $model_type=1;\
2681 \n      }\n    elsif ($value eq \"-debug\")\n{\n        $\
2682 debug=1;\n}\n    elsif ($value eq \"-get_pdb_chain\
2683 s\")\n{\n       $pdb_file= $ARGV[++$np];\n      $get_pdb_chai\
2684 ns=1;\n}\n    elsif ($value eq \"-get_pdb_ligands\\
2685 ")\n{\n $get_pdb_ligands=1;\n}\n    \n    elsif ($\
2686 value eq \"-get_pdb_id\")\n{\n  $pdb_file= $ARGV[++\
2687 $np];\n $get_pdb_id=1;\n        \n}\n    \n    elsif ( $v\
2688 alue eq \"-get_fugue_name\")\n{\n       $pdb_file= $ARGV\
2689 [++$np];\n      $get_fugue_name=1;\n}\n    elsif ( $val\
2690 ue eq \"-infile\")\n{\n       $pdb_file= $ARGV[++$\
2691 np];\n} \n    elsif ($value eq \"-netfile\")\n{\n       \
2692 $netfile=1;\n   if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_f\
2693 ile= $ARGV[++$np];}\n}\n    elsif (  $value eq \"-\
2694 num\")\n{\n       $numbering= $ARGV[++$np];\n}\n  \
2695   elsif (  $value eq \"-num_out\")\n{\n       $num\
2696 bering_out= $ARGV[++$np];\n}\n    elsif ( $value e\
2697 q \"-netaddress\")\n{\n $netadress=$ARGV[++$np];\n\
2698 }\n     \n    elsif ( $value eq \"-netcompression\\
2699 ")\n{\n  $netcompression=$ARGV[++$np];\n}\n    els\
2700 if ( $value eq \"-pdb_dir\")\n{\n        if ( !($ARGV[$n\
2701 p+1]=~/^-.*/)){$pdb_dir= \"$ARGV[++$np]/\";}\n}\n \
2702     elsif ( $value eq \"-no_remote_pdb_dir\")\n{\n\
2703         $no_remote_pdb_dir=1;\n if ( !($ARGV[$np+1]=~/^-.\
2704 */)){$pdb_dir= \"$ARGV[++$np]/\";}\n}\n    elsif (\
2705  $value eq \"-cache\")\n{\n     $cache=$ARGV[++$np];\n\
2706 }\n    \n    elsif ($value eq \"-netcompression_pg\
2707 \")\n{\n          $netcompression_pg=$ARGV[++$np];\n}\n  \
2708    elsif ($value eq \"-mode\")\n{\n       $MODE=$A\
2709 RGV[++$np];\n}\n\n    elsif ( $value eq \"-model\"\
2710 )\n{\n       $model= $ARGV[++$np];\n}\n    elsif (\
2711 $value eq \"-seq_field\" )\n{\n       $seq_field= \
2712 $ARGV[++$np];\n}   \n    elsif ($value eq \"-coor\\
2713 " )\n{\n       $start= $ARGV[++$np];\n  \n       i\
2714 f (($ARGV[$np+1] eq \"\") ||($ARGV[$np+1]=~/^-.*/)\
2715 ){$end=\"*\";} \n       else {$end=   $ARGV[++$np]\
2716 ;}     \n       $coor_set=1;\n}\n    elsif ($value\
2717  eq \"-delete\" )\n{\n       $delete_start= $ARGV[\
2718 ++$np];\n       $delete_end= $ARGV[++$np];\n      \
2719  $delete_set=1;\n}\n    elsif  ($value eq \"-code\\
2720 ")\n{\n       $code= $ARGV[++$np];\n}\n    elsif  \
2721 ($value eq \"-no_hetatm\")\n{\n       $no_hetatm=1\
2722 ;\n}\n    elsif ($value eq \"-chain\")\n{\n       \
2723 while (!($ARGV[$np+1] eq \"\") &&!($ARGV[$np+1]=~/\
2724 ^-.*/))\n{\n          ++$np;\n        @c_chain=(@chain\
2725 ,  $ARGV[$np]);\n             $hc_chain{$ARGV[$np]}=$#c_\
2726 chain+1;\n}           \n}\n    elsif ($value eq \"\
2727 -atom\")\n{\n\n       while (!($ARGV[$np+1] eq \"\\
2728 ") && !($ARGV[$np+1]=~/^-.*/))\n{\n           ++$np;\n\
2729               $atom[$n_atom++]=  $ARGV[$np];\n        $ato\
2730 m_list{$ARGV[$np]}=1;         \n} \n       \n}\n    \
2731 elsif ( $value eq \"-unfold\")\n{\n     $unfold=1;\n}\\
2732 n    elsif ($value eq \"-seq\" ||$value eq \"-fast\
2733 a\" )\n{\n       $MODE=\"fasta\";\n}\n    elsif ( \
2734 $value eq \"-version\")\n{\n    print STDERR  \"\\nex\
2735 tract_from_pdb: Version $VersionTag\\n\";\n     &myexi\
2736 t ($EXIT_SUCCESS);\n}\n    elsif ( $value eq \"-li\
2737 gand\")\n{\n    while (!($ARGV[$np+1] eq \"\") && !($\
2738 ARGV[$np+1]=~/^-.*/))\n{\n          ++$np;\n        $ligan\
2739 d=1;\n      $ligand_list{$ARGV[$np]}=1;       \n} \\
2740 n       $hc_chain{'LIGAND'}=1;\n}\n    elsif ( $value eq\
2741  \"-ligand_only\")\n{\n $ligand_only=1;\n}\n}\nif \
2742 ( $debug)\n{\n    print STDERR \"\\n[DEBUG:extract\
2743 _from_pdb] NO_REMOTE_PDB_DIR: $no_remote_pdb_dir\\\
2744 n\";\n    print STDERR \"\\n[DEBUG:extract_from_pd\
2745 b] PDB_DIR: $pdb_dir\\n\";\n}\n\n\nif ( $is_pdb_na\
2746 me)\n  {\n    if (&remote_is_pdb_name($pdb_file))\\
2747 n      {\n      print \"1\";\n      }\n    else\n      \
2748 {\n     print \"0\";\n      }\n    exit ($EXIT_SUCCESS\
2749 );\n  }\n\nif ( $is_released_pdb_name)\n  {\n    \\
2750 n    if (&is_released($pdb_file))\n      {\n    print\
2751  \"1\";\n      }\n    else\n      {\n   print \"0\";\
2752 \n      }\n    exit ($EXIT_SUCCESS);\n  }\nif ($mo\
2753 del_type)\n  {\n   \n    printf \"%s\", &pdb2model\
2754 _type($pdb_file);\n    exit ($EXIT_SUCCESS);\n    \
2755 \n  }\n    \n\nif (!$force_name)\n{\n    $pdb_file\
2756 =~/([^\\/]*)$/;\n    $force_name=$1;\n}\n\n$local_\
2757 pdb_file=$pdb_file;\n\nif ( $debug){print STDERR \\
2758 "\\n[DEBUG: extract_from_pdb] Scan For $local_pdb_\
2759 file\\n\";}\n\n$mem=$no_remote_pdb_dir;\n$no_remot\
2760 e_pdb_dir=1;\n$tmp_pdb_file=get_pdb_file ($local_p\
2761 db_file);\n\nif ( !-e $tmp_pdb_file || $tmp_pdb_fi\
2762 le eq \"\")\n  {\n    $local_pdb_file=$pdb_file;\n\
2763     ($local_pdb_file, $suffix_chain)=&pdb_name2nam\
2764 e_and_chain($local_pdb_file);\n\n    if ($local_pd\
2765 b_file)\n      {\n      if ( $debug){print STDERR \"\\n\
2766 Split $pdb_file into $local_pdb_file and $suffix_c\
2767 hain \\n\";}\n  $tmp_pdb_file=get_pdb_file ($local_\
2768 pdb_file);\n    if ( $tmp_pdb_file ne \"\")\n     {\n    \
2769    @c_chain=();\n           @c_chain=($suffix_chain);\n \
2770     %hc_chain=();\n         $hc_chain{$suffix_chain}=1\
2771 ;\n       }\n      }\n  }\n\n$no_remote_pdb_dir=$mem;\\
2772 nif ($no_remote_pdb_dir==0)\n  {\n    \n    if ( !\
2773 -e $tmp_pdb_file || $tmp_pdb_file eq \"\")\n      \
2774 {\n     \n      $local_pdb_file=$pdb_file;\n    ($local_pdb_fi\
2775 le, $suffix_chain)=&pdb_name2name_and_chain($local\
2776 _pdb_file);\n   if ($local_pdb_file)\n    {\n       \n  \
2777     if ( $debug){print STDERR \"\\nSplit $pdb_file\
2778  into $local_pdb_file and $suffix_chain \\n\";}\n       \
2779     \n      $tmp_pdb_file=get_pdb_file ($local_pdb_\
2780 file);    \n        \n      if ( $tmp_pdb_file ne \"\"\
2781 )\n           {\n               @c_chain=();\n          @c_chain=($suffix_c\
2782 hain);\n                %hc_chain=();\n         $hc_chain{$suffix_chain\
2783 }=1;\n        }\n         }\n      }\n  }\n\nif ( $debug)\
2784 {print STDERR \"\\n$pdb_file copied into ##$tmp_pd\
2785 b_file##\\n\";}\n\nif ( !-e $tmp_pdb_file || $tmp_\
2786 pdb_file eq \"\")\n{\n  if ($is_pdb_name)\n{\n      \
2787 print \"0\\n\"; exit ($EXIT_SUCCESS);\n}\n      else\n{\
2788 \n  \n      print \"\\nEXTRACT_FROM_PDB: NO RESULT \
2789 for $pdb_file\\n\";\n       &myexit ($EXIT_SUCCESS);\
2790         \n}\n}\n\n\n\n\n%molecule_type=&pdbfile2chaintype\
2791 ($tmp_pdb_file);\nif ( $debug){print STDERR \"\\n\\
2792 \tSequence Type determined\\n\";}\n\n$pdb_id=&get_\
2793 pdb_id ($tmp_pdb_file);\nif ( $debug){print STDERR\
2794  \"\\n\\tID: $pdb_id (for $tmp_pdb_file)\\n\";}\n\\
2795 nif ( $pdb_id eq \"\"){$pdb_id=$force_name;}\n\n@f\
2796 _chain=&get_chain_list ($tmp_pdb_file);\nif ( $deb\
2797 ug){print STDERR \"\\n\\tChain_list:@f_chain\\n\";\
2798 }\n\nif ( $get_pdb_chains)\n{\n    print \"@f_chai\
2799 n\\n\";\n    &myexit ($EXIT_SUCCESS);\n}\nif ( $ge\
2800 t_pdb_ligands)\n{\n    %complete_ligand_list=&get_\
2801 ligand_list ($tmp_pdb_file);\n    print $complete_\
2802 ligand_list{\"result\"};\n    &myexit ($EXIT_SUCCE\
2803 SS);\n}\n\nelsif ( $get_pdb_id ||$get_fugue_name )\
2804 \n{\n    if    (@c_chain && $c_chain[0] eq \"FIRST\
2805 \"){$pdb_id=$pdb_id.$f_chain[0];}\n    elsif (@c_c\
2806 hain && $c_chain[0] ne \" \"){$pdb_id=$pdb_id.$c_c\
2807 hain[0];}\n    \n    print \"$pdb_id\\n\";\n    &m\
2808 yexit ($EXIT_SUCCESS);\n    \n}\nelsif ( $is_pdb_n\
2809 ame)\n{\n    printf \"1\\n\";\n    &myexit ($EXIT_\
2810 SUCCESS);\n}\n\n\n\n$structure_file=vtmpnam();\n\n\
2811 if ( $debug){print STDERR \"\\n\\tCheck_point #1: \
2812 $tmp_pdb_file  $structure_file\\n\";}\n\n$INFILE=v\
2813 fopen (\"$tmp_pdb_file\", \"r\"); \n$TMP=vfopen (\\
2814 "$structure_file\", \"w\");\n\n$print_model=1;\n$i\
2815 n_model=0;\n\nif ( $debug){print STDERR \"\\n\\tCh\
2816 eck_point #2\\n\";}\nwhile ( <$INFILE>)\n{\n  my $\
2817 first_model=0;\n  $line=$_;\n\n  if ( !$first_mode\
2818 l && ($line =~/^MODEL\\s*(\\d*)/))\n    {\n      $\
2819 first_model=$1;\n      if ($model==1){$model=$firs\
2820 t_model;}\n    }\n  \n  if (($line =~/^MODEL\\s*(\\
2821 \d*)/))\n    {\n      if ($1==$model)\n {\n       $in_\
2822 model=1;\n        $print_model=1;\n       $is_nmr=1;\n  }\n \
2823      elsif ( $in_model==0)\n    {\n       $print_model=0;\
2824 \n      }\n      elsif ( $in_model==1)\n        {\n       last;\n       \
2825 }\n    }\n  if ($print_model){print $TMP $line;}  \
2826 \n}\nclose ($TMP);\nclose ($INFILE);\n\nif ( $debu\
2827 g){print STDERR \"\\n\\tCheck_point #3\\n\";}   \n\n\
2828   if ($numbering eq \"\"){$numbering=\"absolute\";\
2829 }\n  if ($numbering_out eq \"\"){$numbering_out=\"\
2830 new\";}\n\n  if ( $delete_set && $coor_set) {die \\
2831 "-delete and -coor are mutually exclusive, sorry\\\
2832 n\";}\n  if ( $n_atom==0){$atom_list[$n_atom++]=\"\
2833 ALL\";$atom_list{$atom_list[0]}=1;}\n  if ( $seq_f\
2834 ield eq \"\"){$seq_field=\"ATOM\";}\n  \n  if ( $M\
2835 ODE eq \"\"){$MODE=\"pdb\";}\n  elsif ( $MODE eq \\
2836 "simple\" && $code==0){$code=1;}\n\n  if ( $code==\
2837 0){$code=3;}\n\n\nif ($f_chain[0] eq \" \"){$hc_ch\
2838 ain{' '}=1;$c_chain[0]=\" \";}\nelsif (!@c_chain){\
2839 $hc_chain{FIRST}=1;$c_chain[0]=\"FIRST\";}#make su\
2840 re the first chain is taken by default\n\nif    ($\
2841 hc_chain{ALL}) \n{\n      @c_chain=@f_chain;\n    \
2842   foreach $e (@c_chain){$hc_chain{$e}=1;}\n}\nelsi\
2843 f($hc_chain{FIRST})\n{\n        @c_chain=($f_chain[0]);\n\
2844         $hc_chain{$f_chain[0]}=1;\n}\n\n\n$MAIN_HOM_CODE=\
2845 &get_main_hom_code ($structure_file);\n$INFILE=vfo\
2846 pen ($structure_file, \"r\");\n\n\nif ( $MODE eq \\
2847 "raw_pdb\" || $MODE eq \"raw\")\n{\n    while (<$I\
2848 NFILE>)\n{      print \"$_\";}\n    close ( $INFILE);\n\
2849     &myexit($EXIT_SUCCESS);\n}    \nif ( $MODE eq \
2850 \"raw4fugue\" )\n{\n    while (<$INFILE>)\n{    \n      $l\
2851 =$_;\n  if ($l=~/^SEQRES/)\n{\n     \n      $c= subs\
2852 tr($l,11,1);\n      if ($hc_chain {$c}){print \"$l\\
2853 ";}\n}\n        elsif ( $l=~/^ATOM/)\n{\n           $c=substr($\
2854 l,21,1);\n          if ($hc_chain {$c}){print \"$l\";}\\
2855 n}\n}\n    close ( $INFILE);\n    &myexit($EXIT_SU\
2856 CCESS);\n}    \n\nif ( $MODE eq \"pdb\")\n{\n\n   \
2857  $read_header=0;\n    while (<$INFILE>) \n{\n       \
2858 $line=$_;\n         if    ($line =~ /^HEADER/){print \\
2859 "$line\";$read_header=1;}\n}\n    close ($INFILE);\
2860 \n\n    if (!$read_header)\n{\n print \"HEADER    \
2861 UNKNOWN                                 00-JAN-00 \
2862   $force_name\\n\";\n}\n\n    $INFILE=vfopen ($str\
2863 ucture_file, \"r\");\n    \n    print \"COMPND   1\
2864  CHAIN:\";\n    $last=pop(@c_chain);\n    foreach \
2865 $c ( @c_chain){ print \" $c,\";}\n    if ( $last e\
2866 q \" \"){print \" NULL;\\n\";}\n    else \n{\n    \
2867   print \" $last;\\n\";\n}\n    @c_chain=(@c_chain\
2868 , $last);\n    \n    print \"REMARK Output of the \
2869 program extract_from_pdb (Version $VersionTag)\\n\\
2870 ";\n    print \"REMARK Legal PDB format not Guaran\
2871 teed\\n\";\n    print \"REMARK This format is not \
2872 meant to be used in place of the PDB format\\n\";\\
2873 n    print \"REMARK The header refers to the origi\
2874 nal entry\\n\";\n    print \"REMARK The sequence f\
2875 rom the original file has been taken in the field:\
2876  $seq_field\\n\";\n    print \"REMARK extract_from\
2877 _pdb, 2001, 2002, 2003, 2004, 2005 2006 (c) CNRS a\
2878 nd Cedric Notredame\\n\";   \n    if ( $coor_set)\\
2879 n{\n       print \"REMARK Partial chain: Start $st\
2880 art End $end\\n\";\n}\n    if ( $is_nmr)\n{\n     \
2881   print \"REMARK NMR structure: MODEL $model\\n\";\
2882 \n}\n   \n    if ( $n_atom!=0)\n{\n       print \"\
2883 REMARK Contains Coordinates of: \";\n       foreac\
2884 h $a (@atom){print \"$a \";}\n       print \"\\n\"\
2885 ;\n}  \n}\n\n\n\n\nmy $residue_index = -999;\nmy $\
2886 old_c = \"TemporaryChain\";\n\nwhile (<$INFILE>) \\
2887 n{\n    $line=$_;\n\n\n if ($line =~ /^SEQRES/)\n{\n\\
2888 n               @field=/(\\S*)\\s*/g;\n\n               $c= substr($_,11,1);\
2889 \n\n            \n              $l=$#field;\n           for ($a=4; $a<$#field ;)\\
2890 n{\n                    if (!$onelett{$molecule_type{$c}}->{$field[\
2891 $a]})\n{\n                              splice @field, $a, 1;\n}\n                      else \n\
2892 {\n                             $a++;\n}\n}\n   \n              if ( $c ne $in_chain)\n{\\
2893 n                       $pdb_chain_list[$n_pdb_chains]=$c;\n                    $pdb_ch\
2894 ain_len [$n_pdb_chains]=$len;\n                 $in_chain=$c;\n \
2895                 $n_pdb_chains++;\n}\n   \n              for ( $a=4; $a<$#field\
2896 ;$a++)\n{\n                     @{$complete_seq{$c}}->[$complete_seq\
2897 _len{$c}++]=$field[$a];\n}\n}\n    elsif ( $line=~\
2898 /^ATOM/ || ($line=~/^HETATM/ && &is_aa(substr($lin\
2899 e,17,3),substr($line,21,1)) && !$no_hetatm))\n{\n\\
2900 n        \n    $RAW_AT_ID=$AT_ID=substr($line,12,4);\n  $\
2901 RES_ID=&is_aa(substr($line,17,3),substr($line,21,1\
2902 ));\n   $CHAIN=substr($line,21,1);\n\n    $RES_NO=su\
2903 bstr($line,22,4);\n     $HOM_CODE=substr ($line, 26, 1\
2904 );\n    $TEMP=substr($line,60,6);\n     \n      $TEMP=~s/\\s//\
2905 g;\n        $AT_ID=~s/\\s//g;\n $RES_ID=~s/\\s//g;\
2906 \n        $RES_NO=~s/\\s//g;\n          \n      if ( $HOM_CODE \
2907 ne $MAIN_HOM_CODE){next;}\n     elsif ( $already_read2\
2908 {$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO}){next;}\n    else{\
2909 $already_read2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO}=1\
2910 ;}\n    \n      \n      if ($coor_set && $numbering eq \"file\"\
2911  && $residue_index ne $RES_NO)\n{\n         \n      if \
2912 ( $RES_NO<=$start){$real_start{$CHAIN}++;}\n        i\
2913 f ( $RES_NO<=$end){$real_end{$CHAIN}++;}\n}\n   elsi\
2914 f ($numbering eq \"absolute\")\n{\n         $real_star\
2915 t{$CHAIN}=$start;\n         $real_end{$CHAIN}=$end;\n}\
2916 \n\n        $KEY=\"ALL\";\n        if ( $CHAIN ne \
2917 $in_atom_chain)\n{\n        \n    $pdb_atom_chain_list\
2918 [$n_pdb_atom_chains]=$c;\n        $pdb_atom_chain_len [\
2919 $n_pdb_atom_chains]=$len;\n       $in_atom_chain=$c;\n\
2920           $n_pdb_atom_chains++;\n}\n    \n      if ( $residue_ind\
2921 ex ne $RES_NO)\n{\n          $residue_index = $RES_NO;\
2922 \n           @{$atom_seq{$CHAIN}}->[$atom_seq_len{$CHAI\
2923 N}++]=$RES_ID;;\n}\n}\n\n}\nclose ($INFILE);\n\n\n\
2924 \n\n\n\n$INFILE=vfopen ($structure_file, \"r\");\n\
2925 foreach $c (@c_chain)\n{\n\n    if    ( $seq_field eq\
2926  \"SEQRES\"){@pdb_seq=@{$complete_seq{$c}};}\n  els\
2927 if ( $seq_field eq \"ATOM\")  {@pdb_seq=@{$atom_se\
2928 q{$c}};}\n      \n\n    $full_length=$l=$#pdb_seq+1;\n          \n\
2929         if ( $real_end{$c}==\"*\"){$real_end{$c}=$full_le\
2930 ngth;}\n        if ( $coor_set)\n{         \n\n    if ( $real_\
2931 end{$c} < $l){splice @pdb_seq, $real_end{$c}, $l;}\
2932 \n         if ( $real_start{$c} < $l){splice @pdb_seq, \
2933 0, $real_start{$c}-1;}             \n      $l=$#pdb_seq;\n\
2934 }\n\n   elsif ( $delete_set)\n{\n          splice @pdb_seq\
2935 , $delete_start, $delete_end-$delete_start+1;\n   \
2936  $l=$#pdb_seq;\n}\n     \n      $new_fasta_name=\"$pdb_id$c\
2937 \";\n   if ( $coor_set)\n{\n       if ( $n_pdb_chains==\
2938 0){$new_fasta_name=\"$new_fasta_name$c\";}\n       $n\
2939 ew_fasta_name= $new_fasta_name.\"\\_$start\\_$end\\
2940 ";\n}\n    \n   if ( $MODE eq \"pdb\")\n{\n        $nl=1\
2941 ;\n        $n=0;\n         \n      foreach $res ( @pdb_seq)\n\
2942                 {\n             if ( !$n)\n             {\n             \n               printf \"SEQRES %3d \
2943 %1s %4d  \", $nl,$c, $l;\n               $nl++;\n       }\n          $re\
2944 s=~s/\\s//g;\n       \n      if ($code==1){ printf \
2945 \"%3s \",$onelett{$molecule_type{$c}}->{$res};}\n       \
2946      elsif  ($code==3){ printf \"%3s \",$res};\n         \
2947     \n       $n++;                \n         if ( $n==13){$n=0;pri\
2948 nt \"\\n\";}\n}\n         if ( $n!=0){print \"\\n\"; $n=\
2949 0;}\n}\n        elsif ( $MODE eq \"simple\")\n{\n         print\
2950  \"# SIMPLE_PDB_FORMAT\\n\";\n    if ( $new_fasta_n\
2951 ame eq \" \"){$new_fasta_name=\"dummy_name\";}\n         \
2952  print \">$new_fasta_name\\n\";\n\n       foreach $res\
2953  ( @pdb_seq)\n{\n             print \"$onelett{$molecule\
2954 _type{$c}}->{$res}\";\n}\n        print \"\\n\";\n}\n   e\
2955 lsif ( $MODE eq \"fasta\")\n{\n   $n=0;\n         print \
2956 \">$new_fasta_name\\n\";\n        \n      foreach $res ( @\
2957 pdb_seq)\n{\n\n       print \"$onelett{$molecule_t\
2958 ype{$c}}->{$res}\";\n              $n++;\n            i\
2959 f ( $n==60){print \"\\n\"; $n=0;}\n}\n    print \"\\
2960 \n\"; \n}\n}\n\nif ( $MODE eq \"fasta\")\n{\n     \
2961 &myexit($EXIT_SUCCESS);\n  \n}\n\n  \n  $charcount\
2962 =0;\n  $inchain=\"BEGIN\";\n  $n=0;\n  while (<$IN\
2963 FILE>) \n{\n    $line=$_;\n     \n    if ($line =~\
2964 /^ATOM/  ||  ($line=~/^HETATM/))\n{\n   $line_header\
2965 =\"UNKNWN\";\n  $RES_ID=substr($line,17,3);\n   $chai\
2966 n = substr($line,21,1);\n\n     if ($line =~/^ATOM/)\n\
2967 {\n         $line_header=\"ATOM\";\n        $RES_ID=(&is_\
2968 aa($RES_ID,$chain))?&is_aa($RES_ID,$chain):$RES_ID\
2969 ;\n}\n  elsif ($line=~/^HETATM/ && ($ligand_list {$\
2970 RES_ID} ||$ligand_list {'ALL'} || !&is_aa($RES_ID,\
2971 $chain)))\n{\n      $line_header=\"HETATM\";\n}\n       e\
2972 lsif ($line=~/^HETATM/ && (&is_aa($RES_ID,$chain) \
2973 && !$no_hetatm))\n{\n       $line_header=\"ATOM\";\n\
2974             $RES_ID=&is_aa($RES_ID,$chain);\n}\n        else\n{\\
2975 n           next;\n}\n\n        \n\n    $X=substr($line,30,8);    \
2976  \n     $Y=substr($line,38,8);\n        $Z=substr($line,46,8)\
2977 ;\n     $TEMP=substr($line,60,6);\n     \n      $RAW_AT_ID=$AT_\
2978 ID=substr($line,12,4);\n        $CHAIN=substr($line,21,1)\
2979 ;\n     $RES_NO=substr($line,22,4);\n   $HOM_CODE=substr\
2980  ($line, 26, 1);\n      \n      $X=~s/\\s//g;\n $Y=~s/\\s//g\
2981 ;\n     $Z=~s/\\s//g;\n $TEMP=~s/\\s//g;\n      \n      $AT_ID=~\
2982 s/\\s//g;\n     $RES_ID=~s/\\s//g;\n    $RES_NO=~s/\\s//g\
2983 ;\n\n   \n      if ( $HOM_CODE ne $MAIN_HOM_CODE){next;}\\
2984 n       elsif ( $already_read{$CHAIN}{$RES_ID}{$AT_ID}{$\
2985 RES_NO}){next;}\n       else{$already_read{$CHAIN}{$RES_\
2986 ID}{$AT_ID}{$RES_NO}=1;}\n      \n      $KEY=\"ALL\";\n\n   \
2987         if ( $RES_NO ==0){$start_at_zero=1;}\n\n        $RES_\
2988 NO+=$start_at_zero;    \n       \n      if ( $current_chain n\
2989 e $CHAIN)\n{\n      $current_chain=$CHAIN;\n        $p\
2990 os=$current_residue=0;\n            $offset=($coor_set)?(\
2991 $real_start{$CHAIN}-1):0;\n         if    ( $seq_field\
2992  eq \"SEQRES\"){@ref_seq=@{$complete_seq{$CHAIN}};\
2993 }\n         elsif ( $seq_field eq \"ATOM\")  {@ref_seq\
2994 =@{$atom_seq{$CHAIN}};}\n}\n    \n      if ($current_resid\
2995 ue != $RES_NO)\n{\n         $current_residue=$RES_NO;\\
2996 n           if    ( $seq_field eq \"SEQRES\"){$pos=$curr\
2997 ent_residue;}\n     elsif ( $seq_field eq \"ATOM\"\
2998 ){$pos++;}\n}\n \n      \n      if ($n_atom==0 || $atom_list\
2999 {$AT_ID}==1 || $atom_list{$KEY}==1)\n{  \n          \n  \
3000     $do_it=(!@c_chain || $hc_chain{$CHAIN} ||$hc_c\
3001 hain{'LIGAND'} );\n         \n      $do_it= ($do_it==1)\
3002  && ($coor_set==0 ||($pos>=$real_start{$CHAIN} && \
3003 $pos<=$real_end{$CHAIN}));\n        $do_it= ($do_it==\
3004 1) && ($delete_set==0 || $pos<$delete_start ||$pos\
3005 >$delete_end );\n           if ($ligand==0 && $line_head\
3006 er eq \"HETATM\" ){$do_it=0;}\n     if ($ligand_on\
3007 ly==1 && $line_header eq \"ATOM\" ){$do_it=0;}\n         \
3008    if ($ligand==1 && $line_header eq \"HETATM\" &&\
3009  $ligand_list{$RES_ID}==0 && $ligand_list{\"ALL\"}\
3010 ==0){$do_it=0;} \n          \n      \n      if ( $do_it)\\
3011 n{\n            $n++;\n         $out_pos=$pos;\n                \n             if ( $d\
3012 elete_set)\n{\n           if ( $out_pos< $delete_start){;\
3013 }\n               else {$offset=$delete_end-$delete_start;}\n\
3014 }       \n             \n              if ( $numbering_out eq\
3015  \"new\"){$out_pos-=$offset;}\n        elsif ( $nu\
3016 mbering_out eq \"old\"){$out_pos=$RES_NO;}\n         \
3017   \n       \n          \n              if ( $code==1){$RES\
3018 _ID=$onelett{$molecule_type{$c}}->{$RES_ID};}\n   \
3019   \n           if ($unfold)\n{\n                   $unfolded_x+=5;\\
3020 n                  $X=$unfolded_x;\n               $Y=0;\n                 $Z=0;\n               \
3021   $float=1;\n}\n               else\n{\n                   $float=3;\n}\
3022 \n\n           if ( $MODE eq \"pdb\")\n{\n                 printf\
3023  \"%-6s%5d %-4s %3s %s%4d    %8.3f%8.3f%8.3f  1.00\
3024  %5.2f\\n\",$line_header, $n, $RAW_AT_ID,$RES_ID,$\
3025 CHAIN,$out_pos, $X, $Y, $Z,$TEMP;                 \n}\n        \
3026 elsif ( $MODE eq \"simple\")\n{\n                   if ( $RES_I\
3027 D eq \"\"){$RES_ID=\"X\";}\n              printf \"%-6s %5s \
3028 %s %2s %4d    %8.3f %8.3f %8.3f\\n\",$line_header,\
3029  $AT_ID, $RES_ID,($CHAIN eq\"\" || $CHAIN eq \" \"\
3030 )?\"A\":$CHAIN,$out_pos, $X, $Y, $Z,$TEMP;\n}\n\n}\
3031 \n}\n}\n}\nprint \"\\n\";\nclose($INFILE);\n\n\nif\
3032  ( $error ne \"\") \n{$error=$error.\"\\nDiagnosti\
3033 c:    SEQRES and the residues in ATOM are probably\
3034  Incompatible\\n\";\n    $error=$error.  \"Recomen\
3035 dation: Rerun with '-fix 1' in order to ignore the\
3036  SEQRES sequences\\n\";\n}\nif (!$nodiagnostic){pr\
3037 int STDERR $error;}\n&myexit ( $EXIT_SUCCESS);\n\n\
3038 sub is_released \n  {\n    my ($r);\n    my $in=@_\
3039 [0];\n    my $name=&remote_is_pdb_name ($in);\n   \
3040  my $hold=&remote_is_on_hold($in);\n    \n    $r=(\
3041 $name && !$hold)?1:0;\n    return $r;\n  }\nsub re\
3042 mote_is_pdb_name \n{\n    my $in=@_[0];\n    my ($\
3043 ref_file, $pdb);\n    my ($value,$value1,$value2);\
3044 \n\n    if ( $in=~/[^\\w\\d\\:\\_]/){return 0;}\n \
3045    $ref_file=\"$cache/pdb_entry_type.txt\";\n    \\
3046 n    if ( !-e $ref_file || (-M $ref_file)>2 || -z \
3047 $ref_file)\n      {\n   &url2file(\"ftp://ftp.wwpdb.\
3048 org/pub/pdb/derived_data/pdb_entry_type.txt\", $re\
3049 f_file);\n      }\n    $pdb=substr ($in,0, 4);\n  \
3050   chomp(($value1=`grep -c $pdb $ref_file`));\n    \
3051 $pdb=lc($pdb);\n    chomp(($value2=`grep -c $pdb $\
3052 ref_file`));\n    $value=($value1 || $value2)?1:0;\
3053 \n    $value=($value>0)?1:0;\n    \n    return $va\
3054 lue;\n  }\n\nsub pdb2model_type\n{\n    my $in=@_[\
3055 0];\n    my ($ref_file, $pdb);\n    my ($value, $r\
3056 et);\n\n    if ( $in=~/[^\\w\\d\\:\\_]/){return 0;\
3057 }\n    $ref_file=\"$cache/pdb_entry_type.txt\";\n \
3058    \n    if ( !-e $ref_file || (-M $ref_file)>2 ||\
3059  -z $ref_file)\n      {\n       &url2file(\"ftp://ftp.ww\
3060 pdb.org/pub/pdb/derived_data/pdb_entry_type.txt\",\
3061  $ref_file);\n      }\n    $pdb=substr ($in,0, 4);\
3062 \n    $pdb=lc($pdb);\n    \n    chomp(($value=`gre\
3063 p $pdb $ref_file`));\n    \n    $value=~/^\\S+\\s+\
3064 \\S+\\s+(\\S+)/;\n    $ret=$1;\n    if ( $ret eq\"\
3065 \"){return \"UNKNOWN\";}\n    \n    return $ret;\n\
3066   }\nsub remote_is_on_hold\n  {\n    my $in=@_[0];\
3067 \n    my ($ref_file, $pdb);\n    my ($value1, $val\
3068 ue2,$value);\n    \n    if ( $in=~/[^\\w\\d\\:\\_]\
3069 /){return 0;}\n    $ref_file=\"$cache/unreleased.x\
3070 ml\";\n    \n    if ( !-e $ref_file || (-M $ref_fi\
3071 le)>2 || -z $ref_file)\n      {\n       &url2file(\"http\
3072 ://www.rcsb.org/pdb/rest/getUnreleased\",$ref_file\
3073 );\n      }\n    \n    $pdb=substr ($in,0, 4);\n  \
3074   chomp(($value1=`grep -c $pdb $ref_file`));\n    \
3075 $pdb=lc($pdb);\n    chomp(($value2=`grep -c $pdb $\
3076 ref_file`));\n    $value=($value1 || $value2)?1:0;\
3077 \n    $value=($value>0)?1:0;\n    return $value;\n\
3078   }\nsub is_pdb_file\n{\n    my @arg=@_;\n\n    if\
3079  ( !-e $arg[0]){return 0;}\n    \n    $F=vfopen ($\
3080 arg[0], \"r\");\n    while ( <$F>)\n{\n if (/^HEAD\
3081 ER/)\n{\n           close $F;\n     return 1;\n}\n      elsif\
3082  ( /^SEQRES/)\n{\n          close $F;\n     return 1;\n\
3083 }\n     elsif ( /^ATOM/)\n{\n       close $F;\n     retu\
3084 rn 1;\n}\n}\n    return 0;\n}\nsub get_pdb_id\n{\n\
3085     my $header_file=@_[0];\n    my $id;\n    my $F\
3086 = new FileHandle;\n    \n    \n    $F=vfopen (\"$h\
3087 eader_file\", \"r\");\n\n    while ( <$F>)\n      \
3088 {\n     if ( /HEADER/)\n          {\n       if ($debug){print \\
3089 "$_\";}\n           $id=substr($_,62,4 );\n         return $\
3090 id;\n     }\n      }\n    close ($F);\n    \n    ret\
3091 urn \"\";\n}\n\nsub get_ligand_list\n{\n    my $pd\
3092 b_file=@_[0];\n    my $chain;\n    my $ligand;\n  \
3093   my %complete_ligand_list;\n    \n\n    $F=vfopen\
3094  ($pdb_file, \"r\");\n    while ( <$F>)\n{\n    if ( \
3095 /^HETATM/)\n{\n     $line=$_;\n     $chain=substr(\
3096 $line,21,1);\n      $ligand=substr($line,17,3);\n        \
3097    \n       if (!$complete_ligand_list{$chain}{$liga\
3098 nd})\n{\n               \n              $complete_ligand_list{\"result\"}.=\
3099 \"CHAIN $chain LIGAND $ligand\\n\";\n           $complete_l\
3100 igand_list{$chain}{$ligand}=1;\n}\n}\n}\n    close\
3101  ($F);\n    return %complete_ligand_list;\n}\n\nsu\
3102 b get_chain_list \n{\n    my $header_file;\n    my\
3103  @chain_list;\n    my @list;\n    my $n_chains;\n \
3104    my %chain_hasch;\n    my $pdb_file=@_[0];\n    \
3105 my $c;\n    my %hasch;\n    my $chain;\n  \n    \n\
3106     $F=vfopen ($pdb_file, \"r\");\n    while ( <$F\
3107 >)\n{\n\n\n     if (/SEQRES\\s+\\d+\\s+(\\S+)/)\n         {\\
3108 n           $chain = substr($_,11,1);$chain=~s/\\s//g;if\
3109  ( $chain eq \"\"){$chain=\" \";}\n         if (!$hasc\
3110 h{$chain}){$hasch{$chain}=1;push @chain_list, $cha\
3111 in;}\n    }\n   if (/^ATOM/ || /^HETATM/)\n       {\n      \
3112  $chain = substr($_,21,1); $chain=~s/\\s//g;if ( $\
3113 chain eq \"\"){$chain=\" \";}\n     if (!$hasch{$c\
3114 hain}){$hasch{$chain}=1;push @chain_list, $chain;}\
3115 \n        }\n      }\n\n\nclose ($F);\nif (!@chain_list\
3116 )\n  {\n    @chain_list=(\"A\");\n  }\n\n\nreturn \
3117 @chain_list;\n}\n\nsub token_is_in_list\n{\n\n    \
3118 my @list=@_;\n    my $a;\n    \n    for ($a=1; $a<\
3119 =$#list; $a++)\n{\n     if ( $list[$a] eq $list[0]){re\
3120 turn $a;}\n}\n}\n\nsub pdb_name2name_and_chain \n{\
3121 \n    my $pdb_file=@_[0];\n    my $pdb_file_in;\n \
3122    my @array;\n    my $chain;\n    my $c;\n\n    $\
3123 pdb_file_in=$pdb_file;\n\n    $pdb_file=~/^(.{4})/\
3124 ;$pdb_id=$1;\n    @array=($pdb_file=~/([\\w])/g);\\
3125 n  \n  \n    $chain=uc ($array[4]);\n    $chain=($\
3126 chain eq \"\")?\"FIRST\":$chain;\n    \n    return\
3127  ( $pdb_id, $chain);\n\n    if ( $#array==3){retur\
3128 n ($pdb_id, \"FIRST\");}\n    elsif ( $#array<4){ \
3129 return ($pdb_id, \"\");}\n    else {return ( $pdb_\
3130 id, $chain);}\n      \n    \n    \n}\nsub get_main\
3131 _hom_code \n{\n    my $pdb_file=@_[0];\n    my %ho\
3132 m, $n, $best, $best_h;\n    open (F, $pdb_file);\n\
3133     while (<F>)\n{\n    if ( $_=~/^ATOM/)\n{\n      $h\
3134 =substr ($_,26, 1);\n       $n=++$hom{$h};\n        if \
3135 ($n>$best)\n{\n         $best=$n;\n             $best_h=$h;\n}\n}\n}\
3136 \n    close (F);\n    return $best_h;\n}\n\n\nsub \
3137 get_pdb_file \n{\n    my ($pdb_file_in)=(@_);\n   \
3138  my $result;\n    my @letter;\n    my @chain;\n   \
3139  my $v;\n    my $pdb_file=$pdb_file_in;\n\n    $pd\
3140 b_file=($pdb_file_in=~/\\S+_S_(\\S+)/)?$1:$pdb_fil\
3141 e_in;\n    \n    if ($no_remote_pdb_dir==0)\n     \
3142  {\n    $no_remote_pdb_dir=1;\n $result=get_pdb_file3\
3143  ($pdb_file);\n $no_remote_pdb_dir=0;\n if ( $resu\
3144 lt){return $result;}\n  else\n    {\n       \n      lc \
3145 ($pdb_file);\n      $result=get_pdb_file3($pdb_file\
3146 );\n        return  $result;\n    }\n      }\n    else\
3147 \n      {\n     return get_pdb_file3 ($pdb_file);\n   \
3148    }\n    \n  }\n\nsub get_pdb_file3 \n{\n    my $\
3149 pdb_file_in=@_[0];\n    my $result;\n    my @lette\
3150 r;\n    my @chain;\n    my $lcfile;\n    my $ucfil\
3151 e;\n    my $pdb_file=$pdb_file_in;\n    \n    $lcf\
3152 ile=lc $pdb_file;\n    $ucfile=uc $pdb_file;\n\n  \
3153   if ( ($result=get_pdb_file2 ($pdb_file))){return\
3154  $result;}\n    \n\n    if ($lcfile ne $pdb_file &\
3155 & ($result=get_pdb_file2 ($lcfile))){return $resul\
3156 t;}\n    if ($ucfile ne $pdb_file && ($result=get_\
3157 pdb_file2 ($ucfile))){return $result;}\n    \n   \\
3158 n    \n    return \"\";\n}\nsub get_pdb_file2\n{\n\
3159     my $pdb_file=@_[0];\n    my $return_value;\n  \
3160   \n    $return_value=\"\";\n    \n    if ( ($resu\
3161 lt=get_pdb_file1 ($pdb_file))){$return_value=$resu\
3162 lt;}\n    elsif ( !($pdb_file=~/\\.pdb/) && !($pdb\
3163 _file=~/\\.PDB/))\n{\n  if ( ($result=get_pdb_file1\
3164  (\"$pdb_file.pdb\"))){$return_value=$result;}\n        e\
3165 lsif ( ($result=get_pdb_file1 (\"$pdb_file.PDB\"))\
3166 ){$return_value=$result;}\n\n   elsif ( ($result=get\
3167 _pdb_file1 (\"pdb$pdb_file.pdb\"))){$return_value=\
3168 $result;}       \n      elsif ( ($result=get_pdb_file1 (\"pdb\
3169 $pdb_file.PDB\"))){$return_value=$result;}\n    elsif\
3170  ( ($result=get_pdb_file1 (\"PDB$pdb_file.PDB\")))\
3171 {$return_value=$result;}\n      elsif ( ($result=get_pd\
3172 b_file1 (\"PDB$pdb_file.pdb\"))){$return_value=$re\
3173 sult;}\n        \n      \n      elsif ( ($result=get_pdb_file1 (\"$\
3174 pdb_file.ent\"))){$return_value=$result;}\n     elsif \
3175 ( ($result=get_pdb_file1 (\"pdb$pdb_file.ent\"))){\
3176 $return_value=$result;}\n       elsif ( ($result=get_pdb\
3177 _file1 (\"PDB$pdb_file.ent\"))){$return_value=$res\
3178 ult;}\n\n       elsif ( ($result=get_pdb_file1 (\"$pdb_f\
3179 ile.ENT\"))){$return_value=$result;}\n  elsif ( ($r\
3180 esult=get_pdb_file1 (\"pdb$pdb_file.ENT\"))){$retu\
3181 rn_value=$result;}\n    elsif ( ($result=get_pdb_file\
3182 1 (\"PDB$pdb_file.ENT\"))){$return_value=$result;}\
3183 \n      \n      \n      \n}\n    return $return_value;\n}\n    \n\
3184 sub get_pdb_file1\n{\n    my ($pdb_file)=(@_);\n  \
3185   my $return_value;\n    \n\n    $return_value=\"\\
3186 ";\n    if ( ($result=get_pdb_file0 ($pdb_file))){\
3187 $return_value=$result;}\n    elsif ( ($result=get_\
3188 pdb_file0 (\"$pdb_file.Z\"))){$return_value=$resul\
3189 t;}\n    elsif ( ($result=get_pdb_file0 (\"$pdb_fi\
3190 le.gz\"))){$return_value=$result;}\n    elsif ( ($\
3191 result=get_pdb_file0 (\"$pdb_file.GZ\"))){$return_\
3192 value=$result;}\n    return $return_value;\n}\nsub\
3193  get_pdb_file0 \n{ \n    my ($pdb_file, $attempt)=\
3194 (@_);\n    my $pdb_file=@_[0];\n    my $tmp_pdb_fi\
3195 le;    \n    my $return_value;\n\n    if ( !$attem\
3196 pt){$attempt=1;}\n    \n    $local_pdb_file=\"$pdb\
3197 _file\";\n    if ( $local_pdb_file eq \"\")\n{\n        $\
3198 tmp_pdb_file=vtmpnam();\n       open F, \">$tmp_pdb_file\
3199 \";\n   \n      while (<STDIN>){print F \"$_\";}\n      close \
3200 (F);\n  \n      if (-e $tmp_pdb_file && &is_pdb_file ( $\
3201 local_pdb_file))\n{return $tmp_pdb_file;}\n}\n\n  \
3202   $local_pdb_file=\"$pdb_file\";\n    &debug_print\
3203  (\"\\nTry access local file: $local_pdb_file\");\\
3204 n    \n    $local_pdb_file=&check_pdb_file4compres\
3205 sion ($local_pdb_file);\n    if ( -e $local_pdb_fi\
3206 le && (&is_pdb_file ($local_pdb_file) || $force_pd\
3207 b))\n{\n        &debug_print ( \"\\n\\tIs in Current Dir\\
3208 ");\n   $tmp_pdb_file=vtmpnam();\n      `cp $local_pdb_fi\
3209 le $tmp_pdb_file`;\n    return $tmp_pdb_file;\n}\n   \
3210  else\n{\n      &debug_print (\"\\n\\tFile Not in Curre\
3211 nt Dir\");\n}\n\n    if ($pdb_file=~/^pdb/||$pdb_f\
3212 ile=~/^PDB/){$pdb_div=substr ($pdb_file, 4, 2);}\n\
3213     else\n{\n     $pdb_div=substr ($pdb_file, 1, 2);\
3214 \n}\n    $local_pdb_file=\"$pdb_dir/$pdb_div/$pdb_\
3215 file\";\n    $local_pdb_file=&check_pdb_file4compr\
3216 ession ( $local_pdb_file);\n    &debug_print (\"\\\
3217 nTry access file From PDB_DIR: $local_pdb_file\");\
3218 \n    if ($pdb_dir && -e $local_pdb_file && &is_pd\
3219 b_file ($local_pdb_file))\n{\n  &debug_print ( \"\\\
3220 n\\tIs in Local PDB DIR\");\n   $tmp_pdb_file=vtmpna\
3221 m();\n  `cp $local_pdb_file $tmp_pdb_file`;\n   retur\
3222 n $tmp_pdb_file;\n}\n\n    $local_pdb_file=\"$pdb_\
3223 dir/$pdb_file\";\n    $local_pdb_file=&check_pdb_f\
3224 ile4compression ( $local_pdb_file);\n    &debug_pr\
3225 int (\"\\nTry access file From PDB_DIR: local_pdb_\
3226 file\");\n    if ($pdb_dir && -e $local_pdb_file &\
3227 & &is_pdb_file ($local_pdb_file))\n{\n  &debug_prin\
3228 t ( \"\\n\\tIs in Local PDB DIR\");\n   $tmp_pdb_fil\
3229 e=vtmpnam();\n  `cp $local_pdb_file $tmp_pdb_file`;\
3230 \n      return $tmp_pdb_file;\n}\n\n    $local_pdb_file\
3231 =\"$pdb_dir$pdb_file\";\n    $local_pdb_file=&chec\
3232 k_pdb_file4compression ( $local_pdb_file);\n    &d\
3233 ebug_print (\"\\nTry access file From PDB_DIR: $lo\
3234 cal_pdb_file\");\n    if ($pdb_dir && -e $local_pd\
3235 b_file && &is_pdb_file ($local_pdb_file))\n{\n  &de\
3236 bug_print ( \"\\n\\tIs in Local PDB DIR\");\n   $tmp\
3237 _pdb_file=vtmpnam();\n  `cp $local_pdb_file $tmp_pd\
3238 b_file`;\n      return $tmp_pdb_file;\n}\n    else\n{&d\
3239 ebug_print ( \"\\n\\tNot In Local Pdb Dir\");}\n\n\
3240     if ($cache ne \"NO\" && $cache ne \"no\")\n{\n\
3241 \n      $local_pdb_file=\"$cache/$pdb_file\";\n $local_\
3242 pdb_file=&check_pdb_file4compression ( $local_pdb_\
3243 file);\n        &debug_print(\"\\nTry access file From Ca\
3244 che: $local_pdb_file\");\n      if (-e $local_pdb_file \
3245 && &is_pdb_file ($local_pdb_file))\n{\n     &debug\
3246 _print ( \"\\n\\tIs in T-Coffee Cache\");\n         $t\
3247 mp_pdb_file=vtmpnam();\n            `cp $local_pdb_file $\
3248 tmp_pdb_file`;\n            return $tmp_pdb_file;\n}\n  el\
3249 se{&debug_print ( \"\\n\\tNot in Cache Dir\");}\n}\
3250 \n\nif (!$no_remote_pdb_dir) \n  {\n    my $value=\
3251 &is_released ($pdb_file);\n    my $return_value=\"\
3252 \";\n    if ($value==1)\n      {\n      \n      &debug_print\
3253  (\"\\n*******************************************\
3254 **********\\nTry Remote Access for $pdb_file\");\n\
3255         $tmp_pdb_file=vtmpnam();\n      $netcommand=$netaddres\
3256 s;\n    $netcommand=~s/%%/$pdb_file/g;\n        &url2file(\"\
3257 $netcommand\", \"$tmp_pdb_file.$netcompression\");\
3258 \n      &debug_print(\"\\nREMOTE: $netcommand\\n\");\n  \
3259 \n      $compressed_tmp_file_name=\"$tmp_pdb_file.$netc\
3260 ompression\";\n \n      if ($netcompression && -B $comp\
3261 ressed_tmp_file_name)\n   {\n       my $r;\n        &de\
3262 bug_print (\"\\n\\tFile Found Remotely\");\n        i\
3263 f (($r=safe_system ( \"$netcompression_pg $compres\
3264 sed_tmp_file_name\")!=$EXIT_SUCCESS) && $attempts<\
3265 5)\n          {\n               &debug_print (\"\\n\\tProper Downl\
3266 oad Failed Try again\");\n              unlink $compressed_tmp\
3267 _file_name;\n           print \"\\nFailed to Download $comp\
3268 ressed_tmp_file_name. New Attempt $attempt/5\\n\";\
3269 \n              return &get_pdb_file0($pdb_file, $attempt+1);\\
3270 n             }\n           elsif ($r== $EXIT_SUCCESS)\n             \
3271  {\n            &debug_print (\"\\n\\tProper Download Succee\
3272 ded \");\n              $return_value=$tmp_pdb_file;\n        }\
3273 \n          else\n            {\n               &debug_print (\"\\n\\tPro\
3274 per Download Failed \");\n              &debug_print (\"\\nFil\
3275 e Not Found Remotely\");\n              unlink $compressed_tmp\
3276 _file_name;\n         }\n         }\n   else\n    {\n\n     &\
3277 debug_print (\"\\nFile Not Found Remotely\");\n   \
3278   unlink $compressed_tmp_file_name;\n     }\n   #Updat\
3279 e cache if required\n   if ($cache ne \"no\" && $cac\
3280 he ne \"update\" && -e $return_value)\n   {\n       \
3281 `cp $return_value $cache/$pdb_file.pdb`;\n          #`t\
3282 _coffee -other_pg clean_cache.pl -file $pdb_file.p\
3283 db -dir $cache`;\n        }\n      }\n    &debug_print \
3284 (\"\\nRemote Download Finished\");\n    return $re\
3285 turn_value;\n  }\nreturn \"\";\n}\n\nsub check_pdb\
3286 _file4compression \n{\n    my $file=@_[0];\n    my\
3287  $tmp;\n    my $r;\n    \n    $tmp=&vtmpnam();\n  \
3288   if (-e $tmp){unlink $tmp;}\n    \n    $file=~s/\\
3289 \/\\//\\//g;\n    if    (-B $file && ($file=~/\\.Z\
3290 /)) {`cp $file $tmp.Z`;`rm $tmp`;`gunzip $tmp.Z $S\
3291 ILENT`;$r=$tmp;}\n    elsif (-B $file && ($file=~/\
3292 \\.gz/)){`cp $file $tmp.gz`;`gunzip $tmp.gz $SILEN\
3293 T`;return $r=$tmp;}\n    elsif (-B $file ){`cp $fi\
3294 le $tmp.gz`;`gunzip $tmp.gz $SILENT`;$r=$tmp;}\n  \
3295   elsif ( -e $file ) {$r= $file;}\n    elsif ( -e \
3296 \"$file.gz\" ){ `cp $file.gz $tmp.gz`;`gunzip     \
3297 $tmp.gz $SILENT`;$r=$tmp;}    \n    elsif ( -e \"$\
3298 file.Z\") {`cp $file.Z  $tmp.Z`; `gunzip $tmp.Z $S\
3299 ILENT`;$r=$tmp;}\n    else  {$r= $file;}\n\n    if\
3300  ( -e \"$tmp.Z\"){unlink \"$tmp.Z\";}\n    if ( -e\
3301  \"$tmp.gz\"){unlink \"$tmp.gz\";}\n    \n    retu\
3302 rn $r;\n    \n}\n\n\n\n\n\n    \n\n\n\n\n\n\n\nsub\
3303  vfopen \n{\n    my $file=@_[0];\n    my $mode=@_[\
3304 1];\n    my $tmp;\n    my $F = new FileHandle;\n  \
3305   \n    \n    $tmp=$file;\n     \n    \n    if ( $mode\
3306  eq \"r\" && !-e $file){ myexit(flush_error (\"Can\
3307 not open file $file\"));}\n    elsif ($mode eq \"w\
3308 \"){$tmp=\">$file\";}\n    elsif ($mode eq \"a\"){\
3309 $tmp=\">>$file\";}\n    \n    \n    open ($F,$tmp)\
3310 ;\n    return $F;\n}\nsub debug_print\n{\n    my $\
3311 message =@_[0];\n    if ($debug){print STDERR \"NO\
3312 _REMOTE_PDB_DIR: $no_remote_pdb_dir - $message [DE\
3313 BUG:extract_from_pdb]\";}\n    return;\n}\nsub is_\
3314 aa \n{\n    my ($aa, $chain) =@_;\n\n    my $one;\\
3315 n    my $trhee;\n    \n    if ( $onelett{$molecule\
3316 _type{$chain}}->{$aa} eq 'X' || !$onelett{$molecul\
3317 e_type{$chain}}->{$aa} ){return '';}\n    else\n  \
3318     {\n $one=$onelett{$molecule_type{$chain}}->{$a\
3319 a};\n\n $three=$threelett{$molecule_type{$chain}}-\
3320 >{$one};\n      \n\n    return $three;\n      }\n  }\n\n\n\
3321 \n\n\nsub url2file\n{\n    my ($address, $out, $wg\
3322 et_arg, $curl_arg)=(@_);\n    my ($pg, $flag, $r, \
3323 $arg, $count);\n    \n    if (!$CONFIGURATION){&ch\
3324 eck_configuration (\"wget\", \"INTERNET\", \"gzip\\
3325 ");$CONFIGURATION=1;}\n    \n    if (&pg_is_instal\
3326 led (\"wget\"))   {$pg=\"wget\"; $flag=\"-O\";$arg\
3327 =$wget_arg;}\n    elsif (&pg_is_installed (\"curl\\
3328 ")){$pg=\"curl\"; $flag=\"-o\";$arg=$curl_arg;}\n \
3329    return safe_system (\"$pg $flag$out $address >/\
3330 dev/null 2>/dev/null\");\n\n}\n\n\n\n\nsub pdbfile\
3331 2chaintype\n  {\n    my $file=@_[0];\n    my %ct;\\
3332 n    my $F;\n    \n    $F=vfopen ($file, \"r\");\n\
3333     while (<$F>)\n      {\n     my $line=$_;\n  if ($li\
3334 ne =~/^ATOM/)\n   {\n       my $C=substr($line,21,1)\
3335 ;\n         if (!$ct{$C})\n           { \n              my $r=substr($\
3336 line,17,3);\n           $r=~s/\\s+//;\n         if (length ($r)==1\
3337 ){$ct{$C}=\"R\";}\n             elsif (length ($r)==2){$ct{$C\
3338 }=\"D\";}\n             elsif (length ($r)==3){$ct{$C}=\"P\";\
3339 }\n             else \n           {\n               myexit(flush_error(\"ERRO\
3340 R: Could not read RES_ID field in file $file\"));\\
3341 n                 }\n         }\n         }\n      }\n    close ($F);\n\
3342     return %ct;\n  }\n   \n    \n\n\n\nsub fill_th\
3343 reelett_RNA\n{\n\n      my %threelett=(\n       'A', '  A',\n\
3344         'T', '  T',\n   'U', '  U',\n   'C', '  C',\n   'G', ' \
3345  G',\n  'I', '  I', #Inosine\n  );\n    \n      return %thre\
3346 elett;\n\n}\n\n\nsub fill_onelett_RNA\n{\n      my   %o\
3347 nelett=(\n      '  A' => 'A',\n '  T' => 'T',\n '  U' =\
3348 > 'U',\n        '  C' => 'C',\n '  G' => 'G',\n 'CSL' => \
3349 'X',\n  'UMS' => 'X',\n '  I' => 'I',\n 'A' => 'A',\
3350 \n      'T' => 'T',\n   'U' => 'U',\n   'C' => 'C',\n   'G' =\
3351 > 'G',\n        'I' => 'I',\n   );\n\n  return %onelett;\n\n\
3352 }\n\n\nsub fill_onelett_DNA\n{\n        my   %onelett=(\n\
3353         ' DA', 'A',\n   ' DT', 'T',\n   ' DC', 'C',\n   ' DG', \
3354 'G',\n  'DA', 'A',\n    'DT', 'T',\n    'DC', 'C',\n    'DG'\
3355 , 'G',\n        );\n\n  return %onelett;\n\n}\n\nsub fill_\
3356 threelett_DNA\n{\n\n    my %threelett=(\n       'A', ' DA',\
3357 \n      'T', ' DT',\n   'C', ' DC',\n   'G', ' DG',\n   );\n\\
3358 n       return %threelett;\n\n}\n\n\n\n\nsub fill_threel\
3359 ett_prot\n{  \n  my %threelett;\n\n  %threelett=(\\
3360 n'A', 'ALA',\n'C', 'CYS',\n'D', 'ASP',\n'E', 'GLU'\
3361 ,\n'F', 'PHE',\n'G', 'GLY',\n'H', 'HIS',\n'I', 'IL\
3362 E',\n'K', 'LYS',\n'L', 'LEU',\n'N', 'ASN',\n'M', '\
3363 MET',\n'P', 'PRO',\n'Q', 'GLN',\n'R', 'ARG',\n'S',\
3364  'SER',\n'T', 'THR',\n'V', 'VAL',\n'W', 'TRP',\n'Y\
3365 ', 'TYR',\n);\n\nreturn %threelett;\n\n\n}\n\nsub \
3366 fill_onelett_prot\n{\n    my %onelett;\n    \n    \
3367 %onelett=(\n\n'10A', 'X',\n'11O', 'X',\n'12A', 'X'\
3368 ,\n'13P', 'X',\n'13R', 'X',\n'13S', 'X',\n'14W', '\
3369 X',\n'15P', 'X',\n'16A', 'X',\n'16G', 'X',\n'1AN',\
3370  'X',\n'1AP', 'X',\n'1AR', 'X',\n'1BH', 'X',\n'1BO\
3371 ', 'X',\n'1C5', 'X',\n'1CU', 'X',\n'1DA', 'X',\n'1\
3372 GL', 'X',\n'1GN', 'X',\n'1IN', 'X',\n'1LU', 'L',\n\
3373 '1MA', 'X',\n'1MC', 'X',\n'1MG', 'X',\n'1MZ', 'X',\
3374 \n'1NA', 'X',\n'1NB', 'X',\n'1NI', 'X',\n'1PA', 'A\
3375 ',\n'1PC', 'X',\n'1PE', 'X',\n'1PG', 'X',\n'1PI', \
3376 'A',\n'1PM', 'X',\n'1PN', 'X',\n'1PU', 'X',\n'1PY'\
3377 , 'X',\n'1UN', 'X',\n'24T', 'X',\n'25T', 'X',\n'26\
3378 P', 'X',\n'2AB', 'X',\n'2AM', 'X',\n'2AN', 'X',\n'\
3379 2AP', 'X',\n'2AR', 'X',\n'2AS', 'D',\n'2BL', 'X',\\
3380 n'2BM', 'X',\n'2CP', 'X',\n'2DA', 'X',\n'2DG', 'X'\
3381 ,\n'2DP', 'X',\n'2DT', 'X',\n'2EP', 'X',\n'2EZ', '\
3382 X',\n'2FG', 'X',\n'2FL', 'X',\n'2FP', 'X',\n'2FU',\
3383  'X',\n'2GL', 'X',\n'2GP', 'X',\n'2HP', 'X',\n'2IB\
3384 ', 'X',\n'2IP', 'X',\n'2LU', 'L',\n'2MA', 'X',\n'2\
3385 MD', 'X',\n'2ME', 'X',\n'2MG', 'X',\n'2ML', 'L',\n\
3386 '2MO', 'X',\n'2MR', 'R',\n'2MU', 'X',\n'2MZ', 'X',\
3387 \n'2NO', 'X',\n'2NP', 'X',\n'2OG', 'X',\n'2PA', 'X\
3388 ',\n'2PC', 'X',\n'2PE', 'X',\n'2PG', 'X',\n'2PH', \
3389 'X',\n'2PI', 'X',\n'2PL', 'X',\n'2PP', 'X',\n'2PU'\
3390 , 'X',\n'2SI', 'X',\n'2TB', 'X',\n'34C', 'X',\n'35\
3391 G', 'X',\n'3AA', 'X',\n'3AD', 'X',\n'3AH', 'H',\n'\
3392 3AN', 'X',\n'3AP', 'X',\n'3AT', 'X',\n'3BT', 'X',\\
3393 n'3CH', 'X',\n'3CN', 'X',\n'3CO', 'X',\n'3CP', 'X'\
3394 ,\n'3DR', 'X',\n'3EP', 'X',\n'3FM', 'X',\n'3GA', '\
3395 X',\n'3GP', 'X',\n'3HB', 'X',\n'3HC', 'X',\n'3HP',\
3396  'X',\n'3IB', 'X',\n'3ID', 'X',\n'3IN', 'X',\n'3MA\
3397 ', 'X',\n'3MB', 'X',\n'3MC', 'X',\n'3MD', 'D',\n'3\
3398 MF', 'X',\n'3MP', 'X',\n'3MT', 'X',\n'3OL', 'X',\n\
3399 '3PA', 'X',\n'3PG', 'X',\n'3PO', 'X',\n'3PP', 'X',\
3400 \n'3PY', 'X',\n'49A', 'X',\n'4AB', 'X',\n'4AM', 'X\
3401 ',\n'4AN', 'X',\n'4AP', 'X',\n'4BA', 'X',\n'4BT', \
3402 'X',\n'4CA', 'X',\n'4CO', 'X',\n'4HP', 'X',\n'4IP'\
3403 , 'X',\n'4MO', 'X',\n'4MV', 'X',\n'4MZ', 'X',\n'4N\
3404 C', 'X',\n'4NP', 'X',\n'4OX', 'X',\n'4PB', 'X',\n'\
3405 4PN', 'X',\n'4PP', 'X',\n'4SC', 'X',\n'4SU', 'X',\\
3406 n'4TB', 'X',\n'55C', 'X',\n'5AD', 'X',\n'5AN', 'X'\
3407 ,\n'5AT', 'X',\n'5CM', 'X',\n'5GP', 'X',\n'5HP', '\
3408 E',\n'5HT', 'X',\n'5IT', 'X',\n'5IU', 'X',\n'5MB',\
3409  'X',\n'5MC', 'X',\n'5MD', 'X',\n'5MP', 'X',\n'5MU\
3410 ', 'X',\n'5NC', 'X',\n'5OB', 'X',\n'5PA', 'X',\n'5\
3411 PV', 'X',\n'6AB', 'X',\n'6CT', 'X',\n'6HA', 'X',\n\
3412 '6HC', 'X',\n'6HG', 'X',\n'6HT', 'X',\n'6IN', 'X',\
3413 \n'6MO', 'X',\n'6MP', 'X',\n'6PG', 'X',\n'6WO', 'X\
3414 ',\n'70U', 'X',\n'7DG', 'X',\n'7HP', 'X',\n'7I2', \
3415 'X',\n'7MG', 'X',\n'7MQ', 'X',\n'7NI', 'X',\n'87Y'\
3416 , 'X',\n'8AD', 'X',\n'8BR', 'X',\n'8IG', 'X',\n'8I\
3417 N', 'X',\n'8OG', 'X',\n'95A', 'X',\n'9AD', 'X',\n'\
3418 9AM', 'X',\n'9AP', 'X',\n'9DG', 'X',\n'9DI', 'X',\\
3419 n'9HX', 'X',\n'9OH', 'X',\n'9TA', 'X',\n'A12', 'X'\
3420 ,\n'A15', 'X',\n'A23', 'X',\n'A24', 'X',\n'A26', '\
3421 X',\n'A2G', 'X',\n'A2P', 'X',\n'A32', 'X',\n'A3P',\
3422  'X',\n'A4P', 'X',\n'A5P', 'X',\n'A70', 'X',\n'A76\
3423 ', 'X',\n'A77', 'X',\n'A78', 'X',\n'A79', 'X',\n'A\
3424 80', 'X',\n'A85', 'X',\n'A88', 'X',\n'A9A', 'X',\n\
3425 'AA3', 'X',\n'AA4', 'X',\n'AA6', 'X',\n'AAA', 'X',\
3426 \n'AAB', 'X',\n'AAC', 'X',\n'AAE', 'X',\n'AAG', 'R\
3427 ',\n'AAH', 'X',\n'AAM', 'X',\n'AAN', 'X',\n'AAP', \
3428 'X',\n'AAR', 'R',\n'AAS', 'X',\n'AAT', 'X',\n'ABA'\
3429 , 'X',\n'ABC', 'X',\n'ABD', 'X',\n'ABE', 'X',\n'AB\
3430 H', 'X',\n'ABI', 'X',\n'ABK', 'X',\n'ABM', 'X',\n'\
3431 ABN', 'X',\n'ABP', 'X',\n'ABR', 'X',\n'ABS', 'X',\\
3432 n'ABU', 'X',\n'AC1', 'X',\n'AC2', 'X',\n'ACA', 'X'\
3433 ,\n'ACB', 'D',\n'ACC', 'C',\n'ACD', 'X',\n'ACE', '\
3434 X',\n'ACH', 'X',\n'ACI', 'X',\n'ACL', 'R',\n'ACM',\
3435  'X',\n'ACN', 'X',\n'ACO', 'X',\n'ACP', 'X',\n'ACQ\
3436 ', 'X',\n'ACR', 'X',\n'ACS', 'X',\n'ACT', 'X',\n'A\
3437 CV', 'V',\n'ACX', 'X',\n'ACY', 'X',\n'AD2', 'X',\n\
3438 'AD3', 'X',\n'ADC', 'X',\n'ADD', 'X',\n'ADE', 'X',\
3439 \n'ADH', 'X',\n'ADI', 'X',\n'ADM', 'X',\n'ADN', 'X\
3440 ',\n'ADP', 'X',\n'ADQ', 'X',\n'ADR', 'X',\n'ADS', \
3441 'X',\n'ADT', 'X',\n'ADU', 'X',\n'ADW', 'X',\n'ADX'\
3442 , 'X',\n'AE2', 'X',\n'AEA', 'X',\n'AEB', 'X',\n'AE\
3443 I', 'D',\n'AEN', 'X',\n'AET', 'T',\n'AF1', 'X',\n'\
3444 AF3', 'X',\n'AFA', 'D',\n'AFP', 'X',\n'AG7', 'X',\\
3445 n'AGB', 'X',\n'AGF', 'X',\n'AGL', 'X',\n'AGM', 'R'\
3446 ,\n'AGN', 'X',\n'AGP', 'X',\n'AGS', 'X',\n'AGU', '\
3447 X',\n'AH0', 'X',\n'AH1', 'X',\n'AHA', 'X',\n'AHB',\
3448  'D',\n'AHC', 'X',\n'AHF', 'X',\n'AHG', 'X',\n'AHH\
3449 ', 'X',\n'AHM', 'X',\n'AHO', 'X',\n'AHP', 'X',\n'A\
3450 HS', 'X',\n'AHT', 'Y',\n'AHU', 'X',\n'AHX', 'X',\n\
3451 'AI1', 'X',\n'AI2', 'X',\n'AIB', 'X',\n'AIC', 'X',\
3452 \n'AIM', 'X',\n'AIP', 'X',\n'AIQ', 'X',\n'AIR', 'X\
3453 ',\n'AJ3', 'X',\n'AKB', 'X',\n'AKG', 'X',\n'AKR', \
3454 'X',\n'AL1', 'X',\n'AL2', 'X',\n'AL3', 'X',\n'AL4'\
3455 , 'X',\n'AL5', 'X',\n'AL6', 'X',\n'AL7', 'X',\n'AL\
3456 8', 'X',\n'AL9', 'X',\n'ALA', 'A',\n'ALB', 'X',\n'\
3457 ALC', 'X',\n'ALD', 'L',\n'ALE', 'X',\n'ALF', 'X',\\
3458 n'ALG', 'X',\n'ALL', 'X',\n'ALM', 'A',\n'ALN', 'A'\
3459 ,\n'ALO', 'T',\n'ALP', 'X',\n'ALQ', 'X',\n'ALR', '\
3460 X',\n'ALS', 'X',\n'ALT', 'A',\n'ALY', 'K',\n'ALZ',\
3461  'X',\n'AMA', 'X',\n'AMB', 'X',\n'AMC', 'X',\n'AMD\
3462 ', 'X',\n'AMG', 'X',\n'AMH', 'X',\n'AMI', 'X',\n'A\
3463 ML', 'X',\n'AMN', 'X',\n'AMO', 'X',\n'AMP', 'X',\n\
3464 'AMQ', 'X',\n'AMR', 'X',\n'AMS', 'X',\n'AMT', 'X',\
3465 \n'AMU', 'X',\n'AMW', 'X',\n'AMX', 'X',\n'AMY', 'X\
3466 ',\n'ANA', 'X',\n'ANB', 'X',\n'ANC', 'X',\n'AND', \
3467 'X',\n'ANE', 'X',\n'ANI', 'X',\n'ANL', 'X',\n'ANO'\
3468 , 'X',\n'ANP', 'X',\n'ANS', 'X',\n'ANT', 'X',\n'AO\
3469 E', 'X',\n'AOP', 'X',\n'AP1', 'X',\n'AP2', 'X',\n'\
3470 AP3', 'X',\n'AP4', 'X',\n'AP5', 'X',\n'AP6', 'X',\\
3471 n'APA', 'X',\n'APB', 'X',\n'APC', 'X',\n'APE', 'F'\
3472 ,\n'APF', 'X',\n'APG', 'X',\n'APH', 'A',\n'API', '\
3473 X',\n'APL', 'X',\n'APM', 'X',\n'APN', 'G',\n'APP',\
3474  'X',\n'APQ', 'X',\n'APR', 'X',\n'APS', 'X',\n'APT\
3475 ', 'X',\n'APU', 'X',\n'APX', 'X',\n'APY', 'X',\n'A\
3476 PZ', 'X',\n'AQS', 'X',\n'AR1', 'X',\n'AR2', 'X',\n\
3477 'ARA', 'X',\n'ARB', 'X',\n'ARC', 'X',\n'ARD', 'X',\
3478 \n'ARG', 'R',\n'ARH', 'X',\n'ARI', 'X',\n'ARM', 'R\
3479 ',\n'ARN', 'X',\n'ARO', 'R',\n'ARP', 'X',\n'ARQ', \
3480 'X',\n'ARS', 'X',\n'AS1', 'R',\n'AS2', 'X',\n'ASA'\
3481 , 'D',\n'ASB', 'D',\n'ASC', 'X',\n'ASD', 'X',\n'AS\
3482 E', 'X',\n'ASF', 'X',\n'ASI', 'X',\n'ASK', 'D',\n'\
3483 ASL', 'X',\n'ASM', 'N',\n'ASO', 'X',\n'ASP', 'D',\\
3484 n'ASQ', 'X',\n'ASU', 'X',\n'ATA', 'X',\n'ATC', 'X'\
3485 ,\n'ATD', 'X',\n'ATF', 'X',\n'ATG', 'X',\n'ATH', '\
3486 X',\n'ATM', 'X',\n'ATO', 'X',\n'ATP', 'X',\n'ATQ',\
3487  'X',\n'ATR', 'X',\n'ATT', 'X',\n'ATY', 'X',\n'ATZ\
3488 ', 'X',\n'AUC', 'X',\n'AUR', 'X',\n'AVG', 'X',\n'A\
3489 XP', 'X',\n'AYA', 'A',\n'AZ2', 'X',\n'AZA', 'X',\n\
3490 'AZC', 'X',\n'AZD', 'X',\n'AZE', 'X',\n'AZI', 'X',\
3491 \n'AZL', 'X',\n'AZM', 'X',\n'AZR', 'X',\n'AZT', 'X\
3492 ',\n'B12', 'X',\n'B1F', 'F',\n'B2A', 'A',\n'B2F', \
3493 'F',\n'B2I', 'I',\n'B2V', 'V',\n'B3I', 'X',\n'B3P'\
3494 , 'X',\n'B7G', 'X',\n'B96', 'X',\n'B9A', 'X',\n'BA\
3495 1', 'X',\n'BAA', 'X',\n'BAB', 'X',\n'BAC', 'X',\n'\
3496 BAF', 'X',\n'BAH', 'X',\n'BAI', 'X',\n'BAK', 'X',\\
3497 n'BAL', 'A',\n'BAM', 'X',\n'BAO', 'X',\n'BAP', 'X'\
3498 ,\n'BAR', 'X',\n'BAS', 'X',\n'BAT', 'F',\n'BAY', '\
3499 X',\n'BAZ', 'X',\n'BB1', 'X',\n'BB2', 'X',\n'BBA',\
3500  'X',\n'BBH', 'X',\n'BBS', 'X',\n'BBT', 'X',\n'BBZ\
3501 ', 'X',\n'BCA', 'X',\n'BCB', 'X',\n'BCC', 'X',\n'B\
3502 CD', 'X',\n'BCL', 'X',\n'BCN', 'X',\n'BCR', 'X',\n\
3503 'BCS', 'C',\n'BCT', 'X',\n'BCY', 'X',\n'BCZ', 'X',\
3504 \n'BDA', 'X',\n'BDG', 'X',\n'BDK', 'X',\n'BDM', 'X\
3505 ',\n'BDN', 'X',\n'BDS', 'X',\n'BE1', 'X',\n'BE2', \
3506 'X',\n'BEA', 'X',\n'BEF', 'X',\n'BEN', 'X',\n'BEO'\
3507 , 'X',\n'BEP', 'X',\n'BER', 'X',\n'BES', 'X',\n'BE\
3508 T', 'X',\n'BEZ', 'X',\n'BF2', 'X',\n'BFA', 'X',\n'\
3509 BFD', 'X',\n'BFP', 'X',\n'BFS', 'X',\n'BFU', 'X',\\
3510 n'BG6', 'X',\n'BGF', 'X',\n'BGG', 'X',\n'BGL', 'X'\
3511 ,\n'BGN', 'X',\n'BGP', 'X',\n'BGX', 'X',\n'BH4', '\
3512 X',\n'BHA', 'X',\n'BHC', 'X',\n'BHD', 'D',\n'BHO',\
3513  'X',\n'BHS', 'X',\n'BIC', 'X',\n'BIN', 'X',\n'BIO\
3514 ', 'X',\n'BIP', 'X',\n'BIS', 'X',\n'BIZ', 'X',\n'B\
3515 JH', 'X',\n'BJI', 'X',\n'BJP', 'X',\n'BLA', 'X',\n\
3516 'BLB', 'X',\n'BLE', 'L',\n'BLG', 'P',\n'BLI', 'X',\
3517 \n'BLM', 'X',\n'BLV', 'X',\n'BLY', 'K',\n'BM1', 'X\
3518 ',\n'BM2', 'X',\n'BM5', 'X',\n'BM9', 'X',\n'BMA', \
3519 'X',\n'BMD', 'X',\n'BME', 'X',\n'BMP', 'X',\n'BMQ'\
3520 , 'X',\n'BMS', 'X',\n'BMT', 'T',\n'BMU', 'X',\n'BM\
3521 Y', 'X',\n'BMZ', 'X',\n'BNA', 'X',\n'BNG', 'X',\n'\
3522 BNI', 'X',\n'BNN', 'F',\n'BNO', 'L',\n'BNS', 'X',\\
3523 n'BNZ', 'X',\n'BO3', 'X',\n'BO4', 'X',\n'BOC', 'X'\
3524 ,\n'BOG', 'X',\n'BOM', 'X',\n'BOT', 'X',\n'BOX', '\
3525 X',\n'BOZ', 'X',\n'BPA', 'X',\n'BPB', 'X',\n'BPD',\
3526  'X',\n'BPG', 'X',\n'BPH', 'X',\n'BPI', 'X',\n'BPJ\
3527 ', 'X',\n'BPM', 'X',\n'BPN', 'X',\n'BPO', 'X',\n'B\
3528 PP', 'X',\n'BPT', 'X',\n'BPY', 'X',\n'BRB', 'X',\n\
3529 'BRC', 'X',\n'BRE', 'X',\n'BRI', 'X',\n'BRL', 'X',\
3530 \n'BRM', 'X',\n'BRN', 'X',\n'BRO', 'X',\n'BRS', 'X\
3531 ',\n'BRU', 'X',\n'BRZ', 'X',\n'BSB', 'X',\n'BSI', \
3532 'X',\n'BSP', 'X',\n'BT1', 'X',\n'BT2', 'X',\n'BT3'\
3533 , 'X',\n'BTA', 'L',\n'BTB', 'X',\n'BTC', 'C',\n'BT\
3534 D', 'X',\n'BTN', 'X',\n'BTP', 'X',\n'BTR', 'W',\n'\
3535 BU1', 'X',\n'BUA', 'X',\n'BUB', 'X',\n'BUC', 'X',\\
3536 n'BUG', 'X',\n'BUL', 'X',\n'BUM', 'X',\n'BUQ', 'X'\
3537 ,\n'BUT', 'X',\n'BVD', 'X',\n'BX3', 'X',\n'BYS', '\
3538 X',\n'BZ1', 'X',\n'BZA', 'X',\n'BZB', 'X',\n'BZC',\
3539  'X',\n'BZD', 'X',\n'BZF', 'X',\n'BZI', 'X',\n'BZM\
3540 ', 'X',\n'BZO', 'X',\n'BZP', 'X',\n'BZQ', 'X',\n'B\
3541 ZS', 'X',\n'BZT', 'X',\n'C02', 'X',\n'C11', 'X',\n\
3542 'C1O', 'X',\n'C20', 'X',\n'C24', 'X',\n'C2F', 'X',\
3543 \n'C2O', 'X',\n'C2P', 'X',\n'C3M', 'X',\n'C3P', 'X\
3544 ',\n'C3X', 'X',\n'C48', 'X',\n'C4M', 'X',\n'C4X', \
3545 'X',\n'C5C', 'X',\n'C5M', 'X',\n'C5P', 'X',\n'C5X'\
3546 , 'X',\n'C60', 'X',\n'C6C', 'X',\n'C6M', 'X',\n'C7\
3547 8', 'X',\n'C8E', 'X',\n'CA3', 'X',\n'CA5', 'X',\n'\
3548 CAA', 'X',\n'CAB', 'X',\n'CAC', 'X',\n'CAD', 'X',\\
3549 n'CAF', 'C',\n'CAG', 'X',\n'CAH', 'X',\n'CAL', 'X'\
3550 ,\n'CAM', 'X',\n'CAN', 'X',\n'CAO', 'X',\n'CAP', '\
3551 X',\n'CAQ', 'X',\n'CAR', 'X',\n'CAS', 'C',\n'CAT',\
3552  'X',\n'CAV', 'X',\n'CAY', 'C',\n'CAZ', 'X',\n'CB3\
3553 ', 'X',\n'CB4', 'X',\n'CBA', 'X',\n'CBD', 'X',\n'C\
3554 BG', 'X',\n'CBI', 'X',\n'CBL', 'X',\n'CBM', 'X',\n\
3555 'CBN', 'X',\n'CBO', 'X',\n'CBP', 'X',\n'CBS', 'X',\
3556 \n'CBX', 'X',\n'CBZ', 'X',\n'CC0', 'X',\n'CC1', 'X\
3557 ',\n'CCC', 'X',\n'CCH', 'X',\n'CCI', 'X',\n'CCM', \
3558 'X',\n'CCN', 'X',\n'CCO', 'X',\n'CCP', 'X',\n'CCR'\
3559 , 'X',\n'CCS', 'C',\n'CCV', 'X',\n'CCY', 'X',\n'CD\
3560 1', 'X',\n'CDC', 'X',\n'CDE', 'X',\n'CDF', 'X',\n'\
3561 CDI', 'X',\n'CDL', 'X',\n'CDM', 'X',\n'CDP', 'X',\\
3562 n'CDR', 'X',\n'CDU', 'X',\n'CE1', 'X',\n'CEA', 'C'\
3563 ,\n'CEB', 'X',\n'CEC', 'X',\n'CED', 'X',\n'CEF', '\
3564 X',\n'CEH', 'X',\n'CEM', 'X',\n'CEO', 'X',\n'CEP',\
3565  'X',\n'CEQ', 'X',\n'CER', 'X',\n'CES', 'G',\n'CET\
3566 ', 'X',\n'CFC', 'X',\n'CFF', 'X',\n'CFM', 'X',\n'C\
3567 FO', 'X',\n'CFP', 'X',\n'CFS', 'X',\n'CFX', 'X',\n\
3568 'CGN', 'X',\n'CGP', 'X',\n'CGS', 'X',\n'CGU', 'E',\
3569 \n'CH2', 'X',\n'CH3', 'X',\n'CHA', 'X',\n'CHB', 'X\
3570 ',\n'CHD', 'X',\n'CHF', 'X',\n'CHG', 'G',\n'CHI', \
3571 'X',\n'CHN', 'X',\n'CHO', 'X',\n'CHP', 'G',\n'CHR'\
3572 , 'X',\n'CHS', 'F',\n'CHT', 'X',\n'CHX', 'X',\n'CI\
3573 C', 'X',\n'CIN', 'X',\n'CIP', 'X',\n'CIR', 'X',\n'\
3574 CIT', 'X',\n'CIU', 'X',\n'CKI', 'X',\n'CL1', 'X',\\
3575 n'CL2', 'X',\n'CLA', 'X',\n'CLB', 'A',\n'CLC', 'S'\
3576 ,\n'CLD', 'A',\n'CLE', 'L',\n'CLF', 'X',\n'CLK', '\
3577 S',\n'CLL', 'X',\n'CLM', 'X',\n'CLN', 'X',\n'CLO',\
3578  'X',\n'CLP', 'X',\n'CLQ', 'X',\n'CLR', 'X',\n'CLS\
3579 ', 'X',\n'CLT', 'X',\n'CLX', 'X',\n'CLY', 'X',\n'C\
3580 MA', 'R',\n'CMC', 'X',\n'CMD', 'X',\n'CME', 'C',\n\
3581 'CMG', 'X',\n'CMK', 'X',\n'CMN', 'X',\n'CMO', 'X',\
3582 \n'CMP', 'X',\n'CMR', 'X',\n'CMS', 'X',\n'CMT', 'C\
3583 ',\n'CMX', 'X',\n'CNA', 'X',\n'CNC', 'X',\n'CND', \
3584 'X',\n'CNH', 'X',\n'CNM', 'X',\n'CNN', 'X',\n'CNO'\
3585 , 'X',\n'CNP', 'X',\n'CO2', 'X',\n'CO3', 'X',\n'CO\
3586 5', 'X',\n'CO8', 'X',\n'COA', 'X',\n'COB', 'X',\n'\
3587 COC', 'X',\n'COD', 'X',\n'COE', 'X',\n'COF', 'X',\\
3588 n'COH', 'X',\n'COI', 'X',\n'COJ', 'X',\n'COL', 'X'\
3589 ,\n'COM', 'X',\n'CON', 'X',\n'COP', 'X',\n'COR', '\
3590 X',\n'COS', 'X',\n'COT', 'X',\n'COY', 'X',\n'CP1',\
3591  'G',\n'CP2', 'X',\n'CP4', 'X',\n'CPA', 'X',\n'CPB\
3592 ', 'X',\n'CPC', 'X',\n'CPD', 'X',\n'CPG', 'X',\n'C\
3593 PH', 'X',\n'CPI', 'X',\n'CPM', 'X',\n'CPN', 'G',\n\
3594 'CPO', 'X',\n'CPP', 'X',\n'CPQ', 'X',\n'CPR', 'X',\
3595 \n'CPS', 'X',\n'CPT', 'X',\n'CPU', 'X',\n'CPV', 'X\
3596 ',\n'CPY', 'X',\n'CR1', 'X',\n'CR6', 'X',\n'CRA', \
3597 'X',\n'CRB', 'X',\n'CRC', 'X',\n'CRG', 'X',\n'CRH'\
3598 , 'X',\n'CRO', 'T',\n'CRP', 'X',\n'CRQ', 'X',\n'CR\
3599 S', 'X',\n'CRT', 'X',\n'CRY', 'X',\n'CSA', 'C',\n'\
3600 CSB', 'X',\n'CSD', 'C',\n'CSE', 'C',\n'CSH', 'X',\\
3601 n'CSI', 'X',\n'CSN', 'X',\n'CSO', 'C',\n'CSP', 'C'\
3602 ,\n'CSR', 'C',\n'CSS', 'C',\n'CST', 'X',\n'CSW', '\
3603 C',\n'CSX', 'C',\n'CSY', 'X',\n'CSZ', 'C',\n'CT3',\
3604  'X',\n'CTA', 'X',\n'CTB', 'X',\n'CTC', 'X',\n'CTD\
3605 ', 'X',\n'CTH', 'T',\n'CTO', 'X',\n'CTP', 'X',\n'C\
3606 TR', 'X',\n'CTS', 'X',\n'CTT', 'X',\n'CTY', 'X',\n\
3607 'CTZ', 'X',\n'CU1', 'X',\n'CUA', 'X',\n'CUC', 'X',\
3608 \n'CUL', 'X',\n'CUO', 'X',\n'CUZ', 'X',\n'CVI', 'X\
3609 ',\n'CXF', 'X',\n'CXL', 'X',\n'CXM', 'M',\n'CXN', \
3610 'X',\n'CXP', 'X',\n'CXS', 'X',\n'CY1', 'C',\n'CY3'\
3611 , 'X',\n'CYB', 'X',\n'CYC', 'X',\n'CYF', 'C',\n'CY\
3612 G', 'C',\n'CYH', 'X',\n'CYL', 'X',\n'CYM', 'C',\n'\
3613 CYN', 'X',\n'CYO', 'X',\n'CYP', 'X',\n'CYQ', 'C',\\
3614 n'CYS', 'C',\n'CYU', 'X',\n'CYY', 'X',\n'CYZ', 'X'\
3615 ,\n'CZH', 'X',\n'CZZ', 'C',\n'D12', 'X',\n'D13', '\
3616 X',\n'D16', 'X',\n'D18', 'X',\n'D19', 'X',\n'D1P',\
3617  'X',\n'D24', 'X',\n'D34', 'X',\n'D35', 'X',\n'D4D\
3618 ', 'X',\n'D4T', 'X',\n'D6G', 'X',\n'DA2', 'R',\n'D\
3619 A3', 'X',\n'DA6', 'X',\n'DA7', 'X',\n'DAA', 'X',\n\
3620 'DAB', 'X',\n'DAC', 'X',\n'DAD', 'X',\n'DAE', 'X',\
3621 \n'DAF', 'X',\n'DAG', 'X',\n'DAH', 'A',\n'DAJ', 'X\
3622 ',\n'DAK', 'X',\n'DAL', 'A',\n'DAM', 'A',\n'DAN', \
3623 'X',\n'DAO', 'X',\n'DAP', 'X',\n'DAQ', 'X',\n'DAR'\
3624 , 'R',\n'DAS', 'D',\n'DAT', 'X',\n'DAU', 'X',\n'DA\
3625 V', 'X',\n'DBA', 'X',\n'DBD', 'X',\n'DBF', 'X',\n'\
3626 DBG', 'X',\n'DBI', 'X',\n'DBV', 'X',\n'DBY', 'Y',\\
3627 n'DCA', 'X',\n'DCB', 'X',\n'DCE', 'X',\n'DCF', 'X'\
3628 ,\n'DCG', 'X',\n'DCH', 'X',\n'DCI', 'I',\n'DCL', '\
3629 X',\n'DCM', 'X',\n'DCP', 'X',\n'DCS', 'X',\n'DCT',\
3630  'X',\n'DCY', 'C',\n'DCZ', 'X',\n'DDA', 'X',\n'DDB\
3631 ', 'X',\n'DDC', 'X',\n'DDF', 'X',\n'DDG', 'X',\n'D\
3632 DH', 'X',\n'DDL', 'X',\n'DDM', 'X',\n'DDO', 'L',\n\
3633 'DDP', 'X',\n'DDQ', 'X',\n'DDT', 'Y',\n'DDU', 'X',\
3634 \n'DEA', 'X',\n'DEB', 'X',\n'DEC', 'X',\n'DEF', 'X\
3635 ',\n'DEL', 'X',\n'DEM', 'X',\n'DEN', 'X',\n'DEP', \
3636 'X',\n'DEQ', 'X',\n'DES', 'X',\n'DET', 'X',\n'DFC'\
3637 , 'X',\n'DFG', 'X',\n'DFI', 'X',\n'DFL', 'X',\n'DF\
3638 O', 'X',\n'DFP', 'X',\n'DFR', 'X',\n'DFT', 'X',\n'\
3639 DFV', 'X',\n'DFX', 'X',\n'DG2', 'X',\n'DG3', 'X',\\
3640 n'DG6', 'X',\n'DGA', 'X',\n'DGD', 'X',\n'DGG', 'X'\
3641 ,\n'DGL', 'E',\n'DGN', 'Q',\n'DGP', 'X',\n'DGT', '\
3642 X',\n'DGX', 'X',\n'DH2', 'X',\n'DHA', 'A',\n'DHB',\
3643  'X',\n'DHC', 'X',\n'DHD', 'X',\n'DHE', 'X',\n'DHF\
3644 ', 'X',\n'DHG', 'X',\n'DHI', 'H',\n'DHL', 'X',\n'D\
3645 HM', 'X',\n'DHN', 'V',\n'DHP', 'X',\n'DHQ', 'X',\n\
3646 'DHR', 'X',\n'DHS', 'X',\n'DHT', 'X',\n'DHU', 'X',\
3647 \n'DHY', 'X',\n'DHZ', 'X',\n'DI2', 'X',\n'DI3', 'G\
3648 ',\n'DI4', 'X',\n'DI5', 'X',\n'DIA', 'X',\n'DIC', \
3649 'X',\n'DIF', 'X',\n'DIG', 'X',\n'DII', 'X',\n'DIL'\
3650 , 'I',\n'DIM', 'X',\n'DIO', 'X',\n'DIP', 'X',\n'DI\
3651 Q', 'X',\n'DIS', 'X',\n'DIT', 'X',\n'DIV', 'V',\n'\
3652 DIX', 'X',\n'DIY', 'X',\n'DKA', 'X',\n'DLA', 'X',\\
3653 n'DLE', 'L',\n'DLF', 'X',\n'DLS', 'K',\n'DLY', 'K'\
3654 ,\n'DM1', 'X',\n'DM2', 'X',\n'DM3', 'X',\n'DM4', '\
3655 X',\n'DM5', 'X',\n'DM6', 'X',\n'DM7', 'X',\n'DM8',\
3656  'X',\n'DM9', 'X',\n'DMA', 'X',\n'DMB', 'X',\n'DMC\
3657 ', 'X',\n'DMD', 'X',\n'DME', 'X',\n'DMF', 'X',\n'D\
3658 MG', 'G',\n'DMH', 'N',\n'DMI', 'X',\n'DMJ', 'X',\n\
3659 'DML', 'X',\n'DMM', 'X',\n'DMN', 'X',\n'DMO', 'X',\
3660 \n'DMP', 'X',\n'DMQ', 'X',\n'DMR', 'X',\n'DMS', 'X\
3661 ',\n'DMT', 'X',\n'DMV', 'X',\n'DMY', 'X',\n'DNC', \
3662 'X',\n'DND', 'X',\n'DNH', 'X',\n'DNJ', 'X',\n'DNN'\
3663 , 'X',\n'DNP', 'X',\n'DNQ', 'X',\n'DNR', 'X',\n'DO\
3664 2', 'X',\n'DO3', 'X',\n'DOA', 'X',\n'DOB', 'X',\n'\
3665 DOC', 'X',\n'DOH', 'D',\n'DOM', 'X',\n'DOS', 'X',\\
3666 n'DOX', 'X',\n'DP5', 'X',\n'DP7', 'X',\n'DPA', 'X'\
3667 ,\n'DPC', 'X',\n'DPD', 'X',\n'DPE', 'X',\n'DPG', '\
3668 X',\n'DPH', 'F',\n'DPM', 'X',\n'DPN', 'F',\n'DPO',\
3669  'X',\n'DPP', 'X',\n'DPR', 'P',\n'DPS', 'X',\n'DPT\
3670 ', 'X',\n'DPX', 'X',\n'DPY', 'X',\n'DPZ', 'X',\n'D\
3671 QH', 'X',\n'DQN', 'X',\n'DR1', 'X',\n'DRB', 'X',\n\
3672 'DRC', 'X',\n'DRI', 'X',\n'DRP', 'X',\n'DRT', 'X',\
3673 \n'DRU', 'X',\n'DSA', 'X',\n'DSB', 'X',\n'DSC', 'X\
3674 ',\n'DSD', 'X',\n'DSE', 'S',\n'DSI', 'X',\n'DSN', \
3675 'S',\n'DSP', 'D',\n'DSR', 'X',\n'DSS', 'X',\n'DSX'\
3676 , 'X',\n'DSY', 'X',\n'DTB', 'X',\n'DTD', 'X',\n'DT\
3677 H', 'T',\n'DTN', 'X',\n'DTO', 'X',\n'DTP', 'X',\n'\
3678 DTQ', 'X',\n'DTR', 'W',\n'DTT', 'X',\n'DTY', 'Y',\\
3679 n'DUD', 'X',\n'DUO', 'X',\n'DUR', 'X',\n'DUT', 'X'\
3680 ,\n'DVA', 'V',\n'DVR', 'X',\n'DX9', 'X',\n'DXA', '\
3681 X',\n'DXB', 'X',\n'DXC', 'X',\n'DXG', 'X',\n'DXX',\
3682  'X',\n'DZF', 'X',\n'E09', 'X',\n'E20', 'X',\n'E2P\
3683 ', 'X',\n'E3G', 'X',\n'E4N', 'X',\n'E4P', 'X',\n'E\
3684 64', 'X',\n'E6C', 'X',\n'E96', 'X',\n'E97', 'X',\n\
3685 'EA2', 'X',\n'EAA', 'X',\n'EAP', 'X',\n'EBP', 'X',\
3686 \n'EBW', 'X',\n'ECO', 'X',\n'EDA', 'X',\n'EDC', 'X\
3687 ',\n'EDE', 'X',\n'EDO', 'X',\n'EDR', 'X',\n'EEB', \
3688 'X',\n'EEE', 'X',\n'EFC', 'X',\n'EFZ', 'X',\n'EG1'\
3689 , 'X',\n'EG2', 'X',\n'EG3', 'X',\n'EGC', 'X',\n'EG\
3690 L', 'X',\n'EHP', 'A',\n'EIC', 'X',\n'EJT', 'X',\n'\
3691 ELA', 'X',\n'EMB', 'X',\n'EMC', 'X',\n'EMD', 'X',\\
3692 n'EMM', 'X',\n'EMO', 'X',\n'EMP', 'X',\n'EMR', 'X'\
3693 ,\n'ENA', 'X',\n'ENC', 'X',\n'ENH', 'X',\n'ENO', '\
3694 X',\n'ENP', 'X',\n'EOA', 'X',\n'EOH', 'X',\n'EOT',\
3695  'X',\n'EOX', 'X',\n'EPA', 'X',\n'EPE', 'X',\n'EPH\
3696 ', 'X',\n'EPI', 'X',\n'EPN', 'X',\n'EPO', 'X',\n'E\
3697 PT', 'X',\n'EPU', 'X',\n'EPX', 'X',\n'EPY', 'X',\n\
3698 'EQI', 'X',\n'EQP', 'X',\n'EQU', 'X',\n'ERG', 'X',\
3699 \n'ERI', 'X',\n'ERY', 'X',\n'ESC', 'X',\n'ESD', 'X\
3700 ',\n'ESI', 'X',\n'ESO', 'X',\n'ESP', 'X',\n'EST', \
3701 'X',\n'ESX', 'X',\n'ETA', 'X',\n'ETC', 'X',\n'ETD'\
3702 , 'X',\n'ETF', 'X',\n'ETH', 'X',\n'ETI', 'X',\n'ET\
3703 N', 'X',\n'ETO', 'X',\n'ETP', 'X',\n'ETR', 'X',\n'\
3704 ETS', 'X',\n'ETY', 'X',\n'EU3', 'X',\n'EUG', 'X',\\
3705 n'EYS', 'C',\n'F09', 'X',\n'F2B', 'X',\n'F3S', 'X'\
3706 ,\n'F42', 'X',\n'F43', 'X',\n'F4S', 'X',\n'F6B', '\
3707 X',\n'F6P', 'X',\n'F89', 'X',\n'FA1', 'X',\n'FA5',\
3708  'F',\n'FAA', 'X',\n'FAB', 'X',\n'FAC', 'X',\n'FAD\
3709 ', 'X',\n'FAF', 'X',\n'FAG', 'X',\n'FAM', 'X',\n'F\
3710 AR', 'X',\n'FAS', 'X',\n'FAT', 'X',\n'FBA', 'X',\n\
3711 'FBE', 'X',\n'FBI', 'X',\n'FBP', 'X',\n'FBQ', 'X',\
3712 \n'FBS', 'X',\n'FBT', 'X',\n'FBU', 'X',\n'FCA', 'X\
3713 ',\n'FCB', 'X',\n'FCI', 'X',\n'FCN', 'X',\n'FCO', \
3714 'X',\n'FCR', 'X',\n'FCT', 'X',\n'FCX', 'X',\n'FCY'\
3715 , 'C',\n'FD1', 'F',\n'FD2', 'F',\n'FD3', 'F',\n'FD\
3716 4', 'F',\n'FDA', 'X',\n'FDC', 'X',\n'FDI', 'X',\n'\
3717 FDP', 'X',\n'FDS', 'X',\n'FE2', 'X',\n'FEA', 'X',\\
3718 n'FEL', 'X',\n'FEM', 'X',\n'FEN', 'X',\n'FEO', 'X'\
3719 ,\n'FEP', 'X',\n'FER', 'X',\n'FES', 'X',\n'FFB', '\
3720 X',\n'FFC', 'X',\n'FFF', 'X',\n'FFO', 'X',\n'FGL',\
3721  'G',\n'FHB', 'X',\n'FHC', 'X',\n'FHP', 'X',\n'FHU\
3722 ', 'X',\n'FID', 'X',\n'FII', 'X',\n'FIP', 'X',\n'F\
3723 K5', 'X',\n'FKA', 'X',\n'FKI', 'X',\n'FKP', 'X',\n\
3724 'FL2', 'X',\n'FL9', 'X',\n'FLA', 'A',\n'FLC', 'X',\
3725 \n'FLD', 'X',\n'FLE', 'L',\n'FLF', 'X',\n'FLO', 'X\
3726 ',\n'FLP', 'X',\n'FLT', 'Y',\n'FLU', 'X',\n'FLX', \
3727 'X',\n'FM1', 'X',\n'FM2', 'X',\n'FMA', 'X',\n'FMB'\
3728 , 'X',\n'FMC', 'X',\n'FME', 'M',\n'FMN', 'X',\n'FM\
3729 P', 'X',\n'FMR', 'X',\n'FMS', 'X',\n'FMT', 'X',\n'\
3730 FNE', 'X',\n'FNP', 'X',\n'FNS', 'X',\n'FOC', 'X',\\
3731 n'FOE', 'X',\n'FOG', 'F',\n'FOH', 'X',\n'FOK', 'X'\
3732 ,\n'FOL', 'X',\n'FON', 'X',\n'FOP', 'X',\n'FOR', '\
3733 X',\n'FOS', 'X',\n'FPA', 'X',\n'FPC', 'X',\n'FPI',\
3734  'X',\n'FPO', 'X',\n'FPP', 'X',\n'FPT', 'X',\n'FQP\
3735 ', 'X',\n'FRA', 'X',\n'FRD', 'F',\n'FRU', 'X',\n'F\
3736 S3', 'X',\n'FS4', 'X',\n'FSB', 'X',\n'FSO', 'X',\n\
3737 'FSX', 'X',\n'FTC', 'X',\n'FTP', 'X',\n'FTR', 'W',\
3738 \n'FTT', 'X',\n'FTY', 'Y',\n'FUA', 'X',\n'FUC', 'X\
3739 ',\n'FUM', 'X',\n'FUP', 'X',\n'FVF', 'X',\n'FXP', \
3740 'X',\n'FXV', 'X',\n'FYA', 'F',\n'G16', 'X',\n'G1P'\
3741 , 'X',\n'G20', 'X',\n'G21', 'X',\n'G23', 'X',\n'G2\
3742 6', 'X',\n'G28', 'X',\n'G2F', 'X',\n'G37', 'X',\n'\
3743 G39', 'X',\n'G3H', 'X',\n'G3P', 'X',\n'G4D', 'X',\\
3744 n'G6D', 'X',\n'G6P', 'X',\n'G6Q', 'X',\n'G7M', 'X'\
3745 ,\n'GA2', 'X',\n'GAA', 'X',\n'GAB', 'X',\n'GAC', '\
3746 X',\n'GAI', 'X',\n'GAL', 'X',\n'GAM', 'X',\n'GAN',\
3747  'X',\n'GAO', 'X',\n'GAP', 'X',\n'GAR', 'G',\n'GAS\
3748 ', 'X',\n'GAT', 'X',\n'GBC', 'X',\n'GBI', 'X',\n'G\
3749 BP', 'X',\n'GBS', 'X',\n'GBX', 'X',\n'GC4', 'X',\n\
3750 'GCA', 'X',\n'GCD', 'X',\n'GCG', 'G',\n'GCH', 'G',\
3751 \n'GCK', 'X',\n'GCL', 'X',\n'GCM', 'X',\n'GCN', 'X\
3752 ',\n'GCO', 'X',\n'GCP', 'X',\n'GCR', 'X',\n'GCS', \
3753 'X',\n'GCU', 'X',\n'GD3', 'X',\n'GDB', 'X',\n'GDM'\
3754 , 'X',\n'GDN', 'X',\n'GDP', 'X',\n'GDS', 'X',\n'GD\
3755 U', 'X',\n'GE1', 'X',\n'GE2', 'X',\n'GE3', 'X',\n'\
3756 GEA', 'X',\n'GEL', 'X',\n'GEM', 'X',\n'GEN', 'X',\\
3757 n'GEP', 'X',\n'GER', 'X',\n'GFP', 'X',\n'GGB', 'X'\
3758 ,\n'GGL', 'E',\n'GGP', 'X',\n'GHP', 'G',\n'GIP', '\
3759 X',\n'GIS', 'X',\n'GKR', 'X',\n'GL2', 'X',\n'GL3',\
3760  'G',\n'GL4', 'X',\n'GL5', 'X',\n'GL7', 'X',\n'GL9\
3761 ', 'X',\n'GLA', 'X',\n'GLB', 'X',\n'GLC', 'X',\n'G\
3762 LD', 'X',\n'GLE', 'X',\n'GLF', 'X',\n'GLG', 'X',\n\
3763 'GLH', 'Q',\n'GLI', 'X',\n'GLL', 'X',\n'GLM', 'G',\
3764 \n'GLN', 'Q',\n'GLO', 'X',\n'GLP', 'X',\n'GLR', 'X\
3765 ',\n'GLS', 'X',\n'GLT', 'X',\n'GLU', 'E',\n'GLV', \
3766 'X',\n'GLW', 'X',\n'GLY', 'G',\n'GLZ', 'X',\n'GM1'\
3767 , 'X',\n'GMA', 'X',\n'GMC', 'X',\n'GMH', 'X',\n'GM\
3768 P', 'X',\n'GMY', 'X',\n'GN7', 'X',\n'GNA', 'X',\n'\
3769 GNB', 'X',\n'GNH', 'X',\n'GNP', 'X',\n'GNT', 'X',\\
3770 n'GOA', 'X',\n'GOL', 'X',\n'GOX', 'X',\n'GP1', 'X'\
3771 ,\n'GP3', 'X',\n'GP4', 'X',\n'GP6', 'X',\n'GP8', '\
3772 X',\n'GPB', 'E',\n'GPC', 'X',\n'GPE', 'X',\n'GPG',\
3773  'X',\n'GPI', 'X',\n'GPJ', 'X',\n'GPL', 'K',\n'GPM\
3774 ', 'X',\n'GPN', 'G',\n'GPP', 'X',\n'GPR', 'X',\n'G\
3775 PS', 'X',\n'GPX', 'X',\n'GR1', 'X',\n'GR3', 'X',\n\
3776 'GR4', 'X',\n'GSA', 'X',\n'GSB', 'X',\n'GSC', 'G',\
3777 \n'GSE', 'S',\n'GSH', 'X',\n'GSP', 'X',\n'GSR', 'X\
3778 ',\n'GSS', 'X',\n'GT9', 'C',\n'GTA', 'X',\n'GTB', \
3779 'X',\n'GTD', 'X',\n'GTE', 'X',\n'GTH', 'T',\n'GTN'\
3780 , 'X',\n'GTO', 'X',\n'GTP', 'X',\n'GTR', 'X',\n'GT\
3781 S', 'X',\n'GTT', 'X',\n'GTX', 'X',\n'GTZ', 'X',\n'\
3782 GU7', 'X',\n'GUA', 'X',\n'GUD', 'X',\n'GUM', 'X',\\
3783 n'GUN', 'X',\n'GUP', 'X',\n'GUR', 'X',\n'GW3', 'X'\
3784 ,\n'GZZ', 'X',\n'H2B', 'X',\n'H2P', 'H',\n'H2S', '\
3785 X',\n'H2U', 'X',\n'H4B', 'X',\n'H5M', 'P',\n'H5P',\
3786  'X',\n'HAA', 'X',\n'HAB', 'X',\n'HAC', 'A',\n'HAD\
3787 ', 'X',\n'HAE', 'X',\n'HAG', 'X',\n'HAI', 'X',\n'H\
3788 AM', 'X',\n'HAP', 'X',\n'HAQ', 'X',\n'HAR', 'R',\n\
3789 'HAS', 'X',\n'HAV', 'V',\n'HAX', 'X',\n'HAZ', 'X',\
3790 \n'HBA', 'X',\n'HBC', 'X',\n'HBD', 'X',\n'HBI', 'X\
3791 ',\n'HBO', 'X',\n'HBU', 'X',\n'HBY', 'X',\n'HC0', \
3792 'X',\n'HC1', 'X',\n'HC4', 'X',\n'HCA', 'X',\n'HCC'\
3793 , 'X',\n'HCI', 'X',\n'HCS', 'X',\n'HDA', 'X',\n'HD\
3794 D', 'X',\n'HDF', 'X',\n'HDN', 'X',\n'HDS', 'X',\n'\
3795 HDZ', 'X',\n'HE1', 'X',\n'HE6', 'X',\n'HEA', 'X',\\
3796 n'HEB', 'X',\n'HEC', 'X',\n'HED', 'X',\n'HEE', 'X'\
3797 ,\n'HEF', 'X',\n'HEG', 'X',\n'HEM', 'X',\n'HEN', '\
3798 X',\n'HEO', 'X',\n'HEP', 'X',\n'HEU', 'X',\n'HEV',\
3799  'X',\n'HEX', 'X',\n'HEZ', 'X',\n'HF1', 'X',\n'HFA\
3800 ', 'X',\n'HFP', 'X',\n'HGA', 'Q',\n'HGB', 'X',\n'H\
3801 GC', 'X',\n'HGI', 'X',\n'HGU', 'X',\n'HHO', 'X',\n\
3802 'HHP', 'X',\n'HIB', 'X',\n'HIC', 'H',\n'HII', 'X',\
3803 \n'HIN', 'X',\n'HIO', 'X',\n'HIP', 'H',\n'HIS', 'H\
3804 ',\n'HLE', 'X',\n'HLT', 'X',\n'HMA', 'A',\n'HMB', \
3805 'X',\n'HMC', 'X',\n'HMD', 'X',\n'HMF', 'A',\n'HMG'\
3806 , 'X',\n'HMH', 'X',\n'HMI', 'L',\n'HMM', 'X',\n'HM\
3807 N', 'X',\n'HMO', 'X',\n'HMP', 'X',\n'HMR', 'R',\n'\
3808 HNI', 'X',\n'HNP', 'X',\n'HOA', 'X',\n'HOE', 'X',\\
3809 n'HOH', 'X',\n'HOM', 'X',\n'HOP', 'X',\n'HOQ', 'X'\
3810 ,\n'HP1', 'A',\n'HP2', 'A',\n'HP3', 'X',\n'HPA', '\
3811 X',\n'HPB', 'X',\n'HPC', 'X',\n'HPD', 'X',\n'HPE',\
3812  'A',\n'HPG', 'X',\n'HPH', 'F',\n'HPP', 'X',\n'HPQ\
3813 ', 'F',\n'HPR', 'X',\n'HPT', 'X',\n'HPY', 'X',\n'H\
3814 QO', 'X',\n'HQQ', 'X',\n'HQU', 'X',\n'HRG', 'R',\n\
3815 'HRI', 'X',\n'HSA', 'X',\n'HSE', 'S',\n'HSF', 'X',\
3816 \n'HSM', 'X',\n'HSO', 'H',\n'HSP', 'X',\n'HT1', 'X\
3817 ',\n'HT2', 'X',\n'HTA', 'X',\n'HTL', 'X',\n'HTO', \
3818 'X',\n'HTP', 'X',\n'HTR', 'W',\n'HUP', 'X',\n'HUX'\
3819 , 'X',\n'HV5', 'A',\n'HV7', 'X',\n'HV8', 'X',\n'HX\
3820 A', 'X',\n'HXC', 'X',\n'HXP', 'X',\n'HY1', 'X',\n'\
3821 HYA', 'X',\n'HYB', 'X',\n'HYD', 'X',\n'HYG', 'X',\\
3822 n'HYP', 'P',\n'I06', 'X',\n'I10', 'X',\n'I11', 'X'\
3823 ,\n'I17', 'X',\n'I2P', 'X',\n'I3N', 'X',\n'I3P', '\
3824 X',\n'I40', 'X',\n'I48', 'X',\n'I4B', 'X',\n'I52',\
3825  'X',\n'I5P', 'X',\n'I84', 'G',\n'IAG', 'G',\n'IAS\
3826 ', 'X',\n'IB2', 'X',\n'IBB', 'X',\n'IBP', 'X',\n'I\
3827 BR', 'X',\n'IBS', 'X',\n'IBZ', 'X',\n'IC1', 'X',\n\
3828 'ICA', 'X',\n'ICI', 'X',\n'ICL', 'X',\n'ICP', 'X',\
3829 \n'ICT', 'X',\n'ICU', 'X',\n'ID2', 'X',\n'IDC', 'X\
3830 ',\n'IDG', 'X',\n'IDH', 'X',\n'IDM', 'X',\n'IDO', \
3831 'X',\n'IDP', 'X',\n'IDR', 'X',\n'IDS', 'X',\n'IDT'\
3832 , 'X',\n'IDU', 'X',\n'IFG', 'X',\n'IFP', 'X',\n'IG\
3833 L', 'X',\n'IGN', 'X',\n'IGP', 'X',\n'IGU', 'X',\n'\
3834 IH1', 'X',\n'IH2', 'X',\n'IH3', 'X',\n'IHB', 'X',\\
3835 n'IHN', 'X',\n'IHP', 'X',\n'IIC', 'X',\n'IIL', 'I'\
3836 ,\n'IIP', 'X',\n'IK2', 'X',\n'IKT', 'X',\n'ILA', '\
3837 I',\n'ILE', 'I',\n'ILG', 'X',\n'ILO', 'X',\n'ILX',\
3838  'I',\n'IM1', 'X',\n'IM2', 'X',\n'IMC', 'X',\n'IMD\
3839 ', 'X',\n'IME', 'X',\n'IMF', 'X',\n'IMG', 'X',\n'I\
3840 MH', 'X',\n'IMI', 'X',\n'IML', 'I',\n'IMM', 'X',\n\
3841 'IMN', 'X',\n'IMO', 'X',\n'IMP', 'X',\n'IMR', 'X',\
3842 \n'IMU', 'X',\n'IN0', 'D',\n'IN1', 'R',\n'IN2', 'K\
3843 ',\n'IN3', 'L',\n'IN4', 'X',\n'IN5', 'A',\n'IN6', \
3844 'L',\n'IN7', 'X',\n'IN8', 'X',\n'IN9', 'X',\n'INA'\
3845 , 'L',\n'INB', 'X',\n'INC', 'X',\n'IND', 'X',\n'IN\
3846 E', 'X',\n'INF', 'F',\n'ING', 'F',\n'INH', 'R',\n'\
3847 INI', 'X',\n'INJ', 'X',\n'INK', 'X',\n'INL', 'X',\\
3848 n'INM', 'X',\n'INN', 'A',\n'INO', 'X',\n'INP', 'X'\
3849 ,\n'INQ', 'X',\n'INR', 'X',\n'INS', 'X',\n'INT', '\
3850 V',\n'INU', 'X',\n'INV', 'X',\n'INW', 'X',\n'INX',\
3851  'X',\n'INY', 'X',\n'INZ', 'X',\n'IOA', 'X',\n'IOB\
3852 ', 'X',\n'IOC', 'X',\n'IOD', 'X',\n'IOE', 'X',\n'I\
3853 OF', 'X',\n'IOH', 'X',\n'IOL', 'X',\n'IOP', 'X',\n\
3854 'IP1', 'X',\n'IP2', 'X',\n'IP3', 'X',\n'IP4', 'X',\
3855 \n'IPA', 'X',\n'IPB', 'X',\n'IPD', 'X',\n'IPG', 'G\
3856 ',\n'IPH', 'X',\n'IPL', 'X',\n'IPM', 'X',\n'IPN', \
3857 'X',\n'IPO', 'F',\n'IPP', 'X',\n'IPS', 'X',\n'IPT'\
3858 , 'X',\n'IPU', 'X',\n'IPY', 'A',\n'IQB', 'X',\n'IQ\
3859 P', 'X',\n'IQS', 'X',\n'IR3', 'X',\n'IRI', 'X',\n'\
3860 IRP', 'X',\n'ISA', 'X',\n'ISF', 'X',\n'ISO', 'X',\\
3861 n'ISP', 'X',\n'ISQ', 'X',\n'ISU', 'X',\n'ITM', 'X'\
3862 ,\n'ITP', 'X',\n'ITR', 'W',\n'ITS', 'X',\n'ITU', '\
3863 X',\n'IU5', 'X',\n'IUM', 'X',\n'IUR', 'X',\n'IVA',\
3864  'X',\n'IYG', 'G',\n'IYR', 'Y',\n'J77', 'X',\n'J78\
3865 ', 'X',\n'J80', 'X',\n'JE2', 'X',\n'JEN', 'X',\n'J\
3866 ST', 'X',\n'K21', 'X',\n'KAH', 'X',\n'KAI', 'X',\n\
3867 'KAM', 'X',\n'KAN', 'X',\n'KAP', 'X',\n'KCP', 'X',\
3868 \n'KCX', 'K',\n'KDO', 'X',\n'KEF', 'X',\n'KET', 'X\
3869 ',\n'KGR', 'X',\n'KH1', 'X',\n'KIF', 'X',\n'KIV', \
3870 'V',\n'KNI', 'X',\n'KPH', 'K',\n'KTH', 'X',\n'KTN'\
3871 , 'X',\n'KTP', 'X',\n'KWT', 'X',\n'L04', 'X',\n'L1\
3872 P', 'X',\n'L24', 'E',\n'L2P', 'X',\n'L34', 'E',\n'\
3873 L37', 'E',\n'L3P', 'X',\n'L4P', 'X',\n'L75', 'X',\\
3874 n'LAC', 'X',\n'LAD', 'X',\n'LAK', 'X',\n'LAM', 'X'\
3875 ,\n'LAR', 'X',\n'LAT', 'X',\n'LAX', 'X',\n'LCO', '\
3876 X',\n'LCP', 'X',\n'LCS', 'X',\n'LDA', 'X',\n'LDO',\
3877  'L',\n'LDP', 'X',\n'LEA', 'X',\n'LEO', 'X',\n'LEU\
3878 ', 'L',\n'LG2', 'X',\n'LG6', 'X',\n'LGC', 'X',\n'L\
3879 GP', 'X',\n'LHG', 'X',\n'LHY', 'F',\n'LI1', 'X',\n\
3880 'LIG', 'X',\n'LIL', 'X',\n'LIM', 'X',\n'LIN', 'X',\
3881 \n'LIO', 'X',\n'LIP', 'X',\n'LLA', 'X',\n'LLP', 'K\
3882 ',\n'LLY', 'K',\n'LMG', 'X',\n'LML', 'X',\n'LMT', \
3883 'X',\n'LMU', 'X',\n'LMZ', 'X',\n'LNK', 'X',\n'LNL'\
3884 , 'X',\n'LNO', 'X',\n'LOF', 'X',\n'LOL', 'L',\n'LO\
3885 M', 'X',\n'LOR', 'X',\n'LOS', 'X',\n'LOV', 'L',\n'\
3886 LOX', 'X',\n'LP1', 'X',\n'LP2', 'R',\n'LPA', 'X',\\
3887 n'LPC', 'X',\n'LPF', 'X',\n'LPL', 'X',\n'LPM', 'X'\
3888 ,\n'LPP', 'X',\n'LRB', 'X',\n'LRU', 'X',\n'LS1', '\
3889 X',\n'LS2', 'X',\n'LS3', 'X',\n'LS4', 'X',\n'LS5',\
3890  'X',\n'LTA', 'X',\n'LTL', 'X',\n'LTR', 'W',\n'LUM\
3891 ', 'X',\n'LVS', 'L',\n'LXC', 'X',\n'LY2', 'X',\n'L\
3892 Y3', 'X',\n'LYA', 'X',\n'LYB', 'X',\n'LYC', 'X',\n\
3893 'LYD', 'X',\n'LYM', 'K',\n'LYN', 'X',\n'LYS', 'K',\
3894 \n'LYT', 'X',\n'LYW', 'X',\n'LYZ', 'K',\n'M1A', 'X\
3895 ',\n'M1G', 'X',\n'M2G', 'X',\n'M3L', 'K',\n'M6P', \
3896 'X',\n'M6T', 'X',\n'M7G', 'X',\n'MA1', 'X',\n'MA2'\
3897 , 'X',\n'MA3', 'X',\n'MA4', 'X',\n'MA6', 'X',\n'MA\
3898 A', 'A',\n'MAB', 'X',\n'MAC', 'X',\n'MAE', 'X',\n'\
3899 MAG', 'X',\n'MAH', 'X',\n'MAI', 'R',\n'MAK', 'X',\\
3900 n'MAL', 'X',\n'MAM', 'X',\n'MAN', 'X',\n'MAO', 'X'\
3901 ,\n'MAP', 'X',\n'MAR', 'X',\n'MAS', 'X',\n'MAT', '\
3902 X',\n'MAU', 'X',\n'MAZ', 'X',\n'MBA', 'X',\n'MBD',\
3903  'X',\n'MBG', 'X',\n'MBH', 'X',\n'MBN', 'X',\n'MBO\
3904 ', 'X',\n'MBR', 'X',\n'MBS', 'X',\n'MBV', 'X',\n'M\
3905 BZ', 'X',\n'MCA', 'X',\n'MCD', 'X',\n'MCE', 'X',\n\
3906 'MCG', 'G',\n'MCI', 'X',\n'MCN', 'X',\n'MCP', 'X',\
3907 \n'MCT', 'X',\n'MCY', 'X',\n'MD2', 'X',\n'MDA', 'X\
3908 ',\n'MDC', 'X',\n'MDG', 'X',\n'MDH', 'X',\n'MDL', \
3909 'X',\n'MDM', 'X',\n'MDN', 'X',\n'MDP', 'X',\n'ME6'\
3910 , 'X',\n'MEB', 'X',\n'MEC', 'X',\n'MEL', 'X',\n'ME\
3911 N', 'N',\n'MEP', 'X',\n'MER', 'X',\n'MES', 'X',\n'\
3912 MET', 'M',\n'MEV', 'X',\n'MF2', 'X',\n'MF3', 'M',\\
3913 n'MFB', 'X',\n'MFD', 'X',\n'MFU', 'X',\n'MG7', 'X'\
3914 ,\n'MGA', 'X',\n'MGB', 'X',\n'MGD', 'X',\n'MGG', '\
3915 R',\n'MGL', 'X',\n'MGN', 'Q',\n'MGO', 'X',\n'MGP',\
3916  'X',\n'MGR', 'X',\n'MGS', 'X',\n'MGT', 'X',\n'MGU\
3917 ', 'X',\n'MGY', 'G',\n'MHB', 'X',\n'MHF', 'X',\n'M\
3918 HL', 'L',\n'MHM', 'X',\n'MHO', 'M',\n'MHS', 'H',\n\
3919 'MHZ', 'X',\n'MIA', 'X',\n'MIC', 'X',\n'MID', 'X',\
3920 \n'MIL', 'X',\n'MIM', 'X',\n'MIN', 'G',\n'MIP', 'X\
3921 ',\n'MIS', 'S',\n'MIT', 'X',\n'MJI', 'X',\n'MK1', \
3922 'X',\n'MKC', 'X',\n'MLA', 'X',\n'MLC', 'X',\n'MLE'\
3923 , 'L',\n'MLN', 'X',\n'MLT', 'X',\n'MLY', 'K',\n'ML\
3924 Z', 'K',\n'MM3', 'X',\n'MM4', 'X',\n'MMA', 'X',\n'\
3925 MMC', 'X',\n'MME', 'M',\n'MMO', 'R',\n'MMP', 'X',\\
3926 n'MMQ', 'X',\n'MMT', 'X',\n'MN1', 'X',\n'MN2', 'X'\
3927 ,\n'MN3', 'X',\n'MN5', 'X',\n'MN7', 'X',\n'MN8', '\
3928 X',\n'MNA', 'X',\n'MNB', 'X',\n'MNC', 'X',\n'MNG',\
3929  'X',\n'MNL', 'L',\n'MNO', 'X',\n'MNP', 'X',\n'MNQ\
3930 ', 'X',\n'MNS', 'X',\n'MNT', 'X',\n'MNV', 'V',\n'M\
3931 O1', 'X',\n'MO2', 'X',\n'MO3', 'X',\n'MO4', 'X',\n\
3932 'MO5', 'X',\n'MO6', 'X',\n'MOA', 'X',\n'MOB', 'X',\
3933 \n'MOC', 'X',\n'MOE', 'X',\n'MOG', 'X',\n'MOH', 'X\
3934 ',\n'MOL', 'X',\n'MOO', 'X',\n'MOP', 'X',\n'MOR', \
3935 'X',\n'MOS', 'X',\n'MOT', 'X',\n'MOX', 'X',\n'MP1'\
3936 , 'X',\n'MP3', 'X',\n'MPA', 'X',\n'MPB', 'X',\n'MP\
3937 C', 'X',\n'MPD', 'X',\n'MPG', 'X',\n'MPH', 'M',\n'\
3938 MPI', 'X',\n'MPJ', 'M',\n'MPL', 'X',\n'MPN', 'X',\\
3939 n'MPO', 'X',\n'MPP', 'X',\n'MPQ', 'G',\n'MPR', 'X'\
3940 ,\n'MPS', 'X',\n'MQ0', 'X',\n'MQ7', 'X',\n'MQ8', '\
3941 X',\n'MQ9', 'X',\n'MQI', 'X',\n'MR2', 'X',\n'MRC',\
3942  'X',\n'MRM', 'X',\n'MRP', 'X',\n'MS2', 'X',\n'MSA\
3943 ', 'X',\n'MSB', 'X',\n'MSD', 'X',\n'MSE', 'M',\n'M\
3944 SF', 'X',\n'MSI', 'X',\n'MSO', 'M',\n'MSQ', 'X',\n\
3945 'MST', 'X',\n'MSU', 'X',\n'MTA', 'X',\n'MTB', 'X',\
3946 \n'MTC', 'X',\n'MTD', 'X',\n'MTE', 'X',\n'MTF', 'X\
3947 ',\n'MTG', 'X',\n'MTO', 'X',\n'MTS', 'X',\n'MTT', \
3948 'X',\n'MTX', 'X',\n'MTY', 'Y',\n'MUG', 'X',\n'MUP'\
3949 , 'X',\n'MUR', 'X',\n'MVA', 'V',\n'MW1', 'X',\n'MW\
3950 2', 'X',\n'MXA', 'X',\n'MXY', 'X',\n'MYA', 'X',\n'\
3951 MYC', 'X',\n'MYG', 'X',\n'MYR', 'X',\n'MYS', 'X',\\
3952 n'MYT', 'X',\n'MZM', 'X',\n'N1T', 'X',\n'N25', 'X'\
3953 ,\n'N2B', 'X',\n'N3T', 'X',\n'N4B', 'X',\n'NA2', '\
3954 X',\n'NA5', 'X',\n'NA6', 'X',\n'NAA', 'X',\n'NAB',\
3955  'X',\n'NAC', 'X',\n'NAD', 'X',\n'NAE', 'X',\n'NAF\
3956 ', 'X',\n'NAG', 'X',\n'NAH', 'X',\n'NAI', 'X',\n'N\
3957 AL', 'A',\n'NAM', 'A',\n'NAN', 'X',\n'NAO', 'X',\n\
3958 'NAP', 'X',\n'NAQ', 'X',\n'NAR', 'X',\n'NAS', 'X',\
3959 \n'NAU', 'X',\n'NAV', 'X',\n'NAW', 'X',\n'NAX', 'X\
3960 ',\n'NAY', 'X',\n'NBA', 'X',\n'NBD', 'X',\n'NBE', \
3961 'X',\n'NBG', 'X',\n'NBN', 'X',\n'NBP', 'X',\n'NBS'\
3962 , 'X',\n'NBU', 'X',\n'NCA', 'X',\n'NCB', 'A',\n'NC\
3963 D', 'X',\n'NCH', 'X',\n'NCM', 'X',\n'NCN', 'X',\n'\
3964 NCO', 'X',\n'NCR', 'X',\n'NCS', 'X',\n'ND4', 'X',\\
3965 n'NDA', 'X',\n'NDC', 'X',\n'NDD', 'X',\n'NDO', 'X'\
3966 ,\n'NDP', 'X',\n'NDT', 'X',\n'NEA', 'X',\n'NEB', '\
3967 X',\n'NED', 'X',\n'NEM', 'H',\n'NEN', 'X',\n'NEO',\
3968  'X',\n'NEP', 'H',\n'NEQ', 'X',\n'NES', 'X',\n'NET\
3969 ', 'X',\n'NEV', 'X',\n'NFA', 'F',\n'NFE', 'X',\n'N\
3970 FG', 'X',\n'NFP', 'X',\n'NFS', 'X',\n'NG6', 'X',\n\
3971 'NGA', 'X',\n'NGL', 'X',\n'NGM', 'X',\n'NGO', 'X',\
3972 \n'NGP', 'X',\n'NGT', 'X',\n'NGU', 'X',\n'NH2', 'X\
3973 ',\n'NH3', 'X',\n'NH4', 'X',\n'NHD', 'X',\n'NHE', \
3974 'X',\n'NHM', 'X',\n'NHP', 'X',\n'NHR', 'X',\n'NHS'\
3975 , 'X',\n'NI1', 'X',\n'NI2', 'X',\n'NIC', 'X',\n'NI\
3976 D', 'X',\n'NIK', 'X',\n'NIO', 'X',\n'NIP', 'X',\n'\
3977 NIT', 'X',\n'NIU', 'X',\n'NIY', 'Y',\n'NLA', 'X',\\
3978 n'NLE', 'L',\n'NLG', 'X',\n'NLN', 'L',\n'NLP', 'L'\
3979 ,\n'NM1', 'X',\n'NMA', 'A',\n'NMB', 'X',\n'NMC', '\
3980 G',\n'NMD', 'X',\n'NME', 'X',\n'NMN', 'X',\n'NMO',\
3981  'X',\n'NMQ', 'X',\n'NMX', 'X',\n'NMY', 'X',\n'NNH\
3982 ', 'R',\n'NNO', 'X',\n'NO2', 'X',\n'NO3', 'X',\n'N\
3983 OA', 'X',\n'NOD', 'X',\n'NOJ', 'X',\n'NON', 'X',\n\
3984 'NOP', 'X',\n'NOR', 'X',\n'NOS', 'X',\n'NOV', 'X',\
3985 \n'NOX', 'X',\n'NP3', 'X',\n'NPA', 'X',\n'NPC', 'X\
3986 ',\n'NPD', 'X',\n'NPE', 'X',\n'NPF', 'X',\n'NPH', \
3987 'C',\n'NPI', 'X',\n'NPL', 'X',\n'NPN', 'X',\n'NPO'\
3988 , 'X',\n'NPP', 'X',\n'NPT', 'X',\n'NPY', 'X',\n'NR\
3989 G', 'R',\n'NRI', 'X',\n'NS1', 'X',\n'NS5', 'X',\n'\
3990 NSP', 'X',\n'NTA', 'X',\n'NTB', 'X',\n'NTC', 'X',\\
3991 n'NTH', 'X',\n'NTM', 'X',\n'NTP', 'X',\n'NTS', 'X'\
3992 ,\n'NTU', 'X',\n'NTZ', 'X',\n'NU1', 'X',\n'NVA', '\
3993 V',\n'NVI', 'X',\n'NVP', 'X',\n'NW1', 'X',\n'NYP',\
3994  'X',\n'O4M', 'X',\n'OAA', 'X',\n'OAI', 'X',\n'OAP\
3995 ', 'X',\n'OAR', 'X',\n'OAS', 'S',\n'OBA', 'X',\n'O\
3996 BN', 'X',\n'OC1', 'X',\n'OC2', 'X',\n'OC3', 'X',\n\
3997 'OC4', 'X',\n'OC5', 'X',\n'OC6', 'X',\n'OC7', 'X',\
3998 \n'OCL', 'X',\n'OCM', 'X',\n'OCN', 'X',\n'OCO', 'X\
3999 ',\n'OCP', 'X',\n'OCS', 'C',\n'OCT', 'X',\n'OCV', \
4000 'K',\n'OCY', 'C',\n'ODA', 'X',\n'ODS', 'X',\n'OES'\
4001 , 'X',\n'OET', 'X',\n'OF1', 'X',\n'OF2', 'X',\n'OF\
4002 3', 'X',\n'OFL', 'X',\n'OFO', 'X',\n'OHE', 'X',\n'\
4003 OHO', 'X',\n'OHT', 'X',\n'OIC', 'X',\n'OIP', 'X',\\
4004 n'OKA', 'X',\n'OLA', 'X',\n'OLE', 'X',\n'OLI', 'X'\
4005 ,\n'OLO', 'X',\n'OMB', 'X',\n'OMC', 'X',\n'OMD', '\
4006 X',\n'OME', 'X',\n'OMG', 'X',\n'OMP', 'X',\n'OMT',\
4007  'M',\n'OMU', 'X',\n'ONE', 'X',\n'ONL', 'L',\n'ONP\
4008 ', 'X',\n'OPA', 'X',\n'OPD', 'X',\n'OPE', 'X',\n'O\
4009 PG', 'X',\n'OPH', 'X',\n'OPN', 'X',\n'OPP', 'X',\n\
4010 'OPR', 'R',\n'ORN', 'X',\n'ORO', 'X',\n'ORP', 'X',\
4011 \n'OSB', 'X',\n'OSS', 'X',\n'OTA', 'X',\n'OTB', 'X\
4012 ',\n'OTE', 'X',\n'OTG', 'X',\n'OUT', 'X',\n'OVA', \
4013 'X',\n'OWQ', 'X',\n'OXA', 'X',\n'OXE', 'X',\n'OXI'\
4014 , 'X',\n'OXL', 'X',\n'OXM', 'X',\n'OXN', 'X',\n'OX\
4015 O', 'X',\n'OXP', 'X',\n'OXS', 'X',\n'OXY', 'X',\n'\
4016 P11', 'A',\n'P24', 'X',\n'P28', 'X',\n'P2P', 'X',\\
4017 n'P2U', 'X',\n'P3M', 'X',\n'P4C', 'X',\n'P4P', 'X'\
4018 ,\n'P5P', 'X',\n'P6G', 'X',\n'PA1', 'X',\n'PA2', '\
4019 X',\n'PA3', 'X',\n'PA4', 'X',\n'PA5', 'X',\n'PAA',\
4020  'X',\n'PAB', 'X',\n'PAC', 'X',\n'PAD', 'X',\n'PAE\
4021 ', 'X',\n'PAG', 'X',\n'PAH', 'X',\n'PAI', 'X',\n'P\
4022 AL', 'D',\n'PAM', 'X',\n'PAN', 'X',\n'PAO', 'X',\n\
4023 'PAP', 'A',\n'PAQ', 'F',\n'PAR', 'X',\n'PAS', 'X',\
4024 \n'PAT', 'W',\n'PBA', 'X',\n'PBB', 'X',\n'PBC', 'X\
4025 ',\n'PBF', 'F',\n'PBG', 'X',\n'PBI', 'X',\n'PBM', \
4026 'X',\n'PBN', 'X',\n'PBP', 'X',\n'PBR', 'X',\n'PBZ'\
4027 , 'X',\n'PC2', 'X',\n'PCA', 'E',\n'PCB', 'X',\n'PC\
4028 D', 'X',\n'PCE', 'X',\n'PCG', 'X',\n'PCH', 'X',\n'\
4029 PCL', 'X',\n'PCM', 'X',\n'PCP', 'X',\n'PCR', 'X',\\
4030 n'PCS', 'X',\n'PCU', 'X',\n'PCV', 'X',\n'PCY', 'X'\
4031 ,\n'PD1', 'X',\n'PDA', 'X',\n'PDC', 'X',\n'PDD', '\
4032 A',\n'PDE', 'A',\n'PDI', 'X',\n'PDL', 'A',\n'PDN',\
4033  'X',\n'PDO', 'X',\n'PDP', 'X',\n'PDT', 'X',\n'PDU\
4034 ', 'X',\n'PE2', 'X',\n'PE6', 'X',\n'PEA', 'X',\n'P\
4035 EB', 'X',\n'PEC', 'X',\n'PED', 'X',\n'PEE', 'X',\n\
4036 'PEF', 'X',\n'PEG', 'X',\n'PEL', 'X',\n'PEO', 'X',\
4037 \n'PEP', 'X',\n'PEQ', 'X',\n'PER', 'X',\n'PET', 'X\
4038 ',\n'PFB', 'X',\n'PFC', 'X',\n'PFG', 'X',\n'PFL', \
4039 'X',\n'PFM', 'X',\n'PFZ', 'X',\n'PG4', 'X',\n'PG5'\
4040 , 'X',\n'PG6', 'X',\n'PGA', 'X',\n'PGC', 'X',\n'PG\
4041 D', 'X',\n'PGE', 'X',\n'PGG', 'G',\n'PGH', 'X',\n'\
4042 PGL', 'X',\n'PGO', 'X',\n'PGP', 'X',\n'PGQ', 'X',\\
4043 n'PGR', 'X',\n'PGS', 'X',\n'PGU', 'X',\n'PGX', 'X'\
4044 ,\n'PGY', 'G',\n'PH1', 'X',\n'PH2', 'X',\n'PH3', '\
4045 X',\n'PHA', 'F',\n'PHB', 'X',\n'PHC', 'X',\n'PHD',\
4046  'X',\n'PHE', 'F',\n'PHG', 'X',\n'PHH', 'X',\n'PHI\
4047 ', 'F',\n'PHL', 'F',\n'PHM', 'X',\n'PHN', 'X',\n'P\
4048 HO', 'X',\n'PHP', 'X',\n'PHQ', 'X',\n'PHS', 'H',\n\
4049 'PHT', 'X',\n'PHW', 'P',\n'PHY', 'X',\n'PI1', 'X',\
4050 \n'PI2', 'X',\n'PI3', 'X',\n'PI4', 'X',\n'PI5', 'X\
4051 ',\n'PI6', 'X',\n'PI7', 'X',\n'PI8', 'X',\n'PI9', \
4052 'X',\n'PIA', 'X',\n'PIB', 'X',\n'PIC', 'X',\n'PID'\
4053 , 'X',\n'PIG', 'X',\n'PIH', 'X',\n'PIM', 'X',\n'PI\
4054 N', 'X',\n'PIO', 'X',\n'PIP', 'X',\n'PIQ', 'X',\n'\
4055 PIR', 'X',\n'PIV', 'X',\n'PKF', 'X',\n'PL1', 'X',\\
4056 n'PL9', 'X',\n'PLA', 'D',\n'PLC', 'X',\n'PLE', 'L'\
4057 ,\n'PLG', 'G',\n'PLH', 'X',\n'PLM', 'X',\n'PLP', '\
4058 X',\n'PLS', 'S',\n'PLT', 'W',\n'PLU', 'L',\n'PLY',\
4059  'X',\n'PMA', 'X',\n'PMB', 'X',\n'PMC', 'X',\n'PME\
4060 ', 'F',\n'PML', 'X',\n'PMM', 'X',\n'PMO', 'X',\n'P\
4061 MP', 'X',\n'PMS', 'X',\n'PMY', 'X',\n'PN2', 'X',\n\
4062 'PNA', 'X',\n'PNB', 'X',\n'PNC', 'G',\n'PND', 'X',\
4063 \n'PNE', 'A',\n'PNF', 'X',\n'PNG', 'X',\n'PNI', 'X\
4064 ',\n'PNL', 'X',\n'PNM', 'X',\n'PNN', 'X',\n'PNO', \
4065 'X',\n'PNP', 'X',\n'PNQ', 'X',\n'PNS', 'X',\n'PNT'\
4066 , 'X',\n'PNU', 'X',\n'PO2', 'X',\n'PO4', 'X',\n'PO\
4067 B', 'X',\n'POC', 'X',\n'POL', 'X',\n'POM', 'P',\n'\
4068 PON', 'X',\n'POP', 'X',\n'POR', 'X',\n'POS', 'X',\\
4069 n'PP1', 'X',\n'PP2', 'X',\n'PP3', 'A',\n'PP4', 'X'\
4070 ,\n'PP5', 'X',\n'PP6', 'X',\n'PP7', 'X',\n'PP8', '\
4071 N',\n'PP9', 'X',\n'PPB', 'X',\n'PPC', 'X',\n'PPD',\
4072  'X',\n'PPE', 'E',\n'PPG', 'X',\n'PPH', 'F',\n'PPI\
4073 ', 'X',\n'PPJ', 'V',\n'PPL', 'X',\n'PPM', 'X',\n'P\
4074 PN', 'A',\n'PPO', 'X',\n'PPP', 'X',\n'PPQ', 'X',\n\
4075 'PPR', 'X',\n'PPS', 'X',\n'PPT', 'X',\n'PPU', 'X',\
4076 \n'PPX', 'F',\n'PPY', 'X',\n'PPZ', 'X',\n'PQ0', 'X\
4077 ',\n'PQN', 'X',\n'PQQ', 'X',\n'PR1', 'X',\n'PR2', \
4078 'X',\n'PR3', 'X',\n'PRA', 'X',\n'PRB', 'X',\n'PRC'\
4079 , 'X',\n'PRD', 'X',\n'PRE', 'X',\n'PRF', 'X',\n'PR\
4080 H', 'X',\n'PRI', 'P',\n'PRL', 'X',\n'PRN', 'X',\n'\
4081 PRO', 'P',\n'PRP', 'X',\n'PRR', 'A',\n'PRS', 'P',\\
4082 n'PRZ', 'X',\n'PS0', 'X',\n'PSA', 'X',\n'PSD', 'X'\
4083 ,\n'PSE', 'X',\n'PSF', 'S',\n'PSG', 'X',\n'PSI', '\
4084 X',\n'PSO', 'X',\n'PSQ', 'X',\n'PSS', 'X',\n'PST',\
4085  'X',\n'PSU', 'X',\n'PT1', 'X',\n'PT3', 'X',\n'PTA\
4086 ', 'X',\n'PTC', 'X',\n'PTD', 'X',\n'PTE', 'X',\n'P\
4087 TH', 'Y',\n'PTL', 'X',\n'PTM', 'Y',\n'PTN', 'X',\n\
4088 'PTO', 'X',\n'PTP', 'X',\n'PTR', 'Y',\n'PTS', 'X',\
4089 \n'PTT', 'X',\n'PTU', 'X',\n'PTY', 'X',\n'PUA', 'X\
4090 ',\n'PUB', 'X',\n'PUR', 'X',\n'PUT', 'X',\n'PVA', \
4091 'X',\n'PVB', 'X',\n'PVH', 'H',\n'PVL', 'X',\n'PXA'\
4092 , 'X',\n'PXF', 'X',\n'PXG', 'X',\n'PXP', 'X',\n'PX\
4093 Y', 'X',\n'PXZ', 'X',\n'PY2', 'X',\n'PY4', 'X',\n'\
4094 PY5', 'X',\n'PY6', 'X',\n'PYA', 'A',\n'PYC', 'X',\\
4095 n'PYD', 'X',\n'PYE', 'X',\n'PYL', 'X',\n'PYM', 'X'\
4096 ,\n'PYO', 'X',\n'PYP', 'X',\n'PYQ', 'X',\n'PYR', '\
4097 X',\n'PYS', 'X',\n'PYT', 'X',\n'PYX', 'X',\n'PYY',\
4098  'X',\n'PYZ', 'X',\n'PZQ', 'X',\n'Q82', 'X',\n'QNC\
4099 ', 'X',\n'QND', 'X',\n'QSI', 'Q',\n'QTR', 'X',\n'Q\
4100 UA', 'X',\n'QUE', 'X',\n'QUI', 'X',\n'QUO', 'X',\n\
4101 'R11', 'X',\n'R12', 'X',\n'R13', 'X',\n'R18', 'X',\
4102 \n'R1P', 'X',\n'R56', 'X',\n'R5P', 'X',\n'RA2', 'X\
4103 ',\n'RAD', 'X',\n'RAI', 'X',\n'RAL', 'X',\n'RAM', \
4104 'X',\n'RAN', 'X',\n'RAP', 'X',\n'RBF', 'X',\n'RBU'\
4105 , 'X',\n'RCA', 'X',\n'RCL', 'X',\n'RCO', 'X',\n'RD\
4106 C', 'X',\n'RDF', 'W',\n'RE9', 'X',\n'REA', 'X',\n'\
4107 RED', 'K',\n'REO', 'X',\n'REP', 'X',\n'RET', 'X',\\
4108 n'RFA', 'X',\n'RFB', 'X',\n'RFL', 'X',\n'RFP', 'X'\
4109 ,\n'RG1', 'X',\n'RGS', 'X',\n'RH1', 'X',\n'RHA', '\
4110 X',\n'RHC', 'X',\n'RHD', 'X',\n'RHM', 'X',\n'RHO',\
4111  'X',\n'RHQ', 'X',\n'RHS', 'X',\n'RIA', 'X',\n'RIB\
4112 ', 'X',\n'RIC', 'X',\n'RIF', 'X',\n'RIN', 'X',\n'R\
4113 IP', 'X',\n'RIT', 'X',\n'RMB', 'X',\n'RMN', 'X',\n\
4114 'RMP', 'X',\n'RNG', 'X',\n'RNS', 'X',\n'RNT', 'X',\
4115 \n'RO2', 'X',\n'RO4', 'X',\n'ROC', 'N',\n'ROI', 'X\
4116 ',\n'ROM', 'X',\n'RON', 'V',\n'ROP', 'X',\n'ROS', \
4117 'X',\n'ROX', 'X',\n'RPA', 'X',\n'RPD', 'X',\n'RPH'\
4118 , 'X',\n'RPL', 'X',\n'RPP', 'X',\n'RPR', 'X',\n'RP\
4119 X', 'X',\n'RQ3', 'X',\n'RR1', 'X',\n'RR6', 'X',\n'\
4120 RRS', 'X',\n'RS1', 'X',\n'RS2', 'X',\n'RS7', 'X',\\
4121 n'RSS', 'X',\n'RTA', 'X',\n'RTB', 'X',\n'RTC', 'X'\
4122 ,\n'RTL', 'X',\n'RUB', 'X',\n'RUN', 'X',\n'RWJ', '\
4123 X',\n'RXP', 'X',\n'S02', 'X',\n'S11', 'X',\n'S1H',\
4124  'S',\n'S27', 'X',\n'S2C', 'C',\n'S3P', 'X',\n'S4U\
4125 ', 'X',\n'S57', 'X',\n'S58', 'X',\n'S5H', 'X',\n'S\
4126 6G', 'X',\n'S80', 'X',\n'SAA', 'X',\n'SAB', 'X',\n\
4127 'SAC', 'S',\n'SAD', 'X',\n'SAE', 'X',\n'SAF', 'X',\
4128 \n'SAH', 'C',\n'SAI', 'C',\n'SAL', 'X',\n'SAM', 'M\
4129 ',\n'SAN', 'X',\n'SAP', 'X',\n'SAR', 'X',\n'SAS', \
4130 'X',\n'SB1', 'X',\n'SB2', 'X',\n'SB3', 'X',\n'SB4'\
4131 , 'X',\n'SB5', 'X',\n'SB6', 'X',\n'SBA', 'L',\n'SB\
4132 B', 'X',\n'SBD', 'A',\n'SBI', 'X',\n'SBL', 'A',\n'\
4133 SBN', 'X',\n'SBO', 'X',\n'SBR', 'X',\n'SBS', 'X',\\
4134 n'SBT', 'X',\n'SBU', 'X',\n'SBX', 'X',\n'SC4', 'X'\
4135 ,\n'SCA', 'X',\n'SCC', 'X',\n'SCD', 'X',\n'SCH', '\
4136 C',\n'SCI', 'X',\n'SCL', 'X',\n'SCM', 'X',\n'SCN',\
4137  'X',\n'SCO', 'X',\n'SCP', 'S',\n'SCR', 'X',\n'SCS\
4138 ', 'X',\n'SCV', 'C',\n'SCY', 'C',\n'SD8', 'X',\n'S\
4139 DK', 'X',\n'SDZ', 'X',\n'SE4', 'X',\n'SEA', 'X',\n\
4140 'SEB', 'S',\n'SEC', 'X',\n'SEG', 'A',\n'SEI', 'X',\
4141 \n'SEL', 'S',\n'SEM', 'X',\n'SEO', 'X',\n'SEP', 'S\
4142 ',\n'SER', 'S',\n'SES', 'X',\n'SET', 'S',\n'SEU', \
4143 'X',\n'SF4', 'X',\n'SFG', 'X',\n'SFN', 'X',\n'SFO'\
4144 , 'X',\n'SGA', 'X',\n'SGC', 'X',\n'SGL', 'X',\n'SG\
4145 M', 'X',\n'SGN', 'X',\n'SGP', 'X',\n'SHA', 'X',\n'\
4146 SHC', 'X',\n'SHF', 'X',\n'SHH', 'X',\n'SHP', 'G',\\
4147 n'SHR', 'E',\n'SHT', 'T',\n'SHU', 'X',\n'SI2', 'X'\
4148 ,\n'SIA', 'X',\n'SIF', 'X',\n'SIG', 'X',\n'SIH', '\
4149 X',\n'SIM', 'X',\n'SIN', 'X',\n'SKD', 'X',\n'SKF',\
4150  'X',\n'SLB', 'X',\n'SLE', 'X',\n'SLZ', 'K',\n'SMA\
4151 ', 'X',\n'SMC', 'C',\n'SME', 'M',\n'SML', 'X',\n'S\
4152 MM', 'M',\n'SMN', 'X',\n'SMP', 'X',\n'SMS', 'X',\n\
4153 'SN1', 'X',\n'SN6', 'X',\n'SN7', 'X',\n'SNC', 'C',\
4154 \n'SNN', 'X',\n'SNP', 'X',\n'SO1', 'X',\n'SO2', 'X\
4155 ',\n'SO3', 'X',\n'SO4', 'X',\n'SOA', 'X',\n'SOC', \
4156 'C',\n'SOM', 'X',\n'SOR', 'X',\n'SOT', 'X',\n'SOX'\
4157 , 'X',\n'SPA', 'X',\n'SPB', 'X',\n'SPC', 'X',\n'SP\
4158 D', 'X',\n'SPE', 'X',\n'SPG', 'X',\n'SPH', 'X',\n'\
4159 SPI', 'X',\n'SPK', 'X',\n'SPM', 'X',\n'SPN', 'X',\\
4160 n'SPO', 'X',\n'SPP', 'X',\n'SPS', 'X',\n'SPY', 'X'\
4161 ,\n'SQU', 'X',\n'SRA', 'X',\n'SRB', 'X',\n'SRD', '\
4162 X',\n'SRL', 'X',\n'SRM', 'X',\n'SRS', 'X',\n'SRY',\
4163  'X',\n'SSA', 'X',\n'SSB', 'X',\n'SSG', 'X',\n'SSP\
4164 ', 'X',\n'ST1', 'X',\n'ST2', 'X',\n'ST3', 'X',\n'S\
4165 T4', 'X',\n'ST5', 'X',\n'ST6', 'X',\n'STA', 'X',\n\
4166 'STB', 'X',\n'STE', 'X',\n'STG', 'X',\n'STI', 'X',\
4167 \n'STL', 'X',\n'STN', 'X',\n'STO', 'X',\n'STP', 'X\
4168 ',\n'STR', 'X',\n'STU', 'X',\n'STY', 'Y',\n'SU1', \
4169 'X',\n'SU2', 'X',\n'SUC', 'X',\n'SUI', 'X',\n'SUL'\
4170 , 'X',\n'SUR', 'X',\n'SVA', 'S',\n'SWA', 'X',\n'T1\
4171 6', 'X',\n'T19', 'X',\n'T23', 'X',\n'T29', 'X',\n'\
4172 T33', 'X',\n'T3P', 'X',\n'T42', 'A',\n'T44', 'X',\\
4173 n'T5A', 'X',\n'T6A', 'T',\n'T6P', 'X',\n'T80', 'X'\
4174 ,\n'T87', 'X',\n'TA1', 'X',\n'TAA', 'X',\n'TAB', '\
4175 X',\n'TAC', 'X',\n'TAD', 'X',\n'TAF', 'X',\n'TAM',\
4176  'X',\n'TAP', 'X',\n'TAR', 'X',\n'TAS', 'X',\n'TAU\
4177 ', 'X',\n'TAX', 'X',\n'TAZ', 'X',\n'TB9', 'X',\n'T\
4178 BA', 'X',\n'TBD', 'X',\n'TBG', 'G',\n'TBH', 'X',\n\
4179 'TBM', 'T',\n'TBO', 'X',\n'TBP', 'X',\n'TBR', 'X',\
4180 \n'TBS', 'X',\n'TBT', 'X',\n'TBU', 'X',\n'TBZ', 'X\
4181 ',\n'TC4', 'X',\n'TCA', 'X',\n'TCB', 'X',\n'TCH', \
4182 'X',\n'TCK', 'X',\n'TCL', 'X',\n'TCM', 'X',\n'TCN'\
4183 , 'X',\n'TCP', 'X',\n'TCR', 'W',\n'TCS', 'X',\n'TC\
4184 Z', 'X',\n'TDA', 'X',\n'TDB', 'X',\n'TDG', 'X',\n'\
4185 TDP', 'X',\n'TDR', 'X',\n'TDX', 'X',\n'TEA', 'X',\\
4186 n'TEM', 'X',\n'TEN', 'X',\n'TEO', 'X',\n'TEP', 'X'\
4187 ,\n'TER', 'X',\n'TES', 'X',\n'TET', 'X',\n'TFA', '\
4188 X',\n'TFB', 'X',\n'TFH', 'X',\n'TFI', 'X',\n'TFK',\
4189  'X',\n'TFP', 'X',\n'THA', 'X',\n'THB', 'X',\n'THC\
4190 ', 'T',\n'THD', 'X',\n'THE', 'X',\n'THF', 'X',\n'T\
4191 HJ', 'X',\n'THK', 'X',\n'THM', 'X',\n'THN', 'X',\n\
4192 'THO', 'T',\n'THP', 'X',\n'THQ', 'X',\n'THR', 'T',\
4193 \n'THS', 'X',\n'THT', 'X',\n'THU', 'X',\n'THX', 'X\
4194 ',\n'THZ', 'X',\n'TI1', 'X',\n'TI2', 'X',\n'TI3', \
4195 'P',\n'TIA', 'X',\n'TIH', 'A',\n'TK4', 'X',\n'TLA'\
4196 , 'X',\n'TLC', 'X',\n'TLM', 'X',\n'TLN', 'X',\n'TL\
4197 X', 'X',\n'TM5', 'X',\n'TM6', 'X',\n'TMA', 'X',\n'\
4198 TMB', 'T',\n'TMC', 'X',\n'TMD', 'T',\n'TME', 'X',\\
4199 n'TMF', 'X',\n'TML', 'K',\n'TMM', 'X',\n'TMN', 'X'\
4200 ,\n'TMP', 'X',\n'TMQ', 'X',\n'TMR', 'X',\n'TMT', '\
4201 X',\n'TMZ', 'X',\n'TNB', 'C',\n'TND', 'X',\n'TNK',\
4202  'X',\n'TNP', 'X',\n'TNT', 'X',\n'TOA', 'X',\n'TOB\
4203 ', 'X',\n'TOC', 'X',\n'TOL', 'X',\n'TOP', 'X',\n'T\
4204 OS', 'X',\n'TOT', 'X',\n'TP1', 'G',\n'TP2', 'P',\n\
4205 'TP3', 'E',\n'TP4', 'E',\n'TP7', 'T',\n'TPA', 'X',\
4206 \n'TPE', 'X',\n'TPF', 'X',\n'TPI', 'X',\n'TPL', 'W\
4207 ',\n'TPM', 'X',\n'TPN', 'G',\n'TPO', 'T',\n'TPP', \
4208 'X',\n'TPQ', 'A',\n'TPR', 'P',\n'TPS', 'X',\n'TPT'\
4209 , 'X',\n'TPV', 'X',\n'TPX', 'X',\n'TPY', 'X',\n'TQ\
4210 3', 'X',\n'TQ4', 'X',\n'TQ5', 'X',\n'TQ6', 'X',\n'\
4211 TR1', 'X',\n'TRA', 'X',\n'TRB', 'X',\n'TRC', 'X',\\
4212 n'TRD', 'X',\n'TRE', 'X',\n'TRF', 'W',\n'TRG', 'K'\
4213 ,\n'TRH', 'X',\n'TRI', 'X',\n'TRJ', 'X',\n'TRM', '\
4214 X',\n'TRN', 'W',\n'TRO', 'W',\n'TRP', 'W',\n'TRQ',\
4215  'X',\n'TRS', 'X',\n'TRX', 'W',\n'TRZ', 'X',\n'TS2\
4216 ', 'X',\n'TS3', 'X',\n'TS4', 'X',\n'TS5', 'X',\n'T\
4217 SA', 'X',\n'TSB', 'X',\n'TSI', 'X',\n'TSM', 'X',\n\
4218 'TSN', 'X',\n'TSP', 'X',\n'TSU', 'X',\n'TTA', 'X',\
4219 \n'TTE', 'X',\n'TTN', 'X',\n'TTO', 'X',\n'TTP', 'X\
4220 ',\n'TTX', 'X',\n'TXL', 'X',\n'TYA', 'Y',\n'TYB', \
4221 'Y',\n'TYD', 'X',\n'TYI', 'Y',\n'TYL', 'X',\n'TYM'\
4222 , 'W',\n'TYN', 'Y',\n'TYQ', 'Y',\n'TYR', 'Y',\n'TY\
4223 S', 'Y',\n'TYV', 'X',\n'TYY', 'A',\n'TZB', 'X',\n'\
4224 TZC', 'X',\n'TZE', 'X',\n'TZL', 'X',\n'TZO', 'X',\\
4225 n'TZP', 'X',\n'U01', 'X',\n'U02', 'X',\n'U03', 'X'\
4226 ,\n'U04', 'X',\n'U05', 'X',\n'U0E', 'X',\n'U10', '\
4227 X',\n'U18', 'X',\n'U2G', 'X',\n'U3P', 'X',\n'U49',\
4228  'X',\n'U55', 'X',\n'U5P', 'X',\n'U66', 'X',\n'U89\
4229 ', 'X',\n'U8U', 'X',\n'UAA', 'X',\n'UAG', 'A',\n'U\
4230 AP', 'X',\n'UAR', 'X',\n'UC1', 'X',\n'UC2', 'X',\n\
4231 'UC3', 'X',\n'UC4', 'X',\n'UD1', 'X',\n'UD2', 'X',\
4232 \n'UDP', 'X',\n'UDX', 'X',\n'UFG', 'X',\n'UFM', 'X\
4233 ',\n'UFP', 'X',\n'UGA', 'X',\n'UIN', 'X',\n'UKP', \
4234 'A',\n'UM3', 'X',\n'UMA', 'A',\n'UMG', 'X',\n'UMP'\
4235 , 'X',\n'UNA', 'X',\n'UND', 'X',\n'UNI', 'X',\n'UN\
4236 K', 'X',\n'UNN', 'X',\n'UNX', 'X',\n'UP5', 'X',\n'\
4237 UP6', 'X',\n'UPA', 'X',\n'UPF', 'X',\n'UPG', 'X',\\
4238 n'UPP', 'X',\n'UQ1', 'X',\n'UQ2', 'X',\n'UQ6', 'X'\
4239 ,\n'UR2', 'X',\n'URA', 'X',\n'URE', 'X',\n'URF', '\
4240 X',\n'URI', 'X',\n'URS', 'X',\n'UTP', 'X',\n'UVC',\
4241  'X',\n'UVW', 'X',\n'V35', 'X',\n'V36', 'X',\n'V4O\
4242 ', 'X',\n'V7O', 'X',\n'VAA', 'V',\n'VAC', 'X',\n'V\
4243 AD', 'V',\n'VAF', 'V',\n'VAG', 'X',\n'VAL', 'V',\n\
4244 'VAN', 'X',\n'VAS', 'X',\n'VAX', 'X',\n'VDX', 'X',\
4245 \n'VDY', 'X',\n'VG1', 'X',\n'VIB', 'X',\n'VIR', 'X\
4246 ',\n'VIT', 'X',\n'VK3', 'X',\n'VO3', 'X',\n'VO4', \
4247 'X',\n'VS1', 'F',\n'VS2', 'F',\n'VS3', 'F',\n'VS4'\
4248 , 'F',\n'VXA', 'X',\n'W01', 'X',\n'W02', 'X',\n'W0\
4249 3', 'X',\n'W11', 'X',\n'W33', 'X',\n'W35', 'X',\n'\
4250 W42', 'X',\n'W43', 'X',\n'W54', 'X',\n'W56', 'X',\\
4251 n'W59', 'X',\n'W71', 'X',\n'W84', 'X',\n'W8R', 'X'\
4252 ,\n'W91', 'X',\n'WAY', 'X',\n'WCC', 'X',\n'WO2', '\
4253 X',\n'WO4', 'X',\n'WRB', 'X',\n'WRR', 'X',\n'WRS',\
4254  'X',\n'WW7', 'X',\n'X2F', 'X',\n'X7O', 'X',\n'XAA\
4255 ', 'X',\n'XAN', 'X',\n'XAO', 'X',\n'XBB', 'X',\n'X\
4256 BP', 'X',\n'XDN', 'X',\n'XDP', 'X',\n'XIF', 'X',\n\
4257 'XIM', 'X',\n'XK2', 'X',\n'XL1', 'X',\n'XLS', 'X',\
4258 \n'XMP', 'X',\n'XN1', 'X',\n'XN2', 'X',\n'XN3', 'X\
4259 ',\n'XUL', 'X',\n'XV6', 'X',\n'XYD', 'X',\n'XYH', \
4260 'X',\n'XYL', 'X',\n'XYP', 'X',\n'XYS', 'X',\n'YOF'\
4261 , 'Y',\n'YRR', 'X',\n'YT3', 'X',\n'YZ9', 'X',\n'Z3\
4262 4', 'G',\n'Z5A', 'X',\n'ZAF', 'X',\n'ZAP', 'X',\n'\
4263 ZEB', 'X',\n'ZEN', 'X',\n'ZES', 'X',\n'ZID', 'X',\\
4264 n'ZMR', 'X',\n'ZN3', 'X',\n'ZNH', 'X',\n'ZNO', 'X'\
4265 ,\n'ZO3', 'X',\n'ZPR', 'P',\n'ZRA', 'A',\n'ZST', '\
4266 X',\n'ZYA', 'A',\n\n\n'ASN','N');\n} \n\n\nsub fil\
4267 e2head\n      {\n       my $file = shift;\n     my $size = s\
4268 hift;\n my $f= new FileHandle;\n        my $line;\n     open \
4269 ($f,$file);\n   read ($f,$line, $size);\n       close ($f)\
4270 ;\n     return $line;\n      }\nsub file2tail\n      {\
4271 \n      my $file = shift;\n     my $size = shift;\n     my $f= \
4272 new FileHandle;\n       my $line;\n     \n      open ($f,$file);\\
4273 n       seek ($f,$size*-1, 2);\n        read ($f,$line, $size);\
4274 \n      close ($f);\n   return $line;\n      }\n\n\nsub v\
4275 tmpnam\n      {\n       my $r=rand(100000);\n   my $f=\"fi\
4276 le.$r.$$\";\n   while (-e $f)\n   {\n       $f=vtmpnam\
4277 ();\n     }\n   push (@TMPFILE_LIST, $f);\n     return $f;\
4278 \n      }\n\nsub myexit\n  {\n    my $code=@_[0];\\
4279 n    if ($CLEAN_EXIT_STARTED==1){return;}\n    els\
4280 e {$CLEAN_EXIT_STARTED=1;}\n    ### ONLY BARE EXIT\
4281 \n    exit ($code);\n  }\nsub set_error_lock\n    \
4282 {\n      my $name = shift;\n      my $pid=$$;\n\n \
4283      \n      &lock4tc ($$,\"LERROR\", \"LSET\", \"\
4284 $$ -- ERROR: $name $PROGRAM\\n\");\n      return;\\
4285 n    }\nsub set_lock\n  {\n    my $pid=shift;\n   \
4286  my $msg= shift;\n    my $p=getppid();\n    &lock4\
4287 tc ($pid,\"LLOCK\",\"LRESET\",\"$p$msg\\n\");\n  }\
4288 \nsub unset_lock\n   {\n     \n    my $pid=shift;\\
4289 n    &lock4tc ($pid,\"LLOCK\",\"LRELEASE\",\"\");\\
4290 n  }\nsub shift_lock\n  {\n    my $from=shift;\n  \
4291   my $to=shift;\n    my $from_type=shift;\n    my \
4292 $to_type=shift;\n    my $action=shift;\n    my $ms\
4293 g;\n    \n    if (!&lock4tc($from, $from_type, \"L\
4294 CHECK\", \"\")){return 0;}\n    $msg=&lock4tc ($fr\
4295 om, $from_type, \"LREAD\", \"\");\n    &lock4tc ($\
4296 from, $from_type,\"LRELEASE\", $msg);\n    &lock4t\
4297 c ($to, $to_type, $action, $msg);\n    return;\n  \
4298 }\nsub isshellpid\n  {\n    my $p=shift;\n    if (\
4299 !lock4tc ($p, \"LLOCK\", \"LCHECK\")){return 0;}\n\
4300     else\n      {\n     my $c=lock4tc($p, \"LLOCK\", \\
4301 "LREAD\");\n    if ( $c=~/-SHELL-/){return 1;}\n     \
4302  }\n    return 0;\n  }\nsub isrootpid\n  {\n    if\
4303 (lock4tc (getppid(), \"LLOCK\", \"LCHECK\")){retur\
4304 n 0;}\n    else {return 1;}\n  }\nsub lock4tc\n {\\
4305 n         my ($pid,$type,$action,$value)=@_;\n    my $fna\
4306 me;\n     my $host=hostname;\n    \n      if ($type eq \\
4307 "LLOCK\"){$fname=\"$LOCKDIR/.$pid.$host.lock4tcoff\
4308 ee\";}\n          elsif ( $type eq \"LERROR\"){ $fname=\"\
4309 $LOCKDIR/.$pid.$host.error4tcoffee\";}\n          elsif (\
4310  $type eq \"LWARNING\"){ $fname=\"$LOCKDIR/.$pid.$\
4311 host.warning4tcoffee\";}\n        \n      if ($debug_lock)\
4312 \n          {\n       print STDERR \"\\n\\t---lock4tc(t\
4313 cg): $action => $fname =>$value (RD: $LOCKDIR)\\n\\
4314 ";\n        }\n\n         if    ($action eq \"LCHECK\") {re\
4315 turn -e $fname;}\n        elsif ($action eq \"LREAD\"){\
4316 return file2string($fname);}\n    elsif ($action eq\
4317  \"LSET\") {return string2file ($value, $fname, \"\
4318 >>\");}\n         elsif ($action eq \"LRESET\") {return \
4319 string2file ($value, $fname, \">\");}\n   elsif ($\
4320 action eq \"LRELEASE\") \n          {\n       if ( $deb\
4321 ug_lock)\n              {\n               my $g=new FileHandle;\n                 open\
4322  ($g, \">>$fname\");\n            print $g \"\\nDestroyed \
4323 by $$\\n\";\n             close ($g);\n           safe_system (\"m\
4324 v $fname $fname.old\");\n               }\n           else\n            {\n             \
4325   unlink ($fname);\n            }\n         }\n   return \"\";\n\
4326         }\n     \nsub file2string\n     {\n       my $file=@_[0];\n      \
4327  my $f=new FileHandle;\n          my $r;\n        open ($f, \"\
4328 $file\");\n       while (<$f>){$r.=$_;}\n         close ($f)\
4329 ;\n       return $r;\n  }\nsub string2file \n    {\n   \
4330  my ($s,$file,$mode)=@_;\n    my $f=new FileHandle\
4331 ;\n    \n    open ($f, \"$mode$file\");\n    print\
4332  $f  \"$s\";\n    close ($f);\n  }\n\nBEGIN\n    {\
4333 \n      srand;\n    \n      $SIG{'SIGUP'}='signal_\
4334 cleanup';\n      $SIG{'SIGINT'}='signal_cleanup';\\
4335 n      $SIG{'SIGQUIT'}='signal_cleanup';\n      $S\
4336 IG{'SIGILL'}='signal_cleanup';\n      $SIG{'SIGTRA\
4337 P'}='signal_cleanup';\n      $SIG{'SIGABRT'}='sign\
4338 al_cleanup';\n      $SIG{'SIGEMT'}='signal_cleanup\
4339 ';\n      $SIG{'SIGFPE'}='signal_cleanup';\n      \
4340 \n      $SIG{'SIGKILL'}='signal_cleanup';\n      $\
4341 SIG{'SIGPIPE'}='signal_cleanup';\n      $SIG{'SIGS\
4342 TOP'}='signal_cleanup';\n      $SIG{'SIGTTIN'}='si\
4343 gnal_cleanup';\n      $SIG{'SIGXFSZ'}='signal_clea\
4344 nup';\n      $SIG{'SIGINFO'}='signal_cleanup';\n  \
4345     \n      $SIG{'SIGBUS'}='signal_cleanup';\n    \
4346   $SIG{'SIGALRM'}='signal_cleanup';\n      $SIG{'S\
4347 IGTSTP'}='signal_cleanup';\n      $SIG{'SIGTTOU'}=\
4348 'signal_cleanup';\n      $SIG{'SIGVTALRM'}='signal\
4349 _cleanup';\n      $SIG{'SIGUSR1'}='signal_cleanup'\
4350 ;\n\n\n      $SIG{'SIGSEGV'}='signal_cleanup';\n  \
4351     $SIG{'SIGTERM'}='signal_cleanup';\n      $SIG{\
4352 'SIGCONT'}='signal_cleanup';\n      $SIG{'SIGIO'}=\
4353 'signal_cleanup';\n      $SIG{'SIGPROF'}='signal_c\
4354 leanup';\n      $SIG{'SIGUSR2'}='signal_cleanup';\\
4355 n\n      $SIG{'SIGSYS'}='signal_cleanup';\n      $\
4356 SIG{'SIGURG'}='signal_cleanup';\n      $SIG{'SIGCH\
4357 LD'}='signal_cleanup';\n      $SIG{'SIGXCPU'}='sig\
4358 nal_cleanup';\n      $SIG{'SIGWINCH'}='signal_clea\
4359 nup';\n      \n      $SIG{'INT'}='signal_cleanup';\
4360 \n      $SIG{'TERM'}='signal_cleanup';\n      $SIG\
4361 {'KILL'}='signal_cleanup';\n      $SIG{'QUIT'}='si\
4362 gnal_cleanup';\n      \n      our $debug_lock=$ENV\
4363 {\"DEBUG_LOCK\"};\n      \n      \n      \n      \\
4364 n      foreach my $a (@ARGV){$CL.=\" $a\";}\n     \
4365  if ( $debug_lock ){print STDERR \"\\n\\n\\n******\
4366 **** START PG: $PROGRAM *************\\n\";}\n    \
4367   if ( $debug_lock ){print STDERR \"\\n\\n\\n*****\
4368 *****(tcg) LOCKDIR: $LOCKDIR $$ *************\\n\"\
4369 ;}\n      if ( $debug_lock ){print STDERR \"\\n --\
4370 - $$ -- $CL\\n\";}\n      \n         \n      \n      \
4371 \n    }\nsub flush_error\n  {\n    my $msg=shift;\\
4372 n    return add_error ($EXIT_FAILURE,$$, $$,getppi\
4373 d(), $msg, $CL);\n  }\nsub add_error \n  {\n    my\
4374  $code=shift;\n    my $rpid=shift;\n    my $pid=sh\
4375 ift;\n    my $ppid=shift;\n    my $type=shift;\n  \
4376   my $com=shift;\n    \n    $ERROR_DONE=1;\n    lo\
4377 ck4tc ($rpid, \"LERROR\",\"LSET\",\"$pid -- ERROR:\
4378  $type\\n\");\n    lock4tc ($$, \"LERROR\",\"LSET\\
4379 ", \"$pid -- COM: $com\\n\");\n    lock4tc ($$, \"\
4380 LERROR\",\"LSET\", \"$pid -- STACK: $ppid -> $pid\\
4381 \n\");\n   \n    return $code;\n  }\nsub add_warni\
4382 ng \n  {\n    my $rpid=shift;\n    my $pid =shift;\
4383 \n    my $command=shift;\n    my $msg=\"$$ -- WARN\
4384 ING: $command\\n\";\n    print STDERR \"$msg\";\n \
4385    lock4tc ($$, \"LWARNING\", \"LSET\", $msg);\n  \
4386 }\n\nsub signal_cleanup\n  {\n    print dtderr \"\\
4387 \n**** $$ (tcg) was killed\\n\";\n    &cleanup;\n \
4388    exit ($EXIT_FAILURE);\n  }\nsub clean_dir\n  {\\
4389 n    my $dir=@_[0];\n    if ( !-d $dir){return ;}\\
4390 n    elsif (!($dir=~/tmp/)){return ;}#safety check\
4391  1\n    elsif (($dir=~/\\*/)){return ;}#safety che\
4392 ck 2\n    else\n      {\n       `rm -rf $dir`;\n      }\\
4393 n    return;\n  }\nsub cleanup\n  {\n    #print st\
4394 derr \"\\n----tc: $$ Kills $PIDCHILD\\n\";\n    #k\
4395 ill (SIGTERM,$PIDCHILD);\n    my $p=getppid();\n  \
4396   $CLEAN_EXIT_STARTED=1;\n    \n    \n    \n    if\
4397  (&lock4tc($$,\"LERROR\", \"LCHECK\", \"\"))\n    \
4398   {\n   my $ppid=getppid();\n   if (!$ERROR_DONE) \n     \
4399  {\n        &lock4tc($$,\"LERROR\", \"LSET\", \"$$ --\
4400  STACK: $p -> $$\\n\");\n           &lock4tc($$,\"LERROR\
4401 \", \"LSET\", \"$$ -- COM: $CL\\n\");\n   }\n     \
4402  }\n    my $warning=&lock4tc($$, \"LWARNING\", \"L\
4403 READ\", \"\");\n    my $error=&lock4tc($$,  \"LERR\
4404 OR\", \"LREAD\", \"\");\n    #release error and wa\
4405 rning lock if root\n    \n    if (isrootpid() && (\
4406 $warning || $error) )\n      {\n        \n      print STDERR \\
4407 "**************** Summary *************\\n$error\\\
4408 n$warning\\n\";\n\n     &lock4tc($$,\"LERROR\",\"RELEA\
4409 SE\",\"\");\n   &lock4tc($$,\"LWARNING\",\"RELEASE\"\
4410 ,\"\");\n      } \n    \n    \n    foreach my $f (\
4411 @TMPFILE_LIST)\n      {\n       if (-e $f){unlink ($f);}\
4412  \n      }\n    foreach my $d (@TMPDIR_LIST)\n    \
4413   {\n   clean_dir ($d);\n      }\n    #No More Lock \
4414 Release\n    #&lock4tc($$,\"LLOCK\",\"LRELEASE\",\\
4415 "\"); #release lock \n\n    if ( $debug_lock ){pri\
4416 nt STDERR \"\\n\\n\\n********** END PG: $PROGRAM (\
4417 $$) *************\\n\";}\n    if ( $debug_lock ){p\
4418 rint STDERR \"\\n\\n\\n**********(tcg) LOCKDIR: $L\
4419 OCKDIR $$ *************\\n\";}\n  }\nEND \n  {\n  \
4420   \n    &cleanup();\n  }\n   \n\nsub safe_system \\
4421 n{\n  my $com=shift;\n  my $ntry=shift;\n  my $ctr\
4422 y=shift;\n  my $pid;\n  my $status;\n  my $ppid=ge\
4423 tppid();\n  if ($com eq \"\"){return 1;}\n  \n  \n\
4424 \n  if (($pid = fork ()) < 0){return (-1);}\n  if \
4425 ($pid == 0)\n    {\n      set_lock($$, \" -SHELL- \
4426 $com (tcg)\");\n      exec ($com);\n    }\n  else\\
4427 n    {\n      lock4tc ($$, \"LLOCK\", \"LSET\", \"\
4428 $pid\\n\");#update parent\n      $PIDCHILD=$pid;\n\
4429     }\n  if ($debug_lock){printf STDERR \"\\n\\t .\
4430 ... safe_system (fasta_seq2hmm)  p: $$ c: $pid COM\
4431 : $com\\n\";}\n\n  waitpid ($pid,WTERMSIG);\n\n  s\
4432 hift_lock ($pid,$$, \"LWARNING\",\"LWARNING\", \"L\
4433 SET\");\n\n  if ($? == $EXIT_FAILURE || lock4tc($p\
4434 id, \"LERROR\", \"LCHECK\", \"\"))\n    {\n      i\
4435 f ($ntry && $ctry <$ntry)\n     {\n       add_warning ($$,\
4436 $$,\"$com failed [retry: $ctry]\");\n     lock4tc ($\
4437 pid, \"LRELEASE\", \"LERROR\", \"\");\n   return s\
4438 afe_system ($com, $ntry, ++$ctry);\n    }\n      elsi\
4439 f ($ntry == -1)\n       {\n       if (!shift_lock ($pid, $$,\
4440  \"LERROR\", \"LWARNING\", \"LSET\"))\n     {\n   \
4441     add_warning ($$,$$,\"$com failed\");\n          }\n\
4442           else\n            {\n       lock4tc ($pid, \"LRELEASE\\
4443 ", \"LERROR\", \"\");\n     }\n   return $?;}\n   \
4444    else\n       {\n       if (!shift_lock ($pid,$$, \"LERROR\
4445 \",\"LERROR\", \"LSET\"))\n         {\n       myexit(a\
4446 dd_error ($EXIT_FAILURE,$$,$pid,getppid(), \"UNSPE\
4447 CIFIED system\", $com));\n          }\n }\n    }\n  ret\
4448 urn $?;\n}\n\nsub check_configuration \n    {\n   \
4449    my @l=@_;\n      my $v;\n      foreach my $p (@\
4450 l)\n    {\n       \n      if   ( $p eq \"EMAIL\")\n         { \n\
4451               if ( !($EMAIL=~/@/))\n            {\n             add_warning($$\
4452 ,$$,\"Could Not Use EMAIL\");\n         myexit(add_error \
4453 ($EXIT_FAILURE,$$,$$,getppid(),\"EMAIL\",\"$CL\"))\
4454 ;\n           }\n           }\n   elsif( $p eq \"INTERNET\")\
4455 \n          {\n       if ( !&check_internet_connection(\
4456 ))\n            {\n               myexit(add_error ($EXIT_FAILURE,$$,$$\
4457 ,getppid(),\"INTERNET\",\"$CL\"));\n            }\n         }\n \
4458   elsif( $p eq \"wget\")\n          {\n       if (!&pg_\
4459 is_installed (\"wget\") && !&pg_is_installed (\"cu\
4460 rl\"))\n                {\n               myexit(add_error ($EXIT_FAILURE,$\
4461 $,$$,getppid(),\"PG_NOT_INSTALLED:wget\",\"$CL\"))\
4462 ;\n             }\n         }\n   elsif( !(&pg_is_installed ($p))\
4463 )\n         {\n       myexit(add_error ($EXIT_FAILURE,\
4464 $$,$$,getppid(),\"PG_NOT_INSTALLED:$p\",\"$CL\"));\
4465 \n          }\n }\n      return 1;\n    }\nsub pg_is_in\
4466 stalled\n  {\n    my @ml=@_;\n    my $r, $p, $m;\n\
4467     my $supported=0;\n    \n    my $p=shift (@ml);\
4468 \n    if ($p=~/::/)\n      {\n  if (safe_system (\"\
4469 perl -M$p -e 1\")==$EXIT_SUCCESS){return 1;}\n  els\
4470 e {return 0;}\n      }\n    else\n      {\n     $r=`wh\
4471 ich $p 2>/dev/null`;\n  if ($r eq \"\"){return 0;}\\
4472 n       else {return 1;}\n      }\n  }\n\n\n\nsub check_\
4473 internet_connection\n  {\n    my $internet;\n    m\
4474 y $tmp;\n    &check_configuration ( \"wget\"); \n \
4475    \n    $tmp=&vtmpnam ();\n    \n    if     (&pg_\
4476 is_installed    (\"wget\")){`wget www.google.com -\
4477 O$tmp >/dev/null 2>/dev/null`;}\n    elsif  (&pg_i\
4478 s_installed    (\"curl\")){`curl www.google.com -o\
4479 $tmp >/dev/null 2>/dev/null`;}\n    \n    if ( !-e\
4480  $tmp || -s $tmp < 10){$internet=0;}\n    else {$i\
4481 nternet=1;}\n    if (-e $tmp){unlink $tmp;}\n\n   \
4482  return $internet;\n  }\nsub check_pg_is_installed\
4483 \n  {\n    my @ml=@_;\n    my $r=&pg_is_installed \
4484 (@ml);\n    if (!$r && $p=~/::/)\n      {\n     print \
4485 STDERR \"\\nYou Must Install the perl package $p o\
4486 n your system.\\nRUN:\\n\\tsudo perl -MCPAN -e 'in\
4487 stall $pg'\\n\";\n      }\n    elsif (!$r)\n      \
4488 {\n     myexit(flush_error(\"\\nProgram $p Supported b\
4489 ut Not Installed on your system\"));\n      }\n   \
4490  else\n      {\n        return 1;\n      }\n  }\n\n\n","u\
4491 se Cwd;\nuse Env;\nuse File::Path;\nuse FileHandle\
4492 ;\nuse strict;\n\n\nour (%MODE, %PG, %ENV_SET, %SU\
4493 PPORTED_OS);\n\n\nour $EXIT_SUCCESS=0;\nour $EXIT_\
4494 FAILURE=1;\nour $INTERNET=0;\n\nour $CP=\"cp \"; #\
4495 was causing a crash on MacOSX\nour $SILENT=\">/dev\
4496 /null 2>/dev/null\";\nour $WEB_BASE=\"http://www.t\
4497 coffee.org\";\nour $TCLINKDB_ADDRESS=\"$WEB_BASE/R\
4498 esources/tclinkdb.txt\";\nour $OS=get_os();\nour $\
4499 ROOT=&get_root();\nour $CD=cwd();\nour $CDIR=$CD;\\
4500 nour $HOME=$ENV{'HOME'};\n\nour $OSNAME=$ENV{'OSNA\
4501 ME'};\nour $OSARCH=$ENV{'OSARCH'};\nour $REPO_ROOT\
4502 =\"\";\n\nour $TCDIR;\nour $TCCACHE;\nour $TCTMP;\\
4503 nour $TCM;\nour $TCMETHODS;\nour $TCPLUGINS;\nour \
4504 $PLUGINS_DIR=\"\";\nour $INSTALL_DIR=\"\";\n\nour \
4505 $CXX=\"g++\";\nour $CXXFLAGS=\"\";\n\nour $CPP=\"g\
4506 ++\";\nour $CPPFLAGS=\"\";\n\nour $CC=\"gcc\";\nou\
4507 r $CFLAGS=\"\";\n\nour $FC=\"f77\";\nour $FFLAGS=\\
4508 "\";\n\nmy $install=\"all\";\nmy $default_update_a\
4509 ction=\"no_update\";\nmy @required_applications=(\\
4510 "wget_OR_curl\");\nmy @smode=(\"all\", \"clean\", \
4511 \"install\");\n\n&initialize_PG();\n\nmy $cl=join(\
4512  \" \", @ARGV);\nif ($#ARGV==-1 || ($cl=~/-h/) ||(\
4513 $cl=~/-H/) )\n  {\n     print \"\\n!!!!!!! ./insta\
4514 ll  t_coffee             --> installs t_coffee onl\
4515 y\";\n     print \"\\n!!!!!!! ./install  all      \
4516             --> installs all the modes [mcoffee, e\
4517 xpresso, psicoffee,rcoffee..]\";\n     print \"\\n\
4518 !!!!!!! ./install  [mcoffee|rcoffee|..] --> instal\
4519 ls the specified mode\";\n     print \"\\n!!!!!!! \
4520 ./install  -h                   --> print usage\\n\
4521 \\n\";\n     if ( $#ARGV==-1){exit ($EXIT_FAILURE)\
4522 ;}\n   }\n     \nif (($cl=~/-h/) ||($cl=~/-H/) )\n\
4523   {\n    my $m;\n    print \"\\n\\n!!!!!!! advance\
4524 d mode\\n\";\n    foreach $m ((keys (%MODE)),@smod\
4525 e)\n      {\n   print \"!!!!!!!       ./install $m\\\
4526 n\";\n      }\n    \n    print \"!!!!!!! ./install\
4527  [target:package|mode|] [-update|-force|-exec=dir|\
4528 -dis=dir|-root|-tclinkdb=file|-] [CC=|FCC=|CXX=|CF\
4529 LAGS=|CXXFLAGS=]\\n\";\n    print \"!!!!!!! ./inst\
4530 all clean    [removes all executables]\\n\";\n    \
4531 print \"!!!!!!! ./install [optional:target] -updat\
4532 e               [updates package already installed\
4533 ]\\n\";\n    print \"!!!!!!! ./install [optional:t\
4534 arget] -force                [Forces recompilation\
4535  over everything]\\n\";\n    \n    print \"!!!!!!!\
4536  ./install [optional:target] -root                \
4537  [You are running as root]\\n\";\n    print \"!!!!\
4538 !!! ./install [optional:target] -exec=/foo/bar/   \
4539     [address for the T-Coffee executable]\\n\";\n \
4540    print \"!!!!!!! ./install [optional:target] -di\
4541 s=/foo/bar/        [Address where distributions sh\
4542 ould be stored]\\n\";\n    print \"!!!!!!! ./insta\
4543 ll [optional:target] -tclinkdb=foo|update  [file c\
4544 ontaining all the packages to be installed]\\n\";\\
4545 n    print \"!!!!!!! ./install [optional:target] -\
4546 clean                [clean everything]\\n\";\n   \
4547  print \"!!!!!!! ./install [optional:target] -plug\
4548 ins              [plugins directory]\\n\";\n    pr\
4549 int \"!!!!!!! ./install [optional:target] -tcdir=/\
4550 foor/bar      [base path where T-Coffee will be in\
4551 stalled]\\n\";\n    print \"!!!!!!! ./install [opt\
4552 ional:target] -repo=/path/to/repo   [binaries repo\
4553 sitory root directory]\\n\";\n    print \"!!!!!!! \
4554 mode:\";\n    foreach $m (keys(%MODE)){print \"$m \
4555 \";}\n    print \"\\n\";\n    print \"!!!!!!! Pack\
4556 ages:\";\n    foreach $m (keys (%PG)){print \"$m \\
4557 ";}\n    print \"\\n\";\n    \n    print \"\\n\\n\\
4558 ";\n    exit ($EXIT_FAILURE);\n  }\n\n\n\nmy (@arg\
4559 l)=($cl=~/(\\S+=[^=]+)\\s\\w+=/g);\npush (@argl, (\
4560 $cl=~/(\\S+=[^=]+\\S)\\s*$/g));\n\nforeach $a (@ar\
4561 gl)\n  {\n    if ( ($cl=~/CXX=(.*)/)){$CXX=$1;}\n \
4562    if ( ($cl=~/-CC=(.*)/    )){$CC=$1;}\n    if ( \
4563 ($cl=~/-FC=(.*)/    )){$FC=$1;}\n    if ( ($cl=~/-\
4564 CFLAGS=(.*)/)){$CFLAGS=$1;}\n    if ( ($cl=~/-CXXF\
4565 LAGS=(.*)/)){$CXXFLAGS=$1;}\n  }\nour ($ROOT_INSTA\
4566 LL, $NO_QUESTION, $default_update_action,$BINARIES\
4567 _ONLY,$force, $default_update_action, $INSTALL_DIR\
4568 , $PLUGINS_DIR, $DISTRIBUTIONS,$tclinkdb, $proxy, \
4569 $clean);\nif ( ($cl=~/-root/)){$ROOT_INSTALL=1;}\n\
4570 if ( ($cl=~/-no_question/)){$NO_QUESTION=1;}\nif (\
4571  ($cl=~/-update/)){$default_update_action=\"update\
4572 \";}\nif ( ($cl=~/-binaries/)){$BINARIES_ONLY=1;}\\
4573 nif ( ($cl=~/-force/)){$force=1;$default_update_ac\
4574 tion=\"update\"}\nif ( ($cl=~/-exec=\\s*(\\S+)/)){\
4575 $INSTALL_DIR=$1;}\nif ( ($cl=~/-plugins=\\s*(\\S+)\
4576 /)){$PLUGINS_DIR=$1;}\nif ( ($cl=~/-dis=\\s*(\\S+)\
4577 /)){$DISTRIBUTIONS=$1;}\n\nif ( ($cl=~/-tclinkdb=\\
4578 \s*(\\S+)/)){$tclinkdb=$1;}\nif ( ($cl=~/-proxy=\\\
4579 s*(\\S+)/)){$proxy=$1;}\nif ( ($cl=~/-clean/)){$cl\
4580 ean=1;}\nif ( ($cl=~/-repo=\\s*(\\S+)/)){ $REPO_RO\
4581 OT=$1; }\nif ( ($cl=~/-tcdir=\\s*(\\S+)/)){ $TCDIR\
4582 =$1; }\nif ($tclinkdb){&update_tclinkdb ($tclinkdb\
4583 );}\n\n\nif( $REPO_ROOT ne \"\" ) {\n   if( $OSNAME \
4584 eq \"\" ) { print \"You have specified the reposit\
4585 ory folder but the required \\\"OSNAME\\\" envirom\
4586 ent variable is missing. \\n\"; exit 1; } \n    if( $\
4587 OSARCH eq \"\" ) { print \"You have specified the \
4588 repository folder but the required \\\"OSARCH\\\" \
4589 enviroment variable is missing. \\n\"; exit 1; } \\
4590 n}\n\n\nif(!$TCDIR) { $TCDIR=\"$HOME/.t_coffee\"; \
4591 }\n&add_dir ($TCDIR);\n&add_dir ($TCCACHE=\"$TCDIR\
4592 /cache\");\n&add_dir ($TCTMP=\"$CDIR/tmp\");\n&add\
4593 _dir ($TCM=\"$TCDIR/mcoffee\");\n&add_dir ($TCMETH\
4594 ODS=\"$TCDIR/methods\");\n&add_dir ($TCPLUGINS=\"$\
4595 TCDIR/plugins/$OS\");\n\n\nour $BASE=\"$CD/bin\";\\
4596 nour $BIN=\"$BASE/binaries/$OS\";\nour $DOWNLOAD_D\
4597 IR=\"$BASE/download\";\nour $DOWNLOAD_FILE=\"$DOWN\
4598 LOAD_DIR/files\";\nour $TMP=\"$BASE/tmp\";\n\n&add\
4599 _dir($BASE);\n&add_dir($BIN);\n&add_dir($DOWNLOAD_\
4600 DIR);\n&add_dir($DOWNLOAD_FILE);\nif (!$DISTRIBUTI\
4601 ONS){$DISTRIBUTIONS=\"$DOWNLOAD_DIR/distributions\\
4602 ";}\n&add_dir ($DISTRIBUTIONS);\n&add_dir ($TMP);\\
4603 n\n\nif    (!$PLUGINS_DIR && !$ROOT_INSTALL){$PLUG\
4604 INS_DIR=$TCPLUGINS;}\nelsif (!$PLUGINS_DIR &&  $RO\
4605 OT_INSTALL){$PLUGINS_DIR=\"/usr/local/bin/\";}\n\n\
4606 if    (!$INSTALL_DIR && !$ROOT_INSTALL){$INSTALL_D\
4607 IR=\"$HOME/bin/\";mkpath ($INSTALL_DIR);}\nelsif (\
4608 !$INSTALL_DIR &&  $ROOT_INSTALL){$INSTALL_DIR=\"/u\
4609 sr/local/bin/\";}\n\nif (-d \"mcoffee\"){`cp mcoff\
4610 ee/* $TCM`;}\n\n\nour $ENV_FILE=\"$TCDIR/t_coffee_\
4611 env\";\n&env_file2putenv ($ENV_FILE);\n&set_proxy(\
4612 $proxy);\nmy ($target, $p, $r);\n$target=$p;\n\nfo\
4613 reach $p (  ((keys (%PG)),(keys(%MODE)),(@smode)) \
4614 )\n  {\n    if ($ARGV[0] eq $p && $target eq \"\")\
4615 {$target=$p;}\n  }\nif ($target eq \"\"){exit ($EX\
4616 IT_FAILURE);}\n\n\nforeach $r (@required_applicati\
4617 ons)\n  {\n    my @app_list;\n    my $i;\n    $i=0\
4618 ;\n    \n    @app_list=split (/_OR_/, $r);\n    fo\
4619 reach my $pg (@app_list)\n      {\n     $i+=&pg_is_ins\
4620 talled ($pg);\n      }\n    if ($i==0)\n      {\n \
4621      print \"One of the following packages must be\
4622  installed to proceed: \";\n      foreach my $pg (\
4623 @app_list)\n    {\n       print (\"$pg \");\n   }\n      di\
4624 e;\n    }\n  }\n\n\n\n\n\n\n&sign_license_ni();\n\\
4625 n\n$PG{C}{compiler}=get_C_compiler($CC);\n$PG{Fort\
4626 ran}{compiler}=get_F_compiler($FC);\n$PG{CXX}{comp\
4627 iler}=$PG{CPP}{compiler}=$PG{GPP}{compiler}=get_CX\
4628 X_compiler($CXX);\nif ($CXXFLAGS){$PG{CPP}{options\
4629 }=$PG{GPP}{options}=$PG{CXX}{options}=$CXXFLAGS;}\\
4630 nif ($CFLAGS){$PG{C}{options}=$CFLAGS;}\nforeach m\
4631 y $c (keys(%PG))\n  {\n    my $arguments;\n    if \
4632 ($PG{$c}{compiler})\n      {\n  $arguments=\"$PG{$c\
4633 }{compiler_flag}=$PG{$c}{compiler} \";\n        if ($PG{$\
4634 c}{options})\n    {\n       $arguments.=\"$PG{$c}{opt\
4635 ions_flag}=$PG{$c}{options} \";\n         }\n   $PG{$c}{ar\
4636 guments}=$arguments;\n      }\n  }\n\nif ($PG{$tar\
4637 get}){$PG{$target}{install}=1;}\nelse\n  {\n    fo\
4638 reach my $pg (keys(%PG))\n      {\n     if ( $target e\
4639 q \"all\" || ($PG{$pg}{mode}=~/$target/))\n       {\n   \
4640     $PG{$pg} {install}=1;\n       }\n      }\n  }\n\nf\
4641 oreach my $pg (keys(%PG))\n  {\n    if (!$PG{$pg}{\
4642 update_action}){$PG{$pg}{update_action}=$default_u\
4643 pdate_action;}\n    elsif ($PG{$pg}{update_action}\
4644  eq \"never\"){$PG{$pg}{install}=0;}\n    if ( $fo\
4645 rce && $PG{$pg}{install})\n      {\n    `rm $BIN/$pg \
4646 $BIN/$pg.exe $SILENT`;\n      }\n    if ($PG{$pg}{\
4647 update_action} eq \"update\" && $PG{$pg}{install})\
4648 {$PG{$pg}{update}=1;}\n  }\n\nif (($target=~/clean\
4649 /))\n  {\n    print \"------- cleaning executables\
4650  -----\\n\";\n    `rm bin/* $SILENT`;\n    exit ($\
4651 EXIT_SUCCESS);\n  }\n\nif ( !$PG{$target}){print \\
4652 "------- Installing T-Coffee Modes\\n\";}\n\nforea\
4653 ch my $m (keys(%MODE))\n  {\n    if ( $target eq \\
4654 "all\" || $target eq $m)\n      {\n     print \"\\n---\
4655 ---- The installer will now install the $m compone\
4656 nts $MODE{$m}{description}\\n\";\n      foreach my $pg \
4657 (keys(%PG))\n     {\n       if ( $PG{$pg}{mode} =~/$m/\
4658  && $PG{$pg}{install})\n              {\n               if ($PG{$pg}{t\
4659 ouched}){print \"------- $PG{$pg}{dname}: already \
4660 processed\\n\";}\n              else {$PG{$pg}{success}=&insta\
4661 ll_pg($pg);$PG{$pg}{touched}=1;}\n            }\n         }\n\
4662       }\n  }\n\nif ( $PG{$target}){print \"-------\
4663  Installing Individual Package\\n\";}\nforeach my \
4664 $pg (keys (%PG))\n  {\n    \n    if ( $PG{$pg}{ins\
4665 tall} && !$PG{$pg}{touched})\n      {\n print \"\\\
4666 n------- Install $pg\\n\";\n    $PG{$pg}{success}=&in\
4667 stall_pg($pg);$PG{$pg}{touched}=1;\n      }\n  }\n\
4668 print \"------- Finishing The installation\\n\";\n\
4669 my $final_report=&install ($INSTALL_DIR);\n\nprint\
4670  \"\\n\";\nprint \"*******************************\
4671 **************************************\\n\";\nprin\
4672 t \"********              INSTALLATION SUMMARY    \
4673       *****************\\n\";\nprint \"***********\
4674 **************************************************\
4675 ********\\n\";\nprint \"------- SUMMARY package In\
4676 stallation:\\n\";\nprint \"-------   Executable In\
4677 stalled in: $PLUGINS_DIR\\n\";\n\nforeach my $pg (\
4678 keys(%PG))\n  {\n    if ( $PG{$pg}{install})\n    \
4679   {\n   my $bin_status=($PG{$pg}{from_binary} && $PG\
4680 {$pg}{success})?\"[from binary]\":\"\";\n       if     (\
4681  $PG{$pg}{new} && !$PG{$pg}{old})                 \
4682     {print \"*------        $PG{$pg}{dname}: insta\
4683 lled $bin_status\\n\"; $PG{$pg}{status}=1;}\n   elsi\
4684 f  ( $PG{$pg}{new} &&  $PG{$pg}{old})             \
4685         {print \"*------        $PG{$pg}{dname}: u\
4686 pdated $bin_status\\n\"  ; $PG{$pg}{status}=1;} \n\
4687         elsif  (!$PG{$pg}{new} &&  $PG{$pg}{old} && !$PG{\
4688 $pg}{update}){print \"*------        $PG{$pg}{dnam\
4689 e}: previous\\n\" ; $PG{$pg}{status}=1;}\n      elsif  \
4690 (!$PG{$pg}{new} &&  $PG{$pg}{old} &&  $PG{$pg}{upd\
4691 ate}){print \"*------        $PG{$pg}{dname}: fail\
4692 ed update (previous installation available)\\n\";$\
4693 PG{$pg}{status}=0;}\n   else                        \
4694                                   {print \"*------\
4695         $PG{$pg}{dname}: failed installation\\n\";\
4696 $PG{$pg}{status}=0;}\n      }\n  }\nmy $failure;\n\
4697 \nif ( !$PG{$target}){print \"*------ SUMMARY mode\
4698  Installation:\\n\";}\nforeach my $m (keys(%MODE))\
4699 \n  {\n  \n    if ( $target eq \"all\" || $target \
4700 eq $m)\n      {\n       my $succesful=1;\n      foreach my $p\
4701 g (keys(%PG))\n   {\n       if (($PG{$pg}{mode}=~/$m\
4702 /) && $PG{$pg}{install} && $PG{$pg}{status}==0)\n       \
4703       {\n               $succesful=0;\n         print \"*!!!!!!       \
4704 $PG{$pg}{dname}: Missing\\n\";\n              }\n         }\n   i\
4705 f ( $succesful)\n         {\n       $MODE{$m}{status}=1;\n\
4706             print \"*------       MODE $MODE{$m}{dname} S\
4707 UCCESSFULLY installed\\n\";\n     }\n   else\n    {\n    \
4708    $failure++;\n            $MODE{$m}{status}=0;\n          pr\
4709 int \"*!!!!!!       MODE $MODE{$m}{dname} UNSUCCES\
4710 SFULLY installed\\n\";\n          }\n      }\n  }\n\n    \
4711 \n      \nif ($clean==1 && ($BASE=~/install4tcoffe\
4712 e/) ){print \"*------ Clean Installation Directory\
4713 : $BASE\\n\";`rm -rf $BASE`;}\nforeach my $pg (key\
4714 s(%PG)){if ($PG{$pg}{install} && $PG{$pg}{status}=\
4715 =0){exit ($EXIT_FAILURE);}}\n\nif ($failure)\n  {\\
4716 n    print \"*************************************\
4717 ********************************\\n\";\n    print \
4718 \"********     SOME PACKAGES FAILED TO INSTALL    \
4719     *****************\\n\";\n    print \"*********\
4720 **************************************************\
4721 **********\\n\";\n    print \"\\nSome of the repor\
4722 ted failures may be due to connectivity problems\"\
4723 ;\n    print \"\\nRerun the installation and the i\
4724 nstaller will specifically try to install the miss\
4725 ing packages\";\n    print \"\\nIf this Fails, go \
4726 to the original website and install the package ma\
4727 nually\";\n  }\n\nprint \"************************\
4728 *********************************************\\n\"\
4729 ;\nprint \"********              FINALIZE YOUR INS\
4730 TALLATION    *****************\\n\";\nprint \"****\
4731 **************************************************\
4732 ***************\\n\";\nprint \"------- Your execut\
4733 ables are in:\\n\"; \nprint \"-------       $PLUGI\
4734 NS_DIR:\\n\";\nprint \"------- Add this directory \
4735 to your path with the following command:\\n\";\npr\
4736 int \"-------       export PATH=$PLUGINS_DIR:\\$PA\
4737 TH\\n\";\nprint \"------- Make this permanent by a\
4738 dding this line to the file:\\n\";\nprint \"------\
4739 -       $HOME/.bashrc\\n\";\nexit ($EXIT_SUCCESS);\
4740   \n  \nsub get_CXX_compiler\n  {\n    my $c=@_[0]\
4741 ;\n    my (@clist)=(\"g++\");\n    \n    return ge\
4742 t_compil ($c, @clist);\n }\nsub get_C_compiler\n  \
4743 {\n    my $c=@_[0];\n    my (@clist)=(\"gcc\", \"c\
4744 c\", \"icc\");\n    \n    return get_compil ($c, @\
4745 clist);\n }\n\nsub get_F_compiler\n  {\n    my ($c\
4746 )=@_[0];\n    my @clist=(\"f77\", \"g77\",\"g95\",\
4747  \"gfortran\", \"ifort\");\n    return get_compil \
4748 ($c, @clist);\n  } \n       \nsub get_compil\n  {\\
4749 n    my ($fav,@clist)=(@_);\n    \n    #return the\
4750  first compiler found installed in the system. Che\
4751 ck first the favorite\n    foreach my $c ($fav,@cl\
4752 ist)\n      {\n if  (&pg_is_installed ($c)){return\
4753  $c;}\n      }\n    return \"\";\n  }\nsub exit_if\
4754 _pg_not_installed\n  {\n    my (@arg)=(@_);\n    \\
4755 n    foreach my $p (@arg)\n      {\n    if ( !&pg_is_\
4756 installed ($p))\n         {\n       print \"!!!!!!!! The $\
4757 p utility must be installed for this installation \
4758 to proceed [FATAL]\\n\";\n          die;\n        }\n      }\
4759 \n    return 1;\n  }\nsub set_proxy\n  {\n    my (\
4760 $proxy)=(@_);\n    my (@list,$p);\n    \n    @list\
4761 = (\"HTTP_proxy\", \"http_proxy\", \"HTTP_PROXY\",\
4762  \"ALL_proxy\", \"all_proxy\",\"HTTP_proxy_4_TCOFF\
4763 EE\",\"http_proxy_4_TCOFFEE\");\n    \n    if (!$p\
4764 roxy)\n      {\n        foreach my $p (@list)\n   {\n      \
4765  if ( ($ENV_SET{$p}) || $ENV{$p}){$proxy=$ENV{$p};\
4766 }\n       }\n      }\n    foreach my $p(@list){$ENV{$p\
4767 }=$proxy;}\n  }\n       \nsub check_internet_connection\\
4768 n  {\n    my $internet;\n    \n    if ( -e \"x\"){\
4769 unlink (\"x\");}\n    if     (&pg_is_installed    \
4770 (\"wget\")){`wget www.google.com -Ox >/dev/null 2>\
4771 /dev/null`;}\n    elsif  (&pg_is_installed    (\"c\
4772 url\")){`curl www.google.com -ox >/dev/null 2>/dev\
4773 /null`;}\n    else\n      {\n   printf stderr \"\\nE\
4774 RROR: No pg for remote file fetching [wget or curl\
4775 ][FATAL]\\n\";\n        exit ($EXIT_FAILURE);\n      }\n \
4776    \n    if ( !-e \"x\" || -s \"x\" < 10){$interne\
4777 t=0;}\n    else {$internet=1;}\n    if (-e \"x\"){\
4778 unlink \"x\";}\n    return $internet;\n  }\nsub ur\
4779 l2file\n  {\n    my ($cmd, $file,$wget_arg, $curl_\
4780 arg)=(@_);\n    my ($exit,$flag, $pg, $arg);\n    \
4781 \n    if ($INTERNET || check_internet_connection (\
4782 )){$INTERNET=1;}\n    else\n      {\n   print STDERR\
4783  \"ERROR: No Internet Connection [FATAL:install.pl\
4784 ]\\n\";\n       exit ($EXIT_FAILURE);\n      }\n    \n  \
4785   if     (&pg_is_installed    (\"wget\")){$pg=\"wg\
4786 et\"; $flag=\"-O\";$arg=\"--tries=2 --connect-time\
4787 out=10 $wget_arg\";}\n    elsif  (&pg_is_installed\
4788     (\"curl\")){$pg=\"curl\"; $flag=\"-o\";$arg=$c\
4789 url_arg;}\n    else\n      {\n  printf stderr \"\\n\
4790 ERROR: No pg for remote file fetching [wget or cur\
4791 l][FATAL]\\n\";\n       exit ($EXIT_FAILURE);\n      }\n\
4792     \n    \n    if (-e $file){unlink($file);}\n   \
4793  $exit=system \"$pg $cmd $flag$file $arg\";\n    r\
4794 eturn $exit;\n  }\n\nsub pg_is_installed\n  {\n   \
4795  my ($p, $dir)=(@_);\n    my ($r,$m, $ret);\n    m\
4796 y ($supported, $language, $compil);\n    \n  \n   \
4797  if ( $PG{$p})\n      {\n       $language=$PG{$p}{langua\
4798 ge2};\n $compil=$PG{$language}{compiler};\n      }\
4799 \n    \n    if ( $compil eq \"CPAN\")\n      {\n        i\
4800 f ( system (\"perl -M$p -e 1\")==$EXIT_SUCCESS){$r\
4801 et=1;}\n        else {$ret=0;}\n      }\n    elsif ($dir)\
4802 \n      {\n     if (-e \"$dir/$p\" || -e \"$dir/$p\\.e\
4803 xe\"){$ret=1;}\n        else {$ret=0;}\n      }\n    elsi\
4804 f (-e \"$PLUGINS_DIR/$p\" || -e \"$PLUGINS_DIR/$p.\
4805 exe\"){$ret=1;}\n    else\n      {\n    $r=`which $p \
4806 2>/dev/null`;\n if ($r eq \"\"){$ret=0;}\n      else {$\
4807 ret=1;}\n      }\n   \n    return $ret;\n  }\nsub \
4808 install\n  {\n    my ($new_bin)=(@_);\n    my ($co\
4809 pied, $report);\n\n    \n    if (!$ROOT_INSTALL)\n\
4810       {\n       \n      if (-e \"$BIN/t_coffee\"){`$CP $BIN/t\
4811 _coffee $INSTALL_DIR`};\n       `cp $BIN/* $PLUGINS_DIR`\
4812 ;\n     $copied=1;\n      }\n    else\n      {\n        $copi\
4813 ed=&root_run (\"You must be root to finalize the i\
4814 nstallation\", \"$CP $BIN/* $INSTALL_DIR $SILENT\"\
4815 );\n      }\n    \n     \n  if ( !$copied)\n    {\\
4816 n      $report=\"*!!!!!! Installation unsuccesful.\
4817  The executables have been left in $BASE/bin\\n\";\
4818 \n    }\n  elsif ( $copied && $ROOT)\n    {\n     \
4819  $report=\"*------ Installation succesful. Your ex\
4820 ecutables have been copied in $new_bin and are on \
4821 your PATH\\n\";\n    }\n  elsif ( $copied && !$ROO\
4822 T)\n    {\n      $report= \"*!!!!!! T-Coffee and a\
4823 ssociated packages have been copied in: $new_bin\\\
4824 n\";\n      $report.=\"*!!!!!! This address is NOT\
4825  in your PATH sytem variable\\n\";\n      $report.\
4826 =\"*!!!!!! You can do so by adding the following l\
4827 ine in your ~/.bashrc file:\\n\";\n      $report.=\
4828 \"*!!!!!! export PATH=$new_bin:\\$PATH\\n\";\n    \
4829 }\n  return $report;\n}\n\nsub sign_license_ni\n  \
4830 {\n    my $F=new FileHandle;\n    open ($F, \"lice\
4831 nse.txt\");\n    while (<$F>)\n      {\n        print \"$\
4832 _\";\n      }\n    close ($F);\n    \n    return;\\
4833 n  }\n\nsub install_pg\n  {\n    my ($pg)=(@_);\n \
4834    my ($report, $previous, $language, $compiler, $\
4835 return);\n    \n    if (!$PG{$pg}{install}){return\
4836  1;}\n    \n    $previous=&pg_is_installed ($pg);\\
4837 n    \n    if ($PG{$pg}{update_action} eq \"no_upd\
4838 ate\" && $previous)\n      {\n  $PG{$pg}{old}=1;\n      \
4839 $PG{$pg}{new}=0;\n      $return=1;\n      }\n    else\n\
4840       {\n       $PG{$pg}{old}=$previous;\n      \n      if ($PG{$p\
4841 g} {language2} eq \"Perl\"){&install_perl_package \
4842 ($pg);}\n       elsif ($BINARIES_ONLY && &install_binary\
4843 _package ($pg)){$PG{$pg}{from_binary}=1;}\n     elsif \
4844 (&install_source_package ($pg)){;}\n    else \n   {\n\
4845             \n      if (!&supported_os($OS))\n        {\n               \
4846 print \"!!!!!!!! $pg compilation failed, binary un\
4847 supported for $OS\\n\"; \n            }\n           elsif (!(\
4848 $PG{$pg}{from_binary}=&install_binary_package ($pg\
4849 )))\n         {\n               print \"!!!!!!!! $pg compilation \
4850 and  binary installation failed\\n\";\n       }\n       \
4851   }\n   $PG{$pg}{new}=$return=&pg_is_installed ($pg,\
4852 $BIN);\n      }\n\n    \n    return $return;\n  }\\
4853 nsub install_perl_package\n  {\n    my ($pg)=(@_);\
4854 \n    my ($report, $language, $compiler);\n    \n \
4855    $language=$PG{$pg} {language2};\n    $compiler=\
4856 $PG{$language}{compiler};\n    \n    if (!&pg_is_i\
4857 nstalled ($pg))\n      {\n      if ( $OS eq \"windows\"\
4858 ){`perl -M$compiler -e 'install $pg'`;}\n       elsif ( \
4859 $ROOT eq \"sudo\"){system (\"sudo perl -M$compiler\
4860  -e 'install $pg'\");}\n        else {system (\"su root -\
4861 c perl -M$compiler -e 'install $pg'\");}\n      }\\
4862 n    return &pg_is_installed ($pg);\n  }\n\n\n\nsu\
4863 b install_source_package\n  {\n    my ($pg)=(@_);\\
4864 n    my ($report, $download, $arguments, $language\
4865 , $address, $name, $ext, $main_dir, $distrib);\n  \
4866   my $wget_tmp=\"$TMP/wget.tmp\";\n    my (@fl);\n\
4867     if ( -e \"$BIN/$pg\" || -e \"$BIN/$pg.exe\"){r\
4868 eturn 1;}\n    \n    #\n    # check if the module \
4869 exists in the repository cache \n    #\n        if( repo_\
4870 load($pg) ) {\n         return 1;\n     }\n    \n    if ($pg \
4871 eq \"t_coffee\")  {return   &install_t_coffee ($pg\
4872 );}\n    elsif ($pg eq \"TMalign\"){return   &inst\
4873 all_TMalign ($pg);}\n    \n    chdir $DISTRIBUTION\
4874 S;\n    \n    $download=$PG{$pg}{source};\n    \n \
4875    if (($download =~/tgz/))\n      {\n  ($address,$\
4876 name,$ext)=($download=~/(.+\\/)([^\\/]+)(\\.tgz).*\
4877 /);\n      }\n    elsif (($download=~/tar\\.gz/))\\
4878 n      {\n      ($address,$name,$ext)=($download=~/(.+\\
4879 \/)([^\\/]+)(\\.tar\\.gz).*/);\n      }\n    elsif\
4880  (($download=~/tar/))\n      {\n        ($address,$name,$\
4881 ext)=($download=~/(.+\\/)([^\\/]+)(\\.tar).*/);\n \
4882      }\n    else\n      {\n     ($address,$name)=($dow\
4883 nload=~/(.+\\/)([^\\/]+)/);\n   $ext=\"\";\n      }\\
4884 n    $distrib=\"$name$ext\";\n    \n    if ( !-d $\
4885 pg){mkdir $pg;}\n    chdir $pg;\n   \n    #get the\
4886  distribution if available\n    if ( -e \"$DOWNLOA\
4887 D_DIR/$distrib\")\n      {\n    `$CP $DOWNLOAD_DIR/$d\
4888 istrib .`;\n      }\n    #UNTAR and Prepare everyt\
4889 hing\n    if (!-e \"$name.tar\" && !-e \"$name\")\\
4890 n      {\n      &check_rm ($wget_tmp);\n        print \"\\n---\
4891 ---- Downloading/Installing $pg\\n\";\n \n      if (!-e\
4892  $distrib && &url2file (\"$download\", \"$wget_tmp\
4893 \")==$EXIT_SUCCESS)\n     {\n       \n      `mv $wget_t\
4894 mp $distrib`;\n     `$CP $distrib $DOWNLOAD_DIR/`;\
4895 \n        }\n\n if (!-e $distrib)\n       {\n       print \"!\
4896 !!!!!! Download of $pg distribution failed\\n\";\n\
4897             print \"!!!!!!! Check Address: $PG{$pg}{sourc\
4898 e}\\n\";\n          return 0;\n   }\n   print \"\\n------\
4899 - unzipping/untaring $name\\n\";\n      if (($ext =~/z/\
4900 ))\n      { \n      &flush_command (\"gunzip $name$ext\
4901 \");\n      \n    }\n   if (($ext =~/tar/) || ($ext =~\
4902 /tgz/))\n         {\n       &flush_command(\"tar -xvf $nam\
4903 e.tar\");\n       }\n      }\n    #Guess and enter the\
4904  distribution directory\n    @fl=ls($p);\n    fore\
4905 ach my $f (@fl)\n      {\n      if (-d $f)\n      {\n       \
4906 $main_dir=$f;\n   }\n      }\n    if (-d $main_dir\
4907 )\n       \n      {\n   chdir $main_dir;}\n    else\n   \
4908    {\n  print \"Error: $main_dir does not exist\";\\
4909 n      }\n    print \"\\n------- Compiling/Install\
4910 ing $pg\\n\";\n    `make clean $SILENT`;\n    \n  \
4911   \n    #\n    # SAP module\n    #\n    if ($pg eq\
4912  \"sap\")\n      {\n    if (-e \"./configure\")\n         {\
4913 \n          #new sap distribution\n         if ($OS eq \"ma\
4914 cosx\")\n             {\n               &replace_line_in_file (\"./sr\
4915 c/galloc.h\", \"malloc.h\",  \"\");\n           &replace_li\
4916 ne_in_file (\"./src/pdbprot.h\", \"malloc.h\", \"\\
4917 ");\n           &replace_line_in_file (\"./src/pdbprot.c\",\
4918  \"malloc.h\", \"\");\n       }\n           \n      &flus\
4919 h_command (\"./configure\");\n      &flush_command \
4920 (\"make clean\");\n         &flush_command (\"make\");\
4921 \n          &check_cp (\"./src/$pg\", \"$BIN\");\n          \
4922 repo_store(\"./src/$pg\");\n      }\n   else\n    {\n     \
4923   #old style distribution\n         `rm *.o sap  sap.e\
4924 xe ./util/aa/*.o  ./util/wt/.o $SILENT`;\n          &fl\
4925 ush_command (\"make $arguments sap\");\n            &chec\
4926 k_cp ($pg, \"$BIN\");\n     repo_store($pg);\n    }\
4927 \n      }\n    \n    #\n    # CLUSTALW2 module\n  \
4928   #\n    elsif ($pg eq \"clustalw2\")\n      {\n        &\
4929 flush_command(\"./configure\");\n       &flush_command(\\
4930 "make $arguments\");\n  &check_cp (\"./src/$pg\", \\
4931 "$BIN\");\n     repo_store(\"./src/$pg\");\n      }\n \
4932    \n    #\n    # FSA module\n    # \n    elsif ($\
4933 pg eq \"fsa\")\n      {\n       &flush_command(\"./confi\
4934 gure --prefix=$BIN\");\n        &flush_command(\"make $ar\
4935 guments\");\n   &flush_command (\"make install\");\n\
4936 \n      repo_store(\"fsa\", \"$BIN/bin\");\n    `mv $BIN/b\
4937 in/* $BIN`;\n   `rmdir $BIN/bin`;\n      }\n    \n  \
4938   #\n    # CLUSTALW module\n    #\n    elsif ($pg \
4939 eq \"clustalw\")\n      {\n     &flush_command(\"make \
4940 $arguments clustalw\");\n       `$CP $pg $BIN $SILENT`;\\
4941 n       repo_store($pg);\n      }\n    \n    #\n    # MA\
4942 FFT module\n    #\n    elsif ($pg eq \"mafft\")\n \
4943      {\n        my $base=cwd();\n       my $c;\n        \n      #compile co\
4944 re\n    mkpath (\"./mafft/bin\");\n     mkpath (\"./mafft\
4945 /lib\");\n      chdir \"$base/core\";\n `make clean $SI\
4946 LENT`;\n        &flush_command (\"make $arguments\");\n &\
4947 flush_command (\"make install LIBDIR=../mafft/lib \
4948 BINDIR=../mafft/bin\");\n       \n      #compile extension\n    \
4949 chdir \"$base/extensions\";\n   `make clean $SILENT`\
4950 ;\n     &flush_command (\"make $arguments\");\n &flush\
4951 _command (\"make install LIBDIR=../mafft/lib BINDI\
4952 R=../mafft/bin\");\n    \n      #put everything in mafft a\
4953 nd copy the compiled stuff in bin\n     chdir \"$base\\
4954 ";\n    if ($ROOT_INSTALL)\n      {\n       &root_run (\"Y\
4955 ou Must be Root to Install MAFFT\\n\", \"mkdir /us\
4956 r/local/mafft/;$CP mafft/lib/* /usr/local/mafft;$C\
4957 P mafft/lib/mafft* /usr/local/bin ;$CP mafft/bin/m\
4958 afft /usr/local/bin/; \");\n      }\n   else\n    {\n     \
4959   `$CP mafft/lib/*  $BIN`;\n        `$CP mafft/bin/ma\
4960 fft  $BIN`;\n     }\n   `tar -cvf mafft.tar mafft`;\n   \
4961 `gzip mafft.tar`;\n     `mv mafft.tar.gz $BIN`;\n       \n      r\
4962 epo_store(\"mafft/bin/mafft\", \"mafft/lib/\", \"$\
4963 BIN/mafft.tar.gz\");\n      }\n      \n    #\n    \
4964 # DIALIGN-TX module\n    #\n    elsif ( $pg eq \"d\
4965 ialign-tx\" )\n      {\n        my $f;\n        my $base=cwd();\\
4966 n\n     chdir \"./source\";\n   if ($OS eq \"macosx\"){&\
4967 flush_command (\"cp makefile.MAC_OS makefile\");}\\
4968 n\n     &flush_command (\" make CPPFLAGS='-O3 -funroll\
4969 -loops' all\");\n       \n      chdir \"..\";\n &check_cp (\"\
4970 ./source/$pg\", \"$BIN\");\n    repo_store(\"./source\
4971 /$pg\");\n      }\n      \n    #\n    # DIALIGN-T \
4972 module \n    # (is the same as dialign-tx, but it \
4973 is mantained for backward name compatibility with \
4974 tcoffee)\n    #\n    elsif ( $pg eq \"dialign-t\" \
4975 )\n      {\n    my $f;\n        my $base=cwd();\n\n     chdir \"\
4976 ./source\";\n   if ($OS eq \"macosx\"){&flush_comman\
4977 d (\"cp makefile.MAC_OS makefile\");}\n\n       &flush_c\
4978 ommand (\" make CPPFLAGS='-O3 -funroll-loops' all\\
4979 ");\n   \n      chdir \"..\";\n &check_cp (\"./source/dia\
4980 lign-tx\", \"$BIN/dialign-t\");\n       repo_store(\"$BI\
4981 N/dialign-t\"); \n      }      \n      \n    #\n  \
4982   # POA module\n    #\n    elsif ($pg eq \"poa\")\\
4983 n      {\n      &flush_command (\"make $arguments poa\"\
4984 );\n    &check_cp (\"$pg\", \"$BIN\");\n        repo_store(\\
4985 "$pg\");\n      }\n     \n     \n    #\n    # PROB\
4986 CONS module\n    #\n    elsif ( $pg eq \"probcons\\
4987 ")\n      {\n   &add_C_libraries(\"./ProbabilisticMo\
4988 del.h\", \"list\", \"cstring\");\n      \n      `rm *.exe $S\
4989 ILENT`;\n       &flush_command (\"make $arguments probco\
4990 ns\");\n        &check_cp(\"$pg\", \"$BIN/$pg\");\n     repo_\
4991 store(\"$pg\");\n      }\n      \n    #\n    # PRO\
4992 BCONS RNA module\n    #\n    elsif ( $pg eq \"prob\
4993 consRNA\")\n      {\n   &add_C_libraries(\"./Probabi\
4994 listicModel.h\", \"list\", \"cstring\");\n      &add_C_\
4995 libraries(\"./Main.cc\", \"iomanip\", \"cstring\",\
4996 \"climits\");\n `rm *.exe $SILENT`;\n   &flush_comma\
4997 nd (\"make $arguments probcons\");\n    &check_cp(\"p\
4998 robcons\", \"$BIN/$pg\");\n     repo_store(\"$BIN/$pg\\
4999 ");\n      }\n\n        #\n     # MUSCLE module\n       #\n    elsi\
5000 f (  $pg eq \"muscle\")\n      {        \n      `rm *.o muscle\
5001  muscle.exe $SILENT`;\n if ($OS eq \"macosx\" || $\
5002 OS eq \"linux\")\n        {\n       &replace_line_in_file\
5003  (\"./Makefile\", \"LDLIBS = -lm -static\",  \"LDL\
5004 IBS = -lm\");\n   }\n   elsif ($OS eq \"windows\")\n\
5005           {\n       &replace_line_in_file (\"./intmath.cpp\\
5006 ",  \"double log2e\",      \"double cedric_log\");\
5007 \n          &replace_line_in_file (\"./intmath.cpp\",  \
5008 \"double log2\",       \"double log_notuse\");\n         \
5009    &replace_line_in_file (\"./intmath.cpp\",  \"do\
5010 uble cedric_log\", \"double log2e\");\n   }\n   &flu\
5011 sh_command (\"make $arguments all\");\n &check_cp(\
5012 \"$pg\", \"$BIN\");\n   repo_store(\"$pg\");    \n     \
5013  }\n      \n     #\n     # MUS4 module\n     #\n  \
5014    elsif (  $pg eq \"mus4\")\n      {\n `rm *.o mu\
5015 scle muscle.exe $SILENT`;\n     &flush_command (\"./mk\
5016 \");\n  &check_cp(\"$pg\", \"$BIN\");\n repo_store(\
5017 \"$pg\");       \n      }\n      \n    #\n    # PCMA mod\
5018 ule\n    #\n    elsif ( $pg eq \"pcma\")\n      {\\
5019 n       if ($OS eq \"macosx\")\n          {\n       &replace_line\
5020 _in_file (\"./alcomp2.c\", \"malloc.h\",  \"\");\n\
5021           }\n   &flush_command (\"make $arguments pcma\");\\
5022 n       &check_cp(\"$pg\", \"$BIN\");\n repo_store(\"$pg\
5023 \");    \n      }\n      \n    #\n    # KALIGN module\
5024 \n    #\n    elsif ($pg eq \"kalign\")\n      {\n       \
5025 &flush_command (\"./configure\");\n     &flush_command\
5026 (\"make $arguments\");\n        &check_cp (\"$pg\",$BIN);\
5027 \n      repo_store(\"$pg\");    \n      }\n      \n    #\n\
5028     # AMAP module\n    #\n    elsif ( $pg eq \"ama\
5029 p\")\n      {\n &add_C_libraries(\"./Amap.cc\", \"\
5030 iomanip\", \"cstring\",\"climits\");    \n      `make clea\
5031 n $SILENT`;\n   &flush_command (\"make $arguments al\
5032 l\");\n &check_cp (\"$pg\", $BIN);\n    repo_store(\"\
5033 $pg\"); \n      }\n      \n    #\n    # PRODA modu\
5034 le\n    #\n    elsif ( $pg eq \"proda\")\n      {\\
5035 n       &add_C_libraries(\"AlignedFragment.h\", \"vector\
5036 \", \"iostream\", \"cstring\",\"cstdlib\");\n   &add\
5037 _C_libraries(\"Main.cc\", \"vector\", \"climits\")\
5038 ;       \n      &add_C_libraries(\"Sequence.cc\", \"stdlib.h\\
5039 ", \"cstdio\"); \n      &flush_command (\"make $argumen\
5040 ts all\");\n    &check_cp (\"$pg\", $BIN);\n    repo_sto\
5041 re(\"$pg\");    \n      }\n      \n    #\n    # PRANK\
5042  module\n    #\n    elsif ( $pg eq \"prank\")\n   \
5043    {\n  &flush_command (\"make $arguments all\");\n\
5044         &check_cp (\"$pg\", $BIN);\n    repo_store(\"$pg\");\
5045         \n      }\n      \n    #\n    # !!!! MUSTANG modu\
5046 le\n    #\n     elsif ( $pg eq \"mustang\")\n     \
5047  {\n    &flush_command (\"rm ./bin/*\");\n      &flush_com\
5048 mand (\"make $arguments all\");\n\n     if ( $OS=~/win\
5049 dows/){&flush_command(\"cp ./bin/* $BIN/mustang.ex\
5050 e\");}\n        else {&flush_command(\"cp ./bin/* $BIN/mu\
5051 stang\");}\n    \n      repo_store(\"$BIN/mustang\");\n   \
5052    }\n\n        #\n     # RNAplfold module\n    #\n    elsif ( $\
5053 pg eq \"RNAplfold\")\n      {\n &flush_command(\".\
5054 /configure\");\n        &flush_command (\"make $arguments\
5055  all\");\n      &check_cp(\"./Progs/RNAplfold\", \"$BIN\
5056 \");\n  &check_cp(\"./Progs/RNAalifold\", \"$BIN\")\
5057 ;\n     &check_cp(\"./Progs/RNAfold\", \"$BIN\");\n     \n\
5058         repo_store(\"./Progs/RNAplfold\", \"./Progs/RNAal\
5059 ifold\", \"./Progs/RNAfold\");\n      }\n      \n \
5060    #\n    # !!! RETREE module\n    #\n    elsif ( \
5061 $pg eq \"retree\")\n      {\n   chdir \"src\";\n        &fl\
5062 ush_command (\"make $arguments all\");\n        &flush_co\
5063 mmand (\"make put\");\n system \"cp ../exe/* $BIN\\
5064 ";\n    \n      repo_store(\"retree\", \"../exe\");\n     \
5065  }\n    \n    chdir $CDIR;\n    return &pg_is_install\
5066 ed ($pg, $BIN);\n  }\n\nsub install_t_coffee\n  {\\
5067 n    my ($pg)=(@_);\n    my ($report,$cflags, $arg\
5068 uments, $language, $compiler) ;\n    #1-Install T-\
5069 Coffee\n    chdir \"t_coffee_source\";\n    &flush\
5070 _command (\"make clean\");\n    print \"\\n-------\
5071  Compiling T-Coffee\\n\";\n    $language=$PG{$pg} \
5072 {language2};\n    $arguments=$PG{$language}{argume\
5073 nts};\n    if (!($arguments =~/CFLAGS/)){$argument\
5074 s .= \" CFLAGS=-O2 \";}\n\n    if ( $CC ne \"\"){&\
5075 flush_command (\"make -i $arguments t_coffee\");}\\
5076 n    &check_cp ($pg, $BIN);\n    \n    chdir $CDIR\
5077 ;\n    return &pg_is_installed ($pg, $BIN);\n  }\n\
5078 sub install_TMalign\n  {\n    my ($pg)=(@_);\n    \
5079 my $report;\n    chdir \"t_coffee_source\";\n    p\
5080 rint \"\\n------- Compiling TMalign\\n\";\n    `rm\
5081  TMalign TMalign.exe $SILENT`;\n    if ( $FC ne \"\
5082 \"){&flush_command (\"make -i $PG{Fortran}{argumen\
5083 ts} TMalign\");}\n    &check_cp ($pg, $BIN);\n    \
5084 repo_store($pg);\n\n    if ( !-e \"$BIN/$pg\" && p\
5085 g_has_binary_distrib ($pg))\n      {\n  print \"!!!\
5086 !!!! Compilation of $pg impossible. Will try to in\
5087 stall from binary\\n\";\n       return &install_binary_p\
5088 ackage ($pg);\n      }\n    chdir $CDIR;\n    retu\
5089 rn &pg_is_installed ($pg, $BIN);\n  }\n\nsub pg_ha\
5090 s_binary_distrib\n  {\n    my ($pg)=(@_);\n    if \
5091 ($PG{$pg}{windows}){return 1;}\n    elsif ($PG{$pg\
5092 }{osx}){return 1;}\n    elsif ($PG{$pg}{linux}){re\
5093 turn 1;}\n    return 0;\n  }\nsub install_binary_p\
5094 ackage\n  {\n    my ($pg)=(@_);\n    my ($base,$re\
5095 port,$name, $download, $arguments, $language, $dir\
5096 );\n    my $isdir;\n    &input_os();\n    \n    if\
5097  (!&supported_os($OS)){return 0;}\n    if ( $PG{$p\
5098 g}{binary}){$name=$PG{$pg}{binary};}\n    else \n \
5099      {\n        $name=$pg;\n    if ( $OS eq \"windows\"){$na\
5100 me.=\".exe\";}\n      }\n    \n    $download=\"$WE\
5101 B_BASE/Packages/Binaries/$OS/$name\";\n    \n    $\
5102 base=cwd();\n    chdir $TMP;\n    \n    if (!-e $n\
5103 ame)\n      {\n `rm x $SILENT`;\n       if ( url2file(\"\
5104 $download\",\"x\")==$EXIT_SUCCESS)\n      {\n       `mv\
5105  x $name`;\n      }\n      }\n    \n    if (!-e $name\
5106 )\n      {\n    print \"!!!!!!! $PG{$pg}{dname}: Down\
5107 load of $pg binary failed\\n\";\n       print \"!!!!!!! \
5108 $PG{$pg}{dname}: Check Address: $download\\n\";\n       \
5109 return 0;\n      }\n    print \"\\n------- Install\
5110 ing $pg\\n\";\n    \n    if ($name =~/tar\\.gz/)\n\
5111       {\n       `gunzip  $name`;\n      `tar -xvf $pg.tar`;\n\
5112         chdir $pg;\n    if ( $pg eq \"mafft\")\n          {\n       i\
5113 f ($ROOT_INSTALL)\n           {\n               &root_run (\"You Mu\
5114 st be Roor to Install MAFFT\\n\", \"$CP mafft/bin/\
5115 * /usr/local/mafft;mkdir /usr/local/mafft/; $CP ma\
5116 fft/lib/* /usr/local/bin/\");\n       }\n           else\
5117 \n            {\n               `$CP $TMP/$pg/bin/* $BIN $SILENT`;\n\
5118                 `$CP $TMP/$pg/lib/* $BIN $SILENT`;\n          }\n        \
5119  }\n    else\n    {\n       if (-e \"$TMP/$pg/data\"){`$\
5120 CP $TMP/$pg/data/* $TCM $SILENT`;}\n        if (!($pg\
5121 =~/\\*/)){`rm -rf $pg`;}\n        }\n      }\n    else\\
5122 n      {\n      &check_cp (\"$pg\", \"$BIN\");\n        `chmod\
5123  u+x $BIN/$pg`; \n      unlink ($pg);\n      }\n    chd\
5124 ir $base;\n    $PG{$pg}{from_binary}=1;\n    retur\
5125 n &pg_is_installed ($pg, $BIN);\n  }\n\nsub add_di\
5126 r \n  {\n    my $dir=@_[0];\n    \n    if (!-e $di\
5127 r && !-d $dir)\n      {\n       my @l;\n        umask (0000);\n\
5128         @l=mkpath ($dir,{mode => 0777});\n      \n      }\n   \
5129  else\n      {\n        return 0;\n      }\n  }\nsub chec\
5130 k_rm \n  {\n    my ($file)=(@_);\n    \n    if ( -\
5131 e $file)\n      {\n     return unlink($file);\n      }\
5132 \n    return 0;\n  }\nsub check_cp\n  {\n    my ($\
5133 from, $to)=(@_);\n    if ( !-e $from && -e \"$from\
5134 \\.exe\"){$from=\"$from\\.exe\";}\n    if ( !-e $f\
5135 rom){return 0;}\n        \n    `$CP $from $to`;\n \
5136    return 1;\n  }\n\nsub repo_store \n{\n   # chec\
5137 k that all required data are available\n   if( $RE\
5138 PO_ROOT eq \"\" ) { return; }\n\n\n    # extract t\
5139 he package name from the specified path\n    my $p\
5140 g =`basename $_[0]`;\n    chomp($pg);\n \n    my $\
5141 VER = $PG{$pg}{version};\n    my $CACHE = \"$REPO_\
5142 ROOT/$pg/$VER/$OSNAME-$OSARCH\"; \n    \n    print\
5143  \"-------- Storing package: \\\"$pg\\\" to path: \
5144 $CACHE\\n\";\n    \n    # clean the cache path if \
5145 exists and create it again\n    `rm -rf $CACHE`;\n\
5146     `mkdir -p $CACHE`;\n    \n  for my $path (@_) \
5147 {\n\n       # check if it is a single file \n           if( \
5148 -f $path ) {\n          `cp $path $CACHE`;\n            }\n             # .\
5149 . or a directory, in this case copy all the conten\
5150 t \n            elsif( -d $path ) {\n                   opendir(IMD, $path);\
5151 \n                      my @thefiles= readdir(IMD);\n                   closedir(IMD)\
5152 ;\n                     \n                      for my $_file (@thefiles) {\n                           if( $_\
5153 file ne \".\" && $_file ne \"..\") {\n                          `cp \
5154 $path/$_file $CACHE`;\n                         }\n                     }\n             } \n    }          \n\
5155     \n  \n}   \n\nsub repo_load \n{\n    my ($pg)=(\
5156 @_);\n\n    # check that all required data are ava\
5157 ilable\n    if( $REPO_ROOT eq \"\" ) { return 0; }\
5158 \n\n    my $VER = $PG{$pg}{version};\n    my $CACH\
5159 E = \"$REPO_ROOT/$pg/$VER/$OSNAME-$OSARCH\"; \n   \
5160  if( !-e \"$CACHE/$pg\" ) {\n                   print \"-------\
5161 - Module \\\"$pg\\\" NOT found on repository cache\
5162 .\\n\";\n       return 0;\n    }\n    \n    print \"\
5163 -------- Module \\\"$pg\\\" found on repository ca\
5164 che. Using copy on path: $CACHE\\n\";\n    `cp $CA\
5165 CHE/* $BIN`;\n    return 1;\n}\n\nsub check_file_l\
5166 ist_exists \n  {\n    my ($base, @flist)=(@_);\n  \
5167   my $f;\n\n    foreach $f (@flist)\n      {\n  if \
5168 ( !-e \"$base/$f\"){return 0;}\n      }\n    retur\
5169 n 1;\n  }\nsub ls\n  {\n    my $f=@_[0];\n    my @\
5170 fl;\n    chomp(@fl=`ls -1 $f`);\n    return @fl;\n\
5171   }\nsub flush_command\n  {\n    my $command=@_[0]\
5172 ;\n    my $F=new FileHandle;\n    open ($F, \"$com\
5173 mand|\");\n    while (<$F>){print \"    --- $_\";}\
5174 \n    close ($F);\n  }    \n\nsub input_installati\
5175 on_directory\n  {\n    my $dir=@_[0];\n    my $new\
5176 ;\n    \n    print \"------- The current installat\
5177 ion directory is: [$dir]\\n\";\n    print \"??????\
5178 ? Return to keep the default or new value:\";\n   \
5179 \n    if ($NO_QUESTION==0)\n      {\n   chomp ($new=\
5180 <stdin>);\n     while ( $new ne \"\" && !input_yes (\"\
5181 You have entered $new. Is this correct? ([y]/n):\"\
5182 ))\n      {\n       print \"???????New installation dir\
5183 ectory:\";\n        chomp ($new=<stdin>);\n       }\n   $di\
5184 r=($new eq \"\")?$dir:$new;\n   $dir=~s/\\/$//;\n   \
5185    }\n    \n    if ( -d $dir){return $dir;}\n    e\
5186 lsif (&root_run (\"You must be root to create $dir\
5187 \",\"mkdir $dir\")==$EXIT_SUCCESS){return $dir;}\n\
5188     else\n      {\n     print \"!!!!!!! $dir could not\
5189  be created\\n\";\n     if ( $NO_QUESTION)\n      {\n      \
5190  return \"\";\n   }\n   elsif ( &input_yes (\"??????\
5191 ? Do you want to provide a new directory([y]/n)?:\\
5192 "))\n     {\n       return input_installation_director\
5193 y ($dir);\n       }\n   else\n    {\n       return \"\";\n      \
5194   }\n      }\n    \n  }\nsub input_yes\n  {\n    m\
5195 y $question =@_[0];\n    my $answer;\n\n    if ($N\
5196 O_QUESTION==1){return 1;}\n    \n    if ($question\
5197  eq \"\"){$question=\"??????? Do you wish to proce\
5198 ed ([y]/n)?:\";}\n    print $question;\n    chomp(\
5199 $answer=lc(<STDIN>));\n    if (($answer=~/^y/) || \
5200 $answer eq \"\"){return 1;}\n    elsif ( ($answer=\
5201 ~/^n/)){return 0;}\n    else\n      {\n return inp\
5202 ut_yes($question);\n      }\n  }\nsub root_run\n  \
5203 {\n    my ($txt, $cmd)=(@_);\n    \n    if ( syste\
5204 m ($cmd)==$EXIT_SUCCESS){return $EXIT_SUCCESS;}\n \
5205    else \n      {\n     print \"------- $txt\\n\";\n    i\
5206 f ( $ROOT eq \"sudo\"){return system (\"sudo $cmd\\
5207 ");}\n  else {return system (\"su root -c \\\"$cmd\\
5208 \\"\");}\n      }\n  }\nsub get_root\n  {\n    if \
5209 (&pg_is_installed (\"sudo\")){return \"sudo\";}\n \
5210    else {return \"su\";}\n  }\n\nsub get_os\n  {\n\
5211     my $raw_os=`uname`;\n    my $os;\n\n    $raw_o\
5212 s=lc ($raw_os);\n    \n    if ($raw_os =~/cygwin/)\
5213 {$os=\"windows\";}\n    elsif ($raw_os =~/linux/){\
5214 $os=\"linux\";}\n    elsif ($raw_os =~/osx/){$os=\\
5215 "macosx\";}\n    elsif ($raw_os =~/darwin/){$os=\"\
5216 macosx\";}\n    else\n      {\n $os=$raw_os;\n    \
5217   }\n    return $os;\n  }\nsub input_os\n  {\n    \
5218 my $answer;\n    if ($OS) {return $OS;}\n    \n   \
5219  print \"??????? which os do you use: [w]indows, [\
5220 l]inux, [m]acosx:?\";\n    $answer=lc(<STDIN>);\n\\
5221 n    if (($answer=~/^m/)){$OS=\"macosx\";}\n    el\
5222 sif ( ($answer=~/^w/)){$OS=\"windows\";}\n    elsi\
5223 f ( ($answer=~/^linux/)){$OS=\"linux\";}\n    \n  \
5224   else\n      {\n       return &input_os();\n      }\n  \
5225   return $OS;\n  }\n\nsub supported_os\n  {\n    m\
5226 y ($os)=(@_[0]);\n    return $SUPPORTED_OS{$os};\n\
5227   }\n    \n    \n\n\nsub update_tclinkdb \n  {\n  \
5228   my $file =@_[0];\n    my $name;\n    my $F=new F\
5229 ileHandle;\n    my ($download, $address, $name, $l\
5230 , $db);\n    \n    if ( $file eq \"update\"){$file\
5231 =$TCLINKDB_ADDRESS;}\n    \n    if ( $file =~/http\
5232 :\\/\\// || $file =~/ftp:\\/\\//)\n      {\n    ($add\
5233 ress, $name)=($download=~/(.*)\\/([^\\/]+)$/);\n        `\
5234 rm x $SILENT`;\n        if (&url2file ($file,\"x\")==$EXI\
5235 T_SUCCESS)\n      {\n       print \"------- Susscessful\
5236  upload of $name\";\n       `mv x $name`;\n         $fil\
5237 e=$name;\n        }\n      }\n    open ($F, \"$file\");\
5238 \n    while (<$F>)\n      {\n   my $l=$_;\n     if (($l \
5239 =~/^\\/\\//) || ($db=~/^#/)){;}\n       elsif ( !($l =~/\
5240 \\w/)){;}\n     else\n    {\n       my @v=split (/\\s+/, \
5241 $l);\n      if ( $l=~/^MODE/)\n       {\n               $MODE{$v\
5242 [1]}{$v[2]}=$v[3];\n          }\n           elsif ($l=~/^PG\
5243 /)\n          {\n               $PG{$v[1]}{$v[2]}=$v[3];\n            }\
5244 \n        }\n      }\n    close ($F);\n    &post_proces\
5245 s_PG();\n    return;\n  }\n\n\n\nsub initialize_PG\
5246 \n  {\n\n$PG{\"t_coffee\"}{\"4_TCOFFEE\"}=\"TCOFFE\
5247 E\";\n$PG{\"t_coffee\"}{\"type\"}=\"sequence_multi\
5248 ple_aligner\";\n$PG{\"t_coffee\"}{\"ADDRESS\"}=\"h\
5249 ttp://www.tcoffee.org\";\n$PG{\"t_coffee\"}{\"lang\
5250 uage\"}=\"C\";\n$PG{\"t_coffee\"}{\"language2\"}=\\
5251 "C\";\n$PG{\"t_coffee\"}{\"source\"}=\"http://www.\
5252 tcoffee.org/Packages/T-COFFEE_distribution.tar.gz\\
5253 ";\n$PG{\"t_coffee\"}{\"update_action\"}=\"always\\
5254 ";\n$PG{\"t_coffee\"}{\"mode\"}=\"tcoffee,mcoffee,\
5255 rcoffee,expresso,3dcoffee\";\n$PG{\"clustalw2\"}{\\
5256 "4_TCOFFEE\"}=\"CLUSTALW2\";\n$PG{\"clustalw2\"}{\\
5257 "type\"}=\"sequence_multiple_aligner\";\n$PG{\"clu\
5258 stalw2\"}{\"ADDRESS\"}=\"http://www.clustal.org\";\
5259 \n$PG{\"clustalw2\"}{\"language\"}=\"C++\";\n$PG{\\
5260 "clustalw2\"}{\"language2\"}=\"CXX\";\n$PG{\"clust\
5261 alw2\"}{\"source\"}=\"http://www.clustal.org/downl\
5262 oad/2.0.10/clustalw-2.0.10-src.tar.gz\";\n$PG{\"cl\
5263 ustalw2\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG{\"c\
5264 lustalw2\"}{\"version\"}=\"2.0.10\";\n$PG{\"clusta\
5265 lw\"}{\"4_TCOFFEE\"}=\"CLUSTALW\";\n$PG{\"clustalw\
5266 \"}{\"type\"}=\"sequence_multiple_aligner\";\n$PG{\
5267 \"clustalw\"}{\"ADDRESS\"}=\"http://www.clustal.or\
5268 g\";\n$PG{\"clustalw\"}{\"language\"}=\"C\";\n$PG{\
5269 \"clustalw\"}{\"language2\"}=\"C\";\n$PG{\"clustal\
5270 w\"}{\"source\"}=\"http://www.clustal.org/download\
5271 /1.X/ftp-igbmc.u-strasbg.fr/pub/ClustalW/clustalw1\
5272 .82.UNIX.tar.gz\";\n$PG{\"clustalw\"}{\"mode\"}=\"\
5273 mcoffee,rcoffee\";\n$PG{\"clustalw\"}{\"version\"}\
5274 =\"1.82\";\n$PG{\"dialign-t\"}{\"4_TCOFFEE\"}=\"DI\
5275 ALIGNT\";\n$PG{\"dialign-t\"}{\"type\"}=\"sequence\
5276 _multiple_aligner\";\n$PG{\"dialign-t\"}{\"ADDRESS\
5277 \"}=\"http://dialign-tx.gobics.de/\";\n$PG{\"diali\
5278 gn-t\"}{\"DIR\"}=\"/usr/share/dialign-tx/\";\n$PG{\
5279 \"dialign-t\"}{\"language\"}=\"C\";\n$PG{\"dialign\
5280 -t\"}{\"language2\"}=\"C\";\n$PG{\"dialign-t\"}{\"\
5281 source\"}=\"http://dialign-tx.gobics.de/DIALIGN-TX\
5282 _1.0.2.tar.gz\";\n$PG{\"dialign-t\"}{\"mode\"}=\"m\
5283 coffee\";\n$PG{\"dialign-t\"}{\"binary\"}=\"dialig\
5284 n-t\";\n$PG{\"dialign-t\"}{\"version\"}=\"1.0.2\";\
5285 \n$PG{\"dialign-tx\"}{\"4_TCOFFEE\"}=\"DIALIGNTX\"\
5286 ;\n$PG{\"dialign-tx\"}{\"type\"}=\"sequence_multip\
5287 le_aligner\";\n$PG{\"dialign-tx\"}{\"ADDRESS\"}=\"\
5288 http://dialign-tx.gobics.de/\";\n$PG{\"dialign-tx\\
5289 "}{\"DIR\"}=\"/usr/share/dialign-tx/\";\n$PG{\"dia\
5290 lign-tx\"}{\"language\"}=\"C\";\n$PG{\"dialign-tx\\
5291 "}{\"language2\"}=\"C\";\n$PG{\"dialign-tx\"}{\"so\
5292 urce\"}=\"http://dialign-tx.gobics.de/DIALIGN-TX_1\
5293 .0.2.tar.gz\";\n$PG{\"dialign-tx\"}{\"mode\"}=\"mc\
5294 offee\";\n$PG{\"dialign-tx\"}{\"binary\"}=\"dialig\
5295 n-tx\";\n$PG{\"dialign-tx\"}{\"version\"}=\"1.0.2\\
5296 ";\n$PG{\"poa\"}{\"4_TCOFFEE\"}=\"POA\";\n$PG{\"po\
5297 a\"}{\"type\"}=\"sequence_multiple_aligner\";\n$PG\
5298 {\"poa\"}{\"ADDRESS\"}=\"http://www.bioinformatics\
5299 .ucla.edu/poa/\";\n$PG{\"poa\"}{\"language\"}=\"C\\
5300 ";\n$PG{\"poa\"}{\"language2\"}=\"C\";\n$PG{\"poa\\
5301 "}{\"source\"}=\"http://downloads.sourceforge.net/\
5302 poamsa/poaV2.tar.gz\";\n$PG{\"poa\"}{\"DIR\"}=\"/u\
5303 sr/share/\";\n$PG{\"poa\"}{\"FILE1\"}=\"blosum80.m\
5304 at\";\n$PG{\"poa\"}{\"mode\"}=\"mcoffee\";\n$PG{\"\
5305 poa\"}{\"binary\"}=\"poa\";\n$PG{\"poa\"}{\"versio\
5306 n\"}=\"2.0\";\n$PG{\"probcons\"}{\"4_TCOFFEE\"}=\"\
5307 PROBCONS\";\n$PG{\"probcons\"}{\"type\"}=\"sequenc\
5308 e_multiple_aligner\";\n$PG{\"probcons\"}{\"ADDRESS\
5309 \"}=\"http://probcons.stanford.edu/\";\n$PG{\"prob\
5310 cons\"}{\"language2\"}=\"CXX\";\n$PG{\"probcons\"}\
5311 {\"language\"}=\"C++\";\n$PG{\"probcons\"}{\"sourc\
5312 e\"}=\"http://probcons.stanford.edu/probcons_v1_12\
5313 .tar.gz\";\n$PG{\"probcons\"}{\"mode\"}=\"mcoffee\\
5314 ";\n$PG{\"probcons\"}{\"binary\"}=\"probcons\";\n$\
5315 PG{\"probcons\"}{\"version\"}=\"1.12\";\n$PG{\"maf\
5316 ft\"}{\"4_TCOFFEE\"}=\"MAFFT\";\n$PG{\"mafft\"}{\"\
5317 type\"}=\"sequence_multiple_aligner\";\n$PG{\"maff\
5318 t\"}{\"ADDRESS\"}=\"http://align.bmr.kyushu-u.ac.j\
5319 p/mafft/online/server/\";\n$PG{\"mafft\"}{\"langua\
5320 ge\"}=\"C\";\n$PG{\"mafft\"}{\"language\"}=\"C\";\\
5321 n$PG{\"mafft\"}{\"source\"}=\"http://align.bmr.kyu\
5322 shu-u.ac.jp/mafft/software/mafft-6.603-with-extens\
5323 ions-src.tgz\";\n$PG{\"mafft\"}{\"windows\"}=\"htt\
5324 p://align.bmr.kyushu-u.ac.jp/mafft/software/mafft-\
5325 6.603-mingw.tar\";\n$PG{\"mafft\"}{\"mode\"}=\"mco\
5326 ffee,rcoffee\";\n$PG{\"mafft\"}{\"binary\"}=\"maff\
5327 t.tar.gz\";\n$PG{\"mafft\"}{\"version\"}=\"6.603\"\
5328 ;\n$PG{\"muscle\"}{\"4_TCOFFEE\"}=\"MUSCLE\";\n$PG\
5329 {\"muscle\"}{\"type\"}=\"sequence_multiple_aligner\
5330 \";\n$PG{\"muscle\"}{\"ADDRESS\"}=\"http://www.dri\
5331 ve5.com/muscle/\";\n$PG{\"muscle\"}{\"language\"}=\
5332 \"C++\";\n$PG{\"muscle\"}{\"language2\"}=\"GPP\";\\
5333 n$PG{\"muscle\"}{\"source\"}=\"http://www.drive5.c\
5334 om/muscle/downloads3.7/muscle3.7_src.tar.gz\";\n$P\
5335 G{\"muscle\"}{\"windows\"}=\"http://www.drive5.com\
5336 /muscle/downloads3.7/muscle3.7_win32.zip\";\n$PG{\\
5337 "muscle\"}{\"linux\"}=\"http://www.drive5.com/musc\
5338 le/downloads3.7/muscle3.7_linux_ia32.tar.gz\";\n$P\
5339 G{\"muscle\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$PG{\
5340 \"muscle\"}{\"version\"}=\"3.7\";\n$PG{\"mus4\"}{\\
5341 "4_TCOFFEE\"}=\"MUS4\";\n$PG{\"mus4\"}{\"type\"}=\\
5342 "sequence_multiple_aligner\";\n$PG{\"mus4\"}{\"ADD\
5343 RESS\"}=\"http://www.drive5.com/muscle/\";\n$PG{\"\
5344 mus4\"}{\"language\"}=\"C++\";\n$PG{\"mus4\"}{\"la\
5345 nguage2\"}=\"GPP\";\n$PG{\"mus4\"}{\"source\"}=\"h\
5346 ttp://www.drive5.com/muscle/muscle4.0_src.tar.gz\"\
5347 ;\n$PG{\"mus4\"}{\"mode\"}=\"mcoffee,rcoffee\";\n$\
5348 PG{\"mus4\"}{\"version\"}=\"4.0\";\n$PG{\"pcma\"}{\
5349 \"4_TCOFFEE\"}=\"PCMA\";\n$PG{\"pcma\"}{\"type\"}=\
5350 \"sequence_multiple_aligner\";\n$PG{\"pcma\"}{\"AD\
5351 DRESS\"}=\"ftp://iole.swmed.edu/pub/PCMA/\";\n$PG{\
5352 \"pcma\"}{\"language\"}=\"C\";\n$PG{\"pcma\"}{\"la\
5353 nguage2\"}=\"C\";\n$PG{\"pcma\"}{\"source\"}=\"ftp\
5354 ://iole.swmed.edu/pub/PCMA/pcma.tar.gz\";\n$PG{\"p\
5355 cma\"}{\"mode\"}=\"mcoffee\";\n$PG{\"pcma\"}{\"ver\
5356 sion\"}=\"1.0\";\n$PG{\"kalign\"}{\"4_TCOFFEE\"}=\\
5357 "KALIGN\";\n$PG{\"kalign\"}{\"type\"}=\"sequence_m\
5358 ultiple_aligner\";\n$PG{\"kalign\"}{\"ADDRESS\"}=\\
5359 "http://msa.cgb.ki.se\";\n$PG{\"kalign\"}{\"langua\
5360 ge\"}=\"C\";\n$PG{\"kalign\"}{\"language2\"}=\"C\"\
5361 ;\n$PG{\"kalign\"}{\"source\"}=\"http://msa.cgb.ki\
5362 .se/downloads/kalign/current.tar.gz\";\n$PG{\"kali\
5363 gn\"}{\"mode\"}=\"mcoffee\";\n$PG{\"kalign\"}{\"ve\
5364 rsion\"}=\"1.0\";\n$PG{\"amap\"}{\"4_TCOFFEE\"}=\"\
5365 AMAP\";\n$PG{\"amap\"}{\"type\"}=\"sequence_multip\
5366 le_aligner\";\n$PG{\"amap\"}{\"ADDRESS\"}=\"http:/\
5367 /bio.math.berkeley.edu/amap/\";\n$PG{\"amap\"}{\"l\
5368 anguage\"}=\"C++\";\n$PG{\"amap\"}{\"language2\"}=\
5369 \"CXX\";\n$PG{\"amap\"}{\"source\"}=\"http://amap-\
5370 align.googlecode.com/files/amap.2.0.tar.gz\";\n$PG\
5371 {\"amap\"}{\"mode\"}=\"mcoffee\";\n$PG{\"amap\"}{\\
5372 "version\"}=\"2.0\";\n$PG{\"proda\"}{\"4_TCOFFEE\"\
5373 }=\"PRODA\";\n$PG{\"proda\"}{\"type\"}=\"sequence_\
5374 multiple_aligner\";\n$PG{\"proda\"}{\"ADDRESS\"}=\\
5375 "http://proda.stanford.edu\";\n$PG{\"proda\"}{\"la\
5376 nguage\"}=\"C++\";\n$PG{\"proda\"}{\"language2\"}=\
5377 \"CXX\";\n$PG{\"proda\"}{\"source\"}=\"http://prod\
5378 a.stanford.edu/proda_1_0.tar.gz\";\n$PG{\"proda\"}\
5379 {\"mode\"}=\"mcoffee\";\n$PG{\"proda\"}{\"version\\
5380 "}=\"1.0\";\n$PG{\"fsa\"}{\"4_TCOFFEE\"}=\"FSA\";\\
5381 n$PG{\"fsa\"}{\"type\"}=\"sequence_multiple_aligne\
5382 r\";\n$PG{\"fsa\"}{\"ADDRESS\"}=\"http://fsa.sourc\
5383 eforge.net/\";\n$PG{\"fsa\"}{\"language\"}=\"C++\"\
5384 ;\n$PG{\"fsa\"}{\"language2\"}=\"CXX\";\n$PG{\"fsa\
5385 \"}{\"source\"}=\"http://sourceforge.net/projects/\
5386 fsa/files/fsa-1.15.3.tar.gz/download/\";\n$PG{\"fs\
5387 a\"}{\"mode\"}=\"mcoffee\";\n$PG{\"fsa\"}{\"versio\
5388 n\"}=\"1.15.3\";\n$PG{\"prank\"}{\"4_TCOFFEE\"}=\"\
5389 PRANK\";\n$PG{\"prank\"}{\"type\"}=\"sequence_mult\
5390 iple_aligner\";\n$PG{\"prank\"}{\"ADDRESS\"}=\"htt\
5391 p://www.ebi.ac.uk/goldman-srv/prank/\";\n$PG{\"pra\
5392 nk\"}{\"language\"}=\"C++\";\n$PG{\"prank\"}{\"lan\
5393 guage2\"}=\"CXX\";\n$PG{\"prank\"}{\"source\"}=\"h\
5394 ttp://www.ebi.ac.uk/goldman-srv/prank/src/prank/pr\
5395 ank.src.100303.tgz\";\n$PG{\"prank\"}{\"mode\"}=\"\
5396 mcoffee\";\n$PG{\"prank\"}{\"version\"}=\"100303\"\
5397 ;\n$PG{\"sap\"}{\"4_TCOFFEE\"}=\"SAP\";\n$PG{\"sap\
5398 \"}{\"type\"}=\"structure_pairwise_aligner\";\n$PG\
5399 {\"sap\"}{\"ADDRESS\"}=\"http://mathbio.nimr.mrc.a\
5400 c.uk/wiki/Software\";\n$PG{\"sap\"}{\"language\"}=\
5401 \"C\";\n$PG{\"sap\"}{\"language2\"}=\"C\";\n$PG{\"\
5402 sap\"}{\"source\"}=\"http://mathbio.nimr.mrc.ac.uk\
5403 /download/sap-1.1.1.tar.gz\";\n$PG{\"sap\"}{\"mode\
5404 \"}=\"expresso,3dcoffee\";\n$PG{\"sap\"}{\"version\
5405 \"}=\"1.1.1\";\n$PG{\"TMalign\"}{\"4_TCOFFEE\"}=\"\
5406 TMALIGN\";\n$PG{\"TMalign\"}{\"type\"}=\"structure\
5407 _pairwise_aligner\";\n$PG{\"TMalign\"}{\"ADDRESS\"\
5408 }=\"http://zhang.bioinformatics.ku.edu/TM-align/TM\
5409 align.f\";\n$PG{\"TMalign\"}{\"language\"}=\"Fortr\
5410 an\";\n$PG{\"TMalign\"}{\"language2\"}=\"Fortran\"\
5411 ;\n$PG{\"TMalign\"}{\"source\"}=\"http://zhang.bio\
5412 informatics.ku.edu/TM-align/TMalign.f\";\n$PG{\"TM\
5413 align\"}{\"linux\"}=\"http://zhang.bioinformatics.\
5414 ku.edu/TM-align/TMalign_32.gz\";\n$PG{\"TMalign\"}\
5415 {\"mode\"}=\"expresso,3dcoffee\";\n$PG{\"TMalign\"\
5416 }{\"version\"}=\"1.0\";\n$PG{\"mustang\"}{\"4_TCOF\
5417 FEE\"}=\"MUSTANG\";\n$PG{\"mustang\"}{\"type\"}=\"\
5418 structure_pairwise_aligner\";\n$PG{\"mustang\"}{\"\
5419 ADDRESS\"}=\"http://www.cs.mu.oz.au/~arun/mustang\\
5420 ";\n$PG{\"mustang\"}{\"language\"}=\"C++\";\n$PG{\\
5421 "mustang\"}{\"language2\"}=\"CXX\";\n$PG{\"mustang\
5422 \"}{\"source\"}=\"http://ww2.cs.mu.oz.au/~arun/mus\
5423 tang/mustang_v3.2.1.tgz\";\n$PG{\"mustang\"}{\"mod\
5424 e\"}=\"expresso,3dcoffee\";\n$PG{\"mustang\"}{\"ve\
5425 rsion\"}=\"3.2.1\";\n$PG{\"lsqman\"}{\"4_TCOFFEE\"\
5426 }=\"LSQMAN\";\n$PG{\"lsqman\"}{\"type\"}=\"structu\
5427 re_pairwise_aligner\";\n$PG{\"lsqman\"}{\"ADDRESS\\
5428 "}=\"empty\";\n$PG{\"lsqman\"}{\"language\"}=\"emp\
5429 ty\";\n$PG{\"lsqman\"}{\"language2\"}=\"empty\";\n\
5430 $PG{\"lsqman\"}{\"source\"}=\"empty\";\n$PG{\"lsqm\
5431 an\"}{\"update_action\"}=\"never\";\n$PG{\"lsqman\\
5432 "}{\"mode\"}=\"expresso,3dcoffee\";\n$PG{\"align_p\
5433 db\"}{\"4_TCOFFEE\"}=\"ALIGN_PDB\";\n$PG{\"align_p\
5434 db\"}{\"type\"}=\"structure_pairwise_aligner\";\n$\
5435 PG{\"align_pdb\"}{\"ADDRESS\"}=\"empty\";\n$PG{\"a\
5436 lign_pdb\"}{\"language\"}=\"empty\";\n$PG{\"align_\
5437 pdb\"}{\"language2\"}=\"empty\";\n$PG{\"align_pdb\\
5438 "}{\"source\"}=\"empty\";\n$PG{\"align_pdb\"}{\"up\
5439 date_action\"}=\"never\";\n$PG{\"align_pdb\"}{\"mo\
5440 de\"}=\"expresso,3dcoffee\";\n$PG{\"fugueali\"}{\"\
5441 4_TCOFFEE\"}=\"FUGUE\";\n$PG{\"fugueali\"}{\"type\\
5442 "}=\"structure_pairwise_aligner\";\n$PG{\"fugueali\
5443 \"}{\"ADDRESS\"}=\"http://www-cryst.bioc.cam.ac.uk\
5444 /fugue/download.html\";\n$PG{\"fugueali\"}{\"langu\
5445 age\"}=\"empty\";\n$PG{\"fugueali\"}{\"language2\"\
5446 }=\"empty\";\n$PG{\"fugueali\"}{\"source\"}=\"empt\
5447 y\";\n$PG{\"fugueali\"}{\"update_action\"}=\"never\
5448 \";\n$PG{\"fugueali\"}{\"mode\"}=\"expresso,3dcoff\
5449 ee\";\n$PG{\"dalilite.pl\"}{\"4_TCOFFEE\"}=\"DALIL\
5450 ITEc\";\n$PG{\"dalilite.pl\"}{\"type\"}=\"structur\
5451 e_pairwise_aligner\";\n$PG{\"dalilite.pl\"}{\"ADDR\
5452 ESS\"}=\"built_in\";\n$PG{\"dalilite.pl\"}{\"ADDRE\
5453 SS2\"}=\"http://www.ebi.ac.uk/Tools/webservices/se\
5454 rvices/dalilite\";\n$PG{\"dalilite.pl\"}{\"languag\
5455 e\"}=\"Perl\";\n$PG{\"dalilite.pl\"}{\"language2\"\
5456 }=\"Perl\";\n$PG{\"dalilite.pl\"}{\"source\"}=\"em\
5457 pty\";\n$PG{\"dalilite.pl\"}{\"update_action\"}=\"\
5458 never\";\n$PG{\"dalilite.pl\"}{\"mode\"}=\"express\
5459 o,3dcoffee\";\n$PG{\"probconsRNA\"}{\"4_TCOFFEE\"}\
5460 =\"PROBCONSRNA\";\n$PG{\"probconsRNA\"}{\"type\"}=\
5461 \"RNA_multiple_aligner\";\n$PG{\"probconsRNA\"}{\"\
5462 ADDRESS\"}=\"http://probcons.stanford.edu/\";\n$PG\
5463 {\"probconsRNA\"}{\"language\"}=\"C++\";\n$PG{\"pr\
5464 obconsRNA\"}{\"language2\"}=\"CXX\";\n$PG{\"probco\
5465 nsRNA\"}{\"source\"}=\"http://probcons.stanford.ed\
5466 u/probconsRNA.tar.gz\";\n$PG{\"probconsRNA\"}{\"mo\
5467 de\"}=\"mcoffee,rcoffee\";\n$PG{\"probconsRNA\"}{\\
5468 "version\"}=\"1.0\";\n$PG{\"sfold\"}{\"4_TCOFFEE\"\
5469 }=\"CONSAN\";\n$PG{\"sfold\"}{\"type\"}=\"RNA_pair\
5470 wise_aligner\";\n$PG{\"sfold\"}{\"ADDRESS\"}=\"htt\
5471 p://selab.janelia.org/software/consan/\";\n$PG{\"s\
5472 fold\"}{\"language\"}=\"empty\";\n$PG{\"sfold\"}{\\
5473 "language2\"}=\"empty\";\n$PG{\"sfold\"}{\"source\\
5474 "}=\"empty\";\n$PG{\"sfold\"}{\"update_action\"}=\\
5475 "never\";\n$PG{\"sfold\"}{\"mode\"}=\"rcoffee\";\n\
5476 $PG{\"RNAplfold\"}{\"4_TCOFFEE\"}=\"RNAPLFOLD\";\n\
5477 $PG{\"RNAplfold\"}{\"type\"}=\"RNA_secondarystruct\
5478 ure_predictor\";\n$PG{\"RNAplfold\"}{\"ADDRESS\"}=\
5479 \"http://www.tbi.univie.ac.at/~ivo/RNA/\";\n$PG{\"\
5480 RNAplfold\"}{\"language\"}=\"C\";\n$PG{\"RNAplfold\
5481 \"}{\"language2\"}=\"C\";\n$PG{\"RNAplfold\"}{\"so\
5482 urce\"}=\"http://www.tbi.univie.ac.at/~ivo/RNA/Vie\
5483 nnaRNA-1.7.2.tar.gz\";\n$PG{\"RNAplfold\"}{\"mode\\
5484 "}=\"rcoffee,\";\n$PG{\"RNAplfold\"}{\"version\"}=\
5485 \"1.7.2\";\n$PG{\"retree\"}{\"4_TCOFFEE\"}=\"PHYLI\
5486 P\";\n$PG{\"retree\"}{\"type\"}=\"RNA_secondarystr\
5487 ucture_predictor\";\n$PG{\"retree\"}{\"ADDRESS\"}=\
5488 \"http://evolution.gs.washington.edu/phylip/\";\n$\
5489 PG{\"retree\"}{\"language\"}=\"C\";\n$PG{\"retree\\
5490 "}{\"language2\"}=\"C\";\n$PG{\"retree\"}{\"source\
5491 \"}=\"http://evolution.gs.washington.edu/phylip/do\
5492 wnload/phylip-3.69.tar.gz\";\n$PG{\"retree\"}{\"mo\
5493 de\"}=\"trmsd,\";\n$PG{\"retree\"}{\"version\"}=\"\
5494 3.69\";\n$PG{\"hmmtop\"}{\"4_TCOFFEE\"}=\"HMMTOP\"\
5495 ;\n$PG{\"hmmtop\"}{\"type\"}=\"protein_secondaryst\
5496 ructure_predictor\";\n$PG{\"hmmtop\"}{\"ADDRESS\"}\
5497 =\"www.enzim.hu/hmmtop/\";\n$PG{\"hmmtop\"}{\"lang\
5498 uage\"}=\"C\";\n$PG{\"hmmtop\"}{\"language2\"}=\"C\
5499 \";\n$PG{\"hmmtop\"}{\"source\"}=\"empty\";\n$PG{\\
5500 "hmmtop\"}{\"update_action\"}=\"never\";\n$PG{\"hm\
5501 mtop\"}{\"mode\"}=\"tcoffee\";\n$PG{\"gorIV\"}{\"4\
5502 _TCOFFEE\"}=\"GOR4\";\n$PG{\"gorIV\"}{\"type\"}=\"\
5503 protein_secondarystructure_predictor\";\n$PG{\"gor\
5504 IV\"}{\"ADDRESS\"}=\"http://mig.jouy.inra.fr/logic\
5505 iels/gorIV/\";\n$PG{\"gorIV\"}{\"language\"}=\"C\"\
5506 ;\n$PG{\"gorIV\"}{\"language2\"}=\"C\";\n$PG{\"gor\
5507 IV\"}{\"source\"}=\"http://mig.jouy.inra.fr/logici\
5508 els/gorIV/GOR_IV.tar.gz\";\n$PG{\"gorIV\"}{\"updat\
5509 e_action\"}=\"never\";\n$PG{\"gorIV\"}{\"mode\"}=\\
5510 "tcoffee\";\n$PG{\"wublast.pl\"}{\"4_TCOFFEE\"}=\"\
5511 EBIWUBLASTc\";\n$PG{\"wublast.pl\"}{\"type\"}=\"pr\
5512 otein_homology_predictor\";\n$PG{\"wublast.pl\"}{\\
5513 "ADDRESS\"}=\"built_in\";\n$PG{\"wublast.pl\"}{\"A\
5514 DDRESS2\"}=\"http://www.ebi.ac.uk/Tools/webservice\
5515 s/services/wublast\";\n$PG{\"wublast.pl\"}{\"langu\
5516 age\"}=\"Perl\";\n$PG{\"wublast.pl\"}{\"language2\\
5517 "}=\"Perl\";\n$PG{\"wublast.pl\"}{\"source\"}=\"em\
5518 pty\";\n$PG{\"wublast.pl\"}{\"update_action\"}=\"n\
5519 ever\";\n$PG{\"wublast.pl\"}{\"mode\"}=\"psicoffee\
5520 ,expresso,accurate\";\n$PG{\"blastpgp.pl\"}{\"4_TC\
5521 OFFEE\"}=\"EBIBLASTPGPc\";\n$PG{\"blastpgp.pl\"}{\\
5522 "type\"}=\"protein_homology_predictor\";\n$PG{\"bl\
5523 astpgp.pl\"}{\"ADDRESS\"}=\"built_in\";\n$PG{\"bla\
5524 stpgp.pl\"}{\"ADDRESS2\"}=\"http://www.ebi.ac.uk/T\
5525 ools/webservices/services/blastpgp\";\n$PG{\"blast\
5526 pgp.pl\"}{\"language\"}=\"Perl\";\n$PG{\"blastpgp.\
5527 pl\"}{\"language2\"}=\"Perl\";\n$PG{\"blastpgp.pl\\
5528 "}{\"source\"}=\"empty\";\n$PG{\"blastpgp.pl\"}{\"\
5529 update_action\"}=\"never\";\n$PG{\"blastpgp.pl\"}{\
5530 \"mode\"}=\"psicoffee,expresso,accurate\";\n$PG{\"\
5531 blastcl3\"}{\"4_TCOFFEE\"}=\"NCBIWEBBLAST\";\n$PG{\
5532 \"blastcl3\"}{\"type\"}=\"protein_homology_predict\
5533 or\";\n$PG{\"blastcl3\"}{\"ADDRESS\"}=\"ftp://ftp.\
5534 ncbi.nih.gov/blast/executables/LATEST\";\n$PG{\"bl\
5535 astcl3\"}{\"language\"}=\"C\";\n$PG{\"blastcl3\"}{\
5536 \"language2\"}=\"C\";\n$PG{\"blastcl3\"}{\"source\\
5537 "}=\"empty\";\n$PG{\"blastcl3\"}{\"update_action\"\
5538 }=\"never\";\n$PG{\"blastcl3\"}{\"mode\"}=\"psicof\
5539 fee,expresso,3dcoffee\";\n$PG{\"blastpgp\"}{\"4_TC\
5540 OFFEE\"}=\"NCBIBLAST\";\n$PG{\"blastpgp\"}{\"type\\
5541 "}=\"protein_homology_predictor\";\n$PG{\"blastpgp\
5542 \"}{\"ADDRESS\"}=\"ftp://ftp.ncbi.nih.gov/blast/ex\
5543 ecutables/LATEST\";\n$PG{\"blastpgp\"}{\"language\\
5544 "}=\"C\";\n$PG{\"blastpgp\"}{\"language2\"}=\"C\";\
5545 \n$PG{\"blastpgp\"}{\"source\"}=\"empty\";\n$PG{\"\
5546 blastpgp\"}{\"update_action\"}=\"never\";\n$PG{\"b\
5547 lastpgp\"}{\"mode\"}=\"psicoffee,expresso,3dcoffee\
5548 \";\n$PG{\"SOAP::Lite\"}{\"4_TCOFFEE\"}=\"SOAPLITE\
5549 \";\n$PG{\"SOAP::Lite\"}{\"type\"}=\"library\";\n$\
5550 PG{\"SOAP::Lite\"}{\"ADDRESS\"}=\"http://cpansearc\
5551 h.perl.org/src/MKUTTER/SOAP-Lite-0.710.08/Makefile\
5552 .PL\";\n$PG{\"SOAP::Lite\"}{\"language\"}=\"Perl\"\
5553 ;\n$PG{\"SOAP::Lite\"}{\"language2\"}=\"Perl\";\n$\
5554 PG{\"SOAP::Lite\"}{\"source\"}=\"empty\";\n$PG{\"b\
5555 lastpgp\"}{\"update_action\"}=\"never\";\n$PG{\"SO\
5556 AP::Lite\"}{\"mode\"}=\"none\";\n$PG{\"XML::Simple\
5557 \"}{\"4_TCOFFEE\"}=\"XMLSIMPLE\";\n$PG{\"XML::Simp\
5558 le\"}{\"type\"}=\"library\";\n$PG{\"XML::Simple\"}\
5559 {\"ADDRESS\"}=\"http://search.cpan.org/~grantm/XML\
5560 -Simple-2.18/lib/XML/Simple.pm\";\n$PG{\"XML::Simp\
5561 le\"}{\"language\"}=\"Perl\";\n$PG{\"XML::Simple\"\
5562 }{\"language2\"}=\"Perl\";\n$PG{\"XML::Simple\"}{\\
5563 "source\"}=\"empty\";\n$PG{\"XML::Simple\"}{\"mode\
5564 \"}=\"psicoffee,expresso,accurate\";\n$MODE{\"tcof\
5565 fee\"}{\"name\"}=\"tcoffee\";\n$MODE{\"rcoffee\"}{\
5566 \"name\"}=\"rcoffee\";\n$MODE{\"3dcoffee\"}{\"name\
5567 \"}=\"3dcoffee\";\n$MODE{\"mcoffee\"}{\"name\"}=\"\
5568 mcoffee\";\n$MODE{\"expresso\"}{\"name\"}=\"expres\
5569 so\";\n$MODE{\"trmsd\"}{\"name\"}=\"trmsd\";\n$MOD\
5570 E{\"accurate\"}{\"name\"}=\"accurate\";\n$MODE{\"s\
5571 eq_reformat\"}{\"name\"}=\"seq_reformat\";\n\n\n$P\
5572 G{C}{compiler}=\"gcc\";\n$PG{C}{compiler_flag}=\"C\
5573 C\";\n$PG{C}{options}=\"\";\n$PG{C}{options_flag}=\
5574 \"CFLAGS\";\n$PG{C}{type}=\"compiler\";\n\n$PG{\"C\
5575 XX\"}{compiler}=\"g++\";\n$PG{\"CXX\"}{compiler_fl\
5576 ag}=\"CXX\";\n$PG{\"CXX\"}{options}=\"\";\n$PG{\"C\
5577 XX\"}{options_flag}=\"CXXFLAGS\";\n$PG{CXX}{type}=\
5578 \"compiler\";\n\n$PG{\"CPP\"}{compiler}=\"g++\";\n\
5579 $PG{\"CPP\"}{compiler_flag}=\"CPP\";\n$PG{\"CPP\"}\
5580 {options}=\"\";\n$PG{\"CPP\"}{options_flag}=\"CPPF\
5581 LAGS\";\n$PG{CPP}{type}=\"compiler\";\n\n$PG{\"GPP\
5582 \"}{compiler}=\"g++\";\n$PG{\"GPP\"}{compiler_flag\
5583 }=\"GPP\";\n$PG{\"GPP\"}{options}=\"\";\n$PG{\"GPP\
5584 \"}{options_flag}=\"CFLAGS\";\n$PG{GPP}{type}=\"co\
5585 mpiler\";\n\n$PG{Fortran}{compiler}=\"g77\";\n$PG{\
5586 Fortran}{compiler_flag}=\"FCC\";\n$PG{Fortran}{typ\
5587 e}=\"compiler\";\n\n$PG{Perl}{compiler}=\"CPAN\";\\
5588 n$PG{Perl}{type}=\"compiler\";\n\n$SUPPORTED_OS{ma\
5589 cox}=\"Macintosh\";\n$SUPPORTED_OS{linux}=\"Linux\\
5590 ";\n$SUPPORTED_OS{windows}=\"Cygwin\";\n\n\n\n$MOD\
5591 E{t_coffee}{description}=\" for regular multiple s\
5592 equence alignments\";\n$MODE{rcoffee} {description\
5593 }=\" for RNA multiple sequence alignments\";\n\n$M\
5594 ODE{psicoffee} {description}=\" for Homology Exten\
5595 ded multiple sequence alignments\";\n$MODE{express\
5596 o}{description}=\" for very accurate structure bas\
5597 ed multiple sequence alignments\";\n$MODE{\"3dcoff\
5598 ee\"}{description}=\" for multiple structure align\
5599 ments\";\n$MODE{mcoffee} {description}=\" for comb\
5600 ining alternative multiple sequence alignment pack\
5601 ages\\n------- into a unique meta-package. The ins\
5602 taller will upload several MSA packages and compil\
5603 e them\\n\n\";\n\n\n&post_process_PG();\nreturn;\n\
5604 }\n\nsub post_process_PG\n  {\n    my $p;\n    \n \
5605    %PG=&name2dname (%PG);\n    %MODE=&name2dname(%\
5606 MODE);\n    foreach $p (keys(%PG)){if ( $PG{$p}{ty\
5607 pe} eq \"compiler\"){$PG{$p}{update_action}=\"neve\
5608 r\";}}\n    \n  }\n\nsub name2dname\n  {\n    my (\
5609 %L)=(@_);\n    my ($l, $ml);\n    \n    foreach my\
5610  $pg (keys(%L))\n      {\n      $l=length ($pg);\n      if (\
5611  $l>$ml){$ml=$l;}\n      }\n    $ml+=1;\n    forea\
5612 ch my $pg (keys(%L))\n      {\n my $name;\n     $l=$ml\
5613 -length ($pg);\n        $name=$pg;\n    for ( $b=0; $b<$l; $\
5614 b++)\n    {\n       $name .=\" \";\n      }\n   $L{$pg}{dn\
5615 ame}=$name;\n      }\n    return %L;\n  }\n\nsub e\
5616 nv_file2putenv\n  {\n    my $f=@_[0];\n    my $F=n\
5617 ew FileHandle;\n    my $n;\n    \n    open ($F, \"\
5618 $f\");\n    while (<$F>)\n      {\n     my $line=$_;\n\
5619         my($var, $value)=($_=~/(\\S+)\\=(\\S*)/);\n     $ENV{\
5620 $var}=$value;\n $ENV_SET{$var}=1;\n     $n++;\n      }\
5621 \n    close ($F);\n    return $n;\n  }\n\nsub repl\
5622 ace_line_in_file\n  {\n    my ($file, $wordin, $wo\
5623 rdout)=@_;\n    my $O=new FileHandle;\n    my $I=n\
5624 ew FileHandle;\n    my $l;\n    if (!-e $file){ret\
5625 urn;}\n    \n    system (\"mv $file $file.old\");\\
5626 n    open ($O, \">$file\");\n    open ($I, \"$file\
5627 .old\");\n    while (<$I>)\n      {\n   $l=$_;\n        if \
5628 (!($l=~/$wordin/)){print $O \"$l\";}\n  elsif ( $wo\
5629 rdout ne \"\"){$l=~s/$wordin/$wordout/g;print $O \\
5630 "$l\";}\n      }\n    close ($O);\n    close ($I);\
5631 \n    return;\n  }\n\nsub add_C_libraries\n  {\n  \
5632  my ($file,$first,@list)=@_;\n   \n    my $O=new F\
5633 ileHandle;\n    my $I=new FileHandle;\n    my ($l,\
5634 $anchor);\n    if (!-e $file){return;}\n   \n    $\
5635 anchor=\"#include <$first>\";\n  \n    system (\"m\
5636 v $file $file.old\");\n    open ($O, \">$file\");\\
5637 n    open ($I, \"$file.old\");\n    while (<$I>)\n\
5638       {\n       $l=$_;\n        print $O \"$l\";\n      if (!($l=~/$\
5639 anchor/))\n        {\n      \n      foreach my $lib (@li\
5640 st)\n          {\n                  print $O \"#incl\
5641 ude <$lib>\\n\";\n             }\n           }\n      }\
5642 \n    close ($O);\n    close ($I);\n    return;\n \
5643    }\n","use Env;\nuse Cwd;\n@suffix=(\"tmp\", \"t\
5644 emp\", \"cache\", \"t_coffee\", \"core\", \"tcoffe\
5645 e\");\n\nif ($#ARGV==-1)\n  {\n    print \"clean_c\
5646 ache.pl -file <file to add in -dir> -dir=<dir> -si\
5647 ze=<value in Mb>\\n0: unlimited -1 always.\\nWill \
5648 only clean directories matching:[\";\n    foreach \
5649 $k(@suffix){print \"*$k* \";}\n    print \"]\\n\";\
5650 \n    exit (EXIT_FAILURE);\n  }\n\n$cl=join (\" \"\
5651 ,@ARGV);\nif (($cl=~/\\-no_action/))\n  {\n    exi\
5652 t (EXIT_SUCCESS);\n  }\n\nif (($cl=~/\\-debug/))\n\
5653   {\n    $DEBUG=1;\n  }\nelse\n  {\n    $DEBUG=0;\\
5654 n  }\n\nif (($cl=~/\\-dir=(\\S+)/))\n  {\n    $dir\
5655 =$1;\n  }\nelse\n  {\n    $dir=\"./\";\n  }\n\nif \
5656 ($cl=~/\\-file=(\\S+)/)\n  {\n    $file=$1;\n  }\n\
5657 else\n  {\n    $file=0;\n  }\n\nif ($cl=~/\\-size=\
5658 (\\S+)/)\n  {\n    $max_size=$1;\n  }\nelse\n  {\n\
5659     $max_size=0;#unlimited\n  }\nif ($cl=~/\\-forc\
5660 e/)\n  {\n    $force=1;\n  }\nelse\n  {\n    $forc\
5661 e=0;\n  }\n\nif ($cl=~/\\-age=(\\S+)/)\n  {\n    $\
5662 max_age=$1;\n  }\nelse\n  {\n    $max_age=0;#unlim\
5663 ited\n  }\n\n$max_size*=1000000;\nif ( ! -d $dir)\\
5664 n  {\n    print STDERR \"\\nCannot process $dir: d\
5665 oes not exist \\n\";\n    exit (EXIT_FAILURE);\n  \
5666 }\n\nif ( !($dir=~/^\\//))\n  {\n    $base=cwd();\\
5667 n    $dir=\"$base/$dir\";\n  }\n\n$proceed=0;\nfor\
5668 each $s (@suffix)\n  {\n    \n    if (($dir=~/$s/)\
5669 ){$proceed=1;}\n    $s=uc ($s);\n    if (($dir=~/$\
5670 s/)){$proceed=1;}\n  }\nif ( $proceed==0)\n  {\n  \
5671   print STDERR \"Clean_cache.pl can only clean dir\
5672 ectories whose absolute path name contains the fol\
5673 lowing strings:\";\n    foreach $w (@suffix) {prin\
5674 t STDERR \"$w \";$w=lc($w); print STDERR \"$w \";}\
5675 \n    print STDERR \"\\nCannot process $dir\\n\";\\
5676 n    exit (EXIT_FAILURE);\n  }\n\n$name_file=\"$di\
5677 r/name_file.txt\";\n$size_file=\"$dir/size_file.tx\
5678 t\";\nif ( $force){&create_ref_file ($dir,$name_fi\
5679 le,$size_file);}\nif ($file){&add_file ($dir, $nam\
5680 e_file, $size_file, $file);}\n&clean_dir ($dir, $n\
5681 ame_file, $size_file, $max_size,$max_age);\nexit (\
5682 EXIT_SUCCESS);\n\nsub clean_dir \n  {\n    my ($di\
5683 r, $name_file, $size_file, $max_size, $max_age)=@_\
5684 ;\n    my ($tot_size, $size, $f, $s);\n\n  \n    $\
5685 tot_size=&get_tot_size ($dir, $name_file, $size_fi\
5686 le);\n\n    if ( $tot_size<=$max_size){return ;}\n\
5687     else {$max_size/=2;}\n    \n    #recreate the \
5688 name file in case some temprary files have not bee\
5689 n properly registered\n    &create_ref_file ($dir,\
5690  $name_file, $size_file, $max_age);\n  \n    $new_\
5691 name_file=&vtmpnam();\n    open (R, \"$name_file\"\
5692 );\n    open (W, \">$new_name_file\");\n    while \
5693 (<R>)\n      {\n        my $line=$_;\n  \n      ($f, $s)=($line\
5694 =~/(\\S+) (\\S+)/);\n   if ( !($f=~/\\S/)){next;}\n     \
5695 \n      elsif ($max_size && $tot_size>=$max_size && !($\
5696 f=~/name_file/))\n        {\n       remove ( \"$dir/$f\")\
5697 ;\n         $tot_size-=$s;\n      }\n   elsif ( $max_age &&\
5698  -M(\"$dir/$f\")>=$max_age)\n     {\n       remove ( \\
5699 "$dir/$f\");\n      $tot_size-=$s;\n      }\n   else\n   \
5700  {\n        print W \"$f $s\\n\";\n       }\n      }\n   \
5701  close (R);\n    close (W);\n    open (F, \">$size\
5702 _file\");\n    print F \"$tot_size\";\n    if ( -e\
5703  $new_name_file){`mv $new_name_file $name_file`;}\\
5704 n    close (F);\n  }\nsub get_tot_size\n  {\n    m\
5705 y ($dir, $name_file, $size_file)=@_;\n    my $size\
5706 ;\n    \n    if ( !-d $dir){return 0;}\n    if ( !\
5707 -e $name_file)\n      {\n       \n      &create_ref_file ($di\
5708 r, $name_file, $size_file);\n      }\n    open (F,\
5709  \"$size_file\");\n    $size=<F>;\n    close (F);\\
5710 n    chomp ($size);\n    return $size;\n  }\nsub s\
5711 ize \n  {\n    my $f=@_[0];\n\n    if ( !-d $f){re\
5712 turn -s($f);}\n    else {return &dir2size($f);}\n \
5713  }\nsub dir2size\n  {\n    my $d=@_[0];\n    my ($\
5714 s, $f);\n    \n    if ( !-d $d) {return 0;}\n    \\
5715 n    foreach $f (&dir2list ($d))\n      {\n     if ( -\
5716 d $f){$s+=&dir2size (\"$d/$f\");}\n     else {$s+= -s \
5717 \"$dir/$f\";}\n      }\n    return $s;\n  }\n\nsub\
5718  remove \n  {\n    my $file=@_[0];\n    my ($f);\n\
5719     \n    debug_print( \"--- $file ---\\n\");\n   \
5720  if (($file eq \".\") || ($file eq \"..\") || ($fi\
5721 le=~/\\*/)){return EXIT_FAILURE;}\n    elsif ( !-d\
5722  $file)\n      {\n      debug_print (\"unlink $file\\n\\
5723 ");\n   if (-e $file){unlink ($file);}\n      }\n   \
5724  elsif ( -d $file)\n      {\n   debug_print (\"+++++\
5725 +++ $file +++++++\\n\");\n      foreach $f (&dir2list($\
5726 file))\n          {\n       &remove (\"$file/$f\");\n     }\n\
5727         debug_print (\"rmdir $file\\n\");\n     rmdir $file;\\
5728 n      }\n    else\n      {\n   debug_print (\"?????\
5729 ???? $file ????????\\n\");\n      }\n    return EX\
5730 IT_SUCCESS;\n  }\n\nsub dir2list\n  {\n    my $dir\
5731 =@_[0];\n    my (@list1, @list2,@list3, $l);\n\n  \
5732   opendir (DIR,$dir);\n    @list1=readdir (DIR);\n\
5733     closedir (DIR);\n    \n    foreach $l (@list1)\
5734 \n      {\n     if ( $l ne \".\" && $l ne \"..\"){@lis\
5735 t2=(@list2, $l);}\n      }\n    @list3 = sort { (-\
5736 M \"$dir/$list2[$b]\") <=> (-M \"$dir/$list2[$a]\"\
5737 )} @list2;\n    return @list3;\n    \n  }\n\nsub d\
5738 ebug_print\n  {\n    \n    if ($DEBUG==1){print @_\
5739 ;}\n    \n  }\nsub create_ref_file\n  {\n    my ($\
5740 dir,$name_file,$size_file)=@_;\n    my ($f, $s, $t\
5741 ot_size, @l);\n    \n    if ( !-d $dir){return;}\n\
5742     \n    @l=&dir2list ($dir);\n    open (F, \">$n\
5743 ame_file\");\n    foreach $f (@l)\n      {\n    $s=&s\
5744 ize(\"$dir/$f\");\n     $tot_size+=$s;\n        print F \"$f \
5745 $s\\n\";\n      }\n    &myecho ($tot_size, \">$siz\
5746 e_file\");\n    close (F);\n  }\nsub add_file \n  \
5747 {\n    my ($dir,$name_file,$size_file,$file)=@_;\n\
5748     my ($s, $tot_size);\n    \n    if ( !-d $dir) \
5749   {return;}\n    if ( !-e \"$dir/$file\" ) {return\
5750 ;}\n    if ( !-e $name_file){&create_ref_file ($di\
5751 r,$name_file,$size_file);}\n                                        \n    $s=&siz\
5752 e(\"$dir/$file\");\n    open (F, \">>$name_file\")\
5753 ;\n    print F \"$file\\n\";\n    close (F);\n\n  \
5754   $tot_size=&get_tot_size ($dir,$name_file,$size_f\
5755 ile);\n    $tot_size+=$s;\n    &myecho ($tot_size,\
5756  \">$size_file\");\n    \n  }\n \nsub myecho\n  {\\
5757 n    my ($string, $file)=@_;\n    open (ECHO, $fil\
5758 e) || die;\n    print ECHO \"$string\";\n    close\
5759  (ECHO);\n  }\n    \n           \n      \nsub vtmpnam\n  {\n    \
5760 my $tmp_file_name;\n    $tmp_name_counter++;\n    \
5761 $tmp_file_name=\"tmp_file_for_clean_cache_pdb$$.$t\
5762 mp_name_counter\";\n    $tmp_file_list[$ntmp_file+\
5763 +]=$tmp_file_name;\n    if ( -e $tmp_file_name) {r\
5764 eturn &vtmpnam ();}\n    else {return $tmp_file_na\
5765 me;}\n  }\n","\nmy $address=\"http://www.tcoffee.o\
5766 rg/Projects/Datasets/NatureMethodsDataset.tar.gz\"\
5767 ;\nmy $out=\"NatureMethodsDataset.tar.gz\";\n&url2\
5768 file ($address,$out);\n\nif ( -e $out)\n  {\n    \\
5769 n    system (\"gunzip NatureMethodsDataset.tar.gz\\
5770 ");\n    system (\"tar -xvf NatureMethodsDataset.t\
5771 ar\");\n    \n    print \"Your Data Set is in the \
5772 Folder NatureMethodsDataset\\n\";\n  }\nelse \n  {\
5773 \n    print \"Could not Download Dataset --- Web s\
5774 ite may be down -- Try again later\\n\";\n  }\n\n\\
5775 n\n\nsub url2file\n{\n    my ($address, $out, $wge\
5776 t_arg, $curl_arg)=(@_);\n    my ($pg, $flag, $r, $\
5777 arg, $count);\n    \n    if (!$CONFIGURATION){&che\
5778 ck_configuration (\"wget\", \"INTERNET\", \"gzip\"\
5779 );$CONFIGURATION=1;}\n    \n    if (&pg_is_install\
5780 ed (\"wget\"))   {$pg=\"wget\"; $flag=\"-O\";$arg=\
5781 $wget_arg;}\n    elsif (&pg_is_installed (\"curl\"\
5782 )){$pg=\"curl\"; $flag=\"-o\";$arg=$curl_arg;}\n  \
5783   return system (\"$pg $address $flag $out>/dev/nu\
5784 ll 2>/dev/null\");\n\n}\n\nsub pg_is_installed\n  \
5785 {\n    my @ml=@_;\n    my $r, $p, $m;\n    my $sup\
5786 ported=0;\n    \n    my $p=shift (@ml);\n    if ($\
5787 p=~/::/)\n      {\n     if (system (\"perl -M$p -e 1\"\
5788 )==$EXIT_SUCCESS){return 1;}\n  else {return 0;}\n \
5789      }\n    else\n      {\n     $r=`which $p 2>/dev/nu\
5790 ll`;\n  if ($r eq \"\"){return 0;}\n    else {return 1\
5791 ;}\n      }\n  }\nsub check_configuration \n    {\\
5792 n      my @l=@_;\n      my $v;\n      foreach my $\
5793 p (@l)\n        {\n       \n      if   ( $p eq \"EMAIL\")\n         \
5794 { \n          if ( !($EMAIL=~/@/))\n            {\n               exit (EX\
5795 IT_FAILURE);\n          }\n         }\n   elsif( $p eq \"INTER\
5796 NET\")\n            {\n       if ( !&check_internet_conne\
5797 ction())\n              {\n               exit (EXIT_FAILURE);\n                }\n        \
5798  }\n      elsif( $p eq \"wget\")\n          {\n       if (\
5799 !&pg_is_installed (\"wget\") && !&pg_is_installed \
5800 (\"curl\"))\n           {\n               exit (EXIT_FAILURE);\n                }\n     \
5801     }\n   elsif( !(&pg_is_installed ($p)))\n        {\
5802 \n            exit (EXIT_FAILURE);\n        }\n }\n      r\
5803 eturn 1;\n    }\nsub check_internet_connection\n  \
5804 {\n    my $internet;\n    my $tmp;\n    &check_con\
5805 figuration ( \"wget\"); \n    \n    $tmp=&vtmpnam \
5806 ();\n    \n    if     (&pg_is_installed    (\"wget\
5807 \")){`wget www.google.com -O$tmp >/dev/null 2>/dev\
5808 /null`;}\n    elsif  (&pg_is_installed    (\"curl\\
5809 ")){`curl www.google.com -o$tmp >/dev/null 2>/dev/\
5810 null`;}\n    \n    if ( !-e $tmp || -s $tmp < 10){\
5811 $internet=0;}\n    else {$internet=1;}\n    if (-e\
5812  $tmp){unlink $tmp;}\n\n    return $internet;\n  }\
5813 \n\nsub vtmpnam\n      {\n      my $r=rand(100000);\n   m\
5814 y $f=\"file.$r.$$\";\n  while (-e $f)\n   {\n       $\
5815 f=vtmpnam();\n    }\n   push (@TMPFILE_LIST, $f);\n     r\
5816 eturn $f;\n      }\n\n","\n$t_coffee=\"t_coffee\";\
5817 \n\nforeach $value ( @ARGV)\n  {\n    $seq_file=$s\
5818 eq_file.\" \".$value;\n  }\n\n$name=$ARGV[0];\n$na\
5819 me=~s/\\.[^\\.]*$//;\n$lib_name=\"$name.mocca_lib\\
5820 ";\n$type=`t_coffee $seq_file -get_type -quiet`;\n\
5821 chop ($type);\n\nif ( $type eq \"PROTEIN\"){$lib_m\
5822 ode=\"lalign_rs_s_pair -lalign_n_top 20\";}\nelsif\
5823  ( $type eq\"DNA\"){$lib_mode=\"lalign_rs_s_dna_pa\
5824 ir -lalign_n_top 40\";}\n\nif ( !(-e $lib_name))\n\
5825   {\n     \n  $command=\"$t_coffee -mocca -seq_weigh\
5826 t=no -cosmetic_penalty=0 -mocca_interactive -in $l\
5827 ib_mode -out_lib $lib_name -infile $seq_file\";\n \
5828  \n  }\nelsif ( (-e $lib_name))\n  {\n  $command=\\
5829 "$t_coffee -mocca -seq_weight=no -cosmetic_penalty\
5830 =0 -mocca_interactive -in $lib_name -infile $seq_f\
5831 ile\";\n  \n  }\n\nsystem ($command);\n\nexit;\n\n\
5832 ","my $WSDL = 'http://www.ebi.ac.uk/Tools/webservi\
5833 ces/wsdl/WSDaliLite.wsdl';\n\nuse SOAP::Lite;\nuse\
5834  Data::Dumper;\nuse Getopt::Long qw(:config no_ign\
5835 ore_case bundling);\nuse File::Basename;\n\nmy $ch\
5836 eckInterval = 5;\n\nmy %params=(\n          'async' => \
5837 '1', # Use async mode and simulate sync mode in cl\
5838 ient\n      );\nGetOptions(\n    'pdb1=s'     => \\\
5839 $params{'sequence1'},\n    'chainid1=s' => \\$para\
5840 ms{'chainid1'},\n    'pdb2=s'     => \\$params{'se\
5841 quence2'},\n    'chainid2=s' => \\$params{'chainid\
5842 2'},\n    \"help|h\"     => \\$help, # Usage info\n  \
5843   \"async|a\"    => \\$async, # Asynchronous submiss\
5844 ion\n    \"polljob\"     => \\$polljob, # Get results\
5845 \n    \"status\"         => \\$status, # Get status\n    \
5846 \"jobid|j=s\"  => \\$jobid, # JobId\n    \"email|S\
5847 =s\"  => \\$params{email}, # E-mail address\n    \\
5848 "trace\"      => \\$trace, # SOAP messages\n    \"\
5849 sequence=s\" => \\$sequence, # Input PDB\n    );\n\
5850 \nmy $scriptName = basename($0, ());\nif($help) {\\
5851 n    &usage();\n    exit(0);\n}\n\nif($trace) {\n \
5852    print \"Tracing active\\n\";\n    SOAP::Lite->i\
5853 mport(+trace => 'debug');\n}\n\nmy $soap = SOAP::L\
5854 ite\n    ->service($WSDL)\n    ->on_fault(sub {\n \
5855        my $soap = shift;\n        my $res = shift;\
5856 \n        # Throw an exception for all faults\n   \
5857      if(ref($res) eq '') {\n            die($res);\
5858 \n        } else {\n            die($res->faultstr\
5859 ing);\n        }\n        return new SOAP::SOM;\n \
5860    }\n               );\n\nif( !($polljob || $stat\
5861 us) &&\n    !( defined($params{'sequence1'}) && de\
5862 fined($params{'sequence2'}) )\n    ) {\n    print \
5863 STDERR 'Error: bad option combination', \"\\n\";\n\
5864     &usage();\n    exit(1);\n}\nelsif($polljob && \
5865 defined($jobid)) {\n    print \"Getting results fo\
5866 r job $jobid\\n\";\n    getResults($jobid);\n}\nel\
5867 sif($status && defined($jobid)) {\n    print STDER\
5868 R \"Getting status for job $jobid\\n\";\n    my $r\
5869 esult = $soap->checkStatus($jobid);\n    print STD\
5870 OUT \"$result\", \"\\n\";\n    if($result eq 'DONE\
5871 ') {\n  print STDERR \"To get results: $scriptName \
5872 --polljob --jobid $jobid\\n\";\n    }\n}\nelse {\n\
5873     if(-f $params{'sequence1'}) {\n     $params{'seque\
5874 nce1'} = read_file($params{'sequence1'});\n    }\n\
5875     if(-f $params{'sequence2'}) {\n     $params{'seque\
5876 nce2'} = read_file($params{'sequence2'});\n    }\n\
5877 \n    my $jobid;\n    my $paramsData = SOAP::Data-\
5878 >name('params')->type(map=>\\%params);\n    # For \
5879 SOAP::Lite 0.60 and earlier parameters are passed \
5880 directly\n    if($SOAP::Lite::VERSION eq '0.60' ||\
5881  $SOAP::Lite::VERSION =~ /0\\.[1-5]/) {\n        $\
5882 jobid = $soap->runDaliLite($paramsData);\n    }\n \
5883    # For SOAP::Lite 0.69 and later parameter handl\
5884 ing is different, so pass\n    # undef's for templ\
5885 ated params, and then pass the formatted args.\n  \
5886   else {\n        $jobid = $soap->runDaliLite(unde\
5887 f,\n                                 $paramsData);\n    }\n\n    if (defin\
5888 ed($async)) {\n print STDOUT $jobid, \"\\n\";\n   \
5889      print STDERR \"To check status: $scriptName -\
5890 -status --jobid $jobid\\n\";\n    } else { # Synch\
5891 ronous mode\n        print STDERR \"JobId: $jobid\\
5892 \n\";\n        sleep 1;\n        getResults($jobid\
5893 );\n    }\n}\n\nsub clientPoll($) {\n    my $jobid\
5894  = shift;\n    my $result = 'PENDING';\n    # Chec\
5895 k status and wait if not finished\n    #print STDE\
5896 RR \"Checking status: $jobid\\n\";\n    while($res\
5897 ult eq 'RUNNING' || $result eq 'PENDING') {\n     \
5898    $result = $soap->checkStatus($jobid);\n        \
5899 print STDERR \"$result\\n\";\n        if($result e\
5900 q 'RUNNING' || $result eq 'PENDING') {\n          \
5901   # Wait before polling again.\n            sleep \
5902 $checkInterval;\n        }\n    }\n}\n\nsub getRes\
5903 ults($) {\n    $jobid = shift;\n    # Check status\
5904 , and wait if not finished\n    clientPoll($jobid)\
5905 ;\n    # Use JobId if output file name is not defi\
5906 ned\n    unless(defined($outfile)) {\n        $out\
5907 file=$jobid;\n    }\n    # Get list of data types\\
5908 n    my $resultTypes = $soap->getResults($jobid);\\
5909 n    # Get the data and write it to a file\n    if\
5910 (defined($outformat)) { # Specified data type\n   \
5911      my $selResultType;\n        foreach my $resul\
5912 tType (@$resultTypes) {\n            if($resultTyp\
5913 e->{type} eq $outformat) {\n                $selRe\
5914 sultType = $resultType;\n            }\n        }\\
5915 n        $res=$soap->poll($jobid, $selResultType->\
5916 {type});\n        write_file($outfile.'.'.$selResu\
5917 ltType->{ext}, $res);\n    } else { # Data types a\
5918 vailable\n        # Write a file for each output t\
5919 ype\n        for my $resultType (@$resultTypes){\n\
5920             #print \"Getting $resultType->{type}\\\
5921 n\";\n            $res=$soap->poll($jobid, $result\
5922 Type->{type});\n            write_file($outfile.'.\
5923 '.$resultType->{ext}, $res);\n        }\n    }\n}\\
5924 n\nsub read_file($) {\n    my $filename = shift;\n\
5925     open(FILE, $filename);\n    my $content;\n    \
5926 my $buffer;\n    while(sysread(FILE, $buffer, 1024\
5927 )) {\n  $content.= $buffer;\n    }\n    close(FILE)\
5928 ;\n    return $content;\n}\n\nsub write_file($$) {\
5929 \n    my ($tmp,$entity) = @_;\n    print STDERR \"\
5930 Creating result file: \".$tmp.\"\\n\";\n    unless\
5931 (open (FILE, \">$tmp\")) {\n    return 0;\n    }\n   \
5932  syswrite(FILE, $entity);\n    close (FILE);\n    \
5933 return 1;\n}\n\nsub usage {\n    print STDERR <<EO\
5934 F\nDaliLite\n========\n\nPairwise comparison of pr\
5935 otein structures\n\n[Required]\n\n  --pdb1        \
5936         : str  : PDB ID for structure 1\n  --pdb2 \
5937                : str  : PDB ID for structure 2\n\n\
5938 [Optional]\n\n  --chain1              : str  : Cha\
5939 in identifer in structure 1\n  --chain2           \
5940    : str  : Chain identifer in structure 2\n\n[Gen\
5941 eral]\n\n  -h, --help            :      : prints t\
5942 his help text\n  -S, --email           : str  : us\
5943 er email address\n  -a, --async           :      :\
5944  asynchronous submission\n      --status          \
5945 :      : poll for the status of a job\n      --pol\
5946 ljob         :      : poll for the results of a jo\
5947 b\n  -j, --jobid           : str  : jobid for an a\
5948 synchronous job\n  -O, --outfile         : str  : \
5949 file name for results (default is jobid)\n      --\
5950 trace           :      : show SOAP messages being in\
5951 terchanged \n\nSynchronous job:\n\n  The results/e\
5952 rrors are returned as soon as the job is finished.\
5953 \n  Usage: $scriptName --email <your\\@email> [opt\
5954 ions] pdbFile [--outfile string]\n  Returns: saves\
5955  the results to disk\n\nAsynchronous job:\n\n  Use\
5956  this if you want to retrieve the results at a lat\
5957 er time. The results \n  are stored for up to 24 h\
5958 ours. \n  The asynchronous submission mode is reco\
5959 mmended when users are submitting \n  batch jobs o\
5960 r large database searches       \n  Usage: $scriptName -\
5961 -email <your\\@email> --async [options] pdbFile\n \
5962  Returns: jobid\n\n  Use the jobid to query for th\
5963 e status of the job. \n  Usage: $scriptName --stat\
5964 us --jobid <jobId>\n  Returns: string indicating t\
5965 he status of the job:\n    DONE - job has finished\
5966 \n    RUNNING - job is running\n    NOT_FOUND - jo\
5967 b cannot be found\n    ERROR - the jobs has encoun\
5968 tered an error\n\n  When done, use the jobid to re\
5969 trieve the status of the job. \n  Usage: $scriptNa\
5970 me --polljob --jobid <jobId> [--outfile string]\n\\
5971 n[Help]\n\n  For more detailed help information re\
5972 fer to\n  http://www.ebi.ac.uk/DaliLite/\nEOF\n;\n\
5973 }\n","my $WSDL = 'http://www.ebi.ac.uk/Tools/webse\
5974 rvices/wsdl/WSWUBlast.wsdl';\n\nuse strict;\nuse S\
5975 OAP::Lite;\nuse Getopt::Long qw(:config no_ignore_\
5976 case bundling);\nuse File::Basename;\n\nmy $checkI\
5977 nterval = 15;\n\nmy $numOpts = scalar(@ARGV);\nmy \
5978 ($outfile, $outformat, $help, $async, $polljob, $s\
5979 tatus, $ids, $jobid, $trace, $sequence);\nmy %para\
5980 ms= ( # Defaults\n            'async' => 1, # Force int\
5981 o async mode\n        'exp' => 10.0, # E-value thre\
5982 shold\n       'numal' => 50, # Maximum number of a\
5983 lignments\n           'scores' => 100, # Maximum numbe\
5984 r of scores\n            );\nGetOptions( # Map the\
5985  options into variables\n    \"program|p=s\"     =\
5986 > \\$params{program}, # BLAST program\n    \"datab\
5987 ase|D=s\"    => \\$params{database}, # Search data\
5988 base\n    \"matrix|m=s\"      => \\$params{matrix}\
5989 , # Scoring matrix\n    \"exp|E=f\"         => \\$\
5990 params{exp}, # E-value threshold\n    \"echofilter\
5991 |e\"    => \\$params{echofilter}, # Display filter\
5992 ed sequence\n    \"filter|f=s\"      => \\$params{\
5993 filter}, # Low complexity filter name\n    \"align\
5994 ments|b=i\"  => \\$params{numal}, # Number of alig\
5995 nments\n    \"scores|s=i\"      => \\$params{score\
5996 s}, # Number of scores\n    \"sensitivity|S=s\" =>\
5997  \\$params{sensitivity}, # Search sensitivity\n   \
5998  \"sort|t=s\"         => \\$params{sort}, # Sort hit\
5999 s by...\n    \"stats|T=s\"       => \\$params{stat\
6000 s}, # Scoring statistic to use\n    \"strand|d=s\"\
6001       => \\$params{strand}, # Strand to use in DNA\
6002  vs. DNA search\n    \"topcombon|c=i\"   => \\$par\
6003 ams{topcombon}, # Consistent sets of HSPs\n    \"o\
6004 utfile=s\"       => \\$outfile, # Output file\n   \
6005  \"outformat|o=s\"   => \\$outformat, # Output for\
6006 mat\n    \"help|h\"           => \\$help, # Usage info\
6007 \n    \"async|a\"             => \\$async, # Asynchronou\
6008 s mode\n    \"polljob\"       => \\$polljob, # Get\
6009  results\n    \"status\"              => \\$status, # Get\
6010  job status\n    \"ids\"             => \\$ids, # \
6011 Get ids from result\n    \"jobid|j=s\"       => \\\
6012 $jobid, # JobId\n    \"email=s\"         => \\$par\
6013 ams{email}, # E-mail address\n    \"trace\"       \
6014     => \\$trace, # SOAP trace\n    \"sequence=s\" \
6015      => \\$sequence, # Query sequence\n    );\n\nm\
6016 y $scriptName = basename($0, ());\nif($help || $nu\
6017 mOpts == 0) {\n    &usage();\n    exit(0);\n}\n\ni\
6018 f($trace){\n    print STDERR \"Tracing active\\n\"\
6019 ;\n    SOAP::Lite->import(+trace => 'debug');\n}\n\
6020 \nmy $soap = SOAP::Lite\n    ->service($WSDL)\n   \
6021  ->proxy('http://localhost/',\n    #proxy => ['htt\
6022 p' => 'http://your.proxy.server/'], # HTTP proxy\n\
6023     timeout => 600, # HTTP connection timeout\n   \
6024  )\n    ->on_fault(sub { # SOAP fault handler\n   \
6025      my $soap = shift;\n        my $res = shift;\n\
6026         # Throw an exception for all faults\n     \
6027    if(ref($res) eq '') {\n            die($res);\n\
6028         } else {\n            die($res->faultstrin\
6029 g);\n        }\n        return new SOAP::SOM;\n   \
6030  }\n               );\n\nif( !($polljob || $status\
6031  || $ids) &&\n    !( defined($ARGV[0]) || defined(\
6032 $sequence) )\n    ) {\n    print STDERR 'Error: ba\
6033 d option combination', \"\\n\";\n    &usage();\n  \
6034   exit(1);\n}\nelsif($polljob && defined($jobid)) \
6035 {\n    print \"Getting results for job $jobid\\n\"\
6036 ;\n    getResults($jobid);\n}\nelsif($status && de\
6037 fined($jobid)) {\n    print STDERR \"Getting statu\
6038 s for job $jobid\\n\";\n    my $result = $soap->ch\
6039 eckStatus($jobid);\n    print STDOUT \"$result\\n\\
6040 ";\n    if($result eq 'DONE') {\n       print STDERR \"T\
6041 o get results: $scriptName --polljob --jobid $jobi\
6042 d\\n\";\n    }\n}  \nelsif($ids && defined($jobid)\
6043 ) {\n    print STDERR \"Getting ids from job $jobi\
6044 d\\n\";\n    getIds($jobid);\n}\nelse {\n    # Pre\
6045 pare input data\n    my $content;\n    my (@conten\
6046 ts) = ();\n    if(-f $ARGV[0] || $ARGV[0] eq '-') \
6047 {       \n      $content={type=>'sequence',content=>read_file\
6048 ($ARGV[0])};    \n    }\n    if($sequence) {    \n      if(-f\
6049  $sequence || $sequence eq '-') {       \n          $content=\
6050 {type=>'sequence',content=>read_file($ARGV[0])};        \\
6051 n       } else {\n          $content={type=>'sequence',conten\
6052 t=>$sequence};\n        }\n    }\n    push @contents, $co\
6053 ntent;\n\n    # Submit the job\n    my $paramsData\
6054  = SOAP::Data->name('params')->type(map=>\\%params\
6055 );\n    my $contentData = SOAP::Data->name('conten\
6056 t')->value(\\@contents);\n    # For SOAP::Lite 0.6\
6057 0 and earlier parameters are passed directly\n    \
6058 if($SOAP::Lite::VERSION eq '0.60' || $SOAP::Lite::\
6059 VERSION =~ /0\\.[1-5]/) {\n        $jobid = $soap-\
6060 >runWUBlast($paramsData, $contentData);\n    }\n  \
6061   # For SOAP::Lite 0.69 and later parameter handli\
6062 ng is different, so pass\n    # undef's for templa\
6063 ted params, and then pass the formatted args.\n   \
6064  else {\n        $jobid = $soap->runWUBlast(undef,\
6065  undef,\n                                  $paramsData, $contentData);\n    }\
6066 \n\n    # Asynchronous mode: output jobid and exit\
6067 .\n    if (defined($async)) {\n print STDOUT $jobi\
6068 d, \"\\n\";\n        print STDERR \"To check statu\
6069 s: $scriptName --status --jobid $jobid\\n\";\n    \
6070 }\n    # Synchronous mode: try to get results\n   \
6071  else {\n        print STDERR \"JobId: $jobid\\n\"\
6072 ;\n        sleep 1;\n        getResults($jobid);\n\
6073     }\n}\n\nsub getIds($) {\n    my $jobid = shift\
6074 ;\n    my $results = $soap->getIds($jobid);\n    f\
6075 or my $result (@$results){\n    print \"$result\\n\";\
6076 \n    }\n}\n\nsub clientPoll($) {\n    my $jobid =\
6077  shift;\n    my $result = 'PENDING';\n    # Check \
6078 status and wait if not finished\n    while($result\
6079  eq 'RUNNING' || $result eq 'PENDING') {\n        \
6080 $result = $soap->checkStatus($jobid);\n        pri\
6081 nt STDERR \"$result\\n\";\n        if($result eq '\
6082 RUNNING' || $result eq 'PENDING') {\n            #\
6083  Wait before polling again.\n            sleep $ch\
6084 eckInterval;\n        }\n    }\n}\n\nsub getResult\
6085 s($) {\n    my $jobid = shift;\n    my $res;\n    \
6086 # Check status, and wait if not finished\n    clie\
6087 ntPoll($jobid);\n    # Use JobId if output file na\
6088 me is not defined\n    unless(defined($outfile)) {\
6089 \n        $outfile=$jobid;\n    }\n    # Get list \
6090 of data types\n    my $resultTypes = $soap->getRes\
6091 ults($jobid);\n    # Get the data and write it to \
6092 a file\n    if(defined($outformat)) { # Specified \
6093 data type\n     if($outformat eq 'xml') {$outformat = \
6094 'toolxml';}\n   if($outformat eq 'txt') {$outformat \
6095 = 'tooloutput';}\n        my $selResultType;\n    \
6096     foreach my $resultType (@$resultTypes) {\n    \
6097         if($resultType->{type} eq $outformat) {\n \
6098                $selResultType = $resultType;\n    \
6099         }\n        }\n        $res=$soap->poll($jo\
6100 bid, $selResultType->{type});\n if($outfile eq '-'\
6101 ) {\n        write_file($outfile, $res);\n      } else {\\
6102 n           write_file($outfile.'.'.$selResultType->{ext\
6103 }, $res);\n     }\n    } else { # Data types available\
6104 \n        # Write a file for each output type\n   \
6105      for my $resultType (@$resultTypes){\n        \
6106     #print STDERR \"Getting $resultType->{type}\\n\
6107 \";\n            $res=$soap->poll($jobid, $resultT\
6108 ype->{type});\n     if($outfile eq '-') {\n             write\
6109 _file($outfile, $res);\n            } else {\n          write_fil\
6110 e($outfile.'.'.$resultType->{ext}, $res);\n         }\\
6111 n        }\n    }\n}\n\nsub read_file($) {\n    my\
6112  $filename = shift;\n    my ($content, $buffer);\n\
6113     if($filename eq '-') {\n    while(sysread(STDIN, \
6114 $buffer, 1024)) {\n         $content .= $buffer;\n      }\n\
6115     }\n    else { # File\n      open(FILE, $filename) o\
6116 r die \"Error: unable to open input file\";\n   whil\
6117 e(sysread(FILE, $buffer, 1024)) {\n         $content .\
6118 = $buffer;\n    }\n     close(FILE);\n    }\n    return $\
6119 content;\n}\n\nsub write_file($$) {\n    my ($file\
6120 name, $data) = @_;\n    print STDERR 'Creating res\
6121 ult file: ' . $filename . \"\\n\";\n    if($filena\
6122 me eq '-') {\n  print STDOUT $data;\n    }\n    els\
6123 e {\n   open(FILE, \">$filename\") or die \"Error: u\
6124 nable to open output file\";\n  syswrite(FILE, $dat\
6125 a);\n   close(FILE);\n    }\n}\n\nsub usage {\n    p\
6126 rint STDERR <<EOF\nWU-BLAST\n========\n\nRapid seq\
6127 uence database search programs utilizing the BLAST\
6128  algorithm.\n   \n[Required]\n\n      --email     \
6129   : str  : user email address \n  -p, --program   \
6130   : str  : BLAST program to use: blastn, blastp, b\
6131 lastx, \n                             tblastn or t\
6132 blastx\n  -D, --database    : str  : database to s\
6133 earch\n  seqFile           : file : query sequence\
6134  data file (\"-\" for STDIN)\n\n[Optional]\n\n  -m\
6135 , --matrix          : str  : scoring matrix\n  -E, --ex\
6136 p           : real : 0<E<= 1000. Statistical significanc\
6137 e threshold\n                             for repo\
6138 rting database sequence matches.\n  -e, --echofilt\
6139 er  :      : display the filtered query sequence i\
6140 n the output\n  -f, --filter        : str  : activate\
6141 s filtering of the query sequence\n  -b, --alignme\
6142 nts  : int  : number of alignments to be reported\\
6143 n  -s, --scores     : int  : number of scores to b\
6144 e reported\n  -S, --sensitivity : str  :\n  -t, --\
6145 sort        : str  :\n  -T, --stats       : str  :\n \
6146  -d, --strand      : str  : DNA strand to search w\
6147 ith in DNA vs. DNA searches \n  -c, --topcombon   \
6148 :      :\n\n[General]   \n\n  -h, --help       :    \
6149   : prints this help text\n  -a, --async      :   \
6150    : forces to make an asynchronous query\n      -\
6151 -status     :      : poll for the status of a job\\
6152 n      --polljob    :      : poll for the results \
6153 of a job\n  -j, --jobid      : str  : jobid that w\
6154 as returned when an asynchronous job \n           \
6155                  was submitted.\n  -O, --outfile  \
6156   : str  : name of the file results should be writ\
6157 ten to \n                            (default is b\
6158 ased on the jobid; \"-\" for STDOUT)\n  -o, --outf\
6159 ormat  : str  : txt or xml output (no file is writ\
6160 ten)\n      --trace        :      : show SOAP messages\
6161  being interchanged \n\nSynchronous job:\n\n  The \
6162 results/errors are returned as soon as the job is \
6163 finished.\n  Usage: $scriptName --email <your\\@em\
6164 ail> [options...] seqFile\n  Returns: saves the re\
6165 sults to disk\n\nAsynchronous job:\n\n  Use this i\
6166 f you want to retrieve the results at a later time\
6167 . The results \n  are stored for up to 24 hours. \\
6168 n  The asynchronous submission mode is recommended\
6169  when users are submitting \n  batch jobs or large\
6170  database searches      \n  Usage: $scriptName --async \
6171 --email <your\\@email> [options...] seqFile\n  Ret\
6172 urns : jobid\n\n  Use the jobid to query for the s\
6173 tatus of the job. \n  Usage: $scriptName --status \
6174 --jobid <jobId>\n  Returns : string indicating the\
6175  status of the job:\n    DONE - job has finished\n\
6176     RUNNING - job is running\n    NOT_FOUND - job \
6177 cannot be found\n    ERROR - the jobs has encounte\
6178 red an error\n\n  When done, use the jobid to retr\
6179 ieve the status of the job. \n  Usage: $scriptName\
6180  --polljob --jobid <jobId> [--outfile string]\n  R\
6181 eturns: saves the results to disk\n\n[Help]\n\nFor\
6182  more detailed help information refer to \nhttp://\
6183 www.ebi.ac.uk/blast2/WU-Blast2_Help_frame.html\n \\
6184 nEOF\n;\n}\n","\nmy $WSDL = 'http://www.ebi.ac.uk/\
6185 Tools/webservices/wsdl/WSBlastpgp.wsdl';\n\nuse SO\
6186 AP::Lite;\nuse Getopt::Long qw(:config no_ignore_c\
6187 ase bundling);\nuse File::Basename;\n\nmy $checkIn\
6188 terval = 15;\n\nmy %params=(\n      'async' => '1',\
6189  # Use async mode and simulate sync mode in client\
6190 \n          );\nGetOptions(\n    \"mode=s\"           =\
6191 > \\$params{mode}, # Search mode: PSI-Blast or PHI\
6192 -Blast\n    \"database|d=s\"     => \\$params{data\
6193 base}, # Database to search\n    \"matrix|M=s\"   \
6194     => \\$params{matrix},# Scoring maxtrix\n    \"\
6195 exp|e=f\"          => \\$params{exp}, # E-value\n \
6196    \"expmulti|h=f\"     => \\$params{expmulti}, # \
6197 E-value\n    \"filter|F=s\"       => \\$params{fil\
6198 ter}, # Low complexity filter\n    \"dropoff|X=i\"\
6199       => \\$params{dropoff}, # Dropoff score\n    \
6200 \"finaldropoff|Z=i\" => \\$params{finaldropoff}, #\
6201  Final dropoff score\n    \"scores|v=i\"       => \
6202 \\$params{scores}, # Max number of scores\n    \"a\
6203 lign=i\"          => \\$params{align}, # Alignment\
6204  view\n    \"startregion|S=i\"  => \\$params{start\
6205 region}, # Start of region in query\n    \"endregi\
6206 on|H=i\"    => \\$params{endregion}, # End of regi\
6207 on in query\n    \"maxpasses|j=i\"    => \\$params\
6208 {maxpasses}, # Number of PSI iterations\n    \"ope\
6209 ngap|G=i\"      => \\$params{opengap}, # Gap open \
6210 penalty\n    \"extendgap|E=i\"    => \\$params{ext\
6211 endgap}, # Gap extension penalty\n    \"pattern=s\\
6212 "        => \\$params{pattern}, # PHI-BLAST patter\
6213 n\n    \"usagemode|p=s\"    => \\$params{usagemode\
6214 }, # PHI-BLAST program\n    \"appxml=s\"         =\
6215 > \\$params{appxml}, # Application XML\n    \"sequ\
6216 ence=s\"       => \\$sequence, # Query sequence\n \
6217    \"help\"            => \\$help, # Usage info\n    \\
6218 "polljob\"             => \\$polljob, # Get results\n  \
6219   \"status\"           => \\$status, # Get status\n  \
6220   \"ids\"              => \\$ids, # Get ids from r\
6221 esult\n    \"jobid=s\"          => \\$jobid, # Job\
6222 Id\n    \"outfile=s\"        => \\$outfile, # Outp\
6223 ut filename\n    \"outformat|o=s\"    => \\$outfor\
6224 mat, # Output file format\n    \"async|a\"             \
6225 => \\$async, # Async submission\n    \"email=s\"  \
6226         => \\$params{email}, # User e-mail address\
6227 \n    \"trace\"            => \\$trace, # Show SOA\
6228 P messages\n    );\n\nmy $scriptName = basename($0\
6229 , ());\nif($help) {\n    &usage();\n    exit(0);\n\
6230 }\n\nif ($trace){\n    print \"Tracing active\\n\"\
6231 ;\n    SOAP::Lite->import(+trace => 'debug');\n}\n\
6232 \nmy $soap = SOAP::Lite\n    ->service($WSDL)\n   \
6233  ->on_fault(sub {\n        my $soap = shift;\n    \
6234     my $res = shift;\n        # Throw an exception\
6235  for all faults\n        if(ref($res) eq '') {\n  \
6236           die($res);\n        } else {\n          \
6237   die($res->faultstring);\n        }\n        retu\
6238 rn new SOAP::SOM;\n    }\n               );\n\nif(\
6239  !($polljob || $status || $ids) &&\n    !( (define\
6240 d($ARGV[0]) && -f $ARGV[0]) || defined($sequence) \
6241 )\n    ) {\n    print STDERR 'Error: bad option co\
6242 mbination', \"\\n\";\n    &usage();\n    exit(1);\\
6243 n}\nelsif($polljob && defined($jobid)) {\n    prin\
6244 t \"Getting results for job $jobid\\n\";\n    getR\
6245 esults($jobid);\n}\nelsif($status && defined($jobi\
6246 d)) {\n    print STDERR \"Getting status for job $\
6247 jobid\\n\";\n    my $result = $soap->checkStatus($\
6248 jobid);\n    print STDOUT $result, \"\\n\";\n    i\
6249 f($result eq 'DONE') {\n        print STDERR \"To get res\
6250 ults: $scriptName --polljob --jobid $jobid\\n\";\n\
6251     }\n}  \nelsif($ids && defined($jobid)) {\n    \
6252 print STDERR \"Getting ids from job $jobid\\n\";\n\
6253     getIds($jobid);\n}\nelse {\n    if(-f $ARGV[0]\
6254 ) {     \n      $content={type=>'sequence', content=>read_f\
6255 ile($ARGV[0])}; \n    }\n    if($sequence) {    \n      if\
6256 (-f $sequence) {\n          $content={type=>'sequence',\
6257  content=>read_file($sequence)};        \n      } else {\n         \
6258  $content={type=>'sequence', content=>$sequence};\\
6259 n       }\n    }\n    push @content, $content;\n\n    my\
6260  $jobid;\n    my $paramsData = SOAP::Data->name('p\
6261 arams')->type(map=>\\%params);\n    my $contentDat\
6262 a = SOAP::Data->name('content')->value(\\@content)\
6263 ;\n    # For SOAP::Lite 0.60 and earlier parameter\
6264 s are passed directly\n    if($SOAP::Lite::VERSION\
6265  eq '0.60' || $SOAP::Lite::VERSION =~ /0\\.[1-5]/)\
6266  {\n        $jobid = $soap->runBlastpgp($paramsDat\
6267 a, $contentData);\n    }\n    # For SOAP::Lite 0.6\
6268 9 and later parameter handling is different, so pa\
6269 ss\n    # undef's for templated params, and then p\
6270 ass the formatted args.\n    else {\n        $jobi\
6271 d = $soap->runBlastpgp(undef, undef,\n                              $par\
6272 amsData, $contentData);\n    }\n\n    if (defined(\
6273 $async)) {\n    print STDOUT $jobid, \"\\n\";\n      \
6274   print STDERR \"To check status: $scriptName --st\
6275 atus --jobid $jobid\\n\";\n    } else { # Synchron\
6276 ous mode\n        print STDERR \"JobId: $jobid\\n\\
6277 ";\n        sleep 1;\n        getResults($jobid);\\
6278 n    }\n}\n\nsub getIds($) {\n    $jobid = shift;\\
6279 n    my $results = $soap->getIds($jobid);\n    for\
6280  $result (@$results){\n print \"$result\\n\";\n   \
6281  }\n}\n\nsub clientPoll($) {\n    my $jobid = shif\
6282 t;\n    my $result = 'PENDING';\n    # Check statu\
6283 s and wait if not finished\n    #print STDERR \"Ch\
6284 ecking status: $jobid\\n\";\n    while($result eq \
6285 'RUNNING' || $result eq 'PENDING') {\n        $res\
6286 ult = $soap->checkStatus($jobid);\n        print S\
6287 TDERR \"$result\\n\";\n        if($result eq 'RUNN\
6288 ING' || $result eq 'PENDING') {\n            # Wai\
6289 t before polling again.\n            sleep $checkI\
6290 nterval;\n        }\n    }\n}\n\nsub getResults($)\
6291  {\n    $jobid = shift;\n    # Check status, and w\
6292 ait if not finished\n    clientPoll($jobid);\n    \
6293 # Use JobId if output file name is not defined\n  \
6294   unless(defined($outfile)) {\n        $outfile=$j\
6295 obid;\n    }\n    # Get list of data types\n    my\
6296  $resultTypes = $soap->getResults($jobid);\n    # \
6297 Get the data and write it to a file\n    if(define\
6298 d($outformat)) { # Specified data type\n        my\
6299  $selResultType;\n        foreach my $resultType (\
6300 @$resultTypes) {\n            if($resultType->{typ\
6301 e} eq $outformat) {\n                $selResultTyp\
6302 e = $resultType;\n            }\n        }\n      \
6303   $res=$soap->poll($jobid, $selResultType->{type})\
6304 ;\n        write_file($outfile.'.'.$selResultType-\
6305 >{ext}, $res);\n    } else { # Data types availabl\
6306 e\n        # Write a file for each output type\n  \
6307       for my $resultType (@$resultTypes){\n       \
6308      #print \"Getting $resultType->{type}\\n\";\n \
6309            $res=$soap->poll($jobid, $resultType->{\
6310 type});\n            write_file($outfile.'.'.$resu\
6311 ltType->{ext}, $res);\n        }\n    }\n}\n\nsub \
6312 read_file($) {\n    my $filename = shift;\n    ope\
6313 n(FILE, $filename);\n    my $content;\n    my $buf\
6314 fer;\n    while(sysread(FILE, $buffer, 1024)) {\n       \
6315 $content.= $buffer;\n    }\n    close(FILE);  \n  \
6316   return $content;\n}\n\nsub write_file($$) {\n   \
6317  my ($tmp,$entity) = @_;\n    print STDERR \"Creat\
6318 ing result file: \".$tmp.\"\\n\";\n    unless(open\
6319  (FILE, \">$tmp\")) {\n return 0;\n    }\n    sysw\
6320 rite(FILE, $entity);\n    close (FILE);\n    retur\
6321 n 1;\n}\n\nsub usage {\n    print STDERR <<EOF\nBl\
6322 astpgp\n========\n   \nThe blastpgp program implem\
6323 ents the PSI-BLAST and PHI-BLAST variations\nof NC\
6324 BI BLAST.\n\nFor more detailed help information re\
6325 fer to\nhttp://www.ebi.ac.uk/blastpgp/blastpsi_hel\
6326 p_frame.html\n \nBlastpgp specific options:\n\n[Re\
6327 quired]\n\n      --mode            : str  : search\
6328  mode to use: PSI-Blast or PHI-Blast\n  -d, --data\
6329 base        : str  : protein database to search\n \
6330  seqFile               : file : query sequence\n\n\
6331 [Optional]\n\n  -M, --matrix          : str  : sco\
6332 ring matrix\n  -e, --exp             : real : Expe\
6333 ctation value\n  -h, --expmulti        : real : th\
6334 reshold (multipass model)\n  -F, --filter         \
6335  : str  : filter query sequence with SEG [T,F]\n  \
6336 -m, --align           : int  : alignment view opti\
6337 on:\n                                 0 - pairwise\
6338 , 1 - M/S identities,\n                           \
6339       2 - M/S non-identities, 3 - Flat identities,\
6340 \n                                 4 - Flat non-id\
6341 entities\n  -G, --opengap         : int  : cost to\
6342  open a gap\n  -E, --extendgap       : int  : cost\
6343  to extend a gap\n  -g, --gapalign        : str  :\
6344  Gapped [T,F]\n  -v, --scores          : int  : nu\
6345 mber of scores to be reported\n  -j, --maxpasses  \
6346      : int  : number of iterations\n  -X, --dropof\
6347 f         : int  : Dropoff score\n  -Z, --finaldro\
6348 poff    : int  : Dropoff for final alignment\n  -S\
6349 , --startregion     : int  : Start of required reg\
6350 ion in query\n  -H, --endregion       : int  : End\
6351  of required region in query\n  -k, --pattern     \
6352     : str  : Hit File (PHI-BLAST only)\n  -p, --us\
6353 agemode       : str  : Program option (PHI-BLAST o\
6354 nly):\n                                 blastpgp, \
6355 patseedp, seedp\n\n[General]\n\n      --help      \
6356       :      : prints this help text\n  -a, --asyn\
6357 c           :      : forces to make an asynchronou\
6358 s query\n      --status          :      : poll for\
6359  the status of a job\n      --polljob         :   \
6360    : poll for the results of a job\n      --jobid \
6361           : str  : jobid of an asynchronous job\n \
6362      --ids             :      : get hit identifier\
6363 s for result \n  -O, --outfile         : str  : na\
6364 me of the file results should be written to\n     \
6365                             (default is based on t\
6366 he jobid)\n  -o, --outformat       : str  : txt or\
6367  xml output (no file is written)\n      --trace   \
6368         :      : show SOAP messages being intercha\
6369 nged\n\nSynchronous job:\n\n  The results/errors a\
6370 re returned as soon as the job is finished.\n  Usa\
6371 ge: blastpgp.pl --email <your@email> [options...] \
6372 seqfile\n  Returns: saves the results to disk\n\nA\
6373 synchronous job:\n\n  Use this if you want to retr\
6374 ieve the results at a later time. The results\n  a\
6375 re stored for up to 24 hours.\n  The asynchronous \
6376 submission mode is recommended when users are subm\
6377 itting\n  batch jobs or large database searches\n \
6378  Usage: blastpgp.pl --email <your@email> --async [\
6379 options...] seqFile\n  Returns: jobid\n\n  Use the\
6380  jobid to query for the status of the job.\n  Usag\
6381 e: blastpgp.pl --status --jobid <jobId>\n  Returns\
6382 : string indicating the status of the job\n    DON\
6383 E - job has finished\n    RUNNING - job is running\
6384 \n    NOT_FOUND - job cannot be found\n    ERROR -\
6385  the jobs has encountered an error\n\n  When done,\
6386  use the jobid to retrieve the results of the job.\
6387 \n  Usage: blastpgp.pl --polljob --jobid <jobId> [\
6388 --outfile <fileName>]\n  Returns: saves the result\
6389 s to disk\nEOF\n;\n}\n","\n=head1 NAME\n\nncbiblas\
6390 t_lwp.pl\n\n=head1 DESCRIPTION\n\nNCBI BLAST REST \
6391 web service Perl client using L<LWP>.\n\nTested wi\
6392 th:\n\n=over\n\n=item *\nL<LWP> 5.79, L<XML::Simpl\
6393 e> 2.12 and Perl 5.8.3\n\n=item *\nL<LWP> 5.805, L\
6394 <XML::Simple> 2.14 and Perl 5.8.7\n\n=item *\nL<LW\
6395 P> 5.820, L<XML::Simple> 2.18 and Perl 5.10.0 (Ubu\
6396 ntu 9.04)\n\n=back\n\nFor further information see:\
6397 \n\n=over\n\n=item *\nL<http://www.ebi.ac.uk/Tools\
6398 /webservices/services/sss/ncbi_blast_rest>\n\n=ite\
6399 m *\nL<http://www.ebi.ac.uk/Tools/webservices/tuto\
6400 rials/perl>\n\n=back\n\n=head1 VERSION\n\n$Id: ncb\
6401 iblast_lwp.pl 1317 2009-09-03 15:44:11Z hpm $\n\n=\
6402 cut\n\nuse strict;\nuse warnings;\n\nuse English;\\
6403 nuse LWP;\nuse XML::Simple;\nuse Getopt::Long qw(:\
6404 config no_ignore_case bundling);\nuse File::Basena\
6405 me;\nuse Data::Dumper;\n\nmy $baseUrl = 'http://ww\
6406 w.ebi.ac.uk/Tools/services/rest/ncbiblast';\n\nmy \
6407 $checkInterval = 3;\n\nmy $outputLevel = 1;\n\nmy \
6408 $numOpts = scalar(@ARGV);\nmy %params = ( 'debugLe\
6409 vel' => 0 );\n\nmy %tool_params = ();\nGetOptions(\
6410 \n\n    # Tool specific options\n       'program|p=s'  => \\
6411 \$tool_params{'program'},   # blastp, blastn, blas\
6412 tx, etc.\n      'database|D=s' => \\$params{'database'}\
6413 ,       # Database(s) to search\n       'matrix|m=s'   =\
6414 > \\$tool_params{'matrix'},    # Scoring martix to\
6415  use\n  'exp|E=f'      => \\$tool_params{'exp'},   \
6416     # E-value threshold\n       'filter|f=s'   => \\$too\
6417 l_params{'filter'},    # Low complexity filter\n        '\
6418 align|A=i'    => \\$tool_params{'align'},     # Pa\
6419 irwise alignment format\n       'scores|s=i'   => \\$too\
6420 l_params{'scores'},    # Number of scores\n     'align\
6421 ments|n=i' => \\$tool_params{'alignments'},   # Nu\
6422 mber of alignments\n    'dropoff|d=i'    => \\$tool_p\
6423 arams{'dropoff'},      # Dropoff score\n        'match_sc\
6424 ores=s' => \\$tool_params{'match_scores'}, # Match\
6425 /missmatch scores\n     'match|u=i'      => \\$params{\
6426 'match'},             # Match score\n   'mismatch|v=\
6427 i'   => \\$params{'mismatch'},          # Mismatch\
6428  score\n        'gapopen|o=i'    => \\$tool_params{'gapop\
6429 en'},      # Open gap penalty\n 'gapext|x=i'     =\
6430 > \\$tool_params{'gapext'},       # Gap extension \
6431 penality\n      'gapalign|g'     => \\$tool_params{'gap\
6432 align'},     # Optimise gap alignments\n        'stype=s'\
6433  => \\$tool_params{'stype'},    # Sequence type\n       \
6434 'seqrange=s' => \\$tool_params{'seqrange'},    # Q\
6435 uery subsequence\n      'sequence=s' => \\$params{'sequ\
6436 ence'},         # Query sequence\n      'multifasta' =>\
6437  \\$params{'multifasta'},       # Multiple fasta i\
6438 nput\n\n        # Compatability options, old command-line\
6439 \n      'numal|n=i'     => \\$params{'numal'},        #\
6440  Number of alignments\n 'opengap|o=i'   => \\$para\
6441 ms{'opengap'},      # Open gap penalty\n        'extendga\
6442 p|x=i' => \\$params{'extendgap'},    # Gap extensi\
6443 on penality\n   \n      # Generic options\n     'email=s'    \
6444    => \\$params{'email'},          # User e-mail a\
6445 ddress\n        'title=s'       => \\$params{'title'},   \
6446        # Job title\n    'outfile=s'     => \\$params{\
6447 'outfile'},        # Output file name\n 'outformat\
6448 =s'   => \\$params{'outformat'},      # Output fil\
6449 e type\n        'jobid=s'       => \\$params{'jobid'},   \
6450        # JobId\n        'help|h'        => \\$params{'hel\
6451 p'},           # Usage help\n   'async'         => \\
6452 \$params{'async'},          # Asynchronous submiss\
6453 ion\n   'polljob'       => \\$params{'polljob'},    \
6454     # Get results\n     'resultTypes'   => \\$params{'\
6455 resultTypes'},    # Get result types\n  'status'   \
6456      => \\$params{'status'},         # Get status\\
6457 n       'params'        => \\$params{'params'},         \
6458 # List input parameters\n       'paramDetail=s' => \\$pa\
6459 rams{'paramDetail'},    # Get details for paramete\
6460 r\n     'quiet'         => \\$params{'quiet'},        \
6461   # Decrease output level\n     'verbose'       => \\$\
6462 params{'verbose'},        # Increase output level\\
6463 n       'debugLevel=i'  => \\$params{'debugLevel'},     \
6464 # Debug output level\n  'baseUrl=s'     => \\$baseU\
6465 rl,                  # Base URL for service.\n);\n\
6466 if ( $params{'verbose'} ) { $outputLevel++ }\nif (\
6467  $params{'$quiet'} )  { $outputLevel-- }\n\n&print\
6468 _debug_message( 'MAIN', 'LWP::VERSION: ' . $LWP::V\
6469 ERSION,\n       1 );\n\n&print_debug_message( 'MAIN', \"\
6470 params:\\n\" . Dumper( \\%params ),           11 )\
6471 ;\n&print_debug_message( 'MAIN', \"tool_params:\\n\
6472 \" . Dumper( \\%tool_params ), 11 );\n\nmy $script\
6473 Name = basename( $0, () );\n\nif ( $params{'help'}\
6474  || $numOpts == 0 ) {\n &usage();\n     exit(0);\n}\n\\
6475 n&print_debug_message( 'MAIN', 'baseUrl: ' . $base\
6476 Url, 1 );\n\nif (\n     !(\n               $params{'polljob'}\n \
6477         || $params{'resultTypes'}\n             || $params{'status'}\
6478 \n              || $params{'params'}\n          || $params{'paramDetai\
6479 l'}\n   )\n     && !( defined( $ARGV[0] ) || defined( $p\
6480 arams{'sequence'} ) )\n  )\n{\n\n       # Bad argument c\
6481 ombination, so print error message and usage\n  pri\
6482 nt STDERR 'Error: bad option combination', \"\\n\"\
6483 ;\n     &usage();\n     exit(1);\n}\n\nelsif ( $params{'pa\
6484 rams'} ) {\n    &print_tool_params();\n}\n\nelsif ( $\
6485 params{'paramDetail'} ) {\n     &print_param_details( \
6486 $params{'paramDetail'} );\n}\n\nelsif ( $params{'s\
6487 tatus'} && defined( $params{'jobid'} ) ) {\n    &prin\
6488 t_job_status( $params{'jobid'} );\n}\n\nelsif ( $p\
6489 arams{'resultTypes'} && defined( $params{'jobid'} \
6490 ) ) {\n &print_result_types( $params{'jobid'} );\n\
6491 }\n\nelsif ( $params{'polljob'} && defined( $param\
6492 s{'jobid'} ) ) {\n      &get_results( $params{'jobid'} \
6493 );\n}\n\nelse {\n\n     # Multiple input sequence mode\
6494 , assume fasta format.\n        if ( $params{'multifasta'\
6495 } ) {\n         &multi_submit_job();\n  }\n\n   # Entry iden\
6496 tifier list file.\n     elsif (( defined( $params{'seq\
6497 uence'} ) && $params{'sequence'} =~ m/^\\@/ )\n         |\
6498 | ( defined( $ARGV[0] ) && $ARGV[0] =~ m/^\\@/ ) )\
6499 \n      {\n             my $list_filename = $params{'sequence'} ||\
6500  $ARGV[0];\n            $list_filename =~ s/^\\@//;\n           &list\
6501 _file_submit_job($list_filename);\n     }\n\n   # Defaul\
6502 t: single sequence/identifier.\n        else {\n\n              # Loa\
6503 d the sequence data and submit.\n               &submit_job( &l\
6504 oad_data() );\n }\n}\n\n=head1 FUNCTIONS\n\n=cut\n\
6505 \n\n=head2 rest_request()\n\nPerform a REST reques\
6506 t.\n\n  my $response_str = &rest_request($url);\n\\
6507 n=cut\n\nsub rest_request {\n   print_debug_message(\
6508  'rest_request', 'Begin', 11 );\n       my $requestUrl =\
6509  shift;\n       print_debug_message( 'rest_request', 'UR\
6510 L: ' . $requestUrl, 11 );\n\n   # Create a user agen\
6511 t\n     my $ua = LWP::UserAgent->new();\n       '$Revision: \
6512 1317 $' =~ m/(\\d+)/;\n $ua->agent(\"EBI-Sample-Cl\
6513 ient/$1 ($scriptName; $OSNAME) \" . $ua->agent());\
6514 \n      $ua->env_proxy;\n\n     # Perform the request\n my \
6515 $response = $ua->get($requestUrl);\n    print_debug_m\
6516 essage( 'rest_request', 'HTTP status: ' . $respons\
6517 e->code,\n              11 );\n\n       # Check for HTTP error codes\
6518 \n      if ( $response->is_error ) {\n          $response->cont\
6519 ent() =~ m/<h1>([^<]+)<\\/h1>/;\n               die 'http statu\
6520 s: ' . $response->code . ' ' . $response->message \
6521 . '  ' . $1;\n  }\n     print_debug_message( 'rest_requ\
6522 est', 'End', 11 );\n\n  # Return the response data\\
6523 n       return $response->content();\n}\n\n=head2 rest_g\
6524 et_parameters()\n\nGet list of tool parameter name\
6525 s.\n\n  my (@param_list) = &rest_get_parameters();\
6526 \n\n=cut\n\nsub rest_get_parameters {\n print_debu\
6527 g_message( 'rest_get_parameters', 'Begin', 1 );\n       \
6528 my $url                = $baseUrl . '/parameters/'\
6529 ;\n     my $param_list_xml_str = rest_request($url);\n\
6530         my $param_list_xml     = XMLin($param_list_xml_st\
6531 r);\n   my (@param_list)       = @{ $param_list_xml-\
6532 >{'id'} };\n    print_debug_message( 'rest_get_parame\
6533 ters', 'End', 1 );\n    return (@param_list);\n}\n\n=\
6534 head2 rest_get_parameter_details()\n\nGet details \
6535 of a tool parameter.\n\n  my $paramDetail = &rest_\
6536 get_parameter_details($param_name);\n\n=cut\n\nsub\
6537  rest_get_parameter_details {\n print_debug_messag\
6538 e( 'rest_get_parameter_details', 'Begin', 1 );\n        m\
6539 y $parameterId = shift;\n       print_debug_message( 're\
6540 st_get_parameter_details',\n            'parameterId: ' . $p\
6541 arameterId, 1 );\n      my $url                  = $bas\
6542 eUrl . '/parameterdetails/' . $parameterId;\n   my $\
6543 param_detail_xml_str = rest_request($url);\n    my $p\
6544 aram_detail_xml     = XMLin($param_detail_xml_str)\
6545 ;\n     print_debug_message( 'rest_get_parameter_detai\
6546 ls', 'End', 1 );\n      return ($param_detail_xml);\n}\\
6547 n\n=head2 rest_run()\n\nSubmit a job.\n\n  my $job\
6548 _id = &rest_run($email, $title, \\%params );\n\n=c\
6549 ut\n\nsub rest_run {\n  print_debug_message( 'rest_\
6550 run', 'Begin', 1 );\n   my $email  = shift;\n   my $ti\
6551 tle  = shift;\n my $params = shift;\n   print_debug_\
6552 message( 'rest_run', 'email: ' . $email, 1 );\n if\
6553  ( defined($title) ) {\n                print_debug_message( 're\
6554 st_run', 'title: ' . $title, 1 );\n     }\n     print_debu\
6555 g_message( 'rest_run', 'params: ' . Dumper($params\
6556 ), 1 );\n\n     # User agent to perform http requests\\
6557 n       my $ua = LWP::UserAgent->new();\n       $ua->env_proxy\
6558 ;\n\n   # Clean up parameters\n my (%tmp_params) = %\
6559 {$params};\n    $tmp_params{'email'} = $email;\n        $tmp\
6560 _params{'title'} = $title;\n    foreach my $param_nam\
6561 e ( keys(%tmp_params) ) {\n             if ( !defined( $tmp_p\
6562 arams{$param_name} ) ) {\n                      delete $tmp_params{$p\
6563 aram_name};\n           }\n     }\n\n   # Submit the job as a POS\
6564 T\n     my $url = $baseUrl . '/run';\n  my $response = \
6565 $ua->post( $url, \\%tmp_params );\n     print_debug_me\
6566 ssage( 'rest_run', 'HTTP status: ' . $response->co\
6567 de, 11 );\n     print_debug_message( 'rest_run',\n              'r\
6568 equest: ' . $response->request()->content(), 11 );\
6569 \n\n    # Check for HTTP error codes\n  if ( $response\
6570 ->is_error ) {\n                $response->content() =~ m/<h1>([\
6571 ^<]+)<\\/h1>/;\n                die 'http status: ' . $response-\
6572 >code . ' ' . $response->message . '  ' . $1;\n }\\
6573 n\n     # The job id is returned\n      my $job_id = $respo\
6574 nse->content();\n       print_debug_message( 'rest_run',\
6575  'End', 1 );\n  return $job_id;\n}\n\n=head2 rest_g\
6576 et_status()\n\nCheck the status of a job.\n\n  my \
6577 $status = &rest_get_status($job_id);\n\n=cut\n\nsu\
6578 b rest_get_status {\n   print_debug_message( 'rest_g\
6579 et_status', 'Begin', 1 );\n     my $job_id = shift;\n   \
6580 print_debug_message( 'rest_get_status', 'jobid: ' \
6581 . $job_id, 2 );\n       my $status_str = 'UNKNOWN';\n   my\
6582  $url        = $baseUrl . '/status/' . $job_id;\n       \
6583 $status_str = &rest_request($url);\n    print_debug_m\
6584 essage( 'rest_get_status', 'status_str: ' . $statu\
6585 s_str, 2 );\n   print_debug_message( 'rest_get_statu\
6586 s', 'End', 1 );\n       return $status_str;\n}\n\n=head2\
6587  rest_get_result_types()\n\nGet list of result typ\
6588 es for finished job.\n\n  my (@result_types) = &re\
6589 st_get_result_types($job_id);\n\n=cut\n\nsub rest_\
6590 get_result_types {\n    print_debug_message( 'rest_ge\
6591 t_result_types', 'Begin', 1 );\n        my $job_id = shif\
6592 t;\n    print_debug_message( 'rest_get_result_types',\
6593  'jobid: ' . $job_id, 2 );\n    my (@resultTypes);\n    \
6594 my $url                      = $baseUrl . '/result\
6595 types/' . $job_id;\n    my $result_type_list_xml_str \
6596 = &rest_request($url);\n        my $result_type_list_xml \
6597     = XMLin($result_type_list_xml_str);\n       (@result\
6598 Types) = @{ $result_type_list_xml->{'type'} };\n        p\
6599 rint_debug_message( 'rest_get_result_types',\n          sc\
6600 alar(@resultTypes) . ' result types', 2 );\n    print\
6601 _debug_message( 'rest_get_result_types', 'End', 1 \
6602 );\n    return (@resultTypes);\n}\n\n=head2 rest_get_\
6603 result()\n\nGet result data of a specified type fo\
6604 r a finished job.\n\n  my $result = rest_get_resul\
6605 t($job_id, $result_type);\n\n=cut\n\nsub rest_get_\
6606 result {\n      print_debug_message( 'rest_get_result',\
6607  'Begin', 1 );\n        my $job_id = shift;\n   my $type   \
6608 = shift;\n      print_debug_message( 'rest_get_result',\
6609  'jobid: ' . $job_id, 1 );\n    print_debug_message( \
6610 'rest_get_result', 'type: ' . $type,    1 );\n  my \
6611 $url    = $baseUrl . '/result/' . $job_id . '/' . \
6612 $type;\n        my $result = &rest_request($url);\n     print\
6613 _debug_message( 'rest_get_result', length($result)\
6614  . ' characters',\n             1 );\n  print_debug_message( '\
6615 rest_get_result', 'End', 1 );\n return $result;\n}\
6616 \n\n\n=head2 print_debug_message()\n\nPrint debug \
6617 message at specified debug level.\n\n  &print_debu\
6618 g_message($method_name, $message, $level);\n\n=cut\
6619 \n\nsub print_debug_message {\n my $function_name \
6620 = shift;\n      my $message       = shift;\n    my $level \
6621         = shift;\n      if ( $level <= $params{'debugLe\
6622 vel'} ) {\n             print STDERR '[', $function_name, '()\
6623 ] ', $message, \"\\n\";\n       }\n}\n\n=head2 print_too\
6624 l_params()\n\nPrint list of tool parameters.\n\n  \
6625 &print_tool_params();\n\n=cut\n\nsub print_tool_pa\
6626 rams {\n        print_debug_message( 'print_tool_params',\
6627  'Begin', 1 );\n        my (@param_list) = &rest_get_para\
6628 meters();\n     foreach my $param ( sort(@param_list) \
6629 ) {\n           print $param, \"\\n\";\n        }\n     print_debug_me\
6630 ssage( 'print_tool_params', 'End', 1 );\n}\n\n=hea\
6631 d2 print_param_details()\n\nPrint details of a too\
6632 l parameter.\n\n  &print_param_details($param_name\
6633 );\n\n=cut\n\nsub print_param_details {\n       print_de\
6634 bug_message( 'print_param_details', 'Begin', 1 );\\
6635 n       my $paramName = shift;\n        print_debug_message( 'p\
6636 rint_param_details', 'paramName: ' . $paramName, 2\
6637  );\n   my $paramDetail = &rest_get_parameter_detail\
6638 s($paramName);\n        print $paramDetail->{'name'}, \"\\
6639 \t\", $paramDetail->{'type'}, \"\\n\";\n        print $pa\
6640 ramDetail->{'description'}, \"\\n\";\n  foreach my \
6641 $value ( @{ $paramDetail->{'values'}->{'value'} } \
6642 ) {\n           print $value->{'value'};\n              if ( $value->{'\
6643 defaultValue'} eq 'true' ) {\n                  print \"\\t\", 'd\
6644 efault';\n              }\n             print \"\\n\";\n                print \"\\t\", \
6645 $value->{'label'}, \"\\n\";\n   }\n     print_debug_mess\
6646 age( 'print_param_details', 'End', 1 );\n}\n\n=hea\
6647 d2 print_job_status()\n\nPrint status of a job.\n\\
6648 n  &print_job_status($job_id);\n\n=cut\n\nsub prin\
6649 t_job_status {\n        print_debug_message( 'print_job_s\
6650 tatus', 'Begin', 1 );\n my $jobid = shift;\n    print\
6651 _debug_message( 'print_job_status', 'jobid: ' . $j\
6652 obid, 1 );\n    if ( $outputLevel > 0 ) {\n             print ST\
6653 DERR 'Getting status for job ', $jobid, \"\\n\";\n\
6654         }\n     my $result = &rest_get_status($jobid);\n        prin\
6655 t \"$result\\n\";\n     if ( $result eq 'FINISHED' && \
6656 $outputLevel > 0 ) {\n          print STDERR \"To get resu\
6657 lts: $scriptName --polljob --jobid \" . $jobid\n                \
6658   . \"\\n\";\n  }\n     print_debug_message( 'print_job\
6659 _status', 'End', 1 );\n}\n\n=head2 print_result_ty\
6660 pes()\n\nPrint available result types for a job.\n\
6661 \n  &print_result_types($job_id);\n\n=cut\n\nsub p\
6662 rint_result_types {\n   print_debug_message( 'result\
6663 _types', 'Begin', 1 );\n        my $jobid = shift;\n    prin\
6664 t_debug_message( 'result_types', 'jobid: ' . $jobi\
6665 d, 1 );\n       if ( $outputLevel > 0 ) {\n             print STDER\
6666 R 'Getting result types for job ', $jobid, \"\\n\"\
6667 ;\n     }\n     my $status = &rest_get_status($jobid);\n        i\
6668 f ( $status eq 'PENDING' || $status eq 'RUNNING' )\
6669  {\n            print STDERR 'Error: Job status is ', $statu\
6670 s,\n              '. To get result types the job must be fin\
6671 ished.', \"\\n\";\n     }\n     else {\n                my (@resultTypes\
6672 ) = &rest_get_result_types($jobid);\n           if ( $outpu\
6673 tLevel > 0 ) {\n                        print STDOUT 'Available result \
6674 types:', \"\\n\";\n             }\n             foreach my $resultType (\
6675 @resultTypes) {\n                       print STDOUT $resultType->{'id\
6676 entifier'}, \"\\n\";\n                  if ( defined( $resultType\
6677 ->{'label'} ) ) {\n                             print STDOUT \"\\t\", $resu\
6678 ltType->{'label'}, \"\\n\";\n                   }\n                     if ( defined\
6679 ( $resultType->{'description'} ) ) {\n                          print ST\
6680 DOUT \"\\t\", $resultType->{'description'}, \"\\n\\
6681 ";\n                    }\n                     if ( defined( $resultType->{'mediaTyp\
6682 e'} ) ) {\n                             print STDOUT \"\\t\", $resultType->\
6683 {'mediaType'}, \"\\n\";\n                       }\n                     if ( defined( $r\
6684 esultType->{'fileSuffix'} ) ) {\n                               print STDOUT \
6685 \"\\t\", $resultType->{'fileSuffix'}, \"\\n\";\n                \
6686         }\n             }\n             if ( $status eq 'FINISHED' && $outputLe\
6687 vel > 0 ) {\n                   print STDERR \"\\n\", 'To get resu\
6688 lts:', \"\\n\",\n                         \"  $scriptName --polljob --\
6689 jobid \" . $params{'jobid'} . \"\\n\",\n                          \"  $\
6690 scriptName --polljob --outformat <type> --jobid \"\
6691 \n                        . $params{'jobid'} . \"\\n\";\n               }\n     }\n     pr\
6692 int_debug_message( 'result_types', 'End', 1 );\n}\\
6693 n\n=head2 submit_job()\n\nSubmit a job to the serv\
6694 ice.\n\n  &submit_job($seq);\n\n=cut\n\nsub submit\
6695 _job {\n        print_debug_message( 'submit_job', 'Begin\
6696 ', 1 );\n\n     # Set input sequence\n  $tool_params{'s\
6697 equence'} = shift;\n\n  # Load parameters\n     &load_p\
6698 arams();\n\n    # Submit the job\n      my $jobid = &rest_\
6699 run( $params{'email'}, $params{'title'}, \\%tool_p\
6700 arams );\n\n    # Simulate sync/async mode\n    if ( def\
6701 ined( $params{'async'} ) ) {\n          print STDOUT $jobi\
6702 d, \"\\n\";\n           if ( $outputLevel > 0 ) {\n                     print\
6703  STDERR\n                         \"To check status: $scriptName --sta\
6704 tus --jobid $jobid\\n\";\n              }\n     }\n     else {\n                if (\
6705  $outputLevel > 0 ) {\n                 print STDERR \"JobId: $j\
6706 obid\\n\";\n            }\n             sleep 1;\n              &get_results($jobid\
6707 );\n    }\n     print_debug_message( 'submit_job', 'End',\
6708  1 );\n}\n\n=head2 multi_submit_job()\n\nSubmit mu\
6709 ltiple jobs assuming input is a collection of fast\
6710 a formatted sequences.\n\n  &multi_submit_job();\n\
6711 \n=cut\n\nsub multi_submit_job {\n      print_debug_mes\
6712 sage( 'multi_submit_job', 'Begin', 1 );\n       my $jobI\
6713 dForFilename = 1;\n     $jobIdForFilename = 0 if ( def\
6714 ined( $params{'outfile'} ) );\n my (@filename_list\
6715 ) = ();\n\n     # Query sequence\n      if ( defined( $ARGV\
6716 [0] ) ) {    # Bare option\n            if ( -f $ARGV[0] || \
6717 $ARGV[0] eq '-' ) {    # File\n                 push( @filename_\
6718 list, $ARGV[0] );\n             }\n     }\n     if ( $params{'sequenc\
6719 e'} ) {                   # Via --sequence\n            if (\
6720  -f $params{'sequence'} || $params{'sequence'} eq \
6721 '-' ) {    # File\n                     push( @filename_list, $param\
6722 s{'sequence'} );\n              }\n     }\n\n   $/ = '>';\n     foreach \
6723 my $filename (@filename_list) {\n               open( my $INFIL\
6724 E, '<', $filename )\n             or die \"Error: unable to\
6725  open file $filename ($!)\";\n          while (<$INFILE>) \
6726 {\n                     my $seq = $_;\n                 $seq =~ s/>$//;\n                       if ( $\
6727 seq =~ m/(\\S+)/ ) {\n                          print STDERR \"Submittin\
6728 g job for: $1\\n\"\n                              if ( $outputLevel > 0 );\
6729 \n                              $seq = '>' . $seq;\n                            &print_debug_message\
6730 ( 'multi_submit_job', $seq, 11 );\n                             &submit_job\
6731 ($seq);\n                               $params{'outfile'} = undef if ( $jobI\
6732 dForFilename == 1 );\n                  }\n             }\n             close $INFILE;\\
6733 n       }\n     print_debug_message( 'multi_submit_job', 'En\
6734 d', 1 );\n}\n\n=head2 list_file_submit_job()\n\nSu\
6735 bmit multiple jobs using a file containing a list \
6736 of entry identifiers as \ninput.\n\n  &list_file_s\
6737 ubmit_job($list_filename)\n\n=cut\n\nsub list_file\
6738 _submit_job {\n my $filename         = shift;\n my\
6739  $jobIdForFilename = 1;\n       $jobIdForFilename = 0 if\
6740  ( defined( $params{'outfile'} ) );\n\n # Iterate \
6741 over identifiers, submitting each job\n open( my $\
6742 LISTFILE, '<', $filename )\n      or die 'Error: unab\
6743 le to open file ' . $filename . ' (' . $! . ')';\n\
6744         while (<$LISTFILE>) {\n         my $line = $_;\n                chomp(\
6745 $line);\n               if ( $line ne '' ) {\n                  &print_debug_m\
6746 essage( 'list_file_submit_job', 'line: ' . $line, \
6747 2 );\n                  if ( $line =~ m/\\w:\\w/ ) {    # Check t\
6748 his is an identifier\n                          print STDERR \"Submittin\
6749 g job for: $line\\n\"\n                           if ( $outputLevel > 0\
6750  );\n                           &submit_job($line);\n                   }\n                     else {\n                        \
6751         print STDERR\n\"Warning: line \\\"$line\\\" is no\
6752 t recognised as an identifier\\n\";\n                   }\n             }\n             \
6753 $params{'outfile'} = undef if ( $jobIdForFilename \
6754 == 1 );\n       }\n     close $LISTFILE;\n}\n\n=head2 load_d\
6755 ata()\n\nLoad sequence data from file or option sp\
6756 ecified on the command-line.\n\n  &load_data();\n\\
6757 n=cut\n\nsub load_data {\n      print_debug_message( 'l\
6758 oad_data', 'Begin', 1 );\n      my $retSeq;\n\n # Query\
6759  sequence\n     if ( defined( $ARGV[0] ) ) {    # Bare\
6760  option\n               if ( -f $ARGV[0] || $ARGV[0] eq '-' ) {\
6761     # File\n                    $retSeq = &read_file( $ARGV[0] );\n\
6762                 }\n             else {                                     \
6763 # DB:ID or sequence\n                   $retSeq = $ARGV[0];\n           }\n\
6764         }\n     if ( $params{'sequence'} ) {                 \
6765   # Via --sequence\n            if ( -f $params{'sequence'} \
6766 || $params{'sequence'} eq '-' ) {    # File\n                   $r\
6767 etSeq = &read_file( $params{'sequence'} );\n            }\n     \
6768         else {    # DB:ID or sequence\n                 $retSeq = $para\
6769 ms{'sequence'};\n               }\n     }\n     print_debug_message( 'l\
6770 oad_data', 'End', 1 );\n        return $retSeq;\n}\n\n=he\
6771 ad2 load_params()\n\nLoad job parameters from comm\
6772 and-line options.\n\n  &load_params();\n\n=cut\n\n\
6773 sub load_params {\n     print_debug_message( 'load_par\
6774 ams', 'Begin', 1 );\n\n # Database(s) to search\n       \
6775 my (@dbList) = split /[ ,]/, $params{'database'};\\
6776 n       $tool_params{'database'} = \\@dbList;\n\n       # Matc\
6777 h/missmatch\n   if ( $params{'match'} && $params{'mi\
6778 ssmatch'} ) {\n         $tool_params{'match_scores'} =\n        \
6779           $params{'match'} . ',' . $params{'missmatch'};\\
6780 n       }\n     \n      # Compatability options, old command-line\
6781 \n      if(!$tool_params{'alignments'} && $params{'numa\
6782 l'}) {\n                $tool_params{'alignments'} = $params{'nu\
6783 mal'};\n        }\n     if(!$tool_params{'gapopen'} && $param\
6784 s{'opengap'}) {\n               $tool_params{'gapopen'} = $para\
6785 ms{'opengap'};\n        }\n     if(!$tool_params{'gapext'} &&\
6786  $params{'extendgap'}) {\n              $tool_params{'gapext'}\
6787  = $params{'extendgap'};\n      }\n\n   print_debug_messa\
6788 ge( 'load_params', 'End', 1 );\n}\n\n=head2 client\
6789 _poll()\n\nClient-side job polling.\n\n  &client_p\
6790 oll($job_id);\n\n=cut\n\nsub client_poll {\n    print\
6791 _debug_message( 'client_poll', 'Begin', 1 );\n  my \
6792 $jobid  = shift;\n      my $status = 'PENDING';\n\n     my \
6793 $errorCount = 0;\n      while ($status eq 'RUNNING'\n           \
6794 || $status eq 'PENDING'\n               || ( $status eq 'ERROR'\
6795  && $errorCount < 2 ) )\n       {\n             $status = rest_get_\
6796 status($jobid);\n               print STDERR \"$status\\n\" if \
6797 ( $outputLevel > 0 );\n         if ( $status eq 'ERROR' )\
6798  {\n                    $errorCount++;\n                }\n             elsif ( $errorCount \
6799 > 0 ) {\n                       $errorCount--;\n                }\n             if (   $status \
6800 eq 'RUNNING'\n                  || $status eq 'PENDING'\n                       || $s\
6801 tatus eq 'ERROR' )\n            {\n\n                   # Wait before pollin\
6802 g again.\n                      sleep $checkInterval;\n         }\n     }\n     prin\
6803 t_debug_message( 'client_poll', 'End', 1 );\n   retu\
6804 rn $status;\n}\n\n=head2 get_results()\n\nGet the \
6805 results for a job identifier.\n\n  &get_results($j\
6806 ob_id);\n\n=cut\n\nsub get_results {\n  print_debug\
6807 _message( 'get_results', 'Begin', 1 );\n        my $jobid\
6808  = shift;\n     print_debug_message( 'get_results', 'j\
6809 obid: ' . $jobid, 1 );\n\n      # Verbose\n     if ( $outpu\
6810 tLevel > 1 ) {\n                print 'Getting results for job '\
6811 , $jobid, \"\\n\";\n    }\n\n   # Check status, and wai\
6812 t if not finished\n     client_poll($jobid);\n\n        # Use\
6813  JobId if output file name is not defined\n     unless\
6814  ( defined( $params{'outfile'} ) ) {\n          $params{'o\
6815 utfile'} = $jobid;\n    }\n\n   # Get list of data type\
6816 s\n     my (@resultTypes) = rest_get_result_types($job\
6817 id);\n\n        # Get the data and write it to a file\n i\
6818 f ( defined( $params{'outformat'} ) ) {    # Speci\
6819 fied data type\n                my $selResultType;\n            foreach my\
6820  $resultType (@resultTypes) {\n                 if ( $resultType\
6821 ->{'identifier'} eq $params{'outformat'} ) {\n                          \
6822 $selResultType = $resultType;\n                 }\n             }\n             if ( d\
6823 efined($selResultType) ) {\n                    my $result =\n                    \
6824 rest_get_result( $jobid, $selResultType->{'identif\
6825 ier'} );\n                      if ( $params{'outfile'} eq '-' ) {\n    \
6826                         write_file( $params{'outfile'}, $result );\n                    \
6827 }\n                     else {\n                                write_file(\n                                   $params{'outfi\
6828 le'} . '.'\n                                      . $selResultType->{'identifier'\
6829 } . '.'\n                                         . $selResultType->{'fileSuffix'},\\
6830 n                                       $result\n                               );\n                    }\n             }\n             else {\n                        die\
6831  'Error: unknown result format \"' . $params{'outf\
6832 ormat'} . '\"';\n               }\n     }\n     else {    # Data types \
6833 available\n                   # Write a file for each output \
6834 type\n          for my $resultType (@resultTypes) {\n                   if\
6835  ( $outputLevel > 1 ) {\n                               print STDERR 'Getting\
6836  ', $resultType->{'identifier'}, \"\\n\";\n                     }\n     \
6837                 my $result = rest_get_result( $jobid, $resultTyp\
6838 e->{'identifier'} );\n                  if ( $params{'outfile'} e\
6839 q '-' ) {\n                             write_file( $params{'outfile'}, $re\
6840 sult );\n                       }\n                     else {\n                                write_file(\n                                   $p\
6841 arams{'outfile'} . '.'\n                                          . $resultType->{'id\
6842 entifier'} . '.'\n                                        . $resultType->{'fileSuff\
6843 ix'},\n                                 $result\n                               );\n                    }\n             }\n     }\n     print\
6844 _debug_message( 'get_results', 'End', 1 );\n}\n\n=\
6845 head2 read_file()\n\nRead a file into a scalar. Th\
6846 e special filename '-' can be used to read from \n\
6847 standard input (STDIN).\n\n  my $data = &read_file\
6848 ($filename);\n\n=cut\n\nsub read_file {\n       print_de\
6849 bug_message( 'read_file', 'Begin', 1 );\n       my $file\
6850 name = shift;\n print_debug_message( 'read_file', \
6851 'filename: ' . $filename, 2 );\n        my ( $content, $b\
6852 uffer );\n      if ( $filename eq '-' ) {\n             while ( sy\
6853 sread( STDIN, $buffer, 1024 ) ) {\n                     $content .= \
6854 $buffer;\n              }\n     }\n     else {    # File\n              open( my $\
6855 FILE, '<', $filename )\n                  or die \"Error: unable\
6856  to open input file $filename ($!)\";\n         while ( s\
6857 ysread( $FILE, $buffer, 1024 ) ) {\n                    $content .=\
6858  $buffer;\n             }\n             close($FILE);\n }\n     print_debug_\
6859 message( 'read_file', 'End', 1 );\n     return $conten\
6860 t;\n}\n\n=head2 write_file()\n\nWrite data to a fi\
6861 le. The special filename '-' can be used to write \
6862 to \nstandard output (STDOUT).\n\n  &write_file($f\
6863 ilename, $data);\n\n=cut\n\nsub write_file {\n  pri\
6864 nt_debug_message( 'write_file', 'Begin', 1 );\n my\
6865  ( $filename, $data ) = @_;\n   print_debug_message(\
6866  'write_file', 'filename: ' . $filename, 2 );\n if\
6867  ( $outputLevel > 0 ) {\n               print STDERR 'Creating \
6868 result file: ' . $filename . \"\\n\";\n }\n     if ( $\
6869 filename eq '-' ) {\n           print STDOUT $data;\n   }\n     e\
6870 lse {\n         open( my $FILE, '>', $filename )\n                or \
6871 die \"Error: unable to open output file $filename \
6872 ($!)\";\n               syswrite( $FILE, $data );\n             close($FIL\
6873 E);\n   }\n     print_debug_message( 'write_file', 'End'\
6874 , 1 );\n}\n\n=head2 usage()\n\nPrint program usage\
6875  message.\n\n  &usage();\n\n=cut\n\nsub usage {\n       \
6876 print STDERR <<EOF\nNCBI BLAST\n==========\n   \nR\
6877 apid sequence database search programs utilizing t\
6878 he BLAST algorithm\n    \n[Required]\n\n  -p, --pr\
6879 ogram      : str  : BLAST program to use, see --pa\
6880 ramDetail program\n  -D, --database     : str  : d\
6881 atabase(s) to search, space separated. See\n      \
6882                         --paramDetail database\n  \
6883     --stype        : str  : query sequence type, s\
6884 ee --paramDetail stype\n  seqFile            : fil\
6885 e : query sequence (\"-\" for STDIN, \\@filename f\
6886 or\n                              identifier list \
6887 file)\n\n[Optional]\n\n  -m, --matrix       : str \
6888  : scoring matrix, see --paramDetail matrix\n  -e,\
6889  --exp          : real : 0<E<= 1000. Statistical s\
6890 ignificance threshold \n                          \
6891     for reporting database sequence matches.\n  -f\
6892 , --filter       :      : filter the query sequenc\
6893 e for low complexity \n                           \
6894    regions, see --paramDetail filter\n  -A, --alig\
6895 n        : int  : pairwise alignment format, see -\
6896 -paramDetail align\n  -s, --scores       : int  : \
6897 number of scores to be reported\n  -n, --alignment\
6898 s   : int  : number of alignments to report\n  -u,\
6899  --match        : int  : Match score (BLASTN only)\
6900 \n  -v, --mismatch     : int  : Mismatch score (BL\
6901 ASTN only)\n  -o, --gapopen      : int  : Gap open\
6902  penalty\n  -x, --gapext       : int  : Gap extens\
6903 ion penalty\n  -d, --dropoff      : int  : Drop-of\
6904 f\n  -g, --gapalign     :      : Optimise gapped a\
6905 lignments\n      --seqrange     : str  : region wi\
6906 thin input to use as query\n      --multifasta   :\
6907       : treat input as a set of fasta formatted se\
6908 quences\n\n[General]\n\n  -h, --help        :     \
6909  : prints this help text\n      --async       :   \
6910    : forces to make an asynchronous query\n      -\
6911 -email       : str  : e-mail address\n      --titl\
6912 e       : str  : title for job\n      --status    \
6913   :      : get job status\n      --resultTypes :  \
6914     : get available result types for job\n      --\
6915 polljob     :      : poll for the status of a job\\
6916 n      --jobid       : str  : jobid that was retur\
6917 ned when an asynchronous job \n                   \
6918           was submitted.\n      --outfile     : st\
6919 r  : file name for results (default is jobid;\n   \
6920                           \"-\" for STDOUT)\n     \
6921  --outformat   : str  : result format to retrieve\\
6922 n      --params      :      : list input parameter\
6923 s\n      --paramDetail : str  : display details fo\
6924 r input parameter\n      --quiet       :      : de\
6925 crease output\n      --verbose     :      : increa\
6926 se output\n      --trace       :      : show SOAP \
6927 messages being interchanged \n   \nSynchronous job\
6928 :\n\n  The results/errors are returned as soon as \
6929 the job is finished.\n  Usage: $scriptName --email\
6930  <your\\@email> [options...] seqFile\n  Returns: r\
6931 esults as an attachment\n\nAsynchronous job:\n\n  \
6932 Use this if you want to retrieve the results at a \
6933 later time. The results \n  are stored for up to 2\
6934 4 hours.        \n  Usage: $scriptName --async --email <\
6935 your\\@email> [options...] seqFile\n  Returns: job\
6936 id\n\n  Use the jobid to query for the status of t\
6937 he job. If the job is finished, \n  it also return\
6938 s the results/errors.\n  Usage: $scriptName --poll\
6939 job --jobid <jobId> [--outfile string]\n  Returns:\
6940  string indicating the status of the job and if ap\
6941 plicable, results \n  as an attachment.\n\nFurther\
6942  information:\n\n  http://www.ebi.ac.uk/Tools/webs\
6943 ervices/services/sss/ncbi_blast_rest\n  http://www\
6944 .ebi.ac.uk/Tools/webservices/tutorials/perl\n\nSup\
6945 port/Feedback:\n\n  http://www.ebi.ac.uk/support/\\
6946 nEOF\n}\n\n=head1 FEEDBACK/SUPPORT\n\nPlease conta\
6947 ct us at L<http://www.ebi.ac.uk/support/> if you h\
6948 ave any \nfeedback, suggestions or issues with the\
6949  service or this client.\n\n=cut\n","\n=head1 NAME\
6950 \n\nwublast_lwp.pl\n\n=head1 DESCRIPTION\n\nWU-BLA\
6951 ST REST web service Perl client using L<LWP>.\n\nT\
6952 ested with:\n\n=over\n\n=item *\nL<LWP> 5.79, L<XM\
6953 L::Simple> 2.12 and Perl 5.8.3\n\n=item *\nL<LWP> \
6954 5.805, L<XML::Simple> 2.14 and Perl 5.8.7\n\n=item\
6955  *\nL<LWP> 5.820, L<XML::Simple> 2.18 and Perl 5.1\
6956 0.0 (Ubuntu 9.04)\n\n=back\n\nFor further informat\
6957 ion see:\n\n=over\n\n=item *\nL<http://www.ebi.ac.\
6958 uk/Tools/webservices/services/sss/wu_blast_rest>\n\
6959 \n=item *\nL<http://www.ebi.ac.uk/Tools/webservice\
6960 s/tutorials/perl>\n\n=back\n\n=head1 VERSION\n\n$I\
6961 d: wublast_lwp.pl 1317 2009-09-03 15:44:11Z hpm $\\
6962 n\n=cut\n\nuse strict;\nuse warnings;\n\nuse Engli\
6963 sh;\nuse LWP;\nuse XML::Simple;\nuse Getopt::Long \
6964 qw(:config no_ignore_case bundling);\nuse File::Ba\
6965 sename;\nuse Data::Dumper;\n\nmy $baseUrl = 'http:\
6966 //www.ebi.ac.uk/Tools/services/rest/wublast';\n\nm\
6967 y $checkInterval = 3;\n\nmy $outputLevel = 1;\n\nm\
6968 y $numOpts = scalar(@ARGV);\nmy %params = ( 'debug\
6969 Level' => 0 );\n\nmy %tool_params = ();\nGetOption\
6970 s(\n\n  # Tool specific options\n       'program|p=s'    \
6971  => \\$tool_params{'program'},      # BLAST progra\
6972 m\n     'database|D=s'    => \\$params{'database'},   \
6973   # Search database\n   'matrix|m=s'      => \\$tool\
6974 _params{'matrix'},       # Scoring matrix\n     'exp|E\
6975 =f'         => \\$tool_params{'exp'},          # E\
6976 -value threshold\n      'viewfilter|e'    => \\$tool_pa\
6977 rams{'viewfilter'},   # Display filtered sequence\\
6978 n       'filter|f=s'      => \\$tool_params{'filter'},  \
6979      # Low complexity filter name\n     'alignments|n=\
6980 i'  => \\$tool_params{'alignments'},   # Number of\
6981  alignments\n   'scores|s=i'      => \\$tool_params{\
6982 'scores'},       # Number of scores\n   'sensitivity\
6983 |S=s' => \\$tool_params{'sensitivity'},  # Search \
6984 sensitivity\n   'sort|t=s'        => \\$tool_params{\
6985 'sort'},         # Sort hits by...\n    'stats|T=s'  \
6986      => \\$tool_params{'stats'},        # Scoring \
6987 statistic to use\n      'strand|d=s'      => \\$tool_pa\
6988 rams{'strand'},       # Strand to use\n 'topcombon\
6989 |c=i'   => \\$tool_params{'topcombon'},    # Consi\
6990 stent sets of HSPs\n    'align|A=i'       => \\$tool_\
6991 params{'align'},   # Pairwise alignment format\n        '\
6992 stype=s' => \\$tool_params{'stype'},    # Sequence\
6993  type 'protein' or 'dna'\n      'sequence=s' => \\$para\
6994 ms{'sequence'},         # Query sequence file or D\
6995 B:ID\n  'multifasta' => \\$params{'multifasta'},   \
6996     # Multiple fasta input\n\n  # Compatability opt\
6997 ions, old command-line.\n       'echofilter|e'    => \\$\
6998 params{'echofilter'},   # Display filtered sequenc\
6999 e\n     'b=i'  => \\$params{'numal'},        # Number \
7000 of alignments\n 'appxml=s'        => \\$params{'ap\
7001 pxml'},       # Application XML\n\n     # Generic opti\
7002 ons\n   'email=s'       => \\$params{'email'},      \
7003     # User e-mail address\n     'title=s'       => \\$\
7004 params{'title'},          # Job title\n 'outfile=s\
7005 '     => \\$params{'outfile'},        # Output fil\
7006 e name\n        'outformat=s'   => \\$params{'outformat'}\
7007 ,      # Output file type\n     'jobid=s'       => \\$\
7008 params{'jobid'},          # JobId\n     'help|h'      \
7009   => \\$params{'help'},           # Usage help\n        '\
7010 async'         => \\$params{'async'},          # A\
7011 synchronous submission\n        'polljob'       => \\$par\
7012 ams{'polljob'},        # Get results\n  'resultType\
7013 s'   => \\$params{'resultTypes'},    # Get result \
7014 types\n 'status'        => \\$params{'status'},   \
7015       # Get status\n    'params'        => \\$params{\
7016 'params'},         # List input parameters\n    'para\
7017 mDetail=s' => \\$params{'paramDetail'},    # Get d\
7018 etails for parameter\n  'quiet'         => \\$param\
7019 s{'quiet'},          # Decrease output level\n  've\
7020 rbose'       => \\$params{'verbose'},        # Inc\
7021 rease output level\n    'debugLevel=i'  => \\$params{\
7022 'debugLevel'},     # Debug output level\n       'baseUrl\
7023 =s'     => \\$baseUrl,                  # Base URL\
7024  for service.\n);\nif ( $params{'verbose'} ) { $ou\
7025 tputLevel++ }\nif ( $params{'$quiet'} )  { $output\
7026 Level-- }\n\n&print_debug_message( 'MAIN', 'LWP::V\
7027 ERSION: ' . $LWP::VERSION,\n    1 );\n\n&print_debug_\
7028 message( 'MAIN', \"params:\\n\" . Dumper( \\%param\
7029 s ),           11 );\n&print_debug_message( 'MAIN'\
7030 , \"tool_params:\\n\" . Dumper( \\%tool_params ), \
7031 11 );\n\nmy $scriptName = basename( $0, () );\n\ni\
7032 f ( $params{'help'} || $numOpts == 0 ) {\n      &usage(\
7033 );\n    exit(0);\n}\n\n&print_debug_message( 'MAIN', \
7034 'baseUrl: ' . $baseUrl, 1 );\n\nif (\n  !(\n               $p\
7035 arams{'polljob'}\n              || $params{'resultTypes'}\n             |\
7036 | $params{'status'}\n           || $params{'params'}\n          || \
7037 $params{'paramDetail'}\n        )\n     && !( defined( $ARGV[\
7038 0] ) || defined( $params{'sequence'} ) )\n  )\n{\n\
7039 \n      # Bad argument combination, so print error mess\
7040 age and usage\n print STDERR 'Error: bad option co\
7041 mbination', \"\\n\";\n  &usage();\n     exit(1);\n}\n\n\
7042 elsif ( $params{'params'} ) {\n &print_tool_params\
7043 ();\n}\n\nelsif ( $params{'paramDetail'} ) {\n  &pr\
7044 int_param_details( $params{'paramDetail'} );\n}\n\\
7045 nelsif ( $params{'status'} && defined( $params{'jo\
7046 bid'} ) ) {\n   &print_job_status( $params{'jobid'} \
7047 );\n}\n\nelsif ( $params{'resultTypes'} && defined\
7048 ( $params{'jobid'} ) ) {\n      &print_result_types( $p\
7049 arams{'jobid'} );\n}\n\nelsif ( $params{'polljob'}\
7050  && defined( $params{'jobid'} ) ) {\n   &get_results\
7051 ( $params{'jobid'} );\n}\n\nelse {\n\n  # Multiple \
7052 input sequence mode, assume fasta format.\n     if ( $\
7053 params{'multifasta'} ) {\n              &multi_submit_job();\n\
7054         }\n\n   # Entry identifier list file.\n elsif (( de\
7055 fined( $params{'sequence'} ) && $params{'sequence'\
7056 } =~ m/^\\@/ )\n                || ( defined( $ARGV[0] ) && $ARG\
7057 V[0] =~ m/^\\@/ ) )\n   {\n             my $list_filename = $pa\
7058 rams{'sequence'} || $ARGV[0];\n         $list_filename =~\
7059  s/^\\@//;\n            &list_file_submit_job($list_filename\
7060 );\n    }\n\n   # Default: single sequence/identifier.\\
7061 n       else {\n\n              # Load the sequence data and submit.\
7062 \n              &submit_job( &load_data() );\n  }\n}\n\n=head1 \
7063 FUNCTIONS\n\n=cut\n\n\n=head2 rest_request()\n\nPe\
7064 rform a REST request.\n\n  my $response_str = &res\
7065 t_request($url);\n\n=cut\n\nsub rest_request {\n        p\
7066 rint_debug_message( 'rest_request', 'Begin', 11 );\
7067 \n      my $requestUrl = shift;\n       print_debug_message( \
7068 'rest_request', 'URL: ' . $requestUrl, 11 );\n\n        #\
7069  Create a user agent\n  my $ua = LWP::UserAgent->ne\
7070 w();\n  '$Revision: 1317 $' =~ m/(\\d+)/;\n     $ua->ag\
7071 ent(\"EBI-Sample-Client/$1 ($scriptName; $OSNAME) \
7072 \" . $ua->agent());\n   $ua->env_proxy;\n\n     # Perfor\
7073 m the request\n my $response = $ua->get($requestUr\
7074 l);\n   print_debug_message( 'rest_request', 'HTTP s\
7075 tatus: ' . $response->code,\n           11 );\n\n       # Check f\
7076 or HTTP error codes\n   if ( $response->is_error ) {\
7077 \n              $response->content() =~ m/<h1>([^<]+)<\\/h1>/;\
7078 \n              die 'http status: ' . $response->code . ' ' . \
7079 $response->message . '  ' . $1;\n       }\n     print_debug_\
7080 message( 'rest_request', 'End', 11 );\n\n       # Return\
7081  the response data\n    return $response->content();\\
7082 n}\n\n=head2 rest_get_parameters()\n\nGet list of \
7083 tool parameter names.\n\n  my (@param_list) = &res\
7084 t_get_parameters();\n\n=cut\n\nsub rest_get_parame\
7085 ters {\n        print_debug_message( 'rest_get_parameters\
7086 ', 'Begin', 1 );\n      my $url                = $baseU\
7087 rl . '/parameters/';\n  my $param_list_xml_str = re\
7088 st_request($url);\n     my $param_list_xml     = XMLin\
7089 ($param_list_xml_str);\n        my (@param_list)       = \
7090 @{ $param_list_xml->{'id'} };\n print_debug_messag\
7091 e( 'rest_get_parameters', 'End', 1 );\n return (@p\
7092 aram_list);\n}\n\n=head2 rest_get_parameter_detail\
7093 s()\n\nGet details of a tool parameter.\n\n  my $p\
7094 aramDetail = &rest_get_parameter_details($param_na\
7095 me);\n\n=cut\n\nsub rest_get_parameter_details {\n\
7096         print_debug_message( 'rest_get_parameter_details'\
7097 , 'Begin', 1 );\n       my $parameterId = shift;\n      print\
7098 _debug_message( 'rest_get_parameter_details',\n         '\
7099 parameterId: ' . $parameterId, 1 );\n   my $url     \
7100              = $baseUrl . '/parameterdetails/' . $\
7101 parameterId;\n  my $param_detail_xml_str = rest_req\
7102 uest($url);\n   my $param_detail_xml     = XMLin($pa\
7103 ram_detail_xml_str);\n  print_debug_message( 'rest_\
7104 get_parameter_details', 'End', 1 );\n   return ($par\
7105 am_detail_xml);\n}\n\n=head2 rest_run()\n\nSubmit \
7106 a job.\n\n  my $job_id = &rest_run($email, $title,\
7107  \\%params );\n\n=cut\n\nsub rest_run {\n       print_de\
7108 bug_message( 'rest_run', 'Begin', 1 );\n        my $email\
7109   = shift;\n    my $title  = shift;\n   my $params = sh\
7110 ift;\n  print_debug_message( 'rest_run', 'email: ' \
7111 . $email, 1 );\n        if ( defined($title) ) {\n              print\
7112 _debug_message( 'rest_run', 'title: ' . $title, 1 \
7113 );\n    }\n     print_debug_message( 'rest_run', 'params:\
7114  ' . Dumper($params), 1 );\n\n  # User agent to per\
7115 form http requests\n    my $ua = LWP::UserAgent->new(\
7116 );\n    $ua->env_proxy;\n\n     # Clean up parameters\n m\
7117 y (%tmp_params) = %{$params};\n $tmp_params{'email\
7118 '} = $email;\n  $tmp_params{'title'} = $title;\n        fo\
7119 reach my $param_name ( keys(%tmp_params) ) {\n          if\
7120  ( !defined( $tmp_params{$param_name} ) ) {\n                   de\
7121 lete $tmp_params{$param_name};\n                }\n     }\n\n   # Subm\
7122 it the job as a POST\n  my $url = $baseUrl . '/run'\
7123 ;\n     my $response = $ua->post( $url, \\%tmp_params \
7124 );\n    print_debug_message( 'rest_run', 'HTTP status\
7125 : ' . $response->code, 11 );\n  print_debug_message\
7126 ( 'rest_run',\n         'request: ' . $response->request(\
7127 )->content(), 11 );\n\n # Check for HTTP error cod\
7128 es\n    if ( $response->is_error ) {\n          $response->co\
7129 ntent() =~ m/<h1>([^<]+)<\\/h1>/;\n             die 'http sta\
7130 tus: ' . $response->code . ' ' . $response->messag\
7131 e . '  ' . $1;\n        }\n\n   # The job id is returned\n      \
7132 my $job_id = $response->content();\n    print_debug_m\
7133 essage( 'rest_run', 'End', 1 );\n       return $job_id;\\
7134 n}\n\n=head2 rest_get_status()\n\nCheck the status\
7135  of a job.\n\n  my $status = &rest_get_status($job\
7136 _id);\n\n=cut\n\nsub rest_get_status {\n        print_deb\
7137 ug_message( 'rest_get_status', 'Begin', 1 );\n  my \
7138 $job_id = shift;\n      print_debug_message( 'rest_get_\
7139 status', 'jobid: ' . $job_id, 2 );\n    my $status_st\
7140 r = 'UNKNOWN';\n        my $url        = $baseUrl . '/sta\
7141 tus/' . $job_id;\n      $status_str = &rest_request($ur\
7142 l);\n   print_debug_message( 'rest_get_status', 'sta\
7143 tus_str: ' . $status_str, 2 );\n        print_debug_messa\
7144 ge( 'rest_get_status', 'End', 1 );\n    return $statu\
7145 s_str;\n}\n\n=head2 rest_get_result_types()\n\nGet\
7146  list of result types for finished job.\n\n  my (@\
7147 result_types) = &rest_get_result_types($job_id);\n\
7148 \n=cut\n\nsub rest_get_result_types {\n print_debu\
7149 g_message( 'rest_get_result_types', 'Begin', 1 );\\
7150 n       my $job_id = shift;\n   print_debug_message( 'rest\
7151 _get_result_types', 'jobid: ' . $job_id, 2 );\n my\
7152  (@resultTypes);\n      my $url                      = \
7153 $baseUrl . '/resulttypes/' . $job_id;\n my $result\
7154 _type_list_xml_str = &rest_request($url);\n     my $re\
7155 sult_type_list_xml     = XMLin($result_type_list_x\
7156 ml_str);\n      (@resultTypes) = @{ $result_type_list_x\
7157 ml->{'type'} };\n       print_debug_message( 'rest_get_r\
7158 esult_types',\n         scalar(@resultTypes) . ' result t\
7159 ypes', 2 );\n   print_debug_message( 'rest_get_resul\
7160 t_types', 'End', 1 );\n return (@resultTypes);\n}\\
7161 n\n=head2 rest_get_result()\n\nGet result data of \
7162 a specified type for a finished job.\n\n  my $resu\
7163 lt = rest_get_result($job_id, $result_type);\n\n=c\
7164 ut\n\nsub rest_get_result {\n   print_debug_message(\
7165  'rest_get_result', 'Begin', 1 );\n     my $job_id = s\
7166 hift;\n my $type   = shift;\n   print_debug_message(\
7167  'rest_get_result', 'jobid: ' . $job_id, 1 );\n pr\
7168 int_debug_message( 'rest_get_result', 'type: ' . $\
7169 type,    1 );\n my $url    = $baseUrl . '/result/'\
7170  . $job_id . '/' . $type;\n     my $result = &rest_req\
7171 uest($url);\n   print_debug_message( 'rest_get_resul\
7172 t', length($result) . ' characters',\n          1 );\n  pri\
7173 nt_debug_message( 'rest_get_result', 'End', 1 );\n\
7174         return $result;\n}\n\n\n=head2 print_debug_messag\
7175 e()\n\nPrint debug message at specified debug leve\
7176 l.\n\n  &print_debug_message($method_name, $messag\
7177 e, $level);\n\n=cut\n\nsub print_debug_message {\n\
7178         my $function_name = shift;\n    my $message       = \
7179 shift;\n        my $level         = shift;\n    if ( $level \
7180 <= $params{'debugLevel'} ) {\n          print STDERR '[', \
7181 $function_name, '()] ', $message, \"\\n\";\n    }\n}\\
7182 n\n=head2 print_tool_params()\n\nPrint list of too\
7183 l parameters.\n\n  &print_tool_params();\n\n=cut\n\
7184 \nsub print_tool_params {\n     print_debug_message( '\
7185 print_tool_params', 'Begin', 1 );\n     my (@param_lis\
7186 t) = &rest_get_parameters();\n  foreach my $param (\
7187  sort(@param_list) ) {\n                print $param, \"\\n\";\n\
7188         }\n     print_debug_message( 'print_tool_params', 'En\
7189 d', 1 );\n}\n\n=head2 print_param_details()\n\nPri\
7190 nt details of a tool parameter.\n\n  &print_param_\
7191 details($param_name);\n\n=cut\n\nsub print_param_d\
7192 etails {\n      print_debug_message( 'print_param_detai\
7193 ls', 'Begin', 1 );\n    my $paramName = shift;\n        prin\
7194 t_debug_message( 'print_param_details', 'paramName\
7195 : ' . $paramName, 2 );\n        my $paramDetail = &rest_g\
7196 et_parameter_details($paramName);\n     print $paramDe\
7197 tail->{'name'}, \"\\t\", $paramDetail->{'type'}, \\
7198 "\\n\";\n       print $paramDetail->{'description'}, \"\\
7199 \n\";\n foreach my $value ( @{ $paramDetail->{'val\
7200 ues'}->{'value'} } ) {\n                print $value->{'value'};\
7201 \n              if ( $value->{'defaultValue'} eq 'true' ) {\n   \
7202                 print \"\\t\", 'default';\n             }\n             print \"\\n\";\
7203 \n              print \"\\t\", $value->{'label'}, \"\\n\";\n    }\
7204 \n      print_debug_message( 'print_param_details', 'En\
7205 d', 1 );\n}\n\n=head2 print_job_status()\n\nPrint \
7206 status of a job.\n\n  &print_job_status($job_id);\\
7207 n\n=cut\n\nsub print_job_status {\n     print_debug_me\
7208 ssage( 'print_job_status', 'Begin', 1 );\n      my $job\
7209 id = shift;\n   print_debug_message( 'print_job_stat\
7210 us', 'jobid: ' . $jobid, 1 );\n if ( $outputLevel \
7211 > 0 ) {\n               print STDERR 'Getting status for job ',\
7212  $jobid, \"\\n\";\n     }\n     my $result = &rest_get_sta\
7213 tus($jobid);\n  print \"$result\\n\";\n if ( $resul\
7214 t eq 'FINISHED' && $outputLevel > 0 ) {\n               print S\
7215 TDERR \"To get results: $scriptName --polljob --jo\
7216 bid \" . $jobid\n                 . \"\\n\";\n  }\n     print_debug_\
7217 message( 'print_job_status', 'End', 1 );\n}\n\n=he\
7218 ad2 print_result_types()\n\nPrint available result\
7219  types for a job.\n\n  &print_result_types($job_id\
7220 );\n\n=cut\n\nsub print_result_types {\n        print_deb\
7221 ug_message( 'result_types', 'Begin', 1 );\n     my $jo\
7222 bid = shift;\n  print_debug_message( 'result_types'\
7223 , 'jobid: ' . $jobid, 1 );\n    if ( $outputLevel > 0\
7224  ) {\n          print STDERR 'Getting result types for job\
7225  ', $jobid, \"\\n\";\n  }\n     my $status = &rest_get_\
7226 status($jobid);\n       if ( $status eq 'PENDING' || $st\
7227 atus eq 'RUNNING' ) {\n         print STDERR 'Error: Job \
7228 status is ', $status,\n           '. To get result types \
7229 the job must be finished.', \"\\n\";\n  }\n     else {\\
7230 n               my (@resultTypes) = &rest_get_result_types($job\
7231 id);\n          if ( $outputLevel > 0 ) {\n                     print STDOUT\
7232  'Available result types:', \"\\n\";\n          }\n             forea\
7233 ch my $resultType (@resultTypes) {\n                    print STDOU\
7234 T $resultType->{'identifier'}, \"\\n\";\n                       if ( d\
7235 efined( $resultType->{'label'} ) ) {\n                          print ST\
7236 DOUT \"\\t\", $resultType->{'label'}, \"\\n\";\n                \
7237         }\n                     if ( defined( $resultType->{'description'} \
7238 ) ) {\n                         print STDOUT \"\\t\", $resultType->{'de\
7239 scription'}, \"\\n\";\n                 }\n                     if ( defined( $res\
7240 ultType->{'mediaType'} ) ) {\n                          print STDOUT \"\\
7241 \t\", $resultType->{'mediaType'}, \"\\n\";\n                    }\n\
7242                         if ( defined( $resultType->{'fileSuffix'} ) ) {\
7243 \n                              print STDOUT \"\\t\", $resultType->{'fileSuf\
7244 fix'}, \"\\n\";\n                       }\n             }\n             if ( $status eq 'FIN\
7245 ISHED' && $outputLevel > 0 ) {\n                        print STDERR \"\
7246 \\n\", 'To get results:', \"\\n\",\n                      \"  $scri\
7247 ptName --polljob --jobid \" . $params{'jobid'} . \\
7248 "\\n\",\n                         \"  $scriptName --polljob --outforma\
7249 t <type> --jobid \"\n                     . $params{'jobid'} . \"\\
7250 \n\";\n         }\n     }\n     print_debug_message( 'result_type\
7251 s', 'End', 1 );\n}\n\n=head2 submit_job()\n\nSubmi\
7252 t a job to the service.\n\n  &submit_job($seq);\n\\
7253 n=cut\n\nsub submit_job {\n     print_debug_message( '\
7254 submit_job', 'Begin', 1 );\n\n  # Set input sequenc\
7255 e\n     $tool_params{'sequence'} = shift;\n\n   # Load p\
7256 arameters\n     &load_params();\n\n     # Submit the job\n\
7257         my $jobid = &rest_run( $params{'email'}, $params{\
7258 'title'}, \\%tool_params );\n\n # Simulate sync/as\
7259 ync mode\n      if ( defined( $params{'async'} ) ) {\n  \
7260         print STDOUT $jobid, \"\\n\";\n         if ( $outputLeve\
7261 l > 0 ) {\n                     print STDERR\n                    \"To check status\
7262 : $scriptName --status --jobid $jobid\\n\";\n           }\n\
7263         }\n     else {\n                if ( $outputLevel > 0 ) {\n                     print\
7264  STDERR \"JobId: $jobid\\n\";\n         }\n             sleep 1;\n              \
7265 &get_results($jobid);\n }\n     print_debug_message( '\
7266 submit_job', 'End', 1 );\n}\n\n=head2 multi_submit\
7267 _job()\n\nSubmit multiple jobs assuming input is a\
7268  collection of fasta formatted sequences.\n\n  &mu\
7269 lti_submit_job();\n\n=cut\n\nsub multi_submit_job \
7270 {\n     print_debug_message( 'multi_submit_job', 'Begi\
7271 n', 1 );\n      my $jobIdForFilename = 1;\n     $jobIdForFi\
7272 lename = 0 if ( defined( $params{'outfile'} ) );\n\
7273         my (@filename_list) = ();\n\n   # Query sequence\n      \
7274 if ( defined( $ARGV[0] ) ) {    # Bare option\n         i\
7275 f ( -f $ARGV[0] || $ARGV[0] eq '-' ) {    # File\n\
7276                         push( @filename_list, $ARGV[0] );\n             }\n     }\n     if\
7277  ( $params{'sequence'} ) {                   # Via\
7278  --sequence\n           if ( -f $params{'sequence'} || $par\
7279 ams{'sequence'} eq '-' ) {    # File\n                  push( @fi\
7280 lename_list, $params{'sequence'} );\n           }\n     }\n\n   $\
7281 / = '>';\n      foreach my $filename (@filename_list) {\
7282 \n              open( my $INFILE, '<', $filename )\n              or die\
7283  \"Error: unable to open file $filename ($!)\";\n       \
7284         while (<$INFILE>) {\n                   my $seq = $_;\n                 $seq =~\
7285  s/>$//;\n                      if ( $seq =~ m/(\\S+)/ ) {\n                            print\
7286  STDERR \"Submitting job for: $1\\n\"\n                           if ( \
7287 $outputLevel > 0 );\n                           $seq = '>' . $seq;\n                            &\
7288 print_debug_message( 'multi_submit_job', $seq, 11 \
7289 );\n                            &submit_job($seq);\n                            $params{'outfile'}\
7290  = undef if ( $jobIdForFilename == 1 );\n                       }\n             }\
7291 \n              close $INFILE;\n        }\n     print_debug_message( 'mul\
7292 ti_submit_job', 'End', 1 );\n}\n\n=head2 list_file\
7293 _submit_job()\n\nSubmit multiple jobs using a file\
7294  containing a list of entry identifiers as \ninput\
7295 .\n\n  &list_file_submit_job($list_filename)\n\n=c\
7296 ut\n\nsub list_file_submit_job {\n      my $filename   \
7297       = shift;\n        my $jobIdForFilename = 1;\n     $jobI\
7298 dForFilename = 0 if ( defined( $params{'outfile'} \
7299 ) );\n\n        # Iterate over identifiers, submitting ea\
7300 ch job\n        open( my $LISTFILE, '<', $filename )\n    \
7301 or die 'Error: unable to open file ' . $filename .\
7302  ' (' . $! . ')';\n     while (<$LISTFILE>) {\n         my $l\
7303 ine = $_;\n             chomp($line);\n         if ( $line ne '' ) {\
7304 \n                      &print_debug_message( 'list_file_submit_job',\
7305  'line: ' . $line, 2 );\n                       if ( $line =~ m/\\w:\\\
7306 w/ ) {    # Check this is an identifier\n                               print\
7307  STDERR \"Submitting job for: $line\\n\"\n                                if\
7308  ( $outputLevel > 0 );\n                                &submit_job($line);\n   \
7309                 }\n                     else {\n                                print STDERR\n\"Warning: line \
7310 \\\"$line\\\" is not recognised as an identifier\\\
7311 n\";\n                  }\n             }\n             $params{'outfile'} = undef if (\
7312  $jobIdForFilename == 1 );\n    }\n     close $LISTFILE;\\
7313 n}\n\n=head2 load_data()\n\nLoad sequence data fro\
7314 m file or option specified on the command-line.\n\\
7315 n  &load_data();\n\n=cut\n\nsub load_data {\n   prin\
7316 t_debug_message( 'load_data', 'Begin', 1 );\n   my $\
7317 retSeq;\n\n     # Query sequence\n      if ( defined( $ARGV\
7318 [0] ) ) {    # Bare option\n            if ( -f $ARGV[0] || \
7319 $ARGV[0] eq '-' ) {    # File\n                 $retSeq = &read_\
7320 file( $ARGV[0] );\n             }\n             else {                  \
7321                    # DB:ID or sequence\n                        $retSeq\
7322  = $ARGV[0];\n          }\n     }\n     if ( $params{'sequence'} )\
7323  {                   # Via --sequence\n         if ( -f $\
7324 params{'sequence'} || $params{'sequence'} eq '-' )\
7325  {    # File\n                  $retSeq = &read_file( $params{'se\
7326 quence'} );\n           }\n             else {    # DB:ID or sequence\\
7327 n                       $retSeq = $params{'sequence'};\n                }\n     }\n     prin\
7328 t_debug_message( 'load_data', 'End', 1 );\n     return\
7329  $retSeq;\n}\n\n=head2 load_params()\n\nLoad job p\
7330 arameters from command-line options.\n\n  &load_pa\
7331 rams();\n\n=cut\n\nsub load_params {\n  print_debug\
7332 _message( 'load_params', 'Begin', 1 );\n\n      # Datab\
7333 ase(s) to search\n      my (@dbList) = split /[ ,]/, $p\
7334 arams{'database'};\n    $tool_params{'database'} = \\\
7335 @dbList;\n\n    # Compatability options, old command-\
7336 line.\n if(!$tool_params{'viewfilter'} && $params{\
7337 'echofilter'}) {\n              $tool_params{'viewfilter'} = '\
7338 true';\n        }\n     if(!$tool_params{'alignments'} && $pa\
7339 rams{'numal'}) {\n              $tool_params{'alignments'} = $\
7340 params{'numal'};\n      }\n     # TODO: set alignment forma\
7341 t option to get NCBI BLAST XML.\n       if($params{'appx\
7342 ml'}) {\n               $tool_params{'align'} = '';\n   }\n\n   pri\
7343 nt_debug_message( 'load_params', 'End', 1 );\n}\n\\
7344 n=head2 client_poll()\n\nClient-side job polling.\\
7345 n\n  &client_poll($job_id);\n\n=cut\n\nsub client_\
7346 poll {\n        print_debug_message( 'client_poll', 'Begi\
7347 n', 1 );\n      my $jobid  = shift;\n   my $status = 'PEN\
7348 DING';\n\n      my $errorCount = 0;\n   while ($status eq\
7349  'RUNNING'\n            || $status eq 'PENDING'\n               || ( $sta\
7350 tus eq 'ERROR' && $errorCount < 2 ) )\n {\n             $stat\
7351 us = rest_get_status($jobid);\n         print STDERR \"$s\
7352 tatus\\n\" if ( $outputLevel > 0 );\n           if ( $statu\
7353 s eq 'ERROR' ) {\n                      $errorCount++;\n                }\n             elsif \
7354 ( $errorCount > 0 ) {\n                 $errorCount--;\n                }\n             i\
7355 f (   $status eq 'RUNNING'\n                    || $status eq 'PEND\
7356 ING'\n                  || $status eq 'ERROR' )\n               {\n\n                   # Wait\
7357  before polling again.\n                        sleep $checkInterval;\n\
7358                 }\n     }\n     print_debug_message( 'client_poll', 'End\
7359 ', 1 );\n       return $status;\n}\n\n=head2 get_results\
7360 ()\n\nGet the results for a job identifier.\n\n  &\
7361 get_results($job_id);\n\n=cut\n\nsub get_results {\
7362 \n      print_debug_message( 'get_results', 'Begin', 1 \
7363 );\n    my $jobid = shift;\n    print_debug_message( 'ge\
7364 t_results', 'jobid: ' . $jobid, 1 );\n\n        # Verbose\
7365 \n      if ( $outputLevel > 1 ) {\n             print 'Getting res\
7366 ults for job ', $jobid, \"\\n\";\n      }\n\n   # Check s\
7367 tatus, and wait if not finished\n       client_poll($job\
7368 id);\n\n        # Use JobId if output file name is not de\
7369 fined\n unless ( defined( $params{'outfile'} ) ) {\
7370 \n              $params{'outfile'} = $jobid;\n  }\n\n   # Get lis\
7371 t of data types\n       my (@resultTypes) = rest_get_res\
7372 ult_types($jobid);\n\n  # Get the data and write it\
7373  to a file\n    if ( defined( $params{'outformat'} ) \
7374 ) {    # Specified data type\n          my $selResultType;\
7375 \n              foreach my $resultType (@resultTypes) {\n                       if\
7376  ( $resultType->{'identifier'} eq $params{'outform\
7377 at'} ) {\n                              $selResultType = $resultType;\n                 }\\
7378 n               }\n             if ( defined($selResultType) ) {\n                      my $r\
7379 esult =\n                         rest_get_result( $jobid, $selResultT\
7380 ype->{'identifier'} );\n                        if ( $params{'outfile'}\
7381  eq '-' ) {\n                           write_file( $params{'outfile'}, $\
7382 result );\n                     }\n                     else {\n                                write_file(\n                                   \
7383 $params{'outfile'} . '.'\n                                        . $selResultType-\
7384 >{'identifier'} . '.'\n                                   . $selResultType->{'\
7385 fileSuffix'},\n                                 $result\n                               );\n                    }\n             }\n             \
7386 else {\n                        die 'Error: unknown result format \"' .\
7387  $params{'outformat'} . '\"';\n         }\n     }\n     else {   \
7388  # Data types available\n                     # Write a file fo\
7389 r each output type\n            for my $resultType (@resultT\
7390 ypes) {\n                       if ( $outputLevel > 1 ) {\n                             print S\
7391 TDERR 'Getting ', $resultType->{'identifier'}, \"\\
7392 \n\";\n                 }\n                     my $result = rest_get_result( $job\
7393 id, $resultType->{'identifier'} );\n                    if ( $param\
7394 s{'outfile'} eq '-' ) {\n                               write_file( $params{'\
7395 outfile'}, $result );\n                 }\n                     else {\n                                write_\
7396 file(\n                                 $params{'outfile'} . '.'\n                                        . $re\
7397 sultType->{'identifier'} . '.'\n                                          . $resultTy\
7398 pe->{'fileSuffix'},\n                                   $result\n                               );\n                    }\n     \
7399         }\n     }\n     print_debug_message( 'get_results', 'End'\
7400 , 1 );\n}\n\n=head2 read_file()\n\nRead a file int\
7401 o a scalar. The special filename '-' can be used t\
7402 o read from \nstandard input (STDIN).\n\n  my $dat\
7403 a = &read_file($filename);\n\n=cut\n\nsub read_fil\
7404 e {\n   print_debug_message( 'read_file', 'Begin', 1\
7405  );\n   my $filename = shift;\n print_debug_message(\
7406  'read_file', 'filename: ' . $filename, 2 );\n  my \
7407 ( $content, $buffer );\n        if ( $filename eq '-' ) {\
7408 \n              while ( sysread( STDIN, $buffer, 1024 ) ) {\n   \
7409                 $content .= $buffer;\n          }\n     }\n     else {    # File\
7410 \n              open( my $FILE, '<', $filename )\n                or die \\
7411 "Error: unable to open input file $filename ($!)\"\
7412 ;\n             while ( sysread( $FILE, $buffer, 1024 ) ) {\n\
7413                         $content .= $buffer;\n          }\n             close($FILE);\n }\\
7414 n       print_debug_message( 'read_file', 'End', 1 );\n \
7415 return $content;\n}\n\n=head2 write_file()\n\nWrit\
7416 e data to a file. The special filename '-' can be \
7417 used to write to \nstandard output (STDOUT).\n\n  \
7418 &write_file($filename, $data);\n\n=cut\n\nsub writ\
7419 e_file {\n      print_debug_message( 'write_file', 'Beg\
7420 in', 1 );\n     my ( $filename, $data ) = @_;\n print_\
7421 debug_message( 'write_file', 'filename: ' . $filen\
7422 ame, 2 );\n     if ( $outputLevel > 0 ) {\n             print STD\
7423 ERR 'Creating result file: ' . $filename . \"\\n\"\
7424 ;\n     }\n     if ( $filename eq '-' ) {\n             print STDOUT \
7425 $data;\n        }\n     else {\n                open( my $FILE, '>', $filen\
7426 ame )\n           or die \"Error: unable to open output f\
7427 ile $filename ($!)\";\n         syswrite( $FILE, $data );\
7428 \n              close($FILE);\n }\n     print_debug_message( 'writ\
7429 e_file', 'End', 1 );\n}\n\n=head2 usage()\n\nPrint\
7430  program usage message.\n\n  &usage();\n\n=cut\n\n\
7431 sub usage {\n   print STDERR <<EOF\nWU-BLAST\n======\
7432 ==\n   \nRapid sequence database search programs u\
7433 tilizing the BLAST algorithm\n    \n[Required]\n\n\
7434   -p, --program      : str  : BLAST program to use\
7435 , see --paramDetail program\n  -D, --database     \
7436 : str  : database(s) to search, space separated. S\
7437 ee\n                              --paramDetail da\
7438 tabase\n      --stype        : str  : query sequen\
7439 ce type, see --paramDetail stype\n  seqFile       \
7440      : file : query sequence (\"-\" for STDIN, \\@\
7441 filename for\n                              identi\
7442 fier list file)\n\n[Optional]\n\n  -m, --matrix   \
7443     : str  : scoring matrix, see --paramDetail mat\
7444 rix\n  -e, --exp          : real : 0<E<= 1000. Sta\
7445 tistical significance threshold \n                \
7446               for reporting database sequence matc\
7447 hes.\n  -e, --viewfilter   :      : display the fi\
7448 ltered query sequence\n  -f, --filter       : str \
7449  : filter the query sequence for low complexity \n\
7450                               regions, see --param\
7451 Detail filter\n  -A, --align        : int  : pairw\
7452 ise alignment format, see --paramDetail align\n  -\
7453 s, --scores       : int  : number of scores to be \
7454 reported\n  -b, --alignments   : int  : number of \
7455 alignments to report\n  -S, --sensitivity  : str  \
7456 : sensitivity of the search, \n                   \
7457            see --paramDetail sensitivity\n  -t, --\
7458 sort         : str  : sort order for hits, see --para\
7459 mDetail sort\n  -T, --stats        : str  : statis\
7460 tical model, see --paramDetail stats\n  -d, --stra\
7461 nd       : str  : DNA strand to search with,\n    \
7462                           see --paramDetail strand\
7463 \n  -c, --topcombon    : str  : consistent sets of\
7464  HSPs\n      --multifasta   :      : treat input a\
7465 s a set of fasta formatted sequences\n\n[General]\\
7466 n\n  -h, --help        :      : prints this help t\
7467 ext\n      --async       :      : forces to make a\
7468 n asynchronous query\n      --email       : str  :\
7469  e-mail address\n      --title       : str  : titl\
7470 e for job\n      --status      :      : get job st\
7471 atus\n      --resultTypes :      : get available r\
7472 esult types for job\n      --polljob     :      : \
7473 poll for the status of a job\n      --jobid       \
7474 : str  : jobid that was returned when an asynchron\
7475 ous job \n                             was submitt\
7476 ed.\n      --outfile     : str  : file name for re\
7477 sults (default is jobid;\n                        \
7478      \"-\" for STDOUT)\n      --outformat   : str \
7479  : result format to retrieve\n      --params      \
7480 :      : list input parameters\n      --paramDetai\
7481 l : str  : display details for input parameter\n  \
7482     --quiet       :      : decrease output\n      \
7483 --verbose     :      : increase output\n      --tr\
7484 ace       :      : show SOAP messages being interc\
7485 hanged \n   \nSynchronous job:\n\n  The results/er\
7486 rors are returned as soon as the job is finished.\\
7487 n  Usage: $scriptName --email <your\\@email> [opti\
7488 ons...] seqFile\n  Returns: results as an attachme\
7489 nt\n\nAsynchronous job:\n\n  Use this if you want \
7490 to retrieve the results at a later time. The resul\
7491 ts \n  are stored for up to 24 hours.   \n  Usage: \
7492 $scriptName --async --email <your\\@email> [option\
7493 s...] seqFile\n  Returns: jobid\n\n  Use the jobid\
7494  to query for the status of the job. If the job is\
7495  finished, \n  it also returns the results/errors.\
7496 \n  Usage: $scriptName --polljob --jobid <jobId> [\
7497 --outfile string]\n  Returns: string indicating th\
7498 e status of the job and if applicable, results \n \
7499  as an attachment.\n\nFurther information:\n\n  ht\
7500 tp://www.ebi.ac.uk/Tools/webservices/services/sss/\
7501 wu_blast_rest\n  http://www.ebi.ac.uk/Tools/webser\
7502 vices/tutorials/perl\n\nSupport/Feedback:\n\n  htt\
7503 p://www.ebi.ac.uk/support/\nEOF\n}\n\n=head1 FEEDB\
7504 ACK/SUPPORT\n\nPlease contact us at L<http://www.e\
7505 bi.ac.uk/support/> if you have any \nfeedback, sug\
7506 gestions or issues with the service or this client\
7507 .\n\n=cut\n","\n\n\nmy $PROBTRESH = 0.3;# base pai\
7508 rs below this prob threshold will be ignored\nmy $\
7509 WEIGHT = 100.0; # float!!\nmy $NUCALPH = \"ACGTUNR\
7510 YMKSWHBVD\";\nuse vars qw($NUCALPH $WEIGHT);\n\nmy\
7511  $myname = basename($0);\n\nuse strict;\nuse warni\
7512 ngs;\n\nuse File::Basename;\nuse Getopt::Long;\nus\
7513 e File::Glob ':glob';\nuse File::Spec;\nuse File::\
7514 Temp qw/ tempfile tempdir /;\n\n\n\n\nsub tcoffeel\
7515 ib_header($;$)\n{\n    my ($nseq, $fd) = @_;\n    \
7516 if (! defined($fd)) {\n        $fd = *STDOUT;\n   \
7517  }\n    printf $fd \"! TC_LIB_FORMAT_01\\n\";\n   \
7518  printf $fd \"%d\\n\", $nseq;\n}\n\n\nsub tcoffeel\
7519 ib_header_addseq($$;$)\n{\n    my ($id, $seq, $fd)\
7520  = @_;\n    if (! defined($fd)) {\n        $fd = *\
7521 STDOUT;\n    }\n    printf $fd \"%s %d %s\\n\", $i\
7522 d, length($seq), $seq;\n}\n\n\nsub tcoffeelib_comm\
7523 ent($;$)\n{\n    my ($comment, $fd) = @_;\n    if \
7524 (! defined($fd)) {\n        $fd = *STDOUT;\n    }\\
7525 n    printf $fd \"!\" . $comment . \"\\n\";\n}\n\n\
7526 \nsub tcoffeelib_struct($$$;$)\n{\n    my ($nseq, \
7527 $len, $bpm, $fd) = @_;\n\n    if (! defined($fd)) \
7528 {\n        $fd = *STDOUT;\n    }\n\n    # output b\
7529 asepair indices with fixed weight\n    printf $fd \
7530 \"#%d %d\\n\", $nseq, $nseq;\n    # output basepai\
7531 rs (only once) and with unit-offset\n    for (my $\
7532 i=0; $i<$len; $i++) {\n        for (my $j=$i+1; $j\
7533 <$len; $j++) {\n            if (! defined($bpm->[$\
7534 i][$j])) {\n                print STDERR \"ERROR: \
7535 \\$bpm->[$i][$j] undefined\\n\";\n            }\n \
7536            if ($bpm->[$i][$j]>0) {\n              \
7537   print $fd $i+1;\n                print $fd \" \"\
7538 ;\n                print $fd $j+1;\n              \
7539   print $fd \" \" . $bpm->[$i][$j] . \"\\n\";\n   \
7540          }\n        }\n    }\n}\n\n\nsub tcoffeeli\
7541 b_footer(;$)\n{\n    my ($fd) = @_;\n    if (! def\
7542 ined($fd)) {\n        $fd = *STDOUT;\n    }\n    p\
7543 rint $fd \"! SEQ_1_TO_N\\n\";\n}\n\n\n    \nsub pl\
7544 fold($$$)\n{    \n    my ($id, $seq, $probtresh) =\
7545  @_;\n    my (@struct);# return\n    my ($templ, $\
7546 fhtmp, $fnametmp, $cmd, $ctr, $window_size);\n    \
7547 our $ntemp++;\n    \n    $templ = $myname . \".pid\
7548 -\" . $$ .$ntemp .\".XXXXXX\";\n    ($fhtmp, $fnam\
7549 etmp) = tempfile($templ, UNLINK => 1); \n    print\
7550  $fhtmp \">$id\\n$seq\\n\";\n\n    # --- init base\
7551 pair array\n    #\n    for (my $i=0; $i<length($se\
7552 q); $i++) {\n        for (my $j=$i+1; $j<length($s\
7553 eq); $j++) {\n            $struct[$i][$j]=0;\n    \
7554     }\n    }\n\n\n    # --- call rnaplfold and dro\
7555 p a readme\n    #\n    $window_size=(length($seq)<\
7556 70)?length($seq):70;\n    $cmd = \"RNAplfold -W $w\
7557 indow_size < $fnametmp >/dev/null\";\n    system($\
7558 cmd);\n    \n    if ($? != 0) {\n        printf ST\
7559 DERR \"ERROR: RNAplfold ($cmd) exited with error s\
7560 tatus %d\\n\", $? >> 8;\n        return;\n    }\n \
7561    #unlink($fnametmp);\n    my $fps = sprintf(\"%s\
7562 _dp.ps\", $id); # check long name\n    \n    if (!\
7563  -s $fps) {\n      {\n\n        $fps = sprintf(\"%s_dp.ps\
7564 \", substr($id,0,12)); # check short name\n     if (!\
7565  -s $fps)\n       {\n       die(\"couldn't find expected\
7566  file $fps\\n\");\n         return;\n     }\n      }\n  \
7567   }\n\n    \n    # --- read base pairs from create\
7568 d postscript\n    #\n    open(FH, $fps);\n    whil\
7569 e (my $line = <FH>) {\n        my ($nti, $ntj, $pr\
7570 ob);\n        chomp($line);        \n        # lin\
7571 e: bp bp sqrt-prob ubox\n        my @match = ($lin\
7572 e =~ m/^([0-9]+) +([0-9]+) +([0-9\\.]+) +ubox$/);\\
7573 n        if (scalar(@match)) {\n            $nti=$\
7574 1;\n            $ntj=$2;\n            $prob=$3*$3;\
7575 # prob stored as square root\n\n            if ($p\
7576 rob>$probtresh) {\n                #printf STDERR \
7577 \"\\$struct[$nti][$ntj] sqrtprob=$3 prob=$prob > $\
7578 probtresh\\n\";\n                $struct[$nti-1][$\
7579 ntj-1] = $WEIGHT\n            }\n            # sto\
7580 re with zero-offset\n        }\n    }\n    close(F\
7581 H);\n\n    # remove or gzi postscript\n    #\n    \
7582 unlink($fps);\n    #\n    # or gzip\n    #$cmd = \\
7583 "gzip -qf $fps\";\n    #system($cmd);\n    #if ($?\
7584  != 0) {\n    #    printf STDERR \"ERROR: gzip ($c\
7585 md) exited with error status %d\\n\", $? >> 8;\n  \
7586   #}\n\n    return \\@struct;\n}\n\n\n\n\n\nsub rn\
7587 aseqfmt($)\n{\n    my ($seq) = @_;\n    # remove g\
7588 aps\n    $seq =~ s/-//g;\n    # uppercase RNA\n   \
7589  $seq = uc($seq);\n    # T -> U\n    $seq =~ s/T/U\
7590 /g;\n    # check for invalid charaters\n    $_ = $\
7591 seq;\n    s/[^$NUCALPH]//g;\n    return $_;\n}\n\n\
7592 \n\n\nsub usage(;$)\n{    \n    my ($errmsg) = @_;\
7593 \n    if ($errmsg) {\n        print STDERR \"ERROR\
7594 : $errmsg\\n\";\n    }\n    print STDERR << \"EOF\\
7595 ";\n$myname:\n Creates a T-Coffee RNA structure li\
7596 brary from RNAplfold prediction.\n See FIXME:citat\
7597 ion\nUsage:\n $myname -in seq_file -out tcoffee_li\
7598 b\nEOF\n    exit(1);\n}\n\nsub read_fasta_seq \n  \
7599 {\n    my $f=$_[0];\n    my %hseq;\n    my (@seq, \
7600 @com, @name);\n    my ($a, $s,$nseq);\n\n    open \
7601 (F, $f);\n    while (<F>)\n      {\n    $s.=$_;\n    \
7602   }\n    close (F);\n\n    \n    @name=($s=~/>(\\S\
7603 *).*\\n[^>]*/g);\n    \n    @seq =($s=~/>.*.*\\n([\
7604 ^>]*)/g);\n    @com =($s=~/>(\\S*)(.*)\\n([^>]*)/g\
7605 );\n\n\n    $nseq=$#name+1;\n  \n    for ($a=0; $a\
7606 <$nseq; $a++)\n      {\n        my $n=$name[$a];\n      my $s;\
7607 \n      $hseq{$n}{name}=$n;\n   $s=$seq[$a];$s=~s/\\s//g;\
7608 \n      \n      $hseq{$n}{seq}=$s;\n    $hseq{$n}{com}=$com[$a]\
7609 ;\n      }\n    return %hseq;\n  }\n\n\n\n\n\n\n\n\
7610 my $fmsq = \"\";\nmy $flib = \"\";\nmy %OPTS;\nmy \
7611 %seq;\nmy ($id, $nseq, $i);\nmy @nl;\n\nGetOptions\
7612 (\"in=s\" => \\$fmsq, \"out=s\" => \\$flib);\n\nif\
7613  (! -s $fmsq) {\n    usage(\"empty or non-existant\
7614  file \\\"$fmsq\\\"\")\n}\nif (length($flib)==0) {\
7615 \n    usage(\"empty out-filename\")\n}\n\n\n\n\n\n\
7616 \n%seq=read_fasta_seq($fmsq);\n\n\n@nl=keys(%seq);\
7617 \n\n$nseq=$#nl+1;\nopen FD_LIB, \">$flib\" or die \
7618 \"can't open $flib!\";\ntcoffeelib_header($nseq, *\
7619 FD_LIB);\nforeach $id (keys (%seq))\n  {\n    my (\
7620 $seq, $fmtseq);\n    \n    $seq = $seq{$id}{seq};\\
7621 n    \n    $fmtseq = rnaseqfmt($seq);# check here,\
7622  formatting for folding important later\n    if (l\
7623 ength($seq)!=length($fmtseq)) {\n        print STD\
7624 ERR \"ERROR: invalid sequence $id is not an RNA se\
7625 quence. read seq is: $seq\\n\";\n        exit\n   \
7626    }\n   \n    tcoffeelib_header_addseq($id, uc($s\
7627 eq), *FD_LIB);\n  }\ntcoffeelib_comment(\"generate\
7628 d by $myname on \" . localtime(), *FD_LIB);\n\n\n\\
7629 n$i=0;\nforeach $id (keys (%seq))\n  {\n    my ($c\
7630 leanid, $seq, $bpm);\n    $seq=$seq{$id}{seq};\n  \
7631   $cleanid = $id;\n    $cleanid =~ s,[/ ],_,g;# ne\
7632 eded for rnaplfold\n    $seq = rnaseqfmt($seq);\n \
7633    \n    $bpm = plfold($cleanid, rnaseqfmt($seq), \
7634 $PROBTRESH);       \n    \n    tcoffeelib_struct($\
7635 i+1, length($seq), $bpm, *FD_LIB);\n    $i++;\n}\n\
7636 \n\ntcoffeelib_footer(*FD_LIB);\nclose FD_LIB;\nex\
7637 it (0);\n\n","\n\n\n\n\n$cmd=join ' ', @ARGV;\nif \
7638 ($cmd=~/-infile=(\\S+)/){ $seqfile=$1;}\nif ($cmd=\
7639 ~/-outfile=(\\S+)/){ $libfile=$1;}\n\n\n\n%s=read_\
7640 fasta_seq ($seqfile);\n\nopen (F, \">$libfile\");\\
7641 nforeach $name (keys (%s))\n  {\n    my $tclib=\"$\
7642 name.RNAplfold_tclib\";\n    print (F \">$name _F_\
7643  $tclib\\n\");\n    seq2RNAplfold2tclib ($name, $s\
7644 {$name}{seq}, $tclib);\n  }\nclose (F);\nexit (EXI\
7645 T_SUCCESS);\n\nsub seq2RNAplfold2tclib\n  {\n    m\
7646 y ($name, $seq, $tclib)=@_;\n    my ($tmp);\n    $\
7647 n++;\n    $tmp=\"tmp4seq2RNAplfold_tclib.$$.$n.pep\
7648 \";\n    open (RF, \">$tmp\");\n    print (RF \">$\
7649 name\\n$seq\\n\");\n    close (RF);\n    \n    sys\
7650 tem \"t_coffee -other_pg RNAplfold2tclib.pl -in=$t\
7651 mp -out=$tclib\";\n    \n    unlink ($tmp);\n    r\
7652 eturn $tclib;\n  }\n    \n    \nsub read_fasta_seq\
7653  \n  {\n    my $f=@_[0];\n    my %hseq;\n    my (@\
7654 seq, @com, @name);\n    my ($a, $s,$nseq);\n\n    \
7655 open (F, $f);\n    while (<F>)\n      {\n       $s.=$_;\\
7656 n      }\n    close (F);\n\n    \n    @name=($s=~/\
7657 >(\\S*).*\\n[^>]*/g);\n    \n    @seq =($s=~/>.*.*\
7658 \\n([^>]*)/g);\n    @com =($s=~/>\\S*(.*)\\n([^>]*\
7659 )/g);\n\n    \n    $nseq=$#name+1;\n    \n    for \
7660 ($a=0; $a<$nseq; $a++)\n      {\n       my $n=$name[$a];\
7661 \n      $hseq{$n}{name}=$n;\n   $hseq{$n}{seq}=$seq[$a];\\
7662 n       $hseq{$n}{com}=$com[$a];\n      }\n    return %h\
7663 seq;\n  }\n","use Getopt::Long;\nuse File::Path;\n\
7664 use Env;\nuse FileHandle;\nuse Cwd;\nuse Sys::Host\
7665 name;\nour $PIDCHILD;\nour $ERROR_DONE;\nour @TMPF\
7666 ILE_LIST;\nour $EXIT_FAILURE=1;\nour $EXIT_SUCCESS\
7667 =0;\n\nour $REFDIR=getcwd;\nour $EXIT_SUCCESS=0;\n\
7668 our $EXIT_FAILURE=1;\n\nour $PROGRAM=\"tc_generic_\
7669 method.pl\";\nour $CL=$PROGRAM;\n\nour $CLEAN_EXIT\
7670 _STARTED;\nour $debug_lock=$ENV{\"DEBUG_LOCK\"};\n\
7671 our $LOCKDIR=$ENV{\"LOCKDIR_4_TCOFFEE\"};\nif (!$L\
7672 OCKDIR){$LOCKDIR=getcwd();}\nour $ERRORDIR=$ENV{\"\
7673 ERRORDIR_4_TCOFFEE\"};\nour $ERRORFILE=$ENV{\"ERRO\
7674 RFILE_4_TCOFFEE\"};\n&set_lock ($$);\nif (isshellp\
7675 id(getppid())){lock4tc(getppid(), \"LLOCK\", \"LSE\
7676 T\", \"$$\\n\");}\n      \nour $print;\nmy ($fmsq1\
7677 , $fmsq2, $output, $outfile, $arch, $psv, $hmmtop_\
7678 home, $trim, $cov, $sample, $mode, $gor_home, $gor\
7679 _seq, $gor_obs);\n\nGetOptions(\"-in=s\" => \\$fms\
7680 q1,\"-output=s\" =>\\$output ,\"-out=s\" => \\$out\
7681 file, \"-arch=s\" => \\$arch,\"-psv=s\" => \\$psv,\
7682  \"-hmmtop_home=s\", \\$hmmtop_home,\"-trim=s\" =>\
7683 \\$trim ,\"-print=s\" =>\\$print,\"-cov=s\" =>\\$c\
7684 ov , \"-sample=s\" =>\\$sample, \"-mode=s\" =>\\$m\
7685 ode, \"-gor_home=s\"=>\\$gor_home, \"-gor_seq=s\"=\
7686 >\\$gor_seq,\"-gor_obs=s\"=>\\$gor_obs);\n\n\nif (\
7687 !$mode){$mode = \"hmmtop\"}\nelsif ($mode eq \"hmm\
7688 top\"){;}\nelsif ($mode eq \"gor\"){;}\nelse {myex\
7689 it(flush_error (\"-mode=$mode is unknown\"));}\n\n\
7690 \nour $HOME=$ENV{\"HOME\"};\nour $MCOFFEE=($ENV{\"\
7691 MCOFFEE_4_TCOFFEE\"})?$ENV{\"MCOFFEE_4_TCOFFEE\"}:\
7692 \"$HOME/.t_coffee/mcoffee\";\n\nif ($mode eq \"hmm\
7693 top\")\n  {\n    check_configuration (\"hmmtop\");\
7694 \n    if (-e $arch){$ENV{'HMMTOP_ARCH'}=$arch;}\n \
7695    elsif (-e $ENV{HMMTOP_ARCH}){$arch=$ENV{HMMTOP_\
7696 ARCH};}\n    elsif (-e \"$MCOFFEE/hmmtop.arch\"){$\
7697 arch=$ENV{'HMMTOP_ARCH'}=\"$MCOFFEE/hmmtop.arch\";\
7698 }\n    elsif (-e \"$hmmtop_home/hmmtop.arc\"){$arc\
7699 h=$ENV{'HMMTOP_ARCH'}=\"$hmmtop_home/hmmtop.arc\";\
7700 }\n    else {myexit(flush_error ( \"Could not find\
7701  ARCH file for hmmtop\"));}\n    \n    \n    if (-\
7702 e $psv){$ENV{'HMMTOP_PSV'}=$psv;}\n    elsif (-e $\
7703 ENV{HMMTOP_PSV}){$psv=$ENV{HMMTOP_PSV};}\n    elsi\
7704 f (-e \"$MCOFFEE/hmmtop.psv\"){$psv=$ENV{'HMMTOP_P\
7705 SV'}=\"$MCOFFEE/hmmtop.psv\";}\n    elsif (-e \"$h\
7706 mmtop_home/hmmtop.psv\"){$psv=$ENV{'HMMTOP_PSV'}=\\
7707 "$hmmtop_home/hmmtop.psv\";}\n    else {myexit(flu\
7708 sh_error ( \"Could not find PSV file for hmmtop\")\
7709 );}\n  }\nelsif ($mode eq \"gor\")\n  {\n    our $\
7710 GOR_SEQ;\n    our $GOR_OBS;\n    \n    check_confi\
7711 guration (\"gorIV\");\n    if (-e $gor_seq){$GOR_S\
7712 EQ=$gor_seq;}\n    elsif (-e $ENV{GOR_SEQ}){$GOR_S\
7713 EQ=$ENV{GOR_SEQ};}\n    elsif (-e \"$MCOFFEE/New_K\
7714 S.267.seq\"){$GOR_SEQ=\"$MCOFFEE/New_KS.267.seq\";\
7715 }\n    elsif (-e \"$gor_home/New_KS.267.seq\"){$GO\
7716 R_SEQ=\"$gor_home/New_KS.267.seq\";}\n    else {my\
7717 exit(flush_error ( \"Could not find SEQ file for g\
7718 or\"));}\n\n    if (-e $gor_obs){$GOR_OBS=$gor_obs\
7719 ;}\n    elsif (-e $ENV{GOR_OBS}){$GOR_OBS=$ENV{GOR\
7720 _OBS};}\n    elsif (-e \"$MCOFFEE/New_KS.267.obs\"\
7721 ){$GOR_OBS=\"$MCOFFEE/New_KS.267.obs\";}\n    elsi\
7722 f (-e \"$gor_home/New_KS.267.obs\"){$GOR_OBS=\"$go\
7723 r_home/New_KS.267.obs\";}\n    else {myexit(flush_\
7724 error ( \"Could not find OBS file for gor\"));}\n \
7725  }\n\n\nif ( ! -e $fmsq1){myexit(flush_error (\"Co\
7726 uld Not Read Input file $fmsq1\"));}\n\n\nmy $fmsq\
7727 2=vtmpnam();\nmy $fmsq3=vtmpnam();\nmy $tmpfile=vt\
7728 mpnam();\nmy $predfile=vtmpnam();\n\nif ($trim){$t\
7729 rim_action=\" +trim _aln_%%$trim\\_K1 \";}\nif ($c\
7730 ov) {$cov_action= \" +sim_filter _aln_c$cov \";}\n\
7731 &safe_system(\"t_coffee -other_pg seq_reformat -in\
7732  $fmsq1 -action +convert 'BOUJXZ-' $cov_action $tr\
7733 im_action -output fasta_aln -out $fmsq2\");\nmy (%\
7734 pred, %seq, %predA);\n\n\n%seq=read_fasta_seq($fms\
7735 q2);\n%seq=fasta2sample(\\%seq, $sample);\n\nif (1\
7736 ==2 && $mode eq \"hmmtop\" && $output eq \"cons\")\
7737 \n  {\n    fasta2hmmtop_cons($outfile,\\%seq);\n  \
7738 }\nelse\n  {\n    %pred=fasta2pred(\\%seq, $mode);\
7739 \n    %predA=pred2aln (\\%pred, \\%seq);\n    \n  \
7740   \n    if (!$output || $output eq \"prediction\")\
7741 {output_fasta_seq (\\%predA, $outfile);}\n    elsi\
7742 f ($output eq \"color_html\"){pred2color (\\%pred,\
7743 \\%seq, $outfile);}\n    elsif ($output eq \"cons\\
7744 "){pred2cons($outfile,\\%predA);}\n    else {flush\
7745 _error (\"$output is an unknown output mode\");}\n\
7746   }\n\nsub fasta2sample\n  {\n    my $SR=shift;\n \
7747    my $it=shift;\n    my %S=%$SR;\n    \n    my $s\
7748 eq=index2seq_name (\\%S, 1);\n    my $l=length($S{\
7749 $seq}{seq});\n    my @sl=keys(%S);\n    my $nseq=$\
7750 #sl+1;\n    my $index=$nseq;\n  \n    if (!$sample\
7751 ) {return %S;}\n    for (my $a=0; $a<$it; $a++)\n \
7752      {\n        my $newseq=\"\";\n      my $nname=\"$seq\\_sam\
7753 pled_$index\";\n        for (my $p=0; $p<$l; $p++)\n      {\\
7754 n           my $i=int(rand($nseq));\n       \n      my $nam\
7755 e = $sl[$i];\n      my $seq=$S{$name}{seq};\n       m\
7756 y $r=substr ($seq, $p, 1);\n        $newseq.=$r;\n        \
7757 }\n     $S{$nname}{name}=$nname;\n      $S{$nname}{seq}=$ne\
7758 wseq;\n $S{$nname}{com}=\"sampled\";\n  $S{$nname}{\
7759 index}=++$index;\n      }\n    return %S;\n  }\n         \
7760      \nsub fasta2pred\n  {\n    my $s=shift;\n    \
7761 my $mode=shift;\n\n    if ( $mode eq \"hmmtop\"){r\
7762 eturn fasta2hmmtop_pred($s);}\n    elsif ($mode eq\
7763  \"gor\"){return fasta2gor_pred ($s);}\n  }\nsub f\
7764 asta2hmmtop_cons\n  {\n    my $outfile=shift;\n   \
7765  my $SR=shift;\n    \n    my $o = new FileHandle;\\
7766 n    my $i = new FileHandle;\n    my $tmp_in =vtmp\
7767 nam();\n    my $tmp_out=vtmpnam();\n    my %seq=%$\
7768 SR;\n    my %pred;\n    my $N=keys(%seq);\n    \n \
7769    output_fasta_seq (\\%seq,$tmp_in, \"seq\");\n  \
7770   `hmmtop -pi=mpred -if=$tmp_in -sf=FAS -pl 2>/dev\
7771 /null >$tmp_out`;\n    open ($o, \">$outfile\");\n\
7772     open ($i, \"$tmp_out\");\n    while (<$i>)\n  \
7773     {\n my $l=$_;\n     if (($l=~/>HP\\:\\s+(\\d+)\\s+\
7774 (.*)/)){my $line=\">$2 NSEQ: $N\\n\";print $o \"$l\
7775 ine\";}\n       elsif ( ($l=~/.*pred(.*)/))  {my $line=\\
7776 "$1\\n\";print $o \"$line\";}\n      }\n    close \
7777 ($o);\n    close ($i);\n    return read_fasta_seq(\
7778 $tmp);\n  }\nsub fasta2hmmtop_pred\n  {\n    my $S\
7779 R=shift;\n    my $o = new FileHandle;\n    my $i =\
7780  new FileHandle;\n    my $tmp    =vtmpnam();\n    \
7781 my $tmp_in =vtmpnam();\n    my $tmp_out=vtmpnam();\
7782 \n    my %seq=%$SR;\n    my %pred;\n    \n\n    ou\
7783 tput_fasta_seq (\\%seq,$tmp_in, \"seq\");\n    `hm\
7784 mtop -if=$tmp_in -sf=FAS -pl 2>/dev/null >$tmp_out\
7785 `;\n    open ($o, \">$tmp\");\n    open ($i, \"$tm\
7786 p_out\");\n    while (<$i>)\n      {\n  my $l=$_;\n\
7787         if (($l=~/>HP\\:\\s+(\\d+)\\s+(.*)/)){my $line=\"\
7788 >$2\\n\";print $o \"$line\";}\n elsif ( ($l=~/.*pr\
7789 ed(.*)/))  {my $line=\"$1\\n\";print $o \"$line\";\
7790 }\n      }\n    close ($o);\n    close ($i);\n    \
7791 return read_fasta_seq($tmp);\n  }\n    \n       \n      \n        \
7792   \n    \n      \n\n    \nsub fasta2gor_pred\n  {\n    my $SR\
7793 =shift;\n    my $o = new FileHandle;\n    my $i = \
7794 new FileHandle;\n    my $tmp    =vtmpnam();\n    m\
7795 y $tmp_in =vtmpnam();\n    my $tmp_out=vtmpnam();\\
7796 n    my %seq=%$SR;\n    my %pred;\n    \n\n    out\
7797 put_fasta_seq (\\%seq,$tmp_in, \"seq\");\n    `gor\
7798 IV -prd $tmp_in -seq $GOR_SEQ -obs $GOR_OBS >$tmp_\
7799 out`;\n    open ($o, \">$tmp\");\n    open ($i, \"\
7800 $tmp_out\");\n    while (<$i>)\n      {\n       my $l=$_\
7801 ;\n\n   \n      if ( $l=~/>/){print $o \"$l\";}\n       elsif (\
7802  $l=~/Predicted Sec. Struct./){$l=~s/Predicted Sec\
7803 . Struct\\.//;print $o \"$l\";}\n      }\n    clos\
7804 e ($o);\n    close ($i);\n    return read_fasta_se\
7805 q($tmp);\n  }\n                 \n                           \nsub index2seq_name\n\
7806   {\n    \n    my $SR=shift;\n    my $index=shift;\
7807 \n    \n    \n    my %S=%$SR;\n    \n    foreach m\
7808 y $s (%S)\n      {\n    if ( $S{$s}{index}==$index){r\
7809 eturn $s;}\n      }\n    return \"\";\n  }\n\nsub \
7810 pred2cons\n  {\n    my $outfile=shift;\n    my $pr\
7811 edR=shift;\n    my $seq=shift;\n    my %P=%$predR;\
7812 \n    my %C;\n    my ($s,@r,$nseq);\n    my $f= ne\
7813 w FileHandle;\n\n    open ($f, \">$outfile\");\n\n\
7814     if (!$seq){$seq=index2seq_name(\\%P,1);}\n    \
7815 foreach my $s (keys(%P))\n      {\n     $nseq++;\n      $st\
7816 ring= $P{$s}{seq};\n    $string = uc $string;\n my @r\
7817 =split (//,$string);\n  for (my $a=0; $a<=$#r; $a++\
7818 )\n       {\n       if (($r[$a]=~/[OHICE]/)){$C{$a}{$r[$\
7819 a]}++;}\n         }\n      }\n    @l=keys(%C);\n    \n  \
7820   \n    $s=$P{$seq}{seq};\n    print $f \">$seq pr\
7821 ed based on $nseq\\n\";\n    @r=split (//,$s);\n  \
7822   \n    for (my $x=0; $x<=$#r; $x++)\n      {\n if\
7823  ($r[$x] ne \"-\")\n      {\n       my $h=$C{$x}{H};\n  \
7824     my $i=$C{$x}{I};\n      my $o=$C{$x}{O};\n      \
7825 my $c=$C{$x}{C};\n          my $e=$C{$x}{E};\n      my $\
7826 l=$i+$o;\n          \n      if ($h>=$i && $h>=$o && $h>=\
7827 $c && $h>=$e){$r[$x]='H';}\n        elsif ($i>=$o && \
7828 $i>=$c && $i>=$e){$r[$x]='I';}\n            elsif ($o>=$c\
7829  && $o>=$e){$r[$x]='O';}\n          elsif ($c>=$e){$r[$\
7830 x]='C';}\n          else {$r[$x]='E';}\n          }\n      }\n\
7831     $j=join ('', @r);\n    print $f \"$j\\n\";\n  \
7832   close ($f);\n    return $j;\n  }\n\nsub pred2aln\
7833 \n  {\n    my $PR=shift;\n    my $AR=shift;\n    \\
7834 n    my $f=new FileHandle;\n    my %P=%$PR;\n    m\
7835 y %A=%$AR;\n    my %PA;\n    my $tmp=vtmpnam();\n \
7836    my $f= new FileHandle;\n    \n    open ($f, \">\
7837 $tmp\");\n    foreach my $s (sort{$A{$a}{index}<=>\
7838 $A{$b}{index}}(keys (%A)))\n      {\n   my (@list, $\
7839 seq, @plist, @pseq, $L, $PL, $c, $w);\n my $seq;\n\
7840         my $seq=$A{$s}{seq};\n  my $pred=$P{$s}{seq};\n $s\
7841 eq=pred2alnS($P{$s}{seq},$A{$s}{seq});\n        print $f \
7842 \">$s\\n$seq\\n\";\n      }\n    close ($f);\n    \
7843 return read_fasta_seq ($tmp);\n  }\nsub pred2alnS\\
7844 n  {\n    my $pred=shift;\n    my $aln= shift;\n  \
7845   my ($j,$a,$b);\n    my @P=split (//, $pred);\n  \
7846   my @A=split (//, $aln);\n    for ($a=$b=0;$a<=$#\
7847 A; $a++)\n      {\n     if ($A[$a] ne \"-\"){$A[$a]=$P\
7848 [$b++];}\n      }\n    if ($b!= ($#P+1)){add_warni\
7849 ng (\"Could not thread sequence: $b $#P\");}\n    \
7850 \n    $j= join ('', @A);\n    return $j;\n  }\nsub\
7851  pred2color\n  {\n    my $predP=shift;\n    my $al\
7852 nP=shift;\n    my $out=shift;\n    my $F=new FileH\
7853 andle;\n    my $struc=vtmpnam();\n    my $aln=vtmp\
7854 nam();\n    \n\n    output_fasta_seq ($alnP, $aln)\
7855 ;\n    my %p=%$predP;\n    \n    open ($F, \">$str\
7856 uc\");\n    \n    \n    foreach my $s (keys(%p))\n\
7857       {\n       \n      print $F \">$s\\n\";\n  my $s=uc($p{$s\
7858 }{seq});\n      \n      $s=~s/[Oo]/0/g;\n       $s=~s/[Ee]/0/g;\n       \
7859 \n      $s=~s/[Ii]/5/g;\n       $s=~s/[Cc]/5/g;\n       \n      $s=~s/[H\
7860 h]/9/g;\n       \n      print $F \"$s\\n\";\n      }\n    clo\
7861 se ($F);\n    \n    \n    \n    safe_system ( \"t_\
7862 coffee -other_pg seq_reformat -in $aln -struc_in $\
7863 struc -struc_in_f number_fasta -output color_html \
7864 -out $out\");\n    return;\n  }\n         \n    \nsub di\
7865 splay_fasta_seq\n  {\n    my $SR=shift;\n    my %S\
7866 =%$SR;\n    \n    foreach my $s (sort{$S{$a}{index\
7867 }<=>$S{$b}{index}}(keys (%S)))\n      {\n       print ST\
7868 DERR \">$s\\n$S{$s}{seq}\\n\";\n      }\n    close\
7869  ($f);\n  }\nsub output_fasta_seq\n  {\n    my $SR\
7870 =shift;\n    my $outfile=shift;\n    my $mode =shi\
7871 ft;\n    my $f= new FileHandle;\n    my %S=%$SR;\n\
7872     \n    \n    open ($f, \">$outfile\");\n    for\
7873 each my $s (sort{$S{$a}{index}<=>$S{$b}{index}}(ke\
7874 ys (%S)))\n      {\n    my $seq=$S{$s}{seq};\n  if ( $\
7875 mode eq \"seq\"){$seq=~s/\\-//g;}\n     print $f \">$s\
7876 \\n$seq\\n\";\n      }\n    close ($f);\n  }\n    \
7877   \nsub read_fasta_seq \n  {\n    my $f=$_[0];\n  \
7878   my %hseq;\n    my (@seq, @com, @name);\n    my (\
7879 $a, $s,$nseq);\n    my $index;\n    open (F, $f);\\
7880 n    while (<F>)\n      {\n     $s.=$_;\n      }\n    \
7881 close (F);\n\n    \n    @name=($s=~/>(\\S*).*\\n[^\
7882 >]*/g);\n    \n    @seq =($s=~/>.*.*\\n([^>]*)/g);\
7883 \n    @com =($s=~/>.*(.*)\\n([^>]*)/g);\n\n\n    $\
7884 nseq=$#name+1;\n    \n  \n    for ($a=0; $a<$nseq;\
7885  $a++)\n      {\n       my $n=$name[$a];\n      my $s;\n        $hse\
7886 q{$n}{name}=$n;\n       $s=$seq[$a];$s=~s/\\s//g;\n     $hse\
7887 q{$n}{index}=++$index;\n        $hseq{$n}{seq}=$s;\n    $hse\
7888 q{$n}{com}=$com[$a];\n      }\n    return %hseq;\n\
7889   }\n\n\nsub file2head\n      {\n       my $file = shift\
7890 ;\n     my $size = shift;\n     my $f= new FileHandle;\n        m\
7891 y $line;\n      open ($f,$file);\n      read ($f,$line, $siz\
7892 e);\n   close ($f);\n   return $line;\n      }\nsub fi\
7893 le2tail\n      {\n      my $file = shift;\n     my $size = \
7894 shift;\n        my $f= new FileHandle;\n        my $line;\n     \n      o\
7895 pen ($f,$file);\n       seek ($f,$size*-1, 2);\n        read ($\
7896 f,$line, $size);\n      close ($f);\n   return $line;\n  \
7897     }\n\n\nsub vtmpnam\n      {\n       my $r=rand(10000\
7898 0);\n   my $f=\"file.$r.$$\";\n while (-e $f)\n   {\\
7899 n           $f=vtmpnam();\n       }\n   push (@TMPFILE_LIST, $\
7900 f);\n   return $f;\n      }\n\nsub myexit\n  {\n    \
7901 my $code=@_[0];\n    if ($CLEAN_EXIT_STARTED==1){r\
7902 eturn;}\n    else {$CLEAN_EXIT_STARTED=1;}\n    ##\
7903 # ONLY BARE EXIT\n    exit ($code);\n  }\nsub set_\
7904 error_lock\n    {\n      my $name = shift;\n      \
7905 my $pid=$$;\n\n      \n      &lock4tc ($$,\"LERROR\
7906 \", \"LSET\", \"$$ -- ERROR: $name $PROGRAM\\n\");\
7907 \n      return;\n    }\nsub set_lock\n  {\n    my \
7908 $pid=shift;\n    my $msg= shift;\n    my $p=getppi\
7909 d();\n    &lock4tc ($pid,\"LLOCK\",\"LRESET\",\"$p\
7910 $msg\\n\");\n  }\nsub unset_lock\n   {\n     \n   \
7911  my $pid=shift;\n    &lock4tc ($pid,\"LLOCK\",\"LR\
7912 ELEASE\",\"\");\n  }\nsub shift_lock\n  {\n    my \
7913 $from=shift;\n    my $to=shift;\n    my $from_type\
7914 =shift;\n    my $to_type=shift;\n    my $action=sh\
7915 ift;\n    my $msg;\n    \n    if (!&lock4tc($from,\
7916  $from_type, \"LCHECK\", \"\")){return 0;}\n    $m\
7917 sg=&lock4tc ($from, $from_type, \"LREAD\", \"\");\\
7918 n    &lock4tc ($from, $from_type,\"LRELEASE\", $ms\
7919 g);\n    &lock4tc ($to, $to_type, $action, $msg);\\
7920 n    return;\n  }\nsub isshellpid\n  {\n    my $p=\
7921 shift;\n    if (!lock4tc ($p, \"LLOCK\", \"LCHECK\\
7922 ")){return 0;}\n    else\n      {\n     my $c=lock4tc(\
7923 $p, \"LLOCK\", \"LREAD\");\n    if ( $c=~/-SHELL-/){r\
7924 eturn 1;}\n      }\n    return 0;\n  }\nsub isroot\
7925 pid\n  {\n    if(lock4tc (getppid(), \"LLOCK\", \"\
7926 LCHECK\")){return 0;}\n    else {return 1;}\n  }\n\
7927 sub lock4tc\n   {\n       my ($pid,$type,$action,$value)\
7928 =@_;\n    my $fname;\n    my $host=hostname;\n    \n    \
7929   if ($type eq \"LLOCK\"){$fname=\"$LOCKDIR/.$pid.\
7930 $host.lock4tcoffee\";}\n          elsif ( $type eq \"LERR\
7931 OR\"){ $fname=\"$LOCKDIR/.$pid.$host.error4tcoffee\
7932 \";}\n    elsif ( $type eq \"LWARNING\"){ $fname=\"\
7933 $LOCKDIR/.$pid.$host.warning4tcoffee\";}\n        \n      \
7934 if ($debug_lock)\n          {\n       print STDERR \"\\\
7935 n\\t---lock4tc(tcg): $action => $fname =>$value (R\
7936 D: $LOCKDIR)\\n\";\n        }\n\n         if    ($action eq\
7937  \"LCHECK\") {return -e $fname;}\n        elsif ($actio\
7938 n eq \"LREAD\"){return file2string($fname);}\n    e\
7939 lsif ($action eq \"LSET\") {return string2file ($v\
7940 alue, $fname, \">>\");}\n         elsif ($action eq \"LR\
7941 ESET\") {return string2file ($value, $fname, \">\"\
7942 );}\n     elsif ($action eq \"LRELEASE\") \n        {\n\
7943               if ( $debug_lock)\n               {\n               my $g=new FileH\
7944 andle;\n                  open ($g, \">>$fname\");\n              print $g\
7945  \"\\nDestroyed by $$\\n\";\n             close ($g);\n           \
7946 safe_system (\"mv $fname $fname.old\");\n               }\n        \
7947    else\n               {\n               unlink ($fname);\n            }\n         }\n \
7948   return \"\";\n        }\n     \nsub file2string\n     {\n       my \
7949 $file=@_[0];\n    my $f=new FileHandle;\n         my $r;\\
7950 n         open ($f, \"$file\");\n         while (<$f>){$r.=$_;\
7951 }\n       close ($f);\n   return $r;\n  }\nsub string2f\
7952 ile \n    {\n    my ($s,$file,$mode)=@_;\n    my $\
7953 f=new FileHandle;\n    \n    open ($f, \"$mode$fil\
7954 e\");\n    print $f  \"$s\";\n    close ($f);\n  }\
7955 \n\nBEGIN\n    {\n      srand;\n    \n      $SIG{'\
7956 SIGUP'}='signal_cleanup';\n      $SIG{'SIGINT'}='s\
7957 ignal_cleanup';\n      $SIG{'SIGQUIT'}='signal_cle\
7958 anup';\n      $SIG{'SIGILL'}='signal_cleanup';\n  \
7959     $SIG{'SIGTRAP'}='signal_cleanup';\n      $SIG{\
7960 'SIGABRT'}='signal_cleanup';\n      $SIG{'SIGEMT'}\
7961 ='signal_cleanup';\n      $SIG{'SIGFPE'}='signal_c\
7962 leanup';\n      \n      $SIG{'SIGKILL'}='signal_cl\
7963 eanup';\n      $SIG{'SIGPIPE'}='signal_cleanup';\n\
7964       $SIG{'SIGSTOP'}='signal_cleanup';\n      $SI\
7965 G{'SIGTTIN'}='signal_cleanup';\n      $SIG{'SIGXFS\
7966 Z'}='signal_cleanup';\n      $SIG{'SIGINFO'}='sign\
7967 al_cleanup';\n      \n      $SIG{'SIGBUS'}='signal\
7968 _cleanup';\n      $SIG{'SIGALRM'}='signal_cleanup'\
7969 ;\n      $SIG{'SIGTSTP'}='signal_cleanup';\n      \
7970 $SIG{'SIGTTOU'}='signal_cleanup';\n      $SIG{'SIG\
7971 VTALRM'}='signal_cleanup';\n      $SIG{'SIGUSR1'}=\
7972 'signal_cleanup';\n\n\n      $SIG{'SIGSEGV'}='sign\
7973 al_cleanup';\n      $SIG{'SIGTERM'}='signal_cleanu\
7974 p';\n      $SIG{'SIGCONT'}='signal_cleanup';\n    \
7975   $SIG{'SIGIO'}='signal_cleanup';\n      $SIG{'SIG\
7976 PROF'}='signal_cleanup';\n      $SIG{'SIGUSR2'}='s\
7977 ignal_cleanup';\n\n      $SIG{'SIGSYS'}='signal_cl\
7978 eanup';\n      $SIG{'SIGURG'}='signal_cleanup';\n \
7979      $SIG{'SIGCHLD'}='signal_cleanup';\n      $SIG\
7980 {'SIGXCPU'}='signal_cleanup';\n      $SIG{'SIGWINC\
7981 H'}='signal_cleanup';\n      \n      $SIG{'INT'}='\
7982 signal_cleanup';\n      $SIG{'TERM'}='signal_clean\
7983 up';\n      $SIG{'KILL'}='signal_cleanup';\n      \
7984 $SIG{'QUIT'}='signal_cleanup';\n      \n      our \
7985 $debug_lock=$ENV{\"DEBUG_LOCK\"};\n      \n      \\
7986 n      \n      \n      foreach my $a (@ARGV){$CL.=\
7987 \" $a\";}\n      if ( $debug_lock ){print STDERR \\
7988 "\\n\\n\\n********** START PG: $PROGRAM **********\
7989 ***\\n\";}\n      if ( $debug_lock ){print STDERR \
7990 \"\\n\\n\\n**********(tcg) LOCKDIR: $LOCKDIR $$ **\
7991 ***********\\n\";}\n      if ( $debug_lock ){print\
7992  STDERR \"\\n --- $$ -- $CL\\n\";}\n      \n         \
7993 \n      \n      \n    }\nsub flush_error\n  {\n   \
7994  my $msg=shift;\n    return add_error ($EXIT_FAILU\
7995 RE,$$, $$,getppid(), $msg, $CL);\n  }\nsub add_err\
7996 or \n  {\n    my $code=shift;\n    my $rpid=shift;\
7997 \n    my $pid=shift;\n    my $ppid=shift;\n    my \
7998 $type=shift;\n    my $com=shift;\n    \n    $ERROR\
7999 _DONE=1;\n    lock4tc ($rpid, \"LERROR\",\"LSET\",\
8000 \"$pid -- ERROR: $type\\n\");\n    lock4tc ($$, \"\
8001 LERROR\",\"LSET\", \"$pid -- COM: $com\\n\");\n   \
8002  lock4tc ($$, \"LERROR\",\"LSET\", \"$pid -- STACK\
8003 : $ppid -> $pid\\n\");\n   \n    return $code;\n  \
8004 }\nsub add_warning \n  {\n    my $rpid=shift;\n   \
8005  my $pid =shift;\n    my $command=shift;\n    my $\
8006 msg=\"$$ -- WARNING: $command\\n\";\n    print STD\
8007 ERR \"$msg\";\n    lock4tc ($$, \"LWARNING\", \"LS\
8008 ET\", $msg);\n  }\n\nsub signal_cleanup\n  {\n    \
8009 print dtderr \"\\n**** $$ (tcg) was killed\\n\";\n\
8010     &cleanup;\n    exit ($EXIT_FAILURE);\n  }\nsub\
8011  clean_dir\n  {\n    my $dir=@_[0];\n    if ( !-d \
8012 $dir){return ;}\n    elsif (!($dir=~/tmp/)){return\
8013  ;}#safety check 1\n    elsif (($dir=~/\\*/)){retu\
8014 rn ;}#safety check 2\n    else\n      {\n       `rm -rf \
8015 $dir`;\n      }\n    return;\n  }\nsub cleanup\n  \
8016 {\n    #print stderr \"\\n----tc: $$ Kills $PIDCHI\
8017 LD\\n\";\n    #kill (SIGTERM,$PIDCHILD);\n    my $\
8018 p=getppid();\n    $CLEAN_EXIT_STARTED=1;\n    \n  \
8019   \n    \n    if (&lock4tc($$,\"LERROR\", \"LCHECK\
8020 \", \"\"))\n      {\n   my $ppid=getppid();\n   if (!$\
8021 ERROR_DONE) \n    {\n       &lock4tc($$,\"LERROR\", \\
8022 "LSET\", \"$$ -- STACK: $p -> $$\\n\");\n           &loc\
8023 k4tc($$,\"LERROR\", \"LSET\", \"$$ -- COM: $CL\\n\\
8024 ");\n     }\n      }\n    my $warning=&lock4tc($$, \\
8025 "LWARNING\", \"LREAD\", \"\");\n    my $error=&loc\
8026 k4tc($$,  \"LERROR\", \"LREAD\", \"\");\n    #rele\
8027 ase error and warning lock if root\n    \n    if (\
8028 isrootpid() && ($warning || $error) )\n      {\n        \\
8029 n       print STDERR \"**************** Summary ********\
8030 *****\\n$error\\n$warning\\n\";\n\n     &lock4tc($$,\"\
8031 LERROR\",\"RELEASE\",\"\");\n   &lock4tc($$,\"LWARNI\
8032 NG\",\"RELEASE\",\"\");\n      } \n    \n    \n   \
8033  foreach my $f (@TMPFILE_LIST)\n      {\n       if (-e $\
8034 f){unlink ($f);} \n      }\n    foreach my $d (@TM\
8035 PDIR_LIST)\n      {\n   clean_dir ($d);\n      }\n  \
8036   #No More Lock Release\n    #&lock4tc($$,\"LLOCK\\
8037 ",\"LRELEASE\",\"\"); #release lock \n\n    if ( $\
8038 debug_lock ){print STDERR \"\\n\\n\\n********** EN\
8039 D PG: $PROGRAM ($$) *************\\n\";}\n    if (\
8040  $debug_lock ){print STDERR \"\\n\\n\\n**********(\
8041 tcg) LOCKDIR: $LOCKDIR $$ *************\\n\";}\n  \
8042 }\nEND \n  {\n    \n    &cleanup();\n  }\n   \n\ns\
8043 ub safe_system \n{\n  my $com=shift;\n  my $ntry=s\
8044 hift;\n  my $ctry=shift;\n  my $pid;\n  my $status\
8045 ;\n  my $ppid=getppid();\n  if ($com eq \"\"){retu\
8046 rn 1;}\n  \n  \n\n  if (($pid = fork ()) < 0){retu\
8047 rn (-1);}\n  if ($pid == 0)\n    {\n      set_lock\
8048 ($$, \" -SHELL- $com (tcg)\");\n      exec ($com);\
8049 \n    }\n  else\n    {\n      lock4tc ($$, \"LLOCK\
8050 \", \"LSET\", \"$pid\\n\");#update parent\n      $\
8051 PIDCHILD=$pid;\n    }\n  if ($debug_lock){printf S\
8052 TDERR \"\\n\\t .... safe_system (fasta_seq2hmm)  p\
8053 : $$ c: $pid COM: $com\\n\";}\n\n  waitpid ($pid,W\
8054 TERMSIG);\n\n  shift_lock ($pid,$$, \"LWARNING\",\\
8055 "LWARNING\", \"LSET\");\n\n  if ($? == $EXIT_FAILU\
8056 RE || lock4tc($pid, \"LERROR\", \"LCHECK\", \"\"))\
8057 \n    {\n      if ($ntry && $ctry <$ntry)\n     {\n       \
8058 add_warning ($$,$$,\"$com failed [retry: $ctry]\")\
8059 ;\n       lock4tc ($pid, \"LRELEASE\", \"LERROR\", \"\\
8060 ");\n     return safe_system ($com, $ntry, ++$ctry);\
8061 \n      }\n      elsif ($ntry == -1)\n  {\n       if (!shift\
8062 _lock ($pid, $$, \"LERROR\", \"LWARNING\", \"LSET\\
8063 "))\n       {\n       add_warning ($$,$$,\"$com fail\
8064 ed\");\n            }\n   else\n            {\n       lock4tc ($\
8065 pid, \"LRELEASE\", \"LERROR\", \"\");\n     }\n   \
8066 return $?;}\n      else\n       {\n       if (!shift_lock ($\
8067 pid,$$, \"LERROR\",\"LERROR\", \"LSET\"))\n         {\\
8068 n             myexit(add_error ($EXIT_FAILURE,$$,$pid,ge\
8069 tppid(), \"UNSPECIFIED system\", $com));\n          }\n\
8070         }\n    }\n  return $?;\n}\n\nsub check_configurat\
8071 ion \n    {\n      my @l=@_;\n      my $v;\n      \
8072 foreach my $p (@l)\n    {\n       \n      if   ( $p eq \"EMA\
8073 IL\")\n     { \n              if ( !($EMAIL=~/@/))\n            {\n\
8074                 add_warning($$,$$,\"Could Not Use EMAIL\");\n           m\
8075 yexit(add_error ($EXIT_FAILURE,$$,$$,getppid(),\"E\
8076 MAIL\",\"$CL\"));\n           }\n           }\n   elsif( $p \
8077 eq \"INTERNET\")\n          {\n       if ( !&check_inte\
8078 rnet_connection())\n            {\n               myexit(add_error ($EX\
8079 IT_FAILURE,$$,$$,getppid(),\"INTERNET\",\"$CL\"));\
8080 \n              }\n         }\n   elsif( $p eq \"wget\")\n          {\n\
8081               if (!&pg_is_installed (\"wget\") && !&pg_is\
8082 _installed (\"curl\"))\n                {\n               myexit(add_error \
8083 ($EXIT_FAILURE,$$,$$,getppid(),\"PG_NOT_INSTALLED:\
8084 wget\",\"$CL\"));\n             }\n         }\n   elsif( !(&pg_is\
8085 _installed ($p)))\n         {\n       myexit(add_error\
8086  ($EXIT_FAILURE,$$,$$,getppid(),\"PG_NOT_INSTALLED\
8087 :$p\",\"$CL\"));\n          }\n }\n      return 1;\n   \
8088  }\nsub pg_is_installed\n  {\n    my @ml=@_;\n    \
8089 my $r, $p, $m;\n    my $supported=0;\n    \n    my\
8090  $p=shift (@ml);\n    if ($p=~/::/)\n      {\n  if \
8091 (safe_system (\"perl -M$p -e 1\")==$EXIT_SUCCESS){\
8092 return 1;}\n    else {return 0;}\n      }\n    else\n\
8093       {\n       $r=`which $p 2>/dev/null`;\n    if ($r eq \\
8094 "\"){return 0;}\n       else {return 1;}\n      }\n  }\n\
8095 \n\n\nsub check_internet_connection\n  {\n    my $\
8096 internet;\n    my $tmp;\n    &check_configuration \
8097 ( \"wget\"); \n    \n    $tmp=&vtmpnam ();\n    \n\
8098     if     (&pg_is_installed    (\"wget\")){`wget \
8099 www.google.com -O$tmp >/dev/null 2>/dev/null`;}\n \
8100    elsif  (&pg_is_installed    (\"curl\")){`curl w\
8101 ww.google.com -o$tmp >/dev/null 2>/dev/null`;}\n  \
8102   \n    if ( !-e $tmp || -s $tmp < 10){$internet=0\
8103 ;}\n    else {$internet=1;}\n    if (-e $tmp){unli\
8104 nk $tmp;}\n\n    return $internet;\n  }\nsub check\
8105 _pg_is_installed\n  {\n    my @ml=@_;\n    my $r=&\
8106 pg_is_installed (@ml);\n    if (!$r && $p=~/::/)\n\
8107       {\n       print STDERR \"\\nYou Must Install the p\
8108 erl package $p on your system.\\nRUN:\\n\\tsudo pe\
8109 rl -MCPAN -e 'install $pg'\\n\";\n      }\n    els\
8110 if (!$r)\n      {\n     myexit(flush_error(\"\\nProgra\
8111 m $p Supported but Not Installed on your system\")\
8112 );\n      }\n    else\n      {\n        return 1;\n      \
8113 }\n  }\n\n\n\n","\n\n\n\n\nmy $FMODEL =\"\"; \nmy \
8114 $TMPDIR = \"/tmp\";\n\n\n\n\nmy $NUCALPH = \"ACGTU\
8115 NRYMKSWHBVD\";\nmy $PRIMNUCALPH = \"ACGTUN\";\nuse\
8116  vars qw($NUCALPH $PRIMNUCALPH $TMPDIR);\n\n\nmy $\
8117 errmsg;\nuse vars qw($errmsg);\n\n\n\nuse Getopt::\
8118 Long;\nuse Cwd;\nuse File::Basename;\nuse File::Te\
8119 mp qw/ tempfile tempdir /;\nuse File::Copy;\nuse F\
8120 ile::Path;\n\n\n\nsub usage(;$)\n{\n    my ($errms\
8121 g) = @_;\n    my $myname = basename($0);\n\n    if\
8122  ($errmsg) {\n        print STDERR \"ERROR: $errms\
8123 g\\n\";\n    }\n\n    print STDERR << \"EOF\";\n  \
8124   \n$myname: align two sequences by means of consa\
8125 n\\'s sfold\nUsage:\n $myname -i file -o file -d p\
8126 ath\nOptions:\n -i|--in : pairwise input sequence \
8127 file\n -o|--out: output alignment\n -d|--directory\
8128  containing data\n\nEOF\n}\n\nsub read_stk_aln \n \
8129  {\n    my $f=$_[0];\n    my ($seq, $id);\n    \n \
8130    my %hseq;\n\n    open (STK, \"$f\");\n    while\
8131  (<STK>)\n      {\n     if ( /^#/ || /^\\/\\// || /^\\\
8132 s*$/){;}\n      else\n    {\n       ($id,$seq)=/(\\S+)\\s+\
8133 (\\S+)/;\n          $hseq{$id}{'seq'}.=$seq;\n    }\n   \
8134    }\n    close (STK);\n    return %hseq;\n  }\nsu\
8135 b read_fasta_seq \n  {\n    my $f=$_[0];\n    my %\
8136 hseq;\n    my (@seq, @com, @name);\n    my ($a, $s\
8137 ,$nseq);\n\n    open (F, $f);\n    while (<F>)\n  \
8138     {\n $s.=$_;\n      }\n    close (F);\n\n    \n\
8139     @name=($s=~/>(.*).*\\n[^>]*/g);\n    \n    @se\
8140 q =($s=~/>.*.*\\n([^>]*)/g);\n    @com =($s=~/>.*(\
8141 .*)\\n([^>]*)/g);\n\n    \n    $nseq=$#name+1;\n  \
8142   \n    for ($a=0; $a<$nseq; $a++)\n      {\n   my $\
8143 n=$name[$a];\n  $hseq{$n}{name}=$n;\n   $hseq{$n}{seq\
8144 }=$seq[$a];\n   $hseq{$n}{com}=$com[$a];\n      }\n \
8145    return %hseq;\n  }\n\n\n\nsub sfold_parseoutput\
8146 ($$)\n{\n    my ($frawout, $foutfa) = @_;\n    my \
8147 %haln;\n    my ($fstk, $cmd, $id);\n    open FOUTF\
8148 A, \">$foutfa\";\n    \n    $fstk = $frawout . \".\
8149 stk\";\n    \n    # first line of raw out contains\
8150  info\n    # remaining stuff is stockholm formatte\
8151 d\n    $cmd = \"sed -e '1d' $frawout\";\n    syste\
8152 m(\"$cmd > $fstk\");\n    if ($? != 0) {\n        \
8153 $errmsg = \"command failed with exit status $?.\";\
8154 \n        $errmsg .=  \"Command was \\\"$cmd\\\"\"\
8155 ;\n        return -1;\n    }\n\n    # this gives a\
8156 n error message. just ignore it...\n    %haln=read\
8157 _stk_aln ( $fstk);\n    foreach $i (keys (%haln))\\
8158 n      {\n      my $s;\n        $s=$haln{$i}{'seq'};\n  $s =~ s\
8159 /\\./-/g;\n     print FOUTFA \">$i\\n$s\\n\";\n      }\
8160 \n    close FOUTFA;\n    return 0;\n}\n\n\n\n\nsub\
8161  sfold_wrapper($$$$)\n{\n    \n    my ($fs1, $fs2,\
8162  $fmodel, $foutfa) = @_;\n    \n\n    my ($cmd, $f\
8163 rawout, $ferrlog, $freadme, $ftimelog, $fstk);\n\n\
8164     # add  basename($fmsqin) (unknown here!)\n    \
8165 $frawout = \"sfold.log\";\n    $ferrlog = \"sfold.\
8166 err\";\n    $ftimelog = \"sfold.time\";\n    $frea\
8167 dme =  \"sfold.README\";\n    $fstk = \"sfold.stk\\
8168 ";\n    \n    # prepare execution...\n    #\n    #\
8169  ./tmp is essential for dswpalign\n    # otherwise\
8170  you'll get a segfault\n    mkdir \"./tmp\";\n    \
8171 \n    $cmd = \"sfold -m $fmodel $fs1 $fs2\";\n    \
8172 open(FREADME,\">$freadme\");\n    print FREADME \"\
8173 $cmd\\n\"; \n    close(FREADME);\n\n    # and go\n\
8174     #\n    system(\"/usr/bin/time -p -o $ftimelog \
8175 $cmd >$frawout 2>$ferrlog\");\n    if ($? != 0) {\\
8176 n        $errmsg = \"command failed with exit stat\
8177 us $?\";\n        $errmsg .= \"command was \\\"$cm\
8178 d\\\". See \" . getcwd . \"\\n\";\n        return \
8179 -1;\n    }\n\n    return sfold_parseoutput($frawou\
8180 t, $foutfa);\n}\n\n\n\n\n\n\n\nmy ($help, $fmsqin,\
8181  $fmsaout);\nGetOptions(\"help\"  => \\$help,\n   \
8182         \"in=s\" => \\$fmsqin,\n           \"out=s\
8183 \" => \\$fmsaout,\n        \"data=s\" => \\$ref_dir);\\
8184 n\n\n\nif ($help) {\n    usage();\n    exit(0);\n}\
8185 \nif (! defined($fmsqin)) {\n    usage('missing in\
8186 put filename');\n    exit(1);\n}\nif (! defined($f\
8187 msaout)) {\n    usage('missing output filename');\\
8188 n    exit(1);\n\n}\nif (scalar(@ARGV)) {\n    usag\
8189 e('Unknown remaining args');\n    exit(1);\n}\n\n$\
8190 FMODEL = \"$ref_dir/mix80.mod\";\nif (! -e \"$FMOD\
8191 EL\") {\n    die(\"couldn't find sfold grammar mod\
8192 el file. Expected $FMODEL\\n\");\n}\n\n\nmy %hseq=\
8193 read_fasta_seq ($fmsqin);\nmy $id;\n\nforeach $id \
8194 (keys(%hseq))\n  {\n    push(@seq_array, $hseq{$id\
8195 });\n  }\n\nif ( scalar(@seq_array) != 2 ) {\n    \
8196 die(\"Need *exactly* two sequences as input (pairw\
8197 ise alignment!).\")\n}\n\n\n\nmy ($sec, $min, $hou\
8198 r, $mday, $mon, $year, $wday, $yday, $isdst) = loc\
8199 altime(time);\nmy $datei = sprintf(\"%4d-%02d-%02d\
8200 \", $year+1900, $mon+1, $mday);\nmy $templ = basen\
8201 ame($0) . \".\" . $datei . \".pid-\" . $$ . \".XXX\
8202 XXX\";\nmy $wd = tempdir ( $templ, DIR => $TMPDIR)\
8203 ;\n\ncopy($fmsqin, \"$wd/\" . basename($fmsqin) . \
8204 \".org\"); # for reproduction\ncopy($FMODEL, \"$wd\
8205 \");\nmy $fmodel = basename($FMODEL);\nmy $orgwd =\
8206  getcwd;\nchdir $wd;\n\n\n\nmy @sepseqfiles;\nfore\
8207 ach $id (keys(%hseq)) {\n    my ($seq, $orgseq, $f\
8208 name, $sout);\n    $seq=$hseq{$id}{'seq'};\n    \n\
8209     $fname = basename($fmsqin) . \"_$id.fa\";\n   \
8210  # replace funnies in file/id name (e.g. \"/\" \" \
8211 \" etc)\n    $fname =~ s,[/ ],_,g;\n    open (PF, \
8212 \">$fname\");\n    print (PF \">$id\\n$seq\\n\");\\
8213 n    close (PF);\n\n    push(@sepseqfiles, $fname)\
8214 ;\n}\n\nmy ($f1, $f2, $fout);\n$f1 = $sepseqfiles[\
8215 0];\n$f2 = $sepseqfiles[1];\n$fout = $wd . basenam\
8216 e($fmsqin) . \".out.fa\";\nif (sfold_wrapper($f1, \
8217 $f2, $fmodel, \"$fout\") != 0) {\n    printf STDER\
8218 R \"ERROR: See logs in $wd\\n\";\n    exit(1);\n} \
8219 else {\n    chdir $orgwd;\n    copy($fout, $fmsaou\
8220 t);\n    rmtree($wd);\n   exit(0);\n}\n","\nuse En\
8221 v qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\\
8222 n\n\n$tmp=clean_cr ($ARGV[0]);\nopen (F, $tmp);\n\\
8223 nwhile ( <F>)\n  {\n    my $l=$_;\n    if ( $l=~/^\
8224 # STOCKHOLM/){$stockholm=1;}\n    elsif ( $stockho\
8225 lm && $l=~/^#/)\n      {\n      $l=~/^#(\\S+)\\s+(\\S+)\
8226 \\s+(\\S*)/g;\n $l=\"_stockholmhasch_$1\\_stockhol\
8227 mspace_$2 $3\\n\";\n      }\n    $file.=$l;\n  }\n\
8228 close (F);\nunlink($tmp);\n$file1=$file;\n\n$file=\
8229 ~s/\\#/_hash_symbol_/g;\n$file=~s/\\@/_arobase_sym\
8230 bol_/g;\n\n\n$file=~s/\\n[\\.:*\\s]+\\n/\\n\\n/g;\\
8231 n\n$file=~s/\\n[ \\t\\r\\f]+(\\b)/\\n\\1/g;\n\n\n$\
8232 file=~s/(\\n\\S+)(\\s+)(\\S)/\\1_blank_\\3/g;\n\n$\
8233 file=~s/[ ]//g;\n$file=~s/_blank_/ /g;\n\n\n\n$fil\
8234 e =~s/\\n\\s*\\n/#/g;\n\n$file.=\"#\";\n$file =~s/\
8235 \\n/@/g;\n\n\n\n\n@blocks=split /\\#/, $file;\nshi\
8236 ft (@blocks);\n@s=split /\\@/, $blocks[0];\n$nseq=\
8237 $#s+1;\n\n\n\n$file=join '@', @blocks;\n@lines=spl\
8238 it /\\@/,$file;\n\n$c=0;\n\nforeach $l (@lines)\n \
8239  {\n    if (!($l=~/\\S/)){next;}\n    elsif ($stoc\
8240 kholm && ($l=~/^\\/\\// || $l=~/STOCKHOLM/)){next;\
8241 }#get read of STOCHOLM Terminator\n   \n    $l=~/(\
8242 \\S+)\\s+(\\S*)/g;\n    $n=$1; $s=$2;\n    \n    $\
8243 seq[$c].=$s;\n    $name[$c]=$n;\n    $c++;\n    \n\
8244     if ( $c==$nseq){$c=0;}\n    \n  } \n\nif ( $c!\
8245 =0)\n      {\n  print STDERR \"ERROR: $ARGV[0] is N\
8246 OT an MSA in Clustalw format: make sure there is n\
8247 o blank line within a block [ERROR]\\n\";\n     exit (\
8248 EXIT_FAILURE);\n      }\n\nfor ($a=0; $a< $nseq; $\
8249 a++)\n  {\n    $name[$a]=cleanstring ($name[$a]);\\
8250 n    $seq[$a]=cleanstring ($seq[$a]);\n    $seq[$a\
8251 ]=breakstring($seq[$a], 60);\n    \n    $line=\">$\
8252 name[$a]\\n$seq[$a]\\n\";\n    \n    print \"$line\
8253 \";\n  }\nexit (EXIT_SUCCESS);\n\nsub cleanstring\\
8254 n  {\n    my $s=@_[0];\n    $s=~s/_hash_symbol_/\\\
8255 #/g;\n    $s=~s/_arobase_symbol_/\\@/g;\n    $s=~s\
8256 /[ \\t]//g;\n    return $s;\n  }\nsub breakstring\\
8257 n  {\n    my $s=@_[0];\n    my $size=@_[1];\n    m\
8258 y @list;\n    my $n,$ns, $symbol;\n    \n    @list\
8259 =split //,$s;\n    $n=0;$ns=\"\";\n    foreach $sy\
8260 mbol (@list)\n      {\n if ( $n==$size)\n         {\n     \
8261   $ns.=\"\\n\";\n           $n=0;\n       }\n   $ns.=$symbol;\\
8262 n       $n++;\n      }\n    return $ns;\n    }\n\nsub cl\
8263 ean_cr\n  {\n    my $f=@_[0];\n    my $file;\n    \
8264 \n    $tmp=\"f$.$$\";\n    \n    \n    open (IN, $\
8265 f);\n    open (OUT, \">$tmp\");\n    \n    while (\
8266  <IN>)\n      {\n       $file=$_;\n     $file=~s/\\r\\n/\\n/\
8267 g;\n    $file=~s/\\n\\r/\\n/g;\n        $file=~s/\\r\\r/\\n/\
8268 g;\n    $file=~s/\\r/\\n/g;\n   print OUT \"$file\";\n \
8269      }\n    \n    close (IN);\n    close (OUT);\n \
8270    return $tmp;\n  }\n","use Env qw(HOST);\nuse En\
8271 v qw(HOME);\nuse Env qw(USER);\n\n\n$query_start=-\
8272 1;\n$query_end=-1;\n\nwhile (<>)\n  {\n    if ( /\\
8273 \/\\//){$in_aln=1;}\n    elsif ( $in_aln && /(\\S+\
8274 )\\s+(.*)/)\n      {\n\n\n      $name=$1;\n     \n\n    $seq=$\
8275 2;\n    $seq=~s/\\s//g;\n        $seq=~s/\\~/\\-/g;\n\
8276         $seq=~s/\\./\\-/g;\n    if ( $list{$n}{'name'} && $l\
8277 ist{$n}{'name'} ne $name)\n       {\n       print \"$lis\
8278 t{$n}{'name'} Vs $name\";\n         \n      exit (EXIT_\
8279 FAILURE);\n       }\n   else\n    {\n       $list{$n}{'name\
8280 '}= $name;\n      }\n\n $list{$n}{'seq'}=$list{$n}{'s\
8281 eq'}.$seq;\n    \n      $nseq=++$n;\n   \n      }\n    else\\
8282 n      {$n=0;}\n  }\n\n\nfor ($a=0; $a<$nseq; $a++\
8283 )\n  {\n    print \">$list{$a}{'name'}\\n$list{$a}\
8284 {'seq'}\\n\";\n  }\n      \n","\nuse Env qw(HOST);\
8285 \nuse Env qw(HOME);\nuse Env qw(USER);\n\n        \
8286                                                 \n\
8287 use strict;                                       \
8288       \nuse warnings;\nuse diagnostics;\n\nmy $in_\
8289 hit_list, my $in_aln=0, my(%name_list)=(),my (%lis\
8290 t)=(),my $n_seq=0; my $test=0;\nmy($j)=0, my $n=0,\
8291  my $nom, my $lg_query, my %vu=();\n\nopen (F, \">\
8292 tmp\");\n\n$/=\"\\n\";\nwhile (<>)\n{\n    print F\
8293  $_;\n    if($_ =~ /Query=\\s*(.+?)\\s/i) { $nom=$\
8294 1;}\n\n    if ( /Sequences producing significant a\
8295 lignments/){$in_hit_list=1;}\n    \n    if ($_=~ /\
8296 ^pdb\\|/i) { $_=~ s/pdb\\|//g; }\n    if ($_=~ /^(\
8297 1_\\d+)\\s+\\d+/) { $_=~ s/$1/QUERY/;}\n      \n  \
8298   if ( /^(\\S+).+?\\s+[\\d.]+\\s+([\\de.-]+)\\s+$/\
8299  && $in_hit_list)       \n    {\n       my($id)=$1; # \n        $id=~\
8300  s/\\|/_/g; #\n if ($id =~ /.+_$/) { chop($id) }; \
8301 #\n     $name_list{$n_seq++}=$id;\n     $name_list{$n_seq-\
8302 1}=~ s/.*\\|//g;     \n    }\n  \n    if (/query/i\
8303 ) {$in_aln=1;}\n    if ( /^(\\S+)\\s+(\\d+)\\s+([a\
8304 -zA-Z-]+)\\s+(\\d+)/ || /^(\\S+)(\\s+)(\\-+)(\\s+)\
8305 / && ($in_aln == 1))\n    {\n   my $name=$1;\n  my $s\
8306 tart=$2;\n      my $seq=$3;\n   my $end=$4;\n           \n      if ($na\
8307 me =~ /QUERY/i) { $lg_query=length($seq); }\n\n un\
8308 less ($test > $n) #m\n  {\n         my(@seqq)= split(''\
8309 ,$seq);\n           my($gap_missing)= scalar(@seqq);\n   \
8310    \n       while ($gap_missing != $lg_query)  { uns\
8311 hift (@seqq,\"-\"); $gap_missing= scalar(@seqq); }\
8312 \n          $seq=join('',@seqq);  #m\n  }\n     \n      if ($name\
8313  =~ /QUERY/i)\n {\n         $n=0; %vu=(); $j=0;\n           \
8314 $list{$n}{'real_name'}=\"$nom\";\n      }       \n      else\n  {\n\
8315             unless (exists $vu{$name}) { ++$j;} \n          $l\
8316 ist{$n}{'real_name'}=$name_list{$j-1};\n        }\n             \n      $\
8317 list{$n}{'name'}=$name;\n\n     $seq=~tr/a-z/A-Z/;\n    $\
8318 list{$n}{'seq'}=$list{$n}{'seq'};\n     $list{$n}{'seq\
8319 '}.=$seq;\n\n   $n++;\n $vu{$name}++;\n $test++;\n  \
8320  } \n    \n}\n\nmy @numero=();\n\nfor (my $a=0; $a\
8321 <$n; $a++) #m\n{\n    my $long=length($list{0}{'se\
8322 q'});  \n    my $long1= length($list{$a}{'seq'});\\
8323 n  \n    while ($long1 ne $long)\n    {\n       $list{$a\
8324 }{'seq'}.=\"-\";\n      $long1= length ($list{$a}{'seq'\
8325 });\n    } \n \n    push (@numero,\"$list{$a}{'nam\
8326 e'} $list{$a}{'real_name'}\\n\");\n}\n\nmy %dejavu\
8327 =();\n\n\nfor (my $i=0; $i<=$#numero; $i++)\n{\n  \
8328   my $s=\">$list{$i}{'real_name'}\\n$list{$i}{'seq\
8329 '}\\n\";\n    my $k=0;\n    \n    if (exists $deja\
8330 vu{$numero[$i]}) {next;}\n    else\n    {       \n      for (\
8331 $j=0; $j<$n ; $j++)\n   {\n         if (\"$numero[$i]\" \
8332 eq \"$numero[$j]\" && $j != $i )\n          {\n         ++$k;\\
8333 n               $s .=\">$list{$j}{'real_name'}\\n$list{$j}{'seq\
8334 '}\\n\";\n          }\n }       \n    }\n    \n    if ($k>0) \
8335 \n    {\n       my $cons;\n     open (SOR,\">tempo_aln2cons\\
8336 "); print SOR $s;  close SOR ;\n        open (COM,\"t_cof\
8337 fee -other_pg seq_reformat -in tempo_aln2cons -act\
8338 ion +aln2cons +upper |\") ; \n          while (<COM>)\\
8339 n       {       \n          if (/^>/) { $cons =\">$list{$i}{'real_n\
8340 ame'}\\n\"; next;}\n        $_=~ s/\\n//g;\n        $con\
8341 s .=$_;\n       }\n     close COM; unlink (\"tempo_aln2cons\\
8342 ");\n   print $cons,\"\\n\"; print F $cons,\"\\n\";\\
8343 n    }  \n    else  { print $s;  print F $s; }\n   \
8344  \n    $dejavu{$numero[$i]}++;\n} #m\n\nexit;\n\n\\
8345 n\n\n\n\n\n\n\n\n\n","use Env;\n\n\n$tmp_dir=\"\";\
8346 \n$init_dir=\"\";\n$program=\"tc_generic_method.pl\
8347 \";\n\n$blast=@ARGV[0];\n\n$name=\"query\";$seq=\"\
8348 \";\n%p=blast_xml2profile($name,$seq,100, 0, 0, $b\
8349 last);\n&output_profile (%p);\n\n\nsub output_prof\
8350 ile\n  {\n    my (%profile)=(@_);\n    my ($a);\n \
8351    for ($a=0; $a<$profile{n}; $a++)\n      {\n  \n      \
8352 print \">$profile{$a}{name} $profile{$a}{comment}\\
8353 \n$profile{$a}{seq}\\n\";\n      }\n    return;\n \
8354  }\nsub file_contains \n  {\n    my ($file, $tag, \
8355 $max)=(@_);\n    my ($n);\n    $n=0;\n    \n    if\
8356  ( !-e $file && ($file =~/$tag/)) {return 1;}\n   \
8357  elsif ( !-e $file){return 0;}\n    else \n      {\
8358 \n      open (FC, \"$file\");\n while ( <FC>)\n   {\n    \
8359    if ( ($_=~/$tag/))\n       {\n               close (FC);\n           \
8360 return 1;\n           }\n           elsif ($max && $n>$max)\\
8361 n             {\n               close (FC);\n           return 0;\n           }\n       \
8362     $n++;\n       }\n      }\n    close (FC);\n    ret\
8363 urn 0;\n  }\n       \n    \nsub file2string\n  {\n   \
8364  my $f=@_[0];\n    my $string, $l;\n    open (F,\"\
8365 $f\");\n    while (<F>)\n      {\n\n    $l=$_;\n        #cho\
8366 mp ($l);\n      $string.=$l;\n      }\n    close (F);\n\
8367     $string=~s/\\r\\n//g;\n    $string=~s/\\n//g;\\
8368 n    return $string;\n  }\n\n\n\nsub tag2value \n \
8369  {\n    \n    my $tag=(@_[0]);\n    my $word=(@_[1\
8370 ]);\n    my $return;\n    \n    $tag=~/$word=\"([^\
8371 \"]+)\"/;\n    $return=$1;\n    return $return;\n \
8372  }\n      \nsub hit_tag2pdbid\n  {\n    my $tag=(@\
8373 _[0]);\n    my $pdbid;\n       \n    $tag=~/id=\"(\
8374 \\S+)\"/;\n    $pdbid=$1;\n    $pdbid=~s/_//;\n   \
8375  return $pdbid;\n  }\nsub id2pdbid \n  {\n    my $\
8376 id=@_[0];\n  \n    if ($id =~/pdb/)\n      {\n  $id\
8377 =~/pdb(.*)/;\n  $id=$1;\n      }\n    $id=~s/[|¦_]/\
8378 /g;\n    return $id;\n  }\nsub set_blast_type \n  \
8379 {\n    my $file =@_[0];\n    if (&file_contains ($\
8380 file,\"EBIApplicationResult\",100)){$BLAST_TYPE=\"\
8381 EBI\";}\n    elsif (&file_contains ($file,\"NCBI_B\
8382 lastOutput\",100)) {$BLAST_TYPE=\"NCBI\";}\n    el\
8383 se\n      {\n   $BLAST_TYPE=\"\";\n      }\n    retu\
8384 rn $BLAST_TYPE;\n  }\nsub blast_xml2profile \n  {\\
8385 n    my ($name,$seq,$maxid, $minid, $mincov, $file\
8386 )=(@_);\n    my (%p, $a, $string, $n);\n    \n\n\n\
8387     if ($BLAST_TYPE eq \"EBI\" || &file_contains (\
8388 $file,\"EBIApplicationResult\",100)){%p=ebi_blast_\
8389 xml2profile(@_);}\n    elsif ($BLAST_TYPE eq \"NCB\
8390 I\" || &file_contains ($file,\"NCBI_BlastOutput\",\
8391 100)){%p=ncbi_blast_xml2profile(@_);}\n    else \n\
8392       {\n       print \"************ ERROR: Blast Return\
8393 ed an unknown XML Format **********************\";\
8394 \n      die;\n      }\n    for ($a=0; $a<$p{n}; $a++)\n\
8395       {\n       my $name=$p{$a}{name};\n        $p{$name}{seq}=\
8396 $p{$a}{seq};\n      }\n    return %p;\n  }\nsub nc\
8397 bi_blast_xml2profile \n  {\n    my ($name,$seq,$ma\
8398 xid, $minid, $mincov, $string)=(@_);\n    my ($L,$\
8399 l, $a,$b,$c,$d,$nhits,@identifyerL);\n    \n    \n\
8400     $seq=~s/[^a-zA-Z]//g;\n    $L=length ($seq);\n\
8401     \n    %hit=&xml2tag_list ($string, \"Hit\");\n\
8402     \n    \n    for ($nhits=0,$a=0; $a<$hit{n}; $a\
8403 ++)\n      {\n  my ($ldb,$id, $identity, $expectati\
8404 on, $start, $end, $coverage, $r);\n     my (%ID,%DE,%H\
8405 SP);\n  \n      $ldb=\"\";\n\n  %ID=&xml2tag_list ($hit{$\
8406 a}{body}, \"Hit_id\");\n        $identifyer=$ID{0}{body};\
8407 \n      \n      %DE=&xml2tag_list ($hit{$a}{body}, \"Hit_def\
8408 \");\n  $definition=$DE{0}{body};\n     \n      %HSP=&xml2ta\
8409 g_list ($hit{$a}{body}, \"Hsp\");\n     for ($b=0; $b<\
8410 $HSP{n}; $b++)\n          {\n       my (%START,%END,%E,%I,%\
8411 Q,%M);\n\n       \n         %START=&xml2tag_list ($HSP{$b}{\
8412 body}, \"Hsp_query-from\");\n       %HSTART=&xml2tag\
8413 _list ($HSP{$b}{body}, \"Hsp_hit-from\");\n         \n\
8414             %LEN=  &xml2tag_list ($HSP{$b}{body}, \"Hsp_a\
8415 lign-len\");\n      %END=  &xml2tag_list ($HSP{$b}{\
8416 body}, \"Hsp_query-to\");\n         %HEND=  &xml2tag_l\
8417 ist ($HSP{$b}{body}, \"Hsp_hit-to\");\n     %E=&xm\
8418 l2tag_list     ($HSP{$b}{body}, \"Hsp_evalue\");\n\
8419             %I=&xml2tag_list     ($HSP{$b}{body}, \"Hsp_i\
8420 dentity\");\n       %Q=&xml2tag_list     ($HSP{$b}{b\
8421 ody}, \"Hsp_qseq\");\n      %M=&xml2tag_list     ($\
8422 HSP{$b}{body}, \"Hsp_hseq\");\n     \n      for ($e\
8423 =0; $e<$Q{n}; $e++)\n\n       {\n               $qs=$Q{$e}{body\
8424 };\n            $ms=$M{$e}{body};\n             if ($seq eq\"\"){$seq=$\
8425 qs;$L=length($seq);}\n          \n              $expectation=$E{$e}{bo\
8426 dy};\n          $identity=($LEN{$e}{body}==0)?0:$I{$e}{bod\
8427 y}/$LEN{$e}{body}*100;\n                $start=$START{$e}{body};\
8428 \n              $end=$END{$e}{body};\n          $Hstart=$HSTART{$e}{bo\
8429 dy};\n          $Hend=$HEND{$e}{body};\n        \n              $coverage=(($\
8430 end-$start)*100)/$L;\n\n        \n              if ($identity>$maxid \
8431 || $identity<$minid || $coverage<$mincov){next;}\n\
8432                 @lr1=(split (//,$qs));\n                @lr2=(split (//,$ms));\
8433 \n              $l=$#lr1+1;\n           for ($c=0;$c<$L;$c++){$p[$nhits\
8434 ][$c]=\"-\";}\n         for ($d=0,$c=0; $c<$l; $c++)\n           \
8435  {\n                $r=$lr1[$c];\n                  if ( $r=~/[A-Za-z]/)\
8436 \n                    {\n                       \n                      $p[$nhits][$d + $start-1]=$lr\
8437 2[$c];\n                        $d++;\n               }\n                 }\n           $Qseq[$nhits\
8438 ]=$qs;\n                $Hseq[$nhits]=$ms;\n            $QstartL[$nhits]=$\
8439 start;\n                $HstartL[$nhits]=$Hstart;\n             $identityL[\
8440 $nhits]=$identity;\n            $endL[$nhits]=$end;\n           $defi\
8441 nitionL[$nhits]=$definition;\n          $identifyerL[$nhit\
8442 s]=$identifyer;\n               $comment[$nhits]=\"$ldb|$identi\
8443 fyer [Eval=$expectation][id=$identity%][start=$Hst\
8444 art end=$Hend]\";\n             $nhits++;\n           }\n         }\n  \
8445     }\n    \n    $profile{n}=0;\n    $profile{$pro\
8446 file{n}}{name}=$name;\n    $profile{$profile{n}}{s\
8447 eq}=$seq;\n    $profile {n}++;\n    \n    for ($a=\
8448 0; $a<$nhits; $a++)\n      {\n  $n=$a+1;\n      \n      $prof\
8449 ile{$n}{name}=\"$name\\_$a\";\n $profile{$n}{seq}=\
8450 \"\";\n $profile{$n}{Qseq}=$Qseq[$a];\n $profile{$\
8451 n}{Hseq}=$Hseq[$a];\n   $profile{$n}{Qstart}=$Qstart\
8452 L[$a];\n        $profile{$n}{Hstart}=$HstartL[$a];\n    $pro\
8453 file{$n}{identity}=$identityL[$a];\n    $profile{$n}{\
8454 definition}=$definitionL[$a];\n $profile{$n}{ident\
8455 ifyer}=$identifyerL[$a];\n      $profile{$n}{comment}=$\
8456 comment[$a];\n  for ($b=0; $b<$L; $b++)\n         {\n      \
8457  if ($p[$a][$b])\n            {\n               $profile{$n}{seq}.=$\
8458 p[$a][$b];\n          }\n           else\n            {\n               $prof\
8459 ile{$n}{seq}.=\"-\";\n        }\n         }\n      }\n   \
8460  \n    $profile{n}=$nhits+1;\n    return %profile;\
8461 \n  }\nsub ebi_blast_xml2profile \n  {\n    my ($n\
8462 ame,$seq,$maxid, $minid, $mincov, $string)=(@_);\n\
8463     my ($L,$l, $a,$b,$c,$d,$nhits,@identifyerL,$id\
8464 entifyer);\n    \n\n    \n    $seq=~s/[^a-zA-Z]//g\
8465 ;\n    $L=length ($seq);\n    %hit=&xml2tag_list (\
8466 $string, \"hit\");\n    \n    for ($nhits=0,$a=0; \
8467 $a<$hit{n}; $a++)\n      {\n    my ($ldb,$id, $identi\
8468 ty, $expectation, $start, $end, $coverage, $r);\n       \
8469 my (%Q,%M,%E,%I);\n     \n      $ldb=&tag2value ($hit{$a}{o\
8470 pen}, \"database\");\n  $identifyer=&tag2value ($hi\
8471 t{$a}{open}, \"id\");\n\n       $description=&tag2value \
8472 ($hit{$a}{open}, \"description\");\n    \n      %Q=&xml2ta\
8473 g_list ($hit{$a}{body}, \"querySeq\");\n        %M=&xml2t\
8474 ag_list ($hit{$a}{body}, \"matchSeq\");\n       %E=&xml2\
8475 tag_list ($hit{$a}{body}, \"expectation\");\n   %I=&\
8476 xml2tag_list ($hit{$a}{body}, \"identity\");\n  \n\\
8477 n       for ($b=0; $b<$Q{n}; $b++)\n      {\n       \n      \n\
8478             $qs=$Q{$b}{body};\n     $ms=$M{$b}{body};\n  \
8479    if ($seq eq\"\"){$seq=$qs;$L=length($seq);}\n\n\
8480             $expectation=$E{$b}{body};\n            $identity=$I\
8481 {$b}{body};\n       \n              \n      $start=&tag2v\
8482 alue ($Q{$b}{open}, \"start\");\n           $end=&tag2va\
8483 lue ($Q{$b}{open}, \"end\");\n      $startM=&tag2va\
8484 lue ($M{$b}{open}, \"start\");\n            $endM=&tag2va\
8485 lue ($M{$b}{open}, \"end\");\n      $coverage=(($en\
8486 d-$start)*100)/$L;\n        \n     # print \"$id: ID: \
8487 $identity COV: $coverage [$start $end]\\n\";\n     \
8488  \n         \n      if ($identity>$maxid || $identity<$\
8489 minid || $coverage<$mincov){next;}\n        # print \\
8490 "KEEP\\n\";\n\n     \n      @lr1=(split (//,$qs));\\
8491 n           @lr2=(split (//,$ms));\n        $l=$#lr1+1;\n        \
8492    for ($c=0;$c<$L;$c++){$p[$nhits][$c]=\"-\";}\n       \
8493     for ($d=0,$c=0; $c<$l; $c++)\n            {\n               $r=$\
8494 lr1[$c];\n              if ( $r=~/[A-Za-z]/)\n            {\n               \n  \
8495             $p[$nhits][$d + $start-1]=$lr2[$c];\n                   $d\
8496 ++;\n             }\n         }\n         \n        \n      $identifyer\
8497 L[$nhits]=$identifyer;\n            $comment[$nhits]=\"$l\
8498 db|$identifyer [Eval=$expectation][id=$identity%][\
8499 start=$startM end=$endM]\";\n       $nhits++;\n   }\\
8500 n      }\n    \n    $profile{n}=0;\n    $profile{$\
8501 profile{n}}{name}=$name;\n    $profile{$profile{n}\
8502 }{seq}=$seq;\n    $profile {n}++;\n    \n    for (\
8503 $a=0; $a<$nhits; $a++)\n      {\n       $n=$a+1;\n      $prof\
8504 ile{$n}{name}=\"$name\\_$a\";\n $profile{$n}{seq}=\
8505 \"\";\n $profile{$n}{identifyer}=$identifyerL[$a];\
8506 \n      \n      $profile{$n}{comment}=$comment[$a];\n   for ($\
8507 b=0; $b<$L; $b++)\n       {\n       if ($p[$a][$b])\n     \
8508     {\n         $profile{$n}{seq}.=$p[$a][$b];\n              }\\
8509 n           else\n            {\n               $profile{$n}{seq}.=\"-\";\\
8510 n             }\n         }\n      }\n    $profile{n}=$nhits+1\
8511 ;\n    \n    return %profile;\n  }\n\nsub blast_xm\
8512 l2hit_list\n  {\n    my $string=(@_[0]);\n    retu\
8513 rn &xml2tag_list ($string, \"hit\");\n  }\nsub xml\
8514 2tag_list  \n  {\n    my ($string_in,$tag)=@_;\n  \
8515   my $tag_in, $tag_out;\n    my %tag;\n    \n    i\
8516 f (-e $string_in)\n      {\n    $string=&file2string \
8517 ($string_in);\n      }\n    else\n      {\n     $strin\
8518 g=$string_in;\n      }\n    $tag_in1=\"<$tag \";\n\
8519     $tag_in2=\"<$tag>\";\n    $tag_out=\"/$tag>\";\
8520 \n    $string=~s/>/>##1/g;\n    $string=~s/</##2</\
8521 g;\n    $string=~s/##1/<#/g;\n    $string=~s/##2/#\
8522 >/g;\n    @l=($string=~/(\\<[^>]+\\>)/g);\n    $ta\
8523 g{n}=0;\n    $in=0;$n=-1;\n  \n \n\n    foreach $t\
8524  (@l)\n      {\n\n      $t=~s/<#//;\n   $t=~s/#>//;\n   \n      \
8525 if ( $t=~/$tag_in1/ || $t=~/$tag_in2/)\n          {\n    \n\
8526             $in=1;\n        $tag{$tag{n}}{open}=$t;\n       $n\
8527 ++;\n       \n    }\n   elsif ($t=~/$tag_out/)\n          {\n   \
8528     \n\n            $tag{$tag{n}}{close}=$t;\n      $tag{n\
8529 }++;\n      $in=0;\n      }\n   elsif ($in)\n     {\n      \\
8530 n           $tag{$tag{n}}{body}.=$t;\n    }\n      }\n  \\
8531 n    return %tag;\n  }\n\n\n\n\n","use Env qw(HOST\
8532 );\nuse Env qw(HOME);\nuse Env qw(USER);\nwhile (<\
8533 >)\n  {\n    if ( /^>(\\S+)/)\n      {\n        if ($list\
8534 {$1})\n   {\n       print \">$1_$list{$1}\\n\";\n         \
8535   $list{$1}++;\n          }\n   else\n    {\n       print $_;\\
8536 n           $list{$1}=1;\n        }\n      }\n    else\n     \
8537  {\n    print $_;\n      }\n  }\n      \n","\n\n\nuse\
8538  Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER\
8539 );\n\n\nopen (F,$ARGV[0]);\nwhile ( <>)\n  {\n    \
8540 @x=/([^:,;\\)\\(\\s]+):[^:,;\\)\\(]*/g;\n    @list\
8541 =(@list,@x);\n  }\n$n=$#list+1;\nforeach $n(@list)\
8542 {print \">$n\\nsequence\\n\";}\n\n\nclose (F);\n",\
8543 "\nopen (F, $ARGV[0]);\n\nwhile ( <F>)\n  {\n    @\
8544 l=($_=~/(\\S+)/g);\n    \n    $name=shift @l;\n   \
8545  \n    print STDOUT \"\\n>$name\\n\";\n    foreach\
8546  $e (@l){$e=($e eq \"0\")?\"O\":\"I\";print \"$e\"\
8547 ;}\n  }\nclose (F);\n\n                \n    \n","use Env\
8548  qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\n\
8549 \n$tmp=\"$ARGV[0].$$\";\nopen (IN, $ARGV[0]);\nope\
8550 n (OUT, \">$tmp\");\n\nwhile ( <IN>)\n  {\n    $fi\
8551 le=$_;\n    $file=~s/\\r\\n/\\n/g;\n    $file=~s/\\
8552 \n\\r/\\n/g;\n    $file=~s/\\r\\r/\\n/g;\n    $fil\
8553 e=~s/\\r/\\n/g;\n    print OUT \"$file\";\n  }\ncl\
8554 ose (IN);\nclose (OUT);\n\nopen (OUT, \">$ARGV[0]\\
8555 ");\nopen (IN, \"$tmp\");\n\nwhile ( <IN>)\n{\n  p\
8556 rint OUT \"$_\";\n}\nclose (IN);\nclose (OUT);\nun\
8557 link ($tmp);\n\n"};
8558 /******************************COPYRIGHT NOTICE*******************************/
8559 /*© Centro de Regulacio Genomica */
8560 /*and */
8561 /*Cedric Notredame */
8562 /*Fri Feb 18 08:27:45 CET 2011 - Revision 596. */
8563 /*All rights reserved.*/
8564 /*This file is part of T-COFFEE.*/
8565 /**/
8566 /*    T-COFFEE is free software; you can redistribute it and/or modify*/
8567 /*    it under the terms of the GNU General Public License as published by*/
8568 /*    the Free Software Foundation; either version 2 of the License, or*/
8569 /*    (at your option) any later version.*/
8570 /**/
8571 /*    T-COFFEE is distributed in the hope that it will be useful,*/
8572 /*    but WITHOUT ANY WARRANTY; without even the implied warranty of*/
8573 /*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the*/
8574 /*    GNU General Public License for more details.*/
8575 /**/
8576 /*    You should have received a copy of the GNU General Public License*/
8577 /*    along with Foobar; if not, write to the Free Software*/
8578 /*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/
8579 /*...............................................                                                                                      |*/
8580 /*  If you need some more information*/
8581 /*  cedric.notredame@europe.com*/
8582 /*...............................................                                                                                                                                     |*/
8583 /**/
8584 /**/
8585 /*      */
8586 /******************************COPYRIGHT NOTICE*******************************/