Logo Search packages:      
Sourcecode: t-coffee version File versions  Download package


char *PerlScriptName[]={"rec_sum.pl","process_list\
pl","any_file2unix_file.pl","EndList"};char *PerlS\
criptFile[]={"use File::Copy;\nuse Env qw(HOST);\n\
use Env qw(HOME);\nuse Env qw(USER);\n$x_field=0;\\
;\nforeach $value ( @ARGV)\n    {\n if ($value ne \
$ARGV[$np]) \n        {\n         ;\n         }\n     elsif($valu\
e eq \"-print_all\")\n      {\n         $print_sd=$prin\
t_avg=$print_n=$print_sum=1;\n          $np++;\n          }\\
n     elsif($value eq \"-print_sum\")\n       {\n         $p\
rint_sum=1;\n         $print_avg=0;\n         $np++;\n         \
 }\n  elsif($value eq \"-print_n\")\n         {\n         $\
print_n=1;\n          $print_avg=0;\n         $np++;\n          \
}\n   elsif($value eq \"-print_avg\")\n       {\n         \
$print_avg=1;\n       $print_avg=0;\n         $np++;\n       \
   }\n      elsif($value eq \"-sd\")\n        {\n         $pri\
nt_sd=1;\n      $print_avg=0;\n         $np++;\n          }\\
n     elsif($value eq \"-h\")\n         {\n         $header=1;\
\n        $np++;\n          }\n     elsif ($value eq \"-i\")\n\
          {\n         $interval= $ARGV[++$np];\n          $np++;\
\n              }\n     elsif ($value eq \"-r\")\n        {\n     \
    $min= $ARGV[++$np];\n         $max= $ARGV[++$np];\\
n         $np++;\n          }\n     \n    elsif ($value eq \"-\
x\")\n          {\n         $x_field= $ARGV[++$np]-1;\n        \
 $np++;\n             }\n     elsif ($value eq \"-y\")\n     \
   {\n            \n        while ($ARGV[$np+1] && !($ARGV\
[$np+1]=~/\\-/))\n            {\n         $y_field[$nyf++]=$AR\
GV[++$np]-1;\n          $y_field_set=1;\n       }\n\n     \
$np++;\n              }\n     elsif ($value eq \"-file\")\n\
          {\n         $file= $ARGV[++$np];\n        $file_set=\
1;\n      $np++;\n          }       \n    elsif ( $valu\
e eq \"h\" ||  $value eq \"-h\" || $value eq \"-H\\
" || $value eq \"-help\" || $value eq \"help\")\n     \
  {\n     print STDOUT \"data_analyse: Analyse and\
 discretization of data\\n\";\n         print STDOUT \\
"       -file:    <file containing the data to ana\
lyze>,.<def=STDIN>\\n\";\n        print STDOUT \"    \
   -x: <field containing the X>,...............<De\
f=0>\\n\";\n          print STDOUT \"       -y: <field \
containing the Y>,...............<Def=1>\\n\";\n       \
   print STDOUT \"       -i:<Interval size on the \
X>,...............<Def=0>\\n\";\n       print STDOUT\
 \"       -i:<0:only one interval>\\n\";\n          pri\
nt STDOUT \"       -r:<Range of the X>\\n\";\n     \
 print STDOUT \"       -sd: print standard deviati\
on on the Y\";\n      print STDOUT \"       -h  : p\
rint column header \\n\";\n       exit (0);\n     }\n \
elsif ($value=~/-/)\n     {\n     print \"$value is \
not a valid FLAG[FATAL]\\n\";\n         exit (0);\n     \
 } \n elsif ($list eq \"\") \n          {\n         $file=$\
ARGV[$np];\n          $np++;\n          }\n     \n    \n      }\n\n\
\n\n\n\nif ($file eq \"stdin\")\n   {\n   $remove_file\
=1;\n $file=\"tmp$$\";\n      open (F, \">$file\");\n w\
hile (<STDIN>)\n        {\n         print F $_;\n           }\n   close (F\
);\n   \n   ;}\n\n\nopen(F,$file);\n\nif ($interval)\\
n  {\n    $interval_size=($max-$min)/$interval;\n \
 }\nwhile (<F>)\n  {\n    $line=$_;\n    if (!/\\S\
/){next;}\n    @list=($line=~/(\\S+)/g);\n    \n  \
  if ($interval==0){$bin=0;}\n    else{$bin=int ((\
$list[$x_field]-$min)/($interval_size));}\n\n    \\
n    if ($bin && $bin==$interval){$bin--;}\n    fo\
r ( $a=0; $a<$nyf; $a++)\n      {\n $sum{$a}{$bin}\
+=$list[$y_field[$a]];\n      $sum2{$a}{$bin}+=$list[$y\
_field[$a]]*$list[$y_field[$a]];\n  $n{$a}{$bin}++;\
\n      }\n  }\n\nif (!$interval){$interval=1;}\nf\
or ( $a=0; $a<$interval; $a++)\n  {\n    printf ( \
\"%3d %3d \", $interval_size*$a, $interval_size*($\
a+1));\n    for ( $b=0; $b<$nyf; $b++)    \n      {\n\
      $i=$interval*$a;\n      if ( $n{$b}{$a}==0)\n     {\n   \
  $avg=0;\n     $sd=0;\n        }\n else\n        {\n     $a\
vg=$sum{$b}{$a}/$n{$b}{$a};\n     $sd=sqrt($sum2{$\
b}{$a}*$n{$b}{$a});\n     }\n if ($print_n) {printf \
\"%10.2f \", $n{$b}{$a};}\n   if ($print_sum){printf\
 \"%10.2f \", $sum{$b}{$a};}\n      if ($print_avg){pri\
ntf \"%10.2f \", $avg}\n      if ($print_sd) {printf \"\
%10.2f \", $sd;}\n      }\n    printf (\"\\n\");\n\
  }\n\n\nif ( $remove_file){unlink $file;}\n","\nu\
se Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw(US\
ER);\n$random_tag=int (rand 10000)+1;\n$unique_pre\
h $value ( @ARGV)\n    {\n    if ($value ne $ARGV[$np\
]) \n     {\n         ;\n         }\n     elsif ($value eq \"-\
max_sub_jobs\")\n     {\n         $max_sub_jobs= $ARGV\
[++$np];\n      $np++;\n          } \n    elsif ($value\
 eq \"-min_sub_jobs\" )\n         {\n         $min_sub_job\
s= $ARGV[++$np];\n          $np++;\n          }\n     elsif \
($value eq \"-para\")\n     {\n         $para=1;\n       \
 $monitor=1;\n        $np++;\n          }\n     elsif ($va\
lue eq \"-monitor\") \n     {\n         $monitor=1;\n \
    $np++;\n          }\n     elsif ($value eq \"-no_monito\
r\") \n         {\n         $monitor=0;\n     $np++;\n         \
 }\n  elsif ($value eq \"-queue\")\n          {\n         $q\
ueue=$ARGV[++$np];\n        $np++;\n          } \n    elsif (\
$value eq \"-stderr_file\")\n     {\n         $stderr_\
file=$ARGV[++$np];\n        $np++;\n          }\n     elsif ($\
value eq \"-stdio_file\")\n       {\n         $stdio_fil\
e=$ARGV[++$np];\n     $np++;\n          }\n     elsif ($val\
ue eq \"-output_all\")\n          {\n         $output_all=1\
;\n       $np++;\n          }\n     elsif ($value eq \"-pause\
\") \n          {\n         $pause_time=$ARGV[++$np];\n        \
 $np++;\n       }\n     elsif ($value eq \"-log\")\n     \
   {\n             $log=1;\n         \n          if ($ARGV\
[$np+1]=~/\\-\\S+/) \n            {\n             $log_file=\
\"stderr\";\n               }\n            else \n           \
   {\n              $log_file=$ARGV[++$np]; \n          ++$np;\n        \
 \n             }\n           }\n   elsif ( $value eq \"-c\
om\")\n         {\n           \n          if (!$ARGV[$np+1]=~/^\\'/) { \
$com=$ARGV[++$np];}\n         else {$com=$ARGV[++$np];}\n\
\n         $np++;\n         }\n     elsif ($com eq \"\") \n  \
   {\n          $com_set=1;\n     $com=$ARGV[$np];\n    \
  \n      $np++;\n          }\n     elsif ($list eq \"\") \n\
          {\n         $list_set=1;\n          $list=$ARGV[$np];\\
n         $np++;\n          }\n     elsif ( $var_set eq \"\")\n\
          {\n         $var_set=1;\n     $var=$ARGV[$np];\n  \
    $np++;\n          }\n     }\n\n\n\n\nif ( $com eq \"\")\
{print \"You Need to Provide a Command [FATAL]\\n\\
";\n        die;\n           }\n\n\n\nif ($list_set==0) \
\n    {\n    $x= int (rand 100000)+1;\n    $tmp_fi\
le_name=\"tmp_file_$x\";\n    open ( TMP, \">$tmp_\
file_name\");\n    while (<STDIN>)\n      {\n   prin\
t TMP $_;\n      }\n    close (TMP);\n    open (F,\
 $tmp_file_name);\n    }\nelse \n    {\n    open (\
F, $list);\n    }\n\nif ($para==0) \n    {\n\n    \
 @tc_list= <F>;\n     close (F); \n\n     foreach \
$val(@tc_list) \n     {\n           \n          \n          $loc_\
com=$com;\n       \n          @i_val=($val=~/([^\\s]+)/g);\n            \\
n           if ( $#i_val==0)\n              {\n          \n           $loc_com=\
~s/$var/$i_val[0]/g;\n          }\n       else\n              {\n           \
for ($n=1; $n<=$#i_val+1;$n++ )\n                {\n  \n                 $su\
b=\"$var$n\";\n                \n                $loc_com=~s/$sub/$i_val[$\
n-1]/g;\n                }\n          }\n \n            system \"$\
loc_com\";\n    \n          }\n    exit;\n    }\n\nelsi\
f ($para==1) \n    {\n    print STDERR \"do parall\
el execution of: \\\"$com $list\\\"\\n\";\n    \n \
   if ($log==1) \n      {\n   if ($log_file eq \"stdout\"\
 || $log_file eq \"stderr\" ) \n          {\n         $log_file=\\
"\";\n              }\n\n        else \n        {\n         system \\
"echo LOG FILE> $log_file\";\n            \n            }\n }\n\
    else    \n    {\n   open ( OUT, \">/dev/null\");\n      }\n\
      \n    \n    $id=0;\n    $n_sub=0;\n    while ($va\
l=<F>) \n       {           \n          $job_log[$id]=\"$H\
OME/tmp/$unique_prefix.$id.log_file\";\n      \n        \
  $job=$unique_prefix.\"_$id\";\n       open (JOB, \\
">$job\");\n          \n          $loc_com=$com;\n        chop \
$val;\n\n       $loc_com=~s/\\$/$val/g;\n  \n       pr\
int JOB \"#!/bin/csh\\n\";\n      print JOB \"#\\$ \
-cwd\\n\";\n          print JOB \"#\\$ -N $unique_prefi\
x\\n\";\n       if ($queue && !($queue eq \" \")) {p\
rint JOB \"#\\$ -l $queue\\n\";}\n      print JOB \\
"#\\n\";        \n            print JOB \"$loc_com\\n\
\";\n     print JOB \"echo FINISHED  >> $job_log[$\
id]\\n\";\n     print JOB \"pwd\\n\";\n       \n         \
 close (JOB);\n       if ( $output_all==1)\n          {\n         s\
ystem \"qsub $job >  $unique_prefix\";          \n           \
 }\n      else\n        {system \"qsub $job -e $stderr_fi\
le -o $stdio_file >$unique_prefix\";              \n    \
      } \n\n\n\n      print STDERR \"$id: $output_a\
ll\\n\";\n      $n_sub++;\n       if ( $max_sub_jobs \
&& $n_sub==$max_sub_jobs) \n        {\n         $n_sub=monitor_\
process($min_sub_jobs,@job_log);           \n         \n           \
 }    \n       \n            unlink $unique_prefix;\n   \
  sleep $pause_time;\n      $id++;\n          }\n\n    c\
lose (OUT);\n    close (F);\n\n    print STDERR \"\
Your $id Jobs Have Been Submited (NAME=$unique_pre\
fix)\\n\";\n    monitor_process (0, @job_log);\n  \
  foreach $file(@job_log) {if (-e $file) {unlink($\
file);}}\n    \n    }\n\nsub monitor_process ( @jo\
b_list)\n    {\n    my (@job_list)=@_;\n    my $mi\
n_sub_jobs=shift (@job_list);\n    my $n_sub_jobs;\
\n    my $finished;\n    my $n=0;\n\n    $n_sub_jo\
bs=-1;\n    $finished=0;\n    print STDERR \"\\nMo\
nitor Batch: [$min_sub_jobs]\";\n       \n    whil\
e (!$finished && (($n_sub_jobs>$min_sub_jobs)|| $n\
_sub_jobs==-1) ) \n     {\n   $finished=1;\n    $n_sub_jobs\
=0;\n $n=0;\n     foreach $file (@job_list)\n           \
{\n   \n          if (-e $file){;}\n            else \n               {\n               \
$finished=0; $n_sub_jobs++;\n             }\n       \
    }\n     system \"sleep 1\";\n        }\n    \n    \
return $n_sub_jobs;\n    }\n    \n    \nif ($tmp_f\
 ($np=0; $np<=$#ARGV; $np++)\n    {\n    $value=$A\
RGV[$np];\n\n    if ($value eq \"-file\")\n      {\
\n      $file= $ARGV[++$np];\n      }\n    elsif (\
$value eq \"-type\")\n      {\n        $type= $ARG\
V[++$np];\n      }\n    elsif ($value eq \"-instit\
ute\")\n      {\n        $institute= $ARGV[++$np];\
\n      }\n    elsif ($value eq \"-author\")\n    \
  {\n        $author= $ARGV[++$np];\n      }\n    \
elsif ($value eq \"-date\")\n      {\n        $dat\
e= $ARGV[++$np];\n      }\n     elsif ($value eq \\
"-program\")\n      {\n        $program= $ARGV[++$\
np];\n      }\n    elsif ($value eq \"-email\")\n \
     {\n        $email= $ARGV[++$np];\n      }\n  \
  else\n      {\n print \"$value is an unkown argu\
ment[FATAL]\\n\";\n     exit (1);\n      }\n  }\n\n\n\\
nopen F, $file || die;\nprint $INSTITUTE;\nif ( $t\
ype eq \"c\"){print \"/***************************\
******COPYRIGHT NOTICE****************************\
******/\\n\";}\nif ( $type eq \"perl\"){print \"##\
###############################COPYRIGHT NOTICE###\
##############################/\\n\";}\nif ( $type\
 eq \"txt\"){print \"-----------------------------\
-----COPYRIGHT NOTICE-----------------------------\
----/\\n\";}\n\n\nwhile (<F>)\n  {\n  s/\\$INSTITU\
TE/$institute/g;\n  s/\\$AUTHOR/$author/g;\n  s/\\\
$DATE/$date/g;\n  s/\\$PROGRAM/$program/g;  \n  s/\
\\$EMAIL/$email/g;  \n  if ( $type eq \"txt\"){pri\
nt $_;}\n  elsif ($type eq \"c\"){chop $_; print \\
"\\/*$_*\\/\\n\";}\n  elsif ($type eq \"perl\"){pr\
int \"\\#$_\";}\n}\nclose (F);\nif ( $type eq \"c\\
"){print \"/*********************************COPYR\
IGHT NOTICE**********************************/\\n\\
";}\nif ( $type eq \"perl\"){print \"#############\
####################COPYRIGHT NOTICE##############\
###################/\\n\";}\nif ( $type eq \"txt\"\
){print \"----------------------------------COPYRI\
GHT NOTICE---------------------------------/\\n\";\
}\n\n","\n\nif( $ARGV[0] && -e $ARGV[0]){$file=$AR\
\n\nif (!(-e $file))\n  {\n   $line=$ARGV[1];\n }\nel\
se\n  {\n   open (INFILE,$file);\n  while (<INFILE>)\n\
            {\n         $line=$_;\n       }\n   close (INFILE);\
\n    }\n\n\n$line=~/Version_(.*)\\.([0-9]+)/;\n\n$ma\
in=$1;\n$secondary=$2;\n\nif ( $secondary>=99)\n  \
{\n    $main++;\n    $secondary=1;\n  }\nelse\n  {\
\n    $secondary++;\n  }\n\nif ($secondary<10){$se\
e\");\nprint INFILE \"Version_$main\\.$secondary\\\
n\";\nclose (INFILE);\n\n\n","\nwhile (<>)      \n    {\n   \
s/\\=cc/123456789/g;\n  s/\\bcc/\\$\\(CC\\)/g;\n      s/\
123456789/\\=cc/g;\n    print $_;\n }\n\n","use Env;\\
n$seq_reformat=\"t_coffee -other_pg seq_reformat \\
);\nchomp($tc_version=`t_coffee -version`);$tc_ver\
sion=~s/PROGRAM: //;\n\n\nprint STDERR \"\\n******\
*********\";\nprint STDERR \"\\n*           HIGH L\
EVEL PROGRAM: T-COFFEE_DPA Version $VersionTag\";\\
nprint STDERR \"\\n*           LOW  LEVEL PROGRAM:\
 $tc_version \";\nprint STDERR \"\\n**************\
*\";\n\nif (!@ARGV)\n  {\n    print \"t_coffee_dpa\
 accepts every t_coffee_flag.\\nType t_coffee to o\
btain a list\\n\";\n    print \"Requires $TC_VERSI\
ON\\n\";\n    print \"Requires \";\n    print \"t_\
coffee_dpa specific flags:\\n\";\n    print \"\\t-\
dpa_master_aln....................Master alignment\
: provided OR computed\\n\";\n    print \"\\t-dpa_\
master_aln....................By default, Computed\
 with t_coffee -very_fast\\n\";\n    print \"\\t-d\
pa_master_aln=<file>.............Use file, (must b\
e an aln in Fasta or ClustalW\\n\";\n    print \"\\
\t-dpa_master_aln=<program>..........Compute aln w\
ith pg -in seq -out aln`\\n\";\n    print \"\\t-dp\
a_maxnseq.......................Maximum number of \
sequences in subgroups\\n\";\n    print \"\\t-dpa_\
min_score1....................Minimum Id for two s\
equences to be grouped in ref_aln\\n\";\n    print\
 \"\\t-dpa_min_score2....................Minimum I\
d within a subgroup\\n\";\n    print \"\\t-dpa_deb\
ug.........................Keep Tmp File (for debu\
g purpose)\\n\\n\";\n    \n    exit (0);\n  }\nfor\
each $arg (@ARGV)\n  {\n    $arg_list.=\" $arg\";\\
n  }\n$arg_list=~s/[=,;]/ /g;\n\n\n($seq0, $arg_li\
st)=&extract_val_from_arg_list(\"^\",$arg_list, \"\
SPLICE\",\"unset\");\n($seq1, $arg_list)=&extract_\
val_from_arg_list(\"-seq\",$arg_list, \"SPLICE\",\\
"unset\");\n($seq2, $arg_list)=&extract_val_from_a\
rg_list(\"-in\",$arg_list, \"KEEP\",\"unset\");\n(\
$seq3, $arg_list)=&extract_val_from_arg_list(\"-in\
file\",$arg_list, \"SPLICE\",\"unset\");\n($prf,  \
,$arg_list, \"SPLICE\",\"unset\");\n\n$gl{'Seq'}=$\
seq=&vtmpnam();#file containing all the sequences\\
n\n   #1-remove sequences from -in\nif ( $arg_list\
 =~/\\-in\\b/)\n  {\n    my $save, $name;\n    whi\
le($arg_list=~/\\-in\\b[^-]+(\\bS[\\w.]+)/)\n     \
 {\n  $name=$1;$name=~s/^.//;\n     if ( !-e $name){$sa\
ve.=\" S$name \";}\n\n  $arg_list=~s/S$name/ /;\n  \
    }\n    $arg_list=~s/\\-in\\b/\\-in $save /;\n \
 }\n   #2-prepare \n\nif (!($arg_list=~/\\-outorde\
r/))\n  {\n    \n    $output_cl .=\" -outorder=$se\
q\";\n  }\n@output_flag=(\"-output\",\"-outfile\",\
 \"-run_name\", \"-outorder\"); \nforeach $v1 (@ou\
tput_flag)\n  {\n    ($v2, $arg_list)=&extract_val\
_from_arg_list($v1,$arg_list, \"SPLICE\",\"unset\"\
);\n    if ($v2 ne \"\")\n      {\n\n     if ($v1 eq \\
"-run_name\"){$run_name=$v2;$output_cl .=\" $v1 $v\
2 \";}\n    elsif ( $v1 eq \"-outorder\")\n       {\n    \
 if ( $v2 eq \"input\"){$v2=$seq;}\n          $outorder\
=$v2;$output_cl .=\" $v1 $v2 \";\n    }\n else\n        \
{\n       $output_cl .=\" $v1 $v2 \";\n     }\n      }\
\n }\n\n\n($dpa_master_aln, $arg_list)  =&extract_\
val_from_arg_list(\"-dpa_master_aln\",$arg_list, \\
"SPLICE\", \"t_coffee\");\n$dpa_master_aln=~s/\\s/\
/g;\n($nseqT, $arg_list)           =&extract_val_f\
rom_arg_list(\"-dpa_maxnseq\",$arg_list, \"SPLICE\\
", 30);\n($scoreT1, $arg_list)         =&extract_v\
al_from_arg_list(\"-dpa_min_score1\",$arg_list, \"\
SPLICE\", 80);\n($scoreT2, $arg_list)         =&ex\
tract_val_from_arg_list(\"-dpa_min_score2\"    ,$a\
rg_list, \"SPLICE\", 30);\n($dpa_limit, $arg_list)\
       =&extract_val_from_arg_list(\"-dpa_limit\" \
       ,$arg_list, \"SPLICE\", 0);\n($dpa_delta_id\
, $arg_list)    =&extract_val_from_arg_list(\"-dpa\
_delta_id\"        ,$arg_list, \"SPLICE\", 1);\n($\
dpa_debug, $arg_list)       =&extract_val_from_arg\
_list(\"-dpa_debug\"           ,$arg_list, \"SPLIC\
E\", 0);\n\n\n$in_seq=$seq0.\" \".$seq1.\" \".$seq\
2.\" \".$seq3;\n$in_prf=(($prf ne $unset)?\"$prf \\
":\"\");\n&exit_dpa (($in_seq eq \"\" && $in_prf e\
q \"\")?1:0, \"ERROR: You did not Provide any sequ\
ences. Use the -seq flag [FATAL: t_coffee_dpa]\\n\\
", EXIT_FAILURE);\n\n\nprint STDERR \"\\nSTART DPA\
 COMPUTATION\";\n\n\n\nif ($in_seq=~/\\S+/)\n  {\n\
    \n    print STDERR \"\\n Step $step: Gather al\
l the sequences into the tmp file: [$seq]\";$step+\
+;    \n    &my_system (\"t_coffee $in_seq -convert -\
quiet -output fasta_seq -outfile=$seq -maxnseq 0\"\
);\n  }\n\nif ( !-e $seq){$seq=\"\";}\n\nif ($in_p\
rf=~/\\S+/)\n  {\n    $seq_in_type=\"profile\"; \n\
    $seq.= $in_prf; \n  }\nif ($seq eq \"\"){ &exi\
t_dpa (1, \"\\nERROR: No Sequence FOund. Provide S\
equences with the -seq flag [FATAL: t_coffee_dpa]\\
", EXIT_FAILURE);}\n\n \n\nif ( $run_name)\n  {\n \
   $suffix=$run_name;\n  }\nelsif ($in_seq=~/\\b(S\
[\\w.]+\\b)/)\n  {\n    my $suffix1, $sufffix2;\n \
   $suffix1=$suffix2=$1;\n    $suffix2=~s/^S//;\n \
   if ( -e $suffix1){$suffix=$suffix1;}\n    elsif\
 ( -e $suffix2){$suffix=$suffix2;}\n    else\n    \
  {\n $suffix=&vtmpnam();     \n      }\n    $suffix=~\
s/\\.\\w+//;\n  }\n\nelse\n  {\n    $suffix=&vtmpn\
am();\n  }\n\n\nif (!$run_name){$output_cl.=\" -ru\
n_name $suffix \";}\n\n\n$gl{'Tree'}=&seq2dpa_tree\
 ($seq, \"$suffix.dpadnd\");\n\nprint STDERR \"\\n\
 Step $step: Prepare guide tree: $gl{'Tree'}\";$st\
ep++;\n\nprint STDERR \"\\n Step $step: Identify a\
nd Align Closely Related Groups\";$step++;\n%gl=&m\
ake_one_pass (0, $scoreT1,\"Align\",%gl);\n\nprint\
 STDERR \"\\n Step $step: Make Multiple Group Alig\
nment\";$step++;\nwhile (!%gl ||$gl{'Ng'}>$nseqT)\\
n  {\n    %gl=&make_one_pass ($nseqT, $scoreT2,\"t\
_coffee\",%gl);\n    if ( $gl{'Newgroups'}==0){$sc\
oreT2--;}    \n  }\nprint STDERR \"\\n Step $step:\
 Make The Final Alignment\";$step++;\n\n\n$arg_lis\
t .=$output_cl;\n\n\n%gl=&tree2group (0,0, %gl);\n\
gn_groups (\"t_coffee\",'0', $arg_list, \" \", %gl\
);\n\n\n\nif ( !$dpa_keep_tmpfile){&clean_tmp_file\
 (@tl);}\n\n\n\nsub seq2dpa_tree \n  {\n    my $se\
q=@_[0];\n    my $newtree=@_[1];\n    my $aln=&vtm\
pnam ();\n\n    &my_system (\"t_coffee -special_mo\
de quickaln -in $seq -outfile $aln -quiet\");\n   \
 &my_system (\"$seq_reformat -in $aln -action +aln\
2tree +tree2dpatree -output newick >$newtree\");\n\
    return $newtree;\n  }     \nsub seq2dpa_tree_old \\
n  {\n    my $aln=@_[0];\n    my $newtree=@_[1];\n\
    \n    \n    &my_system(\"$seq_reformat -in $al\
n -action +seq2dpatree -output newick > $newtree\"\
);\n    return $newtree;\n  }\nsub aln2dpa_tree \n\
  {\n    my $aln=@_[0];\n    my $newtree=&vtmpnam(\
);\n    \n    &my_system(\"$seq_reformat -in $aln \
-action +aln2tree +tree2dpatree -output newick > $\
newtree\");\n    return $newtree;\n  }\nsub group_\
file2ngroups\n  {\n    my $file=@_[0];\n    my $n;\
\n    \n    open ( F, $file);\n    while (<F>)\n  \
    {\n     $n+=/\\>/;\n      }\n    close (F);\n    r\
eturn $n;\n  }\n\nsub make_one_pass\n  {\n    my (\
$N, $ID,$pg, %gl)=@_;\n    my $a;\n\n    %gl=&tree\
2group ($N,$ID,%gl);\n    if (!$gl{'Newgroups'}){r\
eturn %gl;}\n    else\n      {\n    for ( $a=0; $a< $\
ng; $a++)\n   {\n     if ($gl{$gl{$a}{'File'}}{'Ng\
'}>1){&display_group($a, %gl);}\n       &align_group\
s ($pg, $a, $arg_list, \" -quiet=quiet \", %gl);\n\
        }\n return %gl;\n      }\n  }\n\nsub tree2group\
 \n  {\n    my ($N, $ID, %gl)=@_;\n    my $prefix=\
&vtmpnam();\n    my $group_file=&vtmpnam();\n    m\
y $file;\n    my $oldtree=&vtmpnam();\n    my $n;\\
n    my $tree;\n\n\n    if ( $gl{'Ng'}==1){return \
%gl;}\n    $tree=$gl{'Tree'}; \n    \n    #1 extra\
ct the groups\n    &my_system (\"$seq_reformat -in\
 $tree -action +tree2group $N $ID $prefix > $group\
_file\");\n    $n=group_file2ngroups($group_file);\
\n    \n    \n    $gl{'Newgroups'}=1;\n    if ( $n\
==$gl{'Ng'})\n      {\n $gl{'Newgroups'}=0;\n   retu\
rn %gl;\n      }\n    $gl{'Iteration'}++;\n    $gl\
{'MaxNseq'}=$N;$gl{'MinID'}=$ID;\n    $gl{'GroupFi\
le'}=$group_file;$gl{'Ng'}=$ng=0;\n    #2 Process \
the group list into the hash\n    open (F, $group_\
file);\n    while (<F>)\n      {\n  $gl{'File'}.=$_\
;\n   if (/\\>/)\n        {\n     $line=$_;\n       $line=~\
s/\\>//;\n      @list=($line=~/(\\S+)/g);\n         $fi\
le=$gl{$ng}{'File'}=shift @list;\n      $gl{$file}{\
'Output'}=$file;\n          \n          $gl{$file}{'Ng'}=$#l\
ist+1;\n        if ($gl{$file}{'Ng'}>1){ $gl{$file}{'\
Tlist'}=$gl{$file}{'Alist'}=\"(\";}\n         foreach \
$l (@list)\n            {\n   \n          $gl{$file}{'List'}.=\" \
$l \";\n          \n          if (!$gl{$l}{'Tlist'})\n              {\n          \
 $gl{$l}{'Tlist'}=\"$l\";\n             $gl{$l}{'Alist'}=\
\"$l\";\n             $gl{$l}{'Nseq'}=1;\n                $gl{$l}{'\
Ng'}=1;\n           }\n       $gl{$file}{'Tlist'}.=\"$gl{$l}{'\
Tlist'},\";\n           $gl{$file}{'Alist'}.=\"$gl{$l}{'Tli\
st'}|\";\n        $gl{$file}{'Nseq'}+=$gl{$l}{'Nseq'};\n\
            }\n       \n\n        chop($gl{$file}{'Tlist'});\
chop($gl{$file}{'Alist'});\n      if ($gl{$file}{'N\
g'}>1){$gl{$file}{'Tlist'}.=\")\"; $gl{$file}{'Ali\
st'}.=\");\";}\n      $ng++;\n        }   \n      }\n    $\
gl{'Ng'}=$ng;\n    close (F);\n    \n    #3 Update\
 the old tree with the new groups\n    $gl{'Tree'}\
=&vtmpnam();\n    &my_system (\"$seq_reformat -in \
$tree -action +collapse_tree $group_file -output n\
ewick > $gl{'Tree'}\");\n    \n    return %gl;\n  \
}\n\nsub display_group \n  {\n    my ($g,%gl)=@_;\\
n    my $f;\n    \n    if ( $g==-1)\n      {\n  pri\
nt STDERR \"\\nIteration $gl{'Iteration'} [MaxN=$g\
l{'MaxNseq'}][MinID=$gl{'MinID'}]\";\n      }\n   \
 else\n      {\n\n      $f=$gl{$g}{'File'};\n   $action=(\
$gl{$f}{'Ng'}==1 || $gl{'Iteration'}==1)?\"KEEP  \\
":\"ALIGN \";\n        print STDERR \"\\n\\t[$acti\
on][MaxN=$gl{'MaxNseq'}][MinID=$gl{'MinID'}][File \
gl{$f}{'Alist'}]\";\n      }\n  }\n      \n\n\nsub\
 align_groups\n  {\n    my ($pg, $g, $arg, $extra_\
arg,%gl)=@_;\n    my $f;\n    my $Output,$Outflag;\
\n    \n    \n    $f=$gl{$g}{'File'};\n    $Output\
=($gl{$f}{'Output'});\n    \n    if ( $pg eq \"Ali\
gn\")\n      {\n  if ( !-e $f)\n      {\n     $command\
=\"$seq_reformat -in $gl{'Seq'}  -action +extract_\
aln $gl{'GroupFile'}\";\n         if ($gl{$f}{'Ng'}>1)\
\n          {\n         &my_system ($command);\n            $command=\\
"t_coffee -special_mode quick_aln  S$f -outfile=$O\
utput -quiet\";\n       }\n     }\n else \n       {$comm\
and=\"\";}\n      }\n    elsif ( -e $f)\n      {      \\
n     $Outflag=($Output)?\"-outfile=$Output\":\"\";\n \
$command=\"$pg -infile $f $Outflag -quiet stdout $\
arg $extra_arg -maxnseq 0 -convert -quiet stdout\"\
;\n      }\n    elsif ( $gl{$f}{'Ng'}==1)\n      {\
\n    $action=($dpa_debug)?\"cp\":\"mv\";\n     $command=\
\"$action $gl{$f}{'List'} $Output\";\n      }\n   \
 else\n      {\n  $Outflag=($Output)?\"-outfile=$Ou\
tput\":\"\";\n    $command=\"$pg -profile $gl{$f}{'Li\
st'} $Outflag $arg $extra_arg -maxnseq 0\";\n     \
 }\n    \n    &my_system ($command);\n    return $\
outfile;\n  }\n    \nsub my_system \n  {\n    my $\
command=@_[0];\n    my $force=@_[1];\n    my $stat\
us;\n\n    if ( $dpa_debug) {print STDERR \"\\nCOM\
MAND: $command\";}\n    $status=system ($command);\
\n\n    if (!$force)\n       {\n     &exit_dpa (($sta\
tus==1), \"Failed in Command:\\n$command\\n[FATAL:\
 t_coffee_dpa]\\n\", EXIT_FAILURE);\n       }\n   \
 \n    return $status;\n  }\n\nsub vtmpnam\n  {\n \
   my $prefix=@_[0];\n    my $tmp_file_name;\n\n  \
";\n   \n    $tmp_count++;\n    $tmp_file_name=\"$\
tmp_prefix\".\"$tmp_count\";\n    $tl[$#tl+1]=$tmp\
_file_name;\n    return $tmp_file_name;\n  }\n\nsu\
b clean_tmp_file\n  {\n\n    my $list;\n    my $fi\
le;\n    \n    if ($dpa_debug){return;}\n    $list\
=vtmpnam();\n    `ls -1 | grep $tmp_prefix>$list`;\
\n    \n    open (F,$list);\n    while ( <F>)\n   \
   {\n      $file=$_;\n chop $file;\n     if ( -e $file){un\
link $file;}\n      }\n    close (F);\n    unlink \
$list;\n  }\n\n\nsub exit_dpa\n  {\n  my $conditio\
n=@_[0];\n  my $error_msg=@_[1];\n  my $exit_value\
=@_[2];\n  if ( $condition)\n    {\n      print \"\
$error_msg\\n\";\n      exit ($exit_value);\n    }\
\n  else\n    {\n      return;\n    }\n  \n}\nsub \
extract_val_from_arg_list\n  {\n    my $arg=@_[0];\
\n    my $arg_list=@_[1];\n    my $keep_flag=@_[2]\
;\n    my $default_value=@_[3];\n    my $val=\"\";\
\n    \n    #protect\n    $arg_list=~s/\\s-/ \\@/g\
;\n    $arg=~s/-/\\@/g;\n    \n    #search\n    if\
 ($arg eq \"^\")\n      {\n   $arg_list=~/^([^@]*)/;\
\n    $val=$1;\n      }\n    else\n      {$arg_list=~\
/$arg ([^@]*)/;$val=$1;}\n    \n    #remove traili\
ng spaces\n    $val=~s/\\s*$//;\n    \n    #remove\
 the parsed sequence if needed\n    if (($val ne \\
"\") && $keep_flag ne \"KEEP\")\n      {\n      if ( $a\
rg eq \"^\"){$arg_list=~s/$val/ /;}\n     else {$arg_l\
ist=~s/($arg [^@]*)/ /;}\n      }\n \n    #unprote\
ct\n    $arg_list=~s/\\@/-/g;\n    $arg=~s/\\@/-/g\
;\n    \n    if (($val eq \"\") && $default_value \
ne \"unset\"){$val=$default_value;}\n    \n    ret\
urn $val, $arg_list;\n  }\n$program=\"T-COFFEE ()\\
nif (!@ARGV)\n  {\n    `t_coffee`;\n    exit (0);\\
n  }\nforeach $arg (@ARGV)\n  {\n    $arg_list.=\"\
 $arg\";\n  }\n$max_nseq=10;\n($seq0, $arg_list)=&\
1, $arg_list)=&extract_val_from_arg_list(\"-seq\",\
$arg_list);\n($seq2, $arg_list)=&extract_val_from_\
arg_list(\"-in\",$arg_list, \"KEEP\");\n($seq3, $a\
rg_list);\n$in_seq=$seq0.\" \".$seq1.\" \".$seq2.\\
" \".$seq3;\n\n$seq=vtmpnam();\n`t_coffee $in_seq \
-convert -output fasta_seq -outfile=$seq`;\n\n\n($\
dpa_nseq, $arg_list)=&extract_val_from_arg_list(\"\
-dpa_nseq\",$arg_list);\n($master_aln, $arg_list)=\
st);\n($sim_matrix, $arg_list)=&extract_val_from_a\
rg_list(\"-sim_matrix\",$arg_list);\n($core_seq, $\
,$arg_list);\n($dpa_sim, $arg_list)=&extract_val_f\
\",$arg_list);\n($output, $arg_list)=&extract_val_\
from_arg_list(\"-output\",$arg_list);\n\n\n\nif (!\
$sim_mat && !$master_aln)#Compute the fast alignme\
nt\n  {\n    $ref_aln=vtmpnam();\n    `t_coffee -s\
eq=$seq -very_fast -outfile=$ref_aln -quiet`;\n   \
 \n  }\n\nif (!$sim_mat)\n  {\n    $sim_mat=vtmpna\
m();\n    `seq_reformat -in $ref_aln -output sim >\
 $sim_mat`;\n  }\n\nif ( !$core_seq)\n  {\n    $co\
re_seq=vtmpnam();\n    `seq_reformat -in $ref_aln \
-action +trimTC N$max_nseq -output fasta_seq > $co\
re_seq`;\n  }\n@core_name=`seq_reformat -in $core_\
seq -output name `; \n\n@tot_name=`seq_reformat -i\
n $seq -output name `;\n\nforeach $s (@core_name){\
$s=~s/\\s//g;$hcore{$s}=1;}\nforeach $s (@tot_name\
){$s=~s/\\s//g;}\nprint STDERR \"T-Coffee_dpa:\\n\\
";\nprint STDERR \"\\tTOTAL  SEQ: @tot_name\\n\";\\
nprint STDERR \"\\tCHOSEN SEQ: @core_name\\n\";\n\\
n\n\nopen (F, $sim_mat);\nwhile ( <F>)\n  {\n    @\
l=($_=~/(\\b[\\S]+\\b)/g);\n    if (($l[0] eq \"TO\
P\" || $l[0] eq \"BOT\"))\n      {\n      $s1=$l[1];$s2\
=$l[2];$v=$l[3];\n      if ($hcore{$s1} && !$hcore{$s2}\
)\n     {\n     if (!$hseq{$s2}{\"sim\"} || $v>$hseq\
{$s2}{\"sim\"})\n       {\n         $hseq{$s2}{\"sim\"}=$\
v;$hseq{$s2}{\"seq\"}=$s1;\n        }\n     }\n      \
}\n  }\nclose (F);\nforeach $s (@tot_name)\n  {\n\\
n    if ( !$hseq{$s}{\"seq\"}){;}\n    else\n     \
 {\n  $s2=$hseq{$s}{\"seq\"};\n     $v=$hseq{$s}{\"sim\\
"};\n       \n    if ($v>$dpa_sim)\n        {\n     $hseq{$s}{'\
used'}=1;\n     $seq_list{$s2}{$seq_list{$s2}{'nse\
q'}++}=$s;\n        }\n      }\n  }\nforeach $s (@core_\
seq{$s}{'used'}=1;}\nforeach $s (@tot_name){if (!$\
nused'}{'nseq'}++}=$s;}}\n\n\n$n=0;\nforeach $s (@\
core_name)\n  {\n    $ng++;\n    $n=$seq_list{$s}{\
'nseq'};\n    for (@g_list=(), $a=0; $a<$n; $a++){\
@g_list=(@g_list,$seq_list{$s}{$a});}\n\n    $g_se\
q=vtmpnam();\n    $g_aln=vtmpnam();\n    \n    pri\
nt STDERR \"Group $ng: $#g_list Seq: @g_list: \";\\
n    \n    \n    `seq_reformat -in $seq -action +l\
ower +keep_name +extract_seq  @g_list -output fast\
a_seq > $g_seq`;\n    \n    \n    if ( $#g_list==0\
)\n      {\n      print STDERR \"[No aln]\\n\";\n     $g_al\
n=$g_seq;\n      }\n    elsif ($#g_list<$max_nseq)\
 \n      {\n      print STDERR \"[t_coffee]\\n\";\n   `t_\
coffee $g_seq -outfile=$g_aln -quiet $arg_list`;\n\
      }\n    else\n      {\n  print STDERR \"[t_cof\
fee_dpa]\\n\";\n  `t_coffee_dpa2 $g_seq -outfile=$g\
_aln $arg_list -sim_matrix $sim_matrix -dpa_nseq $\
dpa_nseq`;\n      }\n    @profile_list=(@profile_l\
ist, $g_aln);\n  }\n\n\nprint \"UNUSED $seq_list{'\
unused'}{'nseq'}\";\n\nif ($seq_list{'unused'}{'ns\
eq'})\n    {\n      $prf=vtmpnam();\n      \n     \
 `t_coffee -profile @profile_list $arg_list -outfi\
le=$prf -quiet`;\n      $n=$seq_list{\"unused\"}{'\
nseq'};\n      $new_seq=vtmpnam();\n      $new_prf\
=vtmpnam();\n      for ($a=0; $a<$n-1; $a++)\n  {\n\
        $s=$seq_list{\"unused\"}{$a};\n     print STDERR \
\"\\nADD Sequence $s\";\n       \n    `seq_reformat -in\
 $seq -action +lower +keep_name +extract_seq $s  -\
output fasta_seq > $new_seq`;\n       `t_coffee -profi\
le $prf $new_seq $arg_list -outfile=$new_prf`;\n       \
 `cp $new_prf $prf`;\n  }\n      $s=$seq_list{\"unu\
sed\"}{$a};\n      `seq_reformat -in $seq -action \
+lower +keep_name +extract_seq $s  -output fasta_s\
eq > $new_seq`;\n      @profile_list=($prf, $new_s\
eq);\n    }\n    \n      \nif ($run_name){$arg_lis\
t.=\" -run_name $run_name\";}\nelse \n  {\n    $in\
_seq=~/([\\w-]+)/;\n    $arg_list.=\" -run_name $1\
\";\n  }\nif ( $output){$arg_list.=\" -output $out\
put \";}\n\n`t_coffee -profile @profile_list $arg_\
list`;\n\n\n&clean (@tmp_file_list);\n\n\nsub vtmp\
nam\n  {\n    my $tmp_file_name;\n    $tmp_name_co\
unter++;\n    $tmp_file_name=\"tmp_file_$tmp_name_\
counter\\_Pid$$\";\n    $tmp_file_list[$ntmp_file+\
+]=$tmp_file_name;\n    return $tmp_file_name;\n  \
}\nsub clean\n  {\n  my @fl=@_;\n  my $file;\n  re\
turn;\n\n  foreach $file ( @fl)\n    {\n      if (\
 -e $file){unlink($file);}\n    }\n}\nsub extract_\
val_from_arg_list\n  {\n    my $arg=@_[0];\n    my\
 $arg_list=@_[1];\n    my $keep_flag=@_[2];\n    #\
protect\n    $arg_list=~s/\\s-/ \\@/g;\n    $arg=~\
s/-/\\@/g;\n    \n    #search\n    if ($arg eq \"^\
\")\n      {\n    $arg_list=~/^([^@]*)/;\n      $val=$1;\n\
      }\n    else\n      {$arg_list=~/$arg ([^@]*)\
/;$val=$1;}\n    \n    #remove the parsed sequence\
 if needed\n    if ($val && $keep_flag ne \"KEEP\"\
)\n      {\n      if ( $arg eq \"^\"){$arg_list=~s/$val\
/ /;}\n     else {$arg_list=~s/($arg [^@]*)/ /;}\n    \
  }\n \n    #unprotect\n    $arg_list=~s/\\@/-/g;\\
n    $arg=~s/\\@/-/g;\n    \n    return $val, $arg\
_list;\n  }\n\n","use Env;\n\nuse Cwd;\n$HOME=$ENV\
{HOME};\nif ($ENV{TMP_4_TCOFFEE}){$tmp=$ENV{TMP_4_\
eric_method.pl\";\n\nforeach $v(@ARGV){$cl.=\"$v \\
";}\n($mode)=&my_get_opt ( $cl, \"-mode=\",1,0);\n\
\nif ($mode eq \"seq_msa\")\n  {\n    &seq2msa($mo\
de,&my_get_opt ( $cl, \"-infile=\",1,1, \"-method=\
\",1,2, \"-param=\",0,0, \"-outfile=\",1,0,\"-supp\
ort\",0,0));\n  }\nelsif ( $mode eq \"thread_pair\\
")\n  {\n    &seq2thread_pair($mode,&my_get_opt ( \
$cl, \"-infile=\",1,1, \"-pdbfile1=\",1,1, \"-meth\
od=\",1,2,\"-param=\",0,0, \"-outfile=\",1,0, ));\\
n  }\nelsif ( $mode eq \"pdb_pair\")\n  {\n    &se\
q2pdb_pair($mode,&my_get_opt ( $cl, \"-pdbfile1=\"\
,1,1, \"-pdbfile2=\",1,1, \"-method=\",1,2,\"-para\
m=\",0,0, \"-outfile=\",1,0, ));\n  }\nelsif ( $mo\
de eq \"profile_pair\")\n  {\n     &seq2profile_pa\
ir($mode,&my_get_opt ( $cl, \"-profile1=\",1,1, \"\
-profile2=\",1,1, \"-method=\",1,2,\"-param=\",0,0\
, \"-outfile=\",1,0, ));\n  }\n\nsub seq2msa\n  {\\
n    my ($mode, $infile, $method, $param, $outfile\
)=@_;\n    &set_temporary_dir (\"set\",$infile,\"s\
eq.pep\");\n    $param.=\" >/dev/null 2>&1 \";\n  \
  if ( $method eq \"muscle\")\n      {\n  `muscle -\
in seq.pep -out result.aln $param`;\n      }\n    \
elsif ( $method eq \"probcons\")\n      {\n     `probc\
ons seq.pep >result.aln 2>/dev/null`;\n      }\n  \
  elsif ( $method eq \"mafft\")\n      {\n      `mafft \
--quiet --localpair --maxiterate 1000 seq.pep> res\
ult.aln  2>/dev/null`\n      }\n    else\n      {\\
n     `$method -infile=seq.pep -outfile=result.aln $pa\
ram`;\n      }\n    &set_temporary_dir (\"unset\",\
$mode, $method,\"result.aln\",$outfile);\n    exit\
 (EXIT_SUCCESS);\n  }\n\nsub seq2thread_pair\n  {\\
n    my ($mode, $infile, $pdbfile1, $method, $para\
m, $outfile)=@_;\n    &set_temporary_dir (\"set\",\
$infile,\"seq.pep\",$pdbfile1,\"struc.pdb\");\n   \
 if ($method eq \"fugueali\")\n      {\n  #Env Vari\
able that need to be defined for Fugue\n  if (!$ENV\
=\"DUMMY\";}\n    if (!$ENV{HOMS_PATH}){$ENV{HOMS_PAT\
H}=\"DUMMY\";}\n  \n    `joy struc.pdb >x 2>x`;\n     &che\
ck_file(\"struc.tem\", \"Joy failed [FATAL:$progra\
m/$method]\");\n  `melody -t struc.tem >x 2>x`;\n     &\
check_file(\"struc.tem\", \"Melody failed [FATAL:$\
program/$method]\");\n  `fugueali -seq seq.pep -prf\
 struc.fug -print > tmp_result.aln`;\n    \n    &check_f\
ile(\"tmp_result.aln\", \"Fugue failed [FATAL:$pro\
gram/$method]\");\n     `t_coffee -other_pg seq_reform\
at -in tmp_result.aln -output fasta_aln >result.al\
n`;\n      }\n    elsif ( $method eq \"t_coffee\")\
\n      {\n `t_coffee -in Pstruc.pdb Sseq.pep Mslo\
w_pair -outfile result.aln -quiet`;\n      }\n    \
else\n      {\n   `$method -infile=seq.pep -pdbfile1\
=struc.pdb -outfile=result.aln $param>x 2>x`;\n   \
   }\n    &set_temporary_dir (\"unset\",$mode,$met\
hod,\"result.aln\",$outfile);\n    exit (EXIT_SUCC\
ESS);\n  }\n\nsub seq2pdb_pair\n  {\n    my ($mode\
, $pdbfile1, $pdbfile2, $method, $param, $outfile)\
=@_;\n    \n    &set_temporary_dir (\"set\",$pdbfi\
le1,\"pdb1.pdb\",$pdbfile2,\"pdb2.pdb\");\n    if \
($method eq \"t_coffee\")\n      {\n      print \"t_cof\
fee -in Ppdb1.pdb Ppdb2.pdb -quiet -outfile=result\
.aln\";\n   `t_coffee -in Ppdb1.pdb Ppdb2.pdb -quiet\
 -outfile=result.aln`;\n      }\n    else\n      {\
\n    `$method -pdbfile1=pdb1.pep -pdbfile2=pdb2.pdb \
-outfile=result.aln $param>x 2>x`;\n      }\n    &\
set_temporary_dir (\"unset\",$mode, $method, \"res\
ult.aln\",$outfile);\n    exit (EXIT_SUCCESS);\n  \
}\n\nsub seq2profile_pair\n  {\n    my ($mode, $pr\
ofile1, $profile2, $method, $param, $outfile)=@_;\\
n    \n    \n    if ($method eq \"clustalw\")\n   \
   {\n      &set_temporary_dir (\"set\",$profile1,\"prf\
1.aln\",$profile2,\"prf2.aln\");\n  `clustalw -prof\
ile1=prf1.aln -profile2=prf2.aln -outfile=result.a\
ln`;\n      &set_temporary_dir (\"unset\",$mode, $metho\
d, \"result.aln\",$outfile);\n      }\n    elsif (\
 $method eq \"hhalign\")\n      {\n hhalign ( $pro\
file1,$profile2,$outfile,$param);\n      }\n    el\
se\n      {\n     \n    `$method -profile1=prf1.aln -prof\
ile2=prf2.aln -outfile=result.aln $param>x 2>x`;\n\
      }\n   \n    exit (EXIT_SUCCESS);\n  }\n\n\ns\
ub check_pg_is_installed\n  {\n    my @ml=@_;\n   \
 my $r, $p, $m;\n    my $supported=0;\n    \n    m\
y $p=shift (@ml);\n\n    \n    $r=`which $p`;\n   \
 if ($r eq \"\")\n      {\n   print STDERR \"\\nProg\
ram $p Supported but Not Installed on your system \
[FATAL:tc_generic_method]\\n\";\n   exit (EXIT_FAILU\
RE);\n      }\n    else\n      {\n  return 1;\n    \
  }\n  }\n\nsub set_temporary_dir\n  {\n    my @li\
st=@_;\n    my $dir_mode, $a, $mode, $method;\n\n \
   $dir_mode=shift (@list);\n\n    if ( $dir_mode \
eq \"set\")\n      {\n  $initial_dir=cwd();\n   srand\
;\n   $rand=rand (100000);\n  $tmp_dir=\"$tmp/tmp4tco\
ffee_profile_pair_dir_$$_P_$rand\";\n     `mkdir $tmp_\
dir`;\n     for ( $a=0; $a<=$#list; $a+=2)\n          {\n\
            `cp $list[$a] $tmp_dir/$list[$a+1]`;\n          }\n\
      chdir $tmp_dir;\n      }\n    elsif ( $dir_mode e\
q \"unset\")\n      {\n $mode=shift (@list);\n  $me\
thod=shift (@list);\n   \n    if (!-e $list[0])\n       {\n\
          print STDERR (\"Program $method failed to pro\
duce $list[1] [FATAL:$mode/$method/$program]\\n\")\
;\n       exit (EXIT_FAILURE);\n      }\n else\n        {\n \
    chdir $initial_dir;\n         `t_coffee -other_pg \
seq_reformat -in $tmp_dir/$list[0] -output fasta_a\
ln -out $tmp_dir/result2.aln`;\n        if ( $list[1]\
 eq \"stdout\")\n       {\n         open (F, \"$tmp_dir/r\
esult2.aln\");\n        while (<F>){print $_;}close(F);\\
n           }\n       else\n        {\n         `mv $tmp_dir/res\
ult2.aln $list[1]`;\n         }\n     }\n `rm $tmp_dir\
/*`;\n      `rmdir $tmp_dir`;\n      }\n  }\n\n\nsub my\
_get_opt\n  {\n    my @list=@_;\n    my $cl, $a, $\
argv, @argl;\n    \n    @argl=();\n    $cl=shift @\
list;\n    for ( $a=0; $a<=$#list; $a+=3)\n      {\
\n    $option=$list[$a];\n    $optional=$list[$a+1];\n      $\
status=$list[$a+2];\n   $argv=\"\";\n     if ($cl=~/$opt\
ion(\\S+)/){$argv=$1;}\n      @argl=(@argl,$argv);\n  \n\
      \n    #$optional:0=>optional\n      #$optional:1=>must be\
 set\n      #$status: 0=>no requirement\n #$status: 1=>\
must be an existing file\n    #$status: 2=>must be an\
 installed package\n    \n\n  if ($optional==0){;}\n  e\
lsif ( $optional==1 && $argv eq \"\")\n     {\n     \
print STDERR \"ERROR: Option $option must be set [\
FATAL:$program/$mode/$method]\\n\";\n         exit (EX\
IT_FAILURE);\n      }\n if ($status==0){;}\n    elsif ($\
status ==1 && $argv ne \"\" && !-e $argv)\n       {\n \
    print STDERR \"ERROR: File $argv must exist [F\
ATAL:$program/$mode/$method]\\n\";\n          exit (EXI\
T_FAILURE);\n       }\n elsif ( $status==2 && $argv ne\
 \"\" && &check_pg_is_installed ($argv)==0)\n     {\\
n         print STDERR \"ERROR: $argv is not installed\
 [FATAL:$program/$mode/$method]\\n\";\n       exit (\
EXIT_FAILURE);\n    }\n      }\n\n    return @argl;\
\n    }\n\nsub check_file \n  {\n    my ($file, $m\
sg)=@_;\n\n    if ( !-e $file)\n      {\n print \"\
\\n$msg\\n\";\n   exit (EXIT_FAILURE);\n      }\n   \
 }\nsub hhalign\n  {\n    my ($aln1, $aln2, $outfi\
le, $param)=@_;\n    my $h1, $h2;\n    \n    $h{0}\
{index}=0;\n    $h{1}{index}=1;\n    \n    $h{0}{a\
ln}=$aln1;\n    $h{1}{aln}=$aln2;\n\n   \n\n    %{\
$h{0}}=aln2psi_profile (%{$h{0}});\n    %{$h{1}}=a\
ln2psi_profile (%{$h{1}});\n\n    $param=~s/#S/ /g\
;\n    $param=~s/#M/\\-/g;\n    $param=~s/#E/\\=/g\
;\n    \n\n    \n    $command=\"hhalign -i $h{0}{a\
3m} -t $h{1}{a3m} -tc $outfile.tmp -rank 1 -mapt 0\
 $param\";\n    `$command`;\n    \n  #  `hhalign -\
i $h{0}{a3m} -t $h{1}{a3m} -tc $outfile.tmp -rank \
1 -mapt 0 -gapf 0.8 -gapg 0.8`;\n    \n\n    # To \
run global use the following\n    \n    open (I, \\
"$outfile.tmp\");\n    open (O, \">$outfile\");\n \
   $h{0}{cons}=s/\\./x/g;\n    $h{1}{cons}=s/\\./x\
/g;\n\n    print O \"! TC_LIB_FORMAT_01\\n2\\n$h{0\
}{name} $h{0}{len} $h{0}{seq}\\n$h{1}{name} $h{1}{\
len} $h{1}{seq}\\n#1 2\\n\";\n    \n    while (<I>\
)\n      {\n      if (/(\\d+)\\s+(\\d+)\\s+(\\d+)/)\n  \
 {\n      print O \"\\t$h{0}{$1}\\t$h{1}{$2}\\t$3\\\
n\";\n        }\n      }\n    print O \"! SEQ_1_TO_N\\n\
\";\n\n    close (O);\n    close (I);\n  }\n\nsub \
aln2psi_profile\n  {\n    my (%h)=@_;\n    my ($al\
n,$i,$hv, $a, @c, $n);\n   \n    $i=$h{index};\n  \
  $aln=$h{aln};\n\n    `cp $aln $$.hhh_aln`;\n    \
$command=\"t_coffee -other_pg seq_reformat -in $al\
n -output hasch\";\n    $hv=`$command`;chomp ($hv)\
;\n    \n    $h{a2m}=\"$tmp/$hv.tmp4hhpred.a2m\";\\
n    $h{a3m}=\"$tmp/$hv.tmp4hhpred.a3m\";\n    if \
( -e $h{a3m}){;}\n    else\n      {\n     `hhconsensus\
  -M 50 -i $h{aln} -oa2m $h{a2m}`;\n      if (!-e $h{a2\
m})\n   {\n     print STDERR \"Program tc_generic_\
method.pl FAILED to run:\\n\\thhconsensus  -M 50 -\
i $h{aln} -oa2m $h{a2m}\";\n      exit (EXIT_FAILUR\
E);\n   }\n \n    `hhconsensus  -M 50 -i $h{aln} -oa3\
m $h{a3m}`;\n     if (!-e $h{a3m})\n        {\n     print S\
TDERR \"Program tc_generic_method.pl FAILED to run\
:\\n\\thhconsensus  -M 50 -i $h{aln} -oa3m $h{a3m}\
\";\n     exit (EXIT_FAILURE);\n      }\n       `buil\
dali.pl $h{a3m} -n 1`;\n      }\n    \n    \n    $\
h{a2m_seq}=`head -n 2 $h{a2m} | grep -v \">\"`;cho\
mp ($h{a2m_seq});\n    $h{a3m_seq}=`head -n 2 $h{a\
3m} | grep -v \">\"`;chomp ($h{a3m_seq});\n    $h{\
cons}=$h{a2m_seq};\n    $h{seq}=`head -n 2 $h{aln}\
 | grep -v \">\"`;chomp ($h{seq});\n    \n    \n\n\
    @c=split (//, $h{cons});\n    $h{len}=$#c+1;\n\
    for ($n=0,$a=0, $b=0; $a<$h{len};$a++)\n      \
{\n   if ( $c[$a]=~/[A-Z]/)\n   {\n     $h{++$n}=++$\
b;\n\n        }\n elsif ( $c[$a]=~/[a-z\\.]/)\n   {\n  \
   ++$b;\n    }\n      }\n    \n    $name=`head -n \
2 $h{aln} | grep \">\"`;\n    $name=~/\\>(\\S+)/;\\
n    $h{name}=$1;\n    \n    `cp $h{a2m} $i.a2m`;\\
n    `cp $h{a3m} $i.a3m`;\n    `cp $h{aln} $i.hh_a\
ln`;\n    \n    return %h;\n  }\n$program=\"T-COFF\
EE (Version_5.07)\";\\n\n","*TC_METHOD_FORMAT_01\n\
*****\n*\n*       Incorporating new methods in T-C\
offee\n*       Cedric Notredame 17/04/05\n*\n*****\
\n*This file is a method file\n*Copy it and adapt \
it to your need so that the method \n*you want to \
use can be incorporated within T-Coffee\n*********\
**********************************************\n* \
                 USAGE                            \
**********\n*This file is passed to t_coffee via -\
in:\n*\n*   t_coffee -in Mgeneric_method.method\n*\n\
*     The method is passed to the shell using the foll\
NAME>       <TYPE>            <VALUE>\n*<VALUE>:      no_name     <=> Rep\
laced with a space\n*<VALUE>: &nbsp <=> Replaced w\
ith a space\n*\n**********************************\
*********************\n*                  EXECUTAB\
LE                         *\n********************\
***********************************\n*name of the \
executable\n*passed to the shell: executable\n* \n\
EXECUTABLE  tc_generic_method.pl\n*\n**************\
*****************************************\n*      \
            ALN_MODE                           *\n\
*****\n*pairwise   ->all Vs all (no self )[(n2-n)/\
2aln]\n*m_pairwise ->all Vs all (no self)[n^2-n]^2\
\n*s_pairwise ->all Vs all (self): [n^2-n]/2 + n\n\
*multiple   ->All the sequences in one go\n*\nALN_\
MODE        pairwise\n*\n*******************************\
************************\n*                  OUT_M\
ODE                           *\n*****************\
**************************************\n* mode for\
 the output:\n*External methods: \n* aln -> alignm\
nent File (Fasta or ClustalW Format)\n* lib-> Lib \
file (TC_LIB_FORMAT_01)\n*Internal Methods:\n* fL \
-> Internal Function returning a List (Librairie)\\
n* fA -> Internal Function returning an Alignmnent\
\n*\nOUT_MODE           aln\n*\n***************************\
****************************\n*                  I\
N_FLAG                             *\n************\
LAG\n*flag indicating the name of the in coming se\
quences\n*IN_FLAG S no_name ->no flag\n*IN_FLAG S \
&nbsp-in&nbsp -> \" -in \"\n*\nIN_FLAG          -infile=\n\
********\n*                  OUT_FLAG             \
**********************\n*OUT_FLAG\n*flag indicatin\
g the name of the out-coming data\n*same conventio\
ns as IN_FLAG\n*OUT_FLAG      S no_name ->no flag\n*\nO\
UT_FLAG           -outfile=\n*\n***************************\
****************************\n*                  S\
EQ_TYPE                           *\n*************\
******************************************\n*G: Ge\
nomic, S: Sequence, P: PDB, R: Profile\n*Examples:\
\n*SEQTYPE  S     sequences against sequences (default)\
\n*SEQTYPE  S_P   sequence against structure\n*SEQTYP\
E     P_P   structure against structure\n*SEQTYPE     PS    mix\
 of sequences and structure   \n*\nSEQ_TYPE     S\n*\n**\
***\n*                  PARAM                     \
*****************\n*Parameters sent to the EXECUTA\
BLE \n*If there is more than 1 PARAM line, the lin\
es are\n*concatenated\n*\nPARAM     -mode=seq_msa -met\
hod=clustalw\nPARAM   -OUTORDER=INPUT -NEWTREE=cor\
e -align -gapopen=-15\n*\n************************\
*******************************\n*                \
  END                                *\n**********\
od.tc_method*********\nEXECUTABLE   clustalw\nALN_MO\
DE          pairwise\nIN_FLAG       -INFILE=\nOUT_FLAG            -OUTFIL\
E=\nOUT_MODE            aln\nPARAM        -gapopen=-10\nSEQ_TYPE        \
**\n","\n$t_coffee=\"t_coffee\";\n\nforeach $value\
 ( @ARGV)\n  {\n    $seq_file=$seq_file.\" \".$val\
ue;\n  }\n\n$name=$ARGV[0];\n$name=~s/\\.[^\\.]*$/\
e $seq_file -get_type -quiet`;\nchop ($type);\n\ni\
f ( $type eq \"PROTEIN\"){$lib_mode=\"lalign_rs_s_\
pair -lalign_n_top 20\";}\nelsif ( $type eq\"DNA\"\
){$lib_mode=\"lalign_rs_s_dna_pair -lalign_n_top 4\
0\";}\n\nif ( !(-e $lib_name))\n  {\n       \n  $comma\
nd=\"$t_coffee -mocca -seq_weight=no -cosmetic_pen\
alty=0 -mocca_interactive -in $lib_mode -out_lib $\
lib_name -infile $seq_file\";\n  \n  }\nelsif ( (-\
e $lib_name))\n  {\n  $command=\"$t_coffee -mocca \
-seq_weight=no -cosmetic_penalty=0 -mocca_interact\
ive -in $lib_name -infile $seq_file\";\n  \n  }\n\\
nsystem ($command);\n\nexit;\n\n","\nuse Env qw(HO\
ST);\nuse Env qw(HOME);\nuse Env qw(USER);\n\n$tmp\
=clean_cr ($ARGV[0]);\nopen (F, $tmp);\n\nwhile ( \
<F>)\n  {\n    $file.=$_;\n  }\nclose (F);\nunlink\
=~s/\\n[\\.:*\\s]+\\n/\\n\\n/g;\n\n$file=~s/\\n[ \\
\\s+)(\\S)/\\1_blank_\\3/g;\n\n$file=~s/[ ]//g;\n$\
file=~s/_blank_/ /g;\n\n\n\n$file =~s/\\n\\s*\\n/#\
/g;\n\n$file.=\"#\";\n$file =~s/\\n/@/g;\n\n\n\n@b\
locks=split /\\#/, $file;\nshift (@blocks);\n@s=sp\
lit /\\@/, $blocks[0];\n$nseq=$#s+1;\n\n\n\n$file=\
join '@', @blocks;\n@lines=split /\\@/,$file;\n\n$\
c=0;\n\nforeach $l (@lines)\n  {\n    if (!($l=~/\\
\S/)){next;}\n  \n    $l=~/(\\S+)\\s+(\\S*)/g;\n  \
  $n=$1; $s=$2;\n    \n    $seq[$c].=$s;\n    $nam\
e[$c]=$n;\n    $c++;\n    \n    if ( $c==$nseq){$c\
=0;}\n  } \n\nif ( $c!=0)\n      {\n      print STDERR \
\"ERROR: $ARGV[0] is NOT an MSA in Clustalw format\
: make sure there is no blank line within a block \
[ERROR]\\n\";\n   exit (EXIT_FAILURE);\n      }\n\nf\
or ($a=0; $a< $nseq; $a++)\n  {\n    $name[$a]=cle\
anstring ($name[$a]);\n    $seq[$a]=cleanstring ($\
seq[$a]);\n    $seq[$a]=breakstring($seq[$a], 60);\
\n    \n    $line=\">$name[$a]\\n$seq[$a]\\n\";\n \
   \n    print \"$line\";\n  }\nexit (EXIT_SUCCESS\
);\n\nsub cleanstring\n  {\n    my $s=@_[0];\n    \
$s=~s/_hash_symbol_/\\#/g;\n    $s=~s/_arobase_sym\
bol_/\\@/g;\n    $s=~s/[ \\t]//g;\n    return $s;\\
n  }\nsub breakstring\n  {\n    my $s=@_[0];\n    \
my $size=@_[1];\n    my @list;\n    my $n,$ns, $sy\
mbol;\n    \n    @list=split //,$s;\n    $n=0;$ns=\
\"\";\n    foreach $symbol (@list)\n      {\n   if (\
 $n==$size)\n       {\n     $ns.=\"\\n\";\n         $n=0;\\
n       }\n $ns.=$symbol;\n   $n++;\n      }\n    return\
 $ns;\n    }\n\nsub clean_cr\n  {\n    my $f=@_[0]\
;\n    my $file;\n    \n    $tmp=\"f$.$$\";\n    \\
n    \n    open (IN, $f);\n    open (OUT, \">$tmp\\
");\n    \n    while ( <IN>)\n      {\n   $file=$_;\\
n     $file=~s/\\r\\n/\\n/g;\n      $file=~s/\\n\\r/\\n/g;\\
n     $file=~s/\\r\\r/\\n/g;\n      $file=~s/\\r/\\n/g;\n   p\
rint OUT \"$file\";\n      }\n    \n    close (IN)\
;\n    close (OUT);\n    return $tmp;\n  }\n","use\
 Env qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER\
);\n\n\n$query_start=-1;\n$query_end=-1;\n\nwhile \
(<>)\n  {\n    if ( /\\/\\//){$in_aln=1;}\n    els\
if ( $in_aln && /(\\S+)\\s+(.*)/)\n      {\n\n\n      $\
name=$1;\n  \n\n  $seq=$2;\n  $seq=~s/\\s//g;\n      \
  $seq=~s/\\~/\\-/g;\n  $seq=~s/\\./\\-/g;\n    if ( $\
list{$n}{'name'} && $list{$n}{'name'} ne $name)\n     \
  {\n     print \"$list{$n}{'name'} Vs $name\";\n     \
    \n          exit (EXIT_FAILURE);\n      }\n else\n        {\
\n        $list{$n}{'name'}= $name;\n       }\n\n     $list{$\
n}{'seq'}=$list{$n}{'seq'}.$seq;\n  \n    $nseq=++$n;\\
n     \n      }\n    else\n      {$n=0;}\n  }\n\n\nfor\
 ($a=0; $a<$nseq; $a++)\n  {\n    print \">$list{$\
a}{'name'}\\n$list{$a}{'seq'}\\n\";\n  }\n      \n\
","\nuse Env qw(HOST);\nuse Env qw(HOME);\nuse Env\
 qw(USER);\n\n                                    \
                    \nuse strict;                 \
                            \nuse warnings;\nuse d\
iagnostics;\n\nmy $in_hit_list, my $in_aln=0, my(%\
name_list)=(),my (%list)=(),my $n_seq=0; my $test=\
0;\nmy($j)=0, my $n=0, my $nom, my $lg_query, my %\
vu=();\n\nopen (F, \">tmp\");\n\n$/=\"\\n\";\nwhil\
e (<>)\n{\n    print F $_;\n    if($_ =~ /Query=\\\
s*(.+?)\\s/i) { $nom=$1;}\n\n    if ( /Sequences p\
roducing significant alignments/){$in_hit_list=1;}\
\n    \n    if ($_=~ /^pdb\\|/i) { $_=~ s/pdb\\|//\
g; }\n    if ($_=~ /^(1_\\d+)\\s+\\d+/) { $_=~ s/$\
1/QUERY/;}\n      \n    if ( /^(\\S+).+?\\s+[\\d.]\
+\\s+([\\de.-]+)\\s+$/ && $in_hit_list)   \n    {\n   \
my($id)=$1; # \n  $id=~ s/\\|/_/g; #\n    if ($id =~ /\
.+_$/) { chop($id) }; #\n     $name_list{$n_seq++}=$id\
;\n   $name_list{$n_seq-1}=~ s/.*\\|//g;     \n    }\
\n  \n    if (/query/i) {$in_aln=1;}\n    if ( /^(\
\\S+)\\s+(\\d+)\\s+([a-zA-Z-]+)\\s+(\\d+)/ || /^(\\
\S+)(\\s+)(\\-+)(\\s+)/ && ($in_aln == 1))\n    {\\
n     my $name=$1;\n    my $start=$2;\n   my $seq=$3;\n     my \
$end=$4;\n        \n    if ($name =~ /QUERY/i) { $lg_query=\
length($seq); }\n\n     unless ($test > $n) #m\n      {\n    \
   my(@seqq)= split('',$seq);\n         my($gap_missin\
g)= scalar(@seqq);\n        \n          while ($gap_missin\
g != $lg_query)  { unshift (@seqq,\"-\"); $gap_mis\
sing= scalar(@seqq); }\n          $seq=join('',@seqq); \
 #m\n }\n   \n    if ($name =~ /QUERY/i)\n      {\n       $n=0\
; %vu=(); $j=0;\n     $list{$n}{'real_name'}=\"$no\
m\";\n      }     \n    else\n      {\n       unless (exists $vu{$nam\
e}) { ++$j;}      \n        $list{$n}{'real_name'}=$name_l\
ist{$j-1};\n      }\n         \n    $list{$n}{'name'}=$name;\n\n  \
$seq=~tr/a-z/A-Z/;\n    $list{$n}{'seq'}=$list{$n}{'s\
eq'};\n     $list{$n}{'seq'}.=$seq;\n\n   $n++;\n     $vu{$n\
ame}++;\n   $test++;\n   } \n    \n}\n\nmy @numero=(\
);\n\nfor (my $a=0; $a<$n; $a++) #m\n{\n    my $lo\
ng=length($list{0}{'seq'});  \n    my $long1= leng\
th($list{$a}{'seq'});\n  \n    while ($long1 ne $l\
ong)\n    {\n     $list{$a}{'seq'}.=\"-\";\n    $long1= l\
ength ($list{$a}{'seq'});\n    } \n \n    push (@n\
umero,\"$list{$a}{'name'} $list{$a}{'real_name'}\\\
n\");\n}\n\nmy %dejavu=();\n\n\nfor (my $i=0; $i<=\
$#numero; $i++)\n{\n    my $s=\">$list{$i}{'real_n\
ame'}\\n$list{$i}{'seq'}\\n\";\n    my $k=0;\n    \
\n    if (exists $dejavu{$numero[$i]}) {next;}\n  \
  else\n    {     \n    for ($j=0; $j<$n ; $j++)\n    {\n     \
  if (\"$numero[$i]\" eq \"$numero[$j]\" && $j != \
$i )\n          {\n           ++$k;\n           $s .=\">$list{$j}{'real_n\
ame'}\\n$list{$j}{'seq'}\\n\";\n        }\n     }     \n    }\
\n    \n    if ($k>0) \n    {\n     my $cons;\n open (\
SOR,\">tempo_aln2cons\"); print SOR $s;  close SOR\
 ;\n  open (COM,\"t_coffee -other_pg seq_reformat -\
in tempo_aln2cons -action +aln2cons +upper |\") ; \
\n          while (<COM>)\n   {     \n        if (/^>/) { $cons\
 =\">$list{$i}{'real_name'}\\n\"; next;}\n          $_=\
~ s/\\n//g;\n         $cons .=$_;\n }\n   close COM; unl\
ink (\"tempo_aln2cons\");\n   print $cons,\"\\n\"; p\
rint F $cons,\"\\n\";\n    }  \n    else  { print $\
s;  print F $s; }\n    \n    $dejavu{$numero[$i]}+\
+;\n} #m\n\nexit;\n\n\n\n\n\n\n\n\n\n\n\n","use En\
v qw(HOST);\nuse Env qw(HOME);\nuse Env qw(USER);\\
n\n\nwhile (<>)\n  {\n    if ( /^>(\\S+)/)\n      \
{\n   if ($list{$1})\n    {\n     print \">$1_$list{$\
1}\\n\";\n      $list{$1}++;\n        }\n else\n        {\n  \
   print $_;\n        $list{$1}=1;\n        }\n      }\n  \
  else\n      {\n print $_;\n      }\n  }\n      \\
n","$VersionTag =                                 \
                2.11;\n\n\n\nuse FileHandle;\nuse \
Env qw(HOME);\n\n%onelett=&fill_onelett();\n%three\
lett=&fill_threelett();\n\nif($ARGV[0]=~/help/ ||$\
ARGV[0]=~/man/ || $ARGV[0]=~/HELP/ || $ARGV[0]=~/M\
an/ || $ARGV[0] eq \"-h\"  || $ARGV[0] eq \"-H\"  \
)\n        {die \"SYNTAX: extract_from_pdb Version\
 $VersionTag      \n    Minimum:             [extract_from\
_pdb file] \n                    OR \n                     [... | extract_fro\
m_pdb]\n    Flags (Default setting on the first line\
)\n      -version...................[Returns the Ver\
sion Number]\n           -force...................\
..[Forces the file to be treated like a PDB file]\\
n                                      [Regenerate\
s the header and SEQRES fields]\n           -force\
_name................[Forces the file to be named \
after name]]\n           -infile.....file.........\
..[Flag can be omited]\n                                [File mus\
t be pdb or fro pgm]\n                            \
          [File can also be compressed Z or gz]\n \
                                     [In the case \
of a compressed file, you can omit the gz|Z extens\
ion]\n           -netfile...................[File \
will be fetch from the net using wget]\n          \
                            [wget must be installe\
d]\n                                      [ftp://f\
tp.gnu.org/pub/gnu/wget/]\n                       \
               [Must also be used to retrieve the \
file from a local pdb copy (cf netaddress)]\n     \
      -netaddress................[Address used for\
 the retrieving the netfile]\n                    \
gz]\n                                      [http:/\
/www.expasy.ch/cgi-bin/get-pdb-entry.pl?%%]\n     \
                                 [local -> will ge\
t the file from pdb_dir (see pdb_dir)]\n          \
 -netcompression............[Extension if the netf\
ile comes compressed]\n                           \
           [gz]\n           -pdb_dir..............\
.....[address of the repertory where the pdb is in\
stalled]\n                                      [S\
upports standard ftp style installation OR every s\
tru in DIR]\n                                     \
 [Give the ..../pdb/structure/ dir]\n             \
                         [If value omitted, the pg\
 gets it from the env variable PDB_DIR]\n         \
  -netcompression_pg.........[gunzip]\n           \
-is_pdb_name........name...[Returns 1 if the name \
is a PDB ID, 0 otherwise]\n           -get_pdb_cha\
ins.....name...[Returns the list of chains corresp\
onding to the entry]\n           -get_pdb_id......\
...name...[Returns the PDB id within the provided \
pdb file]\n           -get_fugue_name.....name...[\
Turns a name into a name valid for fugue]\n       \
                               [Uses the netaddres\
s to do so]\n        -chain......FIRST..........[Extra\
ct the first chain only]\n                 A B C..........\
[Extract Several chains if needed]\n                   ALL..\
..........[Extract all the chains]  \n           -l\
igand.....ALL............[Extract the ligands in t\
he chain (HETATM)]\n                       <name1>\
,<name2>[Extract All the named lignds]\n     -ligan\
d_only...............[Extract only the ligands]\n \
          -ligand_list...............[Extract the \
list of ligands]\n         -coor.......<start>..<end>.[\
Coordinates of the fragment to extract]\n                   \
        [Omit end to include the Cter]\n          \
 -num........absolute.......[absolute: relative to\
 the seq] \n                       file...........\
[file: relative to file]\n           -num_out....n\
ew............[new: start 1->L]\n                 \
      old............[old: keep the file coordinat\
es]\n           -delete.....<start>..<end>.[Delete\
 from residue start to residue end]\n        -atom....\
...CA.............[Atoms to include, ALL for all o\
f them]\n                CA O N.........[Indicate several\
 atoms if needed]\n        -code.......3..............\
[Use the 1 letter code or the 3 letters code]\n   \
 -mode.......raw............[Output original pdb f\
ile]\n                       pdb............[Outpu\
t something that looks like pdb]\n               fasta..\
........[Output the sequences in fasta format]\n            \
       simple.........[Output a format easy to par\
se in C ]\n\n           -seq_field..ATOM..........\
.[Field used to extract the sequence]\n                SE\
QRES.........[Use the complete sequence]\n         -seq\
.......................[Equivalent to  -mode fasta\
]\n      -model......1..............[Chosen Model in\
 an NMR file]\n           -nodiagnostic...........\
...[Switches Error Messages off]\n           -debu\
g.....................[Sets the DEBUG ON]\n       \
    -no_remote_pdb_dir.........[Do not look for a \
remote file]\n           -cache_pdb...............\
..[Cache Value, default is $HOME/.t_coffee/cache, \
other values: NO<=> No cache]\n\n      Environemen\
t Variables\n           These variables can be set\
 from the environement\n           Command line va\
lues with the corresponding flag superseed evirone\
ment value\n           NO_REMOTE_PDB_DIR..........\
[Prevents the program from searching remote file: \
faster]\n           PDB_DIR....................[In\
dicates where PDB file must be fetched (localy)]\n\
\n     PROBLEMS: please contact cedric.notredame\\@eu\
rope.com\\n\";\n       }\n\n$np=0;\n$n_para=$#ARGV\
;\n$model=1;\n$pdb_dir=$ENV{'PDB_DIR'};if ($pdb_di\
FEE})\n  {$cache=$ENV{CACHE_4_TCOFFEE};}\nelse\n  \
{\n    $cache=\"$HOME/.t_coffee/cache/\";\n  }\n\n\
   \n   $netaddress=\"http://www.rcsb.org/pdb/cgi/\
on=gz\";\n   $netcompression_pg=\"gunzip\";\n   $n\
etcompression=\"gz\";\n\n  foreach ($np=0; $np<=$n\
_para; $np++)\n    {        \n    $value=$ARGV[$np\
];\n    \n    if  ($np==0 && !($value=~/^-.*/))\n \
      { \n       $pdb_file= $ARGV[$np];\n       }\\
n    elsif ( !($value=~/^-.*/))\n      {\n      print \\
"@ARGV\";\n die;\n      } \n    \n    elsif ($valu\
e eq \"-nodiagnostic\"){$nodiagnostic=1;}\n    els\
if ($value eq \"-force\")\n      {\n      $force_pdb=1;\
\n      }\n    elsif ($value eq \"-force_name\")\n\
      {\n   $force_name=$ARGV[++$np];\n   $force_pdb=1\
;\n      }\n    \n    elsif ($value eq \"-is_pdb_n\
ame\")\n      {\n $pdb_file= $ARGV[++$np];\n    $is_p\
db_name=1;\n      } \n    elsif ($value eq \"-debu\
g\")\n      {\n   $debug=1;\n      }\n    elsif ($va\
lue eq \"-get_pdb_chains\")\n      {\n    $pdb_file= \
$ARGV[++$np];\n   $get_pdb_chains=1;\n      }\n    e\
lsif ($value eq \"-get_pdb_ligands\")\n      {\n      $\
get_pdb_ligands=1;\n      }\n    \n    elsif ($val\
ue eq \"-get_pdb_id\")\n      {\n   $pdb_file= $ARGV\
[++$np];\n  $get_pdb_id=1;\n  \n      }\n    \n    e\
lsif ( $value eq \"-get_fugue_name\")\n      {\n      $\
pdb_file= $ARGV[++$np];\n     $get_fugue_name=1;\n    \
  }\n    elsif ( $value eq \"-infile\")\n       {\\
n       $pdb_file= $ARGV[++$np];\n       } \n    e\
lsif ($value eq \"-netfile\")\n      {\n  $netfile=\
1;\n  if ( !($ARGV[$np+1]=~/^-.*/)){$pdb_file= $ARG\
V[++$np];}\n      }\n    elsif (  $value eq \"-num\
\")\n       {\n       $numbering= $ARGV[++$np];\n \
      }\n    elsif (  $value eq \"-num_out\")\n   \
    {\n       $numbering_out= $ARGV[++$np];\n     \
  }\n    elsif ( $value eq \"-netaddress\")\n     \
 {\n  $netadress=$ARGV[++$np];\n      }\n     \n   \
 elsif ( $value eq \"-netcompression\")\n      {\n\
       $netcompression=$ARGV[++$np];\n      }\n    elsi\
f ( $value eq \"-pdb_dir\")\n      {\n     if ( !($AR\
GV[$np+1]=~/^-.*/)){$pdb_dir= \"$ARGV[++$np]/\";}\\
n       }\n     elsif ( $value eq \"-no_remote_pdb\
_dir\")\n      {\n      $no_remote_pdb_dir=1;\n if ( !(\
$ARGV[$np+1]=~/^-.*/)){$pdb_dir= \"$ARGV[++$np]/\"\
;}\n      }\n    elsif ( $value eq \"-cache\")\n  \
    {\n     $cache=$ARGV[++$np];\n      }\n    \n    e\
lsif ($value eq \"-netcompression_pg\")\n      {\n\
        $netcompression_pg=$ARGV[++$np];\n      }\n    \
 elsif ($value eq \"-mode\")\n       {\n       $MO\
DE=$ARGV[++$np];\n      \n       }\n    elsif ( $v\
alue eq \"-model\")\n       {\n       $model= $ARG\
V[++$np];\n       }\n    elsif ($value eq \"-seq_f\
ield\" )\n       {\n       $seq_field= $ARGV[++$np\
];\n       }   \n    elsif ($value eq \"-coor\" )\\
n       {\n       $start= $ARGV[++$np];\n  \n     \
  if (($ARGV[$np+1] eq \"\") ||($ARGV[$np+1]=~/^-.\
*/)){$end=\"*\";} \n       else {$end=   $ARGV[++$\
np];}     \n       $coor_set=1;\n       }\n    els\
if ($value eq \"-delete\" )\n       {\n       $del\
ete_start= $ARGV[++$np];\n       $delete_end= $ARG\
V[++$np];\n       $delete_set=1;\n       }\n    el\
sif  ($value eq \"-code\")\n       {\n       $code\
= $ARGV[++$np];\n       }\n    elsif  ($value eq \\
"-no_hetatm\")\n       {\n       $no_hetatm=1;\n  \
     }\n    elsif ($value eq \"-chain\")\n       {\
\n       while (!($ARGV[$np+1] eq \"\") &&!($ARGV[\
$np+1]=~/^-.*/))\n            {\n         ++$np;\n          \
@c_chain=(@chain,  $ARGV[$np]);\n         $hc_chain{\
$ARGV[$np]}=$#c_chain+1;\n          }           \n   \
    }\n    elsif ($value eq \"-atom\")\n       {\n\
\n       while (!($ARGV[$np+1] eq \"\") && !($ARGV\
[$np+1]=~/^-.*/))\n           {\n         ++$np;\n         \
 $atom[$n_atom++]=  $ARGV[$np];\n         $atom_list\
{$ARGV[$np]}=1;         \n          } \n       \n      \
 }\n    elsif ( $value eq \"-unfold\")\n      {\n     \
$unfold=1;\n      }\n    elsif ($value eq \"-seq\"\
 ||$value eq \"-fasta\" )\n       {\n       $MODE=\
\"fasta\";\n       }\n    elsif ( $value eq \"-ver\
sion\")\n      {\n      print STDERR  \"\\nextract_from\
_pdb: Version $VersionTag\\n\";\n   &vexit (EXIT_SUC\
CESS);\n      }\n    elsif ( $value eq \"-ligand\"\
)\n      {\n      while (!($ARGV[$np+1] eq \"\") && !($\
ARGV[$np+1]=~/^-.*/))\n   {\n     ++$np;\n          $li\
gand=1;\n       $ligand_list{$ARGV[$np]}=1;           \n\
        } \n      $hc_chain{'LIGAND'}=1;\n      }\n    elsif\
 ( $value eq \"-ligand_only\")\n      {\n $ligand_\
only=1;\n      }\n  }\nif ( $debug)\n  {\n    prin\
t STDERR \"\\n[DEBUG:extract_from_pdb] NO_REMOTE_P\
DB_DIR: $no_remote_pdb_dir\\n\";\n    print STDERR\
 \"\\n[DEBUG:extract_from_pdb] PDB_DIR: $pdb_dir\\\
n\";\n  }\n    \n\n\nif (!$force_name)\n  {\n    $\
pdb_file=~/([^\\/]*)$/;\n    $force_name=$1;\n  }\\
n\n$local_pdb_file=$pdb_file;\n\nif ( $debug){prin\
t STDERR \"\\n[DEBUG: extract_from_pdb] Scan For $\
n$remote_pdb_dir=1;\n$tmp_pdb_file=get_pdb_file ($\
local_pdb_file);\nif ( !-e $tmp_pdb_file || $tmp_p\
db_file eq \"\")\n  {\n    \n    $local_pdb_file=$\
pdb_file;\n    ($local_pdb_file, $suffix_chain)=&p\
db_name2name_and_chain($local_pdb_file);\n    \n  \
  if ($local_pdb_file)\n      {\n   if ( $debug){pri\
nt STDERR \"\\nSplit $pdb_file into $local_pdb_fil\
e and $suffix_chain \\n\";}\n $tmp_pdb_file=get_pd\
b_file ($local_pdb_file);    \n     \n    if ( $tmp_pdb_f\
ile ne \"\")\n      {\n     \n          @c_chain=($suffix_\
chain);%hc_chain=();\n      $hc_chain{$suffix_chain\
}=1;\n        }\n      }\n  }\n\n$no_remote_pdb_dir=$me\
m;\nif ($no_remote_pdb_dir==0)\n  {\n    if ( !-e \
$tmp_pdb_file || $tmp_pdb_file eq \"\")\n      {\n\
      \n    $local_pdb_file=$pdb_file;\n  ($local_pdb_file,\
b_file);\n  \n    if ($local_pdb_file)\n    {\n     if \
( $debug){print STDERR \"\\nSplit $pdb_file into $\
local_pdb_file and $suffix_chain \\n\";}\n          $tm\
p_pdb_file=get_pdb_file ($local_pdb_file);    \n       \
   \n     if ( $tmp_pdb_file ne \"\")\n         {\n   \
      \n          @c_chain=($suffix_chain);%hc_chain=();\n        $hc\
_chain{$suffix_chain}=1;\n          }\n     }\n      }\\
n  }\n\nif ( $debug){print STDERR \"\\n$pdb_file c\
opied into ##$tmp_pdb_file##\\n\";}\n\n\nif ( !-e \
$tmp_pdb_file || $tmp_pdb_file eq \"\")\n      {\n\
      if ($is_pdb_name)\n       {\n     print \"0\\n\"; exi\
t (EXIT_SUCCESS);\n       }\n else\n        {\n \n        prin\
t \"\\nEXTRACT_FROM_PDB: NO RESULT for $pdb_file [\
FATAL:EXTRACT_FROM_PDB Version $VersionTag]\\n\";\\
n         &vexit (EXIT_FAILURE);    \n      }\n      }\n\n\n\
$pdb_id=&get_pdb_id ($tmp_pdb_file);\n\nif ( $pdb_\
id eq \"\"){$pdb_id=$force_name;}\n\n@f_chain=&get\
_chain_list ($tmp_pdb_file);\n\n\n\nif ( $get_pdb_\
chains)\n  {\n    print \"@f_chain\\n\";\n    &vex\
it (EXIT_SUCCESS);\n  }\nif ( $get_pdb_ligands)\n \
 {\n    %complete_ligand_list=&get_ligand_list ($t\
mp_pdb_file);\n    print $complete_ligand_list{\"r\
esult\"};\n    &vexit (EXIT_SUCCESS);\n  }\n\nelsi\
f ( $get_pdb_id ||$get_fugue_name )\n  {\n    if  \
  (@c_chain && $c_chain[0] eq \"FIRST\"){$pdb_id=$\
pdb_id.$f_chain[0];}\n    elsif (@c_chain && $c_ch\
ain[0] ne \" \"){$pdb_id=$pdb_id.$c_chain[0];}\n  \
  \n    print \"$pdb_id\\n\";\n    &vexit (EXIT_SU\
CCESS);\n    \n  }\nelsif ( $is_pdb_name)\n  {\n  \
  printf \"1\\n\";\n    &vexit (EXIT_SUCCESS);\n  \
}\n  \n\n$structure_file=vtmpnam();\n\n\n$INFILE=v\
fopen (\"$tmp_pdb_file\", \"r\"); \n$TMP=vfopen (\\
"$structure_file\", \"w\");\n\n$print_model=1;\n$i\
n_model=0;\nwhile ( <$INFILE>)\n{\n  $line=$_;\n  \
if ($line =~/^MODEL\\s*(\\d*)/)\n    {\n  if ($1==$\
model)\n    {\n       $in_model=1;\n          $print_model=1\
;\n       $is_nmr=1;\n  }\n   elsif ( $in_model==0)\n {\
\n        $print_model=0;\n   }\n   elsif ( $in_model==1)\
\n    {\n       last;\n }\n    }\n  if ($print_model){p\
rint $TMP $line;}  \n\n}\nclose ($TMP);\nclose ($I\
NFILE);\n\n \n\n  if ($numbering eq \"\"){$numberi\
ng=\"absolute\";}\n  if ($numbering_out eq \"\"){$\
numbering_out=\"new\";}\n\n  if ( $delete_set && $\
coor_set) {die \"-delete and -coor are mutually ex\
clusive, sorry\\n\";}\n  if ( $n_atom==0){$atom_li\
}\n  if ( $seq_field eq \"\"){$seq_field=\"ATOM\";\
}\n  \n  if ( $MODE eq \"\"){$MODE=\"pdb\";}\n  el\
sif ( $MODE eq \"simple\" && $code==0){$code=1;}\n\
\n  if ( $code==0){$code=3;}\n\n\nif ($f_chain[0] \
eq \" \"){$hc_chain{' '}=1;$c_chain[0]=\" \";}\nel\
sif (!@c_chain){$hc_chain{FIRST}=1;$c_chain[0]=\"F\
IRST\";}#make sure the first chain is taken by def\
ault\n\nif    ($hc_chain{ALL}) \n      {\n      @c\
_chain=@f_chain;\n      foreach $e (@c_chain){$hc_\
chain{$e}=1;}\n      }\nelsif($hc_chain{FIRST})\n \
     {\n    @c_chain=($f_chain[0]);\n     $hc_chain{$f_ch\
ain[0]}=1;\n      }\n\n\n$MAIN_HOM_CODE=&get_main_\
hom_code ($structure_file);\n$INFILE=vfopen ($stru\
cture_file, \"r\");\n\n\nif ( $MODE eq \"raw_pdb\"\
 || $MODE eq \"raw\")\n  {\n    while (<$INFILE>)\\
n      {    print \"$_\";}\n    close ( $INFILE);\n  \
  &vexit(EXIT_SUCCESS);\n  }    \nif ( $MODE eq \"\
raw4fugue\" )\n  {\n    while (<$INFILE>)\n      {\
      \n    $l=$_;\n    if ($l=~/^SEQRES/)\n      {\n     \n         \
 $c= substr($l,11,1);\n     if ($hc_chain {$c}){pr\
int \"$l\";}\n      }\n elsif ( $l=~/^ATOM/)\n    {\n \
    $c=substr($l,21,1);\n         if ($hc_chain {$c}){\
print \"$l\";}\n    }\n      }\n    close ( $INFILE\
);\n    &vexit(EXIT_SUCCESS);\n  }    \n\nif ( $MO\
DE eq \"pdb\")\n    {\n\n    $read_header=0;\n    \
while (<$INFILE>) \n          {\n       $line=$_;\n   \
    if    ($line =~ /^HEADER/){print \"$line\";$re\
ad_header=1;}\n     }\n    close ($INFILE);\n\n    i\
f (!$read_header)\n      {\n  print \"HEADER    UNK\
NOWN                                 00-JAN-00   $\
force_name\\n\";\n      }\n\n    $INFILE=vfopen ($\
structure_file, \"r\");\n    \n    print \"COMPND \
  1 CHAIN:\";\n    $last=pop(@c_chain);\n    forea\
ch $c ( @c_chain){ print \" $c,\";}\n    if ( $las\
t eq \" \"){print \" NULL;\\n\";}\n    else \n    \
  {\n      print \" $last;\\n\";\n    }\n    @c_ch\
ain=(@c_chain, $last);\n    \n    print \"REMARK O\
utput of the program extract_from_pdb (Version $Ve\
rsionTag)\\n\";\n    print \"REMARK Legal PDB form\
at not Guaranteed\\n\";\n    print \"REMARK This f\
ormat is not meant to be used in place of the PDB \
format\\n\";\n    print \"REMARK The header refers\
 to the original entry\\n\";\n    print \"REMARK T\
he sequence from the original file has been taken \
in the field: $seq_field\\n\";\n    print \"REMARK\
 extract_from_pdb, 2001, 2002, 2003, 2004, 2005 20\
06 (c) CNRS and Cedric Notredame\\n\";   \n    if \
( $coor_set)\n       {\n       print \"REMARK Part\
ial chain: Start $start End $end\\n\";\n       }\n\
    if ( $is_nmr)\n       {\n       print \"REMARK\
 NMR structure: MODEL $model\\n\";\n       }\n   \\
n    if ( $n_atom!=0)\n       {\n       print \"RE\
MARK Contains Coordinates of: \";\n       foreach \
$a (@atom){print \"$a \";}\n       print \"\\n\";\\
n       }  \n    }\n\n\nwhile (<$INFILE>) \n    {\\
n    $line=$_;\n\n\n    if ($line =~ /^SEQRES/)\n \
      {      \n\n       @field=/(\\S*)\\s*/g;\n   \
    \n       \n       $c= substr($_,11,1);\n      \
\n       \n       \n       $l=$#field;\n       for\
 ($a=0; $a<$#field ;)\n           {\n        if (!$one\
lett{$field[$a]}){splice @field, $a, 1;}\n         else\
 {$a++;}\n     }\n   \n       if ( $c ne $in_chain)\
\n          {\n\n   $pdb_chain_list[$n_pdb_chains]\
=$c;\n        $pdb_chain_len [$n_pdb_chains]=$len;\n    \
$in_chain=$c;\n     $n_pdb_chains++;\n      }\n\n      \
 for ( $a=0; $a<$#field;$a++){@{$complete_seq{$c}}\
->[$complete_seq_len{$c}++]=$field[$a];}  \n      \
 }\n    elsif ( $line=~/^ATOM/ || ($line=~/^HETATM\
/ && &is_aa(substr($line,17,3)) && !$no_hetatm))\n\
       {\n\n       #Atom Field [PDB Guide 2.2\n  #1-6 R\
Ec_name %-6s\n     #7-11 ATom Number %5d\n       #\n   #13-\
16 Atom Name->AT_ID\n    #17    Alt Loc [Not used by\
 extract from pdb]\n     #18-20 ResName\n  #21\n       #22\
 Chain\n     #23-26 RES_NO: \n       #27 Code [Not used he\
re]\n  #28,29,30\n       #31-38 X\n  #39-46 Y\n  #47 54\
 Z\n   \n        $RAW_AT_ID=$AT_ID=substr($line,12,\
4);\n $RES_ID=&is_aa(substr($line,17,3));\n     $CHAIN\
=substr($line,21,1);\n        $RES_NO=substr($line\
,22,4);\n   $HOM_CODE=substr ($line, 26, 1);\n  $TEMP\
=substr($line,60,6);\n  \n    $TEMP=~s/\\s//g;\n      \
  $AT_ID=~s/\\s//g;\n   $RES_ID=~s/\\s//g;\n        \
$RES_NO=~s/\\s//g;\n          \n    if ( $HOM_CODE ne $MAIN_H\
OM_CODE){next;}\n elsif ( $already_read2{$CHAIN}{$\
RES_ID}{$AT_ID}{$RES_NO}){next;}\n  else{$already_r\
ead2{$CHAIN}{$RES_ID}{$AT_ID}{$RES_NO}=1;}\n    \n    \n\
      if ($coor_set && $numbering eq \"file\" && $AT_ID\
 eq \"CA\")\n       {\n     \n          if ( $RES_NO<=$star\
t){$real_start{$CHAIN}++;}\n      if ( $RES_NO<=$en\
d){$real_end{$CHAIN}++;}\n      }\n elsif ($numbering\
 eq \"absolute\")\n       {\n     $real_start{$CHAIN}=\
$start;\n       $real_end{$CHAIN}=$end;\n   }\n\n   \
     $KEY=\"ALL\";\n        if ( $CHAIN ne $in_ato\
m_chain)\n          {\n     \n        $pdb_atom_chain_l\
ist[$n_pdb_atom_chains]=$c;\n   $pdb_atom_chain_le\
n [$n_pdb_atom_chains]=$len;\n        $in_atom_chain=$c\
;\n     $n_pdb_atom_chains++;\n       }\n \n    if ( $AT_ID\
 eq \"CA\")\n           {\n        @{$atom_seq{$CHAI\
N}}->[$atom_seq_len{$CHAIN}++]=$RES_ID;;\n         }\n \
       }\n\n    }\nclose ($INFILE);\n\n\n\n\n\n\n$\
INFILE=vfopen ($structure_file, \"r\");\nforeach $\
c (@c_chain)\n    {\n\n if    ( $seq_field eq \"SEQRE\
S\"){@pdb_seq=@{$complete_seq{$c}};}\n    elsif ( $se\
q_field eq \"ATOM\")  {@pdb_seq=@{$atom_seq{$c}};}\
\n    \n\n  $full_length=$l=$#pdb_seq+1;\n            \n    if ( $r\
      if ( $coor_set)\n    {     \n\n        if ( $real_end{\
$c} < $l){splice @pdb_seq, $real_end{$c}, $l;}\n       \
  if ( $real_start{$c} < $l){splice @pdb_seq, 0, $\
real_start{$c}-1;}               \n    $l=$#pdb_seq;\n         \
}\n\n elsif ( $delete_set)\n     {\n         splice @pdb\
_seq, $delete_start, $delete_end-$delete_start+1;\\
n        $l=$#pdb_seq;\n         }\n      \n    $new_fasta_name=\"$\
pdb_id$c\";\n     if ( $coor_set)\n    {\n         if ( $n_\
\";}\n         $new_fasta_name= $new_fasta_name.\"\\_$s\
tart\\_$end\";\n     }\n         \n if ( $MODE eq \"pdb\\
")\n     {\n         $nl=1;\n    $n=0;\n     \n    foreac\
h $res ( @pdb_seq)\n          {\n         if ( !$n)\n       \
   {\n            \n           printf \"SEQRES  %2d %1s %4d  \", $nl\
,$c, $l;\n         $nl++;\n          }\n       $res=~s/\\s//g;\n\
           \n          if ($code==1){ printf \"%3s \",$onel\
ett{$res};}\n          elsif  ($code==3){ printf \"%3s\
 \",$res};\n           \n          $n++;          \n       if ( $n\
==13){$n=0;print \"\\n\";}\n       }\n      if ( $n!=0\
){print \"\\n\"; $n=0;}\n       }\n elsif ( $MODE eq \\
"simple\")\n        {\n   print \"# SIMPLE_PDB_FORMAT\\\
n\";\n        if ( $new_fasta_name eq \" \"){$new_fasta\
_name=\"dummy_name\";}\n        print \">$new_fasta_nam\
e\\n\";\n     foreach $res ( @pdb_seq)\n        {\n    \
     print \"$onelett{$res}\";\n          }\n     print\
 \"\\n\";\n   }\n elsif ( $MODE eq \"fasta\")\n   \
{\n     $n=0;\n     print \">$new_fasta_name\\n\";\n   \
 \n     foreach $res ( @pdb_seq)\n        {\n         p\
rint \"$onelett{$res}\";\n              $n++;\n   \
    if ( $n==60){print \"\\n\"; $n=0;}\n        }\n\
        print \"\\n\"; \n       }\n       }\n\nif ( $MODE e\
q \"fasta\")\n  {\n     &vexit(EXIT_SUCCESS);\n  \\
n  }\n\n  \n  $charcount=0;\n  $inchain=\"BEGIN\";\
\n  $n=0;\n  while (<$INFILE>) \n    {\n    $line=\
$_;\n     \n    if ($line =~/^ATOM/  ||  ($line=~/\
^HETATM/))\n      {\n   $line_header=\"UNKNWN\";\n    $\
RES_ID=substr($line,17,3);\n  \n    if ($line =~/^ATOM\
/)\n    {\n     $line_header=\"ATOM\";\n      $RES_I\
D=(&is_aa($RES_ID))?&is_aa($RES_ID):$RES_ID;\n    }\
\n    elsif ($line=~/^HETATM/ && ($ligand_list {$RES_\
ID} ||$ligand_list {'ALL'} || !&is_aa($RES_ID)))\n\
        {\n     $line_header=\"HETATM\";\n        }\n elsif \
($line=~/^HETATM/ && (&is_aa($RES_ID) && !$no_heta\
tm))\n        {\n     $line_header=\"ATOM\";\n      $RES\
_ID=&is_aa($RES_ID);\n    }\n else\n        {\n     next\
;\n     }\n\n     \n    #Atom Field [PDB Guide 2.2\n  #1-6 R\
Ec_name %-6s\n    #7-11 ATom Number %5d\n #\n   #13-16 \
Atom Name->AT_ID\n      #17    Alt Loc [Not used by ext\
ract from pdb]\n  #18-20 ResName\n  #21\n #22 Chain\\
n     #23-26 RES_NO: \n #27 Code\n  #28,29,30\n #31-38 \
X\n   #39-46 Y\n  #47 54 Z\n\n      $X=substr($line,30,8);\
     \n     $Y=substr($line,38,8);\n      $Z=substr($line,4\
6,8);\n     $TEMP=substr($line,60,6);\n   \n    $RAW_AT_ID=\
$AT_ID=substr($line,12,4);\n  $CHAIN=substr($line,2\
1,1);\n     $RES_NO=substr($line,22,4);\n $HOM_CODE=su\
bstr ($line, 26, 1);\n  \n    $X=~s/\\s//g;\n   $Y=~s/\\\
s//g;\n     $Z=~s/\\s//g;\n   $TEMP=~s/\\s//g;\n      \n    $AT_\
ID=~s/\\s//g;\n   $RES_ID=~s/\\s//g;\n    $RES_NO=~s/\\\
s//g;\n\n   \n    if ( $HOM_CODE ne $MAIN_HOM_CODE){nex\
t;}\n elsif ( $already_read{$CHAIN}{$RES_ID}{$AT_I\
D}{$RES_NO}){next;}\n   else{$already_read{$CHAIN}{$\
RES_ID}{$AT_ID}{$RES_NO}=1;}\n      \n    $KEY=\"ALL\";\n\\
n           if ( $RES_NO ==0){$start_at_zero=1;}\n\n  $\
RES_NO+=$start_at_zero;    \n \n    if ( $current_cha\
in ne $CHAIN)\n     {\n     $current_chain=$CHAIN;\n\
          $pos=$current_residue=0;\n          $offset=($coor\
_set)?($real_start{$CHAIN}-1):0;\n      if    ( $se\
q_field eq \"SEQRES\"){@ref_seq=@{$complete_seq{$C\
HAIN}};}\n      elsif ( $seq_field eq \"ATOM\")  {@\
ref_seq=@{$atom_seq{$CHAIN}};}\n      }\n \n    if ($cur\
rent_residue != $RES_NO)\n      {\n     $current_resi\
due=$RES_NO;\n        if    ( $seq_field eq \"SEQRES\\
"){$pos=$current_residue;}\n      elsif ( $seq_fiel\
d eq \"ATOM\"){$pos++;}\n       }\n \n    \n    if ($n_atom=\
=0 || $atom_list{$AT_ID}==1 || $atom_list{$KEY}==1\
)\n     {   \n        \n          $do_it=(!@c_chain || $hc_ch\
ain{$CHAIN} ||$hc_chain{'LIGAND'} );\n        \n          \
$do_it= ($do_it==1) && ($coor_set==0 ||($pos>=$rea\
l_start{$CHAIN} && $pos<=$real_end{$CHAIN}));\n   \
  $do_it= ($do_it==1) && ($delete_set==0 || $pos<$\
delete_start ||$pos>$delete_end );\n          if ($liga\
nd==0 && $line_header eq \"HETATM\" ){$do_it=0;}\n\
          if ($ligand_only==1 && $line_header eq \"ATOM\
\" ){$do_it=0;}\n     if ($ligand==1 && $line_head\
er eq \"HETATM\" && $ligand_list{$RES_ID}==0 && $l\
igand_list{\"ALL\"}==0){$do_it=0;} \n         \n          \\
n         if ( $do_it)\n            #        if ( (!@c_chain ||\
 $hc_chain{$CHAIN}) && ($coor_set==0 ||($pos>=$rea\
l_start{$CHAIN} && $pos<=$real_end{$CHAIN})) && ($\
delete_set==0 || $pos<$delete_start ||$pos>$delete\
_end ) )\n        {\n         $n++;\n           $out_pos=$pos;\n        \\
n            if ( $delete_set)\n              {\n             if (\
 $out_pos< $delete_start){;}\n              else {$offset=$d\
elete_end-$delete_start;}\n           }       \n             \\
n            if ( $numbering_out eq \"new\"){$out_pos-\
=$offset;}\n             elsif ( $numbering_out eq \"ol\
d\"){$out_pos=$RES_NO;}\n            \n          #if ( $\
ref_seq[$pos-1] ne $RES_ID)\n        #      {$erro\
r=$error.\"\\nERROR: Position $out_pos, $ref_seq[$\
pos-1] in SEQ $RES_ID in STRUCTURE\" ;}\n       \n\
             \n          if ( $code==1){$RES_ID=$onelett{\
$RES_ID};}\n          \n             if ($unfold)\n          {\n         \
  $unfolded_x+=5;\n              $X=$unfolded_x;\n             $Y=0\
;\n            $Z=0;\n           $float=1;\n           }\n         else\\
n            {\n           $float=3;\n           }\n\n             #Atom Field\
 [PDB Guide 2.2\n        #1-6 REc_name %-6s\n       \
   #7-11 ATom Number %5d\n           #\n         #13-1\
6 Atom Name\n            #17    Alt Loc [Not used by e\
xtract from pdb]\n             #18-20 ResName\n        \
#21\n        #22 Chain\n             #23-26\n          #2\
7 Code [Not used here]\n             #28,29,30\n            \
 if ( $MODE eq \"pdb\")\n            {\n           printf \"%-6s%\
5d %-4s %3s %s%4d    %8.3f%8.3f%8.3f  1.00 %5.2f\\\
n\",$line_header, $n, $RAW_AT_ID,$RES_ID,$CHAIN,$o\
ut_pos, $X, $Y, $Z,$TEMP;             \n           #printf \"%-6s\
%5d  %-3s%4s%2s%4d    %8.3f%8.3f%8.3f  1.00 %5.2f\\
\n\",$line_header, $n, $AT_ID,$RES_ID,$CHAIN,$out_\
pos, $X, $Y, $Z,$TEMP;          \n         }\n         elsif ( \
$MODE eq \"simple\")\n            {\n               if ( $RE\
S_ID eq \"\"){$RES_ID=\"X\";}\n             printf \"%-6s %\
5s %s %2s %4d    %8.3f %8.3f %8.3f\\n\",$line_head\
er, $AT_ID, $RES_ID,($CHAIN eq\"\" || $CHAIN eq \"\
 \")?\"A\":$CHAIN,$out_pos, $X, $Y, $Z,$TEMP;\n        \
 }\n\n           }\n          }\n      }\n    }\nprint \
\"\\n\";\nclose($INFILE);\n\n\nif ( $error ne \"\"\
) \n   {$error=$error.\"\\nDiagnostic:    SEQRES a\
nd the residues in ATOM are probably Incompatible\\
\n\";\n    $error=$error.  \"Recomendation: Rerun \
with '-fix 1' in order to ignore the SEQRES sequen\
ces\\n\";\n   }\nif (!$nodiagnostic){print STDERR \
$error;}\nvexit ( EXIT_SUCCESS);\n\nsub remote_is_\
pdb_name \n  {\n    my $in=@_[0];\n    my $netaddr\
ess=@_[1];\n    my $ref_file, $pdb;\n    my $value\
;\n\n    if ( $in=~/[^\\w\\d\\:\\_]/){return 0;}\n\
    \n    \n    $ref_file=\"$cache/pdb_entry_type.\
txt\";\n    \n    if ( !-e $ref_file || (-M $ref_f\
ile)>2 || -z $ref_file)\n      {\n  `wget -O$ref_fi\
le --passive-ftp -q 'ftp://ftp.rcsb.org/pub/pdb/de\
rived_data/pdb_entry_type.txt'`;\n      }\n \n    \
$pdb=substr ($in,0, 4);\n    \n    $value=`grep -c\
 $pdb $ref_file`;\n    \n    return $value;\n    }\
\n      \nsub is_pdb_file\n  {\n    my @arg=@_;\n\\
n    if ( !-e $arg[0]){return 0;}\n    \n    $F=vf\
open ($arg[0], \"r\");\n    while ( <$F>)\n      {\
\n    if (/^HEADER/)\n    {\n     close $F;\n       retu\
rn 1;\n       }\n elsif ( /^SEQRES/)\n      {\n     close\
 $F;\n          return 1;\n     }\n elsif ( /^ATOM/)\n        \
{\n       close $F;\n       return 1;\n     }\n      }\n\
    return 0;\n  }\nsub get_pdb_id\n  {\n    my $h\
eader_file=@_[0];\n    my $id;\n    \n\n    $F=vfo\
pen (\"$header_file\", \"r\");\n\n    while ( <$F>\
)\n      {\n      \n    if ( /HEADER/)\n    {\n     $id=sub\
str($_,62,4 );\n      return $id;\n   }\n      }\n \
   close ($F);\n    \n    return \"\";\n  }\n\nsub\
 get_ligand_list\n  {\n    my $pdb_file=@_[0];\n  \
  my $chain;\n    my $ligand;\n    my %complete_li\
gand_list;\n    \n\n    $F=vfopen ($pdb_file, \"r\\
");\n    while ( <$F>)\n      {\n   if ( /^HETATM/)\\
n       {\n     $line=$_;\n       $chain=substr($line,21\
,1);\n          $ligand=substr($line,17,3);\n       \n        \
  if (!$complete_ligand_list{$chain}{$ligand})\n       \
     {\n          \n          $complete_ligand_list{\"result\"}.=\\
"CHAIN $chain LIGAND $ligand\\n\";\n            $complete_li\
gand_list{$chain}{$ligand}=1;\n           }\n     }\n   \
   }\n    close ($F);\n    return %complete_ligand\
_list;\n  }\n\nsub get_chain_list \n  {\n    my $h\
eader_file;\n    my @chain_list;\n    my @list;\n \
   my $n_chains;\n    my %chain_hasch;\n    my $pd\
b_file=@_[0];\n    my $c;\n    my %hasch;\n    my \
$chain;\n  \n    \n    $F=vfopen ($pdb_file, \"r\"\
);\n    while ( <$F>)\n      {\n\n  #if ( /COMPND/ \
&&  /CHAIN\\:/)\n #  {\n      #    if ( /NULL/){@list=(\
\" \");}\n  #    else {@list=(/\\ (.{1})[,;]/g);}      \
   \n #    foreach $c (@list){if ( !$hasch{$c}){$h\
asch{$c}=1;push @chain_list, $c;}}\n      #  }\n\n    if (\
/SEQRES\\s+\\d+\\s+(\\S+)/)\n   {\n     $chain = s\
ubstr($_,11,1);$chain=~s/\\s//g;if ( $chain eq \"\\
"){$chain=\" \";}\n        \n     \n          if ($chain &&\
 !$hasch{$chain}){$hasch{$chain}=1;push @chain_lis\
t, $chain;}\n       }\n if (/^ATOM/ || /^HETATM/)\n     \
{\n       $chain = substr($_,21,1); $chain=~s/\\s//g\
;if ( $chain eq \"\"){$chain=\" \";}\n        if ($ch\
ain && !$hasch{$chain}){$hasch{$chain}=1;push @cha\
in_list, $chain;}\n       }\n      }\n    \n   \n    c\
lose ($F);\n    if (!@chain_list)\n      {\n    @chai\
n_list=(\"A\");\n      }\n    return @chain_list;\\
n  }\n\nsub token_is_in_list\n  {\n   #token_is_in\
_list (token, list )\n   #returns 0 if not in list\
 and otherwise the index of token in list\n\n    m\
y @list=@_;\n    my $a;\n    \n    for ($a=1; $a<=\
$#list; $a++)\n      {\n      if ( $list[$a] eq $list[0\
]){return $a;}\n      }\n  }\n\nsub pdb_name2name_\
and_chain \n  {\n    my $pdb_file=@_[0];\n    my $\
pdb_file_in;\n    my @array;\n    my $chain;\n    \
my $c;\n\n    $pdb_file_in=$pdb_file;\n\n    $pdb_\
file=~/^(.{4})/;$pdb_id=$1;\n    @array=($pdb_file\
=~/([\\w])/g);\n  \n  \n    $chain=uc ($array[4]);\
\n    $chain=($chain eq \"\")?\"FIRST\":$chain;\n \
   \n    return ( $pdb_id, $chain);\n\n    if ( $#\
array==3){return ($pdb_id, \"FIRST\");}\n    elsif\
 ( $#array<4){ return ($pdb_id, \"\");}\n    else \
{return ( $pdb_id, $chain);}\n      \n    \n    \n\
  }\nsub get_main_hom_code \n  {\n    my $pdb_file\
=@_[0];\n    my %hom, $n, $best, $best_h;\n    ope\
n (F, $pdb_file);\n    while (<F>)\n      {\n   if (\
 $_=~/^ATOM/)\n     {\n     $h=substr ($_,26, 1);\n   \
    $n=++$hom{$h};\n        if ($n>$best)\n           {\n\
            $best=$n;\n       $best_h=$h;\n           }\n     }\n      \
}\n    close (F);\n    return $best_h;\n    }\n \n\
sub get_pdb_file \n  {\n    my $pdb_file_in=@_[0];\
\n    my $result;\n    my @letter;\n    my @chain;\
\n    my $v;\n    \n\n    $pdb_file=($pdb_file_in=\
~/\\S+_S_(\\S+)/)?$1:$pdb_file_in;\n\n    if ($no_\
remote_pdb_dir==0)\n      {\n $no_remote_pdb_dir=1\
;\n   $result=get_pdb_file3 ($pdb_file);\n      $no_remot\
e_pdb_dir=0;\n    if ( $result){return $result;}\n   \
   }\n       \n    return get_pdb_file3 ($pdb_file\
);\n  }\n\nsub get_pdb_file3 \n  {\n    my $pdb_fi\
le_in=@_[0];\n    my $result;\n    my @letter;\n  \
  my @chain;\n    my $lcfile;\n    my $ucfile;\n  \
  \n    \n    $lcfile=lc $pdb_file;\n    $ucfile=u\
c $pdb_file;\n\n    if ( ($result=get_pdb_file2 ($\
pdb_file))){return $result;}\n    \n\n    if ($lcf\
ile ne $pdb_file && ($result=get_pdb_file2 ($lcfil\
e))){return $result;}\n    if ($ucfile ne $pdb_fil\
e && ($result=get_pdb_file2 ($ucfile))){return $re\
sult;}\n    \n   \n    \n    return \"\";\n  }\nsu\
b get_pdb_file2\n  {\n    my $pdb_file=@_[0];\n   \
 my $return_value;\n    \n    $return_value=\"\";\\
n    \n    if ( ($result=get_pdb_file1 ($pdb_file)\
)){$return_value=$result;}\n    elsif ( !($pdb_fil\
e=~/\\.pdb/) && !($pdb_file=~/\\.PDB/))\n      {\n\
      if ( ($result=get_pdb_file1 (\"$pdb_file.PDB\")))\
{$return_value=$result;}\n    elsif ( ($result=get_pd\
b_file1 (\"$pdb_file.pdb\"))){$return_value=$resul\
t;} \n      elsif ( ($result=get_pdb_file1 (\"pdb$pdb_f\
ile.pdb\"))){$return_value=$result;} \n   elsif ( ($\
result=get_pdb_file1 (\"$pdb_file.ent\"))){$return\
_value=$result;}\n      elsif ( ($result=get_pdb_file1 \
      }\n    return $return_value;\n  }\n    \nsub\
 get_pdb_file1 \n  { \n    my $pdb_file=@_[0];\n  \
  my $tmp_pdb_file;    \n    my $return_value;\n\n\
\n    $local_pdb_file=\"$pdb_file\";\n    if ( $lo\
cal_pdb_file eq \"\")\n      {\n    $tmp_pdb_file=vtm\
pnam();\n   open F, \">$tmp_pdb_file\";\n \n    while (\
<STDIN>){print F \"$_\";}\n   close (F);\n      \n    if (-e\
 $tmp_pdb_file && &is_pdb_file ( $local_pdb_file))\
\n      {return $tmp_pdb_file;}\n      }\n\n    $loca\
l_pdb_file=\"$pdb_file\";\n    &debug_print (\"\\n\
Try access local file: $local_pdb_file\");\n    \n\
    $local_pdb_file=&check_pdb_file4compression ($\
local_pdb_file);\n    if ( -e $local_pdb_file && (\
&is_pdb_file ($local_pdb_file) || $force_pdb))\n  \
    {\n     &debug_print ( \"\\n\\tIs in Current Dir\"\
);\n  $tmp_pdb_file=vtmpnam();\n    `cp $local_pdb_fil\
e $tmp_pdb_file`;\n     return $tmp_pdb_file;\n     }\\
n    else\n      {\n    &debug_print (\"\\n\\tFile No\
t in Current Dir\");\n      }\n\n    $pdb_div=subs\
tr ($pdb_file, 1, 2);\n    $local_pdb_file=\"$pdb_\
dir/$pdb_div/$pdb_file\";\n    $local_pdb_file=&ch\
eck_pdb_file4compression ( $local_pdb_file);\n    \
&debug_print (\"\\nTry access file From PDB_DIR: $\
local_pdb_file\");\n    if ($pdb_dir && -e $local_\
pdb_file && &is_pdb_file ($local_pdb_file))\n     \
 {\n  &debug_print ( \"\\n\\tIs in Local PDB DIR\")\
;\n   $tmp_pdb_file=vtmpnam();\n    `cp $local_pdb_file\
 $tmp_pdb_file`;\n      return $tmp_pdb_file;\n      }\\
n\n    $local_pdb_file=\"$pdb_dir/$pdb_file\";\n  \
  $local_pdb_file=&check_pdb_file4compression ( $l\
ocal_pdb_file);\n    &debug_print (\"\\nTry access\
 file From PDB_DIR: local_pdb_file\");\n    if ($p\
db_dir && -e $local_pdb_file && &is_pdb_file ($loc\
al_pdb_file))\n      {\n      &debug_print ( \"\\n\\tIs\
 in Local PDB DIR\");\n $tmp_pdb_file=vtmpnam();\n\
      `cp $local_pdb_file $tmp_pdb_file`;\n     return $tmp\
_pdb_file;\n      }\n\n    $local_pdb_file=\"$pdb_\
dir$pdb_file\";\n    $local_pdb_file=&check_pdb_fi\
le4compression ( $local_pdb_file);\n    &debug_pri\
nt (\"\\nTry access file From PDB_DIR: $local_pdb_\
file\");\n    if ($pdb_dir && -e $local_pdb_file &\
& &is_pdb_file ($local_pdb_file))\n      {\n    &debu\
g_print ( \"\\n\\tIs in Local PDB DIR\");\n     $tmp_p\
db_file=vtmpnam();\n    `cp $local_pdb_file $tmp_pdb_\
file`;\n    return $tmp_pdb_file;\n      }\n    else\\
n      {&debug_print ( \"\\n\\tNot In Local Pdb Di\
r\");}\n\n    if ($cache ne \"NO\" && $cache ne \"\
no\")\n      {\n\n      $local_pdb_file=\"$cache/$pdb_f\
ile\";\n    $local_pdb_file=&check_pdb_file4compressi\
on ( $local_pdb_file);\n      &debug_print(\"\\nTry acc\
ess file From Cache: $local_pdb_file\");\n      if (-e \
$local_pdb_file && &is_pdb_file ($local_pdb_file))\
\n      {\n     &debug_print ( \"\\n\\tIs in T-Coffee\
 Cache\");\n          $tmp_pdb_file=vtmpnam();\n          `c\
p $local_pdb_file $tmp_pdb_file`;\n     return $tm\
p_pdb_file;\n       }\n else{&debug_print ( \"\\n\\tNo\
t in Cache Dir\");}\n      }\n\n    if (!$no_remot\
e_pdb_dir) \n      {\n  my $return_value=\"\";\n      if\
 ( &remote_is_pdb_name ($pdb_file, $netaddress)==1\
)\n     {\n     $tmp_pdb_file=vtmpnam();\n          $netc\
ommand=$netaddress;\n       $netcommand=~s/%%/$pdb_f\
ile/g;\n        system ( \"wget -O$tmp_pdb_file.$netc\
ompression -q '$netcommand'\");\n\n     &debug_pri\
nt (\"\\nTry Remote Access for $pdb_file\");\n     \
pression\";\n         \n          if ($netcompression && -B\
 $compressed_tmp_file_name)\n       {\n         &debug_pr\
int (\"\\n\\tFile Found Remotely\");\n          system ( \\
"$netcompression_pg $compressed_tmp_file_name\");\\
n           $return_value=$tmp_pdb_file;\n            }\n       el\
se\n        {\n         &debug_print (\"\\nFile Not Found \
Remotely\");\n          unlink $compressed_tmp_file_name;\\
n           }\n       #Update cache if required\n         if\
 ($cache ne \"no\" && $cache ne \"update\" && -e $\
return_value)\n         {\n         `cp $return_value $cach\
e/$pdb_file.pdb`;\n           }\n     }\n\n     return $retu\
rn_value;\n      }\n    return \"\";\n  }\n\nsub c\
heck_pdb_file4compression \n  {\n    my $file=@_[0\
];\n\n    \n    $file=~s/\\/\\//\\//g;\n\n    if  \
  (-B $file && ($file=~/\\.Z/)) {$tmp=&vtmpnam();`\
cp $file $tmp.Z`;`rm $tmp`;`gunzip $tmp.Z`;return \
$tmp;}\n    elsif (-B $file && ($file=~/\\.gz/)){$\
tmp=&vtmpnam();`cp $file $tmp.gz`;`gunzip $tmp.gz`\
;return $tmp;}\n    elsif (-B $file ){$tmp=&vtmpna\
m();`cp $file $tmp.gz`;`gunzip $tmp.gz`;return $tm\
p;}\n    elsif ( -e $file ) {return $file;}\n    e\
lsif ( -e \"$file.gz\" ){$tmp=&vtmpnam(); `cp $fil\
e.gz $tmp.gz`;`gunzip     $tmp.gz`;return $tmp;}  \
  \n    elsif ( -e \"$file.Z\") {$tmp=&vtmpnam(); \
`cp $file.Z  $tmp.Z`; `gunzip $tmp.Z`;return $tmp;\
}\n    else  {return $file;}\n  }\n\nsub vtmpnam\n\
  {\n    my $tmp_file_name;\n    $tmp_name_counter\
++;\n    $tmp_file_name=\"tmp_file_for_extract_fro\
m_pdb$$.$tmp_name_counter\";\n    $tmp_file_list[$\
ntmp_file++]=$tmp_file_name;\n    if ( -e $tmp_fil\
e_name) {return &vtmpnam ();}\n    else {return $t\
mp_file_name;}\n  }\n\n\n    \n\n\n\nsub vexit\n  \
{\n    my $exit_status=@_[0];\n    \n    &clean(@t\
mp_file_list);\n    exit ( $exit_status);\n  }\n\n\
sub clean\n  {\n  my @fl=@_;\n  my $file;\n  \n\n \
  if ( $debug){print \"remove $#fl files\\n\";}\n\\
n  foreach $file ( @fl)\n    {\n      if (-e $file\
)\n   {\n     if ( $debug){print STDERR \"\\n$file [NO\
T DELETED]\";}\n    else{unlink ($file);} \n    }\n   \
 }\n}\nsub vfopen \n  {\n    my $file=@_[0];\n    \
my $mode=@_[1];\n    my $tmp;\n    my $F = new Fil\
eHandle;\n    \n    \n    $tmp=$file;\n   \n    \n  \
  if ( $mode eq \"r\" && !-e $file){ die \"Cannot \
open file $file [FATAL: EXTRACT_FROM_PDB]\\n\";}\n\
    elsif ($mode eq \"w\"){$tmp=\">$file\";}\n    \
elsif ($mode eq \"a\"){$tmp=\">>$file\";}\n    \n \
   \n    open ($F,$tmp);\n    return $F;\n  }\nsub\
 debug_print\n  {\n    my $message =@_[0];\n    if\
 ($debug){print STDERR \"NO_REMOTE_PDB_DIR: $no_re\
mote_pdb_dir - $message [DEBUG:extract_from_pdb]\"\
;}\n    return;\n    }\nsub is_aa \n  {\n    my $a\
a=@_[0];\n    my $one;\n    my $trhee;\n    \n    \
if ( $onelett{$aa} eq 'X' || !$onelett{$aa} ){retu\
rn '';}\n    else\n      {\n  $one=$onelett{$aa};\n\
      $three=$threelett{$one};\n    return $three;\n      \
}\n  }\n\nsub fill_threelett\n  {\n  my %threelett\
;\n\n  %threelett=(\n'A', 'ALA',\n'C', 'CYS',\n'D'\
, 'ASP',\n'E', 'GLU',\n'F', 'PHE',\n'G', 'GLY',\n'\
H', 'HIS',\n'I', 'ILE',\n'K', 'LYS',\n'L', 'LEU',\\
n'N', 'ASN',\n'M', 'MET',\n'P', 'PRO',\n'Q', 'GLN'\
,\n'R', 'ARG',\n'S', 'SER',\n'T', 'THR',\n'V', 'VA\
L',\n'W', 'TRP',\n'Y', 'TYR',\n);\n\nreturn %three\
lett;\n\n\n}\n\nsub fill_onelett\n  {\n    my %one\
lett;\n    \n    %onelett=(\n\n'10A', 'X',\n'11O',\
 'X',\n'12A', 'X',\n'13P', 'X',\n'13R', 'X',\n'13S\
', 'X',\n'14W', 'X',\n'15P', 'X',\n'16A', 'X',\n'1\
6G', 'X',\n'1AN', 'X',\n'1AP', 'X',\n'1AR', 'X',\n\
'1BH', 'X',\n'1BO', 'X',\n'1C5', 'X',\n'1CU', 'X',\
\n'1DA', 'X',\n'1GL', 'X',\n'1GN', 'X',\n'1IN', 'X\
',\n'1LU', 'L',\n'1MA', 'X',\n'1MC', 'X',\n'1MG', \
'X',\n'1MZ', 'X',\n'1NA', 'X',\n'1NB', 'X',\n'1NI'\
, 'X',\n'1PA', 'A',\n'1PC', 'X',\n'1PE', 'X',\n'1P\
G', 'X',\n'1PI', 'A',\n'1PM', 'X',\n'1PN', 'X',\n'\
1PU', 'X',\n'1PY', 'X',\n'1UN', 'X',\n'24T', 'X',\\
n'25T', 'X',\n'26P', 'X',\n'2AB', 'X',\n'2AM', 'X'\
,\n'2AN', 'X',\n'2AP', 'X',\n'2AR', 'X',\n'2AS', '\
D',\n'2BL', 'X',\n'2BM', 'X',\n'2CP', 'X',\n'2DA',\
 'X',\n'2DG', 'X',\n'2DP', 'X',\n'2DT', 'X',\n'2EP\
', 'X',\n'2EZ', 'X',\n'2FG', 'X',\n'2FL', 'X',\n'2\
FP', 'X',\n'2FU', 'X',\n'2GL', 'X',\n'2GP', 'X',\n\
'2HP', 'X',\n'2IB', 'X',\n'2IP', 'X',\n'2LU', 'L',\
\n'2MA', 'X',\n'2MD', 'X',\n'2ME', 'X',\n'2MG', 'X\
',\n'2ML', 'L',\n'2MO', 'X',\n'2MR', 'R',\n'2MU', \
'X',\n'2MZ', 'X',\n'2NO', 'X',\n'2NP', 'X',\n'2OG'\
, 'X',\n'2PA', 'X',\n'2PC', 'X',\n'2PE', 'X',\n'2P\
G', 'X',\n'2PH', 'X',\n'2PI', 'X',\n'2PL', 'X',\n'\
2PP', 'X',\n'2PU', 'X',\n'2SI', 'X',\n'2TB', 'X',\\
n'34C', 'X',\n'35G', 'X',\n'3AA', 'X',\n'3AD', 'X'\
,\n'3AH', 'H',\n'3AN', 'X',\n'3AP', 'X',\n'3AT', '\
X',\n'3BT', 'X',\n'3CH', 'X',\n'3CN', 'X',\n'3CO',\
 'X',\n'3CP', 'X',\n'3DR', 'X',\n'3EP', 'X',\n'3FM\
', 'X',\n'3GA', 'X',\n'3GP', 'X',\n'3HB', 'X',\n'3\
HC', 'X',\n'3HP', 'X',\n'3IB', 'X',\n'3ID', 'X',\n\
'3IN', 'X',\n'3MA', 'X',\n'3MB', 'X',\n'3MC', 'X',\
\n'3MD', 'D',\n'3MF', 'X',\n'3MP', 'X',\n'3MT', 'X\
',\n'3OL', 'X',\n'3PA', 'X',\n'3PG', 'X',\n'3PO', \
'X',\n'3PP', 'X',\n'3PY', 'X',\n'49A', 'X',\n'4AB'\
, 'X',\n'4AM', 'X',\n'4AN', 'X',\n'4AP', 'X',\n'4B\
A', 'X',\n'4BT', 'X',\n'4CA', 'X',\n'4CO', 'X',\n'\
4HP', 'X',\n'4IP', 'X',\n'4MO', 'X',\n'4MV', 'X',\\
n'4MZ', 'X',\n'4NC', 'X',\n'4NP', 'X',\n'4OX', 'X'\
,\n'4PB', 'X',\n'4PN', 'X',\n'4PP', 'X',\n'4SC', '\
X',\n'4SU', 'X',\n'4TB', 'X',\n'55C', 'X',\n'5AD',\
 'X',\n'5AN', 'X',\n'5AT', 'X',\n'5CM', 'X',\n'5GP\
', 'X',\n'5HP', 'E',\n'5HT', 'X',\n'5IT', 'X',\n'5\
IU', 'X',\n'5MB', 'X',\n'5MC', 'X',\n'5MD', 'X',\n\
'5MP', 'X',\n'5MU', 'X',\n'5NC', 'X',\n'5OB', 'X',\
\n'5PA', 'X',\n'5PV', 'X',\n'6AB', 'X',\n'6CT', 'X\
',\n'6HA', 'X',\n'6HC', 'X',\n'6HG', 'X',\n'6HT', \
'X',\n'6IN', 'X',\n'6MO', 'X',\n'6MP', 'X',\n'6PG'\
, 'X',\n'6WO', 'X',\n'70U', 'X',\n'7DG', 'X',\n'7H\
P', 'X',\n'7I2', 'X',\n'7MG', 'X',\n'7MQ', 'X',\n'\
7NI', 'X',\n'87Y', 'X',\n'8AD', 'X',\n'8BR', 'X',\\
n'8IG', 'X',\n'8IN', 'X',\n'8OG', 'X',\n'95A', 'X'\
,\n'9AD', 'X',\n'9AM', 'X',\n'9AP', 'X',\n'9DG', '\
X',\n'9DI', 'X',\n'9HX', 'X',\n'9OH', 'X',\n'9TA',\
 'X',\n'A12', 'X',\n'A15', 'X',\n'A23', 'X',\n'A24\
', 'X',\n'A26', 'X',\n'A2G', 'X',\n'A2P', 'X',\n'A\
32', 'X',\n'A3P', 'X',\n'A4P', 'X',\n'A5P', 'X',\n\
'A70', 'X',\n'A76', 'X',\n'A77', 'X',\n'A78', 'X',\
\n'A79', 'X',\n'A80', 'X',\n'A85', 'X',\n'A88', 'X\
',\n'A9A', 'X',\n'AA3', 'X',\n'AA4', 'X',\n'AA6', \
'X',\n'AAA', 'X',\n'AAB', 'X',\n'AAC', 'X',\n'AAE'\
, 'X',\n'AAG', 'R',\n'AAH', 'X',\n'AAM', 'X',\n'AA\
N', 'X',\n'AAP', 'X',\n'AAR', 'R',\n'AAS', 'X',\n'\
AAT', 'X',\n'ABA', 'X',\n'ABC', 'X',\n'ABD', 'X',\\
n'ABE', 'X',\n'ABH', 'X',\n'ABI', 'X',\n'ABK', 'X'\
,\n'ABM', 'X',\n'ABN', 'X',\n'ABP', 'X',\n'ABR', '\
X',\n'ABS', 'X',\n'ABU', 'X',\n'AC1', 'X',\n'AC2',\
 'X',\n'ACA', 'X',\n'ACB', 'D',\n'ACC', 'C',\n'ACD\
', 'X',\n'ACE', 'X',\n'ACH', 'X',\n'ACI', 'X',\n'A\
CL', 'R',\n'ACM', 'X',\n'ACN', 'X',\n'ACO', 'X',\n\
'ACP', 'X',\n'ACQ', 'X',\n'ACR', 'X',\n'ACS', 'X',\
\n'ACT', 'X',\n'ACV', 'V',\n'ACX', 'X',\n'ACY', 'X\
',\n'AD2', 'X',\n'AD3', 'X',\n'ADC', 'X',\n'ADD', \
'X',\n'ADE', 'X',\n'ADH', 'X',\n'ADI', 'X',\n'ADM'\
, 'X',\n'ADN', 'X',\n'ADP', 'X',\n'ADQ', 'X',\n'AD\
R', 'X',\n'ADS', 'X',\n'ADT', 'X',\n'ADU', 'X',\n'\
ADW', 'X',\n'ADX', 'X',\n'AE2', 'X',\n'AEA', 'X',\\
n'AEB', 'X',\n'AEI', 'D',\n'AEN', 'X',\n'AET', 'T'\
,\n'AF1', 'X',\n'AF3', 'X',\n'AFA', 'D',\n'AFP', '\
X',\n'AG7', 'X',\n'AGB', 'X',\n'AGF', 'X',\n'AGL',\
 'X',\n'AGM', 'R',\n'AGN', 'X',\n'AGP', 'X',\n'AGS\
', 'X',\n'AGU', 'X',\n'AH0', 'X',\n'AH1', 'X',\n'A\
HA', 'X',\n'AHB', 'D',\n'AHC', 'X',\n'AHF', 'X',\n\
'AHG', 'X',\n'AHH', 'X',\n'AHM', 'X',\n'AHO', 'X',\
\n'AHP', 'X',\n'AHS', 'X',\n'AHT', 'Y',\n'AHU', 'X\
',\n'AHX', 'X',\n'AI1', 'X',\n'AI2', 'X',\n'AIB', \
'X',\n'AIC', 'X',\n'AIM', 'X',\n'AIP', 'X',\n'AIQ'\
, 'X',\n'AIR', 'X',\n'AJ3', 'X',\n'AKB', 'X',\n'AK\
G', 'X',\n'AKR', 'X',\n'AL1', 'X',\n'AL2', 'X',\n'\
AL3', 'X',\n'AL4', 'X',\n'AL5', 'X',\n'AL6', 'X',\\
n'AL7', 'X',\n'AL8', 'X',\n'AL9', 'X',\n'ALA', 'A'\
,\n'ALB', 'X',\n'ALC', 'X',\n'ALD', 'L',\n'ALE', '\
X',\n'ALF', 'X',\n'ALG', 'X',\n'ALL', 'X',\n'ALM',\
 'A',\n'ALN', 'A',\n'ALO', 'T',\n'ALP', 'X',\n'ALQ\
', 'X',\n'ALR', 'X',\n'ALS', 'X',\n'ALT', 'A',\n'A\
LY', 'K',\n'ALZ', 'X',\n'AMA', 'X',\n'AMB', 'X',\n\
'AMC', 'X',\n'AMD', 'X',\n'AMG', 'X',\n'AMH', 'X',\
\n'AMI', 'X',\n'AML', 'X',\n'AMN', 'X',\n'AMO', 'X\
',\n'AMP', 'X',\n'AMQ', 'X',\n'AMR', 'X',\n'AMS', \
'X',\n'AMT', 'X',\n'AMU', 'X',\n'AMW', 'X',\n'AMX'\
, 'X',\n'AMY', 'X',\n'ANA', 'X',\n'ANB', 'X',\n'AN\
C', 'X',\n'AND', 'X',\n'ANE', 'X',\n'ANI', 'X',\n'\
ANL', 'X',\n'ANO', 'X',\n'ANP', 'X',\n'ANS', 'X',\\
n'ANT', 'X',\n'AOE', 'X',\n'AOP', 'X',\n'AP1', 'X'\
,\n'AP2', 'X',\n'AP3', 'X',\n'AP4', 'X',\n'AP5', '\
X',\n'AP6', 'X',\n'APA', 'X',\n'APB', 'X',\n'APC',\
 'X',\n'APE', 'F',\n'APF', 'X',\n'APG', 'X',\n'APH\
', 'A',\n'API', 'X',\n'APL', 'X',\n'APM', 'X',\n'A\
PN', 'G',\n'APP', 'X',\n'APQ', 'X',\n'APR', 'X',\n\
'APS', 'X',\n'APT', 'X',\n'APU', 'X',\n'APX', 'X',\
\n'APY', 'X',\n'APZ', 'X',\n'AQS', 'X',\n'AR1', 'X\
',\n'AR2', 'X',\n'ARA', 'X',\n'ARB', 'X',\n'ARC', \
'X',\n'ARD', 'X',\n'ARG', 'R',\n'ARH', 'X',\n'ARI'\
, 'X',\n'ARM', 'R',\n'ARN', 'X',\n'ARO', 'R',\n'AR\
P', 'X',\n'ARQ', 'X',\n'ARS', 'X',\n'AS1', 'R',\n'\
AS2', 'X',\n'ASA', 'D',\n'ASB', 'D',\n'ASC', 'X',\\
n'ASD', 'X',\n'ASE', 'X',\n'ASF', 'X',\n'ASI', 'X'\
,\n'ASK', 'D',\n'ASL', 'X',\n'ASM', 'N',\n'ASO', '\
X',\n'ASP', 'D',\n'ASQ', 'X',\n'ASU', 'X',\n'ATA',\
 'X',\n'ATC', 'X',\n'ATD', 'X',\n'ATF', 'X',\n'ATG\
', 'X',\n'ATH', 'X',\n'ATM', 'X',\n'ATO', 'X',\n'A\
TP', 'X',\n'ATQ', 'X',\n'ATR', 'X',\n'ATT', 'X',\n\
'ATY', 'X',\n'ATZ', 'X',\n'AUC', 'X',\n'AUR', 'X',\
\n'AVG', 'X',\n'AXP', 'X',\n'AYA', 'A',\n'AZ2', 'X\
',\n'AZA', 'X',\n'AZC', 'X',\n'AZD', 'X',\n'AZE', \
'X',\n'AZI', 'X',\n'AZL', 'X',\n'AZM', 'X',\n'AZR'\
, 'X',\n'AZT', 'X',\n'B12', 'X',\n'B1F', 'F',\n'B2\
A', 'A',\n'B2F', 'F',\n'B2I', 'I',\n'B2V', 'V',\n'\
B3I', 'X',\n'B3P', 'X',\n'B7G', 'X',\n'B96', 'X',\\
n'B9A', 'X',\n'BA1', 'X',\n'BAA', 'X',\n'BAB', 'X'\
,\n'BAC', 'X',\n'BAF', 'X',\n'BAH', 'X',\n'BAI', '\
X',\n'BAK', 'X',\n'BAL', 'A',\n'BAM', 'X',\n'BAO',\
 'X',\n'BAP', 'X',\n'BAR', 'X',\n'BAS', 'X',\n'BAT\
', 'F',\n'BAY', 'X',\n'BAZ', 'X',\n'BB1', 'X',\n'B\
B2', 'X',\n'BBA', 'X',\n'BBH', 'X',\n'BBS', 'X',\n\
'BBT', 'X',\n'BBZ', 'X',\n'BCA', 'X',\n'BCB', 'X',\
\n'BCC', 'X',\n'BCD', 'X',\n'BCL', 'X',\n'BCN', 'X\
',\n'BCR', 'X',\n'BCS', 'C',\n'BCT', 'X',\n'BCY', \
'X',\n'BCZ', 'X',\n'BDA', 'X',\n'BDG', 'X',\n'BDK'\
, 'X',\n'BDM', 'X',\n'BDN', 'X',\n'BDS', 'X',\n'BE\
1', 'X',\n'BE2', 'X',\n'BEA', 'X',\n'BEF', 'X',\n'\
BEN', 'X',\n'BEO', 'X',\n'BEP', 'X',\n'BER', 'X',\\
n'BES', 'X',\n'BET', 'X',\n'BEZ', 'X',\n'BF2', 'X'\
,\n'BFA', 'X',\n'BFD', 'X',\n'BFP', 'X',\n'BFS', '\
X',\n'BFU', 'X',\n'BG6', 'X',\n'BGF', 'X',\n'BGG',\
 'X',\n'BGL', 'X',\n'BGN', 'X',\n'BGP', 'X',\n'BGX\
', 'X',\n'BH4', 'X',\n'BHA', 'X',\n'BHC', 'X',\n'B\
HD', 'D',\n'BHO', 'X',\n'BHS', 'X',\n'BIC', 'X',\n\
'BIN', 'X',\n'BIO', 'X',\n'BIP', 'X',\n'BIS', 'X',\
\n'BIZ', 'X',\n'BJH', 'X',\n'BJI', 'X',\n'BJP', 'X\
',\n'BLA', 'X',\n'BLB', 'X',\n'BLE', 'L',\n'BLG', \
'P',\n'BLI', 'X',\n'BLM', 'X',\n'BLV', 'X',\n'BLY'\
, 'K',\n'BM1', 'X',\n'BM2', 'X',\n'BM5', 'X',\n'BM\
9', 'X',\n'BMA', 'X',\n'BMD', 'X',\n'BME', 'X',\n'\
BMP', 'X',\n'BMQ', 'X',\n'BMS', 'X',\n'BMT', 'T',\\
n'BMU', 'X',\n'BMY', 'X',\n'BMZ', 'X',\n'BNA', 'X'\
,\n'BNG', 'X',\n'BNI', 'X',\n'BNN', 'F',\n'BNO', '\
L',\n'BNS', 'X',\n'BNZ', 'X',\n'BO3', 'X',\n'BO4',\
 'X',\n'BOC', 'X',\n'BOG', 'X',\n'BOM', 'X',\n'BOT\
', 'X',\n'BOX', 'X',\n'BOZ', 'X',\n'BPA', 'X',\n'B\
PB', 'X',\n'BPD', 'X',\n'BPG', 'X',\n'BPH', 'X',\n\
'BPI', 'X',\n'BPJ', 'X',\n'BPM', 'X',\n'BPN', 'X',\
\n'BPO', 'X',\n'BPP', 'X',\n'BPT', 'X',\n'BPY', 'X\
',\n'BRB', 'X',\n'BRC', 'X',\n'BRE', 'X',\n'BRI', \
'X',\n'BRL', 'X',\n'BRM', 'X',\n'BRN', 'X',\n'BRO'\
, 'X',\n'BRS', 'X',\n'BRU', 'X',\n'BRZ', 'X',\n'BS\
B', 'X',\n'BSI', 'X',\n'BSP', 'X',\n'BT1', 'X',\n'\
BT2', 'X',\n'BT3', 'X',\n'BTA', 'L',\n'BTB', 'X',\\
n'BTC', 'C',\n'BTD', 'X',\n'BTN', 'X',\n'BTP', 'X'\
,\n'BTR', 'W',\n'BU1', 'X',\n'BUA', 'X',\n'BUB', '\
X',\n'BUC', 'X',\n'BUG', 'X',\n'BUL', 'X',\n'BUM',\
 'X',\n'BUQ', 'X',\n'BUT', 'X',\n'BVD', 'X',\n'BX3\
', 'X',\n'BYS', 'X',\n'BZ1', 'X',\n'BZA', 'X',\n'B\
ZB', 'X',\n'BZC', 'X',\n'BZD', 'X',\n'BZF', 'X',\n\
'BZI', 'X',\n'BZM', 'X',\n'BZO', 'X',\n'BZP', 'X',\
\n'BZQ', 'X',\n'BZS', 'X',\n'BZT', 'X',\n'C02', 'X\
',\n'C11', 'X',\n'C1O', 'X',\n'C20', 'X',\n'C24', \
'X',\n'C2F', 'X',\n'C2O', 'X',\n'C2P', 'X',\n'C3M'\
, 'X',\n'C3P', 'X',\n'C3X', 'X',\n'C48', 'X',\n'C4\
M', 'X',\n'C4X', 'X',\n'C5C', 'X',\n'C5M', 'X',\n'\
C5P', 'X',\n'C5X', 'X',\n'C60', 'X',\n'C6C', 'X',\\
n'C6M', 'X',\n'C78', 'X',\n'C8E', 'X',\n'CA3', 'X'\
,\n'CA5', 'X',\n'CAA', 'X',\n'CAB', 'X',\n'CAC', '\
X',\n'CAD', 'X',\n'CAF', 'C',\n'CAG', 'X',\n'CAH',\
 'X',\n'CAL', 'X',\n'CAM', 'X',\n'CAN', 'X',\n'CAO\
', 'X',\n'CAP', 'X',\n'CAQ', 'X',\n'CAR', 'X',\n'C\
AS', 'C',\n'CAT', 'X',\n'CAV', 'X',\n'CAY', 'C',\n\
'CAZ', 'X',\n'CB3', 'X',\n'CB4', 'X',\n'CBA', 'X',\
\n'CBD', 'X',\n'CBG', 'X',\n'CBI', 'X',\n'CBL', 'X\
',\n'CBM', 'X',\n'CBN', 'X',\n'CBO', 'X',\n'CBP', \
'X',\n'CBS', 'X',\n'CBX', 'X',\n'CBZ', 'X',\n'CC0'\
, 'X',\n'CC1', 'X',\n'CCC', 'X',\n'CCH', 'X',\n'CC\
I', 'X',\n'CCM', 'X',\n'CCN', 'X',\n'CCO', 'X',\n'\
CCP', 'X',\n'CCR', 'X',\n'CCS', 'C',\n'CCV', 'X',\\
n'CCY', 'X',\n'CD1', 'X',\n'CDC', 'X',\n'CDE', 'X'\
,\n'CDF', 'X',\n'CDI', 'X',\n'CDL', 'X',\n'CDM', '\
X',\n'CDP', 'X',\n'CDR', 'X',\n'CDU', 'X',\n'CE1',\
 'X',\n'CEA', 'C',\n'CEB', 'X',\n'CEC', 'X',\n'CED\
', 'X',\n'CEF', 'X',\n'CEH', 'X',\n'CEM', 'X',\n'C\
EO', 'X',\n'CEP', 'X',\n'CEQ', 'X',\n'CER', 'X',\n\
'CES', 'G',\n'CET', 'X',\n'CFC', 'X',\n'CFF', 'X',\
\n'CFM', 'X',\n'CFO', 'X',\n'CFP', 'X',\n'CFS', 'X\
',\n'CFX', 'X',\n'CGN', 'X',\n'CGP', 'X',\n'CGS', \
'X',\n'CGU', 'E',\n'CH2', 'X',\n'CH3', 'X',\n'CHA'\
, 'X',\n'CHB', 'X',\n'CHD', 'X',\n'CHF', 'X',\n'CH\
G', 'G',\n'CHI', 'X',\n'CHN', 'X',\n'CHO', 'X',\n'\
CHP', 'G',\n'CHR', 'X',\n'CHS', 'F',\n'CHT', 'X',\\
n'CHX', 'X',\n'CIC', 'X',\n'CIN', 'X',\n'CIP', 'X'\
,\n'CIR', 'X',\n'CIT', 'X',\n'CIU', 'X',\n'CKI', '\
X',\n'CL1', 'X',\n'CL2', 'X',\n'CLA', 'X',\n'CLB',\
 'A',\n'CLC', 'S',\n'CLD', 'A',\n'CLE', 'L',\n'CLF\
', 'X',\n'CLK', 'S',\n'CLL', 'X',\n'CLM', 'X',\n'C\
LN', 'X',\n'CLO', 'X',\n'CLP', 'X',\n'CLQ', 'X',\n\
'CLR', 'X',\n'CLS', 'X',\n'CLT', 'X',\n'CLX', 'X',\
\n'CLY', 'X',\n'CMA', 'R',\n'CMC', 'X',\n'CMD', 'X\
',\n'CME', 'C',\n'CMG', 'X',\n'CMK', 'X',\n'CMN', \
'X',\n'CMO', 'X',\n'CMP', 'X',\n'CMR', 'X',\n'CMS'\
, 'X',\n'CMT', 'C',\n'CMX', 'X',\n'CNA', 'X',\n'CN\
C', 'X',\n'CND', 'X',\n'CNH', 'X',\n'CNM', 'X',\n'\
CNN', 'X',\n'CNO', 'X',\n'CNP', 'X',\n'CO2', 'X',\\
n'CO3', 'X',\n'CO5', 'X',\n'CO8', 'X',\n'COA', 'X'\
,\n'COB', 'X',\n'COC', 'X',\n'COD', 'X',\n'COE', '\
X',\n'COF', 'X',\n'COH', 'X',\n'COI', 'X',\n'COJ',\
 'X',\n'COL', 'X',\n'COM', 'X',\n'CON', 'X',\n'COP\
', 'X',\n'COR', 'X',\n'COS', 'X',\n'COT', 'X',\n'C\
OY', 'X',\n'CP1', 'G',\n'CP2', 'X',\n'CP4', 'X',\n\
'CPA', 'X',\n'CPB', 'X',\n'CPC', 'X',\n'CPD', 'X',\
\n'CPG', 'X',\n'CPH', 'X',\n'CPI', 'X',\n'CPM', 'X\
',\n'CPN', 'G',\n'CPO', 'X',\n'CPP', 'X',\n'CPQ', \
'X',\n'CPR', 'X',\n'CPS', 'X',\n'CPT', 'X',\n'CPU'\
, 'X',\n'CPV', 'X',\n'CPY', 'X',\n'CR1', 'X',\n'CR\
6', 'X',\n'CRA', 'X',\n'CRB', 'X',\n'CRC', 'X',\n'\
CRG', 'X',\n'CRH', 'X',\n'CRO', 'T',\n'CRP', 'X',\\
n'CRQ', 'X',\n'CRS', 'X',\n'CRT', 'X',\n'CRY', 'X'\
,\n'CSA', 'C',\n'CSB', 'X',\n'CSD', 'C',\n'CSE', '\
C',\n'CSH', 'X',\n'CSI', 'X',\n'CSN', 'X',\n'CSO',\
 'C',\n'CSP', 'C',\n'CSR', 'C',\n'CSS', 'C',\n'CST\
', 'X',\n'CSW', 'C',\n'CSX', 'C',\n'CSY', 'X',\n'C\
SZ', 'C',\n'CT3', 'X',\n'CTA', 'X',\n'CTB', 'X',\n\
'CTC', 'X',\n'CTD', 'X',\n'CTH', 'T',\n'CTO', 'X',\
\n'CTP', 'X',\n'CTR', 'X',\n'CTS', 'X',\n'CTT', 'X\
',\n'CTY', 'X',\n'CTZ', 'X',\n'CU1', 'X',\n'CUA', \
'X',\n'CUC', 'X',\n'CUL', 'X',\n'CUO', 'X',\n'CUZ'\
, 'X',\n'CVI', 'X',\n'CXF', 'X',\n'CXL', 'X',\n'CX\
M', 'M',\n'CXN', 'X',\n'CXP', 'X',\n'CXS', 'X',\n'\
CY1', 'C',\n'CY3', 'X',\n'CYB', 'X',\n'CYC', 'X',\\
n'CYF', 'C',\n'CYG', 'C',\n'CYH', 'X',\n'CYL', 'X'\
,\n'CYM', 'C',\n'CYN', 'X',\n'CYO', 'X',\n'CYP', '\
X',\n'CYQ', 'C',\n'CYS', 'C',\n'CYU', 'X',\n'CYY',\
 'X',\n'CYZ', 'X',\n'CZH', 'X',\n'CZZ', 'C',\n'D12\
', 'X',\n'D13', 'X',\n'D16', 'X',\n'D18', 'X',\n'D\
19', 'X',\n'D1P', 'X',\n'D24', 'X',\n'D34', 'X',\n\
'D35', 'X',\n'D4D', 'X',\n'D4T', 'X',\n'D6G', 'X',\
\n'DA2', 'R',\n'DA3', 'X',\n'DA6', 'X',\n'DA7', 'X\
',\n'DAA', 'X',\n'DAB', 'X',\n'DAC', 'X',\n'DAD', \
'X',\n'DAE', 'X',\n'DAF', 'X',\n'DAG', 'X',\n'DAH'\
, 'A',\n'DAJ', 'X',\n'DAK', 'X',\n'DAL', 'A',\n'DA\
M', 'A',\n'DAN', 'X',\n'DAO', 'X',\n'DAP', 'X',\n'\
DAQ', 'X',\n'DAR', 'R',\n'DAS', 'D',\n'DAT', 'X',\\
n'DAU', 'X',\n'DAV', 'X',\n'DBA', 'X',\n'DBD', 'X'\
,\n'DBF', 'X',\n'DBG', 'X',\n'DBI', 'X',\n'DBV', '\
X',\n'DBY', 'Y',\n'DCA', 'X',\n'DCB', 'X',\n'DCE',\
 'X',\n'DCF', 'X',\n'DCG', 'X',\n'DCH', 'X',\n'DCI\
', 'I',\n'DCL', 'X',\n'DCM', 'X',\n'DCP', 'X',\n'D\
CS', 'X',\n'DCT', 'X',\n'DCY', 'C',\n'DCZ', 'X',\n\
'DDA', 'X',\n'DDB', 'X',\n'DDC', 'X',\n'DDF', 'X',\
\n'DDG', 'X',\n'DDH', 'X',\n'DDL', 'X',\n'DDM', 'X\
',\n'DDO', 'L',\n'DDP', 'X',\n'DDQ', 'X',\n'DDT', \
'Y',\n'DDU', 'X',\n'DEA', 'X',\n'DEB', 'X',\n'DEC'\
, 'X',\n'DEF', 'X',\n'DEL', 'X',\n'DEM', 'X',\n'DE\
N', 'X',\n'DEP', 'X',\n'DEQ', 'X',\n'DES', 'X',\n'\
DET', 'X',\n'DFC', 'X',\n'DFG', 'X',\n'DFI', 'X',\\
n'DFL', 'X',\n'DFO', 'X',\n'DFP', 'X',\n'DFR', 'X'\
,\n'DFT', 'X',\n'DFV', 'X',\n'DFX', 'X',\n'DG2', '\
X',\n'DG3', 'X',\n'DG6', 'X',\n'DGA', 'X',\n'DGD',\
 'X',\n'DGG', 'X',\n'DGL', 'E',\n'DGN', 'Q',\n'DGP\
', 'X',\n'DGT', 'X',\n'DGX', 'X',\n'DH2', 'X',\n'D\
HA', 'A',\n'DHB', 'X',\n'DHC', 'X',\n'DHD', 'X',\n\
'DHE', 'X',\n'DHF', 'X',\n'DHG', 'X',\n'DHI', 'H',\
\n'DHL', 'X',\n'DHM', 'X',\n'DHN', 'V',\n'DHP', 'X\
',\n'DHQ', 'X',\n'DHR', 'X',\n'DHS', 'X',\n'DHT', \
'X',\n'DHU', 'X',\n'DHY', 'X',\n'DHZ', 'X',\n'DI2'\
, 'X',\n'DI3', 'G',\n'DI4', 'X',\n'DI5', 'X',\n'DI\
A', 'X',\n'DIC', 'X',\n'DIF', 'X',\n'DIG', 'X',\n'\
DII', 'X',\n'DIL', 'I',\n'DIM', 'X',\n'DIO', 'X',\\
n'DIP', 'X',\n'DIQ', 'X',\n'DIS', 'X',\n'DIT', 'X'\
,\n'DIV', 'V',\n'DIX', 'X',\n'DIY', 'X',\n'DKA', '\
X',\n'DLA', 'X',\n'DLE', 'L',\n'DLF', 'X',\n'DLS',\
 'K',\n'DLY', 'K',\n'DM1', 'X',\n'DM2', 'X',\n'DM3\
', 'X',\n'DM4', 'X',\n'DM5', 'X',\n'DM6', 'X',\n'D\
M7', 'X',\n'DM8', 'X',\n'DM9', 'X',\n'DMA', 'X',\n\
'DMB', 'X',\n'DMC', 'X',\n'DMD', 'X',\n'DME', 'X',\
\n'DMF', 'X',\n'DMG', 'G',\n'DMH', 'N',\n'DMI', 'X\
',\n'DMJ', 'X',\n'DML', 'X',\n'DMM', 'X',\n'DMN', \
'X',\n'DMO', 'X',\n'DMP', 'X',\n'DMQ', 'X',\n'DMR'\
, 'X',\n'DMS', 'X',\n'DMT', 'X',\n'DMV', 'X',\n'DM\
Y', 'X',\n'DNC', 'X',\n'DND', 'X',\n'DNH', 'X',\n'\
DNJ', 'X',\n'DNN', 'X',\n'DNP', 'X',\n'DNQ', 'X',\\
n'DNR', 'X',\n'DO2', 'X',\n'DO3', 'X',\n'DOA', 'X'\
,\n'DOB', 'X',\n'DOC', 'X',\n'DOH', 'D',\n'DOM', '\
X',\n'DOS', 'X',\n'DOX', 'X',\n'DP5', 'X',\n'DP7',\
 'X',\n'DPA', 'X',\n'DPC', 'X',\n'DPD', 'X',\n'DPE\
', 'X',\n'DPG', 'X',\n'DPH', 'F',\n'DPM', 'X',\n'D\
PN', 'F',\n'DPO', 'X',\n'DPP', 'X',\n'DPR', 'P',\n\
'DPS', 'X',\n'DPT', 'X',\n'DPX', 'X',\n'DPY', 'X',\
\n'DPZ', 'X',\n'DQH', 'X',\n'DQN', 'X',\n'DR1', 'X\
',\n'DRB', 'X',\n'DRC', 'X',\n'DRI', 'X',\n'DRP', \
'X',\n'DRT', 'X',\n'DRU', 'X',\n'DSA', 'X',\n'DSB'\
, 'X',\n'DSC', 'X',\n'DSD', 'X',\n'DSE', 'S',\n'DS\
I', 'X',\n'DSN', 'S',\n'DSP', 'D',\n'DSR', 'X',\n'\
DSS', 'X',\n'DSX', 'X',\n'DSY', 'X',\n'DTB', 'X',\\
n'DTD', 'X',\n'DTH', 'T',\n'DTN', 'X',\n'DTO', 'X'\
,\n'DTP', 'X',\n'DTQ', 'X',\n'DTR', 'W',\n'DTT', '\
X',\n'DTY', 'Y',\n'DUD', 'X',\n'DUO', 'X',\n'DUR',\
 'X',\n'DUT', 'X',\n'DVA', 'V',\n'DVR', 'X',\n'DX9\
', 'X',\n'DXA', 'X',\n'DXB', 'X',\n'DXC', 'X',\n'D\
XG', 'X',\n'DXX', 'X',\n'DZF', 'X',\n'E09', 'X',\n\
'E20', 'X',\n'E2P', 'X',\n'E3G', 'X',\n'E4N', 'X',\
\n'E4P', 'X',\n'E64', 'X',\n'E6C', 'X',\n'E96', 'X\
',\n'E97', 'X',\n'EA2', 'X',\n'EAA', 'X',\n'EAP', \
'X',\n'EBP', 'X',\n'EBW', 'X',\n'ECO', 'X',\n'EDA'\
, 'X',\n'EDC', 'X',\n'EDE', 'X',\n'EDO', 'X',\n'ED\
R', 'X',\n'EEB', 'X',\n'EEE', 'X',\n'EFC', 'X',\n'\
EFZ', 'X',\n'EG1', 'X',\n'EG2', 'X',\n'EG3', 'X',\\
n'EGC', 'X',\n'EGL', 'X',\n'EHP', 'A',\n'EIC', 'X'\
,\n'EJT', 'X',\n'ELA', 'X',\n'EMB', 'X',\n'EMC', '\
X',\n'EMD', 'X',\n'EMM', 'X',\n'EMO', 'X',\n'EMP',\
 'X',\n'EMR', 'X',\n'ENA', 'X',\n'ENC', 'X',\n'ENH\
', 'X',\n'ENO', 'X',\n'ENP', 'X',\n'EOA', 'X',\n'E\
OH', 'X',\n'EOT', 'X',\n'EOX', 'X',\n'EPA', 'X',\n\
'EPE', 'X',\n'EPH', 'X',\n'EPI', 'X',\n'EPN', 'X',\
\n'EPO', 'X',\n'EPT', 'X',\n'EPU', 'X',\n'EPX', 'X\
',\n'EPY', 'X',\n'EQI', 'X',\n'EQP', 'X',\n'EQU', \
'X',\n'ERG', 'X',\n'ERI', 'X',\n'ERY', 'X',\n'ESC'\
, 'X',\n'ESD', 'X',\n'ESI', 'X',\n'ESO', 'X',\n'ES\
P', 'X',\n'EST', 'X',\n'ESX', 'X',\n'ETA', 'X',\n'\
ETC', 'X',\n'ETD', 'X',\n'ETF', 'X',\n'ETH', 'X',\\
n'ETI', 'X',\n'ETN', 'X',\n'ETO', 'X',\n'ETP', 'X'\
,\n'ETR', 'X',\n'ETS', 'X',\n'ETY', 'X',\n'EU3', '\
X',\n'EUG', 'X',\n'EYS', 'C',\n'F09', 'X',\n'F2B',\
 'X',\n'F3S', 'X',\n'F42', 'X',\n'F43', 'X',\n'F4S\
', 'X',\n'F6B', 'X',\n'F6P', 'X',\n'F89', 'X',\n'F\
A1', 'X',\n'FA5', 'F',\n'FAA', 'X',\n'FAB', 'X',\n\
'FAC', 'X',\n'FAD', 'X',\n'FAF', 'X',\n'FAG', 'X',\
\n'FAM', 'X',\n'FAR', 'X',\n'FAS', 'X',\n'FAT', 'X\
',\n'FBA', 'X',\n'FBE', 'X',\n'FBI', 'X',\n'FBP', \
'X',\n'FBQ', 'X',\n'FBS', 'X',\n'FBT', 'X',\n'FBU'\
, 'X',\n'FCA', 'X',\n'FCB', 'X',\n'FCI', 'X',\n'FC\
N', 'X',\n'FCO', 'X',\n'FCR', 'X',\n'FCT', 'X',\n'\
FCX', 'X',\n'FCY', 'C',\n'FD1', 'F',\n'FD2', 'F',\\
n'FD3', 'F',\n'FD4', 'F',\n'FDA', 'X',\n'FDC', 'X'\
,\n'FDI', 'X',\n'FDP', 'X',\n'FDS', 'X',\n'FE2', '\
X',\n'FEA', 'X',\n'FEL', 'X',\n'FEM', 'X',\n'FEN',\
 'X',\n'FEO', 'X',\n'FEP', 'X',\n'FER', 'X',\n'FES\
', 'X',\n'FFB', 'X',\n'FFC', 'X',\n'FFF', 'X',\n'F\
FO', 'X',\n'FGL', 'G',\n'FHB', 'X',\n'FHC', 'X',\n\
'FHP', 'X',\n'FHU', 'X',\n'FID', 'X',\n'FII', 'X',\
\n'FIP', 'X',\n'FK5', 'X',\n'FKA', 'X',\n'FKI', 'X\
',\n'FKP', 'X',\n'FL2', 'X',\n'FL9', 'X',\n'FLA', \
'A',\n'FLC', 'X',\n'FLD', 'X',\n'FLE', 'L',\n'FLF'\
, 'X',\n'FLO', 'X',\n'FLP', 'X',\n'FLT', 'Y',\n'FL\
U', 'X',\n'FLX', 'X',\n'FM1', 'X',\n'FM2', 'X',\n'\
FMA', 'X',\n'FMB', 'X',\n'FMC', 'X',\n'FME', 'M',\\
n'FMN', 'X',\n'FMP', 'X',\n'FMR', 'X',\n'FMS', 'X'\
,\n'FMT', 'X',\n'FNE', 'X',\n'FNP', 'X',\n'FNS', '\
X',\n'FOC', 'X',\n'FOE', 'X',\n'FOG', 'F',\n'FOH',\
 'X',\n'FOK', 'X',\n'FOL', 'X',\n'FON', 'X',\n'FOP\
', 'X',\n'FOR', 'X',\n'FOS', 'X',\n'FPA', 'X',\n'F\
PC', 'X',\n'FPI', 'X',\n'FPO', 'X',\n'FPP', 'X',\n\
'FPT', 'X',\n'FQP', 'X',\n'FRA', 'X',\n'FRD', 'F',\
\n'FRU', 'X',\n'FS3', 'X',\n'FS4', 'X',\n'FSB', 'X\
',\n'FSO', 'X',\n'FSX', 'X',\n'FTC', 'X',\n'FTP', \
'X',\n'FTR', 'W',\n'FTT', 'X',\n'FTY', 'Y',\n'FUA'\
, 'X',\n'FUC', 'X',\n'FUM', 'X',\n'FUP', 'X',\n'FV\
F', 'X',\n'FXP', 'X',\n'FXV', 'X',\n'FYA', 'F',\n'\
G16', 'X',\n'G1P', 'X',\n'G20', 'X',\n'G21', 'X',\\
n'G23', 'X',\n'G26', 'X',\n'G28', 'X',\n'G2F', 'X'\
,\n'G37', 'X',\n'G39', 'X',\n'G3H', 'X',\n'G3P', '\
X',\n'G4D', 'X',\n'G6D', 'X',\n'G6P', 'X',\n'G6Q',\
 'X',\n'G7M', 'X',\n'GA2', 'X',\n'GAA', 'X',\n'GAB\
', 'X',\n'GAC', 'X',\n'GAI', 'X',\n'GAL', 'X',\n'G\
AM', 'X',\n'GAN', 'X',\n'GAO', 'X',\n'GAP', 'X',\n\
'GAR', 'G',\n'GAS', 'X',\n'GAT', 'X',\n'GBC', 'X',\
\n'GBI', 'X',\n'GBP', 'X',\n'GBS', 'X',\n'GBX', 'X\
',\n'GC4', 'X',\n'GCA', 'X',\n'GCD', 'X',\n'GCG', \
'G',\n'GCH', 'G',\n'GCK', 'X',\n'GCL', 'X',\n'GCM'\
, 'X',\n'GCN', 'X',\n'GCO', 'X',\n'GCP', 'X',\n'GC\
R', 'X',\n'GCS', 'X',\n'GCU', 'X',\n'GD3', 'X',\n'\
GDB', 'X',\n'GDM', 'X',\n'GDN', 'X',\n'GDP', 'X',\\
n'GDS', 'X',\n'GDU', 'X',\n'GE1', 'X',\n'GE2', 'X'\
,\n'GE3', 'X',\n'GEA', 'X',\n'GEL', 'X',\n'GEM', '\
X',\n'GEN', 'X',\n'GEP', 'X',\n'GER', 'X',\n'GFP',\
 'X',\n'GGB', 'X',\n'GGL', 'E',\n'GGP', 'X',\n'GHP\
', 'G',\n'GIP', 'X',\n'GIS', 'X',\n'GKR', 'X',\n'G\
L2', 'X',\n'GL3', 'G',\n'GL4', 'X',\n'GL5', 'X',\n\
'GL7', 'X',\n'GL9', 'X',\n'GLA', 'X',\n'GLB', 'X',\
\n'GLC', 'X',\n'GLD', 'X',\n'GLE', 'X',\n'GLF', 'X\
',\n'GLG', 'X',\n'GLH', 'Q',\n'GLI', 'X',\n'GLL', \
'X',\n'GLM', 'G',\n'GLN', 'Q',\n'GLO', 'X',\n'GLP'\
, 'X',\n'GLR', 'X',\n'GLS', 'X',\n'GLT', 'X',\n'GL\
U', 'E',\n'GLV', 'X',\n'GLW', 'X',\n'GLY', 'G',\n'\
GLZ', 'X',\n'GM1', 'X',\n'GMA', 'X',\n'GMC', 'X',\\
n'GMH', 'X',\n'GMP', 'X',\n'GMY', 'X',\n'GN7', 'X'\
,\n'GNA', 'X',\n'GNB', 'X',\n'GNH', 'X',\n'GNP', '\
X',\n'GNT', 'X',\n'GOA', 'X',\n'GOL', 'X',\n'GOX',\
 'X',\n'GP1', 'X',\n'GP3', 'X',\n'GP4', 'X',\n'GP6\
', 'X',\n'GP8', 'X',\n'GPB', 'E',\n'GPC', 'X',\n'G\
PE', 'X',\n'GPG', 'X',\n'GPI', 'X',\n'GPJ', 'X',\n\
'GPL', 'K',\n'GPM', 'X',\n'GPN', 'G',\n'GPP', 'X',\
\n'GPR', 'X',\n'GPS', 'X',\n'GPX', 'X',\n'GR1', 'X\
',\n'GR3', 'X',\n'GR4', 'X',\n'GSA', 'X',\n'GSB', \
'X',\n'GSC', 'G',\n'GSE', 'S',\n'GSH', 'X',\n'GSP'\
, 'X',\n'GSR', 'X',\n'GSS', 'X',\n'GT9', 'C',\n'GT\
A', 'X',\n'GTB', 'X',\n'GTD', 'X',\n'GTE', 'X',\n'\
GTH', 'T',\n'GTN', 'X',\n'GTO', 'X',\n'GTP', 'X',\\
n'GTR', 'X',\n'GTS', 'X',\n'GTT', 'X',\n'GTX', 'X'\
,\n'GTZ', 'X',\n'GU7', 'X',\n'GUA', 'X',\n'GUD', '\
X',\n'GUM', 'X',\n'GUN', 'X',\n'GUP', 'X',\n'GUR',\
 'X',\n'GW3', 'X',\n'GZZ', 'X',\n'H2B', 'X',\n'H2P\
', 'H',\n'H2S', 'X',\n'H2U', 'X',\n'H4B', 'X',\n'H\
5M', 'P',\n'H5P', 'X',\n'HAA', 'X',\n'HAB', 'X',\n\
'HAC', 'A',\n'HAD', 'X',\n'HAE', 'X',\n'HAG', 'X',\
\n'HAI', 'X',\n'HAM', 'X',\n'HAP', 'X',\n'HAQ', 'X\
',\n'HAR', 'R',\n'HAS', 'X',\n'HAV', 'V',\n'HAX', \
'X',\n'HAZ', 'X',\n'HBA', 'X',\n'HBC', 'X',\n'HBD'\
, 'X',\n'HBI', 'X',\n'HBO', 'X',\n'HBU', 'X',\n'HB\
Y', 'X',\n'HC0', 'X',\n'HC1', 'X',\n'HC4', 'X',\n'\
HCA', 'X',\n'HCC', 'X',\n'HCI', 'X',\n'HCS', 'X',\\
n'HDA', 'X',\n'HDD', 'X',\n'HDF', 'X',\n'HDN', 'X'\
,\n'HDS', 'X',\n'HDZ', 'X',\n'HE1', 'X',\n'HE6', '\
X',\n'HEA', 'X',\n'HEB', 'X',\n'HEC', 'X',\n'HED',\
 'X',\n'HEE', 'X',\n'HEF', 'X',\n'HEG', 'X',\n'HEM\
', 'X',\n'HEN', 'X',\n'HEO', 'X',\n'HEP', 'X',\n'H\
EU', 'X',\n'HEV', 'X',\n'HEX', 'X',\n'HEZ', 'X',\n\
'HF1', 'X',\n'HFA', 'X',\n'HFP', 'X',\n'HGA', 'Q',\
\n'HGB', 'X',\n'HGC', 'X',\n'HGI', 'X',\n'HGU', 'X\
',\n'HHO', 'X',\n'HHP', 'X',\n'HIB', 'X',\n'HIC', \
'H',\n'HII', 'X',\n'HIN', 'X',\n'HIO', 'X',\n'HIP'\
, 'H',\n'HIS', 'H',\n'HLE', 'X',\n'HLT', 'X',\n'HM\
A', 'A',\n'HMB', 'X',\n'HMC', 'X',\n'HMD', 'X',\n'\
HMF', 'A',\n'HMG', 'X',\n'HMH', 'X',\n'HMI', 'L',\\
n'HMM', 'X',\n'HMN', 'X',\n'HMO', 'X',\n'HMP', 'X'\
,\n'HMR', 'R',\n'HNI', 'X',\n'HNP', 'X',\n'HOA', '\
X',\n'HOE', 'X',\n'HOH', 'X',\n'HOM', 'X',\n'HOP',\
 'X',\n'HOQ', 'X',\n'HP1', 'A',\n'HP2', 'A',\n'HP3\
', 'X',\n'HPA', 'X',\n'HPB', 'X',\n'HPC', 'X',\n'H\
PD', 'X',\n'HPE', 'A',\n'HPG', 'X',\n'HPH', 'F',\n\
'HPP', 'X',\n'HPQ', 'F',\n'HPR', 'X',\n'HPT', 'X',\
\n'HPY', 'X',\n'HQO', 'X',\n'HQQ', 'X',\n'HQU', 'X\
',\n'HRG', 'R',\n'HRI', 'X',\n'HSA', 'X',\n'HSE', \
'S',\n'HSF', 'X',\n'HSM', 'X',\n'HSO', 'H',\n'HSP'\
, 'X',\n'HT1', 'X',\n'HT2', 'X',\n'HTA', 'X',\n'HT\
L', 'X',\n'HTO', 'X',\n'HTP', 'X',\n'HTR', 'W',\n'\
HUP', 'X',\n'HUX', 'X',\n'HV5', 'A',\n'HV7', 'X',\\
n'HV8', 'X',\n'HXA', 'X',\n'HXC', 'X',\n'HXP', 'X'\
,\n'HY1', 'X',\n'HYA', 'X',\n'HYB', 'X',\n'HYD', '\
X',\n'HYG', 'X',\n'HYP', 'P',\n'I06', 'X',\n'I10',\
 'X',\n'I11', 'X',\n'I17', 'X',\n'I2P', 'X',\n'I3N\
', 'X',\n'I3P', 'X',\n'I40', 'X',\n'I48', 'X',\n'I\
4B', 'X',\n'I52', 'X',\n'I5P', 'X',\n'I84', 'G',\n\
'IAG', 'G',\n'IAS', 'X',\n'IB2', 'X',\n'IBB', 'X',\
\n'IBP', 'X',\n'IBR', 'X',\n'IBS', 'X',\n'IBZ', 'X\
',\n'IC1', 'X',\n'ICA', 'X',\n'ICI', 'X',\n'ICL', \
'X',\n'ICP', 'X',\n'ICT', 'X',\n'ICU', 'X',\n'ID2'\
, 'X',\n'IDC', 'X',\n'IDG', 'X',\n'IDH', 'X',\n'ID\
M', 'X',\n'IDO', 'X',\n'IDP', 'X',\n'IDR', 'X',\n'\
IDS', 'X',\n'IDT', 'X',\n'IDU', 'X',\n'IFG', 'X',\\
n'IFP', 'X',\n'IGL', 'X',\n'IGN', 'X',\n'IGP', 'X'\
,\n'IGU', 'X',\n'IH1', 'X',\n'IH2', 'X',\n'IH3', '\
X',\n'IHB', 'X',\n'IHN', 'X',\n'IHP', 'X',\n'IIC',\
 'X',\n'IIL', 'I',\n'IIP', 'X',\n'IK2', 'X',\n'IKT\
', 'X',\n'ILA', 'I',\n'ILE', 'I',\n'ILG', 'X',\n'I\
LO', 'X',\n'ILX', 'I',\n'IM1', 'X',\n'IM2', 'X',\n\
'IMC', 'X',\n'IMD', 'X',\n'IME', 'X',\n'IMF', 'X',\
\n'IMG', 'X',\n'IMH', 'X',\n'IMI', 'X',\n'IML', 'I\
',\n'IMM', 'X',\n'IMN', 'X',\n'IMO', 'X',\n'IMP', \
'X',\n'IMR', 'X',\n'IMU', 'X',\n'IN0', 'D',\n'IN1'\
, 'R',\n'IN2', 'K',\n'IN3', 'L',\n'IN4', 'X',\n'IN\
5', 'A',\n'IN6', 'L',\n'IN7', 'X',\n'IN8', 'X',\n'\
IN9', 'X',\n'INA', 'L',\n'INB', 'X',\n'INC', 'X',\\
n'IND', 'X',\n'INE', 'X',\n'INF', 'F',\n'ING', 'F'\
,\n'INH', 'R',\n'INI', 'X',\n'INJ', 'X',\n'INK', '\
X',\n'INL', 'X',\n'INM', 'X',\n'INN', 'A',\n'INO',\
 'X',\n'INP', 'X',\n'INQ', 'X',\n'INR', 'X',\n'INS\
', 'X',\n'INT', 'V',\n'INU', 'X',\n'INV', 'X',\n'I\
NW', 'X',\n'INX', 'X',\n'INY', 'X',\n'INZ', 'X',\n\
'IOA', 'X',\n'IOB', 'X',\n'IOC', 'X',\n'IOD', 'X',\
\n'IOE', 'X',\n'IOF', 'X',\n'IOH', 'X',\n'IOL', 'X\
',\n'IOP', 'X',\n'IP1', 'X',\n'IP2', 'X',\n'IP3', \
'X',\n'IP4', 'X',\n'IPA', 'X',\n'IPB', 'X',\n'IPD'\
, 'X',\n'IPG', 'G',\n'IPH', 'X',\n'IPL', 'X',\n'IP\
M', 'X',\n'IPN', 'X',\n'IPO', 'F',\n'IPP', 'X',\n'\
IPS', 'X',\n'IPT', 'X',\n'IPU', 'X',\n'IPY', 'A',\\
n'IQB', 'X',\n'IQP', 'X',\n'IQS', 'X',\n'IR3', 'X'\
,\n'IRI', 'X',\n'IRP', 'X',\n'ISA', 'X',\n'ISF', '\
X',\n'ISO', 'X',\n'ISP', 'X',\n'ISQ', 'X',\n'ISU',\
 'X',\n'ITM', 'X',\n'ITP', 'X',\n'ITR', 'W',\n'ITS\
', 'X',\n'ITU', 'X',\n'IU5', 'X',\n'IUM', 'X',\n'I\
UR', 'X',\n'IVA', 'X',\n'IYG', 'G',\n'IYR', 'Y',\n\
'J77', 'X',\n'J78', 'X',\n'J80', 'X',\n'JE2', 'X',\
\n'JEN', 'X',\n'JST', 'X',\n'K21', 'X',\n'KAH', 'X\
',\n'KAI', 'X',\n'KAM', 'X',\n'KAN', 'X',\n'KAP', \
'X',\n'KCP', 'X',\n'KCX', 'K',\n'KDO', 'X',\n'KEF'\
, 'X',\n'KET', 'X',\n'KGR', 'X',\n'KH1', 'X',\n'KI\
F', 'X',\n'KIV', 'V',\n'KNI', 'X',\n'KPH', 'K',\n'\
KTH', 'X',\n'KTN', 'X',\n'KTP', 'X',\n'KWT', 'X',\\
n'L04', 'X',\n'L1P', 'X',\n'L24', 'E',\n'L2P', 'X'\
,\n'L34', 'E',\n'L37', 'E',\n'L3P', 'X',\n'L4P', '\
X',\n'L75', 'X',\n'LAC', 'X',\n'LAD', 'X',\n'LAK',\
 'X',\n'LAM', 'X',\n'LAR', 'X',\n'LAT', 'X',\n'LAX\
', 'X',\n'LCO', 'X',\n'LCP', 'X',\n'LCS', 'X',\n'L\
DA', 'X',\n'LDO', 'L',\n'LDP', 'X',\n'LEA', 'X',\n\
'LEO', 'X',\n'LEU', 'L',\n'LG2', 'X',\n'LG6', 'X',\
\n'LGC', 'X',\n'LGP', 'X',\n'LHG', 'X',\n'LHY', 'F\
',\n'LI1', 'X',\n'LIG', 'X',\n'LIL', 'X',\n'LIM', \
'X',\n'LIN', 'X',\n'LIO', 'X',\n'LIP', 'X',\n'LLA'\
, 'X',\n'LLP', 'K',\n'LLY', 'K',\n'LMG', 'X',\n'LM\
L', 'X',\n'LMT', 'X',\n'LMU', 'X',\n'LMZ', 'X',\n'\
LNK', 'X',\n'LNL', 'X',\n'LNO', 'X',\n'LOF', 'X',\\
n'LOL', 'L',\n'LOM', 'X',\n'LOR', 'X',\n'LOS', 'X'\
,\n'LOV', 'L',\n'LOX', 'X',\n'LP1', 'X',\n'LP2', '\
R',\n'LPA', 'X',\n'LPC', 'X',\n'LPF', 'X',\n'LPL',\
 'X',\n'LPM', 'X',\n'LPP', 'X',\n'LRB', 'X',\n'LRU\
', 'X',\n'LS1', 'X',\n'LS2', 'X',\n'LS3', 'X',\n'L\
S4', 'X',\n'LS5', 'X',\n'LTA', 'X',\n'LTL', 'X',\n\
'LTR', 'W',\n'LUM', 'X',\n'LVS', 'L',\n'LXC', 'X',\
\n'LY2', 'X',\n'LY3', 'X',\n'LYA', 'X',\n'LYB', 'X\
',\n'LYC', 'X',\n'LYD', 'X',\n'LYM', 'K',\n'LYN', \
'X',\n'LYS', 'K',\n'LYT', 'X',\n'LYW', 'X',\n'LYZ'\
, 'K',\n'M1A', 'X',\n'M1G', 'X',\n'M2G', 'X',\n'M3\
L', 'K',\n'M6P', 'X',\n'M6T', 'X',\n'M7G', 'X',\n'\
MA1', 'X',\n'MA2', 'X',\n'MA3', 'X',\n'MA4', 'X',\\
n'MA6', 'X',\n'MAA', 'A',\n'MAB', 'X',\n'MAC', 'X'\
,\n'MAE', 'X',\n'MAG', 'X',\n'MAH', 'X',\n'MAI', '\
R',\n'MAK', 'X',\n'MAL', 'X',\n'MAM', 'X',\n'MAN',\
 'X',\n'MAO', 'X',\n'MAP', 'X',\n'MAR', 'X',\n'MAS\
', 'X',\n'MAT', 'X',\n'MAU', 'X',\n'MAZ', 'X',\n'M\
BA', 'X',\n'MBD', 'X',\n'MBG', 'X',\n'MBH', 'X',\n\
'MBN', 'X',\n'MBO', 'X',\n'MBR', 'X',\n'MBS', 'X',\
\n'MBV', 'X',\n'MBZ', 'X',\n'MCA', 'X',\n'MCD', 'X\
',\n'MCE', 'X',\n'MCG', 'G',\n'MCI', 'X',\n'MCN', \
'X',\n'MCP', 'X',\n'MCT', 'X',\n'MCY', 'X',\n'MD2'\
, 'X',\n'MDA', 'X',\n'MDC', 'X',\n'MDG', 'X',\n'MD\
H', 'X',\n'MDL', 'X',\n'MDM', 'X',\n'MDN', 'X',\n'\
MDP', 'X',\n'ME6', 'X',\n'MEB', 'X',\n'MEC', 'X',\\
n'MEL', 'X',\n'MEN', 'N',\n'MEP', 'X',\n'MER', 'X'\
,\n'MES', 'X',\n'MET', 'M',\n'MEV', 'X',\n'MF2', '\
X',\n'MF3', 'M',\n'MFB', 'X',\n'MFD', 'X',\n'MFU',\
 'X',\n'MG7', 'X',\n'MGA', 'X',\n'MGB', 'X',\n'MGD\
', 'X',\n'MGG', 'R',\n'MGL', 'X',\n'MGN', 'Q',\n'M\
GO', 'X',\n'MGP', 'X',\n'MGR', 'X',\n'MGS', 'X',\n\
'MGT', 'X',\n'MGU', 'X',\n'MGY', 'G',\n'MHB', 'X',\
\n'MHF', 'X',\n'MHL', 'L',\n'MHM', 'X',\n'MHO', 'M\
',\n'MHS', 'H',\n'MHZ', 'X',\n'MIA', 'X',\n'MIC', \
'X',\n'MID', 'X',\n'MIL', 'X',\n'MIM', 'X',\n'MIN'\
, 'G',\n'MIP', 'X',\n'MIS', 'S',\n'MIT', 'X',\n'MJ\
I', 'X',\n'MK1', 'X',\n'MKC', 'X',\n'MLA', 'X',\n'\
MLC', 'X',\n'MLE', 'L',\n'MLN', 'X',\n'MLT', 'X',\\
n'MLY', 'K',\n'MLZ', 'K',\n'MM3', 'X',\n'MM4', 'X'\
,\n'MMA', 'X',\n'MMC', 'X',\n'MME', 'M',\n'MMO', '\
R',\n'MMP', 'X',\n'MMQ', 'X',\n'MMT', 'X',\n'MN1',\
 'X',\n'MN2', 'X',\n'MN3', 'X',\n'MN5', 'X',\n'MN7\
', 'X',\n'MN8', 'X',\n'MNA', 'X',\n'MNB', 'X',\n'M\
NC', 'X',\n'MNG', 'X',\n'MNL', 'L',\n'MNO', 'X',\n\
'MNP', 'X',\n'MNQ', 'X',\n'MNS', 'X',\n'MNT', 'X',\
\n'MNV', 'V',\n'MO1', 'X',\n'MO2', 'X',\n'MO3', 'X\
',\n'MO4', 'X',\n'MO5', 'X',\n'MO6', 'X',\n'MOA', \
'X',\n'MOB', 'X',\n'MOC', 'X',\n'MOE', 'X',\n'MOG'\
, 'X',\n'MOH', 'X',\n'MOL', 'X',\n'MOO', 'X',\n'MO\
P', 'X',\n'MOR', 'X',\n'MOS', 'X',\n'MOT', 'X',\n'\
MOX', 'X',\n'MP1', 'X',\n'MP3', 'X',\n'MPA', 'X',\\
n'MPB', 'X',\n'MPC', 'X',\n'MPD', 'X',\n'MPG', 'X'\
,\n'MPH', 'M',\n'MPI', 'X',\n'MPJ', 'M',\n'MPL', '\
X',\n'MPN', 'X',\n'MPO', 'X',\n'MPP', 'X',\n'MPQ',\
 'G',\n'MPR', 'X',\n'MPS', 'X',\n'MQ0', 'X',\n'MQ7\
', 'X',\n'MQ8', 'X',\n'MQ9', 'X',\n'MQI', 'X',\n'M\
R2', 'X',\n'MRC', 'X',\n'MRM', 'X',\n'MRP', 'X',\n\
'MS2', 'X',\n'MSA', 'X',\n'MSB', 'X',\n'MSD', 'X',\
\n'MSE', 'M',\n'MSF', 'X',\n'MSI', 'X',\n'MSO', 'M\
',\n'MSQ', 'X',\n'MST', 'X',\n'MSU', 'X',\n'MTA', \
'X',\n'MTB', 'X',\n'MTC', 'X',\n'MTD', 'X',\n'MTE'\
, 'X',\n'MTF', 'X',\n'MTG', 'X',\n'MTO', 'X',\n'MT\
S', 'X',\n'MTT', 'X',\n'MTX', 'X',\n'MTY', 'Y',\n'\
MUG', 'X',\n'MUP', 'X',\n'MUR', 'X',\n'MVA', 'V',\\
n'MW1', 'X',\n'MW2', 'X',\n'MXA', 'X',\n'MXY', 'X'\
,\n'MYA', 'X',\n'MYC', 'X',\n'MYG', 'X',\n'MYR', '\
X',\n'MYS', 'X',\n'MYT', 'X',\n'MZM', 'X',\n'N1T',\
 'X',\n'N25', 'X',\n'N2B', 'X',\n'N3T', 'X',\n'N4B\
', 'X',\n'NA2', 'X',\n'NA5', 'X',\n'NA6', 'X',\n'N\
AA', 'X',\n'NAB', 'X',\n'NAC', 'X',\n'NAD', 'X',\n\
'NAE', 'X',\n'NAF', 'X',\n'NAG', 'X',\n'NAH', 'X',\
\n'NAI', 'X',\n'NAL', 'A',\n'NAM', 'A',\n'NAN', 'X\
',\n'NAO', 'X',\n'NAP', 'X',\n'NAQ', 'X',\n'NAR', \
'X',\n'NAS', 'X',\n'NAU', 'X',\n'NAV', 'X',\n'NAW'\
, 'X',\n'NAX', 'X',\n'NAY', 'X',\n'NBA', 'X',\n'NB\
D', 'X',\n'NBE', 'X',\n'NBG', 'X',\n'NBN', 'X',\n'\
NBP', 'X',\n'NBS', 'X',\n'NBU', 'X',\n'NCA', 'X',\\
n'NCB', 'A',\n'NCD', 'X',\n'NCH', 'X',\n'NCM', 'X'\
,\n'NCN', 'X',\n'NCO', 'X',\n'NCR', 'X',\n'NCS', '\
X',\n'ND4', 'X',\n'NDA', 'X',\n'NDC', 'X',\n'NDD',\
 'X',\n'NDO', 'X',\n'NDP', 'X',\n'NDT', 'X',\n'NEA\
', 'X',\n'NEB', 'X',\n'NED', 'X',\n'NEM', 'H',\n'N\
EN', 'X',\n'NEO', 'X',\n'NEP', 'H',\n'NEQ', 'X',\n\
'NES', 'X',\n'NET', 'X',\n'NEV', 'X',\n'NFA', 'F',\
\n'NFE', 'X',\n'NFG', 'X',\n'NFP', 'X',\n'NFS', 'X\
',\n'NG6', 'X',\n'NGA', 'X',\n'NGL', 'X',\n'NGM', \
'X',\n'NGO', 'X',\n'NGP', 'X',\n'NGT', 'X',\n'NGU'\
, 'X',\n'NH2', 'X',\n'NH3', 'X',\n'NH4', 'X',\n'NH\
D', 'X',\n'NHE', 'X',\n'NHM', 'X',\n'NHP', 'X',\n'\
NHR', 'X',\n'NHS', 'X',\n'NI1', 'X',\n'NI2', 'X',\\
n'NIC', 'X',\n'NID', 'X',\n'NIK', 'X',\n'NIO', 'X'\
,\n'NIP', 'X',\n'NIT', 'X',\n'NIU', 'X',\n'NIY', '\
Y',\n'NLA', 'X',\n'NLE', 'L',\n'NLG', 'X',\n'NLN',\
 'L',\n'NLP', 'L',\n'NM1', 'X',\n'NMA', 'A',\n'NMB\
', 'X',\n'NMC', 'G',\n'NMD', 'X',\n'NME', 'X',\n'N\
MN', 'X',\n'NMO', 'X',\n'NMQ', 'X',\n'NMX', 'X',\n\
'NMY', 'X',\n'NNH', 'R',\n'NNO', 'X',\n'NO2', 'X',\
\n'NO3', 'X',\n'NOA', 'X',\n'NOD', 'X',\n'NOJ', 'X\
',\n'NON', 'X',\n'NOP', 'X',\n'NOR', 'X',\n'NOS', \
'X',\n'NOV', 'X',\n'NOX', 'X',\n'NP3', 'X',\n'NPA'\
, 'X',\n'NPC', 'X',\n'NPD', 'X',\n'NPE', 'X',\n'NP\
F', 'X',\n'NPH', 'C',\n'NPI', 'X',\n'NPL', 'X',\n'\
NPN', 'X',\n'NPO', 'X',\n'NPP', 'X',\n'NPT', 'X',\\
n'NPY', 'X',\n'NRG', 'R',\n'NRI', 'X',\n'NS1', 'X'\
,\n'NS5', 'X',\n'NSP', 'X',\n'NTA', 'X',\n'NTB', '\
X',\n'NTC', 'X',\n'NTH', 'X',\n'NTM', 'X',\n'NTP',\
 'X',\n'NTS', 'X',\n'NTU', 'X',\n'NTZ', 'X',\n'NU1\
', 'X',\n'NVA', 'V',\n'NVI', 'X',\n'NVP', 'X',\n'N\
W1', 'X',\n'NYP', 'X',\n'O4M', 'X',\n'OAA', 'X',\n\
'OAI', 'X',\n'OAP', 'X',\n'OAR', 'X',\n'OAS', 'S',\
\n'OBA', 'X',\n'OBN', 'X',\n'OC1', 'X',\n'OC2', 'X\
',\n'OC3', 'X',\n'OC4', 'X',\n'OC5', 'X',\n'OC6', \
'X',\n'OC7', 'X',\n'OCL', 'X',\n'OCM', 'X',\n'OCN'\
, 'X',\n'OCO', 'X',\n'OCP', 'X',\n'OCS', 'C',\n'OC\
T', 'X',\n'OCV', 'K',\n'OCY', 'C',\n'ODA', 'X',\n'\
ODS', 'X',\n'OES', 'X',\n'OET', 'X',\n'OF1', 'X',\\
n'OF2', 'X',\n'OF3', 'X',\n'OFL', 'X',\n'OFO', 'X'\
,\n'OHE', 'X',\n'OHO', 'X',\n'OHT', 'X',\n'OIC', '\
X',\n'OIP', 'X',\n'OKA', 'X',\n'OLA', 'X',\n'OLE',\
 'X',\n'OLI', 'X',\n'OLO', 'X',\n'OMB', 'X',\n'OMC\
', 'X',\n'OMD', 'X',\n'OME', 'X',\n'OMG', 'X',\n'O\
MP', 'X',\n'OMT', 'M',\n'OMU', 'X',\n'ONE', 'X',\n\
'ONL', 'L',\n'ONP', 'X',\n'OPA', 'X',\n'OPD', 'X',\
\n'OPE', 'X',\n'OPG', 'X',\n'OPH', 'X',\n'OPN', 'X\
',\n'OPP', 'X',\n'OPR', 'R',\n'ORN', 'X',\n'ORO', \
'X',\n'ORP', 'X',\n'OSB', 'X',\n'OSS', 'X',\n'OTA'\
, 'X',\n'OTB', 'X',\n'OTE', 'X',\n'OTG', 'X',\n'OU\
T', 'X',\n'OVA', 'X',\n'OWQ', 'X',\n'OXA', 'X',\n'\
OXE', 'X',\n'OXI', 'X',\n'OXL', 'X',\n'OXM', 'X',\\
n'OXN', 'X',\n'OXO', 'X',\n'OXP', 'X',\n'OXS', 'X'\
,\n'OXY', 'X',\n'P11', 'A',\n'P24', 'X',\n'P28', '\
X',\n'P2P', 'X',\n'P2U', 'X',\n'P3M', 'X',\n'P4C',\
 'X',\n'P4P', 'X',\n'P5P', 'X',\n'P6G', 'X',\n'PA1\
', 'X',\n'PA2', 'X',\n'PA3', 'X',\n'PA4', 'X',\n'P\
A5', 'X',\n'PAA', 'X',\n'PAB', 'X',\n'PAC', 'X',\n\
'PAD', 'X',\n'PAE', 'X',\n'PAG', 'X',\n'PAH', 'X',\
\n'PAI', 'X',\n'PAL', 'D',\n'PAM', 'X',\n'PAN', 'X\
',\n'PAO', 'X',\n'PAP', 'A',\n'PAQ', 'F',\n'PAR', \
'X',\n'PAS', 'X',\n'PAT', 'W',\n'PBA', 'X',\n'PBB'\
, 'X',\n'PBC', 'X',\n'PBF', 'F',\n'PBG', 'X',\n'PB\
I', 'X',\n'PBM', 'X',\n'PBN', 'X',\n'PBP', 'X',\n'\
PBR', 'X',\n'PBZ', 'X',\n'PC2', 'X',\n'PCA', 'E',\\
n'PCB', 'X',\n'PCD', 'X',\n'PCE', 'X',\n'PCG', 'X'\
,\n'PCH', 'X',\n'PCL', 'X',\n'PCM', 'X',\n'PCP', '\
X',\n'PCR', 'X',\n'PCS', 'X',\n'PCU', 'X',\n'PCV',\
 'X',\n'PCY', 'X',\n'PD1', 'X',\n'PDA', 'X',\n'PDC\
', 'X',\n'PDD', 'A',\n'PDE', 'A',\n'PDI', 'X',\n'P\
DL', 'A',\n'PDN', 'X',\n'PDO', 'X',\n'PDP', 'X',\n\
'PDT', 'X',\n'PDU', 'X',\n'PE2', 'X',\n'PE6', 'X',\
\n'PEA', 'X',\n'PEB', 'X',\n'PEC', 'X',\n'PED', 'X\
',\n'PEE', 'X',\n'PEF', 'X',\n'PEG', 'X',\n'PEL', \
'X',\n'PEO', 'X',\n'PEP', 'X',\n'PEQ', 'X',\n'PER'\
, 'X',\n'PET', 'X',\n'PFB', 'X',\n'PFC', 'X',\n'PF\
G', 'X',\n'PFL', 'X',\n'PFM', 'X',\n'PFZ', 'X',\n'\
PG4', 'X',\n'PG5', 'X',\n'PG6', 'X',\n'PGA', 'X',\\
n'PGC', 'X',\n'PGD', 'X',\n'PGE', 'X',\n'PGG', 'G'\
,\n'PGH', 'X',\n'PGL', 'X',\n'PGO', 'X',\n'PGP', '\
X',\n'PGQ', 'X',\n'PGR', 'X',\n'PGS', 'X',\n'PGU',\
 'X',\n'PGX', 'X',\n'PGY', 'G',\n'PH1', 'X',\n'PH2\
', 'X',\n'PH3', 'X',\n'PHA', 'F',\n'PHB', 'X',\n'P\
HC', 'X',\n'PHD', 'X',\n'PHE', 'F',\n'PHG', 'X',\n\
'PHH', 'X',\n'PHI', 'F',\n'PHL', 'F',\n'PHM', 'X',\
\n'PHN', 'X',\n'PHO', 'X',\n'PHP', 'X',\n'PHQ', 'X\
',\n'PHS', 'H',\n'PHT', 'X',\n'PHW', 'P',\n'PHY', \
'X',\n'PI1', 'X',\n'PI2', 'X',\n'PI3', 'X',\n'PI4'\
, 'X',\n'PI5', 'X',\n'PI6', 'X',\n'PI7', 'X',\n'PI\
8', 'X',\n'PI9', 'X',\n'PIA', 'X',\n'PIB', 'X',\n'\
PIC', 'X',\n'PID', 'X',\n'PIG', 'X',\n'PIH', 'X',\\
n'PIM', 'X',\n'PIN', 'X',\n'PIO', 'X',\n'PIP', 'X'\
,\n'PIQ', 'X',\n'PIR', 'X',\n'PIV', 'X',\n'PKF', '\
X',\n'PL1', 'X',\n'PL9', 'X',\n'PLA', 'D',\n'PLC',\
 'X',\n'PLE', 'L',\n'PLG', 'G',\n'PLH', 'X',\n'PLM\
', 'X',\n'PLP', 'X',\n'PLS', 'S',\n'PLT', 'W',\n'P\
LU', 'L',\n'PLY', 'X',\n'PMA', 'X',\n'PMB', 'X',\n\
'PMC', 'X',\n'PME', 'F',\n'PML', 'X',\n'PMM', 'X',\
\n'PMO', 'X',\n'PMP', 'X',\n'PMS', 'X',\n'PMY', 'X\
',\n'PN2', 'X',\n'PNA', 'X',\n'PNB', 'X',\n'PNC', \
'G',\n'PND', 'X',\n'PNE', 'A',\n'PNF', 'X',\n'PNG'\
, 'X',\n'PNI', 'X',\n'PNL', 'X',\n'PNM', 'X',\n'PN\
N', 'X',\n'PNO', 'X',\n'PNP', 'X',\n'PNQ', 'X',\n'\
PNS', 'X',\n'PNT', 'X',\n'PNU', 'X',\n'PO2', 'X',\\
n'PO4', 'X',\n'POB', 'X',\n'POC', 'X',\n'POL', 'X'\
,\n'POM', 'P',\n'PON', 'X',\n'POP', 'X',\n'POR', '\
X',\n'POS', 'X',\n'PP1', 'X',\n'PP2', 'X',\n'PP3',\
 'A',\n'PP4', 'X',\n'PP5', 'X',\n'PP6', 'X',\n'PP7\
', 'X',\n'PP8', 'N',\n'PP9', 'X',\n'PPB', 'X',\n'P\
PC', 'X',\n'PPD', 'X',\n'PPE', 'E',\n'PPG', 'X',\n\
'PPH', 'F',\n'PPI', 'X',\n'PPJ', 'V',\n'PPL', 'X',\
\n'PPM', 'X',\n'PPN', 'A',\n'PPO', 'X',\n'PPP', 'X\
',\n'PPQ', 'X',\n'PPR', 'X',\n'PPS', 'X',\n'PPT', \
'X',\n'PPU', 'X',\n'PPX', 'F',\n'PPY', 'X',\n'PPZ'\
, 'X',\n'PQ0', 'X',\n'PQN', 'X',\n'PQQ', 'X',\n'PR\
1', 'X',\n'PR2', 'X',\n'PR3', 'X',\n'PRA', 'X',\n'\
PRB', 'X',\n'PRC', 'X',\n'PRD', 'X',\n'PRE', 'X',\\
n'PRF', 'X',\n'PRH', 'X',\n'PRI', 'P',\n'PRL', 'X'\
,\n'PRN', 'X',\n'PRO', 'P',\n'PRP', 'X',\n'PRR', '\
A',\n'PRS', 'P',\n'PRZ', 'X',\n'PS0', 'X',\n'PSA',\
 'X',\n'PSD', 'X',\n'PSE', 'X',\n'PSF', 'S',\n'PSG\
', 'X',\n'PSI', 'X',\n'PSO', 'X',\n'PSQ', 'X',\n'P\
SS', 'X',\n'PST', 'X',\n'PSU', 'X',\n'PT1', 'X',\n\
'PT3', 'X',\n'PTA', 'X',\n'PTC', 'X',\n'PTD', 'X',\
\n'PTE', 'X',\n'PTH', 'Y',\n'PTL', 'X',\n'PTM', 'Y\
',\n'PTN', 'X',\n'PTO', 'X',\n'PTP', 'X',\n'PTR', \
'Y',\n'PTS', 'X',\n'PTT', 'X',\n'PTU', 'X',\n'PTY'\
, 'X',\n'PUA', 'X',\n'PUB', 'X',\n'PUR', 'X',\n'PU\
T', 'X',\n'PVA', 'X',\n'PVB', 'X',\n'PVH', 'H',\n'\
PVL', 'X',\n'PXA', 'X',\n'PXF', 'X',\n'PXG', 'X',\\
n'PXP', 'X',\n'PXY', 'X',\n'PXZ', 'X',\n'PY2', 'X'\
,\n'PY4', 'X',\n'PY5', 'X',\n'PY6', 'X',\n'PYA', '\
A',\n'PYC', 'X',\n'PYD', 'X',\n'PYE', 'X',\n'PYL',\
 'X',\n'PYM', 'X',\n'PYO', 'X',\n'PYP', 'X',\n'PYQ\
', 'X',\n'PYR', 'X',\n'PYS', 'X',\n'PYT', 'X',\n'P\
YX', 'X',\n'PYY', 'X',\n'PYZ', 'X',\n'PZQ', 'X',\n\
'Q82', 'X',\n'QNC', 'X',\n'QND', 'X',\n'QSI', 'Q',\
\n'QTR', 'X',\n'QUA', 'X',\n'QUE', 'X',\n'QUI', 'X\
',\n'QUO', 'X',\n'R11', 'X',\n'R12', 'X',\n'R13', \
'X',\n'R18', 'X',\n'R1P', 'X',\n'R56', 'X',\n'R5P'\
, 'X',\n'RA2', 'X',\n'RAD', 'X',\n'RAI', 'X',\n'RA\
L', 'X',\n'RAM', 'X',\n'RAN', 'X',\n'RAP', 'X',\n'\
RBF', 'X',\n'RBU', 'X',\n'RCA', 'X',\n'RCL', 'X',\\
n'RCO', 'X',\n'RDC', 'X',\n'RDF', 'W',\n'RE9', 'X'\
,\n'REA', 'X',\n'RED', 'K',\n'REO', 'X',\n'REP', '\
X',\n'RET', 'X',\n'RFA', 'X',\n'RFB', 'X',\n'RFL',\
 'X',\n'RFP', 'X',\n'RG1', 'X',\n'RGS', 'X',\n'RH1\
', 'X',\n'RHA', 'X',\n'RHC', 'X',\n'RHD', 'X',\n'R\
HM', 'X',\n'RHO', 'X',\n'RHQ', 'X',\n'RHS', 'X',\n\
'RIA', 'X',\n'RIB', 'X',\n'RIC', 'X',\n'RIF', 'X',\
\n'RIN', 'X',\n'RIP', 'X',\n'RIT', 'X',\n'RMB', 'X\
',\n'RMN', 'X',\n'RMP', 'X',\n'RNG', 'X',\n'RNS', \
'X',\n'RNT', 'X',\n'RO2', 'X',\n'RO4', 'X',\n'ROC'\
, 'N',\n'ROI', 'X',\n'ROM', 'X',\n'RON', 'V',\n'RO\
P', 'X',\n'ROS', 'X',\n'ROX', 'X',\n'RPA', 'X',\n'\
RPD', 'X',\n'RPH', 'X',\n'RPL', 'X',\n'RPP', 'X',\\
n'RPR', 'X',\n'RPX', 'X',\n'RQ3', 'X',\n'RR1', 'X'\
,\n'RR6', 'X',\n'RRS', 'X',\n'RS1', 'X',\n'RS2', '\
X',\n'RS7', 'X',\n'RSS', 'X',\n'RTA', 'X',\n'RTB',\
 'X',\n'RTC', 'X',\n'RTL', 'X',\n'RUB', 'X',\n'RUN\
', 'X',\n'RWJ', 'X',\n'RXP', 'X',\n'S02', 'X',\n'S\
11', 'X',\n'S1H', 'S',\n'S27', 'X',\n'S2C', 'C',\n\
'S3P', 'X',\n'S4U', 'X',\n'S57', 'X',\n'S58', 'X',\
\n'S5H', 'X',\n'S6G', 'X',\n'S80', 'X',\n'SAA', 'X\
',\n'SAB', 'X',\n'SAC', 'S',\n'SAD', 'X',\n'SAE', \
'X',\n'SAF', 'X',\n'SAH', 'C',\n'SAI', 'C',\n'SAL'\
, 'X',\n'SAM', 'M',\n'SAN', 'X',\n'SAP', 'X',\n'SA\
R', 'X',\n'SAS', 'X',\n'SB1', 'X',\n'SB2', 'X',\n'\
SB3', 'X',\n'SB4', 'X',\n'SB5', 'X',\n'SB6', 'X',\\
n'SBA', 'L',\n'SBB', 'X',\n'SBD', 'A',\n'SBI', 'X'\
,\n'SBL', 'A',\n'SBN', 'X',\n'SBO', 'X',\n'SBR', '\
X',\n'SBS', 'X',\n'SBT', 'X',\n'SBU', 'X',\n'SBX',\
 'X',\n'SC4', 'X',\n'SCA', 'X',\n'SCC', 'X',\n'SCD\
', 'X',\n'SCH', 'C',\n'SCI', 'X',\n'SCL', 'X',\n'S\
CM', 'X',\n'SCN', 'X',\n'SCO', 'X',\n'SCP', 'S',\n\
'SCR', 'X',\n'SCS', 'X',\n'SCV', 'C',\n'SCY', 'C',\
\n'SD8', 'X',\n'SDK', 'X',\n'SDZ', 'X',\n'SE4', 'X\
',\n'SEA', 'X',\n'SEB', 'S',\n'SEC', 'X',\n'SEG', \
'A',\n'SEI', 'X',\n'SEL', 'S',\n'SEM', 'X',\n'SEO'\
, 'X',\n'SEP', 'S',\n'SER', 'S',\n'SES', 'X',\n'SE\
T', 'S',\n'SEU', 'X',\n'SF4', 'X',\n'SFG', 'X',\n'\
SFN', 'X',\n'SFO', 'X',\n'SGA', 'X',\n'SGC', 'X',\\
n'SGL', 'X',\n'SGM', 'X',\n'SGN', 'X',\n'SGP', 'X'\
,\n'SHA', 'X',\n'SHC', 'X',\n'SHF', 'X',\n'SHH', '\
X',\n'SHP', 'G',\n'SHR', 'E',\n'SHT', 'T',\n'SHU',\
 'X',\n'SI2', 'X',\n'SIA', 'X',\n'SIF', 'X',\n'SIG\
', 'X',\n'SIH', 'X',\n'SIM', 'X',\n'SIN', 'X',\n'S\
KD', 'X',\n'SKF', 'X',\n'SLB', 'X',\n'SLE', 'X',\n\
'SLZ', 'K',\n'SMA', 'X',\n'SMC', 'C',\n'SME', 'M',\
\n'SML', 'X',\n'SMM', 'M',\n'SMN', 'X',\n'SMP', 'X\
',\n'SMS', 'X',\n'SN1', 'X',\n'SN6', 'X',\n'SN7', \
'X',\n'SNC', 'C',\n'SNN', 'X',\n'SNP', 'X',\n'SO1'\
, 'X',\n'SO2', 'X',\n'SO3', 'X',\n'SO4', 'X',\n'SO\
A', 'X',\n'SOC', 'C',\n'SOM', 'X',\n'SOR', 'X',\n'\
SOT', 'X',\n'SOX', 'X',\n'SPA', 'X',\n'SPB', 'X',\\
n'SPC', 'X',\n'SPD', 'X',\n'SPE', 'X',\n'SPG', 'X'\
,\n'SPH', 'X',\n'SPI', 'X',\n'SPK', 'X',\n'SPM', '\
X',\n'SPN', 'X',\n'SPO', 'X',\n'SPP', 'X',\n'SPS',\
 'X',\n'SPY', 'X',\n'SQU', 'X',\n'SRA', 'X',\n'SRB\
', 'X',\n'SRD', 'X',\n'SRL', 'X',\n'SRM', 'X',\n'S\
RS', 'X',\n'SRY', 'X',\n'SSA', 'X',\n'SSB', 'X',\n\
'SSG', 'X',\n'SSP', 'X',\n'ST1', 'X',\n'ST2', 'X',\
\n'ST3', 'X',\n'ST4', 'X',\n'ST5', 'X',\n'ST6', 'X\
',\n'STA', 'X',\n'STB', 'X',\n'STE', 'X',\n'STG', \
'X',\n'STI', 'X',\n'STL', 'X',\n'STN', 'X',\n'STO'\
, 'X',\n'STP', 'X',\n'STR', 'X',\n'STU', 'X',\n'ST\
Y', 'Y',\n'SU1', 'X',\n'SU2', 'X',\n'SUC', 'X',\n'\
SUI', 'X',\n'SUL', 'X',\n'SUR', 'X',\n'SVA', 'S',\\
n'SWA', 'X',\n'T16', 'X',\n'T19', 'X',\n'T23', 'X'\
,\n'T29', 'X',\n'T33', 'X',\n'T3P', 'X',\n'T42', '\
A',\n'T44', 'X',\n'T5A', 'X',\n'T6A', 'T',\n'T6P',\
 'X',\n'T80', 'X',\n'T87', 'X',\n'TA1', 'X',\n'TAA\
', 'X',\n'TAB', 'X',\n'TAC', 'X',\n'TAD', 'X',\n'T\
AF', 'X',\n'TAM', 'X',\n'TAP', 'X',\n'TAR', 'X',\n\
'TAS', 'X',\n'TAU', 'X',\n'TAX', 'X',\n'TAZ', 'X',\
\n'TB9', 'X',\n'TBA', 'X',\n'TBD', 'X',\n'TBG', 'G\
',\n'TBH', 'X',\n'TBM', 'T',\n'TBO', 'X',\n'TBP', \
'X',\n'TBR', 'X',\n'TBS', 'X',\n'TBT', 'X',\n'TBU'\
, 'X',\n'TBZ', 'X',\n'TC4', 'X',\n'TCA', 'X',\n'TC\
B', 'X',\n'TCH', 'X',\n'TCK', 'X',\n'TCL', 'X',\n'\
TCM', 'X',\n'TCN', 'X',\n'TCP', 'X',\n'TCR', 'W',\\
n'TCS', 'X',\n'TCZ', 'X',\n'TDA', 'X',\n'TDB', 'X'\
,\n'TDG', 'X',\n'TDP', 'X',\n'TDR', 'X',\n'TDX', '\
X',\n'TEA', 'X',\n'TEM', 'X',\n'TEN', 'X',\n'TEO',\
 'X',\n'TEP', 'X',\n'TER', 'X',\n'TES', 'X',\n'TET\
', 'X',\n'TFA', 'X',\n'TFB', 'X',\n'TFH', 'X',\n'T\
FI', 'X',\n'TFK', 'X',\n'TFP', 'X',\n'THA', 'X',\n\
'THB', 'X',\n'THC', 'T',\n'THD', 'X',\n'THE', 'X',\
\n'THF', 'X',\n'THJ', 'X',\n'THK', 'X',\n'THM', 'X\
',\n'THN', 'X',\n'THO', 'T',\n'THP', 'X',\n'THQ', \
'X',\n'THR', 'T',\n'THS', 'X',\n'THT', 'X',\n'THU'\
, 'X',\n'THX', 'X',\n'THZ', 'X',\n'TI1', 'X',\n'TI\
2', 'X',\n'TI3', 'P',\n'TIA', 'X',\n'TIH', 'A',\n'\
TK4', 'X',\n'TLA', 'X',\n'TLC', 'X',\n'TLM', 'X',\\
n'TLN', 'X',\n'TLX', 'X',\n'TM5', 'X',\n'TM6', 'X'\
,\n'TMA', 'X',\n'TMB', 'T',\n'TMC', 'X',\n'TMD', '\
T',\n'TME', 'X',\n'TMF', 'X',\n'TML', 'K',\n'TMM',\
 'X',\n'TMN', 'X',\n'TMP', 'X',\n'TMQ', 'X',\n'TMR\
', 'X',\n'TMT', 'X',\n'TMZ', 'X',\n'TNB', 'C',\n'T\
ND', 'X',\n'TNK', 'X',\n'TNP', 'X',\n'TNT', 'X',\n\
'TOA', 'X',\n'TOB', 'X',\n'TOC', 'X',\n'TOL', 'X',\
\n'TOP', 'X',\n'TOS', 'X',\n'TOT', 'X',\n'TP1', 'G\
',\n'TP2', 'P',\n'TP3', 'E',\n'TP4', 'E',\n'TP7', \
'T',\n'TPA', 'X',\n'TPE', 'X',\n'TPF', 'X',\n'TPI'\
, 'X',\n'TPL', 'W',\n'TPM', 'X',\n'TPN', 'G',\n'TP\
O', 'T',\n'TPP', 'X',\n'TPQ', 'A',\n'TPR', 'P',\n'\
TPS', 'X',\n'TPT', 'X',\n'TPV', 'X',\n'TPX', 'X',\\
n'TPY', 'X',\n'TQ3', 'X',\n'TQ4', 'X',\n'TQ5', 'X'\
,\n'TQ6', 'X',\n'TR1', 'X',\n'TRA', 'X',\n'TRB', '\
X',\n'TRC', 'X',\n'TRD', 'X',\n'TRE', 'X',\n'TRF',\
 'W',\n'TRG', 'K',\n'TRH', 'X',\n'TRI', 'X',\n'TRJ\
', 'X',\n'TRM', 'X',\n'TRN', 'W',\n'TRO', 'W',\n'T\
RP', 'W',\n'TRQ', 'X',\n'TRS', 'X',\n'TRX', 'W',\n\
'TRZ', 'X',\n'TS2', 'X',\n'TS3', 'X',\n'TS4', 'X',\
\n'TS5', 'X',\n'TSA', 'X',\n'TSB', 'X',\n'TSI', 'X\
',\n'TSM', 'X',\n'TSN', 'X',\n'TSP', 'X',\n'TSU', \
'X',\n'TTA', 'X',\n'TTE', 'X',\n'TTN', 'X',\n'TTO'\
, 'X',\n'TTP', 'X',\n'TTX', 'X',\n'TXL', 'X',\n'TY\
A', 'Y',\n'TYB', 'Y',\n'TYD', 'X',\n'TYI', 'Y',\n'\
TYL', 'X',\n'TYM', 'W',\n'TYN', 'Y',\n'TYQ', 'Y',\\
n'TYR', 'Y',\n'TYS', 'Y',\n'TYV', 'X',\n'TYY', 'A'\
,\n'TZB', 'X',\n'TZC', 'X',\n'TZE', 'X',\n'TZL', '\
X',\n'TZO', 'X',\n'TZP', 'X',\n'U01', 'X',\n'U02',\
 'X',\n'U03', 'X',\n'U04', 'X',\n'U05', 'X',\n'U0E\
', 'X',\n'U10', 'X',\n'U18', 'X',\n'U2G', 'X',\n'U\
3P', 'X',\n'U49', 'X',\n'U55', 'X',\n'U5P', 'X',\n\
'U66', 'X',\n'U89', 'X',\n'U8U', 'X',\n'UAA', 'X',\
\n'UAG', 'A',\n'UAP', 'X',\n'UAR', 'X',\n'UC1', 'X\
',\n'UC2', 'X',\n'UC3', 'X',\n'UC4', 'X',\n'UD1', \
'X',\n'UD2', 'X',\n'UDP', 'X',\n'UDX', 'X',\n'UFG'\
, 'X',\n'UFM', 'X',\n'UFP', 'X',\n'UGA', 'X',\n'UI\
N', 'X',\n'UKP', 'A',\n'UM3', 'X',\n'UMA', 'A',\n'\
UMG', 'X',\n'UMP', 'X',\n'UNA', 'X',\n'UND', 'X',\\
n'UNI', 'X',\n'UNK', 'X',\n'UNN', 'X',\n'UNX', 'X'\
,\n'UP5', 'X',\n'UP6', 'X',\n'UPA', 'X',\n'UPF', '\
X',\n'UPG', 'X',\n'UPP', 'X',\n'UQ1', 'X',\n'UQ2',\
 'X',\n'UQ6', 'X',\n'UR2', 'X',\n'URA', 'X',\n'URE\
', 'X',\n'URF', 'X',\n'URI', 'X',\n'URS', 'X',\n'U\
TP', 'X',\n'UVC', 'X',\n'UVW', 'X',\n'V35', 'X',\n\
'V36', 'X',\n'V4O', 'X',\n'V7O', 'X',\n'VAA', 'V',\
\n'VAC', 'X',\n'VAD', 'V',\n'VAF', 'V',\n'VAG', 'X\
',\n'VAL', 'V',\n'VAN', 'X',\n'VAS', 'X',\n'VAX', \
'X',\n'VDX', 'X',\n'VDY', 'X',\n'VG1', 'X',\n'VIB'\
, 'X',\n'VIR', 'X',\n'VIT', 'X',\n'VK3', 'X',\n'VO\
3', 'X',\n'VO4', 'X',\n'VS1', 'F',\n'VS2', 'F',\n'\
VS3', 'F',\n'VS4', 'F',\n'VXA', 'X',\n'W01', 'X',\\
n'W02', 'X',\n'W03', 'X',\n'W11', 'X',\n'W33', 'X'\
,\n'W35', 'X',\n'W42', 'X',\n'W43', 'X',\n'W54', '\
X',\n'W56', 'X',\n'W59', 'X',\n'W71', 'X',\n'W84',\
 'X',\n'W8R', 'X',\n'W91', 'X',\n'WAY', 'X',\n'WCC\
', 'X',\n'WO2', 'X',\n'WO4', 'X',\n'WRB', 'X',\n'W\
RR', 'X',\n'WRS', 'X',\n'WW7', 'X',\n'X2F', 'X',\n\
'X7O', 'X',\n'XAA', 'X',\n'XAN', 'X',\n'XAO', 'X',\
\n'XBB', 'X',\n'XBP', 'X',\n'XDN', 'X',\n'XDP', 'X\
',\n'XIF', 'X',\n'XIM', 'X',\n'XK2', 'X',\n'XL1', \
'X',\n'XLS', 'X',\n'XMP', 'X',\n'XN1', 'X',\n'XN2'\
, 'X',\n'XN3', 'X',\n'XUL', 'X',\n'XV6', 'X',\n'XY\
D', 'X',\n'XYH', 'X',\n'XYL', 'X',\n'XYP', 'X',\n'\
XYS', 'X',\n'YOF', 'Y',\n'YRR', 'X',\n'YT3', 'X',\\
n'YZ9', 'X',\n'Z34', 'G',\n'Z5A', 'X',\n'ZAF', 'X'\
,\n'ZAP', 'X',\n'ZEB', 'X',\n'ZEN', 'X',\n'ZES', '\
X',\n'ZID', 'X',\n'ZMR', 'X',\n'ZN3', 'X',\n'ZNH',\
 'X',\n'ZNO', 'X',\n'ZO3', 'X',\n'ZPR', 'P',\n'ZRA\
', 'A',\n'ZST', 'X',\n'ZYA', 'A',\n\n\n'ASN','N');\
\n} \n        \n","\n\nuse Env qw(HOST);\nuse Env qw(HO\
ME);\nuse Env qw(USER);\n\n\nopen (F,$ARGV[0]);\nw\
hile ( <>)\n  {\n    @x=/([^:,;\\)\\(\\s]+):[^:,;\\
\)\\(]*/g;\n    @list=(@list,@x);\n  }\n$n=$#list+\
1;\nforeach $n(@list){print \">$n\\nsequence\\n\";\
}\n\n\nclose (F);\n","open (F, $ARGV[0]);\n\nwhile\
 ( <F>)\n  {\n    @l=($_=~/(\\S+)/g);\n    \n    $\
name=shift @l;\n    \n    print STDOUT \"\\n>$name\
\\n\";\n    foreach $e (@l){$e=($e eq \"0\")?\"O\"\
:\"I\";print \"$e\";}\n  }\nclose (F);\n\n                  \
 \n    \n","use Env qw(HOST);\nuse Env qw(HOME);\n\
use Env qw(USER);\n\n$tmp=\"$ARGV[0].$$\";\nopen (\
IN, $ARGV[0]);\nopen (OUT, \">$tmp\");\n\nwhile ( \
<IN>)\n  {\n    $file=$_;\n    $file=~s/\\r\\n/\\n\
/g;\n    $file=~s/\\n\\r/\\n/g;\n    $file=~s/\\r\\
\r/\\n/g;\n    $file=~s/\\r/\\n/g;\n    print OUT \
\"$file\";\n  }\nclose (IN);\nclose (OUT);\n\nopen\
 (OUT, \">$ARGV[0]\");\nopen (IN, \"$tmp\");\n\nwh\
ile ( <IN>)\n{\n  print OUT \"$_\";\n}\nclose (IN)\
;\nclose (OUT);\nunlink ($tmp);\n\n"};
/*********************************COPYRIGHT NOTICE**********************************/
/* Centre National de la Recherche Scientifique (CNRS) */
/*and */
/*Cedric Notredame */
/*Fri Oct 26 17:03:04     2007. */
/*All rights reserved.*/
/*This file is part of T-COFFEE.*/
/*    T-COFFEE is free software; you can redistribute it and/or modify*/
/*    it under the terms of the GNU General Public License as published by*/
/*    the Free Software Foundation; either version 2 of the License, or*/
/*    (at your option) any later version.*/
/*    T-COFFEE is distributed in the hope that it will be useful,*/
/*    but WITHOUT ANY WARRANTY; without even the implied warranty of*/
/*    GNU General Public License for more details.*/
/*    You should have received a copy of the GNU General Public License*/
/*    along with Foobar; if not, write to the Free Software*/
/*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/
/*...............................................                                                                                      |*/
/*  If you need some more information*/
/*  cedric.notredame@europe.com*/
/*...............................................                                                                                                                                     |*/
/*    */
/*********************************COPYRIGHT NOTICE**********************************/

Generated by  Doxygen 1.6.0   Back to index